diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 711da097d..3ddf17689 100755 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -94,12 +94,15 @@ if ($dir == 'entrata') { } // Verifica la data dell'intervento rispetto alla data della fattura - $righe_interventi = $fattura->getRighe()->where('idintervento', '!=', null); - if (!empty($righe_interventi)) { - foreach ($righe_interventi as $riga_intervento) { - $intervento = Intervento::find($riga_intervento->idintervento); + $fatturazione_futura = false; + $data_fattura = new Carbon($fattura->data); + $interventi_collegati = $fattura->getDocumentiCollegati()[Intervento::class]; + if (!empty($interventi_collegati)) { + foreach ($interventi_collegati as $intervento) { + $fine_intervento = $intervento->fine ?: $intervento->data_richiesta; + $fine_intervento = new Carbon($fine_intervento); - if ((new Carbon($intervento->fine))->diffInDays(new Carbon($fattura->data), false) < 0) { + if ($fine_intervento->diffInDays($data_fattura, false) < 0) { $fatturazione_futura = true; break; } diff --git a/modules/interventi/modutil.php b/modules/interventi/modutil.php index 288f9e802..b309791b8 100755 --- a/modules/interventi/modutil.php +++ b/modules/interventi/modutil.php @@ -193,6 +193,10 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion $qta_gruppo = $gruppo->sum('ore'); $riga->qta = round($qta_gruppo, $decimals); + // Riferimento al documento di origine + $riga->original_document_type = get_class($intervento); + $riga->original_document_id = $intervento->id; + $riga->save(); } @@ -222,6 +226,10 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion $riga->qta = $gruppo->count(); + // Riferimento al documento di origine + $riga->original_document_type = get_class($intervento); + $riga->original_document_id = $intervento->id; + $riga->save(); } @@ -255,6 +263,10 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion $riga->prezzo_unitario = $viaggio->prezzo_km_unitario; $riga->setSconto($viaggio->scontokm_unitario, $viaggio->tipo_scontokm); + // Riferimento al documento di origine + $riga->original_document_type = get_class($intervento); + $riga->original_document_id = $intervento->id; + $riga->qta = $qta_trasferta; $riga->save(); @@ -265,7 +277,6 @@ function aggiungi_intervento_in_fattura($id_intervento, $id_fattura, $descrizion $righe = $intervento->getRighe(); foreach ($righe as $riga) { $qta = $riga->qta; - $copia = $riga->copiaIn($fattura, $qta); $copia->id_conto = $id_conto; diff --git a/src/Common/Document.php b/src/Common/Document.php index 364f0b674..97eadcc4e 100755 --- a/src/Common/Document.php +++ b/src/Common/Document.php @@ -45,6 +45,41 @@ abstract class Document extends Model implements ReferenceInterface, DocumentInt return static::$movimenta_magazzino; } + /** + * Restituisce tutti i documenti collegati al documento corrente attraverso la procedura di importazione delle righe. + * + * @return \Illuminate\Support\Collection + */ + public function getDocumentiCollegati() + { + $riferimenti = collect([ + $this->descrizioni() + ->select(['original_document_id', 'original_document_type']) + ->get(), + $this->righe() + ->select(['original_document_id', 'original_document_type']) + ->get(), + $this->articoli() + ->select(['original_document_id', 'original_document_type']) + ->get(), + $this->sconti() + ->select(['original_document_id', 'original_document_type']) + ->get(), + ])->flatten(); + + return $riferimenti->reject(function ($item) { + return empty($item->original_document_type); + })->unique(function ($item) { + return $item->original_document_type.'|'.$item->original_document_id; + })->mapToGroups(function ($item) { + return [$item->original_document_type => ($item->original_document_type)::find($item->original_document_id)]; + }); + } + + /** + * Restituisce tutte le righe collegate al documento. + * @return \Illuminate\Support\Collection|iterable + */ public function getRighe() { $results = $this->mergeCollections($this->descrizioni, $this->righe, $this->articoli, $this->sconti); @@ -54,6 +89,12 @@ abstract class Document extends Model implements ReferenceInterface, DocumentInt }); } + /** + * Restituisce la riga con tipo e identificativo corrispondente. + * @param $type + * @param $id + * @return mixed + */ public function getRiga($type, $id) { $righe = $this->getRighe(); @@ -63,6 +104,10 @@ abstract class Document extends Model implements ReferenceInterface, DocumentInt }); } + /** + * Restituisce le righe del documento raggruppate per documento di origine. + * @return \Illuminate\Support\Collection|iterable + */ public function getRigheRaggruppate() { $righe = $this->getRighe(); diff --git a/update/2_4_26.sql b/update/2_4_26.sql index c9c606cf9..9fb8b9a67 100644 --- a/update/2_4_26.sql +++ b/update/2_4_26.sql @@ -101,3 +101,6 @@ UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `dt_causalet` WHERE 1= -- Fix query per la lista newsletter predefinita UPDATE `em_lists` SET `query` = 'SELECT idanagrafica AS id, ''Modules\\\\Anagrafiche\\\\Anagrafica'' AS tipo FROM an_anagrafiche' WHERE `query` = 'SELECT idanagrafica AS id FROM an_anagrafiche WHERE email != '''''; + +-- Fix riferimento documento per righe create da Interventi +UPDATE `co_righe_documenti` SET `original_document_id` = `idintervento`, `original_document_type` = 'Modules\\Interventi\\Intervento' WHERE `idintervento` IS NOT NULL;