Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- global with sharing class ProjectCustomCreateController {
- public Opportunity project {get;set;} // project - account
- public Account projectOrg {get;set;} // object for project - organization
- public String language {get;set;} // language of address
- public Boolean isSearchResult {get;set;} // found matching projects
- public Boolean isNothingFound {get;set;} // found nothing
- public Boolean isCreateButtonVisible {get;set;} // create button visible
- public Boolean isReadyToCreateAccObj {get;set;} // ready to create object Account
- transient List<Opportunity> allOpportunitiesList; // all opportunities from db
- transient List<Account> allAccountObjectsList; // all accounts with recordtype 'object'
- public String currentUserDivision {get;set;} // current user division
- public String currentUserId {get;set;} // current User Id
- public matchingOpp mostMatchingProject {get;set;} // most matching project in search
- public Boolean areShownMiniTables {get;set;} // mini tables are shown
- public Boolean isShowAllResultsButtonVisible {get;set;} // all results button visible
- public Boolean isShowMiniResultsButtonVisible {get;set;} // mini results button visible
- public Id russiaCountryTerritoryRecordId {get;set;} // russia Territory__c Id
- public map<Id, Double> addressMatchingPercentMapForProject {get;set;} // map helper for address matching percent if result for address < 50 but bigger than 0
- public map<Id, Double> addressMatchingPercentMapForObject {get;set;} // map helper for address matching percent if result for address < 50 but bigger than 0
- ////////////////DEBUG GISMO////////////////
- public String serializedForDebug {get;set;}
- ///////////////////////////////////////////
- // object Account search vars
- public map<Id, matchingAcc> matchingAccs {get;set;}
- public Boolean areMatchingAccsFound {get;set;}
- public Boolean isHighLevelOfMatchingPercentAccs {get;set;}
- public List<matchingAcc> matchingAccsSorted {get;set;}
- public List<matchingAcc> matchingAccsSortedMini {get;set;}
- public List<matchingOpp> highMatchingOppsWithAccObjIdKeys {get;set;}
- public set<Id> highMatchingOppsWithAccObjIdKeysSet {get;set;}
- // project Opportunity search vars
- public map<Id, matchingOpp> matchingOpps {get;set;}
- public Boolean areMatchingOppsFound {get;set;}
- public Boolean isHighLevelOfMatchingPercentOpps {get;set;}
- public List<matchingOpp> matchingOppsSorted {get;set;}
- public List<matchingOpp> matchingOppsSortedMini {get;set;}
- private static final String CITY_PARAMETER = 'City';
- private static final String COUNTRY_PARAMETER = 'Country';
- private static final String DISTRICT_PARAMETER = 'District';
- private static final String LIVEPLACE_PARAMETER = 'LivePlace';
- private static final String OKRUG_PARAMETER = 'Okrug';
- private static final String REGION_PARAMETER = 'Region';
- private static final String JSON_EMPTY_STRING = '-1';
- private static final String JSON_MANUAL_STRING = '-2';
- private static final String DEV_NAME_RT_OBJECT_ACCOUNT = 'Object';
- private static final Integer MAX_LEVENSHTEIN_DISTANCE = 100;
- private static final Integer MAX_ROWS_IN_MINI_TABLES = 30;
- public static String LANG_TEXT_VALUE_RUSSIAN {get {return String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN);}}
- private Id OBJECT_TYPE_ACCOUNT_RT {get {return getObjectTypeAccountRT();}}
- private String selectedCountryID;
- private String selectedDistrictID;
- private String selectedCommunityID;
- private String selectedOkrugID;
- private String selectedRegionID;
- private String selectedCityID;
- //LEADMATCHINGPROJECTSANDOBJECTS page parameters
- private final Lead entryLead;
- public Lead pageLead {get;set;}
- public string URLForPage{get;set;}
- public Boolean isNotNecessaryToSearch {get;set;}
- // constructor
- public ProjectCustomCreateController(){
- getRussiaTerritoryRecordId();
- project = new Opportunity();
- projectOrg = new Account();
- projectOrg.RecordTypeId = getObjectTypeAccountRT();
- projectOrg.IsCreatedFromSearchPage__c = true;
- isSearchResult = false;
- isNothingFound = false;
- areMatchingOppsFound = false;
- areMatchingAccsFound = false;
- isCreateButtonVisible = false;
- isReadyToCreateAccObj = false;
- areShownMiniTables = true;
- isShowAllResultsButtonVisible = true;
- getCurrentUserInfo();
- }
- //LEADMATCHINGPROJECTSANDOBJECTS page controller
- public ProjectCustomCreateController(ApexPages.StandardController stdController) {
- URLForPage = ApexPages.currentPage().getHeaders().get('Host');
- entryLead = (Lead)stdController.getRecord();
- getFullInfoPageLead();
- getRussiaTerritoryRecordId();
- isSearchResult = false;
- isNothingFound = false;
- areMatchingOppsFound = false;
- areMatchingAccsFound = false;
- areShownMiniTables = true;
- isShowAllResultsButtonVisible = true;
- isNotNecessaryToSearch = false;
- runFuzzySearchForLead();
- defineFurtherActionLogicForLead();
- }
- global class matchingOpp implements Comparable{
- public Id oppId {get;set;}
- public String oppName {get;set;}
- public Double matchingPercent {get;set;}
- public Double matchingPercentAddress {get;set;}
- public String createButtonUrl {get;set;}
- public String addressValue {get;set;}
- public Id oppOwnerId {get;set;}
- public String oppOwnerName {get;set;}
- public String oppOwnerDivision {get;set;}
- public Boolean isHighPercentOfMatch {get;set;}
- public String accObjectName {get;set;}
- public Id accObjectId {get;set;}
- public Boolean isSendingEmailRequired {get;set;}
- global Integer compareTo(Object compareTo){
- matchingOpp compareToOpp = (matchingOpp)compareTo;
- if((matchingPercent + matchingPercentAddress) == (compareToOpp.matchingPercent + compareToOpp.matchingPercentAddress)){
- return 0;
- }
- if((matchingPercent + matchingPercentAddress) > (compareToOpp.matchingPercent + compareToOpp.matchingPercentAddress)){
- return -1;
- }
- return 1;
- }
- public matchingOpp(Opportunity opp, String lang){
- oppId = opp.Id;
- oppName = opp.Name;
- if(lang == String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN)){
- addressValue = opp.Account.AddressValueRUS__c;
- } else {
- addressValue = opp.Account.AddressValueENG__c;
- }
- matchingPercent = 0;
- matchingPercentAddress = 0;
- oppOwnerId = opp.OwnerId;
- isHighPercentOfMatch = false;
- accObjectName = opp.Account.Name;
- accObjectId = opp.AccountId;
- }
- }
- global class matchingAcc implements Comparable{
- public Id accId {get;set;}
- public String accName {get;set;}
- public Double matchingPercent {get;set;}
- public Double matchingPercentAddress {get;set;}
- public String createButtonUrl {get;set;}
- public String addressValue {get;set;}
- global Integer compareTo(Object compareTo){
- matchingAcc compareToAcc = (matchingAcc)compareTo;
- if((matchingPercent + matchingPercentAddress) == (compareToAcc.matchingPercent + compareToAcc.matchingPercentAddress)){
- return 0;
- }
- if((matchingPercent + matchingPercentAddress) > (compareToAcc.matchingPercent + compareToAcc.matchingPercentAddress)){
- return -1;
- }
- return 1;
- }
- public matchingAcc(Account acc, String lang){
- accId = acc.Id;
- accName = acc.Name;
- if(lang == String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN)){
- addressValue = acc.AddressValueRUS__c;
- } else {
- addressValue = acc.AddressValueENG__c;
- }
- matchingPercent = 0;
- matchingPercentAddress = 0;
- }
- }
- public void performSearch(){
- recieveAddressFieldValues();
- runFuzzySearch();
- defineFurtherActionLogic();
- }
- public void fillSelectedIDs(){
- for(String param : Apexpages.currentPage().getParameters().keySet()){
- String paramValue = Apexpages.currentPage().getParameters().get(param);
- if(param == COUNTRY_PARAMETER){
- this.selectedCountryID = paramValue;
- }else if(param == OKRUG_PARAMETER){
- this.selectedOkrugID = paramValue;
- }else if(param == REGION_PARAMETER){
- this.selectedRegionID = paramValue;
- }else if(param == DISTRICT_PARAMETER){
- this.selectedDistrictID = paramValue;
- }else if(param == CITY_PARAMETER){
- this.selectedCityID = paramValue;
- }else if(param == LIVEPLACE_PARAMETER){
- this.selectedCommunityID = paramValue;
- }
- }
- }
- public void recieveAddressFieldValues(){
- fillSelectedIDs();
- Object emptyValue = String.valueOf('');
- projectOrg.put('okrugRUS__c', emptyValue);
- projectOrg.put('okrugENG__c', emptyValue);
- projectOrg.put('regionRUS__c', emptyValue);
- projectOrg.put('regionENG__c', emptyValue);
- projectOrg.put('districtRUS__c', emptyValue);
- projectOrg.put('districtENG__c', emptyValue);
- projectOrg.put('cityRUS__c', emptyValue);
- projectOrg.put('cityENG__c', emptyValue);
- projectOrg.put('livePlaceRUS__c', emptyValue);
- projectOrg.put('livePlaceENG__c', emptyValue);
- language = Apexpages.currentPage().getParameters().get('langVal');
- projectOrg.put('countryTerritory__c', prepareIDFromParamString(this.selectedCountryID));
- if((CommonTools.isStringEmpty(this.selectedOkrugID)) || (JSON_MANUAL_STRING == this.selectedOkrugID)){
- String okrugText = Apexpages.currentPage().getParameters().get('okrugTextVal');
- Object okrugValue=String.valueOf(okrugText);
- if(language == String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN)){
- projectOrg.put('okrugRUS__c', okrugValue);
- } else {
- projectOrg.put('okrugENG__c', okrugValue);
- }
- } else {
- projectOrg.put('areaTerritory__c', prepareIDFromParamString(this.selectedOkrugID));
- }
- if((CommonTools.isStringEmpty(this.selectedRegionID)) || (JSON_MANUAL_STRING == this.selectedRegionID)){
- String regionText = Apexpages.currentPage().getParameters().get('regionTextVal');
- Object regionValue=String.valueOf(regionText);
- if(language == String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN)){
- projectOrg.put('regionRUS__c', regionValue);
- } else {
- projectOrg.put('regionENG__c', regionValue);
- }
- } else {
- projectOrg.put('regionTerritory__c', prepareIDFromParamString(this.selectedRegionID));
- }
- if((CommonTools.isStringEmpty(this.selectedDistrictID)) || (JSON_MANUAL_STRING == this.selectedDistrictID)){
- String districtText = Apexpages.currentPage().getParameters().get('districtTextVal');
- Object districtValue=String.valueOf(districtText);
- if(language == String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN)){
- projectOrg.put('districtRUS__c', districtValue);
- } else {
- projectOrg.put('districtENG__c', districtValue);
- }
- } else {
- projectOrg.put('districtTerritory__c', prepareIDFromParamString(this.selectedDistrictID));
- }
- if((CommonTools.isStringEmpty(this.selectedCityID)) || (JSON_MANUAL_STRING == this.selectedCityID)){
- String cityText = Apexpages.currentPage().getParameters().get('cityTextVal');
- Object cityValue=String.valueOf(cityText);
- if(language == String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN)){
- projectOrg.put('cityRUS__c', cityValue);
- } else {
- projectOrg.put('cityENG__c', cityValue);
- }
- } else {
- projectOrg.put('cityTerritory__c', prepareIDFromParamString(this.selectedCityID));
- }
- if((CommonTools.isStringEmpty(this.selectedCommunityID)) || (JSON_MANUAL_STRING ==this.selectedCommunityID)){
- String liveplaceText = Apexpages.currentPage().getParameters().get('liveplaceTextVal');
- Object liveplaceValue=String.valueOf(liveplaceText);
- if(language == String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN)){
- projectOrg.put('livePlaceRUS__c', liveplaceValue);
- } else {
- projectOrg.put('livePlaceENG__c', liveplaceValue);
- }
- } else {
- projectOrg.put('localityTerritory__c', prepareIDFromParamString(this.selectedCommunityID));
- }
- String streetValue = Apexpages.currentPage().getParameters().get('streetVal');
- String dwellingTypeValue = Apexpages.currentPage().getParameters().get('dwellingTypeVal');
- String dwellingValue = Apexpages.currentPage().getParameters().get('dwellingVal');
- String buildingTypeValue = Apexpages.currentPage().getParameters().get('buildingTypeVal');
- String buildingValue = Apexpages.currentPage().getParameters().get('buildingVal');
- String apartmentTypeValue = Apexpages.currentPage().getParameters().get('apartmentTypeVal');
- String apartmentValue = Apexpages.currentPage().getParameters().get('apartmentVal');
- String postcodeValue = Apexpages.currentPage().getParameters().get('postcodeVal');
- String commentValue = Apexpages.currentPage().getParameters().get('commentVal');
- if(language == String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN)){
- projectOrg.put('street__c', streetValue);
- projectOrg.put('houseOwnership__c', dwellingTypeValue);
- projectOrg.put('houseBuildingLiter__c', buildingTypeValue);
- projectOrg.put('build__c', dwellingValue);
- projectOrg.put('housing__c', buildingValue);
- projectOrg.put('flatOffice__c', apartmentTypeValue);
- projectOrg.put('flat__c', apartmentValue);
- } else {
- projectOrg.put('streetENG__c', streetValue);
- projectOrg.put('houseOwnership__c', dwellingTypeValue);
- projectOrg.put('houseBuildingLiter__c', buildingTypeValue);
- projectOrg.put('buildENG__c', dwellingValue);
- projectOrg.put('housingENG__c', buildingValue);
- projectOrg.put('flatOffice__c', apartmentTypeValue);
- projectOrg.put('flatENG__c', apartmentValue);
- }
- projectOrg.put('index__c', postcodeValue);
- projectOrg.put('adressComment__c', commentValue);
- system.debug('project organization >> '+projectOrg);
- }
- public void runFuzzySearch(){
- // take some info from DB for further fuzzy search logic
- bringRequiredInfo();
- //creating helper maps
- addressMatchingPercentMapForProject = new map<Id, Double>();
- addressMatchingPercentMapForObject = new map<Id, Double>();
- //search project Opportinities
- if(!CommonTools.isListEmpty(allOpportunitiesList)){
- matchingOpps = new map<Id, matchingOpp>();
- for(Opportunity o : allOpportunitiesList){
- compareSingleAddress(projectOrg, null, null, o, matchingOpps, language);
- compareNames(project.Name, o, matchingOpps, null, null, 'OPP_COMPARE');
- }
- if(!matchingOpps.isEmpty()){
- areMatchingOppsFound = true;
- } else {
- areMatchingOppsFound = false;
- }
- } else {
- areMatchingOppsFound = false;
- }
- //search object Accounts
- if(!CommonTools.isListEmpty(allAccountObjectsList)){
- matchingAccs = new map<Id, matchingAcc>();
- for(Account a : allAccountObjectsList){
- compareSingleAddress(projectOrg, a, matchingAccs, null, null, language);
- compareNames(projectOrg.Name, null, null, a, matchingAccs, 'ACC_COMPARE');
- }
- if(!matchingAccs.isEmpty()){
- areMatchingAccsFound = true;
- } else {
- areMatchingAccsFound = false;
- }
- } else {
- areMatchingAccsFound = false;
- }
- if(!areMatchingOppsFound && !areMatchingAccsFound){
- isSearchResult = false;
- isNothingFound = true;
- } else {
- isSearchResult = true;
- isNothingFound = false;
- }
- }
- private void runFuzzySearchForLead(){
- // also take some info from DB for further fuzzy search logic
- bringRequiredInfo();
- //creating helper maps
- addressMatchingPercentMapForProject = new map<Id, Double>();
- addressMatchingPercentMapForObject = new map<Id, Double>();
- //search project Opportinities
- if(!CommonTools.isListEmpty(allOpportunitiesList)){
- matchingOpps = new map<Id, matchingOpp>();
- if(pageLead.OpportunityId__c == null){
- for(Opportunity o : allOpportunitiesList){
- compareSingleAddressForLead(pageLead, null, null, o, matchingOpps);
- compareNames(pageLead.ProjectName__c, o, matchingOpps, null, null, 'OPP_COMPARE');
- }
- }
- if(!matchingOpps.isEmpty()){
- areMatchingOppsFound = true;
- } else {
- areMatchingOppsFound = false;
- }
- } else {
- areMatchingOppsFound = false;
- }
- //search object Accounts
- if(!CommonTools.isListEmpty(allAccountObjectsList)){
- matchingAccs = new map<Id, matchingAcc>();
- if(pageLead.AccountId__c == null){
- for(Account a : allAccountObjectsList){
- compareSingleAddressForLead(pageLead, a, matchingAccs, null, null);
- compareNames(pageLead.Company_name__c, null, null, a, matchingAccs, 'ACC_COMPARE');
- }
- }
- if(!matchingAccs.isEmpty()){
- areMatchingAccsFound = true;
- } else {
- areMatchingAccsFound = false;
- }
- } else {
- areMatchingAccsFound = false;
- }
- if((pageLead.OpportunityId__c == null || pageLead.AccountId__c == null) && !areMatchingOppsFound && !areMatchingAccsFound){
- isSearchResult = false;
- isNothingFound = true;
- } else if(pageLead.OpportunityId__c != null && pageLead.AccountId__c != null) {
- isNothingFound = false;
- isNotNecessaryToSearch = true;
- } else {
- isSearchResult = true;
- isNothingFound = false;
- }
- }
- private void compareNames(String nameString, Opportunity dbOpp, map<Id, matchingOpp> inputMatchingOpps, Account dbAcc, map<Id, matchingAcc> inputMatchingAccs, String compareType){
- String nameLowerCase = nameString.toLowerCase();
- String dbNameLowerCase;
- if(compareType == 'OPP_COMPARE'){
- dbNameLowerCase = dbOpp.Name.toLowerCase();
- } else if (compareType == 'ACC_COMPARE') {
- dbNameLowerCase = dbAcc.Name.toLowerCase();
- }
- List<String> nameLowerCaseArray = nameLowerCase.split('\\s*(=>|,|\\s)\\s*');
- List<String> dbNameLowerCaseArray = dbNameLowerCase.split('\\s*(=>|,|\\s)\\s*');
- Double compareResult;
- if(nameLowerCaseArray.size() > 1){
- List<String> shuffledWords = new List<String>();
- doShuffleStringInList(nameLowerCaseArray, shuffledWords);
- List<Double> tempCompareResultList = new List<Double>();
- for(String shuffled : shuffledWords){
- Double tempCompareResult = getStringsMatchPercent(shuffled, dbNameLowerCase);
- tempCompareResultList.add(tempCompareResult);
- }
- tempCompareResultList.sort();
- compareResult = tempCompareResultList.get(tempCompareResultList.size()-1);
- } else {
- if(dbNameLowerCaseArray.size() > 1){
- Double wordToPhraseCompareResult = 0.0;
- String dbOppNameToCompare = dbNameLowerCase.replaceAll('\\s*(=>|,|\\s)\\s*', '');
- for(String s : dbNameLowerCaseArray){
- Double tempCompareResult = getStringsMatchPercent(nameLowerCase, s);
- wordToPhraseCompareResult += tempCompareResult * (s.length()/Double.valueOf(String.valueOf(dbOppNameToCompare.length())));
- }
- compareResult = wordToPhraseCompareResult;
- } else {
- compareResult = getStringsMatchPercent(nameLowerCase, dbNameLowerCase);
- }
- }
- if(compareType == 'OPP_COMPARE'){
- if(inputMatchingOpps.containsKey(dbOpp.Id) && inputMatchingOpps.get(dbOpp.Id).matchingPercentAddress >= 50){
- inputMatchingOpps.get(dbOpp.Id).matchingPercent = compareResult;
- } else if (compareResult >= 50){
- matchingOpp mOpp = new matchingOpp(dbOpp, language);
- mOpp.matchingPercent = compareResult;
- mOpp.oppOwnerName = dbOpp.Owner.Name;
- mOpp.oppOwnerDivision = dbOpp.Owner.UserDivision__c;
- mOpp.oppOwnerId = dbOpp.OwnerId;
- if(addressMatchingPercentMapForProject.containsKey(dbOpp.Id)){
- mOpp.matchingPercentAddress = addressMatchingPercentMapForProject.get(dbOpp.Id);
- }
- inputMatchingOpps.put(mOpp.oppId, mOpp);
- }
- } else if(compareType == 'ACC_COMPARE') {
- if(inputMatchingAccs.containsKey(dbAcc.Id) && inputMatchingAccs.get(dbAcc.Id).matchingPercentAddress >= 50){
- inputMatchingAccs.get(dbAcc.Id).matchingPercent = compareResult;
- } else if(compareResult >= 50) {
- matchingAcc mAcc = new matchingAcc(dbAcc, language);
- mAcc.matchingPercent = compareResult;
- if(addressMatchingPercentMapForObject.containsKey(dbAcc.Id)){
- mAcc.matchingPercentAddress = addressMatchingPercentMapForObject.get(dbAcc.Id);
- }
- inputMatchingAccs.put(mAcc.accId, mAcc);
- }
- }
- }
- private Double getStringsMatchPercent(String s1, String s2){
- if(CommonTools.isStringEmpty(s1) || CommonTools.isStringEmpty(s2)) return 0.0;
- Integer matchI = s1.getLevenshteinDistance(s2, MAX_LEVENSHTEIN_DISTANCE);
- if(matchI < MAX_LEVENSHTEIN_DISTANCE && matchI != -1){
- Double biggestWordLength = Double.valueOf(String.valueOf(Math.max(s1.length(), s2.length())));
- return ((biggestWordLength - matchI) / biggestWordLength)*100;
- } else {
- /* BIRD */
- ////
- return 0.0;
- //
- }
- }
- public void defineFurtherActionLogic(){
- // define url for buttons for matching objects table
- if(areMatchingAccsFound){
- isHighLevelOfMatchingPercentOpps = isHighLevelOfMatchingPercentOpps(matchingOpps);
- Boolean isCurrentUserOwnerOfHighMatchingOpps = isCurrentUserOwnerOfHighMatchingOpps(highMatchingOppsWithAccObjIdKeys);
- Boolean isCurrentUserDivisionSameAsOwner = isCurrentUserDivisionSameAsOwner(highMatchingOppsWithAccObjIdKeys);
- for(matchingAcc mAcc : matchingAccs.values()){
- if(highMatchingOppsWithAccObjIdKeysSet.contains(mAcc.accId)){
- if(isCurrentUserOwnerOfHighMatchingOpps){
- String opportunitySObjectPrefix = Schema.getGlobalDescribe().get('Opportunity').getDescribe().getKeyPrefix();
- mAcc.createButtonUrl = '/'+opportunitySObjectPrefix+'/e?opp3='+project.Name+'&'+'opp4_lkid'+'='+mAcc.accId+'&'+'opp4'+'='+mAcc.accName;
- } else if(isCurrentUserDivisionSameAsOwner) {
- //
- // Create sysObj for ids
- //
- String opportunitySObjectPrefix = Schema.getGlobalDescribe().get('Opportunity').getDescribe().getKeyPrefix();
- mAcc.createButtonUrl = '/'+opportunitySObjectPrefix+'/e?opp3='+project.Name+'&'+'opp4_lkid'+'='+mAcc.accId+'&'+'opp4'+'='+mAcc.accName+'&'+'00N110000010n1C'+'='+'1';
- } else {
- List<matchingOpp> highMatchingOppsSorted = highMatchingOppsWithAccObjIdKeys;
- highMatchingOppsSorted.sort();
- String leadSObjectPrefix = Schema.getGlobalDescribe().get('Lead').getDescribe().getKeyPrefix();
- String additionalParamsToPass = '&name_lastlea2=(-)&lea3=(-)&00N11000000dWMF=(-)&00N11000000m5O4=(-)&lea4=(-)';
- mAcc.createButtonUrl = '/'+leadSObjectPrefix+'/e?00N11000000m5O4='+project.Name+'&'+'CF00N11000000d8Jv_lkid'+'='+mAcc.accId+'&'+'CF00N11000000d8Jv'+'='+mAcc.accName+'&'+'00N110000010rZc'+'='+'1'+'&'+'CF00N110000010wA8_lkid'+'='+highMatchingOppsSorted[0].oppOwnerId+'&'+'CF00N110000010wA8'+'='+highMatchingOppsSorted[0].oppOwnerName+additionalParamsToPass;
- }
- } else {
- String opportunitySObjectPrefix = Schema.getGlobalDescribe().get('Opportunity').getDescribe().getKeyPrefix();
- mAcc.createButtonUrl = '/'+opportunitySObjectPrefix+'/e?opp3='+project.Name+'&'+'opp4_lkid'+'='+mAcc.accId+'&'+'opp4'+'='+mAcc.accName;
- }
- }
- }
- if((!isHighLevelOfMatchingPercentAccs(matchingAccs) && !isHighLevelOfMatchingPercentOpps(matchingOpps)) || !isHighLevelOfMatchingPercentOpps(matchingOpps)){
- isReadyToCreateAccObj = true;
- } else {
- isReadyToCreateAccObj = false;
- }
- if(isHighLevelOfMatchingPercentAccs(matchingAccs) && !isHighLevelOfMatchingPercentOpps(matchingOpps)){
- isCreateButtonVisible = false;
- } else {
- isCreateButtonVisible = true;
- }
- matchingAccsSorted = matchingAccs.values();
- matchingAccsSorted.sort();
- matchingOppsSorted = matchingOpps.values();
- matchingOppsSorted.sort();
- matchingAccsSortedMini = new List<matchingAcc>();
- matchingOppsSortedMini = new List<matchingOpp>();
- if(matchingAccsSorted != null && matchingAccsSorted.size() > 0){
- if(matchingAccsSorted.size() <= MAX_ROWS_IN_MINI_TABLES){
- matchingAccsSortedMini = matchingAccsSorted;
- } else {
- for(Integer i=0; i<MAX_ROWS_IN_MINI_TABLES; i++){
- matchingAccsSortedMini.add(matchingAccsSorted[i]);
- }
- }
- }
- if(matchingOppsSorted != null && matchingOppsSorted.size() > 0){
- if(matchingOppsSorted.size() <= MAX_ROWS_IN_MINI_TABLES){
- matchingOppsSortedMini = matchingOppsSorted;
- } else {
- for(Integer i=0; i<MAX_ROWS_IN_MINI_TABLES; i++){
- matchingOppsSortedMini.add(matchingOppsSorted[i]);
- }
- }
- }
- }
- public void defineFurtherActionLogicForLead(){
- matchingAccsSorted = matchingAccs.values();
- matchingAccsSorted.sort();
- matchingOppsSorted = matchingOpps.values();
- matchingOppsSorted.sort();
- matchingAccsSortedMini = new List<matchingAcc>();
- matchingOppsSortedMini = new List<matchingOpp>();
- if(matchingAccsSorted != null && matchingAccsSorted.size() > 0){
- if(matchingAccsSorted.size() <= MAX_ROWS_IN_MINI_TABLES){
- matchingAccsSortedMini = matchingAccsSorted;
- } else {
- for(Integer i=0; i<MAX_ROWS_IN_MINI_TABLES; i++){
- matchingAccsSortedMini.add(matchingAccsSorted[i]);
- }
- }
- }
- if(matchingOppsSorted != null && matchingOppsSorted.size() > 0){
- if(matchingOppsSorted.size() <= MAX_ROWS_IN_MINI_TABLES){
- matchingOppsSortedMini = matchingOppsSorted;
- } else {
- for(Integer i=0; i<MAX_ROWS_IN_MINI_TABLES; i++){
- matchingOppsSortedMini.add(matchingOppsSorted[i]);
- }
- }
- }
- }
- private Boolean isHighLevelOfMatchingPercentOpps(map<Id, matchingOpp> opps){
- Boolean res = false;
- highMatchingOppsWithAccObjIdKeys = new List<matchingOpp>();
- highMatchingOppsWithAccObjIdKeysSet = new set<Id>();
- if(opps != null && !opps.isEmpty()){
- for(matchingOpp mo : opps.values()){
- if(mo.matchingPercentAddress >= 75 || (mo.matchingPercentAddress + mo.matchingPercent) >= 150){
- mo.isHighPercentOfMatch = true;
- res = true;
- if(mo.accObjectId != null){
- highMatchingOppsWithAccObjIdKeys.add(mo);
- highMatchingOppsWithAccObjIdKeysSet.add(mo.accObjectId);
- }
- }
- }
- }
- return res;
- }
- private Boolean isHighLevelOfMatchingPercentAccs(map<Id, matchingAcc> accs){
- Boolean res = false;
- if(accs != null && !accs.isEmpty()){
- for(matchingAcc ma : accs.values()){
- if(ma.matchingPercentAddress >= 75 || (ma.matchingPercentAddress + ma.matchingPercent) >= 150){
- res = true;
- }
- }
- }
- return res;
- }
- private Account createNewObjectAccount(){
- try{
- insert projectOrg;
- SystemObject__c so = new SystemObject__c();
- so.Name = projectOrg.Id;
- so.ObjectAccountToCheck__c = projectOrg.Id;
- so.Type__c = 'ObjectAccountToCheck';
- insert so;
- return projectOrg;
- } catch(Exception ex) {
- system.debug('Exception occured while creating Account object and creating system object: ' + ex.getMessage() + ' > ' + ex.getStackTraceString());
- return null;
- }
- }
- public PageReference createNewObjAccAndNewProjOpp(){
- String urlToRedirectTo = '';
- PageReference pageRef;
- if((isHighLevelOfMatchingPercentAccs(matchingAccs) && isHighLevelOfMatchingPercentOpps(matchingOpps)) || isHighLevelOfMatchingPercentOpps(matchingOpps)){
- if(isCurrentUserOwnerOfHighMatchingOpps(highMatchingOppsWithAccObjIdKeys)){
- Account objAcc = createNewObjectAccount();
- String opportunitySObjectPrefix = Schema.getGlobalDescribe().get('Opportunity').getDescribe().getKeyPrefix();
- urlToRedirectTo = '/'+opportunitySObjectPrefix+'/e?';
- pageRef = new PageReference(urlToRedirectTo);
- pageRef.getParameters().put('opp3', project.Name);
- pageRef.getParameters().put('opp4_lkid', objAcc.Id);
- pageRef.getParameters().put('opp4', objAcc.Name);
- } else if(isCurrentUserDivisionSameAsOwner(highMatchingOppsWithAccObjIdKeys)){
- Account objAcc = createNewObjectAccount();
- String opportunitySObjectPrefix = Schema.getGlobalDescribe().get('Opportunity').getDescribe().getKeyPrefix();
- urlToRedirectTo = '/'+opportunitySObjectPrefix+'/e?';
- pageRef = new PageReference(urlToRedirectTo);
- pageRef.getParameters().put('opp3', project.Name);
- pageRef.getParameters().put('opp4_lkid', objAcc.Id);
- pageRef.getParameters().put('opp4', objAcc.Name);
- String idsForEmails = getUserIdsToSendEmails(highMatchingOppsWithAccObjIdKeys);
- if(idsForEmails != ''){
- Id soId = getCreatedSystemObjectId(idsForEmails);
- pageRef.getParameters().put('CF00N110000010zhM', soId);
- }
- pageRef.getParameters().put('00N110000010n1C', '1');
- } else {
- String leadSObjectPrefix = Schema.getGlobalDescribe().get('Lead').getDescribe().getKeyPrefix();
- urlToRedirectTo = '/'+leadSObjectPrefix+'/e?';
- pageRef = new PageReference(urlToRedirectTo);
- pageRef.getParameters().put('00N11000000m5O4', project.Name);
- pageRef.getParameters().put('00N11000000dWMF', projectOrg.Name);
- pageRef.getParameters().put('00N110000010rZc', '1'); // approval process logic
- List<matchingOpp> highMatchingOppsSorted = highMatchingOppsWithAccObjIdKeys;
- highMatchingOppsSorted.sort();
- pageRef.getParameters().put('CF00N110000010wA8_lkid', highMatchingOppsSorted[0].oppOwnerId);
- pageRef.getParameters().put('CF00N110000010wA8', highMatchingOppsSorted[0].oppOwnerName);
- // additional parameters to pass
- pageRef.getParameters().put('name_lastlea2', '(-)');
- pageRef.getParameters().put('lea3', '(-)');
- pageRef.getParameters().put('00N11000000dWMF', '(-)');
- pageRef.getParameters().put('00N11000000m5O4', '(-)');
- pageRef.getParameters().put('lea4', '(-)');
- }
- } else {
- Account objAcc = createNewObjectAccount();
- String opportunitySObjectPrefix = Schema.getGlobalDescribe().get('Opportunity').getDescribe().getKeyPrefix();
- urlToRedirectTo = '/'+opportunitySObjectPrefix+'/e?';
- pageRef = new PageReference(urlToRedirectTo);
- pageRef.getParameters().put('opp3', project.Name);
- pageRef.getParameters().put('opp4_lkid', objAcc.Id);
- pageRef.getParameters().put('opp4', objAcc.Name);
- }
- pageRef.setRedirect(true);
- return pageRef;
- }
- private Id getObjectTypeAccountRT(){
- List<RecordType> RTIdList = [SELECT Id FROM RecordType WHERE DeveloperName = :DEV_NAME_RT_OBJECT_ACCOUNT];
- if(RTIdList != null && RTIdList.size() > 0){
- return RTIdList[0].Id;
- } else {
- return null;
- }
- }
- private void bringRequiredInfo(){
- allOpportunitiesList = [SELECT Id, Name, AccountId, Account.Name,
- Account.countryTerritory__c, Account.areaTerritory__c,
- Account.regionTerritory__c, Account.districtTerritory__c,
- Account.cityTerritory__c, Account.localityTerritory__c, Account.street__c,
- Address__c, Account.AddressValueRUS__c,
- Account.okrugENG__c, Account.regionENG__c,
- Account.districtENG__c, Account.cityENG__c, Account.livePlaceENG__c,
- Account.AddressValueENG__c, OwnerId, Owner.UserDivision__c, Owner.Name
- FROM Opportunity
- LIMIT 49999];
- allAccountObjectsList = [SELECT Id, Name, AddressValueRUS__c, AddressValueENG__c,
- countryTerritory__c, areaTerritory__c,
- regionTerritory__c, districtTerritory__c,
- cityTerritory__c, localityTerritory__c, street__c,
- okrugENG__c, regionENG__c, districtENG__c,
- cityENG__c, livePlaceENG__c
- FROM Account
- WHERE RecordTypeId = :OBJECT_TYPE_ACCOUNT_RT
- LIMIT 49999];
- }
- private Integer checkMatchForLongString(String s1, String s2){
- Integer p, q, l, sum;
- Integer pos1 = 0;
- Integer pos2 = 0;
- Integer max = 0;
- List<String> arr1 = cutStringForCharsList(s1);
- List<String> arr2 = cutStringForCharsList(s2);
- Integer firstLength = arr1.size();
- Integer secondLength = arr2.size();
- for(p = 0; p < firstLength; p++){
- for(q = 0; q < secondLength; q++){
- for (l = 0; (p + l < firstLength) && (q + l < secondLength) && (arr1[p+l] == arr2[q+l]); l++);
- if (l > max) {
- max = l;
- pos1 = p;
- pos2 = q;
- }
- }
- }
- sum = max;
- if (sum > 0){
- if (pos1 > 0 && pos2 > 0) {
- sum += checkMatchForLongString(s1.substring(0, pos1>firstLength ? firstLength : pos1), s2.substring(0, pos2>secondLength ? secondLength : pos2));
- }
- if ((pos1 + max < firstLength) && (pos2 + max < secondLength)) {
- sum += checkMatchForLongString(s1.substring(pos1 + max, firstLength), s2.substring(pos2 + max, secondLength));
- }
- }
- return sum;
- }
- private static List<String> cutStringForCharsList(String s){
- Integer i = 0;
- List<String> charsList = new List<String>();
- do{
- if(i<s.length()){
- charsList.add(s.substring(i, i+1));
- }
- i++;
- } while(i < s.length());
- return charsList;
- }
- private Double testCompareMethod(String s1, String s2){
- Integer res = s1.getLevenshteinDistance(s2, 15);
- if(res < 15 && res != -1){
- Double biggestWordLength = Double.valueOf(String.valueOf(Math.max(s1.length(), s2.length())));
- return ((biggestWordLength - res) / biggestWordLength)*100;
- } else {
- return 0;
- }
- }
- private Double similarText(String s1, String s2) {
- s1 = s1.toLowerCase();
- s2 = s2.toLowerCase();
- return (Double)(checkMatchForLongString(s1, s2)*200)/(s1.length()+s2.length());
- }
- private Id prepareIDFromParamString(String StringValue){
- if(CommonTools.isStringEmpty(StringValue)) return null;
- if(StringValue == '-1') return null;
- try{
- Id idValue = Id.valueOf(StringValue);
- return idValue;
- }catch(Exception e){
- return null;
- }
- return null;
- }
- private String getTerritoryName(Id terrId, String lang){
- Territory__c terr = [SELECT Id, NameRUS__c, NameENG__c
- FROM Territory__c
- WHERE Id = :terrId];
- if(lang == String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN)){
- return terr.NameRUS__c;
- } else {
- return terr.NameENG__c;
- }
- }
- private void compareSingleAddress(Account searchProjOrg, Account dbAcc, map<Id, matchingAcc> inputMatchingAccs, Opportunity dbOpp, map<Id, matchingOpp> inputMatchingOpps, String lang){
- Integer comparableValuesNumber = 0;
- Double compareResult = 0.0;
- if(lang != String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN)){
- if(!CommonTools.isStringEmpty(searchProjOrg.countryTerritory__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(searchProjOrg.countryTerritory__c == dbAcc.countryTerritory__c){
- compareResult += 100;
- }
- } else if(dbOpp != null) {
- if(searchProjOrg.countryTerritory__c == dbOpp.Account.countryTerritory__c){
- compareResult += 100;
- }
- }
- }
- if(!CommonTools.isStringEmpty(searchProjOrg.areaTerritory__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(searchProjOrg.areaTerritory__c == dbAcc.areaTerritory__c){
- compareResult += 100;
- }
- } else if(dbOpp != null) {
- if(searchProjOrg.areaTerritory__c == dbOpp.Account.areaTerritory__c){
- compareResult += 100;
- }
- }
- } else if(!CommonTools.isStringEmpty(searchProjOrg.okrugENG__c)) {
- comparableValuesNumber++;
- if(dbAcc != null){
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.okrugENG__c), convertToLowerCase(dbAcc.okrugENG__c));
- } else if(dbOpp != null) {
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.okrugENG__c), convertToLowerCase(dbOpp.Account.okrugENG__c));
- }
- }
- }
- if(!CommonTools.isStringEmpty(searchProjOrg.regionTerritory__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(searchProjOrg.regionTerritory__c == dbAcc.regionTerritory__c){
- compareResult += 100;
- }
- } else if(dbOpp != null) {
- if(searchProjOrg.regionTerritory__c == dbOpp.Account.regionTerritory__c){
- compareResult += 100;
- }
- }
- } else if(!CommonTools.isStringEmpty(searchProjOrg.regionENG__c)) {
- comparableValuesNumber++;
- if(dbAcc != null){
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.regionENG__c), convertToLowerCase(dbAcc.regionENG__c));
- } else if(dbOpp != null) {
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.regionENG__c), convertToLowerCase(dbOpp.Account.regionENG__c));
- }
- }
- if(!CommonTools.isStringEmpty(searchProjOrg.districtTerritory__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(searchProjOrg.districtTerritory__c == dbAcc.districtTerritory__c){
- compareResult += 100;
- }
- } else if(dbOpp != null) {
- if(searchProjOrg.districtTerritory__c == dbOpp.Account.districtTerritory__c){
- compareResult += 100;
- }
- }
- } else if(!CommonTools.isStringEmpty(searchProjOrg.districtENG__c)) {
- comparableValuesNumber++;
- if(dbAcc != null){
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.districtENG__c), convertToLowerCase(dbAcc.districtENG__c));
- } else if(dbOpp != null) {
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.districtENG__c), convertToLowerCase(dbOpp.Account.districtENG__c));
- }
- }
- if(!CommonTools.isStringEmpty(searchProjOrg.cityTerritory__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(searchProjOrg.cityTerritory__c == dbAcc.cityTerritory__c){
- compareResult += 100;
- }
- } else if(dbOpp != null) {
- if(searchProjOrg.cityTerritory__c == dbOpp.Account.cityTerritory__c){
- compareResult += 100;
- }
- }
- } else if(!CommonTools.isStringEmpty(searchProjOrg.cityENG__c)) {
- comparableValuesNumber++;
- if(dbAcc != null){
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.cityENG__c), convertToLowerCase(dbAcc.cityENG__c));
- } else if(dbOpp != null) {
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.cityENG__c), convertToLowerCase(dbOpp.Account.cityENG__c));
- }
- }
- if(!CommonTools.isStringEmpty(searchProjOrg.localityTerritory__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(searchProjOrg.localityTerritory__c == dbAcc.localityTerritory__c){
- compareResult += 100;
- }
- } else if(dbOpp != null) {
- if(searchProjOrg.localityTerritory__c == dbOpp.Account.localityTerritory__c){
- compareResult += 100;
- }
- }
- } else if(!CommonTools.isStringEmpty(searchProjOrg.livePlaceENG__c)) {
- comparableValuesNumber++;
- if(dbAcc != null){
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.livePlaceENG__c), convertToLowerCase(dbAcc.livePlaceENG__c));
- } else if(dbOpp != null) {
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.livePlaceENG__c), convertToLowerCase(dbOpp.Account.livePlaceENG__c));
- }
- }
- if(!CommonTools.isStringEmpty(searchProjOrg.street__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(lang == String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN)){
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.street__c), convertToLowerCase(dbAcc.street__c));
- } else {
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.street__c), convertToLowerCase(dbAcc.streetENG__c));
- }
- } else if(dbOpp != null) {
- if(lang == String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN)){
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.street__c), convertToLowerCase(dbOpp.Account.street__c));
- } else {
- compareResult += getStringsMatchPercent(convertToLowerCase(searchProjOrg.street__c), convertToLowerCase(dbOpp.Account.streetENG__c));
- }
- }
- }
- if(comparableValuesNumber == 0){
- compareResult = 0;
- } else {
- compareResult = compareResult / comparableValuesNumber;
- }
- if(compareResult >= 50){
- if(dbOpp != null){
- matchingOpp mOpp = new matchingOpp(dbOpp, language);
- mOpp.oppOwnerName = dbOpp.Owner.Name;
- mOpp.oppOwnerDivision = dbOpp.Owner.UserDivision__c;
- mOpp.matchingPercentAddress = compareResult;
- inputMatchingOpps.put(mOpp.oppId, mOpp);
- } else if(dbAcc != null) {
- matchingAcc mAcc = new matchingAcc(dbAcc, lang);
- mAcc.matchingPercentAddress = compareResult;
- inputMatchingAccs.put(mAcc.accId, mAcc);
- }
- } else if(compareResult > 0) {
- if(dbOpp != null){
- addressMatchingPercentMapForProject.put(dbOpp.Id, compareResult);
- } else if(dbAcc != null) {
- addressMatchingPercentMapForObject.put(dbAcc.Id, compareResult);
- }
- }
- }
- private void compareSingleAddressForLead(Lead inputLead, Account dbAcc, map<Id, matchingAcc> inputMatchingAccs, Opportunity dbOpp, map<Id, matchingOpp> inputMatchingOpps){
- Integer comparableValuesNumber = 0;
- Double compareResult = 0.0;
- String lng = String.valueOf(LanguageProcessor.LANGUAGE.RUSSIAN);
- if(inputLead.countryTerritory__c != russiaCountryTerritoryRecordId){
- lng = String.valueOf(LanguageProcessor.LANGUAGE.ENGLISH);
- if(!CommonTools.isStringEmpty(inputLead.countryTerritory__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(inputLead.countryTerritory__c == dbAcc.countryTerritory__c){
- compareResult += 100;
- }
- } else if(dbOpp != null) {
- if(inputLead.countryTerritory__c == dbOpp.Account.countryTerritory__c){
- compareResult += 100;
- }
- }
- }
- if(!CommonTools.isStringEmpty(inputLead.areaTerritory__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(inputLead.areaTerritory__c == dbAcc.areaTerritory__c){
- compareResult += 100;
- }
- } else if(dbOpp != null) {
- if(inputLead.areaTerritory__c == dbOpp.Account.areaTerritory__c){
- compareResult += 100;
- }
- }
- } else if(!CommonTools.isStringEmpty(inputLead.okrugENG__c)) {
- comparableValuesNumber++;
- if(dbAcc != null){
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.okrugENG__c), convertToLowerCase(dbAcc.okrugENG__c));
- } else if(dbOpp != null) {
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.okrugENG__c), convertToLowerCase(dbOpp.Account.okrugENG__c));
- }
- }
- }
- if(!CommonTools.isStringEmpty(inputLead.regionTerritory__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(inputLead.regionTerritory__c == dbAcc.regionTerritory__c){
- compareResult += 100;
- }
- } else if(dbOpp != null) {
- if(inputLead.regionTerritory__c == dbOpp.Account.regionTerritory__c){
- compareResult += 100;
- }
- }
- } else if(!CommonTools.isStringEmpty(inputLead.regionENG__c)) {
- comparableValuesNumber++;
- if(dbAcc != null){
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.regionENG__c), convertToLowerCase(dbAcc.regionENG__c));
- } else if(dbOpp != null) {
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.regionENG__c), convertToLowerCase(dbOpp.Account.regionENG__c));
- }
- }
- if(!CommonTools.isStringEmpty(inputLead.districtTerritory__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(inputLead.districtTerritory__c == dbAcc.districtTerritory__c){
- compareResult += 100;
- }
- } else if(dbOpp != null) {
- if(inputLead.districtTerritory__c == dbOpp.Account.districtTerritory__c){
- compareResult += 100;
- }
- }
- } else if(!CommonTools.isStringEmpty(inputLead.districtENG__c)) {
- comparableValuesNumber++;
- if(dbAcc != null){
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.districtENG__c), convertToLowerCase(dbAcc.districtENG__c));
- } else if(dbOpp != null) {
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.districtENG__c), convertToLowerCase(dbOpp.Account.districtENG__c));
- }
- }
- if(!CommonTools.isStringEmpty(inputLead.cityTerritory__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(inputLead.cityTerritory__c == dbAcc.cityTerritory__c){
- compareResult += 100;
- }
- } else if(dbOpp != null) {
- if(inputLead.cityTerritory__c == dbOpp.Account.cityTerritory__c){
- compareResult += 100;
- }
- }
- } else if(!CommonTools.isStringEmpty(inputLead.cityENG__c)) {
- comparableValuesNumber++;
- if(dbAcc != null){
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.cityENG__c), convertToLowerCase(dbAcc.cityENG__c));
- } else if(dbOpp != null) {
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.cityENG__c), convertToLowerCase(dbOpp.Account.cityENG__c));
- }
- }
- if(!CommonTools.isStringEmpty(inputLead.localityTerritory__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- if(inputLead.localityTerritory__c == dbAcc.localityTerritory__c){
- compareResult += 100;
- }
- } else if(dbOpp != null) {
- if(inputLead.localityTerritory__c == dbOpp.Account.localityTerritory__c){
- compareResult += 100;
- }
- }
- } else if(!CommonTools.isStringEmpty(inputLead.livePlaceENG__c)) {
- comparableValuesNumber++;
- if(dbAcc != null){
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.livePlaceENG__c), convertToLowerCase(dbAcc.livePlaceENG__c));
- } else if(dbOpp != null) {
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.livePlaceENG__c), convertToLowerCase(dbOpp.Account.livePlaceENG__c));
- }
- }
- if(!CommonTools.isStringEmpty(inputLead.street__c)){
- comparableValuesNumber++;
- if(dbAcc != null){
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.street__c), convertToLowerCase(dbAcc.street__c));
- } else if(dbOpp != null) {
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.street__c), convertToLowerCase(dbOpp.Account.street__c));
- }
- } else if(!CommonTools.isStringEmpty(inputLead.streetENG__c)) {
- comparableValuesNumber++;
- if(dbAcc != null){
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.streetENG__c), convertToLowerCase(dbAcc.streetENG__c));
- } else if(dbOpp != null) {
- compareResult += getStringsMatchPercent(convertToLowerCase(inputLead.streetENG__c), convertToLowerCase(dbOpp.Account.streetENG__c));
- }
- }
- if(comparableValuesNumber == 0){
- compareResult = 0;
- } else {
- compareResult = compareResult / comparableValuesNumber;
- }
- if(compareResult >= 50){
- if(dbOpp != null){
- matchingOpp mOpp = new matchingOpp(dbOpp, lng);
- mOpp.oppOwnerName = dbOpp.Owner.Name;
- mOpp.oppOwnerDivision = dbOpp.Owner.UserDivision__c;
- mOpp.matchingPercentAddress = compareResult;
- inputMatchingOpps.put(mOpp.oppId, mOpp);
- } else if(dbAcc != null) {
- matchingAcc mAcc = new matchingAcc(dbAcc, lng);
- mAcc.matchingPercentAddress = compareResult;
- inputMatchingAccs.put(mAcc.accId, mAcc);
- }
- } else if(compareResult > 0) {
- if(dbOpp != null){
- addressMatchingPercentMapForProject.put(dbOpp.Id, compareResult);
- } else if(dbAcc != null) {
- addressMatchingPercentMapForObject.put(dbAcc.Id, compareResult);
- }
- }
- }
- public static List<String> getWordsInListTillPosition(List<String> sList, Integer index){
- List<String> newSList = new List<String>();
- for(Integer i=0; i<index; i++){
- newSList.add(sList[i]);
- }
- return newSList;
- }
- public static List<String> getWordsInListUntilPosition(List<String> sList, Integer index){
- List<String> newSList = new List<String>();
- for(Integer i=index; i<sList.size(); i++){
- newSList.add(sList[i]);
- }
- return newSList;
- }
- public static void shuffleWordsInString(String prefix, List<String> inputList, List<String> finalList){
- Integer n = inputList.size();
- if(n == 0){
- system.debug(prefix);
- finalList.add(prefix.substring(0, prefix.length()-1));
- } else {
- for(Integer i=0; i<n; i++){
- List<String> sList = getWordsInListTillPosition(inputList, i);
- List<String> sList2 = getWordsInListUntilPosition(inputList, i+1);
- sList.addAll(sList2);
- shuffleWordsInString(prefix + inputList[i] + ' ', sList, finalList);
- }
- }
- }
- public static void doShuffleStringInList(List<String> strInputList, List<String> strResultList){
- shuffleWordsInString('', strInputList, strResultList);
- }
- public void getCurrentUserInfo(){
- currentUserId = UserInfo.getUserId();
- User currUser = [SELECT Id, UserDivision__c FROM User WHERE Id = :currentUserId];
- currentUserDivision = currUser.UserDivision__c;
- }
- private Boolean isCurrentUserOwnerOfHighMatchingOpps(List<matchingOpp> opps){
- Boolean res = true;
- if(opps != null && opps.size() > 0){
- for(matchingOpp mo : opps){
- if(mo.isHighPercentOfMatch == true){
- if(mo.oppOwnerId != currentUserId){
- res = false;
- }
- }
- }
- }
- return res;
- }
- private Boolean isCurrentUserDivisionSameAsOwner(List<matchingOpp> opps){
- Boolean res = true;
- if(opps != null && opps.size() > 0){
- for(matchingOpp mo : opps){
- if(mo.isHighPercentOfMatch == true){
- if(mo.oppOwnerDivision != currentUserDivision){
- res = false;
- }
- }
- }
- }
- return res;
- }
- private String getUserIdsToSendEmails(List<matchingOpp> opps){
- String result = '';
- if(opps != null && opps.size() > 0){
- for(matchingOpp mo : opps){
- if(mo.isHighPercentOfMatch == true){
- if(mo.oppOwnerDivision == currentUserDivision){
- if(mo.oppOwnerId != currentUserId){
- result += mo.oppOwnerId + ', ';
- }
- }
- }
- }
- }
- if(result != ''){
- result = result.substring(0, result.length()-2);
- }
- return result;
- }
- private Id getCreatedSystemObjectId(String multipleIdString){
- SystemObject__c so = new SystemObject__c();
- so.Text__c = multipleIdString;
- insert so;
- return so.Id;
- }
- public PageReference showAllSearchResults(){
- areShownMiniTables = false;
- isShowAllResultsButtonVisible = false;
- isShowMiniResultsButtonVisible = true;
- return null;
- }
- public PageReference showMiniSearchResults(){
- areShownMiniTables = true;
- isShowAllResultsButtonVisible = true;
- isShowMiniResultsButtonVisible = false;
- return null;
- }
- private void getRussiaTerritoryRecordId(){
- List<Territory__c> terrList = [SELECT Id FROM Territory__c WHERE Name = 'Россия'];
- russiaCountryTerritoryRecordId = terrList[0].Id;
- }
- private String convertToLowerCase(String s1){
- if(s1 != null && s1.length() > 0){
- return s1.toLowerCase();
- } else {
- return null;
- }
- }
- private void getFullInfoPageLead(){
- pageLead = [SELECT Id, Name, countryTerritory__c, areaTerritory__c, Company_name__c,
- regionTerritory__c, districtTerritory__c, cityTerritory__c,
- localityTerritory__c, street__c, streetENG__c, okrugENG__c,
- regionENG__c, districtENG__c, cityENG__c, livePlaceENG__c,
- OpportunityId__c, AccountId__c, ProjectName__c
- FROM Lead
- WHERE Id = :entryLead.Id];
- }
- webservice static void allyMatchingOpportunity(Id mOppId, Id pLeadId) {
- Lead leadToUpdate = [SELECT Id FROM Lead WHERE Id = :pLeadId];
- leadToUpdate.OpportunityId__c = mOppId;
- update leadToUpdate;
- }
- webservice static void allyMatchingAccount(Id mAccId, Id pLeadId) {
- Lead leadToUpdate = [SELECT Id FROM Lead WHERE Id = :pLeadId];
- leadToUpdate.AccountId__c = mAccId;
- update leadToUpdate;
- }
- public void checkIfHighMatchingOppsForLeadFound(){
- if(!matchingOpps.isEmpty()){
- isHighLevelOfMatchingPercentOpps = isHighLevelOfMatchingPercentOpps(matchingOpps);
- } else {
- isHighLevelOfMatchingPercentOpps = false;
- }
- pageLead.isHighMatchingProjectFound__c = isHighLevelOfMatchingPercentOpps;
- update pageLead;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement