function submitCheckOut() { $activeGuestBuying = EnmasseHelper::isGuestBuyingEnable(); $bBuy4friend = JRequest::getVar('buy4friend', 0); $sEmailPt = "/^([0-9a-zA-Z]([-.\\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\\w]*[0-9a-zA-Z]\\.)+[a-zA-Z]{2,9})\$/"; //save user input data into the session if (JRequest::getMethod() == "POST") { $arData = JRequest::get('post'); JFactory::getApplication()->setUserState("com_enmasse.checkout.data", $arData); } //check the permission for checkout action if (JFactory::getUser()->get('guest') && !$activeGuestBuying) { $msg = JText::_("MERCHANT_PLEASE_LOGIN_BEFORE"); $redirectUrl = base64_encode("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}"); $link = JRoute::_("index.php?option=com_users&view=login&return=" . $redirectUrl, false); JFactory::getApplication()->redirect($link, $msg, 'error'); } //validate the cart $cart = unserialize(JFactory::getSession()->get('cart')); CartHelper::checkCart($cart); foreach ($cart->getAll() as $cartItem) { $item = $cartItem->getItem(); } //get enmasse setting $setting = JModel::getInstance('setting', 'enmasseModel')->getSetting(); // check max cart Item $this->checkMaxCartItem($cart); //validate Buyer information $buyerName = JRequest::getVar('name'); $buyerEmail = JRequest::getVar('email'); if (empty($buyerName) || empty($buyerEmail)) { $msg = JText::_("SHOP_CARD_CHECKOUT_BUYER_INFORMATION_REQUIRED_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } elseif (!preg_match($sEmailPt, $buyerEmail)) { $msg = JText::_("SHOP_CARD_CHECKOUT_BUYER_EMAIL_INVALID_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } //----- If the deal permit partial payment, it mean the coupon was delivery by directly, so we need to validate address and phone number of receiver if ($item->prepay_percent < 100) { $receiverAddress = JRequest::getVar('receiver_address'); $receiverPhone = JRequest::getVar('receiver_phone'); if (empty($receiverPhone) || empty($receiverAddress)) { $msg = JText::_("SHOP_CARD_CHECKOUT_RECEIVER_INFORMATION_REQUIRED_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } else { if (!preg_match('/^[0-9 \\.,\\-\\(\\)\\+]*$/', $receiverPhone)) { $msg = JText::_("SHOP_CARD_CHECKOUT_RECEIVER_PHONE_INVALID"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } } } if ($bBuy4friend) { $receiverName = JRequest::getVar('receiver_name'); $receiverEmail = JRequest::getVar('receiver_email'); $receiverMsg = JRequest::getVar('receiver_msg'); if (empty($receiverName) || empty($receiverEmail)) { $msg = JText::_("SHOP_CARD_CHECKOUT_RECEIVER_INFORMATION_REQUIRED_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } elseif (!preg_match($sEmailPt, $receiverEmail)) { $msg = JText::_("SHOP_CARD_CHECKOUT_RECEIVER_EMAIL_INVALID_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } } //------------------------------------------------------ // to check it this deal is free for customer if ($cart->getTotalPrice() > 0) { //deal is not free $payGtyId = JRequest::getVar('payGtyId'); if ($payGtyId == null) { $msg = JText::_("SELECT_PAYMENT_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } if ($setting->article_id != 0 && JRequest::getVar('terms') == false) { $msg = JText::_("AGREE_TERM_CONDITION_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg, 'error'); } $payGty = JModel::getInstance('payGty', 'enmasseModel')->getById($payGtyId); // checking gateway configuration if (CartHelper::checkGty($payGty) == false) { $msg = JText::_("PAYMENT_INCOMPLETE_MSG"); $link = JRoute::_("index.php?option=com_enmasse&controller=shopping&task=checkout&buy4friend={$bBuy4friend}", false); JFactory::getApplication()->redirect($link, $msg); } // save gty info into session JFactory::getSession()->set('payGty', serialize($payGty)); JFactory::getSession()->set('attribute_config', json_encode($payGty->attribute_config)); //--------If admin set the prepay_percent of the deal to 0.00, set the order status to 'Paid' (with paid_amount is 0.00) if ($item->prepay_percent == 0.0) { $status = EnmasseHelper::$ORDER_STATUS_LIST['Paid']; $couponStatus = EnmasseHelper::$INVTY_STATUS_LIST['Hold']; } else { //------------------------------------ // generate name of payment gateway file and class $payGtyFile = 'PayGty' . ucfirst($payGty->class_name) . '.class.php'; $className = 'PayGty' . ucfirst($payGty->class_name); //--------------------------------------------------- // get payment gateway object require_once JPATH_SITE . DS . "components" . DS . "com_enmasse" . DS . "helpers" . DS . "payGty" . DS . $payGty->class_name . DS . $payGtyFile; $paymentClassObj = new $className(); $paymentReturnStatusObj = $paymentClassObj->returnStatus(); $status = $paymentReturnStatusObj->order; $couponStatus = $paymentReturnStatusObj->coupon; } } else { //deal is free $payGty = "Free"; $status = 'Unpaid'; $couponStatus = 'Pending'; //save the payGty as free JFactory::getSession()->set('payGty', 'Free'); } //---------------------------------------- //determine information of coupon receiver if ($bBuy4friend) { $deliveryDetail = array('name' => $receiverName, 'email' => $receiverEmail, 'msg' => $receiverMsg, 'address' => $receiverAddress, 'phone' => $receiverPhone); } else { $deliveryDetail = array('name' => $buyerName, 'email' => $buyerEmail, 'msg' => '', 'address' => $receiverAddress, 'phone' => $receiverPhone); } //-------------------------- //generate order $dvrGty = $item->prepay_percent < 100 ? 2 : 1; $deliveryGty = JModel::getInstance('deliveryGty', 'enmasseModel')->getById($dvrGty); $user = array(); $user['id'] = JFactory::getUser()->get('id', 0); $user['name'] = $buyerName; $user['email'] = $buyerEmail; $order = CartHelper::saveOrder($cart, $user, $payGty, null, $deliveryGty, $deliveryDetail, $status); $session =& JFactory::getSession(); $session->set('newOrderId', $order->id); $orderItemList = CartHelper::saveOrderItem($cart, $order, $status); //----------------------------- // if this deal is set limited the coupon to sold out, go to invty and allocate coupons for this order // if not create coupons for that order if ($item->max_coupon_qty > 0) { $now = DatetimeWrapper::getDatetimeOfNow(); $nunOfSecondtoAdd = EnmasseHelper::getMinuteReleaseInvtyFromSetting($payGty) * 60; $intvy = CartHelper::allocatedInvty($orderItemList, DatetimeWrapper::mkFutureDatetimeSecFromNow($now, $nunOfSecondtoAdd), $couponStatus); } else { JModel::getInstance('invty', 'enmasseModel')->generateForOrderItem($orderItemList[0]->pdt_id, $orderItemList[0]->id, $orderItemList[0]->qty, $couponStatus); } //------------------------ //generate integration class $isPointSystemEnabled = EnmasseHelper::isPointSystemEnabled(); if ($isPointSystemEnabled) { $integrationClass = EnmasseHelper::getPointSystemClassFromSetting(); $integrateFileName = $integrationClass . '.class.php'; require_once JPATH_SITE . DS . "components" . DS . "com_enmasse" . DS . "helpers" . DS . "pointsystem" . DS . $integrationClass . DS . $integrateFileName; $user = JFactory::getUser(); $user_id = $user->get('id'); $point = $cart->getPoint(); if ($point > 0) { $integrationObject = new $integrationClass(); $integrationObject->integration($user_id, 'paybypoint', $point); } } //validating is ok, flush user data JFactory::getApplication()->setUserState("com_enmasse.checkout.data", null); // -------------------------------- // if deal is free then directly do the notify if ($cart->getTotalPrice() > 0) { //deal is not free, check if buyer must prepay a specific amount if ($item->prepay_percent > 0) { $link = JRoute::_("index.php?option=com_enmasse&controller=payment&task=gateway&orderId=" . $order->id, false); } else { //do notify for the order that not to prepay EnmasseHelper::doNotify($order->id); $link = JRoute::_("index.php?option=com_enmasse&controller=deal&task=listing"); $msg = JText::_("PARTIAL_PAYMENT_NO_PREPAY_CHECKOUT_MSG"); JFactory::getApplication()->redirect($link, $msg); } } else { //deal is free $link = JRoute::_("index.php?option=com_enmasse&controller=payment&task=doNotify&orderId={$order->id}", false); } JFactory::getApplication()->redirect($link); }
<div class="text"> <?php echo JTEXT::_('SHOP_CARD_TOTAL_PRICE') . ' : ' . EnmasseHelper::displayCurrency($cartItem->getCount() * $item->price * $item->prepay_percent / 100 - $this->cart->getPoint()); ?> </div> </div> </div> <div class="paygty-desc-table"> <table id="instruction_table"> <thead> <tr id="instruction_table_header"> <td colspan="2" align="center"><?php echo JTEXT::_('POINT_PAY_INFO'); ?> </td> </tr> </thead> <tr> <td><?php echo $this->attributeConfig->instruction; ?> </td> </tr> </table> </div> </div> <?php $this->cart->deleteAll(); JFactory::getSession()->set('cart', null); EnmasseHelper::doNotify($this->orderId);
function doNotify() { $orderId = JRequest::getVar("orderId", null); $order = JModel::getInstance('order', 'enmasseModel')->getById($orderId); if ($order == null) { echo JTEXT::_("PAYMENT_ERROR_MSG") . $orderId; exit(0); } else { if ($order->status == "Unpaid") { EnmasseHelper::doNotify($orderId); } } $msg = JTEXT::_("PAYMENT_SUCCESS"); $link = JRoute::_("index.php?option=com_enmasse&controller=deal", false); JFactory::getApplication()->redirect($link, $msg); }
function save() { $status = JRequest::getVar('status', '', 'post'); $partial = JRequest::getVar('partial', 0, 'method', 'int'); $orderData = new JObject(); $orderData->id = JRequest::getInt('id', '', 'post'); $orderData->description = JRequest::getVar('description', '', 'post', 'text', JREQUEST_ALLOWRAW); // $orderData->buyerid = JRequest::getInt('buyerid', '', 'post'); $model = JModel::getInstance('order', 'enmasseModel'); if (empty($status)) { if ($model->store($orderData)) { $msg = JText::_('SAVE_SUCCESS_MSG'); if ($partial) { $this->setRedirect('index.php?option=com_enmasse&controller=partialOrder', $msg); } else { $this->setRedirect('index.php?option=com_enmasse&controller=' . JRequest::getVar('controller'), $msg); } } else { $msg = JText::_('SAVE_ERROR_MSG') . ": " . $model->getError(); if ($orderData->id == null) { $this->setRedirect('index.php?option=com_enmasse&controller=' . JRequest::getVar('controller') . '&task=add', $msg, 'error'); } else { $this->setRedirect('index.php?option=com_enmasse&controller=' . JRequest::getVar('controller') . '&task=edit&cid[0]=' . $orderData->id . '&partial=' . $partial, $msg, 'error'); } } } else { //------------------------------ // send email and update total sold qty for each case of when change status of order if ($status == EnmasseHelper::$ORDER_STATUS_LIST["Paid"]) { EnmasseHelper::doNotify($orderData->id); $msg = JTEXT::_('SAVE_SUCCESS_MSG_AND_SEND_RECEIPT'); } else { if ($status == EnmasseHelper::$ORDER_STATUS_LIST["Cancelled"]) { $orderId = $orderData->id; $order = JModel::getInstance('order', 'enmasseModel')->getById($orderId); JModel::getInstance('order', 'enmasseModel')->updateStatus($order->id, 'Cancelled'); $orderItemList = JModel::getInstance('orderItem', 'enmasseModel')->listByOrderId($orderId); for ($count = 0; $count < count($orderItemList); $count++) { $orderItem = $orderItemList[$count]; JModel::getInstance('orderItem', 'enmasseModel')->updateStatus($orderItem->id, 'Unpaid'); JModel::getInstance('invty', 'enmasseModel')->freeCouponByOrderItemId($orderItem->id, 'Free'); } $msg = JTEXT::_('SAVE_SUCCESS_MSG'); } else { if ($status == EnmasseHelper::$ORDER_STATUS_LIST["Waiting_For_Refund"]) { $orderItemList = JModel::getInstance('orderItem', 'enmasseModel')->listByOrderId($orderData->id); foreach ($orderItemList as $orderItem) { EnmasseHelper::orderItemWaitingForRefund($orderItem); sleep(1); } $msg = JTEXT::_('SAVE_SUCCESS_MSG_AND_SEND_REFUND'); } else { if ($status == EnmasseHelper::$ORDER_STATUS_LIST["Refunded"]) { $orderItemList = JModel::getInstance('orderItem', 'enmasseModel')->listByOrderId($orderData->id); foreach ($orderItemList as $orderItem) { // reduce deal quality sold // only reduce when order item was delivered $isDelivered = intVal($orderItem->is_delivered); if ($isDelivered) { JModel::getInstance('deal', 'enmasseModel')->reduceQtySold($orderItem->pdt_id, $orderItem->qty); } EnmasseHelper::orderItemRefunded($orderItem); sleep(1); } $msg = JTEXT::_('SAVE_SUCCESS_MSG'); } else { if ($status == 'Delivered') { $orderItemList = JModel::getInstance('orderItem', 'enmasseModel')->listByOrderId($orderData->id); //update paid_amount of coupon to 100% $model->updateToFullPaid($orderData->id); JModel::getInstance("orderDeliverer", 'EnmasseModel')->updateStatus($orderData->id, "Delivered"); foreach ($orderItemList as $orderItem) { // update deal quality sold JModel::getInstance('deal', 'enmasseModel')->addQtySold($orderItem->pdt_id, $orderItem->qty); EnmasseHelper::orderItemDelivered($orderItem); sleep(1); } $msg = JTEXT::_('SAVE_SUCCESS_MSG_AND_SEND_DELIVERY'); } } } } } if ($partial) { $this->setRedirect('index.php?option=com_enmasse&controller=partialOrder', $msg); } else { $this->setRedirect('index.php?option=com_enmasse&controller=order', $msg); } } }