'int', 'shopping_order_id' => 'int', 'shipping' => 'float', 'shipping_net' => 'float', 'shipping_tax' => 'float', 'price_total_net' => 'float', 'price_total' => 'float', 'tax_total' => 'float', 'qty_total' => 'int', 'points' => 'int', 'status' => 'int', 'tax_split' => 'array', 'net_split' => 'array', 'orders' => AsArrayObject::class, 'shop_items' => AsArrayObject::class, ]; protected $fillable = [ 'user_id', 'shopping_order_id', //'identifier', 'shipping', 'shipping_net', 'shipping_tax', 'price_total_net', 'price_total', 'tax_total', 'qty_total', 'points', 'tax_split', 'net_split', 'orders', 'shop_items', 'status' ]; public static $statusTypes = [ 0 => '', 1 => 'store / pre', 2 => 'order', ]; public function shopping_order() { return $this->belongsTo(ShoppingOrder::class); } public function user() { return $this->belongsTo(User::class); } public function addTaxToSplit($tax_rate, $add_tax) { $tax_split = $this->tax_split; $add_tax = round($add_tax, 2); $tax_split[$tax_rate] = isset($tax_split[$tax_rate]) ? round($tax_split[$tax_rate] += $add_tax, 2) : $add_tax; foreach((array)$tax_split as $key=>$value){ $tax_split[$key] = number_format($value, 2); } $this->tax_split = $tax_split; } public function addNetToSplit($tax_rate, $add_net) { $net_split = $this->net_split; $add_net = round($add_net, 2); $net_split[$tax_rate] = isset($net_split[$tax_rate]) ? round($net_split[$tax_rate] += $add_net, 2) : $add_net; foreach($net_split as $key=>$value){ $net_split[$key] = number_format($value, 2); } $this->net_split = $net_split; } public function addShopItem($shop_item_id, $shop_item) { $numberFields = [ 'user_price_net', 'user_price_total_net', 'user_tax', 'user_tax_total' ]; $intFields = [ 'points_total', 'points' ]; foreach ($numberFields as $field) { if (isset($shop_item->$field)) { $shop_item->$field = number_format($shop_item->$field, 2); } } foreach ($intFields as $field) { if (isset($shop_item->$field)) { $shop_item->$field = intval($shop_item->$field); } } $this->shop_items[$shop_item_id] = $shop_item; } public function addOrder($order) { $this->orders[] = $order; } public function initShoppingOrder($order) { $order['shopping_order'] = ShoppingOrder::findOrFail($order['order_id']); return $order; } }