diff --git a/modules/articoli/edit.php b/modules/articoli/edit.php index 3086edf82..88f5988bd 100755 --- a/modules/articoli/edit.php +++ b/modules/articoli/edit.php @@ -68,65 +68,27 @@ include_once __DIR__.'/../../core.php';
-
+
{[ "type": "checkbox", "label": "", "name": "abilita_serial", "value": "$abilita_serial$", "help": "", "placeholder": "", "extra": " 0) ? 'readonly' : ''; ?>" ]}
-
+
{[ "type": "checkbox", "label": "", "name": "attivo", "help": "", "value": "$attivo$", "placeholder": "" ]}
-
+
+ +
+
{[ "type": "text", "label": "", "name": "ubicazione", "value": "$ubicazione$" ]}
-
-
-
- {[ "type": "number", "label": "", "name": "qta", "required": 1, "value": "$qta$", "readonly": 1, "decimals": "qta", "min-value": "undefined" ]} - -
-
- {[ "type": "checkbox", "label": "", "name": "qta_manuale", "value": 0, "help": "", "placeholder": "", "extra": "" ]} - -
- -
- {[ "type": "select", "label": "", "name": "um", "value": "$um$", "ajax-source": "misure", "icon-after": "add|" ]} +
+ {[ "type": "select", "label": "", "name": "um", "value": "$um$", "ajax-source": "misure", "icon-after": "add|" ]}
- -
+
{[ "type": "textarea", "label": "", "name": "note", "value": "$note$" ]}
@@ -134,6 +96,64 @@ include_once __DIR__.'/../../core.php';
+
+
+

+ +

+
+ +
+
+
+ {[ "type": "number", "label": "", "name": "qta", "required": 1, "value": "$qta$", "readonly": 1, "decimals": "qta", "min-value": "undefined" ]} + +
+ +
+ {[ "type": "checkbox", "label": "", "name": "qta_manuale", "value": 0, "help": "", "placeholder": "", "extra": "" ]} +
+
+ + + +
+

. .

+
+ + +
+
+
diff --git a/modules/articoli/plugins/articoli.giacenze.php b/modules/articoli/plugins/articoli.giacenze.php index f8b67b59f..d4da403ea 100755 --- a/modules/articoli/plugins/articoli.giacenze.php +++ b/modules/articoli/plugins/articoli.giacenze.php @@ -218,7 +218,8 @@ echo '
'; -$sedi = $dbo->fetchArray('(SELECT "0" AS id, CONCAT_WS (" - ", "Sede legale", citta) AS nomesede FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting('Azienda predefinita')).') UNION (SELECT id, CONCAT_WS(" - ", nomesede, citta ) AS nomesede FROM an_sedi WHERE idanagrafica='.prepare(setting('Azienda predefinita')).')'); +$sedi = $dbo->fetchArray('(SELECT "0" AS id, CONCAT_WS (" - ", "Sede legale", citta) AS nomesede FROM an_anagrafiche WHERE idanagrafica = '.prepare(setting('Azienda predefinita')).') UNION (SELECT id, CONCAT_WS(" - ", nomesede, citta ) AS nomesede FROM an_sedi WHERE idanagrafica='.prepare(setting('Azienda predefinita')).')'); +$giacenze = $articolo->getGiacenze(); echo '
@@ -240,13 +241,10 @@ echo ' '; foreach ($sedi as $sede) { - // Lettura movimenti delle mie sedi - $qta_azienda = $dbo->fetchOne("SELECT SUM(mg_movimenti.qta) AS qta, IF(mg_movimenti.idsede_azienda= 0,'Sede legale',(CONCAT_WS(' - ',an_sedi.nomesede,an_sedi.citta))) as sede FROM mg_movimenti LEFT JOIN an_sedi ON an_sedi.id = mg_movimenti.idsede_azienda WHERE mg_movimenti.idarticolo=".prepare($id_record).' AND idsede_azienda='.prepare($sede['id']).' GROUP BY idsede_azienda'); - echo ' '.$sede['nomesede'].' - '.Translator::numberToLocale($qta_azienda['qta']).' '.$articolo->um.' + '.numberFormat($giacenze[$sede['id']]).' '.$articolo->um.' '; } diff --git a/modules/articoli/src/Articolo.php b/modules/articoli/src/Articolo.php index f2dafa185..88edfa0c6 100755 --- a/modules/articoli/src/Articolo.php +++ b/modules/articoli/src/Articolo.php @@ -195,6 +195,26 @@ class Articolo extends Model return $this->hasMany(Movimento::class, 'idarticolo'); } + /** + * Restituisce le giacenze per sede dell'articolo. + * + * @return array + */ + public function getGiacenze() + { + return $this->movimenti() + ->select( + 'idsede_azienda', + database()->raw('SUM(qta) AS qta') + )->groupBy(['idsede_azienda']) + ->get() + ->mapToGroups(function ($item, $key) { + return [$item->idsede_azienda => (float) $item->attributes['qta']]; + }) + ->flatten() + ->toArray(); + } + /** * Restituisce i movimenti di magazzino dell'articolo raggruppati per documento relativo. * diff --git a/modules/articoli/src/Import/CSV.php b/modules/articoli/src/Import/CSV.php index c56f0e78b..0041b212e 100644 --- a/modules/articoli/src/Import/CSV.php +++ b/modules/articoli/src/Import/CSV.php @@ -21,6 +21,7 @@ namespace Modules\Articoli\Import; use Carbon\Carbon; use Importer\CSVImporter; +use Modules\Anagrafiche\Sede; use Modules\Articoli\Articolo; use Modules\Articoli\Categoria; use Modules\Iva\Aliquota; @@ -141,6 +142,7 @@ class CSV extends CSVImporter { $database = database(); $primary_key = $this->getPrimaryKey(); + $anagrafica_azienda = Anagrafica::find(setting('Azienda predefinita')); // Fix per campi con contenuti derivati da query implicite if (!empty($record['id_fornitore'])) { @@ -203,13 +205,20 @@ class CSV extends CSVImporter $articolo->save(); // Movimentazione della quantità registrata - $qta_movimento = $qta_registrata - (float) ($articolo->qta); + $giacenze = $articolo->getGiacenze(); + $id_sede = 0; + if (!empty($nome_sede)) { + $sede = Sede::where('nomesede', $nome_sede) + ->where('idanagrafica', $anagrafica_azienda->id) + ->first(); + $id_sede = $sede->id; + } + + $qta_movimento = $qta_registrata - $giacenze[$id_sede]; $articolo->movimenta($qta_movimento, tr('Movimento da importazione'), new Carbon(), false, [ - /* - 'idsede_azienda' => $partenza, - 'idsede_controparte' => $arrivo, - */ + 'idsede_azienda' => $id_sede, + 'idsede_controparte' => 0, ]); } diff --git a/modules/movimenti/actions.php b/modules/movimenti/actions.php index e7300225e..2124be7d8 100755 --- a/modules/movimenti/actions.php +++ b/modules/movimenti/actions.php @@ -37,8 +37,8 @@ switch (post('op')) { $id_sede_azienda = $idsede_destinazione; $id_sede_controparte = 0; } elseif ($tipo_movimento == 'scarico') { - $id_sede_controparte = 0; $id_sede_azienda = $idsede_partenza; + $id_sede_controparte = 0; $qta = -$qta; }