From ca73b6b46e03b215c45aac5b5c7288c6d5206c06 Mon Sep 17 00:00:00 2001 From: "Emanuele \"ToX\" Toscano" Date: Tue, 21 Mar 2023 15:38:34 +0100 Subject: [PATCH 1/2] Gestione fatture di anticipi / acconto --- include/common/crea_fattura_anticipo.php | 126 +++++++++++++++++ migration.sql | 24 ++++ modules/ddt/bulk.php | 87 ++++++++++++ modules/fatture/actions.php | 153 ++++++++++++++++++-- modules/ordini/actions.php | 142 +++++++++++++++++-- modules/ordini/edit.php | 24 +++- modules/ordini/fattura_anticipo.php | 67 +++++++++ modules/ordini/plugins/ordini.anticipi.php | 157 +++++++++++++++++++++ src/Common/Components/Accounting.php | 1 + 9 files changed, 752 insertions(+), 29 deletions(-) create mode 100644 include/common/crea_fattura_anticipo.php create mode 100644 migration.sql create mode 100644 modules/ordini/fattura_anticipo.php create mode 100644 modules/ordini/plugins/ordini.anticipi.php diff --git a/include/common/crea_fattura_anticipo.php b/include/common/crea_fattura_anticipo.php new file mode 100644 index 000000000..26bed45ac --- /dev/null +++ b/include/common/crea_fattura_anticipo.php @@ -0,0 +1,126 @@ +direzione; + +//$name = !empty($documento) ? $documento->module : $options['module']; + +$name = 'Fatture di vendita'; //entrata + +$final_module = Modules::get($name); + +$descrizione = tr('Acconto sull\'ordine ') . $documento->numero_esterno . tr(' del ') . Translator::dateToLocale($documento->data); +$valore_anticipo = $options['value']; + +//tipo documento predefinito +$tipologia = $dbo->fetchOne( + 'SELECT id, CONCAT(codice_tipo_documento_fe, \' - \', descrizione) AS descrizione + FROM co_tipidocumento + WHERE enabled = 1 AND dir = '.prepare($dir).' AND descrizione = "Acconto/anticipo su fattura" + ORDER BY codice_tipo_documento_fe' +); + +//piano predefinito +$piano = $dbo->fetchOne( + 'SELECT id + FROM co_pianodeiconti3 + WHERE descrizione = '.prepare(($dir == 'entrata') ? 'Anticipo clienti' : 'Anticipo fornitori') +); + +//sezione predefinita +$id_segment = $dbo->fetchOne( + 'SELECT id + FROM zz_segments + WHERE is_sezionale = 1 AND name = "Fatture differite"' +); + +//zz_settings iva_predefinita +$iva_predefinita = setting('Iva predefinita'); +$iva = $dbo->fetchOne( + 'SELECT id, descrizione, percentuale + FROM co_iva + WHERE id = '.prepare($iva_predefinita) +); +?> + + + + + +
+
+

+
+
+ +
+ + +
+ {[ "type": "date", "label": "", "name": "data", "required": 0, "value": "-now-" ]} +
+ +
+ {[ "type": "text", "label": "", "name": "tipologia", "required": 1, "readonly": 1, "value": "" ]} + {[ "type": "hidden", "name": "idtipodocumento", "value": "" ]} +
+ +
+ {[ "type": "select", "label": "", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": $final_module['id'], 'is_sezionale' => 1]); ?>, "value": "" ]} +
+ +
+ {[ "type": "select", "label": "", "name": "id_conto", "required": 1, "value": "", "ajax-source": "" ]} +
+ +
+ {[ "type": "select", "label": "", "name": "id_iva", "required": 1, "value": "", "ajax-source": "iva" ]} +
+ +
+ {[ "type": "textarea", "label": "", "name": "note", "required": 0 ]} +
+
+
+
+ + +
+
+

+
+ + + + + + + + + + + + + {[ "type": "hidden", "name": "descrizione", "value": "" ]} + {[ "type": "hidden", "name": "anticipo", "value": "" ]} + {[ "type": "hidden", "name": "id_acconto", "value": " ]"]} + + + + + + +
+ + + 1 + + +
+
diff --git a/migration.sql b/migration.sql new file mode 100644 index 000000000..ed663b840 --- /dev/null +++ b/migration.sql @@ -0,0 +1,24 @@ +CREATE TABLE `ac_acconti` ( + `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY, + `idanagrafica` int NULL, + `idordine` int NULL COMMENT 'se idordine non presente allora l\'acconto non viene fatto sull\'anagrafica', + `importo` float NOT NULL +); + +CREATE TABLE `ac_acconti_righe` ( + `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY, + `idacconto` int NOT NULL, + `idfattura` int NULL, + `importo_fatturato` float NOT NULL, + `tipologia` varchar(30) NULL +); + +ALTER TABLE `ac_acconti_righe` +CHANGE `idfattura` `idfattura` int(11) NOT NULL AFTER `idacconto`, +ADD `idriga_fattura` int(11) NULL AFTER `idfattura`; + +ALTER TABLE `ac_acconti_righe` +ADD `idiva` int(11) NULL AFTER `idriga_fattura`; + +INSERT INTO `zz_plugins` (`id`, `name`, `title`, `idmodule_from`, `idmodule_to`, `position`, `script`, `enabled`, `default`, `order`, `compatibility`, `version`, `options2`, `options`, `directory`, `help`, `created_at`, `updated_at`) VALUES +(53, 'Anticipi', 'Anticipi', 24, 24, 'tab', 'ordini.anticipi.php', 1, 1, 0, '', '', NULL, NULL, '', '', '2022-03-07 10:22:56', '2022-03-07 10:22:56'); diff --git a/modules/ddt/bulk.php b/modules/ddt/bulk.php index 9bcf2d004..d8932de76 100755 --- a/modules/ddt/bulk.php +++ b/modules/ddt/bulk.php @@ -24,6 +24,7 @@ use Modules\Fatture\Fattura; use Modules\Fatture\Stato; use Modules\Fatture\Tipo; +use Modules\Fatture\Components\Riga; if ($module['name'] == 'Ddt di vendita') { $dir = 'entrata'; @@ -98,8 +99,14 @@ $fattura->idsede_destinazione = $documento_import->idsede_destinazione; $fattura->save(); + $idOrdini = []; + $totale = 0; + // Inserimento righe foreach ($righe as $riga) { + if ($riga['idordine'] != 0) { + $idOrdini[] = $riga->idordine; + } $qta = $riga->qta_rimanente; if ($qta > 0) { @@ -115,6 +122,86 @@ } $copia->save(); + + $totale += ($copia->prezzo_unitario * $qta); + } + } + + //row per gli anticipi + $acconti = $dbo->fetchArray( + 'SELECT id, idanagrafica, idordine, importo + FROM ac_acconti + WHERE idordine IN ('.implode(',', $idOrdini).')' + ); + + if ($acconti != null) { + //foreach acconti + foreach ($acconti as $acconto) { + $acconto = $acconti[0]; + + //get acconto_righe + $acconto_righe = $dbo->fetchOne( + 'SELECT idacconto, idfattura, sum(importo_fatturato) as da_stornare + FROM ac_acconti_righe + WHERE idacconto = '.prepare($acconto['id']).' + GROUP BY idacconto' + ); + + if ($acconto_righe['da_stornare']) { + $importo_rimasto = 0; + $calcolo = $totale - floatval($acconto_righe['da_stornare']); + + if ($calcolo >= 0) { + $totale -= floatval($acconto_righe['da_stornare']); + $importo_fatturato = -1 * floatval($acconto_righe['da_stornare']); + } else { + $importo_fatturato = -1 * ($totale); + $totale = 0; + } + + $fatturaAcconto = Fattura::find($acconto_righe['idfattura']); + $rigaAcconto = $dbo->fetchOne( + 'SELECT * FROM co_righe_documenti + WHERE iddocumento = '.prepare($fatturaAcconto->id) + ); + + $iva_predefinita = setting('Iva predefinita'); + $iva = $dbo->fetchOne( + 'SELECT id, descrizione, percentuale + FROM co_iva + WHERE id = '.prepare($iva_predefinita) + ); + + //aggiungo la riga fattura dell'acconto + $riga = Riga::build($fattura); + + $riga->note = null; + $riga->um = null; + $riga->idarticolo = null; + $riga->calcolo_ritenuta_acconto = null; + + $riga->descrizione = 'Storno acconto fattura '.$fattura->numero_esterno; + + $riga->idiva = $iva['id']; + $riga->desc_iva = $iva['descrizione']; + + $riga->idconto = $rigaAcconto['idconto']; + + $riga->costo_unitario = 0; + $riga->subtotale = $importo_fatturato; + $riga->prezzo_unitario = $importo_fatturato; + $riga->prezzo_unitario_ivato = floatval($importo_fatturato) * (1 + (floatval($iva['percentuale']) / 100)); + + $riga->idordine = $acconto['idordine']; + $riga->qta = 1; + + $riga->save(); + + $dbo->query( + 'INSERT INTO ac_acconti_righe (idacconto, idfattura, idriga_fattura, idiva, importo_fatturato, tipologia) + VALUES ('.prepare($acconto_righe['idacconto']).', '.prepare($acconto_righe['idfattura']).', '.prepare($riga->id).','.prepare($riga->idiva).','.prepare($importo_fatturato).', '.prepare(tr('Storno da acconto')).')' + ); + } } } } diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index a26159adb..e8699645f 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -264,7 +264,7 @@ 'stored' => round($totale_documento,2), 'calculated' => round($fattura->totale,2), ]); - + break; // Elenco fatture in stato Bozza per il cliente @@ -315,6 +315,8 @@ // eliminazione documento case 'delete': try { + $dbo->query('DELETE FROM ac_acconti_righe WHERE idfattura='.prepare($id_record)); + $fattura->delete(); $dbo->query('DELETE FROM co_scadenziario WHERE iddocumento='.prepare($id_record)); @@ -581,6 +583,33 @@ $riga = Riga::build($fattura); } + $acconto_riga = $dbo->fetchOne( + 'SELECT * + FROM ac_acconti_righe + WHERE idriga_fattura = '.prepare($riga->id).' AND idfattura = '.prepare($riga->iddocumento) + ); + + if (!empty($acconto_riga)) { + $disponibile = $dbo->fetchOne( + 'SELECT idacconto, idfattura, sum(importo_fatturato) as da_stornare + FROM ac_acconti_righe + WHERE idacconto = '.prepare($acconto_riga['idacconto']).' + GROUP BY idacconto' + ); + + if (floatval($disponibile['da_stornare']) - floatval($acconto_riga['importo_fatturato']) >= -1 * floatval(post('prezzo_unitario'))) { + $dbo->query( + 'UPDATE ac_acconti_righe + SET importo_fatturato = '.prepare(floatval(post('prezzo_unitario'))).', + idiva = '.prepare(post('idiva')).' + WHERE idriga_fattura = '.prepare(post('idriga')).' AND idfattura = '.prepare($id_record) + ); + } else { + flash()->error(tr('Anticipo non applicabile, cifra troppo alta!')); + break; + } + } + $qta = post('qta'); $riga->descrizione = post('descrizione'); @@ -660,12 +689,18 @@ // Scollegamento riga generica da documento case 'delete_riga': $id_righe = (array)post('righe'); - + foreach ($id_righe as $id_riga) { $riga = Articolo::find($id_riga) ?: Riga::find($id_riga); $riga = $riga ?: Descrizione::find($id_riga); $riga = $riga ?: Sconto::find($id_riga); + // se è un acconto lo cancella, altrimenti non fa nulla + $dbo->query( + 'DELETE FROM ac_acconti_righe + WHERE idriga_fattura='.prepare($riga->id).' AND idfattura='.prepare($riga->iddocumento) + ); + try { $riga->delete(); @@ -685,7 +720,7 @@ // Duplicazione riga case 'copy_riga': $id_righe = (array)post('righe'); - + foreach ($id_righe as $id_riga) { $riga = Articolo::find($id_riga) ?: Riga::find($id_riga); $riga = $riga ?: Descrizione::find($id_riga); @@ -780,8 +815,16 @@ $id_conto = post('id_conto'); $righe = $documento->getRighe(); + + $idOrdini = []; + $totale = 0; + foreach ($righe as $riga) { if (post('evadere')[$riga->id] == 'on') { + if ($riga['idordine'] != 0) { + $idOrdini[] = $riga->idordine; + } + $qta = post('qta_da_evadere')[$riga->id]; $articolo = ArticoloOriginale::find($riga->idarticolo); @@ -801,6 +844,96 @@ } $copia->save(); + + $totale += ($copia->prezzo_unitario * post('qta_da_evadere')[$riga->id]); + } + } + + //row per gli anticipi + $acconti = $dbo->fetchArray( + 'SELECT id, idanagrafica, importo + FROM ac_acconti + WHERE idordine IN ('.implode(',', $idOrdini).')' + ); + + + if ($acconti != null) { + //foreach acconti + foreach ($acconti as $acconto) { + //iva acconto + + $ivaAnticipo = $dbo->fetchOne( + 'SELECT idiva + FROM ac_acconti_righe + WHERE idacconto = '.prepare($acconto['id']).' AND tipologia = "Anticipo"' + )['idiva']; + + if ($ivaAnticipo == null) { + $ivaAnticipo = setting('Iva predefinita'); + } + + //get acconto_righe + $acconto_righe = $dbo->fetchOne( + 'SELECT idacconto, idfattura, sum(importo_fatturato) as da_stornare + FROM ac_acconti_righe + WHERE idacconto = '.prepare($acconto['id']).' + GROUP BY idacconto' + ); + + if ($acconto_righe['da_stornare']) { + $calcolo = $totale - floatval($acconto_righe['da_stornare']); + + if ($calcolo >= 0) { + $totale -= floatval($acconto_righe['da_stornare']); + $importo_fatturato = -1 * floatval($acconto_righe['da_stornare']); + } else { + $importo_fatturato = -1 * ($totale); + $totale = 0; + } + + $fatturaAcconto = Fattura::find($acconto_righe['idfattura']); + $rigaAcconto = $dbo->fetchOne( + 'SELECT * FROM co_righe_documenti + WHERE iddocumento = '.prepare($fatturaAcconto->id) + ); + + $iva_predefinita = setting('Iva predefinita'); + $iva = $dbo->fetchOne( + 'SELECT id, descrizione, percentuale + FROM co_iva + WHERE id = '.prepare($ivaAnticipo) + ); + + //aggiungo la riga fattura dell'acconto + $riga = Riga::build($fattura); + + $riga->note = null; + $riga->um = null; + $riga->idarticolo = null; + $riga->calcolo_ritenuta_acconto = null; + + $riga->descrizione = 'Storno acconto fattura '.$fattura->numero_esterno; + + $riga->idiva = $ivaAnticipo; + $riga->desc_iva = $iva['descrizione']; + + $riga->idconto = $rigaAcconto['idconto']; + + $riga->costo_unitario = 0; + $riga->subtotale = $importo_fatturato; + $riga->prezzo_unitario = $importo_fatturato; + $riga->prezzo_unitario_ivato = floatval($importo_fatturato) * (1 + (floatval($iva['percentuale']) / 100)); + + $riga->idordine = $documento->id; + $riga->qta = 1; + + $riga->save(); + + $dbo->query( + 'INSERT INTO ac_acconti_righe (idacconto, idfattura, idriga_fattura, idiva, importo_fatturato, tipologia) + VALUES ('.prepare($acconto_righe['idacconto']).', '.prepare($id_record).', '.prepare($riga->id).','.prepare($riga->idiva).','.prepare($importo_fatturato).', '.prepare(tr('Storno da acconto')).')' + ); + } } } @@ -924,11 +1057,11 @@ break; - case 'controlla_serial': + case 'controlla_serial': $has_serial = $dbo->fetchOne('SELECT id FROM mg_prodotti WHERE serial='.prepare(post('serial')).' AND dir="uscita" AND id_articolo='.prepare(post('id_articolo')).' AND (id_riga_documento IS NOT NULL OR id_riga_ordine IS NOT NULL OR id_riga_ddt IS NOT NULL)')['id']; - + echo json_encode($has_serial); - + break; case 'add_articolo': @@ -964,7 +1097,7 @@ $id_conto = $originale->idconto_acquisto; } $articolo->idconto = $id_conto; - + if ($dir == 'entrata') { if ($fattura->anagrafica['idiva_vendite'] ? $id_iva = $fattura->anagrafica['idiva_vendite'] : $id_iva = $originale->idiva_vendita ?: setting('Iva predefinita')); } else { @@ -972,7 +1105,7 @@ } $id_anagrafica = $fattura->idanagrafica; $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); - + // CALCOLO PREZZO UNITARIO $prezzo_unitario = 0; $sconto = 0; @@ -995,7 +1128,7 @@ continue; } } - } + } if (empty($prezzo_unitario)) { // Prezzi listini clienti $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino @@ -1023,7 +1156,7 @@ $articolo->setProvvigione($provvigione ?: 0, 'PRC'); $articolo->save(); - + flash()->info(tr('Nuovo articolo aggiunto!')); } } else { diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php index df04ea1da..cfb609ba8 100755 --- a/modules/ordini/actions.php +++ b/modules/ordini/actions.php @@ -24,11 +24,14 @@ use Modules\Ordini\Components\Articolo; use Modules\Ordini\Components\Descrizione; use Modules\Ordini\Components\Riga; +use Modules\Fatture\Components\Riga as RigaFattura; use Modules\Ordini\Components\Sconto; use Modules\Ordini\Ordine; use Modules\Ordini\Tipo; +use Modules\Fatture\Tipo as TipoFattura; use Modules\Preventivi\Preventivo; use Plugins\ListinoClienti\DettaglioPrezzo; +use Modules\Fatture\Fattura; $module = Modules::get($id_module); @@ -332,7 +335,7 @@ // Scollegamento riga generica da ordine case 'delete_riga': $id_righe = (array)post('righe'); - + foreach ($id_righe as $id_riga) { $riga = Articolo::find($id_riga) ?: Riga::find($id_riga); $riga = $riga ?: Descrizione::find($id_riga); @@ -356,7 +359,7 @@ // Duplicazione riga case 'copy_riga': $id_righe = (array)post('righe'); - + foreach ($id_righe as $id_riga) { $riga = Articolo::find($id_riga) ?: Riga::find($id_riga); $riga = $riga ?: Descrizione::find($id_riga); @@ -377,6 +380,13 @@ // Eliminazione ordine case 'delete': try { + //cancello dati riferiti all'accconto se presente + $acconto = $dbo->fetchOne('SELECT * FROM `ac_acconti` WHERE `idordine` = '.prepare($id_record)); + if (!empty($acconto)) { + $dbo->query('DELETE FROM `ac_acconti_righe` WHERE `idacconto` = '.prepare($acconto['id'])); + $dbo->query('DELETE FROM `ac_acconti` WHERE `idordine` = '.prepare($id_record)); + } + $ordine->delete(); flash()->info(tr('Ordine eliminato!')); @@ -630,17 +640,17 @@ $articolo->qta = 1; $articolo->costo_unitario = $originale->prezzo_acquisto; - $id_iva = $originale->idiva_vendita ?: setting('Iva predefinita'); - $id_anagrafica = $ordine->idanagrafica; - $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); - - // CALCOLO PREZZO UNITARIO - $prezzo_unitario = 0; - $sconto = 0; - // Prezzi netti clienti / listino fornitore - $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario - FROM mg_prezzi_articoli - WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica)); + $id_iva = $originale->idiva_vendita ?: setting('Iva predefinita'); + $id_anagrafica = $ordine->idanagrafica; + $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); + + // CALCOLO PREZZO UNITARIO + $prezzo_unitario = 0; + $sconto = 0; + // Prezzi netti clienti / listino fornitore + $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario + FROM mg_prezzi_articoli + WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica)); if ($prezzi) { foreach ($prezzi as $prezzo) { @@ -656,7 +666,7 @@ continue; } } - } + } if (empty($prezzo_unitario)) { // Prezzi listini clienti $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino @@ -683,7 +693,7 @@ $articolo->setProvvigione($provvigione ?: 0, 'PRC'); $articolo->save(); - + flash()->info(tr('Nuovo articolo aggiunto!')); } else { $response['error'] = tr('Nessun articolo corrispondente a magazzino'); @@ -706,4 +716,106 @@ } break; + + case 'add-anticipo': + $id_record = post('id_record'); + $anticipo = post('anticipo'); + + if ($anticipo > 0) { + $dbo->query( + 'INSERT INTO ac_acconti(idanagrafica, idordine, importo) + VALUES('.prepare(post('idanagrafica')).', '.prepare($id_record).', '.prepare($anticipo).')' + ); + } + + break; + + case 'delete-anticipo': + $id_anticipo = post('id_anticipo'); + + $dbo->query('DELETE FROM ac_acconti WHERE id='.prepare($id_anticipo)); + + break; + + case 'crea-fattura-anticipo': + $class = post('class'); + $id_documento = post('id_documento'); + $anticipo = post('anticipo'); + + // Individuazione del documento originale + if (!is_subclass_of($class, \Common\Document::class)) { + return; + } + $documento = $class::find($id_documento); + + // Inserimento fattura + $tipo = TipoFattura::find(post('idtipodocumento')); + $fattura = Fattura::build($documento->anagrafica, $tipo, post('data'), post('id_segment')); + + if (!empty($documento->idpagamento)) { + $fattura->idpagamento = $documento->idpagamento; + } else { + $fattura->idpagamento = setting('Tipo di pagamento predefinito'); + } + + $fattura->idsede_destinazione = 0; + $fattura->id_ritenuta_contributi = null; + $fattura->idreferente = $documento->idreferente; + $fattura->idagente = $documento->idagente; + $fattura->idconto = post('id_conto'); + $fattura->note = post('note'); + + $fattura->save(); + + $id_iva = post('id_iva'); + $iva = $dbo->fetchOne('SELECT id, percentuale, descrizione FROM co_iva WHERE id='.prepare($id_iva)); + + //inserimento righe fattura + $riga = RigaFattura::build($fattura); + + $riga->note = null; + $riga->um = null; + $riga->idarticolo = null; + $riga->calcolo_ritenuta_acconto = null; + + $riga->descrizione = post('descrizione'); + + $riga->idiva = $id_iva; + $riga->desc_iva = $iva->descrizione; + + $riga->idconto = post('id_conto'); + + $riga->costo_unitario = 0; + $riga->prezzo_unitario = floatval(post('anticipo')); + + $riga->setPrezzoUnitario($riga->prezzo_unitario, $riga->idiva); + + $riga->idordine = $documento->id; + $riga->qta = 1; + + $riga->save(); + + $id_acconto = post('id_acconto'); + $acconto = $dbo->fetchOne('SELECT * FROM ac_acconti WHERE id='.prepare($id_acconto)); + if (!empty($acconto)) { + $acconto = $dbo->query( + 'UPDATE ac_acconti SET importo='.prepare($anticipo).' WHERE id='.prepare($id_acconto) + ); + } else { + $acconto = $dbo->query( + 'INSERT INTO ac_acconti(idanagrafica, idordine, importo) + VALUES('.prepare($documento->idanagrafica).', '.prepare($id_record).', '.prepare($anticipo).')' + ); + } + $acconto = $dbo->fetchOne('SELECT * FROM ac_acconti WHERE id='.prepare($id_acconto)); + + $dbo->query( + 'INSERT INTO ac_acconti_righe (idacconto, idfattura, idriga_fattura, idiva, importo_fatturato, tipologia) + VALUES ('.prepare($acconto['id']).', '.prepare($fattura['id']).', '.prepare($riga->id).','.prepare($riga->idiva).','.prepare($anticipo).', '.prepare('Anticipo').')' + ); + + // Messaggio informativo + $message = tr('Anticipo inserito!'); + flash()->info($message); + break; } diff --git a/modules/ordini/edit.php b/modules/ordini/edit.php index c194976f5..2fde7487d 100755 --- a/modules/ordini/edit.php +++ b/modules/ordini/edit.php @@ -144,7 +144,7 @@
- 'ckeditor', 'use_full_ckeditor' => 0, @@ -155,7 +155,7 @@ ?>
- +
{[ "type": "textarea", "label": "", "name": "note", "value": "$note$" ]} @@ -252,7 +252,7 @@ - + '.tr('Riga').' @@ -311,6 +311,22 @@ {( "name": "log_email", "id_module": "$id_module$", "id_record": "$id_record$" )} diff --git a/src/Common/Components/Accounting.php b/src/Common/Components/Accounting.php index 2bbc86b8b..5f225c432 100644 --- a/src/Common/Components/Accounting.php +++ b/src/Common/Components/Accounting.php @@ -267,6 +267,7 @@ public function setSconto($value, $type) } else { $this->sconto_unitario = $sconto; } + $this->tipo_sconto = $type; } /** From bce8efaf1c41a15db738bbb4ea1313db8fc78a04 Mon Sep 17 00:00:00 2001 From: "Emanuele \"ToX\" Toscano" Date: Tue, 21 Mar 2023 16:05:12 +0100 Subject: [PATCH 2/2] Fix typo --- include/common/crea_fattura_anticipo.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/common/crea_fattura_anticipo.php b/include/common/crea_fattura_anticipo.php index 26bed45ac..c8a4b57b1 100644 --- a/include/common/crea_fattura_anticipo.php +++ b/include/common/crea_fattura_anticipo.php @@ -89,7 +89,7 @@
-

+