Skip to content

Commit 25c4e14

Browse files
committed
fix: associazione conto righe da importfe
1 parent 1540f2d commit 25c4e14

3 files changed

Lines changed: 84 additions & 72 deletions

File tree

plugins/importFE/actions.php

Lines changed: 38 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
*/
2020

2121
include_once __DIR__.'/../../core.php';
22+
include_once __DIR__.'/init.php';
2223

2324
use Carbon\Carbon;
2425
use Modules\Anagrafiche\Tipo;
@@ -35,7 +36,7 @@
3536
$file = null;
3637
switch (filter('op')) {
3738
case 'list':
38-
$list = Interaction::getRemoteList();
39+
$list = Interaction::getInvoiceList();
3940

4041
echo json_encode($list);
4142

@@ -132,7 +133,7 @@
132133
'data_registrazione' => post('data_registrazione'),
133134
'articoli' => post('articoli'),
134135
'iva' => post('iva'),
135-
'conto' => post('conti'),
136+
'conto' => post('conto'),
136137
'tipo_riga_riferimento' => post('tipo_riga_riferimento'),
137138
'id_riga_riferimento' => post('id_riga_riferimento'),
138139
'tipo_riga_riferimento_vendita' => post('tipo_riga_riferimento_vendita'),
@@ -443,14 +444,14 @@
443444

444445
// Se nella fattura elettronica è indicato un DDT cerco quel documento specifico
445446
$ddt = $dati_ddt[$numero_linea];
446-
$query = "SELECT
447-
`dt_righe_ddt`.`id`,
448-
`dt_righe_ddt`.`idddt` AS id_documento,
449-
`dt_righe_ddt`.`is_descrizione`,
450-
`dt_righe_ddt`.`idarticolo`,
447+
$query = "SELECT
448+
`dt_righe_ddt`.`id`,
449+
`dt_righe_ddt`.`idddt` AS id_documento,
450+
`dt_righe_ddt`.`is_descrizione`,
451+
`dt_righe_ddt`.`idarticolo`,
451452
`dt_righe_ddt`.`is_sconto`, 'ddt' AS ref,
452453
CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`title`, ']') AS opzione
453-
FROM
454+
FROM
454455
`dt_righe_ddt`
455456
INNER JOIN `dt_ddt` ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt`
456457
INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
@@ -484,12 +485,12 @@
484485
// cerco per quell'ordine
485486
if (empty($collegamento)) {
486487
$ordine = $dati_ordini[$numero_linea];
487-
$query = "SELECT
488-
`or_righe_ordini`.`id`,
489-
`or_righe_ordini`.`idordine` AS id_documento,
490-
`or_righe_ordini`.`is_descrizione`,
491-
`or_righe_ordini`.`idarticolo`,
492-
`or_righe_ordini`.`is_sconto`,
488+
$query = "SELECT
489+
`or_righe_ordini`.`id`,
490+
`or_righe_ordini`.`idordine` AS id_documento,
491+
`or_righe_ordini`.`is_descrizione`,
492+
`or_righe_ordini`.`idarticolo`,
493+
`or_righe_ordini`.`is_sconto`,
493494
'ordine' AS ref,
494495
CONCAT('Ordine num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `or_statiordine_lang`.`title` , ']') AS opzione
495496
FROM `or_righe_ordini`
@@ -529,45 +530,45 @@
529530
// Se non ci sono Ordini o DDT cerco per contenuto
530531
if (empty($collegamento)) {
531532
$match_documento_da_fe = false;
532-
$query = "SELECT
533-
`dt_righe_ddt`.`id`,
534-
`dt_righe_ddt`.`idddt` AS id_documento,
535-
`dt_righe_ddt`.`is_descrizione`,
536-
`dt_righe_ddt`.`idarticolo`,
537-
`dt_righe_ddt`.`is_sconto`,
533+
$query = "SELECT
534+
`dt_righe_ddt`.`id`,
535+
`dt_righe_ddt`.`idddt` AS id_documento,
536+
`dt_righe_ddt`.`is_descrizione`,
537+
`dt_righe_ddt`.`idarticolo`,
538+
`dt_righe_ddt`.`is_sconto`,
538539
'ddt' AS ref,
539540
CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`title`, ']') AS opzione
540-
FROM
541+
FROM
541542
`dt_righe_ddt`
542543
INNER JOIN `dt_ddt` ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt`
543544
INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
544545
LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).')
545546
INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id`
546-
WHERE
547-
`dt_ddt`.`idanagrafica` = '.prepare($anagrafica->id)." AND
548-
|where_ddt| AND
549-
`dt_righe_ddt`.`qta` > `dt_righe_ddt`.`qta_evasa` AND
547+
WHERE
548+
`dt_ddt`.`idanagrafica` = '.prepare($anagrafica->id)." AND
549+
|where_ddt| AND
550+
`dt_righe_ddt`.`qta` > `dt_righe_ddt`.`qta_evasa` AND
550551
`dt_statiddt_lang`.`title` != 'Fatturato' AND
551552
`dt_tipiddt`.`dir` = 'uscita'
552-
UNION
553-
SELECT
553+
UNION
554+
SELECT
554555
`or_righe_ordini`.`id`,
555556
`or_righe_ordini`.`idordine` AS id_documento,
556-
`or_righe_ordini`.`is_descrizione`,
557-
`or_righe_ordini`.`idarticolo`,
558-
`or_righe_ordini`.`is_sconto`,
557+
`or_righe_ordini`.`is_descrizione`,
558+
`or_righe_ordini`.`idarticolo`,
559+
`or_righe_ordini`.`is_sconto`,
559560
'ordine' AS ref,
560561
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 opzione
561-
FROM
562+
FROM
562563
`or_righe_ordini`
563564
INNER JOIN `or_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine`
564565
INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine`
565566
LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = ".prepare(Models\Locale::getDefault()->id).')
566567
INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id`
567-
WHERE
568-
`or_ordini`.`idanagrafica` = '.prepare($anagrafica->id)." AND
569-
|where_ordini| AND
570-
`or_righe_ordini`.`qta` > `or_righe_ordini`.`qta_evasa` AND
568+
WHERE
569+
`or_ordini`.`idanagrafica` = '.prepare($anagrafica->id)." AND
570+
|where_ordini| AND
571+
`or_righe_ordini`.`qta` > `or_righe_ordini`.`qta_evasa` AND
571572
`or_statiordine_lang`.`title` != 'Fatturato' AND
572573
`or_tipiordine`.`dir` ='uscita'";
573574

@@ -622,6 +623,7 @@
622623
$riga = $documento->getRiga($namespace.$type, $collegamento['id']);
623624
$riga_origine = $riga->getOriginalComponent();
624625

626+
$desc_conto = '';
625627
if (!empty($riga->idarticolo)) {
626628
$desc_conto = $dbo->fetchOne('SELECT CONCAT( co_pianodeiconti2.numero, ".", co_pianodeiconti3.numero, " ", co_pianodeiconti3.descrizione ) AS descrizione FROM co_pianodeiconti3 INNER JOIN co_pianodeiconti2 ON co_pianodeiconti3.idpianodeiconti2=co_pianodeiconti2.id WHERE co_pianodeiconti3.id = '.prepare($riga->articolo->idconto_acquisto))['descrizione'];
627629
}
@@ -647,7 +649,7 @@
647649
'id_articolo' => $riga->idarticolo,
648650
'desc_articolo' => str_replace(' ', '_', $riga->articolo->codice.' - '.$riga->articolo->getTranslation('title')),
649651
'id_conto' => $riga->articolo->idconto_acquisto,
650-
'desc_conto' => str_replace(' ', '_', $desc_conto),
652+
'desc_conto' => str_replace(' ', '_', $desc_conto ?: ''),
651653
],
652654
];
653655
}

plugins/importFE/buttons.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ function compile(btn) {
7272
});
7373
7474
$("select[name^=conto]").each(function(){
75-
if (!$(this).val()){
75+
if (!$(this).val() && response.conto){
7676
$(this).selectSetNew(response.conto.id, response.conto.descrizione);
7777
}
7878
});
@@ -109,7 +109,7 @@ function compilaRiferimenti(btn) {
109109
data = response[id_riga];
110110
111111
// Selezione dinamica
112-
$("#selezione_riferimento" + id_riga).addClass("already-loaded").selectSetNew(data.documento.id, data.documento.opzione).removeClass("already-loaded");
112+
$("#selezione_riferimento[" + id_riga + "]").addClass("already-loaded").selectSetNew(data.documento.id, data.documento.opzione).removeClass("already-loaded");
113113
114114
// Impostazione del riferimento
115115
impostaRiferimento(id_riga, data.documento, data.riga);

plugins/importFE/generate.php

Lines changed: 44 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,7 @@ function cleanup(){
187187
</h3>
188188
</div>
189189
<div class="card-body">
190-
<h5>'.$ragione_sociale.'</h5>
191-
'.(empty($anagrafica) ? '<span class="badge badge-warning">'.tr('Nuova anagrafica').'</span>' : '<small>'.Modules::link('Anagrafiche', $anagrafica->id, '', null, '').'</small>').'
190+
<h4>'.$ragione_sociale.' '.(empty($anagrafica) ? '<span class="badge badge-warning">'.tr('Nuova anagrafica').'</span>' : '<small>'.Modules::link('Anagrafiche', $anagrafica->id, '', null, '').'</small>').'</h4>
192191
<hr>
193192
<small>
194193
'.(!empty($codice_fiscale) ? ('<strong>'.tr('Codice Fiscale').':</strong> '.$codice_fiscale.'<br>') : '').'
@@ -207,10 +206,10 @@ function cleanup(){
207206
</h3>
208207
</div>
209208
<div class="card-body">
210-
<h5>'.$dati_generali['Numero'].'</h5>
209+
<h5>'.tr('').$dati_generali['Numero'].'
211210
<a href="'.$structure->fileurl('view.php').'?filename='.$record['name'].'" class="btn btn-info btn-sm" target="_blank" >
212-
<i class="fa fa-eye"></i> '.tr('Visualizza XML').'
213-
</a>
211+
<i class="fa fa-eye"></i>
212+
</a></h5>
214213
<hr>
215214
<small>
216215
<strong>'.tr('Tipo').':</strong> '.$tipo_documento.'<br>
@@ -357,44 +356,44 @@ function cleanup(){
357356
}
358357

359358
echo '
360-
</div>
361-
</div>';
359+
</div>';
362360

363361
// Pagamento
364362
$pagamento = Pagamento::where('codice_modalita_pagamento_fe', $codice_modalita_pagamento)->where('predefined', '1')->first();
365363
echo '
366-
<div class="row" >
367-
<div class="col-md-3">
368-
<button type="button" class="btn btn-info btn-xs pull-right" onclick="updateSelectOption(\'codice_modalita_pagamento_fe\', \'\')">
369-
<i class="fa fa-refresh"></i> '.tr('Visualizza tutte le modalità').'
370-
</button>
364+
<div class="row">
365+
<div class="col-md-3">
366+
<button type="button" class="btn btn-info btn-xs pull-right" onclick="updateSelectOption(\'codice_modalita_pagamento_fe\', \'\')">
367+
<i class="fa fa-refresh"></i> '.tr('Visualizza tutte le modalità').'
368+
</button>
371369
372-
{[ "type": "select", "label": "'.tr('Pagamento').'", "name": "pagamento", "required": 1, "ajax-source": "pagamenti", "select-options": '.json_encode(['codice_modalita_pagamento_fe' => $codice_modalita_pagamento]).', "value": "'.$pagamento->id.'" ]}
373-
</div>';
370+
{[ "type": "select", "label": "'.tr('Pagamento').'", "name": "pagamento", "required": 1, "ajax-source": "pagamenti", "select-options": '.json_encode(['codice_modalita_pagamento_fe' => $codice_modalita_pagamento]).', "value": "'.$pagamento->id.'" ]}
371+
</div>';
374372

375373
// Movimentazioni
376374
echo '
377-
<div class="col-md-3">
378-
{[ "type": "checkbox", "label": "'.tr('Movimenta gli articoli').'", "name": "movimentazione", "value": "'.setting('Movimenta magazzino da fatture di acquisto').'" ]}
379-
</div>
375+
<div class="col-md-3">
376+
{[ "type": "checkbox", "label": "'.tr('Movimenta gli articoli').'", "name": "movimentazione", "value": "'.setting('Movimenta magazzino da fatture di acquisto').'" ]}
377+
</div>
380378
381-
<div class="col-md-3">
382-
{[ "type": "checkbox", "label": "'.tr('Creazione automatica articoli').'", "name": "flag_crea_articoli", "value": 0, "help": "'.tr('Nel caso di righe con almeno un nodo \'CodiceArticolo\', il gestionale procede alla creazione dell\'articolo se la riga non risulta assegnata manualmente').'." ]}
383-
</div>
379+
<div class="col-md-3">
380+
{[ "type": "checkbox", "label": "'.tr('Creazione automatica articoli').'", "name": "flag_crea_articoli", "value": 0, "help": "'.tr('Nel caso di righe con almeno un nodo \'CodiceArticolo\', il gestionale procede alla creazione dell\'articolo se la riga non risulta assegnata manualmente').'." ]}
381+
</div>
384382
385-
<div class="col-md-3">
386-
{[ "type": "checkbox", "label": "'.tr('Creazione seriali').'", "name": "flag_crea_seriali", "value": "'.setting('Creazione seriali in import FE').'", "help": "'.tr('Nel caso di righe contenenti serial number, il gestionale procede alla loro registrazione. Controllare che l\'XML della fattura di acquisto contenga il nodo \'CodiceTipo\' valorizzato con \'serial\' o \'Serial\' ').'." ]}
387-
</div>';
383+
<div class="col-md-3">
384+
{[ "type": "checkbox", "label": "'.tr('Creazione seriali').'", "name": "flag_crea_seriali", "value": "'.setting('Creazione seriali in import FE').'", "help": "'.tr('Nel caso di righe contenenti serial number, il gestionale procede alla loro registrazione. Controllare che l\'XML della fattura di acquisto contenga il nodo \'CodiceTipo\' valorizzato con \'serial\' o \'Serial\' ').'." ]}
385+
</div>';
388386

389387
$ritenuta = $dati_generali['DatiRitenuta'];
390388

391389
if (!empty($ritenuta)) {
392390
echo '
393-
<div class="col-md-3">
394-
{[ "type": "checkbox", "label": "'.tr('Ritenuta pagata dal fornitore').'", "name": "is_ritenuta_pagata", "value": 0, "help": "'.tr('Attivare se la ritenuta è stata pagata dal fornitore').'" ]}
395-
</div>';
391+
<div class="col-md-3">
392+
{[ "type": "checkbox", "label": "'.tr('Ritenuta pagata dal fornitore').'", "name": "is_ritenuta_pagata", "value": 0, "help": "'.tr('Attivare se la ritenuta è stata pagata dal fornitore').'" ]}
393+
</div>';
396394
}
397395
echo '
396+
</div>
398397
</div>
399398
</div>
400399
<br>';
@@ -746,17 +745,21 @@ function copia() {
746745
}
747746
}
748747
749-
// Selezione generale per l\'IVA
748+
// Selezione generale per l\'IVA (solo per campi vuoti)
750749
if (iva_selezionata) {
751750
aliquote.each(function() {
752-
$(this).selectSet(iva_selezionata.id);
751+
if (!$(this).val()) {
752+
$(this).selectSet(iva_selezionata.id);
753+
}
753754
});
754755
}
755756
756-
// Selezione generale per il conto
757+
// Selezione generale per il conto (solo per campi vuoti)
757758
if (conto_selezionato) {
758759
conti.each(function() {
759-
$(this).selectSetNew(conto_selezionato.id, conto_selezionato.text, conto_selezionato);
760+
if (!$(this).val()) {
761+
$(this).selectSetNew(conto_selezionato.id, conto_selezionato.text, conto_selezionato);
762+
}
760763
});
761764
}
762765
}
@@ -889,6 +892,9 @@ function impostaRiferimento(id_riga, documento, riga) {
889892
$("#id_riga_riferimento_" + id_riga).val(riga.id);
890893
891894
// Gestione della selezione
895+
if (documento.id && documento.opzione) {
896+
input("selezione_riferimento[" + id_riga + "]").getElement().selectSetNew(documento.id, documento.opzione);
897+
}
892898
input("selezione_riferimento[" + id_riga + "]").disable();
893899
$("#rimuovi_riferimento_" + id_riga).removeClass("disabled");
894900
@@ -929,9 +935,10 @@ function impostaRiferimento(id_riga, documento, riga) {
929935
930936
if (riga.id_articolo) {
931937
input("articoli["+id_riga+"]").getElement().selectSetNew(riga.id_articolo, riga.desc_articolo.replace(/_/g, " ").replace(/\n/g, "<br>"));
932-
if (riga.id_conto) {
933-
input("conto["+id_riga+"]").getElement().selectSetNew(riga.id_conto, riga.desc_conto.replace(/_/g, " ").replace(/\n/g, "<br>"));
934-
}
938+
}
939+
940+
if (riga.id_conto && riga.desc_conto !== null && riga.desc_conto !== undefined) {
941+
input("conto["+id_riga+"]").getElement().selectSetNew(riga.id_conto, riga.desc_conto.replace(/_/g, " ").replace(/\n/g, "<br>"));
935942
}
936943
}
937944
@@ -966,6 +973,9 @@ function impostaRiferimentoVendita(id_riga, documento, riga) {
966973
$("#id_riga_riferimento_vendita_" + id_riga).val(riga.id);
967974
968975
// Gestione della selezione
976+
if (documento.id && documento.opzione) {
977+
input("selezione_riferimento_vendita[" + id_riga + "]").getElement().selectSetNew(documento.id, documento.opzione);
978+
}
969979
input("selezione_riferimento_vendita[" + id_riga + "]").disable();
970980
$("#rimuovi_riferimento_vendita_" + id_riga).removeClass("disabled");
971981
}
@@ -986,7 +996,7 @@ function rimuoviRiferimentoVendita(button) {
986996
$("#conto-"+$(this).data("id")).selectReset();
987997
updateSelectOption("id_articolo", $(this).val());
988998
let data = $(this).selectData();
989-
if(data!==undefined){
999+
if(data !== undefined && data.idconto_acquisto && data.idconto_acquisto_title){
9901000
$("#conto-"+$(this).data("id")).selectSetNew(data.idconto_acquisto, data.idconto_acquisto_title);
9911001
}
9921002

0 commit comments

Comments
 (0)