Gestione riferimento riga a documento di vendita in fase di import fattura

This commit is contained in:
Matteo 2021-02-18 17:46:38 +01:00
parent 3ec3928026
commit defd5a7358
12 changed files with 197 additions and 32 deletions

View File

@ -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'),
]);
}

View File

@ -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();

View File

@ -48,7 +48,7 @@ if (!$riferimenti->isEmpty()) {
echo '
<tr data-id="'.$riga->id.'" data-type="'.$riga_class.'">
<td>
<button type="button" class="btn btn-xs btn-danger pull-right" onclick="rimuoviRiferimento(this, \''.addslashes($source_type).'\',\''.$source_id.'\')">
<button type="button" class="btn btn-xs btn-danger pull-right" onclick="rimuoviRiferimento(this, \''.addslashes($source_type).'\', \''.$source_id.'\', \''.$riferimento->id.'\')">
<i class="fa fa-trash"></i>
</button>

View File

@ -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() {

View File

@ -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;
}

View File

@ -68,6 +68,17 @@ foreach ($righe as $riga) {
<td>';
$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 '
<button type="button" class="btn btn-xs btn-'.($riferimenti_presenti ? 'primary' : 'info').' pull-right text-right" onclick="apriRiferimenti(this)">
<i class="fa fa-chevron-right"></i> '.tr('Riferimenti').' '.$testo_aggiuntivo.'
</button>';
// 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({

View File

@ -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'),

View File

@ -397,21 +397,38 @@ if (!empty($righe)) {
<input type="hidden" name="id_riga_riferimento['.$key.']" id="id_riga_riferimento_'.$key.'" value="">
<input type="hidden" name="tipo_riga_riferimento['.$key.']" id="tipo_riga_riferimento_'.$key.'" value="">
<div class="col-md-3">
{[ "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').'" ]}
<input type="hidden" name="tipo_riferimento_vendita['.$key.']" id="tipo_riferimento_vendita_'.$key.'" value="">
<input type="hidden" name="id_riferimento_vendita['.$key.']" id="id_riferimento_vendita_'.$key.'" value="">
<input type="hidden" name="id_riga_riferimento_vendita['.$key.']" id="id_riga_riferimento_vendita_'.$key.'" value="">
<input type="hidden" name="tipo_riga_riferimento_vendita['.$key.']" id="tipo_riga_riferimento_vendita_'.$key.'" value="">
<div class="col-md-12">
<div class="row">
<div class="col-md-6">
{[ "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').'" ]}
</div>
<div class="col-md-3">
{[ "type": "select", "name": "conto['.$key.']", "ajax-source": "conti-acquisti", "required": 1, "label": "'.tr('Conto acquisti').'" ]}
</div>
<div class="col-md-3">
{[ "type": "select", "name": "iva['.$key.']", "values": '.json_encode('query='.$query).', "required": 1, "label": "'.tr('Aliquota IVA').'" ]}
</div>
</div>
<div class="row">
<div class="col-md-3">
{[ "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('<button type="button" onclick="rimuoviRiferimento(this)" class="btn btn-primary disabled" id="rimuovi_riferimento_'.$key.'"><i class="fa fa-close"></i></button>').' ]}
</div>
<div class="col-md-3">
{[ "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('<button type="button" onclick="rimuoviRiferimentoVendita(this)" class="btn btn-primary disabled" id="rimuovi_riferimento_vendita_'.$key.'"><i class="fa fa-close"></i></button>').' ]}
</div>
</div>
</div>
<div class="col-md-3">
{[ "type": "select", "name": "conto['.$key.']", "ajax-source": "conti-acquisti", "required": 1, "label": "'.tr('Conto acquisti').'" ]}
</div>
<div class="col-md-3">
{[ "type": "select", "name": "iva['.$key.']", "values": '.json_encode('query='.$query).', "required": 1, "label": "'.tr('Aliquota IVA').'" ]}
</div>
<div class="col-md-3">
{[ "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('<button type="button" onclick="rimuoviRiferimento(this)" class="btn btn-primary disabled" id="rimuovi_riferimento_'.$key.'"><i class="fa fa-close"></i></button>').' ]}
</div>
</td>
</tr>';
}
@ -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("<br>" + 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());
});
</script>';

View File

@ -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");
}

View File

@ -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();

View File

@ -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];

View File

@ -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();