home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1995 September / Image.iso / visualob / install / samples / employee / employee.cl_ / employee.cl
Encoding:
Text File  |  1994-08-18  |  12.6 KB  |  539 lines

  1. // EMPLOYEE.PRG
  2. // Employee information maintenance module
  3. // November, 1993
  4.  
  5. #include "sys.ch"
  6.  
  7. #define FNAME           1
  8. #define LNAME           2
  9. #define EMP_NUM         3
  10. #define DEPT_NUM        4
  11. #define SUPER_NUM       5
  12. #define RECORD_NUMBER   6
  13. #define DEPT_NAME       7
  14. #define SUPER_NAME      8
  15. #define TOTAL_FIELDS    8
  16.  
  17.  
  18. FUNCTION Entry110()
  19.    LOCAL TheFields[TOTAL_FIELDS], TheChoice
  20.  
  21.    Screen()
  22.    TheChoice := 0
  23.  
  24.    IF !Fatal()
  25.       DO WHILE TRUE
  26.          InitData(@TheFields, FALSE)
  27.          PostGets(@TheFields, DISPLAY_MODE)
  28.  
  29.          TheChoice := Menu(TheChoice)
  30.  
  31.          IF TheChoice = QUIT_MODE
  32.             EXIT
  33.  
  34.          ELSEIF TheChoice = ADD_MODE
  35.             Add(@TheFields)
  36.  
  37.          ELSEIF TheChoice = CHANGE_MODE
  38.             Change(@TheFields)
  39.  
  40.          ELSEIF TheChoice = DELETE_MODE
  41.             DeleteIt(@TheFields)
  42.  
  43.          ELSEIF TheChoice = EXIT_MODE
  44.             EXIT
  45.  
  46.          ENDIF
  47.       ENDDO
  48.    ENDIF
  49.  
  50.    Close_It()
  51.  
  52.    RETURN TRUE
  53.    
  54.  
  55. STATIC FUNCTION Fatal()
  56.    IF !Top_It('Supers')
  57.       ErrorMsg('UNABLE TO PROCEED, USE SUPERVISOR ENTRY MODULE TO ADD SUPERVISORS')
  58.  
  59.    ELSEIF !Top_It('Depart')
  60.       ErrorMsg('UNABLE TO PROCEED, USE DEPARTMENT ENTRY MODULE TO ADD DEPARTMENTS')
  61.  
  62.    ELSE
  63.       RETURN FALSE
  64.  
  65.    ENDIF
  66.  
  67.    RETURN TRUE
  68.  
  69.  
  70. STATIC FUNCTION Screen()
  71.    LOCAL OldColor
  72.  
  73.    Win_Open(0, 0, 23, 79, ' Employee Information ')
  74.    Msg("")
  75.  
  76.    OldColor := Normal_Color()
  77.  
  78.    @  5, 17 SAY 'Social Security Number :'
  79.    @  7, 30 SAY              'Last Name :'
  80.    @  9, 29 SAY             'First Name :'
  81.    @ 11, 28 SAY            'Dept Number :'
  82.    @ 13, 23 SAY       'Supervisor Number:'
  83.  
  84.      SetColor(OldColor)
  85.  
  86.    RETURN TRUE
  87.  
  88.  
  89. STATIC FUNCTION PostGets(TheFields, TheMode)
  90.    LOCAL OldColor, ThePicture, GetList
  91.  
  92.    OldColor := Get_Color()
  93.    GetList := {}
  94.  
  95.    @  5, 42 GET TheFields[EMP_NUM]                          ;
  96.             PICTURE '999-99-9999'                           ;
  97.             WHEN  (W_Emp_Num(TheMode))                      ;
  98.             VALID (V_Emp_Num(@TheFields, TheMode))
  99.  
  100.    @  7, 42 GET TheFields[LNAME]                            ;
  101.             PICTURE '@!'                                    ;
  102.             WHEN  (W_LName(TheMode, TheFields[EMP_NUM]))    ;
  103.             VALID (V_LName(@TheFields, TheMode))
  104.  
  105.    @  9, 42 GET TheFields[FNAME]                            ;
  106.             PICTURE '@!'                                    ;
  107.             WHEN  (W_FName(TheMode))                        ;
  108.             VALID (V_FName(@TheFields))
  109.  
  110.    ThePicture := Replicate('9', Len(TheFields[DEPT_NUM]))
  111.    @ 11, 42 GET TheFields[DEPT_NUM]                         ;
  112.             PICTURE ThePicture                              ;
  113.             WHEN  (W_Dept_Num(TheMode))                     ;
  114.             VALID (V_Dept_Num(@TheFields))
  115.  
  116.    ThePicture := Replicate('9', Len(TheFields[SUPER_NUM]))
  117.    @ 13, 42 GET TheFields[SUPER_NUM]                        ;
  118.             PICTURE ThePicture                              ;
  119.             WHEN  (W_Super_Num(TheMode))                    ;
  120.             VALID (V_Super_Num(@TheFields))
  121.  
  122.    Disp_Descr(TheFields, 'TheFields[DEPT_NAME]')
  123.    Disp_Descr(TheFields, 'TheFields[SUPER_NAME]')
  124.  
  125.    IF TheMode != DISPLAY_MODE
  126.       Read_It(GetList)
  127.  
  128.    ELSE
  129.       CLEAR GETS
  130.  
  131.    ENDIF
  132.  
  133.    SetColor(OldColor)
  134.  
  135.    RETURN !LastKey() = K_ESC
  136.  
  137.  
  138. STATIC FUNCTION Disp_Descr(TheFields, TheDescr)
  139.    LOCAL OldColor
  140.  
  141.    OldColor := Normal_Color()
  142.  
  143.    IF TheDescr == 'TheFields[DEPT_NAME]'
  144.       @ 11, 46 SAY '(' + TheFields[DEPT_NAME] + ')' 
  145.  
  146.    ELSEIF TheDescr == 'TheFields[SUPER_NAME]'
  147.       @ 13, 46 SAY  '(' + TheFields[SUPER_NAME] + ')' 
  148.  
  149.    ENDIF
  150.  
  151.    SetColor(OldColor)
  152.  
  153.    RETURN TRUE
  154.  
  155.  
  156. STATIC FUNCTION W_Emp_Num(TheMode)
  157.  
  158.    IF TheMode = UPDATE_MODE
  159.       RETURN FALSE
  160.    ENDIF
  161.  
  162.    Msg(Build_Msg("employee's", 'social security number', TheMode))
  163.  
  164.    RETURN TRUE
  165.  
  166.  
  167. STATIC FUNCTION W_LName(TheMode, TheNum)
  168.  
  169.    IF TheMode = UPDATE_MODE
  170.       RETURN FALSE
  171.  
  172.    ELSEIF TheMode = ENTRY_MODE
  173.  
  174.    ELSEIF !EMPTY_SS(TheNum)
  175.       RETURN FALSE
  176.  
  177.    ENDIF
  178.  
  179.    Msg(Build_Msg("employee's", 'last name', TheMode))
  180.  
  181.    RETURN TRUE
  182.  
  183.  
  184. STATIC FUNCTION W_FName(TheMode)
  185.  
  186.    IF TheMode = POSITION_MODE
  187.       RETURN FALSE
  188.    ENDIF
  189.  
  190.    Msg(Build_Msg("employee's", 'first name', TheMode))
  191.  
  192.    RETURN TRUE
  193.  
  194. STATIC FUNCTION W_Dept_Num(TheMode)
  195.  
  196.    IF TheMode = POSITION_MODE
  197.       RETURN FALSE
  198.    ENDIF
  199.  
  200.    Msg(Build_Msg("employee's", 'department number', TheMode))
  201.  
  202.    RETURN TRUE
  203.  
  204. STATIC FUNCTION W_Super_Num(TheMode)
  205.  
  206.    IF TheMode = POSITION_MODE
  207.       RETURN FALSE
  208.    ENDIF
  209.  
  210.      Msg(Build_Msg("employee's", 'supervisor number', TheMode))
  211.  
  212.    RETURN TRUE
  213.  
  214. STATIC FUNCTION V_Emp_Num(TheFields, TheMode)
  215.    LOCAL EmptyFlag
  216.  
  217.    IF EMPTY_SS(TheFields[EMP_NUM])
  218.       EmptyFlag := TRUE
  219.  
  220.    ELSEIF !FullString(TheFields[EMP_NUM])
  221.       RETURN ErrorMsg('INVALID SOCIAL SECURITY NUMBER')
  222.  
  223.    ELSE
  224.       EmptyFlag := FALSE
  225.  
  226.    ENDIF
  227.  
  228.    IF TheMode = POSITION_MODE
  229.       IF EmptyFlag
  230.          Top_It('Employee', 1)
  231.          TheFields[EMP_NUM] := Br_Employee()
  232.  
  233.       ELSEIF !Seek_It(TheFields[EMP_NUM], 'Employee', 1, TRUE)
  234.          TheFields[EMP_NUM] := Br_Employee()
  235.  
  236.       ENDIF
  237.  
  238.    ELSEIF EmptyFlag
  239.       RETURN ErrorMsg("MUST SPECIFY EMPLOYEE'S SOCIAL SECURITY NUMBER")
  240.  
  241.    ELSEIF !Seek_It(TheFields[EMP_NUM], 'Employee', 1)
  242.  
  243.    ELSEIF Employee->(RecNo()) = TheFields[RECORD_NUMBER]
  244.  
  245.    ELSE
  246.       RETURN ErrorMsg("DUPLICATE SOCIAL SECURITY NUMBER")
  247.  
  248.    ENDIF
  249.  
  250.    RETURN TRUE
  251.  
  252.  
  253. STATIC FUNCTION V_LName(TheFields, TheMode)
  254.    LOCAL TheLName, TheReturn
  255.  
  256.    IF LastKey() = K_UP
  257.       RETURN TRUE
  258.  
  259.    ELSEIF TheMode = POSITION_MODE
  260.  
  261.    ELSEIF Empty(TheFields[LNAME])
  262.       RETURN ErrorMsg("MUST SPECIFY EMPLOYEE'S LAST NAME")
  263.  
  264.    ELSE
  265.       RETURN TRUE
  266.  
  267.    ENDIF
  268.  
  269.    IF Empty(TheFields[LNAME])
  270.       Top_It('Employee', 2)
  271.       TheFields[LNAME] := Br_Employee()
  272.  
  273.    ELSEIF !Seek_It(TheFields[LNAME], 'Employee', 2, TRUE)
  274.       TheFields[LNAME] := Br_Employee()
  275.  
  276.    ELSEIF Skip_It(1, 'Employee', 2)
  277.       TheLName := Employee->LName
  278.       Skip_It(-1, 'Employee', 2)
  279.  
  280.       IF TheLName == TheFields[LNAME]
  281.          TheFields[LNAME] := Br_Employee()
  282.       ENDIF
  283.  
  284.    ENDIF
  285.  
  286.    IF Empty(TheFields[LNAME])
  287.       TheReturn := ErrorMsg("MUST SPECIFY EMPLOYEE'S SS NUMBER OR LAST NAME")
  288.    ELSE
  289.       TheReturn := TRUE
  290.    ENDIF
  291.  
  292.    RETURN TheReturn
  293.  
  294.  
  295. STATIC FUNCTION V_FName(TheFields)
  296.  
  297.    IF LastKey() = K_UP
  298.  
  299.    ELSEIF Empty(TheFields[FNAME])
  300.       RETURN ErrorMsg("MUST SPECIFY EMPLOYEE'S FIRST NAME")
  301.  
  302.    ENDIF
  303.  
  304.    RETURN TRUE
  305.  
  306.  
  307. STATIC FUNCTION V_Dept_Num(TheFields)
  308.    LOCAL TheReturn
  309.  
  310.    IF LastKey() = K_UP
  311.       RETURN TRUE
  312.  
  313.    ELSEIF Empty(TheFields[DEPT_NUM])
  314.       Top_It('Depart', 1)
  315.       TheFields[DEPT_NUM] := Br_Depart()
  316.  
  317.    ELSEIF !Seek_It(TheFields[DEPT_NUM], 'Depart', 1, TRUE)
  318.       TheFields[DEPT_NUM] := Br_Depart()
  319.  
  320.    ENDIF
  321.  
  322.    IF Empty(TheFields[DEPT_NUM])
  323.       TheFields[DEPT_NAME] := Pad('Unknown', Len(Depart->Dept_Name))
  324.       TheReturn := ErrorMsg("MUST SPECIFY EMPLOYEE'S DEPARTMENT NUMBER")
  325.    ELSE
  326.       TheFields[DEPT_NAME] := Depart->Dept_Name
  327.       TheReturn := TRUE
  328.    ENDIF
  329.  
  330.    Disp_Descr(TheFields, 'TheFields[DEPT_NAME]')
  331.  
  332.    RETURN TheReturn
  333.  
  334.  
  335. STATIC FUNCTION V_Super_Num(TheFields)
  336.    LOCAL TheReturn
  337.  
  338.    IF LastKey() = K_UP
  339.       RETURN TRUE
  340.  
  341.    ELSEIF Empty(TheFields[SUPER_NUM])
  342.       Top_It('Supers', 1)
  343.       TheFields[SUPER_NUM] := Br_Supers()
  344.  
  345.    ELSEIF !Seek_It(TheFields[SUPER_NUM], 'Supers', 1, TRUE)
  346.       TheFields[SUPER_NUM] := Br_Supers()
  347.  
  348.    ENDIF
  349.  
  350.    IF Empty(TheFields[SUPER_NUM])
  351.       TheFields[SUPER_NAME] := Pad('Unknown', Len(Supers->SName))
  352.       TheReturn := ErrorMsg("MUST SPECIFY EMPLOYEE'S SUPERVISOR NUMBER")
  353.    ELSE
  354.       TheFields[SUPER_NAME] := Supers->SName
  355.       TheReturn := TRUE
  356.    ENDIF
  357.  
  358.    Disp_Descr(TheFields, 'TheFields[SUPER_NAME]')
  359.  
  360.    RETURN TheReturn
  361.  
  362.  
  363. FUNCTION Br_Employee()
  364.    LOCAL TheArray, OldMsg, TheReturn
  365.  
  366.    TheArray := {}
  367.    Select_It('Employee')
  368.  
  369.    AAdd(TheArray, { "First Name", { ||           Employee->FName      } })
  370.    AAdd(TheArray, { "Last Name" , { ||           Employee->LName      } })
  371.    AAdd(TheArray, { "Number"    , { ||           Employee->Emp_Num    } })
  372.    AAdd(TheArray, { "Department", { || Get_Dept( Employee->Dept_Num ) } })
  373.    AAdd(TheArray, { "Supervisor", { || Get_Super(Employee->Super_Num) } })
  374.  
  375.    OldMsg := Msg('Select the correct employee from the above list')
  376.  
  377.    TheReturn := Browse_Tb(TheArray, 4, 9, 17, 71, ' Select employee ')
  378.    Msg(OldMsg)
  379.  
  380.    RETURN TheReturn
  381.  
  382.  
  383. STATIC FUNCTION InitData(TheFields, TheMode)
  384.  
  385.    Select_It('Employee')
  386.  
  387.    IF TheMode
  388.       TheFields[FNAME]         := Employee->FName    
  389.       TheFields[LNAME]         := Employee->LName    
  390.       TheFields[EMP_NUM]       := Employee->Emp_Num  
  391.       TheFields[DEPT_NUM]      := Employee->Dept_Num 
  392.       TheFields[SUPER_NUM]     := Employee->Super_Num
  393.       TheFields[RECORD_NUMBER] := Employee->(RecNo())
  394.  
  395.       IF Seek_It(Employee->Dept_Num, 'Depart', 1)
  396.          TheFields[DEPT_NAME] := Depart->Dept_Name
  397.       ELSE
  398.          TheFields[DEPT_NAME] := Pad('Unknown', Len(Depart->Dept_Name))
  399.       ENDIF
  400.  
  401.       IF Seek_It(Employee->Super_Num, 'Supers', 1)
  402.          TheFields[SUPER_NAME] := Supers->SName
  403.       ELSE
  404.          TheFields[SUPER_NAME] := Pad('Unknown', Len(Supers->SName))
  405.       ENDIF
  406.  
  407.    ELSE
  408.       TheFields[FNAME]         := Space(Len(Employee->FName))
  409.       TheFields[LNAME]         := Space(Len(Employee->LName))
  410.       TheFields[EMP_NUM]       := Space(Len(Employee->Emp_Num))
  411.       TheFields[DEPT_NUM]      := Space(Len(Employee->Dept_Num))
  412.       TheFields[SUPER_NUM]     := Space(Len(Employee->Super_Num))
  413.       TheFields[RECORD_NUMBER] := 0
  414.  
  415.       Select_It('Depart')
  416.       TheFields[DEPT_NAME]  := Space(Len(Depart->Dept_Name))
  417.  
  418.       Select_It('Supers')
  419.       TheFields[SUPER_NAME] := Space(Len(Supers->SName))
  420.  
  421.    ENDIF
  422.  
  423.    RETURN TRUE
  424.  
  425.  
  426. STATIC FUNCTION Menu(TheChoice)
  427.    LOCAL TheScreen, OldColor, TheWrap
  428.  
  429.    TheWrap := Set(_SET_WRAP)
  430.    SET WRAP (FALSE)
  431.  
  432.    TheScreen := Win_Open(20, 2, 22, 38, ' Select ')
  433.    Msg('Select a menu option')
  434.  
  435.    OldColor := Menu_Color()
  436.  
  437.    @ 21,  4 PROMPT ' Add '
  438.    @ 21, 11 PROMPT ' Change '
  439.    @ 21, 21 PROMPT ' Delete '
  440.    @ 21, 31 PROMPT ' Exit '
  441.  
  442.    MENU TO TheChoice
  443.  
  444.    SetColor(OldColor)
  445.    Win_Close(TheScreen)
  446.    SET WRAP (TheWrap)
  447.  
  448.    RETURN TheChoice
  449.  
  450.  
  451. STATIC FUNCTION Add(TheFields)
  452.  
  453.    Msg('Enter employee information')
  454.    DO WHILE TRUE
  455.       IF !PostGets(@TheFields, ENTRY_MODE)
  456.          IF Confirm(16, 30, 'Abort', ;
  457.                     'Do you want to abort data entry?')
  458.             EXIT
  459.          ENDIF
  460.       ELSEIF !Confirm(16, 30, 'Save', ;
  461.                       'Is the above information correct?')
  462.       ELSEIF Save(@TheFields, 0)
  463.          InitData(@TheFields, FALSE)
  464.       ENDIF
  465.    ENDDO
  466.  
  467.    RETURN TRUE
  468.  
  469.  
  470. STATIC FUNCTION Change(TheFields)
  471.  
  472.    IF Position(@TheFields)
  473.       Msg('Change employee information')
  474.       DO WHILE TRUE
  475.          IF !PostGets(@TheFields, UPDATE_MODE)
  476.             IF Confirm(16, 30, 'Abort', ;
  477.                        'Do you want to abort data entry?')
  478.                EXIT
  479.             ENDIF
  480.          ELSEIF !Confirm(16, 30, 'Save', ;
  481.                          'Is the above information correct?')
  482.          ELSEIF Save(@TheFields)
  483.             EXIT
  484.          ENDIF
  485.       ENDDO
  486.    ENDIF
  487.  
  488.    RETURN TRUE
  489.  
  490.  
  491. STATIC FUNCTION DeleteIt(TheFields)
  492.  
  493.    IF Position(@TheFields)
  494.       PostGets(@TheFields, DISPLAY_MODE)
  495.       IF Confirm(16, 30, 'Delete'                                  , ;
  496.                  'Are you sure you want to delete this department?', ;
  497.                  FALSE)
  498.          Delete_It('Employee')
  499. //--------- delete all of the expense information also!
  500.       ENDIF
  501.    ENDIF
  502.  
  503.    RETURN TRUE
  504.  
  505.  
  506. STATIC FUNCTION Position(TheFields)
  507.  
  508.    Msg('Enter employee number or last name')
  509.  
  510.    IF !PostGets(@TheFields, POSITION_MODE)
  511.       RETURN FALSE
  512.    ENDIF
  513.  
  514.    InitData(@TheFields, TRUE)
  515.  
  516.    RETURN TRUE
  517.  
  518.  
  519. STATIC FUNCTION Save(TheFields)
  520.  
  521.    IF TheFields[RECORD_NUMBER] > 0
  522.       GoTo_It(TheFields[RECORD_NUMBER], 'Employee')
  523.  
  524.    ELSEIF !Append_It('Employee')
  525.       RETURN ErrorMsg('UNABLE TO ADD EMPLOYEE')
  526.  
  527.    ENDIF
  528.  
  529.    Employee->FName     := TheFields[FNAME]
  530.    Employee->LName     := TheFields[LNAME]
  531.    Employee->Emp_Num   := TheFields[EMP_NUM]
  532.    Employee->Dept_Num  := TheFields[DEPT_NUM]
  533.    Employee->Super_Num := TheFields[SUPER_NUM]
  534.  
  535.    COMMIT
  536.  
  537.    RETURN TRUE
  538. 
  539.