Commit 990c83e5 authored by ='s avatar =

Hieu va

parent d87c8887
...@@ -28,12 +28,15 @@ public interface EmployeeRepository extends JpaRepository<Employee,Integer > { ...@@ -28,12 +28,15 @@ public interface EmployeeRepository extends JpaRepository<Employee,Integer > {
@Query(value = "SELECT COUNT(e.id)FROM employee e JOIN eproject ep ON e.id = ep.employee_id JOIN project p ON ep.project_id = p.id WHERE p.id = ?1 AND ep.position = 'member'", nativeQuery = true) @Query(value = "SELECT COUNT(e.id)FROM employee e JOIN eproject ep ON e.id = ep.employee_id JOIN project p ON ep.project_id = p.id WHERE p.id = ?1 AND ep.position = 'member'", nativeQuery = true)
int numberOfMember(int projectId); int numberOfMember(int projectId);
@Query(value = "SELECT e.username FROM employee e JOIN eproject ep ON e.id = ep.employee_id JOIN project p ON ep.project_id = p.id WHERE p.id = ?1 AND ep.position = 'team_lead' GROUP BY e.id",nativeQuery = true)
List<Employee> listEmployeeLackOfReport(int projectId);
@Query(value = "SELECT * FROM employee e JOIN eproject ep ON e.id = ep.employee_id JOIN project p on p.id = ep.project_id JOIN timesheet ts ON ep.id = ts.eproject_id WHERE p.id = ?1 AND ts.status = false AND ts.created_at Like ?2%", nativeQuery = true) @Query(value = "SELECT * FROM employee e JOIN eproject ep ON e.id = ep.employee_id JOIN project p on p.id = ep.project_id JOIN timesheet ts ON ep.id = ts.eproject_id WHERE p.id = ?1 AND ts.status = false AND ts.created_at Like ?2%", nativeQuery = true)
List<Employee> listLackOfReport(int projectId, String createDate); List<Employee> listLackOfReport(int projectId, String createDate);
@Query(value = "SELECT * FROM employee e JOIN eproject ep on e.id = ep.employee_id JOIN timesheet ts on ep.id = ts.eproject_id WHERE ts.status = false AND created_at >= ?1 AND created_at <= ?2 AND ep.project_id = ?3 GROUP BY e.id", nativeQuery = true)
List<Employee> listEmployeeLackOfReport(String firstDate, String finalDate, int projectId);
@Query(value = "SELECT COUNT(ts.id) FROM timesheet ts JOIN eproject ep ON ep.id = ts.eproject_id JOIN employee e ON e.id = ep.employee_id WHERE ts.status = false AND created_at >= ?1 AND created_at <= ?2 AND ep.project_id = ?3 AND e.id = ?4", nativeQuery = true)
int numberLack(String firstDate, String finalDate, int projectId, int employeeId);
//================================================================================================================== //==================================================================================================================
//Emplyee Repository Of PhiCho //Emplyee Repository Of PhiCho
......
...@@ -104,14 +104,49 @@ public class ReportProjectBussiness { ...@@ -104,14 +104,49 @@ public class ReportProjectBussiness {
return employeeList; return employeeList;
} }
// public String insertProjectReport(ReportDTO reportDTO){ public String insertProjectReport(ReportDTO reportDTO){
// ProjectReport projectReport = new ProjectReport(); String mess;
// projectReport.setProjectName(projectRepository.ProjectName(reportDTO.getProjectId())); try {
// projectReport.setTeamLeader(employeeRepository.findTeamLeader(reportDTO.getProjectId()));
// projectReport.setNumberOfMember(employeeRepository.numberOfMember(reportDTO.getProjectId())); ProjectReport projectReport = new ProjectReport();
// projectReport.setCalendarEffort(10); projectReport.setProjectName(projectRepository.ProjectName(reportDTO.getProjectId()));
// projectReport.set projectReport.setTeamLeader(employeeRepository.findTeamLeader(reportDTO.getProjectId()));
// } projectReport.setNumberOfMember(employeeRepository.numberOfMember(reportDTO.getProjectId()));
// projectReport.setCalendarEffort(10);
projectReport.setLackOfReport(timeSheetRepository.numberEmployeeLack(reportDTO.getProjectId(), reportDTO.getFirstPoint(), reportDTO.getFinalPoint()));
projectReport.setFirstDate(reportDTO.getFirstPoint());
projectReport.setFinalDate(reportDTO.getFinalPoint());
projectReport.setStatus(reportDTO.isStatus());
projectReportRepository.insertProjectReport(projectReport.getProjectName(),projectReport.getTeamLeader(), projectReport.getNumberOfMember(), projectReport.getCalendarEffort(), projectReport.getLackOfReport(), projectReport.isStatus(),reportDTO.getProjectId(), projectReport.getFirstDate(), projectReport.getFinalDate());
mess = "Ok !";
}catch (Exception e){
mess = e.getMessage();
}
return mess;
}
//======================================================================================================================
public List<Employee> listEmployeeLack(ReportDTO reportDTO) {
List<Employee> employeeList = employeeRepository.listEmployeeLackOfReport(reportDTO.getFirstPoint(), reportDTO.getFinalPoint(), reportDTO.getProjectId());
return employeeList;
}
public int numberLack(ReportDTO reportDTO){
return employeeRepository.numberLack(reportDTO.getFirstPoint(), reportDTO.getFinalPoint(), reportDTO.getProjectId(), reportDTO.getEmployeeId());
}
public List<TimeSheet> listDateOfLack(ReportDTO reportDTO) {
List<TimeSheet> timeSheetList = timeSheetRepository.listDateOfLack(reportDTO.getFirstPoint(), reportDTO.getFinalPoint(), reportDTO.getProjectId(), reportDTO.getEmployeeId());
return timeSheetList;
}
//======================================================================================================================
} }
...@@ -3,6 +3,7 @@ package com.itsol.quantrivanphong.manager.reportdetail.controller; ...@@ -3,6 +3,7 @@ package com.itsol.quantrivanphong.manager.reportdetail.controller;
import com.itsol.quantrivanphong.manager.reportdetail.bussiness.ReportProjectBussiness; import com.itsol.quantrivanphong.manager.reportdetail.bussiness.ReportProjectBussiness;
import com.itsol.quantrivanphong.manager.reportdetail.dto.request.ReportDTO; import com.itsol.quantrivanphong.manager.reportdetail.dto.request.ReportDTO;
import com.itsol.quantrivanphong.manager.reportdetail.dto.request.TimesheetRequestDTO; import com.itsol.quantrivanphong.manager.reportdetail.dto.request.TimesheetRequestDTO;
import com.itsol.quantrivanphong.manager.reportdetail.dto.response.ReportResponseDTO;
import com.itsol.quantrivanphong.model.Employee; import com.itsol.quantrivanphong.model.Employee;
import com.itsol.quantrivanphong.model.Project; import com.itsol.quantrivanphong.model.Project;
import com.itsol.quantrivanphong.model.ProjectReport; import com.itsol.quantrivanphong.model.ProjectReport;
...@@ -22,7 +23,7 @@ public class ReportProjectController { ...@@ -22,7 +23,7 @@ public class ReportProjectController {
//====================================================================================================================== //======================================================================================================================
//Danh sách các dự án đang trong thời gian triển khai //Danh sách các dự án đang trong thời gian triển khai
@GetMapping(path = "/project/all",consumes = "application/json", produces = "application/json") @GetMapping(path = "/project/all")
public ResponseEntity<List<Project>> listProjectWorking(){ public ResponseEntity<List<Project>> listProjectWorking(){
List<Project> projectList = reportProjectBussiness.listProjectWorking(); List<Project> projectList = reportProjectBussiness.listProjectWorking();
return ResponseEntity.ok(projectList); return ResponseEntity.ok(projectList);
...@@ -67,15 +68,12 @@ public class ReportProjectController { ...@@ -67,15 +68,12 @@ public class ReportProjectController {
//================================================================================================================= //=================================================================================================================
// //Tạo một báo cáo mới //Tạo một báo cáo mới
// @PostMapping(path = "/project/newReport", consumes = "application/json", produces = "application/json") @PostMapping(path = "/project/newReport", consumes = "application/json", produces = "application/json")
// public ResponseEntity<String> updateTimesheetChecked(@RequestBody TimesheetRequestDTO timesheetRequestDTO){ public ResponseEntity<String> insertProjectReport(@RequestBody ReportDTO reportDTO ){
// String mess = reportProjectBussiness.updateTimesheetChecked(timesheetRequestDTO); String mess = reportProjectBussiness.insertProjectReport(reportDTO);
// return ResponseEntity.ok(mess); return ResponseEntity.ok(mess);
// } }
//Báo cáo gần nhất của dự án //Báo cáo gần nhất của dự án
...@@ -93,4 +91,30 @@ public class ReportProjectController { ...@@ -93,4 +91,30 @@ 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);
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){
ReportResponseDTO reportResponseDTO = new ReportResponseDTO();
reportResponseDTO.setTimeSheetList(reportProjectBussiness.listDateOfLack(reportDTO));
reportResponseDTO.setNumberOflack(reportProjectBussiness.numberLack(reportDTO));
return ResponseEntity.ok(reportResponseDTO);
}
//=================================================================================================================
} }
...@@ -12,6 +12,7 @@ public class ReportDTO { ...@@ -12,6 +12,7 @@ public class ReportDTO {
private String finalPoint; private String finalPoint;
private String currentDate; private String currentDate;
private int projectId; private int projectId;
private int employeeId;
private String position; private String position;
private boolean status; private boolean status;
} }
package com.itsol.quantrivanphong.manager.reportdetail.dto.response; package com.itsol.quantrivanphong.manager.reportdetail.dto.response;
import com.itsol.quantrivanphong.model.Employee; import com.itsol.quantrivanphong.model.TimeSheet;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
...@@ -12,10 +12,8 @@ import java.util.List; ...@@ -12,10 +12,8 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class ReportResponseDTO { public class ReportResponseDTO {
private int projectId; private int numberOflack;
private String projectName; private List<TimeSheet> timeSheetList = new ArrayList<>();
private List<Employee> teamLeadList = new ArrayList<>();
private List<Employee> memberList = new ArrayList<>();
private String firstPoint;
private String finalPoint;
} }
...@@ -19,6 +19,6 @@ public interface ProjectReportRepository extends JpaRepository<ProjectReport, In ...@@ -19,6 +19,6 @@ public interface ProjectReportRepository extends JpaRepository<ProjectReport, In
@Transactional @Transactional
@Modifying @Modifying
@Query(value = "INSERT INTO project_report(project_name, team_leader, number_of_members, calendar_effort, lack_of_reports, created_at, updated_at, status, project_id) VALUES (?1, ?2, ?3, ?4, ?5, CURRENT_DATE(), CURRENT_DATE() ,?6, ?7)",nativeQuery = true) @Query(value = "INSERT INTO project_report(project_name, team_leader, number_of_members, calendar_effort, lack_of_reports, created_at, updated_at, status, project_id, first_date, final_date) VALUES (?1, ?2, ?3, ?4, ?5, CURRENT_DATE(), CURRENT_DATE() ,?6, ?7, ?8, ?9)",nativeQuery = true)
void insertProjectReport(String projectName, String teamLeader, int NumberOfMember, int CalendarEffort, int LackOfReport, boolean status, int projectId); void insertProjectReport(String projectName, String teamLeader, int NumberOfMember, int CalendarEffort, int LackOfReport, boolean status, int projectId, String firstDate, String finalDate);
} }
...@@ -41,6 +41,12 @@ public class ProjectReport extends DateAudit { ...@@ -41,6 +41,12 @@ public class ProjectReport extends DateAudit {
@Column(name = "status") @Column(name = "status")
private boolean status; private boolean status;
@Column(name = "first_date")
private String firstDate;
@Column(name = "final_date")
private String finalDate;
// @JsonIgnore // @JsonIgnore
@ManyToOne(fetch = FetchType.EAGER) @ManyToOne(fetch = FetchType.EAGER)
private Project project; private Project project;
......
...@@ -7,7 +7,6 @@ import org.springframework.data.jpa.repository.Modifying; ...@@ -7,7 +7,6 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query; import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> { public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> {
...@@ -46,4 +45,10 @@ public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> { ...@@ -46,4 +45,10 @@ public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> {
@Modifying @Modifying
@Query(value = "update TimeSheet ts set ts.checked = ?1 where ts.id = ?2", nativeQuery = true) @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);
@Query(value = "SELECT * FROM timesheet ts JOIN eproject ep ON ep.id = ts.eproject_id JOIN employee e ON e.id = ep.employee_id WHERE ts.status = false AND created_at >= ?1 AND created_at <= ?2 AND ep.project_id = ?3 AND e.id = ?4", nativeQuery = true)
List<TimeSheet> listDateOfLack(String firstDate, String finalDate, int projectId, int employeeId);
} }
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
<script src="js/app.js"></script> <script src="js/app.js"></script>
<script src="pages/employee/employeeController.js"></script> <script src="pages/employee/employeeController.js"></script>
<script src="pages/project/projectController.js"></script> <script src="pages/project/projectController.js"></script>
<script src="pages/report/reportController.js"></script>
<script src="pages/testlayout/testlayoutController.js"></script> <script src="pages/testlayout/testlayoutController.js"></script>
......
...@@ -61,8 +61,8 @@ angular.module("myApp", ["ui.router"]).config(function ($stateProvider, $urlRout ...@@ -61,8 +61,8 @@ angular.module("myApp", ["ui.router"]).config(function ($stateProvider, $urlRout
url: "/report", url: "/report",
views: { views: {
"content": { "content": {
templateUrl: "pages/employee/project.html", templateUrl: "pages/report/report.html",
controller: "employeeController" controller: "reportController"
} }
} }
}) })
......
/** /**
* *
*/ */
angular.module("myApp").controller("employeeController", function($scope, $http,$window) { angular.module("myApp").controller("employeeController", function($scope, $http) {
console.log("Employee controller"); console.log("Employee controller");
$scope.emp= { $scope.emp= {
...@@ -14,7 +14,7 @@ angular.module("myApp").controller("employeeController", function($scope, $http, ...@@ -14,7 +14,7 @@ angular.module("myApp").controller("employeeController", function($scope, $http,
"homeTown": "", "homeTown": "",
"education": "", "education": "",
"department": "", "department": "",
"position" : "", "position" : ""
}; };
......
<!--<div class="container">--> <div class="container">
<!-- <div class="row">--> <div class="row">
<!-- <div class="col-md-8">--> <div class="col-md-8">
<!-- <div>--> <div>
<!-- <legend>Employee Details</legend>--> <legend>Report List</legend>
<!-- <table>-->
<!-- <tr>-->
<!-- <td><label>User Name</label></td>-->
<!-- <td>-->
<!-- <input type="text" maxlength="29" ng-model="emp.username"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td><label>First Name</label></td>-->
<!-- <td>-->
<!-- <input type="text" maxlength="29" ng-model="emp.firstName"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td><label>Last Name</label></td>-->
<!-- <td>-->
<!-- <input type="text" maxlength="29" ng-model="emp.lastName"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td><label id="email" for="email">Email</label> </td>-->
<!-- <td>-->
<!-- <input type="email" maxlength="150" ng-model="emp.emailAddress"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td><label>Phone</label></td>-->
<!-- <td>-->
<!-- <input type="text" maxlength="10" value="" ng-model="emp.phoneNumber"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- <tr>--> </div>
<!-- <td><label>education:</label></td>-->
<!-- <td>-->
<!-- <input ng-model="emp.education"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td><label >home town:</label></td>-->
<!-- <td> <input type="text" ng-model="emp.homeTown"/></td>-->
<!-- </tr>-->
<!-- <tr>-->
<!-- <td></td>-->
<!-- <td>-->
<!-- <input type="submit" name="submit" value="submit" ng-click="save();"/>-->
<!-- <input type="submit" name="clear" value="clear" ng-click=" emp = null"/>-->
<!-- </td>-->
<!-- </tr>-->
<!-- </table>-->
<!-- </div>-->
<!-- <div>-->
<!-- <table class="table">--> </div>
<!-- <thead>--> </div>
<!-- <tr>--> </div>
<!-- <th>ID</th>-->
<!-- <th>User Name</th>-->
<!-- <th>First Name</th>-->
<!-- <th>Last Name</th>-->
<!-- <th>EmailAddress</th>-->
<!-- <th>Phone</th>-->
<!-- <th>Education</th>-->
<!-- <th>Home Town</th>-->
<!-- </tr>-->
<!-- </thead>-->
<!-- <tbody>-->
<!-- <tr class="vide" ng-repeat="emp in employess">-->
<!-- <td>{{$index + 1}}</td>-->
<!-- <td>{{emp.username}}</td>-->
<!-- <td>{{emp.firstName}}</td>-->
<!-- <td>{{emp.lastName}}</td>-->
<!-- <td>{{emp.emailAddress}}</td>-->
<!-- <td>{{emp.phoneNumber}}</td>-->
<!-- <td>{{emp.education}}</td>-->
<!-- <td>{{emp.homeTown}}</td>-->
<!-- <td><a href="#" ng-click="update(emp);">Update</a>-->
<!-- <td><a href="#" confirmed-click="delete(employee);" ng-confirm-click=" Do you want to delete this user?">Delete</a></td>-->
<!-- </tr>-->
<!-- </tbody>-->
<!-- </table>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!--</div>-->
// /** angular.module('myApp').controller('reportController' , function ($scope , $http) {
// * $http({
// */ method: 'GET',
// angular.module("myApp").controller("employeeController", function($scope, $http,$window) { url:"http://localhost:8081/admin/report/project/all"
// console.log("Employee controller");
// }).then(function successCallback(response) {
// $scope.emp= { console.log(response);
// "username": "",
// "password": "", $scope.employess=response.data;
// "firstName": "", }, function errorCallback(response) {
// "lastName": "", console.log(response)
// "emailAddress": "", });
// "phoneNumber": "", });
// "homeTown": "", \ No newline at end of file
// "education": ""
// };
//
//
//
// $scope.save = save;
//
// function save(){
// console.log($scope.emp);
// $http({
// method : 'POST',
// url : "http://localhost:8080/list_employee/",
// data: $scope.emp
// }).then(function successCallback(response) {
// console.log(response);
// $window.location.href ='http://localhost:8080/#/tintuc';
// }, function errorCallback(response) {
// console.log(response)
// });
// }
// $scope.update = update;
// function update(employee){
// $scope.employee = employee;
// list_employee();
// }
// $scope.deleteEmployee = function (employee) {
// $http({
// method : 'DELETE',
// url : 'http://localhost:8080/employee/' + employee.id
// }).then(_success, _error);
// }
//
//
// $http({
// method : 'GET',
// url : "http://localhost:8080/list_employee/",
// }).then(function successCallback(response) {
// console.log(response)
// $scope.employess=response.data;
// }, function errorCallback(response) {
// console.log(response)
// });
// });
\ No newline at end of file
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