/** * @return Payone_Api_Request_Parameter_Invoicing_Transaction */ protected function mapInvoicingParameters() { $order = $this->getOrder(); $invoice = $this->getInvoice(); $invoicing = new Payone_Api_Request_Parameter_Capture_Invoicing_Transaction(); if (!empty($invoice) && $invoice->hasData()) { $invoiceIncrementId = $invoice->getIncrementId(); if ($invoiceIncrementId === null) { $invoiceIncrementId = $this->fetchNewIncrementId($invoice); } $appendix = $this->getInvoiceAppendix($invoice); $invoicing->setInvoiceid($invoiceIncrementId); $invoicing->setInvoiceappendix($appendix); // Regular order items: foreach ($invoice->getItemsCollection() as $itemData) { /** @var $itemData Mage_Sales_Model_Order_Invoice_Item */ /** @var $orderItem Mage_Sales_Model_Order_Item */ $orderItem = $order->getItemById($itemData->getOrderItemId()); if ($orderItem->isDummy()) { continue; // Do not map dummy items. } $number = number_format($itemData->getQty(), 0, '.', ''); if ($number <= 0) { continue; // Do not map items with zero quantity } $params['id'] = $itemData->getSku(); $params['de'] = $itemData->getName(); $params['no'] = $number; $params['pr'] = $itemData->getPriceInclTax(); if ($this->getPaymentMethod()->mustTransmitInvoicingItemTypes()) { $params['it'] = Payone_Api_Enum_InvoicingItemType::GOODS; } // We have to load the tax percentage from the order item $params['va'] = number_format($orderItem->getTaxPercent(), 0, '.', ''); $item = new Payone_Api_Request_Parameter_Invoicing_Item(); $item->init($params); $invoicing->addItem($item); } // Shipping / Fees: if ($invoice->getShippingInclTax() > 0) { $invoicing->addItem($this->mapShippingFeeAsItem()); } // Discounts: $discountAmount = $invoice->getDiscountAmount(); // Discount Amount is positive on invoice. if ($discountAmount > 0) { $invoicing->addItem($this->mapDiscountAsItem(-1 * $discountAmount)); } } // Capture mode: $payment = $this->getPaymentMethod()->getInfoInstance(); if ($this->getPaymentMethod() instanceof Payone_Core_Model_Payment_Method_SafeInvoice or $this->helperRegistry()->isPaymentCancelRegistered($payment)) { $invoicing->setCapturemode($this->mapCaptureMode()); } return $invoicing; }
/** * collect items from order * * @param object $order * @param array $positionIds * @param mixed $finalize * @param bool $debit * @param bool $includeShipment * @return \Payone_Api_Request_Parameter_Capture_Invoicing_Transaction */ public function getInvoicingFromOrder($order, $positionIds, $finalize = 'skipCaptureMode', $debit = false, $includeShipment = false) { $transaction = new Payone_Api_Request_Parameter_Capture_Invoicing_Transaction(array()); foreach ($order->getDetails() as $position) { if (!in_array($position->getId(), $positionIds)) { continue; } if (!$debit) { $positionAttribute = $this->payoneHelper->getOrCreateAttribute($position); if ($positionAttribute->getMoptPayoneCaptured()) { continue; } } $params = array(); $params['id'] = $position->getArticleNumber(); //article number $params['pr'] = $position->getPrice(); //price if ($debit) { $params['pr'] = $params['pr'] * -1; } $params['no'] = $position->getQuantity(); // ordered quantity $params['de'] = substr($position->getArticleName(), 0, 100); // description if ($order->getTaxFree()) { $params['va'] = 0; } else { if ($position->getTaxRate() == 0) { $params['va'] = number_format($position->getTax()->getTax(), 0, '.', ''); } else { $params['va'] = number_format($position->getTaxRate(), 0, '.', ''); // vat } } $params['it'] = Payone_Api_Enum_InvoicingItemType::GOODS; //item type $mode = $position->getMode(); if ($mode == 2) { $params['it'] = Payone_Api_Enum_InvoicingItemType::VOUCHER; $params['id'] = substr($position->getArticleName(), 0, 100); //article number } if ($mode == 4) { $params['it'] = Payone_Api_Enum_InvoicingItemType::HANDLING; $params['id'] = substr($position->getArticleName(), 0, 100); //article number } if ($position->getArticleNumber() == 'SHIPPING') { $params['it'] = Payone_Api_Enum_InvoicingItemType::SHIPMENT; $params['id'] = substr($position->getArticleName(), 0, 100); //article number //don't use $includeShipment if shipping article exists $includeShipment = false; } $params = array_map('htmlspecialchars_decode', $params); $item = new Payone_Api_Request_Parameter_Invoicing_Item($params); $transaction->addItem($item); } if ($finalize !== 'skipCaptureMode') { $transaction->setCapturemode($finalize ? Payone_Api_Enum_CaptureMode::COMPLETED : Payone_Api_Enum_CaptureMode::NOTCOMPLETED); } //add shipment costs as position if ($includeShipment) { //check if already caputered in non_debit/capture mode if (!$debit) { $orderAttribute = $this->payoneHelper->getOrCreateAttribute($order); if ($orderAttribute->getMoptPayoneShipCaptured()) { return $transaction; } } $params = array(); $params['pr'] = $order->getInvoiceShipping(); //price if ($debit) { $params['pr'] = $params['pr'] * -1; } $params['it'] = Payone_Api_Enum_InvoicingItemType::SHIPMENT; $params['id'] = substr($order->getDispatch()->getName(), 0, 100); //article number $params['de'] = substr($order->getDispatch()->getName(), 0, 100); //article number $params['no'] = 1; $params['va'] = 0; if ($order->getInvoiceShipping() != 0) { // Tax rate calculation below would divide by zero otherwise $params['va'] = round(($order->getInvoiceShipping() / $order->getInvoiceShippingNet() - 1) * 100); } $params = array_map('htmlspecialchars_decode', $params); $item = new Payone_Api_Request_Parameter_Invoicing_Item($params); $transaction->addItem($item); } return $transaction; }