diff --git a/modules/anagrafiche/actions.php b/modules/anagrafiche/actions.php index f911962a9..9ba80377d 100644 --- a/modules/anagrafiche/actions.php +++ b/modules/anagrafiche/actions.php @@ -36,7 +36,8 @@ switch (post('op')) { 'diciturafissafattura' => $post['diciturafissafattura'], 'idpagamento_acquisti' => $post['idpagamento_acquisti'], 'idpagamento_vendite' => $post['idpagamento_vendite'], - 'idlistino' => $post['idlistino'], + 'idlistino_acquisti' => $post['idlistino_acquisti'], + 'idlistino_vendite' => $post['idlistino_vendite'], 'idiva' => $post['idiva'], 'settore' => $post['settore'], 'marche' => $post['marche'], diff --git a/modules/anagrafiche/edit.php b/modules/anagrafiche/edit.php index af8636245..cfb12bf48 100644 --- a/modules/anagrafiche/edit.php +++ b/modules/anagrafiche/edit.php @@ -154,7 +154,11 @@ if ($fornitore) { ?>
{[ "type": "select", "label": "", "name": "idpagamento_acquisti", "values": "query=SELECT id, descrizione FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento_acquisti$" ]} -
+ + +
+ {[ "type": "select", "label": "", "name": "idlistino_acquisti", "values": "query=SELECT id, nome AS descrizione FROM mg_listini ORDER BY nome ASC", "value": "$idlistino_acquisti$" ]} +
{[ "type": "select", "label": "", "name": "idpagamento_vendite", "values": "query=SELECT id, descrizione FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento_vendite$" ]} -
+ + +
+ {[ "type": "select", "label": "", "name": "idlistino_vendite", "values": "query=SELECT id, nome AS descrizione FROM mg_listini ORDER BY nome ASC", "value": "$idlistino_vendite$" ]} +
-
- {[ "type": "select", "label": "", "name": "idiva", "values": "query=SELECT id, descrizione FROM co_iva ORDER BY descrizione ASC", "value": "$idiva$" ]} -
+ -
+
- {[ "type": "select", "label": "", "name": "idlistino", "values": "query=SELECT id, nome AS descrizione FROM mg_listini ORDER BY nome ASC", "value": "$idlistino$" ]} -
+ {[ "type": "select", "label": "", "name": "idiva", "values": "query=SELECT id, descrizione FROM co_iva ORDER BY descrizione ASC", "value": "$idiva$" ]} +
{[ "type": "select", "label": "", "name": "idsede_fatturazione", "values": "query=SELECT id, CONCAT_WS(', ', nomesede, citta) AS descrizione FROM an_sedi WHERE idanagrafica='$id_record' UNION SELECT '0' AS id, 'Sede legale' AS descrizione ORDER BY descrizione", "value": "$idsede_fatturazione$" ]} diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php index 89e40dea5..0e7326ae5 100644 --- a/modules/contratti/actions.php +++ b/modules/contratti/actions.php @@ -2,6 +2,8 @@ include_once __DIR__.'/../../core.php'; +include_once $docroot.'/modules/fatture/modutil.php'; + switch (post('op')) { case 'add': $idanagrafica = post('idanagrafica'); @@ -40,8 +42,6 @@ switch (post('op')) { break; case 'update': - $idcontratto = post('id_record'); - if (isset($post['id_record'])) { $idstato = post('idstato'); $idanagrafica = post('idanagrafica'); @@ -54,7 +54,7 @@ switch (post('op')) { if ($budget != '') { $budget = post('budget'); } else { - $q = "SELECT (SELECT SUM(subtotale) FROM co_righe2_contratti GROUP BY idcontratto HAVING idcontratto=co_contratti.id) AS 'budget' FROM co_contratti WHERE id=".prepare($idcontratto); + $q = "SELECT (SELECT SUM(subtotale) FROM co_righe2_contratti GROUP BY idcontratto HAVING idcontratto=co_contratti.id) AS 'budget' FROM co_contratti WHERE id=".prepare($id_record); $rs = $dbo->fetchArray($q); $budget = $rs[0]['budget']; } @@ -77,14 +77,31 @@ switch (post('op')) { $costo_km = post('costo_km'); $costo_diritto_chiamata = post('costo_diritto_chiamata'); - $query = 'UPDATE co_contratti SET idanagrafica='.prepare($idanagrafica).', idstato='.prepare($idstato).', nome='.prepare($nome).', idagente='.prepare($idagente).', idpagamento='.prepare($idpagamento).', numero='.prepare($numero).', budget='.prepare($budget).', idreferente='.prepare($idreferente).', validita='.prepare($validita).', data_bozza='.prepare($data_bozza).', data_accettazione='.prepare($data_accettazione).', data_rifiuto='.prepare($data_rifiuto).', data_conclusione='.prepare($data_conclusione).', rinnovabile='.prepare($rinnovabile).', giorni_preavviso_rinnovo='.prepare($giorni_preavviso_rinnovo).', esclusioni='.prepare($esclusioni).', descrizione='.prepare($descrizione).', idtipointervento='.prepare($idtipointervento).'WHERE id='.prepare($idcontratto); + $query = 'UPDATE co_contratti SET idanagrafica='.prepare($idanagrafica).', idstato='.prepare($idstato).', nome='.prepare($nome).', idagente='.prepare($idagente).', idpagamento='.prepare($idpagamento).', numero='.prepare($numero).', budget='.prepare($budget).', idreferente='.prepare($idreferente).', validita='.prepare($validita).', data_bozza='.prepare($data_bozza).', data_accettazione='.prepare($data_accettazione).', data_rifiuto='.prepare($data_rifiuto).', data_conclusione='.prepare($data_conclusione).', rinnovabile='.prepare($rinnovabile).', giorni_preavviso_rinnovo='.prepare($giorni_preavviso_rinnovo).', esclusioni='.prepare($esclusioni).', descrizione='.prepare($descrizione).', idtipointervento='.prepare($idtipointervento).'WHERE id='.prepare($id_record); // costo_diritto_chiamata='.prepare($costo_diritto_chiamata).', ore_lavoro='.prepare($ore_lavoro).', costo_orario='.prepare($costo_orario).', costo_km='.prepare($costo_km).' $dbo->query($query); - $dbo->query('DELETE FROM my_impianti_contratti WHERE idcontratto='.prepare($idcontratto)); + // Aggiornamento sconto + $tipo_sconto = $post['tipo_sconto_generico']; + $sconto = $post['sconto_generico']; + + $dbo->update('co_contratti', [ + 'tipo_sconto_globale' => $tipo_sconto, + 'sconto_globale' => $sconto, + ], ['id' => $id_record]); + + aggiorna_sconto([ + 'parent' => 'co_contratti', + 'row' => 'co_righe2_contratti', + ], [ + 'parent' => 'id', + 'row' => 'idcontratto', + ], $id_record); + + $dbo->query('DELETE FROM my_impianti_contratti WHERE idcontratto='.prepare($id_record)); foreach ((array) $post['matricolaimpianto'] as $matricolaimpianto) { - $dbo->query('INSERT INTO my_impianti_contratti(idcontratto,idimpianto) VALUES('.prepare($idcontratto).', '.prepare($matricolaimpianto).')'); + $dbo->query('INSERT INTO my_impianti_contratti(idcontratto,idimpianto) VALUES('.prepare($id_record).', '.prepare($matricolaimpianto).')'); } // Salvataggio costi attività unitari del contratto @@ -120,25 +137,29 @@ switch (post('op')) { // Aggiungo una riga al contratto case 'addriga': - $idcontratto = $id_record; - $idarticolo = post('idarticolo'); - $idiva = post('idiva_articolo'); + $idiva = post('idiva'); $descrizione = post('descrizione'); $qta = $post['qta']; - $prezzo_vendita = $post['prezzo']; - $prezzo = $prezzo_vendita * $qta; + $prezzo = $post['prezzo']; - $sconto = $post['sconto']; + // Calcolo dello sconto + $sconto_unitario = $post['sconto']; + $tipo_sconto = $post['tipo_sconto']; + $sconto = ($tipo_sconto == 'PRC') ? ($prezzo * $sconto_unitario) / 100 : $sconto_unitario; + $sconto = $sconto * $qta; + + $subtot = $prezzo_vendita * $qta; $um = post('um'); // Lettura iva dell'articolo - $rs2 = $dbo->fetchArray('SELECT percentuale, indetraibile FROM co_iva WHERE id='.prepare($idiva)); - $iva = ($prezzo - ($sconto * $qta)) / 100 * $rs2[0]['percentuale']; + $rs2 = $dbo->fetchArray('SELECT percentuale, descrizione, indetraibile FROM co_iva WHERE id='.prepare($idiva)); + $iva = ($prezzo - $sconto) / 100 * $rs2[0]['percentuale']; $iva_indetraibile = $iva / 100 * $rs2[0]['indetraibile']; + $desc_iva = $rs2[0]['descrizione']; - $dbo->query('INSERT INTO co_righe2_contratti(idcontratto, idiva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto) VALUES ('.prepare($idcontratto).', '.prepare($idiva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($prezzo).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).')'); + $dbo->query('INSERT INTO co_righe2_contratti(idcontratto, idiva, iva, iva_indetraibile, descrizione, subtotale, um, qta, sconto, sconto_unitario, tipo_sconto) VALUES ('.prepare($id_record).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($um).', '.prepare($qta).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe2_contratti AS t WHERE idcontratto='.prepare($id_record).'))'); $_SESSION['infos'][] = tr('Articolo aggiunto!'); @@ -149,23 +170,27 @@ switch (post('op')) { $descrizione = post('descrizione'); $qta = $post['qta']; - $importo_manuale = $post['prezzo']; - $subtot = $importo_manuale * $qta; + $prezzo = $post['prezzo']; + $subtot = $prezzo * $qta; - $sconto = $post['sconto']; + // Calcolo dello sconto + $sconto_unitario = $post['sconto']; + $tipo_sconto = $post['tipo_sconto']; + $sconto = ($tipo_sconto == 'PRC') ? ($prezzo * $sconto_unitario) / 100 : $sconto_unitario; + $sconto = $sconto * $qta; - $idiva = post('idiva_articolo'); + $idiva = post('idiva'); $um = post('um'); // Calcolo iva - $query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva); + $query = 'SELECT percentuale, descrizione, indetraibile FROM co_iva WHERE id='.prepare($idiva); $rs = $dbo->fetchArray($query); - $iva = ($subtot - ($sconto * $qta)) / 100 * $rs[0]['percentuale']; + $iva = ($subtot - $sconto) / 100 * $rs[0]['percentuale']; $iva_indetraibile = $iva / 100 * $rs[0]['indetraibile']; $desc_iva = $rs[0]['descrizione']; // Modifica riga generica sul documento - $query = 'UPDATE co_righe2_contratti SET idiva='.prepare($idiva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', subtotale='.prepare($subtot).', sconto='.prepare($sconto).', um='.prepare($um).', qta='.prepare($qta).' WHERE id='.prepare($idriga); + $query = 'UPDATE co_righe2_contratti SET idiva='.prepare($idiva).', desc_iva='.prepare($desc_iva).', iva='.prepare($iva).', iva_indetraibile='.prepare($iva_indetraibile).', descrizione='.prepare($descrizione).', 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); $dbo->query($query); $_SESSION['infos'][] = tr('Riga modificata!'); @@ -175,10 +200,9 @@ switch (post('op')) { // Eliminazione riga case 'delriga': if (isset($post['idriga'])) { - $idcontratto = $id_record; $idriga = post('idriga'); - $query = 'DELETE FROM `co_righe2_contratti` WHERE idcontratto='.prepare($idcontratto).' AND id='.prepare($idriga); + $query = 'DELETE FROM `co_righe2_contratti` WHERE idcontratto='.prepare($id_record).' AND id='.prepare($idriga); if ($dbo->query($query)) { $_SESSION['infos'][] = tr('Riga eliminata!'); @@ -186,7 +210,7 @@ switch (post('op')) { } // Ricalcolo il budget - $dbo->query('UPDATE co_contratti SET budget=( SELECT SUM(subtotale) FROM co_righe2_contratti GROUP BY idcontratto HAVING idcontratto=co_contratti.id ) WHERE id='.prepare($idcontratto)); + $dbo->query('UPDATE co_contratti SET budget=( SELECT SUM(subtotale) FROM co_righe2_contratti GROUP BY idcontratto HAVING idcontratto=co_contratti.id ) WHERE id='.prepare($id_record)); break; @@ -255,3 +279,13 @@ switch (get('op')) { break; } + +if (post('op') !== null && post('op') != 'update') { + aggiorna_sconto([ + 'parent' => 'co_contratti', + 'row' => 'co_righe2_contratti', + ], [ + 'parent' => 'id', + 'row' => 'idcontratto', + ], $id_record); +} diff --git a/modules/contratti/add_riga.php b/modules/contratti/add_riga.php index 214db7268..c6c798753 100644 --- a/modules/contratti/add_riga.php +++ b/modules/contratti/add_riga.php @@ -6,7 +6,7 @@ $idcontratto = $get['idcontratto']; $idriga = $get['idriga']; // Info contratto -$q = 'SELECT * FROM co_contratti WHERE id='.prepare($idcontratto); +$q = 'SELECT *, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica=co_contratti.idanagrafica)) AS prc_guadagno FROM co_contratti WHERE id='.prepare($idcontratto); $rs = $dbo->fetchArray($q); $numero = $rs[0]['numero']; $idanagrafica = $rs[0]['idanagrafica']; @@ -21,6 +21,12 @@ if (empty($idriga)) { $um = ''; $prezzo = 0; $sconto = 0; + $tipo_sconto = ''; + + if (!empty($rs[0]['prc_guadagno'])) { + $sconto = $rs[0]['prc_guadagno']; + $tipo_sconto = 'PRC'; + } // Leggo l'iva predefinita dall'anagrafica e se non c'è leggo quella predefinita generica $rsa = $dbo->fetchArray('SELECT idiva FROM an_anagrafiche WHERE idanagrafica='.prepare($idanagrafica)); @@ -37,6 +43,7 @@ if (empty($idriga)) { $idiva = $rsr[0]['idiva']; $prezzo = $rsr[0]['subtotale'] / $rsr[0]['qta']; $sconto = $rsr[0]['sconto']; + $tipo_sconto = $rsr[0]['tipo_sconto']; } echo ' @@ -55,7 +62,7 @@ echo ' echo '
- {[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva_articolo", "required": 1, "values": "query=SELECT id, descrizione FROM co_iva ORDER BY descrizione ASC", "value": "'.$idiva.'" ]} + {[ "type": "select", "label": "'.tr('Iva').'", "name": "idiva", "required": 1, "values": "query=SELECT id, descrizione FROM co_iva ORDER BY descrizione ASC", "value": "'.$idiva.'" ]}
'; // Quantità @@ -119,7 +126,7 @@ echo ' // Sconto unitario echo '
- {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$sconto.'", "icon-after": "€" ]} + {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$sconto.'", "icon-after": "choice|untprc|'.$tipo_sconto.'" ]}
'; echo ' diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php index 77fed5515..747a0a40f 100644 --- a/modules/contratti/edit.php +++ b/modules/contratti/edit.php @@ -103,6 +103,17 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
+
+
+ {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$" ]} +
+
+ +
{[ "type": "textarea", "label": "", "name": "esclusioni", "class": "autosize", "value": "$esclusioni$" ]} diff --git a/modules/contratti/row-list.php b/modules/contratti/row-list.php index 3679aa50e..8a6749569 100644 --- a/modules/contratti/row-list.php +++ b/modules/contratti/row-list.php @@ -68,9 +68,9 @@ if (!empty($rs_art)) { '.Translator::numberToLocale($r['subtotale']).' €'; - if ($r['sconto'] > 0) { - echo '
- - sconto '.Translator::numberToLocale($r['sconto'] * $r['qta']).' €'; + if ($r['sconto_unitario'] > 0) { + echo ' +
- sconto '.Translator::numberToLocale($r['sconto_unitario']).($r['tipo_sconto'] == 'PRC' ? '%' : ' €').''; } echo ' @@ -80,7 +80,7 @@ if (!empty($rs_art)) { echo ' '; - if ($records[0]['stato'] != 'Pagato') { + if ($records[0]['stato'] != 'Pagato' && empty($r['sconto_globale'])) { echo '
@@ -103,9 +103,9 @@ if (!empty($rs_art)) { '; $iva_art += $r['iva']; - $imponibile_art += $r['subtotale'] - ($r['sconto'] * $r['qta']); + $imponibile_art += $r['subtotale'] - $r['sconto']; $imponibile_nosconto += $r['subtotale']; - $sconto_art += $r['sconto'] * $r['qta']; + $sconto_art += $r['sconto']; } } diff --git a/modules/ddt/add_articolo.php b/modules/ddt/add_articolo.php index 7d34d7a0b..70090842a 100644 --- a/modules/ddt/add_articolo.php +++ b/modules/ddt/add_articolo.php @@ -6,17 +6,25 @@ $module = Modules::getModule($id_module); if ($module['name'] == 'Ddt di vendita') { $dir = 'entrata'; + + $listino = 'idlistino_vendite'; } else { $dir = 'uscita'; + + $listino = 'idlistino_acquisti'; } $_SESSION['superselect']['dir'] = $dir; // Info documento -$q = 'SELECT *, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=dt_ddt.idanagrafica)) AS prc_guadagno FROM dt_ddt WHERE id='.prepare($id_record); +$q = 'SELECT *, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT '.$listino.' FROM an_anagrafiche WHERE idanagrafica=dt_ddt.idanagrafica)) AS prc_guadagno FROM dt_ddt WHERE id='.prepare($id_record); $rs = $dbo->fetchArray($q); $numero = (!empty($rs[0]['numero_esterno'])) ? $rs[0]['numero_esterno'] : $rs[0]['numero']; $idanagrafica = $rs[0]['idanagrafica']; -$prc_guadagno = $rs[0]['prc_guadagno']; + +if (!empty($rs[0]['prc_guadagno'])) { + $sconto = $rs[0]['prc_guadagno']; + $tipo_sconto = 'PRC'; +} /* Form di inserimento riga documento @@ -78,7 +86,7 @@ echo ' // Sconto unitario echo '
- {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "icon-after": "choice|untprc" ]} + {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$sconto.'", "icon-after": "choice|untprc| '.$tipo_sconto.'" ]}
'; diff --git a/modules/ddt/row-list.php b/modules/ddt/row-list.php index f7c8524b0..2040cbefa 100644 --- a/modules/ddt/row-list.php +++ b/modules/ddt/row-list.php @@ -85,7 +85,7 @@ if (!empty($rs)) { echo ' '; - if (!str_contains($r['descrizione'], 'SCONTO')) { + if (empty($r['sconto_globale'])) { echo ' '.Translator::numberToLocale($r['qta'] - $r['qta_evasa']).'
('.tr('Q.tà iniziale').': '.Translator::numberToLocale($r['qta']).')'; @@ -130,7 +130,7 @@ if (!empty($rs)) { // Possibilità di rimuovere una riga solo se il ddt non è evaso echo ' '; - if ($records[0]['stato'] != 'Evaso' && !str_contains($r['descrizione'], 'SCONTO')) { + if ($records[0]['stato'] != 'Evaso' && empty($r['sconto_globale'])) { echo " @@ -169,7 +169,7 @@ if (!empty($rs)) { "; } - if (!str_contains($r['descrizione'], 'SCONTO')) { + if (empty($r['sconto_globale'])) { echo '
diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index f51ba8b5e..073cd6c94 100644 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -46,25 +46,6 @@ switch (post('op')) { $dbo->query($query); $id_record = $dbo->lastInsertedID(); - if ($dir == 'entrata') { - $listino = $dbo->fetchArray('SELECT prc_guadagno FROM mg_listini WHERE id = (SELECT idlistino FROM an_anagrafiche WHERE idanagrafica = '.prepare($idanagrafica).')'); - - if (!empty($listino)) { - $dbo->update('co_documenti', [ - 'tipo_sconto_globale' => 'PRC', - 'sconto_globale' => abs($listino[0]['prc_guadagno']), - ], ['id' => $id_record]); - - aggiorna_sconto([ - 'parent' => 'co_documenti', - 'row' => 'co_righe_documenti', - ], [ - 'parent' => 'id', - 'row' => 'iddocumento', - ], $id_record); - } - } - $_SESSION['infos'][] = tr('Aggiunta fattura numero _NUM_!', [ '_NUM_' => $numero, ]); @@ -312,12 +293,6 @@ switch (post('op')) { $prezzo = $post['prezzo']; $qta = 1; - // Calcolo dello sconto - $sconto_unitario = $post['sconto']; - $tipo_sconto = $post['tipo_sconto']; - $sconto = ($tipo_sconto == 'PRC') ? ($prezzo * $sconto_unitario) / 100 : $sconto_unitario; - $sconto = $sconto * $qta; - // Leggo l'anagrafica del cliente $rs = $dbo->fetchArray('SELECT idanagrafica, codice, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento='.prepare($idintervento).') AS data FROM `in_interventi` WHERE id='.prepare($idintervento)); $idanagrafica = $rs[0]['idanagrafica']; @@ -358,14 +333,14 @@ switch (post('op')) { // Calcolo rivalsa inps $query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS')); $rs = $dbo->fetchArray($query); - $rivalsainps = ($subtot - $sconto) / 100 * $rs[0]['percentuale']; + $rivalsainps = ($subtot) / 100 * $rs[0]['percentuale']; // Calcolo ritenuta d'acconto $query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto")); $rs = $dbo->fetchArray($query); - $ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale']; + $ritenutaacconto = ($subtot + $rivalsainps) / 100 * $rs[0]['percentuale']; - $query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', NULL, '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare('Trasferta intervento '.$codice.' del '.Translator::dateToLocale($data)).', '.prepare($subtot).", 'km' ".prepare($km).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; + $query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare('Trasferta intervento '.$codice.' del '.Translator::dateToLocale($data)).', '.prepare($subtot).", 'km' ".prepare($km).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; $dbo->query($query); } @@ -386,20 +361,47 @@ switch (post('op')) { // Calcolo rivalsa inps $query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS')); $rs = $dbo->fetchArray($query); - $rivalsainps = ($subtot - $sconto) / 100 * $rs[0]['percentuale']; + $rivalsainps = ($subtot) / 100 * $rs[0]['percentuale']; // Calcolo ritenuta d'acconto $query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto")); $rs = $dbo->fetchArray($query); - $ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale']; + $ritenutaacconto = ($subtot + $rivalsainps) / 100 * $rs[0]['percentuale']; - $query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', NULL, '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($rsr[$i]['descrizione']).', '.prepare($subtot).", 0, 0, 'UNT', ".prepare($rsr[$i]['um']).', '.prepare($rsr[$i]['qta']).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; + $query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($rsr[$i]['descrizione']).', '.prepare($subtot).", 0, 0, 'UNT', ".prepare($rsr[$i]['um']).', '.prepare($rsr[$i]['qta']).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; $dbo->query($query); } } $costi_intervento = get_costi_intervento($idintervento); - $prezzo = $costi_intervento['manodopera_scontato'] + $costi_intervento['viaggio_scontato'] - $costi_intervento['sconto_globale']; + $prezzo = $costi_intervento['manodopera_scontato'] + $costi_intervento['viaggio_scontato']; + + // Aggiunta sconto + if (!empty($costi_intervento['sconto_globale'])) { + $subtot = $costi_intervento['sconto_globale']; + + // Calcolo iva + $query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva); + $rs = $dbo->fetchArray($query); + $desc_iva = $rs[0]['descrizione']; + + $subtot = $rsr[$i]['prezzo_vendita'] * $rsr[$i]['qta']; + $iva = ($subtot) / 100 * $rs[0]['percentuale']; + $iva_indetraibile = $iva / 100 * $rs[0]['indetraibile']; + + // Calcolo rivalsa inps + $query = 'SELECT * FROM co_rivalsainps WHERE id='.prepare(get_var('Percentuale rivalsa INPS')); + $rs = $dbo->fetchArray($query); + $rivalsainps = ($subtot) / 100 * $rs[0]['percentuale']; + + // Calcolo ritenuta d'acconto + $query = 'SELECT * FROM co_ritenutaacconto WHERE id='.prepare(get_var("Percentuale ritenuta d'acconto")); + $rs = $dbo->fetchArray($query); + $ritenutaacconto = ($subtot + $rivalsainps) / 100 * $rs[0]['percentuale']; + + $query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', NULL, '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare('Sconto '.$descrizione).', '.prepare($subtot).', 1, '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; + $dbo->query($query); + } // Calcolo iva $query = 'SELECT * FROM co_iva WHERE id='.prepare($idiva); @@ -421,7 +423,7 @@ switch (post('op')) { $ritenutaacconto = ($subtot - $sconto + $rivalsainps) / 100 * $rs[0]['percentuale']; // Aggiunta riga intervento sul documento - $query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).', '.prepare($sconto).', '.prepare($sconto_unitario).', '.prepare($tipo_sconto).", '-', ".prepare($qta).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; + $query = 'INSERT INTO co_righe_documenti(iddocumento, idintervento, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, um, qta, idrivalsainps, rivalsainps, idritenutaacconto, ritenutaacconto, `order`) VALUES('.prepare($id_record).', '.prepare($idintervento).', '.prepare($idconto).', '.prepare($idiva).', '.prepare($desc_iva).', '.prepare($iva).', '.prepare($iva_indetraibile).', '.prepare($descrizione).', '.prepare($subtot).", '-', ".prepare($qta).', '.prepare(get_var('Percentuale rivalsa INPS')).', '.prepare($rivalsainps).', '.prepare(get_var("Percentuale ritenuta d'acconto")).', '.prepare($ritenutaacconto).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'; if ($dbo->query($query)) { // Ricalcolo inps, ritenuta e bollo if ($dir == 'entrata') { @@ -499,7 +501,7 @@ switch (post('op')) { 'desc_iva' => $riga['desc_iva'], 'iva' => $riga['iva'], 'iva_indetraibile' => $riga['iva_indetraibile'], - 'descrizione' => str_replace('SCONTO', 'SCONTO PREVENTIVO', $riga['descrizione']), + 'descrizione' => str_replace('SCONTO', 'SCONTO '.$descrizione, $riga['descrizione']), 'subtotale' => $riga['subtotale'], 'um' => $riga['um'], 'qta' => $riga['qta'], @@ -644,6 +646,7 @@ switch (post('op')) { $descrizione = post('descrizione'); $idiva = post('idiva'); $idconto = post('idconto'); + $um = post('um'); $qta = $post['qta']; $prezzo = $post['prezzo']; diff --git a/modules/fatture/add_articolo.php b/modules/fatture/add_articolo.php index 316492524..25ecc0b19 100644 --- a/modules/fatture/add_articolo.php +++ b/modules/fatture/add_articolo.php @@ -7,16 +7,25 @@ $module = Modules::getModule($id_module); if ($module['name'] == 'Fatture di vendita') { $dir = 'entrata'; $conti = 'conti-vendite'; + + $listino = 'idlistino_vendite'; + } else { $dir = 'uscita'; $conti = 'conti-acquisti'; + + $listino = 'idlistino_acquisti'; } // Info documento -$q = 'SELECT *, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=co_documenti.idanagrafica)) AS prc_guadagno FROM co_documenti WHERE id='.prepare($id_record); +$q = 'SELECT *, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT '.$listino.' FROM an_anagrafiche WHERE idanagrafica=co_documenti.idanagrafica)) AS prc_guadagno FROM co_documenti WHERE id='.prepare($id_record); $record = $dbo->fetchArray($q); $numero = ($record[0]['numero_esterno'] != '') ? $record[0]['numero_esterno'] : $record[0]['numero']; -$prc_guadagno = $record[0]['prc_guadagno']; + +if (!empty($rs[0]['prc_guadagno'])) { + $sconto = $rs[0]['prc_guadagno']; + $tipo_sconto = 'PRC'; +} $idconto = $record[0]['idconto']; $idanagrafica = $record[0]['idanagrafica']; @@ -99,7 +108,7 @@ echo ' // Sconto unitario echo '
- {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "icon-after": "choice|untprc" ]} + {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$sconto.'", "icon-after": "choice|untprc| '.$tipo_sconto.'" ]}
'; diff --git a/modules/fatture/add_intervento.php b/modules/fatture/add_intervento.php index 0e9ef4a2f..51e47dfef 100644 --- a/modules/fatture/add_intervento.php +++ b/modules/fatture/add_intervento.php @@ -72,14 +72,8 @@ echo ' // Costo unitario echo '
-
+
{[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo", "required": 1, "icon-after": "€", "disabled": 1 ]} -
'; - -// Sconto unitario -echo ' -
- {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "icon-after": "choice|untprc" ]}
'; diff --git a/modules/fatture/add_preventivo.php b/modules/fatture/add_preventivo.php index 5ad79ef6b..455d7fb0c 100644 --- a/modules/fatture/add_preventivo.php +++ b/modules/fatture/add_preventivo.php @@ -34,7 +34,7 @@ echo ' echo '
- {[ "type": "select", "label": "'.tr('Preventivo').'", "name": "idpreventivo", "required": 1, "values": "query=SELECT id, CONCAT(\'Preventivo numero \', numero, \' - \', nome) AS descrizione, (SELECT SUM(subtotale) FROM co_righe_preventivi WHERE idpreventivo=co_preventivi.id GROUP BY idpreventivo) AS subtot, (SELECT SUM(sconto) FROM co_righe_preventivi WHERE idpreventivo=co_preventivi.id GROUP BY idpreventivo) AS sconto FROM co_preventivi WHERE idanagrafica='.prepare($idanagrafica).' AND id NOT IN (SELECT idpreventivo FROM co_righe_documenti WHERE NOT idpreventivo=NULL) AND idstato IN( SELECT id FROM co_statipreventivi WHERE descrizione=\'Accettato\' OR descrizione=\'In lavorazione\' OR descrizione=\'In attesa di conferma\')", "extra": "onchange=\"$data = $(this).selectData(); $(\'#descrizione\').val($data.text); $(\'#prezzo\').val($data.subtot); $(\'#sconto\').val($data.sconto);\"" ]} + {[ "type": "select", "label": "'.tr('Preventivo').'", "name": "idpreventivo", "required": 1, "values": "query=SELECT id, CONCAT(\'Preventivo numero \', numero, \' - \', nome) AS descrizione, (SELECT SUM(subtotale) FROM co_righe_preventivi WHERE idpreventivo=co_preventivi.id GROUP BY idpreventivo) - (SELECT SUM(sconto) FROM co_righe_preventivi WHERE idpreventivo=co_preventivi.id GROUP BY idpreventivo) AS subtot FROM co_preventivi WHERE idanagrafica='.prepare($idanagrafica).' AND id NOT IN (SELECT idpreventivo FROM co_righe_documenti WHERE NOT idpreventivo=NULL) AND idstato IN( SELECT id FROM co_statipreventivi WHERE descrizione=\'Accettato\' OR descrizione=\'In lavorazione\' OR descrizione=\'In attesa di conferma\')", "extra": "onchange=\"$data = $(this).selectData(); $(\'#descrizione\').val($data.text); $(\'#prezzo\').val($data.subtot);\"" ]}
@@ -69,14 +69,8 @@ echo ' // Costo unitario echo '
-
- {[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo", "required": 1, "icon-after": "€" ]} -
'; - -// Sconto unitario -echo ' -
- {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "icon-after": "choice|untprc" ]} +
+ {[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo", "required": 1, "icon-after": "€", "disabled": 1 ]}
'; diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 889139e44..69ff4888d 100644 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -205,7 +205,7 @@ if ($records[0]['stato'] == 'Pagato') {
- {[ "type": "number", "label": "", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$"", "name": "sconto_generico", "value": "$sconto_globale$", "help": "", "icon-after": "choice|untprc|$tipo_sconto_globale$" true]); // Rimozione dello sconto precedente - $dbo->query('DELETE FROM '.$tables['row']." WHERE descrizione LIKE '%".$descrizione."%' AND ".$fields['row'].'='.prepare($id_record)); + $dbo->query('DELETE FROM '.$tables['row'].' WHERE sconto_globale = 1 AND '.$fields['row'].'='.prepare($id_record)); // Individuazione del nuovo sconto $sconto = $dbo->select($tables['parent'], ['sconto_globale', 'tipo_sconto_globale'], [$fields['parent'] => $id_record]); @@ -766,6 +766,7 @@ function aggiorna_sconto($tables, $fields, $id_record, $options = []) 'idiva' => $idiva, 'desc_iva' => $rsi[0]['descrizione'], 'iva' => $iva, + 'sconto_globale' => 1, '#order' => '(SELECT IFNULL(MAX(`order`) + 1, 0) FROM '.$tables['row'].' AS t WHERE '.$fields['row'].'='.prepare($id_record).')', ]; diff --git a/modules/fatture/row-list.php b/modules/fatture/row-list.php index 863264c57..ec7553889 100644 --- a/modules/fatture/row-list.php +++ b/modules/fatture/row-list.php @@ -25,6 +25,9 @@ if (!empty($rs)) { foreach ($rs as $r) { $extra = ''; + $modulo = null; + $id = null; + // Articoli if (!empty($r['idarticolo'])) { $modulo = Modules::getModule('Articoli')['id']; @@ -69,9 +72,6 @@ if (!empty($rs)) { } // Righe generiche else { - $modulo = 0; - $id = 0; - $delete = 'unlink_riga'; } @@ -96,6 +96,10 @@ if (!empty($rs)) { } } + $descrizione = null; + $ref = null; + $ref_id = null; + // Aggiunta riferimento a ordine if (!empty($r['idordine'])) { $rso = $dbo->fetchArray('SELECT numero, numero_esterno, data, dir FROM or_ordini JOIN or_tipiordine ON or_tipiordine.id = or_ordini.idtipoordine WHERE or_ordini.id='.prepare($r['idordine'])); @@ -180,7 +184,7 @@ if (!empty($rs)) { echo ' '; - if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa' && !str_contains($r['descrizione'], 'SCONTO')) { + if ($records[0]['stato'] != 'Pagato' && $records[0]['stato'] != 'Emessa' && empty($r['sconto_globale'])) { echo "
@@ -207,7 +211,7 @@ if (!empty($rs)) {
"; } - if (!str_contains($r['descrizione'], 'SCONTO')) { + if (empty($r['sconto_globale'])) { echo '
diff --git a/modules/interventi/add_articolo.php b/modules/interventi/add_articolo.php index 7d5ba2fb9..d7f07fcfa 100644 --- a/modules/interventi/add_articolo.php +++ b/modules/interventi/add_articolo.php @@ -13,6 +13,10 @@ $can_edit_prezzi = (in_array('Amministratori', $gruppi)) || (get_var('Mostra i p $idriga = get('idriga'); $idautomezzo = (get('idautomezzo') == 'undefined') ? '' : get('idautomezzo'); +// Lettura idanagrafica cliente e percentuale di sconto/rincaro in base al listino +$rs = $dbo->fetchArray('SELECT idanagrafica FROM in_interventi WHERE id='.prepare($id_record)); + +$idanagrafica = $rs[0]['idanagrafica']; if (empty($idriga)) { $op = 'addarticolo'; $button = ' '.tr('Aggiungi'); @@ -24,10 +28,15 @@ if (empty($idriga)) { $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 = $listino[0]['prc_guadagno']; + $tipo_sconto = 'PRC'; + } } else { $op = 'editarticolo'; $button = ' '.tr('Modifica'); @@ -53,10 +62,6 @@ if (empty($idriga)) { $idimpianto = $rsr[0]['idimpianto']; } -// Lettura idanagrafica cliente e percentuale di sconto/rincaro in base al listino -$rs = $dbo->fetchArray('SELECT idanagrafica FROM in_interventi WHERE id='.prepare($id_record)); -$idanagrafica = $rs[0]['idanagrafica']; - /* Form di inserimento */ diff --git a/modules/interventi/add_righe.php b/modules/interventi/add_righe.php index efe96265d..5c6b76135 100644 --- a/modules/interventi/add_righe.php +++ b/modules/interventi/add_righe.php @@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php'; $idriga = filter('idriga'); //Lettura idanagrafica cliente e percentuale di sconto/rincaro in base al listino -$rs = $dbo->fetchArray('SELECT idanagrafica, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=.in_interventi.idanagrafica)) AS prc_sconto FROM in_interventi WHERE id='.prepare($id_record)); +$rs = $dbo->fetchArray('SELECT idanagrafica, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica=.in_interventi.idanagrafica)) AS prc_sconto FROM in_interventi WHERE id='.prepare($id_record)); $idanagrafica = $rs[0]['idanagrafica']; $prc_sconto = $rs[0]['prc_sconto']; @@ -19,6 +19,11 @@ if (empty($idriga)) { $um = ''; $prezzo_vendita = '0'; $prezzo_acquisto = '0'; + + if (!empty($rs[0]['prc_guadagno'])) { + $sconto = $rs[0]['prc_guadagno']; + $tipo_sconto = 'PRC'; + } } else { $op = 'editriga'; $button = ' '.tr('Modifica'); @@ -90,8 +95,10 @@ echo ' echo ' - -
'; +'; + +echo ' +'; ?> @@ -115,5 +122,3 @@ echo ' $('#add-righe').ajaxForm( options ); }); - - diff --git a/modules/interventi/ajax_articoli.php b/modules/interventi/ajax_articoli.php index 8f6a60ac5..6cccab4f0 100644 --- a/modules/interventi/ajax_articoli.php +++ b/modules/interventi/ajax_articoli.php @@ -4,7 +4,7 @@ include_once __DIR__.'/../../core.php'; include_once $docroot.'/modules/articoli/modutil.php'; -$query = 'SELECT *, (SELECT codice FROM mg_articoli WHERE id=mg_articoli_interventi.idarticolo) AS codice, mg_articoli_interventi.id AS idriga, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno FROM mg_articoli_interventi WHERE idintervento='.prepare($id_record).' '.Modules::getAdditionalsQuery('Magazzino'); +$query = 'SELECT *, (SELECT codice FROM mg_articoli WHERE id=mg_articoli_interventi.idarticolo) AS codice, mg_articoli_interventi.id AS idriga, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno FROM mg_articoli_interventi WHERE idintervento='.prepare($id_record).' '.Modules::getAdditionalsQuery('Magazzino'); $rs = $dbo->fetchArray($query); if (!empty($rs)) { diff --git a/modules/interventi/ajax_costi.php b/modules/interventi/ajax_costi.php index 62ec158ca..7e61001f1 100644 --- a/modules/interventi/ajax_costi.php +++ b/modules/interventi/ajax_costi.php @@ -73,3 +73,6 @@ echo ' {[ "type": "number", "label": "'.tr('Sconto globale').'", "name": "sconto_globale", "value": "'.$sconto.'", "icon-after": "choice|untprc|'.$tipo_sconto.'" ]}
'; + +echo ' +'; diff --git a/modules/ordini/add_articolo.php b/modules/ordini/add_articolo.php index 0e5927298..03e184b2e 100644 --- a/modules/ordini/add_articolo.php +++ b/modules/ordini/add_articolo.php @@ -6,16 +6,24 @@ $module = Modules::getModule($id_module); if ($module['name'] == 'Ordini cliente') { $dir = 'entrata'; + + $listino = 'idlistino_vendite'; } else { $dir = 'uscita'; + + $listino = 'idlistino_acquisti'; } //Info documento -$q = 'SELECT *, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=or_ordini.idanagrafica) ) AS prc_guadagno FROM or_ordini WHERE id='.prepare($id_record); +$q = 'SELECT *, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT '.$listino.' FROM an_anagrafiche WHERE idanagrafica=or_ordini.idanagrafica) ) AS prc_guadagno FROM or_ordini WHERE id='.prepare($id_record); $rs = $dbo->fetchArray($q); $numero = (!empty($rs[0]['numero_esterno'])) ? $rs[0]['numero_esterno'] : $rs[0]['numero']; $idanagrafica = $rs[0]['idanagrafica']; -$prc_guadagno = $rs[0]['prc_guadagno']; + +if (!empty($rs[0]['prc_guadagno'])) { + $sconto = $rs[0]['prc_guadagno']; + $tipo_sconto = 'PRC'; +} // Seleziona articolo // - per i documenti di vendita deve esserci almeno 1 unità @@ -87,7 +95,7 @@ echo ' // Sconto unitario echo '
- {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "icon-after": "choice|untprc" ]} + {[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$sconto.'", "icon-after": "choice|untprc| '.$tipo_sconto.'" ]}
'; diff --git a/modules/ordini/row-list.php b/modules/ordini/row-list.php index a236c775f..56c2b3886 100644 --- a/modules/ordini/row-list.php +++ b/modules/ordini/row-list.php @@ -75,7 +75,7 @@ if (!empty($rs)) { echo ' '; - if (!str_contains($r['descrizione'], 'SCONTO')) { + if (empty($r['sconto_globale'])) { echo ' '.Translator::numberToLocale($r['qta'] - $r['qta_evasa']).'
('.tr('Q.tà iniziale').': '.Translator::numberToLocale($r['qta']).')'; @@ -121,7 +121,7 @@ if (!empty($rs)) { echo ' '; - if ($records[0]['stato'] != 'Evaso' && !str_contains($r['descrizione'], 'SCONTO')) { + if ($records[0]['stato'] != 'Evaso' && empty($r['sconto_globale'])) { echo "
@@ -152,7 +152,7 @@ if (!empty($rs)) {
"; } - if (!str_contains($r['descrizione'], 'SCONTO')) { + if (empty($r['sconto_globale'])) { echo '
diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php index 8c47cd395..7f8f417e0 100644 --- a/modules/preventivi/actions.php +++ b/modules/preventivi/actions.php @@ -49,23 +49,6 @@ switch (post('op')) { $dbo->query('INSERT INTO co_preventivi(idanagrafica, nome, numero, idagente, idstato, idtipointervento, data_bozza, data_conclusione, idiva, idpagamento) VALUES ('.prepare($idanagrafica).', '.prepare($nome).', '.prepare($numero).', '.prepare($idagente).", (SELECT `id` FROM `co_statipreventivi` WHERE `descrizione`='Bozza'), ".prepare($idtipointervento).', NOW(), DATE_ADD(NOW(), INTERVAL +1 MONTH), '.prepare($idiva).', '.prepare($idpagamento).')'); $id_record = $dbo->lastInsertedID(); - $listino = $dbo->fetchArray('SELECT prc_guadagno FROM mg_listini WHERE id = (SELECT idlistino FROM an_anagrafiche WHERE idanagrafica = '.prepare($idanagrafica).')'); - - if (!empty($listino)) { - $dbo->update('co_preventivi', [ - 'tipo_sconto_globale' => 'PRC', - 'sconto_globale' => abs($listino[0]['prc_guadagno']), - ], ['id' => $id_record]); - - aggiorna_sconto([ - 'parent' => 'co_preventivi', - 'row' => 'co_righe_preventivi', - ], [ - 'parent' => 'id', - 'row' => 'idpreventivo', - ], $id_record); - } - /* // inserisco righe standard preventivo // ore lavoro diff --git a/modules/preventivi/edit_riga.php b/modules/preventivi/edit_riga.php index a630cc3a2..c05b30d4c 100644 --- a/modules/preventivi/edit_riga.php +++ b/modules/preventivi/edit_riga.php @@ -5,7 +5,7 @@ include_once __DIR__.'/../../core.php'; $idriga = get('idriga'); // Info preventivo -$q = 'SELECT numero, idanagrafica FROM co_preventivi WHERE id='.prepare($id_record); +$q = 'SELECT numero, idanagrafica, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica=co_preventivi.idanagrafica)) AS prc_guadagno FROM co_preventivi WHERE id='.prepare($id_record); $rs = $dbo->fetchArray($q); $numero = $rs[0]['numero']; $idanagrafica = $rs[0]['idanagrafica']; @@ -22,6 +22,11 @@ if (empty($idriga)) { $idiva = get_var('Iva predefinita'); $subtot = 0; $sconto = 0; + + if (!empty($rs[0]['prc_guadagno'])) { + $sconto = $rs[0]['prc_guadagno']; + $tipo_sconto = 'PRC'; + } } else { $op = 'editriga'; $button = tr('Modifica'); diff --git a/modules/preventivi/row-list.php b/modules/preventivi/row-list.php index 9f15b0199..535e30c67 100644 --- a/modules/preventivi/row-list.php +++ b/modules/preventivi/row-list.php @@ -78,7 +78,7 @@ if (!empty($rs)) { echo ' '; - if ($records[0]['stato'] != 'Pagato' && !str_contains($r['descrizione'], 'SCONTO')) { + if ($records[0]['stato'] != 'Pagato' && empty($r['sconto_globale'])) { echo "
@@ -94,7 +94,7 @@ if (!empty($rs)) {
"; } - if (!str_contains($r['descrizione'], 'SCONTO')) { + if (empty($r['sconto_globale'])) { echo '
diff --git a/templates/contratti_cons/pdfgen.contratti_cons.php b/templates/contratti_cons/pdfgen.contratti_cons.php index e1179e981..ea0e473cb 100644 --- a/templates/contratti_cons/pdfgen.contratti_cons.php +++ b/templates/contratti_cons/pdfgen.contratti_cons.php @@ -162,7 +162,7 @@ if (sizeof($contratti) > 0) { $body .= "
\n"; // Conteggio articoli utilizzati -$query = "SELECT *, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=mg_articoli_interventi.idintervento) AS data_intervento, (SELECT percentuale FROM co_iva WHERE id=mg_articoli_interventi.idiva_vendita) AS prciva_vendita, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` JOIN mg_prodotti ON mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idintervento, lotto HAVING idintervento IN(".implode(',', $idinterventi).") AND NOT idarticolo='0' ORDER BY idarticolo ASC"; +$query = "SELECT *, (SELECT MIN(orario_inizio) FROM in_interventi_tecnici WHERE idintervento=mg_articoli_interventi.idintervento) AS data_intervento, (SELECT percentuale FROM co_iva WHERE id=mg_articoli_interventi.idiva_vendita) AS prciva_vendita, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` JOIN mg_prodotti ON mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idintervento, lotto HAVING idintervento IN(".implode(',', $idinterventi).") AND NOT idarticolo='0' ORDER BY idarticolo ASC"; $rs2 = $dbo->fetchArray($query); if (sizeof($rs2) > 0) { diff --git a/templates/ddt/body.php b/templates/ddt/body.php index 8d222fc5e..71b3095b0 100644 --- a/templates/ddt/body.php +++ b/templates/ddt/body.php @@ -59,7 +59,7 @@ foreach ($rs_gen as $r) { $sconto = $r['sconto']; $iva = $r['iva']; - if (str_contains($r['descrizione'], 'SCONTO')) { + if (empty($r['sconto_globale'])) { $sconto_generico = $r['subtotale']; $iva_gen += $r['iva']; } else { diff --git a/templates/preventivi_cons/pdfgen.preventivi_cons.php b/templates/preventivi_cons/pdfgen.preventivi_cons.php index ecfe8e960..06fd06ae2 100644 --- a/templates/preventivi_cons/pdfgen.preventivi_cons.php +++ b/templates/preventivi_cons/pdfgen.preventivi_cons.php @@ -192,7 +192,7 @@ if (sizeof($preventivi) > 0) { $body .= "
\n"; // Conteggio articoli utilizzati -$query = "SELECT *, (SELECT orario_inizio FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento = mg_articoli_interventi.idintervento) AS data_intervento, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno,(SELECT percentuale FROM co_iva WHERE id=mg_articoli_interventi.idiva_vendita) AS prciva_vendita, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` JOIN mg_prodotti ON mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idintervento, lotto HAVING ".(!empty($idinterventi) ? 'idintervento IN('.implode(',', $idinterventi).') AND ' : '')." NOT idarticolo='0' ORDER BY idarticolo ASC"; +$query = "SELECT *, (SELECT orario_inizio FROM in_interventi_tecnici GROUP BY idintervento HAVING idintervento = mg_articoli_interventi.idintervento) AS data_intervento, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno,(SELECT percentuale FROM co_iva WHERE id=mg_articoli_interventi.idiva_vendita) AS prciva_vendita, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` JOIN mg_prodotti ON mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idintervento, lotto HAVING ".(!empty($idinterventi) ? 'idintervento IN('.implode(',', $idinterventi).') AND ' : '')." NOT idarticolo='0' ORDER BY idarticolo ASC"; $rs2 = $dbo->fetchArray($query); if (sizeof($rs2) > 0) { diff --git a/templates/riepilogo_interventi/pdfgen.riepilogo_interventi.php b/templates/riepilogo_interventi/pdfgen.riepilogo_interventi.php index a72e5f3ac..0b6ddf9c5 100644 --- a/templates/riepilogo_interventi/pdfgen.riepilogo_interventi.php +++ b/templates/riepilogo_interventi/pdfgen.riepilogo_interventi.php @@ -275,7 +275,7 @@ if (sizeof($info_intervento) > 0) { } // Conteggio articoli utilizzati -$query = "SELECT *, (SELECT percentuale FROM co_iva WHERE id=(SELECT idiva_vendita FROM mg_articoli WHERE id=idarticolo)) AS prciva_vendita, (SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=mg_articoli_interventi.idintervento GROUP BY idintervento HAVING idintervento=mg_articoli_interventi.idintervento) AS data_intervento, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` JOIN mg_prodotti ON mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idintervento, lotto HAVING idintervento IN(".implode(',', $idinterventi).") AND NOT idarticolo='0' ORDER BY idarticolo ASC"; +$query = "SELECT *, (SELECT percentuale FROM co_iva WHERE id=(SELECT idiva_vendita FROM mg_articoli WHERE id=idarticolo)) AS prciva_vendita, (SELECT orario_inizio FROM in_interventi_tecnici WHERE idintervento=mg_articoli_interventi.idintervento GROUP BY idintervento HAVING idintervento=mg_articoli_interventi.idintervento) AS data_intervento, (SELECT prc_guadagno FROM mg_listini WHERE id=(SELECT idlistino_vendite FROM an_anagrafiche WHERE idanagrafica=(SELECT idanagrafica FROM in_interventi WHERE id=mg_articoli_interventi.idintervento) ) ) AS prc_guadagno, (SELECT codice FROM mg_articoli WHERE id=idarticolo) AS codice_art, CONCAT_WS(serial, 'SN: ', ', ') AS codice, SUM(qta) AS sumqta FROM `mg_articoli_interventi` JOIN mg_prodotti ON mg_articoli_interventi.idarticolo = mg_prodotti.id_articolo GROUP BY idarticolo, idintervento, lotto HAVING idintervento IN(".implode(',', $idinterventi).") AND NOT idarticolo='0' ORDER BY idarticolo ASC"; $rs2 = $dbo->fetchArray($query); if (sizeof($rs2) > 0) { $body .= "\n"; diff --git a/update/2_3.sql b/update/2_3.sql index e0880f22a..a05a78514 100644 --- a/update/2_3.sql +++ b/update/2_3.sql @@ -86,11 +86,13 @@ DROP TABLE `co_contratti_interventi`; ALTER TABLE `dt_righe_ddt` ADD `desc_iva` varchar(255) NOT NULL AFTER `idiva`; ALTER TABLE `co_righe_preventivi` ADD `desc_iva` varchar(255) NOT NULL AFTER `idiva`; ALTER TABLE `or_righe_ordini` ADD `desc_iva` varchar(255) NOT NULL AFTER `idiva`; +ALTER TABLE `co_righe2_contratti` ADD `desc_iva` varchar(255) NOT NULL AFTER `idiva`; -- Fix per l'ordinamento delle righe in Preventivi, DDT e Ordini ALTER TABLE `co_righe_preventivi` ADD `order` tinyint(11) NOT NULL AFTER `qta`; ALTER TABLE `dt_righe_ddt` ADD `order` tinyint(11) NOT NULL AFTER `qta_evasa`; ALTER TABLE `or_righe_ordini` ADD `order` tinyint(11) NOT NULL AFTER `qta_evasa`; +ALTER TABLE `co_righe2_contratti` ADD `order` tinyint(11) NOT NULL AFTER `qta`; ALTER TABLE `co_righe_documenti` CHANGE `ordine` `order` int(11) NOT NULL; -- Aggiungo idconto anche per le righe delle fatture e allineamento (copia idconto nelle righe delle fatture, solo per i conti di entrata e uscita) @@ -114,11 +116,11 @@ ALTER TABLE `or_ordini` ADD `sconto_globale` decimal(12, 4) NOT NULL, ADD `tipo_ ALTER TABLE `dt_ddt` ADD `sconto_globale` decimal(12, 4) NOT NULL, ADD `tipo_sconto_globale` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT'; ALTER TABLE `in_interventi` ADD `sconto_globale` decimal(12, 4) NOT NULL, ADD `tipo_sconto_globale` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT'; -ALTER TABLE `co_righe_documenti` ADD `sconto_unitario` decimal(12, 4) NOT NULL AFTER `sconto`, ADD `tipo_sconto` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT' AFTER `sconto_unitario`; -ALTER TABLE `co_righe_preventivi` ADD `sconto_unitario` decimal(12, 4) NOT NULL AFTER `sconto`, ADD `tipo_sconto` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT' AFTER `sconto_unitario`; -ALTER TABLE `co_righe2_contratti` ADD `sconto_unitario` decimal(12, 4) NOT NULL AFTER `sconto`, ADD `tipo_sconto` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT' AFTER `sconto_unitario`; -ALTER TABLE `or_righe_ordini` ADD `sconto_unitario` decimal(12, 4) NOT NULL AFTER `sconto`, ADD `tipo_sconto` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT' AFTER `sconto_unitario`; -ALTER TABLE `dt_righe_ddt` ADD `sconto_unitario` decimal(12, 4) NOT NULL AFTER `sconto`, ADD `tipo_sconto` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT' AFTER `sconto_unitario`; +ALTER TABLE `co_righe_documenti` ADD `sconto_unitario` decimal(12, 4) NOT NULL AFTER `sconto`, ADD `tipo_sconto` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT' AFTER `sconto_unitario`, ADD `sconto_globale` boolean NOT NULL DEFAULT 0 AFTER `tipo_sconto`; +ALTER TABLE `co_righe_preventivi` ADD `sconto_unitario` decimal(12, 4) NOT NULL AFTER `sconto`, ADD `tipo_sconto` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT' AFTER `sconto_unitario`, ADD `sconto_globale` boolean NOT NULL DEFAULT 0 AFTER `tipo_sconto`; +ALTER TABLE `co_righe2_contratti` ADD `sconto_unitario` decimal(12, 4) NOT NULL AFTER `sconto`, ADD `tipo_sconto` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT' AFTER `sconto_unitario`, ADD `sconto_globale` boolean NOT NULL DEFAULT 0 AFTER `tipo_sconto`; +ALTER TABLE `or_righe_ordini` ADD `sconto_unitario` decimal(12, 4) NOT NULL AFTER `sconto`, ADD `tipo_sconto` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT' AFTER `sconto_unitario`, ADD `sconto_globale` boolean NOT NULL DEFAULT 0 AFTER `tipo_sconto`; +ALTER TABLE `dt_righe_ddt` ADD `sconto_unitario` decimal(12, 4) NOT NULL AFTER `sconto`, ADD `tipo_sconto` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT' AFTER `sconto_unitario`, ADD `sconto_globale` boolean NOT NULL DEFAULT 0 AFTER `tipo_sconto`; ALTER TABLE `in_righe_interventi` ADD `sconto` decimal(12, 4) NOT NULL, ADD `sconto_unitario` decimal(12, 4) NOT NULL AFTER `sconto`, ADD `tipo_sconto` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT' AFTER `sconto_unitario`; ALTER TABLE `mg_articoli_interventi` ADD `sconto_unitario` decimal(12, 4) NOT NULL AFTER `sconto`, ADD `tipo_sconto` enum('UNT', 'PRC') NOT NULL DEFAULT 'UNT' AFTER `sconto_unitario`; @@ -762,8 +764,14 @@ UPDATE `zz_modules` SET `title` = `name` WHERE `title` = ''; ALTER TABLE `co_iva` ADD `dicitura` varchar(255); -- Miglioramento della gestione dei pagamenti predefiniti -ALTER TABLE `an_anagrafiche` CHANGE `idpagamento` `idpagamento_vendite` int(11), ADD `idpagamento_acquisti` int(11); -UPDATE `an_anagrafiche` SET `idpagamento_acquisti` = `idpagamento_vendite` WHERE `idpagamento_acquisti` IS NULL; +ALTER TABLE `an_anagrafiche` CHANGE `idpagamento` `idpagamento_vendite` int(11), ADD `idpagamento_acquisti` int(11) AFTER `idpagamento_vendite`; +UPDATE `an_anagrafiche` SET `idpagamento_vendite` = NULL WHERE `idpagamento_vendite` = 0; +UPDATE `an_anagrafiche` SET `idpagamento_acquisti` = `idpagamento_vendite` WHERE `idpagamento_vendite` IS NOT NULL; + +-- Miglioramento della gestione dei listini predefiniti +ALTER TABLE `an_anagrafiche` CHANGE `idlistino` `idlistino_vendite` int(11), ADD `idlistino_acquisti` int(11) AFTER `idlistino_vendite`; +UPDATE `an_anagrafiche` SET `idlistino_vendite` = NULL WHERE `idlistino_vendite` = 0; +UPDATE `an_anagrafiche` SET `idlistino_acquisti` = `idlistino_vendite` WHERE `idlistino_vendite` IS NOT NULL; -- Rimozione data_sla e ora_sla ALTER TABLE `in_interventi` DROP `data_sla`, DROP `ora_sla`;