COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;

ALTER PROCEDURE IMPTIMDAT 
(
  DUMMY1 INTEGER
)
RETURNS
(
  DUMMY2 INTEGER
)
AS
declare variable EmpMasLab varchar(15);
declare variable LoDat  date;
declare variable HiDat  date;
declare variable EmpMasKey integer;
declare variable WrkDat    date;
declare variable JobLab    varchar(15);
declare variable DepLab    varchar(15);
declare variable RegTim    integer;
declare variable OvtTim    integer;
declare variable Ovt2Tim   integer;
declare variable OthTim    integer;
declare variable JobKey    integer;
declare variable ModKey    integer;
declare variable DepKey    integer;
declare variable EveCurKey integer;
declare variable ImpScrTimDatKey integer;
declare variable ImpStsVal integer;
declare variable ImpStsDes varchar(128);
begin
  /* Acquire imported punch date range from Date Range scratch table */
  SELECT
    min(idr.LoDat),
    min(idr.HiDat)
  FROM
    ImpScrTimDatRng idr
  INTO
   :LoDat,
   :HiDat;
  /* Get list of employees not named in the Date Range scratch table. (They have no punch activity.) */
  For
  SELECT
    em.EmpMasKey,
    em.EmpMasLab
  FROM
    EmpMas em
  WHERE
    em.HidRec='F'
    and em.EmpMasLab not in (SELECT distinct EmpMasLab FROM ImpScrTimDatRng)  /* added distinct 11-14-01 */
  INTO
    :EmpMasKey,
    :EmpMasLab
  do
  begin
    /* Zero out hours for those employees with no punch activity */
    UPDATE
      EveCur
    SET
      TotTim=0,
      RegTim=0,
      OvtTim=0,
      Ovt2Tim=0,
      OthTim=0
    WHERE EmpMasKey=:EmpMasKey
      and WrkDat>=:LoDat
      and WrkDat<=:HiDat;
  end
  /* Loop through list of employees that are named in the Date Range scratch table. (They do have punch activity.) */
  For
  SELECT
    idr.EmpMasLab,
    min(idr.LoDat),
    min(idr.HiDat)
  FROM
    ImpScrTimDatRng idr
  group by
    idr.EmpMasLab
  INTO
    :EmpMasLab,
    :LoDat,
    :HiDat
  do
  begin /* Employee Loop */
    ImpStsVal=0;
    ImpStsDes=' ';
    /* Trap bad Employee Code. */
    if (ImpStsVal=0) then
    begin
      SELECT
        min(EmpMasKey)
      FROM
        EmpMas
      WHERE
        EmpMasLab=:EmpMasLab
        and HidRec='F' INTO :EmpMasKey;
      If (EmpMasKey is null) then
      begin
        ImpStsVal = -1;
        ImpStsDes = 'Employee '|| EmpMasLab || ' Not Found';
        UPDATE
         ImpScrTimDat
        SET
          ImpStsVal=:ImpStsVal,
          ImpStsDes=:ImpStsDes
        WHERE
          ImpScrTimDat.EmpMasLab=:EmpMasLab;
      end
    end
    /* Process this confirmed Employee. */
    if (ImpStsVal=0) then
    begin /* Confirmed Employee code */
     /* Clear hours for this Employee. */
      UPDATE
        EveCur
      SET
        TotTim=0,
        RegTim=0,
        OvtTim=0,
        Ovt2Tim=0,
        OthTim=0
      WHERE
        EmpMasKey=:EmpMasKey
        and WrkDat>=:LoDat
        and WrkDat<=:HiDat ;
      /* Load Scratch data for this Employee. */
      for
      SELECT
        iec.ImpScrTimDatKey,
        iec.WrkDat,
        iec.JobLab,
        iec.DepLab,
        iec.RegTim,
        iec.OvtTim,
        iec.Ovt2Tim,
        iec.OthTim
      FROM
        ImpScrTimDat iec
      WHERE
        iec.EmpMasLab=:EmpMasLab
      INTO
        :ImpScrTimDatKey,
        :WrkDat,
        :JobLab,
        :DepLab,
        :RegTim,
        :OvtTim,
        :Ovt2Tim,
        :OthTim
      do
      begin /* Scratch data loop */
        ImpStsVal=0;
        ImpStsDes=' ';
        if (RegTim is null) then
          RegTim=0;
        if (OvtTim is null) then
          OvtTim=0;
        if (Ovt2Tim is null) then
          Ovt2Tim=0;
        if (OthTim is null) then
          OthTim=0;
        /* Trap Null JobLab. */
        if (ImpStsVal=0) then
        begin
          if (JobLab is null) then
          begin
            ImpStsVal = -1;
            ImpStsDes = 'Pay Condition Not Defined';
          end
        end
        /* Trap Null DepLab. */
        if (ImpStsVal=0) then
        begin
          if (DepLab is null) then
          begin
            ImpStsVal = -1;
            ImpStsDes = 'Department Code Not Defined';
          end
        end
         /* Trap Bad JobLab. */
        if (ImpStsVal=0) then
        begin
          SELECT
            min(JobKey)
          FROM
            job
          WHERE
            JobLab=:JobLab
          INTO
            :JobKey;
          If (JobKey is null) then
          begin
            ImpStsVal = -1;
            ImpStsDes = 'Job '|| JobLab || ' Not Found';
          end
        end
        /* Trap Bad DepLab. */
        if (ImpStsVal=0) then
        begin
          SELECT
            min(DepKey)
          FROM
            dep$
          WHERE
            DepLab=:DepLab
          INTO
            :DepKey;
          SELECT
            min(ModKey)
          FROM
            mod$
          WHERE
            DepKey=:DepKey
            and HidRec='T'
          INTO
            :ModKey;
          If (ModKey is null) then
          begin
            ImpStsVal = -1;
            ImpStsDes = 'Department '|| DepLab || ' Not Found';
          end
        end
        /* UPDATE or Insert Punch Records. */
        if (ImpStsVal=0) then
        begin
          SELECT
            min(ec.EveCurKey)
          FROM
            EveCur ec
          WHERE
            ec.EmpMasKey=:EmpMasKey
            and ec.WrkDat=:WrkDat
            and ec.JobKey=:JobKey
            and ec.ModKey=:ModKey
          INTO
            :EveCurKey;
          If (EveCurKey is null) then
          begin
            insert INTO EveCur (EmpMasKey,
              WrkDat,
              JobKey,
              ModKey,
              TotTim,
              RegTim,
              OvtTim,
              Ovt2Tim,
              OthTim)
            values(
              :EmpMasKey,
              :WrkDat,
              :JobKey,
              :ModKey,
              :RegTim+:OthTim,
              :RegTim,
              :OvtTim,
              :Ovt2Tim,
              :OthTim);
            ImpStsVal=1;
            ImpStsDes='Inserted';
          end
          else
          begin
            UPDATE
              EveCur
            SET
              TotTim=:RegTim+:OthTim,
              RegTim=:RegTim,
              OvtTim=:OvtTim,
              Ovt2Tim=:Ovt2Tim,
              OthTim=:OthTim
            WHERE EveCurKey=:EveCurKey;
               ImpStsVal=2;
               ImpStsDes='Updated';
          end
        end /* UPDATE or Insert Punch Records. */
        UPDATE
          ImpScrTimDat
        SET
          ImpStsVal=:ImpStsVal,
          ImpStsDes=:ImpStsDes
        WHERE
          ImpScrTimDatKey=:ImpScrTimDatKey;
      end /* Scratch data loop */
    end /* Confirmed Employee code */
  end /* Employee Code Loop */
end
 ^

SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;