diff --git a/assets/DashboardAsset.php b/assets/DashboardAsset.php new file mode 100644 index 00000000..bb204590 --- /dev/null +++ b/assets/DashboardAsset.php @@ -0,0 +1,23 @@ + 'basic', 'homeUrl' => ['/dashboard'], 'name' => 'BeetInnovators ANPR', - 'defaultRoute' => 'logs', + 'defaultRoute' => 'dashboard', 'basePath' => dirname(__DIR__), 'bootstrap' => ['log'], 'timeZone' => 'Asia/Ho_Chi_Minh', diff --git a/controllers/DashboardController.php b/controllers/DashboardController.php new file mode 100644 index 00000000..dea74264 --- /dev/null +++ b/controllers/DashboardController.php @@ -0,0 +1,80 @@ +user->isGuest) { + return $this->redirect(['/site/login']); + } + } + + /** + * {@inheritdoc} + */ + public function behaviors() { + return [ + 'verbs' => [ + 'class' => VerbFilter::className(), + 'actions' => [ + 'delete' => ['POST'], + ], + ], + ]; + } + + /** + * Lists all Logs models. + * @return mixed + */ + public function actionIndex() { + $this->view->title = "Bảng điều khiển"; + $f = date_format(date_create_from_format('H:i d/m/Y', "00:00 " . date("d/m/Y")), 'U'); + $t = date_format(date_create_from_format('H:i d/m/Y', "23:59 " . date("d/m/Y")), 'U'); + + $logs = Logs::find()->andWhere(["OR", ["BETWEEN", 'time_in', $f, $t], ["BETWEEN", 'time_out', $f, $t]])->orderBy(['time_in' => SORT_DESC, 'time_out' => SORT_DESC])->all(); + + $temp = []; + $in = 0; + $out = 0; + foreach ($logs as $k => $v) { + if ($v->time_out) { + $temp[$v->id] = $v->time_out; + } else { + $temp[$v->id] = $v->time_in; + } + if ($v->time_in) + $in++; + if ($v->time_out) + $out++; + } + arsort($temp); + + $results = []; + foreach ($temp as $k => $v) { + foreach ($logs as $key => $value) { + if ($value->id == $k) + $results[] = $value; + } + } + + return $this->render('index', [ + "results" => $results, + "in" => $in, + "out" => $out, + "common" => new \app\models\common() + ]); + } + +} diff --git a/controllers/LogsController.php b/controllers/LogsController.php index a865987b..9212e5b5 100644 --- a/controllers/LogsController.php +++ b/controllers/LogsController.php @@ -53,7 +53,6 @@ class LogsController extends Controller { $f = date_format(date_create_from_format('H:i d/m/Y', $from), 'U'); $t = date_format(date_create_from_format('H:i d/m/Y', $to), 'U'); $dataProvider->query->andWhere(["OR", ["BETWEEN", 'time_in', $f, $t], ["BETWEEN", 'time_out', $f, $t]]); - return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, @@ -138,4 +137,151 @@ class LogsController extends Controller { throw new NotFoundHttpException('The requested page does not exist.'); } + public function actionSave() { + if (Yii::$app->request->post()) { + $post = Yii::$app->request->post(); + $logs = Logs::findOne($post['id']); + $field = $post['field']; + if ($logs) { + $logs->$field = $post['value']; + $logs->save(); + } + return "
{$post['value']}
"; + } + } + + public function actionExport($from = "", $to = "") { + if ($from === "") { + $from = "00:00 " . date("d/m/Y"); + } + if ($to === "") { + $to = "23:59 " . date("d/m/Y"); + } + $f = date_format(date_create_from_format('H:i d/m/Y', $from), 'U'); + $t = date_format(date_create_from_format('H:i d/m/Y', $to), 'U'); + + $lists = Logs::find()->andWhere(["OR", ["BETWEEN", 'time_in', $f, $t], ["BETWEEN", 'time_out', $f, $t]])->orderBy(['time_in' => SORT_ASC])->all(); + $objPHPExcel = new \PHPExcel(); + $count = 1; + $objPHPExcel->setActiveSheetIndex(0); + $toExcelFile[] = [ + "STT", + "Biến số", + "Loại xe", + "Tên công ty", + "Lái xe", + "Điện thoại", + "CMT", + "Factory", + "SEAL_NO", + "Thời gian vào", + "Thời gian ra", + "Nội dung khác" + ]; + foreach ($lists as $k => $v) { + $ExportData[] = $count++; + $ExportData[] = $v->vehicle->plate; + $ExportData[] = $v->vehicle->type; + $ExportData[] = $v->vehicle->company; + $ExportData[] = $v->vehicle->driver; + $ExportData[] = $v->vehicle->telephone; + $ExportData[] = $v->vehicle->indentity_card; + $ExportData[] = $v->factory; + $ExportData[] = $v->seal_no; + $ExportData[] = $v->time_in == 0 ? "" : date("H:i:s d/m/Y", $v->time_in); + $ExportData[] = $v->time_out == 0 ? "" : date("H:i:s d/m/Y", $v->time_out); + $ExportData[] = $v->note; + $toExcelFile[] = $ExportData; + unset($ExportData); + } + $totals = count($lists) + 2; + $activeSheet = $objPHPExcel->getActiveSheet(); + $activeSheet->setCellValue("A1", "DANH SÁCH XE RA VÀO TỪ {$from} ĐẾN {$to}"); + $activeSheet->mergeCells('A1:L1'); + $activeSheet->getRowDimension('1')->setRowHeight(50); + $activeSheet->getStyle("A2:L2")->getFont()->setBold(true); + $activeSheet->getStyle("A1")->getFont()->setBold(true)->setName('Time New Roman')->setSize(13); + $activeSheet->getStyle("A2:L" . $totals)->getFont()->setName('Time New Roman')->setSize(10); + $activeSheet->getColumnDimension('A')->setWidth(5); + $activeSheet->getColumnDimension('B')->setWidth(12); + $activeSheet->getColumnDimension('C')->setWidth(10); + $activeSheet->getColumnDimension('D')->setWidth(30); + $activeSheet->getColumnDimension('E')->setWidth(15); + $activeSheet->getColumnDimension('F')->setWidth(15); + $activeSheet->getColumnDimension('G')->setWidth(15); + $activeSheet->getColumnDimension('H')->setWidth(12); + $activeSheet->getColumnDimension('I')->setWidth(10); + $activeSheet->getColumnDimension('J')->setWidth(15); + $activeSheet->getColumnDimension('K')->setWidth(15); + $activeSheet->getColumnDimension('L')->setWidth(20); + $style = array( + 'alignment' => array( + 'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_CENTER, + 'vertical' => \PHPExcel_Style_Alignment::VERTICAL_CENTER, + 'wrap' => true + ) + ); + $activeSheet->getStyle("A1:L2")->applyFromArray($style); + $activeSheet->getStyle("A2:L2")->applyFromArray([ + 'fill' => array( + 'type' => \PHPExcel_Style_Fill::FILL_SOLID, + 'color' => array('rgb' => '00c0ef') + ) + ]); + $rowCount = 2; + for ($i = 0; $i < count($toExcelFile); $i++) { + $column = 'A'; + $row = $toExcelFile[$i]; + for ($j = 0; $j < count($row); $j++) { + if (!isset($row[$j])) + $value = NULL; + elseif ($row[$j] != "") + $value = strip_tags($row[$j]); + else + $value = ""; + $activeSheet->setCellValue($column . $rowCount, $value); + $column = chr(ord($column) + 1); + } + $rowCount++; + } + + $activeSheet->getStyle("A2:L" . $totals)->applyFromArray([ + 'alignment' => [ + 'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_CENTER, + 'vertical' => \PHPExcel_Style_Alignment::VERTICAL_CENTER, + 'wrap' => true + ], + 'borders' => [ + 'allborders' => [ + 'style' => \PHPExcel_Style_Border::BORDER_THIN + ] + ] + ]); + $activeSheet->getStyle("D3:D" . $totals)->applyFromArray([ + 'alignment' => [ + 'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_LEFT, + 'wrap' => true + ] + ]); + + $activeSheet->setCellValue("B" . ($totals + 3), "Tổng số lượt xe vào:"); + $activeSheet->setCellValue("B" . ($totals + 4), "Tổng số lượt xe ra:"); + $activeSheet->mergeCells("B" . ($totals + 3) . ":C" . ($totals + 3)); + $activeSheet->mergeCells("B" . ($totals + 4) . ":C" . ($totals + 4)); + + $activeSheet->setCellValue("D" . ($totals + 3), Logs::find()->andWhere(["BETWEEN", "time_in", $f, $t])->count()); + $activeSheet->setCellValue("D" . ($totals + 4), Logs::find()->andWhere(["BETWEEN", "time_out", $f, $t])->count()); + + $activeSheet->getStyle("B" . ($totals + 3) . ":B" . ($totals + 5))->getFont()->setBold(true)->setItalic(true)->setName('Time New Roman')->setSize(11); + $activeSheet->getStyle("D" . ($totals + 3) . ":D" . ($totals + 5))->getFont()->setItalic(true)->setName('Time New Roman')->setSize(11); + + $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); + ob_end_clean(); + header('Content-type: application/vnd.ms-excel'); + header('Content-Disposition: attachment; filename="bao-cao.xlsx"'); + header('Cache-Control: max-age=0'); + $objWriter->save('php://output'); + exit(); + } + } diff --git a/controllers/LogsUnknowController.php b/controllers/LogsUnknowController.php index 6106d633..65bddb69 100644 --- a/controllers/LogsUnknowController.php +++ b/controllers/LogsUnknowController.php @@ -138,4 +138,151 @@ class LogsUnknowController extends Controller { throw new NotFoundHttpException('The requested page does not exist.'); } + public function actionSave() { + if (Yii::$app->request->post()) { + $post = Yii::$app->request->post(); + $logs = LogsUnknow::findOne($post['id']); + $field = $post['field']; + if ($logs) { + $logs->$field = $post['value']; + $logs->save(); + } + return "
{$post['value']}
"; + } + } + + public function actionExport($from = "", $to = "") { + if ($from === "") { + $from = "00:00 " . date("d/m/Y"); + } + if ($to === "") { + $to = "23:59 " . date("d/m/Y"); + } + $f = date_format(date_create_from_format('H:i d/m/Y', $from), 'U'); + $t = date_format(date_create_from_format('H:i d/m/Y', $to), 'U'); + + $lists = LogsUnknow::find()->andWhere(["OR", ["BETWEEN", 'time_in', $f, $t], ["BETWEEN", 'time_out', $f, $t]])->orderBy(['time_in' => SORT_ASC])->all(); + $objPHPExcel = new \PHPExcel(); + $count = 1; + $objPHPExcel->setActiveSheetIndex(0); + $toExcelFile[] = [ + "STT", + "Biến số", + "Loại xe", + "Tên công ty", + "Lái xe", + "Điện thoại", + "CMT", + "Factory", + "SEAL_NO", + "Thời gian vào", + "Thời gian ra", + "Nội dung khác" + ]; + foreach ($lists as $k => $v) { + $ExportData[] = $count++; + $ExportData[] = $v->plate; + $ExportData[] = ""; + $ExportData[] = ""; + $ExportData[] = ""; + $ExportData[] = ""; + $ExportData[] = ""; + $ExportData[] = $v->factory; + $ExportData[] = $v->seal_no; + $ExportData[] = $v->time_in == 0 ? "" : date("H:i:s d/m/Y", $v->time_in); + $ExportData[] = $v->time_out == 0 ? "" : date("H:i:s d/m/Y", $v->time_out); + $ExportData[] = $v->note; + $toExcelFile[] = $ExportData; + unset($ExportData); + } + $totals = count($lists) + 2; + $activeSheet = $objPHPExcel->getActiveSheet(); + $activeSheet->setCellValue("A1", "DANH SÁCH XE KHÔNG RÕ NGUỒN GỐC RA VÀO TỪ {$from} ĐẾN {$to}"); + $activeSheet->mergeCells('A1:L1'); + $activeSheet->getRowDimension('1')->setRowHeight(50); + $activeSheet->getStyle("A2:L2")->getFont()->setBold(true); + $activeSheet->getStyle("A1")->getFont()->setBold(true)->setName('Time New Roman')->setSize(13); + $activeSheet->getStyle("A2:L" . $totals)->getFont()->setName('Time New Roman')->setSize(10); + $activeSheet->getColumnDimension('A')->setWidth(5); + $activeSheet->getColumnDimension('B')->setWidth(12); + $activeSheet->getColumnDimension('C')->setWidth(10); + $activeSheet->getColumnDimension('D')->setWidth(30); + $activeSheet->getColumnDimension('E')->setWidth(15); + $activeSheet->getColumnDimension('F')->setWidth(15); + $activeSheet->getColumnDimension('G')->setWidth(15); + $activeSheet->getColumnDimension('H')->setWidth(12); + $activeSheet->getColumnDimension('I')->setWidth(10); + $activeSheet->getColumnDimension('J')->setWidth(15); + $activeSheet->getColumnDimension('K')->setWidth(15); + $activeSheet->getColumnDimension('L')->setWidth(20); + $style = array( + 'alignment' => array( + 'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_CENTER, + 'vertical' => \PHPExcel_Style_Alignment::VERTICAL_CENTER, + 'wrap' => true + ) + ); + $activeSheet->getStyle("A1:L2")->applyFromArray($style); + $activeSheet->getStyle("A2:L2")->applyFromArray([ + 'fill' => array( + 'type' => \PHPExcel_Style_Fill::FILL_SOLID, + 'color' => array('rgb' => '00c0ef') + ) + ]); + $rowCount = 2; + for ($i = 0; $i < count($toExcelFile); $i++) { + $column = 'A'; + $row = $toExcelFile[$i]; + for ($j = 0; $j < count($row); $j++) { + if (!isset($row[$j])) + $value = NULL; + elseif ($row[$j] != "") + $value = strip_tags($row[$j]); + else + $value = ""; + $activeSheet->setCellValue($column . $rowCount, $value); + $column = chr(ord($column) + 1); + } + $rowCount++; + } + + $activeSheet->getStyle("A2:L" . $totals)->applyFromArray([ + 'alignment' => [ + 'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_CENTER, + 'vertical' => \PHPExcel_Style_Alignment::VERTICAL_CENTER, + 'wrap' => true + ], + 'borders' => [ + 'allborders' => [ + 'style' => \PHPExcel_Style_Border::BORDER_THIN + ] + ] + ]); + $activeSheet->getStyle("D3:D" . $totals)->applyFromArray([ + 'alignment' => [ + 'horizontal' => \PHPExcel_Style_Alignment::HORIZONTAL_LEFT, + 'wrap' => true + ] + ]); + + $activeSheet->setCellValue("B" . ($totals + 3), "Tổng số lượt xe vào:"); + $activeSheet->setCellValue("B" . ($totals + 4), "Tổng số lượt xe ra:"); + $activeSheet->mergeCells("B" . ($totals + 3) . ":C" . ($totals + 3)); + $activeSheet->mergeCells("B" . ($totals + 4) . ":C" . ($totals + 4)); + + $activeSheet->setCellValue("D" . ($totals + 3), LogsUnknow::find()->andWhere(["BETWEEN", "time_in", $f, $t])->count()); + $activeSheet->setCellValue("D" . ($totals + 4), LogsUnknow::find()->andWhere(["BETWEEN", "time_out", $f, $t])->count()); + + $activeSheet->getStyle("B" . ($totals + 3) . ":B" . ($totals + 5))->getFont()->setBold(true)->setItalic(true)->setName('Time New Roman')->setSize(11); + $activeSheet->getStyle("D" . ($totals + 3) . ":D" . ($totals + 5))->getFont()->setItalic(true)->setName('Time New Roman')->setSize(11); + + $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); + ob_end_clean(); + header('Content-type: application/vnd.ms-excel'); + header('Content-Disposition: attachment; filename="bao-cao.xlsx"'); + header('Cache-Control: max-age=0'); + $objWriter->save('php://output'); + exit(); + } + } diff --git a/controllers/VehicleController.php b/controllers/VehicleController.php index d832c3be..ff46b6ae 100644 --- a/controllers/VehicleController.php +++ b/controllers/VehicleController.php @@ -154,7 +154,7 @@ class VehicleController extends Controller { throw new NotFoundHttpException('The requested page does not exist.'); } - +// // public function actionImport() { // $file_type = \PHPExcel_IOFactory::identify("data/data.xlsx"); // $objReader = \PHPExcel_IOFactory::createReader($file_type); @@ -165,12 +165,12 @@ class VehicleController extends Controller { // if ($k > 1) { // $model = new Vehicle(); // $kq[] = $model->create([ -// 'plate' => $this->formatPlate($row["B"]), +// 'plate' => $this->format($row["B"]), // 'type' => $row["C"], // 'company' => $row["D"], // 'vehicle_type' => $row["E"], // 'driver' => $row["F"], -// 'telephone' => $this->formatPlate($row["G"]), +// 'telephone' => $this->format($row["G"]), // 'indentity_card' => strval($row["H"]) // ]); // } @@ -180,11 +180,77 @@ class VehicleController extends Controller { // echo ""; // exit(); // } -// + public function format($plate) { $p1 = str_replace("-", "", $plate); $p2 = str_replace(".", "", $p1); - return str_replace(" ", "", $p2); + $p3 = str_replace("\n", "", $p2); + return str_replace(" ", "", $p3); } +// +// public function actionExport() { +// set_time_limit(3600); +// $vehicles = Vehicle::find()->orderBy(['plate' => SORT_ASC])->all(); +// $connection = Yii::$app->getDb(); +// foreach ($vehicles as $k => $v) { +// $command = $connection->createCommand("SELECT * FROM `vehicle` WHERE `plate`<>'{$v->plate}' AND levenshtein('%{$v->plate}', `plate`) BETWEEN 0 AND 1"); +// $result = $command->queryAll(); +// $temp = []; +// foreach ($result as $key => $value) { +// $temp[] = $value['plate']; +// } +// $v->levenshtein_plate_2 = json_encode($temp); +// $v->save(); +// } +// exit(); +// +// $objPHPExcel = new \PHPExcel(); +// $count = 1; +// $objPHPExcel->setActiveSheetIndex(0); +// $toExcelFile[] = [ +// "STT", +// "Biển số", +// "Gần giống", +// "Công ty", +// "Lái xe" +// ]; +// foreach ($vehicles as $k => $v) { +// $ExportData[] = $count++; +// $ExportData[] = $v->plate; +// $connection = Yii::$app->getDb(); +// $command = $connection->createCommand("SELECT * FROM `vehicle` WHERE levenshtein(':plate_query', `plate`) BETWEEN 0 AND 2 AND `plate`<>':plate_query'", [':plate_query' => $v->plate]); +// $result = $command->queryAll(); +// $ExportData[] = count($result); +// $ExportData[] = $v->company; +// $ExportData[] = $v->driver; +// $toExcelFile[] = $ExportData; +// unset($ExportData); +// } +// $activeSheet = $objPHPExcel->getActiveSheet(); +// $rowCount = 1; +// for ($i = 0; $i < count($toExcelFile); $i++) { +// $column = 'A'; +// $row = $toExcelFile[$i]; +// for ($j = 0; $j < count($row); $j++) { +// if (!isset($row[$j])) +// $value = NULL; +// elseif ($row[$j] != "") +// $value = strip_tags($row[$j]); +// else +// $value = ""; +// $activeSheet->setCellValue($column . $rowCount, $value); +// $column = chr(ord($column) + 1); +// } +// $rowCount++; +// } +// +// $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); +// ob_end_clean(); +// header('Content-type: application/vnd.ms-excel'); +// header('Content-Disposition: attachment; filename="bao-cao.xlsx"'); +// header('Cache-Control: max-age=0'); +// $objWriter->save('php://output'); +// exit(); +// } } diff --git a/helpers/LogsGrid.php b/helpers/LogsGrid.php index c1ddb9d3..6000f9a1 100644 --- a/helpers/LogsGrid.php +++ b/helpers/LogsGrid.php @@ -26,11 +26,17 @@ class LogsGrid { public static function plateIn() { return function($model) { if ($model->time_in) { - $style = "width:100px"; + $style = "width:100px;cursor:pointer;"; $image = $model->plate_image_in; return Html::img(Yii::$app->request->hostInfo . "/AIParking_Intops_Server/web/data/uploads/" . $image, [ 'class' => "img-thumbnail", - "style" => $style + "style" => $style, + "data" => [ + "toggle" => "popover-hover", + "img" => Yii::$app->request->hostInfo . "/AIParking_Intops_Server/web/data/uploads/" . $model->frame_image_in, + "size" => "min" + ], + "onclick" => "resizeImage(this);" ]); } else { return ""; @@ -38,24 +44,20 @@ class LogsGrid { }; } - public static function cardId() { - return function($model) { - if ($model->card_id != 0) { - return sprintf("%06d", $model->card_id); - } else { - return "Thẻ đã bị xóa!"; - } - }; - } - public static function plateOut() { return function($model) { if ($model->time_out) { - $style = "width:100px"; + $style = "width:100px;cursor:pointer;"; $image = $model->plate_image_out; return Html::img(Yii::$app->request->hostInfo . "/AIParking_Intops_Server/web/data/uploads/" . $image, [ 'class' => "img-thumbnail", - "style" => $style + "style" => $style, + "data" => [ + "toggle" => "popover-hover", + "img" => Yii::$app->request->hostInfo . "/AIParking_Intops_Server/web/data/uploads/" . $model->frame_image_out, + "size" => "min" + ], + "onclick" => "resizeImage(this);" ]); } else { return ""; @@ -85,4 +87,58 @@ class LogsGrid { }; } + public static function driver() { + return function($model) { + $ls = explode("/", $model->vehicle->driver); + return implode("
", $ls); + }; + } + + public static function telephone() { + return function($model) { + $ls = explode("/", $model->vehicle->telephone); + return implode("
", $ls); + }; + } + + public static function cmt() { + return function($model) { + $ls = explode("/", $model->vehicle->indentity_card); + return implode("
", $ls); + }; + } + + public static function factory() { + return function($model) { + $text = $model->factory; + if ($model->factory == null) + $text = "không có"; + + $data = "
{$text}
"; + return $data; + }; + } + + public static function sealNo() { + return function($model) { + $text = $model->seal_no; + if ($model->seal_no == null) + $text = "không có"; + + $data = "
{$text}
"; + return $data; + }; + } + + public static function note() { + return function($model) { + $text = $model->note; + if ($model->note == null) + $text = "không có"; + + $data = "
{$text}
"; + return $data; + }; + } + } diff --git a/models/LogsSearch.php b/models/LogsSearch.php index 5774ff1c..efcb64ca 100644 --- a/models/LogsSearch.php +++ b/models/LogsSearch.php @@ -52,6 +52,9 @@ class LogsSearch extends Logs { $dataProvider = new ActiveDataProvider([ 'query' => $query, + 'sort' => [ + 'defaultOrder' => ['time_in' => SORT_DESC, 'time_out' => SORT_DESC] + ] ]); $this->load($params); diff --git a/models/Vehicle.php b/models/Vehicle.php index f6446e4e..fe6aa2dc 100644 --- a/models/Vehicle.php +++ b/models/Vehicle.php @@ -32,7 +32,7 @@ class Vehicle extends \yii\db\ActiveRecord { */ public function rules() { return [ - [['plate', 'type'], 'required'], + [['plate'], 'required'], [['company', 'vehicle_type'], 'string'], [['plate', 'type'], 'string', 'max' => 20], [['driver', 'telephone', 'indentity_card'], 'string', 'max' => 200], diff --git a/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/left.php b/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/left.php index b35409ad..a14fc3db 100644 --- a/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/left.php +++ b/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/left.php @@ -33,6 +33,7 @@ [ 'options' => ['class' => 'sidebar-menu tree', 'data-widget' => 'tree'], 'items' => [ + ['label' => 'Bảng điều khiển', 'url' => ['/dashboard'], 'icon' => 'dashboard'], ['label' => 'Thống kê', 'url' => ['/logs'], 'icon' => 'bar-chart'], ['label' => 'Danh sách xe', 'url' => ['/vehicle'], 'icon' => 'truck'], ['label' => 'Người dùng', 'url' => ['/user'], 'icon' => 'users', 'visible' => Yii::$app->user->can("administrator")], diff --git a/views/dashboard/index.tpl b/views/dashboard/index.tpl new file mode 100644 index 00000000..51f2c456 --- /dev/null +++ b/views/dashboard/index.tpl @@ -0,0 +1,114 @@ +{extends file=$smarty.current_dir|cat:'/../extends.tpl'} +{use class="yii\helpers\Url"} +{use class="yii\grid\GridView"} +{use class="app\assets\DashboardAsset"} +{DashboardAsset::register($this)|void} +{block name='content'} + + +

{"XE RA/VÀO NGÀY "|cat:date("d/m/Y")|upper}

+
+
+
+ Tổng số xe vào: {$in} +
+ Tổng số xe ra: {$out} +
+
+
+ + Thống kê + + + Xe khác + +
+
+ + + + + + + + + + + + + + + + + + + + {foreach from=$results item=arr} + + + + + + + + + + + + + + + + {/foreach} + +
Biển sốLoại xeTên công tyLái xeĐiện thoạiCMTFactorySEAL_NOẢnh biển vàoThời gian vàoẢnh biển raThời gian raNội dung khác
{$arr->vehicle->plate}{$arr->vehicle->type}{$arr->vehicle->company} + {$data=explode("/",$arr->vehicle->driver)} + {implode("
",$data)} +
+ {$data=explode("/",$arr->vehicle->telephone)} + {implode("
",$data)} +
+ {$data=explode("/",$arr->vehicle->indentity_card)} + {implode("
",$data)} +
+
+ {if $arr->factory == null} + không có + {else} + {$arr->factory} + {/if} +
+
+
+ {if $arr->seal_no == null} + không có + {else} + {$arr->seal_no} + {/if} +
+
+ {if $arr->time_in} + + {/if} + + {if $arr->time_in} + {$common->formatTime($arr->time_in,"H:i:s d/m/Y")} + {/if} + + {if $arr->time_out} + + {/if} + + {if $arr->time_out} + {$common->formatTime($arr->time_out,"H:i:s d/m/Y")} + {/if} + +
+ {if $arr->note == null} + không có + {else} + {$arr->note} + {/if} +
+
+{/block} \ No newline at end of file diff --git a/views/logs-unknow/index.tpl b/views/logs-unknow/index.tpl index ffebffea..19d6160e 100644 --- a/views/logs-unknow/index.tpl +++ b/views/logs-unknow/index.tpl @@ -4,6 +4,7 @@ {use class="app\assets\LogsAsset"} {LogsAsset::register($this)|void} {block name='content'} +
@@ -44,8 +45,16 @@ 'columns' => [ ['class' => 'yii\grid\SerialColumn'], 'plate', - 'factory', - 'seal_no', + [ + 'attribute' => 'factory', + 'format' => 'raw', + 'value' => \app\helpers\LogsGrid::factory() + ], + [ + 'attribute' => 'seal_no', + 'format' => 'raw', + 'value' => \app\helpers\LogsGrid::sealNo() + ], [ 'attribute' => "plate_image_in", 'format' => 'raw', @@ -74,7 +83,11 @@ 'headerOptions' => ['style' => 'width:5%'], 'value' => \app\helpers\LogsGrid::timeOut() ], - 'note' + [ + 'attribute' => 'note', + 'format' => 'raw', + 'value' => \app\helpers\LogsGrid::note() + ] ] ])} {/block} \ No newline at end of file diff --git a/views/logs/index.tpl b/views/logs/index.tpl index 11979445..21fdd36b 100644 --- a/views/logs/index.tpl +++ b/views/logs/index.tpl @@ -4,6 +4,15 @@ {use class="app\assets\LogsAsset"} {LogsAsset::register($this)|void} {block name='content'} + +
@@ -31,7 +40,12 @@ Xuất báo cáo
-
+
+ +
+
Xe khác @@ -62,23 +76,33 @@ ], [ 'attribute' => 'driver', - 'value' => 'vehicle.driver' + 'format' => 'raw', + 'value' => \app\helpers\LogsGrid::driver() ], [ 'attribute' => 'telephone', - 'value' => 'vehicle.telephone' + 'format' => 'raw', + 'value' => \app\helpers\LogsGrid::telephone() ], [ 'attribute' => 'cmt', - 'value' => 'vehicle.indentity_card' + 'format' => 'raw', + 'value' => \app\helpers\LogsGrid::cmt() + ], + [ + 'attribute' => 'factory', + 'format' => 'raw', + 'value' => \app\helpers\LogsGrid::factory() + ], + [ + 'attribute' => 'seal_no', + 'format' => 'raw', + 'value' => \app\helpers\LogsGrid::sealNo() ], - 'factory', - 'seal_no', [ 'attribute' => "plate_image_in", 'format' => 'raw', 'contentOptions' => ['class' => 'text-center'], - 'headerOptions' => ['style' => 'width:8%'], 'value' => \app\helpers\LogsGrid::plateIn() ], [ @@ -92,7 +116,6 @@ 'attribute' => "plate_image_out", 'format' => 'raw', 'contentOptions' => ['class' => 'text-center'], - 'headerOptions' => ['style' => 'width:8%'], 'value' => \app\helpers\LogsGrid::plateOut() ], [ @@ -102,7 +125,11 @@ 'headerOptions' => ['style' => 'width:5%'], 'value' => \app\helpers\LogsGrid::timeOut() ], - 'note' + [ + 'attribute' => 'note', + 'format' => 'raw', + 'value' => \app\helpers\LogsGrid::note() + ] ] ])} {/block} \ No newline at end of file diff --git a/web/js/dashboard.js b/web/js/dashboard.js new file mode 100644 index 00000000..15a9fea7 --- /dev/null +++ b/web/js/dashboard.js @@ -0,0 +1,109 @@ +$(function () { + var socket = io.connect("http://localhost:4004"); + socket.on('logs', function (data) { + var date = new Date(data.time * 1000); + var day = "0" + date.getDate(); + var month = "0" + (date.getMonth() + 1); + var year = date.getFullYear(); + var formattedDay = day + "/" + month + "/" + year; + if ($("input[name='currentDay']").val() !== formattedDay) { + window.location.reload(true); + } + renderNewLogs(data); + }); +}); + +function openForm(e, field) { + var html = ``; + $(e).closest("td").html(html); +} + +function _save(e) { + $.ajax({ + url: $("input[name='saveUrl']").val(), + type: 'POST', + data: { + id: $(e).data("id"), + field: $(e).data("field"), + value: $(e).val() + }, + success: function (data) { + $(e).closest("td").html(data); + }, + error: function (jqXHR, textStatus, errorThrown) { + common.modalBlock(false); + common.ajaxError(); + } + }); +} + +function formatTime(unix_timestamp) { + var date = new Date(unix_timestamp * 1000); + var hours = date.getHours(); + var minutes = "0" + date.getMinutes(); + var seconds = "0" + date.getSeconds(); + + var day = "0" + date.getDate(); + var month = "0" + (date.getMonth() + 1); + var year = date.getFullYear(); + + var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2); + var formattedDay = day + "/" + month + "/" + year; + return formattedTime + " " + formattedDay; +} + +function renderNewLogs(data) { + var imageIn = ""; + var timeIn = ""; + var imageOut = ""; + var timeOut = ""; + if (data.type == "in") { + imageIn = ``; + timeIn = formatTime(data.time); + $("#totals-in").html(parseInt($("#totals-in").html()) + 1); + } + if (data.type == "out") { + if (data.logs) { + imageIn = ``; + timeIn = formatTime(data.logs.time_in); + } else { + imageIn = ""; + timeIn = ""; + } + imageOut = ``; + timeOut = formatTime(data.time); + $("#totals-out").html(parseInt($("#totals-out").html()) + 1); + } + var driver = data.vehicleInfo.driver.split("/"); + var telephone = data.vehicleInfo.telephone.split("/"); + var cmt = data.vehicleInfo.indentity_card.split("/"); + var html = ` + ` + data.vehicleInfo.plate + ` + ` + data.vehicleInfo.type + ` + ` + data.vehicleInfo.company + ` + ` + driver.join("
") + ` + ` + telephone.join("
") + ` + ` + cmt.join("
") + ` + +
+ không có +
+ + +
+ không có +
+ + ` + imageIn + ` + ` + timeIn + ` + ` + imageOut + ` + ` + timeOut + ` + +
+ không có +
+ + `; + $("#logs-" + data.id).remove(); + $("#logs-lists").prepend(html); +} \ No newline at end of file diff --git a/web/js/logs.js b/web/js/logs.js index bdb7010e..64779b11 100644 --- a/web/js/logs.js +++ b/web/js/logs.js @@ -1,8 +1,56 @@ $(function () { common.dateTimePicker("from"); common.dateTimePicker("to"); + $('[data-toggle="popover-hover"]').popover({ + html: true, + trigger: 'hover', + placement: 'left', + container: 'body', + content: function () { + return ''; + } + }); +// setTimeout(function () { +// window.location.reload(true); +// }, 30000); }); +function resizeImage(e) { + var size = $(e).attr("data-size"); + if (size === "min") { + $(e).attr("style", "width:200px;cursor:pointer;"); + $(e).attr("data-size", "max"); + } + if (size === "max") { + $(e).attr("style", "width:100px;cursor:pointer;"); + $(e).attr("data-size", "min"); + } +} + +function openForm(e, field) { + var html = ``; + $(e).closest("td").html(html); +} + +function _save(e) { + $.ajax({ + url: $("input[name='saveUrl']").val(), + type: 'POST', + data: { + id: $(e).data("id"), + field: $(e).data("field"), + value: $(e).val() + }, + success: function (data) { + $(e).closest("td").html(data); + }, + error: function (jqXHR, textStatus, errorThrown) { + common.modalBlock(false); + common.ajaxError(); + } + }); +} + function search(e) { window.location = $(e).attr("data-href") + "?from=" + $("input[name='FromTime']").val() + "&to=" + $("input[name='ToTime']").val(); }