mirror of
https://github.com/InvoiceShelf/InvoiceShelf.git
synced 2026-04-15 09:14:08 +00:00
Complete the type modernization across all models. Adds Builder-typed $query parameters and return types to all scope methods, typed parameters on accessors, and PHPDoc on scopePaginateData/scopeApplyFilters. Models updated: Address, EstimateItem, Expense, ExpenseCategory, InvoiceItem, Item, Note, Tax, TaxType, Unit. 5 models needed no changes (Country, Currency, ImpersonationLog, Module, UserSetting) as they had no untyped public methods.
111 lines
2.9 KiB
PHP
111 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Carbon\Carbon;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class Tax extends Model
|
|
{
|
|
use HasFactory;
|
|
|
|
protected $guarded = [
|
|
'id',
|
|
];
|
|
|
|
protected function casts(): array
|
|
{
|
|
return [
|
|
'amount' => 'integer',
|
|
'percent' => 'float',
|
|
'fixed_amount' => 'integer',
|
|
];
|
|
}
|
|
|
|
public function taxType(): BelongsTo
|
|
{
|
|
return $this->belongsTo(TaxType::class);
|
|
}
|
|
|
|
public function invoice(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Invoice::class);
|
|
}
|
|
|
|
public function recurringInvoice(): BelongsTo
|
|
{
|
|
return $this->belongsTo(RecurringInvoice::class);
|
|
}
|
|
|
|
public function estimate(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Estimate::class);
|
|
}
|
|
|
|
public function currency(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Currency::class);
|
|
}
|
|
|
|
public function invoiceItem(): BelongsTo
|
|
{
|
|
return $this->belongsTo(InvoiceItem::class);
|
|
}
|
|
|
|
public function estimateItem(): BelongsTo
|
|
{
|
|
return $this->belongsTo(EstimateItem::class);
|
|
}
|
|
|
|
public function item(): BelongsTo
|
|
{
|
|
return $this->belongsTo(Item::class);
|
|
}
|
|
|
|
public function scopeWhereCompany(Builder $query, int $company_id): void
|
|
{
|
|
$query->where('company_id', $company_id);
|
|
}
|
|
|
|
public function scopeTaxAttributes(Builder $query): void
|
|
{
|
|
$query->select(
|
|
DB::raw('sum(base_amount) as total_tax_amount, tax_type_id')
|
|
)->groupBy('tax_type_id');
|
|
}
|
|
|
|
public function scopeInvoicesBetween(Builder $query, Carbon $start, Carbon $end): void
|
|
{
|
|
$query->whereHas('invoice', function ($query) use ($start, $end) {
|
|
$query->where('paid_status', Invoice::STATUS_PAID)
|
|
->whereBetween(
|
|
'invoice_date',
|
|
[$start->format('Y-m-d'), $end->format('Y-m-d')]
|
|
);
|
|
})
|
|
->orWhereHas('invoiceItem.invoice', function ($query) use ($start, $end) {
|
|
$query->where('paid_status', Invoice::STATUS_PAID)
|
|
->whereBetween(
|
|
'invoice_date',
|
|
[$start->format('Y-m-d'), $end->format('Y-m-d')]
|
|
);
|
|
});
|
|
}
|
|
|
|
public function scopeWhereInvoicesFilters(Builder $query, array $filters): void
|
|
{
|
|
$filters = collect($filters);
|
|
|
|
if ($filters->get('from_date') && $filters->get('to_date')) {
|
|
$start = Carbon::createFromFormat('Y-m-d', $filters->get('from_date'));
|
|
$end = Carbon::createFromFormat('Y-m-d', $filters->get('to_date'));
|
|
|
|
$query->invoicesBetween($start, $end);
|
|
}
|
|
}
|
|
}
|