diff --git a/i18n/Babydatenbank-labels_de.properties b/i18n/Babydatenbank-labels_de.properties index 4f31618..14eddcd 100644 --- a/i18n/Babydatenbank-labels_de.properties +++ b/i18n/Babydatenbank-labels_de.properties @@ -17,6 +17,7 @@ pattern=Muster brand=Marke condition=Zustand size=Größe +discountedSellPrice=Preis nach Rabatt articleCount=Anzahl Artikel originalPriceSum=Summe Originalpreise diff --git a/src/com/yourcompany/babydatenbank/actions/OnChangeArticleConditionAction.java b/src/com/yourcompany/babydatenbank/actions/OnChangeArticleConditionAction.java new file mode 100644 index 0000000..02eff59 --- /dev/null +++ b/src/com/yourcompany/babydatenbank/actions/OnChangeArticleConditionAction.java @@ -0,0 +1,22 @@ +package com.yourcompany.babydatenbank.actions; + +import org.openxava.actions.*; +import org.openxava.jpa.*; + +import com.yourcompany.babydatenbank.model.*; + +public class OnChangeArticleConditionAction extends OnChangePropertyBaseAction { + + @Override + public void execute() throws Exception { + try { + Condition c = XPersistence.getManager().find(Condition.class, getNewValue().toString()); + + getView().setValue("discount", c.getDefaultDiscount()); + } + catch(NullPointerException e) { + getView().setValue("discount", 0); + } + } + +} diff --git a/src/com/yourcompany/babydatenbank/model/Article.java b/src/com/yourcompany/babydatenbank/model/Article.java index daffd04..7f0163a 100644 --- a/src/com/yourcompany/babydatenbank/model/Article.java +++ b/src/com/yourcompany/babydatenbank/model/Article.java @@ -4,17 +4,24 @@ import javax.persistence.*; import org.hibernate.annotations.GenericGenerator; import org.openxava.annotations.*; -import java.math.BigDecimal; + +import com.yourcompany.babydatenbank.actions.*; + +import java.math.*; import java.time.*; +import javax.validation.constraints.*; + @Entity @View(members= "name;" + "photo;"+ "#category, pattern;"+ "#brand, size;"+ - "buyAndSell[condition;"+ - "#originalPrice, buyPrice, sellPrice;"+ + "buyAndSell["+ + "#condition, discount;"+ + "#originalPrice, discountedSellPrice;"+ + "buyPrice, sellPrice;"+ "#buyDate, sellDate];" + "remarks" ) @@ -57,6 +64,7 @@ public class Article { @NoCreate @NoModify @DescriptionsList(order="${number} ASC") + @OnChange(OnChangeArticleConditionAction.class) private Condition condition; @Stereotype("MONEY") @@ -79,6 +87,11 @@ public class Article { @Stereotype("DATE") private LocalDate sellDate; + + @Column(length=8) + @Digits(integer=3,fraction=0) + @Max(value=100) + private BigDecimal discount; public String getOid() { return oid; @@ -191,6 +204,25 @@ public class Article { public void setSellDate(LocalDate sellDate) { this.sellDate = sellDate; } + + public BigDecimal getDiscount() { + return discount; + } + + public void setDiscount(BigDecimal discount) { + this.discount = discount; + } + + @Column(length=8) + @Stereotype("MONEY") + public BigDecimal getDiscountedSellPrice() { + try { + return getOriginalPrice().multiply(BigDecimal.ONE.subtract(getDiscount().divide(new BigDecimal(100), 2, RoundingMode.HALF_EVEN))); + } catch(Exception e) { + //Log.error(e); + return BigDecimal.ZERO; + } + } } diff --git a/src/com/yourcompany/babydatenbank/model/Condition.java b/src/com/yourcompany/babydatenbank/model/Condition.java index e8436e4..a299b7a 100644 --- a/src/com/yourcompany/babydatenbank/model/Condition.java +++ b/src/com/yourcompany/babydatenbank/model/Condition.java @@ -1,6 +1,10 @@ package com.yourcompany.babydatenbank.model; +import java.math.*; + import javax.persistence.*; +import javax.validation.constraints.*; + import org.hibernate.annotations.GenericGenerator; import org.openxava.annotations.*; @@ -18,6 +22,11 @@ public class Condition { @Column(length=32) private String description; + + @Column(length=8) + @Max(value=100) + @Digits(integer=3, fraction=0) + private BigDecimal defaultDiscount; public String getOid() { return oid; @@ -42,5 +51,13 @@ public class Condition { public void setNumber(int number) { this.number = number; } + + public BigDecimal getDefaultDiscount() { + return defaultDiscount; + } + + public void setDefaultDiscount(BigDecimal defaultDiscount) { + this.defaultDiscount = defaultDiscount; + } }