Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 42.10 KB | None | 0 0
  1. PROCEDURE insert_from_studis_to_tvarkis(semester IN VARCHAR2)
  2.      IS
  3.      --array1         apex_application_global.vc_arr2;
  4.      
  5.      s                SYS_REFCURSOR;
  6.      r                tvarkis.tv_types.trans_regis_to_tvarkis_by_rg_r;
  7.      
  8.      -- Kintamieji skirti savaičių išrūšiavimui
  9.      weeks_with_commas   VARCHAR2(100);
  10.      v_array1            apex_application_global.vc_arr2;
  11.      week_id             apex_application_global.vc_arr2;
  12.      empty_table         apex_application_global.vc_arr2;
  13.      time_date           apex_application_global.vc_arr2;
  14.  
  15.      -- Kintamieji skirti laiko sutvarkytmui    
  16.      first_time_start   VARCHAR2(20);
  17.      first_time_end     VARCHAR2(20);
  18.      second_time_start  VARCHAR2(20);
  19.      second_time_end    VARCHAR2(20);
  20.      time_count         NUMBER(2);
  21.      
  22.      -- Pastato kintamasis
  23.      pastatas           VARCHAR2(40);
  24.      room_id            VARCHAR2(40);
  25.      room_name          VARCHAR2(40);
  26.      
  27.      n                  NUMBER(10);
  28.      second_count       NUMBER(10);
  29.      lecture_type       VARCHAR2(20);
  30.      
  31.      -- Counters for inserted, same, errors.
  32.      same               NUMBER(20) := 0;
  33.      new_inserted       NUMBER(20) := 0;
  34.      failed             NUMBER(20) := 0;
  35.      
  36.    BEGIN
  37.      
  38.      s := tvarkis.tv_studis_to_tvarkis.get_info_from_studis(p_semester_in => 'FO0060');
  39.      
  40.      LOOP FETCH s INTO r;
  41.      EXIT WHEN s%NOTFOUND;
  42.          
  43.           -- Getting lecture type at right format
  44.           CASE regexp_replace( r.lecture_type , '[[:space:]]*','')
  45.             WHEN 'LECT'  
  46.               THEN lecture_type := 'DT001';
  47.             WHEN 'ND'  
  48.               THEN lecture_type := 'DT005';
  49.             WHEN 'LAB'  
  50.               THEN lecture_type := 'DT002';
  51.             WHEN 'SEM'  
  52.               THEN lecture_type := 'DT003';
  53.             WHEN 'PRAT'
  54.               THEN lecture_type := 'DT004';
  55.           END CASE;
  56.          
  57.          
  58.           -- Getting lecture room_id
  59.           CASE  r.building
  60.             WHEN 'ŠEV 31'
  61.               THEN pastatas := 'SEV31';
  62.             WHEN 'STU39'
  63.               THEN pastatas:= 'STU39';
  64.             WHEN 'DAU 27'  
  65.               THEN pastatas := 'DAU27';
  66.             WHEN 'VYT 71'  
  67.               THEN pastatas := 'VYT71';
  68.             WHEN 'PUT 23'  
  69.               THEN pastatas := 'PUT23';
  70.             WHEN 'MUI 7'  
  71.               THEN pastatas := 'MUI7';
  72.             WHEN 'ČEP 5'
  73.               THEN pastatas := 'CEP5';
  74.             WHEN 'GIM 7'  
  75.               THEN pastatas := 'GIM7';
  76.             WHEN 'JON 66'  
  77.               THEN pastatas := 'JON66';
  78.             WHEN 'VIL 8'  
  79.               THEN pastatas := 'VIL8';
  80.             WHEN 'GED 44'  
  81.               THEN pastatas := 'GED44';
  82.             WHEN 'DON 52'  
  83.               THEN pastatas := 'DON52';
  84.             WHEN 'CR'  
  85.               THEN pastatas := 'DAU28';
  86.             WHEN 'Neauditorine'
  87.               THEN pastatas:= 'AC';
  88.             WHEN 'ZIL 2'
  89.               THEN pastatas := 'BS:laborat1';
  90.             WHEN 'ZIL 6'
  91.               THEN pastatas := 'BS:įstaiga';
  92.              
  93.             WHEN 'RAP 7'
  94.               THEN pastatas := 'RAP7';
  95.             WHEN 'STU 13'
  96.               THEN pastatas := 'STU13';  
  97.              WHEN 'STU 15'
  98.               THEN pastatas := 'STU15';
  99.             WHEN 'STU 15a'
  100.               THEN pastatas := 'STU15a';
  101.             WHEN 'STU 15b'
  102.               THEN pastatas := 'STU15b';  
  103.             WHEN 'STU 9'
  104.               THEN pastatas := 'STU9';
  105.             WHEN 'UNI 10'
  106.               THEN pastatas := 'UNI10';
  107.             WHEN 'VIL 8'
  108.               THEN pastatas := 'VIL8';
  109.             WHEN 'ŽŪ CR'
  110.               THEN pastatas := 'ŽŪCR';
  111.             WHEN 'DAUK 28'
  112.               THEN pastatas := 'DAUK28';
  113.             WHEN 'DON 60'
  114.               THEN pastatas := 'DON60';
  115.             WHEN 'LA 4'
  116.               THEN pastatas := 'LA4';
  117.             WHEN 'LA 53'
  118.               THEN pastatas := 'LA53';
  119.             WHEN 'OZE 18'
  120.               THEN pastatas := 'OZE18';    
  121.             WHEN 'VLN 29'
  122.               THEN pastatas := 'VLN29';    
  123.             ELSE
  124.               pastatas := 'nera atitikimo';
  125.            
  126.           END CASE;
  127.          
  128.          -- room_name := REGEXP_SUBSTR(r.room, '([0-9]{2})\w+');
  129.           room_name := TRIM(r.room);
  130.          -- Kelianat neauditorine: pakeiciam room name ir room_id Selecte LIKE vietoj =
  131.       --    room_name := 'Neauditorinė';
  132.          
  133.          
  134.       --  IF LENGTH(room_name) = 2 THEN
  135.          
  136.          --   IF room_name = 'Neauditorinė' THEN
  137.        
  138.             -- GET ROOM_ID
  139.             BEGIN
  140.               SELECT DISTINCT pt.id INTO room_id FROM luadm.pp_pastatai pst
  141.                     JOIN luadm.pp_patalpos pt ON pt.pastatai_id = pst.id
  142.                     JOIN luadm.pp_pertvaros pr ON pr.patalpos_id = pt.id
  143.               WHERE pt.nr = room_name  /*LIKE '%' || room_name || '%'*/  
  144.                     AND pst.kodas = pastatas
  145.                     AND pr.busena IN ('PD0101')
  146.                     AND pr.tipas IN ('PD0202', 'PD0203', 'PD0204', 'PD0205','PD0206')
  147.                     FETCH FIRST 1 ROWS ONLY;
  148.                     --AND pt.nr = pr.nr;
  149.                    
  150.             EXCEPTION
  151.             WHEN NO_DATA_FOUND THEN
  152.               BEGIN
  153.                 SELECT DISTINCT pt.id INTO room_id FROM luadm.pp_pastatai pst
  154.                       JOIN luadm.pp_patalpos pt ON pt.pastatai_id = pst.id
  155.                       JOIN luadm.pp_pertvaros pr ON pr.patalpos_id = pt.id
  156.                 WHERE pt.nr = room_name  /*LIKE '%' || room_name || '%'*/
  157.                       AND pst.kodas = pastatas
  158.                       AND pr.busena = 'PD0101'
  159.                       AND pr.tipas IN ('PD0202', 'PD0203', 'PD0204', 'PD0205','PD0206')
  160.                       FETCH FIRST 1 ROWS ONLY;
  161.               EXCEPTION
  162.               WHEN NO_DATA_FOUND THEN
  163.                    room_id := NULL;
  164.               END;
  165.             END;
  166.            
  167.            
  168.            
  169.             IF room_id IS NOT NULL THEN
  170.              
  171.               -- Išvalyti table
  172.               week_id := empty_table;
  173.              
  174.               -- Clean string from unnecesery symbols and leave clean week symbos with commas
  175.               weeks_with_commas := regexp_replace( regexp_replace( r.week_day , '[[:space:]]*',''),'[^\A-Z]',',' );              
  176.              
  177.               -- Split week string to array
  178.               v_array1 := apex_util.string_to_table( weeks_with_commas, ',' );
  179.              
  180.               -- Savaitės dienų pavertimas tvarkis sistemos reikalavimus atitinkančiu formatu.
  181.               FOR i IN 1..v_array1.COUNT LOOP
  182.                 CASE  v_array1(i)
  183.                   WHEN 'I'  
  184.                     THEN week_id(i)   := 'W0001';
  185.                          time_date(i) := '2019-09-02';
  186.                   WHEN 'II'  
  187.                     THEN week_id(i) := 'W0002';
  188.                          time_date(i) := '2019-09-03';
  189.                   WHEN 'III'
  190.                     THEN week_id(i) := 'W0003';
  191.                          time_date(i) := '2019-09-04';
  192.                   WHEN 'IV'  
  193.                     THEN week_id(i) := 'W0004';
  194.                          time_date(i) := '2019-09-05';
  195.                   WHEN 'V'  
  196.                     THEN week_id(i) := 'W0005';
  197.                          time_date(i) := '2019-09-06';
  198.                   WHEN 'VI'  
  199.                     THEN week_id(i) := 'W0006';
  200.                          time_date(i) := '2019-09-07';
  201.                   WHEN 'VII'  
  202.                     THEN week_id(i) := 'W0007';
  203.                          time_date(i) := '2019-09-08';
  204.                   ELSE
  205.                          week_id(i) := 'netiko';
  206.                          time_date(i) := 'netiko';
  207.                 END CASE;
  208.               END LOOP;
  209.              
  210.            
  211.               FOR m IN 1..week_id.COUNT LOOP
  212.              
  213.                 --htp.p(week_id(m));
  214.                 -- NULL all time holders
  215.                 first_time_start  := NULL;
  216.                 first_time_end    := NULL;
  217.                 second_time_start := NULL;
  218.                 second_time_end   := NULL;
  219.                
  220.                 -- Time Formating
  221.                 IF r.lecture_time IS NOT NULL THEN
  222.                  
  223.                    -- GET time formating counter ( 2 - start and end of one element, 4 - 2 elements )
  224.                    time_count := REGEXP_COUNT( REGEXP_REPLACE( r.lecture_time , '[[:space:]]*','') , '([0-9]{1,2})(.)([0-9]{1,2})' );
  225.                  
  226.                    IF time_count = 2 THEN
  227.                      
  228.                      first_time_start := REGEXP_SUBSTR( REGEXP_REPLACE( r.lecture_time , '[[:space:]]*','') , '([0-9]{1,2})(.)([0-9]{1,2})' , 1 , 1 );
  229.                      first_time_end := REGEXP_SUBSTR( REGEXP_REPLACE( r.lecture_time , '[[:space:]]*','') , '([0-9]{1,2})(.)([0-9]{1,2})' , 1 , 2 );
  230.                      
  231.                    ELSIF time_count = 4 THEN
  232.                      
  233.                      first_time_start := REGEXP_SUBSTR( REGEXP_REPLACE( r.lecture_time , '[[:space:]]*','') , '([0-9]{1,2})(.)([0-9]{1,2})' , 1 , 1 );
  234.                      first_time_end := REGEXP_SUBSTR( REGEXP_REPLACE( r.lecture_time , '[[:space:]]*','') , '([0-9]{1,2})(.)([0-9]{1,2})' , 1 , 2 );
  235.                      second_time_start := REGEXP_SUBSTR( REGEXP_REPLACE( r.lecture_time , '[[:space:]]*','') , '([0-9]{1,2})(.)([0-9]{1,2})' , 1 , 3 );
  236.                      second_time_end := REGEXP_SUBSTR( REGEXP_REPLACE( r.lecture_time , '[[:space:]]*','') , '([0-9]{1,2})(.)([0-9]{1,2})' , 1 , 4 );
  237.                      
  238.                    END IF;
  239.                                      
  240.                    
  241.                    IF week_id(m) != 'netiko' THEN  
  242.                      --htp.p('');
  243.                      
  244.                      -- Check what length time is ( 15:00 or 8:00 ) and depending on that adds attributes
  245.                      IF LENGTH(first_time_start) = 5 THEN
  246.                         first_time_start := time_date(m) || 'T' || REGEXP_REPLACE( first_time_start , '[^\0-9]' , ':' ) || ':00';                        
  247.                      ELSE
  248.                         first_time_start := time_date(m) || 'T0' || REGEXP_REPLACE( first_time_start , '[^\0-9]' , ':' ) || ':00';
  249.                      END IF;
  250.                      
  251.                      IF LENGTH(first_time_end) = 5 THEN
  252.                         first_time_end := time_date(m) || 'T' || REGEXP_REPLACE( first_time_end , '[^\0-9]' , ':' ) || ':00';                        
  253.                      ELSE
  254.                         first_time_end := time_date(m) || 'T0' || REGEXP_REPLACE( first_time_end , '[^\0-9]' , ':' ) || ':00';
  255.                      END IF;
  256.                      
  257.                      IF second_time_start IS NOT NULL THEN
  258.                        IF LENGTH(second_time_start) = 5 THEN
  259.                           second_time_start := time_date(m) || 'T' || REGEXP_REPLACE( second_time_start , '[^\0-9]' , ':' ) || ':00';                        
  260.                        ELSE
  261.                           second_time_start := time_date(m) || 'T0' || REGEXP_REPLACE( second_time_start , '[^\0-9]' , ':' ) || ':00';
  262.                        END IF;
  263.                      END IF;
  264.                      
  265.                      IF second_time_end IS NOT NULL THEN
  266.                        IF LENGTH(second_time_end) = 5 THEN
  267.                           second_time_end := time_date(m) || 'T' || REGEXP_REPLACE( second_time_end , '[^\0-9]' , ':' ) || ':00';                        
  268.                        ELSE
  269.                           second_time_end := time_date(m) || 'T0' || REGEXP_REPLACE( second_time_end , '[^\0-9]' , ':' ) || ':00';
  270.                        END IF;
  271.                      END IF;
  272.                      
  273. /*-------------------------------------------------------------------------------------------------------------------------------------*/
  274. /*------------------------------------------------  INSERTION PART --------------------------------------------------------------------*/
  275. /*-------------------------------------------------------------------------------------------------------------------------------------*/
  276.                      /*htp.p('SELECT count(tr.id) INTO n FROM tvarkis.timetable_records tr
  277.                      WHERE tr.time_date                = '''||TO_DATE( time_date(m) , 'YYYY-MM-DD' )||''' AND
  278.                            tr.time_from                = '''||first_time_start||''' AND
  279.                            tr.time_until               = '''||first_time_end||''' AND
  280.                            tr.week_id                  = '''||week_id(m)||''' AND
  281.                            tr.lecture_room_id          = '''||room_id||''' AND
  282.                            tr.dalykas_id               = '''||r.dalyko_id||''' AND
  283.                            tr.subject_type_id          = '''||lecture_type||''' AND
  284.                            tr.semestr_tkods            = '''||semester||''' AND
  285.                            tr.destytoj_cilveks_ckods   = '''||r.lecturer_id||''' AND
  286.                            tr.srauto_id                = '''||r.srauto_id||''' AND
  287.                            tr.rg_id                    = '''||r.rg_id||''' AND
  288.                            tr.time_inserted < '''||TO_DATE( '2017-02-28' , 'YYYY-MM-DD')||'''');*/
  289.                      
  290.                      -- Check if tvark object already exists
  291.                      SELECT COUNT(tr.id) INTO n FROM tvarkis.timetable_records tr
  292.                      WHERE tr.time_date                = TO_DATE( time_date(m) , 'YYYY-MM-DD' ) AND
  293.                            tr.time_from                = first_time_start AND
  294.                            tr.time_until               = first_time_end AND
  295.                            tr.week_id                  = week_id(m) AND
  296.                            tr.lecture_room_id          = room_id AND
  297.                            tr.dalykas_id               = r.dalyko_id AND
  298.                            tr.subject_type_id          = lecture_type AND
  299.                            tr.semestr_tkods            = semester AND
  300.                            tr.destytoj_cilveks_ckods   = r.lecturer_id AND
  301.                            tr.srauto_id                = r.srauto_id AND
  302.                            tr.rg_id                    = r.rg_id AND
  303.                            tr.student_id               = r.student_id AND
  304.                           (tr.STATUS IS NULL OR tr.STATUS = 'NEW') AND
  305.                           tr.time_created < TO_DATE( '2019-09-02' , 'YYYY-MM-DD');
  306.                            
  307.                      /*htp.br();
  308.                      htp.p(n);
  309.                      htp.br();
  310.                      htp.p(' , Student - '||r.student_id|| ' , Srauto ID - ' ||r.srauto_id );
  311.                      htp.br();
  312.                      htp.p(TO_DATE( time_date(m) , 'YYYY/MM/DD' ) || ' - ' || first_time_start || ' - ' || first_time_end || ' - ' || week_id(m));
  313.                      htp.p (' - ' ||room_id || ' - ' ||r.dalyko_id || ' - ' ||lecture_type || ' - ' ||semester || ' - ' ||r.lecturer_id || ' - ' ||r.student_id );
  314.                      htp.p (' - ' || r.lecturer_id2 || ' - ' ||r.lecturer_id3 || ' - ' ||r.lecturer_id4 || ' - ' ||r.lecturer_id5 || ' - ' ||r.lecturer_id6
  315.                           || ' - ' ||r.lecturer_id7 || ' - ' ||r.lecturer_id8 || ' - ' ||r.srauto_id || ' - ' ||r.rg_id || ' - ' ||r.lang || ' - ' ||r.lecture_group
  316.                           || ' - ' ||r.nuotolinis);
  317.                      htp.br();*/
  318.                                    
  319.                      IF n > 0 THEN          
  320.                          BEGIN
  321.                              UPDATE tvarkis.timetable_records tv
  322.                                SET tv.STATUS = 'DELETED'
  323.                                WHERE tv.time_from                = first_time_start AND
  324.                                      tv.time_until               = first_time_end AND
  325.                                      tv.week_id                  = week_id(m) AND
  326.                                      tv.lecture_room_id          = room_id AND
  327.                                      tv.dalykas_id               = r.dalyko_id AND
  328.                                      tv.subject_type_id          = lecture_type AND
  329.                                      tv.semestr_tkods            = semester AND
  330.                                      tv.destytoj_cilveks_ckods   = r.lecturer_id AND
  331.                                      tv.srauto_id                = r.srauto_id AND
  332.                                      tv.rg_id                    = r.rg_id AND
  333.                                      tv.time_created < TO_DATE( '2019-09-02' , 'YYYY-MM-DD');
  334.                             COMMIT;
  335.                           EXCEPTION WHEN OTHERS THEN
  336.                             htp.p('Ivyko Rollback su UPDATE, Srauto ID -> ' || r.srauto_id);
  337.                             ROLLBACK;
  338.                         END;
  339.                         --htp.p('turejo padaryti srauto ID -> ' ||r.srauto_id|| ' DELETED.');
  340.                        
  341.                         --RAISE_APPLICATION_ERROR(-20000, 'Test failed'); -- not enough
  342.                          
  343.                         n := 0;
  344.                        
  345.                         SELECT COUNT(tr.id) INTO n FROM tvarkis.timetable_records tr
  346.                         WHERE tr.time_date                = TO_DATE( time_date(m) , 'YYYY-MM-DD' ) AND
  347.                               tr.time_from                = first_time_start AND
  348.                               tr.time_until               = first_time_end AND
  349.                               tr.week_id                  = week_id(m) AND
  350.                               tr.lecture_room_id          = room_id AND
  351.                               tr.dalykas_id               = r.dalyko_id AND
  352.                               tr.subject_type_id          = lecture_type AND
  353.                               tr.semestr_tkods            = semester AND
  354.                               tr.student_id               = r.student_id AND
  355.                               tr.destytoj_cilveks_ckods   = r.lecturer_id AND
  356.                               tr.srauto_id                = r.srauto_id AND
  357.                               tr.rg_id                    = r.rg_id AND
  358.                              (tr.STATUS IS NULL OR tr.STATUS = 'NEW');
  359.                        
  360.                         IF n = 0 THEN  
  361.                             INSERT INTO tvarkis.timetable_records (
  362.                                 time_date,time_from,time_until,week_id,lecture_room_id,dalykas_id,
  363.                                 subject_type_id, semestr_tkods,destytoj_cilveks_ckods,student_id,
  364.                                 destytoj_cilveks_ckods_2,destytoj_cilveks_ckods_3,destytoj_cilveks_ckods_4,
  365.                                 destytoj_cilveks_ckods_5,destytoj_cilveks_ckods_6,destytoj_cilveks_ckods_7,
  366.                                 destytoj_cilveks_ckods_8,srauto_id,rg_id,lang,dalykas_group,nuotolinis,
  367.                                 STATUS,time_created)
  368.                             VALUES (
  369.                                 TO_DATE( time_date(m) , 'YYYY/MM/DD' ) ,first_time_start,first_time_end,
  370.                                 week_id(m),room_id,r.dalyko_id,lecture_type,semester,r.lecturer_id,
  371.                                 r.student_id,r.lecturer_id2,r.lecturer_id3,r.lecturer_id4,r.lecturer_id5,
  372.                                 r.lecturer_id6,r.lecturer_id7,r.lecturer_id8,r.srauto_id,r.rg_id, r.lang,
  373.                                 r.lecture_group,r.nuotolinis,NULL,SYSDATE);
  374.                             COMMIT;
  375.                             new_inserted := new_inserted + 1;
  376.                         END IF;
  377.                      
  378.                    ELSE    
  379.                        SELECT COUNT(tr.id) INTO n FROM tvarkis.timetable_records tr
  380.                         WHERE tr.time_date                = TO_DATE( time_date(m) , 'YYYY-MM-DD' ) AND
  381.                               tr.time_from                = first_time_start AND
  382.                               tr.time_until               = first_time_end AND
  383.                               tr.week_id                  = week_id(m) AND
  384.                               tr.lecture_room_id          = room_id AND
  385.                               tr.dalykas_id               = r.dalyko_id AND
  386.                               tr.subject_type_id          = lecture_type AND
  387.                               tr.semestr_tkods            = semester AND
  388.                               tr.student_id               = r.student_id AND
  389.                               tr.destytoj_cilveks_ckods   = r.lecturer_id AND
  390.                               tr.srauto_id                = r.srauto_id AND
  391.                               tr.rg_id                    = r.rg_id AND
  392.                              (tr.STATUS IS NULL OR tr.STATUS = 'NEW');
  393.                        
  394.                         IF n = 0 THEN
  395.                             INSERT INTO tvarkis.timetable_records (
  396.                                 time_date,time_from,time_until,week_id,lecture_room_id,dalykas_id,
  397.                                 subject_type_id, semestr_tkods,destytoj_cilveks_ckods,student_id,
  398.                                 destytoj_cilveks_ckods_2,destytoj_cilveks_ckods_3,destytoj_cilveks_ckods_4,
  399.                                 destytoj_cilveks_ckods_5,destytoj_cilveks_ckods_6,destytoj_cilveks_ckods_7,
  400.                                 destytoj_cilveks_ckods_8,srauto_id,rg_id,lang,dalykas_group,nuotolinis,
  401.                                 STATUS,time_created)
  402.                             VALUES (
  403.                                 TO_DATE( time_date(m) , 'YYYY/MM/DD' ) ,first_time_start,first_time_end,
  404.                                 week_id(m),room_id,r.dalyko_id,lecture_type,semester,r.lecturer_id,
  405.                                 r.student_id,r.lecturer_id2,r.lecturer_id3,r.lecturer_id4,r.lecturer_id5,
  406.                                 r.lecturer_id6,r.lecturer_id7,r.lecturer_id8,r.srauto_id,r.rg_id, r.lang,
  407.                                 r.lecture_group,r.nuotolinis,NULL,SYSDATE);
  408.                            COMMIT;
  409.                            new_inserted := new_inserted + 1;
  410.                         END IF;
  411.                    END IF;
  412.                    
  413.                     /*------------------------------------------------*/
  414.                     /*----- SECOND TIME -------------*/
  415.                    
  416.                    
  417.                     IF second_time_start IS NOT NULL THEN
  418.                    
  419.                        SELECT COUNT(tr.id) INTO second_count FROM tvarkis.timetable_records tr
  420.                        WHERE tr.time_date                = TO_DATE( time_date(m) , 'YYYY-MM-DD' ) AND
  421.                              tr.time_from                = second_time_start AND
  422.                              tr.time_until               = second_time_end AND
  423.                              tr.week_id                  = week_id(m) AND
  424.                              tr.lecture_room_id          = room_id AND
  425.                              tr.dalykas_id               = r.dalyko_id AND
  426.                              tr.subject_type_id          = lecture_type AND
  427.                              tr.semestr_tkods            = semester AND
  428.                              tr.destytoj_cilveks_ckods   = r.lecturer_id AND
  429.                              tr.student_id               = r.student_id AND
  430.                              tr.srauto_id                = r.srauto_id AND
  431.                              tr.rg_id                    = r.rg_id AND
  432.                             (tr.STATUS IS NULL OR tr.STATUS = 'NEW') AND
  433.                              tr.time_created < TO_DATE( '2019-09-02' , 'YYYY-MM-DD');
  434.                        
  435.                        IF second_count > 0 THEN
  436.                             BEGIN
  437.                               UPDATE TVARKIS.Timetable_Records tv2
  438.                                SET tv2.STATUS = 'DELETED'
  439.                                WHERE tv2.time_from                = second_time_start AND
  440.                                      tv2.time_until               = second_time_end AND
  441.                                      tv2.week_id                  = week_id(m) AND
  442.                                      tv2.lecture_room_id          = room_id AND
  443.                                      tv2.dalykas_id               = r.dalyko_id AND
  444.                                      tv2.subject_type_id          = lecture_type AND
  445.                                      tv2.semestr_tkods            = semester AND
  446.                                      tv2.destytoj_cilveks_ckods   = r.lecturer_id AND
  447.                                      tv2.srauto_id                = r.srauto_id AND
  448.                                      tv2.rg_id                    = r.rg_id AND
  449.                                      tv2.time_created < TO_DATE( '2019-09-02' , 'YYYY-MM-DD');
  450.                               COMMIT;
  451.                               EXCEPTION WHEN OTHERS THEN
  452.                                   htp.p('Ivyko Rollback su UPDATE, Srauto ID -> ' || r.srauto_id);
  453.                                   ROLLBACK;
  454.                             END;
  455.                             --htp.p('turejo padaryti srauto ID -> ' ||r.srauto_id|| ' DELETED.');
  456.                            
  457.                             --RAISE_APPLICATION_ERROR(-20000, 'Test failed');
  458.                            
  459.                             SELECT COUNT(tr.id) INTO second_count FROM tvarkis.timetable_records tr
  460.                             WHERE tr.time_date                = TO_DATE( time_date(m) , 'YYYY-MM-DD' ) AND
  461.                                   tr.time_from                = second_time_start AND
  462.                                   tr.time_until               = second_time_end AND
  463.                                   tr.week_id                  = week_id(m) AND
  464.                                   tr.lecture_room_id          = room_id AND
  465.                                   tr.dalykas_id               = r.dalyko_id AND
  466.                                   tr.subject_type_id          = lecture_type AND
  467.                                   tr.semestr_tkods            = semester AND
  468.                                   tr.destytoj_cilveks_ckods   = r.lecturer_id AND
  469.                                   tr.student_id               = r.student_id AND
  470.                                   tr.srauto_id                = r.srauto_id AND
  471.                                   tr.rg_id                    = r.rg_id AND
  472.                                  (tr.STATUS IS NULL OR tr.STATUS = 'NEW');
  473.                             IF second_count = 0 THEN
  474.                                 INSERT INTO tvarkis.timetable_records (
  475.                                       time_date,time_from,time_until,week_id,lecture_room_id,dalykas_id,
  476.                                       subject_type_id, semestr_tkods,destytoj_cilveks_ckods,student_id,
  477.                                       destytoj_cilveks_ckods_2,destytoj_cilveks_ckods_3,destytoj_cilveks_ckods_4,
  478.                                       destytoj_cilveks_ckods_5,destytoj_cilveks_ckods_6,destytoj_cilveks_ckods_7,
  479.                                       destytoj_cilveks_ckods_8,srauto_id,rg_id,lang,dalykas_group,nuotolinis,
  480.                                       STATUS,time_created)
  481.                                 VALUES (
  482.                                       TO_DATE( time_date(m) , 'YYYY/MM/DD' ) ,second_time_start,second_time_end,
  483.                                       week_id(m),room_id,r.dalyko_id,lecture_type,semester,r.lecturer_id,
  484.                                       r.student_id,r.lecturer_id2,r.lecturer_id3,r.lecturer_id4,
  485.                                       r.lecturer_id5,r.lecturer_id6,r.lecturer_id7,r.lecturer_id8,
  486.                                       r.srauto_id,r.rg_id,r.lang,r.lecture_group,r.nuotolinis,
  487.                                       NULL,SYSDATE);
  488.                                  COMMIT;  
  489.                                  new_inserted := new_inserted + 1;
  490.                              END IF;
  491.                                                    
  492.                        ELSE                      
  493.                           SELECT COUNT(tr.id) INTO second_count FROM tvarkis.timetable_records tr
  494.                           WHERE tr.time_date                = TO_DATE( time_date(m) , 'YYYY-MM-DD' ) AND
  495.                                 tr.time_from                = second_time_start AND
  496.                                 tr.time_until               = second_time_end AND
  497.                                 tr.week_id                  = week_id(m) AND
  498.                                 tr.lecture_room_id          = room_id AND
  499.                                 tr.dalykas_id               = r.dalyko_id AND
  500.                                 tr.subject_type_id          = lecture_type AND
  501.                                 tr.semestr_tkods            = semester AND
  502.                                 tr.destytoj_cilveks_ckods   = r.lecturer_id AND
  503.                                 tr.student_id               = r.student_id AND
  504.                                 tr.srauto_id                = r.srauto_id AND
  505.                                 tr.rg_id                    = r.rg_id AND
  506.                                (tr.STATUS IS NULL OR tr.STATUS = 'NEW');
  507.                           IF second_count = 0 THEN
  508.                                INSERT INTO tvarkis.timetable_records (
  509.                                       time_date,time_from,time_until,week_id,lecture_room_id,dalykas_id,
  510.                                       subject_type_id, semestr_tkods,destytoj_cilveks_ckods,student_id,
  511.                                       destytoj_cilveks_ckods_2,destytoj_cilveks_ckods_3,destytoj_cilveks_ckods_4,
  512.                                       destytoj_cilveks_ckods_5,destytoj_cilveks_ckods_6,destytoj_cilveks_ckods_7,
  513.                                       destytoj_cilveks_ckods_8,srauto_id,rg_id,lang,dalykas_group,nuotolinis,
  514.                                       STATUS,time_created)
  515.                                VALUES (
  516.                                       TO_DATE( time_date(m) , 'YYYY/MM/DD' ) ,second_time_start,second_time_end,
  517.                                       week_id(m),room_id,r.dalyko_id,lecture_type,semester,r.lecturer_id,
  518.                                       r.student_id,r.lecturer_id2,r.lecturer_id3,r.lecturer_id4,
  519.                                       r.lecturer_id5,r.lecturer_id6,r.lecturer_id7,r.lecturer_id8,
  520.                                       r.srauto_id,r.rg_id,r.lang,r.lecture_group,r.nuotolinis,
  521.                                       NULL,SYSDATE);
  522.                                COMMIT;
  523.                                new_inserted := new_inserted + 1;
  524.                           END IF;
  525.                       END IF;
  526.                     END IF;
  527.                  END IF;
  528.                ELSE
  529.                  htp.p('LECTURE TIME IS NULL . Nepavyko ikelti sito : Srauto ID ->'||r.srauto_id||' , Student ID -> '||r.student_id||', Time -> '||r.lecture_time||', Room -> '||r.room||', Building ->'||r.building);
  530.                  htp.br();
  531.                END IF;
  532.             END LOOP;
  533.           ELSE
  534.             failed := failed + 1;
  535.             htp.p('NERADO AUDITORIJOS ATITIKMENS . Nepavyko ikelti sito : Srauto ID ->'||r.srauto_id||' , Student ID -> '||r.student_id||', Time -> '||r.lecture_time||', Room -> '||r.room||', Building ->'||r.building);
  536.             htp.br();
  537.           END IF;
  538.        /* ELSE
  539.           failed := failed + 1;
  540.           htp.p('DAUGIAU NEI VIENA AUDITORIJA SK != 3 . Nepavyko ikelti sito : Srauto ID ->'||r.srauto_id||' , Student ID -> '||r.student_id||', Time -> '||r.lecture_time||', Room -> '||r.room||', Building ->'||r.building);
  541.           htp.br();
  542.         END IF; */
  543.      END LOOP;
  544.      
  545.      htp.p('Jau prieš tai įkelti ( dublikatai ) - ' || same || '<br>Naujai įkelti objektai - ' ||new_inserted);
  546.      htp.br('Nepavyko įkelti : '|| failed);
  547.    END insert_from_studis_to_tvarkis;
  548.    
  549.  
  550.   -- CURSOR FOR PICKING DATA FROM STUDIS TO TVARKIS
  551.   FUNCTION get_info_from_studis (p_semester_in    IN tvarkis.timetable_records.semestr_tkods%TYPE)
  552.       RETURN TV_types.w_cursor AS
  553.       RESULT TV_types.w_cursor;
  554.   BEGIN
  555.     BEGIN
  556.       OPEN RESULT FOR
  557.         SELECT DISTINCT '02/09/2019'   AS DATETIME,
  558.            k.sraut        AS SRAUTO_ID,
  559.            str.str_time   AS TIME_DATE,
  560.            str.str_day    AS TIME_FROM_AND_UNTIL,
  561.            str.str_room   AS ROOM,
  562.            str.str_building AS BUILDING,
  563.            k.kurs_kkods     AS DALYKAS_ID,
  564.            str.str_lecture_type AS PASKAITOS_TYPE,
  565.            k.tips_macg    AS SEMESTER,
  566.            k.stud_studkods AS STUDENT,
  567.            reg.rg_short_name AS RG_ID,
  568.            'lt'           AS LANG,
  569.            krs.piezimes   AS DALYKAS_GROUP,
  570.            'ne'           AS NUOTOLINES_TYPE,
  571.            (tvarkis.tv_api.get_cilveks_by_darbinieks(darbinieks_kods => str.str_lecturer_id)) AS DESTYTOJ_1 ,
  572.            (tvarkis.tv_api.get_cilveks_by_darbinieks(darbinieks_kods => str.str_lect_id02)) AS DESTYTOJ_2 ,
  573.            (tvarkis.tv_api.get_cilveks_by_darbinieks(darbinieks_kods => str.str_lect_id03)) AS DESTYTOJ_3 ,
  574.            (tvarkis.tv_api.get_cilveks_by_darbinieks(darbinieks_kods => str.str_lect_id04)) AS DESTYTOJ_4 ,
  575.            (tvarkis.tv_api.get_cilveks_by_darbinieks(darbinieks_kods => str.str_lect_id05)) AS DESTYTOJ_5 ,
  576.            (tvarkis.tv_api.get_cilveks_by_darbinieks(darbinieks_kods => str.str_lect_id06)) AS DESTYTOJ_6 ,
  577.            (tvarkis.tv_api.get_cilveks_by_darbinieks(darbinieks_kods => str.str_lect_id07)) AS DESTYTOJ_7 ,
  578.            (tvarkis.tv_api.get_cilveks_by_darbinieks(darbinieks_kods => str.str_lect_id08)) AS DESTYTOJ_8 ,
  579.            NULL AS str_comment
  580.         FROM luadm.karto k
  581.         JOIN regis.rg_streams str ON str.str_id = k.sraut
  582.         JOIN luadm.kurss krs ON krs.kkods = k.kurs_kkods
  583.         JOIN regis.rg_subjects sbj ON sbj.sub_id = str.str_parent
  584.         JOIN regis.rg_registration reg ON reg.rg_id = sbj.sub_registration
  585.         WHERE k.tips_macg = p_semester_in AND
  586.         reg.rg_short_name IN ('2019RR') AND
  587.         k.sraut IS NOT NULL AND
  588.         str.str_time IS NOT NULL AND
  589.         str.str_day IS NOT NULL AND
  590.         str.str_room IS NOT NULL AND
  591.         str.str_building IS NOT NULL AND
  592.         k.kurs_kkods IS NOT NULL AND
  593.         str.str_lecture_type IS NOT NULL AND
  594.         k.stud_studkods IS NOT NULL AND
  595.         str.str_lecturer_id IS NOT NULL AND
  596.         krs.piezimes IS NOT NULL
  597.         --and str.str_building in ('VIL 8')
  598.        AND str.str_building IN ('RAP 7','STU 13','STU 15','STU 15a','STU 15b','STU 9','UNI 10','ŽŪ CR',
  599.         'JON 66','VIL 8','GED 44','DON 52','CR','ZIL 2','ZIL 6')
  600.        AND str.str_day != 'intensyvus'
  601.       -- AND str.str_location_id IN ('2485')
  602.       --  AND str.str_room IN ('204')
  603.         --AND str.str_building = 'GIM 7'
  604.      --    AND str.str_building IN ('STU39','ŠEV 31')
  605.         -- AND str.str_id IN (78743)
  606.       --   AND str.str_id not in ('70329','71743','70298','70531','70767','71489','71034','71744','71956','71960','70297','70769')
  607.         -- AND str.str_room = '318'
  608.         -- Specific Courses
  609.        --AND krs.kkods_ieks IN ('SOC4013')
  610.        -- 'POP6006','MDM1004','KIN0312','FILN4008','FILN4011','POLN2002','POD5019','MLS5005',' SOC4013')
  611.          --AND rownum < 5
  612.         ORDER BY k.sraut;
  613.      EXCEPTION
  614.         WHEN OTHERS THEN
  615.           RESULT := NULL;
  616.           RETURN RESULT;  
  617.         END;  
  618.     RETURN RESULT;
  619.   END get_info_from_studis;
  620.  
  621.  PROCEDURE dublicate_TV_objects (p_semester_in      IN tvarkis.timetable_records.semestr_tkods%TYPE)
  622.        IS
  623.      time_from           tvarkis.sem_time.time_from%TYPE;
  624.      time_until          tvarkis.sem_time.time_until%TYPE;
  625.      r                   tvarkis.timetable_records%ROWTYPE;
  626.      s                   SYS_REFCURSOR;
  627.      skip                NUMBER DEFAULT 3;
  628.      addWeek             NUMBER;
  629.      exist               NUMBER;
  630.      exist2               NUMBER;
  631.      startas_plus_weeks  VARCHAR2(20);
  632.      end_plus_weeks      VARCHAR2(20);
  633.      counter             NUMBER;
  634.      txt                 VARCHAR2(32000);
  635.       ret VARCHAR2(80);
  636.       sraut              NUMBER :=0;
  637.    BEGIN
  638.      
  639.      skip := 0;
  640.      addWeek := 0;
  641.      
  642.      SELECT s.time_from , s.time_until
  643.      INTO time_from , time_until
  644.      FROM tvarkis.sem_time s
  645.      WHERE s.semester = p_semester_in AND s.is_active = '1';
  646.      
  647.      s := tvarkis.tv_cursors.get_tvark_objects_by_sem_rg_id(p_semester_in => p_semester_in);
  648.      counter := 0;
  649.      
  650.      LOOP FETCH s INTO r;
  651.      EXIT WHEN s%NOTFOUND;
  652.      
  653.          counter := counter + 1;
  654.          htp.p(counter);
  655.          htp.br();
  656.          
  657.          -- Per nauja nustatome kintamuosius, kurie sustabdo LOOP ciklą.
  658.          addWeek := 0;
  659.          skip    := 0;
  660.          
  661.            IF sraut = 0  THEN
  662.          SELECT COUNT(tr.student_id) INTO sraut FROM tvarkis.timetable_records tr WHERE tr.srauto_id = r.srauto_id;
  663.          ELSE
  664.            sraut := sraut - 1;
  665.          END IF;
  666.          
  667.          LOOP  
  668.            EXIT WHEN skip = 1;
  669.            addWeek := addWeek + 1; -- Vis prideda po savaitę -- buvo 7
  670.            
  671.            IF time_until >= r.time_date+addWeek THEN
  672.  
  673.               startas_plus_weeks := REPLACE(to_char(to_date(REPLACE(r.time_from, 'T' , ' '),'yyyy-mm-dd HH24:MI:SS')+addWeek, 'YYYY-MM-DD HH24:MI:SS'), ' ' , 'T');
  674.               end_plus_weeks     := REPLACE(to_char(to_date(REPLACE(r.time_until, 'T' , ' '),'yyyy-mm-dd HH24:MI:SS')+addWeek, 'YYYY-MM-DD HH24:MI:SS'), ' ' , 'T');
  675.              
  676.               exist := 0;
  677.               SELECT COUNT(tr.id) INTO exist FROM tvarkis.timetable_records tr WHERE
  678.                    tr.time_date        = r.time_date+addWeek AND
  679.                    tr.time_from        = startas_plus_weeks AND
  680.                    tr.time_until       = end_plus_weeks AND
  681.                    tr.week_id          = r.week_id AND
  682.                    tr.lecture_room_id  = r.lecture_room_id AND
  683.                    tr.dalykas_id       = r.dalykas_id AND
  684.                    tr.subject_type_id  = r.subject_type_id AND
  685.                    tr.semestr_tkods    = r.semestr_tkods AND
  686.                    tr.destytoj_cilveks_ckods = r.destytoj_cilveks_ckods AND
  687.                    tr.student_id             = r.student_id AND
  688.                    tr.srauto_id              = r.srauto_id  AND
  689.                    tr.rg_id                  = r.rg_id AND
  690.                    tr.lang                   = r.lang AND
  691.                    tr.dalykas_group          = r.dalykas_group AND
  692.                    tr.nuotolinis             = r.nuotolinis AND
  693.                    tr.STATUS IS NULL;
  694.                    
  695.              htp.p('Exists -> '||exist);
  696.                    
  697.              IF exist = 0 THEN   -- Patikrina ar nera tokio iraso duomenu bazeje ir jei nera, insertina naujus irasus
  698.                BEGIN
  699.                  INSERT INTO tvarkis.timetable_records
  700.                     (TIME_DATE,
  701.                      TIME_FROM,
  702.                      TIME_UNTIL,
  703.                      WEEK_ID,
  704.                      LECTURE_ROOM_ID,
  705.                      DALYKAS_ID,
  706.                      SUBJECT_TYPE_ID,
  707.                      SEMESTR_TKODS,
  708.                      DESTYTOJ_CILVEKS_CKODS,
  709.                      STUDENT_ID,
  710.                      DESTYTOJ_CILVEKS_CKODS_2,
  711.                      DESTYTOJ_CILVEKS_CKODS_3,
  712.                      DESTYTOJ_CILVEKS_CKODS_4,
  713.                      DESTYTOJ_CILVEKS_CKODS_5,
  714.                      DESTYTOJ_CILVEKS_CKODS_6,
  715.                      DESTYTOJ_CILVEKS_CKODS_7,
  716.                      DESTYTOJ_CILVEKS_CKODS_8,
  717.                      SRAUTO_ID,
  718.                      RG_ID,
  719.                      LANG,
  720.                      DALYKAS_GROUP,
  721.                      NUOTOLINIS,
  722.                      ADD_B_GROUP,
  723.                      STATUS,
  724.                      INTENSIVE_COURSE,
  725.                      TIME_CREATED
  726.                      )
  727.                 VALUES
  728.                     (r.time_date+addWeek,
  729.                      startas_plus_weeks,
  730.                      end_plus_weeks,
  731.                      r.week_id,
  732.                      r.lecture_room_id,
  733.                      r.dalykas_id,
  734.                      r.subject_type_id,
  735.                      r.semestr_tkods,
  736.                      r.destytoj_cilveks_ckods,
  737.                      r.student_id,
  738.                      r.destytoj_cilveks_ckods_2,
  739.                      r.destytoj_cilveks_ckods_3,
  740.                      r.destytoj_cilveks_ckods_4,
  741.                      r.destytoj_cilveks_ckods_5,
  742.                      r.destytoj_cilveks_ckods_6,
  743.                      r.destytoj_cilveks_ckods_7,
  744.                      r.destytoj_cilveks_ckods_8,
  745.                      r.srauto_id,
  746.                      r.rg_id,
  747.                      r.lang,
  748.                      r.dalykas_group,
  749.                      r.nuotolinis,
  750.                      r.add_b_group,
  751.                      r.STATUS,
  752.                      r.intensive_course,
  753.                      SYSDATE
  754.                     );
  755.                COMMIT;
  756.                EXCEPTION
  757.                     WHEN OTHERS THEN
  758.                       htp.p(SYS.LOGIN_USER ||' , '|| SYS.INSTANCE_NUM ||' , '|| SYS.DATABASE_NAME ||' , '|| DBMS_UTILITY.FORMAT_ERROR_STACK);
  759.                       htp.br();
  760.                       htp.p('Nepavyko padubliuoti šio įrašo su Srauto ID : '|| r.srauto_id ||' , Laikas : '||startas_plus_weeks||' , '||end_plus_weeks);
  761.                       htp.br();
  762.                       ROLLBACK;  
  763.                END;
  764.              END IF;
  765.            ELSE
  766.               skip := 1;
  767.            END IF;
  768.          END LOOP;
  769.        END LOOP;
  770.        
  771.      CLOSE s;    
  772.      
  773.    END dublicate_TV_objects;
  774.  
  775. FUNCTION get_tvark_objects_by_sem_rg_id ( p_semester_in      IN tvarkis.timetable_records.semestr_tkods%TYPE)
  776.       RETURN TV_types.w_cursor AS
  777.       RESULT TV_types.w_cursor;
  778.   BEGIN
  779.     BEGIN
  780.       OPEN RESULT FOR
  781.         SELECT t.*
  782.         FROM tvarkis.timetable_records t
  783.         JOIN luadm.pp_patalpos pt ON pt.id = t.lecture_room_id
  784.         WHERE t.semestr_tkods = p_semester_in
  785.           AND t.STATUS IS NULL  
  786.           AND time_date BETWEEN TO_DATE('2019-09-02', 'YYYY-mm-dd') AND TO_DATE('2019-09-06', 'YYYY-mm-dd')
  787.           AND t.intensive_course IS NULL;
  788.     EXCEPTION
  789.         WHEN OTHERS THEN
  790.           RESULT := NULL;
  791.           RETURN RESULT;  
  792.     END;  
  793.     RETURN RESULT;
  794.   END get_tvark_objects_by_sem_rg_id;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement