| rev | 
   line source | 
| 
jbe@102
 | 
     1 BEGIN;
 | 
| 
jbe@102
 | 
     2  
 | 
| 
jbe@102
 | 
     3 CREATE OR REPLACE VIEW "liquid_feedback_version" AS
 | 
| 
jbe@102
 | 
     4   SELECT * FROM (VALUES ('1.3.1', 1, 3, 1))
 | 
| 
jbe@102
 | 
     5   AS "subquery"("string", "major", "minor", "revision");
 | 
| 
jbe@102
 | 
     6 
 | 
| 
jbe@102
 | 
     7 ALTER TABLE "member" ADD COLUMN "locked" BOOLEAN NOT NULL DEFAULT FALSE;
 | 
| 
jbe@102
 | 
     8 
 | 
| 
jbe@102
 | 
     9 COMMENT ON COLUMN "member"."locked" IS 'Locked members can not log in.';
 | 
| 
jbe@102
 | 
    10 COMMENT ON COLUMN "member"."active" IS 'Memberships, support and votes are taken into account when corresponding members are marked as active. When the user does not log in for an extended period of time, this flag may be set to FALSE. If the user is not locked, he/she may reset the active flag by logging in.';
 | 
| 
jbe@102
 | 
    11 
 | 
| 
jbe@102
 | 
    12 CREATE OR REPLACE FUNCTION "create_interest_snapshot"
 | 
| 
jbe@102
 | 
    13   ( "issue_id_p" "issue"."id"%TYPE )
 | 
| 
jbe@102
 | 
    14   RETURNS VOID
 | 
| 
jbe@102
 | 
    15   LANGUAGE 'plpgsql' VOLATILE AS $$
 | 
| 
jbe@102
 | 
    16     DECLARE
 | 
| 
jbe@102
 | 
    17       "member_id_v" "member"."id"%TYPE;
 | 
| 
jbe@102
 | 
    18     BEGIN
 | 
| 
jbe@102
 | 
    19       DELETE FROM "direct_interest_snapshot"
 | 
| 
jbe@102
 | 
    20         WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@102
 | 
    21         AND "event" = 'periodic';
 | 
| 
jbe@102
 | 
    22       DELETE FROM "delegating_interest_snapshot"
 | 
| 
jbe@102
 | 
    23         WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@102
 | 
    24         AND "event" = 'periodic';
 | 
| 
jbe@102
 | 
    25       DELETE FROM "direct_supporter_snapshot"
 | 
| 
jbe@102
 | 
    26         WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@102
 | 
    27         AND "event" = 'periodic';
 | 
| 
jbe@102
 | 
    28       INSERT INTO "direct_interest_snapshot"
 | 
| 
jbe@102
 | 
    29         ("issue_id", "event", "member_id", "voting_requested")
 | 
| 
jbe@102
 | 
    30         SELECT
 | 
| 
jbe@102
 | 
    31           "issue_id_p"  AS "issue_id",
 | 
| 
jbe@102
 | 
    32           'periodic'    AS "event",
 | 
| 
jbe@102
 | 
    33           "member"."id" AS "member_id",
 | 
| 
jbe@102
 | 
    34           "interest"."voting_requested"
 | 
| 
jbe@102
 | 
    35         FROM "interest" JOIN "member"
 | 
| 
jbe@102
 | 
    36         ON "interest"."member_id" = "member"."id"
 | 
| 
jbe@102
 | 
    37         WHERE "interest"."issue_id" = "issue_id_p"
 | 
| 
jbe@102
 | 
    38         AND "member"."active";
 | 
| 
jbe@102
 | 
    39       FOR "member_id_v" IN
 | 
| 
jbe@102
 | 
    40         SELECT "member_id" FROM "direct_interest_snapshot"
 | 
| 
jbe@102
 | 
    41         WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@102
 | 
    42         AND "event" = 'periodic'
 | 
| 
jbe@102
 | 
    43       LOOP
 | 
| 
jbe@102
 | 
    44         UPDATE "direct_interest_snapshot" SET
 | 
| 
jbe@102
 | 
    45           "weight" = 1 +
 | 
| 
jbe@102
 | 
    46             "weight_of_added_delegations_for_interest_snapshot"(
 | 
| 
jbe@102
 | 
    47               "issue_id_p",
 | 
| 
jbe@102
 | 
    48               "member_id_v",
 | 
| 
jbe@102
 | 
    49               '{}'
 | 
| 
jbe@102
 | 
    50             )
 | 
| 
jbe@102
 | 
    51           WHERE "issue_id" = "issue_id_p"
 | 
| 
jbe@102
 | 
    52           AND "event" = 'periodic'
 | 
| 
jbe@102
 | 
    53           AND "member_id" = "member_id_v";
 | 
| 
jbe@102
 | 
    54       END LOOP;
 | 
| 
jbe@102
 | 
    55       INSERT INTO "direct_supporter_snapshot"
 | 
| 
jbe@102
 | 
    56         ( "issue_id", "initiative_id", "event", "member_id",
 | 
| 
jbe@102
 | 
    57           "informed", "satisfied" )
 | 
| 
jbe@102
 | 
    58         SELECT
 | 
| 
jbe@102
 | 
    59           "issue_id_p"            AS "issue_id",
 | 
| 
jbe@102
 | 
    60           "initiative"."id"       AS "initiative_id",
 | 
| 
jbe@102
 | 
    61           'periodic'              AS "event",
 | 
| 
jbe@102
 | 
    62           "supporter"."member_id" AS "member_id",
 | 
| 
jbe@102
 | 
    63           "supporter"."draft_id" = "current_draft"."id" AS "informed",
 | 
| 
jbe@102
 | 
    64           NOT EXISTS (
 | 
| 
jbe@102
 | 
    65             SELECT NULL FROM "critical_opinion"
 | 
| 
jbe@102
 | 
    66             WHERE "initiative_id" = "initiative"."id"
 | 
| 
jbe@102
 | 
    67             AND "member_id" = "supporter"."member_id"
 | 
| 
jbe@102
 | 
    68           ) AS "satisfied"
 | 
| 
jbe@102
 | 
    69         FROM "initiative"
 | 
| 
jbe@102
 | 
    70         JOIN "supporter"
 | 
| 
jbe@102
 | 
    71         ON "supporter"."initiative_id" = "initiative"."id"
 | 
| 
jbe@102
 | 
    72         JOIN "current_draft"
 | 
| 
jbe@102
 | 
    73         ON "initiative"."id" = "current_draft"."initiative_id"
 | 
| 
jbe@102
 | 
    74         JOIN "direct_interest_snapshot"
 | 
| 
jbe@102
 | 
    75         ON "supporter"."member_id" = "direct_interest_snapshot"."member_id"
 | 
| 
jbe@102
 | 
    76         AND "initiative"."issue_id" = "direct_interest_snapshot"."issue_id"
 | 
| 
jbe@102
 | 
    77         AND "event" = 'periodic'
 | 
| 
jbe@102
 | 
    78         WHERE "initiative"."issue_id" = "issue_id_p";
 | 
| 
jbe@102
 | 
    79       RETURN;
 | 
| 
jbe@102
 | 
    80     END;
 | 
| 
jbe@102
 | 
    81   $$;
 | 
| 
jbe@102
 | 
    82 
 | 
| 
jbe@102
 | 
    83 COMMIT;
 |