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;
    }
}