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
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);
|
|
}
|
|
|
|
}
|