orderTablePrefix = BddConstant::DEFAULT_TABLE_PREFIX ."gestion_"; $this->defaultTablePrefix = BddConstant::DEFAULT_TABLE_PREFIX; $this->pdo = $db; } private function execSQL($sql, $conditions){ $stmt = $this->pdo->prepare($sql); $stmt->execute($conditions); $data = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); return json_encode($data); } private function execSQLNoData($sql, $conditions){ $stmt = $this->pdo->prepare($sql); $stmt->execute($conditions); $stmt->closeCursor(); } private function execSQLNoJsonReturn($sql, $conditions){ $stmt = $this->pdo->prepare($sql); $stmt->execute($conditions); $data = $stmt->fetchAll(\PDO::FETCH_ASSOC); $stmt->closeCursor(); return $data; } private function getLastOrderNumber(){ $sql = "SELECT max(orders.order_number) as order_last_number FROM " .$this->orderTablePrefix."orders as orders"; $result = $this->execSQLNoJsonReturn($sql,[]); $lastNumber = 0; if(!empty($result)){ $lastNumber = $result[0]["order_last_number"]; } return $lastNumber; } private function insertOrderProduct(int $orderId,int $productId){ $sql = "INSERT INTO ".$this->orderTablePrefix."order_product (fk_order_id, fk_product_id, quantity) VALUES (?,?,1)"; $this->execSQLNoData($sql, array($orderId, $productId)); return true; } public function getOrderByCalendarUuid($calendarUuid){ $sql = "SELECT * FROM ".$this->orderTablePrefix."orders as orders WHERE orders.fk_calendar_uuid = ? LIMIT 1"; $result = $this->execSQLNoJsonReturn($sql,[$calendarUuid]); if(!empty($result)){ return $result[0]; } return null; } public function insertOrderProductsByProductIds(int $orderId,array $productIds){ if (!empty($productIds)) { foreach ($productIds as $productId) { $this->insertOrderProduct( $orderId, $productId ); } } } public function insertOrderFromVCalendarPropertyAndReturnId($thanatoId,$clientId,$locationId,$defuntId,$calendarUuid,$date,$idNextCloud = BddConstant::DEFAULT_ADMIN_ID_NEXTCLOUD){ $dateTime = new DateTime($date); $lastOrderNumber = $this->getLastOrderNumber(); $thisOrderNumber = $lastOrderNumber + 1; $thisOrderFullNumber = OrderHelpers::GetFullOrderNumberByDateAndOrderNumber($dateTime,$thisOrderNumber); $sql = "INSERT INTO `".$this->orderTablePrefix."orders` ( `order_date`, `order_number`, `order_full_number`, `fk_defunt_id`, `fk_lieu_id`, `fk_client_id`, `fk_thanato_id`, `fk_order_status_key`, `fk_calendar_uuid`, `id_nextcloud` ) VALUES (?,?,?,?,?,?,?,?,?,?);"; $this->execSQLNoData($sql, array( $date, $thisOrderNumber, $thisOrderFullNumber, $defuntId, $locationId, $clientId, $thanatoId, OrderStatusConstant::ORDERED_KEY, $calendarUuid, $idNextCloud ) ); $order = $this->getOrderByCalendarUuid($calendarUuid); return $order['id']; } public function updateOrderStatus($orderId,$statusKey){ $sql= "UPDATE ".$this->orderTablePrefix."orders as orders SET orders.fk_order_status_key = ? WHERE orders.id = ?"; $this->execSQLNoData($sql,[$statusKey,$orderId]); } public function getOrderProductsByOrderId($orderId){ $sql = "SELECT order_product.id as order_product_id, produit.id as produit_id, produit.reference as produit_reference, produit.description as produit_description FROM ".$this->orderTablePrefix."order_product as order_product LEFT JOIN ".$this->orderTablePrefix."produit as produit on order_product.fk_product_id = produit.id WHERE order_product.fk_order_id = ?;"; $produitsList = $this->execSQLNoJsonReturn( $sql, [$orderId]); $finalProduitList = []; foreach($produitsList as $produit){ if($produit['produit_id'] != null){ $finalProduitList[] = $produit; } } return $finalProduitList; } public function getOrdersWithDetails(){ $sql = "SELECT orders.id, orders.order_date, orders.order_number, orders.order_full_number, orders.order_comment, orders.fk_defunt_id, orders.fk_lieu_id, orders.fk_client_id, orders.fk_thanato_id, orders.fk_order_status_key, thanato.id as thanato_id, thanato.nom as thanato_nom, thanato.prenom as thanato_prenom, client.id as client_id, client.nom as client_nom, client.prenom as client_prenom, client.entreprise as client_entreprise, defunt.id as defunt_id, defunt.nom as defunt_nom, lieu.id as lieu_id, lieu.adresse as lieu_adresse, lieu.nom as lieu_nom, order_status.status_label as order_status_label FROM " .$this->orderTablePrefix."orders as orders LEFT JOIN ".$this->orderTablePrefix."thanato as thanato on orders.fk_thanato_id = thanato.id LEFT JOIN ".$this->orderTablePrefix."client as client on orders.fk_client_id = client.id LEFT JOIN ".$this->orderTablePrefix."defunt as defunt on orders.fk_defunt_id = defunt.id LEFT JOIN ".$this->orderTablePrefix."lieu as lieu on orders.fk_lieu_id = lieu.id LEFT JOIN ".$this->orderTablePrefix."order_status as order_status on orders.fk_order_status_key = order_status.status_key " ; return $this->execSQLNoJsonReturn($sql,[]); } }