#DEFINE ERR_BADCOUNTRY_LOC "The 'Country' value is invalid." #DEFINE ERR_BADHIREDATE_LOC "The 'Hire_date' value must be greater than " #DEFINE ERR_BADBIRTHDATE_LOC "The 'Birth_date' value must be greater than " #DEFINE ERR_BADTITLE_LOC "The 'Title' value is invalid." #DEFINE ERR_BADSALARY1_LOC "The 'Salary' value for the job title '" #DEFINE ERR_BADSALARY2_LOC "' must be between " #DEFINE ERR_BADSALARY3_LOC "$" #DEFINE ERR_BADSALARY4_LOC " and $" DEFINE CLASS salaryrule AS Custom OLEPUBLIC nSaveArea = 1 PROCEDURE Init * BUGBUG needs error checking IF !USED('bizrules') USE bizrules IN 0 AGAIN ENDIF ENDPROC PROCEDURE Destroy USE IN bizrules ENDPROC PROCEDURE validate PARAMETERS lcTitle, lnSalary, ldBirth, ldHire, lcCountry LOCAL lcError, lcStr THIS.nSaveArea = SELECT() SELECT bizrules lcError = "" * enforces a common set of bussiness rules * returns a list of error messages, one for every rule that failed * bussiness rule for title and for salary range per title LOCATE FOR lcTitle = ALLTRIM(title) IF EOF() THIS.ErrorMessage(ERR_BADTITLE_LOC, @lcError) ELSE IF !BETWEEN(lnSalary, min_salary, max_salary) lcStr = ERR_BADSALARY1_LOC + ALLTRIM(title) + ERR_BADSALARY2_LOC + ; ERR_BADSALARY3_LOC + ALLTRIM(STR(min_salary)) + ERR_BADSALARY4_LOC + ALLTRIM(STR(max_salary)) THIS.ErrorMessage(lcStr, @lcError) ENDIF ENDIF * bussiness rule for dates GO TOP IF ldBirth < birth_date lcStr = ERR_BADBIRTHDATE_LOC + ALLTRIM(DTOC(birth_date)) THIS.ErrorMessage(lcStr, @lcError) ENDIF GO TOP && just for consistence IF ldHire < hire_date lcStr = ERR_BADHIREDATE_LOC + ALLTRIM(DTOC(hire_date)) THIS.ErrorMessage(lcStr, @lcError) ENDIF * business rule for country LOCATE FOR lcCountry = ALLTRIM(country) IF EOF() THIS.ErrorMessage(ERR_BADCOUNTRY_LOC, @lcError) ENDIF SELECT (THIS.nSaveArea) * wait window lcError RETURN lcError ENDPROC PROCEDURE ErrorMessage PARAMETERS lcMessage, lcError * add message to error list lcError = lcError + IIF(EMPTY(lcError), lcMessage, chr(13) + lcMessage) SELECT (THIS.nSaveArea) ENDPROC ENDDEFINE