DesignO

Check Web Diary Settings

Dec 5th, 2014
299
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 6.57 KB | None | 0 0
  1. SET serveroutput ON
  2. DECLARE
  3.   v_usingStaffProfiles BOOLEAN := <IsUsingStaffProfiles>;
  4.   TYPE lt_list IS TABLE OF VARCHAR2 (30);
  5.   l_diaryEwebList        lt_list
  6.                        := lt_list ( 'SHOW RX',
  7.                                    'DEFAULT APPT STATUS',
  8.                                    'SHOW ORDER',
  9.                                    'DISPLAY OPTICIAN LIST',
  10.                                    'FULL DIARY INTEGRATION',
  11.                                    'DISPLAY EXAM DETAILS',
  12.                                    'MINIMUM DURATION'
  13.                                   );
  14.   l_diaryList lt_list
  15.                 := lt_list( 'WEB DIARY',
  16.                             'WEB BOOKINGS'
  17.                           );
  18.   l_tableList lt_list
  19.                 := lt_list( 'SYSTEM_SETTINGS',
  20.                             'PRACTICE_SETTINGS',
  21.                             'STAFF_SETTINGS'
  22.                           );
  23.   v_editionType NUMBER := OCU_GLOBAL_VARIABLES.GET_EDITION;
  24.   v_tokenCategory VARCHAR2(100);
  25.   v_cnt NUMBER;
  26.   v_hoPractice NUMBER := OCU_GLOBAL_VARIABLES.GET_HO_PRACTICE;
  27.   v_staffSettingQuery VARCHAR2(2000);
  28.   TYPE ResultSet IS REF CURSOR;
  29.   CurStaff ResultSet;
  30.   v_thisStaffMemberID NUMBER(16,0);
  31.   v_errorFlagged BOOLEAN;
  32.   FUNCTION SETTING_EXISTS( p_tableName IN VARCHAR2, p_practiceID IN NUMBER, p_tokenCategory IN VARCHAR2, p_tokenName IN VARCHAR ) RETURN BOOLEAN
  33.   IS
  34.     lv_cnt NUMBER;
  35.   BEGIN
  36.     EXECUTE IMMEDIATE 'SELECT count(*)'
  37.       ||CHR(10)||'from '||p_tableName
  38.       ||CHR(10)||'where practice_Id = '||TO_CHAR(p_practiceID)
  39.       ||CHR(10)||'AND UPPER(TOKEN_CATEGORY) = '''||p_tokenCategory||''''
  40.       ||CHR(10)||'AND UPPER(TOKEN_NAME) = '''||p_tokenName||''''
  41.     INTO lv_cnt;
  42.     IF lv_cnt = 0 THEN
  43.       RETURN FALSE;
  44.     ELSE
  45.       RETURN TRUE;
  46.     END IF;
  47.   END SETTING_EXISTS;
  48.   FUNCTION STAFF_SETTING_EXISTS( p_practiceID IN NUMBER, p_staffMemberID IN NUMBER, p_tokenCategory IN VARCHAR2, p_tokenName IN VARCHAR ) RETURN BOOLEAN
  49.   IS
  50.     lv_cnt NUMBER;
  51.   BEGIN
  52.     EXECUTE IMMEDIATE 'SELECT count(*)'
  53.       ||CHR(10)||'from STAFF_SETTINGS'
  54.       ||CHR(10)||'where practice_Id = '||TO_CHAR(p_practiceID)
  55.       ||CHR(10)||'AND STAFF_MEMBER_ID = '||TO_CHAR(p_staffMemberID)
  56.       ||CHR(10)||'AND UPPER(TOKEN_CATEGORY) = '''||p_tokenCategory||''''
  57.       ||CHR(10)||'AND UPPER(TOKEN_NAME) = '''||p_tokenName||''''
  58.     INTO lv_cnt;
  59.     --DBMS_OUTPUT.PUT_LINE( 'Checking STAFF_SETTING '||p_tokenCategory||'>'||p_tokenName||' practice='||TO_CHAR(p_practiceID)||' staff='||TO_CHAR(p_staffMemberID)||' return='||TO_CHAR(v_cnt) );
  60.     IF lv_cnt = 0 THEN
  61.       RETURN FALSE;
  62.     ELSE
  63.       RETURN TRUE;
  64.     END IF;
  65.   END STAFF_SETTING_EXISTS;
  66. BEGIN
  67.   DBMS_OUTPUT.ENABLE(32767);
  68.   IF v_editionType NOT IN (1,4) THEN
  69.     RAISE_APPLICATION_ERROR( -20001, 'Settings can only be checked/adjusted in independent or Enterprise HO' );
  70.   ELSE
  71.     FOR PracRec IN (
  72.       SELECT PRACTICE_ID
  73.       FROM PRACTICES
  74.       WHERE PRACTICE_ONLINE = 1
  75.       ORDER BY PRACTICE_ID
  76.     )
  77.     LOOP
  78.       DBMS_OUTPUT.PUT_LINE( CHR(10)||'Practice '||TO_CHAR(PracRec.PRACTICE_ID) );
  79.       FOR i IN l_tableList.FIRST..l_tableList.LAST LOOP
  80.         DBMS_OUTPUT.PUT_LINE( CHR(10)||'Table '||l_tableList(i) );
  81.         v_errorFlagged := FALSE;
  82.          
  83.         IF l_tableList(i) = 'STAFF_SETTINGS' THEN
  84.           IF v_usingStaffProfiles THEN
  85.             v_staffSettingQuery := 'SELECT STAFF_TYPE_ID STAFF_MEMBER_ID'
  86.               ||CHR(10)||'FROM RL_STAFF_TYPES'
  87.               ||CHR(10)||'WHERE RECORD_DELETED = 0'
  88.               ||CHR(10)||'ORDER BY STAFF_TYPE_ID';
  89.           ELSE
  90.             v_staffSettingQuery := 'SELECT STAFF_MEMBER_ID'
  91.               ||CHR(10)||'FROM STAFF_MEMBERS'
  92.               ||CHR(10)||'WHERE PRACTICE_ID = '||TO_CHAR(PracRec.PRACTICE_ID)
  93.               ||CHR(10)||'AND RECORD_DELETED = 0'
  94.               ||CHR(10)||'ORDER BY STAFF_MEMBER_ID';
  95.           END IF;
  96.            
  97.           IF
  98.             (NOT v_usingStaffProfiles)
  99.             OR ( v_usingStaffProfiles AND v_hoPractice = PracRec.PRACTICE_ID AND v_editionType = 4)
  100.             OR v_editionType = 1
  101.           THEN
  102.             OPEN CurStaff FOR v_staffSettingQuery;
  103.             LOOP
  104.               FETCH CurStaff INTO v_thisStaffMemberID;
  105.               EXIT WHEN CurStaff%NOTFOUND;
  106.                
  107.               v_tokenCategory := 'DIARY';
  108.               FOR j IN l_diaryList.FIRST..l_diaryList.LAST LOOP
  109.                 -- Diary > Web Bookings is the only setting to exist at staff level
  110.                 IF l_diaryList(j) = 'WEB BOOKINGS' THEN
  111.                   IF NOT STAFF_SETTING_EXISTS( PracRec.PRACTICE_ID, v_thisStaffMemberID, v_tokenCategory, l_diaryList(j) ) THEN
  112.                     DBMS_OUTPUT.PUT_LINE( 'Setting "'||v_tokenCategory||'>'||l_diaryList(j)||'" missing for staff '||TO_CHAR(v_thisStaffMemberID) );
  113.                     v_errorFlagged := TRUE;
  114.                   END IF;
  115.                   EXIT;
  116.                 END IF;
  117.               END LOOP;
  118.                
  119.             END LOOP;
  120.             CLOSE CurStaff;
  121.           ELSE
  122.             DBMS_OUTPUT.PUT_LINE( '... doesnt apply');
  123.           END IF; -- NOT (v_usingStaffProfiles AND v_hoPractice != PracRec.PRACTICE_ID AND v_editionType = 4) THEN
  124.         ELSE
  125.           IF l_tableList(i) = 'SYSTEM_SETTINGS' THEN
  126.             v_tokenCategory := 'DIARY EWEB';
  127.             FOR j IN l_diaryEwebList.FIRST..l_diaryEwebList.LAST LOOP
  128.               IF NOT SETTING_EXISTS( l_tableList(i), PracRec.PRACTICE_ID, v_tokenCategory, l_diaryEwebList(j) ) THEN
  129.                 DBMS_OUTPUT.PUT_LINE( 'Setting "'||v_tokenCategory||'>'||l_diaryEwebList(j)||'" missing' );
  130.                 v_errorFlagged := TRUE;
  131.               END IF;
  132.             END LOOP;
  133.           END IF;
  134.           v_tokenCategory := 'DIARY';
  135.           FOR j IN l_diaryList.FIRST..l_diaryList.LAST LOOP
  136.             -- Diary > Web Bookings is the only setting to exist at practice level
  137.             IF l_tableList(i) != 'PRACTICE_SETTINGS' OR l_diaryList(j) = 'WEB BOOKINGS' THEN
  138.               IF NOT SETTING_EXISTS( l_tableList(i), PracRec.PRACTICE_ID, v_tokenCategory, l_diaryList(j) ) THEN
  139.                 DBMS_OUTPUT.PUT_LINE( 'Setting "'||v_tokenCategory||'>'||l_diaryList(j)||'" missing' );
  140.                 v_errorFlagged := TRUE;
  141.               END IF;
  142.             END IF;
  143.           END LOOP;
  144.         END IF; --l_tableList(i) = 'STAFF_SETTINGS' THEN
  145.          
  146.         IF NOT v_errorFlagged THEN
  147.           DBMS_OUTPUT.PUT_LINE( '... OK' );
  148.         END IF;
  149.          
  150.       END LOOP; -- TableRec
  151.     END LOOP; -- PracRec
  152.   END IF; -- end IF v_editionType NOT IN (1,4)
  153. END;
  154. /
Advertisement
Add Comment
Please, Sign In to add comment