public function order_edit()
 {
     $object = $this->expectObject("param0", true);
     $mode = (string) getRequest('param1');
     $objectId = $object->getId();
     $this->setHeaderLabel("header-users-edit-" . $this->getObjectTypeMethod($object));
     $this->checkSv($objectId);
     $inputData = array("object" => $object, "allowed-element-types" => array('emarket', 'order'));
     if ($mode == "do") {
         $oldDeliveryPrice = $object->getValue('delivery_price');
         $object = $this->saveEditedObjectData($inputData);
         $newDeliveryPrice = $object->getValue('delivery_price');
         $order = order::get($object->id);
         $amounts = getRequest('order-amount-item');
         $dels = getRequest('order-del-item');
         $isChanged = false;
         if (is_array($amounts)) {
             foreach ($amounts as $itemId => $amount) {
                 $item = $order->getItem($itemId);
                 if ($item instanceof orderItem) {
                     if ($item->getAmount() != $amount) {
                         $item->setAmount($amount);
                         $item->commit();
                         $isChanged = true;
                     }
                 }
             }
         }
         if (is_array($dels)) {
             foreach ($dels as $itemId) {
                 $item = orderItem::get($itemId);
                 if ($item instanceof orderItem) {
                     $order->removeItem($item);
                     $isChanged = true;
                 }
             }
         }
         if ($isChanged) {
             $order->refresh();
             $order->commit();
         }
         if ($oldDeliveryPrice != $newDeliveryPrice && !$isChanged) {
             $originalPrice = $object->getValue('total_original_price');
             $totalPrice = $originalPrice;
             $discount = $order->getDiscount();
             if ($discount instanceof discount) {
                 $totalPrice = $discount->recalcPrice($originalPrice);
             }
             $totalPrice += $newDeliveryPrice;
             $object->setValue('total_price', $totalPrice);
             $object->commit();
         }
         $this->chooseRedirect();
     }
     $this->setDataType("form");
     $this->setActionType("modify");
     $data = $this->prepareData($inputData, "object");
     $this->setData($data);
     return $this->doData();
 }
 /**
  * TODO: Write documentation
  *
  * All these cases renders full basket order:
  * /udata/emarket/basket/ - do nothing
  * /udata/emarket/basket/add/element/9 - add element 9 into the basket
  * /udata/emarket/basket/add/element/9?amount=5 - add element 9 into the basket + amount
  * /udata/emarket/basket/add/element/9?option[option_name_1]=1&option=2&option[option_name_2]=3 - add element 9 using options
  * /udata/emarket/basket/modify/element/9?option[option_name_1]=1&option=2&option[option_name_2]=3 - add element 9 using options
  * /udata/emarket/basket/modify/item/9?option[option_name_1]=1&option=2&option[option_name_2]=3 - add element 9 using options
  * /udata/emarket/basket/remove/element/9 - remove element 9 from the basket
  * /udata/emarket/basket/remove/item/111 - remove orderItem 111 from the basket
  * /udata/emarket/basket/remove_all/ - remove all orderItems from basket
  */
 public function basket($mode = false, $itemType = false, $itemId = false)
 {
     $mode = $mode ? $mode : getRequest('param0');
     $order = self::getBasketOrder(!in_array($mode, array('put', 'remove')));
     $itemType = $itemType ? $itemType : getRequest('param1');
     $itemId = (int) ($itemId ? $itemId : getRequest('param2'));
     $amount = (int) getRequest('amount');
     $options = getRequest('options');
     $order->refresh();
     if ($mode == 'put') {
         $orderItem = $itemType == 'element' ? $this->getBasketItem($itemId) : $order->getItem($itemId);
         if (!$orderItem) {
             throw new publicException("Order item is not defined");
         }
         if (is_array($options)) {
             if ($itemType != 'element') {
                 throw new publicException("Put basket method required element id of optionedOrderItem");
             }
             // Get all orderItems
             $orderItems = $order->getItems();
             foreach ($orderItems as $tOrderItem) {
                 $itemOptions = $tOrderItem->getOptions();
                 if (sizeof($itemOptions) != sizeof($options)) {
                     $itemOptions = null;
                     $tOrderItem = null;
                     continue;
                 }
                 if ($tOrderItem->getItemElement()->id != $orderItem->getItemElement()->id) {
                     $itemOptions = null;
                     $tOrderItem = null;
                     continue;
                 }
                 // Compare each tOrderItem with options list
                 foreach ($options as $optionName => $optionId) {
                     $itemOption = getArrayKey($itemOptions, $optionName);
                     if (getArrayKey($itemOption, 'option-id') != $optionId) {
                         $tOrderItem = null;
                         continue 2;
                         // If does not match, create new item using options specified
                     }
                 }
                 break;
                 // If matches, stop loop and continue to amount change
             }
             if (!isset($tOrderItem) || is_null($tOrderItem)) {
                 $tOrderItem = orderItem::create($itemId);
                 $order->appendItem($tOrderItem);
             }
             if ($tOrderItem instanceof optionedOrderItem) {
                 foreach ($options as $optionName => $optionId) {
                     if ($optionId) {
                         $tOrderItem->appendOption($optionName, $optionId);
                     } else {
                         $tOrderItem->removeOption($optionName);
                     }
                 }
             }
             if ($tOrderItem) {
                 $orderItem = $tOrderItem;
             }
         }
         $amount = $amount ? $amount : $orderItem->getAmount() + 1;
         $orderItem->setAmount($amount ? $amount : 1);
         $orderItem->refresh();
         if ($itemType == 'element') {
             $order->appendItem($orderItem);
         }
         $order->refresh();
     }
     if ($mode == 'remove') {
         $orderItem = $itemType == 'element' ? $this->getBasketItem($itemId, false) : orderItem::get($itemId);
         if ($orderItem instanceof orderItem) {
             $order->removeItem($orderItem);
             $order->refresh();
         }
     }
     if ($mode == 'remove_all') {
         foreach ($order->getItems() as $orderItem) {
             $order->removeItem($orderItem);
         }
         $order->refresh();
     }
     $referer = getServer('HTTP_REFERER');
     $noRedirect = getRequest('no-redirect');
     if ($redirectUri = getRequest('redirect-uri')) {
         $this->redirect($redirectUri);
     } else {
         if (!defined('VIA_HTTP_SCHEME') && !$noRedirect && $referer) {
             $current = $_SERVER['REQUEST_URI'];
             if (substr($referer, -strlen($current)) == $current) {
                 if ($itemType == 'element') {
                     $referer = umiHierarchy::getInstance()->getPathById($itemId);
                 } else {
                     $referer = "/";
                 }
             }
             $this->redirect($referer);
         }
     }
     $order->refresh();
     return $this->order($order->getId());
 }
Example #3
0
		protected function mergeBasket(umiObject $guestBasket) {
			$orderItems = $guestBasket->order_items;

			if(is_array($orderItems)) {
				$userBasket = __emarket_purchasing::getBasketOrder(false);

				if($userBasket) {
					foreach($orderItems as $orderItemId) {
						$orderItem = orderItem::get($orderItemId);
						if($orderItem) {
							$userBasket->appendItem($orderItem);
						}
					}
					$userBasket->commit();
				}
			}

			$guestBasket->delete();
		}
Example #4
0
 /**
  * Загрузить список наименований в заказе из объекта заказа
  */
 protected function readItems()
 {
     $objectItems = $this->object->order_items;
     $items = array();
     foreach ($objectItems as $objectId) {
         try {
             $items[] = orderItem::get($objectId);
         } catch (privateException $e) {
         }
     }
     $this->items = $items;
 }