/** * Change product quantity in stock if needed * * @param \XLite\Model\OrderItem $entity Order item entity * * @return void */ protected function changeItemAmountInStock($entity) { if ($entity->getVariant()) { $oldVariant = $this->orderItemsData[$entity->getItemId()]['variant']; $newVariant = $entity->getVariant(); if ($this->isItemDataChangedVariant($oldVariant, $newVariant)) { // Return old variant amount to stock if (!$oldVariant->getDefaultAmount()) { $oldVariant->changeAmount($this->orderItemsData[$entity->getItemId()]['amount']); } else { $entity->getProduct()->getInventory()->changeAmount($this->orderItemsData[$entity->getItemId()]['amount']); } // Get new variant amount from stock if (!$newVariant->getDefaultAmount()) { $newVariant->changeAmount(-1 * $entity->getAmount()); } else { $entity->getProduct()->getInventory()->changeAmount(-1 * $entity->getAmount()); } } else { parent::changeItemAmountInStock($entity); } } else { parent::changeItemAmountInStock($entity); } }
/** * Count available for parcel order items * * @param \XLite\Model\OrderItem $orderItem Order item * * @return integer */ public function getAmountInParcel($orderItem) { $result = 0; foreach ($this->getParcelItems() as $item) { if ($item->getOrderItem() && $item->getOrderItem()->getItemId() == $orderItem->getItemId()) { $result += $item->getAmount(); } } return $result; }
/** * Check item id equal * * @param \XLite\Model\OrderItem $item Item * @param integer $itemId Item id * * @return boolean */ public function checkItemIdEqual(\XLite\Model\OrderItem $item, $itemId) { return $item->getItemId() == $itemId; }
/** * Get attribute input name * * @param \XLite\Model\OrderItem $entity Order item * @param \XLite\Model\OrderItem\AttributeValue $av Attribute value * * @return string */ protected function getAttributeInputName(\XLite\Model\OrderItem $entity, \XLite\Model\OrderItem\AttributeValue $av) { return $this->getIdx() > 0 ? 'order_items[' . $entity->getItemId() . '][attribute_values][' . $this->getAttributeId($av) . ']' : 'new[' . $this->getIdx() . '][attribute_values][' . $this->getAttributeId($av) . ']'; }
/** * Return false if order item amount exceeds maximum allowed value * * @param \XLite\Model\OrderItem $entity Order item entity * * @return boolean */ protected function isItemHasWrongAmount($entity) { $oldAmount = $this->orderItemsData[$entity->getItemId()]['amount']; $maxAmount = $entity->getProductAvailableAmount(); return $oldAmount + $maxAmount < $entity->getAmount(); }
/** * Assemble recalculate item event * * @param \XLite\Model\OrderItem $item Order item * * @return array */ protected function assembleRecalculateItemEvent(\XLite\Model\OrderItem $item) { $maxAmount = $item->getProductAvailableAmount(); if ($item->isPersistent() && \XLite\Core\Request::getInstance()->oldAmount) { $maxAmount += \XLite\Core\Request::getInstance()->oldAmount; \XLite\Core\Request::getInstance()->oldAmount = null; } return array('item_id' => $item->getItemId(), 'requestId' => \XLite\Core\Request::getInstance()->requestId, 'price' => $item->getNetPrice(), 'max_qty' => $maxAmount); }
/** * {@inheritDoc} */ public function getItemId() { $this->__initializer__ && $this->__initializer__->__invoke($this, 'getItemId', array()); return parent::getItemId(); }