(function () { "use strict"; angular.module("enrServicesModule") .factory("participationCalculator", ["officeJsonRegionFilter", "regionPropertiesParser", "$filter", "regionsJsonParser", "primaryService", function (officeJsonRegionFilter, regionPropertiesParser, $filter, regionsJsonParser, primaryService) { return { isOfficesRegionParticipating: function (officeCategoryJson, regionProperties) { var doesRegionInfoExist = regionsJsonParser.validOfficesRegionsJsonExist(officeCategoryJson); if (!doesRegionInfoExist) return false; var filteredRegionNodes = officeJsonRegionFilter.getRegionNodes(officeCategoryJson, regionProperties); if (filteredRegionNodes.length === 0) { // If no region information is present, that region is not participating return false; } //Not participating // No nodes in Races --> Not participating. var racesInThisRegion = (filteredRegionNodes[0] && filteredRegionNodes[0].Races && filteredRegionNodes[0].Races.Race) || null; if (racesInThisRegion == null) { return false; } if (!primaryService.getIsPrimary()) { return true; } // In primary mode, check if any candidates in the region are in the selected party function hasCandidatesForSelectedParty(candidatesInfo) { var filtered = candidatesInfo; if (!angular.isArray(candidatesInfo)) filtered = [candidatesInfo]; var selectedParty = primaryService.getSelectedParty(); for (var i = 0; i < filtered.length; i++) { if (filtered[i].PARTY === selectedParty || filtered[i].PARTY_ABBREV === selectedParty) { return true; } } return false; } var region = filteredRegionNodes[0]; if (region.MAP_JURISDICTION_TYPE === "District" || region.MAP_JURISDICTION_TYPE === "Locality") { if (region && region.Races && region.Races.Race && angular.isArray(region.Races.Race)) { for (var i = 0; i < region.Races.Race.length; i++) { var r = region.Races.Race[i]; if (hasCandidatesForSelectedParty(r.Candidates.Candidate)) { return true; } } } else { var candidatesInfo = region.Races.Race.Candidates.Candidate; return hasCandidatesForSelectedParty(candidatesInfo); } return false; } else { return true; } }, isReferendumsRegionParticipatingFromDetailedJson: function (referendumRegionJson) { return regionsJsonParser.validReferendumsDetailsJsonExist(referendumRegionJson); }, isReferendumsRegionParticipatingFromSummaryJson: function (referendumSummaryJson, regionProperties) { var regionId = regionPropertiesParser.getRegionPrimaryId(regionProperties, false, true); var regionNodes = $filter("filter")(referendumSummaryJson.Regions.Region, { FIPS: regionId.toString() }, true); var regionNode = regionNodes.length > 0 ? regionNodes[0] : undefined; return regionNode !== undefined && regionNode !== null && regionNode.Referendums !== undefined && regionNode.Referendums !== null && regionNode.Referendums.ALL_POSITIVE_RESULTS !== undefined && regionNode.Referendums.ALL_NEGATIVE_RESULTS !== undefined && regionNode.Referendums.ALL_POSITIVE_RESULTS !== null && regionNode.Referendums.ALL_NEGATIVE_RESULTS !== null; } }; }]); }());