ItEr26S06RFControlAvancesIncompatiblesEnUnidadesTraballoItEr25S06: Removed DTOs not needed with the new approach of calculate advancements on OrderGorupLines.

This commit is contained in:
Manuel Rego Casasnovas 2009-09-17 10:29:13 +02:00 committed by Javier Moran Rua
parent eec3c01b8e
commit 6a49e776ab
12 changed files with 451 additions and 1074 deletions

View file

@ -8,9 +8,9 @@ import org.navalplanner.business.common.BaseEntity;
public class AdvanceMeasurement extends BaseEntity {
public static AdvanceMeasurement create(Date date, BigDecimal value, int numIndirectSons) {
public static AdvanceMeasurement create(Date date, BigDecimal value) {
AdvanceMeasurement advanceMeasurement = new AdvanceMeasurement(date,
value, numIndirectSons);
value);
advanceMeasurement.setNewObject(true);
return advanceMeasurement;
}
@ -30,17 +30,13 @@ public class AdvanceMeasurement extends BaseEntity {
@NotNull
private AdvanceAssigment advanceAssigment;
private int numIndirectSons;
public AdvanceMeasurement() {
this.numIndirectSons = 0;
}
private AdvanceMeasurement(Date date, BigDecimal value , int numIndirectSons) {
private AdvanceMeasurement(Date date, BigDecimal value) {
this.date = date;
this.value = value;
this.value.setScale(2,BigDecimal.ROUND_HALF_UP);
this.numIndirectSons = numIndirectSons;
}
public void setDate(Date date) {
@ -68,19 +64,4 @@ public class AdvanceMeasurement extends BaseEntity {
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;
}
}

View file

@ -18,6 +18,12 @@ public class AdvanceMeasurementComparator implements Comparator<AdvanceMeasureme
@Override
public int compare(AdvanceMeasurement arg0, AdvanceMeasurement arg1) {
if (arg0.getDate() == null) {
return -1;
}
if (arg1.getDate() == null) {
return 1;
}
return arg1.getDate().compareTo(arg0.getDate());
}
}

View file

@ -59,7 +59,6 @@
<version name="version" access="property" type="long" />
<property name="date"/>
<property name="value" scale="2"/>
<property name="numIndirectSons"/>
<many-to-one name="advanceAssigment" class="AdvanceAssigment" column="ADVANCE_ASSIGMENT_ID" />
</class>
</hibernate-mapping>

View file

@ -9,8 +9,8 @@ import static org.navalplanner.business.BusinessGlobalNames.BUSINESS_SPRING_CONF
import static org.navalplanner.business.test.BusinessGlobalNames.BUSINESS_SPRING_CONFIG_TEST_FILE;
import java.math.BigDecimal;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.junit.Test;
@ -94,7 +94,7 @@ public class AddAdvanceAssigmentsToOrderElementTest {
private AdvanceMeasurement createValidAdvanceMeasurement() {
AdvanceMeasurement advanceMeasurement = AdvanceMeasurement.create(
new Date(), new BigDecimal(0),0);
new Date(), new BigDecimal(0));
return advanceMeasurement;
}

View file

@ -1,153 +0,0 @@
/*
* 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 String unitName;
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.unitName = advanceType.getUnitName();
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;
}
public void setUnitName(String unitName) {
this.unitName = unitName;
}
public String getUnitName() {
return unitName;
}
}

View file

@ -1,119 +0,0 @@
package org.navalplanner.web.orders;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import org.navalplanner.business.advance.entities.AdvanceMeasurement;
public class AdvanceMeasurementDTO{
private AdvanceMeasurement advanceMeasurement;
private AdvanceAssigmentDTO advanceAssigmentDTO;
private Date date;
private BigDecimal value;
private boolean isNewObject = true;
private boolean isNewDTO = true;
private boolean selectedRemove = false;
private BigDecimal percentage;
public AdvanceMeasurementDTO() {
this.date = new Date();
this.percentage = new BigDecimal(0);
this.isNewDTO = true;
this.isNewObject = false;
}
public AdvanceMeasurementDTO(AdvanceMeasurement advanceMeasurement){
this.advanceMeasurement = advanceMeasurement;
this.date = advanceMeasurement.getDate();
this.value = advanceMeasurement.getValue();
this.percentage = new BigDecimal(0);
this.isNewDTO = false;
if(advanceMeasurement.getVersion()==null){
this.isNewObject = true;
}else{
this.isNewObject = false;
}
}
public boolean getIsNewObject(){
return this.isNewObject;
}
public boolean getIsNewDTO() {
return this.isNewDTO;
}
public AdvanceAssigmentDTO getAdvanceAssigmentDTO() {
return this.advanceAssigmentDTO;
}
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(BigDecimal percentage) {
this.percentage = percentage;
}
public BigDecimal getPercentage() {
if(advanceAssigmentDTO == null) return new BigDecimal(0);
if(value == null) return new BigDecimal(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));
this.percentage = _percentage.setScale(2, RoundingMode.HALF_UP);
return this.percentage;
}
return new BigDecimal(0);
}
public String getPercentage_() {
getPercentage();
return (this.percentage.toString() + " %");
}
public void setDate(Date date) {
this.date = date;
}
public Date getDate() {
return this.date;
}
public void setValue(BigDecimal value) {
this.value = value;
}
public BigDecimal getValue() {
return this.value;
}
public boolean isSelectedForRemove(){
return this.selectedRemove;
}
public void setSelectedForRemove(boolean selectedRemove){
this.selectedRemove = selectedRemove;
}
}

View file

@ -1,20 +0,0 @@
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) {
if((arg1.getDate() == null) && (arg0.getDate() == null))
return 0;
if(arg1.getDate() == null) return 1;
if(arg0.getDate() == null) return -1;
return arg1.getDate().compareTo(arg0.getDate());
}
}

View file

@ -4,6 +4,8 @@ import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
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;
@ -15,11 +17,11 @@ import org.navalplanner.business.orders.entities.OrderElement;
*/
public interface IManageOrderElementAdvancesModel {
public void prepareEditAdvanceMeasurements(AdvanceAssigmentDTO advanceAssigmentDTO);
public void prepareEditAdvanceMeasurements(AdvanceAssigment advanceAssigment);
public List<AdvanceMeasurementDTO> getAdvanceMeasurementDTOs();
public List<AdvanceMeasurement> getAdvanceMeasurements();
public List<AdvanceAssigmentDTO> getAdvanceAssigmentDTOs();
public List<AdvanceAssigment> getAdvanceAssigments();
public void init(OrderElement orderElement);
@ -27,13 +29,13 @@ public interface IManageOrderElementAdvancesModel {
public void addNewLineAdvaceMeasurement();
public void removeLineAdvanceAssigment(AdvanceAssigmentDTO advanceDTO);
public void removeLineAdvanceAssigment(AdvanceAssigment advance);
public void removeLineAdvanceMeasurement(AdvanceMeasurementDTO advanceDTO);
public void removeLineAdvanceMeasurement(AdvanceMeasurement advance);
public List<AdvanceType> getActivesAdvanceTypes();
public boolean isReadOnlyAdvanceMeasurementDTOs();
public boolean isReadOnlyAdvanceMeasurements();
public void cleanAdvance();
@ -41,17 +43,23 @@ public interface IManageOrderElementAdvancesModel {
public boolean greatThanMaxValue(BigDecimal value);
public boolean isDistinctValidDate(Date value,AdvanceMeasurementDTO newAdvanceMeasurementDTO);
public boolean isDistinctValidDate(Date value,
AdvanceMeasurement newAdvanceMeasurement);
public BigDecimal getUnitPrecision();
public AdvanceMeasurementDTO getFirstAdvanceMeasurement(AdvanceAssigmentDTO advanceAssigmentDTO);
public AdvanceMeasurement getFirstAdvanceMeasurement(
AdvanceAssigment advanceAssigment);
public void modifyListAdvanceMeasurement(AdvanceMeasurementDTO advanceMeasurementDTO);
public void sortListAdvanceMeasurement();
public String getInfoAdvanceAssigment();
public void accept()throws InstanceNotFoundException,
DuplicateAdvanceAssigmentForOrderElementException,
DuplicateValueTrueReportGlobalAdvanceException;
public BigDecimal getPercentageAdvanceMeasurement(
AdvanceMeasurement advanceMeasurement);
}

View file

@ -8,6 +8,7 @@ import java.util.Date;
import java.util.List;
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;
@ -53,6 +54,8 @@ public class ManageOrderElementAdvancesController extends
private AdvanceTypeListRenderer advanceTypeListRenderer = new AdvanceTypeListRenderer();
private AdvanceMeasurementRenderer advanceMeasurementRenderer = new AdvanceMeasurementRenderer();
@Override
public void doAfterCompose(Component comp) throws Exception {
super.doAfterCompose(comp.getFellow("listOrderElementAdvances"));
@ -61,12 +64,12 @@ public class ManageOrderElementAdvancesController extends
messagesForUser = new MessagesForUser(window.getFellow("listOrderElementAdvances"));
}
public List<AdvanceMeasurementDTO> getAdvanceMeasurementDTOs() {
return manageOrderElementAdvancesModel.getAdvanceMeasurementDTOs();
public List<AdvanceMeasurement> getAdvanceMeasurements() {
return manageOrderElementAdvancesModel.getAdvanceMeasurements();
}
public List<AdvanceAssigmentDTO> getAdvanceAssigmentDTOs() {
return manageOrderElementAdvancesModel.getAdvanceAssigmentDTOs();
public List<AdvanceAssigment> getAdvanceAssigments() {
return manageOrderElementAdvancesModel.getAdvanceAssigments();
}
public void cancel() {
@ -107,8 +110,9 @@ public class ManageOrderElementAdvancesController extends
Util.reloadBindings(window);
}
public void prepareEditAdvanceMeasurements(AdvanceAssigmentDTO advanceAssigmentDTO){
manageOrderElementAdvancesModel.prepareEditAdvanceMeasurements(advanceAssigmentDTO);
public void prepareEditAdvanceMeasurements(AdvanceAssigment advanceAssigment) {
manageOrderElementAdvancesModel
.prepareEditAdvanceMeasurements(advanceAssigment);
Listbox listAdvances = ((Listbox) window.getFellow("editAdvances"));
this.indexSelectedItem = listAdvances.getIndexOfItem(listAdvances.getSelectedItem());
Util.reloadBindings(window);
@ -131,8 +135,10 @@ public class ManageOrderElementAdvancesController extends
Listitem listItem = listAdvances.getItemAtIndex(indexSelectedItem);
if(listItem != null){
AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO) listItem.getValue();
manageOrderElementAdvancesModel.removeLineAdvanceAssigment(advanceAssigmentDTO);
AdvanceAssigment advanceAssigment = (AdvanceAssigment) listItem
.getValue();
manageOrderElementAdvancesModel
.removeLineAdvanceAssigment(advanceAssigment);
Util.reloadBindings(window);
}
}
@ -141,9 +147,11 @@ public class ManageOrderElementAdvancesController extends
Listbox listAdvancesMeasurement = (Listbox)window.getFellow("editAdvancesMeasurement");
Listitem selectedItem = listAdvancesMeasurement.getSelectedItem();
if(selectedItem != null){
AdvanceMeasurementDTO advanceMeasurementDTO = (AdvanceMeasurementDTO) selectedItem.getValue();
if(advanceMeasurementDTO != null){
manageOrderElementAdvancesModel.removeLineAdvanceMeasurement(advanceMeasurementDTO);
AdvanceMeasurement advanceMeasurement = (AdvanceMeasurement) selectedItem
.getValue();
if (advanceMeasurement != null) {
manageOrderElementAdvancesModel
.removeLineAdvanceMeasurement(advanceMeasurement);
Util.reloadBindings(window);
}
}
@ -157,8 +165,8 @@ public class ManageOrderElementAdvancesController extends
return manageOrderElementAdvancesModel.getActivesAdvanceTypes();
}
public boolean isReadOnlyAdvanceMeasurementDTOs(){
return manageOrderElementAdvancesModel.isReadOnlyAdvanceMeasurementDTOs();
public boolean isReadOnlyAdvanceMeasurements() {
return manageOrderElementAdvancesModel.isReadOnlyAdvanceMeasurements();
}
public AdvanceTypeListRenderer getAdvancesRenderer() {
@ -175,13 +183,12 @@ public class ManageOrderElementAdvancesController extends
public class AdvanceTypeListRenderer implements ListitemRenderer {
@Override
public void render(Listitem listItem, Object data) throws Exception {
final AdvanceAssigmentDTO advanceDTO = (AdvanceAssigmentDTO) data;
listItem.setValue(advanceDTO);
final AdvanceAssigment advance = (AdvanceAssigment) data;
listItem.setValue(advance);
listItem.setDraggable("true");
listItem.setDroppable("true");
if((advanceDTO.getType().equals(AdvanceAssigment.Type.DIRECT))
&& ((advanceDTO.getIsNewObject())||(advanceDTO.getIsNewDTO()))){
if (advance.getType().equals(AdvanceAssigment.Type.DIRECT)) {
appendComboboxAdvancType(listItem);
} else {
appendLabelAdvanceType(listItem);
@ -196,7 +203,7 @@ public class ManageOrderElementAdvancesController extends
}
private void appendComboboxAdvancType(final Listitem listItem){
final AdvanceAssigmentDTO advanceDTO = (AdvanceAssigmentDTO)listItem.getValue();
final AdvanceAssigment advance = (AdvanceAssigment) listItem.getValue();
final Combobox comboAdvanceTypes = new Combobox();
final List<AdvanceType> listAdvanceType = manageOrderElementAdvancesModel
.getActivesAdvanceTypes();
@ -206,8 +213,9 @@ public class ManageOrderElementAdvancesController extends
comboItem.setLabel(advanceType.getUnitName());
comboItem.setParent(comboAdvanceTypes);
if((advanceDTO.getAdvanceType()!=null)&&
(advanceDTO.getAdvanceType().getId().equals(advanceType.getId())))
if ((advance.getAdvanceType() != null)
&& (advance.getAdvanceType().getId().equals(advanceType
.getId())))
comboAdvanceTypes.setSelectedItem(comboItem);
}
comboAdvanceTypes.addEventListener(Events.ON_SELECT,
@ -232,9 +240,8 @@ public class ManageOrderElementAdvancesController extends
if(((comboItem!=null))&&(comboItem.getValue() != null)&&
(comboItem.getValue() instanceof AdvanceType)){
AdvanceType advanceType = (AdvanceType)comboItem.getValue();
advanceDTO.setAdvanceType(advanceType);
advanceDTO.setUnitName(advanceType.getUnitName());
advanceDTO.setMaxValue(advanceType.getDefaultMaxValue());
advance.setAdvanceType(advanceType);
advance.setMaxValue(advanceType.getDefaultMaxValue());
}
}
});
@ -244,32 +251,33 @@ public class ManageOrderElementAdvancesController extends
}
private void appendLabelAdvanceType(final Listitem listItem){
final AdvanceAssigmentDTO advanceDTO = (AdvanceAssigmentDTO)listItem.getValue();
Label unitName = new Label(advanceDTO.getUnitName());
final AdvanceAssigment advance = (AdvanceAssigment) listItem.getValue();
Label unitName = new Label(advance.getAdvanceType().getUnitName());
Listcell listCell = new Listcell();
listCell.appendChild(unitName);
listItem.appendChild(listCell);
}
private void appendDecimalBoxMaxValue(final Listitem listItem){
final AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO)listItem.getValue();
final AdvanceAssigment advanceAssigment = (AdvanceAssigment) listItem
.getValue();
Decimalbox maxValue = new Decimalbox();
maxValue.setScale(2);
if(advanceAssigmentDTO.getType().equals(AdvanceAssigment.Type.CALCULATED))
if(advanceAssigment.getType().equals(AdvanceAssigment.Type.CALCULATED))
maxValue.setDisabled(true);
Util.bind(maxValue,
new Util.Getter<BigDecimal>() {
@Override
public BigDecimal get() {
return advanceAssigmentDTO.getMaxValue();
return advanceAssigment.getMaxValue();
}
}, new Util.Setter<BigDecimal>() {
@Override
public void set(BigDecimal value) {
advanceAssigmentDTO.setMaxValue(value);
advanceAssigment.setMaxValue(value);
}
});
maxValue.addEventListener(Events.ON_CHANGE,
@ -287,24 +295,25 @@ public class ManageOrderElementAdvancesController extends
}
private void appendDecimalBoxValue(final Listitem listItem){
final AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO)listItem.getValue();
final AdvanceAssigment advanceAssigment = (AdvanceAssigment) listItem
.getValue();
Decimalbox value = new Decimalbox();
value.setScale(2);
value.setDisabled(true);
final AdvanceMeasurementDTO advanceMeasurementDTO =
this.manageOrderElementAdvancesModel.getFirstAdvanceMeasurement(advanceAssigmentDTO);
if(advanceMeasurementDTO != null){
final AdvanceMeasurement advanceMeasurement = this.manageOrderElementAdvancesModel
.getFirstAdvanceMeasurement(advanceAssigment);
if (advanceMeasurement != null) {
Util.bind(value, new Util.Getter<BigDecimal>() {
@Override
public BigDecimal get() {
return advanceMeasurementDTO.getValue();
}
}, new Util.Setter<BigDecimal>() {
@Override
public BigDecimal get() {
return advanceMeasurement.getValue();
}
}, new Util.Setter<BigDecimal>() {
@Override
public void set(BigDecimal value) {
advanceMeasurementDTO.setValue(value);
advanceMeasurement.setValue(value);
}
});
}
@ -314,13 +323,18 @@ public class ManageOrderElementAdvancesController extends
}
private void appendLabelPercentage(final Listitem listItem){
final AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO)listItem.getValue();
final AdvanceAssigment advanceAssigment = (AdvanceAssigment) listItem
.getValue();
Label percentage = new Label();
final AdvanceMeasurementDTO advanceMeasurementDTO =
this.manageOrderElementAdvancesModel.getFirstAdvanceMeasurement(advanceAssigmentDTO);
if(advanceMeasurementDTO != null){
percentage.setValue(advanceMeasurementDTO.getPercentage_());
final AdvanceMeasurement advanceMeasurement = this.manageOrderElementAdvancesModel
.getFirstAdvanceMeasurement(advanceAssigment);
if (advanceMeasurement != null) {
percentage
.setValue(this.manageOrderElementAdvancesModel
.getPercentageAdvanceMeasurement(advanceMeasurement)
.toString()
+ " %");
}
Listcell listCell = new Listcell();
@ -329,24 +343,25 @@ public class ManageOrderElementAdvancesController extends
}
private void appendDateBoxDate(final Listitem listItem){
final AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO)listItem.getValue();
final AdvanceAssigment advanceAssigment = (AdvanceAssigment) listItem
.getValue();
Datebox date = new Datebox();
date.setDisabled(true);
final AdvanceMeasurementDTO advanceMeasurementDTO =
this.manageOrderElementAdvancesModel.getFirstAdvanceMeasurement(advanceAssigmentDTO);
if(advanceMeasurementDTO != null){
final AdvanceMeasurement advanceMeasurement = this.manageOrderElementAdvancesModel
.getFirstAdvanceMeasurement(advanceAssigment);
if (advanceMeasurement != null) {
Util.bind(date, new Util.Getter<Date>() {
@Override
public Date get() {
return advanceMeasurementDTO.getDate();
return advanceMeasurement.getDate();
}
}, new Util.Setter<Date>() {
}, new Util.Setter<Date>() {
@Override
public void set(Date value) {
advanceMeasurementDTO.setDate(value);
advanceMeasurement.setDate(value);
}
});
}
@ -356,11 +371,13 @@ public class ManageOrderElementAdvancesController extends
}
private void appendRadioSpread(final Listitem listItem){
final AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO)listItem.getValue();
final AdvanceAssigment advanceAssigment = (AdvanceAssigment) listItem
.getValue();
Radio reportGlobalAdvance = new Radio();
reportGlobalAdvance.setChecked(advanceAssigmentDTO.getReportGlobalAdvance());
reportGlobalAdvance.setChecked(advanceAssigment
.getReportGlobalAdvance());
if(advanceAssigmentDTO.getType().equals(AdvanceAssigment.Type.CALCULATED))
if (advanceAssigment.getType().equals(AdvanceAssigment.Type.CALCULATED))
reportGlobalAdvance.setDisabled(true);
reportGlobalAdvance.addEventListener(Events.ON_CHECK,
@ -376,9 +393,10 @@ public class ManageOrderElementAdvancesController extends
}
private void appendCalculatedCheckbox(final Listitem listItem){
final AdvanceAssigmentDTO advanceDTO = (AdvanceAssigmentDTO)listItem.getValue();
final AdvanceAssigment advance = (AdvanceAssigment) listItem.getValue();
Checkbox calculated = new Checkbox();
boolean isCalculated = advanceDTO.getType().equals(AdvanceAssigment.Type.CALCULATED);
boolean isCalculated = advance.getType().equals(
AdvanceAssigment.Type.CALCULATED);
calculated.setChecked(isCalculated);
calculated.setDisabled(true);
@ -394,8 +412,8 @@ public class ManageOrderElementAdvancesController extends
if(selectedItem != null){
AdvanceType advanceType = ((AdvanceType) selectedItem.getValue());
if(advanceType != null){
AdvanceAssigmentDTO advanceDTO = (AdvanceAssigmentDTO)item.getValue();
advanceDTO.setMaxValue(advanceType.getDefaultMaxValue());
AdvanceAssigment advance = (AdvanceAssigment) item.getValue();
advance.setMaxValue(advanceType.getDefaultMaxValue());
miBox.setValue(advanceType.getDefaultMaxValue());
}
}
@ -406,15 +424,19 @@ public class ManageOrderElementAdvancesController extends
if ((this.indexSelectedItem < listAdvances.getItemCount())
&& (this.indexSelectedItem >= 0)) {
Listitem selectedItem = listAdvances.getItemAtIndex(indexSelectedItem);
AdvanceAssigmentDTO advanceAssigmentDTO =
(AdvanceAssigmentDTO) selectedItem.getValue();
AdvanceAssigment advanceAssigment = (AdvanceAssigment) selectedItem
.getValue();
final AdvanceMeasurementDTO greatAdvanceMeasurementDTO =
this.manageOrderElementAdvancesModel.getFirstAdvanceMeasurement(advanceAssigmentDTO);
if(greatAdvanceMeasurementDTO != null){
final AdvanceMeasurement greatAdvanceMeasurement = this.manageOrderElementAdvancesModel
.getFirstAdvanceMeasurement(advanceAssigment);
if (greatAdvanceMeasurement != null) {
Listcell percentage = (Listcell) selectedItem.getChildren()
.get(3);
((Label)percentage.getFirstChild()).setValue(greatAdvanceMeasurementDTO.getPercentage_());
((Label) percentage.getFirstChild())
.setValue(this.manageOrderElementAdvancesModel
.getPercentageAdvanceMeasurement(
greatAdvanceMeasurement).toString()
+ " %");
}
}
}
@ -423,21 +445,21 @@ public class ManageOrderElementAdvancesController extends
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){
AdvanceAssigment advanceAssigment = (AdvanceAssigment) selectedItem
.getValue();
final AdvanceMeasurement greatAdvanceMeasurement = this.manageOrderElementAdvancesModel
.getFirstAdvanceMeasurement(advanceAssigment);
if (greatAdvanceMeasurement != null) {
Listcell value = (Listcell)selectedItem.getChildren().get(2);
((Decimalbox)value.getFirstChild()).setValue(greatAdvanceMeasurementDTO.getValue());
((Decimalbox) value.getFirstChild())
.setValue(greatAdvanceMeasurement.getValue());
}
}
}
public void setCurrentDate(Listitem item){
this.manageOrderElementAdvancesModel.modifyListAdvanceMeasurement(
(AdvanceMeasurementDTO)item.getValue());
this.manageOrderElementAdvancesModel.sortListAdvanceMeasurement();
Util.reloadBindings(window.getFellow("editAdvancesMeasurement"));
this.setCurrentDate();
@ -449,20 +471,23 @@ public class ManageOrderElementAdvancesController extends
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());
AdvanceAssigment advanceAssigment = (AdvanceAssigment) selectedItem
.getValue();
final AdvanceMeasurement greatAdvanceMeasurement =
this.manageOrderElementAdvancesModel
.getFirstAdvanceMeasurement(advanceAssigment);
if(greatAdvanceMeasurement != null){
Listcell date = (Listcell) selectedItem.getChildren().get(4);
((Datebox) date.getFirstChild())
.setValue(greatAdvanceMeasurement.getDate());
}
}
}
private void cleanDate(final Listitem item){
final AdvanceMeasurementDTO advanceMeasurementDTO = (AdvanceMeasurementDTO) item.getValue();
advanceMeasurementDTO.setDate(null);
final AdvanceMeasurement advanceMeasurement = (AdvanceMeasurement) item
.getValue();
advanceMeasurement.setDate(null);
Listcell celdaDate = (Listcell)item.getChildren().get(2);
((Datebox)celdaDate.getFirstChild()).setValue(null);
}
@ -481,58 +506,17 @@ public class ManageOrderElementAdvancesController extends
Radio radioSpread = ((Radio)celdaSpread.getFirstChild());
if(!radioSpread.isDisabled()){
radioSpread.setChecked(false);
((AdvanceAssigmentDTO)listItem.getValue()).setReportGlobalAdvance(false);
((AdvanceAssigment) listItem.getValue())
.setReportGlobalAdvance(false);
}
}
}
Listcell celdaSpread = (Listcell) item.getChildren().get(5);
((Radio)celdaSpread.getFirstChild()).setChecked(true);
((AdvanceAssigmentDTO)item.getValue()).setReportGlobalAdvance(true);
((AdvanceAssigment) item.getValue()).setReportGlobalAdvance(true);
}
public Constraint checkValidValue() {
Constraint newConstraint = new Constraint() {
@Override
public void validate(Component comp, Object value)
throws WrongValueException {
if (((BigDecimal) value) != null){
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((BigDecimal)value))) {
throw new WrongValueException(
comp,
_("Value is not valid, the Precision value must be exact "
+manageOrderElementAdvancesModel.getUnitPrecision()));
}
}
}
};
return newConstraint;
}
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 advanceMeasurementDTO =(AdvanceMeasurementDTO) listitem.getValue();
if(!manageOrderElementAdvancesModel.isDistinctValidDate((Date)value,advanceMeasurementDTO)){
throw new WrongValueException(
comp,
_("The date is not valid, the date must be unique for this advance assigment"));
}
}
}
};
return newConstraint;
}
private boolean validateDataForm(){
return ((validateListAdvanceAssigment())
&&(validateListAdvanceMeasurement()));
@ -543,9 +527,12 @@ public class ManageOrderElementAdvancesController extends
for(int i=0; i< listAdvances.getChildren().size(); i++){
if(listAdvances.getChildren().get(i) instanceof Listitem){
Listitem listItem = (Listitem) listAdvances.getChildren().get(i);
AdvanceAssigmentDTO advanceDTO = (AdvanceAssigmentDTO) listItem.getValue();
if(advanceDTO.getAdvanceType() == null)return false;
if(advanceDTO.getMaxValue() == null)return false;
AdvanceAssigment advance = (AdvanceAssigment) listItem
.getValue();
if (advance.getAdvanceType() == null)
return false;
if (advance.getMaxValue() == null)
return false;
}
}
return true;
@ -556,9 +543,12 @@ public class ManageOrderElementAdvancesController extends
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;
AdvanceMeasurement advance = (AdvanceMeasurement) listItem
.getValue();
if (advance.getValue() == null)
return false;
if (advance.getDate() == null)
return false;
}
}
return true;
@ -570,10 +560,12 @@ public class ManageOrderElementAdvancesController extends
for(int i=0; i< listAdvances.getChildren().size(); i++){
if(listAdvances.getChildren().get(i) instanceof Listitem){
Listitem listItem = (Listitem) listAdvances.getChildren().get(i);
AdvanceAssigmentDTO advanceAssigmentDTO = (AdvanceAssigmentDTO) listItem.getValue();
if(advanceAssigmentDTO.getType().equals(AdvanceAssigment.Type.DIRECT)){
AdvanceAssigment advanceAssigment = (AdvanceAssigment) listItem
.getValue();
if (advanceAssigment.getType().equals(
AdvanceAssigment.Type.DIRECT)) {
existItems = true;
if(advanceAssigmentDTO.getReportGlobalAdvance()){
if (advanceAssigment.getReportGlobalAdvance()) {
return true;
}
}
@ -582,4 +574,155 @@ public class ManageOrderElementAdvancesController extends
if(!existItems) return true;
return false;
}
}
public AdvanceMeasurementRenderer getAdvanceMeasurementRenderer() {
return advanceMeasurementRenderer;
}
private class AdvanceMeasurementRenderer implements ListitemRenderer {
@Override
public void render(Listitem item, Object data) throws Exception {
AdvanceMeasurement advanceMeasurement = (AdvanceMeasurement) data;
item.setValue(advanceMeasurement);
appendDecimalBoxValue(item);
appendLabelPercentage(item);
appendDateboxDate(item);
}
private void appendDecimalBoxValue(final Listitem listitem) {
final AdvanceMeasurement advanceMeasurement = (AdvanceMeasurement) listitem
.getValue();
final Decimalbox value = new Decimalbox();
Listcell listcell = new Listcell();
listcell.appendChild(value);
listitem.appendChild(listcell);
value.setScale(2);
value.setDisabled(isReadOnlyAdvanceMeasurements());
value.addEventListener(Events.ON_CHANGE, new EventListener() {
@Override
public void onEvent(Event event) throws Exception {
updatesValue(value);
}
});
value.setConstraint(checkValidValue());
Util.bind(value, new Util.Getter<BigDecimal>() {
@Override
public BigDecimal get() {
return advanceMeasurement.getValue();
}
}, new Util.Setter<BigDecimal>() {
@Override
public void set(BigDecimal value) {
advanceMeasurement.setValue(value);
}
});
}
private void appendLabelPercentage(final Listitem listitem) {
final AdvanceMeasurement advanceMeasurement = (AdvanceMeasurement) listitem
.getValue();
BigDecimal percentage = manageOrderElementAdvancesModel
.getPercentageAdvanceMeasurement(advanceMeasurement);
Label percentageLabel = new Label(percentage.toString() + " %");
Listcell listcell = new Listcell();
listcell.appendChild(percentageLabel);
listitem.appendChild(listcell);
}
private void appendDateboxDate(final Listitem listitem) {
final AdvanceMeasurement advanceMeasurement = (AdvanceMeasurement) listitem
.getValue();
Datebox date = new Datebox();
Listcell listcell = new Listcell();
listcell.appendChild(date);
listitem.appendChild(listcell);
date.setDisabled(isReadOnlyAdvanceMeasurements());
date.addEventListener(Events.ON_CHANGE, new EventListener() {
@Override
public void onEvent(Event event) throws Exception {
setCurrentDate(listitem);
}
});
date.setConstraint(checkValidDate());
Util.bind(date, new Util.Getter<Date>() {
@Override
public Date get() {
return advanceMeasurement.getDate();
}
}, new Util.Setter<Date>() {
@Override
public void set(Date value) {
advanceMeasurement.setDate(value);
}
});
}
private Constraint checkValidValue() {
Constraint newConstraint = new Constraint() {
@Override
public void validate(Component comp, Object value)
throws WrongValueException {
if (((BigDecimal) value) != null) {
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((BigDecimal) value))) {
throw new WrongValueException(
comp,
_("Value is not valid, the Precision value must be exact "
+ manageOrderElementAdvancesModel
.getUnitPrecision()));
}
}
}
};
return newConstraint;
}
private 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();
AdvanceMeasurement advanceMeasurement = (AdvanceMeasurement) listitem
.getValue();
if (!manageOrderElementAdvancesModel
.isDistinctValidDate((Date) value,
advanceMeasurement)) {
throw new WrongValueException(
comp,
_("The date is not valid, the date must be unique for this advance assigment"));
}
}
}
};
return newConstraint;
}
}
}

View file

@ -5,6 +5,7 @@ import static org.navalplanner.web.I18nHelper._;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.SortedSet;
@ -45,9 +46,7 @@ public class ManageOrderElementAdvancesModel implements
private OrderElement orderElement;
private AdvanceAssigmentDTO advanceAssigmentDTO;
private List<AdvanceAssigmentDTO> advanceAssigmentDTOs;
private AdvanceAssigment advanceAssigment;
private List<AdvanceAssigment> listAdvanceAssigments;
@ -68,51 +67,60 @@ public class ManageOrderElementAdvancesModel implements
@Override
public String getInfoAdvanceAssigment(){
if((this.advanceAssigmentDTO == null) ||
if ((this.advanceAssigment == null) ||
(this.orderElement == null)) {
return "";
}
if((this.advanceAssigmentDTO.getUnitName() == null) ||
this.advanceAssigmentDTO.getMaxValue() == null){
if ((this.advanceAssigment.getAdvanceType() == null)
|| this.advanceAssigment.getMaxValue() == null) {
return "";
}
return " "+this.advanceAssigmentDTO.getUnitName()+_(". Max value: ")+
this.advanceAssigmentDTO.getMaxValue();
return " " + this.advanceAssigment.getAdvanceType().getUnitName()
+ _(". Max value: ") + this.advanceAssigment.getMaxValue();
}
@Override
@Transactional(readOnly = true)
public List<AdvanceMeasurementDTO> getAdvanceMeasurementDTOs() {
if((this.advanceAssigmentDTO == null) ||
public List<AdvanceMeasurement> getAdvanceMeasurements() {
if ((this.advanceAssigment == null) ||
(this.orderElement == null)) {
return new ArrayList<AdvanceMeasurementDTO>();
return new ArrayList<AdvanceMeasurement>();
}
return this.advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView();
return new ArrayList<AdvanceMeasurement>(this.advanceAssigment
.getAdvanceMeasurements());
}
@Override
@Transactional(readOnly = true)
public List<AdvanceAssigmentDTO> getAdvanceAssigmentDTOs(){
if(this.orderElement == null){
return new ArrayList<AdvanceAssigmentDTO>();
public List<AdvanceAssigment> getAdvanceAssigments() {
if (orderElement == null) {
return new ArrayList<AdvanceAssigment>();
}
return this.advanceAssigmentDTOs;
return listAdvanceAssigments;
}
@Override
public void prepareEditAdvanceMeasurements(AdvanceAssigmentDTO advanceAssigmentDTO){
this.advanceAssigmentDTO = advanceAssigmentDTO;
public void prepareEditAdvanceMeasurements(AdvanceAssigment advanceAssigment) {
this.advanceAssigment = advanceAssigment;
}
@Override
@Transactional(readOnly = true)
public void init(OrderElement orderElement) {
this.orderElement = orderElement;
this.advanceAssigmentDTO = null;
this.advanceAssigment = null;
if (orderElement != null){
loadAdvanceTypes();
reattachmentOrderElement();
createAdvanceDTOs();
forceLoadAdvanceAssigmentsAndMeasurements();
fillVariables();
}
}
private void forceLoadAdvanceAssigmentsAndMeasurements() {
for (AdvanceAssigment advanceAssigment : orderElement
.getAdvanceAssigments()) {
advanceAssigment.getAdvanceMeasurements().size();
}
}
@ -120,54 +128,48 @@ public class ManageOrderElementAdvancesModel implements
orderElementDAO.save(orderElement);
}
public void createAdvanceDTOs() {
this.advanceAssigmentDTOs = new ArrayList<AdvanceAssigmentDTO>();
private void fillVariables() {
this.listAdvanceAssigments = new ArrayList<AdvanceAssigment>();
this.listAdvanceMeasurements = new TreeSet<AdvanceMeasurement>(new AdvanceMeasurementComparator());
this.listAdvanceMeasurements = new TreeSet<AdvanceMeasurement>(
new AdvanceMeasurementComparator());
for (AdvanceAssigment advanceAssigment : this.orderElement
.getAdvanceAssigments()) {
AdvanceAssigmentDTO advanceAssigmentDTO = new AdvanceAssigmentDTO(
advanceAssigment.getAdvanceType(), advanceAssigment,
advanceAssigment.getAdvanceMeasurements());
for (AdvanceMeasurement advanceMeasurement : advanceAssigment.
getAdvanceMeasurements()) {
AdvanceMeasurementDTO advanceMeasurementDTO = new AdvanceMeasurementDTO(
advanceMeasurement);
advanceAssigmentDTO.getAdvanceMeasurementDTOs().add(advanceMeasurementDTO);
advanceMeasurementDTO.setAdvanceAssigmentDTO(advanceAssigmentDTO);
.getAdvanceAssigments()) {
this.listAdvanceAssigments.add(advanceAssigment);
for (AdvanceMeasurement advanceMeasurement : advanceAssigment
.getAdvanceMeasurements()) {
this.listAdvanceMeasurements.add(advanceMeasurement);
}
this.advanceAssigmentDTOs.add(advanceAssigmentDTO);
this.listAdvanceAssigments.add(advanceAssigment);
}
}
@Override
public void addNewLineAdvaceAssigment() {
AdvanceAssigmentDTO newAdvance = new AdvanceAssigmentDTO();
this.advanceAssigmentDTOs.add(newAdvance);
AdvanceAssigment newAdvance = AdvanceAssigment.create();
newAdvance.setType(AdvanceAssigment.Type.DIRECT);
newAdvance.setOrderElement(this.orderElement);
listAdvanceAssigments.add(newAdvance);
}
@Override
public void addNewLineAdvaceMeasurement() {
if(this.advanceAssigmentDTO != null){
AdvanceMeasurementDTO newAdvance = new AdvanceMeasurementDTO();
newAdvance.setAdvanceAssigmentDTO(advanceAssigmentDTO);
this.advanceAssigmentDTO.getAdvanceMeasurementDTOs().add(newAdvance);
if (this.advanceAssigment != null) {
AdvanceMeasurement newMeasurement = AdvanceMeasurement.create();
newMeasurement.setDate(new Date());
newMeasurement.setAdvanceAssigment(this.advanceAssigment);
this.advanceAssigment.getAdvanceMeasurements().add(newMeasurement);
}
}
@Override
public void removeLineAdvanceAssigment(AdvanceAssigmentDTO advanceDTO) {
this.advanceAssigmentDTOs.remove(advanceDTO);
this.advanceAssigmentDTO = null;
public void removeLineAdvanceAssigment(AdvanceAssigment advance) {
this.listAdvanceAssigments.remove(advance);
this.advanceAssigment = null;
}
@Override
public void removeLineAdvanceMeasurement(AdvanceMeasurementDTO advanceDTO) {
this.advanceAssigmentDTO.getAdvanceMeasurementDTOs().remove(advanceDTO);
public void removeLineAdvanceMeasurement(AdvanceMeasurement advance) {
this.advanceAssigment.getAdvanceMeasurements().remove(advance);
}
@Override
@ -184,20 +186,22 @@ public class ManageOrderElementAdvancesModel implements
}
@Override
public boolean isReadOnlyAdvanceMeasurementDTOs(){
if(this.advanceAssigmentDTO == null) return true;
return this.advanceAssigmentDTO.getType().equals(AdvanceAssigment.Type.CALCULATED);
public boolean isReadOnlyAdvanceMeasurements(){
if (this.advanceAssigment == null)
return true;
return this.advanceAssigment.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);
if (this.advanceAssigment != null) {
this.advanceAssigment.setReportGlobalAdvance(false);
List<AdvanceMeasurement> listAdvanceMeasurements = new ArrayList<AdvanceMeasurement>(
this.advanceAssigment.getAdvanceMeasurements());
for (AdvanceMeasurement advanceMeasurement : listAdvanceMeasurements) {
advanceMeasurement.setValue(BigDecimal.ZERO);
advanceMeasurement.setDate(null);
}
}
}
@ -216,23 +220,20 @@ public class ManageOrderElementAdvancesModel implements
DuplicateAdvanceAssigmentForOrderElementException,
DuplicateValueTrueReportGlobalAdvanceException{
updateRemoveAdvances();
for(AdvanceAssigmentDTO advanceAssigmentDTO : this.advanceAssigmentDTOs){
if(advanceAssigmentDTO.getType().equals(AdvanceAssigment.Type.DIRECT))
validateBasicData(advanceAssigmentDTO);
for (AdvanceAssigment advanceAssigment : this.listAdvanceAssigments) {
if(advanceAssigment.getType().equals(AdvanceAssigment.Type.DIRECT))
validateBasicData(advanceAssigment);
}
}
private void updateRemoveAdvances(){
for(AdvanceAssigment advanceAssigment : this.listAdvanceAssigments){
AdvanceAssigmentDTO advanceAssigmentDTO = yetExistAdvanceAssigment(advanceAssigment);
if(advanceAssigmentDTO == null){
updateRemoveCalculatedAdvanceAssigment(orderElement,advanceAssigment);
removeAdvanceAssigment(advanceAssigment);
AdvanceAssigment advance = yetExistAdvanceAssigment(advanceAssigment);
if (advance == null) {
removeAdvanceAssigment(advance);
}else{
for(AdvanceMeasurement advanceMeasurement : this.listAdvanceMeasurements){
if(!yetExistAdvanceMeasurement(advanceAssigmentDTO,advanceMeasurement)){
updateRemoveCalculatedAdvanceMeasurement(orderElement,
advanceAssigment,advanceMeasurement);
if (!yetExistAdvanceMeasurement(advance, advanceMeasurement)) {
removeAdvanceMeasurement(advanceMeasurement);
}
}
@ -240,118 +241,40 @@ public class ManageOrderElementAdvancesModel implements
}
}
private void validateBasicData(AdvanceAssigmentDTO advanceAssigmentDTO)
private void validateBasicData(AdvanceAssigment advanceAssigment)
throws InstanceNotFoundException,DuplicateAdvanceAssigmentForOrderElementException,
DuplicateValueTrueReportGlobalAdvanceException{
if(advanceAssigmentDTO.getIsNewDTO()){
AdvanceAssigment newAdvanceAssigment = createNewAdvance(advanceAssigmentDTO);
addCalculatedAdvanceAssigmentToAncestors(this.orderElement,
advanceAssigmentDTO,newAdvanceAssigment);
addAdvanceAssigment(newAdvanceAssigment);
}else{
AdvanceAssigment newAdvanceAssigment = advanceAssigmentDTO.getAdvanceAssigment();
addCalculatedAdvanceAssigmentToAncestors(this.orderElement,
advanceAssigmentDTO,newAdvanceAssigment);
updateAdvanceAssigment(advanceAssigmentDTO);
if (advanceAssigment.getVersion() == null) {
addAdvanceAssigment(advanceAssigment);
}
}
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{
AdvanceMeasurement newAdvanceMeasurement =
createAdvanceMeasurement(advanceMeasurementDTO);
removeAdvanceMeasurement(advanceMeasurementDTO.getAdvanceMeasurement());
advanceAssigment.getAdvanceMeasurements().add(newAdvanceMeasurement);
}
}
//Update changes in AdvanceAssigment
advanceAssigment.setReportGlobalAdvance(advanceAssigmentDTO.getReportGlobalAdvance());
advanceAssigment.setMaxValue(advanceAssigmentDTO.getMaxValue());
advanceAssigment.setAdvanceType(advanceAssigmentDTO.getAdvanceType());
}
private AdvanceMeasurement createAdvanceMeasurement(AdvanceMeasurementDTO advanceMeasurementDTO){
AdvanceMeasurement newAdvanceMeasurement = AdvanceMeasurement.create(
advanceMeasurementDTO.getDate(),advanceMeasurementDTO.getValue(),0);
AdvanceAssigment advanceAssigment = advanceMeasurementDTO.getAdvanceAssigmentDTO().
getAdvanceAssigment();
newAdvanceMeasurement.setAdvanceAssigment(advanceAssigment);
return newAdvanceMeasurement;
}
private AdvanceAssigmentDTO yetExistAdvanceAssigment(AdvanceAssigment advanceAssigment){
for(AdvanceAssigmentDTO advanceDTO : this.advanceAssigmentDTOs){
if((!advanceDTO.getIsNewDTO()) &&
(advanceDTO.getAdvanceAssigment().getId() == advanceAssigment.getId()))
return advanceDTO;
private AdvanceAssigment yetExistAdvanceAssigment(
AdvanceAssigment advanceAssigment) {
for (AdvanceAssigment advance : this.orderElement
.getAdvanceAssigments()) {
if ((advance.getId() == advanceAssigment.getId()))
return advance;
}
return null;
}
private boolean yetExistAdvanceMeasurement(AdvanceAssigmentDTO advanceAssigmentDTO,
private boolean yetExistAdvanceMeasurement(AdvanceAssigment advanceAssigment,
AdvanceMeasurement advanceMeasurement){
if(belongsToAdvanceAssigment(advanceAssigmentDTO,advanceMeasurement)){
for(AdvanceMeasurementDTO advanceDTO :
advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView()){
if((!advanceDTO.getIsNewDTO()) &&
(advanceDTO.getAdvanceMeasurement().getId() == advanceMeasurement.getId())){
return true;
}
}
return false;
}
return true;
}
private boolean belongsToAdvanceAssigment(AdvanceAssigmentDTO advanceAssigmentDTO,
AdvanceMeasurement advanceMeasurement){
AdvanceAssigment advanceAssigment = advanceAssigmentDTO.getAdvanceAssigment();
if(advanceAssigment != null){
if(advanceAssigment.getId() == advanceMeasurement.getAdvanceAssigment().getId())
for (AdvanceMeasurement advance : advanceAssigment
.getAdvanceMeasurements()) {
if (advance.getId() == advanceMeasurement.getId()) {
return true;
else return false;
}
}
return false;
}
@Transactional(readOnly = true)
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 AdvanceMeasurement
for(AdvanceMeasurementDTO advanceMeasurementDTO
:advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView()){
AdvanceMeasurement newAdvanceMeasurement = AdvanceMeasurement.create(
advanceMeasurementDTO.getDate(),advanceMeasurementDTO.getValue(),0);
//link AdvanceMeasurement to AdvanceAssigment
newAdvanceMeasurement.setAdvanceAssigment(newAdvanceAssigment);
newAdvanceAssigment.getAdvanceMeasurements().add(newAdvanceMeasurement);
}
advanceAssigmentDTO.setAdvanceAssigment(newAdvanceAssigment);
return newAdvanceAssigment;
}
@Transactional(readOnly = true)
private void addAdvanceAssigment(AdvanceAssigment newAdvanceAssigment)
throws DuplicateAdvanceAssigmentForOrderElementException,
DuplicateValueTrueReportGlobalAdvanceException{
this.orderElement.addAdvanceAssigment(newAdvanceAssigment);
this.orderElement.addAdvanceAssigment(newAdvanceAssigment);
}
private void removeAdvanceAssigment(AdvanceAssigment advanceAssigment){
@ -363,410 +286,12 @@ public class ManageOrderElementAdvancesModel implements
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.addAdvanceAssigment(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(),0);
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,0);
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 indirectAdvanceMeasurement =
findIndirectAdvanceMeasurement(advanceMeasurement.getDate(),indirectAdvanceAssigment);
//check if the indirect advanceMeasurement is the adding of several sons.
indirectAdvanceMeasurement.decrementNumIndirectSons();
if(indirectAdvanceMeasurement.getNumIndirectSons() == 0){
indirectAdvanceAssigment.getAdvanceMeasurements().remove(indirectAdvanceMeasurement);
}
//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 indirectAdvanceMeasurement =
findIndirectAdvanceMeasurement(advanceMeasurement.getDate(),indirectAdvanceAssigment);
//check if the indirect advanceMeasurement is the adding of several sons.
indirectAdvanceMeasurement.decrementNumIndirectSons();
if(indirectAdvanceMeasurement.getNumIndirectSons() == 0){
indirectAdvanceAssigment.getAdvanceMeasurements().remove(indirectAdvanceMeasurement);
}
//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.removeAdvanceAssigment(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) || (advanceAssigmentDTO.getIsNewDTO())) 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 AdvanceMeasurement findIndirectAdvanceMeasurement(
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(BigDecimal value){
if((this.advanceAssigmentDTO != null)
&& (this.advanceAssigmentDTO.getAdvanceType() != null)){
BigDecimal precision = this.advanceAssigmentDTO.getAdvanceType().getUnitPrecision();
if ((this.advanceAssigment != null)
&& (this.advanceAssigment.getAdvanceType() != null)) {
BigDecimal precision = this.advanceAssigment.getAdvanceType()
.getUnitPrecision();
BigDecimal result[] = value.divideAndRemainder(precision);
if(result[1].compareTo(BigDecimal.ZERO) == 0) return true;
return false;
@ -776,50 +301,42 @@ public class ManageOrderElementAdvancesModel implements
@Override
public boolean greatThanMaxValue(BigDecimal value){
if((this.advanceAssigmentDTO == null)
||(this.advanceAssigmentDTO.getMaxValue() == null))
if ((this.advanceAssigment == null)
|| (this.advanceAssigment.getMaxValue() == null))
return false;
if(value.compareTo(this.advanceAssigmentDTO.getMaxValue())>0)
if (value.compareTo(this.advanceAssigment.getMaxValue()) > 0)
return true;
return false;
}
@Override
public boolean isDistinctValidDate(Date value,AdvanceMeasurementDTO newAdvanceMeasurementDTO){
if(this.advanceAssigmentDTO == null) return true;
int equalsDates = 0;
for(AdvanceMeasurementDTO advanceMeasurementDTO
: advanceAssigmentDTO.getAdvanceMeasurementDTOs().toListView()){
Date oldDate = advanceMeasurementDTO.getDate();
if((oldDate != null) && (!newAdvanceMeasurementDTO.equals(advanceMeasurementDTO))
&& (oldDate.compareTo(value) == 0))
return false;
public boolean isDistinctValidDate(Date value,
AdvanceMeasurement newAdvanceMeasurement) {
if (this.advanceAssigment == null)
return true;
for (AdvanceMeasurement advanceMeasurement : advanceAssigment
.getAdvanceMeasurements()) {
Date oldDate = advanceMeasurement.getDate();
if ((oldDate != null)
&& (!newAdvanceMeasurement.equals(advanceMeasurement))
&& (oldDate.compareTo(value) == 0))
return false;
}
return true;
}
@Override
public BigDecimal getUnitPrecision(){
if(this.advanceAssigmentDTO == null){
if (this.advanceAssigment == null) {
return new BigDecimal(0);
}
return this.advanceAssigmentDTO.getAdvanceType().getUnitPrecision();
return this.advanceAssigment.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)){
(advanceAssigment.getAdvanceMeasurements().size() > 0)) {
SortedSet<AdvanceMeasurement> listAM = (SortedSet<AdvanceMeasurement>) advanceAssigment.getAdvanceMeasurements();
final AdvanceMeasurement advanceMeasurement = (AdvanceMeasurement) listAM.first();
return advanceMeasurement;
@ -828,7 +345,37 @@ public class ManageOrderElementAdvancesModel implements
}
@Override
public void modifyListAdvanceMeasurement(AdvanceMeasurementDTO advanceMeasurementDTO){
this.advanceAssigmentDTO.getAdvanceMeasurementDTOs().modified(advanceMeasurementDTO);
public void sortListAdvanceMeasurement() {
ArrayList<AdvanceMeasurement> advanceMeasurements = new ArrayList<AdvanceMeasurement>(
this.advanceAssigment.getAdvanceMeasurements());
Collections.sort(advanceMeasurements,
new AdvanceMeasurementComparator());
TreeSet<AdvanceMeasurement> measurements = new TreeSet<AdvanceMeasurement>(
new AdvanceMeasurementComparator());
measurements.addAll(advanceMeasurements);
this.advanceAssigment
.setAdvanceMeasurements(measurements);
}
@Override
public BigDecimal getPercentageAdvanceMeasurement(
AdvanceMeasurement advanceMeasurement) {
if (advanceMeasurement.getAdvanceAssigment() == null) {
return BigDecimal.ZERO;
}
BigDecimal maxValue = advanceMeasurement.getAdvanceAssigment()
.getMaxValue();
if (maxValue.compareTo(BigDecimal.ZERO) <= 0) {
return BigDecimal.ZERO;
}
BigDecimal value = advanceMeasurement.getValue();
if (value == null) {
return BigDecimal.ZERO;
}
return value.divide(maxValue).multiply(new BigDecimal(100));
}
}

View file

@ -1,5 +1,7 @@
package org.navalplanner.web.orders;
import static org.navalplanner.web.I18nHelper._;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
@ -32,8 +34,6 @@ import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import static org.navalplanner.web.I18nHelper._;
/**
* Model for UI operations related to {@link Order}. <br />
*

View file

@ -8,13 +8,13 @@
</button>
<button label="${i18n:_('Remove')}"
onClick="manageOrderElementAdvancesController.goToRemoveLineAdvanceAssigment();"
disabled = "@{manageOrderElementAdvancesController.isReadOnlyAdvanceMeasurementDTOs}">
disabled = "@{manageOrderElementAdvancesController.isReadOnlyAdvanceMeasurements}">
</button>
</hbox>
</vbox>
<vbox>
<listbox id="editAdvances"
model="@{manageOrderElementAdvancesController.advanceAssigmentDTOs}"
model="@{manageOrderElementAdvancesController.advanceAssigments}"
itemRenderer="@{manageOrderElementAdvancesController.advancesRenderer}" mold="paging"
onSelect="manageOrderElementAdvancesController.prepareEditAdvanceMeasurements(self.selectedItem.value);"
pageSize="10">
@ -37,38 +37,23 @@
<hbox>
<button label="${i18n:_('Add new advance measurement')}"
onClick="manageOrderElementAdvancesController.goToCreateLineAdvanceMeasurement();"
disabled = "@{manageOrderElementAdvancesController.isReadOnlyAdvanceMeasurementDTOs}">
disabled = "@{manageOrderElementAdvancesController.isReadOnlyAdvanceMeasurements}">
</button>
<button label="${i18n:_('Remove')}"
onClick="manageOrderElementAdvancesController.goToRemoveLineAdvanceMeasurement();"
disabled = "@{manageOrderElementAdvancesController.isReadOnlyAdvanceMeasurementDTOs}">
disabled = "@{manageOrderElementAdvancesController.isReadOnlyAdvanceMeasurements}">
</button>
</hbox>
<hbox>
<listbox id="editAdvancesMeasurement"
model="@{manageOrderElementAdvancesController.advanceMeasurementDTOs}"
model="@{manageOrderElementAdvancesController.advanceMeasurements}"
itemRenderer="@{manageOrderElementAdvancesController.advanceMeasurementRenderer}"
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}"
onChange = "manageOrderElementAdvancesController.setCurrentDate(self.parent.parent);"
constraint = "@{manageOrderElementAdvancesController.checkValidDate}"/>
</listcell>
</listitem>
</listbox>
</hbox>
</vbox>