Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- global String queryString;
- global Map<String, Batch_Execution_History__c> historyMap;
- global Integer recordsPassed = 0;
- global Integer recordsFailed = 0;
- global Set<Id> accounts_Reset = new Set<Id>();
- global Boolean trackBatchExecution = true;
- global IS_CertificationRollUpBatch(){
- queryString = 'SELECT id,Contact_ID__c FROM Certification__c';
- historyMap = (Map<String, Batch_Execution_History__c>)Batch_Execution_History__c.getAll();
- if(historyMap != null && historyMap.containsKey('IS_CertificationRollUpBatch')){
- String lastRun = historyMap.get('IS_CertificationRollUpBatch').Last_Run_On__c;
- if(lastRun != null){
- queryString += ' WHERE LastModifiedDate >= ' + lastRun;
- }
- }
- queryString += ' ORDER BY Contact_ID__c, Certification_Code__c ';
- }
- //INSALES-4204 - For historical Clean up
- global IS_CertificationRollUpBatch(String Dummy){
- queryString = 'SELECT id,Contact_ID__c FROM Certification__c';
- queryString += ' ORDER BY Contact_ID__c, Certification_Code__c ';
- }
- global IS_CertificationRollUpBatch(ID tempAccountID){
- historyMap = (Map<String, Batch_Execution_History__c>)Batch_Execution_History__c.getAll();
- String contactIDs = '';
- for(Contact con : [SELECT ID FROM Contact WHERE AccountID = :tempAccountID]){
- if(contactIDs == '')
- contactIDs = '(';
- contactIDs += ''' + con.id + '',';
- }
- queryString = 'SELECT id,Contact_ID__c FROM Certification__c';
- if(contactIDs != ''){
- contactIDs = contactIDs.removeEnd(',');
- contactIDs = contactIDs + ')';
- queryString += ' WHERE Contact_ID__c in ' + contactIDs;
- }
- if(historyMap != null && historyMap.containsKey('IS_CertificationRollUpBatch')){
- String lastRun = historyMap.get('IS_CertificationRollUpBatch').Last_Run_On__c;
- //String lastRunStr = string.valueOf(lastRun).replaceFirst(' ','T');
- //lastRunStr = lastRunStr + 'Z';
- if (tempAccountID == null && lastRun != null){
- queryString += ' AND LastModifiedDate >= ' + lastRun;
- }
- }
- queryString += ' ORDER BY Contact_ID__c, Certification_Code__c ';
- system.debug('query string ' + queryString);
- trackBatchExecution = false;
- }
- global Database.QueryLocator start(Database.BatchableContext bc){
- System.debug('queryString===='+queryString);
- return Database.getQueryLocator(queryString);
- }
- /****************************************************************************
- //execute the batch
- /***************************************************************************/
- global void execute(Database.BatchableContext bc, List<SObject> data) {
- Set<Id> contactIds = new Set<Id>();
- List<Account> accountForContacts = new List<Account>();
- Map<Id, Contact> contactMap = new Map<Id, Contact>();
- List<Id> countryAccounts = new List<Id>();
- List<Certification__c> expiredCertifications = new List<Certification__c>();
- List<Certification__c> certificationRecordsForAllContacts = new List<Certification__c>();
- Map<Id, Id> contactCountryAccountMap = new Map<Id, Id>();
- Map<Id, Set<ID>> accountContactSetMap = new Map<Id, Set<ID>>();
- for(Certification__c certification : (List<Certification__c>)data){
- contactIds.add(certification.Contact_ID__c);
- }
- if(contactIds.size() > 0){
- for(Contact contact : ([SELECT id, AccountID, Account.ParentId , Account.IsPartner,
- Account.Partner_Hierarchy_Level__c
- FROM Contact
- WHERE Id in :contactIds])) {
- System.debug('contact.Account.Partner_Hierarchy_Level__c==='+contact.Account.Partner_Hierarchy_Level__c);
- System.debug('contact.Account.isPartner==='+contact.Account.isPartner);
- if(contact.Account.Partner_Hierarchy_Level__c == IS_Constants.PARTNER_HIER_COUNTRY && contact.Account.isPartner){
- countryAccounts.add(contact.AccountID);
- }
- if(contact.Account.Partner_Hierarchy_Level__c == IS_Constants.PARTNER_HIER_SITE && contact.Account.isPartner){
- countryAccounts.add(contact.Account.ParentId);
- }
- }
- }
- if(countryAccounts.size() > 0){
- // Reset Accounts first
- // accounts_Reset
- Set<Id> accountIds_reset_TEMP = new Set<Id>();
- for(Id accId : countryAccounts) {
- if(!accounts_Reset.contains(accId)) {
- accounts_Reset.add(accId);
- accountIds_reset_TEMP.add(accId);
- }
- }
- if(accountIds_reset_TEMP.size() > 0) {
- List<Partner_Certification__c> partnerCertificationsToBeDeleted = [SELECT Id
- FROM Partner_Certification__c
- WHERE Account_ID__c IN :accountIds_reset_TEMP];
- if(partnerCertificationsToBeDeleted.size() > 0) {
- delete partnerCertificationsToBeDeleted;
- }
- }
- // Reset Accounts first
- contactMap = new Map<Id, Contact>([ SELECT Id,Name, AccountID, Account.ParentId , Account.IsPartner,
- Account.Partner_Hierarchy_Level__c
- FROM Contact
- WHERE AccountId in :countryAccounts
- OR Account.ParentId in :countryAccounts]);
- for(Contact con : contactMap.values()) {
- if(con.Account.Partner_Hierarchy_Level__c == IS_Constants.PARTNER_HIER_COUNTRY && con.Account.isPartner){
- contactCountryAccountMap.put(con.id, con.AccountID);
- if(accountContactSetMap.containsKey(con.AccountID)) {
- accountContactSetMap.get(con.AccountID).add(con.id);
- } else {
- accountContactSetMap.put(con.AccountID, new Set<ID>{con.id});
- }
- }
- if(con.Account.Partner_Hierarchy_Level__c == IS_Constants.PARTNER_HIER_SITE && con.Account.isPartner){
- contactCountryAccountMap.put(con.id, con.Account.ParentId);
- if(accountContactSetMap.containsKey(con.Account.ParentId)){
- accountContactSetMap.get(con.Account.ParentId).add(con.id);
- } else {
- accountContactSetMap.put(con.Account.ParentId, new Set<ID>{con.id});
- }
- }
- }
- }
- //Map<ID, List<Certification__c>> accountCertifications = new Map<ID, List<Certification__c>>();
- Map<ID, List<Certification__c>> contactCertifications = new Map<ID, List<Certification__c>>();
- if(contactMap.size() > 0){
- certificationRecordsForAllContacts = [SELECT Activity_Type__c, Certification_Code__c,
- Contact_ID__c, Certification_Status__c,
- System_Status__c, Expiration_Date__c,
- Name, Certification_Group_Name__c
- FROM Certification__c
- WHERE Contact_ID__c in :contactMap.keyset()
- AND System_Status__c =: IS_Constants.ACTIVE_STATUS
- AND Certification_Status__c = :IS_Constants.CERT_STATUS_COMPLETE
- AND Certification_Code__c != null
- ORDER BY Contact_ID__c, Certification_Code__c ];
- if(certificationRecordsForAllContacts != null && certificationRecordsForAllContacts.size() > 0){
- for(Certification__c certifications : certificationRecordsForAllContacts){
- if(certifications.Expiration_Date__c != null){
- if(certifications.Expiration_Date__c <= system.Today()){
- certifications.System_Status__c = IS_Constants.CERT_STATUS_EXPIRE;
- expiredCertifications.add(certifications);
- }else{
- /*if(accountCertifications.containsKey(contactCountryAccountMap.get(certifications.Contact_ID__c))){
- accountCertifications.get(contactCountryAccountMap.get(certifications.Contact_ID__c)).add(certifications);
- }else{
- accountCertifications.put(contactCountryAccountMap.get(certifications.Contact_ID__c), new List<Certification__c>{certifications});
- }*/
- if(contactCertifications.containsKey(certifications.Contact_ID__c)){
- contactCertifications.get(certifications.Contact_ID__c).add(certifications);
- }else{
- contactCertifications.put(certifications.Contact_ID__c, new List<Certification__c>{certifications});
- }
- }
- }else{
- /*if(accountCertifications.containsKey(contactCountryAccountMap.get(certifications.Contact_ID__c))){
- accountCertifications.get(contactCountryAccountMap.get(certifications.Contact_ID__c)).add(certifications);
- }else{
- accountCertifications.put(contactCountryAccountMap.get(certifications.Contact_ID__c), new List<Certification__c>{certifications});
- }*/
- if(contactCertifications.containsKey(certifications.Contact_ID__c)){
- contactCertifications.get(certifications.Contact_ID__c).add(certifications);
- }else{
- contactCertifications.put(certifications.Contact_ID__c, new List<Certification__c>{certifications});
- }
- }
- }
- }
- if(contactCertifications.size() > 0){
- //createOrUpdatePartnerCertificationRecord(accountCertifications, contactCertifications, accountContactSetMap);
- createOrUpdatePartnerCertificationRecord(contactCertifications, accountContactSetMap);
- //Call function to create certification wise contacts -- INSALES-4204
- createPartnerCertCon(contactCertifications, accountContactSetMap);
- }
- if(expiredCertifications.size() > 0){
- update expiredCertifications;
- }
- }
- }
- private void createOrUpdatePartnerCertificationRecord(Map<ID, List<Certification__c>> contactCertifications,
- Map<ID, Set<ID>> accountContactSetMap){
- Map<Id, List<Partner_Certification__c>> accountPartnerCertificationRec = new Map<Id,List<Partner_Certification__c>>();
- Map<Id, List<Partner_Certification__c>> existingPartnerCertiMap = new Map<Id, List<Partner_Certification__c>>();
- Map<ID,Partner_Certification__c> certificationsToUpdate = new Map<ID,Partner_Certification__c>();
- List<Partner_Certification__c> certificationsToCreate = new List<Partner_Certification__c>();
- Partner_Certification__c tempPartnerCertification;
- List<Partner_Certification__c> updatedPartnerCerti;
- Map<Id, List<Partner_Certification__c>> contactPartnerCertificationRec = new Map<Id,List<Partner_Certification__c>>();
- for(Partner_Certification__c exisPartnerCertiftication : [SELECT Account_ID__c, Activity_Type__c,Name,
- Total_Summary__c
- FROM Partner_Certification__c
- WHERE Account_ID__c in :accountContactSetMap.keyset()]){
- if(existingPartnerCertiMap.containsKey(exisPartnerCertiftication.Account_ID__c)){
- existingPartnerCertiMap.get(exisPartnerCertiftication.Account_ID__c).add(exisPartnerCertiftication);
- }else{
- existingPartnerCertiMap.put(exisPartnerCertiftication.Account_ID__c, new List<Partner_Certification__c>{exisPartnerCertiftication});
- }
- }
- Boolean sameCertificationFound = false;
- for(ID accountID : accountContactSetMap.keyset()){
- for(ID contactID : accountContactSetMap.get(accountID)){
- if(contactCertifications.containsKey(contactID)){
- for(Certification__c certification : contactCertifications.get(contactID)){
- if(contactPartnerCertificationRec.containsKey(contactID)){
- updatedPartnerCerti = contactPartnerCertificationRec.get(contactID);
- sameCertificationFound = false;
- for(Partner_Certification__c partnerCertiTemp : updatedPartnerCerti){
- if(String.isNotBlank(partnerCertiTemp.Activity_Type__c) && partnerCertiTemp.Activity_Type__c.equals(certification.Activity_Type__c)
- && String.isNotBlank(partnerCertiTemp.Name) && partnerCertiTemp.Name.equals(certification.Certification_Group_Name__c)){
- sameCertificationFound = true;
- break;
- }
- }
- if(!sameCertificationFound){
- tempPartnerCertification = new Partner_Certification__c();
- tempPartnerCertification.Activity_Type__c = certification.Activity_Type__c;
- tempPartnerCertification.Total_Summary__c = 1.0;
- tempPartnerCertification.Account_ID__c = accountID;
- tempPartnerCertification.Name = certification.Certification_Group_Name__c;
- contactPartnerCertificationRec.get(contactID).add(tempPartnerCertification);
- }
- }
- else {
- tempPartnerCertification = new Partner_Certification__c();
- tempPartnerCertification.Activity_Type__c = certification.Activity_Type__c;
- tempPartnerCertification.Total_Summary__c = 1.0;
- tempPartnerCertification.Name = certification.Certification_Group_Name__c;
- tempPartnerCertification.Account_ID__c = accountID;
- updatedPartnerCerti = new List<Partner_Certification__c>{tempPartnerCertification};
- contactPartnerCertificationRec.put(contactID,updatedPartnerCerti);
- }
- }
- }
- }
- }
- system.debug('contactPartnerCertificationRec : ' + contactPartnerCertificationRec);
- for(ID accountID : accountContactSetMap.keyset()){
- for(ID contactID : accountContactSetMap.get(accountID)){
- if(contactPartnerCertificationRec.containsKey(contactID)){
- for(Partner_Certification__c partnerCerti : contactPartnerCertificationRec.get(contactID)){
- if(accountPartnerCertificationRec.containsKey(accountID)){
- updatedPartnerCerti = accountPartnerCertificationRec.get(accountID);
- sameCertificationFound = false;
- for(Partner_Certification__c partnerCertiTemp : updatedPartnerCerti){
- if(String.isNotBlank(partnerCertiTemp.Activity_Type__c) && partnerCertiTemp.Activity_Type__c.equals(partnerCerti.Activity_Type__c)
- && String.isNotBlank(partnerCertiTemp.Name) && partnerCertiTemp.Name.equals(partnerCerti.Name)){
- sameCertificationFound = true;
- partnerCertiTemp.Total_Summary__c = partnerCertiTemp.Total_Summary__c + 1;
- break;
- }
- }
- if(!sameCertificationFound){
- accountPartnerCertificationRec.get(accountID).add(partnerCerti);
- }
- }else{
- accountPartnerCertificationRec.put(accountID,new List<Partner_Certification__c>{partnerCerti});
- }
- }
- }
- }
- }
- /*for(ID accountID : accountCertifications.keyset()){
- for(Certification__c certification : accountCertifications.get(accountID)){
- if(accountPartnerCertificationRec.containsKey(accountID)){
- updatedPartnerCerti = accountPartnerCertificationRec.get(accountID);
- sameCertificationFound = false;
- for(Partner_Certification__c partnerCertiTemp : updatedPartnerCerti){
- if(partnerCertiTemp.Activity_Type__c.equals(certification.Activity_Type__c)
- && partnerCertiTemp.Name.equals(certification.Name)){
- partnerCertiTemp.Total_Summary__c = partnerCertiTemp.Total_Summary__c + 1;
- sameCertificationFound = true;
- break;
- }
- }
- if(!sameCertificationFound){
- tempPartnerCertification = new Partner_Certification__c();
- tempPartnerCertification.Activity_Type__c = certification.Activity_Type__c;
- tempPartnerCertification.Specialization_Product_Family__c = certification.Specialization_Product_Family__c;
- tempPartnerCertification.Total_Summary__c = 1.0;
- tempPartnerCertification.Account_ID__c = accountID;
- tempPartnerCertification.Name = certification.Name;
- accountPartnerCertificationRec.get(accountID).add(tempPartnerCertification);
- }
- }else{
- tempPartnerCertification = new Partner_Certification__c();
- tempPartnerCertification.Activity_Type__c = certification.Activity_Type__c;
- tempPartnerCertification.Specialization_Product_Family__c = certification.Specialization_Product_Family__c;
- tempPartnerCertification.Total_Summary__c = 1.0;
- tempPartnerCertification.Name = certification.Name;
- tempPartnerCertification.Account_ID__c = accountID;
- updatedPartnerCerti = new List<Partner_Certification__c>{tempPartnerCertification};
- accountPartnerCertificationRec.put(accountID,updatedPartnerCerti);
- }
- }
- }
- */
- Boolean partnerCertificationFound = false;
- for(ID accountID : accountPartnerCertificationRec.keyset()){
- partnerCertificationFound = false;
- for(Partner_Certification__c updatedCerti : accountPartnerCertificationRec.get(accountID)){
- if(existingPartnerCertiMap != null && existingPartnerCertiMap.containsKey(accountID)){
- for(Partner_Certification__c existingCerti : existingPartnerCertiMap.get(accountID)){
- partnerCertificationFound = false;
- system.debug('Activity_Type__c' + existingCerti.Activity_type__c);
- //system.debug('productfamily:' + existingCerti.Specialization_Product_Family__c);
- if(String.isNotBlank(existingCerti.Activity_Type__c) && existingCerti.Activity_Type__c.equals(updatedCerti.Activity_Type__c)
- && existingCerti.Name.equals(updatedCerti.Name)){
- existingCerti.Total_Summary__c = updatedCerti.Total_Summary__c;
- certificationsToUpdate.put(existingCerti.id, existingCerti);
- partnerCertificationFound = true;
- break;
- }
- }
- }
- if(!partnerCertificationFound)
- certificationsToCreate.add(updatedCerti);
- }
- }
- if(certificationsToCreate.size() > 0){
- List<Database.Saveresult> srList = Database.insert(certificationsToCreate, false);
- for(Database.Saveresult sr : srList){
- if(sr.isSuccess()){
- recordsPassed++;
- }else{
- recordsFailed++;
- }
- }
- }
- if(certificationsToUpdate.size() > 0){
- List<Database.Saveresult> srList = Database.Update(certificationsToUpdate.values(), false);
- for(Database.Saveresult sr : srList){
- if(sr.isSuccess()){
- recordsPassed++;
- }else{
- recordsFailed++;
- }
- }
- }
- }
- //INSALES-4204: This function creates Partner_Certification_Contacts__c
- private void createPartnerCertCon(Map<ID, List<Certification__c>> contactCertifications,
- Map<ID, Set<ID>> accountContactSetMap){
- List<Partner_Certification_Contacts__c> prtCertConLst = new List<Partner_Certification_Contacts__c>();
- Partner_Certification_Contacts__c prtCertCon;
- //For each account from input Set -- accountContactSetMap.keyset
- //For each contact under the account --Map<ID, Set<ID>> accountContactSetMap
- //For each cert under the contact -- Map<ID, List<Certification__c>> contactCertifications
- //Form a Map<AccId, Map<Certification_Group_Name__c+Activity_type__c, List<CertificationRecord>>>
- Map<Id, Map<String, List<Certification__c>>> prtCertGrpCertMap = new Map<Id, Map<String, List<Certification__c>>>();
- Map<String, List<Certification__c>> certGrpCertMap = new Map<String, List<Certification__c>>();
- List<Certification__c> certLst = new List<Certification__c>();
- for(ID accountID : accountContactSetMap.keyset()){
- for(ID contactID : accountContactSetMap.get(accountID)){
- if(contactCertifications.containsKey(contactID)){
- for(Certification__c certification : contactCertifications.get(contactID)){
- if(prtCertGrpCertMap.containsKey(accountID)){
- certGrpCertMap = prtCertGrpCertMap.get(accountID);
- if(certGrpCertMap.containsKey(certification.Certification_Group_Name__c+certification.Activity_Type__c)){
- prtCertGrpCertMap.get(accountID).get(certification.Certification_Group_Name__c+certification.Activity_Type__c).add(certification);
- }
- else{
- certLst = new List<Certification__c>();
- certLst.add(certification);
- prtCertGrpCertMap.get(accountID).put(certification.Certification_Group_Name__c+certification.Activity_Type__c, certLst);
- }
- }
- else{
- certLst = new List<Certification__c>();
- certLst.add(certification);
- certGrpCertMap = new Map<String, List<Certification__c>>();
- certGrpCertMap.put(certification.Certification_Group_Name__c+certification.Activity_Type__c, certLst);
- prtCertGrpCertMap.put(accountID, certGrpCertMap);
- }
- }
- }
- }
- }
- //For each account from input set -- accountContactSetMap.keyset
- //For each partner_Cert under account [Select part_cert table with accid
- //Get certification from above map with AccId, Certification_Group_Name__c+Activity_type__c=partner_cert.Name+ActivityType
- //Create new PartnerCertCon
- //populate CertId, ContactId, Partner_Cert
- List<Partner_Certification__c> partCertLst = [select Id, Account_ID__c,Name,Activity_Type__c from Partner_Certification__c Where Account_ID__c IN: accountContactSetMap.keyset()];
- Map<Id, List<Partner_Certification__c>> PrtPrtCertMap = new Map<Id, List<Partner_Certification__c>>();
- List<Partner_Certification__c> tmpPartCertLst;
- for(Partner_Certification__c partCert: partCertLst){
- if(PrtPrtCertMap.containsKey(partCert.Account_ID__c)){
- tmpPartCertLst = PrtPrtCertMap.get(partCert.Account_ID__c);
- tmpPartCertLst.add(partCert);
- PrtPrtCertMap.put(partCert.Account_ID__c, tmpPartCertLst);
- }
- else{
- tmpPartCertLst = new List<Partner_Certification__c>();
- tmpPartCertLst.add(partCert);
- PrtPrtCertMap.put(partCert.Account_ID__c, tmpPartCertLst);
- }
- }
- for(ID accountID : accountContactSetMap.keyset()){
- for(Partner_Certification__c partCert: PrtPrtCertMap.get(accountID)){
- if(prtCertGrpCertMap.containsKey(accountID)){
- certGrpCertMap = prtCertGrpCertMap.get(accountID);
- if(certGrpCertMap.containsKey(partCert.Name+partCert.Activity_Type__c)){
- certLst = certGrpCertMap.get(partCert.Name+partCert.Activity_Type__c);
- for(Certification__c cert: certLst){
- prtCertCon = new Partner_Certification_Contacts__c();
- prtCertCon.Partner_Certification__c = partCert.Id;
- prtCertCon.Contact_Name__c = cert.Contact_Id__c;
- prtCertCon.Certification__c = cert.Id;
- prtCertConLst.add(prtCertCon);
- }
- }
- else{
- //No else block needed. if no cert group found
- }
- }
- else{
- //No else block needed. If no partner cert found, no need to create respective contacts
- }
- }
- }
- if(prtCertConLst.size()>0){
- Database.insert(prtCertConLst, false);
- }
- }
- /****************************************************************************
- finish the batch
- /***************************************************************************/
- global void finish(Database.BatchableContext bc){
- if(trackBatchExecution) {
- Batch_Execution_History__c historyToUpdate;
- if(historyMap != null && historyMap.containsKey('IS_CertificationRollUpBatch')){
- historyToUpdate = historyMap.get('IS_CertificationRollUpBatch');
- }else{
- historyToUpdate = new Batch_Execution_History__c();
- historyToUpdate.Name = 'IS_CertificationRollUpBatch';
- }
- historyToUpdate.Last_Run_On__c = Datetime.now().formatGMT('yyyy-MM-dd'T'HH:mm:ss.sssZ');
- historyToUpdate.Number_of_records_failed__c = recordsFailed;
- historyToUpdate.Number_of_records_processed__c = recordsPassed;
- upsert historyToUpdate;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement