🚀 Hostinger Optimized
🖥️ Server: LiteSpeed
💻 System: Linux s20058.bom1.stableserver.net 5.14.0-611.55.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Tue May 19 15:19:29 EDT 2026 x86_64
👤 User: skhata (1324)
🐘 PHP: 8.4.20
🚫 Disabled: ✨ NONE

💻 Terminal

📁 /home/skhata/chandrasons.com/public
$

📄 Vendor.php

📁 Path: /home/skhata/new.chandrapharma.com/app/Modules/Vendor/Models/Vendor.php
📊 Size: 4.69 KB
🔒 Perm: 0600
📝 MIME: text/x-php
<?php

namespace App\Modules\Vendor\Models;

use App\Modules\Core\Models\BaseModel;
use Database\Factories\VendorFactory;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Spatie\MediaLibrary\MediaCollections\Models\Media;
use Spatie\Translatable\HasTranslations;

class Vendor extends BaseModel implements HasMedia
{
    use HasFactory;
    use HasTranslations;
    use InteractsWithMedia;

    protected static function newFactory(): VendorFactory
    {
        return VendorFactory::new();
    }

    public array $translatable = ['description'];

    protected $fillable = [
        'name', 'slug', 'legal_name', 'email', 'phone',
        'description', 'description_translations',
        'owner_id', 'logo_url', 'banner_url', 'accent_color',
        'country', 'state', 'city', 'address', 'zip',
        'latitude', 'longitude',
        'pan_number', 'gst_number', 'vat_registered',
        'commission_rate', 'status',
        'approved_at', 'approved_by', 'rejection_reason',
        'kyc_verified', 'kyc_verified_at',
        'meta_title', 'meta_description',
        'plan_id', 'plan_expires_at', 'is_active',
        'balance',
        // Pharmacy compliance fields (migration 2026_05_09_000003)
        'drug_license_number', 'fssai_license', 'license_verified_at',
        'is_cold_chain_capable',
    ];

    protected function casts(): array
    {
        return [
            'approved_at'          => 'datetime',
            'kyc_verified_at'      => 'datetime',
            'plan_expires_at'      => 'datetime',
            'license_verified_at'  => 'datetime',
            'is_active'            => 'boolean',
            'vat_registered'       => 'boolean',
            'kyc_verified'         => 'boolean',
            'is_cold_chain_capable' => 'boolean',
            'balance'              => 'float',
            'commission_rate'      => 'float',
            'latitude'             => 'float',
            'longitude'            => 'float',
        ];
    }

    // ── Media ─────────────────────────────────────────────────────────────────

    public function registerMediaCollections(): void
    {
        $this->addMediaCollection('logo')->singleFile();
        $this->addMediaCollection('banner')->singleFile();
        $this->addMediaCollection('kyc_documents');
    }

    public function registerMediaConversions(?Media $media = null): void
    {
        $this->addMediaConversion('thumb')->width(200)->height(200)->format('webp');
        $this->addMediaConversion('medium')->width(600)->height(400)->format('webp');
    }

    // ── Relationships ─────────────────────────────────────────────────────────

    public function plan(): BelongsTo
    {
        return $this->belongsTo(\App\Modules\Payout\Models\VendorPlan::class, 'plan_id');
    }

    public function owner(): BelongsTo
    {
        return $this->belongsTo(\App\Modules\User\Models\User::class, 'owner_id');
    }

    public function approvedBy(): BelongsTo
    {
        return $this->belongsTo(\App\Modules\User\Models\User::class, 'approved_by');
    }

    public function users(): HasMany
    {
        return $this->hasMany(\App\Modules\User\Models\User::class);
    }

    public function products(): HasMany
    {
        return $this->hasMany(\App\Modules\Catalog\Models\Product::class);
    }

    public function orders(): HasMany
    {
        return $this->hasMany(\App\Modules\Order\Models\Order::class);
    }

    // ── Scopes ────────────────────────────────────────────────────────────────

    public function scopeApproved(Builder $query): Builder
    {
        return $query->where('status', 'approved');
    }

    public function scopePending(Builder $query): Builder
    {
        return $query->where('status', 'pending');
    }

    // ── Helpers ───────────────────────────────────────────────────────────────

    public function isApproved(): bool
    {
        return $this->status === 'approved';
    }

    public function getStorefrontUrlAttribute(): string
    {
        return route('vendor.store', $this->slug);
    }
}
← Back📥 Raw✏️ Edit🔒 Chmod
✨ File Manager Magic ✨