Advertisement
Guest User

Hola, me llamo Navaja Suiza. Te hago de todo

a guest
Feb 20th, 2020
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.02 KB | None | 0 0
  1. -- It generates a valid ticket with the desired packets.
  2. -- It makes sure the code generated is unique among the active tickets
  3. CREATE OR REPLACE FUNCTION generate_ticket_packets(packages_ids int[],
  4.                                                    TYPE text,
  5.                                                    transaction_id text DEFAULT NULL::text,
  6.                                                    _account text DEFAULT NULL::text)
  7.     RETURNS TABLE (ticket_id int, ticket_code text) AS $generate_ticket_packets$
  8.  
  9.     #variable_conflict use_variable
  10.     DECLARE _rec RECORD;
  11.     DECLARE _packages_id int;
  12.     DECLARE _groups_id int;
  13.     DECLARE _services_id int;
  14.     DECLARE c refcursor;
  15.     BEGIN
  16.  
  17.         SELECT create_unique_barcode() INTO ticket_code;
  18.  
  19.         INSERT INTO tickets(code, TYPE) VALUES (ticket_code, TYPE) RETURNING id INTO ticket_id;
  20.  
  21.         FOREACH _packages_id IN ARRAY packages_ids
  22.         LOOP
  23.             SELECT packets_id, duration FROM packages WHERE id = _packages_id INTO _rec;
  24.             SELECT groups_id INTO _groups_id FROM packets WHERE id = _rec.packets_id;
  25.             OPEN c FOR SELECT services_id FROM packets_have_services WHERE packets_id = _rec.packets_id;
  26.             LOOP
  27.                 FETCH c INTO _services_id;
  28.                 EXIT WHEN NOT FOUND;
  29.                 INSERT INTO tickets_have_services(tickets_id, services_id, groups_id, duration) VALUES (ticket_id, _services_id, _groups_id, _rec.duration);
  30.             END LOOP;
  31.             CLOSE c;
  32.         END LOOP;
  33.  
  34.         IF transaction_id IS NOT NULL THEN
  35.             UPDATE purchasing_transactions
  36.             SET ticket_code = ticket_code,
  37.                 transaction_type = CASE WHEN transaction_type = 'PURCHASE_FREE' THEN 'PURCHASE_FREE' ELSE 'PURCHASE_COMMIT' END,
  38.                 account = CASE WHEN _account = NULL::text THEN '{}'::jsonb ELSE _account::jsonb END
  39.             WHERE pasat_transaction_id = transaction_id;
  40.         END IF;
  41.         RETURN NEXT;
  42.  
  43.     END;
  44. $generate_ticket_packets$ LANGUAGE plpgsql;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement