Skip to content

Commit

Permalink
Merge pull request #13 from KommunikativCh/7080-kommch-qr-payment-str…
Browse files Browse the repository at this point in the history
…ing-parser

metasfresh#7080 SEPA CreditTransfer with QR
  • Loading branch information
KommunikativCh committed Sep 22, 2020
2 parents f617c8f + c6bf721 commit 910ed39
Show file tree
Hide file tree
Showing 10 changed files with 411 additions and 48 deletions.
Expand Up @@ -48,8 +48,9 @@ public interface IPaymentRequestBL extends ISingletonService
*
* @param invoice
* @param paymentRequestTemplate payment request template (optional)
* @param paymentString (optional)
* @return newly created payment request (saved); never returns <code>null</code>
*/
I_C_Payment_Request createPaymentRequest(I_C_Invoice invoice, I_C_Payment_Request paymentRequestTemplate);
I_C_Payment_Request createPaymentRequest(I_C_Invoice invoice, I_C_Payment_Request paymentRequestTemplate, IPaymentString paymentString);

}
Expand Up @@ -59,6 +59,8 @@ public interface IPaymentString

String getReferenceNoComplete();

String getUnstructuredMessage();

Timestamp getPaymentDate();

Timestamp getAccountDate();
Expand Down
Expand Up @@ -36,8 +36,10 @@
import de.metas.banking.model.I_C_Payment_Request;
import de.metas.banking.payment.IPaymentRequestBL;
import de.metas.banking.payment.IPaymentRequestDAO;
import de.metas.banking.payment.IPaymentString;
import de.metas.bpartner.BPartnerId;
import de.metas.bpartner.service.IBPartnerDAO;
import de.metas.invoice.service.IInvoiceDAO;
import de.metas.util.Check;
import de.metas.util.Services;

Expand All @@ -48,6 +50,7 @@ public class PaymentRequestBL implements IPaymentRequestBL
{
private static final String DYNATTR_UpdatedFromPaymentRequest = PaymentRequestBL.class.getName() + "#UpdatedFromPaymentRequest";


@Override
public I_C_Payment_Request createNewFromTemplate(final I_C_Payment_Request request)
{
Expand Down Expand Up @@ -127,9 +130,10 @@ public boolean updatePaySelectionLineFromPaymentRequestIfExists(final I_C_PaySel
}

@Override
public I_C_Payment_Request createPaymentRequest(final I_C_Invoice invoice, final I_C_Payment_Request paymentRequestTemplate)
public I_C_Payment_Request createPaymentRequest(final I_C_Invoice invoice, final I_C_Payment_Request paymentRequestTemplate, final IPaymentString paymentString)
{
final I_C_Payment_Request requestForInvoice;

if (paymentRequestTemplate != null)
{
requestForInvoice = createNewFromTemplate(paymentRequestTemplate);
Expand All @@ -156,7 +160,27 @@ public I_C_Payment_Request createPaymentRequest(final I_C_Invoice invoice, final

requestForInvoice.setC_Invoice(invoice);
InterfaceWrapperHelper.save(requestForInvoice);

updateInvoiceForPaymentRequest(invoice, requestForInvoice, paymentString);

return requestForInvoice;
}

public void updateInvoiceForPaymentRequest(final I_C_Invoice invoice, final I_C_Payment_Request paymentRequest, final IPaymentString paymentString)
{
if (paymentString == null) {
return;
}

final IInvoiceDAO invoiceDAO = Services.get(IInvoiceDAO.class);

// UnstructuredMessage from PayementString -> invoice description
if (paymentString.getUnstructuredMessage() != null && paymentString.getUnstructuredMessage() != "")
{
invoice.setDescription(paymentString.getUnstructuredMessage());
}

invoiceDAO.save(invoice);
}

}
Expand Up @@ -47,7 +47,8 @@ public class PaymentString implements IPaymentString
private final String ibanAccountNo;
private final String currency;
private final Boolean qrPaymentString;
private final Boolean qrIBAN;
private final Boolean qrIBAN;
private final String unstructuredMessage;

private IPaymentStringDataProvider dataProvider = null;

Expand Down Expand Up @@ -77,6 +78,7 @@ public PaymentString(
this.qrIBAN = false;
this.currency = null;
this.qrPaymentString = false;
this.unstructuredMessage = null;
}

public PaymentString(
Expand All @@ -87,6 +89,7 @@ public PaymentString(
final String ibanAccountNo,
final Boolean qrIBAN,
final String referenceNoComplete,
final String unstructuredMessage,
final String currency)
{
this.collectedErrors = collectedErrors;
Expand All @@ -98,6 +101,7 @@ public PaymentString(
this.ibanAccountNo = ibanAccountNo;
this.qrIBAN = qrIBAN;
this.referenceNoComplete = referenceNoComplete;
this.unstructuredMessage = unstructuredMessage;
this.currency = currency;

this.postAccountNo = null;
Expand Down Expand Up @@ -149,6 +153,12 @@ public String getReferenceNoComplete()
return referenceNoComplete;
}

@Override
public String getUnstructuredMessage()
{
return unstructuredMessage;
}

@Override
public Timestamp getPaymentDate()
{
Expand Down
Expand Up @@ -53,6 +53,7 @@
import de.metas.i18n.ITranslatableString;
import de.metas.interfaces.I_C_BP_Relation;
import de.metas.invoice.service.IInvoiceBL;
import de.metas.invoice.service.IInvoiceDAO;
import de.metas.logging.LogManager;
import de.metas.process.IProcessPreconditionsContext;
import de.metas.process.ProcessPreconditionsResolution;
Expand All @@ -70,6 +71,7 @@ public class PaymentStringProcessService

private final IPaymentStringBL paymentStringBL = Services.get(IPaymentStringBL.class);
private final IInvoiceBL invoiceBL = Services.get(IInvoiceBL.class);

private final IPaymentRequestDAO paymentRequestDAO = Services.get(IPaymentRequestDAO.class);
private final IPaymentRequestBL paymentRequestBL = Services.get(IPaymentRequestBL.class);

Expand Down Expand Up @@ -153,7 +155,7 @@ public ProcessPreconditionsResolution checkPreconditionsApplicable(@NonNull fina
return ProcessPreconditionsResolution.acceptIf(!invoice.isSOTrx());
}

public void createPaymentRequestFromTemplate(@NonNull final org.compiere.model.I_C_Invoice invoice, @Nullable final I_C_Payment_Request template)
public void createPaymentRequestFromTemplate(@NonNull final org.compiere.model.I_C_Invoice invoice, @Nullable final I_C_Payment_Request template, @Nullable final IPaymentString paymentString)
{
if (template == null)
{
Expand All @@ -169,7 +171,8 @@ public void createPaymentRequestFromTemplate(@NonNull final org.compiere.model.I
throw new AdempiereException(msg).markAsUserValidationError();
}

paymentRequestBL.createPaymentRequest(invoice, template);
paymentRequestBL.createPaymentRequest(invoice, template, paymentString);

}

public I_C_Payment_Request createPaymentRequestTemplate(final I_C_BP_BankAccount bankAccount, final BigDecimal amount, final IPaymentString paymentString)
Expand Down
Expand Up @@ -40,6 +40,8 @@
import de.metas.i18n.ITranslatableString;
import de.metas.invoice.InvoiceId;
import de.metas.invoice.service.IInvoiceDAO;
import de.metas.process.IProcessDefaultParameter;
import de.metas.process.IProcessDefaultParametersProvider;
import de.metas.process.IProcessParametersCallout;
import de.metas.process.IProcessPrecondition;
import de.metas.process.IProcessPreconditionsContext;
Expand All @@ -52,7 +54,7 @@
/**
* IProcessParametersCallout is used to update frontend data from backend inside "onParameterChanged. Nice!
*/
public class WEBUI_Import_Payment_Request_For_Purchase_Invoice extends JavaProcess implements IProcessParametersCallout, IProcessPrecondition
public class WEBUI_Import_Payment_Request_For_Purchase_Invoice extends JavaProcess implements IProcessDefaultParametersProvider, IProcessParametersCallout, IProcessPrecondition
{

private static final String PARAM_fullPaymentString = "FullPaymentString";
Expand Down Expand Up @@ -106,7 +108,7 @@ protected String doIt() throws Exception
final IPaymentString paymentString = dataProvider.getPaymentString();
final I_C_Payment_Request paymentRequestTemplate = paymentStringProcessService.createPaymentRequestTemplate(bpBankAccount, amountParam, paymentString);

paymentStringProcessService.createPaymentRequestFromTemplate(getActualInvoice(), paymentRequestTemplate);
paymentStringProcessService.createPaymentRequestFromTemplate(getActualInvoice(), paymentRequestTemplate, paymentString);
return MSG_OK;
}

Expand Down Expand Up @@ -161,6 +163,9 @@ public void onParameterChanged(final String parameterName)
else
{
bankAccountNumberParam = paymentString.getPostAccountNo();
if (bankAccountNumberParam == null || bankAccountNumberParam != "") {
bankAccountNumberParam = paymentString.getIbanAccountNo();
}
willCreateANewBandAccountParam = true;
}
}
Expand All @@ -177,7 +182,25 @@ private I_C_Invoice getActualInvoice()
{
return invoiceDAO.getByIdInTrx(InvoiceId.ofRepoId(getRecord_ID()));
}

@Override
public Object getParameterDefaultValue(final IProcessDefaultParameter parameter)
{
final String parameterName = parameter.getColumnName();
final I_C_Invoice actualInvoice = getActualInvoice();

if (PARAM_C_BPartner_ID.equals(parameterName) && actualInvoice != null && actualInvoice.getC_BPartner_ID() > 0)
{
return actualInvoice.getC_BPartner_ID() > 0
? actualInvoice.getC_BPartner_ID()
: IProcessDefaultParametersProvider.DEFAULT_VALUE_NOTAVAILABLE;
}
else
{
return IProcessDefaultParametersProvider.DEFAULT_VALUE_NOTAVAILABLE;
}
}

@Override
public ProcessPreconditionsResolution checkPreconditionsApplicable(final IProcessPreconditionsContext context)
{
Expand Down
Expand Up @@ -235,8 +235,9 @@ public IPaymentString parse(final Properties ctx, final String paymentTextOrigin
true,
amount,
ibanAccountNo,
referenceType == "QRR" ? true : false,
referenceType.equals("QRR") ? true : false,
reference,
unstructuredMessage,
currency);

final IPaymentStringDataProvider dataProvider = new QRPaymentStringDataProvider(paymentString);
Expand Down
Expand Up @@ -108,6 +108,7 @@ public void parseQR()
assertThat(result.getIbanAccountNo()).isEqualTo("CH4409000000909909999");
assertThat(result.getReferenceNoComplete()).isEqualTo("000000000000010360022841297");
assertThat(result.getAmount()).isEqualTo(new BigDecimal("999.99"));
assertTrue(result.isQRIBAN());
}

}

0 comments on commit 910ed39

Please sign in to comment.