summaryrefslogtreecommitdiff
path: root/sql/modules/Person.sql
blob: 28e3d4e49ccf5df4fc8c78b22db73a497c9d49f7 (plain)
  1. begin;
  2. CREATE OR REPLACE FUNCTION person_save
  3. (in_entity_id integer, in_salutation_id int,
  4. in_first_name text, in_middle_name text, in_last_name text
  5. )
  6. RETURNS INT AS $$
  7. DECLARE
  8. e_id int;
  9. e entity;
  10. loc location;
  11. l_id int;
  12. p_id int;
  13. BEGIN
  14. select * into e from entity where id = in_entity_id and entity_class = 3;
  15. e_id := in_entity_id;
  16. IF NOT FOUND THEN
  17. INSERT INTO entity (name, entity_class)
  18. values (in_first_name || ' ' || in_last_name, 3);
  19. e_id := currval('entity_id_seq');
  20. END IF;
  21. UPDATE person SET
  22. salutation_id = in_salutation_id,
  23. first_name = in_first_name,
  24. last_name = in_last_name,
  25. middle_name = in_middle_name
  26. WHERE
  27. entity_id = in_entity_id;
  28. IF FOUND THEN
  29. RETURN in_entity_id;
  30. ELSE
  31. -- Do an insert
  32. INSERT INTO person (salutation_id, first_name, last_name, entity_id)
  33. VALUES (in_salutation_id, in_first_name, in_last_name, e_id);
  34. RETURN e_id;
  35. END IF;
  36. END;
  37. $$ language plpgsql;
  38. CREATE OR REPLACE FUNCTION employee__save
  39. (in_entity_id int, in_start_date date, in_end_date date, in_dob date,
  40. in_role text, in_ssn text, in_sales bool, in_manager_id int, in_employee_number text)
  41. RETURNS int AS $$
  42. DECLARE out_id INT;
  43. BEGIN
  44. UPDATE entity_employee
  45. SET startdate = in_start_date,
  46. enddate = in_end_date,
  47. dob = in_dob,
  48. role = in_role,
  49. ssn = in_ssn,
  50. manager_id = in_manager_id,
  51. employeenumber = in_employee_number,
  52. person_id = (select id FROM person
  53. WHERE entity_id = in_entity_id)
  54. WHERE entity_id = in_entity_id;
  55. out_id = in_entity_id;
  56. IF NOT FOUND THEN
  57. INSERT INTO entity_employee
  58. (startdate, enddate, dob, role, ssn, manager_id,
  59. employeenumber, entity_id, person_id)
  60. VALUES
  61. (in_start_date, in_end_date, in_dob, in_role, in_ssn,
  62. in_manager_id, in_employee_number, in_entity_id,
  63. (SELECT id FROM person
  64. WHERE entity_id = in_entity_id));
  65. RETURN in_entity_id;
  66. END IF;
  67. END;
  68. $$ LANGUAGE PLPGSQL;
  69. commit;