mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-31 13:41:09 -04:00 
			
		
		
		
	build version 400
This commit is contained in:
		
							
								
								
									
										161
									
								
								app/Models/Item.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								app/Models/Item.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,161 @@ | ||||
| <?php | ||||
| namespace Crater\Models; | ||||
|  | ||||
| use Crater\Models\CompanySetting; | ||||
| use Crater\Models\Tax; | ||||
| use Crater\Models\Unit; | ||||
| use Illuminate\Database\Eloquent\Model; | ||||
| use Crater\Models\InvoiceItem; | ||||
| use Crater\Models\EstimateItem; | ||||
| use Carbon\Carbon; | ||||
| use Illuminate\Database\Eloquent\Factories\HasFactory; | ||||
| use Illuminate\Support\Facades\Auth; | ||||
|  | ||||
| class Item extends Model | ||||
| { | ||||
|     use HasFactory; | ||||
|  | ||||
|     protected $guarded = ['id']; | ||||
|  | ||||
|     protected $casts = [ | ||||
|         'price' => 'integer' | ||||
|     ]; | ||||
|  | ||||
|     protected $appends = [ | ||||
|         'formattedCreatedAt' | ||||
|     ]; | ||||
|  | ||||
|     public function unit() | ||||
|     { | ||||
|         return $this->belongsTo(Unit::class); | ||||
|     } | ||||
|  | ||||
|     public function creator() | ||||
|     { | ||||
|         return $this->belongsTo('Crater\Models\User', 'creator_id'); | ||||
|     } | ||||
|  | ||||
|     public function scopeWhereSearch($query, $search) | ||||
|     { | ||||
|         return $query->where('items.name', 'LIKE', '%'.$search.'%'); | ||||
|     } | ||||
|  | ||||
|     public function scopeWherePrice($query, $price) | ||||
|     { | ||||
|         return $query->where('items.price', $price); | ||||
|     } | ||||
|  | ||||
|     public function scopeWhereUnit($query, $unit_id) | ||||
|     { | ||||
|         return $query->where('items.unit_id', $unit_id); | ||||
|     } | ||||
|  | ||||
|     public function scopeWhereOrder($query, $orderByField, $orderBy) | ||||
|     { | ||||
|         $query->orderBy($orderByField, $orderBy); | ||||
|     } | ||||
|  | ||||
|     public function scopeWhereItem($query, $item_id) | ||||
|     { | ||||
|         $query->orWhere('id', $item_id); | ||||
|     } | ||||
|  | ||||
|     public function scopeApplyFilters($query, array $filters) | ||||
|     { | ||||
|         $filters = collect($filters); | ||||
|  | ||||
|         if ($filters->get('search')) { | ||||
|             $query->whereSearch($filters->get('search')); | ||||
|         } | ||||
|  | ||||
|         if ($filters->get('price')) { | ||||
|             $query->wherePrice($filters->get('price')); | ||||
|         } | ||||
|  | ||||
|         if ($filters->get('unit_id')) { | ||||
|             $query->whereUnit($filters->get('unit_id')); | ||||
|         } | ||||
|  | ||||
|         if ($filters->get('item_id')) { | ||||
|             $query->whereItem($filters->get('item_id')); | ||||
|         } | ||||
|  | ||||
|         if ($filters->get('orderByField') || $filters->get('orderBy')) { | ||||
|             $field = $filters->get('orderByField') ? $filters->get('orderByField') : 'name'; | ||||
|             $orderBy = $filters->get('orderBy') ? $filters->get('orderBy') : 'asc'; | ||||
|             $query->whereOrder($field, $orderBy); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public function scopePaginateData($query, $limit) | ||||
|     { | ||||
|         if ($limit == 'all') { | ||||
|             return collect(['data' => $query->get()]); | ||||
|         } | ||||
|  | ||||
|         return $query->paginate($limit); | ||||
|     } | ||||
|  | ||||
|     public function getFormattedCreatedAtAttribute($value) | ||||
|     { | ||||
|         $dateFormat = CompanySetting::getSetting('carbon_date_format', $this->company_id); | ||||
|         return Carbon::parse($this->created_at)->format($dateFormat); | ||||
|     } | ||||
|  | ||||
|     public function taxes() | ||||
|     { | ||||
|         return $this->hasMany(Tax::class) | ||||
|             ->where('invoice_item_id', NULL) | ||||
|             ->where('estimate_item_id', NULL); | ||||
|     } | ||||
|  | ||||
|     public function scopeWhereCompany($query, $company_id) | ||||
|     { | ||||
|         $query->where('items.company_id', $company_id); | ||||
|     } | ||||
|  | ||||
|     public function invoiceItems() | ||||
|     { | ||||
|         return $this->hasMany(InvoiceItem::class); | ||||
|     } | ||||
|  | ||||
|     public function estimateItems() | ||||
|     { | ||||
|         return $this->hasMany( EstimateItem::class); | ||||
|     } | ||||
|  | ||||
|     public static function createItem($request) | ||||
|     { | ||||
|         $data = $request->validated(); | ||||
|         $data['company_id'] = $request->header('company'); | ||||
|         $data['creator_id'] = Auth::id(); | ||||
|         $item = self::create($data); | ||||
|  | ||||
|         if ($request->has('taxes')) { | ||||
|             foreach ($request->taxes as $tax) { | ||||
|                 $tax['company_id'] = $request->header('company'); | ||||
|                 $item->taxes()->create($tax); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         $item = self::with('taxes')->find($item->id); | ||||
|  | ||||
|         return $item; | ||||
|     } | ||||
|  | ||||
|     public function updateItem($request) | ||||
|     { | ||||
|         $this->update($request->validated()); | ||||
|  | ||||
|         $this->taxes()->delete(); | ||||
|  | ||||
|         if ($request->has('taxes')) { | ||||
|             foreach ($request->taxes as $tax) { | ||||
|                 $tax['company_id'] = $request->header('company'); | ||||
|                 $this->taxes()->create($tax); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         return Item::with('taxes')->find($this->id); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user