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