/** * @see StockManagerInterface::addProduct() */ public function addProduct($id_product, $id_product_attribute = 0, Warehouse $warehouse, $quantity, $id_stock_mvt_reason, $price_te, $is_usable = true, $id_supply_order = null) { if (!Validate::isLoadedObject($warehouse) || !$price_te || !$quantity || !$id_product) { return false; } $price_te = (double) round($price_te, 6); if (!StockMvtReason::exists($id_stock_mvt_reason)) { $id_stock_mvt_reason = Configuration::get('PS_STOCK_MVT_INC_REASON_DEFAULT'); } $context = Context::getContext(); $mvt_params = array('id_stock' => null, 'physical_quantity' => $quantity, 'id_stock_mvt_reason' => $id_stock_mvt_reason, 'id_supply_order' => $id_supply_order, 'price_te' => $price_te, 'last_wa' => null, 'current_wa' => null, 'id_employee' => $context->employee->id, 'employee_firstname' => $context->employee->firstname, 'employee_lastname' => $context->employee->lastname, 'sign' => 1); $stock_exists = false; // switch on MANAGEMENT_TYPE switch ($warehouse->management_type) { // case CUMP mode case 'WA': $stock_collection = $this->getStockCollection($id_product, $id_product_attribute, $warehouse->id); // if this product is already in stock if (count($stock_collection) > 0) { $stock_exists = true; // for a warehouse using WA, there is one and only one stock for a given product $stock = $stock_collection->current(); // calculates WA price $last_wa = $stock->price_te; $current_wa = $this->calculateWA($stock, $quantity, $price_te); $mvt_params['id_stock'] = $stock->id; $mvt_params['last_wa'] = $last_wa; $mvt_params['current_wa'] = $current_wa; $stock_params = array('physical_quantity' => $stock->physical_quantity + $quantity, 'price_te' => $current_wa, 'usable_quantity' => $is_usable ? $stock->usable_quantity + $quantity : $stock->usable_quantity, 'id_warehouse' => $warehouse->id); // saves stock in warehouse $stock->hydrate($stock_params); $stock->update(); } else { $mvt_params['last_wa'] = 0; $mvt_params['current_wa'] = $price_te; } break; // case FIFO / LIFO mode // case FIFO / LIFO mode case 'FIFO': case 'LIFO': $stock_collection = $this->getStockCollection($id_product, $id_product_attribute, $warehouse->id, $price_te); // if this product is already in stock if (count($stock_collection) > 0) { $stock_exists = true; // there is one and only one stock for a given product in a warehouse and at the current unit price $stock = $stock_collection->current(); $stock_params = array('physical_quantity' => $stock->physical_quantity + $quantity, 'usable_quantity' => $is_usable ? $stock->usable_quantity + $quantity : $stock->usable_quantity); // updates stock in warehouse $stock->hydrate($stock_params); $stock->update(); // sets mvt_params $mvt_params['id_stock'] = $stock->id; } break; default: return false; break; } if (!$stock_exists) { $stock = new Stock(); $stock_params = array('id_product_attribute' => $id_product_attribute, 'id_product' => $id_product, 'physical_quantity' => $quantity, 'price_te' => $price_te, 'usable_quantity' => $is_usable ? $quantity : 0, 'id_warehouse' => $warehouse->id); // saves stock in warehouse $stock->hydrate($stock_params); $stock->add(); $mvt_params['id_stock'] = $stock->id; } // saves stock mvt $stock_mvt = new StockMvt(); $stock_mvt->hydrate($mvt_params); $stock_mvt->add(); return true; }
// プログレスバー更新 $progressPer = $dayCount / $dayCountMax * 100; // 全部表示しないで間引く if (floor($progressPer % 10) == 0) { echo "<script>"; echo "var progressBar = document.getElementById('progress');"; echo "var progressBarValue = document.getElementById('progressValue');"; echo "var currentProcess = document.getElementById('currentProcess');"; echo "progressBar.value = {$progressPer};"; echo "progressBarValue.innerHTML = {$progressPer};"; echo "currentProcess.innerHTML = '{$date->format(Common::DATE_FORMAT)}';"; echo "</script>"; } // 株価CSVファイルをダウンロード $ret = $downloader->downloadCsvFile($date); // 株価データを追加 $stock->add($date); // 株価ZIPファイルをダウンロード $ret = $mizDownloader->downloadZipFile($date); // 株価データを追加 $stockMiz->add($date); // echo "{$date->format(Common::DATE_FORMAT)}</br>"; ob_flush(); flush(); $date->modify("+1 day"); $dayCount++; } ?>
function ajouter($lang, $ref, $prix, $ecotaxe, $promo, $prix2, $rubrique, $nouveaute, $perso, $poids, $stock, $tva, $ligne, $titre, $chapo, $description, $postscriptum) { $ref = str_replace(" ", "", $ref); $ref = str_replace("/", "", $ref); $ref = str_replace("+", "", $ref); $ref = str_replace(".", "-", $ref); $ref = str_replace(",", "-", $ref); $ref = str_replace(";", "-", $ref); $ref = str_replace("'", "", $ref); $ref = str_replace("\n", "", $ref); $ref = str_replace("\"", "", $ref); $produit = new Produit(); $produit->charger($ref); if ($produit->id) { redirige("produit_modifier.php?rubrique={$rubrique}&existe=1"); } $produit = new Produit(); $prix = str_replace(",", ".", $prix); $produit->ref = $ref; $produit->datemodif = date("Y-m-d H:i:s"); $produit->prix = $prix; $produit->prix2 = $prix2; if ($produit->prix2 == "") { $produit->prix2 = $prix; } $produit->ecotaxe = $ecotaxe; $produit->rubrique = $rubrique; if ($promo == "on") { $produit->promo = 1; } else { $produit->promo = 0; } if ($nouveaute == "on") { $produit->nouveaute = 1; } else { $produit->nouveaute = 0; } if ($ligne == "on") { $produit->ligne = 1; } else { $produit->ligne = 0; } $produit->perso = $perso; $produit->poids = $poids; $produit->stock = $stock; $produit->tva = str_replace(",", ".", $tva); $lastid = $produit->add(); $produit->id = $lastid; $produitdesc = new Produitdesc(); $produitdesc->chapo = $chapo; $produitdesc->description = $description; $produitdesc->postscriptum = $postscriptum; $produitdesc->produit = $lastid; $produitdesc->lang = $lang; $produitdesc->titre = $titre; $produitdesc->chapo = str_replace("\n", "<br />", $produitdesc->chapo); $produitdesc->add(); $rubcaracteristique = new Rubcaracteristique(); $caracteristiquedesc = new Caracteristiquedesc(); $caracval = new Caracval(); $query = "select * from {$rubcaracteristique->table} where rubrique='" . $produit->rubrique . "'"; $resul = mysql_query($query); while ($row = mysql_fetch_object($resul)) { $caracval = new Caracval(); $deb = "caract"; $deb2 = "typecaract"; $val = $row->caracteristique; $var = $deb . $val; $var2 = $deb2 . $val; global ${$var}; global ${$var2}; $query2 = "delete from {$caracval->table} where produit='" . $produit->id . "' and caracteristique='" . $row->caracteristique . "'"; $resul2 = mysql_query($query2); if (${$var} != "") { if (${$var2} == "c") { foreach (${$var} as $selectval) { $caracval->produit = $lastid; $caracval->caracteristique = $row->caracteristique; $caracval->caracdisp = $selectval; $caracval->add(); } } else { $caracval->produit = $lastid; $caracval->caracteristique = $row->caracteristique; $caracval->valeur = ${$var}; $caracval->add(); } } } $rubdeclinaison = new Rubdeclinaison(); $declinaisondesc = new Declinaisondesc(); $declidisp = new Declidisp(); $declidispdesc = new Declidispdesc(); $query = "select * from {$rubdeclinaison->table} where rubrique='" . $rubrique . "'"; $resul = mysql_query($query); while ($row = mysql_fetch_object($resul)) { $declinaisondesc->charger($row->declinaison); $query2 = "select * from {$declidisp->table} where declinaison='{$row->declinaison}'"; $resul2 = mysql_query($query2); $nbres = mysql_num_rows($resul2); while ($row2 = mysql_fetch_object($resul2)) { $stock = new Stock(); $stock->declidisp = $row2->id; $stock->produit = $lastid; $stock->valeur = 0; $stock->surplus = 0; $stock->add(); } } $produitdesc->reecrire(); ActionsModules::instance()->appel_module("ajoutprod", $produit); redirige($_SERVER['PHP_SELF'] . "?ref=" . $produit->ref . "&rubrique=" . $produit->rubrique . "&lang=" . $lang); }
/** * AdminController::postProcess() override * @see AdminController::postProcess() */ public function postProcess() { $this->is_editing_order = false; // Checks access if (Tools::isSubmit('submitAddsupply_order') && !($this->tabAccess['add'] === '1')) { $this->errors[] = Tools::displayError('You do not have permission to add a supply order.'); } if (Tools::isSubmit('submitBulkUpdatesupply_order_detail') && !($this->tabAccess['edit'] === '1')) { $this->errors[] = Tools::displayError('You do not have permission to edit an order.'); } // Trick to use both Supply Order as template and actual orders if (Tools::isSubmit('is_template')) { $_GET['mod'] = 'template'; } // checks if supply order reference is unique if (Tools::isSubmit('reference')) { // gets the reference $ref = pSQL(Tools::getValue('reference')); if (Tools::getValue('id_supply_order') != 0 && SupplyOrder::getReferenceById((int) Tools::getValue('id_supply_order')) != $ref) { if ((int) SupplyOrder::exists($ref) != 0) { $this->errors[] = Tools::displayError('The reference has to be unique.'); } } elseif (Tools::getValue('id_supply_order') == 0 && (int) SupplyOrder::exists($ref) != 0) { $this->errors[] = Tools::displayError('The reference has to be unique.'); } } if ($this->errors) { return; } // Global checks when add / update a supply order if (Tools::isSubmit('submitAddsupply_order') || Tools::isSubmit('submitAddsupply_orderAndStay')) { $this->action = 'save'; $this->is_editing_order = true; // get supplier ID $id_supplier = (int) Tools::getValue('id_supplier', 0); if ($id_supplier <= 0 || !Supplier::supplierExists($id_supplier)) { $this->errors[] = Tools::displayError('The selected supplier is not valid.'); } // 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 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.'); } // get delivery date if (Tools::getValue('mod') != 'template' && strtotime(Tools::getValue('date_delivery_expected')) <= strtotime('-1 day')) { $this->errors[] = Tools::displayError('The specified date cannot be in the past.'); } // gets threshold $quantity_threshold = Tools::getValue('load_products'); if (is_numeric($quantity_threshold)) { $quantity_threshold = (int) $quantity_threshold; } else { $quantity_threshold = null; } if (!count($this->errors)) { // forces date for templates if (Tools::isSubmit('is_template') && !Tools::getValue('date_delivery_expected')) { $_POST['date_delivery_expected'] = date('Y-m-d h:i:s'); } // specify initial state $_POST['id_supply_order_state'] = 1; //defaut creation state // specify global reference currency $_POST['id_ref_currency'] = Currency::getDefaultCurrency()->id; // specify supplier name $_POST['supplier_name'] = Supplier::getNameById($id_supplier); //specific discount check $_POST['discount_rate'] = (double) str_replace(array(' ', ','), array('', '.'), Tools::getValue('discount_rate', 0)); } // manage each associated product $this->manageOrderProducts(); // if the threshold is defined and we are saving the order if (Tools::isSubmit('submitAddsupply_order') && Validate::isInt($quantity_threshold)) { $this->loadProducts((int) $quantity_threshold); } } // Manage state change if (Tools::isSubmit('submitChangestate') && Tools::isSubmit('id_supply_order') && Tools::isSubmit('id_supply_order_state')) { if ($this->tabAccess['edit'] != '1') { $this->errors[] = Tools::displayError('You do not have permission to change the order status.'); } // get state ID $id_state = (int) Tools::getValue('id_supply_order_state', 0); if ($id_state <= 0) { $this->errors[] = Tools::displayError('The selected supply order status is not valid.'); } // get supply order ID $id_supply_order = (int) Tools::getValue('id_supply_order', 0); if ($id_supply_order <= 0) { $this->errors[] = Tools::displayError('The supply order ID is not valid.'); } if (!count($this->errors)) { // try to load supply order $supply_order = new SupplyOrder($id_supply_order); if (Validate::isLoadedObject($supply_order)) { // get valid available possible states for this order $states = SupplyOrderState::getSupplyOrderStates($supply_order->id_supply_order_state); foreach ($states as $state) { // if state is valid, change it in the order if ($id_state == $state['id_supply_order_state']) { $new_state = new SupplyOrderState($id_state); $old_state = new SupplyOrderState($supply_order->id_supply_order_state); // special case of validate state - check if there are products in the order and the required state is not an enclosed state if ($supply_order->isEditable() && !$supply_order->hasEntries() && !$new_state->enclosed) { $this->errors[] = Tools::displayError('It is not possible to change the status of this order because you did not order any products.'); } if (!count($this->errors)) { $supply_order->id_supply_order_state = $state['id_supply_order_state']; if ($supply_order->save()) { if ($new_state->pending_receipt) { $supply_order_details = $supply_order->getEntries(); foreach ($supply_order_details as $supply_order_detail) { $is_present = Stock::productIsPresentInStock($supply_order_detail['id_product'], $supply_order_detail['id_product_attribute'], $supply_order->id_warehouse); if (!$is_present) { $stock = new Stock(); $stock_params = array('id_product_attribute' => $supply_order_detail['id_product_attribute'], 'id_product' => $supply_order_detail['id_product'], 'physical_quantity' => 0, 'price_te' => $supply_order_detail['price_te'], 'usable_quantity' => 0, 'id_warehouse' => $supply_order->id_warehouse); // saves stock in warehouse $stock->hydrate($stock_params); $stock->add(); } } } // if pending_receipt, // or if the order is being canceled, // or if the order is received completely // synchronizes StockAvailable if ($new_state->pending_receipt && !$new_state->receipt_state || ($old_state->receipt_state || $old_state->pending_receipt) && $new_state->enclosed && !$new_state->receipt_state || $new_state->receipt_state && $new_state->enclosed) { $supply_order_details = $supply_order->getEntries(); $products_done = array(); foreach ($supply_order_details as $supply_order_detail) { if (!in_array($supply_order_detail['id_product'], $products_done)) { StockAvailable::synchronize($supply_order_detail['id_product']); $products_done[] = $supply_order_detail['id_product']; } } } $token = Tools::getValue('token') ? Tools::getValue('token') : $this->token; $redirect = self::$currentIndex . '&token=' . $token; $this->redirect_after = $redirect . '&conf=5'; } } } } } else { $this->errors[] = Tools::displayError('The selected supplier is not valid.'); } } } // updates receipt if (Tools::isSubmit('submitBulkUpdatesupply_order_detail') && Tools::isSubmit('id_supply_order')) { $this->postProcessUpdateReceipt(); } // use template to create a supply order if (Tools::isSubmit('create_supply_order') && Tools::isSubmit('id_supply_order')) { $this->postProcessCopyFromTemplate(); } if (!count($this->errors) && $this->is_editing_order || !$this->is_editing_order) { parent::postProcess(); } }
/** * * save in stock table if needed this product with 0 to all column (valeur and surplus) * * @return boolean if id paramter is false or empty */ protected function associateDeclinaison() { if (!$this->id) { return false; } $query = "SELECT d.id from " . Declidisp::TABLE . " d LEFT JOIN " . Rubdeclinaison::TABLE . " r ON d.declinaison = r.declinaison WHERE r.rubrique=" . $this->rubrique; $resul = $this->query($query); while ($resul && ($row = $this->fetch_object($resul))) { $stock = new Stock(); $stock->declidisp = $row->id; $stock->produit = $this->id; $stock->valeur = 0; $stock->surplus = 0; $stock->add(); } }