Oracle 代码无法编译,请帮助我

问题描述 投票:0回答:1
CREATE OR REPLACE PACKAGE BODY PKG_ATTENDANCE_DASHBOARD AS  
PROCEDURE Proc_Dashboard(
      V_CommandType         VARCHAR2,
      V_LoginId             VARCHAR2,
      V_SignType            VARCHAR2,
      V_AttendanceDate      DATE,
      V_Year                VARCHAR2,
      V_Month               VARCHAR2,
      V_IPAddress           VARCHAR2,
      V_LogonUserName       VARCHAR2,
      V_WorkLocation        VARCHAR2,
      V_WorkLocationType    VARCHAR2,
      V_Company             VARCHAR2,
      V_UserType            VARCHAR2,
      V_ShiftName           VARCHAR2,
      V_Self_Covid_Status   VARCHAR2,
      V_Self_Covid_Remark   VARCHAR2,
      V_Family_Covid_Status VARCHAR2,
      V_Family_Covid_Remark VARCHAR2,
      V_UpdatedBy           VARCHAR2
      /*  curGetCalendar OUT SYS_REFCURSOR,
      curGetCovidStatus OUT SYS_REFCURSOR,
      curListCompanyName OUT SYS_REFCURSOR,
      curListTowerName OUT SYS_REFCURSOR,
      curAttendanceListByDate OUT SYS_REFCURSOR*/
    )   AS
    V_Date DATE := TO_DATE (V_Year || '-' || V_Month || '-01', 'yyyy-mm-dd');   BEGIN
    IF V_CommandType = 'getCalendar' THEN
    
    WITH DaysInMonth (dates) AS
      (SELECT V_Date AS dates FROM DUAL
      UNION ALL
      SELECT INTERVAL '1' DAY (5) + dates
      FROM DaysInMonth
      WHERE EXTRACT (MONTH FROM dates) = EXTRACT (MONTH FROM V_Date)
      )
    SELECT dates FROM DaysInMonth;
    
    INSERT INTO T_ATTENDANCE_ATTENDANCE
    
      (
        LoginId,
        AttendanceDate,
        ShiftName,
        ShiftStartTime,
        ShiftEndTime,
        Active,
        AttendanceStatus
      )
    SELECT u.LoginID,
      d.dates,
      '' ,
      NULL,
      NULL,
      1,
      'Approved'
    FROM DaysInMonth d
    CROSS JOIN T_ATTENDANCE_USER_MASTER u
    WHERE extract(MONTH FROM dates) = extract(MONTH FROM V_Date)
    AND LoginId                     = V_LoginId
    AND NOT EXISTS
      (SELECT LoginId
      FROM T_ATTENDANCE_ATTENDANCE
      WHERE LoginId                          = V_LoginId
      AND EXTRACT(YEAR FROM ATTENDANCEDATE ) = extract(YEAR FROM V_Date)
      AND EXTRACT(MONTH FROM AttendanceDate) = extract(MONTH FROM V_Date)
      AND ACTIVE                             = 1
      );



    V_Date := INTERVAL '1' MONTH + V_Date;


  WITH DaysInMonth (dates) AS
    (SELECT V_Date AS dates FROM dual
    UNION ALL
    SELECT INTERVAL '1' DAY(5) + dates
    FROM DaysInMonth
    WHERE EXTRACT(MONTH FROM dates) = extract(MONTH FROM V_Date)
    )   SELECT dates FROM DaysInMonth;
      INSERT INTO T_ATTENDANCE_ATTENDANCE
    (
      LoginId,
      AttendanceDate,
      ShiftName,
      ShiftStartTime,
      ShiftEndTime,
      Active,
      AttendanceStatus
    )   SELECT u.LoginID,
    d.dates,
    '',
    NULL,
    NULL,
    1,
    'Approved'   FROM DaysInMonth d   CROSS JOIN T_ATTENDANCE_USER_MASTER u   WHERE extract(MONTH FROM dates) =
extract(MONTH FROM V_Date)   AND LoginId                     =
V_LoginId   AND NOT EXISTS
    (SELECT LoginId
    FROM T_ATTENDANCE_ATTENDANCE
    WHERE LoginId                          = V_LoginId
    AND EXTRACT(YEAR FROM ATTENDANCEDATE ) = extract(YEAR FROM V_date)
    AND EXTRACT(MONTH FROM AttendanceDate) = extract(MONTH FROM V_date)
    AND ACTIVE                             = 1
    );   OPEN curGetCalendar FOR SELECT AttendanceDate,   ShiftName,   TO_CHAR(AttendanceDate,'ddd') DAY,   V_Year,   V_Month ,  
TO_CHAR(SignIn, 'yyyy-MM-dd hh:mm:ss tt') SignIn,   TO_CHAR(SignOut,
'yyyy-MM-dd hh:mm:ss tt') SignOut FROM T_ATTENDANCE_ATTENDANCE WHERE
LoginId = V_LoginId AND EXTRACT(YEAR FROM ATTENDANCEDATE) = V_Year
AND EXTRACT(MONTH FROM AttendanceDate) = V_Month AND ACTIVE = 1
order by AttendanceDate ASC;


  update a set   a.shiftname =    (select case when
to_char(to_date(a.attendancedate) ,'DAY') in ('SATURDAY') and a.week
in (2,4) then 'WEEKLYOFF'
               when to_char(to_date(a.attendancedate),'WW')   in ('SUNDAY') then 'WEEKLYOFF'
               else 'GENERAL1' 
          end    from (select attendancedate,
                shiftname, 
                row_number() over (partition by to_char(to_date(attendancedate,'DAY')) order by attendancedate) as
week 
         from T_ATTENDANCE_ATTENDANCE a1
           left join T_ATTENDANCE_USER_MASTER u     on u.loginid = a1.loginid
           left join T_ATTENDANCE_EMPLOYEE_MASTER e on e.empid   = u.empid 
         where a1.loginid = V_loginid 
           and e.company is null
           and extract (year from attendancedate)  = extract (year from sysdate) 
           and extract (month from attendancedate) = extract (month from sysdate) 
           and nvl(shiftname,'x') = 'x'
        ) a   ); 


ELSE IF V_CommandType = 'UpdateAttendance'  THEN
     Select case when SignOut is null then INTERVAL '-1' Day(5) +p_AttendanceDate  else V_AttendanceDate end Into V_AttendanceDate      from T_ATTENDANCE_ATTENDANCE      where upper(ShiftName) = 'NIGHT'
and LoginId = V_LoginId and AttendanceDate = INTERVAL '-1' Day(5)
+V_AttendanceDate and V_SignType = 'SIGNOUT' and Active = 1;  
       UPDATE T_ATTENDANCE_ATTENDANCE      SET SignIn = CASE WHEN V_SignType = 'SIGNIN' and SignIn is null then systimestamp else
SignIn end,      SignOut = CASE WHEN V_SignType = 'SIGNOUT' and
signout is null then systimestamp else SignOut end,      IpAddress =
case when nvl(IpAddress,'') = '' then V_IPAddress else
IpAddress||','||V_IPAddress end ,       LogonUserName = case when
nvl(LogonUserName,'') = '' then V_LogonUserName else
LogonUserName||','||V_LogonUserName end,   WorkLocation = CASE WHEN
V_SignType = 'SIGNIN' then V_WorkLocation else WorkLocation end,    
WorkLocationType = CASE WHEN V_SignType = 'SIGNIN' then
V_WorkLocationType else WorkLocationType end         ,ShiftName =
CASE WHEN V_SignType = 'SIGNIN' and nvl(ShiftName,'') = '' then
V_ShiftName  else ShiftName end     Where AttendanceDate =
V_AttendanceDate     and LoginId = V_LoginId     and Active = 1;  
  
     

  update T_ATTENDANCE_ATTENDANCE set ShiftName = 'LEAVE' where
AttendanceDate < SYSTIMESTAMP -2      And SignIn is null and SignOut
is null     and ShiftName in ('MORNING','AFTERNOON1',
'AFTERNOON2','GENERAL1','GENERAL2', 'NIGHT');   
  
  
  

  insert into T_ATTENDANCE_USER_COVID_STATUS (LoginId,
AttendanceDate, Self_Covid_Status,
Self_Covid_Remark,Family_Covid_Status,
Family_Covid_Remark,UpdatedOn, UpdatedBy)     select V_LoginId,
V_AttendanceDate, V_Self_Covid_Status, V_Self_Covid_Remark,
V_Family_Covid_Status,V_Family_Covid_Remark, SYSTIMESTAMP,
upper(V_LoginId) from dual where V_SignType = 'SIGNIN';   
    
    
        END IF;   IF V_CommandType = 'GetCovidStatus' THEN   --    OPEN cur2 FOR SELECT E1.FirstName || ' ' || E1.LastName UpdatedBy,  
C.*,   E.FirstName || ' ' || E.LastName FullName FROM
T_ATTENDANCE_USER_COVID_STATUS C    left join
T_ATTENDANCE_USER_MASTER U ON U.LoginID = C.LoginId AND U.IsActive =
'Y'    left join T_ATTENDANCE_EMPLOYEE_MASTER E ON E.EmpID = U.EmpID
AND E.IsActive = 'Y'    left join T_ATTENDANCE_USER_MASTER U1 ON
U1.LoginID = C.UpdatedBy AND U1.IsActive = 'Y'    left join
T_ATTENDANCE_EMPLOYEE_MASTER E1 ON E1.EmpId = U1.EmpId AND
E1.IsActive = 'Y'    WHERE C.LoginId = V_LoginId AND
C.AttendanceDate = SUBSTR(TO_CHAR (systimestamp, 'yyyy-mm-dd
hh24:mi:ss.ff3'), 1, 10); END IF;


IF V_CommandType = 'UpdateCovidStatus' THEN
     IF NOT EXISTS
    (SELECT 1
    FROM T_ATTENDANCE_USER_COVID_STATUS
    WHERE AttendanceDate = V_AttendanceDate
    AND LoginId          = V_LoginId
    ) THEN
   
   
    INSERT INTO   T_ATTENDANCE_USER_COVID_STATUS

      (
        LoginId,
        AttendanceDate,
        Self_Covid_Status,
        Self_Covid_Remark,
        Family_Covid_Status,
        Family_Covid_Remark,
        UpdatedOn,
        UpdatedBy
      )
    SELECT V_LoginId,
      V_AttendanceDate,
      V_Self_Covid_Status,
      V_Self_Covid_Remark,
      V_Family_Covid_Status,
      V_Family_Covid_Remark,
      SYSTIMESTAMP,
      upper(V_UpdatedBy)
    FROM dual;   ELSE
    UPDATE T_ATTENDANCE_USER_COVID_STATUS
    SET self_Covid_Status = V_Self_Covid_Status,
      Self_Covid_Remark   = V_Self_Covid_Remark,
      Family_Covid_Status = V_Family_Covid_Status,
      Family_Covid_Remark = V_Family_Covid_Remark,
      UpdatedOn           = SYSTIMESTAMP,
      UpdatedBy           = V_UpdatedBy
    WHERE AttendanceDate  = V_AttendanceDate
    AND LoginId           = V_LoginId;   END IF; END IF;



IF V_CommandType = 'GetCompany' THEN
     OPEN cur3 FOR SELECT 1 AS   sr, upper(CompanyName) CompanyName FROM T_ATTENDANCE_COMPANYS
     UNION   SELECT 0, 'All Companies' FROM dual ORDER BY sr ASC; END IF;


IF V_CommandType = 'TeamAvailability' THEN
 
    OPEN cur4 FOR SELECT TowerPk,   rtrim(ltrim(TowerName)) TowerName FROM T_ATTENDANCE_TOWER_MASTER WHERE IsActive = 'Y'  
UNION   SELECT 0, 'Admin' FROM dual ORDER BY TowerName ASC;
    OPEN cur5 FOR    SELECT E.FirstName || ' ' || E.LastName AS  Name,E.ContactNo ,r.RoleName AS Role ,   A.ShiftName,   A.SignIn,  
A.SignOut,   NVL(T.TowerName, 'Admin') TowerName,   Upper(E.Company)
AS   Company,   WorkLocation,   WorkLocationType,  
Covid.Self_Covid_Status,   Covid. Family_Covid_Status FROM   
T_ATTENDANCE_ATTENDANCE A JOIN T_ATTENDANCE_USER_MASTER U    ON
A.LoginId = U.LoginID AND U.IsActive = 'Y'    JOIN
T_ATTENDANCE_EMPLOYEE_MASTER E ON U.EmpID = E.EmpID AND   
E.IsActive = 'Y' Left join T_ATTENDANCE_USER_ATTENDANCE_TEAM uat   
ON uat.LoginId = u.LoginID AND uat.isActive = 'Y'    LEFT JOIN
T_ATTENDANCE_TOWER_MASTER T ON T.TowerPk = uat.TowerPk    JOIN
T_ATTENDANCE_ROLE_MASTER R ON R.RolePk = u.RolePk    left join
T_ATTENDANCE_USER_COVID_STATUS Covid ON Covid.LoginId = A.LoginId   
AND Covid.AttendanceDate = a.AttendanceDate WHERE a.AttendanceDate =
     CASE   WHEN TO_NUMBER(TO_CHAR(SYSTIMESTAMP, 'HOUR')) < 7 THEN
    INTERVAL '-1' DAY(5) + V_AttendanceDate   ELSE
    V_AttendanceDate   END 
     AND a.Active = 1 AND E.Company =   CASE V_Company   WHEN 'All Companies' THEN
    E.Company   ELSE
    V_Company   END AND ((NVL(V_UserType,'Consultant') = 'Consultant' AND E.Company NOT IN ('')) OR
(NVL(p_UserType,'Employee') = 'Employee' AND E.Company = '')) ORDER BY T.TowerName ,   A.SignIn DESC; END IF; END
Proc_Dashboard; END PKG_ATTENDANCE_DASHBOARD;
sql oracle oracle11g oracle10g
1个回答
0
投票

如果您使用像样的编辑器,代码格式化程序会显示一些错误,例如

  • 列别名不能是
    day
    ,
  • 您评论了打开引用游标语句并单独保留了列
  • 失踪了
    end if

修复后,代码看起来像这样,但我不知道它是否会编译,因为我们没有您的表。

CREATE OR REPLACE PACKAGE BODY PKG_ATTENDANCE_DASHBOARD
AS
   PROCEDURE Proc_Dashboard (V_CommandType          VARCHAR2,
                             V_LoginId              VARCHAR2,
                             V_SignType             VARCHAR2,
                             V_AttendanceDate       DATE,
                             V_Year                 VARCHAR2,
                             V_Month                VARCHAR2,
                             V_IPAddress            VARCHAR2,
                             V_LogonUserName        VARCHAR2,
                             V_WorkLocation         VARCHAR2,
                             V_WorkLocationType     VARCHAR2,
                             V_Company              VARCHAR2,
                             V_UserType             VARCHAR2,
                             V_ShiftName            VARCHAR2,
                             V_Self_Covid_Status    VARCHAR2,
                             V_Self_Covid_Remark    VARCHAR2,
                             V_Family_Covid_Status  VARCHAR2,
                             V_Family_Covid_Remark  VARCHAR2,
                             V_UpdatedBy            VARCHAR2 /*  curGetCalendar OUT SYS_REFCURSOR,
                                                             curGetCovidStatus OUT SYS_REFCURSOR,
                                                             curListCompanyName OUT SYS_REFCURSOR,
                                                             curListTowerName OUT SYS_REFCURSOR,
                                                             curAttendanceListByDate OUT SYS_REFCURSOR*/
                                                            )
   AS
      V_Date  DATE := TO_DATE (V_Year || '-' || V_Month || '-01', 'yyyy-mm-dd');
   BEGIN
      IF V_CommandType = 'getCalendar'
      THEN
         WITH
            DaysInMonth (dates)
            AS
               (SELECT V_Date AS dates FROM DUAL
                UNION ALL
                SELECT INTERVAL '1' DAY (5) + dates
                  FROM DaysInMonth
                 WHERE EXTRACT (MONTH FROM dates) = EXTRACT (MONTH FROM V_Date))
         SELECT dates
           FROM DaysInMonth;

         INSERT INTO T_ATTENDANCE_ATTENDANCE (LoginId,
                                              AttendanceDate,
                                              ShiftName,
                                              ShiftStartTime,
                                              ShiftEndTime,
                                              Active,
                                              AttendanceStatus)
            SELECT u.LoginID,
                   d.dates,
                   '',
                   NULL,
                   NULL,
                   1,
                   'Approved'
              FROM DaysInMonth d CROSS JOIN T_ATTENDANCE_USER_MASTER u
             WHERE     EXTRACT (MONTH FROM dates) = EXTRACT (MONTH FROM V_Date)
                   AND LoginId = V_LoginId
                   AND NOT EXISTS
                          (SELECT LoginId
                             FROM T_ATTENDANCE_ATTENDANCE
                            WHERE     LoginId = V_LoginId
                                  AND EXTRACT (YEAR FROM ATTENDANCEDATE) =
                                      EXTRACT (YEAR FROM V_Date)
                                  AND EXTRACT (MONTH FROM AttendanceDate) =
                                      EXTRACT (MONTH FROM V_Date)
                                  AND ACTIVE = 1);



         V_Date := INTERVAL '1' MONTH + V_Date;


         WITH
            DaysInMonth (dates)
            AS
               (SELECT V_Date AS dates FROM DUAL
                UNION ALL
                SELECT INTERVAL '1' DAY (5) + dates
                  FROM DaysInMonth
                 WHERE EXTRACT (MONTH FROM dates) = EXTRACT (MONTH FROM V_Date))
         SELECT dates
           FROM DaysInMonth;

         INSERT INTO T_ATTENDANCE_ATTENDANCE (LoginId,
                                              AttendanceDate,
                                              ShiftName,
                                              ShiftStartTime,
                                              ShiftEndTime,
                                              Active,
                                              AttendanceStatus)
            SELECT u.LoginID,
                   d.dates,
                   '',
                   NULL,
                   NULL,
                   1,
                   'Approved'
              FROM DaysInMonth d CROSS JOIN T_ATTENDANCE_USER_MASTER u
             WHERE     EXTRACT (MONTH FROM dates) = EXTRACT (MONTH FROM V_Date)
                   AND LoginId = V_LoginId
                   AND NOT EXISTS
                          (SELECT LoginId
                             FROM T_ATTENDANCE_ATTENDANCE
                            WHERE     LoginId = V_LoginId
                                  AND EXTRACT (YEAR FROM ATTENDANCEDATE) =
                                      EXTRACT (YEAR FROM V_date)
                                  AND EXTRACT (MONTH FROM AttendanceDate) =
                                      EXTRACT (MONTH FROM V_date)
                                  AND ACTIVE = 1);

         OPEN curGetCalendar FOR
              SELECT AttendanceDate,
                     ShiftName,
                     TO_CHAR (AttendanceDate, 'ddd') cDAY,
                     V_Year,
                     V_Month,
                     TO_CHAR (SignIn, 'yyyy-MM-dd hh:mm:ss tt') SignIn,
                     TO_CHAR (SignOut, 'yyyy-MM-dd hh:mm:ss tt') SignOut
                FROM T_ATTENDANCE_ATTENDANCE
               WHERE     LoginId = V_LoginId
                     AND EXTRACT (YEAR FROM ATTENDANCEDATE) = V_Year
                     AND EXTRACT (MONTH FROM AttendanceDate) = V_Month
                     AND ACTIVE = 1
            ORDER BY AttendanceDate ASC;


         UPDATE a
            SET a.shiftname =
                   (SELECT CASE
                              WHEN     TO_CHAR (TO_DATE (a.attendancedate), 'DAY') IN
                                          ('SATURDAY')
                                   AND a.week IN (2, 4)
                              THEN
                                 'WEEKLYOFF'
                              WHEN TO_CHAR (TO_DATE (a.attendancedate), 'WW') IN
                                      ('SUNDAY')
                              THEN
                                 'WEEKLYOFF'
                              ELSE
                                 'GENERAL1'
                           END
                      FROM (SELECT attendancedate,
                                   shiftname,
                                   ROW_NUMBER ()
                                      OVER (
                                         PARTITION BY TO_CHAR (
                                                         TO_DATE (attendancedate, 'DAY'))
                                         ORDER BY attendancedate) AS week
                              FROM T_ATTENDANCE_ATTENDANCE  a1
                                   LEFT JOIN T_ATTENDANCE_USER_MASTER u
                                      ON u.loginid = a1.loginid
                                   LEFT JOIN T_ATTENDANCE_EMPLOYEE_MASTER e
                                      ON e.empid = u.empid
                             WHERE     a1.loginid = V_loginid
                                   AND e.company IS NULL
                                   AND EXTRACT (YEAR FROM attendancedate) =
                                       EXTRACT (YEAR FROM SYSDATE)
                                   AND EXTRACT (MONTH FROM attendancedate) =
                                       EXTRACT (MONTH FROM SYSDATE)
                                   AND NVL (shiftname, 'x') = 'x') a);
      ELSE
         IF V_CommandType = 'UpdateAttendance'
         THEN
            SELECT CASE
                      WHEN SignOut IS NULL THEN INTERVAL '-1' DAY (5) + p_AttendanceDate
                      ELSE V_AttendanceDate
                   END
              INTO V_AttendanceDate
              FROM T_ATTENDANCE_ATTENDANCE
             WHERE     UPPER (ShiftName) = 'NIGHT'
                   AND LoginId = V_LoginId
                   AND AttendanceDate = INTERVAL '-1' DAY (5) + V_AttendanceDate
                   AND V_SignType = 'SIGNOUT'
                   AND Active = 1;

            UPDATE T_ATTENDANCE_ATTENDANCE
               SET SignIn =
                      CASE
                         WHEN     V_SignType = 'SIGNIN'
                              AND SignIn IS NULL
                         THEN
                            SYSTIMESTAMP
                         ELSE
                            SignIn
                      END,
                   SignOut =
                      CASE
                         WHEN     V_SignType = 'SIGNOUT'
                              AND signout IS NULL
                         THEN
                            SYSTIMESTAMP
                         ELSE
                            SignOut
                      END,
                   IpAddress =
                      CASE
                         WHEN NVL (IpAddress, '') = '' THEN V_IPAddress
                         ELSE IpAddress || ',' || V_IPAddress
                      END,
                   LogonUserName =
                      CASE
                         WHEN NVL (LogonUserName, '') = '' THEN V_LogonUserName
                         ELSE LogonUserName || ',' || V_LogonUserName
                      END,
                   WorkLocation =
                      CASE
                         WHEN V_SignType = 'SIGNIN' THEN V_WorkLocation
                         ELSE WorkLocation
                      END,
                   WorkLocationType =
                      CASE
                         WHEN V_SignType = 'SIGNIN' THEN V_WorkLocationType
                         ELSE WorkLocationType
                      END,
                   ShiftName =
                      CASE
                         WHEN     V_SignType = 'SIGNIN'
                              AND NVL (ShiftName, '') = ''
                         THEN
                            V_ShiftName
                         ELSE
                            ShiftName
                      END
             WHERE     AttendanceDate = V_AttendanceDate
                   AND LoginId = V_LoginId
                   AND Active = 1;



            UPDATE T_ATTENDANCE_ATTENDANCE
               SET ShiftName = 'LEAVE'
             WHERE     AttendanceDate < SYSTIMESTAMP - 2
                   AND SignIn IS NULL
                   AND SignOut IS NULL
                   AND ShiftName IN ('MORNING',
                                     'AFTERNOON1',
                                     'AFTERNOON2',
                                     'GENERAL1',
                                     'GENERAL2',
                                     'NIGHT');



            INSERT INTO T_ATTENDANCE_USER_COVID_STATUS (LoginId,
                                                        AttendanceDate,
                                                        Self_Covid_Status,
                                                        Self_Covid_Remark,
                                                        Family_Covid_Status,
                                                        Family_Covid_Remark,
                                                        UpdatedOn,
                                                        UpdatedBy)
               SELECT V_LoginId,
                      V_AttendanceDate,
                      V_Self_Covid_Status,
                      V_Self_Covid_Remark,
                      V_Family_Covid_Status,
                      V_Family_Covid_Remark,
                      SYSTIMESTAMP,
                      UPPER (V_LoginId)
                 FROM DUAL
                WHERE V_SignType = 'SIGNIN';
         END IF;

         IF V_CommandType = 'GetCovidStatus'
         THEN
            OPEN cur2 FOR
               SELECT E1.FirstName || ' ' || E1.LastName UpdatedBy,
                      C.*,
                      E.FirstName || ' ' || E.LastName FullName
                 FROM T_ATTENDANCE_USER_COVID_STATUS  C
                      LEFT JOIN T_ATTENDANCE_USER_MASTER U
                         ON     U.LoginID = C.LoginId
                            AND U.IsActive = 'Y'
                      LEFT JOIN T_ATTENDANCE_EMPLOYEE_MASTER E
                         ON     E.EmpID = U.EmpID
                            AND E.IsActive = 'Y'
                      LEFT JOIN T_ATTENDANCE_USER_MASTER U1
                         ON     U1.LoginID = C.UpdatedBy
                            AND U1.IsActive = 'Y'
                      LEFT JOIN T_ATTENDANCE_EMPLOYEE_MASTER E1
                         ON     E1.EmpId = U1.EmpId
                            AND E1.IsActive = 'Y'
                WHERE     C.LoginId = V_LoginId
                      AND C.AttendanceDate = SUBSTR (TO_CHAR (SYSTIMESTAMP, 'yyyy-mm-dd
    hh24:mi:ss.ff3'), 1, 10);
         END IF;


         IF V_CommandType = 'UpdateCovidStatus'
         THEN
            IF NOT EXISTS
                  (SELECT 1
                     FROM T_ATTENDANCE_USER_COVID_STATUS
                    WHERE     AttendanceDate = V_AttendanceDate
                          AND LoginId = V_LoginId)
            THEN
               INSERT INTO T_ATTENDANCE_USER_COVID_STATUS (LoginId,
                                                           AttendanceDate,
                                                           Self_Covid_Status,
                                                           Self_Covid_Remark,
                                                           Family_Covid_Status,
                                                           Family_Covid_Remark,
                                                           UpdatedOn,
                                                           UpdatedBy)
                  SELECT V_LoginId,
                         V_AttendanceDate,
                         V_Self_Covid_Status,
                         V_Self_Covid_Remark,
                         V_Family_Covid_Status,
                         V_Family_Covid_Remark,
                         SYSTIMESTAMP,
                         UPPER (V_UpdatedBy)
                    FROM DUAL;
            ELSE
               UPDATE T_ATTENDANCE_USER_COVID_STATUS
                  SET self_Covid_Status = V_Self_Covid_Status,
                      Self_Covid_Remark = V_Self_Covid_Remark,
                      Family_Covid_Status = V_Family_Covid_Status,
                      Family_Covid_Remark = V_Family_Covid_Remark,
                      UpdatedOn = SYSTIMESTAMP,
                      UpdatedBy = V_UpdatedBy
                WHERE     AttendanceDate = V_AttendanceDate
                      AND LoginId = V_LoginId;
            END IF;
         END IF;



         IF V_CommandType = 'GetCompany'
         THEN
            OPEN cur3 FOR
               SELECT 1 AS sr, UPPER (CompanyName) CompanyName FROM T_ATTENDANCE_COMPANYS
               UNION
               SELECT 0, 'All Companies' FROM DUAL
               ORDER BY sr ASC;
         END IF;


         IF V_CommandType = 'TeamAvailability'
         THEN
            OPEN cur4 FOR SELECT TowerPk, RTRIM (LTRIM (TowerName)) TowerName
                            FROM T_ATTENDANCE_TOWER_MASTER
                           WHERE IsActive = 'Y'
                          UNION
                          SELECT 0, 'Admin' FROM DUAL
                          ORDER BY TowerName ASC;

            OPEN cur5 FOR
                 SELECT E.FirstName || ' ' || E.LastName AS Name,
                        E.ContactNo,
                        r.RoleName AS Role,
                        A.ShiftName,
                        A.SignIn,
                        A.SignOut,
                        NVL (T.TowerName, 'Admin') TowerName,
                        UPPER (E.Company) AS Company,
                        WorkLocation,
                        WorkLocationType,
                        Covid.Self_Covid_Status,
                        Covid.Family_Covid_Status
                   FROM T_ATTENDANCE_ATTENDANCE A
                        JOIN T_ATTENDANCE_USER_MASTER U
                           ON     A.LoginId = U.LoginID
                              AND U.IsActive = 'Y'
                        JOIN T_ATTENDANCE_EMPLOYEE_MASTER E
                           ON     U.EmpID = E.EmpID
                              AND E.IsActive = 'Y'
                        LEFT JOIN T_ATTENDANCE_USER_ATTENDANCE_TEAM uat
                           ON     uat.LoginId = u.LoginID
                              AND uat.isActive = 'Y'
                        LEFT JOIN T_ATTENDANCE_TOWER_MASTER T ON T.TowerPk = uat.TowerPk
                        JOIN T_ATTENDANCE_ROLE_MASTER R ON R.RolePk = u.RolePk
                        LEFT JOIN T_ATTENDANCE_USER_COVID_STATUS Covid
                           ON     Covid.LoginId = A.LoginId
                              AND Covid.AttendanceDate = a.AttendanceDate
                  WHERE     a.AttendanceDate =
                            CASE
                               WHEN TO_NUMBER (TO_CHAR (SYSTIMESTAMP, 'HOUR')) < 7
                               THEN
                                  INTERVAL '-1' DAY (5) + V_AttendanceDate
                               ELSE
                                  V_AttendanceDate
                            END
                        AND a.Active = 1
                        AND E.Company =
                            CASE V_Company
                               WHEN 'All Companies' THEN E.Company
                               ELSE V_Company
                            END
                        AND (   (    NVL (V_UserType, 'Consultant') = 'Consultant'
                                 AND E.Company NOT IN (''))
                             OR (    NVL (p_UserType, 'Employee') = 'Employee'
                                 AND E.Company = ''))
               ORDER BY T.TowerName, A.SignIn DESC;
         END IF;
      END IF;
   END Proc_Dashboard;
END PKG_ATTENDANCE_DASHBOARD;
© www.soinside.com 2019 - 2024. All rights reserved.