public void Validate(List <APAdjust> adjustments) { foreach (var adjustment in adjustments) { var invoice = InvoiceDataProvider.GetInvoice(Graph, adjustment.AdjdDocType, adjustment.AdjdRefNbr); var invoiceJCExt = invoice.GetExtension <APInvoiceJCExt>(); if (invoiceJCExt.IsJointPayees == true) { APInvoice origBill = null; if (invoice.IsRetainageDocument == true) { origBill = InvoiceDataProvider.GetOriginalInvoice(Graph, invoice); } if (PaymentCycleWorkflowIsStartedAndItIsOtherPayment(adjustment.AdjgDocType, adjustment.AdjgRefNbr, origBill?.DocType ?? invoice.DocType, origBill?.RefNbr ?? invoice.RefNbr)) { ShowErrorMessage <APAdjust.adjdRefNbr>(adjustment, JointCheckMessages.PaymentCycleWorkflowIsStarted); } } } }
protected virtual decimal?GetVendorAmountToPay(APAdjust adjustment) { var invoice = InvoiceDataProvider.GetInvoice(Graph, adjustment.AdjdDocType, adjustment.AdjdRefNbr); var invoiceExtension = PXCache <APInvoice> .GetExtension <APInvoiceJCExt>(invoice); return(invoiceExtension.AmountToPay); }
private bool IsJointPayment(APAdjust adjustment) { var invoice = InvoiceDataProvider.GetInvoice(Base, adjustment.AdjdDocType, adjustment.AdjdRefNbr); var invoiceExtension = PXCache <APInvoice> .GetExtension <APInvoiceJCExt>(invoice); return(invoiceExtension.IsJointPayees == true); }
public static IEnumerable <int?> GetProjectIds(PXGraph graph, IEnumerable <APAdjust> adjustments) { return(adjustments.Select(adjustment => InvoiceDataProvider.GetOriginalInvoice(graph, adjustment.AdjdRefNbr, adjustment.AdjdDocType)) .SelectMany(inv => TransactionDataProvider .GetTransactions(graph, inv.DocType, inv.RefNbr).Select(t => t.ProjectID)).Distinct().ToList()); }
private static IEnumerable <APTran> GetTransactions(PXGraph graph, IDocumentAdjustment adjustment) { var originalBill = InvoiceDataProvider.GetOriginalInvoice(graph, adjustment.AdjdRefNbr, adjustment.AdjdDocType); return(TransactionDataProvider.GetTransactions(graph, originalBill.DocType, originalBill.RefNbr)); }
public virtual decimal?GetVendorPreparedBalance(APAdjust adjustment) { FinDocumentExtKey actualDocLineKey = InvoiceDataProvider.GetSourceEntityKeyByRetainage(Graph, adjustment.AdjdDocType, adjustment.AdjdRefNbr, adjustment.AdjdLineNbr); decimal?fullAmount; if (adjustment.AdjdLineNbr == 0) { APInvoice bill = InvoiceDataProvider.GetInvoice(Graph, actualDocLineKey.Type, actualDocLineKey.RefNbr); fullAmount = bill.CuryOrigDocAmt + bill.CuryRetainageTotal; } else { APTran tran = TransactionDataProvider.GetTransaction(Graph, actualDocLineKey.Type, actualDocLineKey.RefNbr, actualDocLineKey.LineNbr); fullAmount = tran.CuryOrigTranAmt + tran.CuryRetainageAmt; } var totalJointAmountOwed = JointPayeeDataProvider.GetJointPayees(Graph, actualDocLineKey.RefNbr, actualDocLineKey.LineNbr) .Sum(jp => jp.JointAmountOwed.GetValueOrDefault()); var totalVendorPaymentAmount = GetTotalVendorPaymentAmount(adjustment, actualDocLineKey.RefNbr, actualDocLineKey.LineNbr); var currentVendorPaymentAmount = GetVendorPaymentAmount(adjustment); var reversedRetainageAmount = GetReversedRetainageAmount(actualDocLineKey.RefNbr, actualDocLineKey.LineNbr); return(fullAmount + reversedRetainageAmount - totalJointAmountOwed - (totalVendorPaymentAmount - currentVendorPaymentAmount)); }
private bool IsJointPayeesInvoice(IDocumentKey document) { var invoice = InvoiceDataProvider.GetInvoice(Base, document.DocType, document.RefNbr); var invoiceExtension = PXCache <APInvoice> .GetExtension <APInvoiceJCExt>(invoice); return(invoiceExtension?.IsJointPayees == true); }
private static APTran GetTransaction(PXGraph graph, JointPayee jointPayee, IDocumentAdjustment adjustment) { var originalBill = InvoiceDataProvider.GetOriginalInvoice(graph, adjustment.AdjdRefNbr, adjustment.AdjdDocType); return(TransactionDataProvider.GetTransaction(graph, originalBill.DocType, originalBill.RefNbr, jointPayee.BillLineNumber)); }
private bool DoesAnyInvoiceJointPayeeExist(IDocumentKey document) { var noteId = InvoiceDataProvider.GetOriginalInvoice(Base, document.RefNbr, document.DocType)?.NoteID; return(SelectFrom <JointPayee> .Where <JointPayee.billId.IsEqual <P.AsGuid> > .View .Select(Base, noteId).Any()); }
private bool IsPaymentCycleWorkflow(IDocumentKey invoice) { var allRelatedBills = InvoiceDataProvider.GetAllBillsFromRetainageGroup(Base, invoice.RefNbr, invoice.DocType); return(allRelatedBills.Any(inv => JointPayeePaymentDataProvider.DoesAnyNonReleasedJointPayeePaymentExist(Base, inv))); }
private void SetCashDiscountBalance(APAdjust adjustment) { var invoice = InvoiceDataProvider.GetInvoice(Base, adjustment.AdjdDocType, adjustment.AdjdRefNbr); adjustment.CuryDiscBal = invoice.PaymentsByLinesAllowed == true ? TransactionDataProvider.GetTransaction(Base, invoice.DocType, invoice.RefNbr, adjustment.AdjdLineNbr) .CuryCashDiscBal : invoice.CuryOrigDiscAmt; }
public virtual decimal?GetNonReleasedCashDiscountTakenExceptCurrentAdjustment(APAdjust apAdjust) { var adjustments = AdjustmentDataProvider.GetInvoiceAdjustments(Graph, apAdjust.AdjdRefNbr); var releasedCashDiscountTaken = InvoiceDataProvider .GetInvoice(Graph, apAdjust.AdjdDocType, apAdjust.AdjdRefNbr).CuryDiscTaken; var totalCashDiscountTaken = adjustments.Sum(adjustment => adjustment.CuryAdjgPPDAmt); return(totalCashDiscountTaken - releasedCashDiscountTaken - apAdjust.CuryAdjgPPDAmt); }
public void ClosePaymentCycleWorkflowIfNeeded(APAdjust adjustment) { var invoice = InvoiceDataProvider.GetInvoice(graph, adjustment.AdjdDocType, adjustment.AdjdRefNbr); if (!JointPayeePaymentDataProvider.DoesAnyNonReleasedJointPayeePaymentExist(graph, invoice)) { UpdateIsPaymentCycleWorkflow(invoice, false); } }
protected override decimal?GetOpenBalanceByAllBillsFromRetainageGroup(APInvoice invoice) { var originalInvoice = InvoiceDataProvider.GetOriginalInvoice(Graph, invoice.RefNbr, invoice.DocType); var billLineNumbers = JointPayees.Select(jp => jp.BillLineNumber).ToList(); var unreleasedRetainageAmount = GetUnreleasedRetainageAmount(originalInvoice, billLineNumbers); var releasedAmountFromRetainageGroup = GeReleasedAmountFromRetainageGroup(invoice, billLineNumbers); return(invoice.CuryDocBal + unreleasedRetainageAmount + releasedAmountFromRetainageGroup); }
protected virtual decimal?GetOpenBalanceByAllBillsFromRetainageGroup(APInvoice invoice) { var originalBill = InvoiceDataProvider.GetOriginalInvoice(Graph, invoice.RefNbr, invoice.DocType); var relatedRetainageBills = InvoiceDataProvider.GetRelatedRetainageBills(Graph, originalBill.RefNbr, originalBill.DocType); return(originalBill.CuryDocBal + originalBill.CuryRetainageUnreleasedAmt + relatedRetainageBills.Sum(x => x.CuryDocBal)); }
private bool IsFinalAdjustment(APAdjust adjustment) { var invoice = InvoiceDataProvider.GetInvoice(Base, adjustment.AdjdDocType, adjustment.AdjdRefNbr); invoiceBalanceCalculationService = invoice.PaymentsByLinesAllowed == true ? new InvoiceLineBalanceCalculationService(Base) : new InvoiceBalanceCalculationService(Base); return(invoiceBalanceCalculationService.GetInvoiceBalance(adjustment) == adjustment.CuryAdjgAmt); }
public void InitializePaymentCycleWorkflowIfRequired(APAdjust adjustment) { var invoice = InvoiceDataProvider.GetInvoice(graph, adjustment.AdjdDocType, adjustment.AdjdRefNbr); var invoiceExtension = invoice.GetExtension <APInvoiceJCExt>(); if (invoiceExtension.IsJointPayees == true && invoiceExtension.IsPaymentCycleWorkflow == false) { UpdateIsPaymentCycleWorkflow(invoice, true); } }
private void RefreshCurrentInvoice(PXGraph graph) { var currentBill = Base.Document.Current; currentBill = InvoiceDataProvider.GetOriginalInvoice(graph, currentBill.RefNbr, currentBill.DocType); if (currentBill.PaymentsByLinesAllowed.GetValueOrDefault()) { RecalculateTotalJointAmountOwedPerLine(); } }
private decimal?GeReleasedAmountFromRetainageGroup(APInvoice invoice, IEnumerable <int?> billLineNumbers) { var allReleasedBillsFromRetainageGroup = InvoiceDataProvider .GetAllBillsFromRetainageGroup(Graph, invoice.RefNbr, invoice.DocType) .Except(invoice).Where(bill => bill.Released == true); return(allReleasedBillsFromRetainageGroup.SelectMany(bill => TransactionDataProvider .GetTransactions(Graph, bill.DocType, bill.RefNbr, billLineNumbers)) .Sum(transaction => transaction.CuryTranBal)); }
private void SetBillId(IEnumerable <APTran> transactions) { var invoices = InvoiceDataProvider.GetInvoices(Graph, transactions); var invoice = invoices.SingleOrNull(); if (invoice != null) { ComplianceDocumentRefNoteAttribute.SetComplianceDocumentReference <ComplianceDocument.billID>( Cache, lienWaiver, invoice.DocType, invoice.RefNbr, invoice.NoteID); } }
protected virtual decimal GetAllowableCashDiscountConsiderBillBalance(APAdjust apAdjust) { var invoiceAdjustments = AdjustmentDataProvider.GetInvoiceAdjustments(Graph, apAdjust.AdjdRefNbr); var unappliedBalance = invoiceAdjustments .Sum(adjustment => adjustment.CuryAdjgAmt + adjustment.CuryAdjgPPDAmt); var billBalance = InvoiceDataProvider.GetInvoice(Graph, apAdjust.AdjdDocType, apAdjust.AdjdRefNbr) .CuryOrigDocAmt; var cashDiscount = billBalance - unappliedBalance + apAdjust.CuryAdjgPPDAmt; return(Math.Max(cashDiscount.GetValueOrDefault(), 0)); }
public void AddJointPayeePayments(APAdjust adjustment) { var originalBillReferenceNumber = InvoiceDataProvider.GetOriginalInvoice(graph, adjustment.AdjdRefNbr, adjustment.AdjdDocType).RefNbr; var jointPayees = JointPayeeDataProvider.GetJointPayees(graph, originalBillReferenceNumber, adjustment.AdjdLineNbr); foreach (var jointPayee in jointPayees) { AddJointPayeePayment(jointPayee, adjustment); } }
private void CreateJointPayeePayments(APAdjust adjustment) { var originalInvoice = InvoiceDataProvider.GetOriginalInvoice(Base, adjustment.AdjdRefNbr, adjustment.AdjdDocType); var jointPayees = JointPayeeDataProvider.GetJointPayees(Base, originalInvoice.RefNbr, adjustment.AdjdLineNbr); var jointPayeePayments = jointPayees .Select(jointPayee => CreateJointPayeePayment(jointPayee.JointPayeeId, adjustment)); JointPayeePayments.Cache.InsertAll(jointPayeePayments); }
public static IEnumerable <int?> GetProjectIds(APAdjust adjustment, PXGraph graph) { FinDocumentExtKey actualDocLineKey = InvoiceDataProvider.GetSourceEntityKeyByRetainage(graph, adjustment.AdjdDocType, adjustment.AdjdRefNbr, adjustment.AdjdLineNbr); var transactions = adjustment.AdjdLineNbr == 0 ? TransactionDataProvider.GetTransactions(graph, actualDocLineKey.Type, actualDocLineKey.RefNbr) : TransactionDataProvider.GetTransaction(graph, actualDocLineKey.Type, actualDocLineKey.RefNbr, actualDocLineKey.LineNbr).SingleToList(); return(transactions.Select(tran => tran.ProjectID)); }
private decimal?GetOpenBalanceByAllBillsFromRetainageGroupPerLine( APAdjust adjustment, decimal?transactionBalance) { var invoice = InvoiceDataProvider.GetInvoice(Graph, adjustment.AdjdDocType, adjustment.AdjdRefNbr); var originalInvoice = InvoiceDataProvider.GetOriginalInvoice(Graph, invoice); var unreleasedRetainageAmount = GetUnreleasedRetainageAmount(originalInvoice, adjustment.AdjdLineNbr.CreateArray()); var releasedAmountFromRetainageGroup = GeReleasedAmountFromRetainageGroup(invoice, adjustment.AdjdLineNbr.CreateArray()); return(transactionBalance + unreleasedRetainageAmount + releasedAmountFromRetainageGroup); }
private void CheckPaymentLifeCycle(PXGraph graph) { var currentBill = Base.Document.Current; var allRelatedBills = InvoiceDataProvider.GetAllBillsFromRetainageGroup(graph, currentBill.RefNbr, currentBill.DocType); if (allRelatedBills.Select(retainageBill => retainageBill.GetExtension <APInvoiceJCExt>()) .Any(ext => ext.IsPaymentCycleWorkflow == true)) { throw new PXException(JointCheckMessages.PaymentCycleWorkflowIsStarted); } }
private void SetAmountToPayIfEmpty(APAdjust adjustment) { var invoice = InvoiceDataProvider.GetInvoice(Base, adjustment.AdjdDocType, adjustment.AdjdRefNbr); var invoiceExtension = PXCache <APInvoice> .GetExtension <APInvoiceJCExt>(invoice); var adjustmentExtension = PXCache <APAdjust> .GetExtension <ApAdjustExt>(adjustment); if (invoiceExtension.IsJointPayees == true && adjustmentExtension.AmountToPayPerLine == null) { adjustmentExtension.AmountToPayPerLine = GetVendorBalance(adjustment, invoice); adjustment.CuryAdjgAmt = adjustmentExtension.AmountToPayPerLine; } }
protected virtual decimal?GetReversedRetainageAmount(string referenceNumber, int?lineNumber) { if (lineNumber == 0) { return(InvoiceDataProvider.GetReversedRetainageDebitAdjustments(Graph, referenceNumber) .Sum(inv => inv.CuryOrigDocAmt)); } else { return(InvoiceDataProvider.GetReversedRetainageDebitAdjustmentLines(Graph, referenceNumber, lineNumber) .Sum(inv => inv.CuryOrigTranAmt)); } }
public static IEnumerable <int?> GetProjectIds(APInvoiceEntry graph, JointPayee jointPayee) { var originalBill = InvoiceDataProvider.GetOriginalInvoice(graph, graph.Document.Current); var transactions = TransactionDataProvider.GetTransactions(graph, originalBill.DocType, originalBill.RefNbr) .ToList(); if (IsSingleProjectPerDocumentContext(graph.APSetup.Current, transactions)) { return(graph.Document.Current.ProjectID.AsSingleEnumerable()); } if (jointPayee != null && graph.Document.Current.PaymentsByLinesAllowed == true) { transactions = transactions.Where(tran => tran.LineNbr == jointPayee.BillLineNumber).ToList(); } return(transactions.Select(tran => tran.ProjectID).Distinct()); }
public void ValidateApAdjustment <TField>(APAdjust adjustment) where TField : IBqlField { if (adjustment.IsSelfAdjustment()) { return; } var apInvoice = InvoiceDataProvider.GetInvoice(graph, adjustment.AdjdDocType, adjustment.AdjdRefNbr); var hasExpiredComplianceDocuments = ValidateRelatedField <APAdjust, ComplianceDocument.billID, TField>(adjustment, ComplianceDocumentReferenceRetriever.GetComplianceDocumentReferenceId(graph, apInvoice)); ValidateRelatedRow <APAdjust, ApAdjustExt.hasExpiredComplianceDocuments>(adjustment, hasExpiredComplianceDocuments); }