diff --git a/modules/anagrafiche/actions.php b/modules/anagrafiche/actions.php index c20f11857..b3b12c870 100755 --- a/modules/anagrafiche/actions.php +++ b/modules/anagrafiche/actions.php @@ -270,7 +270,7 @@ switch (post('op')) { $dbo->query('UPDATE zz_users SET enabled = 0 WHERE idanagrafica = '.prepare($id_record)); // Disabilito anche il token $dbo->query('UPDATE zz_tokens SET enabled = 0 WHERE id_utente = '.prepare($id_utente)); - + flash()->info(tr('Anagrafica eliminata!')); } diff --git a/modules/anagrafiche/ajax/select.php b/modules/anagrafiche/ajax/select.php index 0db94105d..28901fe13 100755 --- a/modules/anagrafiche/ajax/select.php +++ b/modules/anagrafiche/ajax/select.php @@ -226,7 +226,7 @@ switch ($resource) { case 'sedi': if (isset($superselect['idanagrafica'])) { - $query = "SELECT * FROM (SELECT '0' AS id, CONCAT_WS(' - ', 'Sede legale' , (SELECT CONCAT (citta, ' (', ragione_sociale,')') FROM an_anagrafiche |where|)) AS descrizione UNION SELECT id, CONCAT_WS(' - ', nomesede, citta) FROM an_sedi |where|) AS tab HAVING descrizione LIKE ".prepare('%'.$search.'%')." ORDER BY descrizione"; + $query = "SELECT * FROM (SELECT '0' AS id, CONCAT_WS(' - ', 'Sede legale' , (SELECT CONCAT (citta, ' (', ragione_sociale,')') FROM an_anagrafiche |where|)) AS descrizione UNION SELECT id, CONCAT_WS(' - ', nomesede, citta) FROM an_sedi |where|) AS tab HAVING descrizione LIKE ".prepare('%'.$search.'%').' ORDER BY descrizione'; foreach ($elements as $element) { $filter[] = 'id='.prepare($element); diff --git a/modules/anagrafiche/src/Anagrafica.php b/modules/anagrafiche/src/Anagrafica.php index ee5c9ca9a..f8716a0d2 100755 --- a/modules/anagrafiche/src/Anagrafica.php +++ b/modules/anagrafiche/src/Anagrafica.php @@ -3,6 +3,7 @@ namespace Modules\Anagrafiche; use Common\Model; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\SoftDeletes; use Modules\Contratti\Contratto; use Modules\DDT\DDT; @@ -277,6 +278,20 @@ class Anagrafica extends Model return $this->hasMany(Fattura::class, 'idanagrafica'); } + public function fattureVendita() + { + return $this->fatture()->whereHas('tipo', function (Builder $query) { + $query->where('dir', 'entrata'); + }); + } + + public function fattureAcquisto() + { + return $this->fatture()->whereHas('tipo', function (Builder $query) { + $query->where('dir', 'uscita'); + }); + } + public function ordini() { return $this->hasMany(Ordine::class, 'idanagrafica'); diff --git a/modules/fatture/src/Components/RelationTrait.php b/modules/fatture/src/Components/RelationTrait.php index 527999578..88dcb0272 100755 --- a/modules/fatture/src/Components/RelationTrait.php +++ b/modules/fatture/src/Components/RelationTrait.php @@ -129,7 +129,7 @@ trait RelationTrait public function getIdContoAttribute() { - return $this->idconto; + return $this->attributes['idconto']; } public function setIdContoAttribute($value) diff --git a/modules/fatture/src/Fattura.php b/modules/fatture/src/Fattura.php index c1969b8b4..490ce8a31 100755 --- a/modules/fatture/src/Fattura.php +++ b/modules/fatture/src/Fattura.php @@ -6,6 +6,7 @@ use Auth; use Carbon\Carbon; use Common\Components\Description; use Common\Document; +use Illuminate\Database\Eloquent\Builder; use Modules\Anagrafiche\Anagrafica; use Modules\Fatture\Components\Riga; use Modules\Pagamenti\Pagamento; @@ -592,6 +593,20 @@ class Fattura extends Document return $result; } + /** + * Scope a query to only include popular users. + * + * @param \Illuminate\Database\Eloquent\Builder $query + * + * @return \Illuminate\Database\Eloquent\Builder + */ + public function scopeContabile($query) + { + return $query->whereHas('stato', function (Builder $query) { + $query->whereIn('descrizione', ['Emessa', 'Parzialmente pagato', 'Pagato']); + }); + } + /** * Restituisce i dati bancari in base al pagamento. * diff --git a/modules/scadenzario/edit.php b/modules/scadenzario/edit.php index 86e42ff7f..bb55ab08d 100755 --- a/modules/scadenzario/edit.php +++ b/modules/scadenzario/edit.php @@ -185,11 +185,11 @@ echo ' '.tr('Elimina').' '; -} + } echo ' diff --git a/modules/utenti/actions.php b/modules/utenti/actions.php index 576a0a309..c8725ed56 100755 --- a/modules/utenti/actions.php +++ b/modules/utenti/actions.php @@ -119,7 +119,7 @@ switch (filter('op')) { $utente = User::find($id_utente); $tokens = $utente->getApiTokens(); - foreach ($tokens as $token){ + foreach ($tokens as $token) { $dbo->query('UPDATE zz_tokens SET enabled = 1 WHERE id = '.prepare($token['id'])); } @@ -131,7 +131,7 @@ switch (filter('op')) { $utente = User::find($id_utente); $tokens = $utente->getApiTokens(); - foreach ($tokens as $token){ + foreach ($tokens as $token) { $dbo->query('UPDATE zz_tokens SET enabled = 0 WHERE id = '.prepare($token['id'])); } diff --git a/modules/utenti/edit.php b/modules/utenti/edit.php index 9b028ed97..a5bfdb98b 100755 --- a/modules/utenti/edit.php +++ b/modules/utenti/edit.php @@ -75,15 +75,13 @@ if (!empty($utenti)) { // Disabilitazione token API, se diverso da id_utente #1 (admin) $token = $dbo->fetchOne('SELECT `enabled` FROM `zz_tokens` WHERE `id_utente` = '.prepare($utente['id']).'')['enabled']; - + if ($utente['id'] == '1') { echo ' '; } elseif (!empty($token)) { - - echo ' diff --git a/plugins/exportFE/src/FatturaElettronica.php b/plugins/exportFE/src/FatturaElettronica.php index 2e076b002..567e36359 100755 --- a/plugins/exportFE/src/FatturaElettronica.php +++ b/plugins/exportFE/src/FatturaElettronica.php @@ -589,7 +589,6 @@ class FatturaElettronica } //Rimuovo eventuali idicazioni relative alla nazione $result['IdFiscaleIVA']['IdCodice'] = str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']); - } // Codice fiscale @@ -598,9 +597,9 @@ class FatturaElettronica $result['CodiceFiscale'] = preg_replace('/\s+/', '', $anagrafica['codice_fiscale']); //$result['CodiceFiscale'] = str_replace($anagrafica->nazione->iso2, '', $result['CodiceFiscale']); - + //Rimuovo eventuali idicazioni relative all'iso2 della nazione, solo se la stringa inizia con quest'ultima. - $result['CodiceFiscale'] = preg_replace('/^' . preg_quote($anagrafica->nazione->iso2, '/') . '/', '', $anagrafica['codice_fiscale']); + $result['CodiceFiscale'] = preg_replace('/^'.preg_quote($anagrafica->nazione->iso2, '/').'/', '', $anagrafica['codice_fiscale']); } if (!empty($anagrafica['nome']) or !empty($anagrafica['cognome'])) { diff --git a/plugins/importFE/actions.php b/plugins/importFE/actions.php index 45077f2aa..fb2a41311 100755 --- a/plugins/importFE/actions.php +++ b/plugins/importFE/actions.php @@ -166,4 +166,78 @@ switch (filter('op')) { } break; + + case 'compile': + $fatture = $anagrafica->fattureAcquisto() + ->contabile() + ->orderByDesc('created_at') + ->take(10) + ->get(); + + $righe = collect(); + foreach ($fatture as $fattura) { + $righe->push($fattura->righe); + $righe->push($fattura->articoli); + } + $righe = $righe->flatten(); + + // Ricerca del tipo di documento più utilizzato + $tipi = $fatture->groupBy(function ($item, $key) { + return $item->tipo->id; + })->transform(function ($item, $key) { + return $item->count(); + }); + $id_tipo = $tipi->sort()->keys()->last(); + + // Ricerca del tipo di pagamento più utilizzato + $pagamenti = $fatture->mapToGroups(function ($item, $key) { + return [$item->pagamento->id => $item->pagamento]; + }); + $id_pagamento = $pagamenti->map(function ($item, $key) { + return $item->count(); + })->sort()->keys()->last(); + $pagamento = $pagamenti[$id_pagamento]->first(); + + // Ricerca del conto più utilizzato + $conti = $righe->groupBy(function ($item, $key) { + return $item->idconto; + })->transform(function ($item, $key) { + return $item->count(); + }); + $id_conto = $conti->sort()->keys()->last(); + $conto = $dbo->fetchOne('SELECT * FROM co_pianodeiconti3 WHERE id = '.prepare($id_conto)); + + // Ricerca dell'IVA più utilizzata secondo percentuali + $iva = []; + $percentuali_iva = $righe->groupBy(function ($item, $key) { + return $item->aliquota->percentuale; + }); + foreach ($percentuali_iva as $key => $values) { + $aliquote = $values->mapToGroups(function ($item, $key) { + return [$item->aliquota->id => $item->aliquota]; + }); + $id_aliquota = $aliquote->map(function ($item, $key) { + return $item->count(); + })->sort()->keys()->last(); + $aliquota = $aliquote[$id_aliquota]->first(); + + $iva[$key] = [ + 'id' => $aliquota->id, + 'descrizione' => $aliquota->descrizione, + ]; + } + + echo json_encode([ + 'id_tipo' => $id_tipo, + 'pagamento' => [ + 'id' => $pagamento->id, + 'descrizione' => $pagamento->descrizione, + ], + 'conto' => [ + 'id' => $conto['id'], + 'descrizione' => $conto['descrizione'], + ], + 'iva' => $iva, + ]); + break; } diff --git a/plugins/importFE/buttons.php b/plugins/importFE/buttons.php new file mode 100644 index 000000000..8c6c34ed1 --- /dev/null +++ b/plugins/importFE/buttons.php @@ -0,0 +1,47 @@ + + '.tr('Compila automaticamente').' + + +'; diff --git a/plugins/importFE/generate.php b/plugins/importFE/generate.php index ed60d30e0..d5c54e398 100755 --- a/plugins/importFE/generate.php +++ b/plugins/importFE/generate.php @@ -310,6 +310,8 @@ if (!empty($righe)) { '_VALUE_' => empty($riga['Natura']) ? numberFormat($riga['AliquotaIVA']).'%' : $riga['Natura'], '_DESC_' => $riga['RiferimentoNormativo'] ? ' - '.$riga['RiferimentoNormativo'] : '', ]).' + + '.$riga['AliquotaIVA'].'
{[ "type": "select", "name": "iva['.$key.']", "values": "query='.str_replace('"', '\"', $query).'", "required": 1, "placeholder": "Aliquota iva" ]} diff --git a/src/Models/User.php b/src/Models/User.php index 2091e4722..ab54cfa74 100755 --- a/src/Models/User.php +++ b/src/Models/User.php @@ -172,7 +172,8 @@ class User extends Model return $anagrafica->ragione_sociale.' ('.$this->username.')'; } - public function getApiTokens(){ + public function getApiTokens() + { $query = 'SELECT * FROM `zz_tokens` WHERE `enabled` = 1 AND `id_utente` = '.prepare($this->id); $database = database();