From b16c9f053a9209dcc37aa01dac10fb84a8d8bd8d Mon Sep 17 00:00:00 2001 From: Timotheus Pokorra Date: Tue, 26 Nov 2024 22:51:04 +0100 Subject: [PATCH 1/2] add view for Znuny: ticket_customer_user --- .../9-hs-global/9120-integration-znuny.sql | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/main/resources/db/changelog/9-hs-global/9120-integration-znuny.sql b/src/main/resources/db/changelog/9-hs-global/9120-integration-znuny.sql index 0247ec53..4fcc4b84 100644 --- a/src/main/resources/db/changelog/9-hs-global/9120-integration-znuny.sql +++ b/src/main/resources/db/changelog/9-hs-global/9120-integration-znuny.sql @@ -5,10 +5,11 @@ --changeset timotheus.pokorra:hs-global-integration-znuny endDelimiter:--// -- TODO.impl: also select column debitorNumber and do not filter anymore for '00' CREATE OR REPLACE VIEW hs_integration.contact AS - SELECT DISTINCT ON (uuid) + SELECT DISTINCT ON (contact_uuid) partner.partnernumber as partnernumber, debitor.defaultprefix as defaultprefix, - c.uuid as uuid, + partner.uuid as partner_uuid, + c.uuid as contact_uuid, (CASE WHEN per.salutation <> '' THEN per.salutation ELSE NULL END) as salutation, (CASE WHEN per.givenname <> '' THEN per.givenname ELSE NULL END) as givenname, (CASE WHEN per.familyname <> '' THEN per.familyname ELSE NULL END) as familyname, @@ -38,10 +39,11 @@ CREATE OR REPLACE VIEW hs_integration.contact AS JOIN hs_office.contact AS c ON c.uuid = pRel.contactuuid JOIN hs_office.person AS per ON per.uuid = pRel.holderuuid UNION - SELECT DISTINCT ON (uuid) + SELECT DISTINCT ON (contact_uuid) partner.partnernumber as partnernumber, debitor.defaultprefix as defaultprefix, - c.uuid as uuid, + partner.uuid as partner_uuid, + c.uuid as contact_uuid, (CASE WHEN per.salutation <> '' THEN per.salutation ELSE NULL END) as salutation, (CASE WHEN per.givenname <> '' THEN per.givenname ELSE NULL END) as givenname, (CASE WHEN per.familyname <> '' THEN per.familyname ELSE NULL END) as familyname, @@ -73,7 +75,7 @@ CREATE OR REPLACE VIEW hs_integration.contact AS JOIN hs_office.person AS per ON per.uuid = relation.holderuuid; CREATE OR REPLACE VIEW hs_integration.ticket_customer_user AS - SELECT c.uuid, + SELECT c.contact_uuid, max(c.partnernumber)::text as number, max(c.defaultprefix) as code, max(c.email) as login, @@ -96,7 +98,27 @@ CREATE OR REPLACE VIEW hs_integration.ticket_customer_user AS string_agg(CASE WHEN relation.mark IS NULL THEN relation.type::text ELSE CONCAT(relation.type::text, ':', relation.mark::text) END, '/'::text) AS comment, 1 AS valid FROM hs_integration.contact AS c - JOIN hs_office.relation AS relation ON c.uuid = relation.contactuuid + JOIN hs_office.relation AS relation ON c.contact_uuid = relation.contactuuid WHERE (c.defaultprefix != 'hsh' OR (c.partnernumber = 10000 AND c.email = 'hostmaster@hostsharing.net')) - GROUP BY c.uuid; + GROUP BY c.contact_uuid; + +CREATE OR REPLACE VIEW hs_integration.ticket_customer_company AS + SELECT + partner.partnernumber::text as number, + debitor.defaultprefix as code, + concat_ws('/'::text, to_char(lower(membership.validity), 'YYYY-MM-DD'::text), to_char(upper(membership.validity) - INTERVAL '1 days', 'YYYY-MM-DD'::text)) AS comment, + 1 AS valid + FROM hs_office.partner AS partner + JOIN hs_office.relation AS pRel + ON pRel.type = 'PARTNER' + AND pRel.uuid = partner.partnerRelUuid + JOIN hs_office.relation AS dRel + ON dRel.type = 'DEBITOR' + AND dRel.anchorUuid = pRel.holderUuid + JOIN hs_office.debitor AS debitor + ON debitor.debitorreluuid = dRel.uuid + AND debitor.debitornumbersuffix = '00' + LEFT OUTER JOIN hs_office.membership AS membership ON membership.partneruuid = partner.uuid + ORDER BY number; + --// \ No newline at end of file From ef1502c7261c63d3c4d01de1b69bcb42c2a8e64a Mon Sep 17 00:00:00 2001 From: Timotheus Pokorra Date: Thu, 28 Nov 2024 11:04:39 +0100 Subject: [PATCH 2/2] fix for matching asset transactions --- .../hs/migration/BaseOfficeDataImport.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/test/java/net/hostsharing/hsadminng/hs/migration/BaseOfficeDataImport.java b/src/test/java/net/hostsharing/hsadminng/hs/migration/BaseOfficeDataImport.java index 3ab17692..e8e5090f 100644 --- a/src/test/java/net/hostsharing/hsadminng/hs/migration/BaseOfficeDataImport.java +++ b/src/test/java/net/hostsharing/hsadminng/hs/migration/BaseOfficeDataImport.java @@ -880,17 +880,20 @@ public abstract class BaseOfficeDataImport extends CsvDataImport { coopAssets.put(rec.getInteger("member_asset_id"), assetTransaction); }); - coopAssets.values().forEach(assetTransaction -> { + + coopAssets.entrySet().forEach(entry -> { + final var legacyId = entry.getKey(); + final var assetTransaction = entry.getValue(); if (assetTransaction.getTransactionType() == HsOfficeCoopAssetsTransactionType.REVERSAL) { - connectToRelatedRevertedAssetTx(assetTransaction); + connectToRelatedRevertedAssetTx(legacyId, assetTransaction); } if (assetTransaction.getTransactionType() == HsOfficeCoopAssetsTransactionType.TRANSFER) { - connectToRelatedAdoptionAssetTx(assetTransaction); + connectToRelatedAdoptionAssetTx(legacyId, assetTransaction); } }); } - private static void connectToRelatedRevertedAssetTx(final HsOfficeCoopAssetsTransactionEntity assetTransaction) { + private static void connectToRelatedRevertedAssetTx(final int legacyId, final HsOfficeCoopAssetsTransactionEntity assetTransaction) { final var negativeValue = assetTransaction.getAssetValue().negate(); final var revertedAssetTx = coopAssets.values().stream().filter(a -> a.getTransactionType() != HsOfficeCoopAssetsTransactionType.REVERSAL && @@ -903,10 +906,11 @@ public abstract class BaseOfficeDataImport extends CsvDataImport { //revertedAssetTx.setAssetReversalTx(assetTransaction); } - private static void connectToRelatedAdoptionAssetTx(final HsOfficeCoopAssetsTransactionEntity assetTransaction) { + private static void connectToRelatedAdoptionAssetTx(final int legacyId, final HsOfficeCoopAssetsTransactionEntity assetTransaction) { final var negativeValue = assetTransaction.getAssetValue().negate(); final var adoptionAssetTx = coopAssets.values().stream().filter(a -> a.getTransactionType() == HsOfficeCoopAssetsTransactionType.ADOPTION && + (!a.getValueDate().equals(LocalDate.of( 2014 , 12 , 31)) || a.getComment().contains(Integer.toString(assetTransaction.getMembership().getMemberNumber()/100))) && a.getMembership() != assetTransaction.getMembership() && a.getValueDate().equals(assetTransaction.getValueDate()) && a.getAssetValue().equals(negativeValue))