public function changePaymentMethod()
 {
     $idUser = Generic::mustCheck($_GET['id_user'], Keys::$ERR_NOT_FOUND_ID_USER);
     $idOrder = Generic::mustCheck($_GET['id_order'], Keys::$ERR_NOT_FOUND_ID_ORDER);
     $paymentMethod = Generic::mustCheck($_GET['payment_method'], Keys::$ERR_NOT_FOUND_PAYMENT_METHOD);
     if (!Util::isLeader($idOrder, $idUser)) {
         Generic::errorMsg(Keys::$ERR_CHANGE_PAYMENT_NOT_LEADER);
     }
     if (!in_array($paymentMethod, Helper::getPaymentTypes())) {
         Generic::errorMsg(Keys::$ERR_PAYMENT_TYPE_NOT_ALLOWED);
     }
     $order = new MasterOrderModel();
     $order->getByID($idOrder);
     $order->payment_method = $paymentMethod;
     $invoice = new Invoice($idOrder, true);
     //update totalan di row order model
     $order->disc_resto = $invoice->valDiscRestaurant;
     $order->disc_bank = $invoice->valDiscBank;
     $order->disc_mr = $invoice->valDiscMR;
     $order->tax_pb1 = $invoice->valTaxCharge;
     $order->service_charge = $invoice->valServiceCharge;
     $order->other_charge = $invoice->valOtherCharge;
     $order->cc_fee = $invoice->valFeeBank;
     $order->mr_fee = $invoice->valFeeMR;
     $order->total_cost = $invoice->subTotal;
     $order->grand_total = $invoice->grandTotal;
     $order->save();
     $results['invoice'] = $invoice->getInvoice();
     Generic::finish($results);
 }
 public static function payViaCreditCard($idOrder, $idUser = "")
 {
     $restoInitiate = Generic::IsNullOrEmptyString($idUser);
     $userInitiate = !$restoInitiate;
     $order = new MasterOrderModel();
     $order->getByID($idOrder);
     //KALO USER INITIATE CEK APA DIA LEADER
     if ($userInitiate) {
         $user = new UserModel();
         $user->getByID($idUser);
         if (!Util::isLeader($idOrder, $idUser)) {
             Generic::errorMsg(Keys::$ERR_PAYMENT_NOT_LEADER);
         }
     } else {
         $idUser = $order->id_user;
         $user = new UserModel();
         $user->getByID($idUser);
     }
     //CEK APA PEMBAYARAN PAKE CREDIT CARD
     if ($order->payment_method != Keys::$PAYMENT_TYPE_CREDIT_CARD) {
         Generic::errorMsg("This Order Not Using Credit Card as Payment Method");
     }
     Doku_Initiate::$sharedKey = "iMdRs8Iz987Z";
     Doku_Initiate::$mallId = "3199";
     $invoice = new Invoice($idOrder, true);
     $params = array('amount' => Generic::dokuMoneyValue($invoice->grandTotal), 'invoice' => $idOrder, 'currency' => '360');
     $detailOrders = $invoice->orderDetails;
     $basket = array();
     foreach ($detailOrders as $detailOrder) {
         $b = array();
         $b['name'] = $detailOrder->name_dish;
         $b['amount'] = Generic::dokuMoneyValue($detailOrder->single_price);
         $b['quantity'] = $detailOrder->quantity;
         $b['subtotal'] = Generic::dokuMoneyValue($detailOrder->price);
         $basket[] = $b;
     }
     $words = Doku_Library::doCreateWords($params);
     $customer = array('name' => $user->full_name, 'data_phone' => $user->phone_no, 'data_email' => $user->email, 'data_address' => $user->district . ',' . $user->city);
     //        $basket[] = array(
     //            'name' => 'sayur',
     //            'amount' => '10000.00',
     //            'quantity' => '1',
     //            'subtotal' => '10000.00'
     //        );
     //        $basket[] = array(
     //            'name' => 'buah',
     //            'amount' => '10000.00',
     //            'quantity' => '1',
     //            'subtotal' => '10000.00'
     //        );
     $dataPayment = array('req_mall_id' => Doku_Initiate::$mallId, 'req_chain_merchant' => 'NA', 'req_amount' => $params['amount'], 'req_words' => $words, 'req_purchase_amount' => $params['amount'], 'req_trans_id_merchant' => $params['invoice'], 'req_request_date_time' => date('YmdHis'), 'req_currency' => '360', 'req_purchase_currency' => '360', 'req_session_id' => sha1(date('YmdHis')), 'req_name' => $customer['name'], 'req_payment_channel' => '15', 'req_email' => $customer['data_email'], 'req_basket' => $basket, 'req_address' => $customer['data_address'], 'req_token_payment' => $user->payment_token, 'req_customer_id' => $idUser);
     $response = Doku_Api::doDirectPayment($dataPayment);
     if ($response->res_response_code == '0000') {
         $status = "SUCCESS";
         $order->status_payment = Keys::$PAYMENT_STATUS_PAID;
         $order->isPaid = Keys::$YES;
         $order->load = 1;
         $order->save();
         //success
         $trans = new MasterRestoTransactionModel();
         $trans->id_restaurant = $order->id_restaurant;
         $trans->id_request = $order->id_order;
         $trans->gross_amount = $invoice->grandTotal;
         $trans->type_transaction = "1";
         $trans->datetime_transaction = leap_mysqldate();
         $trans->approved = "1";
         $trans->mr_fee = $invoice->valFeeMR;
         //doubleval($order->mr_fee);//((double)($arrOrder[0]->grand_total * $resto->mr_fee)) / 100;
         //TODO LATER CHANGE 3 (BANK FEE) INTO GLOBAL VAR
         $trans->other_fee = 0;
         //((double)($arrOrder[0]->grand_total * $resto->cc_fee)) / 100;
         $trans->bank_disc = $invoice->valDiscBank;
         //doubleval($order->disc_bank);//$objOrder->disc_bank;
         $valNetAmount = doubleval($trans->gross_amount - $trans->mr_fee - $trans->other_fee + $trans->bank_disc);
         $trans->net_amount = $valNetAmount;
         $trans->save();
         //reset user credit to 0
         $user = new UserModel();
         $user->getByID($idUser);
         $user->credit = 0;
         $user->save();
     } else {
         $status = "FAILED";
     }
     $results['status'] = $status;
     $results['res_token_id'] = $user->payment_token;
     $results['invoice_no'] = $idOrder;
     $results['id_user'] = $idUser;
     $results['res_response_code'] = $response->res_response_code;
     $results['doku_results'] = $response;
     //        $results['data_payment'] = $dataPayment;
     //        pr($results);
     if ($status == "SUCCESS") {
         return array("success" => 1, $results);
     } else {
         return array("success" => 0, $results);
     }
     //        Generic::finish($results);
 }
 public function addOrderInPendingOrder()
 {
     //TODO Sama seperti add order kemarin, tapi quantity cuma bisa set 1
     //TODO master apa bukan
     if (Efiwebsetting::getData('checkOAuth') == 'yes') {
         IMBAuth::checkOAuth();
     }
     $id_user = isset($_GET['id_user']) ? addslashes($_GET['id_user']) : "";
     if (!$id_user) {
         Generic::errorMsg("Please login!");
     }
     $id_order = isset($_GET['id_order']) ? addslashes($_GET['id_order']) : "";
     if (!$id_order) {
         Generic::errorMsg("ID Order not found!");
     }
     $id_dish = isset($_GET['id_dish']) ? addslashes($_GET['id_dish']) : "";
     if (!$id_dish) {
         Generic::errorMsg("ID Dish not found!");
     }
     $arah = addslashes($_GET['arah']);
     //plus //minus
     //ambil order saya, kalau blom ada, dan action plus, maka bikin baru
     //ambil order saya kalau blom ada dan action minus dan saya master..boleh kurangi, else meldung tidak bisa mengurangi order yang bukan milik anda
     //kalau master ambil order semua
     $ada_default_order = 0;
     $myOrder = "";
     $objOrderDetail = new OrderDetailModel();
     $arrObj = $objOrderDetail->getWhere("id_user = '******' AND id_order = '{$id_order}' AND id_dish ='{$id_dish}' AND order_now!=1 LIMIT 0,1");
     if (count($arrObj) > 0) {
         $ada_default_order = 1;
         $myOrder = $arrObj[0];
     }
     $dish = new MasterDishModel();
     $dish->getByID($id_dish);
     $isLeader = Util::isLeader($id_order, $id_user);
     if ($arah == "plus") {
         if (!$ada_default_order) {
             $price = $dish->price;
             //krn qty = 1
             $objOrderDetail = new OrderDetailModel();
             $objOrderDetail->id_user = $id_user;
             $objOrderDetail->id_order = $id_order;
             $objOrderDetail->id_dish = $id_dish;
             $objOrderDetail->quantity = 1;
             $objOrderDetail->price = $price;
             $objOrderDetail->datetime_order = $this->setCurrentDate();
             $objOrderDetail->status = "1";
             //            $dishname = MasterDish::getDish($id_dish);
             //                $objOrderDetail->quantity = 1;
             $id = $objOrderDetail->save();
         } else {
             $price = $dish->price * ($myOrder->quantity + 1);
             $myOrder->quantity++;
             $myOrder->price = $price;
             $myOrder->datetime_order = $this->setCurrentDate();
             $myOrder->status = "1";
             $myOrder->load = 1;
             $myOrder->save();
             $id = $myOrder->id_order_detail;
         }
     }
     if ($arah == "minus") {
         if ($ada_default_order) {
             //cek apa default ordernya masi plus
             if ($myOrder->quantity > 0) {
                 //minus biasa
                 $price = $dish->price * ($myOrder->quantity - 1);
                 $myOrder->quantity--;
                 $myOrder->price = $price;
                 $myOrder->datetime_order = $this->setCurrentDate();
                 $myOrder->status = "1";
                 $myOrder->load = 1;
                 $myOrder->save();
                 $id = $myOrder->id_order_detail;
             } else {
                 if ($isLeader) {
                     //minus dari anggota yang lain
                     $objOrderDetail = new OrderDetailModel();
                     $arrObjLain = $objOrderDetail->getWhere("id_order = '{$id_order}' AND id_dish ='{$id_dish}'");
                     if (count($arrObjLain) > 0) {
                         //bisa dikurangin dari yang lain..lihat qty nya juga
                         $sum = 0;
                         foreach ($arrObjLain as $od) {
                             $sum += $od->quantity;
                         }
                         if ($sum > 0) {
                             foreach ($arrObjLain as $od) {
                                 if ($od->quantity > 0) {
                                     //minus biasa
                                     $price = $dish->price * ($od->quantity - 1);
                                     $od->quantity--;
                                     $od->price = $price;
                                     $od->datetime_order = $this->setCurrentDate();
                                     $od->status = "1";
                                     $od->load = 1;
                                     $od->save();
                                     $id = $od->id_order_detail;
                                     break;
                                 }
                             }
                         } else {
                             //habis ga bisa dikurangi
                             Generic::errorMsg("Not Enough Quantity");
                         }
                     } else {
                         Generic::errorMsg("Not Enough Quantity");
                     }
                 } else {
                     //Notify kl jumlah tidak cukup utk dikurangi
                     //habis ga bisa dikurangi
                     Generic::errorMsg("Not Enough Quantity");
                 }
             }
         } else {
             //minus dr anggota yang lain
             if ($isLeader) {
                 //minus dari anggota yang lain
                 $objOrderDetail = new OrderDetailModel();
                 $arrObjLain = $objOrderDetail->getWhere("id_order = '{$id_order}' AND id_dish ='{$id_dish}'");
                 if (count($arrObjLain) > 0) {
                     //bisa dikurangin dari yang lain..lihat qty nya juga
                     $sum = 0;
                     foreach ($arrObjLain as $od) {
                         $sum += $od->quantity;
                     }
                     if ($sum > 0) {
                         foreach ($arrObjLain as $od) {
                             if ($od->quantity > 0) {
                                 //minus biasa
                                 $price = $dish->price * ($od->quantity - 1);
                                 $od->quantity--;
                                 $od->price = $price;
                                 $od->datetime_order = $this->setCurrentDate();
                                 $od->status = "1";
                                 $od->load = 1;
                                 $od->save();
                                 $id = $od->id_order_detail;
                                 break;
                             }
                         }
                     } else {
                         //habis ga bisa dikurangi
                         Generic::errorMsg("Not Enough Quantity");
                     }
                 } else {
                     Generic::errorMsg("Not Enough Quantity");
                 }
             } else {
                 //Notify kl jumlah tidak cukup utk dikurangi
                 Generic::errorMsg("Not Enough Quantity");
             }
         }
     }
     if ($arah == "") {
         Generic::errorMsg("Please insert arah");
     }
     // getcurrent qty dr iddish
     //        $currQuantity = OrderDetail::getQuantityUserByID_dish($id_dish, $id_order, $id_user);
     //        $id = $this->addOrderDetails($id_order, $id_user, $id_dish, $currQuantity + 1);
     if (!$id) {
         Generic::errorMsg("Add order failed!");
     }
     $objOrder = new MasterOrderModel();
     $objOrder->getByID($id_order);
     $invoice = $this->calcRechnung($objOrder->id_restaurant, $id_order);
     $inv = new Invoice($id_order, true);
     $this->setInvoiceInOrder($objOrder, $invoice);
     $objOrder->datetime_order = $this->setCurrentDate();
     //        $objOrder->total_cost = $invoice['Total'];
     $objOrder->load = 1;
     $id_updateOrder = $objOrder->save();
     if (!$id_updateOrder) {
         Generic::errorMsg("Update Order failed!");
     }
     $json = array();
     $json['status_code'] = 1;
     $json['results']['messages'] = "Success";
     $orderDetails = Util::getAllOrderDetailsByIDOrder($id_order);
     $orderDetailByDishID = array();
     //        pr($orderDetails);
     $total = array();
     foreach ($orderDetails as $det) {
         if ($det['status_progress'] != 9) {
             //                echo "dis ID ".$det['id_dish']." | ".$total[$det['id_dish']]['quantity']." add ".$det['quantity']."<br>";
             $total[$det['id_dish']]['quantity'] += $det['quantity'];
         }
         $string_name = rtrim(trim(preg_replace('/\\s\\s+/', ' ', $det['name'])));
         $dish = new MasterDishModel();
         $dish->getByID($det['id_dish']);
         $total[$det['id_dish']]['id_dish'] = $det['id_dish'];
         $total[$det['id_dish']]['name'] = $string_name;
         $total[$det['id_dish']]['single_price'] = (double) $dish->price;
         $orderDetailByDishID[$det['id_dish']][] = $det;
     }
     $hasilnya = array();
     $all_total = 0;
     foreach ($total as $key => $val) {
         $sem = array();
         $val['price_subtotal'] = $val['quantity'] * $val['single_price'];
         $all_total += $val['price_subtotal'];
         $sem = $val;
         $sem["orders"] = array();
         //kelompokan menurut status progess
         foreach ($orderDetailByDishID[$key] as $orderDetail) {
             $userInstance = Util::createUserInstance($orderDetail["id_user"], $orderDetail["note"], $orderDetail["id_order_detail"]);
             $orderDetail['user'] = $userInstance;
             if ($orderDetail['order_now'] == 0) {
                 $sem['orders']['Pending'][] = $orderDetail;
             } else {
                 $sem['orders'][Helper::getStatusProgress()[$orderDetail['status_progress']]][] = $orderDetail;
             }
         }
         $hasilnya[] = $sem;
     }
     $json['results']['hasil'] = $hasilnya;
     $json['results']['alltotal'] = $all_total;
     $json['results']['invoice'] = $inv->getInvoice();
     $ids = $this->getUserIdByIDOrder($id_order, $id_user);
     //        $json['results']['push'] = $this->notifyAddOrder($ids, $id_order);
     $json['results']['push'] = Util::pushNotifyAddOrder($id_order, $id_user, $id_dish);
     echo json_encode($json);
     //        $json['APA'] = "";
     //        $json2 =$this->notifyAddOrder($ids, $id_order);
     //        $json3 = array_merge($json, $json2);
     //        echo json_encode($json3) ;
     die;
 }