From bace2165cadefba182aae181140ac65959850003 Mon Sep 17 00:00:00 2001 From: Luca Date: Wed, 15 Mar 2023 19:42:23 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Rimossi=20riferimenti=20a=20tabelle=20non?= =?UTF-8?q?=20pi=C3=B9=20presenti?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rimossi updated_at e created_at da query di update --- update/2_4_22.sql | 2 +- update/2_4_24.sql | 6 +++--- update/2_4_26.sql | 2 +- update/2_4_30.sql | 4 +--- update/2_4_33.sql | 2 +- update/2_4_37.sql | 2 +- update/2_4_38.sql | 16 ++++++++-------- update/tables.php | 3 --- 8 files changed, 16 insertions(+), 21 deletions(-) diff --git a/update/2_4_22.sql b/update/2_4_22.sql index 06ede2182..fe10bd928 100644 --- a/update/2_4_22.sql +++ b/update/2_4_22.sql @@ -182,7 +182,7 @@ INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione` (NULL, 'Numero massimo di tentativi', '10', 'integer', 1, 'Newsletter', 1, 'Numero massimo di tentativi da effettuare per cercare di inviare una mail'); -- Aggiunta colonna codice commessa convenzione -ALTER TABLE `or_ordini` ADD `codice_commessa` VARCHAR(100) NULL AFTER `updated_at`; +ALTER TABLE `or_ordini` ADD `codice_commessa` VARCHAR(100) NULL; -- Copiato in or_ordini id_documento_fe in numero_cliente dove è presente UPDATE `or_ordini` SET `numero_cliente`= `id_documento_fe` WHERE `id_documento_fe`!='' AND `id_documento_fe` IS NOT NULL; diff --git a/update/2_4_24.sql b/update/2_4_24.sql index 449e69ad9..73ad7892f 100644 --- a/update/2_4_24.sql +++ b/update/2_4_24.sql @@ -24,7 +24,7 @@ UPDATE `zz_prints` SET `title` = 'Richiesta di offerta (RdO)' WHERE `zz_prints`. UPDATE `zz_prints` SET `title` = 'Richiesta di acquisto (RdA)' WHERE `zz_prints`.`name` = 'Ordine fornitore'; -- Aggiunta impostazione formato ore in stampa intervento -INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `created_at`, `updated_at`, `order`, `help`) VALUES (NULL, 'Formato ore in stampa', 'Decimale', 'list[Decimale,Sessantesimi]', '1', 'Attività', NOW(), NOW(), '1', ''); +INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`,`order`, `help`) VALUES (NULL, 'Formato ore in stampa', 'Decimale', 'list[Decimale,Sessantesimi]', '1', 'Attività', '1', ''); -- Aggiunta plugin allegati dell'anagrafica INSERT INTO `zz_plugins` (`name`, `title`, `idmodule_from`, `idmodule_to`, `position`, `script`, `enabled`, `default`, `order`, `compatibility`, `version`, `options2`, `options`, `directory`, `help`) VALUES ('Allegati', 'Allegati', (SELECT `zz_modules`.`id` FROM `zz_modules` WHERE `zz_modules`.`name`='Anagrafiche'), (SELECT `zz_modules`.`id` FROM `zz_modules` WHERE `zz_modules`.`name`='Anagrafiche'), 'tab', 'allegati.php', '1', '0', '0', '', '', NULL, NULL, '', ''); @@ -37,9 +37,9 @@ ALTER TABLE `in_righe_interventi` ADD `idsede_partenza` INT NOT NULL AFTER `id_d UPDATE `zz_plugins` SET `name`='Componenti ini', `title`='Componenti ini' WHERE `name`='Componenti'; UPDATE `zz_plugins` SET `enabled`=0 WHERE `name`='Componenti ini'; -INSERT INTO `zz_plugins` ( `name`, `title`, `idmodule_from`, `idmodule_to`, `position`, `script`, `enabled`, `default`, `order`, `compatibility`, `version`, `options2`, `options`, `directory`, `help`, `created_at`, `updated_at`) VALUES ('Componenti', 'Componenti', (SELECT `id` FROM `zz_modules` WHERE name='Impianti'), (SELECT `id` FROM `zz_modules` WHERE name='Impianti'), 'tab', '', '1', '0', '0', '', '', NULL, 'custom', 'componenti', '', NOW(), NOW()); +INSERT INTO `zz_plugins` ( `name`, `title`, `idmodule_from`, `idmodule_to`, `position`, `script`, `enabled`, `default`, `order`, `compatibility`, `version`, `options2`, `options`, `directory`, `help`) VALUES ('Componenti', 'Componenti', (SELECT `id` FROM `zz_modules` WHERE name='Impianti'), (SELECT `id` FROM `zz_modules` WHERE name='Impianti'), 'tab', '', '1', '0', '0', '', '', NULL, 'custom', 'componenti', ''); -CREATE TABLE `my_componenti_articoli` ( `id` INT NOT NULL AUTO_INCREMENT, `id_impianto` INT NOT NULL , `id_articolo` INT NOT NULL , `pre_id_articolo` INT NOT NULL, `note` TEXT NOT NULL , `data_registrazione` DATE NULL , `data_installazione` DATE NULL , `data_disinstallazione` DATE NULL , `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , `updated_at` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`)); +CREATE TABLE `my_componenti_articoli` ( `id` INT NOT NULL AUTO_INCREMENT, `id_impianto` INT NOT NULL , `id_articolo` INT NOT NULL , `pre_id_articolo` INT NOT NULL, `note` TEXT NOT NULL , `data_registrazione` DATE NULL , `data_installazione` DATE NULL , `data_disinstallazione` DATE NULL , PRIMARY KEY (`id`)); -- Aggiunta vista referente in modulo attività INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES (NULL, (SELECT `zz_modules`.`id` FROM `zz_modules` WHERE `zz_modules`.`name`='Interventi' ), 'Referente', '(SELECT an_referenti.nome FROM an_referenti WHERE an_referenti.id=in_interventi.idreferente)', '7', '1', '0', '0', '', '', '1', '0', '0'); diff --git a/update/2_4_26.sql b/update/2_4_26.sql index 54427f986..b56d41e58 100644 --- a/update/2_4_26.sql +++ b/update/2_4_26.sql @@ -94,7 +94,7 @@ UPDATE `zz_plugins` SET `default` = 1, `version` = '' WHERE `zz_plugins`.`name` UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `mg_movimenti` JOIN `mg_articoli` ON `mg_articoli`.id = `mg_movimenti`.`idarticolo` LEFT JOIN `an_sedi` ON `mg_movimenti`.`idsede` = `an_sedi`.`id` WHERE 1=1 AND mg_articoli.deleted_at IS NULL HAVING 2=2 ORDER BY mg_movimenti.data DESC, mg_movimenti.created_at DESC' WHERE `zz_modules`.`name` = 'Movimenti'; -- Aggiunta eliminazione causale DDT -ALTER TABLE `dt_causalet` ADD `deleted_at` TIMESTAMP NULL AFTER `updated_at`; +ALTER TABLE `dt_causalet` ADD `deleted_at` TIMESTAMP NULL; -- Modifico il filtro del modulo UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `dt_causalet` WHERE 1=1 AND `deleted_at` IS NULL HAVING 2=2' WHERE `zz_modules`.`name` = 'Causali'; diff --git a/update/2_4_30.sql b/update/2_4_30.sql index 0f6d45e94..e99269664 100644 --- a/update/2_4_30.sql +++ b/update/2_4_30.sql @@ -11,9 +11,7 @@ CREATE TABLE IF NOT EXISTS `in_righe_tipiinterventi` ( `prezzo_acquisto` decimal(12,4) NOT NULL, `prezzo_vendita` decimal(12,4) NOT NULL, `idiva` int NOT NULL, - `subtotale` decimal(12,4) NOT NULL, - `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP , + `subtotale` decimal(12,4) NOT NULL PRIMARY KEY (`id`)); -- Aggiunto flag is_bloccata per relazioni diff --git a/update/2_4_33.sql b/update/2_4_33.sql index 55b85ed9c..8057cbdf0 100644 --- a/update/2_4_33.sql +++ b/update/2_4_33.sql @@ -143,7 +143,7 @@ INSERT INTO `an_regioni` (`id`, `nome`, `id_nazione`) VALUES (20, 'Veneto', (SELECT `id` FROM `an_nazioni` WHERE `iso2` = 'IT')); -- Aggiunta sezionale per fatture non elettroniche -INSERT INTO `zz_segments` (`id`, `id_module`, `name`, `clause`, `position`, `pattern`, `note`, `dicitura_fissa`, `predefined`, `predefined_accredito`, `predefined_addebito`, `created_at`, `updated_at`, `is_fiscale`) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di acquisto'), 'Fatture non elettroniche', '1=1', 'WHR', '#', '', '', '0', '0', '0', NULL, NULL, '1'); +INSERT INTO `zz_segments` (`id`, `id_module`, `name`, `clause`, `position`, `pattern`, `note`, `dicitura_fissa`, `predefined`, `predefined_accredito`, `predefined_addebito`, `is_fiscale`) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di acquisto'), 'Fatture non elettroniche', '1=1', 'WHR', '#', '0', '0', '0', NULL, NULL, '1'); -- Fix widget attività da programmare UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato FROM in_interventi WHERE in_interventi.idstatointervento = (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.codice=\'TODO\') ORDER BY in_interventi.data_richiesta ASC' WHERE `zz_widgets`.`name` = 'Attività nello stato da programmare'; diff --git a/update/2_4_37.sql b/update/2_4_37.sql index 3b00e2e44..9955a43e6 100644 --- a/update/2_4_37.sql +++ b/update/2_4_37.sql @@ -11,7 +11,7 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, ((SELECT `id` FROM `zz_modules` WHERE `name`='Fatture di acquisto'), 'Pagamento', 'CONCAT(co_pagamenti.codice_modalita_pagamento_fe, \" - \", co_pagamenti.descrizione)', 13, 1, 0, 0, 0, '', '', 0, 0, 1); -- Aggiunto modulo Mappa -INSERT INTO `zz_modules` (`id`, `name`, `title`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`, `created_at`, `updated_at`, `use_notes`, `use_checklists`) VALUES (NULL, 'Mappa', 'Mappa', 'mappa', 'custom', '', 'fa fa-map', '2.4.36', '2.4.36', '10', NULL, '1', '1', '2022-10-12 17:22:11', '2022-10-12 17:23:52', '0', '0'); +INSERT INTO `zz_modules` (`id`, `name`, `title`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`, `use_notes`, `use_checklists`) VALUES (NULL, 'Mappa', 'Mappa', 'mappa', 'custom', '', 'fa fa-map', '2.4.36', '2.4.36', '10', NULL, '1', '1', '0', '0'); -- Aggiunte colonne cellulare e indirizzo in Anagrafiche INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `html_format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES diff --git a/update/2_4_38.sql b/update/2_4_38.sql index f014f6629..5c3a65337 100644 --- a/update/2_4_38.sql +++ b/update/2_4_38.sql @@ -4,9 +4,9 @@ ALTER TABLE `an_anagrafiche` CHANGE `idlistino_acquisti` `id_piano_sconto_acquis ALTER TABLE `an_anagrafiche` CHANGE `idlistino_vendite` `id_piano_sconto_vendite` INT(11) NULL DEFAULT NULL; ALTER TABLE `an_anagrafiche` ADD `id_listino` INT NOT NULL AFTER `id_piano_sconto_acquisti`; -CREATE TABLE `mg_listini` ( `id` INT NOT NULL AUTO_INCREMENT , `nome` VARCHAR(255) NOT NULL , `data_attivazione` DATE NULL , `data_scadenza_predefinita` DATE NULL , `is_sempre_visibile` BOOLEAN NOT NULL , `attivo` BOOLEAN NOT NULL , `note` TEXT NOT NULL , `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , `updated_at` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`id`)); +CREATE TABLE `mg_listini` ( `id` INT NOT NULL AUTO_INCREMENT , `nome` VARCHAR(255) NOT NULL , `data_attivazione` DATE NULL , `data_scadenza_predefinita` DATE NULL , `is_sempre_visibile` BOOLEAN NOT NULL , `attivo` BOOLEAN NOT NULL , `note` TEXT NOT NULL , PRIMARY KEY (`id`)); -CREATE TABLE `mg_listini_articoli` ( `id` INT NOT NULL AUTO_INCREMENT , `id_listino` INT NOT NULL, `id_articolo` INT NOT NULL , `data_scadenza` DATE NOT NULL , `prezzo_unitario` DECIMAL(15,6) NOT NULL , `prezzo_unitario_ivato` DECIMAL(15,6) NOT NULL , `sconto_percentuale` DECIMAL(15,6) NOT NULL , `dir` VARCHAR(20) NOT NULL , `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , `updated_at` TIMESTAMP on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`id`)); +CREATE TABLE `mg_listini_articoli` ( `id` INT NOT NULL AUTO_INCREMENT , `id_listino` INT NOT NULL, `id_articolo` INT NOT NULL , `data_scadenza` DATE NOT NULL , `prezzo_unitario` DECIMAL(15,6) NOT NULL , `prezzo_unitario_ivato` DECIMAL(15,6) NOT NULL , `sconto_percentuale` DECIMAL(15,6) NOT NULL , `dir` VARCHAR(20) NOT NULL , PRIMARY KEY (`id`)); INSERT INTO `zz_modules` (`id`, `name`, `title`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`, `use_notes`, `use_checklists`) VALUES (NULL, 'Listini cliente', 'Listini cliente', 'listini_cliente', 'SELECT |select| FROM `mg_listini` WHERE 1=1 HAVING 2=2', '', 'fa fa-angle-right', '2.*', '2.*', '2', (SELECT `id` FROM `zz_modules` AS `t` WHERE `t`.`name`='Magazzino'), '1', '1', '0', '0'); @@ -584,7 +584,7 @@ ORDER BY an_anagrafiche.ragione_sociale" WHERE `name` = 'Listini'; -- Aggiunta tabella permessi segmenti -CREATE TABLE `zz_group_segment` ( `id_gruppo` INT NOT NULL , `id_segment` INT NOT NULL , `created_at` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP , `updated_at` TIMESTAMP on update CURRENT_TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ); +CREATE TABLE `zz_group_segment` ( `id_gruppo` INT NOT NULL , `id_segment` INT NOT NULL ); -- Aggiunti segmenti nei documenti ALTER TABLE `zz_segments` ADD `is_sezionale` TINYINT(1) NOT NULL AFTER `autofatture`; @@ -613,11 +613,11 @@ UPDATE `zz_segments` SET `predefined` = '1', `is_sezionale` = '1', `name` = 'Sta UPDATE `zz_segments` SET `is_sezionale` = '1' WHERE `zz_segments`.`id_module` IN(SELECT `id` FROM `zz_modules` WHERE `name` IN('Fatture di vendita', 'Fatture di acquisto')); -- Aggiunto campo id_segment nei documenti -ALTER TABLE `co_contratti` ADD `id_segment` INT NOT NULL AFTER `updated_at`; -ALTER TABLE `dt_ddt` ADD `id_segment` INT NOT NULL AFTER `updated_at`; -ALTER TABLE `co_preventivi` ADD `id_segment` INT NOT NULL AFTER `updated_at`; -ALTER TABLE `or_ordini` ADD `id_segment` INT NOT NULL AFTER `updated_at`; -ALTER TABLE `in_interventi` ADD `id_segment` INT NOT NULL AFTER `updated_at`; +ALTER TABLE `co_contratti` ADD `id_segment` INT NOT NULL; +ALTER TABLE `dt_ddt` ADD `id_segment` INT NOT NULL; +ALTER TABLE `co_preventivi` ADD `id_segment` INT NOT NULL; +ALTER TABLE `or_ordini` ADD `id_segment` INT NOT NULL AFTER; +ALTER TABLE `in_interventi` ADD `id_segment` INT NOT NULL AFTER; -- Allineamento id_segment nei record già creati UPDATE `co_contratti` SET `id_segment` = (SELECT `id` FROM `zz_segments` WHERE `name` = "Standard contratti"); diff --git a/update/tables.php b/update/tables.php index 9ff198ea7..a0edf3582 100755 --- a/update/tables.php +++ b/update/tables.php @@ -99,7 +99,6 @@ return [ 'mg_movimenti', 'mg_prodotti', 'mg_unitamisura', - 'my_componenti_articoli', 'my_componenti_interventi', 'my_impianti', 'my_impianti_categorie', @@ -124,8 +123,6 @@ return [ 'zz_check_user', 'zz_checklists', 'zz_checklist_items', - 'zz_documenti', - 'zz_documenti_categorie', 'zz_events', 'zz_field_record', 'zz_fields', From db71573e4db5b688372e58b6cd328db6a42264d6 Mon Sep 17 00:00:00 2001 From: Pek5892 Date: Thu, 16 Mar 2023 09:51:14 +0100 Subject: [PATCH 2/3] =?UTF-8?q?Fix=20inserimento=20articoli=20con=20quanti?= =?UTF-8?q?t=C3=A0=20negativa=20in=20ordini=20e=20contratti?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/contratti/actions.php | 104 +++++++++++++++--------------- modules/contratti/edit.php | 2 +- modules/ordini/actions.php | 111 ++++++++++++++++----------------- modules/ordini/edit.php | 2 +- modules/preventivi/actions.php | 103 +++++++++++++++--------------- 5 files changed, 153 insertions(+), 169 deletions(-) diff --git a/modules/contratti/actions.php b/modules/contratti/actions.php index a29a598a9..9628b5b60 100644 --- a/modules/contratti/actions.php +++ b/modules/contratti/actions.php @@ -573,7 +573,6 @@ switch (post('op')) { case 'add_articolo': $id_articolo = post('id_articolo'); $barcode = post('barcode'); - $dir = 'entrata'; if (!empty($barcode)) { $id_articolo = $dbo->selectOne('mg_articoli', 'id', ['deleted_at' => null, 'barcode' => $barcode])['id']; @@ -585,69 +584,64 @@ switch (post('op')) { $originale = ArticoloOriginale::find($id_articolo); - if ($qta_articolo <= 0 && !$permetti_movimenti_sotto_zero && !$originale->servizio && $dir == 'entrata') { - $response['error'] = tr('Quantità a magazzino non sufficiente'); - echo json_encode($response); - } else { - $articolo = Articolo::build($contratto, $originale); - $qta = 1; + $articolo = Articolo::build($contratto, $originale); + $qta = 1; - $articolo->descrizione = $originale->descrizione; - $articolo->um = $originale->um; - $articolo->qta = 1; - $articolo->costo_unitario = $originale->prezzo_acquisto; + $articolo->descrizione = $originale->descrizione; + $articolo->um = $originale->um; + $articolo->qta = 1; + $articolo->costo_unitario = $originale->prezzo_acquisto; - $id_iva = $originale->idiva_vendita ?: setting('Iva predefinita'); - $id_anagrafica = $contratto->idanagrafica; - $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); - - // CALCOLO PREZZO UNITARIO - $prezzo_unitario = 0; - $sconto = 0; - // Prezzi netti clienti / listino fornitore - $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario - FROM mg_prezzi_articoli - WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica)); + $id_iva = $originale->idiva_vendita ?: setting('Iva predefinita'); + $id_anagrafica = $contratto->idanagrafica; + $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); + + // CALCOLO PREZZO UNITARIO + $prezzo_unitario = 0; + $sconto = 0; + // Prezzi netti clienti / listino fornitore + $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario + FROM mg_prezzi_articoli + WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica)); - if ($prezzi) { - foreach ($prezzi as $prezzo) { - if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) { - $prezzo_unitario = $prezzo['prezzo_unitario']; - $sconto = $prezzo['sconto_percentuale']; - continue; - } - - if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) { - $prezzo_unitario = $prezzo['prezzo_unitario']; - $sconto = $prezzo['sconto_percentuale']; - continue; - } + if ($prezzi) { + foreach ($prezzi as $prezzo) { + if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) { + $prezzo_unitario = $prezzo['prezzo_unitario']; + $sconto = $prezzo['sconto_percentuale']; + continue; } - } - if (empty($prezzo_unitario)) { - // Prezzi listini clienti - $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino - FROM mg_listini - LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino - LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino - WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica)); - if ($listino) { - $prezzo_unitario = $listino['prezzo_unitario_listino']; - $sconto = $listino['sconto_percentuale_listino']; + if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) { + $prezzo_unitario = $prezzo['prezzo_unitario']; + $sconto = $prezzo['sconto_percentuale']; + continue; } } - $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); - $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $contratto->idagente])['provvigione_default']; + } + if (empty($prezzo_unitario)) { + // Prezzi listini clienti + $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino + FROM mg_listini + LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino + LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino + WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica)); - $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva); - $articolo->setSconto($sconto, 'PRC'); - $articolo->setProvvigione($provvigione ?: 0, 'PRC'); - $articolo->save(); - - - flash()->info(tr('Nuovo articolo aggiunto!')); + if ($listino) { + $prezzo_unitario = $listino['prezzo_unitario_listino']; + $sconto = $listino['sconto_percentuale_listino']; + } } + $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); + $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $contratto->idagente])['provvigione_default']; + + $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva); + $articolo->setSconto($sconto, 'PRC'); + $articolo->setProvvigione($provvigione ?: 0, 'PRC'); + $articolo->save(); + + + flash()->info(tr('Nuovo articolo aggiunto!')); } else { $response['error'] = tr('Nessun articolo corrispondente a magazzino'); echo json_encode($response); diff --git a/modules/contratti/edit.php b/modules/contratti/edit.php index f1e1a87fd..f9a8d9e04 100755 --- a/modules/contratti/edit.php +++ b/modules/contratti/edit.php @@ -347,7 +347,7 @@ if (!$block_edit) {
- {[ "type": "select", "label": "'.tr('Articolo').'", "name": "id_articolo", "value": "", "ajax-source": "articoli", "icon-after": "add|'.Modules::get('Articoli')['id'].'" ]} + {[ "type": "select", "label": "'.tr('Articolo').'", "name": "id_articolo", "value": "", "ajax-source": "articoli", "select-options": {"permetti_movimento_a_zero": 1}, "icon-after": "add|'.Modules::get('Articoli')['id'].'" ]}
diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php index e5fc7aa47..5469500e3 100755 --- a/modules/ordini/actions.php +++ b/modules/ordini/actions.php @@ -622,74 +622,69 @@ switch (post('op')) { $originale = ArticoloOriginale::find($id_articolo); - if ($qta_articolo <= 0 && !$permetti_movimenti_sotto_zero && !$originale->servizio && $dir == 'entrata') { - $response['error'] = tr('Quantità a magazzino non sufficiente'); - echo json_encode($response); - } else { - $articolo = Articolo::build($ordine, $originale); - $qta = 1; + $articolo = Articolo::build($ordine, $originale); + $qta = 1; - $articolo->descrizione = $originale->descrizione; - $articolo->um = $originale->um; - $articolo->qta = 1; - $articolo->costo_unitario = $originale->prezzo_acquisto; + $articolo->descrizione = $originale->descrizione; + $articolo->um = $originale->um; + $articolo->qta = 1; + $articolo->costo_unitario = $originale->prezzo_acquisto; - $id_iva = $originale->idiva_vendita ?: setting('Iva predefinita'); - $id_anagrafica = $ordine->idanagrafica; - $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); + $id_iva = $originale->idiva_vendita ?: setting('Iva predefinita'); + $id_anagrafica = $ordine->idanagrafica; + $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); - // CALCOLO PREZZO UNITARIO - $prezzo_unitario = 0; - $sconto = 0; - // Prezzi netti clienti / listino fornitore - $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario - FROM mg_prezzi_articoli - WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica)); + // CALCOLO PREZZO UNITARIO + $prezzo_unitario = 0; + $sconto = 0; + // Prezzi netti clienti / listino fornitore + $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario + FROM mg_prezzi_articoli + WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica)); - if ($prezzi) { - foreach ($prezzi as $prezzo) { - if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) { - $prezzo_unitario = $prezzo['prezzo_unitario']; - $sconto = $prezzo['sconto_percentuale']; - continue; - } - - if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) { - $prezzo_unitario = $prezzo['prezzo_unitario']; - $sconto = $prezzo['sconto_percentuale']; - continue; - } + if ($prezzi) { + foreach ($prezzi as $prezzo) { + if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) { + $prezzo_unitario = $prezzo['prezzo_unitario']; + $sconto = $prezzo['sconto_percentuale']; + continue; } - } - if (empty($prezzo_unitario)) { - // Prezzi listini clienti - $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino - FROM mg_listini - LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino - LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino - WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica)); - if ($listino) { - $prezzo_unitario = $listino['prezzo_unitario_listino']; - $sconto = $listino['sconto_percentuale_listino']; + if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) { + $prezzo_unitario = $prezzo['prezzo_unitario']; + $sconto = $prezzo['sconto_percentuale']; + continue; } } - if ($dir == 'entrata') { - $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); - } else { - $prezzo_unitario = $originale->prezzo_acquisto; + } + if (empty($prezzo_unitario)) { + // Prezzi listini clienti + $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino + FROM mg_listini + LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino + LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino + WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica)); + + if ($listino) { + $prezzo_unitario = $listino['prezzo_unitario_listino']; + $sconto = $listino['sconto_percentuale_listino']; } - - $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $ordine->idagente])['provvigione_default']; - - $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva); - $articolo->setSconto($sconto, 'PRC'); - $articolo->setProvvigione($provvigione ?: 0, 'PRC'); - $articolo->save(); - - - flash()->info(tr('Nuovo articolo aggiunto!')); } + if ($dir == 'entrata') { + $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); + } else { + $prezzo_unitario = $originale->prezzo_acquisto; + } + + $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $ordine->idagente])['provvigione_default']; + + $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva); + $articolo->setSconto($sconto, 'PRC'); + $articolo->setProvvigione($provvigione ?: 0, 'PRC'); + $articolo->save(); + + + flash()->info(tr('Nuovo articolo aggiunto!')); } else { $response['error'] = tr('Nessun articolo corrispondente a magazzino'); echo json_encode($response); diff --git a/modules/ordini/edit.php b/modules/ordini/edit.php index ef850c05d..c194976f5 100755 --- a/modules/ordini/edit.php +++ b/modules/ordini/edit.php @@ -245,7 +245,7 @@ if (!$block_edit) {
- {[ "type": "select", "label": "'.tr('Articolo').'", "name": "id_articolo", "value": "", "ajax-source": "articoli", "select-options": {"permetti_movimento_a_zero": '.($dir == 'entrata' ? 0 : 1).'}, "icon-after": "add|'.Modules::get('Articoli')['id'].'" ]} + {[ "type": "select", "label": "'.tr('Articolo').'", "name": "id_articolo", "value": "", "ajax-source": "articoli", "select-options": {"permetti_movimento_a_zero": 1}, "icon-after": "add|'.Modules::get('Articoli')['id'].'" ]}
diff --git a/modules/preventivi/actions.php b/modules/preventivi/actions.php index f9bff8507..c33b837ac 100755 --- a/modules/preventivi/actions.php +++ b/modules/preventivi/actions.php @@ -458,69 +458,64 @@ switch (post('op')) { $originale = ArticoloOriginale::find($id_articolo); - if ($qta_articolo <= 0 && !$permetti_movimenti_sotto_zero && !$originale->servizio && $dir == 'entrata') { - $response['error'] = tr('Quantità a magazzino non sufficiente'); - echo json_encode($response); - } else { - $articolo = Articolo::build($preventivo, $originale); - $qta = 1; + $articolo = Articolo::build($preventivo, $originale); + $qta = 1; - $articolo->descrizione = $originale->descrizione; - $articolo->um = $originale->um; - $articolo->qta = 1; - $articolo->costo_unitario = $originale->prezzo_acquisto; + $articolo->descrizione = $originale->descrizione; + $articolo->um = $originale->um; + $articolo->qta = 1; + $articolo->costo_unitario = $originale->prezzo_acquisto; - $id_iva = $originale->idiva_vendita ?: setting('Iva predefinita'); - $id_anagrafica = $preventivo->idanagrafica; - $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); - - // CALCOLO PREZZO UNITARIO - $prezzo_unitario = 0; - $sconto = 0; - // Prezzi netti clienti / listino fornitore - $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario - FROM mg_prezzi_articoli - WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica)); + $id_iva = $originale->idiva_vendita ?: setting('Iva predefinita'); + $id_anagrafica = $preventivo->idanagrafica; + $prezzi_ivati = setting('Utilizza prezzi di vendita comprensivi di IVA'); + + // CALCOLO PREZZO UNITARIO + $prezzo_unitario = 0; + $sconto = 0; + // Prezzi netti clienti / listino fornitore + $prezzi = $dbo->fetchArray('SELECT minimo, massimo, sconto_percentuale, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario + FROM mg_prezzi_articoli + WHERE id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND id_anagrafica = '.prepare($id_anagrafica)); - if ($prezzi) { - foreach ($prezzi as $prezzo) { - if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) { - $prezzo_unitario = $prezzo['prezzo_unitario']; - $sconto = $prezzo['sconto_percentuale']; - continue; - } - - if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) { - $prezzo_unitario = $prezzo['prezzo_unitario']; - $sconto = $prezzo['sconto_percentuale']; - continue; - } + if ($prezzi) { + foreach ($prezzi as $prezzo) { + if ($qta >= $prezzo['minimo'] && $qta <= $prezzo['massimo']) { + $prezzo_unitario = $prezzo['prezzo_unitario']; + $sconto = $prezzo['sconto_percentuale']; + continue; } - } - if (empty($prezzo_unitario)) { - // Prezzi listini clienti - $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino - FROM mg_listini - LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino - LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino - WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica)); - if ($listino) { - $prezzo_unitario = $listino['prezzo_unitario_listino']; - $sconto = $listino['sconto_percentuale_listino']; + if ($prezzo['minimo'] == null && $prezzo['massimo'] == null && $prezzo['prezzo_unitario'] != null) { + $prezzo_unitario = $prezzo['prezzo_unitario']; + $sconto = $prezzo['sconto_percentuale']; + continue; } } - $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); - $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $preventivo->idagente])['provvigione_default']; + } + if (empty($prezzo_unitario)) { + // Prezzi listini clienti + $listino = $dbo->fetchOne('SELECT sconto_percentuale AS sconto_percentuale_listino, '.($prezzi_ivati ? 'prezzo_unitario_ivato' : 'prezzo_unitario').' AS prezzo_unitario_listino + FROM mg_listini + LEFT JOIN mg_listini_articoli ON mg_listini.id=mg_listini_articoli.id_listino + LEFT JOIN an_anagrafiche ON mg_listini.id=an_anagrafiche.id_listino + WHERE mg_listini.data_attivazione<=NOW() AND mg_listini_articoli.data_scadenza>=NOW() AND mg_listini.attivo=1 AND id_articolo = '.prepare($id_articolo).' AND dir = '.prepare($dir).' AND idanagrafica = '.prepare($id_anagrafica)); - $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva); - $articolo->setSconto($sconto, 'PRC'); - $articolo->setProvvigione($provvigione ?: 0, 'PRC'); - $articolo->save(); - - - flash()->info(tr('Nuovo articolo aggiunto!')); + if ($listino) { + $prezzo_unitario = $listino['prezzo_unitario_listino']; + $sconto = $listino['sconto_percentuale_listino']; + } } + $prezzo_unitario = $prezzo_unitario ?: ($prezzi_ivati ? $originale->prezzo_vendita_ivato : $originale->prezzo_vendita); + $provvigione = $dbo->selectOne('an_anagrafiche', 'provvigione_default', ['idanagrafica' => $preventivo->idagente])['provvigione_default']; + + $articolo->setPrezzoUnitario($prezzo_unitario, $id_iva); + $articolo->setSconto($sconto, 'PRC'); + $articolo->setProvvigione($provvigione ?: 0, 'PRC'); + $articolo->save(); + + + flash()->info(tr('Nuovo articolo aggiunto!')); } else { $response['error'] = tr('Nessun articolo corrispondente a magazzino'); echo json_encode($response); From b5f4e80d09b93e265a3ebca368be62e698628fc4 Mon Sep 17 00:00:00 2001 From: Pek5892 Date: Thu, 16 Mar 2023 10:33:12 +0100 Subject: [PATCH 3/3] Fix minori --- update/2_4_30.sql | 5 +++-- update/2_4_33.sql | 2 +- update/2_4_38.sql | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/update/2_4_30.sql b/update/2_4_30.sql index e99269664..0fabf3d6a 100644 --- a/update/2_4_30.sql +++ b/update/2_4_30.sql @@ -11,8 +11,9 @@ CREATE TABLE IF NOT EXISTS `in_righe_tipiinterventi` ( `prezzo_acquisto` decimal(12,4) NOT NULL, `prezzo_vendita` decimal(12,4) NOT NULL, `idiva` int NOT NULL, - `subtotale` decimal(12,4) NOT NULL -PRIMARY KEY (`id`)); + `subtotale` decimal(12,4) NOT NULL, + PRIMARY KEY (`id`) +); -- Aggiunto flag is_bloccata per relazioni ALTER TABLE `an_relazioni` ADD `is_bloccata` tinyint DEFAULT NULL AFTER `colore`; \ No newline at end of file diff --git a/update/2_4_33.sql b/update/2_4_33.sql index 8057cbdf0..cf3f8247c 100644 --- a/update/2_4_33.sql +++ b/update/2_4_33.sql @@ -143,7 +143,7 @@ INSERT INTO `an_regioni` (`id`, `nome`, `id_nazione`) VALUES (20, 'Veneto', (SELECT `id` FROM `an_nazioni` WHERE `iso2` = 'IT')); -- Aggiunta sezionale per fatture non elettroniche -INSERT INTO `zz_segments` (`id`, `id_module`, `name`, `clause`, `position`, `pattern`, `note`, `dicitura_fissa`, `predefined`, `predefined_accredito`, `predefined_addebito`, `is_fiscale`) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di acquisto'), 'Fatture non elettroniche', '1=1', 'WHR', '#', '0', '0', '0', NULL, NULL, '1'); +INSERT INTO `zz_segments` (`id`, `id_module`, `name`, `clause`, `position`, `pattern`, `note`, `dicitura_fissa`, `predefined`, `predefined_accredito`, `predefined_addebito`, `is_fiscale`) VALUES (NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Fatture di acquisto'), 'Fatture non elettroniche', '1=1', 'WHR', '#', '0', '0', '0', '0', '0', '1'); -- Fix widget attività da programmare UPDATE `zz_widgets` SET `query` = 'SELECT COUNT(id) AS dato FROM in_interventi WHERE in_interventi.idstatointervento = (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.codice=\'TODO\') ORDER BY in_interventi.data_richiesta ASC' WHERE `zz_widgets`.`name` = 'Attività nello stato da programmare'; diff --git a/update/2_4_38.sql b/update/2_4_38.sql index 5c3a65337..759d804aa 100644 --- a/update/2_4_38.sql +++ b/update/2_4_38.sql @@ -616,8 +616,8 @@ UPDATE `zz_segments` SET `is_sezionale` = '1' WHERE `zz_segments`.`id_module` IN ALTER TABLE `co_contratti` ADD `id_segment` INT NOT NULL; ALTER TABLE `dt_ddt` ADD `id_segment` INT NOT NULL; ALTER TABLE `co_preventivi` ADD `id_segment` INT NOT NULL; -ALTER TABLE `or_ordini` ADD `id_segment` INT NOT NULL AFTER; -ALTER TABLE `in_interventi` ADD `id_segment` INT NOT NULL AFTER; +ALTER TABLE `or_ordini` ADD `id_segment` INT NOT NULL; +ALTER TABLE `in_interventi` ADD `id_segment` INT NOT NULL; -- Allineamento id_segment nei record già creati UPDATE `co_contratti` SET `id_segment` = (SELECT `id` FROM `zz_segments` WHERE `name` = "Standard contratti");