Aggiornamento cache e CHANGELOG
This commit is contained in:
parent
665dd823ae
commit
9216cd1288
23
CHANGELOG.md
23
CHANGELOG.md
|
@ -4,6 +4,7 @@ Tutti i maggiori cambiamenti di questo progetto saranno documentati in questo fi
|
||||||
|
|
||||||
Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release.
|
Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://keepachangelog.com/), e il progetto segue il [Semantic Versioning](http://semver.org/) per definire le versioni delle release.
|
||||||
|
|
||||||
|
- [2.4.14](#2414)
|
||||||
- [2.4.13 (2020-02-05)](#2413-2020-02-05)
|
- [2.4.13 (2020-02-05)](#2413-2020-02-05)
|
||||||
- [2.4.12 (2019-12-30)](#2412-2019-12-30)
|
- [2.4.12 (2019-12-30)](#2412-2019-12-30)
|
||||||
- [2.4.11 (2019-11-29)](#2411-2019-11-29)
|
- [2.4.11 (2019-11-29)](#2411-2019-11-29)
|
||||||
|
@ -23,6 +24,28 @@ Il formato utilizzato è basato sulle linee guida di [Keep a Changelog](http://k
|
||||||
- [2.2 (2016-11-10)](#22-2016-11-10)
|
- [2.2 (2016-11-10)](#22-2016-11-10)
|
||||||
- [2.1 (2015-04-02)](#21-2015-04-02)
|
- [2.1 (2015-04-02)](#21-2015-04-02)
|
||||||
|
|
||||||
|
## 2.4.14
|
||||||
|
|
||||||
|
### Aggiunto (Added)
|
||||||
|
- Nuove funzionalità nell'importazione delle Fatture Elettroniche
|
||||||
|
- Riferimenti manuali a DDT e Ordini di acquisto nell'importazione delle Fatture Elettroniche
|
||||||
|
- Compilazione automatica dei campi principali sulla base delle Fatture precedentemente importate
|
||||||
|
- Controlli aggiuntivi sulla numerazione di **DDT** e **Fatture**
|
||||||
|
- Fatturazione massiva di Contratti e Preventivi
|
||||||
|
- Nuovo modulo **Stampe** sotto **Strumenti** per permettere la modifica manuale delle opzioni delle stampe
|
||||||
|
|
||||||
|
### Modificato (Changed)
|
||||||
|
- Revisione e aggiornamento dei plugin *Pianificazione interventi* e *Pianficazione fatturazione*
|
||||||
|
- Modifica della gestione degli importi per le righe dei documenti (#758)
|
||||||
|
- Il plugin *Movimenti* degli **Articoli** presenta ora un raggruppamento per documento (#766)
|
||||||
|
- Aggiornamento del sistema di cache per prevedere una maggiore varietà di casi di utilizzo
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Blocco della duplicazione per Fatture per cui esiste una Nota di credito
|
||||||
|
- Gestione delle quantità evase per la fatturazione massiva di DDT
|
||||||
|
- Abilitazione e disabilitazione API per utenti senza token
|
||||||
|
- Modifica del totale per scadenze generiche in **Scadenzario** (#764)
|
||||||
|
|
||||||
## 2.4.13 (2020-02-05)
|
## 2.4.13 (2020-02-05)
|
||||||
|
|
||||||
### Aggiunto (Added)
|
### Aggiunto (Added)
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
include_once __DIR__.'/../../core.php';
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
|
use Models\Cache;
|
||||||
use Modules\Aggiornamenti\UpdateHook;
|
use Modules\Aggiornamenti\UpdateHook;
|
||||||
|
|
||||||
$id = post('id');
|
$id = post('id');
|
||||||
|
@ -9,7 +10,8 @@ $id = post('id');
|
||||||
switch (filter('op')) {
|
switch (filter('op')) {
|
||||||
case 'check':
|
case 'check':
|
||||||
$result = UpdateHook::isAvailable();
|
$result = UpdateHook::isAvailable();
|
||||||
UpdateHook::update($result);
|
|
||||||
|
Cache::get('Ultima versione di OpenSTAManager disponibile')->set($result);
|
||||||
|
|
||||||
echo $result;
|
echo $result;
|
||||||
|
|
||||||
|
|
|
@ -11,16 +11,19 @@ class UpdateHook extends CachedManager
|
||||||
{
|
{
|
||||||
protected static $client = null;
|
protected static $client = null;
|
||||||
|
|
||||||
public function data()
|
public function getCacheName()
|
||||||
{
|
{
|
||||||
$result = self::isAvailable();
|
return 'Ultima versione di OpenSTAManager disponibile';
|
||||||
|
}
|
||||||
|
|
||||||
return $result;
|
public function cacheData()
|
||||||
|
{
|
||||||
|
return self::isAvailable();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function response()
|
public function response()
|
||||||
{
|
{
|
||||||
$update = self::getCache()['results'];
|
$update = $this->getCache()->content;
|
||||||
|
|
||||||
$module = Modules::get('Aggiornamenti');
|
$module = Modules::get('Aggiornamenti');
|
||||||
$link = ROOTDIR.'/controller.php?id_module='.$module->id;
|
$link = ROOTDIR.'/controller.php?id_module='.$module->id;
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
namespace Plugins\ImportFE;
|
namespace Plugins\ImportFE;
|
||||||
|
|
||||||
use API\Services;
|
use API\Services;
|
||||||
|
use Models\Cache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Classe per l'interazione con API esterne.
|
* Classe per l'interazione con API esterne.
|
||||||
|
@ -19,7 +20,7 @@ class Interaction extends Services
|
||||||
$result = self::getFileList($list);
|
$result = self::getFileList($list);
|
||||||
|
|
||||||
// Aggiornamento cache hook
|
// Aggiornamento cache hook
|
||||||
InvoiceHook::update($result);
|
Cache::get('Fatture Elettroniche')->set($result);
|
||||||
|
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,16 +7,19 @@ use Modules;
|
||||||
|
|
||||||
class InvoiceHook extends CachedManager
|
class InvoiceHook extends CachedManager
|
||||||
{
|
{
|
||||||
public function data()
|
public function getCacheName()
|
||||||
{
|
{
|
||||||
$list = Interaction::getInvoiceList();
|
return 'Fatture Elettroniche';
|
||||||
|
}
|
||||||
|
|
||||||
return $list;
|
public function cacheData()
|
||||||
|
{
|
||||||
|
return Interaction::getInvoiceList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function response()
|
public function response()
|
||||||
{
|
{
|
||||||
$results = self::getCache()['results'];
|
$results = $this->getCache()->content;
|
||||||
|
|
||||||
$count = count($results);
|
$count = count($results);
|
||||||
$notify = false;
|
$notify = false;
|
||||||
|
|
|
@ -3,16 +3,12 @@
|
||||||
include_once __DIR__.'/../../core.php';
|
include_once __DIR__.'/../../core.php';
|
||||||
|
|
||||||
use Plugins\ReceiptFE\Interaction;
|
use Plugins\ReceiptFE\Interaction;
|
||||||
use Plugins\ReceiptFE\ReceiptHook;
|
|
||||||
use Plugins\ReceiptFE\Ricevuta;
|
use Plugins\ReceiptFE\Ricevuta;
|
||||||
|
|
||||||
switch (filter('op')) {
|
switch (filter('op')) {
|
||||||
case 'import':
|
case 'import':
|
||||||
$list = Interaction::getReceiptList();
|
$list = Interaction::getReceiptList();
|
||||||
|
|
||||||
// Aggiornamento cache hook
|
|
||||||
ReceiptHook::update($list);
|
|
||||||
|
|
||||||
$results = [];
|
$results = [];
|
||||||
foreach ($list as $element) {
|
foreach ($list as $element) {
|
||||||
$name = $element['name'];
|
$name = $element['name'];
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
namespace Plugins\ReceiptFE;
|
namespace Plugins\ReceiptFE;
|
||||||
|
|
||||||
use API\Services;
|
use API\Services;
|
||||||
|
use Models\Cache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Classe per l'interazione con API esterne.
|
* Classe per l'interazione con API esterne.
|
||||||
|
@ -21,7 +22,7 @@ class Interaction extends Services
|
||||||
$list = array_merge($list, $files);
|
$list = array_merge($list, $files);
|
||||||
|
|
||||||
// Aggiornamento cache hook
|
// Aggiornamento cache hook
|
||||||
ReceiptHook::update($list);
|
Cache::get('Ricevute Elettroniche')->set($list);
|
||||||
|
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,16 +7,19 @@ use Modules;
|
||||||
|
|
||||||
class ReceiptHook extends CachedManager
|
class ReceiptHook extends CachedManager
|
||||||
{
|
{
|
||||||
public function data()
|
public function getCacheName()
|
||||||
{
|
{
|
||||||
$list = Interaction::getReceiptList();
|
return 'Ricevute Elettroniche';
|
||||||
|
}
|
||||||
|
|
||||||
return $list;
|
public function cacheData()
|
||||||
|
{
|
||||||
|
return Interaction::getReceiptList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function response()
|
public function response()
|
||||||
{
|
{
|
||||||
$results = self::getCache()['results'];
|
$results = $this->getCache()->content;
|
||||||
|
|
||||||
$count = count($results);
|
$count = count($results);
|
||||||
$notify = false;
|
$notify = false;
|
||||||
|
|
|
@ -2,95 +2,47 @@
|
||||||
|
|
||||||
namespace Hooks;
|
namespace Hooks;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Models\Cache;
|
||||||
use Carbon\CarbonInterval;
|
use Models\Hook;
|
||||||
|
|
||||||
abstract class CachedManager extends Manager
|
abstract class CachedManager extends Manager
|
||||||
{
|
{
|
||||||
protected static $cache = null;
|
protected $cache = null;
|
||||||
protected static $is_cached = null;
|
|
||||||
|
|
||||||
abstract public function data();
|
public function __construct(Hook $hook)
|
||||||
|
{
|
||||||
|
parent::__construct($hook);
|
||||||
|
|
||||||
|
$this->cache = Cache::get($this->getCacheName());
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract public function cacheData();
|
||||||
|
|
||||||
|
abstract public function getCacheName();
|
||||||
|
|
||||||
public function needsExecution()
|
public function needsExecution()
|
||||||
{
|
{
|
||||||
return !self::isCached();
|
return !$this->isCached();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function execute()
|
public function execute()
|
||||||
{
|
{
|
||||||
if (self::isCached()) {
|
if (!$this->isCached()) {
|
||||||
$results = self::getCache()['results'];
|
$data = $this->cacheData();
|
||||||
} else {
|
|
||||||
$results = $this->data();
|
|
||||||
|
|
||||||
self::update($results);
|
$this->getCache()->set($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $results;
|
return $this->getCache()->content;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getCache()
|
public function getCache()
|
||||||
{
|
{
|
||||||
if (!isset(self::$cache)) {
|
return $this->cache;
|
||||||
$hook = self::getHook();
|
|
||||||
|
|
||||||
$cache = database()->selectOne('zz_hook_cache', '*', ['hook_id' => $hook->id], ['id' => 'DESC']);
|
|
||||||
|
|
||||||
// Interpretazione della cache
|
|
||||||
if (isset($cache['results'])) {
|
|
||||||
$cache['results'] = json_decode($cache['results'], true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self::$cache = $cache;
|
public function isCached()
|
||||||
}
|
|
||||||
|
|
||||||
return self::$cache;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function update($results)
|
|
||||||
{
|
{
|
||||||
$hook = self::getHook();
|
return $this->getCache()->isValid();
|
||||||
|
|
||||||
if (!empty($hook)) {
|
|
||||||
// Rimozione cache precedente
|
|
||||||
$database = database();
|
|
||||||
$database->delete('zz_hook_cache', [
|
|
||||||
'hook_id' => $hook->id,
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Aggiunta del risultato come cache
|
|
||||||
$cache = json_encode($results);
|
|
||||||
$database->insert('zz_hook_cache', [
|
|
||||||
'hook_id' => $hook->id,
|
|
||||||
'results' => $cache,
|
|
||||||
]);
|
|
||||||
|
|
||||||
self::$cache = $results;
|
|
||||||
self::$is_cached = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function isCached()
|
|
||||||
{
|
|
||||||
if (!isset(self::$is_cached)) {
|
|
||||||
$hook = self::getHook();
|
|
||||||
$cache = self::getCache();
|
|
||||||
|
|
||||||
$is_cached = false;
|
|
||||||
if (!empty($cache)) {
|
|
||||||
$date = new Carbon($cache['created_at']);
|
|
||||||
$interval = CarbonInterval::make($hook->frequency);
|
|
||||||
|
|
||||||
$date = $date->add($interval);
|
|
||||||
|
|
||||||
$now = new Carbon();
|
|
||||||
$is_cached = $date->greaterThan($now);
|
|
||||||
}
|
|
||||||
|
|
||||||
self::$is_cached = $is_cached;
|
|
||||||
}
|
|
||||||
|
|
||||||
return self::$is_cached;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,13 @@ use Models\Hook;
|
||||||
|
|
||||||
abstract class Manager
|
abstract class Manager
|
||||||
{
|
{
|
||||||
|
protected $hook = null;
|
||||||
|
|
||||||
|
public function __construct(Hook $hook)
|
||||||
|
{
|
||||||
|
$this->hook = $hook;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restituisce le informazioni sull'esecuzione dell'hook.
|
* Restituisce le informazioni sull'esecuzione dell'hook.
|
||||||
*
|
*
|
||||||
|
@ -31,7 +38,7 @@ abstract class Manager
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Restituisce se l'hook ha bisogno di una esecuzione;.
|
* Restituisce se l'hook ha bisogno di una esecuzione.
|
||||||
*
|
*
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
|
@ -58,12 +65,8 @@ abstract class Manager
|
||||||
*
|
*
|
||||||
* @return Hook|null
|
* @return Hook|null
|
||||||
*/
|
*/
|
||||||
protected static function getHook()
|
protected function getHook()
|
||||||
{
|
{
|
||||||
$class = get_called_class();
|
return $this->getHook();
|
||||||
|
|
||||||
$hook = Hook::where('class', $class)->first();
|
|
||||||
|
|
||||||
return $hook;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Models;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use Carbon\CarbonInterval;
|
||||||
|
use Common\Model;
|
||||||
|
use Traits\StoreTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Risorsa di cache per la gestione delle informazioni temporanee del gestionale.
|
||||||
|
* Da utilizzare in sola lettura oppure in creazione e diretta scritture.
|
||||||
|
*/
|
||||||
|
class Cache extends Model
|
||||||
|
{
|
||||||
|
use StoreTrait;
|
||||||
|
|
||||||
|
protected $table = 'zz_cache';
|
||||||
|
|
||||||
|
protected $casts = [
|
||||||
|
'content' => 'array',
|
||||||
|
];
|
||||||
|
|
||||||
|
protected $dates = [
|
||||||
|
'expire_at',
|
||||||
|
];
|
||||||
|
|
||||||
|
public static function build($name, $valid_time, $expire_at = null)
|
||||||
|
{
|
||||||
|
$model = new self();
|
||||||
|
|
||||||
|
$model->name = $name;
|
||||||
|
$model->valid_time = $valid_time;
|
||||||
|
$model->expire_at = $expire_at;
|
||||||
|
|
||||||
|
$model->save();
|
||||||
|
|
||||||
|
return $model;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isValid()
|
||||||
|
{
|
||||||
|
return $this->valid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getValidAttribute()
|
||||||
|
{
|
||||||
|
return !empty($this->expire_at) && $this->expire_at->greaterThanOrEqualTo(Carbon::now());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function set($content)
|
||||||
|
{
|
||||||
|
$this->content = $content;
|
||||||
|
|
||||||
|
return $this->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function save(array $options = [])
|
||||||
|
{
|
||||||
|
if (!empty($this->valid_time)) {
|
||||||
|
$interval = CarbonInterval::make($this->valid_time);
|
||||||
|
$this->expire_at = (new Carbon())->add($interval);
|
||||||
|
} elseif (empty($this->expire_at)) {
|
||||||
|
$interval = CarbonInterval::make('6 hours');
|
||||||
|
$this->expire_at = (new Carbon())->add($interval);
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::save($options);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete()
|
||||||
|
{
|
||||||
|
if (empty($this->valid_time)) {
|
||||||
|
return parent::delete();
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function scopeValid($query)
|
||||||
|
{
|
||||||
|
return $query->where('expire_at', '>', Carbon::now());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function scopeInvalid($query)
|
||||||
|
{
|
||||||
|
return $query->where('expire_at', '<=', Carbon::now());
|
||||||
|
}
|
||||||
|
}
|
|
@ -119,7 +119,7 @@ class Hook extends Model
|
||||||
public function getClass()
|
public function getClass()
|
||||||
{
|
{
|
||||||
$class = $this->class;
|
$class = $this->class;
|
||||||
$hook = new $class();
|
$hook = new $class($this);
|
||||||
|
|
||||||
if (!$hook instanceof Manager) {
|
if (!$hook instanceof Manager) {
|
||||||
throw new \UnexpectedValueException();
|
throw new \UnexpectedValueException();
|
||||||
|
|
|
@ -182,8 +182,8 @@ class Update
|
||||||
// Normalizzazione di charset e collation
|
// Normalizzazione di charset e collation
|
||||||
self::normalizeDatabase($database->getDatabaseName());
|
self::normalizeDatabase($database->getDatabaseName());
|
||||||
|
|
||||||
if (class_exists('\Modules\Aggiornamenti\UpdateHook')) {
|
if (class_exists('\Models\Cache')) {
|
||||||
\Modules\Aggiornamenti\UpdateHook::update(null);
|
\Models\Cache::get('Ultima versione di OpenSTAManager disponibile')->set(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -14,7 +14,7 @@ UPDATE `in_statiintervento` SET `descrizione` = 'Programmato' WHERE `in_statiint
|
||||||
UPDATE `in_interventi` SET `data_scadenza` = NULL WHERE `data_scadenza` = '0000-00-00 00:00:00';
|
UPDATE `in_interventi` SET `data_scadenza` = NULL WHERE `data_scadenza` = '0000-00-00 00:00:00';
|
||||||
|
|
||||||
-- Permetti inserimento sessioni anche per altri tecnici
|
-- Permetti inserimento sessioni anche per altri tecnici
|
||||||
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `created_at`, `updated_at`, `order`, `help`) VALUES (NULL, 'Permetti inserimento sessioni degli altri tecnici', '0', 'boolean', '1', 'Interventi', NULL, NULL, NULL, "Permette al tecnico l\'inserimento delle sessioni di lavoro anche per gli altri tecnici.");
|
INSERT INTO `zz_settings` (`id`, `nome`, `valore`, `tipo`, `editable`, `sezione`, `order`, `help`) VALUES (NULL, 'Permetti inserimento sessioni degli altri tecnici', '0', 'boolean', '1', 'Interventi', NULL, "Permette al tecnico l\'inserimento delle sessioni di lavoro anche per gli altri tecnici.");
|
||||||
|
|
||||||
-- Aggiunta cartella per il modulo "Movimenti"
|
-- Aggiunta cartella per il modulo "Movimenti"
|
||||||
UPDATE `zz_modules` SET `directory` = 'movimenti' WHERE `name` = 'Movimenti';
|
UPDATE `zz_modules` SET `directory` = 'movimenti' WHERE `name` = 'Movimenti';
|
||||||
|
|
|
@ -391,3 +391,20 @@ ORDER BY `data` DESC, CAST(`numero_esterno` AS UNSIGNED) DESC' WHERE `name` = 'O
|
||||||
UPDATE `zz_views` SET `query` = 'righe.totale_imponibile' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Ordini fornitore') AND `name` = 'Totale';
|
UPDATE `zz_views` SET `query` = 'righe.totale_imponibile' WHERE `id_module` = (SELECT `id` FROM `zz_modules` WHERE `name` = 'Ordini fornitore') AND `name` = 'Totale';
|
||||||
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `format`, `default`, `visible`) VALUES
|
INSERT INTO `zz_views` (`id_module`, `name`, `query`, `order`, `search`, `format`, `default`, `visible`) VALUES
|
||||||
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Ordini fornitore'), 'Totale ivato', 'righe.totale', 5, 1, 1, 1, 1);
|
((SELECT `id` FROM `zz_modules` WHERE `name` = 'Ordini fornitore'), 'Totale ivato', 'righe.totale', 5, 1, 1, 1, 1);
|
||||||
|
|
||||||
|
-- Miglioramento della cache interna
|
||||||
|
CREATE TABLE IF NOT EXISTS `zz_cache` (
|
||||||
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
`name` VARCHAR(255) NOT NULL,
|
||||||
|
`content` TEXT NOT NULL,
|
||||||
|
`valid_time` VARCHAR(255),
|
||||||
|
`expire_at` timestamp NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
INSERT INTO `zz_cache` (`id`, `name`, `content`, `valid_time`, `expire_at`) VALUES
|
||||||
|
(NULL, 'Ricevute Elettroniche', '', '1 day', NULL),
|
||||||
|
(NULL, 'Fatture Elettroniche', '', '1 day', NULL),
|
||||||
|
(NULL, 'Ultima versione di OpenSTAManager disponibile', '', '7 day', NULL);
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `zz_hook_cache`;
|
||||||
|
|
|
@ -94,6 +94,7 @@ return [
|
||||||
'or_statiordine',
|
'or_statiordine',
|
||||||
'or_tipiordine',
|
'or_tipiordine',
|
||||||
'zz_api_resources',
|
'zz_api_resources',
|
||||||
|
'zz_cache',
|
||||||
'zz_currencies',
|
'zz_currencies',
|
||||||
'zz_checks',
|
'zz_checks',
|
||||||
'zz_check_user',
|
'zz_check_user',
|
||||||
|
@ -108,7 +109,6 @@ return [
|
||||||
'zz_group_module',
|
'zz_group_module',
|
||||||
'zz_group_view',
|
'zz_group_view',
|
||||||
'zz_hooks',
|
'zz_hooks',
|
||||||
'zz_hook_cache',
|
|
||||||
'zz_logs',
|
'zz_logs',
|
||||||
'zz_modules',
|
'zz_modules',
|
||||||
'zz_operations',
|
'zz_operations',
|
||||||
|
|
Loading…
Reference in New Issue