Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.53 KB | None | 0 0
  1. DROP FUNCTION IF EXISTS PUBLIC.efficiency_engineers(INTEGER, VARCHAR, VARCHAR);
  2.  
  3. CREATE OR REPLACE FUNCTION PUBLIC.efficiency_engineers(IN p_user_id INTEGER, IN p_date_start VARCHAR, IN p_date_end VARCHAR)
  4.     RETURNS TABLE(
  5.         department_id               INTEGER,
  6.         department_name             VARCHAR,
  7.         assigned_to_id              INTEGER,
  8.         first_name                  VARCHAR,
  9.         last_name                   VARCHAR,
  10.         NEW                         INTEGER,
  11.         OPEN                        INTEGER,
  12.         closed                      INTEGER,
  13.         pending                     INTEGER,
  14.         reasigned                   INTEGER,
  15.         backlog                     INTEGER
  16.     ) AS
  17. $BODY$
  18. DECLARE
  19.     query                           TEXT := '';
  20.     departments                     INTEGER[];
  21. BEGIN
  22.     SELECT ARRAY(SELECT ud.department_id FROM user_departments(p_user_id) ud) INTO departments;
  23.     IF array_length(departments, 1) = 0 THEN
  24.         RAISE EXCEPTION 'El usuario no está asociado a ningún departamento'
  25.              USING HINT = 'Por favor modifique el usuario';
  26.     END IF;
  27.  
  28.     query := '
  29.    WITH counters AS(
  30.        SELECT
  31.            cl.department_id,
  32.            cl.user_id,
  33.            get_ef_new_tickets(cl.department_id, cl.user_id, ''' || p_date_start || ''', '''|| p_date_end ||''') AS new,
  34.            get_ef_open_tickets(cl.department_id, cl.user_id, ''' || p_date_start || ''', '''|| p_date_end ||''') AS open,
  35.            get_ef_closed_tickets(cl.department_id, cl.user_id, ''' || p_date_start || ''', '''|| p_date_end ||''') AS closed,
  36.            get_ef_pending_tickets(cl.department_id, cl.user_id, ''' || p_date_start || ''') AS pending,
  37.            get_ef_reasigned_tickets(cl.department_id, cl.user_id, ''' || p_date_start || ''', '''|| p_date_end ||''') AS reasigned
  38.        FROM coworkers_list cl
  39.        WHERE department_id IS NOT NULL
  40.    )
  41.    SELECT
  42.        d.id AS department_id,
  43.        d.department_name,
  44.        c.user_id,
  45.        au.first_name,
  46.        au.last_name,
  47.        c.new,
  48.        (c.open - c.closed) AS open,
  49.        c.closed,
  50.        c.pending,
  51.        c.reasigned,
  52.        (c.new - c.closed + c.pending) AS backlog
  53.    FROM counters c
  54.    LEFT JOIN departments d ON c.department_id = d.id
  55.    LEFT JOIN auth_user au ON c.user_id = au.id
  56.    WHERE c.department_id IS NOT NULL
  57.    ORDER BY c.department_id;';
  58.  
  59.     RETURN QUERY EXECUTE query;
  60. END;
  61. $BODY$ LANGUAGE plpgsql IMMUTABLE STRICT SECURITY DEFINER COST 10 ROWS 1000;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement