diff --git a/app/Models/Attendance.php b/app/Models/Attendance.php index 9d1c508..a882160 100644 --- a/app/Models/Attendance.php +++ b/app/Models/Attendance.php @@ -9,8 +9,10 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; +use Spatie\Image\Enums\Fit; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; #[Appends(['formatted_attendance_date', 'formatted_check_in_at', 'formatted_check_out_at'])] #[Guarded(['id'])] @@ -62,4 +64,16 @@ public function payrollAdjustments(): HasMany { return $this->hasMany(PayrollAdjustment::class); } + + public function registerMediaCollections(): void + { + $this->addMediaCollection('checkin'); + $this->addMediaCollection('checkout'); + } + + public function registerMediaConversions(?Media $media = null): void + { + $this->addMediaConversion('thumb') + ->fit(Fit::Contain, 150, 150); + } } diff --git a/app/Models/CashTransaction.php b/app/Models/CashTransaction.php index 9bf6577..f86dc78 100644 --- a/app/Models/CashTransaction.php +++ b/app/Models/CashTransaction.php @@ -15,8 +15,10 @@ use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Relations\MorphTo; use Illuminate\Database\Eloquent\SoftDeletes; +use Spatie\Image\Enums\Fit; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; #[Appends(['formatted_amount', 'formatted_balance_after', 'formatted_created_at', 'type_label'])] #[Guarded(['id'])] @@ -119,4 +121,15 @@ public function reference(): MorphTo { return $this->morphTo(); } + + public function registerMediaCollections(): void + { + $this->addMediaCollection('photos'); + } + + public function registerMediaConversions(?Media $media = null): void + { + $this->addMediaConversion('thumb') + ->fit(Fit::Contain, 150, 150); + } } diff --git a/app/Models/Cutting.php b/app/Models/Cutting.php index 8a52a42..bffcede 100644 --- a/app/Models/Cutting.php +++ b/app/Models/Cutting.php @@ -13,8 +13,10 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; +use Spatie\Image\Enums\Fit; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; #[Appends(['formatted_cost_per_unit', 'formatted_other_cost', 'formatted_sewing_cost', 'status_label', 'formatted_total_material_cost'])] #[Guarded(['id'])] @@ -110,4 +112,15 @@ public function submittedBy(): BelongsTo { return $this->belongsTo(User::class, 'submitted_by_id'); } + + public function registerMediaCollections(): void + { + $this->addMediaCollection('photos'); + } + + public function registerMediaConversions(?Media $media = null): void + { + $this->addMediaConversion('thumb') + ->fit(Fit::Contain, 150, 150); + } } diff --git a/app/Models/Expense.php b/app/Models/Expense.php index 70b81c2..edcc81f 100644 --- a/app/Models/Expense.php +++ b/app/Models/Expense.php @@ -9,8 +9,10 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\SoftDeletes; +use Spatie\Image\Enums\Fit; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; #[Appends(['formatted_amount', 'formatted_created_at', 'formatted_date'])] #[Guarded(['id'])] @@ -56,4 +58,15 @@ public function createdBy(): BelongsTo { return $this->belongsTo(User::class, 'created_by_id'); } + + public function registerMediaCollections(): void + { + $this->addMediaCollection('photos'); + } + + public function registerMediaConversions(?Media $media = null): void + { + $this->addMediaConversion('thumb') + ->fit(Fit::Contain, 150, 150); + } } diff --git a/app/Models/Order.php b/app/Models/Order.php index 6030d10..123c046 100644 --- a/app/Models/Order.php +++ b/app/Models/Order.php @@ -16,8 +16,10 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; +use Spatie\Image\Enums\Fit; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; #[Appends(['channel_label', 'formatted_cogs', 'formatted_discount', 'formatted_nego_price', 'payment_type_label', 'status_label', 'formatted_subtotal', 'formatted_total_amount'])] #[Guarded(['id'])] @@ -200,4 +202,15 @@ public function orderItems(): HasMany { return $this->hasMany(OrderItem::class); } + + public function registerMediaCollections(): void + { + $this->addMediaCollection('photos'); + } + + public function registerMediaConversions(?Media $media = null): void + { + $this->addMediaConversion('thumb') + ->fit(Fit::Contain, 150, 150); + } } diff --git a/app/Models/ProductVariant.php b/app/Models/ProductVariant.php index a9b87d7..9540816 100644 --- a/app/Models/ProductVariant.php +++ b/app/Models/ProductVariant.php @@ -12,8 +12,10 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; +use Spatie\Image\Enums\Fit; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; #[Appends(['formatted_name', 'formatted_stock'])] #[Guarded(['id'])] @@ -80,4 +82,15 @@ public function stockMutations(): HasMany return $this->hasMany(StockMutation::class, 'stockable_id') ->where('stockable_type', self::class); } + + public function registerMediaCollections(): void + { + $this->addMediaCollection('images'); + } + + public function registerMediaConversions(?Media $media = null): void + { + $this->addMediaConversion('thumb') + ->fit(Fit::Contain, 150, 150); + } } diff --git a/app/Models/Purchase.php b/app/Models/Purchase.php index b920041..645b80a 100644 --- a/app/Models/Purchase.php +++ b/app/Models/Purchase.php @@ -10,8 +10,10 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; +use Spatie\Image\Enums\Fit; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; #[Appends(['formatted_discount', 'formatted_shipping_cost', 'formatted_subtotal', 'formatted_total'])] #[Guarded(['id'])] @@ -71,4 +73,15 @@ public function supplier(): BelongsTo { return $this->belongsTo(Supplier::class); } + + public function registerMediaCollections(): void + { + $this->addMediaCollection('photos'); + } + + public function registerMediaConversions(?Media $media = null): void + { + $this->addMediaConversion('thumb') + ->fit(Fit::Contain, 150, 150); + } } diff --git a/app/Models/RawMaterialPrice.php b/app/Models/RawMaterialPrice.php index f0f8ac5..971fd4d 100644 --- a/app/Models/RawMaterialPrice.php +++ b/app/Models/RawMaterialPrice.php @@ -13,8 +13,10 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; +use Spatie\Image\Enums\Fit; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; #[Appends(['formatted_price'])] #[Guarded(['id'])] @@ -61,4 +63,15 @@ public function getPhotoUrlAttribute(): ?string ? app(S3PresignedService::class)->getTemporaryUrl($media->getPath()) : null; } + + public function registerMediaCollections(): void + { + $this->addMediaCollection('images'); + } + + public function registerMediaConversions(?Media $media = null): void + { + $this->addMediaConversion('thumb') + ->fit(Fit::Contain, 150, 150); + } } diff --git a/app/Models/Restock.php b/app/Models/Restock.php index 9350a7a..2a9d437 100644 --- a/app/Models/Restock.php +++ b/app/Models/Restock.php @@ -13,8 +13,10 @@ use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; +use Spatie\Image\Enums\Fit; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; +use Spatie\MediaLibrary\MediaCollections\Models\Media; #[Appends(['stock_type_label', 'formatted_subtotal', 'formatted_total'])] #[Guarded(['id'])] @@ -73,4 +75,15 @@ public function restockItems(): HasMany { return $this->hasMany(RestockItem::class); } + + public function registerMediaCollections(): void + { + $this->addMediaCollection('photos'); + } + + public function registerMediaConversions(?Media $media = null): void + { + $this->addMediaConversion('thumb') + ->fit(Fit::Contain, 150, 150); + } } diff --git a/app/Services/Concerns/RegistersMedia.php b/app/Services/Concerns/RegistersMedia.php index 20fe42f..cdfd88d 100644 --- a/app/Services/Concerns/RegistersMedia.php +++ b/app/Services/Concerns/RegistersMedia.php @@ -2,11 +2,13 @@ namespace App\Services\Concerns; -use App\Services\S3PresignedService; use Illuminate\Database\Eloquent\Model; +use Illuminate\Support\Facades\Bus; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; +use Spatie\MediaLibrary\Conversions\ConversionCollection; +use Spatie\MediaLibrary\Conversions\Jobs\PerformConversionsJob; use Spatie\MediaLibrary\MediaCollections\Models\Media; trait RegistersMedia @@ -61,7 +63,6 @@ private function registerMedia( Model $model, string $s3Key, string $collectionName, - array $generatedConversions = [], ?int $fileSize = null, ?string $mimeType = null, ?int $orderColumn = null, @@ -69,7 +70,7 @@ private function registerMedia( ): void { $fileName = pathinfo($s3Key, PATHINFO_BASENAME); - Media::create([ + $media = Media::create([ 'model_type' => $model->getMorphClass(), 'model_id' => $model->id, 'uuid' => Str::uuid(), @@ -82,10 +83,29 @@ private function registerMedia( 'size' => $fileSize ?? 0, 'manipulations' => [], 'custom_properties' => ['s3_key' => $s3Key], - 'generated_conversions' => $generatedConversions, + 'generated_conversions' => [], 'responsive_images' => [], 'order_column' => $orderColumn ?? 1, ]); + + $this->generateMediaConversions($media); + } + + private function generateMediaConversions(Media $media): void + { + $model = $media->model; + + if (! $model || ! method_exists($model, 'registerMediaConversions')) { + return; + } + + $conversions = ConversionCollection::createForMedia($media); + + if ($conversions->isEmpty()) { + return; + } + + Bus::dispatch(new PerformConversionsJob($conversions, $media)); } private function syncPhoto(Model $model, array $data, string $collectionName = 'photos'): void @@ -132,7 +152,6 @@ private function syncReceipt(Model $model, ?string $newKey, string $collectionNa model: $model, s3Key: $newKey, collectionName: $collectionName, - generatedConversions: ['thumb' => true], fileSize: $fileSize, mimeType: $fileMimeType, );