Skip to content

Commit 66f47ae

Browse files
feat: gestione listini cliente per sede
1 parent beddcc5 commit 66f47ae

22 files changed

Lines changed: 114 additions & 51 deletions

File tree

include/common/articolo.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,15 @@
2020

2121
$result['idarticolo'] ??= null;
2222
$qta_minima = 0;
23-
$id_listino = $dbo->selectOne('an_anagrafiche', 'id_listino', ['idanagrafica' => $options['idanagrafica']])['id_listino'];
23+
$idsede_destinazione = $options['select-options']['articoli']['idsede_destinazione'] ?? null;
24+
25+
$id_listino = null;
26+
if ($idsede_destinazione) {
27+
$id_listino = $dbo->selectOne('an_sedi', 'id_listino', ['id' => $idsede_destinazione])['id_listino'];
28+
}
29+
if (!$id_listino) {
30+
$id_listino = $dbo->selectOne('an_anagrafiche', 'id_listino', ['idanagrafica' => $options['idanagrafica']])['id_listino'];
31+
}
2432

2533
// Articolo
2634
$database = database();

lib/common.php

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ function getSegmentPredefined($id_module)
332332
*
333333
* @return array
334334
*/
335-
function getPrezzoConsigliato($id_anagrafica, $direzione, $id_articolo, $riga = null)
335+
function getPrezzoConsigliato($id_anagrafica, $direzione, $id_articolo, $riga = null, $id_sede = null)
336336
{
337337
if ($riga) {
338338
$qta = $riga->qta;
@@ -357,19 +357,39 @@ function getPrezzoConsigliato($id_anagrafica, $direzione, $id_articolo, $riga =
357357
$prezzi = database()->fetchArray($query);
358358

359359
// Prezzi listini clienti
360-
$query = 'SELECT minimo, massimo,
361-
sconto_percentuale AS sconto_percentuale_listino,
362-
'.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
363-
FROM mg_listini
364-
LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
365-
LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
366-
WHERE mg_listini.data_attivazione<=NOW()
367-
AND (mg_listini_articoli.data_scadenza>=NOW() OR (mg_listini_articoli.data_scadenza IS NULL AND mg_listini.data_scadenza_predefinita>=NOW()))
368-
AND mg_listini.attivo=1
369-
AND id_articolo = '.prepare($id_articolo).'
370-
AND dir = '.prepare($direzione).'
371-
AND idanagrafica = '.prepare($id_anagrafica);
372-
$listini = database()->fetchArray($query);
360+
// Prima verifica se c'è un listino associato alla sede, se fornito
361+
if (!empty($id_sede)) {
362+
$query = 'SELECT minimo, massimo,
363+
sconto_percentuale AS sconto_percentuale_listino,
364+
'.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
365+
FROM mg_listini
366+
LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
367+
LEFT JOIN an_sedi ON mg_listini.id=an_sedi.id_listino
368+
WHERE mg_listini.data_attivazione<=NOW()
369+
AND (mg_listini_articoli.data_scadenza>=NOW() OR (mg_listini_articoli.data_scadenza IS NULL AND mg_listini.data_scadenza_predefinita>=NOW()))
370+
AND mg_listini.attivo=1
371+
AND id_articolo = '.prepare($id_articolo).'
372+
AND dir = '.prepare($direzione).'
373+
AND an_sedi.id = '.prepare($id_sede);
374+
$listini = database()->fetchArray($query);
375+
}
376+
377+
// Se non è stato trovato un listino per la sede o non è stato fornito id_sede, cerca il listino dell'anagrafica
378+
if (empty($listini)) {
379+
$query = 'SELECT minimo, massimo,
380+
sconto_percentuale AS sconto_percentuale_listino,
381+
'.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
382+
FROM mg_listini
383+
LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
384+
LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino
385+
WHERE mg_listini.data_attivazione<=NOW()
386+
AND (mg_listini_articoli.data_scadenza>=NOW() OR (mg_listini_articoli.data_scadenza IS NULL AND mg_listini.data_scadenza_predefinita>=NOW()))
387+
AND mg_listini.attivo=1
388+
AND id_articolo = '.prepare($id_articolo).'
389+
AND dir = '.prepare($direzione).'
390+
AND idanagrafica = '.prepare($id_anagrafica);
391+
$listini = database()->fetchArray($query);
392+
}
373393

374394
// Prezzi listini clienti sempre visibili
375395
$query = 'SELECT mg_listini.nome, minimo, massimo, sconto_percentuale AS sconto_percentuale_listino_visibile,

modules/articoli/ajax/complete.php

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@
235235
$id_articolo = get('id_articolo');
236236
$id_anagrafica = get('id_anagrafica');
237237
$direzione = get('dir') == 'uscita' ? 'uscita' : 'entrata';
238+
$idsede_destinazione = get('idsede_destinazione');
238239

239240
if (empty($id_articolo) || empty($id_anagrafica)) {
240241
return;
@@ -253,6 +254,25 @@
253254
'|where|' => ' AND id_anagrafica = '.prepare($id_anagrafica),
254255
]);
255256
$prezzi = $database->fetchArray($query_anagrafica);
257+
258+
// prezzi listini sede
259+
$listino_sede = [];
260+
if ($idsede_destinazione) {
261+
$query = 'SELECT minimo, massimo,
262+
sconto_percentuale AS sconto_percentuale_listino,
263+
'.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino
264+
FROM mg_listini
265+
LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino
266+
LEFT JOIN an_sedi ON mg_listini.id=an_sedi.id_listino
267+
WHERE mg_listini.data_attivazione<=NOW()
268+
AND (mg_listini_articoli.data_scadenza>=NOW() OR (mg_listini_articoli.data_scadenza IS NULL AND mg_listini.data_scadenza_predefinita>=NOW()))
269+
AND mg_listini.attivo=1
270+
AND id_articolo = '.prepare($id_articolo).'
271+
AND dir = '.prepare($direzione).'
272+
AND an_sedi.id = '.prepare($idsede_destinazione).'
273+
ORDER BY minimo ASC, massimo DESC';
274+
$listino_sede = $database->fetchArray($query);
275+
}
256276

257277
// Prezzi listini clienti
258278
$query = 'SELECT minimo, massimo,
@@ -270,6 +290,8 @@
270290
ORDER BY minimo ASC, massimo DESC';
271291
$listino = $database->fetchArray($query);
272292

293+
$listini = array_merge($listino_sede, $listino);
294+
273295
// Prezzi listini clienti sempre visibili
274296
$query = 'SELECT minimo, massimo,
275297
mg_listini.nome, sconto_percentuale AS sconto_percentuale_listino_visibile,
@@ -295,7 +317,7 @@
295317
// Ultimo prezzo al cliente
296318
$ultimo_prezzo = $dbo->fetchArray('SELECT '.($prezzi_ivati ? '(`prezzo_unitario_ivato`-`sconto_unitario_ivato`)' : '(`prezzo_unitario`-`sconto_unitario`)').' AS prezzo_ultimo FROM `co_righe_documenti` INNER JOIN `co_documenti` ON `co_documenti`.`id`=`co_righe_documenti`.`iddocumento` INNER JOIN `co_tipidocumento` ON `co_tipidocumento`.`id`=`co_documenti`.`idtipodocumento` WHERE `idarticolo`='.prepare($id_articolo).' AND `idanagrafica`='.prepare($id_anagrafica).' AND `co_tipidocumento`.`dir`='.prepare($direzione).' ORDER BY `data` DESC LIMIT 0,1');
297319

298-
$results = array_merge($prezzi, $listino, $listini_sempre_visibili, $prezzo_articolo, $ultimo_prezzo);
320+
$results = array_merge($prezzi, $listini, $listini_sempre_visibili, $prezzo_articolo, $ultimo_prezzo);
299321

300322
echo json_encode($results);
301323

modules/contratti/actions.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -881,9 +881,9 @@
881881
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
882882

883883
// CALCOLO PREZZO UNITARIO
884-
$prezzo_consigliato = getPrezzoConsigliato($id_anagrafica, $dir, $id_articolo);
884+
$prezzo_consigliato = getPrezzoConsigliato($id_anagrafica, $dir, $id_articolo, $articolo, $contratto->idsede_destinazione);
885885
if (!$prezzo_consigliato['prezzo_unitario']) {
886-
$prezzo_consigliato = getPrezzoConsigliato(setting('Azienda predefinita'), $dir, $id_articolo);
886+
$prezzo_consigliato = getPrezzoConsigliato(setting('Azienda predefinita'), $dir, $id_articolo, $articolo);
887887
}
888888
$prezzo_unitario = $prezzo_consigliato['prezzo_unitario'];
889889
$sconto = $prezzo_consigliato['sconto'];
@@ -982,9 +982,9 @@
982982
$id_articolo = $riga->idarticolo;
983983

984984
if ($update_prezzo_vendita) {
985-
$prezzo_consigliato = getPrezzoConsigliato($id_anagrafica, $dir, $id_articolo);
985+
$prezzo_consigliato = getPrezzoConsigliato($id_anagrafica, $dir, $id_articolo, $riga, $contratto->idsede_destinazione);
986986
if (!$prezzo_consigliato['prezzo_unitario']) {
987-
$prezzo_consigliato = getPrezzoConsigliato(setting('Azienda predefinita'), $dir, $id_articolo);
987+
$prezzo_consigliato = getPrezzoConsigliato(setting('Azienda predefinita'), $dir, $id_articolo, $riga);
988988
}
989989
$prezzo_unitario = $prezzo_consigliato['prezzo_unitario'];
990990
$sconto = $prezzo_consigliato['sconto'];

modules/contratti/row-edit.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
'idanagrafica' => $documento->idanagrafica,
3939
'dir' => $documento->direzione,
4040
'permetti_movimento_a_zero' => 1,
41+
'idsede_destinazione' => $documento->idsede_destinazione
4142
],
4243
],
4344
];

modules/contratti/row-list.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@
194194
if ($riga->isArticolo()) {
195195
$id_anagrafica = $contratto->idanagrafica;
196196
$dir = 'entrata';
197-
$show_notifica = getPrezzoConsigliato($id_anagrafica, $dir, $riga->idarticolo, $riga);
197+
$show_notifica = getPrezzoConsigliato($id_anagrafica, $dir, $riga->idarticolo, $riga, $contratto->idsede_destinazione);
198198
}
199199

200200
if ($riga->isSconto()) {

modules/ddt/actions.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -756,9 +756,9 @@
756756
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
757757

758758
// CALCOLO PREZZO UNITARIO
759-
$prezzo_consigliato = getPrezzoConsigliato($id_anagrafica, $dir, $id_articolo);
759+
$prezzo_consigliato = getPrezzoConsigliato($id_anagrafica, $dir, $id_articolo, $articolo, $ddt->idsede_destinazione);
760760
if (!$prezzo_consigliato['prezzo_unitario']) {
761-
$prezzo_consigliato = getPrezzoConsigliato(setting('Azienda predefinita'), $dir, $id_articolo);
761+
$prezzo_consigliato = getPrezzoConsigliato(setting('Azienda predefinita'), $dir, $id_articolo, $articolo);
762762
}
763763
$prezzo_unitario = $prezzo_consigliato['prezzo_unitario'];
764764
$sconto = $prezzo_consigliato['sconto'];
@@ -862,9 +862,9 @@
862862
$sconto = 0;
863863
if ($riga->isArticolo()) {
864864
$id_articolo = $riga->idarticolo;
865-
$prezzo_consigliato = getPrezzoConsigliato($id_anagrafica, $dir, $id_articolo);
865+
$prezzo_consigliato = getPrezzoConsigliato($id_anagrafica, $dir, $id_articolo, $riga, $ddt->idsede_destinazione);
866866
if (!$prezzo_consigliato['prezzo_unitario']) {
867-
$prezzo_consigliato = getPrezzoConsigliato(setting('Azienda predefinita'), $dir, $id_articolo);
867+
$prezzo_consigliato = getPrezzoConsigliato(setting('Azienda predefinita'), $dir, $id_articolo, $riga);
868868
}
869869
$prezzo_unitario = $prezzo_consigliato['prezzo_unitario'];
870870
$sconto = $prezzo_consigliato['sconto'];

modules/ddt/row-list.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@
210210

211211
if ($riga->isArticolo()) {
212212
$id_anagrafica = $ddt->idanagrafica;
213-
$show_notifica = getPrezzoConsigliato($id_anagrafica, $dir, $riga->idarticolo, $riga);
213+
$show_notifica = getPrezzoConsigliato($id_anagrafica, $dir, $riga->idarticolo, $riga, $ddt->idsede_destinazione);
214214
}
215215

216216
// Costi unitari

modules/fatture/actions.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1267,9 +1267,9 @@
12671267
$prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA');
12681268

12691269
// CALCOLO PREZZO UNITARIO
1270-
$prezzo_consigliato = getPrezzoConsigliato($id_anagrafica, $dir, $id_articolo);
1270+
$prezzo_consigliato = getPrezzoConsigliato($id_anagrafica, $dir, $id_articolo, $articolo, $fattura->idsede_destinazione);
12711271
if (!$prezzo_consigliato['prezzo_unitario']) {
1272-
$prezzo_consigliato = getPrezzoConsigliato(setting('Azienda predefinita'), $dir, $id_articolo);
1272+
$prezzo_consigliato = getPrezzoConsigliato(setting('Azienda predefinita'), $dir, $id_articolo, $articolo);
12731273
}
12741274
$prezzo_unitario = $prezzo_consigliato['prezzo_unitario'];
12751275
$sconto = $prezzo_consigliato['sconto'];
@@ -1384,9 +1384,9 @@
13841384
$sconto = 0;
13851385
if ($riga->isArticolo()) {
13861386
$id_articolo = $riga->idarticolo;
1387-
$prezzo_consigliato = getPrezzoConsigliato($id_anagrafica, $dir, $id_articolo);
1387+
$prezzo_consigliato = getPrezzoConsigliato($id_anagrafica, $dir, $id_articolo, $riga, $fattura->idsede_destinazione);
13881388
if (!$prezzo_consigliato['prezzo_unitario']) {
1389-
$prezzo_consigliato = getPrezzoConsigliato(setting('Azienda predefinita'), $dir, $id_articolo);
1389+
$prezzo_consigliato = getPrezzoConsigliato(setting('Azienda predefinita'), $dir, $id_articolo, $riga);
13901390
}
13911391
$prezzo_unitario = $prezzo_consigliato['prezzo_unitario'];
13921392
$sconto = $prezzo_consigliato['sconto'];

modules/fatture/row-list.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@
234234

235235
if ($riga->isArticolo()) {
236236
$id_anagrafica = $fattura->idanagrafica;
237-
$show_notifica = getPrezzoConsigliato($id_anagrafica, $dir, $riga->idarticolo, $riga);
237+
$show_notifica = getPrezzoConsigliato($id_anagrafica, $dir, $riga->idarticolo, $riga, $fattura->idsede_destinazione);
238238
}
239239

240240
// Costi unitari

0 commit comments

Comments
 (0)