This commit is contained in:
MatteoPistorello 2023-09-15 14:25:07 +02:00
commit bdfec7c2eb
17 changed files with 164 additions and 25 deletions

View File

@ -55,7 +55,7 @@ switch (filter('op')) {
// Imposta un valore ad una sessione // Imposta un valore ad una sessione
case 'session_set': case 'session_set':
$array = explode(',', get('session')); $array = explode(',', get('session'));
$value = get('value'); $value = get('value', true);
$clear = get('clear'); $clear = get('clear');
if ($clear == 1 || $value == '') { if ($clear == 1 || $value == '') {

View File

@ -22,7 +22,7 @@ include_once __DIR__.'/core.php';
use Util\Query; use Util\Query;
// Informazioni fondamentali // Informazioni fondamentali
$columns = (array) filter('columns'); $columns = (array) filter('columns', null, true);
$order = filter('order') ? filter('order')[0] : []; $order = filter('order') ? filter('order')[0] : [];
$draw_numer = intval(filter('draw')); $draw_numer = intval(filter('draw'));

View File

@ -127,6 +127,17 @@ class Check extends Model
} }
*/ */
/**
* Rimuove tutte le check di un determinato modulo/plugin e record.
*
* @param array $data
*/
public static function deleteLinked($data)
{
database()->delete('zz_checks', $data);
}
/* Relazioni Eloquent */ /* Relazioni Eloquent */
public function user() public function user()

View File

@ -19,7 +19,7 @@
include_once __DIR__.'/../../../core.php'; include_once __DIR__.'/../../../core.php';
$rs = $dbo->fetchArray('SELECT *, $rs = $dbo->fetchArray('SELECT co_contratti.id, co_contratti.nome, co_contratti.data_accettazione,
((SELECT SUM(co_righe_contratti.qta) FROM co_righe_contratti WHERE co_righe_contratti.um=\'ore\' AND co_righe_contratti.idcontratto=co_contratti.id) - IFNULL( (SELECT SUM(in_interventi_tecnici.ore) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id_contratto=co_contratti.id AND in_interventi.idstatointervento IN (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.is_completato = 1)), 0) ) AS ore_rimanenti, ((SELECT SUM(co_righe_contratti.qta) FROM co_righe_contratti WHERE co_righe_contratti.um=\'ore\' AND co_righe_contratti.idcontratto=co_contratti.id) - IFNULL( (SELECT SUM(in_interventi_tecnici.ore) FROM in_interventi_tecnici INNER JOIN in_interventi ON in_interventi_tecnici.idintervento=in_interventi.id WHERE in_interventi.id_contratto=co_contratti.id AND in_interventi.idstatointervento IN (SELECT in_statiintervento.idstatointervento FROM in_statiintervento WHERE in_statiintervento.is_completato = 1)), 0) ) AS ore_rimanenti,
DATEDIFF(data_conclusione, NOW()) AS giorni_rimanenti, DATEDIFF(data_conclusione, NOW()) AS giorni_rimanenti,
data_conclusione, data_conclusione,
@ -31,7 +31,7 @@ WHERE
rinnovabile = 1 AND rinnovabile = 1 AND
YEAR(data_conclusione) > 1970 AND YEAR(data_conclusione) > 1970 AND
co_contratti.id NOT IN (SELECT idcontratto_prev FROM co_contratti contratti) AND co_contratti.id NOT IN (SELECT idcontratto_prev FROM co_contratti contratti) AND
co_staticontratti.descrizione != "Concluso" co_staticontratti.descrizione NOT IN ("Concluso", "Rifiutato", "Bozza")
HAVING (ore_rimanenti <= ore_preavviso_rinnovo OR DATEDIFF(data_conclusione, NOW()) <= ABS(giorni_preavviso_rinnovo)) HAVING (ore_rimanenti <= ore_preavviso_rinnovo OR DATEDIFF(data_conclusione, NOW()) <= ABS(giorni_preavviso_rinnovo))
ORDER BY giorni_rimanenti ASC, ore_rimanenti ASC'); ORDER BY giorni_rimanenti ASC, ore_rimanenti ASC');

View File

@ -176,6 +176,25 @@ class Mail extends Model
$this->attributes['content'] = $value; $this->attributes['content'] = $value;
} }
/**
* Rimuove tutte le mail di un determinato modulo/plugin e record.
*
* @param array $data
*/
public static function deleteLinked($data)
{
$templates = database()->table('em_templates')->where('id_module', $data['id_module'])->get();
$id_templates = [];
foreach($templates as $template) {
$id_templates[] = $template->id;
}
database()->table('em_emails')->where('id_record', $data['id_record'])->whereIn('id_template', $id_templates)->delete();
}
/* Relazioni Eloquent */ /* Relazioni Eloquent */
public function account() public function account()

View File

@ -346,12 +346,6 @@ switch ($op) {
// Azzeramento collegamento della rata contrattuale alla pianificazione // Azzeramento collegamento della rata contrattuale alla pianificazione
$dbo->query('UPDATE co_fatturazione_contratti SET iddocumento=0 WHERE iddocumento='.prepare($id_record)); $dbo->query('UPDATE co_fatturazione_contratti SET iddocumento=0 WHERE iddocumento='.prepare($id_record));
// Eliminazione allegati collegati
Uploads::deleteLinked([
'id_module' => $id_module,
'id_record' => $id_record,
]);
flash()->info(tr('Fattura eliminata!')); flash()->info(tr('Fattura eliminata!'));
} catch (InvalidArgumentException $e) { } catch (InvalidArgumentException $e) {
flash()->error(tr('Sono stati utilizzati alcuni serial number nel documento: impossibile procedere!')); flash()->error(tr('Sono stati utilizzati alcuni serial number nel documento: impossibile procedere!'));

View File

@ -97,6 +97,10 @@ class Bollo
$riga->id_iva = setting('Iva da applicare su marca da bollo'); $riga->id_iva = setting('Iva da applicare su marca da bollo');
$riga->idconto = setting('Conto predefinito per la marca da bollo'); $riga->idconto = setting('Conto predefinito per la marca da bollo');
if ((setting('Regime Fiscale') == 'RF19') && (!empty(setting('Cassa previdenziale predefinita')))) {
$riga['id_rivalsa_inps'] = setting('Cassa previdenziale predefinita');
}
$riga->save(); $riga->save();
return $riga->id; return $riga->id;

View File

@ -398,11 +398,6 @@ switch (post('op')) {
// Eliminazione associazione interventi e my_impianti // Eliminazione associazione interventi e my_impianti
$dbo->query('DELETE FROM my_impianti_interventi WHERE idintervento='.prepare($id_record)); $dbo->query('DELETE FROM my_impianti_interventi WHERE idintervento='.prepare($id_record));
// Elimino anche eventuali file caricati
Uploads::deleteLinked([
'id_module' => $id_module,
'id_record' => $id_record,
]);
flash()->info(tr('Intervento eliminato!')); flash()->info(tr('Intervento eliminato!'));
} catch (InvalidArgumentException $e) { } catch (InvalidArgumentException $e) {

View File

@ -289,11 +289,6 @@ switch (post('op')) {
// Eliminazione associazione interventi e my_impianti // Eliminazione associazione interventi e my_impianti
$dbo->query('DELETE FROM my_impianti_interventi WHERE idintervento='.prepare($id_record)); $dbo->query('DELETE FROM my_impianti_interventi WHERE idintervento='.prepare($id_record));
// Elimino anche eventuali file caricati
Uploads::deleteLinked([
'id_module' => $id_module,
'id_record' => $id_record,
]);
} catch (InvalidArgumentException $e) { } catch (InvalidArgumentException $e) {
} }
} }

View File

@ -0,0 +1,60 @@
<?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\Preventivi\Stato;
$id_module = Modules::get('Preventivi')['id'];
$rs = $dbo->fetchArray("SELECT *, (SELECT ragione_sociale FROM an_anagrafiche WHERE idanagrafica=co_preventivi.idanagrafica) AS ragione_sociale FROM co_preventivi WHERE idstato IN (SELECT id FROM co_statipreventivi WHERE is_fatturabile = 1) AND default_revision = 1 ORDER BY data_conclusione ASC");
if (!empty($rs)) {
echo "
<table class='table table-hover'>
<tr>
<th width='60%'>Preventivo</th>
<th width='15%'>Data inizio</th>
<th width='15%'>Data conclusione</th>
<th width='15%'>Stato</th>
</tr>";
foreach ($rs as $preventivo) {
$data_accettazione = ($preventivo['data_accettazione'] != '0000-00-00') ? Translator::dateToLocale($preventivo['data_accettazione']) : '';
$data_conclusione = ($preventivo['data_conclusione'] != '0000-00-00') ? Translator::dateToLocale($preventivo['data_conclusione']) : '';
$stato_preventivo = Stato::find($preventivo['idstato'])->descrizione;
if (strtotime($preventivo['data_conclusione']) < strtotime(date('Y-m-d')) && $data_conclusione != '') {
$attr = ' class="danger"';
} else {
$attr = '';
}
echo '<tr '.$attr.'><td><a href="'.base_path().'/editor.php?id_module='.$id_module.'&id_record='.$preventivo['id'].'">'.$preventivo['nome']."</a><br><small class='help-block'>".$preventivo['ragione_sociale'].'</small></td>';
echo '<td '.$attr.'>'.$data_accettazione.'</td>';
echo '<td '.$attr.'>'.$data_conclusione.'</td>';
echo '<td '.$attr.'>'.$stato_preventivo.'</td></tr>';
}
echo '
</table>';
} else {
echo '
<p>'.tr('Non ci sono preventivi da fatturare').'.</p>';
}

View File

@ -80,6 +80,7 @@
"assets-OSM": "yarn upgrade && yarn run build-OSM", "assets-OSM": "yarn upgrade && yarn run build-OSM",
"build-OSM": "gulp", "build-OSM": "gulp",
"dump-OSM": "php composer.phar dump-autoload", "dump-OSM": "php composer.phar dump-autoload",
"windows-fix": "yarn global add windows-build-tools" "windows-fix": "yarn global add windows-build-tools",
"php-cs-fix": "vendor/bin/php-cs-fixer fix"
} }
} }

View File

@ -128,7 +128,8 @@ class Checklists extends AppResource
zz_checks.note, zz_checks.note,
IF(zz_checks.id_parent IS NULL, 0, zz_checks.id_parent) AS id_parent, IF(zz_checks.id_parent IS NULL, 0, zz_checks.id_parent) AS id_parent,
zz_checks.checked_by, zz_checks.checked_by,
zz_checks.order AS ordine zz_checks.order AS ordine,
zz_checks.is_titolo
FROM zz_checks FROM zz_checks
WHERE zz_checks.id = '.prepare($id); WHERE zz_checks.id = '.prepare($id);

View File

@ -160,7 +160,7 @@ class Interventi extends AppResource
)'; )';
} }
if (setting('Mostra promemoria attività ai soli Tecnici assegnati') == 1) { if (setting('Visualizza solo promemoria assegnati') == 1) {
$records = database()->fetchArray($query, [ $records = database()->fetchArray($query, [
':period_start' => $start, ':period_start' => $start,
':period_end' => $end, ':period_end' => $end,

View File

@ -266,6 +266,40 @@ abstract class Document extends Model implements ReferenceInterface, DocumentInt
$riga->delete(); $riga->delete();
} }
// Elimino eventuali file caricati
\Uploads::deleteLinked([
'id_module' => $this->getModule()->id,
'id_record' => $this->id,
]);
// Elimino eventuali note
\Models\Note::deleteLinked([
'id_module' => $this->getModule()->id,
'id_record' => $this->id,
]);
// Elimino eventuali checklist
\Modules\Checklists\Check::deleteLinked([
'id_module' => $this->getModule()->id,
'id_record' => $this->id,
]);
// Elimino eventuali email
\Modules\Emails\Mail::deleteLinked([
'id_module' => $this->getModule()->id,
'id_record' => $this->id,
]);
// Elimino eventuali campi personalizzati
$fields = database()->table('zz_fields')->where('id_module', $this->getModule()->id)->get();
$id_fields = [];
foreach($fields as $field) {
$id_fields[] = $field->id;
}
database()->table('zz_field_record')->where('id_record', $this->id)->whereIn('id_field', $id_fields)->delete();
return parent::delete(); return parent::delete();
} }

View File

@ -60,6 +60,17 @@ class Note extends Model
return $model; return $model;
} }
/**
* Rimuove tutte le note di un determinato modulo/plugin e record.
*
* @param array $data
*/
public static function deleteLinked($data)
{
database()->delete('zz_notes', $data);
}
/* Relazioni Eloquent */ /* Relazioni Eloquent */
public function user() public function user()

View File

@ -64,7 +64,7 @@ echo "
<td style='width:45mm;'> <td style='width:45mm;'>
<table class='border-bottom'> <table class='border-bottom'>
<tr> <tr>
<td colspan='2'> <td colspan='3'>
<p class='small-bold'>".tr('Scadenze pagamenti', [], ['upper' => true]).'</p> <p class='small-bold'>".tr('Scadenze pagamenti', [], ['upper' => true]).'</p>
</td> </td>
</tr>'; </tr>';
@ -78,6 +78,9 @@ if (!empty($rs2)) {
<td style='width:50%;'> <td style='width:50%;'>
<small>".Translator::dateToLocale($rs2[$i]['scadenza'])."</small> <small>".Translator::dateToLocale($rs2[$i]['scadenza'])."</small>
</td> </td>
<td style='width:50%;' class='text-right'>
".(($rs2[$i]['pagato'] == $rs2[$i]['da_pagare']) ? "<small>PAGATO</small>" : "")."
</td>
<td style='width:50%;' class='text-right'> <td style='width:50%;' class='text-right'>
<small>".moneyFormat($rs2[$i]['da_pagare'], 2).'</small> <small>".moneyFormat($rs2[$i]['da_pagare'], 2).'</small>
</td> </td>

View File

@ -53,4 +53,15 @@ INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`,
UPDATE `zz_api_resources` SET `resource` = 'checklist-cleanup' WHERE `zz_api_resources`.`resource` = 'checklists-cleanup'; UPDATE `zz_api_resources` SET `resource` = 'checklist-cleanup' WHERE `zz_api_resources`.`resource` = 'checklists-cleanup';
UPDATE `zz_widgets` SET `query` = 'SELECT\n COUNT(dati.id) AS dato\nFROM\n (\n SELECT\n co_contratti.id,\n (\n (\n SELECT\n SUM(co_righe_contratti.qta)\n FROM\n co_righe_contratti\n WHERE\n co_righe_contratti.um = \'ore\' AND co_righe_contratti.idcontratto = co_contratti.id\n ) - IFNULL(\n (\n SELECT\n SUM(in_interventi_tecnici.ore)\n FROM\n in_interventi_tecnici\n INNER JOIN in_interventi ON in_interventi_tecnici.idintervento = in_interventi.id\n WHERE\n in_interventi.id_contratto = co_contratti.id AND in_interventi.idstatointervento IN(\n SELECT\n in_statiintervento.idstatointervento\n FROM\n in_statiintervento\n WHERE\n in_statiintervento.is_completato = 1\n )\n ),\n 0\n )\n ) AS ore_rimanenti,\n DATEDIFF(data_conclusione, NOW()) AS giorni_rimanenti,\n data_conclusione,\n ore_preavviso_rinnovo,\n giorni_preavviso_rinnovo,\n (\n SELECT\n ragione_sociale\n FROM\n an_anagrafiche\n WHERE\n idanagrafica = co_contratti.idanagrafica\n ) AS ragione_sociale\nFROM\n co_contratti\n INNER JOIN co_staticontratti ON co_staticontratti.id = co_contratti.idstato\nWHERE\n rinnovabile = 1 AND YEAR(data_conclusione) > 1970 AND co_contratti.id NOT IN(\n SELECT\n idcontratto_prev\n FROM\n co_contratti contratti\n) AND co_staticontratti.descrizione != \"Concluso\"\nHAVING\n (\n ore_rimanenti <= ore_preavviso_rinnovo OR DATEDIFF(data_conclusione, NOW()) <= ABS(giorni_preavviso_rinnovo))\n ORDER BY\n giorni_rimanenti ASC,\n ore_rimanenti ASC\n ) dati' WHERE `zz_widgets`.`name` = 'Contratti in scadenza'; UPDATE `zz_widgets` SET `query` = 'SELECT\n COUNT(dati.id) AS dato\nFROM\n (\n SELECT\n co_contratti.id,\n (\n (\n SELECT\n SUM(co_righe_contratti.qta)\n FROM\n co_righe_contratti\n WHERE\n co_righe_contratti.um = \'ore\' AND co_righe_contratti.idcontratto = co_contratti.id\n ) - IFNULL(\n (\n SELECT\n SUM(in_interventi_tecnici.ore)\n FROM\n in_interventi_tecnici\n INNER JOIN in_interventi ON in_interventi_tecnici.idintervento = in_interventi.id\n WHERE\n in_interventi.id_contratto = co_contratti.id AND in_interventi.idstatointervento IN(\n SELECT\n in_statiintervento.idstatointervento\n FROM\n in_statiintervento\n WHERE\n in_statiintervento.is_completato = 1\n )\n ),\n 0\n )\n ) AS ore_rimanenti,\n DATEDIFF(data_conclusione, NOW()) AS giorni_rimanenti,\n data_conclusione,\n ore_preavviso_rinnovo,\n giorni_preavviso_rinnovo,\n (\n SELECT\n ragione_sociale\n FROM\n an_anagrafiche\n WHERE\n idanagrafica = co_contratti.idanagrafica\n ) AS ragione_sociale\nFROM\n co_contratti\n INNER JOIN co_staticontratti ON co_staticontratti.id = co_contratti.idstato\nWHERE\n rinnovabile = 1 AND YEAR(data_conclusione) > 1970 AND co_contratti.id NOT IN(\n SELECT\n idcontratto_prev\n FROM\n co_contratti contratti\n) AND co_staticontratti.descrizione NOT IN (\"Concluso\", \"Rifiutato\", \"Bozza\")\nHAVING\n (\n ore_rimanenti <= ore_preavviso_rinnovo OR DATEDIFF(data_conclusione, NOW()) <= ABS(giorni_preavviso_rinnovo))\n ORDER BY\n giorni_rimanenti ASC,\n ore_rimanenti ASC\n ) dati' WHERE `zz_widgets`.`name` = 'Contratti in scadenza';
UPDATE `zz_settings` SET `tipo` = 'query=SELECT codice AS id, CONCAT(codice, \' - \', descrizione)as descrizione FROM fe_regime_fiscale;' WHERE `zz_settings`.`nome` = "Regime Fiscale";
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `default`, `visible`) VALUES
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Listini cliente'), 'Data scadenza', 'data_scadenza_predefinita', 3, 1, 0, 1, 1, 1);
UPDATE `zz_widgets` SET `text` = 'Listini disattivati' WHERE `zz_widgets`.`name` = 'Listini scaduti';
INSERT INTO `zz_widgets` (`id`, `name`, `type`, `id_module`, `location`, `class`, `query`, `bgcolor`, `icon`, `print_link`, `more_link`, `more_link_type`, `php_include`, `text`, `enabled`, `help`) VALUES (NULL, 'Preventivi da fatturare', 'stats', '1', 'controller_top', NULL, 'SELECT COUNT(id) AS dato FROM co_preventivi WHERE idstato IN (SELECT id FROM co_statipreventivi WHERE is_fatturabile=1) AND default_revision=1', '#44aae4', 'fa fa-file', '', './modules/preventivi/widgets/preventivi.fatturare.dashboard.php', 'popup', '', 'Preventivi da fatturare', 0, NULL);
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `slow`, `format`, `html_format`, `search_inside`, `order_by`, `visible`, `summable`, `default`) VALUES ((SELECT `id` FROM `zz_modules` WHERE `name` = 'Articoli'), '_bg_', 'IF(threshold_qta!=0, IF(mg_articoli.qta>threshold_qta, \'#CCFFCC\', \'#FFCCEB\'), \'\')', '14', '0', '0', '0', '0', '', '', '0', '0', '0');