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;
|