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
|
||||
public List<WorkReportLine> findByOrderElementAndWorkReports(
|
||||
OrderElement orderElement, List<WorkReport> workReports) {
|
||||
if (workReports.isEmpty()) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
Criteria criteria = getSession().createCriteria(WorkReportLine.class);
|
||||
|
||||
criteria.add(Restrictions.eq("orderElement", orderElement));
|
||||
|
|
|
|||
|
|
@ -212,10 +212,18 @@ public class PersonalTimesheetModel implements IPersonalTimesheetModel {
|
|||
.getNextEntityCodeWithoutTransaction(EntityNameEnum.WORK_REPORT));
|
||||
workReport.setCodeAutogenerated(true);
|
||||
workReport.setResource(user.getWorker());
|
||||
} else {
|
||||
forceLoad(workReport.getWorkReportLines());
|
||||
}
|
||||
forceLoad(workReport.getWorkReportType());
|
||||
}
|
||||
|
||||
private void forceLoad(Set<WorkReportLine> workReportLines) {
|
||||
for (WorkReportLine line : workReportLines) {
|
||||
line.getOrderElement().getName();
|
||||
}
|
||||
}
|
||||
|
||||
private WorkReportType getPersonalTimesheetsWorkReportType() {
|
||||
try {
|
||||
WorkReportType workReportType = workReportTypeDAO
|
||||
|
|
@ -375,7 +383,7 @@ public class PersonalTimesheetModel implements IPersonalTimesheetModel {
|
|||
private WorkReportLine getWorkReportLine(OrderElement orderElement,
|
||||
LocalDate date) {
|
||||
for (WorkReportLine line : workReport.getWorkReportLines()) {
|
||||
if (line.getOrderElement().equals(orderElement)
|
||||
if (line.getOrderElement().getId().equals(orderElement.getId())
|
||||
&& LocalDate.fromDateFields(line.getDate()).equals(date)) {
|
||||
return line;
|
||||
}
|
||||
|
|
@ -446,6 +454,14 @@ public class PersonalTimesheetModel implements IPersonalTimesheetModel {
|
|||
.getNumberOfDigitsCode(EntityNameEnum.WORK_REPORT));
|
||||
workReportDAO.save(workReport);
|
||||
sumChargedEffortDAO.recalculateTimesheetData(orderElements);
|
||||
|
||||
if (workReport.getWorkReportLines().isEmpty()) {
|
||||
try {
|
||||
workReportDAO.remove(workReport.getId());
|
||||
} catch (InstanceNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
resetModifiedFields();
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ import javax.ws.rs.core.Response;
|
|||
import javax.ws.rs.core.Response.Status;
|
||||
|
||||
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.orders.daos.IOrderElementDAO;
|
||||
import org.libreplan.business.orders.entities.OrderElement;
|
||||
|
|
@ -76,6 +78,9 @@ public class BoundUserServiceREST implements IBoundUserService {
|
|||
@Autowired
|
||||
private IPersonalTimesheetModel personalTimesheetModel;
|
||||
|
||||
@Autowired
|
||||
private IAdHocTransactionService transactionService;
|
||||
|
||||
@Override
|
||||
@GET
|
||||
@Transactional(readOnly = true)
|
||||
|
|
@ -110,27 +115,34 @@ public class BoundUserServiceREST implements IBoundUserService {
|
|||
|
||||
@Override
|
||||
@POST
|
||||
@Transactional
|
||||
@Path("/timesheets/")
|
||||
public Response importTimesheetEntries(PersonalTimesheetEntryListDTO dto) {
|
||||
try {
|
||||
for (PersonalTimesheetEntryDTO each : dto.entries) {
|
||||
LocalDate date = DateConverter.toLocalDate(each.date);
|
||||
OrderElement orderElement = orderElementDAO
|
||||
.findByCode(each.task);
|
||||
EffortDuration effortDuration = EffortDuration
|
||||
.parseFromFormattedString(each.effort);
|
||||
|
||||
personalTimesheetModel.initCreateOrEdit(date);
|
||||
personalTimesheetModel.setEffortDuration(orderElement, date,
|
||||
effortDuration);
|
||||
personalTimesheetModel.save();
|
||||
for (final PersonalTimesheetEntryDTO each : dto.entries) {
|
||||
LocalDate date = DateConverter.toLocalDate(each.date);
|
||||
OrderElement orderElement = transactionService
|
||||
.runOnReadOnlyTransaction(new IOnTransaction<OrderElement>() {
|
||||
@Override
|
||||
public OrderElement execute() {
|
||||
try {
|
||||
return orderElementDAO.findByCode(each.task);
|
||||
} catch (InstanceNotFoundException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
});
|
||||
if (orderElement == null) {
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
}
|
||||
EffortDuration effortDuration = EffortDuration
|
||||
.parseFromFormattedString(each.effort);
|
||||
|
||||
return Response.ok().build();
|
||||
} catch (InstanceNotFoundException e) {
|
||||
return Response.status(Status.NOT_FOUND).build();
|
||||
personalTimesheetModel.initCreateOrEdit(date);
|
||||
personalTimesheetModel.setEffortDuration(orderElement, date,
|
||||
effortDuration);
|
||||
personalTimesheetModel.save();
|
||||
}
|
||||
|
||||
return Response.ok().build();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue