diff --git a/plugins/pianificazione_fatturazione/actions.php b/plugins/pianificazione_fatturazione/actions.php index 38d1dc126..5e642b0a2 100755 --- a/plugins/pianificazione_fatturazione/actions.php +++ b/plugins/pianificazione_fatturazione/actions.php @@ -17,6 +17,7 @@ * along with this program. If not, see . */ + use Modules\Articoli\Articolo as ArticoloOriginale; use Modules\Contratti\Components\Articolo; use Modules\Contratti\Components\Riga; @@ -196,4 +197,61 @@ switch ($operazione) { $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(); + + } + + flash()->info(tr('Rate fatturate correttamente!')); + break; + + redirect(base_path().'/controller.php?id_module=14'); } + diff --git a/plugins/pianificazione_fatturazione/ajax_rate.php b/plugins/pianificazione_fatturazione/ajax_rate.php new file mode 100644 index 000000000..a7398611f --- /dev/null +++ b/plugins/pianificazione_fatturazione/ajax_rate.php @@ -0,0 +1,97 @@ +. + */ + +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_multipla.php b/plugins/pianificazione_fatturazione/crea_fattura_multipla.php new file mode 100644 index 000000000..442fca1ad --- /dev/null +++ b/plugins/pianificazione_fatturazione/crea_fattura_multipla.php @@ -0,0 +1,109 @@ +. + */ + +use Plugins\PianificazioneFatturazione\Pianificazione; +include_once __DIR__.'/../../core.php'; + +$records = json_decode(get('records'), true); + +if (empty($records)) { + echo '

'.tr('Nessuna rata selezionata').'.

'; + return; +} + +//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" ]} +
+
'; + + +echo + '
+
+ +
+
+
'; +echo +''; \ No newline at end of file diff --git a/plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php b/plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php index 4bfe6cf13..4eef23de2 100644 --- a/plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php +++ b/plugins/pianificazione_fatturazione/widgets/rate_contrattuali.php @@ -21,108 +21,364 @@ 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'); }); }) + ->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; -} -$raggruppamenti = $pianificazioni->groupBy(function ($item) { - return ucfirst($item->data_scadenza->formatLocalized('%B %Y')); -}); - -$counter = 0; -foreach ($raggruppamenti as $mese => $raggruppamento) { - ++$counter; - - // Se cambia il mese ricreo l'intestazione della tabella - if ($counter == 1) { - $attr = ''; - $class = 'fa-minus-circle'; - } else { - $attr = 'style="display:none;"'; - $class = 'fa-plus-circle'; + 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')); + }); + + - echo " -

- - ".$mese.' - -

'; +echo +'
+
+
+
+
+
'; + for ($i=1; $i<=12; $i++) { + + $btnType = ($i == date('m'))? "btn-primary":""; + echo + ''; } - } - echo ' - - + echo + '
'; + + echo + ''; + ?> + +
+
+
+ +
+
+
+ + + + + + + + + + + + + '; + + // Elenco fatture da emettere + foreach ($pianificazioni as $pianificazione) { + $contratto = $pianificazione->contratto; + $anagrafica = $contratto->anagrafica; + $numero_pianificazioni = $contratto->pianificazioni()->count(); + echo ' + + + + + '; + + // Pulsanti + echo ' + + '; + } + + echo + ' + + + + + + + + + + + + + +
'.tr('').''.tr('Scadenza').''.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), + ]). + ' +
+ +
+
+ +
+
+
+ +
+ +
+ +
+ +

+ '; + ?> +
+
+ + +
+ + +
+ '; -} $modulo_pianificazione = Modules::get('Contratti'); $plugin_pianificazione = Plugins::get('Pianificazione fatturazione'); + + echo ' '; +function crea_fattura_multipla($this) { + var $table = $("table"); + var $rows = $table.find("tbody"); + var fatture = []; + $rows.find("input[type=checkbox]").each(function() { + if ($(this).is(":checked")) { + fatture.push($(this)); + } + }); + $fatture = $(fatture); + records = [] + for (var i=0; i<$fatture.length; i++) { + records.push( + { + rata: $fatture[i].attr("data-pianificazioneId"), + contratto: $fatture[i].attr("data-contrattoId"), + } + ); + } + records = JSON.stringify(records); + console.log(records); + if (records.length > 0) { + openModal( + "Crea fattura multipla", + "' . $plugin_pianificazione->fileurl('crea_fattura_multipla.php') . '?id_module=' . $modulo_pianificazione->id . + '&id_plugin=' . $plugin_pianificazione->id . '&records=" + records + ); + } +} +var 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", +}; + +init(); +'; \ No newline at end of file