|
62 | 62 | $articolo->name = post('descrizione'); |
63 | 63 | } |
64 | 64 |
|
| 65 | + if (post('genera_barcode')) { |
| 66 | + $codice = '200'.str_pad((string) $articolo->id, 9, '0', STR_PAD_LEFT); |
| 67 | + $barcode = (new Picqer\Barcode\Types\TypeEan13())->getBarcode($codice)->getBarcode(); |
| 68 | + } |
| 69 | + $articolo->barcode = $barcode ?: post('barcode'); |
65 | 70 | $articolo->coefficiente = post('coefficiente'); |
66 | 71 | $articolo->idiva_vendita = post('idiva_vendita'); |
67 | 72 | $articolo->prezzo_acquisto = post('prezzo_acquisto'); |
|
71 | 76 | $articolo->idconto_vendita = post('idconto_vendita'); |
72 | 77 | $articolo->idconto_acquisto = post('idconto_acquisto'); |
73 | 78 | $articolo->abilita_serial = post('abilita_serial_add'); |
74 | | - |
| 79 | + $articolo->ubicazione = post('ubicazione'); |
75 | 80 | $articolo->um = post('um'); |
76 | 81 | $articolo->um_secondaria = post('um_secondaria'); |
77 | 82 | $articolo->fattore_um_secondaria = post('fattore_um_secondaria'); |
|
92 | 97 | $id_record = $articolo->id; |
93 | 98 | $iva = post('idiva_vendita') ? Aliquota::find(post('idiva_vendita')) : null; |
94 | 99 |
|
95 | | - if (post('genera_barcode')) { |
96 | | - // Genera un barcode unico controllando sia la tabella mg_articoli che mg_articoli_barcode |
97 | | - // per evitare conflitti con barcode esistenti sia principali che aggiuntivi |
98 | | - $tentativi = 0; |
99 | | - $max_tentativi = 1000; // Limite massimo di tentativi per evitare loop infiniti |
100 | | - |
101 | | - do { |
102 | | - // Genera il codice EAN-13 basato sull'ID dell'articolo più il numero di tentativi |
103 | | - $codice = '200'.str_pad((string) ($articolo->id + $tentativi), 9, '0', STR_PAD_LEFT); |
104 | | - $barcode = (new Picqer\Barcode\Types\TypeEan13())->getBarcode($codice)->getBarcode(); |
105 | | - |
106 | | - // Controlla se il barcode è già presente nella tabella mg_articoli (barcode principali) |
107 | | - $esistente_articoli = Articolo::where('barcode', $barcode)->count() > 0; |
108 | | - |
109 | | - // Controlla se il barcode è già presente nella tabella mg_articoli_barcode (barcode aggiuntivi) |
110 | | - $esistente_barcode = $dbo->table('mg_articoli_barcode') |
111 | | - ->where('barcode', $barcode) |
112 | | - ->count() > 0; |
113 | | - |
114 | | - // Controlla se il barcode coincide con un codice articolo esistente |
115 | | - // per evitare conflitti tra barcode e codici articolo |
116 | | - $coincide_codice = Articolo::where([ |
117 | | - ['codice', $barcode], |
118 | | - ['barcode', '=', ''] |
119 | | - ])->count() > 0; |
120 | | - |
121 | | - $tentativi++; |
122 | | - |
123 | | - } while (($esistente_articoli || $esistente_barcode || $coincide_codice) && $tentativi < $max_tentativi); |
124 | | - |
125 | | - // Se dopo tutti i tentativi non è stato trovato un barcode unico, non genera il barcode |
126 | | - if ($tentativi >= $max_tentativi) { |
127 | | - $barcode = null; |
128 | | - flash()->warning(tr('Impossibile generare un barcode unico dopo _NUM_ tentativi', [ |
129 | | - '_NUM_' => $max_tentativi |
130 | | - ])); |
131 | | - } |
132 | | - } |
133 | | - |
134 | | - $barcode = ($barcode ? $barcode : post('barcode')); |
135 | | - if (!empty($barcode)) { |
136 | | - $dbo->insert('mg_articoli_barcode', [ |
137 | | - 'idarticolo' => $id_record, |
138 | | - 'barcode' => $barcode, |
139 | | - ]); |
140 | | - } |
141 | | - |
142 | 100 | if (isAjaxRequest()) { |
143 | 101 | echo json_encode([ |
144 | 102 | 'id' => $id_record, |
|
181 | 139 | } |
182 | 140 |
|
183 | 141 | $articolo->codice = post('codice', true); |
| 142 | + $articolo->barcode = post('barcode'); |
184 | 143 | $articolo->um = post('um'); |
185 | | - $articolo->id_categoria = post('categoria_edit') ?: post('categoria'); |
186 | | - $articolo->id_sottocategoria = post('subcategoria_edit') ?: post('subcategoria'); |
| 144 | + $articolo->id_categoria = post('categoria'); |
| 145 | + $articolo->id_sottocategoria = post('subcategoria'); |
187 | 146 | $articolo->abilita_serial = post('abilita_serial'); |
188 | 147 | $articolo->ubicazione = post('ubicazione'); |
189 | 148 | $articolo->coefficiente = post('coefficiente'); |
|
196 | 155 | $articolo->servizio = post('servizio'); |
197 | 156 | $articolo->volume = post('volume'); |
198 | 157 | $articolo->peso_lordo = post('peso_lordo'); |
199 | | - $articolo->id_marca = post('id_marca_edit') ?: post('id_marca'); |
200 | | - $articolo->id_modello = post('id_modello_edit') ?: post('id_modello'); |
| 158 | + $articolo->id_marca = post('id_marca'); |
| 159 | + $articolo->id_modello = post('id_modello'); |
201 | 160 |
|
202 | 161 | $articolo->um_secondaria = post('um_secondaria'); |
203 | 162 | $articolo->fattore_um_secondaria = post('fattore_um_secondaria'); |
|
506 | 465 | break; |
507 | 466 |
|
508 | 467 | case 'generate-barcode': |
509 | | - // Genera un barcode unico controllando sia la tabella mg_articoli che mg_articoli_barcode |
510 | | - // per garantire l'unicità anche considerando i barcode aggiuntivi degli articoli |
511 | | - $tentativi = 0; |
512 | | - $max_tentativi = 1000; // Limite massimo di tentativi per evitare loop infiniti |
513 | | - |
514 | | - do { |
515 | | - // Genera il codice EAN-13 basato sull'ID dell'articolo più il numero di tentativi |
516 | | - $codice = '200'.str_pad((string) ($id_record + $tentativi), 9, '0', STR_PAD_LEFT); |
517 | | - $barcode = (new Picqer\Barcode\Types\TypeEan13())->getBarcode($codice)->getBarcode(); |
518 | | - |
519 | | - // Controlla se il barcode è già presente nella tabella mg_articoli (barcode principali) |
520 | | - $esistente_articoli = Articolo::where('barcode', $barcode)->count() > 0; |
521 | | - |
522 | | - // Controlla se il barcode è già presente nella tabella mg_articoli_barcode (barcode aggiuntivi) |
523 | | - $esistente_barcode = $dbo->table('mg_articoli_barcode') |
524 | | - ->where('barcode', $barcode) |
525 | | - ->count() > 0; |
526 | | - |
527 | | - // Controlla se il barcode coincide con un codice articolo esistente |
528 | | - // per evitare conflitti tra barcode e codici articolo |
529 | | - $coincide_codice = Articolo::where([ |
530 | | - ['codice', $barcode], |
531 | | - ['barcode', '=', ''] |
532 | | - ])->count() > 0; |
| 468 | + $codice = '200'.str_pad((string) $id_record, 9, '0', STR_PAD_LEFT); |
| 469 | + $barcode = (new Picqer\Barcode\Types\TypeEan13())->getBarcode($codice)->getBarcode(); |
533 | 470 |
|
534 | | - $tentativi++; |
535 | | - |
536 | | - } while (($esistente_articoli || $esistente_barcode || $coincide_codice) && $tentativi < $max_tentativi); |
537 | | - |
538 | | - // Se dopo tutti i tentativi non è stato trovato un barcode unico, restituisce un errore |
539 | | - if ($tentativi >= $max_tentativi) { |
540 | | - echo json_encode([ |
541 | | - 'error' => tr('Impossibile generare un barcode unico dopo _NUM_ tentativi', [ |
542 | | - '_NUM_' => $max_tentativi |
543 | | - ]) |
544 | | - ]); |
545 | | - } else { |
546 | | - // Restituisce il barcode generato con successo |
547 | | - echo json_encode([ |
548 | | - 'barcode' => $barcode, |
549 | | - ]); |
550 | | - } |
| 471 | + echo json_encode([ |
| 472 | + 'barcode' => $barcode, |
| 473 | + ]); |
551 | 474 |
|
552 | 475 | break; |
553 | 476 | } |
|
0 commit comments