// This script contains the logic which is executed whenever data is entered and sent
//Allocate Salaries and Working Hours
*RUNALLOCATION
	*FACTOR = 
	*DIM S_HRMETRIC WHAT = SALARY,HOURS ;WHERE = <<<; 
	*DIM S_HRFLOW WHAT = AVAILABLE ;WHERE = DEMAND,HIRETERM,BALANCE; 
*ENDALLOCATION 

//Calculate Total Hours and Total Amount on changes of Quantity
*WHEN S_HRFLOW
	*IS AVAILABLE,HIRETERM
	*WHEN S_HRMETRIC
		*IS QTY
		*REC(EXPRESSION = [S_HRMETRIC].[QTY] * [S_HRMETRIC].[HOURS],  S_HRMETRIC = THOURS)
		*REC(EXPRESSION = [S_HRMETRIC].[QTY] * [S_HRMETRIC].[SALARY],  S_HRMETRIC = TOTAL)
	*ENDWHEN
*ENDWHEN


/////BEGIN - Should be executed when you update S_PROCESSING hours and Other Models Hours
//Calculates Total Amount and QTY based on the input of Total Hours

*XDIM_MEMBERSET S_HRFLOW = DEMAND
*XDIM_MEMBERSET S_HRMETRIC = THOURS

*WHEN S_HRFLOW
	*IS DEMAND
	*REC(EXPRESSION = [S_HRMETRIC].[THOURS] / [S_HRMETRIC].[HOURS], S_HRMETRIC = QTY)
	*REC(EXPRESSION = [S_HRMETRIC].[THOURS] / [S_HRMETRIC].[HOURS] * [S_HRMETRIC].[SALARY], S_HRMETRIC = TOTAL)
*ENDWHEN 




//Calculate HIRING and Termination
*XDIM_MEMBERSET S_HRFLOW = %S_HRFLOW_SET%
*XDIM_MEMBERSET S_HRMETRIC = QTY, THOURS, TOTAL

*WHEN S_HRFLOW
	*IS AVAILABLE
	*WHEN S_HRMETRIC
		*IS *
		*REC(EXPRESSION = ([S_HRFLOW].[DEMAND] - [S_HRFLOW].[AVAILABLE]), S_HRFLOW = HIRETERM)
	*ENDWHEN 
*ENDWHEN 

//Calculate Balance to OPEX
*WHEN S_HRMETRIC
	*IS *
	*REC(EXPRESSION = ([S_HRFLOW].[AVAILABLE] + [S_HRFLOW].[HIRETERM]), S_HRFLOW = BALANCE)
*ENDWHEN 



//Send the Amount to OPEX Model
*XDIM_MEMBERSET S_HRFLOW = BALANCE
*XDIM_MEMBERSET S_HRMETRIC = TOTAL

*DESTINATION_APP = SF_OPEX
*SKIP_DIM = S_HRACC,S_HRFLOW,S_HRMETRIC
*ADD_DIM S_GLACC = S_HRACC:S_GLACC
*ADD_DIM S_CCENTER = S_HRACC:S_CCENTER

*WHEN S_TIME
	*IS *
	*REC(EXPRESSION = %VALUE%)
*ENDWHEN 

//Send Balance Labor Hours to OPEX for Rate Calculation
*XDIM_MEMBERSET S_HRMETRIC = THOURS

*DESTINATION_APP = SF_OPEX
*SKIP_DIM = S_HRACC,S_HRFLOW,S_HRMETRIC
*ADD_DIM S_GLACC = WHOURS
*ADD_DIM S_CCENTER = S_HRACC:S_CCENTER

*WHEN S_TIME
	*IS *
	*REC(EXPRESSION = %VALUE%)
*ENDWHEN














//Rounding example
// *WHEN S_TIME
// 	*IS *
// 	*REC(EXPRESSION = ([S_HRMETRICS].[THOURS] > 0 ? (([S_HRMETRICS].[THOURS]-[S_HRMETRICS].[THOURS]%[S_HRMETRICS].[HOURS])/[S_HRMETRICS].[HOURS]+1) : 0), S_HRMETRICS = QTY)
// 	*REC(EXPRESSION = ([S_HRMETRICS].[THOURS] > 0 ? (([S_HRMETRICS].[THOURS]-[S_HRMETRICS].[THOURS]%[S_HRMETRICS].[HOURS])/[S_HRMETRICS].[HOURS]+1) : 0) * [S_HRMETRICS].[SALARY], S_HRMETRICS = TOTAL)
// *ENDWHEN 

// Alternative to the second REC line of the above statement


/////END
