diff --git a/client/src/pages/onboarding/vv/CheckoutAddress.vue b/client/src/pages/onboarding/vv/CheckoutAddress.vue
index f8ff17ef..76e5a6ed 100644
--- a/client/src/pages/onboarding/vv/CheckoutAddress.vue
+++ b/client/src/pages/onboarding/vv/CheckoutAddress.vue
@@ -13,6 +13,12 @@ import DatatransCembraDeviceFingerprint from "@/components/onboarding/DatatransC
import { getLocalSessionKey } from "@/statistics";
import log from "loglevel";
import { normalizeSwissPhoneNumber, validatePhoneNumber } from "@/utils/phone";
+import {
+ ORGANISATION_NO_COMPANY_ID,
+ ORGANISATION_OTHER_BROKER_ID,
+ ORGANISATION_OTHER_HEALTH_INSURANCE_ID,
+ ORGANISATION_OTHER_PRIVATE_INSURANCE_ID,
+} from "@/consts";
const props = defineProps({
courseType: {
@@ -31,11 +37,14 @@ const userOrganisationName = computed(() => {
}
// Those IDs do not represent a company
- // 1: Other broker
- // 2: Other insurance
- // 3: Other private insurance
- // 31: No company relation
- if ([1, 2, 3, 31].includes(user.organisation)) {
+ if (
+ [
+ ORGANISATION_OTHER_BROKER_ID,
+ ORGANISATION_OTHER_HEALTH_INSURANCE_ID,
+ ORGANISATION_OTHER_PRIVATE_INSURANCE_ID,
+ ORGANISATION_NO_COMPANY_ID,
+ ].includes(user.organisation)
+ ) {
return null;
}
diff --git a/client/src/pages/personalProfile/PersonalProfilePage.vue b/client/src/pages/personalProfile/PersonalProfilePage.vue
index 01903add..99312b07 100644
--- a/client/src/pages/personalProfile/PersonalProfilePage.vue
+++ b/client/src/pages/personalProfile/PersonalProfilePage.vue
@@ -45,7 +45,11 @@ function startEditMode() {
-
diff --git a/client/src/services/onboarding.ts b/client/src/services/onboarding.ts
index 24b59a48..9c59ef48 100644
--- a/client/src/services/onboarding.ts
+++ b/client/src/services/onboarding.ts
@@ -1,4 +1,9 @@
import { isString, startsWith } from "lodash";
+import {
+ ORGANISATION_OTHER_BROKER_ID,
+ ORGANISATION_OTHER_HEALTH_INSURANCE_ID,
+ ORGANISATION_OTHER_PRIVATE_INSURANCE_ID,
+} from "@/consts";
export function profileNextRoute(courseType: string | string[]) {
if (courseType === "uk") {
@@ -10,3 +15,11 @@ export function profileNextRoute(courseType: string | string[]) {
}
return "";
}
+
+export function isOtherOrganisation(orgId: number) {
+ return [
+ ORGANISATION_OTHER_BROKER_ID,
+ ORGANISATION_OTHER_HEALTH_INSURANCE_ID,
+ ORGANISATION_OTHER_PRIVATE_INSURANCE_ID,
+ ].includes(orgId);
+}
diff --git a/cypress/e2e/checkout-vv/checkout.cy.js b/cypress/e2e/checkout-vv/checkout.cy.js
index 00f39ac7..e6007b44 100644
--- a/cypress/e2e/checkout-vv/checkout.cy.js
+++ b/cypress/e2e/checkout-vv/checkout.cy.js
@@ -17,22 +17,31 @@ describe("checkout.cy.js", () => {
cy.get('[data-cy="account-confirm-title"]').should(
"contain",
- "Konto erstellen"
+ "Konto erstellen",
);
cy.get('[data-cy="continue-button"]').click();
cy.get('[data-cy="account-profile-title"]').should(
"contain",
- "Profil ergänzen"
+ "Profil ergänzen",
);
cy.get('[data-cy="dropdown-select"]').click();
- cy.get('[data-cy="dropdown-select-option-Baloise"]').click();
+ cy.get(
+ '[data-cy="dropdown-select-option-andere Krankenversicherer"]',
+ ).click();
+ cy.get("#organisationDetailName").type("FdH GmbH");
cy.get('[data-cy="continue-button"]').click();
+ cy.loadUser("id", TEST_USER_EMPTY_ID).then((u) => {
+ expect(u.organisation_detail_name).to.equal("FdH GmbH");
+ // 2 -> andere Krankenversicherer
+ expect(u.organisation).to.equal(2);
+ });
+
// Adressdaten ausfüllen
cy.get('[data-cy="account-checkout-title"]').should(
"contain",
- "Lehrgang kaufen"
+ "Lehrgang kaufen",
);
cy.get("#street-address").type("Eggersmatt");
cy.get("#street-number").type("32");
@@ -40,7 +49,7 @@ describe("checkout.cy.js", () => {
cy.get("#city").type("Zumholz");
cy.get('[data-cy="add-company-address"]').click();
- cy.get("#company-name").type("Iterativ GmbH");
+ // cy.get("#company-name").clear().type("Iterativ GmbH");
cy.get("#company-street-address").type("Brückfeldstrasse");
cy.get("#company-street-number").type("16");
cy.get("#company-postal-code").type("3012");
@@ -60,7 +69,7 @@ describe("checkout.cy.js", () => {
expect(ci.country).to.equal("CH");
expect(ci.invoice_address).to.equal("org");
- expect(ci.organisation_detail_name).to.equal("Iterativ GmbH");
+ expect(ci.organisation_detail_name).to.equal("FdH GmbH");
expect(ci.organisation_street).to.equal("Brückfeldstrasse");
expect(ci.organisation_street_number).to.equal("16");
expect(ci.organisation_postal_code).to.equal("3012");
@@ -72,12 +81,32 @@ describe("checkout.cy.js", () => {
expect(ci.state).to.equal("ongoing");
});
+ cy.loadUser("id", TEST_USER_EMPTY_ID).then((u) => {
+ expect(u.first_name).to.equal("Flasche");
+ expect(u.last_name).to.equal("Leer");
+
+ expect(u.street).to.equal("Eggersmatt");
+ expect(u.street_number).to.equal("32");
+ expect(u.postal_code).to.equal("1719");
+ expect(u.city).to.equal("Zumholz");
+ expect(u.country).to.equal("CH");
+
+ expect(u.invoice_address).to.equal("org");
+ expect(u.organisation_detail_name).to.equal("FdH GmbH");
+ expect(u.organisation_street).to.equal("Brückfeldstrasse");
+ expect(u.organisation_street_number).to.equal("16");
+ expect(u.organisation_postal_code).to.equal("3012");
+ expect(u.organisation_city).to.equal("Bern");
+ // 2 -> andere Krankenversicherer
+ expect(u.organisation).to.equal(2);
+ });
+
// pay
cy.get('[data-cy="pay-button"]').click();
cy.get('[data-cy="checkout-success-title"]').should(
"contain",
- "Gratuliere"
+ "Gratuliere",
);
// wait for payment callback
cy.wait(3000);
@@ -86,7 +115,7 @@ describe("checkout.cy.js", () => {
// back on dashboard page
cy.get('[data-cy="db-course-title"]').should(
"contain",
- "Versicherungsvermittler"
+ "Versicherungsvermittler",
);
cy.loadCheckoutInformation("user_id", TEST_USER_EMPTY_ID).then((ci) => {
@@ -102,13 +131,13 @@ describe("checkout.cy.js", () => {
cy.get('[data-cy="account-confirm-title"]').should(
"contain",
- "Konto erstellen"
+ "Konto erstellen",
);
cy.get('[data-cy="continue-button"]').click();
cy.get('[data-cy="account-profile-title"]').should(
"contain",
- "Profil ergänzen"
+ "Profil ergänzen",
);
cy.get('[data-cy="dropdown-select"]').click();
cy.get('[data-cy="dropdown-select-option-Baloise"]').click();
@@ -117,10 +146,10 @@ describe("checkout.cy.js", () => {
// Adressdaten ausfüllen
cy.get('[data-cy="account-checkout-title"]').should(
"contain",
- "Lehrgang kaufen"
+ "Lehrgang kaufen",
);
- cy.get('#paymentMethod').select('cembra_byjuno');
+ cy.get("#paymentMethod").select("cembra_byjuno");
cy.get("#street-address").type("Eggersmatt");
cy.get("#street-number").type("32");
@@ -132,32 +161,38 @@ describe("checkout.cy.js", () => {
cy.get('[data-cy="continue-pay"]').click();
- cy.loadExternalApiRequestLog("request_username", "empty@example.com").then((entry) => {
- // ends with "/v1/transactions""
- expect(entry.api_url).to.contain("/v1/transactions");
- expect(entry.request_username).to.contain("empty@example.com");
+ cy.loadExternalApiRequestLog("request_username", "empty@example.com").then(
+ (entry) => {
+ // ends with "/v1/transactions""
+ expect(entry.api_url).to.contain("/v1/transactions");
+ expect(entry.request_username).to.contain("empty@example.com");
- expect(entry.api_request_data.amount).to.equal(32400);
- expect(entry.api_request_data.currency).to.equal("CHF");
- expect(entry.api_request_data.autoSettle).to.equal(true);
+ expect(entry.api_request_data.amount).to.equal(32400);
+ expect(entry.api_request_data.currency).to.equal("CHF");
+ expect(entry.api_request_data.autoSettle).to.equal(true);
- expect(entry.api_request_data.customer.firstName).to.equal("Flasche");
- expect(entry.api_request_data.customer.lastName).to.equal("Leer");
- expect(entry.api_request_data.customer.street).to.equal("Eggersmatt 32");
- expect(entry.api_request_data.customer.zipCode).to.equal("1719");
- expect(entry.api_request_data.customer.city).to.equal("Zumholz");
- expect(entry.api_request_data.customer.country).to.equal("CH");
- expect(entry.api_request_data.customer.type).to.equal("P");
- expect(entry.api_request_data.customer.phone).to.equal("+41792018586");
- expect(entry.api_request_data.customer.birthDate).to.equal("1982-06-09");
+ expect(entry.api_request_data.customer.firstName).to.equal("Flasche");
+ expect(entry.api_request_data.customer.lastName).to.equal("Leer");
+ expect(entry.api_request_data.customer.street).to.equal(
+ "Eggersmatt 32",
+ );
+ expect(entry.api_request_data.customer.zipCode).to.equal("1719");
+ expect(entry.api_request_data.customer.city).to.equal("Zumholz");
+ expect(entry.api_request_data.customer.country).to.equal("CH");
+ expect(entry.api_request_data.customer.type).to.equal("P");
+ expect(entry.api_request_data.customer.phone).to.equal("+41792018586");
+ expect(entry.api_request_data.customer.birthDate).to.equal(
+ "1982-06-09",
+ );
- expect(entry.api_request_data.INT.repaymentType).to.equal(3);
- expect(entry.api_request_data.INT.riskOwner).to.equal("IJ");
- expect(entry.api_request_data.INT.subtype).to.equal("INVOICE");
- expect(entry.api_request_data.INT.deviceFingerprintId).to.not.be.empty;
+ expect(entry.api_request_data.INT.repaymentType).to.equal(3);
+ expect(entry.api_request_data.INT.riskOwner).to.equal("IJ");
+ expect(entry.api_request_data.INT.subtype).to.equal("INVOICE");
+ expect(entry.api_request_data.INT.deviceFingerprintId).to.not.be.empty;
- expect(true).to.be.true;
- });
+ expect(true).to.be.true;
+ },
+ );
// check that results are stored on server
cy.loadCheckoutInformation("user_id", TEST_USER_EMPTY_ID).then((ci) => {
@@ -183,5 +218,23 @@ describe("checkout.cy.js", () => {
expect(ci.ip_address).to.not.be.empty;
expect(ci.device_fingerprint_session_key).to.not.be.empty;
});
+
+ cy.loadUser("id", TEST_USER_EMPTY_ID).then((u) => {
+ expect(u.first_name).to.equal("Flasche");
+ expect(u.last_name).to.equal("Leer");
+
+ expect(u.street).to.equal("Eggersmatt");
+ expect(u.street_number).to.equal("32");
+ expect(u.postal_code).to.equal("1719");
+ expect(u.city).to.equal("Zumholz");
+ expect(u.country).to.equal("CH");
+ expect(u.phone_number).to.equal("+41792018586");
+ expect(u.birth_date).to.equal("1982-06-09");
+
+ expect(u.invoice_address).to.equal("prv");
+
+ // 7 -> Baloise
+ expect(u.organisation).to.equal(7);
+ });
});
});
diff --git a/cypress/e2e/personalProfile/personalProfile.cy.js b/cypress/e2e/personalProfile/personalProfile.cy.js
new file mode 100644
index 00000000..2608f53b
--- /dev/null
+++ b/cypress/e2e/personalProfile/personalProfile.cy.js
@@ -0,0 +1,85 @@
+import { TEST_USER_EMPTY_ID } from "../../consts";
+import { login } from "../helpers";
+
+describe("personalProfile.cy.js", () => {
+ beforeEach(() => {
+ cy.manageCommand("cypress_reset");
+
+ login("empty@example.com", "test");
+ cy.visit("/profile");
+ });
+
+ it("can edit all profile fields", () => {
+ cy.get('[data-cy="editProfileButton"]').click();
+
+ cy.get("#phone").type("079 201 85 86");
+ cy.get('[data-test="dp-input"]').type("09.06.1982{enter}");
+
+ cy.get("#street-address").type("Hafen");
+ cy.get("#street-number").type("123");
+ cy.get("#postal-code").type("DE-20095");
+ cy.get("#city").type("Hamburg");
+ cy.get("#country").select("DE");
+
+ // andere broker
+ cy.get("#organisation").select("1");
+
+ cy.get("#org-detail-name").type("Judihui GmbH");
+ cy.get("#org-street-address").type("Auf der Alm");
+ cy.get("#org-street-number").type("17");
+ cy.get("#org-postal-code").type("AT-6020");
+ cy.get("#org-city").type("Innsbruck");
+ cy.get("#org-country").select("AT");
+
+ cy.get("#invoice-address-organisation").click();
+
+ cy.get('[data-cy="saveButton"]').click();
+
+ // check displayed data
+ cy.get('[data-cy="firstName"]').should("contain", "Flasche");
+ cy.get('[data-cy="lastName"]').should("contain", "Leer");
+ cy.get('[data-cy="email"]').should("contain", "empty@example.com");
+ cy.get('[data-cy="phone"]').should("contain", "079 201 85 86");
+ cy.get('[data-cy="birthDate"]').should("contain", "09.06.1982");
+
+ cy.get('[data-cy="privateAddress"]').should("contain", "Hafen 123");
+ cy.get('[data-cy="privateAddress"]').should("contain", "DE-20095 Hamburg");
+ cy.get('[data-cy="privateAddress"]').should("contain", "Deutschland");
+
+ cy.get('[data-cy="organisationDetailName"]').should(
+ "contain",
+ "andere Broker",
+ );
+ cy.get('[data-cy="organisationAddress"]').should("contain", "Judihui GmbH");
+ cy.get('[data-cy="organisationAddress"]').should(
+ "contain",
+ "Auf der Alm 17",
+ );
+ cy.get('[data-cy="organisationAddress"]').should(
+ "contain",
+ "AT-6020 Innsbruck",
+ );
+ cy.get('[data-cy="organisationAddress"]').should("contain", "Österreich");
+
+ // check stored data
+ cy.loadUser("id", TEST_USER_EMPTY_ID).then((u) => {
+ expect(u.first_name).to.equal("Flasche");
+ expect(u.last_name).to.equal("Leer");
+
+ expect(u.street).to.equal("Hafen");
+ expect(u.street_number).to.equal("123");
+ expect(u.postal_code).to.equal("DE-20095");
+ expect(u.city).to.equal("Hamburg");
+ expect(u.country).to.equal("DE");
+
+ expect(u.invoice_address).to.equal("org");
+ expect(u.organisation_detail_name).to.equal("Judihui GmbH");
+ expect(u.organisation_street).to.equal("Auf der Alm");
+ expect(u.organisation_street_number).to.equal("17");
+ expect(u.organisation_postal_code).to.equal("AT-6020");
+ expect(u.organisation_city).to.equal("Innsbruck");
+ // 1 -> andere Broker
+ expect(u.organisation).to.equal(1);
+ });
+ });
+});
diff --git a/cypress/support/commands.js b/cypress/support/commands.js
index 50dfdf30..3564a74c 100644
--- a/cypress/support/commands.js
+++ b/cypress/support/commands.js
@@ -178,6 +178,17 @@ Cypress.Commands.add("loadCheckoutInformation", (key, value) => {
);
});
+Cypress.Commands.add("loadUser", (key, value) => {
+ return loadObjectJson(
+ key,
+ value,
+ "vbv_lernwelt.core.models.User",
+ "vbv_lernwelt.core.serializers.CypressUserSerializer",
+ true
+ );
+});
+
+
Cypress.Commands.add("makeSelfEvaluation", (answers) => {
for (let i = 0; i < answers.length; i++) {
const answer = answers[i];
diff --git a/server/vbv_lernwelt/core/models.py b/server/vbv_lernwelt/core/models.py
index a1b09008..9d0ca936 100644
--- a/server/vbv_lernwelt/core/models.py
+++ b/server/vbv_lernwelt/core/models.py
@@ -114,8 +114,9 @@ class User(AbstractUser):
blank=True,
)
- # fields gathered from cembra pay form
birth_date = models.DateField(null=True, blank=True)
+
+ # phone number should be stored in the format +41792018586 (not validated)
phone_number = models.CharField(max_length=255, blank=True, default="")
# is only set by abacus invoice export code
diff --git a/server/vbv_lernwelt/core/serializers.py b/server/vbv_lernwelt/core/serializers.py
index 3a656c71..31965017 100644
--- a/server/vbv_lernwelt/core/serializers.py
+++ b/server/vbv_lernwelt/core/serializers.py
@@ -131,6 +131,12 @@ class UserSerializer(serializers.ModelSerializer):
return instance
+class CypressUserSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = User
+ fields = "__all__"
+
+
class OrganisationSerializer(serializers.ModelSerializer):
id = serializers.IntegerField(source="organisation_id", read_only=True)
name = serializers.SerializerMethodField()
diff --git a/server/vbv_lernwelt/course/consts.py b/server/vbv_lernwelt/course/consts.py
index a0dd7b27..a9949458 100644
--- a/server/vbv_lernwelt/course/consts.py
+++ b/server/vbv_lernwelt/course/consts.py
@@ -28,3 +28,10 @@ UK_COURSE_IDS = [
COURSE_UK_TRAINING_FR,
COURSE_UK_TRAINING_IT,
]
+
+
+# Organization IDs
+ORGANISATION_OTHER_BROKER_ID = 1
+ORGANISATION_OTHER_HEALTH_INSURANCE_ID = 2
+ORGANISATION_OTHER_PRIVATE_INSURANCE_ID = 3
+ORGANISATION_NO_COMPANY_ID = 31