diff --git a/config/namespaces.php b/config/namespaces.php index 47f2c87d7..e4da1fcae 100755 --- a/config/namespaces.php +++ b/config/namespaces.php @@ -35,5 +35,6 @@ return [ 'plugins/importFE' => 'Plugins\ImportFE', 'plugins/receiptFE' => 'Plugins\ReceiptFE', 'plugins/dichiarazioni_intento' => 'Plugins\DichiarazioniIntento', + 'plugins/pianificazione_interventi' => 'Plugins\PianificazioneInterventi', 'plugins/statistiche_articoli' => 'Plugins\StatisticheArticoli', ]; diff --git a/include/src/Document.php b/include/src/Document.php index d5d41b331..74ae1e300 100755 --- a/include/src/Document.php +++ b/include/src/Document.php @@ -184,6 +184,22 @@ abstract class Document extends Model $this->setRelations([]); } + public function toArray() + { + $array = parent::toArray(); + + $result = array_merge($array, [ + 'spesa' => $this->spesa, + 'imponibile' => $this->imponibile, + 'sconto' => $this->sconto, + 'totale_imponibile' => $this->totale_imponibile, + 'iva' => $this->iva, + 'totale' => $this->totale, + ]); + + return $result; + } + /** * Costruisce una nuova collezione Laravel a partire da quelle indicate. * diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php index 1511523f9..63bd3964a 100755 --- a/modules/contratti/actions.php +++ b/modules/contratti/actions.php @@ -330,7 +330,7 @@ $riga = $contratto->getRiga($type, $id_riga); ]); // Copia delle righe - $dbo->query('INSERT INTO co_promemoria_righe(id_promemoria, descrizione, qta, um, prezzo_vendita, prezzo_acquisto, idiva, desc_iva, iva, sconto, sconto_unitario, tipo_sconto) SELECT :id_new, descrizione, qta, um, prezzo_vendita, prezzo_acquisto, idiva, desc_iva, iva, sconto, sconto_unitario, tipo_sconto FROM co_promemoria_righe AS z WHERE id_promemoria = :id_old', [ + $dbo->query('INSERT INTO co_righe_promemoria(id_promemoria, descrizione, qta, um, prezzo_vendita, prezzo_acquisto, idiva, desc_iva, iva, sconto, sconto_unitario, tipo_sconto) SELECT :id_new, descrizione, qta, um, prezzo_vendita, prezzo_acquisto, idiva, desc_iva, iva, sconto, sconto_unitario, tipo_sconto FROM co_righe_promemoria AS z WHERE id_promemoria = :id_old', [ ':id_new' => $id_promemoria, ':id_old' => $p['id'], ]); diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php index 59e77b45e..e3b7323cf 100755 --- a/modules/contratti/edit.php +++ b/modules/contratti/edit.php @@ -148,8 +148,8 @@ $_SESSION['superselect']['idanagrafica'] = $record['idanagrafica'];

-
- +
+

@@ -203,7 +203,7 @@ if (!empty($rs)) { '.tr('Addebito orario').' '.tr('Addebito km').' '.tr('Addebito diritto ch.').' - + '; @@ -372,15 +372,15 @@ include $docroot.'/modules/contratti/row-list.php'; $("#idsede").selectReset(); }); - + $('#codice_cig, #codice_cup').bind("keyup change", function(e) { - + if ($('#codice_cig').val() == '' && $('#codice_cup').val() == '' ){ $('#id_documento_fe').prop('required', false); }else{ $('#id_documento_fe').prop('required', true); } - + }); @@ -453,4 +453,3 @@ if (!empty($elementi)) { diff --git a/modules/contratti/src/Components/RelationTrait.php b/modules/contratti/src/Components/RelationTrait.php index aeecfd9f9..0afa4ae3d 100755 --- a/modules/contratti/src/Components/RelationTrait.php +++ b/modules/contratti/src/Components/RelationTrait.php @@ -20,12 +20,4 @@ trait RelationTrait { return $this->parent(); } - - public function delete() - { - $parent = $this->parent; - $parent->save(); - - return parent::delete(); - } } diff --git a/modules/contratti/src/Contratto.php b/modules/contratti/src/Contratto.php index dc5274c40..d3c4d7a69 100755 --- a/modules/contratti/src/Contratto.php +++ b/modules/contratti/src/Contratto.php @@ -8,6 +8,7 @@ use Common\Document; use Modules\Anagrafiche\Anagrafica; use Modules\Interventi\Intervento; use Modules\TipiIntervento\Tipo as TipoSessione; +use Plugins\PianificazioneInterventi\Promemoria; use Traits\RecordTrait; use Util\Generator; @@ -143,6 +144,11 @@ class Contratto extends Document return $this->hasMany(Intervento::class, 'id_contratto'); } + public function promemoria() + { + return $this->hasMany(Promemoria::class, 'idcontratto'); + } + public function fixBudget() { $this->budget = $this->totale_imponibile ?: 0; diff --git a/modules/interventi/actions.php b/modules/interventi/actions.php index 329cbb246..7bf35abf6 100755 --- a/modules/interventi/actions.php +++ b/modules/interventi/actions.php @@ -117,7 +117,7 @@ switch (post('op')) { ], ['idcontratto' => $idcontratto, 'id' => $idcontratto_riga]); //copio le righe dal promemoria all'intervento - $dbo->query('INSERT INTO in_righe_interventi (descrizione, qta, um, prezzo_unitario, costo_unitario, idiva,desc_iva, iva, idintervento, sconto, sconto_unitario, tipo_sconto) SELECT descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,'.$id_record.',sconto,sconto_unitario,tipo_sconto FROM co_promemoria_righe WHERE id_promemoria = '.$idcontratto_riga); + $dbo->query('INSERT INTO in_righe_interventi (descrizione, qta, um, prezzo_unitario, costo_unitario, idiva,desc_iva, iva, idintervento, sconto, sconto_unitario, tipo_sconto) SELECT descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,'.$id_record.',sconto,sconto_unitario,tipo_sconto FROM co_righe_promemoria WHERE id_promemoria = '.$idcontratto_riga); //copio gli articoli dal promemoria all'intervento $dbo->query('INSERT INTO in_righe_interventi (idarticolo, idintervento, descrizione, costo_unitario, prezzo_unitario, sconto, sconto_unitario, tipo_sconto,idiva,desc_iva,iva, qta, um, abilita_serial, idimpianto) SELECT idarticolo, '.$id_record.',descrizione,prezzo_acquisto,prezzo_vendita,sconto,sconto_unitario,tipo_sconto,idiva,desc_iva,iva, qta, um, abilita_serial, idimpianto FROM co_promemoria_articoli WHERE id_promemoria = '.$idcontratto_riga); diff --git a/modules/interventi/src/Components/RelationTrait.php b/modules/interventi/src/Components/RelationTrait.php index 6d45cbf5c..7b84900d1 100755 --- a/modules/interventi/src/Components/RelationTrait.php +++ b/modules/interventi/src/Components/RelationTrait.php @@ -41,8 +41,6 @@ trait RelationTrait */ protected function fixSubtotale() { - $this->prezzo_vendita = $this->prezzo_unitario; - $this->fixIva(); } } diff --git a/modules/interventi/src/Intervento.php b/modules/interventi/src/Intervento.php index c101c5cd6..84732eb02 100755 --- a/modules/interventi/src/Intervento.php +++ b/modules/interventi/src/Intervento.php @@ -15,14 +15,6 @@ class Intervento extends Document protected $info = []; - protected $appends = [ - 'ore_totali', - 'km_totali', - 'spesa', - 'imponibile', - 'totale_imponibile', - ]; - /** * Crea un nuovo intervento. * @@ -159,6 +151,18 @@ class Intervento extends Document return $this->hasMany(Components\Sessione::class, 'idintervento'); } + public function toArray() + { + $array = parent::toArray(); + + $result = array_merge($array, [ + 'ore_totali' => $this->ore_totali, + 'km_totali' => $this->km_totali, + ]); + + return $result; + } + // Metodi statici /** diff --git a/modules/preventivi/src/Components/RelationTrait.php b/modules/preventivi/src/Components/RelationTrait.php index 30de2c97b..64826346a 100755 --- a/modules/preventivi/src/Components/RelationTrait.php +++ b/modules/preventivi/src/Components/RelationTrait.php @@ -20,12 +20,4 @@ trait RelationTrait { return $this->parent(); } - - public function delete() - { - $parent = $this->parent; - $parent->save(); - - return parent::delete(); - } } diff --git a/plugins/pianificazione_interventi/actions.php b/plugins/pianificazione_interventi/actions.php index a5246f44c..22dcd3248 100755 --- a/plugins/pianificazione_interventi/actions.php +++ b/plugins/pianificazione_interventi/actions.php @@ -2,29 +2,29 @@ include_once __DIR__.'/../../core.php'; -use Modules\Anagrafiche\Anagrafica; +use Carbon\Carbon; +use Carbon\CarbonInterval; +use Modules\Articoli\Articolo as ArticoloOriginale; +use Modules\Contratti\Contratto; use Modules\Interventi\Intervento; use Modules\Interventi\Stato; use Modules\TipiIntervento\Tipo as TipoSessione; +use Plugins\PianificazioneInterventi\Components\Articolo; +use Plugins\PianificazioneInterventi\Components\Riga; +use Plugins\PianificazioneInterventi\Promemoria; $operazione = filter('op'); // Pianificazione intervento switch ($operazione) { case 'add-promemoria': - // Lettura sede contratto - $idsede = $dbo->fetchOne('SELECT idsede FROM co_contratti WHERE id='.prepare($id_parent))['idsede']; + $contratto = Contratto::find($id_parent); + $tipo = TipoSessione::find(filter('idtipointervento')); - $dbo->insert('co_promemoria', [ - 'idcontratto' => $id_parent, - 'data_richiesta' => filter('data_richiesta'), - 'idtipointervento' => filter('idtipointervento'), - 'idsede' => $idsede, - ]); - $id_record = $dbo->lastInsertedID(); + $promemoria = Promemoria::build($contratto, $tipo, filter('data_richiesta')); + echo $promemoria->id; - echo $id_record; - break; + break; case 'edit-promemoria': $dbo->update('co_promemoria', [ @@ -44,7 +44,7 @@ switch ($operazione) { $id = post('id'); $dbo->query('DELETE FROM `co_promemoria` WHERE id='.prepare($id)); - $dbo->query('DELETE FROM `co_promemoria_righe` WHERE id_promemoria='.prepare($id)); + $dbo->query('DELETE FROM `co_righe_promemoria` WHERE id_promemoria='.prepare($id)); $dbo->query('DELETE FROM `co_promemoria_articoli` WHERE id_promemoria='.prepare($id)); flash()->info(tr('Pianificazione eliminata!')); @@ -53,7 +53,7 @@ switch ($operazione) { // Eliminazione tutti i promemoria di questo contratto con non hanno l'intervento associato case 'delete-non-associati': - $dbo->query('DELETE FROM `co_promemoria_righe` WHERE id_promemoria IN (SELECT id FROM `co_promemoria` WHERE idcontratto = :id_contratto AND idintervento IS NULL)', [ + $dbo->query('DELETE FROM `co_righe_promemoria` WHERE id_promemoria IN (SELECT id FROM `co_promemoria` WHERE idcontratto = :id_contratto AND idintervento IS NULL)', [ ':id_contratto' => $id_record, ]); @@ -72,282 +72,192 @@ switch ($operazione) { // Pianificazione ciclica case 'pianificazione': $intervallo = post('intervallo'); - $min_date = post('data_inizio'); + $data_inizio = post('data_inizio'); - // if principale - if (!empty($id_record) && !empty($intervallo) && post('pianifica_promemoria')) { - $qp = 'SELECT *, (SELECT idanagrafica FROM co_contratti WHERE id = '.$id_parent.' ) AS idanagrafica, (SELECT data_conclusione FROM co_contratti WHERE id = '.$id_parent.' ) AS data_conclusione, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento FROM co_promemoria WHERE co_promemoria.id = '.$id_record; - $rsp = $dbo->fetchArray($qp); + $count = 0; + $date_con_promemoria = []; + $date_con_intervento = []; + if (post('pianifica_promemoria')) { + $promemoria_originale = Promemoria::find($id_record); + $contratto = $promemoria_originale->contratto; - $idtipointervento = $rsp[0]['idtipointervento']; - $idsede = $rsp[0]['idsede']; - $richiesta = $rsp[0]['richiesta']; + // Promemoria del contratto raggruppati per data + $promemoria_contratto = $contratto->promemoria() + ->where('idtipointervento', $promemoria_originale->tipo->id) + ->get() + ->groupBy(function ($item) { + return $item->data_richiesta; + }); + $date_preimpostate = $promemoria_contratto->keys()->toArray(); - $data_richiesta = $rsp[0]['data_richiesta']; - $idimpianti = $rsp[0]['idimpianti']; + $data_conclusione = $contratto->data_conclusione; + $data_inizio = new Carbon($data_inizio); + $data_richiesta = $data_inizio->copy(); + $interval = CarbonInterval::make($intervallo.' days'); - // mi serve per la pianificazione dei promemoria - $data_conclusione = $rsp[0]['data_conclusione']; + $stato = Stato::where('codice', 'WIP')->first(); // Stato "In programmazione" - // mi serve per la pianificazione interventi - $idanagrafica = $rsp[0]['idanagrafica']; + // Ciclo partendo dalla data_richiesta fino alla data conclusione del contratto + while ($data_richiesta->lessThanOrEqualTo($data_conclusione)) { + // Creazione ciclica del promemoria se non ne esiste uno per la data richiesta + $data_promemoria = $data_richiesta->format('Y-m-d'); + if (!in_array($data_promemoria, $date_preimpostate)) { + $promemoria_corrente = $promemoria_originale->replicate(); + $promemoria_corrente->data_richiesta = $data_richiesta; + $promemoria_corrente->idintervento = null; + $promemoria_corrente->save(); - // se voglio pianificare anche le date precedenti ad oggi (parto da questo promemoria) - //if ($data_inizio) { - // oggi - //$min_date = date('Y-m-d'); - //} else { - //questo promemoria - //$min_date = date('Y-m-d', strtotime($data_richiesta)); - //} - $data_richiesta = $min_date; - - // inizio controllo data_conclusione, data valida e maggiore della $min_date - if ((date('Y', strtotime($data_conclusione)) > 1970) && (date('Y-m-d', strtotime($min_date)) <= date('Y-m-d', strtotime($data_conclusione)))) { - $i = 0; - // Ciclo partendo dalla data_richiesta fino all data conclusione del contratto - while (date('Y-m-d', strtotime($data_richiesta)) <= date('Y-m-d', strtotime($data_conclusione))) { - // calcolo nuova data richiesta, non considero l'intervallo al primo ciclo - $data_richiesta = date('Y-m-d', strtotime($data_richiesta.' + '.(($i == 0) ? 0 : $intervallo).' days')); - ++$i; - - // controllo nuova data richiesta --> solo date maggiori o uguali di data richiesta iniziale ma che non superano la data di fine del contratto - if ((date('Y-m-d', strtotime($data_richiesta)) >= $min_date) && (date('Y-m-d', strtotime($data_richiesta)) <= date('Y-m-d', strtotime($data_conclusione)))) { - // Controllo che non esista già un promemoria idcontratto, idtipointervento e data_richiesta. - if (count($dbo->fetchArray("SELECT id FROM co_promemoria WHERE data_richiesta = '".$data_richiesta."' AND idtipointervento = '".$idtipointervento."' AND idcontratto = '".$id_parent."' ")) == 0) { - // inserisco il nuovo promemoria - $query = 'INSERT INTO `co_promemoria`(`idcontratto`, `idtipointervento`, `data_richiesta`, `richiesta`, `idsede`, `idimpianti` ) VALUES('.prepare($id_parent).', '.prepare($idtipointervento).', '.prepare($data_richiesta).', '.prepare($richiesta).', '.prepare($idsede).', '.prepare($idimpianti).')'; - - if ($dbo->query($query)) { - $idriga = $dbo->lastInsertedID(); - - // copio anche righe materiali nel nuovo promemoria - $dbo->query('INSERT INTO co_promemoria_righe (descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva, desc_iva,iva,id_promemoria,sconto,sconto_unitario,tipo_sconto) SELECT descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva, desc_iva,iva,'.$idriga.',sconto,sconto_unitario,tipo_sconto FROM co_promemoria_righe WHERE id_promemoria = '.$id_record); - - // copio righe articoli nel nuovo promemoria - $dbo->query('INSERT INTO co_promemoria_articoli (idarticolo, id_promemoria,descrizione,prezzo_acquisto,prezzo_vendita,sconto, sconto_unitario, tipo_sconto,idiva,desc_iva,iva, qta, um, abilita_serial, idimpianto) SELECT idarticolo, '.$idriga.',descrizione,prezzo_acquisto,prezzo_vendita,sconto,sconto_unitario,tipo_sconto,idiva,desc_iva,iva, qta, um, abilita_serial, idimpianto FROM co_promemoria_articoli WHERE id_promemoria = '.$id_record); - - // Copia degli allegati - Uploads::copy([ - 'id_plugin' => Plugins::get('Pianificazione interventi')['id'], - 'id_record' => $id_record, - ], [ - 'id_plugin' => Plugins::get('Pianificazione interventi')['id'], - 'id_record' => $idriga, - ]); - - flash()->info(tr('Promemoria intervento pianificato!')); - } - } else { - flash()->warning(tr('Esiste già un promemoria pianificato per il _DATE_', [ - '_DATE_' => Translator::dateToLocale($data_richiesta), - ])); - } - - // Controllo che non esista già un intervento collegato a questo promemoria e, se ho spuntato di creare l'intervento, creo già anche quello - if (post('pianifica_intervento') && empty($dbo->fetchArray('SELECT idintervento FROM co_promemoria WHERE id = '.prepare(empty($idriga) ? $id_record : $idriga))[0]['idintervento'])) { - // Creazione intervento - $anagrafica = Anagrafica::find($idanagrafica); - $tipo = TipoSessione::find($idtipointervento); - // Stato "In programmazione" - $stato = Stato::where('codice', 'WIP')->first(); - - $intervento = Intervento::build($anagrafica, $tipo, $stato, $data_richiesta); - $intervento->idsede_destinazione = $idsede ?: 0; - $intervento->richiesta = $richiesta; - $intervento->idclientefinale = post('idclientefinale') ?: 0; - $intervento->save(); - - $idintervento = $intervento->id; - - $idtecnici = post('idtecnico'); - - // aggiungo i tecnici - foreach ($idtecnici as $idtecnico) { - add_tecnico($idintervento, $idtecnico, $data_richiesta.' '.post('orario_inizio'), $data_richiesta.' '.post('orario_fine'), $id_parent); - } - - // collego l'intervento ai promemoria - $dbo->query('UPDATE co_promemoria SET idintervento='.prepare($idintervento).' WHERE id='.prepare(((empty($idriga)) ? $id_record : $idriga))); - - // copio le righe dal promemoria all'intervento - $dbo->query('INSERT INTO in_righe_interventi (descrizione, qta,um, prezzo_unitario, costo_unitario, idiva,desc_iva,iva,idintervento,sconto,sconto_unitario,tipo_sconto) SELECT descrizione, qta,um,prezzo_vendita,prezzo_acquisto,idiva,desc_iva,iva,'.$idintervento.',sconto,sconto_unitario,tipo_sconto FROM co_promemoria_righe WHERE id_promemoria = '.$id_record); - - // copio gli articoli dal promemoria all'intervento - $dbo->query('INSERT INTO in_righe_interventi (idarticolo, idintervento,descrizione, costo_unitario, prezzo_unitario, sconto, sconto_unitario, tipo_sconto,idiva,desc_iva,iva, qta, um, abilita_serial, idimpianto) SELECT idarticolo, '.$idintervento.',descrizione,prezzo_acquisto,prezzo_vendita,sconto,sconto_unitario,tipo_sconto,idiva,desc_iva,iva, qta, um, abilita_serial, idimpianto FROM co_promemoria_articoli WHERE id_promemoria = '.$id_record); - - // Copia degli allegati - Uploads::copy([ - 'id_plugin' => Plugins::get('Pianificazione interventi')['id'], - 'id_record' => $id_record, - ], [ - 'id_module' => Modules::get('Interventi')['id'], - 'id_record' => $idintervento, - ]); - - // Movimento il magazziono per ogni articolo copiato - $articoli = $intervento->articoli; - foreach ($articoli as $articolo) { - $articolo->movimenta($articolo->qta); - } - - // Collego gli impianti del promemoria all' intervento appena inserito - if (!empty($idimpianti)) { - $rs_idimpianti = explode(',', $idimpianti); - foreach ($rs_idimpianti as $idimpianto) { - $dbo->query('INSERT INTO my_impianti_interventi (idintervento, idimpianto) VALUES ('.$idintervento.', '.prepare($idimpianto).' )'); - } - } - - flash()->info(tr('Interventi pianificati correttamente')); - } elseif (post('pianifica_intervento')) { - flash()->warning(tr('Esiste già un intervento pianificato per il _DATE_', [ - '_DATE_' => Translator::dateToLocale($data_richiesta), - ])); - } + // Copia delle righe + $righe = $promemoria_originale->getRighe(); + foreach ($righe as $riga) { + $copia = $riga->replicate(); + $copia->setParent($promemoria_corrente); + $copia->save(); } + + // Copia degli allegati + $allegati = $promemoria_originale->uploads(); + foreach ($allegati as $allegato) { + $allegato->copia([ + 'id_module' => $allegato->id_module, + 'id_plugin' => $allegato->id_plugin, + 'id_record' => $promemoria_corrente->id, + ]); + } + } else { + $promemoria_corrente = $promemoria_contratto[$data_promemoria]->first(); + $date_con_promemoria[] = dateFormat($data_promemoria); } - // fine ciclo while - } else { - flash()->error(tr("Nessuna data di conclusione del contratto oppure quest'ultima è già trascorsa, impossibile pianificare nuovi promemoria")); + + // Creazione intervento collegato se non prensente + if (post('pianifica_intervento') && empty($promemoria->intervento)) { + // Creazione intervento + $intervento = Intervento::build($contratto->anagrafica, $promemoria_originale->tipo, $stato, $data_richiesta); + $intervento->idsede_destinazione = $promemoria_corrente->idsede ?: 0; + $intervento->richiesta = $promemoria_corrente->richiesta; + $intervento->idclientefinale = post('idclientefinale') ?: 0; + $intervento->save(); + + // Aggiungo i tecnici selezionati + $idtecnici = post('idtecnico'); + foreach ($idtecnici as $idtecnico) { + add_tecnico($intervento->id, $idtecnico, $data_richiesta.' '.post('orario_inizio'), $data_richiesta.' '.post('orario_fine')); + } + + // Copia delle informazioni del promemoria + $promemoria_corrente->pianifica($intervento); + + flash()->info(tr('Interventi pianificati correttamente')); + } elseif (post('pianifica_intervento')) { + $date_con_intervento[] = dateFormat($data_promemoria); + } + + // Calcolo nuova data richiesta, non considero l'intervallo al primo ciclo + $data_richiesta = $data_richiesta->add($interval); + ++$count; } - // fine controllo data_conclusione - } else { + } + + if ($count == 0) { flash()->warning(tr('Nessun promemoria pianificato')); + } else { + flash()->info(tr('Sono stati pianificati _NUM_ interventi!', [ + '_NUM_' => $count, + ])); + + if (!empty($date_con_promemoria)) { + flash()->warning(tr('Le seguenti date presentano già un promemoria pianificato: _LIST_', [ + '_LIST_' => implode(', ', $date_con_promemoria), + ])); + } + + if (!empty($date_con_intervento)) { + flash()->warning(tr('I promemoria delle seguenti date presentano già un intervento collegato: _LIST_', [ + '_LIST_' => implode(', ', $date_con_intervento), + ])); + } } break; - /* - GESTIONE ARTICOLI - */ + case 'manage_articolo': + if (post('idriga') != null) { + $articolo = Articolo::find(post('idriga')); + } else { + $originale = ArticoloOriginale::find(post('idarticolo')); + $articolo = Articolo::build($promemoria, $originale); + } - case 'editarticolo': - $idriga = post('idriga'); - $idarticolo = post('idarticolo'); - $idimpianto = post('idimpianto'); - - // Leggo la quantità attuale nell'intervento - $q = 'SELECT qta, idimpianto FROM co_promemoria_articoli WHERE id='.prepare($idriga); - $rs = $dbo->fetchArray($q); - $old_qta = $rs[0]['qta']; - $idimpianto = $rs[0]['idimpianto']; - - // Elimino questo articolo dall'intervento - $dbo->query('DELETE FROM co_promemoria_articoli WHERE id='.prepare($idriga)); - - // no break; - - case 'addarticolo': - $idarticolo = post('idarticolo'); - $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->descrizione = post('descrizione'); + $articolo->um = post('um') ?: null; - // Calcolo iva - $rs_iva = $dbo->fetchArray('SELECT * FROM co_iva WHERE id='.prepare($idiva)); - $desc_iva = $rs_iva[0]['descrizione']; + $articolo->id_iva = post('idiva'); - $iva = (($prezzo_vendita * $qta) - $sconto) * $rs_iva[0]['percentuale'] / 100; + $articolo->costo_unitario = post('costo_unitario') ?: 0; + $articolo->prezzo_unitario = post('prezzo_unitario'); + $articolo->setSconto(post('sconto'), post('tipo_sconto')); - // Aggiunto il collegamento fra l'articolo e l'intervento - $idriga = $dbo->query('INSERT INTO co_promemoria_articoli(idarticolo, id_promemoria, idimpianto, 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($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']).')'); + try { + $articolo->qta = $qta; + } catch (UnexpectedValueException $e) { + flash()->error(tr('Alcuni serial number sono già stati utilizzati!')); + } + + $articolo->save(); + + if (post('idriga') != null) { + flash()->info(tr('Articolo modificato!')); + } else { + flash()->info(tr('Articolo aggiunto!')); + } break; - case 'unlink_articolo': - $idriga = post('idriga'); + case 'manage_riga': + if (post('idriga') != null) { + $riga = Riga::find(post('idriga')); + } else { + $riga = Riga::build($promemoria); + } - $dbo->query('DELETE FROM co_promemoria_articoli WHERE id='.prepare($idriga)); - - break; - - /* - Gestione righe generiche - */ - case 'addriga': - - $descrizione = post('descrizione'); $qta = post('qta'); - $um = post('um'); - $idiva = post('idiva'); - $prezzo_vendita = post('prezzo_vendita'); - $prezzo_acquisto = post('prezzo_acquisto'); - $sconto_unitario = post('sconto'); - $tipo_sconto = post('tipo_sconto'); - $sconto = calcola_sconto([ - 'sconto' => $sconto_unitario, - 'prezzo' => $prezzo_vendita, - 'tipo' => $tipo_sconto, - 'qta' => $qta, - ]); + $riga->descrizione = post('descrizione'); + $riga->um = post('um') ?: null; - // Calcolo iva - $rs_iva = $dbo->fetchArray('SELECT * FROM co_iva WHERE id='.prepare($idiva)); - $desc_iva = $rs_iva[0]['descrizione']; + $riga->id_iva = post('idiva'); - $iva = (($prezzo_vendita * $qta) - $sconto) * $rs_iva[0]['percentuale'] / 100; + $riga->costo_unitario = post('costo_unitario') ?: 0; + $riga->prezzo_unitario = post('prezzo_unitario'); + $riga->setSconto(post('sconto'), post('tipo_sconto')); - $dbo->query('INSERT INTO co_promemoria_righe(descrizione, qta, um, prezzo_vendita, prezzo_acquisto, idiva, desc_iva, iva, sconto, sconto_unitario, tipo_sconto, id_promemoria) VALUES ('.prepare($descrizione).', '.prepare($qta).', '.prepare($um).', '.prepare($prezzo_vendita).', '.prepare($prezzo_acquisto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare($id_record).')'); + $riga->qta = $qta; + + $riga->save(); + + if (post('idriga') != null) { + flash()->info(tr('Riga modificata!')); + } else { + flash()->info(tr('Riga aggiunta!')); + } break; - case 'editriga': - $idriga = post('idriga'); - $descrizione = post('descrizione'); - $qta = post('qta'); - $um = post('um'); - $idiva = post('idiva'); - $prezzo_vendita = post('prezzo_vendita'); - $prezzo_acquisto = post('prezzo_acquisto'); + case 'delete_riga': + $id_riga = post('idriga'); + $type = post('type'); + $riga = $promemoria->getRiga($type, $id_riga); - $sconto_unitario = post('sconto'); - $tipo_sconto = post('tipo_sconto'); - $sconto = calcola_sconto([ - 'sconto' => $sconto_unitario, - 'prezzo' => $prezzo_vendita, - 'tipo' => $tipo_sconto, - 'qta' => $qta, - ]); + if (!empty($riga)) { + try { + $riga->delete(); - // 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; - - $dbo->query('UPDATE co_promemoria_righe SET '. - ' descrizione='.prepare($descrizione).','. - ' qta='.prepare($qta).','. - ' um='.prepare($um).','. - ' prezzo_vendita='.prepare($prezzo_vendita).','. - ' prezzo_acquisto='.prepare($prezzo_acquisto).','. - ' idiva='.prepare($idiva).','. - ' desc_iva='.prepare($desc_iva).','. - ' iva='.prepare($iva).','. - ' sconto='.prepare($sconto).','. - ' sconto_unitario='.prepare($sconto_unitario).','. - ' tipo_sconto='.prepare($tipo_sconto). - ' WHERE id='.prepare($idriga)); - - break; - - case 'delriga': - $idriga = post('idriga'); - - $dbo->query('DELETE FROM co_promemoria_righe WHERE id='.prepare($idriga)); + flash()->info(tr('Riga rimossa!')); + } catch (InvalidArgumentException $e) { + flash()->error(tr('Alcuni serial number sono già stati utilizzati!')); + } + } break; } diff --git a/plugins/pianificazione_interventi/add_articolo.php b/plugins/pianificazione_interventi/add_articolo.php deleted file mode 100755 index 2bc1a8aa6..000000000 --- a/plugins/pianificazione_interventi/add_articolo.php +++ /dev/null @@ -1,185 +0,0 @@ -fetchArray('SELECT idanagrafica FROM co_contratti WHERE id='.prepare($id_record)); - -$idanagrafica = $rs[0]['idanagrafica']; - -if (empty($idriga)) { - $op = 'addarticolo'; - $button = ' '.tr('Aggiungi'); - - // valori default - $idarticolo = ''; - $descrizione = ''; - $qta = 1; - $um = ''; - - $prezzo_vendita = '0'; - $sconto_unitario = 0; - - $idimpianto = 0; - - $listino = $dbo->fetchArray('SELECT prc_guadagno FROM mg_listini WHERE id = (SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica = '.prepare($idanagrafica).')'); - if (!empty($listino[0]['prc_guadagno'])) { - $sconto_unitario = $listino[0]['prc_guadagno']; - $tipo_sconto = 'PRC'; - } - - (empty($idcontratto_riga)) ? $idcontratto_riga = $dbo->fetchArray('SELECT MAX(id) AS max_idcontratto_riga FROM `co_promemoria`')[0]['max_idcontratto_riga'] : ''; -} else { - $op = 'editarticolo'; - $button = ' '.tr('Modifica'); - - // carico record da modificare - $q = "SELECT *, (SELECT codice FROM mg_articoli WHERE id=co_promemoria_articoli.idarticolo) AS codice_articolo, (SELECT CONCAT(codice, ' - ', descrizione) FROM mg_articoli WHERE id=co_promemoria_articoli.idarticolo) AS descrizione_articolo FROM co_promemoria_articoli WHERE id=".prepare($idriga); - $rsr = $dbo->fetchArray($q); - - $idarticolo = $rsr[0]['idarticolo']; - $codice_articolo = $rsr[0]['codice_articolo']; - $descrizione = $rsr[0]['descrizione']; - $qta = $rsr[0]['qta']; - $um = $rsr[0]['um']; - $idiva = $rsr[0]['idiva']; - - $prezzo_vendita = $rsr[0]['prezzo_vendita']; - - $sconto_unitario = $rsr[0]['sconto_unitario']; - $tipo_sconto = $rsr[0]['tipo_sconto']; - - $idimpianto = $rsr[0]['idimpianto']; - $idcontratto_riga = $rsr[0]['id_promemoria']; -} - -/* - Form di inserimento -*/ -echo ' - -
- - - - '; - -if (!empty($idarticolo)) { - echo ' - '; -} - -// Articolo -echo ' -
-
- {[ "type": "select", "label": "'.tr('Articolo').'", "name": "idarticolo", "required": 1, "value": "'.$idarticolo.'", "ajax-source": "articoli" ]} -
-
'; - -// Descrizione -echo ' -
-
- {[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "descrizione", "id": "descrizione_articolo", "required": 1, "value": '.json_encode($descrizione).' ]} -
-
-
'; - -// Quantità -echo ' -
-
- {[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.$qta.'", "decimals": "qta" ]} -
'; - -// Unità di misura -echo ' -
- {[ "type": "select", "label": "'.tr('Unità di misura').'", "name": "um", "value": "'.$um.'", "ajax-source": "misure" ]} -
'; - -// Impianto -echo ' -
- {[ "type": "select", "multiple": "0", "label": "'.tr('Impianto').'", "name": "idimpianto", "values": "query=SELECT my_impianti.id AS id, my_impianti.nome AS descrizione FROM my_impianti_contratti INNER JOIN my_impianti ON my_impianti_contratti.idimpianto = my_impianti.id WHERE my_impianti_contratti.idcontratto = '.$id_record.' ORDER BY descrizione", "value": "'.$idimpianto.'", "extra":"'.$readonly.'" ]} -
-
'; - -// Iva -echo ' -
-
- {[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$idiva.'", "ajax-source": "iva" ]} -
'; - -// Prezzo di vendita -echo ' -
- {[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo_vendita", "required": 1, "value": "'.$prezzo_vendita.'", "icon-after": "'.currency().'" ]} -
'; - -// Sconto -echo ' -
- {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "icon-after": "choice|untprc|'.$tipo_sconto.'", "value": "'.$sconto_unitario.'" ]} -
-
'; - -echo ' - '; - -echo ' - - -
-
- -
-
-
'; - -echo ' -'; - -echo ' -'; diff --git a/plugins/pianificazione_interventi/add_righe.php b/plugins/pianificazione_interventi/add_righe.php deleted file mode 100755 index 17a101a3b..000000000 --- a/plugins/pianificazione_interventi/add_righe.php +++ /dev/null @@ -1,123 +0,0 @@ - '.tr('Aggiungi'); - - // valori default - $descrizione = ''; - $qta = 1; - $um = ''; - $prezzo_vendita = '0'; - $prezzo_acquisto = '0'; - $idiva = setting('Iva predefinita'); - - if (!empty($rs[0]['prc_guadagno'])) { - $sconto_unitario = $rs[0]['prc_guadagno']; - $tipo_sconto = 'PRC'; - } -} else { - $op = 'editriga'; - $button = ' '.tr('Modifica'); - - // carico record da modificare - $q = 'SELECT * FROM co_promemoria_righe WHERE id='.prepare($idriga); - $rsr = $dbo->fetchArray($q); - - $descrizione = $rsr[0]['descrizione']; - $qta = $rsr[0]['qta']; - $um = $rsr[0]['um']; - $idiva = $rsr[0]['idiva']; - $prezzo_vendita = $rsr[0]['prezzo_vendita']; - $prezzo_acquisto = $rsr[0]['prezzo_acquisto']; - - $sconto_unitario = $rsr[0]['sconto_unitario']; - $tipo_sconto = $rsr[0]['tipo_sconto']; -} - -echo ' -
- - - - '; - -// Descrizione -echo ' -
-
- {[ "type": "textarea", "label": "'.tr('Descrizione').'", "id": "descrizione_riga", "name": "descrizione", "required": 1, "value": '.json_encode($descrizione).' ]} -
-
-
'; - -// Quantità -echo ' -
-
- {[ "type": "number", "label": "'.tr('Q.tà').'", "name": "qta", "required": 1, "value": "'.$qta.'", "decimals": "qta" ]} -
'; - -// Unità di misura -echo ' -
- {[ "type": "select", "label": "'.tr('Unità di misura').'", "name": "um", "value": "'.$um.'", "ajax-source": "misure" ]} -
'; - -// Iva -echo ' -
- {[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "value": "'.$idiva.'", "ajax-source": "iva" ]} -
-
'; - -// Prezzo di acquisto -echo ' -
-
- {[ "type": "number", "label": "'.tr('Prezzo di acquisto (un.)').'", "name": "prezzo_acquisto", "required": 1, "value": "'.$prezzo_acquisto.'", "icon-after": "'.currency().'" ]} -
'; - -// Prezzo di vendita -echo ' -
- {[ "type": "number", "label": "'.tr('Prezzo di vendita (un.)').'", "name": "prezzo_vendita", "required": 1, "value": "'.$prezzo_vendita.'", "icon-after": "'.currency().'" ]} -
'; - -// Sconto unitario -echo ' -
- {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "icon-after": "choice|untprc|'.$tipo_sconto.'", "value": "'.$sconto_unitario.'" ]} -
-
'; - -echo ' - -
-
- -
-
-
'; - -echo ' -'; - -echo ' -'; diff --git a/plugins/pianificazione_interventi/ajax_articoli.php b/plugins/pianificazione_interventi/ajax_articoli.php deleted file mode 100755 index c85e32940..000000000 --- a/plugins/pianificazione_interventi/ajax_articoli.php +++ /dev/null @@ -1,154 +0,0 @@ -fetchArray('SELECT * FROM co_promemoria_articoli WHERE id_promemoria = '.prepare($id_record).' ORDER BY id ASC'); - -if (!empty($rs)) { - echo ' - - - - '; - - if ($pricing) { - echo ' - '; - } - - if ($pricing) { - echo ' - - - '; - } - - if (!$record['flag_completato']) { - echo ' - '; - } - echo ' - '; - - foreach ($rs as $r) { - $extra = ''; - $mancanti = 0; - - // Individuazione dei seriali - if (!empty($r['idarticolo']) && !empty($r['abilita_serial'])) { - $serials = array_column($dbo->fetchArray('SELECT serial FROM mg_prodotti WHERE serial IS NOT NULL AND id_riga_intervento='.prepare($r['id'])), 'serial'); - $mancanti = $r['qta'] - count($serials); - - if ($mancanti > 0) { - $extra = 'class="warning"'; - } else { - $mancanti = 0; - } - } - - echo ' - - '; - - // Quantità - echo ' - '; - - if ($pricing) { - echo ' - '; - } - - if ($pricing) { - // Prezzo unitario - echo ' - '; - - echo ' - '; - - // Prezzo di vendita - echo ' - '; - } - - if (!empty($is_add)) { - echo ' - '; - } - - echo ' - '; - } - - echo ' -
'.tr('Articolo').''.tr('Q.tà').''.tr('Prezzo di acquisto').''.tr('Prezzo di vendita').''.tr('Iva').''.tr('Imponibile').'
- - '.Modules::link('Articoli', $r['idarticolo'], (!empty($r['codice']) ? $r['codice'].' - ' : '').$r['descrizione']); - - // Info extra (lotto, serial, altro) - if (!empty($r['abilita_serial'])) { - if (!empty($mancanti)) { - echo ' -
'.tr('_NUM_ serial mancanti', [ - '_NUM_' => $mancanti, - ]).''; - } - if (!empty($serials)) { - echo ' -
'.tr('SN').': '.implode(', ', $serials); - } - } - - echo ' -
- '.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].' - - '.moneyFormat($r['prezzo_acquisto']).' - - '.moneyFormat($r['prezzo_vendita']).''; - - if ($r['sconto_unitario'] > 0) { - echo ' -
- - '.tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($r['sconto_unitario']), - '_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : currency()), - ]).' - '; - } - - echo ' -
- '.moneyFormat($r['iva']).' - - '.Translator::numberToLocale(sum($r['prezzo_vendita'] * $r['qta'], -$r['sconto'])).' '.currency().' - - - - -
'; -} else { - echo ' -

'.tr('Nessun articolo caricato').'.

'; -} - -echo ' -'; diff --git a/plugins/pianificazione_interventi/ajax_righe.php b/plugins/pianificazione_interventi/ajax_righe.php deleted file mode 100755 index 8d0f19e13..000000000 --- a/plugins/pianificazione_interventi/ajax_righe.php +++ /dev/null @@ -1,122 +0,0 @@ -fetchArray('SELECT * FROM co_promemoria_righe WHERE id_promemoria='.prepare($id_record).' ORDER BY id ASC'); - -if (!empty($rs2)) { - echo ' - - - - - '; - - if ($pricing) { - echo ' - - - '; - } - - if (!$record['flag_completato']) { - echo ' - '; - } - echo ' - '; - - foreach ($rs2 as $r) { - echo ' - - '; - - // Quantità - echo ' - '; - - //Costo unitario - echo ' - '; - - if ($pricing) { - // Prezzo unitario - $netto = $r['prezzo_vendita'] - $r['sconto_unitario']; - - echo ' - '; - - echo ' - '; - - // Prezzo di vendita - echo ' - '; - } - - if (!empty($is_add)) { - echo ' - '; - } - - echo ' - '; - } - - echo ' -
'.tr('Descrizione').''.tr('Q.tà').''.tr('Prezzo di acquisto').''.tr('Prezzo di vendita').''.tr('Iva').''.tr('Subtotale').'
- - '.nl2br($r['descrizione']).' - - '.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].' - - '.moneyFormat($r['prezzo_acquisto']).' - - '.moneyFormat($r['prezzo_vendita']).''; - - if ($r['sconto_unitario'] > 0) { - echo ' -
- - '.tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($r['sconto_unitario']), - '_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : currency()), - ]).' - '; - } - - echo ' -
- '.moneyFormat($r['iva']).' - - '.moneyFormat(sum($r['prezzo_vendita'] * $r['qta'], -$r['sconto'])).' - - - - - -
'; -} else { - echo ' -

'.tr('Nessuna riga caricata').'.

'; -} - -echo ' - -'; diff --git a/plugins/pianificazione_interventi/edit.php b/plugins/pianificazione_interventi/edit.php index 68e454ad7..0ade62def 100755 --- a/plugins/pianificazione_interventi/edit.php +++ b/plugins/pianificazione_interventi/edit.php @@ -2,40 +2,43 @@ include_once __DIR__.'/../../core.php'; -$id_module = Modules::get('Contratti')['id']; -$plugin = Plugins::get($id_plugin); +use Modules\Contratti\Contratto; +use Modules\Contratti\Stato; -$contratto = $dbo->fetchOne('SELECT * FROM co_contratti WHERE id = :id', [ - ':id' => $id_record, -]); +$contratto = Contratto::find($id_record); +$is_pianificabile = $contratto->stato->is_pianificabile && !empty($contratto['data_accettazione']); // Contratto permette la pianificazione -$records = $dbo->fetchArray('SELECT *, (SELECT descrizione FROM in_tipiintervento WHERE idtipointervento=co_promemoria.idtipointervento) AS tipointervento FROM co_promemoria WHERE idcontratto='.prepare($id_record).' ORDER BY data_richiesta ASC'); +$elenco_promemoria = $contratto->promemoria->sortBy('data_richiesta'); -// Intervento/promemoria pianificabile -$pianificabile = $dbo->fetchOne('SELECT is_pianificabile FROM co_staticontratti WHERE id = :id', [ - ':id' => $contratto['idstato'], -])['is_pianificabile']; -if ($pianificabile) { - $pianificabile = (date('Y', strtotime($contratto['data_accettazione'])) > 1970 and date('Y', strtotime($contratto['data_conclusione'])) > 1970) ? true : false; -} - -$stati_pianificabili = $dbo->fetchOne('SELECT GROUP_CONCAT(`descrizione` SEPARATOR ", ") AS stati_pianificabili FROM `co_staticontratti` WHERE `is_pianificabile` = 1')['stati_pianificabili']; +$stati_pianificabili = Stato::where('is_pianificabile', 1)->get(); +$elenco_stati = $stati_pianificabili->implode('descrizione', ', '); echo ' -

'.tr('Puoi pianificare dei "promemoria" o direttamente gli interventi da effettuare entro determinate scadenze. Per poter pianificare i promemoria, il contratto deve avere data accettazione e data conclusione definita ed essere in uno dei seguenti stati: '.$stati_pianificabili.'').'. - +

'.tr('Puoi pianificare dei "promemoria" o direttamente gli interventi da effettuare entro determinate scadenze. Per poter pianificare i promemoria, il contratto deve avere data accettazione e data conclusione definita ed essere in uno dei seguenti stati: '.$elenco_stati.'').'.

'; -// Nessun intervento pianificato -if (!empty($records)) { - echo ' -
-
'.tr('Lista promemoria ed eventuali interventi associati').':
+echo ' +
+
+
+ {[ "type": "select", "placeholder": "'.tr('Tipo di promemoria').'", "name": "id_tipo_promemoria", "required": 1, "ajax-source": "tipiintervento", "class": "unblockable" ]} +
+
+ +
+
+
'; + +// Nessun intervento pianificato +if (!$elenco_promemoria->isEmpty()) { + echo ' @@ -53,20 +56,19 @@ if (!empty($records)) { '; // Elenco promemoria - foreach ($records as $record) { + foreach ($elenco_promemoria as $promemoria) { // Sede - if ($record['idsede'] == '-1') { + if ($promemoria['idsede'] == '-1') { echo '- '.tr('Nessuna').' -'; - } elseif (empty($record['idsede'])) { + } elseif (empty($promemoria['idsede'])) { $info_sede = tr('Sede legale'); } else { - $info_sede = $dbo->fetchOne("SELECT id, CONCAT( CONCAT_WS( ' (', CONCAT_WS(', ', nomesede, citta), indirizzo ), ')') AS descrizione FROM an_sedi WHERE id=".prepare($record['idsede']))['descrizione']; + $info_sede = $dbo->fetchOne("SELECT id, CONCAT( CONCAT_WS( ' (', CONCAT_WS(', ', nomesede, citta), indirizzo ), ')') AS descrizione FROM an_sedi WHERE id=".prepare($promemoria->idsede))['descrizione']; } // Intervento svolto - if (!empty($record['idintervento'])) { - $intervento = $dbo->fetchOne('SELECT id, codice, IFNULL((SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento = in_interventi.id), data_richiesta) AS data FROM in_interventi WHERE id = '.prepare($record['idintervento'])); - + $intervento = $promemoria->intevento; + if (!empty($intervento)) { $info_intervento = Modules::link('Interventi', $intervento['id'], tr('Intervento num. _NUM_ del _DATE_', [ '_NUM_' => $intervento['codice'], '_DATE_' => Translator::dateToLocale($intervento['data']), @@ -85,10 +87,10 @@ if (!empty($records)) { $contratto['data_conclusione'] = ''; } - // info impianti + // Informazioni sugli impianti $info_impianti = ''; - if (!empty($record['idimpianti'])) { - $impianti = $dbo->fetchArray('SELECT id, matricola, nome FROM my_impianti WHERE id IN ('.($record['idimpianti']).')'); + if (!empty($promemoria['idimpianti'])) { + $impianti = $dbo->fetchArray('SELECT id, matricola, nome FROM my_impianti WHERE id IN ('.($promemoria['idimpianti']).')'); foreach ($impianti as $impianto) { $info_impianti .= Modules::link('MyImpianti', $impianto['id'], tr('_NOME_ (_MATRICOLA_)', [ @@ -98,55 +100,48 @@ if (!empty($records)) { } } - // Info materiali/articoli - $materiali = $dbo->fetchArray('SELECT id, descrizione,qta,um,prezzo_vendita, \'\' AS idarticolo FROM co_promemoria_righe WHERE id_promemoria = '.prepare($record['id']).' - UNION SELECT id, descrizione,qta,um,prezzo_vendita, idarticolo FROM co_promemoria_articoli WHERE id_promemoria = '.prepare($record['id'])); - - $info_materiali = ''; - foreach ($materiali as $materiale) { - $info_materiali .= tr(' _QTA_ _UM_ x _DESC_', [ - '_DESC_' => ((!empty($materiale['idarticolo'])) ? Modules::link('Articoli', $materiale['idarticolo'], $materiale['descrizione']) : $materiale['descrizione']), - '_QTA_' => Translator::numberToLocale($materiale['qta']), - '_UM_' => $materiale['um'], - '_PREZZO_' => $materiale['prezzo_vendita'], + // Informazioni sulle righe + $info_righe = ''; + $righe = $promemoria->getRighe(); + foreach ($righe as $riga) { + $info_righe .= tr('_QTA_ _UM_ x _DESC_', [ + '_DESC_' => ($riga->isArticolo() ? Modules::link('Articoli', $riga['idarticolo'], $riga['descrizione']) : $riga['descrizione']), + '_QTA_' => Translator::numberToLocale($riga['qta']), + '_UM_' => $riga['um'], ]).'
'; } - // Info allegati - $allegati = Uploads::get([ - 'id_plugin' => $id_plugin, - 'id_record' => $record['id'], - ]); - + // Informazioni sugli allegati $info_allegati = ''; + $allegati = $promemoria->uploads(); foreach ($allegati as $allegato) { $info_allegati .= tr(' _NOME_ (_ORIGINAL_)', [ - '_ORIGINAL_' => $allegato['original'], + '_ORIGINAL_' => $allegato['original_name'], '_NOME_' => $allegato['name'], ]).'
'; } echo ' - - - + + + - + @@ -156,7 +151,7 @@ if (!empty($records)) {
'.Translator::dateToLocale($record['data_richiesta']).''.$record['tipointervento'].''.nl2br($record['richiesta']).''.Translator::dateToLocale($promemoria['data_richiesta']).''.$promemoria['tipointervento'].''.nl2br($promemoria['richiesta']).' '.$info_intervento.' '.$info_sede.' '.$info_impianti.''.$info_materiali.''.$info_righe.' '.$info_allegati.' - - -
'; - if (!empty($records)) { + if (!empty($promemorias)) { echo '
@@ -165,67 +160,31 @@ if (!empty($records)) {
'; } +} else { + echo ' +
+ '.tr('Nessun promemoria pianificato per il contratto corrente').'. +
'; } - echo ' -'; - -$options = $dbo->fetchArray('SELECT co_contratti_tipiintervento.*, in_tipiintervento.descrizione FROM in_tipiintervento INNER JOIN co_contratti_tipiintervento ON in_tipiintervento.idtipointervento=co_contratti_tipiintervento.idtipointervento WHERE idcontratto='.prepare($id_record).' ORDER BY in_tipiintervento.descrizione'); - echo ' '; diff --git a/plugins/pianificazione_interventi/init.php b/plugins/pianificazione_interventi/init.php new file mode 100755 index 000000000..d67efc732 --- /dev/null +++ b/plugins/pianificazione_interventi/init.php @@ -0,0 +1,9 @@ +fetchOne('SELECT * FROM `co_contratti` WHERE `id` = :id', [ @@ -60,14 +60,13 @@ $orario_inizio = '09:00'; $orario_fine = !empty($tempo_standard) ? date('H:i', strtotime($orario_inizio) + ((60 * 60) * $tempo_standard)) : '17:00'; echo ' -
- + - '; + '; echo ' @@ -80,85 +79,72 @@ echo '
- {[ "type": "date", "label": "'.tr('Data promemoria').'", "name": "data_richiesta", "required": 1, "value": "'.$data_accettazione.'", "readonly": '.intval(empty($is_add)).', "min-date": "'.$data_accettazione.'", "max-date": "'.$data_conclusione.'" ]} + {[ "type": "date", "label": "'.tr('Data promemoria').'", "name": "data_richiesta", "required": 1, "value": "'.$data_accettazione.'", "readonly": '.intval($block_edit).', "min-date": "'.$data_accettazione.'", "max-date": "'.$data_conclusione.'" ]}
- {[ "type": "select", "label": "'.tr('Tipo intervento').'", "name": "idtipointervento", "required": 1, "id": "idtipointervento_", "value": "'.$record['idtipointervento'].'", "readonly": '.intval(empty($is_add)).', "ajax-source": "tipiintervento", "value": "'.$idtipointervento.'" ]} + {[ "type": "select", "label": "'.tr('Tipo intervento').'", "name": "idtipointervento", "required": 1, "id": "idtipointervento_", "value": "'.$record['idtipointervento'].'", "readonly": '.intval($block_edit).', "ajax-source": "tipiintervento", "value": "'.$idtipointervento.'" ]}
- {[ "type": "select", "label": "'.tr('Sede').'", "name": "idsede_c", "values": "query=SELECT 0 AS id, \'Sede legale\' AS descrizione UNION SELECT id, CONCAT( CONCAT_WS( \' (\', CONCAT_WS(\', \', `nomesede`, `citta`), `indirizzo` ), \')\') AS descrizione FROM an_sedi WHERE idanagrafica='.$id_anagrafica.'", "value": "'.$id_sede.'", "readonly": '.intval(empty($is_add)).', "required" : "1" ]} + {[ "type": "select", "label": "'.tr('Sede').'", "name": "idsede_c", "values": "query=SELECT 0 AS id, \'Sede legale\' AS descrizione UNION SELECT id, CONCAT( CONCAT_WS( \' (\', CONCAT_WS(\', \', `nomesede`, `citta`), `indirizzo` ), \')\') AS descrizione FROM an_sedi WHERE idanagrafica='.$id_anagrafica.'", "value": "'.$id_sede.'", "readonly": '.intval($block_edit).', "required" : "1" ]}
- {[ "type": "select", "multiple": "1", "label": "'.tr('Impianti a contratto').'", "name": "idimpianti[]", "help": "'.tr('Impianti sede selezionata').'", "values": "query=SELECT my_impianti.id AS id, my_impianti.nome AS descrizione FROM my_impianti_contratti INNER JOIN my_impianti ON my_impianti_contratti.idimpianto = my_impianti.id WHERE my_impianti_contratti.idcontratto = '.$id_parent.' ORDER BY descrizione", "value": "'.implode(',', $id_impianti).'", "readonly": '.intval(empty($is_add)).' ]} + {[ "type": "select", "multiple": "1", "label": "'.tr('Impianti a contratto').'", "name": "idimpianti[]", "help": "'.tr('Impianti sede selezionata').'", "values": "query=SELECT my_impianti.id AS id, my_impianti.nome AS descrizione FROM my_impianti_contratti INNER JOIN my_impianti ON my_impianti_contratti.idimpianto = my_impianti.id WHERE my_impianti_contratti.idcontratto = '.$id_parent.' ORDER BY descrizione", "value": "'.implode(',', $id_impianti).'", "readonly": '.intval($block_edit).' ]}
- {[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "richiesta", "id": "richiesta_", "readonly": '.intval(empty($is_add)).', "value": "'.$record['richiesta'].'" ]} + {[ "type": "textarea", "label": "'.tr('Descrizione').'", "name": "richiesta", "id": "richiesta_", "readonly": '.intval($block_edit).', "value": "'.$record['richiesta'].'" ]}
'; echo ' - +
-

'.tr('Materiale da utilizzare').'

+

'.tr('Righe').'

-
'; +
+
'; -include $plugin->filepath('ajax_articoli.php'); + if (!$block_edit) { + echo ' + + '.tr('Articolo').' + '; -echo ' -
'; - -if (!empty($is_add)) { - echo ' - '; -} - -echo ' -
-
'; - -echo ' - -
-
-

'.tr('Altre spese previste').'

+ echo ' + + '.tr('Riga').' + '; + } + echo ' +
-
-
'; +
'; -include $plugin->filepath('row-list.php'); +include $structure->filepath('row-list.php'); -echo ' -
'; - -if (!empty($is_add)) { - echo ' - '; -} - -echo ' + echo ' +
'; -echo '{( "name": "filelist_and_upload", "id_record": "'.$id_record.'", "id_module": "'.$id_module.'", "id_plugin": "'.$id_plugin.'", "readonly": '.intval(empty($is_add)).' )}'; +echo '{( "name": "filelist_and_upload", "id_record": "'.$id_record.'", "id_module": "'.$id_module.'", "id_plugin": "'.$id_plugin.'", "readonly": '.intval($block_edit).' )}'; echo ' -
+

'.tr('Promemoria ciclico?').'

@@ -193,7 +179,7 @@ echo ' echo ' -
+

'.tr('Pianificare interventi?').'

@@ -227,7 +213,7 @@ echo '
- +
'; @@ -300,11 +286,7 @@ echo ' }); - function refreshArticoli(id){ - $("#articoli").load("'.$plugin->fileurl('ajax_articoli.php').'?id_plugin='.$id_plugin.'&id_record=" + id + "&add='.$is_add.'"); - } - function refreshRighe(id){ - $("#righe").load("'.$plugin->fileurl('row-list.php').'?id_plugin='.$id_plugin.'&id_record=" + id + "&add='.$is_add.'"); + $("#righe").load("'.$plugin->fileurl('row-list.php').'?id_plugin='.$id_plugin.'&id_record=" + id + "&add='.$block_edit.'"); } '; diff --git a/plugins/pianificazione_interventi/row-add.php b/plugins/pianificazione_interventi/row-add.php new file mode 100755 index 000000000..f19837be8 --- /dev/null +++ b/plugins/pianificazione_interventi/row-add.php @@ -0,0 +1,78 @@ + 'manage_riga', + 'action' => 'add', + 'dir' => $documento->direzione, + 'idanagrafica' => $documento['idanagrafica'], + 'totale_imponibile' => $documento->totale_imponibile, + 'id_plugin' => $id_plugin, // Modificato +]; + +// Dati di default +$result = [ + 'descrizione' => '', + 'qta' => 1, + 'um' => '', + 'prezzo' => 0, + 'sconto_unitario' => 0, + 'tipo_sconto' => '', + 'idiva' => '', + 'idconto' => $idconto, + 'ritenuta_contributi' => true, +]; + +// Leggo l'iva predefinita per l'anagrafica e se non c'è leggo quella predefinita generica +$iva = $dbo->fetchArray('SELECT idiva_vendite AS idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($documento['idanagrafica'])); +$result['idiva'] = $iva[0]['idiva'] ?: setting('Iva predefinita'); + +// Importazione della gestione dedicata +$file = 'riga'; +if (get('is_descrizione') !== null) { + $file = 'descrizione'; + + $options['op'] = 'manage_descrizione'; +} elseif (get('is_articolo') !== null) { + $file = 'articolo'; + + // Aggiunta sconto di default da listino per le vendite + $listino = $dbo->fetchOne('SELECT prc_guadagno FROM an_anagrafiche INNER JOIN mg_listini ON an_anagrafiche.idlistino_vendite=mg_listini.id WHERE idanagrafica='.prepare($documento['idanagrafica'])); + + if (!empty($listino['prc_guadagno'])) { + $result['sconto_percentuale'] = $listino['prc_guadagno']; + $result['tipo_sconto'] = 'PRC'; + } + + $options['op'] = 'manage_articolo'; +} elseif (get('is_sconto') !== null) { + $file = 'sconto'; + + $options['op'] = 'manage_sconto'; +} + +// Modificato +echo ' +
'; + +echo App::load($file.'.php', $result, $options); + +echo ' +
+'; diff --git a/plugins/pianificazione_interventi/row-edit.php b/plugins/pianificazione_interventi/row-edit.php new file mode 100755 index 000000000..9f10e5eee --- /dev/null +++ b/plugins/pianificazione_interventi/row-edit.php @@ -0,0 +1,61 @@ + 'manage_riga', + 'action' => 'edit', + 'dir' => $documento->direzione, + 'idanagrafica' => $documento['idanagrafica'], + 'totale_imponibile' => $documento->totale_imponibile, + 'id_plugin' => $id_plugin, // Modificato +]; + +// Dati della riga +$id_riga = get('idriga'); +$type = get('type'); +$riga = $documento->getRiga($type, $id_riga); + +$result = $riga->toArray(); +$result['prezzo'] = $riga->prezzo_unitario; + +// Importazione della gestione dedicata +$file = 'riga'; +if ($riga->isDescrizione()) { + $file = 'descrizione'; + + $options['op'] = 'manage_descrizione'; +} elseif ($riga->isArticolo()) { + $file = 'articolo'; + + $options['op'] = 'manage_articolo'; +} elseif ($riga->isSconto()) { + $file = 'sconto'; + + $options['op'] = 'manage_sconto'; +} + +// Modificato +echo ' +
'; + +echo App::load($file.'.php', $result, $options); + +echo ' +
+'; diff --git a/plugins/pianificazione_interventi/row-list.php b/plugins/pianificazione_interventi/row-list.php new file mode 100755 index 000000000..84a27215f --- /dev/null +++ b/plugins/pianificazione_interventi/row-list.php @@ -0,0 +1,172 @@ +getRighe(); + +if (!$righe->isEmpty()) { + echo ' + + + + + + '; + + if ($show_prezzi) { + echo ' + + + '; + } + + if (!$block_edit) { + echo ' + '; + } + echo ' + + + + '; + + foreach ($righe as $riga) { + $r = $riga->toArray(); + + $extra = ''; + $mancanti = $riga->isArticolo() ? $riga->missing_serials_number : 0; + if ($mancanti > 0) { + $extra = 'class="warning"'; + } + $descrizione = (!empty($riga->articolo) ? $riga->articolo->codice.' - ' : '').$riga['descrizione']; + + echo ' + + '; + + // Quantità + echo ' + '; + + //Costo unitario + echo ' + '; + + if ($show_prezzi) { + // Prezzo unitario + echo ' + '; + + echo ' + '; + + // Prezzo di vendita + echo ' + '; + } + + // Pulsante per riportare nel magazzino centrale. + // Visibile solo se l'intervento non è stato nè fatturato nè completato. + if (!$block_edit) { + echo ' + '; + } + echo ' + '; + } + + echo ' + +
'.tr('Descrizione').''.tr('Q.tà').''.tr('Prezzo di acquisto').''.tr('Prezzo di vendita').''.tr('Iva').''.tr('Imponibile').''.tr('#').'
+ '.Modules::link($riga->isArticolo() ? Modules::get('Articoli')['id'] : null, $riga->isArticolo() ? $riga['idarticolo'] : null, $descrizione); + + if ($riga->isArticolo()) { + if (!empty($mancanti)) { + echo ' +
'.tr('_NUM_ serial mancanti', [ + '_NUM_' => $mancanti, + ]).''; + } + + $serials = $riga->serials; + if (!empty($serials)) { + echo ' +
'.tr('SN').': '.implode(', ', $serials); + } + } + + echo ' +
+ '.Translator::numberToLocale($r['qta'], 'qta').' '.$r['um'].' + + '.moneyFormat($riga->costo_unitario).' + + '.moneyFormat($riga->prezzo_unitario); + + if (abs($r['sconto_unitario']) > 0) { + $text = $r['sconto_unitario'] > 0 ? tr('sconto _TOT_ _TYPE_') : tr('maggiorazione _TOT_ _TYPE_'); + + echo ' +
'.replace($text, [ + '_TOT_' => Translator::numberToLocale(abs($r['sconto_unitario'])), + '_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : currency()), + ]).''; + } + + echo ' +
+ '.moneyFormat($r['iva']).' + + '.moneyFormat($riga->imponibile).' + '; + + if ($r['abilita_serial']) { + echo ' + '; + } + + echo ' + + + +
'; +} else { + echo ' +

'.tr('Nessuna riga presente').'.

'; +} + +?> + + diff --git a/plugins/pianificazione_interventi/src/Components/Articolo.php b/plugins/pianificazione_interventi/src/Components/Articolo.php new file mode 100755 index 000000000..5a4558ee8 --- /dev/null +++ b/plugins/pianificazione_interventi/src/Components/Articolo.php @@ -0,0 +1,39 @@ +contratto->tipo->dir; + } +} diff --git a/plugins/pianificazione_interventi/src/Components/Descrizione.php b/plugins/pianificazione_interventi/src/Components/Descrizione.php new file mode 100755 index 000000000..e100513eb --- /dev/null +++ b/plugins/pianificazione_interventi/src/Components/Descrizione.php @@ -0,0 +1,26 @@ +belongsTo(Promemoria::class, $this->getParentID()); + } + + public function contratto() + { + return $this->parent(); + } + + public function fixIvaIndetraibile() + { + } + + public function getQtaEvasaAttribute() + { + return 0; + } + + public function setQtaEvasaAttribute($value) + { + } + + /** + * Effettua i conti per il subtotale della riga. + */ + protected function fixSubtotale() + { + $this->fixIva(); + } +} diff --git a/plugins/pianificazione_interventi/src/Components/Riga.php b/plugins/pianificazione_interventi/src/Components/Riga.php new file mode 100755 index 000000000..5e50afd99 --- /dev/null +++ b/plugins/pianificazione_interventi/src/Components/Riga.php @@ -0,0 +1,26 @@ +contratto()->associate($contratto); + $model->tipo()->associate($tipo); + + $model->data_richiesta = $data_richiesta; + $model->idsede = $contratto->idsede; + + // Salvataggio delle informazioni + $model->save(); + + return $model; + } + + public function getPluginAttribute() + { + return 'Pianificazione interventi'; + } + + public function getDirezioneAttribute() + { + return 'entrata'; + } + + public function pianifica(Intervento $intervento) + { + $this->intervento()->associate($intervento); // Collego l'intervento ai promemoria + $this->save(); + + // Copia delle righe + $righe = $this->getRighe(); + foreach ($righe as $riga) { + $copia = $riga->copiaIn($intervento, $riga->qta); + + if ($copia->isArticolo()) { + $copia->movimenta($copia->qta); + } + } + + // Copia degli allegati + $allegati = $this->uploads(); + foreach ($allegati as $allegato) { + $allegato->copia([ + 'id_module' => $intervento->getModule()->id, + 'id_record' => $intervento->id, + ]); + } + + // Collego gli impianti del promemoria all'intervento + $database = database(); + if (!empty($this->idimpianti)) { + $impianti = explode(',', $this->idimpianti); + foreach ($impianti as $impianto) { + $database->query('INSERT INTO my_impianti_interventi (idintervento, idimpianto) VALUES ('.prepare($intervento->id).', '.prepare($impianto).' )'); + } + } + } + + public function anagrafica() + { + return $this->contratto->anagrafica(); + } + + public function contratto() + { + return $this->belongsTo(Contratto::class, 'idcontratto'); + } + + public function intervento() + { + return $this->belongsTo(Intervento::class, 'idintervento'); + } + + public function tipo() + { + return $this->belongsTo(TipoSessione::class, 'idtipointervento'); + } + + public function articoli() + { + return $this->hasMany(Components\Articolo::class, 'id_promemoria'); + } + + public function righe() + { + return $this->hasMany(Components\Riga::class, 'id_promemoria'); + } + + public function sconti() + { + return $this->hasMany(Components\Sconto::class, 'id_promemoria'); + } + + public function descrizioni() + { + return $this->hasMany(Components\Descrizione::class, 'id_promemoria'); + } +} diff --git a/src/App.php b/src/App.php index cac9089b4..cbb360f4a 100755 --- a/src/App.php +++ b/src/App.php @@ -253,6 +253,7 @@ class App $id_module = $module['id']; $id_record = filter('id_record'); + $id_plugin = $options['id_plugin']; $directory = empty($directory) ? 'include|custom|/common/' : $directory; diff --git a/update/2_4_14.sql b/update/2_4_14.sql index 0d238329b..25cfe4f90 100755 --- a/update/2_4_14.sql +++ b/update/2_4_14.sql @@ -42,16 +42,11 @@ ALTER TABLE `in_righe_interventi` ADD `old_id` int(11); INSERT INTO `in_righe_interventi` (`old_id`, `idarticolo`, `idintervento`, `is_descrizione`, `is_sconto`, `descrizione`, `prezzo_acquisto`, `prezzo_vendita`, `sconto`, `sconto_unitario`, `tipo_sconto`, `idiva`, `desc_iva`, `iva`, `qta`, `um`, `abilita_serial`, `idimpianto`) SELECT `id`, `idarticolo`, `idintervento`, `is_descrizione`, `is_sconto`, `descrizione`, `prezzo_acquisto`, `prezzo_vendita`, `sconto`, `sconto_unitario`, `tipo_sconto`, `idiva`, `desc_iva`, `iva`, `qta`, `um`, `abilita_serial`, `idimpianto` FROM `mg_articoli_interventi`; -UPDATE `mg_prodotti` SET `id_riga_intervento` = (SELECT `id` FROM `in_righe_interventi` WHERE `in_righe_interventi`.`old_id` = `id_riga_intervento`) WHERE `id_riga_intervento` IS NOT NULL; -ALTER TABLE `in_righe_interventi` DROP `old_id`; +ALTER TABLE `co_promemoria_righe` ADD `abilita_serial` boolean NOT NULL DEFAULT '0' AFTER `um`, ADD `idimpianto` int(11), ADD `idarticolo` int(11), ADD FOREIGN KEY (`idarticolo`) REFERENCES `mg_articoli`(`id`) ON DELETE SET NULL, CHANGE `um` `um` varchar(25); +ALTER TABLE `co_promemoria_righe` ADD `is_descrizione` TINYINT(1) DEFAULT FALSE NOT NULL, ADD `is_sconto` BOOLEAN DEFAULT FALSE NOT NULL AFTER `is_descrizione`; + +INSERT INTO `co_promemoria_righe` (`idarticolo`, `id_promemoria`, `descrizione`, `prezzo_acquisto`, `prezzo_vendita`, `sconto`, `sconto_unitario`, `tipo_sconto`, `idiva`, `desc_iva`, `iva`, `qta`, `um`, `abilita_serial`, `idimpianto`) SELECT `idarticolo`, `id_promemoria`, `descrizione`, `prezzo_acquisto`, `prezzo_vendita`, `sconto`, `sconto_unitario`, `tipo_sconto`, `idiva`, `desc_iva`, `iva`, `qta`, `um`, `abilita_serial`, `idimpianto` FROM `co_promemoria_articoli`; -ALTER TABLE `in_righe_interventi` CHANGE `prezzo_acquisto` `costo_unitario` decimal(12,6) NOT NULL AFTER `qta`, - CHANGE `prezzo_vendita` `prezzo_unitario` decimal(12,6) NOT NULL AFTER `costo_unitario`, - ADD `iva_unitaria` decimal(12,6) NOT NULL AFTER `prezzo_unitario`, - ADD `prezzo_unitario_ivato` decimal(12,6) NOT NULL AFTER `iva_unitaria`, - ADD `sconto_percentuale` decimal(12,6) NOT NULL AFTER `sconto_unitario`, - ADD `sconto_iva` decimal(12,6) NOT NULL AFTER `sconto_unitario`, - ADD `sconto_unitario_ivato` decimal(12,6) NOT NULL AFTER `sconto_iva`; ALTER TABLE `co_righe_documenti` CHANGE `prezzo_unitario_acquisto` `costo_unitario` decimal(12,6) NOT NULL AFTER `qta`, ADD `prezzo_unitario` decimal(12,6) NOT NULL AFTER `costo_unitario`, ADD `iva_unitaria` decimal(12,6) NOT NULL AFTER `prezzo_unitario`, @@ -87,38 +82,76 @@ ALTER TABLE `or_righe_ordini` CHANGE `prezzo_unitario_acquisto` `costo_unitario` ADD `sconto_percentuale` decimal(12,6) NOT NULL AFTER `sconto_unitario`, ADD `sconto_iva` decimal(12,6) NOT NULL AFTER `sconto_percentuale`, ADD `sconto_unitario_ivato` decimal(12,6) NOT NULL AFTER `sconto_iva`; +ALTER TABLE `in_righe_interventi` CHANGE `prezzo_acquisto` `costo_unitario` decimal(12,6) NOT NULL AFTER `qta`, + CHANGE `prezzo_vendita` `prezzo_unitario` decimal(12,6) NOT NULL AFTER `costo_unitario`, + ADD `iva_unitaria` decimal(12,6) NOT NULL AFTER `prezzo_unitario`, + ADD `prezzo_unitario_ivato` decimal(12,6) NOT NULL AFTER `iva_unitaria`, + ADD `sconto_percentuale` decimal(12,6) NOT NULL AFTER `sconto_unitario`, + ADD `sconto_iva` decimal(12,6) NOT NULL AFTER `sconto_unitario`, + ADD `sconto_unitario_ivato` decimal(12,6) NOT NULL AFTER `sconto_iva`; +ALTER TABLE `co_promemoria_righe` CHANGE `prezzo_acquisto` `costo_unitario` decimal(12,6) NOT NULL AFTER `qta`, + CHANGE `prezzo_vendita` `prezzo_unitario` decimal(12,6) NOT NULL AFTER `costo_unitario`, + ADD `iva_unitaria` decimal(12,6) NOT NULL AFTER `prezzo_unitario`, + ADD `prezzo_unitario_ivato` decimal(12,6) NOT NULL AFTER `iva_unitaria`, + ADD `sconto_percentuale` decimal(12,6) NOT NULL AFTER `sconto_unitario`, + ADD `sconto_iva` decimal(12,6) NOT NULL AFTER `sconto_unitario`, + ADD `sconto_unitario_ivato` decimal(12,6) NOT NULL AFTER `sconto_iva`; UPDATE `co_righe_documenti` SET `qta` = IF(`qta` = 0, 1, `qta`), `prezzo_unitario` = `subtotale` / `qta`, + `iva_unitaria` = `iva` / `qta`, `prezzo_unitario_ivato` = `prezzo_unitario` + `iva`, `sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0), `sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`), `sconto_unitario_ivato` = `sconto_unitario`; UPDATE `co_righe_preventivi` SET `qta` = IF(`qta` = 0, 1, `qta`), `prezzo_unitario` = `subtotale` / `qta`, - `prezzo_unitario_ivato` = `prezzo_unitario` + `iva`, + `iva_unitaria` = `iva` / `qta`, + `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`, `sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0), `sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`), `sconto_unitario_ivato` = `sconto_unitario`; UPDATE `co_righe_contratti` SET `qta` = IF(`qta` = 0, 1, `qta`), `prezzo_unitario` = `subtotale` / `qta`, + `iva_unitaria` = `iva` / `qta`, `prezzo_unitario_ivato` = `prezzo_unitario` + `iva`, `sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0), `sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`), `sconto_unitario_ivato` = `sconto_unitario`; UPDATE `dt_righe_ddt` SET `qta` = IF(`qta` = 0, 1, `qta`), `prezzo_unitario` = `subtotale` / `qta`, - `prezzo_unitario_ivato` = `prezzo_unitario` + `iva`, + `iva_unitaria` = `iva` / `qta`, + `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`, `sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0), `sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`), `sconto_unitario_ivato` = `sconto_unitario`; UPDATE `or_righe_ordini` SET `qta` = IF(`qta` = 0, 1, `qta`), `prezzo_unitario` = `subtotale` / `qta`, - `prezzo_unitario_ivato` = `prezzo_unitario` + `iva`, + `iva_unitaria` = `iva` / `qta`, + `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`, `sconto_unitario_ivato` = `sconto_unitario`, `sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0), `sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`), `sconto_unitario_ivato` = `sconto_unitario`; +UPDATE `in_righe_interventi` SET `qta` = IF(`qta` = 0, 1, `qta`), + `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`, + `iva_unitaria` = `iva` / `qta`, + `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`, + `sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0), + `sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`), + `sconto_unitario_ivato` = `sconto_unitario`; +UPDATE `co_promemoria_righe` SET `qta` = IF(`qta` = 0, 1, `qta`), + `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`, + `iva_unitaria` = `iva` / `qta`, + `prezzo_unitario_ivato` = `prezzo_unitario` + `iva_unitaria`, + `sconto_percentuale` = IF(`tipo_sconto` = 'PRC', `sconto_unitario`, 0), + `sconto_unitario` = IF(`tipo_sconto` = 'PRC', `sconto` / `qta`, `sconto_unitario`), + `sconto_unitario_ivato` = `sconto_unitario`; + +ALTER TABLE `co_promemoria_righe` RENAME TO `co_righe_promemoria`; + +DROP TABLE `mg_articoli_interventi`; +DROP TABLE `co_promemoria_articoli`; -- Aggiunta supporto a prezzi ivati INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `created_at`, `updated_at`, `order`, `help`) VALUES (NULL, 'Utilizza prezzi di vendita con IVA incorporata', '0', 'boolean', '1', 'Fatturazione', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, NULL, 'Abilita la gestione degli importi ivati per i documenti di vendita.');