78 lines
1.6 KiB
PHP
78 lines
1.6 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace App\Models;
|
||
|
|
|
||
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||
|
|
use Illuminate\Database\Eloquent\Model;
|
||
|
|
|
||
|
|
class Invoice extends Model
|
||
|
|
{
|
||
|
|
use HasFactory;
|
||
|
|
|
||
|
|
protected $fillable = [
|
||
|
|
'order_id',
|
||
|
|
'customer_id',
|
||
|
|
'mark_no',
|
||
|
|
|
||
|
|
'invoice_number',
|
||
|
|
'invoice_date',
|
||
|
|
'due_date',
|
||
|
|
|
||
|
|
'payment_method',
|
||
|
|
'reference_no',
|
||
|
|
'status',
|
||
|
|
|
||
|
|
'final_amount',
|
||
|
|
'gst_percent',
|
||
|
|
'gst_amount',
|
||
|
|
'final_amount_with_gst',
|
||
|
|
|
||
|
|
'customer_name',
|
||
|
|
'company_name',
|
||
|
|
'customer_email',
|
||
|
|
'customer_mobile',
|
||
|
|
'customer_address',
|
||
|
|
'pincode',
|
||
|
|
|
||
|
|
'pdf_path',
|
||
|
|
'notes',
|
||
|
|
];
|
||
|
|
|
||
|
|
/****************************
|
||
|
|
* Relationships
|
||
|
|
****************************/
|
||
|
|
|
||
|
|
public function items()
|
||
|
|
{
|
||
|
|
return $this->hasMany(InvoiceItem::class)->orderBy('id', 'ASC');
|
||
|
|
}
|
||
|
|
|
||
|
|
public function order()
|
||
|
|
{
|
||
|
|
return $this->belongsTo(Order::class);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function customer()
|
||
|
|
{
|
||
|
|
return $this->belongsTo(User::class, 'customer_id');
|
||
|
|
}
|
||
|
|
|
||
|
|
/****************************
|
||
|
|
* Helper Functions
|
||
|
|
****************************/
|
||
|
|
|
||
|
|
// Auto calculate GST fields (you can call this in controller before saving)
|
||
|
|
public function calculateTotals()
|
||
|
|
{
|
||
|
|
$gst = ($this->final_amount * $this->gst_percent) / 100;
|
||
|
|
$this->gst_amount = $gst;
|
||
|
|
$this->final_amount_with_gst = $this->final_amount + $gst;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Check overdue status condition
|
||
|
|
public function isOverdue()
|
||
|
|
{
|
||
|
|
return $this->status === 'pending' && now()->gt($this->due_date);
|
||
|
|
}
|
||
|
|
}
|