feat: Aggiunta modulo Stati dei DDT
This commit is contained in:
parent
61a84dd8cf
commit
edcd062295
|
@ -76,6 +76,7 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
|
||||||
## 2.6 (2024--)
|
## 2.6 (2024--)
|
||||||
### Aggiunto (Added)
|
### Aggiunto (Added)
|
||||||
- Aggiunto il modulo Marchi
|
- Aggiunto il modulo Marchi
|
||||||
|
- Aggiunto il modulo Stati dei DDT
|
||||||
|
|
||||||
## 2.5.6 (2024-10-30)
|
## 2.5.6 (2024-10-30)
|
||||||
### Modificato (Changed)
|
### Modificato (Changed)
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
|
||||||
|
* Copyright (C) DevCode s.r.l.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
use Modules\DDT\Stato;
|
||||||
|
|
||||||
|
switch (post('op')) {
|
||||||
|
case 'update':
|
||||||
|
$descrizione = post('descrizione');
|
||||||
|
$stato_new = Stato::where('name', $descrizione)->first()->id;
|
||||||
|
|
||||||
|
if (!empty($stato_new) && $stato_new != $id_record) {
|
||||||
|
flash()->error(tr('Questo nome è già stato utilizzato per un altro stato DDT.'));
|
||||||
|
} else {
|
||||||
|
if (Models\Locale::getDefault()->id == Models\Locale::getPredefined()->id) {
|
||||||
|
$stato->name = $descrizione;
|
||||||
|
}
|
||||||
|
$stato->icona = post('icona');
|
||||||
|
$stato->colore = post('colore');
|
||||||
|
$stato->completato = post('completato');
|
||||||
|
$stato->is_fatturabile = post('is_fatturabile');
|
||||||
|
$stato->setTranslation('title', $descrizione);
|
||||||
|
$stato->save();
|
||||||
|
|
||||||
|
flash()->info(tr('Informazioni salvate correttamente.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'add':
|
||||||
|
$descrizione = post('descrizione');
|
||||||
|
$icona = post('icona');
|
||||||
|
$colore = post('colore');
|
||||||
|
$completato = post('completato_add');
|
||||||
|
$is_fatturabile = post('is_fatturabile_add');
|
||||||
|
|
||||||
|
$stato_new = Stato::where('name', $descrizione)->first();
|
||||||
|
|
||||||
|
if ($stato_new) {
|
||||||
|
flash()->error(tr('Questo nome è già stato utilizzato per un altro stato DDT.'));
|
||||||
|
} else {
|
||||||
|
$stato = Stato::build($icona, $colore, $completato, $is_fatturabile);
|
||||||
|
if (Models\Locale::getDefault()->id == Models\Locale::getPredefined()->id) {
|
||||||
|
$stato->name = $descrizione;
|
||||||
|
}
|
||||||
|
$id_record = $dbo->lastInsertedID();
|
||||||
|
$stato->setTranslation('title', $descrizione);
|
||||||
|
$stato->save();
|
||||||
|
flash()->info(tr('Nuovo stato DDT aggiunto.'));
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
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 `dt_statiddt` WHERE `id`='.prepare($id_record))) > 0) {
|
||||||
|
$query = 'UPDATE `dt_statiddt` SET `deleted_at` = NOW() WHERE `can_delete` = 1 AND `id`='.prepare($id_record);
|
||||||
|
} else {
|
||||||
|
$query = 'DELETE FROM `dt_statiddt` WHERE `can_delete` = 1 AND `id`='.prepare($id_record);
|
||||||
|
}
|
||||||
|
|
||||||
|
$dbo->query($query);
|
||||||
|
|
||||||
|
flash()->info(tr('Stato DDT eliminato.'));
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
|
@ -0,0 +1,68 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
|
||||||
|
* Copyright (C) DevCode s.r.l.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
?><form action="" method="post" id="add-form">
|
||||||
|
<input type="hidden" name="op" value="add">
|
||||||
|
<input type="hidden" name="backto" value="record-edit">
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-9">
|
||||||
|
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1 ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-3">
|
||||||
|
{[ "type": "text", "label": "<?php echo tr('Colore'); ?>", "name": "colore", "required": 1, "class": "colorpicker text-center", "value": "$colore$", "extra": "maxlength='7'", "icon-after": "<div class='img-circle square'></div>" ]}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-2">
|
||||||
|
{[ "type": "checkbox", "label": "<?php echo tr('Completato'); ?>", "name": "completato_add", "value": "$completato$", "help": "<?php echo tr('Gli ordini che si trovano in questo stato verranno considerati come completati'); ?>", "placeholder": "<?php echo tr('Completato'); ?>", "extra": "" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-2">
|
||||||
|
{[ "type": "checkbox", "label": "<?php echo tr('Impegnato'); ?>", "name": "impegnato_add", "value": "$impegnato$", "help": "<?php echo tr('Gli ordini che si trovano in questo stato verranno considerati come pianificabili'); ?>", "placeholder": "<?php echo tr('Impegnato'); ?>", "extra": "" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-2">
|
||||||
|
{[ "type": "checkbox", "label": "<?php echo tr('Fatturabile'); ?>", "name": "is_fatturabile_add", "value": "$is_fatturabile$", "help": "<?php echo tr('Gli ordini che si trovano in questo stato verranno considerati come fatturabili'); ?>", "placeholder": "<?php echo tr('Fatturabile'); ?>", "extra": "" ]}
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6">
|
||||||
|
{[ "type": "text", "label": "<?php echo tr('Icona'); ?>", "name": "icona", "required": 1, "class": "text-center", "value": "fa ", "extra": "" ]}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- PULSANTI -->
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12 text-right">
|
||||||
|
<button type="submit" class="btn btn-primary"><i class="fa fa-plus"></i> <?php echo tr('Aggiungi'); ?></button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.colorpicker').colorpicker({ format: 'hex' }).on('changeColor', function() {
|
||||||
|
$(this).parent().find('.square').css('background', $(this).val());
|
||||||
|
});
|
||||||
|
$('.colorpicker').parent().find('.square').css('background', $('.colorpicker').val());
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,94 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
|
||||||
|
* Copyright (C) DevCode s.r.l.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
if ($record['can_delete']) {
|
||||||
|
$attr = '';
|
||||||
|
} else {
|
||||||
|
$attr = 'readonly';
|
||||||
|
echo '<div class="alert alert-warning">'.tr('Alcune impostazioni non possono essere modificate per questo stato.').'</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
<form action="" method="post" id="edit-form">
|
||||||
|
<input type="hidden" name="op" value="update">
|
||||||
|
<input type="hidden" name="backto" value="record-edit">
|
||||||
|
<input type="hidden" name="id_record" value="<?php echo $id_record; ?>">
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-4">
|
||||||
|
{[ "type": "text", "label": "<?php echo tr('Descrizione'); ?>", "name": "descrizione", "required": 1, "value": "$title$", "extra": "<?php echo $attr; ?>" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-3">
|
||||||
|
{[ "type": "text", "label": "<?php echo tr('Icona'); ?>", "name": "icona", "required": 1, "class": "text-center", "value": "$icona$", "extra": "", "icon-after": "<?php echo (!empty($record['icona'])) ? '<i class=\"'.$record['icona'].'\"></i>' : ''; ?>" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-2">
|
||||||
|
{[ "type": "text", "label": "<?php echo tr('Colore'); ?>", "name": "colore", "required": 1, "class": "colorpicker text-center", "value": "$colore$", "extra": "maxlength='7'", "icon-after": "<div class='img-circle square'></div>" ]}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-md-3">
|
||||||
|
<div class="card card-primary">
|
||||||
|
<div class="card-header">
|
||||||
|
<h3 class="card-title"><?php echo tr('Flags'); ?></h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
{[ "type": "checkbox", "label": "<?php echo tr('Completato?'); ?>", "name": "completato", "value": "$completato$", "help": "<?php echo tr('Gli ordini che si trovano in questo stato verranno considerati come completati'); ?>", "placeholder": "<?php echo tr('Completato'); ?>", "extra": "" ]}
|
||||||
|
{[ "type": "checkbox", "label": "<?php echo tr('Impegnato?'); ?>", "name": "impegnato", "value": "$impegnato$", "help": "<?php echo tr('Gli ordini che si trovano in questo stato verranno considerati come impegnati'); ?>", "placeholder": "<?php echo tr('Impegnato'); ?>", "extra": "" ]}
|
||||||
|
{[ "type": "checkbox", "label": "<?php echo tr('Fatturabile?'); ?>", "name": "is_fatturabile", "value": "$is_fatturabile$", "help": "<?php echo tr('Gli ordini che si trovano in questo stato verranno considerati come fatturabili'); ?>", "placeholder": "<?php echo tr('Fatturabile'); ?>", "extra": "" ]}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
<?php
|
||||||
|
$ordini = $dbo->fetchNum('SELECT `id` FROM `or_ordini` WHERE `idstatoordine`='.prepare($id_record));
|
||||||
|
|
||||||
|
if (!empty($ordini)) {
|
||||||
|
echo '
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
'.tr('Ci sono _NUM_ ordini collegati', [
|
||||||
|
'_NUM_' => $ordini,
|
||||||
|
]).'.
|
||||||
|
</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!empty($record['can_delete'])) {
|
||||||
|
echo '
|
||||||
|
<a class="btn btn-danger ask" data-backto="record-list">
|
||||||
|
<i class="fa fa-trash"></i> '.tr('Elimina').'
|
||||||
|
</a>';
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('.colorpicker').colorpicker({ format: 'hex' }).on('changeColor', function() {
|
||||||
|
$(this).parent().find('.square').css('background', $(this).val());
|
||||||
|
});
|
||||||
|
$('.colorpicker').parent().find('.square').css('background', $('.colorpicker').val());
|
||||||
|
notifica();
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* OpenSTAManager: il software gestionale open source per l'assistenza tecnica e la fatturazione
|
||||||
|
* Copyright (C) DevCode s.r.l.
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
include_once __DIR__.'/../../core.php';
|
||||||
|
use Modules\DDT\Stato;
|
||||||
|
|
||||||
|
if (!empty($id_record)) {
|
||||||
|
$record = $dbo->fetchOne('SELECT * FROM `dt_statiddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt_lang`.`id_record`=`dt_statiddt`.`id` AND `dt_statiddt_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') WHERE `dt_statiddt`.`id`='.prepare($id_record));
|
||||||
|
|
||||||
|
$stato = Stato::find($id_record);
|
||||||
|
}
|
|
@ -21,3 +21,32 @@ INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
|
||||||
(1, (SELECT `id` FROM `zz_views` WHERE `name` = 'id' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi')), 'id'),
|
(1, (SELECT `id` FROM `zz_views` WHERE `name` = 'id' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi')), 'id'),
|
||||||
(1, (SELECT `id` FROM `zz_views` WHERE `name` = 'Nome' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi')), 'Nome'),
|
(1, (SELECT `id` FROM `zz_views` WHERE `name` = 'Nome' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi')), 'Nome'),
|
||||||
(1, (SELECT `id` FROM `zz_views` WHERE `name` = 'Link' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi')), 'Link');
|
(1, (SELECT `id` FROM `zz_views` WHERE `name` = 'Link' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Marchi')), 'Link');
|
||||||
|
|
||||||
|
-- Aggiunta modulo Stati dei DDT
|
||||||
|
ALTER TABLE `dt_statiddt` ADD `deleted_at` timestamp NULL DEFAULT NULL;
|
||||||
|
|
||||||
|
INSERT INTO `zz_modules` (`name`, `directory`, `options`, `options2`, `icon`, `version`, `compatibility`, `order`, `parent`, `default`, `enabled`, `use_notes`, `use_checklists`) VALUES ('Stati DDT', 'stati_ddt', 'SELECT |select| FROM `dt_statiddt` LEFT JOIN `dt_statiddt_lang` ON (`dt_statiddt`.`id` = `dt_statiddt_lang`.`id_record` AND `dt_statiddt_lang`.|lang|) WHERE 1=1 AND `deleted_at` IS NULL HAVING 2=2', '', 'fa fa-circle-o', '2.5.6', '2.5.6', '7', (SELECT `id` FROM `zz_modules` AS `t` WHERE `name` = 'Tabelle'), '1', '1', '1', '1');
|
||||||
|
|
||||||
|
INSERT INTO `zz_modules_lang` (`id_lang`, `id_record`, `title`) VALUES ('1', (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT'), 'Stati dei DDT');
|
||||||
|
|
||||||
|
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `html_format`, `search_inside`, `order_by`, `visible`, `summable`, `avg`, `default`) VALUES
|
||||||
|
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT'), 'Fatturabile', 'IF(is_fatturabile, \'Sì\', \'No\')', '6', '1', '0', '0', '0', NULL, NULL, '1', '0', '0', '0'),
|
||||||
|
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT'), 'Completato', 'IF(completato, \'Sì\', \'No\')', '5', '1', '0', '0', '0', NULL, NULL, '1', '0', '0', '0'),
|
||||||
|
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT'), 'Icona', 'icona', '3', '1', '0', '0', '0', NULL, NULL, '1', '0', '0', '0'),
|
||||||
|
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT'), 'Descrizione', '`dt_statiddt_lang`.`title`', '2', '1', '0', '0', '0', NULL, NULL, '1', '0', '0', '0'),
|
||||||
|
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT'), 'id', '`dt_statiddt`.`id`', '1', '0', '0', '0', '0', NULL, NULL, '0', '0', '0', '1'),
|
||||||
|
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT'), 'color_Colore', 'colore', '7', '0', '0', '1', '0', '', '', '1', '0', '0', '0');
|
||||||
|
|
||||||
|
INSERT INTO `zz_views_lang` (`id_lang`, `id_record`, `title`) VALUES
|
||||||
|
('2', (SELECT `id` FROM `zz_views` WHERE `name` = 'color_Colore' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT')), 'color_Color'),
|
||||||
|
('1', (SELECT `id` FROM `zz_views` WHERE `name` = 'color_Colore' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT')), 'color_Colore'),
|
||||||
|
('2', (SELECT `id` FROM `zz_views` WHERE `name` = 'id' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT')), 'id'),
|
||||||
|
('1', (SELECT `id` FROM `zz_views` WHERE `name` = 'id' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT')), 'id'),
|
||||||
|
('2', (SELECT `id` FROM `zz_views` WHERE `name` = 'Descrizione' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT')), 'Description'),
|
||||||
|
('1', (SELECT `id` FROM `zz_views` WHERE `name` = 'Descrizione' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT')), 'Descrizione'),
|
||||||
|
('2', (SELECT `id` FROM `zz_views` WHERE `name` = 'Icona' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT')), 'Icon'),
|
||||||
|
('1', (SELECT `id` FROM `zz_views` WHERE `name` = 'Icona' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT')), 'Icona'),
|
||||||
|
('2', (SELECT `id` FROM `zz_views` WHERE `name` = 'Completato' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT')), 'Completed'),
|
||||||
|
('1', (SELECT `id` FROM `zz_views` WHERE `name` = 'Completato' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT')), 'Completato'),
|
||||||
|
('2', (SELECT `id` FROM `zz_views` WHERE `name` = 'Fatturabile' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT')), 'Invoiceable'),
|
||||||
|
('1', (SELECT `id` FROM `zz_views` WHERE `name` = 'Fatturabile' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Stati DDT')), 'Fatturabile');
|
Loading…
Reference in New Issue