Jump to content

creation multiwarehouse pour retrait magazin sur chaque ville


mohamed

Recommended Posts

Bonsoir, les benevoles

 

excuse moi d'abord de ma mauvaise langue

 

je veux ajouter un menu deroulant codepostal a la page product.tpl et du code php a la page controllers/front/productcontrol.php afin de traiter le choix du magazin(entrepot - warehouse) que le client a choisi du menu.


1 - chaque ville il a 3 entrepot (table ps_address)

magazin (entrepot) regional => champ address2 = 0 (choix par default)

magazin (entrepot) centrale => champ address2 = 1

magazin (entrepot) fournisseur=>champ address2 = 2

 

2 - apres la connexion du client le choix du magazin (entrepot) par default (regional) est determiner selon son codepostal  pour afficher la qte des 3 magazin de sa ville pour le produit X

apres le choix on affecte dans la page cart.php une valeur au variable id_warehouse et on l'insere a la table ps_cart la valeur cocher a traver le menu (une colone id_warehouse doit etre ajoute a la table ps_cart de notre base donnee)

on compare les qte sur chaque magazin_warehouse si il y a un manque de stock "regional" on passe au "centrale" sinon on passe au magazin "frs" (on utilise le retrait au magazin comme transporteur1 par default ou bien la livraison a domicille par nos propre livreur (transporteur2) par contre le magazin frs utilise une societe tiers(transporteur3)).

 

3 - on modifier le code du class des pages classe/order.php et classe/payementmodule.php 

ma version de boutique ps 1.5.1

a - ma premiere question comment je peux inserer l id_warehouse "y" dans la table ps_order_detail et deminuer le stock de ce warehouse "y" sans toucher un autre stock du warehouse "x"?

b - ma deuxieme question comment diviser la commande (3produit A + 5produit B) du client "C" de la ville "V" sur plusieurs warehouse de la meme ville "V"  lorsque un produit A existe sur "wh 1" et n'existe pas sur "wh 2" et un produit B existe sur "wh 2" et n'existe pas sur "wh 1"?

4 - voici la 1er modif dans le fichier "productcontroller.php" ou j'ai ajoute une petite modif apres if (!$this->errors) (environ la ligne 150) dans la fonction initcontent :

-----------------------------------------

if (!$this->errors)
150   { debut modif
            $id_product = (int)Tools::getValue('id_product');
            $warehouses = WarehouseCore::getWarehousesByProductId($id_product);
            foreach($warehouses as $qty)
            $warehouse_qte[]=ProductCore::getRealQuantity($id_product,'',$qty['id_warehouse']);
      

$sql1 = 'SELECT `city`, `postcode` FROM `'._DB_PREFIX_.'address` a
          WHERE `id_customer` = '.(int)$this->context->customer->id;
  $result1 = Db::getInstance()->Execute($sql1);
  $city = $result1['ville']; 
  $cpregion = $result1['postcode'];
  
  
  $sql2 = 'SELECT `city`, `postcode` FROM `'._DB_PREFIX_.'address`
          WHERE  `adresse2` = "1" AND `ville` = '.(int)$city;
  $result2 = Db::getInstance()->Execute($sql2);
  $cpville = $result2['postcode'];
 
 
  $sqlsup = 'SELECT `id_supplier` FROM `'._DB_PREFIX_.'product`
          WHERE `id_product` ='.(int)$this->product->id;
  $resultsup = Db::getInstance()->getvalue($sqlsup);
  $id_supplier = $resultsup['id_supplier']; 
  
  $sql3 = 'SELECT `postcode` FROM `'._DB_PREFIX_.'address`
          WHERE `id_supplier` ='.(int)$id_supplier;
  $result3 = Db::getInstance()->getvalue($sql3);
  $cpvillesup = $result3['postcode']; 

  
  $sqlidwhregion = 'SELECT `id_warehouse` FROM `'._DB_PREFIX_.'address`
          WHERE `lastname` = "warehouse" AND `postcode` ='.(int)$cpregion;
  $resultidwhregion = Db::getInstance()->getvalue($sqlidwhregion);
  $idwhregion = $resultidwhregion['id_warehouse']; 
  
  $sqlidwhville = 'SELECT `id_warehouse` FROM `'._DB_PREFIX_.'address`
          WHERE `lastname` = "warehouse" AND `postcode` ='.(int)$cpville;
  $resultidwhville = Db::getInstance()->getvalue($sqlidwhville);
  $idwhville = $resultidwhville['id_warehouse']; 
  
  $sqlidwhsup= 'SELECT `id_warehouse` FROM `'._DB_PREFIX_.'address`
          WHERE `lastname` = "warehouse" AND `adresse2` = "2" AND  `postcode` ='.(int)$cpvillesup;
  $resultidwhsup = Db::getInstance()->getvalue($sqlidwhsup);
  $idwhsup = $resultidwhsup['id_warehouse']; 
  
  $sqlqteproduct= 'SELECT `id_warehouse`, `usable_quantity` FROM `'._DB_PREFIX_.'stock`
          WHERE `id_product` = '.(int)$id_product.' AND `id_warehouse` = '.(int)$idwhregion.' OR `id_warehouse` = '.(int)$idwhville.' OR  `id_warehouse` ='.(int)$idwhsup.'';

//la requette dans le cas ou nous voulons recupere la quantite d'un seul entrepot (par defaut du client)
//  $sqlqteproduct= 'SELECT `id_warehouse`, `usable_quantity` FROM `'._DB_PREFIX_.'stock`
 //         WHERE `id_product` = '.(int)$id_product.' AND `id_warehouse` = '.(int)$idwhregion.'';
 
  $resultqteproduct = Db::getInstance()->ExecuteS($sqlqteproduct);

//$id_warehouse[] = $resultqteproduct['id_warehouse'];
//$qteproduct[]     = $resultqteproduct['usable_quantity']; 
 

     foreach ($resultqteproduct as $Key => $qteproduct) 
  {
  $id_entrepot[] = $qteproduct['id_warehouse'];
  $qte_entrepot[] = $qteproduct['usable_quantity'];
  $wq[]= $row; 
  $array_wq[] = array('wq'=>$wq['id_warehouse'], 'wq_qte'=>$wq['usable_quantity']);
  }

$this->context->smarty->assign(array(

'warehousecp' => $id_entrepot,

'warehouseqte' => $qte_entrepot

));

//fin de modif

je veux modifier la fonction getPackageList() pour avoir le resultat de mes deux question

 

le code qui doit etre inserer dans les autres page pour l'inserer a la table order_detail 

 //Product::getQuantity($id_product, $id_product_attribute = null, $cache_is_pack = null);
// This will consider a specific warehouse
//Product::getRealQuantity($id_product, $id_product_attribute = 0, $id_warehouse = 0, $id_shop = null)
//They both return the product’s quantity, but the latter is to be preferred with advanced stock management in mind.

  // Gets the quantity in stock for the specific warehouse ID
//$quantity = Product::getRealQuantity(3, 0, $choixwh);
//$quantity = Product::getRealQuantity(3, 0, 1);
  

    // foreach ($warehouses as $w)
   // $entrepot = $w['name'];
  //          $choixwh = 1;          
 // menu deroulant de choix warehouse

 

 un grand merci au developpeur qui va m'aider a creuser dans ce piste (j'ai du gros probleme avec le corp du ps)

 

Coordialement,

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...