Charges creation before sales invoice posting

 /// <summary>

/// 

/// </summary>

[ExtensionOf(classStr(SalesInvoiceJournalCreate))]

final class SalesInvoiceJournalCreate_Extension

{

    public void run()

    {

        SalesParmTable                  salesParmTable;

        SalesParmUpdate                 salesParmUpdate;

        CustParameters                  custParameters = CustParameters::find();


        if (custParameters.AdvanceStampDutyManagement_Custom)

        {

            SalesTotals     salesTotals;

            TmpTaxWorkTrans tmpTaxWorkTrans;

            MarkupTrans     markupTrans;

            SalesTable      salesTableLoc;


            salesParmTable = this.parmParmTable() as SalesParmTable;

            salesParmUpdate = this.parmParmUpdate() as SalesParmUpdate;


            salesTableLoc   = salesParmTable.salesTable();


            ttsbegin;

            delete_from markupTrans

            where markupTrans.TransTableId == salesTableLoc.TableId &&

                markupTrans.TransRecId == salesTableLoc.RecId &&

                markupTrans.CreatedForCharges_custom == NoYes::Yes;

            ttscommit;

            salesTotals = SalesTotals::construct(salesParmTable, salesParmUpdate.SpecQty, salesParmUpdate.SumBy, salesParmUpdate.ParmId, salesParmUpdate.SumSalesId, documentStatus);

            salesTotals.calc();

            tmpTaxWorkTrans = salesTotals.tax().tmpTaxWorkTrans();

            StampChargesForInvoice_Custom::createCharges(salesTableLoc, salesParmTable, tmpTaxWorkTrans);

        }

        next run();  

    }

}


---------------------------------------------------------------------------------------------------------------------------

/// <summary>

/// 

/// </summary>

internal class StampChargesForInvoice_Custom

{

    /// <summary>

    /// 

    /// </summary>

    /// <param name = "_salesTable"></param>

    /// <param name = "_salesParmTable"></param>

    /// <param name = "_tmpTaxWorkTrans"></param>

    public static void createCharges(SalesTable _salesTable, SalesParmTable _salesParmTable, TmpTaxWorkTrans _tmpTaxWorkTrans)

    {

        MarkupTrans             markupTrans;

        MarkupTable             markupTable;

        CustParameters          custParameters = CustParameters::find();

        TaxTable                taxTable;

        TmpTaxWorkTrans         tmpTaxWorkTransLoc = _tmpTaxWorkTrans;

        real                    totalLineAmount = 0;

        boolean                 flag = false;


        select firstonly RecId from taxtable

            exists join _tmpTaxWorkTrans

            where taxtable.IsApplicableStampDuty_Custom == NoYes::No &&

            taxtable.TaxCode == _tmpTaxWorkTrans.TaxCode;


        if (taxTable.RecId)

        {

            return;

        }

        select sum(SourceBaseAmountCur), sum(TaxAmountCur)  from _tmpTaxWorkTrans;

        if (abs(_tmpTaxWorkTrans.SourceBaseAmountCur) < custParameters.InvoicewithCharges_Custom)

        {

            return;

        }


        while select tmpTaxWorkTransLoc

            where tmpTaxWorkTransLoc.TaxAmountCur == 0

            join taxTable

            where taxTable.TaxCode == tmpTaxWorkTransLoc.TaxCode &&

                taxTable.IsApplicableStampDuty_custom == NoYes::Yes

        {

            flag = true;


            totalLineAmount += abs(tmpTaxWorkTransLoc.SourceBaseAmountCur);


            if (totalLineAmount >= custParameters.InvoiceWithStampDutyAmount_custom)

                break;

        }

            

        if ((totalLineAmount < custParameters.InvoiceWithStampDutyAmount_custom) || !flag)

            return;


        select firstonly markupTable

            where markupTable.MarkupCode == custParameters.MarkupCodeStampDuty_Custom;


        markupTrans.clear();

        markupTrans.TransTableId    = _salesTable.TableId;

        markupTrans.TransRecId      = _salesTable.RecId;

        markupTrans.initValue();    

        markupTrans.initFromMarkupTable(markupTable);

        markupTrans.initFromSalesTable(_salesTable);

        markupTrans.ModuleCategory  = HeadingLine::Heading;

        markupTrans.MarkupCategory  = MarkupCategory::Fixed;

        markupTrans.Keep            = NoYes::No;

        markupTrans.CurrencyCode    = _salesTable.CurrencyCode;

        markupTrans.Value           = custParameters.StampAmount_Custom;

        markupTrans.CreatedForStampChargesInvoice_Custom = NoYes::Yes;

        markupTrans.insert();

    }

}

Comments

Popular posts from this blog

On clicked event of form button in D365 X++

Finding unit price of item from trade agreement through code AX X++

Create Sales Line Through Code AX X++ D365 Finance & Operations