You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

72 lines
2.2 KiB

<?php
namespace App\Models;
use CodeIgniter\Model;
class Assignation extends Model
{
/**
* table users name
* @var string
*/
protected $table = 'affect_product';
protected $primaryKey = 'id';
protected $allowedFields = ['product_id', 'store_id', 'qty'];
public function affecterProduits($produitId, $quantite, $pointDeVenteId)
{
// Charger les modèles
$produitModel = new Products();
$pointDeVenteModel = new Stores();
// Récupérer le produit avec son stock et son point de vente principal
$produit = $produitModel->find($produitId);
// Récupérer le point de vente principal
$pointDeVentePrincipal = $pointDeVenteModel->find($produit['store_id']);
// Vérifier que le stock du produit principal est suffisant
if ($produit['qty'] < $quantite) {
return 'Stock insuffisant dans le point de vente principal';
}
// Commencer une transaction pour s'assurer de l'intégrité des données
$db = \Config\Database::connect();
$db->transStart();
// 1. Réduire le stock du point de vente principal
$newStockPrincipal = $pointDeVentePrincipal['stock'] - $quantite;
$pointDeVenteModel->update($produit['point_vente_principal_id'], ['stock' => $newStockPrincipal]);
// 2. Augmenter le stock du point de vente cible
$pointDeVente = $pointDeVenteModel->find($pointDeVenteId);
$newStockVente = $pointDeVente['stock'] + $quantite;
$pointDeVenteModel->update($pointDeVenteId, ['stock' => $newStockVente]);
// 3. Ajouter un enregistrement dans la table d'affectation
$affectationModel = new AffectationProduitModel();
$affectationModel->insert([
'produit_id' => $produitId,
'point_vente_id' => $pointDeVenteId,
'quantite' => $quantite,
'date_affectation' => date('Y-m-d H:i:s')
]);
// Si tout s'est bien passé, valider la transaction
$db->transComplete();
// Vérifier si la transaction a réussi
if ($db->transStatus() === FALSE) {
return 'Une erreur est survenue lors de l\'affectation';
}
return 'Affectation réussie';
}
public function principalAffect(array $data)
{
return $this->insert($data);
}
}