. */ // Inizializzazione $documento = $options['documento']; $documento_finale = $options['documento_finale']; if (empty($documento)) { return; } // Informazioni utili $dir = $documento->direzione; $original_module = Modules::get($documento->module); $name = !empty($documento_finale) ? $documento_finale->module : $options['module']; $final_module = Modules::get($name); // IVA predefinita $id_iva = $id_iva ?: setting('Iva predefinita'); $righe_totali = $documento->getRighe(); if ($final_module['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['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['name'], ['Fatture di vendita', 'Fatture di acquisto'])) { $id_segment = $_SESSION['module_'.$final_module['id']]['id_segment']; $stato_predefinito = $database->fetchOne("SELECT id FROM co_statidocumento WHERE descrizione = 'Bozza'"); if (!empty($options['reversed'])) { $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [ 'dir' => $dir, 'descrizione' => 'Nota di credito', ])['id']; } elseif (in_array($original_module['name'], ['Ddt di vendita', 'Ddt di acquisto'])) { $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [ 'dir' => $dir, 'descrizione' => ($dir == 'uscita' ? 'Fattura differita di acquisto' : 'Fattura differita di vendita'), ])['id']; } else { $idtipodocumento = $dbo->selectOne('co_tipidocumento', ['id'], [ 'predefined' => 1, 'dir' => $dir, ])['id']; } echo '
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * FROM co_statidocumento WHERE descrizione IN (\'Emessa\', \'Bozza\')", "value": "'.$stato_predefinito['id'].'"]}
{[ "type": "select", "label": "'.tr('Tipo documento').'", "name": "idtipodocumento", "required": 1, "values": "query=SELECT id, CONCAT(codice_tipo_documento_fe, \' - \', descrizione) AS descrizione FROM co_tipidocumento WHERE enabled = 1 AND dir = '.prepare($dir).' ORDER BY codice_tipo_documento_fe", "value": "'.$idtipodocumento.'" ]}
{[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "values": "query=SELECT id, name AS descrizione FROM zz_segments WHERE id_module='.prepare($final_module['id']).' ORDER BY name", "value": "'.$id_segment.'" ]}
{[ "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['name'] == 'Interventi') { echo '
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato_intervento", "required": 1, "values": "query=SELECT idstatointervento AS id, descrizione, colore AS _bgcolor_ FROM in_statiintervento WHERE deleted_at IS NULL ORDER BY descrizione" ]}
{[ "type": "select", "label": "'.tr('Tipo').'", "name": "id_tipo_intervento", "required": 1, "values": "query=SELECT idtipointervento AS id, descrizione FROM in_tipiintervento" ]}
'; } // Opzioni aggiuntive per i Contratti elseif ($final_module['name'] == 'Contratti') { $stato_predefinito = $database->fetchOne("SELECT * FROM co_staticontratti WHERE descrizione = 'Bozza'"); echo '
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT id, descrizione FROM co_staticontratti", "value": "'.$stato_predefinito['id'].'" ]}
'; } // Opzioni aggiuntive per i DDT elseif (in_array($final_module['name'], ['Ddt di vendita', 'Ddt di acquisto'])) { $stato_predefinito = $database->fetchOne("SELECT * FROM dt_statiddt WHERE descrizione = 'Bozza'"); echo '
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * FROM dt_statiddt", "value": "'.$stato_predefinito['id'].'" ]}
{[ "type": "select", "label": "'.tr('Causale trasporto').'", "name": "id_causale_trasporto", "required": 1, "ajax-source": "causali", "icon-after": "add|'.Modules::get('Causali')['id'].'", "help": "'.tr('Definisce la causale del trasporto').'" ]}
'; } // Opzioni aggiuntive per gli Ordini elseif (in_array($final_module['name'], ['Ordini cliente', 'Ordini fornitore'])) { $stato_predefinito = $database->fetchOne("SELECT * FROM or_statiordine WHERE descrizione = 'Bozza'"); echo '
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * FROM or_statiordine WHERE descrizione IN(\'Bozza\', \'Accettato\', \'In attesa di conferma\', \'Annullato\')", "value": "'.$stato_predefinito['id'].'" ]}
'; } // 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|'.Modules::get('Anagrafiche')['id'].'|tipoanagrafica='.$tipo_anagrafica.'" ]}
'; } echo '
'; } // Conto, rivalsa INPS, ritenuta d'acconto e ritenuta previdenziale if (in_array($final_module['name'], ['Fatture di vendita', 'Fatture di acquisto']) && !in_array($original_module['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').'

{["type":"checkbox", "label":"'.tr('Seleziona/Deseleziona tutto').'", "name":"import_all", "value":"1"]}
'; if (!empty($has_serial)) { echo ' '; } echo ' '; foreach ($righe as $i => $riga) { if ($final_module['name'] == 'Ordini fornitore') { $qta_rimanente = $riga['qta']; } else { $qta_rimanente = $riga['qta_rimanente']; } $attr = 'checked="checked"'; if ($original_module['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').'
'; // Checkbox - da evadere? echo ' '; $descrizione = ($riga->isArticolo() ? $riga->articolo->codice.' - ' : '').$riga['descrizione']; echo ' '.nl2br($descrizione); 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->descrizione; $text = $articolo ? Modules::link('Articoli', $articolo->id, $descrizione_riga) : $descrizione_riga; $scorte[$articolo->id] = [ 'qta' => $articolo->qta, 'descrizione' => $text, 'servizio' => $articolo->servizio, ]; } echo ' ';