|
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 Bill extends Model
{
protected $fillable = [
'vender_id',
'currency',
'bill_date',
'due_date',
'bill_id',
'order_number',
'category_id',
'created_by',
];
public static $statues = [
'Draft',
'Sent',
'Unpaid',
'Partialy Paid',
'Paid',
];
public function customer()
{
return $this->hasOne('App\Models\Customer', 'id', 'vender_id');
}
public function employee()
{
return $this->hasOne('App\Models\Employee', 'id', 'vender_id');
}
public function vender()
{
return $this->hasOne('App\Models\Vender', 'id', 'vender_id');
}
public function tax()
{
return $this->hasOne('App\Models\Tax', 'id', 'tax_id');
}
public function accounts()
{
return $this->hasMany('App\Models\BillAccount', 'ref_id', 'id');
}
public function payments()
{
return $this->hasMany('App\Models\BillPayment', 'bill_id', 'id');
}
public function getSubTotal()
{
$subTotal = 0;
foreach($this->items as $product)
{
$subTotal += ($product->price * $product->quantity);
}
$accountTotal = 0;
foreach ($this->accounts as $account)
{
$accountTotal += $account->price;
}
return $subTotal + $accountTotal;
}
public function items()
{
return $this->hasMany('App\Models\BillProduct', 'bill_id', 'id');
}
// 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 getAccountTotal()
{
$accountTotal = 0;
foreach ($this->accounts as $account)
{
$accountTotal += $account->price;
}
return $accountTotal;
}
public function getTotal()
{
return ($this->getSubTotal() - $this->getTotalDiscount()) + $this->getTotalTax();
}
public function getDue()
{
$due = 0;
foreach($this->payments as $payment)
{
$due += $payment->amount;
}
return ($this->getTotal() - $due) - ($this->billTotalDebitNote());
}
public function category()
{
return $this->hasOne('App\Models\ProductServiceCategory', 'id', 'category_id');
}
public function debitNote()
{
return $this->hasMany('App\Models\DebitNote', 'bill', 'id');
}
public function billTotalDebitNote()
{
return $this->debitNote->sum('amount');
}
public function lastPayments()
{
return $this->hasOne('App\Models\BillPayment', 'id', 'bill_id');
}
public function taxes()
{
return $this->hasOne('App\Models\Tax', 'id', 'tax');
}
}