Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 691ad25a

Von Jan Büren vor mehr als 15 Jahren hinzugefügt

  • ID 691ad25aeb4304b1b2344c717eca09dfde8ebba0
  • Vorgänger 7942a6ac
  • Nachfolger 705b8473

Fix fuer Bug 980 Ertraege auch fuer Erzeugnisse in Rechnungen ausweisen

Unterschiede anzeigen:

sql/Pg-upgrade2/trigger_assembly_update_lastcost.sql
1
-- @tag: trigger_assembly_update_lastcost
2
-- @description: Der EK fuer das Erzeugnis berechnet sich aus der Summe aller EKs der Einzelwaren mal Anzahl und Preisfaktor. Somit wird auch jetzt auch bei den Detailpositionen der Rechnung der Ertrag fuer Erzeugnisse ausgerechnet. 
3
-- @depends: release_2_4_3
4

  
5

  
6
-- Einmal vorab fuer alle schon vorhandenen Artikel
7
  UPDATE parts SET lastcost = COALESCE((select sum ((a.qty * (p.lastcost / COALESCE(pf.factor,
8
    1)))) as summe from assembly a left join parts p on (p.id = a.parts_id)
9
  LEFT JOIN price_factors pf on (p.price_factor_id = pf.id) where a.id = parts.id),0)
10
  WHERE assembly = TRUE;
11

  
12

  
13
-- Und hier die Funktion fuer den Trigger, sobald ein Erzeugnis (table assembly) aktualisiert wird.
14
-- Frage: DELETE ist eigentlich nicht wirklich noetig, da in der Maske Erzeugnis anscheinend 
15
-- immer die entsprechende Row erst geloescht und dann erneut eingefuegt wird ... 
16
-- Bin mir aber nicht sicher
17
CREATE OR REPLACE FUNCTION update_purchase_price() RETURNS trigger AS '
18
BEGIN
19
  if tg_op = ''DELETE'' THEN
20
    UPDATE parts SET lastcost = COALESCE((select sum ((a.qty * (p.lastcost / COALESCE(pf.factor,
21
    1)))) as summe from assembly a left join parts p on (p.id = a.parts_id) 
22
    LEFT JOIN price_factors pf on (p.price_factor_id = pf.id) where a.id = parts.id),0) 
23
    WHERE assembly = TRUE and id = old.id;
24
    return old;	-- old ist eine referenz auf die geloeschte reihe
25
  ELSE
26
    UPDATE parts SET lastcost = COALESCE((select sum ((a.qty * (p.lastcost / COALESCE(pf.factor, 
27
    1)))) as summe from assembly a left join parts p on (p.id = a.parts_id)
28
    LEFT JOIN price_factors pf on (p.price_factor_id = pf.id) 
29
    WHERE a.id = parts.id),0) where assembly = TRUE and id = new.id;
30
    return new; -- entsprechend new, wird wahrscheinlich benoetigt, um den korrekten Eintrag 
31
		-- zu filtern bzw. dann zu aktualisieren
32
  END IF;
33
END;
34
' LANGUAGE plpgsql;
35

  
36

  
37
CREATE TRIGGER trig_assembly_purchase_price
38
  AFTER INSERT OR UPDATE OR DELETE ON assembly
39
  FOR EACH ROW EXECUTE PROCEDURE update_purchase_price();

Auch abrufbar als: Unified diff