Example #1
0
 /**
  * @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;
 }