Relation between Child and Parent Customers!

Recently I had a task (Report) To filter on the customer and get the Data from the customer and the Data of the Parent Customers! The Invoice account in a customer is the Parent Customer.

Here is the code (in the process report)

public void processReport()
{
    SalesLine salesLine;
    LogisticsPostalAddress logisticsPostalAddress;
    CustTable              custTable,custTable1,custTable2 ;
    CustAccount             custAccount ;

    ItemGroupId             itemGroupId ;
    InventLocationId        inventLocationId,warehouse ;
    CustInvoiceAccount      InvoiceAccount ;
    InventTable             inventTable ;
    InventDim               inventDim ;
    SalesStatus             salesStatus ;
    SIGSalesPerson           salesperson ;
    SIGSalesTerritory        salesterritory ;
    CreatedDateTime         fromdate , todate ;
    DirPersonName           dirPersonName ;
    SIGSalesTerritoriesAddressRel   sigSalesTerritoriesAddressRel ;
    SIGSalesTerritories             sigSalesTerritories ;
    DirPartyTable                   dirPartyTable ;
    DirPartyRelationship            dirPartyRelationship ;
    int                             first ;



    SigSalesOrderContractClass       sigSalesOrderContractClass = this.parmDataContract() as SigSalesOrderContractClass ;
    Query                            query = this.parmQuery() ;

    custAccount = sigSalesOrderContractClass.parmCustAccount() ;
    itemGroupId = sigSalesOrderContractClass.parmItemGroupId() ;
    inventLocationId = sigSalesOrderContractClass.parmInventLocationId() ;
    salesStatus = sigSalesOrderContractClass.parmSalesStatus() ;
    salesperson = sigSalesOrderContractClass.parmName() ;
    salesterritory = sigSalesOrderContractClass.parmSalesTerritory() ;
    fromdate = sigSalesOrderContractClass.parmFromDate() ;
    todate = sigSalesOrderContractClass.parmToDate() ;

    while select * from salesLine
        where (!custAccount || salesLine.CustAccount == custAccount )
            && (!salesStatus || salesLine.SalesStatus == salesStatus)
            && (!fromdate ||salesLine.createdDateTime >= fromdate )
            && (!todate || salesLine.createdDateTime <= todate )

    {
        inventTable = InventTable::find(salesLine.ItemId) ;
        inventDim = InventDim::find(salesLine.InventDimId) ;
        custTable = CustTable::find(salesLine.CustAccount) ;

        select * from dirPersonName
            join sigSalesTerritoriesAddressRel
                where dirPersonName.RecId == sigSalesTerritoriesAddressRel.SalesPerson
                    && sigSalesTerritoriesAddressRel.CustAccount == salesLine.CustAccount ;

        select * from sigSalesTerritories
            join sigSalesTerritoriesAddressRel
                where sigSalesTerritories.SalesTerritoryId == sigSalesTerritoriesAddressRel.SalesTerritoryId
                    && sigSalesTerritoriesAddressRel.CustAccount == salesLine.CustAccount ;


        if((!itemGroupId || inventTable.itemGroupId() == itemGroupId) &&
            (!inventLocationId || inventDim.InventLocationId == inventLocationId) &&
            (!salesperson || dirPersonName.FirstName == salesperson ) &&
            (!salesterritory || sigSalesTerritories.Name == salesterritory))
        {
             // Select the Data
            sigSalesOrderReportTmpTbl.CustAccount = salesLine.CustAccount;
            sigSalesOrderReportTmpTbl.DeliveryName = salesLine.DeliveryName;
            sigSalesOrderReportTmpTbl.ItemID = salesLine.ItemID;
            sigSalesOrderReportTmpTbl.Name = Salesline.Name;
            sigSalesOrderReportTmpTbl.SalesQty = salesLine.SalesQty;
            sigSalesOrderReportTmpTbl.SalesPrice = salesLine.SalesPrice;
            sigSalesOrderReportTmpTbl.lineamount = salesLine.lineAmount;
            sigSalesOrderReportTmpTbl.LineDiscount = salesLine.LineDisc ;
            sigSalesOrderReportTmpTbl.Margin = sigSalesOrderReportTmpTbl.lineamount - salesLine.CostPrice;
            sigSalesOrderReportTmpTbl.MarginPercentage = ((salesLine.SalesQty*(salesLine.SalesPrice - salesLine.CostPrice))/minOne(salesLine.LineAmount))*100;

            select * from custTable where custTable.AccountNum == salesLine.CustAccount ;
            logisticsPostalAddress = DirParty::primaryPostalAddress(custTable.Party) ;
            sigSalesOrderReportTmpTbl.Location = logisticsPostalAddress.City;
            sigSalesOrderReportTmpTbl.PostalCode = logisticsPostalAddress.ZipCode;
            sigSalesOrderReportTmpTbl.InvoiceAccount = custTable.InvoiceAccount ;

            sigSalesOrderReportTmpTbl.insert();

        }
        if(custTable.InvoiceAccount)
        {
             // Select the Data
            sigSalesOrderReportTmpTbl.CustAccount = custTable.InvoiceAccount;
            sigSalesOrderReportTmpTbl.DeliveryName = CustTable::find(custTable.InvoiceAccount).name();
            sigSalesOrderReportTmpTbl.ItemID = salesLine.ItemID;
            sigSalesOrderReportTmpTbl.Name = Salesline.Name;
            sigSalesOrderReportTmpTbl.SalesQty = salesLine.SalesQty;
            sigSalesOrderReportTmpTbl.SalesPrice = salesLine.SalesPrice;
            sigSalesOrderReportTmpTbl.lineamount = salesLine.lineAmount;
            sigSalesOrderReportTmpTbl.LineDiscount = salesLine.LineDisc ;
            sigSalesOrderReportTmpTbl.Margin = sigSalesOrderReportTmpTbl.lineamount - salesLine.CostPrice;
            sigSalesOrderReportTmpTbl.MarginPercentage = ((salesLine.SalesQty*(salesLine.SalesPrice - salesLine.CostPrice))/minOne(salesLine.LineAmount))*100;

            select * from custTable where custTable.AccountNum == salesLine.CustAccount ;
            logisticsPostalAddress = DirParty::primaryPostalAddress(custTable.Party) ;
            sigSalesOrderReportTmpTbl.Location = logisticsPostalAddress.City;
            sigSalesOrderReportTmpTbl.PostalCode = logisticsPostalAddress.ZipCode;
            sigSalesOrderReportTmpTbl.InvoiceAccount = custTable.InvoiceAccount ;

            sigSalesOrderReportTmpTbl.insert();
        }
    }
}

Comments

Popular posts from this blog

SysDictField object not initialized. - Views

How to filter data for the last few weeks?

Get the value of Month or YY in SysComputedCOlumns in AX views