'integer', 'product_id' => 'integer', 'product_category_id' => 'integer', 'procurement_product_id' => 'integer', 'unit_id' => 'integer', 'unit_quantity_id' => 'integer', 'order_id' => 'integer', 'tax_group_id' => 'integer', 'quantity' => FloatConvertCasting::class, 'discount' => FloatConvertCasting::class, 'discount_percentage' => FloatConvertCasting::class, 'price_net' => FloatConvertCasting::class, 'unit_price' => FloatConvertCasting::class, 'sale_tax_value' => FloatConvertCasting::class, 'tax_value' => FloatConvertCasting::class, 'price_gross' => FloatConvertCasting::class, 'total_price_net' => FloatConvertCasting::class, 'total_price' => FloatConvertCasting::class, 'total_price_gross' => FloatConvertCasting::class, 'total_purchase_price' => FloatConvertCasting::class, ]; public $dispatchesEvents = [ 'creating' => OrderProductBeforeCreatedEvent::class, 'created' => OrderProductAfterCreatedEvent::class, 'updated' => OrderProductAfterUpdatedEvent::class, 'updating' => OrderProductBeforeUpdatedEvent::class, ]; public function tax_group() { return $this->hasOne( TaxGroup::class, 'id', 'tax_group_id' ); } public function unit() { return $this->hasOne( Unit::class, 'id', 'unit_id' ); } public function order() { return $this->belongsTo( Order::class, 'order_id', 'id' ); } public function product() { return $this->hasOne( Product::class, 'id', 'product_id' ); } public function refunded_products() { return $this->hasMany( related: OrderProductRefund::class, foreignKey: 'order_product_id', localKey: 'id' ); } public function scopeValidProducts( $query ) { return $query->where( 'quantity', '>', 0 ); } }