/var/www/vhosts/nabawater/backend/controllers
Edit: /var/www/vhosts/nabawater/backend/controllers/OrderController.php (93713B)
request->queryParams);
return $this->render(
'index',
[
'searchModel' => $searchModel,
'dataProvider' => $searchModel->search(Yii::$app->request->queryParams)
]
);
}
/**
*
* @return string
*
* @Title("Failure List")
*/
public function actionFailureOrder()
{
$searchModel = new OrderSearch();
Com::setSession('data', Yii::$app->request->queryParams);
return $this->render(
'failure-index',
[
'searchModel' => $searchModel,
'dataProvider' => $searchModel->Failuresearch(Yii::$app->request->queryParams)
]
);
}
/**
*
* @return string
*
* @Title("Accept-List")
*/
public function actionAccepredOrderList()
{
$searchModel = new OrderSearch();
Com::setSession('data', Yii::$app->request->queryParams);
return $this->render(
'accept-index',
[
'searchModel' => $searchModel,
'dataProvider' => $searchModel->searchAccept(Yii::$app->request->queryParams)
]
);
}
/**
*
* @return string
*
* @Title("Prepared-List")
*/
public function actionPreparedOrderList()
{
$searchModel = new OrderSearch();
Com::setSession('data', Yii::$app->request->queryParams);
return $this->render(
'prepare-index',
[
'searchModel' => $searchModel,
'dataProvider' => $searchModel->searchPrepare(Yii::$app->request->queryParams)
]
);
}
/**
*
* @return string
*
* @Title("Delivered-List")
*/
public function actionDeliveredOrderList()
{
$searchModel = new OrderSearch();
Com::setSession('data', Yii::$app->request->queryParams);
return $this->render(
'deliver-index',
[
'searchModel' => $searchModel,
'dataProvider' => $searchModel->searchDelivered(Yii::$app->request->queryParams)
]
);
}
/**
*
* @return string
*
* @Title("Rejected-List")
*/
public function actionRejectedOrderList()
{
$searchModel = new OrderSearch();
Com::setSession('data', Yii::$app->request->queryParams);
return $this->render(
'reject-index',
[
'searchModel' => $searchModel,
'dataProvider' => $searchModel->searchReject(Yii::$app->request->queryParams)
]
);
}
/**
*
*
*/
public function actionExport()
{
$searchModel = new OrderSearch();
$dataProvider = $searchModel->search($_SESSION['data']);
$model = $dataProvider->query->all();
$thead = [];
$tbody = [];
$theading = [
'Order Number',
'Order Date Time',
'First Name',
'Last Name',
'Email',
'Branch Name',
'Sub Total',
'Delivery Fee',
'Package Price',
'Service Tax',
'VAT',
'Order Total',
'Payment Type',
'Order Status',
'Delivery Boy Name'
];
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Csv($spreadsheet);
$index = 1;
foreach ($theading as $key => $value) {
$sheet->setCellValueByColumnAndRow($index, 1, $theading[$key]);
$index++;
}
$fileName = 'Order-List-Report' . '-' . date('Y-m-d') . '.csv';
$orderModel = new Order();
$positionValue = 2;
foreach ($model as $key => $value) {
$sheet->setCellValue("A$positionValue", $value['order_number'])
->setCellValue("B$positionValue", $value['order_date_time'])
->setCellValue("C$positionValue", $value['customer_first_name'])
->setCellValue("D$positionValue", $value['customer_last_name'])
->setCellValue("E$positionValue", $value['customer_email'])
->setCellValue("F$positionValue", $value['branch_name'])
->setCellValue("G$positionValue", $value['item_total'])
->setCellValue("H$positionValue", $value['delivery_fee'])
->setCellValue("I$positionValue", $value['package_price'])
->setCellValue("J$positionValue", $value['service_tax'])
->setCellValue("K$positionValue", $value['vat'])
->setCellValue("L$positionValue", $value['order_total'])
->setCellValue("M$positionValue", $orderModel->getPaymentOptionLabel($value['payment_option']))
->setCellValue("N$positionValue", $orderModel->getOrderStatusLabel($value['order_status']))
->setCellValue("O$positionValue", $value['deliveryboy_name']);
++$positionValue;
}
// We'll be outputting an excel file
// header('Content-type: application/vnd.ms-excel');
header('Content-type: text/x-csv');
// It will be called file.xls
header("Content-Disposition: attachment; filename=.$fileName");
$writer->save('php://output');
exit;
}
/**
* @return string
*
* @Title("Create")
*/
public function actionCreate()
{
Com::unsetSession('cart');
$model = new Order();
$modelUser = new User();
$modelUserAddress = new UserAddress();
$modelUserAddressLang = new UserAddressLang();
$modelVendor = new Vendor();
$modelCity = new City();
$modelBranch = new Branch();
return $this->render('create', [
'model' => $model,
'modelUser' => $modelUser,
'modelUserAddress' => $modelUserAddress,
'modelUserAddressLang' => $modelUserAddressLang,
'modelVendor' => $modelVendor,
'modelBranch' => $modelBranch,
]);
}
/**
* @return string
* @throws \yii\base\InvalidParamException
*
* @Title("Quick View")
*/
public function actionQuickView()
{
$params = ['id'];
$post = Yii::$app->getRequest()->post();
$result = ['status' => STATUS_FAIL, 'msg' => ''];
foreach ($params as $param) {
if (!array_key_exists($param, $post)) {
$result['msg'] = Yii::t('backend', 'Required param missing');
goto skip;
}
}
$resposeArray = \backend\models\Order::find()->where(['order_key' => $post['id']])->one();
$resposeArray = \backend\models\Order::find()->where(['order_key' => $post['id']])->one();
$order = $resposeArray->toArray();
$driver_rejected_reason = '';
//$order['order_key'] = 'ypqsxq9l7xqb36a3';
if ($order['order_status'] == Order::ORDER_STATUS_DELIVERYBOY_REJECTED) {
$responseData = Com::getJsonData('GET', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "order/rejected-reasons/" . $order['order_key'] . "?company_id=" . Configuration::get(Configuration::COMPANY_KEY), [], 0);
// print_r($responseData); die;
if ($responseData != "" && $responseData->status == 200) {
if (count($responseData->data) > 1) {
$data = end($responseData->data);
$driver_rejected_reason = $data->rejected_reason;
} else {
$data = isset($responseData->data[0]) ? $responseData->data[0] : "";
$driver_rejected_reason = $data->rejected_reason;
}
}
}
//print_r($driver_rejected_reason); die;
$result['status'] = STATUS_SUCCESS;
$result['response'] = json_encode($resposeArray->toArray());
$result['data'] = $this->renderPartial('quick-view', ['resposeArray' => $resposeArray->toArray(), 'driver_rejected_reason' => $driver_rejected_reason]);
skip:
return $this->asJson($result);
}
/**
* @return string
* @throws \yii\base\InvalidParamException
*
* @Title("Add Cart Item")
*/
public function actionAddItemToCart()
{
$post = Yii::$app->getRequest()->post();
$params = ['item_id', 'branch_id', 'order_type'];
$result = ['status' => STATUS_FAIL, 'msg' => '', 'model' => '', 'currency' => ''];
foreach ($params as $param) {
if (!array_key_exists($param, $post)) {
$result['msg'] = 'Required Param Missing';
goto skip;
}
}
$cart = $this->getCartItems();
$model = Item::find()
->alias('I')
->select([
'I.item_id',
'I.item_key',
'IL.item_name',
'I.item_price',
'I.package_price'
])
->leftJoin(['IL' => ItemLang::tableName()], 'IL.item_id = I.item_id')
->where(['IL.item_id' => $post['item_id']])
->andWhere(['not', ['I.category_id' => null]])
->andWhere(['not', ['I.package_price' => null]])
->asArray()
->one();
if ($model === null || empty($model)) {
$result['msg'] = 'Unable to find the item';
goto skip;
}
$ingredients = [];
if (isset($post['ingredient']) && count($post['ingredient']) > 0) {
$ingredientData = ItemMapping::find()
->alias('IM')
->select([
'I.ingredient_key',
'IL.ingredient_name',
'IIM.price',
'IIG.item_ingredient_group_key'
])
->leftJoin(['IMG' => ItemMappingGroup::tableName()], 'IMG.item_mapping_id = IM.item_mapping_id')
->leftJoin(['IIG' => ItemIngredientGroup::tableName()], 'IIG.item_ingredient_group_id = IMG.item_ingredient_group_id')
->leftJoin(['IIM' => ItemIngredientMapping::tableName()], 'IIM.item_ingredient_group_id = IIG.item_ingredient_group_id')
->leftJoin(['IL' => IngredientLang::tableName()], 'IL.ingredient_id = IIM.ingredient_id')
->leftJoin(['I' => Ingredient::tableName()], 'I.ingredient_id = IL.ingredient_id')
->where(['in', 'IL.ingredient_id', $post['ingredient']])
->andWhere(['IM.item_id' => $post['item_id']])
->asArray()
->all();
if (count($ingredientData) > 0) {
foreach ($ingredientData as $ingredient) {
$unique_key = $ingredient['item_ingredient_group_key'] . '-' . $ingredient['ingredient_key'];
$ingredients[] = [
'unique_key' => $unique_key,
'group_key' => $ingredient['item_ingredient_group_key'],
'ingredient_name' => $ingredient['ingredient_name'],
'ingredient_key' => $ingredient['ingredient_key'],
'price' => $ingredient['price'],
];
}
}
}
$modelBranch = Branch::find()
->select('*')
->where(['branch_id' => $post['branch_id']])
->one();
$branchLatitude = $modelBranch->latitude;
$branchLongitude = $modelBranch->longitude;
$deliveryChargeBase = $modelBranch->delivery_charge_base;
$deliveryChargeBaseKm = $modelBranch->delivery_charge_base_km;
$deliveryChargeAdditionalPerKm = $modelBranch->delivery_charge_additional_per_km;
$packagePrice = $model['package_price'];
$deliveryFee = 0.0;
if ((int)$post['order_type'] === ORDER::ORDER_TYPE_PICKUP) {
$deliveryFee = 0.0;
} else if ((int)$post['order_type'] === ORDER::ORDER_TYPE_DELIVERY) {
$userDistance = GeoHelper::distance($post['lat'], $post['lng'], $branchLatitude, $branchLongitude);
if ($userDistance <= $deliveryChargeBase) {
$deliveryFee = $deliveryChargeBaseKm;
} else {
$distanceDifference = $userDistance - $deliveryChargeBase;
$deliveryFee = $deliveryChargeBaseKm + ($distanceDifference * $deliveryChargeAdditionalPerKm);
}
}
$cartData = [
'cart_key' => Com::generateRandomString(16, true),
'quantity' => 1,
'item_id' => $model['item_id'],
'item_key' => $model['item_key'],
'item_name' => $model['item_name'],
'item_price' => $model['item_price'],
'package_price' => $model['package_price'],
'delivery_fee' => $deliveryFee,
'ingredient_total' => 0,
'total' => 0,
'ingredients' => [],
'tax' => 0
];
if (ArrayHelper::keyExists('ingredient', $post) && $post['ingredient'] !== []) {
$cartData['ingredients'] = array_values($ingredients);
$cartData['ingredient_total'] = array_sum(ArrayHelper::getColumn($ingredients, 'price'));
}
$cartIndexArr = array_keys(ArrayHelper::getColumn($cart, 'item_id'), $post['item_id']);
$isUpdate = false;
foreach ($cartIndexArr as $cartIngredient => $cartIndex) {
$cartIngredient = ArrayHelper::getColumn($cart[$cartIndex]['ingredients'], 'unique_key');
$cartDataIngredient = ArrayHelper::getColumn($cartData['ingredients'], 'unique_key');
if (
array_intersect($cartIngredient, $cartDataIngredient) !== [] ||
($cartIngredient === [] && $cartDataIngredient === [])
) {
$cart[$cartIndex]['quantity'] += $cartData['quantity'];
$total = $cart[$cartIndex]['item_price'] + $cart[$cartIndex]['ingredient_total'];
$cart[$cartIndex]['total'] = $total * $cart[$cartIndex]['quantity'];
$total = $cart[$cartIndex]['total'] + $deliveryFee + $model['package_price'];
$isUpdate = true;
}
}
$modelTax = Tax::find()->alias('T')
->select(['T.*', 'TL.tax_name'])
->leftJoin(['TL' => TaxLang::tableName()], 'T.tax_id = TL.tax_id')
->where(['T.status' => Tax::ACTIVE])
->all();
$taxAmount = 0;
if ($isUpdate === false) {
$total = $cartData['item_price'] + $cartData['ingredient_total'];
$cartData['total'] = $total * $cartData['quantity'];
$total = $total + $deliveryFee + $model['package_price'];
if (!empty($modelTax)) {
foreach ($modelTax as $tax) {
$taxPercentage = $tax->value / 100;
$taxAmount = $total * $taxPercentage;
$total += $taxAmount;
$cartData['tax'] = $taxAmount;
$cartData['total'] = $total;
}
}
$cart[] = $cartData;
}
Com::setSession('cart', $cart);
$result['data'] = $this->renderPartial('_cart', ['items' => $cart]);
$result['currency'] = Configuration::get(Configuration::APP_CURRENCY_CODE);
$result['status'] = STATUS_SUCCESS;
skip:
return $this->asJson($result);
}
/**
*
* @return Json
*
* @Title("Assign Order")
*/
public function actionAssignOrder()
{
$param = 'id';
$post = Yii::$app->getRequest()->post();
$result = ['status' => STATUS_FAIL, 'msg' => ''];
if (!array_key_exists($param, $post)) {
$result['msg'] = Yii::t('backend', 'Required param missing');
goto skip;
}
$modelOrder = Order::find()
->where(['order_key' => $post['id']])
->one();
$resultData = [];
$responseData = Com::getJsonData('GET', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "company/drivers/vendor/0?company_id=" . Configuration::get(Configuration::COMPANY_KEY), [], 0);
/* set flash for sever down */
if ($responseData == null || (isset($responseData) && $responseData->status == 404)) {
Yii::$app->session->setFlash('danger', Yii::t('backend', 'Server is down! Please try again some other time!'));
}
if (isset($responseData->data)) {
foreach ($responseData->data as $dataKey => $dataValue) {
$resultData[] = [
'id' => $dataValue->_id,
'key' => $dataValue->_id,
'name' => $dataValue->name,
'status' => $dataValue->status,
'email' => $dataValue->email,
'phone_number' => $dataValue->phone_number,
'country' => $dataValue->country,
'city' => $dataValue->city,
'address' => $dataValue->address
];
}
} else {
$resultData = [];
}
$result['status'] = STATUS_SUCCESS;
$result['response'] = json_encode($resultData);
$result['data'] = $this->renderPartial('delivery-boy', ['responseArray' => $resultData, 'order_id' => $post['id']]);
skip:
return $this->asJson($result);
}
/**
* @return $string
*
* @Title("Assign Delivery Boy")
*/
public function actionAssignDeliveryBoy()
{
$params = ['id', 'order_id'];
$result = ['status' => STATUS_FAIL, 'msg' => ''];
$post = Yii::$app->getRequest()->post();
foreach ($params as $param) {
if (!array_key_exists($param, $post)) {
$result['msg'] = 'Required Param Missing';
goto skip;
}
}
$model = Order::find()
->where(['order_key' => $post['order_id']])
->one();
if ($model === null) {
$result['msg'] = 'Unable to find the Order Details';
goto skip;
} else {
/* if($model->is_delivery_boy_order_created != Order::DELIVERY_ORDER_CREATED) {
$created = $this->saveDataOnDeliveryBoy($model->order_key);
if(!$created) {
$result['msg'] = 'Please try again later';
goto skip;
}
}
*/
$responseData = Com::getJsonData('PUT', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "order/" . $model->order_key . "/assign_driver/" . $post['id'] . "?company_id=" . Configuration::get(Configuration::COMPANY_KEY), [], 0);
if ($responseData == null || (isset($responseData) && $responseData->status == 404)) {
$result['status'] = STATUS_FAIL;
$result['msg'] = Yii::t('backend', 'Server is down! Please try again some other time!');
} else if ($responseData->status == 400) {
$msg = $responseData->message;
$result['status'] = STATUS_FAIL;
$result['msg'] = Yii::t('backend', $msg);
} else if ($responseData->status == 200) {
$model->deliveryboy_id = $post['id'];
$model->order_status = Order::ORDER_STATUS_DELIVERYBOY_ASSIGNED;
$model->save(false);
$modelDeliveryRequest = new DeliveryboyRequest();
$modelDeliveryRequest->order_id = $model['order_id'];
$modelDeliveryRequest->delivery_boy_id = $post['id'];
$modelDeliveryRequest->requested_datetime = date('Y-m-d H:i:s');
$modelDeliveryRequest->status = DeliveryboyRequest::ACTIVE;
$modelDeliveryRequest->save();
$result['status'] = STATUS_SUCCESS;
$result['msg'] = 'Deliverboy Boy Assigned Successfully';
}
}
skip:
return $this->asJson($result);
}
/**
* @return Json
*
* @Title("Order Status")
*/
public function actionGetOrderStatus()
{
$post = Yii::$app->getRequest()->post();
$params = ['status', 'id'];
$result = ['status' => STATUS_FAIL, 'msg' => ''];
foreach ($params as $param) {
if (!array_key_exists($param, $post)) {
$result['msg'] = 'Required Param Missing';
goto skip;
}
}
$model = Order::findOne(['order_key' => $post['id']]);
$modelVendor = Vendor::findOne(['vendor_id' => $model->vendor_id]);
if ($model === null) {
$result['msg'] = 'Unable to find the Order Details';
goto skip;
} else {
if ($model->order_status == Order::DELIVERY_REJECTED_CONDITION) {
$result['msg'] = 'Order already rejected';
goto skip;
}
if ($post['status'] == Order::DELIVERY_REJECTED_CONDITION) {
$result['msg'] = 'Reject send';
$result['status'] = Order::DELIVERY_REJECTED_CONDITION;
$result['order_key'] = $post['id'];
goto skip;
}
}
if ($model->order_type == Order::ORDER_TYPE_DELIVERY) {
if ($post['status'] == Order::ORDER_STATUS_ACCEPTED) {
$requestData = [];
$requestData['vendor_location'] = [
'latitude' => $modelVendor->vendor_latitude,
'longitude' => $modelVendor->vendor_longitude,
];
$responseData = Com::getJsonData('PUT', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "order/" . $model->order_key . "/" . $post['status'] . "?company_id=" . Configuration::get(Configuration::COMPANY_KEY), $requestData, 1);
} else {
if ($post['status'] == Order::ORDER_STATUS_DELIVERED_TO_RIDER) {
$post['status'] = Order::ORDER_STATUS_READY_TO_PICKUP;
}
$responseData = Com::getJsonData('PUT', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "order/" . $model->order_key . "/" . $post['status'] . "?company_id=" . Configuration::get(Configuration::COMPANY_KEY), [], 0);
}
} else {
$userDeviceToken = User::find()
->select('device_token')
->where(['user_id' => $model->user_id])
->andWhere(['not', ['device_token' => null]])
->one();
if ($post['status'] == Order::ORDER_STATUS_PENDING || $post['status'] == Order::ORDER_STATUS_ACCEPTED || $post['status'] == Order::ORDER_STATUS_PREPARED || $post['status'] == Order::ORDER_STATUS_READY_TO_PICKUP || $post['status'] == Order::ORDER_STATUS_ONTHEWAY || $post['status'] == Order::ORDER_STATUS_DELIVERED || $post['status'] == Order::ORDER_STATUS_REJECTED) {
$token = $userDeviceToken != null ? trim($userDeviceToken->device_token) : '';
try {
$oneSignal = OneSignal::getInstance();
$oneSignal->setAppId(Configuration::get(Configuration::PUSH_NOTIFICATION_APP_ID));
$oneSignal->setRestApiKey(Configuration::get(Configuration::PUSH_NOTIFICATION_REST_API_KEY));
$oneSignal->setIcon('http://online.kitokey.com/frontend/web/theme/images/notification.png');
$oneSignal->push(
['en' => 'Order status'],
['en' => 'Your Order ' . '#' . $model->order_number . ' has been ' . $model->getOrderStatusLabelCustom($post['status'])],
[$token],
['status' => 'Message Sent Successfully']
);
} catch (Exception $e) {
$result['msg'] = $e->getMessage();
//echo $e->getMessage();
}
}
}
$model->order_status = $post['status'];
$model->save(false);
$result['msg'] = 'Order Status Changed Successfully';
$adminUserData = Yii::$app->getUser()->getIdentity();
$adminUserName = $adminUserData->attributes['user_name'];
ActivityLog::log($adminUserName . ' ' . 'order ' . $model->order_number . ' status changed to ' . $model->getOrderStatusLabelCustom($post['status']));
$result['status'] = STATUS_SUCCESS;
skip:
return $this->asJson($result);
}
/**
* @return Json
*
* @Title("Order Status")
*/
public function actionRejectOrderStatus()
{
$post = Yii::$app->getRequest()->post();
$params = ['status', 'id'];
$result = ['status' => STATUS_FAIL, 'msg' => ''];
foreach ($params as $param) {
if (!array_key_exists($param, $post)) {
$result['msg'] = 'Required Param Missing';
goto skip;
}
}
$model = Order::findOne(['order_key' => $post['id']]);
if ($model === null) {
$result['msg'] = 'Unable to find the Order Details';
goto skip;
} else {
$model->order_status = $post['status'];
$model->rejected_reason = $post['reject_reason'];
$model->save(false);
// die('ko');
$userWebToken = User::find()
->select('device_token')
->where(['user_id' => $model->user_id])
->andWhere(['not', ['device_token' => null]])
->one();
if ($userWebToken != null) {
$token = trim($userWebToken->device_token);
try {
$oneSignal = OneSignal::getInstance();
$oneSignal->setAppId(Configuration::get(Configuration::PUSH_NOTIFICATION_APP_ID));
$oneSignal->setRestApiKey(Configuration::get(Configuration::PUSH_NOTIFICATION_REST_API_KEY));
$oneSignal->setIcon('http://online.kitokey.com/frontend/web/theme/images/notification.png');
$oneSignal->push(
['en' => 'Order status'],
['en' => 'Your order #' . $model->order_number . ' has been rejected.'],
[$token],
['status' => 'Message Sent Successfully']
);
} catch (Exception $e) {
echo $e->getMessage();
}
}
}
if ($model->order_type == Order::ORDER_TYPE_DELIVERY) {
$status = Order::ORDER_STATUS_REJECTED;
$responseData = Com::getJsonData('PUT', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "order/".$model->order_key."/".$status."?company_id=" . Configuration::get(Configuration::COMPANY_KEY), [], 0);
}
$orderItem = OrderItem::find()->where(['order_id' => $model->order_id])->all();
foreach ($orderItem as $key => $orderItemModel) {
$itemModel = Item::find()
->where(['item_id' => $orderItemModel->item_id])
->one();
if ($itemModel !== null) {
$itemModel->quantity = $itemModel->quantity + $orderItemModel->quantity;
$itemModel->save(false);
}
}
$result['msg'] = 'Order Rejected Successfully';
$result['status'] = STATUS_SUCCESS;
$adminUserData = Yii::$app->getUser()->getIdentity();
$adminUserName = $adminUserData->attributes['user_name'];
ActivityLog::log($adminUserName . ' ' . 'order ' . $model->order_number . ' status changed to ' . $model->getOrderStatusLabelCustom($post['status']));
skip:
return $this->asJson($result);
}
/**
* @return Json
*
* @Title("Payment Status")
*/
public function actionGetPaymentStatus()
{
$post = Yii::$app->getRequest()->post();
$params = ['status', 'id'];
$result = ['status' => STATUS_FAIL, 'msg' => ''];
foreach ($params as $param) {
if (!array_key_exists($param, $post)) {
$result['msg'] = 'Required Param Missing';
goto skip;
}
}
$model = Order::findOne(['order_key' => $post['id']]);
if ($model === null) {
$result['msg'] = 'Unable to find the Order Details';
goto skip;
} else {
$model->payment_status = $post['status'];
$model->save(false);
}
$result['msg'] = 'Payment Status Changed Successfully';
$result['status'] = STATUS_SUCCESS;
skip:
return $this->asJson($result);
}
/**
* @return array|bool|mixed|null|string
*/
private function getCartItems()
{
$cartItems = [];
if (Com::isSession('cart')) {
$cartItems = Com::session('cart');
}
if ($cartItems === false || $cartItems === null || $cartItems === '') {
$cartItems = [];
}
return $cartItems;
}
/**
*
* @param string $branch
* @param float $latitude
* @param float $longitude
* @param int $orderType
* @return array
*/
public function actionHasDeliveryTimeSlot()
{
$post = Yii::$app->getRequest()->post();
$param = 'id';
$result = ['status' => STATUS_FAIL, 'msg' => ''];
if (!array_key_exists($param, $post)) {
$result['msg'] = 'Required Param Missing';
goto skip;
}
$model = Branch::findOne(['branch_id' => $post['id']]);
if ($model == null) {
$result['msg'] = 'Unable to find Branch Details';
goto skip;
} else {
$modelBranchTimeSlot = BranchTimeslot::find()
->alias('BT')
->innerJoin(['B' => Branch::tableName()], 'B.branch_id = BT.branch_id')
->where([
'B.branch_id' => $post['id'],
'BT.branch_timeslot_status' => BranchTimeslot::ACTIVE,
'BT.timeslot_type' => BranchTimeslot::ORDER_TYPE_DELIVERY,
'BT.day_id' => (date('w') + 1)
])
->all();
}
if ($modelBranchTimeSlot == null) {
$result['msg'] = 'This Branch has no timeslot for delivery choose another branch';
goto skip;
}
Com::unsetSession('cart');
$result['status'] = STATUS_SUCCESS;
skip:
return $this->asJson($result);
}
// public function actionDeliveryAreaCheck()
// {
// $post = Yii::$app->getRequest()->post();
// $params = ['lat', 'lng', 'id'];
// $result = ['status' => STATUS_FAIL, 'msg' => ''];
//
// foreach ($params as $param) {
// if (!array_key_exists($param, $post)) {
// $result['msg'] = 'Required Param Missing';
// goto skip;
// }
// }
//
// $modelBranchDeliveryArea = BranchDeliveryArea::find()
// ->alias('BDA')
// ->select([
// 'BDA.delivery_area_id',
// 'BDA.branch_id',
// 'DA.delivery_area_id',
// 'DA.delivery_area_data',
// 'DA.delivery_area_type',
// 'DA.delivery_area_radius',
// 'B.*'
// ])
// ->innerJoin(['DA' => DeliveryArea::tableName()],'DA.delivery_area_id = BDA.delivery_area_id')
// ->leftJoin(['B' => Branch::tableName()],'B.branch_id = BDA.branch_id')
// ->where([
// 'B.branch_status' => Branch::ACTIVE,
// 'B.branch_availability_status' => Branch::BRANCH_AVAILABILITY_STATUS_OPEN,
// 'B.branch_id' => $post['id']
// ])
// ->asArray()
// ->all();
//
// if ($modelBranchDeliveryArea == null) {
// $result['msg'] = 'Branch is not opened and it is inactive';
// goto skip;
// }
//
// $deliveryBranches = [];
// foreach ($modelBranchDeliveryArea as $deliveryArea) {
// $shapeJson = json_decode($deliveryArea['delivery_area_data']);
//
// $geoMetricHelper = GeoMetricHelper::getInstance()
// ->setPoint($post['lat'],$post['lng']);
//
// if($deliveryArea['delivery_area_type'] == DeliveryArea::DELIVERY_AREA_TYPE_CIRCLE) {
//
// list($lat, $lon) = $shapeJson;
//
// $geoMetricHelper->setShapeType($geoMetricHelper::SHAPE_TYPE_CIRCLE)
// ->setRadius($deliveryArea['delivery_area_radius'])
// ->setCenterPoint($lat,$lon);
//
// } else {
// $geoMetricHelper->setShapeType($geoMetricHelper::SHAPE_TYPE_POLYGON)
// ->setShapePoints($shapeJson);
// }
//
// if ($geoMetricHelper->isPointInsideGeoMetric()) {
// $deliveryBranches = $deliveryArea['branch_id'];
// }
// }
//
// if (empty($deliveryBranches)) {
// $result['msg'] = 'Order is placed out of Delivery Area';
// goto skip;
// }
//
// $result['status'] = STATUS_SUCCESS;
// skip:
//
// return $this->asJson($result);
// }
/**
* @return Json
*
* @Title('Pick Up Date Time Check')
*/
public function actionPickupDateTimeCheck()
{
$post = Yii::$app->getRequest()->post();
$params = ['date_time', 'branch_id', 'order_date_time'];
$result = ['status' => STATUS_FAIL, 'msg' => ''];
foreach ($params as $param) {
if (!array_key_exists($param, $post)) {
$result['msg'] = 'Required Param Missing';
goto skip;
}
}
$model = Branch::findOne(['branch_id' => $post['branch_id']]);
if ($model == null) {
$result['msg'] = 'Unable to find Branch Details';
goto skip;
}
$modelBranchTimeSlot = BranchTimeslot::find()
->alias('BT')
->select([
'BT.timeslot_start_time',
'BT.timeslot_end_time'
])
->innerJoin(['B' => Branch::tableName()], 'B.branch_id = BT.branch_id')
->where(['BT.branch_id' => $post['branch_id']])
->andWhere(['BT.branch_timeslot_status' => BranchTimeslot::ACTIVE])
->andWhere(['BT.timeslot_type' => BranchTimeslot::TIMESLOT_PICKUP])
->one();
if ($modelBranchTimeSlot == null) {
$result['msg'] = 'Branch has no pickup hours';
goto skip;
}
$pickupTime = date('H:i', strtotime($post['date_time']));
$branchStartTime = date('H:i', strtotime($modelBranchTimeSlot->timeslot_start_time));
$branchEndTime = date('H:i', strtotime($modelBranchTimeSlot->timeslot_end_time));
$orderDateTime = $post['order_date_time'];
if ($pickupTime <= $branchStartTime) {
$result['msg'] = 'Pickup time is too early than branch open time';
goto skip;
} else if ($pickupTime >= $branchEndTime) {
$result['msg'] = 'Pickup time is too late than branch closing time';
goto skip;
} else if ($pickupTime <= $orderDateTime) {
$result['msg'] = 'Pickup Time should be greater than Order Time';
goto skip;
}
$result['status'] = STATUS_SUCCESS;
skip:
return $this->asJson($result);
}
/**
* @return Json
*
* @Title("Track")
*/
public function actionTrack()
{
$params = ['id'];
$post = Yii::$app->getRequest()->post();
$result = ['status' => STATUS_FAIL, 'msg' => '', 'count' => 0, 'locations' => '[]'];
foreach ($params as $param) {
if (!array_key_exists($param, $post)) {
$result['msg'] = Yii::t('backend', 'Required param missing');
goto skip;
}
}
$model = Order::find()->where(['order_key' => $post['id']])->asArray()->one();
$deliveryBoyData = '';
if (!empty($model['deliveryboy_id'])) {
$responseData = Com::getJsonData('GET', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "driver/" . $model['deliveryboy_id'] . "?company_id=" . Configuration::get(Configuration::COMPANY_KEY), [], 0);
$responseDataFull = Com::getJsonData('GET', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "driver/company?company_id=" . Configuration::get(Configuration::COMPANY_KEY), [], 0);
if (isset($responseDataFull->data)) {
foreach ($responseDataFull->data as $responseDataFullvalue) {
if ($responseDataFullvalue->_id == $model['deliveryboy_id']) {
$delivery_boy_latitude = $responseDataFullvalue->location->coordinates[1];
$delivery_boy_longitude = $responseDataFullvalue->location->coordinates[0];
$delivery_boy_id = $responseDataFullvalue->_id;
$delivery_boy_name = $responseDataFullvalue->name;
$delivery_boy_email = $responseDataFullvalue->email;
$delivery_boy_phone_number = $responseDataFullvalue->phone_number;
}
}
} else {
$delivery_boy_latitude = 102.2459546;
$delivery_boy_longitude = 2.2519751;
}
if (isset($delivery_boy_id)) {
$deliveryBoyData = [
'latitude' => $delivery_boy_latitude,
'longitude' => $delivery_boy_longitude,
'deliveryboy_id' => $delivery_boy_id,
'deliveryboy_name' => $delivery_boy_name,
'deliveryboy_email' => $delivery_boy_email,
'mobile_number' => $delivery_boy_phone_number,
];
}
} else {
$deliveryBoyData = [
'latitude' => 102.2459546,
'longitude' => 2.2519751,
'deliveryboy_id' => '',
'deliveryboy_name' => '',
'deliveryboy_email' => '',
'mobile_number' => '',
];
}
if ($deliveryBoyData == null || $deliveryBoyData == '') {
$deliveryBoyData = [
'latitude' => 102.2459546,
'longitude' => 2.2519751,
'deliveryboy_id' => '',
'deliveryboy_name' => '',
'deliveryboy_email' => '',
'mobile_number' => '',
];
}
$result['deliveryBoyData'] = Json::encode($deliveryBoyData);
if ($deliveryBoyData === null) {
$result['msg'] = Yii::t('backend', 'Server is down! Please try again some other time!');
goto skip;
} else if (isset($deliveryBoyData->errors) && !empty($deliveryBoyData->errors)) {
$result['msg'] = Yii::t('backend', $deliveryBoyData->errors[0]->message);
goto skip;
}
$outputData = [];
if (isset($deliveryBoyData['deliveryboy_id'])) {
$dataValue = $deliveryBoyData['deliveryboy_id'];
if ($dataValue !== null) {
$outputData[] = [
1 => ($deliveryBoyData['latitude'] != '') ? $deliveryBoyData['latitude'] : '',
2 => ($deliveryBoyData['longitude'] != '') ? $deliveryBoyData['longitude'] : '',
3 => (isset($deliveryBoyData['deliveryboy_name'])) ? $deliveryBoyData['deliveryboy_name'] : '',
4 => (isset($deliveryBoyData['deliveryboy_id'])) ? $deliveryBoyData['deliveryboy_id'] : '',
5 => (isset($deliveryBoyData['deliveryboy_email'])) ? $deliveryBoyData['deliveryboy_email'] : '',
6 => (isset($deliveryBoyData['mobile_number'])) ? $deliveryBoyData['mobile_number'] : '',
];
}
} else {
$outputData = [];
}
if (count($outputData) > 0) {
$outputData = $this->driverArrayFormation($outputData, $model['order_key']);
}
$result['status'] = STATUS_SUCCESS;
if (
(int)$model['order_status'] === Order::DELIVERY_DELIVERYBOY_ACCEPTED_CONDITION ||
(int)$model['order_status'] === Order::DELIVERY_ONTHEWAY_CONDITION ||
(int)$model['order_status'] === Order::DELIVERY_DELIVERYBOY_ASSIGNED_CONDITION ||
(int)$model['order_status'] === Order::ORDER_STATUS_DELIVERED_TO_RIDER ||
(int)$model['order_status'] === Order::DELIVERY_ACCEPTED_CONDITION
&& count($outputData) > 0
) {
$result['count'] = 1;
$result['locations'] = json_encode($outputData);
}
skip:
return $this->asJson($result);
}
/**
*
* @param type $driver
* @param type $orderKey
* @return array
*/
public function driverArrayFormation($outputData = array(), $orderKey = '')
{
$dataArray = [];
if (count($outputData) > 0) {
$i = 0;
foreach ($outputData as $driverKey => $driverValue) {
$modelOrder = Order::find()
->alias('O')
->select([
'*',
'B.latitude as branch_latitude',
'B.longitude as branch_longitude',
'BL.branch_name',
'UA.latitude as customer_latitude',
'U.mobile_number as customer_mobile_number',
'CONCAT(U.first_name, U.last_name) as customer_name',
'UA.longitude as customer_longitude'
])
->leftJoin(['B' => Branch::tableName()], 'B.branch_id = O.branch_id')
->leftJoin(['BL' => BranchLang::tableName()], 'BL.branch_id = B.branch_id')
->leftJoin(['U' => User::tableName()], 'U.user_id = O.user_id')
->leftJoin(['UA' => UserAddress::tableName()], 'UA.user_id = U.user_id')
->where(['O.order_key' => $orderKey])
->asArray()
->one();
/* for branch data alter */
$dataArray[$i][1] = $modelOrder['branch_latitude'];
$dataArray[$i][2] = $modelOrder['branch_longitude'];
$dataArray[$i]['type'] = 2;
$dataArray[$i]['name'] = '';
$dataArray[$i]['no'] = '';
$dataArray[$i]['order_no'] = '';
if (count($modelOrder) > 0) {
$dataArray[$i][1] = $modelOrder['branch_latitude'];
$dataArray[$i][2] = $modelOrder['branch_longitude'];
$dataArray[$i]['name'] = $modelOrder['branch_name'];
$dataArray[$i]['order_no'] = $modelOrder['order_key'];
}
$i++;
/* for Customer data alter */
$dataArray[$i][1] = $modelOrder['customer_latitude'];
$dataArray[$i][2] = $modelOrder['customer_longitude'];
$dataArray[$i]['type'] = 1;
$dataArray[$i]['name'] = '';
$dataArray[$i]['no'] = '';
$dataArray[$i]['order_no'] = '';
if (count($modelOrder) > 0) {
$dataArray[$i]['name'] = $modelOrder['customer_name'];
$dataArray[$i]['no'] = $modelOrder['customer_mobile_number'];
$dataArray[$i]['order_no'] = $modelOrder['order_key'];
}
$i++;
/* for driver data alter */
$dataArray[$i][1] = $driverValue[1];
$dataArray[$i][2] = $driverValue[2];
$dataArray[$i]['type'] = 3;
$dataArray[$i]['name'] = '';
$dataArray[$i]['order_no'] = '';
if (count($modelOrder) > 0) {
$dataArray[$i]['name'] = $driverValue[3];
$dataArray[$i]['order_no'] = $modelOrder['order_key'];
}
}
return $dataArray;
}
return $dataArray;
}
/**
* @return Json
*/
public function actionDriverLatLong()
{
$params = ['id'];
$post = Yii::$app->getRequest()->post();
$result = ['status' => STATUS_FAIL, 'msg' => '', 'count' => 0, 'locations' => '[]'];
foreach ($params as $param) {
if (!array_key_exists($param, $post)) {
$result['msg'] = Yii::t('backend', 'Required param missing');
goto skip;
}
}
$model = Order::find()->where(['order_key' => $post['id']])->asArray()->one();
if (!empty($model['deliveryboy_id'])) {
$responseData = Com::getJsonData('GET', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "driver/" . $model['deliveryboy_id'] . "?company_id=" . Configuration::get(Configuration::COMPANY_KEY), [], 0);
$responseDataFull = Com::getJsonData('GET', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "driver/company?company_id=" . Configuration::get(Configuration::COMPANY_KEY), [], 0);
if (isset($responseDataFull->data) && isset($responseData->data)) {
foreach ($responseDataFull->data as $responseDataFullvalue) {
if ($responseDataFullvalue->_id == $responseData->data->_id) {
$delivery_boy_latitude = $responseDataFullvalue->location->coordinates[1];
$delivery_boy_longitude = $responseDataFullvalue->location->coordinates[0];
}
}
}
if (isset($responseData->data)) {
$deliveryBoyData = [
'latitude' => $delivery_boy_latitude,
'longitude' => $delivery_boy_longitude,
'deliveryboy_id' => $responseData->data->_id,
'deliveryboy_name' => $responseData->data->name,
'deliveryboy_email' => $responseData->data->email,
'mobile_number' => $responseData->data->phone_number,
];
}
} else {
$deliveryBoyData = [
'latitude' => 11.021805918561210,
'longitude' => 76.91577411880496,
'deliveryboy_id' => '',
'deliveryboy_name' => '',
'deliveryboy_email' => '',
'mobile_number' => '',
];
}
$result['deliveryBoyData'] = Json::encode($deliveryBoyData);
if ($deliveryBoyData === null) {
$result['msg'] = Yii::t('backend', 'Server is down! Please try again some other time!');
goto skip;
} else if (isset($deliveryBoyData->errors) && !empty($deliveryBoyData->errors)) {
$result['msg'] = Yii::t('backend', $deliveryBoyData->errors[0]->message);
goto skip;
}
$outputData = [];
if (isset($deliveryBoyData['deliveryboy_id'])) {
$dataValue = $deliveryBoyData['deliveryboy_id'];
if ($dataValue !== null) {
$outputData[] = [
1 => ($deliveryBoyData['latitude'] != '') ? $deliveryBoyData['latitude'] : '',
2 => ($deliveryBoyData['longitude'] != '') ? $deliveryBoyData['longitude'] : '',
3 => (isset($deliveryBoyData['deliveryboy_name'])) ? $deliveryBoyData['deliveryboy_name'] : '',
4 => (isset($deliveryBoyData['deliveryboy_id'])) ? $deliveryBoyData['deliveryboy_id'] : '',
5 => (isset($deliveryBoyData['deliveryboy_email'])) ? $deliveryBoyData['deliveryboy_email'] : '',
6 => (isset($deliveryBoyData['mobile_number'])) ? $deliveryBoyData['mobile_number'] : '',
];
}
} else {
$outputData = [];
}
if (count($outputData) > 0) {
$outputData = $this->driverArrayFormation($outputData, $model['order_key']);
}
$result['status'] = STATUS_SUCCESS;
if (count($outputData) > 0) {
$result['count'] = 1;
$result['locations'] = json_encode($outputData);
}
skip:
return $this->asJson($result);
}
/**
*
* @param type $id
* @return string
*
* @Title("Print")
*/
public function actionPrint($id)
{
$this->layout = 'print';
$model = Order::find()->where(['order_key' => $id])->one();
return $this->render(
'quick-view',
['resposeArray' => $model->toArray()]
);
}
/**
* @return Json
*
* @Title("Save")
*/
public function actionSave()
{
$model = new Order();
$modelUser = new User();
$modelUserAddress = new UserAddress();
$modelUserAddressLang = new UserAddressLang();
$modelVendor = new Vendor();
$modelCity = new City();
$modelBranch = new Branch();
$post = Yii::$app->getRequest()->post();
if ($model->load($post) && $model->validate()) {
$result = ['status' => STATUS_FAIL, 'msg' => ''];
$params = ['latitude', 'longitude'];
$branch_id = 'branch_id';
foreach ($params as $param) {
if (!array_key_exists($param, $post['UserAddress'])) {
$result['msg'] = 'Required Param Missing';
goto skip;
}
}
if (!array_key_exists($branch_id, $post['Order'])) {
$result['msg'] = 'Required Param Missing';
goto skip;
}
$modelBranchDeliveryArea = BranchDeliveryArea::find()
->alias('BDA')
->select([
'BDA.delivery_area_id',
'BDA.branch_id',
'DA.delivery_area_id',
'DA.delivery_area_data',
'DA.delivery_area_type',
'DA.delivery_area_radius',
'B.*'
])
->innerJoin(['DA' => DeliveryArea::tableName()], 'DA.delivery_area_id = BDA.delivery_area_id')
->leftJoin(['B' => Branch::tableName()], 'B.branch_id = BDA.branch_id')
->where([
'B.branch_status' => Branch::ACTIVE,
'B.branch_availability_status' => Branch::BRANCH_AVAILABILITY_STATUS_OPEN,
'B.branch_id' => $post['Order']['branch_id']
])
->asArray()
->all();
if ($modelBranchDeliveryArea == null) {
$result['msg'] = 'Branch is not opened and it is inactive';
goto skip;
}
$deliveryBranches = [];
foreach ($modelBranchDeliveryArea as $deliveryArea) {
$shapeJson = json_decode($deliveryArea['delivery_area_data']);
$geoMetricHelper = GeoMetricHelper::getInstance()
->setPoint($post['UserAddress']['latitude'], $post['UserAddress']['longitude']);
if ($deliveryArea['delivery_area_type'] == DeliveryArea::DELIVERY_AREA_TYPE_CIRCLE) {
list($lat, $lon) = $shapeJson;
$geoMetricHelper->setShapeType($geoMetricHelper::SHAPE_TYPE_CIRCLE)
->setRadius($deliveryArea['delivery_area_radius'])
->setCenterPoint($lat, $lon);
} else {
$geoMetricHelper->setShapeType($geoMetricHelper::SHAPE_TYPE_POLYGON)
->setShapePoints($shapeJson);
}
if ($geoMetricHelper->isPointInsideGeoMetric()) {
$deliveryBranches = $deliveryArea['branch_id'];
}
}
if (empty($deliveryBranches)) {
$result['msg'] = 'Order is placed out of Delivery Area';
goto skip;
}
if ($post['User']['user_detail'] == '') {
$modelUser->first_name = $post['Order']['customer_first_name'];
$modelUser->last_name = $post['Order']['customer_last_name'];
$modelUser->email = $post['Order']['customer_email'];
$modelUser->mobile_number = $post['Order']['customer_mobile_number'];
$modelUser->username = $post['Order']['customer_email'];
$modelUser->status = $modelUser::ACTIVE;
$modelUser->save(false);
}
if ($post['UserAddress']['user_address_detail'] == '') {
$modelUserAddress->load($post);
$modelUserAddressLang->load($post);
$modelUserAddress->user_id = $modelUser->user_id;
$modelUserAddress->address_status = $modelUserAddress::ACTIVE;
$modelUserAddress->save(false);
$modelUserAddressLang->user_address_id = $modelUserAddress->user_address_id;
$modelUserAddressLang->language_code = Yii::$app->language;
$modelUserAddressLang->save(false);
$totalOrders = ((int)Order::find()->count()) + 1;
$orderNumber = str_repeat('0', max(0, 7 - strlen($totalOrders))) . $totalOrders;
//$model->order_number = $orderNumber;
$model->user_id = $modelUser->user_id;
$model->user_address_id = $modelUserAddress->user_address_id;
$model->order_status = $model::ACTIVE;
$modelBranch = Branch::find()
->select('delivery_charge_base_km')
->where(['branch_id' => $post['Order']['branch_id']])
->one();
$model->delivery_fee = $modelBranch->delivery_charge_base_km;
$model->latitude = $post['UserAddress']['latitude'];
$model->longitude = $post['UserAddress']['longitude'];
$model->save(false);
} else {
$totalOrders = ((int)Order::find()->count()) + 1;
$orderNumber = str_repeat('0', max(0, 7 - strlen($totalOrders))) . $totalOrders;
//$model->order_number = $orderNumber;
$model->user_id = $post['User']['user_detail'];
$model->user_address_id = $post['UserAddress']['user_address_detail'];
$model->order_status = $model::ACTIVE;
$modelBranch = Branch::find()
->select('delivery_charge_base_km')
->where(['branch_id' => $post['Order']['branch_id']])
->one();
$model->delivery_fee = $modelBranch->delivery_charge_base_km;
$model->latitude = $post['UserAddress']['latitude'];
$model->longitude = $post['UserAddress']['longitude'];
$model->save(false);
}
$cartData = Com::session('cart');
if (empty($cartData)) {
$result['msg'] = 'Session expired Please try again';
goto skip;
}
$tax = 0;
foreach ($cartData as $key => $value) {
$modelOrderItem = new OrderItem();
$itemData = Item::find()
->alias('I')
->select([
'IL.item_name',
'I.item_price',
])
->leftJoin(['IL' => ItemLang::tableName()], 'IL.item_id = I.item_id')
->where(['I.item_key' => $value['item_key']])
->one();
$modelOrderItem->order_id = $model->order_id;
$modelOrderItem->item_price = $itemData->item_price;
$modelOrderItem->item_total_price = $value['total'];
$modelOrderItem->item_id = $value['item_id'];
$modelOrderItem->quantity = $value['quantity'];
$modelOrderItem->ingredients_total_price = $value['ingredient_total'];
$modelOrderItem->total_price = $modelOrderItem->item_total_price + $modelOrderItem->ingredients_total_price;
$modelOrderItem->save();
$modelOrderItemLang = new OrderItemLang();
$modelOrderItemLang->order_item_id = $modelOrderItem->order_item_id;
$modelOrderItemLang->language_code = Yii::$app->language;
$modelOrderItemLang->item_name = $itemData->item_name;
$modelOrderItemLang->save();
$orderModel = Order::find()->where(['order_id' => $model->order_id])->one();
$tax += $value['tax'];
$orderModel->tax = $tax;
$orderModel->item_total = $value['total'];
$orderModel->order_total = $value['total'] + $orderModel->delivery_fee + $tax;
$orderModel->save(false);
$modelOrderItemImage = new OrderItemImage();
$modelOrderItemImage->order_item_id = $modelOrderItem->order_item_id;
$modelOrderItemImage->language_code = Yii::$app->language;
$itemImage = ItemImage::find()
->select(['item_image_path'])
->where(['Item_id' => $modelOrderItem->item_id])
->one();
$modelOrderItemImage->item_image_path = $itemImage->item_image_path;
$modelOrderItemImage->save();
foreach ($value['ingredients'] as $key => $value) {
$modelOrderIngGroup = new OrderItemIngredientGroup();
$ingGroupData = ItemIngredientGroup::find()
->alias('IIG')
->select([
'IIG.ingredient_type',
'IIG.minimum',
'IIG.maximum',
'IIGL.group_name'
])
->leftJoin(['IIGL' => ItemIngredientGroupLang::tableName()], 'IIGL.item_ingredient_group_id = IIG.item_ingredient_group_id')
->where(['IIG.item_ingredient_group_key' => $value['group_key']])
->one();
$modelOrderIngGroup->order_item_id = $modelOrderItem->order_item_id;
$modelOrderIngGroup->ingredient_type = $ingGroupData->ingredient_type;
$modelOrderIngGroup->maximum = $ingGroupData->maximum;
$modelOrderIngGroup->minimum = $ingGroupData->minimum;
$modelOrderIngGroup->save();
$modelOrderIngGroupLang = new OrderItemIngredientGroupLang();
$modelOrderIngGroupLang->order_item_ingredient_group_id = $modelOrderIngGroup->order_item_ingredient_group_id;
$modelOrderIngGroupLang->group_name = $ingGroupData->group_name;
$modelOrderIngGroupLang->language_code = Yii::$app->language;
$modelOrderIngGroupLang->save();
$ingId = Ingredient::find()
->select([
'ingredient_id',
])
->where(['ingredient_key' => $value['ingredient_key']])
->one();
$modelOrderIngMapping = new OrderItemIngredientMapping();
$modelOrderIngMapping->order_item_ingredient_group_id = $modelOrderIngGroup->order_item_ingredient_group_id;
$modelOrderIngMapping->ingredient_id = $ingId->ingredient_id;
$modelOrderIngMapping->price = $value['price'];
$modelOrderIngMapping->save();
$modelOrderIngMappingLang = new OrderItemIngredientMappingLang();
$modelOrderIngMappingLang->order_item_ingredient_mapping_id = $modelOrderIngMapping->order_item_ingredient_mapping_id;
$modelOrderIngMappingLang->language_code = Yii::$app->language;
$modelOrderIngMappingLang->ingredient_name = $value['ingredient_name'];
$modelOrderIngMappingLang->save();
}
}
$result['status'] = STATUS_SUCCESS;
$result['msg'] = 'Created Successfully';
skip:
return $this->asJson($result);
}
}
public function saveDataOnDeliveryBoy($order_key)
{
$requestData = [];
$orderModel = Order::findOne(['order_key' => $order_key]);
$branchModel = Branch::findOne(['branch_id' => $orderModel->branch_id]);
$userAddress = UserAddress::findOne(['user_address_id' => $orderModel->user_address_id]);
if ($orderModel == null) {
return false;
}
$requestData['order_number'] = $orderModel->order_number;
$requestData['order_key'] = $orderModel->order_key;
$requestData['vendor_key'] = "";
$requestData['zipcode'] = '';
$requestData['payment_mode'] = $orderModel->payment_option;
$requestData['amount'] = $orderModel->order_total;
$requestData['order_time'] = $orderModel->order_date_time;
$requestData['delivery_time'] = $orderModel->pickup_delivery_date_time;
$requestData['delivery_type'] = $orderModel->delivery_option;
$requestData['delivery_fee'] = $orderModel->delivery_fee;
$requestData['order_status'] = $orderModel->order_status;
$requestData['location']['latitude'] = $orderModel->latitude;
$requestData['location']['longitude'] = $orderModel->longitude;
$requestData['customer_email'] = $orderModel->customer_email;
$requestData['vendor_location']['latitude'] = $branchModel->latitude;
$requestData['vendor_location']['longitude'] = $branchModel->longitude;
$languages = Language::getAppLanguages();
$requestData['order_details'] = [];
$i = 0;
foreach ($languages as $lang_code => $language) {
$requestData['order_details'][$i]['lang'] = $lang_code;
$requestData['vendor_details'][$i]['lang'] = $lang_code;
$vendorDetails = Branch::find()->select(['B.*', 'VL.vendor_name', 'BL.city', 'BL.area', 'BL.branch_address_line1', 'BL.branch_address_line2', 'BL.country'])
->alias('B')
->leftJoin(['BL' => BranchLang::tableName()], 'B.branch_id = BL.branch_id')
->leftJoin(['VL' => VendorLang::tableName()], 'B.vendor_id = VL.vendor_id')
->where(['B.branch_id' => $orderModel->branch_id, 'BL.language_code' => $lang_code, 'VL.language_code' => $lang_code])
->asArray()->one();
$requestData['vendor_details'][$i]['details']['vendor_name'] = ($vendorDetails['vendor_name']) ? $vendorDetails['vendor_name'] : '';
$requestData['vendor_details'][$i]['details']['vendor_address'] = (($vendorDetails['branch_address_line1']) ? $vendorDetails['branch_address_line1'] : '') . (($vendorDetails['branch_address_line2']) ? $vendorDetails['branch_address_line2'] : '');
$requestData['vendor_details'][$i]['details']['vendor_city'] = ($vendorDetails['city']) ? $vendorDetails['city'] : '';
$requestData['vendor_details'][$i]['details']['vendor_area'] = ($vendorDetails['area']) ? $vendorDetails['area'] : '';
$requestData['vendor_details'][$i]['details']['vendor_country'] = ($vendorDetails['country']) ? $vendorDetails['country'] : '';
$requestData['vendor_details'][$i]['details']['vendor_mobile'] = ($vendorDetails['contact_number']) ? $vendorDetails['contact_number'] : '';
$requestData['order_details'][$i]['details']['customer_name'] = (string)$orderModel->customer_first_name . ' ' . $orderModel->customer_last_name;
$requestData['order_details'][$i]['details']['customer_mobile'] = (string)$orderModel->customer_mobile_number;
$requestData['order_details'][$i]['details']['address'] = (string)$userAddress->flat_no . ' ' . $userAddress->apartment;
$requestData['order_details'][$i]['details']['city'] = (string)$userAddress->city;
$requestData['order_details'][$i]['details']['country'] = ($vendorDetails['country']) ? $vendorDetails['country'] : '';
$requestData['order_details'][$i]['details']['landmark'] = (string)$userAddress->landmark;
$requestData['order_details'][$i]['details']['bulk_items'] = '';
$requestData['order_details'][$i]['details']['customer_image'] = '';
$requestData['order_details'][$i]['details']['items'] = [];
$items = OrderItem::find()->select(['I.item_id', 'I.item_price', 'I.quantity', 'IL.item_name'])->alias('I')
->leftJoin(['IL' => ItemLang::tableName()], 'I.item_id = IL.item_id')
->where([
'I.order_id' => $orderModel->order_id,
'language_code' => $lang_code
])->all();
$itemArray = [];
$itemCount = 0;
if ($items != null) {
foreach ($items as $item) {
$item_quantity = $item->quantity;
$itemArray[$itemCount]['name'] = $item->item_name;
$itemArray[$itemCount]['price'] = $item->item_price;
$itemArray[$itemCount]['quantity'] = $item_quantity;
$ingredients = [];
$ingrdients = OrderItemIngredientMapping::find()
->select(['IL.ingredient_name', 'OIIM.price', 'OIIM.order_item_ingredient_group_id'])
->alias('OIIM')
->leftJoin(['OIIG' => OrderItemIngredientGroup::tableName()], 'OIIM.order_item_ingredient_group_id = OIIG.order_item_ingredient_group_id')
->leftJoin(['IL' => IngredientLang::tableName()], 'OIIM.ingredient_id = IL.ingredient_id')
->where(['OIIG.order_item_id' => $item->order_item_id])
->andWhere(['IL.language_code' => $lang_code])
->asArray()
->all();
if ($ingrdients != null) {
$j = 0;
foreach ($ingrdients as $ingredient) {
$ingredients[$j]['name'] = $ingredient['ingredient_name'];
$ingredients[$j]['price'] = $ingrdientsQuery['price'];
$ingredients[$j]['type'] = $ingrdientsQuery['order_item_ingredient_group_id'];
$j++;
}
}
$itemArray[$itemCount]['ingredients'] = $ingredients;
$itemCount++;
}
}
$requestData['order_details'][$i]['details']['items'] = $itemArray;
$i++;
}
$requestData['order_assign_type'] = Order::MANUAL_ASSIGN;
$responseData = Com::getJsonData('POST', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "order/create?company_id=" . Configuration::get(Configuration::COMPANY_KEY), $requestData, 1);
/* set flash for sever down */
if ((isset($responseData) && $responseData->status == 200)) {
return true;
}
return false;
}
public function actionTest()
{
$oneSignal = OneSignal::getInstance();
$oneSignal->setAppId(Configuration::get(Configuration::PUSH_NOTIFICATION_APP_ID));
$oneSignal->setRestApiKey(Configuration::get(Configuration::PUSH_NOTIFICATION_REST_API_KEY));
$oneSignal->setIcon('http://online.kitokey.com/frontend/web/theme/images/notification.png');
$oneSignal->push(
['en' => 'msg test'],
['en' => 'Test msg'],
['21f13491-b37c-406d-a6de-f14c6751a6b0', '5d5f5362-b60c-482c-849d-b786171bd4b9'],
['status' => 'Message Sent Successfully', 'order_key' => 'sdfsdfdfsf']
);
print_r($oneSignal);
die;
}
public function actionGridStatusButton($id)
{
$modelOrder = Order::find()->where(['order_key' => $id])->one();
$statusButton = (new Order())->getOrderStatus('', $modelOrder->order_status, $modelOrder->order_type);
$option = "";
// $option .= Html::a(Yii::t('backend', 'Delete'), 'javascript:void(0)', [
// 'class' => 'btn btn-danger order_status_btn',
// 'id' => 'delete',
// 'style' => 'float:right;',
// 'status' => Order::ORDER_STATUS_IS_DELETE,
// ]);
foreach ($statusButton as $key => $button) {
if ($key != $modelOrder->order_status) {
$option .= Html::a(Yii::t('backend', $button), 'javascript:void(0)', [
'class' => 'btn btn-success order_status_btn',
'id' => 'confirm' . $key,
'style' => 'float:right;',
'status' => $key,
]);
}
}
return $this->asJson(['button' => $option]);
}
/**
*
* @return Json
*/
public function actionChangeStatus()
{
$post = Yii::$app->request->post();
$result = ['status' => STATUS_FAIL, 'msg' => ''];
foreach ($post['keylist'] as $key) {
$model = Order::findOne(['order_key' => $key]);
$modelVendor = Vendor::findOne(['vendor_id' => $model->vendor_id]);
if ($model === null) {
$result['msg'] = 'Unable to find the Order Details';
goto skip;
} else {
if ($post['status'] == Order::DELIVERY_REJECTED_CONDITION) {
$result['msg'] = 'Reject send';
$result['status'] = Order::DELIVERY_REJECTED_CONDITION;
$result['order_key'] = $key;
goto skip;
}
}
if ($model->order_type == Order::ORDER_TYPE_DELIVERY) {
if ($post['status'] == Order::ORDER_STATUS_ACCEPTED) {
$requestData = [];
$requestData['vendor_location'] = [
'latitude' => $modelVendor->vendor_latitude,
'longitude' => $modelVendor->vendor_longitude,
];
$responseData = Com::getJsonData('PUT', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "order/" . $model->order_key . "/" . $post['status'] . "?company_id=" . Configuration::get(Configuration::COMPANY_KEY), $requestData, 1);
} else {
if ($post['status'] == Order::ORDER_STATUS_DELIVERED_TO_RIDER) {
$post['status'] = Order::ORDER_STATUS_READY_TO_PICKUP;
}
$responseData = Com::getJsonData('PUT', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "order/" . $model->order_key . "/" . $post['status'] . "?company_id=" . Configuration::get(Configuration::COMPANY_KEY), [], 0);
}
} else {
$userDeviceToken = User::find()
->select('device_token')
->where(['user_id' => $model->user_id])
->andWhere(['not', ['device_token' => null]])
->one();
if ($post['status'] == Order::ORDER_STATUS_PENDING || $post['status'] == Order::ORDER_STATUS_ACCEPTED || $post['status'] == Order::ORDER_STATUS_PREPARED || $post['status'] == Order::ORDER_STATUS_READY_TO_PICKUP || $post['status'] == Order::ORDER_STATUS_ONTHEWAY || $post['status'] == Order::ORDER_STATUS_DELIVERED || $post['status'] == Order::ORDER_STATUS_REJECTED) {
$token = $userDeviceToken != null ? trim($userDeviceToken->device_token) : '';
try {
$oneSignal = OneSignal::getInstance();
$oneSignal->setAppId(Configuration::get(Configuration::PUSH_NOTIFICATION_APP_ID));
$oneSignal->setRestApiKey(Configuration::get(Configuration::PUSH_NOTIFICATION_REST_API_KEY));
$oneSignal->setIcon('http://online.kitokey.com/frontend/web/theme/images/notification.png');
$oneSignal->push(
['en' => 'Order status'],
['en' => 'Your Order ' . '#' . $model->order_number . ' has been ' . $model->getOrderStatusLabelCustom($post['status'])],
[$token],
['status' => 'Message Sent Successfully']
);
} catch (Exception $e) {
$result['msg'] = $e->getMessage();
//echo $e->getMessage();
}
}
}
$model->order_status = $post['status'];
$model->save(false);
$result['msg'] = 'Order Status Changed Successfully';
$adminUserData = Yii::$app->getUser()->getIdentity();
$adminUserName = $adminUserData->attributes['user_name'];
ActivityLog::log($adminUserName . ' ' . 'order ' . $model->order_number . ' status changed to ' . $model->getOrderStatusLabelCustom($post['status']));
}
$result['status'] = STATUS_SUCCESS;
skip:
return $this->asJson($result);
}
public function actionAddDeliveryBoy($order_key)
{
$requestData = [];
$orderModel = Order::findOne(['order_key' => $order_key]);
$branchModel = Branch::findOne(['branch_id' => $orderModel->branch_id]);
//$userAddress = UserAddress::getUseraddress($orderModel->user_address_id);
$userAddress = UserAddress::getUseraddress($orderModel->user_address_id, false);
if ($orderModel == null) {
return false;
}
$requestData['order_number'] = $orderModel->order_number;
$requestData['order_key'] = $orderModel->order_key;
$requestData['vendor_key'] = "";
$requestData['zipcode'] = '';
$requestData['payment_mode'] = $orderModel->payment_option;
$requestData['order_message'] = ($orderModel->order_message) ? $orderModel->order_message : "";
$requestData['amount'] = $orderModel->order_total;
$requestData['order_time'] = $orderModel->order_date_time;
$requestData['delivery_time'] = $orderModel->pickup_delivery_date_time;
$requestData['delivery_type'] = $orderModel->delivery_option;
$requestData['delivery_fee'] = $orderModel->delivery_fee;
$requestData['order_status'] = $orderModel->order_status;
$requestData['location']['latitude'] = $orderModel->latitude;
$requestData['location']['longitude'] = $orderModel->longitude;
$requestData['customer_email'] = $orderModel->customer_email;
$requestData['vendor_location']['latitude'] = $branchModel->latitude;
$requestData['vendor_location']['longitude'] = $branchModel->longitude;
// $data = [];
if ($orderModel->item_total > 0) {
$data[] = [
'key' => 'Sub Total',
'value' => (string)$orderModel->item_total,
'sort_number' => 0
];
}
if ($orderModel->package_price > 0) {
$data[] = [
'key' => 'Package Fee',
'value' => (string)$orderModel->package_price,
'sort_number' => 0
];
}
if ($orderModel->vat > 0) {
$data[] = [
'key' => 'GST',
'value' => (string)$orderModel->vat,
'sort_number' => 0
];
}
$data[] = [
'key' => 'Delivery Fee',
'value' => (string)$orderModel->delivery_fee,
'sort_number' => 0
];
if ($orderModel->coupon_offer_value > 0) {
$data[] = [
'key' => 'Coupon Amount(-)',
'value' => (string)$orderModel->coupon_offer_value,
'sort_number' => 0
];
}
if ($orderModel->delivery_boy_tip > 0) {
$data[] = [
'key' => 'Delivery Boy Tip',
'value' => (string)$orderModel->delivery_boy_tip,
'sort_number' => 0
];
}
$data[] = [
'key' => 'Total',
'value' => (string)$orderModel->order_total,
'sort_number' => 0
];
$requestData['pay_details'] = $data;
//print_r($data); die;
$languages = Language::getAppLanguages();
$requestData['order_details'] = [];
$i = 0;
foreach ($languages as $lang_code => $language) {
$requestData['order_details'][$i]['lang'] = $lang_code;
$requestData['vendor_details'][$i]['lang'] = $lang_code;
$vendorDetails = Branch::find()->select(['B.*', 'VL.vendor_name', 'BL.city', 'BL.area', 'BL.branch_address_line1', 'BL.branch_address_line2', 'BL.country'])
->alias('B')
->leftJoin(['BL' => BranchLang::tableName()], 'B.branch_id = BL.branch_id')
->leftJoin(['VL' => VendorLang::tableName()], 'B.vendor_id = VL.vendor_id')
->where(['B.branch_id' => $orderModel->branch_id, 'BL.language_code' => $lang_code, 'VL.language_code' => $lang_code])->asArray()
->one();
$requestData['vendor_details'][$i]['details']['vendor_name'] = ($vendorDetails['vendor_name']) ? $vendorDetails['vendor_name'] : '';
$requestData['vendor_details'][$i]['details']['vendor_address'] = (($vendorDetails['branch_address_line1']) ? $vendorDetails['branch_address_line1'] : '') . (($vendorDetails['branch_address_line2']) ? $vendorDetails['branch_address_line2'] : '');
$requestData['vendor_details'][$i]['details']['vendor_city'] = ($vendorDetails['city']) ? $vendorDetails['city'] : '';
$requestData['vendor_details'][$i]['details']['vendor_area'] = ($vendorDetails['area']) ? $vendorDetails['area'] : '';
$requestData['vendor_details'][$i]['details']['vendor_country'] = ($vendorDetails['country']) ? $vendorDetails['country'] : '';
$requestData['vendor_details'][$i]['details']['vendor_mobile'] = ($vendorDetails['contact_number']) ? $vendorDetails['contact_number'] : '';
$requestData['order_details'][$i]['details']['customer_name'] = (string)$orderModel->customer_first_name . ' ' . $orderModel->customer_last_name;
$requestData['order_details'][$i]['details']['customer_mobile'] = (string)$orderModel->customer_mobile_number;
$requestData['order_details'][$i]['details']['address'] = (string)$userAddress->flat_no . ' ' . $userAddress->apartment;
$requestData['order_details'][$i]['details']['city'] = (string)$userAddress->city;
$requestData['order_details'][$i]['details']['country'] = '';
$requestData['order_details'][$i]['details']['landmark'] = (string)$userAddress->landmark;
$requestData['order_details'][$i]['details']['bulk_items'] = '';
$requestData['order_details'][$i]['details']['customer_image'] = '';
$requestData['order_details'][$i]['details']['items'] = [];
$itemArray = [];
$itemCount = 0;
foreach (OrderItem::find()->where(['order_id' => $orderModel->order_id])->asArray()->all() as $item) {
$item_quantity = $item['quantity'];
if (!empty($item['special_instructions'])) {
$special_instructions = $item['special_instructions'];
} else {
$special_instructions = "";
}
$modelItem = Item::find()->select(['I.item_id', 'I.item_price', 'IL.item_name'])
->alias('I')
->leftJoin(['IL' => ItemLang::tableName()], 'I.item_id = IL.item_id')
->where(['item_key' => $item['item_id'], 'language_code' => $lang_code])->one();
if ($modelItem != null) {
$itemArray[$itemCount]['name'] = $modelItem->item_name;
$itemArray[$itemCount]['price'] = $modelItem->item_price;
$itemArray[$itemCount]['quantity'] = $item_quantity;
$itemArray[$itemCount]['special_instructions'] = $special_instructions;
$ingredients = [];
$j = 0;
foreach ($item['ingrdients'] as $ingredient) {
$ingredient_qty = $item['item_quantity'];
$ingrdientsQuery = ItemIngredientGroup::find()->alias('IIG')
->select(['IIM.item_ingredient_group_id', 'IL.ingredient_name', 'IIM.price'])
->innerJoin(['IIM' => ItemIngredientMapping::tableName()], 'IIM.item_ingredient_group_id = IIG.item_ingredient_group_id')
->innerJoin(['I' => Ingredient::tableName()], 'I.ingredient_id = IIM.ingredient_id')
->leftJoin(['IL' => IngredientLang::tableName()], 'I.ingredient_id = IL.ingredient_id')
->innerJoin(['IMG' => ItemMappingGroup::tableName()], 'IMG.item_ingredient_group_id = IIG.item_ingredient_group_id')
->innerJoin(['IM' => ItemMapping::tableName()], 'IM.item_mapping_id = IMG.item_mapping_id')
->where(['IM.item_id' => $modelItem->item_id, 'IL.language_code' => $lang_code])->andWhere(['in', 'IIG.item_ingredient_group_key', $ingredient['group_key']])->andWhere(['in', 'I.ingredient_key', $ingredient['key']])->asArray()
->one();
$ingredients[$j]['name'] = $ingrdientsQuery['ingredient_name'];
$ingredients[$j]['price'] = $ingrdientsQuery['price'];
$ingredients[$j]['type'] = $ingrdientsQuery['item_ingredient_group_id'];
$j++;
}
$itemArray[$itemCount]['ingredients'] = $ingredients;
$itemCount++;
}
}
$requestData['order_details'][$i]['details']['items'] = $itemArray;
$i++;
}
$requestData['order_assign_type'] = 2;
$responseData = Com::getJsonData('POST', Configuration::get(Configuration::DELIVERY_BOY_ACCESS_URL) . "order/create?company_id=" . Configuration::get(Configuration::COMPANY_KEY), $requestData, 1);
print_r($responseData);
die;
/* set flash for sever down */
if ((isset($responseData) && $responseData->status == 200)) {
return true;
}
return false;
}
public function actionPdf()
{
$post = Yii::$app->getRequest()->post();
$resposeArray = Order::find()
//->where(['order_key' => $post['key']])
->orderBy(['order_id' => SORT_DESC])
->one();
$qr_path = QrHelper::getInstance()->generate($resposeArray['order_date_time'], $resposeArray['order_total'], $resposeArray['vat_cgst']);
$html = $this->renderPartial('mail', [
'model' => $resposeArray->toArray(),
'qr_path' => $qr_path
//'key' => $post['key']
]);
$mpdf = new mPDF(['tempDir' => Yii::getAlias('@approot') . '/uploads/mpdfTemp']);
$mpdf->WriteHTML($html);
$filname = $resposeArray->order_number . ' - ' . Date('Y-m-d-h-i-s');
$uploadHelper = UploadHelper::getInstance();
$uploadHelper->setPath($uploadHelper::ORDER_PDF);
$path = $uploadHelper->getPath();
$file = $mpdf->Output($path . '/' . $filname . '.pdf', 'F');
$path = $uploadHelper->getRealPath($path);
chmod(Yii::getAlias('@approot') . '/' . $path . '/' . $filname . '.pdf', 0775);
die('ki');
// $result['status'] = STATUS_SUCCESS;
// $mailerQueueHelper = MailerQueueHelper::getInstance();
// $mailerQueueHelper->setTo($post['email'])
// ->setSubject('Order #'.$resposeArray->order_number.' Invoice')
// ->setAttach(Yii::getAlias('@approot').'/'.$path.'/'.$filname.'.pdf')
// ->setView('invoice',['order_number' => $resposeArray->order_number])
// ->push();
}
public function actionTestMail()
{
$model = Order::find()->where(['order_id' => 1374])->one();
$model->order_status = Order::ORDER_STATUS_DELIVERED;
$model->save();
}
public function actionTestNotify()
{
$userToken = [
"28e7ca1d-ae78-4f26-a4ea-216594efb89d"
];
$oneSignal = OneSignal::getInstance();
$oneSignal->setAppId(Configuration::get(Configuration::PUSH_NOTIFICATION_APP_ID));
$oneSignal->setRestApiKey(Configuration::get(Configuration::PUSH_NOTIFICATION_REST_API_KEY));
$oneSignal->setIcon('http://online.kitokey.com/frontend/web/theme/images/notification.png');
$oneSignal->push(
['en' => 'Reminder'],
['en' => 'Hi, now it is your water drinking time.. let`s go for drinking'],
$userToken,
['status' => 'Message Sent Successfully']
);
print_r($oneSignal);
die;
}
public function actionDriverDetails()
{
if (isset($_GET['delete'])) {
Com::unsetSession('driver_list', []);
}
$data = Com::session('driver_list');
if (empty($data)) {
$driverDetails = (new \backend\models\DriverOrderSearch)->Driver();
$data = ArrayHelper::map($driverDetails, 'id', 'name');
}
Com::setSession('driver_list', $data);
$option = Html::tag('option', '', ['value' => '']);
foreach ($data as $key => $name) {
$option .= Html::tag('option', $name, ['value' => $key]);
}
return $this->asJson(['status' => 1, 'data' => $option]);
}
public function actionUserList($q = null, $page = 1)
{
$query = User::find()->alias('U')
->select([
'CONCAT(U.first_name," ", IFNULL(U.mobile_number,U.email) ) as text',
'U.user_id as id'
])
//->innerJoin(['O' => Order::tablename()], "O.user_id = U.user_id")
->andwhere(['U.status' => User::ACTIVE])
->where(['like', 'first_name', $q])
->orWhere(['like', 'mobile_number', $q])
->offset(($page - 1) * 20)
->asArray()
->limit(20) // Adjust the limit as necessary
->orderBy(['U.first_name'=>SORT_ASC]) ;
$data = $query->all();
$totalCount = $query->count();
return json_encode(['results' => $data, 'pagination' => ['more' => $totalCount > $page * 20]]);
}
/**
* @return string
* @throws \yii\base\InvalidParamException
*
* @Title("Payment View")
*/
public function actionPaymentView()
{
$params = ['id'];
$post = Yii::$app->getRequest()->post();
$result = ['status' => STATUS_FAIL, 'msg' => ''];
foreach ($params as $param) {
if (!array_key_exists($param, $post)) {
$result['msg'] = Yii::t('backend', 'Required param missing');
goto skip;
}
}
$orderModel = Order::find()
->andWhere(['payment_status' => 1])
->andWhere(['order_key' => $post['id']])
->andWhere(['<>', 'payment_id', '']) // <-- this adds "payment_id <> ''"
->one();
if($orderModel != null) {
$entityId = '';
if($orderModel->payment_option == Order::PAYMENT_OPTION_VISA_MASTER) {
$entityId = Configuration::get(Configuration::MASTER_VISA_ENTITY_ID);
}
if($orderModel->payment_option == Order::PAYMENT_OPTION_MADA) {
$entityId = Configuration::get(Configuration::MADA_ENTITY_ID);
}
if($orderModel->payment_option == Order::PAYMENT_OPTION_STC) {
$entityId = Configuration::get(Configuration::STC_PAY_ENTITY_ID);
}
if($orderModel->payment_option == 6) {
$paymentType = 'APPLEPAY';
$entityId = '8ac9a4ca7c78e3f5017c8e865d7c0449';
}
$url = "https://oppwa.com/v1/checkouts/".$orderModel->payment_id."/payment";
$url .= "?entityId=".$entityId;
//print_r($url); die;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization:Bearer '.Configuration::get(Configuration::PAYMENT_ACCESS_TOKEN)));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// this should be set to true in production
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$responseData = curl_exec($ch);
if(curl_errno($ch)) {
return curl_error($ch);
}
$paymentresult = json_decode($responseData);
if($paymentresult->result->code == "000.000.000") {
$orderModel->payment_status = Order::PAYMENT_STATUS_SUCCESS;
$orderModel->order_date_time = date('Y-m-d H:i:s');
$orderModel->cron_payment_response = json_encode($paymentresult);
$orderModel->save(false);
$result['status'] = STATUS_SUCCESS;
$result['msg'] = json_encode($paymentresult->result->description);
} else {
$orderModel->cron_payment_response = json_encode($paymentresult);
$orderModel->save(false);
$result['msg'] = json_encode($paymentresult->result->description);
}
} else {
$result['msg'] = Yii::t('backend', 'Payment not successful');
}
skip:
return $this->asJson($result);
}
}