Commit cdff04b0 authored by ='s avatar =

hieu v1

parent 70c05cbb
......@@ -45,16 +45,16 @@ public class ReportProjectBussiness {
}
//======================================================================================================================
public List<TimeSheet> findAllTimesheetStatusTrue(ReportDTO reportDTO){
public List<TimeSheet> findAllTimeSheetStatusTrue(int projectId, String currentDate){
List<TimeSheet> timeSheetList = timeSheetRepository.findAllTimesheetStatusTrue(reportDTO.getProjectId(), reportDTO.getCurrentDate());
return timeSheetList;
List<TimeSheet> timeSheetList = timeSheetRepository.findAllTimeSheetStatusTrue(projectId, currentDate);
return timeSheetList;
}
public String updateTimesheetStatus(ReportDTO reportDTO){
public String updateTimeSheetStatus(int projectId, String currentDate){
String mess;
try {
List<Eproject> eprojectList = eProjectRepository.listEprojectLack(reportDTO.getProjectId(), reportDTO.getCurrentDate());
List<Eproject> eprojectList = eProjectRepository.listEprojectLack(projectId, currentDate);
List<Integer> list = new ArrayList<>();
for (Eproject eproject: eprojectList) {
list.add(eproject.getId());
......@@ -69,11 +69,15 @@ public class ReportProjectBussiness {
return mess;
}
public List<Employee> listLackOfReport(int projectId, String currentDate){
List<Employee> employeeList = employeeRepository.listLackOfReport(projectId, currentDate);
return employeeList;
}
public String updateTimesheetChecked(TimesheetRequestDTO timesheetRequestDTO){
public String updateTimeSheetChecked(int timeSheetId, String check){
String mess;
try {
timeSheetRepository.updateTimesheetChecked(timesheetRequestDTO.getChecked(),timesheetRequestDTO.getId());
timeSheetRepository.updateTimeSheetChecked(check, timeSheetId);
mess = "OK !";
}catch (Exception e){
mess = e.getMessage();
......@@ -85,24 +89,18 @@ public class ReportProjectBussiness {
public List<ProjectReport> allProjectReport(ReportDTO reportDTO){
public List<ProjectReport> allProjectReport(int projectId){
List<ProjectReport> projectReportList = projectReportRepository.allProjectReport(reportDTO.getProjectId());
if (projectReportList.isEmpty()){
return null;
}else
List<ProjectReport> projectReportList = projectReportRepository.allProjectReport(projectId);
return projectReportList;
}
public ProjectReport latestReport(ReportDTO reportDTO){
public ProjectReport latestReport(int projectId){
return projectReportRepository.latestReport(reportDTO.getProjectId());
return projectReportRepository.latestReport(projectId);
}
public List<Employee> listLackOfReport(ReportDTO reportDTO){
List<Employee> employeeList = employeeRepository.listLackOfReport(reportDTO.getProjectId(), reportDTO.getCurrentDate());
return employeeList;
}
public String insertProjectReport(ReportDTO reportDTO){
String mess;
......@@ -131,18 +129,18 @@ public class ReportProjectBussiness {
//======================================================================================================================
public List<Employee> listEmployeeLack(ReportDTO reportDTO) {
List<Employee> employeeList = employeeRepository.listEmployeeLackOfReport(reportDTO.getFirstPoint(), reportDTO.getFinalPoint(), reportDTO.getProjectId());
public List<Employee> listEmployeeLack(String firstDate, String finalDate, int projectId) {
List<Employee> employeeList = employeeRepository.listEmployeeLackOfReport(firstDate, finalDate, projectId);
return employeeList;
}
public int numberLack(ReportDTO reportDTO){
return employeeRepository.numberLack(reportDTO.getFirstPoint(), reportDTO.getFinalPoint(), reportDTO.getProjectId(), reportDTO.getEmployeeId());
public int numberLack(String firstDate, String finalDate, int projectId, int employeeId){
return employeeRepository.numberLack(firstDate, finalDate, projectId, employeeId);
}
public List<TimeSheet> listDateOfLack(ReportDTO reportDTO) {
List<TimeSheet> timeSheetList = timeSheetRepository.listDateOfLack(reportDTO.getFirstPoint(), reportDTO.getFinalPoint(), reportDTO.getProjectId(), reportDTO.getEmployeeId());
public List<TimeSheet> listDateOfLack(String firstDate, String finalDate, int projectId, int employeeId) {
List<TimeSheet> timeSheetList = timeSheetRepository.listDateOfLack(firstDate,finalDate,projectId, employeeId);
return timeSheetList;
}
......
......@@ -9,6 +9,7 @@ import com.itsol.quantrivanphong.model.Project;
import com.itsol.quantrivanphong.model.ProjectReport;
import com.itsol.quantrivanphong.model.TimeSheet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
......@@ -20,47 +21,56 @@ public class ReportProjectController {
@Autowired
private ReportProjectBussiness reportProjectBussiness;
//======================================================================================================================
//======================================================================================================================
//Danh sách các dự án đang trong thời gian triển khai
@GetMapping(path = "/project/all")
@GetMapping(path = "/project")
public ResponseEntity<List<Project>> listProjectWorking(){
List<Project> projectList = reportProjectBussiness.listProjectWorking();
if (projectList==null){
return (ResponseEntity<List<Project>>) ResponseEntity.status(HttpStatus.NOT_FOUND);
}
return ResponseEntity.ok(projectList);
}
//======================================================================================================================
//======================================================================================================================
//Hiển thị danh sách timesheet của các thành viên đã viết báo cáo trong ngày hôm đó
@GetMapping(path = "/project/timesheet",consumes = "application/json", produces = "application/json")
public ResponseEntity<List<TimeSheet>> findAllTimesheetStatusTrue(@RequestBody ReportDTO reportDTO){
List<TimeSheet> timeSheetList = reportProjectBussiness.findAllTimesheetStatusTrue(reportDTO);
@GetMapping(path = "/project/{projectId}/timeSheet/{currentDate}")
public ResponseEntity<List<TimeSheet>> findAllTimeSheetStatusTrue(@PathVariable("projectId") int projectId, @PathVariable("currentDate") String currentDate){
List<TimeSheet> timeSheetList = reportProjectBussiness.findAllTimeSheetStatusTrue(projectId, currentDate);
if(timeSheetList == null){
return (ResponseEntity<List<TimeSheet>>) ResponseEntity.status(HttpStatus.NOT_FOUND);
}
return ResponseEntity.ok(timeSheetList);
}
//Nút "kiểm tra" : Lọc các thành viên chưa viết báo cáo và tự khởi tạo timesheet với trạng thái thái = false
@GetMapping(path = "/project/updateLack", consumes = "application/json", produces = "application/json")
public ResponseEntity<String> updateTimesheetStatus(@RequestBody ReportDTO reportDTO){
String mess = reportProjectBussiness.updateTimesheetStatus(reportDTO);
@PostMapping(path = "/project/{projectId}/update/{currentDate}")
public ResponseEntity<String> updateTimeSheetStatus(@PathVariable("projectId") int projectId, @PathVariable("currentDate") String currentDate){
String mess = reportProjectBussiness.updateTimeSheetStatus(projectId, currentDate);
return ResponseEntity.ok(mess);
}
//Quản trị viên duyệt và đánh dấu (đã duyệt, từ chối) mặc định là chưa duyệt (update bảng timesheet theo id)
@PostMapping(path = "/project/check", consumes = "application/json", produces = "application/json")
public ResponseEntity<String> updateTimesheetChecked(@RequestBody TimesheetRequestDTO timesheetRequestDTO){
String mess = reportProjectBussiness.updateTimesheetChecked(timesheetRequestDTO);
@PostMapping(path = "/project/timeSheet/update/{timeSheetId}")
public ResponseEntity<String> updateTimeSheetChecked(@RequestBody String check, @PathVariable("timeSheetId") int timeSheetId){
String mess = reportProjectBussiness.updateTimeSheetChecked(timeSheetId, check);
return ResponseEntity.ok(mess);
}
//Danh sách thành viên trong Dự án thiếu báo cáo ngày hôm đó
@GetMapping(path = "/project/alllack",consumes = "application/json", produces = "application/json")
public ResponseEntity<List<Employee>> listLackOfReport(@RequestBody ReportDTO reportDTO){
List<Employee> employeeList = reportProjectBussiness.listLackOfReport(reportDTO);
@GetMapping(path = "/project/{projectId}/allLack/{currentDate}")
public ResponseEntity<List<Employee>> listLackOfReport(@PathVariable("projectId") int projectId, @PathVariable("currentDate") String currentDate){
List<Employee> employeeList = reportProjectBussiness.listLackOfReport(projectId, currentDate);
if(employeeList==null){
return (ResponseEntity<List<Employee>>) ResponseEntity.status(HttpStatus.NOT_FOUND);
}
return ResponseEntity.ok(employeeList);
}
......@@ -69,7 +79,7 @@ public class ReportProjectController {
//Tạo một báo cáo mới
@PostMapping(path = "/project/newReport", consumes = "application/json", produces = "application/json")
@PostMapping(path = "/project/newReport")
public ResponseEntity<String> insertProjectReport(@RequestBody ReportDTO reportDTO ){
String mess = reportProjectBussiness.insertProjectReport(reportDTO);
return ResponseEntity.ok(mess);
......@@ -77,16 +87,19 @@ public class ReportProjectController {
//Báo cáo gần nhất của dự án
@GetMapping(path = "/project/latest",consumes = "application/json", produces = "application/json")
public ResponseEntity<ProjectReport> latestReport(@RequestBody ReportDTO reportDTO){
ProjectReport projectReport = reportProjectBussiness.latestReport(reportDTO);
@GetMapping(path = "/project/{projectId}/latest")
public ResponseEntity<ProjectReport> latestReport(@PathVariable("projectId") int projectId){
ProjectReport projectReport = reportProjectBussiness.latestReport(projectId);
return ResponseEntity.ok(projectReport);
}
// Tất cả các báo cáo của dự án
@GetMapping(path = "/project/allReport",consumes = "application/json", produces = "application/json")
public ResponseEntity<List<ProjectReport>> allProjectReport(@RequestBody ReportDTO reportDTO){
List<ProjectReport> projectReportList = reportProjectBussiness.allProjectReport(reportDTO);
@GetMapping(path = "/project/{projectId}/allReport")
public ResponseEntity<List<ProjectReport>> allProjectReport(@PathVariable("projectId") int projectId){
List<ProjectReport> projectReportList = reportProjectBussiness.allProjectReport(projectId);
if (projectReportList==null){
return (ResponseEntity<List<ProjectReport>>) ResponseEntity.status(HttpStatus.NOT_FOUND);
}
return ResponseEntity.ok(projectReportList);
}
......@@ -95,18 +108,22 @@ public class ReportProjectController {
// Danh sách thành viên không viết timesheet
@GetMapping(path = "/project/allEmployee",consumes = "application/json", produces = "application/json")
public ResponseEntity<List<Employee>> listEmployeeLack(@RequestBody ReportDTO reportDTO){
List<Employee> employeeList = reportProjectBussiness.listEmployeeLack(reportDTO);
@GetMapping(path = "/project/{projectId}/employee/{firstDate}/{finalDate}")
public ResponseEntity<List<Employee>> listEmployeeLack(@PathVariable("projectId") int projectId, @PathVariable("firstDate") String firstDate, @PathVariable("finalDate") String finalDate){
List<Employee> employeeList = reportProjectBussiness.listEmployeeLack(firstDate, finalDate, projectId);
if (employeeList==null){
return (ResponseEntity<List<Employee>>) ResponseEntity.status(HttpStatus.NOT_FOUND);
}
return ResponseEntity.ok(employeeList);
}
// Chi tiết tiếu timesheet của mỗi thành viên
@GetMapping(path = "/project/allEmployee/id",consumes = "application/json", produces = "application/json")
public ResponseEntity<ReportResponseDTO> listEmployeeLackDetail(@RequestBody ReportDTO reportDTO){
// Chi tiết thiếu timesheet của mỗi thành viên
@GetMapping(path = "/project/{projectId}/employee/{employeeId}/{firstDate}/{finalDate}")
public ResponseEntity<ReportResponseDTO> listEmployeeLackDetail(@PathVariable("projectId") int projectId,@PathVariable("employeeId") int employeeId, @PathVariable("firstDate") String firstDate, @PathVariable("finalDate") String finalDate){
ReportResponseDTO reportResponseDTO = new ReportResponseDTO();
reportResponseDTO.setTimeSheetList(reportProjectBussiness.listDateOfLack(reportDTO));
reportResponseDTO.setNumberOflack(reportProjectBussiness.numberLack(reportDTO));
reportResponseDTO.setTimeSheetList(reportProjectBussiness.listDateOfLack(firstDate, finalDate, projectId, employeeId));
reportResponseDTO.setNumberOflack(reportProjectBussiness.numberLack(firstDate, finalDate, projectId, employeeId));
return ResponseEntity.ok(reportResponseDTO);
}
......
......@@ -14,6 +14,7 @@ public interface ProjectReportRepository extends JpaRepository<ProjectReport, In
@Query(value = "SELECT * FROM project_report pr WHERE pr.project_id = ?1 ORDER BY pr.created_at DESC limit 1", nativeQuery = true)
ProjectReport latestReport(int projectId);
@Query(value = "SELECT * FROM project_report pr WHERE pr.project_id = ?1 ORDER BY pr.created_at DESC", nativeQuery = true)
List<ProjectReport> allProjectReport(int projectId);
......
......@@ -33,7 +33,7 @@ public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> {
//Timesheet Of Hieunv
@Query(value = "SELECT * FROM timesheet ts JOIN eproject ep ON ep.id = ts.eproject_id WHERE ep.project_id = ?1 AND ts.status = true and ts.created_at like ?2%", nativeQuery = true)
List<TimeSheet> findAllTimesheetStatusTrue(int projectId, String currentDate);
List<TimeSheet> findAllTimeSheetStatusTrue(int projectId, String currentDate);
@Transactional
......@@ -44,7 +44,7 @@ public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> {
@Transactional
@Modifying
@Query(value = "update TimeSheet ts set ts.checked = ?1 where ts.id = ?2", nativeQuery = true)
void updateTimesheetChecked(String checked, int id);
void updateTimeSheetChecked(String checked, int id);
@Query(value = "SELECT Count(DISTINCT ts.eproject_id) FROM timesheet ts JOIN eproject ep ON ep.id = ts.eproject_id WHERE ts.status = false AND ep.project_id = ?1 AND created_at >= ?2 AND created_at <= ?3",nativeQuery = true)
int numberEmployeeLack(int ProjectId, String firstDate, String finalDate);
......
server.port=8080
server.port=8081
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/qtvp_01
spring.datasource.url=jdbc:mysql://localhost:3306/quantrivanphong
spring.datasource.username=root
spring.datasource.password=12345678
spring.datasource.password=
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
......@@ -18,7 +18,7 @@ spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=hieunv2496@gmail.com
spring.mail.password=anhieu1996
>>>>>>> master
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.auth=true
......
......@@ -20,20 +20,20 @@
<script src="js/angular.js"></script>
<script src="js/angular-ui-router.min.js"></script>
<script src="js/app.js"></script>
<script src="pages/employee/employeeController.js"></script>
<script src="pages/project/projectController.js"></script>
<script src="pages/report/reportController.js"></script>
<script src="pages/testlayout/testlayoutController.js"></script>
</head>
<body ng-app="myApp">
<div ui-view="layout">
</div>
<div ui-view="layout"></div>
<script src="js/app.js"></script>
<script src="pages/employee/employeeController.js"></script>
<script src="pages/project/projectController.js"></script>
<script src="pages/report/reportController.js"></script>
<script src="pages/report/timeSheetReportController.js"></script>
</body>
</html>
\ No newline at end of file
......@@ -57,7 +57,7 @@ angular.module("myApp", ["ui.router"]).config(function ($stateProvider, $urlRout
}
})
.state("report", {
parent: 'layout1',
parent: 'layout3',
url: "/report",
views: {
"content": {
......@@ -67,15 +67,16 @@ angular.module("myApp", ["ui.router"]).config(function ($stateProvider, $urlRout
}
})
.state("testlayout2", {
parent: 'layout2',
url: "/testttt",
.state("timeSheet", {
parent: 'layout3',
url: "/timeSheet",
views: {
"content": {
templateUrl: "pages/testlayout/testlayout.html",
controller: "testlayoutController"
templateUrl: "pages/report/detailReport.html",
controller: "timeSheetReportController"
}
}
})
});
<!-- header -->
<nav class="navbar navbar-expand navbar-dark bg-dark static-top">
<body>
<a class="navbar-brand mr-1" href="index.html">Trang Quản Trị</a>
<!-- Navbar Search -->
<form class="d-none d-md-inline-block form-inline ml-auto mr-0 mr-md-3 my-2 my-md-0">
</form>
<!-- Navbar -->
<ul class="navbar-nav ml-auto ml-md-0">
<li class="nav-item dropdown no-arrow">
<a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<i class="fas fa-user-circle fa-fw"></i>Admin
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="userDropdown">
<a class="dropdown-item" href="#">Profile</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal">Logout</a>
</div>
</li>
</ul>
</nav>
<!--end header -->
<div id="wrapper">
<!-- menu -->
<!-- Sidebar -->
<ul class="sidebar navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="pagesDropdown" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<i class="fas fa-fw fa-folder"></i>
<span>Quản Trị Văn Phòng</span>
</a>
<div class="dropdown-menu" aria-labelledby="pagesDropdown">
<h6 class="dropdown-header">Quản Trị</h6>
<a class="dropdown-item" ui-sref="project">Dự Án</a>
<a class="dropdown-item" ui-sref="employees">Nhân Viên</a>
<a class="dropdown-item" href="#">Báo Cáo</a>
<a class="dropdown-item" href="#">Tin Tức</a>
<div class="dropdown-divider"></div>
<h6 class="dropdown-header">Báo Cáo</h6>
<a class="dropdown-item" href="#">Xin Phép</a>
<a class="dropdown-item" href="#">Time Sheet</a>
<a class="dropdown-item" href="#">Quản lý Issuses</a>
</div>
</li>
</ul>
<!-- end menu -->
<div class="container-fluid">
<!-- Content -->
<div ui-view="content">
</div>
<!-- footer -->
</div>
</div>
<!-- Footer -->
<footer class="py-5 bg-dark">
<div class="container">
<p class="m-0 text-center text-white">ps: Mock 1</p>
<div>
<div ui-view="content"></div>
</div>
<!-- /.container -->
</footer>
<!--end footer -->
\ No newline at end of file
</body>
<div ng-repeat="a in timeSheets">
{{a.id}}
</div>
\ No newline at end of file
<div class="container">
<div class="row">
<div class="col-md-8">
<div class="col-md-10">
<div>
<legend>Report List</legend>
<legend>Báo Cáo</legend>
</div>
<div>
<table class="table">
<thead>
<tr>
<tr>
<td colspan="12">Danh Sách Dự án (Đang được triển khai)</td>
</tr>
<th>ID</th>
<th>Tên dự án</th>
<th>Mô tả</th>
<th>Thời gian bắt đầu</th>
<th>Thời gian kết thúc</th>
<th>Trạng thái</th>
<th colspan="2">Menu</th>
</tr>
</thead>
<tbody>
<tr class="vide" data-ng-repeat="pro in projects">
<td>{{$index + 1}}</td>
<td>{{pro.name}}</td>
<td>{{pro.descriptions}}</td>
<td>{{pro.startDate}}</td>
<td>{{pro.endDate}}</td>
<td>{{pro.status}}</td>
<td><a ui-sref="timeSheet" ng-click="timeSheetList(pro);">Detail</a>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
......
angular.module('myApp').controller('reportController' , function ($scope , $http) {
$http({
method: 'GET',
url:"http://localhost:8081/admin/report/project/all"
}).then(function successCallback(response) {
console.log(response);
$scope.request = {
"currentDate": ""
};
$http({
method: 'GET',
url:"http://localhost:8081/admin/report/project"
}).then(function successCallback(response) {
console.log(response);
$scope.projects = response.data;
}, function errorCallback(response) {
console.log(response)
});
$scope.timeSheetList = function(pro) {
var date = new Date();
$scope.request.currentDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2);
$http({
method: 'GET',
url: "http://localhost:8081/admin/report/project/"+pro.id+"/timeSheet/"+$scope.request.currentDate
}).then(function successCallback(response) {
console.log(response);
$scope.sheets= response.data;
console.log($scope.sheets);
}, function errorCallback(response) {
console.log(response)
});
}
$scope.employess=response.data;
}, function errorCallback(response) {
console.log(response)
});
});
\ No newline at end of file
angular.module('myApp').controller('timeSheetReportController' , function ($scope , $http) {
$scope.request = {
"currentDate": ""
};
$scope.timeSheetList = function(pro) {
var date = new Date();
$scope.request.currentDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2);
$http({
method: 'GET',
url: "http://localhost:8081/admin/report/project/"+pro.id+"/timeSheet/"+$scope.request.currentDate
}).then(function successCallback(response) {
console.log(response);
$scope.timeSheets= response.data;
console.log($scope.timeSheets);
}, function errorCallback(response) {
console.log(response)
});
}
});
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment