Skip to content

Commit fef5cbb

Browse files
committed
fix vPOS updates resulting in incorrect quantities
1 parent ac08d81 commit fef5cbb

File tree

4 files changed

+88
-13
lines changed

4 files changed

+88
-13
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ All notable changes to this project will be documented in this file.
66
### Added
77
- Add support for JPG and WEBP assets
88

9+
### Fixed
10+
- Fix vPOS updates with weight information resulting in incorrect quantities
11+
912
## [0.33.11]
1013

1114
### Fixed

core/src/androidTest/java/io/snabble/sdk/ShoppingCartTest.java

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,65 @@ public void testBackendCart() {
306306
Assert.assertEquals(backendCart.items[cart.size() - 6].weightUnit, Unit.PIECE.getId());
307307
}
308308

309+
@Test
310+
public void testBackendCartAfterLineItemIsSet() {
311+
ShoppingCart.Item item = simpleProduct1.cartItem();
312+
item.setQuantity(2);
313+
cart.add(item);
314+
315+
item = preWeighedProduct.cartItem();
316+
item.setLineItem(new CheckoutApi.LineItem());
317+
cart.add(item);
318+
319+
item = userWeighedProduct.cartItem();
320+
item.setQuantity(500);
321+
item.setLineItem(new CheckoutApi.LineItem());
322+
cart.add(item);
323+
324+
item = pieceProduct.cartItem();
325+
item.setLineItem(new CheckoutApi.LineItem());
326+
cart.add(item);
327+
328+
item = priceProduct.cartItem();
329+
item.setLineItem(new CheckoutApi.LineItem());
330+
cart.add(item);
331+
332+
item = zeroAmountProduct.cartItem();
333+
item.setLineItem(new CheckoutApi.LineItem());
334+
item.setQuantity(4);
335+
cart.add(item);
336+
337+
item = zeroAmountProduct.cartItem();
338+
item.setLineItem(new CheckoutApi.LineItem());
339+
item.setQuantity(4);
340+
cart.add(item);
341+
342+
ShoppingCart.BackendCart backendCart = cart.toBackendCart();
343+
Assert.assertEquals(backendCart.items.length, cart.size());
344+
Assert.assertEquals(backendCart.items[cart.size() - 1].amount, 2);
345+
346+
Assert.assertEquals(backendCart.items[cart.size() - 2].amount, 1);
347+
Assert.assertEquals(backendCart.items[cart.size() - 2].weight.intValue(), 154);
348+
Assert.assertEquals(backendCart.items[cart.size() - 2].weightUnit, Unit.GRAM.getId());
349+
350+
Assert.assertEquals(backendCart.items[cart.size() - 3].amount, 1);
351+
Assert.assertEquals(backendCart.items[cart.size() - 3].weight.intValue(), 500);
352+
Assert.assertEquals(backendCart.items[cart.size() - 3].weightUnit, Unit.GRAM.getId());
353+
354+
Assert.assertEquals(backendCart.items[cart.size() - 4].amount, 1);
355+
Assert.assertEquals(backendCart.items[cart.size() - 4].units.intValue(), 6);
356+
Assert.assertEquals(backendCart.items[cart.size() - 4].weightUnit, Unit.PIECE.getId());
357+
358+
Assert.assertEquals(backendCart.items[cart.size() - 5].amount, 1);
359+
Assert.assertEquals(backendCart.items[cart.size() - 5].price.intValue(), 249);
360+
Assert.assertEquals(backendCart.items[cart.size() - 5].weightUnit, Unit.PRICE.getId());
361+
362+
Assert.assertEquals(backendCart.items[cart.size() - 6].amount, 1);
363+
Assert.assertEquals(backendCart.items[cart.size() - 6].units.intValue(), 4);
364+
Assert.assertEquals(backendCart.items[cart.size() - 6].scannedCode, "2523237000040");
365+
Assert.assertEquals(backendCart.items[cart.size() - 6].weightUnit, Unit.PIECE.getId());
366+
}
367+
309368
public void assertStrEquals(String a, String b) {
310369
Assert.assertEquals(replaceNoBreakSpace(a), replaceNoBreakSpace(b));
311370
}

core/src/main/java/io/snabble/sdk/CheckoutApi.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ public static class LineItem {
100100
int amount;
101101
int price;
102102
Integer units;
103+
Integer weight;
104+
String weightUnit;
103105
int totalPrice;
104106
LineItemType type;
105107
}

core/src/main/java/io/snabble/sdk/ShoppingCart.java

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -530,14 +530,28 @@ public ScannedCode getScannedCode() {
530530
}
531531

532532
public int getEffectiveQuantity() {
533+
return getEffectiveQuantity(false);
534+
}
535+
536+
private int getEffectiveQuantity(boolean ignoreLineItem) {
533537
return scannedCode != null
534538
&& scannedCode.hasEmbeddedData()
535-
&& scannedCode.getEmbeddedData() != 0 ? scannedCode.getEmbeddedData() : getQuantity();
539+
&& scannedCode.getEmbeddedData() != 0 ? scannedCode.getEmbeddedData() : getQuantity(ignoreLineItem);
536540
}
537541

538542
public int getQuantity() {
539-
if (lineItem != null) {
540-
return lineItem.amount;
543+
return getQuantity(false);
544+
}
545+
546+
public int getQuantity(boolean ignoreLineItem) {
547+
if (lineItem != null && !ignoreLineItem) {
548+
if (lineItem.weight != null) {
549+
return lineItem.weight;
550+
} else if (lineItem.units != null){
551+
return lineItem.units;
552+
} else {
553+
return lineItem.amount;
554+
}
541555
}
542556

543557
return quantity;
@@ -591,6 +605,10 @@ && getUnit() != PIECE
591605
public Unit getUnit() {
592606
if (product == null && lineItem != null) return null;
593607

608+
if (lineItem != null && lineItem.weightUnit != null) {
609+
return Unit.fromString(lineItem.weightUnit);
610+
}
611+
594612
return scannedCode.getEmbeddedUnit() != null ? scannedCode.getEmbeddedUnit()
595613
: product.getEncodingUnit(scannedCode.getTemplateName(), scannedCode.getLookupCode());
596614
}
@@ -683,15 +701,8 @@ public String getPriceText() {
683701
&& (getUnit() != PIECE || scannedCode.getEmbeddedData() == 0)
684702
&& getEffectiveQuantity() > 1)) {
685703

686-
int price;
687-
if (lineItem.units != null) {
688-
price = lineItem.units * lineItem.price;
689-
} else {
690-
price = lineItem.price;
691-
}
692-
693704
return String.format("\u00D7 %s = %s",
694-
cart.priceFormatter.format(product, price),
705+
cart.priceFormatter.format(product, lineItem.price),
695706
cart.priceFormatter.format(getTotalPrice()));
696707
} else {
697708
if (lineItem.units != null) {
@@ -848,11 +859,11 @@ BackendCart toBackendCart() {
848859
item.amount = 1;
849860

850861
if (cartItem.getUnit() == Unit.PIECE) {
851-
item.units = cartItem.getEffectiveQuantity();
862+
item.units = cartItem.getEffectiveQuantity(true);
852863
} else if (cartItem.getUnit() == Unit.PRICE) {
853864
item.price = cartItem.getLocalTotalPrice();
854865
} else if (cartItem.getUnit() != null) {
855-
item.weight = cartItem.getEffectiveQuantity();
866+
item.weight = cartItem.getEffectiveQuantity(true);
856867
} else if (product.getType() == Product.Type.UserWeighed) {
857868
item.weight = quantity;
858869
} else {

0 commit comments

Comments
 (0)