Commit 990c83e5 authored by ='s avatar =

Hieu va

parent d87c8887
......@@ -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)
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)
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
......
......@@ -104,14 +104,49 @@ public class ReportProjectBussiness {
return employeeList;
}
// public String insertProjectReport(ReportDTO reportDTO){
// ProjectReport projectReport = new ProjectReport();
// projectReport.setProjectName(projectRepository.ProjectName(reportDTO.getProjectId()));
// projectReport.setTeamLeader(employeeRepository.findTeamLeader(reportDTO.getProjectId()));
// projectReport.setNumberOfMember(employeeRepository.numberOfMember(reportDTO.getProjectId()));
// projectReport.setCalendarEffort(10);
// projectReport.set
// }
//
public String insertProjectReport(ReportDTO reportDTO){
String mess;
try {
ProjectReport projectReport = new ProjectReport();
projectReport.setProjectName(projectRepository.ProjectName(reportDTO.getProjectId()));
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;
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.TimesheetRequestDTO;
import com.itsol.quantrivanphong.manager.reportdetail.dto.response.ReportResponseDTO;
import com.itsol.quantrivanphong.model.Employee;
import com.itsol.quantrivanphong.model.Project;
import com.itsol.quantrivanphong.model.ProjectReport;
......@@ -22,7 +23,7 @@ public class ReportProjectController {
//======================================================================================================================
//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(){
List<Project> projectList = reportProjectBussiness.listProjectWorking();
return ResponseEntity.ok(projectList);
......@@ -67,15 +68,12 @@ public class ReportProjectController {
//=================================================================================================================
// //Tạo một báo cáo mới
// @PostMapping(path = "/project/newReport", consumes = "application/json", produces = "application/json")
// public ResponseEntity<String> updateTimesheetChecked(@RequestBody TimesheetRequestDTO timesheetRequestDTO){
// String mess = reportProjectBussiness.updateTimesheetChecked(timesheetRequestDTO);
// return ResponseEntity.ok(mess);
// }
//Tạo một báo cáo mới
@PostMapping(path = "/project/newReport", consumes = "application/json", produces = "application/json")
public ResponseEntity<String> insertProjectReport(@RequestBody ReportDTO reportDTO ){
String mess = reportProjectBussiness.insertProjectReport(reportDTO);
return ResponseEntity.ok(mess);
}
//Báo cáo gần nhất của dự án
......@@ -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 {
private String finalPoint;
private String currentDate;
private int projectId;
private int employeeId;
private String position;
private boolean status;
}
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.Data;
import lombok.NoArgsConstructor;
......@@ -12,10 +12,8 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
public class ReportResponseDTO {
private int projectId;
private String projectName;
private List<Employee> teamLeadList = new ArrayList<>();
private List<Employee> memberList = new ArrayList<>();
private String firstPoint;
private String finalPoint;
private int numberOflack;
private List<TimeSheet> timeSheetList = new ArrayList<>();
}
......@@ -19,6 +19,6 @@ public interface ProjectReportRepository extends JpaRepository<ProjectReport, In
@Transactional
@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)
void insertProjectReport(String projectName, String teamLeader, int NumberOfMember, int CalendarEffort, int LackOfReport, boolean status, int projectId);
@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, String firstDate, String finalDate);
}
......@@ -41,6 +41,12 @@ public class ProjectReport extends DateAudit {
@Column(name = "status")
private boolean status;
@Column(name = "first_date")
private String firstDate;
@Column(name = "final_date")
private String finalDate;
// @JsonIgnore
@ManyToOne(fetch = FetchType.EAGER)
private Project project;
......
......@@ -7,7 +7,6 @@ import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> {
......@@ -46,4 +45,10 @@ public interface TimeSheetRepository extends JpaRepository<TimeSheet, Integer> {
@Modifying
@Query(value = "update TimeSheet ts set ts.checked = ?1 where ts.id = ?2", nativeQuery = true)
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 @@
<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>
......
......@@ -61,8 +61,8 @@ angular.module("myApp", ["ui.router"]).config(function ($stateProvider, $urlRout
url: "/report",
views: {
"content": {
templateUrl: "pages/employee/project.html",
controller: "employeeController"
templateUrl: "pages/report/report.html",
controller: "reportController"
}
}
})
......
/**
*
*/
angular.module("myApp").controller("employeeController", function($scope, $http,$window) {
angular.module("myApp").controller("employeeController", function($scope, $http) {
console.log("Employee controller");
$scope.emp= {
......@@ -14,7 +14,7 @@ angular.module("myApp").controller("employeeController", function($scope, $http,
"homeTown": "",
"education": "",
"department": "",
"position" : "",
"position" : ""
};
......
<!--<div class="container">-->
<!-- <div class="row">-->
<!-- <div class="col-md-8">-->
<!-- <div>-->
<!-- <legend>Employee Details</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>-->
<div class="container">
<div class="row">
<div class="col-md-8">
<div>
<legend>Report List</legend>
<!-- <tr>-->
<!-- <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>
<!-- <div>-->
<!-- <table class="table">-->
<!-- <thead>-->
<!-- <tr>-->
<!-- <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>-->
</div>
</div>
</div>
// /**
// *
// */
// angular.module("myApp").controller("employeeController", function($scope, $http,$window) {
// console.log("Employee controller");
//
// $scope.emp= {
// "username": "",
// "password": "",
// "firstName": "",
// "lastName": "",
// "emailAddress": "",
// "phoneNumber": "",
// "homeTown": "",
// "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
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.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