feat: Aggiunta modulo Stati dei DDT

This commit is contained in:
Beppe 2024-10-23 17:21:23 +02:00
parent 61a84dd8cf
commit edcd062295
6 changed files with 303 additions and 0 deletions

View File

@ -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)

View File

@ -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;
}

68
modules/stati_ddt/add.php Normal file
View File

@ -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>

View File

@ -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>

View File

@ -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);
}

View File

@ -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&igrave;\', \'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&igrave;\', \'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');