Skip to content

Commit

Permalink
Validate order released
Browse files Browse the repository at this point in the history
  • Loading branch information
yamelsenih committed Nov 23, 2021
1 parent 69f5fc4 commit f65cf21
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 21 deletions.
11 changes: 3 additions & 8 deletions src/main/java/org/spin/base/util/ContextManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@
package org.spin.base.util;

import java.sql.Timestamp;
import java.util.Arrays;
import java.util.Optional;
import java.util.Properties;

import org.adempiere.exceptions.AdempiereException;
Expand Down Expand Up @@ -146,13 +144,10 @@ private static void setDefault(Properties context, int defaultOrganizationId, St
public static MCountry getDefaultCountry() {
MClient client = MClient.get (Env.getCtx());
MLanguage language = MLanguage.get(Env.getCtx(), client.getAD_Language());
Optional<MCountry> maybeCountry = Arrays.asList(MCountry.getCountries(Env.getCtx()))
.stream()
.filter(country -> language.getCountryCode().equals(country.getCountryCode()))
.findFirst();
MCountry country = MCountry.get(Env.getCtx(), language.getCountryCode());
// Verify
if(maybeCountry.isPresent()) {
return maybeCountry.get();
if(country != null) {
return country;
}
// Default
return MCountry.getDefault(Env.getCtx());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2989,6 +2989,8 @@ private MOrder processOrder(ProcessOrderRequest request) {
log.warning("@ProcessFailed@ :" + salesOrder.getProcessMsg());
throw new AdempiereException("@ProcessFailed@ :" + salesOrder.getProcessMsg());
}
// Release Order
salesOrder.set_ValueOfColumn("AssignedSalesRep_ID", -1);
salesOrder.saveEx();
// Create or process payments
if(request.getCreatePayments()) {
Expand Down Expand Up @@ -3023,7 +3025,8 @@ private void processPayments(MOrder salesOrder, MPOS pos, boolean isOpenRefund,
AtomicReference<BigDecimal> openAmount = new AtomicReference<BigDecimal>(salesOrder.getGrandTotal());
List<Integer> paymentsIds = new ArrayList<Integer>();
// Complete Payments
MPayment.getOfOrder(salesOrder).stream().sorted(Comparator.comparing(MPayment::getCreated)).forEach(payment -> {
List<MPayment> payments = MPayment.getOfOrder(salesOrder);
payments.stream().sorted(Comparator.comparing(MPayment::getCreated)).forEach(payment -> {
if(DocumentUtil.isDrafted(payment)) {
payment.setIsPrepayment(true);
BigDecimal convertedAmount = getConvetedAmount(salesOrder, payment, payment.getPayAmt());
Expand All @@ -3047,6 +3050,11 @@ private void processPayments(MOrder salesOrder, MPOS pos, boolean isOpenRefund,
}
MBankStatement.addPayment(payment);
});
// Validate Write Off Amount
BigDecimal writeOffAmtTolerance = Optional.ofNullable((BigDecimal) pos.get_Value("WriteOffAmtTolerance")).orElse(Env.ZERO);
if(writeOffAmtTolerance.compareTo(Env.ZERO) > 0 && openAmount.get().abs().compareTo(writeOffAmtTolerance) >= 0) {
throw new AdempiereException("@POS.WriteOffAmtToleranceExceeded@");
}
// Allocate all payments
if(paymentsIds.size() > 0) {
String description = Msg.parseTranslation(Env.getCtx(), "@C_POS_ID@: " + pos.getName() + " - " + salesOrder.getDocumentNo());
Expand Down Expand Up @@ -3384,22 +3392,14 @@ private ListPaymentsResponse.Builder listPayments(ListPaymentsRequest request) {
// Aisle Seller
int posId = RecordUtil.getIdFromUuid(I_C_POS.Table_Name, request.getPosUuid(), null);
int orderId = RecordUtil.getIdFromUuid(I_C_Order.Table_Name, request.getOrderUuid(), null);
if(posId > 0) {
whereClause.append("C_Payment.C_POS_ID = ?");
parameters.add(posId);
}
// For order
if(orderId > 0) {
if(whereClause.length() > 0) {
whereClause.append(" AND ");
}
whereClause.append("C_Payment.C_Order_ID = ?");
parameters.add(orderId);
} else {
if(whereClause.length() > 0) {
whereClause.append(" AND ");
}
whereClause.append("C_Payment.C_Charge_ID IS NOT NULL AND C_Payment.Processed = 'N'");
whereClause.append("C_Payment.C_POS_ID = ?");
parameters.add(posId);
whereClause.append(" AND C_Payment.C_Charge_ID IS NOT NULL AND C_Payment.Processed = 'N'");
}
if(request.getIsOnlyRefund()) {
if(whereClause.length() > 0) {
Expand Down Expand Up @@ -3531,6 +3531,7 @@ private MOrder updateOrder(UpdateOrderRequest request) {
if(!DocumentUtil.isDrafted(salesOrder)) {
throw new AdempiereException("@C_Order_ID@ @Processed@");
}
validateOrderReleased(salesOrder);
// Update Date Ordered
Timestamp now = TimeUtil.getDay(System.currentTimeMillis());
salesOrder.setDateOrdered(now);
Expand Down Expand Up @@ -3793,6 +3794,7 @@ private Empty.Builder deleteOrderLine(DeleteOrderLineRequest request) {
}
if(orderLine != null
&& orderLine.getC_Order_ID() >= 0) {
validateOrderReleased(orderLine.getParent());
orderLine.deleteEx(true);
}
}
Expand Down Expand Up @@ -3845,7 +3847,7 @@ private Empty.Builder deleteOrder(DeleteOrderRequest request) {
.first();
if(order == null
|| order.getC_Order_ID() == 0) {
return Empty.newBuilder();
throw new AdempiereException("@C_Order_ID@ @NotFound@");
}
// Validate drafted
if(!DocumentUtil.isDrafted(order)) {
Expand All @@ -3858,6 +3860,7 @@ private Empty.Builder deleteOrder(DeleteOrderRequest request) {
//
if(order != null
&& order.getC_Order_ID() >= 0) {
validateOrderReleased(order);
order.deleteEx(true);
}
// Return
Expand Down Expand Up @@ -3893,6 +3896,10 @@ private Empty.Builder deletePayment(DeletePaymentRequest request) {
//
if(payment != null
&& payment.getC_Payment_ID() >= 0) {
if(payment.getC_Order_ID() > 0) {
MOrder salesOrder = new MOrder(Env.getCtx(), payment.getC_Order_ID(), null);
validateOrderReleased(salesOrder);
}
payment.deleteEx(true);
}
// Return
Expand Down Expand Up @@ -4016,6 +4023,18 @@ private MOrderLine addOrderLine(int orderId, int productId, int chargeId, int wa

} // addOrUpdateLine

/**
* Validate if a order is released
* @param salesOrder
* @return void
*/
private void validateOrderReleased(MOrder salesOrder) {
if(salesOrder.get_ValueAsInt("AssignedSalesRep_ID") > 0
&& salesOrder.get_ValueAsInt("AssignedSalesRep_ID") != Env.getAD_User_ID(Env.getCtx())) {
throw new AdempiereException("@POS.SalesRepAssigned@");
}
}

/***
* Update order line
* @param orderLineId
Expand All @@ -4034,6 +4053,7 @@ private MOrderLine updateOrderLine(int orderLineId, BigDecimal quantity, BigDeci
Trx.run(transactionName -> {
MOrderLine orderLine = new MOrderLine(Env.getCtx(), orderLineId, transactionName);
MOrder order = orderLine.getParent();
validateOrderReleased(order);
setCurrentDate(order);
orderLine.setHeaderInfo(order);
// Valid Complete
Expand Down Expand Up @@ -4529,6 +4549,10 @@ private MPayment updatePayment(UpdatePaymentRequest request) {
throw new AdempiereException("@C_Payment_ID@ @NotFound@");
}
MPayment payment = new MPayment(Env.getCtx(), paymentId, transactionName);
if(payment.getC_Order_ID() > 0) {
MOrder salesOrder = new MOrder(Env.getCtx(), payment.getC_Order_ID(), transactionName);
validateOrderReleased(salesOrder);
}
if(!Util.isEmpty(tenderType)) {
payment.setTenderType(tenderType);
}
Expand Down Expand Up @@ -4577,6 +4601,7 @@ private MPayment updatePayment(UpdatePaymentRequest request) {
* @return
*/
private MPayment createPaymentFromOrder(MOrder salesOrder, CreatePaymentRequest request, MPOS pointOfSalesDefinition, String transactionName) {
validateOrderReleased(salesOrder);
setCurrentDate(salesOrder);
String tenderType = request.getTenderTypeCode();
if(Util.isEmpty(tenderType)) {
Expand Down

0 comments on commit f65cf21

Please sign in to comment.