diff --git a/include/src/Model.php b/include/src/Model.php index cd457b4e1..c9d8c6ba8 100644 --- a/include/src/Model.php +++ b/include/src/Model.php @@ -7,7 +7,10 @@ use Illuminate\Database\Eloquent\Model as Original; abstract class Model extends Original { // Retrocompatibilità MySQL - const UPDATED_AT = null; + public function setUpdatedAtAttribute($value) + { + // to Disable updated_at + } /** * Crea una nuova istanza del modello. diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php index ee1fdb4de..483ac1815 100644 --- a/modules/contratti/actions.php +++ b/modules/contratti/actions.php @@ -198,9 +198,6 @@ switch (post('op')) { flash()->info(tr('Riga aggiunta!')); } - // Ricalcolo inps, ritenuta e bollo - ricalcola_costiagg_fattura($id_record); - break; case 'manage_descrizione': @@ -265,9 +262,9 @@ switch (post('op')) { // eliminazione contratto case 'delete': - $dbo->query('DELETE FROM co_contratti WHERE id='.prepare($id_record)); $dbo->query('DELETE FROM co_promemoria WHERE idcontratto='.prepare($id_record)); - $dbo->query('DELETE FROM co_righe_contratti WHERE idcontratto='.prepare($id_record)); + + $contratto->delete(); flash()->info(tr('Contratto eliminato!')); diff --git a/modules/contratti/row-add.php b/modules/contratti/row-add.php index 677af3f51..1777261ff 100644 --- a/modules/contratti/row-add.php +++ b/modules/contratti/row-add.php @@ -54,4 +54,5 @@ if (get('is_descrizione') !== null) { $options['op'] = 'manage_sconto'; } + echo App::load($file.'.php', $result, $options); diff --git a/modules/contratti/row-edit.php b/modules/contratti/row-edit.php index a6e30b656..4f093f342 100644 --- a/modules/contratti/row-edit.php +++ b/modules/contratti/row-edit.php @@ -23,8 +23,6 @@ $riga = $documento->getRighe()->find($id_riga); $result = $riga->toArray(); $result['prezzo'] = $riga->prezzo_unitario_vendita; -// Importazione della gestione dedicata - // Importazione della gestione dedicata $file = 'riga'; if ($riga->isDescrizione()) { diff --git a/modules/contratti/row-list.php b/modules/contratti/row-list.php index 4df347834..ecf6ee376 100644 --- a/modules/contratti/row-list.php +++ b/modules/contratti/row-list.php @@ -119,7 +119,7 @@ function editRow(id){ } function deleteRow(id){ - if(confirm("'.tr('Rimuovere questa riga dal contratto?').'")){ + if(confirm("'.tr('Rimuovere questa riga dal documento?').'")){ $("#delete-form-" + id).submit(); } } diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php index 482b5138b..979973010 100644 --- a/modules/preventivi/actions.php +++ b/modules/preventivi/actions.php @@ -3,6 +3,8 @@ include_once __DIR__.'/../../core.php'; use Modules\Anagrafiche\Anagrafica; +use Modules\Articoli\Articolo as ArticoloOriginale; +use Modules\Preventivi\Components\Descrizione; use Modules\Interventi\TipoSessione; use Modules\Preventivi\Components\Articolo; use Modules\Preventivi\Components\Riga; @@ -29,72 +31,35 @@ switch (post('op')) { case 'update': if (isset($id_record)) { - $idstato = post('idstato'); - $nome = post('nome'); - $idanagrafica = post('idanagrafica'); - $idsede = post('idsede'); - $idagente = post('idagente'); - $idreferente = post('idreferente'); - $idpagamento = post('idpagamento'); - $idporto = post('idporto'); - $tempi_consegna = post('tempi_consegna'); - $numero = post('numero'); + $preventivo->idstato= post('idstato'); + $preventivo->nome= post('nome'); + $preventivo->idanagrafica= post('idanagrafica'); + $preventivo->idsede= post('idsede'); + $preventivo->idagente= post('idagente'); + $preventivo->idreferente= post('idreferente'); + $preventivo->idpagamento= post('idpagamento'); + $preventivo->idporto= post('idporto'); + $preventivo->tempi_consegna= post('tempi_consegna'); + $preventivo->numero= post('numero'); + $preventivo->data_bozza= post('data_bozza'); + $preventivo->data_accettazione= post('data_accettazione'); + $preventivo->data_rifiuto= post('data_rifiuto'); + $preventivo->data_conclusione= post('data_conclusione'); + $preventivo->esclusioni= post('esclusioni'); + $preventivo->descrizione= post('descrizione'); + $preventivo->id_documento_fe= post('id_documento_fe'); + $preventivo->num_item= post('num_item'); + $preventivo->codice_cig= post('codice_cig'); + $preventivo->codice_cup= post('codice_cup'); + $preventivo->validita= post('validita'); + $preventivo->idtipointervento= post('idtipointervento'); + $preventivo->idiva= post('idiva'); - $tipo_sconto = post('tipo_sconto_generico'); - $sconto = post('sconto_generico'); + $preventivo->save(); - // $budget = post('budget'); - // $budget = str_replace( ",", ".", $budget ); - - $data_bozza = post('data_bozza'); - $data_accettazione = post('data_accettazione'); - $data_rifiuto = post('data_rifiuto'); - $data_conclusione = post('data_conclusione'); - $esclusioni = post('esclusioni'); - $descrizione = post('descrizione'); - $validita = post('validita'); - $idtipointervento = post('idtipointervento'); - - // $costo_diritto_chiamata = post('costo_diritto_chiamata'); - // $ore_lavoro = str_replace( ",", ".", post('ore_lavoro') ); - // $costo_orario = post('costo_orario'); - // $costo_km = post('costo_km'); - - $idiva = post('idiva'); - - $id_documento_fe = post('id_documento_fe'); - $num_item = post('num_item'); - $codice_cig = post('codice_cig'); - $codice_cup = post('codice_cup'); - - $query = 'UPDATE co_preventivi SET idstato='.prepare($idstato).','. - ' nome='.prepare($nome).','. - ' idanagrafica='.prepare($idanagrafica).','. - ' idsede='.prepare($idsede).','. - ' idagente='.prepare($idagente).','. - ' idreferente='.prepare($idreferente).','. - ' idpagamento='.prepare($idpagamento).','. - ' idporto='.prepare($idporto).','. - ' tempi_consegna='.prepare($tempi_consegna).','. - ' numero='.prepare($numero).','. - ' data_bozza='.prepare($data_bozza).','. - ' data_accettazione='.prepare($data_accettazione).','. - ' data_rifiuto='.prepare($data_rifiuto).','. - ' data_conclusione='.prepare($data_conclusione).','. - ' esclusioni='.prepare($esclusioni).','. - ' descrizione='.prepare($descrizione).','. - ' id_documento_fe='.prepare($id_documento_fe).','. - ' num_item='.prepare($num_item).','. - ' codice_cig='.prepare($codice_cig).','. - ' codice_cup='.prepare($codice_cup).','. - ' validita='.prepare($validita).','. - ' idtipointervento='.prepare($idtipointervento).','. - ' idiva='.prepare($idiva).' WHERE id='.prepare($id_record); - $dbo->query($query); - - // update_budget_preventivo( $id_record ); flash()->info(tr('Preventivo modificato correttamente!')); } + break; // Duplica preventivo @@ -140,25 +105,6 @@ switch (post('op')) { } break; - // Scollegamento articolo da ordine - case 'unlink_articolo': - if (post('idriga') !== null) { - $idriga = post('idriga'); - $idarticolo = post('idarticolo'); - - // Leggo la quantità di questo articolo nell'ordine - $query = 'SELECT qta, subtotale FROM co_righe_preventivi WHERE id='.prepare($idriga); - $rs = $dbo->fetchArray($query); - $qta = floatval($rs[0]['qta']); - $subtotale = $rs[0]['subtotale']; - - // Elimino la riga dal preventivo - $dbo->query('DELETE FROM co_righe_preventivi WHERE id='.prepare($idriga)); - - flash()->info(tr('Riga rimossa!')); - } - break; - // Scollegamento intervento da preventivo case 'unlink': if (isset($_GET['idpreventivo']) && isset($_GET['idintervento'])) { @@ -174,59 +120,46 @@ switch (post('op')) { } break; - // eliminazione preventivo + // Eliminazione preventivo case 'delete': - $rs_revisioni = $dbo->fetchArray('SELECT master_revision FROM co_preventivi WHERE id='.prepare($id_record)); - - //Cancello preventivo e revisioni - $dbo->query('DELETE FROM co_preventivi WHERE master_revision='.prepare($rs_revisioni[0]['master_revision'])); - - $dbo->update('in_interventi', [ - 'id_preventivo' => null, - ], ['id_preventivo' => $id_record]); + $preventivo->delete(); flash()->info(tr('Preventivo eliminato!')); break; - // Aggiungo una riga al preventivo - case 'addriga': - $idarticolo = post('idarticolo'); - $idiva = post('idiva'); - $descrizione = post('descrizione'); + case 'manage_articolo': + if (post('idriga') != null) { + $articolo = Articolo::find(post('idriga')); + } else { + $originale = ArticoloOriginale::find(post('idarticolo')); + $articolo = Articolo::build($preventivo, $originale); + } $qta = post('qta'); - $prezzo = post('prezzo'); - $prezzo_acquisto = post('prezzo_acquisto'); - // Calcolo dello sconto - $sconto_unitario = post('sconto'); - $tipo_sconto = post('tipo_sconto'); - $sconto = calcola_sconto([ - 'sconto' => $sconto_unitario, - 'prezzo' => $prezzo, - 'tipo' => $tipo_sconto, - 'qta' => $qta, - ]); + $articolo->descrizione = post('descrizione'); + $articolo->um = post('um') ?: null; - $subtot = $prezzo * $qta; + $articolo->id_iva = post('idiva'); - $um = post('um'); + //$articolo->prezzo_unitario_acquisto = post('prezzo_acquisto') ?: 0; + $articolo->prezzo_unitario_vendita = post('prezzo'); + $articolo->sconto_unitario = post('sconto'); + $articolo->tipo_sconto = post('tipo_sconto'); - // Lettura iva dell'articolo - $rs2 = $dbo->fetchArray('SELECT descrizione, percentuale, indetraibile FROM co_iva WHERE id='.prepare($idiva)); - $iva = ($subtot - $sconto) / 100 * $rs2[0]['percentuale']; - $iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile']; + try { + $articolo->qta = $qta; + } catch (UnexpectedValueException $e) { + flash()->error(tr('Alcuni serial number sono già stati utilizzati!')); + } - $dbo->query('INSERT INTO co_righe_preventivi(idpreventivo, idarticolo, idiva, desc_iva, iva, iva_indetraibile, descrizione, prezzo_unitario_acquisto, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto, is_descrizione, `order`) VALUES ('.prepare($id_record).', '.prepare($idarticolo).', '.prepare($idiva).', '.prepare($rs2[0]['descrizione']).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo_acquisto).', '.prepare($subtot).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', '.prepare(empty($qta)).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_preventivi AS t WHERE idpreventivo='.prepare($id_record).'))'); + $articolo->save(); - // Messaggi informativi - if (!empty($idarticolo)) { - flash()->info(tr('Articolo aggiunto!')); - } elseif (!empty($qta)) { - flash()->info(tr('Riga aggiunta!')); + if (post('idriga') != null) { + flash()->info(tr('Articolo modificato!')); } else { - flash()->info(tr('Riga descrittiva aggiunta!')); + flash()->info(tr('Articolo aggiunto!')); } break; @@ -254,62 +187,72 @@ switch (post('op')) { break; - case 'editriga': - $idriga = post('idriga'); - $descrizione = post('descrizione'); - $idarticolo = post('idarticolo'); - //Info riga Preventivo - $rs = $dbo->fetchArray('SELECT * FROM co_righe_preventivi WHERE id='.prepare($idriga)); - $is_descrizione = $rs[0]['is_descrizione']; + case 'manage_riga': + if (post('idriga') != null) { + $riga = Riga::find(post('idriga')); + } else { + $riga = Riga::build($preventivo); + } $qta = post('qta'); - $prezzo = post('prezzo'); - $prezzo_acquisto = post('prezzo_acquisto'); - $subtot = $prezzo * $qta; - // Calcolo dello sconto - $sconto_unitario = post('sconto'); - $tipo_sconto = post('tipo_sconto'); - $sconto = calcola_sconto([ - 'sconto' => $sconto_unitario, - 'prezzo' => $prezzo, - 'tipo' => $tipo_sconto, - 'qta' => $qta, - ]); + $riga->descrizione = post('descrizione'); + $riga->um = post('um') ?: null; - $idiva = post('idiva'); - $um = post('um'); + $riga->id_iva = post('idiva'); - // Calcolo iva - $rs2 = $dbo->fetchArray('SELECT descrizione, percentuale, indetraibile FROM co_iva WHERE id='.prepare($idiva)); - $iva = ($subtot - $sconto) / 100 * $rs2[0]['percentuale']; - $iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile']; - $desc_iva = $rs2[0]['descrizione']; + //$riga->prezzo_unitario_acquisto = post('prezzo_acquisto') ?: 0; + $riga->prezzo_unitario_vendita = post('prezzo'); + $riga->sconto_unitario = post('sconto'); + $riga->tipo_sconto = post('tipo_sconto'); - if ($is_descrizione == 0) { - // Modifica riga generica sul documento - $query = 'UPDATE co_righe_preventivi SET idarticolo='.prepare($idarticolo).', idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', prezzo_unitario_acquisto='.prepare($prezzo_acquisto).',subtotale='.prepare($subtot).', sconto='.prepare($sconto).', sconto_unitario='.prepare($sconto_unitario).', tipo_sconto='.prepare($tipo_sconto).', um='.prepare($um).', qta='.prepare($qta).' WHERE id='.prepare($idriga); + $riga->qta = $qta; + + $riga->save(); + + if (post('idriga') != null) { + flash()->info(tr('Riga modificata!')); } else { - $query = 'UPDATE co_righe_preventivi SET descrizione='.prepare($descrizione).' WHERE id='.prepare($idriga); + flash()->info(tr('Riga aggiunta!')); } - $dbo->query($query); - flash()->info('Riga modificata!'); break; - case 'update_position': - $orders = explode(',', $_POST['order']); - $order = 0; + case 'manage_descrizione': + if (post('idriga') != null) { + $riga = Descrizione::find(post('idriga')); + } else { + $riga = Descrizione::build($preventivo); + } - foreach ($orders as $idriga) { - $dbo->query('UPDATE `co_righe_preventivi` SET `order`='.prepare($order).' WHERE id='.prepare($idriga)); - ++$order; - } + $riga->descrizione = post('descrizione'); - break; + $riga->save(); + + if (post('idriga') != null) { + flash()->info(tr('Riga descrittiva modificata!')); + } else { + flash()->info(tr('Riga descrittiva aggiunta!')); + } + + break; + + // Eliminazione riga + case 'delete_riga': + $id_riga = post('idriga'); + if ($id_riga !== null) { + $riga = Descrizione::find($id_riga) ?: Riga::find($id_riga); + $riga = $riga ? $riga : Articolo::find($id_riga); + $riga = $riga ? $riga : Sconto::find($id_riga); + + $riga->delete(); + + flash()->info(tr('Riga eliminata!')); + } + + break; case 'add_revision': - //Copio il preventivo $rs_preventivo = $dbo->fetchArray("SELECT * FROM co_preventivi WHERE id='".$id_record."'"); diff --git a/modules/preventivi/modutil.php b/modules/preventivi/modutil.php index d08ff67f1..b2ebefca6 100644 --- a/modules/preventivi/modutil.php +++ b/modules/preventivi/modutil.php @@ -4,27 +4,6 @@ include_once __DIR__.'/../../core.php'; use Modules\Preventivi\Preventivo; -/** - * Questa funzione rimuove un articolo dal ddt data e lo riporta in magazzino - * $idarticolo integer codice dell'articolo da scollegare dall'ordine - * $idordine integer codice dell'ordine da cui scollegare l'articolo. - */ -function rimuovi_articolo_dapreventivo($idarticolo, $idpreventivo, $idriga) -{ - global $dir; - - $dbo = database(); - - // Leggo la quantità di questo articolo nell'ordine - $query = 'SELECT qta, subtotale FROM co_righe_preventivi WHERE id='.prepare($idriga); - $rs = $dbo->fetchArray($query); - $qta = floatval($rs[0]['qta']); - $subtotale = $rs[0]['subtotale']; - - // Elimino la riga dall'ordine - $dbo->query('DELETE FROM co_righe_preventivi WHERE id='.prepare($idriga)); -} - function get_imponibile_preventivo($idpreventivo) { $preventivo = Preventivo::find($idpreventivo); @@ -51,30 +30,3 @@ function get_stato_preventivo($idpreventivo) return 'Non evaso'; } } - -/** - * Aggiorna il budget del preventivo leggendo tutte le righe inserite. - * - * @deprecated 2.3 - */ -function update_budget_preventivo($idpreventivo) -{ - $dbo = database(); - - // Totale articoli - $rs = $dbo->fetchArray('SELECT SUM(subtotale) AS totale FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo='.prepare($idpreventivo)); - $totale_articoli = $rs[0]['totale']; - - $rs = $dbo->fetchArray('SELECT SUM(sconto*qta) AS totale FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo='.prepare($idpreventivo)); - $totale_sconto = $rs[0]['totale']; - - $rs = $dbo->fetchArray('SELECT SUM(iva) AS totale FROM co_righe_preventivi GROUP BY idpreventivo HAVING idpreventivo='.prepare($idpreventivo)); - $totale_iva = $rs[0]['totale']; - - // Totale costo ore, km e diritto di chiamata - // $rs = $dbo->fetchArray("SELECT SUM(costo_orario*ore_lavoro + costo_diritto_chiamata) AS totale FROM co_preventivi GROUP BY id HAVING id=\"".$idpreventivo."\""); - // $totale_lavoro = $rs[0]['totale']; - - // Aggiorno il budget su co_preventivi - $dbo->query('UPDATE co_preventivi SET budget='.prepare(($totale_articoli - $totale_sconto) + $totale_iva).' WHERE id='.prepare($idpreventivo)); -} diff --git a/modules/preventivi/row-add.php b/modules/preventivi/row-add.php index 0e4f46ebf..ba7f0406d 100644 --- a/modules/preventivi/row-add.php +++ b/modules/preventivi/row-add.php @@ -9,7 +9,7 @@ $documento = Preventivo::find($id_record); // Impostazioni per la gestione $options = [ - 'op' => 'addriga', + 'op' => 'manage_riga', 'action' => 'add', 'dir' => $documento->direzione, 'idanagrafica' => $documento['idanagrafica'], @@ -43,8 +43,12 @@ if ($listino[0]['prc_guadagno'] > 0) { $file = 'riga'; if (get('is_descrizione') !== null) { $file = 'descrizione'; + + $options['op'] = 'manage_descrizione'; } elseif (get('is_articolo') !== null) { $file = 'articolo'; + + $options['op'] = 'manage_articolo'; } elseif (get('is_sconto') !== null) { $file = 'sconto'; diff --git a/modules/preventivi/row-edit.php b/modules/preventivi/row-edit.php index c91fb8ae6..a9d3b90b8 100644 --- a/modules/preventivi/row-edit.php +++ b/modules/preventivi/row-edit.php @@ -9,7 +9,7 @@ $documento = Preventivo::find($id_record); // Impostazioni per la gestione $options = [ - 'op' => 'editriga', + 'op' => 'manage_riga', 'action' => 'edit', 'dir' => $documento->direzione, 'idanagrafica' => $documento['idanagrafica'], @@ -23,18 +23,19 @@ $riga = $documento->getRighe()->find($id_riga); $result = $riga->toArray(); $result['prezzo'] = $riga->prezzo_unitario_vendita; -// Importazione della gestione dedicata - // 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'; } - echo App::load($file.'.php', $result, $options); diff --git a/modules/preventivi/row-list.php b/modules/preventivi/row-list.php index acec870a7..695ba7477 100644 --- a/modules/preventivi/row-list.php +++ b/modules/preventivi/row-list.php @@ -2,11 +2,8 @@ include_once __DIR__.'/../../core.php'; -/* -ARTICOLI + RIGHE GENERICHE -*/ -$q_art = 'SELECT *, round(sconto_unitario,'.setting('Cifre decimali per importi').') AS sconto_unitario, round(sconto,'.setting('Cifre decimali per importi').') AS sconto, round(subtotale,'.setting('Cifre decimali per importi').') AS subtotale, IFNULL((SELECT codice FROM mg_articoli WHERE id=idarticolo), "") AS codice FROM co_righe_preventivi WHERE idpreventivo='.prepare($id_record).' ORDER BY `order`'; -$rs = $dbo->fetchArray($q_art); +// Righe documento +$righe = $preventivo->getRighe(); echo ' @@ -15,7 +12,7 @@ echo ' - + @@ -23,77 +20,68 @@ echo ' '; -// se ho almeno un articolo caricato mostro la riga -foreach ($rs as $r) { +foreach ($righe as $riga) { echo ' - - '; - if (!empty($r['idarticolo'])) { - echo Modules::link('Articoli', $r['idarticolo'], $r['codice'].' - '.$r['descrizione']); + // Descrizione + $descrizione = nl2br($riga->descrizione); + if ($riga->isArticolo()) { + $descrizione = Modules::link('Articoli', $riga->idarticolo, $riga->articolo->codice.' - '.$descrizione); + } + echo ' + '; + + if ($riga->isDescrizione()) { + echo ' + + + + + '; } else { - echo nl2br($r['descrizione']); - } - - echo ' + // Q.tà + echo ' + '; - // q.tà - echo ' - '; - // um - echo ' - '; + '; - // iva - echo ' - '; - // Imponibile - echo ' - '; } // Possibilità di rimuovere una riga solo se il preventivo non è stato pagato @@ -101,19 +89,17 @@ foreach ($rs as $r) { '; } -// Calcoli -$totale_acquisto = 0; -foreach ($rs as $r) { - $totale_acquisto += ($r['prezzo_unitario_acquisto'] * $r['qta']); +echo ' +'; echo ' '; // SCONTO -if (abs($sconto) > 0) { +if (!empty($preventivo->sconto)) { + // Totale imponibile scontato echo ' - '; @@ -167,20 +147,20 @@ if (abs($sconto) > 0) { - '; - // Totale imponibile + // Totale imponibile scontato echo ' - '; @@ -191,8 +171,8 @@ if (abs($sconto) > 0) { - '; @@ -202,22 +182,22 @@ if (abs($sconto) > 0) { echo ' - '; -// Totale preventivo +// Totale contratto echo ' - '; @@ -241,7 +221,7 @@ $(document).ready(function(){ order += ","+$(this).data("id"); }); order = order.replace(/^,/, ""); - + $.post("'.$rootdir.'/actions.php", { id: ui.item.data("id"), id_module: '.$id_module.', diff --git a/modules/preventivi/src/Components/RelationTrait.php b/modules/preventivi/src/Components/RelationTrait.php index 64826346a..bb07c250a 100644 --- a/modules/preventivi/src/Components/RelationTrait.php +++ b/modules/preventivi/src/Components/RelationTrait.php @@ -20,4 +20,13 @@ trait RelationTrait { return $this->parent(); } + + public function delete() + { + $parent = $this->parent; + $parent->save(); + + return parent::delete(); + } + } diff --git a/modules/preventivi/src/Preventivo.php b/modules/preventivi/src/Preventivo.php index ca9d8b41e..e1eb9fb50 100644 --- a/modules/preventivi/src/Preventivo.php +++ b/modules/preventivi/src/Preventivo.php @@ -131,6 +131,30 @@ class Preventivo extends Document return $this->hasMany(Intervento::class, 'id_preventivo'); } + public function fixBudget() + { + $this->budget = $this->imponibile_scontato; + } + + public function save(array $options = []) + { + $this->fixBudget(); + + return parent::save($options); + } + + public function delete() + { + $this->interventi()->update(['id_preventivo' => null]); + $revision = $this->master_revision; + + $result = parent::delete(); + + self::where('master_revision', $revision)->delete(); + + return $result; + } + // Metodi statici /**
'.tr('Descrizione').' '.tr('Q.tà').' '.tr('U.m.').''.tr('Prezzo unitario').''.tr('Costo unitario').' '.tr('Iva').' '.tr('Imponibile').'
'; +
+ '.$descrizione.' + + '.Translator::numberToLocale($riga->qta_rimanente, 'qta').' / '.Translator::numberToLocale($riga->qta, 'qta').' '; - if (empty($r['is_descrizione'])) { + // Unità di misura echo ' - '.Translator::numberToLocale($r['qta'] - $r['qta_evasa'], 'qta').' / '.Translator::numberToLocale($r['qta'], 'qta').''; - } - echo ' + + '.$riga->um.' '; - if (empty($r['is_descrizione'])) { + // Costo unitario echo ' - '.$r['um']; - } - echo ' - + '.moneyFormat($riga->prezzo_unitario_vendita); - // prezzo di vendita unitario - echo ' - '; - if (empty($r['is_descrizione'])) { - echo ' - '.moneyFormat($r['subtotale'] / $r['qta']); - - if ($r['sconto_unitario'] > 0) { + if ($riga->sconto_unitario > 0) { echo ' -
'.tr('sconto _TOT_ _TYPE_', [ - '_TOT_' => Translator::numberToLocale($r['sconto_unitario']), - '_TYPE_' => ($r['tipo_sconto'] == 'PRC' ? '%' : currency()), +
'.tr('sconto _TOT_ _TYPE_', [ + '_TOT_' => Translator::numberToLocale($riga->sconto_unitario), + '_TYPE_' => ($riga->tipo_sconto == 'PRC' ? '%' : currency()), ]).''; } - } - echo ' + echo'
'; - if (empty($r['is_descrizione'])) { + // IVA echo ' - '.moneyFormat($r['iva']).' -
'.$r['desc_iva'].''; - } - echo' +
+ '.moneyFormat($riga->iva).'
+ '.$riga->aliquota->descrizione.(($riga->aliquota->esente) ? ' ('.$riga->aliquota->codice_natura_fe.')' : null).'
'; - if (empty($r['is_descrizione'])) { + // Imponibile echo ' - '.moneyFormat($r['subtotale'] - $r['sconto']); + + '.moneyFormat($riga->imponibile_scontato).' + '; if ($record['stato'] != 'Pagato') { - echo " -
- - - - + echo ' + + + + -
- - - +
+ +
- "; + '; } echo ' @@ -126,38 +112,32 @@ foreach ($rs as $r) {
'.tr('Imponibile', [], ['upper' => true]).': - '.moneyFormat($imponibile, 2).' + + '.moneyFormat($preventivo->imponibile, 2).'
'.tr('Sconto', [], ['upper' => true]).': - '.moneyFormat($sconto, 2).' + + '.moneyFormat($preventivo->sconto, 2).'
'.tr('Imponibile scontato', [], ['upper' => true]).': - '.moneyFormat($imponibile_scontato, 2).' + + '.moneyFormat($preventivo->imponibile_scontato, 2).'
'.tr('Imponibile', [], ['upper' => true]).': - '.moneyFormat($imponibile, 2).' + + '.moneyFormat($preventivo->imponibile, 2).'
- '.tr('IVA', [], ['upper' => true]).': + '.tr('Iva', [], ['upper' => true]).': - '.moneyFormat($iva, 2).' + + '.moneyFormat($preventivo->iva, 2).'
'.tr('Totale', [], ['upper' => true]).': - '.moneyFormat($totale, 2).' + + '.moneyFormat($preventivo->totale, 2).'