Showing posts with label Custom service. Show all posts
Showing posts with label Custom service. Show all posts

Monday, November 17, 2025

Production Order Creation And Posting Service

 //N Added by Venkatesh for  W_ProductionOrderCreationandPostingAPI 

public  class  W_ProductionOrderCreationAndPostingService 

     

    public  W_ProductionOrderCreationAndPostingResponseContract  processReport( W_ProductionOrderCreationAndPostingHeaderRequestContract ProductionBookingContract) 

         

    { 

         W_ProductionOrderCreationAndPostingResponseContract     contract; 

         W_ProductionOrderCreationAndPostingLinesRequestContract linecontract; 

        ProdStatusType  ProdStatusType; 

        str 1000 pckinglisterror ; 

         

        ProjId         existProjid, newProdID; 

        ProdJournalBOM JournalBOM; 

        UnitQty      UnitQty; 

        JournalId journalid; 

  

        List   Pickinglist = ProductionBookingContract.parmProdLines();; 

        ListEnumerator PickingListEnumerator = Pickinglist.getEnumerator(); 

        ListEnumerator PickingListEnumeratorItems = Pickinglist.getEnumerator(); 

         W_ProductionOrderCreationAndPostingResponseContract response = new  W_ProductionOrderCreationAndPostingResponseContract(); 

        try 

        {   //ttsbegin; 

            changecompany(ProductionBookingContract.parmDataAreaId()) 

            { 

                if(this.checkOnholdQty(ProductionBookingContract.parmLocation(),ProductionBookingContract.parmsite(),ProductionBookingContract.parmItemID(),ProductionBookingContract.parmWarehourse(),ProductionBookingContract.parmStartQty())) 

                { 

                    throw Error(strFmt("%1 Item not avaliable with quantity %2",ProductionBookingContract.parmItemID(),ProductionBookingContract.parmStartQty())); 

                } 

  

                ExistProjid = this.existProjid(ProductionBookingContract.parmsite(),ProductionBookingContract.parmItemID(),ProductionBookingContract.parmpool(),ProductionBookingContract.parmStartQty(),ProductionBookingContract.parmWarehourse(),ProductionBookingContract.parmLocation(),ProductionBookingContract.parmDateLoc(),ProductionBookingContract.parmIspackingOrder()); 

                response.parmPONumber(ExistProjid); 

                if(ExistProjid) 

                {    

                    while(pickinglistenumeratoritems.movenext()) 

                    { 

                        linecontract = pickinglistenumeratoritems.current(); 

                        if(this.checkonholdqty(linecontract.parmlocation(),productionbookingcontract.parmsite(),linecontract.parmitemid(),linecontract.parmwarehourse(),linecontract.parmquantity())) 

                        { 

                            throw error(strfmt("%1 item not avaliable with quantity %2",linecontract.parmitemid(),linecontract.parmquantity())); 

                        } 

                    } 

  

                    ProdJournalTable ProdJournalTable; 

                    response.parmPONumber(ExistProjid); 

                    ExistProjid = this.ProdStartUP(ExistProjid,ProductionBookingContract.parmStartQty(),ProductionBookingContract.parmDateLoc()); 

                    ttsbegin; 

                    select  ProdJournalTable  

                        order by ProdJournalTable.CreatedDateTime desc  

                        where ProdJournalTable.ProdId == ExistProjid 

                        && ProdJournalTable.JournalType == ProdJournalType::Picklist; 

                    if(ProdJournalTable.RecId) 

                    { 

                        ProdJournalTable.selectForUpdate(true); 

                        ProdJournalTable. WStartUpQty =ProductionBookingContract.parmStartQty(); 

                        ProdJournalTable.update(); 

                    } 

                    ttscommit; 

                    if(ProdJournalTable.RecId) 

                    { 

                        while(PickingListEnumerator.moveNext()) 

                        {    

                            linecontract = PickingListEnumerator.current(); 

                            ttsbegin; 

                            select JournalBOM where JournalBOM.JournalId == ProdJournalTable.journalid 

                                && JournalBOM.ItemId ==linecontract.parmItemID(); 

                            if(JournalBOM.ItemId != linecontract.parmItemID()) 

                            { 

                                throw Error (strFmt('Given item is in correct %1',linecontract.parmItemID())); 

                            } 

                            if(JournalBOM.RecId) 

                            {    

                                JournalBOM.selectForUpdate(true); 

                                JournalBOM.InventDimId = this.createInventDim(linecontract.parmLocation(),ProductionBookingContract.parmsite(),linecontract.parmItemID(),linecontract.parmWarehourse()); 

                                JournalBOM. WWeighingQty = linecontract.parmQuantity(); 

                                prodJournalBOM::pickingListJournalLineValues(JournalBOM); 

                                JournalBOM. WFeedMoisture = linecontract.parmFeedMositure(); 

                                prodJournalBOM::pickingListJournalLineValues(JournalBOM); 

                                UnitQty =this.prodJournalBOMWriteen(JournalBOM); 

  

                                if( UnitQty) 

                                {    

                                    JournalBOM. WWeighedAvgFeedMoisture  = UnitQty; 

                                } 

                                ProdBOM                 prodbom; 

                                BOM                     bom; 

                                select bom 

                                    exists join prodbom 

                                    where prodbom.BOMRefRecId == bom.RecId 

                                    && prodbom.InventTransId     ==  JournalBOM.InventTransId 

                                    && prodbom.ItemId           ==  JournalBOM.ItemId; 

  

                                JournalBOM. WDryQty        =   round(JournalBOM. WWeighingQty*(1-(JournalBOM. WFeedMoisture/100)),0.001); 

         

                                JournalBOM. WEndReading    =   round(JournalBOM. WDryQty/(1-(JournalBOM. WWeighedAvgFeedMoisture/100)),0.001); 

           

                                if(bom.ScrapVar != 0) 

                                { 

                                    JournalBOM.BOMConsump       = round(JournalBOM. WEndReading/(1-(bom.ScrapVar/100)), 0.001); 

                                } 

                                else 

                                { 

                                    JournalBOM.BOMConsump       = round(JournalBOM. WEndReading,0.001); 

                                } 

  

                                if (bom. WInFactor) 

                                { 

                                    JournalBOM. WDryQty         = JournalBOM. WWeighingQty; 

                                    JournalBOM. WEndReading     = JournalBOM. WWeighingQty; 

                                    JournalBOM.BOMConsump        = JournalBOM. WWeighingQty; 

                                } 

                                JournalBOM.InventConsump =  linecontract.parmQuantity(); 

                                //JournalBOM.BOMConsump    =  linecontract.parmQuantity(); 

                                JournalBOM.TransDate     = ProductionBookingContract.parmDateLoc(); 

                                JournalBOM.update(); 

                            } 

                            ttscommit; 

                        } 

                        response.parmPlNumberr(ProdJournalTable.JournalId); 

                        pckinglisterror =" "; 

                        pckinglisterror = this.checkPostProdJournalTablePickingList(ProdJournalTable.JournalId,response); 

                        //this.checkPostProdJournalTablePickingList(ProdJournalTable.JournalId); 

                        if(pckinglisterror == " ") 

                        { 

  

                            if(!ProdTable::find(ExistProjid). WPackingOrder) 

                            { 

                                this.prodReportFinished(ExistProjid,ProductionBookingContract.parmStartQty(),ProductionBookingContract.parmBOMNumber(),ProdJournalTable.JournalId); 

                                select JournalId,JournalType from ProdJournalTable 

                                    order by ProdJournalTable.RecId desc 

                                    where ProdJournalTable.ProdId == ExistProjid 

                                    && ProdJournalTable.JournalType == ProdJournalType::ReportFinished; 

  

                                if(ProdJournalTable.JournalType == ProdJournalType::ReportFinished && ProdJournalTable.RecId) 

                                { 

                                    response.parmRAFnumber(ProdJournalTable.JournalId); 

                                } 

                            } 

                            response.parmErrorMessage('Success'); 

                        } 

                        else 

                        { 

                            response.parmErrorMessage(pckinglisterror); 

                        } 

                    } 

                     

  

                } 

                else 

                { 

                    NewProdID = this.CreateProductionOrder( ProductionBookingContract.parmProdQty(), ProductionBookingContract.parmItemID(), ProductionBookingContract.parmLocation(), ProductionBookingContract.parmsite(), 

                                        ProductionBookingContract.parmBOMNumber(), ProductionBookingContract.parmRouteNumber(), ProductionBookingContract.parmpool(), ProductionBookingContract.parmWarehourse(), 

                                        ProductionBookingContract.parmCostcenter(), ProductionBookingContract.parmCostCenterGroup(), ProductionBookingContract.parmDepartment(), ProductionBookingContract.parmIspackingOrder(), 

                                         ProductionBookingContract.parmDateLoc()); 

                    

                    response.parmPONumber(NewProdID); 

                    while(PickingListEnumeratorItems.moveNext()) 

                    { 

                        linecontract = PickingListEnumeratorItems.current(); 

                        if(this.checkOnholdQty(linecontract.parmLocation(),ProductionBookingContract.parmsite(),linecontract.parmItemID(),linecontract.parmWarehourse(),linecontract.parmQuantity())) 

                        { 

                            throw Error(strFmt("%1 Item not avaliable with quantity %2",linecontract.parmItemID(),linecontract.parmQuantity())); 

                        } 

                    } 

                     

  

                    ProdJournalTable ProdJournalTable; 

                    NewProdID = this.ProdStartUP(NewProdID, ProductionBookingContract.parmStartQty(),ProductionBookingContract.parmDateLoc()); 

                    ttsbegin; 

                    select ProdJournalTable 

                        order by ProdJournalTable.CreatedDateTime desc 

                        where ProdJournalTable.ProdId == NewProdID 

                        && ProdJournalTable.JournalType == ProdJournalType::Picklist; 

                    if(ProdJournalTable.RecId) 

                    { 

                        ProdJournalTable.selectForUpdate(true); 

                        ProdJournalTable. WStartUpQty =ProductionBookingContract.parmStartQty(); 

                        ProdJournalTable.update(); 

                    } 

                    ttscommit; 

                    if(ProdJournalTable.RecId) 

                    { 

                   

                        while(PickingListEnumerator.moveNext()) 

                        {    

                            ttsbegin; 

                            linecontract = PickingListEnumerator.current(); 

                            select  JournalBOM where JournalBOM.JournalId == ProdJournalTable.JournalId 

                                && JournalBOM.ItemId ==linecontract.parmItemID(); 

                            if(JournalBOM.ItemId != linecontract.parmItemID()) 

                            { 

                                throw Error (strFmt('Given item is in correct %1',linecontract.parmItemID())); 

                            } 

                            if(JournalBOM.RecId) 

                            {    

                                JournalBOM.selectForUpdate(true); 

                                JournalBOM.InventDimId = this.createInventDim(linecontract.parmLocation(),ProductionBookingContract.parmsite(),linecontract.parmItemID(),linecontract.parmWarehourse()); 

                                JournalBOM. WWeighingQty = linecontract.parmQuantity(); 

                                prodJournalBOM::pickingListJournalLineValues(JournalBOM); 

                                prodJournalBOM::pickingListJournalLineValues(JournalBOM); 

                                UnitQty =this.prodJournalBOMWriteen(JournalBOM); 

  

                                if( UnitQty) 

                                { 

                                    JournalBOM. WWeighedAvgFeedMoisture  = UnitQty; 

                                } 

                                ProdBOM                 prodbom; 

                                BOM                     bom; 

  

                                select bom 

                                    exists join prodbom 

                                    where prodbom.BOMRefRecId == bom.RecId 

                                    && prodbom.InventTransId     ==  JournalBOM.InventTransId 

                                    && prodbom.ItemId           ==  JournalBOM.ItemId; 

  

                                JournalBOM. WDryQty        =   round(JournalBOM. WWeighingQty*(1-(JournalBOM. WFeedMoisture/100)),0.001); 

         

                                JournalBOM. WEndReading    =   round(JournalBOM. WDryQty/(1-(JournalBOM. WWeighedAvgFeedMoisture/100)),0.001); 

           

                                if(bom.ScrapVar != 0) 

                                { 

                                    JournalBOM.BOMConsump       = round(JournalBOM. WEndReading/(1-(bom.ScrapVar/100)), 0.001); 

                                } 

                                else 

                                { 

                                    JournalBOM.BOMConsump       = round(JournalBOM. WEndReading,0.001); 

                                } 

  

                                if (bom. WInFactor) 

                                { 

                                    JournalBOM. WDryQty         = JournalBOM. WWeighingQty; 

                                    JournalBOM. WEndReading     = JournalBOM. WWeighingQty; 

                                    JournalBOM.BOMConsump        = JournalBOM. WWeighingQty; 

                                } 

                                JournalBOM.InventConsump =  linecontract.parmQuantity(); 

                               // JournalBOM.BOMConsump    =  JournalBOM. WEndReading; 

                                JournalBOM.TransDate     = ProductionBookingContract.parmDateLoc(); 

                                JournalBOM.update(); 

                            } 

                            ttscommit; 

                        } 

                        response.parmPlNumberr(ProdJournalTable.JournalId); 

                        pckinglisterror = " "; 

                        pckinglisterror  = this.checkPostProdJournalTablePickingList(ProdJournalTable.JournalId,response); 

                        //this.checkPostProdJournalTablePickingList(ProdJournalTable.JournalId); 

                        if(pckinglisterror ==" ") 

                        { 

                            if(!ProdTable::find(newProdID). WPackingOrder) 

                            { 

                                this.prodReportFinished(newProdID,ProductionBookingContract.parmStartQty(),ProductionBookingContract.parmBOMNumber(),ProdJournalTable.JournalId); 

                                select JournalId, JournalType from ProdJournalTable 

                                    where ProdJournalTable.ProdId == newProdID 

                                     && ProdJournalTable.JournalType == ProdJournalType::ReportFinished; 

  

                                if(ProdJournalTable.JournalType == ProdJournalType::ReportFinished && ProdJournalTable.RecId) 

                                { 

                                    response.parmRAFnumber(ProdJournalTable.JournalId); 

                                } 

                            } 

                            response.parmErrorMessage('Success'); 

                        } 

                        else 

                        { 

                            response.parmErrorMessage(pckinglisterror); 

                        } 

  

  

                    } 

                     

  

                } 

            } 

            //ttscommit; 

        } 

        catch(Exception::Error) 

        { 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

        catch(Exception::Deadlock) 

        { 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

        catch(Exception::UpdateConflict) 

        { 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

        catch(Exception::DuplicateKeyException) 

        { 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

        catch(Exception::CLRError) 

        { 

            System.Exception  ex = CLRInterop::getLastException(); 

            response.parmErrorMessage(ex.Message); 

        } 

        catch(Exception::ViewDataSourceValidation) 

        { 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

  

        return response; 

    } 

  

    public boolean checkOnholdQty(str _LocationId,str _Site,str _Item,str _Warehouse, InventQty _qty) 

    { 

        InventDim  inventDim; 

        InventDimParm inventDimParm; 

        InventOnhand  inventOnhand; 

        InventQty   qty; 

        InventSum inventsum; 

        boolean ret; 

  

        select ItemId, InventDimId from inventSum  

        where inventSum.InventSiteId == _Site 

                && inventSum.inventLocationId == _Warehouse 

                && inventSum.wMSLocationId == _LocationId 

                && inventSum.ItemId == _Item 

                && inventSum.configId == 'NA'; 

  

        inventDim = InventDim::find(inventSum.inventDim().inventDimId); 

        inventDimParm.initFromInventDim(inventDim); 

        inventOnhand = InventOnhand::newParameters(_Item, inventDim, inventDimParm); 

        qty = inventOnhand.availPhysical(); 

          

        if(qty<_qty) 

        { 

            ret =true; 

        } 

        return ret; 

    } 

  

    public ProjId existProjid(str _site,str _itemId,str _PoolId,real _qty,str _Warehouse ,str _LocationId,Transdate _date, NoYes _isPackingOrder) 

    { 

        ProdTable  prodTable; 

        InventDim  inventDim,inventDimloc; 

        ProdId     ProdId; 

        InventDimId InventDimId; 

        int month,year, sysmonth,sysyear; 

        NoYes    isPackingOrder =_isPackingOrder; 

        sysmonth =DateTimeUtil::month(_date); 

        sysyear = DateTimeUtil::year(_date); 

        select  firstonly inventDim 

            where inventDim.InventLocationId == _Warehouse 

            && inventDim.InventSiteId ==_Site 

            && inventDim.wMSLocationId ==_LocationId; 

         

        InventDimId = inventDim.inventDimId; 

  

         while  select    prodTable 

             order by prodTable.createdDateTime desc 

             //,prodTable.ProdId asc 

             where prodTable.InventDimId == InventDimId 

                    && prodTable.ItemId ==_itemId 

                    && prodTable.ProdPoolId == _PoolId 

                    && (prodTable.ProdStatus ==ProdStatus::Created || prodTable.ProdStatus ==ProdStatus::StartedUp) 

                    &&(prodTable.QtySched -prodTable.QtyStUp) >= _qty 

                    &&  prodTable. WPackingOrder == isPackingOrder 

        { 

            month = DateTimeUtil::month(prodTable.DlvDate); 

            year =DateTimeUtil::year(prodTable.DlvDate); 

            if(month == sysmonth && year== sysyear)// && prodTable. WPackingOrder ==isPackingOrder && avlQty >= _qty) 

            { 

                ProdId = prodTable.ProdId; 

                break; 

            } 

        } 

         

        return  ProdId; 

    } 

  

    public ProdId CreateProductionOrder(real _ProdQty,ItemId _item,str _locationId,str _site,str _BOM,str _RouteId,str _poolId,str _Warehouse, str _costCenter, str _CostCenterGroup, str _Department, NoYes _IspackingOrder, transdate _TransDate) 

    { 

        ProdId    prodId; 

        ProdTable prodTableLoc; 

        InventDim inventDim; 

  

        ProdQtySched  productionQty =_ProdQty; 

        ItemId        productionItem = _item; 

        select  firstonly inventDim  

            where inventDim.wMSLocationId == _locationId  

            && inventDim.InventSiteId ==_site 

            && inventDim.InventLocationId ==_Warehouse; 

        InventDimParm inventDimParm; 

  

        InventTable inventTable; 

        inventDim.initValue(); 

        inventTable = InventTable::find(productionItem); 

        //Initialise the base values 

        ttsbegin; 

        prodTableLoc.clear(); 

        prodTableLoc.initValue(); 

        prodTableLoc.ItemId = inventTable.ItemId; 

        prodTableLoc.initFromInventTable(inventTable); 

        prodTableLoc.DlvDate =DateStartMth(_TransDate); 

        prodTableLoc.QtySched = productionQty; 

        prodTableLoc.RemainInventPhysical = prodTableLoc.QtySched; 

        //Set the active bom and route 

        if(_BOM) 

        { 

        prodTableLoc.BOMId =_BOM ; 

        } 

        /*else 

        { 

            prodTableLoc.BOMId = BOMVersion::findActive(prodTableLoc.ItemId, 

            prodTableLoc.BOMDate, 

            prodTableLoc.QtySched, 

            inventDim).BOMId; 

            prodTableLoc.initBOMVersion(); 

            prodTableLoc.SkipCreateBOMLines = true; 

        }*/ 

        if(_RouteId) 

        { 

        prodTableLoc.RouteId = _RouteId; 

        } 

       /* else 

        { 

            prodTableLoc.RouteId = RouteVersion::findActive(prodTableLoc.ItemId, 

            prodTableLoc.BOMDate, 

            prodTableLoc.QtySched, 

            inventDim).RouteId; 

            prodTableLoc.initRouteVersion(); 

            prodTableLoc.SkipCreateRouteOperations =  true; 

        }*/ 

        prodTableLoc.ProdPoolId =_poolId; 

        prodTableLoc. WPackingOrder=_IspackingOrder; 

        prodTableLoc.DefaultDimension = this.createDefaultDimension(_site,_CostCenterGroup,_costCenter,_Department); 

        prodTableLoc.InventDimId = inventDim.inventDimId; 

        prodTableLoc.insert(); 

        ttscommit; 

  

        ProdId = prodTableLoc.ProdId; 

  

        return ProdId; 

    } 

  

    public DimensionDefault createDefaultDimension(str _BusinessUnit, str _CostCenterGroup, str _costCenter,str _Department) 

    { 

        DimensionAttributeValueSetStorage   valueSetStorage = new DimensionAttributeValueSetStorage(); 

        DimensionDefault                    result; 

        int                     i; 

        DimensionAttribute      dimensionAttribute; 

        DimensionAttributeValue dimensionAttributeValue; 

     

        container               conAttr = ["BusinessUnit", "CostCenterGroup", "costCenter","Department"]; 

     

        container               conValue = [_BusinessUnit, _CostCenterGroup, _costCenter,_Department]; 

     

        str                     dimValue; 

     

        for (i = 1; i <= conLen(conAttr); i++) 

        { 

            dimensionAttribute = dimensionAttribute::findByName(conPeek(conAttr,i)); 

            if (dimensionAttribute.RecId == 0) 

            { 

                continue; 

            } 

            dimValue = conPeek(conValue,i); 

            if (dimValue != "") 

            { 

                dimensionAttributeValue = dimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,dimValue,false,true); 

                valueSetStorage.addItem(dimensionAttributeValue); 

            } 

        } 

     

        result = valueSetStorage.save(); 

        //It reutrns the value of type DimensionDefault 

        return result; 

    } 

  

    public str ProdStartUP(ProdId _prodId, Qty _qty,transdate _postDate) 

    { 

        ProdParmStartUp ProdParmStartUp; 

        prodTable       prodTable; 

  

        str  prodId    =_prodId ; 

        ProdMultiStartUp prodMultiStartUp = new prodMultiStartUp(); 

        ProdStatusType ProdStatusType; 

        ProdPurch prodPurch = ProdPurch::newProd(); 

  

        ttsbegin; 

        prodTable = ProdTable::find(prodId); 

        prodMultiStartUp = ProdMultiStartUp::construct(new Args()); 

        RunBaseMultiParm::initParm(prodMultiStartUp); 

        prodMultiStartUp.insert(prodTable, prodMultiStartUp.defaultParmBuffer()); 

         

        select  forupdate ProdParmStartUp where ProdParmStartUp.ProdId == prodId; 

        if(ProdParmStartUp.RecId) 

        { 

            prodParmStartUp.StartUpQty          = _qty; 

            prodParmStartUp.PostDate            = _postDate; 

            prodParmStartUp.PostNowBOM          = NoYes::No; 

            prodParmStartUp.PostNowRoute        = NoYes::No; 

            prodParmStartUp.StartUpProduction   = NoYes::Yes; 

            prodParmStartUp.JournalShowInfo     = NoYes::Yes; 

            prodParmStartUp.EndRouteCard        = NoYes::Yes; 

            prodParmStartUp.BOMAutoConsump      = BOMAutoConsump::Always; 

            ProdParmStartUp.update(); 

           

        } 

        prodTable.status().runStartUp(ProdParmStartUp); 

        ttscommit; 

        return prodId; 

    } 

  

    public  str 1000  checkPostProdJournalTablePickingList(JournalId _journalID, W_ProductionOrderCreationAndPostingResponseContract _response) 

    { 

        ProdJournalCheckPost ProdJournalCheckPost; 

        str        message =" "; 

        ProdJournalTable prodJournalTable = ProdJournalTable::find(_journalID, true); 

        try 

        { 

            ProdJournalCheckPost = ProdJournalCheckPostBOM::newJournalCheckPost(true, 

                                                                                true, 

                                                                                JournalCheckPostType::Post, 

                                                                                prodJournalTable.TableId, 

                                                                                prodJournalTable.JournalId); 

            ProdJournalCheckPost.parmThrowCheckFailed(true); 

            ProdJournalCheckPost.run(); 

        } 

        catch(Exception::Warning) 

        { 

            message =this.ErrorMsg(); 

            _response.parmErrorMessage(message); 

        } 

        catch(Exception::Error) 

        {   message =this.ErrorMsg(); 

            _response.parmErrorMessage(message); 

        } 

        catch(Exception::Deadlock) 

        { 

            message =this.ErrorMsg(); 

            _response.parmErrorMessage(message); 

        } 

        catch(Exception::UpdateConflict) 

        { 

            message =this.ErrorMsg(); 

            _response.parmErrorMessage(message); 

        } 

        catch(Exception::DuplicateKeyException) 

        { 

            message =this.ErrorMsg(); 

            _response.parmErrorMessage(message); 

        } 

        catch(Exception::CLRError) 

        { 

            System.Exception  ex = CLRInterop::getLastException(); 

            message =ex.Message; 

            _response.parmErrorMessage(message); 

        } 

        catch(Exception::ViewDataSourceValidation) 

        { 

            message =this.ErrorMsg(); 

            _response.parmErrorMessage(message); 

        } 

        return message; 

    } 

  

    public void prodReportFinished(ProjId _proid,Qty _startQty,str _BOMNumber,str _JournalID) 

    { 

  

        ProdJournalTable        prodJournalTable; 

        ProdJournalBOM          prodJournalBOM; 

        BOM                     bom; 

        ProdBOM                 prodBOM; 

        InventQty               totalDryQty; 

        Args Args; 

        ProdMultiReportFinished ProdMultiReportFinished; 

        prodParmreportFinished prodParmreportFinished,prodParmreportFinishedUPD; 

        Boolean RAF,Ended; 

        ProdTable ProdTable = ProdTable::find(_proid); 

        ttsbegin; 

        Args = new Args(); 

        Args.parmEnum(0); 

        Args.record(prodTable); 

        ProdMultiReportFinished = ProdMultiReportFinished::construct(Args); 

        RunBaseMultiParm::initParm(ProdMultiReportFinished); 

        prodParmreportFinished = ProdMultiReportFinished.defaultParmBuffer(); 

        ProdMultiReportFinished.insert(prodTable,prodParmreportFinished); 

        prodParmreportFinishedUPD = prodParmreportFinished::find(prodParmreportFinished.ParmId,prodParmreportFinished.ProdId,True); 

        if(prodParmreportFinishedUPD) 

        { 

            prodParmreportFinishedUPD.selectForUpdate(true); 

  

            while select * from prodJournalTable 

                order by prodJournalTable.RecId desc 

                    where prodJournalTable.ProdId == _proid 

                && prodJournalTable.Posted == NoYes::Yes && prodJournalTable.JournalType == ProdJournalType::Picklist 

                && prodJournalTable.JournalId  == _JournalID 

            { 

                while select prodJournalBOM 

                    join   prodBOM 

                    join   bom 

                        where prodJournalBOM.JournalId == prodJournalTable.JournalId && 

                        prodJournalBOM.InventTransId == prodBOM.InventTransId && 

                        prodbom.BOMRefRecId == bom.RecId 

                        && bom. WNotInclude == NoYes::No 

                { 

                        if (bom. WInFactor) 

                        { 

                            totalDryQty +=  prodJournalBOM. WWeighingQty/bom. WInFactor; 

                        } 

                        else 

                        { 

                            totalDryQty +=  prodJournalBOM. WDryQty; 

                        } 

                } 

            } 

  

            if(ProdTable::find(_proid). WPackingOrder == NoYes::No && ProdTable::find(_proid). WRAFStatus == NoYes::No) 

            { 

            prodParmreportFinishedUPD.QtyGood           = _startQty; 

            } 

  

            if(ProdTable::find(_proid). WRAFStatus == NoYes::Yes) 

            { 

                prodParmreportFinishedUPD.QtyGood       = totalDryQty; 

            } 

            prodParmreportFinishedUPD.RouteAutoConsump  = RouteAutoConsump::Never; 

            prodParmreportFinishedUPD.BOMAutoConsump    = BomAutoConsump::Never; 

            prodParmreportFinishedUPD.AcceptError       = Noyes::Yes; 

            prodParmreportFinishedUPD.EndJob            = NoYes::No; 

            prodParmreportFinishedUPD.ReportFinishProd  = NoYes::Yes; 

            prodParmreportFinishedUPD.JournalShowInfo   = NoYes::Yes; 

  

            prodParmreportFinishedUPD.update(); 

        } 

        ttscommit; 

        ProdMultiReportFinished.run(); 

        

        //ProdTable prodTable; 

        //ProdMultiReportFinished prodMultiReportFinished; 

  

        //prodTable = ProdTable::find(_proid); 

  

        //prodMultiReportFinished = ProdMultiReportFinished::construct(new Args()); 

        //RunBaseMultiParm::initParm(prodMultiReportFinished); 

        //prodMultiReportFinished.insert(prodTable, prodMultiReportFinished.defaultParmBuffer()); 

  

        //prodMultiReportFinished.run(); 

        

    } 

  

    public str 1000 ErrorMsg() 

  

    { 

        SysInfologEnumerator    sysInfologEnumerator; 

        SysInfologMessageStruct infoMessageStruct; 

        str                     logMessage; 

        str                     logString; 

        str                      ret; 

        int                      i; 

        #Define.NewLine('\n') 

  

        sysInfologEnumerator = SysInfologEnumerator::newData(infolog.infologData()); 

  

        while (sysInfologEnumerator.moveNext()) 

        { 

            i = 1; 

  

            if (logMessage) 

            { 

                logMessage += #Newline; 

            } 

  

            infoMessageStruct = SysInfologMessageStruct::construct(sysInfologEnumerator.currentMessage()); 

  

            while (i <= infoMessageStruct.prefixDepth()) 

            { 

                logString = logString + infoMessageStruct.preFixTextElement(i) + '. '; 

                i++; 

            } 

  

            logString = logString + infoMessageStruct.message(); 

            logMessage = logString; 

            //logMessage = logMessage + infoMessageStruct.message(); commented by ratna 

        } 

  

        return logMessage; 

         

  

    } 

  

    public UnitQty prodJournalBOMWriteen(ProdJournalBOM  _ProdJournalBOMtable) 

    { 

        InventQualityOrderTable     inventQualityOrderTable; 

        InventQualityOrderLine      inventQualityOrderLine; 

        InventDim                   inventDimQO, inventDimBOM; 

        boolean                     isPassQOAvailable; 

        real                        WTFMPercentage; 

        prodJournalBOM          prodJournalBOM,prodJournalBOMUpd; 

         

  

        prodJournalBOM = _ProdJournalBOMtable; 

        if(prodJournalBOM.InventTransChildType == InventTransChildType::ProdJournalBOM) 

        { 

            while select ItemId,OrderStatus,OrderStatus,QualityOrderId,InventDimId from inventQualityOrderTable 

                    order by VALIDATEDDATETIME desc 

                    where inventQualityOrderTable.ItemId         == prodJournalBOM.ItemId 

                    &&    inventQualityOrderTable.OrderStatus    == InventTestOrderStatus::Pass 

                    &&    (inventQualityOrderTable.ReferenceType == InventTestReferenceType::Purch 

                    ||     inventQualityOrderTable.ReferenceType == InventTestReferenceType::Inventory) 

            { 

                inventDimQO     = InventDim::find(inventQualityOrderTable.InventDimId); 

                inventDimBOM    = InventDim::find(prodJournalBOM.InventDimId); 

                if(   inventDimQO.InventSiteId      == inventDimBOM.InventSiteId 

                   && inventDimQO.InventLocationId  == inventDimBOM.InventLocationId 

                   && inventDimQO.wMSLocationId     == inventDimBOM.wMSLocationId) 

                { 

                    isPassQOAvailable   = true; 

                    break; 

                } 

                else 

                { 

                    continue; 

                } 

            } 

  

            if(isPassQOAvailable) 

            { 

                select QualityOrderId,TestId, WWeightedAvgFeedMoisture from inventQualityOrderLine 

                    where inventQualityOrderLine.QualityOrderId == inventQualityOrderTable.QualityOrderId 

                    &&    (inventQualityOrderLine.TestId        == "Moisture" 

                    ||     inventQualityOrderLine.TestId        == "PFM"); 

  

                if(inventQualityOrderLine) 

                { 

                    if(inventQualityOrderLine. WWeightedAvgFeedMoisture != prodJournalBOM. WWeighedAvgFeedMoisture) 

                    { 

                       return inventQualityOrderLine. WWeightedAvgFeedMoisture; 

                        

                    } 

                } 

            } 

            

        } 

        Return inventQualityOrderLine. WWeightedAvgFeedMoisture; 

    } 

  

    public  JournalId createPickListJournal(ProjId _projid, real _qty, transdate _dlvDate) 

    { 

        ProdJournalCreateBOM prodJournalCreateBOM; 

        ProdJournalTable     ProdJournalTable; 

        ProdJournalBOM       ProdJournalBOM; 

  

        prodJournalCreateBOM = ProdJournalCreateBOM::construct(); 

  

        prodJournalCreateBOM.parmProdId(_projid); 

        prodJournalCreateBOM.parmJournalNameId(ProdJournalName::standardJournalName(ProdJournalType::Picklist, prodJournalCreateBOM.parmProdId())); 

        prodJournalCreateBOM.parmTransDate(_dlvDate); 

        prodJournalCreateBOM.parmBOMAutoConsump(BOMAutoConsump::Never); 

        prodJournalCreateBOM.parmProposalAsConsump(NoYes::No); 

        prodJournalCreateBOM.parmQtyCalc(_qty); 

        prodJournalCreateBOM.parmConsumpProposal(ProdBOMConsumpProposal::Qty); 

  

        prodJournalCreateBOM.run(); 

        ttsbegin; 

        select forupdate ProdJournalTable 

            order by JournalId desc 

            where ProdJournalTable.ProdId == _projid; 

     

                        

        if(ProdJournalTable.RecId) 

        {   ProdJournalTable.selectForUpdate(true); 

            ProdJournalTable. WStartUpQty = _qty; 

            ProdJournalTable.write(); 

        } 

        ttscommit; 

       return ProdJournalTable.JournalId; 

    } 

  

    /// <summary> 

    /// 

    /// </summary> 

    public InventDimId createInventDim(str _LocationId,str _Site,str _Item,str _Warehouse) 

    { 

        InventDim  inventDim; 

         

        //select  firstonly inventDim 

        //    where inventDim.InventLocationId == _Warehouse 

        //    && inventDim.InventSiteId ==_Site 

        //    && inventDim.wMSLocationId ==_LocationId 

        //    && inventDim.configId == 'NA'; 

        inventDim.clear(); 

        inventDim.InventLocationId = _Warehouse; 

        inventDim.InventSiteId =_Site; 

        inventDim.wMSLocationId =_LocationId; 

        inventDim.configId = 'NA'; 

  

        inventDim = InventDim::findOrCreate(inventDim); 

        return inventDim.inventDimId; 

    }