mirror of
https://github.com/devcode-it/openstamanager.git
synced 2025-02-16 11:30:55 +01:00
Fix parziale del bug #18
Risoluzione delle problematiche relative alla scontistica generale, con generalizzazione delle operazioni con la funzione aggiorna_sconto().
This commit is contained in:
parent
161889bfb5
commit
346ac55cba
@ -640,8 +640,7 @@ class Database extends Util\Singleton
|
||||
try {
|
||||
$this->pdo->query($queries[$i]);
|
||||
} catch (PDOException $e) {
|
||||
$this->signal($e, _('Aggiornamento fallito').': '.$queries[$i], [
|
||||
'level' => \Monolog\Logger::EMERGENCY,
|
||||
$this->signal($e, $queries[$i], [
|
||||
'throw' => false,
|
||||
]);
|
||||
|
||||
|
@ -4,6 +4,7 @@ include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Necessaria per la funzione add_movimento_magazzino
|
||||
include_once $docroot.'/modules/articoli/modutil.php';
|
||||
include_once $docroot.'/modules/fatture/modutil.php';
|
||||
|
||||
$module = Modules::getModule($id_module);
|
||||
|
||||
@ -105,18 +106,13 @@ switch (post('op')) {
|
||||
' bollo=0, rivalsainps=0, ritenutaacconto=0, n_colli='.prepare($n_colli).' WHERE id='.prepare($id_record);
|
||||
|
||||
if ($dbo->query($query)) {
|
||||
$dbo->query("DELETE FROM dt_righe_ddt WHERE descrizione LIKE '%SCONTO%' AND idddt=".prepare($id_record));
|
||||
|
||||
// Sconto unitario, quello percentuale viene gestito a fondo pagina
|
||||
if ($tipo_sconto == 'UNT' && $sconto > 0) {
|
||||
$subtotale = -$sconto;
|
||||
|
||||
// Calcolo anche l'iva da scontare
|
||||
$rsi = $dbo->fetchArray('SELECT descrizione, percentuale FROM co_iva WHERE id='.prepare(get_var('Iva predefinita')));
|
||||
$iva = $subtotale / 100 * $rsi[0]['percentuale'];
|
||||
|
||||
$dbo->query('INSERT INTO dt_righe_ddt(idddt, descrizione, idiva, desc_iva, iva, subtotale, sconto, qta, idgruppo, `order`) VALUES( '.prepare($id_record).", 'SCONTO', ".prepare($idiva).', '.prepare($rsi[0]['descrizione']).', '.prepare($iva).', '.prepare($subtotale).', 0, 1, (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM dt_righe_ddt AS t WHERE idddt='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM dt_righe_ddt AS t WHERE idddt='.prepare($id_record).'))');
|
||||
}
|
||||
aggiorna_sconto([
|
||||
'parent' => 'dt_ddt',
|
||||
'row' => 'dt_righe_ddt',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idddt',
|
||||
], $id_record);
|
||||
|
||||
$query = 'SELECT descrizione FROM dt_statiddt WHERE id='.prepare($idstatoddt);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
@ -496,23 +492,12 @@ switch (post('op')) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (post('op') !== null) {
|
||||
$rs_sconto = $dbo->fetchArray('SELECT sconto_globale, tipo_sconto_globale FROM dt_ddt WHERE id='.prepare($id_record));
|
||||
|
||||
// Aggiorno l'eventuale sconto gestendolo con le righe in fattura
|
||||
if ($rs_sconto[0]['tipo_sconto_globale'] == 'PRC' && !empty($rs_sconto[0]['sconto_globale'])) {
|
||||
// Se lo sconto c'è già lo elimino e lo ricalcolo
|
||||
$dbo->query("DELETE FROM dt_righe_ddt WHERE descrizione LIKE '%SCONTO %' AND idddt=".prepare($id_record));
|
||||
|
||||
$subtotale = get_imponibile_ddt($id_record);
|
||||
$subtotale = -$subtotale / 100 * $rs_sconto[0]['sconto_globale'];
|
||||
|
||||
// Calcolo anche l'iva da scontare
|
||||
$rsi = $dbo->fetchArray('SELECT descrizione, percentuale FROM co_iva WHERE id='.prepare(get_var('Iva predefinita')));
|
||||
$iva = $subtotale / 100 * $rsi[0]['percentuale'];
|
||||
|
||||
$descrizione = 'SCONTO '.Translator::numberToLocale($rs_sconto[0]['sconto_globale']).'%';
|
||||
|
||||
$dbo->query('INSERT INTO dt_righe_ddt(idddt, descrizione, idiva, desc_iva, iva, subtotale, sconto, qta, digruppo, `order`) VALUES( '.prepare($id_record).', '.prepare($descrizione).', '.prepare($idiva).', '.prepare($rsi[0]['descrizione']).', '.prepare($iva).', '.prepare($subtotale).', 0, 1, (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM dt_righe_ddt AS t WHERE idddt='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM dt_righe_ddt AS t WHERE idddt='.prepare($id_record).'))');
|
||||
}
|
||||
if (post('op') !== null && post('op') != 'update') {
|
||||
aggiorna_sconto([
|
||||
'parent' => 'dt_ddt',
|
||||
'row' => 'dt_righe_ddt',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idddt',
|
||||
], $id_record);
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ include_once __DIR__.'/../../core.php';
|
||||
|
||||
// Necessaria per la funzione add_movimento_magazzino
|
||||
include_once $docroot.'/modules/articoli/modutil.php';
|
||||
//var_dump(get_totale_fattura($id_record));exit();
|
||||
|
||||
$module = Modules::getModule($id_module);
|
||||
|
||||
@ -120,18 +121,13 @@ switch (post('op')) {
|
||||
$query = 'SELECT descrizione FROM co_statidocumento WHERE id='.prepare($idstatodocumento);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
|
||||
$dbo->query("DELETE FROM co_righe_documenti WHERE descrizione LIKE '%SCONTO%' AND iddocumento=".prepare($id_record));
|
||||
|
||||
// Sconto unitario, quello percentuale viene gestito a fondo pagina
|
||||
if ($tipo_sconto == 'UNT' && $sconto > 0) {
|
||||
$subtotale = -$sconto;
|
||||
|
||||
// Calcolo anche l'iva da scontare
|
||||
$rsi = $dbo->fetchArray('SELECT descrizione, percentuale FROM co_iva WHERE id='.prepare(get_var('Iva predefinita')));
|
||||
$iva = $subtotale / 100 * $rsi[0]['percentuale'];
|
||||
|
||||
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, descrizione, idiva, desc_iva, iva, subtotale, sconto, qta, idgruppo, `order`) VALUES( '.prepare($id_record).", 'SCONTO', ".prepare($idiva).', '.prepare($rsi[0]['descrizione']).', '.prepare($iva).', '.prepare($subtotale).', 0, 1, (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))');
|
||||
}
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_documenti',
|
||||
'row' => 'co_righe_documenti',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'iddocumento',
|
||||
], $id_record);
|
||||
|
||||
// Ricalcolo inps, ritenuta e bollo (se la fattura non è stata pagata)
|
||||
if ($dir == 'entrata') {
|
||||
@ -1226,23 +1222,12 @@ switch (post('op')) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (post('op') !== null) {
|
||||
$rs_sconto = $dbo->fetchArray('SELECT sconto_globale, tipo_sconto_globale FROM co_documenti WHERE id='.prepare($id_record));
|
||||
|
||||
// Aggiorno l'eventuale sconto gestendolo con le righe in fattura
|
||||
if ($rs_sconto[0]['tipo_sconto_globale'] == 'PRC' && !empty($rs_sconto[0]['sconto_globale'])) {
|
||||
// Se lo sconto c'è già lo elimino e lo ricalcolo
|
||||
$dbo->query("DELETE FROM co_righe_documenti WHERE descrizione LIKE '%SCONTO %' AND iddocumento=".prepare($id_record));
|
||||
|
||||
$subtotale = get_imponibile_fattura($id_record);
|
||||
$subtotale = -$subtotale / 100 * $rs_sconto[0]['sconto_globale'];
|
||||
|
||||
// Calcolo anche l'iva da scontare
|
||||
$rsi = $dbo->fetchArray('SELECT descrizione, percentuale FROM co_iva WHERE id='.prepare(get_var('Iva predefinita')));
|
||||
$iva = $subtotale / 100 * $rsi[0]['percentuale'];
|
||||
|
||||
$descrizione = 'SCONTO '.Translator::numberToLocale($rs_sconto[0]['sconto_globale']).'%';
|
||||
|
||||
$dbo->query('INSERT INTO co_righe_documenti(iddocumento, descrizione, idiva, desc_iva, iva, subtotale, sconto, qta, idgruppo, `order`) VALUES( '.prepare($id_record).', '.prepare($descrizione).', '.prepare($idiva).', '.prepare($rsi[0]['descrizione']).', '.prepare($iva).', '.prepare($subtotale).', 0, 1, (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))');
|
||||
}
|
||||
if (post('op') !== null && post('op') != 'update') {
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_documenti',
|
||||
'row' => 'co_righe_documenti',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'iddocumento',
|
||||
], $id_record);
|
||||
}
|
||||
|
@ -742,3 +742,56 @@ function rimuovi_articolo_dafattura($idarticolo, $iddocumento, $idrigadocumento)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function rimuovi_riga($iddocumento, $idriga)
|
||||
{
|
||||
}
|
||||
|
||||
function aggiorna_sconto($tables, $fields, $id_record, $options = [])
|
||||
{
|
||||
$dbo = Database::getConnection();
|
||||
|
||||
$descrizione = strtoupper(_('Sconto'));
|
||||
|
||||
// Rimozione dello sconto precedente
|
||||
$dbo->query('DELETE FROM '.$tables['row']." WHERE descrizione LIKE '%".$descrizione."%' AND ".$fields['row'].'='.prepare($id_record));
|
||||
|
||||
// Individuazione del nuovo sconto
|
||||
$sconto = $dbo->select($tables['parent'], ['sconto_globale', 'tipo_sconto_globale'], [$fields['parent'] => $id_record]);
|
||||
$sconto[0]['sconto_globale'] = floatval($sconto[0]['sconto_globale']);
|
||||
|
||||
// Aggiorno l'eventuale sconto gestendolo con le righe in fattura
|
||||
if (!empty($sconto[0]['sconto_globale'])) {
|
||||
if ($sconto[0]['tipo_sconto_globale'] == 'PRC') {
|
||||
$subtotale = $dbo->fetchArray('SELECT SUM('.$tables['row'].'.subtotale - '.$tables['row'].'.sconto) AS imponibile FROM '.$tables['row'].' WHERE '.$fields['row'].'='.prepare($id_record))[0]['imponibile'];
|
||||
$subtotale = -$subtotale / 100 * $sconto[0]['sconto_globale'];
|
||||
|
||||
$descrizione = $descrizione.' '.Translator::numberToLocale($sconto[0]['sconto_globale']).'%';
|
||||
} else {
|
||||
$subtotale = -$sconto[0]['sconto_globale'];
|
||||
}
|
||||
|
||||
// Calcolo dell'IVA da scontare
|
||||
$idiva = get_var('Iva predefinita');
|
||||
$rsi = $dbo->select('co_iva', ['descrizione', 'percentuale'], ['id' => $idiva]);
|
||||
$iva = $subtotale / 100 * $rsi[0]['percentuale'];
|
||||
|
||||
$values = [
|
||||
$fields['row'] => $id_record,
|
||||
'descrizione' => $descrizione,
|
||||
'subtotale' => $subtotale,
|
||||
'qta' => 1,
|
||||
'idiva' => $idiva,
|
||||
'desc_iva' => $rsi[0]['descrizione'],
|
||||
'iva' => $iva,
|
||||
'#order' => '(SELECT IFNULL(MAX(`order`) + 1, 0) FROM '.$tables['row'].' AS t WHERE '.$fields['row'].'='.prepare($id_record).')',
|
||||
];
|
||||
|
||||
// Opzione per disabilitare l'idgruppo (per preventivi)
|
||||
if (!isset($options['idgruppo']) || !empty($options['idgruppo'])) {
|
||||
$values['#idgruppo'] = '(SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM '.$tables['row'].' AS t WHERE '.$fields['row'].'='.prepare($id_record).')';
|
||||
}
|
||||
|
||||
$dbo->insert($tables['row'], $values);
|
||||
}
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
include $docroot.'/modules/articoli/modutil.php';
|
||||
include_once $docroot.'/modules/fatture/modutil.php';
|
||||
|
||||
$module = Modules::getModule($id_module);
|
||||
|
||||
@ -102,18 +103,13 @@ switch (post('op')) {
|
||||
' bollo=0, rivalsainps=0, ritenutaacconto=0 WHERE id='.prepare($id_record);
|
||||
|
||||
if ($dbo->query($query)) {
|
||||
$dbo->query("DELETE FROM or_righe_ordini WHERE descrizione LIKE '%SCONTO%' AND idordine=".prepare($id_record));
|
||||
|
||||
// Sconto unitario, quello percentuale viene gestito a fondo pagina
|
||||
if ($tipo_sconto == 'UNT' && $sconto > 0) {
|
||||
$subtotale = -$sconto;
|
||||
|
||||
// Calcolo anche l'iva da scontare
|
||||
$rsi = $dbo->fetchArray('SELECT descrizione, percentuale FROM co_iva WHERE id='.prepare(get_var('Iva predefinita')));
|
||||
$iva = $subtotale / 100 * $rsi[0]['percentuale'];
|
||||
|
||||
$dbo->query('INSERT INTO or_righe_ordini(idordine, descrizione, idiva, desc_iva, iva, subtotale, sconto, qta, idgruppo, `order`) VALUES( '.prepare($id_record).", 'SCONTO', ".prepare($idiva).', '.prepare($rsi[0]['descrizione']).', '.prepare($iva).', '.prepare($subtotale).', 0, 1, (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM or_righe_ordini AS t WHERE idordine='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM or_righe_ordini AS t WHERE idordine='.prepare($id_record).'))');
|
||||
}
|
||||
aggiorna_sconto([
|
||||
'parent' => 'or_ordini',
|
||||
'row' => 'or_righe_ordini',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idordine',
|
||||
], $id_record);
|
||||
|
||||
$query = 'SELECT descrizione FROM or_statiordine WHERE id='.prepare($idstatoordine);
|
||||
$rs = $dbo->fetchArray($query);
|
||||
@ -363,23 +359,12 @@ switch (post('op')) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (post('op') !== null) {
|
||||
$rs_sconto = $dbo->fetchArray('SELECT sconto_globale, tipo_sconto_globale FROM or_ordini WHERE id='.prepare($id_record));
|
||||
|
||||
// Aggiorno l'eventuale sconto gestendolo con le righe in fattura
|
||||
if ($rs_sconto[0]['tipo_sconto_globale'] == 'PRC' && !empty($rs_sconto[0]['sconto_globale'])) {
|
||||
// Se lo sconto c'è già lo elimino e lo ricalcolo
|
||||
$dbo->query("DELETE FROM or_righe_ordini WHERE descrizione LIKE '%SCONTO %' AND idordine=".prepare($id_record));
|
||||
|
||||
$subtotale = get_imponibile_ordine($id_record);
|
||||
$subtotale = -$subtotale / 100 * $rs_sconto[0]['sconto_globale'];
|
||||
|
||||
// Calcolo anche l'iva da scontare
|
||||
$rsi = $dbo->fetchArray('SELECT descrizione, percentuale FROM co_iva WHERE id='.prepare(get_var('Iva predefinita')));
|
||||
$iva = $subtotale / 100 * $rsi[0]['percentuale'];
|
||||
|
||||
$descrizione = 'SCONTO '.Translator::numberToLocale($rs_sconto[0]['sconto_globale']).'%';
|
||||
|
||||
$dbo->query('INSERT INTO or_righe_ordini(idordine, descrizione, idiva, desc_iva, iva, subtotale, sconto, qta, idgruppo, `order`) VALUES( '.prepare($id_record).', '.prepare($descrizione).', '.prepare($idiva).', '.prepare($rsi[0]['descrizione']).', '.prepare($iva).', '.prepare($subtotale).', 0, 1, (SELECT IFNULL(MAX(`idgruppo`) + 1, 0) FROM or_righe_ordini AS t WHERE idordine='.prepare($id_record).'), (SELECT IFNULL(MAX(`order`) + 1, 0) FROM or_righe_ordini AS t WHERE idordine='.prepare($id_record).'))');
|
||||
}
|
||||
if (post('op') !== null && post('op') != 'update') {
|
||||
aggiorna_sconto([
|
||||
'parent' => 'or_ordini',
|
||||
'row' => 'or_righe_ordini',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idordine',
|
||||
], $id_record);
|
||||
}
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
include_once __DIR__.'/../../core.php';
|
||||
|
||||
include_once $docroot.'/modules/fatture/modutil.php';
|
||||
|
||||
switch (post('op')) {
|
||||
case 'add':
|
||||
$idanagrafica = post('idanagrafica');
|
||||
@ -122,18 +124,13 @@ switch (post('op')) {
|
||||
' idiva='.prepare($idiva).' WHERE id='.prepare($id_record);
|
||||
$dbo->query($query);
|
||||
|
||||
$dbo->query("DELETE FROM co_righe_preventivi WHERE descrizione LIKE '%SCONTO%' AND idpreventivo=".prepare($id_record));
|
||||
|
||||
// Sconto unitario, quello percentuale viene gestito a fondo pagina
|
||||
if ($tipo_sconto == 'UNT' && $sconto > 0) {
|
||||
$subtotale = -$sconto;
|
||||
|
||||
// Calcolo anche l'iva da scontare
|
||||
$rsi = $dbo->fetchArray('SELECT descrizione, percentuale FROM co_iva WHERE id='.prepare(get_var('Iva predefinita')));
|
||||
$iva = $subtotale / 100 * $rsi[0]['percentuale'];
|
||||
|
||||
$dbo->query('INSERT INTO co_righe_preventivi(idpreventivo, descrizione, idiva, desc_iva, iva, subtotale, sconto, qta, `order`) VALUES( '.prepare($id_record).", 'SCONTO', ".prepare($idiva).', '.prepare($rsi[0]['descrizione']).', '.prepare($iva).', '.prepare($subtotale).', 0, 1, (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_preventivi AS t WHERE idpreventivo='.prepare($id_record).'))');
|
||||
}
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_preventivi',
|
||||
'row' => 'co_righe_preventivi',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idpreventivo',
|
||||
], $id_record, ['idgruppo' => false]);
|
||||
|
||||
// update_budget_preventivo( $id_record );
|
||||
$_SESSION['infos'][] = _('Preventivo modificato correttamente!');
|
||||
@ -279,23 +276,12 @@ switch (post('op')) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (post('op') !== null) {
|
||||
$rs_sconto = $dbo->fetchArray('SELECT sconto_globale, tipo_sconto_globale FROM co_preventivi WHERE id='.prepare($id_record));
|
||||
|
||||
// Aggiorno l'eventuale sconto gestendolo con le righe in fattura
|
||||
if ($rs_sconto[0]['tipo_sconto_globale'] == 'PRC' && !empty($rs_sconto[0]['sconto_globale'])) {
|
||||
// Se lo sconto c'è già lo elimino e lo ricalcolo
|
||||
$dbo->query("DELETE FROM co_righe_preventivi WHERE descrizione LIKE '%SCONTO %' AND idpreventivo=".prepare($id_record));
|
||||
|
||||
$subtotale = get_imponibile_preventivo($id_record);
|
||||
$subtotale = -$subtotale / 100 * $rs_sconto[0]['sconto_globale'];
|
||||
|
||||
// Calcolo anche l'iva da scontare
|
||||
$rsi = $dbo->fetchArray('SELECT descrizione, percentuale FROM co_iva WHERE id='.prepare(get_var('Iva predefinita')));
|
||||
$iva = $subtotale / 100 * $rsi[0]['percentuale'];
|
||||
|
||||
$descrizione = 'SCONTO '.Translator::numberToLocale($rs_sconto[0]['sconto_globale']).'%';
|
||||
|
||||
$dbo->query('INSERT INTO co_righe_preventivi(idpreventivo, descrizione, idiva, desc_iva, iva, subtotale, sconto, qta, `order`) VALUES( '.prepare($id_record).', '.prepare($descrizione).', '.prepare($idiva).', '.prepare($rsi[0]['descrizione']).', '.prepare($iva).', '.prepare($subtotale).', 0, 1, (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_preventivi AS t WHERE idpreventivo='.prepare($id_record).'))');
|
||||
}
|
||||
if (post('op') !== null && post('op') != 'update') {
|
||||
aggiorna_sconto([
|
||||
'parent' => 'co_preventivi',
|
||||
'row' => 'co_righe_preventivi',
|
||||
], [
|
||||
'parent' => 'id',
|
||||
'row' => 'idpreventivo',
|
||||
], $id_record, ['idgruppo' => false]);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user