I'd like to be able to send a list of line items to the SDK when starting a checkout, rather than just a single total, so the resulting transaction is itemised.
Right now SumUpPayment.builder() only takes a single total and a free-text title, so a sale (e.g. a round at a bar) lands in SumUp as a lump sum with no breakdown. The item-level detail is effectively lost and can't be used for reporting, receipts etc. within SumUp as products[] doesn't get populated.
The fields currently available don't get there:
title is a single string, no structure.
addAdditionalInfo(key, value) isn't shown to the buyer or on the receipt, and doesn't populate products[].
I suspect this is also a prerequisite for #275 (printing itemised receipts to the Solo printer) - you can't print line items that were never attached to the sale. This issue is about getting the items onto the transaction; #275 is about printing them.
Suggested SDK API:
Add a cart(...) to the builder. total becomes optional when a cart is supplied.
(Based off the Android SDK docs)
SumUpPayment payment = SumUpPayment.builder()
// total optional when a cart is supplied:
// omitted -> SDK computes it from the cart
// supplied -> SDK checks it matches the cart sum
.currency(SumUpPayment.Currency.EUR)
.cart(SumUpCart.builder()
.addItem(SumUpCartItem.builder()
.name("BigItem")
.unitPrice(new BigDecimal("5.00"))
.vatRate(new BigDecimal("0.20"))
.quantity(2)
.build())
.addItem(SumUpCartItem.builder()
.name("SmallItem")
.unitPrice(new BigDecimal("2.50"))
.vatRate(new BigDecimal("0.20"))
.quantity(1)
.build())
.build())
[...]
.build();
SumUpAPI.checkout(MainActivity.this, payment, 2);
Each line carries at minimum its own name, price, VAT, quantity - the rest of products[] can be calculated from there.
Cloud / REST equivalent
{
"currency": "EUR",
"cart": {
"line_items": [
{ "name": "BigItem", "unit_price": 5.00, "vat_rate": 0.20, "quantity": 2 },
{ "name": "SmallItem", "unit_price": 2.50, "vat_rate": 0.20, "quantity": 1 }
]
}
}
So in theory:
- If a cart is supplied,
total is worked out from it; if I also pass total, the SDK checks the two match and errors if not.
- VAT comes from the rate supplied on each line.
- The line items show on the reader and on SumUp's own receipt - not just in some hidden field.
- The same line items come back in the
products[] array from the transactions API
(In an ideal world, it'd be possible to build a cart using existing catalogue items configured within SumUp, but as there's no SDK/API support for getting this info that I'm awre of I suspect this is well out of scope here.)
I'd like to be able to send a list of line items to the SDK when starting a checkout, rather than just a single total, so the resulting transaction is itemised.
Right now
SumUpPayment.builder()only takes a singletotaland a free-texttitle, so a sale (e.g. a round at a bar) lands in SumUp as a lump sum with no breakdown. The item-level detail is effectively lost and can't be used for reporting, receipts etc. within SumUp asproducts[]doesn't get populated.The fields currently available don't get there:
titleis a single string, no structure.addAdditionalInfo(key, value)isn't shown to the buyer or on the receipt, and doesn't populateproducts[].I suspect this is also a prerequisite for #275 (printing itemised receipts to the Solo printer) - you can't print line items that were never attached to the sale. This issue is about getting the items onto the transaction; #275 is about printing them.
Suggested SDK API:
Add a
cart(...)to the builder.totalbecomes optional when a cart is supplied.(Based off the Android SDK docs)
Each line carries at minimum its own name, price, VAT, quantity - the rest of
products[]can be calculated from there.Cloud / REST equivalent
{ "currency": "EUR", "cart": { "line_items": [ { "name": "BigItem", "unit_price": 5.00, "vat_rate": 0.20, "quantity": 2 }, { "name": "SmallItem", "unit_price": 2.50, "vat_rate": 0.20, "quantity": 1 } ] } }So in theory:
totalis worked out from it; if I also passtotal, the SDK checks the two match and errors if not.products[]array from the transactions API(In an ideal world, it'd be possible to build a cart using existing catalogue items configured within SumUp, but as there's no SDK/API support for getting this info that I'm awre of I suspect this is well out of scope here.)