You can download the full release notes as a PDF above for detailed information on all updates and fixes included in this version.
If there are any post-install steps required, they will be listed below.
You can download the full release notes as a PDF above for detailed information on all updates and fixes included in this version.
If there are any post-install steps required, they will be listed below.
Deprecated Fields (migrate data then delete):
Incident_Date__c → Incident_Date_Time__cReporter__c (User) → Reported_By__c (Resource)Deprecated Picklist Value:
Incident_Status: Investigation Ongoing removed → use Under Review or Escalated
Please note, this step is only required if you currently use Incidients in Maica.
List<maica_cc__Incident__c> incidents = [
SELECT Id, maica_cc__Incident_Date__c
FROM maica_cc__Incident__c
WHERE maica_cc__Incident_Date__c != null
AND maica_cc__Incident_Date_Time__c = null
];
for (maica_cc__Incident__c inc : incidents) {
inc.maica_cc__Incident_Date_Time__c = DateTime.newInstance(
inc.maica_cc__Incident_Date__c,
Time.newInstance(9, 0, 0, 0)
);
}
if (!incidents.isEmpty()) {
update incidents;
System.debug('✅ Migrated ' + incidents.size() + ' Incident date records');
} else {
System.debug('ℹ️ No Incidents to migrate');
}List<maica_cc__Incident__c> incidents = [ SELECT Id, maica_cc__Incident_Date__c FROM maica_cc__Incident__c WHERE maica_cc__Incident_Date__c != null AND maica_cc__Incident_Date_Time__c = null];for (maica_cc__Incident__c inc : incidents) { inc.maica_cc__Incident_Date_Time__c = DateTime.newInstance( inc.maica_cc__Incident_Date__c, Time.newInstance(9, 0, 0, 0) );}if (!incidents.isEmpty()) { update incidents; System.debug('✅ Migrated ' + incidents.size() + ' Incident date records');} else { System.debug('ℹ️ No Incidents to migrate');}
Map<Id, Id> userToResourceMap = new Map<Id, Id>();
for (maica_cc__Resource__c res : [
SELECT Id, maica_cc__User__c
FROM maica_cc__Resource__c
WHERE maica_cc__User__c != null
]) {
userToResourceMap.put(res.maica_cc__User__c, res.Id);
}
List<maica_cc__Incident__c> incidents = [
SELECT Id, maica_cc__Reporter__c
FROM maica_cc__Incident__c
WHERE maica_cc__Reporter__c != null
AND maica_cc__Reported_By__c = null
];
List<maica_cc__Incident__c> toUpdate = new List<maica_cc__Incident__c>();
List<String> unmapped = new List<String>();
for (maica_cc__Incident__c inc : incidents) {
if (userToResourceMap.containsKey(inc.maica_cc__Reporter__c)) {
inc.maica_cc__Reported_By__c = userToResourceMap.get(inc.maica_cc__Reporter__c);
toUpdate.add(inc);
} else {
unmapped.add(inc.Id + ' → User: ' + inc.maica_cc__Reporter__c);
}
}
if (!toUpdate.isEmpty()) {
update toUpdate;
System.debug('✅ Migrated ' + toUpdate.size() + ' Reporter records');
}
if (!unmapped.isEmpty()) {
System.debug('⚠️ UNMAPPED (no Resource for User):');
for (String s : unmapped) System.debug(' ' + s);
}
List<maica_cc__Incident__c> incidents = [
SELECT Id, maica_cc__Status__c
FROM maica_cc__Incident__c
WHERE maica_cc__Status__c = 'Investigation Ongoing'
];
for (maica_cc__Incident__c inc : incidents) {
inc.maica_cc__Status__c = 'Under Review';
}
if (!incidents.isEmpty()) {
update incidents;
System.debug('✅ Updated ' + incidents.size() + ' Incidents status');
} else {
System.debug('ℹ️ No Incidents with deprecated status');
}
Integer oldDateCount = [
SELECT COUNT() FROM maica_cc__Incident__c
WHERE maica_cc__Incident_Date__c != null
AND maica_cc__Incident_Date_Time__c = null
];
Integer oldReporterCount = [
SELECT COUNT() FROM maica_cc__Incident__c
WHERE maica_cc__Reporter__c != null
AND maica_cc__Reported_By__c = null
];
Integer oldStatusCount = [
SELECT COUNT() FROM maica_cc__Incident__c
WHERE maica_cc__Status__c = 'Investigation Ongoing'
];
System.debug('=== MIGRATION STATUS ===');
System.debug('Incident_Date__c not migrated: ' + oldDateCount);
System.debug('Reporter__c not migrated: ' + oldReporterCount);
System.debug('Investigation Ongoing status: ' + oldStatusCount);
if (oldDateCount == 0 && oldReporterCount == 0 && oldStatusCount == 0) {
System.debug('✅ ALL CLEAR - safe to delete deprecated fields');
} else {
System.debug('⚠️ MIGRATION INCOMPLETE - do not delete yet');
}
After migration verified, delete via Setup → Object Manager → Incident → Fields:
maica_cc__Incident_Date__cmaica_cc__Reporter__c
After migration verified, add via Incidents → Edit Page → Fields:
Participant Appointment
Deprecated: Maica - Funding Item Sync on Period EndNew: Maica - Funding Item Sync on Period StartAction:
Maica - Funding Item Sync on Period End
Status Picklist Changes:
Old Values: Pending, Accepted, Completed
New Values: Pending, Accepted, Confirmed, Declined, Withdrawn
Completed → Confirmed (value replaced)Accepted → Confirmed (semantic change)Pending → Accepted (semantic change)
maica_cc__Setting__c appSetting = [SELEcT Id, maica_cc__Default_Appointment_Resource_Status__c, maica_cc__Default_Shift_Resource_Status__c FROM maica_cc__Setting__c WHERE maica_cc__API_Name__c = 'Appointment_Setting'];
if (appSetting?.Id != null) {
Boolean needsUpdate = false;
if ('Accepted'.equalsIgnoreCase(appSetting.maica_cc__Default_Appointment_Resource_Status__c)) {
appSetting.maica_cc__Default_Appointment_Resource_Status__c = 'Confirmed';
needsUpdate = true;
} else if ('Pending'.equalsIgnoreCase(appSetting.maica_cc__Default_Appointment_Resource_Status__c)) {
appSetting.maica_cc__Default_Appointment_Resource_Status__c = 'Accepted';
needsUpdate = true;
}
if ('Accepted'.equalsIgnoreCase(appSetting.maica_cc__Default_Shift_Resource_Status__c)) {
appSetting.maica_cc__Default_Shift_Resource_Status__c = 'Confirmed';
needsUpdate = true;
} else if ('Pending'.equalsIgnoreCase(appSetting.maica_cc__Default_Shift_Resource_Status__c)) {
appSetting.maica_cc__Default_Shift_Resource_Status__c = 'Accepted';
needsUpdate = true;
}
if (needsUpdate) {
update appSetting;
System.debug('✅ Updated Appointment Setting defaults');
} else {
System.debug('ℹ️ No Setting updates required');
}
}new maica_cc.UpdateRecordsBatch(
new maica_cc__Appointment_Resource__c(maica_cc__Status__c = 'Confirmed'),
new List<String>{'maica_cc__Status__c = \'Completed\''}
).setDisabledDomains(new Set<Type>{
maica_cc.AppointmentResourceDefaults_MDTM.class,
maica_cc.AppointmentResourceRollupTravel_MDTM.class,
maica_cc.AppointmentResourceRollupType_MDTM.class,
maica_cc.AppointmentResourceShift_MDTM.class,
maica_cc.AppointmentResourcesRollup_MDTM.class
}).run();new UpdateRecordsBatch(
new maica_cc__Appointment_Resource__c(maica_cc__Status__c = 'Confirmed'),
new List<String>{'maica_cc__Status__c = \'Accepted\''}
).setDisabledDomains(new Set<Type>{
AppointmentResourceDefaults_MDTM.class,
AppointmentResourceRollupTravel_MDTM.class,
AppointmentResourceRollupType_MDTM.class,
AppointmentResourceShift_MDTM.class,
AppointmentResourcesRollup_MDTM.class
}).run();new maica_cc.UpdateRecordsBatch(
new maica_cc__Appointment_Resource__c(maica_cc__Status__c = 'Accepted'),
new List<String>{'maica_cc__Status__c = \'Pending\''}
).setDisabledDomains(new Set<Type>{
maica_cc.AppointmentResourceDefaults_MDTM.class,
maica_cc.AppointmentResourceRollupTravel_MDTM.class,
maica_cc.AppointmentResourceRollupType_MDTM.class,
maica_cc.AppointmentResourceShift_MDTM.class,
maica_cc.AppointmentResourcesRollup_MDTM.class
}).run();Integer completedCount = [
SELECT COUNT() FROM maica_cc__Appointment_Resource__c
WHERE maica_cc__Status__c = 'Completed'
];
Integer oldAcceptedCount = [
SELECT COUNT() FROM maica_cc__Appointment_Resource__c
WHERE maica_cc__Status__c = 'Accepted'
];
Integer oldPendingCount = [
SELECT COUNT() FROM maica_cc__Appointment_Resource__c
WHERE maica_cc__Status__c = 'Pending'
];
System.debug('=== MIGRATION STATUS ===');
System.debug('Completed (should be 0): ' + completedCount);
System.debug('Accepted (should be 0 if full migration): ' + oldAcceptedCount);
System.debug('Pending (should be 0 if full migration): ' + oldPendingCount);
if (completedCount == 0) {
System.debug('✅ Completed → Confirmed migration done');
} else {
System.debug('⚠️ Still have Completed records');
}
New Fields on Appointment__c:
Accepted_Resources__c — Roll-up count of resources with Accepted statusPending_Resources__c — Roll-up count of resources with Pending statusAssigned_Resources__c — Now counts Confirmed status (was Accepted)
New Status Values on Appointment_Resource__c:
Declined — Resource declined the assignmentWithdrawn — Resource was withdrawn from the assignment
Enable Total Committed CalculationTotal Committed CalculationTotal_Committed__c on all Agreement Items daily
Add Agenda to Maica Settings → Planner Management → Available Views (options, only if needed to be used/displayed for other others except Mobile CWs)
VAL_DELIVERY_ACTIVITY_0001 — blocks Quantity change on Completed Delivery Activities→ Notify users
Lookup filter on Service Agreement → Funding Administrator removed→ No action required
Re-assign after upgrade if users report access issues:
Maica_Incident_Create_AccessMaica_Incident_Edit_AccessMaica_Agreement_Item_Create_AccessMaica_Agreement_Item_Edit_AccessMaica_Delivery_Activity_Create_AccessMaica_Delivery_Activity_Edit_AccessNew: Maica_PRODA_Debug — assign if debugging and only when debugging PRODA integration, don’t keep it assigned, otherwise it can cause Uncommitted work pending system error.


