CSUN#34064 ontdubbelen van notificaties verbeterd

svn path=/Database/trunk/; revision=27007
This commit is contained in:
Peter Feij
2015-11-13 17:31:26 +00:00
parent 498fedac3b
commit 1dc72d5e9d

View File

@@ -2065,8 +2065,13 @@ CREATE OR REPLACE PACKAGE BODY fac AS
soms := SUBSTR(soms, 1, INSTR (soms, CHR(10)) - 1);
END IF;
-- voorkom e-mail/sms van deze *UPD als de *NEW nog niet eens de deur uit is door Putorders
-- Gooi bestaande identieke notificaties eerst maar eens uit de queue. Voor het gemak.
-- De nieuwe is minstens zo goed en gaat per definitie via dezelfde kanalen
fac.clrnotifications(pcode, pref, soms, pto); -- Dubbele notificaties verwijderen indien dezelfde omschrijving en voor dezelfde ontvanger.
-- Voorkom e-mail/sms van deze zwakkere *UPD als de *NEW nog niet eens de deur uit is door Putorders
-- of meer algemeen: elke e-mail/sms die nog niet de deur is.
-- Je wilt wel op alle gedefinieerde kanalen precies een bericht houden
IF BITAND (smode, 2 + 4) <> 0
THEN
-- Zoek de lmode van een al/nog aanwezige fac_notificatie die over hetzelfde gaat
@@ -2074,7 +2079,7 @@ CREATE OR REPLACE PACKAGE BODY fac AS
SELECT fac_srtnotificatie_code, fac_notificatie_status, fac_notificatie_oms
INTO oldercode, oldersmode, oldersoms
FROM fac_v_notifyqueue ander
WHERE (pcode = ander.fac_srtnotificatie_code
WHERE (pcode = ander.fac_srtnotificatie_code -- die is meestal al gewist, zou nog kunnen met andere tekst
OR pcode = 'BESUPD'
AND ander.fac_srtnotificatie_code IN ('BESNEW')
OR pcode IN ('RESUPD','RESBEV','RESOPT','RESCLN')
@@ -2099,27 +2104,15 @@ CREATE OR REPLACE PACKAGE BODY fac AS
NULL;
END;
-- Identieke noti als reeds in de queue staat, dan zijn wij klaar; hoeft niet nog eens
-- en direct RETURN zodat bestaande noti niet ook nog eens wordt teruggetrokken (is in
-- dit geval, hoewel ouder, dus niet waardeloos)!
IF (pcode = oldercode AND smode = oldersmode AND soms = oldersoms)
IF (oldercode IS NOT NULL)
THEN
-- Nothing to do
RETURN;
END IF;
IF BITAND (smode, 2) = 2 AND BITAND (oldersmode, 2) = 2
THEN
lmode := BITAND (lmode, 255 - 2);
END IF;
IF BITAND (smode, 4) = 4 AND BITAND (oldersmode, 4) = 4
THEN
lmode := BITAND (lmode, 255 - 4);
-- Deze is zwakker dan de bestaande, deze hoeft dus niet nog eens via diezelfde kanalen.
-- Het kan dus best zijn dat er niets over blijft.
lmode := BITAND (lmode, 255 - oldersmode);
END IF;
-- Dan nog omgekeerd: trek eerdere zwakkere notificaties terug als deze pcode sterker is
-- als die oudere nog niet de deur uit is. NB: de tracking blijft natuurlijk gewoon
-- en die oudere nog niet de deur uit is. NB: de tracking blijft natuurlijk gewoon
-- Ook portalberichten worden zo verminderd, en niet alleen die van de laatste 5 minuten
-- U zult bezwaar maken, maar mijn motivatie is dat notificatie een attentiewaarde heeft
-- en een oude attentie waardeloos is. Herhaalde update werden ook al onderdrukt.
@@ -2153,8 +2146,6 @@ CREATE OR REPLACE PACKAGE BODY fac AS
ELSE
NULL;
END CASE;
-- Alle dubbele notificaties met dezelfde omschrijving voor dezelfde ontvanger verwijderen.
fac.clrnotifications(pcode, pref, soms, pto); -- Dubbele notificaties verwijderen indien dezelfde omschrijving en voor dezelfde ontvanger.
END IF;
END IF;