Friday 13 April 2018

In SSRS Report getting Onhand Inventory ,availablestock ,physcialInventory in AX7

[
SRSReportParameterAttribute(classStr(NECInventoryOnhandReportContract))
]
class NECInventoryOnhandReportDP extends SrsReportDataProviderPreProcessTempDB
{
    NECInventoryOnhandTmp                NECInventoryOnhandTmp, tmpTable;
    InventSum                            inventSum, inventSumLocation, inventSumDim;
    InventDim                            inventDim, inventDimFilter;
    InventItemGroupItem                  inventItemGroupItem;
    InventTable                          inventTable;
    ReqItemTable                         reqItemTable;
    NECInventoryOnhandReportContract     contract;
    ItemId                               itemId;
    ItemGroupId                          itemGroupId;
    EcoResCategoryId                     ecoResCategoryId;
    NoYesId                              onhandStock;
    InventLocationIdReqMain              inventLocationIdReqMain;
    EcoResProductCategory                ecoResProductCategoryItem;
    EcoResCategory                       ecoResCategoryItem;
    str                                  warehouse;
    InventDimId                          inventDimId;
    WHSInventStatus                      whsInventStatus;
    QueryBuildDataSource                 qbdsInventTable;
    //added by Naresh 4/10/2018 -start
    Name                                warehousename;
    InventBatchId                       batchnumber;
    //Description                         transitid;
    Qty                                 transitqty;
    InventLocation                      inventLocation;
    InventSum                           inventsumqty;
    InventDim                           inventDim1;
    InventTransferTable                 inventTransferTable;
    InventTransferLine                  inventTransferLine;
    InventTrans                         inventTrans;

    //added by Naresh 4/10/2018 -end
                           
    QueryBuildRange                     qbr;
    QueryRun                            qr;
    Query                               query = new Query();

    [
    SRSReportDataSetAttribute(tableStr(NECInventoryOnhandTmp))
    ]
    public NECInventoryOnhandTmp getNECInventoryOnhandTmp()
    {
        select NECInventoryOnhandTmp;
        return NECInventoryOnhandTmp;
    }

    public void processReport()
    {
        contract = this.parmDataContract() as NECInventoryOnhandReportContract;
       
        itemId                  = contract.parmItemId();
        itemGroupId             = contract.parmItemGroupId();
        ecoResCategoryId        = contract.parmEcoResCategoryId();
        onhandStock             = contract.parmonhandStock();
        inventLocationIdReqMain = contract.parmInventLocationIdReqMain();

        qbdsInventTable = query.addDataSource(Tablenum(InventTable));
        if(itemId != null)
        {
            qbdsInventTable.addRange(fieldnum(InventTable, ItemId)).value(itemId);
        }
        qr = new QueryRun(query);
        this.runStatement();
    }

    private void runStatement()
    {
        //NS by NK on 29032018
        while (qr.next())
        {
            inventTable = qr.get(tablenum(InventTable));
         
            if(inventItemGroupItem)
            {
                select firstonly inventItemGroupItem
                    where inventItemGroupItem.ItemId == inventTable.ItemId
                    && inventItemGroupItem.ItemGroupId == itemGroupId;
            }
            if(ecoResCategoryId)
            {
                select firstonly ecoResProductCategoryItem
                    where ecoResProductCategoryItem.Product == inventTable.Product
                    && ecoResProductCategoryItem.Category == ecoResCategoryId;
            }
         
            while select AvailPhysical,PhysicalInvent,PostedValue from inventsum
                where inventsum.Closed   == NoYes::No
                && inventsum.ClosedQty   == NoYes::No
                && inventsum.ItemId == inventTable.itemId
                join inventDimFilter
                  // group by  #InventDimGroupAllFields
                where inventSum.InventDimId == inventDimFilter.InventDimId
                &&    inventDimFilter.InventLocationId
               
            {
                select firstonly whsInventStatus
                where whsInventStatus.InventStatusId == inventDimFilter.InventStatusId;

                if(((inventSum.AvailPhysical >=0  && onhandStock == true )|| (inventSum.AvailPhysical <= 0 && onhandStock == false)) &&
                    ((inventLocationIdReqMain != null && inventLocationIdReqMain == inventDimFilter.InventLocationId) || !inventLocationIdReqMain ) &&
                    ((itemGroupId != null && inventItemGroupItem) || !itemGroupId) &&
                    ((ecoResCategoryId != 0 && ecoResProductCategoryItem) || !ecoResCategoryId)
                   && ((whsInventStatus && whsInventStatus.InventStatusBlocking == False) || !whsInventStatus))
                {
                    ttsbegin;
                    select firstonly forupdate  NECInventoryOnhandTmp
                    where NECInventoryOnhandTmp.ItemId == inventTable.ItemId
                    && NECInventoryOnhandTmp.InventLocationIdReqMain == inventDimFilter.InventLocationId;
                    if(NECInventoryOnhandTmp)
                    {
                        NECInventoryOnhandTmp.InventQtyPhysicalOnhand += inventSum.AvailPhysical;
                        //added by naresh 4/12/2018 - start
                        NECInventoryOnhandTmp.AvailablePhysical   += inventSum.AvailPhysical;
                        NECInventoryOnhandTmp.PhysicalInventory   += inventSum.PhysicalInvent;
                        NECInventoryOnhandTmp.financialCostAmount += inventSum.PostedValue;
                        //added by naresh 4/12/2018 - end
                        NECInventoryOnhandTmp.update();
                       
                    }
                    else
                    {
                        inventDimId = inventDimFilter.inventDimId;
                        warehouse = inventDimFilter.InventLocationId;
                        //added by Naresh  4/12/2018 -start
                        batchnumber = inventdimfilter.inventbatchid;
                        transitqty = 0.0;
                        select inventlocation
                            where inventlocation.inventlocationid == warehouse;
                        if(inventlocation.inventlocationid)
                        {
                            warehousename = inventLocation.Name;
                           while select inventTransferTable
                                where inventTransferTable.InventLocationIdTransit == inventlocation.InventLocationIdTransit
                                    && inventTransferTable.InventLocationIdFrom   == inventlocation.InventLocationId
                                && inventTransferTable.TransferStatus == InventTransferStatus::Created
                                  join inventTransferLine
                                        where inventTransferLine.TransferId == inventTransferTable.TransferId
                                           && inventTransferLine.ItemId     == inventTable.ItemId
                            if(inventTransferLine.TransferId)
                            {
                                transitqty    += inventTransferLine.QtyShipped;
                            }
                        }
                        //added by Naresh  4/12/2018 -end
                        this.insertTmp();
                    }
                    ttscommit;
                }
            }
        }
        //NE by NK on 29032018
    }

    public void insertTmp()
    {
        ReqItemTable                reqItemTableCurrent;
        InventDim                   inventDimInventLocation;
        NECInventoryOnhandTmp.clear();

        NECInventoryOnhandTmp.ItemId    = inventTable.ItemId;
        NECInventoryOnhandTmp.ItemName  = inventTable.itemName();
        NECInventoryOnhandTmp.InventLocationIdReqMain = warehouse;
        //added by naresh 4/11/2018 - start
        NECInventoryOnhandTmp.inventBatchId = batchnumber;
        NECInventoryOnhandTmp.Name  = warehousename;
        NECInventoryOnhandTmp.TransitTransfer = transitqty;
        NECInventoryOnhandTmp.AvailablePhysical       = inventSum.AvailPhysical;
        NECInventoryOnhandTmp.PhysicalInventory       = inventSum.PhysicalInvent;
        NECInventoryOnhandTmp.financialCostAmount     = inventSum.PostedValue;
        //added by naresh 4/11/2018 - start
        NECInventoryOnhandTmp.InventQtyPhysicalOnhand = inventSum.AvailPhysical; // inventSum.physicalInvent;
        select firstonly reqItemTableCurrent
            where reqItemTableCurrent.ItemId == NECInventoryOnhandTmp.ItemId
            join inventDimInventLocation
            where inventDimInventLocation.InventdimId == reqItemTableCurrent.CovInventDimId
            && inventDimInventLocation.InventLocationId == warehouse;
        if(reqItemTableCurrent)
        {
            NECInventoryOnhandTmp.ReqGroupId = reqItemTableCurrent.ReqGroupId;
            NECInventoryOnhandTmp.InventQtyMinOnhand = reqItemTableCurrent.MinInventOnhand;
            NECInventoryOnhandTmp.InventQtyMaxOnhand = reqItemTableCurrent.MaxInventOnhand;
        }
        this.insertProductCategories(inventTable.ItemId);
        NECInventoryOnhandTmp.SIP = this.getSIP(inventTable.ItemId);
        NECInventoryOnhandTmp.insert();
    }

    private void insertProductCategories(ItemId _itemId)
    {
        EcoResProductCategory EcoResProductCategory;
        EcoResCategory EcoResCategory,EcoResCategoryNext;
        EcoResCategoryId parentCategory;
        int i = 0;
        List li = new List(Types::String);
        ListEnumerator enumer;
       
        NECInventoryOnhandTmp.EcoResCategoryName1 = "";
        NECInventoryOnhandTmp.EcoResCategoryName2 = "";
        NECInventoryOnhandTmp.EcoResCategoryName3 = "";
        NECInventoryOnhandTmp.EcoResCategoryName4 = "";
        NECInventoryOnhandTmp.EcoResCategoryName5 = "";
       
        select * from EcoResCategory
            join RecId from EcoResProductCategory
            where EcoResCategory.RecId == EcoResProductCategory.Category
            && EcoResProductCategory.Product == InventTable::find(_itemId).Product;
       
        parentCategory = EcoResCategory.ParentCategory;

        li.addStart(EcoResCategory.Name);

        while (parentCategory)
        {
            select * from EcoResCategory
                where EcoResCategory.RecId == parentCategory;

            parentCategory = EcoResCategory.ParentCategory;
            li.addStart(EcoResCategory.Name);
        }
        enumer = li.getEnumerator();

        while (enumer.moveNext())
        {
            i++; 
            if(i==1)
            {
                NECInventoryOnhandTmp.EcoResCategoryName5 = enumer.current();
            }
            else if(i==2)
            {
                NECInventoryOnhandTmp.EcoResCategoryName4 = enumer.current();
            }
            else if(i==3)
            {
                NECInventoryOnhandTmp.EcoResCategoryName3 = enumer.current();
            }
            else if(i==4)
            {
                NECInventoryOnhandTmp.EcoResCategoryName2 = enumer.current();
            }
            else if(i==5)
            {
                NECInventoryOnhandTmp.EcoResCategoryName1 = enumer.current();
            }
        }
    }

    public str getSIP(ItemId   _itemId)
    {
        Str              sales, Invent, purch;
        str              SIP;

        sales       = InventItemSalesSetup::findDefault(_itemId).Stopped == true ? "Y" : "N";
        invent      = InventItemInventSetup::findDefault(_itemId).Stopped == true ? "Y" : "N";
        purch       = InventItemPurchSetup::findDefault(_itemId).Stopped == true ? "Y" : "N";

        SIP = strfmt("%1%2%3", sales, invent, purch);
     
        if(SIP ==  "NNN")
        {
            SIP = "ACT";
        }
        else if(SIP ==  "YYY")
        {
            SIP = "INA";
        }
        return SIP;
    }

    public static NECInventoryOnhandReportDP construct()
    {
        return new NECInventoryOnhandReportDP();
    }

}

No comments:

Post a Comment