Skip to content

Commit

Permalink
Propagate the salespartner-ID to the C_Order
Browse files Browse the repository at this point in the history
..actually the propagatino was done;
This fix tweaks model interceptors to make sure it's not overwritten again, but instead also propagated to the bpartner-masterdata

#10330
  • Loading branch information
metas-ts committed Nov 30, 2020
1 parent 89a6c27 commit b441128
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 48 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package de.metas.contracts.commission.salesrep;

import javax.annotation.Nullable;

import de.metas.contracts.commission.Beneficiary;
import de.metas.contracts.commission.Customer;
import de.metas.lang.SOTrx;
Expand All @@ -10,6 +8,8 @@
import lombok.NonNull;
import lombok.Setter;

import javax.annotation.Nullable;

/*
* #%L
* de.metas.contracts
Expand Down Expand Up @@ -78,7 +78,7 @@ public boolean validatesOK()
{
if (soTrx.isPurchase())
{
return true; // we don'T have any business with purchase documents
return true; // we don't have any business with purchase documents
}

if (!isSalesRepRequired())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
package de.metas.contracts.commission.salesrep.interceptor;

import static de.metas.common.util.CoalesceUtil.firstGreaterThanZero;
import static org.adempiere.model.InterfaceWrapperHelper.saveRecord;

import de.metas.bpartner.BPartnerId;
import de.metas.bpartner.service.IBPartnerDAO;
import de.metas.contracts.commission.salesrep.DocumentSalesRepDescriptor;
import de.metas.contracts.commission.salesrep.DocumentSalesRepDescriptorFactory;
import de.metas.contracts.commission.salesrep.DocumentSalesRepDescriptorService;
import de.metas.util.Check;
import de.metas.util.Services;
import lombok.NonNull;
import org.adempiere.ad.callout.annotations.Callout;
import org.adempiere.ad.callout.annotations.CalloutMethod;
import org.adempiere.ad.callout.spi.IProgramaticCalloutProvider;
import org.adempiere.ad.modelvalidator.ModelChangeType;
import org.adempiere.ad.modelvalidator.annotations.DocValidate;
import org.adempiere.ad.modelvalidator.annotations.Interceptor;
import org.adempiere.ad.modelvalidator.annotations.ModelChange;
Expand All @@ -14,13 +20,8 @@
import org.compiere.model.ModelValidator;
import org.springframework.stereotype.Component;

import de.metas.bpartner.BPartnerId;
import de.metas.bpartner.service.IBPartnerDAO;
import de.metas.contracts.commission.salesrep.DocumentSalesRepDescriptor;
import de.metas.contracts.commission.salesrep.DocumentSalesRepDescriptorFactory;
import de.metas.contracts.commission.salesrep.DocumentSalesRepDescriptorService;
import de.metas.util.Services;
import lombok.NonNull;
import static de.metas.common.util.CoalesceUtil.firstGreaterThanZero;
import static org.adempiere.model.InterfaceWrapperHelper.saveRecord;

/*
* #%L
Expand Down Expand Up @@ -62,8 +63,22 @@ public C_Order(
Services.get(IProgramaticCalloutProvider.class).registerAnnotatedCallout(this);
}

@ModelChange(
timings = { ModelValidator.TYPE_BEFORE_NEW, ModelValidator.TYPE_BEFORE_CHANGE },
ifColumnsChanged = { I_C_Order.COLUMNNAME_C_BPartner_ID, I_C_Order.COLUMNNAME_Bill_BPartner_ID })
public void updateSalesPartnerFromCustomer(@NonNull final I_C_Order orderRecord, @NonNull final ModelChangeType type)
{
// If on a new C_Order record both SalesPartnerCode and the BPartner-IDs were set at the same time,
// then don't override the sales-partner-id from the BPartners' mater data, but assume that the sales-partner-id shall remain the way it was set on the new record.
// This implies that the master data might be updated on thid C_Order's after-new modelinterceptor method
final boolean currentPartnerCodeShallPrevail = type.isNew() && Check.isNotBlank(orderRecord.getSalesPartnerCode());
if (!currentPartnerCodeShallPrevail)
{
updateSalesPartnerFromCustomer(orderRecord);
}
}

@CalloutMethod(columnNames = { I_C_Order.COLUMNNAME_C_BPartner_ID, I_C_Order.COLUMNNAME_Bill_BPartner_ID })
@ModelChange(timings = { ModelValidator.TYPE_BEFORE_NEW, ModelValidator.TYPE_BEFORE_CHANGE }, ifColumnsChanged = { I_C_Order.COLUMNNAME_C_BPartner_ID, I_C_Order.COLUMNNAME_Bill_BPartner_ID })
public void updateSalesPartnerFromCustomer(@NonNull final I_C_Order orderRecord)
{
final DocumentSalesRepDescriptor documentSalesRepDescriptor = documentSalesRepDescriptorFactory.forDocumentRecord(orderRecord);
Expand Down Expand Up @@ -93,7 +108,11 @@ public void updateSalesPartnerInOrder(@NonNull final I_C_Order orderRecord)
documentSalesRepDescriptor.syncToRecord();
}

@ModelChange(timings = ModelValidator.TYPE_AFTER_CHANGE, ifColumnsChanged = I_C_Order.COLUMNNAME_C_BPartner_SalesRep_ID)
/**
* Note: also update bpartner-master data if a new order was created from C_OLCands, thus the {@code AFTER_NEW}.
*/
@ModelChange(timings = { ModelValidator.TYPE_AFTER_NEW, ModelValidator.TYPE_AFTER_CHANGE }, //
ifColumnsChanged = I_C_Order.COLUMNNAME_C_BPartner_SalesRep_ID)
public void updateSalesPartnerInCustomerMaterdata(@NonNull final I_C_Order orderRecord)
{
if (!orderRecord.isSOTrx())
Expand Down
Original file line number Diff line number Diff line change
@@ -1,34 +1,5 @@
package de.metas.ordercandidate.api;

import static org.adempiere.model.InterfaceWrapperHelper.delete;
import static org.adempiere.model.InterfaceWrapperHelper.newInstance;
import static org.adempiere.model.InterfaceWrapperHelper.save;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Collectors;

import org.adempiere.ad.trx.api.ITrx;
import org.adempiere.exceptions.FillMandatoryException;
import org.adempiere.mm.attributes.api.AttributeConstants;
import org.adempiere.mm.attributes.api.IAttributeSetInstanceAware;
import org.adempiere.mm.attributes.api.IAttributeSetInstanceAwareFactoryService;
import org.adempiere.mm.attributes.api.IAttributeSetInstanceBL;
import org.adempiere.model.InterfaceWrapperHelper;
import org.adempiere.warehouse.WarehouseId;
import org.compiere.model.I_AD_Note;
import org.compiere.model.I_C_BPartner;
import org.compiere.model.MNote;
import org.compiere.model.X_C_Order;
import org.compiere.util.Env;
import org.compiere.util.TimeUtil;
import org.slf4j.Logger;

import de.metas.adempiere.model.I_AD_User;
import de.metas.adempiere.model.I_C_Order;
import de.metas.bpartner.BPartnerContactId;
Expand Down Expand Up @@ -72,6 +43,34 @@
import de.metas.util.Services;
import lombok.Builder;
import lombok.NonNull;
import org.adempiere.ad.trx.api.ITrx;
import org.adempiere.exceptions.FillMandatoryException;
import org.adempiere.mm.attributes.api.AttributeConstants;
import org.adempiere.mm.attributes.api.IAttributeSetInstanceAware;
import org.adempiere.mm.attributes.api.IAttributeSetInstanceAwareFactoryService;
import org.adempiere.mm.attributes.api.IAttributeSetInstanceBL;
import org.adempiere.model.InterfaceWrapperHelper;
import org.adempiere.warehouse.WarehouseId;
import org.compiere.model.I_AD_Note;
import org.compiere.model.I_C_BPartner;
import org.compiere.model.MNote;
import org.compiere.model.X_C_Order;
import org.compiere.util.Env;
import org.compiere.util.TimeUtil;
import org.slf4j.Logger;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.stream.Collectors;

import static org.adempiere.model.InterfaceWrapperHelper.delete;
import static org.adempiere.model.InterfaceWrapperHelper.newInstance;
import static org.adempiere.model.InterfaceWrapperHelper.save;

/*
* #%L
Expand Down Expand Up @@ -146,7 +145,7 @@ private OLCandOrderFactory(

}

private I_C_Order newOrder(final OLCand candidateOfGroup)
private I_C_Order newOrder(@NonNull final OLCand candidateOfGroup)
{
final I_C_Order order = newInstance(I_C_Order.class);
order.setDocStatus(DocStatus.Drafted.getCode());
Expand Down Expand Up @@ -231,15 +230,13 @@ private I_C_Order newOrder(final OLCand candidateOfGroup)
}

final BPartnerId salesRepId = candidateOfGroup.getSalesRepId();

if (salesRepId != null)
{
order.setC_BPartner_SalesRep_ID(salesRepId.getRepoId());

final I_C_BPartner salesPartner = bpartnerDAO.getById(salesRepId);

order.setSalesPartnerCode(salesPartner.getSalesPartnerCode());

}

// Save to SO the external header id, so that on completion it can be linked with its payment
Expand Down Expand Up @@ -319,7 +316,6 @@ private void addOLCand0(@NonNull final OLCand candidate) throws Exception
{
currentOrderLine = newOrderLine(candidate);
}

currentOrderLine.setM_Warehouse_Dest_ID(WarehouseId.toRepoId(candidate.getWarehouseDestId()));
currentOrderLine.setProductDescription(candidate.getProductDescription()); // 08626: Propagate ProductDescription to C_OrderLine
currentOrderLine.setLine(candidate.getLine());
Expand Down

0 comments on commit b441128

Please sign in to comment.