update dependend relations when updating partner person #162

Merged
hsh-michaelhoennig merged 13 commits from feature/update-relations-when-updating-partner-person into master 2025-03-10 12:05:01 +01:00
3 changed files with 70 additions and 7 deletions
Showing only changes of commit 9f1bb284e7 - Show all commits

View File

@ -185,18 +185,19 @@ public class HsOfficePartnerController implements HsOfficePartnersApi {
private void optionallyUpdateRelatedRelations(final HsOfficePartnerRbacEntity saved, final HsOfficePersonRealEntity previousPartnerPerson) { private void optionallyUpdateRelatedRelations(final HsOfficePartnerRbacEntity saved, final HsOfficePersonRealEntity previousPartnerPerson) {
final var partnerPersonHasChanged = !saved.getPartnerRel().getHolder().getUuid().equals(previousPartnerPerson.getUuid()); final var partnerPersonHasChanged = !saved.getPartnerRel().getHolder().getUuid().equals(previousPartnerPerson.getUuid());
if (partnerPersonHasChanged) { if (partnerPersonHasChanged) {
em.createNativeQuery(""" final var count = em.createNativeQuery("""
UPDATE hs_office.relation UPDATE hs_office.relation
SET anchorUuid = :newPartnerPersonUuid SET holderUuid = :newPartnerPersonUuid
WHERE anchorUuid = :oldPartnerPersonUuid WHERE type = 'DEBITOR' AND holderUuid = :oldPartnerPersonUuid AND anchorUuid = :oldPartnerPersonUuid
""") """)
.setParameter("oldPartnerPersonUuid", previousPartnerPerson.getUuid()) .setParameter("oldPartnerPersonUuid", previousPartnerPerson.getUuid())
.setParameter("newPartnerPersonUuid", saved.getPartnerRel().getHolder().getUuid()) .setParameter("newPartnerPersonUuid", saved.getPartnerRel().getHolder().getUuid())
.executeUpdate(); .executeUpdate();
System.out.println(count); // FIXME: remove
em.createNativeQuery(""" em.createNativeQuery("""
UPDATE hs_office.relation UPDATE hs_office.relation
SET holderUuid = :newPartnerPersonUuid SET anchorUuid = :newPartnerPersonUuid
WHERE holderUuid = :oldPartnerPersonUuid AND type = 'DEBITOR' WHERE anchorUuid = :oldPartnerPersonUuid
hsh-michaelhoennig marked this conversation as resolved Outdated

sicherstellen, dass dies der richtige Partner ist

sicherstellen, dass dies der richtige Partner ist
""") """)
.setParameter("oldPartnerPersonUuid", previousPartnerPerson.getUuid()) .setParameter("oldPartnerPersonUuid", previousPartnerPerson.getUuid())
.setParameter("newPartnerPersonUuid", saved.getPartnerRel().getHolder().getUuid()) .setParameter("newPartnerPersonUuid", saved.getPartnerRel().getHolder().getUuid())

View File

@ -7,6 +7,7 @@ import net.hostsharing.hsadminng.hs.office.scenarios.contact.RemovePhoneNumberFr
import net.hostsharing.hsadminng.hs.office.scenarios.contact.ReplaceContactData; import net.hostsharing.hsadminng.hs.office.scenarios.contact.ReplaceContactData;
import net.hostsharing.hsadminng.hs.office.scenarios.debitor.CreateExternalDebitorForPartner; import net.hostsharing.hsadminng.hs.office.scenarios.debitor.CreateExternalDebitorForPartner;
import net.hostsharing.hsadminng.hs.office.scenarios.debitor.CreateSelfDebitorForPartner; import net.hostsharing.hsadminng.hs.office.scenarios.debitor.CreateSelfDebitorForPartner;
import net.hostsharing.hsadminng.hs.office.scenarios.debitor.CreateSelfDebitorForPartnerWithIdenticalContactData;
import net.hostsharing.hsadminng.hs.office.scenarios.debitor.CreateSepaMandateForDebitor; import net.hostsharing.hsadminng.hs.office.scenarios.debitor.CreateSepaMandateForDebitor;
import net.hostsharing.hsadminng.hs.office.scenarios.debitor.DeleteDebitor; import net.hostsharing.hsadminng.hs.office.scenarios.debitor.DeleteDebitor;
import net.hostsharing.hsadminng.hs.office.scenarios.debitor.DontDeleteDefaultDebitor; import net.hostsharing.hsadminng.hs.office.scenarios.debitor.DontDeleteDefaultDebitor;
@ -265,11 +266,27 @@ class HsOfficeScenarioTests extends ScenarioTest {
@TestMethodOrder(MethodOrderer.OrderAnnotation.class) @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class DebitorScenarios { class DebitorScenarios {
@Test
@Order(2000)
@Requires("Partner: P-31011 - Michelle Matthieu")
@Produces("Debitor: D-3101100 - Michelle Matthieu")
void shouldCreateSelfDebitorForPartnerWithIdenticalContactData() {
new CreateSelfDebitorForPartnerWithIdenticalContactData(scenarioTest)
.given("partnerNumber", "P-31011")
.given("debitorNumberSuffix", "00") // TODO.impl: could be assigned automatically, but is not yet
.given("billable", true)
.given("vatBusiness", false)
.given("vatReverseCharge", false)
.given("defaultPrefix", "mim")
.doRun()
.keep();
}
@Test @Test
@Order(2010) @Order(2010)
@Requires("Partner: P-31010 - Test AG") @Requires("Partner: P-31010 - Test AG")
@Produces("Debitor: D-3101000 - Test AG - main debitor") @Produces("Debitor: D-3101000 - Test AG - main debitor")
void shouldCreateSelfDebitorForPartner() { void shouldCreateSelfDebitorForPartnerWithDistinctContactData() {
new CreateSelfDebitorForPartner(scenarioTest) new CreateSelfDebitorForPartner(scenarioTest)
.given("partnerPersonTradeName", "Test AG") .given("partnerPersonTradeName", "Test AG")
.given("billingContactCaption", "Test AG - billing department") .given("billingContactCaption", "Test AG - billing department")
@ -654,7 +671,7 @@ class HsOfficeScenarioTests extends ScenarioTest {
@Test @Test
@Order(6010) @Order(6010)
@Requires("Partner: P-31011 - Michelle Matthieu") @Requires("Debitor: D-3101100 - Michelle Matthieu") // which should also get updated
void shouldReplaceDeceasedPartnerByCommunityOfHeirs() { void shouldReplaceDeceasedPartnerByCommunityOfHeirs() {
new ReplaceDeceasedPartnerWithCommunityOfHeirs(scenarioTest) new ReplaceDeceasedPartnerWithCommunityOfHeirs(scenarioTest)
.given("partnerNumber", "P-31011") .given("partnerNumber", "P-31011")

View File

@ -0,0 +1,45 @@
package net.hostsharing.hsadminng.hs.office.scenarios.debitor;
import net.hostsharing.hsadminng.hs.scenarios.ScenarioTest;
import net.hostsharing.hsadminng.hs.scenarios.UseCase;
import org.springframework.http.HttpStatus;
import static io.restassured.http.ContentType.JSON;
import static org.springframework.http.HttpStatus.CREATED;
public class CreateSelfDebitorForPartnerWithIdenticalContactData
extends UseCase<CreateSelfDebitorForPartnerWithIdenticalContactData> {
public CreateSelfDebitorForPartnerWithIdenticalContactData(final ScenarioTest testSuite) {
super(testSuite);
}
@Override
protected HttpResponse run() {
withTitle("Determine Partner-Person UUID", () ->
httpGet("/api/hs/office/partners/" + uriEncoded("%{partnerNumber}"))
.reportWithResponse().expecting(HttpStatus.OK).expecting(JSON)
.extractUuidAlias("partnerRel.holder.uuid", "partnerPersonUuid")
.extractUuidAlias("partnerRel.contact.uuid", "partnerContactUuid")
);
return httpPost("/api/hs/office/debitors", usingJsonBody("""
{
"debitorRel": {
"anchor.uuid": ${partnerPersonUuid},
"holder.uuid": ${partnerPersonUuid},
"contact.uuid": ${partnerContactUuid}
},
"debitorNumberSuffix": ${debitorNumberSuffix},
"billable": ${billable},
"vatId": ${vatId???},
"vatCountryCode": ${vatCountryCode???},
"vatBusiness": ${vatBusiness},
"vatReverseCharge": ${vatReverseCharge},
"defaultPrefix": ${defaultPrefix}
}
"""))
.expecting(CREATED).expecting(JSON);
}
}