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 +'
'; + +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 +''.tr('Seleziona').' | '.tr('Entro il').' | -'.tr('Ragione sociale').' | +'.tr('Ragione sociale').' | '.tr('Importo').' | ||
---|---|---|---|---|---|---|
+
+
+
+ |
+
+ '.dateFormat($pianificazione->data_scadenza).'
+ '.reference($contratto).'
+ |
- if (strtolower($pianificazione->data_scadenza->formatLocalized('%B %Y')) == strtolower($mese)) {
- echo '
+ + '.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),
+ ]).
+ '
+ | ';
+
+ // Pulsanti
+ echo '
+ + + | +||
- '.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), - ]).' - | ';
-
- // Pulsanti
- echo '
- - |