View Javadoc
1   package com.srv4pos.server.api.sale;
2   
3   import com.srv4pos.server.api.infrastructure.Info;
4   import com.srv4pos.server.api.tax.TaxInfo;
5   import org.springframework.roo.addon.javabean.RooJavaBean;
6   import org.springframework.roo.addon.json.RooJson;
7   import org.springframework.roo.addon.tostring.RooToString;
8   
9   import javax.validation.constraints.Min;
10  import javax.validation.constraints.NotNull;
11  import java.util.Date;
12  
13  /**
14   * <p>User: Pavel Abizyaev, Date: 04.09.2014 17:47</p>.
15   */
16  @RooJavaBean
17  @RooToString
18  @RooJson(deepSerialize = true)
19  public class SaleProductInfo implements Info {
20      /**
21       * Product identifier.
22       */
23      @NotNull
24      private String productIdentifier;
25  
26      @NotNull
27      private boolean deltaUnit;
28  
29      /**
30       * Brutto of product unit.
31       */
32      @NotNull
33      @Min(0)
34      private long productBrutto;
35  
36      /**
37       * VAT rate of product.
38       */
39      private long vatRate;
40  
41      /**
42       * The amount of products.
43       */
44      @NotNull
45      private long delta;
46  
47      /**
48       * Absolute discount.
49       */
50      @NotNull
51      @Min(0)
52      private long absoluteDiscount;
53  
54      /**
55       * Relative discount.
56       */
57      @NotNull
58      @Min(0)
59      private int relativeDiscount;
60  
61      /**
62       * Value-added tax.
63       *
64       * vat = {@link SaleProductInfo#brutto} - {@link SaleProductInfo#brutto} * 100000 / (10000 + {@link TaxInfo#vat}) / 10
65       */
66      @NotNull
67      @Min(0)
68      private long vat;
69  
70      /**
71       * Sale product price without tax.
72       *
73       * netto = round({@link SaleProductInfo#brutto} * 100000 / (10000 + {@link TaxInfo#vat}))
74       */
75      @NotNull
76      @Min(0)
77      private long netto;
78  
79      /**
80       * Sale product price with tax.
81       *
82       * brutto = vanillaBrutto - discount
83       */
84      @NotNull
85      @Min(0)
86      private long brutto;
87  
88      /**
89       * Sum of brutto of all products.
90       *
91       * vanillaBrutto = {@link SaleProductInfo#deltaUnit} == 1 ? round({@link SaleProductInfo#brutto} * {@link SaleProductInfo#delta} / 100)
92       * : {@link SaleProductInfo#delta}
93       */
94      @NotNull
95      @Min(0)
96      private long vanillaBrutto;
97  
98      /**
99       * Sum of brutto of all products with sale discount.
100      *
101      * effectiveBrutto = {@link SaleInfo#relativeDiscount} != 0 ? {@link SaleProductInfo#brutto} * (10000 - {@link SaleInfo#relativeDiscount} / 10000)
102      * : {@link SaleProductInfo#brutto} - ({@link SaleInfo#absoluteDiscount} * {@link SaleProductInfo#brutto} * 10 / {@link SaleInfo#brutto} / 10)
103      */
104     @NotNull
105     @Min(0)
106     private long effectiveBrutto;
107 
108     /**
109      * Sale product discount.
110      *
111      * discount = {@link SaleProductInfo#relativeDiscount} != 0 ? {@link SaleProductInfo#vanillaBrutto} / (1 + {@link SaleProductInfo#relativeDiscount})
112      * : {@link SaleProductInfo#absoluteDiscount}
113      */
114     @NotNull
115     @Min(0)
116     private long discount;
117 
118     /**
119      * Created date.
120      */
121     private Date created;
122 }