/**
  * @return TotalInterface
  */
 private function getTotal()
 {
     /** @var TotalInterface $total */
     $total = $this->totalFactory->create();
     $total->setBaseShippingAmount($this->order->getBaseShippingAmount());
     $total->setBaseShippingCanceled($this->order->getBaseShippingCanceled());
     $total->setBaseShippingDiscountAmount($this->order->getBaseShippingDiscountAmount());
     $total->setBaseShippingDiscountTaxCompensationAmnt($this->order->getBaseShippingDiscountTaxCompensationAmnt());
     $total->setBaseShippingInclTax($this->order->getBaseShippingInclTax());
     $total->setBaseShippingInvoiced($this->order->getBaseShippingInvoiced());
     $total->setBaseShippingRefunded($this->order->getBaseShippingRefunded());
     $total->setBaseShippingTaxAmount($this->order->getBaseShippingTaxAmount());
     $total->setBaseShippingTaxRefunded($this->order->getBaseShippingTaxRefunded());
     $total->setShippingAmount($this->order->getShippingAmount());
     $total->setShippingCanceled($this->order->getShippingCanceled());
     $total->setShippingDiscountAmount($this->order->getShippingDiscountAmount());
     $total->setShippingDiscountTaxCompensationAmount($this->order->getShippingDiscountTaxCompensationAmount());
     $total->setShippingInclTax($this->order->getShippingInclTax());
     $total->setShippingInvoiced($this->order->getShippingInvoiced());
     $total->setShippingRefunded($this->order->getShippingRefunded());
     $total->setShippingTaxAmount($this->order->getShippingTaxAmount());
     $total->setShippingTaxRefunded($this->order->getShippingTaxRefunded());
     return $total;
 }
Example #2
0
 /**
  * Get calculated taxes for each tax class
  *
  * This method returns array with format:
  * array(
  *  $index => array(
  *      'tax_amount'        => $taxAmount,
  *      'base_tax_amount'   => $baseTaxAmount,
  *      'title'             => $title,
  *      'percent'           => $percent
  *  )
  * )
  *
  * @param \Magento\Sales\Model\Order $source
  * @return array
  */
 public function getCalculatedTaxes($source)
 {
     if ($this->_coreRegistry->registry('current_invoice')) {
         $current = $this->_coreRegistry->registry('current_invoice');
     } elseif ($this->_coreRegistry->registry('current_creditmemo')) {
         $current = $this->_coreRegistry->registry('current_creditmemo');
     } else {
         $current = $source;
     }
     $taxClassAmount = array();
     if ($current && $source) {
         if ($current == $source) {
             $orderTaxDetails = $this->orderTaxService->getOrderTaxDetails($current->getId());
             $appliedTaxes = $orderTaxDetails->getAppliedTaxes();
             foreach ($appliedTaxes as $appliedTax) {
                 $taxCode = $appliedTax->getCode();
                 $taxClassAmount[$taxCode]['tax_amount'] = $appliedTax->getAmount();
                 $taxClassAmount[$taxCode]['base_tax_amount'] = $appliedTax->getBaseAmount();
                 $taxClassAmount[$taxCode]['title'] = $appliedTax->getTitle();
                 $taxClassAmount[$taxCode]['percent'] = $appliedTax->getPercent();
             }
         } else {
             $orderTaxDetails = $this->orderTaxService->getOrderTaxDetails($source->getId());
             // Apply any taxes for shipping
             $shippingTaxAmount = $current->getShippingTaxAmount();
             $originalShippingTaxAmount = $source->getShippingTaxAmount();
             if ($shippingTaxAmount && $originalShippingTaxAmount && $shippingTaxAmount != 0 && $originalShippingTaxAmount != 0) {
                 //An invoice or credit memo can have a different qty than its order
                 $shippingRatio = $shippingTaxAmount / $originalShippingTaxAmount;
                 $itemTaxDetails = $orderTaxDetails->getItems();
                 foreach ($itemTaxDetails as $itemTaxDetail) {
                     //Aggregate taxable items associated with shipping
                     if ($itemTaxDetail->getType() == \Magento\Sales\Model\Quote\Address::TYPE_SHIPPING) {
                         $taxClassAmount = $this->_aggregateTaxes($taxClassAmount, $itemTaxDetail, $shippingRatio);
                     }
                 }
             }
             // Apply any taxes for the items
             /** @var $item \Magento\Sales\Model\Order\Invoice\Item|\Magento\Sales\Model\Order\Creditmemo\Item */
             foreach ($current->getItemsCollection() as $item) {
                 $orderItem = $item->getOrderItem();
                 $orderItemId = $orderItem->getId();
                 $orderItemTax = $orderItem->getTaxAmount();
                 $itemTax = $item->getTaxAmount();
                 if (!$itemTax || !$orderItemTax) {
                     continue;
                 }
                 //An invoiced item or credit memo item can have a different qty than its order item qty
                 $itemRatio = $itemTax / $orderItemTax;
                 $itemTaxDetails = $orderTaxDetails->getItems();
                 foreach ($itemTaxDetails as $itemTaxDetail) {
                     //Aggregate taxable items associated with an item
                     if ($itemTaxDetail->getItemId() == $orderItemId || $itemTaxDetail->getAssociatedItemId() == $orderItemId) {
                         $taxClassAmount = $this->_aggregateTaxes($taxClassAmount, $itemTaxDetail, $itemRatio);
                     }
                 }
             }
         }
         // Finish
         foreach ($taxClassAmount as $key => $tax) {
             if ($tax['tax_amount'] == 0 && $tax['base_tax_amount'] == 0) {
                 unset($taxClassAmount[$key]);
             } else {
                 $taxClassAmount[$key]['tax_amount'] = $this->priceCurrency->round($tax['tax_amount']);
                 $taxClassAmount[$key]['base_tax_amount'] = $this->priceCurrency->round($tax['base_tax_amount']);
             }
         }
         $taxClassAmount = array_values($taxClassAmount);
     }
     return $taxClassAmount;
 }
Example #3
0
 public function startTransaction(Order $order, UrlInterface $url)
 {
     $config = new Config($this->_scopeConfig);
     $config->configureSDK();
     $additionalData = $order->getPayment()->getAdditionalInformation();
     $bankId = null;
     if (isset($additionalData['bank_id'])) {
         $bankId = $additionalData['bank_id'];
     }
     $total = $order->getGrandTotal();
     $items = $order->getAllVisibleItems();
     $orderId = $order->getIncrementId();
     $quoteId = $order->getQuoteId();
     $currency = $order->getOrderCurrencyCode();
     $returnUrl = $url->getUrl('paynl/checkout/finish/');
     $exchangeUrl = $url->getUrl('paynl/checkout/exchange/');
     $paymentOptionId = $this->getPaymentOptionId();
     $arrBillingAddress = $order->getBillingAddress();
     if ($arrBillingAddress) {
         $arrBillingAddress = $arrBillingAddress->toArray();
         $enduser = array('initials' => substr($arrBillingAddress['firstname'], 0, 1), 'lastName' => $arrBillingAddress['lastname'], 'phoneNumber' => $arrBillingAddress['telephone'], 'emailAddress' => $arrBillingAddress['email']);
         $invoiceAddress = array('initials' => substr($arrBillingAddress['firstname'], 0, 1), 'lastName' => $arrBillingAddress['lastname']);
         $arrAddress = \Paynl\Helper::splitAddress($arrBillingAddress['street']);
         $invoiceAddress['streetName'] = $arrAddress[0];
         $invoiceAddress['houseNumber'] = $arrAddress[1];
         $invoiceAddress['zipCode'] = $arrBillingAddress['postcode'];
         $invoiceAddress['city'] = $arrBillingAddress['city'];
         $invoiceAddress['country'] = $arrBillingAddress['country_id'];
     }
     $arrShippingAddress = $order->getShippingAddress();
     if ($arrShippingAddress) {
         $arrShippingAddress = $arrShippingAddress->toArray();
         $shippingAddress = array('initials' => substr($arrShippingAddress['firstname'], 0, 1), 'lastName' => $arrShippingAddress['lastname']);
         $arrAddress2 = \Paynl\Helper::splitAddress($arrShippingAddress['street']);
         $shippingAddress['streetName'] = $arrAddress2[0];
         $shippingAddress['houseNumber'] = $arrAddress2[1];
         $shippingAddress['zipCode'] = $arrShippingAddress['postcode'];
         $shippingAddress['city'] = $arrShippingAddress['city'];
         $shippingAddress['country'] = $arrShippingAddress['country_id'];
     }
     $data = array('amount' => $total, 'returnUrl' => $returnUrl, 'paymentMethod' => $paymentOptionId, 'bank' => $bankId, 'description' => $orderId, 'extra1' => $orderId, 'extra2' => $quoteId, 'exchangeUrl' => $exchangeUrl, 'currency' => $currency);
     if (isset($shippingAddress)) {
         $data['address'] = $shippingAddress;
     }
     if (isset($invoiceAddress)) {
         $data['invoiceAddress'] = $invoiceAddress;
     }
     if (isset($enduser)) {
         $data['enduser'] = $enduser;
     }
     $arrProducts = array();
     foreach ($items as $item) {
         $arrItem = $item->toArray();
         if ($arrItem['price_incl_tax'] != null) {
             // taxamount is not valid, because on discount it returns the taxamount after discount
             $taxAmount = $arrItem['price_incl_tax'] - $arrItem['price'];
             $product = array('id' => $arrItem['product_id'], 'name' => $arrItem['name'], 'price' => $arrItem['price_incl_tax'], 'qty' => $arrItem['qty_ordered'], 'tax' => $taxAmount);
         }
         $arrProducts[] = $product;
     }
     //shipping
     $shippingCost = $order->getShippingInclTax();
     $shippingTax = $order->getShippingTaxAmount();
     $shippingDescription = $order->getShippingDescription();
     $arrProducts[] = array('id' => 'shipping', 'name' => $shippingDescription, 'price' => $shippingCost, 'qty' => 1, 'tax' => $shippingTax);
     // kortingen
     $discount = $order->getDiscountAmount();
     $discountDescription = $order->getDiscountDescription();
     if ($discount != 0) {
         $arrProducts[] = array('id' => 'discount', 'name' => $discountDescription, 'price' => $discount, 'qty' => 1, 'tax' => $order->getDiscountTaxCompensationAmount() * -1);
     }
     $data['products'] = $arrProducts;
     if ($config->isTestMode()) {
         $data['testmode'] = 1;
     }
     $data['ipaddress'] = $order->getRemoteIp();
     $transaction = \Paynl\Transaction::start($data);
     return $transaction->getRedirectUrl();
 }
Example #4
0
 /**
  * @param \Magento\Sales\Model\Order $order
  * @return string
  */
 protected function _getReceiptOrderLines(\Magento\Sales\Model\Order $order)
 {
     $myReceiptOrderLines = "";
     $currency = $order->getOrderCurrencyCode();
     $formattedAmountValue = $this->_currencyFactory->create()->format($order->getGrandTotal(), ['display' => \Magento\Framework\Currency::NO_SYMBOL], false);
     $taxAmount = $order->getTaxAmount();
     $formattedTaxAmount = $this->_currencyFactory->create()->format($taxAmount, ['display' => \Magento\Framework\Currency::NO_SYMBOL], false);
     $myReceiptOrderLines .= "---||C\n" . "====== YOUR ORDER DETAILS ======||CB\n" . "---||C\n" . " No. Description |Piece  Subtotal|\n";
     foreach ($order->getItemsCollection() as $item) {
         //skip dummies
         if ($item->isDummy()) {
             continue;
         }
         $singlePriceFormat = $this->_currencyFactory->create()->format($item->getPriceInclTax(), ['display' => \Magento\Framework\Currency::NO_SYMBOL], false);
         $itemAmount = $item->getPriceInclTax() * (int) $item->getQtyOrdered();
         $itemAmountFormat = $this->_currencyFactory->create()->format($itemAmount, ['display' => \Magento\Framework\Currency::NO_SYMBOL], false);
         $myReceiptOrderLines .= "  " . (int) $item->getQtyOrdered() . "  " . trim(substr($item->getName(), 0, 25)) . "| " . $currency . " " . $singlePriceFormat . "  " . $currency . " " . $itemAmountFormat . "|\n";
     }
     //discount cost
     if ($order->getDiscountAmount() > 0 || $order->getDiscountAmount() < 0) {
         $discountAmountFormat = $this->_currencyFactory->create()->format($order->getDiscountAmount(), ['display' => \Magento\Framework\Currency::NO_SYMBOL], false);
         $myReceiptOrderLines .= "  " . 1 . " " . $this->__('Total Discount') . "| " . $currency . " " . $discountAmountFormat . "|\n";
     }
     //shipping cost
     if ($order->getShippingAmount() > 0 || $order->getShippingTaxAmount() > 0) {
         $shippingAmountFormat = $this->_currencyFactory->create()->format($order->getShippingAmount(), ['display' => \Magento\Framework\Currency::NO_SYMBOL], false);
         $myReceiptOrderLines .= "  " . 1 . " " . $order->getShippingDescription() . "| " . $currency . " " . $shippingAmountFormat . "|\n";
     }
     if ($order->getPaymentFeeAmount() > 0) {
         $paymentFeeAmount = $this->_currencyFactory->create()->format($order->getPaymentFeeAmount(), ['display' => \Magento\Framework\Currency::NO_SYMBOL], false);
         $myReceiptOrderLines .= "  " . 1 . " " . $this->__('Payment Fee') . "| " . $currency . " " . $paymentFeeAmount . "|\n";
     }
     $myReceiptOrderLines .= "|--------|\n" . "|Order Total:  " . $currency . " " . $formattedAmountValue . "|B\n" . "|Tax:  " . $currency . " " . $formattedTaxAmount . "|B\n" . "||C\n";
     /*
      * New header for card details section!
      * Default location is After Header so simply add to Order Details as separator
      */
     $myReceiptOrderLines .= "---||C\n" . "====== YOUR PAYMENT DETAILS ======||CB\n" . "---||C\n";
     return $myReceiptOrderLines;
 }