Skip to content

Commit

Permalink
Update an existing I_C_InvoiceCandidate_InOutLine or create a new one.
Browse files Browse the repository at this point in the history
  • Loading branch information
TheBestPessimist committed Dec 6, 2019
1 parent 74e03fe commit 1448c51
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 25 deletions.
Expand Up @@ -31,6 +31,7 @@
import java.util.Properties;
import java.util.Set;

import lombok.NonNull;
import org.adempiere.ad.dao.IQueryBuilder;
import org.adempiere.exceptions.AdempiereException;
import org.adempiere.util.lang.IContextAware;
Expand All @@ -57,6 +58,8 @@
import de.metas.process.PInstanceId;
import de.metas.util.ISingletonService;

import javax.annotation.Nullable;

public interface IInvoiceCandDAO extends ISingletonService
{
I_C_Invoice_Candidate getById(InvoiceCandidateId invoiceCandId);
Expand Down Expand Up @@ -298,14 +301,12 @@ public interface IInvoiceCandDAO extends ISingletonService
<T extends org.compiere.model.I_M_InOutLine> List<T> retrieveInOutLinesForCandidate(I_C_Invoice_Candidate ic, Class<T> clazz);

/**
* Checks if there exists an allocation between given invoice candidate and given receipt/shipment line.
*
* @param ic invoice candidate
* @param iol receipt/shipment line
* @return true if an allocation exists
* Return the unique allocation between the given invoice candidate and receipt/shipment line.
* We know it's unique as there is a Unique Index on the 2 columns named C_IC_IOL_Unique_Active.
* @see I_C_InvoiceCandidate_InOutLine
*/
boolean existsInvoiceCandidateInOutLinesForInvoiceCandidate(I_C_Invoice_Candidate ic, I_M_InOutLine iol);
@Nullable
I_C_InvoiceCandidate_InOutLine retrieveInvoiceCandidateInOutLine(@NonNull I_C_Invoice_Candidate ic, @NonNull I_M_InOutLine iol);

/**
* Checks if the given <code>ic</code> is referenced by a <code>C_Invoice_Candidate_Recompute</code> record. The check is made within the ic's transaction.<br>
Expand Down
Expand Up @@ -363,17 +363,19 @@ public List<I_C_Invoice_Candidate> retrieveInvoiceCandidatesForOrderLineId(@NonN
.list(I_C_Invoice_Candidate.class);
}

@Nullable
@Override
public boolean existsInvoiceCandidateInOutLinesForInvoiceCandidate(final I_C_Invoice_Candidate ic, final I_M_InOutLine iol)
public I_C_InvoiceCandidate_InOutLine retrieveInvoiceCandidateInOutLine(@NonNull final I_C_Invoice_Candidate ic, @NonNull final I_M_InOutLine iol)
{
// there is a Unique Index on the 2 columns C_IC_IOL_Unique_Active, so i'm sure there's at most 1 line
return Services.get(IQueryBL.class)
.createQueryBuilder(I_C_InvoiceCandidate_InOutLine.class, ic)
.addEqualsFilter(I_C_InvoiceCandidate_InOutLine.COLUMN_C_Invoice_Candidate_ID, ic.getC_Invoice_Candidate_ID())
.addEqualsFilter(I_C_InvoiceCandidate_InOutLine.COLUMN_M_InOutLine_ID, iol.getM_InOutLine_ID())
.addOnlyActiveRecordsFilter()
//
.create()
.anyMatch();
.firstOnly(I_C_InvoiceCandidate_InOutLine.class);
}

@Override
Expand Down Expand Up @@ -428,8 +430,8 @@ private IQueryBuilder<I_C_InvoiceCandidate_InOutLine> retrieveICIOLAssociationsF
.orderBy()
.addColumn(I_C_InvoiceCandidate_InOutLine.COLUMN_M_InOutLine_ID)
.endOrderBy()
//
;
//
;
}

@Override
Expand Down Expand Up @@ -846,9 +848,9 @@ protected final void invalidateCandsForSelection(final PInstanceId pinstanceId,
final IQueryBuilder<I_C_Invoice_Candidate> icQueryBuilder = Services.get(IQueryBL.class)
.createQueryBuilder(I_C_Invoice_Candidate.class, ctx, trxName)
.setOnlySelection(pinstanceId)
// Invalidate no matter if Processed or not
// .addEqualsFilter(I_C_Invoice_Candidate.COLUMN_Processed, false)
;
// Invalidate no matter if Processed or not
// .addEqualsFilter(I_C_Invoice_Candidate.COLUMN_Processed, false)
;

invalidateCandsFor(icQueryBuilder);
// logger.info("Invalidated {} C_Invoice_Candidates for AD_PInstance_ID={}", new Object[] { count, adPInstanceId });
Expand Down Expand Up @@ -952,7 +954,7 @@ private final IQueryBuilder<I_C_Invoice_Candidate_Recompute> retrieveInvoiceCand
if (invoiceCandidateIds == null || invoiceCandidateIds.isEmpty())
{
// i.e. tag none
queryBuilder.filter(ConstantQueryFilter.<I_C_Invoice_Candidate_Recompute> of(false));
queryBuilder.filter(ConstantQueryFilter.<I_C_Invoice_Candidate_Recompute>of(false));
}
else
{
Expand Down Expand Up @@ -1271,9 +1273,9 @@ private PaymentTermId retrievePaymentTermId(final PInstanceId selectionId)
* If there were any changes, those invoice candidates will be invalidated.
*
* @param invoiceCandidateColumnName {@link I_C_Invoice_Candidate}'s column to update
* @param value value to set (you can also use {@link ModelColumnNameValue})
* @param updateOnlyIfNull if true then it will update only if column value is null (not set)
* @param selectionId invoice candidates selection (AD_PInstance_ID)
* @param value value to set (you can also use {@link ModelColumnNameValue})
* @param updateOnlyIfNull if true then it will update only if column value is null (not set)
* @param selectionId invoice candidates selection (AD_PInstance_ID)
*/
private final <T> void updateColumnForSelection(
@NonNull final String columnName,
Expand All @@ -1289,7 +1291,7 @@ private final <T> void updateColumnForSelection(
.createQueryBuilder(I_C_Invoice_Candidate.class)
.setOnlySelection(selectionId)
.addNotEqualsFilter(columnName, value) // skip those which have our value set
;
;
if (updateOnlyIfNull)
{
selectionQueryBuilder.addEqualsFilter(columnName, null);
Expand Down
Expand Up @@ -163,7 +163,7 @@ private void updateTagged()
final ICUpdateResult result = new ICUpdateResult();
try (final IAutoCloseable updateInProgressCloseable = invoiceCandBL.setUpdateProcessInProgress())
{
trxItemProcessorExecutorService.<I_C_Invoice_Candidate, ICUpdateResult> createExecutor()
trxItemProcessorExecutorService.<I_C_Invoice_Candidate, ICUpdateResult>createExecutor()
.setContext(getCtx(), getTrxName()) // if called from process or wp-processor then getTrxName() is null because *we* want to manage the trx => commit after each chunk
.setItemsPerBatch(itemsPerBatch)

Expand Down Expand Up @@ -239,7 +239,7 @@ public void completeChunk()
Loggables.addLog("Update invalid result: {}", result.getSummary());
}

private final void updateInvalid(final I_C_Invoice_Candidate icRecord)
private void updateInvalid(final I_C_Invoice_Candidate icRecord)
{
final Properties ctx = InterfaceWrapperHelper.getCtx(icRecord);

Expand Down Expand Up @@ -354,13 +354,13 @@ private void populateC_InvoiceCandidate_InOutLine(
final List<I_M_InOutLine> inoutLines = inOutDAO.retrieveLinesForOrderLine(orderLine, I_M_InOutLine.class);
for (final I_M_InOutLine inOutLine : inoutLines)
{
if (invoiceCandDAO.existsInvoiceCandidateInOutLinesForInvoiceCandidate(ic, inOutLine))
// create a new PO or update the unique existing one
I_C_InvoiceCandidate_InOutLine iciol = invoiceCandDAO.retrieveInvoiceCandidateInOutLine(ic, inOutLine);
if (iciol == null)
{
continue; // nothing to to, record already exists
iciol = newInstance(I_C_InvoiceCandidate_InOutLine.class, context);
iciol.setC_Invoice_Candidate(ic);
}

final I_C_InvoiceCandidate_InOutLine iciol = newInstance(I_C_InvoiceCandidate_InOutLine.class, context);
iciol.setC_Invoice_Candidate(ic);
Services.get(IInvoiceCandBL.class).updateICIOLAssociationFromIOL(iciol, inOutLine);
}
}
Expand Down

0 comments on commit 1448c51

Please sign in to comment.