Commit 25e37bd5 authored by mshaik-nisum-com's avatar mshaik-nisum-com Committed by rbonthala-nisum-com

Issue-fix: Resource assignment start date is greater than end date while...

Issue-fix: Resource assignment start date is greater than end date while adding a resource to a project (#159)
parent 5d6cd3ed
......@@ -142,14 +142,12 @@ public class ProjectTeamController {
}
@RequestMapping(value = "/updateTeammate", method = RequestMethod.POST,
produces = MediaType.APPLICATION_JSON_VALUE,
produces = MediaType.TEXT_PLAIN_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ProjectTeamMate> updateTeammate(
@RequestBody ProjectTeamMate projectTeamMate)
public ResponseEntity<String> updateTeammate(@RequestBody ProjectTeamMate projectTeamMate)
throws MyTimeException {
ProjectTeamMate updatedTeammate = projectService
.updateTeammate(projectTeamMate);
return new ResponseEntity<>(updatedTeammate, HttpStatus.OK);
String response = projectService.updateTeammate(projectTeamMate);
return new ResponseEntity<>(response, HttpStatus.OK);
}
@RequestMapping(value = "/deleteTeammate", method = RequestMethod.POST,
......@@ -341,8 +339,7 @@ public class ProjectTeamController {
consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> addEmployeeToTeamWithCheck(
@RequestBody ProjectTeamMate teamMate) throws MyTimeException {
String response=null;
response=projectService.addProjectTeamMateWithCheck(teamMate);
String response = projectService.addProjectTeamMateWithCheck(teamMate);
return new ResponseEntity<>(response, HttpStatus.OK);
......
......@@ -42,7 +42,7 @@ public interface ProjectService {
public ProjectTeamMate addProjectTeamMate(ProjectTeamMate projectTeamMate)
throws MyTimeException;
ProjectTeamMate updateTeammate(ProjectTeamMate projectTeamMate);
String updateTeammate(ProjectTeamMate projectTeamMate) throws MyTimeException;
void deleteTeammate(String empId, String projectId, ObjectId id);
......
package com.nisum.mytime.service;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
......@@ -46,6 +45,7 @@ import com.nisum.mytime.repository.EmployeeRolesRepo;
import com.nisum.mytime.repository.ProjectRepo;
import com.nisum.mytime.repository.ProjectTeamMatesRepo;
import com.nisum.mytime.repository.TeamMatesBillingRepo;
import com.nisum.mytime.utils.MyTeamResultDTO;
import com.nisum.mytime.utils.MyTimeUtils;
import com.nisum.mytime.utils.PdfReportGenerator;
......@@ -57,8 +57,10 @@ public class ProjectServiceImpl implements ProjectService {
@Autowired
private ProjectRepo projectRepo;
@Autowired
private ProjectTeamMatesRepo projectTeamMatesRepo;
@Autowired
private TeamMatesBillingRepo teamMatesBillingRepo;
......@@ -70,6 +72,7 @@ public class ProjectServiceImpl implements ProjectService {
@Autowired
private MongoTemplate mongoTemplate;
@Autowired
private EmpShiftDetailsRepo empShiftDetailsRepo;
......@@ -327,27 +330,20 @@ public class ProjectServiceImpl implements ProjectService {
}
@Override
public ProjectTeamMate addProjectTeamMate(ProjectTeamMate projectTeamMate)
throws MyTimeException {
if (projectTeamMate.getRole() != null && projectTeamMate.getRole().equals("Lead")) {
Project project = projectRepo.findByProjectId(projectTeamMate.getProjectId());
// project.getManagerIds().add(projectTeamMate.getEmployeeId());
if (project.getManagerIds() != null)
project.getManagerIds().add(projectTeamMate.getEmployeeId());
else
project.setManagerIds(Arrays.asList(projectTeamMate.getEmployeeId()));
projectRepo.save(project);
}
public ProjectTeamMate addProjectTeamMate(ProjectTeamMate projectTeamMate) throws MyTimeException {
updateProjectEndDateInProjectTeamMate(projectTeamMate);
ProjectTeamMate pT = projectTeamMatesRepo.save(projectTeamMate);
List<BillingDetails> listBD = getEmployeeActiveNisumBench(pT.getEmployeeId());
for (BillingDetails b : listBD) {
Date d = pT.getStartDate() != null ? pT.getStartDate() : new Date();
b.setBillingEndDate(DateUtils.truncate(DateUtils.addDays(d, -1),
Calendar.DATE));
b.setActive(false);
updateEmployeeBilling(b);
Date startDate = pT.getStartDate() != null ? pT.getStartDate() : new Date();
if (listBD != null && listBD.size() >0) {
BillingDetails bDetails = listBD.get(0);
if (startDate.compareTo(bDetails.getBillingStartDate()) > 0) {
bDetails.setBillingEndDate(DateUtils.truncate(DateUtils.addDays(startDate, -1), Calendar.DATE));
} else {
bDetails.setBillingEndDate(startDate);
}
bDetails.setActive(false);
updateEmployeeBilling(bDetails);
}
BillingDetails billings = new BillingDetails();
billings.setEmployeeId(pT.getEmployeeId());
......@@ -357,83 +353,84 @@ public class ProjectServiceImpl implements ProjectService {
billings.setBillableStatus(pT.getBillableStatus());
billings.setAccount(pT.getAccount());
billings.setActive(pT.isActive());
if(pT.getProjectId().equals(MyTimeUtils.BENCH_PROJECT_ID))
{
billings.setBillingStartDate(pT.getStartDate() == null
? DateUtils.truncate(new Date(), Calendar.DATE)
: DateUtils.truncate(pT.getStartDate(), Calendar.DATE));
}else
{
billings.setBillingStartDate(pT.getNewBillingStartDate() == null
? DateUtils.truncate(new Date(), Calendar.DATE)
: DateUtils.truncate(pT.getNewBillingStartDate(), Calendar.DATE));
}
billings.setBillingStartDate(DateUtils.truncate(pT.getNewBillingStartDate(), Calendar.DATE));
if (pT.getEndDate() != null) {
billings.setBillingEndDate(
DateUtils.truncate(pT.getEndDate(), Calendar.DATE));
billings.setBillingEndDate(DateUtils.truncate(pT.getEndDate(), Calendar.DATE));
}
billings.setCreateDate(new Date());
updateProjectEndDateInBillingDetails(
projectTeamMate.getNewBillingStartDate(), billings);
//updateProjectEndDateInBillingDetails(projectTeamMate.getNewBillingStartDate(), billings);
addEmployeeBillingDetails(billings);
addShiftDetails(projectTeamMate);
if (projectTeamMate.getProjectId() != null && !projectTeamMate
.getProjectId().equalsIgnoreCase("Nisum0000")) {
/*if (projectTeamMate.getProjectId() != null && !projectTeamMate.getProjectId().equalsIgnoreCase("Nisum0000")) {
List<ProjectTeamMate> activeBenchProject = projectTeamMatesRepo
.findByEmployeeIdAndProjectIdAndActive(
projectTeamMate.getEmployeeId(), "Nisum0000", true);
if (activeBenchProject != null || activeBenchProject.size() != 0) {
.findByEmployeeIdAndProjectIdAndActive(projectTeamMate.getEmployeeId(), "Nisum0000", true);
if (activeBenchProject != null && activeBenchProject.size() != 0) {
for (ProjectTeamMate pteamMate : activeBenchProject) {
Date d = pT.getStartDate() != null ? pT.getStartDate()
: new Date();
Date d = (pT.getStartDate() != null) ? pT.getStartDate() : new Date();
pteamMate.setActive(false);
pteamMate.setEndDate(DateUtils
.truncate(DateUtils.addDays(d, -1), Calendar.DATE));
pteamMate.setEndDate(DateUtils.truncate(DateUtils.addDays(d, -1), Calendar.DATE));
projectTeamMatesRepo.save(pteamMate);
}
}
}
if (projectTeamMate.getRole() != null
&& projectTeamMate.getRole().equals("Lead")) {
Query query = new Query(Criteria.where("employeeId")
.is(projectTeamMate.getEmployeeId()).and("role")
.ne("Lead"));
List<ProjectTeamMate> projectMates = mongoTemplate.find(query,
ProjectTeamMate.class);
if (projectMates.size() == 0) {
String roleId = roleInfoService.getRole(MyTimeUtils.LEAD);
roleMappingService.saveUniqueEmployeeAndRole(
Arrays.asList(projectTeamMate.getEmployeeId()), roleId);
}*/
addOrUpdateTeamMateRole(projectTeamMate.getRole(), projectTeamMate.getProjectId(), projectTeamMate.getEmployeeId(), false);
return pT;
}
private void addOrUpdateTeamMateRole(String role, String projectId, String empId, boolean isUpdate) throws MyTimeException {
Project project = projectRepo.findByProjectId(projectId);
int operationType = 0; //0 = No Operation, 1 = Added, 2 = Removed
if (role != null && role.equals("Lead")) {
if (project.getManagerIds() == null) {
project.setManagerIds(Arrays.asList(empId));
operationType = 1;
} else if (project.getManagerIds() != null && !project.getManagerIds().contains(empId)) {
project.getManagerIds().add(empId);
operationType = 1;
}
} else if (isUpdate && project.getManagerIds() != null && project.getManagerIds().contains(empId)) {// When role got changed from Lead to Employee.
project.getManagerIds().remove(empId);
operationType = 2;
}
if (operationType > 0) {
projectRepo.save(project);
Query query = new Query(Criteria.where("employeeId").is(empId).and("role").is("Lead"));
List<ProjectTeamMate> projectMates = mongoTemplate.find(query, ProjectTeamMate.class);
String roleId = roleInfoService.getRole(MyTimeUtils.LEAD);
if (operationType ==1) {
roleMappingService.addEmployeeRole(empId, roleId);
} else if (projectMates.size() == 0 || operationType == 2) {
roleMappingService.deleteRole(empId, roleId);
}
}
return pT;
}
@Override
public ProjectTeamMate updateTeammate(ProjectTeamMate projectTeamMate) {
ProjectTeamMate existingTeammate = projectTeamMatesRepo
.findByEmployeeIdAndProjectId(projectTeamMate.getEmployeeId(),
projectTeamMate.getProjectId());
List<BillingDetails> listBD = getEmployeeActiveBillingDetails(projectTeamMate.getEmployeeId(),
projectTeamMate.getProjectId());
// past or present endDate (Inactive the Resource)
if (projectTeamMate.getEndDate().compareTo(new Date()) <= 0 &&projectTeamMate.getEndDate().compareTo(existingTeammate.getEndDate())!=0) {
public String updateTeammate(ProjectTeamMate projectTeamMate) throws MyTimeException {
//String result = null;
MyTeamResultDTO myResultDto = new MyTeamResultDTO();
myResultDto.setResultCode(MyTeamResultDTO.SUCCESS_CODE);
myResultDto.setResultData("TeamMate updated successfuly");
ProjectTeamMate existingTeammate = projectTeamMatesRepo.findById(projectTeamMate.getId());
List<BillingDetails> listBD = getEmployeeActiveBillingDetails(projectTeamMate.getEmployeeId(), projectTeamMate.getProjectId());
Date resEndDate = projectTeamMate.getEndDate();
//Handling past or present endDate (To "Inactive" the Resource)
if (resEndDate.compareTo(new Date()) <= 0 && resEndDate.compareTo(existingTeammate.getEndDate()) != 0) {
existingTeammate.setActive(false);
existingTeammate.setEndDate(projectTeamMate.getEndDate());
BillingDetails billingDetails = new BillingDetails();
billingDetails.setBillableStatus(MyTimeUtils.BENCH_BILLABILITY_STATUS);
existingTeammate.setEndDate(resEndDate);
if (listBD != null && !listBD.isEmpty()) {
BillingDetails billingDetailsExisting = listBD.get(0);
Date actualEndDate=projectTeamMate.getEndDate();
Date actualEndDate = resEndDate;
billingDetailsExisting.setBillingEndDate(actualEndDate);
billingDetailsExisting.setActive(false);
updateEmployeeBilling(billingDetailsExisting);
}
Date sd=projectTeamMate.getEndDate();
billingDetails.setBillingStartDate(sd);
Project project = projectRepo.findByProjectId(MyTimeUtils.BENCH_PROJECT_ID);
ProjectTeamMate newBenchAllocation = new ProjectTeamMate();
BillingDetails billingDetails = new BillingDetails();
billingDetails.setBillableStatus(MyTimeUtils.BENCH_BILLABILITY_STATUS);
billingDetails.setBillingStartDate(resEndDate);
billingDetails.setAccount(MyTimeUtils.BENCH_ACCOUNT);
billingDetails.setActive(true);
billingDetails.setEmployeeId(existingTeammate.getEmployeeId());
......@@ -441,109 +438,152 @@ public class ProjectServiceImpl implements ProjectService {
billingDetails.setCreateDate(new Date());
billingDetails.setProjectId(MyTimeUtils.BENCH_PROJECT_ID);
billingDetails.setProjectName(MyTimeUtils.FREE_POLL);
addEmployeeBillingDetails(billingDetails);
projectTeamMatesRepo.save(existingTeammate);
ProjectTeamMate newBenchAllocation = new ProjectTeamMate();
Project project=projectRepo.findByProjectId(MyTimeUtils.BENCH_PROJECT_ID);
if(project!=null)
if(project != null) {
billingDetails.setBillingEndDate(project.getProjectEndDate());
newBenchAllocation.setAccountId(project.getAccountId());
newBenchAllocation.setBillableStatus(MyTimeUtils.BENCH_BILLABILITY_STATUS);
newBenchAllocation.setDesignation(existingTeammate.getDesignation());
newBenchAllocation.setEmailId(existingTeammate.getEmailId());
newBenchAllocation.setEmployeeId(existingTeammate.getEmployeeId());
newBenchAllocation.setActive(true);
newBenchAllocation.setEmployeeName(existingTeammate.getEmployeeName());
newBenchAllocation.setProjectId(MyTimeUtils.BENCH_PROJECT_ID);
newBenchAllocation.setStartDate(sd);
Project p = projectRepo.findByProjectId(MyTimeUtils.BENCH_PROJECT_ID);
newBenchAllocation.setProjectName(p.getProjectName());
projectTeamMatesRepo.save(newBenchAllocation);
updateShiftDetails(existingTeammate);
return existingTeammate;
}else
{
existingTeammate.setProjectId(projectTeamMate.getProjectId());
existingTeammate.setProjectName(projectTeamMate.getProjectName());
existingTeammate.setRole(projectTeamMate.getRole());
// changing the Billability status
if (existingTeammate.getBillableStatus() == null
|| projectTeamMate.getBillableStatus() != null
&& existingTeammate.getBillableStatus() != null
&& !existingTeammate.getBillableStatus()
.equalsIgnoreCase(
projectTeamMate.getBillableStatus())) {
if (listBD != null && !listBD.isEmpty()) {
BillingDetails billingDetails = listBD.get(0);
Date d = projectTeamMate.getNewBillingStartDate();
Calendar cal = Calendar.getInstance();
cal.setTime(d);
cal.add(Calendar.DAY_OF_MONTH, -1);
Date onedayless = cal.getTime();
if(existingTeammate.getNewBillingStartDate().getDate()==projectTeamMate.getNewBillingStartDate().getDate())
billingDetails.setBillingEndDate(
DateUtils.truncate(projectTeamMate.getNewBillingStartDate(), Calendar.DATE));
else
billingDetails.setBillingEndDate(
DateUtils.truncate(onedayless, Calendar.DATE));
billingDetails.setActive(false);
updateEmployeeBilling(billingDetails);
}
BillingDetails billings = new BillingDetails();
billings.setEmployeeId(projectTeamMate.getEmployeeId());
billings.setEmployeeName(projectTeamMate.getEmployeeName());
billings.setProjectId(projectTeamMate.getProjectId());
billings.setAccount(existingTeammate.getAccount());
billings.setProjectName(projectTeamMate.getProjectName());
billings.setBillableStatus(projectTeamMate.getBillableStatus());
billings.setActive(true);
Date d = projectTeamMate.getNewBillingStartDate();
billings.setBillingStartDate(DateUtils.truncate(d, Calendar.DATE));
existingTeammate.setNewBillingStartDate(
DateUtils.truncate(d, Calendar.DATE));
billings.setBillingEndDate(DateUtils
.truncate(projectTeamMate.getEndDate(), Calendar.DATE));
billings.setCreateDate(new Date());
addEmployeeBillingDetails(billings);
}else //without changing the Billability status
{
if (listBD != null && !listBD.isEmpty()) {
BillingDetails billingDetails = listBD.get(0);
billingDetails.setBillingEndDate(projectTeamMate.getEndDate());
billingDetails.setBillingStartDate(projectTeamMate.getStartDate());
addEmployeeBillingDetails(billingDetails);
}
existingTeammate.setNewBillingStartDate(projectTeamMate.getNewBillingStartDate());
}
newBenchAllocation.setDomainId(project.getDomainId());
newBenchAllocation.setProjectName(project.getProjectName());
newBenchAllocation.setEndDate(project.getProjectEndDate());
}
addEmployeeBillingDetails(billingDetails);
existingTeammate.setBillableStatus(projectTeamMate.getBillableStatus());
existingTeammate.setStartDate(projectTeamMate.getStartDate());
existingTeammate.setEndDate(projectTeamMate.getEndDate());
existingTeammate.setShift(projectTeamMate.getShift());
ProjectTeamMate teamMate = projectTeamMatesRepo.save(existingTeammate);
EmployeeRoles employeeDB = employeeRolesRepo
.findByEmployeeId(teamMate.getEmployeeId());
employeeDB.setShift(teamMate.getShift());
employeeRolesRepo.save(employeeDB);
return teamMate;
newBenchAllocation.setBillableStatus(MyTimeUtils.BENCH_BILLABILITY_STATUS);
newBenchAllocation.setDesignation(existingTeammate.getDesignation());
newBenchAllocation.setEmailId(existingTeammate.getEmailId());
newBenchAllocation.setEmployeeId(existingTeammate.getEmployeeId());
newBenchAllocation.setActive(true);
newBenchAllocation.setEmployeeName(existingTeammate.getEmployeeName());
newBenchAllocation.setProjectId(MyTimeUtils.BENCH_PROJECT_ID);
newBenchAllocation.setShift(existingTeammate.getShift());
newBenchAllocation.setRole(existingTeammate.getRole());
Calendar cal = Calendar.getInstance();
cal.setTime(resEndDate);
cal.add(Calendar.DAY_OF_MONTH, 1);
newBenchAllocation.setStartDate(DateUtils.truncate(cal.getTime(), Calendar.DATE));
newBenchAllocation.setNewBillingStartDate(DateUtils.truncate(cal.getTime(), Calendar.DATE));
projectTeamMatesRepo.save(newBenchAllocation);
myResultDto.setResultCode(MyTeamResultDTO.SUCCESS_CODE);
myResultDto.setResultData("Resource Successfully moved from " + projectTeamMate.getProjectName() + " project to Bench.");
} else {
//Handling Resource Project Billability Status change
if (projectTeamMate.getBillableStatus() != null && existingTeammate.getBillableStatus() != null
&& !existingTeammate.getBillableStatus().equalsIgnoreCase(projectTeamMate.getBillableStatus())) {
/*List<BillingDetails> bDetailsList = teamMatesBillingRepo.findByEmployeeId(projectTeamMate.getEmployeeId()).stream()
.filter(e -> (!e.isActive())).sorted(Comparator.comparing(BillingDetails::getBillingEndDate).reversed())
.collect(Collectors.toList());*/
String result = validateBillabilityStartDate(listBD, projectTeamMate);
if (result != null) { //Invalid Billability Start date
return result;
}
if (listBD != null && !listBD.isEmpty()) {
BillingDetails billingDetails = listBD.get(0);
Calendar cal = Calendar.getInstance();
cal.setTime(projectTeamMate.getNewBillingStartDate());
cal.add(Calendar.DAY_OF_MONTH, -1);
if (existingTeammate.getNewBillingStartDate().getDate() == projectTeamMate.getNewBillingStartDate().getDate()) {
billingDetails.setBillingEndDate(DateUtils.truncate(projectTeamMate.getNewBillingStartDate(), Calendar.DATE));
} else {
billingDetails.setBillingEndDate(DateUtils.truncate(cal.getTime(), Calendar.DATE));
}
billingDetails.setActive(false);
updateEmployeeBilling(billingDetails);
}
BillingDetails billings = new BillingDetails();
billings.setEmployeeId(projectTeamMate.getEmployeeId());
billings.setEmployeeName(projectTeamMate.getEmployeeName());
billings.setProjectId(projectTeamMate.getProjectId());
billings.setAccount(existingTeammate.getAccount());
billings.setProjectName(projectTeamMate.getProjectName());
billings.setBillableStatus(projectTeamMate.getBillableStatus());
billings.setActive(true);
billings.setBillingStartDate(DateUtils.truncate(projectTeamMate.getNewBillingStartDate(), Calendar.DATE));
billings.setBillingEndDate(DateUtils.truncate(resEndDate, Calendar.DATE));
billings.setCreateDate(new Date());
addEmployeeBillingDetails(billings);
existingTeammate.setBillableStatus(projectTeamMate.getBillableStatus());
existingTeammate.setNewBillingStartDate(DateUtils.truncate(projectTeamMate.getNewBillingStartDate(), Calendar.DATE));
} else {//Handling Billability Start Date change
List<BillingDetails> bDetailsList = teamMatesBillingRepo.findByEmployeeId(projectTeamMate.getEmployeeId()).stream()
.filter(e -> (!e.isActive())).sorted(Comparator.comparing(BillingDetails::getBillingEndDate).reversed())
.collect(Collectors.toList());
String result = validateBillabilityStartDate(bDetailsList, projectTeamMate);
if (result != null) { //Invalid Billability Start date
return result;
}
if (bDetailsList != null && !bDetailsList.isEmpty()) {
Calendar cal = Calendar.getInstance();
cal.setTime(projectTeamMate.getNewBillingStartDate());
cal.add(Calendar.DAY_OF_MONTH, -1);
BillingDetails preBillingDetails = bDetailsList.get(0);
if (preBillingDetails.getBillingStartDate().getDate() == projectTeamMate.getNewBillingStartDate().getDate()) {
preBillingDetails.setBillingEndDate(DateUtils.truncate(projectTeamMate.getNewBillingStartDate(), Calendar.DATE));
} else {
preBillingDetails.setBillingEndDate(DateUtils.truncate(cal.getTime(), Calendar.DATE));
}
updateEmployeeBilling(preBillingDetails);
}
if (listBD != null && !listBD.isEmpty()) {
BillingDetails billingDetails = listBD.get(0);
billingDetails.setBillingStartDate(DateUtils.truncate(projectTeamMate.getNewBillingStartDate(), Calendar.DATE));
billingDetails.setBillingEndDate(DateUtils.truncate(resEndDate, Calendar.DATE));
addEmployeeBillingDetails(billingDetails);
}
existingTeammate.setNewBillingStartDate(DateUtils.truncate(projectTeamMate.getNewBillingStartDate(), Calendar.DATE));
}
if (resEndDate.compareTo(existingTeammate.getEndDate()) != 0) {
existingTeammate.setEndDate(resEndDate);
}
}
if (MyTeamResultDTO.SUCCESS_CODE.equals(myResultDto.getResultCode())) {
//Handling Role change
if ((existingTeammate.getRole() != null && !existingTeammate.getRole().equalsIgnoreCase(projectTeamMate.getRole()))
|| (projectTeamMate.getRole() != null) && !projectTeamMate.getRole().equalsIgnoreCase(existingTeammate.getRole())) {
existingTeammate.setRole(projectTeamMate.getRole());
addOrUpdateTeamMateRole(projectTeamMate.getRole(), projectTeamMate.getProjectId(), projectTeamMate.getEmployeeId(), true);
}
//Handling Shift change
if ((existingTeammate.getShift() != null && !existingTeammate.getShift().equalsIgnoreCase(projectTeamMate.getShift()))
|| (projectTeamMate.getShift() != null) && !projectTeamMate.getShift().equalsIgnoreCase(existingTeammate.getShift())) {
updateShiftDetails(existingTeammate);
existingTeammate.setShift(projectTeamMate.getShift());
EmployeeRoles employeeDB = employeeRolesRepo.findByEmployeeId(projectTeamMate.getEmployeeId());
employeeDB.setShift(projectTeamMate.getShift());
employeeRolesRepo.save(employeeDB);
}
projectTeamMatesRepo.save(existingTeammate);
}
return myResultDto.getResultData()[myResultDto.getDataArrayCounter()];
}
private String validateBillabilityStartDate(List<BillingDetails> bDetailsList, ProjectTeamMate projectTeamMate) {
String response = null;
if (bDetailsList != null && bDetailsList.size() > 0) {
BillingDetails bDetails = bDetailsList.get(0);
if (projectTeamMate.getNewBillingStartDate().compareTo(bDetails.getBillingStartDate()) < 0) {
response = "Resource Billability Start Date (" + projectTeamMate.getNewBillingStartDate() +" ) for "
+ projectTeamMate.getBillableStatus() + " status should be later than previous billability ("
+ bDetails.getBillableStatus() + " status) Start Date ( " + bDetails.getBillingStartDate() + ").";
}
} else {
response = validateAgainstDOJ(projectTeamMate);
}
return response;
}
public void updateShiftDetails(ProjectTeamMate existingTeammate) {
Query getQuery = new Query();
getQuery.addCriteria(new Criteria().andOperator(
Criteria.where("active").is(true), Criteria.where("employeeId")
.is(existingTeammate.getEmployeeId())));
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
EmpShiftDetails existingShift = mongoTemplate.findOne(getQuery,
EmpShiftDetails.class);
getQuery.addCriteria(new Criteria().andOperator(Criteria.where("active").is(true),
Criteria.where("employeeId").is(existingTeammate.getEmployeeId())));
//Calendar cal = Calendar.getInstance();
//cal.add(Calendar.DATE, -1);
EmpShiftDetails existingShift = mongoTemplate.findOne(getQuery, EmpShiftDetails.class);
if (existingShift != null) {
existingShift.setActive(false);
existingShift.setUpdatedDate(new Date());
......@@ -673,7 +713,7 @@ public class ProjectServiceImpl implements ProjectService {
for (ProjectTeamMate emp : employeeDetails) {
if (emp.getShift() != null && emp.getShift().equalsIgnoreCase(shift) && emp.isActive()) {
shiftEmpDetails.add(emp);
} else if (emp.getShift() == null && "Shift 1(09:00 AM - 06:00 PM)".equalsIgnoreCase(shift) && emp.isActive())
} else if (emp.getShift() == null && "Shift 1(9:00 AM - 6:00 PM)".equalsIgnoreCase(shift) && emp.isActive())
shiftEmpDetails.add(emp);
}
}
......@@ -701,12 +741,12 @@ public class ProjectServiceImpl implements ProjectService {
List<ProjectTeamMate> teamMatesList = new ArrayList<>();
List<ProjectTeamMate> teamMates = projectTeamMatesRepo.findByProjectId(projectId);
for (ProjectTeamMate projectTeamMate : teamMates) {
if (projectTeamMate.getEndDate() != null) {
Date endDate = projectTeamMate.getEndDate();
if (endDate != null) {
// Active
if (statusFlag.equals(MyTimeUtils.ACTIVE) && projectTeamMate.getEndDate().compareTo(new Date()) >= 0)
if (statusFlag.equals(MyTimeUtils.ACTIVE) && endDate.compareTo(new Date()) >= 0)
teamMatesList.add(projectTeamMate);
else if (statusFlag.equals(MyTimeUtils.IN_ACTIVE)
&& projectTeamMate.getEndDate().compareTo(new Date()) < 0)
else if (statusFlag.equals(MyTimeUtils.IN_ACTIVE) && endDate.compareTo(new Date()) < 0)
teamMatesList.add(projectTeamMate);
else if (statusFlag.equals(MyTimeUtils.BOTH))
teamMatesList.add(projectTeamMate);
......@@ -721,20 +761,12 @@ public class ProjectServiceImpl implements ProjectService {
}
@Override
public List<BillingDetails> getEmployeeBillingDetails(String empId,
String projectId) {
List<BillingDetails> billings = teamMatesBillingRepo
.findByEmployeeIdAndProjectId(empId, projectId);
public List<BillingDetails> getEmployeeBillingDetails(String empId, String projectId) {
List<BillingDetails> billings = teamMatesBillingRepo.findByEmployeeIdAndProjectId(empId, projectId);
List<BillingDetails> billingsSorted = billings;
try {
billingsSorted = (billings == null || billings.size() == 0)
? billings
: billings.stream()
.sorted(Comparator
.comparing(BillingDetails::getCreateDate)
.reversed())
.collect(Collectors.toList());
billingsSorted = (billings == null || billings.size() == 0) ? billings : billings.stream().sorted(
Comparator.comparing(BillingDetails::getCreateDate).reversed()).collect(Collectors.toList());
} catch (Exception e) {
// TODO: handle exception
}
......@@ -743,18 +775,11 @@ public class ProjectServiceImpl implements ProjectService {
@Override
public List<BillingDetails> getEmployeeBillingDetailsAll(String empId) {
List<BillingDetails> billings = teamMatesBillingRepo
.findByEmployeeId(empId);
List<BillingDetails> billings = teamMatesBillingRepo.findByEmployeeId(empId);
List<BillingDetails> billingsSorted = billings;
try {
billingsSorted = (billings == null || billings.size() == 0)
? billings
: billings.stream()
.sorted(Comparator
.comparing(BillingDetails::getCreateDate)
.reversed())
.collect(Collectors.toList());
billingsSorted = (billings == null || billings.size() == 0) ? billings : billings.stream().sorted(
Comparator.comparing(BillingDetails::getCreateDate).reversed()).collect(Collectors.toList());
} catch (Exception e) {
// TODO: handle exception
}
......@@ -762,24 +787,16 @@ public class ProjectServiceImpl implements ProjectService {
}
@Override
public List<BillingDetails> getEmployeeActiveBillingDetails(String empId,
String projectId) {
public List<BillingDetails> getEmployeeActiveBillingDetails(String empId, String projectId) {
Query query4 = new Query();
query4.addCriteria(Criteria.where("active").is(new Boolean(true)));
query4.addCriteria(Criteria.where("employeeId").is(empId));
query4.addCriteria(Criteria.where("projectId").is(projectId));
List<BillingDetails> billings = mongoTemplate.find(query4,
BillingDetails.class);
List<BillingDetails> billings = mongoTemplate.find(query4, BillingDetails.class);
List<BillingDetails> billingsSorted = billings;
try {
billingsSorted = (billings == null || billings.size() == 0)
? billings
: billings.stream()
.sorted(Comparator
.comparing(
BillingDetails::getBillingStartDate)
.reversed())
.collect(Collectors.toList());
billingsSorted = (billings == null || billings.size() == 0) ? billings : billings.stream().sorted(
Comparator.comparing(BillingDetails::getBillingStartDate).reversed()).collect(Collectors.toList());
} catch (Exception e) {
// TODO: handle exception
}
......@@ -792,18 +809,11 @@ public class ProjectServiceImpl implements ProjectService {
query4.addCriteria(Criteria.where("active").is(new Boolean(true)));
query4.addCriteria(Criteria.where("projectId").is("Nisum0000"));
query4.addCriteria(Criteria.where("employeeId").is(empId));
List<BillingDetails> billings = mongoTemplate.find(query4,
BillingDetails.class);
List<BillingDetails> billings = mongoTemplate.find(query4, BillingDetails.class);
List<BillingDetails> billingsSorted = billings;
try {
billingsSorted = (billings == null || billings.size() == 0)
? billings
: billings.stream()
.sorted(Comparator
.comparing(
BillingDetails::getBillingStartDate)
.reversed())
.collect(Collectors.toList());
billingsSorted = (billings == null || billings.size() == 0) ? billings : billings.stream().sorted(
Comparator.comparing(BillingDetails::getBillingStartDate).reversed()).collect(Collectors.toList());
} catch (Exception e) {
// TODO: handle exception
}
......@@ -827,68 +837,66 @@ public class ProjectServiceImpl implements ProjectService {
return teamMatesBillingRepo.save(teamMate);
}
// Updating the projectenddate field in ProjectTeamMate .
private void updateProjectEndDateInProjectTeamMate(
ProjectTeamMate projectTeamMate) {
// Update ProjectEndDate column data in ProjectTeamMate.
private void updateProjectEndDateInProjectTeamMate(ProjectTeamMate projectTeamMate) {
List<ProjectTeamMate> projectTeamMateList = mongoTemplate
.find(getQuery(projectTeamMate.getEmployeeId(),
MyTimeUtils.ENDDATE_COLUMN), ProjectTeamMate.class);
.find(getQuery(projectTeamMate.getEmployeeId(), MyTimeUtils.ENDDATE_COLUMN), ProjectTeamMate.class);
if (!CollectionUtils.isEmpty(projectTeamMateList)) {
for (ProjectTeamMate teamMate : projectTeamMateList) {
if (teamMate.getEndDate() != null && !teamMate.getProjectName()
.equalsIgnoreCase(MyTimeUtils.FREE_POLL)) {
updateProjectEndDate(
projectTeamMate.getNewBillingStartDate(),
teamMate.getEmployeeId(), teamMate.getProjectName(),
MyTimeUtils.ENDDATE_COLUMN,
MyTimeUtils.TEAMDETAILS_COLLECTION_NAME);
}
}
ProjectTeamMate teamMate = projectTeamMateList.get(0);
Date d = projectTeamMate.getNewBillingStartDate();
Calendar cal = Calendar.getInstance();
cal.setTime(d);
cal.add(Calendar.DAY_OF_MONTH, -1);
Date oneDayLess = cal.getTime();
if (teamMate.getNewBillingStartDate().getDate() == projectTeamMate.getNewBillingStartDate().getDate()) {
teamMate.setEndDate(DateUtils.truncate(projectTeamMate.getEndDate(), Calendar.DATE));
} else {
teamMate.setEndDate(DateUtils.truncate(oneDayLess, Calendar.DATE));
}
teamMate.setActive(false);
projectTeamMatesRepo.save(teamMate);
}
}
// Updating the billingenddate in BillingDetails .
private void updateProjectEndDateInBillingDetails(Date newBillingStartDate,
BillingDetails billingDetails) {
List<BillingDetails> billingDetailsList = mongoTemplate
.find(getQuery(billingDetails.getEmployeeId(),
MyTimeUtils.CREATED_DATE_COLUMN), BillingDetails.class);
/* // Update BillingEndDate in BillingDetails.
private void updateProjectEndDateInBillingDetails(Date newBillingStartDate, BillingDetails billingDetails) {
List<BillingDetails> billingDetailsList = mongoTemplate.find(
getQuery(billingDetails.getEmployeeId(), MyTimeUtils.CREATED_DATE_COLUMN), BillingDetails.class);
if (!CollectionUtils.isEmpty(billingDetailsList)) {
for (BillingDetails billing : billingDetailsList) {
if (billing.getBillingEndDate() != null
&& !billing.getProjectName()
.equalsIgnoreCase(MyTimeUtils.FREE_POLL)) {
updateProjectEndDate(newBillingStartDate,
billing.getEmployeeId(), billing.getProjectName(),
MyTimeUtils.BILLING_ENDDATE_COLUMN,
MyTimeUtils.BILLINGDETAILS_COLLECTION_NAME);
}
}
BillingDetails billing = billingDetailsList.get(0);
Date d = billingDetails.getBillingStartDate();
Calendar cal = Calendar.getInstance();
cal.setTime(d);
cal.add(Calendar.DAY_OF_MONTH, -1);
Date oneDayLess = cal.getTime();
if (billing.getBillingStartDate().getDate() == billingDetails.getBillingStartDate().getDate()) {
billing.setBillingEndDate(DateUtils.truncate(billingDetails.getBillingEndDate(), Calendar.DATE));
} else {
billing.setBillingEndDate(DateUtils.truncate(oneDayLess, Calendar.DATE));
}
teamMatesBillingRepo.save(billing);
}
}
// Updating the projectenddate
private void updateProjectEndDate(Date newBillingStartDate,
String employeeId, String projectName, String dateColumn,
String collectionName) {
// Update ProjectEndDate
private void updateProjectEndDate(Date newBillingStartDate, String employeeId, String projectName,String dateColumn,
String collectionName) {
DBCollection collection = mongoTemplate.getCollection(collectionName);
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.append(MyTimeUtils.EMPLOYEE_ID, employeeId);
searchQuery.append(MyTimeUtils.PROJECT_NAME, projectName);
BasicDBObject updateQuery = new BasicDBObject();
updateQuery.append(MyTimeUtils.SET, new BasicDBObject().append(
dateColumn,
DateUtils.addDays(newBillingStartDate, MyTimeUtils.MINUS_ONE)));
updateQuery.append(MyTimeUtils.SET, new BasicDBObject().append(dateColumn,DateUtils.addDays(
newBillingStartDate, MyTimeUtils.MINUS_ONE)));
collection.update(searchQuery, updateQuery);
}
}*/
private Query getQuery(String employeeId, String dateColumn) {
Query query = new Query();
query.addCriteria(
Criteria.where(MyTimeUtils.EMPLOYEE_ID).is(employeeId));
query.addCriteria(Criteria.where(MyTimeUtils.EMPLOYEE_ID).is(employeeId));
query.limit(MyTimeUtils.ONE);
query.with(new Sort(Sort.Direction.DESC, dateColumn));
return query;
......@@ -896,7 +904,6 @@ public class ProjectServiceImpl implements ProjectService {
@Override
public void deleteEmployeeBilling(BillingDetails teamMate) {
// TODO Auto-generated method stub
teamMatesBillingRepo.delete(teamMate);
}
......@@ -1014,27 +1021,59 @@ public class ProjectServiceImpl implements ProjectService {
String projectName = null;
String fromDate = null;
String toDate = null;
List<ProjectTeamMate> teamMateList = projectTeamMatesRepo.findByEmployeeId(projectTeamMate.getEmployeeId());
String result = null;
List<ProjectTeamMate> teamMateList = projectTeamMatesRepo.findByEmployeeId(projectTeamMate.getEmployeeId()).stream()
.filter(e -> !("Nisum0000".equalsIgnoreCase(e.getProjectId())))
.sorted(Comparator.comparing(ProjectTeamMate::getEndDate).reversed())
.collect(Collectors.toList());
// Checking, if resource has existing project assignment.
for (ProjectTeamMate projectMate : teamMateList) {
if (projectMate.getEndDate()!=null && (projectMate.getEndDate().compareTo(new Date())>0)
&& !projectMate.getProjectId().equals("Nisum0000")) {
flag=true;
projectName = projectMate.getProjectName();
fromDate = projectMate.getStartDate().toString();
toDate = projectMate.getEndDate().toString();
if (projectMate.getEndDate() != null && (projectMate.getEndDate().compareTo(new Date()) > 0)) {
flag = true;
projectName = projectMate.getProjectName();
fromDate = projectMate.getStartDate().toString();
toDate = projectMate.getEndDate().toString();
break;
}
}
if (flag==true)
return "Resource " + projectTeamMate.getEmployeeId() + " already Assigned to the " + projectName
if (flag) {// If yes, error thrown to user.
result = "Resource " + projectTeamMate.getEmployeeId() + " already Assigned to the " + projectName
+ " Project" + " from " + fromDate + "to " + toDate;
else
addProjectTeamMate(projectTeamMate);
return "TeamMate added successfuly";
} else {// If no, validating new project assignment start date against previous project end date.
result = validateNewProjectAssignmentStartDate(teamMateList, projectTeamMate);
if (result == null) {
addProjectTeamMate(projectTeamMate);
result = "TeamMate added successfuly";
}
}
return result;
}
private String validateNewProjectAssignmentStartDate(List<ProjectTeamMate> teamMateList, ProjectTeamMate projectTeamMate) {
String response = null;
if (teamMateList != null && teamMateList.size() > 0) {
ProjectTeamMate ptMate = teamMateList.get(0);
if (projectTeamMate.getNewBillingStartDate().compareTo(ptMate.getEndDate()) <= 0) {
response = "Resource Start Date (" + projectTeamMate.getNewBillingStartDate() +" ) in " + projectTeamMate.getProjectName()
+ " project should be after " + ptMate.getProjectName() + " project End Date ( " + ptMate.getEndDate() + ").";
}
} else {
response = validateAgainstDOJ(projectTeamMate);
}
return response;
}
private String validateAgainstDOJ(ProjectTeamMate projectTeamMate) {
String response = null;
Date empDoj = employeeRolesRepo.findByEmployeeId(projectTeamMate.getEmployeeId()).getDateOfJoining();
if(projectTeamMate.getNewBillingStartDate().compareTo(empDoj) < 0) {
response = "Resource Start Date (" + projectTeamMate.getNewBillingStartDate() +" ) in " + projectTeamMate.getProjectName()
+ " project should not be before Date of Joining ( " + empDoj + ").";
}
return response;
}
@Override
public List<HashMap<Object, Object>> projectsInfoByEmpId(String empId){
HashMap<Object, Object> projectMap =null;
......
......@@ -8,6 +8,8 @@ import com.nisum.mytime.exception.handler.MyTimeException;
public interface RoleMappingService {
void addEmployeeRole(String employeeId, String roleId) throws MyTimeException;
void saveUniqueEmployeeAndRole(List<String> employeeIds, String roleId) throws MyTimeException;
WriteResult deleteRole(String employeeId, String roleId) throws MyTimeException;
......
......@@ -35,17 +35,25 @@ public class RoleMappingServiceImpl implements RoleMappingService {
@Override
public void saveUniqueEmployeeAndRole(List<String> employeeIds, String roleId) throws MyTimeException {
for (String employeeId : employeeIds) {
RoleMappingInfo roleMappingInfo = roleMappingInfoRepo.findByEmployeeIdAndRoleId(employeeId, roleId);
if (roleMappingInfo == null) {
roleMappingInfo = new RoleMappingInfo();
roleMappingInfo.setEmployeeId(employeeId);
roleMappingInfo.setRoleId(roleId);
roleMappingInfo.setIsActive("Y");
} else if (roleMappingInfo.getIsActive().equalsIgnoreCase("N")) {
roleMappingInfo.setIsActive("Y");
}
addEmployeeRole(employeeId, roleId);
}
}
public void addEmployeeRole(String employeeId, String roleId) throws MyTimeException {
RoleMappingInfo roleMappingInfo = roleMappingInfoRepo.findByEmployeeIdAndRoleId(employeeId, roleId);
boolean isChanged = false;
if (roleMappingInfo == null) {
roleMappingInfo = new RoleMappingInfo();
roleMappingInfo.setEmployeeId(employeeId);
roleMappingInfo.setRoleId(roleId);
roleMappingInfo.setIsActive("Y");
isChanged = true;
} else if (roleMappingInfo.getIsActive().equalsIgnoreCase("N")) {
roleMappingInfo.setIsActive("Y");
isChanged = true;
}
if (isChanged) {
roleMappingInfoRepo.save(roleMappingInfo);
}
}
......
package com.nisum.mytime.utils;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class MyTeamResultDTO implements Serializable {
private static final long serialVersionUID = 1L;
public static String ERROR_CODE = "MTERR100";
public static String SUCCESS_CODE = "MTS100";
private String resultCode;
private String resultData[];
private int dataArrayCounter;
public String[] getResultData() {
return resultData;
}
public void setResultData(String resultData) {
if (this.resultData == null) {
this.resultData = new String[10];
}
for (int i = 0; i < 10; i++) {
setDataArrayCounter(i);
if (this.resultData[i] == null || this.resultData[i].isEmpty()) {
this.resultData[i] = resultData;
break;
}
}
}
public int getDataArrayCounter() {
return dataArrayCounter;
}
private void setDataArrayCounter(int dataArrayCounter) {
this.dataArrayCounter = dataArrayCounter;
}
}
......@@ -1155,18 +1155,6 @@ myApp.controller("projectController", function ($scope, myFactory, exportUiGridS
}
else {
updateTeamRecord(record, action);
$timeout(function () {
getProjectDetails(project, $scope.status);
removeTab('Add');
$mdDialog.show($mdDialog.alert({
skipHide: true,
textContent: 'Employee Updated',
ok: 'ok'
})).then(function () {
$scope.myForm.$setPristine();
})
;
}, 500);
}
}
......@@ -1508,7 +1496,20 @@ myApp.controller("projectController", function ($scope, myFactory, exportUiGridS
}
$http(req).then(function mySuccess(response) {
$scope.result = "Success";
$scope.objectId = response.data.id;
if(response.data == "TeamMate updated successfuly"){
$timeout(function () {
getProjectDetails($scope.projectId, $scope.status);
removeTab('Add');
}, 500);
}
$mdDialog.show($mdDialog.alert({
skipHide: true,
textContent: response.data,
ok: 'ok'
})).then(function () {
$scope.myForm.$setPristine();
})
// $scope.objectId = response.data.id;
}, function myError(response){
$scope.result = "Error";
......
......@@ -150,7 +150,7 @@
<tr>
<td class="Employee">Start Date</td>
<td>
<md-datepicker ng-model="startDate " md-placeholder="Please select Date" id="startDate " md-min-date="minDate " md-max-date="maxDate "
<md-datepicker ng-model="startDate" ng-disabled = "true" md-placeholder="Please select Date" id="startDate " md-min-date="minDate " md-max-date="maxDate "
onkeydown="return false " name="startDate"></md-datepicker>
</td>
</tr>
......@@ -158,7 +158,7 @@
<tr>
<td class="Employee">End Date</td>
<td>
<md-datepicker ng-model="endDate " md-placeholder="Please select Date" id="endDate " md-min-date="minDate " md-max-date="maxDate "
<md-datepicker ng-model="endDate" md-placeholder="Please select Date" id="endDate " md-min-date="minDate " md-max-date="maxDate "
onkeydown="return false " name="endDate"></md-datepicker>
</td>
</tr>
......@@ -278,7 +278,7 @@
<tr>
<td class="Employee">Start Date</td>
<td>
<md-datepicker ng-model="startDate " md-placeholder="Please select Date" id="startDate " md-min-date="minDate " md-max-date="maxDate "
<md-datepicker ng-model="startDate" ng-disabled = "true" md-placeholder="Please select Date" id="startDate " md-min-date="minDate " md-max-date="maxDate "
onkeydown="return false " name="startDate"></md-datepicker>
</td>
</tr>
......
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