Skip to content

Commit

Permalink
Store healthcare-ch XML invoice details as C_Invoice_Details #6853
Browse files Browse the repository at this point in the history
finish unit test (fix some bugs along the way)
  • Loading branch information
metas-ts committed Jun 17, 2020
1 parent 8472d67 commit d6a937f
Show file tree
Hide file tree
Showing 14 changed files with 195 additions and 181 deletions.
Expand Up @@ -4,36 +4,7 @@
import static org.adempiere.model.InterfaceWrapperHelper.saveRecord;

import java.io.ByteArrayInputStream;
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import de.metas.adempiere.model.I_C_InvoiceLine;
import de.metas.invoice.InvoiceId;
import de.metas.invoice.detail.InvoiceDetailItem;
import de.metas.invoice.detail.InvoiceLineWithDetails;
import de.metas.invoice.detail.InvoiceWithDetails;
import de.metas.invoice.detail.InvoiceWithDetailsRepository;
import de.metas.invoice.service.IInvoiceDAO;
import de.metas.invoice.service.InvoiceUtil;
import de.metas.util.Check;
import de.metas.util.Services;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.model.commontypes.XmlCompany;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.model.commontypes.XmlOnline;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.model.commontypes.XmlPerson;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.model.commontypes.XmlPostal;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.model.commontypes.XmlTelecom;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.XmlBody;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.XmlService;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.XmlServiceWithNameAndBeginDate;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.XmlTiers;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.law.XmlKvg;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.tiers.XmlGuarantor;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.tiers.XmlInsurance;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.tiers.XmlReferrer;

import org.adempiere.util.lang.impl.TableRecordReference;
import org.compiere.SpringContextHolder;
import org.compiere.model.I_C_Invoice;
Expand Down Expand Up @@ -67,9 +38,6 @@
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.tiers.XmlPatient;
import lombok.NonNull;

import javax.annotation.Nullable;
import javax.xml.datatype.XMLGregorianCalendar;

/*
* #%L
* vertical-healthcare_ch.forum_datenaustausch_ch.invoice_base
Expand Down Expand Up @@ -100,7 +68,6 @@
public class HealthcareXMLAttachedToInvoiceListener implements AttachmentListener
{


private final CrossVersionServiceRegistry crossVersionServiceRegistry = SpringContextHolder.instance.getBean(CrossVersionServiceRegistry.class);

private final AttachmentEntryService attachmentEntryService = SpringContextHolder.instance.getBean(AttachmentEntryService.class);
Expand Down Expand Up @@ -200,9 +167,7 @@ private void extractBeneficiaryToInvoice(
logger.debug("set setBeneficiary_Location_ID={} from the patient-XML data's SSN={} extracted from attachmentEntry with id={} (filename={})",
location.getId().getRepoId(), patient.getSsn(), attachmentEntry.getId(), attachmentEntry.getFilename());
}

saveRecord(invoiceRecord);
}


}
Expand Up @@ -26,6 +26,7 @@
import com.google.common.collect.Maps;
import de.metas.adempiere.model.I_C_InvoiceLine;
import de.metas.invoice.InvoiceId;
import de.metas.invoice.InvoiceLineId;
import de.metas.invoice.detail.InvoiceDetailItem;
import de.metas.invoice.detail.InvoiceLineWithDetails;
import de.metas.invoice.detail.InvoiceWithDetails;
Expand All @@ -43,7 +44,6 @@
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.XmlRequest;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.XmlBody;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.XmlService;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.XmlServiceWithNameAndBeginDate;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.XmlTiers;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.law.XmlKvg;
import de.metas.vertical.healthcare_ch.forum_datenaustausch_ch.invoice_xversion.request.model.payload.body.tiers.XmlBiller;
Expand All @@ -64,17 +64,17 @@
@Service
public class HealthcareXMLToInvoiceDetailPersister
{
public static final String LABEL_PREFIX_REFERRER = "Referrer_";
public static final String LABEL_PREFIX_REFERRER = "Referrer";
public static final String LABEL_REFERRER_ZSR = "Referrer_ZSR";
public static final String LABEL_REFERRER_GLN = "Referrer_GLN";
public static final String LABEL_TREATMENT_DATE_BEGIN = "Treatment_Date_Begin";
public static final String LABEL_TREATMENT_DATE_END = "Treatment_Date_End";
public static final String LABEL_KVG = "KVG";
public static final String LABEL_KVG_INSURED_ID = "KVG_InsuredId";
public static final String LABEL_PATIENT_BIRTH_DATE = "Patient_BirthDate";
public static final String LABEL_PATIENT_SSN = "Patient_SSN";
public static final String LABEL_PREFIX_PATIENT = "Patient_";
public static final String LABEL_PREFIX_GUARANTOR = "Guarantor_";
public static final String LABEL_PREFIX_BILLER = "Biller_";
public static final String LABEL_PREFIX_PATIENT = "Patient";
public static final String LABEL_PREFIX_GUARANTOR = "Guarantor";
public static final String LABEL_PREFIX_BILLER = "Biller";
public static final String LABEL_BILLER_ZSR = "Biller_ZSR";
public static final String LABEL_BILLER_GLN = "Biller_GLN";
public static final String LABEL_SERVICE_NAME = "Service_Name";
Expand All @@ -95,6 +95,9 @@ public HealthcareXMLToInvoiceDetailPersister(@NonNull final InvoiceWithDetailsRe
this.invoiceWithDetailsRepository = invoiceWithDetailsRepository;
}

/**
* Create or update {@link org.compiere.model.I_C_Invoice_Detail} records according to the given {@code xRequest}.
*/
public void extractInvoiceDetails(
@NonNull final XmlRequest xRequest,
@NonNull final I_C_Invoice invoiceRecord)
Expand All @@ -103,13 +106,13 @@ public void extractInvoiceDetails(
final XmlTiers tiers = body.getTiers();
final XmlBiller biller = tiers.getBiller();

final InvoiceId invoiceId = InvoiceId.ofRepoId(invoiceRecord.getC_Invoice_ID());
final InvoiceWithDetails.InvoiceWithDetailsBuilder invoiceWithDetails = InvoiceWithDetails
.builder()
.id(InvoiceId.ofRepoId(invoiceRecord.getC_Invoice_ID()))
.id(invoiceId)
.orgId(OrgId.ofRepoId(invoiceRecord.getAD_Org_ID()));
setIfNotBlank(invoiceWithDetails,)
.detailItem(InvoiceDetailItem.builder().label(LABEL_BILLER_ZSR).description(biller.getZsr()).build())
.detailItem(InvoiceDetailItem.builder().label(LABEL_BILLER_GLN).description(biller.getEanParty()).build());
setIfNotBlank(invoiceWithDetails, biller.getZsr(), LABEL_BILLER_ZSR);
setIfNotBlank(invoiceWithDetails, biller.getEanParty(), LABEL_BILLER_GLN);

setBillerDetails(biller, invoiceWithDetails, LABEL_PREFIX_BILLER);
setGuarantorDetails(tiers.getGuarantor(), invoiceWithDetails, LABEL_PREFIX_GUARANTOR);
Expand All @@ -122,7 +125,7 @@ public void extractInvoiceDetails(
final XmlKvg kvg = body.getLaw().getKvg();
if (kvg != null)
{
setIfNotBlank(invoiceWithDetails, kvg.getInsuredId(), LABEL_KVG);
setIfNotBlank(invoiceWithDetails, kvg.getInsuredId(), LABEL_KVG_INSURED_ID);
}

// referrer
Expand All @@ -138,7 +141,7 @@ public void extractInvoiceDetails(
final ImmutableMap<Integer, XmlService> //
recordId2xService = Maps.uniqueIndex(body.getServices(), XmlService::getRecordId);

final List<I_C_InvoiceLine> lineRecords = Services.get(IInvoiceDAO.class).retrieveLines(InvoiceId.ofRepoId(invoiceRecord.getC_Invoice_ID()));
final List<I_C_InvoiceLine> lineRecords = Services.get(IInvoiceDAO.class).retrieveLines(invoiceId);
for (final I_C_InvoiceLine lineRecord : lineRecords)
{
final List<String> externalIds = InvoiceUtil.splitExternalIds(lineRecord.getExternalIds());
Expand All @@ -148,15 +151,18 @@ public void extractInvoiceDetails(
}
final int recordId = InvoiceUtil.extractRecordId(externalIds);
final XmlService serviceForRecordId = recordId2xService.get(recordId);
if (serviceForRecordId == null || !(serviceForRecordId instanceof XmlServiceWithNameAndBeginDate))
if (serviceForRecordId == null)
{
continue;
}

final InvoiceLineWithDetails.InvoiceLineWithDetailsBuilder line = InvoiceLineWithDetails.builder();
final InvoiceLineWithDetails.InvoiceLineWithDetailsBuilder line = InvoiceLineWithDetails
.builder()
.id(InvoiceLineId.ofRepoId(invoiceId, lineRecord.getC_InvoiceLine_ID()));

createItemIfNotBlank(serviceForRecordId.getName(), LABEL_SERVICE_NAME).ifPresent(line::detailItem);
extractLocalDate(serviceForRecordId.getDateBegin(), LABEL_SERVICE_DATE).ifPresent(line::detailItem);

createItemIfNotBlank(((XmlServiceWithNameAndBeginDate)serviceForRecordId).getName(), LABEL_SERVICE_NAME).ifPresent(line::detailItem);
extractLocalDate(((XmlServiceWithNameAndBeginDate)serviceForRecordId).getDateBegin(), LABEL_SERVICE_DATE).ifPresent(line::detailItem);
invoiceWithDetails.line(line.build());
}

Expand Down Expand Up @@ -244,8 +250,8 @@ private void setPersonDetailsIfNotNull(
{
if (person != null)
{
setPhoneIfNotNull(invoiceWithDetails, person.getTelecom(), labelPrefix + LABEL_SUFFIX_EMAIL);
setEmailIfNotNull(invoiceWithDetails, person.getOnline(), labelPrefix + LABEL_SUFFIX_PHONE);
setPhoneIfNotNull(invoiceWithDetails, person.getTelecom(), labelPrefix + LABEL_SUFFIX_PHONE);
setEmailIfNotNull(invoiceWithDetails, person.getOnline(), labelPrefix + LABEL_SUFFIX_EMAIL);

setPostalIfNotNull(invoiceWithDetails, person.getPostal(), labelPrefix);

Expand All @@ -263,8 +269,8 @@ private void setCompanyDetailsIfNotNull(
{
if (billerCompany != null)
{
setPhoneIfNotNull(invoiceWithDetails, billerCompany.getTelecom(), labelPrefix + LABEL_SUFFIX_EMAIL);
setEmailIfNotNull(invoiceWithDetails, billerCompany.getOnline(), labelPrefix + LABEL_SUFFIX_PHONE);
setPhoneIfNotNull(invoiceWithDetails, billerCompany.getTelecom(), labelPrefix + LABEL_SUFFIX_PHONE);
setEmailIfNotNull(invoiceWithDetails, billerCompany.getOnline(), labelPrefix + LABEL_SUFFIX_EMAIL);

setPostalIfNotNull(invoiceWithDetails, billerCompany.getPostal(), labelPrefix);

Expand Down
Expand Up @@ -46,11 +46,14 @@ public class TestInvoiceLine

private InvoiceLineId invoiceLineId;

private String externalIds;

public void createInvoiceLineRecord(@NonNull final InvoiceId invoiceId)
{
invoiceLineRecord = newInstance(I_C_InvoiceLine.class);
invoiceLineRecord.setC_Invoice_ID(invoiceId.getRepoId());
invoiceLineRecord.setM_Product_ID(productId.getRepoId());
invoiceLineRecord.setExternalIds(externalIds);
saveRecord(invoiceLineRecord);

invoiceLineId = InvoiceLineId.ofRepoId(invoiceId, invoiceLineRecord.getC_InvoiceLine_ID());
Expand Down

This file was deleted.

0 comments on commit d6a937f

Please sign in to comment.