diff --git a/gestion/lib/Constants/OrderStatusConstant.php b/gestion/lib/Constants/OrderStatusConstant.php new file mode 100644 index 0000000..ed7b798 --- /dev/null +++ b/gestion/lib/Constants/OrderStatusConstant.php @@ -0,0 +1,8 @@ +tableprefix."thanato as thanato + WHERE thanato.fk_user_uuid = ?"; + $res = $this->execSQLNoJsonReturn($sql,array($userUuid)); + if($res){ + return $res[0]; + } + return null; + } + public function getThanatoIdByUserUuid($userUuid){ $sql = "SELECT min(id) as FIRST_INSERT_ID FROM ".$this->tableprefix."thanato diff --git a/gestion/lib/Db/OrderBdd.php b/gestion/lib/Db/OrderBdd.php new file mode 100644 index 0000000..333238e --- /dev/null +++ b/gestion/lib/Db/OrderBdd.php @@ -0,0 +1,122 @@ +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']; + } +} \ No newline at end of file diff --git a/gestion/lib/Helpers/OrderHelpers.php b/gestion/lib/Helpers/OrderHelpers.php new file mode 100644 index 0000000..fd08445 --- /dev/null +++ b/gestion/lib/Helpers/OrderHelpers.php @@ -0,0 +1,14 @@ +format('y'); + $month = $datetime->format('m'); + $orderFullNumber = str_pad($orderNumber, 3, '0', STR_PAD_LEFT); + + return "{$prefix} {$companyKey}/{$year}/{$month}/{$orderFullNumber}"; + } +} diff --git a/gestion/lib/Service/GestionService.php b/gestion/lib/Service/GestionService.php index 8512caa..b504d5c 100644 --- a/gestion/lib/Service/GestionService.php +++ b/gestion/lib/Service/GestionService.php @@ -26,7 +26,9 @@ declare(strict_types=1); namespace OCA\Gestion\Service; +use OCA\Gestion\Constants\ThanatoTypeConstant; use OCA\Gestion\Db\Bdd; +use OCA\Gestion\Db\OrderBdd; use Psr\Log\LoggerInterface; use OCA\Gestion\Helpers\VCalendarHelpers; @@ -37,9 +39,14 @@ class GestionService { /** @var LoggerInterface */ private $logger; + /** @var \OCA\Gestion\Db\OrderBdd */ + private $orderBdd; + public function __construct( Bdd $gestionBdd, + OrderBdd $orderBdd, LoggerInterface $logger) { + $this->orderBdd = $orderBdd; $this->logger = $logger; $this->gestionBdd = $gestionBdd; } @@ -54,6 +61,29 @@ class GestionService { return $summaryValue; } + private function GetThanatoFromVCalendarString(string $vCalendarString){ + $thanato = null; + $thanatoNames = $this->GetAttendeesNameFromVCalendarString($vCalendarString); + if(count($thanatoNames) > 0){ + $thanatoName = $thanatoNames[0]; + $thanatoFromDb = $this->gestionBdd->getThanatoByUserUuid($thanatoName); + if($thanatoFromDb != null){ + $thanato = $thanatoFromDb; + } + } + else{ + //get from calendar object + $organizerName = $this->getPrincipalUsernameFromVCalendarString($vCalendarString); + if($organizerName != null){ + $thanatoFromDb = $this->gestionBdd->getThanatoByUserUuid($organizerName); + if($thanatoFromDb != null){ + $thanato = $thanatoFromDb; + } + } + } + return $thanato; + } + private function GetThanatoIdFromVCalendarString(string $vCalendarString) { $thanatoId = 0; @@ -114,11 +144,55 @@ class GestionService { return $calendarStartDate; } - public function HandleCreatedCalendarObject(string $vCalendarString){ + private function IsOrderAlreadyCreated($calendarUuid){ + $order = $this->orderBdd->getOrderByCalendarUuid($calendarUuid); + return $order != null; + } + + private function CreateOrderFromVCalendarString($vCalendarString,$thanatoId){ + $calendarUuid = $this->GetCalendarUuidFromVCalendarString($vCalendarString); + $orderAlreadyCreated = $this->IsOrderAlreadyCreated($calendarUuid); + if($orderAlreadyCreated){ + return; + } + $nextcloudUser = $this->GetThanatoNameFromVCalendarString($vCalendarString); + $calendarSummary = $this->GetCalendarSummaryFromVCalendarString($vCalendarString); + $clientId = $this->GetClientIdFromVCalendarString($vCalendarString); + $locationId = $this->GetLocationIdFromVCalendarString($vCalendarString); + $calendarStartDate = $this->GetCalendarDateFromVCalendarString($vCalendarString); + $defuntId = $this->gestionBdd->insertDefuntByNameAndReturnId($calendarSummary); + $orderId = $this->orderBdd->insertOrderFromVCalendarPropertyAndReturnId( + $thanatoId, + $clientId, + $locationId, + $defuntId, + $calendarUuid, + $calendarStartDate, + $nextcloudUser); + $productsValue = $this->GetArticlesNameFromVCalendarString($vCalendarString); + if(!empty($productsValue)){ + $productIds = $this->gestionBdd->getArticleIdsByArticleReferences($productsValue); + $this->orderBdd->insertOrderProductsByProductIds($orderId, $productIds); + } + + } + + public function HandleCreatedCalendarObject(string $vCalendarString){ + $thanato = $this->GetThanatoFromVCalendarString($vCalendarString); + if($thanato != null){ + $thanatoId = $thanato["id"]; + $thanatoIsSubcontractor = $thanato["fk_thanato_type_key"] === ThanatoTypeConstant::THANATO_TYPE_SUBCONTRACTOR; + if($thanatoIsSubcontractor){ + $this->CreateOrderFromVCalendarString($vCalendarString,$thanatoId); + return; + } + } + else{ + $thanatoId = 0; + } $calendarSummary = $this->GetCalendarSummaryFromVCalendarString($vCalendarString); $clientId = $this->GetClientIdFromVCalendarString($vCalendarString); $locationId = $this->GetLocationIdFromVCalendarString($vCalendarString); - $thanatoId = $this->GetThanatoIdFromVCalendarString($vCalendarString); $calendarUuid = $this->GetCalendarUuidFromVCalendarString($vCalendarString); $userName = $this->GetThanatoNameFromVCalendarString($vCalendarString); $devisAlreadyCreated = $this->IsDevisAlreadyCreated($clientId,$locationId,$thanatoId,$calendarSummary,$calendarUuid);