File manager - Edit - /home/linknsbh/sabel-eltaqwa.com/assets/lfm/files/shares/events/thumbs/Models.tar
Back
WhyChooseUs.php 0000644 00000001727 15213512572 0007507 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; class WhyChooseUs extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData; protected $fillable = [ 'title', 'description', ]; const IMAGE = 'why_choose_image'; public function getImageAttribute() { $url = $this->getFirstMediaUrl(self::IMAGE); return $url ? $url : asset('images/default/choose-1.png'); } public function prepareLinks(): array { return [ // ]; } public function prepareAttributes(): array { return [ 'image' => $this->image, 'title' => $this->title, 'description' => $this->description, ]; } } Transfer.php 0000644 00000013625 15213512572 0007053 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; 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 Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\Transfer * * @property int $id * @property \Illuminate\Support\Carbon $date * @property int $from_warehouse_id * @property int $to_warehouse_id * @property float|null $tax_rate * @property float|null $tax_amount * @property float|null $discount * @property float|null $shipping * @property float|null $grand_total * @property int|null $status * @property string|null $note * @property string|null $reference_code * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Warehouse $fromWarehouse * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|\Spatie\MediaLibrary * * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\TransferItem[] $transferItems * @property-read int|null $media_count * @property-read \App\Models\Warehouse $toWarehouse * * @method static \Illuminate\Database\Eloquent\Builder|Transfer newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Transfer newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Transfer query() * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereDate($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereDiscount($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereFromWarehouseId($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereGrandTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereNote($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereReferenceCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereShipping($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereTaxRate($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereToWarehouseId($value) * @method static \Illuminate\Database\Eloquent\Builder|Transfer whereUpdatedAt($value) * * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection<int, \Spatie\MediaLibrary\MediaCollections\Models\Media> $media * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\TransferItem> $transferItems * @property-read int|null $transfer_items_count * * @mixin \Eloquent */ class Transfer extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'transfers'; public const JSON_API_TYPE = 'transfers'; const PERCENTAGE = 1; const FIXED = 2; //tax type const const EXCLUSIVE = 1; const INCLUSIVE = 2; // status const COMPLETED = 1; const SENT = 2; const PENDING = 3; protected $fillable = [ 'tenant_id', 'date', 'date', 'from_warehouse_id', 'to_warehouse_id', 'tax_rate', 'tax_amount', 'discount', 'shipping', 'grand_total', 'note', 'status', 'reference_code', ]; public static $rules = [ 'date' => 'date|required', 'from_warehouse_id' => 'required|exists:warehouses,id', 'to_warehouse_id' => 'required|exists:warehouses,id', 'tax_rate' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount' => 'nullable|numeric', 'shipping' => 'nullable|numeric', 'grand_total' => 'nullable|numeric', 'notes' => 'nullable', 'status' => 'integer', 'reference_code' => 'nullable', ]; public $casts = [ 'date' => 'date', 'tax_rate' => 'double', 'tax_amount' => 'double', 'discount' => 'double', 'shipping' => 'double', 'grand_total' => 'double', ]; public function prepareLinks(): array { return [ 'self' => route('transfers.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'date' => $this->date, 'from_warehouse_id' => $this->from_warehouse_id, 'to_warehouse_id' => $this->to_warehouse_id, 'tax_rate' => $this->tax_rate, 'tax_amount' => $this->tax_amount, 'discount' => $this->discount, 'shipping' => $this->shipping, 'grand_total' => $this->grand_total, 'note' => $this->note, 'status' => $this->status, 'reference_code' => $this->reference_code, 'transfer_items' => $this->transferItems, 'from_warehouse' => $this->fromWarehouse, 'to_warehouse' => $this->toWarehouse, 'created_at' => $this->created_at, ]; return $fields; } public function fromWarehouse(): BelongsTo { return $this->belongsTo(Warehouse::class, 'from_warehouse_id', 'id'); } public function toWarehouse(): BelongsTo { return $this->belongsTo(Warehouse::class, 'to_warehouse_id', 'id'); } public function transferItems(): HasMany { return $this->hasMany(TransferItem::class, 'transfer_id', 'id'); } } Partner.php 0000644 00000000761 15213512572 0006677 0 ustar 00 <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; class Partner extends BaseModel implements HasMedia { use HasFactory, InteractsWithMedia; protected $fillable = [ 'name' ]; const IMAGE = 'partner_img'; public function getImageAttribute() { $url = $this->getFirstMediaUrl(self::IMAGE); return $url ? $url : getAppLogoUrl(); } } BaseModel.php 0000644 00000001541 15213512572 0007114 0 ustar 00 <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Psr\Container\ContainerExceptionInterface; use Psr\Container\NotFoundExceptionInterface; /** * Class BaseModel * * @method static \Illuminate\Database\Eloquent\Builder|BaseModel newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|BaseModel newQuery() * @method static \Illuminate\Database\Eloquent\Builder|BaseModel query() * * @mixin Model */ class BaseModel extends Model { /** * @throws ContainerExceptionInterface * @throws NotFoundExceptionInterface */ public function getPerPage(): int { $pageSize = request()->get('page_size'); if ($pageSize == 0) { $count = static::count(); if ($count > 0) { return $count; } } return $this->perPage; } } Expense.php 0000644 00000007754 15213512572 0006704 0 ustar 00 <?php namespace App\Models; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\Expense * * @property int $id * @property string $date * @property int $warehouse_id * @property int $expense_category_id * @property float $amount * @property string|null $details * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\ExpenseCategory $expenseCategory * @property-read \App\Models\Warehouse $warehouse * * @method static \Illuminate\Database\Eloquent\Builder|Expense newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Expense newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Expense query() * @method static \Illuminate\Database\Eloquent\Builder|Expense whereAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Expense whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Expense whereDate($value) * @method static \Illuminate\Database\Eloquent\Builder|Expense whereDetails($value) * @method static \Illuminate\Database\Eloquent\Builder|Expense whereExpenseCategoryId($value) * @method static \Illuminate\Database\Eloquent\Builder|Expense whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Expense whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Expense whereWarehouseId($value) * @method static \Illuminate\Database\Eloquent\Builder|Expense whereReferenceCode($value) * * @property string|null $reference_code * @property string|null $title * * @method static \Illuminate\Database\Eloquent\Builder|Expense whereTitle($value) * * @mixin \Eloquent */ class Expense extends BaseModel { use HasFactory, HasJsonResourcefulData; protected $table = 'expenses'; const JSON_API_TYPE = 'expenses'; protected $fillable = [ 'date', 'warehouse_id', 'expense_category_id', 'amount', 'reference_code', 'details', 'title', 'user_id', ]; public static $rules = [ 'date' => 'required|date', 'warehouse_id' => 'required|exists:warehouses,id', 'expense_category_id' => 'required|exists:expense_categories,id', 'amount' => 'required|numeric', 'title' => 'required', ]; public $casts = [ 'date' => 'date', ]; public function prepareLinks(): array { return [ 'self' => route('expenses.show', $this->id), ]; } public function prepareAttributes(): array { $userName = ''; if ($this->user) { $userName = $this->user->first_name . ' ' . $this->user->last_name; } $fields = [ 'date' => $this->date, 'warehouse_id' => $this->warehouse_id, 'expense_category_id' => $this->expense_category_id, 'amount' => $this->amount, 'details' => $this->details, 'reference_code' => $this->reference_code, 'warehouse_name' => $this->warehouse->name, 'expense_category_name' => $this->expenseCategory->name, 'title' => $this->title, 'user_id' => $this->user_id, 'user_name' => $userName, 'created_at' => $this->created_at, ]; return $fields; } public function warehouse(): BelongsTo { return $this->belongsTo(Warehouse::class, 'warehouse_id', 'id'); } public function expenseCategory(): BelongsTo { return $this->belongsTo(ExpenseCategory::class, 'expense_category_id', 'id'); } public function user(): BelongsTo { return $this->belongsTo(User::class, 'user_id', 'id')->withoutGlobalScope('tenant'); } /** * @var string[] */ public static $availableRelations = [ 'warehouse_id' => 'warehouse', 'expense_category_id' => 'expenseCategory', ]; } SadminSetting.php 0000644 00000003752 15213512572 0010040 0 ustar 00 <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\MediaCollections\Models\Media; /** * App\Models\SadminSetting * * @property int $id * @property string $key * @property string $value * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read string $logo * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|Media[] $media * @property-read int|null $media_count * * @method static \Illuminate\Database\Eloquent\Builder|SadminSetting newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|SadminSetting newQuery() * @method static \Illuminate\Database\Eloquent\Builder|SadminSetting query() * @method static \Illuminate\Database\Eloquent\Builder|SadminSetting whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|SadminSetting whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|SadminSetting whereKey($value) * @method static \Illuminate\Database\Eloquent\Builder|SadminSetting whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|SadminSetting whereValue($value) * * @mixin \Eloquent */ class SadminSetting extends Model implements HasMedia { use HasFactory, InteractsWithMedia; const PATH = 'sadmin_settings'; const LOGO = 'app_logo'; const FAVICON = 'app_favicon'; const HERO_IMAGE = 'hero_image'; protected $table = 'sadmin_settings'; /** * @var string[] */ protected $fillable = [ 'key', 'value', ]; public function getLogoAttribute(): string { /** @var Media $media */ $media = $this->media->last(); if (! empty($media)) { return $media->getFullUrl(); } return asset('images/infyom.png'); } } Sale.php 0000644 00000023072 15213512572 0006150 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Eloquent; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Facades\Storage; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\MediaCollections\Models\Media; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\Sale * * @property int $id * @property \Illuminate\Support\Carbon $date * @property int $customer_id * @property int $warehouse_id * @property float|null $tax_rate * @property float|null $tax_amount * @property float|null $discount * @property float|null $shipping * @property float|null $grand_total * @property float|null $received_amount * @property float|null $paid_amount * @property int|null $payment_type * @property string|null $note * @property string|null $reference_code * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property int|null $status * @property int|null $payment_status * @property-read \App\Models\Customer $customer * @property-read string $sale_pdf_url * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|Media[] $media * @property-read int|null $media_count * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\SaleItem[] $saleItems * @property-read int|null $sale_items_count * @property-read \App\Models\Warehouse $warehouse * @property-read \App\Models\SalesPayment $latestPayment * * @method static \Illuminate\Database\Eloquent\Builder|Sale newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Sale newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Sale query() * @method static \Illuminate\Database\Eloquent\Builder|Sale whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereCustomerId($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereDate($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereDiscount($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereGrandTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereNote($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale wherePaidAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale wherePaymentStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale wherePaymentType($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereReceivedAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereReferenceCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereShipping($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereTaxRate($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Sale whereWarehouseId($value) * * @property int $is_return * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\SalesPayment[] $payments * @property-read int|null $payments_count * * @method static \Illuminate\Database\Eloquent\Builder|Sale whereIsReturn($value) * * @mixin Eloquent */ class Sale extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'sales'; public const JSON_API_TYPE = 'sales'; public const SALE_PDF = 'sale_pdf'; public const SALE_BARCODE_PATH = 'sale_barcode_path'; public const CODE128 = 1; public const CODE39 = 2; public const EAN8 = 3; public const UPC = 4; public const EAN13 = 5; protected $fillable = [ 'date', 'customer_id', 'warehouse_id', 'tax_rate', 'tax_amount', 'discount', 'discount_type', 'discount_value', 'shipping', 'grand_total', 'received_amount', 'paid_amount', 'payment_type', 'note', 'status', 'payment_status', 'reference_code', 'barcode_symbol', 'is_return', 'user_id', 'tenant_id', ]; public static $rules = [ 'date' => 'date|required', 'customer_id' => 'required|exists:customers,id', 'warehouse_id' => 'required|exists:warehouses,id', 'tax_rate' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount' => 'nullable|numeric', 'discount_type' => 'nullable|integer|in:1,2', 'discount_value' => 'nullable|numeric', 'shipping' => 'nullable|numeric', 'grand_total' => 'nullable|numeric', 'received_amount' => 'numeric|nullable', 'paid_amount' => 'numeric|nullable', 'payment_type' => 'numeric|integer|nullable', 'notes' => 'nullable', 'status' => 'integer|required', 'payment_status' => 'integer|required', 'reference_code' => 'nullable', ]; public $casts = [ 'date' => 'date', 'tax_rate' => 'double', 'tax_amount' => 'double', 'discount' => 'double', 'shipping' => 'double', 'grand_total' => 'double', 'received_amount' => 'double', 'paid_amount' => 'double', 'payment_status' => 'integer', 'status' => 'integer', 'payment_type' => 'integer', ]; //tax type const const EXCLUSIVE = 1; const INCLUSIVE = 2; // discount type const const PERCENTAGE = 1; const FIXED = 2; // payment type const CASH = 1; const CHEQUE = 2; const BANK_TRANSFER = 3; const OTHER = 4; // Order status const COMPLETED = 1; const PENDING = 2; const ORDERED = 3; // payment status const PAID = 1; const UNPAID = 2; const PARTIAL_PAID = 3; public function prepareLinks(): array { return [ 'self' => route('sales.show', $this->id), ]; } public function getSalePdfUrlAttribute(): string { /** @var Media $media */ $media = $this->getMedia(self::SALE_PDF)->first(); if (! empty($media)) { return $media->getFullUrl(); } return ''; } public function prepareAttributes(): array { $firstName = $this->user->first_name ?? ''; $lastName = $this->user->last_name ?? 'N/A'; $fields = [ 'date' => $this->date, 'is_return' => $this->is_return, 'customer_id' => $this->customer_id, 'customer_name' => $this->customer->name, 'user_name' => $firstName . ' ' . $lastName, 'warehouse_id' => $this->warehouse_id, 'warehouse_name' => $this->warehouse->name, 'tax_rate' => $this->tax_rate, 'tax_amount' => $this->tax_amount, 'discount' => $this->discount, 'discount_value' => $this->discount_value, 'discount_type' => $this->discount_type ?? 1, 'shipping' => $this->shipping, 'grand_total' => $this->grand_total, 'received_amount' => $this->received_amount, 'paid_amount' => $this->paid_amount, 'due_amount' => $this->dueAmount($this->id), 'payment_type' => $this->payment_type, 'note' => $this->note, 'status' => $this->status, 'payment_status' => $this->payment_status, 'reference_code' => $this->reference_code, 'sale_items' => $this->saleItems, 'payments' => $this->payments ?? [], 'created_at' => $this->created_at, 'barcode_url' => Storage::url('sales/barcode-' . $this->reference_code . '.png'), ]; return $fields; } public function prepareRecentSelling(): array { $fields = [ 'reference_code' => $this->reference_code, 'customer_name' => $this->customer->name, 'grand_total' => $this->grand_total, 'paid_amount' => $this->paid_amount, 'due_amount' => $this->dueAmount($this->id), 'payment_status' => $this->payment_status, 'status' => $this->status, ]; return $fields; } public function customer(): BelongsTo { return $this->belongsTo(Customer::class, 'customer_id', 'id'); } public function user(): BelongsTo { return $this->belongsTo(User::class, 'user_id', 'id'); } public function warehouse(): BelongsTo { return $this->belongsTo(Warehouse::class, 'warehouse_id', 'id'); } public function saleItems(): HasMany { return $this->hasMany(SaleItem::class, 'sale_id', 'id'); } public function payments(): HasMany { return $this->hasMany(SalesPayment::class, 'sale_id', 'id'); } /** * @return int|mixed */ public function dueAmount($id) { $grandTotal = Sale::whereId($id)->value('grand_total'); $paidAmount = SalesPayment::whereSaleId($id)->sum('amount'); $dueAmount = $grandTotal - $paidAmount; if ($dueAmount < 0) { $dueAmount = 0; } return $dueAmount; } } Quotation.php 0000644 00000014401 15213512572 0007243 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\Quotation * * @property int $id * @property \Illuminate\Support\Carbon $date * @property int $customer_id * @property int $warehouse_id * @property float|null $tax_rate * @property float|null $tax_amount * @property float|null $discount * @property float|null $shipping * @property float|null $grand_total * @property float|null $received_amount * @property float|null $paid_amount * @property int|null $status * @property string|null $note * @property string|null $reference_code * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Customer $customer * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|\Spatie\MediaLibrary\MediaCollections\Models\Media[] $media * @property-read int|null $media_count * @property-read \App\Models\Warehouse $warehouse * * @method static \Illuminate\Database\Eloquent\Builder|Quotation newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Quotation newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Quotation query() * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereCustomerId($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereDate($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereDiscount($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereGrandTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereNote($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation wherePaidAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereReceivedAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereReferenceCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereShipping($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereTaxRate($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereWarehouseId($value) * * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\QuotationItem[] $quotationItems * @property-read int|null $quotation_items_count * @property int $is_sale_created * * @method static \Illuminate\Database\Eloquent\Builder|Quotation whereIsSaleCreated($value) * * @mixin \Eloquent */ class Quotation extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; public const JSON_API_TYPE = 'quotations'; const QuotationSale = 3; /** * @var string[] */ protected $fillable = [ 'tenant_id', 'date', 'customer_id', 'warehouse_id', 'tax_rate', 'tax_amount', 'discount', 'shipping', 'grand_total', 'received_amount', 'paid_amount', 'note', 'status', 'reference_code', 'is_sale_created', ]; /** * @var string[] */ public static $rules = [ 'date' => 'date|required', 'customer_id' => 'required|exists:customers,id', 'warehouse_id' => 'required|exists:warehouses,id', 'tax_rate' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount' => 'nullable|numeric', 'shipping' => 'nullable|numeric', 'grand_total' => 'nullable|numeric', 'received_amount' => 'numeric|nullable', 'paid_amount' => 'numeric|nullable', 'notes' => 'nullable', 'status' => 'required', 'reference_code' => 'nullable', ]; /** * @var string[] */ public $casts = [ 'date' => 'date', 'tax_rate' => 'double', 'tax_amount' => 'double', 'discount' => 'double', 'shipping' => 'double', 'grand_total' => 'double', 'received_amount' => 'double', 'paid_amount' => 'double', ]; // status const SENT = 1; const PENDING = 2; public function prepareLinks(): array { return [ 'self' => route('quotations.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'date' => $this->date, 'customer_id' => $this->customer_id, 'customer_name' => $this->customer->name, 'warehouse_id' => $this->warehouse_id, 'warehouse_name' => $this->warehouse->name, 'tax_rate' => $this->tax_rate, 'tax_amount' => $this->tax_amount, 'discount' => $this->discount, 'shipping' => $this->shipping, 'grand_total' => $this->grand_total, 'received_amount' => $this->received_amount, 'paid_amount' => $this->paid_amount, 'note' => $this->note, 'status' => $this->status, 'is_sale_created' => $this->is_sale_created, 'reference_code' => $this->reference_code, 'quotation_items' => $this->quotationItems, 'created_at' => $this->created_at, ]; return $fields; } public function customer(): BelongsTo { return $this->belongsTo(Customer::class, 'customer_id', 'id'); } public function warehouse(): BelongsTo { return $this->belongsTo(Warehouse::class, 'warehouse_id', 'id'); } public function quotationItems(): HasMany { return $this->hasMany(QuotationItem::class, 'quotation_id', 'id'); } } MailTemplate.php 0000644 00000004471 15213512572 0007644 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\MailTemplate * * @property int $id * @property string $template_name * @property string $content * @property string $type * @property string $status * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|MailTemplate newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|MailTemplate newQuery() * @method static \Illuminate\Database\Eloquent\Builder|MailTemplate query() * @method static \Illuminate\Database\Eloquent\Builder|MailTemplate whereContent($value) * @method static \Illuminate\Database\Eloquent\Builder|MailTemplate whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|MailTemplate whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|MailTemplate whereTemplateName($value) * @method static \Illuminate\Database\Eloquent\Builder|MailTemplate whereType($value) * @method static \Illuminate\Database\Eloquent\Builder|MailTemplate whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|MailTemplate whereUpdatedAt($value) * * @mixin \Eloquent */ class MailTemplate extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; public const JSON_API_TYPE = 'mail_templates'; protected $table = 'mail_templates'; protected $fillable = [ 'tenant_id', 'template_name', 'content', 'type', 'status' ]; const MAIL_TYPE_SALE = 1; const MAIL_TYPE_SALE_RETURN = 2; const ACTIVE = 1; const INACTIVE = 0; public static $rules = [ 'content' => 'required', ]; public function prepareLinks(): array { return []; } public function prepareAttributes(): array { $fields = [ 'template_name' => $this->template_name, 'content' => $this->content, 'type' => $this->type, 'status' => $this->status, ]; return $fields; } } User.php 0000644 00000016606 15213512572 0006207 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Notifications\ResetPasswordNotification; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Contracts\Auth\CanResetPassword; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\MediaCollections\Models\Media; use Spatie\Permission\Traits\HasRoles; use Illuminate\Support\Str; use PragmaRX\Google2FA\Google2FA; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\User * * @property int $id * @property string $first_name * @property string|null $last_name * @property string $email * @property string|null $phone * @property \Illuminate\Support\Carbon|null $email_verified_at * @property string $password * @property string|null $remember_token * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property int $status * @property-read \Illuminate\Notifications\DatabaseNotificationCollection|\Illuminate\Notifications\DatabaseNotification[] $notifications * @property-read int|null $notifications_count * @property-read \Illuminate\Database\Eloquent\Collection|\Spatie\Permission\Models\Permission[] $permissions * @property-read int|null $permissions_count * @property-read \Illuminate\Database\Eloquent\Collection|\Spatie\Permission\Models\Role[] $roles * @property-read int|null $roles_count * @property-read \Illuminate\Database\Eloquent\Collection|\Laravel\Sanctum\PersonalAccessToken[] $tokens * @property-read int|null $tokens_count * * @method static \Database\Factories\UserFactory factory(...$parameters) * @method static \Illuminate\Database\Eloquent\Builder|User newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|User newQuery() * @method static \Illuminate\Database\Eloquent\Builder|User permission($permissions) * @method static \Illuminate\Database\Eloquent\Builder|User query() * @method static \Illuminate\Database\Eloquent\Builder|User role($roles, $guard = null) * @method static \Illuminate\Database\Eloquent\Builder|User whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|User whereEmail($value) * @method static \Illuminate\Database\Eloquent\Builder|User whereEmailVerifiedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|User whereFirstName($value) * @method static \Illuminate\Database\Eloquent\Builder|User whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|User whereLastName($value) * @method static \Illuminate\Database\Eloquent\Builder|User wherePassword($value) * @method static \Illuminate\Database\Eloquent\Builder|User wherePhone($value) * @method static \Illuminate\Database\Eloquent\Builder|User whereRememberToken($value) * @method static \Illuminate\Database\Eloquent\Builder|User whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|User whereUpdatedAt($value) * * @property-read string $image_url * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|Media[] $media * @property-read int|null $media_count * @property string $language * * @method static \Illuminate\Database\Eloquent\Builder|User whereLanguage($value) * * @mixin \Eloquent */ class User extends Authenticatable implements HasMedia, JsonResourceful, CanResetPassword, MustVerifyEmail { use HasApiTokens, HasFactory, Notifiable, HasRoles, InteractsWithMedia, HasJsonResourcefulData, BelongsToTenant, Multitenantable; const JSON_API_TYPE = 'users'; public const PATH = 'user_image'; protected $appends = ['image_url']; /** * The attributes that are mass assignable. * * @var array<int, string> */ protected $fillable = [ 'first_name', 'last_name', 'email', 'phone', 'region', 'password', 'tenant_id', 'language', 'status', 'email_verified_at', 'two_factor_enabled', ]; public static $rules = [ 'first_name' => 'required', 'last_name' => 'required', 'email' => 'required|email|unique:users', 'phone' => 'required|numeric|unique:users', 'password' => 'required|min:6', 'confirm_password' => 'required|min:6|same:password', 'image' => 'image|mimes:jpg,jpeg,png,svg', ]; public function getImageUrlAttribute(): string { /** @var Media $media */ $media = $this->getMedia(User::PATH)->first(); if (! empty($media)) { return $media->getFullUrl(); } return ''; } public function getFullNameAttribute(): string { return $this->first_name . ' ' . $this->last_name; } /** * The attributes that should be hidden for serialization. * * @var array<int, string> */ protected $hidden = [ 'password', 'remember_token', 'two_factor_secret', 'two_factor_recovery_codes', ]; /** * The attributes that should be cast. * * @var array<string, string> */ protected $casts = [ 'email_verified_at' => 'datetime', ]; public function prepareLinks(): array { return [ 'self' => route('users.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'first_name' => $this->first_name, 'last_name' => $this->last_name, 'email' => $this->email, 'plan' => $this->subscriptions ? ($this->subscriptions->where('status', Subscription::ACTIVE)->first() ? $this->subscriptions->where('status', Subscription::ACTIVE)->first()->plan->name : null) : null, 'plan_id' => $this->subscriptions ? ($this->subscriptions->where('status', Subscription::ACTIVE)->first() ? $this->subscriptions->where('status', Subscription::ACTIVE)->first()->plan->id : null) : null, 'email_verified' => $this->email_verified_at ? true : false, 'phone' => $this->phone, 'region' => $this->region, 'image' => $this->image_url, 'role' => $this->roles ? ['id' => $this->roles->pluck('id')->first(), 'name' => $this->roles->pluck('name')->first()] : null, 'two_factor_enabled' => $this->two_factor_enabled, 'created_at' => $this->created_at, 'language' => $this->language, 'status' => $this->status ? true : false, 'stores' => $this->stores ? $this->stores->pluck('store_id')->toArray() : null, ]; return $fields; } public function sendPasswordResetNotification($token) { $url = url('/app/reset-password/' . $token); $this->notify(new ResetPasswordNotification($url)); } public function sales() { return $this->hasMany(Sale::class); } public function subscriptions() { return $this->hasMany(Subscription::class); } public function transactions() { return $this->hasMany(Transaction::class); } public function stores() { return $this->hasMany(UserStore::class); } public function tenant() { return $this->belongsTo(MultiTenant::class); } } QuotationItem.php 0000644 00000012266 15213512572 0010071 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\QuotationItem * * @property int $id * @property int $quotation_id * @property int $product_id * @property float|null $product_price * @property float|null $net_unit_price * @property int $tax_type * @property float|null $tax_value * @property float|null $tax_amount * @property int $discount_type * @property float|null $discount_value * @property float|null $discount_amount * @property array $sale_unit * @property float|null $quantity * @property float|null $sub_total * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Product $product * @property-read \App\Models\Quotation $quotation * * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem newQuery() * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem query() * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereDiscountAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereDiscountType($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereDiscountValue($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereNetUnitPrice($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereProductPrice($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereQuantity($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereQuotationId($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereSaleUnit($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereSubTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereTaxType($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereTaxValue($value) * @method static \Illuminate\Database\Eloquent\Builder|QuotationItem whereUpdatedAt($value) * * @mixin \Eloquent */ class QuotationItem extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'quotation_items'; public const JSON_API_TYPE = 'quotation_items'; protected $fillable = [ 'product_id', 'product_price', 'net_unit_price', 'tax_type', 'tax_value', 'tax_amount', 'discount_type', 'discount_value', 'discount_amount', 'sale_unit', 'quantity', 'sub_total', ]; public static $rules = [ 'product_id' => 'required|exists:products,id', 'product_price' => 'nullable|numeric', 'tax_type' => 'nullable|numeric', 'tax_value' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount_type' => 'nullable|numeric', 'discount_value' => 'nullable|numeric', 'discount_amount' => 'nullable|numeric', 'sale_unit' => 'nullable|numeric', 'quantity' => 'nullable|numeric', 'sub_total' => 'nullable|numeric', ]; public $casts = [ 'product_price' => 'double', 'tax_amount' => 'double', 'tax_value' => 'double', 'discount_value' => 'double', 'discount_amount' => 'double', 'quantity' => 'double', 'sub_total' => 'double', ]; public function getSaleUnitAttribute($value): array { $saleUnit = Unit::whereId($value)->first(); if ($saleUnit) { return $saleUnit->toArray(); } return []; } public function prepareLinks(): array { return [ ]; } public function prepareAttributes(): array { $fields = [ 'product_id' => $this->product_id, 'net_unit_price' => $this->net_unit_price, 'product_price' => $this->product_price, 'tax_type' => $this->tax_type, 'tax_value' => $this->tax_value, 'tax_amount' => $this->tax_amount, 'discount_type' => $this->discount_type, 'discount_value' => $this->discount_value, 'discount_amount' => $this->discount_amount, 'sale_unit' => $this->sale_unit, 'quantity' => $this->quantity, 'sub_total' => $this->sub_total, ]; return $fields; } public function quotation(): BelongsTo { return $this->belongsTo(Quotation::class, 'quotation_id', 'id'); } public function product(): BelongsTo { return $this->belongsTo(Product::class, 'product_id', 'id'); } } Feature.php 0000644 00000002012 15213512572 0006646 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; class Feature extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData; protected $fillable = [ 'title', 'description', 'points', ]; const IMAGE = 'feature_image'; public function getImageAttribute() { $url = $this->getFirstMediaUrl(self::IMAGE); return $url ? $url : asset('images/default/feature-1.png'); } public function prepareLinks(): array { return [ // ]; } public function prepareAttributes(): array { return [ 'image' => $this->image, 'title' => $this->title, 'points' => $this->points, 'description' => $this->description, ]; } } Currency.php 0000644 00000003552 15213512572 0007057 0 ustar 00 <?php namespace App\Models; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; /** * App\Models\Currency * * @property int $id * @property string $name * @property string $code * @property string $symbol * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|Currency newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Currency newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Currency query() * @method static \Illuminate\Database\Eloquent\Builder|Currency whereCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Currency whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Currency whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Currency whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Currency whereSymbol($value) * @method static \Illuminate\Database\Eloquent\Builder|Currency whereUpdatedAt($value) * * @mixin \Eloquent */ class Currency extends BaseModel { use HasFactory, HasJsonResourcefulData; protected $table = 'currencies'; const JSON_API_TYPE = 'currencies'; protected $fillable = [ 'name', 'code', 'symbol', ]; public static $rules = [ 'name' => 'required|unique:currencies', 'code' => 'required', 'symbol' => 'required', ]; public function prepareLinks(): array { return [ 'self' => route('currencies.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'name' => $this->name, 'code' => $this->code, 'symbol' => $this->symbol, ]; return $fields; } } ProductCategory.php 0000644 00000006110 15213512572 0010374 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Facades\Auth; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\MediaCollections\Models\Media; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * Class ProductCategory * * @property int $id * @property string $name * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read string $image_url * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|Media[] $media * @property-read int|null $media_count * * @method static Builder|ProductCategory newModelQuery() * @method static Builder|ProductCategory newQuery() * @method static Builder|ProductCategory query() * @method static Builder|ProductCategory whereCreatedAt($value) * @method static Builder|ProductCategory whereId($value) * @method static Builder|ProductCategory whereName($value) * @method static Builder|ProductCategory whereUpdatedAt($value) * * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Product> $products * @property-read int|null $products_count * * @mixin \Eloquent */ class ProductCategory extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'product_categories'; const JSON_API_TYPE = 'product-product_categories'; public const PATH = 'product_category'; protected $appends = ['image_url']; protected $fillable = [ 'tenant_id', 'name', ]; public static function rules(): array { return [ 'name' => 'required|unique:product_categories,name,NULL,id,tenant_id,' . Auth::user()->tenant_id, 'image' => 'image|mimes:jpg,jpeg,png,svg', ]; } public function getImageUrlAttribute(): string { /** @var Media $media */ $media = $this->getMedia(ProductCategory::PATH)->first(); if (! empty($media)) { return $media->getFullUrl(); } return ''; } public function prepareLinks(): array { return [ 'self' => route('product-categories.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'name' => $this->name, 'image' => $this->image_url, 'products_count' => $this->products()->count(), ]; return $fields; } public function prepareProductCategory(): array { $fields = [ 'id' => $this->id, 'name' => $this->name, ]; return $fields; } public function products(): HasMany { return $this->hasMany(Product::class, 'product_category_id', 'id'); } } TransferItem.php 0000644 00000011052 15213512572 0007662 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\TransferItem * * @property int $id * @property int $transfer_id * @property int $product_id * @property float|null $product_price * @property float|null $net_unit_price * @property int $tax_type * @property float|null $tax_value * @property float|null $tax_amount * @property int $discount_type * @property float|null $discount_value * @property float|null $discount_amount * @property float|null $quantity * @property float|null $sub_total * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Product $product * * @method static \Illuminate\Database\Eloquent\Builder|TransferItem newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|TransferItem newQuery() * @method static \Illuminate\Database\Eloquent\Builder|TransferItem query() * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereDiscountAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereDiscountType($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereDiscountValue($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereNetUnitPrice($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereProductPrice($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereQuantity($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereSubTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereTaxType($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereTaxValue($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereTransferId($value) * @method static \Illuminate\Database\Eloquent\Builder|TransferItem whereUpdatedAt($value) * * @mixin \Eloquent */ class TransferItem extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'transfer_items'; public const JSON_API_TYPE = 'transfer_items'; protected $fillable = [ 'product_id', 'product_price', 'net_unit_price', 'tax_type', 'tax_value', 'tax_amount', 'discount_type', 'discount_value', 'discount_amount', 'quantity', 'sub_total', ]; public static $rules = [ 'product_id' => 'required|exists:products,id', 'product_price' => 'nullable|numeric', 'tax_type' => 'nullable|numeric', 'tax_value' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount_type' => 'nullable|numeric', 'discount_value' => 'nullable|numeric', 'discount_amount' => 'nullable|numeric', 'quantity' => 'nullable|numeric', 'sub_total' => 'nullable|numeric', ]; public $casts = [ 'product_price' => 'double', 'tax_amount' => 'double', 'tax_value' => 'double', 'discount_value' => 'double', 'discount_amount' => 'double', 'quantity' => 'double', 'sub_total' => 'double', ]; public function prepareLinks(): array { return [ ]; } public function prepareAttributes(): array { $fields = [ 'product_id' => $this->product_id, 'net_unit_price' => $this->net_unit_price, 'product_price' => $this->product_price, 'tax_type' => $this->tax_type, 'tax_value' => $this->tax_value, 'tax_amount' => $this->tax_amount, 'discount_type' => $this->discount_type, 'discount_value' => $this->discount_value, 'discount_amount' => $this->discount_amount, 'quantity' => $this->quantity, 'sub_total' => $this->sub_total, ]; return $fields; } public function product(): BelongsTo { return $this->belongsTo(Product::class, 'product_id', 'id'); } } Faq.php 0000644 00000001152 15213512572 0005766 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; class Faq extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $fillable = [ 'title', 'description', ]; public function prepareLinks(): array { return [ // ]; } public function prepareAttributes(): array { return [ 'title' => $this->title, 'description' => $this->description, ]; } } Customer.php 0000644 00000007753 15213512572 0007075 0 ustar 00 <?php namespace App\Models; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Facades\Auth; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\Customer * * @property int $id * @property string $name * @property string $email * @property string $phone * @property string $country * @property string $city * @property string $address * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|Customer newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Customer newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Customer query() * @method static \Illuminate\Database\Eloquent\Builder|Customer whereAddress($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer whereCity($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer whereCountry($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer whereEmail($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer wherePhone($value) * @method static \Illuminate\Database\Eloquent\Builder|Customer whereUpdatedAt($value) * * @property string|null $dob * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Quotation[] $quotations * @property-read int|null $quotations_count * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Sale[] $sales * @property-read int|null $sales_count * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\SaleReturn[] $salesReturns * @property-read int|null $sales_returns_count * * @method static \Illuminate\Database\Eloquent\Builder|Customer whereDob($value) * * @mixin \Eloquent */ class Customer extends BaseModel { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'customers'; const JSON_API_TYPE = 'customers'; protected $fillable = [ 'tenant_id', 'name', 'email', 'phone', 'country', 'city', 'address', 'dob', ]; public static function rules(): array { return [ 'name' => 'required', 'email' => 'required|email|unique:customers,email,NULL,id,tenant_id,' . Auth::user()->tenant_id, 'phone' => 'required|string', 'country' => 'required', 'city' => 'required', 'address' => 'required', 'dob' => 'nullable|date', ]; } public function prepareLinks(): array { return [ 'self' => route('customers.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'name' => $this->name, 'email' => $this->email, 'phone' => $this->phone, 'country' => $this->country, 'city' => $this->city, 'address' => $this->address, 'dob' => $this->dob, 'created_at' => $this->created_at, ]; return $fields; } public function prepareCustomers(): array { $fields = [ 'id' => $this->id, 'name' => $this->name, ]; return $fields; } public function sales(): HasMany { return $this->hasMany(Sale::class, 'customer_id', 'id'); } public function quotations(): HasMany { return $this->hasMany(Quotation::class, 'customer_id', 'id'); } public function salesReturns(): HasMany { return $this->hasMany(SaleReturn::class, 'customer_id', 'id'); } } SaleReturnItem.php 0000644 00000013034 15213512572 0010164 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\SaleReturnItem * * @property int $id * @property int $sale_return_id * @property int $product_id * @property float|null $product_price * @property float|null $net_unit_price * @property int $tax_type * @property float|null $tax_value * @property float|null $tax_amount * @property int $discount_type * @property float|null $discount_value * @property float|null $discount_amount * @property array $sale_unit * @property float|null $quantity * @property float|null $sub_total * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Product $product * @property-read SaleReturnItem $saleReturn * * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem newQuery() * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem query() * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereDiscountAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereDiscountType($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereDiscountValue($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereNetUnitPrice($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereProductPrice($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereQuantity($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereSaleReturnId($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereSaleUnit($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereSubTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereTaxType($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereTaxValue($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereUpdatedAt($value) * * @property float|null $sold_quantity * * @method static \Illuminate\Database\Eloquent\Builder|SaleReturnItem whereSoldQuantity($value) * * @mixin \Eloquent */ class SaleReturnItem extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'sale_return_items'; public const JSON_API_TYPE = 'sales_return_items'; /** * @var string[] */ protected $fillable = [ 'product_id', 'product_price', 'net_unit_price', 'tax_type', 'tax_value', 'tax_amount', 'discount_type', 'discount_value', 'discount_amount', 'sale_unit', 'quantity', 'sold_quantity', 'sub_total', ]; /** * @var string[] */ public static $rules = [ 'product_id' => 'required|exists:products,id', 'product_price' => 'nullable|numeric', 'tax_type' => 'nullable|numeric', 'tax_value' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount_type' => 'nullable|numeric', 'discount_value' => 'nullable|numeric', 'discount_amount' => 'nullable|numeric', 'sale_unit' => 'nullable|numeric', 'quantity' => 'nullable|numeric', 'sub_total' => 'nullable|numeric', ]; /** * @var string[] */ public $casts = [ 'product_price' => 'double', 'tax_amount' => 'double', 'tax_value' => 'double', 'discount_value' => 'double', 'discount_amount' => 'double', 'quantity' => 'double', 'sub_total' => 'double', ]; public function getSaleUnitAttribute($value): array { $saleUnit = Unit::whereId($value)->first(); if ($saleUnit) { return $saleUnit->toArray(); } return []; } public function prepareLinks(): array { return [ ]; } public function prepareAttributes(): array { $fields = [ 'product_id' => $this->product_id, 'net_unit_price' => $this->net_unit_price, 'product_price' => $this->product_price, 'tax_type' => $this->tax_type, 'tax_value' => $this->tax_value, 'tax_amount' => $this->tax_amount, 'discount_type' => $this->discount_type, 'discount_value' => $this->discount_value, 'discount_amount' => $this->discount_amount, 'sale_unit' => $this->sale_unit, 'quantity' => $this->quantity, 'sold_quantity' => $this->sold_quantity, 'sub_total' => $this->sub_total, ]; return $fields; } public function saleReturn(): BelongsTo { return $this->belongsTo(SaleReturn::class, 'sale_return_id', 'id'); } public function product(): BelongsTo { return $this->belongsTo(Product::class, 'product_id', 'id'); } } MainProduct.php 0000644 00000007224 15213512572 0007512 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; class MainProduct extends Model implements HasMedia, JsonResourceful { use HasFactory, HasJsonResourcefulData, InteractsWithMedia, BelongsToTenant, Multitenantable; protected $fillable = [ 'tenant_id', 'name', 'code', 'product_unit', 'product_type', ]; const JSON_API_TYPE = 'products'; const SINGLE_PRODUCT = 1; const VARIATION_PRODUCT = 2; const PATH = 'main_product'; protected $appends = ['image_url']; public static $rules = [ 'images.*' => 'image|mimes:jpg,jpeg,png,svg', ]; protected $casts = [ 'name' => 'string', 'code' => 'string', 'product_unit' => 'string', 'product_type' => 'integer', ]; public function getIdFilterFields(): array { return [ 'id' => self::class, ]; } public function prepareLinks(): array { return [ 'self' => route('products.show', $this->id), ]; } public function prepareAttributes(): array { $this->load('products'); $prices = collect($this->products)->pluck('product_price')->toArray(); $prices = !empty($prices) ? $prices : [0]; $fields = [ 'name' => $this->name, 'code' => $this->code, 'product_unit' => $this->getProductUnitName($this->product_unit), 'product_type' => $this->product_type, 'min_price' => min($prices), 'max_price' => max($prices), 'images' => $this->image_url, 'products' => $this->products->map(function ($product) { $productData = $product->prepareAttributes(); $productData['id'] = $product->id; return $productData; }), ]; if ($this->product_type == self::VARIATION_PRODUCT) { $fields['variation'] = $this->variations->prepareAttributes(); $fields['variation_types'] = $this->variationTypes->map(function ($variationType) { return $variationType->only('id', 'name'); }); } return $fields; } /** * @return array|string */ public function getImageUrlAttribute() { /** @var Media $media */ $medias = $this->getMedia(MainProduct::PATH); $images = []; if (!empty($medias)) { foreach ($medias as $key => $media) { $images['imageUrls'][$key] = $media->getFullUrl(); $images['id'][$key] = $media->id; } return $images; } return ''; } public function products() { return $this->hasMany(Product::class); } public function variations() { return $this->hasOneThrough(Variation::class, VariationProduct::class, 'main_product_id', 'id', 'id', 'variation_id'); } public function variationTypes() { return $this->hasManyThrough(VariationType::class, VariationProduct::class, 'main_product_id', 'id', 'id', 'variation_type_id'); } /** * @return array|string */ public function getProductUnitName() { $productUnit = BaseUnit::whereId($this->product_unit)->first(); if ($productUnit) { return $productUnit->toArray(); } return ''; } } VariationType.php 0000644 00000000754 15213512572 0010064 0 ustar 00 <?php namespace App\Models; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; class VariationType extends BaseModel { use HasFactory, HasJsonResourcefulData; protected $fillable = [ 'name', 'variation_id', ]; public function variation() { return $this->belongsTo(Variation::class); } public function variationProducts() { return $this->hasMany(VariationProduct::class); } } Service.php 0000644 00000001756 15213512572 0006671 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; class Service extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData; protected $fillable = [ 'title', 'description', ]; const ICON = 'service_icon'; public function getIconAttribute() { $url = $this->getFirstMediaUrl(self::ICON); return $url ? $url : asset('images/home/service.png'); } public function prepareLinks(): array { return [ // ]; } public function prepareAttributes(): array { return [ 'icon' => $this->icon, 'title' => $this->title, 'description' => $this->description, ]; } } Brand.php 0000644 00000006377 15213512572 0006323 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Facades\Auth; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\MediaCollections\Models\Media; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\Brand * * @property int $id * @property string $name * @property string|null $description * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read string $image_url * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|Media[] $media * @property-read int|null $media_count * * @method static \Illuminate\Database\Eloquent\Builder|Brand newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Brand newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Brand query() * @method static \Illuminate\Database\Eloquent\Builder|Brand whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Brand whereDescription($value) * @method static \Illuminate\Database\Eloquent\Builder|Brand whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Brand whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Brand whereUpdatedAt($value) * * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Product> $products * @property-read int|null $products_count * * @mixin \Eloquent */ class Brand extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'brands'; const JSON_API_TYPE = 'brands'; protected $fillable = [ 'tenant_id', 'name', 'description', ]; public const PATH = 'brand_image'; protected $appends = ['image_url']; public static function rules(): array { return [ 'name' => 'required|unique:brands,name,NULL,id,tenant_id,' . Auth::user()->tenant_id, 'image' => 'image|mimes:jpg,jpeg,png,svg', ]; } public function getImageUrlAttribute(): string { /** @var Media $media */ $media = $this->getMedia(Brand::PATH)->first(); if (! empty($media)) { return $media->getFullUrl(); } return ''; } public function prepareLinks(): array { return [ 'self' => route('brands.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'name' => $this->name, 'description' => $this->description, 'image' => $this->image_url, 'product_count' => $this->products_count, ]; return $fields; } public function prepareBrands(): array { $fields = [ 'id' => $this->id, 'name' => $this->name, ]; return $fields; } public function products(): HasMany { return $this->hasMany(Product::class, 'brand_id', 'id'); } } SalesPayment.php 0000644 00000006536 15213512572 0007677 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Query\Builder; /** * App\Models\SalesPayment * * @property int $id * @property int $sale_id * @property int $reference * @property string $payment_date * @property int|null $payment_type * @property float|null $amount * @property float|null $received_amount * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|SalesPayment newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|SalesPayment newQuery() * @method static \Illuminate\Database\Eloquent\Builder|SalesPayment query() * @method static \Illuminate\Database\Eloquent\Builder|SalesPayment whereAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|SalesPayment whereReceivedAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|SalesPayment whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|SalesPayment whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|SalesPayment wherePaymentDate($value) * @method static \Illuminate\Database\Eloquent\Builder|SalesPayment wherePaymentType($value) * @method static \Illuminate\Database\Eloquent\Builder|SalesPayment whereSaleId($value) * @method static \Illuminate\Database\Eloquent\Builder|SalesPayment whereReference($value) * @method static \Illuminate\Database\Eloquent\Builder|SalesPayment whereUpdatedAt($value) * * @property-read \App\Models\Sale $sale * * @mixin \Eloquent */ class SalesPayment extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'sales_payments'; public const JSON_API_TYPE = 'sales_payments'; protected $with = ['paymentMethod']; public const CASH = 1; public const CHEQUE = 2; public const BANK_TRANSFER = 3; public const OTHER = 4; /** * @var string[] */ protected $fillable = [ 'sale_id', 'reference', 'payment_date', 'payment_type', 'amount', 'received_amount', ]; /** * @var string[] */ public static $rules = [ 'payment_date' => 'date', 'amount' => 'required|numeric', ]; public function prepareLinks(): array { return []; } public function prepareAttributes(): array { $fields = [ 'sale_id' => $this->sale_id, 'reference' => $this->reference, 'payment_date' => $this->payment_date, 'payment_type' => $this->payment_type, 'amount' => $this->amount, 'received_amount' => $this->received_amount, ]; return $fields; } public function sale(): BelongsTo { return $this->belongsTo(Sale::class, 'sale_id', 'id'); } public function scopeUser(Builder $builder, $userId) { return $builder->whereHas('sale', function ($query) use ($userId) { $query->where('user_id', $userId); }); } public function paymentMethod(): BelongsTo { return $this->belongsTo(PaymentMethod::class, 'payment_type', 'id'); } } Variation.php 0000644 00000004363 15213512572 0007222 0 ustar 00 <?php namespace App\Models; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasMany; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\Variation * * @property int $id * @property string $name * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\VariationType> $variation_types * @property-read int|null $variation_types_count * @method static \Illuminate\Database\Eloquent\Builder|Variation newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Variation newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Variation query() * @method static \Illuminate\Database\Eloquent\Builder|Variation whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Variation whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Variation whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Variation whereUpdatedAt($value) * @mixin \Eloquent */ class Variation extends BaseModel { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; const JSON_API_TYPE = 'variations'; protected $fillable = [ 'tenant_id', 'name', ]; public function prepareLinks(): array { return [ 'self' => route('variations.show', $this->id), ]; } public function prepareAttributes(): array { foreach ($this->variation_types as $type) { $variation_types[] = [ 'id' => $type->id, 'name' => $type->name, ]; } $fields = [ 'id' => $this->id, 'name' => $this->name, 'variation_types' => $variation_types ?? [], ]; return $fields; } /** * * @return HasMany */ public function variation_types(): HasMany { return $this->hasMany(VariationType::class); } public function variationProducts(): HasMany { return $this->hasMany(VariationProduct::class); } } Contracts/JsonResourceful.php 0000644 00000001153 15213512572 0012350 0 ustar 00 <?php namespace App\Models\Contracts; interface JsonResourceful { /** * @return string */ public function getResourceType(); /** * @return array */ public function prepareData(); /** * @return array */ public function prepareIncluded(); /** * @return array */ public function prepareLinks(); /** * @return array */ public function prepareAttributes(); /** * @return array */ public function asJsonResource(); /** * @return array */ public function asJsonResourceWithRelationships(); } POSRegister.php 0000644 00000007331 15213512572 0007432 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\POSRegister * * @property int $id * @property float $cash_in_hand * @property \Illuminate\Support\Carbon|null $closed_at * @property float|null $cash_in_hand_while_closing * @property float|null $bank_transfer * @property float|null $cheque * @property float|null $other * @property int $user_id * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|POSRegister newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|POSRegister newQuery() * @method static \Illuminate\Database\Eloquent\Builder|POSRegister query() * @method static \Illuminate\Database\Eloquent\Builder|POSRegister whereBankTransfer($value) * @method static \Illuminate\Database\Eloquent\Builder|POSRegister whereCashInHand($value) * @method static \Illuminate\Database\Eloquent\Builder|POSRegister whereCashInHandWhileClosing($value) * @method static \Illuminate\Database\Eloquent\Builder|POSRegister whereCheque($value) * @method static \Illuminate\Database\Eloquent\Builder|POSRegister whereClosedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|POSRegister whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|POSRegister whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|POSRegister whereOther($value) * @method static \Illuminate\Database\Eloquent\Builder|POSRegister whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|POSRegister whereUserId($value) * * @mixin \Eloquent */ class POSRegister extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'pos_register'; public $fillable = [ 'cash_in_hand', 'closed_at', 'cash_in_hand_while_closing', 'bank_transfer', 'cheque', 'other', 'total_sale', 'total_return', 'total_amount', 'notes', 'tenant_id', 'user_id', ]; public $casts = [ 'closed_at' => 'datetime', 'cash_in_hand_while_closing' => 'double', 'bank_transfer' => 'double', 'cheque' => 'double', 'other' => 'double', 'notes' => 'string', 'total_sale' => 'double', 'total_return' => 'double', 'total_amount' => 'double', ]; public static $rules = [ 'cash_in_hand' => 'required|numeric', ]; /** * @return string[] */ public function getIdFilterFields(): array { return [ 'id' => self::class, ]; } public function prepareLinks(): array { return []; } public function prepareAttributes(): array { $fields = [ 'cash_in_hand_while_closing' => $this->cash_in_hand_while_closing, 'cash_in_hand' => $this->cash_in_hand, 'notes' => $this->notes, 'closed_at' => $this->closed_at, 'created_at' => $this->created_at, 'user' => $this->user, 'tenant' => $this->tenant, ]; return $fields; } /** * Get the user that owns the POSRegister */ public function user(): BelongsTo { return $this->belongsTo(User::class); } public function tenant(): BelongsTo { return $this->belongsTo(MultiTenant::class, 'tenant_id'); } } AdjustmentItem.php 0000644 00000006024 15213512572 0010217 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\AdjustmentItem * * @property int $id * @property int $adjustment_id * @property int $product_id * @property float|null $quantity * @property int $method_type * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|AdjustmentItem newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|AdjustmentItem newQuery() * @method static \Illuminate\Database\Eloquent\Builder|AdjustmentItem query() * @method static \Illuminate\Database\Eloquent\Builder|AdjustmentItem whereAdjustmentId($value) * @method static \Illuminate\Database\Eloquent\Builder|AdjustmentItem whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|AdjustmentItem whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|AdjustmentItem whereMethodType($value) * @method static \Illuminate\Database\Eloquent\Builder|AdjustmentItem whereProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|AdjustmentItem whereQuantity($value) * @method static \Illuminate\Database\Eloquent\Builder|AdjustmentItem whereUpdatedAt($value) * * @property-read \App\Models\Adjustment $adjustment * @property-read mixed $sale_unit * @property-read \App\Models\Product $product * * @mixin \Eloquent */ class AdjustmentItem extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'adjustment_items'; public const JSON_API_TYPE = 'adjustment_items'; const METHOD_ADDITION = 1; const METHOD_SUBTRACTION = 2; protected $fillable = [ 'adjustment_id', 'product_id', 'method_type', 'quantity', ]; public static $rules = [ 'product_id' => 'required|exists:products,id', 'method_type' => 'required', 'quantity' => 'nullable|numeric', ]; public $casts = [ 'quantity' => 'double', ]; protected $appends = ['sale_unit']; public function prepareLinks(): array { return [ ]; } public function prepareAttributes(): array { $fields = [ 'product_id' => $this->product_id, 'method_type' => $this->method_type, 'quantity' => $this->quantity, ]; return $fields; } public function adjustment(): BelongsTo { return $this->belongsTo(Adjustment::class, 'adjustment_id', 'id'); } public function product(): BelongsTo { return $this->belongsTo(Product::class, 'product_id', 'id'); } public function getSaleUnitAttribute() { $saleUnitId = Product::whereId($this->product_id)->value('sale_unit'); $saleUnit = Unit::whereId($saleUnitId)->value('short_name'); return $saleUnit; } } UserStore.php 0000644 00000000724 15213512572 0007216 0 ustar 00 <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class UserStore extends Model { use HasFactory; protected $table = 'user_stores'; protected $fillable = [ 'user_id', 'store_id', ]; public function user() { return $this->belongsTo(User::class); } public function store() { return $this->belongsTo(Store::class); } } Taxes.php 0000644 00000002047 15213512572 0006347 0 ustar 00 <?php namespace App\Models; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Facades\Auth; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; class Taxes extends BaseModel { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $fillable = [ 'tenant_id', 'name', 'number', 'status', ]; public static function rules(): array { return [ 'name' => 'required|unique:taxes,name,NULL,id,tenant_id,' . Auth::user()->tenant_id, 'number' => 'required', ]; } public function prepareLinks(): array { return [ 'self' => route('taxes.show', $this->id), ]; } public function prepareAttributes(): array { return [ 'name' => $this->name, 'number' => $this->number, 'status' => $this->status, ]; } } Product.php 0000644 00000033620 15213512572 0006704 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Relations\HasOneThrough; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Storage; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\MediaCollections\Models\Media; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\Product * * @property int $id * @property string $name * @property string $code * @property string $product_code * @property int $product_category_id * @property int $brand_id * @property int $main_product_id * @property float $product_cost * @property float $product_price * @property string $product_unit * @property string|null $sale_unit * @property string|null $purchase_unit * @property int $warehouse_id * @property string|null $stock_alert * @property float|null $order_tax * @property string|null $tax_type * @property string|null $notes * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Brand|null $brand * @property-read \App\Models\MainProduct|null $mainProduct * @property-read string $image_url * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|Media[] $media * @property-read int|null $media_count * @property-read \App\Models\ProductCategory|null $productCategory * @property-read \App\Models\Warehouse|null $warehouse * * @method static \Illuminate\Database\Eloquent\Builder|Product newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Product newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Product query() * @method static \Illuminate\Database\Eloquent\Builder|Product whereBrandId($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereMainProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereProductCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereNotes($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereOrderTax($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereProductCategoryId($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereProductCost($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereProductPrice($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereProductUnit($value) * @method static \Illuminate\Database\Eloquent\Builder|Product wherePurchaseUnit($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereSaleUnit($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereStockAlert($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereTaxType($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Product whereWarehouseId($value) * * @property-read string $barcode_image_url * @property int|null $barcode_symbol * * @method static \Illuminate\Database\Eloquent\Builder|Product whereBarcodeSymbol($value) * * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\Purchase[] $purchases * @property-read int|null $purchases_count * @property-read \App\Models\ManageStock|null $stock * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ManageStock[] $stocks * @property-read int|null $stocks_count * @property string|null $quantity_limit * * @method static \Illuminate\Database\Eloquent\Builder|Product whereQuantityLimit($value) * * @mixin \Eloquent */ class Product extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'products'; const JSON_API_TYPE = 'products'; public const PATH = 'product'; public const PRODUCT_BARCODE_PATH = 'product_barcode'; public const CODE128 = 1; public const CODE39 = 2; public const EAN8 = 3; public const UPC = 4; public const EAN13 = 5; protected $appends = ['image_url', 'barcode_image_url']; protected $fillable = [ 'tenant_id', 'name', 'code', 'product_code', 'product_category_id', 'main_product_id', 'brand_id', 'product_cost', 'product_price', 'product_unit', 'sale_unit', 'purchase_unit', 'stock_alert', 'quantity_limit', 'order_tax', 'tax_type', 'notes', 'barcode_symbol', 'expiry_date', ]; public static function rules(): array { return [ 'name' => 'required', 'code' => 'required|unique:products,code,NULL,id,tenant_id,' . Auth::user()->tenant_id, 'product_code' => 'required', 'product_category_id' => 'required|exists:product_categories,id', 'brand_id' => 'required|exists:brands,id', 'product_cost' => 'required|numeric', 'product_price' => 'required|numeric', 'product_unit' => 'required', 'sale_unit' => 'nullable', 'purchase_unit' => 'nullable', 'stock_alert' => 'nullable', 'quantity_limit' => 'nullable', 'order_tax' => 'nullable|numeric', 'tax_type' => 'nullable', 'notes' => 'nullable', 'barcode_symbol' => 'required', 'images.*' => 'image|mimes:jpg,jpeg,png,svg', ]; } public static $availableRelations = [ 'product_category_id' => 'productCategory', 'brand_id' => 'brand', ]; protected $casts = [ 'product_cost' => 'float', 'product_price' => 'float', 'grand_total' => 'float', 'order_tax' => 'float', ]; /** * @return array|string */ public function getImageUrlAttribute() { /** @var Media $media */ $medias = $this->getMedia(Product::PATH); $images = []; if (!empty($medias)) { foreach ($medias as $key => $media) { $images['imageUrls'][$key] = $media->getFullUrl(); $images['id'][$key] = $media->id; } return $images; } return ''; } public function getBarcodeImageUrlAttribute(): string { /** @var Media $media */ $media = $this->getMedia(Product::PRODUCT_BARCODE_PATH)->first(); if (!empty($media)) { return $media->getFullUrl(); } return ''; } public function prepareLinks(): array { return [ 'self' => route('products.show', $this->id), ]; } public function prepareAttributes(): array { $this->load('variationProduct', 'mainProduct'); $fields = [ 'name' => $this->name, 'code' => $this->code, 'product_code' => $this->product_code, 'main_product_id' => $this->main_product_id, 'product_category_id' => $this->product_category_id, 'brand_id' => $this->brand_id, 'product_cost' => $this->product_cost, 'product_price' => $this->product_price, 'product_unit' => $this->product_unit, 'sale_unit' => $this->sale_unit, 'purchase_unit' => $this->purchase_unit, 'stock_alert' => $this->stock_alert, 'quantity_limit' => $this->quantity_limit, 'order_tax' => $this->order_tax, 'tax_type' => $this->tax_type, 'notes' => $this->notes, 'images' => $this->mainProduct->image_url, 'product_category_name' => $this->productCategory->name, 'brand_name' => $this->brand->name, 'barcode_image_url' => $this->barcode_image_url, 'barcode_symbol' => $this->barcode_symbol, 'expiry_date' => $this->expiry_date, 'created_at' => $this->created_at, 'product_unit_name' => $this->getProductUnitName(), 'purchase_unit_name' => $this->getPurchaseUnitName(), 'sale_unit_name' => $this->getSaleUnitName(), 'stock' => $this->stock, 'warehouse' => $this->warehouse($this->id) ?? '', 'barcode_url' => Storage::url('product_barcode/barcode-PR_' . $this->id . '.png'), 'in_stock' => $this->inStock($this->id), ]; if ($this->variationProduct) { $fields['variation_product'] = $this->variationProduct->prepareAttributes(); } return $fields; } /** * @return string[] */ public function getIdFilterFields(): array { return [ 'id' => self::class, 'product_category_id' => ProductCategory::class, 'brand_id' => Brand::class, ]; } /** * @return array|string */ public function getProductUnitName() { $productUnit = BaseUnit::whereId($this->product_unit)->first(); if ($productUnit) { return $productUnit->toArray(); } return ''; } /** * @return array|string */ public function getPurchaseUnitName() { $purchaseUnit = Unit::whereId($this->purchase_unit)->first(); if ($purchaseUnit) { return $purchaseUnit->toArray(); } return ''; } /** * @return array|string */ public function getSaleUnitName() { $saleUnit = Unit::whereId($this->sale_unit)->first(); if ($saleUnit) { return $saleUnit->toArray(); } return ''; } public function productCategory(): BelongsTo { return $this->belongsTo(ProductCategory::class, 'product_category_id', 'id'); } public function brand(): BelongsTo { return $this->belongsTo(Brand::class, 'brand_id', 'id'); } public function stock(): HasOne { return $this->hasOne(ManageStock::class, 'product_id', 'id'); } public function purchases(): HasMany { return $this->hasMany(Purchase::class, 'purchase_id', 'id'); } public function prepareTopSelling(): array { return [ 'name' => $this->name, 'total_quantity' => $this->total_quantity, 'grand_total' => $this->grand_total, 'sale_unit' => isset($this->getSaleUnitName()['short_name']) ? $this->getSaleUnitName()['short_name'] : null, 'image' => $this->image_url, ]; } public function prepareProducts(): array { $imageUrls = $this->mainProduct->image_url; return [ 'id' => $this->id, 'name' => $this->name, 'code' => $this->code, 'product_code' => $this->product_code, 'price' => $this->product_price, 'sale_unit' => array_values($this->getProductUnitName())[1], 'remaining_quantity' => $this->stock->quantity ?? 0, 'images' => $imageUrls['imageUrls'] ?? [], ]; } public function prepareTopSellingReport(): array { return [ 'name' => $this->name, 'total_quantity' => $this->total_quantity, 'price' => $this->product_price, 'grand_total' => $this->grand_total, 'code' => $this->code, 'product_code' => $this->product_code, 'sale_unit' => isset($this->getSaleUnitName()['short_name']) ? $this->getSaleUnitName()['short_name'] : null, ]; } public function yearlyTopSelling(): array { return [ 'name' => $this->name, 'total_quantity' => $this->total_quantity, 'grand_total' => $this->grand_total, 'sale_unit' => isset($this->getSaleUnitName()['short_name']) ? $this->getSaleUnitName()['short_name'] : null, ]; } /** * @return mixed */ public function warehouse($id) { return Managestock::where('product_id', $id)->Join( 'warehouses', 'manage_stocks.warehouse_id', 'warehouses.id' )->select( DB::raw('sum(quantity) as total_quantity'), 'warehouses.name' )->groupBy('warehouse_id')->get(); } /** * @return mixed */ public function inStock($id) { $totalQuantity = Managestock::where('product_id', $id)->sum('quantity'); return $totalQuantity; } public function stocks(): HasMany { return $this->hasMany(ManageStock::class, 'product_id', 'id'); } public function mainProduct(): BelongsTo { return $this->belongsTo(MainProduct::class, 'main_product_id', 'id'); } public function prepareProductReport() { return [ 'reference_code' => $this->code, 'name' => $this->name, 'total_quantity' => $this->total_quantity, 'grand_total' => $this->grand_total, 'product_unit' => $this->product_unit, ]; } public function variationProduct(): HasOne { return $this->hasOne(VariationProduct::class, 'product_id', 'id'); } public function variationType(): HasOneThrough { return $this->hasOneThrough(VariationType::class, VariationProduct::class, 'product_id', 'id', 'id', 'variation_type_id'); } } Transaction.php 0000644 00000003110 15213512572 0007540 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Transaction extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $fillable = [ 'tenant_id', 'transaction_id', 'amount', 'type', 'status', 'meta', 'user_id', ]; const PAID = 1; const UNPAID = 0; public function prepareLinks(): array { return [ // ]; } public function prepareAttributes(): array { $user = $this->user()->withoutGlobalScopes()->with('subscriptions.plan.currency')->first(); return [ 'user_name' => $this->user()->withoutGlobalScopes()->first()->full_name ?? '', 'transaction_id' => $this->transaction_id, 'amount' => $this->amount, 'type' => $this->type, 'status' => $this->status, 'meta' => $this->meta, 'subscription' => $user->subscriptions, 'currency' => $user->plan->currency->symbol ?? '₹', 'created_at' => $this->created_at, ]; } public function tenant() { return $this->belongsTo(MultiTenant::class, 'tenant_id'); } public function subscription() { return $this->belongsTo(Subscription::class); } public function user() { return $this->belongsTo(User::class, 'user_id')->withoutGlobalScopes(); } } BaseUnit.php 0000644 00000003120 15213512572 0006766 0 ustar 00 <?php namespace App\Models; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * Class BaseUnit * * @property int $id * @property string $name * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|BaseUnit newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|BaseUnit newQuery() * @method static \Illuminate\Database\Eloquent\Builder|BaseUnit query() * @method static \Illuminate\Database\Eloquent\Builder|BaseUnit whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|BaseUnit whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|BaseUnit whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|BaseUnit whereUpdatedAt($value) * * @property int $is_default * * @method static \Illuminate\Database\Eloquent\Builder|BaseUnit whereIsDefault($value) * * @mixin \Eloquent */ class BaseUnit extends BaseModel { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'base_units'; protected $fillable = [ 'tenant_id', 'name', ]; public function prepareLinks(): array { return [ 'self' => route('base-units.show', $this->id), ]; } public function prepareAttributes(): array { $fields = ['name' => $this->name]; return $fields; } } SaleReturn.php 0000644 00000015647 15213512572 0007361 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Query\Builder; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; /** * App\Models\SaleReturn * * @property int $id * @property \Illuminate\Support\Carbon $date * @property int $customer_id * @property int $warehouse_id * @property float|null $tax_rate * @property float|null $tax_amount * @property float|null $discount * @property float|null $shipping * @property float|null $grand_total * @property float|null $paid_amount * @property int|null $payment_type * @property string|null $note * @property string|null $reference_code * @property int|null $status * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Customer $customer * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|\Spatie\MediaLibrary\MediaCollections\Models\Media[] $media * @property-read int|null $media_count * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\SaleReturnItem[] $saleReturnItems * @property-read int|null $sale_return_items_count * @property-read \App\Models\Warehouse $warehouse * * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn newQuery() * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn query() * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereCustomerId($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereDate($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereDiscount($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereGrandTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereNote($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn wherePaidAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn wherePaymentType($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereReferenceCode($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereShipping($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereTaxRate($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereWarehouseId($value) * * @property int|null $sale_id * @property-read \App\Models\Sale|null $sale * * @method static \Illuminate\Database\Eloquent\Builder|SaleReturn whereSaleId($value) * * @mixin \Eloquent */ class SaleReturn extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData; protected $table = 'sales_return'; public const JSON_API_TYPE = 'sales_return'; public const SALE_RETURN_PDF = 'sale_return_pdf'; /** * @var string[] */ protected $fillable = [ 'date', 'customer_id', 'warehouse_id', 'tax_rate', 'tax_amount', 'discount', 'shipping', 'grand_total', 'paid_amount', 'payment_type', 'payment_status', 'note', 'status', 'reference_code', 'sale_id', ]; /** * @var string[] */ public static $rules = [ 'date' => 'date|required', 'customer_id' => 'required|exists:customers,id', 'warehouse_id' => 'required|exists:warehouses,id', 'tax_rate' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount' => 'nullable|numeric', 'shipping' => 'nullable|numeric', 'grand_total' => 'nullable|numeric', 'paid_amount' => 'numeric|nullable', 'payment_type' => 'numeric|integer|nullable', 'notes' => 'nullable', 'status' => 'integer|required', 'reference_code' => 'nullable', ]; /** * @var string[] */ public $casts = [ 'date' => 'date', 'tax_rate' => 'double', 'tax_amount' => 'double', 'discount' => 'double', 'shipping' => 'double', 'grand_total' => 'double', 'paid_amount' => 'double', ]; //tax type const const EXCLUSIVE = 1; const INCLUSIVE = 2; // discount type const const PERCENTAGE = 1; const FIXED = 2; // payment type const CASH = 1; // Order status const RECEIVED = 1; const PENDING = 2; public function prepareLinks(): array { return [ 'self' => route('sales-return.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'date' => $this->date, 'sale_id' => $this->sale_id, 'customer_id' => $this->customer_id, 'customer_name' => $this->customer->name, 'warehouse_id' => $this->warehouse_id, 'warehouse_name' => $this->warehouse->name, 'tax_rate' => $this->tax_rate, 'tax_amount' => $this->tax_amount, 'discount' => $this->discount, 'shipping' => $this->shipping, 'grand_total' => $this->grand_total, 'paid_amount' => $this->paid_amount, 'payment_type' => $this->payment_type, 'payment_status' => $this->payment_status, 'note' => $this->note, 'status' => $this->status, 'reference_code' => $this->reference_code, 'sale_return_items' => $this->saleReturnItems, 'created_at' => $this->created_at, ]; return $fields; } public function customer(): BelongsTo { return $this->belongsTo(Customer::class, 'customer_id', 'id'); } public function warehouse(): BelongsTo { return $this->belongsTo(Warehouse::class, 'warehouse_id', 'id'); } public function saleReturnItems(): HasMany { return $this->hasMany(SaleReturnItem::class, 'sale_return_id', 'id'); } public function sale(): BelongsTo { return $this->belongsTo(Sale::class, 'sale_id', 'id'); } public function scopeUser(Builder $builder, $userId) { return $builder->whereHas('sale', function ($query) use ($userId) { $query->where('user_id', $userId); }); } } Setting.php 0000644 00000004034 15213512572 0006676 0 ustar 00 <?php namespace App\Models; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\MediaCollections\Models\Media; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\Setting * * @property int $id * @property string $key * @property string $value * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read string $logo * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|Media[] $media * @property-read int|null $media_count * * @method static \Illuminate\Database\Eloquent\Builder|Setting newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Setting newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Setting query() * @method static \Illuminate\Database\Eloquent\Builder|Setting whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Setting whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Setting whereKey($value) * @method static \Illuminate\Database\Eloquent\Builder|Setting whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Setting whereValue($value) * * @mixin \Eloquent */ class Setting extends Model implements HasMedia { use HasFactory, InteractsWithMedia, BelongsToTenant, Multitenantable; const PATH = 'settings'; const DUAL_SCREEN = 'dual_screen_images'; const CLICK_AUDIO = 'click_audio'; protected $table = 'settings'; /** * @var string[] */ protected $fillable = [ 'tenant_id', 'key', 'value', ]; public function getLogoAttribute(): string { /** @var Media $media */ $media = $this->media->last(); if (! empty($media)) { return $media->getFullUrl(); } return asset('images/infyom.png'); } } PurchaseReturnItem.php 0000644 00000013314 15213512572 0011053 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\PurchaseReturnItem * * @property int $id * @property int $purchase_id * @property int $product_id * @property float|null $product_cost * @property float|null $net_unit_cost * @property int $tax_type * @property float|null $tax_value * @property float|null $tax_amount * @property int $discount_type * @property float|null $discount_value * @property float|null $discount_amount * @property int $purchase_unit * @property float|null $quantity * @property float|null $sub_total * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Product|null $product * @property-read \App\Models\PurchaseReturn|null $purchaseReturn * * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem newQuery() * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem query() * * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereDiscountAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereDiscountType($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereDiscountValue($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereNetUnitCost($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereProductCost($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem wherePurchaseReturnId($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem wherePurchaseUnit($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereQuantity($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereSubTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereTaxType($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereTaxValue($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereUpdatedAt($value) * * @property int $purchase_return_id * * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturnItem whereCreatedAt($value) * * @mixin \Eloquent */ class PurchaseReturnItem extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'purchases_return_items'; const JSON_API_TYPE = 'purchases_return_items'; protected $fillable = [ 'product_id', 'product_cost', 'net_unit_cost', 'tax_type', 'tax_value', 'tax_amount', 'discount_type', 'discount_value', 'discount_amount', 'purchase_unit', 'quantity', 'sub_total', ]; public static $rules = [ 'product_id' => 'required|exists:products,id', 'product_cost' => 'nullable|numeric', 'net_unit_cost' => 'nullable|numeric', 'tax_type' => 'nullable|numeric', 'tax_value' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount_type' => 'nullable|numeric', 'discount_value' => 'nullable|numeric', 'discount_amount' => 'nullable|numeric', 'purchase_unit' => 'nullable|numeric', 'quantity' => 'nullable|numeric', 'sub_total' => 'nullable|numeric', 'unit_id' => 'integer', ]; public $casts = [ 'product_cost' => 'double', 'net_unit_cost' => 'double', 'tax_value' => 'double', 'tax_amount' => 'double', 'discount_value' => 'double', 'discount_amount' => 'double', 'quantity' => 'double', 'sub_total' => 'double', ]; public function getPurchaseUnitAttribute($value) { $purchaseUnit = Unit::whereId($value)->first(); if ($purchaseUnit) { return $purchaseUnit->toArray(); } return []; } public function prepareLinks(): array { return [ ]; } public function prepareAttributes(): array { $fields = [ 'product_id' => $this->product_id, 'product_cost' => $this->product_cost, 'net_unit_cost' => $this->net_unit_cost, 'tax_type' => $this->tax_type, 'tax_value' => $this->tax_value, 'tax_amount' => $this->tax_amount, 'discount_type' => $this->discount_type, 'discount_vale' => $this->discount_value, 'discount_amount' => $this->discount_amount, 'purchase_unit' => $this->purchase_unit, 'quantity' => $this->quantity, 'sub_total' => $this->sub_total, 'product_code' => $this->product->code, 'product_name' => $this->product->name, ]; return $fields; } public function purchaseReturn(): BelongsTo { return $this->belongsTo(PurchaseReturn::class, 'purchase_return_id', 'id'); } public function product(): BelongsTo { return $this->belongsTo(Product::class, 'product_id', 'id'); } } Supplier.php 0000644 00000006155 15213512572 0007072 0 ustar 00 <?php namespace App\Models; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Facades\Auth; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\Supplier * * @method static \Illuminate\Database\Eloquent\Builder|Supplier newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Supplier newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Supplier query() * * @property int $id * @property string $name * @property string $email * @property string $phone * @property string $country * @property string $city * @property string $address * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|Supplier whereAddress($value) * @method static \Illuminate\Database\Eloquent\Builder|Supplier whereCity($value) * @method static \Illuminate\Database\Eloquent\Builder|Supplier whereCountry($value) * @method static \Illuminate\Database\Eloquent\Builder|Supplier whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Supplier whereEmail($value) * @method static \Illuminate\Database\Eloquent\Builder|Supplier whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Supplier whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Supplier wherePhone($value) * @method static \Illuminate\Database\Eloquent\Builder|Supplier whereUpdatedAt($value) * * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Purchase> $purchases * @property-read int|null $purchases_count * * @mixin \Eloquent */ class Supplier extends BaseModel { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'suppliers'; const JSON_API_TYPE = 'suppliers'; protected $fillable = [ 'tenant_id', 'name', 'email', 'phone', 'country', 'city', 'address', ]; public static function rules(): array { return [ 'name' => 'required', 'email' => 'required|email|unique:suppliers,email,NULL,id,tenant_id,' . Auth::user()->tenant_id, 'phone' => 'required|string', 'country' => 'required', 'city' => 'required', 'address' => 'required', ]; } public function prepareLinks(): array { return [ 'self' => route('suppliers.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'name' => $this->name, 'email' => $this->email, 'phone' => $this->phone, 'country' => $this->country, 'city' => $this->city, 'address' => $this->address, 'created_at' => $this->created_at, ]; return $fields; } public function purchases(): HasMany { return $this->hasMany(Purchase::class, 'supplier_id', 'id'); } } Subscription.php 0000644 00000006606 15213512572 0007754 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Carbon\Carbon; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; class Subscription extends Model implements JsonResourceful, HasMedia { use HasFactory, HasJsonResourcefulData, InteractsWithMedia; protected $fillable = [ 'user_id', 'plan_id', 'transaction_id', 'payment_type', 'plan_amount', 'payable_amount', 'plan_frequency', 'start_date', 'end_date', 'trial_ends_at', 'status', 'is_paid', 'data', 'notes', ]; const ATTACHMENT = 'attachment'; const INACTIVE = 0; const ACTIVE = 1; const PENDING = 2; const REJECTED = 3; const STATUS = [ self::INACTIVE => 'Inactive', self::ACTIVE => 'Active', self::PENDING => 'Pending', self::REJECTED => 'Rejected', ]; const TYPE_FREE = 0; const TYPE_STRIPE = 1; const TYPE_PAYPAL = 2; const TYPE_MANUAL = 3; const TYPE_RAZORPAY = 4; const TYPE_PAYSTACK = 5; const PAYMENT_TYPES = [ self::TYPE_FREE => 'Free', self::TYPE_STRIPE => 'Stripe', self::TYPE_PAYPAL => 'PayPal', self::TYPE_MANUAL => 'Manual', self::TYPE_RAZORPAY => 'RazorPay', self::TYPE_PAYSTACK => 'Paystack', ]; public function prepareLinks(): array { return [ 'self' => route('subscriptions.show', $this->id), ]; } public function prepareAttributes(): array { return [ 'user_name' => $this->user()->withoutGlobalScopes()->first()->full_name ?? '', 'plan_name' => $this->plan->name, 'payment_type' => $this->payment_type, 'transaction_id' => $this->transaction_id, 'transaction_date' => $this->transaction->created_at ?? null, 'plan_amount' => $this->plan_amount, 'payable_amount' => $this->payable_amount, 'plan_frequency' => $this->plan_frequency, 'start_date' => $this->start_date, 'end_date' => $this->end_date, 'trial_ends_at' => $this->trial_ends_at, 'currency_symbol' => $this->plan->currency->symbol, 'status' => $this->isExpired() ? self::INACTIVE : $this->status, 'notes' => $this->notes ?? null, 'attachment' => $this->attachment_url, ]; } public function getAttachmentUrlAttribute() { $media = $this->getMedia(self::ATTACHMENT)->first(); if ($media) { return $media->getFullUrl(); } return null; } public function user() { return $this->belongsTo(User::class, 'user_id')->withoutGlobalScopes(); } public function plan() { return $this->belongsTo(Plan::class); } public function transaction() { return $this->belongsTo(Transaction::class); } public function isExpired(): bool { $now = Carbon::now(); if ($this->end_date > $now) { return false; } if ((! empty($this->trial_ends_at) && $this->trial_ends_at < $now) || $this->end_date < $now) { return true; } return false; } } Role.php 0000644 00000012313 15213512572 0006161 0 ustar 00 <?php namespace App\Models; use Illuminate\Support\Str; use App\Traits\Multitenantable; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Auth; use App\Traits\HasJsonResourcefulData; use Spatie\Permission\Models\Role as roleModal; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; use Illuminate\Database\Eloquent\Factories\HasFactory; /** * App\Models\Role * * @property int $id * @property string $name * @property string|null $display_name * @property string $guard_name * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \Illuminate\Database\Eloquent\Collection|\Spatie\Permission\Models\Permission[] $permissions * @property-read int|null $permissions_count * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\User[] $users * @property-read int|null $users_count * * @method static \Illuminate\Database\Eloquent\Builder|Role newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Role newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Role permission($permissions) * @method static \Illuminate\Database\Eloquent\Builder|Role query() * @method static \Illuminate\Database\Eloquent\Builder|Role whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Role whereDisplayName($value) * @method static \Illuminate\Database\Eloquent\Builder|Role whereGuardName($value) * @method static \Illuminate\Database\Eloquent\Builder|Role whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Role whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Role whereUpdatedAt($value) * * @mixin \Eloquent */ class Role extends roleModal { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'roles'; const JSON_API_TYPE = 'roles'; public $guard_name = 'web'; protected $fillable = [ 'name', 'tenant_id', 'display_name', 'guard_name', ]; const SUPER_ADMIN = 'superadmin'; const ADMIN = 'admin'; public static function rules(): array { return [ 'name' => 'required|unique:roles,name,NULL,id,tenant_id,' . Auth::user()->tenant_id, 'permissions' => 'required', ]; } public function prepareLinks(): array { return [ 'self' => route('roles.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'name' => $this->name, 'display_name' => $this->display_name, 'is_default' => $this->name === self::SUPER_ADMIN || $this->name === self::ADMIN, 'permissions' => $this->permissions, 'created_at' => $this->created_at, ]; if ($this->relationLoaded('permissions')) { $assignedPermissions = $this->permissions->keyBy('id'); $assignedPermissionIds = $assignedPermissions->keys()->all(); $allChildPermissions = Permission::whereIn('name', function ($query) { $query->select(DB::raw("DISTINCT name")) ->from('permissions') ->where('name', 'regexp', '^(edit|create|view|delete)_'); })->get()->keyBy('name'); $managePermissions = $this->permissions->filter(function ($permission) { return Str::startsWith($permission->name, 'manage_'); }); $groupedPermissions = $managePermissions->map(function ($permission) use ($assignedPermissionIds, $assignedPermissions, $allChildPermissions) { $module = Str::after($permission->name, 'manage_'); $actions = ['edit', 'create', 'view', 'delete']; $childPermissions = collect($actions)->map(function ($action) use ($module, $assignedPermissionIds, $assignedPermissions, $allChildPermissions) { $permissionName = "{$action}_{$module}"; $perm = $allChildPermissions->get($permissionName); if (!$perm) return null; $isAssigned = in_array($perm->id, $assignedPermissionIds); $data = [ 'id' => $perm->id, 'name' => $permissionName, 'selected' => $isAssigned, ]; if ($isAssigned && isset($assignedPermissions[$perm->id]->pivot)) { $data['pivot'] = [ 'role_id' => $assignedPermissions[$perm->id]->pivot->role_id, 'permission_id' => $assignedPermissions[$perm->id]->pivot->permission_id, ]; } return $data; })->filter(); return [ 'id' => $permission->id, 'name' => $permission->name, 'display_name' => $permission->display_name, 'guard_name' => $permission->guard_name, 'child_permissions' => $childPermissions->values(), ]; }); $fields['permissions'] = $groupedPermissions->values(); } return $fields; } } Language.php 0000644 00000005250 15213512572 0007005 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; /** * App\Models\Language * * @property int $id * @property string $name * @property string $iso_code * @property int $is_default * @property bool $status * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|Language newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Language newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Language query() * @method static \Illuminate\Database\Eloquent\Builder|Language whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Language whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Language whereIsDefault($value) * @method static \Illuminate\Database\Eloquent\Builder|Language whereIsoCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Language whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Language whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|Language whereUpdatedAt($value) * * @mixin \Eloquent */ class Language extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'languages'; public const JSON_API_TYPE = 'languages'; /** * @var string[] */ protected $fillable = [ 'name', 'iso_code', 'status', 'is_default', ]; /** * @var array */ public static $rules = [ 'name' => 'required|unique:languages,name|max:20', 'iso_code' => 'required|unique:languages,iso_code|min:2|max:2', 'status' => 'boolean', ]; /** * @var string[] */ public $casts = [ 'name' => 'string', 'iso_code' => 'string', 'status' => 'boolean', ]; public function prepareLinks(): array { return [ 'self' => route('languages.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'name' => $this->name, 'iso_code' => $this->iso_code, 'status' => $this->status ?? true, 'is_default' => $this->is_default ?? false, ]; return $fields; } /** * Check if this language is currently being used by any users * * @return bool */ public function isInUse(): bool { return User::where('language', $this->iso_code)->withoutGlobalScope('tenant')->exists(); } } Purchase.php 0000644 00000020567 15213512572 0007044 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Relations\HasOne; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; use Spatie\MediaLibrary\MediaCollections\Models\Media; /** * App\Models\Purchase * * @property int $id * @property \Illuminate\Support\Carbon $date * @property int $supplier_id * @property int $warehouse_id * @property float|null $tax_rate * @property float|null $tax_amount * @property float|null $discount * @property float|null $shipping * @property float|null $grand_total * @property float|null $received_amount * @property int|null $status * @property string|null $notes * @property string|null $reference_code * @property-read \App\Models\Supplier $supplier * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\PurchaseItem[] $purchaseItems * @property-read int|null $purchase_items_count * @property-read \App\Models\Warehouse $warehouse * * @method static \Illuminate\Database\Eloquent\Builder|Purchase newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Purchase newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Purchase query() * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereDate($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereDiscount($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereGrandTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereNotes($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereReceivedAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereReferenceCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereShipping($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereSupplierId($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereTaxRate($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Purchase whereWarehouseId($value) * * @property float|null $paid_amount * @property int|null $payment_type * @property-read string $purchase_pdf_url * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection<int, Media> $media * @property-read int|null $media_count * * @method static Builder|Purchase search($search = '') * @method static Builder|Purchase wherePaidAmount($value) * @method static Builder|Purchase wherePaymentType($value) * * @mixin \Eloquent */ class Purchase extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData; protected $table = 'purchases'; const JSON_API_TYPE = 'purchases'; const PURCHASE_PDF = 'purchase_pdf'; protected $fillable = [ 'date', 'supplier_id', 'warehouse_id', 'tax_rate', 'tax_amount', 'discount', 'shipping', 'grand_total', 'received_amount', 'paid_amount', 'partial_amount', 'payment_type', 'payment_status', 'notes', 'status', 'reference_code', 'is_return', ]; public static $rules = [ 'date' => 'required|date', 'supplier_id' => 'required|exists:suppliers,id', 'warehouse_id' => 'required|exists:warehouses,id', 'tax_rate' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount' => 'nullable|numeric', 'shipping' => 'nullable|numeric', 'grand_total' => 'nullable|numeric', 'received_amount' => 'numeric|nullable', 'paid_amount' => 'numeric|nullable', 'payment_type' => 'numeric|integer|nullable', 'notes' => 'nullable', 'status' => 'integer|required', 'reference_code' => 'nullable', ]; public $casts = [ 'date' => 'date', 'tax_rate' => 'double', 'tax_amount' => 'double', 'discount' => 'double', 'shipping' => 'double', 'grand_total' => 'double', 'received_amount' => 'double', 'paid_amount' => 'double', ]; public function getPurchasePdfUrlAttribute(): string { /** @var Media $media */ $media = $this->getMedia(self::PURCHASE_PDF)->first(); if (! empty($media)) { return $media->getFullUrl(); } return ''; } //tax type const const EXCLUSIVE = 1; const INCLUSIVE = 2; // discount type const const PERCENTAGE = 1; const FIXED = 2; // payment type const CASH = 1; const CHEQUE = 2; const BANK_TRANSFER = 3; const OTHER = 4; // payment Status const PAID = 1; const UNPAID = 2; const PARTIAL = 3; // Order status const RECEIVED = 1; const PENDING = 2; const ORDERED = 3; public function prepareLinks(): array { return [ 'self' => route('purchases.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'date' => $this->date, 'supplier_id' => $this->supplier_id, 'supplier_name' => $this->supplier->name, 'warehouse_id' => $this->warehouse_id, 'warehouse_name' => $this->warehouse->name, 'tax_rate' => $this->tax_rate, 'tax_amount' => $this->tax_amount, 'discount' => $this->discount, 'shipping' => $this->shipping, 'grand_total' => $this->grand_total, 'received_amount' => $this->received_amount, 'paid_amount' => $this->paid_amount, 'partial_amount' => $this->partial_amount, 'payment_type' => $this->payment_type, 'payment_type_name' => $this->paymentType?->name ?? '', 'payment_status' => $this->payment_status, 'notes' => $this->notes, 'reference_code' => $this->reference_code, 'created_at' => $this->created_at, 'status' => $this->status, 'purchase_items' => $this->purchaseItems, 'is_return' => $this->is_return, ]; return $fields; } public function warehouse(): BelongsTo { return $this->belongsTo(Warehouse::class, 'warehouse_id', 'id'); } public function supplier(): BelongsTo { return $this->belongsTo(Supplier::class, 'supplier_id', 'id'); } public function purchaseItems(): HasMany { return $this->hasMany(PurchaseItem::class, 'purchase_id', 'id'); } public function paymentType(): HasOne { return $this->hasOne(PaymentMethod::class, 'id', 'payment_type')->withoutGlobalScope('tenant'); } public function scopeSearch($query, $search = '') { $supplier = (Supplier::where('name', 'LIKE', "%$search%")->get()->count() != 0); $warehouse = (Warehouse::where('name', 'LIKE', "%$search%")->get()->count() != 0); if ($supplier || $warehouse) { return $query->whereHas('supplier', function (Builder $q) use ($search, $supplier) { if ($supplier) { $q->where('name', 'LIKE', "%$search%"); } })->whereHas('warehouse', function (Builder $q) use ($search, $warehouse) { if ($warehouse) { $q->where('name', 'LIKE', "%$search%"); } }); } if (is_numeric($search)) { $search = (float) $search; $search = (string) $search; } return $query->where('reference_code', 'LIKE', '%' . $search . '%') ->orWhere('grand_total', 'LIKE', '%' . $search . '%'); } } HoldItem.php 0000644 00000012141 15213512572 0006764 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\HoldItem * * @property int $id * @property int $hold_id * @property int $product_id * @property float|null $product_price * @property float|null $net_unit_price * @property int $tax_type * @property float|null $tax_value * @property float|null $tax_amount * @property int $discount_type * @property float|null $discount_value * @property float|null $discount_amount * @property array $sale_unit * @property float|null $quantity * @property float|null $sub_total * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Hold $hold * @property-read \App\Models\Product $product * * @method static \Illuminate\Database\Eloquent\Builder|HoldItem newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|HoldItem newQuery() * @method static \Illuminate\Database\Eloquent\Builder|HoldItem query() * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereDiscountAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereDiscountType($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereDiscountValue($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereHoldId($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereNetUnitPrice($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereProductPrice($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereQuantity($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereSaleUnit($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereSubTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereTaxType($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereTaxValue($value) * @method static \Illuminate\Database\Eloquent\Builder|HoldItem whereUpdatedAt($value) * * @mixin \Eloquent */ class HoldItem extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'hold_items'; public const JSON_API_TYPE = 'hold_items'; protected $fillable = [ 'product_id', 'warehouse_id', 'product_price', 'net_unit_price', 'tax_type', 'tax_value', 'tax_amount', 'discount_type', 'discount_value', 'discount_amount', 'sale_unit', 'quantity', 'sub_total', ]; public static $rules = [ 'product_id' => 'required|exists:products,id', 'product_price' => 'nullable|numeric', 'tax_type' => 'nullable|numeric', 'tax_value' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount_type' => 'nullable|numeric', 'discount_value' => 'nullable|numeric', 'discount_amount' => 'nullable|numeric', 'sale_unit' => 'nullable|numeric', 'quantity' => 'nullable|numeric', 'sub_total' => 'nullable|numeric', ]; public $casts = [ 'product_price' => 'double', 'tax_amount' => 'double', 'tax_value' => 'double', 'discount_value' => 'double', 'discount_amount' => 'double', 'quantity' => 'double', 'sub_total' => 'double', ]; public function getSaleUnitAttribute($value): array { $saleUnit = Unit::whereId($value)->first(); if ($saleUnit) { return $saleUnit->toArray(); } return []; } public function prepareLinks(): array { return []; } public function prepareAttributes(): array { $fields = [ 'product_id' => $this->product_id, 'warehouse_id' => $this->warehouse_id, 'net_unit_price' => $this->net_unit_price, 'product_price' => $this->product_price, 'tax_type' => $this->tax_type, 'tax_value' => $this->tax_value, 'tax_amount' => $this->tax_amount, 'discount_type' => $this->discount_type, 'discount_value' => $this->discount_value, 'discount_amount' => $this->discount_amount, 'sale_unit' => $this->sale_unit, 'quantity' => $this->quantity, 'sub_total' => $this->sub_total, ]; return $fields; } public function hold(): BelongsTo { return $this->belongsTo(Hold::class, 'hold_id', 'id'); } public function product(): BelongsTo { return $this->belongsTo(Product::class, 'product_id', 'id'); } } MultiTenant.php 0000644 00000003057 15213512572 0007531 0 ustar 00 <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Support\Facades\DB; use Stancl\Tenancy\Contracts\TenantWithDatabase; use Stancl\Tenancy\Database\Models\Tenant as BaseTenant; use Stancl\Tenancy\DatabaseConfig; use Stancl\Tenancy\Events\{ CreatingTenant, DeletingTenant, SavingTenant, TenantDeleted, TenantSaved, TenantUpdated, UpdatingTenant }; class MultiTenant extends BaseTenant implements TenantWithDatabase { use HasFactory; protected $table = 'tenants'; public static function getCustomColumns(): array { return [ 'id', 'store_id', ]; } protected $casts = [ 'data' => 'array', ]; protected $dispatchesEvents = [ 'saving' => SavingTenant::class, 'saved' => TenantSaved::class, 'creating' => CreatingTenant::class, 'updating' => UpdatingTenant::class, 'updated' => TenantUpdated::class, 'deleting' => DeletingTenant::class, 'deleted' => TenantDeleted::class, ]; public function database(): DatabaseConfig { return new DatabaseConfig($this); } public function deleteDatabaseIfExists() { $dbName = $this->database()->getName(); $dbExists = DB::select("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ?", [$dbName]); if (!empty($dbExists)) { $this->database()->manager()->dropDatabase($dbName); } } } Adjustment.php 0000644 00000007226 15213512572 0007405 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; 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 Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * Class Adjustment * * @property int $id * @property \Illuminate\Support\Carbon $date * @property string|null $reference_code * @property int $warehouse_id * @property int $total_products * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|\Spatie\MediaLibrary\MediaCollections\Models\Media[] $media * * @property-read \App\Models\Warehouse $warehouse * @property-read int|null $media_count * * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\AdjustmentItem[] $adjustmentItems * * @method static \Illuminate\Database\Eloquent\Builder|Adjustment newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Adjustment newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Adjustment query() * @method static \Illuminate\Database\Eloquent\Builder|Adjustment whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Adjustment whereDate($value) * @method static \Illuminate\Database\Eloquent\Builder|Adjustment whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Adjustment whereReferenceCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Adjustment whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Adjustment whereWarehouseId($value) * * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\AdjustmentItem> $adjustmentItems * @property-read int|null $adjustment_items_count * @property-read \App\Models\Warehouse $warehouse * * @method static \Illuminate\Database\Eloquent\Builder|Adjustment whereTotalProducts($value) * * @mixin \Eloquent */ class Adjustment extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'adjustments'; public const JSON_API_TYPE = 'adjustments'; protected $fillable = [ 'tenant_id', 'reference_code', 'date', 'warehouse_id', 'total_products', ]; public static $rules = [ 'reference_code' => 'nullable', 'date' => 'date|required', 'warehouse_id' => 'required|exists:warehouses,id', ]; public $casts = [ 'date' => 'date', ]; public function prepareLinks(): array { return [ 'self' => route('adjustments.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'reference_code' => $this->reference_code, 'date' => $this->date, 'warehouse_id' => $this->warehouse_id, 'warehouse_name' => $this->warehouse->name, 'total_products' => $this->total_products, 'created_at' => $this->created_at, 'adjustment_items' => $this->adjustmentItems, ]; return $fields; } public function warehouse(): BelongsTo { return $this->belongsTo(Warehouse::class, 'warehouse_id', 'id'); } public function adjustmentItems(): HasMany { return $this->hasMany(AdjustmentItem::class, 'adjustment_id', 'id'); } } ExpenseCategory.php 0000644 00000004614 15213512572 0010372 0 ustar 00 <?php namespace App\Models; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Facades\Auth; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\ExpenseCategory * * @property int $id * @property string $name * @property string $description * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|ExpenseCategory newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ExpenseCategory newQuery() * @method static \Illuminate\Database\Eloquent\Builder|ExpenseCategory query() * @method static \Illuminate\Database\Eloquent\Builder|ExpenseCategory whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ExpenseCategory whereDescription($value) * @method static \Illuminate\Database\Eloquent\Builder|ExpenseCategory whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|ExpenseCategory whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|ExpenseCategory whereUpdatedAt($value) * * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Expense> $expenses * @property-read int|null $expenses_count * * @mixin \Eloquent */ class ExpenseCategory extends BaseModel { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'expense_categories'; const JSON_API_TYPE = 'expense_categories'; protected $fillable = [ 'tenant_id', 'name', 'description', ]; public static function rules(): array { return [ 'name' => 'required|unique:expense_categories,name,NULL,id,tenant_id,' . Auth::user()->tenant_id, 'description' => 'nullable', ]; } public function prepareLinks(): array { return [ 'self' => route('expense-categories.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'name' => $this->name, 'description' => $this->description, ]; return $fields; } public function expenses(): HasMany { return $this->hasMany(Expense::class, 'expense_category_id', 'id'); } } SmsTemplate.php 0000644 00000004416 15213512572 0007523 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\SmsTemplate * * @property int $id * @property string $template_name * @property string $content * @property string $type * @property string $status * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|SmsTemplate newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|SmsTemplate newQuery() * @method static \Illuminate\Database\Eloquent\Builder|SmsTemplate query() * @method static \Illuminate\Database\Eloquent\Builder|SmsTemplate whereContent($value) * @method static \Illuminate\Database\Eloquent\Builder|SmsTemplate whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|SmsTemplate whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|SmsTemplate whereTemplateName($value) * @method static \Illuminate\Database\Eloquent\Builder|SmsTemplate whereType($value) * @method static \Illuminate\Database\Eloquent\Builder|SmsTemplate whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|SmsTemplate whereUpdatedAt($value) * * @mixin \Eloquent */ class SmsTemplate extends BaseModel implements JsonResourceful { use HasFactory, \App\Traits\HasJsonResourcefulData, BelongsToTenant, Multitenantable; public const JSON_API_TYPE = 'sms_templates'; protected $table = 'sms_templates'; protected $fillable = [ 'tenant_id', 'template_name', 'content', 'type', 'status' ]; const SMS_TYPE_SALE = 1; const SMS_TYPE_SALE_RETURN = 2; const ACTIVE = 1; const INACTIVE = 0; public static $rules = [ 'content' => 'required', ]; public function prepareLinks(): array { return []; } public function prepareAttributes(): array { $fields = [ 'template_name' => $this->template_name, 'content' => $this->content, 'type' => $this->type, 'status' => $this->status, ]; return $fields; } } ManageStock.php 0000644 00000011717 15213512572 0007463 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Support\Facades\Log; /** * App\Models\ManageStock * * @property int $id * @property int $warehouse_id * @property int $product_id * @property float $quantity * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Product $product * @property-read \App\Models\Warehouse $warehouse * * @method static \Illuminate\Database\Eloquent\Builder|ManageStock newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|ManageStock newQuery() * @method static \Illuminate\Database\Eloquent\Builder|ManageStock query() * @method static \Illuminate\Database\Eloquent\Builder|ManageStock whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ManageStock whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|ManageStock whereProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|ManageStock whereQuantity($value) * @method static \Illuminate\Database\Eloquent\Builder|ManageStock whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|ManageStock whereWarehouseId($value) * * @property float $alert * * @method static \Illuminate\Database\Eloquent\Builder|ManageStock whereAlert($value) * * @mixin \Eloquent */ class ManageStock extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'manage_stocks'; const JSON_API_TYPE = 'manage_stocks'; protected $fillable = [ 'warehouse_id', 'product_id', 'quantity', 'alert', ]; protected $casts = [ 'warehouse_id' => 'integer', 'product_id' => 'integer', 'quantity' => 'float', 'alert' => 'float', ]; public static $rules = [ 'warehouse_id' => 'required|exists:warehouses,id', 'product_id' => 'required|exists:products,id', 'quantity' => 'required|numeric', ]; public function prepareLinks(): array { return [ ]; } public static function boot() { parent::boot(); static::updating(function ($model) { $product = Product::find($model->product_id); Log::info('Updating '.$model->quantity); Log::info('Updating 1 '.$product->stock_alert); if ($model->quantity <= $product->stock_alert) { $model->alert = true; } else { $model->alert = false; } }); static::creating(function ($model) { $product = Product::find($model->product_id); Log::info('Creating '.$model->quantity); Log::info('Creating 1 '.$product->stock_alert); if ($model->quantity <= $product->stock_alert) { $model->alert = true; } else { $model->alert = false; } }); } public function prepareAttributes(): array { return [ 'warehouse_id' => $this->warehouse_id, 'product_id' => $this->product_id, 'product_unit_name' => $this->getProductUnitName(), 'quantity' => $this->quantity, 'product' => $this->product, 'warehouse' => $this->warehouse, 'product_category_name' => $this->product->productCategory->name, ]; } public function prepareWarehouseAttributes(): array { $fields = [ 'product_id' => $this->product_id, 'quantity' => $this->quantity, 'product_unit' => $this->product->product_unit, 'product_unit_name' => $this->getProductUnitName(), 'product_name' => $this->product->name, 'product_image' => $this->product->mainProduct->image_url, ]; return $fields; } public function prepareStockAlerts(): array { $fields = [ 'product_code' => $this->product->code, 'product_name' => $this->product->name, 'warehouse_id' => $this->warehouse_id, 'quantity' => $this->quantity, 'alert_quantity' => $this->alert, 'product_unit_name' => $this->getProductUnitName(), ]; return $fields; } /** * @return array|string */ public function getProductUnitName() { $productUnit = BaseUnit::whereId($this->product->product_unit)->first(); if ($productUnit) { return $productUnit->name; } return ''; } public function product(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(Product::class, 'product_id', 'id'); } public function warehouse(): \Illuminate\Database\Eloquent\Relations\BelongsTo { return $this->belongsTo(Warehouse::class, 'warehouse_id', 'id'); } } State.php 0000644 00000003771 15213512572 0006350 0 ustar 00 <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\State * * @property int $id * @property string $name * @property int $country_id * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\City $city * @property-read \App\Models\Country $country * @property-read string $country_name * * @method static \Illuminate\Database\Eloquent\Builder|State newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|State newQuery() * @method static \Illuminate\Database\Eloquent\Builder|State query() * @method static \Illuminate\Database\Eloquent\Builder|State whereCountryId($value) * @method static \Illuminate\Database\Eloquent\Builder|State whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|State whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|State whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|State whereUpdatedAt($value) * * @mixin \Eloquent */ class State extends Model { use HasFactory; public $table = 'states'; public $fillable = [ 'name', 'country_id', ]; /** * The attributes that should be casted to native types. * * @var array */ protected $casts = [ 'id' => 'integer', 'name' => 'string', 'country_id' => 'integer', ]; /** * Validation rules * * @var array */ public static $rules = [ 'name' => 'required|string|max:170|unique:states,name', 'country_id' => 'required', ]; protected $appends = ['country_name']; public function getCountryNameAttribute(): string { return $this->country->name ?? 'N/A'; } public function country(): BelongsTo { return $this->belongsTo(Country::class, 'country_id'); } } ContactUs.php 0000644 00000001402 15213512572 0007160 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; class ContactUs extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $fillable = [ 'name', 'email', 'subject', 'message', ]; public function prepareLinks(): array { return [ // ]; } public function prepareAttributes(): array { return [ 'name' => $this->name, 'email' => $this->email, 'subject' => $this->subject, 'message' => $this->message, 'created_at' => $this->created_at, ]; } } Unit.php 0000644 00000004752 15213512572 0006207 0 ustar 00 <?php namespace App\Models; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Support\Facades\Auth; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * Class Unit * * @property int $id * @property string $name * @property string $short_name * @property string $base_unit * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|Unit newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Unit newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Unit query() * @method static \Illuminate\Database\Eloquent\Builder|Unit whereBaseUnit($value) * @method static \Illuminate\Database\Eloquent\Builder|Unit whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Unit whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Unit whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Unit whereShortName($value) * @method static \Illuminate\Database\Eloquent\Builder|Unit whereUpdatedAt($value) * * @mixin \Eloquent */ class Unit extends BaseModel { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'units'; const JSON_API_TYPE = 'units'; protected $fillable = [ 'tenant_id', 'name', 'short_name', 'base_unit', ]; public static function rules(): array { return [ 'name' => 'required|unique:units,name,NULL,id,tenant_id,' . Auth::user()->tenant_id, 'short_name' => 'required', 'base_unit' => 'required', ]; } public function prepareLinks(): array { return [ 'self' => route('units.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'name' => $this->name, 'short_name' => $this->short_name, 'base_unit' => $this->base_unit, 'created_at' => $this->created_at, 'base_unit_name' => $this->getBaseUnitName(), ]; return $fields; } /** * @return array|string */ public function getBaseUnitName() { $productUnit = BaseUnit::whereId($this->base_unit)->first(); if ($productUnit) { return $productUnit->toArray(); } return ''; } } Country.php 0000644 00000004313 15213512572 0006724 0 ustar 00 <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; /** * App\Models\Country * * @property int $id * @property string $name * @property string|null $short_code * @property int|null $phone_code * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\State[] $states * @property-read int|null $states_count * * @method static \Database\Factories\CountryFactory factory(...$parameters) * @method static \Illuminate\Database\Eloquent\Builder|Country newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Country newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Country query() * @method static \Illuminate\Database\Eloquent\Builder|Country whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Country whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Country whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Country wherePhoneCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Country whereShortCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Country whereUpdatedAt($value) * * @mixin \Eloquent */ class Country extends Model { use HasFactory; public $table = 'countries'; public $fillable = [ 'name', 'short_code', 'phone_code', ]; /** * The attributes that should be casted to native types. * * @var array */ protected $casts = [ 'id' => 'integer', 'name' => 'string', 'short_code' => 'string', 'phone_code' => 'integer', ]; /** * Validation rules * * @var array */ public static $rules = [ 'name' => 'required|string|max:170|unique:countries,name', 'short_code' => 'nullable|string|max:170|unique:countries,short_code', 'phone_code' => 'nullable|integer', ]; public function states(): HasMany { return $this->hasMany(State::class, 'country_id'); } } Hold.php 0000644 00000014031 15213512572 0006145 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; /** * App\Models\Hold * * @property int $id * @property string|null $reference_code * @property \Illuminate\Support\Carbon $date * @property int $customer_id * @property int $warehouse_id * @property float|null $tax_rate * @property float|null $tax_amount * @property float|null $discount * @property float|null $shipping * @property float|null $grand_total * @property float|null $received_amount * @property float|null $paid_amount * @property int|null $status * @property string|null $note * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Customer $customer * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\HoldItem[] $holdItems * @property-read int|null $hold_items_count * @property-read \App\Models\Warehouse $warehouse * * @method static \Illuminate\Database\Eloquent\Builder|Hold newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Hold newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Hold query() * @method static \Illuminate\Database\Eloquent\Builder|Hold whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereCustomerId($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereDate($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereDiscount($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereGrandTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereNote($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold wherePaidAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereReceivedAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereReferenceCode($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereShipping($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereTaxRate($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Hold whereWarehouseId($value) * * @mixin \Eloquent */ class Hold extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'holds'; public const JSON_API_TYPE = 'holds'; protected $fillable = [ 'reference_code', 'date', 'customer_id', 'warehouse_id', 'tax_rate', 'tax_amount', 'discount', 'shipping', 'grand_total', 'received_amount', 'paid_amount', 'note', 'status', 'discount_type', 'discount_value', ]; public static $rules = [ 'reference_code' => 'required', 'date' => 'date|required', 'customer_id' => 'required|exists:customers,id', 'warehouse_id' => 'required|exists:warehouses,id', 'tax_rate' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount' => 'nullable|numeric', 'shipping' => 'nullable|numeric', 'grand_total' => 'nullable|numeric', 'received_amount' => 'numeric|nullable', 'discount_type' => 'nullable|numeric', 'discount_value' => 'nullable|numeric', 'paid_amount' => 'numeric|nullable', 'notes' => 'nullable', 'status' => 'integer', ]; public $casts = [ 'date' => 'date', 'tax_rate' => 'double', 'tax_amount' => 'double', 'discount' => 'double', 'shipping' => 'double', 'grand_total' => 'double', 'received_amount' => 'double', 'paid_amount' => 'double', ]; public function prepareLinks(): array { return [ 'self' => route('holds.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'reference_code' => $this->reference_code, 'date' => $this->date, 'customer_id' => $this->customer_id, 'customer_name' => $this->customer->name, 'warehouse_id' => $this->warehouse_id, 'warehouse_name' => $this->warehouse->name, 'tax_rate' => $this->tax_rate, 'tax_amount' => $this->tax_amount, 'discount' => $this->discount, 'shipping' => $this->shipping, 'grand_total' => $this->grand_total, 'received_amount' => $this->received_amount, 'paid_amount' => $this->paid_amount, 'note' => $this->note, 'status' => $this->status, 'hold_items' => $this->holdItems, 'created_at' => $this->created_at, 'discount_type' => $this->discount_type, 'discount_value' => $this->discount_value, ]; return $fields; } public function prepareHolds(): array { $fields = [ 'id' => $this->id, 'date' => $this->date, 'customer_id' => $this->customer_id, 'customer_name' => $this->customer->name, 'warehouse_id' => $this->warehouse_id, 'reference_code' => $this->reference_code, ]; return $fields; } public function customer(): BelongsTo { return $this->belongsTo(Customer::class, 'customer_id', 'id'); } public function warehouse(): BelongsTo { return $this->belongsTo(Warehouse::class, 'warehouse_id', 'id'); } public function holdItems(): HasMany { return $this->hasMany(HoldItem::class, 'hold_id', 'id'); } } CouponCode.php 0000644 00000010207 15213512572 0007316 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsToMany; /** * App\Models\CouponCode * * @property int $id * @property string $name * @property string $code * @property \Illuminate\Support\Carbon $start_date * @property \Illuminate\Support\Carbon $end_date * @property int $how_many_time_can_use * @property float $discount * @property int $how_many_time_used * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|CouponCode newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|CouponCode newQuery() * @method static \Illuminate\Database\Eloquent\Builder|CouponCode query() * @method static \Illuminate\Database\Eloquent\Builder|CouponCode whereCode($value) * @method static \Illuminate\Database\Eloquent\Builder|CouponCode whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|CouponCode whereEndDate($value) * @method static \Illuminate\Database\Eloquent\Builder|CouponCode whereFixedDiscount($value) * @method static \Illuminate\Database\Eloquent\Builder|CouponCode whereHowManyTimeCanUse($value) * @method static \Illuminate\Database\Eloquent\Builder|CouponCode whereHowManyTimeUsed($value) * @method static \Illuminate\Database\Eloquent\Builder|CouponCode whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|CouponCode whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|CouponCode whereStartDate($value) * @method static \Illuminate\Database\Eloquent\Builder|CouponCode whereUpdatedAt($value) * * @property int $discount_type * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Product> $products * @property-read int|null $products_count * * @method static \Illuminate\Database\Eloquent\Builder|CouponCode whereDiscount($value) * @method static \Illuminate\Database\Eloquent\Builder|CouponCode whereDiscountType($value) * * @mixin \Eloquent */ class CouponCode extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $fillable = [ 'name', 'code', 'start_date', 'end_date', 'how_many_time_can_use', 'discount_type', 'discount', 'how_many_time_used', ]; public static $rules = [ 'name' => 'required', 'code' => 'required|unique:coupon_codes,code', 'products' => 'required', 'start_date' => 'required', 'end_date' => 'required', 'how_many_time_can_use' => 'required|integer', 'discount_type' => 'required|integer', 'discount' => 'required', ]; public $casts = [ 'name' => 'string', 'code' => 'string', // 'start_date' => 'date', // 'end_date' => 'date', 'how_many_time_can_use' => 'integer', 'discount_type' => 'integer', 'discount' => 'double', 'how_many_time_used' => 'integer', ]; public const FIXED = 1; public const PERCENTAGE = 2; public function prepareLinks(): array { return []; } public function prepareAttributes(): array { $products = []; foreach ($this->products as $product) { $products[] = [ 'id' => $product->id, 'name' => $product->name, ]; } return [ 'name' => $this->name, 'code' => $this->code, 'start_date' => $this->start_date, 'end_date' => $this->end_date, 'how_many_time_can_use' => $this->how_many_time_can_use, 'discount_type' => $this->discount_type, 'discount' => $this->discount, 'how_many_time_used' => $this->how_many_time_used, 'products' => $products, ]; } /** * The products that belong to the CouponCode */ public function products(): BelongsToMany { return $this->belongsToMany(Product::class, 'coupon_product'); } } SaleItem.php 0000644 00000012037 15213512572 0006766 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\SaleItem * * @property int $id * @property int $sale_id * @property int $product_id * @property float|null $product_price * @property float|null $net_unit_price * @property int $tax_type * @property float|null $tax_value * @property float|null $tax_amount * @property int $discount_type * @property float|null $discount_value * @property float|null $discount_amount * @property int $sale_unit * @property float|null $quantity * @property float|null $sub_total * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Product $product * @property-read \App\Models\Sale $sale * * @method static \Illuminate\Database\Eloquent\Builder|SaleItem newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|SaleItem newQuery() * @method static \Illuminate\Database\Eloquent\Builder|SaleItem query() * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereDiscountAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereDiscountType($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereDiscountValue($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereNetUnitPrice($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereProductPrice($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereQuantity($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereSaleId($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereSaleUnit($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereSubTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereTaxType($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereTaxValue($value) * @method static \Illuminate\Database\Eloquent\Builder|SaleItem whereUpdatedAt($value) * * @mixin \Eloquent */ class SaleItem extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'sale_items'; public const JSON_API_TYPE = 'sales_items'; protected $fillable = [ 'product_id', 'product_price', 'net_unit_price', 'tax_type', 'tax_value', 'tax_amount', 'discount_type', 'discount_value', 'discount_amount', 'sale_unit', 'quantity', 'sub_total', ]; public static $rules = [ 'product_id' => 'required|exists:products,id', 'product_price' => 'nullable|numeric', 'tax_type' => 'nullable|numeric', 'tax_value' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount_type' => 'nullable|numeric', 'discount_value' => 'nullable|numeric', 'discount_amount' => 'nullable|numeric', 'sale_unit' => 'nullable|numeric', 'quantity' => 'nullable|numeric', 'sub_total' => 'nullable|numeric', ]; public $casts = [ 'product_price' => 'double', 'tax_amount' => 'double', 'tax_value' => 'double', 'discount_value' => 'double', 'discount_amount' => 'double', 'quantity' => 'double', 'sub_total' => 'double', ]; public function getSaleUnitAttribute($value): array { $saleUnit = Unit::whereId($value)->first(); if ($saleUnit) { return $saleUnit->toArray(); } return []; } public function prepareLinks(): array { return [ ]; } public function prepareAttributes(): array { $fields = [ 'product_id' => $this->product_id, 'net_unit_price' => $this->net_unit_price, 'product_price' => $this->product_price, 'tax_type' => $this->tax_type, 'tax_value' => $this->tax_value, 'tax_amount' => $this->tax_amount, 'discount_type' => $this->discount_type, 'discount_value' => $this->discount_value, 'discount_amount' => $this->discount_amount, 'sale_unit' => $this->sale_unit, 'quantity' => $this->quantity, 'sub_total' => $this->sub_total, ]; return $fields; } public function sale(): BelongsTo { return $this->belongsTo(Sale::class, 'sale_id', 'id'); } public function product(): BelongsTo { return $this->belongsTo(Product::class, 'product_id', 'id'); } } PlanFeature.php 0000644 00000000707 15213512572 0007472 0 ustar 00 <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class PlanFeature extends Model { use HasFactory; protected $table = 'plan_features'; protected $fillable = [ 'plan_id', 'pos_management', 'reports', 'emails_support', 'sms_support', 'inventory_management', 'adjustments', 'roles_permission', ]; } BusinessInformation.php 0000644 00000001727 15213512572 0011270 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; class BusinessInformation extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData; protected $fillable = [ 'title', 'description', ]; const IMAGE = 'business_image'; public function getImageAttribute() { $url = $this->getFirstMediaUrl(self::IMAGE); return $url ? $url : asset('images/brand_logo.png'); } public function prepareLinks(): array { return [ // ]; } public function prepareAttributes(): array { return [ 'image' => $this->image, 'title' => $this->title, 'description' => $this->description, ]; } } PaymentMethod.php 0000644 00000003343 15213512572 0010041 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Support\Facades\Auth; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; class PaymentMethod extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'payment_methods'; const JSON_API_TYPE = 'payment-methods'; protected $fillable = [ 'tenant_id', 'name', 'status', ]; public static function rules(): array { return [ 'name' => 'required|string|max:255|unique:payment_methods,name,NULL,id,tenant_id,' . Auth::user()->tenant_id, 'status' => 'sometimes|boolean', ]; } public function prepareLinks(): array { return [ // 'self' => route('products.show', $this->id), ]; } public function prepareAttributes(): array { return [ 'name' => $this->name, 'status' => $this->status, ]; } public function sales() { return $this->hasMany(Sale::class, 'payment_type', 'id'); } public function purchases() { return $this->hasMany(Purchase::class, 'payment_type', 'id'); } public function salesReturn() { return $this->hasMany(SaleReturn::class, 'payment_type', 'id'); } public function purchasesReturn() { return $this->hasMany(PurchaseReturn::class, 'payment_type', 'id'); } public function salesPayments() { return $this->hasMany(SalesPayment::class, 'payment_type', 'id'); } } Plan.php 0000644 00000004020 15213512572 0006146 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasOne; class Plan extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; const JSON_API_TYPE = 'plans'; protected $fillable = [ 'name', 'price', 'frequency', 'assign_while_register', 'trial_days', 'currency_id', 'no_of_stores', ]; public static $rules = [ 'name' => 'required', 'currency_id' => 'required', 'price' => 'required', 'frequency' => 'required|in:1,2,3,4', 'no_of_stores' => 'required|numeric|min:1', 'assign_while_register' => 'boolean', 'trial_days' => 'nullable|numeric', ]; const WEEKLY = 1; const MONTHLY = 2; const YEARLY = 3; const UNLIMITED = 4; const FREQUENCY = [ self::WEEKLY => 'Weekly', self::MONTHLY => 'Monthly', self::YEARLY => 'Yearly', self::UNLIMITED => 'Unlimited', ]; public function prepareLinks(): array { return [ 'self' => route('plans.show', $this->id), ]; } public function prepareAttributes(): array { return [ 'name' => $this->name, 'price' => $this->price, 'frequency' => $this->frequency, 'assign_while_register' => $this->assign_while_register, 'trial_days' => $this->trial_days, 'currency_id' => $this->currency_id, 'no_of_stores' => $this->no_of_stores, 'currency_symbol' => $this->currency->symbol, 'features' => $this->planFeature, 'created_at' => $this->created_at, ]; } public function currency() { return $this->belongsTo(Currency::class); } public function planFeature(): HasOne { return $this->hasOne(PlanFeature::class, 'plan_id'); } } SmsSetting.php 0000644 00000002730 15213512572 0007362 0 ustar 00 <?php namespace App\Models; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\SmsSetting * * @property int $id * @property string $key * @property string $value * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|SmsSetting newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|SmsSetting newQuery() * @method static \Illuminate\Database\Eloquent\Builder|SmsSetting query() * @method static \Illuminate\Database\Eloquent\Builder|SmsSetting whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|SmsSetting whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|SmsSetting whereKey($value) * @method static \Illuminate\Database\Eloquent\Builder|SmsSetting whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|SmsSetting whereValue($value) * * @mixin \Eloquent */ class SmsSetting extends Model { use HasFactory, BelongsToTenant, Multitenantable; const PATH = 'sms_settings'; protected $table = 'sms_settings'; // status public const ACTIVE = 1; public const INACTIVE = 2; /** * @var string[] */ protected $fillable = [ 'tenant_id', 'key', 'value', ]; } Warehouse.php 0000644 00000010213 15213512572 0007217 0 ustar 00 <?php namespace App\Models; use App\Traits\HasJsonResourcefulData; use App\Traits\Multitenantable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Facades\Auth; use Stancl\Tenancy\Database\Concerns\BelongsToTenant; /** * App\Models\Warehouse * * @property int $id * @property string $name * @property string $phone * @property string $country * @property string $city * @property string|null $email * @property string|null $zip_code * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|Warehouse newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Warehouse newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Warehouse query() * @method static \Illuminate\Database\Eloquent\Builder|Warehouse whereCity($value) * @method static \Illuminate\Database\Eloquent\Builder|Warehouse whereCountry($value) * @method static \Illuminate\Database\Eloquent\Builder|Warehouse whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Warehouse whereEmail($value) * @method static \Illuminate\Database\Eloquent\Builder|Warehouse whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Warehouse whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Warehouse wherePhone($value) * @method static \Illuminate\Database\Eloquent\Builder|Warehouse whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Warehouse whereZipCode($value) * * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Expense> $expenses * @property-read int|null $expenses_count * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Product> $products * @property-read int|null $products_count * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Purchase> $purchases * @property-read int|null $purchases_count * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\Sale> $sales * @property-read int|null $sales_count * * @mixin \Eloquent */ class Warehouse extends BaseModel { use HasFactory, HasJsonResourcefulData, BelongsToTenant, Multitenantable; protected $table = 'warehouses'; const JSON_API_TYPE = 'warehouses'; protected $fillable = [ 'tenant_id', 'name', 'phone', 'country', 'city', 'email', 'zip_code', ]; public static function rules(): array { return [ 'name' => 'required|unique:warehouses,name,NULL,id,tenant_id,' . Auth::user()->tenant_id, 'phone' => 'required|string', 'country' => 'required', 'city' => 'required', 'email' => 'nullable|email|unique:warehouses,email,NULL,id,tenant_id,' . Auth::user()->tenant_id, 'zip_code' => 'nullable|numeric', ]; } public function prepareLinks(): array { return [ 'self' => route('warehouses.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'name' => $this->name, 'phone' => $this->phone, 'country' => $this->country, 'city' => $this->city, 'email' => $this->email, 'zip_code' => $this->zip_code, 'created_at' => $this->created_at, ]; return $fields; } public function prepareWarehouses(): array { $fields = [ 'id' => $this->id, 'name' => $this->name, ]; return $fields; } public function products(): HasMany { return $this->hasMany(Product::class, 'warehouse_id', 'id'); } public function sales(): HasMany { return $this->hasMany(Sale::class, 'warehouse_id', 'id'); } public function expenses(): HasMany { return $this->hasMany(Expense::class, 'warehouse_id', 'id'); } public function purchases(): HasMany { return $this->hasMany(Purchase::class, 'warehouse_id', 'id'); } } Testimonial.php 0000644 00000001733 15213512572 0007554 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; class Testimonial extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData; protected $fillable = [ 'name', 'description', ]; const IMAGE = 'testimonial_image'; public function getImageAttribute() { $url = $this->getFirstMediaUrl(self::IMAGE); return $url ? $url : asset('images/default/testimonial-4.png'); } public function prepareLinks(): array { return [ // ]; } public function prepareAttributes(): array { return [ 'image' => $this->image, 'name' => $this->name, 'description' => $this->description, ]; } } VariationProduct.php 0000644 00000002746 15213512572 0010566 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; class VariationProduct extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $fillable = [ 'main_product_id', 'product_id', 'variation_id', 'variation_type_id', ]; protected $casts = [ 'main_product_id' => 'integer', 'product_id' => 'integer', 'variation_id' => 'integer', 'variation_type_id' => 'integer', ]; public function mainProduct() { return $this->belongsTo(MainProduct::class); } public function product() { return $this->belongsTo(Product::class); } public function variation() { return $this->belongsTo(Variation::class); } public function variationType() { return $this->belongsTo(VariationType::class); } public function prepareAttributes(): array { return [ 'main_product_id' => $this->main_product_id, 'product_id' => $this->product_id, 'variation_id' => $this->variation_id, 'variation_type_id' => $this->variation_type_id, 'variation_name' => $this->variation->name ?? '', 'variation_type_name' => $this->variationType->name ?? '', ]; } public function prepareLinks(): array { return []; } } Step.php 0000644 00000002012 15213512572 0006166 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; class Step extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData; protected $fillable = [ 'sub_title', 'title', 'description', ]; const IMAGE = 'step_image'; public function getImageAttribute() { $url = $this->getFirstMediaUrl(self::IMAGE); return $url ? $url : asset('images/default/step-1.png'); } public function prepareLinks(): array { return [ // ]; } public function prepareAttributes(): array { return [ 'image' => $this->image, 'sub_title' => $this->sub_title, 'title' => $this->title, 'description' => $this->description, ]; } } PurchaseReturn.php 0000644 00000016013 15213512572 0010233 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; 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; /** * App\Models\PurchaseReturn * * @property int $id * @property \Illuminate\Support\Carbon $date * @property int $supplier_id * @property int $warehouse_id * @property float|null $tax_rate * @property float|null $tax_amount * @property float|null $discount * @property float|null $shipping * @property float|null $grand_total * @property float|null $received_amount * @property float|null $paid_amount * @property int|null $payment_type * @property int|null $status * @property int|null $payment_status * @property string|null $notes * @property string|null $reference_code * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read string $purchase_return_pdf_url * @property-read \Spatie\MediaLibrary\MediaCollections\Models\Collections\MediaCollection|Media[] $media * @property-read int|null $media_count * @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\PurchaseReturnItem[] $purchaseReturnItems * @property-read int|null $purchase_return_items_count * @property-read \App\Models\Supplier $supplier * @property-read \App\Models\Warehouse $warehouse * * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn newQuery() * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn query() * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereDate($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereDiscount($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereGrandTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereNotes($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn wherePaidAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn wherePaymentStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn wherePaymentType($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereReceivedAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereReferenceCode($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereShipping($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereStatus($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereSupplierId($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereTaxRate($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereUpdatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseReturn whereWarehouseId($value) * * @mixin \Eloquent */ class PurchaseReturn extends BaseModel implements HasMedia, JsonResourceful { use HasFactory, InteractsWithMedia, HasJsonResourcefulData; protected $table = 'purchases_return'; const JSON_API_TYPE = 'purchases_return'; const PURCHASE_RETURN_PDF = 'purchase_return_pdf'; protected $fillable = [ 'date', 'supplier_id', 'warehouse_id', 'tax_rate', 'tax_amount', 'discount', 'shipping', 'grand_total', 'received_amount', 'paid_amount', 'payment_type', 'notes', 'status', 'payment_status', 'reference_code', 'purchase_id', ]; public static $rules = [ 'date' => 'required|date', 'supplier_id' => 'required|exists:suppliers,id', 'warehouse_id' => 'required|exists:warehouses,id', 'tax_rate' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount' => 'nullable|numeric', 'shipping' => 'nullable|numeric', 'grand_total' => 'nullable|numeric', 'received_amount' => 'numeric|nullable', 'paid_amount' => 'numeric|nullable', 'payment_type' => 'numeric|integer|nullable', 'notes' => 'nullable', 'status' => 'integer|required', 'payment_status' => 'integer|required', 'reference_code' => 'nullable', ]; public $casts = [ 'date' => 'date', 'tax_rate' => 'double', 'tax_amount' => 'double', 'discount' => 'double', 'shipping' => 'double', 'grand_total' => 'double', 'received_amount' => 'double', 'paid_amount' => 'double', ]; //tax type const const EXCLUSIVE = 1; const INCLUSIVE = 2; // discount type const const PERCENTAGE = 1; const FIXED = 2; // payment type const CASH = 1; // Order status const COMPLETED = 1; const PENDING = 2; // Payment status const PAID = 1; const UNPAID = 2; public function prepareLinks(): array { return [ 'self' => route('purchases-return.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'date' => $this->date, 'supplier_id' => $this->supplier_id, 'supplier_name' => $this->supplier->name, 'warehouse_id' => $this->warehouse_id, 'warehouse_name' => $this->warehouse->name, 'tax_rate' => $this->tax_rate, 'tax_amount' => $this->tax_amount, 'discount' => $this->discount, 'shipping' => $this->shipping, 'grand_total' => $this->grand_total, 'received_amount' => $this->received_amount, 'notes' => $this->notes, 'reference_code' => $this->reference_code, 'created_at' => $this->created_at, 'status' => $this->status, 'payment_status' => $this->payment_status, 'purchase_return_items' => $this->purchaseReturnItems, ]; return $fields; } public function warehouse(): BelongsTo { return $this->belongsTo(Warehouse::class, 'warehouse_id', 'id'); } public function supplier(): BelongsTo { return $this->belongsTo(Supplier::class, 'supplier_id', 'id'); } public function purchaseReturnItems(): HasMany { return $this->hasMany(PurchaseReturnItem::class, 'purchase_return_id', 'id'); } public function purchase(): BelongsTo { return $this->belongsTo(Purchase::class, 'purchase_id', 'id'); } } Permission.php 0000644 00000003467 15213512572 0007422 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Eloquent as Model; use Illuminate\Database\Eloquent\Factories\HasFactory; /** * App\Models\Permission * * @property int $id * @property string $name * @property string|null $display_name * @property string $guard_name * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * * @method static \Illuminate\Database\Eloquent\Builder|Permission newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Permission newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Permission query() * @method static \Illuminate\Database\Eloquent\Builder|Permission whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|Permission whereDisplayName($value) * @method static \Illuminate\Database\Eloquent\Builder|Permission whereGuardName($value) * @method static \Illuminate\Database\Eloquent\Builder|Permission whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Permission whereName($value) * @method static \Illuminate\Database\Eloquent\Builder|Permission whereUpdatedAt($value) * * @mixin Model */ class Permission extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'permissions'; const JSON_API_TYPE = 'permissions'; public function prepareLinks(): array { return [ // "self" => route('permissions.show', $this->id), ]; } public function prepareAttributes(): array { $fields = [ 'name' => $this->name, 'display_name' => $this->display_name, 'child_permissions' => $this->child_permissions, ]; return $fields; } } Store.php 0000644 00000002157 15213512572 0006361 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Support\Facades\Auth; class Store extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $fillable = [ 'name', 'tenant_id', 'user_id', 'status', ]; public static function rules(): array { return [ 'name' => 'required', ]; } public function prepareLinks(): array { return [ // ]; } public function prepareAttributes(): array { return [ 'name' => $this->name, 'tenant_id' => $this->tenant_id, 'status' => $this->status, 'users' => UserStore::where('store_id', $this->id)->count(), 'active' => Auth::user()->tenant_id === $this->tenant_id, ]; } public function user(): BelongsTo { return $this->belongsTo(User::class); } } PurchaseItem.php 0000644 00000012626 15213512572 0007660 0 ustar 00 <?php namespace App\Models; use App\Models\Contracts\JsonResourceful; use App\Traits\HasJsonResourcefulData; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\PurchaseItem * * @property int $id * @property int $purchase_id * @property int $product_id * @property float|null $product_cost * @property float|null $net_unit_cost * @property int $tax_type * @property float|null $tax_value * @property float|null $tax_amount * @property int $discount_type * @property float|null $discount_value * @property float|null $discount_amount * @property int $purchase_unit * @property float|null $quantity * @property float|null $sub_total * @property \Illuminate\Support\Carbon|null $created_at * @property \Illuminate\Support\Carbon|null $updated_at * @property-read \App\Models\Product $product * @property-read \App\Models\Purchase $purchase * * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem newQuery() * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem query() * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereCreatedAt($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereDiscountAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereDiscountType($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereDiscountValue($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereNetUnitCost($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereProductCost($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereProductId($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem wherePurchaseId($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem wherePurchaseUnit($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereQuantity($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereSubTotal($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereTaxAmount($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereTaxType($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereTaxValue($value) * @method static \Illuminate\Database\Eloquent\Builder|PurchaseItem whereUpdatedAt($value) * * @mixin \Eloquent */ class PurchaseItem extends BaseModel implements JsonResourceful { use HasFactory, HasJsonResourcefulData; protected $table = 'purchase_items'; const JSON_API_TYPE = 'purchase_items'; protected $fillable = [ 'purchase_id', 'product_id', 'product_cost', 'net_unit_cost', 'tax_type', 'tax_value', 'tax_amount', 'discount_type', 'discount_value', 'discount_amount', 'purchase_unit', 'quantity', 'sub_total', ]; public static $rules = [ 'product_id' => 'required|exists:products,id', 'product_cost' => 'nullable|numeric', 'net_unit_cost' => 'nullable|numeric', 'tax_type' => 'nullable|numeric', 'tax_value' => 'nullable|numeric', 'tax_amount' => 'nullable|numeric', 'discount_type' => 'nullable|numeric', 'discount_value' => 'nullable|numeric', 'discount_amount' => 'nullable|numeric', 'purchase_unit' => 'nullable|numeric', 'quantity' => 'nullable|numeric', 'sub_total' => 'nullable|numeric', 'unit_id' => 'integer', ]; public $casts = [ 'product_cost' => 'double', 'net_unit_cost' => 'double', 'tax_value' => 'double', 'tax_amount' => 'double', 'discount_value' => 'double', 'discount_amount' => 'double', 'quantity' => 'double', 'sub_total' => 'double', ]; public function getPurchaseUnitAttribute($value) { $purchaseUnit = Unit::whereId($value)->first(); if ($purchaseUnit) { return $purchaseUnit->toArray(); } return []; } public function prepareLinks(): array { return [ ]; } public function prepareAttributes(): array { $fields = [ 'product_id' => $this->product_id, 'product_cost' => $this->product_cost, 'net_unit_cost' => $this->net_unit_cost, 'tax_type' => $this->tax_type, 'tax_value' => $this->tax_value, 'tax_amount' => $this->tax_amount, 'discount_type' => $this->discount_type, 'discount_vale' => $this->discount_value, 'discount_amount' => $this->discount_amount, 'purchase_unit' => $this->purchase_unit, 'quantity' => $this->quantity, 'sub_total' => $this->sub_total, 'product_code' => $this->product->code, 'product_name' => $this->product->name, ]; return $fields; } public function purchase(): BelongsTo { return $this->belongsTo(Purchase::class, 'purchase_id', 'id'); } public function product(): BelongsTo { return $this->belongsTo(Product::class, 'product_id', 'id'); } }
| ver. 1.4 |
Github
|
.
| PHP 8.2.31 | Generation time: 0.13 |
proxy
|
phpinfo
|
Settings