mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-02-02 00:46:44 +01:00
Introduzione Eloquent in Interventi
This commit is contained in:
parent
22f69746d7
commit
8ea1127625
@ -56,10 +56,14 @@
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"": "src/",
|
||||
"Modules\\Fatture\\": "modules/fatture/src",
|
||||
"Modules\\Fatture\\Custom\\": "modules/fatture/custom/src",
|
||||
"Modules\\Anagrafiche\\": "modules/anagrafiche/src",
|
||||
"Modules\\Anagrafiche\\Custom\\": "modules/anagrafiche/custom/src",
|
||||
"Modules\\Articoli\\": "modules/articoli/src",
|
||||
"Modules\\Articoli\\Custom\\": "modules/articoli/custom/src",
|
||||
"Modules\\Fatture\\": "modules/fatture/src",
|
||||
"Modules\\Fatture\\Custom\\": "modules/fatture/custom/src",
|
||||
"Modules\\Interventi\\": "modules/interventi/src",
|
||||
"Modules\\Interventi\\Custom\\": "modules/interventi/custom/src",
|
||||
"Plugins\\Fatturazione\\": "plugins/fatturazione/src",
|
||||
"Plugins\\Fatturazione\\Custom\\": "plugins/fatturazione/custom/src"
|
||||
},
|
||||
|
56
modules/articoli/src/Articolo.php
Normal file
56
modules/articoli/src/Articolo.php
Normal file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Articoli;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Modules\Articoli\Articolo as ArticoloIntervento;
|
||||
|
||||
class Articolo extends Model
|
||||
{
|
||||
protected $table = 'mg_articoli';
|
||||
|
||||
/**
|
||||
* Funzione per inserire i movimenti di magazzino.
|
||||
*/
|
||||
public function movimenta($qta, $descrizone = null, $data = null, $manuale = false)
|
||||
{
|
||||
$this->registra($qta, $descrizone, $data, $manuale);
|
||||
|
||||
if ($this->servizio == 0) {
|
||||
$this->qta += $qta;
|
||||
|
||||
$this->save();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Funzione per registrare i movimenti di magazzino.
|
||||
*/
|
||||
public function registra($qta, $descrizone = null, $data = null, $manuale = false, $array = [])
|
||||
{
|
||||
if (empty($qta)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Movimento il magazzino solo se l'articolo non è un servizio
|
||||
if ($this->servizio == 0) {
|
||||
// Registrazione della movimentazione
|
||||
database()->insert('mg_movimenti', array_merge($array, [
|
||||
'idarticolo' => $this->id,
|
||||
'qta' => $qta,
|
||||
'movimento' => $descrizone,
|
||||
'data' => $data,
|
||||
'manuale' => $manuale,
|
||||
]));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function articolo()
|
||||
{
|
||||
return $this->hasMany(ArticoloIntervento::class, 'idarticolo');
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ namespace Modules\Fatture;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Util\Generator;
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
|
||||
class Fattura extends Model
|
||||
{
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
use Modules\Interventi\Articolo;
|
||||
|
||||
include_once Modules::filepath('Interventi', 'modutil.php');
|
||||
include_once Modules::filepath('Articoli', 'modutil.php');
|
||||
include_once Modules::filepath('MyImpianti', 'modutil.php');
|
||||
@ -531,48 +533,28 @@ switch (post('op')) {
|
||||
|
||||
// no break
|
||||
case 'addarticolo':
|
||||
$idarticolo = post('idarticolo');
|
||||
$idautomezzo = post('idautomezzo');
|
||||
$descrizione = post('descrizione');
|
||||
$idimpianto = post('idimpianto');
|
||||
$qta = post('qta');
|
||||
$um = post('um');
|
||||
$prezzo_vendita = post('prezzo_vendita');
|
||||
$idiva = post('idiva');
|
||||
|
||||
$sconto_unitario = post('sconto');
|
||||
$tipo_sconto = post('tipo_sconto');
|
||||
$sconto = calcola_sconto([
|
||||
'sconto' => $sconto_unitario,
|
||||
'prezzo' => $prezzo_vendita,
|
||||
'tipo' => $tipo_sconto,
|
||||
'qta' => $qta,
|
||||
$articolo = Articolo::create([
|
||||
'idarticolo' => post('idarticolo'),
|
||||
'idintervento' => $id_record,
|
||||
'idautomezzo' => post('idautomezzo'),
|
||||
'qta' => post('qta'),
|
||||
'descrizione' => post('descrizione'),
|
||||
'prezzo' => post('prezzo_vendita'),
|
||||
'um' => post('um'),
|
||||
]);
|
||||
|
||||
// Decremento la quantità
|
||||
add_movimento_magazzino($idarticolo, -$qta, ['idautomezzo' => $idautomezzo, 'idintervento' => $id_record]);
|
||||
$articolo->setSconto(post('sconto'), post('tipo_sconto'));
|
||||
$articolo->setIVA(post('idiva'));
|
||||
|
||||
// Aggiorno l'automezzo dell'intervento
|
||||
$dbo->query('UPDATE in_interventi SET idautomezzo='.prepare($idautomezzo).' WHERE id='.prepare($id_record).' '.Modules::getAdditionalsQuery($id_module));
|
||||
|
||||
$rsart = $dbo->fetchArray('SELECT abilita_serial, prezzo_acquisto FROM mg_articoli WHERE id='.prepare($idarticolo));
|
||||
$prezzo_acquisto = $rsart[0]['prezzo_acquisto'];
|
||||
|
||||
//Calcolo iva
|
||||
$rs_iva = $dbo->fetchArray('SELECT * FROM co_iva WHERE id='.prepare($idiva));
|
||||
$desc_iva = $rs_iva[0]['descrizione'];
|
||||
|
||||
$iva = (($prezzo_vendita * $qta) - $sconto) * $rs_iva[0]['percentuale'] / 100;
|
||||
|
||||
// Aggiunto il collegamento fra l'articolo e l'intervento
|
||||
$idriga = $dbo->query('INSERT INTO mg_articoli_interventi(idarticolo, idintervento, idimpianto, idautomezzo, descrizione, prezzo_vendita, prezzo_acquisto, sconto, sconto_unitario, tipo_sconto, idiva, desc_iva, iva, qta, um, abilita_serial) VALUES ('.prepare($idarticolo).', '.prepare($id_record).', '.(empty($idimpianto) ? 'NULL' : prepare($idimpianto)).', '.prepare($idautomezzo).', '.prepare($descrizione).', '.prepare($prezzo_vendita).', '.prepare($prezzo_acquisto).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($qta).', '.prepare($um).', '.prepare($rsart[0]['abilita_serial']).')');
|
||||
$dbo->query('UPDATE in_interventi SET idautomezzo='.prepare(post('idautomezzo')).' WHERE id='.prepare($id_record).' '.Modules::getAdditionalsQuery($id_module));
|
||||
|
||||
if (!empty($serials)) {
|
||||
if ($old_qta > $qta) {
|
||||
$serials = array_slice($serials, 0, $qta);
|
||||
}
|
||||
|
||||
$dbo->sync('mg_prodotti', ['id_riga_intervento' => $idriga, 'dir' => 'entrata', 'id_articolo' => $idarticolo], ['serial' => $serials]);
|
||||
$articolo->setSerials($serials);
|
||||
}
|
||||
|
||||
link_componente_to_articolo($id_record, $idimpianto, $idarticolo, $qta);
|
||||
|
@ -52,33 +52,13 @@ switch ($resource) {
|
||||
case 'articolo_intervento':
|
||||
$data = $request['data'];
|
||||
|
||||
// Inserisco movimento generico per questo articolo
|
||||
add_movimento_magazzino($data['id_articolo'], $data['qta'], [
|
||||
'idintervento' => $data['id_intervento'],
|
||||
'idautomezzo' => $data['id_automezzo'],
|
||||
], 'Movimento da APP - Intervento '.$data['idintervento'], $data['data']);
|
||||
|
||||
// collego articolo all'intervento in questione
|
||||
$q = "INSERT INTO mg_articoli_interventi(
|
||||
idarticolo,
|
||||
idintervento,
|
||||
descrizione,
|
||||
prezzo_vendita,
|
||||
idiva_vendita,
|
||||
idautomezzo,
|
||||
qta
|
||||
) VALUES(
|
||||
'".$data['id_articolo']."',
|
||||
'".$data['id_intervento']."',
|
||||
(SELECT descrizione FROM mg_articoli WHERE mg_articoli.id=\"".$data['id_articolo'].'"),
|
||||
(SELECT prezzo_vendita FROM mg_articoli WHERE mg_articoli.id="'.$data['id_articolo']."\"),
|
||||
(SELECT valore FROM `zz_impostazioni` WHERE nome=\"Iva predefinita\"),
|
||||
'".$data['id_automezzo']."',
|
||||
'".$data['qta']."'
|
||||
)";
|
||||
$dbo->query($q);
|
||||
|
||||
$dbo->query('UPDATE mg_articoli SET qta=(qta - '.$data['qta'].") WHERE id='".$data['id_articolo']."'");
|
||||
$articolo = Articolo::create([
|
||||
'idarticolo' => $data['idarticolo'],
|
||||
'idintervento' => $id_record,
|
||||
'idautomezzo' => $data['idautomezzo'],
|
||||
'qta' => $data['qta'],
|
||||
'um' => $data['um'],
|
||||
]);
|
||||
|
||||
break;
|
||||
}
|
||||
|
24
modules/interventi/api/delete.php
Normal file
24
modules/interventi/api/delete.php
Normal file
@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
switch ($resource) {
|
||||
case 'sessioni_intervento':
|
||||
$dbo->query('DELETE FROM in_interventi_tecnici WHERE idintervento = :id_intervento', [
|
||||
':id_intervento' => $request['id_intervento'],
|
||||
]);
|
||||
|
||||
break;
|
||||
|
||||
case 'articoli_intervento':
|
||||
$dbo->query('DELETE FROM mg_articoli_interventi WHERE idintervento = :id_intervento', [
|
||||
':id_intervento' => $request['id_intervento'],
|
||||
]);
|
||||
|
||||
// TODO: prevedere la modifica di quantità!
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return [
|
||||
'sessioni_intervento',
|
||||
'articoli_intervento',
|
||||
];
|
@ -56,26 +56,25 @@ switch ($resource) {
|
||||
`in_interventi`.`descrizione`,
|
||||
`in_interventi`.`idtipointervento`,
|
||||
`in_interventi`.`idanagrafica`,
|
||||
`an_anagrafiche`.`idzona` AS zona_anagrafica,
|
||||
`in_interventi`.`idautomezzo`,
|
||||
`in_interventi`.`idsede`,
|
||||
`an_sedi`.`idzona` AS zona_sede,
|
||||
`in_interventi`.`idstatointervento`,
|
||||
`in_interventi`.`informazioniaggiuntive`,
|
||||
`in_interventi`.`idclientefinale`,
|
||||
`in_interventi`.`firma_file`,
|
||||
IF(firma_data = '0000-00-00 00:00:00', '', firma_data) AS `firma_data`,
|
||||
`in_interventi`.firma_nome,
|
||||
(SELECT GROUP_CONCAT( CONCAT(my_impianti.matricola, ' - ', my_impianti.nome) SEPARATOR ', ') FROM (my_impianti_interventi INNER JOIN my_impianti ON my_impianti_interventi.idimpianto=my_impianti.id) WHERE my_impianti_interventi.idintervento=`in_interventi`.`id`) AS `impianti`,
|
||||
(SELECT MAX(`orario_fine`) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento`=`in_interventi`.`id`) AS `data`,
|
||||
(SELECT GROUP_CONCAT(ragione_sociale SEPARATOR ', ') FROM `in_interventi_tecnici` INNER JOIN `an_anagrafiche` ON `in_interventi_tecnici`.`idtecnico`=`an_anagrafiche`.`idanagrafica` WHERE `in_interventi_tecnici`.`idintervento`=`in_interventi`.`id`) AS `tecnici`,
|
||||
(SELECT GROUP_CONCAT( CONCAT(my_impianti.matricola, ' - ', my_impianti.nome) SEPARATOR ', ') FROM (my_impianti_interventi INNER JOIN my_impianti ON my_impianti_interventi.idimpianto=my_impianti.id) WHERE my_impianti_interventi.idintervento = `in_interventi`.`id`) AS `impianti`,
|
||||
(SELECT MAX(`orario_fine`) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`) AS `data`,
|
||||
(SELECT GROUP_CONCAT(ragione_sociale SEPARATOR ', ') FROM `in_interventi_tecnici` INNER JOIN `an_anagrafiche` ON `in_interventi_tecnici`.`idtecnico` = `an_anagrafiche`.`idanagrafica` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`) AS `tecnici`,
|
||||
`in_statiintervento`.`colore` AS `bgcolor`,
|
||||
`in_statiintervento`.`descrizione` AS `stato`,
|
||||
`in_interventi`.`idtipointervento` AS `tipo`
|
||||
FROM `in_interventi`
|
||||
INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento`=`in_statiintervento`.`idstatointervento`
|
||||
INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`
|
||||
LEFT JOIN `an_sedi` ON `in_interventi`.`idsede`=`an_sedi`.`id`
|
||||
WHERE (SELECT MAX(`orario_fine`) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento`=`in_interventi`.`id`) <= :period_end";
|
||||
INNER JOIN `in_statiintervento` ON `in_interventi`.`idstatointervento` = `in_statiintervento`.`idstatointervento`
|
||||
INNER JOIN `an_anagrafiche` ON `in_interventi`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`
|
||||
LEFT JOIN `an_sedi` ON `in_interventi`.`idsede` = `an_sedi`.`id`
|
||||
WHERE (SELECT MAX(`orario_fine`) FROM `in_interventi_tecnici` WHERE `in_interventi_tecnici`.`idintervento` = `in_interventi`.`id`) <= :period_end";
|
||||
|
||||
// TODO: rimosse seguenti clausole:
|
||||
|
||||
|
@ -63,7 +63,7 @@ switch ($resource) {
|
||||
|
||||
$dbo->insert('in_interventi', [
|
||||
'idintervento' => $idintervento,
|
||||
'#idanagrafica' => "(SELECT valore FROM zz_impostazioni WHERE nome='Azienda predefinita')",
|
||||
'#idanagrafica' => "(SELECT valore FROM zz_settings WHERE nome='Azienda predefinita')",
|
||||
'#data_richiesta' => 'NOW()',
|
||||
'richiesta' => $richiesta,
|
||||
'idtipointervento' => 0,
|
||||
@ -111,8 +111,6 @@ switch ($resource) {
|
||||
'informazioniaggiuntive' => $data['informazioniaggiuntive'],
|
||||
], ['id' => $data['id']]);
|
||||
|
||||
// $dbo->query( 'DELETE FROM in_interventi_tecnici WHERE idintervento='.prepare($record['id']).' AND idtecnico='.prepare($idtecnico) );
|
||||
|
||||
break;
|
||||
|
||||
case 'firma_intervento':
|
||||
|
136
modules/interventi/src/Articolo.php
Normal file
136
modules/interventi/src/Articolo.php
Normal file
@ -0,0 +1,136 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Interventi;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Modules\Articoli\Articolo as Original;
|
||||
|
||||
class Articolo extends Model
|
||||
{
|
||||
protected $table = 'mg_articoli_interventi';
|
||||
|
||||
/** @var array Opzioni abilitate per la creazione */
|
||||
protected $fillable = [
|
||||
'idarticolo',
|
||||
'idintervento',
|
||||
'idautomezzo',
|
||||
];
|
||||
|
||||
/**
|
||||
* Crea un nuovo articolo collegato ad un intervento.
|
||||
*
|
||||
* @param array $attributes
|
||||
*/
|
||||
public static function create(array $attributes = [])
|
||||
{
|
||||
$model = static::query()->create($attributes);
|
||||
|
||||
$articolo = $model->articolo()->first();
|
||||
$qta = $attributes['qta'];
|
||||
|
||||
// Movimento l'articolo
|
||||
if (!empty($model->idautomezzo)) {
|
||||
$rs = $dbo->fetchArray("SELECT CONCAT_WS(' - ', nome, targa) AS nome FROM dt_automezzi WHERE id=".prepare($model->idautomezzo));
|
||||
$nome = $rs[0]['nome'];
|
||||
|
||||
$descrizione = ($qta < 0) ? tr("Carico sull'automezzo _NAME_", [
|
||||
'_NAME_' => $nome,
|
||||
]) : tr("Scarico dall'automezzo _NAME_", [
|
||||
'_NAME_' => $nome,
|
||||
]);
|
||||
|
||||
$dbo->query('UPDATE mg_articoli_automezzi SET qta = qta + '.$qta.' WHERE idarticolo = '.prepare($articolo->id).' AND idautomezzo = '.prepare($model->idautomezzo));
|
||||
$data = date('Y-m-d');
|
||||
|
||||
$articolo->registra(-$qta, $descrizione, $data, false, [
|
||||
'idautomezzo' => $model->idautomezzo,
|
||||
'idintervento' => $model->idintervento,
|
||||
]);
|
||||
} else {
|
||||
$intervento = $model->intervento();
|
||||
|
||||
$numero = $intervento->codice;
|
||||
$data = database()->fetchOne('SELECT MAX(orario_fine) AS data FROM in_interventi_tecnici WHERE idintervento = :id_intervento', [
|
||||
':id_intervento' => $intervento->id,
|
||||
])['data'];
|
||||
|
||||
$data = $data ?? $intervento->data_richiesta;
|
||||
|
||||
$descrizione = ($qta < 0) ? tr('Ripristino articolo da intervento _NUM_', [
|
||||
'_NUM_' => $numero,
|
||||
]) : tr('Scarico magazzino per intervento _NUM_', [
|
||||
'_NUM_' => $numero,
|
||||
]);
|
||||
|
||||
$articolo->movimenta(-$qta, $descrizione, $data, false, [
|
||||
'idintervento' => $intervento->id,
|
||||
]);
|
||||
}
|
||||
|
||||
// Salvataggio delle informazioni
|
||||
$model->descrizione = isset($attributes['descrizione']) ? $attributes['descrizione'] : $articolo->descrizione;
|
||||
$model->prezzo_acquisto = $articolo->prezzo_acquisto;
|
||||
$model->abilita_serial = $articolo->abilita_serial;
|
||||
|
||||
$model->um = $attributes['um'];
|
||||
$model->qta = $attributes['qta'];
|
||||
$model->prezzo_vendita = isset($attributes['prezzo']) ? $attributes['prezzo'] : $articolo->prezzo_vendita;
|
||||
|
||||
$model->save();
|
||||
|
||||
return $model;
|
||||
}
|
||||
|
||||
public function setIVA($id_iva)
|
||||
{
|
||||
$iva = database()->fetchOne('SELECT * FROM co_iva WHERE id = :id_iva', [
|
||||
':id_iva' => $id_iva,
|
||||
]);
|
||||
$descrizione = $iva['descrizione'];
|
||||
|
||||
$valore = (($this->prezzo_vendita * $this->qta) - $this->sconto) * $iva['percentuale'] / 100;
|
||||
|
||||
$this->idiva = $iva['id'];
|
||||
$this->desc_iva = $descrizione;
|
||||
$this->iva = $valore;
|
||||
|
||||
$this->save();
|
||||
}
|
||||
|
||||
public function setSconto($unitario, $tipo)
|
||||
{
|
||||
$sconto = calcola_sconto([
|
||||
'sconto' => $unitario,
|
||||
'prezzo' => $this->prezzo_vendita,
|
||||
'tipo' => $tipo,
|
||||
'qta' => $this->qta,
|
||||
]);
|
||||
|
||||
$this->sconto_unitario = $unitario;
|
||||
$this->tipo_sconto = $tipo;
|
||||
$this->sconto = $sconto;
|
||||
|
||||
$this->save();
|
||||
}
|
||||
|
||||
public function setSerials($serials)
|
||||
{
|
||||
database()->sync('mg_prodotti', [
|
||||
'id_riga_intervento' => $this->id,
|
||||
'dir' => 'entrata',
|
||||
'id_articolo' => $this->idintervento,
|
||||
], [
|
||||
'serial' => $serials,
|
||||
]);
|
||||
}
|
||||
|
||||
public function articolo()
|
||||
{
|
||||
return $this->belongsTo(Original::class, 'idarticolo');
|
||||
}
|
||||
|
||||
public function intervento()
|
||||
{
|
||||
return $this->belongsTo(Intervento::class, 'idintervento');
|
||||
}
|
||||
}
|
31
modules/interventi/src/Intervento.php
Normal file
31
modules/interventi/src/Intervento.php
Normal file
@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Interventi;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Modules\Anagrafiche\Anagrafica;
|
||||
|
||||
class Intervento extends Model
|
||||
{
|
||||
protected $table = 'in_interventi';
|
||||
|
||||
public function anagrafica()
|
||||
{
|
||||
return $this->belongsTo(Anagrafica::class, 'idanagrafica');
|
||||
}
|
||||
|
||||
public function stato()
|
||||
{
|
||||
return $this->belongsTo(Stato::class, 'idstatointervento');
|
||||
}
|
||||
|
||||
public function articoli()
|
||||
{
|
||||
return $this->hasMany(Articolo::class, 'idintervento');
|
||||
}
|
||||
|
||||
public function righe()
|
||||
{
|
||||
return $this->hasMany(Riga::class, 'idintervento');
|
||||
}
|
||||
}
|
10
modules/interventi/src/Riga.php
Normal file
10
modules/interventi/src/Riga.php
Normal file
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Modules\Interventi;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Riga extends Model
|
||||
{
|
||||
protected $table = 'in_righe_interventi';
|
||||
}
|
@ -36,6 +36,8 @@ class AJAX
|
||||
$modules = Modules::getModules();
|
||||
}
|
||||
|
||||
$modules = $modules->toArray();
|
||||
|
||||
$dirs = array_unique(array_column($modules, 'directory'));
|
||||
$pieces = array_chunk($dirs, 5);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user