. */ /* */ /*************************************************************************************/ require_once __DIR__ . "/../fonctions/autoload.php"; class Commande extends Baseobj { // Les status des commandes const NONPAYE = 1; const PAYE = 2; const TRAITEMENT = 3; const EXPEDIE = 4; const ANNULE = 5; public $id; public $client; public $adrfact; public $adrlivr; public $date; public $datefact; public $ref; public $transaction; public $livraison; public $facture; public $transport; public $port; public $datelivraison; public $remise; public $devise; public $taux; public $colis; public $paiement; public $statut; public $lang; public $total; const TABLE="commande"; public $table=self::TABLE; public $bddvars = array("id", "client", "adrfact", "adrlivr", "date", "datefact", "ref", "transaction", "livraison", "facture", "transport", "port", "datelivraison", "remise", "devise", "taux", "colis", "paiement", "statut", "lang"); public function __construct($id = 0) { parent::__construct(); if($id > 0) $this->charger($id); } function add() { $this->date = date("Y-m-d H:i:s"); $this->id = parent::add(); $this->ref = "C" . date("ymdHi") . genid($this->id, 6); $this->livraison = "L" . date("ymdHi") . genid($this->id, 6); $this->maj(); return $this->id; } public function charger($id) { return $this->getVars("select * from $this->table where id=\"$id\""); } public function charger_ref($ref) { return $this->getVars("select * from $this->table where ref=\"$ref\""); } public function charger_trans($transaction){ $hier = date("Y-m-d H:i:s", mktime()-86400); return $this->getVars("select * from $this->table where transaction=\"$transaction\" and date>\"$hier\""); } public function delete() { if (! empty($this->id)) { $this->delete_cascade('Venteprod', 'commande', $this->id); $this->delete_cascade('Venteadr', 'id', $this->adrfact); $this->delete_cascade('Venteadr', 'id', $this->adrlivr); parent::delete(); } } public function annuler() { if ($this->statut != Commande::ANNULE) { // On remet le stock si il a été défalqué $this->defalquer_stock(true); $ancienStatut = $this->statut; $this->statut = Commande::ANNULE; $this->maj(); ActionsModules::instance()->appel_module("statut", $this, $ancienStatut); } } /** * * retourne un tableau contenant toutes les venteprod sous forme d'objet * * @return Venteprod[] */ public function getProduits() { $query = "select * from ".Venteprod::TABLE." where commande='".$this->id."'"; return $this->query_liste($query, "Venteprod"); } public function genfact(){ if (! empty($this->facture)) return 0; $this->datefact = date("Y-m-d"); $query = "select max(facture) as mfact from $this->table"; $resul = $this->query($query); $this->facture = 1000; if ($resul) { $num = $this->get_result($resul, 0, "mfact"); if ($num > 0) $this->facture = $num + 1; } // On defalque le stock si ça n'a pas été fait $this->defalquer_stock(); } public function defalquer_stock($retourenstock = false) { try { $modules = new Modules(); if ($modules->charger_id($this->paiement)) { $modpaiement = ActionsModules::instance()->instancier($modules->nom); if ($retourenstock) $defalquer = $modpaiement->defalqcmd != 0 || ($modpaiement->defalqcmd == 0 && $this->statut != self::NONPAYE); else $defalquer = $modpaiement->defalqcmd == 0; if ($defalquer) { $delta = $retourenstock ? 1 : -1; $venteprod = new Venteprod(); $query = "select * from $venteprod->table where commande='" . $this->id . "'"; $resul = $venteprod->query($query); while ($resul && $row = $venteprod->fetch_object($resul)) { // Mise à jour du stock général $produit = new Produit($row->ref); $produit->stock += ($delta * $row->quantite); $produit->maj(); $vdec = new Ventedeclidisp(); $query2 = "select * from $vdec->table where venteprod='" . $row->id . "'"; $resul2 = $vdec->query($query2); while($resul2 && $row2 = $vdec->fetch_object($resul2)) { $stock = new Stock(); // Mise à jour du stock des declinaisons if($stock->charger($row2->declidisp, $produit->id)){ $stock->valeur += ($delta * $row->quantite); $stock->maj(); } } } } } } catch (Exception $ex) { // Rien } } public function total($avec_port = false, $avec_remise = false) { $total = 0; $query = "select SUM(prixu * quantite) as total from ".Venteprod::TABLE." where commande=\"" . $this->id . "\""; $resul = $this->query($query); if ($resul) { $total = round($this->get_result($resul, 0, "total"), 2); if ($avec_port) $total += $this->port; if ($avec_remise) $total -= $this->remise; } return $total; } public function setStatutAndSave($statut){ if($statut == Commande::ANNULE) $this->annuler(); else $this->updateStatut($statut); } private function updateStatut($statut){ $ancienStatut = $this->statut; $this->statut = $statut; if ($statut == Commande::PAYE && $this->facture == 0) $this->genfact(); else if($statut == Commande::EXPEDIE && $this->datelivraison == "0000-00-00") $this->datelivraison = date("Y-m-d"); $this->maj(); ActionsModules::instance()->appel_module("statut", $this, $ancienStatut); } } ?>