diff --git a/Archief/Issue 3144 - github/Query after possible fix.docx b/Archief/Issue 3144 - github/Query after possible fix.docx new file mode 100644 index 0000000..78e3d11 Binary files /dev/null and b/Archief/Issue 3144 - github/Query after possible fix.docx differ diff --git a/Archief/Issue 3144 - github/Query after possible fix.pdf b/Archief/Issue 3144 - github/Query after possible fix.pdf new file mode 100644 index 0000000..2ddc662 Binary files /dev/null and b/Archief/Issue 3144 - github/Query after possible fix.pdf differ diff --git a/Archief/Issue 3144 - github/Query speed with only name, only email, and possible fix.pdf b/Archief/Issue 3144 - github/Query speed with only name, only email, and possible fix.pdf new file mode 100644 index 0000000..510cd98 Binary files /dev/null and b/Archief/Issue 3144 - github/Query speed with only name, only email, and possible fix.pdf differ diff --git a/Archief/Issue 3144 - github/Slow Query + Explain of planner in Adminer.pdf b/Archief/Issue 3144 - github/Slow Query + Explain of planner in Adminer.pdf new file mode 100644 index 0000000..fd74cd1 Binary files /dev/null and b/Archief/Issue 3144 - github/Slow Query + Explain of planner in Adminer.pdf differ diff --git a/Archief/Issue 3144 - github/With only the name as duplicate check fiel1.pdf b/Archief/Issue 3144 - github/With only the name as duplicate check fiel1.pdf new file mode 100644 index 0000000..ff40d71 Binary files /dev/null and b/Archief/Issue 3144 - github/With only the name as duplicate check fiel1.pdf differ diff --git a/Archief/Issue 3144 - github/With only the name as duplicate check field.pdf b/Archief/Issue 3144 - github/With only the name as duplicate check field.pdf new file mode 100644 index 0000000..4a5437b Binary files /dev/null and b/Archief/Issue 3144 - github/With only the name as duplicate check field.pdf differ diff --git a/Archief/Issue 3144 - github/duplicate-check-email-only.log b/Archief/Issue 3144 - github/duplicate-check-email-only.log new file mode 100644 index 0000000..a787471 --- /dev/null +++ b/Archief/Issue 3144 - github/duplicate-check-email-only.log @@ -0,0 +1,13 @@ +240914 13:53:09 4625 Connect nvkhcrm@localhost on nvkhcrm using Socket + 4625 Query SELECT authToken.id AS `id`, authToken.is_active AS `isActive`, authToken.token AS `token`, authToken.secret AS `secret`, authToken.user_id AS `userId`, authToken.portal_id AS `portalId`, authToken.hash AS `hash`, authToken.created_at AS `createdAt`, authToken.last_access AS `lastAccess`, authToken.modified_at AS `modifiedAt` FROM `auth_token` AS `authToken` WHERE authToken.token = '9f82b356063f608eff8a22b411d654ab' AND authToken.deleted = 0 LIMIT 0, 1 + 4625 Query SELECT user.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(user.first_name, ''), ' ', IFNULL(user.middle_name, ''), ' ', IFNULL(user.last_name, ''))), ''), ' ', ' ') AS `name`, user.deleted AS `deleted`, user.user_name AS `userName`, user.type AS `type`, user.password AS `password`, user.auth_method AS `authMethod`, user.api_key AS `apiKey`, user.salutation_name AS `salutationName`, user.first_name AS `firstName`, user.last_name AS `lastName`, user.is_active AS `isActive`, user.title AS `title`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, user.avatar_color AS `avatarColor`, user.gender AS `gender`, user.created_at AS `createdAt`, user.modified_at AS `modifiedAt`, userData.auth2_f_a AS `auth2FA`, user.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, user.delete_id AS `deleteId`, user.default_team_id AS `defaultTeamId`, defaultTeam.name AS `defaultTeamName`, user.contact_id AS `contactId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `contactName`, user.avatar_id AS `avatarId`, avatar.name AS `avatarName`, user.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, user.dashboard_template_id AS `dashboardTemplateId`, dashboardTemplate.name AS `dashboardTemplateName`, user.working_time_calendar_id AS `workingTimeCalendarId`, user.layout_set_id AS `layoutSetId`, userData.id AS `userDataId`, userData.id AS `userDataName` FROM `user` AS `user` LEFT JOIN `attachment` AS `avatar` ON user.avatar_id = avatar.id LEFT JOIN `contact` AS `contact` ON user.contact_id = contact.id LEFT JOIN `user_data` AS `userData` ON user.id = userData.user_id AND userData.deleted = 0 LEFT JOIN `dashboard_template` AS `dashboardTemplate` ON user.dashboard_template_id = dashboardTemplate.id LEFT JOIN `user` AS `createdBy` ON user.created_by_id = createdBy.id LEFT JOIN `team` AS `defaultTeam` ON user.default_team_id = defaultTeam.id LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON user.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'User' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON user.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'User' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 WHERE user.user_name = 'admin' AND user.password = 'Wkpa1j5J2/Og1qN4NMoygh3XDj1Je1Gugpdzpd4QA0m7t92XN8Ze8AyFVlPlXlsOM.DU.2.XbH3wVoK11LOon/' AND user.type NOT IN ('api','system') AND user.deleted = 0 LIMIT 0, 1 + 4625 Query SELECT team.id AS `id`, team.name AS `name` FROM `team` AS `team` JOIN `team_user` AS `teamUser` ON teamUser.team_id = team.id AND teamUser.user_id = '1' AND teamUser.deleted = 0 WHERE team.deleted = 0 ORDER BY team.name ASC + 4625 Query UPDATE `auth_token` SET auth_token.last_access = '2024-09-14 11:53:09', auth_token.modified_at = '2024-09-14 11:53:09' WHERE auth_token.id = '66e4c445c1874e115' AND auth_token.deleted = 0 + 4625 Query SELECT authLogRecord.id AS `id` FROM `auth_log_record` AS `authLogRecord` WHERE authLogRecord.auth_token_id = '66e4c445c1874e115' AND authLogRecord.deleted = 0 ORDER BY authLogRecord.request_time DESC LIMIT 0, 1 + 4625 Query SELECT preferences.id AS `id`, preferences.data AS `data` FROM `preferences` WHERE preferences.id = '1' LIMIT 0, 1 + 4625 Query SELECT autofollow.entity_type AS `entityType` FROM `autofollow` AS `autofollow` WHERE autofollow.user_id = '1' AND autofollow.deleted = 0 + 4625 Query SELECT user.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(user.first_name, ''), ' ', IFNULL(user.middle_name, ''), ' ', IFNULL(user.last_name, ''))), ''), ' ', ' ') AS `name`, user.deleted AS `deleted`, user.user_name AS `userName`, user.type AS `type`, user.password AS `password`, user.auth_method AS `authMethod`, user.api_key AS `apiKey`, user.salutation_name AS `salutationName`, user.first_name AS `firstName`, user.last_name AS `lastName`, user.is_active AS `isActive`, user.title AS `title`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, user.avatar_color AS `avatarColor`, user.gender AS `gender`, user.created_at AS `createdAt`, user.modified_at AS `modifiedAt`, userData.auth2_f_a AS `auth2FA`, user.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, user.delete_id AS `deleteId`, user.default_team_id AS `defaultTeamId`, defaultTeam.name AS `defaultTeamName`, user.contact_id AS `contactId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `contactName`, user.avatar_id AS `avatarId`, avatar.name AS `avatarName`, user.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, user.dashboard_template_id AS `dashboardTemplateId`, dashboardTemplate.name AS `dashboardTemplateName`, user.working_time_calendar_id AS `workingTimeCalendarId`, user.layout_set_id AS `layoutSetId`, userData.id AS `userDataId`, userData.id AS `userDataName` FROM `user` AS `user` LEFT JOIN `attachment` AS `avatar` ON user.avatar_id = avatar.id LEFT JOIN `contact` AS `contact` ON user.contact_id = contact.id LEFT JOIN `user_data` AS `userData` ON user.id = userData.user_id AND userData.deleted = 0 LEFT JOIN `dashboard_template` AS `dashboardTemplate` ON user.dashboard_template_id = dashboardTemplate.id LEFT JOIN `user` AS `createdBy` ON user.created_by_id = createdBy.id LEFT JOIN `team` AS `defaultTeam` ON user.default_team_id = defaultTeam.id LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON user.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'User' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON user.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'User' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 WHERE user.id = '1' AND user.deleted = 0 + 4625 Query SELECT contact.id AS `id` FROM `contact` AS `contact` LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 WHERE ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl'))) AND contact.deleted = 0 LIMIT 0, 1 + 4625 Query SELECT contact.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `name`, contact.deleted AS `deleted`, contact.salutation_name AS `salutationName`, contact.first_name AS `firstName`, contact.last_name AS `lastName`, accountContactPrimary.role AS `title`, contact.description AS `description`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, contact.do_not_call AS `doNotCall`, contact.address_street AS `addressStreet`, contact.address_city AS `addressCity`, contact.address_state AS `addressState`, contact.address_country AS `addressCountry`, contact.address_postal_code AS `addressPostalCode`, accountContactPrimary.is_inactive AS `accountIsInactive`, account.type AS `accountType`, contact.created_at AS `createdAt`, contact.modified_at AS `modifiedAt`, portalUser.id IS NOT NULL AS `hasPortalUser`, contact.agbcode AS `agbcode`, contact.rbcznummer AS `rbcznummer`, contact.m_b_k_datum AS `mBKDatum`, contact.m_code AS `mCode`, contact.geboortedatum AS `geboortedatum`, contact.datum_registratie AS `datumRegistratie`, contact.balens AS `balens`, contact.regiocode AS `regiocode`, contact.einddatum AS `einddatum`, contact.vakopleiding_datum_diploma AS `vakopleidingDatumDiploma`, contact.datum_v_o_g AS `datumVOG`, contact.geslacht AS `geslacht`, contact.initials_name AS `initialsName`, contact.dispensatie AS `dispensatie`, contact.website AS `website`, contact.lidnummer AS `lidnummer`, contact.quasier AS `quasier`, contact.geplande_afstudeerdatum AS `geplandeAfstudeerdatum`, contact.nascholingstotalen_herberekenen AS `nascholingstotalenHerberekenen`, contact.labels AS `labels`, contact.uitleg_nascholings_berekening AS `uitlegNascholingsBerekening`, contact.nascholing_onvoldoende AS `nascholingOnvoldoende`, contact.survey_id AS `surveyId`, contact.nick_name AS `nickName`, contact.aantekening AS `aantekening`, contact.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, contact.account_id AS `accountId`, account.name AS `accountName`, contact.campaign_id AS `campaignId`, campaign.name AS `campaignName`, contact.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, contact.modified_by_id AS `modifiedById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(modifiedBy.first_name, ''), ' ', IFNULL(modifiedBy.middle_name, ''), ' ', IFNULL(modifiedBy.last_name, ''))), ''), ' ', ' ') AS `modifiedByName`, contact.assigned_user_id AS `assignedUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(assignedUser.first_name, ''), ' ', IFNULL(assignedUser.middle_name, ''), ' ', IFNULL(assignedUser.last_name, ''))), ''), ' ', ' ') AS `assignedUserName`, portalUser.id AS `portalUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(portalUser.first_name, ''), ' ', IFNULL(portalUser.middle_name, ''), ' ', IFNULL(portalUser.last_name, ''))), ''), ' ', ' ') AS `portalUserName`, originalLead.id AS `originalLeadId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(originalLead.first_name, ''), ' ', IFNULL(originalLead.middle_name, ''), ' ', IFNULL(originalLead.last_name, ''))), ''), ' ', ' ') AS `originalLeadName`, contact.m_b_k_diploma_id AS `mBKDiplomaId`, mBKDiploma.name AS `mBKDiplomaName`, contact.vakopleiding_id AS `vakopleidingId`, vakopleiding.name AS `vakopleidingName`, contact.diploma_vakopleiding_id AS `diplomaVakopleidingId`, diplomaVakopleiding.name AS `diplomaVakopleidingName`, contact.v_o_g_id AS `vOGId`, vOG.name AS `vOGName` FROM `contact` AS `contact` LEFT JOIN `attachment` AS `mBKDiploma` ON contact.m_b_k_diploma_id = mBKDiploma.id LEFT JOIN `attachment` AS `diplomaVakopleiding` ON contact.diploma_vakopleiding_id = diplomaVakopleiding.id LEFT JOIN `attachment` AS `vOG` ON contact.v_o_g_id = vOG.id LEFT JOIN `vakopleiding` AS `vakopleiding` ON contact.vakopleiding_id = vakopleiding.id LEFT JOIN `lead` AS `originalLead` ON contact.id = originalLead.created_contact_id AND originalLead.deleted = 0 LEFT JOIN `campaign` AS `campaign` ON contact.campaign_id = campaign.id LEFT JOIN `account` AS `account` ON contact.account_id = account.id LEFT JOIN `user` AS `assignedUser` ON contact.assigned_user_id = assignedUser.id LEFT JOIN `user` AS `modifiedBy` ON contact.modified_by_id = modifiedBy.id LEFT JOIN `user` AS `createdBy` ON contact.created_by_id = createdBy.id LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 LEFT JOIN `account_contact` AS `accountContactPrimary` ON contact.id = accountContactPrimary.contact_id AND contact.account_id = accountContactPrimary.account_id AND accountContactPrimary.deleted = 0 LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON contact.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON contact.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'Contact' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 LEFT JOIN `user` AS `portalUser` ON contact.id = portalUser.contact_id AND portalUser.deleted = 0 WHERE ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl'))) AND contact.deleted = 0 LIMIT 0, 1 + 4625 Query SELECT contact.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `name`, contact.deleted AS `deleted`, contact.salutation_name AS `salutationName`, contact.first_name AS `firstName`, contact.last_name AS `lastName`, accountContactPrimary.role AS `title`, contact.description AS `description`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, contact.do_not_call AS `doNotCall`, contact.address_street AS `addressStreet`, contact.address_city AS `addressCity`, contact.address_state AS `addressState`, contact.address_country AS `addressCountry`, contact.address_postal_code AS `addressPostalCode`, accountContactPrimary.is_inactive AS `accountIsInactive`, account.type AS `accountType`, contact.created_at AS `createdAt`, contact.modified_at AS `modifiedAt`, portalUser.id IS NOT NULL AS `hasPortalUser`, contact.agbcode AS `agbcode`, contact.rbcznummer AS `rbcznummer`, contact.m_b_k_datum AS `mBKDatum`, contact.m_code AS `mCode`, contact.geboortedatum AS `geboortedatum`, contact.datum_registratie AS `datumRegistratie`, contact.balens AS `balens`, contact.regiocode AS `regiocode`, contact.einddatum AS `einddatum`, contact.vakopleiding_datum_diploma AS `vakopleidingDatumDiploma`, contact.datum_v_o_g AS `datumVOG`, contact.geslacht AS `geslacht`, contact.initials_name AS `initialsName`, contact.dispensatie AS `dispensatie`, contact.website AS `website`, contact.lidnummer AS `lidnummer`, contact.quasier AS `quasier`, contact.geplande_afstudeerdatum AS `geplandeAfstudeerdatum`, contact.nascholingstotalen_herberekenen AS `nascholingstotalenHerberekenen`, contact.labels AS `labels`, contact.uitleg_nascholings_berekening AS `uitlegNascholingsBerekening`, contact.nascholing_onvoldoende AS `nascholingOnvoldoende`, contact.survey_id AS `surveyId`, contact.nick_name AS `nickName`, contact.aantekening AS `aantekening`, contact.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, contact.account_id AS `accountId`, account.name AS `accountName`, contact.campaign_id AS `campaignId`, campaign.name AS `campaignName`, contact.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, contact.modified_by_id AS `modifiedById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(modifiedBy.first_name, ''), ' ', IFNULL(modifiedBy.middle_name, ''), ' ', IFNULL(modifiedBy.last_name, ''))), ''), ' ', ' ') AS `modifiedByName`, contact.assigned_user_id AS `assignedUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(assignedUser.first_name, ''), ' ', IFNULL(assignedUser.middle_name, ''), ' ', IFNULL(assignedUser.last_name, ''))), ''), ' ', ' ') AS `assignedUserName`, portalUser.id AS `portalUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(portalUser.first_name, ''), ' ', IFNULL(portalUser.middle_name, ''), ' ', IFNULL(portalUser.last_name, ''))), ''), ' ', ' ') AS `portalUserName`, originalLead.id AS `originalLeadId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(originalLead.first_name, ''), ' ', IFNULL(originalLead.middle_name, ''), ' ', IFNULL(originalLead.last_name, ''))), ''), ' ', ' ') AS `originalLeadName`, contact.m_b_k_diploma_id AS `mBKDiplomaId`, mBKDiploma.name AS `mBKDiplomaName`, contact.vakopleiding_id AS `vakopleidingId`, vakopleiding.name AS `vakopleidingName`, contact.diploma_vakopleiding_id AS `diplomaVakopleidingId`, diplomaVakopleiding.name AS `diplomaVakopleidingName`, contact.v_o_g_id AS `vOGId`, vOG.name AS `vOGName` FROM `contact` AS `contact` LEFT JOIN `attachment` AS `mBKDiploma` ON contact.m_b_k_diploma_id = mBKDiploma.id LEFT JOIN `attachment` AS `diplomaVakopleiding` ON contact.diploma_vakopleiding_id = diplomaVakopleiding.id LEFT JOIN `attachment` AS `vOG` ON contact.v_o_g_id = vOG.id LEFT JOIN `vakopleiding` AS `vakopleiding` ON contact.vakopleiding_id = vakopleiding.id LEFT JOIN `lead` AS `originalLead` ON contact.id = originalLead.created_contact_id AND originalLead.deleted = 0 LEFT JOIN `campaign` AS `campaign` ON contact.campaign_id = campaign.id LEFT JOIN `account` AS `account` ON contact.account_id = account.id LEFT JOIN `user` AS `assignedUser` ON contact.assigned_user_id = assignedUser.id LEFT JOIN `user` AS `modifiedBy` ON contact.modified_by_id = modifiedBy.id LEFT JOIN `user` AS `createdBy` ON contact.created_by_id = createdBy.id LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 LEFT JOIN `account_contact` AS `accountContactPrimary` ON contact.id = accountContactPrimary.contact_id AND contact.account_id = accountContactPrimary.account_id AND accountContactPrimary.deleted = 0 LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON contact.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON contact.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'Contact' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 LEFT JOIN `user` AS `portalUser` ON contact.id = portalUser.contact_id AND portalUser.deleted = 0 WHERE ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl'))) AND contact.deleted = 0 LIMIT 0, 1 + 4625 Quit diff --git a/Archief/Issue 3144 - github/duplicate-check-name-and-email-with-fix.log b/Archief/Issue 3144 - github/duplicate-check-name-and-email-with-fix.log new file mode 100644 index 0000000..be49a13 --- /dev/null +++ b/Archief/Issue 3144 - github/duplicate-check-name-and-email-with-fix.log @@ -0,0 +1,13 @@ +240914 14:20:09 5270 Connect nvkhcrm@localhost on nvkhcrm using Socket + 5270 Query SELECT authToken.id AS `id`, authToken.is_active AS `isActive`, authToken.token AS `token`, authToken.secret AS `secret`, authToken.user_id AS `userId`, authToken.portal_id AS `portalId`, authToken.hash AS `hash`, authToken.created_at AS `createdAt`, authToken.last_access AS `lastAccess`, authToken.modified_at AS `modifiedAt` FROM `auth_token` AS `authToken` WHERE authToken.token = '9f82b356063f608eff8a22b411d654ab' AND authToken.deleted = 0 LIMIT 0, 1 + 5270 Query SELECT user.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(user.first_name, ''), ' ', IFNULL(user.middle_name, ''), ' ', IFNULL(user.last_name, ''))), ''), ' ', ' ') AS `name`, user.deleted AS `deleted`, user.user_name AS `userName`, user.type AS `type`, user.password AS `password`, user.auth_method AS `authMethod`, user.api_key AS `apiKey`, user.salutation_name AS `salutationName`, user.first_name AS `firstName`, user.last_name AS `lastName`, user.is_active AS `isActive`, user.title AS `title`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, user.avatar_color AS `avatarColor`, user.gender AS `gender`, user.created_at AS `createdAt`, user.modified_at AS `modifiedAt`, userData.auth2_f_a AS `auth2FA`, user.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, user.delete_id AS `deleteId`, user.default_team_id AS `defaultTeamId`, defaultTeam.name AS `defaultTeamName`, user.contact_id AS `contactId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `contactName`, user.avatar_id AS `avatarId`, avatar.name AS `avatarName`, user.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, user.dashboard_template_id AS `dashboardTemplateId`, dashboardTemplate.name AS `dashboardTemplateName`, user.working_time_calendar_id AS `workingTimeCalendarId`, user.layout_set_id AS `layoutSetId`, userData.id AS `userDataId`, userData.id AS `userDataName` FROM `user` AS `user` LEFT JOIN `attachment` AS `avatar` ON user.avatar_id = avatar.id LEFT JOIN `contact` AS `contact` ON user.contact_id = contact.id LEFT JOIN `user_data` AS `userData` ON user.id = userData.user_id AND userData.deleted = 0 LEFT JOIN `dashboard_template` AS `dashboardTemplate` ON user.dashboard_template_id = dashboardTemplate.id LEFT JOIN `user` AS `createdBy` ON user.created_by_id = createdBy.id LEFT JOIN `team` AS `defaultTeam` ON user.default_team_id = defaultTeam.id LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON user.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'User' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON user.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'User' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 WHERE user.user_name = 'admin' AND user.password = 'Wkpa1j5J2/Og1qN4NMoygh3XDj1Je1Gugpdzpd4QA0m7t92XN8Ze8AyFVlPlXlsOM.DU.2.XbH3wVoK11LOon/' AND user.type NOT IN ('api','system') AND user.deleted = 0 LIMIT 0, 1 + 5270 Query SELECT team.id AS `id`, team.name AS `name` FROM `team` AS `team` JOIN `team_user` AS `teamUser` ON teamUser.team_id = team.id AND teamUser.user_id = '1' AND teamUser.deleted = 0 WHERE team.deleted = 0 ORDER BY team.name ASC + 5270 Query UPDATE `auth_token` SET auth_token.last_access = '2024-09-14 12:20:09', auth_token.modified_at = '2024-09-14 12:20:09' WHERE auth_token.id = '66e4c445c1874e115' AND auth_token.deleted = 0 + 5270 Query SELECT authLogRecord.id AS `id` FROM `auth_log_record` AS `authLogRecord` WHERE authLogRecord.auth_token_id = '66e4c445c1874e115' AND authLogRecord.deleted = 0 ORDER BY authLogRecord.request_time DESC LIMIT 0, 1 + 5270 Query SELECT preferences.id AS `id`, preferences.data AS `data` FROM `preferences` WHERE preferences.id = '1' LIMIT 0, 1 + 5270 Query SELECT autofollow.entity_type AS `entityType` FROM `autofollow` AS `autofollow` WHERE autofollow.user_id = '1' AND autofollow.deleted = 0 + 5270 Query SELECT user.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(user.first_name, ''), ' ', IFNULL(user.middle_name, ''), ' ', IFNULL(user.last_name, ''))), ''), ' ', ' ') AS `name`, user.deleted AS `deleted`, user.user_name AS `userName`, user.type AS `type`, user.password AS `password`, user.auth_method AS `authMethod`, user.api_key AS `apiKey`, user.salutation_name AS `salutationName`, user.first_name AS `firstName`, user.last_name AS `lastName`, user.is_active AS `isActive`, user.title AS `title`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, user.avatar_color AS `avatarColor`, user.gender AS `gender`, user.created_at AS `createdAt`, user.modified_at AS `modifiedAt`, userData.auth2_f_a AS `auth2FA`, user.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, user.delete_id AS `deleteId`, user.default_team_id AS `defaultTeamId`, defaultTeam.name AS `defaultTeamName`, user.contact_id AS `contactId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `contactName`, user.avatar_id AS `avatarId`, avatar.name AS `avatarName`, user.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, user.dashboard_template_id AS `dashboardTemplateId`, dashboardTemplate.name AS `dashboardTemplateName`, user.working_time_calendar_id AS `workingTimeCalendarId`, user.layout_set_id AS `layoutSetId`, userData.id AS `userDataId`, userData.id AS `userDataName` FROM `user` AS `user` LEFT JOIN `attachment` AS `avatar` ON user.avatar_id = avatar.id LEFT JOIN `contact` AS `contact` ON user.contact_id = contact.id LEFT JOIN `user_data` AS `userData` ON user.id = userData.user_id AND userData.deleted = 0 LEFT JOIN `dashboard_template` AS `dashboardTemplate` ON user.dashboard_template_id = dashboardTemplate.id LEFT JOIN `user` AS `createdBy` ON user.created_by_id = createdBy.id LEFT JOIN `team` AS `defaultTeam` ON user.default_team_id = defaultTeam.id LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON user.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'User' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON user.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'User' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 WHERE user.id = '1' AND user.deleted = 0 + 5270 Query SELECT contact.id AS `id` FROM `contact` AS `contact` LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 WHERE (((contact.first_name = 'H.N.M. (Hans)') AND (contact.last_name = 'Dijkema')) OR ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl')))) AND contact.deleted = 0 LIMIT 0, 1 + 5270 Query SELECT contact.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `name` FROM `contact` AS `contact` LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 WHERE (((contact.first_name = 'H.N.M. (Hans)') AND (contact.last_name = 'Dijkema')) OR ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl')))) AND contact.deleted = 0 LIMIT 0, 1 + 5270 Query SELECT contact.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `name` FROM `contact` AS `contact` LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 WHERE (((contact.first_name = 'H.N.M. (Hans)') AND (contact.last_name = 'Dijkema')) OR ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl')))) AND contact.deleted = 0 LIMIT 0, 1 + 5270 Quit diff --git a/Archief/Issue 3144 - github/duplicate-check-name-only.log b/Archief/Issue 3144 - github/duplicate-check-name-only.log new file mode 100644 index 0000000..56aa8d0 --- /dev/null +++ b/Archief/Issue 3144 - github/duplicate-check-name-only.log @@ -0,0 +1,12 @@ + 4954 Connect nvkhcrm@localhost on nvkhcrm using Socket + 4954 Query SELECT authToken.id AS `id`, authToken.is_active AS `isActive`, authToken.token AS `token`, authToken.secret AS `secret`, authToken.user_id AS `userId`, authToken.portal_id AS `portalId`, authToken.hash AS `hash`, authToken.created_at AS `createdAt`, authToken.last_access AS `lastAccess`, authToken.modified_at AS `modifiedAt` FROM `auth_token` AS `authToken` WHERE authToken.token = '9f82b356063f608eff8a22b411d654ab' AND authToken.deleted = 0 LIMIT 0, 1 + 4954 Query SELECT user.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(user.first_name, ''), ' ', IFNULL(user.middle_name, ''), ' ', IFNULL(user.last_name, ''))), ''), ' ', ' ') AS `name`, user.deleted AS `deleted`, user.user_name AS `userName`, user.type AS `type`, user.password AS `password`, user.auth_method AS `authMethod`, user.api_key AS `apiKey`, user.salutation_name AS `salutationName`, user.first_name AS `firstName`, user.last_name AS `lastName`, user.is_active AS `isActive`, user.title AS `title`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, user.avatar_color AS `avatarColor`, user.gender AS `gender`, user.created_at AS `createdAt`, user.modified_at AS `modifiedAt`, userData.auth2_f_a AS `auth2FA`, user.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, user.delete_id AS `deleteId`, user.default_team_id AS `defaultTeamId`, defaultTeam.name AS `defaultTeamName`, user.contact_id AS `contactId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `contactName`, user.avatar_id AS `avatarId`, avatar.name AS `avatarName`, user.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, user.dashboard_template_id AS `dashboardTemplateId`, dashboardTemplate.name AS `dashboardTemplateName`, user.working_time_calendar_id AS `workingTimeCalendarId`, user.layout_set_id AS `layoutSetId`, userData.id AS `userDataId`, userData.id AS `userDataName` FROM `user` AS `user` LEFT JOIN `attachment` AS `avatar` ON user.avatar_id = avatar.id LEFT JOIN `contact` AS `contact` ON user.contact_id = contact.id LEFT JOIN `user_data` AS `userData` ON user.id = userData.user_id AND userData.deleted = 0 LEFT JOIN `dashboard_template` AS `dashboardTemplate` ON user.dashboard_template_id = dashboardTemplate.id LEFT JOIN `user` AS `createdBy` ON user.created_by_id = createdBy.id LEFT JOIN `team` AS `defaultTeam` ON user.default_team_id = defaultTeam.id LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON user.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'User' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON user.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'User' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 WHERE user.user_name = 'admin' AND user.password = 'Wkpa1j5J2/Og1qN4NMoygh3XDj1Je1Gugpdzpd4QA0m7t92XN8Ze8AyFVlPlXlsOM.DU.2.XbH3wVoK11LOon/' AND user.type NOT IN ('api','system') AND user.deleted = 0 LIMIT 0, 1 + 4954 Query SELECT team.id AS `id`, team.name AS `name` FROM `team` AS `team` JOIN `team_user` AS `teamUser` ON teamUser.team_id = team.id AND teamUser.user_id = '1' AND teamUser.deleted = 0 WHERE team.deleted = 0 ORDER BY team.name ASC + 4954 Query SELECT authLogRecord.id AS `id` FROM `auth_log_record` AS `authLogRecord` WHERE authLogRecord.auth_token_id = '66e4c445c1874e115' AND authLogRecord.deleted = 0 ORDER BY authLogRecord.request_time DESC LIMIT 0, 1 + 4954 Query SELECT preferences.id AS `id`, preferences.data AS `data` FROM `preferences` WHERE preferences.id = '1' LIMIT 0, 1 + 4954 Query SELECT autofollow.entity_type AS `entityType` FROM `autofollow` AS `autofollow` WHERE autofollow.user_id = '1' AND autofollow.deleted = 0 + 4954 Query SELECT user.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(user.first_name, ''), ' ', IFNULL(user.middle_name, ''), ' ', IFNULL(user.last_name, ''))), ''), ' ', ' ') AS `name`, user.deleted AS `deleted`, user.user_name AS `userName`, user.type AS `type`, user.password AS `password`, user.auth_method AS `authMethod`, user.api_key AS `apiKey`, user.salutation_name AS `salutationName`, user.first_name AS `firstName`, user.last_name AS `lastName`, user.is_active AS `isActive`, user.title AS `title`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, user.avatar_color AS `avatarColor`, user.gender AS `gender`, user.created_at AS `createdAt`, user.modified_at AS `modifiedAt`, userData.auth2_f_a AS `auth2FA`, user.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, user.delete_id AS `deleteId`, user.default_team_id AS `defaultTeamId`, defaultTeam.name AS `defaultTeamName`, user.contact_id AS `contactId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `contactName`, user.avatar_id AS `avatarId`, avatar.name AS `avatarName`, user.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, user.dashboard_template_id AS `dashboardTemplateId`, dashboardTemplate.name AS `dashboardTemplateName`, user.working_time_calendar_id AS `workingTimeCalendarId`, user.layout_set_id AS `layoutSetId`, userData.id AS `userDataId`, userData.id AS `userDataName` FROM `user` AS `user` LEFT JOIN `attachment` AS `avatar` ON user.avatar_id = avatar.id LEFT JOIN `contact` AS `contact` ON user.contact_id = contact.id LEFT JOIN `user_data` AS `userData` ON user.id = userData.user_id AND userData.deleted = 0 LEFT JOIN `dashboard_template` AS `dashboardTemplate` ON user.dashboard_template_id = dashboardTemplate.id LEFT JOIN `user` AS `createdBy` ON user.created_by_id = createdBy.id LEFT JOIN `team` AS `defaultTeam` ON user.default_team_id = defaultTeam.id LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON user.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'User' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON user.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'User' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 WHERE user.id = '1' AND user.deleted = 0 + 4954 Query SELECT contact.id AS `id` FROM `contact` AS `contact` WHERE (((contact.first_name = 'H.N.M. (Hans)') AND (contact.last_name = 'Dijkema'))) AND contact.deleted = 0 LIMIT 0, 1 + 4954 Query SELECT contact.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `name`, contact.deleted AS `deleted`, contact.salutation_name AS `salutationName`, contact.first_name AS `firstName`, contact.last_name AS `lastName`, accountContactPrimary.role AS `title`, contact.description AS `description`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, contact.do_not_call AS `doNotCall`, contact.address_street AS `addressStreet`, contact.address_city AS `addressCity`, contact.address_state AS `addressState`, contact.address_country AS `addressCountry`, contact.address_postal_code AS `addressPostalCode`, accountContactPrimary.is_inactive AS `accountIsInactive`, account.type AS `accountType`, contact.created_at AS `createdAt`, contact.modified_at AS `modifiedAt`, portalUser.id IS NOT NULL AS `hasPortalUser`, contact.agbcode AS `agbcode`, contact.rbcznummer AS `rbcznummer`, contact.m_b_k_datum AS `mBKDatum`, contact.m_code AS `mCode`, contact.geboortedatum AS `geboortedatum`, contact.datum_registratie AS `datumRegistratie`, contact.balens AS `balens`, contact.regiocode AS `regiocode`, contact.einddatum AS `einddatum`, contact.vakopleiding_datum_diploma AS `vakopleidingDatumDiploma`, contact.datum_v_o_g AS `datumVOG`, contact.geslacht AS `geslacht`, contact.initials_name AS `initialsName`, contact.dispensatie AS `dispensatie`, contact.website AS `website`, contact.lidnummer AS `lidnummer`, contact.quasier AS `quasier`, contact.geplande_afstudeerdatum AS `geplandeAfstudeerdatum`, contact.nascholingstotalen_herberekenen AS `nascholingstotalenHerberekenen`, contact.labels AS `labels`, contact.uitleg_nascholings_berekening AS `uitlegNascholingsBerekening`, contact.nascholing_onvoldoende AS `nascholingOnvoldoende`, contact.survey_id AS `surveyId`, contact.nick_name AS `nickName`, contact.aantekening AS `aantekening`, contact.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, contact.account_id AS `accountId`, account.name AS `accountName`, contact.campaign_id AS `campaignId`, campaign.name AS `campaignName`, contact.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, contact.modified_by_id AS `modifiedById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(modifiedBy.first_name, ''), ' ', IFNULL(modifiedBy.middle_name, ''), ' ', IFNULL(modifiedBy.last_name, ''))), ''), ' ', ' ') AS `modifiedByName`, contact.assigned_user_id AS `assignedUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(assignedUser.first_name, ''), ' ', IFNULL(assignedUser.middle_name, ''), ' ', IFNULL(assignedUser.last_name, ''))), ''), ' ', ' ') AS `assignedUserName`, portalUser.id AS `portalUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(portalUser.first_name, ''), ' ', IFNULL(portalUser.middle_name, ''), ' ', IFNULL(portalUser.last_name, ''))), ''), ' ', ' ') AS `portalUserName`, originalLead.id AS `originalLeadId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(originalLead.first_name, ''), ' ', IFNULL(originalLead.middle_name, ''), ' ', IFNULL(originalLead.last_name, ''))), ''), ' ', ' ') AS `originalLeadName`, contact.m_b_k_diploma_id AS `mBKDiplomaId`, mBKDiploma.name AS `mBKDiplomaName`, contact.vakopleiding_id AS `vakopleidingId`, vakopleiding.name AS `vakopleidingName`, contact.diploma_vakopleiding_id AS `diplomaVakopleidingId`, diplomaVakopleiding.name AS `diplomaVakopleidingName`, contact.v_o_g_id AS `vOGId`, vOG.name AS `vOGName` FROM `contact` AS `contact` LEFT JOIN `attachment` AS `mBKDiploma` ON contact.m_b_k_diploma_id = mBKDiploma.id LEFT JOIN `attachment` AS `diplomaVakopleiding` ON contact.diploma_vakopleiding_id = diplomaVakopleiding.id LEFT JOIN `attachment` AS `vOG` ON contact.v_o_g_id = vOG.id LEFT JOIN `vakopleiding` AS `vakopleiding` ON contact.vakopleiding_id = vakopleiding.id LEFT JOIN `lead` AS `originalLead` ON contact.id = originalLead.created_contact_id AND originalLead.deleted = 0 LEFT JOIN `campaign` AS `campaign` ON contact.campaign_id = campaign.id LEFT JOIN `account` AS `account` ON contact.account_id = account.id LEFT JOIN `user` AS `assignedUser` ON contact.assigned_user_id = assignedUser.id LEFT JOIN `user` AS `modifiedBy` ON contact.modified_by_id = modifiedBy.id LEFT JOIN `user` AS `createdBy` ON contact.created_by_id = createdBy.id LEFT JOIN `account_contact` AS `accountContactPrimary` ON contact.id = accountContactPrimary.contact_id AND contact.account_id = accountContactPrimary.account_id AND accountContactPrimary.deleted = 0 LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON contact.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON contact.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'Contact' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 LEFT JOIN `user` AS `portalUser` ON contact.id = portalUser.contact_id AND portalUser.deleted = 0 WHERE (((contact.first_name = 'H.N.M. (Hans)') AND (contact.last_name = 'Dijkema'))) AND contact.deleted = 0 LIMIT 0, 1 + 4954 Query SELECT contact.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `name`, contact.deleted AS `deleted`, contact.salutation_name AS `salutationName`, contact.first_name AS `firstName`, contact.last_name AS `lastName`, accountContactPrimary.role AS `title`, contact.description AS `description`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, contact.do_not_call AS `doNotCall`, contact.address_street AS `addressStreet`, contact.address_city AS `addressCity`, contact.address_state AS `addressState`, contact.address_country AS `addressCountry`, contact.address_postal_code AS `addressPostalCode`, accountContactPrimary.is_inactive AS `accountIsInactive`, account.type AS `accountType`, contact.created_at AS `createdAt`, contact.modified_at AS `modifiedAt`, portalUser.id IS NOT NULL AS `hasPortalUser`, contact.agbcode AS `agbcode`, contact.rbcznummer AS `rbcznummer`, contact.m_b_k_datum AS `mBKDatum`, contact.m_code AS `mCode`, contact.geboortedatum AS `geboortedatum`, contact.datum_registratie AS `datumRegistratie`, contact.balens AS `balens`, contact.regiocode AS `regiocode`, contact.einddatum AS `einddatum`, contact.vakopleiding_datum_diploma AS `vakopleidingDatumDiploma`, contact.datum_v_o_g AS `datumVOG`, contact.geslacht AS `geslacht`, contact.initials_name AS `initialsName`, contact.dispensatie AS `dispensatie`, contact.website AS `website`, contact.lidnummer AS `lidnummer`, contact.quasier AS `quasier`, contact.geplande_afstudeerdatum AS `geplandeAfstudeerdatum`, contact.nascholingstotalen_herberekenen AS `nascholingstotalenHerberekenen`, contact.labels AS `labels`, contact.uitleg_nascholings_berekening AS `uitlegNascholingsBerekening`, contact.nascholing_onvoldoende AS `nascholingOnvoldoende`, contact.survey_id AS `surveyId`, contact.nick_name AS `nickName`, contact.aantekening AS `aantekening`, contact.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, contact.account_id AS `accountId`, account.name AS `accountName`, contact.campaign_id AS `campaignId`, campaign.name AS `campaignName`, contact.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, contact.modified_by_id AS `modifiedById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(modifiedBy.first_name, ''), ' ', IFNULL(modifiedBy.middle_name, ''), ' ', IFNULL(modifiedBy.last_name, ''))), ''), ' ', ' ') AS `modifiedByName`, contact.assigned_user_id AS `assignedUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(assignedUser.first_name, ''), ' ', IFNULL(assignedUser.middle_name, ''), ' ', IFNULL(assignedUser.last_name, ''))), ''), ' ', ' ') AS `assignedUserName`, portalUser.id AS `portalUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(portalUser.first_name, ''), ' ', IFNULL(portalUser.middle_name, ''), ' ', IFNULL(portalUser.last_name, ''))), ''), ' ', ' ') AS `portalUserName`, originalLead.id AS `originalLeadId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(originalLead.first_name, ''), ' ', IFNULL(originalLead.middle_name, ''), ' ', IFNULL(originalLead.last_name, ''))), ''), ' ', ' ') AS `originalLeadName`, contact.m_b_k_diploma_id AS `mBKDiplomaId`, mBKDiploma.name AS `mBKDiplomaName`, contact.vakopleiding_id AS `vakopleidingId`, vakopleiding.name AS `vakopleidingName`, contact.diploma_vakopleiding_id AS `diplomaVakopleidingId`, diplomaVakopleiding.name AS `diplomaVakopleidingName`, contact.v_o_g_id AS `vOGId`, vOG.name AS `vOGName` FROM `contact` AS `contact` LEFT JOIN `attachment` AS `mBKDiploma` ON contact.m_b_k_diploma_id = mBKDiploma.id LEFT JOIN `attachment` AS `diplomaVakopleiding` ON contact.diploma_vakopleiding_id = diplomaVakopleiding.id LEFT JOIN `attachment` AS `vOG` ON contact.v_o_g_id = vOG.id LEFT JOIN `vakopleiding` AS `vakopleiding` ON contact.vakopleiding_id = vakopleiding.id LEFT JOIN `lead` AS `originalLead` ON contact.id = originalLead.created_contact_id AND originalLead.deleted = 0 LEFT JOIN `campaign` AS `campaign` ON contact.campaign_id = campaign.id LEFT JOIN `account` AS `account` ON contact.account_id = account.id LEFT JOIN `user` AS `assignedUser` ON contact.assigned_user_id = assignedUser.id LEFT JOIN `user` AS `modifiedBy` ON contact.modified_by_id = modifiedBy.id LEFT JOIN `user` AS `createdBy` ON contact.created_by_id = createdBy.id LEFT JOIN `account_contact` AS `accountContactPrimary` ON contact.id = accountContactPrimary.contact_id AND contact.account_id = accountContactPrimary.account_id AND accountContactPrimary.deleted = 0 LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON contact.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON contact.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'Contact' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 LEFT JOIN `user` AS `portalUser` ON contact.id = portalUser.contact_id AND portalUser.deleted = 0 WHERE (((contact.first_name = 'H.N.M. (Hans)') AND (contact.last_name = 'Dijkema'))) AND contact.deleted = 0 LIMIT 0, 1 + 4954 Quit diff --git a/Archief/Issue 3144 - github/duplicate-queries-with-patch.docx b/Archief/Issue 3144 - github/duplicate-queries-with-patch.docx new file mode 100644 index 0000000..5feb893 Binary files /dev/null and b/Archief/Issue 3144 - github/duplicate-queries-with-patch.docx differ diff --git a/Archief/Issue 3144 - github/duplicate-queries-with-patch.log b/Archief/Issue 3144 - github/duplicate-queries-with-patch.log new file mode 100644 index 0000000..cb6cb62 --- /dev/null +++ b/Archief/Issue 3144 - github/duplicate-queries-with-patch.log @@ -0,0 +1,13 @@ +240916 7:44:56 76 Connect nvkhcrm@localhost on nvkhcrm using Socket + 76 Query SELECT authToken.id AS `id`, authToken.is_active AS `isActive`, authToken.token AS `token`, authToken.secret AS `secret`, authToken.user_id AS `userId`, authToken.portal_id AS `portalId`, authToken.hash AS `hash`, authToken.created_at AS `createdAt`, authToken.last_access AS `lastAccess`, authToken.modified_at AS `modifiedAt` FROM `auth_token` AS `authToken` WHERE authToken.token = '4c193683ab7bb0e7777f91f480c982b2' AND authToken.deleted = 0 LIMIT 0, 1 + 76 Query SELECT user.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(user.first_name, ''), ' ', IFNULL(user.middle_name, ''), ' ', IFNULL(user.last_name, ''))), ''), ' ', ' ') AS `name`, user.deleted AS `deleted`, user.user_name AS `userName`, user.type AS `type`, user.password AS `password`, user.auth_method AS `authMethod`, user.api_key AS `apiKey`, user.salutation_name AS `salutationName`, user.first_name AS `firstName`, user.last_name AS `lastName`, user.is_active AS `isActive`, user.title AS `title`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, user.avatar_color AS `avatarColor`, user.gender AS `gender`, user.created_at AS `createdAt`, user.modified_at AS `modifiedAt`, userData.auth2_f_a AS `auth2FA`, user.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, user.delete_id AS `deleteId`, user.default_team_id AS `defaultTeamId`, defaultTeam.name AS `defaultTeamName`, user.contact_id AS `contactId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `contactName`, user.avatar_id AS `avatarId`, avatar.name AS `avatarName`, user.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, user.dashboard_template_id AS `dashboardTemplateId`, dashboardTemplate.name AS `dashboardTemplateName`, user.working_time_calendar_id AS `workingTimeCalendarId`, user.layout_set_id AS `layoutSetId`, userData.id AS `userDataId`, userData.id AS `userDataName` FROM `user` AS `user` LEFT JOIN `attachment` AS `avatar` ON user.avatar_id = avatar.id LEFT JOIN `contact` AS `contact` ON user.contact_id = contact.id LEFT JOIN `user_data` AS `userData` ON user.id = userData.user_id AND userData.deleted = 0 LEFT JOIN `dashboard_template` AS `dashboardTemplate` ON user.dashboard_template_id = dashboardTemplate.id LEFT JOIN `user` AS `createdBy` ON user.created_by_id = createdBy.id LEFT JOIN `team` AS `defaultTeam` ON user.default_team_id = defaultTeam.id LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON user.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'User' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON user.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'User' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 WHERE user.user_name = 'admin' AND user.password = 'Wkpa1j5J2/Og1qN4NMoygh3XDj1Je1Gugpdzpd4QA0m7t92XN8Ze8AyFVlPlXlsOM.DU.2.XbH3wVoK11LOon/' AND user.type NOT IN ('api','system') AND user.deleted = 0 LIMIT 0, 1 + 76 Query SELECT team.id AS `id`, team.name AS `name` FROM `team` AS `team` JOIN `team_user` AS `teamUser` ON teamUser.team_id = team.id AND teamUser.user_id = '1' AND teamUser.deleted = 0 WHERE team.deleted = 0 ORDER BY team.name ASC + 76 Query UPDATE `auth_token` SET auth_token.last_access = '2024-09-16 05:44:56', auth_token.modified_at = '2024-09-16 05:44:56' WHERE auth_token.id = '66e7c51c33c534698' AND auth_token.deleted = 0 + 76 Query SELECT authLogRecord.id AS `id` FROM `auth_log_record` AS `authLogRecord` WHERE authLogRecord.auth_token_id = '66e7c51c33c534698' AND authLogRecord.deleted = 0 ORDER BY authLogRecord.request_time DESC LIMIT 0, 1 + 76 Query SELECT preferences.id AS `id`, preferences.data AS `data` FROM `preferences` WHERE preferences.id = '1' LIMIT 0, 1 + 76 Query SELECT autofollow.entity_type AS `entityType` FROM `autofollow` AS `autofollow` WHERE autofollow.user_id = '1' AND autofollow.deleted = 0 + 76 Query SELECT user.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(user.first_name, ''), ' ', IFNULL(user.middle_name, ''), ' ', IFNULL(user.last_name, ''))), ''), ' ', ' ') AS `name`, user.deleted AS `deleted`, user.user_name AS `userName`, user.type AS `type`, user.password AS `password`, user.auth_method AS `authMethod`, user.api_key AS `apiKey`, user.salutation_name AS `salutationName`, user.first_name AS `firstName`, user.last_name AS `lastName`, user.is_active AS `isActive`, user.title AS `title`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, user.avatar_color AS `avatarColor`, user.gender AS `gender`, user.created_at AS `createdAt`, user.modified_at AS `modifiedAt`, userData.auth2_f_a AS `auth2FA`, user.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, user.delete_id AS `deleteId`, user.default_team_id AS `defaultTeamId`, defaultTeam.name AS `defaultTeamName`, user.contact_id AS `contactId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `contactName`, user.avatar_id AS `avatarId`, avatar.name AS `avatarName`, user.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, user.dashboard_template_id AS `dashboardTemplateId`, dashboardTemplate.name AS `dashboardTemplateName`, user.working_time_calendar_id AS `workingTimeCalendarId`, user.layout_set_id AS `layoutSetId`, userData.id AS `userDataId`, userData.id AS `userDataName` FROM `user` AS `user` LEFT JOIN `attachment` AS `avatar` ON user.avatar_id = avatar.id LEFT JOIN `contact` AS `contact` ON user.contact_id = contact.id LEFT JOIN `user_data` AS `userData` ON user.id = userData.user_id AND userData.deleted = 0 LEFT JOIN `dashboard_template` AS `dashboardTemplate` ON user.dashboard_template_id = dashboardTemplate.id LEFT JOIN `user` AS `createdBy` ON user.created_by_id = createdBy.id LEFT JOIN `team` AS `defaultTeam` ON user.default_team_id = defaultTeam.id LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON user.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'User' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON user.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'User' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 WHERE user.id = '1' AND user.deleted = 0 + 76 Query SELECT contact.id AS `id` FROM `contact` AS `contact` LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 WHERE (((contact.first_name = 'J (Klop)') AND (contact.last_name = 'Klaterflap')) OR ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl')))) AND contact.deleted = 0 LIMIT 0, 1 + 76 Query SELECT contact.id AS `id` FROM `contact` AS `contact` LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 WHERE (((contact.first_name = 'J (Klop)') AND (contact.last_name = 'Klaterflap')) OR ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl')))) AND contact.deleted = 0 LIMIT 0, 1 + 76 Query SELECT contact.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `name`, contact.deleted AS `deleted`, contact.salutation_name AS `salutationName`, contact.first_name AS `firstName`, contact.last_name AS `lastName`, accountContactPrimary.role AS `title`, contact.description AS `description`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, contact.do_not_call AS `doNotCall`, contact.address_street AS `addressStreet`, contact.address_city AS `addressCity`, contact.address_state AS `addressState`, contact.address_country AS `addressCountry`, contact.address_postal_code AS `addressPostalCode`, accountContactPrimary.is_inactive AS `accountIsInactive`, account.type AS `accountType`, contact.created_at AS `createdAt`, contact.modified_at AS `modifiedAt`, portalUser.id IS NOT NULL AS `hasPortalUser`, contact.agbcode AS `agbcode`, contact.rbcznummer AS `rbcznummer`, contact.m_b_k_datum AS `mBKDatum`, contact.m_code AS `mCode`, contact.geboortedatum AS `geboortedatum`, contact.datum_registratie AS `datumRegistratie`, contact.balens AS `balens`, contact.regiocode AS `regiocode`, contact.einddatum AS `einddatum`, contact.vakopleiding_datum_diploma AS `vakopleidingDatumDiploma`, contact.datum_v_o_g AS `datumVOG`, contact.geslacht AS `geslacht`, contact.initials_name AS `initialsName`, contact.dispensatie AS `dispensatie`, contact.website AS `website`, contact.lidnummer AS `lidnummer`, contact.quasier AS `quasier`, contact.geplande_afstudeerdatum AS `geplandeAfstudeerdatum`, contact.nascholingstotalen_herberekenen AS `nascholingstotalenHerberekenen`, contact.labels AS `labels`, contact.uitleg_nascholings_berekening AS `uitlegNascholingsBerekening`, contact.nascholing_onvoldoende AS `nascholingOnvoldoende`, contact.survey_id AS `surveyId`, contact.nick_name AS `nickName`, contact.aantekening AS `aantekening`, contact.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, contact.account_id AS `accountId`, account.name AS `accountName`, contact.campaign_id AS `campaignId`, campaign.name AS `campaignName`, contact.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, contact.modified_by_id AS `modifiedById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(modifiedBy.first_name, ''), ' ', IFNULL(modifiedBy.middle_name, ''), ' ', IFNULL(modifiedBy.last_name, ''))), ''), ' ', ' ') AS `modifiedByName`, contact.assigned_user_id AS `assignedUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(assignedUser.first_name, ''), ' ', IFNULL(assignedUser.middle_name, ''), ' ', IFNULL(assignedUser.last_name, ''))), ''), ' ', ' ') AS `assignedUserName`, portalUser.id AS `portalUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(portalUser.first_name, ''), ' ', IFNULL(portalUser.middle_name, ''), ' ', IFNULL(portalUser.last_name, ''))), ''), ' ', ' ') AS `portalUserName`, originalLead.id AS `originalLeadId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(originalLead.first_name, ''), ' ', IFNULL(originalLead.middle_name, ''), ' ', IFNULL(originalLead.last_name, ''))), ''), ' ', ' ') AS `originalLeadName`, contact.m_b_k_diploma_id AS `mBKDiplomaId`, mBKDiploma.name AS `mBKDiplomaName`, contact.vakopleiding_id AS `vakopleidingId`, vakopleiding.name AS `vakopleidingName`, contact.diploma_vakopleiding_id AS `diplomaVakopleidingId`, diplomaVakopleiding.name AS `diplomaVakopleidingName`, contact.v_o_g_id AS `vOGId`, vOG.name AS `vOGName` FROM `contact` AS `contact` LEFT JOIN `attachment` AS `mBKDiploma` ON contact.m_b_k_diploma_id = mBKDiploma.id LEFT JOIN `attachment` AS `diplomaVakopleiding` ON contact.diploma_vakopleiding_id = diplomaVakopleiding.id LEFT JOIN `attachment` AS `vOG` ON contact.v_o_g_id = vOG.id LEFT JOIN `vakopleiding` AS `vakopleiding` ON contact.vakopleiding_id = vakopleiding.id LEFT JOIN `lead` AS `originalLead` ON contact.id = originalLead.created_contact_id AND originalLead.deleted = 0 LEFT JOIN `campaign` AS `campaign` ON contact.campaign_id = campaign.id LEFT JOIN `account` AS `account` ON contact.account_id = account.id LEFT JOIN `user` AS `assignedUser` ON contact.assigned_user_id = assignedUser.id LEFT JOIN `user` AS `modifiedBy` ON contact.modified_by_id = modifiedBy.id LEFT JOIN `user` AS `createdBy` ON contact.created_by_id = createdBy.id LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 LEFT JOIN `account_contact` AS `accountContactPrimary` ON contact.id = accountContactPrimary.contact_id AND contact.account_id = accountContactPrimary.account_id AND accountContactPrimary.deleted = 0 LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON contact.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON contact.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'Contact' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 LEFT JOIN `user` AS `portalUser` ON contact.id = portalUser.contact_id AND portalUser.deleted = 0 WHERE contact.id IN ('66db927c2f02ae727') AND (((contact.first_name = 'J (Klop)') AND (contact.last_name = 'Klaterflap')) OR ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl')))) AND contact.deleted = 0 LIMIT 0, 5 + 76 Quit diff --git a/Archief/Issue 3144 - github/duplicate-queries-with-patch.pdf b/Archief/Issue 3144 - github/duplicate-queries-with-patch.pdf new file mode 100644 index 0000000..49cbc15 Binary files /dev/null and b/Archief/Issue 3144 - github/duplicate-queries-with-patch.pdf differ diff --git a/Archief/Issue 3144 - github/log-of-creation-of-contact-check-for-duplicates-slow-query.log b/Archief/Issue 3144 - github/log-of-creation-of-contact-check-for-duplicates-slow-query.log new file mode 100644 index 0000000..9e35d5f --- /dev/null +++ b/Archief/Issue 3144 - github/log-of-creation-of-contact-check-for-duplicates-slow-query.log @@ -0,0 +1,17 @@ +# Time: 240914 13:04:14 +# User@Host: nvkhcrm[nvkhcrm] @ localhost [] +# Thread_id: 3702 Schema: nvkhcrm QC_hit: No +# Query_time: 14.863369 Lock_time: 0.000451 Rows_sent: 1 Rows_examined: 5272 +# Rows_affected: 0 Bytes_sent: 5410 +use `nvkhcrm`; +SET timestamp=1726311854; +SELECT contact.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `name`, contact.deleted AS `deleted`, contact.salutation_name AS `salutationName`, contact.first_name AS `firstName`, contact.last_name AS `lastName`, accountContactPrimary.role AS `title`, contact.description AS `description`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, contact.do_not_call AS `doNotCall`, contact.address_street AS `addressStreet`, contact.address_city AS `addressCity`, contact.address_state AS `addressState`, contact.address_country AS `addressCountry`, contact.address_postal_code AS `addressPostalCode`, accountContactPrimary.is_inactive AS `accountIsInactive`, account.type AS `accountType`, contact.created_at AS `createdAt`, contact.modified_at AS `modifiedAt`, portalUser.id IS NOT NULL AS `hasPortalUser`, contact.agbcode AS `agbcode`, contact.rbcznummer AS `rbcznummer`, contact.m_b_k_datum AS `mBKDatum`, contact.m_code AS `mCode`, contact.geboortedatum AS `geboortedatum`, contact.datum_registratie AS `datumRegistratie`, contact.balens AS `balens`, contact.regiocode AS `regiocode`, contact.einddatum AS `einddatum`, contact.vakopleiding_datum_diploma AS `vakopleidingDatumDiploma`, contact.datum_v_o_g AS `datumVOG`, contact.geslacht AS `geslacht`, contact.initials_name AS `initialsName`, contact.dispensatie AS `dispensatie`, contact.website AS `website`, contact.lidnummer AS `lidnummer`, contact.quasier AS `quasier`, contact.geplande_afstudeerdatum AS `geplandeAfstudeerdatum`, contact.nascholingstotalen_herberekenen AS `nascholingstotalenHerberekenen`, contact.labels AS `labels`, contact.uitleg_nascholings_berekening AS `uitlegNascholingsBerekening`, contact.nascholing_onvoldoende AS `nascholingOnvoldoende`, contact.survey_id AS `surveyId`, contact.nick_name AS `nickName`, contact.aantekening AS `aantekening`, contact.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, contact.account_id AS `accountId`, account.name AS `accountName`, contact.campaign_id AS `campaignId`, campaign.name AS `campaignName`, contact.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, contact.modified_by_id AS `modifiedById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(modifiedBy.first_name, ''), ' ', IFNULL(modifiedBy.middle_name, ''), ' ', IFNULL(modifiedBy.last_name, ''))), ''), ' ', ' ') AS `modifiedByName`, contact.assigned_user_id AS `assignedUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(assignedUser.first_name, ''), ' ', IFNULL(assignedUser.middle_name, ''), ' ', IFNULL(assignedUser.last_name, ''))), ''), ' ', ' ') AS `assignedUserName`, portalUser.id AS `portalUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(portalUser.first_name, ''), ' ', IFNULL(portalUser.middle_name, ''), ' ', IFNULL(portalUser.last_name, ''))), ''), ' ', ' ') AS `portalUserName`, originalLead.id AS `originalLeadId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(originalLead.first_name, ''), ' ', IFNULL(originalLead.middle_name, ''), ' ', IFNULL(originalLead.last_name, ''))), ''), ' ', ' ') AS `originalLeadName`, contact.m_b_k_diploma_id AS `mBKDiplomaId`, mBKDiploma.name AS `mBKDiplomaName`, contact.vakopleiding_id AS `vakopleidingId`, vakopleiding.name AS `vakopleidingName`, contact.diploma_vakopleiding_id AS `diplomaVakopleidingId`, diplomaVakopleiding.name AS `diplomaVakopleidingName`, contact.v_o_g_id AS `vOGId`, vOG.name AS `vOGName` FROM `contact` AS `contact` LEFT JOIN `attachment` AS `mBKDiploma` ON contact.m_b_k_diploma_id = mBKDiploma.id LEFT JOIN `attachment` AS `diplomaVakopleiding` ON contact.diploma_vakopleiding_id = diplomaVakopleiding.id LEFT JOIN `attachment` AS `vOG` ON contact.v_o_g_id = vOG.id LEFT JOIN `vakopleiding` AS `vakopleiding` ON contact.vakopleiding_id = vakopleiding.id LEFT JOIN `lead` AS `originalLead` ON contact.id = originalLead.created_contact_id AND originalLead.deleted = 0 LEFT JOIN `campaign` AS `campaign` ON contact.campaign_id = campaign.id LEFT JOIN `account` AS `account` ON contact.account_id = account.id LEFT JOIN `user` AS `assignedUser` ON contact.assigned_user_id = assignedUser.id LEFT JOIN `user` AS `modifiedBy` ON contact.modified_by_id = modifiedBy.id LEFT JOIN `user` AS `createdBy` ON contact.created_by_id = createdBy.id LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 LEFT JOIN `account_contact` AS `accountContactPrimary` ON contact.id = accountContactPrimary.contact_id AND contact.account_id = accountContactPrimary.account_id AND accountContactPrimary.deleted = 0 LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON contact.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON contact.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'Contact' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 LEFT JOIN `user` AS `portalUser` ON contact.id = portalUser.contact_id AND portalUser.deleted = 0 WHERE (((contact.first_name = 'O (Onto)') AND (contact.last_name = 'Oftenragh')) OR ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl')))) AND contact.deleted = 0 LIMIT 0, 1; +# Time: 240914 13:04:29 +# User@Host: nvkhcrm[nvkhcrm] @ localhost [] +# Thread_id: 3702 Schema: nvkhcrm QC_hit: No +# Query_time: 15.889768 Lock_time: 0.001275 Rows_sent: 1 Rows_examined: 5272 +# Rows_affected: 0 Bytes_sent: 5410 +SET timestamp=1726311869; +SELECT contact.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `name`, contact.deleted AS `deleted`, contact.salutation_name AS `salutationName`, contact.first_name AS `firstName`, contact.last_name AS `lastName`, accountContactPrimary.role AS `title`, contact.description AS `description`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, contact.do_not_call AS `doNotCall`, contact.address_street AS `addressStreet`, contact.address_city AS `addressCity`, contact.address_state AS `addressState`, contact.address_country AS `addressCountry`, contact.address_postal_code AS `addressPostalCode`, accountContactPrimary.is_inactive AS `accountIsInactive`, account.type AS `accountType`, contact.created_at AS `createdAt`, contact.modified_at AS `modifiedAt`, portalUser.id IS NOT NULL AS `hasPortalUser`, contact.agbcode AS `agbcode`, contact.rbcznummer AS `rbcznummer`, contact.m_b_k_datum AS `mBKDatum`, contact.m_code AS `mCode`, contact.geboortedatum AS `geboortedatum`, contact.datum_registratie AS `datumRegistratie`, contact.balens AS `balens`, contact.regiocode AS `regiocode`, contact.einddatum AS `einddatum`, contact.vakopleiding_datum_diploma AS `vakopleidingDatumDiploma`, contact.datum_v_o_g AS `datumVOG`, contact.geslacht AS `geslacht`, contact.initials_name AS `initialsName`, contact.dispensatie AS `dispensatie`, contact.website AS `website`, contact.lidnummer AS `lidnummer`, contact.quasier AS `quasier`, contact.geplande_afstudeerdatum AS `geplandeAfstudeerdatum`, contact.nascholingstotalen_herberekenen AS `nascholingstotalenHerberekenen`, contact.labels AS `labels`, contact.uitleg_nascholings_berekening AS `uitlegNascholingsBerekening`, contact.nascholing_onvoldoende AS `nascholingOnvoldoende`, contact.survey_id AS `surveyId`, contact.nick_name AS `nickName`, contact.aantekening AS `aantekening`, contact.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, contact.account_id AS `accountId`, account.name AS `accountName`, contact.campaign_id AS `campaignId`, campaign.name AS `campaignName`, contact.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, contact.modified_by_id AS `modifiedById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(modifiedBy.first_name, ''), ' ', IFNULL(modifiedBy.middle_name, ''), ' ', IFNULL(modifiedBy.last_name, ''))), ''), ' ', ' ') AS `modifiedByName`, contact.assigned_user_id AS `assignedUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(assignedUser.first_name, ''), ' ', IFNULL(assignedUser.middle_name, ''), ' ', IFNULL(assignedUser.last_name, ''))), ''), ' ', ' ') AS `assignedUserName`, portalUser.id AS `portalUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(portalUser.first_name, ''), ' ', IFNULL(portalUser.middle_name, ''), ' ', IFNULL(portalUser.last_name, ''))), ''), ' ', ' ') AS `portalUserName`, originalLead.id AS `originalLeadId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(originalLead.first_name, ''), ' ', IFNULL(originalLead.middle_name, ''), ' ', IFNULL(originalLead.last_name, ''))), ''), ' ', ' ') AS `originalLeadName`, contact.m_b_k_diploma_id AS `mBKDiplomaId`, mBKDiploma.name AS `mBKDiplomaName`, contact.vakopleiding_id AS `vakopleidingId`, vakopleiding.name AS `vakopleidingName`, contact.diploma_vakopleiding_id AS `diplomaVakopleidingId`, diplomaVakopleiding.name AS `diplomaVakopleidingName`, contact.v_o_g_id AS `vOGId`, vOG.name AS `vOGName` FROM `contact` AS `contact` LEFT JOIN `attachment` AS `mBKDiploma` ON contact.m_b_k_diploma_id = mBKDiploma.id LEFT JOIN `attachment` AS `diplomaVakopleiding` ON contact.diploma_vakopleiding_id = diplomaVakopleiding.id LEFT JOIN `attachment` AS `vOG` ON contact.v_o_g_id = vOG.id LEFT JOIN `vakopleiding` AS `vakopleiding` ON contact.vakopleiding_id = vakopleiding.id LEFT JOIN `lead` AS `originalLead` ON contact.id = originalLead.created_contact_id AND originalLead.deleted = 0 LEFT JOIN `campaign` AS `campaign` ON contact.campaign_id = campaign.id LEFT JOIN `account` AS `account` ON contact.account_id = account.id LEFT JOIN `user` AS `assignedUser` ON contact.assigned_user_id = assignedUser.id LEFT JOIN `user` AS `modifiedBy` ON contact.modified_by_id = modifiedBy.id LEFT JOIN `user` AS `createdBy` ON contact.created_by_id = createdBy.id LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 LEFT JOIN `account_contact` AS `accountContactPrimary` ON contact.id = accountContactPrimary.contact_id AND contact.account_id = accountContactPrimary.account_id AND accountContactPrimary.deleted = 0 LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON contact.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON contact.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'Contact' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 LEFT JOIN `user` AS `portalUser` ON contact.id = portalUser.contact_id AND portalUser.deleted = 0 WHERE (((contact.first_name = 'O (Onto)') AND (contact.last_name = 'Oftenragh')) OR ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl')))) AND contact.deleted = 0 LIMIT 0, 1; +~ + diff --git a/Archief/Issue 3144 - github/log-of-creation-of-contact-check-for-duplicates.log b/Archief/Issue 3144 - github/log-of-creation-of-contact-check-for-duplicates.log new file mode 100644 index 0000000..3ee41db --- /dev/null +++ b/Archief/Issue 3144 - github/log-of-creation-of-contact-check-for-duplicates.log @@ -0,0 +1,13 @@ +240914 13:04:14 3702 Connect nvkhcrm@localhost on nvkhcrm using Socket + 3702 Query SELECT authToken.id AS `id`, authToken.is_active AS `isActive`, authToken.token AS `token`, authToken.secret AS `secret`, authToken.user_id AS `userId`, authToken.portal_id AS `portalId`, authToken.hash AS `hash`, authToken.created_at AS `createdAt`, authToken.last_access AS `lastAccess`, authToken.modified_at AS `modifiedAt` FROM `auth_token` AS `authToken` WHERE authToken.token = '9f82b356063f608eff8a22b411d654ab' AND authToken.deleted = 0 LIMIT 0, 1 + 3702 Query SELECT user.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(user.first_name, ''), ' ', IFNULL(user.middle_name, ''), ' ', IFNULL(user.last_name, ''))), ''), ' ', ' ') AS `name`, user.deleted AS `deleted`, user.user_name AS `userName`, user.type AS `type`, user.password AS `password`, user.auth_method AS `authMethod`, user.api_key AS `apiKey`, user.salutation_name AS `salutationName`, user.first_name AS `firstName`, user.last_name AS `lastName`, user.is_active AS `isActive`, user.title AS `title`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, user.avatar_color AS `avatarColor`, user.gender AS `gender`, user.created_at AS `createdAt`, user.modified_at AS `modifiedAt`, userData.auth2_f_a AS `auth2FA`, user.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, user.delete_id AS `deleteId`, user.default_team_id AS `defaultTeamId`, defaultTeam.name AS `defaultTeamName`, user.contact_id AS `contactId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `contactName`, user.avatar_id AS `avatarId`, avatar.name AS `avatarName`, user.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, user.dashboard_template_id AS `dashboardTemplateId`, dashboardTemplate.name AS `dashboardTemplateName`, user.working_time_calendar_id AS `workingTimeCalendarId`, user.layout_set_id AS `layoutSetId`, userData.id AS `userDataId`, userData.id AS `userDataName` FROM `user` AS `user` LEFT JOIN `attachment` AS `avatar` ON user.avatar_id = avatar.id LEFT JOIN `contact` AS `contact` ON user.contact_id = contact.id LEFT JOIN `user_data` AS `userData` ON user.id = userData.user_id AND userData.deleted = 0 LEFT JOIN `dashboard_template` AS `dashboardTemplate` ON user.dashboard_template_id = dashboardTemplate.id LEFT JOIN `user` AS `createdBy` ON user.created_by_id = createdBy.id LEFT JOIN `team` AS `defaultTeam` ON user.default_team_id = defaultTeam.id LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON user.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'User' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON user.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'User' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 WHERE user.user_name = 'admin' AND user.password = 'Wkpa1j5J2/Og1qN4NMoygh3XDj1Je1Gugpdzpd4QA0m7t92XN8Ze8AyFVlPlXlsOM.DU.2.XbH3wVoK11LOon/' AND user.type NOT IN ('api','system') AND user.deleted = 0 LIMIT 0, 1 + 3702 Query SELECT team.id AS `id`, team.name AS `name` FROM `team` AS `team` JOIN `team_user` AS `teamUser` ON teamUser.team_id = team.id AND teamUser.user_id = '1' AND teamUser.deleted = 0 WHERE team.deleted = 0 ORDER BY team.name ASC + 3702 Query UPDATE `auth_token` SET auth_token.last_access = '2024-09-14 11:04:14', auth_token.modified_at = '2024-09-14 11:04:14' WHERE auth_token.id = '66e4c445c1874e115' AND auth_token.deleted = 0 + 3702 Query SELECT authLogRecord.id AS `id` FROM `auth_log_record` AS `authLogRecord` WHERE authLogRecord.auth_token_id = '66e4c445c1874e115' AND authLogRecord.deleted = 0 ORDER BY authLogRecord.request_time DESC LIMIT 0, 1 + 3702 Query SELECT preferences.id AS `id`, preferences.data AS `data` FROM `preferences` WHERE preferences.id = '1' LIMIT 0, 1 + 3702 Query SELECT autofollow.entity_type AS `entityType` FROM `autofollow` AS `autofollow` WHERE autofollow.user_id = '1' AND autofollow.deleted = 0 + 3702 Query SELECT user.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(user.first_name, ''), ' ', IFNULL(user.middle_name, ''), ' ', IFNULL(user.last_name, ''))), ''), ' ', ' ') AS `name`, user.deleted AS `deleted`, user.user_name AS `userName`, user.type AS `type`, user.password AS `password`, user.auth_method AS `authMethod`, user.api_key AS `apiKey`, user.salutation_name AS `salutationName`, user.first_name AS `firstName`, user.last_name AS `lastName`, user.is_active AS `isActive`, user.title AS `title`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, user.avatar_color AS `avatarColor`, user.gender AS `gender`, user.created_at AS `createdAt`, user.modified_at AS `modifiedAt`, userData.auth2_f_a AS `auth2FA`, user.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, user.delete_id AS `deleteId`, user.default_team_id AS `defaultTeamId`, defaultTeam.name AS `defaultTeamName`, user.contact_id AS `contactId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `contactName`, user.avatar_id AS `avatarId`, avatar.name AS `avatarName`, user.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, user.dashboard_template_id AS `dashboardTemplateId`, dashboardTemplate.name AS `dashboardTemplateName`, user.working_time_calendar_id AS `workingTimeCalendarId`, user.layout_set_id AS `layoutSetId`, userData.id AS `userDataId`, userData.id AS `userDataName` FROM `user` AS `user` LEFT JOIN `attachment` AS `avatar` ON user.avatar_id = avatar.id LEFT JOIN `contact` AS `contact` ON user.contact_id = contact.id LEFT JOIN `user_data` AS `userData` ON user.id = userData.user_id AND userData.deleted = 0 LEFT JOIN `dashboard_template` AS `dashboardTemplate` ON user.dashboard_template_id = dashboardTemplate.id LEFT JOIN `user` AS `createdBy` ON user.created_by_id = createdBy.id LEFT JOIN `team` AS `defaultTeam` ON user.default_team_id = defaultTeam.id LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON user.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'User' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON user.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'User' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 WHERE user.id = '1' AND user.deleted = 0 + 3702 Query SELECT contact.id AS `id` FROM `contact` AS `contact` LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 WHERE (((contact.first_name = 'O (Onto)') AND (contact.last_name = 'Oftenragh')) OR ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl')))) AND contact.deleted = 0 LIMIT 0, 1 + 3702 Query SELECT contact.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `name`, contact.deleted AS `deleted`, contact.salutation_name AS `salutationName`, contact.first_name AS `firstName`, contact.last_name AS `lastName`, accountContactPrimary.role AS `title`, contact.description AS `description`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, contact.do_not_call AS `doNotCall`, contact.address_street AS `addressStreet`, contact.address_city AS `addressCity`, contact.address_state AS `addressState`, contact.address_country AS `addressCountry`, contact.address_postal_code AS `addressPostalCode`, accountContactPrimary.is_inactive AS `accountIsInactive`, account.type AS `accountType`, contact.created_at AS `createdAt`, contact.modified_at AS `modifiedAt`, portalUser.id IS NOT NULL AS `hasPortalUser`, contact.agbcode AS `agbcode`, contact.rbcznummer AS `rbcznummer`, contact.m_b_k_datum AS `mBKDatum`, contact.m_code AS `mCode`, contact.geboortedatum AS `geboortedatum`, contact.datum_registratie AS `datumRegistratie`, contact.balens AS `balens`, contact.regiocode AS `regiocode`, contact.einddatum AS `einddatum`, contact.vakopleiding_datum_diploma AS `vakopleidingDatumDiploma`, contact.datum_v_o_g AS `datumVOG`, contact.geslacht AS `geslacht`, contact.initials_name AS `initialsName`, contact.dispensatie AS `dispensatie`, contact.website AS `website`, contact.lidnummer AS `lidnummer`, contact.quasier AS `quasier`, contact.geplande_afstudeerdatum AS `geplandeAfstudeerdatum`, contact.nascholingstotalen_herberekenen AS `nascholingstotalenHerberekenen`, contact.labels AS `labels`, contact.uitleg_nascholings_berekening AS `uitlegNascholingsBerekening`, contact.nascholing_onvoldoende AS `nascholingOnvoldoende`, contact.survey_id AS `surveyId`, contact.nick_name AS `nickName`, contact.aantekening AS `aantekening`, contact.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, contact.account_id AS `accountId`, account.name AS `accountName`, contact.campaign_id AS `campaignId`, campaign.name AS `campaignName`, contact.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, contact.modified_by_id AS `modifiedById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(modifiedBy.first_name, ''), ' ', IFNULL(modifiedBy.middle_name, ''), ' ', IFNULL(modifiedBy.last_name, ''))), ''), ' ', ' ') AS `modifiedByName`, contact.assigned_user_id AS `assignedUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(assignedUser.first_name, ''), ' ', IFNULL(assignedUser.middle_name, ''), ' ', IFNULL(assignedUser.last_name, ''))), ''), ' ', ' ') AS `assignedUserName`, portalUser.id AS `portalUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(portalUser.first_name, ''), ' ', IFNULL(portalUser.middle_name, ''), ' ', IFNULL(portalUser.last_name, ''))), ''), ' ', ' ') AS `portalUserName`, originalLead.id AS `originalLeadId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(originalLead.first_name, ''), ' ', IFNULL(originalLead.middle_name, ''), ' ', IFNULL(originalLead.last_name, ''))), ''), ' ', ' ') AS `originalLeadName`, contact.m_b_k_diploma_id AS `mBKDiplomaId`, mBKDiploma.name AS `mBKDiplomaName`, contact.vakopleiding_id AS `vakopleidingId`, vakopleiding.name AS `vakopleidingName`, contact.diploma_vakopleiding_id AS `diplomaVakopleidingId`, diplomaVakopleiding.name AS `diplomaVakopleidingName`, contact.v_o_g_id AS `vOGId`, vOG.name AS `vOGName` FROM `contact` AS `contact` LEFT JOIN `attachment` AS `mBKDiploma` ON contact.m_b_k_diploma_id = mBKDiploma.id LEFT JOIN `attachment` AS `diplomaVakopleiding` ON contact.diploma_vakopleiding_id = diplomaVakopleiding.id LEFT JOIN `attachment` AS `vOG` ON contact.v_o_g_id = vOG.id LEFT JOIN `vakopleiding` AS `vakopleiding` ON contact.vakopleiding_id = vakopleiding.id LEFT JOIN `lead` AS `originalLead` ON contact.id = originalLead.created_contact_id AND originalLead.deleted = 0 LEFT JOIN `campaign` AS `campaign` ON contact.campaign_id = campaign.id LEFT JOIN `account` AS `account` ON contact.account_id = account.id LEFT JOIN `user` AS `assignedUser` ON contact.assigned_user_id = assignedUser.id LEFT JOIN `user` AS `modifiedBy` ON contact.modified_by_id = modifiedBy.id LEFT JOIN `user` AS `createdBy` ON contact.created_by_id = createdBy.id LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 LEFT JOIN `account_contact` AS `accountContactPrimary` ON contact.id = accountContactPrimary.contact_id AND contact.account_id = accountContactPrimary.account_id AND accountContactPrimary.deleted = 0 LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON contact.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON contact.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'Contact' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 LEFT JOIN `user` AS `portalUser` ON contact.id = portalUser.contact_id AND portalUser.deleted = 0 WHERE (((contact.first_name = 'O (Onto)') AND (contact.last_name = 'Oftenragh')) OR ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl')))) AND contact.deleted = 0 LIMIT 0, 1 + 3702 Query SELECT contact.id AS `id`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(contact.first_name, ''), ' ', IFNULL(contact.middle_name, ''), ' ', IFNULL(contact.last_name, ''))), ''), ' ', ' ') AS `name`, contact.deleted AS `deleted`, contact.salutation_name AS `salutationName`, contact.first_name AS `firstName`, contact.last_name AS `lastName`, accountContactPrimary.role AS `title`, contact.description AS `description`, emailAddresses.name AS `emailAddress`, phoneNumbers.name AS `phoneNumber`, contact.do_not_call AS `doNotCall`, contact.address_street AS `addressStreet`, contact.address_city AS `addressCity`, contact.address_state AS `addressState`, contact.address_country AS `addressCountry`, contact.address_postal_code AS `addressPostalCode`, accountContactPrimary.is_inactive AS `accountIsInactive`, account.type AS `accountType`, contact.created_at AS `createdAt`, contact.modified_at AS `modifiedAt`, portalUser.id IS NOT NULL AS `hasPortalUser`, contact.agbcode AS `agbcode`, contact.rbcznummer AS `rbcznummer`, contact.m_b_k_datum AS `mBKDatum`, contact.m_code AS `mCode`, contact.geboortedatum AS `geboortedatum`, contact.datum_registratie AS `datumRegistratie`, contact.balens AS `balens`, contact.regiocode AS `regiocode`, contact.einddatum AS `einddatum`, contact.vakopleiding_datum_diploma AS `vakopleidingDatumDiploma`, contact.datum_v_o_g AS `datumVOG`, contact.geslacht AS `geslacht`, contact.initials_name AS `initialsName`, contact.dispensatie AS `dispensatie`, contact.website AS `website`, contact.lidnummer AS `lidnummer`, contact.quasier AS `quasier`, contact.geplande_afstudeerdatum AS `geplandeAfstudeerdatum`, contact.nascholingstotalen_herberekenen AS `nascholingstotalenHerberekenen`, contact.labels AS `labels`, contact.uitleg_nascholings_berekening AS `uitlegNascholingsBerekening`, contact.nascholing_onvoldoende AS `nascholingOnvoldoende`, contact.survey_id AS `surveyId`, contact.nick_name AS `nickName`, contact.aantekening AS `aantekening`, contact.middle_name AS `middleName`, emailAddresses.opt_out AS `emailAddressIsOptedOut`, emailAddresses.invalid AS `emailAddressIsInvalid`, phoneNumbers.opt_out AS `phoneNumberIsOptedOut`, phoneNumbers.invalid AS `phoneNumberIsInvalid`, contact.account_id AS `accountId`, account.name AS `accountName`, contact.campaign_id AS `campaignId`, campaign.name AS `campaignName`, contact.created_by_id AS `createdById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(createdBy.first_name, ''), ' ', IFNULL(createdBy.middle_name, ''), ' ', IFNULL(createdBy.last_name, ''))), ''), ' ', ' ') AS `createdByName`, contact.modified_by_id AS `modifiedById`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(modifiedBy.first_name, ''), ' ', IFNULL(modifiedBy.middle_name, ''), ' ', IFNULL(modifiedBy.last_name, ''))), ''), ' ', ' ') AS `modifiedByName`, contact.assigned_user_id AS `assignedUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(assignedUser.first_name, ''), ' ', IFNULL(assignedUser.middle_name, ''), ' ', IFNULL(assignedUser.last_name, ''))), ''), ' ', ' ') AS `assignedUserName`, portalUser.id AS `portalUserId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(portalUser.first_name, ''), ' ', IFNULL(portalUser.middle_name, ''), ' ', IFNULL(portalUser.last_name, ''))), ''), ' ', ' ') AS `portalUserName`, originalLead.id AS `originalLeadId`, REPLACE(NULLIF(TRIM(CONCAT(IFNULL(originalLead.first_name, ''), ' ', IFNULL(originalLead.middle_name, ''), ' ', IFNULL(originalLead.last_name, ''))), ''), ' ', ' ') AS `originalLeadName`, contact.m_b_k_diploma_id AS `mBKDiplomaId`, mBKDiploma.name AS `mBKDiplomaName`, contact.vakopleiding_id AS `vakopleidingId`, vakopleiding.name AS `vakopleidingName`, contact.diploma_vakopleiding_id AS `diplomaVakopleidingId`, diplomaVakopleiding.name AS `diplomaVakopleidingName`, contact.v_o_g_id AS `vOGId`, vOG.name AS `vOGName` FROM `contact` AS `contact` LEFT JOIN `attachment` AS `mBKDiploma` ON contact.m_b_k_diploma_id = mBKDiploma.id LEFT JOIN `attachment` AS `diplomaVakopleiding` ON contact.diploma_vakopleiding_id = diplomaVakopleiding.id LEFT JOIN `attachment` AS `vOG` ON contact.v_o_g_id = vOG.id LEFT JOIN `vakopleiding` AS `vakopleiding` ON contact.vakopleiding_id = vakopleiding.id LEFT JOIN `lead` AS `originalLead` ON contact.id = originalLead.created_contact_id AND originalLead.deleted = 0 LEFT JOIN `campaign` AS `campaign` ON contact.campaign_id = campaign.id LEFT JOIN `account` AS `account` ON contact.account_id = account.id LEFT JOIN `user` AS `assignedUser` ON contact.assigned_user_id = assignedUser.id LEFT JOIN `user` AS `modifiedBy` ON contact.modified_by_id = modifiedBy.id LEFT JOIN `user` AS `createdBy` ON contact.created_by_id = createdBy.id LEFT JOIN `entity_email_address` AS `emailAddressesMultipleMiddle` ON contact.id = emailAddressesMultipleMiddle.entity_id AND emailAddressesMultipleMiddle.deleted = 0 AND emailAddressesMultipleMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddressesMultiple` ON emailAddressesMultiple.id = emailAddressesMultipleMiddle.email_address_id AND emailAddressesMultiple.deleted = 0 LEFT JOIN `account_contact` AS `accountContactPrimary` ON contact.id = accountContactPrimary.contact_id AND contact.account_id = accountContactPrimary.account_id AND accountContactPrimary.deleted = 0 LEFT JOIN `entity_email_address` AS `emailAddressesMiddle` ON contact.id = emailAddressesMiddle.entity_id AND emailAddressesMiddle.deleted = 0 AND emailAddressesMiddle.primary = 1 AND emailAddressesMiddle.entity_type = 'Contact' LEFT JOIN `email_address` AS `emailAddresses` ON emailAddresses.id = emailAddressesMiddle.email_address_id AND emailAddresses.deleted = 0 LEFT JOIN `entity_phone_number` AS `phoneNumbersMiddle` ON contact.id = phoneNumbersMiddle.entity_id AND phoneNumbersMiddle.deleted = 0 AND phoneNumbersMiddle.primary = 1 AND phoneNumbersMiddle.entity_type = 'Contact' LEFT JOIN `phone_number` AS `phoneNumbers` ON phoneNumbers.id = phoneNumbersMiddle.phone_number_id AND phoneNumbers.deleted = 0 LEFT JOIN `user` AS `portalUser` ON contact.id = portalUser.contact_id AND portalUser.deleted = 0 WHERE (((contact.first_name = 'O (Onto)') AND (contact.last_name = 'Oftenragh')) OR ((emailAddressesMultiple.lower = LOWER('hans@dykema.nl')))) AND contact.deleted = 0 LIMIT 0, 1 +240914 13:04:45 3702 Quit diff --git a/Archief/Issue 3145 - github & forum/issue_3145.png b/Archief/Issue 3145 - github & forum/issue_3145.png new file mode 100644 index 0000000..7c30afc Binary files /dev/null and b/Archief/Issue 3145 - github & forum/issue_3145.png differ diff --git a/Archief/Nascholingsberekeningen v2.docx b/Archief/Nascholingsberekeningen v2.docx new file mode 100644 index 0000000..8e4bd91 Binary files /dev/null and b/Archief/Nascholingsberekeningen v2.docx differ diff --git a/Archief/Nascholingsberekeningen.docx b/Archief/Nascholingsberekeningen.docx new file mode 100644 index 0000000..c42dfd0 Binary files /dev/null and b/Archief/Nascholingsberekeningen.docx differ diff --git a/Archief/code pre 2023-10-27/script-bereken-nascholingstotaal-voor-jaar.js b/Archief/code pre 2023-10-27/script-bereken-nascholingstotaal-voor-jaar.js new file mode 100644 index 0000000..e97e30f --- /dev/null +++ b/Archief/code pre 2023-10-27/script-bereken-nascholingstotaal-voor-jaar.js @@ -0,0 +1,294 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Initialiseren +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$na_diploma_dt = record\attribute('Contact', $contact_id, 'vakopleidingDatumDiploma'); +$na_dispensatie = record\attribute('Contact', $contact_id, 'dispensatie'); +$na_regiocode = record\attribute('Contact', $contact_id, 'regiocode'); +$na_regiocode_str = $na_regiocode; +$na_regiocode = toInt($na_regiocode); // regiocode numeriek maken +$na_diploma_jr = datetime\year($na_diploma_dt); + +ifThen(!global\isset('nascholingsnorm-hash'), + $na_script = configGet('script-lees-nascholingsnorm-hash'); + Exec($na_script); +); +$na_norm = global\get('nascholingsnorm-hash'); + +$na_id = ''; + +$na_methode_1_tot_en_met = configGet('berekening-methode-1-tot-en-met'); +$na_werkgroep_div = configGet('werkgroep-dagen-deel-factor'); +$na_werkgroep_max = configGet('werkgroep-dagen-max'); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Bereken de totalen dagen en dagenMedisch. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +ifThen(!$no_db_update, + $na_recs = record\fetchManyHash('Nascholingstotaal', + 'id, dagen, dagenMedisch, dagenHomeopathie, dagenWerkgroep, handmatig, dagenVrijstelling, nascholingsnormId, startSurplus', + 'createdAt', 'asc', + 'contactId=', $contact_id, + 'jaar=', $year + ); + $na_nrecs = array\length($na_recs); + + ifThenElse($na_nrecs > 0, + $na_rec = array\at($na_recs, 0); + + $na_id = hash\get($na_rec, 'id'); + $na_handmatig = hash\get($na_rec, 'handmatig'); + $na_vrijstelling = hash\get($na_rec, 'dagenVrijstelling'); + $na_start_surplus = hash\get($na_rec, 'startSurplus'); + + log('warning', 'Berekenen nascholingen voor jaar: ', $year, ', na_id = ', $na_id); + + // Zolang de totalen handmatig zijn, wordt er niets berekend. + ifThenElse($na_handmatig, + $na_totaal_dagen = hash\get($na_rec, 'dagen'); + $na_totaal_medisch = hash\get($na_rec, 'dagenMedisch'); + $na_totaal_homeopathie = hash\get($na_rec, 'dagenHomeopathie'); + $na_totaal_werkgroep = hash\get($na_rec, 'dagenWerkgroep'); + log('warning', 'Handmatige nascholing, er wordt niets berekend'); + log('warning', 'medisch:', $na_totaal_medisch, ', hom:', $na_totaal_homeopathie, + ', werkgr:', $na_totaal_werkgroep, ', homoverig:', $na_totaal_dagen); + , + // Totalen op 0, dit is een te berekenen nascholing + $na_totaal_dagen = 0; + $na_totaal_medisch = 0; + $na_totaal_homeopathie = 0; + $na_totaal_werkgroep = 0; + + // De goedgekeurde handmatige en geaccrediteerde nascholingen + // kan nog steeds met methode 1. + $na_rows = record\fetchRelatedMany( + 'Nascholingstotaal', $na_id, 'nascholingen1', + 'jaar, dagen, dagenMedisch, dagenHomeopathie, status, name', + 'jaar', 'asc', + 'jaar=', $year + ); + $na_i = 0; + $na_n = array\length($na_rows); + log('warning', '#nascholingen gerelateerd aan nascholingstotaal:', $na_n); + + while($na_i < $na_n, + $na_row = array\at($na_rows, $na_i); + $status = array\at($na_row, 4); + $name = array\at($na_row, 5); + log('warning', 'i = ', $na_i, ', status = ', $status); + ifThen($status != '-' && $status != 'afgekeurd', + $na_totaal_dagen = $na_totaal_dagen + array\at($na_row, 1); + $na_totaal_medisch = $na_totaal_medisch + array\at($na_row, 2); + $na_totaal_homeopathie = $na_totaal_homeopathie + array\at($na_row, 3); + log('warning', 'Dagen: hom:', $na_totaal_homeopathie, ', dagen: ', $na_totaal_dagen, ', medisch:', $na_totaal_medisch); + ); + $na_i = $na_i + 1; + ); + + // Dan het aantal notulen voor de werkgroepen van dit contact voor het gegeven jaar + // Eerst kijken we of we al groter dan het grensjaar zitten. + // Dit is niet meer voor methode 1. + ifThen($year > $na_methode_1_tot_en_met, + // Nu kunnen we ons best doen. + // Haal de werkgroep lidmaatschappen op die geldig zijn voor dit jaar. + $na_today = datetime\now(); + $na_werkgroepen_ids_1 = record\fetchRelatedManyHash('Contact', $contact_id, + 'werkgroeplidmaatschappen', + 'werkgroepId, datumVanaf', + 'name', 'asc', + 'lidmaatschapBeeindigd=', 0, + 'jaarVanaf<=', $year, + ); + $na_werkgroepen_ids_2 = record\fetchRelatedManyHash('Contact', $contact_id, + 'werkgroeplidmaatschappen', + 'werkgroepId, datumVanaf, datumTotEnMet', + 'name', 'asc', + 'lidmaatschapBeeindigd=', 1, + 'jaarVanaf<=', $year, + 'jaarTotEnMet>=', $year + ); + // Oke, nu hebben we de werkgroep ids. + // En dan kijken naar het aantal verslagen over dit jaar. + // En afkappen op een maximaal aantal dagen. + + $na_werkgroep_verslagen = 0; + + $na_n = array\length($na_werkgroepen_ids_1); + log('warning', 'Werkgroepen die niet beëindigd zijn :', $na_n); + $na_i = 0; + while($na_i < $na_n, + // Verkrijg het aantal notulen >= max(datumVanaf,begin dit jaar) en kleiner einde dit jaar. + $na_row = array\at($na_werkgroepen_ids_1, $na_i); + + $na_werkgroep_id = hash\get($na_row, 'werkgroepId'); + + $na_datumVanaf = hash\get($na_row, 'datumVanaf'); + $na_year_begin = string\concatenate($year, '-01-01'); + $na_end = string\concatenate($year, '-12-31'); + ifThenElse($na_datumVanaf > $na_year_begin, + $na_begin = $na_datumVanaf, + $na_begin = $na_year_begin); + + log('warning', 'werkgroepid = ', $na_werkgroep_id); + log('warning', 'datum vanaf: ', $na_begin, ', datum eind:', $na_end); + + $na_count = record\countRel('Werkgroep', $na_werkgroep_id, + 'werkgroepverslagen', + 'datum>=', $na_begin, + 'datum<=', $na_end + ); + + $na_werkgroep_verslagen = $na_werkgroep_verslagen + $na_count; + log('warning', 'notulen count=', $na_count, ', werkgroep verslagen=', $na_werkgroep_verslagen); + + $na_i = $na_i + 1; + ); + + // Oke en nu voor de jaren waarin er een einddatum is gezet. + + $na_n = array\length($na_werkgroepen_ids_2); + log('warning', 'Werkgroepen met een einddatum:', $na_n); + $na_i = 0; + while($na_i < $na_n, + // Verkrijg het aantal notulen >= max(datumVanaf,begin dit jaar) en kleiner MIN(datumTotEnMet, einde dit jaar). + $na_row = array\at($na_werkgroepen_ids_2, $na_i); + + $na_werkgroep_id = hash\get($na_row, 'werkgroepId'); + + $na_datumVanaf = hash\get($na_row, 'datumVanaf'); + $na_year_begin = string\concatenate($year, '-01-01'); + ifThenElse($na_datumVanaf > $na_year_begin, + $na_begin = $na_datumVanaf, + $na_begin = $na_year_begin); + + $na_datumTotEnMet = hash\get($na_row, 'datumTotEnMet'); + $na_year_end = string\concatenate($year, '-12-31'); + ifThenElse($na_datumTotEnMet < $na_year_end, + $na_end = $na_datumTotEnMet, + $na_end = $na_year_end); + + log('warning', 'werkgroepid = ', $na_werkgroep_id); + log('warning', 'datum vanaf: ', $na_begin, ', datum einde:', $na_end); + + $na_count = record\countRel('Werkgroep', $na_werkgroep_id, + 'werkgroepverslagen', + 'datum>=', $na_begin, + 'datum<=', $na_end + ); + + $na_werkgroep_verslagen = $na_werkgroep_verslagen + $na_count; + log('warning', 'notulen count=', $na_count, ', werkgroep verslagen=', $na_werkgroep_verslagen); + + $na_i = $na_i + 1; + ); + + log('warning', 'totaal aantal werkgroep verslagen voor ', $year, ' = ', $na_werkgroep_verslagen); + + // Bereken de zooi. + + $na_totaal_werkgroep = number\floor($na_werkgroep_verslagen / $na_werkgroep_div); + ifThen($na_totaal_werkgroep > $na_werkgroep_max, $na_totaal_werkgroep = $na_werkgroep_max); + ); + ); + , + log('error', 'Geen nascholingstotaal voor contact_id ', $contact_id, ' en jaar ', $year); + $na_totaal_dagen = 0; + $na_totaal_medisch = 0; + $na_vrijstelling = 0; + $na_totaal_homeopathie = 0; + $na_totaal_werkgroep = 0; + ); +); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Bereken de norm & vrijstelling +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$norm_key = $year; +ifThen($na_regiocode == 8, + log('warning', 'Afwijkende norm key'); + $norm_key = string\concatenate($year, '-', $na_regiocode_str); +); +log('warning', 'Regiocode=', $na_regiocode, ', str=', $na_regiocode_str, ', Norm key = ', $norm_key); +$na_dagen_norm_formeel = hash\get(hash\get($na_norm, $norm_key), 'dagen'); +$na_medisch_norm = hash\get(hash\get($na_norm, $norm_key), 'dagenMedisch'); +$na_homeopathie_norm = hash\get(hash\get($na_norm, $norm_key), 'dagenHomeopathie'); + +log('warning', 'nascholingsnorm: jaar: ', $year, ', dagen: ', $na_dagen_norm_formeel, + ', medisch: ', $na_medisch_norm, + ', homeopathie: ', $na_homeopathie_norm, + ', start surplus: ', $na_start_surplus + ); + +// $na_vrijstelling is op zich al bekend, maar misschien is er nog dispensatie of registratie jaar +$na_registration = ($year <= $na_diploma_jr); +$na_examenjaar = false; +ifThenElse($na_dispensatie, + $na_vrijstelling = $na_dagen_norm_formeel; + , + ifThen($na_registration, + //$na_vrijstelling = $na_dagen_norm_formeel; + $na_dagen_norm_formeel = 0; + $na_medisch_norm = 0; + $na_homeopathie_norm = 0; + $na_examenjaar = true; + ); +); + +$na_dagen_norm = $na_dagen_norm_formeel - $na_vrijstelling; + +// Het aantal start dagen surplus kan nooit de norm overschrijden. +// startSurplus wordt alleen bij het 2013 record gebruikt, m.a.w. voor mensen die daarvoor +// al lid waren. In alle andere gevallen is $na_start_surplus gelijk aan 0. +ifThen($na_start_surplus > $na_dagen_norm_formeel, $na_start_surplus = $na_dagen_norm_formeel); + +log('warning', 'dispensatie=', $na_dispensatie, ', regjr=', $na_registration, + ', norm=', $na_dagen_norm, ', start surplus=', $na_start_surplus); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Bereken het saldo aan dagen +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +log('warning', 'medisch:', $na_totaal_medisch, ', hom:', $na_totaal_homeopathie, + ', werkgr:', $na_totaal_werkgroep, ', homoverig:', $na_totaal_dagen); + +$na_totaal_alle_dagen = $na_totaal_dagen + $na_totaal_medisch + $na_totaal_homeopathie + $na_totaal_werkgroep; +$na_saldo = $na_totaal_alle_dagen - $na_dagen_norm; +$na_saldo = $na_saldo + $na_start_surplus; + +$na_saldo_homeopathie = $na_totaal_homeopathie - $na_homeopathie_norm; +$na_saldo_medisch = $na_totaal_medisch - $na_medisch_norm; + +log('warning', 'totaal alle:', $na_totaal_alle_dagen, + ', saldo:', $na_saldo, + ', saldo hom:', $na_saldo_homeopathie, + ', saldo medisch:', $na_saldo_medisch); + +log('warning', 'no db update = ', $no_db_update, ', na_id = ', $na_id); +log('warning', 'na_examenjaar = ', $na_examenjaar); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Nascholingstotaal updaten (alleen van belang als we niet al aan het updaten zijn!) +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +ifThen(!$no_db_update && $na_id != '', + log('warning', 'Updaten nascholingstotaal: ', $na_id, ' jaar=', $year); + $oke = record\update('Nascholingstotaal', $na_id, + 'dagen', $na_totaal_dagen, + 'dagenMedisch', $na_totaal_medisch, + 'dagenHomeopathie', $na_totaal_homeopathie, + 'dagenWerkgroep', $na_totaal_werkgroep, + 'dagenTotaal', $na_totaal_alle_dagen, + 'dagenSaldo', $na_saldo, + 'homeopathieSaldo', $na_saldo_homeopathie, + 'medischSaldo', $na_saldo_medisch, + 'dagenFormeleNorm', $na_dagen_norm_formeel, + 'medischFormeleNorm', $na_medisch_norm, + 'homeopathieFormeleNorm', $na_homeopathie_norm, + 'examenjaar', $na_examenjaar + ); + + ifThen(!$oke, log('error', 'Update ging niet goed!')); +); + diff --git a/Archief/code pre 2023-10-27/script-bereken-nascholingstotalen.js b/Archief/code pre 2023-10-27/script-bereken-nascholingstotalen.js new file mode 100644 index 0000000..600f79d --- /dev/null +++ b/Archief/code pre 2023-10-27/script-bereken-nascholingstotalen.js @@ -0,0 +1,931 @@ +//exec last execution: Fri Jan 20 2023 15:56:21 GMT+0100 (Midden-Europese standaardtijd) + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Initialisatie +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +log('warning', 'Doorrekenen voor contact ', $contact_id); + +$na_reg_dt = record\attribute('Contact', $contact_id, 'datumRegistratie'); +$na_reg_jr = datetime\year($na_reg_dt); + +$na_methode_1_max_jaar = configGet('berekening-methode-1-tot-en-met'); +$na_methode_1_max_surplus = configGet('berekening-methode-1-max-surplus'); +$na_style_rubric = configGet('nascholingstotaal-rapport-jaar-rubric-style'); +$na_style_dagen = configGet('nascholingstotaal-rapport-jaar-dagen-style'); +$na_style_dagen_inspr = configGet('nascholingstotaal-rapport-jaar-dagen-style-inspr'); +$na_style_nstd_goed = configGet('nascholingstotaal-rapport-jaar-nstd-goed-style'); +$na_style_nstd_goed_report = configGet('nascholingstotaal-rapport-jaar-nstd-goed-report-style'); +$na_style_nstd_tekort = configGet('nascholingstotaal-rapport-jaar-nstd-tekort-style'); +$na_style_nstd_tekort_report = configGet('nascholingstotaal-rapport-jaar-nstd-tekort-report-style'); +$na_style_nstd_nvt = configGet('nascholingstotaal-rapport-jaar-nstd-nvt-style'); +$na_style_bepaald = configGet('nascholingstotaal-rapport-jaar-nstd-bepaald-style'); +$na_style_bepaald_report = configGet('nascholingstotaal-rapport-jaar-nstd-bepaald-report-style'); +$na_style_onbepaald = configGet('nascholingstotaal-rapport-jaar-nstd-onbepaald-style'); +$na_style_onbepaald_report = configGet('nascholingstotaal-rapport-jaar-nstd-onbepaald-report-style'); +$na_style_kop = configGet('nascholingstotaal-rapport-jaar-kop-style'); +$na_style_probleem = configGet('nascholingstotaal-rapport-probleem-style'); +$na_style_waarschuwing = configGet('nascholingstotaal-rapport-waarschuwing-style'); +$na_style_sub_rubric = configGet('nascholingstotaal-rapport-sub-rubriek-style'); + +$na_nascholing_onvoldoende = false; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Haal eerst alle nascholingstotalen voor een contact op, in volgorde van jaar. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$na_geen_status_vanaf_jaar = datetime\year(datetime\now()) - 1; + +$na_in_calc_key = string\concatenate('nascholingstotalen-in-berekening-voor', $contact_id); +global\set($na_in_calc_key, true); + +$na_rows = record\fetchManyHash('Nascholingstotaal', + 'id, jaar, dagen, dagenMedisch, dagenHomeopathie, dagenTotaal, medischSaldo, homeopathieSaldo, dagenSaldo, saldoNaCorrectie, dagenWerkgroep, dagenVrijstelling, status, berekeningsUitleg, startSurplus, dagenFormeleNorm, homeopathieFormeleNorm, medischFormeleNorm, examenjaar, handmatig', + 'jaar', 'asc', + 'contactId=', $contact_id, + ); + +$h_surplus = hash\new(); +$h_saldi = hash\new(); +$h_verr = hash\new(); + +$h_surplus_med = hash\new(); +$h_saldi_med = hash\new(); +$h_verr_med = hash\new(); + +$h_surplus_hom = hash\new(); +$h_saldi_hom = hash\new(); +$h_verr_hom = hash\new(); + +$na_n = array\length($na_rows); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Sla alle saldi op +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +log('warning', 'Alle saldi opslaan'); + +$na_i = 0; +while($na_i < $na_n, + $na_row = array\at($na_rows, $na_i); + $na_id = hash\get($na_row, 'id'); + + $na_saldo = hash\get($na_row, 'dagenSaldo'); + $h_saldi = hash\set($h_saldi, $na_id, $na_saldo); + $h_verr = hash\set($h_verr, $na_id, ''); + + $na_saldo_med = hash\get($na_row, 'medischSaldo'); + $h_saldi_med = hash\set($h_saldi_med, $na_id, $na_saldo_med); + $h_verr_med = hash\set($h_verr_med, $na_id, ''); + + $na_saldo_hom = hash\get($na_row, 'homeopathieSaldo'); + $h_saldi_hom = hash\set($h_saldi_hom, $na_id, $na_saldo_hom); + $h_verr_hom = hash\set($h_verr_hom, $na_id, ''); + + $na_i = $na_i + 1; +); + +log('warning', 'Oke, klaar'); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Pas de eenvoudige doorschuif methode toe t/m het gegeven jaar voor methode 1 +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$na_jaar_max = -1; +$na_i = 0; +$na_surplus = 0; +while($na_i < $na_n && hash\get(array\at($na_rows, $na_i), 'jaar') <= $na_methode_1_max_jaar, + + $na_row = array\at($na_rows, $na_i); + $na_id = hash\get($na_row, 'id'); + + $na_jaar = hash\get($na_row, 'jaar'); + ifThen($na_jaar > $na_jaar_max, $na_jaar_max = $na_jaar); + + $na_verr = hash\get($h_verr, $na_id); + + $na_saldo = hash\get($na_row, 'dagenSaldo'); + $na_start_surplus = hash\get($na_row, 'startSurplus'); + $na_saldo_med = hash\get($na_row, 'medischSaldo'); + $na_saldo_hom = hash\get($na_row, 'homeopathieSaldo'); + $na_examenjaar = hash\get($na_row, 'examenjaar'); + + $na_dg_totaal = hash\get($na_row, 'dagenTotaal'); + $na_dg_med = hash\get($na_row, 'dagenMedisch'); + $na_dg_hom = hash\get($na_row, 'dagenHomeopathie'); + + strAdd($na_verr, "[TDagen gevolgd:][N", number\format($na_dg_totaal, 1), "]%%"); + + $na_norm_med = hash\get($na_row, 'medischFormeleNorm'); + + $na_norm_tot = hash\get($na_row, 'dagenFormeleNorm'); + strAdd($na_verr, "[TNorm:][N", number\format($na_norm_tot, 1), "]%%"); + ifThen($na_examenjaar, + strAdd($na_verr, "[RIn het examenjaar of daarvoor hoeft niet nageschoold te worden.R]%%"); + ); + + $na_surplus_gemaximeerd = false; + $na_surplus_old = $na_surplus; + $na_surplus = $na_surplus + $na_saldo; + ifThen($na_surplus > $na_methode_1_max_surplus, $na_surplus = $na_methode_1_max_surplus; $na_surplus_gemaximeerd = true); + + $na_surplus_med = $na_saldo_med; + $na_surplus_hom = $na_saldo_hom; + + strAdd($na_verr, "[TSaldo dagen:][N", number\format($na_saldo, 1), "]%%"); + + ifThenElse($na_start_surplus != 0.0, + strAdd($na_verr, "[TResterend Saldo dagen uit voorgaande jaren:][N", number\format($na_start_surplus, 1), "]%%"); + , + strAdd($na_verr, "[TResterend Saldo dagen van ", $na_jaar - 1, ":][N", number\format($na_surplus_old , 1), "]%%"); + ); + + ifThen($na_surplus >= 0, + ifThen($na_surplus_gemaximeerd, + strAdd($na_verr, "[TResterend saldo dagen gemaximaliseerd op:][N", number\format($na_surplus, 1), "]%%"); + ); + ); + + $h_verr = Hash\Set($h_verr, $na_id, $na_verr); + + /*ifThenElse($na_norm_med > 0, + $na_verr = hash\get($h_verr_med, $na_id); + strAdd($na_verr, '[TDagen gevolgd:][N', number\format($na_dg_med, 1), ']%%'); + strAdd($na_verr, '[TNorm:][N', number\format($na_norm_med, 1), ']%%'); + strAdd($na_verr, '[TSaldo dagen:][N', number\format($na_saldo_med, 1), ']%%'); + $h_verr_med = Hash\Set($h_verr_med, $na_id, $na_verr); + , + $h_verr_med = Hash\Set($h_verr_med, $na_id, ''); + );*/ + + $h_verr_hom = Hash\Set($h_verr_hom, $na_id, ''); + $h_surplus = Hash\Set($h_surplus, $na_id, $na_surplus); + $h_surplus_med = Hash\Set($h_surplus_med, $na_id, $na_saldo_med); + $h_surplus_hom = Hash\Set($h_surplus_hom, $na_id, $na_saldo_hom); + + log('warning', 'jaar=', $na_jaar, ', saldo=', $na_saldo, ', surplus=', $na_surplus); + + $na_i = $na_i + 1; +); + +log('warning', 'Door:', $na_i); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Nu wordt het moeilijker. Vanaf dit jaar moeten de drie saldi samen >= 0 zijn voor ieder opeenvolgend stel. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$na_ii = $na_i; + +while($na_i < $na_n, + $na_row = array\at($na_rows, $na_i); + $na_id = hash\get($na_row, 'id'); + $na_jaar = hash\get($na_row, 'jaar'); + + // Normen bepalen + $na_norm_hom = hash\get($na_row, 'homeopathieFormeleNorm'); + $na_norm_med = hash\get($na_row, 'medischFormeleNorm'); + $na_norm_tot = hash\get($na_row, 'dagenFormeleNorm'); + $na_examenjaar = hash\get($na_row, 'examenjaar'); + + // Gevolgde dagen bepalen + $na_dg_werkgroep = hash\get($na_row, 'dagenWerkgroep'); + $na_dg_vrij = hash\get($na_row, 'dagenVrijstelling'); + $na_dg_totaal = hash\get($na_row, 'dagenTotaal'); + $na_dg_hom = hash\get($na_row, 'dagenHomeopathie'); + $na_dg_med = hash\get($na_row, 'dagenMedisch'); + $na_dg_ovg = hash\get($na_row, 'dagen'); + + log('warning', 'na_jaar = ', $na_jaar, ' - na_dg_totaal = ', $na_dg_totaal); + + $na_verr = hash\get($h_verr_hom, $na_id); + $saldo = hash\get($h_saldi_hom, $na_id); + + strAdd($na_verr, "[TDagen gevolgd:][N", number\format($na_dg_hom, 1), "]%%"); + strAdd($na_verr, "[TNorm:][N", number\format($na_norm_hom, 1), "]%%"); + ifThen($na_examenjaar, + strAdd($na_verr, "[RIn het examenjaar of daarvoor hoeft niet nageschoold te worden.R]%%"); + ); + strAdd($na_verr, "[TSaldo dagen:][N", number\format($saldo, 1), "]%%"); + + $h_verr_hom = hash\set($h_verr_hom, $na_id, $na_verr); + + $na_verr = hash\get($h_verr_med, $na_id); + $saldo = hash\get($h_saldi_med, $na_id); + + strAdd($na_verr, "[TDagen gevolgd:][N", number\format($na_dg_med, 1), "]%%"); + strAdd($na_verr, "[TNorm:][N", number\format($na_norm_med, 1), "]%%"); + ifThen($na_examenjaar, + strAdd($na_verr, "[RIn het examenjaar of daarvoor hoeft niet nageschoold te worden.R]%%"); + ); + strAdd($na_verr, "[TSaldo dagen:][N", number\format($saldo, 1), "]%%"); + + $h_verr_med = hash\set($h_verr_med, $na_id, $na_verr); + + $na_verr = hash\get($h_verr, $na_id); + $saldo = hash\get($h_saldi, $na_id); + + strAdd($na_verr, "[TDagen gevolgd:][N", number\format($na_dg_totaal, 1), "]%%"); + + strAdd($na_verr, "[IDagen voor klassieke homeopathie:I][NI", number\format($na_dg_hom, 1), "]%%"); + strAdd($na_verr, "[IDagen voor medisch:I][NI", number\format($na_dg_med, 1), "]%%"); + strAdd($na_verr, "[IDagen voor homeopathie overig:I][NI", number\format($na_dg_ovg, 1), "]%%"); + strAdd($na_verr, "[IDagen voor werkgroep deelname:I][NI", number\format($na_dg_werkgroep, 1), "]%%"); + ifThen($na_dg_vrij > 0, + strAdd($na_verr, "[TDagen vrijstelling:][N", number\format($na_dg_vrij, 1), "]%%"); + ); + strAdd($na_verr, "[TNorm:][N", number\format($na_norm_tot, 1), "]%%"); + ifThen($na_examenjaar, + strAdd($na_verr, "[RIn het examenjaar of daarvoor hoeft niet nageschoold te worden.R]%%"); + ); + strAdd($na_verr, "[TSaldo dagen:][N", number\format($saldo, 1), "]%%"); + + $h_verr = hash\set($h_verr, $na_id, $na_verr); + + // En de volgende rij + $na_i = $na_i + 1; +); + +$na_i = $na_ii; +while($na_i < $na_n, + + $na_row_prev = null; + ifThen($na_i > 0, $na_row_prev = array\at($na_rows, $na_i - 1);$na_id_prev = hash\get($na_row_prev, 'id');); + $na_row_next = null; + ifThen($na_i < ($na_n - 1), $na_row_next = array\at($na_rows, $na_i + 1);$na_id_next = hash\get($na_row_next, 'id');); + + $na_row = array\at($na_rows, $na_i); + $na_id = hash\get($na_row, 'id'); + $na_jaar = hash\get($na_row, 'jaar'); + ifThen($na_jaar > $na_jaar_max, $na_jaar_max = $na_jaar); + + // Normen bepalen + $na_norm_hom = hash\get($na_row, 'homeopathieFormeleNorm'); + $na_norm_med = hash\get($na_row, 'medischFormeleNorm'); + $na_norm_tot = hash\get($na_row, 'dagenFormeleNorm'); + $na_examenjaar = hash\get($na_row, 'examenjaar'); + + // Gevolgde dagen bepalen + $na_dg_werkgroep = hash\get($na_row, 'dagenWerkgroep'); + $na_dg_vrij = hash\get($na_row, 'dagenVrijstelling'); + $na_dg_totaal = hash\get($na_row, 'dagenTotaal'); + $na_dg_hom = hash\get($na_row, 'dagenHomeopathie'); + $na_dg_med = hash\get($na_row, 'dagenMedisch'); + $na_dg_ovg = hash\get($na_row, 'dagen'); + + // Check of je het voorgaande surplus en evt. het opvolgende saldo kunt gebruiken om + // te compenseren op het huidige saldo, indien dat noodzakelijk is. + // Als het huidige saldo negatief is, moet dit worden gecompenseerd vanuit het voorgaande surplus en/of het opvolgende saldo. + // Als je het negatieve saldo van medisch of van klassieke homeopathie ophoogt, dan + // hoog je daarmee ook het totaal aantal dagen op. Dus die correctie moet je dan ook bij het totaal toepassen. + + // Let op. Het aantal dagen dat wordt gecompenseerd mag niet het totaal aantal dagen van de norm overschrijden. + // Dus, als het totaal aantal dagen 5 is en de norm is 4, dan kan ik maximaal 1 dag compenseren, ook al heb ik misschien + // van zowel medisch als homeopathie 1 dag over, dus in totaal 2 dagen. + + $na_totaal_extra = 0; + + // Eerst berekenen we de klassieke homeopathie. + // $h_saldi_hom, $h_surplus_hom, $h_verr_hom + + log('warning', 'Berekenen Klassieke Homeopathie:'); + ifThenElse($na_row_prev, + $prev_surplus = hash\get($h_surplus_hom, $na_id_prev); + $prev_surplus_tot = hash\get($h_surplus, $na_id_prev); + , + $prev_surplus = 0; + $prev_surplus_tot = 0; + ); + ifThenElse($na_row_next, + $next_saldo = hash\get($h_saldi_hom, $na_id_next); + $next_saldo_tot = hash\get($h_saldi, $na_id_next); + , + $next_saldo = 0; + $next_saldo_tot = 0; + ); + $saldo = hash\get($h_saldi_hom, $na_id); + $na_verr = hash\get($h_verr_hom, $na_id); + + $na_surplus = $saldo; + + // Kijk of je gebruik kunt maken van het surplus van het voorgaande jaar, tot maximaal de norm. + ifThenElse($prev_surplus > 0 && $prev_surplus_tot > 0, + $na_verr_a = hash\get($h_verr_hom, $na_id_prev); + $na_verr_t = hash\get($h_verr, $na_id_prev); + $na_verr_tot = hash\get($h_verr, $na_id); + + ifThenElse($prev_surplus > $prev_surplus_tot, + $max_compensatie = $prev_surplus_tot; + $na_uitleg_extra = " (totaal < kl. homeopathie)"; + , + $max_compensatie = $prev_surplus; + $na_uitleg_extra = ""; + ); + $na_uitleg = string\concatenate("Aantal dagen surplus kl. homeopathie overgenomen uit ", toString($na_jaar - 1)); + $na_uitleg_a = string\concatenate("Aantal dagen surplus kl. homeopathie doorgeschoven naar ", toString($na_jaar)); + strAdd($na_uitleg, $na_uitleg_extra); + strAdd($na_uitleg_a, $na_uitleg_extra); + + ifThen($max_compensatie > $na_norm_hom, + $max_compensatie = $na_norm_hom; + $na_norm_uitl = string\concatenate(", gemaximaliseerd op de norm van ", number\format($na_norm_hom, 1)); + strAdd($na_uitleg, $na_norm_uitl); + strAdd($na_uitleg_a, $na_norm_uitl); + ); + + strAdd($na_verr, "[I", $na_uitleg, ":I][NI", number\format($max_compensatie, 1), "]%%"); + strAdd($na_verr_tot, "[I", $na_uitleg, ":I][NI", number\format($max_compensatie, 1), "]%%"); + strAdd($na_verr_a, "[I", $na_uitleg_a, ":I][NI", number\format($max_compensatie, 1), "]%%"); + strAdd($na_verr_t, "[I", $na_uitleg_a, ":I][NI", number\format($max_compensatie, 1), "]%%"); + + $prev_surplus = $prev_surplus - $max_compensatie; + $prev_surplus_tot = $prev_surplus_tot - $max_compensatie; + $na_surplus = $na_surplus + $max_compensatie; + $na_totaal_extra = $na_totaal_extra + $max_compensatie; + + $h_verr_hom = hash\set($h_verr_hom, $na_id_prev, $na_verr_a); + $h_verr = hash\set($h_verr, $na_id_prev, $na_verr_t); + $h_verr = hash\set($h_verr, $na_id, $na_verr_tot); + , + ifThen($prev_surplus > 0, + strAdd($na_verr, "[EHoewel het saldo kl. homeopathie dagen in ", toString($na_jaar - 1), " toereikend is", + ", kan er niet doogeschoven worden, omdat het totaal saldo van ", toString($na_jaar - 1), " <= 0 isE]%%"); + ); + ); + + ifThenElse($na_surplus < 0, + // Als het surplus daarna nog < 0 is (een tekort), kijk dan of je kunt gebruik maken van het saldo van opvolgend jaar. + $na_verr_a = hash\get($h_verr_hom, $na_id_next); + $na_verr_t = hash\get($h_verr, $na_id_next); + // Het huidig surplus klassieke homeopathie voldoet niet. + // Als er nu een huidig totaal surplus is, en het saldo klassieke homeopathie van het opvolgende jaar + // is voldoende en het totaal saldo van het opvolgende jaar + het totaal surplus van het huidige jaar is voldoende + // dan kan er nog wat. + + ifThenElse($next_saldo > ($next_saldo_tot + $na_totaal_extra), + $max_compensatie = ($next_saldo_tot + $na_totaal_extra), + $max_compensatie = $next_saldo + ); + + ifThen($max_compensatie > 0, + ifThenElse(($max_compensatie + $na_surplus) >= 0, + strAdd($na_verr_a, "[IAantal dagen gebruikt om ", toString($na_jaar), " te compenseren:I][NI", number\format(-1 * $na_surplus, 1), "]%%"); + strAdd($na_verr_t, "[IAantal dagen gebruikt om voor ", toString($na_jaar), " klassieke homeopathie te compenseren:I][NI", number\format(-1 * $na_surplus, 1), "]%%"); + strAdd($na_verr, "[IGecompenseerd met aantal dagen uit ", toString($na_jaar + 1), ":I][NI", number\format(-1 * $na_surplus, 1), "]%%"); + $next_saldo = $next_saldo + $na_surplus; + $next_saldo_tot = $next_saldo_tot + $na_surplus; + $na_surplus = 0; + , + strAdd($na_verr_a, "[IAantal dagen gebruikt om ", toString($na_jaar), " te compenseren:I][NI", number\format($max_compensatie, 1), "]%%"); + strAdd($na_verr_t, "[IAantal dagen gebruikt om voor ", toString($na_jaar), " klassieke homeopathie te compenseren:I][NI", number\format($max_compensatie, 1), "]%%"); + strAdd($na_verr, "[IGecompenseerd met aantal dagen uit ", toString($na_jaar + 1), ":I][NI", number\format($max_compensatie, 1), "]%%"); + $na_surplus = $na_surplus + $max_compensatie; + $next_saldo = $next_saldo - $max_compensatie; + $next_saldo_tot = $next_saldo_tot - $max_compensatie; + ); + , + ifThen($next_saldo > ($next_saldo_tot + $na_totaal_extra) && $next_saldo > 0, + strAdd($na_verr, "[EHoewel het saldo kl. homeopathie dagen in ", toString($na_jaar + 1), " toereikend is", + ", kan er niet gecompenseerd worden, omdat het totaal saldo van ", toString($na_jaar + 1), " <= 0 isE]%%"); + ); + ); + $h_verr_hom = hash\set($h_verr_hom, $na_id_next, $na_verr_a); + $h_verr = hash\set($h_verr, $na_id_next, $na_verr_t); + ); + + // Nu de saldi opslaan en surplus opslaan + ifThen($na_row_prev, + $h_surplus_hom = hash\set($h_surplus_hom, $na_id_prev, $prev_surplus); + $h_surplus = hash\set($h_surplus, $na_id_prev, $prev_surplus_tot); + ); + ifThen($na_row_next, + $h_saldi_hom = hash\set($h_saldi_hom, $na_id_next, $next_saldo); + $h_saldi = hash\set($h_saldi, $na_id_next, $next_saldo_tot); + ); + $h_surplus_hom = Hash\Set($h_surplus_hom, $na_id, $na_surplus); + $h_verr_hom = Hash\Set($h_verr_hom, $na_id, $na_verr); + $na_end_hom = $na_surplus; + + // Daarna berekenen we het medische gedeelte + // $h_saldi_med, $h_surplus_med, $h_verr_med + + log('warning', 'Berekenen Medische Dagen:'); + ifThenElse($na_row_prev, + $prev_surplus = hash\get($h_surplus_med, $na_id_prev); + $prev_surplus_tot = hash\get($h_surplus, $na_id_prev); + , + $prev_surplus = 0; + $prev_surplus_tot = 0; + ); + ifThenElse($na_row_next, + $next_saldo = hash\get($h_saldi_med, $na_id_next); + $next_saldo_tot = hash\get($h_saldi, $na_id_next); + , + $next_saldo = 0; + $next_saldo_tot = 0; + ); + $saldo = hash\get($h_saldi_med, $na_id); + $na_verr = hash\get($h_verr_med, $na_id); + + $na_surplus = $saldo; + log('warning', 'jaar = ', $na_jaar, ' - surplus medisch = ', $na_surplus); + + // Kijk of je gebruik kunt maken van het surplus van het voorgaande jaar, tot maximaal de norm. + ifThenElse($prev_surplus > 0 && $prev_surplus_tot > 0, + $na_verr_a = hash\get($h_verr_med, $na_id_prev); + $na_verr_t = hash\get($h_verr, $na_id_prev); + $na_verr_tot = hash\get($h_verr, $na_id); + + ifThenElse($prev_surplus > $prev_surplus_tot, + $max_compensatie = $prev_surplus_tot; + $na_uitleg_extra = " (totaal < medisch)"; + , + $max_compensatie = $prev_surplus; + $na_uitleg_extra = ""; + ); + $na_uitleg = string\concatenate("Aantal dagen surplus medisch overgenomen uit ", toString($na_jaar - 1)); + $na_uitleg_a = string\concatenate("Aantal dagen surplus medisch doorgeschoven naar ", toString($na_jaar)); + strAdd($na_uitleg, $na_uitleg_extra); + strAdd($na_uitleg_a, $na_uitleg_extra); + + ifThen($max_compensatie > $na_norm_med, + $max_compensatie = $na_norm_med; + $na_norm_uitl = string\concatenate(", gemaximaliseerd op de norm van ", number\format($na_norm_med, 1)); + strAdd($na_uitleg, $na_norm_uitl); + strAdd($na_uitleg_a, $na_norm_uitl); + ); + + strAdd($na_verr, "[I", $na_uitleg, ":I][NI", number\format($max_compensatie, 1), "]%%"); + strAdd($na_verr_tot, "[I", $na_uitleg, ":I][NI", number\format($max_compensatie, 1), "]%%"); + strAdd($na_verr_a, "[I", $na_uitleg_a, ":I][NI", number\format($max_compensatie, 1), "]%%"); + strAdd($na_verr_t, "[I", $na_uitleg_a, ":I][NI", number\format($max_compensatie, 1), "]%%"); + + $prev_surplus = $prev_surplus - $max_compensatie; + $prev_surplus_tot = $prev_surplus_tot - $max_compensatie; + $na_surplus = $na_surplus + $max_compensatie; + $na_totaal_extra = $na_totaal_extra + $max_compensatie; + + $h_verr_med = hash\set($h_verr_med, $na_id_prev, $na_verr_a); + $h_verr = hash\set($h_verr, $na_id_prev, $na_verr_t); + $h_verr = hash\set($h_verr, $na_id, $na_verr_tot); + , + ifThen($prev_surplus > 0, + strAdd($na_verr, "[EHoewel het saldo medisch dagen in ", toString($na_jaar - 1), " toereikend is", + ", kan er niet doorgeschoven worden, omdat het totaal saldo van ", toString($na_jaar - 1), " <= 0 isE]%%"); + ); + ); + + + ifThen($na_surplus < 0, + // Als het surplus daarna nog < 0 is (een tekort), kijk dan of je kunt gebruik maken van het saldo van opvolgend jaar. + $na_verr_a = hash\get($h_verr_med, $na_id_next); + $na_verr_t = hash\get($h_verr, $na_id_next); + + ifThenElse($next_saldo > ($next_saldo_tot + $na_totaal_extra), + $max_compensatie = ($next_saldo_tot + $na_totaal_extra), + $max_compensatie = $next_saldo + ); + + strAdd($na_verr, "[Enext-saldo = ", $next_saldo, ", next-saldo-tot = ", $next_saldo_tot, ", max-compensatie = ", $max_compensatie, "E]%%"); + strAdd($na_verr, "[Ena_totaal_extra = ", $na_totaal_extra, "E]%%"); + + ifThenElse($max_compensatie > 0, + ifThenElse(($max_compensatie + $na_surplus) >= 0, + strAdd($na_verr_a, "[IAantal dagen gebruikt om ", toString($na_jaar), " te compenseren:I][NI", number\format(-1 * $na_surplus, 1), "]%%"); + strAdd($na_verr_t, "[IAantal dagen gebruikt om voor ", toString($na_jaar), " medisch te compenseren:I][NI", number\format(-1 * $na_surplus, 1), "]%%"); + strAdd($na_verr, "[IGecompenseerd met aantal dagen uit ", toString($na_jaar + 1), ":I][NI", number\format(-1 * $na_surplus, 1), "]%%"); + $next_saldo = $next_saldo + $na_surplus; + $next_saldo_tot = $next_saldo_tot + $na_surplus; + $na_surplus = 0; + , + strAdd($na_verr_a, "[IAantal dagen gebruikt om ", toString($na_jaar), " te compenseren:I][NI", number\format($max_compensatie, 1), "]%%"); + strAdd($na_verr_t, "[IAantal dagen gebruikt om voor ", toString($na_jaar), " medisch te compenseren:I][NI", number\format($max_compensatie, 1), "]%%"); + strAdd($na_verr, "[IGecompenseerd met aantal dagen uit ", toString($na_jaar + 1), ":I][NI", number\format($max_compensatie, 1), "]%%"); + $na_surplus = $na_surplus + $max_compensatie; + $next_saldo = $next_saldo - $max_compensatie; + $next_saldo_tot = $next_saldo_tot - $max_compensatie; + ); + , + ifThen($next_saldo > ($next_saldo_tot + $na_totaal_extra) && $next_saldo > 0, + strAdd($na_verr, "[EHoewel het saldo medische dagen in ", toString($na_jaar + 1), " toereikend is", + ", kan er niet gecompenseerd worden, omdat het totaal saldo van ", toString($na_jaar + 1), " <= 0 isE]%%"); + ); + ); + $h_verr_med = hash\set($h_verr_med, $na_id_next, $na_verr_a); + $h_verr = hash\set($h_verr, $na_id_next, $na_verr_t); + ); + + // Nu de saldi opslaan en surplus opslaan + ifThen($na_row_prev, + $h_surplus_med = hash\set($h_surplus_med, $na_id_prev, $prev_surplus); + $h_surplus = hash\set($h_surplus, $na_id_prev, $prev_surplus_tot); + ); + ifThen($na_row_next, + $h_saldi_med = hash\set($h_saldi_med, $na_id_next, $next_saldo); + $h_saldi = hash\set($h_saldi, $na_id_next, $next_saldo_tot); + ); + + log('warning', 'jaar = ', $na_jaar, ' - surplus medisch berekend = ', $na_surplus); + + $h_surplus_med = Hash\Set($h_surplus_med, $na_id, $na_surplus); + $h_verr_med = Hash\Set($h_verr_med, $na_id, $na_verr); + $na_end_med = $na_surplus; + + // En nu berekenen we het totaal. Dat is en blijft een lastige + // $h_saldi, $h_surplus, $h_verr + + log('warning', 'Berekenen Totaal Dagen:'); + ifThenElse($na_row_prev, $prev_surplus = hash\get($h_surplus, hash\get($na_row_prev, 'id')), $prev_surplus = 0); + ifThenElse($na_row_next, $next_saldo = hash\get($h_saldi, hash\get($na_row_next, 'id')), $next_saldo = 0); + $saldo = hash\get($h_saldi, $na_id); + $na_verr = hash\get($h_verr, $na_id); + + $na_surplus = $saldo; + + // Kijk of je gebruik kunt maken van het surplus van het voorgaande jaar, tot maximaal de norm. + ifThen($prev_surplus > 0, + $na_verr_a = hash\get($h_verr, $na_id_prev); + + $max_compensatie = $prev_surplus; + $na_uitleg = string\concatenate("Aantal aantal dagen surplus overgenomen uit ", toString($na_jaar - 1)); + $na_uitleg_a = string\concatenate("Aantal dagen surplus doorgeschoven naar ", toString($na_jaar)); + + ifThen(($na_totaal_extra + $max_compensatie) > $na_norm_tot, + $max_compensatie = $na_norm_tot - $na_totaal_extra; + ifThenElse($na_totaal_extra > 0, + $norm_uitleg = string\concatenate(", incl. kl. hom. en medisch gemaximaliseerd op de norm van ", number\format($na_norm_tot, 1)); + , + $norm_uitleg = string\concatenate(", gemaximaliseerd op de norm van ", number\format($na_norm_tot, 1)); + ); + + strAdd($na_uitleg, $norm_uitleg); + strAdd($na_uitleg_a, $norm_uitleg); + ); + + strAdd($na_verr, "[I", $na_uitleg, ":I][NI", number\format($max_compensatie, 1), "]%%"); + strAdd($na_verr_a, "[I", $na_uitleg_a, ":I][NI", number\format($max_compensatie, 1), "]%%"); + + $prev_surplus = $prev_surplus - $max_compensatie; + $na_surplus = $na_surplus + $max_compensatie + $na_totaal_extra; + + $h_verr = hash\set($h_verr, $na_id_prev, $na_verr_a); + ); + + ifThen($na_surplus < 0, + // Als het surplus daarna nog < 0 is (een tekort), kijk dan of je kunt gebruik maken van het saldo van opvolgend jaar. + $na_verr_a = hash\get($h_verr, $na_id_next); + ifThen($next_saldo > 0, + ifThenElse(($next_saldo + $na_surplus) >= 0, + strAdd($na_verr_a, "[IAantal dagen gebruikt om ", toString($na_jaar), " te compenseren:I][NI", number\format(-1 * $na_surplus, 1), "]%%"); + strAdd($na_verr, "[IGecompenseerd met aantal dagen uit ", toString($na_jaar + 1), ":I][NI", number\format(-1 * $na_surplus, 1), "]%%"); + $next_saldo = $next_saldo + $na_surplus; + $na_surplus = 0; + , + strAdd($na_verr_a, "[IAantal dagen gebruikt om ", toString($na_jaar), " te compenseren:I][NI", number\format($next_saldo, 1), "]%%"); + strAdd($na_verr, "[IGecompenseerd met aantal dagen uit ", toString($na_jaar + 1), ":I][NI", number\format($next_saldo, 1), "]%%"); + $na_surplus = $na_surplus + $next_saldo; + $next_saldo = 0; + ); + ); + $h_verr = hash\set($h_verr, $na_id_next, $na_verr_a); + ); + + // Nu de saldi opslaan en surplus opslaan + ifThen($na_row_prev, $h_surplus = hash\set($h_surplus, $na_id_prev, $prev_surplus)); + ifThen($na_row_next, $h_saldi = hash\set($h_saldi, $na_id_next, $next_saldo)); + + $h_surplus = Hash\Set($h_surplus, $na_id, $na_surplus); + $h_verr = Hash\Set($h_verr, $na_id, $na_verr); + + // En de volgende rij + $na_i = $na_i + 1; +); + +// Het resterend saldo moet je voor alle jaren berekenen. +$na_i = 0; +while($na_i < $na_n, + $na_row = array\at($na_rows, $na_i); + $na_id = hash\get($na_row, 'id'); + $na_jaar = hash\get($na_row, 'jaar'); + + // Normen bepalen + $na_norm_hom = hash\get($na_row, 'homeopathieFormeleNorm'); + $na_norm_med = hash\get($na_row, 'medischFormeleNorm'); + $na_norm_tot = hash\get($na_row, 'dagenFormeleNorm'); + $na_examenjaar = hash\get($na_row, 'examenjaar'); + + // Surplus bepalen + $na_surplus_hom = hash\get($h_surplus_hom, $na_id); + $na_surplus_med = hash\get($h_surplus_med, $na_id); + $na_surplus = hash\get($h_surplus, $na_id); + ifThenElse($na_jaar > $na_methode_1_max_jaar, + $na_end_med = $na_surplus_med; + $na_end_hom = $na_surplus_hom; + , + $na_end_med = 0; + $na_end_hom = 0; + ); + + // Resultaten uitvoeren + $na_verr = hash\get($h_verr_hom, $na_id); + + ifThen($na_jaar > $na_methode_1_max_jaar, + // Homeopathie + ifThen($na_norm_hom > 0, + ifThen($na_surplus_hom < 0, + ifThenElse($na_jaar == $na_jaar_max, + strAdd($na_verr, "[EHet tekort kan niet (volledig) worden gecompenseerd met ", toString($na_jaar - 1), "E]%%"); + , + strAdd($na_verr, "[EHet tekort kan niet (volledig) worden gecompenseerd met ", toString($na_jaar - 1), " en/of ", toString($na_jaar + 1), "E]%%"); + ); + ); + strAdd($na_verr, "[TResterend saldo dagen:][N", number\format($na_surplus_hom, 1), "]%%"); + + ifThenElse($na_surplus_hom < 0, + $na_verr = string\concatenate("[OKlassieke Homeopathie onvoldoendeO]%%", $na_verr); + , + $na_verr = string\concatenate("[VKlassieke Homeopathie voldoendeV]%%", $na_verr); + ); + + $h_verr_hom = Hash\Set($h_verr_hom, $na_id, $na_verr); + ); + + // Medisch + ifThen($na_norm_med > 0, + $na_verr = hash\get($h_verr_med, $na_id); + + ifThen($na_surplus_med < 0, + ifThenElse($na_jaar == $na_jaar_max, + strAdd($na_verr, "[EHet tekort kan niet (volledig) worden gecompenseerd met ", toString($na_jaar - 1), "E]%%"); + , + strAdd($na_verr, "[EHet tekort kan niet (volledig) worden gecompenseerd met ", toString($na_jaar - 1), " en/of ", toString($na_jaar + 1), "E]%%"); + ); + ); + strAdd($na_verr, "[TResterend saldo dagen:][N", number\format($na_surplus_med, 1), "]%%"); + + ifThenElse($na_surplus_med < 0, + $na_verr = string\concatenate("[OMedisch onvoldoendeO]%%", $na_verr); + , + $na_verr = string\concatenate("[VMedisch voldoendeV]%%", $na_verr); + ); + + $h_verr_med = Hash\Set($h_verr_med, $na_id, $na_verr); + ); + ); + + // Totalen + $na_verr = hash\get($h_verr, $na_id); + + ifThen($na_surplus < 0, + ifThenElse($na_jaar == $na_jaar_max, + strAdd($na_verr, "[EHet tekort kan niet (volledig) worden gecompenseerd met ", toString($na_jaar - 1), "E]%%"); + , + strAdd($na_verr, "[EHet tekort kan niet (volledig) worden gecompenseerd met ", toString($na_jaar - 1), " en/of ", toString($na_jaar + 1), "E]%%"); + ); + ); + strAdd($na_verr, "[TResterend saldo dagen:][N", number\format($na_surplus, 1), "]%%"); + + ifThenElse($na_surplus < 0 || $na_end_med < 0 || $na_end_hom < 0, + $na_verr = string\concatenate("[OTotaal onvoldoendeO]%%", $na_verr); + ifThen($na_surplus >= 0.0, + ifThen($na_end_hom < 0 , + strAdd($na_verr, "[WAantal dagen resterend tekort Klassieke Homeopathie:W][N", number\format(-1 * $na_end_hom, 1), "]%%"); + ); + ifThen($na_end_med < 0, + strAdd($na_verr, "[WAantal dagen resterend tekort Medisch:W][N", number\format(-1 * $na_end_med, 1), "]%%"); + ); + ); + , + $na_verr = string\concatenate("[VTotaal voldoendeV]%%", $na_verr); + ); + + $h_verr = Hash\Set($h_verr, $na_id, $na_verr); + + // En de volgende rij + $na_i = $na_i + 1; +); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// En nu slaan we de boel gewoon op in de nascholingstotalen. Nou, was dat nou moeilijk? +// En bepaal en passent ook even de bijbehorende rapportage voor +// - Dashboard +// - Tekst +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$na_i = 0; +$na_jaar_voorlopig = $na_jaar_max - 2; + +while($na_i < $na_n, + $na_row = array\at($na_rows, $na_i); + + $na_id = hash\get($na_row, 'id'); + $na_jaar = hash\get($na_row, 'jaar'); + + // Normen bepalen + $na_norm_hom = hash\get($na_row, 'homeopathieFormeleNorm'); + $na_norm_med = hash\get($na_row, 'medischFormeleNorm'); + $na_norm_tot = hash\get($na_row, 'dagenFormeleNorm'); + $na_examenjaar = hash\get($na_row, 'examenjaar'); + + // Ophalen surplus waardes voor nascholingstotaal + $na_surplus = hash\get($h_surplus, $na_id); + $na_surplus_med = hash\get($h_surplus_med, $na_id); + $na_surplus_hom = hash\get($h_surplus_hom, $na_id); + + // Ophalen totalen + $na_dg_hom = hash\get($na_row, 'dagenHomeopathie'); + $na_dg_med = hash\get($na_row, 'dagenMedisch'); + $na_dg_ovg = hash\get($na_row, 'dagen'); + $na_dg_werkgroep = hash\get($na_row, 'dagenWerkgroep'); + $na_dg_vrij = hash\get($na_row, 'dagenVrijstelling'); + $na_saldo = hash\get($na_row, 'dagenSaldo'); + $na_hand = hash\get($na_row, 'handmatig'); + + // Berekenen dashboard waarde op basis van de surplus waardes + $na_dashboard = ""; + $na_onvoldoende = false; + + $na_script = string\concatenate( + '$na_surpl_k = toInt($na_surpl * 1000);', + '$na_surpl_i = toInt($na_surpl) * 1000;', + 'ifThenElse($na_surpl_k == $na_surpl_i, $na_surpl_pos = 0, $na_surpl_pos = 1);', + 'ifThenElse($na_surpl_i == 1000, $na_dg = "dag", $na_dg = "dagen");', + 'ifThenElse($na_surpl >= 0, $na_surpl_f = number\format($na_surpl, $na_surpl_pos), $na_surpl_f = number\format(-1 * $na_surpl, $na_surpl_pos));', + 'ifThenElse($na_surpl >= 0, ', + ' ifThenElse($na_onvoldoende, ', + ' $na_dashb = string\concatenate($na_surpl_lbl, " onvoldoende");', + ' $na_class = "tekort";', + ' ,', + ' ifThenElse($na_surpl_i == 0, ', + ' $na_dashb = string\concatenate($na_surpl_lbl, " voldoende");', + ' ,', + ' $na_dashb = string\concatenate($na_surpl_lbl, " surplus: ", $na_surpl_f, " ", $na_dg);', + ' );', + ' $na_class = "goed";', + ' );', + ',', + ' $na_dashb = string\concatenate($na_surpl_lbl, " tekort: ", $na_surpl_f, " ", $na_dg);', + ' $na_class = "tekort";', + ');', + ); + + //log('warning', 'na_jaar_voorlopig = ', $na_jaar_voorlopig, ', na_jaar = ', $na_jaar); + + ifThenElse($na_jaar > $na_jaar_voorlopig, + $na_bepaald = string\concatenate('Voorlopig resultaat'); + $na_bep_rep = string\concatenate('Voorlopig resultaat'); + , + $na_bepaald = string\concatenate('Definitief resultaat'); + $na_bep_rep = string\concatenate('Definitief resultaat'); + ); + + $na_surpl = $na_surplus_hom; + $na_surpl_lbl = "Kl. Homeopathie"; + Exec($na_script); + ifThenElse($na_jaar <= $na_methode_1_max_jaar, + $na_dashb_hom = string\concatenate('', $na_dashb, ''); + , + ifThenElse($na_class == 'goed', $na_style = $na_style_nstd_goed, $na_style = $na_style_nstd_tekort); + $na_dashb_hom = string\concatenate('', $na_dashb, ''); + ); + $na_dashboard = string\concatenate($na_dashboard, $na_dashb_hom); + + $na_surpl = $na_surplus_med; + $na_surpl_lbl = "Medisch"; + Exec($na_script); + ifThenElse($na_jaar <= $na_methode_1_max_jaar, + $na_dashb_med = string\concatenate('', $na_dashb, ''); + , + ifThenElse($na_class == 'goed', $na_style = $na_style_nstd_goed, $na_style = $na_style_nstd_tekort); + $na_dashb_med = string\concatenate('', $na_dashb, ''); + ); + $na_dashboard = string\concatenate($na_dashboard, $na_dashb_med); + + ifThenElse($na_jaar > $na_methode_1_max_jaar, + $na_end_med = $na_surplus_med; + $na_end_hom = $na_surplus_hom; + , + $na_end_med = 0; + $na_end_hom = 0; + ); + + ifThen($na_end_med < 0 || $na_end_hom < 0, + $na_onvoldoende = true; + ); + + $na_surpl = $na_surplus; + $na_surpl_lbl = "Totaal"; + Exec($na_script); + + ifThenElse($na_class == 'goed', $na_style = $na_style_nstd_goed, $na_style = $na_style_nstd_tekort); + $na_dashb = string\concatenate('', $na_dashb, ''); + $na_dashboard = string\concatenate($na_dashboard, $na_dashb); + + $na_dashboard = string\concatenate($na_bepaald, $na_dashboard); + + $na_hand_check = ' '; + ifThen($na_hand, $na_hand_check=''); + + $na_dashboard_id = string\concatenate('dashboard_', $na_id); + $na_dashboard = string\concatenate($na_dashboard, + '' + ); + $na_dashboard = string\concatenate($na_dashboard, + '', + ''); + $na_dashboard = string\concatenate($na_dashboard, + ''); + + // Maak nu een rapport over de getallen. Kijk hoe het is bepaald. + //dagen, dagenMedisch, dagenHomeopathie + + + // Maak rapport op + $na_report = configGet('nascholingstotaal-rapport-jaar'); + $na_report = string\replace($na_report, '%jaar%', toString($na_jaar)); + $na_report = string\replace($na_report, '%bepaald%', $na_bep_rep); + + $na_verr_hom = hash\get($h_verr_hom, $na_id); + $na_verr_med = hash\get($h_verr_med, $na_id); + $na_verr_tot = hash\get($h_verr, $na_id); + $na_report = string\replace($na_report, '%hom%', $na_verr_hom); + $na_report = string\replace($na_report, '%med%', $na_verr_med); + $na_report = string\replace($na_report, '%tot%', $na_verr_tot); + + $na_report = string\replace($na_report, '[T', string\concatenate('')); + $na_report = string\replace($na_report, '[S', ''); + $na_report = string\replace($na_report, '[NI', string\concatenate('')); + $na_report = string\replace($na_report, '[N', string\concatenate('')); + $na_report = string\replace($na_report, '[V', string\concatenate('')); + $na_report = string\replace($na_report, '[O', string\concatenate('')); + $na_report = string\replace($na_report, '[E', string\concatenate('')); + $na_report = string\replace($na_report, '[W', string\concatenate('')); + $na_report = string\replace($na_report, '[I', string\concatenate('')); + $na_report = string\replace($na_report, '[R', string\concatenate('')); + $na_report = string\replace($na_report, "O]", ""); + $na_report = string\replace($na_report, "V]", ""); + $na_report = string\replace($na_report, "E]", ""); + $na_report = string\replace($na_report, "W]", ""); + $na_report = string\replace($na_report, "I]", ""); + $na_report = string\replace($na_report, "R]", ""); + $na_report = string\replace($na_report, "]", ""); + $na_report = string\replace($na_report, '%%', '\n'); + + log('warning', 'Updating record voor jaar:', $na_jaar); + + // Updaten van record + record\update('Nascholingstotaal', $na_id, + 'surplus', $na_surplus, + 'surplusMedisch', $na_surplus_med, + 'surplusHomeopathie', $na_surplus_hom, + 'dashboard', $na_dashboard, + 'berekeningsuitleg', $na_report + ); + + log('warning', 'record updated, increasing na_i:', $na_i, ' with 1'); + + $na_i = $na_i + 1; +); + + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Klaar. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +global\unset($na_in_calc_key, true); diff --git a/Archief/code pre 2023-10-27/script-lees-nascholingsnorm-hash.js b/Archief/code pre 2023-10-27/script-lees-nascholingsnorm-hash.js new file mode 100644 index 0000000..b45f47a --- /dev/null +++ b/Archief/code pre 2023-10-27/script-lees-nascholingsnorm-hash.js @@ -0,0 +1,32 @@ +//exec last execution: Mon Jul 13 2020 17:57:38 GMT+0200 (Midden-Europese zomertijd) + +$sln_rows = record\fetchManyHash('Nascholingsnorm', 'id, jaar, dagen, dagenMedisch, dagenHomeopathie, regiocode', 'createdAt', 'asc'); + +$sln_i = 0; +$sln_n = array\length($sln_rows); +$sln_hash = hash\new(); +$sln_hash_id = hash\new(); + +while($sln_i < $sln_n, + $sln_row = array\at($sln_rows, $sln_i); + + $jaar = hash\get($sln_row, 'jaar'); + $id = hash\get($sln_row, 'id'); + $regiocode = hash\get($sln_row, 'regiocode'); + $jaar = $jaar + 0; + + $key = $jaar; + ifThen($regiocode != '-', + $key = string\concatenate($jaar, '-', $regiocode); + ); + + $sln_hash = hash\set($sln_hash, $key, $sln_row); + $sln_hash_id = hash\set($sln_hash_id, $id, $sln_row); + + $sln_i = $sln_i + 1; +); + +global\set('nascholingsnorm-hash', $sln_hash); +global\set('nascholingsnorm-hash-by-id', $sln_hash_id); + +logAdd(log, '#nascholingsnormen gelezen: ', $sln_n); diff --git a/Nascholingsberekeningen zoals geïmplementeerd.docx b/Nascholingsberekeningen zoals geïmplementeerd.docx index 1f3c5dd..a54ced6 100644 Binary files a/Nascholingsberekeningen zoals geïmplementeerd.docx and b/Nascholingsberekeningen zoals geïmplementeerd.docx differ diff --git a/code-current/archive/Bereken totaal voor één lid.js b/code-current/archive/Bereken totaal voor één lid.js new file mode 100644 index 0000000..f268ace --- /dev/null +++ b/code-current/archive/Bereken totaal voor één lid.js @@ -0,0 +1,44 @@ +//exec last execution: Thu Nov 09 2023 14:00:49 GMT+0100 (Midden-Europese standaardtijd) + +$me = Entity\This(); + +logAdd(log); + +logAdd(log, 'info', 'Ophalen naberekeningsscript voor één jaar'); +$jaar_calc_script = configGet('script-bereken-nascholingstotaal-voor-jaar'); + +logAdd(log, 'info', 'Ophalen naberekeningsscript voor de jaren'); +$jaren_calc_script = configGet('script-bereken-nascholingstotalen'); + +logAdd(log, 'info', 'Leden ophalen bij dit script'); +$contacts = Entity\GetRelated($me, 'contacts', 1000, 'lidnummer', 'asc'); +$n = Array\Length($contacts); +logAdd(log, 'info', $n, ' Leden'); + +$i = 0; +while($i < $n, + $contact = array\at($contacts, $i); + $contact_id = Attr($contact, 'id'); + + logAdd(log, 'warning', 'Lid: ', Attr($contact, 'lidnummer'), ' - ', Attr($contact, 'name')); + + logAdd(log, 'Ophalen nascholingstotalen'); + $nascholingstotalen = Entity\GetRelated($contact, 'nascholingstotalen', 1000, 'jaar', 'asc'); + logAdd(log, 'opgehaald'); + + $m = array\length($nascholingstotalen); + logAdd(log, 'info', ' #nascholingstotalen: ', $m); + $j = 0; + while($j < $m, + $nascholingstotaal = array\at($nascholingstotalen, $j); + $year = Attr($nascholingstotaal, 'jaar'); + logAdd(log, 'info', ' Herberekenen jaar: ', $year); + Exec($jaar_calc_script); + $j = $j + 1; + ); + + logAdd(log, 'info', 'Totalen herberekenen'); + Exec($jaren_calc_script); + + $i = $i + 1; +); diff --git a/code-current/archive/script leden met onvoldoende nascholing.js b/code-current/archive/script leden met onvoldoende nascholing.js new file mode 100644 index 0000000..081f2d7 --- /dev/null +++ b/code-current/archive/script leden met onvoldoende nascholing.js @@ -0,0 +1,124 @@ +// last execution: Mon Nov 06 2023 10:21:31 GMT+0100 (Midden-Europese standaardtijd) + +$par_nascholingsjaar=2021; +$par_open_lid_in_nieuwe_tab=true; +$par_aantal_rijen_op_een_pagina=21; + +$p_page_len = $par_aantal_rijen_op_een_pagina; + +logAdd(log); + +html = ''; +$h = ''; + +logAdd(log, "Controle nascholingsvereisten voor jaar ", $par_nascholingsjaar); +$leden = Record\FetchManyHash('Contact', + 'id, firstName, middleName, lastName, name, emailAddress, regiocode, dispensatie, lidnummer, datumRegistratie', + 'lastName', 'asc' + ); + +strAdd($h, '
'); +$table = table\new('Voornaam', 26, + 'Achternaam', 26, 'asc', + 'email', 26, + 'Lidnummer', 7, 'center', + 'Dispensatie', 7, 'center', + 'Regiocode', 8, 'center' + ); + +table\rowsPerPage($table, $p_page_len); +table\filename($table, string\concatenate($par_nascholingsjaar, ' - leden met te weinig nascholing')); + +$i = 0; +$n = array\length($leden); + +logAdd(log, 'leden:', $n); +$n_onvoldoende = 0; + +while($i < $n, + $lid = array\at($leden, $i); + $r_code = string\substring(hash\get($lid, 'regiocode'), 0, 2) + 0; + + ifThen($r_code < 30 && $r_code != 8, + $rapport = true; + $contact_id = hash\get($lid, 'id'); + $email = hash\get($lid, 'emailAddress'); + $dispensatie = hash\get($lid, 'dispensatie'); + $lidnummer = hash\get($lid, 'lidnummer'); + $naam = hash\get($lid, 'name'); + $regdat = hash\get($lid, 'datumRegistratie'); + $reg_jaar = datetime\year($regdat); + + $contact = Entity\Get('Contact', $contact_id); + $nascholingstotalen = Entity\GetRelated($contact, 'nascholingstotalen', 1, 'jaar', 'asc', 'jaar=', $par_nascholingsjaar); + $m = array\length($nascholingstotalen); + + ifThenElse($m == 0, $heeft_nt = 'nee', ifThenElse($m > 1, $heeft_nt = 'teveel', $heeft_nt = 'ja')); + ifThen($m > 0, $nascholingstotalen = array\at($nascholingstotalen, 0)); + ifThen($m == 0 && $par_nascholingsjaar < $reg_jaar, $rapport = false; $reden = 'gevraagde jaar ligt voor registratie jaar'); + + ifThenElse($m == 0, + $hom_surplus = 'nvt'; + $med_surplus = 'nvt'; + $surplus = 'nvt'; + $hom_lt = false; + $med_lt = false; + $lt = false; + $onvoldoende = true; + ifThen($rapport, $reden = 'voor het gevraagde jaar geen nascholingstotaal aanwezig!'); + , + $status = attr($nascholingstotalen, 'status'); + + ifThenElse($status == 'voldoet-niet' || $status == 'voldoet-niet-na-saldering', $onvoldoende = true, $onvoldoende = false); + ifThenElse($onvoldoende, $reden = 'onvoldoende nascholing', $reden = 'voldoende nascholing'); + ); + + ifThenElse($rapport && $onvoldoende, $opnemen = 'opnemen in rapport', $opnemen = 'niet opnemen'); + + ifThenElse($rapport && $onvoldoende, + logAdd(log, 'warning', $opnemen, ' - lid: ', $naam, ' email: ', $email, ' registratiejaar: ', $reg_jaar, ' - ', $reden); + , + logAdd(log, 'info', $opnemen, ' - lid: ', $naam, ' email: ', $email, ' registratiejaar: ', $reg_jaar, ' - ', $reden); + ); + + ifThen($rapport, + ifThen($onvoldoende, + $n_onvoldoende = $n_onvoldoende + 1; + $naam = hash\get($lid, 'name'); + $lastname = hash\get($lid, 'lastName'); + $middlename = hash\get($lid, 'middleName'); + $firstname = hash\get($lid, 'firstName'); + $lastname = string\concatenate($lastname, ', ', $middlename); + $regiocode = hash\get($lid, 'regiocode'); + ifThenElse($dispensatie, $dispensatie = 'Ja', $dispensatie = '-'); + + strAdd($h, ''); + $td = ''; + ifThenElse($par_open_lid_in_nieuwe_tab, $target = 'target="_blank"', $target = ""); + + table\add($table, + table\link(string\concatenate('/#Contact/view/', $contact_id), $firstname), + table\link(string\concatenate('/#Contact/view/', $contact_id), $lastname), + table\link(string\concatenate('mailto:', $email), $email), + string\concatenate(' ', $lidnummer), + $dispensatie, + string\concatenate(' ', $regiocode) + ); + ); // $onvoldoende + ); // $rapport + ); + $i = $i + 1 +); + +$table_html = table\toHtml($table); +$table_html = string\replace($table_html, 'title="%RED%', 'title="'); +$table_html = string\replace($table_html, '%END"', '"'); +$table_html = string\replace(string\replace($table_html, '%RED%', ''), '%END%', ''); + +strAdd($h, '

', 'Leden met onvoldoende nascholing voor jaar ', toString($par_nascholingsjaar), ': ', $n_onvoldoende, '

'); +strAdd($h, $table_html); +strAdd($h, '
'); + +logAdd(log, 'info', 'leden met onvoldoende nascholing voor jaar ', $par_nascholingsjaar, ': ', $n_onvoldoende); + +html=$h; diff --git a/code-current/archive/script-bereken-nascholingstotaal-voor-jaar.js b/code-current/archive/script-bereken-nascholingstotaal-voor-jaar.js new file mode 100644 index 0000000..5f61303 --- /dev/null +++ b/code-current/archive/script-bereken-nascholingstotaal-voor-jaar.js @@ -0,0 +1,347 @@ +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Initialiseren +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$na_diploma_dt = record\attribute('Contact', $contact_id, 'vakopleidingDatumDiploma'); +$na_dispensatie = record\attribute('Contact', $contact_id, 'dispensatie'); +$na_regiocode = record\attribute('Contact', $contact_id, 'regiocode'); +$na_regiocode_str = $na_regiocode; +$na_regiocode = toInt($na_regiocode); // regiocode numeriek maken +$na_diploma_jr = datetime\year($na_diploma_dt); + +ifThen(!global\isset('nascholingsnorm-hash'), + $na_script = configGet('script-lees-nascholingsnorm-hash'); + Exec($na_script); +); +$na_norm = global\get('nascholingsnorm-hash'); + +$na_id = ''; + +$na_methode_1_tot_en_met = configGet('berekening-methode-1-tot-en-met'); +$na_werkgroep_div = configGet('werkgroep-dagen-deel-factor'); +$na_werkgroep_max = configGet('werkgroep-dagen-max'); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Bereken de totalen dagen en dagenMedisch. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +ifThen(!$no_db_update, + $na_recs = record\fetchManyHash('Nascholingstotaal', + 'id, dagen, dagenMedisch, dagenHomeopathie, dagenWerkgroep, handmatig, dagenVrijstelling, nascholingsnormId, startSurplus', + 'createdAt', 'asc', + 'contactId=', $contact_id, + 'jaar=', $year + ); + $na_nrecs = array\length($na_recs); + + ifThenElse($na_nrecs > 0, + $na_rec = array\at($na_recs, 0); + + $na_id = hash\get($na_rec, 'id'); + $na_handmatig = hash\get($na_rec, 'handmatig'); + $na_vrijstelling = hash\get($na_rec, 'dagenVrijstelling'); + $na_start_surplus = hash\get($na_rec, 'startSurplus'); + $na_current_norm_id = hash\get($na_rec, 'nascholingsnormId'); + + log('warning', 'Berekenen nascholingen voor jaar: ', $year, ', na_id = ', $na_id); + + // Zolang de totalen handmatig zijn, wordt er niets berekend. + ifThenElse($na_handmatig, + $na_totaal_dagen = hash\get($na_rec, 'dagen'); + $na_totaal_medisch = hash\get($na_rec, 'dagenMedisch'); + $na_totaal_homeopathie = hash\get($na_rec, 'dagenHomeopathie'); + $na_totaal_werkgroep = hash\get($na_rec, 'dagenWerkgroep'); + log('warning', 'Handmatige nascholing, er wordt niets berekend'); + log('warning', 'medisch:', $na_totaal_medisch, ', hom:', $na_totaal_homeopathie, + ', werkgr:', $na_totaal_werkgroep, ', homoverig:', $na_totaal_dagen); + , + // Totalen op 0, dit is een te berekenen nascholing + $na_totaal_dagen = 0; + $na_totaal_medisch = 0; + $na_totaal_homeopathie = 0; + $na_totaal_werkgroep = 0; + + // De goedgekeurde handmatige en geaccrediteerde nascholingen + // kan nog steeds met methode 1. + $na_rows = record\fetchRelatedMany( + 'Nascholingstotaal', $na_id, 'nascholingen1', + 'jaar, dagen, dagenMedisch, dagenHomeopathie, status, name', + 'jaar', 'asc', + 'jaar=', $year + ); + $na_i = 0; + $na_n = array\length($na_rows); + log('warning', '#nascholingen gerelateerd aan nascholingstotaal:', $na_n); + + while($na_i < $na_n, + $na_row = array\at($na_rows, $na_i); + $status = array\at($na_row, 4); + $name = array\at($na_row, 5); + log('warning', 'i = ', $na_i, ', status = ', $status); + ifThen($status != '-' && $status != 'afgekeurd', + $na_totaal_dagen = $na_totaal_dagen + array\at($na_row, 1); + $na_totaal_medisch = $na_totaal_medisch + array\at($na_row, 2); + $na_totaal_homeopathie = $na_totaal_homeopathie + array\at($na_row, 3); + log('warning', 'Dagen: hom:', $na_totaal_homeopathie, ', dagen: ', $na_totaal_dagen, ', medisch:', $na_totaal_medisch); + ); + $na_i = $na_i + 1; + ); + + // Dan het aantal notulen voor de werkgroepen van dit contact voor het gegeven jaar + // Eerst kijken we of we al groter dan het grensjaar zitten. + // Dit is niet meer voor methode 1. + ifThen($year > $na_methode_1_tot_en_met, + // Nu kunnen we ons best doen. + // Haal de werkgroep lidmaatschappen op die geldig zijn voor dit jaar. + $na_today = datetime\now(); + $na_werkgroepen_ids_1 = record\fetchRelatedManyHash('Contact', $contact_id, + 'werkgroeplidmaatschappen', + 'werkgroepId, datumVanaf', + 'name', 'asc', + 'lidmaatschapBeeindigd=', 0, + 'jaarVanaf<=', $year, + ); + $na_werkgroepen_ids_2 = record\fetchRelatedManyHash('Contact', $contact_id, + 'werkgroeplidmaatschappen', + 'werkgroepId, datumVanaf, datumTotEnMet', + 'name', 'asc', + 'lidmaatschapBeeindigd=', 1, + 'jaarVanaf<=', $year, + 'jaarTotEnMet>=', $year + ); + // Oke, nu hebben we de werkgroep ids. + // En dan kijken naar het aantal verslagen over dit jaar. + // En afkappen op een maximaal aantal dagen. + + $na_werkgroep_verslagen = 0; + + $na_n = array\length($na_werkgroepen_ids_1); + log('warning', 'Werkgroepen die niet beëindigd zijn :', $na_n); + $na_i = 0; + while($na_i < $na_n, + // Verkrijg het aantal notulen >= max(datumVanaf,begin dit jaar) en kleiner einde dit jaar. + $na_row = array\at($na_werkgroepen_ids_1, $na_i); + + $na_werkgroep_id = hash\get($na_row, 'werkgroepId'); + + $na_datumVanaf = hash\get($na_row, 'datumVanaf'); + $na_year_begin = string\concatenate($year, '-01-01'); + $na_end = string\concatenate($year, '-12-31'); + ifThenElse($na_datumVanaf > $na_year_begin, + $na_begin = $na_datumVanaf, + $na_begin = $na_year_begin); + + log('warning', 'werkgroepid = ', $na_werkgroep_id); + log('warning', 'datum vanaf: ', $na_begin, ', datum eind:', $na_end); + + $na_count = record\countRel('Werkgroep', $na_werkgroep_id, + 'werkgroepverslagen', + 'datum>=', $na_begin, + 'datum<=', $na_end + ); + + $na_werkgroep_verslagen = $na_werkgroep_verslagen + $na_count; + log('warning', 'notulen count=', $na_count, ', werkgroep verslagen=', $na_werkgroep_verslagen); + + $na_i = $na_i + 1; + ); + + // Oke en nu voor de jaren waarin er een einddatum is gezet. + + $na_n = array\length($na_werkgroepen_ids_2); + log('warning', 'Werkgroepen met een einddatum:', $na_n); + $na_i = 0; + while($na_i < $na_n, + // Verkrijg het aantal notulen >= max(datumVanaf,begin dit jaar) en kleiner MIN(datumTotEnMet, einde dit jaar). + $na_row = array\at($na_werkgroepen_ids_2, $na_i); + + $na_werkgroep_id = hash\get($na_row, 'werkgroepId'); + + $na_datumVanaf = hash\get($na_row, 'datumVanaf'); + $na_year_begin = string\concatenate($year, '-01-01'); + ifThenElse($na_datumVanaf > $na_year_begin, + $na_begin = $na_datumVanaf, + $na_begin = $na_year_begin); + + $na_datumTotEnMet = hash\get($na_row, 'datumTotEnMet'); + $na_year_end = string\concatenate($year, '-12-31'); + ifThenElse($na_datumTotEnMet < $na_year_end, + $na_end = $na_datumTotEnMet, + $na_end = $na_year_end); + + log('warning', 'werkgroepid = ', $na_werkgroep_id); + log('warning', 'datum vanaf: ', $na_begin, ', datum einde:', $na_end); + + $na_count = record\countRel('Werkgroep', $na_werkgroep_id, + 'werkgroepverslagen', + 'datum>=', $na_begin, + 'datum<=', $na_end + ); + + $na_werkgroep_verslagen = $na_werkgroep_verslagen + $na_count; + log('warning', 'notulen count=', $na_count, ', werkgroep verslagen=', $na_werkgroep_verslagen); + + $na_i = $na_i + 1; + ); + + log('warning', 'totaal aantal werkgroep verslagen voor ', $year, ' = ', $na_werkgroep_verslagen); + + // Bereken de zooi. + + $na_totaal_werkgroep = number\floor($na_werkgroep_verslagen / $na_werkgroep_div); + ifThen($na_totaal_werkgroep > $na_werkgroep_max, $na_totaal_werkgroep = $na_werkgroep_max); + ); + ); + , + log('error', 'Geen nascholingstotaal voor contact_id ', $contact_id, ' en jaar ', $year); + $na_totaal_dagen = 0; + $na_totaal_medisch = 0; + $na_vrijstelling = 0; + $na_totaal_homeopathie = 0; + $na_totaal_werkgroep = 0; + ); +); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Bereken de norm & vrijstelling +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$norm_key = $year; +ifThen($na_regiocode == 8, + log('warning', 'Afwijkende norm key'); + $norm_key = string\concatenate($year, '-', $na_regiocode_str); +); +log('warning', 'Regiocode=', $na_regiocode, ', str=', $na_regiocode_str, ', Norm key = ', $norm_key); + +$na_dagen_norm_formeel = hash\get(hash\get($na_norm, $norm_key), 'dagen'); +$na_medisch_norm = hash\get(hash\get($na_norm, $norm_key), 'dagenMedisch'); +$na_homeopathie_norm = hash\get(hash\get($na_norm, $norm_key), 'dagenHomeopathie'); +$na_max_meenemen = hash\get(hash\get($na_norm, $norm_key), 'meeneemNorm'); +$na_norm_id = hash\get(hash\get($na_norm, $norm_key), 'id'); +$na_norm_name = hash\get(hash\get($na_norm, $norm_key), 'name'); + +log('warning', 'nascholingsnorm: jaar: ', $year, ', dagen: ', $na_dagen_norm_formeel, + ', medisch: ', $na_medisch_norm, + ', homeopathie: ', $na_homeopathie_norm, + ', max meenemen: ', $na_max_meenemen, + ', start surplus: ', $na_start_surplus, + ', norm_id:', $na_norm_id, + ', norm_name:', $na_norm_name + ); + +// +// $na_vrijstelling is op zich al bekend, maar misschien is er nog dispensatie of registratie jaar +// $na_vrijstelling = MIN($na_vrijstelling, $na_dagen_norm_formeel – $na_homeopahie_norm – $na_medisch_norm) +// +$na_registration = ($year <= $na_diploma_jr); +$na_examenjaar = false; +ifThenElse($year <= $na_methode_1_tot_en_met, + $na_max_vrijstelling = $na_dagen_norm_formeel; +, + $na_max_vrijstelling = $na_dagen_norm_formeel - $na_homeopathie_norm - $na_medisch_norm; +); + +ifThen($na_vrijstelling > $na_max_vrijstelling, $na_vrijstelling = $na_max_vrijstelling); + +ifThenElse($na_dispensatie, + $na_vrijstelling = $na_max_vrijstelling; + , + ifThen($na_registration, + $na_dagen_norm_formeel = 0; + $na_medisch_norm = 0; + $na_homeopathie_norm = 0; + $na_examenjaar = true; + ); +); + +$na_dagen_norm = $na_dagen_norm_formeel; + +// Het aantal start dagen surplus kan nooit de norm overschrijden. +// startSurplus wordt alleen bij het 2013 record gebruikt, m.a.w. voor mensen die daarvoor +// al lid waren. In alle andere gevallen is $na_start_surplus gelijk aan 0. +ifThen($na_start_surplus > $na_dagen_norm_formeel, $na_start_surplus = $na_dagen_norm_formeel); + +log('warning', 'dispensatie=', $na_dispensatie, ', regjr=', $na_registration, + ', norm=', $na_dagen_norm, ', start surplus=', $na_start_surplus, ', dagen vrijstelling=', $na_vrijstelling, ', max vrijstelling=', $na_max_vrijstelling); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Bereken het saldo aan dagen +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +log('warning', 'medisch:', $na_totaal_medisch, ', hom:', $na_totaal_homeopathie, + ', werkgr:', $na_totaal_werkgroep, ', homoverig:', $na_totaal_dagen); + +log('warning', 'year=', $year, ', na_methode_1_tot_en_met=', $na_methode_1_tot_en_met); + +/* +ifThenElse($year < $na_methode_1_tot_en_met, + $na_totaal_homeopathie = $na_totaal_homeopathie + $na_start_surplus + $na_vrijstelling; + $na_totaal_alle_dagen = $na_totaal_homeopathie; +, + ifThenElse($year == $na_methode_1_tot_en_met, + $na_totaal_homeopathie = $na_totaal_homemopathie + $na_start_surplus + $na_vrijstelling; + $na_totaal_alle_dagen = $na_totaal_dagen + $na_totaal_medisch + $na_totaal_homeopathie + $na_totaal_werkgroep; + , + $na_totaal_homeopathie = $na_totaal_homeopathie + $na_start_surplus; + $na_totaal_alle_dagen = $na_totaal_dagen + $na_totaal_medisch + $na_totaal_homeopathie + $na_totaal_werkgroep + $na_vrijstelling; + ); +); +*/ + +ifThenElse($year < $na_methode_1_tot_en_met, + $na_saldo_homeopathie = $na_totaal_homeopathie + $na_start_surplus + $na_vrijstelling; + $na_saldo = $na_saldo_homeopathie; + $na_totaal_alle_dagen = $na_saldo_homemopathie; +, + ifThenElse($year == $na_methode_1_tot_en_met, + $na_saldo_homeopathie = $na_totaal_homeopathie + $na_start_surplus + $na_vrijstelling; + $na_saldo = $na_saldo_homeopathie + $na_totaal_medisch; + $na_totaal_alle_dagen = $na_saldo; + , + $na_saldo_homeopathie = $na_totaal_homeopathie + $na_start_surplus; + $na_saldo = $na_saldo_homeopathie + $na_totaal_medisch + $na_totaal_dagen + $na_vrijstelling + $na_totaal_werkgroep; + $na_totaal_alle_dagen = $na_saldo; + ); +); + +$na_saldo_homeopathie = $na_saldo_homeopathie - $na_homeopathie_norm; +$na_saldo = $na_saldo - $na_dagen_norm; +$na_saldo_medisch = $na_totaal_medisch - $na_medisch_norm; + +log('warning', 'totaal alle:', $na_totaal_alle_dagen, + ', saldo:', $na_saldo, + ', saldo hom:', $na_saldo_homeopathie, + ', saldo medisch:', $na_saldo_medisch); + +log('warning', 'no db update = ', $no_db_update, ', na_id = ', $na_id); +log('warning', 'na_examenjaar = ', $na_examenjaar); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Nascholingstotaal updaten (alleen van belang als we niet al aan het updaten zijn!) +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +ifThen(!$no_db_update && $na_id != '', + // Updaten van het record leidt tot herberekening + // Het relateren van de nascholingsnorm gebeurt bij de record herberekening. + // Dus dat moeten we hier niet willen doen... + + // Updaten van het record leidt tot herberekening, dus we moeten even oppassen. + log('warning', 'Updaten nascholingstotaal: ', $na_id, ' jaar=', $year); + $oke = record\update('Nascholingstotaal', $na_id, + 'dagen', $na_totaal_dagen, + 'dagenMedisch', $na_totaal_medisch, + 'dagenHomeopathie', $na_totaal_homeopathie, + 'dagenWerkgroep', $na_totaal_werkgroep, + 'dagenTotaal', $na_totaal_alle_dagen, + 'dagenSaldo', $na_saldo, + 'homeopathieSaldo', $na_saldo_homeopathie, + 'medischSaldo', $na_saldo_medisch, + 'dagenFormeleNorm', $na_dagen_norm_formeel, + 'medischFormeleNorm', $na_medisch_norm, + 'homeopathieFormeleNorm', $na_homeopathie_norm, + 'maxMeenemen', $na_max_meenemen, + 'examenjaar', $na_examenjaar + ); + ifThen(!$oke, log('error', 'Update ging niet goed!')); +); + diff --git a/code-current/archive/script-bereken-nascholingstotalen.js b/code-current/archive/script-bereken-nascholingstotalen.js new file mode 100644 index 0000000..11521ad --- /dev/null +++ b/code-current/archive/script-bereken-nascholingstotalen.js @@ -0,0 +1,950 @@ +//exec last execution: Fri Jan 20 2023 15:56:21 GMT+0100 (Midden-Europese standaardtijd) + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Initialisatie +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +log('warning', 'Doorrekenen voor contact ', $contact_id); + +$na_reg_dt = record\attribute('Contact', $contact_id, 'datumRegistratie'); +$na_reg_jr = datetime\year($na_reg_dt); + +$na_methode_1_max_jaar = configGet('berekening-methode-1-tot-en-met'); +$na_methode_1_max_surplus = configGet('berekening-methode-1-max-surplus'); +$na_style_rubric = configGet('nascholingstotaal-rapport-jaar-rubric-style'); +$na_style_dagen = configGet('nascholingstotaal-rapport-jaar-dagen-style'); +$na_style_dagen_inspr = configGet('nascholingstotaal-rapport-jaar-dagen-style-inspr'); +$na_style_dagen_inspr2 = configGet('nascholingstotaal-rapport-jaar-dagen-style-inspr2'); +$na_style_nstd_goed = configGet('nascholingstotaal-rapport-jaar-nstd-goed-style'); +$na_style_nstd_goed_report = configGet('nascholingstotaal-rapport-jaar-nstd-goed-report-style'); +$na_style_nstd_tekort = configGet('nascholingstotaal-rapport-jaar-nstd-tekort-style'); +$na_style_nstd_tekort_report = configGet('nascholingstotaal-rapport-jaar-nstd-tekort-report-style'); +$na_style_nstd_nvt = configGet('nascholingstotaal-rapport-jaar-nstd-nvt-style'); +$na_style_bepaald = configGet('nascholingstotaal-rapport-jaar-nstd-bepaald-style'); +$na_style_bepaald_report = configGet('nascholingstotaal-rapport-jaar-nstd-bepaald-report-style'); +$na_style_onbepaald = configGet('nascholingstotaal-rapport-jaar-nstd-onbepaald-style'); +$na_style_onbepaald_report = configGet('nascholingstotaal-rapport-jaar-nstd-onbepaald-report-style'); +$na_style_kop = configGet('nascholingstotaal-rapport-jaar-kop-style'); +$na_style_probleem = configGet('nascholingstotaal-rapport-probleem-style'); +$na_style_waarschuwing = configGet('nascholingstotaal-rapport-waarschuwing-style'); +$na_style_sub_rubric = configGet('nascholingstotaal-rapport-sub-rubriek-style'); +$na_style_sub2_rubric = configGet('nascholingstotaal-rapport-sub2-rubriek-style'); + +$na_nascholing_onvoldoende = false; + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Haal eerst alle nascholingstotalen voor een contact op, in volgorde van jaar. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$na_geen_status_vanaf_jaar = datetime\year(datetime\now()) - 1; + +$na_in_calc_key = string\concatenate('nascholingstotalen-in-berekening-voor', $contact_id); +global\set($na_in_calc_key, true); + +$na_rows = record\fetchManyHash('Nascholingstotaal', + 'id, jaar, dagen, dagenMedisch, dagenHomeopathie, dagenTotaal, medischSaldo, homeopathieSaldo, dagenSaldo, saldoNaCorrectie, dagenWerkgroep, dagenVrijstelling, status, berekeningsUitleg, startSurplus, dagenFormeleNorm, homeopathieFormeleNorm, medischFormeleNorm, maxMeenemen, examenjaar, handmatig, surplus, surplusHomeopathie, surplusMedisch', + 'jaar', 'asc', + 'contactId=', $contact_id, + ); + +$na_n = array\length($na_rows); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Initialiseer om te beginnen alle surplussen op de saldo's van een jaar. +// Daarna gaan we de zaak verdelen. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$na_i = 0; +while($na_i < $na_n, + $na_row = array\at($na_rows, $na_i); + + $na_jaar = hash\get($na_row, 'jaar'); + + $na_calc_tot = hash\get($na_row, 'dagenSaldo'); + $na_calc_med = hash\get($na_row, 'medischSaldo'); + $na_calc_hom = hash\get($na_row, 'homeopathieSaldo'); + + $na_row = hash\set($na_row, 'surplus', $na_calc_tot); + $na_row = hash\set($na_row, 'surplusMedisch', $na_calc_med); + $na_row = hash\set($na_row, 'surplusHomeopathie', $na_calc_hom); + $na_row = hash\set($na_row, 'meegenomen', 0); + $na_row = hash\set($na_row, 'meegenomen_hom', 0); + $na_row = hash\set($na_row, 'meegenomen_med', 0); + + $na_row = hash\set($na_row, 'correctie_uit_opvolgend_jaar', 0); + $na_row = hash\set($na_row, 'correctie_uit_opvolgend_jaar_hom', 0); + $na_row = hash\set($na_row, 'correctie_uit_opvolgend_jaar_med', 0); + + $na_row = hash\set($na_row, 'tekort', $na_calc_tot); + $na_row = hash\set($na_row, 'tekort_hom', $na_calc_hom); + $na_row = hash\set($na_row, 'tekort_med', $na_calc_med); + + $na_row = hash\set($na_row, 'tekort_aangevuld_vanuit', ''); + $na_row = hash\set($na_row, 'tekort_aangevuld_naar', ''); + $na_row = hash\set($na_row, 'correctie_aangevuld_vanuit', 0); + $na_row = hash\set($na_row, 'correctie_aangevuld_naar', 0); + + $na_uitleg = ''; + $na_uitleg_hom = ''; + $na_uitleg_med = ''; + + $na_dagen_hom = hash\get($na_row, 'dagenHomeopathie'); + $na_dagen_med = hash\get($na_row, 'dagenMedisch'); + $na_dagen = hash\get($na_row, 'dagenTotaal'); + $na_vrijstelling = hash\get($na_row, 'dagenVrijstelling'); + $na_werkgroep = hash\get($na_row, 'dagenWerkgroep'); + $na_overig = hash\get($na_row, 'dagen'); + $na_start_surplus = hash\get($na_row, 'startSurplus'); + strAdd($na_uitleg_hom, '[IDagen gevolgd :I][NI', number\format($na_dagen_hom, 2), ']%%'); + + ifThenElse($na_jaar > $na_methode_1_max_jaar, + strAdd($na_uitleg_med, '[IDagen gevolgd :I][NI', number\format($na_dagen_med, 2), ']%%'); + ifThen($na_start_surplus > 0, + strAdd($na_uitleg, '[IDagen Start Surplus :I][NI', number\format($na_start_surplus, 2), ']%%'); + strAdd($na_uitleg_hom, '[IDagen Start Surplus :I][NI', number\format($na_start_surplus, 2), ']%%'); + ); + strAdd($na_uitleg, '[IDagen Klassieke Homeopathie gevolgd :I][NI', number\format($na_dagen_hom, 2), ']%%'); + strAdd($na_uitleg, '[IDagen Medisch gevolgd :I][NI', number\format($na_dagen_med, 2), ']%%'); + strAdd($na_uitleg, '[IDagen Overig gevolgd :I][NI', number\format($na_overig, 2), ']%%'); + strAdd($na_uitleg, '[IDagen Werkgroep :I][NI', number\format($na_werkgroep, 2), ']%%'); + ifThen($na_vrijstelling > 0, + strAdd($na_uitleg, '[IDagen Vrijstelling :I][NI', number\format($na_vrijstelling, 2), ']%%'); + ); + strAdd($na_uitleg, '[TNascholingsdagen :I][N', number\format($na_dagen, 2), ']%%'); + , + strAdd($na_uitleg, '[IDagen Klassieke Homeopathie gevolgd :I][NI', number\format($na_dagen_hom, 2), ']%%'); + ifThen($na_start_surplus > 0, + strAdd($na_uitleg, '[IDagen Start Surplus :I][NI', number\format($na_start_surplus, 2), ']%%'); + strAdd($na_uitleg_hom, '[IDagen Start Surplus :I][NI', number\format($na_start_surplus, 2), ']%%'); + ); + ifThen($na_jaar == $na_methode_1_max_jaar, + strAdd($na_uitleg, '[IDagen Medisch gevolgd :I][NI', number\format($na_dagen_med, 2), ']%%'); + ); + ifThen($na_vrijstelling > 0, + strAdd($na_uitleg, '[IDagen Vrijstelling :I][NI', number\format($na_vrijstelling, 2), ']%%'); + strAdd($na_uitleg_hom, '[IDagen Vrijstelling :I][NI', number\format($na_vrijstelling, 2), ']%%'); + ); + ); + + $na_norm_hom = hash\get($na_row, 'homeopathieFormeleNorm'); + $na_norm_med = hash\get($na_row, 'medischFormeleNorm'); + $na_norm = hash\get($na_row, 'dagenFormeleNorm'); + strAdd($na_uitleg_hom, '[INorm Homeopathie :I][NI', number\format($na_norm_hom, 2), ']%%'); + ifThenElse($na_jaar > $na_methode_1_max_jaar, + strAdd($na_uitleg_med, '[INorm Medisch :I][NI', number\format($na_norm_med, 2), ']%%'); + strAdd($na_uitleg, '[INorm Nascholingsdagen :I][NI', number\format($na_norm, 2), ']%%'); + , + strAdd($na_uitleg, '[INorm Nascholingsdagen :I][NI', number\format($na_norm, 2), ']%%'); + ); + + strAdd($na_uitleg_hom, '[TSaldo :I][N', number\format($na_calc_hom, 2), ']%%'); + ifThenElse($na_jaar >= $na_methode_1_max_jaar, + strAdd($na_uitleg_med, '[TSaldo :I][N', number\format($na_calc_med, 2), ']%%'); + strAdd($na_uitleg, '[TSaldo :I][N', number\format($na_calc_tot, 2), ']%%'); + , + strAdd($na_uitleg, '[TSaldo :I][N', number\format($na_calc_tot, 2), ']%%'); + ); + + $na_row = hash\set($na_row, 'uitleg', $na_uitleg); + $na_row = hash\set($na_row, 'uitleg_hom', $na_uitleg_hom); + $na_row = hash\set($na_row, 'uitleg_med', $na_uitleg_med); + $na_rows = array\set($na_rows, $na_i, $na_row); + $na_i = $na_i + 1; +); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Pas de doorschuif berekening toe. +// Behalve dan dat we maximaal de norm aan dagen meenemen naar het volgende jaar. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$na_j_first_hom = 0; +$na_j_first_med = 0; +$na_j_first_tot = 0; + +$na_i = 0; +while($na_i < $na_n, + + $na_row = array\at($na_rows, $na_i); + + $na_id = hash\get($na_row, 'id'); + $na_jaar = hash\get($na_row, 'jaar'); + + log('warning', 'na_i=', $na_i, ', id=', $na_id, ', jaar=', $na_jaar); + + $na_norm_hom = hash\get($na_row, 'homeopathieFormeleNorm'); + $na_norm_med = hash\get($na_row, 'medischFormeleNorm'); + $na_norm = hash\get($na_row, 'dagenFormeleNorm'); + + $na_calc_tot = hash\get($na_row, 'surplus'); + $na_calc_med = hash\get($na_row, 'surplusMedisch'); + $na_calc_hom = hash\get($na_row, 'surplusHomeopathie'); + + $na_uitleg = hash\get($na_row, 'uitleg'); + $na_uitleg_hom = hash\get($na_row, 'uitleg_hom'); + $na_uitleg_med = hash\get($na_row, 'uitleg_med'); + $na_tekort_aangevuld_naar = hash\get($na_row, 'tekort_aangevuld_naar'); + $na_correctie_aangevuld_naar = hash\get($na_row, 'correctie_aangevuld_naar'); + + $na_tekort = hash\get($na_row, 'tekort'); + $na_tekort_hom = hash\get($na_row, 'tekort_hom'); + $na_tekort_med = hash\get($na_row, 'tekort_med'); + + $na_correctie_uit_opvolgend_jaar = hash\get($na_row, 'correctie_uit_opvolgend_jaar'); + $na_correctie_uit_opvolgend_jaar_hom = hash\get($na_row, 'correctie_uit_opvolgend_jaar_hom'); + $na_correctie_uit_opvolgend_jaar_med = hash\get($na_row, 'correctie_uit_opvolgend_jaar_med'); + + $na_jaar = hash\get($na_row, 'jaar'); + + $na_max_meenemen = hash\get($na_row, 'maxMeenemen'); + log('warning', 'na_max_meenemen=', $na_max_meenemen); + + $do_adding = true; + + ifThenElse($na_i == 0, + log('warning', '1e jaar'); + log('warning', 'jaar=', $na_jaar, ', calc_hom=', $na_calc_hom, ', calc_med=', $na_calc_med, ', calc_tot=', $na_calc_tot); + $na_j_first_hom = 0; + $na_j_first_med = 0; + $na_j_first_tot = 0; + , + // Check of het saldo van dagen > 0 voor homeopathie, medisch en totaal. + // Zorg dat dat eerst verdeeld wordt naar de voorgaande saldi van jaren. + + log('warning', 'jaar=', $na_jaar, ', calc_hom=', $na_calc_hom, ', calc_med=', $na_calc_med, ', calc_tot=', $na_calc_tot); + + $na_lowest_j = $na_i; + + log('warning', 'jaar=', $na_jaar, ', calc_hom=', $na_calc_hom, ', calc_med=', $na_calc_med, ', calc_tot=', $na_calc_tot); + + // Medisch negatieve correcties + // Alleen als er voldoende surplus is om te compenseren. + // We kijken dan niet naar het totaal, want daar ontstaat dan + // vanzelf een verder tekort als dat aan de orde is. + ifThen(($na_calc_med + $na_norm_med) > 0, + $na_j = $na_j_first_med; + $na_row_j = array\at($na_rows, $na_j); + $na_calc_med_j = hash\get($na_row_j, 'surplusMedisch'); + $na_uitleg_med_j = hash\get($na_row_j, 'uitleg_med'); + $na_uitleg_j = hash\get($na_row_j, 'uitleg'); + $na_tekort_aangevuld_vanuit_j = hash\get($na_row_j, 'tekort_aangevuld_vanuit'); + $na_correctie_aangevuld_vanuit_j = hash\get($na_row_j, 'correctie_aangevuld_vanuit'); + $na_jaar_j = hash\get($na_row_j, 'jaar'); + $na_correctie_uit_opvolgend_jaar_med_j = hash\get($na_row_j, 'correctie_uit_opvolgend_jaar_med'); + $na_correctie_uit_opvolgend_jaar_j = hash\get($na_row_j, 'correctie_uit_opvolgend_jaar'); + while($na_j < $na_i && ($na_calc_med + $na_norm_med) > 0, + while($na_j < $na_i && $na_calc_med_j >= 0, + $na_j = $na_j + 1; + $na_row_j = array\at($na_rows, $na_j); + $na_calc_med_j = hash\get($na_row_j, 'surplusMedisch'); + $na_uitleg_med_j = hash\get($na_row_j, 'uitleg_med'); + $na_uitleg_j = hash\get($na_row_j, 'uitleg'); + $na_tekort_aangevuld_vanuit_j = hash\get($na_row_j, 'tekort_aangevuld_vanuit'); + $na_correctie_aangevuld_vanuit_j = hash\get($na_row_j, 'correctie_aangevuld_vanuit'); + $na_jaar_j = hash\get($na_row_j, 'jaar'); + $na_correctie_uit_opvolgend_jaar_med_j = hash\get($na_row_j, 'correctie_uit_opvolgend_jaar_med'); + $na_correctie_uit_opvolgend_jaar_j = hash\get($na_row_j, 'correctie_uit_opvolgend_jaar'); + ); + + $na_j_first_med = $na_j; + //logAdd(log, 'jaar:', $na_jaar_j, ', tekort_aangevuld_vanuit: ', $na_tekort_aangevuld_vanuit_j); + + ifThen($na_j < $na_i, + ifThen($na_lowest_j > $na_j, $na_lowest_j = $na_j); + $na_correctie = -1 * $na_calc_med_j; + // Zorg dat niet meer dan het saldo kan worden verrekend + ifThen($na_correctie > ($na_calc_med + $na_norm_med), $na_correctie = ($na_calc_med + $na_norm_med)); + + strAdd($na_uitleg_med_j, "[IDagen tekort medisch aangevuld vanuit jaar ", $na_jaar, ":I][NI", number\format($na_correctie, 2), "]%%"); + strAdd($na_tekort_aangevuld_vanuit_j, "[IIWaarvan dagen medisch vanuit jaar ", $na_jaar, ":I][NII", number\format($na_correctie, 2), "]%%"); + strAdd($na_uitleg_med, "[IDagen tekort medisch aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 2), "]%%"); + strAdd($na_tekort_aangevuld_naar, "[IIWaarvan dagen medisch naar jaar ", $na_jaar_j, ":I][NII", number\format($na_correctie, 2), "]%%"); + + $na_correctie_aangevuld_vanuit_j = $na_correctie_aangevuld_vanuit_j + $na_correctie; + $na_correctie_aangevuld_naar = $na_correctie_aangevuld_naar + $na_correctie; + + $na_correctie_uit_opvolgend_jaar_med_j = $na_correctie_uit_opvolgend_jaar_med_j + 1; + $na_correctie_uit_opvolgend_jaar_j = $na_correctie_uit_opvolgend_jaar_j + 1; + + $na_calc_med = $na_calc_med - $na_correctie; + $na_tekort_med = $na_tekort_med - $na_correctie; + $na_calc_tot = $na_calc_tot - $na_correctie; + $na_tekort = $na_tekort - $na_correctie; + + $na_calc_j = hash\get($na_row_j, 'surplus'); + $na_calc_j = $na_calc_j + $na_correctie; + $na_calc_med_j = $na_calc_med_j + $na_correctie; + + $na_row_j = hash\set($na_row_j, 'surplusMedisch', $na_calc_med_j); + $na_row_j = hash\set($na_row_j, 'surplus', $na_calc_j); + $na_row_j = hash\set($na_row_j, 'uitleg_med', $na_uitleg_med_j); + $na_row_j = hash\set($na_row_j, 'uitleg', $na_uitleg_j); + $na_row_j = hash\set($na_row_j, 'tekort_aangevuld_vanuit', $na_tekort_aangevuld_vanuit_j); + $na_row_j = hash\set($na_row_j, 'correctie_aangevuld_vanuit', $na_correctie_aangevuld_vanuit_j); + $na_row_j = hash\set($na_row_j, 'correctie_uit_opvolgend_jaar_med', $na_correctie_uit_opvolgend_jaar_med_j); + $na_row_j = hash\set($na_row_j, 'correctie_uit_opvolgend_jaar', $na_correctie_uit_opvolgend_jaar_j); + $na_rows = array\set($na_rows, $na_j, $na_row_j); + + //logAdd(log, 'jaar:', $na_jaar_j, ', tekort_aangevuld_vanuit: ', $na_tekort_aangevuld_vanuit_j); + ); + ); + ); + + // Klassieke Homeopathie negatieve correcties + // Alleen als er voldoende surplus is om te compenseren. + // We kijken dan niet naar het totaal, want daar ontstaat dan + // vanzelf een verder tekort als dat aan de orde is. + ifThen(($na_calc_hom + $na_norm_hom) > 0, + $na_j = $na_j_first_hom; + $na_row_j = array\at($na_rows, $na_j); + $na_calc_hom_j = hash\get($na_row_j, 'surplusHomeopathie'); + $na_uitleg_hom_j = hash\get($na_row_j, 'uitleg_hom'); + $na_uitleg_j = hash\get($na_row_j, 'uitleg'); + $na_tekort_aangevuld_vanuit_j = hash\get($na_row_j, 'tekort_aangevuld_vanuit'); + $na_correctie_aangevuld_vanuit_j = hash\get($na_row_j, 'correctie_aangevuld_vanuit'); + $na_jaar_j = hash\get($na_row_j, 'jaar'); + $na_correctie_uit_opvolgend_jaar_hom_j = hash\get($na_row_j, 'correctie_uit_opvolgend_jaar_hom'); + $na_correctie_uit_opvolgend_jaar_j = hash\get($na_row_j, 'correctie_uit_opvolgend_jaar'); + while($na_j < $na_i && ($na_calc_hom + $na_norm_hom) > 0, + while($na_j < $na_i && $na_calc_hom_j >= 0, + $na_j = $na_j + 1; + $na_row_j = array\at($na_rows, $na_j); + $na_calc_hom_j = hash\get($na_row_j, 'surplusHomeopathie'); + $na_uitleg_hom_j = hash\get($na_row_j, 'uitleg_hom'); + $na_uitleg_j = hash\get($na_row_j, 'uitleg'); + $na_tekort_aangevuld_vanuit_j = hash\get($na_row_j, 'tekort_aangevuld_vanuit'); + $na_correctie_aangevuld_vanuit_j = hash\get($na_row_j, 'correctie_aangevuld_vanuit'); + $na_jaar_j = hash\get($na_row_j, 'jaar'); + $na_correctie_uit_opvolgend_jaar_hom_j = hash\get($na_row_j, 'correctie_uit_opvolgend_jaar_hom'); + $na_correctie_uit_opvolgend_jaar_j = hash\get($na_row_j, 'correctie_uit_opvolgend_jaar'); + ); + $na_j_first_hom = $na_j; + + ifThen($na_j < $na_i, + ifThen($na_lowest_j > $na_j, $na_lowest_j = $na_j); + $na_correctie = -1 * $na_calc_hom_j; + // Zorg dat niet meer dan het saldo kan worden verrekend + ifThen($na_correctie > ($na_calc_hom + $na_norm_hom), $na_correctie = ($na_calc_hom + $na_norm_hom)); + + strAdd($na_uitleg_hom_j, "[IDagen tekort homeopathie aangevuld vanuit jaar ", $na_jaar, ":I][NI", number\format($na_correctie, 2), "]%%"); + strAdd($na_tekort_aangevuld_vanuit_j, "[IIWaarvan dagen homeopathie vanuit jaar ", $na_jaar, ":I][NII", number\format($na_correctie, 2), "]%%"); + strAdd($na_uitleg_hom, "[IDagen tekort homeopathie aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 2), "]%%"); + strAdd($na_tekort_aangevuld_naar, "[IIWaarvan dagen homeopathie naar jaar ", $na_jaar_j, ":I][NII", number\format($na_correctie, 2), "]%%"); + + $na_correctie_aangevuld_vanuit_j = $na_correctie_aangevuld_vanuit_j + $na_correctie; + $na_correctie_aangevuld_naar = $na_correctie_aangevuld_naar + $na_correctie; + + $na_correctie_uit_opvolgend_jaar_hom_j = $na_correctie_uit_opvolgend_jaar_hom_j + 1; + $na_correctie_uit_opvolgend_jaar_j = $na_correctie_uit_opvolgend_jaar_j + 1; + + $na_calc_hom = $na_calc_hom - $na_correctie; + $na_tekort_hom = $na_tekort_hom - $na_correctie; + $na_calc_tot = $na_calc_tot - $na_correctie; + $na_tekort = $na_tekort - $na_correctie; + + $na_calc_j = hash\get($na_row_j, 'surplus'); + $na_calc_j = $na_calc_j + $na_correctie; + $na_calc_hom_j = $na_calc_hom_j + $na_correctie; + + $na_row_j = hash\set($na_row_j, 'surplusHomeopathie', $na_calc_hom_j); + $na_row_j = hash\set($na_row_j, 'surplus', $na_calc_j); + $na_row_j = hash\set($na_row_j, 'uitleg_hom', $na_uitleg_hom_j); + $na_row_j = hash\set($na_row_j, 'uitleg', $na_uitleg_j); + $na_row_j = hash\set($na_row_j, 'tekort_aangevuld_vanuit', $na_tekort_aangevuld_vanuit_j); + $na_row_j = hash\set($na_row_j, 'correctie_aangevuld_vanuit', $na_correctie_aangevuld_vanuit_j); + $na_row_j = hash\set($na_row_j, 'correctie_uit_opvolgend_jaar_hom', $na_correctie_uit_opvolgend_jaar_hom_j); + $na_row_j = hash\set($na_row_j, 'correctie_uit_opvolgend_jaar', $na_correctie_uit_opvolgend_jaar_j); + $na_rows = array\set($na_rows, $na_j, $na_row_j); + + //$ff = hash\get($na_row_j, 'tekort_aangevuld_vanuit'); + //logAdd(log, 'jaar:', $na_jaar_j, ', tekort_aangevuld_vanuit: ', $na_tekort_aangevuld_vanuit_j, ', ff:', $ff); + ); + ); + ); + + log('warning', 'jaar=', $na_jaar, ', calc_hom=', $na_calc_hom, ', calc_med=', $na_calc_med, ', calc_tot=', $na_calc_tot); + + // Totaal negatieve correcties + // Alleen als er voldoende surplus is om te compenseren. + ifThen(($na_calc_tot + $na_norm) > 0, + $na_j = $na_j_first_tot; + $na_row_j = array\at($na_rows, $na_j); + $na_calc_j = hash\get($na_row_j, 'surplus'); + $na_uitleg_j = hash\get($na_row_j, 'uitleg'); + $na_tekort_aangevuld_vanuit_j = hash\get($na_row_j, 'tekort_aangevuld_vanuit'); + $na_correctie_aangevuld_vanuit_j = hash\get($na_row_j, 'correctie_aangevuld_vanuit'); + $na_jaar_j = hash\get($na_row_j, 'jaar'); + $na_correctie_uit_opvolgend_jaar_j = hash\get($na_row_j, 'correctie_uit_opvolgend_jaar'); + while($na_j < $na_i && ($na_calc_tot + $na_norm) > 0, + while($na_j < $na_i && $na_calc_j >= 0, + $na_j = $na_j + 1; + $na_row_j = array\at($na_rows, $na_j); + $na_calc_j = hash\get($na_row_j, 'surplus'); + $na_uitleg_j = hash\get($na_row_j, 'uitleg'); + $na_tekort_aangevuld_vanuit_j = hash\get($na_row_j, 'tekort_aangevuld_vanuit'); + $na_correctie_aangevuld_vanuit_j = hash\get($na_row_j, 'correctie_aangevuld_vanuit'); + $na_jaar_j = hash\get($na_row_j, 'jaar'); + $na_correctie_uit_opvolgend_jaar_j = hash\get($na_row_j, 'correctie_uit_opvolgend_jaar'); + ); + + $na_j_first_tot = $na_j; + + ifThen($na_j < $na_i, + ifThen($na_lowest_j > $na_j, $na_lowest_j = $na_j); + $na_correctie = -1 * $na_calc_j; + ifThen($na_correctie > ($na_calc_tot + $na_norm), $na_correctie = ($na_calc_tot + $na_norm)); + + strAdd($na_tekort_aangevuld_vanuit_j, "[IIWaarvan nascholingsdagen vanuit jaar ", $na_jaar,":I][NII", number\format($na_correctie, 2), "]%%"); + strAdd($na_tekort_aangevuld_naar, "[IIWaarvan nascholingsdagen naar jaar ", $na_jaar_j, ":I][NII", number\format($na_correctie, 2), "]%%"); + + $na_correctie_aangevuld_vanuit_j = $na_correctie_aangevuld_vanuit_j + $na_correctie; + $na_correctie_aangevuld_naar = $na_correctie_aangevuld_naar + $na_correctie; + + $na_correctie_uit_opvolgend_jaar_j = $na_correctie_uit_opvolgend_jaar_j + 1; + + $na_calc_tot = $na_calc_tot - $na_correctie; + $na_tekort = $na_tekort - $na_correctie; + $na_calc_j = $na_calc_j + $na_correctie; + + $na_row_j = hash\set($na_row_j, 'surplus', $na_calc_j); + $na_row_j = hash\set($na_row_j, 'uitleg', $na_uitleg_j); + $na_row_j = hash\set($na_row_j, 'tekort_aangevuld_vanuit', $na_tekort_aangevuld_vanuit_j); + $na_row_j = hash\set($na_row_j, 'correctie_aangevuld_vanuit', $na_correctie_aangevuld_vanuit_j); + $na_row_j = hash\set($na_row_j, 'correctie_uit_opvolgend_jaar', $na_correctie_uit_opvolgend_jaar_j); + $na_rows = array\set($na_rows, $na_j, $na_row_j); + + //logAdd(log, 'jaar:', $na_jaar_j, ', tekort_aangevuld_vanuit: ', $na_tekort_aangevuld_vanuit_j); + ); + ); + ); + + log('warning', 'jaar=', $na_jaar, ', calc_hom=', $na_calc_hom, ', calc_med=', $na_calc_med, ', calc_tot=', $na_calc_tot); + + ifThen($na_lowest_j == $na_i, + // Kijk nu of er nog dagen meegenomen kunnen worden naar het volgende jaar + + $na_row_prev = array\at($na_rows, $na_i - 1); + $na_calc_hom_prev = hash\get($na_row_prev, 'surplusHomeopathie'); + $na_calc_med_prev = hash\get($na_row_prev, 'surplusMedisch'); + $na_calc_tot_prev = hash\get($na_row_prev, 'surplus'); + + //logAdd(log, 'warning', 'jaar:', $na_jaar, ', MEENEMEN: prev: tot:', $na_calc_tot_prev, ', hom: ', $na_calc_hom_prev, ', med:', $na_calc_med_prev); + + // Pak maximaal de maxMeenemen norm aan dagen over van het voorgaande jaar, als er voldoende dagen zijn. + ifThen($na_calc_tot_prev > 0, + // Oke, we kunnen überhaupt dagen meenemen. + $na_max_mee = $na_max_meenemen; + // Zorg dat we bij het teruggaan in de tijd niet meer meenemen dan in totaal max_meenemen. + // Dus we moeten wat al een keer is meegenomen vasthouden en van het maximum aftrekken. + $na_meegenomen = hash\get($na_row, 'meegenomen'); + $na_meegenomen_hom = hash\get($na_row, 'meegenomen_hom'); + $na_meegenomen_med = hash\get($na_row, 'meegenomen_med'); + $na_max_mee = $na_max_mee - $na_meegenomen; + // Verdeel de dagen tussen medisch en homeopatisch, tenzij de + // voorgaande surplussen niet voldoende zijn, vul dan verder aantal + // met overig + while($na_calc_tot_prev > 0 && $na_max_mee > 0, + // Zo lang huidig medisch surplus < 0 en previous medisch surplus > 0, kies voor medisch + // Anders, zo lang huidig homeopathie surplus < 0 en previous homeopathie surplus > 0, kies voor homeopathie + // Anders, zo lang previous homeopathie surplus / medisch surplus > 0, kies voor med, hom alternerend. + // Anders, zo lang previous homeopathie surplus > 0, kies voor homeopathie + // Anders, zo lang previous medisch surplus > 0, kies voor medisch + // Anders, kies voor overig + ifThenElse($na_calc_med < 0 && $na_calc_med_prev > 0, + $na_hom_med_overig = 'med'; + , + ifThenElse($na_calc_hom < 0 && $na_calc_hom_prev > 0, + $na_hom_med_overig = 'hom'; + , + ifThenElse($na_calc_hom_prev > 0 && $na_calc_med_prev > 0, + ifThenElse($na_hom_med_overig == 'med', + $na_hom_med_overig = 'hom'; + , + $na_hom_med_overig = 'med'; + ); + , + ifThenElse($na_calc_hom_prev > 0, + $na_hom_med_overig = 'hom'; + , + ifThenElse($na_calc_med_prev > 0, + $na_hom_med_overig = 'med'; + , + $na_hom_med_overig = 'overig'; + ); + ); + ); + ); + ); + + log('warning', 'na_hom_med_overig=', $na_hom_med_overig, ', surplus_tot_prev=', $na_calc_tot_prev, ', na_max_mee=', $na_max_mee); + + ifThen($na_hom_med_overig == 'med', + ifThen($na_calc_med_prev > 0, + $na_take = 1; + ifThen($na_calc_med_prev < $na_take, $na_take = $na_calc_med_prev); + ifThen($na_calc_tot_prev < $na_take, + $na_take = $na_calc_tot_prev; + //strAdd($na_uitleg_med, "[EOvername van medische dagen beperkt tot ", number\format($na_take, 2), ', omdat het totaal van vorig jaar ontoereikend isE]%%'); + ); + ifThen($ma_max_mee < $na_take, $na_take = $na_max_mee); + $na_calc_med = $na_calc_med + $na_take; + $na_calc_med_prev = $na_calc_med_prev - $na_take; + $na_calc_tot = $na_calc_tot + $na_take; + $na_calc_tot_prev = $na_calc_tot_prev - $na_take; + $na_max_mee = $na_max_mee - $na_take; + $na_meegenomen = $na_meegenomen + $na_take; + $na_meegenomen_med = $na_meegenomen_med + $na_take; + ); + ); + ifThen($na_hom_med_overig == 'hom', + ifThen($na_calc_hom_prev > 0, + $na_take = 1; + ifThen($na_calc_hom_prev < $na_take, $na_take = $na_calc_hom_prev); + ifThen($na_calc_tot_prev < $na_take, + $na_take = $na_calc_tot_prev; + //strAdd($na_uitleg_hom, "[EOvername van homeopathie dagen beperkt tot ", number\format($na_take, 2), ', omdat het totaal van vorig jaar ontoereikend isE]%%'); + ); + ifThen($ma_max_mee < $na_take, $na_take = $na_max_mee); + $na_calc_hom = $na_calc_hom + $na_take; + $na_calc_hom_prev = $na_calc_hom_prev - $na_take; + $na_calc_tot = $na_calc_tot + $na_take; + $na_calc_tot_prev = $na_calc_tot_prev - $na_take; + $na_max_mee = $na_max_mee - $na_take; + $na_meegenomen = $na_meegenomen + $na_take; + $na_meegenomen_hom = $na_meegenomen_hom + $na_take; + ); + ); + ifThen($na_hom_med_overig == 'overig', + // We weten nu al dat na_calc_tot_prev > 0 + $na_take = 1; + ifThen($na_calc_tot_prev < $na_take, $na_take = $na_calc_tot_prev); + ifThen($ma_max_mee < $na_take, $na_take = $na_max_mee); + $na_calc_tot = $na_calc_tot + $na_take; + $na_calc_tot_prev = $na_calc_tot_prev - $na_take; + $na_max_mee = $na_max_mee - $na_take; + $na_meegenomen = $na_meegenomen + $na_take; + ); + ); + + //logAdd(log, 'warning', 'jaar:', $na_jaar, ', meegenomen: ', $na_meegenomen, ', hom:', $na_meegenomen_hom, ', med:', $na_meegenomen_med); + + $na_row = hash\set($na_row, 'meegenomen', $na_meegenomen); + $na_row = hash\set($na_row, 'meegenomen_hom', $na_meegenomen_hom); + $na_row = hash\set($na_row, 'meegenomen_med', $na_meegenomen_med); + ); + + $na_meegenomen = hash\get($na_row, 'meegenomen'); + $na_meegenomen_hom = hash\get($na_row, 'meegenomen_hom'); + $na_meegenomen_med = hash\get($na_row, 'meegenomen_med'); + //logAdd(log, 'jaar: ', $na_jaar, ', tekort:', $na_tekort, ', meegenomen uit vorig jaar:', $na_meegenomen); + + $na_row_prev = hash\set($na_row_prev, 'surplusHomeopathie', $na_calc_hom_prev); + $na_row_prev = hash\set($na_row_prev, 'surplusMedisch', $na_calc_med_prev); + $na_row_prev = hash\set($na_row_prev, 'surplus', $na_calc_tot_prev); + $na_rows = array\set($na_rows, $na_i - 1, $na_row_prev); + ); + + $na_row = hash\set($na_row, 'surplusHomeopathie', $na_calc_hom); + $na_row = hash\set($na_row, 'surplusMedisch', $na_calc_med); + $na_row = hash\set($na_row, 'surplus', $na_calc_tot); + $na_row = hash\set($na_row, 'uitleg', $na_uitleg); + $na_row = hash\set($na_row, 'uitleg_hom', $na_uitleg_hom); + $na_row = hash\set($na_row, 'uitleg_med', $na_uitleg_med); + $na_row = hash\set($na_row, 'tekort_aangevuld_naar', $na_tekort_aangevuld_naar); + $na_row = hash\set($na_row, 'correctie_aangevuld_naar', $na_correctie_aangevuld_naar); + $na_row = hash\set($na_row, 'correctie_uit_opvolgend_jaar', $na_correctie_uit_opvolgend_jaar); + $na_row = hash\set($na_row, 'correctie_uit_opvolgend_jaar_hom', $na_correctie_uit_opvolgend_jaar_hom); + $na_row = hash\set($na_row, 'correctie_uit_opvolgend_jaar_med', $na_correctie_uit_opvolgend_jaar_med); + $na_row = hash\set($na_row, 'tekort', $na_tekort); + $na_row = hash\set($na_row, 'tekort_hom', $na_tekort_hom); + $na_row = hash\set($na_row, 'tekort_med', $na_tekort_med); + $na_rows = array\set($na_rows, $na_i, $na_row); + + ifThen($na_lowest_j != $na_i, $na_i = $na_lowest_j - 1); + ); + + $na_i = $na_i + 1; +); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Bepaal de uitslag +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$na_i = 0; +$na_jaar_end = 0; +ifThenElse($na_i < $na_n, + $na_row = array\at($na_rows, $na_n - 1); + $na_calc_tot_end = hash\get($na_row, 'surplus'); + $na_calc_hom_end = hash\get($na_row, 'surplusHomeopathie'); + $na_calc_med_end = hash\get($na_row, 'surplusMedisch'); + $na_jaar_end = hash\get($na_row, 'jaar'); +, + $na_calc_tot_end = 0; + $na_calc_hom_end = 0; + $na_calc_med_end = 0; + $na_jaar_end = 0; +); + +log('warning', 'calc_tot_end = ', $na_calc_tot_end, ', calc_hom_end = ', $na_calc_hom_end, ', calc_med_end = ', $na_calc_med_end); + +while($na_i < $na_n, + $na_row = array\at($na_rows, $na_i); + + $na_jaar = hash\get($na_row, 'jaar'); + + $na_uitleg_hom = hash\get($na_row, 'uitleg_hom'); + $na_uitleg_med = hash\get($na_row, 'uitleg_med'); + $na_uitleg_tot = hash\get($na_row, 'uitleg'); + + $na_tekort_aangevuld_naar = hash\get($na_row, 'tekort_aangevuld_naar'); + $na_tekort_aangevuld_vanuit = hash\get($na_row, 'tekort_aangevuld_vanuit'); + $na_correctie_aangevuld_naar = hash\get($na_row, 'correctie_aangevuld_naar'); + $na_correctie_aangevuld_vanuit = hash\get($na_row, 'correctie_aangevuld_vanuit'); + + $na_calc_tot = hash\get($na_row, 'surplus'); + $na_calc_hom = hash\get($na_row, 'surplusHomeopathie'); + $na_calc_med = hash\get($na_row, 'surplusMedisch'); + + $na_mee_tot = hash\get($na_row, 'meegenomen'); + $na_mee_hom = hash\get($na_row, 'meegenomen_hom'); + $na_mee_med = hash\get($na_row, 'meegenomen_med'); + + $na_tekort = -1 * hash\get($na_row, 'tekort'); + $na_tekort_hom = -1 * hash\get($na_row, 'tekort_hom'); + $na_tekort_med = -1 * hash\get($na_row, 'tekort_med'); + + //logAdd(log, 'info', 'jaar:', $na_jaar, ', tekort_hom: ', $na_tekort_hom, ' tekort_med: ', $na_tekort_med, ', tekort_tot: ', $na_tekort); + + // Corrigeer voor het dashboard de tekorten nog met meegenomen uit voorgaande jaren + $na_tekort = $na_tekort - $na_mee_tot; + $na_tekort_hom = $na_tekort_hom - $na_mee_hom; + $na_tekort_med = $na_tekort_med - $na_mee_med; + + $na_dashboard = ''; + $na_dashb_entry_hom = ''; + $na_dashb_entry_med = ''; + $na_dashb_entry_tot = ''; + + ifThenElse($na_i == ($na_n - 1), + $na_mee_tot_next = 0; + $na_mee_hom_next = 0; + $na_mee_med_next = 0; + , + $na_row_next = array\at($na_rows, $na_i + 1); + $na_mee_tot_next = hash\get($na_row_next, 'meegenomen'); + $na_mee_hom_next = hash\get($na_row_next, 'meegenomen_hom'); + $na_mee_med_next = hash\get($na_row_next, 'meegenomen_med'); + ); + + $na_correctie_uit_opvolgend_jaar = hash\get($na_row, 'correctie_uit_opvolgend_jaar'); + $na_correctie_uit_opvolgend_jaar_hom = hash\get($na_row, 'correctie_uit_opvolgend_jaar_hom'); + $na_correctie_uit_opvolgend_jaar_med = hash\get($na_row, 'correctie_uit_opvolgend_jaar_med'); + + // Bepaal of er vóór het einde vanaf deze index nog ergens een surplus is, want + // dan is een negatief eindtotaal niet van toepassing. + //logAdd(log, 'warning', 'jaar = ', $na_jaar, ' - intermediate surplus?'); + $na_j = $na_i; + $has_intermediate_hom_surplus = false; + $has_intermediate_med_surplus = false; + $has_intermediate_tot_surplus = false; + while($na_j < $na_n && !($has_intermediate_hom_surplus && $has_intermediate_med_surplus && $has_intermediate_tot_surplus), + $na_row_j = array\at($na_rows, $na_j); + $na_j_jaar = hash\get($na_row_j, 'jaar'); + $na_j_calc_tot = hash\get($na_row_j, 'surplus'); + $na_j_calc_hom = hash\get($na_row_j, 'surplusHomeopathie'); + $na_j_calc_med = hash\get($na_row_j, 'surplusMedisch'); + $na_j_tekort = hash\get($na_row_j, 'tekort'); + $na_j_tekort_hom = hash\get($na_row_j, 'tekort_hom'); + $na_j_tekort_med = hash\get($na_row_j, 'tekort_med'); + + $has_intermediate_tot_surplus = ($na_j_calc_tot > 0.0 || ($na_j_calc_tot == 0.0 && $na_j_tekort >= 0.0)); + $has_intermediate_hom_surplus = ($na_j_calc_hom > 0.0 || ($na_j_calc_hom == 0.0 && $na_j_tekort_hom >= 0.0)); + $has_intermediate_med_surplus = ($na_j_calc_med > 0.0 || ($na_j_calc_med == 0.0 && $na_j_tekort_med >= 0.0)); + + //logAdd(log, 'info', 'jaar = ', $na_j_jaar, ', calc_tot = ', $na_j_calc_tot, ', tekort = ', $na_j_tekort, ' result = ', $has_intermediate_tot_surplus); + $na_j = $na_j + 1; + ); + //logAdd(log, 'info', 'intermediate surplus = ', $has_intermediate_tot_surplus); + + // Begin met uitleggen + + strAdd($na_uitleg_hom, "[IMeegenomen uit ", $na_jaar - 1, " :][NI", number\format($na_mee_hom, 2), "]%%"); + + ifThenElse($na_i == ($na_n - 1), + strAdd($na_uitleg_hom, "[TGecumuleerde nascholingsuitkomst:][N", number\format($na_calc_hom, 2), "]%%"); + , + strAdd($na_uitleg_hom, "[IDoorgegeven aan ", $na_jaar + 1, " :][NI", number\format(-1 * $na_mee_hom_next, 2), "]%%"); + ifThen($na_calc_hom > 0 && $na_calc_tot <= 0, + strAdd($na_uitleg_hom, "[ESurplus van ", number\format($na_calc_hom, 2), " Homeopathie dagen kunnen niet worden doorgegeven, omdat het totaal ontoereikend isE]%%"); + ); + ); + + ifThenElse($na_tekort_hom <= 0, + ifThenElse($na_calc_hom == 0.0, + $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoendeV]%%"); + $na_status_hom = 'voldoet'; + , + $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoende (surplus: ", number\format($na_calc_hom, 2), ")V]%%"); + $na_status_hom = 'voldoet'; + ); + , + ifThenElse($na_calc_hom >= 0, + $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoende (gecompenseerd)V]%%"); + , + $na_dashb_entry_hom = string\concatenate("[OTotaal Klassieke Homeopathie onvoldoende (tekort: ", number\format(-1 * $na_calc_hom, 2), ")O]%%"); + $na_status_hom = 'voldoet-niet'; + ); + ); + + $na_uitleg_hom = string\concatenate($na_dashb_entry_hom, $na_uitleg_hom); + + ifThenElse($na_jaar >= $na_methode_1_max_jaar, + + strAdd($na_uitleg_med, "[IMeegenomen ", $na_jaar - 1, " :][NI", number\format($na_mee_med, 2), "]%%"); + ifThenElse($na_i == ($na_n - 1), + strAdd($na_uitleg_med, "[TGecumuleerde nascholingsuitkomst:][N", number\format($na_calc_med, 2), "]%%"); + , + strAdd($na_uitleg_med, "[IDoorgegeven aan ", $na_jaar + 1, " :][NI", number\format(-1 * $na_mee_med_next, 2), "]%%"); + ifThen($na_calc_med > 0 && $na_calc_tot <= 0, + strAdd($na_uitleg_med, "[ESurplus van ", number\format($na_calc_med, 2), " Medische dagen kunnen niet worden doorgegeven, omdat het totaal ontoereikend isE]%%"); + ); + ); + + ifThenElse($na_tekort_med <= 0, + ifThenElse($na_calc_med == 0.0, + $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoendeV]%%"); + $na_status_med = 'voldoet'; + , + $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoende (surplus: ", number\format($na_calc_med, 2), ")V]%%"); + $na_status_med = 'voldoet'; + ); + , + ifThenElse($na_calc_med >= 0, + $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoende (gecompenseerd)V]%%"); + $na_status_med = 'voldoet'; + , + $na_dashb_entry_med = string\concatenate("[OTotaal Medisch onvoldoende (tekort: ", number\format(-1 * $na_calc_med, 2), ")O]%%"); + $na_status_hom = 'voldoet-niet'; + ); + ); + + $na_uitleg_med = string\concatenate($na_dashb_entry_med, $na_uitleg_med); + , + $na_dashb_entry_med = '[V - V]%%'; + ); + + log('warning', 'jaar:', $na_jaar, ', tot:', $na_calc_tot, ', correctie:', $na_correctie_uit_opvolgend_jaar, ', na_mee_tot:', $na_mee_tot_next); + + ifThen($na_correctie_aangevuld_naar > 0, + //strAdd($na_uitleg_tot, '[IDagen aangevuld naar jaar ', $na_jaar - 1, ":][NI", number\format(-1 * $na_correctie_aangevuld_naar, 2), ']%%'); + strAdd($na_uitleg_tot, '[IDagen aangevuld naar:][NI', number\format(-1 * $na_correctie_aangevuld_naar, 2), ']%%'); + strAdd($na_uitleg_tot, $na_tekort_aangevuld_naar); + ); + + ifThen($na_correctie_aangevuld_vanuit > 0, + //strAdd($na_uitleg_tot, '[IDagen aangevuld vanuit jaar ', $na_jaar + 1, ":][NI", number\format($na_correctie_aangevuld_vanuit, 2), ']%%'); + strAdd($na_uitleg_tot, '[IDagen aangevuld vanuit:][NI', number\format($na_correctie_aangevuld_vanuit, 2), ']%%'); + strAdd($na_uitleg_tot, $na_tekort_aangevuld_vanuit); + ); + + strAdd($na_uitleg_tot, "[IMeegenomen uit jaar ", $na_jaar - 1, " :][NI", number\format($na_mee_tot, 2), "]%%"); + ifThen($na_mee_hom > 0, + strAdd($na_uitleg_tot, "[IIWaarvan dagen homeopathie:][NII", number\format($na_mee_hom, 2), "]%%"); + ); + ifThen($na_mee_med > 0, + strAdd($na_uitleg_tot, "[IIWaarvan dagen medisch:][NII", number\format($na_mee_med, 2), "]%%"); + ); + + // Dit blijkt nodig te zijn (bug in ESPOCRM?), anders wordt na_mee_tot_hm gewoon niet berekend. + $na_mee_tot_hm = $na_mee_tot; + $na_mee_tot_hm = $na_mee_tot_hm - $na_mee_hom; + $na_mee_tot_hm = $na_mee_tot_hm - $na_mee_med; + + ifThen($na_mee_tot_hm > 0, + strAdd($na_uitleg_tot, "[IIWaarvan dagen nascholing:][NII", number\format($na_mee_tot_hm, 2), "]%%"); + ); + + ifThenElse($na_i == ($na_n - 1), + strAdd($na_uitleg_tot, "[TGecumuleerde nascholingsuitkomst:][N", number\format($na_calc_tot, 2), "]%%"); + , + strAdd($na_uitleg_tot, "[IDoorgegeven aan ", $na_jaar + 1, " :][NI", number\format(-1 * $na_mee_tot_next, 2), "]%%"); + ifThen($na_mee_hom_next > 0, + strAdd($na_uitleg_tot, "[IIWaarvan dagen homeopathie:][NII", number\format($na_mee_hom_next, 2), "]%%"); + ); + ifThen($na_mee_med_next > 0, + strAdd($na_uitleg_tot, "[IIWaarvan dagen medisch:][NII", number\format($na_mee_med_next, 2), "]%%"); + ); + + // Dit blijkt nodig te zijn (bug in ESPOCRM?), anders wordt na_mee_tot_hm_next gewoon niet berekend. + $na_mee_tot_hm_next = $na_mee_tot_next; + $na_mee_tot_hm_next = $na_mee_tot_hm_next - $na_mee_hom_next; + $na_mee_tot_hm_next = $na_mee_tot_hm_next - $na_mee_med_next; + ifThen($na_mee_tot_hm_next > 0, + strAdd($na_uitleg_tot, "[IIWaarvan dagen nascholing:][NII", number\format($na_mee_tot_hm_next, 2), "]%%"); + ); + ); + + ifThenElse($na_tekort <= 0, + ifThenElse($na_calc_tot == 0.0, + $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoendeV]%%"); + $na_status = 'voldoet'; + , + $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoende (surplus: ", number\format($na_calc_tot, 2), ")V]%%"); + $na_status = 'voldoet'; + ); + , + ifThenElse($na_calc_tot >= 0, + $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoende (gecompenseerd)V]%%"); + $na_status = 'voldoet'; + , + $na_dashb_entry_tot = string\concatenate("[ONascholingsdagen onvoldoende (tekort: ", number\format(-1 * $na_calc_tot, 2), ")O]%%"); + $na_status = 'voldoet-niet'; + ); + ); + + $na_uitleg_tot = string\concatenate($na_dashb_entry_tot, $na_uitleg_tot); + + + ifThenElse($na_jaar < $na_methode_1_max_jaar, + $na_dashb_entry_med = string\replace($na_dashb_entry_med, '[V', string\concatenate('')); + $na_dashb_entry_med = string\replace($na_dashb_entry_med, '[O', string\concatenate('')); + , + ifThenElse($na_jaar == $na_methode_1_max_jaar, + $na_dashb_entry_med = string\replace($na_dashb_entry_med, '[V', string\concatenate('')); + $na_dashb_entry_med = string\replace($na_dashb_entry_med, '[O', string\concatenate('')); + , + $na_dashb_entry_med = string\replace($na_dashb_entry_med, '[V', string\concatenate('')); + $na_dashb_entry_med = string\replace($na_dashb_entry_med, '[O', string\concatenate('')); + ) + ); + $na_dashb_entry_hom = string\replace($na_dashb_entry_hom, '[V', string\concatenate('')); + $na_dashb_entry_hom = string\replace($na_dashb_entry_hom, '[O', string\concatenate('')); + $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, '[V', string\concatenate('')); + $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, '[O', string\concatenate('')); + + $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, 'V]%%', ''); + $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, 'O]%%', ''); + $na_dashb_entry_hom = string\replace($na_dashb_entry_hom, 'V]%%', ''); + $na_dashb_entry_hom = string\replace($na_dashb_entry_hom, 'O]%%', ''); + $na_dashb_entry_med = string\replace($na_dashb_entry_med, 'V]%%', ''); + $na_dashb_entry_med = string\replace($na_dashb_entry_med, 'O]%%', ''); + + $na_dashb_entry_hom = string\replace($na_dashb_entry_hom, "Totaal Klassieke Homeopathie", "Kl. Hom."); + $na_dashb_entry_med = string\replace($na_dashb_entry_med, "Totaal Medisch", "Medisch"); + $na_dashb_entry_hom = string\replace($na_dashb_entry_hom, '(surplus: 0,0)', ''); + $na_dashb_entry_med = string\replace($na_dashb_entry_med, '(surplus: 0,0)', ''); + $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, '(surplus: 0,0)', ''); + + $na_dashboard = string\concatenate($na_dashb_entry_hom, $na_dashb_entry_med, $na_dashb_entry_tot); + + $na_row = hash\set($na_row, 'uitleg', $na_uitleg_tot); + $na_row = hash\set($na_row, 'uitleg_hom', $na_uitleg_hom); + $na_row = hash\set($na_row, 'uitleg_med', $na_uitleg_med); + $na_row = hash\set($na_row, 'dashboard', $na_dashboard); + $na_row = hash\set($na_row, 'status', $na_status); + $na_row = hash\set($na_row, 'status_hom', $na_status_hom); + $na_row = hash\set($na_row, 'status_med', $na_status_med); + $na_rows = array\set($na_rows, $na_i, $na_row); + + $na_i = $na_i + 1; +); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Bewerk alle uitleggen +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$na_i = 0; +while($na_i < $na_n, + $na_row = array\at($na_rows, $na_i); + + log('warning', 'na_i=', $na_i, ', got row'); + + $na_jaar = hash\get($na_row, 'jaar'); + $na_bep_rep = 'bepaald'; + + log('warning', 'na_i=', $na_i, ', got jaar=', $na_jaar); + + $na_report = configGet('nascholingstotaal-rapport-jaar'); + $na_report = string\replace($na_report, '%jaar%', toString($na_jaar)); + + $na_report = string\replace($na_report, '%bepaald%', $na_bep_rep); + + $na_uitleg_hom = hash\get($na_row, 'uitleg_hom'); + $na_uitleg_med = hash\get($na_row, 'uitleg_med'); + $na_uitleg_tot = hash\get($na_row, 'uitleg'); + + $na_report = string\replace($na_report, '%tot%', $na_uitleg_tot); + $na_report = string\replace($na_report, '%hom%', $na_uitleg_hom); + ifThenElse($na_jaar >= $na_methode_1_max_jaar, + $na_report = string\replace($na_report, '%med%', $na_uitleg_med); + , + $na_report = string\replace($na_report, '%med%', ''); + ); + + $na_report = string\replace($na_report, '[T', string\concatenate('')); + $na_report = string\replace($na_report, '[S', ''); + $na_report = string\replace($na_report, '[NII', string\concatenate('')); + $na_report = string\replace($na_report, '[NI', string\concatenate('')); + $na_report = string\replace($na_report, '[N', string\concatenate('')); + $na_report = string\replace($na_report, '[V', string\concatenate('')); + $na_report = string\replace($na_report, '[O', string\concatenate('')); + $na_report = string\replace($na_report, '[E', string\concatenate('')); + $na_report = string\replace($na_report, '[W', string\concatenate('')); + $na_report = string\replace($na_report, '[II', string\concatenate('')); + $na_report = string\replace($na_report, '[I', string\concatenate('')); + $na_report = string\replace($na_report, '[R', string\concatenate('')); + $na_report = string\replace($na_report, "O]", ""); + $na_report = string\replace($na_report, "V]", ""); + $na_report = string\replace($na_report, "E]", ""); + $na_report = string\replace($na_report, "W]", ""); + $na_report = string\replace($na_report, "I]", ""); + $na_report = string\replace($na_report, "R]", ""); + $na_report = string\replace($na_report, "]", ""); + $na_report = string\replace($na_report, '%%', '\n'); + + $na_row = hash\set($na_row, 'na_report', $na_report); + $na_rows = array\set($na_rows, $na_i, $na_row); + + $na_i = $na_i + 1; +); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Zet al die totalen weer in de database +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +$na_i = 0; +while($na_i < $na_n, + $na_row = array\at($na_rows, $na_i); + $na_id = hash\get($na_row, 'id'); + $na_calc_tot = hash\get($na_row, 'surplus'); + $na_calc_hom = hash\get($na_row, 'surplusHomeopathie'); + $na_calc_med = hash\get($na_row, 'surplusMedisch'); + $na_dashboard = hash\get($na_row, 'dashboard'); + $na_report = hash\get($na_row, 'na_report'); + + $na_status = hash\get($na_row, 'status'); + $na_status_hom = hash\get($na_row, 'status_hom'); + $na_status_med = hash\get($na_row, 'status_med'); + $na_status_all = $na_status; + + ifThen($na_status_all == 'voldoet-niet-na-saldering', $na_status_all = 'voldoet-niet'); + ifThen($na_status_hom == 'voldoet-niet' || $na_status_hom == 'voldoet-niet-na-saldering', $na_status_all = 'voldoet-niet'); + ifThen($na_status_med == 'voldoet-niet' || $na_status_med == 'voldoet-niet-na-saldering', $na_status_all = 'voldoet-niet'); + ifThen($na_status_all == 'voldoet-na-saldering', $na_status_all = 'voldoet'); + + record\update('Nascholingstotaal', $na_id, + 'surplus', $na_calc_tot, + 'surplusMedisch', $na_calc_med, + 'surplusHomeopathie', $na_calc_hom, + 'dashboard', $na_dashboard, + 'berekeningsuitleg', $na_report, + 'status', $na_status_all + ); + + $na_i = $na_i + 1; +); + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Klaar. +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +global\unset($na_in_calc_key, true); diff --git a/code-current/archive/script-bereken-nascholingstotalen.js.pdf b/code-current/archive/script-bereken-nascholingstotalen.js.pdf new file mode 100644 index 0000000..4bb4bee Binary files /dev/null and b/code-current/archive/script-bereken-nascholingstotalen.js.pdf differ diff --git a/code-current/archive/script-lees-nascholingsnorm-hash.js b/code-current/archive/script-lees-nascholingsnorm-hash.js new file mode 100644 index 0000000..591912a --- /dev/null +++ b/code-current/archive/script-lees-nascholingsnorm-hash.js @@ -0,0 +1,32 @@ +//exec last execution: Mon Jul 13 2020 17:57:38 GMT+0200 (Midden-Europese zomertijd) + +$sln_rows = record\fetchManyHash('Nascholingsnorm', 'name, id, jaar, dagen, dagenMedisch, dagenHomeopathie, meeneemNorm, regiocode', 'createdAt', 'asc'); + +$sln_i = 0; +$sln_n = array\length($sln_rows); +$sln_hash = hash\new(); +$sln_hash_id = hash\new(); + +while($sln_i < $sln_n, + $sln_row = array\at($sln_rows, $sln_i); + + $jaar = hash\get($sln_row, 'jaar'); + $id = hash\get($sln_row, 'id'); + $regiocode = hash\get($sln_row, 'regiocode'); + $jaar = $jaar + 0; + + $key = $jaar; + ifThen($regiocode != '-', + $key = string\concatenate($jaar, '-', $regiocode); + ); + + $sln_hash = hash\set($sln_hash, $key, $sln_row); + $sln_hash_id = hash\set($sln_hash_id, $id, $sln_row); + + $sln_i = $sln_i + 1; +); + +global\set('nascholingsnorm-hash', $sln_hash); +global\set('nascholingsnorm-hash-by-id', $sln_hash_id); + +logAdd(log, '#nascholingsnormen gelezen: ', $sln_n);