diff --git a/include/common/importa.php b/include/common/importa.php index 19ee94aed..470b0ca76 100755 --- a/include/common/importa.php +++ b/include/common/importa.php @@ -19,6 +19,7 @@ use Modules\Contratti\Stato as StatoContratto; use Modules\Fatture\Stato as StatoFattura; +use Modules\Ordini\Stato as StatoOrdine; use Modules\DDT\Stato; use Plugins\ListinoFornitori\DettaglioFornitore; @@ -153,11 +154,11 @@ if (!empty($options['create_document'])) { // Opzioni aggiuntive per gli Ordini elseif (in_array($final_module['name'], ['Ordini cliente', 'Ordini fornitore'])) { - $stato_predefinito = $database->fetchOne("SELECT * FROM or_statiordine WHERE descrizione = 'Bozza'"); + $stato_predefinito = (new StatoOrdine())->getByName('Bozza')->id_record; echo '
- {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * FROM or_statiordine WHERE descrizione IN(\'Bozza\', \'Accettato\', \'In attesa di conferma\', \'Annullato\')", "value": "'.$stato_predefinito['id'].'" ]} + {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `name` IN(\'Bozza\', \'Accettato\', \'In attesa di conferma\', \'Annullato\')", "value": "'.$stato_predefinito['id'].'" ]}
'; } diff --git a/include/riferimenti/riferimenti.php b/include/riferimenti/riferimenti.php index bf411da49..53adad5a7 100644 --- a/include/riferimenti/riferimenti.php +++ b/include/riferimenti/riferimenti.php @@ -21,6 +21,8 @@ include_once __DIR__.'/../../core.php'; use Modules\DDT\DDT; use Modules\Ordini\Ordine; +use Modules\DDT\Stato as StatoDDT; +use Modules\Ordini\Stato as StatoOrdine; // Informazioni generali sulla riga $source_type = filter('riga_type'); @@ -52,7 +54,8 @@ $direzione_richiesta = $source->getDocument()->direzione == 'entrata' ? 'uscita' // Individuazione DDT disponibili $ddt = DDT::whereHas('stato', function ($query) { - $query->where('descrizione', '!=', 'Bozza'); + $id_stato = (new StatoDDT())->getByName('Bozza')->id_record; + $query->where('id', '!=', $id_stato); })->whereHas('tipo', function ($query) use ($direzione_richiesta) { $query->where('dir', '=', $direzione_richiesta); })->get(); @@ -67,7 +70,8 @@ foreach ($ddt as $elemento) { // Individuazione ordini disponibili $tipo_ordini = $direzione_richiesta == 'entrata' ? 'cliente' : 'fornitore'; $ordini = Ordine::whereHas('stato', function ($query) { - $query->where('descrizione', '!=', 'Bozza'); + $id_stato = (new StatoOrdine())->getByName('Bozza')->id_record; + $query->where('id', '!=', $id_stato); })->whereHas('tipo', function ($query) use ($direzione_richiesta) { $query->where('dir', '=', $direzione_richiesta); })->get(); diff --git a/modules/anagrafiche/src/API/v1/Anagrafiche.php b/modules/anagrafiche/src/API/v1/Anagrafiche.php index d60b77194..26efc7d94 100755 --- a/modules/anagrafiche/src/API/v1/Anagrafiche.php +++ b/modules/anagrafiche/src/API/v1/Anagrafiche.php @@ -63,10 +63,8 @@ class Anagrafiche extends Resource implements RetrieveInterface, CreateInterface ]; $joins[] = [ - '`an_tipianagrafiche_lang`', - '`an_tipianagrafiche_lang`.`id_record`', - '`an_tipianagrafiche`.`id`', - ]; + 'an_tipianagrafiche_lang' => '`an_tipianagrafiche_lang`.`idrecord` = `an_tipianagrafiche`.`id` AND `an_tipianagrafiche_lang`.`idlang` = '.setting('Lingua'), + ]; $where[] = ['`an_tipianagrafiche_lang`.`name`', '=', $type]; } diff --git a/modules/articoli/plugins/articoli.giacenze.php b/modules/articoli/plugins/articoli.giacenze.php index adde4a0a7..aa70ae77d 100755 --- a/modules/articoli/plugins/articoli.giacenze.php +++ b/modules/articoli/plugins/articoli.giacenze.php @@ -23,23 +23,28 @@ $impegnato = 0; $ordinato = 0; $query = 'SELECT - or_ordini.id AS id, - or_ordini.numero, - or_ordini.numero_esterno, - data, - SUM(or_righe_ordini.qta) AS qta_ordinata, - SUM(or_righe_ordini.qta - or_righe_ordini.qta_evasa) AS qta_impegnata, - or_righe_ordini.um -FROM or_ordini - INNER JOIN or_righe_ordini ON or_ordini.id = or_righe_ordini.idordine - INNER JOIN or_statiordine ON or_ordini.idstatoordine=or_statiordine.id -WHERE idarticolo = '.prepare($articolo->id)." - AND (SELECT dir FROM or_tipiordine WHERE or_tipiordine.id=or_ordini.idtipoordine) = '|dir|' - AND (or_righe_ordini.qta - or_righe_ordini.qta_evasa) > 0 - AND or_righe_ordini.confermato = 1 - AND or_statiordine.impegnato = 1 -GROUP BY or_ordini.id -HAVING qta_ordinata > 0"; + `or_ordini`.`id` AS id, + `or_ordini`.`numero`, + `or_ordini`.`numero_esterno`, + `data`, + SUM(`or_righe_ordini`.`qta`) AS qta_ordinata, + SUM(`or_righe_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) AS qta_impegnata, + `or_righe_ordini`.`um` + FROM + `or_ordini` + INNER JOIN `or_righe_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine` + INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine`=`or_statiordine`.`id` + INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipiordine`=`or_tipiordine`.`id` + WHERE + `idarticolo` = '.prepare($articolo->id)." + AND `or_tipiordine`.`dir`= '|dir|' + AND (`or_righe_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) > 0 + AND `or_righe_ordini`.`confermato` = 1 + AND `or_statiordine`.`impegnato` = 1 + GROUP BY + `or_ordini`.`id` + HAVING + `qta_ordinata` > 0"; echo '
diff --git a/modules/articoli/src/API/v1/Articoli.php b/modules/articoli/src/API/v1/Articoli.php index f1f009b89..e6477a766 100755 --- a/modules/articoli/src/API/v1/Articoli.php +++ b/modules/articoli/src/API/v1/Articoli.php @@ -50,10 +50,8 @@ class Articoli extends Resource implements RetrieveInterface, UpdateInterface, C ]; $joins[] = [ - 'mg_categorie_lang AS categorie_lang', - 'mg_categorie.id', - 'categorie_lang.id_record', - ]; + 'mg_categorie_lang AS categorie_lang' => 'mg_categorie_lang.id_record = categorie.id AND mg_categorie_lang.id_lang = '.setting('Lingua'), + ]; $joins[] = [ 'mg_categorie AS sottocategorie', @@ -62,9 +60,7 @@ class Articoli extends Resource implements RetrieveInterface, UpdateInterface, C ]; $joins[] = [ - 'mg_categorie_lang AS sottocategorie_lang', - 'mg_categorie.id', - 'sottocategorie_lang.id_record', + 'mg_categorie_lang AS sottocategorie_lang' => 'mg_categorie_lang.id_record = sottocategorie.id AND mg_categorie_lang.id_lang = '.setting('Lingua'), ]; $where[] = ['mg_articoli.deleted_at', '=', null]; diff --git a/modules/contratti/bulk.php b/modules/contratti/bulk.php index 2425dbb82..15f92e824 100755 --- a/modules/contratti/bulk.php +++ b/modules/contratti/bulk.php @@ -165,7 +165,7 @@ switch (post('op')) { $new_contratto->data_conclusione = $new_contratto->data_accettazione->copy()->add($diff); $new_contratto->data_bozza = Carbon::now(); - $stato = StatoContratto::where('descrizione', '=', 'Bozza')->first(); + $stato = (new StatoContratto())->getByName('Bozza')->id_record; $new_contratto->stato()->associate($stato); $new_contratto->save(); diff --git a/modules/contratti/plugins/contratti.consuntivo.php b/modules/contratti/plugins/contratti.consuntivo.php index b13969a85..51737ce83 100755 --- a/modules/contratti/plugins/contratti.consuntivo.php +++ b/modules/contratti/plugins/contratti.consuntivo.php @@ -127,10 +127,10 @@ if (!empty($interventi)) { $tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata; // Raggruppamento per stato intervento - $stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore; - $stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore; - $stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; - $stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata; + $stati_intervento[$intervento->stato->name]['colore'] = $intervento->stato->colore; + $stati_intervento[$intervento->stato->name]['ore'] += $sessione->ore; + $stati_intervento[$intervento->stato->name]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; + $stati_intervento[$intervento->stato->name]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata; } echo ' diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php index 1819fd349..e2e743bed 100755 --- a/modules/ddt/actions.php +++ b/modules/ddt/actions.php @@ -22,6 +22,7 @@ include_once __DIR__.'/../../core.php'; use Models\Module; use Modules\Anagrafiche\Anagrafica; use Modules\Articoli\Articolo as ArticoloOriginale; +use Modules\Ordini\Stato as StatoOrdine; use Modules\DDT\Components\Articolo; use Modules\DDT\Components\Descrizione; use Modules\DDT\Components\Riga; @@ -472,7 +473,7 @@ switch (filter('op')) { */ case 'completa_trasporto': $tipo = Tipo::where('dir', '!=', $ddt->direzione)->first(); - $stato = Stato::where('descrizione', '=', 'Evaso')->first(); + $stato = (new Stato())->getByName('Evaso')->id_record; // Duplicazione DDT $id_segment = post('id_segment'); @@ -732,9 +733,10 @@ switch (filter('op')) { // Aggiornamento stato degli ordini presenti in questa fattura in base alle quantità totali evase if (!empty($id_record) && setting('Cambia automaticamente stato ordini fatturati')) { - $rs = $dbo->fetchArray('SELECT idordine FROM dt_righe_ddt WHERE idddt='.prepare($id_record).' AND idordine!=0'); + $rs = $dbo->fetchArray('SELECT `idordine` FROM `dt_righe_ddt` WHERE `idddt`='.prepare($id_record).' AND `idordine`!=0'); for ($i = 0; $i < sizeof($rs); ++$i) { - $dbo->query('UPDATE or_ordini SET idstatoordine=(SELECT id FROM or_statiordine WHERE descrizione="'.get_stato_ordine($rs[$i]['idordine']).'") WHERE id = '.prepare($rs[$i]['idordine'])); + $stato = (new StatoOrdine())->getByName(get_stato_ordine($rs[$i]['idordine']))->id_record; + $dbo->query('UPDATE `or_ordini` SET `idstatoordine`='.prepare($stato).'") WHERE `id` = '.prepare($rs[$i]['idordine'])); } } diff --git a/modules/ddt/add_ordine.php b/modules/ddt/add_ordine.php index 929189cca..32ff04b04 100755 --- a/modules/ddt/add_ordine.php +++ b/modules/ddt/add_ordine.php @@ -49,7 +49,7 @@ $id_anagrafica = $documento_finale->idanagrafica; echo '
- {[ "type": "select", "label": "'.tr('Ordine').'", "name": "id_documento", "values": "query=SELECT or_ordini.id, CONCAT(IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\')) AS descrizione FROM or_ordini WHERE idanagrafica='.prepare($id_anagrafica).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).' LIMIT 0,1) AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]} + {[ "type": "select", "label": "'.tr('Ordine').'", "name": "id_documento", "values": "query=SELECT `or_ordini`.`id`, CONCAT(IF(`numero_esterno` != \'\', `numero_esterno`, `numero`), \' del \', DATE_FORMAT(`data`, \'%d-%m-%Y\')) AS descrizione FROM `or_ordini` INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine`=`or_statiordine`.`id` INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine`=`or_tipiordine`.`id` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id`=`or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') INNER JOIN `or_righe_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine` WHERE `idanagrafica`='.prepare($id_anagrafica).' AND `or_statiordine_lang`.`name` IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\') AND `dir`='.prepare($dir).' AND (`or_righe_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) > 0 ORDER BY `data` DESC, `numero` DESC" ]}
diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php index 6893fdebf..62129b14e 100755 --- a/modules/ddt/edit.php +++ b/modules/ddt/edit.php @@ -530,7 +530,20 @@ if ($dir == 'entrata') { if (!$block_edit) { // Lettura ordini (cliente o fornitore) - $ordini_query = 'SELECT COUNT(*) AS tot FROM or_ordini WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).') AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0)'; + $ordini_query = 'SELECT + COUNT(*) AS tot + FROM + `or_ordini` + INNER JOIN `or_righe_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine` + INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine`=`or_statiordine`.`id` + INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipiordine`=`or_tipiordine`.`id` + LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = "'.prepare(setting('Lingua')).'") + WHERE + `idanagrafica`='.prepare($record['idanagrafica']).' + AND `or_statiordine_lang`.`name` IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) + AND `dir`='.prepare($dir).') + AND (`or_righe_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) > 0) + GROUP BY `or_ordini`.`id`'; $tot_ordini = $dbo->fetchArray($ordini_query)[0]['tot']; $ddt_query = 'SELECT @@ -544,7 +557,8 @@ if (!$block_edit) { WHERE `name` IN("Evaso", "Parzialmente evaso", "Parzialmente fatturato") AND `dt_tipiddt`.`dir`="'.($dir == 'entrata' ? 'uscita' : 'entrata').'") AND - (`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0'; + (`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0 + GROUP BY `dt_ddt`.`id`'; $tot_ddt = $dbo->fetchArray($ddt_query)[0]['tot']; // Form di inserimento riga documento diff --git a/modules/ddt/src/DDT.php b/modules/ddt/src/DDT.php index 8de3ee0d4..404c026df 100755 --- a/modules/ddt/src/DDT.php +++ b/modules/ddt/src/DDT.php @@ -134,7 +134,7 @@ class DDT extends Document $causale = $database->fetchOne('SELECT * FROM `dt_causalet` LEFT JOIN `dt_causalet_lang` ON (`dt_causalet`.`id` = `dt_causalet_lang`.`id_record` AND `dt_causalet_lang`.`id_lang` ='.prepare(setting('Lingua')).') WHERE `dt_causalet`.`id` = '.prepare($this->idcausalet)); - return $causale['is_importabile'] && in_array($this->stato->descrizione, $stati_importabili); + return $causale['is_importabile'] && in_array($this->stato->name, $stati_importabili); } public function getReversedAttribute() @@ -242,7 +242,7 @@ class DDT extends Document $descrizione = $parziale_fatturato ? 'Parzialmente fatturato' : 'Fatturato'; } - $stato = Stato::where('descrizione', $descrizione)->first(); + $stato = (new Stato())->getByName($descrizione)->id_record; $this->stato()->associate($stato); $this->save(); } diff --git a/modules/fatture/add_ordine.php b/modules/fatture/add_ordine.php index 90b047e69..21aa320c1 100755 --- a/modules/fatture/add_ordine.php +++ b/modules/fatture/add_ordine.php @@ -50,7 +50,7 @@ $id_anagrafica = $documento_finale->idanagrafica; echo '
- {[ "type": "select", "label": "'.tr('Ordine').'", "name": "id_documento", "values": "query=SELECT or_ordini.id, CONCAT(IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\'), \' [\', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , \']\') AS descrizione FROM or_ordini WHERE idanagrafica='.prepare($id_anagrafica).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).' LIMIT 0,1) AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]} + {[ "type": "select", "label": "'.tr('Ordine').'", "name": "id_documento", "values": "query=SELECT `or_ordini`.`id`, CONCAT(IF(`numero_esterno` != \'\', `numero_esterno`, `numero`), \' del \', DATE_FORMAT(`data`, \'%d-%m-%Y\'), \' [\', `or_statiordine_lang`.`name` , \']\') AS descrizione FROM `or_ordini` INNER JOIN `or_statiordine` ON `or_ordini.idstatoordine`=`or_statiordine.id` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine.id`=`or_statiordine_lang.id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine`=`or_tipiordine`.`id` INNER JOIN `or_righe_ordini` ON `or_righe_ordini`.`idordine` = `or_ordini`.`id` WHERE `idanagrafica`='.prepare($id_anagrafica).' AND `name` IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND `dir`='.prepare($dir).' AND (`or_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) > 0 GROUP BY `or_ordini`.`id` ORDER BY `data` DESC, `numero` DESC" ]}
diff --git a/modules/fatture/ajax/select.php b/modules/fatture/ajax/select.php index 15a53d95b..b33b5cef3 100644 --- a/modules/fatture/ajax/select.php +++ b/modules/fatture/ajax/select.php @@ -24,46 +24,52 @@ switch ($resource) { $where = implode(' OR ', $search_fields); $where = $where ? '('.$where.')' : '1=1'; - $query_ordini = "SELECT or_ordini.id, - CONCAT('Ordine num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , ']') AS text, - 'Ordini' AS optgroup, - 'ordine' AS tipo, - 'uscita' AS dir - FROM or_ordini - INNER JOIN or_righe_ordini ON or_righe_ordini.idordine = or_ordini.id - WHERE idanagrafica = ".prepare($id_anagrafica)." AND - idstatoordine IN ( - SELECT id FROM or_statiordine WHERE descrizione != 'Fatturato' - ) AND - idtipoordine IN ( - SELECT id FROM or_tipiordine WHERE dir = ".prepare($direzione).' - ) AND |where| - GROUP BY or_ordini.id - HAVING SUM(or_righe_ordini.qta - or_righe_ordini.qta_evasa) > 0 - ORDER BY data DESC, numero DESC'; + $query_ordini = "SELECT + `or_ordini`.`id`, + CONCAT('Ordine num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `or_statiordine_lang`.`name` , ']') AS text, + 'Ordini' AS optgroup, + 'ordine' AS tipo, + 'uscita' AS dir + FROM + `or_ordini` + INNER JOIN `or_righe_ordini` ON `or_righe_ordini`.`idordine` = `or_ordini`.`id` + INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine` = `or_statiordine`.`id` + LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = ".prepare(setting('Lingua')).") + INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id` + WHERE + `idanagrafica` = ".prepare($id_anagrafica)." + AND `name` != 'Fatturato' + AND `dir` = ".prepare($direzione)." + AND |where| + GROUP BY + `or_ordini`.`id` + HAVING + SUM(`or_righe_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) > 0 + ORDER BY + `data` DESC, `numero` DESC"; $query_ddt = "SELECT - `dt_ddt`.`id`, - CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`name`, ']') AS text, - 'DDT' AS optgroup, - 'ddt' AS tipo, - 'uscita' AS dir - FROM `dt_ddt` - INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id` - INNER JOIN `dt_statiddt` ON `dt_ddt`.`idstato` = `dt_statiddt`.`id` - INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` - LEFT JOIN dt_statiddt_lang ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = ".prepare(setting('Lingua')).") - WHERE - `idanagrafica` = ".prepare($id_anagrafica)." AND - `dt_statiddt_lang`.`name` != 'Fatturato' AND - `dt_tipiddt`.`dir`=".prepare($direzione).'AND - |where| - GROUP BY - `dt_ddt`.`id` - HAVING - SUM(`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0 - ORDER BY - `data` DESC, `numero` DESC'; + `dt_ddt`.`id`, + CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`name`, ']') AS text, + 'DDT' AS optgroup, + 'ddt' AS tipo, + 'uscita' AS dir + FROM `dt_ddt` + INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id` + INNER JOIN `dt_statiddt` ON `dt_ddt`.`idstato` = `dt_statiddt`.`id` + INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` + LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = ".prepare(setting('Lingua')).") + WHERE + `idanagrafica` = ".prepare($id_anagrafica)." AND + `dt_statiddt_lang`.`name` != 'Fatturato' AND + `dt_tipiddt`.`dir`=".prepare($direzione).'AND + |where| + GROUP BY + `dt_ddt`.`id` + HAVING + SUM(`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0 + ORDER BY + `data` DESC, `numero` DESC'; // Sostituzione per la ricerca $query_ordini = replace($query_ordini, [ @@ -97,45 +103,50 @@ switch ($resource) { $where = implode(' OR ', $search_fields); $where = $where ? '('.$where.')' : '1=1'; - $query_ordini = "SELECT or_ordini.id, - CONCAT('Ordine num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , ']') AS text, - 'Ordini' AS optgroup, - 'ordine' AS tipo, - 'entrata' AS dir - FROM or_ordini - INNER JOIN or_righe_ordini ON or_righe_ordini.idordine = or_ordini.id - WHERE idarticolo = ".prepare($id_articolo)." AND - idstatoordine IN ( - SELECT id FROM or_statiordine WHERE descrizione != 'Fatturato' - ) AND - idtipoordine IN ( - SELECT id FROM or_tipiordine WHERE dir = ".prepare($direzione).' - ) AND |where| - GROUP BY or_ordini.id - ORDER BY data DESC, numero DESC'; + $query_ordini = "SELECT + `or_ordini`.`id`, + CONCAT('Ordine num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', `or_statiordine_lang`.`name`, ']') AS text, + 'Ordini' AS optgroup, + 'ordine' AS tipo, + 'entrata' AS dir + FROM `or_ordini` + INNER JOIN `or_righe_ordini` ON `or_righe_ordini`.`idordine` = `or_ordini`.`id` + INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine` = `or_statiordine`.`id` + LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = ".prepare(setting('Lingua')).") + INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipiordine` = `or_tipiordine`.`id` + WHERE + `idarticolo` = ".prepare($id_articolo)." + AND `name` != 'Fatturato' + AND `dir` = ".prepare($direzione).' + AND |where| + GROUP BY + `or_ordini`.`id` + ORDER BY + `data` DESC, `numero` DESC'; $query_ddt = "SELECT - `dt_ddt`.`id`, - CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`name`, ']') AS text, - 'DDT' AS optgroup, - 'ddt' AS tipo, - 'entrata' AS dir - FROM `dt_ddt` - INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id` - INNER JOIN `dt_statiddt` ON `dt_ddt`.`idstato` = `dt_statiddt`.`id` - LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = ".prepare(setting('Lingua')).") - INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` - WHERE - `idarticolo` = ".prepare($id_articolo)." AND - `dt_stati_lang`.`name` != 'Fatturato' AND - `dt_tipiddt`.`dir`=".prepare($direzione).'AND - |where| - GROUP BY - `dt_ddt`.`id` - HAVING - SUM(`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0 - ORDER BY - `data` DESC, `numero` DESC'; + `dt_ddt`.`id`, + CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`name`, ']') AS text, + 'DDT' AS optgroup, + 'ddt' AS tipo, + 'entrata' AS dir + FROM + `dt_ddt` + INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id` + INNER JOIN `dt_statiddt` ON `dt_ddt`.`idstato` = `dt_statiddt`.`id` + LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = ".prepare(setting('Lingua')).") + INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` + WHERE + `idarticolo` = ".prepare($id_articolo)." AND + `dt_stati_lang`.`name` != 'Fatturato' AND + `dt_tipiddt`.`dir`=".prepare($direzione).'AND + |where| + GROUP BY + `dt_ddt`.`id` + HAVING + SUM(`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0 + ORDER BY + `data` DESC, `numero` DESC'; // Sostituzione per la ricerca $query_ordini = replace($query_ordini, [ diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 00ad1be83..0567e35f0 100755 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -809,7 +809,19 @@ if (!$block_edit) { $ddt = $dbo->fetchArray($ddt_query)[0]['tot']; // Lettura ordini (cliente o fornitore) - $ordini_query = 'SELECT COUNT(*) AS tot FROM or_ordini WHERE idanagrafica='.prepare($record['idanagrafica']).' AND idstatoordine IN (SELECT id FROM or_statiordine WHERE descrizione IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoordine=(SELECT id FROM or_tipiordine WHERE dir='.prepare($dir).') AND or_ordini.id IN (SELECT idordine FROM or_righe_ordini WHERE or_righe_ordini.idordine = or_ordini.id AND (qta - qta_evasa) > 0)'; + $ordini_query = 'SELECT + COUNT(*) AS tot + FROM + `or_ordini` + INNER JOIN `or_righe_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine` + INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine` + LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') + INNER JOIN `or_tipiordine` ON `or_tipiordine`.`id` = `or_ordini`.`idtipoordine` + WHERE + idanagrafica='.prepare($record['idanagrafica']).' + AND `name` IN(\'Accettato\', \'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) + AND `dir`='.prepare($dir).') + AND (`or_righe_ordini`.`qta` - `or_righe_ordini`.`qta_evasa`) > 0'; $ordini = $dbo->fetchArray($ordini_query)[0]['tot']; } diff --git a/modules/interventi/ajax/complete.php b/modules/interventi/ajax/complete.php index 4eff5d74c..caede2934 100644 --- a/modules/interventi/ajax/complete.php +++ b/modules/interventi/ajax/complete.php @@ -5,6 +5,7 @@ use Modules\Anagrafiche\Anagrafica; use Modules\Contratti\Contratto; use Modules\Fatture\Fattura; use Modules\Preventivi\Preventivo; +use Modules\Fatture\Stato; include_once __DIR__.'/../../core.php'; @@ -57,7 +58,7 @@ switch ($op) { if (!$preventivi->isEmpty()) { foreach ($preventivi as $preventivo) { echo ' -
  • '.$preventivo->getReference().' ['.$preventivo->stato->descrizione.']
  • '; +
  • '.$preventivo->getReference().' ['.$preventivo->stato->name.']
  • '; } } else { echo ' @@ -74,7 +75,9 @@ switch ($op) { // Fatture attive $fatture = Fattura::where('idanagrafica', '=', $id_anagrafica) ->whereHas('stato', function ($query) { - $query->whereIn('descrizione', ['Emessa', 'Parzialmente pagato']); + $id_bozza = (new Stato())->getByName('Bozza')->id_record; + $id_parz_pagato = (new Stato())->getByName('Parziale pagato')->id_record; + $query->whereIn('id', [$id_bozza, $id_parz_pagato]); }) ->latest()->take($numero_documenti)->get(); echo ' diff --git a/modules/interventi/src/API/v1/Interventi.php b/modules/interventi/src/API/v1/Interventi.php index 40eda1f14..01c011e2f 100755 --- a/modules/interventi/src/API/v1/Interventi.php +++ b/modules/interventi/src/API/v1/Interventi.php @@ -51,9 +51,7 @@ class Interventi extends Resource implements RetrieveInterface, CreateInterface, ]; $joins[] = [ - 'in_statiintervento_lang', - 'in_statiintervento_lang.id_record', - 'in_statiintervento.id', + 'in_statiintervento_lang' => 'in_statiintervento_lang.id_record = in_statiintervento.id AND in_statiintervento_lang.id_lang = '.setting('Lingua'), ]; $joins[] = [ diff --git a/modules/ordini/actions.php b/modules/ordini/actions.php index 3a9728cad..8b7a2ced6 100755 --- a/modules/ordini/actions.php +++ b/modules/ordini/actions.php @@ -140,16 +140,16 @@ switch (post('op')) { $ordine->save(); if ($dbo->query($query)) { - $query = 'SELECT `descrizione` FROM `or_statiordine` WHERE `id`='.prepare($idstatoordine); + $query = 'SELECT `name` FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `or_statiordine`.`id`='.prepare($idstatoordine); $rs = $dbo->fetchArray($query); // Ricalcolo inps, ritenuta e bollo (se l'ordine non è stato evaso) if ($dir == 'entrata') { - if ($rs[0]['descrizione'] != 'Evaso') { + if ($rs[0]['name'] != 'Evaso') { ricalcola_costiagg_ordine($id_record); } } else { - if ($rs[0]['descrizione'] != 'Evaso') { + if ($rs[0]['name'] != 'Evaso') { ricalcola_costiagg_ordine($id_record, $idrivalsainps, $idritenutaacconto, $bollo); } } diff --git a/modules/ordini/ajax/select.php b/modules/ordini/ajax/select.php index ee6bb6b3c..27dbcc8bb 100644 --- a/modules/ordini/ajax/select.php +++ b/modules/ordini/ajax/select.php @@ -26,24 +26,29 @@ switch ($resource) { */ case 'ordini-cliente': if (isset($superselect['idanagrafica'])) { - $query = 'SELECT or_ordini.id AS id, - CONCAT("Ordine ", numero_esterno, " del ", DATE_FORMAT(data, "%d/%m/%Y"), " [", (SELECT `descrizione` FROM `or_statiordine` WHERE `or_statiordine`.`id` = `idstatoordine`) , "]") AS descrizione - FROM or_ordini - INNER JOIN or_tipiordine ON or_ordini.idtipoordine = or_tipiordine.id - INNER JOIN an_anagrafiche ON or_ordini.idanagrafica = an_anagrafiche.idanagrafica + $query = 'SELECT + `or_ordini`.`id` AS id, + CONCAT("Ordine ", `numero_esterno`, " del ", DATE_FORMAT(data, "%d/%m/%Y"), " [", `or_statiordine_lang`.`name` , "]") AS descrizione + FROM + `or_ordini` + INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id` + INNER JOIN `an_anagrafiche` ON `or_ordini`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` + INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine` = `or_statiordine`.`id` + LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') |where| - ORDER BY or_ordini.id'; + ORDER BY + `or_ordini`.`id`'; foreach ($elements as $element) { - $filter[] = 'or_ordini.id='.prepare($element); + $filter[] = '`or_ordini`.`id`='.prepare($element); } - $where[] = 'or_tipiordine.dir='.prepare('entrata'); + $where[] = '`or_tipiordine`.`dir`='.prepare('entrata'); if (empty($elements)) { - $where[] = 'an_anagrafiche.idanagrafica='.prepare($superselect['idanagrafica']); + $where[] = '`an_anagrafiche`.`idanagrafica`='.prepare($superselect['idanagrafica']); $stato = !empty($superselect['stato']) ? $superselect['stato'] : 'is_fatturabile'; - $where[] = 'idstatoordine IN (SELECT `id` FROM `or_statiordine` WHERE '.$stato.' = 1)'; + $where[] = '`or_statiordine`.'.$stato.' = 1)'; } } diff --git a/modules/ordini/bulk.php b/modules/ordini/bulk.php index 0103ef62e..e19653c7b 100644 --- a/modules/ordini/bulk.php +++ b/modules/ordini/bulk.php @@ -64,7 +64,7 @@ switch (post('op')) { $id_anagrafica = $anagrafica->id; // Proseguo solo se i documenti scelti sono fatturabili - $ordine = $dbo->fetchOne('SELECT or_statiordine.descrizione AS stato FROM or_ordini LEFT JOIN or_statiordine ON or_ordini.idstatoordine=or_statiordine.id WHERE or_ordini.id='.prepare($id))['stato']; + $ordine = $dbo->fetchOne('SELECT `or_statiordine_lang`.`name` AS stato FROM `or_ordini` INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine`=`or_statiordine`.`id` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id`=`or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang`= '.prepare(setting('Lingua')).') WHERE `or_ordini`.`id`='.prepare($id))['stato']; if (!in_array($ordine, ['Fatturato', 'Evaso', 'Bozza', 'In attesa di conferma', 'Annullato'])) { $righe = $documento_import->getRighe(); if (!empty($righe)) { @@ -176,7 +176,7 @@ switch (post('op')) { foreach ($id_records as $id) { $ordine = Ordine::find($id); - if (in_array($ordine->stato->descrizione, ['Bozza', 'In attesa di conferma', 'Accettato'])) { + if (in_array($ordine->stato->name, ['Bozza', 'In attesa di conferma', 'Accettato'])) { // Controllo se è già stato creato un nuovo ordine per l'anagrafica if (in_array($ordine->idanagrafica, array_keys($new_ordini))) { $new_ordine = Ordine::find($new_ordini[$ordine->idanagrafica]); @@ -235,7 +235,7 @@ if ($module['name'] == 'Ordini cliente') { 'title' => tr('Unire gli ordini selezionati?'), 'msg' => tr('Gli ordini saranno processati solo se in uno dei seguenti stati: Bozza, In attesa di conferma, Accettato.
    Tutti gli ordini processati verranno eliminati e verrà creato un nuovo ordine unificato per fornitore.').' {[ "type": "select", "label": "'.tr('Sezionale').'", "name": "id_segment", "required": 1, "ajax-source": "segmenti", "select-options": '.json_encode(['id_module' => $id_module, 'is_sezionale' => 1]).', "value": "'.$id_segment_ordini.'", "select-options-escape": true ]} - {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT id, descrizione FROM or_statiordine" ]} + {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `or_statiordine`.`id`, `name` FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') ORDER BY `name` ASC" ]} {[ "type": "date", "label": "'.tr('Data').'", "name": "data", "required": 1]}', 'button' => tr('Procedi'), 'class' => 'btn btn-lg btn-warning', @@ -250,7 +250,7 @@ $operations['cambia_stato'] = [ 'data' => [ 'title' => tr('Vuoi davvero cambiare lo stato per questi ordini?'), 'msg' => tr('Seleziona lo stato in cui spostare tutti gli ordini').'.
    -
    {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT id, descrizione, colore as _bgcolor_ FROM or_statiordine" ]}', +
    {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `or_statiordine`.`id`, `name`, `colore` as _bgcolor_ FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') ORDER BY `name` ASC" ]}', 'button' => tr('Procedi'), 'class' => 'btn btn-lg btn-warning', 'blank' => false, diff --git a/modules/ordini/buttons.php b/modules/ordini/buttons.php index bba5e8e51..177983d74 100755 --- a/modules/ordini/buttons.php +++ b/modules/ordini/buttons.php @@ -31,9 +31,9 @@ function duplicaOrdine() { } '; -$stati = $dbo->fetchArray('SELECT descrizione FROM `or_statiordine` WHERE `is_fatturabile` = 1'); +$stati = $dbo->fetchArray('SELECT `name` FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id`=`or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang`= '.prepare(setting('Lingua')).') WHERE `is_fatturabile` = 1'); foreach ($stati as $stato) { - $stati_importabili[] = $stato['descrizione']; + $stati_importabili[] = $stato['name']; } echo ' diff --git a/modules/ordini/edit.php b/modules/ordini/edit.php index c64794591..742daa0b6 100755 --- a/modules/ordini/edit.php +++ b/modules/ordini/edit.php @@ -74,16 +74,16 @@ if ($righe_vuote) { if (setting('Cambia automaticamente stato ordini fatturati')) { if ($record['stato'] == 'Evaso' || $record['stato'] == 'Parzialmente evaso' || $record['stato'] == 'Fatturato' || $record['stato'] == 'Parzialmente fatturato') { ?> - {[ "type": "select", "label": "", "name": "idstatoordine", "required": 1, "values": "query=SELECT *, colore AS _bgcolor_ FROM or_statiordine ORDER BY descrizione", "value": "$idstatoordine$", "extra": "readonly", "class": "unblockable" ]} + {[ "type": "select", "label": "", "name": "idstatoordine", "required": 1, "values": "query=SELECT *, `or_statiordine_lang`.`name` as descrizione, `colore` AS _bgcolor_ FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = ) ORDER BY `name`", "value": "$idstatoordine$", "extra": "readonly", "class": "unblockable" ]} - {[ "type": "select", "label": "", "name": "idstatoordine", "required": 1, "values": "query=SELECT *, colore AS _bgcolor_ FROM or_statiordine WHERE (is_fatturabile = 0 AND descrizione != 'Fatturato' || descrizione = 'Accettato') ORDER BY descrizione", "value": "$idstatoordine$", "class": "unblockable" ]} + {[ "type": "select", "label": "", "name": "idstatoordine", "required": 1, "values": "query=SELECT *, `or_statiordine_lang`.`name` as descrizione, `colore` AS _bgcolor_ FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = ) WHERE (`is_fatturabile` = 0 AND `name` != 'Fatturato' || `name` = 'Accettato') ORDER BY `name`", "value": "$idstatoordine$", "class": "unblockable" ]} - {[ "type": "select", "label": "", "name": "idstatoordine", "required": 1, "values": "query=SELECT *, colore AS _bgcolor_ FROM or_statiordine ORDER BY descrizione", "value": "$idstatoordine$", "class": "unblockable" ]} + {[ "type": "select", "label": "", "name": "idstatoordine", "required": 1, "values": "query=SELECT *, `colore` AS _bgcolor_, `or_statiordine_lang`.`name` as descrizione FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = ) ORDER BY `name`", "value": "$idstatoordine$", "class": "unblockable" ]} diff --git a/modules/ordini/init.php b/modules/ordini/init.php index 71d944196..19634bf42 100755 --- a/modules/ordini/init.php +++ b/modules/ordini/init.php @@ -25,16 +25,20 @@ if (isset($id_record)) { $ordine = Ordine::with('tipo', 'stato')->find($id_record); $record = $dbo->fetchOne('SELECT *, - or_ordini.note, - or_ordini.idpagamento, - or_ordini.id AS idordine, - or_ordini.idagente AS idagente, - or_statiordine.descrizione AS `stato`, - or_tipiordine.descrizione AS `descrizione_tipodoc`, - (SELECT tipo FROM an_anagrafiche WHERE idanagrafica = or_ordini.idanagrafica) AS tipo_anagrafica, - (SELECT completato FROM or_statiordine WHERE or_statiordine.id=or_ordini.idstatoordine) AS flag_completato - FROM or_ordini LEFT OUTER JOIN or_statiordine ON or_ordini.idstatoordine=or_statiordine.id - INNER JOIN an_anagrafiche ON or_ordini.idanagrafica=an_anagrafiche.idanagrafica - INNER JOIN or_tipiordine ON or_ordini.idtipoordine=or_tipiordine.id - WHERE or_ordini.id='.prepare($id_record)); + `or_ordini`.`note`, + `or_ordini`.`idpagamento`, + `or_ordini`.`id` AS idordine, + `or_ordini`.`idagente` AS idagente, + `or_statiordine_lang`.`name` AS `stato`, + `or_tipiordine`.`descrizione` AS `descrizione_tipodoc`, + `an_anagrafiche`.`tipo` AS tipo_anagrafica, + `or_statiordine`.`completato` AS flag_completato + FROM + `or_ordini` + INNER JOIN `or_statiordine` ON `or_ordini`.`idstatoordine`=`or_statiordine`.`id` + LEFT JOIN `or_statiordine_lang` ON `or_statiordine_lang`.`id_record`=`or_statiordine`.`id` + INNER JOIN `an_anagrafiche` ON `or_ordini`.`idanagrafica`=`an_anagrafiche`.`idanagrafica` + INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine`=`or_tipiordine`.`id` + WHERE + `or_ordini`.`id`='.prepare($id_record)); } diff --git a/modules/ordini/modals/duplicazione.php b/modules/ordini/modals/duplicazione.php index 8318f929d..09b848d5c 100644 --- a/modules/ordini/modals/duplicazione.php +++ b/modules/ordini/modals/duplicazione.php @@ -30,7 +30,7 @@ echo '
    - {[ "type": "select", "label": "'.tr('Stato').'", "name": "idstatoordine", "required": 1, "values": "query=SELECT * FROM or_statiordine WHERE descrizione IN(\'Bozza\', \'Accettato\', \'In attesa di conferma\')", "value": "1" ]} + {[ "type": "select", "label": "'.tr('Stato').'", "name": "idstatoordine", "required": 1, "values": "query=SELECT * FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record`=`or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang`= '.prepare(setting('Lingua')).') WHERE `name` IN(\'Bozza\', \'Accettato\', \'In attesa di conferma\')", "value": "1" ]}
    diff --git a/modules/ordini/plugins/ordini.consuntivo.php b/modules/ordini/plugins/ordini.consuntivo.php index 148dce376..c08322242 100644 --- a/modules/ordini/plugins/ordini.consuntivo.php +++ b/modules/ordini/plugins/ordini.consuntivo.php @@ -124,10 +124,10 @@ if (!empty($interventi)) { $tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata; // Raggruppamento per stato intervento - $stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore; - $stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore; - $stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; - $stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata; + $stati_intervento[$intervento->stato->name]['colore'] = $intervento->stato->colore; + $stati_intervento[$intervento->stato->name]['ore'] += $sessione->ore; + $stati_intervento[$intervento->stato->name]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; + $stati_intervento[$intervento->stato->name]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata; } echo ' diff --git a/modules/ordini/quantita_impegnate.php b/modules/ordini/quantita_impegnate.php index 21803061e..b9115710f 100644 --- a/modules/ordini/quantita_impegnate.php +++ b/modules/ordini/quantita_impegnate.php @@ -51,14 +51,21 @@ foreach ($articoli as $elenco) { $codice = $articolo ? $articolo->codice : tr('Articolo eliminato'); $descrizione = $articolo ? $articolo->name : $elenco->first()->name; - $qta_impegnata = $database->fetchOne("SELECT SUM(qta) as qta - FROM or_righe_ordini - JOIN or_ordini ON or_ordini.id = or_righe_ordini.idordine - WHERE idstatoordine = (SELECT id FROM or_statiordine WHERE descrizione = 'Bozza') - AND idtipoordine IN (SELECT id FROM or_tipiordine WHERE dir = 'entrata') - AND confermato = 1 - AND idarticolo=".prepare($articolo->id).' - GROUP BY idarticolo')['qta']; + $qta_impegnata = $database->fetchOne("SELECT + SUM(`qta`) as qta + FROM + `or_righe_ordini` + INNER JOIN `or_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine` + INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine` + LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.`id_lang` = ".prepare(setting('Lingua')).") + INNER JOIN `or_tipiordine` ON `or_tipiordine`.`id` = `or_ordini`.`idtipoordine` + WHERE + `or_statiordine`.`name` = 'Bozza' + AND `dir` = 'entrata' + AND `confermato` = 1 + AND `idarticolo`=".prepare($articolo->id).' + GROUP BY + `idarticolo`')['qta']; $qta_impegnata = floatval($qta_impegnata); $class = $qta_impegnata + $qta > $articolo->qta ? 'danger' : 'success'; diff --git a/modules/ordini/src/Ordine.php b/modules/ordini/src/Ordine.php index 3d26e3c81..2bad6f92a 100755 --- a/modules/ordini/src/Ordine.php +++ b/modules/ordini/src/Ordine.php @@ -56,7 +56,7 @@ class Ordine extends Document { $model = new static(); - $stato_documento = Stato::where('descrizione', 'Bozza')->first(); + $stato_documento = (new Stato())->getByName('Bozza')->id_record; $direzione = $tipo_documento->dir; $id_segment = $id_segment ?: getSegmentPredefined($model->getModule()->id); diff --git a/modules/ordini/src/Stato.php b/modules/ordini/src/Stato.php index 2ed1eb198..5608759c3 100755 --- a/modules/ordini/src/Stato.php +++ b/modules/ordini/src/Stato.php @@ -32,4 +32,35 @@ class Stato extends Model { return $this->hasMany(Ordine::class, 'idstatoordine'); } + + + /** + * Ritorna l'attributo name dello stato ordine. + * + * @return string + */ + public function getNameAttribute() + { + return database()->table($this->table.'_lang') + ->select('name') + ->where('id_record', '=', $this->id) + ->where('id_lang', '=', setting('Lingua')) + ->first()->name; + } + + /** + * Ritorna l'id dello stato ordine a partire dal nome. + * + * @param string $name il nome da ricercare + * + * @return \Illuminate\Support\Collection + */ + public function getByName($name) + { + return database()->table($this->table.'_lang') + ->select('id_record') + ->where('name', '=', $name) + ->where('id_lang', '=', setting('Lingua')) + ->first(); + } } diff --git a/modules/preventivi/bulk.php b/modules/preventivi/bulk.php index 6783910b6..7ba1e5337 100755 --- a/modules/preventivi/bulk.php +++ b/modules/preventivi/bulk.php @@ -48,7 +48,7 @@ switch (post('op')) { // Informazioni della fattura $tipo_documento = Tipo::where('id', post('idtipodocumento'))->first(); - $stato_documenti_accodabili = StatoFattura::where('descrizione', 'Bozza')->first(); + $stato_documenti_accodabili = (new StatoFattura())->getByName('Bozza')->id_record; $accodare = post('accodare'); $data = date('Y-m-d'); diff --git a/modules/preventivi/plugins/preventivi.consuntivo.php b/modules/preventivi/plugins/preventivi.consuntivo.php index e33178bb2..4908de4de 100755 --- a/modules/preventivi/plugins/preventivi.consuntivo.php +++ b/modules/preventivi/plugins/preventivi.consuntivo.php @@ -124,10 +124,10 @@ if (!empty($interventi)) { $tecnici[$sessione->anagrafica->ragione_sociale]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata; // Raggruppamento per stato intervento - $stati_intervento[$intervento->stato->descrizione]['colore'] = $intervento->stato->colore; - $stati_intervento[$intervento->stato->descrizione]['ore'] += $sessione->ore; - $stati_intervento[$intervento->stato->descrizione]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; - $stati_intervento[$intervento->stato->descrizione]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata; + $stati_intervento[$intervento->stato->name]['colore'] = $intervento->stato->colore; + $stati_intervento[$intervento->stato->name]['ore'] += $sessione->ore; + $stati_intervento[$intervento->stato->name]['costo'] += $sessione->costo_manodopera + $sessione->costo_viaggio + $sessione->costo_diritto_chiamata; + $stati_intervento[$intervento->stato->name]['ricavo'] += $sessione->prezzo_manodopera - $sessione->sconto_totale_manodopera + $sessione->prezzo_viaggio - $sessione->sconto_totale_viaggio + $sessione->prezzo_diritto_chiamata; } echo ' diff --git a/modules/stati_contratto/src/API/v1/StatiContratti.php b/modules/stati_contratto/src/API/v1/StatiContratti.php index 21ecc03e1..3cec0e67b 100755 --- a/modules/stati_contratto/src/API/v1/StatiContratti.php +++ b/modules/stati_contratto/src/API/v1/StatiContratti.php @@ -40,6 +40,7 @@ class StatiContratti extends Resource implements RetrieveInterface return [ 'select' => $select, 'table' => $table, + 'where' => $where, ]; } diff --git a/modules/stati_fattura/edit.php b/modules/stati_fattura/edit.php index d6db8c477..cf8491197 100644 --- a/modules/stati_fattura/edit.php +++ b/modules/stati_fattura/edit.php @@ -27,7 +27,7 @@ include_once __DIR__.'/../../core.php';
    - {[ "type": "text", "label": "", "name": "descrizione", "required": 1, "value": "$descrizione$", "extra": "readonly" ]} + {[ "type": "text", "label": "", "name": "descrizione", "required": 1, "value": "$name$", "extra": "readonly" ]}
    diff --git a/modules/stati_intervento/src/API/v1/StatiInterventi.php b/modules/stati_intervento/src/API/v1/StatiInterventi.php index ad11ce8a3..4c686ba08 100755 --- a/modules/stati_intervento/src/API/v1/StatiInterventi.php +++ b/modules/stati_intervento/src/API/v1/StatiInterventi.php @@ -35,6 +35,10 @@ class StatiInterventi extends Resource implements RetrieveInterface ]; } + $join = [ + 'in_statiintervento_lang' => 'in_statiintervento_lang.id_record = in_statiintervento.id AND in_statiintervento_lang.id_lang = '.setting('Lingua'), + ]; + $where = $request['where']; if (empty($where['deleted_at'])) { $where['deleted_at'] = null; @@ -43,6 +47,8 @@ class StatiInterventi extends Resource implements RetrieveInterface return [ 'select' => $select, 'table' => $table, + 'join' => $join, + 'where' => $where, ]; } } diff --git a/modules/stati_ordine/actions.php b/modules/stati_ordine/actions.php index 45e4f1934..35406bc93 100644 --- a/modules/stati_ordine/actions.php +++ b/modules/stati_ordine/actions.php @@ -19,10 +19,12 @@ include_once __DIR__.'/../../core.php'; +use Modules\Ordini\Stato; + switch (post('op')) { case 'update': + $id_stato= (new Stato())->getByName(post('descrizione'))->id_record; $dbo->update('or_statiordine', [ - 'descrizione' => (count($dbo->fetchArray('SELECT descrizione FROM or_statiordine WHERE descrizione = '.prepare(post('descrizione')))) > 0) ? $dbo->fetchOne('SELECT descrizione FROM or_statiordine WHERE id ='.$id_record)['descrizione'] : post('descrizione'), 'icona' => post('icona'), 'colore' => post('colore'), 'completato' => post('completato') ?: null, @@ -30,6 +32,10 @@ switch (post('op')) { 'impegnato' => post('impegnato') ?: null, ], ['id' => $id_record]); + $dbo->update('or_statiordine_lang', [ + 'name' => $id_stato ? $id_stato->name : post('descrizione'), + ], ['id_record' => $id_record, 'id_lang' => setting('Lingua')]); + flash()->info(tr('Informazioni salvate correttamente.')); break; @@ -43,12 +49,13 @@ switch (post('op')) { $impegnato = post('impegnato') ?: null; // controlla descrizione che non sia duplicata - if (count($dbo->fetchArray('SELECT descrizione FROM or_statiordine WHERE descrizione='.prepare($descrizione))) > 0) { + $id_stato= (new Stato())->getByName(post('descrizione'))->id_record; + if ($id_stato) { flash()->error(tr('Stato ordine già esistente.')); } else { - $query = 'INSERT INTO or_statiordine(descrizione, icona, colore, completato, is_fatturabile, impegnato) VALUES ('.prepare($descrizione).', '.prepare($icona).', '.prepare($colore).','.prepare($completato).', '.prepare($is_fatturabile).', '.prepare($impegnato).' )'; - $dbo->query($query); + $dbo->query('INSERT INTO `or_statiordine` (icona, colore, completato, is_fatturabile, impegnato) VALUES ('.prepare($icona).', '.prepare($colore).','.prepare($completato).', '.prepare($is_fatturabile).', '.prepare($impegnato).' )'); $id_record = $dbo->lastInsertedID(); + $dbo->query('INSERT INTO `or_statiordine_lang` (`name`, `id_record`, `id_lang`) VALUES ('.prepare($descrizione).', '.prepare($id_record).', '.prepare(setting('Lingua')).')'); flash()->info(tr('Nuovo stato ordine aggiunto.')); } @@ -56,10 +63,10 @@ switch (post('op')) { case 'delete': // scelgo se settare come eliminato o cancellare direttamente la riga se non è stato utilizzato negli ordini - if (count($dbo->fetchArray('SELECT id FROM or_statiordine WHERE id='.prepare($id_record))) > 0) { - $query = 'UPDATE or_statiordine SET deleted_at = NOW() WHERE can_delete = 1 AND id='.prepare($id_record); + if (count($dbo->fetchArray('SELECT `id` FROM `or_statiordine` WHERE `id`='.prepare($id_record))) > 0) { + $query = 'UPDATE `or_statiordine` SET `deleted_at` = NOW() WHERE `can_delete` = 1 AND `id`='.prepare($id_record); } else { - $query = 'DELETE FROM or_statiordine WHERE can_delete = 1 AND id='.prepare($id_record); + $query = 'DELETE FROM `or_statiordine` WHERE `can_delete` = 1 AND `id`='.prepare($id_record); } $dbo->query($query); diff --git a/modules/stati_ordine/edit.php b/modules/stati_ordine/edit.php index ac341fa48..880831a22 100644 --- a/modules/stati_ordine/edit.php +++ b/modules/stati_ordine/edit.php @@ -34,7 +34,7 @@ if ($record['can_delete']) {
    - {[ "type": "text", "label": "", "name": "descrizione", "required": 1, "value": "$descrizione$", "extra": "" ]} + {[ "type": "text", "label": "", "name": "descrizione", "required": 1, "value": "$name$", "extra": "" ]}
    @@ -63,7 +63,7 @@ if ($record['can_delete']) { fetchNum('SELECT id FROM or_ordini WHERE idstatoordine='.prepare($id_record)); +$ordini = $dbo->fetchNum('SELECT `id` FROM `or_ordini` WHERE `idstatoordine`='.prepare($id_record)); if (!empty($ordini)) { echo ' diff --git a/modules/stati_ordine/init.php b/modules/stati_ordine/init.php index 18c5634f3..e22db9955 100644 --- a/modules/stati_ordine/init.php +++ b/modules/stati_ordine/init.php @@ -20,5 +20,5 @@ include_once __DIR__.'/../../core.php'; if (isset($id_record)) { - $record = $dbo->fetchOne('SELECT * FROM or_statiordine WHERE id='.prepare($id_record)); + $record = $dbo->fetchOne('SELECT * FROM `or_statiordine` LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record`=`or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `or_statiordine`.`id`='.prepare($id_record)); } diff --git a/modules/stati_ordine/src/API/v1/StatiOrdini.php b/modules/stati_ordine/src/API/v1/StatiOrdini.php index 9cb12769c..cd652ee1d 100644 --- a/modules/stati_ordine/src/API/v1/StatiOrdini.php +++ b/modules/stati_ordine/src/API/v1/StatiOrdini.php @@ -32,6 +32,10 @@ class StatiOrdini extends Resource implements RetrieveInterface '*', ]; + $joins = [ + 'or_statiordine_lang' => 'or_statiordine_lang.id_record = or_statiordine.id AND or_statiordine_lang.id_lang = '.setting('Lingua'), + ]; + $where = $request['where']; if (empty($where['deleted_at'])) { $where['deleted_at'] = null; @@ -40,6 +44,8 @@ class StatiOrdini extends Resource implements RetrieveInterface return [ 'select' => $select, 'table' => $table, + 'join' => $joins, + 'where' => $where, ]; } } diff --git a/plugins/importFE/actions.php b/plugins/importFE/actions.php index 942f9b419..b7193d61a 100755 --- a/plugins/importFE/actions.php +++ b/plugins/importFE/actions.php @@ -495,25 +495,29 @@ switch (filter('op')) { // cerco per quell'ordine if (empty($collegamento)) { $ordine = $dati_ordini[$numero_linea]; - $query = "SELECT or_righe_ordini.id, or_righe_ordini.idordine AS id_documento, or_righe_ordini.is_descrizione, or_righe_ordini.idarticolo, or_righe_ordini.is_sconto, 'ordine' AS ref, - CONCAT('Ordine num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM or_statiordine WHERE id = idstatoordine) , ']') AS opzione - FROM or_righe_ordini - INNER JOIN or_ordini ON or_ordini.id = or_righe_ordini.idordine + $query = "SELECT + `or_righe_ordini`.`id`, + `or_righe_ordini`.`idordine` AS id_documento, + `or_righe_ordini`.`is_descrizione`, + `or_righe_ordini`.`idarticolo`, + `or_righe_ordini`.`is_sconto`, + 'ordine' AS ref, + CONCAT('Ordine num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `or_statiordine_lang`.`name` , ']') AS opzione + FROM `or_righe_ordini` + INNER JOIN `or_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine` + INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine` + LEFT JOIN `or_statiordine_lang` ON `or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = ".prepare(setting('Lingua'))." WHERE - or_ordini.numero_esterno = ".prepare($ordine['numero']).' - AND - YEAR(or_ordini.data) = '.prepare($ordine['anno']).' - AND - or_ordini.idanagrafica = '.prepare($anagrafica->id).' - AND - or_righe_ordini.qta > or_righe_ordini.qta_evasa - AND - |where|'; + `or_ordini`.`numero_esterno` = ".prepare($ordine['numero']).' + AND YEAR(`or_ordini`.`data`) = '.prepare($ordine['anno']).' + AND `or_ordini`.`idanagrafica` = '.prepare($anagrafica->id).' + AND `or_righe_ordini`.`qta` > `or_righe_ordini`.`qta_evasa` + AND |where|'; // Ricerca di righe Ordine con stesso Articolo if (!empty($id_articolo)) { $query_articolo = replace($query, [ - '|where|' => 'or_righe_ordini.idarticolo = '.prepare($id_articolo), + '|where|' => '`or_righe_ordini`.`idarticolo` = '.prepare($id_articolo), ]); $collegamento = $database->fetchOne($query_articolo); @@ -522,7 +526,7 @@ switch (filter('op')) { // Ricerca di righe Ordine per stessa descrizione if (empty($collegamento)) { $query_descrizione = replace($query, [ - '|where|' => 'or_righe_ordini.descrizione = '.prepare($riga['Descrizione']), + '|where|' => '`or_righe_ordini`.`descrizione` = '.prepare($riga['Descrizione']), ]); $collegamento = $database->fetchOne($query_descrizione); @@ -568,12 +572,15 @@ switch (filter('op')) { FROM `or_righe_ordini` INNER JOIN `or_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine` + INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine` + LEFT JOIN `or_statiordine_lang` ON (`or_statiordine_lang`.`id_record` = `or_statiordine`.`id` AND `or_statiordine_lang`.`id_lang` = ".prepare(setting('Lingua')).") + INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id` WHERE `or_ordini`.`idanagrafica` = ".prepare($anagrafica->id)." AND |where_ordini| AND `or_righe_ordini`.`qta` > `or_righe_ordini`.`qta_evasa` AND - `or_ordini`.`idstatoordine` IN (SELECT `id` FROM `or_statiordine` WHERE `descrizione` != 'Fatturato') AND - `idtipoordine` IN (SELECT `id` FROM `or_tipiordine` WHERE `dir` ='uscita')"; + `or_statiordine_lang` WHERE `name` != 'Fatturato' AND + `or_tipiordine`.`dir` ='uscita'"; // Ricerca di righe DDT/Ordine con stesso Articolo if (!empty($id_articolo)) { diff --git a/plugins/pianificazione_fatturazione/ajax_rate.php b/plugins/pianificazione_fatturazione/ajax_rate.php index 95ccf282e..ab5e77ed6 100644 --- a/plugins/pianificazione_fatturazione/ajax_rate.php +++ b/plugins/pianificazione_fatturazione/ajax_rate.php @@ -21,19 +21,21 @@ use Plugins\PianificazioneFatturazione\Pianificazione; include_once __DIR__.'/../../core.php'; +use Modules\Contratti\Stato; + $action = post('action'); $ret = ''; switch ($action) { case 'update_table': $month = post('currentMonth'); $year = post('currentYear'); - $pianificazioni = Pianificazione::doesntHave('fattura') ->whereHas('contratto', function ($q) { $q->whereHas('stato', function ($q) { + $stato_concluso = (new Stato())->getByName('Concluso')->id_record; $q ->where('is_fatturabile', 1) - ->where('descrizione', '<>', 'Concluso'); + ->where('id', '!=', $stato_concluso); }); }) ->whereYear('co_fatturazione_contratti.data_scadenza', $year) @@ -70,9 +72,10 @@ switch ($action) { $pianificazioni = Pianificazione::doesntHave('fattura') ->whereHas('contratto', function ($q) { $q->whereHas('stato', function ($q) { + $stato_concluso = (new Stato())->getByName('Concluso')->id_record; $q ->where('is_fatturabile', 1) - ->where('descrizione', '<>', 'Concluso'); + ->where('id', '!=', $stato_concluso); }); }) ->whereYear('co_fatturazione_contratti.data_scadenza', $year) diff --git a/plugins/pianificazione_fatturazione/edit.php b/plugins/pianificazione_fatturazione/edit.php index 1c35f6d49..8e8e2ec07 100644 --- a/plugins/pianificazione_fatturazione/edit.php +++ b/plugins/pianificazione_fatturazione/edit.php @@ -30,7 +30,7 @@ if (empty($contratto)) { $is_pianificabile = $contratto->stato->is_pianificabile && !empty($contratto['data_accettazione']) && !empty($contratto['data_conclusione']); // Contratto permette la pianificazione $is_pianificato = false; $stati_pianificabili = Stato::where('is_pianificabile', 1)->get(); -$elenco_stati = $stati_pianificabili->implode('descrizione', ', '); +$elenco_stati = $stati_pianificabili->implode('name', ', '); echo '

    '.tr('Qui puoi pianificare la suddivisione del budget del contratto in rate uguali fatturabili in modo separato').'. '.tr('Questa procedura può essere effettuata solo una volta, e sovrascriverà in modo irreversibile tutte le righe del contratto').'.

    diff --git a/plugins/pianificazione_interventi/edit.php b/plugins/pianificazione_interventi/edit.php index 18c5899a3..df9382d7c 100755 --- a/plugins/pianificazione_interventi/edit.php +++ b/plugins/pianificazione_interventi/edit.php @@ -31,7 +31,7 @@ $is_pianificabile = $contratto->stato->is_pianificabile && !empty($contratto['da $elenco_promemoria = $contratto->promemoria->sortBy('data_richiesta'); $stati_pianificabili = Stato::where('is_pianificabile', 1)->get(); -$elenco_stati = $stati_pianificabili->implode('descrizione', ', '); +$elenco_stati = $stati_pianificabili->implode('name', ', '); echo '

    '.tr('Puoi pianificare dei "promemoria" o direttamente gli interventi da effettuare entro determinate scadenze').'. '.tr('Per poter pianificare i promemoria, il contratto deve avere data accettazione e data conclusione definita ed essere in uno dei seguenti stati: _LINK_', [ diff --git a/src/API/App/v1/Impianti.php b/src/API/App/v1/Impianti.php index 9383c458a..b2d6ab32e 100755 --- a/src/API/App/v1/Impianti.php +++ b/src/API/App/v1/Impianti.php @@ -22,6 +22,7 @@ namespace API\App\v1; use API\App\AppResource; use Illuminate\Database\Eloquent\Builder; use Modules\Impianti\Impianto; +use Modules\Anagrafiche\Tipo; class Impianti extends AppResource { @@ -44,7 +45,8 @@ class Impianti extends AppResource { $statement = Impianto::select('id', 'updated_at', 'idtecnico') ->whereHas('anagrafica.tipi', function (Builder $query) { - $query->where('descrizione', '=', 'Cliente'); + $tipo_cliente = (new Tipo())->getByName('Cliente')->id_record; + $query->where('id', '=', $tipo_cliente); }); // Limite impianti visualizzabili dal tecnico diff --git a/src/API/App/v1/Tecnici.php b/src/API/App/v1/Tecnici.php index f81c755c5..d132398c1 100644 --- a/src/API/App/v1/Tecnici.php +++ b/src/API/App/v1/Tecnici.php @@ -22,6 +22,7 @@ namespace API\App\v1; use API\App\AppResource; use Illuminate\Database\Eloquent\Builder; use Modules\Anagrafiche\Anagrafica; +use Modules\Anagrafiche\Tipo; class Tecnici extends AppResource { @@ -34,7 +35,8 @@ class Tecnici extends AppResource { $statement = Anagrafica::select('idanagrafica', 'updated_at') ->whereHas('tipi', function (Builder $query) { - $query->where('descrizione', '=', 'Tecnico'); + $tipo_tecnico = (new Tipo())->getByName('Tecnico')->id_record; + $query->where('id', '=', $tipo_tecnico); }); // Filtro per data diff --git a/update/2_4_55.sql b/update/2_4_55.sql index 5ac7f22cb..94de7a3ac 100644 --- a/update/2_4_55.sql +++ b/update/2_4_55.sql @@ -438,6 +438,7 @@ WHERE HAVING 2=2" WHERE `name` = 'Stati fatture'; UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_statidocumento_lang`.`name`' WHERE `zz_modules`.`name` = 'Stati fatture' AND `zz_views`.`name` = 'Descrizione'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_statidocumento`.`id`' WHERE `zz_modules`.`name` = 'Stati fatture' AND `zz_views`.`name` = 'id'; UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_statidocumento_lang`.`name`' WHERE `zz_modules`.`name` = 'Fatture di vendita' AND `zz_views`.`name` = 'icon_title_Stato'; UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`co_statidocumento_lang`.`name`' WHERE `zz_modules`.`name` = 'Fatture di acquisto' AND `zz_views`.`name` = 'icon_title_Stato'; @@ -1617,4 +1618,88 @@ WHERE `mg_combinazioni`.`deleted_at` IS NULL HAVING 2=2" WHERE `name` = 'Combinazioni'; -UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`mg_combinazioni_lang`.`name`' WHERE `zz_modules`.`name` = 'Combinazioni' AND `zz_views`.`name` = 'Nome'; \ No newline at end of file +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`mg_combinazioni_lang`.`name`' WHERE `zz_modules`.`name` = 'Combinazioni' AND `zz_views`.`name` = 'Nome'; + +-- Aggiunta tabella or_statiordine_lang +CREATE TABLE IF NOT EXISTS `or_statiordine_lang` ( + `id` int NOT NULL, + `id_lang` int NOT NULL, + `id_record` int NOT NULL, + `name` VARCHAR(255) NOT NULL +); +ALTER TABLE `or_statiordine_lang` + ADD PRIMARY KEY (`id`); + +ALTER TABLE `or_statiordine_lang` + MODIFY `id` int NOT NULL AUTO_INCREMENT; + +INSERT INTO `or_statiordine_lang` (`id`, `id_lang`, `id_record`, `name`) SELECT NULL, (SELECT `id` FROM `zz_langs` WHERE `iso_code` = 'it'), `id`, `descrizione` FROM `or_statiordine`; + +ALTER TABLE `or_statiordine` + DROP `descrizione`; + +ALTER TABLE `or_statiordine` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT; + +ALTER TABLE `or_statiordine_lang` ADD CONSTRAINT `or_statiordine_lang_ibfk_1` FOREIGN KEY (`id_record`) REFERENCES `or_statiordine`(`id`) ON DELETE CASCADE ON UPDATE RESTRICT; + +-- Allineamento vista Stati degli ordini +UPDATE `zz_modules` SET `options` = " +SELECT + |select| +FROM + `or_statiordine` + LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.|lang|) +WHERE + 1=1 AND + deleted_at IS NULL +HAVING + 2=2" WHERE `name` = 'Stati degli ordini'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`or_statiordine`.`id`' WHERE `zz_modules`.`name` = 'Stati degli ordini' AND `zz_views`.`name` = 'id'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`or_statiordine_lang`.`name`' WHERE `zz_modules`.`name` = 'Stati degli ordini' AND `zz_views`.`name` = 'Descrizione'; + +-- Allineamento vista Ordini fornitore +UPDATE `zz_modules` SET `options` = " +SELECT + |select| +FROM + `or_ordini` + INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id` + INNER JOIN `an_anagrafiche` ON `or_ordini`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` + LEFT JOIN (SELECT `idordine`, SUM(`qta` - `qta_evasa`) AS `qta_da_evadere`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM(`subtotale` - `sconto` + `iva`) AS `totale` FROM `or_righe_ordini` GROUP BY `idordine`) AS righe ON `or_ordini`.`id` = `righe`.`idordine` + LEFT JOIN (SELECT `idordine`, MIN(`data_evasione`) AS `data_evasione` FROM `or_righe_ordini` WHERE (`qta` - `qta_evasa`)>0 GROUP BY `idordine`) AS `righe_da_evadere` ON `righe`.`idordine`=`righe_da_evadere`.`idordine` + INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine` + LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.|lang|) + LEFT JOIN (SELECT GROUP_CONCAT(DISTINCT co_documenti.numero_esterno SEPARATOR ', ') AS info, co_righe_documenti.original_document_id AS idordine FROM co_documenti INNER JOIN co_righe_documenti ON co_documenti.id = co_righe_documenti.iddocumento WHERE original_document_type='Modules\\Ordini\\Ordine' GROUP BY idordine, original_document_id) AS fattura ON fattura.idordine = or_ordini.id + LEFT JOIN (SELECT COUNT(`id`) as emails, `em_emails`.`id_record` FROM `em_emails` INNER JOIN `zz_operations` ON `zz_operations`.`id_email` = `em_emails`.`id` WHERE `id_module` IN(SELECT `id` FROM `zz_modules` WHERE `name` = 'Ordini fornitore') AND `zz_operations`.`op` = 'send-email' GROUP BY `em_emails`.`id_record`) AS email ON `email`.`id_record` = `or_ordini`.`id` +WHERE + 1=1 |segment(`or_ordini`.`id_segment`)| AND `dir` = 'uscita' |date_period(`or_ordini`.`data`)| +HAVING + 2=2 +ORDER BY + `data` DESC, + CAST(`numero_esterno` AS UNSIGNED) DESC" WHERE `name` = 'Ordini fornitore'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`or_statiordine_lang`.`name`' WHERE `zz_modules`.`name` = 'Ordini fornitore' AND `zz_views`.`name` = 'icon_title_Stato'; + +-- Allineamento vista Ordini cliente +UPDATE `zz_modules` SET `options` = " +SELECT + |select| +FROM + `or_ordini` + INNER JOIN `or_tipiordine` ON `or_ordini`.`idtipoordine` = `or_tipiordine`.`id` + INNER JOIN `an_anagrafiche` ON `or_ordini`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` + LEFT JOIN (SELECT `idordine`, SUM(`qta` - `qta_evasa`) AS `qta_da_evadere`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM(`subtotale` - `sconto` + `iva`) AS `totale` FROM `or_righe_ordini` GROUP BY `idordine`) AS righe ON `or_ordini`.`id` = `righe`.`idordine` + LEFT JOIN (SELECT `idordine`, MIN(`data_evasione`) AS `data_evasione` FROM `or_righe_ordini` WHERE (`qta` - `qta_evasa`)>0 GROUP BY `idordine`) AS `righe_da_evadere` ON `righe`.`idordine`=`righe_da_evadere`.`idordine` + INNER JOIN `or_statiordine` ON `or_statiordine`.`id` = `or_ordini`.`idstatoordine` + LEFT JOIN `or_statiordine_lang` ON (`or_statiordine`.`id` = `or_statiordine_lang`.`id_record` AND `or_statiordine_lang`.|lang|) + LEFT JOIN (SELECT GROUP_CONCAT(DISTINCT 'Fattura ',`co_documenti`.`numero_esterno` SEPARATOR ', ') AS `info`, `co_righe_documenti`.`original_document_id` AS `idordine` FROM `co_documenti` INNER JOIN `co_righe_documenti` ON `co_documenti`.`id` = `co_righe_documenti`.`iddocumento` WHERE `original_document_type`='Modules\\Ordini\\Ordine' GROUP BY original_document_id) AS `fattura` ON `fattura`.`idordine` = `or_ordini`.`id` + LEFT JOIN (SELECT GROUP_CONCAT(DISTINCT 'DDT ', `dt_ddt`.`numero_esterno` SEPARATOR ', ') AS `info`, `dt_righe_ddt`.`original_document_id` AS `idddt` FROM `dt_ddt` INNER JOIN `dt_righe_ddt` ON `dt_ddt`.`id`=`dt_righe_ddt`.`idddt` WHERE `original_document_type`='Modules\\Ordini\\Ordine' GROUP BY original_document_id) AS `ddt` ON `ddt`.`idddt`=`or_ordini`.`id` + LEFT JOIN (SELECT COUNT(`id`) as emails, `em_emails`.`id_record` FROM `em_emails` INNER JOIN `zz_operations` ON `zz_operations`.`id_email` = `em_emails`.`id` WHERE `id_module` IN(SELECT `id` FROM `zz_modules` WHERE `name` = 'Ordini cliente') AND `zz_operations`.`op` = 'send-email' GROUP BY id_record) AS email ON `email`.`id_record` = `or_ordini`.`id` +WHERE + 1=1 |segment(`or_ordini`.`id_segment`)| AND `dir` = 'entrata' |date_period(`or_ordini`.`data`)| +HAVING + 2=2 +ORDER BY + `data` DESC, + CAST(`numero_esterno` AS UNSIGNED) DESC" WHERE `name` = 'Ordini cliente'; +UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`or_statiordine_lang`.`name`' WHERE `zz_modules`.`name` = 'Ordini cliente' AND `zz_views`.`name` = 'icon_title_Stato'; diff --git a/update/tables.php b/update/tables.php index 3f62133e2..73f1e5d2e 100755 --- a/update/tables.php +++ b/update/tables.php @@ -149,6 +149,7 @@ return [ 'or_ordini', 'or_righe_ordini', 'or_statiordine', + 'or_statiordine_lang', 'or_tipiordine', 'zz_api_resources', 'zz_cache',