+ '.tr('Nome').' |
'.tr('Tipo').' |
- '.tr('Nome').' |
- '.tr('Scadenza').' |
+ '.tr('Scadenza').' |
@@ -57,9 +57,9 @@ if (Services::isEnabled()) {
$scadenza = Carbon::parse($servizio['data_conclusione']);
echo '
-
- '.$servizio['sottocategoria'].' |
+
'.$servizio['codice'].' - '.$servizio['nome'].' |
+ '.$servizio['sottocategoria'].' |
'.dateFormat($scadenza).' ('.$scadenza->diffForHumans().') |
';
}
@@ -84,7 +84,7 @@ if (Services::isEnabled()) {
@@ -94,59 +94,64 @@ 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() || !$risorse_scadute->isEmpty() ) {
+
+ if (!$risorse_in_scadenza->isEmpty()){
+ echo '
+
'.tr('Attenzione, _NUM_ risorse sono in scadenza o stanno per esaurire i crediti:', [
+ '_NUM_' => $risorse_in_scadenza->count(),
+ ]).'
';
+
+ }
+
+ if (!$risorse_scadute->isEmpty()){
+ echo '
+
'.tr('Attenzione, _NUM_ risorse sono scadute o hanno esaurito i crediti:', [
+ '_NUM_' => $risorse_scadute->count(),
+ ]).'
';
+ }
- if (!$risorse_in_scadenza->isEmpty()) {
+ } else {
echo '
-
'.tr('Attenzione, _NUM_ risorse sono in scadenza:', [
-
- '_NUM_' => $risorse_in_scadenza->count()
-
- ]).'
';
-
- }else{
-
- echo '
-
'.tr('Bene, tutte le risorse sono attive e non presentano avvisi:', [
- '_NUM_' => $risorse_attive->count()
+
'.tr('Bene, tutte le risorse sono attive e non presentano avvisi:', [
+ '_NUM_' => $risorse_attive->count(),
]).'
';
-
}
echo '
-
+
'.tr('Nome').' |
'.tr('Crediti').' |
- '.tr('Scadenza').' |
+ '.tr('Scadenza').' |
';
- 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) < $days && $scadenza) ? '' : '').dateFormat($scadenza).' ('.$scadenza->diffForHumans().')'.((Carbon::now()->diffInDays($scadenza, false) < $days && $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 '
-
-
'.tr('Statistiche su Fatture Elettroniche').'
+
'.tr('Statistiche su Fatture Elettroniche').'
@@ -168,7 +173,7 @@ if (Services::isEnabled()) {
-
+
'.tr('Anno').' |
@@ -189,7 +194,7 @@ if (Services::isEnabled()) {
-
+
'.tr('Totale').' |
|
|
@@ -203,7 +208,6 @@ if (Services::isEnabled()) {
aggiornaStatisticheFE();
});
';
-
}
} else {
echo '
@@ -213,9 +217,6 @@ if (Services::isEnabled()) {
}
echo '
-
-
-
';
} else {
/*
@@ -311,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/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..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.
*
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 e5dd849a1..26ac0a6a3 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
*/
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;
}