Fix problems in service to import personal timesheets
The comparison with the OrderElemen was wrong and it causes that the data stored was wrong. Moreover, it was not needed to open the transaction in the bound service method as it's already opened in PersonalTimesheetModel. FEA: ItEr77S14BoundUsersWebServices
This commit is contained in:
parent
f9a9ef6d02
commit
babe242b52
3 changed files with 49 additions and 17 deletions
|
|
@ -203,6 +203,10 @@ public class WorkReportLineDAO extends IntegrationEntityDAO<WorkReportLine>
|
||||||
@Override
|
@Override
|
||||||
public List<WorkReportLine> findByOrderElementAndWorkReports(
|
public List<WorkReportLine> findByOrderElementAndWorkReports(
|
||||||
OrderElement orderElement, List<WorkReport> workReports) {
|
OrderElement orderElement, List<WorkReport> workReports) {
|
||||||
|
if (workReports.isEmpty()) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
Criteria criteria = getSession().createCriteria(WorkReportLine.class);
|
Criteria criteria = getSession().createCriteria(WorkReportLine.class);
|
||||||
|
|
||||||
criteria.add(Restrictions.eq("orderElement", orderElement));
|
criteria.add(Restrictions.eq("orderElement", orderElement));
|
||||||
|
|
|
||||||
|
|
@ -212,10 +212,18 @@ public class PersonalTimesheetModel implements IPersonalTimesheetModel {
|
||||||
.getNextEntityCodeWithoutTransaction(EntityNameEnum.WORK_REPORT));
|
.getNextEntityCodeWithoutTransaction(EntityNameEnum.WORK_REPORT));
|
||||||
workReport.setCodeAutogenerated(true);
|
workReport.setCodeAutogenerated(true);
|
||||||
workReport.setResource(user.getWorker());
|
workReport.setResource(user.getWorker());
|
||||||
|
} else {
|
||||||
|
forceLoad(workReport.getWorkReportLines());
|
||||||
}
|
}
|
||||||
forceLoad(workReport.getWorkReportType());
|
forceLoad(workReport.getWorkReportType());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void forceLoad(Set<WorkReportLine> workReportLines) {
|
||||||
|
for (WorkReportLine line : workReportLines) {
|
||||||
|
line.getOrderElement().getName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private WorkReportType getPersonalTimesheetsWorkReportType() {
|
private WorkReportType getPersonalTimesheetsWorkReportType() {
|
||||||
try {
|
try {
|
||||||
WorkReportType workReportType = workReportTypeDAO
|
WorkReportType workReportType = workReportTypeDAO
|
||||||
|
|
@ -375,7 +383,7 @@ public class PersonalTimesheetModel implements IPersonalTimesheetModel {
|
||||||
private WorkReportLine getWorkReportLine(OrderElement orderElement,
|
private WorkReportLine getWorkReportLine(OrderElement orderElement,
|
||||||
LocalDate date) {
|
LocalDate date) {
|
||||||
for (WorkReportLine line : workReport.getWorkReportLines()) {
|
for (WorkReportLine line : workReport.getWorkReportLines()) {
|
||||||
if (line.getOrderElement().equals(orderElement)
|
if (line.getOrderElement().getId().equals(orderElement.getId())
|
||||||
&& LocalDate.fromDateFields(line.getDate()).equals(date)) {
|
&& LocalDate.fromDateFields(line.getDate()).equals(date)) {
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
|
@ -446,6 +454,14 @@ public class PersonalTimesheetModel implements IPersonalTimesheetModel {
|
||||||
.getNumberOfDigitsCode(EntityNameEnum.WORK_REPORT));
|
.getNumberOfDigitsCode(EntityNameEnum.WORK_REPORT));
|
||||||
workReportDAO.save(workReport);
|
workReportDAO.save(workReport);
|
||||||
sumChargedEffortDAO.recalculateTimesheetData(orderElements);
|
sumChargedEffortDAO.recalculateTimesheetData(orderElements);
|
||||||
|
|
||||||
|
if (workReport.getWorkReportLines().isEmpty()) {
|
||||||
|
try {
|
||||||
|
workReportDAO.remove(workReport.getId());
|
||||||
|
} catch (InstanceNotFoundException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
resetModifiedFields();
|
resetModifiedFields();
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,8 @@ import javax.ws.rs.core.Response;
|
||||||
import javax.ws.rs.core.Response.Status;
|
import javax.ws.rs.core.Response.Status;
|
||||||
|
|
||||||
import org.joda.time.LocalDate;
|
import org.joda.time.LocalDate;
|
||||||
|
import org.libreplan.business.common.IAdHocTransactionService;
|
||||||
|
import org.libreplan.business.common.IOnTransaction;
|
||||||
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
|
import org.libreplan.business.common.exceptions.InstanceNotFoundException;
|
||||||
import org.libreplan.business.orders.daos.IOrderElementDAO;
|
import org.libreplan.business.orders.daos.IOrderElementDAO;
|
||||||
import org.libreplan.business.orders.entities.OrderElement;
|
import org.libreplan.business.orders.entities.OrderElement;
|
||||||
|
|
@ -76,6 +78,9 @@ public class BoundUserServiceREST implements IBoundUserService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private IPersonalTimesheetModel personalTimesheetModel;
|
private IPersonalTimesheetModel personalTimesheetModel;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IAdHocTransactionService transactionService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@GET
|
@GET
|
||||||
@Transactional(readOnly = true)
|
@Transactional(readOnly = true)
|
||||||
|
|
@ -110,27 +115,34 @@ public class BoundUserServiceREST implements IBoundUserService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@POST
|
@POST
|
||||||
@Transactional
|
|
||||||
@Path("/timesheets/")
|
@Path("/timesheets/")
|
||||||
public Response importTimesheetEntries(PersonalTimesheetEntryListDTO dto) {
|
public Response importTimesheetEntries(PersonalTimesheetEntryListDTO dto) {
|
||||||
try {
|
for (final PersonalTimesheetEntryDTO each : dto.entries) {
|
||||||
for (PersonalTimesheetEntryDTO each : dto.entries) {
|
LocalDate date = DateConverter.toLocalDate(each.date);
|
||||||
LocalDate date = DateConverter.toLocalDate(each.date);
|
OrderElement orderElement = transactionService
|
||||||
OrderElement orderElement = orderElementDAO
|
.runOnReadOnlyTransaction(new IOnTransaction<OrderElement>() {
|
||||||
.findByCode(each.task);
|
@Override
|
||||||
EffortDuration effortDuration = EffortDuration
|
public OrderElement execute() {
|
||||||
.parseFromFormattedString(each.effort);
|
try {
|
||||||
|
return orderElementDAO.findByCode(each.task);
|
||||||
personalTimesheetModel.initCreateOrEdit(date);
|
} catch (InstanceNotFoundException e) {
|
||||||
personalTimesheetModel.setEffortDuration(orderElement, date,
|
return null;
|
||||||
effortDuration);
|
}
|
||||||
personalTimesheetModel.save();
|
}
|
||||||
|
});
|
||||||
|
if (orderElement == null) {
|
||||||
|
return Response.status(Status.NOT_FOUND).build();
|
||||||
}
|
}
|
||||||
|
EffortDuration effortDuration = EffortDuration
|
||||||
|
.parseFromFormattedString(each.effort);
|
||||||
|
|
||||||
return Response.ok().build();
|
personalTimesheetModel.initCreateOrEdit(date);
|
||||||
} catch (InstanceNotFoundException e) {
|
personalTimesheetModel.setEffortDuration(orderElement, date,
|
||||||
return Response.status(Status.NOT_FOUND).build();
|
effortDuration);
|
||||||
|
personalTimesheetModel.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return Response.ok().build();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue