Miglioramento nella gestione degli sconti

Risoluzione delle problematiche relative alla selezioni di diversi sconti su multipli livelli.
Aggiunta selezione automatica dello sconto da listino.
Introduzione del nuovo sistema degli sconti nei contratti.
This commit is contained in:
Thomas Zilio 2017-09-11 11:28:39 +02:00
parent b7eb048210
commit 585290e011
29 changed files with 246 additions and 157 deletions

View File

@ -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'],

View File

@ -154,7 +154,11 @@ if ($fornitore) {
?>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Pagamento predefinito per acquisti'); ?>", "name": "idpagamento_acquisti", "values": "query=SELECT id, descrizione FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento_acquisti$" ]}
</div>
</div>
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Listino articoli (per acquisti)'); ?>", "name": "idlistino_acquisti", "values": "query=SELECT id, nome AS descrizione FROM mg_listini ORDER BY nome ASC", "value": "$idlistino_acquisti$" ]}
</div>
<?php
}
@ -163,20 +167,22 @@ if ($fornitore) {
?>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Pagamento predefinito per vendite'); ?>", "name": "idpagamento_vendite", "values": "query=SELECT id, descrizione FROM co_pagamenti GROUP BY descrizione ORDER BY descrizione ASC", "value": "$idpagamento_vendite$" ]}
</div>
</div>
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Listino articoli (per vendite)'); ?>", "name": "idlistino_vendite", "values": "query=SELECT id, nome AS descrizione FROM mg_listini ORDER BY nome ASC", "value": "$idlistino_vendite$" ]}
</div>
<?php
} ?>
<div class="col-md-4">
{[ "type": "select", "label": "<?php echo tr('Iva predefinita'); ?>", "name": "idiva", "values": "query=SELECT id, descrizione FROM co_iva ORDER BY descrizione ASC", "value": "$idiva$" ]}
</div>
</div>
<div class="row">
<div class="row">
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Listino articoli'); ?>", "name": "idlistino", "values": "query=SELECT id, nome AS descrizione FROM mg_listini ORDER BY nome ASC", "value": "$idlistino$" ]}
</div>
{[ "type": "select", "label": "<?php echo tr('Iva predefinita'); ?>", "name": "idiva", "values": "query=SELECT id, descrizione FROM co_iva ORDER BY descrizione ASC", "value": "$idiva$" ]}
</div>
<div class="col-md-3">
{[ "type": "select", "label": "<?php echo tr('Indirizzo di fatturazione'); ?>", "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$" ]}

View File

@ -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);
}

View File

@ -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 '
<div class="col-md-4">
{[ "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.'" ]}
</div>';
// Quantità
@ -119,7 +126,7 @@ echo '
// Sconto unitario
echo '
<div class="col-md-6">
{[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$sconto.'", "icon-after": "&euro;" ]}
{[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "value": "'.$sconto.'", "icon-after": "choice|untprc|'.$tipo_sconto.'" ]}
</div>';
echo '

View File

@ -103,6 +103,17 @@ $_SESSION['superselect']['idanagrafica'] = $records[0]['idanagrafica'];
</div>
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto totale') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr("Sconto complessivo del contratto"); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php
if ($records[0]['stato'] == 'Emessa') {
echo ', "disabled" : 1';
}
?> ]}
</div>
</div>
<div class="row">
<div class="col-md-12">
{[ "type": "textarea", "label": "<?php echo tr('Esclusioni'); ?>", "name": "esclusioni", "class": "autosize", "value": "$esclusioni$" ]}

View File

@ -68,9 +68,9 @@ if (!empty($rs_art)) {
<td class="text-right">
'.Translator::numberToLocale($r['subtotale']).' &euro;';
if ($r['sconto'] > 0) {
echo '<br>
<small class="help-block">- sconto '.Translator::numberToLocale($r['sconto'] * $r['qta']).' &euro;</small>';
if ($r['sconto_unitario'] > 0) {
echo '
<br><small class="label label-danger">- sconto '.Translator::numberToLocale($r['sconto_unitario']).($r['tipo_sconto'] == 'PRC' ? '%' : ' &euro;').'</small>';
}
echo '
@ -80,7 +80,7 @@ if (!empty($rs_art)) {
echo '
<td class="text-center">';
if ($records[0]['stato'] != 'Pagato') {
if ($records[0]['stato'] != 'Pagato' && empty($r['sconto_globale'])) {
echo '
<form action="'.$rootdir.'/editor.php?id_module='.Modules::getModule('Contratti')['id'].'&id_record='.$id_record.'" method="post" id="delete-form-'.$r['id'].'" role="form">
<input type="hidden" name="backto" value="record-edit">
@ -103,9 +103,9 @@ if (!empty($rs_art)) {
</tr>';
$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'];
}
}

View File

@ -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 '
<div class="col-md-3">
{[ "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.'" ]}
</div>
</div>';

View File

@ -85,7 +85,7 @@ if (!empty($rs)) {
echo '
<td class="text-center">';
if (!str_contains($r['descrizione'], 'SCONTO')) {
if (empty($r['sconto_globale'])) {
echo '
<big>'.Translator::numberToLocale($r['qta'] - $r['qta_evasa']).'</big>
<br><small>('.tr('Q. iniziale').': '.Translator::numberToLocale($r['qta']).')</small>';
@ -130,7 +130,7 @@ if (!empty($rs)) {
// Possibilità di rimuovere una riga solo se il ddt non è evaso
echo '
<td class="text-center">';
if ($records[0]['stato'] != 'Evaso' && !str_contains($r['descrizione'], 'SCONTO')) {
if ($records[0]['stato'] != 'Evaso' && empty($r['sconto_globale'])) {
echo "
<form action='".$rootdir.'/editor.php?id_module='.Modules::getModule($name)['id'].'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
<input type='hidden' name='backto' value='record-edit'>
@ -169,7 +169,7 @@ if (!empty($rs)) {
</form>";
}
if (!str_contains($r['descrizione'], 'SCONTO')) {
if (empty($r['sconto_globale'])) {
echo '
<div class="handle clickable" style="padding:10px">
<i class="fa fa-sort"></i>

View File

@ -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'];

View File

@ -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 '
<div class="col-md-3">
{[ "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.'" ]}
</div>
</div>';

View File

@ -72,14 +72,8 @@ echo '
// Costo unitario
echo '
<div class="row">
<div class="col-md-6">
<div class="col-md-12">
{[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo", "required": 1, "icon-after": "&euro;", "disabled": 1 ]}
</div>';
// Sconto unitario
echo '
<div class="col-md-6">
{[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "icon-after": "choice|untprc" ]}
</div>
</div>';

View File

@ -34,7 +34,7 @@ echo '
echo '
<div class="row">
<div class="col-md-6">
{[ "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);\"" ]}
</div>
<div class="col-md-6">
@ -69,14 +69,8 @@ echo '
// Costo unitario
echo '
<div class="row">
<div class="col-md-6">
{[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo", "required": 1, "icon-after": "&euro;" ]}
</div>';
// Sconto unitario
echo '
<div class="col-md-6">
{[ "type": "number", "label": "'.tr('Sconto unitario').'", "name": "sconto", "icon-after": "choice|untprc" ]}
<div class="col-md-12">
{[ "type": "number", "label": "'.tr('Costo unitario').'", "name": "prezzo", "required": 1, "icon-after": "&euro;", "disabled": 1 ]}
</div>
</div>';

View File

@ -205,7 +205,7 @@ if ($records[0]['stato'] == 'Pagato') {
<div class="row">
<div class="col-md-3">
{[ "type": "number", "label": "<?php echo tr('Sconto totale') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr("Sconto complessivo della fattura. Viene impostato automaticamente se il cliente ha un listino associato."); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php
{[ "type": "number", "label": "<?php echo tr('Sconto totale') ?>", "name": "sconto_generico", "value": "$sconto_globale$", "help": "<?php echo tr('Sconto complessivo della fattura'); ?>", "icon-after": "choice|untprc|$tipo_sconto_globale$"<?php
if ($records[0]['stato'] == 'Emessa') {
echo ', "disabled" : 1';
}

View File

@ -736,7 +736,7 @@ function aggiorna_sconto($tables, $fields, $id_record, $options = [])
$descrizione = tr('Sconto', [], ['upper' => 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).')',
];

View File

@ -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 '
<td class="text-center">';
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 "
<form action='".$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
<input type='hidden' name='backto' value='record-edit'>
@ -207,7 +211,7 @@ if (!empty($rs)) {
</form>";
}
if (!str_contains($r['descrizione'], 'SCONTO')) {
if (empty($r['sconto_globale'])) {
echo '
<div class="handle clickable" style="padding:10px">
<i class="fa fa-sort"></i>

View File

@ -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 = '<i class="fa fa-plus"></i> '.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 = '<i class="fa fa-edit"></i> '.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
*/

View File

@ -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 = '<i class="fa fa-edit"></i> '.tr('Modifica');
@ -90,8 +95,10 @@ echo '
echo '
<button type="submit" class="btn btn-primary pull-right">'.$button.'</button>
</form>
<div class="clearfix"></div>';
</form>';
echo '
<script src="'.$rootdir.'/lib/init.js"></script>';
?>
@ -115,5 +122,3 @@ echo '
$('#add-righe').ajaxForm( options );
});
</script>
<script type="text/javascript" src="<?php echo $rootdir ?>/lib/init.js"></script>

View File

@ -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)) {

View File

@ -73,3 +73,6 @@ echo '
{[ "type": "number", "label": "'.tr('Sconto globale').'", "name": "sconto_globale", "value": "'.$sconto.'", "icon-after": "choice|untprc|'.$tipo_sconto.'" ]}
</div>
</div>';
echo '
<script src="'.$rootdir.'/lib/init.js"></script>';

View File

@ -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 '
<div class="col-md-6">
{[ "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.'" ]}
</div>
</div>';

View File

@ -75,7 +75,7 @@ if (!empty($rs)) {
echo '
<td class="text-center">';
if (!str_contains($r['descrizione'], 'SCONTO')) {
if (empty($r['sconto_globale'])) {
echo '
<big>'.Translator::numberToLocale($r['qta'] - $r['qta_evasa']).'</big>
<br><small>('.tr('Q. iniziale').': '.Translator::numberToLocale($r['qta']).')</small>';
@ -121,7 +121,7 @@ if (!empty($rs)) {
echo '
<td class="text-center">';
if ($records[0]['stato'] != 'Evaso' && !str_contains($r['descrizione'], 'SCONTO')) {
if ($records[0]['stato'] != 'Evaso' && empty($r['sconto_globale'])) {
echo "
<form action='".$rootdir.'/editor.php?id_module='.Modules::getModule($name)['id'].'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
<input type='hidden' name='backto' value='record-edit'>
@ -152,7 +152,7 @@ if (!empty($rs)) {
</form>";
}
if (!str_contains($r['descrizione'], 'SCONTO')) {
if (empty($r['sconto_globale'])) {
echo '
<div class="handle clickable" style="padding:10px">
<i class="fa fa-sort"></i>

View File

@ -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

View File

@ -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');

View File

@ -78,7 +78,7 @@ if (!empty($rs)) {
echo '
<td class="text-center">';
if ($records[0]['stato'] != 'Pagato' && !str_contains($r['descrizione'], 'SCONTO')) {
if ($records[0]['stato'] != 'Pagato' && empty($r['sconto_globale'])) {
echo "
<form action='".$rootdir.'/editor.php?id_module='.$id_module.'&id_record='.$id_record."' method='post' id='delete-form-".$r['id']."' role='form'>
<input type='hidden' name='backto' value='record-edit'>
@ -94,7 +94,7 @@ if (!empty($rs)) {
</form>";
}
if (!str_contains($r['descrizione'], 'SCONTO')) {
if (empty($r['sconto_globale'])) {
echo '
<div class="handle clickable" style="padding:10px">
<i class="fa fa-sort"></i>

View File

@ -162,7 +162,7 @@ if (sizeof($contratti) > 0) {
$body .= "<br/>\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) {

View File

@ -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 {

View File

@ -192,7 +192,7 @@ if (sizeof($preventivi) > 0) {
$body .= "<br/>\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) {

View File

@ -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 .= "<table style=\"width:100%;\" class=\"table_values\" cellspacing=\"2\" cellpadding=\"5\" style=\"border-color:#aaa;\">\n";

View File

@ -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`;