getPrefix().$product_ids; $taxRate = $this->getTaxRate($taxRate) ; $initialPrice = $price; $initialTax = $tax; $price = $this->calculatePrice($price, $product_name, $ean, $sku, $prod_cod1); $tax = $this->calculateTax($price, $tax, $taxRate); if(!empty($prod_cod1) && in_array($prod_cod1, array_column($this->remoteProducts, 'Alt_Cod'))) { $index = array_search($prod_cod1, array_column($this->remoteProducts, 'Alt_Cod')); } if(!empty($ean) && in_array($ean, array_column($this->remoteProducts, 'Cod_EAN'))) { $index = array_search($ean, array_column($this->remoteProducts, 'Cod_EAN')); } if(!empty($sku) && in_array($sku, array_column($this->remoteProducts, 'Cod_SKU'))) { $index = array_search($sku, array_column($this->remoteProducts, 'Cod_SKU')); } if(!empty($product_name) && in_array($product_name, array_column($this->remoteProducts, 'Denumire'))) { $index = array_search($product_name, array_column($this->remoteProducts, 'Denumire')); } if(isset($index)) { $product_name = isset($this->remoteProducts[$index]['Denumire']) ? $this->remoteProducts[$index]['Denumire'] : $product_name; $ean = isset($this->remoteProducts[$index]['Cod_EAN']) ? $this->remoteProducts[$index]['Cod_EAN'] : $ean; $sku = isset($this->remoteProducts[$index]['Cod_SKU']) ? $this->remoteProducts[$index]['Cod_SKU'] : $sku; $prod_cod1 = (isset($this->remoteProducts[$index]['Alt_Cod']) && !empty($this->remoteProducts[$index]['Alt_Cod'])) ? $this->remoteProducts[$index]['Alt_Cod'] : $prod_cod1; } $pretFtva = $this->getPretftva($price, $taxRate, $tax, $taxIncluded); $pretCtva = $this->getPretctva($price, $taxRate, $tax, $taxIncluded); $orderProduct->setFacturiProdNume($this->stripSpecialChars($product_name)); $orderProduct->setFacturiProdMoneda($currency_code); $orderProduct->setFacturiProdPretftva($pretFtva); $orderProduct->setFacturiProdPretctva($pretCtva); $orderProduct->setFacturiProdTva($this->getTaxName($taxRate)); $orderProduct->setFacturiProdCant($quantity); $orderProduct->setFacturiProdVal($pretFtva * $quantity); $orderProduct->setFacturiProdValTva(($pretCtva - $pretFtva) * $quantity); $orderProduct->setFacturiProdValTot($pretCtva * $quantity); $orderProduct->setFacturiProdUm(self::UM); $orderProduct->setProdCod($ean); $orderProduct->setProdSku($sku); $orderProduct->setProdCod1($prod_cod1); $orderProduct->setProdCodCautare('all'); if($this->withDiscountOption == \Core\App\Factory\SettingsFactory::SYNC_ENABLED) { return array((array)$orderProduct); } else { $discount = $initialPrice - $price; if($discount < 0) { $tax = $tax - $initialTax; $discountFtva = $this->getPretftva($discount, $taxRate, $tax, $taxIncluded); $discountCtva = $this->getPretctva($discount, $taxRate, $tax, $taxIncluded); if($tax == 0) { $tax = $discountCtva - $discountFtva; } $orderProductDiscount = new \Core\App\Entity\OrderItem(); $orderProductDiscount->setFacturiProdNume('Discount la: ' . $this->stripSpecialChars($product_name)); $orderProductDiscount->setFacturiProdMoneda($currency_code); $orderProductDiscount->setFacturiProdPretftva($discountFtva); $orderProductDiscount->setFacturiProdPretctva($discountCtva); $orderProductDiscount->setFacturiProdTva($taxRate . '%'); $orderProductDiscount->setFacturiProdCant($quantity); $orderProductDiscount->setFacturiProdVal($discountFtva * $quantity); $orderProductDiscount->setFacturiProdValTva($tax * $quantity); $orderProductDiscount->setFacturiProdValTot($discountCtva * $quantity); $orderProductDiscount->setProdCodCautare('all'); return array((array)$orderProduct, (array)$orderProductDiscount); } else { return array((array)$orderProduct); } } } public function createOrderTax( $product_name, $currency_code, $price, $tax = 0 ) { if($price != 0) { $taxValue = round(($tax * 100)/$price); } else { $taxValue = 0; } $orderTax = new \Core\App\Entity\OrderItem(); $orderTax->setFacturiProdNume($this->stripSpecialChars($product_name)); $orderTax->setFacturiProdMoneda($currency_code); $orderTax->setFacturiProdPretftva($price); $orderTax->setFacturiProdPretctva($price + $tax); $orderTax->setFacturiProdTva($taxValue . '%'); $orderTax->setFacturiProdCant(1); $orderTax->setFacturiProdVal($price); $orderTax->setFacturiProdValTva($tax); $orderTax->setFacturiProdValTot($price + $tax); $orderTax->setProdCodCautare('all'); return $orderTax; } protected function getPretftva($price, $taxRate, $tax, $taxIncluded) { if($taxIncluded) { if($tax != 0) { return ($price - $tax); } else { return ($price / (1 + ($taxRate/100))); } } else { return $price; } } protected function getPretctva($price, $taxRate, $tax, $taxIncluded) { if(!$taxIncluded) { if($tax != 0) { return ($price + $tax); } else { return ($price * (1 + ($taxRate/100))); } } else { return $price; } } public function setRemoteProducts($remoteProducts) { $this->remoteProducts = $remoteProducts; } public function setLocalProducts($localProducts) { $this->localProducts = $localProducts; } public function setWithDiscountOption($withDiscountOption) { $this->withDiscountOption = $withDiscountOption; } public function calculatePrice($price, $product_name, $ean, $sku, $prod_cod1) { if($this->withDiscountOption == \Core\App\Factory\SettingsFactory::SYNC_ENABLED) { return $price; } if (!empty($product_name) && in_array($product_name, array_column($this->localProducts, 'prod_nume'))) { $index = array_search($product_name, array_column($this->localProducts, 'prod_nume')); $price = $this->localProducts[$index]['prod_pret_ftva']; } if (!empty($prod_cod1) && in_array($prod_cod1, array_column($this->localProducts, 'prod_cod1'))) { $index = array_search($prod_cod1, array_column($this->localProducts, 'prod_cod1')); $price = $this->localProducts[$index]['prod_pret_ftva']; } if (!empty($sku) && in_array($sku, array_column($this->localProducts, 'prod_sku'))) { $index = array_search($sku, array_column($this->localProducts, 'prod_sku')); $price = $this->localProducts[$index]['prod_pret_ftva']; } if (!empty($ean) && in_array($ean, array_column($this->localProducts, 'prod_cod'))) { $index = array_search($sku, array_column($this->localProducts, 'prod_cod')); $price = $this->localProducts[$index]['prod_pret_ftva']; } return $price; } public function calculateTax($price, $tax, $taxRate) { if($this->withDiscountOption == \Core\App\Factory\SettingsFactory::SYNC_ENABLED) { return $tax; } return ($price * $tax)/100; } }