UserOperation_contact_setting_change — finish implementation.
This commit is contained in:
parent
42c27893f7
commit
549df60002
1 changed files with 35 additions and 17 deletions
|
@ -339,12 +339,15 @@ END;
|
||||||
|
|
||||||
-- -------------- VIEW: UserOperation_contact_setting_change ---------------------
|
-- -------------- VIEW: UserOperation_contact_setting_change ---------------------
|
||||||
|
|
||||||
|
|
||||||
|
-- For this one, note that request_type(id) of 12 is hard-coded since that's known to be the "contact-setting" one.
|
||||||
|
-- … it would obviously be better not to hard code it, but looking it up in every query would make it harder to read.
|
||||||
DROP VIEW IF EXISTS UserQuery_contact_settings;
|
DROP VIEW IF EXISTS UserQuery_contact_settings;
|
||||||
CREATE VIEW UserQuery_contact_settings AS
|
CREATE VIEW UserQuery_contact_settings AS
|
||||||
SELECT request_configuration.description as setting_requested, request_type.type as contact_setting
|
SELECT request_configuration.description as setting_requested, request_type.type as contact_setting
|
||||||
FROM request_configuration, request_type
|
FROM request_configuration, request_type
|
||||||
WHERE request_type.type = "contact-setting"
|
WHERE request_type.type = "contact-setting"
|
||||||
AND request_configuration.request_type_id = request_type.id
|
AND request_configuration.request_type_id = request_type.id
|
||||||
ORDER BY request_type.type, request_configuration.description;
|
ORDER BY request_type.type, request_configuration.description;
|
||||||
|
|
||||||
DROP VIEW IF EXISTS UserOperation_contact_setting_change;
|
DROP VIEW IF EXISTS UserOperation_contact_setting_change;
|
||||||
|
@ -367,13 +370,14 @@ DELETE FROM _temp_request_configuration_change;
|
||||||
|
|
||||||
INSERT INTO _temp_request_configuration_change(new_description) VALUES(NEW.setting_requested);
|
INSERT INTO _temp_request_configuration_change(new_description) VALUES(NEW.setting_requested);
|
||||||
|
|
||||||
|
UPDATE _temp_request_configuration_change
|
||||||
|
SET new_request_configuration_id =
|
||||||
|
(SELECT rc.id FROM request_configuration rc, request_type rt
|
||||||
|
WHERE rc.description = NEW.setting_requested
|
||||||
|
AND rt.id = rc.request_type_id
|
||||||
|
AND rt.id = 12)
|
||||||
|
WHERE new_description = NEW.setting_requested;
|
||||||
|
|
||||||
UPDATE _temp_request_configuration_change set new_request_configuration_id = (select rc.id
|
|
||||||
from request_configuration rc, request_type rt
|
|
||||||
where rc.description = NEW.setting_requested
|
|
||||||
and rt.id = rc.request_type_id
|
|
||||||
and rt.type = OLD.contact_setting)
|
|
||||||
WHERE new_description = NEW.setting_requested;
|
|
||||||
UPDATE _temp_request_configuration_change set old_request_configuration_id =
|
UPDATE _temp_request_configuration_change set old_request_configuration_id =
|
||||||
(SELECT rc.id
|
(SELECT rc.id
|
||||||
FROM request_configuration rc, request_type rt
|
FROM request_configuration rc, request_type rt
|
||||||
|
@ -385,17 +389,31 @@ UPDATE _temp_request_configuration_change set old_request_configuration_id =
|
||||||
|
|
||||||
SELECT CASE
|
SELECT CASE
|
||||||
WHEN ( (SELECT new_request_configuration_id from _temp_request_configuration_change) IS NULL )
|
WHEN ( (SELECT new_request_configuration_id from _temp_request_configuration_change) IS NULL )
|
||||||
THEN RAISE(FAIL, "Invalid contact setting; see UserLookup_contact_settings to find what settings are permitted here!")
|
THEN RAISE(FAIL, "Invalid contact setting; see UserQuery_contact_settings to find what settings are permitted here!")
|
||||||
END;
|
END;
|
||||||
|
|
||||||
UPDATE request
|
INSERT OR IGNORE INTO request(donor_id, request_type_id, request_configuration_id, date_requested, notes)
|
||||||
set request_configuration_id =
|
VALUES(NEW.donor_id, 12,
|
||||||
(select new_request_configuration_id from _temp_request_configuration_change),
|
(SELECT new_request_configuration_id from _temp_request_configuration_change),
|
||||||
date_requested = date("now")
|
date("now"), NEW.note);
|
||||||
where id = OLD.request_id
|
|
||||||
and request_configuration_id =
|
-- The following UPDATE will effect 0 rows if OLD.request_id is NULL and this is *by design*.
|
||||||
(select old_request_configuration_id from _temp_request_configuration_change);
|
-- The reason why is we have a UNIQUE index on request(donor_id, request_type_id) and as such, we want
|
||||||
|
-- to just UPDATE an existing request_type_id of 12 (aka "contact-setting") on this trigger if one is present;
|
||||||
|
-- otherwise we want to INSERT it. This is why we did the INSERT OR IGNORE above first; if that fails, then this
|
||||||
|
-- UPDATE will succeed.
|
||||||
|
|
||||||
|
UPDATE request
|
||||||
|
SET request_configuration_id =
|
||||||
|
(select new_request_configuration_id from _temp_request_configuration_change),
|
||||||
|
date_requested = date("now")
|
||||||
|
WHERE id = OLD.request_id
|
||||||
|
AND OLD.request_id is NOT NULL
|
||||||
|
AND OLD.donor_id = donor_id
|
||||||
|
AND request_type_id = 12
|
||||||
|
AND request_configuration_id =
|
||||||
|
(select old_request_configuration_id from _temp_request_configuration_change);
|
||||||
|
|
||||||
DELETE FROM _temp_request_configuration_change;
|
DELETE FROM _temp_request_configuration_change;
|
||||||
|
|
||||||
END;
|
END;
|
||||||
|
|
Loading…
Reference in a new issue