. */ use Models\Module; use Modules\Contratti\Stato as StatoContratto; use Modules\DDT\Stato; use Modules\Fatture\Stato as StatoFattura; use Modules\Ordini\Stato as StatoOrdine; use Plugins\ListinoFornitori\DettaglioFornitore; // Inizializzazione $documento = $options['documento']; $documento_finale = $options['documento_finale']; if (empty($documento)) { return; } // Informazioni utili $dir = $documento->direzione; $original_module = Module::find((new Module())->getByField('name', $documento->module)); $name = !empty($documento_finale) ? $documento_finale->module : $options['module']; $final_module = Module::find((new Module())->getByField('name', $name)); $id_segment = $_SESSION['module_'.$final_module->id]['id_segment']; // IVA predefinita $id_iva = $id_iva ?: setting('Iva predefinita'); $righe_totali = $documento->getRighe(); if ($final_module->getTranslation('name') == 'Interventi') { $righe = $righe_totali->where('is_descrizione', '=', 0) ->where('qta_rimanente', '>', 0); $righe_evase = $righe_totali->where('is_descrizione', '=', 0) ->where('qta_rimanente', '=', 0); } elseif ($final_module->getTranslation('name') == 'Ordini fornitore') { $righe = $righe_totali; $righe_evase = collect(); } else { $righe = $righe_totali->where('qta_rimanente', '>', 0); $righe_evase = $righe_totali->where('qta_rimanente', '=', 0); } if ($righe->isEmpty()) { echo '

'.tr('Non ci sono elementi da evadere').'...

'; return; } $link = !empty($documento_finale) ? base_path().'/editor.php?id_module='.$final_module->id.'&id_record='.$documento_finale->id : base_path().'/controller.php?id_module='.$final_module->id; echo '
'; // Creazione fattura dal documento if (!empty($options['create_document'])) { echo '

'.tr('Nuovo documento').'

{[ "type": "date", "label": "'.tr('Data del documento').'", "name": "data", "required": 1, "value": "-now-" ]}
'; // Opzioni aggiuntive per le Fatture if (in_array($final_module->getTranslation('name'), ['Fatture di vendita', 'Fatture di acquisto'])) { $stato_predefinito = (new StatoFattura())->getByField('name', 'Bozza'); if (!empty($options['reversed'])) { $idtipodocumento = database()->fetchOne('SELECT `co_tipidocumento`.`id` FROM `co_tipidocumento` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento_lang`.`id_record` = `co_tipidocumento`.`id` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `name` = "Nota di credito" AND `dir` = \''.$dir.'\'')['id']; } elseif (in_array($original_module->getTranslation('name'), ['Ddt di vendita', 'Ddt di acquisto'])) { $idtipodocumento = database()->fetchOne('SELECT `co_tipidocumento`.`id` FROM `co_tipidocumento` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento_lang`.`id_record` = `co_tipidocumento`.`id` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `name` = '.($dir == 'uscita' ? 'Fattura differita di acquisto' : 'Fattura differita di vendita').' AND `dir` = \''.$dir.'\'')['id']; } else { $idtipodocumento = database()->fetchOne('SELECT `co_tipidocumento`.`id` FROM `co_tipidocumento` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento_lang`.`id_record` = `co_tipidocumento`.`id` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `dir` = \''.$dir.'\' AND `predefined` = 1')['id']; } echo '
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `co_statidocumento`.`id` as id, `co_statidocumento_lang`.`name` as descrizione FROM `co_statidocumento` LEFT JOIN `co_statidocumento_lang` ON (`co_statidocumento`.`id` = `co_statidocumento_lang`.`id_record` AND `co_statidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `name` IN (\'Emessa\', \'Bozza\')", "value": "'.$stato_predefinito.'"]}
{[ "type": "select", "label": "'.tr('Tipo documento').'", "name": "idtipodocumento", "required": 1, "values": "query=SELECT `co_tipidocumento`.`id`, CONCAT(`codice_tipo_documento_fe`, \' - \', `name`) AS descrizione FROM `co_tipidocumento` LEFT JOIN `co_tipidocumento_lang` ON (`co_tipidocumento`.`id` = `co_tipidocumento_lang`.`id_record` AND `co_tipidocumento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `enabled` = 1 AND `dir` = '.prepare($dir).' ORDER BY `codice_tipo_documento_fe`", "value": "'.$idtipodocumento.'" ]}
{[ "type": "select", "label": "'.tr('Ritenuta previdenziale').'", "name": "id_ritenuta_contributi", "value": "$id_ritenuta_contributi$", "values": "query=SELECT * FROM co_ritenuta_contributi" ]}
'; } // Opzioni aggiuntive per gli Interventi elseif ($final_module->getTranslation('name') == 'Interventi') { echo '
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato_intervento", "required": 1, "values": "query=SELECT `in_statiintervento`.`id`, `in_statiintervento_lang`.`name` as `descrizione`, `colore` AS _bgcolor_ FROM `in_statiintervento` LEFT JOIN `in_statiintervento_lang` ON (`in_statiintervento`.`id` = `in_statiintervento_lang`.`id_record` AND `in_statiintervento_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `deleted_at` IS NULL AND `is_completato` = 0 ORDER BY `name`" ]}
{[ "type": "select", "label": "'.tr('Tipo').'", "name": "id_tipo_intervento", "required": 1, "ajax-source": "tipiintervento" ]}
'; } // Opzioni aggiuntive per i Contratti elseif ($final_module->getTranslation('name') == 'Contratti') { $stato_predefinito = (new StatoContratto())->getByField('name', 'Bozza'); echo '
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `co_staticontratti`.`id`, `co_staticontratti_lang`.`name` AS descrizione FROM `co_staticontratti` LEFT JOIN `co_staticontratti_lang` ON (`co_staticontratti`.`id` = `co_staticontratti_lang`.`id_record` AND `co_staticontratti_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')", "value": "'.$stato_predefinito.'" ]}
'; } // Opzioni aggiuntive per i DDT elseif (in_array($final_module->getTranslation('name'), ['Ddt di vendita', 'Ddt di acquisto'])) { $stato_predefinito = (new Stato())->getByField('name', 'Bozza'); echo '
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * FROM `dt_statiddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).')", "value": "'.$stato_predefinito.'" ]}
{[ "type": "select", "label": "'.tr('Causale trasporto').'", "name": "id_causale_trasporto", "required": 1, "ajax-source": "causali", "icon-after": "add|'.(new Module())->getByField('name', 'Causali').'", "help": "'.tr('Definisce la causale del trasporto').'" ]}
'; } // Opzioni aggiuntive per gli Ordini elseif (in_array($final_module->getTranslation('name'), ['Ordini cliente', 'Ordini fornitore'])) { $stato_predefinito = (new StatoOrdine())->getByField('name', 'Bozza'); echo '
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * ,`or_statiordine`.`id`, `or_statiordine_lang`.`name` AS descrizione FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `name` IN(\'Bozza\', \'Accettato\', \'In attesa di conferma\', \'Annullato\')", "value": "'.$stato_predefinito.'" ]}
'; } // Selezione fornitore per Ordine fornitore if ($options['op'] == 'add_ordine_cliente' || $options['op'] == 'add_intervento' || $options['op'] == 'add_ordine_fornitore') { $tipo_anagrafica = $options['op'] == 'add_intervento' ? tr('Cliente') : tr('Fornitore'); $ajax = $options['op'] == 'add_intervento' ? 'clienti' : 'fornitori'; echo '
{[ "type": "select", "label": "'.$tipo_anagrafica.'", "name": "idanagrafica", "required": 1, "ajax-source": "'.$ajax.'", "icon-after": "add|'.(new Module())->getByField('name', 'Anagrafiche').'|tipoanagrafica='.$tipo_anagrafica.'" ]}
'; } echo '
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $final_module->id, 'is_sezionale' => 1]).', "value": "'.$database->selectOne('co_tipidocumento', 'id_segment', ['id' => $idtipodocumento])['id_segment'].'" ]}
'; } // Conto, rivalsa INPS, ritenuta d'acconto e ritenuta previdenziale if (in_array($final_module->getTranslation('name'), ['Fatture di vendita', 'Fatture di acquisto']) && !in_array($original_module->getTranslation('name'), ['Fatture di vendita', 'Fatture di acquisto'])) { $id_rivalsa_inps = setting('Cassa previdenziale predefinita'); if ($dir == 'uscita') { $id_ritenuta_acconto = $documento->anagrafica->id_ritenuta_acconto_acquisti; } else { $id_ritenuta_acconto = $documento->anagrafica->id_ritenuta_acconto_vendite ?: setting("Ritenuta d'acconto predefinita"); } $calcolo_ritenuta_acconto = setting("Metodologia calcolo ritenuta d'acconto predefinito"); $show_ritenuta_contributi = !empty($documento_finale['id_ritenuta_contributi']); $id_conto = $documento_finale['idconto']; if (empty($id_conto)) { $id_conto = $dir == 'entrata' ? setting('Conto predefinito fatture di vendita') : setting('Conto predefinito fatture di acquisto'); } echo '

'.tr('Opzioni generali delle righe').'

'; echo '
'; // Rivalsa INPS echo '
{[ "type": "select", "label": "'.tr('Rivalsa').'", "name": "id_rivalsa_inps", "value": "'.$id_rivalsa_inps.'", "values": "query=SELECT * FROM co_rivalse", "help": "'.($options['dir'] == 'entrata' ? setting('Tipo Cassa Previdenziale') : null).'" ]}
'; // Ritenuta d'acconto echo '
{[ "type": "select", "label": "'.tr("Ritenuta d'acconto").'", "name": "id_ritenuta_acconto", "value": "'.$id_ritenuta_acconto.'", "values": "query=SELECT * FROM co_ritenutaacconto" ]}
'; // Calcola ritenuta d'acconto su echo '
{[ "type": "select", "label": "'.tr("Calcola ritenuta d'acconto su").'", "name": "calcolo_ritenuta_acconto", "value": "'.$calcolo_ritenuta_acconto.'", "values": "list=\"IMP\":\"Imponibile\", \"IMP+RIV\":\"Imponibile + rivalsa\"", "required": "1" ]}
'; echo '
'; $width = $show_ritenuta_contributi ? 6 : 12; echo '
'; // Ritenuta previdenziale if ($show_ritenuta_contributi) { echo '
{[ "type": "checkbox", "label": "'.tr('Ritenuta previdenziale').'", "name": "ritenuta_contributi", "value": "1" ]}
'; } // Conto echo '
{[ "type": "select", "label": "'.tr('Conto').'", "name": "id_conto", "required": 1, "value": "'.$id_conto.'", "ajax-source": "'.($dir == 'entrata' ? 'conti-vendite' : 'conti-acquisti').'" ]}
'; } $has_serial = 0; if (!empty($options['serials'])) { foreach ($righe as $riga) { if (!empty($riga['abilita_serial'])) { $serials = $riga->serials ?: 0; if (!empty($serials)) { $has_serial = 1; } } } } // Righe del documento echo '

'.tr('Righe da importare').'

'; if (!empty($has_serial)) { echo ' '; } echo ' '; foreach ($righe as $i => $riga) { if ($final_module->getTranslation('name') == 'Ordini fornitore') { $qta_rimanente = $riga['qta']; } else { $qta_rimanente = $riga['qta_rimanente']; } $attr = 'checked="checked"'; if ($original_module->getTranslation('name') == 'Preventivi') { if (empty($riga['confermato']) && $riga['is_descrizione'] == 0) { $attr = ''; } } // Descrizione echo ' '; // Q.tà rimanente echo ' '; // Q.tà da evadere echo ' '; echo ' '; // Seriali if (!empty($has_serial)) { echo ' '; } echo ' '; } // Totale echo '
'.tr('Descrizione').' '.tr('Q.tà').' '.tr('Q.tà da evadere').' '.tr('Subtot.').''.tr('Seriali').'
'; $descrizione = ($riga->isArticolo() ? $riga->articolo->codice.' - ' : '').$riga['descrizione']; echo ' '.nl2br($descrizione); if ($riga->isArticolo()) { $dettaglio_fornitore = DettaglioFornitore::where('id_articolo', $riga->idarticolo) ->where('id_fornitore', $documento->idanagrafica) ->first(); if (!empty($dettaglio_fornitore->codice_fornitore)) { echo '
'.tr('Codice fornitore ').': '.$dettaglio_fornitore->codice_fornitore.''; } } if ($riga->isArticolo() && !empty($riga->abilita_serial)) { $serials = $riga->serials; $mancanti = abs($riga->qta) - count($serials); if (!empty($mancanti)) { echo '
'.tr('_NUM_ serial mancanti', [ '_NUM_' => $mancanti, ]).''; } } echo '
'.numberFormat($qta_rimanente).' {[ "type": "number", "name": "qta_da_evadere['.$riga['id'].']", "id": "qta_'.$i.'", "required": 1, "value": "'.$qta_rimanente.'", "decimals": "qta", "min-value": "0", "extra": "'.(($riga['is_descrizione']) ? 'readonly' : '').' onkeyup=\"ricalcolaTotaleRiga('.$i.');\"" ]} '; if (!empty($riga['abilita_serial'])) { $serials = $riga->serials; $list = []; foreach ($serials as $serial) { $list[] = [ 'id' => $serial, 'text' => $serial, ]; } if (!empty($serials)) { echo ' {[ "type": "select", "name": "serial['.$riga['id'].'][]", "id": "serial_'.$i.'", "multiple": 1, "values": '.json_encode($list).', "value": "'.implode(',', $serials).'", "extra": "data-maximum=\"'.intval($riga['qta_rimanente']).'\"" ]}'; } } echo '
'.tr('Totale').':
'; // Elenco righe evase completametne if (!$righe_evase->isEmpty()) { echo '

'.tr('Righe evase completamente').'

'; foreach ($righe_evase as $riga) { echo ' '; } echo '
'.tr('Descrizione').' '.tr('Q.tà').'
'.$riga->descrizione.' '.numberFormat($riga->qta, 'qta').' '.$riga->um.'
'; } // Gestione articolo sottoscorta echo ' '; echo '
'; echo ' '; // Individuazione scorte $articoli = $documento->articoli->groupBy('idarticolo'); $scorte = []; foreach ($articoli as $elenco) { $qta = $elenco->sum('qta'); $articolo = $elenco->first()->articolo; $descrizione_riga = $articolo->codice.' - '.$articolo->getTranslation('name'); $text = $articolo ? Modules::link('Articoli', $articolo->id, $descrizione_riga) : $descrizione_riga; $scorte[$articolo->id] = [ 'qta' => $articolo->qta, 'descrizione' => $text, 'servizio' => $articolo->servizio, ]; } echo ' ';