Files
nnterp-react-admin/app/Models/SalesInvoiceReturnItem.php
2026-03-13 20:49:46 +08:00

75 lines
2.0 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Workdo\ProductService\Models\ProductServiceItem;
class SalesInvoiceReturnItem extends Model
{
protected $fillable = [
'return_id',
'product_id',
'original_invoice_item_id',
'original_quantity',
'return_quantity',
'unit_price',
'discount_percentage',
'discount_amount',
'tax_percentage',
'tax_amount',
'total_amount',
'reason'
];
protected $casts = [
'original_quantity' => 'integer',
'return_quantity' => 'integer',
'unit_price' => 'decimal:2',
'discount_percentage' => 'decimal:2',
'discount_amount' => 'decimal:2',
'tax_percentage' => 'decimal:2',
'tax_amount' => 'decimal:2',
'total_amount' => 'decimal:2'
];
public function salesReturn(): BelongsTo
{
return $this->belongsTo(SalesInvoiceReturn::class, 'return_id');
}
public function product(): BelongsTo
{
return $this->belongsTo(ProductServiceItem::class, 'product_id');
}
public function taxes(): HasMany
{
return $this->hasMany(SalesInvoiceReturnItemTax::class, 'item_id');
}
public function originalInvoiceItem(): BelongsTo
{
return $this->belongsTo(SalesInvoiceItem::class, 'original_invoice_item_id');
}
public function calculateAmounts()
{
$lineTotal = $this->return_quantity * $this->unit_price;
$this->discount_amount = ($lineTotal * $this->discount_percentage) / 100;
$afterDiscount = $lineTotal - $this->discount_amount;
$this->tax_amount = ($afterDiscount * $this->tax_percentage) / 100;
$this->total_amount = $afterDiscount + $this->tax_amount;
}
protected static function boot()
{
parent::boot();
static::saving(function ($item) {
$item->calculateAmounts();
});
}
}