Exemplo n.º 1
0
 public function actionOrder()
 {
     $order = new Order();
     /* @var $cart ShoppingCart */
     $cart = \Yii::$app->cart;
     /* @var $products Product[] */
     $products = $cart->getPositions();
     $total = $cart->getCost();
     if ($order->load(\Yii::$app->request->post()) && $order->validate()) {
         $transaction = $order->getDb()->beginTransaction();
         $order->save(false);
         foreach ($products as $product) {
             $orderItem = new OrderItem();
             $orderItem->order_id = $order->id;
             $orderItem->title = $product->title;
             $orderItem->price = $product->getPrice();
             $orderItem->product_id = $product->id;
             $orderItem->quantity = $product->getQuantity();
             if (!$orderItem->save(false)) {
                 $transaction->rollBack();
                 \Yii::$app->session->addFlash('error', 'Cannot place your order. Please contact us.');
                 return $this->redirect('catalog/list');
             }
         }
         $transaction->commit();
         \Yii::$app->cart->removeAll();
         \Yii::$app->session->addFlash('success', 'Thanks for your order. We\'ll contact you soon.');
         $order->sendEmail();
         return $this->redirect('catalog/list');
     }
     return $this->render('order', ['order' => $order, 'products' => $products, 'total' => $total]);
 }
Exemplo n.º 2
0
 public function actionOrder()
 {
     $session = Yii::$app->getSession();
     $cart = $session->has('cart') ? $session->get('cart') : [];
     if (!$cart) {
         return $this->redirect(['index']);
     }
     $model = new Order();
     if ($model->load(Yii::$app->request->post()) && $model->save()) {
         if (is_array($cart)) {
             foreach ($cart as $one_goods) {
                 $order_goods = new OrderGoods();
                 $order_goods->goods_id = $one_goods['id'];
                 $order_goods->count = $one_goods['count'];
                 $order_goods->order_id = $model->id;
                 $order_goods->save();
             }
         }
         Yii::$app->session->remove('cart');
         return $this->redirect(['index']);
     } else {
         $goods_id = ArrayHelper::getColumn($cart, 'id');
         $goods = Goods::find()->where(['id' => $goods_id])->asArray()->indexBy('id')->all();
         $amount = 0;
         foreach ($cart as $one_goods) {
             $amount += $one_goods['count'] * $goods[$one_goods['id']]['price'];
         }
         $model->price = $amount;
         return $this->render('order', ['cart' => $cart, 'model' => $model, 'amount' => $amount]);
     }
 }
Exemplo n.º 3
0
 public function actionCheckout()
 {
     if ($postData = Yii::$app->request->post()) {
         $model = new Product();
         $order = new Order();
         $order->shipping_address = $postData['address'];
         $order->city = $postData['city'];
         $order->country = $postData['country'];
         $order->postal_code = $postData['postal_code'];
         $order->status = 0;
         $order->save();
         $order_id = $order->order_id;
         $items = [];
         foreach ($postData['qty'] as $key => $val) {
             $order_detail = new OrderDetail();
             $order_detail->order_id = $order_id;
             $order_detail->prod_id = $postData['prod_id'][$key];
             $order_detail->quantity = $postData['qty'][$key];
             $order_detail->unit_price = $postData['prod_price'][$key];
             $order_detail->unit_sum = $postData['prod_price'][$key] * $order_detail->quantity;
             $order_detail->save();
             $item = new Item();
             $item->setName($postData['prod_name'][$key])->setCurrency('USD')->setQuantity($val)->setPrice($postData['prod_price'][$key]);
             $items[] = $item;
         }
         $itemList = new ItemList();
         $itemList->setItems($items);
         $payment = preparePaypal($itemList);
         print_r($items);
     }
     exit;
 }
Exemplo n.º 4
0
 public function actionIndexadd()
 {
     if (Yii::$app->user->isGuest) {
         $model = new LoginForm();
         if ($model->load(Yii::$app->request->post()) && $model->login()) {
             return $this->goBack();
         } else {
             return $this->render('/site/login', ['model' => $model]);
         }
     } else {
         $Order = new Order();
         $Order->user_id = Yii::$app->user->identity->id;
         $Order->date_time = date('Y-m-d H:i:s');
         $Order->status_id = '1';
         $Order->save();
         $Card = new CardList();
         $Products = $Card->getCardAndCardList(Yii::$app->user->identity->id);
         $Ord = new Order();
         $order_id = $Ord->GetOrderId(Yii::$app->user->identity->id);
         for ($i = 0; $i < sizeof($Products); $i++) {
             $Orderlist = new Orderlist();
             $Orderlist->order_id = $order_id[0]['MAX(`order_id`)'];
             $Orderlist->product_id = $Products[$i]['product_id'];
             $Orderlist->quantity = $Products[$i]['quantity'];
             $Orderlist->save();
         }
         $card = new Card();
         $card->DeleteCardId(Yii::$app->user->identity->id);
         $order = $Ord->GetOrdersFromID(Yii::$app->user->identity->id);
         $user = User::find()->where(['id' => Yii::$app->user->identity->id])->one();
         return $this->render('index', ['user' => $user, 'order' => $order]);
     }
 }
Exemplo n.º 5
0
 public function actionOrder()
 {
     $order = new Order();
     /** @var ShoppingCart $cart */
     $cart = \Yii::$app->cart;
     /* @var $products Product[] */
     $products = $cart->getPositions();
     if ($order->load(\Yii::$app->request->post()) && $order->validate()) {
         $transaction = $order->getDb()->beginTransaction();
         $order->save(false);
         // part of the transaction;
         foreach ($products as $product) {
             $orderItem = new OrderItem();
             $orderItem->order_id = $order->id;
             $orderItem->product_id = $product->id;
             $orderItem->title = $product->title;
             $orderItem->price = $product->getPrice();
             $orderItem->quantity = $product->getQuantity();
             if (!$orderItem->save(false)) {
                 $transaction->rollBack();
                 Yii::$app->session->setFlash('error', 'Your order cannot be accepted. Please contact us!');
                 $this->goBack();
             }
         }
         $transaction->commit();
         Yii::$app->cart->removeAll();
         Yii::$app->session->addFlash('message', 'Thanks for your order. We\'ll contact you soon!');
         //            $order->sendEmail();
         $this->redirect('/');
     }
     return $this->render('order', ['order' => $order, 'products' => $products, 'total' => $cart->getCost()]);
 }
Exemplo n.º 6
0
 /**
  * Creates a new Order model.
  * If creation is successful, the browser will be redirected to the 'view' page.
  * @return mixed
  */
 public function actionCreate()
 {
     $model = new Order();
     if ($model->load(Yii::$app->request->post()) && $model->save()) {
         return $this->redirect(['view', 'id' => $model->id]);
     } else {
         return $this->render('create', ['model' => $model]);
     }
 }
 /**
  * Creates a new Order model.
  * If creation is successful, the browser will be redirected to the 'view' page.
  * @return mixed
  */
 public function actionCreate()
 {
     $model = new Order();
     if ($model->load(Yii::$app->request->post()) && $model->save()) {
         $redirect = yii::$app->request->post('goto') == 'list' ? ['index'] : ['update', 'id' => $model->id];
         return $this->redirect($redirect);
     }
     return $this->render('create', ['model' => $model]);
 }
Exemplo n.º 8
0
 /**
  * Creates a new Order model.
  * If creation is successful, the browser will be redirected to the 'view' page.
  * @return mixed
  */
 public function actionCreate()
 {
     //if(!Yii::$app->user->can('createYourAuth')) throw new ForbiddenHttpException(Yii::t('app', 'No Auth'));
     $model = new Order();
     $model->loadDefaultValues();
     if ($model->load(Yii::$app->request->post()) && $model->save()) {
         return $this->redirect(['view', 'id' => $model->id]);
     } else {
         return $this->render('create', ['model' => $model]);
     }
 }
 public function actionCreate()
 {
     $model = new Order();
     $model->send_at = date("Y-m-d H:i:s");
     $model->is_new = 0;
     if ($model->load(Yii::$app->request->post()) && $model->save()) {
         return $this->render('thank');
     } else {
         return $this->render('create', ['model' => $model]);
     }
 }
Exemplo n.º 10
0
 /**
  * Сохраняем наш заказ и отправляем письмо пользователю.
  */
 public function saveOrder($user, $product, $post)
 {
     $order = new Order();
     $order->user_id = $user->id;
     $order->summ = $product['price'];
     $order->created_datetime = date('Y-m-d H:i:s');
     $order->finished_datetime = date('Y-m-d H:i:s');
     if ($order->save(false)) {
         \Yii::$app->mailer->compose(['html' => 'order-html', 'text' => 'order-text'], ['user' => $user, 'product' => $product, 'post' => $post])->setFrom([\Yii::$app->params['supportEmail'] => \Yii::$app->name . ' робот'])->setTo($user->email)->setSubject('Заказ товара - ' . \Yii::$app->name)->send();
         return true;
     }
     return false;
 }
Exemplo n.º 11
0
 public function actionIndex()
 {
     $model = new OrderForm();
     if ($model->load(Yii::$app->request->post()) && $model->makeOrder()) {
         $model->good_id++;
         // create a new order
         $order = new Order();
         // set total price
         $model->total_price = Good::findAll($model->good_id)[0]->price * $model->goods_count;
         // fill order props
         foreach ($model as $key => $value) {
             $order->setAttribute($key, $value);
         }
         // save the order
         $order->save();
         return $this->redirect('/index.php?r=order%2Forders');
     }
     return $this->render('index', ['model' => $model, 'good_names' => HelperComponent::array_pluck('name', Good::find()->select('name')->all())]);
 }
Exemplo n.º 12
0
 public function actionOrder()
 {
     $cartPositions = Yii::$app->cart->getPositions();
     if (!$cartPositions or $cartPositions === null) {
         return $this->redirect(['index']);
     }
     $dataProvider = new ArrayDataProvider(['allModels' => $cartPositions]);
     $model = new Order();
     if ($model->load(Yii::$app->request->post())) {
         $model->status = 1;
         $model->total_cost = Yii::$app->cart->getCost();
         $model->date = date('Y-m-d H:i');
         $model->data = Yii::$app->cart->getSerialized();
         if ($model->validate() && $model->save()) {
             Yii::$app->cart->removeAll();
             return $this->render('orderSuccess', ['model' => $model]);
         }
     }
     return $this->render('order', ['model' => $model, 'dataProvider' => $dataProvider]);
 }
Exemplo n.º 13
0
 public function save()
 {
     $order = new Order();
     $order->loadDefaultValues();
     $order->invoice_no = 0;
     $order->invoice_prefix = date("Y-m-d") . '-00';
     $order->store_name = 'Hybrizy';
     if ($this->scenario == self::SCENARIO_TRIAL) {
         $order->payment_method = "Trial";
         $order->payment_code = "Trial";
         $order->firstname = $this->firstname;
         $order->lastname = $this->lastname;
     } elseif ($this->scenario === self::SCENARIO_CHECKOUT) {
         $order->payment_method = "MOLPay";
         $order->payment_code = "molpay";
         $order->telephone = $this->telephone;
         $order->firstname = Yii::$app->user->identity->profile->firstname;
         $order->lastname = Yii::$app->user->identity->profile->lastname;
         $order->payment_firstname = $this->payment_firstname;
         $order->payment_lastname = $this->payment_lastname;
         $order->lastname = $this->payment_lastname;
         $order->email = $this->email;
         $order->total = $this->total;
     }
     $order->store_url = Url::base(true);
     $order->user_id = Yii::$app->user->id;
     if ($order->save()) {
         if ($this->scenario === self::SCENARIO_CHECKOUT) {
             // Generate VCode
             $amount = $order->total;
             $merchantID = Yii::$app->params['merchantID'];
             $orderid = $order->invoice_prefix . '-' . $order->id;
             $vcode = md5($amount . $merchantID . $orderid . Yii::$app->params['verifyKey']);
             // MOLPay Tx Data setup
             $this->_mol_pay_tx_data['bill_name'] = $order->payment_firstname . ' ' . $order->payment_lastname;
             $this->_mol_pay_tx_data['bill_desc'] = $this->BillDescription();
             $this->_mol_pay_tx_data['orderid'] = $orderid;
             $this->_mol_pay_tx_data['amount'] = $order->total;
             $this->_mol_pay_tx_data['bill_email'] = $order->email;
             $this->_mol_pay_tx_data['currency'] = 'MYR';
             $this->_mol_pay_tx_data['country'] = 'MY';
             $this->_mol_pay_tx_data['bill_mobile'] = $order->telephone;
             $this->_mol_pay_tx_data['vcode'] = $vcode;
         }
         return $order;
     } else {
         return false;
     }
 }
Exemplo n.º 14
0
 /**
  * @return array
  */
 public function actionCreateOrder()
 {
     $result = 0;
     \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
     $id = Yii::$app->request->post('id');
     $user_id = Yii::$app->request->post('user_id');
     if ($id && $user_id) {
         $order = new Order();
         $order->goods_id = $id;
         $order->user_id = $user_id;
         $order->active = 1;
         $result = $order->save();
     }
     return ['success' => $result];
 }
Exemplo n.º 15
0
 public function actionCreate()
 {
     $out = ['status' => 'err', 'error' => 'Unknown error'];
     $order = new Order();
     $r = new Request();
     if ($order->load($r->post())) {
         $order->price = $order->price * 100;
         // $user = \Yii::$app->user;
         if (\Yii::$app->user->isGuest) {
             if ($user = User::findByEmail($r->post('SignupForm')['email'])) {
                 $order->user_id = $user->getId();
             } else {
                 $signup = new SignupForm();
                 if ($signup->load($r->post())) {
                     $signup->username = $signup->email;
                     $signup->password = User::MakePass(7);
                     if ($user = $signup->signup()) {
                         $order->user_id = $user->getId();
                     } else {
                         $out['error'] = array_values($signup->errors)[0][0];
                     }
                 } else {
                     //vd($signup->errors,1);
                 }
             }
         } else {
             $order->user_id = \Yii::$app->user->getId();
         }
         if ($order->validate() && $order->save()) {
             //vd([$r->post(),$order->attributes]);
             $out = ['status' => 'ok', 'order' => $order->id, 'user' => $order->user_id, 'sum' => $order->price / 100];
         } else {
             $out['error'] = array_values($order->errors)[0][0];
             //vd($order->errors);
         }
     }
     //vd($out);
     \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
     return $out;
     //return BaseJson::encode($out,JSON_PRETTY_PRINT);
     /*vd(['get' => $r->getQueryParams() ,
       'post' => $r->post(),
       'order' => $order],1); //*/
 }
Exemplo n.º 16
0
 public function actionPurchaseNow()
 {
     $MOLPayInfo = [];
     $order = new Order();
     $order->loadDefaultValues();
     $orderForm = new OrderForm();
     $orderForm->load(\Yii::$app->request->post());
     $order->invoice_no = 0;
     $order->invoice_prefix = date("Y-m-d") . '-00';
     $order->store_name = 'Hybrizy';
     $order->payment_method = "MOLPay";
     $order->payment_code = "molpay";
     $order->store_url = Url::base(true);
     $order->user_id = \Yii::$app->user->id;
     $order->firstname = $orderForm->payment_firstname;
     $order->lastname = $orderForm->payment_lastname;
     $order->email = $orderForm->email;
     $order->telephone = $orderForm->payment_telephone;
     $order->fax = "";
     $order->payment_firstname = $orderForm->payment_firstname;
     $order->payment_lastname = $orderForm->payment_lastname;
     $order->payment_company = "";
     $order->payment_address_1 = $orderForm->payment_address_1;
     $order->payment_address_2 = $orderForm->payment_address_2;
     $order->payment_city = $orderForm->payment_city;
     $order->payment_postcode = $orderForm->payment_postcode;
     $order->payment_country = "";
     $order->payment_zone = "";
     $order->payment_address_format = "";
     if ($orderForm->BillingInfoAsShippingAddress === '1') {
         $order->shipping_firstname = $orderForm->payment_firstname;
         $order->shipping_lastname = $orderForm->payment_lastname;
         $order->shipping_address_1 = $orderForm->payment_address_1;
         $order->shipping_address_2 = $orderForm->payment_address_2;
         $order->shipping_city = $orderForm->payment_city;
         $order->shipping_code = $orderForm->payment_code;
         $order->shipping_postcode = $orderForm->shipping_postcode;
     } else {
         $order->shipping_firstname = $orderForm->shipping_firstname;
         $order->shipping_lastname = $orderForm->shipping_lastname;
         $order->shipping_address_1 = $orderForm->shipping_address_1;
         $order->shipping_address_2 = $orderForm->shipping_address_2;
         $order->shipping_city = $orderForm->shipping_city;
         $order->shipping_code = $orderForm->shipping_code;
         $order->shipping_postcode = $orderForm->shipping_postcode;
     }
     // MOL Pay info
     $MOLPayInfo['bill_name'] = $order->payment_firstname . ' ' . $order->payment_lastname;
     $MOLPayInfo['bill_desc'] = $orderForm->BillDescription();
     $order->shipping_zone = "";
     $order->shipping_address_format = "";
     $order->shipping_method = "";
     $order->shipping_code = "";
     $order->comment = "";
     $order->order_status_id;
     $order->currency_code = "";
     $order->ip = "";
     $order->forwarded_ip = "";
     $order->user_agent = "";
     $order->accept_language = "";
     $order->user_id = \Yii::$app->user->id;
     $cart = unserialize(\Yii::$app->db->createCommand('select cart from user where id=:id')->bindValue(':id', \Yii::$app->user->id)->queryColumn()[0]);
     $order->total = $cart['grandTotal'];
     if ($order->save()) {
         $tempOrderId = $order->invoice_prefix . '-' . $order->id;
         $MOLPayInfo['orderid'] = $tempOrderId;
         $MOLPayInfo['amount'] = $order->total;
         $MOLPayInfo['bill_email'] = $order->email;
         $MOLPayInfo['bill_mobile'] = $order->telephone;
         $form = \Yii::$app->controller->renderPartial('@frontend/views/site/_molpay_progress', ['model' => $MOLPayInfo, 'merchantId' => \Yii::$app->params['merchantId']], true);
         return ['data' => $MOLPayInfo, 'result' => 1, 'merchantId' => \Yii::$app->params['merchantId'], 'html' => $form];
     } else {
         return ['data' => [], 'result' => 0];
     }
 }
Exemplo n.º 17
0
 /**
  * 创建订单
  * 
  * @param string $runValidation
  * @throws \Exception
  * @return boolean
  */
 public function create($runValidation = true)
 {
     if ($runValidation && !$this->validate()) {
         return false;
     }
     if ($this->_store->status === Store::STATUS_REST) {
         throw new \Exception('该店铺休息中…');
     }
     $volume = Yii::$app->user->identity->getCartGoodsRealVolume($this->_store->id);
     if ($this->_store->has_least && $this->_store->least_val > $volume) {
         throw new \Exception('购物车商品未满起送价!');
     }
     if (empty($this->_cartGoodsList)) {
         throw new \Exception('当前购物车为空!');
     }
     foreach ($this->_cartGoodsList as $cartGoods) {
         if ($cartGoods->isExpired) {
             throw new \Exception('商品“' . $cartGoods->goods->name . '”已失效!请您删除该商品然后继续。');
         }
         if ($cartGoods->isTooMuch) {
             throw new \Exception('商品“' . $cartGoods->goods->name . '”数量已超出库存数量!请返回购物车中修改。');
         }
     }
     $transaction = Yii::$app->db->beginTransaction();
     try {
         $order = new Order();
         $order->generateOrderSn();
         $order->user_id = Yii::$app->user->id;
         $order->store_id = $this->_store->id;
         $order->school_id = $this->_store->school_id;
         $order->status = $this->payment === Order::PAYMENT_OFFLINE ? Order::STATUS_UNSHIPPED : Order::STATUS_UNPAID;
         $order->payment = $this->payment;
         $order->fee = $volume;
         $order->preferential = $this->preferential;
         $order->down_val = null;
         $order->gift_val = null;
         $order->new_down_val = null;
         $order->book_time = $this->bookTime == 0 ? null : $this->bookTime;
         $order->remark = $this->remark;
         $order->cancelled_msg = null;
         // 判断优惠类型
         switch ($this->preferential) {
             case Order::PREFERENTIAL_DOWN:
                 if ($this->_store->has_down && $order->fee >= $this->_store->down_upper) {
                     $order->real_fee = bcsub($order->fee, $this->_store->down_val, 2);
                     $order->down_val = $this->_store->down_val;
                 }
                 break;
             case Order::PREFERENTIAL_GIFT:
                 if ($this->_store->has_gift && $order->fee >= $this->_store->gift_upper) {
                     $order->real_fee = $order->fee;
                     $order->gift_val = $this->_store->gift_val;
                 }
                 break;
             case Order::PREFERENTIAL_NONE:
                 $order->real_fee = $order->fee;
                 break;
             default:
                 throw new \Exception('优惠选择错误!');
         }
         // 新用户立减优惠
         if (Yii::$app->params['enableNewDown'] && $this->newDown && $order->fee >= Yii::$app->params['newDownUpper'] && Yii::$app->user->identity->has_new_down) {
             $order->new_down_val = Yii::$app->params['newDownVal'];
             $order->real_fee = bcsub($order->real_fee, $order->new_down_val, 2);
             Yii::$app->user->identity->has_new_down = 0;
             if (!Yii::$app->user->identity->save(false)) {
                 throw new \Exception('用户错误!');
             }
             if ($order->real_fee < 0) {
                 $order->real_fee = 0;
                 $order->status = ORDER::STATUS_UNSHIPPED;
             }
         }
         if (!$order->save(false)) {
             throw new \Exception('订单错误!');
         }
         $this->_order = $order;
         $address = OrderAddress::createDuplicate($this->addressId);
         $address->order_id = $order->id;
         if (!$address->save(false)) {
             throw new \Exception('收货地址错误!');
         }
         foreach ($this->_cartGoodsList as $cartGoods) {
             $goods = OrderGoods::createDuplicate($cartGoods->goods_id);
             $goods->order_id = $order->id;
             $goods->count = $cartGoods->count;
             if (!$goods->save(false)) {
                 throw new \Exception('订单商品错误!');
             }
             if (!$cartGoods->goods->moveSurplus(-$goods->count, "创建订单:{$order->order_sn}。")) {
                 throw new \Exception('商品错误!');
             }
         }
         Yii::$app->user->identity->clearCartGoods($this->_store->id);
         $transaction->commit();
         return true;
     } catch (\Exception $e) {
         $transaction->rollBack();
         throw $e;
     }
 }
Exemplo n.º 18
0
 public function actionCheckout()
 {
     Yii::$app->session['step'] = 2;
     $userId = Yii::$app->user->id;
     $addresses = Address::find()->where(['user_id' => $userId])->all();
     $model = new Order();
     if ($model->load(Yii::$app->request->post())) {
         if (!Yii::$app->request->post('address_id')) {
             return $this->goBack();
         }
         // 使用优惠券
         $feeCouponUser = $feeCouponCode = $feePoint = 0.0;
         $couponId = Yii::$app->request->post('coupon');
         if ($couponId && Yii::$app->request->post('checkbox-coupon')) {
             $couponUser = Coupon::findOne($couponId);
             if (!$couponUser || $couponUser->used_at > 0 || $couponUser->ended_at < time() || $couponUser->user_id != Yii::$app->user->id) {
                 return $this->goBack();
             }
             $feeCouponUser = $couponUser->money;
         }
         // 使用优惠码
         $sn = Yii::$app->request->post('sn');
         if ($sn) {
             $couponCode = Coupon::find()->where(['sn' => $sn])->one();
             if (!$couponCode || $couponCode->used_at > 0 || $couponCode->ended_at < time()) {
                 return $this->goBack();
             }
             $feeCouponCode = $couponCode->money;
         }
         // 使用积分
         $point = Yii::$app->request->post('point');
         if ($point && Yii::$app->request->post('checkbox-point')) {
             if ($point > Yii::$app->user->identity->point) {
                 return $this->goBack();
             }
             $feePoint = intval($point) / 100;
         }
         $address = Address::find()->where(['id' => Yii::$app->request->post('address_id'), 'user_id' => $userId])->one();
         $model->user_id = $userId;
         $model->sn = date('YmdHis') . rand(1000, 9999);
         $model->consignee = $address->consignee;
         $model->country = $address->country;
         $model->province = $address->province;
         $model->city = $address->city;
         $model->district = $address->district;
         $model->address = $address->address;
         $model->zipcode = $address->zipcode;
         $model->phone = $address->phone;
         $model->mobile = $address->mobile;
         $model->email = $address->email ? $address->email : Yii::$app->user->identity->email;
         if ($model->payment_method == Order::PAYMENT_METHOD_COD) {
             $model->payment_status = Order::PAYMENT_STATUS_COD;
         } else {
             $model->payment_status = Order::PAYMENT_STATUS_UNPAID;
         }
         $model->status = $model->payment_status;
         $products = Cart::find()->where(['session_id' => Yii::$app->session->id])->all();
         if (count($products)) {
             foreach ($products as $product) {
                 $model->amount += $product->number * $product->price;
             }
         } else {
             $this->redirect('/cart');
         }
         $model->amount += floatval($model->shipment_fee) - $feeCouponUser - $feeCouponCode - $feePoint;
         if ($model->save()) {
             // insert order_product and clear cart
             foreach ($products as $product) {
                 $orderProduct = new OrderProduct();
                 $orderProduct->order_id = $model->id;
                 $orderProduct->product_id = $product->product_id;
                 $orderProduct->sku = $product->sku;
                 $orderProduct->name = $product->name;
                 $orderProduct->number = $product->number;
                 $orderProduct->market_price = $product->market_price;
                 $orderProduct->price = $product->price;
                 $orderProduct->thumb = $product->thumb;
                 $orderProduct->type = $product->type;
                 $orderProduct->save();
                 // 减少商品的库存
                 Product::updateAllCounters(['stock' => -$product->number], ['id' => $product->product_id]);
             }
             // 生成订单后,清空购物车,设置优惠码,更新积分和积分记录
             Cart::deleteAll(['session_id' => Yii::$app->session->id]);
             if (isset($couponUser) && Yii::$app->request->post('checkbox-coupon')) {
                 $couponUser->used_at = time();
                 $couponUser->order_id = $model->id;
                 $couponUser->save();
             }
             if (isset($couponCode) && Yii::$app->request->post('checkbox-coupon')) {
                 $couponCode->user_id = Yii::$app->user->id;
                 $couponCode->used_at = time();
                 $couponCode->order_id = $model->id;
                 $couponCode->save();
             }
             if (isset($point) && Yii::$app->request->post('checkbox-point')) {
                 $balance = Yii::$app->user->identity->point - $point;
                 User::updateAllCounters(['point' => -$point], ['id' => Yii::$app->user->id]);
                 $pointLog = new PointLog(['user_id' => Yii::$app->user->id, 'type' => PointLog::POINT_TYPE_BUYING, 'point' => -$point, 'balance' => $balance]);
                 $pointLog->save();
             }
             // 记录订单日志
             $orderLog = new OrderLog(['order_id' => $model->id, 'status' => $model->status]);
             $orderLog->save();
             // 不同的付款方式到不同的页面
             if ($model->payment_method == Order::PAYMENT_METHOD_COD) {
                 return $this->redirect(['cart/cod', 'id' => $model->id]);
             } else {
                 return $this->redirect(['cart/pay', 'sn' => $model->sn]);
             }
         }
     }
     $products = Cart::find()->where(['session_id' => Yii::$app->session->id])->all();
     if (!count($products)) {
         return $this->redirect('/cart');
     }
     if (count($addresses)) {
         return $this->render('checkout', ['model' => $model, 'addresses' => $addresses, 'products' => $products]);
     } else {
         return $this->redirect(['cart/address']);
     }
 }
Exemplo n.º 19
0
 public function actionCartFormSubmit()
 {
     if (Yii::$app->request->isPost) {
         $model_form = new Order();
         $model_form->load(Yii::$app->request->post());
         $model_form->scenario = 'submit';
         $model_form->payment_type = Yii::$app->request->post('payment') ? Yii::$app->request->post('payment') : 0;
         //$model_form->validate();
         //vd( $model_form->getErrors());
         $model_form->status = 1;
     }
     if ($model_form->load(Yii::$app->request->post()) && $model_form->validate()) {
         $model_form->save();
         Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
         Yii::$app->session->setFlash('success', 'Благодарим за покупку');
         //Todo сохранить заказы !!!
         $iP = Yii::$app->session->id;
         $model = Cart::getAllByIp($iP);
         if ($model) {
             //vd($model_form->created_at);
             $listItemsInOrder = OrderItems::Add($model, $model_form->id, $model_form->created_at);
             //vd($listItemsInOrder);
         }
         //Todo отправка email !!!
         // Todo отправка ел почты
         //$model_Email = Email::find()->where(['id' => 1])->one();
         // $currEmail = $model_Email->email;
         //vd($model->email);
         Yii::$app->mailer->compose(['html' => '@common/mail/order'], ['order_id' => $model_form->id, 'listItemsInOrder' => $listItemsInOrder])->setFrom('*****@*****.**')->setTo('*****@*****.**')->setSubject('нОвый заказ')->send();
         //Todo Очистить корзину
         Cart::DeleteAllByIp($iP);
         $this->redirect('/site/index');
     } else {
         // либо страница отображается первый раз, либо есть ошибка в данных
         $data = $this->getCommonDate();
         $model_form = new Order();
         $iP = Yii::$app->session->id;
         $model = Cart::getAllByIp($iP);
     }
     return $this->render('cart', ['data' => $data, 'model' => $model, 'model_form' => $model_form]);
 }