Monday, November 17, 2025

Timesheet Service class

 public final class MDSTimeSheetLineEntityService 

{ 

  

    TSTimesheetLineEntityPSA TSTimesheetLineEntityPSALoc; 

    MDSTimesheetServiceResponse response=new   MDSTimesheetServiceResponse(); 

  

            [AifCollectionType('record', Types::Class, classStr(MDSTimeSheetLineEntityContract))] 

    public MDSTimesheetServiceResponse create(list record) 

    { 

        MDSTimeSheetLineEntityContract  contract =  new MDSTimeSheetLineEntityContract(); 

  

        ListEnumerator IEnum = record.getEnumerator(); 

         

        try 

        { 

             

            while(IEnum.moveNext()) 

            { 

                ttsbegin; 

                contract  = IEnum.current(); 

                if(this.checkValidation(contract) == true) 

                { 

                    changecompany(contract.parmdataAreaId()) 

                    { 

             

                        select forupdate  TSTimesheetLineEntityPSALoc 

                            where TSTimesheetLineEntityPSALoc.TimesheetNumber == contract.parmTimesheetnumber() 

                            && TSTimesheetLineEntityPSALoc.LineNumber == contract.parmLineNumber(); 

                         

                            this.getUpload(contract); 

                            if(TSTimesheetLineEntityPSALoc.validateWrite()) 

                            { 

                                TSTimesheetLineEntityPSALoc.write(); 

                                response.parmOpertionStatus(true); 

                                response.parmErrorMessage('Success'); 

                                response.parmTimesheetNumber(TSTimesheetLineEntityPSALoc.TimesheetNumber); 

                        } 

                        else                          

                        { 

                             

                            response.parmOpertionStatus(false); 

                            throw Error(response.parmErrorMessage(this.ErrorMsg())); 

                        } 

                    } 

                      

                } 

                else 

                { 

                    throw Error(response.parmErrorMessage()); 

                } 

                ttscommit; 

            } 

            

             

        } 

        catch(Exception::Error) 

        { 

             

            response.parmOpertionStatus(false); 

            response.parmErrorMessage(this.ErrorMsg()); 

  

            //throw Exception::Error ; 

        } 

        catch(Exception::Deadlock) 

        { 

            response.parmOpertionStatus(false); 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

        catch(Exception::UpdateConflict) 

        { 

            response.parmOpertionStatus(false); 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

        catch(Exception::DuplicateKeyException) 

        { 

            response.parmOpertionStatus(false); 

            response.parmErrorMessage(this.ErrorMsg() + 'Can not duplicate Line number or Timesheet number,alredy exist'); 

        } 

        catch(Exception::CLRError) 

        { 

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

            response.parmOpertionStatus(false); 

            response.parmErrorMessage(ex.Message); 

        } 

        catch(Exception::ViewDataSourceValidation) 

        { 

            response.parmOpertionStatus(false); 

            response.parmErrorMessage(this.ErrorMsg()); 

        } 

        if(response.parmOpertionStatus() == true ) 

        { 

            this.timeSheetSubmitted(contract); 

            response.parmOpertionStatus(True); 

            response.parmErrorMessage('TimeSheet  Auto Posted'); 

        } 

  

        return response; 

         

    } 

  

    public  void getUpload(MDSTimeSheetLineEntityContract _contract) 

    { 

        TSTimesheetLineEntityPSALoc.clear(); 

        TSTimesheetLineEntityPSALoc.TimesheetNumber =  _contract.parmTimesheetnumber(); 

        TSTimesheetLineEntityPSALoc.ActivityNumber =  _contract.parmActivityNumber(); 

        TSTimesheetLineEntityPSALoc.CategoryId     =  _contract.parmCategoryId(); 

        TSTimesheetLineEntityPSALoc.DimensionDisplayValue =    _contract.parmDimensionDisplayValue(); 

        TSTimesheetLineEntityPSALoc.Hours[0] =  _contract.parmHOURS(); 

        TSTimesheetLineEntityPSALoc.Hours[1] = _contract.parmHours2_(); 

        TSTimesheetLineEntityPSALoc.Hours[2] = _contract.parmHours3_(); 

        TSTimesheetLineEntityPSALoc.Hours[3] =  _contract.parmHours4_(); 

        TSTimesheetLineEntityPSALoc.Hours[4] = _contract.parmHours5_(); 

        TSTimesheetLineEntityPSALoc.Hours[5]=  _contract.parmHours6_(); 

        TSTimesheetLineEntityPSALoc.Hours[6] =  _contract.parmHours7_(); 

        TSTimesheetLineEntityPSALoc.ExternalComments[0] = _contract.parmExternalComments(); 

        TSTimesheetLineEntityPSALoc.ExternalComments[1] = _contract.parmExternalComments2_(); 

        TSTimesheetLineEntityPSALoc.ExternalComments[2] = _contract.parmExternalComments3_(); 

        TSTimesheetLineEntityPSALoc.ExternalComments[3] = _contract.parmExternalComments4_(); 

        TSTimesheetLineEntityPSALoc.ExternalComments[4] = _contract.parmExternalComments5_(); 

        TSTimesheetLineEntityPSALoc.ExternalComments[5] = _contract.parmExternalComments6_(); 

        TSTimesheetLineEntityPSALoc.ExternalComments[6] = _contract.parmExternalComments7_(); 

        TSTimesheetLineEntityPSALoc.InternalComments[0] =  _contract.parmINTERNALCOMMENTS() ; 

        TSTimesheetLineEntityPSALoc.InternalComments[1] =  _contract.parmInternalComments2_(); 

        TSTimesheetLineEntityPSALoc.InternalComments[2] = _contract.parmInternalComments3_(); 

        TSTimesheetLineEntityPSALoc.InternalComments[3] = _contract.parmInternalComments4_(); 

        TSTimesheetLineEntityPSALoc.InternalComments[4] = _contract.parmInternalComments5_(); 

        TSTimesheetLineEntityPSALoc.InternalComments[5] = _contract.parmInternalComments6_(); 

        TSTimesheetLineEntityPSALoc.InternalComments[6] = _contract.parmInternalComments7_(); 

        TSTimesheetLineEntityPSALoc.Favorites = _contract.parmFavorites(); 

        TSTimesheetLineEntityPSALoc.LegalEntity = _contract.parmLegalEntity(); 

        TSTimesheetLineEntityPSALoc.LineProperty = _contract.parmLineProperty(); 

        TSTimesheetLineEntityPSALoc.LineNumber =  _contract.parmLineNumber(); 

        TSTimesheetLineEntityPSALoc.ProjectDataArea = _contract.parmProjectDataArea(); 

        TSTimesheetLineEntityPSALoc.ProjectId =  _contract.parmProjectId(); 

        TSTimesheetLineEntityPSALoc.TaxGroupId =  _contract.parmTaxGroupId(); 

        TSTimesheetLineEntityPSALoc.TaxItemGroup = _contract.parmTaxItemGroup(); 

            

    } 

  

    public boolean checkValidation(MDSTimeSheetLineEntityContract _contract) 

    { 

        boolean check =true; 

  

        if(_contract.parmProjectId() || 

          _contract.parmProjectDataArea() 

        || _contract.parmLineProperty() ||  _contract.parmLegalEntity() 

        ||  _contract.parmDimensionDisplayValue() || _contract.parmCategoryId() 

           || _contract.parmTaxItemGroup()) 

        { 

            changecompany(_contract.parmProjectDataArea()) 

  

            { 

                ProjTable projtable=   ProjTable::find(_contract.parmProjectId()); 

             

                boolean category = ProjValProjCategorySetUp::existDirect( _contract.parmCategoryId(),_contract.parmProjectId()); 

              

                if(!projtable) 

                { 

                    response.parmOpertionStatus(false); 

                    response.parmErrorMessage('Project Id is In correct'); 

                    check =false; 

                } 

            

                ProjValProjCategorySetUp projValProjCategorySetUp,projValProjCategorySetUploc; 

                ProjCategory projCategory; 

  

                select firstonly projValProjCategorySetUp where projValProjCategorySetUp.ProjId  == projtable.ProjId; 

                select  * FROM projCategory join 

                    projValProjCategorySetUploc 

                    where projCategory.CategoryId == projValProjCategorySetUploc.CategoryId 

                    && projValProjCategorySetUploc.GroupId == projValProjCategorySetUp.GroupId || 

                    projValProjCategorySetUploc.ProjId == projtable.ProjId 

                && projCategory.CategoryId == _contract.parmCategoryId(); 

  

                if( !projCategory) 

                { 

                    response.parmOpertionStatus(false); 

                    response.parmErrorMessage('Category Id is In correct'); 

                    check =false; 

                } 

               if(projCategory.TaxItemGroupId != _contract.parmTaxItemGroup()) 

                { 

                    response.parmOpertionStatus(false); 

                    response.parmErrorMessage('TaxItemGroup Id is In correct or must  be filled' ); 

                    check =false; 

                }  

  

             

                if( projtable && projtable.DataAreaId != _contract.parmProjectDataArea() && projtable.ProjId == _contract.parmProjectId()) 

                { 

                    response.parmOpertionStatus(false); 

                    response.parmErrorMessage('Project does not exits current legalEntity'); 

                    check =false; 

                } 

                if(_contract.parmProjectId()==null) 

                { 

                    response.parmOpertionStatus(false); 

                    response.parmErrorMessage('Project ID must be filled'); 

                    check =false; 

                } 

  

                if( _contract.parmCategoryId()  == null ) 

                { 

                    response.parmOpertionStatus(false); 

                    response.parmErrorMessage('CategoryId must be filled'); 

                    check =false; 

  

                } 

                if(_contract.parmTimesheetnumber() == null) 

            

                { 

                    response.parmOpertionStatus(false); 

                    response.parmErrorMessage('Timesheet must be filled'); 

                    check =false; 

  

                } 

             

                if(!_contract.parmLineNumber()) 

                { 

                    response.parmOpertionStatus(false); 

                    response.parmErrorMessage('Linenumber must be filled'); 

                    check =false; 

                } 

                if(projtable.RequireActivityHourForecast ==NoYes::No 

                && projtable.RequireActivityHourTrx == NoYes::No 

                && _contract.parmActivityNumber()) 

                { 

                    response.parmOpertionStatus(false); 

                    response.parmErrorMessage(' ActivityNumber does not exists in related project table '); 

                    check =false; 

                } 

            } 

  

             

        } 

        return check ; 

    } 

  

    public void timeSheetSubmitted(MDSTimeSheetLineEntityContract _contract) 

    { 

       changecompany(_contract.parmdataAreaId()) 

        { 

            WorkflowVersionTable workflowVersionTable; 

  

            TSTimeSheetTable timeSheet = TSTimeSheetTable::find(_contract.parmTimesheetnumber(),true); 

  

            workflowVersionTable = Workflow::findWorkflowConfigToActivateForType(workFlowTypeStr(TSDocumentTemplate), 

  

                                                                                 timeSheet.RecId, 

  

                                                                                 timeSheet.TableId); 

            //If workflow is active then submit the workflow. 

            if (timeSheet.RecId && workflowVersionTable.RecId) 

            { 

  

                //submitting to workflow 

  

                Workflow::activateFromWorkflowType(workFlowTypeStr(TSDocumentTemplate), 

  

                                                    timeSheet.RecId, 

  

                                                    "Timesheet Workflow Auto Approved", 

  

                                                    false, 

  

                                                    curUserid()); 

  

                //Update the workflow status to Submitted on the table. 

                if(timeSheet.RecId) 

                { 

                    ttsbegin; 

                    timeSheet.ApprovalStatus = TSAppStatus::Pending; 

                    timeSheet.update(); 

                    ttscommit; 

                } 

  

            }  

  

           /* if(timeSheet.ApprovalStatus == TSAppStatus::Approved) 

            { 

                ttsbegin; 

                timeSheet.ApprovalStatus = TSAppStatus::Ledger; 

                timeSheet.update(); 

                ttscommit; 

            }  */ 

       }  

     

    } 

  

    public Log ErrorMsg() 

    { 

        Log errorMessage; 

        SysInfologEnumerator sysInfologEnumerator; 

  

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

        errorMessage =""; 

        While(sysInfologEnumerator.moveNext()) 

        { 

            errorMessage += sysInfologEnumerator.currentMessage(); 

        } 

        return  errorMessage; 

    } 

  

} 

No comments:

Post a Comment