mirror of
https://github.com/devcode-it/openstamanager.git
synced 2024-12-28 16:50:06 +01:00
48cff7f7fd
Miglioramento del sistema di conversione automatica dei formati dell'input. Aggiunta condizione di fallback per i tag personalizzati, per cui se il contenuto non viene renderizzato viene mostrato il codice responsabile del "malfunzionamento" (per rendere più semplice l'individuazione del problema).
299 lines
17 KiB
PHP
299 lines
17 KiB
PHP
<?php
|
|
|
|
include_once __DIR__.'/../../core.php';
|
|
|
|
include_once $docroot.'/modules/fatture/modutil.php';
|
|
|
|
switch (post('op')) {
|
|
case 'add':
|
|
$all_ok = true;
|
|
$iddocumento = post('iddocumento');
|
|
$data = $post['data'];
|
|
$idmastrino = get_new_idmastrino();
|
|
$descrizione = post('descrizione');
|
|
|
|
// Lettura info fattura
|
|
$query = 'SELECT *, co_documenti.note, co_documenti.idpagamento, co_documenti.id AS iddocumento, co_statidocumento.descrizione AS `stato`, co_tipidocumento.descrizione AS `descrizione_tipodoc` FROM ((co_documenti LEFT OUTER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id) INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id='.prepare($iddocumento);
|
|
$rs = $dbo->fetchArray($query);
|
|
$ragione_sociale = $rs[0]['ragione_sociale'];
|
|
$data_documento = $rs[0]['data'];
|
|
$totale = 0;
|
|
$totale_pagato = 0;
|
|
|
|
for ($i = 0; $i < sizeof($post['idconto']); ++$i) {
|
|
$idconto = post('idconto')[$i];
|
|
$dare = $post['dare'][$i];
|
|
$avere = $post['avere'][$i];
|
|
|
|
if (!empty($dare) || !empty($avere)) {
|
|
if (!empty($avere)) {
|
|
$totale = -$avere;
|
|
} else {
|
|
$totale = $dare;
|
|
|
|
$totale_pagato += $totale;
|
|
}
|
|
|
|
$query = 'INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($data_documento).', '.prepare($iddocumento).', '.prepare($descrizione).', '.prepare($idconto).', '.prepare($totale).", '1')";
|
|
if (!$dbo->query($query)) {
|
|
$all_ok = false;
|
|
} else {
|
|
$all_ok = true;
|
|
$id_record = $dbo->lastInsertedID();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Inserisco nello scadenziario il totale pagato
|
|
if ($totale_pagato != 0) {
|
|
aggiorna_scadenziario($iddocumento, abs($totale_pagato), $data);
|
|
}
|
|
|
|
// Se non va a buon fine qualcosa elimino il mastrino per non lasciare incongruenze nel db
|
|
if (!$all_ok) {
|
|
$_SESSION['errors'][] = tr("Errore durante l'aggiunta del movimento!");
|
|
$dbo->query('DELETE FROM co_movimenti WHERE idmastrino='.prepare($idmastrino));
|
|
} else {
|
|
$_SESSION['infos'][] = tr('Movimento aggiunto in prima nota!');
|
|
|
|
// Verifico se la fattura è stata pagata tutta, così imposto lo stato a "Pagato"
|
|
$query = 'SELECT SUM(pagato) AS tot_pagato, SUM(da_pagare) AS tot_da_pagare FROM co_scadenziario GROUP BY iddocumento HAVING iddocumento='.prepare($iddocumento);
|
|
$rs = $dbo->fetchArray($query);
|
|
|
|
// Aggiorno lo stato della fattura
|
|
if ($rs[0]['tot_pagato'] == $rs[0]['tot_da_pagare']) {
|
|
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Pagato') WHERE id=".prepare($iddocumento));
|
|
} else {
|
|
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Parzialmente pagato') WHERE id=".prepare($iddocumento));
|
|
}
|
|
|
|
// Aggiorno lo stato dei preventivi collegati alla fattura se ce ne sono
|
|
$query2 = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND NOT idpreventivo=0 AND idpreventivo IS NOT NULL';
|
|
$rs2 = $dbo->fetchArray($query2);
|
|
|
|
for ($j = 0; $j < sizeof($rs2); ++$j) {
|
|
$dbo->query("UPDATE co_preventivi SET idstato=(SELECT id FROM co_statipreventivi WHERE descrizione='Pagato') WHERE id=".prepare($rs2[$j]['idpreventivo']));
|
|
}
|
|
|
|
// Aggiorno lo stato dei contratti collegati alla fattura se ce ne sono
|
|
$query2 = 'SELECT idcontratto FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND NOT idcontratto=0 AND idcontratto IS NOT NULL';
|
|
$rs2 = $dbo->fetchArray($query2);
|
|
for ($j = 0; $j < sizeof($rs2); ++$j) {
|
|
$dbo->query("UPDATE co_contratti SET idstato=(SELECT id FROM co_staticontratti WHERE descrizione='Pagato') WHERE id=".prepare($rs2[$j]['idcontratto']));
|
|
}
|
|
|
|
// Aggiorno lo stato degli interventi collegati alla fattura se ce ne sono
|
|
$query2 = 'SELECT idintervento FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND idintervento IS NOT NULL';
|
|
$rs2 = $dbo->fetchArray($query2);
|
|
|
|
for ($j = 0; $j < sizeof($rs2); ++$j) {
|
|
$dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Fatturato') WHERE id IN (SELECT idintervento FROM co_preventivi_interventi WHERE idpreventivo=".prepare($rs2[$j]['idpreventivo']).')');
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'editriga':
|
|
$all_ok = true;
|
|
$iddocumento = post('iddocumento');
|
|
$data = $post['data'];
|
|
$idmastrino = post('idmastrino');
|
|
$descrizione = post('descrizione');
|
|
|
|
// Leggo il totale di questo mastrino
|
|
$query = 'SELECT totale FROM co_movimenti WHERE idmastrino='.prepare($idmastrino).' AND primanota=1 AND totale>0';
|
|
$rs = $dbo->fetchArray($query);
|
|
$tot_mastrino = 0.00;
|
|
|
|
for ($i = 0; $i < sizeof($rs); ++$i) {
|
|
$tot_mastrino += abs($rs[0]['totale']);
|
|
}
|
|
|
|
// Eliminazione prima nota
|
|
$dbo->query('DELETE FROM co_movimenti WHERE idmastrino='.prepare($idmastrino).' AND primanota=1');
|
|
|
|
// Lettura info fattura
|
|
$query = 'SELECT *, co_documenti.note, co_documenti.idpagamento, co_documenti.id AS iddocumento, co_statidocumento.descrizione AS `stato`, co_tipidocumento.descrizione AS `descrizione_tipodoc` FROM ((co_documenti LEFT OUTER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id) INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica) INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id='.prepare($iddocumento);
|
|
$rs = $dbo->fetchArray($query);
|
|
$ragione_sociale = $rs[0]['ragione_sociale'];
|
|
$dir = $rs[0]['dir'];
|
|
|
|
for ($i = 0; $i < sizeof($post['idconto']); ++$i) {
|
|
$idconto = post('idconto')[$i];
|
|
$dare = $post['dare'][$i];
|
|
$avere = $post['avere'][$i];
|
|
|
|
if ($dare != '' && $dare != 0) {
|
|
$totale = $dare;
|
|
} elseif ($avere != '' && $avere != 0) {
|
|
$totale = -$avere;
|
|
} else {
|
|
$totale = 0;
|
|
}
|
|
|
|
if ($totale != 0) {
|
|
$query = 'INSERT INTO co_movimenti(idmastrino, data, iddocumento, descrizione, idconto, totale, primanota) VALUES('.prepare($idmastrino).', '.prepare($data).', '.prepare($iddocumento).', '.prepare($descrizione).', '.prepare($idconto).', '.prepare($totale).", '1')";
|
|
|
|
if (!$dbo->query($query)) {
|
|
$all_ok = false;
|
|
} else {
|
|
$id_record = $dbo->lastInsertedID();
|
|
/*
|
|
Devo azzerare il totale pagato nello scadenziario perché verrà ricalcolato.
|
|
Se c'erano delle rate già pagate ne devo tener conto per rigenerare il totale pagato
|
|
*/
|
|
// Tengo conto dei valori negativi per gli acquisti e dei valori positivi per le vendite
|
|
if (($dir == 'uscita' && $totale < 0) || ($dir == 'entrata' && $totale > 0)) {
|
|
// Azzero lo scadenziario e lo ricalcolo
|
|
$dbo->query("UPDATE co_scadenziario SET pagato=0, data_pagamento='0000-00-00' WHERE iddocumento=".prepare($iddocumento));
|
|
|
|
// Ricalcolo lo scadenziario per il solo nuovo importo
|
|
aggiorna_scadenziario($iddocumento, $totale, $data);
|
|
|
|
// Se il totale pagato non è il totale da pagare rimetto la fattura in stato "Emessa"
|
|
$query2 = 'SELECT SUM(pagato) AS tot_pagato, SUM(da_pagare) AS tot_da_pagare FROM co_scadenziario WHERE iddocumento='.prepare($iddocumento);
|
|
$rs2 = $dbo->fetchArray($query2);
|
|
|
|
// Aggiorno lo stato della fattura a "Emessa"
|
|
if (abs($rs2[0]['tot_pagato']) < abs($rs2[0]['tot_da_pagare'])) {
|
|
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Emessa') WHERE id=".prepare($iddocumento));
|
|
|
|
// Aggiorno lo stato dei preventivi collegati alla fattura se ce ne sono
|
|
$query3 = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND NOT idpreventivo=0 AND idpreventivo IS NOT NULL';
|
|
$rs3 = $dbo->fetchArray($query3);
|
|
|
|
for ($j = 0; $j < sizeof($rs3); ++$j) {
|
|
$dbo->query("UPDATE co_preventivi SET idstato=(SELECT id FROM co_statipreventivi WHERE descrizione='In attesa di pagamento') WHERE id=".prepare($rs3[$j]['idpreventivo']));
|
|
|
|
// Aggiorno anche lo stato degli interventi collegati ai preventivi
|
|
$dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Completato') WHERE id IN(SELECT idintervento FROM co_preventivi_interventi WHERE idpreventivo=".prepare($rs3[$j]['idpreventivo']).')');
|
|
}
|
|
|
|
// Aggiorno lo stato degli interventi collegati alla fattura se ce ne sono
|
|
$query3 = 'SELECT idintervento FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND idintervento IS NOT NULL';
|
|
$rs3 = $dbo->fetchArray($query3);
|
|
|
|
for ($j = 0; $j < sizeof($rs3); ++$j) {
|
|
$dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Fatturato') WHERE id=".prepare($rs3[$j]['idintervento']));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Se non va a buon fine qualcosa elimino il mastrino per non lasciare incongruenze nel db
|
|
if (!$all_ok) {
|
|
$_SESSION['errors'][] = tr("Errore durante l'aggiunta del movimento!");
|
|
$dbo->query('DELETE FROM co_movimenti WHERE idmastrino='.prepare($idmastrino));
|
|
} else {
|
|
$_SESSION['infos'][] = tr('Movimento modificato in prima nota!');
|
|
|
|
// Verifico se la fattura è stata pagata, così imposto lo stato a "Pagato"
|
|
$query = 'SELECT SUM(pagato) AS tot_pagato, SUM(da_pagare) AS tot_da_pagare FROM co_scadenziario GROUP BY iddocumento HAVING iddocumento='.prepare($iddocumento);
|
|
$rs = $dbo->fetchArray($query);
|
|
|
|
// Aggiorno lo stato della fattura
|
|
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Pagato') WHERE id=".prepare($iddocumento));
|
|
|
|
// Aggiorno lo stato dei preventivi collegati alla fattura se ce ne sono
|
|
$query2 = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND NOT idpreventivo=0 AND idpreventivo IS NOT NULL';
|
|
$rs2 = $dbo->fetchArray($query2);
|
|
|
|
for ($j = 0; $j < sizeof($rs2); ++$j) {
|
|
$dbo->query("UPDATE co_preventivi SET idstato=(SELECT id FROM co_statipreventivi WHERE descrizione='Pagato') WHERE id=".prepare($rs2[$j]['idpreventivo']));
|
|
|
|
// Aggiorno anche lo stato degli interventi collegati ai preventivi
|
|
$dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Fatturato') WHERE id IN (SELECT idintervento FROM co_preventivi_interventi WHERE idpreventivo=".prepare($rs2[$j]['idpreventivo']).')');
|
|
}
|
|
|
|
// Aggiorno lo stato degli interventi collegati alla fattura se ce ne sono
|
|
$query2 = 'SELECT idintervento FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND idintervento IS NOT NULL';
|
|
$rs2 = $dbo->fetchArray($query2);
|
|
|
|
for ($j = 0; $j < sizeof($rs2); ++$j) {
|
|
$dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Fatturato') WHERE id IN (SELECT idintervento FROM co_preventivi_interventi WHERE idpreventivo=".prepare($rs2[$j]['idpreventivo']).')');
|
|
}
|
|
}
|
|
break;
|
|
|
|
// eliminazione movimento prima nota
|
|
case 'delete':
|
|
$idmastrino = post('idmastrino');
|
|
|
|
if ($idmastrino != '') {
|
|
// Leggo l'id della fattura per azzerare i valori di preventivi e interventi collegati
|
|
$query = 'SELECT iddocumento FROM co_movimenti WHERE idmastrino='.prepare($idmastrino).' AND primanota=1';
|
|
$rs = $dbo->fetchArray($query);
|
|
$iddocumento = $rs[0]['iddocumento'];
|
|
|
|
// Leggo il totale dal mastrino e lo rimuovo dal totale pagato dello scadenziario, ciclando tra le rate
|
|
$query = 'SELECT totale FROM co_movimenti WHERE idmastrino='.prepare($idmastrino).' AND primanota=1 AND totale>0';
|
|
$rs = $dbo->fetchArray($query);
|
|
$totale_mastrino = 0.00;
|
|
|
|
for ($i = 0; $i < sizeof($rs); ++$i) {
|
|
$totale_mastrino += $rs[0]['totale'];
|
|
}
|
|
|
|
$rimanente = $totale_mastrino;
|
|
|
|
$query = 'SELECT * FROM co_scadenziario WHERE iddocumento='.prepare($iddocumento).' ORDER BY scadenza DESC';
|
|
$rs = $dbo->fetchArray($query);
|
|
|
|
for ($i = 0; $i < sizeof($rs); ++$i) {
|
|
if (abs($rimanente) > 0) {
|
|
if (abs($rs[$i]['da_pagare']) >= abs($rimanente)) {
|
|
$query2 = 'SELECT pagato FROM co_scadenziario WHERE id='.prepare($rs[$i]['id']);
|
|
$rs2 = $dbo->fetchArray($query2);
|
|
$pagato = $rs2[0]['pagato'];
|
|
($pagato < 0) ? $sign = -1 : $sign = 1;
|
|
$new_value = ((abs($pagato) - abs($rimanente)) * $sign);
|
|
|
|
// Se resta ancora un po' di pagato cambio solo l'importo...
|
|
if ($new_value > 0) {
|
|
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare($new_value).' WHERE id='.prepare($rs[$i]['id']));
|
|
}
|
|
|
|
// ...se l'importo è a zero, azzero anche la data di pagamento
|
|
else {
|
|
$dbo->query('UPDATE co_scadenziario SET pagato='.prepare($new_value).", data_pagamento='0000-00-00' WHERE id=".prepare($rs[$i]['id']));
|
|
}
|
|
|
|
$rimanente = 0;
|
|
} else {
|
|
$dbo->query("UPDATE co_scadenziario SET pagato='0' WHERE id=".prepare($rs[$i]['id']));
|
|
$rimanente -= abs($rs[$i]['da_pagare']);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Eliminazione prima nota
|
|
$dbo->query('DELETE FROM co_movimenti WHERE idmastrino='.prepare($idmastrino).' AND primanota=1');
|
|
|
|
// Aggiorno lo stato della fattura a "Emessa"
|
|
$dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Emessa') WHERE id=".prepare($iddocumento));
|
|
|
|
// Aggiorno lo stato dei preventivi collegati alla fattura se ce ne sono
|
|
$query = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND NOT idpreventivo=0 AND idpreventivo IS NOT NULL';
|
|
$rs = $dbo->fetchArray($query);
|
|
|
|
for ($i = 0; $i < sizeof($rs); ++$i) {
|
|
$dbo->query("UPDATE co_preventivi SET idstato=(SELECT id FROM co_statipreventivi WHERE descrizione='In attesa di pagamento') WHERE id=".prepare($rs[$i]['idpreventivo']));
|
|
|
|
// Aggiorno anche lo stato degli interventi collegati ai preventivi
|
|
$dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Completato') WHERE idpreventivo=".prepare($rs[$i]['idpreventivo']));
|
|
}
|
|
|
|
// Aggiorno lo stato degli interventi collegati alla fattura se ce ne sono
|
|
$query = 'SELECT idintervento FROM co_righe_documenti WHERE iddocumento='.prepare($iddocumento).' AND NOT idintervento IS NOT NULL';
|
|
$rs = $dbo->fetchArray($query);
|
|
|
|
for ($i = 0; $i < sizeof($rs); ++$i) {
|
|
$dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Fatturato') WHERE id=".prepare($rs[$i]['idintervento']));
|
|
}
|
|
|
|
$_SESSION['infos'][] = tr('Movimento eliminato!');
|
|
}
|
|
break;
|
|
}
|