diff --git a/modules/articoli/ajax/select.php b/modules/articoli/ajax/select.php index 909fa447b..3be6f8f9f 100755 --- a/modules/articoli/ajax/select.php +++ b/modules/articoli/ajax/select.php @@ -106,8 +106,8 @@ switch ($resource) { // Se c'è una sede settata, carico tutti gli articoli presenti in quella sede if (!$sedi_non_impostate) { $query .= ' - LEFT JOIN (SELECT idarticolo, idsede_azienda, idsede_controparte FROM mg_movimenti GROUP BY idarticolo) movimenti ON movimenti.idarticolo=mg_articoli.id - LEFT JOIN an_sedi ON an_sedi.id = movimenti.idsede_azienda'; + LEFT JOIN (SELECT idarticolo, idsede FROM mg_movimenti GROUP BY idarticolo) movimenti ON movimenti.idarticolo=mg_articoli.id + LEFT JOIN an_sedi ON an_sedi.id = movimenti.idsede'; } $query .= ' @@ -154,20 +154,11 @@ switch ($resource) { // IVA da impostazioni foreach ($rs as $k => $r) { // Lettura movimenti delle mie sedi - $qta_azienda = $dbo->fetchOne('SELECT SUM(mg_movimenti.qta) AS qta FROM mg_movimenti LEFT JOIN an_sedi ON an_sedi.id = mg_movimenti.idsede_azienda WHERE mg_movimenti.idarticolo = '.prepare($r['id']).' AND idsede_azienda = '.prepare($superselect['idsede_partenza'])); - - // Lettura eventuali movimenti ad una propria sede (nel caso di movimenti fra sedi della mia azienda) per il calcolo corretto delle quantità - if ($superselect['idsede_partenza'] != 0) { - $qta_controparte = $dbo->fetchOne('SELECT SUM(mg_movimenti.qta) AS qta FROM mg_movimenti LEFT JOIN an_sedi ON an_sedi.id = mg_movimenti.idsede_controparte WHERE mg_movimenti.idarticolo = '.prepare($r['id']).' AND idsede_controparte = '.prepare($superselect['idsede_partenza'])); - } else { - $qta_controparte = $dbo->fetchOne('SELECT SUM(mg_movimenti.qta) AS qta FROM ((( mg_movimenti LEFT JOIN an_sedi ON an_sedi.id = mg_movimenti.idsede_controparte ) LEFT JOIN dt_ddt ON mg_movimenti.idddt = dt_ddt.id ) LEFT JOIN co_documenti ON mg_movimenti.iddocumento = co_documenti.id ) WHERE mg_movimenti.idarticolo = '.prepare($r['id']).' AND idsede_controparte = '.prepare($superselect['idsede_partenza']).' AND IFNULL(dt_ddt.idanagrafica, co_documenti.idanagrafica) = '.prepare(setting('Azienda predefinita'))); - } - - $qta = $qta_azienda['qta'] - $qta_controparte['qta']; + $qta_sede = $dbo->fetchOne('SELECT SUM(mg_movimenti.qta) AS qta FROM mg_movimenti LEFT JOIN an_sedi ON an_sedi.id = mg_movimenti.idsede WHERE mg_movimenti.idarticolo = '.prepare($r['id']).' AND idsede = '.prepare($superselect['idsede_partenza']))['qta']; $rs[$k] = array_merge($r, [ - 'text' => $r['codice'].' - '.$r['descrizione'].' '.(!$r['servizio'] ? '('.Translator::numberToLocale($qta).(!empty($r['um']) ? ' '.$r['um'] : '').')' : ''), - 'disabled' => $r['qta'] <= 0 && !$permetti_movimenti_sotto_zero && !$r['servizio'], + 'text' => $r['codice'].' - '.$r['descrizione'].' '.(!$r['servizio'] ? '('.Translator::numberToLocale($qta_sede).(!empty($r['um']) ? ' '.$r['um'] : '').')' : ''), + 'disabled' => $qta_sede <= 0 && !$permetti_movimenti_sotto_zero && !$r['servizio'], ]); } diff --git a/modules/articoli/modutil.php b/modules/articoli/modutil.php index b2c328054..70cb11dc5 100755 --- a/modules/articoli/modutil.php +++ b/modules/articoli/modutil.php @@ -121,23 +121,20 @@ function aggiorna_sedi_movimenti($module, $id) if ($module == 'ddt') { $rs = $dbo->fetchArray('SELECT idsede_partenza, idsede_destinazione, dir FROM dt_ddt INNER JOIN dt_tipiddt ON dt_tipiddt.id = dt_ddt.idtipoddt WHERE dt_ddt.id='.prepare($id)); - $idsede_azienda = ($rs[0]['dir'] == 'uscita') ? $rs[0]['idsede_destinazione'] : $rs[0]['idsede_partenza']; - $idsede_controparte = ($rs[0]['dir'] == 'uscita') ? $rs[0]['idsede_partenza'] : $rs[0]['idsede_destinazione']; + $idsede = ($rs[0]['dir'] == 'uscita') ? $rs[0]['idsede_destinazione'] : $rs[0]['idsede_partenza']; - $dbo->query('UPDATE mg_movimenti SET idsede_azienda='.prepare($idsede_azienda).', idsede_controparte='.prepare($idsede_controparte).' WHERE idddt='.prepare($id)); + $dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE idddt='.prepare($id)); } elseif ($module == 'documenti') { $rs = $dbo->fetchArray('SELECT idsede_partenza, idsede_destinazione, dir FROM co_documenti INNER JOIN co_tipidocumento ON co_tipidocumento.id = co_documenti.idtipodocumento WHERE co_documenti.id='.prepare($id)); - $idsede_azienda = ($rs[0]['dir'] == 'uscita') ? $rs[0]['idsede_destinazione'] : $rs[0]['idsede_partenza']; - $idsede_controparte = ($rs[0]['dir'] == 'uscita') ? $rs[0]['idsede_partenza'] : $rs[0]['idsede_destinazione']; + $idsede = ($rs[0]['dir'] == 'uscita') ? $rs[0]['idsede_destinazione'] : $rs[0]['idsede_partenza']; - $dbo->query('UPDATE mg_movimenti SET idsede_azienda='.prepare($idsede_azienda).', idsede_controparte='.prepare($idsede_controparte).' WHERE iddocumento='.prepare($id)); + $dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE iddocumento='.prepare($id)); } elseif ($module == 'interventi') { $rs = $dbo->fetchArray('SELECT idsede_partenza, idsede_destinazione FROM in_interventi WHERE in_interventi.id='.prepare($id)); - $idsede_azienda = $rs[0]['idsede_partenza']; - $idsede_controparte = $rs[0]['idsede_destinazione']; + $idsede = $rs[0]['idsede_partenza']; - $dbo->query('UPDATE mg_movimenti SET idsede_azienda='.prepare($idsede_azienda).', idsede_controparte='.prepare($idsede_controparte).' WHERE idintervento='.prepare($id)); + $dbo->query('UPDATE mg_movimenti SET idsede='.prepare($idsede).' WHERE idintervento='.prepare($id)); } } diff --git a/modules/articoli/src/Articolo.php b/modules/articoli/src/Articolo.php index 4554151c2..12c541889 100755 --- a/modules/articoli/src/Articolo.php +++ b/modules/articoli/src/Articolo.php @@ -204,12 +204,12 @@ class Articolo extends Model { return $this->movimenti() ->select( - 'idsede_azienda', + 'idsede', database()->raw('SUM(qta) AS qta') - )->groupBy(['idsede_azienda']) + )->groupBy(['idsede']) ->get() ->mapToGroups(function ($item, $key) { - return [$item->idsede_azienda => (float) $item->attributes['qta']]; + return [$item->idsede => (float) $item->attributes['qta']]; }) ->flatten() ->toArray(); diff --git a/modules/articoli/src/Import/CSV.php b/modules/articoli/src/Import/CSV.php index 21b96716e..c5b352c56 100644 --- a/modules/articoli/src/Import/CSV.php +++ b/modules/articoli/src/Import/CSV.php @@ -291,8 +291,7 @@ class CSV extends CSVImporter $qta_movimento = $qta_registrata - $giacenze[$id_sede]; $articolo->movimenta($qta_movimento, tr('Movimento da importazione'), new Carbon(), false, [ - 'idsede_azienda' => $id_sede, - 'idsede_controparte' => 0, + 'idsede' => $id_sede, ]); } diff --git a/modules/articoli/src/Movimento.php b/modules/articoli/src/Movimento.php index 91e32cdf1..21c950889 100755 --- a/modules/articoli/src/Movimento.php +++ b/modules/articoli/src/Movimento.php @@ -24,12 +24,6 @@ use Illuminate\Database\Eloquent\Model; /* * Classe dedicata alla gestione dei movimenti di magazzino degli articoli. - * - * Alcuni appunti sull'utilizzo dei campi *idsede_azienda* e *idsede_controparte* - * Il campo *idsede_azienda* è relativo alla sede dell'Azienda che è interessata dal movimento, mentre *idsede_controparte* indica la sede del Cliente/Fornitore controparte. - * La natura effettiva del movimento (e di *idsede_controparte*) è quindi identificabile dal valore del campo *qta*: se positivo il magazzino è aumentatao (movimento da *idsede_controparte* a *idsede_azienda*), se negativo il magazzino è diminuito (movimento da *idsede_azienda* a *idsede_controparte*). - * - * Si noti che il valore "0" per i campi *idsede_* indica solitamente una Sede legale dell'Anagrafica di riferimento. Solo se il movimento non è associato ad alcun documento il campo *idsede_controparte* non segue questo significato, poichè il movimento in questo caso è considerato manuale. */ class Movimento extends Model { diff --git a/modules/movimenti/actions.php b/modules/movimenti/actions.php index a6ee362c2..b7d082664 100755 --- a/modules/movimenti/actions.php +++ b/modules/movimenti/actions.php @@ -45,20 +45,17 @@ switch (post('op')) { // Registrazione del movimento con variazione della quantità $articolo->movimenta($qta, $descrizione, $data, 1, [ - 'idsede_controparte' => $id_sede_controparte, - 'idsede_azienda' => $id_sede_azienda, + 'idsede' => $id_sede_azienda, ]); } elseif ($tipo_movimento == 'spostamento') { // Registrazione del movimento verso la sede di destinazione $articolo->registra($qta, $descrizione, $data, 1, [ - 'idsede_controparte' => 0, - 'idsede_azienda' => $idsede_destinazione, + 'idsede' => $idsede_destinazione, ]); // Registrazione del movimento dalla sede di origine $articolo->registra(-$qta, $descrizione, $data, 1, [ - 'idsede_controparte' => 0, - 'idsede_azienda' => $idsede_partenza, + 'idsede' => $idsede_partenza, ]); } diff --git a/src/Common/Components/Article.php b/src/Common/Components/Article.php index eb23f7ede..30c0be7e9 100755 --- a/src/Common/Components/Article.php +++ b/src/Common/Components/Article.php @@ -277,8 +277,7 @@ abstract class Article extends Accounting $qta_movimento = $documento->direzione == 'uscita' ? $qta : -$qta; $movimento = Movimento::descrizioneMovimento($qta_movimento, $documento->direzione).' - '.$documento->getReference(); - $partenza = $documento->direzione == 'uscita' ? $documento->idsede_destinazione : $documento->idsede_partenza; - $arrivo = $documento->direzione == 'uscita' ? $documento->idsede_partenza : $documento->idsede_destinazione; + $idsede = $documento->direzione == 'uscita' ? $documento->idsede_destinazione : $documento->idsede_partenza; // Fix per valori di sede a NULL $partenza = $partenza ?: 0; @@ -287,8 +286,7 @@ abstract class Article extends Accounting $this->articolo->movimenta($qta_movimento, $movimento, $data, false, [ 'reference_type' => get_class($documento), 'reference_id' => $documento->id, - 'idsede_azienda' => $partenza, - 'idsede_controparte' => $arrivo, + 'idsede' => $idsede, ]); } diff --git a/update/2_4_22.sql b/update/2_4_22.sql index 1283868ac..b950781be 100644 --- a/update/2_4_22.sql +++ b/update/2_4_22.sql @@ -94,4 +94,8 @@ ALTER TABLE `co_documenti` ADD `is_ritenuta_pagata` BOOLEAN NOT NULL AFTER `id_r UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_scadenziario`\r\n LEFT JOIN `co_documenti` ON `co_scadenziario`.`iddocumento` = `co_documenti`.`id`\r\n LEFT JOIN `an_anagrafiche` ON `co_documenti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica`\r\n LEFT JOIN `co_pagamenti` ON `co_documenti`.`idpagamento` = `co_pagamenti`.`id`\r\n LEFT JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id`\r\n LEFT JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id`\r\nWHERE 1=1 AND\r\n (`co_statidocumento`.`descrizione` IS NULL OR `co_statidocumento`.`descrizione` IN(\'Emessa\',\'Parzialmente pagato\',\'Pagato\'))\r\nHAVING 2=2\r\nORDER BY `scadenza` ASC' WHERE `zz_modules`.`id` = (SELECT `id` FROM `zz_modules` WHERE `name`='Scadenzario'); -- Modificato nome segmento -UPDATE `zz_segments` SET `name` = 'Scadenzario completo per periodo' WHERE `zz_segments`.`name` = 'Scadenzario completo'; \ No newline at end of file +UPDATE `zz_segments` SET `name` = 'Scadenzario completo per periodo' WHERE `zz_segments`.`name` = 'Scadenzario completo'; + +-- Eliminata colonna idsede_controparte e rinominata idsede_azienda in idsede +ALTER TABLE `mg_movimenti` CHANGE `idsede_azienda` `idsede` INT(11) NOT NULL; +ALTER TABLE `mg_movimenti` DROP `idsede_controparte`; \ No newline at end of file