diff --git a/actions.php b/actions.php index 843f8c5c1..f1b58edce 100755 --- a/actions.php +++ b/actions.php @@ -286,7 +286,7 @@ elseif (post('op') == 'send-email') { $dbo->query('UPDATE `zz_views` SET `order` = '.prepare($i).' WHERE id='.prepare($id_riga)); } } elseif (filter('op') == 'visualizza_righe_riferimenti') { - include_once base_dir().'/include/riferimenti/righe_riferimenti.php'; + include_once base_dir().'/include/riferimenti/riferimenti.php'; } elseif (filter('op') == 'visualizza_righe_documento') { include_once base_dir().'/include/riferimenti/righe_documento.php'; } elseif (filter('op') == 'salva_riferimento_riga') { @@ -298,10 +298,7 @@ elseif (post('op') == 'send-email') { ]); } elseif (filter('op') == 'rimuovi_riferimento_riga') { $database->delete('co_riferimenti_righe', [ - 'source_type' => filter('source_type'), - 'source_id' => filter('source_id'), - 'target_type' => filter('target_type'), - 'target_id' => filter('target_id'), + 'id' => filter('idriferimento'), ]); } diff --git a/include/riferimenti/riferimenti.php b/include/riferimenti/riferimenti.php index caccf8f27..bf411da49 100644 --- a/include/riferimenti/riferimenti.php +++ b/include/riferimenti/riferimenti.php @@ -214,7 +214,7 @@ echo ' }); } - function rimuoviRiferimento(btn, source_type, source_id) { + function rimuoviRiferimento(btn, source_type, source_id, idriferimento) { $("#main_loading").show(); let row = $(btn).closest("tr"); @@ -233,6 +233,7 @@ echo ' source_id: source_id, target_type: target_type, target_id: target_id, + idriferimento: idriferimento, }, success: function(data) { $("#main_loading").fadeOut(); diff --git a/include/riferimenti/righe_riferimenti.php b/include/riferimenti/righe_riferimenti.php index 27f269773..a53cd7f0e 100644 --- a/include/riferimenti/righe_riferimenti.php +++ b/include/riferimenti/righe_riferimenti.php @@ -48,7 +48,7 @@ if (!$riferimenti->isEmpty()) { echo ' - diff --git a/modules/ddt/row-list.php b/modules/ddt/row-list.php index 98ba43004..15fb64806 100755 --- a/modules/ddt/row-list.php +++ b/modules/ddt/row-list.php @@ -341,7 +341,7 @@ function apriRiferimenti(button) { let id = riga.data("id"); let type = riga.data("type"); - openModal("'.tr('Riferimenti riga').'", globals.rootdir + "/actions.php?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&op=visualizza_riferimenti&riga_id=" + id + "&riga_type=" + type) + openModal("'.tr('Riferimenti riga').'", globals.rootdir + "/actions.php?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&op=visualizza_righe_riferimenti&riga_id=" + id + "&riga_type=" + type) } $(document).ready(function() { diff --git a/modules/fatture/ajax/select.php b/modules/fatture/ajax/select.php index e39e58f78..e0a433fb3 100644 --- a/modules/fatture/ajax/select.php +++ b/modules/fatture/ajax/select.php @@ -27,7 +27,8 @@ switch ($resource) { $query_ordini = "SELECT or_ordini.id, CONCAT('Ordine num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , ']') AS text, 'Ordini' AS optgroup, - 'ordine' AS tipo + 'ordine' AS tipo, + 'uscita' AS dir FROM or_ordini INNER JOIN or_righe_ordini ON or_righe_ordini.idordine = or_ordini.id WHERE idanagrafica = ".prepare($id_anagrafica)." AND @@ -44,7 +45,8 @@ switch ($resource) { $query_ddt = "SELECT dt_ddt.id, CONCAT('DDT num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM dt_statiddt WHERE id = idstatoddt) , ']') AS text, 'DDT' AS optgroup, - 'ddt' AS tipo + 'ddt' AS tipo, + 'uscita' AS dir FROM dt_ddt INNER JOIN dt_righe_ddt ON dt_righe_ddt.idddt = dt_ddt.id WHERE idanagrafica = ".prepare($id_anagrafica)." AND @@ -72,4 +74,72 @@ switch ($resource) { $results = array_merge($ordini, $ddt); break; + + case 'riferimenti-vendita-fe': + $direzione = 'entrata'; + $id_articolo = $superselect['id_articolo']; + if (empty($id_articolo)) { + return []; + } + + // Campi di ricerca + $search_fields = []; + if (!empty($search)) { + $search_fields[] = "IF(numero_esterno != '', numero_esterno, numero) LIKE ".prepare('%'.$search.'%'); + $search_fields[] = "DATE_FORMAT(data, '%d/%m/%Y') LIKE ".prepare('%'.$search.'%'); + } + + $where = implode(' OR ', $search_fields); + $where = $where ? '('.$where.')' : '1=1'; + + $query_ordini = "SELECT or_ordini.id, + CONCAT('Ordine num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , ']') AS text, + 'Ordini' AS optgroup, + 'ordine' AS tipo, + 'entrata' AS dir + FROM or_ordini + INNER JOIN or_righe_ordini ON or_righe_ordini.idordine = or_ordini.id + WHERE idarticolo = ".prepare($id_articolo)." AND + idstatoordine IN ( + SELECT id FROM or_statiordine WHERE descrizione != 'Fatturato' + ) AND + idtipoordine IN ( + SELECT id FROM or_tipiordine WHERE dir = ".prepare($direzione).' + ) AND |where| + GROUP BY or_ordini.id + ORDER BY data DESC, numero DESC'; + + $query_ddt = "SELECT dt_ddt.id, + CONCAT('DDT num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM dt_statiddt WHERE id = idstatoddt) , ']') AS text, + 'DDT' AS optgroup, + 'ddt' AS tipo, + 'entrata' AS dir + FROM dt_ddt + INNER JOIN dt_righe_ddt ON dt_righe_ddt.idddt = dt_ddt.id + WHERE idarticolo = ".prepare($id_articolo)." AND + idstatoddt IN ( + SELECT id FROM dt_statiddt WHERE descrizione != 'Fatturato' + ) AND + idtipoddt IN ( + SELECT id FROM dt_tipiddt WHERE dir=".prepare($direzione).' + ) AND |where| + GROUP BY dt_ddt.id + HAVING SUM(dt_righe_ddt.qta - dt_righe_ddt.qta_evasa) > 0 + ORDER BY data DESC, numero DESC'; + + // Sostituzione per la ricerca + $query_ordini = replace($query_ordini, [ + '|where|' => $where, + ]); + + $query_ddt = replace($query_ddt, [ + '|where|' => $where, + ]); + + $ordini = $database->fetchArray($query_ordini); + $ddt = $database->fetchArray($query_ddt); + $results = array_merge($ordini, $ddt); + + break; + } diff --git a/modules/ordini/row-list.php b/modules/ordini/row-list.php index 4f4e8860d..370f7f446 100755 --- a/modules/ordini/row-list.php +++ b/modules/ordini/row-list.php @@ -68,6 +68,17 @@ foreach ($righe as $riga) { '; + $numero_riferimenti_riga = $riga->referenceTargets()->count(); + $numero_riferimenti_collegati = $riga->referenceSources()->count(); + $riferimenti_presenti = $numero_riferimenti_riga; + $testo_aggiuntivo = $riferimenti_presenti ? $numero_riferimenti_riga : ''; + + echo ' + '; + + // Aggiunta dei riferimenti ai documenti if ($riga->hasOriginalComponent()) { echo ' @@ -349,6 +360,14 @@ function modificaSeriali(button) { openModal("'.tr('Aggiorna SN').'", globals.rootdir + "/modules/fatture/add_serial.php?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&riga_id=" + id + "&riga_type=" + type); } +function apriRiferimenti(button) { + let riga = $(button).closest("tr"); + let id = riga.data("id"); + let type = riga.data("type"); + + openModal("'.tr('Riferimenti riga').'", globals.rootdir + "/actions.php?id_module=" + globals.id_module + "&id_record=" + globals.id_record + "&op=visualizza_righe_riferimenti&riga_id=" + id + "&riga_type=" + type) +} + $(document).ready(function() { $(".sortable").each(function() { $(this).sortable({ diff --git a/plugins/importFE/actions.php b/plugins/importFE/actions.php index 92fe9ad11..57a00cfcf 100755 --- a/plugins/importFE/actions.php +++ b/plugins/importFE/actions.php @@ -127,6 +127,8 @@ switch (filter('op')) { 'conto' => post('conto'), 'tipo_riga_riferimento' => post('tipo_riga_riferimento'), 'id_riga_riferimento' => post('id_riga_riferimento'), + 'tipo_riga_riferimento_vendita' => post('tipo_riga_riferimento_vendita'), + 'id_riga_riferimento_vendita' => post('id_riga_riferimento_vendita'), 'movimentazione' => post('movimentazione'), 'crea_articoli' => post('crea_articoli'), 'is_ritenuta_pagata' => post('is_ritenuta_pagata'), diff --git a/plugins/importFE/generate.php b/plugins/importFE/generate.php index b9cf67e6c..fce6447f9 100755 --- a/plugins/importFE/generate.php +++ b/plugins/importFE/generate.php @@ -397,21 +397,38 @@ if (!empty($righe)) { -
- {[ "type": "select", "name": "articoli['.$key.']", "ajax-source": "articoli", "select-options": '.json_encode(['permetti_movimento_a_zero' => 1, 'dir' => 'entrata', 'idanagrafica' => $anagrafica ? $anagrafica->id : '']).', "icon-after": "add|'.Modules::get('Articoli')['id'].'|codice='.htmlentities($codice_principale).'&descrizione='.htmlentities($riga['Descrizione']).'", "value": "'.$id_articolo.'", "label": "'.tr('Articolo').'" ]} + + + + + +
+ +
+
+ {[ "type": "select", "name": "articoli['.$key.']", "ajax-source": "articoli", "select-options": '.json_encode(['permetti_movimento_a_zero' => 1, 'dir' => 'entrata', 'idanagrafica' => $anagrafica ? $anagrafica->id : '']).', "icon-after": "add|'.Modules::get('Articoli')['id'].'|codice='.htmlentities($codice_principale).'&descrizione='.htmlentities($riga['Descrizione']).'", "value": "'.$id_articolo.'", "label": "'.tr('Articolo').'" ]} +
+ +
+ {[ "type": "select", "name": "conto['.$key.']", "ajax-source": "conti-acquisti", "required": 1, "label": "'.tr('Conto acquisti').'" ]} +
+ +
+ {[ "type": "select", "name": "iva['.$key.']", "values": '.json_encode('query='.$query).', "required": 1, "label": "'.tr('Aliquota IVA').'" ]} +
+
+ +
+
+ {[ "type": "select", "name": "selezione_riferimento['.$key.']", "ajax-source": "riferimenti-fe", "select-options": '.json_encode(['id_anagrafica' => $anagrafica ? $anagrafica->id : '']).', "label": "'.tr('Riferimento acquisto').'", "icon-after": '.json_encode('').' ]} +
+
+ {[ "type": "select", "name": "selezione_riferimento_vendita['.$key.']", "ajax-source": "riferimenti-vendita-fe", "select-options": '.json_encode(['id_articolo' => $id_articolo]).', "label": "'.tr('Riferimento vendita').'", "icon-after": '.json_encode('').' ]} +
+
+
-
- {[ "type": "select", "name": "conto['.$key.']", "ajax-source": "conti-acquisti", "required": 1, "label": "'.tr('Conto acquisti').'" ]} -
- -
- {[ "type": "select", "name": "iva['.$key.']", "values": '.json_encode('query='.$query).', "required": 1, "label": "'.tr('Aliquota IVA').'" ]} -
- -
- {[ "type": "select", "name": "selezione_riferimento['.$key.']", "ajax-source": "riferimenti-fe", "select-options": '.json_encode(['id_anagrafica' => $anagrafica ? $anagrafica->id : '']).', "label": "'.tr('Riferimento').'", "icon-after": '.json_encode('').' ]} -
'; } @@ -488,7 +505,7 @@ echo ' if (data) { let riga = $this.closest("tr").prev(); - selezionaRiferimento(riga, data.tipo, data.id); + selezionaRiferimento(riga, data.tipo, data.id, data.dir); } }); @@ -504,7 +521,7 @@ function rimuoviRiferimento(button) { riga.removeClass("success").removeClass("warning"); } -function selezionaRiferimento(riga, tipo_documento, id_documento) { +function selezionaRiferimento(riga, tipo_documento, id_documento, dir) { let id_riga = riga.data("id"); let qta = riga.data("qta"); @@ -518,6 +535,7 @@ function selezionaRiferimento(riga, tipo_documento, id_documento) { tipo_documento: tipo_documento, righe_ddt: riferimenti.ddt, righe_ordini: riferimenti.ordini, + dir: dir, }; let url = "'.$structure->fileurl('riferimento.php').'?" + $.param(query); @@ -579,7 +597,14 @@ function impostaRiferimento(id_riga, documento, riga) { impostaContenuto(riga_fe.data("iva_percentuale"), riga.iva_percentuale, "%", "#riferimento_" + id_riga + "_iva"); $("#riferimento_" + id_riga).html(documento.descrizione ? documento.descrizione : ""); - $("#riferimento_" + id_riga + "_descrizione").html(riga.descrizione ? riga.descrizione : ""); + + var descrizione = riga.descrizione; + console.log(descrizione); + if(typeof descrizione !== "undefined"){ + descrizione = descrizione.replace(/_/g, " "); + } + + $("#riferimento_" + id_riga + "_descrizione").html(descrizione ? descrizione : ""); // Colorazione dell\'intera riga let warnings = riga_fe.find(".text-warning"); @@ -612,4 +637,33 @@ function impostaContenuto(valore_riga, valore_riferimento, contenuto_successivo, elemento.html("
" + contenuto); } + +function impostaRiferimentoVendita(id_riga, documento, riga) { + // Informazioni interne per il riferimento + $("#tipo_riferimento_vendita_" + id_riga).val(documento.tipo); + $("#id_riferimento_vendita_" + id_riga).val(documento.id); + $("#tipo_riga_riferimento_vendita_" + id_riga).val(riga.tipo); + $("#id_riga_riferimento_vendita_" + id_riga).val(riga.id); + + // Gestione della selezione + input("selezione_riferimento_vendita[" + id_riga + "]").disable(); + $("#rimuovi_riferimento_vendita_" + id_riga).removeClass("disabled"); +} + +function rimuoviRiferimentoVendita(button) { + let riga = $(button).closest("tr").prev(); + let id_riga = riga.data("id"); + + impostaRiferimentoVendita(id_riga, {}, {}); + + input("selezione_riferimento_vendita[" + id_riga + "]").enable() + .getElement().selectReset(); + $(button).addClass("disabled"); + riga.removeClass("success").removeClass("warning"); +} + +$("[id^=\'articoli\']").change(function() { + updateSelectOption("id_articolo", $(this).val()); +}); + '; diff --git a/plugins/importFE/riferimento.php b/plugins/importFE/riferimento.php index 541ace7e2..db03de050 100755 --- a/plugins/importFE/riferimento.php +++ b/plugins/importFE/riferimento.php @@ -29,6 +29,7 @@ $qta = get('qta'); $id_documento = get('id_documento'); $tipo_documento = get('tipo_documento'); +$dir = get('dir'); if ($tipo_documento == 'ordine') { $documento = Ordine::find($id_documento); $righe_utilizzate = get('righe_ordini'); @@ -59,7 +60,7 @@ foreach ($righe as $riga) { $dettagli = [ 'tipo' => get_class($riga), 'id' => $riga->id, - 'descrizione' => $riga->descrizione, + 'descrizione' => str_replace(' ', '_', $riga->descrizione), 'qta' => $riga->qta, 'um' => $riga->um, 'prezzo_unitario' => $riga->prezzo_unitario ?: $riga_origine->prezzo_unitario, @@ -102,8 +103,14 @@ var documento_importazione = { function selezionaRiga(button) { let riga = $(button).closest("tr"); - let dettagli_riga = riga.data("dettagli"); - impostaRiferimento("'.$id_riga.'", documento_importazione, dettagli_riga); + let dettagli_riga = riga.data("dettagli") + + if("'.$dir.'"=="entrata"){ + impostaRiferimentoVendita("'.$id_riga.'", documento_importazione, dettagli_riga); + }else{ + impostaRiferimento("'.$id_riga.'", documento_importazione, dettagli_riga); + } + $(button).closest(".modal").modal("hide"); } diff --git a/plugins/importFE/src/FatturaElettronica.php b/plugins/importFE/src/FatturaElettronica.php index a14ddfcae..58a407ba6 100755 --- a/plugins/importFE/src/FatturaElettronica.php +++ b/plugins/importFE/src/FatturaElettronica.php @@ -364,7 +364,7 @@ class FatturaElettronica { $this->saveFattura($info['id_pagamento'], $info['id_segment'], $info['id_tipo'], $info['data_registrazione'], $info['ref_fattura'], $info['is_ritenuta_pagata']); - $this->saveRighe($info['articoli'], $info['iva'], $info['conto'], $info['movimentazione'], $info['crea_articoli'], $info['tipo_riga_riferimento'], $info['id_riga_riferimento']); + $this->saveRighe($info['articoli'], $info['iva'], $info['conto'], $info['movimentazione'], $info['crea_articoli'], $info['tipo_riga_riferimento'], $info['id_riga_riferimento'], $info['tipo_riga_riferimento_vendita'], $info['id_riga_riferimento_vendita']); $this->saveAllegati(); diff --git a/plugins/importFE/src/FatturaOrdinaria.php b/plugins/importFE/src/FatturaOrdinaria.php index d56813ec4..31450207b 100755 --- a/plugins/importFE/src/FatturaOrdinaria.php +++ b/plugins/importFE/src/FatturaOrdinaria.php @@ -110,7 +110,7 @@ class FatturaOrdinaria extends FatturaElettronica return $this->forceArray($result); } - public function saveRighe($articoli, $iva, $conto, $movimentazione = true, $crea_articoli = false, $tipi_riferimenti = [], $id_riferimenti = []) + public function saveRighe($articoli, $iva, $conto, $movimentazione = true, $crea_articoli = false, $tipi_riferimenti = [], $id_riferimenti = [], $tipi_riferimenti_vendita = [], $id_riferimenti_vendita = []) { $info = $this->getRitenutaRivalsa(); @@ -161,8 +161,12 @@ class FatturaOrdinaria extends FatturaElettronica $obj = Articolo::build($fattura, $articolo); $obj->movimentazione($movimentazione); + + $target_type = 'Modules\Fatture\Components\Articolo'; } else { $obj = Riga::build($fattura); + + $target_type = 'Modules\Fatture\Components\Riga'; } $obj->descrizione = $riga['Descrizione']; @@ -176,6 +180,17 @@ class FatturaOrdinaria extends FatturaElettronica $obj->descrizione .= $nuovo_riferimento; } + $obj->save(); + + if (!empty($tipi_riferimenti_vendita[$key])) { + database()->insert('co_riferimenti_righe', [ + 'source_type' => $tipi_riferimenti_vendita[$key], + 'source_id' => $id_riferimenti_vendita[$key], + 'target_type' => $target_type, + 'target_id' => $obj->id, + ]); + } + $obj->id_iva = $iva[$key]; $obj->idconto = $conto[$key]; diff --git a/plugins/importFE/src/FatturaSemplificata.php b/plugins/importFE/src/FatturaSemplificata.php index 278b0e1bc..e51748049 100755 --- a/plugins/importFE/src/FatturaSemplificata.php +++ b/plugins/importFE/src/FatturaSemplificata.php @@ -95,7 +95,7 @@ class FatturaSemplificata extends FatturaElettronica return $result; } - public function saveRighe($articoli, $iva, $conto, $movimentazione = true, $crea_articoli = false, $tipi_riferimenti = [], $id_riferimenti = []) + public function saveRighe($articoli, $iva, $conto, $movimentazione = true, $crea_articoli = false, $tipi_riferimenti = [], $id_riferimenti = [], $tipi_riferimenti_vendita = [], $id_riferimenti_vendita = []) { $righe = $this->getRighe(); $fattura = $this->getFattura();