本文整理汇总了PHP中WarehouseProductLocation类的典型用法代码示例。如果您正苦于以下问题:PHP WarehouseProductLocation类的具体用法?PHP WarehouseProductLocation怎么用?PHP WarehouseProductLocation使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了WarehouseProductLocation类的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: resetStockAvailable
public function resetStockAvailable()
{
$products = WarehouseProductLocation::getProducts((int) $this->id);
foreach ($products as $product) {
StockAvailable::synchronize((int) $product['id_product']);
}
}
示例2: addAttribute
public function addAttribute($price, $weight, $unit_impact, $ecotax, $id_images, $reference, $ean13, $default, $location = null, $upc = null, $minimal_quantity = 1, array $id_shop_list = array(), $available_date = null)
{
if (!$this->id) {
return;
}
$price = str_replace(',', '.', $price);
$weight = str_replace(',', '.', $weight);
$combination = new Combination();
$combination->id_product = (int) $this->id;
$combination->price = (double) $price;
$combination->ecotax = (double) $ecotax;
$combination->quantity = 0;
$combination->weight = (double) $weight;
$combination->unit_price_impact = (double) $unit_impact;
$combination->reference = pSQL($reference);
$combination->location = pSQL($location);
$combination->ean13 = pSQL($ean13);
$combination->upc = pSQL($upc);
$combination->default_on = (int) $default;
$minimal_quantity = str_replace(',', '.', $minimal_quantity);
$this->setMinQty($minimal_quantity, $combination);
$combination->available_date = $available_date;
if (count($id_shop_list)) {
$combination->id_shop_list = array_unique($id_shop_list);
}
$combination->add();
if (!$combination->id) {
return false;
}
$total_quantity = (int) Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue('
SELECT SUM(quantity + quantity_remainder) as quantity
FROM ' . _DB_PREFIX_ . 'stock_available
WHERE id_product = ' . (int) $this->id . '
AND id_product_attribute <> 0 ');
if (!$total_quantity) {
Db::getInstance()->update('stock_available', array('quantity' => 0, 'quantity_remainder' => 0), '`id_product` = ' . $this->id);
}
$id_default_attribute = Product::updateDefaultAttribute($this->id);
if ($id_default_attribute) {
$this->cache_default_attribute = $id_default_attribute;
if (!$combination->available_date) {
$this->setAvailableDate();
}
}
if (!empty($id_images)) {
$combination->setImages($id_images);
}
Tools::clearColorListCache($this->id);
if (Configuration::get('PS_DEFAULT_WAREHOUSE_NEW_PRODUCT') != 0 && Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')) {
$warehouse_location_entity = new WarehouseProductLocation();
$warehouse_location_entity->id_product = $this->id;
$warehouse_location_entity->id_product_attribute = (int) $combination->id;
$warehouse_location_entity->id_warehouse = Configuration::get('PS_DEFAULT_WAREHOUSE_NEW_PRODUCT');
$warehouse_location_entity->location = pSQL('');
$warehouse_location_entity->save();
}
return (int) $combination->id;
}
示例3: postProcess
/**
* AdminController::postProcess() override
* @see AdminController::postProcess()
*/
public function postProcess()
{
parent::postProcess();
// Checks access
if (Tools::isSubmit('addStock') && !($this->tabAccess['add'] === '1')) {
$this->errors[] = Tools::displayError('You do not have the required permission to add stock.');
}
if (Tools::isSubmit('removeStock') && !($this->tabAccess['delete'] === '1')) {
$this->errors[] = Tools::displayError('You do not have the required permission to delete stock');
}
if (Tools::isSubmit('transferStock') && !($this->tabAccess['edit'] === '1')) {
$this->errors[] = Tools::displayError('You do not have the required permission to transfer stock.');
}
if (count($this->errors)) {
return;
}
// Global checks when add / remove / transfer product
if ((Tools::isSubmit('addstock') || Tools::isSubmit('removestock') || Tools::isSubmit('transferstock')) && Tools::isSubmit('is_post')) {
// get product ID
$id_product = (int) Tools::getValue('id_product', 0);
if ($id_product <= 0) {
$this->errors[] = Tools::displayError('The selected product is not valid.');
}
// get product_attribute ID
$id_product_attribute = (int) Tools::getValue('id_product_attribute', 0);
// check the product hash
$check = Tools::getValue('check', '');
$check_valid = md5(_COOKIE_KEY_ . $id_product . $id_product_attribute);
if ($check != $check_valid) {
$this->errors[] = Tools::displayError('The selected product is not valid.');
}
// get quantity and check that the post value is really an integer
// If it's not, we have nothing to do
$quantity = Tools::getValue('quantity', 0);
if (!is_numeric($quantity) || (int) $quantity <= 0) {
$this->errors[] = Tools::displayError('The quantity value is not valid.');
}
$quantity = (int) $quantity;
$token = Tools::getValue('token') ? Tools::getValue('token') : $this->token;
$redirect = self::$currentIndex . '&token=' . $token;
}
// Global checks when add / remove product
if ((Tools::isSubmit('addstock') || Tools::isSubmit('removestock')) && Tools::isSubmit('is_post')) {
// get warehouse id
$id_warehouse = (int) Tools::getValue('id_warehouse', 0);
if ($id_warehouse <= 0 || !Warehouse::exists($id_warehouse)) {
$this->errors[] = Tools::displayError('The selected warehouse is not valid.');
}
// get stock movement reason id
$id_stock_mvt_reason = (int) Tools::getValue('id_stock_mvt_reason', 0);
if ($id_stock_mvt_reason <= 0 || !StockMvtReason::exists($id_stock_mvt_reason)) {
$this->errors[] = Tools::displayError('The reason is not valid.');
}
// get usable flag
$usable = Tools::getValue('usable', null);
if (is_null($usable)) {
$this->errors[] = Tools::displayError('You have to specify whether the product quantity is usable for sale on shops or not.');
}
$usable = (bool) $usable;
}
if (Tools::isSubmit('addstock') && Tools::isSubmit('is_post')) {
// get product unit price
$price = str_replace(',', '.', Tools::getValue('price', 0));
if (!is_numeric($price)) {
$this->errors[] = Tools::displayError('The product price is not valid.');
}
$price = round(floatval($price), 6);
// get product unit price currency id
$id_currency = (int) Tools::getValue('id_currency', 0);
if ($id_currency <= 0 || (!($result = Currency::getCurrency($id_currency)) || empty($result))) {
$this->errors[] = Tools::displayError('The selected currency is not valid.');
}
// if all is ok, add stock
if (count($this->errors) == 0) {
$warehouse = new Warehouse($id_warehouse);
// convert price to warehouse currency if needed
if ($id_currency != $warehouse->id_currency) {
// First convert price to the default currency
$price_converted_to_default_currency = Tools::convertPrice($price, $id_currency, false);
// Convert the new price from default currency to needed currency
$price = Tools::convertPrice($price_converted_to_default_currency, $warehouse->id_currency, true);
}
// add stock
$stock_manager = StockManagerFactory::getManager();
if ($stock_manager->addProduct($id_product, $id_product_attribute, $warehouse, $quantity, $id_stock_mvt_reason, $price, $usable)) {
// Create warehouse_product_location entry if we add stock to a new warehouse
$id_wpl = (int) WarehouseProductLocation::getIdByProductAndWarehouse($id_product, $id_product_attribute, $id_warehouse);
if (!$id_wpl) {
$wpl = new WarehouseProductLocation();
$wpl->id_product = (int) $id_product;
$wpl->id_product_attribute = (int) $id_product_attribute;
$wpl->id_warehouse = (int) $id_warehouse;
$wpl->save();
}
StockAvailable::synchronize($id_product);
if (Tools::isSubmit('addstockAndStay')) {
//.........这里部分代码省略.........
示例4: ajaxProcessEditProductOnOrder
//.........这里部分代码省略.........
if ($order_detail->id_order_invoice != $order_invoice->id) {
$old_order_invoice = new OrderInvoice($order_detail->id_order_invoice);
// We remove cost of products
$old_order_invoice->total_products -= $order_detail->total_price_tax_excl;
$old_order_invoice->total_products_wt -= $order_detail->total_price_tax_incl;
$old_order_invoice->total_paid_tax_excl -= $order_detail->total_price_tax_excl;
$old_order_invoice->total_paid_tax_incl -= $order_detail->total_price_tax_incl;
$res &= $old_order_invoice->update();
$order_invoice->total_products += $order_detail->total_price_tax_excl;
$order_invoice->total_products_wt += $order_detail->total_price_tax_incl;
$order_invoice->total_paid_tax_excl += $order_detail->total_price_tax_excl;
$order_invoice->total_paid_tax_incl += $order_detail->total_price_tax_incl;
$order_detail->id_order_invoice = $order_invoice->id;
}
}
if ($diff_price_tax_incl != 0 && $diff_price_tax_excl != 0) {
$order_detail->unit_price_tax_excl = $product_price_tax_excl;
$order_detail->unit_price_tax_incl = $product_price_tax_incl;
$order_detail->total_price_tax_incl += $diff_price_tax_incl;
$order_detail->total_price_tax_excl += $diff_price_tax_excl;
if (isset($order_invoice)) {
// Apply changes on OrderInvoice
$order_invoice->total_products += $diff_price_tax_excl;
$order_invoice->total_products_wt += $diff_price_tax_incl;
$order_invoice->total_paid_tax_excl += $diff_price_tax_excl;
$order_invoice->total_paid_tax_incl += $diff_price_tax_incl;
}
// Apply changes on Order
$order = new Order($order_detail->id_order);
$order->total_products += $diff_price_tax_excl;
$order->total_products_wt += $diff_price_tax_incl;
$order->total_paid += $diff_price_tax_incl;
$order->total_paid_tax_excl += $diff_price_tax_excl;
$order->total_paid_tax_incl += $diff_price_tax_incl;
$res &= $order->update();
}
$old_quantity = $order_detail->product_quantity;
$order_detail->product_quantity = $product_quantity;
$order_detail->reduction_percent = 0;
// update taxes
$res &= $order_detail->updateTaxAmount($order);
// Save order detail
$res &= $order_detail->update();
// Update weight SUM
$order_carrier = new OrderCarrier((int) $order->getIdOrderCarrier());
if (Validate::isLoadedObject($order_carrier)) {
$order_carrier->weight = (double) $order->getTotalWeight();
$res &= $order_carrier->update();
if ($res) {
$order->weight = sprintf("%.3f " . Configuration::get('PS_WEIGHT_UNIT'), $order_carrier->weight);
}
}
// Save order invoice
if (isset($order_invoice)) {
$res &= $order_invoice->update();
}
// Update product available quantity
StockAvailable::updateQuantity($order_detail->product_id, $order_detail->product_attribute_id, $old_quantity - $order_detail->product_quantity, $order->id_shop);
$products = $this->getProducts($order);
// Get the last product
$product = $products[$order_detail->id];
$resume = OrderSlip::getProductSlipResume($order_detail->id);
$product['quantity_refundable'] = $product['product_quantity'] - $resume['product_quantity'];
$product['amount_refundable'] = $product['total_price_tax_excl'] - $resume['amount_tax_excl'];
$product['amount_refund'] = Tools::displayPrice($resume['amount_tax_incl']);
$product['refund_history'] = OrderSlip::getProductSlipDetail($order_detail->id);
if ($product['id_warehouse'] != 0) {
$warehouse = new Warehouse((int) $product['id_warehouse']);
$product['warehouse_name'] = $warehouse->name;
$warehouse_location = WarehouseProductLocation::getProductLocation($product['product_id'], $product['product_attribute_id'], $product['id_warehouse']);
if (!empty($warehouse_location)) {
$product['warehouse_location'] = $warehouse_location;
} else {
$product['warehouse_location'] = false;
}
} else {
$product['warehouse_name'] = '--';
$product['warehouse_location'] = false;
}
// Get invoices collection
$invoice_collection = $order->getInvoicesCollection();
$invoice_array = array();
foreach ($invoice_collection as $invoice) {
/** @var OrderInvoice $invoice */
$invoice->name = $invoice->getInvoiceNumberFormatted(Context::getContext()->language->id, (int) $order->id_shop);
$invoice_array[] = $invoice;
}
// Assign to smarty informations in order to show the new product line
$this->context->smarty->assign(array('product' => $product, 'order' => $order, 'currency' => new Currency($order->id_currency), 'can_edit' => $this->tabAccess['edit'], 'invoices_collection' => $invoice_collection, 'current_id_lang' => Context::getContext()->language->id, 'link' => Context::getContext()->link, 'current_index' => self::$currentIndex, 'display_warehouse' => (int) Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')));
if (!$res) {
die(Tools::jsonEncode(array('result' => $res, 'error' => Tools::displayError('An error occurred while editing the product line.'))));
}
if (is_array(Tools::getValue('product_quantity'))) {
$view = $this->createTemplate('_customized_data.tpl')->fetch();
} else {
$view = $this->createTemplate('_product_line.tpl')->fetch();
}
$this->sendChangedNotification($order);
die(Tools::jsonEncode(array('result' => $res, 'view' => $view, 'can_edit' => $this->tabAccess['add'], 'invoices_collection' => $invoice_collection, 'order' => $order, 'invoices' => $invoice_array, 'documents_html' => $this->createTemplate('_documents.tpl')->fetch(), 'shipping_html' => $this->createTemplate('_shipping.tpl')->fetch(), 'customized_product' => is_array(Tools::getValue('product_quantity')))));
}
示例5: attributeImportOne
//.........这里部分代码省略.........
$product->checkDefaultAttributes();
if (!$product->cache_default_attribute && !$validateOnly) {
Product::updateDefaultAttribute($product->id);
}
if ($id_product_attribute) {
if (!$validateOnly) {
// now adds the attributes in the attribute_combination table
if ($id_product_attribute_update) {
Db::getInstance()->execute('
DELETE FROM ' . _DB_PREFIX_ . 'product_attribute_combination
WHERE id_product_attribute = ' . (int) $id_product_attribute);
}
foreach ($attributes_to_add as $attribute_to_add) {
Db::getInstance()->execute('
INSERT IGNORE INTO ' . _DB_PREFIX_ . 'product_attribute_combination (id_attribute, id_product_attribute)
VALUES (' . (int) $attribute_to_add . ',' . (int) $id_product_attribute . ')', false);
}
}
// set advanced stock managment
if (isset($info['advanced_stock_management'])) {
if ($info['advanced_stock_management'] != 1 && $info['advanced_stock_management'] != 0) {
$this->warnings[] = sprintf($this->trans('Advanced stock management has incorrect value. Not set for product with id %d.', array(), 'Admin.Parameters.Notification'), $product->id);
} elseif (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && $info['advanced_stock_management'] == 1) {
$this->warnings[] = sprintf($this->trans('Advanced stock management is not enabled, cannot enable on product with id %d.', array(), 'Admin.Parameters.Notification'), $product->id);
} elseif (!$validateOnly) {
$product->setAdvancedStockManagement($info['advanced_stock_management']);
}
// automaticly disable depends on stock, if a_s_m set to disabled
if (!$validateOnly && StockAvailable::dependsOnStock($product->id) == 1 && $info['advanced_stock_management'] == 0) {
StockAvailable::setProductDependsOnStock($product->id, 0, null, $id_product_attribute);
}
}
// Check if warehouse exists
if (isset($info['warehouse']) && $info['warehouse']) {
if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')) {
$this->warnings[] = sprintf($this->trans('Advanced stock management is not enabled, warehouse is not set on product with id %d.', array(), 'Admin.Parameters.Notification'), $product->id);
} else {
if (Warehouse::exists($info['warehouse'])) {
$warehouse_location_entity = new WarehouseProductLocation();
$warehouse_location_entity->id_product = $product->id;
$warehouse_location_entity->id_product_attribute = $id_product_attribute;
$warehouse_location_entity->id_warehouse = $info['warehouse'];
if (!$validateOnly) {
if (WarehouseProductLocation::getProductLocation($product->id, $id_product_attribute, $info['warehouse']) !== false) {
$warehouse_location_entity->update();
} else {
$warehouse_location_entity->save();
}
StockAvailable::synchronize($product->id);
}
} else {
$this->warnings[] = sprintf($this->trans('Warehouse did not exist, cannot set on product %1$s.', array(), 'Admin.Parameters.Notification'), $product->name[$default_language]);
}
}
}
// stock available
if (isset($info['depends_on_stock'])) {
if ($info['depends_on_stock'] != 0 && $info['depends_on_stock'] != 1) {
$this->warnings[] = sprintf($this->trans('Incorrect value for "Depends on stock" for product %1$s ', array(), 'Admin.Notifications.Error'), $product->name[$default_language]);
} elseif ((!$info['advanced_stock_management'] || $info['advanced_stock_management'] == 0) && $info['depends_on_stock'] == 1) {
$this->warnings[] = sprintf($this->trans('Advanced stock management is not enabled, cannot set "Depends on stock" for product %1$s ', array(), 'Admin.Parameters.Notification'), $product->name[$default_language]);
} elseif (!$validateOnly) {
StockAvailable::setProductDependsOnStock($product->id, $info['depends_on_stock'], null, $id_product_attribute);
}
// This code allows us to set qty and disable depends on stock
if (isset($info['quantity']) && (int) $info['quantity']) {
// if depends on stock and quantity, add quantity to stock
if ($info['depends_on_stock'] == 1) {
$stock_manager = StockManagerFactory::getManager();
$price = str_replace(',', '.', $info['wholesale_price']);
if ($price == 0) {
$price = 1.0E-6;
}
$price = round(floatval($price), 6);
$warehouse = new Warehouse($info['warehouse']);
if (!$validateOnly && $stock_manager->addProduct((int) $product->id, $id_product_attribute, $warehouse, (int) $info['quantity'], 1, $price, true)) {
StockAvailable::synchronize((int) $product->id);
}
} elseif (!$validateOnly) {
if ($shop_is_feature_active) {
foreach ($id_shop_list as $shop) {
StockAvailable::setQuantity((int) $product->id, $id_product_attribute, (int) $info['quantity'], (int) $shop);
}
} else {
StockAvailable::setQuantity((int) $product->id, $id_product_attribute, (int) $info['quantity'], $this->context->shop->id);
}
}
}
} elseif (!$validateOnly) {
// if not depends_on_stock set, use normal qty
if ($shop_is_feature_active) {
foreach ($id_shop_list as $shop) {
StockAvailable::setQuantity((int) $product->id, $id_product_attribute, (int) $info['quantity'], (int) $shop);
}
} else {
StockAvailable::setQuantity((int) $product->id, $id_product_attribute, (int) $info['quantity'], $this->context->shop->id);
}
}
}
}
示例6: productImport
//.........这里部分代码省略.........
if (!empty($feature_name) && !empty($feature_value)) {
$id_feature = (int) Feature::addFeatureImport($feature_name, $position);
$id_product = null;
if (Tools::getValue('forceIDs') || Tools::getValue('match_ref')) {
$id_product = (int) $product->id;
}
$id_feature_value = (int) FeatureValue::addFeatureValueImport($id_feature, $feature_value, $id_product, $id_lang, $custom);
Product::addFeatureProductImport($product->id, $id_feature, $id_feature_value);
}
}
}
// clean feature positions to avoid conflict
Feature::cleanPositions();
// set advanced stock managment
if (isset($product->advanced_stock_management)) {
if ($product->advanced_stock_management != 1 && $product->advanced_stock_management != 0) {
$this->warnings[] = sprintf(Tools::displayError('Advanced stock management has incorrect value. Not set for product %1$s '), $product->name[$default_language_id]);
} elseif (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && $product->advanced_stock_management == 1) {
$this->warnings[] = sprintf(Tools::displayError('Advanced stock management is not enabled, cannot enable on product %1$s '), $product->name[$default_language_id]);
} else {
$product->setAdvancedStockManagement($product->advanced_stock_management);
}
// automaticly disable depends on stock, if a_s_m set to disabled
if (StockAvailable::dependsOnStock($product->id) == 1 && $product->advanced_stock_management == 0) {
StockAvailable::setProductDependsOnStock($product->id, 0);
}
}
// Check if warehouse exists
if (isset($product->warehouse) && $product->warehouse) {
if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')) {
$this->warnings[] = sprintf(Tools::displayError('Advanced stock management is not enabled, warehouse not set on product %1$s '), $product->name[$default_language_id]);
} else {
if (Warehouse::exists($product->warehouse)) {
// Get already associated warehouses
$associated_warehouses_collection = WarehouseProductLocation::getCollection($product->id);
// Delete any entry in warehouse for this product
foreach ($associated_warehouses_collection as $awc) {
$awc->delete();
}
$warehouse_location_entity = new WarehouseProductLocation();
$warehouse_location_entity->id_product = $product->id;
$warehouse_location_entity->id_product_attribute = 0;
$warehouse_location_entity->id_warehouse = $product->warehouse;
if (WarehouseProductLocation::getProductLocation($product->id, 0, $product->warehouse) !== false) {
$warehouse_location_entity->update();
} else {
$warehouse_location_entity->save();
}
StockAvailable::synchronize($product->id);
} else {
$this->warnings[] = sprintf(Tools::displayError('Warehouse did not exist, cannot set on product %1$s.'), $product->name[$default_language_id]);
}
}
}
// stock available
if (isset($product->depends_on_stock)) {
if ($product->depends_on_stock != 0 && $product->depends_on_stock != 1) {
$this->warnings[] = sprintf(Tools::displayError('Incorrect value for "depends on stock" for product %1$s '), $product->name[$default_language_id]);
} elseif ((!$product->advanced_stock_management || $product->advanced_stock_management == 0) && $product->depends_on_stock == 1) {
$this->warnings[] = sprintf(Tools::displayError('Advanced stock management not enabled, cannot set "depends on stock" for product %1$s '), $product->name[$default_language_id]);
} else {
StockAvailable::setProductDependsOnStock($product->id, $product->depends_on_stock);
}
// This code allows us to set qty and disable depends on stock
if (isset($product->quantity) && (int) $product->quantity) {
// if depends on stock and quantity, add quantity to stock
if ($product->depends_on_stock == 1) {
$stock_manager = StockManagerFactory::getManager();
$price = str_replace(',', '.', $product->wholesale_price);
if ($price == 0) {
$price = 1.0E-6;
}
$price = round(floatval($price), 6);
$warehouse = new Warehouse($product->warehouse);
if ($stock_manager->addProduct((int) $product->id, 0, $warehouse, (int) $product->quantity, 1, $price, true)) {
StockAvailable::synchronize((int) $product->id);
}
} else {
if (Shop::isFeatureActive()) {
foreach ($shops as $shop) {
StockAvailable::setQuantity((int) $product->id, 0, (int) $product->quantity, (int) $shop);
}
} else {
StockAvailable::setQuantity((int) $product->id, 0, (int) $product->quantity, (int) $this->context->shop->id);
}
}
}
} else {
if (Shop::isFeatureActive()) {
foreach ($shops as $shop) {
StockAvailable::setQuantity((int) $product->id, 0, (int) $product->quantity, (int) $shop);
}
} else {
StockAvailable::setQuantity((int) $product->id, 0, (int) $product->quantity, (int) $this->context->shop->id);
}
}
}
}
$this->closeCsvFile($handle);
}
示例7: attributeImport
//.........这里部分代码省略.........
$obj->cleanPositions((int) $id_attribute_group, false);
AttributeGroup::cleanPositions();
}
}
}
$product->checkDefaultAttributes();
if (!$product->cache_default_attribute) {
Product::updateDefaultAttribute($product->id);
}
if ($id_product_attribute) {
// now adds the attributes in the attribute_combination table
if ($id_product_attribute_update) {
Db::getInstance()->execute('
DELETE FROM ' . _DB_PREFIX_ . 'product_attribute_combination
WHERE id_product_attribute = ' . (int) $id_product_attribute);
}
foreach ($attributes_to_add as $attribute_to_add) {
Db::getInstance()->execute('
INSERT IGNORE INTO ' . _DB_PREFIX_ . 'product_attribute_combination (id_attribute, id_product_attribute)
VALUES (' . (int) $attribute_to_add . ',' . (int) $id_product_attribute . ')');
}
// set advanced stock managment
if (isset($info['advanced_stock_management'])) {
if ($info['advanced_stock_management'] != 1 && $info['advanced_stock_management'] != 0) {
$this->warnings[] = sprintf(Tools::displayError('Advanced stock management has incorrect value. Not set for product with id %s '), $product->id);
} elseif (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && $info['advanced_stock_management'] == 1) {
$this->warnings[] = sprintf(Tools::displayError('Advanced stock management is not enabled, can not enable on product with id %s '), $product->id);
} else {
$product->setAdvancedStockManagement($info['advanced_stock_management']);
}
// automaticly disable depends on stock, if a_s_m set to disabled
if (StockAvailable::dependsOnStock($product->id) == 1 && $info['advanced_stock_management'] == 0) {
StockAvailable::setProductDependsOnStock($product->id, 0, null, $id_product_attribute);
}
}
// Check if warehouse exists
if ($info['warehouse']) {
if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')) {
$this->warnings[] = sprintf(Tools::displayError('Advanced stock management is not enabled, warehouse not set on product with id %s '), $product->id);
} else {
if (Warehouse::exists($info['warehouse'])) {
$warehouse_location_entity = new WarehouseProductLocation();
$warehouse_location_entity->id_product = $product->id;
$warehouse_location_entity->id_product_attribute = $id_product_attribute;
$warehouse_location_entity->id_warehouse = $info['warehouse'];
if (WarehouseProductLocation::getProductLocation($product->id, $id_product_attribute, $info['warehouse']) !== false) {
$warehouse_location_entity->update();
} else {
$warehouse_location_entity->save();
}
StockAvailable::synchronize($product->id);
} else {
$this->warnings[] = sprintf(Tools::displayError('Warehouse did not exist, cannot set on product %1$s '), $product->name[$default_language_id]);
}
}
}
// stock available
if (isset($info['depends_on_stock'])) {
if ($info['depends_on_stock'] != 0 && $info['depends_on_stock'] != 1) {
$this->warnings[] = sprintf(Tools::displayError('Incorrect value for depends on stock for product %1$s '), $product->name[$default_language_id]);
} elseif ((!$info['advanced_stock_management'] || $info['advanced_stock_management'] == 0) && $info['depends_on_stock'] == 1) {
$this->warnings[] = sprintf(Tools::displayError('Advanced stock management not enabled, can not set depends on stock %1$s '), $product->name[$default_language_id]);
} else {
StockAvailable::setProductDependsOnStock($product->id, $info['depends_on_stock'], null, $id_product_attribute);
}
// This code allows us to set qty and disable depends on stock
if (isset($info['quantity']) && $info['depends_on_stock'] == 0) {
if (Shop::isFeatureActive()) {
foreach ($shops as $shop) {
StockAvailable::setQuantity((int) $product->id, $id_product_attribute, (int) $info['quantity'], (int) $shop);
}
} else {
StockAvailable::setQuantity((int) $product->id, $id_product_attribute, (int) $info['quantity'], $this->context->shop->id);
}
} elseif (isset($info['quantity']) && $info['depends_on_stock'] == 1) {
// add stock
$stock_manager = StockManagerFactory::getManager();
$price = str_replace(',', '.', $info['wholesale_price']);
if ($price == 0) {
$price = 1.0E-6;
}
$price = round(floatval($price), 6);
$warehouse = new Warehouse($info['warehouse']);
if ($stock_manager->addProduct((int) $product->id, $id_product_attribute, $warehouse, (int) $info['quantity'], 1, $price, true)) {
StockAvailable::synchronize((int) $product->id);
}
}
} else {
if (Shop::isFeatureActive()) {
foreach ($shops as $shop) {
StockAvailable::setQuantity((int) $product->id, $id_product_attribute, (int) $info['quantity'], (int) $shop);
}
} else {
StockAvailable::setQuantity((int) $product->id, $id_product_attribute, (int) $info['quantity'], $this->context->shop->id);
}
}
}
}
$this->closeCsvFile($handle);
}
示例8: attributeImport
//.........这里部分代码省略.........
}
if (isset($attributes[$group . '_' . $attribute])) {
$attributes_to_add[] = (int) $attributes[$group . '_' . $attribute];
}
$obj = new Attribute();
$obj->cleanPositions((int) $id_attribute_group, false);
AttributeGroup::cleanPositions();
}
}
}
$product->checkDefaultAttributes();
if (!$product->cache_default_attribute) {
Product::updateDefaultAttribute($product->id);
}
if ($id_product_attribute) {
if ($id_product_attribute_update) {
Db::getInstance()->execute('
DELETE FROM ' . _DB_PREFIX_ . 'product_attribute_combination
WHERE id_product_attribute = ' . (int) $id_product_attribute);
}
foreach ($attributes_to_add as $attribute_to_add) {
Db::getInstance()->execute('
INSERT IGNORE INTO ' . _DB_PREFIX_ . 'product_attribute_combination (id_attribute, id_product_attribute)
VALUES (' . (int) $attribute_to_add . ',' . (int) $id_product_attribute . ')');
}
if (isset($info['advanced_stock_management'])) {
if ($info['advanced_stock_management'] != 1 && $info['advanced_stock_management'] != 0) {
$this->warnings[] = sprintf(Tools::displayError('Advanced stock management has incorrect value. Not set for product with id %d.'), $product->id);
} elseif (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && $info['advanced_stock_management'] == 1) {
$this->warnings[] = sprintf(Tools::displayError('Advanced stock management is not enabled, cannot enable on product with id %d.'), $product->id);
} else {
$product->setAdvancedStockManagement($info['advanced_stock_management']);
}
if (StockAvailable::dependsOnStock($product->id) == 1 && $info['advanced_stock_management'] == 0) {
StockAvailable::setProductDependsOnStock($product->id, 0, null, $id_product_attribute);
}
}
if (isset($info['warehouse']) && $info['warehouse']) {
if (!Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT')) {
$this->warnings[] = sprintf(Tools::displayError('Advanced stock management is not enabled, warehouse is not set on product with id %d.'), $product->id);
} else {
if (Warehouse::exists($info['warehouse'])) {
$warehouse_location_entity = new WarehouseProductLocation();
$warehouse_location_entity->id_product = $product->id;
$warehouse_location_entity->id_product_attribute = $id_product_attribute;
$warehouse_location_entity->id_warehouse = $info['warehouse'];
if (WarehouseProductLocation::getProductLocation($product->id, $id_product_attribute, $info['warehouse']) !== false) {
$warehouse_location_entity->update();
} else {
$warehouse_location_entity->save();
}
StockAvailable::synchronize($product->id);
} else {
$this->warnings[] = sprintf(Tools::displayError('Warehouse did not exist, cannot set on product %1$s.'), $product->name[$default_language]);
}
}
}
if (isset($info['depends_on_stock'])) {
if ($info['depends_on_stock'] != 0 && $info['depends_on_stock'] != 1) {
$this->warnings[] = sprintf(Tools::displayError('Incorrect value for depends on stock for product %1$s '), $product->name[$default_language]);
} elseif ((!$info['advanced_stock_management'] || $info['advanced_stock_management'] == 0) && $info['depends_on_stock'] == 1) {
$this->warnings[] = sprintf(Tools::displayError('Advanced stock management is not enabled, cannot set depends on stock %1$s '), $product->name[$default_language]);
} else {
StockAvailable::setProductDependsOnStock($product->id, $info['depends_on_stock'], null, $id_product_attribute);
}
if (isset($info['quantity']) && $info['quantity']) {
if ($info['depends_on_stock'] == 1) {
$stock_manager = StockManagerFactory::getManager();
$price = str_replace(',', '.', $info['wholesale_price']);
if ($price == 0) {
$price = 1.0E-6;
}
$price = round((double) $price, 6);
$warehouse = new Warehouse($info['warehouse']);
if ($stock_manager->addProduct((int) $product->id, $id_product_attribute, $warehouse, $info['quantity'], 1, $price, true)) {
StockAvailable::synchronize((int) $product->id);
}
} else {
if (Shop::isFeatureActive()) {
foreach ($id_shop_list as $shop) {
StockAvailable::setQuantity((int) $product->id, $id_product_attribute, $info['quantity'], (int) $shop);
}
} else {
StockAvailable::setQuantity((int) $product->id, $id_product_attribute, $info['quantity'], $this->context->shop->id);
}
}
}
} else {
if (Shop::isFeatureActive()) {
foreach ($id_shop_list as $shop) {
StockAvailable::setQuantity((int) $product->id, $id_product_attribute, (int) $info['quantity'], (int) $shop);
}
} else {
StockAvailable::setQuantity((int) $product->id, $id_product_attribute, (int) $info['quantity'], $this->context->shop->id);
}
}
}
}
$this->closeCsvFile($handle);
}
示例9: processWarehouses
/**
* Post treatment for warehouses
*/
public function processWarehouses()
{
$app = JFactory::getApplication();
$product = new JeproshopProductModelProduct((int) $app->input->get('product_id'));
if ((int) $app->input->get('warehouse_loaded') === 1 && JeproshopTools::isLoadedObject($product, 'product_id')) {
// Get all id_product_attribute
$warehouse_attributes = $product->getAttributesResume($this->context->language->lang_id);
if (empty($warehouse_attributes)) {
$attribute = new JObject();
$attribute->set('product_attribute_id', 0);
$attribute->set('attribute_designation', '');
$warehouse_attributes[] = $attribute;
}
// Get all available warehouses
$warehouses = JeproshopWarehouseModelWarehouse::getWarehouses(true);
// Get already associated warehouses
$associated_warehouses_collection = JeproshopWarehouseProductLocationModelWarehouseProductLocation::getCollection($product->product_id);
$elements_to_manage = array();
// get form information
foreach ($warehouse_attributes as $attribute) {
foreach ($warehouses as $warehouse) {
$key = $warehouse->warehouse_id . '_' . $product->product_id . '_' . $attribute->product_attribute_id;
// get elements to manage
if ($app->input->get('check_warehouse_' . $key)) {
$location = $app->input->get('location_warehouse_' . $key, '');
$elements_to_manage[$key] = $location;
}
}
}
// Delete entry if necessary
foreach ($associated_warehouses_collection as $awc) {
if (!array_key_exists($awc->warehouse_id . '_' . $awc->product_id . '_' . $awc->product_attribute_id, $elements_to_manage)) {
$awc->delete();
}
}
// Manage locations
foreach ($elements_to_manage as $key => $location) {
$params = explode('_', $key);
$wpl_id = (int) JeproshopWarehouseProductLocationModelWarehouseProductLocation::getIdByProductAndWarehouse((int) $params[1], (int) $params[2], (int) $params[0]);
if (empty($wpl_id)) {
//create new record
$warehouse_location_entity = new JeproshopWarehouseProductLocationModelWarehouseProductLocation();
$warehouse_location_entity->product_id = (int) $params[1];
$warehouse_location_entity->product_attribute_id = (int) $params[2];
$warehouse_location_entity->warehouse_id = (int) $params[0];
$warehouse_location_entity->location = JFactory::getDBO()->query($location);
$warehouse_location_entity->save();
} else {
$warehouse_location_entity = new WarehouseProductLocation((int) $wpl_id);
$location = $location;
if ($location != $warehouse_location_entity->location) {
$warehouse_location_entity->location = $location;
$warehouse_location_entity->update();
}
}
}
JeproshopStockAvailableModelStockAvailable::synchronize((int) $product->product_id);
}
}
示例10: postProcess
public function postProcess()
{
$this->adminControllerPostProcess();
if (Tools::isSubmit('addStock') && !($this->tabAccess['add'] === '1')) {
$this->errors[] = Tools::displayError('You do not have the required permission to add stock.');
}
if (Tools::isSubmit('removeStock') && !($this->tabAccess['delete'] === '1')) {
$this->errors[] = Tools::displayError('You do not have the required permission to delete stock');
}
if (Tools::isSubmit('transferStock') && !($this->tabAccess['edit'] === '1')) {
$this->errors[] = Tools::displayError('You do not have the required permission to transfer stock.');
}
if (count($this->errors)) {
return;
}
if ((Tools::isSubmit('addstock') || Tools::isSubmit('removestock') || Tools::isSubmit('transferstock')) && Tools::isSubmit('is_post')) {
$id_product = (int) Tools::getValue('id_product', 0);
if ($id_product <= 0) {
$this->errors[] = Tools::displayError('The selected product is not valid.');
}
$id_product_attribute = (int) Tools::getValue('id_product_attribute', 0);
$check = Tools::getValue('check', '');
$check_valid = md5(_COOKIE_KEY_ . $id_product . $id_product_attribute);
if ($check != $check_valid) {
$this->errors[] = Tools::displayError('The selected product is not valid.');
}
$quantity = Tools::getValue('quantity', 0);
$quantity = PP::normalizeProductQty($quantity, $id_product);
if (!is_numeric($quantity) || $quantity <= 0) {
$this->errors[] = Tools::displayError('The quantity value is not valid.');
}
$token = Tools::getValue('token') ? Tools::getValue('token') : $this->token;
$redirect = self::$currentIndex . '&token=' . $token;
}
if ((Tools::isSubmit('addstock') || Tools::isSubmit('removestock')) && Tools::isSubmit('is_post')) {
$id_warehouse = (int) Tools::getValue('id_warehouse', 0);
if ($id_warehouse <= 0 || !Warehouse::exists($id_warehouse)) {
$this->errors[] = Tools::displayError('The selected warehouse is not valid.');
}
$id_stock_mvt_reason = (int) Tools::getValue('id_stock_mvt_reason', 0);
if ($id_stock_mvt_reason <= 0 || !StockMvtReason::exists($id_stock_mvt_reason)) {
$this->errors[] = Tools::displayError('The reason is not valid.');
}
$usable = Tools::getValue('usable', null);
if (is_null($usable)) {
$this->errors[] = Tools::displayError('You have to specify whether the product quantity is usable for sale on shops or not.');
}
$usable = (bool) $usable;
}
if (Tools::isSubmit('addstock') && Tools::isSubmit('is_post')) {
$price = str_replace(',', '.', Tools::getValue('price', 0));
if (!is_numeric($price)) {
$this->errors[] = Tools::displayError('The product price is not valid.');
}
$price = round((double) $price, 6);
$id_currency = (int) Tools::getValue('id_currency', 0);
if ($id_currency <= 0 || (!($result = Currency::getCurrency($id_currency)) || empty($result))) {
$this->errors[] = Tools::displayError('The selected currency is not valid.');
}
if (count($this->errors) == 0) {
$warehouse = new Warehouse($id_warehouse);
if ($id_currency != $warehouse->id_currency) {
$price_converted_to_default_currency = Tools::convertPrice($price, $id_currency, false);
$price = Tools::convertPrice($price_converted_to_default_currency, $warehouse->id_currency, true);
}
$stock_manager = StockManagerFactory::getManager();
if ($stock_manager->addProduct($id_product, $id_product_attribute, $warehouse, $quantity, $id_stock_mvt_reason, $price, $usable)) {
$id_wpl = (int) WarehouseProductLocation::getIdByProductAndWarehouse($id_product, $id_product_attribute, $id_warehouse);
if (!$id_wpl) {
$wpl = new WarehouseProductLocation();
$wpl->id_product = (int) $id_product;
$wpl->id_product_attribute = (int) $id_product_attribute;
$wpl->id_warehouse = (int) $id_warehouse;
$wpl->save();
}
StockAvailable::synchronize($id_product);
if (Tools::isSubmit('addstockAndStay')) {
$redirect = self::$currentIndex . '&id_product=' . (int) $id_product;
if ($id_product_attribute) {
$redirect .= '&id_product_attribute=' . (int) $id_product_attribute;
}
$redirect .= '&addstock&token=' . $token;
}
Tools::redirectAdmin($redirect . '&conf=1');
} else {
$this->errors[] = Tools::displayError('An error occurred. No stock was added.');
}
}
}
if (Tools::isSubmit('removestock') && Tools::isSubmit('is_post')) {
if (count($this->errors) == 0) {
$warehouse = new Warehouse($id_warehouse);
$stock_manager = StockManagerFactory::getManager();
$removed_products = $stock_manager->removeProduct($id_product, $id_product_attribute, $warehouse, $quantity, $id_stock_mvt_reason, $usable);
if (count($removed_products) > 0) {
StockAvailable::synchronize($id_product);
Tools::redirectAdmin($redirect . '&conf=2');
} else {
$physical_quantity_in_stock = (int) $stock_manager->getProductPhysicalQuantities($id_product, $id_product_attribute, array($warehouse->id), false);
$usable_quantity_in_stock = (int) $stock_manager->getProductPhysicalQuantities($id_product, $id_product_attribute, array($warehouse->id), true);
//.........这里部分代码省略.........