Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- It generates a valid ticket with the desired packets.
- -- It makes sure the code generated is unique among the active tickets
- CREATE OR REPLACE FUNCTION generate_ticket_packets(packages_ids int[],
- TYPE text,
- transaction_id text DEFAULT NULL::text,
- _account text DEFAULT NULL::text)
- RETURNS TABLE (ticket_id int, ticket_code text) AS $generate_ticket_packets$
- #variable_conflict use_variable
- DECLARE _rec RECORD;
- DECLARE _packages_id int;
- DECLARE _groups_id int;
- DECLARE _services_id int;
- DECLARE c refcursor;
- BEGIN
- SELECT create_unique_barcode() INTO ticket_code;
- INSERT INTO tickets(code, TYPE) VALUES (ticket_code, TYPE) RETURNING id INTO ticket_id;
- FOREACH _packages_id IN ARRAY packages_ids
- LOOP
- SELECT packets_id, duration FROM packages WHERE id = _packages_id INTO _rec;
- SELECT groups_id INTO _groups_id FROM packets WHERE id = _rec.packets_id;
- OPEN c FOR SELECT services_id FROM packets_have_services WHERE packets_id = _rec.packets_id;
- LOOP
- FETCH c INTO _services_id;
- EXIT WHEN NOT FOUND;
- INSERT INTO tickets_have_services(tickets_id, services_id, groups_id, duration) VALUES (ticket_id, _services_id, _groups_id, _rec.duration);
- END LOOP;
- CLOSE c;
- END LOOP;
- IF transaction_id IS NOT NULL THEN
- UPDATE purchasing_transactions
- SET ticket_code = ticket_code,
- transaction_type = CASE WHEN transaction_type = 'PURCHASE_FREE' THEN 'PURCHASE_FREE' ELSE 'PURCHASE_COMMIT' END,
- account = CASE WHEN _account = NULL::text THEN '{}'::jsonb ELSE _account::jsonb END
- WHERE pasat_transaction_id = transaction_id;
- END IF;
- RETURN NEXT;
- END;
- $generate_ticket_packets$ LANGUAGE plpgsql;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement