private function cartToOrder($items, $foreignKey) { $this->alterTable('order'); foreach ($items as $item) { $order = new Order(); $order->id_carrier = (int) $item['id_carrier']; $order->id_customer = (int) $foreignKey['id_customer'][$item['id_customer']]; $order->id_address_invoice = (int) $foreignKey['id_address_invoice'][$item['id_address_invoice']]; $order->id_address_delivery = (int) $foreignKey['id_address_delivery'][$item['id_address_delivery']]; $vat_address = new Address((int) $foreignKey['id_address_delivery'][$item['id_address_delivery']]); $id_zone = Address::getZoneById((int) $vat_address->id); $order->id_currency = (int) $item['id_currency']; $order->id_lang = (int) $item['id_lang']; $order->id_cart = (int) $foreignKey['id_cart'][$item['id_cart']]; $customer = new Customer((int) $order->id_customer); $order->secure_key = pSQL($customer->secure_key); if (!strlen(trim($item['payment']))) { $order->payment = 'payment' . Tools::getValue('moduleName'); } else { $order->payment = utf8_encode(html_entity_decode(strip_tags(Tools::substr($item['payment'], 0, 32)))); } if (isset($this->name)) { $order->module = $this->name; } $carrier = new Carrier((int) $item['id_carrier']); $currency = new Currency($order->id_currency); $order->conversion_rate = !empty($currency->conversion_rate) ? $currency->conversion_rate : 1; $order->total_products = (double) $item['total_products']; $order->total_products_wt = (double) $item['total_products_wt']; $order->total_discounts = (double) $item['total_discounts']; $order->total_shipping = (double) $item['total_shipping']; $order->carrier_tax_rate = (double) $carrier->getTaxesRate(new Address((int) $item[Configuration::get('PS_TAX_ADDRESS_TYPE')])); $order->total_wrapping = (double) $item['total_wrapping']; $order->total_paid = (double) $item['total_paid']; $order->total_paid_real = (double) $item['total_paid_real']; $order->invoice_date = '0000-00-00 00:00:00'; $order->delivery_date = '0000-00-00 00:00:00'; if (array_key_exists('date_add', $item)) { $order->date_add = $item['date_add']; } if (array_key_exists('date_upd', $item)) { $order->date_upd = $item['date_upd']; } //test valid paid if ($item['total_paid'] == $item['total_paid_real']) { $order->valid = 1; } else { $order->valid = 0; } $order->save(false, false); $this->saveMatchId('order', (int) $order->id, (int) $item['id_cart']); } }
private function updateOrder($neteven_order, $neteven_orders) { if ($id_order = Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('SELECT `id_order` FROM `' . _DB_PREFIX_ . 'orders_gateway` WHERE `id_order_neteven` = ' . (int) $neteven_order->OrderID)) { $total_wt = 0; $total_product = 0; $total_product_wt = 0; foreach ($neteven_orders as $neteven_order_temp) { if (in_array($neteven_order_temp->Status, $this->getValue('t_list_order_status_retraite_order'))) { continue; } if ($neteven_order_temp->OrderID == $neteven_order->OrderID) { $total_product += floatval($neteven_order_temp->Price->_) - floatval($neteven_order_temp->VAT->_); $total_product_wt += floatval($neteven_order_temp->Price->_); } } $order = new Order((int) $id_order); if (!$order->id_carrier) { $order->id_carrier = (int) Configuration::get('PS_CARRIER_DEFAULT'); } $carrier = new Carrier((int) $order->id_carrier); $carrier_tax_rate = $carrier->getTaxesRate(new Address($order->{Configuration::get('PS_TAX_ADDRESS_TYPE')})); $total_shipping_tax_excl = $carrier_tax_rate ? $neteven_order->OrderShippingCost->_ / ($carrier_tax_rate / 100) : $neteven_order->OrderShippingCost->_; $total_wt = $total_product_wt + $neteven_order->OrderShippingCost->_; $total = $total_product + $total_shipping_tax_excl; $order->total_products = (double) number_format($total_product, 2, '.', ''); $order->total_products_wt = (double) number_format($total_product_wt, 2, '.', ''); $order->total_shipping_tax_excl = (double) number_format($total_shipping_tax_excl, 2, '.', ''); $order->total_shipping_tax_incl = (double) number_format($neteven_order->OrderShippingCost->_, 2, '.', ''); $order->total_shipping = (double) number_format($neteven_order->OrderShippingCost->_, 2, '.', ''); $order->total_paid_tax_excl = (double) number_format($total, 2, '.', ''); $order->total_paid_tax_incl = (double) number_format($total_wt, 2, '.', ''); $order->total_paid_real = (double) number_format($total_wt, 2, '.', ''); $order->total_paid = (double) number_format($total_wt, 2, '.', ''); $order->carrier_tax_rate = (double) number_format($carrier_tax_rate, 2, '.', ''); $order->save(); } }
/** * create carriers * * @return mixed */ protected function _getCarriers() { $resultsCarrier = array(); $mobileCarrierUse = unserialize(base64_decode(Configuration::get('SG_MOBILE_CARRIER'))); if ($this->_deliveryAddress) { foreach (Carrier::getCarriersForOrder(Address::getZoneById($this->_deliveryAddress->id), $this->getPlugin()->getContext()->customer->getGroups(), $this->getPlugin()->getContext()->cart) as $carrier) { /** @var CarrierCore $carrierItem */ $carrierItem = new Carrier($carrier['id_carrier'], $this->getPlugin()->getContext()->language->id); $taxRulesGroup = new TaxRulesGroup($carrierItem->id_tax_rules_group); $resultCarrier = new ShopgateShippingMethod(); /** * check is defined as mobile carrier */ $idColumn = version_compare(_PS_VERSION_, '1.5.0.1', '>=') ? 'id_reference' : 'id_carrier'; if (is_array($mobileCarrierUse) && empty($mobileCarrierUse[$carrier[$idColumn]])) { continue; } $resultCarrier->setId($carrier['id_carrier']); $resultCarrier->setTitle($carrier['name']); $resultCarrier->setDescription($carrier['delay']); $resultCarrier->setSortOrder($carrier['position']); $resultCarrier->setAmount($carrier['price_tax_exc']); $resultCarrier->setAmountWithTax($carrier['price']); $resultCarrier->setTaxClass($taxRulesGroup->name); if (version_compare(_PS_VERSION_, '1.5.0', '<')) { $carrierTax = Tax::getCarrierTaxRate($carrierItem->id, $this->_deliveryAddress->id); } else { $carrierTax = $carrierItem->getTaxesRate($this->_deliveryAddress); } $resultCarrier->setTaxPercent($carrierTax); $resultCarrier->setInternalShippingInfo(serialize(array('carrierId' => $carrier['id_carrier']))); $resultsCarrier[] = $resultCarrier; } } return $resultsCarrier; }
function getCarriersByZoneID($id_zone) { global $cookie, $cart; $id_groups = array(1); $islogged = _PS_VERSION_ > '1.5' ? Context::getContext()->customer->isLogged() : $cookie->isLogged(); if ($islogged) { $customer = new Customer((int) $cookie->id_customer); $id_groups = $customer->getGroups(); } $result = Carrier::getCarriers(intval($cookie->id_lang), true, false, intval($id_zone), $id_groups, Carrier::ALL_CARRIERS); $resultsArray = array(); foreach ($result as $k => $row) { $carrier = new Carrier(intval($row['id_carrier'])); $shipping_method = $carrier->getShippingMethod(); if ($shipping_method == Carrier::SHIPPING_METHOD_WEIGHT and $carrier->getMaxDeliveryPriceByWeight($id_zone) === false or $shipping_method == Carrier::SHIPPING_METHOD_PRICE and $carrier->getMaxDeliveryPriceByPrice($id_zone) === false) { unset($result[$k]); continue; } if ($row['range_behavior']) { if (Configuration::get('PS_SHIPPING_METHOD') and !Carrier::checkDeliveryPriceByWeight($row['id_carrier'], $cart->getTotalWeight(), $id_zone) or !Configuration::get('PS_SHIPPING_METHOD') and !Carrier::checkDeliveryPriceByPrice($row['id_carrier'], $cart->getOrderTotal(true, Cart::BOTH_WITHOUT_SHIPPING), $id_zone)) { unset($result[$k]); continue; } } $row['name'] = strval($row['name']) != '0' ? $row['name'] : Configuration::get('PS_SHOP_NAME'); $method = $carrier->getShippingMethod(); $row['price'] = 0; if ($method == Carrier::SHIPPING_METHOD_PRICE) { $row['price'] = $carrier->getDeliveryPriceByPrice($cart->getOrderTotal(Cart::BOTH_WITHOUT_SHIPPING), $id_zone); } else { if ($method == Carrier::SHIPPING_METHOD_WEIGHT) { $row['price'] = $carrier->getDeliveryPriceByWeight($cart->getTotalWeight(), $id_zone); } } if ((int) $row['shipping_handling'] == 1) { $row['price'] = (double) $row['price'] + (double) Configuration::get('PS_SHIPPING_HANDLING'); } if ((int) $row['is_free']) { $row['price'] = 0; } $row['price_tax_exc'] = $row['price']; $address = new Address($cart->id_address_delivery); $tax_rate = $carrier->getTaxesRate($address); $currency = new Currency($cart->id_currency); $row['price'] = $row['price'] * $currency->conversion_rate * (1 + (double) $tax_rate / 100); $row['img'] = file_exists(_PS_SHIP_IMG_DIR_ . intval($row['id_carrier']) . '.jpg') ? _THEME_SHIP_DIR_ . intval($row['id_carrier']) . '.jpg' : ''; $resultsArray[] = $row; } return $resultsArray; }
/** * Creating of the PrestaShop order * @param $neteven_order * @param $neteven_orders * @return int */ private function createOrder($neteven_order, $neteven_orders) { if (constant('_PS_VERSION_') >= 1.5) { include_once dirname(__FILE__) . '/OrderInvoiceOverride.php'; } // Treatment of customer $id_customer = $this->addCustomerInBDD($neteven_order); if ($this->time_analyse) { $this->current_time_2 = time(); Toolbox::displayDebugMessage(self::getL('Customer') . ' : ' . ((int) $this->current_time_2 - (int) $this->current_time_0) . 's'); } // Treatment of addresses of the customer $id_address_billing = $this->addAddresseInBDD($neteven_order->OrderID, $neteven_order->BillingAddress, 'facturation', $id_customer); $id_address_shipping = $this->addAddresseInBDD($neteven_order->OrderID, $neteven_order->ShippingAddress, 'livraison', $id_customer); if ($this->time_analyse) { $this->current_time_0 = time(); Toolbox::displayDebugMessage(self::getL('Address') . ' : ' . ((int) $this->current_time_0 - (int) $this->current_time_2) . 's'); } // Get secure key of customer $secure_key_default = md5(uniqid(rand(), true)); if ($secure_key = Db::getInstance()->getValue('SELECT `secure_key` FROM `' . _DB_PREFIX_ . 'customer` WHERE `id_customer` = ' . (int) $id_customer)) { $secure_key_default = $secure_key; } else { Toolbox::addLogLine(self::getL('Problem with a secure key recovery for the customer / NetEven Order Id') . ' ' . $neteven_order->OrderID); } // Treatment of order informations $total_wt = 0; $total_product = 0; $total_product_wt = 0; foreach ($neteven_orders as $neteven_order_temp) { if ($neteven_order_temp->OrderID == $neteven_order->OrderID) { if (in_array($neteven_order_temp->Status, $this->getValue('t_list_order_status'))) { continue; } $total_product += floatval($neteven_order_temp->Price->_) - floatval($neteven_order_temp->VAT->_); $total_product_wt += floatval($neteven_order_temp->Price->_); } } $total_wt = $total_product_wt + $neteven_order->OrderShippingCost->_; $date_now = date('Y-m-d H:i:s'); if ($this->time_analyse) { $this->current_time_2 = time(); Toolbox::displayDebugMessage(self::getL('Order total') . ' : ' . ((int) $this->current_time_2 - (int) $this->current_time_0) . 's'); } // Creating and add order in PrestaShop if (!($res = Db::getInstance()->getRow('SELECT * FROM `' . _DB_PREFIX_ . 'orders_gateway` WHERE `id_order_neteven` = ' . (int) $neteven_order->OrderID . ' AND `id_order_detail_neteven` = 0'))) { // Creating cart $cart = new Cart(); $cart->id_address_delivery = (int) $id_address_shipping; $cart->id_address_invoice = (int) $id_address_billing; $cart->id_currency = (int) Configuration::get('PS_CURRENCY_DEFAULT'); $cart->id_customer = (int) $id_customer; $cart->id_lang = (int) Configuration::get('PS_LANG_DEFAULT'); $cart->id_carrier = (int) Configuration::get('PS_CARRIER_DEFAULT'); $cart->recyclable = 1; $cart->gift = 0; $cart->gift_message = ''; $cart->date_add = $date_now; $cart->secure_key = $secure_key_default; $cart->date_upd = $date_now; if (!$cart->add()) { Toolbox::addLogLine(self::getL('Failed for cart creation / NetEven Order Id') . ' ' . (int) $neteven_order->OrderID); } if ($this->time_analyse) { $this->current_time_0 = time(); Toolbox::displayDebugMessage(self::getL('Cart') . ' : ' . ((int) $this->current_time_0 - (int) $this->current_time_2) . 's'); } // Creating order $id_order_temp = 0; $order = new Order(); $order->id_carrier = Configuration::get('PS_CARRIER_DEFAULT'); $order->id_lang = Configuration::get('PS_LANG_DEFAULT'); $order->id_customer = $id_customer; $order->id_cart = $cart->id; $order->id_currency = Configuration::get('PS_CURRENCY_DEFAULT'); $order->id_address_delivery = $id_address_shipping; $order->id_address_invoice = $id_address_billing; $order->secure_key = $secure_key_default; $order->payment = $neteven_order->PaymentMethod; $order->conversion_rate = 1; $order->module = 'nqgatewayneteven'; $order->recyclable = 0; $order->gift = 0; $order->gift_message = ''; $order->shipping_number = ''; $order->reference = $neteven_order->MarketPlaceOrderId; $carrier = new Carrier((int) $order->id_carrier); $carrier_tax_rate = $carrier->getTaxesRate(new Address($order->{Configuration::get('PS_TAX_ADDRESS_TYPE')})); $total_shipping_tax_excl = $carrier_tax_rate ? $neteven_order->OrderShippingCost->_ / ($carrier_tax_rate / 100) : $neteven_order->OrderShippingCost->_; $total_wt = $total_product_wt + $neteven_order->OrderShippingCost->_; $total = $total_product + $total_shipping_tax_excl; $order->total_discounts_tax_excl = 0; $order->total_discounts_tax_incl = 0; $order->total_discounts = 0; $order->total_wrapping_tax_excl = 0; $order->total_wrapping_tax_incl = 0; $order->total_wrapping = 0; $order->total_products = (double) number_format($total_product, 2); $order->total_products_wt = (double) number_format($total_product_wt, 2); $order->total_shipping_tax_excl = (double) number_format($total_shipping_tax_excl, 2); $order->total_shipping_tax_incl = (double) number_format($neteven_order->OrderShippingCost->_, 2); $order->total_shipping = (double) number_format($neteven_order->OrderShippingCost->_, 2); $order->total_paid_tax_excl = (double) number_format($total, 2); $order->total_paid_tax_incl = (double) number_format($total_wt, 2); $order->total_paid_real = (double) number_format($total_wt, 2); $order->total_paid = (double) number_format($total_wt, 2); $order->carrier_tax_rate = 0; $order->total_wrapping = 0; $order->invoice_number = 0; $order->delivery_number = 0; $order->invoice_date = $date_now; $order->delivery_date = $date_now; $order->valid = 1; $order->date_add = $date_now; $order->date_upd = $date_now; if (!$order->add()) { Toolbox::addLogLine(self::getL('Failed for order creation / NetEven Order Id') . ' ' . (int) $neteven_order->OrderID); } else { $id_order_temp = $order->id; Db::getInstance()->Execute('INSERT INTO `' . _DB_PREFIX_ . 'order_carrier` (`id_order`, `id_carrier`, `id_order_invoice`, `weight`, `shipping_cost_tax_excl`, `shipping_cost_tax_incl`, `tracking_number`, `date_add`) VALUES (' . (int) $id_order_temp . ', ' . (int) Configuration::get('PS_CARRIER_DEFAULT') . ', 0, 0, 0, 0, 0,"' . pSQL(date('Y-m-d H:i:s')) . '")'); Db::getInstance()->Execute('INSERT INTO `' . _DB_PREFIX_ . 'message` (`id_order`, `message`, `date_add`) VALUES (' . (int) $id_order_temp . ', "Numéro de commande ' . $neteven_order->MarketPlaceName . '", "' . pSQL(date('Y-m-d H:i:s')) . '")'); if ($this->time_analyse) { $this->current_time_2 = time(); Toolbox::displayDebugMessage(self::getL('Order') . ' : ' . ((int) $this->current_time_2 - (int) $this->current_time_0) . 's'); } Toolbox::addLogLine(self::getL('Add order Id') . ' ' . (int) $id_order_temp . ' ' . self::getL('NetEven Order Id') . ' ' . (int) $neteven_order->OrderID); // Update order state in order $order_state = array_merge($this->getValue('order_state_before'), array($this->getValue('id_order_state_neteven')), $this->getValue('order_state_after')); if (is_array($order_state) && count($order_state) > 0) { foreach ($order_state as $id_order_state) { if (class_exists('OrderInvoiceOverride' && method_exists('OrderInvoiceOverride', 'clearCacheTotalPaid'))) { OrderInvoiceOverride::clearCacheTotalPaid(); } $new_history = new OrderHistory(); $new_history->id_order = (int) $id_order_temp; $new_history->changeIdOrderState((int) $id_order_state, $id_order_temp); $new_history->addWithemail(true, array()); Toolbox::addLogLine(self::getL('Save order state Id') . ' ' . (int) $id_order_state . ' ' . self::getL('NetEven Order Id') . ' ' . (int) $neteven_order->OrderID); } } if ($this->time_analyse) { $this->current_time_0 = time(); Toolbox::displayDebugMessage(self::getL('History') . ' : ' . ((int) $this->current_time_0 - (int) $this->current_time_2) . 's'); } // Insert order in orders_gateway table if (!Db::getInstance()->Execute('INSERT INTO `' . _DB_PREFIX_ . 'orders_gateway` (`id_order_neteven`, `id_order`, `id_order_detail_neteven`, `date_add`, `date_upd`) VALUES (' . (int) $neteven_order->OrderID . ', ' . (int) $id_order_temp . ', 0, "' . pSQL($date_now) . '", "' . pSQL($date_now) . '")')) { Toolbox::addLogLine(self::getL('Failed for save export NetEven order Id') . ' ' . (int) $neteven_order->OrderID); } else { Toolbox::addLogLine(self::getL('Save export NetEven order Id') . ' ' . (int) $neteven_order->OrderID); } } } else { $id_order_temp = $res['id_order']; Toolbox::addLogLine(self::getL('Get already exported order Id') . ' ' . $res['id_order'] . ' ' . self::getL('NetEven Order Id') . ' ' . (int) $neteven_order->OrderID); } return $id_order_temp; }