diff --git a/include/common/importa.php b/include/common/importa.php
index 2ae3be282..be2fb605f 100755
--- a/include/common/importa.php
+++ b/include/common/importa.php
@@ -19,7 +19,7 @@
use Modules\Contratti\Stato as StatoContratto;
use Modules\Fatture\Stato as StatoFattura;
-use Modules\Fatture\Tipo;
+use Modules\DDT\Stato;
use Plugins\ListinoFornitori\DettaglioFornitore;
// Inizializzazione
@@ -139,11 +139,11 @@ if (!empty($options['create_document'])) {
// Opzioni aggiuntive per i DDT
elseif (in_array($final_module['name'], ['Ddt di vendita', 'Ddt di acquisto'])) {
- $stato_predefinito = $database->fetchOne("SELECT * FROM dt_statiddt WHERE descrizione = 'Bozza'");
+ $stato_predefinito = (new Stato())->getByName('Bozza')->id_record;
echo '
- {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * FROM dt_statiddt", "value": "'.$stato_predefinito['id'].'" ]}
+ {[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT * FROM `dt_statiddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang` = '.prepare(setting('Lingua')).')", "value": "'.$stato_predefinito.'" ]}
diff --git a/modules/ddt/actions.php b/modules/ddt/actions.php
index b9bf6b3d4..1cf192dec 100755
--- a/modules/ddt/actions.php
+++ b/modules/ddt/actions.php
@@ -123,7 +123,7 @@ switch (filter('op')) {
$ddt->save();
- $query = 'SELECT descrizione FROM dt_statiddt WHERE id='.prepare($idstatoddt);
+ $query = 'SELECT `name` FROM `dt_statiddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`idstatoddt` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `dt_statiddt`.`id`='.prepare($idstatoddt);
$rs = $dbo->fetchArray($query);
// Ricalcolo inps, ritenuta e bollo (se l'ddt non è stato evaso)
diff --git a/modules/ddt/add_ddt.php b/modules/ddt/add_ddt.php
index ccd0888b6..0b5edc943 100644
--- a/modules/ddt/add_ddt.php
+++ b/modules/ddt/add_ddt.php
@@ -48,7 +48,7 @@ $id_anagrafica = $documento_finale->idanagrafica;
echo '
- {[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_documento", "values": "query=SELECT dt_ddt.id, CONCAT(IF(numero_esterno != \'\', numero_esterno, numero), \' del \', DATE_FORMAT(data, \'%d-%m-%Y\')) AS descrizione FROM dt_ddt WHERE idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoddt=(SELECT id FROM dt_tipiddt WHERE dir=\''.($dir == 'entrata' ? 'uscita' : 'entrata').'\' LIMIT 0,1) AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0) ORDER BY data DESC, numero DESC" ]}
+ {[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_documento", "values": "query=SELECT `dt_ddt`.`id`, CONCAT(IF(`numero_esterno` != \'\', `numero_esterno`, `numero`), \' del \', DATE_FORMAT(`data`, \'%d-%m-%Y\')) AS descrizione FROM `dt_ddt` INNER JOIN `dt_statiddt` ON `ddt`.`idstato` = `dt_statiddt`.`id` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang` = '.prepare(setting('Lingua')).') INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` INNER JOIN `dt_righe_ddt` ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt` WHERE `dt_statiddt_lang`.`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 ORDER BY `data` DESC, `numero` DESC" ]}
diff --git a/modules/ddt/bulk.php b/modules/ddt/bulk.php
index 5fe62581f..44fecf4d0 100755
--- a/modules/ddt/bulk.php
+++ b/modules/ddt/bulk.php
@@ -211,7 +211,7 @@ $operations['cambia_stato'] = [
'data' => [
'title' => tr('Vuoi davvero cambiare lo stato per questi DDT?'),
'msg' => tr('Seleziona lo stato in cui spostare tutti i DDT').'.
-
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT id, descrizione, colore as _bgcolor_ FROM dt_statiddt" ]}',
+
{[ "type": "select", "label": "'.tr('Stato').'", "name": "id_stato", "required": 1, "values": "query=SELECT `dt_statiddt`.`id`, `dt_statiddt`.`name` as descrizione, `colore` as _bgcolor_ FROM dt_statiddt LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang` = '.prepare(setting('Lingua')).')" ]}',
'button' => tr('Procedi'),
'class' => 'btn btn-lg btn-warning',
'blank' => false,
diff --git a/modules/ddt/buttons.php b/modules/ddt/buttons.php
index 6ea8d4052..ce73fe9f1 100755
--- a/modules/ddt/buttons.php
+++ b/modules/ddt/buttons.php
@@ -64,7 +64,7 @@ function completaTrasporto() {
}
// Informazioni sull'importabilità del DDT
-$stati = $database->fetchArray('SELECT descrizione FROM `dt_statiddt` WHERE `is_fatturabile` = 1');
+$stati = $database->fetchArray('SELECT `name` as descrizione FROM `dt_statiddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang` ='.prepare(setting('Lingua')).') WHERE `is_fatturabile` = 1');
foreach ($stati as $stato) {
$stati_importabili[] = $stato['descrizione'];
}
diff --git a/modules/ddt/edit.php b/modules/ddt/edit.php
index ca465211d..96948d0b2 100755
--- a/modules/ddt/edit.php
+++ b/modules/ddt/edit.php
@@ -121,16 +121,16 @@ if ($righe_vuote) {
if (setting('Cambia automaticamente stato ddt fatturati')) {
if ($record['stato'] == 'Fatturato' || $record['stato'] == 'Parzialmente fatturato') {
?>
- {[ "type": "select", "label": "", "name": "idstatoddt", "required": 1, "values": "query=SELECT *, colore AS _bgcolor_ FROM dt_statiddt ORDER BY descrizione", "value": "$idstatoddt$", "extra": "readonly", "class": "unblockable" ]}
+ {[ "type": "select", "label": "", "name": "idstatoddt", "required": 1, "values": "query=SELECT *, `dt_statiddt_lang`.`name` as descrizione, `colore` AS _bgcolor_ FROM `dt_statiddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang`= ) ORDER BY `name`", "value": "$idstatoddt$", "extra": "readonly", "class": "unblockable" ]}
- {[ "type": "select", "label": "", "name": "idstatoddt", "required": 1, "values": "query=SELECT *, colore AS _bgcolor_ FROM dt_statiddt WHERE descrizione IN('Bozza', 'Evaso', 'Parzialmente evaso') ORDER BY descrizione", "value": "$idstatoddt$", "class": "unblockable" ]}
+ {[ "type": "select", "label": "", "name": "idstatoddt", "required": 1, "values": "query=SELECT *, `dt_statiddt_lang`.`name` as descrizione, `colore` AS _bgcolor_ FROM `dt_statiddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang`= ) WHERE `name` IN('Bozza', 'Evaso', 'Parzialmente evaso') ORDER BY `name`", "value": "$idstatoddt$", "class": "unblockable" ]}
- {[ "type": "select", "label": "", "name": "idstatoddt", "required": 1, "values": "query=SELECT *, colore AS _bgcolor_ FROM dt_statiddt ORDER BY descrizione", "value": "$idstatoddt$", "class": "unblockable" ]}
+ {[ "type": "select", "label": "", "name": "idstatoddt", "required": 1, "values": "query=SELECT *, `colore` AS _bgcolor_, `dt_statiddt_lang`.`name` as descrizione FROM `dt_statiddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang`= ) ORDER BY `name`", "value": "$idstatoddt$", "class": "unblockable" ]}
@@ -533,7 +533,7 @@ if (!$block_edit) {
$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)';
$tot_ordini = $dbo->fetchArray($ordini_query)[0]['tot'];
- $ddt_query = 'SELECT COUNT(*) AS tot FROM dt_ddt WHERE idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione IN(\'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND idtipoddt=(SELECT id FROM or_tipiordine WHERE dir="'.($dir == 'entrata' ? 'uscita' : 'entrata').'") AND dt_ddt.id IN (SELECT idddt FROM dt_righe_ddt WHERE dt_righe_ddt.idddt = dt_ddt.id AND (qta - qta_evasa) > 0)';
+ $ddt_query = 'SELECT COUNT(*) AS tot FROM `dt_ddt` INNER JOIN `dt_statiddt` ON `dt_ddt`.`idstatoddt` = `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` INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id` 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';
$tot_ddt = $dbo->fetchArray($ddt_query)[0]['tot'];
// Form di inserimento riga documento
diff --git a/modules/ddt/init.php b/modules/ddt/init.php
index 87ed497c7..1c01b2a16 100755
--- a/modules/ddt/init.php
+++ b/modules/ddt/init.php
@@ -33,17 +33,19 @@ if ($module['name'] == 'Ddt di vendita') {
if (isset($id_record)) {
$ddt = DDT::with('tipo', 'stato')->find($id_record);
- $record = $dbo->fetchOne('SELECT dt_ddt.*,
- dt_ddt.id AS idddt,
- dt_statiddt.descrizione AS `stato`,
- dt_statiddt.completato AS `flag_completato`,
- dt_tipiddt.descrizione AS `descrizione_tipodoc`,
- an_anagrafiche.tipo AS tipo_anagrafica
- FROM dt_ddt
- LEFT OUTER JOIN dt_statiddt ON dt_ddt.idstatoddt=dt_statiddt.id
- INNER JOIN an_anagrafiche ON dt_ddt.idanagrafica=an_anagrafiche.idanagrafica
- INNER JOIN dt_tipiddt ON dt_ddt.idtipoddt=dt_tipiddt.id
- WHERE dt_ddt.id='.prepare($id_record));
+ $record = $dbo->fetchOne('SELECT `dt_ddt`.*,
+ `dt_ddt`.`id` AS idddt,
+ `dt_statiddt_lang`.`name` AS `stato`,
+ `dt_statiddt`.`completato` AS `flag_completato`,
+ `dt_tipiddt`.`descrizione` AS `descrizione_tipodoc`,
+ `an_anagrafiche`.`tipo` AS tipo_anagrafica
+ FROM `dt_ddt`
+ INNER JOIN `dt_statiddt` ON dt_ddt.idstatoddt=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 `an_anagrafiche` ON `dt_ddt`.`idanagrafica`=`an_anagrafiche`.`idanagrafica`
+ INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt`=`dt_tipiddt`.`id`
+ WHERE
+ `dt_ddt`.`id`='.prepare($id_record));
if (!empty($record)) {
$record['idporto'] = $record['idporto'] ?: $dbo->fetchOne('SELECT `id` FROM `dt_porto` WHERE `predefined` = 1')['id'];
diff --git a/modules/ddt/src/DDT.php b/modules/ddt/src/DDT.php
index 8d6a8a6e0..8de3ee0d4 100755
--- a/modules/ddt/src/DDT.php
+++ b/modules/ddt/src/DDT.php
@@ -58,17 +58,13 @@ class DDT extends Document
public static function build(Anagrafica $anagrafica, Tipo $tipo_documento, $data, $id_segment = null)
{
$model = new static();
-
$user = \Auth::user();
- $stato_documento = Stato::where('descrizione', 'Bozza')->first();
+ $stato_documento = (new Stato())->getByName('Bozza')->id_record;
- $id_anagrafica = $anagrafica->id;
$direzione = $tipo_documento->dir;
$id_segment = $id_segment ?: getSegmentPredefined($model->getModule()->id);
- $database = database();
-
if ($direzione == 'entrata') {
$conto = 'vendite';
} else {
@@ -131,7 +127,7 @@ class DDT extends Document
public function isImportabile()
{
$database = database();
- $stati = $database->fetchArray('SELECT `descrizione` FROM `dt_statiddt` WHERE `is_fatturabile` = 1');
+ $stati = $database->fetchArray('SELECT `name` FROM `dt_statiddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang` = '.prepare(setting('Lingua')).') WHERE `is_fatturabile` = 1');
foreach ($stati as $stato) {
$stati_importabili[] = $stato['descrizione'];
}
diff --git a/modules/ddt/src/Stato.php b/modules/ddt/src/Stato.php
index 67a735329..4dd251ff2 100755
--- a/modules/ddt/src/Stato.php
+++ b/modules/ddt/src/Stato.php
@@ -32,4 +32,34 @@ class Stato extends Model
{
return $this->hasMany(DDT::class, 'idstatoddt');
}
+
+ /**
+ * Ritorna l'attributo name dello stato del ddt.
+ *
+ * @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 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/fatture/add_ddt.php b/modules/fatture/add_ddt.php
index caaaf66b3..607f5212c 100755
--- a/modules/fatture/add_ddt.php
+++ b/modules/fatture/add_ddt.php
@@ -50,7 +50,7 @@ $id_anagrafica = $documento_finale->idanagrafica;
echo '
- {[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_documento", "values": "query=SELECT `dt_ddt`.`id`, CONCAT(\'DDT num. \', IF(`numero_esterno` != \'\', `numero_esterno`, `numero`), \' del \', DATE_FORMAT(`data`, \'%d-%m-%Y\'), \' [\', (SELECT `descrizione` FROM `dt_statiddt` WHERE `id` = `idstatoddt`) , \']\') AS descrizione FROM `dt_ddt` LEFT JOIN `dt_causalet` ON `dt_causalet`.`id` = `dt_ddt`.`idcausalet` WHERE `idanagrafica`='.prepare($id_anagrafica).' AND `idstatoddt` IN (SELECT `id` FROM `dt_statiddt` WHERE `descrizione` IN(\'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND `idtipoddt`=(SELECT `id` FROM `dt_tipiddt` WHERE `dir`='.prepare($dir).') AND `dt_causalet`.`is_importabile` = 1 AND `dt_ddt`.`id` IN (SELECT `idddt` FROM `dt_righe_ddt` WHERE `dt_righe_ddt`.`idddt` = `dt_ddt`.`id` AND (`qta` - `qta_evasa`) > 0) ORDER BY `data` DESC, `numero` DESC" ]}
+ {[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_documento", "values": "query=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 descrizione FROM `dt_ddt` LEFT JOIN `dt_causalet` ON `dt_causalet`.`id` = `dt_ddt`.`idcausalet` INNER JOIN `dt_statiddt` ON `dt_ddt`.`idstato` = `dt_statiddt`.`id` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang` = '.prepare(setting('Lingua')).') INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` INNER JOIN `dt_righe_ddt ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt` WHERE `idanagrafica`='.prepare($id_anagrafica).' AND `dt_statiddt_lang`.`name` IN("Evaso", "Parzialmente evaso", "Parzialmente fatturato") AND `dt_tipiddt`.`dir`=\''.prepare($dir).'\' AND `dt_causalet`.`is_importabile` = 1 AND (`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0 ORDER BY `data` DESC, `numero` DESC" ]}
diff --git a/modules/fatture/ajax/select.php b/modules/fatture/ajax/select.php
index aa4cbbef8..15a53d95b 100644
--- a/modules/fatture/ajax/select.php
+++ b/modules/fatture/ajax/select.php
@@ -42,23 +42,28 @@ switch ($resource) {
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'), ' [', (SELECT descrizione FROM dt_statiddt WHERE id = idstatoddt) , ']') AS text,
+ $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
- WHERE idanagrafica = ".prepare($id_anagrafica)." AND
- idstatoddt IN (
- SELECT id FROM dt_statiddt WHERE descrizione != 'Fatturato'
- ) AND
- idtipoddt IN (
- SELECT id FROM dt_tipiddt WHERE 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';
+ 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, [
@@ -109,23 +114,28 @@ switch ($resource) {
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'), ' [', (SELECT descrizione FROM dt_statiddt WHERE id = idstatoddt) , ']') AS text,
+ $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
- WHERE idarticolo = ".prepare($id_articolo)." AND
- idstatoddt IN (
- SELECT id FROM dt_statiddt WHERE descrizione != 'Fatturato'
- ) AND
- idtipoddt IN (
- SELECT id FROM dt_tipiddt WHERE 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';
+ 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 61db2c9c1..dd1e27523 100755
--- a/modules/fatture/edit.php
+++ b/modules/fatture/edit.php
@@ -795,13 +795,14 @@ if (!$block_edit) {
COUNT(*) AS tot
FROM
`dt_ddt`
- LEFT JOIN `dt_causalet` ON `dt_causalet`.`id` = `dt_ddt`.`idcausalet`
- LEFT JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
+ INNER JOIN `dt_causalet` ON `dt_causalet`.`id` = `dt_ddt`.`idcausalet`
+ INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
+ LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang` = '.prepare(setting('Lingua')).')
LEFT JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt`
INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id`
WHERE
`idanagrafica`='.prepare($record['idanagrafica']).'
- AND `dt_statiddt`.`descrizione` IN (\'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')
+ AND `dt_statiddt_lang`.`name` IN ("Evaso", "Parzialmente evaso", "Parzialmente fatturato")
AND `dt_tipiddt`.`dir` = '.prepare($dir).'
AND `dt_causalet`.`is_importabile` = 1
AND (`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0';
diff --git a/modules/interventi/add_ddt.php b/modules/interventi/add_ddt.php
index 6d9be4209..d4defd50a 100644
--- a/modules/interventi/add_ddt.php
+++ b/modules/interventi/add_ddt.php
@@ -50,7 +50,7 @@ $id_anagrafica = $documento_finale->idanagrafica;
echo '
- {[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_documento", "values": "query=SELECT `dt_ddt`.`id`, CONCAT(\'DDT num. \', IF(`numero_esterno` != \'\', `numero_esterno`, `numero`), \' del \', DATE_FORMAT(`data`, \'%d-%m-%Y\'), \' [\', (SELECT `descrizione` FROM `dt_statiddt` WHERE `id` = `idstatoddt`) , \']\') AS descrizione FROM `dt_ddt` LEFT JOIN `dt_causalet` ON `dt_causalet`.`id` = `dt_ddt`.`idcausalet` WHERE `idanagrafica`='.prepare($id_anagrafica).' AND `idstatoddt` IN (SELECT `id` FROM `dt_statiddt` WHERE `descrizione` IN(\'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')) AND `idtipoddt`=(SELECT `id` FROM `dt_tipiddt` WHERE `dir`='.prepare($dir).') AND `dt_causalet`.`is_importabile` = 1 AND `dt_ddt`.`id` IN (SELECT `idddt` FROM `dt_righe_ddt` WHERE `dt_righe_ddt`.`idddt` = `dt_ddt`.`id` AND (`qta` - `qta_evasa`) > 0) ORDER BY `data` DESC, `numero` DESC" ]}
+ {[ "type": "select", "label": "'.tr('Ddt').'", "name": "id_documento", "values": "query=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 descrizione FROM `dt_ddt` LEFT JOIN `dt_causalet` ON `dt_causalet`.`id` = `dt_ddt`.`idcausalet` INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id`=`dt_ddt`.`idstatoddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.`id_lang` = '.prepare(setting('Lingua')).') INNER JOIN `dt_tipiddt` ON `dt_ddt`.`idtipoddt` = `dt_tipiddt`.`id` INNER JOIN `dt_righe_ddt` ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt` WHERE `idanagrafica`='.prepare($id_anagrafica).' AND `dt_statiddt_lang`.`name` IN("Evaso", "Parzialmente evaso", "Parzialmente fatturato") AND `dt_tipiddt`.`dir`=\''.prepare($dir).'\' AND `dt_causalet`.`is_importabile` = 1 AND (`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0 ORDER BY `data` DESC, `numero` DESC" ]}
diff --git a/modules/interventi/edit.php b/modules/interventi/edit.php
index 56afb188a..3b6344a38 100755
--- a/modules/interventi/edit.php
+++ b/modules/interventi/edit.php
@@ -504,19 +504,20 @@ if (!$block_edit) {
// Lettura ddt (entrata o uscita)
$ddt_query = 'SELECT
- COUNT(*) AS tot
- FROM
- `dt_ddt`
- LEFT JOIN `dt_causalet` ON `dt_causalet`.`id` = `dt_ddt`.`idcausalet`
- LEFT JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
- LEFT JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt`
- INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id`
- WHERE
- `idanagrafica`='.prepare($record['idanagrafica']).'
- AND `dt_statiddt`.`descrizione` IN (\'Evaso\', \'Parzialmente evaso\', \'Parzialmente fatturato\')
- AND `dt_tipiddt`.`dir` = '.prepare($intervento->direzione).'
- AND `dt_causalet`.`is_importabile` = 1
- AND (`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0';
+ COUNT(*) AS tot
+ FROM
+ `dt_ddt`
+ LEFT JOIN `dt_causalet` ON `dt_causalet`.`id` = `dt_ddt`.`idcausalet`
+ INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
+ LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = '.prepare(setting('Lingua')).')
+ LEFT JOIN `dt_tipiddt` ON `dt_tipiddt`.`id` = `dt_ddt`.`idtipoddt`
+ INNER JOIN `dt_righe_ddt` ON `dt_righe_ddt`.`idddt` = `dt_ddt`.`id`
+ WHERE
+ `idanagrafica`='.prepare($record['idanagrafica']).'
+ AND `dt_statiddt_lang`.`name` IN ("Evaso", "Parzialmente evaso", "Parzialmente fatturato")
+ AND `dt_tipiddt`.`dir` = '.prepare($intervento->direzione).'
+ AND `dt_causalet`.`is_importabile` = 1
+ AND (`dt_righe_ddt`.`qta` - `dt_righe_ddt`.`qta_evasa`) > 0';
$ddt = $dbo->fetchArray($ddt_query)[0]['tot'];
// Form di inserimento riga documento
diff --git a/plugins/importFE/actions.php b/plugins/importFE/actions.php
index 94bbca60a..d3431e454 100755
--- a/plugins/importFE/actions.php
+++ b/plugins/importFE/actions.php
@@ -454,25 +454,29 @@ switch (filter('op')) {
// Se nella fattura elettronica è indicato un DDT cerco quel documento specifico
$ddt = $dati_ddt[$numero_linea];
- $query = "SELECT dt_righe_ddt.id, dt_righe_ddt.idddt AS id_documento, dt_righe_ddt.is_descrizione, dt_righe_ddt.idarticolo, dt_righe_ddt.is_sconto, 'ddt' AS ref,
- CONCAT('DDT num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM dt_statiddt WHERE id = idstatoddt) , ']') AS opzione
- FROM dt_righe_ddt
- INNER JOIN dt_ddt ON dt_ddt.id = dt_righe_ddt.idddt
+ $query = "SELECT
+ `dt_righe_ddt`.`id`,
+ `dt_righe_ddt`.`idddt` AS id_documento,
+ `dt_righe_ddt`.`is_descrizione`,
+ `dt_righe_ddt`.`idarticolo`,
+ `dt_righe_ddt`.`is_sconto`, 'ddt' AS ref,
+ CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`name`, ']') AS opzione
+ FROM
+ `dt_righe_ddt`
+ INNER JOIN `dt_ddt` ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt`
+ INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
+ LEFT JOIN `dt_statiddt_lang` ON `dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = ".prepare(setting('Lingua'))."
WHERE
- dt_ddt.numero_esterno = ".prepare($ddt['numero']).'
- AND
- YEAR(dt_ddt.data) = '.prepare($ddt['anno']).'
- AND
- dt_ddt.idanagrafica = '.prepare($anagrafica->id).'
- AND
- dt_righe_ddt.qta > dt_righe_ddt.qta_evasa
- AND
+ `dt_ddt`.`numero_esterno` = ".prepare($ddt['numero']).' AND
+ YEAR(`dt_ddt`.`data`) = '.prepare($ddt['anno']).' AND
+ `dt_ddt`.`idanagrafica` = '.prepare($anagrafica->id).' AND
+ `dt_righe_ddt`.`qta` > `dt_righe_ddt`.`qta_evasa` AND
|where|';
// Ricerca di righe DDT con stesso Articolo
if (!empty($id_articolo)) {
$query_articolo = replace($query, [
- '|where|' => 'dt_righe_ddt.idarticolo = '.prepare($id_articolo),
+ '|where|' => '`dt_righe_ddt`.`idarticolo` = '.prepare($id_articolo),
]);
$collegamento = $database->fetchOne($query_articolo);
@@ -481,7 +485,7 @@ switch (filter('op')) {
// Ricerca di righe DDT per stessa descrizione
if (empty($collegamento)) {
$query_descrizione = replace($query, [
- '|where|' => 'dt_righe_ddt.descrizione = '.prepare($riga['Descrizione']),
+ '|where|' => '`dt_righe_ddt`.`descrizione` = '.prepare($riga['Descrizione']),
]);
$collegamento = $database->fetchOne($query_descrizione);
@@ -532,23 +536,50 @@ switch (filter('op')) {
// Se non ci sono Ordini o DDT cerco per contenuto
if (empty($collegamento)) {
$match_documento_da_fe = false;
- $query = "SELECT dt_righe_ddt.id, dt_righe_ddt.idddt AS id_documento, dt_righe_ddt.is_descrizione, dt_righe_ddt.idarticolo, dt_righe_ddt.is_sconto, 'ddt' AS ref,
- CONCAT('DDT num. ', IF(numero_esterno != '', numero_esterno, numero), ' del ', DATE_FORMAT(data, '%d/%m/%Y'), ' [', (SELECT descrizione FROM dt_statiddt WHERE id = idstatoddt) , ']') AS opzione
- FROM dt_righe_ddt
- INNER JOIN dt_ddt ON dt_ddt.id = dt_righe_ddt.idddt
- WHERE dt_ddt.idanagrafica = ".prepare($anagrafica->id)." AND |where_ddt| AND dt_righe_ddt.qta > dt_righe_ddt.qta_evasa AND dt_ddt.idstatoddt IN (SELECT id FROM dt_statiddt WHERE descrizione != 'Fatturato') AND idtipoddt IN (SELECT id FROM dt_tipiddt WHERE dir='uscita')
-
- UNION 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
- 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')";
+ $query = "SELECT
+ `dt_righe_ddt`.`id`,
+ `dt_righe_ddt`.`idddt` AS id_documento,
+ `dt_righe_ddt`.`is_descrizione`,
+ `dt_righe_ddt`.`idarticolo`,
+ `dt_righe_ddt`.`is_sconto`,
+ 'ddt' AS ref,
+ CONCAT('DDT num. ', IF(`numero_esterno` != '', `numero_esterno`, `numero`), ' del ', DATE_FORMAT(`data`, '%d/%m/%Y'), ' [', `dt_statiddt_lang`.`name`, ']') AS opzione
+ FROM
+ `dt_righe_ddt`
+ INNER JOIN `dt_ddt` ON `dt_ddt`.`id` = `dt_righe_ddt`.`idddt`
+ INNER JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
+ 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
+ `dt_ddt`.`idanagrafica` = ".prepare($anagrafica->id)." AND
+ |where_ddt| AND
+ `dt_righe_ddt`.`qta` > `dt_righe_ddt`.`qta_evasa` AND
+ `dt_statiddt_lang`.`name` != 'Fatturato' AND
+ `dt_tipiddt`.`dir` = 'uscita'
+ UNION
+ 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_stati`ordine WHERE `id` = `idstatoordine`) , ']') AS opzione
+ FROM
+ `or_righe_ordini`
+ INNER JOIN `or_ordini` ON `or_ordini`.`id` = `or_righe_ordini`.`idordine`
+ 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')";
// Ricerca di righe DDT/Ordine con stesso Articolo
if (!empty($id_articolo)) {
$query_articolo = replace($query, [
- '|where_ddt|' => 'dt_righe_ddt.idarticolo = '.prepare($id_articolo),
- '|where_ordini|' => 'or_righe_ordini.idarticolo = '.prepare($id_articolo),
+ '|where_ddt|' => '`dt_righe_ddt`.`idarticolo` = '.prepare($id_articolo),
+ '|where_ordini|' => '`or_righe_ordini`.`idarticolo` = '.prepare($id_articolo),
]);
$collegamento = $database->fetchOne($query_articolo);
@@ -557,8 +588,8 @@ switch (filter('op')) {
// Ricerca di righe DDT/Ordine per stessa descrizione
if (empty($collegamento)) {
$query_descrizione = replace($query, [
- '|where_ddt|' => 'dt_righe_ddt.descrizione = '.prepare($riga['Descrizione']),
- '|where_ordini|' => 'or_righe_ordini.descrizione = '.prepare($riga['Descrizione']),
+ '|where_ddt|' => '`dt_righe_ddt`.`descrizione` = '.prepare($riga['Descrizione']),
+ '|where_ordini|' => '`or_righe_ordini`.`descrizione` = '.prepare($riga['Descrizione']),
]);
$collegamento = $database->fetchOne($query_descrizione);
@@ -567,8 +598,8 @@ switch (filter('op')) {
// Ricerca di righe DDT/Ordine per stesso importo
if (empty($collegamento)) {
$query_descrizione = replace($query, [
- '|where_ddt|' => 'dt_righe_ddt.prezzo_unitario = '.prepare($riga['PrezzoUnitario']),
- '|where_ordini|' => 'or_righe_ordini.prezzo_unitario = '.prepare($riga['PrezzoUnitario']),
+ '|where_ddt|' => '`dt_righe_ddt`.`prezzo_unitario` = '.prepare($riga['PrezzoUnitario']),
+ '|where_ordini|' => '`or_righe_ordini`.`prezzo_unitario` = '.prepare($riga['PrezzoUnitario']),
]);
$collegamento = $database->fetchOne($query_descrizione);
diff --git a/update/2_4_55.sql b/update/2_4_55.sql
index c46dfa718..aba6ec16a 100644
--- a/update/2_4_55.sql
+++ b/update/2_4_55.sql
@@ -949,6 +949,32 @@ HAVING
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`dt_spedizione_lang`.`name`' WHERE `zz_modules`.`name` = 'Tipi di spedizione' AND `zz_views`.`name` = 'Descrizione';
UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`dt_spedizione`.`id`' WHERE `zz_modules`.`name` = 'Tipi di spedizione' AND `zz_views`.`name` = 'id';
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`dt_spedizione_lang`.`name`' WHERE `zz_modules`.`name` = 'Ddt di vendita' AND `zz_views`.`name` = 'Tipo spedizione';
+
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`dt_spedizione_lang`.`name`' WHERE `zz_modules`.`name` = 'Ddt di acquisto' AND `zz_views`.`name` = 'Tipo spedizione';
+
+-- Aggiunta tabella dt_statiddt_lang
+CREATE TABLE IF NOT EXISTS `dt_statiddt_lang` (
+ `id` int NOT NULL,
+ `id_lang` int NOT NULL,
+ `id_record` int NOT NULL,
+ `name` VARCHAR(255) NOT NULL
+);
+ALTER TABLE `dt_statiddt_lang`
+ ADD PRIMARY KEY (`id`);
+
+ALTER TABLE `dt_statiddt_lang`
+ MODIFY `id` int NOT NULL AUTO_INCREMENT;
+
+INSERT INTO `dt_statiddt_lang` (`id`, `id_lang`, `id_record`, `name`) SELECT NULL, (SELECT `id` FROM `zz_langs` WHERE `iso_code` = 'it'), `id`, `descrizione` FROM `dt_statiddt`;
+
+ALTER TABLE `dt_statiddt`
+ DROP `descrizione`;
+
+ALTER TABLE `dt_statiddt` CHANGE `id` `id` INT NOT NULL AUTO_INCREMENT;
+
+ALTER TABLE `dt_statiddt_lang` ADD CONSTRAINT `dt_statiddt_lang_ibfk_1` FOREIGN KEY (`id_record`) REFERENCES `dt_statiddt`(`id`) ON DELETE CASCADE ON UPDATE RESTRICT;
+
-- Allineamento vista Ddt di vendita
UPDATE `zz_modules` SET `options` = "
SELECT
@@ -965,7 +991,8 @@ FROM
LEFT JOIN `an_sedi` AS sedi ON `dt_ddt`.`idsede_partenza` = sedi.`id`
LEFT JOIN `an_sedi` AS `sedi_destinazione`ON `dt_ddt`.`idsede_destinazione` = `sedi_destinazione`.`id`
LEFT JOIN (SELECT `idddt`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM(`subtotale` - `sconto` + `iva`) AS `totale` FROM `dt_righe_ddt` GROUP BY `idddt`) AS righe ON `dt_ddt`.`id` = `righe`.`idddt`
- LEFT JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
+ LEFT JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
+ LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.|lang|)
LEFT JOIN (SELECT GROUP_CONCAT(DISTINCT 'Fattura ',`co_documenti`.`numero_esterno` SEPARATOR ', ') AS `info`, `co_righe_documenti`.`original_document_id` AS `idddt` FROM `co_documenti` INNER JOIN `co_righe_documenti` ON `co_documenti`.`id` = `co_righe_documenti`.`iddocumento` WHERE `original_document_type`='Modules\\DDT\\DDT' GROUP BY `original_document_id`) AS `fattura` ON `fattura`.`idddt` = `dt_ddt`.`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 = 'Ddt di vendita') AND `zz_operations`.`op` = 'send-email' GROUP BY id_record) AS `email` ON `email`.`id_record` = `dt_ddt`.`id`
WHERE
@@ -976,7 +1003,7 @@ ORDER BY
`data` DESC,
CAST(`numero_esterno` AS UNSIGNED) DESC,
`dt_ddt`.`created_at` DESC" WHERE `name` = 'Ddt di vendita';
-UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`dt_spedizione_lang`.`name`' WHERE `zz_modules`.`name` = 'Ddt di vendita' AND `zz_views`.`name` = 'Tipo spedizione';
+UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`dt_statiddt_lang`.`name`' WHERE `zz_modules`.`name` = 'Ddt di vendita' AND `zz_views`.`name` = 'icon_title_Stato';
-- Allineamento vista Ddt di acquisto
UPDATE `zz_modules` SET `options` = "
@@ -994,7 +1021,8 @@ FROM
LEFT JOIN `an_sedi` AS sedi ON `dt_ddt`.`idsede_partenza` = sedi.`id`
LEFT JOIN `an_sedi` AS `sedi_destinazione`ON `dt_ddt`.`idsede_destinazione` = `sedi_destinazione`.`id`
LEFT JOIN(SELECT `idddt`, SUM(`subtotale` - `sconto`) AS `totale_imponibile`, SUM(`subtotale` - `sconto` + `iva`) AS `totale` FROM `dt_righe_ddt` GROUP BY `idddt`) AS righe ON `dt_ddt`.`id` = `righe`.`idddt`
- LEFT JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
+ LEFT JOIN `dt_statiddt` ON `dt_statiddt`.`id` = `dt_ddt`.`idstatoddt`
+ LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record` = `dt_statiddt`.`id` AND `dt_statiddt_lang`.|lang|)
LEFT JOIN (SELECT GROUP_CONCAT(DISTINCT 'Fattura ',`co_documenti`.`numero` SEPARATOR ', ') AS `info`, `co_righe_documenti`.`original_document_id` AS `idddt` FROM `co_documenti` INNER JOIN `co_righe_documenti` ON `co_documenti`.`id` = `co_righe_documenti`.`iddocumento` WHERE `original_document_type`='Modules\\DDT\\DDT' GROUP BY `original_document_id`) AS `fattura` ON `fattura`.`idddt` = `dt_ddt`.`id`
WHERE
1=1 |segment(`dt_ddt`.`id_segment`)| AND `dir` = 'uscita' |date_period(`data`)|
@@ -1004,4 +1032,4 @@ ORDER BY
`data` DESC,
CAST(`numero_esterno` AS UNSIGNED) DESC,
`dt_ddt`.`created_at` DESC" WHERE `name` = 'Ddt di acquisto';
-UPDATE `zz_views` INNER JOIN `zz_modules` ON `zz_views`.`id_module` = `zz_modules`.`id` SET `zz_views`.`query` = '`dt_spedizione_lang`.`name`' WHERE `zz_modules`.`name` = 'Ddt di acquisto' AND `zz_views`.`name` = 'Tipo spedizione';
\ 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` = '`dt_statiddt_lang`.`name`' WHERE `zz_modules`.`name` = 'Ddt di acquisto' AND `zz_views`.`name` = 'icon_title_Stato';
\ No newline at end of file
diff --git a/update/tables.php b/update/tables.php
index 9c7c83c29..b06a510d2 100755
--- a/update/tables.php
+++ b/update/tables.php
@@ -73,6 +73,7 @@ return [
'dt_spedizione',
'dt_spedizione_lang',
'dt_statiddt',
+ 'dt_statiddt_lang',
'dt_tipiddt',
'em_print_template',
'em_accounts',