Wechselkurs pro Angebot/Auftrag: DB-Upgrade-Skript + Rose
authorBernd Bleßmann <bernd@kivitendo-premium.de>
Wed, 17 Jun 2020 09:40:03 +0000 (11:40 +0200)
committerBernd Bleßmann <bernd@kivitendo-premium.de>
Mon, 27 Jul 2020 13:31:52 +0000 (15:31 +0200)
exchangerate direkt in Tabelle oe ablegen.

Die Implementierung, um bei Angeboten/Aufträgen den Wechselkurs pro Beleg
zu speichern folgt in weiteren commits und wird erstmal nur für den neuen
Auftrags-Controller umgesetzt.

Bezieht sich auch auf #135
Refs #135

SL/DB/MetaSetup/Order.pm
sql/Pg-upgrade2/exchangerate_in_oe.sql [new file with mode: 0644]

index b359c07..d6922bd 100644 (file)
@@ -21,6 +21,7 @@ __PACKAGE__->meta->columns(
   delivery_vendor_id      => { type => 'integer' },
   department_id           => { type => 'integer' },
   employee_id             => { type => 'integer' },
+  exchangerate            => { type => 'numeric', precision => 15, scale => 5 },
   expected_billing_date   => { type => 'date' },
   globalproject_id        => { type => 'integer' },
   id                      => { type => 'integer', not_null => 1, sequence => 'id' },
diff --git a/sql/Pg-upgrade2/exchangerate_in_oe.sql b/sql/Pg-upgrade2/exchangerate_in_oe.sql
new file mode 100644 (file)
index 0000000..ca3defd
--- /dev/null
@@ -0,0 +1,12 @@
+-- @tag: exchangerate_in_oe
+-- @description: Wechselkurs pro Angebot/Auftrag in Belegtabelle speichern
+-- @depends: release_3_5_5
+
+ALTER TABLE oe ADD COLUMN exchangerate NUMERIC(15,5);
+
+WITH table_ex AS
+  (SELECT oe.id, COALESCE(CASE WHEN customer_id IS NOT NULL THEN buy ELSE sell END, 1.0) AS exchangerate FROM oe
+    LEFT JOIN exchangerate ON (oe.transdate = exchangerate.transdate AND oe.currency_id = exchangerate.currency_id)
+    WHERE oe.currency_id != (SELECT currency_id FROM defaults))
+  UPDATE oe SET exchangerate = (SELECT exchangerate FROM table_ex WHERE table_ex.id = oe.id)
+    WHERE EXISTS (SELECT table_ex.exchangerate FROM table_ex WHERE table_ex.id = oe.id);