diff --git a/controllers/ApiController.php b/controllers/ApiController.php index 9b8c4021..616871db 100644 --- a/controllers/ApiController.php +++ b/controllers/ApiController.php @@ -9,6 +9,7 @@ use yii\helpers\FileHelper; use app\models\CaptureLogs; use app\models\ListManagement; use app\models\common; +use app\models\Schedule; /** * CardController implements the CRUD actions for Card model. @@ -582,6 +583,12 @@ class ApiController extends Controller { if ($value['action'] == "remove_info") $result = $this->removeInfo($value); + if ($value['action'] == "insert_door_open") + $result = $this->insertSchedule($value); + + if ($value['action'] == "remove_door_open") + $result = $this->removeSchedule($value); + if ($value['action'] == "reset_all") { \Yii::$app->db->createCommand()->truncateTable('capture_logs')->execute(); \Yii::$app->db->createCommand()->truncateTable('list_management')->execute(); @@ -592,7 +599,7 @@ class ApiController extends Controller { if (Yii::$app->params['autoSyncLog']) file_put_contents("logs.txt", $count . "\t" . $value['action'] . "\t" . $value['files_name'][0] . "\t" . ($result ? "true" : "false") . "\t" . $processTime . "\t" . $value['name'] . "\n", FILE_APPEND); - if (in_array($value['action'], ['insert_image', 'remove_image', 'insert_info', 'remove_info', 'reset_all'])) { + if (in_array($value['action'], ['insert_image', 'remove_image', 'insert_info', 'remove_info', 'reset_all', 'insert_door_open', 'remove_door_open'])) { if ($result) $infomation[] = [ "obj_Log" => $value['obj_Log'], @@ -764,4 +771,92 @@ class ApiController extends Controller { return false; } + public function insertSchedule($data) { + $model = new Schedule(); + $info = ListManagement::findOne(['staff_id' => $data['id']]); + $schedule = Schedule::findOne(['staff_id' => $info->id, 'id_door_calendar' => $data['id_door_calendar']]); + if ($schedule) { + $schedule->from_time = $data['time_in']; + $schedule->to_time = $data['time_out']; + $schedule->from_date = $this->formatDateSchedule($data['day_in']); + $schedule->to_date = $this->formatDateSchedule($data['day_out']); + $schedule->date_of_week = $this->formatDayOfWeekSchedule($data['day_of_week']); + return $schedule->save(); + } else { + return $model->create([ + 'staff_id' => $info->id, + 'from_time' => $data['time_in'], + 'to_time' => $data['time_out'], + 'from_date' => $this->formatDateSchedule($data['day_in']), + 'to_date' => $this->formatDateSchedule($data['day_out']), + 'date_of_week' => $this->formatDayOfWeekSchedule($data['day_of_week']), + 'id_door_calendar' => $data['id_door_calendar'] + ]); + } + } + + public function removeSchedule($data) { + $info = ListManagement::findOne(['staff_id' => $data['id']]); + if ($info) { + $schedule = \app\models\Schedule::findOne([ + 'id_door_calendar' => $data['id_door_calendar'], + 'staff_id' => $info->id + ]); + if ($schedule) + $schedule->delete(); + } + return true; + } + + public function formatDateSchedule($date) { + $temp = explode(" ", $date); + $parse = explode("-", $temp[0]); + return $parse[2] . "/" . $parse[1] . "/" . $parse[0]; + } + + public function formatDayOfWeekSchedule($dayOfWeek) { + $days = []; + $temp = explode("|", $dayOfWeek); + foreach ($temp as $key => $value) { + if ($value != "") + $days[] = intval($value) + 2; + } + return implode(",", $days); + } + + public function actionCheckOpenDoor() { + if (Yii::$app->request->post()) { + $post = Yii::$app->request->bodyParams; + $info = ListManagement::findOne(["staff_id" => $post["object_id"]]); + $timeGet = date_format(date_create_from_format('Y-m-d H:i:s', $post['timeget']), 'U'); + $openDoor = 0; + if ($info) { + $schedules = Schedule::find()->andWhere(["staff_id" => $info->id])->all(); + foreach ($schedules as $key => $value) { + $fromDate = date_format(date_create_from_format('H:i:s d/m/Y', "00:00:00 " . $value->from_date), 'U'); + $toDate = date_format(date_create_from_format('H:i:s d/m/Y', "23:59:59 " . $value->to_date), 'U'); + if ($timeGet > $fromDate && $timeGet < $toDate) { + $dateOfWeek = explode(",", $value->date_of_week); + $weekDay = intval(date("w", $timeGet)) + 1; + if ($weekDay == 1) + $weekDay = 8; + if (in_array($weekDay, $dateOfWeek)) { + $fromTime = date_format(date_create_from_format('H:i:s d/m/Y', $value->from_time . ":00 " . date("d/m/Y", $timeGet)), 'U'); + $toTime = date_format(date_create_from_format('H:i:s d/m/Y', $value->to_time . ":59 " . date("d/m/Y", $timeGet)), 'U'); + if ($timeGet > $fromTime && $timeGet < $toTime) + $openDoor = 1; + } + } + } + } + Yii::$app->response->format = "json"; + return [ + "status" => 10000, + "data" => [ + "open_door" => $openDoor + ] + ]; + } + } + } diff --git a/db/app.db b/db/app.db index 08ace00c..19f91020 100644 Binary files a/db/app.db and b/db/app.db differ diff --git a/helpers/ListManagementGrid.php b/helpers/ListManagementGrid.php index 8d03707e..d502c9ee 100644 --- a/helpers/ListManagementGrid.php +++ b/helpers/ListManagementGrid.php @@ -112,7 +112,7 @@ class ListManagementGrid { $btnEdit = " $value->id]) . "'>"; $btnDelete = " $value->id]) . "'>"; $btn = "" . $btnEdit . " " . $btnDelete . ""; - $html .= "