/** * Add the given Items to the given order */ public function addAction() { $orderId = $this->Request()->getParam("orderId"); $insertedIds = json_decode($this->Request()->getParam("insertedIds")); $subOperation = $this->Request()->getParam("suboperation"); $order = Shopware()->Db()->fetchRow("SELECT * FROM `s_order` WHERE `id`=?", array($orderId)); $orderItems = Shopware()->Db()->fetchAll("SELECT *, (`quantity` - `delivered` - `cancelled`) AS `quantityDeliver` FROM `s_order_details` " . "INNER JOIN `rpay_ratepay_order_positions` ON `s_order_details`.`id` = `rpay_ratepay_order_positions`.`s_order_details_id` " . "WHERE `orderID`=?", array($orderId)); $basketItems = array(); foreach ($orderItems as $row) { if ($row['quantityDeliver'] == 0) { continue; } $basketItem = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_item(); $basketItem->setArticleName($row['name']); $basketItem->setArticleNumber($row['articleordernumber']); $basketItem->setQuantity($row['quantityDeliver']); $basketItem->setTaxRate($row['tax_rate']); $basketItem->setUnitPriceGross($row['price']); $basketItems[] = $basketItem; } $shippingRow = $this->getShippingFromDBAsItem($orderId); if (!is_null($shippingRow) && $shippingRow['quantityDeliver'] != 0) { $basketItem = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_item(); $basketItem->setArticleName($shippingRow['name']); $basketItem->setArticleNumber($shippingRow['articleordernumber']); $basketItem->setQuantity($shippingRow['quantityDeliver']); $basketItem->setTaxRate($shippingRow['tax_rate']); $basketItem->setUnitPriceGross($shippingRow['price']); $basketItems[] = $basketItem; } $basket = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_ShoppingBasket(); $basket->setAmount($this->getRecalculatedAmount($basketItems)); $basket->setCurrency($order['currency']); $basket->setItems($basketItems); $this->_modelFactory->setTransactionId($order['transactionID']); $paymentChange = $this->_modelFactory->getModel(new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_PaymentChange(), $orderId); $head = $paymentChange->getHead(); $head->setOperationSubstring($subOperation); $paymentChange->setHead($head); $paymentChange->setShoppingBasket($basket); $response = $this->_service->xmlRequest($paymentChange->toArray()); $result = Shopware_Plugins_Frontend_RpayRatePay_Component_Service_Util::validateResponse('PAYMENT_CHANGE', $response); if ($result) { $event = $subOperation === 'credit' ? 'Nachlass wurde hinzugefügt' : 'Artikel wurde hinzugefügt'; foreach ($insertedIds as $id) { $newItems = Shopware()->Db()->fetchRow("SELECT * FROM `s_order_details` WHERE `id`=?", array($id)); if ($newItems['quantity'] <= 0) { continue; } $this->_history->logHistory($orderId, $event, $newItems['name'], $newItems['articleordernumber'], $newItems['quantity']); } } $this->setNewOrderState($orderId); $this->View()->assign(array("result" => $result, "success" => true)); }
/** * Returns the Shippingcosts as Item * * @param string $amount * @param string $tax * * @return \Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_item */ private function getShippingAsItem($amount, $tax) { $item = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_item(); $item->setArticleName('shipping'); $item->setArticleNumber('shipping'); $item->setQuantity(1); $item->setTaxRate($tax); $item->setUnitPriceGross($amount); return $item; }
/** * returns basket items as an array * * @param \Shopware\Models\Order\Order $order * * @return array */ public function getBasket(Shopware\Models\Order\Order $order) { $basketItems = array(); foreach ($items = $order->getDetails() as $item) { $basketItem = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_item(); $basketItem->setArticleName($item->getArticleName()); $basketItem->setArticleNumber($item->getArticlenumber()); $basketItem->setQuantity($item->getQuantity()); $basketItem->setTaxRate($item->getTaxRate()); $basketItem->setUnitPriceGross($item->getPrice()); $basketItems[] = $basketItem; } return $basketItems; }