From dd56baaf6b1c614e1b6c8099651b8a60435cbc00 Mon Sep 17 00:00:00 2001 From: Michel Oliverio Date: Thu, 24 Nov 2022 11:54:44 +0100 Subject: [PATCH 1/2] pianificazione fatturazione --- .../pianificazione_fatturazione/actions.php | 55 +++ .../add_pianificazione.php | 0 .../pianificazione_fatturazione/ajax_rate.php | 96 +++++ .../crea_fattura.php | 0 .../crea_fattura_multipla.php | 161 +++++++ plugins/pianificazione_fatturazione/edit.php | 0 .../src/Pianificazione.php | 0 .../widgets/rate_contrattuali.php | 396 +++++++++++++++--- 8 files changed, 645 insertions(+), 63 deletions(-) mode change 100755 => 100644 plugins/pianificazione_fatturazione/actions.php mode change 100755 => 100644 plugins/pianificazione_fatturazione/add_pianificazione.php create mode 100644 plugins/pianificazione_fatturazione/ajax_rate.php mode change 100755 => 100644 plugins/pianificazione_fatturazione/crea_fattura.php create mode 100644 plugins/pianificazione_fatturazione/crea_fattura_multipla.php mode change 100755 => 100644 plugins/pianificazione_fatturazione/edit.php mode change 100755 => 100644 plugins/pianificazione_fatturazione/src/Pianificazione.php diff --git a/plugins/pianificazione_fatturazione/actions.php b/plugins/pianificazione_fatturazione/actions.php old mode 100755 new mode 100644 index a096e36fe..9a8cb1772 --- a/plugins/pianificazione_fatturazione/actions.php +++ b/plugins/pianificazione_fatturazione/actions.php @@ -156,6 +156,7 @@ switch ($operazione) { $id_rata = post('rata'); $accodare = post('accodare'); $pianificazione = Pianificazione::find($id_rata); + $contratto = $pianificazione->contratto; $data = post('data'); @@ -174,6 +175,7 @@ switch ($operazione) { } else { $fattura = Fattura::find($id_documento); } + $fattura->note = post('note'); $fattura->save(); @@ -181,6 +183,7 @@ switch ($operazione) { // Copia righe $righe = $pianificazione->getRighe(); + foreach ($righe as $riga) { $copia = $riga->copiaIn($fattura, $riga->qta); $copia->id_conto = $id_conto; @@ -189,7 +192,59 @@ switch ($operazione) { // Salvataggio fattura nella pianificazione $pianificazione->fattura()->associate($fattura); + $pianificazione->save(); break; + + case 'add_fattura_multipla': + $rate = post('rata'); + + $data = post('data'); + $accodare = post('accodare'); + $id_segment = post('id_segment'); + $id_tipodocumento = post('idtipodocumento'); + $tipo = Tipo::find($id_tipodocumento); + + foreach ($rate as $i => $rata) { + $id_rata = $rata; + + $pianificazione = Pianificazione::find($id_rata); + + $contratto = $pianificazione->contratto; + if (!empty($accodare)) { + $documento = $dbo->fetchOne( + 'SELECT co_documenti.id FROM co_documenti INNER JOIN co_statidocumento ON co_documenti.idstatodocumento = co_statidocumento.id + WHERE co_statidocumento.descrizione = \'Bozza\' AND idanagrafica = '.prepare($contratto->idanagrafica) + ); + + $id_documento = $documento['id']; + } + + // Creazione fattura + if (empty($id_documento)) { + $fattura = Fattura::build($contratto->anagrafica, $tipo, $data, $id_segment); + } else { + $fattura = Fattura::find($id_documento); + } + + $fattura->note = ""; + $fattura->save(); + + $id_conto = post('id_conto'); + + // Copia righe + $righe = $pianificazione->getRighe(); + + foreach ($righe as $riga) { + $copia = $riga->copiaIn($fattura, $riga->qta); + $copia->id_conto = $id_conto; + $copia->save(); + } + + // Salvataggio fattura nella pianificazione + $pianificazione->fattura()->associate($fattura); + $pianificazione->save(); + } + break; } diff --git a/plugins/pianificazione_fatturazione/add_pianificazione.php b/plugins/pianificazione_fatturazione/add_pianificazione.php old mode 100755 new mode 100644 diff --git a/plugins/pianificazione_fatturazione/ajax_rate.php b/plugins/pianificazione_fatturazione/ajax_rate.php new file mode 100644 index 000000000..c7063c5c2 --- /dev/null +++ b/plugins/pianificazione_fatturazione/ajax_rate.php @@ -0,0 +1,96 @@ +. + */ + +use Plugins\PianificazioneFatturazione\Pianificazione; +use Illuminate\Support\Facades\DB; + +include_once __DIR__.'/../../core.php'; + +$action = post("action"); +$ret = ""; +switch ($action) { + case "update_table": + $month = post("currentMonth"); + $year = post("currentYear"); + + $pianificazioni = Pianificazione::doesntHave('fattura') + ->whereHas('contratto', function ($q) { + $q->whereHas('stato', function ($q) { + $q + ->where('is_fatturabile', 1) + ->where('descrizione', '<>', 'Concluso'); + }); + }) + ->whereYear('co_fatturazione_contratti.data_scadenza', $year) + ->whereMonth('co_fatturazione_contratti.data_scadenza', $month); + + $pianificazioni = $pianificazioni->get(); + + $ret = []; + foreach ($pianificazioni as $pianificazione) { + $contratto = $pianificazione->contratto; + $anagrafica = $contratto->anagrafica; + $numero_pianificazioni = $contratto->pianificazioni()->count(); + + $ret[] = [ + "idPianificazione" => $pianificazione->id, + "idContratto" => $pianificazione->idcontratto, + "dataScadenza" => dateFormat($pianificazione->data_scadenza), + "contratto" => reference($contratto), + "ragioneSociale" => Modules::link('Anagrafiche', $anagrafica->id, nl2br($anagrafica->ragione_sociale)), + "totale" => moneyFormat($pianificazione->totale), + "importo" => tr('Rata _IND_/_NUM_ (totale: _TOT_)', [ + '_IND_' => numberFormat($pianificazione->getNumeroPianificazione(), 0), + '_NUM_' => numberFormat($numero_pianificazioni, 0), + '_TOT_' => moneyFormat($contratto->totale), + ]), + ]; + } + + break; + + case "update_month": + $year = post("currentYear"); + + $pianificazioni = Pianificazione::doesntHave('fattura') + ->whereHas('contratto', function ($q) { + $q->whereHas('stato', function ($q) { + $q + ->where('is_fatturabile', 1) + ->where('descrizione', '<>', 'Concluso'); + }); + }) + ->whereYear('co_fatturazione_contratti.data_scadenza', $year) + ->get(); + + $raggruppamenti = $pianificazioni->groupBy(function ($item) { + return ucfirst($item->data_scadenza->format('m')); + }); + + $ret = []; + foreach ($raggruppamenti as $i => $item) { + $ret[intval($i)] = count($item); + } + + break; +} + + +echo json_encode($ret); + diff --git a/plugins/pianificazione_fatturazione/crea_fattura.php b/plugins/pianificazione_fatturazione/crea_fattura.php old mode 100755 new mode 100644 diff --git a/plugins/pianificazione_fatturazione/crea_fattura_multipla.php b/plugins/pianificazione_fatturazione/crea_fattura_multipla.php new file mode 100644 index 000000000..492fcb34e --- /dev/null +++ b/plugins/pianificazione_fatturazione/crea_fattura_multipla.php @@ -0,0 +1,161 @@ +. + */ + +use Plugins\PianificazioneFatturazione\Pianificazione; +include_once __DIR__.'/../../core.php'; + +$records = json_decode(get('records'), true); +//print_r($records); +//echo ''; +foreach ($records as $j => $record) { + $id_rata[$j] = $record['rata']; + $pianificazione[$j] = Pianificazione::find($id_rata); + $contratto[$j] = $pianificazione->contratto; + $id_pianificazione[$j] = $pianificazione->id; + + foreach ($contratto[$j]->pianificazioni as $i => $p) { + if ($p->id == $id_pianificazione[$i]) { + $numero_rata[$i] = $i + 1; + break; + } + } +} + + + +$module_fattura = Modules::get('Fatture di vendita'); +$id_conto = setting('Conto predefinito fatture di vendita'); + +echo +'
+ + + + '; + + foreach ($records as $j => $record) { + echo + ''; + } + + // Data + echo ' +
+
+ {[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1, "class": "text-center", "value": "'. date("Y-m-d") .'" ]} +
'; + + //Tipo di documento + echo ' +
+ {[ "type": "select", "label": "'.tr('Tipo di fattura').'", "name": "idtipodocumento", "required": 1, "values": "query=SELECT * FROM co_tipidocumento WHERE dir=\'entrata\'" ]} +
'; + + // Sezionale + echo + '
+ {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module='.$module_fattura['id'].' ORDER BY name", "value":"'.$_SESSION['module_'.$module_fattura['id']]['id_segment'].'" ]} +
'; + + // Conto + echo ' +
+ {[ "type": "select", "label": "'.tr('Conto').'", "name": "id_conto", "required": 1, "value": "'.$id_conto.'", "ajax-source": "conti-vendite" ]} +
'; + + //Accoda a fatture non emesse + echo + '
+ {[ "type": "checkbox", "label": "'.tr('Aggiungere alle fatture di vendita non ancora emesse?').'", "placeholder": "'.tr('Aggiungere alle fatture di vendita nello stato bozza?').'", "name": "accodare" ]} +
+
'; + +//gestione replace +/*$descrizione = get_var('Descrizione fattura pianificata'); +$modules = MODULES::get('Contratti')['id']; +$variables = include Modules::filepath($modules, 'variables.php'); +foreach ($variables as $variable => $value) { + $descrizione = str_replace('{'.$variable.'}', $value, $descrizione); +} +$descrizione = str_replace('{rata}', $numero_rata, $descrizione); +$descrizione = str_replace('{zona}', $zona, $descrizione); + +echo ' +
+
+ {[ "type": "textarea", "label": "'.tr('Note della fattura').'", "name": "note", "value": "'.$descrizione.'" ]} +
+
'; + +// Righe +echo ' +
+
+

+ '.tr('Righe previste').' +

+
+
+ + + + + + + + + + + '; + +$righe = $pianificazione[0]->getRighe(); +foreach ($righe as $riga) { + echo ' + + + + + + + '; +} + +echo ' + +
'.tr('Descrizione').''.tr('Q.tà').''.tr('Prezzo unitario').''.tr('IVA').''.tr('Totale imponbile').'
'.$riga->descrizione.''.$riga->qta.''.moneyFormat($riga->prezzo_unitario).' + '.moneyFormat($riga->iva).'
+ '.$riga->aliquota->descrizione.' +
'.moneyFormat($riga->totale_imponibile).'
+
+
';*/ + +echo + '
+
+ +
+
+
'; + +echo +''; diff --git a/plugins/pianificazione_fatturazione/edit.php b/plugins/pianificazione_fatturazione/edit.php old mode 100755 new mode 100644 diff --git a/plugins/pianificazione_fatturazione/src/Pianificazione.php b/plugins/pianificazione_fatturazione/src/Pianificazione.php old mode 100755 new mode 100644 diff --git a/plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php b/plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php index 4bfe6cf13..270faba69 100644 --- a/plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php +++ b/plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php @@ -21,108 +21,378 @@ use Plugins\PianificazioneFatturazione\Pianificazione; include_once __DIR__.'/../../../core.php'; +$mesi = [ + 1 => 'Gennaio', + 2 => 'Febbraio', + 3 => 'Marzo', + 4 => 'Aprile', + 5 => 'Maggio', + 6 => 'Giugno', + 7 => 'Luglio', + 8 => 'Agosto', + 9 => 'Settembre', + 10 => 'Ottobre', + 11 => 'Novembre', + 12 => 'Dicembre', +]; + $pianificazioni = Pianificazione::doesntHave('fattura') - ->orderBy('data_scadenza', 'asc') ->whereHas('contratto', function ($q) { $q->whereHas('stato', function ($q) { - $q->where('is_fatturabile', 1); + $q + ->where('is_fatturabile', 1) + ->where('descrizione', '<>', 'Concluso'); }); }) - ->get(); -if ($pianificazioni->isEmpty()) { - echo ' -

'.tr('Non ci sono fatture da emettere').'.

'; + ->whereYear('co_fatturazione_contratti.data_scadenza', date('Y')) + ->whereMonth('co_fatturazione_contratti.data_scadenza', date('m'))->get(); +if ($pianificazioni->isEmpty()) { + echo '

'.tr('Non ci sono fatture da emettere').'.

'; return; } +$conteggio = Pianificazione::doesntHave('fattura') + ->selectRaw('month(co_fatturazione_contratti.data_scadenza) mese, count(*) conto') + ->whereHas('contratto', function ($q) { + $q->whereHas('stato', function ($q) { + $q + ->where('is_fatturabile', 1) + ->where('descrizione', '<>', 'Concluso'); + }); + }) + ->whereYear('co_fatturazione_contratti.data_scadenza', date('Y')) + ->groupBy('mese') + ->get(); + $raggruppamenti = $pianificazioni->groupBy(function ($item) { return ucfirst($item->data_scadenza->formatLocalized('%B %Y')); }); -$counter = 0; -foreach ($raggruppamenti as $mese => $raggruppamento) { - ++$counter; +echo +'
+
+ +
+
'; - echo ' -
- + for ($i=1; $i<=12; $i++) { + $btnType = ($i == date('m'))? "btn-primary" : "btn-light"; + echo + ''; + } + + echo + ' +'; + +echo +''; +?> + +
+
+ +
+
+ + +
+
+ + + +
+ - + - '; - // Elenco fatture da emettere - foreach ($pianificazioni as $pianificazione) { - $contratto = $pianificazione->contratto; - $anagrafica = $contratto->anagrafica; - $numero_pianificazioni = $contratto->pianificazioni()->count(); + // Elenco fatture da emettere + foreach ($pianificazioni as $pianificazione) { + $contratto = $pianificazione->contratto; + $anagrafica = $contratto->anagrafica; + $numero_pianificazioni = $contratto->pianificazioni()->count(); + echo ' + + + - if (strtolower($pianificazione->data_scadenza->formatLocalized('%B %Y')) == strtolower($mese)) { - echo ' + + + '; + + // Pulsanti + echo ' + + '; + } + + echo + ' + - + - - '; - - // Pulsanti - echo ' - + - '; - } - } - - echo ' - + +
'.tr('Seleziona').' '.tr('Entro il').''.tr('Ragione sociale').''.tr('Ragione sociale').' '.tr('Importo').'
+
+ +
+
+
'.dateFormat($pianificazione->data_scadenza).'
+ '.reference($contratto).' +
+ '.Modules::link('Anagrafiche', $anagrafica->id, nl2br($anagrafica->ragione_sociale)).' + +
'.moneyFormat($pianificazione->totale).'
+ '.tr('Rata _IND_/_NUM_ (totale: _TOT_)', [ + '_IND_' => numberFormat($pianificazione->getNumeroPianificazione(), 0), + '_NUM_' => numberFormat($numero_pianificazioni, 0), + '_TOT_' => moneyFormat($contratto->totale), + ]). + ' +
+ +
- '.dateFormat($pianificazione->data_scadenza).' -
'.reference($contratto).' +
+
+ +
+
+
+
- '.Modules::link('Anagrafiche', $anagrafica->id, nl2br($anagrafica->ragione_sociale)).' + - '.moneyFormat($pianificazione->totale).'
- '.tr('Rata _IND_/_NUM_ (totale: _TOT_)', [ - '_IND_' => numberFormat($pianificazione->getNumeroPianificazione(), 0), - '_NUM_' => numberFormat($numero_pianificazioni, 0), - '_TOT_' => moneyFormat($contratto->totale), - ]).' -
- +
+ +
+
+
+ +
+
+ +
'; -} + $modulo_pianificazione = Modules::get('Contratti'); $plugin_pianificazione = Plugins::get('Pianificazione fatturazione'); + + echo ' '; From 55f440b312023b5a22e43651a88a65b02b6b8c4a Mon Sep 17 00:00:00 2001 From: Michel Oliverio Date: Thu, 24 Nov 2022 12:06:11 +0100 Subject: [PATCH 2/2] fix pianificazione fatturazione --- .../pianificazione_fatturazione/actions.php | 4 -- .../crea_fattura_multipla.php | 59 ------------------- 2 files changed, 63 deletions(-) diff --git a/plugins/pianificazione_fatturazione/actions.php b/plugins/pianificazione_fatturazione/actions.php index 9a8cb1772..861959021 100644 --- a/plugins/pianificazione_fatturazione/actions.php +++ b/plugins/pianificazione_fatturazione/actions.php @@ -156,7 +156,6 @@ switch ($operazione) { $id_rata = post('rata'); $accodare = post('accodare'); $pianificazione = Pianificazione::find($id_rata); - $contratto = $pianificazione->contratto; $data = post('data'); @@ -175,7 +174,6 @@ switch ($operazione) { } else { $fattura = Fattura::find($id_documento); } - $fattura->note = post('note'); $fattura->save(); @@ -183,7 +181,6 @@ switch ($operazione) { // Copia righe $righe = $pianificazione->getRighe(); - foreach ($righe as $riga) { $copia = $riga->copiaIn($fattura, $riga->qta); $copia->id_conto = $id_conto; @@ -192,7 +189,6 @@ switch ($operazione) { // Salvataggio fattura nella pianificazione $pianificazione->fattura()->associate($fattura); - $pianificazione->save(); break; diff --git a/plugins/pianificazione_fatturazione/crea_fattura_multipla.php b/plugins/pianificazione_fatturazione/crea_fattura_multipla.php index 492fcb34e..020921dba 100644 --- a/plugins/pianificazione_fatturazione/crea_fattura_multipla.php +++ b/plugins/pianificazione_fatturazione/crea_fattura_multipla.php @@ -86,65 +86,6 @@ echo
'; -//gestione replace -/*$descrizione = get_var('Descrizione fattura pianificata'); -$modules = MODULES::get('Contratti')['id']; -$variables = include Modules::filepath($modules, 'variables.php'); -foreach ($variables as $variable => $value) { - $descrizione = str_replace('{'.$variable.'}', $value, $descrizione); -} -$descrizione = str_replace('{rata}', $numero_rata, $descrizione); -$descrizione = str_replace('{zona}', $zona, $descrizione); - -echo ' -
-
- {[ "type": "textarea", "label": "'.tr('Note della fattura').'", "name": "note", "value": "'.$descrizione.'" ]} -
-
'; - -// Righe -echo ' -
-
-

- '.tr('Righe previste').' -

-
-
- - - - - - - - - - - '; - -$righe = $pianificazione[0]->getRighe(); -foreach ($righe as $riga) { - echo ' - - - - - - - '; -} - -echo ' - -
'.tr('Descrizione').''.tr('Q.tà').''.tr('Prezzo unitario').''.tr('IVA').''.tr('Totale imponbile').'
'.$riga->descrizione.''.$riga->qta.''.moneyFormat($riga->prezzo_unitario).' - '.moneyFormat($riga->iva).'
- '.$riga->aliquota->descrizione.' -
'.moneyFormat($riga->totale_imponibile).'
-
-
';*/ - echo '