Creditinvoice report

Creditinvoice Report:

ContractClass:

[DataMemberAttribute]
class INC_Creditinvoicecontract
{
    RefRecId            recid;
}

[ DataMemberAttribute("recid")]
public RefRecId parmRecid(RefRecId _recid = recid)
{
    recid = _recid;
    return recid;
}

RDP Class:

[SRSReportParameterAttribute(classStr(INC_Creditinvoicecontract))]
class INC_CreditinvoiceDP extends SrsReportDataProviderPreProcessTempDB
{
    INC_Creditinvoicecontract               contract;

    CustInvoiceJour                         custInvoiceJour;
    CustInvoiceTrans                        custInvoiceTrans;
    CustPackingSlipTrans                    custPackingSlipTrans;

    INC_CreditinvoiceTmp                    inc_CreditinvoiceTmp;
    INC_CreditinvoicelinesTmp               inc_CreditinvoicelinesTmp;

    RefRecId                                recid;
    Str                                     qtyKilo,salesPriceFils,lineAmountFils,totalAmountFils;

}

[SRSReportDataSetAttribute(tableStr(INC_CreditinvoicelinesTmp))]
public INC_CreditinvoicelinesTmp getinc_CreditinvoicelinesTmp()
{
    select inc_CreditinvoicelinesTmp;
    return inc_CreditinvoicelinesTmp;
}

[SRSReportDataSetAttribute(tableStr(INC_CreditinvoiceTmp))]
public INC_CreditinvoiceTmp getinc_CreditinvoiceTmp()
{
    select inc_CreditinvoiceTmp;
    return inc_CreditinvoiceTmp;
}

Public TempStr NumbertoKWDCurrency(real _num, CurrencyCode _currencyCode = "")
{
    //int     numOfPennies = (decround(frac(_num), 2) * 100) mod 100;
    //real    test         = _num - frac(_num);
    int     numOfPennies;
    real    test;
    int     placeHolder;
    int     decimalPlaces;

    int     numOfTenths;
    str 20  ones[19], tenths[9], hundreds, thousands, millions, billions, trillions;

    int64   temp;
    str 200 returntxt;

    real modOperator(real a1, real a2)
    {
    int tmpi;
    real tmp1, tmp2;
    ;
    tmp1 = a1 / a2;
    tmpi = real2int(tmp1);
    tmp2 = tmpi;
    return (tmp1 - tmp2)*a2;
    }

    real checkPower(real  _test, int64 _power)
    {
        int64   numOfPower;

        if (_test >= _power)
        {
            numOfPower = _test div _power;
            if (numOfPower >= 100)
            {
                temp = numOfPower div 100;
                returntxt = returntxt + ' ' + ones[temp] + ' ' + hundreds;
                numOfPower = numOfPower mod 100;
            }
            if (numOfPower >= 20)
            {
                temp = numOfPower div 10;
                returntxt = returntxt + ' ' + tenths[temp];
                numOfPower = numOfPower mod 10;
            }
            if (numOfPower >= 1)
            {
                returntxt = returntxt + ' ' + ones[numOfPower];
                numOfPower = numOfPower mod 10;
            }
            switch(_power)
            {
                case 1000000000000 :
                {
                    returntxt = returntxt + ' ' + trillions;
                    _test = modOperator(_test, 1000000000000.00);
                    break;
                }
                case 1000000000 :
                {
                    returntxt = returntxt + ' ' + billions;
                    _test = modOperator(_test, 1000000000);
                    break;
                }
                case 1000000 :
                {
                    returntxt = returntxt + ' ' + millions;
                    _test = modOperator(_test, 1000000);
                    break;
                }
                case 1000 :
                {
                    returntxt = returntxt + ' ' + thousands;
                    _test = modOperator(_test, 1000);
                    break;
                }
                case 100 :
                {
                    returntxt = returntxt + ' ' + hundreds;
                    _test = modOperator(_test, 100);
                    break;
                }
            }
        }
        return _test;
    }

    #Define.text_1('One')
    #Define.text_2('Two')
    #Define.text_3('Three')
    #Define.text_4('Four')
    #Define.text_5('Five')
    #Define.text_6('Six')
    #Define.text_7('Seven')
    #Define.text_8('Eight')
    #Define.text_9('Nine')
    #Define.text_10('Ten')
    #Define.text_11('Eleven')
    #Define.text_12('Twelve')
    #Define.text_13('Thirteen')
    #Define.text_14('Fourteen')
    #Define.text_15('Fifteen')
    #Define.text_16('Sixteen')
    #Define.text_17('Seventeen')
    #Define.text_18('Eighteen')
    #Define.text_19('Nineteen')
    #Define.text_20('Twenty')
    #Define.text_30('Thirty')
    #Define.text_40('Forty')
    #Define.text_50('Fifty')
    #Define.text_60('Sixty')
    #Define.text_70('Seventy')
    #Define.text_80('Eighty')
    #Define.text_90('Ninety')
    #Define.text_100('Hundred')
    #Define.text_1000('Thousand')
    #Define.text_1000000('Million')
    #Define.text_1000000000('Billion')
    #Define.text_1000000000000('Trillion')
    #Define.text_and('and')

;
    switch(Currency::find(_currencyCode).CurrencyDecimals)
    {
        case 3:
            placeHolder = 1000;
            decimalPlaces  = 3;
            break;

        case 2:
            placeHolder = 100;
            decimalPlaces = 2;
            break;

        default:
            placeHolder = 100;
            decimalPlaces = 2;
            break;
    }

    numOfPennies = (decround(frac(_num), decimalPlaces) * placeHolder) mod placeHolder;
    test         = _num - frac(_num);

    ones[1] =  #text_1;
    ones[2] =  #text_2;
    ones[3] =  #text_3;
    ones[4] =  #text_4;
    ones[5] =  #text_5;
    ones[6] =  #text_6;
    ones[7] =  #text_7;
    ones[8] =  #text_8;
    ones[9] =  #text_9;
    ones[10] =  #text_10;
    ones[11] =  #text_11;
    ones[12] =  #text_12;
    ones[13] =  #text_13;
    ones[14] =  #text_14;
    ones[15] =  #text_15;
    ones[16] =  #text_16;
    ones[17] =  #text_17;
    ones[18] =  #text_18;
    ones[19] =  #text_19;

    tenths[1] = 'Not used';
    tenths[2] =  #text_20;
    tenths[3] =  #text_30;
    tenths[4] =  #text_40;
    tenths[5] =  #text_50;
    tenths[6] =  #text_60;
    tenths[7] =  #text_70;
    tenths[8] =  #text_80;
    tenths[9] =  #text_90;

    hundreds    =  #text_100;
    thousands   =  #text_1000;
    millions    =  #text_1000000;
    billions    =  #text_1000000000;
    trillions   =  #text_1000000000000;


    test = checkPower(test, 1000000000000);
    test = checkPower(test, 1000000000);
    test = checkPower(test, 1000000);
    test = checkPower(test, 1000);
    test = checkPower(test, 100);

    if (test >= 20)
    {
        numOfTenths = test div 10;
        returntxt = returntxt + ' ' + tenths[numofTenths];
        numOfTenths = numOfTenths mod 10;
        test = test mod 10;
    }
    if (test >= 1)
    {
        numOfTenths = real2int(test);
        returntxt = returntxt + ' ' + ones[numOfTenths];
    }

    if (numOfPennies)
    {
        returntxt = returntxt + ' ' +  #text_and + ' ' + Currency::find(_currencyCode).CurrencySubUnit + ' ' + incNumeralsToTxt_EN(numOfPennies);
    }
    return (returntxt);// + " " + "@SYS138135");
}

[SysEntryPointAttribute]
public void processReport()
{
    contract    =   this.parmDataContract();

    recid       =   contract.parmRecid();

    select custInvoiceJour where custInvoiceJour.RecId == recid;

    //Header
    inc_CreditinvoiceTmp.InvoiceAccount     =   custInvoiceJour.InvoiceAccount;
    inc_CreditinvoiceTmp.InvoiceId          =   custInvoiceJour.InvoiceId;
    inc_CreditinvoiceTmp.InvoiceDate        =   custInvoiceJour.InvoiceDate;
    inc_CreditinvoiceTmp.CustName           =   custInvoiceJour.InvoicingName;
     select firstfast custInvoiceTrans where custInvoiceTrans.InvoiceId == custInvoiceJour.InvoiceId;
    {
        //info(strFmt("%1-%2",custInvoiceTrans.InventTransId,CustPackingSlipTrans::findInventTransId_RU(custInvoiceTrans.InventTransId).DeliveryDate));
        inc_CreditinvoiceTmp.FromDate       =   CustPackingSlipTrans::findInventTransId_RU(custInvoiceTrans.InventTransId).DeliveryDate;
    }
    select firstfast custInvoiceTrans order by InventTransId desc where custInvoiceTrans.InvoiceId == custInvoiceJour.InvoiceId;
    {
        select firstfast custPackingSlipTrans order by RecId desc where custPackingSlipTrans.InventTransId == custInvoiceTrans.InventTransId;
        //info(strFmt("%1-%2",custInvoiceTrans.InventTransId,custPackingSlipTrans.DeliveryDate));
        inc_CreditinvoiceTmp.ToDate         =   custPackingSlipTrans.DeliveryDate;
    }
    inc_CreditinvoiceTmp.INC_Totalamount    =   custInvoiceJour.InvoiceAmount;
    inc_CreditinvoiceTmp.INC_TotalamountKWD =   real2int(custInvoiceJour.InvoiceAmount);
    totalAmountFils =   num2str(frac(abs(custInvoiceJour.InvoiceAmount)),1,3,DecimalSeparator::Auto,ThousandSeparator::Apostrophe);
    inc_CreditinvoiceTmp.INC_TotalFils      =   subStr(totalAmountFils,3,3);
    inc_CreditinvoiceTmp.Numberinwords      =   this.NumbertoKWDCurrency(custInvoiceJour.InvoiceAmount,"kwd");
    inc_CreditinvoiceTmp.insert();

    //Lines
    while select custInvoiceTrans
                    where custInvoiceTrans.SalesId      ==  custInvoiceJour.SalesId
                      &&  custInvoiceTrans.InvoiceId    ==  custInvoiceJour.InvoiceId
                      &&  custInvoiceTrans.InvoiceDate  ==  custInvoiceJour.InvoiceDate
    {
        inc_CreditinvoicelinesTmp.ItemId                =   custInvoiceTrans.ItemId;
        inc_CreditinvoicelinesTmp.ItemDescription       =   custInvoiceTrans.itemName();
        inc_CreditinvoicelinesTmp.Qty                   =   custInvoiceTrans.Qty;
        inc_CreditinvoicelinesTmp.INC_QtyTon            =   real2int(custInvoiceTrans.Qty);
        qtyKilo =   num2str(frac(abs(custInvoiceTrans.Qty)),1,3,DecimalSeparator::Auto,ThousandSeparator::Apostrophe);
        inc_CreditinvoicelinesTmp.INC_QtyKilo           =   subStr(qtyKilo,3,3);
        inc_CreditinvoicelinesTmp.SalesPrice            =   custInvoiceTrans.SalesPrice;
        inc_CreditinvoicelinesTmp.INC_SalespriceKWD     =   real2int(custInvoiceTrans.SalesPrice);
        salesPriceFils =   num2str(frac(abs(custInvoiceTrans.SalesPrice)),1,3,DecimalSeparator::Auto,ThousandSeparator::Apostrophe);
        inc_CreditinvoicelinesTmp.INC_SalespriceFils    =   subStr(salesPriceFils,3,3);
        inc_CreditinvoicelinesTmp.LineAmount            =   custInvoiceTrans.LineAmount;
        inc_CreditinvoicelinesTmp.INC_LineamountKWD     =   real2int(custInvoiceTrans.LineAmount);
        lineAmountFils =   num2str(frac(abs(custInvoiceTrans.LineAmount)),1,3,DecimalSeparator::Auto,ThousandSeparator::Apostrophe);
        inc_CreditinvoicelinesTmp.INC_LineamountFils    =   subStr(lineAmountFils,3,3);
        //inc_CreditinvoicelinesTmp.INC_Totalamount       =   custInvoiceJour.InvoiceAmount;
        //inc_CreditinvoicelinesTmp.INC_TotalamountKWD    =   real2int(custInvoiceJour.InvoiceAmount);
        //totalAmountFils =   num2str(frac(abs(custInvoiceJour.InvoiceAmount)),1,3,DecimalSeparator::Auto,ThousandSeparator::Apostrophe);
        //inc_CreditinvoicelinesTmp.INC_TotalFils         =   subStr(totalAmountFils,3,3);
        //inc_CreditinvoicelinesTmp.Numberinwords         =   this.NumbertoKWDCurrency(custInvoiceJour.InvoiceAmount,"kwd");
        inc_CreditinvoicelinesTmp.insert();
    }
}

Controller Class:

class INC_CreditinvoiceController extends SrsReportRunController
{

}

protected void prePromptModifyContract()
{
    CustInvoiceJour                 custInvoiceJour;
    INC_Creditinvoicecontract       contract;

    if (this.parmArgs() && this.parmArgs().record())
    {
      contract              =   this.parmReportContract().parmRdpContract() as INC_Creditinvoicecontract;
      custInvoiceJour       =   this.parmArgs().record();
      contract.parmRecid(custInvoiceJour.RecId);
    }
}

public static void main(Args _args)
{
    INC_CreditinvoiceController        controller = new INC_CreditinvoiceController();
    CustInvoiceJour                    custInvoiceJour;

    custInvoiceJour = _args.record() as CustInvoiceJour;
    controller.parmArgs(_args);
    controller.parmReportName(ssrsReportStr(INC_Creditinvoicereport, INC_CreditinvoiceRP));
    controller.parmShowDialog(false);
    controller.startOperation();
}

Comments

Popular posts from this blog

We will follow the following steps in the AX development.

Need to provide “ItemId lookup” based on "ItemType" field, which selected while creating SalesOrder

How to retrieve multiple selected records from Grid using X++