ItEr24S06RFControlAvancesIncompatiblesEnUnidadesTraballoItEr23S06 : Management of Direct Advances and Calculated Advances.
This commit is contained in:
parent
f2c858cf38
commit
47c4e73845
15 changed files with 1199 additions and 289 deletions
|
|
@ -1,13 +1,15 @@
|
|||
package org.navalplanner.business.advance.entities;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
import org.hibernate.validator.NotNull;
|
||||
import org.navalplanner.business.common.BaseEntity;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
|
||||
public class AdvanceAssigment extends BaseEntity {
|
||||
|
||||
public enum Type { DIRECTO, CALCULADO };
|
||||
public enum Type { DIRECT, CALCULATED };
|
||||
|
||||
public static AdvanceAssigment create() {
|
||||
AdvanceAssigment advanceAssigment = new AdvanceAssigment();
|
||||
|
|
@ -15,14 +17,17 @@ public class AdvanceAssigment extends BaseEntity {
|
|||
return advanceAssigment;
|
||||
}
|
||||
|
||||
public static AdvanceAssigment create(boolean reportGlobalAdvance) {
|
||||
AdvanceAssigment advanceAssigment = new AdvanceAssigment(reportGlobalAdvance);
|
||||
public static AdvanceAssigment create(boolean reportGlobalAdvance, BigDecimal maxValue) {
|
||||
AdvanceAssigment advanceAssigment = new AdvanceAssigment(reportGlobalAdvance, maxValue);
|
||||
advanceAssigment.setNewObject(true);
|
||||
return advanceAssigment;
|
||||
}
|
||||
|
||||
private boolean reportGlobalAdvance;
|
||||
|
||||
@NotNull
|
||||
private BigDecimal maxValue;
|
||||
|
||||
private Type type;
|
||||
|
||||
private OrderElement orderElement;
|
||||
|
|
@ -36,8 +41,10 @@ public class AdvanceAssigment extends BaseEntity {
|
|||
this.reportGlobalAdvance = false;
|
||||
}
|
||||
|
||||
private AdvanceAssigment(boolean reportGlobalAdvance) {
|
||||
private AdvanceAssigment(boolean reportGlobalAdvance,BigDecimal maxValue) {
|
||||
this.reportGlobalAdvance = reportGlobalAdvance;
|
||||
this.maxValue = maxValue;
|
||||
this.maxValue.setScale(2,BigDecimal.ROUND_HALF_UP);
|
||||
}
|
||||
|
||||
public void setReportGlobalAdvance(boolean reportGlobalAdvance) {
|
||||
|
|
@ -48,6 +55,15 @@ public class AdvanceAssigment extends BaseEntity {
|
|||
return this.reportGlobalAdvance;
|
||||
}
|
||||
|
||||
public BigDecimal getMaxValue() {
|
||||
return this.maxValue;
|
||||
}
|
||||
|
||||
public void setMaxValue(BigDecimal maxValue) {
|
||||
this.maxValue = maxValue;
|
||||
this.maxValue.setScale(2);
|
||||
}
|
||||
|
||||
public void setOrderElement(OrderElement orderElement) {
|
||||
this.orderElement = orderElement;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,10 +8,9 @@ import org.navalplanner.business.common.BaseEntity;
|
|||
|
||||
public class AdvanceMeasurement extends BaseEntity {
|
||||
|
||||
public static AdvanceMeasurement create(Date date, BigDecimal value,
|
||||
BigDecimal maxValue) {
|
||||
public static AdvanceMeasurement create(Date date, BigDecimal value) {
|
||||
AdvanceMeasurement advanceMeasurement = new AdvanceMeasurement(date,
|
||||
value, maxValue);
|
||||
value);
|
||||
advanceMeasurement.setNewObject(true);
|
||||
return advanceMeasurement;
|
||||
}
|
||||
|
|
@ -28,21 +27,20 @@ public class AdvanceMeasurement extends BaseEntity {
|
|||
@NotNull
|
||||
private BigDecimal value;
|
||||
|
||||
@NotNull
|
||||
private BigDecimal maxValue;
|
||||
|
||||
@NotNull
|
||||
private AdvanceAssigment advanceAssigment;
|
||||
|
||||
private int numIndirectSons;
|
||||
|
||||
public AdvanceMeasurement() {
|
||||
this.numIndirectSons = 0;
|
||||
}
|
||||
|
||||
private AdvanceMeasurement(Date date, BigDecimal value, BigDecimal maxValue) {
|
||||
private AdvanceMeasurement(Date date, BigDecimal value) {
|
||||
this.date = date;
|
||||
this.value = value;
|
||||
this.value.setScale(2,BigDecimal.ROUND_HALF_UP);
|
||||
this.maxValue = maxValue;
|
||||
this.maxValue.setScale(2,BigDecimal.ROUND_HALF_UP);
|
||||
this.numIndirectSons = 0;
|
||||
}
|
||||
|
||||
public void setDate(Date date) {
|
||||
|
|
@ -62,15 +60,6 @@ public class AdvanceMeasurement extends BaseEntity {
|
|||
return this.value;
|
||||
}
|
||||
|
||||
public BigDecimal getMaxValue() {
|
||||
return this.maxValue;
|
||||
}
|
||||
|
||||
public void setMaxValue(BigDecimal maxValue) {
|
||||
this.maxValue = maxValue;
|
||||
this.maxValue.setScale(2);
|
||||
}
|
||||
|
||||
public void setAdvanceAssigment(AdvanceAssigment advanceAssigment) {
|
||||
this.advanceAssigment = advanceAssigment;
|
||||
}
|
||||
|
|
@ -78,4 +67,20 @@ public class AdvanceMeasurement extends BaseEntity {
|
|||
public AdvanceAssigment getAdvanceAssigment() {
|
||||
return this.advanceAssigment;
|
||||
}
|
||||
|
||||
public int getNumIndirectSons() {
|
||||
return numIndirectSons;
|
||||
}
|
||||
|
||||
public void setNumIndirectSons(int numIndirectSons) {
|
||||
this.numIndirectSons = numIndirectSons;
|
||||
}
|
||||
|
||||
public void incrementNumIndirectSons() {
|
||||
this.numIndirectSons = this.numIndirectSons + 1;
|
||||
}
|
||||
|
||||
public void decrementNumIndirectSons() {
|
||||
this.numIndirectSons = this.numIndirectSons - 1;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,6 @@ public class AdvanceMeasurementComparator implements Comparator<AdvanceMeasureme
|
|||
|
||||
@Override
|
||||
public int compare(AdvanceMeasurement arg0, AdvanceMeasurement arg1) {
|
||||
return arg0.getDate().compareTo(arg1.getDate());
|
||||
return arg1.getDate().compareTo(arg0.getDate());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package org.navalplanner.business.orders.entities;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
|
|
@ -8,6 +9,7 @@ import java.util.Set;
|
|||
|
||||
import org.hibernate.validator.NotEmpty;
|
||||
import org.navalplanner.business.advance.entities.AdvanceAssigment;
|
||||
import org.navalplanner.business.advance.entities.AdvanceMeasurement;
|
||||
import org.navalplanner.business.advance.entities.AdvanceType;
|
||||
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssigmentForOrderElementException;
|
||||
import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
|
||||
|
|
@ -161,11 +163,13 @@ public abstract class OrderElement extends BaseEntity {
|
|||
public void addAvanceAssigment(AdvanceAssigment newAdvanceAssigment)
|
||||
throws DuplicateValueTrueReportGlobalAdvanceException,
|
||||
DuplicateAdvanceAssigmentForOrderElementException {
|
||||
checkNoOtherGlobalAdvanceAssignment(newAdvanceAssigment);
|
||||
checkAncestorsNoOtherAssignmentWithSameAdvanceType(this,
|
||||
newAdvanceAssigment);
|
||||
checkChildrenNoOtherAssignmentWithSameAdvanceType(this,
|
||||
newAdvanceAssigment);
|
||||
if(newAdvanceAssigment.getType().equals(AdvanceAssigment.Type.DIRECT)){
|
||||
checkNoOtherGlobalAdvanceAssignment(newAdvanceAssigment);
|
||||
checkAncestorsNoOtherAssignmentWithSameAdvanceType(this,
|
||||
newAdvanceAssigment);
|
||||
checkChildrenNoOtherAssignmentWithSameAdvanceType(this,
|
||||
newAdvanceAssigment);
|
||||
}
|
||||
this.advanceAssigments.add(newAdvanceAssigment);
|
||||
}
|
||||
|
||||
|
|
@ -176,7 +180,8 @@ public abstract class OrderElement extends BaseEntity {
|
|||
return;
|
||||
}
|
||||
for (AdvanceAssigment advanceAssigment : getAdvanceAssigments()) {
|
||||
if (advanceAssigment.getReportGlobalAdvance())
|
||||
if((advanceAssigment.getType().equals(AdvanceAssigment.Type.DIRECT))
|
||||
&& (advanceAssigment.getReportGlobalAdvance()))
|
||||
throw new DuplicateValueTrueReportGlobalAdvanceException(
|
||||
"Duplicate Value True ReportGlobalAdvance For Order Element",
|
||||
this, OrderElement.class);
|
||||
|
|
@ -195,8 +200,9 @@ public abstract class OrderElement extends BaseEntity {
|
|||
throws DuplicateAdvanceAssigmentForOrderElementException {
|
||||
for (AdvanceAssigment advanceAssigment : orderElement
|
||||
.getAdvanceAssigments()) {
|
||||
if (AdvanceType.equivalentInDB(advanceAssigment.getAdvanceType(),
|
||||
newAdvanceAssigment.getAdvanceType())) {
|
||||
if ((AdvanceType.equivalentInDB(advanceAssigment.getAdvanceType(),
|
||||
newAdvanceAssigment.getAdvanceType())) &&
|
||||
(advanceAssigment.getType().equals(AdvanceAssigment.Type.DIRECT))) {
|
||||
throw new DuplicateAdvanceAssigmentForOrderElementException(
|
||||
"Duplicate Advance Assigment For Order Element", this,
|
||||
OrderElement.class);
|
||||
|
|
@ -220,8 +226,9 @@ public abstract class OrderElement extends BaseEntity {
|
|||
throws DuplicateAdvanceAssigmentForOrderElementException {
|
||||
for (AdvanceAssigment advanceAssigment : orderElement
|
||||
.getAdvanceAssigments()) {
|
||||
if (AdvanceType.equivalentInDB(advanceAssigment.getAdvanceType(),
|
||||
newAdvanceAssigment.getAdvanceType())) {
|
||||
if ((AdvanceType.equivalentInDB(advanceAssigment.getAdvanceType(),
|
||||
newAdvanceAssigment.getAdvanceType())) &&
|
||||
(advanceAssigment.getType().equals(AdvanceAssigment.Type.DIRECT))) {
|
||||
throw new DuplicateAdvanceAssigmentForOrderElementException(
|
||||
"Duplicate Advance Assigment For Order Element", this,
|
||||
OrderElement.class);
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
<version name="version" access="property" type="long" />
|
||||
|
||||
<property name="reportGlobalAdvance" access="field"/>
|
||||
<property name="maxValue" access="field" scale="2"/>
|
||||
<property name="type" access="field">
|
||||
<type name="org.hibernate.type.EnumType">
|
||||
<param name="enumClass">org.navalplanner.business.advance.entities.AdvanceAssigment$Type</param>
|
||||
|
|
@ -58,7 +59,7 @@
|
|||
|
||||
<property name="date"/>
|
||||
<property name="value" scale="2"/>
|
||||
<property name="maxValue" scale="2"/>
|
||||
<property name="numIndirectSons"/>
|
||||
<many-to-one name="advanceAssigment" class="AdvanceAssigment" column="ADVANCE_ASSIGMENT_ID" />
|
||||
</class>
|
||||
</hibernate-mapping>
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
</set>
|
||||
|
||||
<!-- Inverse navigation from OrderElement to OrderLineGroup -->
|
||||
<many-to-one name="parent" access="field" cascade="lock"/>
|
||||
<many-to-one name="parent" access="field" cascade="all"/>
|
||||
|
||||
<joined-subclass name="OrderLineGroup">
|
||||
<key column="ORDERELEMENTID"></key>
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING
|
|||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import java.util.Date;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.junit.Test;
|
||||
|
|
@ -17,6 +18,7 @@ import org.junit.runner.RunWith;
|
|||
import org.navalplanner.business.advance.daos.IAdvanceAssigmentDAO;
|
||||
import org.navalplanner.business.advance.daos.IAdvanceTypeDAO;
|
||||
import org.navalplanner.business.advance.entities.AdvanceAssigment;
|
||||
import org.navalplanner.business.advance.entities.AdvanceMeasurement;
|
||||
import org.navalplanner.business.advance.entities.AdvanceType;
|
||||
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssigmentForOrderElementException;
|
||||
import org.navalplanner.business.advance.exceptions.DuplicateValueTrueReportGlobalAdvanceException;
|
||||
|
|
@ -90,10 +92,17 @@ public class AddAdvanceAssigmentsToOrderElementTest {
|
|||
return advanceType;
|
||||
}
|
||||
|
||||
private AdvanceMeasurement createValidAdvanceMeasurement() {
|
||||
AdvanceMeasurement advanceMeasurement = AdvanceMeasurement.create(
|
||||
new Date(), new BigDecimal(0));
|
||||
return advanceMeasurement;
|
||||
}
|
||||
|
||||
private AdvanceAssigment createValidAdvanceAssigment(
|
||||
boolean reportGlobalAdvance) {
|
||||
AdvanceAssigment advanceAssigment = AdvanceAssigment.create(
|
||||
reportGlobalAdvance);
|
||||
reportGlobalAdvance,new BigDecimal(0));
|
||||
advanceAssigment.setType(AdvanceAssigment.Type.DIRECT);
|
||||
return advanceAssigment;
|
||||
}
|
||||
|
||||
|
|
@ -203,13 +212,17 @@ public class AddAdvanceAssigmentsToOrderElementTest {
|
|||
OrderLine son = createValidLeaf("bla", "132");
|
||||
container.add(son);
|
||||
|
||||
AdvanceMeasurement advanceMeasurement = createValidAdvanceMeasurement();
|
||||
|
||||
AdvanceType advanceTypeA = createAndSaveType("tipoA");
|
||||
AdvanceType advanceTypeB = createAndSaveType("tipoB");
|
||||
|
||||
AdvanceAssigment advanceAssigmentA = createValidAdvanceAssigment(true);
|
||||
advanceAssigmentA.setAdvanceType(advanceTypeA);
|
||||
advanceAssigmentA.getAdvanceMeasurements().add(advanceMeasurement);
|
||||
AdvanceAssigment advanceAssigmentB = createValidAdvanceAssigment(false);
|
||||
advanceAssigmentB.setAdvanceType(advanceTypeB);
|
||||
advanceAssigmentB.getAdvanceMeasurements().add(advanceMeasurement);
|
||||
|
||||
|
||||
container.addAvanceAssigment(advanceAssigmentA);
|
||||
|
|
@ -270,12 +283,15 @@ public class AddAdvanceAssigmentsToOrderElementTest {
|
|||
OrderLine grandSon = createValidLeaf("GranSon", "75757");
|
||||
son.add(grandSon);
|
||||
|
||||
AdvanceMeasurement advanceMeasurement = createValidAdvanceMeasurement();
|
||||
AdvanceType advanceTypeA = createAndSaveType("tipoA");
|
||||
|
||||
AdvanceAssigment advanceAssigmentA = createValidAdvanceAssigment(true);
|
||||
advanceAssigmentA.setAdvanceType(advanceTypeA);
|
||||
advanceAssigmentA.getAdvanceMeasurements().add(advanceMeasurement);
|
||||
AdvanceAssigment advanceAssigmentB = createValidAdvanceAssigment(false);
|
||||
advanceAssigmentB.setAdvanceType(advanceTypeA);
|
||||
advanceAssigmentB.getAdvanceMeasurements().add(advanceMeasurement);
|
||||
|
||||
grandSon.addAvanceAssigment(advanceAssigmentA);
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,142 @@
|
|||
/*
|
||||
* To change this template, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
|
||||
package org.navalplanner.web.orders;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.TreeSet;
|
||||
import java.util.SortedSet;
|
||||
import org.navalplanner.business.advance.entities.AdvanceAssigment;
|
||||
import org.navalplanner.business.advance.entities.AdvanceMeasurement;
|
||||
import org.navalplanner.business.advance.entities.AdvanceMeasurementComparator;
|
||||
import org.navalplanner.business.advance.entities.AdvanceType;
|
||||
import org.navalplanner.business.util.ListSorter;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
|
||||
*/
|
||||
public class AdvanceAssigmentDTO {
|
||||
|
||||
private AdvanceType advanceType;
|
||||
|
||||
private SortedSet<AdvanceMeasurement> advanceMeasurements =
|
||||
new TreeSet<AdvanceMeasurement>(new AdvanceMeasurementComparator());
|
||||
|
||||
private ListSorter<AdvanceMeasurementDTO> advanceMeasurementDTOs =
|
||||
ListSorter.create(new ArrayList<AdvanceMeasurementDTO>(), new AdvanceMeasurementDTOComparator());
|
||||
|
||||
private AdvanceAssigment advanceAssigment;
|
||||
|
||||
private BigDecimal maxValue;
|
||||
|
||||
private boolean reportGlobalAdvance;
|
||||
|
||||
private AdvanceAssigment.Type type;
|
||||
|
||||
private boolean isNewObject = true;
|
||||
|
||||
private boolean isNewDTO = true;
|
||||
|
||||
private boolean selectedRemove = false;
|
||||
|
||||
public AdvanceAssigmentDTO() {
|
||||
this.reportGlobalAdvance = false;
|
||||
this.isNewDTO = true;
|
||||
this.isNewObject = false;
|
||||
this.type = AdvanceAssigment.Type.DIRECT;
|
||||
}
|
||||
|
||||
public AdvanceAssigmentDTO(AdvanceType advanceType,
|
||||
AdvanceAssigment advanceAssigment,
|
||||
SortedSet<AdvanceMeasurement> advanceMeasurements) {
|
||||
this.advanceType = advanceType;
|
||||
this.advanceMeasurements = advanceMeasurements;
|
||||
this.advanceAssigment = advanceAssigment;
|
||||
|
||||
this.maxValue = advanceAssigment.getMaxValue();
|
||||
this.reportGlobalAdvance = advanceAssigment.getReportGlobalAdvance();
|
||||
this.type = advanceAssigment.getType();
|
||||
|
||||
this.isNewDTO = false;
|
||||
if(advanceAssigment.getVersion()==null){
|
||||
this.isNewObject = true;
|
||||
}else{
|
||||
this.isNewObject = false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getIsNewObject() {
|
||||
return this.isNewObject;
|
||||
}
|
||||
|
||||
public boolean getIsNewDTO() {
|
||||
return this.isNewDTO;
|
||||
}
|
||||
|
||||
public void setAdvanceType(AdvanceType advanceType){
|
||||
this.advanceType = advanceType;
|
||||
}
|
||||
|
||||
public AdvanceType getAdvanceType() {
|
||||
return this.advanceType;
|
||||
}
|
||||
|
||||
public AdvanceAssigment getAdvanceAssigment() {
|
||||
return this.advanceAssigment;
|
||||
}
|
||||
|
||||
public void setAdvanceAssigment(AdvanceAssigment advanceAssigment) {
|
||||
this.advanceAssigment = advanceAssigment;
|
||||
}
|
||||
|
||||
public SortedSet<AdvanceMeasurement> getAdvanceMeasurements() {
|
||||
return this.advanceMeasurements;
|
||||
}
|
||||
|
||||
public void setAdvanceMeasurements(SortedSet<AdvanceMeasurement> advanceMeasurements) {
|
||||
this.advanceMeasurements = advanceMeasurements;
|
||||
}
|
||||
|
||||
public ListSorter<AdvanceMeasurementDTO> getAdvanceMeasurementDTOs() {
|
||||
return this.advanceMeasurementDTOs;
|
||||
}
|
||||
|
||||
public void setAdvanceMeasurementDTOs(ListSorter<AdvanceMeasurementDTO> advanceMeasurementDTOs) {
|
||||
this.advanceMeasurementDTOs = advanceMeasurementDTOs;
|
||||
}
|
||||
|
||||
public void setReportGlobalAdvance(boolean reportGlobalAdvance) {
|
||||
this.reportGlobalAdvance = reportGlobalAdvance;
|
||||
}
|
||||
|
||||
public boolean getReportGlobalAdvance() {
|
||||
return this.reportGlobalAdvance;
|
||||
}
|
||||
|
||||
public BigDecimal getMaxValue(){
|
||||
return this.maxValue;
|
||||
}
|
||||
|
||||
public void setMaxValue(BigDecimal maxValue) {
|
||||
this.maxValue = maxValue;
|
||||
}
|
||||
|
||||
public AdvanceAssigment.Type getType(){
|
||||
return this.type;
|
||||
}
|
||||
|
||||
public void setType(AdvanceAssigment.Type type) {
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
public boolean isSelectedForRemove(){
|
||||
return this.selectedRemove;
|
||||
}
|
||||
|
||||
public void setSelectedForRemove(boolean selectedRemove){
|
||||
this.selectedRemove = selectedRemove;
|
||||
}
|
||||
}
|
||||
|
|
@ -3,26 +3,18 @@ package org.navalplanner.web.orders;
|
|||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Date;
|
||||
import org.navalplanner.business.advance.entities.AdvanceAssigment;
|
||||
import org.navalplanner.business.advance.entities.AdvanceMeasurement;
|
||||
import org.navalplanner.business.advance.entities.AdvanceType;
|
||||
|
||||
public class AdvanceMeasurementDTO{
|
||||
|
||||
private AdvanceType advanceType;
|
||||
|
||||
private AdvanceMeasurement advanceMeasurement;
|
||||
|
||||
private AdvanceAssigment advanceAssigment;
|
||||
private AdvanceAssigmentDTO advanceAssigmentDTO;
|
||||
|
||||
private Date date;
|
||||
|
||||
private BigDecimal maxValue;
|
||||
|
||||
private BigDecimal value;
|
||||
|
||||
private boolean reportGlobalAdvance;
|
||||
|
||||
private boolean isNewObject = true;
|
||||
|
||||
private boolean isNewDTO = true;
|
||||
|
|
@ -32,36 +24,28 @@ public class AdvanceMeasurementDTO{
|
|||
private String percentage;
|
||||
|
||||
public AdvanceMeasurementDTO() {
|
||||
this.reportGlobalAdvance = false;
|
||||
this.date = new Date();
|
||||
this.percentage = new String("");
|
||||
this.percentage = new String("0 %");
|
||||
this.isNewDTO = true;
|
||||
this.isNewObject = false;
|
||||
}
|
||||
|
||||
public AdvanceMeasurementDTO(AdvanceType advanceType,
|
||||
AdvanceAssigment advanceAssigment,
|
||||
AdvanceMeasurement advanceMeasurement) {
|
||||
this.advanceType = advanceType;
|
||||
public AdvanceMeasurementDTO(AdvanceMeasurement advanceMeasurement){
|
||||
|
||||
this.advanceMeasurement = advanceMeasurement;
|
||||
this.date = advanceMeasurement.getDate();
|
||||
this.maxValue = advanceMeasurement.getMaxValue();
|
||||
this.value = advanceMeasurement.getValue();
|
||||
|
||||
this.advanceAssigment = advanceAssigment;
|
||||
this.reportGlobalAdvance = advanceAssigment.getReportGlobalAdvance();
|
||||
|
||||
this.percentage = new String("");
|
||||
this.percentage = new String("0 %");
|
||||
this.isNewDTO = false;
|
||||
if(advanceAssigment.getVersion()==null){
|
||||
if(advanceMeasurement.getVersion()==null){
|
||||
this.isNewObject = true;
|
||||
}else{
|
||||
this.isNewObject = false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getIsNewObject() {
|
||||
public boolean getIsNewObject(){
|
||||
return this.isNewObject;
|
||||
}
|
||||
|
||||
|
|
@ -69,45 +53,40 @@ public class AdvanceMeasurementDTO{
|
|||
return this.isNewDTO;
|
||||
}
|
||||
|
||||
public void setAdvanceType(AdvanceType advanceType){
|
||||
this.advanceType = advanceType;
|
||||
public AdvanceAssigmentDTO getAdvanceAssigmentDTO() {
|
||||
return this.advanceAssigmentDTO;
|
||||
}
|
||||
|
||||
public AdvanceType getAdvanceType() {
|
||||
return this.advanceType;
|
||||
}
|
||||
|
||||
public AdvanceAssigment getAdvanceAssigment() {
|
||||
return this.advanceAssigment;
|
||||
public void setAdvanceAssigmentDTO(AdvanceAssigmentDTO advanceAssigmentDTO) {
|
||||
this.advanceAssigmentDTO = advanceAssigmentDTO;
|
||||
}
|
||||
|
||||
public AdvanceMeasurement getAdvanceMeasurement() {
|
||||
return this.advanceMeasurement;
|
||||
}
|
||||
|
||||
public void setAdvanceMeasurement(AdvanceMeasurement advanceMeasurement) {
|
||||
this.advanceMeasurement = advanceMeasurement;
|
||||
}
|
||||
|
||||
public void setPercentage(String percentage) {
|
||||
this.percentage = percentage;
|
||||
}
|
||||
|
||||
public String getPercentage() {
|
||||
if((value != null)&&(maxValue != null)){
|
||||
if(advanceAssigmentDTO == null) return "0 %";
|
||||
if(value == null) return "0 %";
|
||||
if(advanceAssigmentDTO.getMaxValue() != null){
|
||||
BigDecimal maxValue = advanceAssigmentDTO.getMaxValue();
|
||||
BigDecimal percentage = new BigDecimal(0);
|
||||
BigDecimal division = (value.divide(maxValue,4,RoundingMode.HALF_UP));
|
||||
division.setScale(2, RoundingMode.HALF_UP);
|
||||
percentage = division.multiply(new BigDecimal(100));
|
||||
percentage = percentage.setScale(2, RoundingMode.HALF_UP);
|
||||
this.percentage = percentage.toString();
|
||||
this.percentage = percentage.toString()+" %";
|
||||
return this.percentage;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public void setReportGlobalAdvance(boolean reportGlobalAdvance) {
|
||||
this.reportGlobalAdvance = reportGlobalAdvance;
|
||||
}
|
||||
|
||||
public boolean getReportGlobalAdvance() {
|
||||
return this.reportGlobalAdvance;
|
||||
return "0 %";
|
||||
}
|
||||
|
||||
public void setDate(Date date) {
|
||||
|
|
@ -126,14 +105,6 @@ public class AdvanceMeasurementDTO{
|
|||
return this.value;
|
||||
}
|
||||
|
||||
public BigDecimal getMaxValue() {
|
||||
return this.maxValue;
|
||||
}
|
||||
|
||||
public void setMaxValue(BigDecimal maxValue) {
|
||||
this.maxValue = maxValue;
|
||||
}
|
||||
|
||||
public boolean isSelectedForRemove(){
|
||||
return this.selectedRemove;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
package org.navalplanner.web.orders;
|
||||
import java.util.Comparator;
|
||||
/**
|
||||
*
|
||||
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
|
||||
*/
|
||||
public class AdvanceMeasurementDTOComparator implements Comparator<AdvanceMeasurementDTO> {
|
||||
|
||||
public AdvanceMeasurementDTOComparator(){
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(AdvanceMeasurementDTO arg0, AdvanceMeasurementDTO arg1) {
|
||||
return arg1.getDate().compareTo(arg0.getDate());
|
||||
}
|
||||
}
|
||||
|
|
@ -14,21 +14,40 @@ import org.navalplanner.business.orders.entities.OrderElement;
|
|||
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
|
||||
*/
|
||||
public interface IManageOrderElementAdvancesModel {
|
||||
public List<AdvanceMeasurementDTO> getAdvanceMeasurements();
|
||||
|
||||
public void prepareEditAdvanceMeasurements(AdvanceAssigmentDTO advanceAssigmentDTO);
|
||||
|
||||
public List<AdvanceMeasurementDTO> getAdvanceMeasurementDTOs();
|
||||
|
||||
public List<AdvanceAssigmentDTO> getAdvanceAssigmentDTOs();
|
||||
|
||||
public void init(OrderElement orderElement);
|
||||
|
||||
public void addNewLine();
|
||||
public void addNewLineAdvaceAssigment();
|
||||
|
||||
public void removeLine(AdvanceMeasurementDTO advanceDTO);
|
||||
public void addNewLineAdvaceMeasurement();
|
||||
|
||||
public void removeLineAdvanceAssigment(AdvanceAssigmentDTO advanceDTO);
|
||||
|
||||
public void removeLineAdvanceMeasurement(AdvanceMeasurementDTO advanceDTO);
|
||||
|
||||
public List<AdvanceType> getActivesAdvanceTypes();
|
||||
|
||||
public boolean isPrecisionValid(AdvanceMeasurementDTO advanceDTO, BigDecimal value);
|
||||
public boolean isReadOnlyAdvanceMeasurementDTOs();
|
||||
|
||||
public boolean greatThanMaxValue(AdvanceMeasurementDTO advanceDTO, BigDecimal value);
|
||||
public void cleanAdvance();
|
||||
|
||||
public boolean isGreatValidDate(AdvanceMeasurementDTO advanceDTO, Date value);
|
||||
public boolean isPrecisionValid(BigDecimal value);
|
||||
|
||||
public boolean greatThanMaxValue(BigDecimal value);
|
||||
|
||||
public boolean isGreatValidDate(Date value);
|
||||
|
||||
public BigDecimal getUnitPrecision();
|
||||
|
||||
public AdvanceMeasurementDTO getFirstAdvanceMeasurement(AdvanceAssigmentDTO advanceAssigmentDTO);
|
||||
|
||||
public void modifyListAdvanceMeasurement(AdvanceMeasurementDTO advanceMeasurementDTO);
|
||||
|
||||
public void accept()throws InstanceNotFoundException,
|
||||
DuplicateAdvanceAssigmentForOrderElementException,
|
||||
|
|
|
|||
|
|
@ -7,6 +7,8 @@ import static org.navalplanner.web.I18nHelper._;
|
|||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.SortedSet;
|
||||
import org.navalplanner.business.advance.entities.AdvanceAssigment;
|
||||
import org.navalplanner.business.advance.entities.AdvanceType;
|
||||
import org.navalplanner.business.advance.exceptions.DuplicateAdvanceAssigmentForOrderElementException;
|
||||
import org.navalplanner.web.common.IMessagesForUser;
|
||||
|
|
@ -19,6 +21,7 @@ import org.zkoss.zk.ui.event.Event;
|
|||
import org.zkoss.zk.ui.event.EventListener;
|
||||
import org.zkoss.zk.ui.event.Events;
|
||||
import org.zkoss.zk.ui.util.GenericForwardComposer;
|
||||
import org.zkoss.zul.Checkbox;
|
||||
import org.zkoss.zul.Combobox;
|
||||
import org.zkoss.zul.Comboitem;
|
||||
import org.zkoss.zul.Constraint;
|
||||
|
|
@ -30,6 +33,7 @@ import org.zkoss.zul.Listcell;
|
|||
import org.zkoss.zul.Listitem;
|
||||
import org.zkoss.zul.ListitemRenderer;
|
||||
import org.zkoss.zul.Radio;
|
||||
import org.zkoss.zul.Textbox;
|
||||
import org.zkoss.zul.Window;
|
||||
|
||||
/**
|
||||
|
|
@ -44,6 +48,8 @@ public class ManageOrderElementAdvancesController extends
|
|||
|
||||
private Window window;
|
||||
|
||||
private int indexSelectedItem = -1;
|
||||
|
||||
private IManageOrderElementAdvancesModel manageOrderElementAdvancesModel;
|
||||
|
||||
private AdvanceTypeListRenderer advanceTypeListRenderer = new AdvanceTypeListRenderer();
|
||||
|
|
@ -57,7 +63,11 @@ public class ManageOrderElementAdvancesController extends
|
|||
}
|
||||
|
||||
public List<AdvanceMeasurementDTO> getAdvanceMeasurementDTOs() {
|
||||
return manageOrderElementAdvancesModel.getAdvanceMeasurements();
|
||||
return manageOrderElementAdvancesModel.getAdvanceMeasurementDTOs();
|
||||
}
|
||||
|
||||
public List<AdvanceAssigmentDTO> getAdvanceAssigmentDTOs() {
|
||||
return manageOrderElementAdvancesModel.getAdvanceAssigmentDTOs();
|
||||
}
|
||||
|
||||
public void cancel() {
|
||||
|
|
@ -94,40 +104,79 @@ public class ManageOrderElementAdvancesController extends
|
|||
public void openWindow(IOrderElementModel orderElementModel) {
|
||||
this.manageOrderElementAdvancesModel.init(orderElementModel
|
||||
.getOrderElement());
|
||||
}
|
||||
|
||||
public void goToCreateLine() {
|
||||
manageOrderElementAdvancesModel.addNewLine();
|
||||
this.indexSelectedItem = -1;
|
||||
Util.reloadBindings(window);
|
||||
}
|
||||
|
||||
public void goToRemoveLine(){
|
||||
public void prepareEditAdvanceMeasurements(AdvanceAssigmentDTO advanceAssigmentDTO){
|
||||
manageOrderElementAdvancesModel.prepareEditAdvanceMeasurements(advanceAssigmentDTO);
|
||||
Listbox listAdvances = ((Listbox) window.getFellow("editAdvances"));
|
||||
this.indexSelectedItem = listAdvances.getIndexOfItem(listAdvances.getSelectedItem());
|
||||
Util.reloadBindings(window);
|
||||
}
|
||||
|
||||
public void goToCreateLineAdvanceAssigment() {
|
||||
manageOrderElementAdvancesModel.addNewLineAdvaceAssigment();
|
||||
Util.reloadBindings(window);
|
||||
}
|
||||
|
||||
public void goToCreateLineAdvanceMeasurement() {
|
||||
manageOrderElementAdvancesModel.addNewLineAdvaceMeasurement();
|
||||
Util.reloadBindings(window);
|
||||
}
|
||||
|
||||
public void goToRemoveLineAdvanceAssigment(){
|
||||
Listbox listAdvances = (Listbox) window.getFellow("editAdvances");
|
||||
Listitem listItem = listAdvances.getSelectedItem();
|
||||
Listitem listItem = listAdvances.getItemAtIndex(indexSelectedItem);
|
||||
if(listItem != null){
|
||||
AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO) listItem.getValue();
|
||||
manageOrderElementAdvancesModel.removeLine(advanceDTO);
|
||||
|
||||
AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO) listItem.getValue();
|
||||
manageOrderElementAdvancesModel.removeLineAdvanceAssigment(advanceAssigmentDTO);
|
||||
Util.reloadBindings(window);
|
||||
}
|
||||
}
|
||||
|
||||
public void goToRemoveLineAdvanceMeasurement(){
|
||||
Listbox listAdvancesMeasurement = (Listbox)window.getFellow("editAdvancesMeasurement");
|
||||
Listitem selectedItem = listAdvancesMeasurement.getSelectedItem();
|
||||
if(selectedItem != null){
|
||||
AdvanceMeasurementDTO advanceMeasurementDTO = (AdvanceMeasurementDTO) selectedItem.getValue();
|
||||
if(advanceMeasurementDTO != null){
|
||||
manageOrderElementAdvancesModel.removeLineAdvanceMeasurement(advanceMeasurementDTO);
|
||||
Util.reloadBindings(window);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<AdvanceType> getActivesAdvanceType() {
|
||||
return manageOrderElementAdvancesModel.getActivesAdvanceTypes();
|
||||
}
|
||||
|
||||
public boolean isReadOnlyAdvanceMeasurementDTOs(){
|
||||
return manageOrderElementAdvancesModel.isReadOnlyAdvanceMeasurementDTOs();
|
||||
}
|
||||
|
||||
public AdvanceTypeListRenderer getAdvancesRenderer() {
|
||||
return advanceTypeListRenderer;
|
||||
}
|
||||
|
||||
public void updatesValue(final Decimalbox item){
|
||||
this.setPercentage();
|
||||
this.setCurrentValue();
|
||||
this.cleanDate((Listitem)item.getParent().getParent());
|
||||
this.setCurrentDate();
|
||||
}
|
||||
|
||||
public class AdvanceTypeListRenderer implements ListitemRenderer {
|
||||
@Override
|
||||
public void render(Listitem listItem, Object data) throws Exception {
|
||||
final AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO) data;
|
||||
final AdvanceAssigmentDTO advanceDTO = (AdvanceAssigmentDTO) data;
|
||||
listItem.setValue(advanceDTO);
|
||||
listItem.setDraggable("true");
|
||||
listItem.setDroppable("true");
|
||||
|
||||
if ((advanceDTO.getIsNewObject())||(advanceDTO.getIsNewDTO())){
|
||||
if((advanceDTO.getType().equals(AdvanceAssigment.Type.DIRECT))
|
||||
&& ((advanceDTO.getIsNewObject())||(advanceDTO.getIsNewDTO()))){
|
||||
appendComboboxAdvancType(listItem);
|
||||
} else {
|
||||
appendLabelAdvanceType(listItem);
|
||||
|
|
@ -137,11 +186,12 @@ public class ManageOrderElementAdvancesController extends
|
|||
appendLabelPercentage(listItem);
|
||||
appendDateBoxDate(listItem);
|
||||
appendRadioSpread(listItem);
|
||||
appendCalculatedCheckbox(listItem);
|
||||
}
|
||||
}
|
||||
|
||||
private void appendComboboxAdvancType(final Listitem listItem){
|
||||
final AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO)listItem.getValue();
|
||||
final AdvanceAssigmentDTO advanceDTO = (AdvanceAssigmentDTO)listItem.getValue();
|
||||
final Combobox comboAdvanceTypes = new Combobox();
|
||||
final List<AdvanceType> listAdvanceType = manageOrderElementAdvancesModel
|
||||
.getActivesAdvanceTypes();
|
||||
|
|
@ -160,8 +210,8 @@ public class ManageOrderElementAdvancesController extends
|
|||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
setMaxValue(listItem,comboAdvanceTypes);
|
||||
cleanFields(listItem);
|
||||
setPercentage(listItem);
|
||||
cleanFields();
|
||||
setPercentage();
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -188,7 +238,7 @@ public class ManageOrderElementAdvancesController extends
|
|||
}
|
||||
|
||||
private void appendLabelAdvanceType(final Listitem listItem){
|
||||
final AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO)listItem.getValue();
|
||||
final AdvanceAssigmentDTO advanceDTO = (AdvanceAssigmentDTO)listItem.getValue();
|
||||
Label unitName = new Label(advanceDTO.getAdvanceType().getUnitName());
|
||||
Listcell listCell = new Listcell();
|
||||
listCell.appendChild(unitName);
|
||||
|
|
@ -196,27 +246,31 @@ public class ManageOrderElementAdvancesController extends
|
|||
}
|
||||
|
||||
private void appendDecimalBoxMaxValue(final Listitem listItem){
|
||||
final AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO)listItem.getValue();
|
||||
final AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO)listItem.getValue();
|
||||
Decimalbox maxValue = new Decimalbox();
|
||||
maxValue.setScale(2);
|
||||
|
||||
if(advanceAssigmentDTO.getType().equals(AdvanceAssigment.Type.CALCULATED))
|
||||
maxValue.setDisabled(true);
|
||||
|
||||
Util.bind(maxValue,
|
||||
new Util.Getter<BigDecimal>() {
|
||||
@Override
|
||||
public BigDecimal get() {
|
||||
return advanceDTO.getMaxValue();
|
||||
return advanceAssigmentDTO.getMaxValue();
|
||||
}
|
||||
}, new Util.Setter<BigDecimal>() {
|
||||
|
||||
@Override
|
||||
public void set(BigDecimal value) {
|
||||
advanceDTO.setMaxValue(value);
|
||||
advanceAssigmentDTO.setMaxValue(value);
|
||||
}
|
||||
});
|
||||
maxValue.addEventListener(Events.ON_CHANGE,
|
||||
new EventListener() {
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
setPercentage(listItem);
|
||||
setPercentage();
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -226,83 +280,106 @@ public class ManageOrderElementAdvancesController extends
|
|||
}
|
||||
|
||||
private void appendDecimalBoxValue(final Listitem listItem){
|
||||
final AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO)listItem.getValue();
|
||||
final AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO)listItem.getValue();
|
||||
Decimalbox value = new Decimalbox();
|
||||
value.setScale(2);
|
||||
Util.bind(value, new Util.Getter<BigDecimal>() {
|
||||
@Override
|
||||
public BigDecimal get() {
|
||||
return advanceDTO.getValue();
|
||||
}
|
||||
}, new Util.Setter<BigDecimal>() {
|
||||
value.setDisabled(true);
|
||||
|
||||
final AdvanceMeasurementDTO advanceMeasurementDTO =
|
||||
this.manageOrderElementAdvancesModel.getFirstAdvanceMeasurement(advanceAssigmentDTO);
|
||||
if(advanceMeasurementDTO != null){
|
||||
Util.bind(value, new Util.Getter<BigDecimal>() {
|
||||
@Override
|
||||
public BigDecimal get() {
|
||||
return advanceMeasurementDTO.getValue();
|
||||
}
|
||||
}, new Util.Setter<BigDecimal>() {
|
||||
|
||||
@Override
|
||||
public void set(BigDecimal value) {
|
||||
advanceDTO.setValue(value);
|
||||
advanceMeasurementDTO.setValue(value);
|
||||
}
|
||||
});
|
||||
value.setConstraint(checkValidValue());
|
||||
value.addEventListener(Events.ON_CHANGE,
|
||||
new EventListener() {
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
setPercentage(listItem);
|
||||
cleanDate(listItem);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
}
|
||||
Listcell listCell = new Listcell();
|
||||
listCell.appendChild(value);
|
||||
listItem.appendChild(listCell);
|
||||
}
|
||||
|
||||
private void appendLabelPercentage(final Listitem listItem){
|
||||
final AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO)listItem.getValue();
|
||||
final AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO)listItem.getValue();
|
||||
Label percentage = new Label();
|
||||
percentage.setValue(advanceDTO.getPercentage() + " %");
|
||||
|
||||
final AdvanceMeasurementDTO advanceMeasurementDTO =
|
||||
this.manageOrderElementAdvancesModel.getFirstAdvanceMeasurement(advanceAssigmentDTO);
|
||||
if(advanceMeasurementDTO != null){
|
||||
percentage.setValue(advanceMeasurementDTO.getPercentage());
|
||||
}
|
||||
|
||||
Listcell listCell = new Listcell();
|
||||
listCell.appendChild(percentage);
|
||||
listItem.appendChild(listCell);
|
||||
}
|
||||
|
||||
private void appendDateBoxDate(final Listitem listItem){
|
||||
final AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO)listItem.getValue();
|
||||
final AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO)listItem.getValue();
|
||||
Datebox date = new Datebox();
|
||||
Util.bind(date, new Util.Getter<Date>() {
|
||||
date.setDisabled(true);
|
||||
|
||||
final AdvanceMeasurementDTO advanceMeasurementDTO =
|
||||
this.manageOrderElementAdvancesModel.getFirstAdvanceMeasurement(advanceAssigmentDTO);
|
||||
if(advanceMeasurementDTO != null){
|
||||
|
||||
Util.bind(date, new Util.Getter<Date>() {
|
||||
@Override
|
||||
public Date get() {
|
||||
return advanceDTO.getDate();
|
||||
return advanceMeasurementDTO.getDate();
|
||||
}
|
||||
}, new Util.Setter<Date>() {
|
||||
}, new Util.Setter<Date>() {
|
||||
|
||||
@Override
|
||||
public void set(Date value) {
|
||||
advanceDTO.setDate(value);
|
||||
advanceMeasurementDTO.setDate(value);
|
||||
}
|
||||
});
|
||||
date.setConstraint(checkValidDate());
|
||||
});
|
||||
}
|
||||
Listcell listCell = new Listcell();
|
||||
listCell.appendChild(date);
|
||||
listItem.appendChild(listCell);
|
||||
}
|
||||
|
||||
private void appendRadioSpread(final Listitem listItem){
|
||||
final AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO)listItem.getValue();
|
||||
final AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO)listItem.getValue();
|
||||
Radio reportGlobalAdvance = new Radio();
|
||||
reportGlobalAdvance.setChecked(advanceDTO.getReportGlobalAdvance());
|
||||
reportGlobalAdvance.setChecked(advanceAssigmentDTO.getReportGlobalAdvance());
|
||||
|
||||
if(advanceAssigmentDTO.getType().equals(AdvanceAssigment.Type.CALCULATED))
|
||||
reportGlobalAdvance.setDisabled(true);
|
||||
|
||||
reportGlobalAdvance.addEventListener(Events.ON_CHECK,
|
||||
new EventListener() {
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
setReportGlobalAdvance(listItem);
|
||||
}
|
||||
new EventListener() {
|
||||
@Override
|
||||
public void onEvent(Event event) throws Exception {
|
||||
setReportGlobalAdvance(listItem);
|
||||
}
|
||||
});
|
||||
Listcell listCell = new Listcell();
|
||||
listCell.appendChild(reportGlobalAdvance);
|
||||
listItem.appendChild(listCell);
|
||||
}
|
||||
|
||||
private void appendCalculatedCheckbox(final Listitem listItem){
|
||||
final AdvanceAssigmentDTO advanceDTO = (AdvanceAssigmentDTO)listItem.getValue();
|
||||
Checkbox calculated = new Checkbox();
|
||||
boolean isCalculated = advanceDTO.getType().equals(AdvanceAssigment.Type.CALCULATED);
|
||||
calculated.setChecked(isCalculated);
|
||||
calculated.setDisabled(true);
|
||||
|
||||
Listcell listCell = new Listcell();
|
||||
listCell.appendChild(calculated);
|
||||
listItem.appendChild(listCell);
|
||||
}
|
||||
|
||||
private void setMaxValue(final Listitem item,Combobox comboAdvanceTypes) {
|
||||
Listcell listCell = (Listcell)item.getChildren().get(1);
|
||||
Decimalbox miBox = ((Decimalbox) listCell.getFirstChild());
|
||||
|
|
@ -310,44 +387,80 @@ public class ManageOrderElementAdvancesController extends
|
|||
if(selectedItem != null){
|
||||
AdvanceType advanceType = ((AdvanceType) selectedItem.getValue());
|
||||
if(advanceType != null){
|
||||
AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO)item.getValue();
|
||||
AdvanceAssigmentDTO advanceDTO = (AdvanceAssigmentDTO)item.getValue();
|
||||
advanceDTO.setMaxValue(advanceType.getDefaultMaxValue());
|
||||
miBox.setValue(advanceType.getDefaultMaxValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setPercentage(final Listitem item){
|
||||
final AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO) item.getValue();
|
||||
Listcell celdaPercentage = (Listcell)item.getChildren().get(3);
|
||||
((Label)celdaPercentage.getFirstChild()).setValue(advanceDTO.getPercentage()+" %");
|
||||
private void setPercentage(){
|
||||
if(this.indexSelectedItem >= 0){
|
||||
Listbox listAdvances = ((Listbox) window.getFellow("editAdvances"));
|
||||
Listitem selectedItem = listAdvances.getItemAtIndex(indexSelectedItem);
|
||||
AdvanceAssigmentDTO advanceAssigmentDTO =
|
||||
(AdvanceAssigmentDTO) selectedItem.getValue();
|
||||
|
||||
final AdvanceMeasurementDTO greatAdvanceMeasurementDTO =
|
||||
this.manageOrderElementAdvancesModel.getFirstAdvanceMeasurement(advanceAssigmentDTO);
|
||||
if(greatAdvanceMeasurementDTO != null){
|
||||
Listcell percentage = (Listcell)selectedItem.getChildren().get(3);
|
||||
((Label)percentage.getFirstChild()).setValue(greatAdvanceMeasurementDTO.getPercentage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setCurrentValue(){
|
||||
if(this.indexSelectedItem >= 0){
|
||||
Listbox listAdvances = ((Listbox) window.getFellow("editAdvances"));
|
||||
Listitem selectedItem = listAdvances.getItemAtIndex(indexSelectedItem);
|
||||
AdvanceAssigmentDTO advanceAssigmentDTO =
|
||||
(AdvanceAssigmentDTO) selectedItem.getValue();
|
||||
final AdvanceMeasurementDTO greatAdvanceMeasurementDTO =
|
||||
this.manageOrderElementAdvancesModel.getFirstAdvanceMeasurement(advanceAssigmentDTO);
|
||||
if(greatAdvanceMeasurementDTO != null){
|
||||
Listcell value = (Listcell)selectedItem.getChildren().get(2);
|
||||
((Decimalbox)value.getFirstChild()).setValue(greatAdvanceMeasurementDTO.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void setCurrentDate(Listitem item){
|
||||
this.manageOrderElementAdvancesModel.modifyListAdvanceMeasurement(
|
||||
(AdvanceMeasurementDTO)item.getValue());
|
||||
Util.reloadBindings(window.getFellow("editAdvancesMeasurement"));
|
||||
|
||||
setCurrentDate();
|
||||
this.setPercentage();
|
||||
this.setCurrentValue();
|
||||
}
|
||||
|
||||
private void setCurrentDate(){
|
||||
if(this.indexSelectedItem >= 0){
|
||||
Listbox listAdvances = ((Listbox) window.getFellow("editAdvances"));
|
||||
Listitem selectedItem = listAdvances.getItemAtIndex(indexSelectedItem);
|
||||
AdvanceAssigmentDTO advanceAssigmentDTO =
|
||||
(AdvanceAssigmentDTO) selectedItem.getValue();
|
||||
final AdvanceMeasurementDTO greatAdvanceMeasurementDTO =
|
||||
this.manageOrderElementAdvancesModel.getFirstAdvanceMeasurement(advanceAssigmentDTO);
|
||||
if(greatAdvanceMeasurementDTO != null){
|
||||
Listcell date = (Listcell)selectedItem.getChildren().get(4);
|
||||
((Datebox)date.getFirstChild()).setValue(greatAdvanceMeasurementDTO.getDate());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void cleanDate(final Listitem item){
|
||||
final AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO) item.getValue();
|
||||
advanceDTO.setDate(null);
|
||||
Listcell celdaDate = (Listcell)item.getChildren().get(4);
|
||||
final AdvanceMeasurementDTO advanceMeasurementDTO = (AdvanceMeasurementDTO) item.getValue();
|
||||
advanceMeasurementDTO.setDate(null);
|
||||
Listcell celdaDate = (Listcell)item.getChildren().get(2);
|
||||
((Datebox)celdaDate.getFirstChild()).setValue(null);
|
||||
}
|
||||
|
||||
private void cleanFields(final Listitem item){
|
||||
AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO) item.getValue();
|
||||
|
||||
Listcell celdaValue = (Listcell) item.getChildren().get(2);
|
||||
((Decimalbox)celdaValue.getFirstChild()).setValue(null);
|
||||
advanceDTO.setValue(null);
|
||||
|
||||
Listcell celdaPercentage = (Listcell) item.getChildren().get(3);
|
||||
((Label)celdaPercentage.getFirstChild()).setValue(" %");
|
||||
advanceDTO.setPercentage("");
|
||||
|
||||
Listcell celdaDate = (Listcell) item.getChildren().get(4);
|
||||
((Datebox)celdaDate.getFirstChild()).setValue(null);
|
||||
advanceDTO.setDate(null);
|
||||
|
||||
Listcell celdaSpread = (Listcell) item.getChildren().get(5);
|
||||
((Radio)celdaSpread.getFirstChild()).setChecked(false);
|
||||
advanceDTO.setReportGlobalAdvance(false);
|
||||
private void cleanFields(){
|
||||
this.manageOrderElementAdvancesModel.cleanAdvance();
|
||||
Util.reloadBindings(window);
|
||||
}
|
||||
|
||||
private void setReportGlobalAdvance(final Listitem item){
|
||||
|
|
@ -356,33 +469,35 @@ public class ManageOrderElementAdvancesController extends
|
|||
if(listAdvances.getChildren().get(i) instanceof Listitem){
|
||||
Listitem listItem = (Listitem) listAdvances.getChildren().get(i);
|
||||
Listcell celdaSpread = (Listcell) listItem.getChildren().get(5);
|
||||
((Radio)celdaSpread.getFirstChild()).setChecked(false);
|
||||
((AdvanceMeasurementDTO)listItem.getValue()).setReportGlobalAdvance(false);
|
||||
Radio radioSpread = ((Radio)celdaSpread.getFirstChild());
|
||||
if(!radioSpread.isDisabled()){
|
||||
radioSpread.setChecked(false);
|
||||
((AdvanceAssigmentDTO)listItem.getValue()).setReportGlobalAdvance(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
Listcell celdaSpread = (Listcell) item.getChildren().get(5);
|
||||
((Radio)celdaSpread.getFirstChild()).setChecked(true);
|
||||
((AdvanceMeasurementDTO)item.getValue()).setReportGlobalAdvance(true);
|
||||
((AdvanceAssigmentDTO)item.getValue()).setReportGlobalAdvance(true);
|
||||
}
|
||||
|
||||
private Constraint checkValidValue() {
|
||||
|
||||
public Constraint checkValidValue() {
|
||||
Constraint newConstraint = new Constraint() {
|
||||
@Override
|
||||
public void validate(Component comp, Object value)
|
||||
throws WrongValueException {
|
||||
if (((BigDecimal) value) != null){
|
||||
Listitem listItem = ((Listitem)comp.getParent().getParent());
|
||||
AdvanceMeasurementDTO advanceDTO = ((AdvanceMeasurementDTO)listItem.getValue());
|
||||
if(manageOrderElementAdvancesModel.greatThanMaxValue(advanceDTO,(BigDecimal)value)){
|
||||
if(manageOrderElementAdvancesModel.greatThanMaxValue((BigDecimal)value)){
|
||||
throw new WrongValueException(
|
||||
comp,
|
||||
_("Value is not valid, the current value must be less than max value"));
|
||||
}
|
||||
if (!(manageOrderElementAdvancesModel.isPrecisionValid(advanceDTO,(BigDecimal)value))) {
|
||||
if (!(manageOrderElementAdvancesModel.isPrecisionValid((BigDecimal)value))) {
|
||||
throw new WrongValueException(
|
||||
comp,
|
||||
_("Value is not valid, the Precision value must be exact "
|
||||
+advanceDTO.getAdvanceType().getUnitPrecision()));
|
||||
+manageOrderElementAdvancesModel.getUnitPrecision()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -390,15 +505,13 @@ public class ManageOrderElementAdvancesController extends
|
|||
return newConstraint;
|
||||
}
|
||||
|
||||
private Constraint checkValidDate() {
|
||||
public Constraint checkValidDate() {
|
||||
Constraint newConstraint = new Constraint() {
|
||||
@Override
|
||||
public void validate(Component comp, Object value)
|
||||
throws WrongValueException {
|
||||
if (((Date) value) != null) {
|
||||
Listitem listItem = ((Listitem)comp.getParent().getParent());
|
||||
AdvanceMeasurementDTO advanceDTO = ((AdvanceMeasurementDTO)listItem.getValue());
|
||||
if(!manageOrderElementAdvancesModel.isGreatValidDate(advanceDTO,(Date)value)){
|
||||
if(!manageOrderElementAdvancesModel.isGreatValidDate((Date)value)){
|
||||
throw new WrongValueException(
|
||||
comp,
|
||||
_("The date is not valid, the date must be great than the current date of the other advances measurement"));
|
||||
|
|
@ -410,13 +523,29 @@ public class ManageOrderElementAdvancesController extends
|
|||
}
|
||||
|
||||
private boolean validateDataForm(){
|
||||
return ((validateListAdvanceAssigment())
|
||||
&&(validateListAdvanceMeasurement()));
|
||||
}
|
||||
|
||||
private boolean validateListAdvanceAssigment(){
|
||||
Listbox listAdvances = (Listbox) window.getFellow("editAdvances");
|
||||
for(int i=0; i< listAdvances.getChildren().size(); i++){
|
||||
if(listAdvances.getChildren().get(i) instanceof Listitem){
|
||||
Listitem listItem = (Listitem) listAdvances.getChildren().get(i);
|
||||
AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO) listItem.getValue();
|
||||
AdvanceAssigmentDTO advanceDTO = (AdvanceAssigmentDTO) listItem.getValue();
|
||||
if(advanceDTO.getAdvanceType() == null)return false;
|
||||
if(advanceDTO.getMaxValue() == null)return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean validateListAdvanceMeasurement(){
|
||||
Listbox listAdvances = (Listbox) window.getFellow("editAdvancesMeasurement");
|
||||
for(int i=0; i< listAdvances.getChildren().size(); i++){
|
||||
if(listAdvances.getChildren().get(i) instanceof Listitem){
|
||||
Listitem listItem = (Listitem) listAdvances.getChildren().get(i);
|
||||
AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO) listItem.getValue();
|
||||
if(advanceDTO.getValue() == null)return false;
|
||||
if(advanceDTO.getDate() == null)return false;
|
||||
}
|
||||
|
|
@ -429,11 +558,14 @@ public class ManageOrderElementAdvancesController extends
|
|||
boolean existItems = false;
|
||||
for(int i=0; i< listAdvances.getChildren().size(); i++){
|
||||
if(listAdvances.getChildren().get(i) instanceof Listitem){
|
||||
existItems = true;
|
||||
Listitem listItem = (Listitem) listAdvances.getChildren().get(i);
|
||||
AdvanceMeasurementDTO advanceDTO = (AdvanceMeasurementDTO) listItem.getValue();
|
||||
if(advanceDTO.getReportGlobalAdvance())
|
||||
return true;
|
||||
AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO) listItem.getValue();
|
||||
if(advanceAssigmentDTO.getType().equals(AdvanceAssigment.Type.DIRECT)){
|
||||
existItems = true;
|
||||
if(advanceAssigmentDTO.getReportGlobalAdvance()){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!existItems) return true;
|
||||
|
|
|
|||
|
|
@ -4,15 +4,19 @@ package org.navalplanner.web.orders;
|
|||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
import org.navalplanner.business.common.exceptions.InstanceNotFoundException;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.hibernate.HibernateException;
|
||||
import org.navalplanner.business.advance.daos.IAdvanceAssigmentDAO;
|
||||
import org.navalplanner.business.advance.daos.IAdvanceMeasurementDAO;
|
||||
import org.navalplanner.business.advance.daos.IAdvanceTypeDAO;
|
||||
import org.navalplanner.business.advance.entities.AdvanceAssigment;
|
||||
import org.navalplanner.business.advance.entities.AdvanceMeasurement;
|
||||
import org.navalplanner.business.advance.entities.AdvanceMeasurementComparator;
|
||||
import org.navalplanner.business.advance.entities.AdvanceType;
|
||||
import org.navalplanner.business.orders.daos.IOrderElementDAO;
|
||||
import org.navalplanner.business.orders.entities.OrderElement;
|
||||
|
|
@ -40,12 +44,16 @@ public class ManageOrderElementAdvancesModel implements
|
|||
|
||||
private OrderElement orderElement;
|
||||
|
||||
private List<AdvanceMeasurementDTO> advanceMeasurementDTOs;
|
||||
private AdvanceAssigmentDTO advanceAssigmentDTO;
|
||||
|
||||
private List<AdvanceAssigmentDTO> advanceAssigmentDTOs;
|
||||
|
||||
private List<AdvanceAssigment> listAdvanceAssigments;
|
||||
|
||||
private SortedSet<AdvanceMeasurement> listAdvanceMeasurements;
|
||||
|
||||
private List<AdvanceType> listAdvanceTypes;
|
||||
|
||||
private List<AdvanceMeasurement> listAdvanceMeasurement;
|
||||
|
||||
@Autowired
|
||||
public ManageOrderElementAdvancesModel(
|
||||
IAdvanceMeasurementDAO advanceMeasurementDAO,
|
||||
|
|
@ -59,52 +67,92 @@ public class ManageOrderElementAdvancesModel implements
|
|||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<AdvanceMeasurementDTO> getAdvanceMeasurements() {
|
||||
if (this.orderElement == null) {
|
||||
public List<AdvanceMeasurementDTO> getAdvanceMeasurementDTOs() {
|
||||
if((this.advanceAssigmentDTO == null) ||
|
||||
(this.orderElement == null)) {
|
||||
return new ArrayList<AdvanceMeasurementDTO>();
|
||||
}
|
||||
return this.advanceMeasurementDTOs;
|
||||
return this.advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<AdvanceAssigmentDTO> getAdvanceAssigmentDTOs(){
|
||||
if(this.orderElement == null){
|
||||
return new ArrayList<AdvanceAssigmentDTO>();
|
||||
}
|
||||
return this.advanceAssigmentDTOs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepareEditAdvanceMeasurements(AdvanceAssigmentDTO advanceAssigmentDTO){
|
||||
this.advanceAssigmentDTO = advanceAssigmentDTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public void init(OrderElement orderElement) {
|
||||
this.orderElement = orderElement;
|
||||
this.advanceAssigmentDTO = null;
|
||||
if (orderElement != null){
|
||||
loadAdvanceTypes();
|
||||
reattchmentOrderElement();
|
||||
createAdvanceMeasurementDTOs();
|
||||
reattachmentOrderElement();
|
||||
createAdvanceDTOs();
|
||||
}
|
||||
}
|
||||
|
||||
public void reattchmentOrderElement() {
|
||||
public void reattachmentOrderElement() {
|
||||
orderElementDAO.save(orderElement);
|
||||
}
|
||||
|
||||
public void createAdvanceMeasurementDTOs() {
|
||||
this.listAdvanceMeasurement = new ArrayList<AdvanceMeasurement>();
|
||||
this.advanceMeasurementDTOs = new ArrayList<AdvanceMeasurementDTO>();
|
||||
public void createAdvanceDTOs() {
|
||||
this.advanceAssigmentDTOs = new ArrayList<AdvanceAssigmentDTO>();
|
||||
this.listAdvanceAssigments = new ArrayList<AdvanceAssigment>();
|
||||
this.listAdvanceMeasurements = new TreeSet<AdvanceMeasurement>(new AdvanceMeasurementComparator());
|
||||
for (AdvanceAssigment advanceAssigment : this.orderElement
|
||||
.getAdvanceAssigments()) {
|
||||
AdvanceMeasurement advanceMeasurement = ((SortedSet<AdvanceMeasurement>) advanceAssigment
|
||||
.getAdvanceMeasurements()).last();
|
||||
AdvanceMeasurementDTO advanceDTO = new AdvanceMeasurementDTO(
|
||||
advanceAssigment.getAdvanceType(), advanceAssigment,
|
||||
.getAdvanceAssigments()) {
|
||||
AdvanceAssigmentDTO advanceAssigmentDTO = new AdvanceAssigmentDTO(
|
||||
advanceAssigment.getAdvanceType(), advanceAssigment,
|
||||
advanceAssigment.getAdvanceMeasurements());
|
||||
|
||||
for (AdvanceMeasurement advanceMeasurement : advanceAssigment.
|
||||
getAdvanceMeasurements()) {
|
||||
AdvanceMeasurementDTO advanceMeasurementDTO = new AdvanceMeasurementDTO(
|
||||
advanceMeasurement);
|
||||
this.listAdvanceMeasurement.add(advanceMeasurement);
|
||||
this.advanceMeasurementDTOs.add(advanceDTO);
|
||||
|
||||
advanceAssigmentDTO.getAdvanceMeasurementDTOs().add(advanceMeasurementDTO);
|
||||
advanceMeasurementDTO.setAdvanceAssigmentDTO(advanceAssigmentDTO);
|
||||
this.listAdvanceMeasurements.add(advanceMeasurement);
|
||||
}
|
||||
this.advanceAssigmentDTOs.add(advanceAssigmentDTO);
|
||||
this.listAdvanceAssigments.add(advanceAssigment);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addNewLine() {
|
||||
AdvanceMeasurementDTO newAdvance = new AdvanceMeasurementDTO();
|
||||
this.advanceMeasurementDTOs.add(newAdvance);
|
||||
public void addNewLineAdvaceAssigment() {
|
||||
AdvanceAssigmentDTO newAdvance = new AdvanceAssigmentDTO();
|
||||
this.advanceAssigmentDTOs.add(newAdvance);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeLine(AdvanceMeasurementDTO advanceDTO) {
|
||||
this.advanceMeasurementDTOs.remove(advanceDTO);
|
||||
public void addNewLineAdvaceMeasurement() {
|
||||
if(this.advanceAssigmentDTO != null){
|
||||
AdvanceMeasurementDTO newAdvance = new AdvanceMeasurementDTO();
|
||||
newAdvance.setAdvanceAssigmentDTO(advanceAssigmentDTO);
|
||||
this.advanceAssigmentDTO.getAdvanceMeasurementDTOs().add(newAdvance);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeLineAdvanceAssigment(AdvanceAssigmentDTO advanceDTO) {
|
||||
this.advanceAssigmentDTOs.remove(advanceDTO);
|
||||
this.advanceAssigmentDTO = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeLineAdvanceMeasurement(AdvanceMeasurementDTO advanceDTO) {
|
||||
this.advanceAssigmentDTO.getAdvanceMeasurementDTOs().remove(advanceDTO);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -120,114 +168,571 @@ public class ManageOrderElementAdvancesModel implements
|
|||
this.listAdvanceTypes = this.advanceTypeDAO.findActivesAdvanceTypes(orderElement);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isReadOnlyAdvanceMeasurementDTOs(){
|
||||
if(this.advanceAssigmentDTO == null) return true;
|
||||
return this.advanceAssigmentDTO.getType().equals(AdvanceAssigment.Type.CALCULATED);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanAdvance(){
|
||||
if(this.advanceAssigmentDTO != null){
|
||||
this.advanceAssigmentDTO.setReportGlobalAdvance(false);
|
||||
List<AdvanceMeasurementDTO> listAdvanceMeasurementDTOs =
|
||||
this.advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView();
|
||||
for(AdvanceMeasurementDTO advanceMeasurementDTO : listAdvanceMeasurementDTOs){
|
||||
advanceMeasurementDTO.setValue(BigDecimal.ZERO);
|
||||
advanceMeasurementDTO.setDate(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public void accept()throws InstanceNotFoundException,
|
||||
DuplicateAdvanceAssigmentForOrderElementException,
|
||||
DuplicateValueTrueReportGlobalAdvanceException{
|
||||
orderElementDAO.checkVersion(orderElement);
|
||||
reattachmentOrderElement();
|
||||
validateBasicData();
|
||||
}
|
||||
|
||||
private void validateBasicData() throws InstanceNotFoundException,
|
||||
DuplicateAdvanceAssigmentForOrderElementException,
|
||||
DuplicateValueTrueReportGlobalAdvanceException{
|
||||
updateRemoveAdvanceMeasurement();
|
||||
for(AdvanceMeasurementDTO advanceDTO : this.advanceMeasurementDTOs){
|
||||
validateBasicData(advanceDTO);
|
||||
DuplicateAdvanceAssigmentForOrderElementException,
|
||||
DuplicateValueTrueReportGlobalAdvanceException{
|
||||
updateRemoveAdvances();
|
||||
for(AdvanceAssigmentDTO advanceAssigmentDTO : this.advanceAssigmentDTOs){
|
||||
validateBasicData(advanceAssigmentDTO);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateRemoveAdvanceMeasurement(){
|
||||
for(AdvanceMeasurement advanceMeasurement : this.listAdvanceMeasurement){
|
||||
if(!yetExistAdvanceMeasurement(advanceMeasurement)){
|
||||
removeAdvanceMeasurement(advanceMeasurement);
|
||||
private void updateRemoveAdvances(){
|
||||
for(AdvanceAssigment advanceAssigment : this.listAdvanceAssigments){
|
||||
AdvanceAssigmentDTO advanceAssigmentDTO = yetExistAdvanceAssigment(advanceAssigment);
|
||||
if(advanceAssigmentDTO == null){
|
||||
updateRemoveCalculatedAdvanceAssigment(orderElement,advanceAssigment);
|
||||
removeAdvanceAssigment(advanceAssigment);
|
||||
}else{
|
||||
for(AdvanceMeasurement advanceMeasurement : this.listAdvanceMeasurements){
|
||||
if(!yetExistAdvanceMeasurement(advanceAssigmentDTO,advanceMeasurement)){
|
||||
updateRemoveCalculatedAdvanceMeasurement(orderElement,
|
||||
advanceAssigment,advanceMeasurement);
|
||||
removeAdvanceMeasurement(advanceMeasurement);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void validateBasicData(AdvanceMeasurementDTO advanceDTO)
|
||||
throws InstanceNotFoundException,DuplicateAdvanceAssigmentForOrderElementException,
|
||||
private void validateBasicData(AdvanceAssigmentDTO advanceAssigmentDTO)
|
||||
throws InstanceNotFoundException,DuplicateAdvanceAssigmentForOrderElementException,
|
||||
DuplicateValueTrueReportGlobalAdvanceException{
|
||||
if(advanceDTO.getIsNewDTO()){
|
||||
AdvanceAssigment newAdvanceAssigment = createNewAdvance(advanceDTO);
|
||||
if(advanceAssigmentDTO.getIsNewDTO()){
|
||||
AdvanceAssigment newAdvanceAssigment = createNewAdvance(advanceAssigmentDTO);
|
||||
addCalculatedAdvanceAssigmentToAncestors(this.orderElement,
|
||||
advanceAssigmentDTO,newAdvanceAssigment);
|
||||
addAdvanceAssigment(newAdvanceAssigment);
|
||||
}else{
|
||||
if((advanceDTO.getIsNewObject())||
|
||||
(advanceDTO.getAdvanceMeasurement().getDate().compareTo(advanceDTO.getDate()) == 0)){
|
||||
updateAdvanceMeasurement(advanceDTO);
|
||||
AdvanceAssigment newAdvanceAssigment = advanceAssigmentDTO.getAdvanceAssigment();
|
||||
addCalculatedAdvanceAssigmentToAncestors(this.orderElement,
|
||||
advanceAssigmentDTO,newAdvanceAssigment);
|
||||
updateAdvanceAssigment(advanceAssigmentDTO);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateAdvanceAssigment(AdvanceAssigmentDTO advanceAssigmentDTO){
|
||||
//Removed the advance and add a new advanceAssigment
|
||||
AdvanceAssigment advanceAssigment = advanceAssigmentDTO.getAdvanceAssigment();
|
||||
for(AdvanceMeasurementDTO advanceMeasurementDTO :
|
||||
advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView()){
|
||||
if(advanceMeasurementDTO.getIsNewDTO()){
|
||||
AdvanceMeasurement newAdvanceMeasurement =
|
||||
createAdvanceMeasurement(advanceMeasurementDTO);
|
||||
advanceAssigment.getAdvanceMeasurements().add(newAdvanceMeasurement);
|
||||
}else{
|
||||
addAdvanceMeasurement(advanceDTO);
|
||||
AdvanceMeasurement newAdvanceMeasurement =
|
||||
createAdvanceMeasurement(advanceMeasurementDTO);
|
||||
removeAdvanceMeasurement(advanceMeasurementDTO.getAdvanceMeasurement());
|
||||
advanceAssigment.getAdvanceMeasurements().add(newAdvanceMeasurement);
|
||||
//updateAdvanceMeasurement(advanceMeasurementDTO);
|
||||
}
|
||||
}
|
||||
//Update changes in AdvanceAssigment
|
||||
advanceAssigment.setReportGlobalAdvance(advanceAssigmentDTO.getReportGlobalAdvance());
|
||||
advanceAssigment.setMaxValue(advanceAssigmentDTO.getMaxValue());
|
||||
advanceAssigment.setAdvanceType(advanceAssigmentDTO.getAdvanceType());
|
||||
}
|
||||
|
||||
private void updateAdvanceMeasurement(AdvanceMeasurementDTO advanceDTO){
|
||||
AdvanceAssigment advanceAssigment = advanceDTO.getAdvanceAssigment();
|
||||
advanceAssigment.setReportGlobalAdvance(advanceDTO.getReportGlobalAdvance());
|
||||
AdvanceMeasurement advanceMeasurement = advanceDTO.getAdvanceMeasurement();
|
||||
advanceMeasurement.setValue(advanceDTO.getValue());
|
||||
advanceMeasurement.setMaxValue(advanceDTO.getMaxValue());
|
||||
if(advanceDTO.getIsNewObject()){
|
||||
advanceMeasurement.setDate(advanceDTO.getDate());
|
||||
advanceAssigment.setAdvanceType(advanceDTO.getAdvanceType());
|
||||
}
|
||||
}
|
||||
|
||||
private void addAdvanceMeasurement(AdvanceMeasurementDTO advanceDTO){
|
||||
AdvanceMeasurement newAdvanceMeasurement = AdvanceMeasurement.create(advanceDTO.getDate(),
|
||||
advanceDTO.getValue(),advanceDTO.getMaxValue());
|
||||
AdvanceAssigment advanceAssigment = advanceDTO.getAdvanceAssigment();
|
||||
private AdvanceMeasurement createAdvanceMeasurement(AdvanceMeasurementDTO advanceMeasurementDTO){
|
||||
AdvanceMeasurement newAdvanceMeasurement = AdvanceMeasurement.create(
|
||||
advanceMeasurementDTO.getDate(),advanceMeasurementDTO.getValue());
|
||||
AdvanceAssigment advanceAssigment = advanceMeasurementDTO.getAdvanceAssigmentDTO().
|
||||
getAdvanceAssigment();
|
||||
newAdvanceMeasurement.setAdvanceAssigment(advanceAssigment);
|
||||
advanceAssigment.getAdvanceMeasurements().add(newAdvanceMeasurement);
|
||||
return newAdvanceMeasurement;
|
||||
}
|
||||
|
||||
private boolean yetExistAdvanceMeasurement(AdvanceMeasurement advanceMeasurement){
|
||||
for(AdvanceMeasurementDTO advanceDTO : this.advanceMeasurementDTOs){
|
||||
private void updateAdvanceMeasurement(AdvanceMeasurementDTO advanceMeasurementDTO){
|
||||
AdvanceMeasurement advanceMeasurement = advanceMeasurementDTO.getAdvanceMeasurement();
|
||||
advanceMeasurement.setValue(advanceMeasurementDTO.getValue());
|
||||
advanceMeasurement.setDate(advanceMeasurementDTO.getDate());
|
||||
}
|
||||
|
||||
private AdvanceAssigmentDTO yetExistAdvanceAssigment(AdvanceAssigment advanceAssigment){
|
||||
for(AdvanceAssigmentDTO advanceDTO : this.advanceAssigmentDTOs){
|
||||
if((!advanceDTO.getIsNewDTO()) &&
|
||||
(advanceDTO.getAdvanceMeasurement().equals(advanceMeasurement)))
|
||||
(advanceDTO.getAdvanceAssigment().getId() == advanceAssigment.getId()))
|
||||
return advanceDTO;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean yetExistAdvanceMeasurement(AdvanceAssigmentDTO advanceAssigmentDTO,
|
||||
AdvanceMeasurement advanceMeasurement){
|
||||
for(AdvanceMeasurementDTO advanceDTO :
|
||||
advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView()){
|
||||
if((!advanceDTO.getIsNewDTO()) &&
|
||||
(advanceDTO.getAdvanceMeasurement().getId() == advanceMeasurement.getId()))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
private AdvanceAssigment createNewAdvance(AdvanceMeasurementDTO advanceDTO)
|
||||
throws InstanceNotFoundException{
|
||||
//create AdvanceMeasurement
|
||||
AdvanceMeasurement newAdvanceMeasurement = AdvanceMeasurement.create(advanceDTO.getDate(),
|
||||
advanceDTO.getValue(),advanceDTO.getMaxValue());
|
||||
private AdvanceAssigment createNewAdvance(AdvanceAssigmentDTO advanceAssigmentDTO)
|
||||
throws InstanceNotFoundException{
|
||||
//create AdvanceAssigment
|
||||
AdvanceAssigment newAdvanceAssigment = AdvanceAssigment.create(
|
||||
advanceAssigmentDTO.getReportGlobalAdvance(),
|
||||
advanceAssigmentDTO.getMaxValue());
|
||||
newAdvanceAssigment.setAdvanceType(advanceAssigmentDTO.getAdvanceType());
|
||||
newAdvanceAssigment.setOrderElement(this.orderElement);
|
||||
newAdvanceAssigment.setType(AdvanceAssigment.Type.DIRECT);
|
||||
|
||||
//create AdvanceAssigment
|
||||
AdvanceAssigment newAdvanceAssigment = AdvanceAssigment.create(
|
||||
advanceDTO.getReportGlobalAdvance());
|
||||
newAdvanceAssigment.setAdvanceType(advanceDTO.getAdvanceType());
|
||||
newAdvanceAssigment.setOrderElement(this.orderElement);
|
||||
//create AdvanceMeasurement
|
||||
for(AdvanceMeasurementDTO advanceMeasurementDTO
|
||||
:advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView()){
|
||||
AdvanceMeasurement newAdvanceMeasurement = AdvanceMeasurement.create(
|
||||
advanceMeasurementDTO.getDate(),advanceMeasurementDTO.getValue());
|
||||
|
||||
//link AdvanceMeasurement to AdvanceAssigment
|
||||
newAdvanceMeasurement.setAdvanceAssigment(newAdvanceAssigment);
|
||||
newAdvanceAssigment.getAdvanceMeasurements().add(newAdvanceMeasurement);
|
||||
|
||||
return newAdvanceAssigment;
|
||||
}
|
||||
advanceAssigmentDTO.setAdvanceAssigment(newAdvanceAssigment);
|
||||
return newAdvanceAssigment;
|
||||
}
|
||||
|
||||
@Transactional(readOnly = true)
|
||||
private void addAdvanceAssigment(AdvanceAssigment newAdvanceAssigment)
|
||||
throws DuplicateAdvanceAssigmentForOrderElementException,
|
||||
DuplicateValueTrueReportGlobalAdvanceException{
|
||||
this.orderElementDAO.save(this.orderElement);
|
||||
this.orderElement.addAvanceAssigment(newAdvanceAssigment);
|
||||
}
|
||||
|
||||
private void removeAdvanceMeasurement(AdvanceMeasurement advanceMeasurement){
|
||||
AdvanceAssigment advanceAssigment = advanceMeasurement.getAdvanceAssigment();
|
||||
private void removeAdvanceAssigment(AdvanceAssigment advanceAssigment){
|
||||
orderElement.getAdvanceAssigments().remove(advanceAssigment);
|
||||
}
|
||||
|
||||
private void removeAdvanceMeasurement(AdvanceMeasurement advanceMeasurement){
|
||||
AdvanceAssigment advanceAssigment = advanceMeasurement.getAdvanceAssigment();
|
||||
advanceAssigment.getAdvanceMeasurements().remove(advanceMeasurement);
|
||||
}
|
||||
|
||||
private void updateRemoveCalculatedAdvanceAssigment(OrderElement orderElement,
|
||||
AdvanceAssigment advanceAssigment){
|
||||
OrderElement parent = orderElement.getParent();
|
||||
if(parent != null){
|
||||
removeCalculatedAdvanceAssigment(parent,advanceAssigment);
|
||||
updateRemoveCalculatedAdvanceAssigment(parent,advanceAssigment);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateRemoveCalculatedAdvanceMeasurement(OrderElement orderElement,
|
||||
AdvanceAssigment advanceAssigment,AdvanceMeasurement advanceMeasurement){
|
||||
OrderElement parent = orderElement.getParent();
|
||||
if(parent != null){
|
||||
AdvanceAssigment indirectAdvanceAssigment =
|
||||
findCalculatedAdvanceInParent(parent,advanceAssigment.getAdvanceType().getId());
|
||||
if(indirectAdvanceAssigment != null){
|
||||
removeCalculatedAdvanceMeasurement(advanceMeasurement,indirectAdvanceAssigment);
|
||||
updateRemoveCalculatedAdvanceMeasurement(parent,advanceAssigment,advanceMeasurement);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addCalculatedAdvanceAssigmentToAncestors(OrderElement orderElement,
|
||||
AdvanceAssigmentDTO newAdvanceAssigmentDTO,AdvanceAssigment newAdvanceAssigment)
|
||||
throws DuplicateAdvanceAssigmentForOrderElementException,
|
||||
DuplicateValueTrueReportGlobalAdvanceException{
|
||||
|
||||
if (orderElement.getParent() != null) {
|
||||
OrderElement parent = orderElement.getParent();
|
||||
if(checkChangeTheAdvanceType(newAdvanceAssigmentDTO)){
|
||||
removeCalculatedAdvanceAssigment(parent,newAdvanceAssigment);
|
||||
}
|
||||
|
||||
AdvanceAssigment indirectAdvanceAssigment =
|
||||
findCalculatedAdvanceInParent(parent,newAdvanceAssigmentDTO.getAdvanceType().getId());
|
||||
if(indirectAdvanceAssigment == null){
|
||||
indirectAdvanceAssigment = initNewCalculatedAdvanceAssigment(parent,newAdvanceAssigmentDTO);
|
||||
parent.addAvanceAssigment(indirectAdvanceAssigment);
|
||||
}
|
||||
addIncrementMaxValueToAdvanceAssigment(newAdvanceAssigmentDTO,indirectAdvanceAssigment);
|
||||
addCalculatedAdvanceMeasurements(newAdvanceAssigmentDTO,indirectAdvanceAssigment);
|
||||
addCalculatedAdvanceAssigmentToAncestors(parent,newAdvanceAssigmentDTO,newAdvanceAssigment);
|
||||
}
|
||||
}
|
||||
|
||||
private void addIncrementMaxValueToAdvanceAssigment(
|
||||
AdvanceAssigmentDTO newAdvanceAssigmentDTO,
|
||||
AdvanceAssigment indirectAdvanceAssigment){
|
||||
BigDecimal incrementMaxValue = getIncrementMaxValue(newAdvanceAssigmentDTO);
|
||||
BigDecimal currentMaxValue = indirectAdvanceAssigment.getMaxValue().add(incrementMaxValue);
|
||||
indirectAdvanceAssigment.setMaxValue(currentMaxValue);
|
||||
}
|
||||
|
||||
private void addCalculatedAdvanceMeasurements(
|
||||
AdvanceAssigmentDTO advanceAssigmentDTO, AdvanceAssigment indirectAdvanceAssigment){
|
||||
for(AdvanceMeasurementDTO advanceMeasurementDTO
|
||||
:advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView()){
|
||||
if((advanceMeasurementDTO.getIsNewDTO())
|
||||
|| (checkChangeTheAdvanceType(advanceAssigmentDTO))){
|
||||
addNewCalculatedAdvanceMeasurement(advanceMeasurementDTO,indirectAdvanceAssigment);
|
||||
}else{
|
||||
_removeCalculatedAdvanceMeasurement(advanceMeasurementDTO,indirectAdvanceAssigment);
|
||||
addNewCalculatedAdvanceMeasurement(advanceMeasurementDTO,indirectAdvanceAssigment);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void addNewCalculatedAdvanceMeasurement(
|
||||
AdvanceMeasurementDTO advanceMeasurementDTO,
|
||||
AdvanceAssigment indirectAdvanceAssigment){
|
||||
|
||||
AdvanceMeasurementDTO greatNeighbor = this.getGreatNeighborDTO(advanceMeasurementDTO);
|
||||
AdvanceMeasurement lessNeighbor = this.getLessNeighbor(advanceMeasurementDTO);
|
||||
incrementLaterCalculatedAdvances(lessNeighbor,greatNeighbor,
|
||||
advanceMeasurementDTO,indirectAdvanceAssigment);
|
||||
|
||||
AdvanceMeasurement previousAdvanceMeasurement =
|
||||
findPreviousIndirectAdvanceMeasurement(
|
||||
advanceMeasurementDTO.getDate(),indirectAdvanceAssigment);
|
||||
if(previousAdvanceMeasurement == null){
|
||||
//create and add a new indirect AdvanceMeasurement
|
||||
AdvanceMeasurement newIndirectAdvanceMeasurement = AdvanceMeasurement.create(
|
||||
advanceMeasurementDTO.getDate(),advanceMeasurementDTO.getValue());
|
||||
newIndirectAdvanceMeasurement.setAdvanceAssigment(indirectAdvanceAssigment);
|
||||
newIndirectAdvanceMeasurement.incrementNumIndirectSons();
|
||||
indirectAdvanceAssigment.getAdvanceMeasurements().add(newIndirectAdvanceMeasurement);
|
||||
}else{
|
||||
if(previousAdvanceMeasurement.getDate().compareTo(advanceMeasurementDTO.getDate()) < 0){
|
||||
//create and add a new indirect AdvanceMeasurement
|
||||
BigDecimal incrementValue = calculateIncrementValue(lessNeighbor,advanceMeasurementDTO);
|
||||
BigDecimal currentValue = previousAdvanceMeasurement.getValue().add(incrementValue);
|
||||
AdvanceMeasurement newIndirectAdvanceMeasurement = AdvanceMeasurement.create(
|
||||
advanceMeasurementDTO.getDate(),currentValue);
|
||||
newIndirectAdvanceMeasurement.setAdvanceAssigment(indirectAdvanceAssigment);
|
||||
newIndirectAdvanceMeasurement.incrementNumIndirectSons();
|
||||
indirectAdvanceAssigment.getAdvanceMeasurements().add(newIndirectAdvanceMeasurement);
|
||||
}
|
||||
if(previousAdvanceMeasurement.getDate().compareTo(advanceMeasurementDTO.getDate()) == 0){
|
||||
previousAdvanceMeasurement.incrementNumIndirectSons();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void removeCalculatedAdvanceMeasurement(AdvanceMeasurement advanceMeasurement,
|
||||
AdvanceAssigment indirectAdvanceAssigment){
|
||||
//find the indirect advanceMeasurement
|
||||
AdvanceMeasurement previousAdvanceMeasurement =
|
||||
findPreviousIndirectAdvanceMeasurement(
|
||||
advanceMeasurement.getDate(),indirectAdvanceAssigment);
|
||||
//check if the indirect advanceMeasurement is the adding of several sons.
|
||||
previousAdvanceMeasurement.decrementNumIndirectSons();
|
||||
if(previousAdvanceMeasurement.getNumIndirectSons() == 0){
|
||||
indirectAdvanceAssigment.getAdvanceMeasurements().remove(previousAdvanceMeasurement);
|
||||
}
|
||||
//update post indirect advanceMeasurement (substract the increment)
|
||||
AdvanceMeasurement[] neighbors = getOldNeighborsAdvanceMeasurement(advanceMeasurement);
|
||||
decrementLaterCalculatedAdvances(neighbors,advanceMeasurement,indirectAdvanceAssigment);
|
||||
}
|
||||
|
||||
private void _removeCalculatedAdvanceMeasurement(AdvanceMeasurementDTO advanceMeasurementDTO,
|
||||
AdvanceAssigment indirectAdvanceAssigment){
|
||||
//find the indirect advanceMeasurement
|
||||
AdvanceMeasurement advanceMeasurement = advanceMeasurementDTO.getAdvanceMeasurement();
|
||||
AdvanceMeasurement previousAdvanceMeasurement =
|
||||
findPreviousIndirectAdvanceMeasurement(
|
||||
advanceMeasurement.getDate(),indirectAdvanceAssigment);
|
||||
//check if the indirect advanceMeasurement is the adding of several sons.
|
||||
previousAdvanceMeasurement.decrementNumIndirectSons();
|
||||
if(previousAdvanceMeasurement.getNumIndirectSons() == 0){
|
||||
indirectAdvanceAssigment.getAdvanceMeasurements().remove(previousAdvanceMeasurement);
|
||||
}
|
||||
//update post indirect advanceMeasurement (substract the increment)
|
||||
AdvanceMeasurement lessNeighbor = getLessNeighbor(advanceMeasurementDTO);
|
||||
AdvanceMeasurementDTO greatNeighbor = getGreatNeighborDTO(advanceMeasurementDTO);
|
||||
_decrementLaterCalculatedAdvances(lessNeighbor,greatNeighbor,advanceMeasurement,indirectAdvanceAssigment);
|
||||
}
|
||||
|
||||
private void removeCalculatedAdvanceAssigment(OrderElement parent,
|
||||
AdvanceAssigment newAdvanceAssigment){
|
||||
AdvanceAssigment indirectAdvanceAssigment =
|
||||
findCalculatedAdvanceInParent(parent,newAdvanceAssigment.getAdvanceType().getId());
|
||||
if(indirectAdvanceAssigment != null){
|
||||
if(decrementMaxValue(newAdvanceAssigment,indirectAdvanceAssigment)){
|
||||
parent.getAdvanceAssigments().remove(indirectAdvanceAssigment);
|
||||
}else{
|
||||
for(AdvanceMeasurement advanceMeasurement :
|
||||
newAdvanceAssigment.getAdvanceMeasurements()){
|
||||
removeCalculatedAdvanceMeasurement(advanceMeasurement,indirectAdvanceAssigment);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean decrementMaxValue(AdvanceAssigment newAdvanceAssigment,
|
||||
AdvanceAssigment indirectAdvanceAssigment){
|
||||
BigDecimal maxValue = newAdvanceAssigment.getMaxValue();
|
||||
BigDecimal currentMaxValue = indirectAdvanceAssigment.getMaxValue().subtract(maxValue);
|
||||
indirectAdvanceAssigment.setMaxValue(currentMaxValue);
|
||||
if(currentMaxValue.compareTo(new BigDecimal(0)) == 0){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean isAddingOfSeveralSons(AdvanceMeasurement previousAdvanceMeasurement){
|
||||
previousAdvanceMeasurement.decrementNumIndirectSons();
|
||||
if(previousAdvanceMeasurement.getNumIndirectSons() == 0)
|
||||
return false;
|
||||
else return true;
|
||||
}
|
||||
|
||||
private AdvanceMeasurementDTO getGreatNeighborDTO(
|
||||
AdvanceMeasurementDTO advanceMeasurementDTO){
|
||||
AdvanceMeasurementDTO neighbor = null;
|
||||
AdvanceAssigmentDTO advanceAssigmentDTO =
|
||||
advanceMeasurementDTO.getAdvanceAssigmentDTO();
|
||||
List<AdvanceMeasurementDTO> advanceMeasurementDTOs =
|
||||
advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView();
|
||||
|
||||
for(int i=0; i < advanceMeasurementDTOs.size() ; i++){
|
||||
AdvanceMeasurementDTO advance =
|
||||
(AdvanceMeasurementDTO) advanceMeasurementDTOs.get(i);
|
||||
if(advance.equals(advanceMeasurementDTO)){
|
||||
if(i > 0){
|
||||
neighbor =((AdvanceMeasurementDTO)
|
||||
advanceMeasurementDTOs.get(i-1));
|
||||
}
|
||||
return neighbor;
|
||||
}
|
||||
}
|
||||
return neighbor;
|
||||
}
|
||||
|
||||
private AdvanceMeasurement getLessNeighbor(
|
||||
AdvanceMeasurementDTO advanceMeasurementDTO){
|
||||
AdvanceMeasurement neighbor = null;
|
||||
|
||||
AdvanceAssigmentDTO advanceAssigmentDTO = advanceMeasurementDTO.getAdvanceAssigmentDTO();
|
||||
AdvanceAssigment advanceAssigment = advanceAssigmentDTO.getAdvanceAssigment();
|
||||
if(advanceAssigment == null) return neighbor;
|
||||
|
||||
Object[] advanceMeasurements = advanceAssigment.getAdvanceMeasurements().toArray();
|
||||
for(int i=0; i < advanceMeasurements.length;i++){
|
||||
AdvanceMeasurement advance = (AdvanceMeasurement) advanceMeasurements[i];
|
||||
if(advance.getDate().compareTo(advanceMeasurementDTO.getDate()) < 0){
|
||||
neighbor=advance;
|
||||
return neighbor;
|
||||
}
|
||||
}
|
||||
return neighbor;
|
||||
}
|
||||
|
||||
private AdvanceMeasurement[] getOldNeighborsAdvanceMeasurement(
|
||||
AdvanceMeasurement advanceMeasurement){
|
||||
AdvanceMeasurement neighbors[] = {null,null};
|
||||
AdvanceAssigment advanceAssigment = advanceMeasurement.getAdvanceAssigment();
|
||||
Object[] advanceMeasurements = advanceAssigment.getAdvanceMeasurements().toArray();
|
||||
|
||||
for(int i=0; i < advanceMeasurements.length;i++){
|
||||
AdvanceMeasurement advance = (AdvanceMeasurement) advanceMeasurements[i];
|
||||
if(advance.equals(advanceMeasurement)){
|
||||
if(i > 0){
|
||||
neighbors[1]=((AdvanceMeasurement) advanceMeasurements[i-1]);
|
||||
}
|
||||
if(i < advanceMeasurements.length-1){
|
||||
neighbors[0]=((AdvanceMeasurement) advanceMeasurements[i+1]);
|
||||
}
|
||||
return neighbors;
|
||||
}
|
||||
}
|
||||
return neighbors;
|
||||
}
|
||||
|
||||
private void incrementLaterCalculatedAdvances(AdvanceMeasurement lessNeighbor,
|
||||
AdvanceMeasurementDTO greatNeighbor,
|
||||
AdvanceMeasurementDTO advanceMeasurementDTO,
|
||||
AdvanceAssigment indirectAdvanceAssigment){
|
||||
|
||||
BigDecimal incrementValue = calculateIncrementValue(lessNeighbor,advanceMeasurementDTO);
|
||||
|
||||
Date dateIni = advanceMeasurementDTO.getDate();
|
||||
Date dateFin = advanceMeasurementDTO.getDate();
|
||||
|
||||
for(AdvanceMeasurement indirectAdvanceMeasurement :
|
||||
indirectAdvanceAssigment.getAdvanceMeasurements()){
|
||||
if((indirectAdvanceMeasurement.getDate().compareTo(dateIni) >= 0)
|
||||
&& (isIntoIntervalDateFin(greatNeighbor,dateFin,indirectAdvanceMeasurement))){
|
||||
indirectAdvanceMeasurement.setValue(indirectAdvanceMeasurement.
|
||||
getValue().add(incrementValue));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void _decrementLaterCalculatedAdvances(AdvanceMeasurement lessNeighbor,
|
||||
AdvanceMeasurementDTO greatNeighbor,
|
||||
AdvanceMeasurement advanceMeasurement,
|
||||
AdvanceAssigment indirectAdvanceAssigment){
|
||||
|
||||
BigDecimal decrementValue = calculateDecrementValue(lessNeighbor,advanceMeasurement);
|
||||
|
||||
Date dateFin = advanceMeasurement.getDate();
|
||||
Date dateIni = advanceMeasurement.getDate();
|
||||
|
||||
for(AdvanceMeasurement indirectAdvanceMeasurement :
|
||||
indirectAdvanceAssigment.getAdvanceMeasurements()){
|
||||
if((indirectAdvanceMeasurement.getDate().compareTo(dateIni) >= 0)
|
||||
&& (isIntoIntervalDateFin(greatNeighbor,dateFin,indirectAdvanceMeasurement))){
|
||||
indirectAdvanceMeasurement.setValue(
|
||||
indirectAdvanceMeasurement.getValue().subtract(decrementValue));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void decrementLaterCalculatedAdvances(AdvanceMeasurement[] neighbors
|
||||
,AdvanceMeasurement advanceMeasurement,
|
||||
AdvanceAssigment indirectAdvanceAssigment){
|
||||
|
||||
BigDecimal decrementValue = calculateDecrementValue(neighbors[0],advanceMeasurement);
|
||||
|
||||
Date dateFin = advanceMeasurement.getDate();
|
||||
Date dateIni = advanceMeasurement.getDate();
|
||||
|
||||
for(AdvanceMeasurement indirectAdvanceMeasurement :
|
||||
indirectAdvanceAssigment.getAdvanceMeasurements()){
|
||||
if((indirectAdvanceMeasurement.getDate().compareTo(dateIni) >= 0)
|
||||
&& (isIntoIntervalDateFin(neighbors[1],dateFin,indirectAdvanceMeasurement))){
|
||||
indirectAdvanceMeasurement.setValue(
|
||||
indirectAdvanceMeasurement.getValue().subtract(decrementValue));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isIntoIntervalDateFin(AdvanceMeasurementDTO neighbor,
|
||||
Date dateFin,AdvanceMeasurement advanceMeasurement){
|
||||
if(neighbor != null){
|
||||
dateFin = neighbor.getDate();
|
||||
if(advanceMeasurement.getDate().compareTo(dateFin) < 0) return true;
|
||||
else return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean isIntoIntervalDateFin(AdvanceMeasurement neighbor,
|
||||
Date dateFin,AdvanceMeasurement advanceMeasurement){
|
||||
if(neighbor != null){
|
||||
dateFin = neighbor.getDate();
|
||||
if(advanceMeasurement.getDate().compareTo(dateFin) < 0) return true;
|
||||
else return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private BigDecimal calculateIncrementValue(AdvanceMeasurement neighbor
|
||||
,AdvanceMeasurementDTO advanceMeasurementDTO){
|
||||
//Calculate the increment value
|
||||
BigDecimal incrementValue = advanceMeasurementDTO.getValue();
|
||||
if(neighbor != null){
|
||||
BigDecimal previousValue = neighbor.getValue();
|
||||
incrementValue = incrementValue.subtract(previousValue);
|
||||
}
|
||||
return incrementValue;
|
||||
}
|
||||
|
||||
private BigDecimal calculateDecrementValue(AdvanceMeasurement neighbor
|
||||
,AdvanceMeasurement advanceMeasurement){
|
||||
//Calculate the decrement value
|
||||
BigDecimal decrementValue = advanceMeasurement.getValue();
|
||||
if(neighbor != null){
|
||||
BigDecimal previousValue = neighbor.getValue();
|
||||
decrementValue = decrementValue.subtract(previousValue);
|
||||
}
|
||||
return decrementValue;
|
||||
|
||||
}
|
||||
|
||||
private BigDecimal getIncrementMaxValue(AdvanceAssigmentDTO advanceAssigmentDTO){
|
||||
BigDecimal incrementMaxValue= new BigDecimal(0);
|
||||
if((advanceAssigmentDTO.getIsNewDTO())
|
||||
|| (checkChangeTheAdvanceType(advanceAssigmentDTO))){
|
||||
incrementMaxValue = advanceAssigmentDTO.getMaxValue();
|
||||
}else{
|
||||
AdvanceAssigment advanceAssigment = advanceAssigmentDTO.getAdvanceAssigment();
|
||||
incrementMaxValue = advanceAssigmentDTO.getMaxValue().subtract(advanceAssigment.getMaxValue());
|
||||
}
|
||||
return incrementMaxValue;
|
||||
}
|
||||
|
||||
private AdvanceAssigment initNewCalculatedAdvanceAssigment(
|
||||
OrderElement orderElement,AdvanceAssigmentDTO advanceAssigmentDTO){
|
||||
//create AdvanceAssigment
|
||||
AdvanceAssigment newAdvanceAssigment = AdvanceAssigment.create(
|
||||
advanceAssigmentDTO.getReportGlobalAdvance(),new BigDecimal(0));
|
||||
newAdvanceAssigment.setAdvanceType(advanceAssigmentDTO.getAdvanceType());
|
||||
newAdvanceAssigment.setOrderElement(orderElement);
|
||||
newAdvanceAssigment.setType(AdvanceAssigment.Type.CALCULATED);
|
||||
|
||||
return newAdvanceAssigment;
|
||||
}
|
||||
|
||||
private AdvanceMeasurement findPreviousIndirectAdvanceMeasurement(
|
||||
Date date,AdvanceAssigment indirectAdvanceAssigment){
|
||||
Object[] arrayAdvanceMeasurements = indirectAdvanceAssigment.getAdvanceMeasurements().toArray();
|
||||
for(int i=0; i < arrayAdvanceMeasurements.length; i++){
|
||||
AdvanceMeasurement advanceMeasurement = (AdvanceMeasurement)arrayAdvanceMeasurements[i];
|
||||
if(advanceMeasurement.getDate().compareTo(date) <= 0){
|
||||
return advanceMeasurement;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private AdvanceAssigment findCalculatedAdvanceInParent(
|
||||
OrderElement orderElement, Long id){
|
||||
for(AdvanceAssigment oldAdvanceAssigment : orderElement.getAdvanceAssigments()){
|
||||
if(oldAdvanceAssigment.getAdvanceType().getId().equals(id))
|
||||
return oldAdvanceAssigment;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean checkChangeTheAdvanceType(AdvanceAssigmentDTO newAdvanceAssigmentDTO){
|
||||
AdvanceAssigment advanceAssigment = newAdvanceAssigmentDTO.getAdvanceAssigment();
|
||||
AdvanceType advanceType = advanceAssigment.getAdvanceType();
|
||||
AdvanceType advanceTypeDTO = newAdvanceAssigmentDTO.getAdvanceType();
|
||||
if((newAdvanceAssigmentDTO.getIsNewObject())
|
||||
&& (!advanceType.equals(advanceTypeDTO))) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPrecisionValid(AdvanceMeasurementDTO advanceDTO, BigDecimal value){
|
||||
if(advanceDTO.getAdvanceType() != null){
|
||||
BigDecimal precision = advanceDTO.getAdvanceType().getUnitPrecision();
|
||||
public boolean isPrecisionValid(BigDecimal value){
|
||||
if((this.advanceAssigmentDTO != null)
|
||||
&& (this.advanceAssigmentDTO.getAdvanceType() != null)){
|
||||
BigDecimal precision = this.advanceAssigmentDTO.getAdvanceType().getUnitPrecision();
|
||||
BigDecimal result[] = value.divideAndRemainder(precision);
|
||||
if(result[1].compareTo(BigDecimal.ZERO) == 0) return true;
|
||||
return false;
|
||||
|
|
@ -236,28 +741,63 @@ public class ManageOrderElementAdvancesModel implements
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean greatThanMaxValue(AdvanceMeasurementDTO advanceDTO, BigDecimal value){
|
||||
if(advanceDTO.getMaxValue() == null)
|
||||
public boolean greatThanMaxValue(BigDecimal value){
|
||||
if((this.advanceAssigmentDTO == null)
|
||||
||(this.advanceAssigmentDTO.getMaxValue() == null))
|
||||
return false;
|
||||
if(value.compareTo(advanceDTO.getMaxValue())>0)
|
||||
if(value.compareTo(this.advanceAssigmentDTO.getMaxValue())>0)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isGreatValidDate(AdvanceMeasurementDTO advanceDTO, Date value){
|
||||
if((advanceDTO.getIsNewDTO())||(advanceDTO.getIsNewObject()))
|
||||
public boolean isGreatValidDate(Date value){
|
||||
if(this.advanceAssigmentDTO == null) return true;
|
||||
if((this.advanceAssigmentDTO.getIsNewDTO())||(this.advanceAssigmentDTO.getIsNewObject()))
|
||||
return true;
|
||||
|
||||
AdvanceAssigment advanceAssigment = advanceDTO.getAdvanceAssigment();
|
||||
if(((SortedSet<AdvanceMeasurement>) advanceAssigment
|
||||
.getAdvanceMeasurements()).size() > 0){
|
||||
AdvanceMeasurement advanceMeasurement = ((SortedSet<AdvanceMeasurement>) advanceAssigment
|
||||
.getAdvanceMeasurements()).last();
|
||||
if(value.compareTo(advanceMeasurement.getDate()) < 0)
|
||||
return false;
|
||||
AdvanceAssigment advanceAssigment = this.advanceAssigmentDTO.getAdvanceAssigment();
|
||||
Iterator<AdvanceMeasurement> iterator = advanceAssigment.getAdvanceMeasurements().iterator();
|
||||
while(iterator.hasNext()){
|
||||
AdvanceMeasurement advanceMeasurement = iterator.next();
|
||||
if(advanceMeasurement.getVersion() != null){
|
||||
if(value.compareTo(advanceMeasurement.getDate()) < 0)return false;
|
||||
else return true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BigDecimal getUnitPrecision(){
|
||||
if(this.advanceAssigmentDTO == null){
|
||||
return new BigDecimal(0);
|
||||
}
|
||||
return this.advanceAssigmentDTO.getAdvanceType().getUnitPrecision();
|
||||
}
|
||||
|
||||
@Override
|
||||
public AdvanceMeasurementDTO getFirstAdvanceMeasurement(AdvanceAssigmentDTO advanceAssigmentDTO){
|
||||
if((advanceAssigmentDTO != null) &&
|
||||
(advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView().size()>0)){
|
||||
final AdvanceMeasurementDTO advanceMeasurementDTO =
|
||||
(AdvanceMeasurementDTO) advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView().get(0);
|
||||
return advanceMeasurementDTO;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public AdvanceMeasurement getFirstAdvanceMeasurement(AdvanceAssigment advanceAssigment){
|
||||
if((advanceAssigment != null) &&
|
||||
(advanceAssigmentDTO.getAdvanceMeasurements().size()>0)){
|
||||
SortedSet<AdvanceMeasurement> listAM = (SortedSet<AdvanceMeasurement>) advanceAssigment.getAdvanceMeasurements();
|
||||
final AdvanceMeasurement advanceMeasurement = (AdvanceMeasurement) listAM.first();
|
||||
return advanceMeasurement;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void modifyListAdvanceMeasurement(AdvanceMeasurementDTO advanceMeasurementDTO){
|
||||
this.advanceAssigmentDTO.getAdvanceMeasurementDTOs().modified(advanceMeasurementDTO);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
<?component name="listOrderElementHours" inline="true" macroURI="_listOrderElementHours.zul"?>
|
||||
<?component name="listOrderElementAdvances" inline="true" macroURI="_listOrderElementAdvances.zul"?>
|
||||
<window visible="false" id="${arg.top_id}" title="${i18n:_('Edit order element')}" width="600px" left="100px" top="100px">
|
||||
<window visible="false" id="${arg.top_id}" title="${i18n:_('Edit order element')}" width="800px" left="100px" top="100px">
|
||||
<tabbox>
|
||||
<tabs>
|
||||
<tab label="${i18n:_('Details')}"></tab>
|
||||
|
|
|
|||
|
|
@ -1,29 +1,74 @@
|
|||
<vbox id="listOrderElementAdvances">
|
||||
<vbox>
|
||||
<label value="${i18n:_('Direct Advances')}"/>
|
||||
<separator bar="true" spacing="2px" orient="horizontal"/>
|
||||
<vbox align="left">
|
||||
<hbox>
|
||||
<button label="${i18n:_('Add')}" onClick="manageOrderElementAdvancesController.goToCreateLine();">
|
||||
<button label="${i18n:_('Add new advance assigment')}"
|
||||
onClick="manageOrderElementAdvancesController.goToCreateLineAdvanceAssigment();">
|
||||
</button>
|
||||
<button label="${i18n:_('Remove')}" onClick="manageOrderElementAdvancesController.goToRemoveLine();">
|
||||
<button label="${i18n:_('Remove')}"
|
||||
onClick="manageOrderElementAdvancesController.goToRemoveLineAdvanceAssigment();">
|
||||
</button>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<listbox id="editAdvances"
|
||||
model="@{manageOrderElementAdvancesController.advanceMeasurementDTOs}"
|
||||
<listbox id="editAdvances"
|
||||
model="@{manageOrderElementAdvancesController.advanceAssigmentDTOs}"
|
||||
itemRenderer="@{manageOrderElementAdvancesController.advancesRenderer}" mold="paging"
|
||||
onSelect="manageOrderElementAdvancesController.prepareEditAdvanceMeasurements(self.selectedItem.value);"
|
||||
pageSize="10">
|
||||
|
||||
<listhead sizable="true">
|
||||
<listhead sizable="true">
|
||||
<listheader label="${i18n:_('Advance Type')}" />
|
||||
<listheader label="${i18n:_('Max value')}"/>
|
||||
<listheader label="${i18n:_('Current value')}"/>
|
||||
<listheader label="${i18n:_('Percentage')}"/>
|
||||
<listheader label="${i18n:_('Date')}"/>
|
||||
<listheader label="${i18n:_('Spread')}"/>
|
||||
<listheader label="${i18n:_('Calculated')}"/>
|
||||
</listhead>
|
||||
</listbox>
|
||||
</vbox>
|
||||
<separator bar="true" spacing="12px" orient="horizontal"/>
|
||||
<separator bar="false" spacing="20px" orient="vertical"/>
|
||||
<label value="${i18n:_('Advances Measurement')}"/>
|
||||
<separator bar="true" spacing="3px" orient="horizontal"/>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<button label="${i18n:_('Add new advance measurement')}"
|
||||
onClick="manageOrderElementAdvancesController.goToCreateLineAdvanceMeasurement();"
|
||||
disabled = "@{manageOrderElementAdvancesController.isReadOnlyAdvanceMeasurementDTOs}">
|
||||
</button>
|
||||
<button label="${i18n:_('Remove')}"
|
||||
onClick="manageOrderElementAdvancesController.goToRemoveLineAdvanceMeasurement();"
|
||||
disabled = "@{manageOrderElementAdvancesController.isReadOnlyAdvanceMeasurementDTOs}">
|
||||
</button>
|
||||
</hbox>
|
||||
<listbox id="editAdvancesMeasurement"
|
||||
model="@{manageOrderElementAdvancesController.advanceMeasurementDTOs}"
|
||||
mold="paging" pageSize="10">
|
||||
<listhead sizable="true">
|
||||
<listheader label="${i18n:_('Current value')}"/>
|
||||
<listheader label="${i18n:_('Percentage')}"/>
|
||||
<listheader label="${i18n:_('Date')}"/>
|
||||
</listhead>
|
||||
<listitem self="@{each='advanceMeasurementDTO'}" value="@{advanceMeasurementDTO}">
|
||||
<listcell>
|
||||
<decimalbox value="@{advanceMeasurementDTO.value, save-when='self.onChange'}"
|
||||
disabled = "@{manageOrderElementAdvancesController.isReadOnlyAdvanceMeasurementDTOs}"
|
||||
scale="2"
|
||||
onChange = "manageOrderElementAdvancesController.updatesValue(self);"
|
||||
constraint = "@{manageOrderElementAdvancesController.checkValidValue}"/>
|
||||
</listcell>
|
||||
<listcell label="@{advanceMeasurementDTO.percentage}" />
|
||||
<listcell>
|
||||
<datebox value="@{advanceMeasurementDTO.date, save-when='self.onChange'}"
|
||||
disabled = "@{manageOrderElementAdvancesController.isReadOnlyAdvanceMeasurementDTOs}"
|
||||
constraint = "@{manageOrderElementAdvancesController.checkValidDate}"
|
||||
onChange = "manageOrderElementAdvancesController.setCurrentDate(self.parent.parent);"/>
|
||||
</listcell>
|
||||
</listitem>
|
||||
</listbox>
|
||||
</vbox>
|
||||
<separator bar="false" spacing="40px" orient="vertical"/>
|
||||
<hbox>
|
||||
<button id="aceptAdvance" onClick="manageOrderElementAdvancesController.accept();" label="${i18n:_('Accept')}"/>
|
||||
<button id="cancelAdvance" onClick="manageOrderElementAdvancesController.cancel();" label="${i18n:_('Cancel')}"/>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue