Wednesday, 26 April 2017

Vendor Invoice Statues Report


DP Class

[
    SRSReportQueryAttribute (queryStr (Vendor Invoice)),
    SRSReportParameterAttribute (classStr (VendorInvoiceContract))
]
class VendorInvoiceDP extends SRSReportDataProviderBase
{
    VendorInvoiceTmp         vendorInvoiceTmp;
    TmpSysQuery                 tmpSysQuery;
    VendorInvoiceContract    contract;
    boolean                     PO;
    boolean                     SO;
    boolean                     MO;
}




[SRSReportDataSetAttribute(tableStr(VendorInvoiceTmp))]
public VendorInvoiceTmp getVendorInvoiceTmp()
{
    select vendorInvoiceTmp;
    return vendorInvoiceTmp;
}




[SRSReportDataSetAttribute(tableStr(TmpSysQuery))]
public TmpSysQuery getTmpSysQuery()
{
    select tmpSysQuery;
    return tmpSysQuery;
}



[SysEntryPointAttribute]
Public void processReport ()
{
    Query                   query;
    QueryRun                queryRun;

    VendInvoiceJour         vendInvoiceJour;
    VendInvoiceTrans        vendInvoiceTrans;
    ProjTable               projTable;
    ProjInvoiceItem         projInvoiceItem;
    ProjInvoiceJour         projInvoiceJour;
    AegOlapClient           olapClient;
    VendTrans               vendTrans;
    PurchLine               purchLine;

    Contract                = this.parmDataContract ();

    PO                      = contract.parmPO();
    SO                      = contract.parmSO();
    MO                      = contract.parmMO();

    Query                   = this.parmQuery();
    QueryRun                = new QueryRun (query);

    tmpSysQuery             = AEISRSDynamicQuery::rangesToTmpSysQuery(this.parmQuery());

    while(queryRun. Next())
    {
        VendInvoiceJour                             =   queryRun.get(tableNum (VendInvoiceJour));
        vendInvoiceTrans                            = queryRun.get(tableNum(VendInvoiceTrans));
        projInvoiceItem                             = queryRun.get(tableNum(ProjInvoiceItem));
        projTable                                   = queryRun.get(tableNum(ProjTable));
        olapClient                                  = queryRun.get(tableNum(AegOlapClient));
        projInvoiceJour                             = queryRun.get(tableNum(ProjInvoiceJour));
        vendTrans                                   = queryRun.get(tableNum(VendTrans));
        purchLine                                   = queryRun.get(tableNum(PurchLine));

        vendorInvoiceTmp.clear();
        vendorInvoiceTmp.VendorId                   = vendInvoiceJour.InvoiceAccount;
        vendorInvoiceTmp.VendorName                 = VendTable::find(vendInvoiceJour.InvoiceAccount).name();
        vendorInvoiceTmp.PurchInvoiceDate           = vendInvoiceJour.InvoiceDate;
        vendorInvoiceTmp.PurchDocumentDate          = vendInvoiceJour.DocumentDate;
        vendorInvoiceTmp.PurchInvoiceId             = vendInvoiceJour.InvoiceId;
        vendorInvoiceTmp.aegMediaTitle              = AEGTHHierarchy::getNameByComponentAndType (projInvoiceItem.aegthHierarchyNodePurchRecId, ProjParameters::find().aegthComponentTypeName);

        //Note:- substring is taken taken from 1 to strLen-1,
        //because some project name string are containing 'GS' (group seperator) special character....
        vendorInvoiceTmp.ProjectName                = char2num(projTable.Name, strLen(projTable.Name)) > 31 ? projTable.Name: subStr(projTable.Name, 1, strLen(projTable.Name)-1);

        //Voucher number PCNV* indicates credit note transactions....
        if(vendInvoiceJour.InvoiceAmount < 0)
        {
            vendorInvoiceTmp.CreditNoteAmount       = vendTrans.AmountMST;
        }
        else
        {
            vendorInvoiceTmp.PurchInvoiceAmountMST  = vendInvoiceTrans.LineAmountMST;
        }

        vendorInvoiceTmp.SalesInvoiceId             = projInvoiceItem.ProjInvoiceId;
        vendorInvoiceTmp.SalesInvoiceAmountMST      = projInvoiceItem.aegTotalAmountMST();
        vendorInvoiceTmp.CustomerId                 = projInvoiceJour.InvoiceAccount;
        vendorInvoiceTmp.SalesInvoiceDate           = projInvoiceItem.InvoiceDate;
        vendorInvoiceTmp.CustomerName               = CustTable::find(projInvoiceJour.InvoiceAccount).name();
        vendorInvoiceTmp.ClientId                   = olapClient.AccountNum;
        vendorInvoiceTmp.ClientName                 = olapClient.ClientName;

        vendorInvoiceTmp.PurchaseOrderId            = purchLine.PurchId;
        vendorInvoiceTmp.SalesOrderId               = purchLine.InventRefId;
        vendorInvoiceTmp.ProjectId                  = projTable.ProjId;
        vendorInvoiceTmp.CampaignId                 = projTable.AEGCampaignProjId;
        vendorInvoiceTmp.AEGMediaOrderId            = PurchTable::find(purchLine.PurchId).AEGMediaOrderId;
        vendorInvoiceTmp.Voucher                    = vendTrans.Voucher;

        if(vendorInvoiceTmp.ClientName)
        {
            vendorInvoiceTmp.insert();
        }
    }








Contract Class




[DataContractAttribute]
class VendorInvoiceContract
{
    boolean PO;
    boolean SO;
    boolean MO;
}

[
    DataMemberAttribute('Media order'),
    SysOperationLabelAttribute(literalStr ("@AEG1193")),
    SysOperationDisplayOrderAttribute('3')
]
public boolean parmMO(boolean _MO = MO)
{
    MO = _MO;
    Return MO;
}

[
    DataMemberAttribute('Purchase order'),
    SysOperationLabelAttribute (literalStr ("@SYS25545")),
    SysOperationDisplayOrderAttribute ('1')
]
Public boolean parmPO(boolean _PO = PO)
{
    PO = _PO;
    return PO;
}


[
    DataMemberAttribute('Sales order'),
    SysOperationLabelAttribute (literalStr ("@SYS80119")),
    SysOperationDisplayOrderAttribute('2')
]
Public boolean parmSO(boolean _SO = SO)
{
    SO  = _SO;
    return SO;
}

PurchaseOrderLines Report



class PurchaseOrderLinesDP extends SRSReportDataProviderBase
{
    AEIPurchaseOrderLinesTmp    purchaseOrderLinesTmp;
    TmpSysQuery                 tmpSysQuery;

}

[SRSReportDataSetAttribute(tableStr(AEIPurchaseOrderLinesTmp))]
public PurchaseOrderLinesTmp getPurchaseOrderLinesTmp()
{
    select purchaseOrderLinesTmp;
    return purchaseOrderLinesTmp;
}





[SysEntryPointAttribute]
public void processReport()
{
    Query                                           query;
    QueryRun                                        queryRun;

    PurchTable                                      purchTable;
    PurchLine                                       purchLine;
    EcoResCategory                                  ecoResCategory;
    VendPackingSlipTrans                            vendPackingSlipTrans;
    VendPackingSlipJour                             vendPackingSlipJour;
    AEGAnalysisCodeView                             analysisView;
    AEGOlapDefaultDimensionFramework                defaultDimensionView;

    query                                           = this.parmQuery();
    queryRun                                        = new QueryRun(query);

    tmpSysQuery                                     = AEISRSDynamicQuery::rangesToTmpSysQuery(this.parmQuery());

    while(queryRun.next())
    {
        purchTable                                  = queryRun.get(tableNum(PurchTable));
        purchLine                                   = queryRun.get(tableNum(PurchLine));
        ecoResCategory                              = queryRun.get(tableNum(EcoResCategory));

        purchaseOrderLinesTmp.clear();

        select firstOnly maxOf(AnalysisCodeKey) from defaultDimensionView
            where   defaultDimensionView.defaultDimension   == purchLine.DefaultDimension;

        if(defaultDimensionView.AnalysisCodeKey != 0)
        {
            select firstOnly CodeNumber from analysisView
                where analysisView.RecId              == defaultDimensionView.AnalysisCodeKey;
        }

        purchaseOrderLinesTmp.PurchaseOrder         = purchTable.PurchId;
        purchaseOrderLinesTmp.SupplierAccount       = purchTable.OrderAccount;
        purchaseOrderLinesTmp.SupplierName          = purchTable.PurchName;
        purchaseOrderLinesTmp.LineNumber            = purchLine.LineNumber;
        purchaseOrderLinesTmp.ProcurementCategory   = ecoResCategory.Name;
        purchaseOrderLinesTmp.Description           = purchLine.Name;
        purchaseOrderLinesTmp.Currency              = purchLine.CurrencyCode;
        purchaseOrderLinesTmp.LineStatus            = purchLine.PurchStatus;
        purchaseOrderLinesTmp.UnitPrice             = purchLine.PurchPrice;
        purchaseOrderLinesTmp.Quantity              = purchLine.PurchQty;
        purchaseOrderLinesTmp.LineAmount            = purchLine.LineAmount;
        purchaseOrderLinesTmp.ProjId                = purchLine.ProjId; purchaseOrderLinesTmp.A_Costcentre  = AEGFunctions::getFinancialDimensionDepartment(purchLine.DefaultDimension).Value;
        purchaseOrderLinesTmp.  AAAA       = AEGFunctions::getFinancialDimensionProfitCentreId(purchLine.DefaultDimension);
        purchaseOrderLinesTmp. BBBB = AEGFunctions::getFinancialDimensionClientId(purchLine.DefaultDimension);
        purchaseOrderLinesTmp.CCCC             = AEGFunctions::getFinancialDimensionProjectId(purchLine.DefaultDimension);
        purchaseOrderLinesTmp.DDDD            = AEGFunctions::getFinancialDimensionServiceSegmentId(purchLine.DefaultDimension);
        purchaseOrderLinesTmp.DDDDD            = AEGFunctions::getFinancialDimensionChannelId(purchLine.DefaultDimension);
        purchaseOrderLinesTmp.EEEEEEEE = AEGFunctions::getFinancialDimensionVendorId(purchLine.DefaultDimension);
        purchaseOrderLinesTmp.FFFFFFF            = analysisView.CodeNumber;
        purchaseOrderLinesTmp.SalesTaxGroup         = purchLine.TaxGroup;
        purchaseOrderLinesTmp.ItemSalesTaxGroup     = purchLine.TaxItemGroup;


        select sum(ValueMST) from vendPackingSlipTrans
            where   purchTable.PurchId      == vendPackingSlipTrans.OrigPurchid
            &&      purchLine.LineNumber    == vendPackingSlipTrans.PurchaseLineLineNumber;

        purchaseOrderLinesTmp.InvoiceRemainder  = vendPackingSlipTrans.ValueMST;

        select firstonly Remain from vendPackingSlipTrans
            where   purchTable.PurchId      == vendPackingSlipTrans.OrigPurchid
            &&      purchLine.LineNumber    == vendPackingSlipTrans.PurchaseLineLineNumber
        join RecId from vendPackingSlipJour
            order by vendPackingSlipJour.DeliveryDate Desc
            where   vendPackingSlipTrans.VendPackingSlipJour == vendPackingSlipJour.RecId;

        purchaseOrderLinesTmp.DeliveryRemainder = vendPackingSlipTrans.Remain;

        purchaseOrderLinesTmp.insert();
    }
}

Saturday, 22 April 2017

SSRS Report Using RDP,Contract,UIBuilder Classes in Ax 2012

SSRS Report Using RDP,Contract,UIBuilder Classes in Ax 2012







UI Builder Class is needed when you want to customize your dialog which pop ups when you open a Report. UI Builder Class helps you to add run time lookups and other controls on the dialog form.




Step 1:

Create a Query in AOT.

Step 2:

Add tables as datasource into the query.

Step 3:

Create a RDP Class.


ClassDeclaration:

[
SRSReportQueryAttribute(queryStr(CustTransReport)),
SRSReportParameterAttribute(classstr(RamaCustTransContract))
]
public class RamaCustTransDP extends SRSReportDataProviderBase
{
CustTrans custTrans;
CustTable custTable;
CustTransTmp custTransTmp;
AccountNum number,custaccount;
}

Create a new method():

getCustTransTmp():

[
SRSReportDataSetAttribute(tablestr(CustTransTmp))
]
public CustTransTmp getCustTransListtmp()
{
select custTransTmp;
return custTransTmp;
}


Call the Override ProcessReport() method:

ProcessReport():

[SysEntryPointAttribute]
public void processReport()
{

QueryBuildDataSource qbds;
QueryBuildRange qbr;


RamaCustTransContract contract = this.parmDataContract() as RamaCustTransContract;
Query q = this.parmQuery();
QueryRun qr = new QueryRun(q);
qbds = qr.query().dataSourceNo(1).addDataSource(tablenum(CustTable));
number = contract.parmCustAccount();

while (qr.next())
{
custTable = qr.get(tablenum(CustTable));
custTrans = qr.get(tablenum(CustTrans));
IF(custTable.AccountNum == number)
{
custTransTmp.AccountNum = custTable.AccountNum;
custTransTmp.CustName = custTable.name();
custTransTmp.Voucher = custTrans.Voucher;
custTransTmp.Invoice = custTrans.Invoice;
custTransTmp.TransType = custTrans.TransType;
custTransTmp.TransDate = custTrans.TransDate;
custTransTmp.AmountCur = custTrans.AmountCur;
custTransTmp.RemainAmountCur = custTrans.remainAmountCur();
custTransTmp.insert();

}

}


Step 4:

Create Contract Class for Passing AccountNumber of the Customer:

ClassDecLaration:

[
DataContractAttribute,SysOperationContractProcessingAttribute(classstr(RamaCustTransUIBuilder))
]


public class RamaCustTransContract
{
CustAccount accountNum;
}


Create new method():


[
DataMemberAttribute('accountNum'),
SysOperationLabelAttribute(literalstr("Customer Id")),
SysOperationHelpTextAttribute(literalstr("Customer Id")),
SysOperationDisplayOrderAttribute("1")

]
public CustAccount parmCustAccount(CustAccount _custAccount = accountNum)
{
accountNum = _custAccount;
info("%1 contract class parmcustaccount",accountNum );
return accountNum;

}


Step 5:

Create UIBuilder Class for making Lookup in dialog.


ClassDeclaration:

class RamaCustTransUIBuilder extends SrsReportDataContractUIBuilder
{
DialogField dialogEmplId;
RamaCustTransContract contract;
}

Override the build() method:

public void build()
{
contract = this.dataContractObject();
dialogEmplId = this.addDialogField(methodStr(RamaCustTransContract, parmCustAccount),contract);
}


Create new method():



private void CustAccountLookup(FormStringControl formstringcontrol)
{
Query query = new Query();
QueryBuildDataSource qbds;
SysTableLookup sysTableLookup;
sysTableLookup = SysTableLookup::newParameters(tableNum(CustTable), formstringcontrol);
sysTableLookup.addLookupfield(fieldNum(CustTable,AccountNum));
qbds = query.addDataSource(tableNum(CustTable));
sysTableLookup.parmQuery(query);
sysTableLookup.performFormLookup();

}

override the getFromDialog() method:


public void getFromDialog()
{
contract = this.dataContractObject();
super();
}

Override the Postbuild() method:


public void postBuild()
{
super();
dialogEmplId = this.bindInfo().getDialogField(this.dataContractObject(),methodStr(RamaCustTransContract,parmCustAccount));
dialogEmplId.registerOverrideMethod(methodStr(FormStringControl, lookup),methodStr(RamaCustTransUIBuilder,CustAccountLookup), this);
dialogEmplId.lookupButton(2);
}