/** * Create a new Order. * * @example * $order = Subbly\Model\Order; * Subbly::api('subbly.order')->create($order); * * Subbly::api('subbly.order')->create(array( * 'firstname' => 'Jon', * 'lastname' => 'Snow', * )); * * @param \Subbly\Model\Order|array $order * * @return \Subbly\Model\Order * * @api */ public function create($order, $cart, $shipping, $billing = null) { if (is_array($order)) { $order = new Order($order); } if ($order instanceof Order) { if ($this->fireEvent('creating', array($order)) === false) { return false; } $order->setCaller($this); \DB::transaction(function () use($order, $cart, $shipping, $billing) { $shipping = \Subbly\Subbly::api('subbly.orderaddress')->create($shipping); $order->shipping_address_id = $shipping->id; if ($billing) { $billing = \Subbly\Subbly::api('subbly.orderaddress')->create($billing); $order->billing_address_id = $billing->id; } $order->save(); foreach ($cart as $item) { // TODO: add product sku, name and description in current locale. // work as cache if product is not available later $product = ['order_id' => $order->id, 'product_id' => $item['id'], 'price' => $item['price'], 'name' => $item['name'], 'sku' => $item['sku'], 'sale_price' => 0, 'quantity' => $item['qty'], 'options' => json_encode($item['options'])]; $ret = \Subbly\Subbly::api('subbly.orderproduct')->create($product); } }); $this->fireEvent('created', array($order)); // $order = $this->find($order->id); return $order; } throw new Exception(sprintf(Exception::CANT_CREATE_MODEL, 'Subbly\\Model\\Order', $this->name())); }
/** * Create a new Order * * @example * $order = Subbly\Model\Order; * Subbly::api('subbly.order')->create($order); * * Subbly::api('subbly.order')->create(array( * 'firstname' => 'Jon', * 'lastname' => 'Snow', * )); * * @param \Subbly\Model\Order|array $order * * @return \Subbly\Model\Order * * @api */ public function create($order) { if (is_array($order)) { $order = new Order($order); } if ($order instanceof Order) { if ($this->fireEvent('creating', array($order)) === false) { return false; } $order->setCaller($this); $order->save(); $this->fireEvent('created', array($order)); $order = $this->find($order->id); return $order; } throw new Exception(sprintf(Exception::CANT_CREATE_MODEL, 'Subbly\\Model\\Order', $this->name())); }