/** * 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)); }
/** * Fills an object of the class Shopware_Plugins_Frontend_RpayRatePay_Component_Model_PaymentRequest * * @param Shopware_Plugins_Frontend_RpayRatePay_Component_Model_PaymentRequest $paymentRequestModel */ private function fillPaymentRequest(Shopware_Plugins_Frontend_RpayRatePay_Component_Model_PaymentRequest &$paymentRequestModel) { $method = Shopware_Plugins_Frontend_RpayRatePay_Component_Service_Util::getPaymentMethod(Shopware()->Session()->sOrderVariables['sUserData']['additional']['payment']['name']); $shopUser = Shopware()->Models()->find('Shopware\\Models\\Customer\\Customer', Shopware()->Session()->sUserId); // Checkout address ids are set in RP session from shopware version >=5.2.0 if (isset(Shopware()->Session()->RatePAY['checkoutBillingAddressId']) && Shopware()->Session()->RatePAY['checkoutBillingAddressId'] > 0) { $addressModel = Shopware()->Models()->getRepository('Shopware\\Models\\Customer\\Address'); $checkoutAddressBilling = $addressModel->findOneBy(array('id' => Shopware()->Session()->RatePAY['checkoutBillingAddressId'])); $checkoutAddressShipping = $addressModel->findOneBy(array('id' => Shopware()->Session()->RatePAY['checkoutShippingAddressId'] ? Shopware()->Session()->RatePAY['checkoutShippingAddressId'] : Shopware()->Session()->RatePAY['checkoutBillingAddressId'])); $countryCodeBilling = $checkoutAddressBilling->getCountry()->getIso(); $countryCodeShipping = $checkoutAddressShipping->getCountry()->getIso(); $company = $checkoutAddressBilling->getCompany(); if (empty($company)) { $dateOfBirth = $shopUser->getBirthday()->format("Y-m-d"); // From Shopware 5.2 date of birth has moved to customer object } $merchantCustomerId = $shopUser->getNumber(); // From Shopware 5.2 billing number has moved to customer object } else { $checkoutAddressBilling = $shopUser->getBilling(); $checkoutAddressShipping = $shopUser->getShipping() !== null ? $shopUser->getShipping() : $shopUser->getBilling(); $countryBilling = Shopware()->Models()->find('Shopware\\Models\\Country\\Country', $checkoutAddressBilling->getCountryId()); $countryCodeBilling = $countryBilling->getIso(); $countryShipping = Shopware()->Models()->find('Shopware\\Models\\Country\\Country', $checkoutAddressShipping->getCountryId()); $countryCodeShipping = $countryShipping->getIso(); $company = $checkoutAddressBilling->getCompany(); if (!empty($company)) { $dateOfBirth = $shopUser->getBilling()->getBirthday()->format("Y-m-d"); } $merchantCustomerId = $shopUser->getBilling()->getNumber(); } $head = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_Head(); $head->setTransactionId(Shopware()->Session()->RatePAY['transactionId']); $head->setOperation('PAYMENT_REQUEST'); $head->setProfileId($this->getProfileId()); $head->setSecurityCode($this->getSecurityCode()); $head->setSystemId(Shopware()->Shop()->getHost() ?: $_SERVER['SERVER_ADDR']); $head->setSystemVersion($this->_getVersion()); $head->setOrderId($this->_getOrderIdFromTransactionId()); $head->setMerchantConsumerId($merchantCustomerId); //set device ident token if available if (Shopware()->Session()->RatePAY['dfpToken']) { $head->setDeviceToken(Shopware()->Session()->RatePAY['dfpToken']); } $customer = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_Customer(); // only for elv and sepa elv if ($method === 'ELV') { $bankAccount = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_BankAccount(); $bankAccount->setBankAccount(Shopware()->Session()->RatePAY['bankdata']['account']); $bankAccount->setBankCode(Shopware()->Session()->RatePAY['bankdata']['bankcode']); $bankAccount->setOwner(Shopware()->Session()->RatePAY['bankdata']['bankholder']); $customer->setBankAccount($bankAccount); } $customer->setFirstName($checkoutAddressBilling->getFirstName()); $customer->setLastName($checkoutAddressBilling->getLastName()); $customer->setEmail($shopUser->getEmail()); if (!empty($company)) { $customer->setCompanyName($checkoutAddressBilling->getCompany()); $customer->setVatId($checkoutAddressBilling->getVatId()); } else { $customer->setDateOfBirth($dateOfBirth); } /** * set gender and salutation based on the given billingaddress salutation */ $gender = 'U'; if ($checkoutAddressBilling->getSalutation() === 'mr') { $gender = 'M'; $customer->setSalutation('Herr'); } elseif ($checkoutAddressBilling->getSalutation() === 'ms') { $gender = 'F'; $customer->setSalutation('Frau'); } else { $customer->setSalutation($checkoutAddressBilling->getSalutation()); } $customer->setGender($gender); $customer->setPhone($checkoutAddressBilling->getPhone()); $customer->setNationality($this->_countryCode); $customer->setIpAddress($this->_getCustomerIP()); $customer->setBillingAddresses($this->_getCheckoutAddress($checkoutAddressBilling, 'BILLING', $countryCodeBilling)); $customer->setShippingAddresses($this->_getCheckoutAddress($checkoutAddressShipping, 'DELIVERY', $countryCodeShipping)); $payment = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_Payment(); $payment->setAmount($this->getAmount()); $payment->setCurrency(Shopware()->Currency()->getShortName()); $payment->setMethod($method); if ($method === 'INSTALLMENT') { $payment->setAmount(Shopware()->Session()->RatePAY['ratenrechner']['total_amount']); $payment->setDirectPayType('BANK-TRANSFER'); $payment->setInstallmentAmount(Shopware()->Session()->RatePAY['ratenrechner']['rate']); $payment->setInstallmentNumber(Shopware()->Session()->RatePAY['ratenrechner']['number_of_rates']); $payment->setInterestRate(Shopware()->Session()->RatePAY['ratenrechner']['interest_rate']); $payment->setLastInstallmentAmount(Shopware()->Session()->RatePAY['ratenrechner']['last_rate']); } $basket = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_ShoppingBasket(); $basket->setAmount($this->getAmount()); $basket->setCurrency(Shopware()->Currency()->getShortName()); $shopItems = Shopware()->Session()->sOrderVariables['sBasket']['content']; $items = array(); foreach ($shopItems as $shopItem) { $item = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_item(); $item->setArticleName($shopItem['articlename']); $item->setArticleNumber($shopItem['ordernumber']); $item->setQuantity($shopItem['quantity']); $item->setTaxRate($shopItem['tax_rate']); $item->setUnitPriceGross($shopItem['priceNumeric']); $items[] = $item; } if (Shopware()->Session()->sOrderVariables['sBasket']['sShippingcosts'] > 0) { $items[] = $this->getShippingAsItem(Shopware()->Session()->sOrderVariables['sBasket']['sShippingcosts'], Shopware()->Session()->sOrderVariables['sBasket']['sShippingcostsTax']); } $basket->setItems($items); $paymentRequestModel->setHead($head); $paymentRequestModel->setCustomer($customer); $paymentRequestModel->setPayment($payment); $paymentRequestModel->setShoppingBasket($basket); }
public function onBidirectionalSendOrderOperation(Enlight_Hook_HookArgs $arguments) { $request = $arguments->getSubject()->Request(); $parameter = $request->getParams(); $config = Shopware()->Plugins()->Frontend()->RpayRatePay()->Config(); if (true !== $config->get('RatePayBidirectional') || !in_array($parameter['payment'][0]['name'], array("rpayratepayinvoice", "rpayratepayrate", "rpayratepaydebit"))) { return; } $order = Shopware()->Models()->find('Shopware\\Models\\Order\\Order', $parameter['id']); //get country of order $country = Shopware()->Models()->find('Shopware\\Models\\Country\\Country', $order->getCustomer()->getBilling()->getCountryId()); //set sandbox mode based on config $sandbox = $config->get('RatePaySandbox' . $country->getIso()); $service = new Shopware_Plugins_Frontend_RpayRatePay_Component_Service_RequestService($sandbox); $modelFactory = new Shopware_Plugins_Frontend_RpayRatePay_Component_Mapper_ModelFactory(); $history = new Shopware_Plugins_Frontend_RpayRatePay_Component_History(); $newOrderStatus = $parameter['status']; if ($newOrderStatus == $config['RatePayFullDelivery']) { $sqlShipping = "SELECT COUNT(*) " . "FROM `rpay_ratepay_order_shipping` AS `shipping` " . "WHERE `delivered` = 0 AND `cancelled` = 0 AND `returned` = 0 AND `shipping`.`s_order_id` = ?"; try { $count = Shopware()->Db()->fetchOne($sqlShipping, array($order->getId())); } catch (Exception $exception) { Shopware()->Pluginlogger()->error($exception->getMessage()); } if (null != $count) { $basketItems = $this->getBasket($order); $basket = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_ShoppingBasket(); $basket->setAmount($order->getInvoiceAmount()); $basket->setCurrency($order->getCurrency()); $basket->setItems($basketItems); $confirmationDeliveryModel = $modelFactory->getModel(new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_ConfirmationDelivery(), $order->getId()); $confirmationDeliveryModel->setShoppingBasket($basket); $head = $confirmationDeliveryModel->getHead(); $head->setTransactionId($order->getTransactionID()); $confirmationDeliveryModel->setHead($head); $response = $service->xmlRequest($confirmationDeliveryModel->toArray()); $result = Shopware_Plugins_Frontend_RpayRatePay_Component_Service_Util::validateResponse('CONFIRMATION_DELIVER', $response); if ($result === true) { foreach ($basketItems as $item) { $bind = array('delivered' => $item->getQuantity()); $this->updateItem($order->getId(), 'shipping', $bind); if ($item->getQuantity() <= 0) { continue; } $history->logHistory($order->getId(), "Artikel wurde versand.", $item->getArticleName(), $item->getArticlenumber(), $item->getQuantity()); } } } } elseif ($newOrderStatus == $config['RatePayFullCancellation']) { $sqlShipping = "SELECT COUNT(*) " . "FROM `rpay_ratepay_order_shipping` AS `shipping` " . "WHERE `cancelled` = 0 AND `shipping`.`s_order_id` = ?"; try { $count = Shopware()->Db()->fetchOne($sqlShipping, array($order->getId())); } catch (Exception $exception) { Shopware()->Pluginlogger()->error($exception->getMessage()); } if (null != $count) { $basketItems = $this->getBasket($order); $basket = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_ShoppingBasket(); $basket->setAmount($order->getInvoiceAmount()); $basket->setCurrency($order->getCurrency()); $basket->setItems($basketItems); $modelFactory->setTransactionId($order->getTransactionID()); $paymentChange = $modelFactory->getModel(new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_PaymentChange()); $head = $paymentChange->getHead(); $head->setOperationSubstring('partial-cancellation'); $paymentChange->setHead($head); $paymentChange->setShoppingBasket($basket); $response = $service->xmlRequest($paymentChange->toArray()); $result = Shopware_Plugins_Frontend_RpayRatePay_Component_Service_Util::validateResponse('PAYMENT_CHANGE', $response); if ($result === true) { foreach ($basketItems as $item) { $bind = array('cancelled' => $item->getQuantity()); $this->updateItem($order->getId(), $item->getArticlenumber(), $bind); if ($item->getQuantity() <= 0) { continue; } $history->logHistory($order->getId(), "Artikel wurde storniert.", $item->getArticleName(), $item->getArticlenumber(), $item->getQuantity()); } } } } elseif ($newOrderStatus == $config['RatePayFullReturn']) { $sqlShipping = "SELECT COUNT(*) " . "FROM `rpay_ratepay_order_shipping` AS `shipping` " . "WHERE `returned` = 0 AND `shipping`.`s_order_id` = ?"; try { $count = Shopware()->Db()->fetchOne($sqlShipping, array($order->getId())); } catch (Exception $exception) { Shopware()->Pluginlogger()->error($exception->getMessage()); } if (null != $count) { $basketItems = $this->getBasket($order); $basket = new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_SubModel_ShoppingBasket(); $basket->setAmount($order->getInvoiceAmount()); $basket->setCurrency($order->getCurrency()); $basket->setItems($basketItems); $modelFactory->setTransactionId($order->getTransactionID()); $paymentChange = $modelFactory->getModel(new Shopware_Plugins_Frontend_RpayRatePay_Component_Model_PaymentChange()); $head = $paymentChange->getHead(); $head->setOperationSubstring('partial-return'); $paymentChange->setHead($head); $paymentChange->setShoppingBasket($basket); $response = $service->xmlRequest($paymentChange->toArray()); $result = Shopware_Plugins_Frontend_RpayRatePay_Component_Service_Util::validateResponse('PAYMENT_CHANGE', $response); if ($result === true) { foreach ($basketItems as $item) { $bind = array('returned' => $item->getQuantity()); $this->updateItem($order->getId(), $item->getArticlenumber(), $bind); if ($item->getQuantity() <= 0) { continue; } $history->logHistory($order->getId(), "Artikel wurde retourniert.", $item->getArticleName(), $item->getArticlenumber(), $item->getQuantity()); } } } } }