Skip to main content

Notifications

Finance | Project Operations, Human Resources, ...
Unanswered

How to create project invoice proposal for one sales order

(0) ShareShare
ReportReport
Posted on by 133

Good day, I hope someone can help me.  I have a requirement to create a project invoice proposal for one sales order at a time.

I found the following code on a different thread but it is not working.

I expected the tmpProjProposalTrans(PSATmpProjProposalTrans) to contain some values after proposalCreateLines.getProposalTransDisplay();

Can someone help.  Am I doing this wrong or have I missed something?  There are just so many different classes that seem similar.  

public void createProposal(PASProjectInvoiceContract _contract)
    {
        PSATmpProjProposalTrans                 tmpProjProposalTrans, tmpProjProposalTransPreBill;
        
        ProjInvoiceProposalCreateLinesParams    proposalCreateLinesParams = ProjInvoiceProposalCreateLinesParams::construct();
        ProjInvoiceProposalCreateLines          proposalCreateLines;
        ProjInvoiceProposalInsertLines          projInvoiceProposalInsertLines;
        List                                    proposalIdList;
        ListEnumerator                          proposalIdEnumerator;
        ProjProposalId                          proposalId;
        SalesTable                              salesTable;
        Query                                   query;
        QueryBuildRange                         qbr;
        QueryBuildDataSource                    qbds;
        QueryRun                                queryRun;

        contract = _contract;

        TransDate   fromDate    = this.contract.parmFromDate();
        TransDate   toDate      = this.contract.parmToDate();
        InvoiceDate invoiceDate = this.contract.parmInvoiceDate();

        query       = new Query(SysOperationHelper::base64Decode(contract.parmQuery()));
        qbds = query.dataSourceTable(tableNum(SalesTable));
        qbr = qbds.addRange(fieldnum(SalesTable, ShippingDateConfirmed));
        qbr.value(strFmt('%1..%2', fromDate, toDate));
        queryRun    = new QueryRun(query);

        ttsbegin;
        while (queryRun.next())
        {
            salesTable = queryRun.get(tableNum(SalesTable)) as SalesTable;
            proposalCreateLinesParams.parmInvoiceTypeSelection(ProjInvoiceTypeSelection::Both);
            proposalCreateLinesParams.parmInvoiceDate(invoiceDate);
            proposalCreateLinesParams.parmProjInvoiceProjId(salesTable.InvoiceAccount);
            proposalCreateLinesParams.parmProjId(salesTable.ProjId);

            proposalCreateLinesParams.parmIsQueryCostTrans(false);
            proposalCreateLinesParams.parmIsQueryEmplTrans(false);
            proposalCreateLinesParams.parmIsQueryItemTrans(false);
            proposalCreateLinesParams.parmIsQueryOnAccTrans(false);
            proposalCreateLinesParams.parmIsQueryRevenueTrans(false);
            proposalCreateLinesParams.parmIsQuerySalesLine(true);
            
            proposalCreateLinesParams.parmSalesUpdate(SalesUpdate::PickingListAndNonInventoried);
            proposalCreateLinesParams.parmStartDate(fromDate);
            proposalCreateLinesParams.parmEndDate(toDate);
                        
            proposalCreateLines = ProjInvoiceProposalCreateLines::newStandard(proposalCreateLinesParams.pack());
            proposalCreateLines.parmProposalCreateLinesParams().parmInvoiceDate(invoiceDate);
            proposalCreateLines.run();

            tmpProjProposalTrans = proposalCreateLines.getProposalTransDisplay();
            delete_from tmpProjProposalTrans
            where tmpProjProposalTrans.RefTableId   == tableNum(SalesTable)
                && tmpProjProposalTrans.RefRecId    != salesTable.RecId;

            tmpProjProposalTrans = proposalCreateLines.parmProposalTransCreate();
            delete_from tmpProjProposalTrans
            where tmpProjProposalTrans.RefTableId   == tableNum(SalesTable)
                && tmpProjProposalTrans.RefRecId    != salesTable.RecId;

            tmpProjProposalTransPreBill = proposalCreateLines.getProposalTransDisplayDeduction();
            delete_from tmpProjProposalTransPreBill
            where tmpProjProposalTrans.RefTableId   == tableNum(SalesTable)
                && tmpProjProposalTrans.RefRecId    != salesTable.RecId;

            if (proposalCreateLines)
            {
                projInvoiceProposalInsertLines = new ProjInvoiceProposalInsertLines(proposalCreateLines, false);
                projInvoiceProposalInsertLines.parmShowMessages(false);
                projInvoiceProposalInsertLines.parmInvoiceType(ProjInvoiceType::Invoice);
                projInvoiceProposalInsertLines.runOperation();
            }
          
        }
        ttscommit;
    }

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Announcing Our 2025 Season 1 Super Users!

A new season of Super Users has arrived, and we are so grateful for the daily…

Vahid Ghafarpour – Community Spotlight

We are excited to recognize Vahid Ghafarpour as our February 2025 Community…

Congratulations to the January Top 10 leaders!

Check out the January community rock stars...

Leaderboard

#1
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 291,979 Super User 2025 Season 1

#2
Martin Dráb Profile Picture

Martin Dráb 230,848 Most Valuable Professional

#3
nmaenpaa Profile Picture

nmaenpaa 101,156

Leaderboard

Product updates

Dynamics 365 release plans