{"version":3,"file":"4893.b36aea8a1034165a6b1a.js","mappings":"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","sources":["webpack://shipley-du-lib/./common/js/legacy/custPortal/cw/cw.pages.budgetManager.js","webpack://shipley-du-lib/./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["import moment from \"moment\";\r\nimport \"flot\";\r\nimport \"flot/jquery.flot.time\";\r\nimport \"flot/jquery.flot.stack\";\r\nimport \"flot/jquery.flot.categories\";\r\nimport \"flot/jquery.flot.pie\";\r\nimport \"jquery.flot.tooltip\";\r\n\r\nimport * as BootstrapDialog from \"bootstrap3-dialog\";\r\n\r\n(function (cw, $, undefined) {\r\n  \"use strict\";\r\n  $.extend(true, cw, {\r\n    pages: {\r\n      budgetManager: {\r\n        args: null,\r\n        budgetDetails: null,\r\n        budgetData: null,\r\n        summaryChart: null,\r\n        url: \"/account/manage-budget\",\r\n        title: \"Budget Manager\",\r\n        enrollHtmlTmpl: \"BudgetEnroll.html\",\r\n        managerHtmlTmpl: \"CwBudgetManagement.html\",\r\n        s1AccountId: null,\r\n        successCallback: null,\r\n        CustomerBudgetResponse: null,\r\n        CustomerServiceLocations: null,\r\n        CoverageType: {\r\n          Unknown: 0,\r\n          Fuel: 1,\r\n          Service: 2,\r\n          FuelandService: 3,\r\n        },\r\n        heatingOilUsageValue: {\r\n          HeatingOnly: 650,\r\n          HeatingAndHotWater: 750,\r\n        },\r\n        fuelUtils: [cw.appEnum.ProductCode.HeatingOil, cw.appEnum.ProductCode.Propane],\r\n        serviceUtils: [cw.appEnum.ProductCode.ServiceProduct],\r\n        AssociatedFuelCapFeeFallback: {\r\n          Propane: 99,\r\n          HeatingOil: 120,\r\n        },\r\n        BudgetEnrollmentStatus: {\r\n          Successfull: 1,\r\n          BackendValidationFailed: 2,\r\n          FailedBackendCreation: 3,\r\n          FailedPriceChangeRequest: 4,\r\n        },\r\n        /**\r\n         * Main Entry Point into Js file\r\n         * @param {*} args\r\n         */\r\n        init: function (args) {\r\n          this.args = args;\r\n          this.s1AccountId = args.budgetData.S1AccountId;\r\n          this.budgetData = args.budgetData;\r\n          this.initializePage(args);\r\n        },\r\n        /**\r\n         * Initializes page\r\n         * **Gathers Data\r\n         * **Renders Html\r\n         * @param {*} args\r\n         */\r\n        initializePage: function (args) {\r\n          var self = this;\r\n\r\n          //if we need it\r\n          cw.loadingIndicator.stop();\r\n\r\n          if (!args.$viewport) {\r\n            args.$viewport = $(\".dashboard-viewport\");\r\n          }\r\n\r\n          //API call to get budget info\r\n          self.getCustomerBudgetDetails({\r\n            s1AccountId: self.s1AccountId,\r\n            callback: function (rtnData) {\r\n              self.budgetDetails = rtnData;\r\n              cw.templating.GetRenderedTemplateHTML(\r\n                self.managerHtmlTmpl,\r\n                cw.appEnum.TemplateType.CwWidget,\r\n                {\r\n                  Data: rtnData,\r\n                },\r\n                function (renderedTmpl) {\r\n                  args.$viewport.empty().append('<div class=\"row container\">' + renderedTmpl + \"</div>\");\r\n                  self.bindInteractions();\r\n                }\r\n              );\r\n            },\r\n          });\r\n        },\r\n        /**\r\n         * Bind Manager Interactions\r\n         */\r\n        bindInteractions: function () {\r\n          var self = this;\r\n          var $wrapperEl = $(\".budget-management-wrapper\"),\r\n            $enrollBudget = $(\".budget-enroll\");\r\n\r\n          //Set up our graphs here on a Per Customer basis\r\n          $wrapperEl\r\n            .find(\".nav-list-item\")\r\n            .find(\"a\")\r\n            .each(function (idx) {\r\n              var customer = $(this).data(\"customerId\");\r\n              var $statusChart = $wrapperEl.find(\"#status-pie-\" + customer);\r\n              var $summaryPie = $wrapperEl.find(\"#summary-bar-\" + customer);\r\n              var dataSet = self.budgetDetails.find(function (x) {\r\n                return x.Active && x.CustomerId === customer;\r\n              });\r\n\r\n              //Mustache is being silly here, set the first account as active and it's panel\r\n              if (idx === 0) {\r\n                $(this).parent().addClass(\"active\");\r\n                $wrapperEl.find(\"#account-\" + customer).addClass(\"active\");\r\n              }\r\n\r\n              self.makeStatusChart(dataSet, $statusChart);\r\n              self.makeSummaryChart(dataSet, $summaryPie, function () {\r\n                if (self.summaryChart) {\r\n                  var val = $('[name=\"budget-val\"]');\r\n                  var chartData = self.summaryChart.getData();\r\n\r\n                  //determine label color for summary chart\r\n                  $.each(chartData, function (idx, el) {\r\n                    var thisData = el.data[0];\r\n                    var labelColor = thisData[0] > 600 ? \"white\" : \"black\";\r\n                    var o = self.summaryChart.pointOffset({ x: 0, y: idx, yaxis: 1, xaxis: 1 });\r\n                    $(\r\n                      '<div class=\"data-point-label fs-xs-14\">' +\r\n                        cw.utility.formatAsMoney(thisData[0], cw.appEnum.PriceDisplayType.DollarsPerUnit, 2) +\r\n                        \"</div>\"\r\n                    )\r\n                      .css({\r\n                        position: \"absolute\",\r\n                        left: o.left + 10,\r\n                        top: o.top - 5,\r\n                        display: \"none\",\r\n                        color: labelColor,\r\n                      })\r\n                      .appendTo(self.summaryChart.getPlaceholder())\r\n                      .fadeIn(\"slow\");\r\n                  });\r\n                }\r\n              });\r\n\r\n              //hide this here so we get the proper sizing of the chart, or the size will be jacked\r\n              $wrapperEl.find(\".summary-bar-wrapper-\" + customer).addClass(\"hidden\");\r\n            });\r\n\r\n          $wrapperEl.on(\"click\", '[name=\"account-tab\"]', function (e) {\r\n            e.preventDefault();\r\n            var $this = $(this);\r\n            var customerId = $this.data(\"customerId\");\r\n\r\n            if ($this.attr(\"href\") === \"#account-\" + customerId) {\r\n              $wrapperEl.find(\".tab-pane\").removeClass(\"active\");\r\n              var tab = $wrapperEl.find(\"#account-\" + customerId + \"\");\r\n              tab.addClass(\"active\");\r\n              $this.tab(\"show\");\r\n            }\r\n          });\r\n          $wrapperEl.on(\"click\", '[name=\"chart-select\"]', function (e) {\r\n            e.preventDefault();\r\n            var $this = $(this);\r\n            var customerId = $this.data(\"customerId\");\r\n            var $statusChart = $wrapperEl.find(\".status-pie-wrapper-\" + customerId),\r\n              $summaryPie = $wrapperEl.find(\".summary-bar-wrapper-\" + customerId);\r\n\r\n            $wrapperEl\r\n              .find('[name=\"chart-select\"][data-customer-id=\"' + customerId + '\"]')\r\n              .removeClass(\"active\");\r\n            if ($this.hasClass(\"toggle-pie-status\")) {\r\n              $statusChart.removeClass(\"hidden\");\r\n              $summaryPie.addClass(\"hidden\");\r\n            } else if ($this.hasClass(\"toggle-bar-summary\")) {\r\n              $statusChart.addClass(\"hidden\");\r\n              $summaryPie.removeClass(\"hidden\");\r\n            }\r\n\r\n            $this.addClass(\"active\");\r\n          });\r\n\r\n          $enrollBudget.on(\"click\", function (e) {\r\n            e.preventDefault();\r\n            self.budgetEnroll({\r\n              CustomerBudgetResponse: self.budgetData.CustomerBudgetResponse,\r\n              ServiceLocations: self.budgetData.ServiceLocations,\r\n              AccountBalances: self.budgetData.AccountBalances,\r\n              S1AccountId: self.budgetData.S1AccountId,\r\n              successCallback: function () {\r\n                this.init(self.budgetData);\r\n              },\r\n            });\r\n          });\r\n        },\r\n        /**\r\n         * Renders Status Chart on $graphTarget element\r\n         * @param {*} dataSet\r\n         * @param {*} $graphTarget\r\n         */\r\n        makeStatusChart: function (dataSet, $graphTarget) {\r\n          var self = this;\r\n          var options = {\r\n            series: {\r\n              pie: {\r\n                show: true,\r\n                //innerRadius: 0.7,\r\n                radius: 1,\r\n                // radius: 0.5,\r\n                label: {\r\n                  show: true,\r\n                  formatter: function (label, series) {\r\n                    var $html = $(\r\n                      '<div class=\"pie-label-inner\">' +\r\n                        label +\r\n                        \"</br>\" +\r\n                        cw.utility.formatAsMoney(\r\n                          series.data[0][1],\r\n                          cw.appEnum.PriceDisplayType.DollarsPerUnit,\r\n                          2\r\n                        ) +\r\n                        \"/ \" +\r\n                        cw.utility.formatAsMoney(\r\n                          dataSet.TotalPlanCoverage,\r\n                          cw.appEnum.PriceDisplayType.DollarsPerUnit,\r\n                          2\r\n                        ) +\r\n                        \"</div>\"\r\n                    );\r\n                    $html.css({\r\n                      color: \"white\",\r\n                      \"font-size\": \"12px\",\r\n                      \"text-align\": \"center\",\r\n                      padding: \"2px\",\r\n                      \"border-radius\": \"4px\",\r\n                      background: \"#000\",\r\n                    });\r\n                    return $html[0].outerHTML;\r\n                  },\r\n                  threshold: 0.1,\r\n                },\r\n              },\r\n            },\r\n            legend: {\r\n              show: false,\r\n            },\r\n            grid: {\r\n              hoverable: false,\r\n            },\r\n          };\r\n\r\n          var graphData = [\r\n            {\r\n              label: \"Amount Paid Into Budget\",\r\n              data: dataSet.PaidToDate.toFixed(2),\r\n              color: cw.constants.shipleyBlue,\r\n            },\r\n            {\r\n              label: \"Amount Remaining In Budget\",\r\n              data: dataSet.AmountRemaining.toFixed(2),\r\n              color: cw.constants.ctaOrange,\r\n            },\r\n          ];\r\n          if ($graphTarget.height() < 200) {\r\n            $graphTarget.height(200);\r\n          }\r\n\r\n          $.plot($graphTarget, graphData, options);\r\n        },\r\n        /**\r\n         * Renders Summary Chart on $graphTarget element\r\n         * @param {*} dataSet\r\n         * @param {*} $graphTarget\r\n         */\r\n        makeSummaryChart: function (dataSet, $graphTarget, callback) {\r\n          var self = this;\r\n          var data = [\r\n            {\r\n              label: \"Budget Used\",\r\n              data: [[dataSet.ActualUsageAmount, 0]],\r\n              color: cw.constants.shipleyGreen,\r\n            },\r\n            {\r\n              //Paid into Budget\r\n              label: \"Budget Paid\",\r\n              data: [[dataSet.PaidToDate, 1]],\r\n              color: cw.constants.shipleyBlue,\r\n            }, //Total Usage\r\n          ];\r\n\r\n          if ($graphTarget.height() < 150) {\r\n            $graphTarget.height(150);\r\n          }\r\n\r\n          self.summaryChart = $.plot($graphTarget, data, {\r\n            series: {\r\n              bars: {\r\n                show: true,\r\n                barWidth: 0.3,\r\n                align: \"center\",\r\n                //lineWidth: 0,\r\n                fill: 0.75,\r\n                horizontal: true,\r\n              },\r\n            },\r\n            yaxis: {\r\n              ticks: [\r\n                [0, '<div class=\"budget-used\">Budget Used</div>'],\r\n                [1, '<div class=\"budget-paid\">Budget Paid</div>'],\r\n              ],\r\n              alignTicksWithAxis: 0,\r\n            },\r\n            xaxis: {\r\n              max: Math.round(100 * dataSet.TotalPlanCoverage) / 100,\r\n              axisLabel: \"Price (USD/oz)\",\r\n            },\r\n            legend: {\r\n              show: false,\r\n            },\r\n            tooltip: true,\r\n            tooltipOpts: {\r\n              cssClass: \"flotTip\",\r\n              content: function (label, xval, yval, flotItem) {\r\n                return (\r\n                  '<div style=\"background: white; color: black; border-radius: 4px; border: 1px solid; padding: 10px; font-size: 14px;\">' +\r\n                  label +\r\n                  \": </br >\" +\r\n                  cw.utility.formatAsMoney(xval, cw.appEnum.PriceDisplayType.DollarsPerUnit, 2) +\r\n                  \"/\" +\r\n                  cw.utility.formatAsMoney(\r\n                    dataSet.TotalPlanCoverage,\r\n                    cw.appEnum.PriceDisplayType.DollarsPerUnit,\r\n                    2\r\n                  ) +\r\n                  \"</div>\"\r\n                );\r\n              },\r\n              defaultTheme: false,\r\n            },\r\n            grid: {\r\n              hoverable: true,\r\n            },\r\n          });\r\n\r\n          if (typeof callback === \"function\") {\r\n            callback();\r\n          }\r\n        },\r\n        /**\r\n         * Retrieves Budget Details from backend\r\n         * @param {*} args\r\n         */\r\n        getCustomerBudgetDetails: function (args) {\r\n          cw.webservices.getJson(\r\n            \"S1AccountManager/get-budget-by-s1account/\" + args.s1AccountId,\r\n            null,\r\n            function (rtnData) {\r\n              if (typeof args.callback === \"function\") {\r\n                args.callback(rtnData);\r\n              }\r\n            }\r\n          );\r\n        },\r\n        /**\r\n         * Enroll in Budget Plan\r\n         * @param {*} args\r\n         */\r\n        budgetEnroll: function (args) {\r\n          if (args) {\r\n            var self = this;\r\n            self.s1AccountId = args.S1AccountId;\r\n            self.successCallback = args.successCallback;\r\n            self.cancelCallback = args.cancelCallback;\r\n            self.CustomerBudgetResponse = null; //reset on new modal request\r\n            self.CustomerServiceLocations = JSON.parse(JSON.stringify(args.ServiceLocations)); //deep copy to keep reference integrity on new modal request\r\n\r\n            //this gets called in self.getBudgetEnrollMarkup() function, but declared here because we need the markup rendered first\r\n            args.callback = function (renderedTmpl) {\r\n              cw.modal.Open({\r\n                data: { data: args },\r\n                title: \"Enroll in a Budget Plan\",\r\n                modalBody: $(renderedTmpl),\r\n                size: BootstrapDialog.SIZE_WIDE,\r\n                buttons: [\r\n                  {\r\n                    label: '<i class=\"fa fa-times\"></i> Cancel',\r\n                    cssClass: \"btn-white btn-xs-block\",\r\n                    action: function (dialogRef) {\r\n                      if (typeof self.cancelCallback === \"function\") {\r\n                        self.cancelCallback(self.args.CustomerBudgetResponse);\r\n                        dialogRef.close();\r\n                      }\r\n                    },\r\n                  },\r\n                  {\r\n                    label: '<i class=\"fa fa-paper-plane\"></i> Enroll',\r\n                    cssClass: \"btn-primary btn-xs-block enroll\" + self.getBudgetEnrollButtonStatus(args), //enable/disable based on if more info is needed\r\n                    action: function (dialogRef) {\r\n                      //enroll btn\r\n                      if (!dialogRef.$modalFooter.find(\".enroll\").hasClass(\"disabled\")) {\r\n                        cw.loadingIndicator.start();\r\n\r\n                        self.makeBudgetEnrollment(\r\n                          self.args.CustomerBudgetRequest,\r\n                          //successCallback\r\n                          function (rtnData) {\r\n                            if (rtnData.Successful) {\r\n                              if (typeof self.successCallback === \"function\") {\r\n                                cw.loadingIndicator.stop();\r\n                                dialogRef.close();\r\n                                self.successCallback(self.args.CustomerBudgetResponse);\r\n                              }\r\n                            } else {\r\n                              cw.alert.Alert([{ text: rtnData.Message }], $(\".err-pnl\"));\r\n                            }\r\n                          },\r\n                          //errorCallback\r\n                          function (errs) {\r\n                            cw.alert.Alert(errs, $(\".err-pnl\"));\r\n                            cw.loadingIndicator.stop();\r\n                          }\r\n                        );\r\n                      }\r\n                    },\r\n                  },\r\n                ],\r\n                onShownCallback: function (modalRef) {\r\n                  cw.loadingIndicator.stop();\r\n                  self.recalculateBudgetSummary(modalRef);\r\n\r\n                  self.bindMultipleBillingAccountSelector(modalRef);\r\n                  self.bindEnrollmentModal(modalRef);\r\n                },\r\n              });\r\n            };\r\n\r\n            self.args = args;\r\n            self.getBudgetEnrollMarkup(self.args);\r\n          }\r\n        },\r\n        /**\r\n         *\r\n         * @param {*} status\r\n         */\r\n        parseBackendStatus: function (status) {\r\n          var self = this;\r\n          var msg = \"Budget Enrollment Failed\";\r\n          switch (status) {\r\n            case self.BudgetEnrollmentStatus.Successful:\r\n              return \"Successful\";\r\n            case self.BudgetEnrollmentStatus.BackendValidationFailed:\r\n            case self.BudgetEnrollmentStatus.FailedBackendCreation:\r\n            case self.BudgetEnrollmentStatus.FailedPriceChangeRequest:\r\n              return (\r\n                msg +\r\n                \" - Please contact your sales representative or our customer service department for more information.\"\r\n              );\r\n            default:\r\n              return msg;\r\n          }\r\n        },\r\n        /**\r\n         * Function to Make the Budget Enrollment\r\n         * **Validate\r\n         * **Backend Save\r\n         * **Success/Error\r\n         * @param {*} data\r\n         * @param {*} successCallback\r\n         * @param {*} errorCallback\r\n         */\r\n        makeBudgetEnrollment: function (data, successCallback, errorCallback) {\r\n          if (data) {\r\n            var self = this;\r\n            var validObj = self.validateBudgetEnrollment(data);\r\n\r\n            if (!validObj.errs) {\r\n              self.saveBudgetEnrollment({\r\n                data: {\r\n                  CustomerBudgetRequest: validObj,\r\n                },\r\n                callback: function (rtnData) {\r\n                  if (rtnData.Successful) {\r\n                    if (typeof successCallback === \"function\") {\r\n                      successCallback(rtnData);\r\n                    }\r\n                  } else {\r\n                    if (typeof errorCallback === \"function\") {\r\n                      errorCallback([{ text: self.parseBackendStatus(rtnData.BudgetEnrollmentStatus) }]); //error message\r\n                    }\r\n                  }\r\n                },\r\n              });\r\n            } else {\r\n              if (typeof errorCallback === \"function\") {\r\n                errorCallback(validObj.errs);\r\n              }\r\n            }\r\n          }\r\n        },\r\n        /**\r\n         * Backend Save Function for Budget Enrollment\r\n         * @param {*} args\r\n         */\r\n        saveBudgetEnrollment: function (args) {\r\n          if (args) {\r\n            cw.webservices.getJson(\"S1AccountManager/enroll-new-budget\", args.data, function (rtnData) {\r\n              if (typeof args.callback === \"function\") {\r\n                args.callback(rtnData);\r\n              }\r\n            });\r\n          }\r\n        },\r\n        /**\r\n         * Budget Enrollment Data Validation\r\n         * @param {*} args\r\n         */\r\n        validateBudgetEnrollment: function (args) {\r\n          var self = this,\r\n            errs = [];\r\n\r\n          if (!args) {\r\n            errs.push({ text: \"Invalid Customer Budget Response\" });\r\n          }\r\n          if (\r\n            args.some(function (x) {\r\n              return parseFloat(x.MonthlyPaymentAmount) && parseFloat(x.MonthlyPaymentAmount) === 0;\r\n            })\r\n          ) {\r\n            errs.push({ text: \"Invalid Montly Payment Amount\" });\r\n          }\r\n          if (\r\n            args.some(function (x) {\r\n              return parseFloat(x.TotalPlanCoverage) && parseFloat(x.TotalPlanCoverage) === 0;\r\n            })\r\n          ) {\r\n            errs.push({ text: \"Total Plan Coverage must be greater than 0\" });\r\n          }\r\n          if (\r\n            args.some(function (x) {\r\n              return x.CoverageType === self.CoverageType.Unknown;\r\n            })\r\n          ) {\r\n            errs.push({ text: \"Invalid Coverage Type\" });\r\n          }\r\n          if (\r\n            args.some(function (x) {\r\n              return (\r\n                !x.BudgetEffectiveDate || !x.BudgetEffectiveDate.StartDate || !x.BudgetEffectiveDate.EndDate\r\n              );\r\n            })\r\n          ) {\r\n            errs.push({ text: \"Invalid Effective Date Range\" });\r\n          }\r\n          if (\r\n            args.some(function (x) {\r\n              return parseInt(x.NumberOfPayments) && parseInt(x.NumberOfPayments) < 1;\r\n            })\r\n          ) {\r\n            errs.push({ text: \"Number of Payments must be greater than 0\" });\r\n          }\r\n          if (\r\n            args.some(function (x) {\r\n              return !x.AccountMap || !x.AccountMap.RemoteSystemAccountNumber;\r\n            })\r\n          ) {\r\n            errs.push({ text: \"Invalid Account for budget\" });\r\n          }\r\n          if (\r\n            args.some(function (x) {\r\n              return !x.LocationBudgetsItems || (x.LocationBudgetsItems && x.LocationBudgetsItems.length < 1);\r\n            })\r\n          ) {\r\n            errs.push({ text: \"Budget Locations must contain at least one entry\" });\r\n          }\r\n\r\n          if (errs.length === 0) {\r\n            return Object.freeze(args);\r\n          }\r\n\r\n          return { errs: errs };\r\n        },\r\n        /**\r\n         * Additional Markup for Budget Enrollment Modal\r\n         * @param {*} productId\r\n         */\r\n        getFuelProductUsageMarkup: function (productId) {\r\n          return (\r\n            '\t<div class=\"form-group col-xs-12 pt20\">' +\r\n            '\t\t<label class=\"form-label\"> ' +\r\n            cw.utility.utilityEnumToText(productId) +\r\n            \"</label>\" +\r\n            '\t\t<select class=\"form-control\" id=\"usage-select\">' +\r\n            '\t\t\t<option value=\"\">--Select--</option>' +\r\n            '\t\t\t<option value=\"650\">Heat Only</option>' +\r\n            '\t\t\t<option value=\"750\">Heat and Hot Water</option>' +\r\n            \"\t\t</select>\" +\r\n            \"\t</div>\"\r\n          );\r\n        },\r\n        /**\r\n         * Iterate over Locations and extract Budget Items\r\n         * @param {*} loc\r\n         * @param {*} search\r\n         */\r\n        extractBudgetItemFromServiceLocation: function (loc, search) {\r\n          if (\r\n            loc &&\r\n            loc.length > 0 &&\r\n            search &&\r\n            search.ProductId &&\r\n            search.CustomerId &&\r\n            search.DeliveryPointId\r\n          ) {\r\n            var rtn = {};\r\n            loc.forEach(function (dp, idx) {\r\n              if (\r\n                dp.LocationBudgetEligibility &&\r\n                dp.LocationBudgetEligibility.BudgetItemsCovered &&\r\n                dp.LocationBudgetEligibility.BudgetItemsCovered.length > 0\r\n              ) {\r\n                dp.LocationBudgetEligibility.BudgetItemsCovered.forEach(function (item, idx) {\r\n                  if (\r\n                    item.ProductId === search.ProductId &&\r\n                    item.CustomerId === search.CustomerId &&\r\n                    item.DeliveryPointId === search.DeliveryPointId\r\n                  ) {\r\n                    rtn = item;\r\n                  }\r\n                });\r\n              }\r\n              if (rtn) {\r\n                return;\r\n              }\r\n            });\r\n            return rtn;\r\n          }\r\n        },\r\n        getCapPriceEndDate: function () {\r\n          var now = moment();\r\n          var capPriceDate = moment(now.year() + \"-5-31\");\r\n          if (capPriceDate.isBefore(now)) {\r\n            return capPriceDate.add(1, \"year\").format(\"L\");\r\n          }\r\n          return capPriceDate.format(\"L\");\r\n        },\r\n        /**\r\n         * Draw Modal to request more information on Budget Enroll - so many callbacks\r\n         * @param {*} $this\r\n         * @param {*} mr\r\n         */\r\n        drawMoreInfoModal: function ($this, mr) {\r\n          var self = this;\r\n          var productId = $this.data(\"productId\");\r\n          var data = mr.getData(\"data\");\r\n          var budgetItem = self.extractBudgetItemFromServiceLocation(data.ServiceLocations, {\r\n            ProductId: productId,\r\n            CustomerId: $this.data(\"customerId\"),\r\n            DeliveryPointId: $this.data(\"deliveryId\"),\r\n          });\r\n          var checkUsage = budgetItem ? budgetItem.AskForUsage : false;\r\n          var checkCap = budgetItem ? budgetItem.AskForCapPlan : false;\r\n\r\n          var getProductInfoMarkup = function (args, callback) {\r\n            var prodMarkup =\r\n              '<div class=\"more-info-content-wrapper clearfix\">' +\r\n              '\t<div class=\"more-info-content\">' +\r\n              '<div class=\"pt20 pb20\">';\r\n\r\n            var productInfoMarkupCallback = function () {\r\n              if (typeof callback === \"function\") {\r\n                callback(prodMarkup + \"</div></div>\");\r\n              }\r\n            };\r\n\r\n            if ((checkCap || checkUsage) && self.fuelUtils.includes(productId)) {\r\n              if (checkUsage) {\r\n                prodMarkup +=\r\n                  '\t<div class=\"usage-info\" data-product-id=\"' +\r\n                  productId +\r\n                  '\" data-customer-id=\"' +\r\n                  $this.data(\"customerId\") +\r\n                  '\">' +\r\n                  \"\t\t<div> We were unable to retrieve historical fuel usage to determine the best Budget Payment for you. Please fill out the following information:</div>\" +\r\n                  \"\t</div>\" +\r\n                  self.getFuelProductUsageMarkup(productId);\r\n              }\r\n\r\n              if (checkCap && budgetItem.CapPricePlan) {\r\n                cw.templating.DownloadTemplateHtml(\r\n                  \"ApplicationPricePlan.html\",\r\n                  cw.appEnum.TemplateType.CwWidget,\r\n                  function (templateContents) {\r\n                    var $planPreview = $(\r\n                      cw.pages.application.renderPricePlans(\r\n                        templateContents,\r\n                        [budgetItem.CapPricePlan],\r\n                        1,\r\n                        false\r\n                      )\r\n                    );\r\n                    var $planHighlights = $planPreview\r\n                      .find(\".plan-highlights > ul > li:first\")\r\n                      .append(\"<li><strong> Plan EndDate: \" + self.getCapPriceEndDate() + \"</strong></li>\");\r\n                    $planPreview.find(\".enrollment-select\").remove();\r\n\r\n                    prodMarkup +=\r\n                      '\t<div class=\"form-group col-xs-12 cap-info\">' +\r\n                      '\t\t\t\t<label class=\"form-label pb5\"> Would you like to Cap your Price? </label>' +\r\n                      '\t\t\t\t<div class=\"shipley-checkbox\">' +\r\n                      '\t\t\t\t\t<input id=\"yes-price-cap\" name=\"price-cap\" type=\"radio\" value=\"yes\"> ' +\r\n                      '\t\t\t\t\t<label for=\"yes-price-cap\"> Yes, Cap my Price @ ' +\r\n                      '\t\t\t\t\t\t<span class=\"shipley-blue\" style=\"font-weight: 600\"> ' +\r\n                      budgetItem.CapPricePlan.PriceFormatted +\r\n                      \"/gal</span>\" +\r\n                      \"\t\t\t\t\t</label>\" +\r\n                      \"\t\t\t\t</div>\" +\r\n                      '\t\t\t\t<div class=\"shipley-checkbox\">' +\r\n                      '\t\t\t\t\t<input id=\"no-price-cap\" name=\"price-cap\" type=\"radio\" value=\"no\" checked> ' +\r\n                      '\t\t\t\t\t<label for=\"no-price-cap\"> No, keep my estimated budget price @ ' +\r\n                      '\t\t\t\t\t\t<span class=\"shipley-blue\" style=\"font-weight: 600\"> $' +\r\n                      budgetItem.ProductUnitCost +\r\n                      \"/gal\" +\r\n                      \"</span>\" +\r\n                      \" \t\t\t\t\t</label>\" +\r\n                      \"\t\t\t\t</div>\" +\r\n                      '\t\t\t\t<div class=\"plan-details-wrapper pt20 pb20 mt20 hidden\"> ' +\r\n                      '\t\t\t\t\t<div class=\"plan-details fs-xs-12\">' +\r\n                      $planPreview[0].outerHTML +\r\n                      \"\t\t\t\t\t</div>\" +\r\n                      \"\t\t\t\t</div>\" +\r\n                      \"\t\t\t</div>\";\r\n\r\n                    productInfoMarkupCallback();\r\n                  }\r\n                );\r\n              } else {\r\n                productInfoMarkupCallback();\r\n              }\r\n            }\r\n          };\r\n          getProductInfoMarkup(data, function (productMarkup) {\r\n            cw.modal.Open({\r\n              data: {\r\n                mr: mr,\r\n                budgetItem: budgetItem,\r\n              },\r\n              title: \"Product Requires More Information\",\r\n              modalBody: $(productMarkup),\r\n              buttons: [\r\n                {\r\n                  label: '<i class=\"fa fa-times\"></i> Cancel',\r\n                  cssClass: \"btn-white btn-xs-block\",\r\n                  action: function (dialogRef) {\r\n                    dialogRef.close();\r\n                  },\r\n                },\r\n                {\r\n                  label: '<i class=\"fa fa-paper-plane\"></i> Update',\r\n                  cssClass: \"btn-secondary btn-xs-block update\",\r\n                  action: function (mref) {\r\n                    var item = mref.getData(\"budgetItem\");\r\n                    var mr = mref.getData(\"mr\");\r\n                    var $chxBox = mref.$modalBody.find('[name=\"price-cap\"]:checked');\r\n                    var $usageInfo = mref.$modalBody.find(\".usage-info\");\r\n                    var usageObj = {};\r\n\r\n                    if ($usageInfo.length > 0) {\r\n                      usageObj = {\r\n                        productId: $usageInfo.data(\"productId\"),\r\n                        customerId: $usageInfo.data(\"customerId\"),\r\n                        usageVal: parseInt(mref.$modalBody.find(\"#usage-select\").val()),\r\n                      };\r\n                    }\r\n                    self.recalculateBudgetSummary(\r\n                      mr,\r\n                      $chxBox.val() === \"yes\" ? item : false,\r\n                      $chxBox.val() === \"no\" ? item : false,\r\n                      usageObj\r\n                    );\r\n\r\n                    //then rerender the html (rebind, etc)\r\n                    self.getBudgetEnrollMarkup(\r\n                      {\r\n                        CustomerBudgetResponse: self.CustomerBudgetResponse,\r\n                        ServiceLocations: self.CustomerServiceLocations,\r\n                        AccountBalances: self.args.AccountBalances,\r\n                        callback: function (renderedTmpl) {\r\n                          var mr = mref.getData(\"mr\");\r\n                          mr.$modalBody.find(\".budget-enroll-wrapper\").empty().append($(renderedTmpl));\r\n\r\n                          var $moreInfo = mr.$modalBody.find(\".more-info\");\r\n                          if (!$moreInfo || $moreInfo.length < 1) {\r\n                            mr.$modalFooter.find(\".enroll\").removeClass(\"disabled\");\r\n                          }\r\n\r\n                          self.bindPriceChange($this, mr);\r\n                          self.bindEnrollmentModal(mr);\r\n                        },\r\n                      },\r\n                      item //requestedMoreInfoItem\r\n                    );\r\n\r\n                    mref.close();\r\n                  },\r\n                },\r\n              ],\r\n              onShownCallback: function (modalRef) {\r\n                var $capSelectRadio = modalRef.$modalBody.find('[name=\"price-cap\"]');\r\n                var $usageSelect = modalRef.$modalBody.find(\"#usage-select\");\r\n                var $planDetails = modalRef.$modalBody.find(\".plan-details-wrapper\");\r\n                var $updateBtn = modalRef.$modalFooter.find(\".update\");\r\n\r\n                $capSelectRadio.on(\"change\", function (e) {\r\n                  e.preventDefault();\r\n                  var $this = $(this);\r\n\r\n                  if ($this.val() === \"yes\") {\r\n                    $planDetails.removeClass(\"hidden\");\r\n                  } else {\r\n                    $planDetails.addClass(\"hidden\");\r\n                  }\r\n                });\r\n\r\n                if ($usageSelect.length > 0) {\r\n                  $updateBtn.addClass(\"disabled\");\r\n                }\r\n\r\n                $usageSelect.on(\"change\", function (e) {\r\n                  e.preventDefault();\r\n                  var $this = $(this);\r\n                  if (parseInt($this.val()) > 0) {\r\n                    $updateBtn.removeClass(\"disabled\");\r\n                  } else {\r\n                    $updateBtn.addClass(\"disabled\");\r\n                  }\r\n                });\r\n              },\r\n            });\r\n          });\r\n        },\r\n        /**\r\n         *\tBind Price Change Interactions\r\n         * @param {any} $this\r\n         * @param {any} mr\r\n         */\r\n        bindPriceChange: function ($this, mr) {\r\n          var self = this;\r\n          var $priceChange = mr.$modalBody.find(\".change-price-plan\");\r\n\r\n          $priceChange.off(\"click\");\r\n          $priceChange.on(\"click\", function (e) {\r\n            e.preventDefault();\r\n            self.drawMoreInfoModal($(this), mr);\r\n          });\r\n        },\r\n        /**\r\n         * Bind Enrollment Modal Interactions\r\n         * @param {*} mr\r\n         */\r\n        bindEnrollmentModal: function (mr) {\r\n          var self = this;\r\n          var $moreInfo = mr.$modalBody.find(\".more-info\");\r\n\r\n          $moreInfo.off(\"click\");\r\n          $moreInfo.on(\"click\", function (e) {\r\n            e.preventDefault();\r\n            var $this = $(this);\r\n            self.drawMoreInfoModal($this, mr);\r\n          });\r\n        },\r\n        /**\r\n         * Bind Account Selector if Multiple accounts are eligible for Budget Enroll\r\n         * @param {*} mr\r\n         */\r\n        bindMultipleBillingAccountSelector: function (mr) {\r\n          var self = this,\r\n            $wrapperEl = mr.$modalBody.find(\".budget-breakdown\"),\r\n            $accountChx = $wrapperEl.find('[name=\"account-select\"]'),\r\n            $accountSelect = $wrapperEl.find(\".account-select\");\r\n\r\n          $accountChx.off(\"change\");\r\n          $accountChx.on(\"change\", function (e) {\r\n            e.preventDefault();\r\n            var $this = $(this);\r\n            var customerId = $this.val(),\r\n              tableRow = $wrapperEl.find(\".budget-breakdown-table > tbody\");\r\n\r\n            if ($this.is(\":checked\")) {\r\n              tableRow.find(\"tr.account-\" + customerId).each(function (idx, v) {\r\n                $(this).removeClass(\"hidden\");\r\n              });\r\n            } else {\r\n              tableRow.find(\"tr.account-\" + customerId).each(function (idx, v) {\r\n                $(this).addClass(\"hidden\");\r\n              });\r\n            }\r\n\r\n            //if all checkboxes are unchecked, disable enroll button\r\n            if (!$accountChx.is(\":checked\")) {\r\n              mr.$modalFooter.find(\".enroll\").addClass(\"disabled\");\r\n            } else {\r\n              mr.$modalFooter.find(\".enroll\").removeClass(\"disabled\");\r\n            }\r\n            self.recalculateBudgetSummary(mr);\r\n          });\r\n        },\r\n        /**\r\n         * Determine Budget Enrollment Status and Set Button to appropriate status\r\n         * @param {*} args\r\n         */\r\n        getBudgetEnrollButtonStatus: function (args) {\r\n          if (args.ServiceLocations && args.ServiceLocations.length > 0) {\r\n            var requiresAdditionalInfo = false;\r\n            args.ServiceLocations.forEach(function (dp, idx) {\r\n              if (\r\n                dp.LocationBudgetEligibility &&\r\n                dp.LocationBudgetEligibility.BudgetItemsCovered &&\r\n                dp.LocationBudgetEligibility.BudgetItemsCovered.length > 0\r\n              ) {\r\n                dp.LocationBudgetEligibility.BudgetItemsCovered.forEach(function (item, idx) {\r\n                  if (item.BudgetNeedsMoreInfo) {\r\n                    requiresAdditionalInfo = true;\r\n                    return false;\r\n                  }\r\n                });\r\n              }\r\n              if (requiresAdditionalInfo) {\r\n                return false;\r\n              }\r\n            });\r\n\r\n            if (requiresAdditionalInfo) {\r\n              return \" disabled\";\r\n            }\r\n\r\n            return \"\";\r\n          }\r\n        },\r\n        /**\r\n         * Get Budget Balance object for Customer\r\n         * @param {*} customerId\r\n         * @param {*} ServiceLocations\r\n         * @param {*} accountBalance\r\n         * @param {*} customerBudgetResponse\r\n         */\r\n        getBudgetBalanceByCustomer: function (\r\n          customerId,\r\n          ServiceLocations,\r\n          accountBalance,\r\n          customerBudgetResponse\r\n        ) {\r\n          if (ServiceLocations && ServiceLocations.length > 0 && customerId && parseInt(customerId)) {\r\n            var self = this,\r\n              fuelAmount = 0,\r\n              serviceAmount = 0,\r\n              cusId = parseInt(customerId);\r\n\r\n            var eligibleLocation = ServiceLocations.filter(function (x) {\r\n              return x.LocationBudgetEligibility.IsEligible;\r\n            })[0];\r\n\r\n            eligibleLocation.LocationBudgetEligibility.BudgetItemsCovered.filter(function (y) {\r\n              return y.CustomerId === cusId;\r\n            }).forEach(function (loc) {\r\n              //fuel\r\n              if (self.fuelUtils.includes(loc.ProductId)) {\r\n                fuelAmount += loc.ProductExtendedPrice;\r\n              }\r\n              //service\r\n              if (self.serviceUtils.includes(loc.ProductId)) {\r\n                serviceAmount += loc.ProductExtendedPrice;\r\n              }\r\n            });\r\n\r\n            var totalPlanCoverage =\r\n              parseFloat(self.roundCost(fuelAmount)) +\r\n              parseFloat(self.roundCost(serviceAmount)) +\r\n              parseFloat(self.roundCost(accountBalance));\r\n            var monthlyCoverage = parseFloat(totalPlanCoverage)\r\n              ? totalPlanCoverage / customerBudgetResponse.NumberOfPayments\r\n              : 0;\r\n\r\n            return {\r\n              IsEligible: true,\r\n              NumberOfPayments: customerBudgetResponse.NumberOfPayments,\r\n              BudgetEffectiveDate: customerBudgetResponse.BudgetEffectiveDate,\r\n              CoverageType: customerBudgetResponse.CoverageType,\r\n              CoverageTypeFormatted: customerBudgetResponse.CoverageTypeFormatted,\r\n              ServiceLocations: eligibleLocation,\r\n              TotalAssociatedFees: 0,\r\n              TotalFuelCoverage: self.roundCost(fuelAmount),\r\n              TotalPlanCoverage: totalPlanCoverage,\r\n              TotalServiceContractCoverage: self.roundCost(serviceAmount),\r\n              MonthlyPaymentAmount: self.roundCost(monthlyCoverage),\r\n              MonthlyPaymentAmountFormatted: \"$\" + self.roundCost(monthlyCoverage).toFixed(2),\r\n              OutstandingAccountBalance: accountBalance,\r\n            };\r\n          }\r\n        },\r\n        /**\r\n         * Round $ Amount to the nearest value passed in\r\n         * @param {*} amt\r\n         * @param {*} roundTo\r\n         */\r\n        roundCost: function (amt, roundTo) {\r\n          if (!roundTo) {\r\n            roundTo = 5;\r\n          }\r\n          return Math.ceil(amt / roundTo) * roundTo;\r\n        },\r\n        /**\r\n         * Determines if the budget items are the same\r\n         * @param {*} item1\r\n         * @param {*} item2\r\n         */\r\n        isSameBudgetItem: function (item1, item2) {\r\n          return (\r\n            cw.utility.isValidObj(item1) &&\r\n            cw.utility.isValidObj(item2) &&\r\n            item1.CustomerId === item2.CustomerId &&\r\n            item1.DeliveryPointId === item2.DeliveryPointId &&\r\n            item1.ProductId === item2.ProductId &&\r\n            item1.AssociatedBudgetItems &&\r\n            item2.AssociatedBudgetItems &&\r\n            cw.utility.arrayEquals(\r\n              item1.AssociatedBudgetItems.CoveredEquipmentIds,\r\n              item2.AssociatedBudgetItems.CoveredEquipmentIds\r\n            )\r\n          );\r\n        },\r\n        /**\r\n         * Recalculate Budget Summary\r\n         * @param {*} mr // Modal Reference\r\n         * @param {*} capPriceItem //customer Id who chose Cap Price\r\n         * @param {*} declineCapPriceItem // customer Id who declined Cap Price\r\n         */\r\n        recalculateBudgetSummary: function (mr, capPriceItem, declineCapPriceItem, manualUsageObj) {\r\n          if (mr) {\r\n            var self = this,\r\n              //copy object, modify, then add to global to preserve object state when canceling modal\r\n              customerBudget = JSON.parse(\r\n                JSON.stringify(\r\n                  self.CustomerBudgetResponse ? self.CustomerBudgetResponse : self.args.CustomerBudgetResponse\r\n                )\r\n              ),\r\n              customerBudgetLocation = self.CustomerServiceLocations.map(function (x) {\r\n                return x.LocationBudgetEligibility;\r\n              });\r\n\r\n            var customerBalance = self.args.AccountBalances,\r\n              $budgetCoverage = mr.$modalBody.find(\".budget-coverage\"),\r\n              $summaryWrapper = mr.$modalBody.find(\".budget-summary-items\"),\r\n              $planSubTotal = mr.$modalBody.find(\".total-amount\"),\r\n              $planMonthlyTotal = mr.$modalBody.find(\".budget-amount\"),\r\n              $fuelAmount = $summaryWrapper.find(\".fuel-amount\"),\r\n              $serviceAmount = $summaryWrapper.find(\".service-amount\"),\r\n              $oustandingAmount = $summaryWrapper.find(\".outstanding-amount\"),\r\n              $feeAmount = $summaryWrapper.find(\".additional-fee-amount\"),\r\n              $wrapperEl = mr.$modalBody.find(\".budget-breakdown\"),\r\n              $usageInfo = mr.$modalFooter.find(\".usage-info\"),\r\n              tableRow = $wrapperEl.find(\".budget-breakdown-table > tbody\"),\r\n              fuelRow = tableRow.find(\"tr.fuel-product\"),\r\n              serviceRow = tableRow.find(\"tr.service-product\"),\r\n              fuelAmount = 0,\r\n              serviceAmount = 0,\r\n              outstandingAmount = 0,\r\n              feeAmount = 0,\r\n              customerIds = [];\r\n\r\n            //set this to false by default if undefined\r\n            if (typeof capPriceItem === \"undefined\" || capPriceItem === \"\") {\r\n              capPriceItem = false;\r\n            }\r\n\r\n            /* Get selected customer numbers to add a budget to and calculuate */\r\n            if (fuelRow && fuelRow.length > 0) {\r\n              fuelRow.each(function () {\r\n                if (!$(this).hasClass(\"hidden\")) {\r\n                  var custId = $(this).data(\"customerId\");\r\n                  if (custId && !customerIds.includes(custId)) {\r\n                    customerIds.push(custId);\r\n                  }\r\n                }\r\n              });\r\n            }\r\n            if (serviceRow && serviceRow.length > 0) {\r\n              serviceRow.each(function () {\r\n                if (!$(this).hasClass(\"hidden\")) {\r\n                  var custId = $(this).data(\"customerId\");\r\n                  if (custId && !customerIds.includes(custId)) {\r\n                    customerIds.push(custId);\r\n                  }\r\n                }\r\n              });\r\n            }\r\n\r\n            //extract individual customer account totals because there can be multiple customers per S1. Allow sign up for individual accounts.\r\n            customerBudget.LocationBudgetsItems = [];\r\n            customerBudget.AccountMap = [];\r\n            var customerBudgetRequest = [];\r\n            if (customerIds && customerIds.length > 0) {\r\n              customerIds.forEach(function (cusId, i) {\r\n                var totalFuel = 0,\r\n                  totalService = 0,\r\n                  customerFee = 0,\r\n                  totalPlan = 0;\r\n\r\n                var myBalanceItem =\r\n                  customerBalance && customerBalance.length > 0\r\n                    ? customerBalance.find(function (x) {\r\n                        return (\r\n                          parseInt(x.RemoteSystemAccountNumber) > 0 &&\r\n                          parseInt(x.RemoteSystemAccountNumber) === cusId\r\n                        );\r\n                      })\r\n                    : customerBalance;\r\n                var myBudgetLocations = customerBudgetLocation.map(function (loc) {\r\n                  return loc.BudgetItemsCovered.filter(function (item) {\r\n                    return item.CustomerId === cusId;\r\n                  });\r\n                });\r\n                var customerOutstandingAmt =\r\n                  typeof myBalanceItem.AvailableBalanceForBudgetEnroll !== \"undefined\" &&\r\n                  myBalanceItem.AvailableBalanceForBudgetEnroll > 0\r\n                    ? myBalanceItem.AvailableBalanceForBudgetEnroll\r\n                    : myBalanceItem > 0\r\n                    ? myBalanceItem\r\n                    : 0;\r\n                if (myBudgetLocations && myBudgetLocations.length > 0) {\r\n                  myBudgetLocations.forEach(function (budgetLoc, j) {\r\n                    //per location\r\n                    budgetLoc.forEach(function (loc, idx) {\r\n                      //per product per location\r\n\r\n                      var capLocationPrice = self.isSameBudgetItem(capPriceItem, loc) && loc.CapPricePlan;\r\n                      var declineLocationCapPrice = self.isSameBudgetItem(declineCapPriceItem, loc);\r\n\r\n                      if (self.fuelUtils.includes(loc.ProductId)) {\r\n                        //set default values\r\n                        loc.useCapPrice =\r\n                          loc.useCapPrice && !self.isSameBudgetItem(loc, declineCapPriceItem)\r\n                            ? loc.useCapPrice\r\n                            : false;\r\n                        loc.AssociatedFee = loc.useCapPrice ? loc.AssociatedFee : 0;\r\n                        loc.RequestedMoreInfo = loc.RequestedMoreInfo ? loc.RequestedMoreInfo : false;\r\n                        var unitCost = loc.useCapPrice ? loc.CapPricePlan.Price : loc.ProductUnitCost;\r\n\r\n                        if (capLocationPrice) {\r\n                          //change unit cost to cap if customer chooses to cap\r\n                          unitCost = loc.CapPricePlan.Price;\r\n                          loc.ProductUnitCostCap = loc.CapPricePlan.Price;\r\n                          loc.useCapPrice = true;\r\n                          loc.AssociatedFee = loc.CapPricePlan.Fee //don't forget the fee\r\n                            ? loc.CapPricePlan.Fee\r\n                            : loc.ProductId === cw.appEnum.ProductCode.Propane\r\n                            ? self.AssociatedFuelCapFeeFallback.Propane\r\n                            : self.AssociatedFuelCapFeeFallback.HeatingOil;\r\n                        }\r\n\r\n                        if (\r\n                          manualUsageObj &&\r\n                          loc.ProductId === manualUsageObj.productId &&\r\n                          loc.CustomerId === manualUsageObj.customerId\r\n                        ) {\r\n                          if (parseInt(manualUsageObj.usageVal) > 0) {\r\n                            loc.ProductExtendedPrice =\r\n                              loc.ProductUnitCost * parseInt(manualUsageObj.usageVal);\r\n                            loc.ProductAnnualUsage = parseInt(manualUsageObj.usageVal);\r\n                            loc.UsageChanged = true;\r\n                          }\r\n                        }\r\n\r\n                        loc.ProductExtendedPrice = unitCost * loc.ProductAnnualUsage;\r\n                        totalFuel += loc.ProductExtendedPrice;\r\n                      }\r\n\r\n                      //remove the link to request more info\r\n                      if (\r\n                        capLocationPrice ||\r\n                        declineLocationCapPrice ||\r\n                        cw.utility.isValidObj(manualUsageObj)\r\n                      ) {\r\n                        loc.AskForCapPlan = false;\r\n                        loc.BudgetNeedsMoreInfo = false;\r\n                        loc.RequestedMoreInfo = true;\r\n                      }\r\n\r\n                      if (self.serviceUtils.includes(loc.ProductId)) {\r\n                        totalService += loc.ProductExtendedPrice;\r\n                      }\r\n\r\n                      customerFee += loc.AssociatedFee;\r\n                      customerBudget.LocationBudgetsItems.push(loc);\r\n                    });\r\n                  });\r\n                }\r\n\r\n                //Get our per customer totals in order\r\n                var totalPlan =\r\n                  parseFloat(totalFuel) +\r\n                  parseFloat(totalService) +\r\n                  parseFloat(customerFee) +\r\n                  parseFloat(customerOutstandingAmt);\r\n\r\n                fuelAmount += totalFuel;\r\n                serviceAmount += totalService;\r\n                feeAmount += customerFee;\r\n                outstandingAmount += customerOutstandingAmt;\r\n\r\n                //Account Map - make sure we assign S1 account as well\r\n                var mapping = \"\";\r\n                self.CustomerServiceLocations.forEach(function (sl) {\r\n                  if (\r\n                    !customerBudget.AccountMap.some(function (x) {\r\n                      return (\r\n                        parseInt(x.RemoteSystemAccountNumber) &&\r\n                        parseInt(x.RemoteSystemAccountNumber) === cusId\r\n                      );\r\n                    })\r\n                  ) {\r\n                    mapping = sl.RemoteSystemMap.find(function (r) {\r\n                      return (\r\n                        parseInt(r.RemoteSystemAccountNumber) &&\r\n                        parseInt(r.RemoteSystemAccountNumber) === cusId\r\n                      );\r\n                    });\r\n                    mapping.ShipleyOneNumberId = self.args.S1AccountId;\r\n                    customerBudget.AccountMap.push(mapping);\r\n                  }\r\n                });\r\n\r\n                var thisCustomerRequest = {\r\n                  AccountMap: mapping,\r\n                  LocationBudgetsItems: customerBudget.LocationBudgetsItems,\r\n                  RequestedCapPlan: capPriceItem && capPriceItem.CustomerId === cusId,\r\n                  BudgetEffectiveDate: {\r\n                    StartDate: customerBudget.BudgetEffectiveDate.StartDate,\r\n                    EndDate: customerBudget.BudgetEffectiveDate.EndDate,\r\n                  },\r\n                  IsEligible: customerBudget.IsEligible,\r\n                  MonthlyPaymentAmount: self.roundCost(totalPlan / customerBudget.NumberOfPayments),\r\n                  NumberOfPayments: customerBudget.NumberOfPayments,\r\n                  TotalPlanCoverage: totalPlan,\r\n                  OutstandingAccountBalance: customerOutstandingAmt,\r\n                  TotalFuelCoverage: totalFuel,\r\n                  TotalServiceContractCoverage: totalService,\r\n                  TotalAssociatedFees: customerFee,\r\n                  RemoteSystemId: mapping.RemoteSystemId,\r\n                };\r\n                thisCustomerRequest.CoverageType = self.getBudgetCoverageType(thisCustomerRequest);\r\n                customerBudgetRequest.push(thisCustomerRequest);\r\n              });\r\n            }\r\n\r\n            var totalPlanCoverage =\r\n              parseFloat(fuelAmount) +\r\n              parseFloat(serviceAmount) +\r\n              parseFloat(outstandingAmount) +\r\n              parseFloat(feeAmount);\r\n            var monthlyPlanCoverage = parseFloat(totalPlanCoverage)\r\n              ? totalPlanCoverage / customerBudget.NumberOfPayments\r\n              : 0;\r\n            customerBudget.TotalFuelCoverage = fuelAmount;\r\n            customerBudget.TotalServiceContractCoverage = serviceAmount;\r\n            customerBudget.OutstandingAccountBalance = outstandingAmount;\r\n            customerBudget.TotalAssociatedFees = feeAmount;\r\n            customerBudget.TotalPlanCoverage = totalPlanCoverage;\r\n            customerBudget.MonthlyPaymentAmount = self.roundCost(monthlyPlanCoverage); //round to nearest 5\r\n            customerBudget.CoverageType = self.getBudgetCoverageType(customerBudget);\r\n\r\n            $fuelAmount\r\n              .val(customerBudget.TotalFuelCoverage)\r\n              .text(\"\")\r\n              .text(\"$\" + customerBudget.TotalFuelCoverage.toFixed(2));\r\n            $serviceAmount\r\n              .val(customerBudget.TotalServiceContractCoverage)\r\n              .text(\"\")\r\n              .text(\"$\" + customerBudget.TotalServiceContractCoverage.toFixed(2));\r\n            $oustandingAmount\r\n              .val(customerBudget.OutstandingAccountBalance)\r\n              .text(\"\")\r\n              .text(\"$\" + customerBudget.OutstandingAccountBalance.toFixed(2));\r\n            $feeAmount\r\n              .val(customerBudget.TotalAssociatedFees)\r\n              .text(\"\")\r\n              .text(\"$\" + customerBudget.TotalAssociatedFees.toFixed(2));\r\n            $planSubTotal\r\n              .val(customerBudget.TotalPlanCoverage)\r\n              .text(\"\")\r\n              .text(\"$\" + customerBudget.TotalPlanCoverage.toFixed(2));\r\n            $planMonthlyTotal\r\n              .val(customerBudget.MonthlyPaymentAmount)\r\n              .text(\"\")\r\n              .text(\"$\" + customerBudget.MonthlyPaymentAmount.toFixed(2) + \"/mo\");\r\n            $budgetCoverage.text(\r\n              \"Budget Coverage: \" + self.getBudgetCoverageTypeName(customerBudget.CoverageType)\r\n            );\r\n\r\n            self.args.CustomerBudgetRequest = customerBudgetRequest;\r\n            self.CustomerBudgetResponse = customerBudget;\r\n          }\r\n        },\r\n        /**\r\n         * Get Budget Coverage Type\r\n         * @param {*} budget\r\n         */\r\n        getBudgetCoverageType: function (budget) {\r\n          var self = this;\r\n          if (budget) {\r\n            if (\r\n              budget.TotalFuelCoverage &&\r\n              parseFloat(budget.TotalFuelCoverage) != 0 &&\r\n              budget.TotalServiceContractCoverage &&\r\n              parseFloat(budget.TotalServiceContractCoverage) != 0\r\n            ) {\r\n              return self.CoverageType.FuelandService;\r\n            }\r\n\r\n            if (\r\n              budget.TotalFuelCoverage &&\r\n              parseFloat(budget.TotalFuelCoverage) != 0 &&\r\n              (!budget.TotalServiceContractCoverage || parseFloat(budget.TotalServiceContractCoverage) != 0)\r\n            ) {\r\n              return self.CoverageType.Fuel;\r\n            }\r\n\r\n            if (\r\n              budget.TotalServiceContractCoverage &&\r\n              parseFloat(budget.TotalServiceContractCoverage) != 0 &&\r\n              (!budget.TotalFuelCoverage || parseFloat(budget.TotalFuelCoverage) != 0)\r\n            ) {\r\n              return self.CoverageType.Service;\r\n            }\r\n          }\r\n          return self.CoverageType.Unknown;\r\n        },\r\n        /**\r\n         * Get Coverage Type Name from Enum\r\n         * @param {*} coverage\r\n         */\r\n        getBudgetCoverageTypeName: function (coverage) {\r\n          var self = this;\r\n          switch (coverage) {\r\n            case self.CoverageType.Fuel:\r\n              return \"Fuel\";\r\n            case self.CoverageType.Service:\r\n              return \"Service\";\r\n            case self.CoverageType.FuelandService:\r\n              return \"Fuel And Service\";\r\n            default:\r\n              return \"Unknown\";\r\n          }\r\n        },\r\n        /**\r\n         * Get Budget Enrollment Hmtl Markup\r\n         * @param {*} args\r\n         * @param {*} requestedMoreInfoItem\r\n         */\r\n        getBudgetEnrollMarkup: function (args, requestedMoreInfoItem) {\r\n          if (args) {\r\n            var self = this;\r\n            var markupData = {};\r\n            var budget = args.CustomerBudgetResponse;\r\n\r\n            //info markup\r\n            markupData.BudgetInfoItems =\r\n              \"<div>\" +\r\n              '<div class=\"pt5 pb5\">Budget Coverage Date: ' +\r\n              budget.BudgetEffectiveDate.StartDateFormatted +\r\n              \" - \" +\r\n              budget.BudgetEffectiveDate.EndDateFormatted +\r\n              \"</div>\" +\r\n              '<div class=\"pt5 pb5\">Number of Budget Payments: ' +\r\n              budget.NumberOfPayments +\r\n              \"</div>\" +\r\n              '<div class=\"pt5 pb5 budget-coverage\">Budget Coverage: ' +\r\n              self.getBudgetCoverageTypeName(budget.CoverageType) +\r\n              \"</div>\" +\r\n              \"</div>\";\r\n\r\n            markupData.PlanSubTotal = budget.TotalPlanCoverage ? budget.TotalPlanCoverage.toFixed(2) : 0.0;\r\n            markupData.BudgetSummaryItems =\r\n              \"<ul>\" +\r\n              '<li class=\"summary-item\"><div class=\"col-xs-12 pl0 pr0 clearfix\"><span class=\"pull-left\">Fuel Usage: </span> <span class=\"pull-right fuel-amount\">$' +\r\n              budget.TotalFuelCoverage.toFixed(2) +\r\n              \"</span></div></li>\" +\r\n              '<li class=\"summary-item\"><div class=\"col-xs-12 pl0 pr0 clearfix\"><span class=\"pull-left\">Service Contract: </span> <span class=\"pull-right service-amount\">  $' +\r\n              budget.TotalServiceContractCoverage.toFixed(2) +\r\n              \"</span></div></li>\" +\r\n              '<li class=\"summary-item\"><div class=\"col-xs-12 pl0 pr0 clearfix\"><span class=\"pull-left\">Outstanding Balance: <i class=\"fa fa-regular fa-circle-question\" title=\"This represents your past due balance of 30 days or more.\"></i></span> <span class=\"pull-right outstanding-amount\">$' +\r\n              budget.OutstandingAccountBalance.toFixed(2) +\r\n              \"</span></div></li>\" +\r\n              '<li class=\"summary-item\"><div class=\"col-xs-12 pl0 pr0 clearfix\"><span class=\"pull-left\">Additional Charges: </span> <span class=\"pull-right additional-fee-amount\">$' +\r\n              budget.TotalAssociatedFees.toFixed(2) +\r\n              \"</span></div></li>\" +\r\n              \"</ul>\" +\r\n              \"<div>\" +\r\n              \"</div>\";\r\n\r\n            //total markup\r\n            markupData.TotalPlanCoverage = budget.MonthlyPaymentAmount\r\n              ? budget.MonthlyPaymentAmount.toFixed(2)\r\n              : 0.0;\r\n\r\n            //breakdown markup\r\n            markupData.BudgetBreakdownTables = \"\";\r\n\r\n            //multiple billing account selector markup\r\n            markupData.hasMultipleBillingAccounts = false;\r\n            markupData.MultipleBillingAccountMarkup = \"\";\r\n\r\n            args.ServiceLocations.forEach(function (dp, idx) {\r\n              markupData.hasMultipleBillingAccounts =\r\n                dp.RemoteSystemMap &&\r\n                dp.RemoteSystemMap.length > 1 &&\r\n                dp.LocationBudgetEligibility &&\r\n                dp.LocationBudgetEligibility.BudgetItemsCovered &&\r\n                dp.LocationBudgetEligibility.BudgetItemsCovered.map(function (x) {\r\n                  return x.CustomerId;\r\n                }).length > 1;\r\n\r\n              if (markupData.hasMultipleBillingAccounts) {\r\n                dp.RemoteSystemMap.forEach(function (map) {\r\n                  var account = map.RemoteSystemAccountNumber;\r\n                  markupData.MultipleBillingAccountMarkup +=\r\n                    '<div class=\"shipley-checkbox\">' +\r\n                    '\t\t<input id=\"account-select-' +\r\n                    account +\r\n                    '\" name=\"account-select\" type=\"checkbox\" value=\"' +\r\n                    account +\r\n                    '\" checked>' +\r\n                    '\t\t\t<label for=\"account-select-' +\r\n                    account +\r\n                    '\">' +\r\n                    account +\r\n                    \"\t\t</label>\" +\r\n                    \"</div>\";\r\n                });\r\n              }\r\n\r\n              var table =\r\n                '<div class=\"location pb5\"><div class=\"text-center\">Location: ' +\r\n                dp.StreetAddress +\r\n                \"</div></div>\";\r\n              var tableParts = \"\";\r\n\r\n              if (\r\n                dp.LocationBudgetEligibility &&\r\n                dp.LocationBudgetEligibility.BudgetItemsCovered &&\r\n                dp.LocationBudgetEligibility.BudgetItemsCovered.length > 0\r\n              ) {\r\n                var hasService = false,\r\n                  hasFuel = false;\r\n                var serviceBreakdown =\r\n                    '<table class=\"budget-breakdown-table table service-breakdown pt5\">' +\r\n                    \"\t<thead>\" +\r\n                    \"\t\t<tr>\" +\r\n                    '\t\t\t<th valign=\"top\">Contract</th>' +\r\n                    '\t\t\t<th valign=\"top\">Amount</th>' +\r\n                    '\t\t\t<th valign=\"top\">Price</th>' +\r\n                    '\t\t\t<th valign=\"top\">Extended Price</th>' +\r\n                    \"\t\t</tr>\" +\r\n                    \"\t</thead>\" +\r\n                    \"\t<tbody>\",\r\n                  fuelBreakdown =\r\n                    '<table class=\"budget-breakdown-table table fuel-breakdown pt5\">' +\r\n                    \"\t<thead>\" +\r\n                    \"\t\t<tr>\" +\r\n                    '\t\t\t<th valign=\"top\">Tank</th>' +\r\n                    '\t\t\t<th valign=\"top\">Tank Size</th>' +\r\n                    '\t\t\t<th valign=\"top\">Projected Annual Gallons</th>' +\r\n                    '\t\t\t<th valign=\"top\">Unit Price</th>' +\r\n                    '\t\t\t<th valign=\"top\">Extended Price</th>' +\r\n                    \"\t\t</tr>\" +\r\n                    \"\t</thead>\" +\r\n                    \"\t<tbody>\";\r\n\r\n                dp.LocationBudgetEligibility.BudgetItemsCovered.forEach(function (item, idx) {\r\n                  var extendedPrice = item.ProductExtendedPrice ? item.ProductExtendedPrice.toFixed(2) : 0;\r\n\r\n                  //service contract\r\n                  if (item.ProductId === cw.appEnum.ProductCode.ServiceProduct) {\r\n                    hasService = true;\r\n                    serviceBreakdown +=\r\n                      '<tr class=\"service-product account-' +\r\n                      item.CustomerId +\r\n                      '\" data-customer-id=\"' +\r\n                      item.CustomerId +\r\n                      '\">' +\r\n                      '<td class=\"text-left\">' +\r\n                      (item.AssociatedBudgetItems.ItemDescription\r\n                        ? item.AssociatedBudgetItems.ItemDescription\r\n                        : \"\") +\r\n                      \"</td>\" +\r\n                      '<td class=\"\">' +\r\n                      (item.ProductAnnualUsage ? item.ProductAnnualUsage : \"\") +\r\n                      \"</td>\" +\r\n                      '<td class=\"\">$' +\r\n                      extendedPrice +\r\n                      \"</td>\" +\r\n                      '<td class=\"extended-price\" data-price=\"' +\r\n                      extendedPrice +\r\n                      '\">$' +\r\n                      extendedPrice +\r\n                      \"</td>\" +\r\n                      \"</tr>\";\r\n                    //fuel items\r\n                  } else if (self.fuelUtils.includes(item.ProductId)) {\r\n                    hasFuel = true;\r\n                    var moreInfoHtml = \"\";\r\n\r\n                    //product is ready for enrollment\r\n                    var moreInfoNotNeeded =\r\n                      item.ProductAnnualUsage &&\r\n                      !item.AskForCapPlan &&\r\n                      !item.BudgetNeedsMoreInfo &&\r\n                      !item.useCapPrice &&\r\n                      !item.RequestedMoreInfo;\r\n\r\n                    if (moreInfoNotNeeded) {\r\n                      moreInfoHtml = item.ProductAnnualUsage + \"<small> gallons</small>\";\r\n                    } else if (item.RequestedMoreInfo) {\r\n                      moreInfoHtml =\r\n                        item.ProductAnnualUsage +\r\n                        \"<small> gallons</small> <br />\" +\r\n                        '<a href=\"#\" class=\"change-price-plan\" data-product-id=\"' +\r\n                        item.ProductId +\r\n                        '\" data-ask-for-cap-plan=\"' +\r\n                        item.AskForCapPlan +\r\n                        '\" data-ask-for-usage=\"' +\r\n                        item.AskForUsage +\r\n                        '\" data-customer-id=\"' +\r\n                        item.CustomerId +\r\n                        '\" data-delivery-id=\"' +\r\n                        item.DeliveryPointId +\r\n                        '\"\"><i class=\"fa fa-exchange\"></i> ' +\r\n                        (item.useCapPrice && item.ProductUnitCostCap\r\n                          ? \"I don't want to cap my price\"\r\n                          : \"I want to cap my price\") +\r\n                        \"</a>\";\r\n                    } else if (item.BudgetNeedsMoreInfo) {\r\n                      moreInfoHtml =\r\n                        '<a href=\"#\" class=\"more-info\" data-product-id=\"' +\r\n                        item.ProductId +\r\n                        '\" data-ask-for-cap-plan=\"' +\r\n                        item.AskForCapPlan +\r\n                        '\" data-ask-for-usage=\"' +\r\n                        item.AskForUsage +\r\n                        '\" data-customer-id=\"' +\r\n                        item.CustomerId +\r\n                        '\" data-delivery-id=\"' +\r\n                        item.DeliveryPointId +\r\n                        '\"><i class=\"fa fa-exclamation-circle\"></i> Requires More Info</a>';\r\n                    }\r\n\r\n                    var productUnitCost =\r\n                      item.useCapPrice && item.ProductUnitCostCap\r\n                        ? \"$\" +\r\n                          item.ProductUnitCostCap.toFixed(3) +\r\n                          \"<small>/gal<span> (price capped) </span> </small>\"\r\n                        : item.ProductUnitCost\r\n                        ? \"$\" + item.ProductUnitCost.toFixed(3) + \"<small>/gal</small>\"\r\n                        : 0;\r\n\r\n                    fuelBreakdown +=\r\n                      '<tr class=\"fuel-product account-' +\r\n                      item.CustomerId +\r\n                      '\" data-customer-id=\"' +\r\n                      item.CustomerId +\r\n                      '\">' +\r\n                      '<td class=\"text-left\">' +\r\n                      (item.AssociatedBudgetItems.ItemDescription\r\n                        ? item.AssociatedBudgetItems.ItemDescription\r\n                        : \"\") +\r\n                      \"</td>\" +\r\n                      '<td class=\"\">' +\r\n                      (item.TankSize ? item.TankSize : \"\") +\r\n                      \"</td>\" +\r\n                      '<td class=\"\">' +\r\n                      moreInfoHtml +\r\n                      \"</td>\" +\r\n                      '<td class=\"\">' +\r\n                      productUnitCost +\r\n                      \"</td>\" +\r\n                      '<td class=\"extended-price\" data-price=\"' +\r\n                      extendedPrice +\r\n                      '\">$' +\r\n                      extendedPrice +\r\n                      \"</td>\" +\r\n                      \"</tr>\";\r\n                  }\r\n                });\r\n\r\n                tableParts +=\r\n                  (hasFuel ? fuelBreakdown + \"</tbody>\" : \"\") +\r\n                  (hasService ? serviceBreakdown + \"</tbody>\" : \"\");\r\n              }\r\n              table += tableParts + \"</table>\";\r\n              markupData.BudgetBreakdownTables += table;\r\n            });\r\n\r\n            if (markupData.hasMultipleBillingAccounts) {\r\n              markupData.MultipleBillingAccountMarkup =\r\n                '<div class=\"multiple-billing-account-wrapper text-center\">' +\r\n                \"\t<h5>Billing Accounts to include in budget</h5>\" +\r\n                markupData.MultipleBillingAccountMarkup +\r\n                \"</div>\";\r\n            }\r\n\r\n            if (typeof args.callback === \"function\") {\r\n              cw.templating.GetRenderedTemplateHTML(\r\n                self.enrollHtmlTmpl,\r\n                cw.appEnum.TemplateType.CwWidget,\r\n                markupData,\r\n                function (renderedTmpl) {\r\n                  args.callback(renderedTmpl);\r\n                }\r\n              );\r\n            }\r\n          }\r\n        },\r\n      },\r\n    },\r\n  });\r\n})((window.cw = window.cw || {}), jQuery);\r\n","var map = {\n\t\"./af\": 25177,\n\t\"./af.js\": 25177,\n\t\"./ar\": 61509,\n\t\"./ar-dz\": 41488,\n\t\"./ar-dz.js\": 41488,\n\t\"./ar-kw\": 58676,\n\t\"./ar-kw.js\": 58676,\n\t\"./ar-ly\": 42353,\n\t\"./ar-ly.js\": 42353,\n\t\"./ar-ma\": 24496,\n\t\"./ar-ma.js\": 24496,\n\t\"./ar-ps\": 6947,\n\t\"./ar-ps.js\": 6947,\n\t\"./ar-sa\": 82682,\n\t\"./ar-sa.js\": 82682,\n\t\"./ar-tn\": 89756,\n\t\"./ar-tn.js\": 89756,\n\t\"./ar.js\": 61509,\n\t\"./az\": 95533,\n\t\"./az.js\": 95533,\n\t\"./be\": 28959,\n\t\"./be.js\": 28959,\n\t\"./bg\": 47777,\n\t\"./bg.js\": 47777,\n\t\"./bm\": 54903,\n\t\"./bm.js\": 54903,\n\t\"./bn\": 61290,\n\t\"./bn-bd\": 17357,\n\t\"./bn-bd.js\": 17357,\n\t\"./bn.js\": 61290,\n\t\"./bo\": 31545,\n\t\"./bo.js\": 31545,\n\t\"./br\": 11470,\n\t\"./br.js\": 11470,\n\t\"./bs\": 66810,\n\t\"./bs.js\": 66810,\n\t\"./ca\": 7306,\n\t\"./ca.js\": 7306,\n\t\"./cs\": 56464,\n\t\"./cs.js\": 56464,\n\t\"./cv\": 73635,\n\t\"./cv.js\": 73635,\n\t\"./cy\": 64226,\n\t\"./cy.js\": 64226,\n\t\"./da\": 93601,\n\t\"./da.js\": 93601,\n\t\"./de\": 77853,\n\t\"./de-at\": 26111,\n\t\"./de-at.js\": 26111,\n\t\"./de-ch\": 54697,\n\t\"./de-ch.js\": 54697,\n\t\"./de.js\": 77853,\n\t\"./dv\": 60708,\n\t\"./dv.js\": 60708,\n\t\"./el\": 54691,\n\t\"./el.js\": 54691,\n\t\"./en-au\": 53872,\n\t\"./en-au.js\": 53872,\n\t\"./en-ca\": 28298,\n\t\"./en-ca.js\": 28298,\n\t\"./en-gb\": 56195,\n\t\"./en-gb.js\": 56195,\n\t\"./en-ie\": 66584,\n\t\"./en-ie.js\": 66584,\n\t\"./en-il\": 65543,\n\t\"./en-il.js\": 65543,\n\t\"./en-in\": 9033,\n\t\"./en-in.js\": 9033,\n\t\"./en-nz\": 79402,\n\t\"./en-nz.js\": 79402,\n\t\"./en-sg\": 43004,\n\t\"./en-sg.js\": 43004,\n\t\"./eo\": 32934,\n\t\"./eo.js\": 32934,\n\t\"./es\": 97650,\n\t\"./es-do\": 20838,\n\t\"./es-do.js\": 20838,\n\t\"./es-mx\": 17730,\n\t\"./es-mx.js\": 17730,\n\t\"./es-us\": 56575,\n\t\"./es-us.js\": 56575,\n\t\"./es.js\": 97650,\n\t\"./et\": 3035,\n\t\"./et.js\": 3035,\n\t\"./eu\": 3508,\n\t\"./eu.js\": 3508,\n\t\"./fa\": 119,\n\t\"./fa.js\": 119,\n\t\"./fi\": 90527,\n\t\"./fi.js\": 90527,\n\t\"./fil\": 95995,\n\t\"./fil.js\": 95995,\n\t\"./fo\": 52477,\n\t\"./fo.js\": 52477,\n\t\"./fr\": 85498,\n\t\"./fr-ca\": 26435,\n\t\"./fr-ca.js\": 26435,\n\t\"./fr-ch\": 37892,\n\t\"./fr-ch.js\": 37892,\n\t\"./fr.js\": 85498,\n\t\"./fy\": 37071,\n\t\"./fy.js\": 37071,\n\t\"./ga\": 41734,\n\t\"./ga.js\": 41734,\n\t\"./gd\": 70217,\n\t\"./gd.js\": 70217,\n\t\"./gl\": 77329,\n\t\"./gl.js\": 77329,\n\t\"./gom-deva\": 32124,\n\t\"./gom-deva.js\": 32124,\n\t\"./gom-latn\": 93383,\n\t\"./gom-latn.js\": 93383,\n\t\"./gu\": 95050,\n\t\"./gu.js\": 95050,\n\t\"./he\": 11713,\n\t\"./he.js\": 11713,\n\t\"./hi\": 43861,\n\t\"./hi.js\": 43861,\n\t\"./hr\": 26308,\n\t\"./hr.js\": 26308,\n\t\"./hu\": 90609,\n\t\"./hu.js\": 90609,\n\t\"./hy-am\": 17160,\n\t\"./hy-am.js\": 17160,\n\t\"./id\": 74063,\n\t\"./id.js\": 74063,\n\t\"./is\": 89374,\n\t\"./is.js\": 89374,\n\t\"./it\": 88383,\n\t\"./it-ch\": 21827,\n\t\"./it-ch.js\": 21827,\n\t\"./it.js\": 88383,\n\t\"./ja\": 23827,\n\t\"./ja.js\": 23827,\n\t\"./jv\": 89722,\n\t\"./jv.js\": 89722,\n\t\"./ka\": 41794,\n\t\"./ka.js\": 41794,\n\t\"./kk\": 27088,\n\t\"./kk.js\": 27088,\n\t\"./km\": 96870,\n\t\"./km.js\": 96870,\n\t\"./kn\": 84451,\n\t\"./kn.js\": 84451,\n\t\"./ko\": 63164,\n\t\"./ko.js\": 63164,\n\t\"./ku\": 98174,\n\t\"./ku-kmr\": 6181,\n\t\"./ku-kmr.js\": 6181,\n\t\"./ku.js\": 98174,\n\t\"./ky\": 78474,\n\t\"./ky.js\": 78474,\n\t\"./lb\": 79680,\n\t\"./lb.js\": 79680,\n\t\"./lo\": 15867,\n\t\"./lo.js\": 15867,\n\t\"./lt\": 45766,\n\t\"./lt.js\": 45766,\n\t\"./lv\": 69532,\n\t\"./lv.js\": 69532,\n\t\"./me\": 58076,\n\t\"./me.js\": 58076,\n\t\"./mi\": 41848,\n\t\"./mi.js\": 41848,\n\t\"./mk\": 30306,\n\t\"./mk.js\": 30306,\n\t\"./ml\": 73739,\n\t\"./ml.js\": 73739,\n\t\"./mn\": 99053,\n\t\"./mn.js\": 99053,\n\t\"./mr\": 86169,\n\t\"./mr.js\": 86169,\n\t\"./ms\": 73386,\n\t\"./ms-my\": 92297,\n\t\"./ms-my.js\": 92297,\n\t\"./ms.js\": 73386,\n\t\"./mt\": 77075,\n\t\"./mt.js\": 77075,\n\t\"./my\": 72264,\n\t\"./my.js\": 72264,\n\t\"./nb\": 22274,\n\t\"./nb.js\": 22274,\n\t\"./ne\": 8235,\n\t\"./ne.js\": 8235,\n\t\"./nl\": 92572,\n\t\"./nl-be\": 43784,\n\t\"./nl-be.js\": 43784,\n\t\"./nl.js\": 92572,\n\t\"./nn\": 54566,\n\t\"./nn.js\": 54566,\n\t\"./oc-lnc\": 69330,\n\t\"./oc-lnc.js\": 69330,\n\t\"./pa-in\": 29849,\n\t\"./pa-in.js\": 29849,\n\t\"./pl\": 94418,\n\t\"./pl.js\": 94418,\n\t\"./pt\": 79834,\n\t\"./pt-br\": 48303,\n\t\"./pt-br.js\": 48303,\n\t\"./pt.js\": 79834,\n\t\"./ro\": 24457,\n\t\"./ro.js\": 24457,\n\t\"./ru\": 82271,\n\t\"./ru.js\": 82271,\n\t\"./sd\": 1221,\n\t\"./sd.js\": 1221,\n\t\"./se\": 33478,\n\t\"./se.js\": 33478,\n\t\"./si\": 17538,\n\t\"./si.js\": 17538,\n\t\"./sk\": 5784,\n\t\"./sk.js\": 5784,\n\t\"./sl\": 46637,\n\t\"./sl.js\": 46637,\n\t\"./sq\": 86794,\n\t\"./sq.js\": 86794,\n\t\"./sr\": 45719,\n\t\"./sr-cyrl\": 3322,\n\t\"./sr-cyrl.js\": 3322,\n\t\"./sr.js\": 45719,\n\t\"./ss\": 56000,\n\t\"./ss.js\": 56000,\n\t\"./sv\": 41011,\n\t\"./sv.js\": 41011,\n\t\"./sw\": 40748,\n\t\"./sw.js\": 40748,\n\t\"./ta\": 11025,\n\t\"./ta.js\": 11025,\n\t\"./te\": 11885,\n\t\"./te.js\": 11885,\n\t\"./tet\": 28861,\n\t\"./tet.js\": 28861,\n\t\"./tg\": 86571,\n\t\"./tg.js\": 86571,\n\t\"./th\": 55802,\n\t\"./th.js\": 55802,\n\t\"./tk\": 59527,\n\t\"./tk.js\": 59527,\n\t\"./tl-ph\": 29231,\n\t\"./tl-ph.js\": 29231,\n\t\"./tlh\": 31052,\n\t\"./tlh.js\": 31052,\n\t\"./tr\": 85096,\n\t\"./tr.js\": 85096,\n\t\"./tzl\": 79846,\n\t\"./tzl.js\": 79846,\n\t\"./tzm\": 81765,\n\t\"./tzm-latn\": 97711,\n\t\"./tzm-latn.js\": 97711,\n\t\"./tzm.js\": 81765,\n\t\"./ug-cn\": 48414,\n\t\"./ug-cn.js\": 48414,\n\t\"./uk\": 16618,\n\t\"./uk.js\": 16618,\n\t\"./ur\": 57777,\n\t\"./ur.js\": 57777,\n\t\"./uz\": 57609,\n\t\"./uz-latn\": 72475,\n\t\"./uz-latn.js\": 72475,\n\t\"./uz.js\": 57609,\n\t\"./vi\": 21135,\n\t\"./vi.js\": 21135,\n\t\"./x-pseudo\": 64051,\n\t\"./x-pseudo.js\": 64051,\n\t\"./yo\": 82218,\n\t\"./yo.js\": 82218,\n\t\"./zh-cn\": 52648,\n\t\"./zh-cn.js\": 52648,\n\t\"./zh-hk\": 1632,\n\t\"./zh-hk.js\": 1632,\n\t\"./zh-mo\": 31541,\n\t\"./zh-mo.js\": 31541,\n\t\"./zh-tw\": 50304,\n\t\"./zh-tw.js\": 50304\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 35358;"],"names":["cw","$","window","jQuery","extend","pages","budgetManager","args","budgetDetails","budgetData","summaryChart","url","title","enrollHtmlTmpl","managerHtmlTmpl","s1AccountId","successCallback","CustomerBudgetResponse","CustomerServiceLocations","CoverageType","Unknown","Fuel","Service","FuelandService","heatingOilUsageValue","HeatingOnly","HeatingAndHotWater","fuelUtils","appEnum","ProductCode","HeatingOil","Propane","serviceUtils","ServiceProduct","AssociatedFuelCapFeeFallback","BudgetEnrollmentStatus","Successfull","BackendValidationFailed","FailedBackendCreation","FailedPriceChangeRequest","init","this","S1AccountId","initializePage","self","loadingIndicator","stop","$viewport","getCustomerBudgetDetails","callback","rtnData","templating","GetRenderedTemplateHTML","TemplateType","CwWidget","Data","renderedTmpl","empty","append","bindInteractions","$wrapperEl","$enrollBudget","find","each","idx","customer","data","$statusChart","$summaryPie","dataSet","x","Active","CustomerId","parent","addClass","makeStatusChart","makeSummaryChart","chartData","getData","el","thisData","labelColor","o","pointOffset","y","yaxis","xaxis","utility","formatAsMoney","PriceDisplayType","DollarsPerUnit","css","position","left","top","display","color","appendTo","getPlaceholder","fadeIn","on","e","preventDefault","$this","customerId","attr","removeClass","tab","hasClass","budgetEnroll","ServiceLocations","AccountBalances","$graphTarget","options","series","pie","show","radius","label","formatter","$html","TotalPlanCoverage","padding","background","outerHTML","threshold","legend","grid","hoverable","graphData","PaidToDate","toFixed","constants","shipleyBlue","AmountRemaining","ctaOrange","height","plot","ActualUsageAmount","shipleyGreen","bars","barWidth","align","fill","horizontal","ticks","alignTicksWithAxis","max","Math","round","axisLabel","tooltip","tooltipOpts","cssClass","content","xval","yval","flotItem","defaultTheme","webservices","getJson","cancelCallback","JSON","parse","stringify","modal","Open","modalBody","size","buttons","action","dialogRef","close","getBudgetEnrollButtonStatus","$modalFooter","start","makeBudgetEnrollment","CustomerBudgetRequest","Successful","alert","Alert","text","Message","errs","onShownCallback","modalRef","recalculateBudgetSummary","bindMultipleBillingAccountSelector","bindEnrollmentModal","getBudgetEnrollMarkup","parseBackendStatus","status","msg","errorCallback","validObj","validateBudgetEnrollment","saveBudgetEnrollment","push","some","parseFloat","MonthlyPaymentAmount","BudgetEffectiveDate","StartDate","EndDate","parseInt","NumberOfPayments","AccountMap","RemoteSystemAccountNumber","LocationBudgetsItems","length","Object","freeze","getFuelProductUsageMarkup","productId","utilityEnumToText","extractBudgetItemFromServiceLocation","loc","search","ProductId","DeliveryPointId","rtn","forEach","dp","LocationBudgetEligibility","BudgetItemsCovered","item","getCapPriceEndDate","now","capPriceDate","year","isBefore","add","format","drawMoreInfoModal","mr","prodMarkup","productInfoMarkupCallback","budgetItem","checkUsage","AskForUsage","checkCap","AskForCapPlan","productMarkup","mref","$chxBox","$modalBody","$usageInfo","usageObj","usageVal","val","$moreInfo","bindPriceChange","$capSelectRadio","$usageSelect","$planDetails","$updateBtn","includes","CapPricePlan","DownloadTemplateHtml","templateContents","$planPreview","application","renderPricePlans","remove","PriceFormatted","ProductUnitCost","$priceChange","off","$accountChx","tableRow","is","v","requiresAdditionalInfo","BudgetNeedsMoreInfo","getBudgetBalanceByCustomer","accountBalance","customerBudgetResponse","fuelAmount","serviceAmount","cusId","eligibleLocation","filter","IsEligible","ProductExtendedPrice","totalPlanCoverage","roundCost","monthlyCoverage","CoverageTypeFormatted","TotalAssociatedFees","TotalFuelCoverage","TotalServiceContractCoverage","MonthlyPaymentAmountFormatted","OutstandingAccountBalance","amt","roundTo","ceil","isSameBudgetItem","item1","item2","isValidObj","AssociatedBudgetItems","arrayEquals","CoveredEquipmentIds","capPriceItem","declineCapPriceItem","manualUsageObj","customerBudget","customerBudgetLocation","map","customerBalance","$budgetCoverage","$summaryWrapper","$planSubTotal","$planMonthlyTotal","$fuelAmount","$serviceAmount","$oustandingAmount","$feeAmount","fuelRow","serviceRow","outstandingAmount","feeAmount","customerIds","custId","customerBudgetRequest","i","totalFuel","totalService","customerFee","myBalanceItem","myBudgetLocations","customerOutstandingAmt","AvailableBalanceForBudgetEnroll","budgetLoc","j","capLocationPrice","declineLocationCapPrice","useCapPrice","AssociatedFee","RequestedMoreInfo","unitCost","Price","ProductUnitCostCap","Fee","ProductAnnualUsage","UsageChanged","totalPlan","mapping","sl","RemoteSystemMap","r","ShipleyOneNumberId","thisCustomerRequest","RequestedCapPlan","RemoteSystemId","getBudgetCoverageType","monthlyPlanCoverage","getBudgetCoverageTypeName","budget","coverage","requestedMoreInfoItem","markupData","BudgetInfoItems","StartDateFormatted","EndDateFormatted","PlanSubTotal","BudgetSummaryItems","BudgetBreakdownTables","hasMultipleBillingAccounts","MultipleBillingAccountMarkup","account","table","StreetAddress","tableParts","hasService","hasFuel","serviceBreakdown","fuelBreakdown","extendedPrice","ItemDescription","moreInfoHtml","productUnitCost","TankSize","webpackContext","req","id","webpackContextResolve","__webpack_require__","Error","code","keys","resolve","module","exports"],"sourceRoot":""}