1 package com.srv4pos.server.api.sync.sample;
2
3 import com.srv4pos.server.api.ServiceFactory;
4 import com.srv4pos.server.api.category.CategoryInfo;
5 import com.srv4pos.server.api.commodity.CommodityInfo;
6 import com.srv4pos.server.api.day.DayInfo;
7 import com.srv4pos.server.api.infrastructure.credentials.Credentials;
8 import com.srv4pos.server.api.infrastructure.http.Transport;
9 import com.srv4pos.server.api.keyboard.DeviceFormFactor;
10 import com.srv4pos.server.api.keyboard.KeyboardInfo;
11 import com.srv4pos.server.api.keyboardentry.KeyAction;
12 import com.srv4pos.server.api.keyboardentry.KeyboardEntryInfo;
13 import com.srv4pos.server.api.order.OrderInfo;
14 import com.srv4pos.server.api.order.OrderItemInfo;
15 import com.srv4pos.server.api.posplus.PrintType;
16 import com.srv4pos.server.api.product.ProductInfo;
17 import com.srv4pos.server.api.product.SalesUnit;
18 import com.srv4pos.server.api.sale.*;
19 import com.srv4pos.server.api.seller.SellerInfo;
20 import com.srv4pos.server.api.sync.EntityPictureSyncAdapter;
21 import com.srv4pos.server.api.sync.EntitySyncAdapter;
22 import com.srv4pos.server.api.sync.Synchronization;
23 import com.srv4pos.server.api.tax.TaxInfo;
24 import com.srv4pos.server.api.transportation.TripInfo;
25 import com.srv4pos.server.api.treasurer.TreasurerInfo;
26 import org.apache.commons.logging.Log;
27 import org.apache.commons.logging.LogFactory;
28 import org.junit.Assert;
29 import org.junit.Test;
30
31 import java.net.URL;
32 import java.util.*;
33
34
35 public class SynchronizationSample {
36
37 private final ServiceFactory apiServiceFactory;
38
39 private static final Log LOG = LogFactory.getLog(SynchronizationSample.class);
40
41 public SynchronizationSample(URL url, Credentials credentials, Transport transport) {
42 apiServiceFactory = new ServiceFactory(url, credentials, transport);
43 }
44
45
46
47
48
49
50
51
52
53
54
55
56 @Test
57 public void test() throws Exception {
58
59 MemoryLocalStorage firstClientStorage = new MemoryLocalStorage();
60 MemoryLocalStorage secondClientStorage = new MemoryLocalStorage();
61
62 final SellerInfo sellerInfo = apiServiceFactory.getSellerService().get(null);
63 firstClientStorage.setSeller(sellerInfo);
64 secondClientStorage.setSeller(sellerInfo);
65
66 String cashRegisterName = "testcr";
67
68
69 Assert.assertTrue("First client initial sync", doSync(firstClientStorage));
70 Assert.assertTrue("Second client initial sync", doSync(secondClientStorage));
71
72
73
74
75
76
77
78 final SyncTax tax1 = new SyncTax(buildTaxInfo("Test tax 1", 12));
79 final SyncTax tax2 = new SyncTax(buildTaxInfo("Test tax 2", 24));
80 final SyncTax tax3 = new SyncTax(buildTaxInfo("Test tax 3", 30));
81 final SyncTax tax4 = firstClientStorage.getTaxByVat(25);
82
83 firstClientStorage.add(tax1);
84 firstClientStorage.add(tax2);
85 firstClientStorage.add(tax3);
86
87
88 final SyncProduct product1 = new SyncProduct(buildProductInfo("P-1","Product 1", "123", 1000, SalesUnit.Price), tax1);
89 final SyncProduct product2 = new SyncProduct(buildProductInfo("P-2","Product 2", "456", 2000, SalesUnit.Price), tax1);
90 final SyncProduct product3 = new SyncProduct(buildProductInfo("P-3","Product 3", "789", 1500, SalesUnit.Kilogram), tax2);
91 final SyncProduct product4 = new SyncProduct(buildProductInfo("P-4","Product 4", "001", 3000, SalesUnit.Piece), tax2);
92 final SyncProduct product5 = new SyncProduct(buildProductInfo("P-5","Product 5", "002", 1010, SalesUnit.Kilogram), tax2);
93 final SyncProduct product6 = new SyncProduct(buildProductInfo("P-6","Product 6", "003", 5000, SalesUnit.Price), tax3);
94 final SyncProduct product7 = new SyncProduct(buildProductInfo("P-7","Product 7", "004", 1000, SalesUnit.Piece), tax4);
95 final SyncProduct product8 = new SyncProduct(buildProductInfo("P-8","Product 8", "005", 3000, SalesUnit.Piece), tax4);
96 final SyncProduct product9 = new SyncProduct(buildProductInfo("P-9","Product 9", "006", 1600, SalesUnit.Piece), tax1);
97 final SyncProduct product10 = new SyncProduct(buildProductInfo("P-10","Product 10", "007", 3000, SalesUnit.Piece), tax4);
98 final SyncProduct product11 = new SyncProduct(buildProductInfo("P-11","Product 11", "008", 1600, SalesUnit.Piece), tax1);
99
100
101 final byte[] product1PictureContentAsPNG = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
102 final byte[] product2PictureContentAsPNG = {6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
103 product1.setPictureBytes(product1PictureContentAsPNG);
104 product2.setPictureBytes(product2PictureContentAsPNG);
105
106 firstClientStorage.add(product1);
107 firstClientStorage.add(product2);
108 firstClientStorage.add(product3);
109 firstClientStorage.add(product4);
110 firstClientStorage.add(product5);
111 firstClientStorage.add(product6);
112 firstClientStorage.add(product7);
113 firstClientStorage.add(product8);
114 firstClientStorage.add(product9);
115 firstClientStorage.add(product10);
116 firstClientStorage.add(product11);
117
118
119 final SyncCategory category1 = new SyncCategory(buildCategoryInfo("Category 1"));
120 final SyncCategory category2 = new SyncCategory(buildCategoryInfo("Category 2"));
121 final SyncCategory category3 = new SyncCategory(buildCategoryInfo("Category 3"));
122 final SyncCategory category4 = new SyncCategory(buildCategoryInfo("Category 4"));
123
124
125 final byte[] category1PictureContentAsPNG = {10, 11, 12, 13, 14};
126 category1.setPictureBytes(category1PictureContentAsPNG);
127
128
129 category2.getInfo().setColor(0xffffff);
130
131 firstClientStorage.add(category1);
132 firstClientStorage.add(category2);
133 firstClientStorage.add(category3);
134 firstClientStorage.add(category4);
135
136
137 final SyncOrder order1 = new SyncOrder(buildOrderInfo(new ArrayList<OrderItemInfo>()));
138 final SyncOrder order2 = new SyncOrder(buildOrderInfo(new ArrayList<OrderItemInfo>()));
139 final SyncOrder order3 = new SyncOrder(buildOrderInfo(new ArrayList<OrderItemInfo>()));
140 final SyncOrder order4 = new SyncOrder(buildOrderInfo(new ArrayList<OrderItemInfo>()));
141
142 firstClientStorage.add(order1);
143 firstClientStorage.add(order2);
144 firstClientStorage.add(order3);
145 firstClientStorage.add(order4);
146
147
148 final SyncCommodity product1commodity = new SyncCommodity(new CommodityInfo(), product1, category1);
149 final SyncCommodity product2commodity = new SyncCommodity(new CommodityInfo(), product2, category1);
150 final SyncCommodity product3commodity = new SyncCommodity(new CommodityInfo(), product3, category2);
151 final SyncCommodity product4commodity = new SyncCommodity(new CommodityInfo(), product4, category2);
152 final SyncCommodity product5commodity = new SyncCommodity(new CommodityInfo(), product5, category2);
153 final SyncCommodity product6commodity = new SyncCommodity(new CommodityInfo(), product6, category3);
154 final SyncCommodity product7commodity = new SyncCommodity(new CommodityInfo(), product7, category3);
155 final SyncCommodity product8commodity = new SyncCommodity(new CommodityInfo(), product8, category3);
156 final SyncCommodity product9commodity = new SyncCommodity(new CommodityInfo(), product9, category3);
157 final SyncCommodity product10commodity = new SyncCommodity(new CommodityInfo(), product10, category3);
158
159
160
161 product3commodity.getInfo().setColor(0xaabbcc);
162 product4commodity.getInfo().setColor(0xff00ff);
163
164 firstClientStorage.add(product1commodity);
165 firstClientStorage.add(product2commodity);
166 firstClientStorage.add(product3commodity);
167 firstClientStorage.add(product4commodity);
168 firstClientStorage.add(product5commodity);
169 firstClientStorage.add(product6commodity);
170 firstClientStorage.add(product7commodity);
171 firstClientStorage.add(product8commodity);
172 firstClientStorage.add(product9commodity);
173 firstClientStorage.add(product10commodity);
174
175
176 SyncTreasurer treasurer1 = new SyncTreasurer(buildTreasurerInfo("Treasurer 1", "12345"));
177 SyncTreasurer treasurer2 = new SyncTreasurer(buildTreasurerInfo("Treasurer 2", "67890"));
178 SyncTreasurer treasurer3 = new SyncTreasurer(buildTreasurerInfo("Supervisor", "32456123"));
179 firstClientStorage.add(treasurer1);
180 firstClientStorage.add(treasurer2);
181 firstClientStorage.add(treasurer3);
182
183
184 SyncKeyboard keyboard1 = new SyncKeyboard(buildKeyboardInfo("Keyboard 1", 9, 4, DeviceFormFactor.PHONE));
185 SyncKeyboard keyboard2 = new SyncKeyboard(buildKeyboardInfo("Keyboard 2", 12, 6, DeviceFormFactor.TABLET_SMALL));
186 SyncKeyboard keyboard3 = new SyncKeyboard(buildKeyboardInfo("Keyboard 3", 15, 8, DeviceFormFactor.TABLET_BIG));
187 firstClientStorage.add(keyboard1);
188 firstClientStorage.add(keyboard2);
189 firstClientStorage.add(keyboard3);
190
191
192 firstClientStorage.add(new SyncKeyboardEntry(buildKeyboardEntryInfo(0, 0, 1, 1, KeyAction.InitSaleCash), keyboard1, null));
193 firstClientStorage.add(new SyncKeyboardEntry(buildKeyboardEntryInfo(1, 0, 2, 1, KeyAction.Product), keyboard1, product1));
194 firstClientStorage.add(new SyncKeyboardEntry(buildKeyboardEntryInfo(0, 0, 1, 1, KeyAction.InitSaleCash), keyboard2, null));
195 firstClientStorage.add(new SyncKeyboardEntry(buildKeyboardEntryInfo(0, 1, 2, 1, KeyAction.Product), keyboard2, product2));
196 firstClientStorage.add(new SyncKeyboardEntry(buildKeyboardEntryInfo(0, 0, 1, 1, KeyAction.InitSaleCash), keyboard3, null));
197 firstClientStorage.add(new SyncKeyboardEntry(buildKeyboardEntryInfo(0, 0, 1, 1, KeyAction.GetOrders), keyboard3, null));
198
199
200 firstClientStorage.add(new SyncSaleSlot(buildSaleSlotInfo("Sale slot 1"), false));
201 firstClientStorage.add(new SyncSaleSlot(buildSaleSlotInfo("Sale slot 1"), false));
202 firstClientStorage.add(new SyncSaleSlot(buildSaleSlotInfo("Sale slot 1"), false));
203 firstClientStorage.add(new SyncSaleSlot(buildSaleSlotInfo("Sale slot 1"), false));
204
205
206 Calendar calendar = Calendar.getInstance();
207 calendar.set(Calendar.HOUR_OF_DAY, 9);
208
209 Date open1 = calendar.getTime();
210 calendar.add(Calendar.HOUR_OF_DAY, 8);
211 Date close1 = calendar.getTime();
212 SyncDay day1 = new SyncDay(buildDayInfo(cashRegisterName, 10000, close1, 1, open1), treasurer1);
213
214 calendar.add(Calendar.HOUR_OF_DAY, 16);
215 Date open2 = calendar.getTime();
216 calendar.add(Calendar.HOUR_OF_DAY, 8);
217 Date close2 = calendar.getTime();
218 SyncDay day2 = new SyncDay(buildDayInfo(cashRegisterName, 20000, close2, 2, open2), treasurer2);
219
220 calendar.add(Calendar.HOUR_OF_DAY, 16);
221 Date open3 = calendar.getTime();
222 SyncDay day3 = new SyncDay(buildDayInfo(cashRegisterName, 30000, null, 3, open3), null);
223
224 firstClientStorage.add(day1);
225 firstClientStorage.add(day2);
226 firstClientStorage.add(day3);
227
228
229 TripInfo tripInfo1 = buildTripInfo(cashRegisterName, 1, "0001", "01");
230 SyncTrip trip1 = new SyncTrip(tripInfo1);
231 SyncTrip trip2 = new SyncTrip(buildTripInfo(cashRegisterName, 2, "0002", "02"));
232 firstClientStorage.add(trip1);
233 firstClientStorage.add(trip2);
234
235
236 List<SaleProductInfo> saleProducts = new ArrayList<SaleProductInfo>();
237 saleProducts.add(buildSaleProductInfo(0, 0, open1, 200, true,
238 2500, 2500, 0, 2375, 2000, 1250,
239 500, 2500, product7));
240 saleProducts.add(buildSaleProductInfo(0, 500, open1, 200, true,
241 7500, 7125, 375, 6769, 5700, 3750,
242 1425, 2500, product8));
243 saleProducts.add(buildSaleProductInfo(1000, 0, open1, 200, true,
244 3584, 2584, 1000, 2455, 2307, 1792,
245 277, 1200, product9));
246 List<VatRateSumInfo> vatRateSums = new ArrayList<VatRateSumInfo>();
247 vatRateSums.add(buildVatRateSum(9625, 7700, 1925,
248 9231, 7385, 1846, 2500));
249 vatRateSums.add(buildVatRateSum(2584, 2307, 277,
250 2478, 2213, 265, 1200));
251 List<PaymentInfo> payments = new ArrayList<PaymentInfo>();
252 payments.add(buildPaymentInfo(11709, PaymentType.AirPay));
253 List<PrintInfo> prints = new ArrayList<PrintInfo>();
254 prints.add(buildPrintInfo(1, PrintType.Normal, "0000001", DeliveryType.Print, open1.getTime()));
255 SyncSale sale1 = new SyncSale(buildSaleInfo(cashRegisterName, 1, saleProducts, payments, prints, 500, 0,
256 11709, sellerInfo.getIdentifier(), 12209, 500, 2111, vatRateSums, "000001", tripInfo1.getIdentifier()),
257 treasurer1, day3, trip1);
258
259 saleProducts = new ArrayList<SaleProductInfo>();
260 saleProducts.add(buildSaleProductInfo(0, 0, open2, 200, true,
261 2500, 2500, 0, 2375, 2000, 1250, 500,
262 2500, product7));
263 saleProducts.add(buildSaleProductInfo(0, 500, open2, 200, true,
264 7500, 7125, 375, 6769, 5700, 3750, 1425,
265 2500, product8));
266 saleProducts.add(buildSaleProductInfo(1000, 0, open2, 200, true,
267 3584, 2584, 1000, 2455, 2307, 1792, 277,
268 1200, product9));
269 vatRateSums = new ArrayList<VatRateSumInfo>();
270 vatRateSums.add(buildVatRateSum(9625, 7700, 1925,
271 9144, 7315, 1829, 2500));
272 vatRateSums.add(buildVatRateSum(2584, 2307, 277,
273 2455, 2192, 263, 1200));
274 payments = new ArrayList<PaymentInfo>();
275 payments.add(buildPaymentInfo(11599, PaymentType.Cash));
276 prints = new ArrayList<PrintInfo>();
277 prints.add(buildPrintInfo(2, PrintType.Normal, "00000002", DeliveryType.Print, open2.getTime()));
278 prints.add(buildPrintInfo(3, PrintType.Copy, "00000002", DeliveryType.SMS, open2.getTime()));
279 SyncSale sale2 = new SyncSale(buildSaleInfo(cashRegisterName, 2, saleProducts, payments, prints, 0, 500,
280 11599, sellerInfo.getIdentifier(), 12209, 610, 2092, vatRateSums, "000001", tripInfo1.getIdentifier()),
281 treasurer2, day3, trip1);
282
283 saleProducts = new ArrayList<SaleProductInfo>();
284 saleProducts.add(buildSaleProductInfo(0, 0, open3, 2000, false,
285 2000, 2000, 0, 1796, 1786, 1120, 214,
286 1200, product1));
287 saleProducts.add(buildSaleProductInfo(0, 500, open3, 2000, false,
288 2000, 1900, 100, 1706, 1520, 3750, 380,
289 2500, product10));
290 saleProducts.add(buildSaleProductInfo(1000, 0, open3, 2000, false,
291 2000, 1000, 1000, 898, 893, 1792, 107,
292 1200, product11));
293 vatRateSums = new ArrayList<VatRateSumInfo>();
294 vatRateSums.add(buildVatRateSum(1900, 1520, 380,
295 1706, 1365, 341, 2500));
296 vatRateSums.add(buildVatRateSum(3000, 2679, 321,
297 2694, 2405, 289, 1200));
298 payments = new ArrayList<PaymentInfo>();
299 payments.add(buildPaymentInfo(4400, PaymentType.EmvIntegrated));
300 prints.add(buildPrintInfo(4, PrintType.Normal, "00000003", DeliveryType.Print, open3.getTime()));
301 SyncSale sale3 = new SyncSale(buildSaleInfo(cashRegisterName, 3, saleProducts, payments, prints, 500, 0,
302 4400, sellerInfo.getIdentifier(), 4900, 500, 630, vatRateSums, "000001", null),
303 treasurer3, day3, null);
304
305 firstClientStorage.add(sale1);
306 firstClientStorage.add(sale2);
307 firstClientStorage.add(sale3);
308
309 trip1.setSales(Arrays.asList(sale1, sale2));
310
311 Assert.assertTrue("Syncing first client to upload added data to the server", doSync(firstClientStorage));
312
313 Assert.assertTrue("Syncing second client to get added data from server", doSync(secondClientStorage));
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330 }
331
332 private boolean doSync(MemoryLocalStorage storage) {
333 final Map<Class, EntitySyncAdapter> syncAdapters = new HashMap<Class, EntitySyncAdapter>(6);
334 final Map<Class, EntityPictureSyncAdapter> pictureSyncAdapters = new HashMap<Class, EntityPictureSyncAdapter>(2);
335
336 syncAdapters.put(SellerInfo.class, new SellerSyncAdapter(storage));
337 syncAdapters.put(TaxInfo.class, new TaxSyncAdapter(storage));
338 syncAdapters.put(CategoryInfo.class, new CategorySyncAdapter(storage));
339 syncAdapters.put(ProductInfo.class, new ProductSyncAdapter(storage));
340 syncAdapters.put(CommodityInfo.class, new CommoditySyncAdapter(storage));
341 syncAdapters.put(TreasurerInfo.class, new TreasurerSyncAdapter(storage));
342 syncAdapters.put(OrderInfo.class, new OrderSyncAdapter(storage));
343 syncAdapters.put(KeyboardInfo.class, new KeyboardSyncAdapter(storage));
344 syncAdapters.put(KeyboardEntryInfo.class, new KeyboardEntrySyncAdapter(storage));
345 syncAdapters.put(SaleSlotInfo.class, new SaleSlotSyncAdapter(storage));
346 syncAdapters.put(DayInfo.class, new DaySyncAdapter(storage));
347 syncAdapters.put(TripInfo.class, new TripSyncAdapter(storage));
348 syncAdapters.put(SaleInfo.class, new SaleSyncAdapter(storage));
349
350 pictureSyncAdapters.put(ProductInfo.class, new ProductPictureSyncAdapter(storage));
351 pictureSyncAdapters.put(CategoryInfo.class, new CategoryPictureSyncAdapter(storage));
352 pictureSyncAdapters.put(SaleSlotInfo.class, new SaleSlotPictureSyncAdapter(storage));
353
354 return Synchronization.sync(
355 storage.getSyncInfo(),
356 apiServiceFactory,
357 syncAdapters,
358 pictureSyncAdapters
359 );
360 }
361
362 private TaxInfo buildTaxInfo(String name, int vat) {
363 TaxInfo taxInfo = new TaxInfo();
364
365 taxInfo.setName(name);
366 taxInfo.setVat(vat);
367
368 return taxInfo;
369 }
370
371 private ProductInfo buildProductInfo(String identifier, String name, String barcode, long netto, SalesUnit salesUnit) {
372 final ProductInfo productInfo = new ProductInfo();
373
374 productInfo.setIdentifier(identifier);
375 productInfo.setName(name);
376 productInfo.setBarcode(barcode);
377 productInfo.setNetto(netto);
378 productInfo.setSalesUnit(salesUnit);
379
380 return productInfo;
381 }
382
383 private CategoryInfo buildCategoryInfo(String name) {
384 final CategoryInfo categoryInfo = new CategoryInfo();
385
386 categoryInfo.setName(name);
387
388 return categoryInfo;
389 }
390
391 private TreasurerInfo buildTreasurerInfo(final String name, final String ssn) {
392 final TreasurerInfo treasurerInfo = new TreasurerInfo();
393
394 treasurerInfo.setName(name);
395 treasurerInfo.setSsn(ssn);
396 treasurerInfo.setIdentifier(ssn);
397
398 return treasurerInfo;
399 }
400
401 private OrderInfo buildOrderInfo(List<OrderItemInfo> orderItemInfos) {
402 final OrderInfo orderInfo = new OrderInfo();
403
404 orderInfo.setOrderItems(orderItemInfos);
405
406 return orderInfo;
407 }
408
409 private KeyboardInfo buildKeyboardInfo(String name, int width, int height, DeviceFormFactor deviceFormFactor) {
410 final KeyboardInfo keyboardInfo = new KeyboardInfo();
411
412 keyboardInfo.setName(name);
413 keyboardInfo.setWidth(width);
414 keyboardInfo.setHeight(height);
415 keyboardInfo.setDeviceFormFactor(deviceFormFactor);
416
417 return keyboardInfo;
418 }
419
420 private KeyboardEntryInfo buildKeyboardEntryInfo(int positionX, int positionY, int width, int height, KeyAction action) {
421 final KeyboardEntryInfo keyboardEntryInfo = new KeyboardEntryInfo();
422
423 keyboardEntryInfo.setPositionX(positionX);
424 keyboardEntryInfo.setPositionY(positionY);
425 keyboardEntryInfo.setWidth(width);
426 keyboardEntryInfo.setHeight(height);
427 keyboardEntryInfo.setKeyAction(action);
428 keyboardEntryInfo.setLabel(action.name());
429
430 return keyboardEntryInfo;
431 }
432
433 private SaleSlotInfo buildSaleSlotInfo(String name) {
434 final SaleSlotInfo saleSlotInfo = new SaleSlotInfo();
435
436 saleSlotInfo.setName(name);
437
438 return saleSlotInfo;
439 }
440
441 private DayInfo buildDayInfo(String cashRegisterName, long cash, Date close, int dayNumber, Date open) {
442 final DayInfo dayInfo = new DayInfo();
443 dayInfo.setCash(cash);
444 dayInfo.setCashAtClose(cash);
445 dayInfo.setCashRegisterName(cashRegisterName);
446 dayInfo.setClose(close);
447 dayInfo.setDayNumber(dayNumber);
448 dayInfo.setOpen(open);
449 dayInfo.setOpened(close == null);
450 dayInfo.setModified(new Date());
451 return dayInfo;
452 }
453
454 private SaleProductInfo buildSaleProductInfo(long absoluteDiscount, int relativeDiscount, Date created, long delta,
455 boolean isDeltaUnit, long vanillaBrutto, long brutto, long discount,
456 long effectiveBrutto, long netto, long productBrutto, long vat,
457 long vatRate, SyncProduct original) {
458 SaleProductInfo saleProduct = new SaleProductInfo();
459 saleProduct.setAbsoluteDiscount(absoluteDiscount);
460 saleProduct.setRelativeDiscount(relativeDiscount);
461 saleProduct.setCreated(created);
462 saleProduct.setDelta(delta);
463 saleProduct.setDeltaUnit(isDeltaUnit);
464 saleProduct.setVanillaBrutto(vanillaBrutto);
465 saleProduct.setBrutto(brutto);
466 saleProduct.setDiscount(discount);
467 saleProduct.setEffectiveBrutto(effectiveBrutto);
468 saleProduct.setNetto(netto);
469 saleProduct.setProductBrutto(productBrutto);
470 saleProduct.setVat(vat);
471 saleProduct.setVatRate(vatRate);
472 saleProduct.setProductIdentifier(original.getInfo().getIdentifier());
473 return saleProduct;
474 }
475
476 private PaymentInfo buildPaymentInfo(int amount, PaymentType paymentType) {
477 PaymentInfo payment = new PaymentInfo();
478 payment.setAmount(amount);
479 payment.setPaymentState(PaymentState.APPROVED);
480 payment.setPaymentType(paymentType);
481 return payment;
482 }
483
484 private PrintInfo buildPrintInfo(int receiptNumber, PrintType printType, String controlCode, DeliveryType deliveryType, long created) {
485 PrintInfo print = new PrintInfo();
486 print.setReceiptNumber(receiptNumber);
487 print.setPrintType(printType);
488 print.setControlNumber(controlCode);
489 print.setDeliveryType(deliveryType);
490 print.setCreated(new Date(created));
491 return print;
492 }
493
494 private VatRateSumInfo buildVatRateSum(long vanillaBrutto, long vanillaNetto, long vanillaVat,
495 long brutto, long netto, long vat, Integer vatRate) {
496 VatRateSumInfo vateRateSum = new VatRateSumInfo();
497 vateRateSum.setVanillaBrutto(vanillaBrutto);
498 vateRateSum.setVanillaNetto(vanillaNetto);
499 vateRateSum.setVanillaVat(vanillaVat);
500 vateRateSum.setBrutto(brutto);
501 vateRateSum.setNetto(netto);
502 vateRateSum.setVat(vat);
503 vateRateSum.setVatRate(vatRate);
504 return vateRateSum;
505 }
506
507 private SaleInfo buildSaleInfo(String cashRegisterName, int receiptNumber, List<SaleProductInfo> saleProducts, List<PaymentInfo> payments, List<PrintInfo> prints,
508 long absoluteDiscount, int relativeDiscount, long brutto, String sellerIdentifier,
509 long vanillaBrutto, long discount, long vat, List<VatRateSumInfo> vatRateSums,
510 String controlUnitId, String tripIdentifier) {
511 final SaleInfo saleInfo = new SaleInfo();
512 saleInfo.setIdentifier(String.format("%1$s-%2$d", cashRegisterName, receiptNumber));
513 saleInfo.setSaleProducts(saleProducts);
514 saleInfo.setPayments(payments);
515 saleInfo.setPrints(prints);
516 saleInfo.setAbsoluteDiscount(absoluteDiscount);
517 saleInfo.setRelativeDiscount(relativeDiscount);
518 saleInfo.setBrutto(brutto);
519 saleInfo.setSaleState(SaleState.Paid);
520 saleInfo.setSellerIdentifier(sellerIdentifier);
521 saleInfo.setVanillaBrutto(vanillaBrutto);
522 saleInfo.setDiscount(discount);
523 saleInfo.setVat(vat);
524 saleInfo.setVatRateSums(vatRateSums);
525 saleInfo.setControlUnitId(controlUnitId);
526 saleInfo.setTripIdentifier(tripIdentifier);
527 return saleInfo;
528 }
529
530 private TripInfo buildTripInfo(String cashRegisterName, int index, String routeCode, String tripCode) {
531 TripInfo tripInfo = new TripInfo();
532 tripInfo.setIdentifier(String.format("%1$s-%2$d", cashRegisterName, index));
533 tripInfo.setRouteCode(routeCode);
534 tripInfo.setTripCode(tripCode);
535 return tripInfo;
536 }
537 }
538