1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.efaps.db.print.value;
22
23 import java.math.BigDecimal;
24
25 import org.efaps.admin.datamodel.Attribute;
26 import org.efaps.admin.datamodel.attributetype.AbstractWithUoMType;
27 import org.efaps.admin.datamodel.attributetype.DecimalType;
28 import org.efaps.admin.datamodel.attributetype.RateType;
29 import org.efaps.db.print.OneSelect;
30 import org.efaps.util.EFapsException;
31
32
33
34
35
36
37
38 public class ValueValueSelect
39 extends AbstractValueSelect
40 implements IAttributeChildValueSelect
41 {
42
43
44
45
46 public ValueValueSelect(final OneSelect _oneSelect)
47 {
48 super(_oneSelect);
49 }
50
51
52
53
54 @Override
55 public String getValueType()
56 {
57 return "value";
58 }
59
60
61
62
63
64
65
66 public Object get(final Attribute _attribute,
67 final Object _object)
68 throws EFapsException
69 {
70 final Object ret;
71 if (_attribute.getAttributeType().getDbAttrType() instanceof RateType) {
72 ret = getRate(_attribute, _object);
73 } else if (_attribute.getAttributeType().getDbAttrType() instanceof AbstractWithUoMType) {
74 ret = getValueUOM(_object);
75 } else {
76 ret = _object;
77 }
78 return ret;
79 }
80
81
82
83
84
85
86
87 protected Object getRate(final Attribute _attribute,
88 final Object _object)
89 throws EFapsException
90 {
91 Object ret = null;
92 if (_object instanceof Object[]) {
93 final Object[] values = (Object[]) _object;
94
95 BigDecimal numerator;
96 if (values[0] instanceof BigDecimal) {
97 numerator = (BigDecimal) values[0];
98 } else {
99 numerator = DecimalType.parseLocalized(values[0].toString());
100 }
101 BigDecimal denominator;
102 if (values[1] instanceof BigDecimal) {
103 denominator = (BigDecimal) values[1];
104 } else {
105 denominator = DecimalType.parseLocalized(values[1].toString());
106 }
107
108
109 if (_attribute != null) {
110 if (numerator.scale() < _attribute.getScale()) {
111 numerator = numerator.setScale(_attribute.getScale());
112 }
113 if (denominator.scale() < _attribute.getScale()) {
114 denominator = denominator.setScale(_attribute.getScale());
115 }
116 }
117 ret = numerator.divide(denominator,
118 numerator.scale() > denominator.scale() ? numerator.scale() : denominator.scale(),
119 BigDecimal.ROUND_UP);
120 }
121 return ret;
122 }
123
124
125
126
127
128 protected Object getValueUOM(final Object _object)
129 {
130 Object ret = null;
131 if (_object instanceof Object[]) {
132 final Object[] values = (Object[]) _object;
133 ret = values[0];
134 }
135 return ret;
136 }
137 }