Skip to content

Commit

Permalink
Add C_Order interceptor on before_complete for linking a Sales Order …
Browse files Browse the repository at this point in the history
…with a Payment

#5856
  • Loading branch information
TheBestPessimist committed Dec 4, 2019
1 parent 547c627 commit ddd14b3
Showing 1 changed file with 39 additions and 0 deletions.
Expand Up @@ -200,6 +200,45 @@ public void checkPricingConditionsInOrderLines(final I_C_Order order)
Services.get(IOrderLinePricingConditions.class).failForMissingPricingConditions(order);
}

@DocValidate(timings = ModelValidator.TIMING_BEFORE_COMPLETE)
public void linkWithPaymentByExternalOrderId(@NonNull final I_C_Order order)
{
if (!order.isSOTrx())
{
return;
}

if (Check.isBlank(order.getExternalId()))
{
return;
}

final String autoAssignToSalesOrderByExternalOrderId_Sysconfig = "de.metas.payment.autoAssignToSalesOrderByExternalOrderId.enabled";

final ISysConfigBL sysConfigBL = Services.get(ISysConfigBL.class);
final boolean autoAssignEnabled = sysConfigBL.getBooleanValue(autoAssignToSalesOrderByExternalOrderId_Sysconfig, false);

if (!autoAssignEnabled)
{
return;
}

final IPaymentDAO paymentDAO = Services.get(IPaymentDAO.class);
final Optional<I_C_Payment> paymentOptional = paymentDAO.getByExternalOrderId(ExternalId.of(order.getExternalId()));

if (!paymentOptional.isPresent())
{
return;
}

final I_C_Payment payment = paymentOptional.get();
payment.setC_Order_ID(order.getC_Order_ID());
order.setC_Payment_ID(payment.getC_Payment_ID());

// todo is this needed, or is the save done automatically?
// InterfaceWrapperHelper.save(payment);
}

@ModelChange(timings = {
ModelValidator.TYPE_BEFORE_NEW,
ModelValidator.TYPE_BEFORE_CHANGE
Expand Down

0 comments on commit ddd14b3

Please sign in to comment.