From 24fe32040e1d3969c1e83a390316c0df698febe1 Mon Sep 17 00:00:00 2001 From: Beppe Date: Fri, 15 Oct 2021 19:06:26 +0200 Subject: [PATCH 1/4] Aggiunta immagine in import CSV articoli --- modules/articoli/src/Import/CSV.php | 41 +++++++++++++++++++++++++++++ src/Models/Upload.php | 21 +++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/modules/articoli/src/Import/CSV.php b/modules/articoli/src/Import/CSV.php index 6012ab85c..3cdcd653b 100644 --- a/modules/articoli/src/Import/CSV.php +++ b/modules/articoli/src/Import/CSV.php @@ -19,7 +19,10 @@ namespace Modules\Articoli\Import; +use Uploads; +use Modules; use Carbon\Carbon; +use Models\Upload; use Importer\CSVImporter; use Modules\Anagrafiche\Anagrafica; use Modules\Anagrafiche\Sede; @@ -43,6 +46,14 @@ class CSV extends CSVImporter 'label' => 'Codice', 'primary_key' => true, ], + [ + 'field' => 'immagine', + 'label' => 'Immagine', + 'names' => [ + 'Immagine', + 'Foto', + ], + ], [ 'field' => 'descrizione', 'label' => 'Descrizione', @@ -210,6 +221,8 @@ class CSV extends CSVImporter { $database = database(); $primary_key = $this->getPrimaryKey(); + $url = $record['immagine']; + unset($record['immagine']); // Fix per campi con contenuti derivati da query implicite if (!empty($record['id_fornitore'])) { @@ -316,6 +329,34 @@ class CSV extends CSVImporter $articolo->movimenta($qta_movimento, tr('Movimento da importazione'), new Carbon(), false, [ 'idsede' => $id_sede, ]); + + //Gestione immagine + if ( !empty($url) ) { + $file_content = file_get_contents($url); + + if( !empty($file_content) ){ + $name = "immagine_".$articolo->id.'.'.Upload::getExtensionFromMimeType($file_content); + + $upload = Uploads::upload($file_content, [ + 'name' => 'Immagine', + 'category' => 'Immagini', + 'original_name' => $name, + 'id_module' => Modules::get('Articoli')['id'], + 'id_record' => $articolo->id, + ], [ + 'thumbnails' => true, + ]); + $filename = $upload->filename; + + if (!empty($filename)) { + $database->update('mg_articoli', [ + 'immagine' => $filename, + ], [ + 'id' => $articolo->id, + ]); + } + } + } } public static function getExample() diff --git a/src/Models/Upload.php b/src/Models/Upload.php index e5dd849a1..f6daecb1c 100755 --- a/src/Models/Upload.php +++ b/src/Models/Upload.php @@ -38,6 +38,15 @@ class Upload extends Model 'htm' => 'text/html', ]; + /** @var array Elenco delle estensioni file per mime type */ + protected static $extension_association = [ + 'image/gif' => 'gif', + 'image/bmp' => 'bmp', + 'image/jpg' => 'jpg', + 'image/jpeg' => 'jpg', + 'image/png' => 'png', + ]; + protected $table = 'zz_files'; protected $file_info; @@ -211,6 +220,18 @@ class Upload extends Model return in_array($this->extension, $list); } + /** + * @return string + */ + public static function getExtensionFromMimeType($file_content) + { + $finfo = finfo_open(); + $mime_type = finfo_buffer($finfo, $file_content, FILEINFO_MIME_TYPE); + finfo_close($finfo); + + return self::$extension_association[$mime_type]; + } + /** * @return bool */ From 1f141a5dc94a413dd3608fd348370df014db392c Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Mon, 18 Oct 2021 10:23:39 +0200 Subject: [PATCH 2/4] Stile del codice --- include/init/update.php | 2 +- modules/articoli/bulk.php | 2 +- modules/articoli/src/Import/CSV.php | 12 +++---- .../fatture/src/Components/RelationTrait.php | 2 +- modules/interventi/modutil.php | 8 ++--- modules/movimenti/add.php | 2 +- modules/stato_servizi/actions.php | 3 +- modules/stato_servizi/edit.php | 34 +++++++------------ plugins/importFE/generate.php | 10 +++--- plugins/importFE/src/FatturaElettronica.php | 2 +- plugins/importFE/src/FatturaOrdinaria.php | 19 +++++------ plugins/statistiche_anagrafiche/info.php | 6 ++-- src/API/Services.php | 2 +- src/Common/Components/Component.php | 2 +- src/Models/Upload.php | 2 +- 15 files changed, 49 insertions(+), 59 deletions(-) diff --git a/include/init/update.php b/include/init/update.php index 5e1ef168c..2d7fb3272 100755 --- a/include/init/update.php +++ b/include/init/update.php @@ -214,7 +214,7 @@ if (filter('action') == 'do_update') { $total += $scriptValue; } } - + echo ' '; \ No newline at end of file +'; diff --git a/modules/stato_servizi/actions.php b/modules/stato_servizi/actions.php index c1104fe47..58979b695 100755 --- a/modules/stato_servizi/actions.php +++ b/modules/stato_servizi/actions.php @@ -317,10 +317,9 @@ switch (filter('op')) { $max_number = $informazioni['maxNumber']; $avviso_numero = !empty($max_number) && floatval($history[0]['number']) > 0.9 * $max_number; - // Formattazione dei contenuti dello storico foreach ($history as $key => $value) { - $history[$key]['size'] = (($history[$key]['size'])? Filesystem::formatBytes($value['size']) : '-' ); + $history[$key]['size'] = (($history[$key]['size']) ? Filesystem::formatBytes($value['size']) : '-'); //$history[$key]['invoices_size'] = Filesystem::formatBytes($value['invoices_size']); //$history[$key]['notifies_size'] = Filesystem::formatBytes($value['notifies_size']); } diff --git a/modules/stato_servizi/edit.php b/modules/stato_servizi/edit.php index fb9a6ff66..abf7a3ed5 100755 --- a/modules/stato_servizi/edit.php +++ b/modules/stato_servizi/edit.php @@ -94,22 +94,17 @@ if (Services::isEnabled()) { $risorse_attive = Services::getRisorseAttive(); if (!$risorse_attive->isEmpty()) { $risorse_in_scadenza = Services::getRisorseInScadenza($limite_scadenze); - + if (!$risorse_in_scadenza->isEmpty()) { echo ' '; - - }else{ - - echo ' + } else { + echo ' '; - } echo ' @@ -124,25 +119,23 @@ if (Services::isEnabled()) { '; - foreach ($risorse_attive as $servizio) { - $scadenza = Carbon::parse($servizio['expiration_at']); - echo ' + foreach ($risorse_attive as $servizio) { + $scadenza = Carbon::parse($servizio['expiration_at']); + echo ' '.$servizio['name'].' - '.(($servizio['credits']<100 && $servizio['credits'])? '': '' ).(($servizio['credits'])? $servizio['credits']: '-' ).(($servizio['credits']<100 && $servizio['credits'])? '': '' ).' - '.((Carbon::now()->diffInDays($scadenza, false)<60 && $scadenza)? '': '' ).dateFormat($scadenza).' ('.$scadenza->diffForHumans().')'.((Carbon::now()->diffInDays($scadenza, false)<60 && $scadenza)? '': '' ).' + '.(($servizio['credits'] < 100 && $servizio['credits']) ? '' : '').(($servizio['credits']) ? $servizio['credits'] : '-').(($servizio['credits'] < 100 && $servizio['credits']) ? '' : '').' + '.((Carbon::now()->diffInDays($scadenza, false) < 60 && $scadenza) ? '' : '').dateFormat($scadenza).' ('.$scadenza->diffForHumans().')'.((Carbon::now()->diffInDays($scadenza, false) < 60 && $scadenza) ? '' : '').' '; - } + } echo '
'; - - //Il servizio Fatturazione Elettronica deve essere presente per visualizzare le Statistiche su Fatture Elettroniche - if (Services::getRisorseAttive()->where('name','Fatturazione Elettronica')->count()){ - echo ' + if (Services::getRisorseAttive()->where('name', 'Fatturazione Elettronica')->count()) { + echo '
@@ -203,7 +196,6 @@ if (Services::isEnabled()) { aggiornaStatisticheFE(); }); '; - } } else { echo ' diff --git a/plugins/importFE/generate.php b/plugins/importFE/generate.php index 464c1d856..b414d736f 100755 --- a/plugins/importFE/generate.php +++ b/plugins/importFE/generate.php @@ -294,11 +294,11 @@ echo '
'; // Righe -if (setting('Aggiorna info di acquisto')=='Non aggiornare'){ +if (setting('Aggiorna info di acquisto') == 'Non aggiornare') { $update_info = 'update_not'; -} elseif (setting('Aggiorna info di acquisto')=='Aggiorna prezzo di listino'){ - $update_info ='update_price'; -} else{ +} elseif (setting('Aggiorna info di acquisto') == 'Aggiorna prezzo di listino') { + $update_info = 'update_price'; +} else { $update_info = 'update_all'; } @@ -358,7 +358,7 @@ if (!empty($righe)) { $id_articolo = $database->fetchOne('SELECT id_articolo AS id FROM mg_fornitore_articolo WHERE REPLACE(codice_fornitore, " ", "") = '.prepare($codice_principale).' AND id_fornitore = '.prepare($anagrafica->id))['id']; } } - + if (empty($id_articolo)) { $id_articolo = $database->fetchOne('SELECT id FROM mg_articoli WHERE codice = '.prepare($codice_principale))['id']; if (empty($id_articolo)) { diff --git a/plugins/importFE/src/FatturaElettronica.php b/plugins/importFE/src/FatturaElettronica.php index a6bef5108..313e964f3 100755 --- a/plugins/importFE/src/FatturaElettronica.php +++ b/plugins/importFE/src/FatturaElettronica.php @@ -21,9 +21,9 @@ namespace Plugins\ImportFE; use Modules; use Modules\Anagrafiche\Anagrafica; -use Modules\Banche\Banca; use Modules\Anagrafiche\Nazione; use Modules\Anagrafiche\Tipo as TipoAnagrafica; +use Modules\Banche\Banca; use Modules\Fatture\Fattura; use Modules\Fatture\Stato as StatoFattura; use Modules\Fatture\Tipo as TipoFattura; diff --git a/plugins/importFE/src/FatturaOrdinaria.php b/plugins/importFE/src/FatturaOrdinaria.php index 4d97b7b08..352556185 100755 --- a/plugins/importFE/src/FatturaOrdinaria.php +++ b/plugins/importFE/src/FatturaOrdinaria.php @@ -155,7 +155,7 @@ class FatturaOrdinaria extends FatturaElettronica if (!empty($articolo)) { $articolo->idconto_acquisto = $conto[$key]; $articolo->save(); - + $obj = Articolo::build($fattura, $articolo); $obj->movimentazione($movimentazione); @@ -242,11 +242,11 @@ class FatturaOrdinaria extends FatturaElettronica if ($tipo_sconto == 'PRC') { $sconto_calcolato = calcola_sconto([ 'sconto' => $sconto_riga, - 'prezzo' => $sconto_unitario ? $obj->prezzo_unitario-($sconto_calcolato/$obj->qta) : $obj->prezzo_unitario, + 'prezzo' => $sconto_unitario ? $obj->prezzo_unitario - ($sconto_calcolato / $obj->qta) : $obj->prezzo_unitario, 'tipo' => 'PRC', 'qta' => $obj->qta, ]); - + if ($tipo == 'PRC') { $tot_sconto = $sconto_calcolato * 100 / $obj->imponibile; } else { @@ -256,15 +256,15 @@ class FatturaOrdinaria extends FatturaElettronica $tot_sconto = $sconto_riga; } - $sconto_unitario += $tot_sconto; + $sconto_unitario += $tot_sconto; } - $obj->setSconto($sconto_unitario, $tipo); + $obj->setSconto($sconto_unitario, $tipo); } // Aggiornamento prezzo di acquisto e fornitore predefinito in base alle impostazioni if (!empty($articolo)) { - if ($update_info[$key]=='update_price' || $update_info[$key]=='update_all') { + if ($update_info[$key] == 'update_price' || $update_info[$key] == 'update_all') { $dettaglio_predefinito = DettaglioPrezzo::dettaglioPredefinito($articolo->id, $anagrafica->idanagrafica, $direzione) ->first(); @@ -272,7 +272,7 @@ class FatturaOrdinaria extends FatturaElettronica if (empty($dettaglio_predefinito)) { $dettaglio_predefinito = DettaglioPrezzo::build($articolo, $anagrafica, $direzione); } - + // Imposto lo sconto nel listino solo se è una percentuale, se è un importo lo sottraggo dal prezzo if ($tipo == 'PRC') { $dettaglio_predefinito->sconto_percentuale = $sconto_unitario; @@ -288,7 +288,7 @@ class FatturaOrdinaria extends FatturaElettronica $dettaglio_predefinito->save(); // Aggiornamento fornitore predefinito - if ($update_info[$key]=='update_all') { + if ($update_info[$key] == 'update_all') { // Aggiornamento prezzo di acquisto e fornitore predefinito $articolo->prezzo_acquisto = $prezzo_acquisto; $articolo->id_fornitore = $anagrafica->idanagrafica; @@ -296,11 +296,10 @@ class FatturaOrdinaria extends FatturaElettronica } } } - + $tipo = null; $sconto_unitario = null; $obj->save(); - } // Ricaricamento della fattura diff --git a/plugins/statistiche_anagrafiche/info.php b/plugins/statistiche_anagrafiche/info.php index 1844de015..67124b9d5 100755 --- a/plugins/statistiche_anagrafiche/info.php +++ b/plugins/statistiche_anagrafiche/info.php @@ -189,13 +189,13 @@ echo '
- +
'.tr('Fatture').' - '.($fatture_vendita->count()+$note_credito->count() > 0 ? ''.tr('Visualizza').' ' : '').' + '.($fatture_vendita->count() + $note_credito->count() > 0 ? ''.tr('Visualizza').' ' : '').'
- '.($fatture_vendita->count()+$note_credito->count()).'
+ '.($fatture_vendita->count() + $note_credito->count()).'
'.moneyFormat($totale_fatture_vendita).'
diff --git a/src/API/Services.php b/src/API/Services.php index 64ab8552c..a591fd31c 100755 --- a/src/API/Services.php +++ b/src/API/Services.php @@ -86,7 +86,7 @@ class Services return self::getServiziAttivi() ->flatten(1) ->filter(function ($item) use ($limite_scadenze) { - return (isset($item['data_conclusione']) && Carbon::parse($item['data_conclusione'])->lessThan($limite_scadenze)); + return isset($item['data_conclusione']) && Carbon::parse($item['data_conclusione'])->lessThan($limite_scadenze); }); } diff --git a/src/Common/Components/Component.php b/src/Common/Components/Component.php index 772c5dfe7..eaa825294 100644 --- a/src/Common/Components/Component.php +++ b/src/Common/Components/Component.php @@ -417,7 +417,7 @@ abstract class Component extends Model */ protected function customBeforeDataCopiaIn($original) { - if(!empty($original->idiva)){ + if (!empty($original->idiva)) { $this->idiva = $original->idiva; } } diff --git a/src/Models/Upload.php b/src/Models/Upload.php index f6daecb1c..26ac0a6a3 100755 --- a/src/Models/Upload.php +++ b/src/Models/Upload.php @@ -222,7 +222,7 @@ class Upload extends Model /** * @return string - */ + */ public static function getExtensionFromMimeType($file_content) { $finfo = finfo_open(); From 5955aeeb976ba9c027d136bc760ca2cb3e9cea99 Mon Sep 17 00:00:00 2001 From: Thomas Zilio Date: Mon, 18 Oct 2021 10:24:02 +0200 Subject: [PATCH 3/4] Aggiunti controllo sui permessi all'aggiornamento --- lib/functions.php | 21 ++++++++++++++------- src/Update.php | 7 +++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/lib/functions.php b/lib/functions.php index adf663fb2..d8bc82803 100755 --- a/lib/functions.php +++ b/lib/functions.php @@ -25,6 +25,10 @@ use HTMLBuilder\HTMLBuilder; use Models\OperationLog; +use Symfony\Component\Filesystem\Exception\IOException; +use Symfony\Component\Filesystem\Filesystem as SymfonyFilesystem; +use Symfony\Component\Finder\Finder; +use Util\FileSystem; /** * Esegue il redirect. @@ -71,12 +75,12 @@ function sanitizeFilename($filename) function delete($files) { // Filesystem Symfony - $fs = new Symfony\Component\Filesystem\Filesystem(); + $fs = new SymfonyFilesystem(); // Eliminazione try { $fs->remove($files); - } catch (Symfony\Component\Filesystem\Exception\IOException $e) { + } catch (IOException $e) { return false; } @@ -110,7 +114,7 @@ function copyr($source, $destination, $ignores = []) return false; } - $files = Symfony\Component\Finder\Finder::create() + $files = Finder::create() ->files() ->exclude((array) $ignores['dirs']) ->ignoreDotFiles(false) @@ -124,14 +128,17 @@ function copyr($source, $destination, $ignores = []) $result = true; // Filesystem Symfony - $fs = new Symfony\Component\Filesystem\Filesystem(); + $fs = new SymfonyFilesystem(); + + $fs->chmod($destination, 0777, 0000, true); + foreach ($files as $file) { $filename = rtrim($destination, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.$file->getRelativePathname(); - // Copia + // Copia effettiva del file try { - $fs->copy($file, $filename); - } catch (Symfony\Component\Filesystem\Exception\IOException $e) { + $fs->copy($file, $filename, true); + } catch (IOException $e) { $result = false; } } diff --git a/src/Update.php b/src/Update.php index bb507410d..e73cbeb23 100755 --- a/src/Update.php +++ b/src/Update.php @@ -17,6 +17,8 @@ * along with this program. If not, see . */ +use Symfony\Component\Filesystem\Filesystem as SymfonyFilesystem; + /** * Classe dedicata alla gestione delle procedure di aggiornamento del database del progetto. * @@ -208,6 +210,11 @@ class Update \Models\Cache::pool('Ultima versione di OpenSTAManager disponibile')->set(null); } + // Correzione permessi per le cartelle backup e files + $fs = new SymfonyFilesystem(); + $fs->chmod('backup', 0777, 0000, true); + $fs->chmod('files', 0777, 0000, true); + return true; } From 7bec13cc2ac3dced7e58c5254b11d2333c489834 Mon Sep 17 00:00:00 2001 From: Luca Date: Mon, 18 Oct 2021 15:55:20 +0200 Subject: [PATCH 4/4] Migliorati messaggi su stato dei servizi --- modules/stato_servizi/edit.php | 67 ++++++++++++---------- modules/stato_servizi/src/ServicesHook.php | 37 +++++++++--- src/API/Services.php | 34 ++++++++++- 3 files changed, 100 insertions(+), 38 deletions(-) diff --git a/modules/stato_servizi/edit.php b/modules/stato_servizi/edit.php index abf7a3ed5..efe6c1a7e 100755 --- a/modules/stato_servizi/edit.php +++ b/modules/stato_servizi/edit.php @@ -25,16 +25,16 @@ include_once __DIR__.'/../../core.php'; // Informazioni sui servizi attivi echo '
'; - -$limite_scadenze = (new Carbon())->addDays(60); +$days = 60; +$limite_scadenze = (new Carbon())->addDays($days); if (Services::isEnabled()) { echo '
-
+

- '.tr('Servizi attivi').' + '.tr('Servizi').'

@@ -43,12 +43,12 @@ if (Services::isEnabled()) { $servizi = Services::getServiziAttivi()->flatten(1); if (!$servizi->isEmpty()) { echo ' - +
+ - - + @@ -57,9 +57,9 @@ if (Services::isEnabled()) { $scadenza = Carbon::parse($servizio['data_conclusione']); echo ' - - + + '; } @@ -84,7 +84,7 @@ if (Services::isEnabled()) {

- '.tr('Risorse Services').' + '.tr('Risorse').'

@@ -94,26 +94,39 @@ if (Services::isEnabled()) { $risorse_attive = Services::getRisorseAttive(); if (!$risorse_attive->isEmpty()) { $risorse_in_scadenza = Services::getRisorseInScadenza($limite_scadenze); + $risorse_scadute = Services::getRisorseScadute(); - if (!$risorse_in_scadenza->isEmpty()) { - echo ' - '; + if (!$risorse_in_scadenza->isEmpty() || !$risorse_scadute->isEmpty() ) { + + if (!$risorse_in_scadenza->isEmpty()){ + echo ' + '; + + } + + if (!$risorse_scadute->isEmpty()){ + echo ' + '; + } + } else { echo ' -
'.tr('Nome').' '.tr('Tipo').''.tr('Nome').''.tr('Scadenza').''.tr('Scadenza').'
'.$servizio['sottocategoria'].'
'.$servizio['codice'].' - '.$servizio['nome'].''.$servizio['sottocategoria'].' '.dateFormat($scadenza).' ('.$scadenza->diffForHumans().')
+
- + @@ -122,24 +135,23 @@ if (Services::isEnabled()) { foreach ($risorse_attive as $servizio) { $scadenza = Carbon::parse($servizio['expiration_at']); echo ' - + - + '; } echo ' -
'.tr('Nome').' '.tr('Crediti').''.tr('Scadenza').''.tr('Scadenza').'
'.$servizio['name'].' '.(($servizio['credits'] < 100 && $servizio['credits']) ? '' : '').(($servizio['credits']) ? $servizio['credits'] : '-').(($servizio['credits'] < 100 && $servizio['credits']) ? '' : '').''.((Carbon::now()->diffInDays($scadenza, false) < 60 && $scadenza) ? '' : '').dateFormat($scadenza).' ('.$scadenza->diffForHumans().')'.((Carbon::now()->diffInDays($scadenza, false) < 60 && $scadenza) ? '' : '').''.((Carbon::now()->diffInDays($scadenza, false) < $days && $scadenza) ? '' : '').dateFormat($scadenza).' ('.$scadenza->diffForHumans().')'.((Carbon::now()->diffInDays($scadenza, false) < $days && $scadenza) ? '' : '').'

'; +
'; //Il servizio Fatturazione Elettronica deve essere presente per visualizzare le Statistiche su Fatture Elettroniche if (Services::getRisorseAttive()->where('name', 'Fatturazione Elettronica')->count()) { echo '
- -
'.tr('Statistiche su Fatture Elettroniche').'
+
'.tr('Statistiche su Fatture Elettroniche').'
@@ -161,7 +173,7 @@ if (Services::isEnabled()) {
- +
@@ -182,7 +194,7 @@ if (Services::isEnabled()) { - + @@ -205,9 +217,6 @@ if (Services::isEnabled()) { } echo ' - - - '; } else { /* @@ -303,7 +312,7 @@ function aggiornaStatisticheFE(){ const data = response.history[i]; if (data["year"] == '.date('Y').'){ - var highlight = ""; + var highlight = ""; var number = data["number"]; if (response.maxNumber>0 && response.maxNumber) diff --git a/modules/stato_servizi/src/ServicesHook.php b/modules/stato_servizi/src/ServicesHook.php index b7e12b1d3..45144d250 100644 --- a/modules/stato_servizi/src/ServicesHook.php +++ b/modules/stato_servizi/src/ServicesHook.php @@ -34,23 +34,46 @@ class ServicesHook extends Manager // Elaborazione dei servizi in scadenza $servizi_in_scadenza = Services::getServiziInScadenza($limite_scadenze); if (!$servizi_in_scadenza->isEmpty()) { - $message .= tr('I seguenti servizi sono in scadenza: _LIST_', [ - '_LIST_' => implode(', ', $servizi_in_scadenza->pluck('nome')->all()), - ]).'. '; + $message .= ' '; + $message .= tr('I seguenti servizi sono in scadenza:
  • _LIST_', [ + '_LIST_' => implode('
  • ', $servizi_in_scadenza->pluck('nome')->all()), + ]).'
'; } + + // Elaborazione delle risorse Services scadute + $risorse_scadute = Services::getRisorseScadute(); + if (!$risorse_scadute->isEmpty()) { + $message .= ' '; + $message .= tr('Le seguenti risorse sono scadute:
  • _LIST_', [ + '_LIST_' => implode('
  • ', $risorse_scadute->pluck('name')->all()), + ]).'
'; + } + + // Elaborazione dei servizi scaduti + $servizi_scaduti = Services::getServiziScaduti(); + if (!$servizi_scaduti->isEmpty()) { + $message .= ' '; + $message .= tr('I seguenti servizi sono scaduti:
  • _LIST_', [ + '_LIST_' => implode('
  • ', $servizi_scaduti->pluck('nome')->all()), + ]).'
'; + } + + // Elaborazione delle risorse Services in scadenza $risorse_in_scadenza = Services::getRisorseInScadenza($limite_scadenze); if (!$risorse_in_scadenza->isEmpty()) { - $message .= tr('Le seguenti risorse Services sono in scadenza: _LIST_', [ - '_LIST_' => implode(', ', $risorse_in_scadenza->pluck('name')->all()), - ]); + $message .= ' '; + $message .= tr('Le seguenti risorse sono in scadenza:
  • _LIST_', [ + '_LIST_' => implode('
  • ', $risorse_in_scadenza->pluck('name')->all()), + ]).'
'; } + $module = Module::pool('Stato dei servizi'); return [ - 'icon' => 'fa fa-refresh text-warning', + 'icon' => null, 'message' => $message, 'link' => base_path().'/controller.php?id_module='.$module->id, 'show' => Services::isEnabled() && !empty($message), diff --git a/src/API/Services.php b/src/API/Services.php index a591fd31c..b076b2969 100755 --- a/src/API/Services.php +++ b/src/API/Services.php @@ -86,7 +86,21 @@ class Services return self::getServiziAttivi() ->flatten(1) ->filter(function ($item) use ($limite_scadenze) { - return isset($item['data_conclusione']) && Carbon::parse($item['data_conclusione'])->lessThan($limite_scadenze); + return isset($item['data_conclusione']) && Carbon::parse($item['expiration_at'])->greaterThan(Carbon::now()) && Carbon::parse($item['data_conclusione'])->lessThan($limite_scadenze); + }); + } + + /** + * Restituisce i servizi scaduti. + * + * @return \Illuminate\Support\Collection + */ + public static function getServiziScaduti() + { + return self::getServiziAttivi() + ->flatten(1) + ->filter(function ($item) use ($limite_scadenze) { + return isset($item['data_conclusione']) && Carbon::parse($item['data_conclusione'])->lessThan(Carbon::now()); }); } @@ -123,11 +137,27 @@ class Services { return self::getRisorseAttive() ->filter(function ($item) use ($limite_scadenze) { - return (isset($item['expiration_at']) && Carbon::parse($item['expiration_at'])->lessThan($limite_scadenze)) + return (isset($item['expiration_at']) && Carbon::parse($item['expiration_at'])->greaterThan(Carbon::now()) && Carbon::parse($item['expiration_at'])->lessThan($limite_scadenze)) || (isset($item['credits']) && $item['credits'] < 100); }); } + + /** + * Restituisce le risorse scadute per assenza di crediti oppure per data di fine prossima. + * + * @return \Illuminate\Support\Collection + */ + public static function getRisorseScadute() + { + return self::getRisorseAttive() + ->filter(function ($item) use ($limite_scadenze) { + return (isset($item['expiration_at']) && Carbon::parse($item['expiration_at'])->lessThan(Carbon::now())) + || (isset($item['credits']) && $item['credits'] < 0); + }); + } + + /** * Effettua una richiesta a Services. *
'.tr('Anno').'
'.tr('Totale').'