Miglioramento gestione conti

This commit is contained in:
Thomas Zilio 2018-11-23 17:50:05 +01:00
parent 0a83b4d4d6
commit e72020197e
3 changed files with 123 additions and 83 deletions

View File

@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Builder;
abstract class Row extends Description
{
protected $prezzo_unitario_vendita;
protected $prezzo_unitario_vendita_riga;
protected static function boot($bypass = false)
{
@ -24,9 +24,58 @@ abstract class Row extends Description
return parent::make(true);
}
public function getSubtotaleAttribute()
{
return $this->prezzo_unitario_vendita * $this->qta;
}
public function getImponibileAttribute()
{
return $this->subtotale;
}
public function getImponibileScontatoAttribute()
{
return $this->imponibile - $this->sconto;
}
public function getTotaleAttribute()
{
return $this->subtotale + $this->iva;
return $this->imponibile_scontato + $this->iva + $this->rivalsa_inps;
}
public function getNettoAttribute()
{
return $this->totale - $this->ritenuta_acconto;
}
public function getRivalsaINPSAttribute()
{
return $this->attributes['rivalsainps'];
}
public function getRitenutaAccontoAttribute()
{
return $this->attributes['ritenutaacconto'];
}
public function getIvaIndetraibileAttribute()
{
return $this->attributes['iva_indetraibile'];
}
public function getIvaAttribute()
{
$percentuale = database()->fetchOne('SELECT percentuale FROM co_iva WHERE id = :id', [
':id' => $this->idiva,
])['percentuale'];
return ($this->imponibile_scontato + $this->rivalsa_inps) * $percentuale /100;
}
public function getIvaDetraibileAttribute()
{
return $this->iva - $this->iva_indetraibile;
}
/**
@ -211,7 +260,7 @@ abstract class Row extends Description
*/
public function setPrezzoUnitarioVenditaAttribute($value)
{
$this->prezzo_unitario_vendita = $value;
$this->prezzo_unitario_vendita_riga = $value;
$this->fixSubtotale();
$this->fixSconto();
@ -222,11 +271,11 @@ abstract class Row extends Description
*/
public function getPrezzoUnitarioVenditaAttribute()
{
if (empty($this->prezzo_unitario_vendita)) {
$this->prezzo_unitario_vendita = $this->subtotale / $this->qta;
if (empty($this->prezzo_unitario_vendita_riga)) {
$this->prezzo_unitario_vendita_riga = $this->attributes['subtotale'] / $this->qta;
}
return $this->prezzo_unitario_vendita;
return $this->prezzo_unitario_vendita_riga;
}
/**

View File

@ -66,7 +66,7 @@ if (!empty($rs2)) {
<td>'.$r['movimento'].'
'.((!empty($r['idintervento'])) ? Modules::link('Interventi', $r['idintervento']) : '').'
'.((!empty($r['idautomezzo'])) ? Modules::link('Automezzi', $r['idautomezzo']) : '').'
'.((!empty($r['iddt'])) ? Modules::link('DDt di '.$dir.'', $r['iddt']) : '').'
'.((!empty($r['idddt'])) ? Modules::link('DDt di '.$dir, $r['idddt']) : '').'
'.((!empty($r['iddocumento'])) ? Modules::link('Fatture di '.$dir.'', $r['iddocumento']) : '').'
</td>';

View File

@ -10,9 +10,6 @@ class Fattura extends Model
{
protected $table = 'co_documenti';
/** @var array Conti rilevanti della fattura */
protected $conti = [];
/**
* Crea una nuova fattura.
*
@ -212,99 +209,93 @@ class Fattura extends Model
}
/**
* Calcola l'imponibile della fattura (totale delle righe - sconto).
* Restituisce la collezione di righe e articoli con valori rilevanti per i conti.
*
* @return iterable
*/
protected function getRighe()
{
return $this->righe->merge($this->articoli);
}
/**
* Calcola l'imponibile della fattura.
*
* @return float
*/
public function getImponibile()
{
if (!isset($this->conti['imponibile'])) {
$result = database()->fetchOne('SELECT SUM(co_righe_documenti.subtotale - co_righe_documenti.sconto) AS imponibile FROM co_righe_documenti WHERE iddocumento = :id', [
':id' => $this->id,
]);
$this->conti['imponibile'] = $result['imponibile'];
}
return $this->conti['imponibile'];
return $result['imponibile'];
return $this->getRighe()->sum('imponibile');
}
/**
* Calcola il totale della fattura (imponibile + iva).
* Calcola lo sconto totale della fattura.
*
* @return float
*/
public function getSconto()
{
return $this->getRighe()->sum('sconto');
}
/**
* Calcola l'imponibile scontato della fattura.
*
* @return float
*/
public function getImponibileScontato()
{
return $this->getRighe()->sum('imponibile_scontato');
}
/**
* Calcola l'IVA totale della fattura.
*
* @return float
*/
public function getIva()
{
return $this->getRighe()->sum('iva');
}
/**
* Calcola la rivalsa INPS totale della fattura.
*
* @return float
*/
public function getRivalsaINPS()
{
return $this->getRighe()->sum('rivalsa_inps');
}
/**
* Calcola la ritenuta d'acconto totale della fattura.
*
* @return float
*/
public function getRitenutaAcconto()
{
return $this->getRighe()->sum('ritenuta_acconto');
}
/**
* Calcola il totale della fattura.
*
* @return float
*/
public function getTotale()
{
if (!isset($this->conti['totale'])) {
// Sommo l'iva di ogni riga al totale
$iva = $this->righe()->sum('iva');
$iva_rivalsainps = database()->fetchArray('SELECT SUM(rivalsainps / 100 * percentuale) AS iva_rivalsainps FROM co_righe_documenti INNER JOIN co_iva ON co_iva.id = co_righe_documenti.idiva WHERE iddocumento = :id', [
':id' => $this->id,
])['iva_rivalsainps'];
$totale = sum([
$this->getImponibile(),
$this->rivalsainps,
$iva,
$iva_rivalsainps,
]);
$this->conti['totale'] = $totale;
}
return $this->conti['totale'];
return $this->getRighe()->sum('totale');
}
/**
* Calcola il netto a pagare della fattura (totale - ritenute - bolli).
* Calcola il netto a pagare della fattura.
*
* @return float
*/
public function getNetto($iddocumento)
public function getNetto()
{
if (!isset($this->conti['netto'])) {
$netto = sum([
$this->getTotale(),
$this->bollo,
-$this->ritenutaacconto,
]);
$this->conti['netto'] = $netto;
}
return $this->conti['netto'];
}
/**
* Calcola l'iva detraibile della fattura.
*
* @return float
*/
public function getIvaDetraibile()
{
if (!isset($this->conti['iva_detraibile'])) {
$this->conti['iva_detraibile'] = $this->righe()->sum('iva') - $this->getIvaIndetraibile();
}
return $this->conti['iva_detraibile'];
}
/**
* Calcolo l'iva indetraibile della fattura.
*
* @return float
*/
public function getIvaIndetraibile()
{
if (!isset($this->conti['iva_indetraibile'])) {
$this->conti['iva_indetraibile'] = $this->righe()->sum('iva_indetraibile');
}
return $this->conti['iva_indetraibile'];
return $this->getRighe()->sum('netto') + $this->bollo;
}
/**