diff --git a/include/src/Components/Row.php b/include/src/Components/Row.php index 34f9d38eb..32a8af6b2 100644 --- a/include/src/Components/Row.php +++ b/include/src/Components/Row.php @@ -143,7 +143,7 @@ abstract class Row extends Description $this->prezzo_unitario_vendita_riga = $this->attributes['subtotale'] / $this->qta; } - return !is_nan($this->prezzo_unitario_vendita_riga) ? $this->prezzo_unitario_vendita_riga : 0; + return !is_nan($this->prezzo_unitario_vendita_riga) ? $this->prezzo_unitario_vendita_riga : 0; } /** diff --git a/modules/articoli/actions.php b/modules/articoli/actions.php index 4905cca60..70573b88b 100644 --- a/modules/articoli/actions.php +++ b/modules/articoli/actions.php @@ -117,12 +117,9 @@ switch (post('op')) { // Duplica articolo case 'copy': - $dbo->query('CREATE TEMPORARY TABLE tmp SELECT * FROM mg_articoli WHERE id = '.prepare($id_record)); - $dbo->query('ALTER TABLE tmp DROP id'); - $dbo->query('INSERT INTO mg_articoli SELECT NULL,tmp.* FROM tmp'); - $id_record = $dbo->lastInsertedID(); - $dbo->query('DROP TEMPORARY TABLE tmp'); - $dbo->query('UPDATE mg_articoli SET qta=0 WHERE id='.prepare($id_record)); + $new = $articolo->replicate(); + $new->qta = 0; + $new->save(); flash()->info(tr('Articolo duplicato correttamente!')); diff --git a/modules/articoli/init.php b/modules/articoli/init.php index 6b47270b1..57b0e4cb9 100644 --- a/modules/articoli/init.php +++ b/modules/articoli/init.php @@ -2,6 +2,10 @@ include_once __DIR__.'/../../core.php'; +use Modules\Articoli\Articolo; + if (isset($id_record)) { $record = $dbo->fetchOne('SELECT *, (SELECT COUNT(id) FROM mg_prodotti WHERE id_articolo = mg_articoli.id) AS serial FROM mg_articoli WHERE id='.prepare($id_record)); + + $articolo = Articolo::find($id_record); } diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php index 2f5fc174d..43fd2b225 100644 --- a/modules/contratti/actions.php +++ b/modules/contratti/actions.php @@ -129,26 +129,20 @@ switch (post('op')) { // Duplica contratto case 'copy': - $dbo->query('CREATE TEMPORARY TABLE tmp SELECT * FROM co_contratti WHERE id = '.prepare($id_record)); - $dbo->query('ALTER TABLE tmp DROP id'); - $dbo->query('INSERT INTO co_contratti SELECT NULL,tmp.* FROM tmp'); - $id_record = $dbo->lastInsertedID(); - $dbo->query('DROP TEMPORARY TABLE tmp'); + $new = $contratto->replicate(); + $new->idstato = 1; + $new->save(); - // Codice contratto: calcolo il successivo in base al formato specificato - $numero = Contratto::getNextNumero(); + $id_record = $new->id; - $dbo->query('UPDATE co_contratti SET idstato=1, numero = '.prepare($numero).' WHERE id='.prepare($id_record)); + $righe = $preventivo->getRighe(); + foreach ($righe as $riga) { + $new_riga = $riga->replicate(); + $new_riga->setParent($new); - //copio anche le righe del preventivo - $dbo->query('CREATE TEMPORARY TABLE tmp SELECT * FROM co_righe_contratti WHERE idcontratto = '.filter('id_record')); - $dbo->query('ALTER TABLE tmp DROP id'); - $dbo->query('UPDATE tmp SET idcontratto = '.prepare($id_record)); - $dbo->query('INSERT INTO co_righe_contratti SELECT NULL,tmp.* FROM tmp'); - $dbo->query('DROP TEMPORARY TABLE tmp'); - - //Azzero eventuale quantità evasa - $dbo->query('UPDATE co_righe_contratti SET qta_evasa=0 WHERE id='.prepare($id_record)); + $new_riga->qta_evasa = 0; + $new_riga->save(); + } flash()->info(tr('Contratto duplicato correttamente!')); diff --git a/modules/fatture/modutil.php b/modules/fatture/modutil.php index d5b66d0d6..da45ec57a 100755 --- a/modules/fatture/modutil.php +++ b/modules/fatture/modutil.php @@ -450,7 +450,7 @@ function get_new_idmastrino($table = 'co_movimenti') /** * Ricalcola i costi aggiuntivi in fattura (rivalsa inps, ritenuta d'acconto, marca da bollo) * Deve essere eseguito ogni volta che si aggiunge o toglie una riga - * $iddocumento int ID della fattura + * $iddocumento int ID della fattura. */ function ricalcola_costiagg_fattura($iddocumento) { diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index d4b67fe78..460d7087e 100644 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -381,55 +381,6 @@ class Fattura extends Document { database()->delete('co_scadenziario', ['iddocumento' => $this->id]); } - - protected function calcolaMarcaDaBollo(){ - $righe_bollo = $this->getRighe()->filter(function ($item, $key) { - return $item->aliquota != null && in_array($item->aliquota->codice_natura_fe, ['N1', 'N2', 'N3', 'N4']); - }); - $importo_righe_bollo = $righe_bollo->sum('netto'); - - // Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia - $bollo = ($this->direzione == 'uscita') ? $this->bollo : setting('Importo marca da bollo'); - - $marca_da_bollo = 0; - if (abs($bollo) > 0 && abs($importo_righe_bollo) > setting("Soglia minima per l'applicazione della marca da bollo")) { - $marca_da_bollo = $bollo; - } - - // Se l'importo è negativo può essere una nota di credito, quindi cambio segno alla marca da bollo - $marca_da_bollo = abs($marca_da_bollo); - - $this->bollo = $marca_da_bollo; - - $riga = $this->rigaBollo; - - // Rimozione riga bollo se nullo - if (empty($this->addebita_bollo) || empty($marca_da_bollo) ){ - if (!empty($riga)){ - $this->id_riga_bollo = null; - - $riga->delete(); - } - - return; - } - - // Creazione riga bollo se non presente - if(empty($riga)){ - $riga = Components\Riga::build($this); - $riga->save(); - - $this->id_riga_bollo = $riga->id; - } - - $riga->prezzo_unitario_vendita = $marca_da_bollo; - $riga->qta = 1; - $riga->descrizione = setting('Descrizione addebito bollo'); - $riga->id_iva = setting('Iva da applicare su marca da bollo'); - $riga->idconto = setting('Conto predefinito per la marca da bollo'); - - $riga->save(); - } /** * Salva la fattura, impostando i campi dipendenti dai singoli parametri. @@ -451,7 +402,6 @@ class Fattura extends Document return parent::save($options); } - /** * Restituisce l'elenco delle note di credito collegate. * @@ -537,4 +487,54 @@ class Fattura extends Document return $numero; } + + protected function calcolaMarcaDaBollo() + { + $righe_bollo = $this->getRighe()->filter(function ($item, $key) { + return $item->aliquota != null && in_array($item->aliquota->codice_natura_fe, ['N1', 'N2', 'N3', 'N4']); + }); + $importo_righe_bollo = $righe_bollo->sum('netto'); + + // Leggo la marca da bollo se c'è e se il netto a pagare supera la soglia + $bollo = ($this->direzione == 'uscita') ? $this->bollo : setting('Importo marca da bollo'); + + $marca_da_bollo = 0; + if (abs($bollo) > 0 && abs($importo_righe_bollo) > setting("Soglia minima per l'applicazione della marca da bollo")) { + $marca_da_bollo = $bollo; + } + + // Se l'importo è negativo può essere una nota di credito, quindi cambio segno alla marca da bollo + $marca_da_bollo = abs($marca_da_bollo); + + $this->bollo = $marca_da_bollo; + + $riga = $this->rigaBollo; + + // Rimozione riga bollo se nullo + if (empty($this->addebita_bollo) || empty($marca_da_bollo)) { + if (!empty($riga)) { + $this->id_riga_bollo = null; + + $riga->delete(); + } + + return; + } + + // Creazione riga bollo se non presente + if (empty($riga)) { + $riga = Components\Riga::build($this); + $riga->save(); + + $this->id_riga_bollo = $riga->id; + } + + $riga->prezzo_unitario_vendita = $marca_da_bollo; + $riga->qta = 1; + $riga->descrizione = setting('Descrizione addebito bollo'); + $riga->id_iva = setting('Iva da applicare su marca da bollo'); + $riga->idconto = setting('Conto predefinito per la marca da bollo'); + + $riga->save(); + } } diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php index 7467a43b5..482b5138b 100644 --- a/modules/preventivi/actions.php +++ b/modules/preventivi/actions.php @@ -99,26 +99,21 @@ switch (post('op')) { // Duplica preventivo case 'copy': - $dbo->query('CREATE TEMPORARY TABLE tmp SELECT * FROM co_preventivi WHERE id = '.prepare($id_record)); - $dbo->query('ALTER TABLE tmp DROP id'); - $dbo->query('INSERT INTO co_preventivi SELECT NULL,tmp.* FROM tmp'); - $id_record = $dbo->lastInsertedID(); - $dbo->query('DROP TEMPORARY TABLE tmp'); + $new = $preventivo->replicate(); + $new->idstato = 1; + $new->master_revision = $preventivo->id; + $new->save(); - // Codice preventivo: calcolo il successivo in base al formato specificato - $numero = Preventivo::getNextNumero(); + $id_record = $new->id; - $dbo->query('UPDATE co_preventivi SET idstato=1, numero = '.prepare($numero).', master_revision = id WHERE id='.prepare($id_record)); + $righe = $preventivo->getRighe(); + foreach ($righe as $riga) { + $new_riga = $riga->replicate(); + $new_riga->setParent($new); - //copio anche le righe del preventivo - $dbo->query('CREATE TEMPORARY TABLE tmp SELECT * FROM co_righe_preventivi WHERE idpreventivo = '.filter('id_record')); - $dbo->query('ALTER TABLE tmp DROP id'); - $dbo->query('UPDATE tmp SET idpreventivo = '.prepare($id_record)); - $dbo->query('INSERT INTO co_righe_preventivi SELECT NULL,tmp.* FROM tmp'); - $dbo->query('DROP TEMPORARY TABLE tmp'); - - //Azzero eventuale quantità evasa - $dbo->query('UPDATE co_righe_preventivi SET qta_evasa=0 WHERE id='.prepare($id_record)); + $new_riga->qta_evasa = 0; + $new_riga->save(); + } flash()->info(tr('Preventivo duplicato correttamente!')); diff --git a/plugins/importFE/actions.php b/plugins/importFE/actions.php index 8ba913ecc..55519f194 100644 --- a/plugins/importFE/actions.php +++ b/plugins/importFE/actions.php @@ -99,5 +99,4 @@ switch (filter('op')) { } break; - } diff --git a/plugins/importFE/list.php b/plugins/importFE/list.php index 5e3cfaa03..9b2faee52 100644 --- a/plugins/importFE/list.php +++ b/plugins/importFE/list.php @@ -29,7 +29,7 @@ if (!empty($list)) { '; - }else{ + } else { echo '