本文整理汇总了PHP中Attribute::checkAttributeQty方法的典型用法代码示例。如果您正苦于以下问题:PHP Attribute::checkAttributeQty方法的具体用法?PHP Attribute::checkAttributeQty怎么用?PHP Attribute::checkAttributeQty使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Attribute
的用法示例。
在下文中一共展示了Attribute::checkAttributeQty方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: ajaxProcessUpdateQty
public function ajaxProcessUpdateQty()
{
if ($this->tabAccess['edit'] === '1') {
$errors = array();
if (!$this->context->cart->id) {
return;
}
if ($this->context->cart->OrderExists()) {
$errors[] = Tools::displayError('An order has already been placed with this cart.');
} elseif (!($id_product = (int) Tools::getValue('id_product')) || !($product = new Product((int) $id_product, true, $this->context->language->id))) {
$errors[] = Tools::displayError('Invalid product');
} elseif (!($qty = Tools::getValue('qty')) || $qty == 0) {
$errors[] = Tools::displayError('Invalid quantity');
}
// Don't try to use a product if not instanciated before due to errors
if (isset($product) && $product->id) {
if (($id_product_attribute = Tools::getValue('id_product_attribute')) != 0) {
if (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !Attribute::checkAttributeQty((int) $id_product_attribute, (int) $qty)) {
$errors[] = Tools::displayError('There is not enough product in stock.');
}
} else {
if (!$product->checkQty((int) $qty)) {
$errors[] = Tools::displayError('There is not enough product in stock.');
}
}
if (!($id_customization = (int) Tools::getValue('id_customization', 0)) && !$product->hasAllRequiredCustomizableFields()) {
$errors[] = Tools::displayError('Please fill in all the required fields.');
}
$this->context->cart->save();
} else {
$errors[] = Tools::displayError('This product cannot be added to the cart.');
}
if (!count($errors)) {
if ((int) $qty < 0) {
$qty = str_replace('-', '', $qty);
$operator = 'down';
} else {
$operator = 'up';
}
if (!($qty_upd = $this->context->cart->updateQty($qty, $id_product, (int) $id_product_attribute, (int) $id_customization, $operator))) {
$errors[] = Tools::displayError('You already have the maximum quantity available for this product.');
} elseif ($qty_upd < 0) {
$minimal_qty = $id_product_attribute ? Attribute::getAttributeMinimalQty((int) $id_product_attribute) : $product->minimal_quantity;
$errors[] = sprintf(Tools::displayError('You must add a minimum quantity of %d', false), $minimal_qty);
}
}
echo Tools::jsonEncode(array_merge($this->ajaxReturnVars(), array('errors' => $errors)));
}
}
示例2: processChangeProductInCart
//.........这里部分代码省略.........
$this->errors[] = Tools::displayError('Quantity not specified.', !Tools::getValue('ajax'));
}
$min_qty = (double) $pp_ext_prop['minimum_quantity'];
if ($min_qty > 0 && $q < $min_qty) {
$this->errors[] = Tools::displayError(sprintf('Please specify at least %s for %s', (string) PP::formatQty($min_qty), (string) $pp_ext_prop['property']), !Tools::getValue('ajax'));
}
$max_qty = (double) $pp_ext_prop['maximum_quantity'];
if ($max_qty > 0 && $q > $max_qty) {
$this->errors[] = Tools::displayError(sprintf('Please specify no more than %s for %s', (string) PP::formatQty($max_qty), (string) $pp_ext_prop['property']), !Tools::getValue('ajax'));
}
}
if (!$this->errors) {
$ext_qty_factor = $properties['pp_ext_method'] == 1 ? 1 : 0;
$positions = count($ext_prop_quantities);
for ($position = 1; $position <= $positions; $position++) {
$value = $ext_prop_quantities[$position];
$qty_ratio = $ext_prop_qty_ratio[$position];
if ($properties['pp_ext_method'] == 1) {
$ext_qty_factor *= $qty_ratio > 0 ? $value / $qty_ratio : $value;
} elseif ($properties['pp_ext_method'] == 2) {
$ext_qty_factor += $qty_ratio > 0 ? $value / $qty_ratio : $value;
}
}
}
}
}
if (!$this->errors) {
if ($this->id_product_attribute) {
$default_quantity = $product->attributeDefaultQty($this->id_product_attribute);
$this->qty = $qty_factor * $this->resolveInputQty($properties, $default_quantity);
if ($this->qty == 0) {
$this->errors[] = Tools::displayError('Quantity not specified.', !Tools::getValue('ajax'));
} else {
if (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !Attribute::checkAttributeQty($this->id_product_attribute, $ext_qty_factor * $this->qty)) {
$this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax'));
}
}
} else {
if ($product->hasAttributes()) {
$min_quantity = $product->out_of_stock == 2 ? !Configuration::get('PS_ORDER_OUT_OF_STOCK') : !$product->out_of_stock;
$this->id_product_attribute = Product::getDefaultAttribute($product->id, $min_quantity);
if (!$this->id_product_attribute) {
Tools::redirectAdmin($this->context->link->getProductLink($product));
} else {
$default_quantity = $product->attributeDefaultQty($this->id_product_attribute);
$this->qty = $qty_factor * $this->resolveInputQty($properties, $default_quantity);
if ($this->qty == 0) {
$this->errors[] = Tools::displayError('Quantity not specified.', !Tools::getValue('ajax'));
} else {
if (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !Attribute::checkAttributeQty($this->id_product_attribute, $ext_qty_factor * $this->qty)) {
$this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax'));
}
}
}
} else {
$default_quantity = $product->defaultQty();
$this->qty = $qty_factor * $this->resolveInputQty($properties, $default_quantity);
if ($this->qty == 0) {
$this->errors[] = Tools::displayError('Quantity not specified.', !Tools::getValue('ajax'));
} else {
if (!$product->checkQty($ext_qty_factor * $this->qty)) {
$this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax'));
}
}
}
}
示例3: preProcess
public function preProcess()
{
parent::preProcess();
$orderTotal = self::$cart->getOrderTotal(true, Cart::ONLY_PRODUCTS);
$this->cartDiscounts = self::$cart->getDiscounts();
foreach ($this->cartDiscounts as $k => $this->cartDiscount) {
if ($error = self::$cart->checkDiscountValidity(new Discount((int) $this->cartDiscount['id_discount']), $this->cartDiscounts, $orderTotal, self::$cart->getProducts())) {
self::$cart->deleteDiscount((int) $this->cartDiscount['id_discount']);
}
}
$add = Tools::getIsset('add') ? 1 : 0;
$delete = Tools::getIsset('delete') ? 1 : 0;
if (Configuration::get('PS_TOKEN_ENABLE') == 1 && strcasecmp(Tools::getToken(false), strval(Tools::getValue('token'))) && self::$cookie->isLogged() === true) {
$this->errors[] = Tools::displayError('Invalid token');
}
// Update the cart ONLY if $this->cookies are available, in order to avoid ghost carts created by bots
if (($add or Tools::getIsset('update') or $delete) and isset(self::$cookie->date_add)) {
//get the values
$idProduct = (int) Tools::getValue('id_product', NULL);
$idProductAttribute = (int) Tools::getValue('id_product_attribute', Tools::getValue('ipa'));
$customizationId = (int) Tools::getValue('id_customization', 0);
$qty = (int) abs(Tools::getValue('qty', 1));
if ($qty == 0) {
$this->errors[] = Tools::displayError('Null quantity');
} elseif (!$idProduct) {
$this->errors[] = Tools::displayError('Product not found');
} else {
$producToAdd = new Product((int) $idProduct, true, (int) self::$cookie->id_lang);
if ((!$producToAdd->id or !$producToAdd->active) and !$delete) {
if (Tools::getValue('ajax') == 'true') {
die('{"hasError" : true, "errors" : ["' . Tools::displayError('Pproduct is no longer available.', false) . '"]}');
} else {
$this->errors[] = Tools::displayError('Pproduct is no longer available.', false);
}
} else {
/* Check the quantity availability */
if ($idProductAttribute and is_numeric($idProductAttribute)) {
if (!$delete and !$producToAdd->isAvailableWhenOutOfStock($producToAdd->out_of_stock) and !Attribute::checkAttributeQty((int) $idProductAttribute, (int) $qty)) {
if (Tools::getValue('ajax') == 'true') {
die('{"hasError" : true, "errors" : ["' . Tools::displayError('There is not enough product in stock.', false) . '"]}');
} else {
$this->errors[] = Tools::displayError('There is not enough product in stock.');
}
}
} elseif ($producToAdd->hasAttributes() and !$delete) {
$idProductAttribute = Product::getDefaultAttribute((int) $producToAdd->id, (int) $producToAdd->out_of_stock == 2 ? !(int) Configuration::get('PS_ORDER_OUT_OF_STOCK') : !(int) $producToAdd->out_of_stock);
if (!$idProductAttribute) {
Tools::redirectAdmin($link->getProductLink($producToAdd));
} elseif (!$delete and !$producToAdd->isAvailableWhenOutOfStock($producToAdd->out_of_stock) and !Attribute::checkAttributeQty((int) $idProductAttribute, (int) $qty)) {
if (Tools::getValue('ajax') == 'true') {
die('{"hasError" : true, "errors" : ["' . Tools::displayError('There is not enough product in stock.', false) . '"]}');
} else {
$this->errors[] = Tools::displayError('There is not enough product in stock.');
}
}
} elseif (!$delete and !$producToAdd->checkQty((int) $qty)) {
if (Tools::getValue('ajax') == 'true') {
die('{"hasError" : true, "errors" : ["' . Tools::displayError('There is not enough product in stock.') . '"]}');
} else {
$this->errors[] = Tools::displayError('There is not enough product in stock.');
}
}
/* Check vouchers compatibility */
if ($add and ($producToAdd->specificPrice and (double) $producToAdd->specificPrice['reduction'] or $producToAdd->on_sale)) {
$discounts = self::$cart->getDiscounts();
foreach ($discounts as $discount) {
if (!$discount['cumulable_reduction']) {
$this->errors[] = Tools::displayError('Cannot add this product because current voucher does not allow additional discounts.');
}
}
}
if (!sizeof($this->errors)) {
if ($add and $qty >= 0) {
/* Product addition to the cart */
if (!isset(self::$cart->id) or !self::$cart->id) {
self::$cart->add();
if (self::$cart->id) {
self::$cookie->id_cart = (int) self::$cart->id;
}
}
if ($add and !$producToAdd->hasAllRequiredCustomizableFields() and !$customizationId) {
$this->errors[] = Tools::displayError('Please fill in all required fields, then save the customization.');
}
if (!sizeof($this->errors)) {
$updateQuantity = self::$cart->updateQty((int) $qty, (int) $idProduct, (int) $idProductAttribute, $customizationId, Tools::getValue('op', 'up'));
if ($updateQuantity < 0) {
/* if product has attribute, minimal quantity is set with minimal quantity of attribute*/
if ((int) $idProductAttribute) {
$minimal_quantity = Attribute::getAttributeMinimalQty((int) $idProductAttribute);
} else {
$minimal_quantity = $producToAdd->minimal_quantity;
}
if (Tools::getValue('ajax') == 'true') {
die('{"hasError" : true, "errors" : ["' . Tools::displayError('You must add', false) . ' ' . $minimal_quantity . ' ' . Tools::displayError('Minimum quantity', false) . '"]}');
} else {
$this->errors[] = Tools::displayError('You must add') . ' ' . $minimal_quantity . ' ' . Tools::displayError('Minimum quantity') . ((isset($_SERVER['HTTP_REFERER']) and basename($_SERVER['HTTP_REFERER']) == 'order.php' or !Tools::isSubmit('ajax') and substr(basename($_SERVER['REQUEST_URI']), 0, strlen('cart.php')) == 'cart.php') ? '<script language="javascript">setTimeout("history.back()",5000);</script><br />- ' . Tools::displayError('You will be redirected to your cart in a few seconds.') : '');
}
} elseif (!$updateQuantity) {
if (Tools::getValue('ajax') == 'true') {
die('{"hasError" : true, "errors" : ["' . Tools::displayError('You already have the maximum quantity available for this product.', false) . '"]}');
//.........这里部分代码省略.........
示例4: processChangeProductInCart
/**
* This process add or update a product in the cart
*/
protected function processChangeProductInCart()
{
$mode = Tools::getIsset('update') && $this->id_product ? 'update' : 'add';
if ($this->qty == 0) {
$this->errors[] = Tools::displayError('Null quantity.', !Tools::getValue('ajax'));
} elseif (!$this->id_product) {
$this->errors[] = Tools::displayError('Product not found', !Tools::getValue('ajax'));
}
$product = new Product($this->id_product, true, $this->context->language->id);
if (!$product->id || !$product->active || !$product->checkAccess($this->context->cart->id_customer)) {
$this->errors[] = Tools::displayError('This product is no longer available.', !Tools::getValue('ajax'));
return;
}
$qty_to_check = $this->qty;
$cart_products = $this->context->cart->getProducts();
if (is_array($cart_products)) {
foreach ($cart_products as $cart_product) {
if ((!isset($this->id_product_attribute) || $cart_product['id_product_attribute'] == $this->id_product_attribute) && (isset($this->id_product) && $cart_product['id_product'] == $this->id_product)) {
$qty_to_check = $cart_product['cart_quantity'];
if (Tools::getValue('op', 'up') == 'down') {
$qty_to_check -= $this->qty;
} else {
$qty_to_check += $this->qty;
}
break;
}
}
}
// Check product quantity availability
if ($this->id_product_attribute) {
if (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !Attribute::checkAttributeQty($this->id_product_attribute, $qty_to_check)) {
$this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax'));
}
} elseif ($product->hasAttributes()) {
$minimumQuantity = $product->out_of_stock == 2 ? !Configuration::get('PS_ORDER_OUT_OF_STOCK') : !$product->out_of_stock;
$this->id_product_attribute = Product::getDefaultAttribute($product->id, $minimumQuantity);
// @todo do something better than a redirect admin !!
if (!$this->id_product_attribute) {
Tools::redirectAdmin($this->context->link->getProductLink($product));
} elseif (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !Attribute::checkAttributeQty($this->id_product_attribute, $qty_to_check)) {
$this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax'));
}
} elseif (!$product->checkQty($qty_to_check)) {
$this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax'));
}
// If no errors, process product addition
if (!$this->errors && $mode == 'add') {
// Add cart if no cart found
if (!$this->context->cart->id) {
if (Context::getContext()->cookie->id_guest) {
$guest = new Guest(Context::getContext()->cookie->id_guest);
$this->context->cart->mobile_theme = $guest->mobile_theme;
}
$this->context->cart->add();
if ($this->context->cart->id) {
$this->context->cookie->id_cart = (int) $this->context->cart->id;
}
}
// Check customizable fields
if (!$product->hasAllRequiredCustomizableFields() && !$this->customization_id) {
$this->errors[] = Tools::displayError('Please fill in all of the required fields, and then save your customizations.', !Tools::getValue('ajax'));
}
if (!$this->errors) {
$cart_rules = $this->context->cart->getCartRules();
$available_cart_rules = CartRule::getCustomerCartRules($this->context->language->id, isset($this->context->customer->id) ? $this->context->customer->id : 0, true, true, true, $this->context->cart, false, true);
$update_quantity = $this->context->cart->updateQty($this->qty, $this->id_product, $this->id_product_attribute, $this->customization_id, Tools::getValue('op', 'up'), $this->id_address_delivery);
if ($update_quantity < 0) {
// If product has attribute, minimal quantity is set with minimal quantity of attribute
$minimal_quantity = $this->id_product_attribute ? Attribute::getAttributeMinimalQty($this->id_product_attribute) : $product->minimal_quantity;
$this->errors[] = sprintf(Tools::displayError('You must add %d minimum quantity', !Tools::getValue('ajax')), $minimal_quantity);
} elseif (!$update_quantity) {
$this->errors[] = Tools::displayError('You already have the maximum quantity available for this product.', !Tools::getValue('ajax'));
} elseif ((int) Tools::getValue('allow_refresh')) {
// If the cart rules has changed, we need to refresh the whole cart
$cart_rules2 = $this->context->cart->getCartRules();
if (count($cart_rules2) != count($cart_rules)) {
$this->ajax_refresh = true;
} elseif (count($cart_rules2)) {
$rule_list = array();
foreach ($cart_rules2 as $rule) {
$rule_list[] = $rule['id_cart_rule'];
}
foreach ($cart_rules as $rule) {
if (!in_array($rule['id_cart_rule'], $rule_list)) {
$this->ajax_refresh = true;
break;
}
}
} else {
$available_cart_rules2 = CartRule::getCustomerCartRules($this->context->language->id, isset($this->context->customer->id) ? $this->context->customer->id : 0, true, true, true, $this->context->cart, false, true);
if (count($available_cart_rules2) != count($available_cart_rules)) {
$this->ajax_refresh = true;
} elseif (count($available_cart_rules2)) {
$rule_list = array();
foreach ($available_cart_rules2 as $rule) {
$rule_list[] = $rule['id_cart_rule'];
}
//.........这里部分代码省略.........
示例5: validateGlobalCartProductQuantityUpdate
public function validateGlobalCartProductQuantityUpdate($add, $delete, $qty, $producToAdd, $idProduct, $idProductAttribute, &$errors)
{
global $cookie, $cart;
// code taken from CartController preProcess()
if ((!$producToAdd->id or !$producToAdd->active) and !$delete) {
$errors[] = Tools::displayError('Product is no longer available.', false);
return false;
}
/* Check the quantity availability */
if ($idProductAttribute and is_numeric($idProductAttribute)) {
if (!$delete and !$producToAdd->isAvailableWhenOutOfStock($producToAdd->out_of_stock) and !Attribute::checkAttributeQty((int) $idProductAttribute, (int) $qty)) {
$errors[] = Tools::displayError('There is not enough product in stock.', false);
return false;
}
} elseif ($producToAdd->hasAttributes() and !$delete) {
$errors[] = 'Product must have a combination chosen';
return false;
} elseif (!$delete and !$producToAdd->checkQty((int) $qty)) {
$errors[] = Tools::displayError('There is not enough product in stock.', false);
return false;
}
/* Check vouchers compatibility */
if ($add and ($producToAdd->specificPrice and (double) $producToAdd->specificPrice['reduction'] or $producToAdd->on_sale)) {
$discounts = $cart->getDiscounts();
$hasUndiscountedProduct = null;
foreach ($discounts as $discount) {
if (is_null($hasUndiscountedProduct)) {
$hasUndiscountedProduct = false;
foreach ($cart->getProducts() as $product) {
if ($product['reduction_applies'] === false) {
$hasUndiscountedProduct = true;
break;
}
}
}
if (!$discount['cumulable_reduction'] && ($discount['id_discount_type'] != 1 || !$hasUndiscountedProduct)) {
$errors[] = Tools::displayError('Cannot add this product because current voucher does not allow additional discounts.');
return false;
}
}
}
return true;
}
示例6: Product
$errors[] = Tools::displayError('product not found');
} else {
$producToAdd = new Product(intval($idProduct), false, intval($cookie->id_lang));
if ((!$producToAdd->id or !$producToAdd->active) and !$delete) {
$errors[] = Tools::displayError('product is no longer available');
} else {
/* Check the quantity availability */
if ($idProductAttribute and is_numeric($idProductAttribute)) {
if (!$delete and !$producToAdd->isAvailableWhenOutOfStock($producToAdd->out_of_stock) and !Attribute::checkAttributeQty(intval($idProductAttribute), intval($qty))) {
$errors[] = Tools::displayError('product is no longer available');
}
} elseif ($producToAdd->hasAttributes() and !$delete) {
$idProductAttribute = Product::getDefaultAttribute(intval($producToAdd->id), intval($producToAdd->out_of_stock) == 2 ? !intval(Configuration::get('PS_ORDER_OUT_OF_STOCK')) : !intval($producToAdd->out_of_stock));
if (!$idProductAttribute) {
Tools::redirectAdmin($link->getProductLink($producToAdd));
} elseif (!$delete and !$producToAdd->isAvailableWhenOutOfStock($producToAdd->out_of_stock) and !Attribute::checkAttributeQty(intval($idProductAttribute), intval($qty))) {
$errors[] = Tools::displayError('product is no longer available');
}
} elseif (!$delete and !$producToAdd->checkQty(intval($qty))) {
$errors[] = Tools::displayError('product is no longer available');
}
/* Check vouchers compatibility */
if ($add and (intval($producToAdd->reduction_price) or intval($producToAdd->reduction_percent) or $producToAdd->on_sale)) {
$discounts = $cart->getDiscounts();
foreach ($discounts as $discount) {
if (!$discount['cumulable_reduction']) {
$errors[] = Tools::displayError('cannot add this product because current voucher doesn\'t allow additional discounts');
}
}
}
if (!sizeof($errors)) {
示例7: restoreOrderToCart
protected function restoreOrderToCart(Cart $cart)
{
if (!$cart || !ValidateCore::isLoadedObject($cart)) {
return null;
}
Db::getInstance()->execute('BEGIN');
$new_cart = null;
try {
/** @var CartCore $new_cart */
/** @noinspection PhpUndefinedClassInspection */
$new_cart = new Cart();
/** @noinspection PhpUndefinedFieldInspection */
$new_cart->id_customer = (int) $cart->id_customer;
/** @noinspection PhpUndefinedFieldInspection */
$new_cart->id_address_delivery = (int) $cart->id_address_delivery;
/** @noinspection PhpUndefinedFieldInspection */
$new_cart->id_address_invoice = (int) $cart->id_address_invoice;
/** @noinspection PhpUndefinedFieldInspection */
$new_cart->id_lang = (int) $cart->id_lang;
/** @noinspection PhpUndefinedFieldInspection */
$new_cart->id_currency = (int) $cart->id_currency;
/** @noinspection PhpUndefinedFieldInspection */
$new_cart->id_carrier = (int) $cart->id_carrier;
/** @noinspection PhpUndefinedFieldInspection */
$new_cart->recyclable = (int) $cart->recyclable;
/** @noinspection PhpUndefinedFieldInspection */
$new_cart->gift = (int) $cart->gift;
$new_cart->add();
/** @noinspection PhpUndefinedMethodInspection */
$products = $cart->getProducts();
if ($products) {
foreach ($products as $p) {
$idProduct = $p['id_product'];
$idProductAttribute = $p['id_product_attribute'];
$qty = $p['cart_quantity'];
/** @noinspection PhpUndefinedClassInspection */
/** @noinspection PhpUndefinedFieldInspection */
$producToAdd = new Product((int) $idProduct, true, (int) $cart->id_lang);
/** @noinspection PhpUndefinedFieldInspection */
if (!$producToAdd->id || !$producToAdd->active) {
continue;
}
/* Check the quantity availability */
if ($idProductAttribute > 0 and is_numeric($idProductAttribute)) {
/** @noinspection PhpUndefinedClassInspection */
/** @noinspection PhpUndefinedMethodInspection */
/** @noinspection PhpUndefinedFieldInspection */
if (!$producToAdd->isAvailableWhenOutOfStock($producToAdd->out_of_stock) and !Attribute::checkAttributeQty((int) $idProductAttribute, (int) $qty)) {
/* There is not enough product attribute in stock - set customer qty to current stock on hand */
/** @noinspection PhpUndefinedFunctionInspection */
$qty = getAttributeQty($idProductAttribute);
}
} elseif (!$producToAdd->checkQty((int) $qty)) {
/* There is not enough product in stock - set customer qty to current stock on hand */
/** @noinspection PhpUndefinedMethodInspection */
$qty = $producToAdd->getQuantity($idProduct);
}
$new_cart->updateQty((int) $qty, (int) $idProduct, (int) $idProductAttribute, NULL, 'up');
unset($p);
}
}
$new_cart->update();
Db::getInstance()->execute('COMMIT');
} catch (Exception $e) {
Db::getInstance()->execute('ROLLBACK');
throw $e;
}
/** @noinspection PhpUndefinedFieldInspection */
$this->context->cookie->id_cart = (int) $new_cart->id;
return $new_cart;
}
示例8: ajaxProcessUpdateQty
public function ajaxProcessUpdateQty()
{
if ($this->tabAccess['edit'] === '1') {
$errors = array();
if (!$this->context->cart->id) {
return;
}
if ($this->context->cart->OrderExists()) {
$errors[] = Tools::displayError('An order has already been placed with this cart.');
} elseif (!($id_product = (int) Tools::getValue('id_product')) || !($product = new Product((int) $id_product, true, $this->context->language->id))) {
$errors[] = Tools::displayError('Invalid product');
} elseif (!($qty = Tools::getValue('qty')) || $qty == 0) {
$errors[] = Tools::displayError('Invalid quantity');
} else {
$icp = (int) Tools::getValue('icp');
if ($icp != 'add' && (!($icp = (int) $icp) || $icp == 0)) {
$errors[] = Tools::displayError('Invalid cart product reference');
}
}
if (!count($errors)) {
// Don't try to use a product if not instanciated before due to errors
if (isset($product) && $product->id) {
$id_product_attribute = Tools::getValue('id_product_attribute');
if ($icp == 'add') {
$id_cart_product = 0;
$properties = $product->productProperties();
$qty_policy = $properties['pp_qty_policy'];
$qty = PP::resolveInputQty($qty, $qty_policy, $properties['pp_qty_step']);
if (PP::qtyPolicyFractional($qty_policy)) {
$quantity_fractional = $qty;
$qty = 1;
$update_qty = $quantity_fractional;
} else {
$qty = (int) $qty;
$quantity_fractional = 0;
$update_qty = $qty;
}
} else {
$cart_products = $this->context->cart->getProducts();
if (count($cart_products)) {
foreach ($cart_products as $cart_product) {
if ($icp == (int) $cart_product['id_cart_product']) {
$id_cart_product = $icp;
$qty = (int) $qty;
$quantity_fractional = $cart_product['cart_quantity_fractional'];
$update_qty = $qty;
break;
}
}
}
}
if (isset($id_cart_product)) {
if ($id_product_attribute != 0) {
if (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !Attribute::checkAttributeQty((int) $id_product_attribute, PP::resolveQty($qty, $quantity_fractional))) {
$errors[] = Tools::displayError('There is not enough product in stock.');
}
} else {
if (!$product->checkQty(PP::resolveQty($qty, $quantity_fractional))) {
$errors[] = Tools::displayError('There is not enough product in stock.');
}
}
if (!($id_customization = (int) Tools::getValue('id_customization', 0)) && !$product->hasAllRequiredCustomizableFields()) {
$errors[] = Tools::displayError('Please fill in all required fields.');
}
$this->context->cart->save();
} else {
$errors[] = Tools::displayError('This product cannot be added to the cart.');
}
} else {
$errors[] = Tools::displayError('This product cannot be added to the cart.');
}
}
if (!count($errors)) {
if ((int) $update_qty < 0) {
$update_qty = str_replace('-', '', $update_qty);
$operator = 'down';
} else {
$operator = 'up';
}
if (!($qty_upd = $this->context->cart->updateQty($update_qty, $id_product, (int) $id_product_attribute, (int) $id_customization, $operator, 0, null, true, $id_cart_product))) {
$errors[] = Tools::displayError('You already have the maximum quantity available for this product.');
} elseif ($qty_upd < 0) {
$minimal_qty = $id_product_attribute ? $product->attributeMinQty((int) $id_product_attribute) : $product->minQty();
$errors[] = sprintf(Tools::displayError('You must add a minimum quantity of %d', false), $minimal_qty);
}
}
echo Tools::jsonEncode(array_merge($this->ajaxReturnVars(), array('errors' => $errors)));
}
}
示例9: checkStock
/**
* @param ShopgateCart $cart
* @return array
*/
public function checkStock(ShopgateCart $cart)
{
$result = array();
foreach ($cart->getItems() as $item) {
$cartItem = new ShopgateCartItem();
$cartItem->setItemNumber($item->getItemNumber());
list($productId, $attributeId) = ShopgateHelper::getProductIdentifiers($item);
/** @var ProductCore $product */
if (version_compare(_PS_VERSION_, '1.5.2.0', '<')) {
$product = new BWProduct($productId, true, $this->getPlugin()->getLanguageId());
} else {
$product = new Product($productId, $this->getPlugin()->getLanguageId());
}
if (empty($attributeId) && !empty($productId) && $product->hasAttributes()) {
$result[] = $cartItem;
continue;
}
$product->loadStockData();
/**
* validate attributes
*/
if ($product->hasAttributes()) {
$invalidAttribute = false;
$message = '';
if (!$attributeId) {
$cartItem->setError(ShopgateLibraryException::UNKNOWN_ERROR_CODE);
$cartItem->setErrorText('attributeId required');
$message = 'attributeId required';
$invalidAttribute = true;
} else {
$validAttributeId = false;
if (version_compare(_PS_VERSION_, '1.5.0', '<')) {
$attributeIds = BWProduct::getProductAttributesIds($productId);
} else {
$attributeIds = $product->getProductAttributesIds($productId, true);
}
foreach ($attributeIds as $attribute) {
if ($attributeId == $attribute['id_product_attribute']) {
$validAttributeId = true;
continue;
}
}
if (!$validAttributeId) {
$invalidAttribute = true;
$message = 'invalid attributeId';
}
}
if ($invalidAttribute) {
$cartItem->setError(ShopgateLibraryException::UNKNOWN_ERROR_CODE);
$cartItem->setErrorText($message);
$result[] = $cartItem;
continue;
}
}
if ($product->id) {
if (version_compare(_PS_VERSION_, '1.5.0', '<')) {
$quantity = $product->getStockAvailable();
//getQuantityAvailableByProduct($productId, $attributeId, $this->getPlugin()->getContext()->shop->id);
} else {
$quantity = StockAvailable::getQuantityAvailableByProduct($productId, $attributeId, $this->getPlugin()->getContext()->shop->id);
}
$cartItem->setStockQuantity($quantity);
$cartItem->setIsBuyable($product->available_for_order && ($attributeId ? Attribute::checkAttributeQty($attributeId, ShopgateItemsCartExportJson::DEFAULT_QTY_TO_CHECK) : $product->checkQty(ShopgateItemsCartExportJson::DEFAULT_QTY_TO_CHECK)) || Product::isAvailableWhenOutOfStock($product->out_of_stock) ? 1 : 0);
} else {
$cartItem->setError(ShopgateLibraryException::CART_ITEM_PRODUCT_NOT_FOUND);
$cartItem->setErrorText(ShopgateLibraryException::getMessageFor($cartItem->getError()));
}
$result[] = $cartItem;
}
return $result;
}