From 1e495d76d81fa7a8da25ca53ca623383ae3796fd Mon Sep 17 00:00:00 2001 From: Matteo Baccarin Date: Fri, 12 Apr 2019 09:20:23 +0200 Subject: [PATCH] Bulk movimento contabile fatture --- modules/fatture/bulk.php | 122 +++++++++++++++++++++++++++++++++- modules/primanota/actions.php | 62 +++++++++-------- modules/primanota/edit.php | 52 ++++++++++++--- 3 files changed, 196 insertions(+), 40 deletions(-) diff --git a/modules/fatture/bulk.php b/modules/fatture/bulk.php index 31edf7f0a..a49d43b51 100644 --- a/modules/fatture/bulk.php +++ b/modules/fatture/bulk.php @@ -79,7 +79,7 @@ switch (post('op')) { } // Selezione delle fatture da stampare - $fatture = $dbo->fetchArray('SELECT co_documenti.id, numero_esterno, data, ragione_sociale, co_tipidocumento.descrizione, co_tipidocumento.dir FROM co_documenti 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 IN('.implode(',', $id_records).')'); + $fatture = $dbo->fetchArray('SELECT co_documenti.id, numero_esterno, data, ragione_sociale, co_tipidocumento.descrizione, co_tipidocumento.dir FROM co_documenti INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id INNER JOIN co_statidocumento ON co_documenti.idstatodocumento=co_statidocumento.id WHERE co_documenti.id IN('.implode(',', $id_records).') AND co_statidocumento.descrizione="Emessa"'); $failed = []; if (!empty($fatture)) { @@ -141,6 +141,124 @@ switch (post('op')) { break; case 'registra-contabile': + //Generazione della descrizione del movimento + $rs_fatture = $dbo->fetchArray("SELECT *, co_documenti.id AS id, co_documenti.data AS data_doc FROM co_documenti INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento=co_tipidocumento.id WHERE co_documenti.id IN(".implode(',', $id_records).")"); + + //calcolo della descrizione + $descrizione_movimento = 'Pag. fatture num. '; + + for($i=0;$ifetchArray('SELECT '.$field.' FROM co_pagamenti WHERE id = (SELECT idpagamento FROM co_documenti WHERE id='.prepare($rs_fatture[$i]['id']).') GROUP BY descrizione')[0][$field]; + + // Lettura conto di default + $idconto_aziendale = !empty($idconto_aziendale) ? $idconto_aziendale : setting('Conto aziendale predefinito'); + + $query = 'SELECT SUM(ABS(da_pagare-pagato)) AS rata FROM co_scadenziario WHERE iddocumento='.prepare($rs_fatture[$i]['id'])." GROUP BY iddocumento"; + $rs = $dbo->fetchArray($query); + $totale_pagato = $rs[0]['rata']; + + $importo_conto_aziendale = $totale_pagato; + + // conto crediti clienti + if ($dir == 'entrata') { + // Se è la prima nota di una fattura leggo il conto del cliente + if ($rs_fatture[$i]['id'] != '') { + $query = 'SELECT idconto_cliente FROM an_anagrafiche INNER JOIN co_documenti ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica WHERE co_documenti.id='.prepare($rs_fatture[$i]['id']); + $rs = $dbo->fetchArray($query); + $idconto_controparte = $rs[0]['idconto_cliente']; + } else { + $query = "SELECT id FROM co_pianodeiconti3 WHERE descrizione='Riepilogativo clienti'"; + $rs = $dbo->fetchArray($query); + $idconto_controparte = $rs[0]['id']; + } + } + // conto debiti fornitori + else { + // Se è la prima nota di una fattura leggo il conto del fornitore + if ($rs_fatture[$i]['id'] != '') { + $query = 'SELECT idconto_fornitore FROM an_anagrafiche INNER JOIN co_documenti ON an_anagrafiche.idanagrafica=co_documenti.idanagrafica WHERE co_documenti.id='.prepare($rs_fatture[$i]['id']); + $rs = $dbo->fetchArray($query); + $idconto_controparte = $rs[0]['idconto_fornitore']; + } else { + $query = "SELECT id FROM co_pianodeiconti3 WHERE descrizione='Riepilogativo fornitori'"; + $rs = $dbo->fetchArray($query); + $idconto_controparte = $rs[0]['id']; + } + } + + // Lettura causale movimento (documento e ragione sociale) + $importo_conto_controparte = $importo_conto_aziendale; + + if ($dir == 'entrata') { + $dbo->query("INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES(".prepare($idmastrino).", NOW(), ".prepare($rs_fatture[$i]['data_doc']).", ".prepare($rs_fatture[$i]['id']).", ".prepare($rs_fatture[$i]['idanagrafica']).", ".prepare($descrizione_movimento).", ".prepare($idconto_controparte).", ".prepare(-$importo_conto_controparte).", 1)"); + $dbo->query("INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES(".prepare($idmastrino).", NOW(), ".prepare($rs_fatture[$i]['data_doc']).", ".prepare($rs_fatture[$i]['id']).", ".prepare($rs_fatture[$i]['idanagrafica']).", ".prepare($descrizione_movimento).", ".prepare($idconto_aziendale).", ".prepare($importo_conto_aziendale).", 1)"); + + } else { + $dbo->query("INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES(".prepare($idmastrino).", NOW(), ".prepare($rs_fatture[$i]['data_doc']).", ".prepare($rs_fatture[$i]['id']).", ".prepare($rs_fatture[$i]['idanagrafica']).", ".prepare($descrizione_movimento).", ".prepare($idconto_controparte).", ".prepare($importo_conto_controparte).", 1)"); + $dbo->query("INSERT INTO co_movimenti(idmastrino, data, data_documento, iddocumento, idanagrafica, descrizione, idconto, totale, primanota) VALUES(".prepare($idmastrino).", NOW(), ".prepare($rs_fatture[$i]['data_doc']).", ".prepare($rs_fatture[$i]['id']).", ".prepare($rs_fatture[$i]['idanagrafica']).", ".prepare($descrizione_movimento).", ".prepare($idconto_aziendale).", ".prepare(-$importo_conto_aziendale).", 1)"); + } + + aggiorna_scadenziario($rs_fatture[$i]['id'], abs($totale_pagato), date('d/m/Y')); + + // 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($rs_fatture[$i]['id']); + $rs = $dbo->fetchArray($query); + + // Aggiorno lo stato della fattura + if (abs($rs[0]['tot_pagato']) == abs($rs[0]['tot_da_pagare'])) { + $dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Pagato') WHERE id=".prepare($rs_fatture[$i]['id'])); + } elseif (abs($rs[0]['tot_pagato']) != abs($rs[0]['tot_da_pagare']) && abs($rs[0]['tot_pagato']) != '0') { + $dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Parzialmente pagato') WHERE id=".prepare($rs_fatture[$i]['id'])); + } else { + $dbo->query("UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='Emessa') WHERE id=".prepare($rs_fatture[$i]['id'])); + } + + // Aggiorno lo stato dei preventivi collegati alla fattura se ce ne sono + $query2 = 'SELECT idpreventivo FROM co_righe_documenti WHERE iddocumento='.prepare($rs_fatture[$i]['id']).' 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($rs_fatture[$i]['id']).' 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($rs_fatture[$i]['id']).' 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_preventivo=".prepare($rs2[$j]['idpreventivo'])); + } + } + + $database->commitTransaction(); + header('location:'.$rootdir.'/editor.php?id_module='.Modules::get('Prima nota')['id'].'&id_record='.$idmastrino); + exit; break; } @@ -152,7 +270,7 @@ $bulk = [ $bulk['registra-contabile'] = [ 'text' => tr('Registra contabile pagamento'), 'data' => [ - 'msg' => tr('Vuoi aggiungere un movimento contabile per le fatture selezionate?'), + 'msg' => tr('Vuoi aggiungere un movimento contabile per le fatture selezionate? (le fatture dovranno essere in stato emessa altrimenti non verranno elaborate)'), 'button' => tr('Procedi'), 'class' => 'btn btn-lg btn-warning', 'blank' => true, diff --git a/modules/primanota/actions.php b/modules/primanota/actions.php index 097a4c8eb..9f3b9d7c6 100644 --- a/modules/primanota/actions.php +++ b/modules/primanota/actions.php @@ -133,13 +133,15 @@ switch (post('op')) { // 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) { + $iddocumento = post('iddocumento')[$i]; + + // 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']; + $idconto = post('idconto')[$i]; $dare = post('dare')[$i]; $avere = post('avere')[$i]; @@ -210,36 +212,38 @@ switch (post('op')) { } else { flash()->info(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); + foreach(post('iddocumento') as $iddocumento){ + // 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 - if ($rs[0]['tot_pagato'] == $rs[0]['tot_da_pagare']) { - $stato = 'Pagato'; - } else { - $stato = 'Parzialmente pagato'; - } + // Aggiorno lo stato della fattura + if ($rs[0]['tot_pagato'] == $rs[0]['tot_da_pagare']) { + $stato = 'Pagato'; + } else { + $stato = 'Parzialmente pagato'; + } - $dbo->query('UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='.prepare($stato).') WHERE id='.prepare($iddocumento)); + $dbo->query('UPDATE co_documenti SET idstatodocumento=(SELECT id FROM co_statidocumento WHERE descrizione='.prepare($stato).') 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); + // 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'])); + 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_preventivo=".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_preventivo=".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); + // 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_preventivo=".prepare($rs2[$j]['idpreventivo'])); + for ($j = 0; $j < sizeof($rs2); ++$j) { + $dbo->query("UPDATE in_interventi SET idstatointervento=(SELECT idstatointervento FROM in_statiintervento WHERE descrizione='Fatturato') WHERE id_preventivo=".prepare($rs2[$j]['idpreventivo'])); + } } } break; diff --git a/modules/primanota/edit.php b/modules/primanota/edit.php index 809cc91e7..de0338db1 100644 --- a/modules/primanota/edit.php +++ b/modules/primanota/edit.php @@ -12,14 +12,41 @@ include_once __DIR__.'/../../core.php';
fetchArray('SELECT dir FROM co_tipidocumento INNER JOIN co_documenti ON co_tipidocumento.id=co_documenti.idtipodocumento WHERE co_documenti.id='.prepare($record['iddocumento'])); - $modulo = ($rs[0]['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; ?> -
+ + $rs_doc = $dbo->fetchArray("SELECT DISTINCT iddocumento, (SELECT IFNULL(numero_esterno, numero) FROM co_documenti WHERE id=co_movimenti.iddocumento) AS numero FROM co_movimenti WHERE idmastrino=".prepare($record['idmastrino'])); + + if(sizeof($rs_doc)==1){ + + if (!empty($record['iddocumento'])) { + $rs = $dbo->fetchArray('SELECT dir FROM co_tipidocumento INNER JOIN co_documenti ON co_tipidocumento.id=co_documenti.idtipodocumento WHERE co_documenti.id='.prepare($record['iddocumento'])); + $modulo = ($rs[0]['dir'] == 'entrata') ? 'Fatture di vendita' : 'Fatture di acquisto'; ?> +

- -
+ +
+
+
+ +
+ @@ -56,7 +83,7 @@ include_once __DIR__.'/../../core.php'; Form di modifica riga movimento */ // Lettura movimenti del mastrino selezionato - $query = 'SELECT * FROM co_movimenti WHERE idmastrino='.prepare($record['idmastrino']).' AND iddocumento='.prepare($record['iddocumento']).' AND primanota='.prepare($record['primanota']); + $query = 'SELECT * FROM co_movimenti WHERE idmastrino='.prepare($record['idmastrino']).' AND primanota='.prepare($record['primanota']); $rs = $dbo->fetchArray($query); $n = sizeof($rs); $iddocumento = $rs[0]['iddocumento']; @@ -68,14 +95,21 @@ include_once __DIR__.'/../../core.php'; '.tr('Dare').' '.tr('Avere').' '; + + if(sizeof($rs)>=10){ + $rows = sizeof($rs)+2; + }else{ + $rows = 10; + } - for ($i = 0; $i < 10; ++$i) { + for ($i = 0; $i < $rows; ++$i) { ($i <= 1) ? $required = 1 : $required = 0; // Conto echo ' - + + {[ "type": "select", "name": "idconto['.$i.']", "value": "'.$rs[$i]['idconto'].'", "ajax-source": "conti", "required": "'.$required.'" ]} ';