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',