Introduzione compilazione automatica FE
This commit is contained in:
parent
cbbc4069ab
commit
73d627a062
|
@ -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);
|
||||
|
|
|
@ -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');
|
||||
|
|
|
@ -129,7 +129,7 @@ trait RelationTrait
|
|||
|
||||
public function getIdContoAttribute()
|
||||
{
|
||||
return $this->idconto;
|
||||
return $this->attributes['idconto'];
|
||||
}
|
||||
|
||||
public function setIdContoAttribute($value)
|
||||
|
|
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -185,11 +185,11 @@ echo '
|
|||
|
||||
<?php
|
||||
if (empty($documento)) {
|
||||
echo '
|
||||
echo '
|
||||
<a class="btn btn-danger ask" data-backto="record-list">
|
||||
<i class="fa fa-trash"></i> '.tr('Elimina').'
|
||||
</a>';
|
||||
}
|
||||
}
|
||||
|
||||
echo '
|
||||
<table class="hide">
|
||||
|
|
|
@ -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']));
|
||||
}
|
||||
|
||||
|
|
|
@ -82,8 +82,6 @@ if (!empty($utenti)) {
|
|||
<i class="fa fa-2x fa-key "></i>
|
||||
</span>';
|
||||
} elseif (!empty($token)) {
|
||||
|
||||
|
||||
echo '
|
||||
<a title="'.tr('Disabilita API').'" class="text-danger clickable tip ask" data-msg="" data-backto="record-edit" data-title="'.tr("Disabilitare l'accesso API per questo utente?").'" data-op="token_disable" data-id_utente="'.$utente['id'].'" data-button="'.tr('Disabilita').'">
|
||||
<i class="fa fa-2x fa-key"></i>
|
||||
|
|
|
@ -589,7 +589,6 @@ class FatturaElettronica
|
|||
}
|
||||
//Rimuovo eventuali idicazioni relative alla nazione
|
||||
$result['IdFiscaleIVA']['IdCodice'] = str_replace($anagrafica->nazione->iso2, '', $anagrafica['piva']);
|
||||
|
||||
}
|
||||
|
||||
// Codice fiscale
|
||||
|
@ -600,7 +599,7 @@ class FatturaElettronica
|
|||
//$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'])) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
<?php
|
||||
|
||||
echo '
|
||||
<button type="button" class="btn btn-primary tip" '.(!empty($anagrafica) ? '' : 'disabled').' onclick="compile(this)" title="'.tr('Tenta la compilazione automatica delle informazioni delle fattura elettronica sulla base delle precedenti fatture del Fornitore').'.">
|
||||
<i class="fa fa-address-book"></i> '.tr('Compila automaticamente').'
|
||||
</button>
|
||||
|
||||
<script>
|
||||
function compile(btn) {
|
||||
var restore = buttonLoading(btn);
|
||||
|
||||
$.ajax({
|
||||
url: globals.rootdir + "/actions.php",
|
||||
cache: false,
|
||||
type: "GET",
|
||||
data: {
|
||||
id_module: "'.$id_module.'",
|
||||
id_plugin: "'.$id_plugin.'",
|
||||
id_record: "'.$id_record.'",
|
||||
op: "compile",
|
||||
},
|
||||
success: function(response) {
|
||||
var data = JSON.parse(response);
|
||||
console.log(data);
|
||||
|
||||
$("#id_tipo").selectSet(data.id_tipo);
|
||||
$("#pagamento").selectSetNew(data.pagamento.id, data.pagamento.descrizione);
|
||||
|
||||
$("select[name^=iva]").each(function(){
|
||||
var aliquota = $(this).closest("tr").find("[id^=aliquota]").text();
|
||||
$(this).selectSet(data.iva[aliquota].id);
|
||||
});
|
||||
|
||||
$("select[name^=conto]").each(function(){
|
||||
$(this).selectSetNew(data.conto.id, data.conto.descrizione);
|
||||
});
|
||||
|
||||
buttonRestore(btn, restore);
|
||||
},
|
||||
error: function(data) {
|
||||
swal("'.tr('Errore').'", "'.tr('La compilazione automatica dei campi non è andata a buon fine').'.", "error");
|
||||
|
||||
buttonRestore(btn, restore);
|
||||
}
|
||||
});
|
||||
}
|
||||
</script>';
|
|
@ -310,6 +310,8 @@ if (!empty($righe)) {
|
|||
'_VALUE_' => empty($riga['Natura']) ? numberFormat($riga['AliquotaIVA']).'%' : $riga['Natura'],
|
||||
'_DESC_' => $riga['RiferimentoNormativo'] ? ' - '.$riga['RiferimentoNormativo'] : '',
|
||||
]).'</small>
|
||||
|
||||
<span class="hide" id="aliquota['.$key.']">'.$riga['AliquotaIVA'].'</span>
|
||||
</td>
|
||||
<td>
|
||||
{[ "type": "select", "name": "iva['.$key.']", "values": "query='.str_replace('"', '\"', $query).'", "required": 1, "placeholder": "Aliquota iva" ]}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
Loading…
Reference in New Issue