Files
Kent-logistics-Laravel/app/Models/Invoice.php

113 lines
2.5 KiB
PHP
Raw Normal View History

2025-11-17 10:33:11 +05:30
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Invoice extends Model
{
use HasFactory;
2026-02-27 10:51:26 +05:30
protected $fillable = [
'container_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',
];
2025-11-17 10:33:11 +05:30
/****************************
* Relationships
****************************/
public function items()
{
return $this->hasMany(InvoiceItem::class)->orderBy('id', 'ASC');
}
2026-02-27 10:51:26 +05:30
public function container()
2025-11-17 10:33:11 +05:30
{
2026-02-27 10:51:26 +05:30
return $this->belongsTo(Container::class);
2025-11-17 10:33:11 +05:30
}
public function customer()
{
return $this->belongsTo(User::class, 'customer_id');
}
2026-02-27 10:51:26 +05:30
public function installments()
{
return $this->hasMany(InvoiceInstallment::class);
}
// ✅ SINGLE, correct relation
public function chargeGroups()
{
return $this->hasMany(\App\Models\InvoiceChargeGroup::class, 'invoice_id');
}
2025-11-17 10:33:11 +05:30
/****************************
* Helper Functions
****************************/
public function calculateTotals()
{
$gst = ($this->final_amount * $this->gst_percent) / 100;
2026-02-27 10:51:26 +05:30
$this->gst_amount = $gst;
2025-11-17 10:33:11 +05:30
$this->final_amount_with_gst = $this->final_amount + $gst;
}
public function isOverdue()
{
return $this->status === 'pending' && now()->gt($this->due_date);
}
2025-11-25 13:14:53 +05:30
public function getShipment()
{
2026-02-27 10:51:26 +05:30
return null;
2025-11-25 13:14:53 +05:30
}
2026-02-27 10:51:26 +05:30
// ✅ Charge groups total accessor
public function getChargeGroupsTotalAttribute()
{
// relation already loaded असेल तर collection वरून sum होईल
return (float) $this->chargeGroups->sum('total_charge');
}
2025-11-25 13:14:53 +05:30
2026-02-27 10:51:26 +05:30
// ✅ Grand total accessor (items + GST + charge groups)
public function getGrandTotalWithChargesAttribute()
{
return (float) ($this->final_amount_with_gst ?? 0) + $this->charge_groups_total;
}
2025-12-22 19:22:01 +05:30
2026-02-27 10:51:26 +05:30
public function totalPaid()
2025-12-22 19:22:01 +05:30
{
2026-02-27 10:51:26 +05:30
return $this->installments->sum('amount');
2025-12-22 19:22:01 +05:30
}
2026-02-27 10:51:26 +05:30
2025-12-22 19:22:01 +05:30
public function remainingAmount()
{
2026-02-27 10:51:26 +05:30
return $this->grand_total_with_charges - $this->totalPaid();
2025-12-22 19:22:01 +05:30
}
2025-11-25 13:14:53 +05:30
2025-11-17 10:33:11 +05:30
}