// Miss on last commit
This commit is contained in:
-1346
File diff suppressed because it is too large
Load Diff
@@ -1,71 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 6844 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
class OrderCartRuleCore extends ObjectModel
|
||||
{
|
||||
/** @var integer */
|
||||
public $id_order_cart_rule;
|
||||
|
||||
/** @var integer */
|
||||
public $id_order;
|
||||
|
||||
/** @var integer */
|
||||
public $id_cart_rule;
|
||||
|
||||
/** @var string */
|
||||
public $name;
|
||||
|
||||
/** @var integer */
|
||||
public $value;
|
||||
|
||||
protected $tables = array ('order_cart_rule');
|
||||
|
||||
protected $fieldsRequired = array ('id_order', 'name', 'value');
|
||||
protected $fieldsValidate = array ('id_order' => 'isUnsignedId', 'name' => 'isGenericName', 'value' => 'isInt');
|
||||
|
||||
/* MySQL does not allow 'order detail' for a table name */
|
||||
protected $table = 'order_cart_rule';
|
||||
protected $identifier = 'id_order_cart_rule';
|
||||
|
||||
protected $webserviceParameters = array(
|
||||
'fields' => array(
|
||||
'id_order' => array('xlink_resource' => 'orders'),
|
||||
),
|
||||
);
|
||||
|
||||
public function getFields()
|
||||
{
|
||||
$this->validateFields();
|
||||
|
||||
$fields['id_order'] = (int)($this->id_order);
|
||||
$fields['name'] = pSQL($this->name);
|
||||
$fields['value'] = (int)($this->value);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,551 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 6844 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
class OrderDetailCore extends ObjectModel
|
||||
{
|
||||
/** @var integer */
|
||||
public $id_order_detail;
|
||||
|
||||
/** @var integer */
|
||||
public $id_order;
|
||||
|
||||
/** @var integer */
|
||||
public $product_id;
|
||||
|
||||
/** @var integer */
|
||||
public $product_attribute_id;
|
||||
|
||||
/** @var string */
|
||||
public $product_name;
|
||||
|
||||
/** @var integer */
|
||||
public $product_quantity;
|
||||
|
||||
/** @var integer */
|
||||
public $product_quantity_in_stock;
|
||||
|
||||
/** @var integer */
|
||||
public $product_quantity_return;
|
||||
|
||||
/** @var integer */
|
||||
public $product_quantity_refunded;
|
||||
|
||||
/** @var integer */
|
||||
public $product_quantity_reinjected;
|
||||
|
||||
/** @var float */
|
||||
public $product_price;
|
||||
|
||||
/** @var float */
|
||||
public $unit_price_tax_incl;
|
||||
|
||||
/** @var float */
|
||||
public $unit_price_tax_excl;
|
||||
|
||||
/** @var float */
|
||||
public $total_price_tax_incl;
|
||||
|
||||
/** @var float */
|
||||
public $total_price_tax_excl;
|
||||
|
||||
/** @var float */
|
||||
public $reduction_percent;
|
||||
|
||||
/** @var float */
|
||||
public $reduction_amount;
|
||||
|
||||
/** @var float */
|
||||
public $group_reduction;
|
||||
|
||||
/** @var float */
|
||||
public $product_quantity_discount;
|
||||
|
||||
/** @var string */
|
||||
public $product_ean13;
|
||||
|
||||
/** @var string */
|
||||
public $product_upc;
|
||||
|
||||
/** @var string */
|
||||
public $product_reference;
|
||||
|
||||
/** @var string */
|
||||
public $product_supplier_reference;
|
||||
|
||||
/** @var float */
|
||||
public $product_weight;
|
||||
|
||||
/** @var float */
|
||||
public $ecotax;
|
||||
|
||||
/** @var float */
|
||||
public $ecotax_tax_rate;
|
||||
|
||||
/** @var integer */
|
||||
public $discount_quantity_applied;
|
||||
|
||||
/** @var string */
|
||||
public $download_hash;
|
||||
|
||||
/** @var integer */
|
||||
public $download_nb;
|
||||
|
||||
/** @var date */
|
||||
public $download_deadline;
|
||||
|
||||
/** @var string $tax_name **/
|
||||
public $tax_name;
|
||||
|
||||
/** @var float $tax_rate **/
|
||||
public $tax_rate;
|
||||
|
||||
protected $tables = array('order_detail');
|
||||
|
||||
protected $fieldsRequired = array(
|
||||
'id_order',
|
||||
'product_name',
|
||||
'product_quantity',
|
||||
'product_price');
|
||||
|
||||
protected $fieldsValidate = array(
|
||||
'id_order' => 'isUnsignedId',
|
||||
'product_id' => 'isUnsignedId',
|
||||
'product_attribute_id' => 'isUnsignedId',
|
||||
'product_name' => 'isGenericName',
|
||||
'product_quantity' => 'isInt',
|
||||
'product_quantity_in_stock' => 'isInt',
|
||||
'product_quantity_return' => 'isUnsignedInt',
|
||||
'product_quantity_refunded' => 'isUnsignedInt',
|
||||
'product_quantity_reinjected' => 'isUnsignedInt',
|
||||
'product_price' => 'isPrice',
|
||||
'reduction_percent' => 'isFloat',
|
||||
'reduction_amount' => 'isPrice',
|
||||
'group_reduction' => 'isFloat',
|
||||
'product_quantity_discount' => 'isFloat',
|
||||
'product_ean13' => 'isEan13',
|
||||
'product_upc' => 'isUpc',
|
||||
'product_reference' => 'isReference',
|
||||
'product_supplier_reference' => 'isReference',
|
||||
'product_weight' => 'isFloat',
|
||||
'tax_name' => 'isGenericName',
|
||||
'tax_rate' => 'isFloat',
|
||||
'ecotax' => 'isFloat',
|
||||
'ecotax_tax_rate' => 'isFloat',
|
||||
'discount_quantity_applied' => 'isInt',
|
||||
'download_hash' => 'isGenericName',
|
||||
'download_nb' => 'isInt',
|
||||
'download_deadline' => 'isDateFormat',
|
||||
'unit_price_tax_incl' => 'isPrice',
|
||||
'unit_price_tax_excl' => 'isPrice',
|
||||
'total_price_tax_incl' => 'isPrice',
|
||||
'total_price_tax_excl' => 'isPrice'
|
||||
);
|
||||
|
||||
protected $table = 'order_detail';
|
||||
protected $identifier = 'id_order_detail';
|
||||
|
||||
protected $webserviceParameters = array(
|
||||
'fields' => array (
|
||||
'id_order' => array('xlink_resource' => 'orders'),
|
||||
'product_id' => array('xlink_resource' => 'products'),
|
||||
'product_attribute_id' => array('xlink_resource' => 'combinations'),
|
||||
'product_quantity_reinjected' => array(),
|
||||
'group_reduction' => array(),
|
||||
'discount_quantity_applied' => array(),
|
||||
'download_hash' => array(),
|
||||
'download_deadline' => array()
|
||||
)
|
||||
);
|
||||
|
||||
/** @var bool */
|
||||
protected $outOfStock = false;
|
||||
|
||||
/** @var TaxCalculator object */
|
||||
protected $tax_calculator = null;
|
||||
|
||||
/** @var Address object */
|
||||
protected $vat_address = null;
|
||||
|
||||
/** @var Address object */
|
||||
protected $specificPrice = null;
|
||||
|
||||
/** @var Customer object */
|
||||
protected $customer = null;
|
||||
|
||||
/** @var Context object */
|
||||
protected $context = null;
|
||||
|
||||
public function __construct($context = null)
|
||||
{
|
||||
$this->context = $context;
|
||||
}
|
||||
|
||||
public function getFields()
|
||||
{
|
||||
$this->validateFields();
|
||||
|
||||
$fields['id_order'] = (int)$this->id_order;
|
||||
$fields['product_id'] = (int)$this->product_id;
|
||||
$fields['product_attribute_id'] = (int)$this->product_attribute_id;
|
||||
$fields['product_name'] = pSQL($this->product_name);
|
||||
$fields['product_quantity'] = (int)$this->product_quantity;
|
||||
$fields['product_quantity_in_stock'] = (int)$this->product_quantity_in_stock;
|
||||
$fields['product_quantity_return'] = (int)$this->product_quantity_return;
|
||||
$fields['product_quantity_refunded'] = (int)$this->product_quantity_refunded;
|
||||
$fields['product_quantity_reinjected'] = (int)$this->product_quantity_reinjected;
|
||||
$fields['product_price'] = (float)$this->product_price;
|
||||
$fields['reduction_percent'] = (float)$this->reduction_percent;
|
||||
$fields['reduction_amount'] = (float)$this->reduction_amount;
|
||||
$fields['group_reduction'] = (float)$this->group_reduction;
|
||||
$fields['product_quantity_discount'] = (float)$this->product_quantity_discount;
|
||||
$fields['product_ean13'] = pSQL($this->product_ean13);
|
||||
$fields['product_upc'] = pSQL($this->product_upc);
|
||||
$fields['product_reference'] = pSQL($this->product_reference);
|
||||
$fields['product_supplier_reference'] = pSQL($this->product_reference);
|
||||
$fields['product_weight'] = (float)$this->product_weight;
|
||||
$fields['tax_name'] = pSQL($this->tax_name);
|
||||
$fields['tax_rate'] = (float)$this->tax_rate;
|
||||
$fields['ecotax'] = (float)$this->ecotax;
|
||||
$fields['ecotax_tax_rate'] = (float)$this->ecotax_tax_rate;
|
||||
$fields['download_hash'] = pSQL($this->download_hash);
|
||||
$fields['download_nb'] = (int)$this->download_nb;
|
||||
$fields['download_deadline'] = pSQL($this->download_deadline);
|
||||
$fields['unit_price_tax_incl'] = (float)$this->unit_price_tax_incl;
|
||||
$fields['unit_price_tax_excl'] = (float)$this->unit_price_tax_excl;
|
||||
$fields['total_price_tax_incl'] = (float)$this->total_price_tax_incl;
|
||||
$fields['total_price_tax_excl'] = (float)$this->total_price_tax_excl;
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
public static function getDownloadFromHash($hash)
|
||||
{
|
||||
if ($hash == '') return false;
|
||||
$sql = 'SELECT *
|
||||
FROM `'._DB_PREFIX_.'order_detail` od
|
||||
LEFT JOIN `'._DB_PREFIX_.'product_download` pd ON (od.`product_id`=pd.`id_product`)
|
||||
WHERE od.`download_hash` = \''.pSQL(strval($hash)).'\'
|
||||
AND od.`product_attribute_id` = pd.`id_product_attribute`
|
||||
AND pd.`active` = 1';
|
||||
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($sql);
|
||||
}
|
||||
|
||||
public static function incrementDownload($id_order_detail, $increment = 1)
|
||||
{
|
||||
$sql = 'UPDATE `'._DB_PREFIX_.'order_detail`
|
||||
SET `download_nb` = `download_nb` + '.(int)$increment.'
|
||||
WHERE `id_order_detail`= '.(int)$id_order_detail.'
|
||||
LIMIT 1';
|
||||
return Db::getInstance()->execute($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the tax calculator associated to this order detail.
|
||||
* @since 1.5.0.1
|
||||
* @return TaxCalculator
|
||||
*/
|
||||
public function getTaxCalculator()
|
||||
{
|
||||
return OrderDetail::getTaxCalculatorStatic($this->id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the tax calculator associated to this order_detail
|
||||
* @since 1.5.0.1
|
||||
* @param int $id_order_detail
|
||||
* @return TaxCalculator
|
||||
*/
|
||||
public static function getTaxCalculatorStatic($id_order_detail)
|
||||
{
|
||||
$sql = 'SELECT t.*, d.`tax_computation_method`
|
||||
FROM `'._DB_PREFIX_.'order_detail_tax` t
|
||||
LEFT JOIN `'._DB_PREFIX_.'order_detail` d ON (d.`id_order_detail` = t.`id_order_detail`)
|
||||
WHERE d.`id_order_detail` = '.(int)$id_order_detail;
|
||||
|
||||
$computation_method = 1;
|
||||
$taxes = array();
|
||||
if ($results = Db::getInstance()->executeS($sql))
|
||||
{
|
||||
foreach ($results as $result)
|
||||
$taxes[] = new Tax((int)$result['id_tax']);
|
||||
|
||||
$computation_method = $result['tax_computation_method'];
|
||||
}
|
||||
|
||||
return new TaxCalculator($taxes, $computation_method);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the tax calculator
|
||||
* @since 1.5.0.1
|
||||
* @return boolean
|
||||
*/
|
||||
public function saveTaxCalculator()
|
||||
{
|
||||
// Nothing to save
|
||||
if ($this->tax_calculator == null)
|
||||
return true;
|
||||
|
||||
if (!($this->tax_calculator instanceOf TaxCalculator))
|
||||
return false;
|
||||
|
||||
if (count($this->tax_calculator->taxes) == 0)
|
||||
return true;
|
||||
|
||||
$values = '';
|
||||
foreach ($this->tax_calculator->getTaxesAmount($this->unit_price_tax_excl) as $id_tax => $amount)
|
||||
{
|
||||
$unit_amount = (float)Tools::ps_round($amount, 2);
|
||||
$total_amount = $unit_amount * $this->product_quantity;
|
||||
$values .= '('.(int)$this->id.','.(float)$id_tax.','.$unit_amount.','.(float)$total_amount.'),';
|
||||
}
|
||||
|
||||
$values = rtrim($values, ',');
|
||||
$sql = 'INSERT INTO `'._DB_PREFIX_.'order_detail_tax` (id_order_detail, id_tax, unit_amount, total_amount)
|
||||
VALUES '.$values;
|
||||
|
||||
return Db::getInstance()->execute($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a detailed order list of an id_order
|
||||
* @param int $id_order
|
||||
* @return array
|
||||
*/
|
||||
public static function getList($id_order)
|
||||
{
|
||||
$sql = '
|
||||
SELECT *
|
||||
FROM `'._DB_PREFIX_.'order_detail`
|
||||
WHERE `id_order` = '.(int)$id_order;
|
||||
|
||||
return Db::getInstance()->executeS($sql);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set virtual product information
|
||||
* @param array $product
|
||||
*/
|
||||
protected function setVirtualProductInformation($product)
|
||||
{
|
||||
// Add some informations for virtual products
|
||||
$this->download_deadline = '0000-00-00 00:00:00';
|
||||
$this->download_hash = null;
|
||||
|
||||
if ($id_product_download = ProductDownload::getIdFromIdProduct((int)($product['id_product'])))
|
||||
{
|
||||
$productDownload = new ProductDownload((int)($id_product_download));
|
||||
$this->download_deadline = $productDownload->getDeadLine();
|
||||
$this->download_hash = $productDownload->getHash();
|
||||
|
||||
unset($productDownload);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check the order state
|
||||
* @param array $product
|
||||
* @param int $id_order_state
|
||||
*/
|
||||
protected function checkProductStock($product, $id_order_state)
|
||||
{
|
||||
if ($id_order_state != Configuration::get('PS_OS_CANCELED') && $id_order_state != Configuration::get('PS_OS_ERROR'))
|
||||
{
|
||||
if (StockAvailable::updateQuantity($product['id_product'], $product['id_product_attribute'], -(int)$product['cart_quantity']))
|
||||
$product['stock_quantity'] -= $product['cart_quantity'];
|
||||
if ($product['stock_quantity'] < 0 && Configuration::get('PS_STOCK_MANAGEMENT'))
|
||||
$this->outOfStock = true;
|
||||
Product::updateDefaultAttribute($product['id_product']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply tax to the product
|
||||
* @param object $order
|
||||
* @param array $product
|
||||
*/
|
||||
protected function setProductTax(Order $order, $product)
|
||||
{
|
||||
$this->ecotax = Tools::convertPrice(floatval($product['ecotax']), intval($order->id_currency));
|
||||
|
||||
// Exclude VAT
|
||||
if (!Tax::excludeTaxeOption())
|
||||
{
|
||||
$id_tax_rules = (int)Product::getIdTaxRulesGroupByIdProduct((int)$product['id_product']);
|
||||
|
||||
$tax_manager = TaxManagerFactory::getManager($this->vat_address, $id_tax_rules);
|
||||
$this->tax_calculator = $tax_manager->getTaxCalculator();
|
||||
}
|
||||
|
||||
$this->ecotax_tax_rate = 0;
|
||||
if (!empty($product['ecotax']))
|
||||
$this->ecotax_tax_rate = Tax::getProductEcotaxRate($order->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
|
||||
|
||||
$this->tax_computation_method = (int)$this->tax_calculator->computation_method;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set specific price of the product
|
||||
* @param object $order
|
||||
*/
|
||||
protected function setSpecificPrice(Order $order)
|
||||
{
|
||||
$this->reduction_amount = 0.00;
|
||||
$this->reduction_percent = 0.00;
|
||||
|
||||
if ($this->specificPrice)
|
||||
switch($this->specificPrice['reduction_type'])
|
||||
{
|
||||
case 'percentage':
|
||||
$this->reduction_percent = (float)$this->specificPrice['reduction'] * 100;
|
||||
break;
|
||||
case 'amount':
|
||||
$price = Tools::convertPrice($this->specificPrice['reduction'], $order->id_currency);
|
||||
$this->reduction_amount = (float)(!$this->specificPrice['id_currency'] ?
|
||||
$price : $this->specificPrice['reduction']);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Set detailed product price to the order detail
|
||||
* @param object $order
|
||||
* @param object $cart
|
||||
* @param array $product
|
||||
*/
|
||||
protected function setDetailProductPrice(Order $order, Cart $cart, $product)
|
||||
{
|
||||
$customer = new Customer((int)$order->id_customer);
|
||||
$customer_address = new Address((int)$order->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
|
||||
|
||||
$this->specificPrice = SpecificPrice::getSpecificPrice((int)$product['id_product'],
|
||||
(int)$order->id_shop,
|
||||
(int)$order->id_currency,
|
||||
(int)$customer_address->id_country,
|
||||
(int)$customer->id_default_group,
|
||||
(int)$product['cart_quantity']);
|
||||
|
||||
$this->product_price = (float)$product['price'];
|
||||
$this->unit_price_tax_incl = (float)$product['price_wt'];
|
||||
$this->unit_price_tax_excl = (float)$product['price'];
|
||||
$this->total_price_tax_incl = (float)$product['total_wt'];
|
||||
$this->total_price_tax_excl = (float)$product['total'];
|
||||
|
||||
$this->setSpecificPrice($order);
|
||||
|
||||
$this->group_reduction = (float)(Group::getReduction((int)($order->id_customer)));
|
||||
|
||||
$quantityDiscount = SpecificPrice::getQuantityDiscount((int)$product['id_product'], $this->context->shop->getID(),
|
||||
(int)$cart->id_currency, (int)$this->vat_address->id_country,
|
||||
(int)$this->customer->id_default_group, (int)$product['cart_quantity']);
|
||||
|
||||
$unitPrice = Product::getPriceStatic((int)$product['id_product'], true,
|
||||
($product['id_product_attribute'] ? intval($product['id_product_attribute']) : null),
|
||||
2, null, false, true, 1, false, (int)$order->id_customer, null, (int)$order->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
|
||||
|
||||
$this->product_quantity_discount = (float)($quantityDiscount ?
|
||||
((Product::getTaxCalculationMethod((int)$order->id_customer) == PS_TAX_EXC ?
|
||||
Tools::ps_round($unitPrice, 2) : $unitPrice) - $this->tax_calculator->addTaxes($quantityDiscount['price'])) :
|
||||
0.00);
|
||||
|
||||
$this->discount_quantity_applied = (($this->specificPrice && $this->specificPrice['from_quantity'] > 1) ? 1 : 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an order detail liable to an id_order
|
||||
* @param object $order
|
||||
* @param object $cart
|
||||
* @param array $product
|
||||
* @param int $id_order_status
|
||||
*/
|
||||
protected function create(Order $order, Cart $cart, $product, $id_order_state)
|
||||
{
|
||||
$this->tax_calculator = new TaxCalculator();
|
||||
|
||||
$this->id = null;
|
||||
|
||||
$this->product_id = (int)($product['id_product']);
|
||||
$this->product_attribute_id = (int)($product['id_product_attribute'] ? (int)($product['id_product_attribute']) : null);
|
||||
$this->product_name = pSQL($product['name'].
|
||||
((isset($product['attributes']) && $product['attributes'] != null) ?
|
||||
' - '.$product['attributes'] : ''));
|
||||
|
||||
$this->product_quantity = (int)($product['cart_quantity']);
|
||||
$this->product_ean13 = empty($product['ean13']) ? null : pSQL($product['ean13']);
|
||||
$this->product_upc = empty($product['upc']) ? null : pSQL($product['upc']);
|
||||
$this->product_reference = empty($product['reference']) ? null : pSQL($product['reference']);
|
||||
$this->product_supplier_reference = empty($product['supplier_reference']) ? null : pSQL($product['supplier_reference']);
|
||||
$this->product_weight = (float)$product['id_product_attribute'] ? $product['weight_attribute'] : $product['weight'];
|
||||
|
||||
$productQuantity = (int)(Product::getQuantity($this->product_id, $this->product_attribute_id));
|
||||
$this->product_quantity_in_stock = ($productQuantity - (int)($product['cart_quantity']) < 0) ?
|
||||
$productQuantity : (int)($product['cart_quantity']);
|
||||
|
||||
$this->setVirtualProductInformation($product);
|
||||
$this->checkProductStock($product, $id_order_state);
|
||||
$this->setProductTax($order, $product);
|
||||
$this->setDetailProductPrice($order, $cart, $product);
|
||||
|
||||
// Add new entry to the table
|
||||
$this->save();
|
||||
|
||||
$this->saveTaxCalculator();
|
||||
unset($this->tax_calculator);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a list of order detail for a specified id_order using cart
|
||||
* @param object $order
|
||||
* @param object $cart
|
||||
* @param int $id_order_status
|
||||
*/
|
||||
public function createList(Order $order, Cart $cart, $id_order_state, $product_list)
|
||||
{
|
||||
$this->vat_address = new Address((int)($order->{Configuration::get('PS_TAX_ADDRESS_TYPE')}));
|
||||
$this->customer = new Customer((int)($order->id_customer));
|
||||
|
||||
$this->id_order = $order->id;
|
||||
$products = $product_list;
|
||||
$this->outOfStock = false;
|
||||
|
||||
foreach ($products as $product)
|
||||
$this->create($order, $cart, $product, $id_order_state);
|
||||
|
||||
unset($this->vat_address);
|
||||
unset($products);
|
||||
unset($this->customer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the state of the current stock product
|
||||
* @return array
|
||||
*/
|
||||
public function getStockState()
|
||||
{
|
||||
return $this->outOfStock;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,55 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 6844 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
class OrderDiscountCore extends OrderCartRule
|
||||
{
|
||||
public function __get($key)
|
||||
{
|
||||
Tools::displayAsDeprecated();
|
||||
if ($key == 'id_order_discount')
|
||||
return $this->id_order_cart_rule;
|
||||
if ($key == 'id_discount')
|
||||
return $this->id_cart_rule;
|
||||
return $this->{$key};
|
||||
}
|
||||
|
||||
public function __set($key, $value)
|
||||
{
|
||||
Tools::displayAsDeprecated();
|
||||
if ($key == 'id_order_discount')
|
||||
$this->id_order_cart_rule = $value;
|
||||
if ($key == 'id_discount')
|
||||
$this->id_cart_rule = $value;
|
||||
$this->{$key} = $value;
|
||||
}
|
||||
|
||||
public function __call($method, $args)
|
||||
{
|
||||
Tools::displayAsDeprecated();
|
||||
return call_user_func_array(array($this->parent, $method), $args);
|
||||
}
|
||||
}
|
||||
@@ -1,221 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 6844 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
class OrderHistoryCore extends ObjectModel
|
||||
{
|
||||
/** @var integer Order id */
|
||||
public $id_order;
|
||||
|
||||
/** @var integer Order state id */
|
||||
public $id_order_state;
|
||||
|
||||
/** @var integer Employee id for this history entry */
|
||||
public $id_employee;
|
||||
|
||||
/** @var string Object creation date */
|
||||
public $date_add;
|
||||
|
||||
/** @var string Object last modification date */
|
||||
public $date_upd;
|
||||
|
||||
protected $tables = array ('order_history');
|
||||
|
||||
protected $fieldsRequired = array('id_order', 'id_order_state');
|
||||
protected $fieldsValidate = array('id_order' => 'isUnsignedId', 'id_order_state' => 'isUnsignedId', 'id_employee' => 'isUnsignedId');
|
||||
|
||||
protected $table = 'order_history';
|
||||
protected $identifier = 'id_order_history';
|
||||
|
||||
protected $webserviceParameters = array(
|
||||
'objectsNodeName' => 'order_histories',
|
||||
'fields' => array(
|
||||
'id_order_state' => array('required' => true, 'xlink_resource'=> 'order_states'),
|
||||
'id_order' => array('xlink_resource' => 'orders'),
|
||||
),
|
||||
);
|
||||
|
||||
public function getFields()
|
||||
{
|
||||
$this->validateFields();
|
||||
|
||||
$fields['id_order'] = (int)$this->id_order;
|
||||
$fields['id_order_state'] = (int)$this->id_order_state;
|
||||
$fields['id_employee'] = (int)$this->id_employee;
|
||||
$fields['date_add'] = pSQL($this->date_add);
|
||||
|
||||
return $fields;
|
||||
}
|
||||
|
||||
public function changeIdOrderState($new_order_state, $id_order, $id_warehouse = null)
|
||||
{
|
||||
if ($new_order_state != NULL)
|
||||
{
|
||||
Hook::updateOrderStatus((int)($new_order_state), (int)$id_order);
|
||||
$order = new Order((int)($id_order));
|
||||
|
||||
/* Best sellers */
|
||||
$newOS = new OrderState((int)($new_order_state), $order->id_lang);
|
||||
$oldOrderStatus = OrderHistory::getLastOrderState((int)$id_order);
|
||||
$cart = Cart::getCartByOrderId($id_order);
|
||||
$isValidated = $this->isValidated();
|
||||
if (Validate::isLoadedObject($cart))
|
||||
foreach ($cart->getProducts() as $product)
|
||||
{
|
||||
/* If becoming logable => adding sale */
|
||||
if ($newOS->logable AND (!$oldOrderStatus OR !$oldOrderStatus->logable))
|
||||
ProductSale::addProductSale($product['id_product'], $product['cart_quantity']);
|
||||
/* If becoming unlogable => removing sale */
|
||||
elseif (!$newOS->logable AND ($oldOrderStatus AND $oldOrderStatus->logable))
|
||||
ProductSale::removeProductSale($product['id_product'], $product['cart_quantity']);
|
||||
|
||||
if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && !$isValidated AND $newOS->logable AND isset($oldOrderStatus) AND $oldOrderStatus AND $oldOrderStatus->id == Configuration::get('PS_OS_ERROR'))
|
||||
StockAvailable::updateQuantity($product['id_product'], $product['id_product_attribute'], (int)$product['cart_quantity']);
|
||||
else if ($newOS->shipped == 1 && $oldOrderStatus->shipped == 0) // The product is removed from the physical stock. $id_warehouse is needed
|
||||
{
|
||||
$manager = StockManagerFactory::getManager();
|
||||
$warehouse = new Warehouse($id_warehouse);
|
||||
|
||||
$manager->removeProduct($product['id_product'],
|
||||
$product['id_product_attribute'],
|
||||
$warehouse,
|
||||
$product['cart_quantity'],
|
||||
Configuration::get('PS_STOCK_CUSTOMER_ORDER_REASON'),
|
||||
true,
|
||||
(int)$id_order);
|
||||
}
|
||||
// @todo If the old order states was "shipped" and the new is "not shipped" the stock is not decremented
|
||||
}
|
||||
|
||||
$this->id_order_state = (int)($new_order_state);
|
||||
|
||||
/* Change invoice number of order ? */
|
||||
if (!Validate::isLoadedObject($newOS) OR !Validate::isLoadedObject($order))
|
||||
die(Tools::displayError('Invalid new order state'));
|
||||
|
||||
/* The order is valid only if the invoice is available and the order is not cancelled */
|
||||
$order->valid = $newOS->logable;
|
||||
$order->update();
|
||||
|
||||
if ($newOS->invoice AND !$order->invoice_number)
|
||||
$order->setInvoice();
|
||||
if ($newOS->delivery AND !$order->delivery_number)
|
||||
$order->setDelivery();
|
||||
Hook::postUpdateOrderStatus((int)($new_order_state), (int)($id_order));
|
||||
}
|
||||
}
|
||||
|
||||
public static function getLastOrderState($id_order)
|
||||
{
|
||||
$id_order_state = Db::getInstance()->getValue('
|
||||
SELECT `id_order_state`
|
||||
FROM `'._DB_PREFIX_.'order_history`
|
||||
WHERE `id_order` = '.(int)($id_order).'
|
||||
ORDER BY `date_add` DESC, `id_order_history` DESC');
|
||||
if (!$id_order_state)
|
||||
return false;
|
||||
return new OrderState($id_order_state, Configuration::get('PS_LANG_DEFAULT'));
|
||||
}
|
||||
|
||||
public function addWithemail($autodate = true, $templateVars = false, Context $context = null)
|
||||
{
|
||||
if (!$context)
|
||||
$context = Context::getContext();
|
||||
$lastOrderState = $this->getLastOrderState($this->id_order);
|
||||
|
||||
if (!parent::add($autodate))
|
||||
return false;
|
||||
|
||||
$result = Db::getInstance()->getRow('
|
||||
SELECT osl.`template`, c.`lastname`, c.`firstname`, osl.`name` AS osname, c.`email`
|
||||
FROM `'._DB_PREFIX_.'order_history` oh
|
||||
LEFT JOIN `'._DB_PREFIX_.'orders` o ON oh.`id_order` = o.`id_order`
|
||||
LEFT JOIN `'._DB_PREFIX_.'customer` c ON o.`id_customer` = c.`id_customer`
|
||||
LEFT JOIN `'._DB_PREFIX_.'order_state` os ON oh.`id_order_state` = os.`id_order_state`
|
||||
LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = o.`id_lang`)
|
||||
WHERE oh.`id_order_history` = '.(int)($this->id).' AND os.`send_email` = 1');
|
||||
|
||||
if (isset($result['template']) AND Validate::isEmail($result['email']))
|
||||
{
|
||||
$topic = $result['osname'];
|
||||
$data = array('{lastname}' => $result['lastname'], '{firstname}' => $result['firstname'], '{id_order}' => (int)$this->id_order);
|
||||
if ($templateVars)
|
||||
$data = array_merge($data, $templateVars);
|
||||
$order = new Order((int)$this->id_order);
|
||||
$data['{total_paid}'] = Tools::displayPrice((float)$order->total_paid, new Currency((int)$order->id_currency), false);
|
||||
$data['{order_name}'] = sprintf("#%06d", (int)$order->id);
|
||||
|
||||
// An additional email is sent the first time a virtual item is validated
|
||||
if ($virtualProducts = $order->getVirtualProducts() AND (!$lastOrderState OR !$lastOrderState->logable) AND $newOrderState = new OrderState($this->id_order_state, Configuration::get('PS_LANG_DEFAULT')) AND $newOrderState->logable)
|
||||
{
|
||||
$assign = array();
|
||||
foreach ($virtualProducts AS $key => $virtualProduct)
|
||||
{
|
||||
$id_product_download = ProductDownload::getIdFromIdAttribute($virtualProduct['product_id'], $virtualProduct['product_attribute_id']);
|
||||
$product_download = new ProductDownload($id_product_download);
|
||||
// If this virtual item has an associated file, we'll provide the link to download the file in the email
|
||||
if ($product_download->display_filename != '')
|
||||
{
|
||||
$assign[$key]['name'] = $product_download->display_filename;
|
||||
$dl_link = $product_download->getTextLink(false, $virtualProduct['download_hash'])
|
||||
.'&id_order='.$order->id
|
||||
.'&secure_key='.$order->secure_key;
|
||||
$assign[$key]['link'] = $dl_link;
|
||||
if ($virtualProduct['download_deadline'] != '0000-00-00 00:00:00')
|
||||
$assign[$key]['deadline'] = Tools::displayDate($virtualProduct['download_deadline'], $order->id_lang);
|
||||
if ($product_download->nb_downloadable != 0)
|
||||
$assign[$key]['downloadable'] = $product_download->nb_downloadable;
|
||||
}
|
||||
}
|
||||
$context->smarty->assign('virtualProducts', $assign);
|
||||
$context->smarty->assign('id_order', $order->id);
|
||||
$iso = Language::getIsoById((int)($order->id_lang));
|
||||
$links = $context->smarty->fetch(_PS_MAIL_DIR_.$iso.'/download-product.tpl');
|
||||
$tmpArray = array('{nbProducts}' => count($virtualProducts), '{virtualProducts}' => $links);
|
||||
$data = array_merge ($data, $tmpArray);
|
||||
// If there's at least one downloadable file
|
||||
if (!empty($assign))
|
||||
Mail::Send((int)$order->id_lang, 'download_product', Mail::l('Virtual product to download', $order->id_lang), $data, $result['email'], $result['firstname'].' '.$result['lastname']);
|
||||
}
|
||||
|
||||
if (Validate::isLoadedObject($order))
|
||||
Mail::Send((int)$order->id_lang, $result['template'], $topic, $data, $result['email'], $result['firstname'].' '.$result['lastname']);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function isValidated()
|
||||
{
|
||||
return Db::getInstance()->getValue('
|
||||
SELECT COUNT(oh.`id_order_history`) AS nb
|
||||
FROM `'._DB_PREFIX_.'order_state` os
|
||||
LEFT JOIN `'._DB_PREFIX_.'order_history` oh ON (os.`id_order_state` = oh.`id_order_state`)
|
||||
WHERE oh.`id_order` = '.(int)$this->id_order.'
|
||||
AND os.`logable` = 1');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,78 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 6844 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
class OrderMessageCore extends ObjectModel
|
||||
{
|
||||
/** @var string name name */
|
||||
public $name;
|
||||
|
||||
/** @var string message content */
|
||||
public $message;
|
||||
|
||||
/** @var string Object creation date */
|
||||
public $date_add;
|
||||
|
||||
protected $fieldsRequired = array();
|
||||
protected $fieldsValidate = array();
|
||||
protected $fieldsSize = array();
|
||||
|
||||
protected $fieldsRequiredLang = array('name', 'message');
|
||||
protected $fieldsSizeLang = array('name' => 128, 'message' => 1200);
|
||||
protected $fieldsValidateLang = array('name' => 'isGenericName', 'message' => 'isMessage');
|
||||
|
||||
protected $table = 'order_message';
|
||||
protected $identifier = 'id_order_message';
|
||||
|
||||
protected $webserviceParameters = array(
|
||||
'fields' => array(
|
||||
'id' => array('sqlId' => 'id_discount_type', 'xlink_resource' => 'order_message_lang'),
|
||||
'date_add' => array('sqlId' => 'date_add')
|
||||
)
|
||||
);
|
||||
|
||||
public function getFields()
|
||||
{
|
||||
$this->validateFields();
|
||||
return array('date_add' => pSQL($this->date_add));
|
||||
}
|
||||
|
||||
public function getTranslationsFieldsChild()
|
||||
{
|
||||
$this->validateFieldsLang();
|
||||
return $this->getTranslationsFields(array('name', 'message'));
|
||||
}
|
||||
|
||||
public static function getOrderMessages($id_lang)
|
||||
{
|
||||
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
|
||||
SELECT om.id_order_message, oml.name, oml.message
|
||||
FROM '._DB_PREFIX_.'order_message om
|
||||
LEFT JOIN '._DB_PREFIX_.'order_message_lang oml ON (oml.id_order_message = om.id_order_message)
|
||||
WHERE oml.id_lang = '.(int)$id_lang.'
|
||||
ORDER BY name ASC');
|
||||
}
|
||||
}
|
||||
@@ -1,205 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 6844 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
class OrderReturnCore extends ObjectModel
|
||||
{
|
||||
/** @var integer */
|
||||
public $id;
|
||||
|
||||
/** @var integer */
|
||||
public $id_customer;
|
||||
|
||||
/** @var integer */
|
||||
public $id_order;
|
||||
|
||||
/** @var integer */
|
||||
public $state;
|
||||
|
||||
/** @var string message content */
|
||||
public $question;
|
||||
|
||||
/** @var string Object creation date */
|
||||
public $date_add;
|
||||
|
||||
/** @var string Object last modification date */
|
||||
public $date_upd;
|
||||
|
||||
protected $tables = array ('order_return');
|
||||
|
||||
protected $fieldsRequired = array ('id_customer', 'id_order');
|
||||
protected $fieldsValidate = array('id_customer' => 'isUnsignedId', 'id_order' => 'isUnsignedId', 'question' => 'isMessage');
|
||||
|
||||
protected $table = 'order_return';
|
||||
protected $identifier = 'id_order_return';
|
||||
|
||||
public function getFields()
|
||||
{
|
||||
$this->validateFields();
|
||||
|
||||
$fields['id_customer'] = pSQL($this->id_customer);
|
||||
$fields['id_order'] = pSQL($this->id_order);
|
||||
$fields['state'] = pSQL($this->state);
|
||||
$fields['date_add'] = pSQL($this->date_add);
|
||||
$fields['date_upd'] = pSQL($this->date_upd);
|
||||
$fields['question'] = pSQL(Tools::nl2br($this->question), true);
|
||||
return $fields;
|
||||
}
|
||||
|
||||
public function addReturnDetail($orderDetailList, $productQtyList, $customizationIds, $customizationQtyInput)
|
||||
{
|
||||
/* Classic product return */
|
||||
if ($orderDetailList)
|
||||
foreach ($orderDetailList AS $key => $orderDetail)
|
||||
if ($qty = (int)($productQtyList[$key]))
|
||||
Db::getInstance()->AutoExecute(_DB_PREFIX_.'order_return_detail', array('id_order_return' => (int)($this->id), 'id_order_detail' => (int)($orderDetail), 'product_quantity' => $qty, 'id_customization' => 0), 'INSERT');
|
||||
/* Customized product return */
|
||||
if ($customizationIds)
|
||||
foreach ($customizationIds AS $orderDetailId => $customizations)
|
||||
foreach ($customizations AS $customizationId)
|
||||
if ($quantity = (int)($customizationQtyInput[(int)($customizationId)]))
|
||||
Db::getInstance()->AutoExecute(_DB_PREFIX_.'order_return_detail', array('id_order_return' => (int)($this->id), 'id_order_detail' => (int)($orderDetailId), 'product_quantity' => $quantity, 'id_customization' => (int)($customizationId)), 'INSERT');
|
||||
}
|
||||
|
||||
public function checkEnoughProduct($orderDetailList, $productQtyList, $customizationIds, $customizationQtyInput)
|
||||
{
|
||||
$order = new Order((int)($this->id_order));
|
||||
if (!Validate::isLoadedObject($order))
|
||||
die(Tools::displayError());
|
||||
$products = $order->getProducts();
|
||||
/* Products already returned */
|
||||
$order_return = self::getOrdersReturn($order->id_customer, $order->id, true);
|
||||
foreach ($order_return AS $or)
|
||||
{
|
||||
$order_return_products = self::getOrdersReturnProducts($or['id_order_return'], $order);
|
||||
foreach ($order_return_products AS $key => $orp)
|
||||
$products[$key]['product_quantity'] -= (int)($orp['product_quantity']);
|
||||
}
|
||||
/* Quantity check */
|
||||
if ($orderDetailList)
|
||||
foreach (array_keys($orderDetailList) AS $key)
|
||||
if ($qty = (int)($productQtyList[$key]))
|
||||
if ($products[$key]['product_quantity'] - $qty < 0)
|
||||
return false;
|
||||
/* Customization quantity check */
|
||||
if ($customizationIds)
|
||||
{
|
||||
$orderedCustomizations = Customization::getOrderedCustomizations((int)($order->id_cart));
|
||||
foreach ($customizationIds AS $customizations)
|
||||
foreach ($customizations AS $customizationId)
|
||||
{
|
||||
$customizationId = (int)($customizationId);
|
||||
if (!isset($orderedCustomizations[$customizationId]))
|
||||
return false;
|
||||
$quantity = (isset($customizationQtyInput[$customizationId]) ? (int)($customizationQtyInput[$customizationId]) : 0);
|
||||
if ((int)($orderedCustomizations[$customizationId]['quantity']) - $quantity < 0)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public function countProduct()
|
||||
{
|
||||
if (!$data = Db::getInstance()->getRow('
|
||||
SELECT COUNT(`id_order_return`) AS total
|
||||
FROM `'._DB_PREFIX_.'order_return_detail`
|
||||
WHERE `id_order_return` = '.(int)($this->id)))
|
||||
return false;
|
||||
return (int)($data['total']);
|
||||
}
|
||||
|
||||
static public function getOrdersReturn($customer_id, $order_id = false, $no_denied = false, Context $context = null)
|
||||
{
|
||||
if (!$context)
|
||||
$context = Context::getContext();
|
||||
$data = Db::getInstance()->executeS('
|
||||
SELECT *
|
||||
FROM `'._DB_PREFIX_.'order_return`
|
||||
WHERE `id_customer` = '.(int)($customer_id).
|
||||
($order_id ? ' AND `id_order` = '.(int)($order_id) : '').
|
||||
($no_denied ? ' AND `state` != 4' : '').'
|
||||
ORDER BY `date_add` DESC');
|
||||
foreach ($data AS $k => $or)
|
||||
{
|
||||
$state = new OrderReturnState($or['state']);
|
||||
$data[$k]['state_name'] = $state->name[$context->language->id];
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
public static function getOrdersReturnDetail($id_order_return)
|
||||
{
|
||||
return Db::getInstance()->executeS('
|
||||
SELECT *
|
||||
FROM `'._DB_PREFIX_.'order_return_detail`
|
||||
WHERE `id_order_return` = '.(int)($id_order_return));
|
||||
}
|
||||
|
||||
public static function getOrdersReturnProducts($orderReturnId, $order)
|
||||
{
|
||||
$productsRet = self::getOrdersReturnDetail($orderReturnId);
|
||||
$products = $order->getProducts();
|
||||
$tmp = array();
|
||||
foreach ($productsRet AS $return_detail)
|
||||
{
|
||||
$tmp[$return_detail['id_order_detail']]['quantity'] = isset($tmp[$return_detail['id_order_detail']]['quantity']) ? $tmp[$return_detail['id_order_detail']]['quantity'] + (int)($return_detail['product_quantity']) : (int)($return_detail['product_quantity']);
|
||||
$tmp[$return_detail['id_order_detail']]['customizations'] = (int)($return_detail['id_customization']);
|
||||
}
|
||||
$resTab = array();
|
||||
foreach ($products AS $key => $product)
|
||||
if (isset($tmp[$product['id_order_detail']]))
|
||||
{
|
||||
$resTab[$key] = $product;
|
||||
$resTab[$key]['product_quantity'] = $tmp[$product['id_order_detail']]['quantity'];
|
||||
$resTab[$key]['customizations'] = $tmp[$product['id_order_detail']]['customizations'];
|
||||
}
|
||||
return $resTab;
|
||||
}
|
||||
|
||||
public static function getReturnedCustomizedProducts($id_order)
|
||||
{
|
||||
$returns = Customization::getReturnedCustomizations($id_order);
|
||||
$order = new Order((int)($id_order));
|
||||
if (!Validate::isLoadedObject($order))
|
||||
die(Tools::displayError());
|
||||
$products = $order->getProducts();
|
||||
foreach ($returns AS &$return)
|
||||
{
|
||||
$return['product_id'] = (int)($products[(int)($return['id_order_detail'])]['product_id']);
|
||||
$return['product_attribute_id'] = (int)($products[(int)($return['id_order_detail'])]['product_attribute_id']);
|
||||
$return['name'] = $products[(int)($return['id_order_detail'])]['product_name'];
|
||||
$return['reference'] = $products[(int)($return['id_order_detail'])]['product_reference'];
|
||||
}
|
||||
return $returns;
|
||||
}
|
||||
|
||||
public static function deleteOrderReturnDetail($id_order_return, $id_order_detail, $id_customization = 0)
|
||||
{
|
||||
return Db::getInstance()->execute('DELETE FROM `'._DB_PREFIX_.'order_return_detail` WHERE `id_order_detail` = '.(int)($id_order_detail).' AND `id_order_return` = '.(int)($id_order_return).' AND `id_customization` = '.(int)($id_customization));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 6844 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
class OrderReturnStateCore extends ObjectModel
|
||||
{
|
||||
/** @var string Name */
|
||||
public $name;
|
||||
|
||||
/** @var string Display state in the specified color */
|
||||
public $color;
|
||||
|
||||
protected $fieldsValidate = array('color' => 'isColor');
|
||||
protected $fieldsRequiredLang = array('name');
|
||||
protected $fieldsSizeLang = array('name' => 64);
|
||||
protected $fieldsValidateLang = array('name' => 'isGenericName');
|
||||
|
||||
protected $table = 'order_return_state';
|
||||
protected $identifier = 'id_order_return_state';
|
||||
|
||||
public function getFields()
|
||||
{
|
||||
$this->validateFields();
|
||||
$fields['color'] = pSQL($this->color);
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check then return multilingual fields for database interaction
|
||||
*
|
||||
* @return array Multilingual fields
|
||||
*/
|
||||
public function getTranslationsFieldsChild()
|
||||
{
|
||||
$this->validateFieldsLang();
|
||||
return $this->getTranslationsFields(array('name'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all available order states
|
||||
*
|
||||
* @param integer $id_lang Language id for state name
|
||||
* @return array Order states
|
||||
*/
|
||||
public static function getOrderReturnStates($id_lang)
|
||||
{
|
||||
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
|
||||
SELECT *
|
||||
FROM `'._DB_PREFIX_.'order_return_state` ors
|
||||
LEFT JOIN `'._DB_PREFIX_.'order_return_state_lang` orsl ON (ors.`id_order_return_state` = orsl.`id_order_return_state` AND orsl.`id_lang` = '.(int)($id_lang).')
|
||||
ORDER BY ors.`id_order_return_state` ASC');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,180 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 6844 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
class OrderSlipCore extends ObjectModel
|
||||
{
|
||||
/** @var integer */
|
||||
public $id;
|
||||
|
||||
/** @var integer */
|
||||
public $id_customer;
|
||||
|
||||
/** @var integer */
|
||||
public $id_order;
|
||||
|
||||
/** @var float */
|
||||
public $conversion_rate;
|
||||
|
||||
/** @var integer */
|
||||
public $shipping_cost;
|
||||
|
||||
/** @var string Object creation date */
|
||||
public $date_add;
|
||||
|
||||
/** @var string Object last modification date */
|
||||
public $date_upd;
|
||||
|
||||
protected $tables = array ('order_slip');
|
||||
|
||||
protected $fieldsRequired = array ('id_customer', 'id_order', 'conversion_rate');
|
||||
protected $fieldsValidate = array('id_customer' => 'isUnsignedId', 'id_order' => 'isUnsignedId', 'conversion_rate' => 'isFloat');
|
||||
|
||||
protected $table = 'order_slip';
|
||||
protected $identifier = 'id_order_slip';
|
||||
|
||||
public function getFields()
|
||||
{
|
||||
$this->validateFields();
|
||||
|
||||
$fields['id_customer'] = (int)($this->id_customer);
|
||||
$fields['id_order'] = (int)($this->id_order);
|
||||
$fields['conversion_rate'] = (float)($this->conversion_rate);
|
||||
$fields['shipping_cost'] = (int)($this->shipping_cost);
|
||||
$fields['date_add'] = pSQL($this->date_add);
|
||||
$fields['date_upd'] = pSQL($this->date_upd);
|
||||
return $fields;
|
||||
}
|
||||
|
||||
public function addSlipDetail($orderDetailList, $productQtyList)
|
||||
{
|
||||
foreach ($orderDetailList as $key => $orderDetail)
|
||||
{
|
||||
if ($qty = (int)($productQtyList[$key]))
|
||||
Db::getInstance()->AutoExecute(_DB_PREFIX_.'order_slip_detail', array('id_order_slip' => (int)($this->id), 'id_order_detail' => (int)($orderDetail), 'product_quantity' => $qty), 'INSERT');
|
||||
}
|
||||
}
|
||||
|
||||
public static function getOrdersSlip($customer_id, $order_id = false)
|
||||
{
|
||||
return Db::getInstance()->executeS('
|
||||
SELECT *
|
||||
FROM `'._DB_PREFIX_.'order_slip`
|
||||
WHERE `id_customer` = '.(int)($customer_id).
|
||||
($order_id ? ' AND `id_order` = '.(int)($order_id) : '').'
|
||||
ORDER BY `date_add` DESC');
|
||||
}
|
||||
|
||||
public static function getOrdersSlipDetail($id_order_slip = true, $id_order_detail = false)
|
||||
{
|
||||
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(
|
||||
($id_order_detail ? 'SELECT SUM(`product_quantity`) AS `total`' : 'SELECT *').
|
||||
'FROM `'._DB_PREFIX_.'order_slip_detail`'
|
||||
.($id_order_slip ? ' WHERE `id_order_slip` = '.(int)($id_order_slip) : '')
|
||||
.($id_order_detail ? ' WHERE `id_order_detail` = '.(int)($id_order_detail) : ''));
|
||||
}
|
||||
|
||||
public static function getOrdersSlipProducts($orderSlipId, $order)
|
||||
{
|
||||
$cart_rules = $order->getCartRules(true);
|
||||
$productsRet = self::getOrdersSlipDetail($orderSlipId);
|
||||
$products = $order->getProductsDetail();
|
||||
|
||||
$tmp = array();
|
||||
foreach ($productsRet as $slip_detail)
|
||||
$tmp[$slip_detail['id_order_detail']] = $slip_detail['product_quantity'];
|
||||
$resTab = array();
|
||||
foreach ($products as $key => $product)
|
||||
if (isset($tmp[$product['id_order_detail']]))
|
||||
{
|
||||
$resTab[$key] = $product;
|
||||
$resTab[$key]['product_quantity'] = $tmp[$product['id_order_detail']];
|
||||
if (sizeof($cart_rules))
|
||||
{
|
||||
$order->setProductPrices($product);
|
||||
$realProductPrice = $resTab[$key]['product_price'];
|
||||
// Todo : must be updated to use the cart rules
|
||||
foreach ($cart_rules as $cart_rule)
|
||||
{
|
||||
if ($cart_rule['reduction_percent'])
|
||||
$resTab[$key]['product_price'] -= $realProductPrice * ($cart_rule['reduction_percent'] / 100);
|
||||
elseif ($cart_rule['reduction_amount'])
|
||||
$resTab[$key]['product_price'] -= (($cart_rule['reduction_amount'] * ($product['product_price_wt'] / $order->total_products_wt)) / (1.00 + ($product['tax_rate'] / 100)));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return $order->getProducts($resTab);
|
||||
}
|
||||
|
||||
public function getProducts()
|
||||
{
|
||||
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
|
||||
SELECT *, osd.product_quantity
|
||||
FROM `'._DB_PREFIX_.'order_slip_detail` osd
|
||||
INNER JOIN `'._DB_PREFIX_.'order_detail` od ON osd.id_order_detail = od.id_order_detail
|
||||
WHERE osd.`id_order_slip` = '.(int)$this->id);
|
||||
|
||||
$order = new Order($this->id_order);
|
||||
$products = array();
|
||||
foreach ($result AS $row)
|
||||
{
|
||||
$order->setProductPrices($row);
|
||||
$products[] = $row;
|
||||
}
|
||||
return $products;
|
||||
}
|
||||
|
||||
public static function getSlipsIdByDate($dateFrom, $dateTo)
|
||||
{
|
||||
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
|
||||
SELECT `id_order_slip`
|
||||
FROM `'._DB_PREFIX_.'order_slip`
|
||||
WHERE `date_add` BETWEEN \''.pSQL($dateFrom).' 00:00:00\' AND \''.pSQL($dateTo).' 23:59:59\'
|
||||
ORDER BY `date_add` ASC');
|
||||
|
||||
$slips = array();
|
||||
foreach ($result AS $slip)
|
||||
$slips[] = (int)$slip['id_order_slip'];
|
||||
return $slips;
|
||||
}
|
||||
|
||||
public static function createOrderSlip($order, $productList, $qtyList, $shipping_cost = false)
|
||||
{
|
||||
$currency = new Currency($order->id_currency);
|
||||
$orderSlip = new OrderSlip();
|
||||
$orderSlip->id_customer = (int)($order->id_customer);
|
||||
$orderSlip->id_order = (int)($order->id);
|
||||
$orderSlip->shipping_cost = (int)($shipping_cost);
|
||||
$orderSlip->conversion_rate = $currency->conversion_rate;
|
||||
if (!$orderSlip->add())
|
||||
return false;
|
||||
|
||||
$orderSlip->addSlipDetail($productList, $qtyList);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,143 +0,0 @@
|
||||
<?php
|
||||
/*
|
||||
* 2007-2011 PrestaShop
|
||||
*
|
||||
* NOTICE OF LICENSE
|
||||
*
|
||||
* This source file is subject to the Open Software License (OSL 3.0)
|
||||
* that is bundled with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://opensource.org/licenses/osl-3.0.php
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@prestashop.com so we can send you a copy immediately.
|
||||
*
|
||||
* DISCLAIMER
|
||||
*
|
||||
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
|
||||
* versions in the future. If you wish to customize PrestaShop for your
|
||||
* needs please refer to http://www.prestashop.com for more information.
|
||||
*
|
||||
* @author PrestaShop SA <contact@prestashop.com>
|
||||
* @copyright 2007-2011 PrestaShop SA
|
||||
* @version Release: $Revision: 6844 $
|
||||
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
||||
* International Registered Trademark & Property of PrestaShop SA
|
||||
*/
|
||||
|
||||
class OrderStateCore extends ObjectModel
|
||||
{
|
||||
/** @var string Name */
|
||||
public $name;
|
||||
|
||||
/** @var string Template name if there is any e-mail to send */
|
||||
public $template;
|
||||
|
||||
/** @var boolean Send an e-mail to customer ? */
|
||||
public $send_email;
|
||||
|
||||
/** @var boolean Allow customer to view and download invoice when order is at this state */
|
||||
public $invoice;
|
||||
|
||||
/** @var string Display state in the specified color */
|
||||
public $color;
|
||||
|
||||
public $unremovable;
|
||||
|
||||
/** @var boolean Log authorization */
|
||||
public $logable;
|
||||
|
||||
/** @var boolean Delivery */
|
||||
public $delivery;
|
||||
|
||||
/** @var boolean Hidden */
|
||||
public $hidden;
|
||||
|
||||
/** @var boolean Shipped */
|
||||
public $shipped;
|
||||
|
||||
protected $fieldsValidate = array(
|
||||
'send_email' => 'isBool',
|
||||
'invoice' => 'isBool',
|
||||
'color' => 'isColor',
|
||||
'logable' => 'isBool',
|
||||
'shipped' => 'isBool'
|
||||
);
|
||||
|
||||
protected $fieldsRequiredLang = array('name');
|
||||
protected $fieldsSizeLang = array('name' => 64, 'template' => 64);
|
||||
protected $fieldsValidateLang = array('name' => 'isGenericName', 'template' => 'isTplName');
|
||||
|
||||
protected $table = 'order_state';
|
||||
protected $identifier = 'id_order_state';
|
||||
|
||||
protected $webserviceParameters = array(
|
||||
'fields' => array(
|
||||
'unremovable' => array(),
|
||||
'delivery' => array(),
|
||||
'hidden' => array(),
|
||||
),
|
||||
);
|
||||
|
||||
public function getFields()
|
||||
{
|
||||
$this->validateFields();
|
||||
$fields['send_email'] = (int)$this->send_email;
|
||||
$fields['invoice'] = (int)$this->invoice;
|
||||
$fields['color'] = pSQL($this->color);
|
||||
$fields['unremovable'] = (int)$this->unremovable;
|
||||
$fields['logable'] = (int)$this->logable;
|
||||
$fields['delivery'] = (int)$this->delivery;
|
||||
$fields['hidden'] = (int)$this->hidden;
|
||||
$fields['shipped'] = (int)$this->shipped;
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check then return multilingual fields for database interaction
|
||||
*
|
||||
* @return array Multilingual fields
|
||||
*/
|
||||
public function getTranslationsFieldsChild()
|
||||
{
|
||||
$this->validateFieldsLang();
|
||||
return $this->getTranslationsFields(array('name', 'template'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all available order states
|
||||
*
|
||||
* @param integer $id_lang Language id for state name
|
||||
* @return array Order states
|
||||
*/
|
||||
public static function getOrderStates($id_lang)
|
||||
{
|
||||
return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
|
||||
SELECT *
|
||||
FROM `'._DB_PREFIX_.'order_state` os
|
||||
LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = '.(int)$id_lang.')
|
||||
ORDER BY `name` ASC');
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if we can make a facture when order is in this state
|
||||
*
|
||||
* @param integer $id_order_state State ID
|
||||
* @return boolean availability
|
||||
*/
|
||||
public static function invoiceAvailable($id_order_state)
|
||||
{
|
||||
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
|
||||
SELECT `invoice` AS ok
|
||||
FROM `'._DB_PREFIX_.'order_state`
|
||||
WHERE `id_order_state` = '.(int)$id_order_state);
|
||||
return $result['ok'];
|
||||
}
|
||||
|
||||
public function isRemovable()
|
||||
{
|
||||
return !($this->unremovable);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user