on 11-06-2023 6:39 PM
Hi,
I have a scenario to implement: The Cashier will buy an article.
For that a SalesItem with a négative quantity should be added to the Receipt.
I was able to add a SalesItem with positive quantity but not with a negative one: The Item was added with an error message "Quantity must be positive".
While if I do it manually the négative quantity is accepted.
I think it is considered as a Customer Return:
How can I achieve this programmatically?
Here is my Java Code:
CDBSession session = CDBSessionFactory.instance.createSession();
ReceiptManager receiptManager = new ReceiptManager(session);
MaterialManager materialManager = new MaterialManager(session);
ReceiptEntity receipt = receiptManager.findOrCreate(UserRegistry.INSTANCE.getCurrentUser(), null, false);
MaterialEntity material = materialManager.readMaterialByExternalID(ExternalId);
SalesItemEntity sie = EntityFactory.INSTANCE.createSalesItemEntity( material, material.getDescription(),new BigDecimal(price), new BigDecimal(-1), "Manual");
receiptManager.addSalesItems(receipt, sie, true);
receiptManager.calculate(receipt, BaseEntity.EntityActions.UPDATE);
receiptManager.update(receipt);
BroadcasterHolder.INSTANCE.getBroadcaster().broadcastPluginEventForPath("RECEIPT_REFRESH", null);
Best Regards
Hi,
I was able to add a return SalesItem but I think I am not using right way since I have 2 items added using the below code:
CDBSession session = CDBSessionFactory.instance.createSession();
ReceiptManager receiptManager = new ReceiptManager(session);
MaterialManager materialManager = new MaterialManager(session);
ReceiptEntity receipt = receiptManager.findOrCreate(UserRegistry.INSTANCE.getCurrentUser(), null, false);
MaterialEntity material = materialManager.readMaterialByExternalID(ExternalId);//"I00002098");
SalesItemEntity sie = EntityFactory.INSTANCE.createSalesItemEntity( material, material.getDescription(),new BigDecimal(price), new BigDecimal(1), "Manual");
ReturnSalesItemPosService returnSalesItemPosService = ServiceFactory.INSTANCE.getOrCreateServiceInstance(ReturnSalesItemPosService.class, session);
receiptManager.addSalesItems(receipt, sie);
try {
returnSalesItemPosService.returnSalesItemInSameReceipt(receipt, sie, new BigDecimal(-1), "1", "01", true);
} catch (ValidationException e) {
throw new RuntimeException(e);
}
receiptManager.calculate(receipt, BaseEntity.EntityActions.UPDATE);
receiptManager.update(receipt);
BroadcasterHolder.INSTANCE.getBroadcaster().broadcastPluginEventForPath("RECEIPT_REFRESH", null);<br>
I added this code to be precise:
ReturnSalesItemPosService returnSalesItemPosService = ServiceFactory.INSTANCE.getOrCreateServiceInstance(ReturnSalesItemPosService.class, session);
receiptManager.addSalesItems(receipt, sie);
try {
returnSalesItemPosService.returnSalesItemInSameReceipt(receipt, sie, new BigDecimal(-1), "1", "01", true);
} catch (ValidationException e) {
throw new RuntimeException(e);
}<br>
I am not getting the right behavior since I have 2 items added to the receipt as below:
When I remove the addSalesItems instruction below an exception is raised:
receiptManager.addSalesItems(receipt, sie);<br>
Here is the exception:
2023-11-08 14:41:12,609 [Atmosphere-Shared-57] ERROR com.sap.scco.ap.pos.service.impl.ReturnSalesItemPosServiceImpl - Unexpected exception in receipt calculation
java.lang.NullPointerException: Cannot invoke "com.sap.scco.ap.pos.entity.ReceiptEntity.getLastExternalId()" because "receipt" is null
at com.sap.scco.ap.pos.service.util.ReceiptPosServiceUtil.generateExternalId(ReceiptPosServiceUtil.java:108)
at com.sap.scco.ap.pos.service.impl.SalesItemPosServiceImpl.createCancellationSalesItemForInternalReceipt_aroundBody40(SalesItemPosServiceImpl.java:351)
at com.sap.scco.ap.pos.service.impl.SalesItemPosServiceImpl.createCancellationSalesItemForInternalReceipt_aroundBody41$advice(SalesItemPosServiceImpl.java:31)
at com.sap.scco.ap.pos.service.impl.SalesItemPosServiceImpl.createCancellationSalesItemForInternalReceipt(SalesItemPosServiceImpl.java:1)
at com.sap.scco.ap.pos.service.impl.SalesItemPosServiceImpl.createCancellationSalesItem_aroundBody38(SalesItemPosServiceImpl.java:331)
at com.sap.scco.ap.pos.service.impl.SalesItemPosServiceImpl.createCancellationSalesItem_aroundBody39$advice(SalesItemPosServiceImpl.java:31)
at com.sap.scco.ap.pos.service.impl.SalesItemPosServiceImpl.createCancellationSalesItem(SalesItemPosServiceImpl.java:1)
at com.sap.scco.ap.pos.service.impl.ReturnSalesItemPosServiceImpl.handleCreateNewCancellationSalesItem_aroundBody36(ReturnSalesItemPosServiceImpl.java:358)
at com.sap.scco.ap.pos.service.impl.ReturnSalesItemPosServiceImpl.handleCreateNewCancellationSalesItem_aroundBody37$advice(ReturnSalesItemPosServiceImpl.java:31)
at com.sap.scco.ap.pos.service.impl.ReturnSalesItemPosServiceImpl.handleCreateNewCancellationSalesItem(ReturnSalesItemPosServiceImpl.java:1)
at com.sap.scco.ap.pos.service.impl.ReturnSalesItemPosServiceImpl.returnSalesItemInSameReceipt_aroundBody2(ReturnSalesItemPosServiceImpl.java:156)
at com.sap.scco.ap.pos.service.impl.ReturnSalesItemPosServiceImpl.returnSalesItemInSameReceipt_aroundBody3$advice(ReturnSalesItemPosServiceImpl.java:69)
at com.sap.scco.ap.pos.service.impl.ReturnSalesItemPosServiceImpl.returnSalesItemInSameReceipt_aroundBody4(ReturnSalesItemPosServiceImpl.java:1)
at com.sap.scco.ap.pos.service.impl.ReturnSalesItemPosServiceImpl.returnSalesItemInSameReceipt_aroundBody5$advice(ReturnSalesItemPosServiceImpl.java:31)
at com.sap.scco.ap.pos.service.impl.ReturnSalesItemPosServiceImpl.returnSalesItemInSameReceipt(ReturnSalesItemPosServiceImpl.java:1)<br>
Thx
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
4 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.