diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php
index 100f8881c..63b32aa20 100755
--- a/modules/fatture/actions.php
+++ b/modules/fatture/actions.php
@@ -71,169 +71,176 @@ switch (post('op')) {
$tipo = Tipo::find(post('idtipodocumento'));
$fattura->tipo()->associate($tipo);
- $data_fattura_precedente = $dbo->fetchOne('
- SELECT
- MAX(DATA) AS datamax
- FROM
- co_documenti
- INNER JOIN co_statidocumento ON co_statidocumento.id = co_documenti.idstatodocumento
- INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento = co_tipidocumento.id
- INNER JOIN zz_segments ON zz_segments.id = co_documenti.id_segment
- WHERE
- co_statidocumento.descrizione = "Emessa" AND co_tipidocumento.dir="entrata" AND co_documenti.id_segment='.$fattura->id_segment);
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
- if ((setting('Data emissione fattura automatica') == 1) && ($dir == 'entrata') && ($stato->descrizione == 'Emessa') && (Carbon::parse($data)->lessThan(Carbon::parse($data_fattura_precedente['datamax']))) && (!empty($data_fattura_precedente['datamax']))){
- $fattura->data = $data_fattura_precedente['datamax'];
- $fattura->data_competenza = $data_fattura_precedente['datamax'];
- flash()->info(tr('Data di emissione aggiornata, come da impostazione!'));
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
+ ]));
} else {
- $fattura->data = post('data');
- $fattura->data_competenza = post('data_competenza');
- }
+ $data_fattura_precedente = $dbo->fetchOne('
+ SELECT
+ MAX(DATA) AS datamax
+ FROM
+ co_documenti
+ INNER JOIN co_statidocumento ON co_statidocumento.id = co_documenti.idstatodocumento
+ INNER JOIN co_tipidocumento ON co_documenti.idtipodocumento = co_tipidocumento.id
+ INNER JOIN zz_segments ON zz_segments.id = co_documenti.id_segment
+ WHERE
+ co_statidocumento.descrizione = "Emessa" AND co_tipidocumento.dir="entrata" AND co_documenti.id_segment='.$fattura->id_segment);
- if ($dir == 'entrata') {
- $fattura->data_registrazione = post('data');
- } else {
- $fattura->data_registrazione = post('data_registrazione');
- }
-
- $fattura->numero_esterno = post('numero_esterno');
- $fattura->note = post('note');
- $fattura->note_aggiuntive = post('note_aggiuntive');
-
- $fattura->idanagrafica = post('idanagrafica');
- $fattura->idagente = post('idagente');
- $fattura->idreferente = post('idreferente');
- $fattura->idpagamento = post('idpagamento');
- $fattura->id_banca_azienda = post('id_banca_azienda');
- $fattura->id_banca_controparte = post('id_banca_controparte');
- $fattura->idcausalet = post('idcausalet');
- $fattura->idspedizione = post('idspedizione');
- $fattura->idporto = post('idporto');
- $fattura->idaspettobeni = post('idaspettobeni');
- $fattura->idvettore = post('idvettore');
- $fattura->idsede_partenza = post('idsede_partenza');
- $fattura->idsede_destinazione = post('idsede_destinazione');
- $fattura->idconto = post('idconto');
- $fattura->split_payment = post('split_payment') ?: 0;
- $fattura->is_fattura_conto_terzi = post('is_fattura_conto_terzi') ?: 0;
- $fattura->n_colli = post('n_colli');
- $fattura->tipo_resa = post('tipo_resa');
-
- $fattura->peso = post('peso');
- $fattura->volume = post('volume');
- $fattura->peso_manuale = post('peso_manuale');
- $fattura->volume_manuale = post('volume_manuale');
-
- $fattura->rivalsainps = 0;
- $fattura->ritenutaacconto = 0;
- $fattura->iva_rivalsainps = 0;
- $fattura->id_ritenuta_contributi = post('id_ritenuta_contributi') ?: null;
-
- $fattura->codice_stato_fe = post('codice_stato_fe') ?: null;
-
- // Informazioni per le fatture di acquisto
- if ($dir == 'uscita') {
- $fattura->numero = post('numero');
- $fattura->numero_esterno = post('numero_esterno');
- $fattura->idrivalsainps = post('id_rivalsa_inps');
- $fattura->idritenutaacconto = post('id_ritenuta_acconto');
- }
-
- // Operazioni sul bollo
- if ($dir == 'entrata') {
- $fattura->addebita_bollo = post('addebita_bollo');
- $bollo_automatico = post('bollo_automatico');
- if (empty($bollo_automatico)) {
- $fattura->bollo = post('bollo');
+ if ((setting('Data emissione fattura automatica') == 1) && ($dir == 'entrata') && ($stato->descrizione == 'Emessa') && (Carbon::parse($data)->lessThan(Carbon::parse($data_fattura_precedente['datamax']))) && (!empty($data_fattura_precedente['datamax']))){
+ $fattura->data = $data_fattura_precedente['datamax'];
+ $fattura->data_competenza = $data_fattura_precedente['datamax'];
+ flash()->info(tr('Data di emissione aggiornata, come da impostazione!'));
} else {
- $fattura->bollo = null;
+ $fattura->data = post('data');
+ $fattura->data_competenza = post('data_competenza');
}
- }
- // Operazioni sulla dichiarazione d'intento
- $dichiarazione_precedente = $fattura->dichiarazione;
- $fattura->id_dichiarazione_intento = post('id_dichiarazione_intento') ?: null;
+ if ($dir == 'entrata') {
+ $fattura->data_registrazione = post('data');
+ } else {
+ $fattura->data_registrazione = post('data_registrazione');
+ }
- // Flag pagamento ritenuta
- $fattura->is_ritenuta_pagata = post('is_ritenuta_pagata') ?: 0;
+ $fattura->numero_esterno = post('numero_esterno');
+ $fattura->note = post('note');
+ $fattura->note_aggiuntive = post('note_aggiuntive');
- $fattura->setScontoFinale(post('sconto_finale'), post('tipo_sconto_finale'));
+ $fattura->idanagrafica = post('idanagrafica');
+ $fattura->idagente = post('idagente');
+ $fattura->idreferente = post('idreferente');
+ $fattura->idpagamento = post('idpagamento');
+ $fattura->id_banca_azienda = post('id_banca_azienda');
+ $fattura->id_banca_controparte = post('id_banca_controparte');
+ $fattura->idcausalet = post('idcausalet');
+ $fattura->idspedizione = post('idspedizione');
+ $fattura->idporto = post('idporto');
+ $fattura->idaspettobeni = post('idaspettobeni');
+ $fattura->idvettore = post('idvettore');
+ $fattura->idsede_partenza = post('idsede_partenza');
+ $fattura->idsede_destinazione = post('idsede_destinazione');
+ $fattura->idconto = post('idconto');
+ $fattura->split_payment = post('split_payment') ?: 0;
+ $fattura->is_fattura_conto_terzi = post('is_fattura_conto_terzi') ?: 0;
+ $fattura->n_colli = post('n_colli');
+ $fattura->tipo_resa = post('tipo_resa');
- $results = $fattura->save();
- $message = '';
+ $fattura->peso = post('peso');
+ $fattura->volume = post('volume');
+ $fattura->peso_manuale = post('peso_manuale');
+ $fattura->volume_manuale = post('volume_manuale');
- foreach ($results as $numero => $result) {
- foreach ($result as $title => $links) {
- foreach ($links as $link => $errors) {
- if (empty($title)) {
- flash()->warning(tr('La fattura elettronica num. _NUM_ potrebbe avere delle irregolarità!', [
- '_NUM_' => $numero,
- ]).' '.tr('Controllare i seguenti campi: _LIST_', [
- '_LIST_' => implode(', ', $errors),
- ]).'.');
- } else {
- $message .= '
-
'.$title.' '.$link.'
- ';
+ $fattura->rivalsainps = 0;
+ $fattura->ritenutaacconto = 0;
+ $fattura->iva_rivalsainps = 0;
+ $fattura->id_ritenuta_contributi = post('id_ritenuta_contributi') ?: null;
- foreach ($errors as $error) {
- if (!empty($error)) {
- $message .= '
- - '.$error.'
';
+ $fattura->codice_stato_fe = post('codice_stato_fe') ?: null;
+
+ // Informazioni per le fatture di acquisto
+ if ($dir == 'uscita') {
+ $fattura->numero = post('numero');
+ $fattura->numero_esterno = post('numero_esterno');
+ $fattura->idrivalsainps = post('id_rivalsa_inps');
+ $fattura->idritenutaacconto = post('id_ritenuta_acconto');
+ }
+
+ // Operazioni sul bollo
+ if ($dir == 'entrata') {
+ $fattura->addebita_bollo = post('addebita_bollo');
+ $bollo_automatico = post('bollo_automatico');
+ if (empty($bollo_automatico)) {
+ $fattura->bollo = post('bollo');
+ } else {
+ $fattura->bollo = null;
+ }
+ }
+
+ // Operazioni sulla dichiarazione d'intento
+ $dichiarazione_precedente = $fattura->dichiarazione;
+ $fattura->id_dichiarazione_intento = post('id_dichiarazione_intento') ?: null;
+
+ // Flag pagamento ritenuta
+ $fattura->is_ritenuta_pagata = post('is_ritenuta_pagata') ?: 0;
+
+ $fattura->setScontoFinale(post('sconto_finale'), post('tipo_sconto_finale'));
+ $results = $fattura->save();
+ $message = '';
+
+ foreach ($results as $numero => $result) {
+ foreach ($result as $title => $links) {
+ foreach ($links as $link => $errors) {
+ if (empty($title)) {
+ flash()->warning(tr('La fattura elettronica num. _NUM_ potrebbe avere delle irregolarità!', [
+ '_NUM_' => $numero,
+ ]).' '.tr('Controllare i seguenti campi: _LIST_', [
+ '_LIST_' => implode(', ', $errors),
+ ]).'.');
+ } else {
+ $message .= '
+ '.$title.' '.$link.'
+ ';
+
+ foreach ($errors as $error) {
+ if (!empty($error)) {
+ $message .= '
+ - '.$error.'
';
+ }
}
- }
- $message .= '
-
';
+ $message .= '
+
';
+ }
}
}
}
- }
- if ($message) {
- // Messaggi informativi sulle problematiche
- $message = tr('La fattura elettronica numero _NUM_ non è stata generata a causa di alcune informazioni mancanti', [
- '_NUM_' => $numero,
- ]).':'.$message;
+ if ($message) {
+ // Messaggi informativi sulle problematiche
+ $message = tr('La fattura elettronica numero _NUM_ non è stata generata a causa di alcune informazioni mancanti', [
+ '_NUM_' => $numero,
+ ]).':'.$message;
- flash()->warning($message);
- }
-
- aggiorna_sedi_movimenti('documenti', $id_record);
-
- // Controllo sulla presenza di fattura di acquisto con lo stesso numero secondario nello stesso periodo
- $direzione = $fattura->direzione;
- if ($direzione == 'uscita') {
- $count = Fattura::where('numero_esterno', $fattura->numero_esterno)
- ->where('id', '!=', $id_record)
- ->where('idanagrafica', '=', $fattura->anagrafica->id)
- ->where('data', '>=', $_SESSION['period_start'])
- ->where('data', '<=', $_SESSION['period_end'])
- ->whereHas('tipo', function ($query) use ($direzione) {
- $query->where('dir', '=', $direzione);
- })->count();
- if (!empty($count)) {
- flash()->warning(tr('Esiste già una fattura con lo stesso numero secondario e la stessa anagrafica collegata!'));
+ flash()->warning($message);
}
- }
- // Controllo sulla presenza di fattura di vendita con lo stesso numero nello stesso periodo
- if ($direzione == 'entrata') {
- $count = Fattura::where('numero_esterno', $fattura->numero_esterno)
- ->where('id', '!=', $id_record)
- ->where('data', '>=', $_SESSION['period_start'])
- ->where('data', '<=', $_SESSION['period_end'])
- ->where('numero_esterno', '!=', NULL)
- ->whereHas('tipo', function ($query) use ($direzione) {
- $query->where('dir', '=', $direzione);
- })->count();
- if (!empty($count)) {
- flash()->warning(tr('Esiste già una fattura con lo stesso numero!'));
+ aggiorna_sedi_movimenti('documenti', $id_record);
+
+ // Controllo sulla presenza di fattura di acquisto con lo stesso numero secondario nello stesso periodo
+ $direzione = $fattura->direzione;
+ if ($direzione == 'uscita') {
+ $count = Fattura::where('numero_esterno', $fattura->numero_esterno)
+ ->where('id', '!=', $id_record)
+ ->where('idanagrafica', '=', $fattura->anagrafica->id)
+ ->where('data', '>=', $_SESSION['period_start'])
+ ->where('data', '<=', $_SESSION['period_end'])
+ ->whereHas('tipo', function ($query) use ($direzione) {
+ $query->where('dir', '=', $direzione);
+ })->count();
+ if (!empty($count)) {
+ flash()->warning(tr('Esiste già una fattura con lo stesso numero secondario e la stessa anagrafica collegata!'));
+ }
}
- }
- flash()->info(tr('Fattura modificata correttamente!'));
+ // Controllo sulla presenza di fattura di vendita con lo stesso numero nello stesso periodo
+ if ($direzione == 'entrata') {
+ $count = Fattura::where('numero_esterno', $fattura->numero_esterno)
+ ->where('id', '!=', $id_record)
+ ->where('data', '>=', $_SESSION['period_start'])
+ ->where('data', '<=', $_SESSION['period_end'])
+ ->where('numero_esterno', '!=', NULL)
+ ->whereHas('tipo', function ($query) use ($direzione) {
+ $query->where('dir', '=', $direzione);
+ })->count();
+ if (!empty($count)) {
+ flash()->warning(tr('Esiste già una fattura con lo stesso numero!'));
+ }
+ }
+ flash()->info(tr('Fattura modificata correttamente!'));
+ }
break;
@@ -398,57 +405,44 @@ switch (post('op')) {
case 'add_intervento':
$id_intervento = post('idintervento');
- if (!empty($id_record) && $id_intervento !== null) {
- $copia_descrizione = post('copia_descrizione');
- $intervento = $dbo->fetchOne('SELECT descrizione FROM in_interventi WHERE id = '.prepare($id_intervento));
- if (!empty($copia_descrizione) && !empty($intervento['descrizione'])) {
- $riga = Descrizione::build($fattura);
- $riga->descrizione = $intervento['descrizione'];
- $riga->idintervento = $id_intervento;
- $riga->save();
- }
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
- aggiungi_intervento_in_fattura($id_intervento, $id_record, post('descrizione'), post('idiva'), post('idconto'), post('id_rivalsa_inps'), post('id_ritenuta_acconto'), post('calcolo_ritenuta_acconto'));
-
- flash()->info(tr('Intervento _NUM_ aggiunto!', [
- '_NUM_' => $idintervento,
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
]));
+ } else {
+ if (!empty($id_record) && $id_intervento !== null) {
+ $copia_descrizione = post('copia_descrizione');
+ $intervento = $dbo->fetchOne('SELECT descrizione FROM in_interventi WHERE id = '.prepare($id_intervento));
+ if (!empty($copia_descrizione) && !empty($intervento['descrizione'])) {
+ $riga = Descrizione::build($fattura);
+ $riga->descrizione = $intervento['descrizione'];
+ $riga->idintervento = $id_intervento;
+ $riga->save();
+ }
+
+ aggiungi_intervento_in_fattura($id_intervento, $id_record, post('descrizione'), post('idiva'), post('idconto'), post('id_rivalsa_inps'), post('id_ritenuta_acconto'), post('calcolo_ritenuta_acconto'));
+
+ flash()->info(tr('Intervento _NUM_ aggiunto!', [
+ '_NUM_' => $idintervento,
+ ]));
+ }
}
break;
case 'manage_documento_fe':
$data = Filter::getPOST();
- $ignore = [
- 'id_plugin',
- 'id_module',
- 'id_record',
- 'backto',
- 'hash',
- 'op',
- 'idriga',
- 'dir',
- ];
- foreach ($ignore as $name) {
- unset($data[$name]);
- }
-
- $fattura->dati_aggiuntivi_fe = $data;
- $fattura->save();
-
- flash()->info(tr('Dati FE aggiornati correttamente!'));
-
- break;
-
- case 'manage_riga_fe':
- $id_riga = post('id_riga');
- if ($id_riga != null) {
- $riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
- $riga = $riga ?: Descrizione::find($id_riga);
- $riga = $riga ?: Sconto::find($id_riga);
-
- $data = Filter::getPOST();
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
+ ]));
+ } else {
$ignore = [
'id_plugin',
'id_module',
@@ -463,11 +457,52 @@ switch (post('op')) {
unset($data[$name]);
}
- $riga->dati_aggiuntivi_fe = $data;
- $riga->save();
+ $fattura->dati_aggiuntivi_fe = $data;
+ $fattura->save();
flash()->info(tr('Dati FE aggiornati correttamente!'));
}
+
+ break;
+
+ case 'manage_riga_fe':
+ $id_riga = post('id_riga');
+
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
+
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
+ ]));
+ } else {
+ if ($id_riga != null) {
+ $riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
+ $riga = $riga ?: Descrizione::find($id_riga);
+ $riga = $riga ?: Sconto::find($id_riga);
+
+ $data = Filter::getPOST();
+
+ $ignore = [
+ 'id_plugin',
+ 'id_module',
+ 'id_record',
+ 'backto',
+ 'hash',
+ 'op',
+ 'idriga',
+ 'dir',
+ ];
+ foreach ($ignore as $name) {
+ unset($data[$name]);
+ }
+
+ $riga->dati_aggiuntivi_fe = $data;
+ $riga->save();
+
+ flash()->info(tr('Dati FE aggiornati correttamente!'));
+ }
+ }
break;
@@ -524,43 +559,52 @@ switch (post('op')) {
$articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
}
- $qta = post('qta');
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
- $articolo->descrizione = post('descrizione');
- $articolo->note = post('note');
- $articolo->um = post('um') ?: null;
-
- $articolo->id_iva = post('idiva');
- $articolo->idconto = post('idconto');
-
- $articolo->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
- $articolo->id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
- $articolo->ritenuta_contributi = boolval(post('ritenuta_contributi'));
- $articolo->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
-
- $articolo->costo_unitario = post('costo_unitario') ?: 0;
- $articolo->setPrezzoUnitario(post('prezzo_unitario'), post('idiva'));
- $articolo->setSconto(post('sconto'), post('tipo_sconto'));
- if ($dir == 'entrata') {
- $articolo->setProvvigione(post('provvigione'), post('tipo_provvigione'));
- }
-
- try {
- $articolo->qta = $qta;
- } catch (UnexpectedValueException $e) {
- flash()->error(tr('Alcuni serial number sono già stati utilizzati!'));
- }
-
- $articolo->save();
-
- if (post('idriga') != null) {
- flash()->info(tr('Articolo modificato!'));
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
+ ]));
} else {
- flash()->info(tr('Articolo aggiunto!'));
- }
+ $qta = post('qta');
- // Ricalcolo inps, ritenuta e bollo
- ricalcola_costiagg_fattura($id_record);
+ $articolo->descrizione = post('descrizione');
+ $articolo->note = post('note');
+ $articolo->um = post('um') ?: null;
+
+ $articolo->id_iva = post('idiva');
+ $articolo->idconto = post('idconto');
+
+ $articolo->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
+ $articolo->id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
+ $articolo->ritenuta_contributi = boolval(post('ritenuta_contributi'));
+ $articolo->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
+
+ $articolo->costo_unitario = post('costo_unitario') ?: 0;
+ $articolo->setPrezzoUnitario(post('prezzo_unitario'), post('idiva'));
+ $articolo->setSconto(post('sconto'), post('tipo_sconto'));
+ if ($dir == 'entrata') {
+ $articolo->setProvvigione(post('provvigione'), post('tipo_provvigione'));
+ }
+
+ try {
+ $articolo->qta = $qta;
+ } catch (UnexpectedValueException $e) {
+ flash()->error(tr('Alcuni serial number sono già stati utilizzati!'));
+ }
+
+ $articolo->save();
+
+ if (post('idriga') != null) {
+ flash()->info(tr('Articolo modificato!'));
+ } else {
+ flash()->info(tr('Articolo aggiunto!'));
+ }
+
+ // Ricalcolo inps, ritenuta e bollo
+ ricalcola_costiagg_fattura($id_record);
+ }
break;
@@ -571,27 +615,35 @@ switch (post('op')) {
$sconto = Sconto::build($fattura);
}
- $sconto->idconto = post('idconto');
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
- $sconto->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
- $sconto->id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
- $sconto->ritenuta_contributi = boolval(post('ritenuta_contributi'));
- $sconto->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
-
- $sconto->descrizione = post('descrizione');
- $sconto->note = post('note');
- $sconto->setScontoUnitario(post('sconto_unitario'), post('idiva'));
-
- $sconto->save();
-
- if (post('idriga') != null) {
- flash()->info(tr('Sconto/maggiorazione modificato!'));
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
+ ]));
} else {
- flash()->info(tr('Sconto/maggiorazione aggiunto!'));
- }
+ $sconto->idconto = post('idconto');
- // Ricalcolo inps, ritenuta e bollo
- ricalcola_costiagg_fattura($id_record);
+ $sconto->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
+ $sconto->id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
+ $sconto->ritenuta_contributi = boolval(post('ritenuta_contributi'));
+ $sconto->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
+
+ $sconto->descrizione = post('descrizione');
+ $sconto->note = post('note');
+ $sconto->setScontoUnitario(post('sconto_unitario'), post('idiva'));
+ $sconto->save();
+
+ if (post('idriga') != null) {
+ flash()->info(tr('Sconto/maggiorazione modificato!'));
+ } else {
+ flash()->info(tr('Sconto/maggiorazione aggiunto!'));
+ }
+
+ // Ricalcolo inps, ritenuta e bollo
+ ricalcola_costiagg_fattura($id_record);
+ }
break;
@@ -602,39 +654,47 @@ switch (post('op')) {
$riga = Riga::build($fattura);
}
- $qta = post('qta');
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
- $riga->descrizione = post('descrizione');
- $riga->note = post('note');
- $riga->um = post('um') ?: null;
-
- $riga->id_iva = post('idiva');
- $riga->idconto = post('idconto');
-
- $riga->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
- $riga->id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
- $riga->ritenuta_contributi = boolval(post('ritenuta_contributi'));
- $riga->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
-
- $riga->costo_unitario = post('costo_unitario') ?: 0;
- $riga->setPrezzoUnitario(post('prezzo_unitario'), post('idiva'));
- $riga->setSconto(post('sconto'), post('tipo_sconto'));
- if ($dir == 'entrata') {
- $riga->setProvvigione(post('provvigione'), post('tipo_provvigione'));
- }
-
- $riga->qta = $qta;
-
- $riga->save();
-
- if (post('idriga') != null) {
- flash()->info(tr('Riga modificata!'));
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
+ ]));
} else {
- flash()->info(tr('Riga aggiunta!'));
- }
+ $qta = post('qta');
- // Ricalcolo inps, ritenuta e bollo
- ricalcola_costiagg_fattura($id_record);
+ $riga->descrizione = post('descrizione');
+ $riga->note = post('note');
+ $riga->um = post('um') ?: null;
+
+ $riga->id_iva = post('idiva');
+ $riga->idconto = post('idconto');
+
+ $riga->calcolo_ritenuta_acconto = post('calcolo_ritenuta_acconto') ?: null;
+ $riga->id_ritenuta_acconto = post('id_ritenuta_acconto') ?: null;
+ $riga->ritenuta_contributi = boolval(post('ritenuta_contributi'));
+ $riga->id_rivalsa_inps = post('id_rivalsa_inps') ?: null;
+
+ $riga->costo_unitario = post('costo_unitario') ?: 0;
+ $riga->setPrezzoUnitario(post('prezzo_unitario'), post('idiva'));
+ $riga->setSconto(post('sconto'), post('tipo_sconto'));
+ if ($dir == 'entrata') {
+ $riga->setProvvigione(post('provvigione'), post('tipo_provvigione'));
+ }
+
+ $riga->qta = $qta;
+ $riga->save();
+
+ if (post('idriga') != null) {
+ flash()->info(tr('Riga modificata!'));
+ } else {
+ flash()->info(tr('Riga aggiunta!'));
+ }
+
+ // Ricalcolo inps, ritenuta e bollo
+ ricalcola_costiagg_fattura($id_record);
+ }
break;
@@ -647,32 +707,51 @@ switch (post('op')) {
$riga->descrizione = post('descrizione');
$riga->note = post('note');
- $riga->save();
- if (post('idriga') != null) {
- flash()->info(tr('Riga descrittiva modificata!'));
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
+
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
+ ]));
} else {
- flash()->info(tr('Riga descrittiva aggiunta!'));
- }
+ $riga->save();
+ if (post('idriga') != null) {
+ flash()->info(tr('Riga descrittiva modificata!'));
+ } else {
+ flash()->info(tr('Riga descrittiva aggiunta!'));
+ }
+ }
break;
// Scollegamento intervento da documento
case 'unlink_intervento':
if (!empty($id_record) && post('idriga') !== null) {
- $id_riga = post('idriga');
- $type = post('type');
- $riga = $fattura->getRiga($type, $id_riga);
- if (!empty($riga)) {
- try {
- $riga->delete();
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
- flash()->info(tr('Intervento _NUM_ rimosso!', [
- '_NUM_' => $idintervento,
- ]));
- } catch (InvalidArgumentException $e) {
- flash()->error(tr('Errore durante l\'eliminazione della riga!'));
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
+ ]));
+ } else {
+ $id_riga = post('idriga');
+ $type = post('type');
+ $riga = $fattura->getRiga($type, $id_riga);
+
+ if (!empty($riga)) {
+ try {
+ $riga->delete();
+
+ flash()->info(tr('Intervento _NUM_ rimosso!', [
+ '_NUM_' => $idintervento,
+ ]));
+ } catch (InvalidArgumentException $e) {
+ flash()->error(tr('Errore durante l\'eliminazione della riga!'));
+ }
}
}
}
@@ -682,50 +761,66 @@ switch (post('op')) {
case 'delete_riga':
$id_righe = (array)post('righe');
- foreach ($id_righe as $id_riga) {
- $riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
- $riga = $riga ?: Descrizione::find($id_riga);
- $riga = $riga ?: Sconto::find($id_riga);
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
- try {
- $riga->delete();
-
- // Ricalcolo inps, ritenuta e bollo
- ricalcola_costiagg_fattura($id_record);
- } catch (InvalidArgumentException $e) {
- flash()->error(tr('Alcuni serial number sono già stati utilizzati!'));
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
+ ]));
+ } else {
+ foreach ($id_righe as $id_riga) {
+ $riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
+ $riga = $riga ?: Descrizione::find($id_riga);
+ $riga = $riga ?: Sconto::find($id_riga);
+
+ try {
+ $riga->delete();
+
+ // Ricalcolo inps, ritenuta e bollo
+ ricalcola_costiagg_fattura($id_record);
+ } catch (InvalidArgumentException $e) {
+ flash()->error(tr('Alcuni serial number sono già stati utilizzati!'));
+ }
+
+ $riga = null;
+ flash()->info(tr('Righe eliminate!'));
}
-
- $riga = null;
}
-
- flash()->info(tr('Righe eliminate!'));
-
break;
// Duplicazione riga
case 'copy_riga':
$id_righe = (array)post('righe');
- foreach ($id_righe as $id_riga) {
- $riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
- $riga = $riga ?: Descrizione::find($id_riga);
- $riga = $riga ?: Sconto::find($id_riga);
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
- $new_riga = $riga->replicate();
- $new_riga->setDocument($fattura);
- $new_riga->qta_evasa = 0;
- $new_riga->save();
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
+ ]));
+ } else {
+ foreach ($id_righe as $id_riga) {
+ $riga = Articolo::find($id_riga) ?: Riga::find($id_riga);
+ $riga = $riga ?: Descrizione::find($id_riga);
+ $riga = $riga ?: Sconto::find($id_riga);
- if ($new_riga->isArticolo()) {
- $new_riga->movimenta($new_riga->qta);
+ $new_riga = $riga->replicate();
+ $new_riga->setDocument($fattura);
+ $new_riga->qta_evasa = 0;
+ $new_riga->save();
+
+ if ($new_riga->isArticolo()) {
+ $new_riga->movimenta($new_riga->qta);
+ }
+
+ $riga = null;
}
- $riga = null;
+ flash()->info(tr('Righe duplicate!'));
}
- flash()->info(tr('Righe duplicate!'));
-
break;
case 'add_serial':
@@ -962,103 +1057,110 @@ switch (post('op')) {
case 'add_articolo':
$id_articolo = post('id_articolo');
$barcode = post('barcode');
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
- if (!empty($barcode)) {
- $id_articolo = $dbo->selectOne('mg_articoli', 'id', ['deleted_at' => null, 'attivo' => 1, 'barcode' => $barcode])['id'];
- }
-
- if (!empty($id_articolo)) {
- $permetti_movimenti_sotto_zero = setting('Permetti selezione articoli con quantità minore o uguale a zero in Documenti di Vendita');
- $qta_articolo = $dbo->selectOne('mg_articoli', 'qta', ['id' => $id_articolo])['qta'];
-
- $originale = ArticoloOriginale::find($id_articolo);
-
- if ($qta_articolo <= 0 && !$permetti_movimenti_sotto_zero && !$originale->servizio && $dir == 'entrata') {
- $response['error'] = tr('Quantità a magazzino non sufficiente');
- echo json_encode($response);
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
+ ]));
} else {
- $articolo = Articolo::build($fattura, $originale);
- $qta = 1;
-
- $articolo->descrizione = $originale->descrizione;
- $articolo->um = $originale->um;
- $articolo->qta = 1;
- $articolo->costo_unitario = $originale->prezzo_acquisto;
-
- $id_conto = ($dir == 'entrata') ? setting('Conto predefinito fatture di vendita') : setting('Conto predefinito fatture di acquisto');
- if ($dir == 'entrata' && !empty($originale->idconto_vendita)) {
- $id_conto = $originale->idconto_vendita;
- } elseif ($dir == 'uscita' && !empty($originale->idconto_acquisto)) {
- $id_conto = $originale->idconto_acquisto;
- }
- $articolo->idconto = $id_conto;
-
- if ($dir == 'entrata') {
- $id_iva = ($fattura->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita');
- } else {
- $id_iva = ($fattura->anagrafica->idiva_acquisti ?: setting('Iva predefinita'));
- }
- $id_anagrafica = $fattura->idanagrafica;
- $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
-
- // CALCOLO PREZZO UNITARIO
- $prezzo_unitario = 0;
- $sconto = 0;
- // Prezzi netti clienti / listino fornitore
- $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
- FROM mg_prezzi_articoli
- WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
-
- if ($prezzi) {
- foreach ($prezzi as $prezzo) {
- if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) {
- $prezzo_unitario = $prezzo['prezzo_unitario'];
- $sconto = $prezzo['sconto_percentuale'];
- continue;
- }
-
- if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) {
- $prezzo_unitario = $prezzo['prezzo_unitario'];
- $sconto = $prezzo['sconto_percentuale'];
- continue;
- }
- }
- }
- if (empty($prezzo_unitario)) {
- // Prezzi listini clienti
- $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
- FROM mg_listini
- LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
- LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
- WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica));
-
- if ($listino) {
- $prezzo_unitario = $listino['prezzo_unitario_listino'];
- $sconto = $listino['sconto_percentuale_listino'];
- }
- }
-
- if ($dir == 'entrata') {
- $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita);
- } else {
- $prezzo_unitario = $prezzo_unitario ?: $originale->prezzo_acquisto;
- }
-
- $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $fattura->idagente])['provvigione_default'];
-
- $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
- $articolo->setSconto($sconto, 'PRC');
- $articolo->setProvvigione($provvigione ?: 0, 'PRC');
- $articolo->save();
-
-
- flash()->info(tr('Nuovo articolo aggiunto!'));
+ if (!empty($barcode)) {
+ $id_articolo = $dbo->selectOne('mg_articoli', 'id', ['deleted_at' => null, 'attivo' => 1, 'barcode' => $barcode])['id'];
}
- } else {
- $response['error'] = tr('Nessun articolo corrispondente a magazzino');
- echo json_encode($response);
- }
+ if (!empty($id_articolo)) {
+ $permetti_movimenti_sotto_zero = setting('Permetti selezione articoli con quantità minore o uguale a zero in Documenti di Vendita');
+ $qta_articolo = $dbo->selectOne('mg_articoli', 'qta', ['id' => $id_articolo])['qta'];
+
+ $originale = ArticoloOriginale::find($id_articolo);
+
+ if ($qta_articolo <= 0 && !$permetti_movimenti_sotto_zero && !$originale->servizio && $dir == 'entrata') {
+ $response['error'] = tr('Quantità a magazzino non sufficiente');
+ echo json_encode($response);
+ } else {
+ $articolo = Articolo::build($fattura, $originale);
+ $qta = 1;
+
+ $articolo->descrizione = $originale->descrizione;
+ $articolo->um = $originale->um;
+ $articolo->qta = 1;
+ $articolo->costo_unitario = $originale->prezzo_acquisto;
+
+ $id_conto = ($dir == 'entrata') ? setting('Conto predefinito fatture di vendita') : setting('Conto predefinito fatture di acquisto');
+ if ($dir == 'entrata' && !empty($originale->idconto_vendita)) {
+ $id_conto = $originale->idconto_vendita;
+ } elseif ($dir == 'uscita' && !empty($originale->idconto_acquisto)) {
+ $id_conto = $originale->idconto_acquisto;
+ }
+ $articolo->idconto = $id_conto;
+
+ if ($dir == 'entrata') {
+ $id_iva = ($fattura->anagrafica->idiva_vendite ?: $originale->idiva_vendita) ?: setting('Iva predefinita');
+ } else {
+ $id_iva = ($fattura->anagrafica->idiva_acquisti ?: setting('Iva predefinita'));
+ }
+ $id_anagrafica = $fattura->idanagrafica;
+ $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
+
+ // CALCOLO PREZZO UNITARIO
+ $prezzo_unitario = 0;
+ $sconto = 0;
+ // Prezzi netti clienti / listino fornitore
+ $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario
+ FROM mg_prezzi_articoli
+ WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica));
+
+ if ($prezzi) {
+ foreach ($prezzi as $prezzo) {
+ if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) {
+ $prezzo_unitario = $prezzo['prezzo_unitario'];
+ $sconto = $prezzo['sconto_percentuale'];
+ continue;
+ }
+
+ if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) {
+ $prezzo_unitario = $prezzo['prezzo_unitario'];
+ $sconto = $prezzo['sconto_percentuale'];
+ continue;
+ }
+ }
+ }
+ if (empty($prezzo_unitario)) {
+ // Prezzi listini clienti
+ $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
+ FROM mg_listini
+ LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
+ LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
+ WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica));
+
+ if ($listino) {
+ $prezzo_unitario = $listino['prezzo_unitario_listino'];
+ $sconto = $listino['sconto_percentuale_listino'];
+ }
+ }
+
+ if ($dir == 'entrata') {
+ $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita);
+ } else {
+ $prezzo_unitario = $prezzo_unitario ?: $originale->prezzo_acquisto;
+ }
+
+ $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $fattura->idagente])['provvigione_default'];
+
+ $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva);
+ $articolo->setSconto($sconto, 'PRC');
+ $articolo->setProvvigione($provvigione ?: 0, 'PRC');
+ $articolo->save();
+
+
+ flash()->info(tr('Nuovo articolo aggiunto!'));
+ }
+ } else {
+ $response['error'] = tr('Nessun articolo corrispondente a magazzino');
+ echo json_encode($response);
+ }
+ }
break;
// Controllo se impostare anagrafica azienda in base a tipologia documento
@@ -1092,32 +1194,41 @@ switch (post('op')) {
$righe = $post['righe'];
$numero_totale = 0;
- foreach ($righe as $riga) {
- if (($riga['id']) != null) {
- $articolo = Articolo::find($riga['id']);
- } else {
- $originale = ArticoloOriginale::find(post('idarticolo'));
- $articolo = Articolo::build($fattura, $originale);
- $articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
- }
-
- if ($articolo['prezzo_unitario'] != $riga['price']) {
- $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
- $articolo->save();
- ++$numero_totale;
- }
- }
+ // Controllo se la fattura è già stata inviata allo SDI
+ $stato_fe= $dbo->fetchOne('SELECT codice_stato_fe FROM co_documenti WHERE id = '.$fattura->id);
- if ($numero_totale > 1) {
- flash()->info(tr('_NUM_ prezzi modificati!', [
- '_NUM_' => $numero_totale,
- ]));
- } else if ($numero_totale == 1) {
- flash()->info(tr('_NUM_ prezzo modificato!', [
- '_NUM_' => $numero_totale,
+ if ($dir == 'entrata' && $stato_fe['codice_stato_fe'] == 'WAIT') {
+ flash()->warning(tr('La fattura numero _NUM_ è già stata inviata allo SDI, non è possibile effettuare modifiche!', [
+ '_NUM_' => $fattura->numero_esterno,
]));
} else {
- flash()->warning(tr('Nessun prezzo modificato!'));
+ foreach ($righe as $riga) {
+ if (($riga['id']) != null) {
+ $articolo = Articolo::find($riga['id']);
+ } else {
+ $originale = ArticoloOriginale::find(post('idarticolo'));
+ $articolo = Articolo::build($fattura, $originale);
+ $articolo->id_dettaglio_fornitore = post('id_dettaglio_fornitore') ?: null;
+ }
+
+ if ($articolo['prezzo_unitario'] != $riga['price']) {
+ $articolo->setPrezzoUnitario($riga['price'], $articolo->idiva);
+ $articolo->save();
+ ++$numero_totale;
+ }
+ }
+
+ if ($numero_totale > 1) {
+ flash()->info(tr('_NUM_ prezzi modificati!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else if ($numero_totale == 1) {
+ flash()->info(tr('_NUM_ prezzo modificato!', [
+ '_NUM_' => $numero_totale,
+ ]));
+ } else {
+ flash()->warning(tr('Nessun prezzo modificato!'));
+ }
}
break;