diff --git a/modules/fatture/edit.php b/modules/fatture/edit.php index 9bd658372..7ad6ec38c 100755 --- a/modules/fatture/edit.php +++ b/modules/fatture/edit.php @@ -23,6 +23,7 @@ use Modules\Anagrafiche\Nazione; use Modules\Fatture\Gestori\Bollo; use Modules\Interventi\Intervento; use Modules\Iva\Aliquota; +use Plugins\ExportFE\Interaction; include_once __DIR__.'/../../core.php'; @@ -228,7 +229,7 @@ elseif ($record['stato'] == 'Bozza') { ?>
> - {[ "type": "select", "label": "", "name": "codice_stato_fe", "values": "query=SELECT codice as id, CONCAT_WS(' - ',codice,descrizione) as text FROM fe_stati_documento", "value": "$codice_stato_fe$", "disabled": , "class": "unblockable", "help": "" ]} + {[ "type": "select", "label": "", "name": "codice_stato_fe", "values": "query=SELECT codice as id, CONCAT_WS(' - ',codice,descrizione) as text FROM fe_stati_documento", "value": "$codice_stato_fe$", "disabled": , "class": "unblockable", "help": "" ]}
'; -/** - * Contenuto aggiornato e gestito dall'Hook ServicesHook. - * - * @var array - */ -$response = Cache::pool('Informazioni su Services')->content; $limite_scadenze = (new Carbon())->addDays(60); if (Services::isEnabled()) { echo ' @@ -48,7 +40,7 @@ if (Services::isEnabled()) {
'; - $servizi = collect($response['servizi'])->flatten(1); + $servizi = Services::getServiziAttivi()->flatten(1); if (!$servizi->isEmpty()) { echo ' @@ -99,8 +91,9 @@ if (Services::isEnabled()) {
'; // Elaborazione delle risorse API in scadenza - if (!empty($response['risorse-api'])) { - $risorse_in_scadenza = ServicesHook::getRisorseInScadenza($response['risorse-api'], $limite_scadenze); + $risorse_attive = Services::getRisorseAttive(); + if (!$risorse_attive->isEmpty()) { + $risorse_in_scadenza = Services::getRisorseInScadenza($limite_scadenze); if (!$risorse_in_scadenza->isEmpty()) { echo '

'.tr('Le seguenti risorse sono in scadenza:').'

@@ -115,11 +108,12 @@ if (Services::isEnabled()) {
'; foreach ($risorse_in_scadenza as $servizio) { - $scadenza = Carbon::parse($servizio['data_scadenza']); + $scadenza = Carbon::parse($servizio['expiration_at']); + echo ' - - + + '; } diff --git a/modules/stato_servizi/src/ServicesHook.php b/modules/stato_servizi/src/ServicesHook.php index fdfe85555..f90a4a63e 100644 --- a/modules/stato_servizi/src/ServicesHook.php +++ b/modules/stato_servizi/src/ServicesHook.php @@ -21,29 +21,15 @@ namespace Modules\StatoServizi; use API\Services; use Carbon\Carbon; -use Hooks\CachedManager; +use Hooks\Manager; -class ServicesHook extends CachedManager +class ServicesHook extends Manager { - public function getCacheName() - { - return 'Informazioni su Services'; - } - - public function cacheData() - { - $response = Services::request('GET', 'info'); - - return Services::responseBody($response); - } - public function response() { - $servizi = $this->getCache()->content; - $limite_scadenze = (new Carbon())->addDays(60); - // Elaborazione dei servizi in scadenza - $risorse_in_scadenza = self::getRisorseInScadenza($servizi['risorse-api'], $limite_scadenze); + $limite_scadenze = (new Carbon())->addDays(60); + $risorse_in_scadenza = Services::getRisorseInScadenza($limite_scadenze); $message = tr('I seguenti servizi sono in scadenza: _LIST_', [ '_LIST_' => implode(', ', $risorse_in_scadenza->pluck('nome')->all()), @@ -56,26 +42,13 @@ class ServicesHook extends CachedManager ]; } - /** - * Restituisce l'elenco delle risorse API in scadenza, causa data oppure crediti. - * - * @param $servizi - */ - public static function getRisorseInScadenza($risorse, $limite_scadenze) + public function execute() { - // Elaborazione dei servizi in scadenza - $risorse_in_scadenza = collect($risorse) - ->filter(function ($item) use ($limite_scadenze) { - return (isset($item['expiration_at']) && Carbon::parse($item['expiration_at'])->lessThan($limite_scadenze)) - || (isset($item['credits']) && $item['credits'] < 100); - }); + return false; + } - return $risorse_in_scadenza->transform(function ($item, $key) { - return [ - 'nome' => $item['name'], - 'data_scadenza' => $item['expiration_at'], - 'crediti' => $item['credits'], - ]; - }); + public function needsExecution() + { + return false; } } diff --git a/plugins/exportFE/src/Interaction.php b/plugins/exportFE/src/Interaction.php index 4adc6583f..84752c10b 100755 --- a/plugins/exportFE/src/Interaction.php +++ b/plugins/exportFE/src/Interaction.php @@ -30,6 +30,11 @@ use UnexpectedValueException; */ class Interaction extends Services { + public static function isEnabled() + { + return parent::isEnabled() && self::verificaRisorsaAttiva('Fatturazione Elettronica'); + } + public static function sendInvoice($id_record) { try { diff --git a/plugins/importFE/src/Interaction.php b/plugins/importFE/src/Interaction.php index 90019cd28..6d6ee8109 100755 --- a/plugins/importFE/src/Interaction.php +++ b/plugins/importFE/src/Interaction.php @@ -29,6 +29,11 @@ use Models\Cache; */ class Interaction extends Services { + public static function isEnabled() + { + return parent::isEnabled() && self::verificaRisorsaAttiva('Fatturazione Elettronica'); + } + public static function getInvoiceList() { $list = self::getRemoteList(); diff --git a/plugins/receiptFE/src/Interaction.php b/plugins/receiptFE/src/Interaction.php index 35edd3a15..22a1a73af 100755 --- a/plugins/receiptFE/src/Interaction.php +++ b/plugins/receiptFE/src/Interaction.php @@ -29,6 +29,11 @@ use Models\Cache; */ class Interaction extends Services { + public static function isEnabled() + { + return parent::isEnabled() && self::verificaRisorsaAttiva('Fatturazione Elettronica'); + } + public static function getReceiptList() { $list = self::getRemoteList(); diff --git a/src/API/Services.php b/src/API/Services.php index b81cc3239..e5c7cdd01 100755 --- a/src/API/Services.php +++ b/src/API/Services.php @@ -19,7 +19,9 @@ namespace API; +use Carbon\Carbon; use GuzzleHttp\Client; +use Models\Cache; /** * Classe per l'interazione con API esterne. @@ -30,11 +32,98 @@ class Services { protected static $client = null; + /** + * Controlla se il gestionale ha accesso a Services. + * + * @return bool + */ public static function isEnabled() { return !empty(setting('OSMCloud Services API Token')); } + /** + * Restituisce le informazioni disponibili su Services. + * + * @return array + */ + public static function getInformazioni($force = false) + { + $cache = Cache::pool('Informazioni su Services'); + + // Aggiornamento dei contenuti della cache + if (!$cache->isValid() || $force) { + $response = self::request('GET', 'info'); + $content = self::responseBody($response); + + $cache->set($content); + + return $content; + } + + return $cache->content; + } + + /** + * Restituisce i servizi attivi attraverso Services. + * + * @return \Illuminate\Support\Collection + */ + public static function getServiziAttivi() + { + return collect(self::getInformazioni()['servizi']); + } + + /** + * Restituisce le risorse attive in Services. + * + * @return \Illuminate\Support\Collection + */ + public static function getRisorseAttive() + { + return collect(self::getInformazioni()['risorse-api']); + } + + /** + * Controlla se il gestionale ha accesso a una specifica risorsa di Services. + * + * @return bool + */ + public static function verificaRisorsaAttiva($servizio) + { + return self::isEnabled() && self::getRisorseAttive()->search(function ($item) use ($servizio) { + return $item['name'] == $servizio; + }) !== false; + } + + /** + * Restituisce le risorse in scadenza per assenza di crediti oppure per data di fine prossima. + * + * @param Carbon $limite_scadenze + * + * @return \Illuminate\Support\Collection + */ + public static function getRisorseInScadenza($limite_scadenze) + { + return self::getRisorseAttive() + ->filter(function ($item) use ($limite_scadenze) { + return (isset($item['expiration_at']) && Carbon::parse($item['expiration_at'])->lessThan($limite_scadenze)) + || (isset($item['credits']) && $item['credits'] < 100); + }); + } + + /** + * Effettua una richiesta a Services. + * + * @param $type + * @param $resource + * @param array $data + * @param array $options + * + * @throws \GuzzleHttp\Exception\GuzzleException + * + * @return \Psr\Http\Message\ResponseInterface + */ public static function request($type, $resource, $data = [], $options = []) { $client = static::getClient(); @@ -53,6 +142,13 @@ class Services return $client->request($type, '', $options); } + /** + * Restituisce il corpo JSON della risposta in array. + * + * @param $response + * + * @return array + */ public static function responseBody($response) { $body = $response->getBody(); diff --git a/src/Validate.php b/src/Validate.php index 8b0b718e6..f79a6ecf0 100755 --- a/src/Validate.php +++ b/src/Validate.php @@ -98,7 +98,7 @@ class Validate } */ // Controllo attraverso apilayer - if (Services::isEnabled()) { + if (Services::verificaRisorsaAttiva('Verifica Partita IVA')) { $response = Services::request('post', 'check_iva', [ 'partita_iva' => $vat_number, ]); @@ -151,7 +151,7 @@ class Validate } // Controllo attraverso apilayer - if (Services::isEnabled()) { + if (Services::verificaRisorsaAttiva('Verifica Email')) { $response = Services::request('post', 'check_email', [ 'email' => $email, ]);
'.$servizio['nome'].''.$servizio['crediti'].''.$servizio['name'].''.$servizio['credits'].' '.dateFormat($scadenza).' ('.$scadenza->diffForHumans().')