|
Server : Apache/2.4.41 (Ubuntu) System : Linux vmi1525618.contaboserver.net 5.4.0-105-generic #119-Ubuntu SMP Mon Mar 7 18:49:24 UTC 2022 x86_64 User : www-data ( 33) PHP Version : 8.2.12 Disable Function : NONE Directory : /var/www/erp.theinteractive.co.in/app/Models/ |
Upload File : |
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Invoice extends Model
{
protected $fillable = [
'invoice_id',
'customer_id',
'issue_date',
'due_date',
'ref_number',
'status',
'category_id',
'created_by',
];
public static $statues = [
'Draft',
'Sent',
'Unpaid',
'Partialy Paid',
'Paid',
];
public function tax()
{
return $this->hasOne('App\Models\Tax', 'id', 'tax_id');
}
public function items()
{
return $this->hasMany('App\Models\InvoiceProduct', 'invoice_id', 'id');
}
public function payments()
{
return $this->hasMany('App\Models\InvoicePayment', 'invoice_id', 'id');
}
public function bankPayments()
{
return $this->hasMany('App\Models\InvoiceBankTransfer', 'invoice_id', 'id')->where('status','!=','Approved');
}
public function customer()
{
return $this->hasOne('App\Models\Customer', 'id', 'customer_id');
}
// private static $getTotal = NULL;
// public static function getTotal(){
// if(self::$getTotal == null){
// $Invoice = new Invoice();
// self::$getTotal = $Invoice->invoiceTotal();
// }
// return self::$getTotal;
// }
public function getTotal()
{
return ($this->getSubTotal() -$this->getTotalDiscount()) + $this->getTotalTax();
}
public function getSubTotal()
{
$subTotal = 0;
foreach($this->items as $product)
{
$subTotal += ($product->price * $product->quantity);
}
return $subTotal;
}
// public function getTotalTax()
// {
// $totalTax = 0;
// foreach($this->items as $product)
// {
// $taxes = Utility::totalTaxRate($product->tax);
// $totalTax += ($taxes / 100) * ($product->price * $product->quantity - $product->discount) ;
// }
// return $totalTax;
// }
public function getTotalTax()
{
$taxData = Utility::getTaxData();
$totalTax = 0;
foreach($this->items as $product)
{
// $taxes = Utility::totalTaxRate($product->tax);
$taxArr = explode(',', $product->tax);
$taxes = 0;
foreach ($taxArr as $tax) {
// $tax = TaxRate::find($tax);
$taxes += !empty($taxData[$tax]['rate']) ? $taxData[$tax]['rate'] : 0;
}
$totalTax += ($taxes / 100) * ($product->price * $product->quantity);
}
return $totalTax;
}
public function getTotalDiscount()
{
$totalDiscount = 0;
foreach($this->items as $product)
{
$totalDiscount += $product->discount;
}
return $totalDiscount;
}
public function getDue()
{
$due = 0;
foreach($this->payments as $payment)
{
$due += $payment->amount;
}
return ($this->getTotal() - $due) - $this->invoiceTotalCreditNote();
}
public static function change_status($invoice_id, $status)
{
$invoice = Invoice::find($invoice_id);
$invoice->status = $status;
$invoice->update();
}
public function category()
{
return $this->hasOne('App\Models\ProductServiceCategory', 'id', 'category_id');
}
public function creditNote()
{
return $this->hasMany('App\Models\CreditNote', 'invoice', 'id');
}
public function invoiceTotalCreditNote()
{
return $this->creditNote->sum('amount');
}
public function lastPayments()
{
return $this->hasOne('App\Models\InvoicePayment', 'id', 'invoice_id');
}
public function taxes()
{
return $this->hasOne('App\Models\Tax', 'id', 'tax');
}
public function products()
{
return $this->hasMany(InvoiceProduct::class);
}
}