Really liking BCD!
call using this
calls this old Nasty thing
PHP Code:
//------------------------------------------------------//
// START: GetNextWorkDate //
//------------------------------------------------------//
function GetNextWorkDate($Direction, $Days, $InDateMMDDYY )
{
/************** Step 1: set up parameter list description *****************************/
/* Create an array that specifies the name of */
/* the input, the IO being performed, the variable */
/* type, and the variable name. */
/* Array example:*/
$description = array(
array(
"Name"=>"direction",
"IO"=>I5_IN,
"Type"=>I5_TYPE_CHAR,
"Length"=>"1"
),
array(
"Name"=>"days",
"IO"=>I5_IN,
"Type"=>I5_TYPE_PACKED,
"Length"=>"5.0"
),
array(
"Name"=>"indatemmddyy",
"IO"=>I5_IN,
"Type"=>I5_TYPE_CHAR,
"Length"=>"6"
),
array(
"Name"=>"outdatemmddyy",
"IO"=>I5_INOUT,
"Type"=>I5_TYPE_CHAR,
"Length"=>"6"
)
);
/************** Step 2: prepare the program for calling *****************************/
/* Assign $lib and $pgm_nm the corresponding */
/* library and program name: */
$lib = "LBIOBJ";
$pgm_name = "MSC09";
$libl = xl_get_parameter("libl");
xl_set_libl($libl);
$pgm = i5_program_prepare("$lib/$pgm_name", $description);
// Check if any errors occurred.
if (!$pgm)
{
die("i5_program_prepare");
}
/************** Step 3: assign the parameter values to send **********/
/* Create an array with the input names and the */
/* corresponding values */
/* Array example: */
$parameter = array(
"direction"=>$Direction,
"days"=>$Days,
"indatemmddyy"=>$InDateMMDDYY,
"outdatemmddyy"=>""
);
/************** Step 4: the parameters that will be returned from the program **/
/* Create an array with the output parameters */
/* returned by the program. */
/* Array example: */
$parmOut = array(
"direction"=>"direction",
"days"=>"days",
"indatemmddyy"=>"indatemmddyy",
"outdatemmddyy"=>"outdatemmddyy"
);
/************** Step 5: Call the program. *****************/
$ret = i5_program_call($pgm, $parameter, $parmOut);
// to work with the compatibility wrapper for IBM i Toolkit for PHP,
// we need to extract the output variables
if (function_exists('i5_output'))
{
extract(i5_output());
}
// Check if any errors occurred.
if (!$ret)
{
die("i5_program_call");
exit();
}
// return array
$OutDateMMDDYY = $outdatemmddyy;
return $OutDateMMDDYY;
// Close the program handle (unload from memory).
i5_program_close($pgm);
}
//------------------------------------------------------//
// END: Determine Work Date //
//------------------------------------------------------//
call using this
PHP Code:
require('/esdi/websmart/v9.2/include/xl_functions001.php');
global $conn, $outdatemdy;
$conn = xl_i5_connect( );
xl_set_libl("TEST");
$Direction = 'F';
$Days = 10;
$InDateMDY = date("mdy");
$outdatemdy = GetNextWorkDate($Direction, $Days, $InDateMDY );
echo " Test Date Back: " . $outdatemdy;
calls this old Nasty thing
PHP Code:
*
* INPUT PARAMETERS
* Description Type Size How Used
* ----------- ---- ---- --------
* Direction Char 1 B - Find number of business
* days back from today.
* F - Find number of business
* days forward from today.
* Number of Days Dec 5,0 Number of business days to
* be determined.
* Start Date Char 6 Date to begin search.
* Date found Char 6 Date found that satisfies
* search criteria.
* Validty Checking Char 5 Input 1=Y Saturday date is okay
* 2=Y Sunday date is okay
* 3=Y Holiday date is okay
* 4
* 5
*
d IncomeValid s 5
d PmDate s 8 0
d PmDesc s 10
d PmEMsg s 70
d PmLLDays s 3 0
d PmULDays s 3 0
d PmValid s 5
d WorkValid s 5
*
D DS
D MMDDYY 1 6 0
D MMDD 1 4 0
D YY 5 6 0
*
D DS
D DATX 1 7 0
D DATX6 2 7 0
D CX 1 1 0
D YYX 2 3 0
D MMDDX 4 7 0
D MMX 4 5 0
D DDX 6 7 0
*
C EXSR HSKPG
*
* FORMAT PASSED DATE TO CYMD
C YY IFLT 80
C Z-ADD 1 CX
C ELSE
C CLEAR CX
C ENDIF
*
C Z-ADD YY YYX
C Z-ADD MMDD MMDDX
C IF (MMX = 04 OR MMX = 06 OR
C MMX = 09 OR MMX = 11) AND
C DDX = 31
C EVAL DDX = 30
C ENDIF
C IF MMX = 02 AND
C (DDX = 30 OR DDX = 31)
C EVAL DDX = 28
C IF YYX = 08 OR YYX = 12 OR YYX = 16
C EVAL DDX = 29
C ENDIF
C ENDIF
*
* CONVERT PASSED DATE TO DAYS
C CLEAR ##DDD
C Z-ADD DATX ##CYMD
C CALL 'CVDT_YMD'
C PARM ##CYMD
C PARM ##DDD
*
* TEST CHANGE AS VALID BUSINESS DAY
* CANNOT BE WEEKEND OR HOLIDAY
*
C NUMDYS IFNE *ZEROS
C DIR IFEQ 'B'
C SUB 1 ##DDD
C ELSE
C ADD 1 ##DDD
C ENDIF
C ENDIF
*
C Eval *in89 = *On
*
C *IN89 DOWEQ *ON
C COUNT ORLT NUMDYS
C CLEAR ##CYMD
C CALL 'CVDT_DAY'
C PARM ##DDD
C PARM ##CYMD
*
C Z-ADD ##CYMD DATX
C Z-ADD DATX6 PmDate
*
* call date verification pgm.
c call 'MSC25'
c parm PmDate
c parm -999 PmLLDays
c parm 999 PmULDays
c parm 'TEST' PmDesc
c parm WorkValid PmValid
c parm PmEMsg
*
C Eval *in89 = *Off
c If PmEmsg <> *blanks
C Eval *in89 = *On
c endif
* INCREMENT DAYS FOUND COUNTER IF VALID DATE FOUND
C *IN89 IFEQ *OFF
C ADD 1 COUNT
C ENDIF
*
C DIR IFEQ 'B'
C SUB 1 ##DDD
C ELSE
C ADD 1 ##DDD
C ENDIF
*
C ENDDO
*
* FORMAT RETURNED DATE FIELD
C MOVE MMDDX MMDD
C MOVE YYX YY
C MOVE MMDDYY MDYRUN
*
C MOVE *ON *INLR
*
*****************************************************
* PROGRAM INITIALIZATION SUBROUTINE
*****************************************************
*
C HSKPG BEGSR
*
* DEFINE PARM LISTS
C *ENTRY PLIST
C PARM DIR 1
C PARM NUMDYS 5 0
C PARM MDY 6
C PARM MDYRUN 6
c parm IncomeValid
*
c if %parms >= 5
c eval WorkValid = IncomeValid
c else
c eval WorkValid = *blanks
c endif
*
C CLEAR MDYRUN
C MOVE MDY MMDDYY
*
* DEFINE WORK FIELDS
C Z-ADD *ZEROS ##CYMD 7 0
C Z-ADD *ZEROS ##DDD 7 0
C *LIKE DEFINE NUMDYS COUNT
*
C ENDSR
Comment