File "PurchaseOrder.php"
Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Models/PurchaseOrder.php
File size: 3.34 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace App\Models;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Support\Facades\Storage;
class PurchaseOrder extends Model
{
use HasFactory;
public const PURCHASE_ORDER_STATUS = [
'Pending' => 'Pending',
'Received' => 'Received',
];
public const PAYMENT_TERMS = [
'Bank Transfer',
'Check',
'Credit Card',
'Cash',
];
public const SHIPPING_SPEED = [
'Next day air',
'Second day air',
'3 day air',
'Ground shipping',
'Freight shipping',
'Will call',
'Contract Terms',
];
protected $guarded = [
'_token',
];
public const REPORTS_MODE = [
'previous_month' => 'previousMonth',
'current_month' => 'currentMonth',
'previous_year' => 'previousYear',
'current_year' => 'currentYear',
'all' => 'untilToday',
];
public const REPORTS_MODE_FOR_REPORT = [
'previous_year' => 'previousYear',
'current_year' => 'currentYear',
'custom' => 'customRange',
];
public function scopePreviousMonth($query)
{
$start_date = now()->startOfMonth()->subMonth();
$end_date = now()->endOfMonth()->subMonth();
$query->whereBetween('created_at', [$start_date, $end_date]);
}
public function scopeCurrentMonth($query)
{
$start_date = now()->startOfMonth();
$end_date = now()->endOfMonth();
$query->whereBetween('created_at', [$start_date, $end_date]);
}
public function scopePreviousYear($query)
{
$start_date = now()->startOfYear()->subYear();
$end_date = now()->endOfYear()->subYear();
$query->whereBetween('created_at', [$start_date, $end_date]);
}
public function scopeCurrentYear($query)
{
$start_date = now()->startOfYear();
$end_date = now()->endOfYear();
$query->whereBetween('created_at', [$start_date, $end_date]);
}
public function scopeUntilToday($query)
{
return $query;
}
public function product()
{
return $this->belongsTo(Product::class, 'product_id');
}
public function vendor()
{
return $this->belongsTo(Vendor::class, 'vendor_id');
}
public function orderDetails(): HasMany
{
return $this->hasMany(PurchaseOrderDetails::class, 'purchase_order_id');
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class, 'ordered_by_id');
}
public function location(): BelongsTo
{
return $this->belongsTo(StockLocation::class, 'stock_location_id');
}
public function generateAttachment($data)
{
$pdf = PDF::loadView('partials.po_attachment', [
'data' => $data,
])->setPaper('A4');
$pdf_name = 'purchase_order_'.$this->order_number . '.pdf';
$file_path = public_path('storage/purchase_orders_attachments/' . $pdf_name);
if (!Storage::disk('public')->exists('purchase_orders_attachments')) {
Storage::disk('public')->makeDirectory('purchase_orders_attachments');
}
$pdf->save($file_path);
return $file_path;
}
}