From d35654b73c8c5c0763fb5aca898f39c01c016dc8 Mon Sep 17 00:00:00 2001 From: Dasc3er Date: Fri, 17 Sep 2021 09:42:52 +0200 Subject: [PATCH] Introduzione gruppi scadenze --- editor.php | 2 + modules/fatture/actions.php | 10 ++-- modules/fatture/buttons.php | 2 +- modules/fatture/src/Fattura.php | 9 ++- modules/fatture/src/Gestori/Scadenze.php | 7 ++- modules/primanota/add.php | 6 +- modules/primanota/src/Mastrino.php | 2 +- modules/scadenzario/actions.php | 22 ++++--- modules/scadenzario/controller_after.php | 2 +- modules/scadenzario/edit.php | 4 +- modules/scadenzario/init.php | 13 ++-- modules/scadenzario/src/Gruppo.php | 66 +++++++++++++++++++++ modules/scadenzario/src/Scadenza.php | 30 ++++++++-- modules/scadenzario/variables.php | 10 ++-- modules/tipi_scadenze/actions.php | 7 +-- modules/tipi_scadenze/edit.php | 2 +- plugins/exportFE/src/FatturaElettronica.php | 4 +- templates/fatture/footer.php | 2 +- templates/scadenzario/init.php | 2 +- update/2_4_26.sql | 2 +- update/scadenze.sql | 66 +++++++++++++++++++++ update/tables.php | 3 +- 22 files changed, 221 insertions(+), 52 deletions(-) create mode 100644 modules/scadenzario/src/Gruppo.php create mode 100644 update/scadenze.sql diff --git a/editor.php b/editor.php index 749517636..16175e53d 100755 --- a/editor.php +++ b/editor.php @@ -56,6 +56,8 @@ if (preg_match('/[`]*([a-z0-9_]*)[`]*[\.]*([`]*deleted_at[`]* IS NULL)/i', $quer $query = str_replace($condition, '', $query); } +$query = null; + $has_access = !empty($query) ? $dbo->fetchNum($query) !== 0 : true; if ($has_access) { diff --git a/modules/fatture/actions.php b/modules/fatture/actions.php index 85ff4dcf6..2856b0a31 100755 --- a/modules/fatture/actions.php +++ b/modules/fatture/actions.php @@ -280,10 +280,10 @@ switch (post('op')) { ->select('*', 'co_documenti.id AS id', 'co_documenti.data AS data') ->where('idanagrafica', $id_anagrafica) ->whereIn('idstatodocumento', [$stato1->id, $stato2->id]) - ->join('co_scadenziario', 'co_documenti.id', '=', 'co_scadenziario.iddocumento') - ->where('co_scadenziario.da_pagare', '>', 'co_scadenziario.pagato') - ->whereRaw('co_scadenziario.scadenza < NOW()') - ->groupBy('co_scadenziario.iddocumento') + ->join('co_scadenze', 'co_documenti.id', '=', 'co_scadenze.iddocumento') + ->where('co_scadenze.da_pagare', '>', 'co_scadenze.pagato') + ->whereRaw('co_scadenze.scadenza < NOW()') + ->groupBy('co_scadenze.iddocumento') ->get(); $results = []; @@ -300,7 +300,7 @@ switch (post('op')) { try { $fattura->delete(); - $dbo->query('DELETE FROM co_scadenziario WHERE iddocumento='.prepare($id_record)); + $dbo->query('DELETE FROM co_scadenze WHERE iddocumento='.prepare($id_record)); $dbo->query('DELETE FROM co_movimenti WHERE iddocumento='.prepare($id_record)); // Azzeramento collegamento della rata contrattuale alla pianificazione diff --git a/modules/fatture/buttons.php b/modules/fatture/buttons.php index 27c96d01c..398225454 100755 --- a/modules/fatture/buttons.php +++ b/modules/fatture/buttons.php @@ -64,7 +64,7 @@ if (empty($record['is_fiscale'])) { } $modulo_prima_nota = Modules::get('Prima nota'); -$totale_scadenze = $dbo->fetchOne('SELECT SUM(da_pagare - pagato) AS differenza, SUM(da_pagare) AS da_pagare FROM co_scadenziario WHERE iddocumento = '.prepare($id_record)); +$totale_scadenze = $dbo->fetchOne('SELECT SUM(da_pagare - pagato) AS differenza, SUM(da_pagare) AS da_pagare FROM co_scadenze WHERE iddocumento = '.prepare($id_record)); if (!empty($record['is_fiscale'])) { // Aggiunta insoluto $registrazione_insoluto = 0; diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index 5ddb9c5fd..b09f72e0d 100755 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -34,6 +34,7 @@ use Modules\Fatture\Gestori\Scadenze as GestoreScadenze; use Modules\Pagamenti\Pagamento; use Modules\PrimaNota\Movimento; use Modules\RitenuteContributi\RitenutaContributi; +use Modules\Scadenzario\Gruppo; use Modules\Scadenzario\Scadenza; use Plugins\DichiarazioniIntento\Dichiarazione; use Plugins\ExportFE\FatturaElettronica; @@ -440,9 +441,15 @@ class Fattura extends Document return $this->hasOne(Components\Riga::class, 'iddocumento')->where('id', $this->id_riga_bollo); } + public function gruppoScadenze() + { + return $this->hasOne(Gruppo::class, 'id_documento'); + } + public function scadenze() { - return $this->hasMany(Scadenza::class, 'iddocumento')->orderBy('scadenza'); + return $this->gruppoScadenze->scadenze() + ->orderBy('scadenza'); } public function movimentiContabili() diff --git a/modules/fatture/src/Gestori/Scadenze.php b/modules/fatture/src/Gestori/Scadenze.php index 2846263cd..1317b0692 100644 --- a/modules/fatture/src/Gestori/Scadenze.php +++ b/modules/fatture/src/Gestori/Scadenze.php @@ -86,7 +86,7 @@ class Scadenze */ public function rimuovi() { - database()->delete('co_scadenziario', ['iddocumento' => $this->fattura->id]); + database()->delete('co_scadenze', ['iddocumento' => $this->fattura->id]); } /** @@ -102,9 +102,10 @@ class Scadenze $numero = $fattura->numero_esterno ?: $fattura->numero; $descrizione = $fattura->tipo->descrizione.' numero '.$numero; - $scadenza = Scadenza::build($descrizione, $importo, $data_scadenza, $type, $is_pagato); + // TODO $descrizione Gruppo + $scadenza = Scadenza::build($importo, $data_scadenza, $type, $is_pagato); - $scadenza->documento()->associate($fattura); + $scadenza->fattura()->associate($fattura); $scadenza->data_emissione = $fattura->data; $scadenza->save(); diff --git a/modules/primanota/add.php b/modules/primanota/add.php index 9948a3aeb..907e4307e 100755 --- a/modules/primanota/add.php +++ b/modules/primanota/add.php @@ -67,7 +67,7 @@ $permetti_modelli = (count($id_documenti) + count($id_scadenze)) <= 1; // Scadenze foreach ($id_scadenze as $id_scadenza) { - $scadenza = $database->fetchOne('SELECT *, SUM(da_pagare - pagato) AS rata FROM co_scadenziario WHERE id='.prepare($id_scadenza)); + $scadenza = $database->fetchOne('SELECT *, SUM(da_pagare - pagato) AS rata FROM co_scadenze WHERE id='.prepare($id_scadenza)); if (!empty($scadenza['iddocumento'])) { $id_documenti[] = $scadenza['iddocumento']; continue; @@ -148,9 +148,9 @@ foreach ($id_documenti as $id_documento) { // Se sto registrando un insoluto, leggo l'ultima scadenza pagata altrimenti leggo la scadenza della fattura if ($is_insoluto) { - $scadenze = $database->fetchArray('SELECT id, ABS(da_pagare) AS rata, iddocumento FROM co_scadenziario WHERE iddocumento='.prepare($id_documento).' AND ABS(da_pagare) = ABS(pagato) ORDER BY updated_at DESC LIMIT 0, 1'); + $scadenze = $database->fetchArray('SELECT id, ABS(da_pagare) AS rata, iddocumento FROM co_scadenze WHERE iddocumento='.prepare($id_documento).' AND ABS(da_pagare) = ABS(pagato) ORDER BY updated_at DESC LIMIT 0, 1'); } else { - $scadenze = $database->fetchArray('SELECT id, ABS(da_pagare - pagato) AS rata, iddocumento FROM co_scadenziario WHERE iddocumento='.prepare($id_documento).' AND ABS(da_pagare) > ABS(pagato)'.(!empty($id_scadenze) ? 'AND id IN('.implode(',', $id_scadenze).')' : '').' ORDER BY YEAR(scadenza) ASC, MONTH(scadenza) ASC'); + $scadenze = $database->fetchArray('SELECT id, ABS(da_pagare - pagato) AS rata, iddocumento FROM co_scadenze WHERE iddocumento='.prepare($id_documento).' AND ABS(da_pagare) > ABS(pagato)'.(!empty($id_scadenze) ? 'AND id IN('.implode(',', $id_scadenze).')' : '').' ORDER BY YEAR(scadenza) ASC, MONTH(scadenza) ASC'); } // Selezione prima scadenza diff --git a/modules/primanota/src/Mastrino.php b/modules/primanota/src/Mastrino.php index 6cb2ce126..bdf49d628 100755 --- a/modules/primanota/src/Mastrino.php +++ b/modules/primanota/src/Mastrino.php @@ -143,7 +143,7 @@ class Mastrino extends Model $database = database(); foreach ($documenti as $id_documento) { // Verifico se la fattura è stata pagata tutta, così imposto lo stato a "Pagato" - $totali = $database->fetchOne('SELECT SUM(pagato) AS tot_pagato, SUM(da_pagare) AS tot_da_pagare FROM co_scadenziario WHERE iddocumento='.prepare($id_documento)); + $totali = $database->fetchOne('SELECT SUM(pagato) AS tot_pagato, SUM(da_pagare) AS tot_da_pagare FROM co_scadenze WHERE iddocumento='.prepare($id_documento)); $totale_pagato = abs(floatval($totali['tot_pagato'])); $totale_da_pagare = abs(floatval($totali['tot_da_pagare'])); diff --git a/modules/scadenzario/actions.php b/modules/scadenzario/actions.php index 51af767aa..7d33d4f52 100755 --- a/modules/scadenzario/actions.php +++ b/modules/scadenzario/actions.php @@ -17,17 +17,24 @@ * along with this program. If not, see . */ +use Modules\Scadenzario\Gruppo; +use Modules\Scadenzario\Scadenza; + include_once __DIR__.'/../../core.php'; switch (post('op')) { case 'add': + // Creazione nuovo Gruppo Scadenze + $descrizione = post('descrizione'); + $gruppo = Gruppo::build($descrizione); + + // Creazione Scadenza associata al gruppo $data = post('data'); $tipo = post('tipo'); $da_pagare = post('da_pagare'); - $descrizione = post('descrizione'); + $scadenza = Scadenza::build($gruppo, $da_pagare, $data, $tipo); - $dbo->query('INSERT INTO co_scadenziario(descrizione, tipo, data_emissione, scadenza, da_pagare, pagato) VALUES('.prepare($descrizione).', '.prepare($tipo).', CURDATE(), '.prepare($data).', '.prepare($da_pagare).", '0')"); - $id_record = $dbo->lastInsertedID(); + $id_record = $scadenza->id; flash()->info(tr('Scadenza inserita!')); break; @@ -77,7 +84,7 @@ switch (post('op')) { $id_scadenza = post('id_scadenza')[$id]; if (!empty($id_scadenza)) { - $database->update('co_scadenziario', [ + $database->update('co_scadenze', [ 'descrizione' => $descrizione, 'da_pagare' => $da_pagare, 'pagato' => $pagato, @@ -88,10 +95,10 @@ switch (post('op')) { ], ['id' => $id_scadenza]); if ($da_pagare == 0) { - $database->delete('co_scadenziario', ['id' => $id]); + $database->delete('co_scadenze', ['id' => $id]); } } else { - $database->insert('co_scadenziario', [ + $database->insert('co_scadenze', [ 'descrizione' => $descrizione, 'tipo' => $tipo, 'iddocumento' => $iddocumento, @@ -116,7 +123,8 @@ switch (post('op')) { break; case 'delete': - $dbo->query("DELETE FROM co_scadenziario WHERE id='".$id_record."'"); + $gruppo->delete(); + flash()->info(tr('Scadenza eliminata!')); break; } diff --git a/modules/scadenzario/controller_after.php b/modules/scadenzario/controller_after.php index 0fadedb5a..b5678afd0 100755 --- a/modules/scadenzario/controller_after.php +++ b/modules/scadenzario/controller_after.php @@ -19,7 +19,7 @@ include_once __DIR__.'/../../core.php'; -if (empty($dbo->fetchArray('SELECT * FROM co_scadenziario'))) { +if (empty($dbo->fetchArray('SELECT * FROM co_scadenze'))) { $class = 'muted'; $disabled = 'disabled'; } else { diff --git a/modules/scadenzario/edit.php b/modules/scadenzario/edit.php index a50a77f11..b613e5eb3 100755 --- a/modules/scadenzario/edit.php +++ b/modules/scadenzario/edit.php @@ -106,7 +106,7 @@ if (!empty($documento)) { '.Modules::link($documento->module, $record['iddocumento'], ' '.tr('Apri documento'), null, 'class="btn btn-primary"'); } else { - $scadenza = $dbo->fetchOne('SELECT * FROM co_scadenziario WHERE id = '.prepare($id_record)); + $scadenza = $dbo->fetchOne('SELECT * FROM co_scadenze WHERE id = '.prepare($id_record)); echo input([ 'type' => 'textarea', @@ -219,7 +219,7 @@ $id_scadenza = $id_record; // Forzatura per allegare file sempre al primo record if (!empty($documento)) { - $id_scadenza = $dbo->fetchOne('SELECT id FROM co_scadenziario WHERE iddocumento='.prepare($documento->id).' ORDER BY id')['id']; + $id_scadenza = $dbo->fetchOne('SELECT id FROM co_scadenze WHERE iddocumento='.prepare($documento->id).' ORDER BY id')['id']; } ?> diff --git a/modules/scadenzario/init.php b/modules/scadenzario/init.php index 304d429de..c4160410d 100755 --- a/modules/scadenzario/init.php +++ b/modules/scadenzario/init.php @@ -17,20 +17,21 @@ * along with this program. If not, see . */ -use Modules\Fatture\Fattura; +use Modules\Scadenzario\Gruppo; include_once __DIR__.'/../../core.php'; if (isset($id_record)) { - $record = $dbo->fetchOne('SELECT * FROM co_scadenziario WHERE id = '.prepare($id_record)); - $documento = Fattura::find($record['iddocumento']); + $gruppo = Gruppo::find($id_record); + $documento = $gruppo->fattura; + $scadenze = $gruppo->scadenze; + + $record = $gruppo->toArray(); // Scelgo la query in base alla scadenza if (!empty($documento)) { - $scadenze = $dbo->fetchArray('SELECT * FROM co_scadenziario WHERE iddocumento = '.prepare($documento->id).' ORDER BY scadenza ASC'); $totale_da_pagare = $documento->netto; } else { - $scadenze = $dbo->fetchArray('SELECT * FROM co_scadenziario WHERE id = '.prepare($id_record).' ORDER BY scadenza ASC'); - $totale_da_pagare = sum(array_column($scadenze, 'da_pagare')); + $totale_da_pagare = sum(array_column($scadenze->toArray(), 'da_pagare')); } } diff --git a/modules/scadenzario/src/Gruppo.php b/modules/scadenzario/src/Gruppo.php new file mode 100644 index 000000000..d2829ebcd --- /dev/null +++ b/modules/scadenzario/src/Gruppo.php @@ -0,0 +1,66 @@ +. + */ + +namespace Modules\Scadenzario; + +use Carbon\Carbon; +use Common\SimpleModelTrait; +use Illuminate\Database\Eloquent\Model; +use Modules\Fatture\Fattura; + +class Gruppo extends Model +{ + use SimpleModelTrait; + + protected $table = 'co_gruppi_scadenze'; + + protected $dates = [ + 'data_emissione', + ]; + + public static function build($descrizione, Fattura $fattura = null) + { + $model = new static(); + + $model->descrizione = $descrizione; + + if (!empty($fattura)) { + $model->fattura()->associate($fattura); + $model->data_emissione = $fattura->data; + } else { + $model->data_emissione = new Carbon(); + } + + $model->save(); + + return $model; + } + + // Relazioni Eloquent + + public function fattura() + { + return $this->belongsTo(Fattura::class, 'id_documento'); + } + + public function scadenze() + { + return $this->hasMany(Scadenza::class, 'id_gruppo'); + } +} diff --git a/modules/scadenzario/src/Scadenza.php b/modules/scadenzario/src/Scadenza.php index d846cb490..4595db9fd 100755 --- a/modules/scadenzario/src/Scadenza.php +++ b/modules/scadenzario/src/Scadenza.php @@ -27,21 +27,22 @@ class Scadenza extends Model { use SimpleModelTrait; - protected $table = 'co_scadenziario'; + protected $table = 'co_scadenze'; protected $dates = [ 'scadenza', 'data_pagamento', ]; - public static function build($descrizione, $importo, $data_scadenza, $type = 'fattura', $is_pagato = false) + public static function build(Gruppo $gruppo, $importo, $data_scadenza, $tipo = 'fattura', $is_pagato = false) { $model = new static(); - $model->descrizione = $descrizione; + $model->gruppo()->associate($gruppo); + $model->scadenza = $data_scadenza; $model->da_pagare = $importo; - $model->tipo = $type; + $model->tipo = $tipo; $model->pagato = $is_pagato ? $importo : 0; $model->data_pagamento = $is_pagato ? $data_scadenza : null; @@ -51,8 +52,25 @@ class Scadenza extends Model return $model; } - public function documento() + public function save(array $options = []) { - return $this->belongsTo(Fattura::class, 'iddocumento'); + $result = parent::save($options); + + // Trigger per il gruppo al cambiamento della scadenza + $this->gruppo->triggerScadenza($this); + + return $result; + } + + // Relazioni Eloquent + + public function gruppo() + { + return $this->belongsTo(Gruppo::class, 'id_gruppo'); + } + + public function fattura() + { + return $this->gruppo->fattura(); } } diff --git a/modules/scadenzario/variables.php b/modules/scadenzario/variables.php index ef55d49ed..9b575502a 100755 --- a/modules/scadenzario/variables.php +++ b/modules/scadenzario/variables.php @@ -17,17 +17,17 @@ * along with this program. If not, see . */ -$r = $dbo->fetchOne('SELECT co_scadenziario.*, co_documenti.*, +$r = $dbo->fetchOne('SELECT co_scadenze.*, co_documenti.*, an_anagrafiche.email, an_anagrafiche.pec, an_anagrafiche.ragione_sociale, - co_scadenziario.da_pagare - co_scadenziario.pagato AS totale, + co_scadenze.da_pagare - co_scadenze.pagato AS totale, (SELECT pec FROM em_accounts WHERE em_accounts.id='.prepare($template['id_account']).') AS is_pec, (SELECT descrizione FROM co_pagamenti WHERE co_pagamenti.id = co_documenti.idpagamento) AS pagamento -FROM co_scadenziario - INNER JOIN co_documenti ON co_documenti.id = co_scadenziario.iddocumento +FROM co_scadenze + INNER JOIN co_documenti ON co_documenti.id = co_scadenze.iddocumento INNER JOIN an_anagrafiche ON co_documenti.idanagrafica=an_anagrafiche.idanagrafica -WHERE co_scadenziario.pagato != co_scadenziario.da_pagare AND co_scadenziario.iddocumento = (SELECT iddocumento FROM co_scadenziario s WHERE id='.prepare($id_record).')'); +WHERE co_scadenze.pagato != co_scadenze.da_pagare AND co_scadenze.iddocumento = (SELECT iddocumento FROM co_scadenze s WHERE id='.prepare($id_record).')'); $logo_azienda = str_replace(base_dir(), base_path(), App::filepath('templates/base|custom|/logo_azienda.jpg')); diff --git a/modules/tipi_scadenze/actions.php b/modules/tipi_scadenze/actions.php index 41c19c9af..def560079 100755 --- a/modules/tipi_scadenze/actions.php +++ b/modules/tipi_scadenze/actions.php @@ -37,10 +37,9 @@ switch (filter('op')) { //aggiorno anche il segmento $dbo->update('zz_segments', [ - 'clause' => 'co_scadenziario.tipo="'.$nome.'"', + 'clause' => 'co_gruppi_scadenze.tipo="'.$nome.'"', 'name' => 'Scadenzario '.$nome, ], [ - 'clause' => 'co_scadenziario.tipo="'.$nome_prev.'"', 'name' => 'Scadenzario '.$nome_prev, 'id_module' => Modules::get('Scadenzario')['id'], ]); @@ -75,7 +74,7 @@ switch (filter('op')) { $dbo->insert('zz_segments', [ 'id_module' => Modules::get('Scadenzario')['id'], 'name' => 'Scadenzario '.$nome, - 'clause' => 'co_scadenziario.tipo="'.$nome.'"', + 'clause' => 'co_scadenze.tipo="'.$nome.'"', 'position' => 'WHR', ]); @@ -99,7 +98,7 @@ switch (filter('op')) { break; case 'delete': - $documenti = $dbo->fetchNum('SELECT id FROM co_scadenziario WHERE tipo = (SELECT nome FROM co_tipi_scadenze WHERE id = '.prepare($id_record).')'); + $documenti = $dbo->fetchNum('SELECT id FROM co_scadenze WHERE tipo = (SELECT nome FROM co_tipi_scadenze WHERE id = '.prepare($id_record).')'); if (isset($id_record) && empty($documenti)) { $dbo->query('DELETE FROM `co_tipi_scadenze` WHERE `can_delete` = 1 AND `id`='.prepare($id_record)); diff --git a/modules/tipi_scadenze/edit.php b/modules/tipi_scadenze/edit.php index baeaa2ed0..05b31befe 100755 --- a/modules/tipi_scadenze/edit.php +++ b/modules/tipi_scadenze/edit.php @@ -20,7 +20,7 @@ include_once __DIR__.'/../../core.php'; // Collegamenti con scadenzaio (numerici) -$scadenze = $dbo->fetchNum('SELECT id FROM co_scadenziario WHERE tipo = '.prepare($record['nome'])); +$scadenze = $dbo->fetchNum('SELECT id FROM co_scadenze WHERE tipo = '.prepare($record['nome'])); if ($record['can_delete'] and empty($scadenze)) { $attr = ''; diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index 1d1c68f64..2698c5c8a 100755 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -1580,8 +1580,8 @@ class FatturaElettronica 'CondizioniPagamento' => ($co_pagamenti['prc'] == 100) ? 'TP02' : 'TP01', ]; - $co_scadenziario = $database->fetchArray('SELECT * FROM `co_scadenziario` WHERE `iddocumento` = '.prepare($documento['id'])); - foreach ($co_scadenziario as $scadenza) { + $co_scadenze = $database->fetchArray('SELECT * FROM `co_scadenze` WHERE `iddocumento` = '.prepare($documento['id'])); + foreach ($co_scadenze as $scadenza) { $pagamento = [ 'ModalitaPagamento' => $co_pagamenti['codice_modalita_pagamento_fe'], 'DataScadenzaPagamento' => $scadenza['scadenza'], diff --git a/templates/fatture/footer.php b/templates/fatture/footer.php index aee31e059..3c7148226 100755 --- a/templates/fatture/footer.php +++ b/templates/fatture/footer.php @@ -70,7 +70,7 @@ echo " '; // Elenco scadenze -$rs2 = $dbo->fetchArray('SELECT * FROM co_scadenziario WHERE iddocumento='.prepare($id_record).' ORDER BY `data_emissione` ASC'); +$rs2 = $dbo->fetchArray('SELECT * FROM co_scadenze WHERE iddocumento='.prepare($id_record).' ORDER BY `data_emissione` ASC'); if (!empty($rs2)) { for ($i = 0; $i < sizeof($rs2); ++$i) { echo " diff --git a/templates/scadenzario/init.php b/templates/scadenzario/init.php index 42f529dc4..6186ceda6 100755 --- a/templates/scadenzario/init.php +++ b/templates/scadenzario/init.php @@ -47,7 +47,7 @@ if (!empty($search_filters)) { $module_query = str_replace('2=2', '2=2 AND ('.implode(' AND ', $search_filters).') ', $module_query); } -$module_query = str_replace('1=1', '1=1 AND ABS(`co_scadenziario`.`pagato`) < ABS(`co_scadenziario`.`da_pagare`) ', $module_query); +$module_query = str_replace('1=1', '1=1 AND ABS(`co_scadenze`.`pagato`) < ABS(`co_scadenze`.`da_pagare`) ', $module_query); // Filtri derivanti dai permessi (eventuali) $module_query = Modules::replaceAdditionals($id_module, $module_query); diff --git a/update/2_4_26.sql b/update/2_4_26.sql index 691ce5c70..8b7f4380f 100644 --- a/update/2_4_26.sql +++ b/update/2_4_26.sql @@ -129,4 +129,4 @@ ALTER TABLE `em_accounts` ADD `id_oauth2` INT(11) DEFAULT NULL, -- Aggiunta opt-out Newsletter per Referenti e Sedi ALTER TABLE `an_referenti` ADD `enable_newsletter` BOOLEAN DEFAULT TRUE; -ALTER TABLE `an_sedi` ADD `enable_newsletter` BOOLEAN DEFAULT TRUE; \ No newline at end of file +ALTER TABLE `an_sedi` ADD `enable_newsletter` BOOLEAN DEFAULT TRUE; diff --git a/update/scadenze.sql b/update/scadenze.sql new file mode 100644 index 000000000..318700365 --- /dev/null +++ b/update/scadenze.sql @@ -0,0 +1,66 @@ + +-- Aggiunto nuovo sistema di gestione Scadenze +CREATE TABLE IF NOT EXISTS `co_gruppi_scadenze` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `id_documento` int(11) DEFAULT NULL, + `descrizione` varchar(255) NOT NULL, + `data_emissione` date NOT NULL, + `totale_pagato` decimal(12, 6) NOT NULL, + `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, + `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY(`id`), + FOREIGN KEY (`id_documento`) REFERENCES `co_documenti`(`id`) +) ENGINE=InnoDB; + +ALTER TABLE `co_scadenze` RENAME TO `co_scadenze`; +ALTER TABLE `co_scadenze` ADD `id_gruppo` INT(11), ADD FOREIGN KEY (`id_gruppo`) REFERENCES `co_gruppi_scadenze`(`id`); + +ALTER TABLE `co_gruppi_scadenze` ADD `id_scadenza_origine` INT(11); + +-- Inserimento gruppi per Documenti +INSERT INTO `co_gruppi_scadenze` (`id_scadenza_origine`, `id_documento`, `descrizione`, `data_emissione`, `totale_pagato`) SELECT `id`, `iddocumento`, `descrizione`, `data_emissione`, SUM(`pagato`) FROM `co_scadenze` WHERE `iddocumento` != 0 GROUP BY `iddocumento`; + +UPDATE `co_scadenze` INNER JOIN `co_gruppi_scadenze` ON `co_scadenze`.`iddocumento` = `co_gruppi_scadenze`.`id_documento` SET `co_scadenze`.`id_gruppo` = `co_gruppi_scadenze`.`id`; + +-- Inserimento gruppi per Scadenze indipendenti +INSERT INTO `co_gruppi_scadenze` (`id_scadenza_origine`, `id_documento`, `descrizione`, `data_emissione`, `totale_pagato`) SELECT `id`, `iddocumento`, `descrizione`, `data_emissione`, `pagato` FROM `co_scadenze` WHERE `iddocumento` = 0; + +UPDATE `co_scadenze` INNER JOIN `co_gruppi_scadenze` ON `co_scadenze`.`id` = `co_gruppi_scadenze`.`id_scadenza_origine` SET `co_scadenze`.`id_gruppo` = `co_gruppi_scadenze`.`id`; + +-- ALTER TABLE `co_gruppi_scadenze` DROP `id_scadenza_origine`; + +-- Correzioni per il modulo Scadenzario +UPDATE `zz_modules` SET `options` = 'SELECT |select| FROM `co_scadenze` + INNER JOIN `co_gruppi_scadenze` ON `co_gruppi_scadenze`.`id` = `co_scadenze`.`id_gruppo` + LEFT JOIN `co_documenti` ON `co_gruppi_scadenze`.`id_documento` = `co_documenti`.`id` + LEFT JOIN `an_anagrafiche` ON `co_documenti`.`idanagrafica` = `an_anagrafiche`.`idanagrafica` + LEFT JOIN `co_pagamenti` ON `co_documenti`.`idpagamento` = `co_pagamenti`.`id` + LEFT JOIN `co_tipidocumento` ON `co_documenti`.`idtipodocumento` = `co_tipidocumento`.`id` + LEFT JOIN `co_statidocumento` ON `co_documenti`.`idstatodocumento` = `co_statidocumento`.`id` +WHERE 1=1 AND + (`co_statidocumento`.`descrizione` IS NULL OR `co_statidocumento`.`descrizione` IN(''Emessa'',''Parzialmente pagato'',''Pagato'')) +HAVING 2=2 +ORDER BY `co_scadenze`.`scadenza` ASC' WHERE `zz_modules`.`name` = 'Scadenzario'; + +INSERT INTO `zz_views` (`id`, `id_module`, `name`, `query`, `order`, `visible`, `format`) VALUES +(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Scadenzario'), '_link_record_', 'co_gruppi_scadenze.id', 0, 0, 0), +(NULL, (SELECT `id` FROM `zz_modules` WHERE `name` = 'Scadenzario'), '_link_hash_', 'CONCAT(''scadenza_'', co_scadenze.id)', 0, 0, 0); + +UPDATE `zz_views` SET `query` = 'co_scadenze.scadenza' WHERE `name` = 'Data scadenza' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE name = 'Scadenzario'); + +UPDATE `zz_views` SET `query` = 'co_scadenze.id' WHERE `name` = 'id' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE name = 'Scadenzario'); + +UPDATE `zz_views` SET `query` = 'co_gruppi_scadenze.data_emissione' WHERE `name` = 'Data emissione' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE name = 'Scadenzario'); + +UPDATE `zz_views` SET `query` = 'co_scadenze.da_pagare' WHERE `name` = 'Importo' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE name = 'Scadenzario'); + +UPDATE `zz_views` SET `query` = 'co_scadenze.pagato' WHERE `name` = 'Pagato' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE name = 'Scadenzario'); + +UPDATE `zz_views` SET `query` = 'co_gruppi_scadenze.descrizione' WHERE `name` = 'Descrizione scadenza' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE name = 'Scadenzario'); + +UPDATE `zz_views` SET `query` = 'IF(an_anagrafiche.ragione_sociale IS NULL, co_gruppi_scadenze.descrizione, an_anagrafiche.ragione_sociale)' WHERE `name` = 'Anagrafica' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE name = 'Scadenzario'); + +UPDATE `zz_views` SET `query` = 'co_scadenze.note' WHERE `name` = 'Note' AND `id_module` = (SELECT `id` FROM `zz_modules` WHERE name = 'Scadenzario'); + +UPDATE `zz_widgets` SET `query` = REPLACE(`query`, 'co_scadenziario', 'co_scadenze'); +UPDATE `zz_segments` SET `clause` = REPLACE(`clause`, 'co_scadenziario', 'co_scadenze'); \ No newline at end of file diff --git a/update/tables.php b/update/tables.php index d9814e4e4..dad825d56 100755 --- a/update/tables.php +++ b/update/tables.php @@ -34,7 +34,8 @@ return [ 'co_ritenutaacconto', 'co_ritenuta_contributi', 'co_rivalse', - 'co_scadenziario', + 'co_gruppi_scadenze', + 'co_scadenze', 'co_staticontratti', 'co_statidocumento', 'co_statipreventivi',