218. EPMO Open Source Coordination Office Redaction File Detail Report

Produced by Araxis Merge on 12/7/2018 11:36:02 AM Central Standard Time. See www.araxis.com for information about Merge. This report uses XHTML and CSS2, and is best viewed with a modern standards-compliant browser. For optimum results when printing this report, use landscape orientation and enable printing of background images and colours in your browser.

218.1 Files compared

# Location File Last Modified
1 C:\SCRUB\MHED\MHED\VAR 4.10.0\var-web-release-4.10@e10f18de1ef\veteran-appointment-requests\app\modules\community-care-request\new-appointment-request-question\service-distance-selection community-care-service-distance-layout-view.js Mon Oct 22 23:25:20 2018 UTC
2 C:\MHED-scrubbed\MHED\MHED\VAR 4.10.0\var-web-release-4.10@e10f18de1ef\veteran-appointment-requests\app\modules\community-care-request\new-appointment-request-question\service-distance-selection community-care-service-distance-layout-view.js Fri Dec 7 13:07:20 2018 UTC

218.2 Comparison summary

Description Between
Files 1 and 2
Text Blocks Lines
Unchanged 4 842
Changed 3 12
Inserted 0 0
Removed 0 0

218.3 Comparison options

Whitespace
Character case Differences in character case are significant
Line endings Differences in line endings (CR and LF characters) are ignored
CR/LF characters Not shown in the comparison detail

218.4 Active regular expressions

No regular expressions were active.

218.5 Comparison detail

  1   /* eslint- disable ma x-len,came lcase */
  2   define([
  3       'under score',
  4       'backb one',
  5       'App',
  6       'Vent' ,
  7       'modul es/communi ty-care-re quest/view /community -care-view ',
  8       'modul es/new-app ointment-w izard/wiza rd-step-mo del',
  9       'modul es/communi ty-care-re quest/new- appointmen t-request- question/s ervice-dis tance-sele ction/serv ice-sectio n-view',
  10       'modul es/communi ty-care-re quest/new- appointmen t-request- question/s ervice-dis tance-sele ction/dist ance-secti on-view',
  11       'modul es/communi ty-care-re quest/new- appointmen t-request- question/s ervice-dis tance-sele ction/comm unity-care -distance- eligibilit y-input-se ction-view ',
  12       'modul es/communi ty-care-re quest/new- appointmen t-request- question/f acility-ca retype-sel ection/com munity-car e-facility -caretype- layout-vie w',
  13       'text! modules/co mmunity-ca re-request /new-appoi ntment-req uest-quest ion/servic e-distance -selection /community -care-serv ice-distan ce-layout. html',
  14       'modul es/loading -spinner/l oading-spi nner',
  15       'modul es/page/po pup/extern al-nav-pop up-view',
  16       'modul es/connect ion/server -error-pop up-view',
  17       'modul es/page/co re/behavio rs/focus-c c-on-heade r-behavior ',
  18   ],
  19   function(
  20       _,
  21       Backbo ne,
  22       app,
  23       vent,
  24       Commun ityCareVie w,
  25       Wizard StepModel,
  26       Servic eSectionVi ew,
  27       Distan ceSectionV iew,
  28       CCDist anceEligib ilityInput Section,
  29       CCFaci lityCareTy peLayoutVi ew,
  30       templa te,
  31       loadin gSpinner,
  32       Extern alNavigati onWarningP opup,
  33       Server ErrorPopup View
  34   ) {
  35       'use s trict';
  36       var GO OGLE_MAX_A DDRESSES =  25;
  37         // TODO ma ke a Wizar d Page Lay out View t hat this c an extend  to make so me methods  such as d eclaimF DNS     trols, dis ableContin ue, enable Continue,  showPrevio us DRY
  38       return  Community CareView.e xtend({
  39           cl assName: ' community- care',
  40           te mplate: _. template(t emplate),
  41           re gions: {
  42                serviceS electionSe ction: '.s ervice-sel ection-sec tion',
  43                distance SelectionL ayout: '.d istance-tr avel-selec tion-secti on',
  44                ccDistan ceEligibil ityInputSe ction: '.c ommunity-c are-input' ,
  45           },
  46           ev ents: _.ex tend({}, C ommunityCa reView.pro totype.eve nts, {
  47                'click . external-l ink': 'ope nExternalL ink',
  48                'click # find-facil ity-btn':  'findClose stFacility Helper',
  49                'touchen d #find-fa cility-btn ': 'findCl osestFacil ityHelper' ,
  50           }) ,
  51           mo delEvents:  {
  52                'change: service':  'handleSer viceChange ',
  53                'change: distanceEl igible': ' handleElig ibiltyChan ge',
  54                'change: travelBurd en': 'hand leTravelCh ange',
  55                'change: unusualTra velBurden' : 'handleU nusualChan ge',
  56                  'change:ad dress': 'h andleDista nceEligibi lityF DNS     nge',
  57                  'change:ci ty': 'hand leDistance Eligibilit yF DNS     nge',
  58                  'change:st ate': 'han dleDistanc eEligibili tyF DNS     nge',
  59                  'change:zi pCode': 'h andleDista nceEligibi lityF DNS     nge',
  60           },
  61           in itialize:  function(o ptions) {
  62                this.mod el = optio ns.model;
  63                this.val idator = o ptions.val idator;
  64           },
  65  
  66           //  eslint-di sable-next -line comp lexity
  67           on Render: fu nction() {
  68                this.dis ableContin ueButton() ;
  69                this.sho wCCDistanc eEligibleM essage('') ;
  70                $.when(a pp.patient EnrolledFa cilities.i sReady).th en(functio n() {
  71                    this .showChild View('serv iceSelecti onSection' , new Serv iceSection View({
  72                         model: thi s.model,
  73                         patientEnr olledFacil ities: app .patientEn rolledFaci lities,
  74                         ccFeatureE nabled: ap p.isCcElig FeatureEna bled(),
  75                    }));
  76                    this .$el.find( 'label[for =service-c ommunity-c are-appoin tments]')
  77                         .removeCla ss('ui-dis abled');
  78                }.bind(t his));
  79  
  80                if (this .model.get ('service' ) && this. model.get( 'service')  !== 'VA A ppointment s') {
  81                    this .handleADR Enabled();
  82                    if ( this.model .get('dist anceEligib le') === ' no') {
  83                         if (this.m odel.get(' travelBurd en') === ' yes' || th is.model.g et('unusua lTravelBur den') ===  'yes') {
  84                             this.e nableConti nueButton( );
  85                             this.s howCCDista nceEligibl eMessage(' eligible') ;
  86                         }
  87                         if (this.m odel.get(' travelBurd en') === ' no' && thi s.model.ge t('unusual TravelBurd en') === ' no') {
  88                             this.s howCCDista nceEligibi lityInputS ection();
  89                         }
  90                    } el se if (thi s.model.ge t('distanc eEligible' ) === 'yes ') {
  91                         this.enabl eContinueB utton();
  92                    }
  93                }
  94           },
  95           ha ndleServic eChange: f unction(mo del, value ) {
  96                var step s = this.m odel.get(' steps');
  97                this.sho wCCDistanc eEligibleM essage('') ;
  98                if (valu e === 'VA  Appointmen ts') {
  99                    /**
  100                     * I 'm not sur e how exte nsive test ing has be en done fo r what wil l persist  if you fil l out a cc  request t o
  101                     * t he point w here you c an submit,  then go p revious an d change s ervice and  go to a v a appointm ent what w ill
  102                     * r emain. I k now careTy pe will th ough which  will add  unique dat e validati on to the  VA appoint ment.
  103                     */
  104                    this .model.uns et('careTy pe');
  105                    this .uncheckBo thTravelRa dios(model );
  106                    this .removeAdd ressFromMo del();
  107                    this .enableCon tinueButto n();
  108                    this .hideCCDis tanceEligi bilityInpu tSection() ;
  109                    if ( steps && s teps.lengt h !== 1) {
  110                         vent.trigg er('update :wizardSte ps', 1);
  111                    }
  112                } else {
  113                    this .handleADR Enabled();
  114                }
  115           },
  116           ha ndleEligib iltyChange : function (model, va lue) {
  117                if (valu e === 'yes ') {
  118                    this .isEligibl e();
  119                    this .hideCCDis tanceEligi bilityInpu tSection() ;
  120                    this .removeAdd ressFromMo del();
  121                    this .enableCon tinueButto n();
  122                } else i f (value = == 'no') {
  123                    this .disableCo ntinueButt on();
  124                    this .showCCDis tanceEligi bleMessage ('');
  125                    this .hideCCDis tanceEligi bilityInpu tSection() ;
  126                } else {
  127                    mode l.unset('d istanceEli gible');
  128                }
  129           },
  130           ha ndleTravel Change: fu nction(mod el, value)  {
  131                if (valu e === 'yes ') {
  132                    this .isEligibl e();
  133                    this .hideCCDis tanceEligi bilityInpu tSection() ;
  134                    this .removeAdd ressFromMo del();
  135                    this .enableCon tinueButto n();
  136                } else i f (value = == 'no') {
  137                    this .disableCo ntinueButt on();
  138                    this .showCCDis tanceEligi bleMessage ('');
  139                } else {
  140                    mode l.unset('t ravelBurde n');
  141                }
  142           },
  143           ha ndleUnusua lChange: f unction(mo del, value ) {
  144                if (valu e === 'yes ') {
  145                    this .isEligibl e();
  146                    this .removeAdd ressFromMo del();
  147                    this .enableCon tinueButto n();
  148                    this .hideCCDis tanceEligi bilityInpu tSection() ;
  149                } else i f (value = == 'no') {
  150                    this .btn_find_ facility =  this.$el. find('#fin d-facility -btn');
  151                    this .showCCDis tanceEligi bleMessage ('');
  152                    this .showCCDis tanceEligi bilityInpu tSection() ;
  153                } else {
  154                    mode l.unset('u nusualTrav elBurden') ;
  155                }
  156           },
  157           is Eligible:  function()  {
  158                this.sho wCCDistanc eEligibleM essage('el igible');
  159                this.ena bleContinu eButton();
  160           },
  161           sh owCCDistan ceEligibil ityInputSe ction: fun ction() {
  162                this.sho wChildView ('ccDistan ceEligibil ityInputSe ction', ne w CCDistan ceEligibil ityInputSe ction({mod el: this.m odel}));
  163                this.btn _find_faci lity = thi s.$el.find ('#find-fa cility-btn ');
  164  
  165                this.$el .find('.co mmunity-ca re-input') .show();
  166                if (this .isValidAd dress) {
  167                    this .enableCon tinueButto n();
  168                } else {
  169                    this .disableCo ntinueButt on();
  170                }
  171                if (this .validator .checkForm ()) {
  172                    this .enableFin dFacilityB utton();
  173                } else {
  174                    this .disableFi ndFacility Button();
  175                }
  176           },
  177           hi deCCDistan ceEligibil ityInputSe ction: fun ction() {
  178                this.$el .find('.co mmunity-ca re-input') .hide();
  179           },
  180             handleDist anceEligib ilityF DNS     nge: funct ion() {
  181                this.isV alidAddres s = false;
  182                this.dis ableContin ueButton() ;
  183                if (this .validator .checkForm ()) {
  184                    this .enableFin dFacilityB utton();
  185                } else {
  186                    this .disableFi ndFacility Button();
  187                }
  188           },
  189           ha ndleADREna bled: func tion() {
  190                var step  = 2;
  191                var step s = this.m odel.get(' steps');
  192                var ccEl igFeatureE nabled = a pp.isCcEli gFeatureEn abled();
  193                this.unc heckBothTr avelRadios (this.mode l);
  194                this.dis ableContin ueButton() ;
  195                if (ccEl igFeatureE nabled ===  false) {
  196                    this .showChild View('dist anceSelect ionLayout' , new Dist anceSectio nView({mod el: this.m odel}));
  197                    if ( steps && s teps.lengt h !== step ) {
  198                         vent.trigg er('update :wizardSte ps', step,  true);
  199                    }
  200                } else {
  201                    this .enableCon tinueButto n();
  202                }
  203           },
  204           te mplateCont ext: funct ion () {
  205                var show DisabledTe xt;
  206                var areA nyFaciliti esSupporte dForPatien t = app.pa tientEnrol ledFacilit ies.find(f unction(fa cility) {
  207                    retu rn facilit y.get('sup portsVAR') ;
  208                });
  209                var numb er = '1-86 6-606-8198 ';
  210                var para graphOne =  'This app  does not  currently  support Co mmunity ca re for the  site(s) w here you a re registe red. ';
  211                var para graphTwo =  'Please c all your f acility if  you are i nterested  in Communi ty Care op tions. ';
  212                var para graphThree  = 'If you  currently  use TriWe st to coor dinate you r communit y care app ointment o ptions, pl ease conta ct TriWest  directly  by calling  ';
  213                var ccFe atureEnabl edText = p aragraphOn e + paragr aphTwo + p aragraphTh ree + numb er;
  214                var ccFe atureDisab ledText =  'This app  does not c urrently s upport Com munity Car e for the  site(s) wh ere you ar e register ed. Please  call your  location  if you are  intereste d in Commu nity Care  options.';
  215                showDisa bledText =  false;
  216                if (!are AnyFacilit iesSupport edForPatie nt) {
  217                    show DisabledTe xt = true;
  218                } else {
  219                    show DisabledTe xt = false ;
  220                }
  221  
  222                return {
  223                    numb er: number ,
  224                    disa bled: show DisabledTe xt,
  225                    para graphOne:  paragraphO ne,
  226                    para graphTwo:  paragraphT wo,
  227                    para graphThree : paragrap hThree,
  228                    ccFe atureEnabl ed: app.is CcEligFeat ureEnabled (),
  229                    ccFe atureDisab ledText: c cFeatureDi sabledText ,
  230                    appr ovedProvid ers: app.e xternalLin ks.get('ap proved-pro viders').t oJSON(),
  231                    ccFe atureText:  app.isCcE ligFeature Enabled()  === true ?  ccFeature EnabledTex t : ccFeat ureDisable dText,
  232                };
  233           },
  234           di sableFindF acilityBut ton: funct ion() {
  235                this.btn _find_faci lity.prop( 'disabled' , true);
  236           },
  237           en ableFindFa cilityButt on: functi on() {
  238                this.btn _find_faci lity.prop( 'disabled' , false);
  239           },
  240           un checkBothT ravelRadio s: functio n(model) {
  241                var regi on = this. getRegion( 'distanceS electionLa yout');
  242  
  243                model.un set('dista nceEligibl e');
  244                model.un set('trave lBurden');
  245                model.un set('unusu alTravelBu rden');
  246  
  247                region.e mpty();
  248           },
  249           to Continue:  function()  {
  250                if (this .model.get ('service' ) === 'VA  Appointmen ts') {
  251                    // r oute to va  appointme nt request  page
  252                    wind ow.locatio n.hash = ' #new-va-ap pointment- request';
  253                } else {
  254                    // r oute to cc  appointme nt request , question  3, 4
  255                    // e slint-disa ble-next-l ine no-mag ic-numbers
  256                    vent .trigger(' show:nextW izardPage' , CCFacili tyCareType LayoutView , 2);
  257                    if ( this.model .get('unus ualTravelB urden') == = 'yes') {
  258                         this.remov eAddressFr omModel();
  259                    }
  260                }
  261           },
  262           ge tPatientLo cations: f unction()  {
  263                var loca tions = [] ;
  264                loadingS pinner.sho w();
  265  
  266                app.faci lities.eac h(function (facility)  {
  267                    var  facilityAd dressStr =  facility. get('addre ss') + ',  ' + facili ty.get('ci ty') + ',  ' + facili ty.get('st ate');
  268                    loca tions.push (facilityA ddressStr) ;
  269                    loca tions.push .apply(loc ations, fa cility.get ('children ').map(fun ction(faci lityChild)  {
  270                         return fac ilityChild .address +  ', ' + fa cilityChil d.city + ' , ' + faci lityChild. state;
  271                    }));
  272                });
  273  
  274                return l ocations;
  275           },
  276  
  277           fi ndClosestF acilityHel per: funct ion() {
  278                var allL ocations =  this.getP atientLoca tions();
  279                var subs ectionedLo cations =  [];
  280                var i;
  281                for (i =  0; i < al lLocations .length; i  += GOOGLE _MAX_ADDRE SSES) {
  282                    subs ectionedLo cations.pu sh(allLoca tions.slic e(i, i + G OOGLE_MAX_ ADDRESSES) );
  283  
  284                }
  285                this.goo glePromise Checker(su bsectioned Locations) ;
  286                return s ubsectione dLocations ;
  287           },
  288           go oglePromis eChecker:  function(r emainingSi teCodesArr ay) {
  289                var prom ise;
  290                if (rema iningSiteC odesArray  && remaini ngSiteCode sArray.len gth === 0)  {
  291                    load ingSpinner .hide();
  292                    this .disableFi ndFacility Button();
  293                    this .isEligibl e();
  294                    retu rn;
  295                }
  296                promise  = this.fin dClosestFa cility(rem ainingSite CodesArray [0]);
  297                promise. then(funct ion(respon se) {
  298                    if ( response = == 'eligib le') {
  299                         this.googl ePromiseCh ecker(rema iningSiteC odesArray. slice(1));
  300                    } el se {
  301                         loadingSpi nner.hide( );
  302  
  303                         this.showC CDistanceE ligibleMes sage(respo nse);
  304                         this.disab leContinue Button();
  305                         this.disab leFindFaci lityButton ();
  306                    }
  307                }.bind(t his));
  308           },
  309           op enExternal Link: func tion(e) {
  310                var $lin k;
  311                var navi gationWarn ing;
  312  
  313                e.preven tDefault() ;
  314  
  315                $link =  $(e.curren tTarget);
  316                navigati onWarning  = new (Ext ernalNavig ationWarni ngPopup.ex tend({focu sOnElAfter Close: _.n oop}))({
  317                    elAf terClose:  $link,
  318                    mode l: new Bac kbone.Mode l({href: $ link.attr( 'href')}),
  319                });
  320                navigati onWarning. openPopup( );
  321           },
  322           fi ndClosestF acility: f unction(si teCodeAddr esses) {
  323                var stat e;
  324                var orig in;
  325                var serv ice;
  326                var goog lePromise  = new $.De ferred();
  327                state =  this.$el.f ind('#stat e option:s elected'). text()
  328                    .tri m();
  329                origin =  this.mode l.get('add ress') + ' , ' + this .model.get ('city') +  ', ' + st ate;
  330                service  = new goog le.maps.Di stanceMatr ixService( );
  331                this.isV alidAddres s = true;
  332  
  333                // set p referredZi pCode to e mpty by de fault on f ind neares t facility
  334                this.mod el.set('pr eferredZip code', '') ;
  335                service. getDistanc eMatrix({
  336                    orig ins: [orig in],
  337                    dest inations:  siteCodeAd dresses,
  338                    trav elMode: 'D RIVING',
  339                    unit System: go ogle.maps. UnitSystem .IMPERIAL,
  340                }, funct ion(respon se, status ) {
  341                    var  MAX_DISTAN CE = 40;
  342                    var  DISTANCE_I NDEX = -3;
  343  
  344                    var  results;
  345                    var  element;
  346                    var  distance;
  347                    var  error;
  348                    var  serverErro r;
  349                    var  j;
  350  
  351                    if ( status ===  'OK') {
  352                         results =  response.r ows[0].ele ments;
  353                         for (j = 0 ; j < resu lts.length ; j++) {
  354                             if (re sults[j].s tatus ===  'OK') {
  355                                 el ement = re sults[j];
  356                                 di stance = e lement.dis tance.text ; // dista nce.text =  #.# mi, d istance.va lue = #met ers
  357                                 di stance = d istance.sl ice(0, DIS TANCE_INDE X); // tak e of the m ile text
  358                                 if  (distance  <= MAX_DI STANCE) {
  359                                      // valid  address w ithin 40mi  of facili ty
  360                                      this.isV alidAddres s = false;
  361                                      googlePr omise.reso lve('ineli gible');
  362                                      break;
  363                                 }
  364                             } else  {
  365                                 //  invalid a ddress, go ogle could n't find i t.
  366                                 th is.isValid Address =  false;
  367                                 go oglePromis e.resolve( 'invalidGo ogleAddres s');
  368                                 br eak;
  369                             }
  370                         }
  371                         if (this.i sValidAddr ess) {
  372                             // val id address  - all fac ilities >  40 mi away .
  373                             // whe n we have  a valid ad dress then  default p referredZi pcode
  374                             this.m odel.set(' preferredZ ipcode', t his.model. get('zipCo de'));
  375                             google Promise.re solve('eli gible');
  376                         }
  377                    } el se {
  378                         // request  error.
  379                         serverErro r = new Ba ckbone.Mod el({
  380                             messag eType: 0,
  381                             errorM essage: 'R equest to  Google Dis tance Matr ix API fai led.',
  382                             errorT ype: 'Erro r',
  383                         });
  384                         error = ne w ServerEr rorPopupVi ew({
  385                             elAfte rClose: $( '#header h 1'),
  386                             model:  serverErr or,
  387                         });
  388                         googleProm ise.reject (serverErr or);
  389                         error.open Popup();
  390                         this.disab leContinue Button();
  391                    }
  392                }.bind(t his));
  393                return g ooglePromi se;
  394           },
  395           re moveAddres sFromModel : function () {
  396                if (this .model.has ('city') | | this.mod el.has('st ate') || t his.model. has('zipCo de')) {
  397                    this .model.uns et('primar yCity');
  398                    this .model.uns et('primar yState');
  399                    this .model.uns et('primar yZipCode') ;
  400                }
  401                this.mod el.unset(' address');
  402                this.mod el.unset(' city');
  403                this.mod el.unset(' state');
  404                this.mod el.unset(' zipCode');
  405                this.mod el.unset(' aptSuiteTe xt');
  406           },
  407           sh owCCDistan ceEligible Message: f unction(me ssage) {
  408                var vaFa cilitiesLi nk;
  409  
  410                if (mess age === 'e ligible')  {
  411                    this .responseF romInput =  'You meet  prelimina ry eligibi lity crite ria for co mmunity ca re. Select  the "Cont inue" butt on below t o complete  a request  for care  in your co mmunity. ' ;
  412                } else i f (message  === 'inel igible') {
  413                    vaFa cilitiesLi nk = app.e xternalLin ks.get('va -facilitie s');
  414                    this .responseF romInput =  'Based on  your resp onses, you  are not e ligible fo r benefits  under the  Veterans  Choice pro gram. If y ou have ad ditional q uestions,  please cal l your loc al facilit y for assi stance. <a  href="'
  415                             + vaFa cilitiesLi nk.get('hr ef')
  416                             + '" c lass="exte rnal-link" >'
  417                             + vaFa cilitiesLi nk.get('ti tle')
  418                             + '.</ a><br><br> Disclaimer : Due to t he variati on in resu lts from d istance-ma pping tool s such as  the one us ed in this  applicati on, eligib ility stat us estimat ed by this  tool may  not be acc urate in e very case.  Please ca ll to conf irm your e ligibility . ';
  419                } else i f (message  === 'inva lidGoogleA ddress') {
  420                    this .responseF romInput =  'Please e nter a val id address .';
  421                } else {
  422                    this .responseF romInput =  '';
  423                }
  424                this.$el .find('#el igibilityR esponse'). html(this. responseFr omInput);
  425           },
  426       });
  427   });