diff --git a/Berekening Nieuw.xlsx b/Berekening Nieuw.xlsx
new file mode 100644
index 0000000..0f7d43d
Binary files /dev/null and b/Berekening Nieuw.xlsx differ
diff --git a/Issue 3144 - github/Query after possible fix.docx b/Issue 3144 - github/Query after possible fix.docx
new file mode 100644
index 0000000..78e3d11
Binary files /dev/null and b/Issue 3144 - github/Query after possible fix.docx differ
diff --git a/Issue 3144 - github/Query after possible fix.pdf b/Issue 3144 - github/Query after possible fix.pdf
new file mode 100644
index 0000000..2ddc662
Binary files /dev/null and b/Issue 3144 - github/Query after possible fix.pdf differ
diff --git a/Issue 3144 - github/Query speed with only name, only email, and possible fix.pdf b/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/Issue 3144 - github/Query speed with only name, only email, and possible fix.pdf differ
diff --git a/Issue 3144 - github/Slow Query + Explain of planner in Adminer.pdf b/Issue 3144 - github/Slow Query + Explain of planner in Adminer.pdf
new file mode 100644
index 0000000..fd74cd1
Binary files /dev/null and b/Issue 3144 - github/Slow Query + Explain of planner in Adminer.pdf differ
diff --git a/Issue 3144 - github/With only the name as duplicate check fiel1.pdf b/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/Issue 3144 - github/With only the name as duplicate check fiel1.pdf differ
diff --git a/Issue 3144 - github/With only the name as duplicate check field.pdf b/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/Issue 3144 - github/With only the name as duplicate check field.pdf differ
diff --git a/Issue 3144 - github/duplicate-check-email-only.log b/Issue 3144 - github/duplicate-check-email-only.log
new file mode 100644
index 0000000..a787471
--- /dev/null
+++ b/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/Issue 3144 - github/duplicate-check-name-and-email-with-fix.log b/Issue 3144 - github/duplicate-check-name-and-email-with-fix.log
new file mode 100644
index 0000000..be49a13
--- /dev/null
+++ b/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/Issue 3144 - github/duplicate-check-name-only.log b/Issue 3144 - github/duplicate-check-name-only.log
new file mode 100644
index 0000000..56aa8d0
--- /dev/null
+++ b/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/Issue 3144 - github/duplicate-queries-with-patch.docx b/Issue 3144 - github/duplicate-queries-with-patch.docx
new file mode 100644
index 0000000..5feb893
Binary files /dev/null and b/Issue 3144 - github/duplicate-queries-with-patch.docx differ
diff --git a/Issue 3144 - github/duplicate-queries-with-patch.log b/Issue 3144 - github/duplicate-queries-with-patch.log
new file mode 100644
index 0000000..cb6cb62
--- /dev/null
+++ b/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/Issue 3144 - github/duplicate-queries-with-patch.pdf b/Issue 3144 - github/duplicate-queries-with-patch.pdf
new file mode 100644
index 0000000..49cbc15
Binary files /dev/null and b/Issue 3144 - github/duplicate-queries-with-patch.pdf differ
diff --git a/Issue 3144 - github/log-of-creation-of-contact-check-for-duplicates-slow-query.log b/Issue 3144 - github/log-of-creation-of-contact-check-for-duplicates-slow-query.log
new file mode 100644
index 0000000..9e35d5f
--- /dev/null
+++ b/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/Issue 3144 - github/log-of-creation-of-contact-check-for-duplicates.log b/Issue 3144 - github/log-of-creation-of-contact-check-for-duplicates.log
new file mode 100644
index 0000000..3ee41db
--- /dev/null
+++ b/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/Issue 3145 - github & forum/issue_3145.png b/Issue 3145 - github & forum/issue_3145.png
new file mode 100644
index 0000000..7c30afc
Binary files /dev/null and b/Issue 3145 - github & forum/issue_3145.png differ
diff --git a/Nascholingsberekeningen v2.docx b/Nascholingsberekeningen v2.docx
new file mode 100644
index 0000000..8e4bd91
Binary files /dev/null and b/Nascholingsberekeningen v2.docx differ
diff --git a/Nascholingsberekeningen zoals geĆÆmplementeerd.docx b/Nascholingsberekeningen zoals geĆÆmplementeerd.docx
new file mode 100644
index 0000000..0ab7536
Binary files /dev/null and b/Nascholingsberekeningen zoals geĆÆmplementeerd.docx differ
diff --git a/Nascholingsberekeningen.docx b/Nascholingsberekeningen.docx
new file mode 100644
index 0000000..c42dfd0
Binary files /dev/null and b/Nascholingsberekeningen.docx differ
diff --git a/Nascholingsberekeningen.pptx b/Nascholingsberekeningen.pptx
new file mode 100644
index 0000000..c5b5160
Binary files /dev/null and b/Nascholingsberekeningen.pptx differ
diff --git a/Normlijst.xlsx b/Normlijst.xlsx
new file mode 100644
index 0000000..5713b8c
Binary files /dev/null and b/Normlijst.xlsx differ
diff --git a/code current/Bereken totaal voor ƩƩn lid.js b/code current/Bereken totaal voor ƩƩn lid.js
new file mode 100644
index 0000000..f268ace
--- /dev/null
+++ b/code current/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/script leden met onvoldoende nascholing.js b/code current/script leden met onvoldoende nascholing.js
new file mode 100644
index 0000000..081f2d7
--- /dev/null
+++ b/code current/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/script-bereken-nascholingstotaal-voor-jaar.js b/code current/script-bereken-nascholingstotaal-voor-jaar.js
new file mode 100644
index 0000000..5f61303
--- /dev/null
+++ b/code current/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/script-bereken-nascholingstotalen 2023-03-07.js b/code current/script-bereken-nascholingstotalen 2023-03-07.js
new file mode 100644
index 0000000..11521ad
--- /dev/null
+++ b/code current/script-bereken-nascholingstotalen 2023-03-07.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/script-bereken-nascholingstotalen 2023-11-09-11h47 kopie.js b/code current/script-bereken-nascholingstotalen 2023-11-09-11h47 kopie.js
new file mode 100644
index 0000000..7de5795
--- /dev/null
+++ b/code current/script-bereken-nascholingstotalen 2023-11-09-11h47 kopie.js
@@ -0,0 +1,859 @@
+//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_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, 1), ']%%');
+
+ ifThenElse($na_jaar > $na_methode_1_max_jaar,
+ strAdd($na_uitleg_med, '[IDagen gevolgd :I][NI', number\format($na_dagen_med, 1), ']%%');
+ strAdd($na_uitleg, '[IDagen Overig gevolgd :I][NI', number\format($na_overig, 1), ']%%');
+ strAdd($na_uitleg, '[IDagen Klassieke Homeopathie gevolgd :I][NI', number\format($na_dagen_hom, 1), ']%%');
+ strAdd($na_uitleg, '[IDagen Medisch gevolgd :I][NI', number\format($na_dagen_med, 1), ']%%');
+ strAdd($na_uitleg, '[IDagen Werkgroep :I][NI', number\format($na_werkgroep, 1), ']%%');
+ ifThen($na_vrijstelling > 0,
+ strAdd($na_uitleg, '[IDagen Vrijstelling :I][NI', number\format($na_vrijstelling, 1), ']%%');
+ );
+ ifThen($na_start_surplus > 0,
+ strAdd($na_uitleg, '[IDagen Start Surplus :I][NI', number\format($na_start_surplus, 1), ']%%');
+ );
+ strAdd($na_uitleg, '[TNascholingsdagen :I][N', number\format($na_dagen, 1), ']%%');
+ ,
+ ifThen($na_vrijstelling > 0,
+ strAdd($na_uitleg_hom, '[IDagen Vrijstelling :I][NI', number\format($na_vrijstelling, 1), ']%%');
+ );
+ ifThen($na_start_surplus > 0,
+ strAdd($na_uitleg_hom, '[IDagen Start Surplus :I][NI', number\format($na_start_surplus, 1), ']%%');
+ );
+ );
+
+ $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, 1), ']%%');
+ ifThen($na_jaar > $na_methode_1_max_jaar,
+ strAdd($na_uitleg_med, '[INorm Medisch :I][NI', number\format($na_norm_med, 1), ']%%');
+ strAdd($na_uitleg, '[INorm Nascholingsdagen :I][NI', number\format($na_norm, 1), ']%%');
+ );
+
+ strAdd($na_uitleg_hom, '[TSaldo :I][N', number\format($na_calc_hom, 1), ']%%');
+ ifThen($na_jaar > $na_methode_1_max_jaar,
+ strAdd($na_uitleg_med, '[TSaldo :I][N', number\format($na_calc_med, 1), ']%%');
+ strAdd($na_uitleg, '[TSaldo :I][N', number\format($na_calc_tot, 1), ']%%');
+ );
+
+ $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 eenvoudige berekeningsmethode toe. Eerst tellen we gewoon door, zonder te corrigeren
+// 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_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 = 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;
+
+ // Klassieke Homeopathie negatieve correcties
+ $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_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,
+ 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_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;
+
+ strAdd($na_uitleg_hom_j, "[IDagen tekort homeopathie aangevuld vanuit jaar ", $na_jaar, ":I][NI", number\format($na_correctie, 1), "]%%");
+ strAdd($na_uitleg_j, "[IDagen tekort homeopathie aangevuld vanuit jaar ", $na_jaar, ":I][NI", number\format($na_correctie, 1), "]%%");
+ strAdd($na_uitleg_hom, "[IDagen tekort homeopathie aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 1), "]%%");
+ strAdd($na_uitleg, "[IDagen tekort homeopathie aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 1), "]%%");
+
+ $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, '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);
+ );
+ );
+
+ log('warning', 'jaar=', $na_jaar, ', calc_hom=', $na_calc_hom, ', calc_med=', $na_calc_med, ', calc_tot=', $na_calc_tot);
+
+ // Medisch negatieve correcties
+ $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_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,
+ 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_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;
+
+ ifThen($na_j < $na_i,
+ ifThen($na_lowest_j > $na_j, $na_lowest_j = $na_j);
+ $na_correctie = -1 * $na_calc_med_j;
+
+ strAdd($na_uitleg_med_j, "[IDagen tekort medisch aangevuld vanuit jaar ", $na_jaar, ":I][NI", number\format($na_correctie, 1), "]%%");
+ strAdd($na_uitleg_j, "[IDagen tekort medisch aangevuld vanuit jaar ", $na_jaar, ":][NI", number\format($na_correctie, 1), "]%%");
+ strAdd($na_uitleg_med, "[IDagen tekort medisch aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 1), "]%%");
+ strAdd($na_uitleg, "[IDagen tekort medisch aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 1), "]%%");
+
+ $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, '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);
+ );
+ );
+
+ log('warning', 'jaar=', $na_jaar, ', calc_hom=', $na_calc_hom, ', calc_med=', $na_calc_med, ', calc_tot=', $na_calc_tot);
+
+ // Totaal negatieve correcties
+ $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_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,
+ 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_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;
+
+ strAdd($na_uitleg_j, "[IDagen tekort nascholingsdagen aangevuld vanuit jaar ", $na_jaar, ":I][NI", number\format($na_correctie, 1), "]%%");
+ strAdd($na_uitleg, "[IDagen tekort nascholingsdagen aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 1), "]%%");
+
+ $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, 'correctie_uit_opvolgend_jaar', $na_correctie_uit_opvolgend_jaar_j);
+ $na_rows = array\set($na_rows, $na_j, $na_row_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_hom, "[EOvername van medische dagen beperkt tot", number\format($na_take, 1), ', omdat het totaal van vorig jaar ontoereikend isE]%%');
+ );
+ $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, 1), ', omdat het totaal van vorig jaar ontoereikend isE]%%');
+ );
+ $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);
+ $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, '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_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, ', na_tekort_hom:', $na_tekort_hom, ' na_mee_hom:', $na_mee_hom);
+
+ // 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);
+
+ strAdd($na_uitleg_hom, "[IMeegenomen uit vorig jaar:][NI", number\format($na_mee_hom, 1), "]%%");
+
+ ifThenElse($na_i == ($na_n - 1),
+ strAdd($na_uitleg_hom, "[TGecumuleerde nascholingsuitkomst:][N", number\format($na_calc_hom, 1), "]%%");
+ ,
+ strAdd($na_uitleg_hom, "[IDoorgegeven aan volgend jaar:][NI", number\format(-1 * $na_mee_hom_next, 1), "]%%");
+ ifThen($na_calc_hom > 0 && $na_calc_tot <= 0,
+ strAdd($na_uitleg_hom, "[ESurplus van ", number\format($na_calc_hom, 1), " Homeopathie dagen kunnen niet worden doorgegeven, omdat het totaal ontoereikend isE]%%");
+ );
+ );
+
+ ifThenElse($na_calc_hom >= 0 && $na_correctie_uit_opvolgend_jaar_hom < 1,
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoende (surplus: ", number\format($na_calc_hom, 1), ")V]%%");
+ $na_status_hom = 'voldoet';
+ ,
+ ifThenElse($na_correctie_uit_opvolgend_jaar_hom >= 1 && $na_calc_hom_end < 0,
+ ifThenElse($na_mee_hom_next > 0 || $has_intermediate_hom_surplus,
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoende (surplus: ", number\format($na_calc_hom, 1), ")V]%%");
+ $na_status_hom = 'voldoet-na-saldering';
+ ,
+ ifThenElse($na_calc_hom_end == -1.0, $na_dg = 'dag'; $na_dig = 0, $na_dg = 'dagen'; $na_dig = 1);
+ strAdd($na_uitleg_hom, '[EEr is aangevuld vanuit het opvolgend jaar, opgestapeld tekort: ', number\format($na_tekort_hom, 1),
+ '
Het eindresultaat is een tekort van ', number\format(-1 * $na_calc_hom_end, $na_dig) ,' ', $na_dg, ' in ', toString($na_jaar_end) , 'E]%%');
+ $na_dashb_entry_hom = string\concatenate("[OTotaal Klassieke Homeopathie onvoldoende (tekort: ", number\format($na_tekort_hom, 1), ")O]%%");
+ $na_status_hom = 'voldoet-niet-na-saldering';
+ )
+ ,
+ ifThenElse($na_calc_hom < 0,
+ $na_dashb_entry_hom = string\concatenate("[OTotaal Klassieke Homeopathie onvoldoende (tekort: ", number\format($na_tekort_hom, 1), ")O]%%");
+ $na_status_hom = 'voldoet-niet';
+ ,
+ strAdd($na_uitleg_hom, '[RTekorten zijn aangevuld vanuit opvolgende jarenR]%%');
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoendeV]%%");
+ $na_status_hom = 'voldoet-na-saldering';
+ );
+ );
+ );
+ $na_uitleg_hom = string\concatenate($na_dashb_entry_hom, $na_uitleg_hom);
+
+
+ ifThen($na_jaar > $na_methode_1_max_jaar,
+
+ strAdd($na_uitleg_med, "[IMeegenomen uit vorig jaar:][NI", number\format($na_mee_med, 1), "]%%");
+ ifThenElse($na_i == ($na_n - 1),
+ strAdd($na_uitleg_med, "[TGecumuleerde nascholingsuitkomst:][N", number\format($na_calc_med, 1), "]%%");
+ ,
+ strAdd($na_uitleg_med, "[IDoorgegeven aan volgend jaar:][NI", number\format(-1 * $na_mee_med_next, 1), "]%%");
+ ifThen($na_calc_med > 0 && $na_calc_tot <= 0,
+ strAdd($na_uitleg_med, "[ESurplus van ", number\format($na_calc_med, 1), " Medische dagen kunnen niet worden doorgegeven, omdat het totaal ontoereikend isE]%%");
+ );
+ );
+
+ ifThenElse($na_calc_med >= 0 && $na_correctie_uit_opvolgend_jaar_med < 1,
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoende (surplus: ", number\format($na_calc_med, 1), ")V]%%");
+ $na_status_med = 'voldoet';
+ ,
+ ifThenElse($na_correctie_uit_opvolgend_jaar_med >= 1 && $na_calc_med_end < 0,
+ ifThenElse($na_mee_med_next > 0 || $has_intermediate_med_surplus,
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoende (surplus: ", number\format($na_calc_med, 1), ")V]%%");
+ $na_status_med = 'voldoet-na-saldering';
+ ,
+ ifThenElse($na_calc_med_end == -1.0, $na_dg = 'dag'; $na_dig = 0, $na_dg = 'dagen'; $na_dig = 1);
+ strAdd($na_uitleg_med, '[EEr is aangevuld vanuit het opvolgend jaar, opgestapeld tekort: ', number\format($na_tekort_med, 1),
+ '
Het eindresultaat is een tekort van ', number\format(-1 * $na_calc_med_end, $na_dig) ,' ', $na_dg, ' in ', toString($na_jaar_end) , 'E]%%');
+ $na_dashb_entry_med = string\concatenate("[OTotaal Medisch onvoldoende (tekort: ", number\format($na_tekort_med, 1), ")O]%%");
+ $na_status_hom = 'voldoet-niet-na-saldering';
+ )
+ ,
+ ifThenElse($na_calc_med < 0,
+ $na_dashb_entry_med = string\concatenate("[OTotaal Medisch onvoldoende (tekort: ", number\format($na_tekort_med, 1), ")O]%%");
+ $na_status_hom = 'voldoet-niet';
+ ,
+ strAdd($na_uitleg_med, '[RTekorten zijn aangevuld vanuit opvolgende jarenR]%%');
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoendeV]%%");
+ $na_status_hom = 'voldoet-na-saldering';
+ );
+ );
+ );
+ $na_uitleg_med = string\concatenate($na_dashb_entry_med, $na_uitleg_med);
+
+ log('warning', 'jaar:', $na_jaar, ', tot:', $na_calc_tot, ', correctie:', $na_correctie_uit_opvolgend_jaar, ', na_mee_tot:', $na_mee_tot_next);
+
+ strAdd($na_uitleg_tot, "[IMeegenomen uit vorig jaar:][NI", number\format($na_mee_tot, 1), "]%%");
+ ifThen($na_mee_hom > 0,
+ strAdd($na_uitleg_tot, "[IIWaarvan dagen homeopathie:][NII", number\format($na_mee_hom, 1), "]%%");
+ );
+ ifThen($na_mee_med > 0,
+ strAdd($na_uitleg_tot, "[IIWaarvan dagen medisch:][NII", number\format($na_mee_med, 1), "]%%");
+ );
+ ifThenElse($na_i == ($na_n - 1),
+ strAdd($na_uitleg_tot, "[TGecumuleerde nascholingsuitkomst:][N", number\format($na_calc_tot, 1), "]%%");
+ ,
+ strAdd($na_uitleg_tot, "[IDoorgegeven aan volgend jaar:][NI", number\format(-1 * $na_mee_tot_next, 1), "]%%");
+ ifThen($na_mee_hom_next > 0,
+ strAdd($na_uitleg_tot, "[IIWaarvan dagen homeopathie:][NII", number\format($na_mee_hom_next, 1), "]%%");
+ );
+ ifThen($na_mee_med_next > 0,
+ strAdd($na_uitleg_tot, "[IIWaarvan dagen medisch:][NII", number\format($na_mee_med_next, 1), "]%%");
+ );
+ );
+
+ ifThenElse($na_calc_tot >= 0 && $na_correctie_uit_opvolgend_jaar < 1,
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoende (surplus: ", number\format($na_calc_tot, 1), ")V]%%");
+ $na_status = 'voldoet';
+ ,
+ ifThenElse($na_correctie_uit_opvolgend_jaar >= 1 && $na_calc_tot_end < 0,
+ ifThenElse($na_mee_tot_next > 0 || $has_intermediate_tot_surplus,
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoende (surplus: ", number\format($na_calc_tot, 1), ")V]%%");
+ $na_status = 'voldoet-na-saldering';
+ ,
+ ifThenElse($na_calc_tot_end == -1.0, $na_dg = 'dag'; $na_dig = 0, $na_dg = 'dagen'; $na_dig = 1);
+ strAdd($na_uitleg_tot, '[EEr is aangevuld vanuit het opvolgend jaar, opgestapeld tekort: ', number\format($na_tekort, 1),
+ '
Het eindresultaat is een tekort van ', number\format(-1 * $na_calc_tot_end, $na_dig) ,' ', $na_dg, ' in ', toString($na_jaar_end) , 'E]%%');
+ $na_dashb_entry_tot = string\concatenate("[ONascholingsdagen onvoldoende (tekort: ", number\format($na_tekort, 1), ")O]%%");
+ $na_status = 'voldoet-niet-na-saldering';
+ )
+ ,
+ ifThenElse($na_calc_tot < 0,
+ $na_dashb_entry_tot = string\concatenate("[ONascholingsdagen onvoldoende (tekort: ", number\format($na_tekort, 1), ")O]%%");
+ $na_status = 'voldoet-niet';
+ ,
+ strAdd($na_uitleg_tot, '[RTekorten zijn aangevuld vanuit opvolgende jarenR]%%');
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoendeV]%%");
+ $na_status = 'voldoet-na-saldering';
+ );
+ );
+ );
+
+ $na_uitleg_tot = string\concatenate($na_dashb_entry_tot, $na_uitleg_tot);
+
+ );
+
+ ifThen($na_jaar <= $na_methode_1_max_jaar,
+ $na_status = $na_status_hom;
+ $na_status_med = $na_status_hom;
+ );
+
+ ifThenElse($na_jaar <= $na_methode_1_max_jaar,
+ $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, '[V', string\concatenate(''));
+ $na_dashb_entry_med = string\replace($na_dashb_entry_med, '[V', string\concatenate(''));
+ ,
+ $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, '[V', string\concatenate(''));
+ $na_dashb_entry_med = string\replace($na_dashb_entry_med, '[V', string\concatenate(''));
+ $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, '[O', 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]%%', '');
+ $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, '%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, '%tot%', $na_uitleg_tot);
+ ,
+ $na_report = string\replace($na_report, '%med%', '');
+ $na_report = string\replace($na_report, '%tot%', '');
+ );
+
+ $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/script-bereken-nascholingstotalen 2023-11-09-11h47.js b/code current/script-bereken-nascholingstotalen 2023-11-09-11h47.js
new file mode 100644
index 0000000..7de5795
--- /dev/null
+++ b/code current/script-bereken-nascholingstotalen 2023-11-09-11h47.js
@@ -0,0 +1,859 @@
+//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_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, 1), ']%%');
+
+ ifThenElse($na_jaar > $na_methode_1_max_jaar,
+ strAdd($na_uitleg_med, '[IDagen gevolgd :I][NI', number\format($na_dagen_med, 1), ']%%');
+ strAdd($na_uitleg, '[IDagen Overig gevolgd :I][NI', number\format($na_overig, 1), ']%%');
+ strAdd($na_uitleg, '[IDagen Klassieke Homeopathie gevolgd :I][NI', number\format($na_dagen_hom, 1), ']%%');
+ strAdd($na_uitleg, '[IDagen Medisch gevolgd :I][NI', number\format($na_dagen_med, 1), ']%%');
+ strAdd($na_uitleg, '[IDagen Werkgroep :I][NI', number\format($na_werkgroep, 1), ']%%');
+ ifThen($na_vrijstelling > 0,
+ strAdd($na_uitleg, '[IDagen Vrijstelling :I][NI', number\format($na_vrijstelling, 1), ']%%');
+ );
+ ifThen($na_start_surplus > 0,
+ strAdd($na_uitleg, '[IDagen Start Surplus :I][NI', number\format($na_start_surplus, 1), ']%%');
+ );
+ strAdd($na_uitleg, '[TNascholingsdagen :I][N', number\format($na_dagen, 1), ']%%');
+ ,
+ ifThen($na_vrijstelling > 0,
+ strAdd($na_uitleg_hom, '[IDagen Vrijstelling :I][NI', number\format($na_vrijstelling, 1), ']%%');
+ );
+ ifThen($na_start_surplus > 0,
+ strAdd($na_uitleg_hom, '[IDagen Start Surplus :I][NI', number\format($na_start_surplus, 1), ']%%');
+ );
+ );
+
+ $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, 1), ']%%');
+ ifThen($na_jaar > $na_methode_1_max_jaar,
+ strAdd($na_uitleg_med, '[INorm Medisch :I][NI', number\format($na_norm_med, 1), ']%%');
+ strAdd($na_uitleg, '[INorm Nascholingsdagen :I][NI', number\format($na_norm, 1), ']%%');
+ );
+
+ strAdd($na_uitleg_hom, '[TSaldo :I][N', number\format($na_calc_hom, 1), ']%%');
+ ifThen($na_jaar > $na_methode_1_max_jaar,
+ strAdd($na_uitleg_med, '[TSaldo :I][N', number\format($na_calc_med, 1), ']%%');
+ strAdd($na_uitleg, '[TSaldo :I][N', number\format($na_calc_tot, 1), ']%%');
+ );
+
+ $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 eenvoudige berekeningsmethode toe. Eerst tellen we gewoon door, zonder te corrigeren
+// 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_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 = 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;
+
+ // Klassieke Homeopathie negatieve correcties
+ $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_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,
+ 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_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;
+
+ strAdd($na_uitleg_hom_j, "[IDagen tekort homeopathie aangevuld vanuit jaar ", $na_jaar, ":I][NI", number\format($na_correctie, 1), "]%%");
+ strAdd($na_uitleg_j, "[IDagen tekort homeopathie aangevuld vanuit jaar ", $na_jaar, ":I][NI", number\format($na_correctie, 1), "]%%");
+ strAdd($na_uitleg_hom, "[IDagen tekort homeopathie aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 1), "]%%");
+ strAdd($na_uitleg, "[IDagen tekort homeopathie aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 1), "]%%");
+
+ $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, '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);
+ );
+ );
+
+ log('warning', 'jaar=', $na_jaar, ', calc_hom=', $na_calc_hom, ', calc_med=', $na_calc_med, ', calc_tot=', $na_calc_tot);
+
+ // Medisch negatieve correcties
+ $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_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,
+ 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_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;
+
+ ifThen($na_j < $na_i,
+ ifThen($na_lowest_j > $na_j, $na_lowest_j = $na_j);
+ $na_correctie = -1 * $na_calc_med_j;
+
+ strAdd($na_uitleg_med_j, "[IDagen tekort medisch aangevuld vanuit jaar ", $na_jaar, ":I][NI", number\format($na_correctie, 1), "]%%");
+ strAdd($na_uitleg_j, "[IDagen tekort medisch aangevuld vanuit jaar ", $na_jaar, ":][NI", number\format($na_correctie, 1), "]%%");
+ strAdd($na_uitleg_med, "[IDagen tekort medisch aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 1), "]%%");
+ strAdd($na_uitleg, "[IDagen tekort medisch aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 1), "]%%");
+
+ $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, '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);
+ );
+ );
+
+ log('warning', 'jaar=', $na_jaar, ', calc_hom=', $na_calc_hom, ', calc_med=', $na_calc_med, ', calc_tot=', $na_calc_tot);
+
+ // Totaal negatieve correcties
+ $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_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,
+ 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_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;
+
+ strAdd($na_uitleg_j, "[IDagen tekort nascholingsdagen aangevuld vanuit jaar ", $na_jaar, ":I][NI", number\format($na_correctie, 1), "]%%");
+ strAdd($na_uitleg, "[IDagen tekort nascholingsdagen aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 1), "]%%");
+
+ $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, 'correctie_uit_opvolgend_jaar', $na_correctie_uit_opvolgend_jaar_j);
+ $na_rows = array\set($na_rows, $na_j, $na_row_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_hom, "[EOvername van medische dagen beperkt tot", number\format($na_take, 1), ', omdat het totaal van vorig jaar ontoereikend isE]%%');
+ );
+ $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, 1), ', omdat het totaal van vorig jaar ontoereikend isE]%%');
+ );
+ $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);
+ $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, '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_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, ', na_tekort_hom:', $na_tekort_hom, ' na_mee_hom:', $na_mee_hom);
+
+ // 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);
+
+ strAdd($na_uitleg_hom, "[IMeegenomen uit vorig jaar:][NI", number\format($na_mee_hom, 1), "]%%");
+
+ ifThenElse($na_i == ($na_n - 1),
+ strAdd($na_uitleg_hom, "[TGecumuleerde nascholingsuitkomst:][N", number\format($na_calc_hom, 1), "]%%");
+ ,
+ strAdd($na_uitleg_hom, "[IDoorgegeven aan volgend jaar:][NI", number\format(-1 * $na_mee_hom_next, 1), "]%%");
+ ifThen($na_calc_hom > 0 && $na_calc_tot <= 0,
+ strAdd($na_uitleg_hom, "[ESurplus van ", number\format($na_calc_hom, 1), " Homeopathie dagen kunnen niet worden doorgegeven, omdat het totaal ontoereikend isE]%%");
+ );
+ );
+
+ ifThenElse($na_calc_hom >= 0 && $na_correctie_uit_opvolgend_jaar_hom < 1,
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoende (surplus: ", number\format($na_calc_hom, 1), ")V]%%");
+ $na_status_hom = 'voldoet';
+ ,
+ ifThenElse($na_correctie_uit_opvolgend_jaar_hom >= 1 && $na_calc_hom_end < 0,
+ ifThenElse($na_mee_hom_next > 0 || $has_intermediate_hom_surplus,
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoende (surplus: ", number\format($na_calc_hom, 1), ")V]%%");
+ $na_status_hom = 'voldoet-na-saldering';
+ ,
+ ifThenElse($na_calc_hom_end == -1.0, $na_dg = 'dag'; $na_dig = 0, $na_dg = 'dagen'; $na_dig = 1);
+ strAdd($na_uitleg_hom, '[EEr is aangevuld vanuit het opvolgend jaar, opgestapeld tekort: ', number\format($na_tekort_hom, 1),
+ '
Het eindresultaat is een tekort van ', number\format(-1 * $na_calc_hom_end, $na_dig) ,' ', $na_dg, ' in ', toString($na_jaar_end) , 'E]%%');
+ $na_dashb_entry_hom = string\concatenate("[OTotaal Klassieke Homeopathie onvoldoende (tekort: ", number\format($na_tekort_hom, 1), ")O]%%");
+ $na_status_hom = 'voldoet-niet-na-saldering';
+ )
+ ,
+ ifThenElse($na_calc_hom < 0,
+ $na_dashb_entry_hom = string\concatenate("[OTotaal Klassieke Homeopathie onvoldoende (tekort: ", number\format($na_tekort_hom, 1), ")O]%%");
+ $na_status_hom = 'voldoet-niet';
+ ,
+ strAdd($na_uitleg_hom, '[RTekorten zijn aangevuld vanuit opvolgende jarenR]%%');
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoendeV]%%");
+ $na_status_hom = 'voldoet-na-saldering';
+ );
+ );
+ );
+ $na_uitleg_hom = string\concatenate($na_dashb_entry_hom, $na_uitleg_hom);
+
+
+ ifThen($na_jaar > $na_methode_1_max_jaar,
+
+ strAdd($na_uitleg_med, "[IMeegenomen uit vorig jaar:][NI", number\format($na_mee_med, 1), "]%%");
+ ifThenElse($na_i == ($na_n - 1),
+ strAdd($na_uitleg_med, "[TGecumuleerde nascholingsuitkomst:][N", number\format($na_calc_med, 1), "]%%");
+ ,
+ strAdd($na_uitleg_med, "[IDoorgegeven aan volgend jaar:][NI", number\format(-1 * $na_mee_med_next, 1), "]%%");
+ ifThen($na_calc_med > 0 && $na_calc_tot <= 0,
+ strAdd($na_uitleg_med, "[ESurplus van ", number\format($na_calc_med, 1), " Medische dagen kunnen niet worden doorgegeven, omdat het totaal ontoereikend isE]%%");
+ );
+ );
+
+ ifThenElse($na_calc_med >= 0 && $na_correctie_uit_opvolgend_jaar_med < 1,
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoende (surplus: ", number\format($na_calc_med, 1), ")V]%%");
+ $na_status_med = 'voldoet';
+ ,
+ ifThenElse($na_correctie_uit_opvolgend_jaar_med >= 1 && $na_calc_med_end < 0,
+ ifThenElse($na_mee_med_next > 0 || $has_intermediate_med_surplus,
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoende (surplus: ", number\format($na_calc_med, 1), ")V]%%");
+ $na_status_med = 'voldoet-na-saldering';
+ ,
+ ifThenElse($na_calc_med_end == -1.0, $na_dg = 'dag'; $na_dig = 0, $na_dg = 'dagen'; $na_dig = 1);
+ strAdd($na_uitleg_med, '[EEr is aangevuld vanuit het opvolgend jaar, opgestapeld tekort: ', number\format($na_tekort_med, 1),
+ '
Het eindresultaat is een tekort van ', number\format(-1 * $na_calc_med_end, $na_dig) ,' ', $na_dg, ' in ', toString($na_jaar_end) , 'E]%%');
+ $na_dashb_entry_med = string\concatenate("[OTotaal Medisch onvoldoende (tekort: ", number\format($na_tekort_med, 1), ")O]%%");
+ $na_status_hom = 'voldoet-niet-na-saldering';
+ )
+ ,
+ ifThenElse($na_calc_med < 0,
+ $na_dashb_entry_med = string\concatenate("[OTotaal Medisch onvoldoende (tekort: ", number\format($na_tekort_med, 1), ")O]%%");
+ $na_status_hom = 'voldoet-niet';
+ ,
+ strAdd($na_uitleg_med, '[RTekorten zijn aangevuld vanuit opvolgende jarenR]%%');
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoendeV]%%");
+ $na_status_hom = 'voldoet-na-saldering';
+ );
+ );
+ );
+ $na_uitleg_med = string\concatenate($na_dashb_entry_med, $na_uitleg_med);
+
+ log('warning', 'jaar:', $na_jaar, ', tot:', $na_calc_tot, ', correctie:', $na_correctie_uit_opvolgend_jaar, ', na_mee_tot:', $na_mee_tot_next);
+
+ strAdd($na_uitleg_tot, "[IMeegenomen uit vorig jaar:][NI", number\format($na_mee_tot, 1), "]%%");
+ ifThen($na_mee_hom > 0,
+ strAdd($na_uitleg_tot, "[IIWaarvan dagen homeopathie:][NII", number\format($na_mee_hom, 1), "]%%");
+ );
+ ifThen($na_mee_med > 0,
+ strAdd($na_uitleg_tot, "[IIWaarvan dagen medisch:][NII", number\format($na_mee_med, 1), "]%%");
+ );
+ ifThenElse($na_i == ($na_n - 1),
+ strAdd($na_uitleg_tot, "[TGecumuleerde nascholingsuitkomst:][N", number\format($na_calc_tot, 1), "]%%");
+ ,
+ strAdd($na_uitleg_tot, "[IDoorgegeven aan volgend jaar:][NI", number\format(-1 * $na_mee_tot_next, 1), "]%%");
+ ifThen($na_mee_hom_next > 0,
+ strAdd($na_uitleg_tot, "[IIWaarvan dagen homeopathie:][NII", number\format($na_mee_hom_next, 1), "]%%");
+ );
+ ifThen($na_mee_med_next > 0,
+ strAdd($na_uitleg_tot, "[IIWaarvan dagen medisch:][NII", number\format($na_mee_med_next, 1), "]%%");
+ );
+ );
+
+ ifThenElse($na_calc_tot >= 0 && $na_correctie_uit_opvolgend_jaar < 1,
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoende (surplus: ", number\format($na_calc_tot, 1), ")V]%%");
+ $na_status = 'voldoet';
+ ,
+ ifThenElse($na_correctie_uit_opvolgend_jaar >= 1 && $na_calc_tot_end < 0,
+ ifThenElse($na_mee_tot_next > 0 || $has_intermediate_tot_surplus,
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoende (surplus: ", number\format($na_calc_tot, 1), ")V]%%");
+ $na_status = 'voldoet-na-saldering';
+ ,
+ ifThenElse($na_calc_tot_end == -1.0, $na_dg = 'dag'; $na_dig = 0, $na_dg = 'dagen'; $na_dig = 1);
+ strAdd($na_uitleg_tot, '[EEr is aangevuld vanuit het opvolgend jaar, opgestapeld tekort: ', number\format($na_tekort, 1),
+ '
Het eindresultaat is een tekort van ', number\format(-1 * $na_calc_tot_end, $na_dig) ,' ', $na_dg, ' in ', toString($na_jaar_end) , 'E]%%');
+ $na_dashb_entry_tot = string\concatenate("[ONascholingsdagen onvoldoende (tekort: ", number\format($na_tekort, 1), ")O]%%");
+ $na_status = 'voldoet-niet-na-saldering';
+ )
+ ,
+ ifThenElse($na_calc_tot < 0,
+ $na_dashb_entry_tot = string\concatenate("[ONascholingsdagen onvoldoende (tekort: ", number\format($na_tekort, 1), ")O]%%");
+ $na_status = 'voldoet-niet';
+ ,
+ strAdd($na_uitleg_tot, '[RTekorten zijn aangevuld vanuit opvolgende jarenR]%%');
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoendeV]%%");
+ $na_status = 'voldoet-na-saldering';
+ );
+ );
+ );
+
+ $na_uitleg_tot = string\concatenate($na_dashb_entry_tot, $na_uitleg_tot);
+
+ );
+
+ ifThen($na_jaar <= $na_methode_1_max_jaar,
+ $na_status = $na_status_hom;
+ $na_status_med = $na_status_hom;
+ );
+
+ ifThenElse($na_jaar <= $na_methode_1_max_jaar,
+ $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, '[V', string\concatenate(''));
+ $na_dashb_entry_med = string\replace($na_dashb_entry_med, '[V', string\concatenate(''));
+ ,
+ $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, '[V', string\concatenate(''));
+ $na_dashb_entry_med = string\replace($na_dashb_entry_med, '[V', string\concatenate(''));
+ $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, '[O', 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]%%', '');
+ $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, '%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, '%tot%', $na_uitleg_tot);
+ ,
+ $na_report = string\replace($na_report, '%med%', '');
+ $na_report = string\replace($na_report, '%tot%', '');
+ );
+
+ $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/script-bereken-nascholingstotalen 2023-11-09-12h32.js b/code current/script-bereken-nascholingstotalen 2023-11-09-12h32.js
new file mode 100644
index 0000000..66928a3
--- /dev/null
+++ b/code current/script-bereken-nascholingstotalen 2023-11-09-12h32.js
@@ -0,0 +1,938 @@
+//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, 1), ']%%');
+
+ ifThenElse($na_jaar > $na_methode_1_max_jaar,
+ strAdd($na_uitleg_med, '[IDagen gevolgd :I][NI', number\format($na_dagen_med, 1), ']%%');
+ strAdd($na_uitleg, '[IDagen Overig gevolgd :I][NI', number\format($na_overig, 1), ']%%');
+ strAdd($na_uitleg, '[IDagen Klassieke Homeopathie gevolgd :I][NI', number\format($na_dagen_hom, 1), ']%%');
+ strAdd($na_uitleg, '[IDagen Medisch gevolgd :I][NI', number\format($na_dagen_med, 1), ']%%');
+ strAdd($na_uitleg, '[IDagen Werkgroep :I][NI', number\format($na_werkgroep, 1), ']%%');
+ ifThen($na_vrijstelling > 0,
+ strAdd($na_uitleg, '[IDagen Vrijstelling :I][NI', number\format($na_vrijstelling, 1), ']%%');
+ );
+ ifThen($na_start_surplus > 0,
+ strAdd($na_uitleg, '[IDagen Start Surplus :I][NI', number\format($na_start_surplus, 1), ']%%');
+ );
+ strAdd($na_uitleg, '[TNascholingsdagen :I][N', number\format($na_dagen, 1), ']%%');
+ ,
+ ifThen($na_vrijstelling > 0,
+ strAdd($na_uitleg_hom, '[IDagen Vrijstelling :I][NI', number\format($na_vrijstelling, 1), ']%%');
+ );
+ ifThen($na_start_surplus > 0,
+ strAdd($na_uitleg_hom, '[IDagen Start Surplus :I][NI', number\format($na_start_surplus, 1), ']%%');
+ );
+ );
+
+ $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, 1), ']%%');
+ ifThen($na_jaar > $na_methode_1_max_jaar,
+ strAdd($na_uitleg_med, '[INorm Medisch :I][NI', number\format($na_norm_med, 1), ']%%');
+ strAdd($na_uitleg, '[INorm Nascholingsdagen :I][NI', number\format($na_norm, 1), ']%%');
+ );
+
+ strAdd($na_uitleg_hom, '[TSaldo :I][N', number\format($na_calc_hom, 1), ']%%');
+ ifThen($na_jaar > $na_methode_1_max_jaar,
+ strAdd($na_uitleg_med, '[TSaldo :I][N', number\format($na_calc_med, 1), ']%%');
+ strAdd($na_uitleg, '[TSaldo :I][N', number\format($na_calc_tot, 1), ']%%');
+ );
+
+ $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_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;
+
+ // Klassieke Homeopathie negatieve correcties
+ $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,
+ 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;
+
+ strAdd($na_uitleg_hom_j, "[IDagen tekort homeopathie aangevuld vanuit jaar ", $na_jaar, ":I][NI", number\format($na_correctie, 1), "]%%");
+ strAdd($na_tekort_aangevuld_vanuit_j, "[IIWaarvan dagen homeopathie :I][NII", number\format($na_correctie, 1), "]%%");
+ strAdd($na_uitleg_hom, "[IDagen tekort homeopathie aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 1), "]%%");
+ strAdd($na_tekort_aangevuld_naar, "[IIWaarvan dagen homeopathie :I][NII", number\format($na_correctie, 1), "]%%");
+
+ $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);
+
+ // Medisch negatieve correcties
+ $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,
+ 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;
+
+ strAdd($na_uitleg_med_j, "[IDagen tekort medisch aangevuld vanuit jaar ", $na_jaar, ":I][NI", number\format($na_correctie, 1), "]%%");
+ strAdd($na_tekort_aangevuld_vanuit_j, "[IIWaarvan dagen medisch :I][NII", number\format($na_correctie, 1), "]%%");
+ strAdd($na_uitleg_med, "[IDagen tekort medisch aangevuld naar jaar ", $na_jaar_j, ":I][NI", number\format(-1 * $na_correctie, 1), "]%%");
+ strAdd($na_tekort_aangevuld_naar, "[IIWaarvan dagen medisch :I][NII", number\format($na_correctie, 1), "]%%");
+
+ $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);
+ );
+ );
+
+ log('warning', 'jaar=', $na_jaar, ', calc_hom=', $na_calc_hom, ', calc_med=', $na_calc_med, ', calc_tot=', $na_calc_tot);
+
+ // Totaal negatieve correcties
+ $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,
+ 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;
+
+ strAdd($na_tekort_aangevuld_vanuit_j, "[IIWaarvan nascholingsdagen :I][NII", number\format($na_correctie, 1), "]%%");
+ strAdd($na_tekort_aangevuld_naar, "[IIWaarvan nascholingsdagen :I][NII", number\format($na_correctie, 1), "]%%");
+
+ $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_hom, "[EOvername van medische dagen beperkt tot", number\format($na_take, 1), ', omdat het totaal van vorig jaar ontoereikend isE]%%');
+ );
+ $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, 1), ', omdat het totaal van vorig jaar ontoereikend isE]%%');
+ );
+ $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);
+ $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, 1), "]%%");
+
+ ifThenElse($na_i == ($na_n - 1),
+ strAdd($na_uitleg_hom, "[TGecumuleerde nascholingsuitkomst:][N", number\format($na_calc_hom, 1), "]%%");
+ ,
+ strAdd($na_uitleg_hom, "[IDoorgegeven aan ", $na_jaar + 1, " :][NI", number\format(-1 * $na_mee_hom_next, 1), "]%%");
+ ifThen($na_calc_hom > 0 && $na_calc_tot <= 0,
+ strAdd($na_uitleg_hom, "[ESurplus van ", number\format($na_calc_hom, 1), " Homeopathie dagen kunnen niet worden doorgegeven, omdat het totaal ontoereikend isE]%%");
+ );
+ );
+
+ ifThenElse($na_calc_hom >= 0 && $na_correctie_uit_opvolgend_jaar_hom < 1,
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoende (surplus: ", number\format($na_calc_hom, 1), ")V]%%");
+ $na_status_hom = 'voldoet';
+ ,
+ ifThenElse($na_correctie_uit_opvolgend_jaar_hom >= 1 && $na_calc_hom_end < 0,
+ ifThenElse($na_mee_hom_next > 0 || $has_intermediate_hom_surplus,
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoende (surplus: ", number\format($na_calc_hom, 1), ")V]%%");
+ $na_status_hom = 'voldoet-na-saldering';
+ ,
+ ifThenElse($na_calc_hom_end == -1.0, $na_dg = 'dag'; $na_dig = 0, $na_dg = 'dagen'; $na_dig = 1);
+ strAdd($na_uitleg_hom, '[EEr is aangevuld vanuit het opvolgend jaar, opgestapeld tekort: ', number\format($na_tekort_hom, 1),
+ '
Het eindresultaat is een tekort van ', number\format(-1 * $na_calc_hom_end, $na_dig) ,' ', $na_dg, ' in ', toString($na_jaar_end) , 'E]%%');
+ $na_dashb_entry_hom = string\concatenate("[OTotaal Klassieke Homeopathie onvoldoende (tekort: ", number\format($na_tekort_hom, 1), ")O]%%");
+ $na_status_hom = 'voldoet-niet-na-saldering';
+ )
+ ,
+ ifThenElse($na_calc_hom < 0,
+ $na_dashb_entry_hom = string\concatenate("[OTotaal Klassieke Homeopathie onvoldoende (tekort: ", number\format($na_tekort_hom, 1), ")O]%%");
+ $na_status_hom = 'voldoet-niet';
+ ,
+ strAdd($na_uitleg_hom, '[RTekorten zijn aangevuld vanuit opvolgende jarenR]%%');
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoendeV]%%");
+ $na_status_hom = 'voldoet-na-saldering';
+ );
+ );
+ );
+ $na_uitleg_hom = string\concatenate($na_dashb_entry_hom, $na_uitleg_hom);
+
+
+ ifThen($na_jaar > $na_methode_1_max_jaar,
+
+ strAdd($na_uitleg_med, "[IMeegenomen ", $na_jaar - 1, " :][NI", number\format($na_mee_med, 1), "]%%");
+ ifThenElse($na_i == ($na_n - 1),
+ strAdd($na_uitleg_med, "[TGecumuleerde nascholingsuitkomst:][N", number\format($na_calc_med, 1), "]%%");
+ ,
+ strAdd($na_uitleg_med, "[IDoorgegeven aan ", $na_jaar + 1, " :][NI", number\format(-1 * $na_mee_med_next, 1), "]%%");
+ ifThen($na_calc_med > 0 && $na_calc_tot <= 0,
+ strAdd($na_uitleg_med, "[ESurplus van ", number\format($na_calc_med, 1), " Medische dagen kunnen niet worden doorgegeven, omdat het totaal ontoereikend isE]%%");
+ );
+ );
+
+ ifThenElse($na_calc_med >= 0 && $na_correctie_uit_opvolgend_jaar_med < 1,
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoende (surplus: ", number\format($na_calc_med, 1), ")V]%%");
+ $na_status_med = 'voldoet';
+ ,
+ ifThenElse($na_correctie_uit_opvolgend_jaar_med >= 1 && $na_calc_med_end < 0,
+ ifThenElse($na_mee_med_next > 0 || $has_intermediate_med_surplus,
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoende (surplus: ", number\format($na_calc_med, 1), ")V]%%");
+ $na_status_med = 'voldoet-na-saldering';
+ ,
+ ifThenElse($na_calc_med_end == -1.0, $na_dg = 'dag'; $na_dig = 0, $na_dg = 'dagen'; $na_dig = 1);
+ strAdd($na_uitleg_med, '[EEr is aangevuld vanuit het opvolgend jaar, opgestapeld tekort: ', number\format($na_tekort_med, 1),
+ '
Het eindresultaat is een tekort van ', number\format(-1 * $na_calc_med_end, $na_dig) ,' ', $na_dg, ' in ', toString($na_jaar_end) , 'E]%%');
+ $na_dashb_entry_med = string\concatenate("[OTotaal Medisch onvoldoende (tekort: ", number\format($na_tekort_med, 1), ")O]%%");
+ $na_status_hom = 'voldoet-niet-na-saldering';
+ )
+ ,
+ ifThenElse($na_calc_med < 0,
+ $na_dashb_entry_med = string\concatenate("[OTotaal Medisch onvoldoende (tekort: ", number\format($na_tekort_med, 1), ")O]%%");
+ $na_status_hom = 'voldoet-niet';
+ ,
+ strAdd($na_uitleg_med, '[RTekorten zijn aangevuld vanuit opvolgende jarenR]%%');
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoendeV]%%");
+ $na_status_hom = 'voldoet-na-saldering';
+ );
+ );
+ );
+ $na_uitleg_med = string\concatenate($na_dashb_entry_med, $na_uitleg_med);
+
+ 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, 1), ']%%');
+ 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, 1), ']%%');
+ strAdd($na_uitleg_tot, $na_tekort_aangevuld_vanuit);
+ );
+
+ strAdd($na_uitleg_tot, "[IMeegenomen uit jaar ", $na_jaar - 1, " :][NI", number\format($na_mee_tot, 1), "]%%");
+ ifThen($na_mee_hom > 0,
+ strAdd($na_uitleg_tot, "[IIWaarvan dagen homeopathie:][NII", number\format($na_mee_hom, 1), "]%%");
+ );
+ ifThen($na_mee_med > 0,
+ strAdd($na_uitleg_tot, "[IIWaarvan dagen medisch:][NII", number\format($na_mee_med, 1), "]%%");
+ );
+
+ // 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, 1), "]%%");
+ );
+
+ ifThenElse($na_i == ($na_n - 1),
+ strAdd($na_uitleg_tot, "[TGecumuleerde nascholingsuitkomst:][N", number\format($na_calc_tot, 1), "]%%");
+ ,
+ strAdd($na_uitleg_tot, "[IDoorgegeven aan ", $na_jaar + 1, " :][NI", number\format(-1 * $na_mee_tot_next, 1), "]%%");
+ ifThen($na_mee_hom_next > 0,
+ strAdd($na_uitleg_tot, "[IIWaarvan dagen homeopathie:][NII", number\format($na_mee_hom_next, 1), "]%%");
+ );
+ ifThen($na_mee_med_next > 0,
+ strAdd($na_uitleg_tot, "[IIWaarvan dagen medisch:][NII", number\format($na_mee_med_next, 1), "]%%");
+ );
+
+ // 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, 1), "]%%");
+ );
+ );
+
+ ifThenElse($na_calc_tot >= 0 && $na_correctie_uit_opvolgend_jaar < 1,
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoende (surplus: ", number\format($na_calc_tot, 1), ")V]%%");
+ $na_status = 'voldoet';
+ ,
+ ifThenElse($na_correctie_uit_opvolgend_jaar >= 1 && $na_calc_tot_end < 0,
+ ifThenElse($na_mee_tot_next > 0 || $has_intermediate_tot_surplus,
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoende (surplus: ", number\format($na_calc_tot, 1), ")V]%%");
+ $na_status = 'voldoet-na-saldering';
+ ,
+ ifThenElse($na_calc_tot_end == -1.0, $na_dg = 'dag'; $na_dig = 0, $na_dg = 'dagen'; $na_dig = 1);
+ strAdd($na_uitleg_tot, '[EEr is aangevuld vanuit het opvolgend jaar, opgestapeld tekort: ', number\format($na_tekort, 1),
+ '
Het eindresultaat is een tekort van ', number\format(-1 * $na_calc_tot_end, $na_dig) ,' ', $na_dg, ' in ', toString($na_jaar_end) , 'E]%%');
+ $na_dashb_entry_tot = string\concatenate("[ONascholingsdagen onvoldoende (tekort: ", number\format($na_tekort, 1), ")O]%%");
+ $na_status = 'voldoet-niet-na-saldering';
+ )
+ ,
+ ifThenElse($na_calc_tot < 0,
+ $na_dashb_entry_tot = string\concatenate("[ONascholingsdagen onvoldoende (tekort: ", number\format($na_tekort, 1), ")O]%%");
+ $na_status = 'voldoet-niet';
+ ,
+ strAdd($na_uitleg_tot, '[RTekorten zijn aangevuld vanuit opvolgende jarenR]%%');
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoendeV]%%");
+ $na_status = 'voldoet-na-saldering';
+ );
+ );
+ );
+
+ $na_uitleg_tot = string\concatenate($na_dashb_entry_tot, $na_uitleg_tot);
+
+ );
+
+ ifThen($na_jaar <= $na_methode_1_max_jaar,
+ $na_status = $na_status_hom;
+ $na_status_med = $na_status_hom;
+ );
+
+ ifThenElse($na_jaar <= $na_methode_1_max_jaar,
+ $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, '[V', string\concatenate(''));
+ $na_dashb_entry_med = string\replace($na_dashb_entry_med, '[V', string\concatenate(''));
+ ,
+ $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, '[V', string\concatenate(''));
+ $na_dashb_entry_med = string\replace($na_dashb_entry_med, '[V', string\concatenate(''));
+ $na_dashb_entry_tot = string\replace($na_dashb_entry_tot, '[O', 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]%%', '');
+ $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, '%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, '%tot%', $na_uitleg_tot);
+ ,
+ $na_report = string\replace($na_report, '%med%', '');
+ $na_report = string\replace($na_report, '%tot%', '');
+ );
+
+ $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/script-bereken-nascholingstotalen 2023-11-10.js b/code current/script-bereken-nascholingstotalen 2023-11-10.js
new file mode 100644
index 0000000..7b3e674
--- /dev/null
+++ b/code current/script-bereken-nascholingstotalen 2023-11-10.js
@@ -0,0 +1,995 @@
+//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_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;
+
+ // Klassieke Homeopathie negatieve correcties
+ $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,
+ 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;
+
+ 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 :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 :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);
+
+ // Medisch negatieve correcties
+ $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,
+ 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;
+
+ 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 :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 :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);
+ );
+ );
+
+ log('warning', 'jaar=', $na_jaar, ', calc_hom=', $na_calc_hom, ', calc_med=', $na_calc_med, ', calc_tot=', $na_calc_tot);
+
+ // Totaal negatieve correcties
+ $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,
+ 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;
+
+ strAdd($na_tekort_aangevuld_vanuit_j, "[IIWaarvan nascholingsdagen :I][NII", number\format($na_correctie, 2), "]%%");
+ strAdd($na_tekort_aangevuld_naar, "[IIWaarvan nascholingsdagen :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_hom, "[EOvername van medische dagen beperkt tot", number\format($na_take, 2), ', omdat het totaal van vorig jaar ontoereikend isE]%%');
+ );
+ $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]%%');
+ );
+ $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);
+ $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,
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoende (surplus: ", number\format($na_calc_hom, 2), ")V]%%");
+ $na_status_hom = 'voldoet';
+ ,
+ ifThenElse($has_intermediate_hom_surplus,
+ $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($na_tekort_hom, 2), ")O]%%");
+ $na_status_hom = 'voldoet-niet';
+ );
+ );
+ /*
+ ifThenElse($na_calc_hom >= 0 && $na_correctie_uit_opvolgend_jaar_hom < 1,
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoende (surplus: ", number\format($na_calc_hom, 2), ")V]%%");
+ $na_status_hom = 'voldoet';
+ ,
+ ifThenElse($na_correctie_uit_opvolgend_jaar_hom >= 1 && $na_calc_hom_end < 0,
+ ifThenElse($na_mee_hom_next > 0 || $has_intermediate_hom_surplus,
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoende (surplus: ", number\format($na_calc_hom, 2), ")V]%%");
+ $na_status_hom = 'voldoet-na-saldering';
+ ,
+ ifThenElse($na_calc_hom_end == -1.0, $na_dg = 'dag'; $na_dig = 0, $na_dg = 'dagen'; $na_dig = 1);
+ strAdd($na_uitleg_hom, '[EEr is aangevuld vanuit het opvolgend jaar, opgestapeld tekort: ', number\format($na_tekort_hom, 2),
+ '
Het eindresultaat is een tekort van ', number\format(-1 * $na_calc_hom_end, $na_dig) ,' ', $na_dg, ' in ', toString($na_jaar_end) , 'E]%%');
+ $na_dashb_entry_hom = string\concatenate("[OTotaal Klassieke Homeopathie onvoldoende (tekort: ", number\format($na_tekort_hom, 2), ")O]%%");
+ $na_status_hom = 'voldoet-niet-na-saldering';
+ )
+ ,
+ ifThenElse($na_calc_hom < 0,
+ $na_dashb_entry_hom = string\concatenate("[OTotaal Klassieke Homeopathie onvoldoende (tekort: ", number\format($na_tekort_hom, 2), ")O]%%");
+ $na_status_hom = 'voldoet-niet';
+ ,
+ strAdd($na_uitleg_hom, '[RTekorten zijn aangevuld vanuit opvolgende jarenR]%%');
+ $na_dashb_entry_hom = string\concatenate("[VTotaal Klassieke Homeopathie voldoendeV]%%");
+ $na_status_hom = 'voldoet-na-saldering';
+ );
+ );
+ );
+ */
+ $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,
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoende (surplus: ", number\format($na_calc_med, 2), ")V]%%");
+ $na_status_med = 'voldoet';
+ ,
+ ifThenElse($has_intermediate_med_surplus,
+ $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($na_tekort_med, 2), ")O]%%");
+ $na_status_hom = 'voldoet-niet';
+ );
+ );
+ /*ifThenElse($na_calc_med >= 0 && $na_correctie_uit_opvolgend_jaar_med < 1,
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoende (surplus: ", number\format($na_calc_med, 2), ")V]%%");
+ $na_status_med = 'voldoet';
+ ,
+ ifThenElse($na_correctie_uit_opvolgend_jaar_med >= 1 && $na_calc_med_end < 0,
+ ifThenElse($na_mee_med_next > 0 || $has_intermediate_med_surplus,
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoende (surplus: ", number\format($na_calc_med, 2), ")V]%%");
+ $na_status_med = 'voldoet-na-saldering';
+ ,
+ ifThenElse($na_calc_med_end == -1.0, $na_dg = 'dag'; $na_dig = 0, $na_dg = 'dagen'; $na_dig = 1);
+ strAdd($na_uitleg_med, '[EEr is aangevuld vanuit het opvolgend jaar, opgestapeld tekort: ', number\format($na_tekort_med, 2),
+ '
Het eindresultaat is een tekort van ', number\format(-1 * $na_calc_med_end, $na_dig) ,' ', $na_dg, ' in ', toString($na_jaar_end) , 'E]%%');
+ $na_dashb_entry_med = string\concatenate("[OTotaal Medisch onvoldoende (tekort: ", number\format($na_tekort_med, 2), ")O]%%");
+ $na_status_hom = 'voldoet-niet-na-saldering';
+ )
+ ,
+ ifThenElse($na_calc_med < 0,
+ $na_dashb_entry_med = string\concatenate("[OTotaal Medisch onvoldoende (tekort: ", number\format($na_tekort_med, 2), ")O]%%");
+ $na_status_hom = 'voldoet-niet';
+ ,
+ strAdd($na_uitleg_med, '[RTekorten zijn aangevuld vanuit opvolgende jarenR]%%');
+ $na_dashb_entry_med = string\concatenate("[VTotaal Medisch voldoendeV]%%");
+ $na_status_hom = 'voldoet-na-saldering';
+ );
+ );
+ );
+ */
+ $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, $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, $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,
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoende (surplus: ", number\format($na_calc_tot, 2), ")V]%%");
+ $na_status = 'voldoet';
+ ,
+ ifThenElse($has_intermediate_tot_surplus,
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoende (gecompenseerd)V]%%");
+ $na_status = 'voldoet';
+ ,
+ $na_dashb_entry_tot = string\concatenate("[ONascholingsdagen onvoldoende (tekort: ", number\format($na_tekort, 2), ")O]%%");
+ $na_status = 'voldoet-niet';
+ );
+ );
+ /*
+ ifThenElse($na_calc_tot >= 0 && $na_correctie_uit_opvolgend_jaar < 1,
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoende (surplus: ", number\format($na_calc_tot, 2), ")V]%%");
+ $na_status = 'voldoet';
+ ,
+ ifThenElse($na_correctie_uit_opvolgend_jaar >= 1 && $na_calc_tot_end < 0,
+ ifThenElse($na_mee_tot_next > 0 || $has_intermediate_tot_surplus,
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoende (surplus: ", number\format($na_calc_tot, 2), ")V]%%");
+ $na_status = 'voldoet-na-saldering';
+ ,
+ ifThenElse($na_calc_tot_end == -1.0, $na_dg = 'dag'; $na_dig = 0, $na_dg = 'dagen'; $na_dig = 1);
+ strAdd($na_uitleg_tot, '[EEr is aangevuld vanuit het opvolgend jaar, opgestapeld tekort: ', number\format($na_tekort, 2),
+ '
Het eindresultaat is een tekort van ', number\format(-1 * $na_calc_tot_end, $na_dig) ,' ', $na_dg, ' in ', toString($na_jaar_end) , 'E]%%');
+ $na_dashb_entry_tot = string\concatenate("[ONascholingsdagen onvoldoende (tekort: ", number\format($na_tekort, 2), ")O]%%");
+ $na_status = 'voldoet-niet-na-saldering';
+ )
+ ,
+ ifThenElse($na_calc_tot < 0,
+ $na_dashb_entry_tot = string\concatenate("[ONascholingsdagen onvoldoende (tekort: ", number\format($na_tekort, 2), ")O]%%");
+ $na_status = 'voldoet-niet';
+ ,
+ strAdd($na_uitleg_tot, '[RTekorten zijn aangevuld vanuit opvolgende jarenR]%%');
+ $na_dashb_entry_tot = string\concatenate("[VNascholingsdagen voldoendeV]%%");
+ $na_status = 'voldoet-na-saldering';
+ );
+ );
+ );
+ */
+
+ $na_uitleg_tot = string\concatenate($na_dashb_entry_tot, $na_uitleg_tot);
+
+ /*ifThen($na_jaar <= $na_methode_1_max_jaar,
+ $na_status = $na_status_hom;
+ $na_status_med = $na_status_hom;
+ );*/
+
+ //logAdd(log, 'jaar: ', $na_jaar, ', hom:', $na_dashb_entry_hom, ', med: ', $na_dashb_entry_med, ', tot:', $na_dashb_entry_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/script-bereken-nascholingstotalen 2024-02-28.js b/code current/script-bereken-nascholingstotalen 2024-02-28.js
new file mode 100644
index 0000000..6b16160
--- /dev/null
+++ b/code current/script-bereken-nascholingstotalen 2024-02-28.js
@@ -0,0 +1,947 @@
+//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]%%');
+ );
+ $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]%%');
+ );
+ $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);
+ $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/script-bereken-nascholingstotalen 2024-03-07 v2.js b/code current/script-bereken-nascholingstotalen 2024-03-07 v2.js
new file mode 100644
index 0000000..3b1fe12
--- /dev/null
+++ b/code current/script-bereken-nascholingstotalen 2024-03-07 v2.js
@@ -0,0 +1,948 @@
+//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), ']%%');
+
+ ifThen($na_jaar == $na_methode_1_max_jaar,
+ strAdd($na_uitleg_med, '[IDagen gevolgd :I][NI', number\format($na_dagen_med, 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);
+ ifThen($na_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);
+ ifThen($na_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($na_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/script-bereken-nascholingstotalen-oud1.js b/code current/script-bereken-nascholingstotalen-oud1.js
new file mode 100644
index 0000000..c13a686
--- /dev/null
+++ b/code current/script-bereken-nascholingstotalen-oud1.js
@@ -0,0 +1,355 @@
+//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, 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_surplus = hash\get($na_row, 'dagenSaldo');
+ $na_surplus_med = hash\get($na_row, 'medischSaldo');
+ $na_surplus_hom = hash\get($na_row, 'homeopathieSaldo');
+ ifThen($na_i == 0,
+ $na_start_surplus = hash\get($na_row, 'startSurplus');
+ $surplus = $surplus + $na_start_surplus;
+ );
+ $na_row = hash\set($na_row, 'surplus', 0);
+ $na_row = hash\set($na_row, 'surplusMedisch', 0);
+ $na_row = hash\set($na_row, 'surplusHomeopathie', 0);
+ $na_rows = array\set($na_rows, $na_i, $na_row);
+ $na_i = $na_i + 1;
+);
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Pas de eenvoudige berekeningsmethode toe. Eerst tellen we gewoon door, zonder te corrigeren
+// Behalve dan dat we maximaal de norm aan dagen meenemen naar het volgende jaar.
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+$na_i = 0;
+while($na_i < $na_n,
+
+ $na_uitleg = '';
+
+ $na_row = array\at($na_rows, $na_i);
+ ifThenElse($na_i > 0,
+ $na_row_prev = array\at($na_rows, $na_i - 1);
+ ,
+ $na_row_prev = null;
+ );
+
+ $na_id = hash\get($na_row, 'id');
+ $na_jaar = hash\get($na_row, 'jaar');
+
+ $na_surplus_tot = hash\get($na_row, 'surplus');
+ $na_surplus_med = hash\get($na_row, 'surplusMedisch');
+ $na_surplus_hom = hash\get($na_row, 'surplusHomeopathie');
+
+ $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, ', surplus_hom=', $na_surplus_hom, ', surplus_med=', $na_surplus_med, ', surplus_tot=', $na_surplus_tot);
+ ,
+ // Bereken het opvolgende jaar
+ // Initialiseer de situatie van vorig jaar en dit jaar.
+ $na_surplus_hom_prev = hash\get($na_row_prev, 'surplusHomeopathie');
+ $na_surplus_med_prev = hash\get($na_row_prev, 'surplusMedisch');
+ $na_surplus_tot_prev = hash\get($na_row_prev, 'surplus');
+
+ log('warning', 'previous: jaar=', $na_jaar - 1, ', surplus_hom=', $na_surplus_hom_prev, ', surplus_med=', $na_surplus_med_prev, ', surplus_tot=', $na_surplus_tot_prev);
+ log('warning', 'current : jaar=', $na_jaar, ', surplus_hom=', $na_surplus_hom, ', surplus_med=', $na_surplus_med, ', surplus_tot=', $na_surplus_tot);
+
+ // Check eerst of er nog tekorten van het voorgaande jaar zijn om op te lossen.
+ // Stel dat er voldoende saldo is in het huidige jaar en een tekort in het voorgaande jaar,
+ // dan gaan we dat van het huidige jaar afsnoepen en terugbrengen naar het laatste voorgaande
+ // jaar dat een tekort heeft. Nu is het zo, dat dit tekort cumulatief is voor alle voorgaande
+ // jaren met tekorten. We gaan dan terug naar het 1e jaar met een tekort voor een gegeven
+ // soort en fixen het daar. Daarna zetten we na_i terug naar dat jaar + 1 en rekenen
+ // opnieuw door.
+
+ ifThen($na_surplus_hom_prev < 0 || $na_surplus_med_prev < 0 || $na_surplus_tot_prev < 0,
+ // Is er überhaupt iets aan te vullen?
+ ifThen($na_surplus_tot > 0,
+ // Bepaal tot waar het tekort voor medisch ligt
+ // Als de medische surplus > 0.
+ ifThenElse($na_surplus_med > 0 && $na_surplus_med_prev < 0,
+ // Corrigeer medisch
+ $na_j = $na_i - 1;
+ $na_row_j = array\at($na_rows, $na_j);
+ $na_surplus_med_j = hash\get($na_row_j, 'surplusMedisch');
+ while($na_surplus_med_j < 0 && $na_j >= 0
+ $na_j = $na_j - 1;
+ ifThen($na_j > 0,
+ $na_row_j = array\at($na_rows, $na_j);
+ $na_surplus_med_j = hash\get($na_row_j, 'surplusMedisch');
+ );
+ );
+ $na_j = $na_j + 1;
+ $na_row_j = array\at($na_rows, $na_j);
+ $na_surplus_med_j = hash\get($na_row_j, 'surplusMedisch');
+ $na_surplus_j = hash\get($na_row_j, 'surplus');
+
+ $na_max_corectie = -1 * $na_surplus_med_j;
+ ifThen($na_max_correctie > $na_surplus_med, $na_max_correctie = $na_surplus_med);
+ ifThen($na_max_correctie > $na_surplus_tot, $na_max_correctie = $na_surplus_tot);
+
+ $na_surplus_med_j = $na_surplus_med_j + $na_max_correctie;
+ $na_surplus_j = $na_surplus_j + $na_max_correctie;
+ $na_suplus_med = $na_suplus_med - $na_max_correctie;
+ $na_surplus_tot = $na_surplus_tot - $na_max_correctie;
+
+ $na_row_j = hash\set($na_row_j, 'surplusMedisch', $na_surplus_med_j);
+ $na_row_j = hash\set($na_row_j, 'surplus', $na_surplus_j);
+ $na_rows = array\set($na_rows, $na_j, $na_row_j);
+
+ $do_adding = false;
+ ,
+ ifThenElse($na_surplus_hom > 0 && $na_surplus_hom_prev < 0,
+ // Corrigeer homeopathie
+ $na_j = $na_i - 1;
+ $na_row_j = array\at($na_rows, $na_j);
+ $na_surplus_hom_j = hash\get($na_row_j, 'surplusHomeopathie');
+ while($na_surplus_hom_j < 0 && $na_j >= 0
+ $na_j = $na_j - 1;
+ ifThen($na_j > 0,
+ $na_row_j = array\at($na_rows, $na_j);
+ $na_surplus_hom_j = hash\get($na_row_j, 'surplusHomeopathie');
+ );
+ );
+ $na_j = $na_j + 1;
+ $na_row_j = array\at($na_rows, $na_j);
+ $na_surplus_hom_j = hash\get($na_row_j, 'surplusHomeopathie');
+ $na_surplus_j = hash\get($na_row_j, 'surplus');
+
+ $na_max_corectie = -1 * $na_surplus_hom_j;
+ ifThen($na_max_correctie > $na_surplus_hom, $na_max_correctie = $na_surplus_hom);
+ ifThen($na_max_correctie > $na_surplus_tot, $na_max_correctie = $na_surplus_tot);
+
+ $na_surplus_hom_j = $na_surplus_hom_j + $na_max_correctie;
+ $na_surplus_j = $na_surplus_j + $na_max_correctie;
+ $na_suplus_hom = $na_suplus_hom - $na_max_correctie;
+ $na_surplus_tot = $na_surplus_tot - $na_max_correctie;
+
+ $na_row_j = hash\set($na_row_j, 'surplusHomeopathie', $na_surplus_hom_j);
+ $na_row_j = hash\set($na_row_j, 'surplus', $na_surplus_j);
+ $na_rows = array\set($na_rows, $na_j, $na_row_j);
+
+ $do_adding = false;
+ ,
+ // Corrigeer overig indien nodig
+ ifThen($na_surplus_tot > 0 && $na_surplus_tot_prev < 0
+ $na_j = $na_i - 1;
+ $na_row_j = array\at($na_rows, $na_j);
+ $na_surplus_j = hash\get($na_row_j, 'surplus');
+ while($na_surplus_j < 0 && $na_j >= 0
+ $na_j = $na_j - 1;
+ ifThen($na_j > 0,
+ $na_row_j = array\at($na_rows, $na_j);
+ $na_surplus_j = hash\get($na_row_j, 'surplus');
+ );
+ );
+ $na_j = $na_j + 1;
+ $na_row_j = array\at($na_rows, $na_j);
+ $na_surplus_j = hash\get($na_row_j, 'surplus');
+
+ $na_max_corectie = -1 * $na_surplus_j;
+ ifThen($na_max_correctie > $na_surplus_tot, $na_max_correctie = $na_surplus_tot);
+
+ $na_surplus_j = $na_surplus_j + $na_max_correctie;
+ $na_surplus_tot = $na_surplus_tot - $na_max_correctie;
+
+ $na_row_j = hash\set($na_row_j, 'surplus', $na_surplus_j);
+ $na_rows = array\set($na_rows, $na_j, $na_row_j);
+
+ $do_adding = false;
+ ),
+ );
+ );
+ );
+ );
+
+ ifThen($do_adding,
+ // Pak maximaal de maxMeenemen norm aan dagen over van het voorgaande jaar, als er voldoende dagen zijn.
+ ifThen($na_surplus_tot_prev > 0,
+ log('warning', 'Surplus meenemen voor zover mogelijk, max_meenemen=', $na_max_meenemen);
+ // Oke, we kunnen überhaupt dagen meenemen.
+ $na_max_mee = $na_max_meenemen;
+ // Verdeel de dagen tussen medisch en homeopatisch, tenzij de
+ // voorgaande surplussen niet voldoende zijn, vul dan verder aantal
+ // met overig
+ while($na_surplus_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_surplus_med < 0 && $na_surplus_med_prev > 0,
+ $na_hom_med_overig = 'med';
+ ,
+ ifThenElse($na_surplus_hom < 0 && $na_surplus_hom_prev > 0,
+ $na_hom_med_overig = 'hom';
+ ,
+ ifThenElse($na_surplus_hom_prev > 0 && $na_surplus_med_prev > 0,
+ ifThenElse($na_hom_med_overig == 'med',
+ $na_hom_med_overig = 'hom';
+ ,
+ $na_hom_med_overig = 'med';
+ );
+ ,
+ ifThenElse($na_surplus_hom_prev > 0,
+ $na_hom_med_overig = 'hom';
+ ,
+ ifThenElse($na_surplus_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_surplus_tot_prev, ', na_max_mee=', $na_max_mee);
+
+ ifThen($na_hom_med_overig == 'med',
+ ifThen($na_surplus_med_prev > 0,
+ $na_take = 1;
+ ifThen($na_surplus_med_prev < $na_take, $na_take = $na_surplus_med_prev);
+ ifThen($na_surplus_tot_prev < $na_take, $na_take = $na_surplus_tot_prev);
+ $na_surplus_med = $na_surplus_med + $na_take;
+ $na_surplus_med_prev = $na_surplus_med_prev - $na_take;
+ $na_surplus_tot = $na_surplus_tot + $na_take;
+ $na_surplus_tot_prev = $na_surplus_tot_prev - $na_take;
+ $na_max_mee = $na_max_mee - $na_take;
+ );
+ );
+ ifThen($na_hom_med_overig == 'hom',
+ ifThen($na_surplus_hom_prev > 0,
+ $na_take = 1;
+ ifThen($na_surplus_hom_prev < $na_take, $na_take = $na_surplus_hom_prev);
+ ifThen($na_surplus_tot_prev < $na_take, $na_take = $na_surplus_tot_prev);
+ $na_surplus_hom = $na_surplus_hom + $na_take;
+ $na_surplus_hom_prev = $na_surplus_hom_prev - $na_take;
+ $na_surplus_tot = $na_surplus_tot + $na_take;
+ $na_surplus_tot_prev = $na_surplus_tot_prev - $na_take;
+ $na_max_mee = $na_max_mee - $na_take;
+ );
+ );
+ ifThen($na_hom_med_overig == 'overig',
+ // We weten nu al dat na_surplus_tot_prev > 0
+ $na_take = 1;
+ ifThen($na_surplus_tot_prev < $na_take, $na_take = $na_surplus_tot_prev);
+ $na_surplus_tot = $na_surplus_tot + $na_take;
+ $na_surplus_tot_prev = $na_surplus_tot_prev - $na_take;
+ $na_max_mee = $na_max_mee - $na_take;
+ );
+
+ );
+ );
+
+ log('warning', 'previous: jaar=', $na_jaar - 1, ', surplus_hom=', $na_surplus_hom_prev, ', surplus_med=', $na_surplus_med_prev, ', surplus_tot=', $na_surplus_tot_prev);
+ log('warning', 'current : jaar=', $na_jaar, ', surplus_hom=', $na_surplus_hom, ', surplus_med=', $na_surplus_med, ', surplus_tot=', $na_surplus_tot);
+
+ $na_row_prev = hash\set($na_row_prev, 'surplusHomeopathie', $na_surplus_hom_prev);
+ $na_row_prev = hash\set($na_row_prev, 'surplusMedisch', $na_surplus_med_prev);
+ $na_row_prev = hash\set($na_row_prev, 'surplus', $na_surplus_tot_prev);
+
+ $na_rows = array\set($na_rows, $na_i - 1, $na_row_prev);
+ );
+ );
+
+ $na_row = hash\set($na_row, 'surplusHomeopathie', $na_surplus_hom);
+ $na_row = hash\set($na_row, 'surplusMedisch', $na_surplus_med);
+ $na_row = hash\set($na_row, 'surplus', $na_surplus_tot);
+ $na_rows = array\set($na_rows, $na_i, $na_row);
+
+ ifThenElse($do_adding,
+ $na_i = $na_i + 1;
+ ,
+ $na_i = $na_j;
+ );
+);
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// 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_surplus = hash\get($na_row, 'surplus');
+ $na_surplus_hom = hash\get($na_row, 'surplusHomeopathie');
+ $na_surplus_med = hash\get($na_row, 'surplusMedisch');
+ $na_dashboard = '';
+ $na_berekeningsuitleg = '';
+
+ record\update('Nascholingstotaal', $na_id,
+ 'surplus', $na_surplus,
+ 'surplusMedisch', $na_surplus_med,
+ 'surplusHomeopathie', $na_surplus_hom,
+ 'dashboard', $na_dashboard,
+ 'berekeningsuitleg', $na_report
+ );
+
+ $na_i = $na_i + 1;
+);
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// Klaar.
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+global\unset($na_in_calc_key, true);
diff --git a/code current/script-bereken-nascholingstotalen.js b/code current/script-bereken-nascholingstotalen.js
new file mode 100644
index 0000000..11521ad
--- /dev/null
+++ b/code current/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/script-bereken-nascholingstotalen.js.pdf b/code current/script-bereken-nascholingstotalen.js.pdf
new file mode 100644
index 0000000..4bb4bee
Binary files /dev/null and b/code current/script-bereken-nascholingstotalen.js.pdf differ
diff --git a/code current/script-lees-nascholingsnorm-hash.js b/code current/script-lees-nascholingsnorm-hash.js
new file mode 100644
index 0000000..591912a
--- /dev/null
+++ b/code current/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);
diff --git a/code pre 2023-10-27/script-bereken-nascholingstotaal-voor-jaar.js b/code pre 2023-10-27/script-bereken-nascholingstotaal-voor-jaar.js
new file mode 100644
index 0000000..e97e30f
--- /dev/null
+++ b/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/code pre 2023-10-27/script-bereken-nascholingstotalen.js b/code pre 2023-10-27/script-bereken-nascholingstotalen.js
new file mode 100644
index 0000000..600f79d
--- /dev/null
+++ b/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,
+ '',
+ '
',
+ '',
+ '| Homeopathie | ',
+ 'Medisch | ',
+ 'Overig | ',
+ 'Werkgroep | ',
+ 'Vrijsttelling | ',
+ 'Norm totaal | ',
+ 'Dagen saldo | ',
+ 'Surplus | ',
+ ' | ',
+ '
',
+ '| ', $na_dg_hom, ' | ',
+ '', $na_dg_med, ' | ',
+ '', $na_dg_ovg, ' | ',
+ '', $na_dg_werkgroep,' | ',
+ '', $na_dg_vrij,' | ',
+ '', $na_norm_tot, ' | ',
+ '', $na_saldo,' | ',
+ '', $na_surplus, ' | ',
+ '', $na_hand_check, ' | ',
+ '
',
+ '
',
+ '
');
+
+ // 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/code pre 2023-10-27/script-lees-nascholingsnorm-hash.js b/code pre 2023-10-27/script-lees-nascholingsnorm-hash.js
new file mode 100644
index 0000000..b45f47a
--- /dev/null
+++ b/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.qea b/nascholingsberekeningen.qea
new file mode 100644
index 0000000..d6f4c19
Binary files /dev/null and b/nascholingsberekeningen.qea differ