Thursday, July 10, 2025

Create and post Free text invoice for customer through code X++

 internal final class TestFreeTextInvoices

{

    /// <summary>

    /// Class entry point. The system will call this method when a designated menu

    /// is selected or when execution starts and this class is set as the startup class.

    /// </summary>

    /// <param name = "_args">The specified arguments.</param>

   

    public static CustInvoiceTable    custInvoiceTable;

    public static CustInvoiceLine custInvoiceLine;

    public static void main(Args _args)

    {

        

        

        TestFreeTextInvoices caption = new TestFreeTextInvoices();

        caption.createCustInvoiceHeader(systemDateGet(),(systemDateGet()+10),'US-001','10');

        if(custInvoiceTable)

        {

            caption.createCustInvoiceLine(custInvoiceTable,'test description','ALL','CA',1,1,'110110');

            if(custInvoiceLine)

            {

                caption.postCustInvoice(custInvoiceTable);

            }

        }

        

        

    }

 

    public CustInvoiceTable createCustInvoiceHeader(TransDate _invoiceDate , DueDate _dueDate, CustAccount _custAccount = '', CustGroupId _custGroup = '')

    {

        CustTable        custTable;

 

        custTable = CustTable::find(_custAccount);

        custInvoiceTable.initFromCustTable(custTable);

        custInvoiceTable.CustGroup                          = _custGroup;

        custInvoiceTable.OrderAccount                       = _custAccount;

        custInvoiceTable.InvoiceAccount                     = _custAccount;

        custInvoiceTable.modifiedField(fieldNum(CustInvoiceTable, OrderAccount));

        custInvoiceTable.InvoiceDate                        = _invoiceDate;

        custInvoiceTable.DueDate                            = _dueDate;

        if(custInvoiceTable.validateWrite())

        {

            custInvoiceTable.insert();

        }

 

        return custInvoiceTable;

    }

    

    public void createCustInvoiceLine(CustInvoiceTable _custInvoiceTable, TransactionTextLarge _description = '', TaxItemGroup _taxItemGroup = '', TaxGroup _taxGroup = '', InvoiceQuantity _qty = 1, InvoiceUnitPrice _unitPrice = 1, str MainAccount ='')

    {

        

        LineNum         lineNum;

        

        custInvoiceLine.initValue();

        custInvoiceLine.initFromCustInvoiceTable(_custInvoiceTable);

        

        custInvoiceLine.Description      = _description;

        custInvoiceLine.TaxItemGroup     = _taxItemGroup;

        custInvoiceLine.TaxGroup         = _taxGroup;

        custInvoiceLine.ParentRecId      = _custInvoiceTable.RecId;

        custInvoiceLine.Quantity         = _qty;

        custInvoiceLine.modifiedField(fieldNum(CustInvoiceLine, Quantity));

        custInvoiceLine.UnitPrice        = _unitPrice;

        custInvoiceLine.modifiedField(fieldNum(CustInvoiceLine, UnitPrice));

        custInvoiceLine.AmountCur        = custInvoiceLine.Quantity * custInvoiceLine.UnitPrice;

        custInvoiceLine.LedgerDimension  = TestFreeTextInvoices::findLedgerDimensionByMainAccount(MainAccount);

        

        if(custInvoiceLine.validateWrite())

        {

            custInvoiceLine.insert();

        }

    }

 

    public static RecId findLedgerDimensionByMainAccount(str MainAccount)

    {

        MainAccount mainAccounttest = MainAccount::findByMainAccountId(MainAccount, true);

        DimensionAttributeValueCombination dimensionAttributeValueCombination;


        select firstOnly dimensionAttributeValueCombination

             where dimensionAttributeValueCombination.MainAccount == mainAccounttest.RecId && dimensionAttributeValueCombination.LedgerDimensionType==LedgerDimensionType::DefaultAccount;

        

        

        return dimensionAttributeValueCombination.RecId;

    }

 

    public void postCustInvoice(CustInvoiceTable _custInvoiceTable)

    {

        CustPostInvoice custPostInvoice;

 

        custPostInvoice = new CustPostInvoice(_custInvoiceTable);

 

        ttsbegin;

        custPostInvoice.run();

        ttscommit;

    }

}

OutPut:-



No comments:

Post a Comment

Custom services in d365fo

 In this blog we see how to develop custom services in d365fo Mainly we need to develop 1) Request class 2) Response class  3) service class...