From d727c70e14a43f71e547404435017c9005900ab6 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Thu, 27 Feb 2020 16:19:07 +0100 Subject: [PATCH] Fix duplicazione fattura --- include/common/articolo.php | 4 +- modules/fatture/actions.php | 69 +++++++++---------- modules/fatture/bulk.php | 25 +++---- modules/fatture/src/Components/Articolo.php | 5 -- modules/partitario/actions.php | 3 +- modules/partitario/edit.php | 5 +- .../pianificazione_fatturazione/actions.php | 2 +- plugins/pianificazione_fatturazione/edit.php | 7 +- 8 files changed, 54 insertions(+), 66 deletions(-) diff --git a/include/common/articolo.php b/include/common/articolo.php index 90fe7cd08..c6765d864 100755 --- a/include/common/articolo.php +++ b/include/common/articolo.php @@ -84,13 +84,13 @@ $(document).ready(function () { $("#descrizione_riga").val($data.descrizione);'; -if ($options['dir']=='entrata'){ +if ($options['dir'] == 'entrata') { echo ' if( $data.idiva_vendita ){ $("#idiva").selectSetNew($data.idiva_vendita, $data.iva_vendita); }'; } - + echo ' if(id_conto) { $("#idconto").selectSetNew(id_conto, $data.idconto_'.($options['dir'] == 'entrata' ? 'vendita' : 'acquisto').'_title); diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 294e526ba..40a98968f 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -205,44 +205,41 @@ switch (post('op')) { // Duplicazione fattura case 'copy': - if ($id_record) { - // Duplicazione righe - $righe = $dbo->fetchArray('SELECT * FROM co_righe_documenti WHERE iddocumento='.prepare($id_record)); + $stato = Stato::where('descrizione', 'Bozza')->first(); - // Lettura dati fattura attuale - $rs = $dbo->fetchArray('SELECT * FROM co_documenti WHERE id='.prepare($id_record)); - - $id_segment = $rs[0]['id_segment']; - - // Calcolo prossimo numero fattura - $numero = get_new_numerofattura(date('Y-m-d')); - - if ($dir == 'entrata') { - $numero_esterno = get_new_numerosecondariofattura(date('Y-m-d')); - } else { - $numero_esterno = ''; - } - - // Duplicazione intestazione - $dbo->query('INSERT INTO co_documenti(numero, numero_esterno, data, idanagrafica, idcausalet, idspedizione, idporto, idaspettobeni, idvettore, n_colli, idsede_partenza, idsede_destinazione, idtipodocumento, idstatodocumento, idpagamento, idconto, idrivalsainps, idritenutaacconto, rivalsainps, iva_rivalsainps, ritenutaacconto, bollo, note, note_aggiuntive, buono_ordine, id_segment) VALUES('.prepare($numero).', '.prepare($numero_esterno).', NOW(), '.prepare($rs[0]['idanagrafica']).', '.prepare($rs[0]['idcausalet']).', '.prepare($rs[0]['idspedizione']).', '.prepare($rs[0]['idporto']).', '.prepare($rs[0]['idaspettobeni']).', '.prepare($rs[0]['idvettore']).', '.prepare($rs[0]['n_colli']).', '.prepare($rs[0]['idsede_partenza']).', '.prepare($rs[0]['idsede_destinazione']).', '.prepare($rs[0]['idtipodocumento']).', (SELECT id FROM co_statidocumento WHERE descrizione=\'Bozza\'), '.prepare($rs[0]['idpagamento']).', '.prepare($rs[0]['idconto']).', '.prepare($rs[0]['idrivalsainps']).', '.prepare($rs[0]['idritenutaacconto']).', '.prepare($rs[0]['rivalsainps']).', '.prepare($rs[0]['iva_rivalsainps']).', '.prepare($rs[0]['ritenutaacconto']).', '.prepare($rs[0]['bollo']).', '.prepare($rs[0]['note']).', '.prepare($rs[0]['note_aggiuntive']).', '.prepare($rs[0]['buono_ordine']).', '.prepare($rs[0]['id_segment']).')'); - $id_record = $dbo->lastInsertedID(); - - // TODO: sistemare la duplicazione delle righe generiche e degli articoli, ignorando interventi, ddt, ordini, preventivi - foreach ($righe as $riga) { - // Scarico/carico nuovamente l'articolo da magazzino - if (!empty($riga['idarticolo'])) { - add_articolo_infattura($id_record, $riga['idarticolo'], $riga['descrizione'], $riga['idiva'], $riga['qta'], $riga['subtotale'], $riga['sconto'], $riga['sconto_unitario'], $riga['tipo_sconto'], $riga['idintervento'], $riga['idconto'], $riga['um']); - } else { - $dbo->query('INSERT INTO co_righe_documenti(iddocumento, idordine, idddt, idintervento, idarticolo, idpreventivo, idcontratto, is_descrizione, idtecnico, idagente, idconto, idiva, desc_iva, iva, iva_indetraibile, descrizione, subtotale, sconto, sconto_unitario, tipo_sconto, idritenutaacconto, ritenutaacconto, idrivalsainps, rivalsainps, um, qta, `order`) VALUES('.prepare($id_record).', 0, 0, 0, '.prepare($riga['idarticolo']).', '.prepare($riga['idpreventivo']).', '.prepare($riga['idcontratto']).', '.prepare($riga['is_descrizione']).', '.prepare($riga['idtecnico']).', '.prepare($riga['idagente']).', '.prepare($riga['idconto']).', '.prepare($riga['idiva']).', '.prepare($riga['desc_iva']).', '.prepare($riga['iva']).', '.prepare($riga['iva_indetraibile']).', '.prepare($riga['descrizione']).', '.prepare($riga['subtotale']).', '.prepare($riga['sconto']).', '.prepare($riga['sconto_unitario']).', '.prepare($riga['tipo_sconto']).', '.prepare($riga['idritenutaacconto']).', '.prepare($riga['ritenutaacconto']).', '.prepare($riga['idrivalsainps']).', '.prepare($riga['rivalsainps']).', '.prepare($riga['um']).', '.prepare($riga['qta']).', (SELECT IFNULL(MAX(`order`) + 1, 0) FROM co_righe_documenti AS t WHERE iddocumento='.prepare($id_record).'))'); - } - } - - // Ricalcolo inps, ritenuta e bollo (se la fattura non è stata pagata) - ricalcola_costiagg_fattura($id_record); - aggiorna_sedi_movimenti('documenti', $id_record); - - flash()->info(tr('Fattura duplicata correttamente!')); + $new = $fattura->replicate(); + $new->numero = Fattura::getNextNumero($new->data, $new->direzione, $new->id_segment); + if ($new->direzione == 'entrata') { + $new->numero_esterno = Fattura::getNextNumeroSecondario($new->data, $new->direzione, $new->id_segment); } + $new->stato()->associate($stato); + $new->save(); + + $id_record = $new->id; + + $righe = $fattura->getRighe(); + foreach ($righe as $riga) { + $new_riga = $riga->replicate(); + $new_riga->setParent($new); + + // Rimozione riferimenti (deorecati) + $new_riga->idpreventivo = 0; + $new_riga->idcontratto = 0; + $new_riga->idintervento = 0; + $new_riga->idddt = 0; + $new_riga->idordine = 0; + + $new_riga->qta_evasa = 0; + $new_riga->original_type = null; + $new_riga->original_id = null; + $new_riga->save(); + + if ($new_riga->isArticolo()) { + $new_riga->movimenta($new_riga->qta); + } + } + + flash()->info(tr('Fattura duplicata correttamente!')); break; diff --git a/modules/fatture/bulk.php b/modules/fatture/bulk.php index 469d0aebb..8ace33dbd 100755 --- a/modules/fatture/bulk.php +++ b/modules/fatture/bulk.php @@ -186,7 +186,6 @@ switch (post('op')) { break; case 'copy-bulk': - foreach ($id_records as $id) { $fattura = Fattura::find($id); @@ -223,22 +222,24 @@ switch (post('op')) { $righe = $fattura->getRighe(); foreach ($righe as $riga) { - if (!post('riferimenti')) { - $riga->idpreventivo = 0; - $riga->idcontratto = 0; - $riga->idintervento = 0; - $riga->idddt = 0; - $riga->idordine = 0; - } - $new_riga = $riga->replicate(); $new_riga->setParent($new); + if (!post('riferimenti')) { + $new_riga->idpreventivo = 0; + $new_riga->idcontratto = 0; + $new_riga->idintervento = 0; + $new_riga->idddt = 0; + $new_riga->idordine = 0; + } + + $new_riga->qta_evasa = 0; + $new_riga->original_type = null; + $new_riga->original_id = null; $new_riga->save(); - if ($new_riga->idarticolo) { - $articolo = Articolo::find($new_riga->id); - $articolo->movimentaMagazzino($articolo->qta); + if ($new_riga->isArticolo()) { + $new_riga->movimenta($new_riga->qta); } } } diff --git a/modules/fatture/src/Components/Articolo.php b/modules/fatture/src/Components/Articolo.php index 0c678b188..b1cd2a3ba 100755 --- a/modules/fatture/src/Components/Articolo.php +++ b/modules/fatture/src/Components/Articolo.php @@ -27,11 +27,6 @@ class Articolo extends Article public function movimentaMagazzino($qta) { - // Se il documento è generato da un ddt o intervento allora **non** movimento il magazzino - if (!empty($this->idddt) || !empty($this->idintervento)) { - return; - } - $fattura = $this->fattura; $tipo = $fattura->tipo; diff --git a/modules/partitario/actions.php b/modules/partitario/actions.php index a08bc65dd..d49d46942 100755 --- a/modules/partitario/actions.php +++ b/modules/partitario/actions.php @@ -62,12 +62,11 @@ switch (post('op')) { // Eliminazione conto dal partitario case 'del': $idconto = post('idconto'); - + //Controllo che non esistano movimenti associati al conto $movimenti = $dbo->fetchNum('SELECT id FROM co_movimenti WHERE idconto = '.prepare($idconto)); if ($idconto != '' and empty($movimenti)) { - //Se elimino il conto lo scollego anche da eventuali anagrafiche (cliente e fornitore) $dbo->query('UPDATE an_anagrafiche SET idconto_cliente = NULL WHERE idconto_cliente = '.prepare($idconto)); $dbo->query('UPDATE an_anagrafiche SET idconto_fornitore = NULL WHERE idconto_fornitore = '.prepare($idconto)); diff --git a/modules/partitario/edit.php b/modules/partitario/edit.php index 251436352..eb1034075 100755 --- a/modules/partitario/edit.php +++ b/modules/partitario/edit.php @@ -91,7 +91,7 @@ foreach ($primo_livello as $conto_primo) { echo ' '; - + // Possibilità di esplodere i movimenti del conto if (!empty($movimenti)) { echo ' @@ -105,8 +105,7 @@ foreach ($primo_livello as $conto_primo) { // Possibilità di visionare l'anagrafica $id_anagrafica = $conto_terzo['idanagrafica']; $anagrafica_deleted = $conto_terzo['deleted_at']; - echo (isset($id_anagrafica) ? Modules::link('Anagrafiche', $id_anagrafica, ' ', null) : ''); - + echo isset($id_anagrafica) ? Modules::link('Anagrafiche', $id_anagrafica, ' ', null) : ''; // Stampa mastrino if (!empty($movimenti)) { diff --git a/plugins/pianificazione_fatturazione/actions.php b/plugins/pianificazione_fatturazione/actions.php index ec1ca6fdd..28d0668fa 100755 --- a/plugins/pianificazione_fatturazione/actions.php +++ b/plugins/pianificazione_fatturazione/actions.php @@ -62,7 +62,7 @@ switch ($operazione) { } break; - + case 'reset': $dbo->query('DELETE FROM `co_fatturazione_contratti` WHERE `idcontratto`='.prepare($id_record)); diff --git a/plugins/pianificazione_fatturazione/edit.php b/plugins/pianificazione_fatturazione/edit.php index 3e0623585..62c294dc3 100755 --- a/plugins/pianificazione_fatturazione/edit.php +++ b/plugins/pianificazione_fatturazione/edit.php @@ -88,14 +88,11 @@ if (!$pianificazioni->isEmpty()) { '; - -echo ''; -echo '
'; - - + echo '
'; } else { echo '