{"version":3,"sources":["scripts/app.js"],"names":["angular","module","webDevTec","getTec","data","title","url","description","logo","this","service","SessionService","get","key","item","sessionStorage","getItem","prefix","localStorage","charAt","fromJson","set","value","permanent","isObject","isArray","toJson","setItem","unset","removeItem","unsetAll","clear","$inject","acmeMalarkey","malarkey","linkFunc","scope","el","attr","vm","watcher","typist","typeSpeed","deleteSpeed","pauseDelay","loop","postfix","addClass","forEach","extraValues","type","pause","$watch","contributors","contributor","login","$on","MalarkeyController","$log","githubContributor","activate","getContributors","then","info","directive","restrict","template","link","controller","controllerAs","acmeNavbar","NavbarController","moment","relativeDate","creationDate","fromNow","templateUrl","bindToController","LoginHeaderController","$scope","$http","limit","getContributorsComplete","response","getContributorsFailed","error","apiHost","factory","apiIntegration","$q","apiUrl","getData","myArray","params","callApi","val","push","all","getSingularData","endpoint","res","putData","put","postImage","post","transformRequest","identity","headers","Content-Type","undefined","postData","routerConfig","$stateProvider","$urlRouterProvider","state","otherwise","config","MainController","$uibModal","$timeout","$window","$location","$stateParams","$filter","orderBy","NgTableParams","$animate","handleUnloadEvent","event","returnValue","videoHandler","e","console","log","currentCBIE","buttonDisabled","chunkString","str","len","size","Math","ceil","length","r","Array","offset","i","substr","getMonday","d","Date","day","getDay","diff","getDate","setDate","setGoToPage","pageTo","object","path","company","navCollapsed","navCollapsedFlights","navCollapsedBulletins","navCollapsedCBIE","iOS","navigator","platform","test","submitValue","createCBIEValue","updateCBIEValue","hasPDFPlugin","plugins","name","toLowerCase","match","userData","activateMenu","activateMenuFlights","activateMenuBulletins","activateMenuCBIEs","window","mobilecheck","check","a","userAgent","vendor","opera","flightCard","bulletinCard","cbieCard","analyticCard","flightSelected","airportSelected","dutySelected","filterMessage","filterBulletinsMessage","filterCbieMessage","showOpenTime","showAllFlights","showAirports","statusSelected","issueBySelected","dueBySelected","statusCbieSelected","issueByCbieSelected","dueByCbieSelected","statusCbieAdminSelected","issueByCbieAdminSelected","dueByCbieAdminSelected","isUploading","airporstList","dutysList","flightsList","openTimeList","issuedByList","bulletinsList","totalBulletinsNotRead","totalCBIEPending","totalASAPPending","showBulletinDetail","showBulletinDetailBanner","bulletinSRC","bulletinReadIt","confirmReadBulletin","currentBulletinStatus","currentBulletinID","today","roleCBIEAdm","indexOf","cbieAccessLevel","roleViewAnalytics","analyticsAccessLevel","roleViewAsap","asapViewAccessLevel","roleEditAsap","asapEditAccessLevel","roleAdminAsap","roleApproveAsap","asapApproveAccessLevel","roleApproveAsapERC","showCBIES","showNewCBIE","showEditCBIE","previewCBIE","employeeCBIE","showSubmissionsCBIE","editAssignmentsCBIE","employeesListShow","employeeCbieListShow","linkToNewCBIE","newCBIE","is_draft","level","questions","questionType","answers","file","editCBIE","assignedList","currentEmployee","cbieQuestionTypes","cbieLevelTypes","cbieEmployeeAssignmentOptions","employeeId","employee","companyCBIEsList","pendingGrouping","showCBIEinDetail","cbieList","cbieEmployeeList","counter","busy","busyOpenTime","endpointsArray","paramsArray","countOpenTime","currentPage","currentFlightItems","airportsEndpoint","format","dutysEndpoint","getflightsEndpoint","bulletinsEndpoint","cbiesEndpoint","cbiesAdminEndpoint","asapAdminEndpoint","asapApprovalsEndpoint","employeeEndpoint","airportsParams","dutysParams","flightsParams","ismyflights","page","bulletinsParams","cbiesParams","cbiesAdminParams","asapApprovalsParams","employeeParams","airport","duty","canContinue","apiErrorHappened","errorsDescription","profilePicture","userId","fullName","firstName","lastName","feature","disableApply","uId","getCBIETableTitle","cbie","cbieId","control_version","currentDate","formattedDate","formattedTime","asapAirspaces","selected","asapWeatherElements","other","asapRoutes","otherValue","display","asapQualifications","asapFactorOthers","asapProblems","asapConsequences","asapAirworthiness","asapMission","asapKeysMap","asap_form_aircrafts","asap_form_airspaces","asap_form_airworthiness","asap_form_approvals","asap_form_comments","asap_form_consequences","asap_form_mission","asap_form_problems","asap_form_qualifications","asap_form_weather_elements","asap_form_aircraft_routes","_flightCrewASAPFormData","formType","dateOfOccurence","timeLocal","aircrafts","aircraftType","copy","showASAPReport","whichASAPView","whichASAPViewFrom","asapActiveTab","tableAsapReportsParams","count","filter","sorting","total","asapReports","renameKeys","createdAt","updatedAt","tableAsapApprovalsParams","asapPendingApprovals","asap_form","openASAPView","view","form","index","viewFrom","flightCrewASAPFormData","formName","isAsapFormDisabled","formStatus","reload","tableAsapReportCommentsParams","counts","dataset","asapFormComments","formElement","document","getElementById","opt","filename","image","quality","html2canvas","scale","width","innerWidth","jsPDF","unit","orientation","elementsToHide","querySelectorAll","classList","add","margin","logging","media","html2pdf","from","save","remove","newASAPReport","updateSelectedAirspaceOptions","option","selectedASAPAirspaces","splice","updateSelectedWeatherElementOptions","selectedASAPWeatherElements","updateSelectedAircraftRoutes","routes","pos","addASAPAircraft","aircraft","AircraftType","removeASAPAircraft","hash","saveASAPReport","baseUri","isBeingSubmitted","id","asapRouteApprovals","asapFormApprovals","asapApproveForm","action","message","lastAction","destroyASAPReport","confirm","listRejectASAPReport","openAsapViewMessageModal","modalInstance","open","animation","resolve","result","openAsapListViewMessageModal","active","isUndefined","newDutyList","fountFA","newDuty","Object","order","$","map","arrDep","departure","split","dateDep","arrArr","arrival","dateArr","assignedDuty","arrDueDate","dateDue","arrIssueDate","issuedOn","issuedByFullName","textStatus","status","issuedById","sort","b","updated_at","created_at","tableTitle","assignmentsCount","adminCbieListTableParams","addToolTip","tableEmployeeListParams","group","positionName","departmentName","openBulletinDetail","bulletinId","openCBIEDetail","triggerCBIEButton","reloadTable","onPasswordSubmit","valid","new_password","newPasswordParams","swal","changeFlights","applyFlightFilter","closeMenuMobile","filterOpenTimeMessage","openDetailPopup","flightObj","selectedItem","applyBulletinFilter","issueBy","dueBy","code","openBulletin","target","isWebBrowser","location","href","bulletinStatus","disableCheckbox","updateBulletinsEndpoint","updateBulletinParams","sessionToken","backToBulletins","applyCBIEFilter","filterCbieParams","issuedBy","applyCBIEAdminFilter","addUnloadEvent","addEventListener","attachEvent","cbie_media_content_type","removeUnloadEvent","removeEventListener","detachEvent","locationChange","clearLocationChange","validateForm","cbieForm","eventName","eventType","alert","setCbieTimeLimit","timeRemaining","onTimeout","timeout","limit_reached","queueRenderPage","num","pageRendering","pageNumPending","renderPage","onPrevPage","pageNum","onNextPage","pdfDoc","numPages","getPage","viewport","getViewport","canvas","height","renderContext","canvasContext","ctx","renderTask","render","promise","time_limit","showCbieEndpoint","caId","showCbieParams","start_time","t","UTC","d2","abs","minutes","floor","completion_time_reached","currentCBIEStatus","currentCBIEID","shuffleArray","questionsLength","questionsConsidered","questions_considered","readyState","isPDF","isDefault","isMP4","isPPT","pdfjsLib","GlobalWorkerOptions","workerSrc","getContext","getDocument","pdfDoc_","pageCount","showCBIEDetail","answer","preventDefault","responseSubmit","getCBIEDetail","backToCBIEs","trigger","cbieAssignment","validate","question","markedAsCorrect","isAnswered","updateCbieEndpoint","responseCbieParams","cancel","find","v","score","attempt_failed","reloadCBIEAdminList","callback","openCBIEView","createCbieEndpoint","certificate_enabled","control_id","add_images","editCBIEDetail","showSubmissionCBIE","editAssignmentCBIE","prtContent","WinPrint","stylesheetApp","stylesheetVendor","stylesheets","head","getElementsByTagName","outerHTML","search","pageCSS","write","innerHTML","close","setTimeout","focus","print","employee_id","due_date","issued_on","completed","passing_score","status_color","assignments","tableParams","instructor","instructor_id","insFirstName","insLastName","printCert","Blob","seconds","getTime","fileName","parseInt","appVersion","toString","msSaveBlob","fileURL","URL","createObjectURL","createElement","body","appendChild","style","download","click","base64String","fadedLogo","doc","addFont","setFillColor","rect","addImage","setFontSize","setFont","setFontType","myText","align","titleArray","date","monthNames","assignmentInfo","cbie_id","getMonth","slice","getFullYear","line","text","dateAssigned","dirQuality","employeeNumber","output","buffer","ArrayBuffer","array","Uint8Array","charCodeAt","blob","encoding","saveAs","cancelNewCBIE","deleteCbieEndpoint","deleteCbieParams","callBack","editCbieEndpoint","editCbieParams","is_correct","year","substring","month","reviewCbieEndpoint","cbieParams","employeeAssignments","assignmentsCbieEndpoint","assignmentId","resetCbieEmployeeTable","removeCBIEAssignment","row","rowForm","postingInfo","deleteAssignmentEndpoint","deleteAssignmentParams","addCBIEAssignment","addAssignmentEndpoint","addAssignmentParams","addGroupCBIEAssignment","employee_group","removeCBIEQuestion","deleteCbieQuestionEndpoint","deleteCbieQuestionParams","removeCBIEQuestionAnswer","parentIndex","childIndex","deleteCbieQuestionAEndpoint","deleteCbieQuestionAParams","addCBIEQuestion","addCBIEQuestionAnswer","onCBIESubmit","cbieNew","isDraft","toISOString","replace","handleFileInput","parentI","childI","cbieType","addFileCbieEndpoint","formData","FormData","files","append","cbie_question_id","handleFileRemove","paramData","onCBIEUpdate","cbieEdit","date_error","countInError","trim","text_or_image_missing","cbieDelete","_","settings","cbiePublish","cbieEndpoint","cbieReleaseScores","releaseCbieEndpoint","releaseCbieParams","is_scores_released","loadAnalytics","delayFrom","delayTo","fromDate","toDate","delayData","defaultCode","defaultCompany","delaySelected","companyByCode","companies","companySelected","flightsByCompany","flights","labels","labelsDesc","codeNumeric","Number","descriptionLong","codeCount","myChart","Chart","datasets","label","backgroundColor","borderColor","borderWidth","options","responsive","hover","animationDuration","duration","onComplete","chartInstance","chart","font","helpers","fontString","defaults","global","defaultFontSize","defaultFontStyle","defaultFontFamily","textAlign","textBaseline","meta","getDatasetMeta","bar","fillText","_model","x","y","legend","onClick","graphClickEvent","tooltips","callbacks","tooltipItems","formatLabel","xLabel","tooltipItem","yLabel","scales","xAxes","scaleLabel","labelString","yAxes","ticks","beginAtZero","max","apply","onclick","activeElement","getElementsAtEvent","layerY","_index","loadMonthlyAircraftUtil","ctxAircraft","ctxMonthlyUtilAircraft","updateAircraftUtilFrom","updateAircraftUtilTo","monthlyUtilAircraftData","aircraftData","aircraftSum","serialNumber","sumTotalHours","aircraftSelected","monthlyUtilChartAircraft","graphClickEventAircraft","formatSeconds","col","registration","loadMonthlyCrewUtil","ctxCapt","ctxFO","ctxFA","ctxMech","ctxMonthlyUtilCapt","ctxMonthlyUtilFO","ctxMonthlyUtilFA","ctxMonthlyUtilMech","updateCrewUtilFrom","updateCrewUtilTo","monthlyUtilData","monthlyUtilCaptData","monthlyUtilFOData","monthlyUtilFAData","monthlyUtilMechData","captainData","foData","faData","mechData","captSum","foSum","faSum","mechSum","flightDutyName","captSelected","foSelected","faSelected","mechSelected","monthlyUtilChartCapt","graphClickEventCapt","monthlyUtilChartFO","graphClickEventFO","monthlyUtilChartFA","graphClickEventFA","monthlyUtilChartMech","graphClickEventMech","iSumTotalHours","orderByFunction","utilData","summaryAnalytics","updateDelayTime","delayTime","now","destroy","updateCrewUtilTime","updateAircraftUtilTime","checkIfRead","logout","cbiesExec","employeeForms","goFlights","goBulletins","bulletin","goCbies","analyticsExec","goBack","area","history","back","goHome","loadMore","valueassignedDuty","loadMoreOpenTime","secs","setSeconds","s","toTimeString","parse","m","random","elementClass","elements","getElementsByClassName","toggle","container","placement","newKeys","keys","reduce","acc","newKey","getElementsAtEventForMode","_xScale","$apply","activePoints","_datasetIndex","changeSelectedCompany","customer_id","maxwidth","sections","words","temp","concat","hasOwnProperty","toRoute","to","ModalController","$uibModalInstance","flightDetails","dismiss","customer","flightsEndpoint","flightId","countDH","countACM","showSeparator","statusText","ModalApprovalActionMessageController","actionFriendly","flightCrewASAPFormApprove","saveApproveASAPReport","require","password","elem","attrs","ctrl","newVal","isSatisfied","criteria","strength","$parsers","unshift","viewValue","patt","RegExp","patternValidator","isValid","$setValidity","element","stringify","bind","table","nextElementSibling","csvString","rows","rowData","cells","j","ele","k","childNodes","tagName","innerText","textContent","btoa","appendTo","input","$sce","trustAsResourceUrl","txt","toUpperCase","getDuty","filterFilter","dutyname","trusted","ResetpasswordController","logoUrl","activemsg","wrongPassword","confirmPasswordMessage","resetPasswordEndpoint","onSubmit","dataResetPassword","confirmPassword","resetPasswordParams","token","reloadOnSearch","LoginController","loginValue","emailMessage","passwordMessage","forgotPasswordEndpoint","dataLogin","email","loginEndpoint","loginParams","user","credentials","token_type","access_token","remember_me","common","sendMailForgotPassword","forgotPasswordParams","FlightStatusController","showFlights","showFlightsList","searchButtonText","dateFormat","dateParamFormat","currentFlight","dates","subtract","getLocalTime","utc","standardAdjustment","observesDST","startDST","endDST","localTime","adjustment","flightStatusEndpoint","flightStatusParams","destination","origin","flightNumber","flight","statusId","localDeparture","etd","originStandardAdjustment","originObservesDST","originStartDST","originEndDST","localArrival","eta","finalDestinationStandardAdjustment","finalDestinationObservesDST","finalDestinationStartDST","finalDestinationEndDST","delayed","std","atd","ata","sta","nextDayArrival","showFlightDetail","position","runBlock","$rootScope","run","constant","$logProvider","toastrConfig","$httpProvider","debugEnabled","allowHtml","timeOut","positionClass","preventDuplicates","progressBar","interceptors","when","responseError","rejection","reject","request","$templateCache"],"mappings":"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","file":"scripts/app-56a989b8b6.js","sourcesContent":["(function() {\n 'use strict';\n\n angular\n .module('app', ['ngTable' ,'ngCookies', 'ngMessages', 'ngResource', 'ui.router', 'ui.bootstrap', 'toastr', 'angular.filter', 'infinite-scroll', 'ngAnimate']);\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .service('webDevTec', webDevTec);\n\n /** @ngInject */\n function webDevTec() {\n var data = [\n {\n 'title': 'AngularJS',\n 'url': 'https://angularjs.org/',\n 'description': 'HTML enhanced for web apps!',\n 'logo': 'angular.png'\n },\n {\n 'title': 'BrowserSync',\n 'url': 'http://browsersync.io/',\n 'description': 'Time-saving synchronised browser testing.',\n 'logo': 'browsersync.png'\n },\n {\n 'title': 'GulpJS',\n 'url': 'http://gulpjs.com/',\n 'description': 'The streaming build system.',\n 'logo': 'gulp.png'\n },\n {\n 'title': 'Jasmine',\n 'url': 'http://jasmine.github.io/',\n 'description': 'Behavior-Driven JavaScript.',\n 'logo': 'jasmine.png'\n },\n {\n 'title': 'Karma',\n 'url': 'http://karma-runner.github.io/',\n 'description': 'Spectacular Test Runner for JavaScript.',\n 'logo': 'karma.png'\n },\n {\n 'title': 'Protractor',\n 'url': 'https://github.com/angular/protractor',\n 'description': 'End to end test framework for AngularJS applications built on top of WebDriverJS.',\n 'logo': 'protractor.png'\n },\n {\n 'title': 'Bootstrap',\n 'url': 'http://getbootstrap.com/',\n 'description': 'Bootstrap is the most popular HTML, CSS, and JS framework for developing responsive, mobile first projects on the web.',\n 'logo': 'bootstrap.png'\n },\n {\n 'title': 'Angular UI Bootstrap',\n 'url': 'http://angular-ui.github.io/bootstrap/',\n 'description': 'Bootstrap components written in pure AngularJS by the AngularUI Team.',\n 'logo': 'ui-bootstrap.png'\n },\n {\n 'title': 'Sass (Ruby)',\n 'url': 'http://sass-lang.com/',\n 'description': 'Original Syntactically Awesome StyleSheets implemented in Ruby',\n 'logo': 'ruby-sass.png'\n }\n ];\n\n this.getTec = getTec;\n\n function getTec() {\n return data;\n }\n }\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .service('SessionService', SessionService);\n\n SessionService.$inject = [];\n\n /* @ngInject */\n function SessionService()\n {\n this.get = get;\n this.set = set;\n this.unset = unset;\n this.unsetAll = unsetAll;\n var prefix = '';\n\n ////////////////\n\n function get (key) {\n var item = sessionStorage.getItem(prefix + key) || localStorage.getItem(prefix + key);\n // angular.toJson will convert null to 'null', so a proper conversion is needed\n // FIXME not a perfect solution, since a valid 'null' string can't be stored\n if (!item || item === 'null') {\n return null;\n }\n if (item.charAt(0) === \"{\" || item.charAt(0) === \"[\") {\n return angular.fromJson(item);\n }\n return item;\n };\n\n function set (key, value, permanent) {\n if (angular.isObject(value) || angular.isArray(value)) {\n value = angular.toJson(value);\n }\n if(permanent){\n localStorage.setItem(prefix + key, value);\n }\n return sessionStorage.setItem(prefix + key, value);\n };\n\n function unset (key) {\n localStorage.removeItem(prefix + key);\n return sessionStorage.removeItem(prefix + key);\n };\n\n function unsetAll(){\n localStorage.clear();\n return sessionStorage.clear();\n };\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .directive('acmeMalarkey', acmeMalarkey);\n\n /** @ngInject */\n function acmeMalarkey(malarkey) {\n var directive = {\n restrict: 'E',\n scope: {\n extraValues: '='\n },\n template: ' ',\n link: linkFunc,\n controller: MalarkeyController,\n controllerAs: 'vm'\n };\n\n return directive;\n\n function linkFunc(scope, el, attr, vm) {\n var watcher;\n var typist = malarkey(el[0], {\n typeSpeed: 40,\n deleteSpeed: 40,\n pauseDelay: 800,\n loop: true,\n postfix: ' '\n });\n\n el.addClass('acme-malarkey');\n\n angular.forEach(scope.extraValues, function(value) {\n typist.type(value).pause().delete();\n });\n\n watcher = scope.$watch('vm.contributors', function() {\n angular.forEach(vm.contributors, function(contributor) {\n typist.type(contributor.login).pause().delete();\n });\n });\n\n scope.$on('$destroy', function () {\n watcher();\n });\n }\n\n /** @ngInject */\n function MalarkeyController($log, githubContributor) {\n var vm = this;\n\n vm.contributors = [];\n\n activate();\n\n function activate() {\n return getContributors().then(function() {\n $log.info('Activated Contributors View');\n });\n }\n\n function getContributors() {\n return githubContributor.getContributors(10).then(function(data) {\n vm.contributors = data;\n\n return vm.contributors;\n });\n }\n }\n\n }\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .directive('acmeNavbar', acmeNavbar);\n\n /** @ngInject */\n function acmeNavbar() {\n var directive = {\n restrict: 'E',\n templateUrl: 'app/components/navbar/navbar.html',\n scope: {\n creationDate: '='\n },\n controller: NavbarController,\n controllerAs: 'vm',\n bindToController: true\n };\n\n return directive;\n\n /** @ngInject */\n function NavbarController(moment) {\n var vm = this;\n\n // \"vm.creationDate\" is available by directive option \"bindToController: true\"\n vm.relativeDate = moment(vm.creationDate).fromNow();\n }\n }\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .controller('LoginHeaderController', LoginHeaderController);\n\n LoginHeaderController.$inject = ['$scope'];\n\n /* @ngInject */\n function LoginHeaderController($scope) {\n var vm = this;\n vm.title = 'LoginHeaderController';\n\n activate();\n\n ////////////////\n\n function activate() {\n }\n }\n})();\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .factory('githubContributor', githubContributor);\n\n /** @ngInject */\n function githubContributor($log, $http) {\n var apiHost = 'https://api.github.com/repos/Swiip/generator-gulp-angular';\n\n var service = {\n apiHost: apiHost,\n getContributors: getContributors\n };\n\n return service;\n\n function getContributors(limit) {\n if (!limit) {\n limit = 30;\n }\n\n return $http.get(apiHost + '/contributors?per_page=' + limit)\n .then(getContributorsComplete)\n .catch(getContributorsFailed);\n\n function getContributorsComplete(response) {\n return response.data;\n }\n\n function getContributorsFailed(error) {\n $log.error('XHR Failed for getContributors.\\n' + angular.toJson(error.data, true));\n }\n }\n }\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .service('apiIntegration', apiIntegration);\n\n apiIntegration.$inject = ['$http', '$q', 'apiUrl'];\n\n /* @ngInject */\n function apiIntegration($http, $q, apiUrl) {\n\n this.getData = getData;\n this.putData = putData;\n this.postData = postData;\n this.postImage = postImage;\n this.getSingularData = getSingularData;\n\n //Get method\n function getData (myArray, params) {\n var callApi = [];\n angular.forEach(myArray, function(val, key) {\n callApi.push($http.get(apiUrl + val, {params: params[key]} ));\n });\n\n return $q.all(callApi);\n };\n\n //Get singular method\n function getSingularData (endpoint, params) {\n return $http\n .get(apiUrl + endpoint, {params: params})\n .then(function (res) {\n return res.data;\n });\n };\n\n //Put method\n function putData (endpoint, params) {\n return $http\n .put(apiUrl + endpoint, params)\n .then(function (res) {\n return res.data;\n });\n };\n\n //Put Image\n function postImage (endpoint, params) {\n return $http\n .post(apiUrl + endpoint, params, {\n transformRequest: angular.identity,\n headers: {'Content-Type': undefined}\n })\n .then(function (res) {\n return res.data;\n });\n };\n\n\n //Post method\n function postData (endpoint, params) {\n return $http\n .post(apiUrl + endpoint, params)\n .then(function (res) {\n return res.data;\n });\n };\n }\n})();\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .config(routerConfig);\n\n /** @ngInject */\n function routerConfig($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('main', {\n url: '/:company/main',\n templateUrl: 'app/main/main.html',\n controller: 'MainController',\n controllerAs: 'main'\n })\n .state('settings', {\n url: '/:company/settings',\n templateUrl: 'app/main/settings.html',\n controller: 'MainController',\n controllerAs: 'main'\n })\n .state('cbiesExec', {\n url: '/:company/cbiesExec',\n templateUrl: 'app/main/cbiesExec.html',\n controller: 'MainController',\n controllerAs: 'main'\n })\n .state('analyticsExec', {\n url: '/:company/analyticsExec',\n templateUrl: 'app/main/analyticsExec.html',\n controller: 'MainController',\n controllerAs: 'main'\n })\n .state('home', {\n url: '/:company/home',\n templateUrl: 'app/main/home.html',\n controller: 'MainController',\n controllerAs: 'main'\n })\n .state('employeeForm', {\n url: '/:company/employeeForms',\n templateUrl: 'app/main/employeeForms.html',\n controller: 'MainController',\n controllerAs: 'main'\n })\n ;\n\n $urlRouterProvider.otherwise('/flight_times');\n }\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .controller('MainController', MainController)\n .controller('ModalController', ModalController)\n .controller('ModalApprovalActionMessageController', ModalApprovalActionMessageController)\n .directive('passwordStrength', [\n function() {\n return {\n require: 'ngModel',\n restrict: 'E',\n scope: {\n password: '=ngModel'\n },\n\n link: function(scope, elem, attrs, ctrl) {\n scope.$watch('password', function(newVal) {\n\n scope.strength = isSatisfied(newVal && newVal.length >= 8) +\n isSatisfied(newVal && (/[A-z]/).test(newVal)) +\n isSatisfied(newVal && (/(?=.*\\W)/).test(newVal)) +\n isSatisfied(newVal && (/\\d/).test(newVal));\n\n function isSatisfied(criteria) {\n return criteria ? 1 : 0;\n }\n }, true);\n },\n template: '
' +\n '
= 1 ? 25 : 0}}%\">
' +\n '
= 2 ? 25 : 0}}%\">
' +\n '
= 3 ? 25 : 0}}%\">
' +\n '
= 4 ? 25 : 0}}%\">
' +\n '
'\n };\n }\n ])\n .directive('patternValidator', [\n function() {\n return {\n require: 'ngModel',\n restrict: 'A',\n link: function(scope, elem, attrs, ctrl) {\n ctrl.$parsers.unshift(function(viewValue) {\n var patt = new RegExp(attrs.patternValidator);\n var isValid = patt.test(viewValue);\n ctrl.$setValidity('passwordPattern', isValid);\n // angular does this with all validators -> return isValid ? viewValue : undefined;\n // But it means that the ng-model will have a value of undefined\n // So just return viewValue!\n return viewValue;\n });\n }\n };\n }\n ])\n .directive('exportToCsv',function(){\n return {\n restrict: 'A',\n link: function (scope, element, attrs) {\n function stringify(str){\n return '\"' +str.replace(/^\\s\\s*/, '').replace(/\\s*\\s$/, '').replace(/\"/g, '\"\"') +'\"';\n }\n var el = element[0];\n element.bind('click', function(e){\n var table = e.target.nextElementSibling;\n var csvString = '';\n for(var i=3; i-1){\n var ele = angular.element(rowData[j]);\n for(var k=0; k-1 || rowData[j].innerHTML.indexOf('')>-1){\n var ele = angular.element(rowData[j]);\n csvString = csvString + stringify(ele[0].textContent) + \",\";\n }else{\n csvString = csvString + stringify(rowData[j].innerHTML) + \",\";\n }\n }\n csvString = csvString.substring(0,csvString.length - 1);\n csvString = csvString + \"\\n\";\n }\n csvString = csvString.substring(0, csvString.length - 1);\n // alert(csvString);\n var a = $('', {\n style:'display:none',\n href:'data:application/csv;base64,'+btoa(csvString),\n download:'employeeStatistics.csv'\n }).appendTo('body')\n a[0].click()\n a.remove();\n });\n }\n };\n })\n .filter('ceil', function(){\n return function(input) {\n return Math.ceil(+input);\n };\n })\n .filter('secondsToDateTime', function() {\n return function(seconds) {\n var d = new Date(0,0,0,0,0,0,0);\n d.setSeconds(seconds);\n return d;\n };\n })\n .filter('trustAsResourceUrl', ['$sce', function($sce) {\n return function(val) {\n console.log(val);\n return $sce.trustAsResourceUrl(val);\n };\n }])\n .filter('titleCase', function() {\n return function(input) {\n input = input || '';\n return input.replace(/\\w\\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});\n };\n });\n MainController.$inject = ['$scope','apiIntegration', '$uibModal', 'apiUrl', '$timeout', '$window', '$location', 'SessionService', '$log', '$http', '$stateParams', '$filter', 'orderByFilter', 'NgTableParams'];\n ModalController.$inject = ['apiIntegration', '$uibModalInstance', 'flightObj', '$log', '$stateParams'];\n ModalApprovalActionMessageController.$inject = ['$uibModalInstance', 'form', 'action', 'message','$log', '$stateParams'];\n /* @ngInject */\n function MainController($scope, apiIntegration, $uibModal, apiUrl, $timeout, $window, $location, SessionService, $log, $http, $stateParams, $filter, orderBy, NgTableParams, $animate) {\n var vm = this;\n vm.title = 'MainController';\n vm.navCollapsed = true;\n vm.navCollapsedFlights = true;\n vm.navCollapsedBulletins = true;\n vm.navCollapsedCBIE = true;\n vm.company = $stateParams.company;\n vm.iOS = !!navigator.platform && (/iPad|iPhone|iPod/).test(navigator.platform);\n vm.submitValue = \"Submit\";\n vm.createCBIEValue = \"Create\";\n vm.updateCBIEValue = \"Update\";\n vm.hasPDFPlugin = false;\n angular.forEach(navigator.plugins, function(value, key)\n {\n if(value.name.toLowerCase().match(\"pdf\"))\n {\n vm.hasPDFPlugin = true;\n }\n });\n var userData = SessionService.get('user');\n vm.activateMenu = function() { vm.navCollapsed = (vm.navCollapsed == true) ? false : true; };\n vm.activateMenuFlights = function() { vm.navCollapsedFlights = (vm.navCollapsedFlights == true) ? false : true; };\n vm.activateMenuBulletins = function() { vm.navCollapsedBulletins = (vm.navCollapsedBulletins == true) ? false : true; };\n vm.activateMenuCBIEs = function() { vm.navCollapsedCBIE = (vm.navCollapsedCBIE == true) ? false : true; };\n // Validate if user is login, otherwise retur to home\n if(!SessionService.get('user')) { $location.path(\"/\"+vm.company); return; }\n\n window.mobilecheck = function() {\n var check = false;\n (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);\n return check;\n };\n\n\n vm.flightCard = true;\n vm.bulletinCard = true;\n vm.cbieCard = true;\n vm.analyticCard = true;\n\n if(!mobilecheck()){\n vm.flightCard = false;\n vm.bulletinCard = false;\n vm.cbieCard = false;\n vm.analyticCard = false;\n }\n\n\n vm.flightSelected = \"true\";\n vm.airportSelected = \"0\";\n vm.dutySelected = \"0\";\n vm.filterMessage = \"Loading...\";\n vm.filterBulletinsMessage = \"Loading...\";\n vm.filterCbieMessage = \"Loading...\";\n vm.showOpenTime = false;\n vm.showAllFlights = false;\n vm.showAirports = false;\n vm.statusSelected = \"2\";\n vm.issueBySelected = \"0\";\n vm.dueBySelected = \"0\";\n\n vm.statusCbieSelected = \"0\";\n vm.issueByCbieSelected = \"0\";\n vm.dueByCbieSelected = \"0\";\n\n vm.statusCbieAdminSelected = \"0\";\n vm.issueByCbieAdminSelected = \"0\";\n vm.dueByCbieAdminSelected = \"0\";\n\n vm.isUploading = false;\n vm.airporstList = [];\n vm.dutysList = [];\n vm.flightsList = [];\n vm.openTimeList = [];\n vm.issuedByList = [];\n vm.bulletinsList = [];\n vm.totalBulletinsNotRead = 0;\n vm.totalCBIEPending = 0;\n vm.totalASAPPending = 0;\n vm.showBulletinDetail = false;\n vm.showBulletinDetailBanner = true;\n vm.bulletinSRC= \"\";\n vm.bulletinReadIt= false;\n vm.confirmReadBulletin = false;\n vm.currentBulletinStatus = null;\n vm.currentBulletinID = null;\n vm.today = new Date();\n /* CBIE start variables */\n /* CBIE adm variables */\n vm.roleCBIEAdm = [51,52].indexOf(SessionService.get('user').cbieAccessLevel) > -1 ? true : false;\n vm.roleViewAnalytics = [53].indexOf(SessionService.get('user').analyticsAccessLevel) > -1 ? true : false;\n vm.roleViewAsap = [54,55,56].indexOf(SessionService.get('user').asapViewAccessLevel) > -1 ? true : false;\n vm.roleEditAsap = [55,56].indexOf(SessionService.get('user').asapEditAccessLevel) > -1 ? true : false;\n vm.roleAdminAsap = [56].indexOf(SessionService.get('user').asapEditAccessLevel) > -1 ? true : false;\n vm.roleApproveAsap = [57,58,59,60].indexOf(SessionService.get('user').asapApproveAccessLevel) > -1 ? true : false;\n vm.roleApproveAsapERC = [58].indexOf(SessionService.get('user').asapApproveAccessLevel) > -1 ? true : false;\n console.log(SessionService.get('user').asapApproveAccessLevel);\n // vm.roleEditAsap = true;\n // vm.roleAdminAsap = true;\n // vm.roleApproveAsap =false;\n\n vm.showCBIES = true;\n vm.showNewCBIE = false;\n vm.showEditCBIE = false;\n vm.previewCBIE = false;\n vm.employeeCBIE = false;\n vm.showSubmissionsCBIE = false;\n vm.editAssignmentsCBIE = false;\n vm.employeesListShow = true;\n vm.employeeCbieListShow = false;\n vm.linkToNewCBIE = true;\n vm.newCBIE = {\"is_draft\": 1, \"level\": \"General\", questions: [{questionType: \"multiple choice\", answers: [{file:\"\"},{file:\"\"}]}]};\n vm.editCBIE = {};\n vm.assignedList = [];\n vm.currentEmployee = {};\n vm.cbieQuestionTypes = [\"Multiple Choice\", \"Fill-in the Blank\"];\n vm.cbieLevelTypes = [\"General\", \"Priority\"];\n vm.cbieEmployeeAssignmentOptions = [{employeeId: 1, employee:\"User1\"}, {employeeId: 2, employee:\"User2\"}, {employeeId: 3, employee:\"User3\"}];\n vm.companyCBIEsList = [];\n vm.pendingGrouping = 0;\n /* CBIE adm variables */\n vm.showCBIEinDetail = false;\n vm.cbieList = [];\n vm.currentCBIE = {};\n vm.cbieEmployeeList = [];\n vm.counter = 0;\n /* CBIE start variables */\n // Load More control\n vm.busy = false;\n vm.busyOpenTime = true;\n var countOpenTime = 0;\n var currentPage = 1;\n var currentFlightItems = 0;\n\n // var endpoint = 'flights/' + moment().format(\"YYYY-MM-DD HH:MM:ss\") + '/airports';\n // var airportsEndpoint = 'flights/2016-07-05%2014:00:00/airports';\n // var dutysEndpoint = 'flights/2016-07-05%2014:00:00/dutys';\n // var getflightsEndpoint = 'flights/2016-07-05%2014:00:00/flights';\n // moment format\"YYYY-MM-DD HH:MM:ss\"\n var airportsEndpoint = 'flights/' + moment().format(\"YYYY-MM-DD HH:MM:ss\") + '/airports';\n var dutysEndpoint = 'flights/' + moment().format(\"YYYY-MM-DD HH:MM:ss\") + '/dutys';\n var getflightsEndpoint = 'flights/' + moment().format(\"YYYY-MM-DD 00:00:01\") + '/flights';\n var bulletinsEndpoint = 'bulletins';\n var cbiesEndpoint = 'cbies';\n var cbiesAdminEndpoint = 'cbiesAdmin';\n // var asapEndpoint = 'asap';\n var asapAdminEndpoint = 'asapAdmin';\n var asapApprovalsEndpoint = 'asapAdmin/getASAPInbasket';\n var employeeEndpoint = 'employees';\n\n var airportsParams = { company: vm.company };\n var dutysParams = { company: vm.company };\n var flightsParams = { ismyflights: 'true', page: currentPage, company: vm.company };\n var bulletinsParams = { company: vm.company };\n var cbiesParams = { company: vm.company};\n var cbiesAdminParams = { company: vm.company };\n // var asapParams = { company: vm.company};\n var asapAdminParams = { company: vm.company };\n var asapApprovalsParams = { company: vm.company };\n var employeeParams = { company: vm.company };\n var endpointsArray;\n var paramsArray;\n if(vm.roleCBIEAdm){\n flightsParams = { airport: 0, ismyflights: 'false', duty: 0,page: currentPage, company: vm.company };\n endpointsArray = [airportsEndpoint, dutysEndpoint, getflightsEndpoint, bulletinsEndpoint, cbiesEndpoint, cbiesAdminEndpoint, employeeEndpoint];\n paramsArray = [airportsParams, dutysParams, flightsParams, bulletinsParams, cbiesParams, cbiesAdminParams, employeeParams];\n }else{\n endpointsArray = [airportsEndpoint, dutysEndpoint, getflightsEndpoint, bulletinsEndpoint, cbiesEndpoint];\n paramsArray = [airportsParams, dutysParams, flightsParams, bulletinsParams, cbiesParams];\n }\n\n if(vm.roleApproveAsap){\n endpointsArray.push(asapApprovalsEndpoint);\n paramsArray.push(asapApprovalsParams);\n }\n\n var apiErrorHappened = [];\n var errorsDescription = \"\";\n\n var canContinue;\n vm.profilePicture = apiUrl + \"employees/\" + userData.userId + \"/picture?company=\"+vm.company;\n vm.fullName = userData.firstName + \" \" + userData.lastName;\n vm.feature = userData.feature;\n vm.disableApply = true;\n vm.buttonDisabled = true;\n vm.uId = userData.userId;\n vm.getCBIETableTitle = function(cbie){\n return cbie.cbieId + \".\" + cbie.control_version + \" - \" + cbie.title;\n };\n \n /* ASAP start variables */\n var currentDate = new Date();\n vm.formattedDate = $filter('date')(currentDate, 'MM/dd/yyyy');\n vm.formattedTime = $filter('date')(currentDate, 'HH:mm');\n var asapAirspaces = [{name:\"Class A\", value:\"A\", selected:false},{name:\"Class B\", value:\"B\", selected:false},{name:\"Class C\", value:\"C\", selected:false},{name:\"Class D\", value:\"D\", selected:false},{name:\"Class E\", value:\"E\", selected:false},{name:\"Class G\", value:\"G\", selected:false},{name:\"SpecialUse\", value:\"SPECIALUSE\", selected:false},{name:\"TFR\",value:\"TFR\", selected:false}];\n var asapWeatherElements = [{name:\"Fog\", value:\"FOG\", selected:false}, {name:\"Hail\", value:\"HAIL\", selected:false}, {name:\"Haze/Smoke\", value:\"HAZESMOKE\", selected:false}, {name:\"Icing\", value:\"ICING\", selected:false}, {name:\"Rain\", value:\"RAIN\", selected:false},{name:\"Snow\", value:\"SNOW\", selected:false}, {name:\"Thunderstorm\", value:\"THUNDERSTORM\", selected:false}, {name:\"Turbulence\", value:\"TURBULENCE\", selected:false,other:false}, {name:\"Windshear\", value:\"WINDSHEAR\", selected:false},{name:\"Other\", value:\"OTHER\", selected:false}];\n var asapRoutes = [{name:\"Direct\", value:\"DIRECT\", selected:false}, {name:\"Oceanic\", value:\"OCEANIC\", selected:false}, {name:\"Vectors\", value:\"VECTORS\", selected:false},{name:\"Visual Approach\", value:\"VISUALAPPROACH\", selected:false}, {name:\"None\", value:\"NONE\", selected:false},{name:\"Other:\", value:\"OTHER\", selected:false, other:true, otherValue:\"\"},{name:\"AirwayIDOther\",display:\"Airway (ID):\", value:\"AIRWAY\", selected:false, other: true, otherValue:\"\"}, {name:\"STARIDOther\", display:\"STAR (ID):\", value:\"STAR\", selected:false, other:true, otherValue:\"\"}, {name:\"SIDOther\", display:\"SID\", value:\"SID\", selected:false, other:true, otherValue:\"\"}];\n var asapQualifications = [{name:\"A\",display:\"A\", value:\"A\", selected:false, other: false}, {name:\"P\",display:\"P\", value:\"P\", selected:false, other: false}, {name:\"NDT\",display:\"NDT\", value:\"NDT\", selected:false, other: false}, {name:\"Repairman\",display:\"Repairman\", value:\"REPAIRMAN\", selected:false, other: false}, {name:\"InspectionAuthority\",display:\"Inspection Authority\", value:\"INSPECTIONAUTHORITY\", selected:false, other: false}, {name:\"Avionics\",display:\"Avionics\", value:\"AVIONICS\", selected:false, other: false}, {name:\"Other\",display:\"Other\", value:\"OTHER\", selected:false, other: true}];\n var asapFactorOthers = [{name:\"Lighting\",display:\"Lighting\", value:\"LIGHTING\", selected:false, other: false}, {name:\"Weather\",display:\"Weather\", value:\"WEATHER\", selected:false, other: false}, {name:\"WorkCards\",display:\"Work cards\", value:\"WORKCARDS\", selected:false, other: false}, {name:\"Manuals\",display:\"Manuals\", value:\"MANUALS\", selected:false, other: false}, {name:\"Briefing\",display:\"Briefing\", value:\"BRIEFING\", selected:false, other: false}, {name:\"Other\",display:\"Other\", value:\"OTHER\", selected:false, other: true}]\n var asapProblems = [{name:\"RoutineInspection\",display:\"Routine inspection\", value:\"ROUTINEINSPECTION\", selected:false, other: false}, {name:\"InFlight\",display:\"In-flight\", value:\"INFLIGHT\", selected:false, other: false}, {name:\"Taxi\",display:\"Taxi\", value:\"TAXI\", selected:false, other: false}, {name:\"AircraftServiceAtGate\",display:\"While aircraft was in service at gate\", value:\"AIRCRAFTSERVICEATGATE\", selected:false, other: false}, {name:\"PreFlight\",display:\"Pre-flight\", value:\"PREFLIGHT\", selected:false, other: false}, {name:\"Other\",display:\"Other\", value:\"OTHER\", selected:false, other: true, otherValue:\"\"}];\n var asapConsequences = [{name:'FlightDelay',display:'Flight delay', value:'FLIGHTDELAY', selected:false, other: false} ,{name:'FlightCancellation',display:'Flight cancellation', value:'FLIGHTCANCELLATION', selected:false, other: false} ,{name:'GateReturn ',display:'Gate return', value:'GATERETURN', selected:false, other: false} ,{name:'AirTurnBack',display:'Air turn back', value:'AIRTURNBACK', selected:false, other: false} ,{name:'ImproperService',display:'Improper service', value:'IMPROPERSERVICE', selected:false, other: false} ,{name:'Rework',display:'Rework', value:'REWORK', selected:false, other: false} ,{name:'InFlight shut down',display:'In-flight shut down', value:'INFLIGHTSHUTDOWN', selected:false, other: false} ,{name:'AircraftEngineDamage',display:'Aircraft / engine damage', value:'AIRCRAFTENGINEDAMAGE', selected:false, other: false} ,{name:'Other',display:'Other', value:'OTHER', selected:false, other: true}];\n var asapAirworthiness = [{name:'AircraftReleasedService',display:'Aircraft released for service', value:'AIRCRAFTRELEASEDSERVICE', selected:false, other: false} ,{name:'AircraftRecordsCompleted',display:'Aircraft records completed', value:'AIRCRAFTRECORDSCOMPLETED', selected:false, other: false} ,{name:'AircraftRequiredDocumentsAboard',display:'Aircraft required documents aboard', value:'AIRCRAFTREQUIREDDOCUMENTSABOARD', selected:false, other:false} ,{name:'NotReleasedForService',display:'Not released for service', value:'NOTRELEASEDFORSERVICE', selected:false, other: false} ,{name:'Unknown',display:'Unknown', value:'UNKNOWN', selected:false, other: false}]\n var asapMission = [{name:'Passenger',display:'Passenger', value:'PASSENGER', selected:false, other: false} ,{name:'Personal',display:'Personal', value:'PERSONAL', selected:false, other: false} ,{name:'CargoFreight',display:'Cargo / Freight', value:'CARGOFREIGHT', selected:false, other: false} ,{name:'Training',display:'Training', value:'TRAINING', selected:false, other: false} ,{name:'Ferry',display:'Ferry', value:'FERRY', selected:false, other: false} ,{name:'Other',display:'Other', value:'OTHER', selected:false, other: true}]\n var asapKeysMap = {\n asap_form_aircrafts:'aircrafts',\n asap_form_airspaces: 'asapAirspaces',\n asap_form_airworthiness:'asapAirworthiness',\n asap_form_approvals:'asapFormApprovals',\n asap_form_comments:'asapFormComments',\n asap_form_consequences:'asapConsequences',\n asap_form_mission:'asapMission',\n asap_form_problems:'asapProblems',\n asap_form_qualifications:'asapQualifications',\n asap_form_weather_elements:'asapWeatherElements',\n asap_form_aircraft_routes:'asapRoutes'\n }\n vm._flightCrewASAPFormData = {formType:\"dispatcher\", name:vm.fullName, userId: userData.userId, dateOfOccurence:currentDate,timeLocal:vm.formattedTime, asapRoutes: asapRoutes, asapWeatherElements:asapWeatherElements, asapAirspaces:asapAirspaces, asapQualifications:asapQualifications, asapProblems:asapProblems, asapConsequences:asapConsequences,asapAirworthiness:asapAirworthiness,asapMission:asapMission,asapFactorOthers:asapFactorOthers,aircrafts:[{aircraftType: \"MD-80\", asapRoutes: angular.copy(asapRoutes)}]};\n vm.showASAPReport=false;\n vm.whichASAPView = 'list';\n vm.whichASAPViewFrom;\n vm.asapActiveTab = 0;\n //_params\":{\"page\":1,\"count\":25,\"filter\":{},\"sorting\":{},\"group\":{}}\n\n if(vm.roleEditAsap){\n vm.tableAsapReportsParams = new NgTableParams({\n page: 1,\n count: 10,\n },{\n getData: function(params) {\n return apiIntegration.getSingularData(asapAdminEndpoint, {page: params.page(),count: params.count(),filter: params.filter(),sorting: params.sorting(), company: vm.company })\n .then(function(response){\n params.total(response.total);\n vm.asapReports = renameKeys(response.data, asapKeysMap);\n //vm.asapReports.map(function(obj){)});\n angular.forEach(vm.asapReports, function(value, key){\n value.dateOfOccurence = new Date(value.dateOfOccurence);\n value.createdAt = new Date(value.createdAt);\n value.updatedAt = new Date(value.updatedAt);\n });\n return vm.asapReports;\n });\n }\n });\n }\n\n if(vm.roleApproveAsap){\n vm.tableAsapApprovalsParams = new NgTableParams({\n page: 1,\n count: 10\n },{\n getData: function(params) {\n return apiIntegration.getSingularData(asapApprovalsEndpoint, {page: params.page(), company: vm.company })\n .then(function(response){\n params.total(response.total);\n vm.asapPendingApprovals = renameKeys(response.data, asapKeysMap);//response.data.map(function(obj){renameKeys(obj, asapKeysMap)});\n angular.forEach(vm.asapPendingApprovals, function(value, key){\n value.asap_form.dateOfOccurence = new Date(value.asap_form.dateOfOccurence);\n value.asap_form.createdAt = new Date(value.asap_form.createdAt);\n value.asap_form.updatedAt = new Date(value.asap_form.updatedAt);\n value.createdAt = new Date(value.createdAt);\n value.updatedAt = new Date(value.updatedAt);\n });\n return vm.asapPendingApprovals;\n });\n }\n });\n }\n\n vm.openASAPView = function(view, form, index, viewFrom){\n if(view == \"selecttypelist\")\n {\n vm.asapActiveTab = 1;\n vm.flightCrewASAPFormData = {};\n vm.showASAPReport=false;\n vm.whichASAPView = 'selecttypelist';\n vm.whichASAPViewFrom = viewFrom;\n }\n if (view=='flightCrew') {\n vm._flightCrewASAPFormData.formType= view;\n vm._flightCrewASAPFormData.formName= \"Flight Crew\";\n vm.flightCrewASAPFormData = angular.copy(vm._flightCrewASAPFormData);\n vm.showASAPReport=true;\n vm.isAsapFormDisabled = false;\n }\n if (view=='mechanic') {\n vm._flightCrewASAPFormData.formType=view;\n vm._flightCrewASAPFormData.formName=\"Mechanic\";\n vm.flightCrewASAPFormData = angular.copy(vm._flightCrewASAPFormData);\n vm.showASAPReport=true;\n vm.isAsapFormDisabled = false;\n }\n if (view=='dispatcher') {\n vm._flightCrewASAPFormData.formType=view;\n vm._flightCrewASAPFormData.formName=\"Dispatcher\";\n vm.flightCrewASAPFormData = angular.copy(vm._flightCrewASAPFormData);\n vm.showASAPReport=true;\n vm.isAsapFormDisabled = false;\n }\n if(view=='show')\n {\n vm.asapActiveTab = 1;\n vm.flightCrewASAPFormData = form;\n vm.flightCrewASAPFormData.formType=form.formType;\n vm.flightCrewASAPFormData.formName=form.formName;\n vm._flightCrewASAPFormData.formType=form.formType;\n vm._flightCrewASAPFormData.formName=form.formName;\n if(form.formStatus!='DRAFT'){\n vm.isAsapFormDisabled = true;\n //vm.flightCrewASAPFormData.disable()\n }else{\n vm.isAsapFormDisabled = false;\n }\n vm.showASAPReport=true;\n vm.whichASAPViewFrom = viewFrom;\n }\n if(view=='list')\n {\n vm.asapActiveTab = 0;\n vm.flightCrewASAPFormData = {};\n vm.showASAPReport = false;\n vm.whichASAPView = 'list'\n vm.tableAsapReportsParams.reload();\n }\n if(view=='approvalsList')\n {\n vm.asapActiveTab = 2;\n vm.flightCrewASAPFormData = {};\n vm.showASAPReport = false;\n vm.whichASAPView = 'approvalsList'\n }\n if(view=='routingInformation')\n {\n vm.asapActiveTab = 0;\n vm.flightCrewASAPFormData = form;\n vm.tableAsapReportCommentsParams = new NgTableParams({}, { counts: false, dataset: vm.flightCrewASAPFormData.asapFormComments});\n vm.showASAPReport=false;\n vm.whichASAPView = 'routingInformation';\n vm.whichASAPViewFrom = viewFrom;\n }\n if(view==\"print\" || view==\"redacted\" ){\n var formElement = document.getElementById('asap-report');\n\n var opt = {\n //margin:[0.5, 1, 0.5, 1],\n filename: 'asap-form.pdf',\n image: { type: 'jpeg', quality: 0.98 },\n html2canvas: { scale: 2, width: window.innerWidth },\n jsPDF: { unit: 'in', format: 'letter', orientation: 'portrait' }\n };\n\n var elementsToHide = formElement.querySelectorAll('.hide-on-print,.hide-on-redacted');\n for (var i = 0; i < elementsToHide.length; i++) {\n elementsToHide[i].classList.add('html2canvas-hide');\n }\n\n var opt = {\n margin: [15,10,15,10],\n filename: 'form.pdf',\n image: { type: 'jpeg', quality: 0.98 },\n html2canvas: { scale: 1, logging: true, media: 'print' },\n jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }\n };\n\n html2pdf().set(opt).from(formElement).save().then(function(){\n var elementsToHide = formElement.querySelectorAll('.hide-on-print,.hide-on-redacted');\n for (var i = 0; i < elementsToHide.length; i++) {\n elementsToHide[i].classList.remove('html2canvas-hide');\n }\n });\n }\n vm.whichASAPViewFrom = viewFrom;\n };\n\n vm.newASAPReport = function(type){\n vm.showASAPReport=true;\n };\n\n vm.updateSelectedAirspaceOptions = function(option) {\n if (option.selected && vm.flightCrewASAPFormData.selectedASAPAirspaces.indexOf(option.value) === -1) {\n vm.flightCrewASAPFormData.selectedASAPAirspaces.push(option.value);\n } else {\n var index = vm.flightCrewASAPFormData.selectedASAPAirspaces.indexOf(option.value);\n if (index > -1) {\n vm.flightCrewASAPFormData.selectedASAPAirspaces.splice(index, 1);\n }\n }\n };\n\n vm.updateSelectedWeatherElementOptions = function(option) {\n if (option.selected && vm.flightCrewASAPFormData.selectedASAPWeatherElements.indexOf(option.value) === -1 ) {\n vm.flightCrewASAPFormData.selectedASAPWeatherElements.push(option.value);\n } else {\n var index = vm.flightCrewASAPFormData.selectedASAPWeatherElements.indexOf(option.value);\n if (index > -1) {\n vm.flightCrewASAPFormData.selectedASAPWeatherElements.splice(index, 1);\n }\n }\n };\n\n vm.updateSelectedAircraftRoutes = function(index, option) {\n if (option.selected[index] && vm.flightCrewASAPFormData.aircrafts[index].routes.indexOf(option.value) === -1) {\n vm.flightCrewASAPFormData.aircrafts[index].routes.push(option.value);\n } else {\n var pos = vm.flightCrewASAPFormData.aircrafts[index].routes.indexOf(option.value);\n if (index > -1) {\n vm.flightCrewASAPFormData.aircrafts[index].routes.splice(pos, 1);\n }\n }\n };\n\n vm.addASAPAircraft = function(aircraft) {\n vm.flightCrewASAPFormData.aircrafts.push({AircraftType: \"MD-80\", asapRoutes: angular.copy(asapRoutes),routes:[]});\n };\n\n vm.removeASAPAircraft = function(index, aircraft) {\n if (index > -1) {\n vm.flightCrewASAPFormData.aircrafts.splice(index, 1);\n for (var i = 0; i < vm.flightCrewASAPFormData.asapRoutes.length; i++) {\n var hash = vm.flightCrewASAPFormData.asapRoutes[i];\n if (hash.selected && hash.selected[index]) {\n delete hash.selected[index];\n }\n }\n }\n };\n\n vm.saveASAPReport = function(form, state) {\n var baseUri = \"asapAdmin/\";\n form.formStatus = state;\n form.isBeingSubmitted = true;\n if(state == 'CLEAR'){\n vm.flightCrewASAPFormData = angular.copy(vm._flightCrewASAPFormData);\n return;\n }\n if(form.id > 0 && state == 'ERCRec'){\n apiIntegration\n .putData(baseUri+\"updateCorrectiveAction/\"+form.id, form)\n .then(function(response){\n vm.flightCrewASAPFormData = {};\n vm.openASAPView('list');\n })\n } else if (form.id > 0) {\n apiIntegration\n .putData(baseUri+\"update/\"+form.id, form)\n .then(function(response){\n vm.flightCrewASAPFormData = {};\n vm.openASAPView('list');\n })\n } else {\n apiIntegration\n .postData(baseUri+\"store\", form)\n .then(function(response){\n vm.flightCrewASAPFormData = {};\n vm.openASAPView('list');\n })\n }\n };\n\n vm.asapRouteApprovals = function(form) {\n form.formStatus = \"PENDINGAPPROVAL\";\n var baseUri = \"asapAdmin/\";\n apiIntegration\n .getData([baseUri+\"routeApprovals/\"+form.id],{ company: vm.company })\n .then(function(response){\n form.asapFormApprovals = response[0].data.asapFormApprovals;\n vm.tableAsapApprovalsParams.reload();\n vm.tableAsapReportsParams.reload();\n })\n }\n\n vm.asapApproveForm = function(form, action, message, index) {\n var baseUri = \"asapAdmin/\";\n var lastAction = form;\n apiIntegration\n .putData(baseUri+\"approveForm/\"+lastAction.id, {action:action, message:message})\n .then(function(response){\n vm.tableAsapApprovalsParams.reload();\n vm.tableAsapReportsParams.reload();\n })\n }\n\n vm.destroyASAPReport = function(form, index) {\n if (confirm('Are you sure you want to destroy this ASAP Report?')){\n var baseUri = \"asapAdmin/\";\n apiIntegration\n .getData([baseUri+\"destroy/\"+form.id],{ company: vm.company })\n .then(function(response){\n vm.tableAsapReportsParams.data.splice(index, 1);\n vm.tableAsapApprovalsParams.reload();\n //vm.tableAsapReportsParams.reload();\n })\n }\n };\n\n vm.listRejectASAPReport = function(form, action, message, index) {\n var baseUri = \"asapAdmin/\";\n var lastAction = form;\n if(action==\"REVISE\"){\n apiIntegration\n .putData(baseUri+\"adminReject/\"+lastAction.id, {action:action, message:message})\n .then(function(response){\n vm.tableAsapApprovalsParams.reload();\n vm.tableAsapReportsParams.reload();\n })\n }\n };\n\n vm.openAsapViewMessageModal = function(form, action, message, index) {\n var modalInstance = $uibModal.open({\n animation: true,\n templateUrl: 'app/main/modalApprovalFlowActionMessage.html',\n controller: 'ModalApprovalActionMessageController',\n controllerAs: 'modal',\n resolve: {\n form: function() {\n return form;\n },\n action: function() {\n return action;\n },\n message: function() {\n return message;\n }\n }\n });\n\n modalInstance.result.then(function(message) {\n vm.asapApproveForm(form, action, message, index);\n });\n };\n\n vm.openAsapListViewMessageModal = function(form, action, message, index) {\n var modalInstance = $uibModal.open({\n animation: true,\n templateUrl: 'app/main/modalApprovalFlowActionMessage.html',\n controller: 'ModalApprovalActionMessageController',\n controllerAs: 'modal',\n resolve: {\n form: function() {\n return form;\n },\n action: function() {\n return action;\n },\n message: function() {\n return message;\n }\n }\n });\n\n modalInstance.result.then(function(message) {\n vm.listRejectASAPReport(form, action, message, index);\n });\n };\n\n /* ASAP END variables */\n if(SessionService.get('session') && SessionService.get('session').pageTo){\n $scope.active = SessionService.get('session').pageTo;\n }\n if($location.path() != '/flight_times/analyticsExec' && $location.path() != '/flight_times/settings'){\n apiIntegration.getData(endpointsArray, paramsArray).then(function(response)\n {\n // Pos 0 Airports\n // Pos 1 Duties\n // Pos 2 Flights\n // Pos 3 Bulletins\n // Pos 4 Cbies\n // Pos 5 CbiesAdmin\n // Pos 6 CbiesAdminEmployee\n // Pos 7 AsapAdmin\n // Pos 8 AsapApprovals\n vm.disableApply = false;\n // Pos 0 Airports API\n if(angular.isUndefined(response[0].data.length))\n {\n //apiErrorHappened.push(true);\n //errorsDescription += \"\\nNo Airports Available\";\n }\n else { vm.airporstList = angular.copy(response[0].data); }\n // Pos 1 Duties\n if(angular.isUndefined(response[1].data.length))\n {\n //apiErrorHappened.push(true);\n //errorsDescription += \"\\nNo Duties Available\";\n }\n else\n {\n var newDutyList = new Array();\n var fountFA = false;\n angular.forEach(response[1].data, function(value, key)\n {\n var newDuty = new Object();\n switch (value.name)\n {\n case 'Captain': newDuty.order = 1; break;\n case 'First Officer': newDuty.order = 2; break;\n case 'Flight Attendant A': newDuty.order = 3; break;\n case 'Flight Attendant B': newDuty.order = 3; break;\n case 'Flight Attendant C': newDuty.order = 3; break;\n case 'Flight Attendant D': newDuty.order = 3; break;\n case 'Flight Attendant E': newDuty.order = 3; break;\n case 'Flight Attendant F': newDuty.order = 3; break;\n case 'Mechanic': newDuty.order = 4; break;\n case 'Ground Security Coordinator': newDuty.order = 5; break;\n case 'ACM': newDuty.order = 6; break;\n case 'Deadhead': newDuty.order = 7; break;\n }\n if(value.name == \"Flight Attendant A\")\n {\n newDuty.name = \"Senior Flight Attendant\";\n newDutyList.push(newDuty);\n }\n else if(\n value.name == \"Flight Attendant B\" ||\n value.name == \"Flight Attendant C\" ||\n value.name == \"Flight Attendant D\" ||\n value.name == \"Flight Attendant E\" ||\n value.name == \"Flight Attendant F\"\n )\n {\n var found = $.map(newDutyList, function(val)\n {\n if(val.name != 'Flight Attendant' && fountFA == false )\n {\n newDuty.name = \"Flight Attendant\";\n newDutyList.push(newDuty);\n fountFA = true;\n }\n });\n }\n else\n {\n newDuty.name = value.name;\n newDutyList.push(newDuty);\n }\n });\n\n vm.dutysList = angular.copy(newDutyList);\n }\n\n // Pos 2 Flights\n if(angular.isUndefined(response[2].data.length))\n {\n //apiErrorHappened.push(true);\n //errorsDescription += \"\\nNo Flights Available\";\n vm.filterMessage = \"Currently you do not have any flights assigned.\";\n\n // Reset Airports and Duties\n vm.airporstList = [];\n vm.dutysList = [];\n }\n else\n {\n currentFlightItems = response[2].data.length;\n angular.forEach(response[2].data, function(value, key)\n {\n var arrDep = value.departure.split(/[- :]/);\n var dateDep = new Date(arrDep[0], arrDep[1]-1, arrDep[2], arrDep[3], arrDep[4], arrDep[5]);\n value.departure = new Date(dateDep);\n\n var arrArr = value.arrival.split(/[- :]/);\n var dateArr = new Date(arrArr[0], arrArr[1]-1, arrArr[2], arrArr[3], arrArr[4], arrArr[5]);\n value.arrival = new Date(dateArr);\n\n if(value.assignedDuty == \"Flight Attendant A\")\n {\n value.assignedDuty = \"Senior FA\";\n }\n else if(value.assignedDuty && value.assignedDuty.match(\"Flight Attendant\"))\n {\n value.assignedDuty = \"Flight Attendant\";\n }\n });\n vm.flightsList = angular.copy(response[2].data);\n }\n\n // Pos 3 Bulletins\n if(angular.isUndefined(response[3].data.length))\n {\n //apiErrorHappened.push(true);\n //errorsDescription += \"\\nNo Bulletins Available\";\n vm.filterBulletinsMessage = \"No bulletins assigned for the selected period.\";\n }\n else\n {\n vm.totalBulletinsNotRead = 0;\n angular.forEach(response[3].data, function(value, key)\n {\n var arrDueDate = value.dateDue.split(/[- :]/);\n var dateDue = new Date(arrDueDate[0], arrDueDate[1]-1, arrDueDate[2], arrDueDate[3], arrDueDate[4], arrDueDate[5]);\n value.dateDue = new Date(dateDue);\n \n var arrIssueDate = value.issuedOn.split(/[- :]/);\n var issuedOn = new Date(arrIssueDate[0], arrIssueDate[1]-1, arrIssueDate[2], arrIssueDate[3], arrIssueDate[4], arrIssueDate[5]);\n value.issuedOn = new Date(issuedOn);\n\n\n value.issuedByFullName = value.firstName + \" \" + value.lastName;\n value.textStatus = (value.status == 0) ? 'READ (NEW)' : 'READ'; \n vm.issuedByList.push(\n {\n name: value.firstName + \" \" + value.lastName,\n id : value.issuedById\n });\n if(value.status == 0)\n {\n vm.totalBulletinsNotRead ++;\n }\n });\n vm.bulletinsList = angular.copy(response[3].data);\n vm.bulletinsList.sort(function(a,b){return a.status - b.status || a.dateDue -b.dateDue;});\n \n }\n // Pos 4 Cbies\n if(response[4].data.length == 0)\n {\n vm.filterCbieMessage = \"No CB-iE's have been assigned.\";\n } else {\n vm.cbieList;\n angular.forEach(response[4].data, function(value, key)\n {\n if(value.dateDue){\n var arrDueDate = value.dateDue.split(/[- :]/);\n var dateDue = new Date(arrDueDate[0], arrDueDate[1]-1, arrDueDate[2], arrDueDate[3], arrDueDate[4], arrDueDate[5]);\n value.dateDue = new Date(dateDue);\n }\n\n if(value.issuedOn){\n var arrIssueDate = value.issuedOn.split(/[- :]/);\n var issuedOn = new Date(arrIssueDate[0], arrIssueDate[1]-1, arrIssueDate[2], arrIssueDate[3], arrIssueDate[4], arrIssueDate[5]);\n value.issuedOn = new Date(issuedOn);\n }\n\n if(value.updated_at){\n var arrIssueDate = value.updated_at.split(/[- :]/);\n var issuedOn = new Date(arrIssueDate[0], arrIssueDate[1]-1, arrIssueDate[2], arrIssueDate[3], arrIssueDate[4], arrIssueDate[5]);\n value.updated_at = new Date(issuedOn);\n }\n\n if(value.created_at){\n var arrIssueDate = value.created_at.split(/[- :]/);\n var issuedOn = new Date(arrIssueDate[0], arrIssueDate[1]-1, arrIssueDate[2], arrIssueDate[3], arrIssueDate[4], arrIssueDate[5]);\n value.created_at = new Date(issuedOn);\n }\n\n value.issuedByFullName = value.firstName + \" \" + value.lastName;\n value.textStatus = (value.status == 0) ? 'START (NEW)' : 'REVIEW';\n if(value.status == 0)\n {\n vm.totalCBIEPending ++;\n }\n });\n vm.cbieList = angular.copy(response[4].data);\n vm.cbieList.sort(function(a,b){return a.status - b.status || a.dateDue -b.dateDue;});\n // console.log(vm.cbieList);\n }\n\n // Pos 5 CbiesAdmin\n if(vm.roleCBIEAdm){\n if(angular.isUndefined(response[5].data.length))\n {\n\n } else {\n angular.forEach(response[5].data, function(value, key)\n {\n if(value.dateDue){\n var arrDueDate = value.dateDue.split(/[- :]/);\n var dateDue = new Date(arrDueDate[0], arrDueDate[1]-1, arrDueDate[2], arrDueDate[3], arrDueDate[4], arrDueDate[5]);\n value.dateDue = new Date(dateDue);\n }\n\n if(value.issuedOn){\n var arrIssueDate = value.issuedOn.split(/[- :]/);\n var issuedOn = new Date(arrIssueDate[0], arrIssueDate[1]-1, arrIssueDate[2], arrIssueDate[3], arrIssueDate[4], arrIssueDate[5]);\n value.issuedOn = new Date(issuedOn); \n }\n\n value.issuedByFullName = value.firstName + \" \" + value.lastName;\n value.tableTitle = vm.getCBIETableTitle(value);\n\n if(value.status == 1){\n value.status = 'Draft';\n } else if (value.status == 0 && value.assignmentsCount > 0 ){\n value.status = 'Issued';\n } else {\n value.status = 'Need Assignment';\n }\n });\n\n vm.companyCBIEsList = response[5].data;\n vm.adminCbieListTableParams = new NgTableParams({sorting: {\n title: 'asc' \n }}, { dataset: vm.companyCBIEsList});\n addToolTip('ng-table-group-toggle', 'Group Toggle');\n addToolTip('ng-table-group-close', 'Group Close');\n\n }\n\n // Pos 6 Admin Employee\n if(angular.isUndefined(response[6].data.length)){\n\n } else {\n vm.cbieEmployeeList = response[6].data;\n vm.tableEmployeeListParams = new NgTableParams({\n group: {\n positionName: \"desc\",\n departmentName: \"desc\"\n }\n }, { dataset: vm.cbieEmployeeList});\n addToolTip('ng-table-group-toggle', 'Group Toggle');\n addToolTip('ng-table-group-close', 'Group Close');\n }\n\n // Pos 7 AsapAdmin\n // if(angular.isUndefined(response[7].data.total > 0)){\n // } else {\n \n // }\n\n // Pos 8 AsapApprovals\n if(angular.isUndefined(response[7].data.total > 0)){\n } else {\n //vm.whichASAPView = 0;vm.totalASAPPending\n vm.totalASAPPending = response[7].data.total;\n // angular.forEach(response[7].data, function(value, key){\n // vm.totalASAPPending++;\n // });\n // vm.asapPendingApprovals = response[8].data.map(obj => renameKeys(obj, asapKeysMap));\n // angular.forEach(response[7].data, function(value, key){\n // value.dateOfOccurence = new Date(value.dateOfOccurence);\n // value.createdAt = new Date(value.createdAt);\n // value.updatedAt = new Date(value.updatedAt);\n // });\n // vm.tableAsapApprovalsParams = new NgTableParams({},{\n // dataset: vm.asapPendingApprovals\n // });\n }\n\n }\n\n if(apiErrorHappened.length > 0)\n {\n //swal(\"No data found\", errorsDescription, \"error\");\n }\n\n if(SessionService.get('session') && SessionService.get('session').pageTo){\n $scope.active = SessionService.get('session').pageTo;\n // console.log(SessionService.get('session').object);\n if(SessionService.get('session').pageTo == 1 && SessionService.get('session').object){ //Bulletin\n vm.openBulletinDetail(SessionService.get('session').object.bulletinId, SessionService.get('session').object.status);\n } else if (SessionService.get('session').pageTo == 2 && SessionService.get('session').object){ //Cbie\n vm.openCBIEDetail(SessionService.get('session').object);\n // $scope.active = SessionService.get('session').pageTo;\n }\n \n SessionService.unset('session');\n } else {\n // console.log(2);\n // $scope.active = 0;\n }\n \n }, function(error)\n {\n vm.filterMessage = \"There is no data to show.\";\n // console.log(error);\n });\n }\n\n vm.triggerCBIEButton = function(){\n vm.currentCBIE.buttonDisabled = true;\n };\n\n vm.reloadTable = function(){\n vm.tableEmployeeListParams.reload();\n vm.employeesListShow = true;\n vm.employeeCbieListShow = false;\n \n };\n\n vm.addToolTip = function(){\n $timeout(function() { \n addToolTip('ng-table-group-toggle', 'Group Toggle');\n addToolTip('ng-table-group-close', 'Group Close');\n }, 1000);\n };\n\n vm.onPasswordSubmit = function(valid)\n {\n canContinue = true;\n\n //if(typeof vm.current_password == \"undefined\" || vm.current_password == \"\") { canContinue = false;}\n if(typeof vm.new_password == \"undefined\" || vm.new_password == \"\") { canContinue = false;}\n\n if(canContinue)\n {\n vm.submitValue = \"Loading...\";\n\n var endpoint = 'employees/updatePassword';\n var newPasswordParams =\n {\n \"new_password\": vm.new_password,\n \"company\": vm.company\n };\n\n apiIntegration.postData(endpoint, newPasswordParams).then(function(response)\n {\n if(response == '1')\n {\n swal(\"Your password has been updated\", \"\", \"success\");\n $location.path(\"/\"+vm.company);\n vm.submitValue = \"Login\";\n } else {\n swal(\"An error occurred while updating your password, please try again.\", \"\", \"info\");\n vm.submitValue = \"Submit\";\n }\n\n }, function(error)\n {\n swal(\"An error occurred while updating your password, please check try again.\", \"\", \"info\");\n vm.submitValue = \"Submit\";\n $log.log(error);\n });\n\n }\n };\n\n vm.changeFlights = function()\n {\n if(vm.flightSelected == 3)\n {\n vm.showAirports = true;\n vm.showAllFlights = true;\n }\n else if(vm.flightSelected == 'false')\n {\n vm.showAirports = false;\n vm.showAllFlights = true;\n }\n else if(vm.flightSelected == 'true')\n {\n vm.showAirports = false;\n vm.showAllFlights = false;\n }\n else\n {\n vm.showAirports = false;\n vm.showAllFlights = false;\n }\n };\n\n vm.applyFlightFilter = function(closeMenuMobile)\n {\n vm.disableApply = true;\n var flightsParams = { company: vm.company };\n\n if(closeMenuMobile == 1) { vm.activateMenuFlights() }\n\n // Open Time Exclusive\n if(vm.flightSelected == 3)\n {\n currentPage = 1;\n vm.showOpenTime = true;\n vm.filterOpenTimeMessage = \"Loading...\";\n getflightsEndpoint = 'flights/' + moment().format(\"YYYY-MM-DD 00:00:01\") + '/opentime';\n //getflightsEndpoint = 'flights/2016-07-05%2014:00:00/opentime';\n flightsParams = { page: 1, company: vm.company };\n vm.flightsList = false;\n\n apiIntegration.getData([getflightsEndpoint], [flightsParams]).then(function(response)\n {\n if(response[0].data.length == 0)\n {\n vm.filterOpenTimeMessage = \"We did not find a period of at least 24 hours of open time between your flight assignments.\";\n }\n\n if(!angular.isUndefined(response[0].data.length))\n {\n vm.openTimeList = [];\n vm.openTimeList = angular.copy(response[0].data);\n }\n else\n {\n vm.filterOpenTimeMessage = \"We did not find a period of at least 24 hours of open time between your flight assignments.\";\n }\n\n $timeout(function() { vm.busyOpenTime = false; vm.disableApply = false; }, 1000);\n }, function(error)\n {\n vm.openTimeList = [];\n vm.filterOpenTimeMessage = \"An error occured, please refresh your web browser.\";\n vm.disableApply = false;\n $log.log(error);\n });\n }\n else\n {\n vm.showOpenTime = false;\n vm.filterMessage = \"Loading...\";\n\n // Reset current page, and load more status, always must be in 1 at start new filter.\n currentPage = 1;\n vm.busy = false;\n\n var getflightsEndpoint = 'flights/' + moment().format(\"YYYY-MM-DD 00:00:01\") + '/flights';\n //var getflightsEndpoint = 'flights/2016-07-05%2014:00:00/flights';\n\n flightsParams = \n {\n ismyflights: vm.flightSelected,\n airport: vm.airportSelected,\n //duty: vm.dutySelected,\n page: currentPage,\n company: vm.company\n };\n \n var FAFilter = \"\";\n if( vm.dutySelected == \"Senior Flight Attendant\")\n {\n flightsParams.duty = \"Flight Attendant A\";\n }\n else if(vm.dutySelected == \"Flight Attendant\")\n {\n flightsParams.duty = \"Flight Attendant\";\n }\n else\n {\n flightsParams.duty = vm.dutySelected;\n }\n\n apiIntegration.getData([getflightsEndpoint], [flightsParams]).then(function(response)\n {\n if(!angular.isUndefined(response[0].data.length))\n {\n vm.flightsList = [];\n angular.forEach(response[0].data, function(value, key)\n {\n var arrDep = value.departure.split(/[- :]/);\n var dateDep = new Date(arrDep[0], arrDep[1]-1, arrDep[2], arrDep[3], arrDep[4], arrDep[5]);\n value.departure = new Date(dateDep);\n\n var arrArr = value.arrival.split(/[- :]/);\n var dateArr = new Date(arrArr[0], arrArr[1]-1, arrArr[2], arrArr[3], arrArr[4], arrArr[5]);\n value.arrival = new Date(dateArr);\n\n if(vm.flightSelected == true)\n {\n if(value.assignedDuty == \"Flight Attendant A\")\n {\n value.assignedDuty = \"Senior FA\"\n }\n else if(value.assignedDuty.match(\"Flight Attendant\"))\n {\n value.assignedDuty = \"Flight Attendant\";\n }\n }\n }); \n vm.flightsList = angular.copy(response[0].data);\n }\n else\n {\n vm.flightsList = [];\n vm.filterMessage = \"No flights assigned\";\n apiErrorHappened = true;\n vm.disableApply = false;\n }\n\n vm.disableApply = false;\n \n }, function(error)\n {\n vm.flightsList = [];\n vm.filterMessage = \"An error occured, please refresh your web browser.\";\n apiErrorHappened = true;\n vm.disableApply = false;\n $log.log(error);\n });\n }\n };\n\n vm.openDetailPopup = function(flightObj)\n {\n var modalInstance = $uibModal.open({\n animation: true,\n templateUrl: 'app/main/flight-detail.modal.html',\n controller: 'ModalController',\n controllerAs: 'modal',\n size: 'lg',\n resolve:\n {\n flightObj: function () { return flightObj }\n }\n });\n\n modalInstance.result.then(function (selectedItem) {\n //$scope.selected = selectedItem;\n }, function () {\n //$log.log('Modal dismissed at: ' + new Date());\n });\n };\n\n vm.applyBulletinFilter = function(closeMenuMobile)\n {\n //var status = \"\";\n if(closeMenuMobile == 1) { vm.activateMenuBulletins();}\n\n // Does not work on IE\n var status = (vm.statusSelected == 2) ? \"\" : vm.statusSelected;\n\n vm.filterBulletinsMessage = \"Loading...\";\n\n var bulletinsEndpoint = 'bulletins';\n var bulletinsParams = {\n status: status,\n issueBy: vm.issueBySelected,\n dueBy: vm.dueBySelected,\n company: vm.company\n };\n\n apiIntegration.getData([bulletinsEndpoint], [bulletinsParams]).then(function(response)\n {\n vm.totalBulletinsNotRead = 0;\n vm.totalBulletinsNotRead\n if(angular.isUndefined(response[0].data.code))\n {\n angular.forEach(response[0].data, function(value, key)\n {\n if(!angular.isUndefined(response[0].data.length))\n {\n var arrDueDate = value.dateDue.split(/[- :]/);\n var dateDue = new Date(arrDueDate[0], arrDueDate[1]-1, arrDueDate[2], arrDueDate[3], arrDueDate[4], arrDueDate[5]);\n value.dateDue = new Date(dateDue);\n\n value.issuedByFullName = value.firstName + \" \" + value.lastName;\n value.textStatus = (value.status == 0) ? 'VIEW' : 'READ'; \n vm.issuedByList.push(\n {\n name: value.firstName + \" \" + value.lastName,\n id : value.issuedById\n });\n if(value.status == 0)\n {\n vm.totalBulletinsNotRead ++;\n }\n }\n });\n vm.bulletinsList = angular.copy(response[0].data);\n }\n else\n {\n vm.bulletinsList = [];\n vm.filterBulletinsMessage = \"No bulletins assigned for the selected period.\";\n }\n \n }, function(error)\n {\n vm.totalBulletinsNotRead = 0;\n vm.bulletinsList = [];\n vm.filterMessage = \"No bulletins assigned for the selected period.\";\n $log.log(error);\n });\n };\n\n vm.openBulletin = function(target, isWebBrowser)\n {\n if(vm.iOS) { window.open(target); }\n else\n {\n if(isWebBrowser == 1) { window.open(target); }\n else { document.location.href = target; }\n }\n };\n\n vm.openBulletinDetail = function(bulletinId, bulletinStatus)\n {\n vm.showBulletinDetail = true;\n if(bulletinStatus == 1)\n {\n vm.disableCheckbox = true;\n vm.bulletinReadIt = true;\n }\n else\n {\n vm.disableCheckbox = false;\n vm.bulletinReadIt = false;\n var updateBulletinsEndpoint = \"bulletins/\" + bulletinId;\n var updateBulletinParams = { \"status\": 1, company: vm.company };\n\n apiIntegration\n .postData(updateBulletinsEndpoint, updateBulletinParams)\n .then(function(response){\n // If response equals 1, updated successfull\n if(response == 1) {\n }\n else {\n }\n });\n }\n vm.currentBulletinStatus = bulletinStatus;\n vm.currentBulletinID = bulletinId;\n \n vm.bulletinSRC =\n apiUrl +\n 'bulletins/' + \n bulletinId +\n '/pdf?access_token=' +\n SessionService.get('user').sessionToken.split(' ')[1] +\n '&company=' + vm.company;\n };\n\n vm.backToBulletins = function()\n {\n if(false)\n {\n // Bulletin is not read\n swal({\n title: \"REMINDER\",\n text: \"As a company policy, all employees must confirm that they have read all bulletins.\",\n showCancelButton: true,\n confirmButtonColor: \"#0096b8\",\n confirmButtonText: \"I FORGOT THE CHECK\",\n cancelButtonColor: \"#0096b8\",\n cancelButtonText: \"I’LL READ IT LATER\",\n closeOnConfirm: false,\n html: false,\n customClass: 'customModalClass'\n }, function(isConfirm){\n if (isConfirm) { swal.close(); }\n else\n {\n swal.close();\n $timeout(function(){ vm.showBulletinDetail = false; }, 100);\n }\n });\n }\n else\n {\n if(vm.currentBulletinStatus === 0)\n {\n if(false)\n {\n var updateBulletinsEndpoint = \"bulletins/\"+vm.currentBulletinID;\n var updateBulletinParams = { \"status\": 1, company: vm.company };\n\n apiIntegration.postData(updateBulletinsEndpoint, updateBulletinParams).then(function(response)\n {\n // If response equals 1, updated successfull\n if(response == 1)\n {\n swal({\n title: \"Bulletin Read\",\n text: \"\",\n type: \"success\",\n showCancelButton: false,\n confirmButtonColor: \"#0096b8\",\n confirmButtonText: \"Done\",\n closeOnConfirm: 'yes'\n },\n function()\n {\n $timeout(function(){\n vm.applyBulletinFilter();\n vm.showBulletinDetail = false;\n }, 100);\n });\n }\n else\n {\n swal(\"Error updating bulletin status\", error.statusText, \"error\");\n $log.log(error);\n $timeout(function(){\n vm.showBulletinDetail = false;\n }, 100);\n }\n \n }, function(error)\n {\n swal(\"Error updating bulletin status\", error.statusText, \"error\");\n $log.log(error);\n $timeout(function(){\n vm.showBulletinDetail = false;\n }, 100);\n });\n } else {\n $timeout(function(){\n vm.applyBulletinFilter();\n vm.showBulletinDetail = false;\n }, 100);\n }\n }\n else { vm.showBulletinDetail = false; }\n }\n };\n\n vm.applyCBIEFilter = function(closeMenuMobile)\n {\n if(closeMenuMobile == 1) { vm.activateMenuCBIEs();}\n\n var status = vm.statusCbieSelected;\n var issuedBy = vm.issueByCbieSelected;\n var dueBy = vm.dueByCbieSelected;\n\n var filterCbieParams = { \n \"company\": vm.company,\n \"status\": vm.statusCbieSelected,\n \"issuedBy\": vm.issueByCbieSelected,\n \"dueBy\": vm.dueByCbieSelected\n };\n apiIntegration\n .getSingularData(cbiesEndpoint, filterCbieParams)\n .then(function(response){\n vm.totalCBIEPending = 0;\n angular.forEach(response, function(value, key)\n {\n if(value.dateDue){\n var arrDueDate = value.dateDue.split(/[- :]/);\n var dateDue = new Date(arrDueDate[0], arrDueDate[1]-1, arrDueDate[2], arrDueDate[3], arrDueDate[4], arrDueDate[5]);\n value.dateDue = new Date(dateDue);\n }\n \n if(value.issuedOn){\n var arrIssueDate = value.issuedOn.split(/[- :]/);\n var issuedOn = new Date(arrIssueDate[0], arrIssueDate[1]-1, arrIssueDate[2], arrIssueDate[3], arrIssueDate[4], arrIssueDate[5]);\n value.issuedOn = new Date(issuedOn);\n }\n \n if(value.updated_at){\n var arrIssueDate = value.updated_at.split(/[- :]/);\n var issuedOn = new Date(arrIssueDate[0], arrIssueDate[1]-1, arrIssueDate[2], arrIssueDate[3], arrIssueDate[4], arrIssueDate[5]);\n value.updated_at = new Date(issuedOn);\n }\n\n value.issuedByFullName = value.firstName + \" \" + value.lastName;\n value.textStatus = (value.status == 0) ? 'START (NEW)' : 'REVIEW';\n if(value.status == 0)\n {\n vm.totalCBIEPending ++;\n }\n });\n\n vm.cbieList = response;\n vm.cbieList.sort(function(a,b){return a.status - b.status || a.dateDue -b.dateDue;});\n });\n };\n\n vm.applyCBIEAdminFilter = function(closeMenuMobile)\n {\n if(closeMenuMobile == 1) { vm.activateMenuCBIEs();}\n\n var status = vm.statusCbieAdminSelected;\n var issuedBy = vm.issueByCbieAdminSelected;\n var dueBy = vm.dueByCbieAdminSelected;\n\n var filterCbieParams = { \n \"company\": vm.company,\n \"status\": status,\n \"issuedBy\": issuedBy,\n \"dueBy\": dueBy\n };\n apiIntegration\n .getSingularData(cbiesAdminEndpoint, filterCbieParams)\n .then(function(response){\n\n angular.forEach(response, function(value, key)\n {\n if(value.dateDue){\n var arrDueDate = value.dateDue.split(/[- :]/);\n var dateDue = new Date(arrDueDate[0], arrDueDate[1]-1, arrDueDate[2], arrDueDate[3], arrDueDate[4], arrDueDate[5]);\n value.dateDue = new Date(dateDue);\n }\n\n if(value.issuedOn){\n var arrIssueDate = value.issuedOn.split(/[- :]/);\n var issuedOn = new Date(arrIssueDate[0], arrIssueDate[1]-1, arrIssueDate[2], arrIssueDate[3], arrIssueDate[4], arrIssueDate[5]);\n value.issuedOn = new Date(issuedOn); \n }\n value.tableTitle = vm.getCBIETableTitle(value);\n\n value.issuedByFullName = value.firstName + \" \" + value.lastName;\n\n if(value.status == 1){\n value.status = 'Draft';\n } else if (value.status == 0 && value.assignmentsCount > 0 ){\n value.status = 'Issued';\n } else {\n value.status = 'Need Assignment';\n }\n });\n\n vm.companyCBIEsList = response;\n vm.adminCbieListTableParams = new NgTableParams({sorting: {\n title: 'asc' \n }}, { dataset: vm.companyCBIEsList});\n addToolTip('ng-table-group-toggle', 'Group Toggle');\n addToolTip('ng-table-group-close', 'Group Close');\n });\n };\n\n $scope.addUnloadEvent = function(){\n if (window.addEventListener) {\n window.addEventListener(\"beforeunload\", handleUnloadEvent);\n } else {\n //For IE browsers\n window.attachEvent(\"onbeforeunload\", handleUnloadEvent);\n }\n if(vm.currentCBIE.cbie.cbie_media_content_type == 'video/mp4'){\n $timeout(function(){ \n var elem = document.getElementById('referenceMaterial').addEventListener('ended',videoHandler,false);\n }, 200);\n } \n };\n\n $scope.removeUnloadEvent = function(){\n if (window.removeEventListener) {\n window.removeEventListener(\"beforeunload\", handleUnloadEvent);\n } else {\n window.detachEvent(\"onbeforeunload\", handleUnloadEvent);\n }\n if(vm.currentCBIE.cbie.cbie_media_content_type == 'video/mp4'){\n $timeout(function(){ \n var elem = document.getElementById('referenceMaterial').removeEventListener('ended',videoHandler,false);\n }, 200);\n }\n };\n\n function handleUnloadEvent(event) {\n event.returnValue = \"Leaving or moving away from this page will submit your CB-iE, do you wish to submit?\";\n }\n\n function videoHandler(e) {\n console.log(e);\n vm.currentCBIE.buttonDisabled = true;\n }\n\n vm.locationChange = function(){\n return false;\n };\n\n vm.clearLocationChange = function(){\n vm.locationChange = function(){\n return false;\n };\n };\n\n $scope.$on('$locationChangeStart', function(event) {\n if(vm.locationChange(event)){\n }\n });\n\n vm.validateForm = function() { \n if (!vm.cbieForm.eventName || !vm.cbieForm.eventType ) {\n alert(\"Please fill in all required fields!\");\n return false;\n }\n };\n\n vm.setCbieTimeLimit = function(timeRemaining){\n timeRemaining = timeRemaining * 60;\n vm.counter = timeRemaining;\n $timeout(vm.onTimeout,1000);\n };\n\n vm.onTimeout = function(){\n vm.counter--;\n if (vm.counter > 0) {\n vm.timeout = $timeout(vm.onTimeout,1000);\n }\n else {\n // alert(\"Time is up!\");\n swal(\"Time is up!\", \"The running time for this CB-iE has completed, please submit your response.\", \"info\");\n\n vm.currentCBIE.limit_reached = true;\n }\n };\n\n\n /**\n * If another page rendering in progress, waits until the rendering is\n * finised. Otherwise, executes rendering immediately.\n */\n vm.queueRenderPage = function(num){\n if (vm.pageRendering) {\n vm.pageNumPending = num;\n } else {\n vm.renderPage(num);\n }\n };\n\n /**\n * Displays previous page.\n */\n vm.onPrevPage = function(){\n if (vm.pageNum <= 1) {\n return;\n }\n vm.pageNum --;\n vm.queueRenderPage(vm.pageNum);\n };\n /**\n * Displays next page.\n */\n vm.onNextPage = function(){\n if (vm.pageNum >= vm.pdfDoc.numPages) {\n vm.currentCBIE.buttonDisabled = true;\n return;\n }\n vm.pageNum ++;\n if (vm.pageNum == vm.pdfDoc.numPages) {\n vm.currentCBIE.buttonDisabled = true;\n }\n vm.queueRenderPage(vm.pageNum);\n };\n\n /**\n * Get page info from document, resize canvas accordingly, and render page.\n * @param num Page number.\n */\n vm.renderPage = function(num){\n vm.pageRendering = true;\n // Using promise to fetch the page\n vm.pdfDoc.getPage(num).then(function(page) {\n var viewport = page.getViewport({scale: vm.scale});\n vm.canvas.height = viewport.height;\n vm.canvas.width = viewport.width;\n\n // Render PDF page into canvas context\n var renderContext = {\n canvasContext: vm.ctx,\n viewport: viewport\n };\n var renderTask = page.render(renderContext);\n\n // Wait for rendering to finish\n renderTask.promise.then(function() {\n vm.pageRendering = false;\n if (vm.pageNumPending !== null) {\n // New page rendering is pending\n vm.renderPage(vm.pageNumPending);\n vm.pageNumPending = null;\n }\n });\n });\n\n // Update page counters\n vm.pageNum = num;\n };\n\n vm.openCBIEDetail = function(cbie)\n {\n var timeRemaining = cbie.time_limit;\n var message = 'This exam will take approximately ' + cbie.time_limit + ' minutes, please note once the CB-iE starts you will not be able to pause the exam. Are you ready to begin?';\n var showCbieEndpoint = \"cbies/\" + cbie.caId;\n var showCbieParams = { \"company\": vm.company };\n\n if(cbie.start_time != null){\n var t = cbie.start_time.split(/[- :]/);\n var d = new Date(Date.UTC(t[0], t[1]-1, t[2], t[3], t[4], t[5]));\n var d2 = new Date();\n var diff = Math.abs(d2 - d);\n\n var minutes = Math.floor((diff/1000)/60);\n if(minutes < cbie.time_limit){\n timeRemaining = cbie.time_limit - minutes;\n } else {\n message = \"This exam has reached its completion time and a new attempt will be triggered. \" + message;\n showCbieParams.completion_time_reached = true;\n }\n }\n \n if (confirm(message)) {\n apiIntegration\n .getSingularData(showCbieEndpoint, showCbieParams)\n .then(function(response){\n\n if(cbie.status == 1)\n {\n // return alert(\"This CBIE has been completed.\");\n return swal(\"This CBIE has been completed.\", \"\", \"info\");\n }\n else\n { \n vm.disableCheckbox = false;\n vm.bulletinReadIt = false;\n\n vm.currentCBIEStatus = cbie.status;\n vm.currentCBIEID = cbie.cbieId;\n \n shuffleArray(response.cbie.questions);\n var questionsLength = response.cbie.questions.length;\n var questionsConsidered = response.cbie.questions_considered;\n response.cbie.questions.length = questionsLength <= questionsConsidered ? questionsLength : questionsConsidered;\n angular.forEach(response.cbie.questions, function (value, key) {\n shuffleArray(value.answers);\n });\n\n vm.currentCBIE = response;\n if(response.cbie.file != \"\"){\n vm.currentCBIE.readyState = 'start';\n if(vm.currentCBIE.cbie.cbie_media_content_type == 'application/pdf'){\n vm.isPDF = true;\n vm.isDefault = vm.isMP4 = vm.isPPT = false;\n var url = vm.currentCBIE.cbie.file;\n var pdfjsLib = window['pdfjs-dist/build/pdf'];\n // The workerSrc property shall be specified.\n pdfjsLib.GlobalWorkerOptions.workerSrc = '//mozilla.github.io/pdf.js/build/pdf.worker.js';\n\n $timeout(function(){ \n // Asynchronous download of PDF\n vm.pageNum = 1;\n vm.pageRendering = false;\n vm.pdfDoc = null;\n vm.pageNumPending = null;\n vm.scale = 2.5;\n vm.canvas = document.getElementById('the-canvas');\n vm.ctx = vm.canvas.getContext('2d');\n\n pdfjsLib.getDocument(url).promise.then(function(pdfDoc_) {\n vm.pdfDoc = pdfDoc_;\n vm.pageCount = vm.pdfDoc.numPages;\n\n // Initial/first page rendering\n vm.renderPage(vm.pageNum);\n });\n }, 200);\n } else if(vm.currentCBIE.cbie.cbie_media_content_type == 'video/mp4'){\n vm.isMP4 = true;\n vm.isPDF = vm.isDefault = vm.isPPT = false;\n } else if(vm.currentCBIE.cbie.cbie_media_content_type == 'application/vnd.ms-powerpoint'){\n vm.isPPT = true;\n vm.isPDF = vm.isDefault = vm.isMP4 = false;\n // vm.currentCBIE.cbie.file = 'https://view.officeapps.live.com/op/embed.aspx?src=' + vm.currentCBIE.cbie.file;\n } else{\n vm.isDefault = true;\n vm.isPDF = vm.isPPT = vm.isMP4 = false;\n }\n } else {\n vm.currentCBIE.readyState = 'exam';\n }\n\n vm.currentCBIE.limit_reached = false;\n vm.setCbieTimeLimit(timeRemaining);\n\n vm.showCBIEDetail = true;\n\n $scope.addUnloadEvent();\n vm.locationChange = function(event){\n var answer = confirm(\"Leaving this page will submit your CB-iE, are you sure you want to leave this page?\");\n if (answer) {\n event.preventDefault();\n vm.responseSubmit(vm.currentCBIE, false);\n } else {\n event.preventDefault();\n }\n };\n }\n });\n }\n\n };\n\n vm.getCBIEDetail = function(id){\n vm.currentCBIE = $filter('filter')(vm.cbieList, {cbieId: id}, true)[0];\n };\n\n vm.backToCBIEs = function(trigger)\n {\n if(vm.currentCBIE.status == 0 && trigger){\n var answer = confirm('Leaving or moving away from this page will submit your CB-iE, do you wish to submit?');\n if (answer) {\n vm.responseSubmit(vm.currentCBIE);\n return;\n }else{\n console.log('no action');\n }\n } else {\n if(false)\n {\n // Bulletin is not read\n swal({\n title: \"REMINDER\",\n text: \"As a company policy, all employees must confirm that they have read all bulletins.\",\n showCancelButton: true,\n confirmButtonColor: \"#0096b8\",\n confirmButtonText: \"I FORGOT THE CHECK\",\n cancelButtonColor: \"#0096b8\",\n cancelButtonText: \"I’LL READ IT LATER\",\n closeOnConfirm: false,\n html: false,\n customClass: 'customModalClass'\n }, function(isConfirm){\n if (isConfirm) { swal.close(); }\n else\n {\n swal.close();\n $timeout(function(){ vm.showBulletinDetail = false; }, 100);\n }\n });\n }\n else\n {\n if(vm.currentCBIEStatus == 0)\n {\n if(false)\n {\n var updateBulletinsEndpoint = \"bulletins/\"+vm.currentBulletinID;\n var updateBulletinParams = { \"status\": 1, company: vm.company };\n\n apiIntegration.postData(updateCBIEEndpoint, updateCBIEParams).then(function(response)\n {\n // If response equals 1, updated successfull\n if(response == 1)\n {\n swal({\n title: \"Bulletin Read\",\n text: \"\",\n type: \"success\",\n showCancelButton: false,\n confirmButtonColor: \"#0096b8\",\n confirmButtonText: \"Done\",\n closeOnConfirm: 'yes'\n },\n function()\n {\n $timeout(function(){\n vm.applyBulletinFilter();\n vm.showBulletinDetail = false;\n }, 100);\n });\n }\n else\n {\n swal(\"Error updating bulletin status\", error.statusText, \"error\");\n $log.log(error);\n $timeout(function(){\n vm.showBulletinDetail = false;\n }, 100);\n }\n \n }, function(error)\n {\n swal(\"Error updating bulletin status\", error.statusText, \"error\");\n $log.log(error);\n $timeout(function(){\n vm.showCBIEDetail = false;\n }, 100);\n });\n } else {\n $timeout(function(){\n vm.applyCBIEFilter();\n vm.showCBIEDetail = false;\n }, 100);\n }\n }\n else { \n vm.showCBIEDetail = false;\n }\n }\n }\n };\n\n vm.responseSubmit = function(cbieAssignment, validate){\n validate = typeof validate != 'undefined' ? validate : true;\n // console.log(cbieAssignment);\n cbieAssignment = vm.currentCBIE;\n var count = 0;\n \n if(validate){\n angular.forEach(cbieAssignment.cbie.questions, function(question, key){\n for (var i = 0, len = question.answers.length; i < len; i++) {\n if (question.answers[i].markedAsCorrect) {\n question.isAnswered = 1;\n count += 1; \n break;\n } else {\n question.isAnswered = 0;\n }\n }\n });\n\n if(cbieAssignment.cbie.questions.length != count){\n return;\n }\n }\n\n var updateCbieEndpoint = \"cbies/responses/\" + cbieAssignment.id;\n cbieAssignment.company = vm.company;\n var responseCbieParams = { \"company\": vm.company, \"questions\": cbieAssignment.cbie.questions };\n apiIntegration\n .postData(updateCbieEndpoint, responseCbieParams)\n .then(function(response){\n // console.log(response);\n vm.clearLocationChange();\n $scope.removeUnloadEvent();\n $timeout.cancel(vm.timeout);\n vm.editCBIE = $filter('filter')(vm.cbieList, {caId: response.id}, true)[0];\n var cbie = vm.cbieList.find(function(v) {\n return v.caId == response.id;\n });\n cbie.status = response.status;\n cbie.score = response.score;\n if(response.attempt_failed == true){\n swal(\"CB-iE Submission Rejected\", \"Your score did not meet the CB-iE requirements for an acceptable score.\", \"error\");\n // alert(\"Your submission has been rejected, your score did not meet the requirements to pass.\");\n }\n vm.backToCBIEs(false);\n });\n };\n\n vm.reloadCBIEAdminList = function(callback){\n apiIntegration\n .getSingularData(cbiesAdminEndpoint, cbiesAdminParams)\n .then(function(response){\n angular.forEach(response, function(value, key)\n {\n if(value.dateDue){\n var arrDueDate = value.dateDue.split(/[- :]/);\n var dateDue = new Date(arrDueDate[0], arrDueDate[1]-1, arrDueDate[2], arrDueDate[3], arrDueDate[4], arrDueDate[5]);\n value.dateDue = new Date(dateDue);\n }\n\n if(value.issuedOn){\n var arrIssueDate = value.issuedOn.split(/[- :]/);\n var issuedOn = new Date(arrIssueDate[0], arrIssueDate[1]-1, arrIssueDate[2], arrIssueDate[3], arrIssueDate[4], arrIssueDate[5]);\n value.issuedOn = new Date(issuedOn); \n }\n value.tableTitle = vm.getCBIETableTitle(value);\n\n value.issuedByFullName = value.firstName + \" \" + value.lastName;\n\n\n if(value.status == 1){\n value.status = 'Draft';\n } else if (value.status == 0 && value.assignmentsCount > 0 ){\n value.status = 'Issued';\n } else {\n value.status = 'Need Assignment';\n }\n });\n\n vm.companyCBIEsList = response;\n vm.adminCbieListTableParams = new NgTableParams({\n sorting: { title: \"asc\" } \n }, { dataset: vm.companyCBIEsList});\n if(callback != undefined){\n callback();\n }\n addToolTip('ng-table-group-toggle', 'Group Toggle');\n addToolTip('ng-table-group-close', 'Group Close');\n });\n };\n\n vm.openCBIEView = function(view, cbieId, index)\n {\n if(view == 'new'){\n var createCbieEndpoint = \"cbiesAdmin/create\";\n vm.createCBIEValue = \"Loading...\";\n vm.newCBIE.company = vm.company;\n if(cbieId == undefined){\n vm.newCBIE.is_draft = 1;\n apiIntegration\n .postData(createCbieEndpoint, vm.newCBIE)\n .then(function(response){\n vm.newCBIE = response;\n if (vm.newCBIE.certificate_enabled) {\n vm.newCBIE.certificate_enabled = vm.newCBIE.certificate_enabled == 1 ? true : false;\n }\n vm.createCBIEValue = \"Create\";\n vm.companyCBIEsList.push(response);\n vm.showNewCBIE = true;\n vm.showCBIES = vm.showEditCBIE = vm.showSubmissionsCBIE = vm.linkToNewCBIE = vm.editAssignmentsCBIE = false;\n });\n } else { \n vm.newCBIE = vm.editCBIE;\n vm.newCBIE.control_id = vm.newCBIE.control_id == 0 ? vm.editCBIE.id : vm.newCBIE.control_id;\n vm.newCBIE.control_version = vm.newCBIE.control_version + 1;\n vm.newCBIE.add_images = 1;\n vm.newCBIE.company = vm.company;\n vm.newCBIE.is_draft = 1;\n vm.newCBIE.status = 1;\n apiIntegration\n .postData(createCbieEndpoint, vm.newCBIE)\n .then(function(response){\n response.status = response.is_draft == 0 ? 0 : 1;\n vm.newCBIE = response;\n vm.createCBIEValue = \"Create\";\n vm.companyCBIEsList.push(response);\n vm.adminCbieListTableParams = new NgTableParams({}, { dataset: vm.companyCBIEsList});\n vm.showNewCBIE = true;\n vm.showCBIES = vm.showEditCBIE = vm.showSubmissionsCBIE = vm.linkToNewCBIE = vm.editAssignmentsCBIE = vm.previewCBIE = false;\n });\n }\n } else if(view == 'show'){\n vm.reloadCBIEAdminList(function(){\n vm.showCBIES = vm.linkToNewCBIE = true;\n vm.showNewCBIE = vm.showEditCBIE = vm.showSubmissionsCBIE = vm.editAssignmentsCBIE = vm.previewCBIE = false;\n });\n }else if(view == 'edit'){\n vm.editCBIEDetail(cbieId, index, function(){\n vm.showEditCBIE = true;\n vm.linkToNewCBIE = false;\n vm.showNewCBIE = vm.showCBIES = vm.showSubmissionsCBIE = vm.linkToNewCBIE = vm.editAssignmentsCBIE = vm.previewCBIE = false;\n });\n \n }else if(view == 'showSubmission'){\n vm.showSubmissionsCBIE = true;\n vm.showNewCBIE = vm.showEditCBIE = vm.showCBIES = vm.linkToNewCBIE = vm.editAssignmentsCBIE = vm.previewCBIE = false;\n vm.showSubmissionCBIE(cbieId);\n }else if(view == 'editAssignment'){\n vm.editAssignmentCBIE(cbieId);\n vm.editAssignmentsCBIE = true;\n vm.showNewCBIE = vm.showEditCBIE = vm.showCBIES = vm.linkToNewCBIE = vm.showSubmissionsCBIE = vm.previewCBIE = false;\n }else if(view == 'preview'){\n vm.currentCBIE.cbie = vm.editCBIE = $filter('filter')(vm.companyCBIEsList, {cbieId: cbieId}, true)[0];\n vm.previewCBIE = !vm.previewCBIE;\n vm.showEditCBIE = !vm.showEditCBIE;\n vm.showNewCBIE = vm.showCBIES = vm.linkToNewCBIE = vm.showSubmissionsCBIE = vm.editAssignmentsCBIE = false;\n }else if(view == 'print'){\n var cbie = $filter('filter')(vm.companyCBIEsList, {cbieId: cbieId}, true)[0];\n var prtContent = document.getElementById(\"printContent\");\n var WinPrint = window.open('', '', 'left=0,top=0,width=800,height=900,toolbar=0,scrollbars=0,status=0');\n \n var stylesheetApp = \"\";\n var stylesheetVendor = \"\";\n var stylesheets = document.head.getElementsByTagName('link');\n for (var i = stylesheets.length - 1; i >= 0; i--) {\n if(stylesheets[i].outerHTML.search('app') > 0){\n stylesheetApp = stylesheets[i].href;\n } else if(stylesheets[i].outerHTML.search('vendor') > 0){\n stylesheetVendor = stylesheets[i].href;\n }\n }\n\n var pageCSS = \"\";\n WinPrint.document.write('' + cbie.title + '');\n WinPrint.document.write('');\n WinPrint.document.write('');\n WinPrint.document.write(pageCSS);\n WinPrint.document.write('
');\n WinPrint.document.write(prtContent.innerHTML);\n WinPrint.document.write('
');\n WinPrint.document.close(); // necessary for IE >= 10\n setTimeout(function () {\n WinPrint.focus(); // necessary for IE >= 10*/\n WinPrint.print();\n WinPrint.close();\n }, 1000);\n }else if(view == 'employeeCbie'){\n vm.employeeCBIE = !vm.employeeCBIE;\n if(index == 0){\n vm.previewCBIE = !vm.previewCBIE;\n vm.showSubmissionsCBIE = !vm.showSubmissionsCBIE;\n vm.showNewCBIE = vm.showCBIES = vm.linkToNewCBIE = vm.showEditCBIE = vm.editAssignmentsCBIE = false;\n } else {\n var showCbieEndpoint = \"cbies/\" + cbieId;\n var showCbieParams = { \"company\": vm.company };\n apiIntegration\n .getSingularData(showCbieEndpoint, showCbieParams)\n .then(function(response){\n vm.disableCheckbox = true;\n vm.bulletinReadIt = true;\n vm.currentCBIE = response;\n\n vm.previewCBIE = !vm.previewCBIE;\n vm.showSubmissionsCBIE = !vm.showSubmissionsCBIE;\n vm.showNewCBIE = vm.showCBIES = vm.linkToNewCBIE = vm.showEditCBIE = vm.editAssignmentsCBIE = false;\n });\n }\n } else if(view == 'employeeList'){\n vm.addToolTip();\n vm.employeesListShow = true;\n vm.employeeCbieListShow = false;\n } else if(view == 'employeeCbieList'){\n var showCbieEndpoint = \"cbiesAdmin/employee/\" + cbieId.employee_id;\n var showCbieParams = { \"company\": vm.company };\n vm.currentEmployee = cbieId;\n apiIntegration\n .getSingularData(showCbieEndpoint, showCbieParams)\n .then(function(response){\n angular.forEach(response, function(value, key)\n {\n var arrDueDate = value.cbie.due_date ? value.cbie.due_date.split(/[- :]/) : null;\n if(arrDueDate != null){\n var dateDue = new Date(arrDueDate[0], arrDueDate[1]-1, arrDueDate[2], arrDueDate[3], arrDueDate[4], arrDueDate[5]);\n value.cbie.dateDue = new Date(dateDue); \n }\n \n var arrIssueDate = value.cbie.issued_on ? value.cbie.issued_on.split(/[- :]/) : null;\n if(arrIssueDate != null){\n var issuedOn = new Date(arrIssueDate[0], arrIssueDate[1]-1, arrIssueDate[2], arrIssueDate[3], arrIssueDate[4], arrIssueDate[5]);\n value.cbie.issuedOn = value.cbie.updated_at = new Date(issuedOn); \n }\n\n if(value.updated_at != value.created_at){\n var arrIssueDate = value.updated_at.split(/[- :]/);\n var issuedOn = new Date(arrIssueDate[0], arrIssueDate[1]-1, arrIssueDate[2], arrIssueDate[3], arrIssueDate[4], arrIssueDate[5]);\n value.completed = new Date(issuedOn);\n }\n\n if(value.cbie.created_at){\n var arrIssueDate = value.created_at.split(/[- :]/);\n var issuedOn = new Date(arrIssueDate[0], arrIssueDate[1]-1, arrIssueDate[2], arrIssueDate[3], arrIssueDate[4], arrIssueDate[5]);\n value.cbie.created_at = new Date(issuedOn);\n }\n\n\n if(value.status == 1 && value.score < value.cbie.passing_score){\n value.status = 'Failed';\n value.status_color = 'text-red';\n }else if(value.status == 1 && value.score >= value.cbie.passing_score){\n value.status = 'Passed';\n value.status_color = 'text-green';\n } else {\n value.status = 'Pending';\n value.status_color = 'text-yellow';\n }\n });\n vm.currentEmployee.assignments = response;\n vm.tableParams = new NgTableParams({}, { dataset: response});\n addToolTip('ng-table-group-toggle', 'Group Toggle');\n addToolTip('ng-table-group-close', 'Group Close');\n vm.employeeCbieListShow = true;\n vm.employeesListShow = false;\n });\n } else if(view == 'printCert'){\n var cbie = cbieId;\n if(vm.roleCBIEAdm && (cbie.firstName == undefined || cbie.firstName == \"\" )){\n cbie.cbie.firstName = cbie.firstName;\n cbie.cbie.lastName = cbie.lastName;\n cbie = cbie.cbie;\n var instructor = $filter('filter')(vm.cbieEmployeeList, {employee_id: cbie.instructor_id}, true)[0];\n cbie.insFirstName = instructor.firstName;\n cbie.insLastName = instructor.lastName;\n cbie.positionName = instructor.positionName;\n }\n\n if(!cbie.firstName){\n cbie.firstName = vm.currentEmployee.firstName;\n cbie.lastName = vm.currentEmployee.lastName;\n }\n\n vm.printCert(cbie, index);\n } else if(view == 'downloadExport'){\n var showCbieEndpoint = \"cbiesAdmin/employee/export/\" + cbieId.employee_id;\n var showCbieParams = { \"company\": vm.company };\n apiIntegration\n .getSingularData(showCbieEndpoint, showCbieParams)\n .then(function(response){\n var file = new Blob([response], { type: 'text/csv' });\n var seconds = new Date().getTime() / 1000;\n var fileName = \"employeeStatistics\" + parseInt(seconds) + \".csv\";\n if (navigator.appVersion.toString().indexOf('.NET') > 0){\n window.navigator.msSaveBlob(file, filename);\n } else {\n var fileURL = window.URL.createObjectURL(file);\n var a = document.createElement(\"a\");\n document.body.appendChild(a);\n a.style = \"display: none\";\n a.href = fileURL;\n a.download = fileName;\n a.click();\n }\n });\n }\n };\n\n vm.printCert = function(cbie, index){\n var base64String = \"data:image/png;base64,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\";\n var fadedLogo = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgwAAADmCAYAAAC5xt3CAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGxmlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0MzYwLCAyMDIwLzAyLzEzLTAxOjA3OjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMSAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMTgtMTAtMjJUMTg6NDc6NDktMDQ6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTA2LTE2VDE0OjUxOjA5LTA0OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTA2LTE2VDE0OjUxOjA5LTA0OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmUxZTMyMzczLTY1NTktNDgwNy04YTAxLWY5ODE4M2U4MjdlYiIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjY4N2ZlZDBiLTQzYTYtMDU0ZS05Y2RhLWJhMjZiZTdkMDMwNyIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjlkMjc1NGNlLTZhOWEtNGZiOS04MTlkLWI0OWFiMTU0Mzc2OCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWQyNzU0Y2UtNmE5YS00ZmI5LTgxOWQtYjQ5YWIxNTQzNzY4IiBzdEV2dDp3aGVuPSIyMDE4LTEwLTIyVDE4OjQ3OjQ5LTA0OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMSAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OWM2M2M4MTgtODNiOS00Y2VhLTgzNTMtOGE5NzM3YTYwMTRkIiBzdEV2dDp3aGVuPSIyMDIwLTA2LTE2VDE0OjUwOjUzLTA0OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZTFlMzIzNzMtNjU1OS00ODA3LThhMDEtZjk4MTgzZTgyN2ViIiBzdEV2dDp3aGVuPSIyMDIwLTA2LTE2VDE0OjUxOjA5LTA0OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4v4xLN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\";\n var doc = new jsPDF('landscape');\n\n doc.addFont('PinyonScript-Regular.ttf', 'PinyonScript', 'normal');\n doc.addFont('Teko-SemiBold.ttf', 'TekoSemiBold', 'normal');\n doc.addFont('Rajdhani-Light.ttf', 'RajdhaniLight', 'normal');\n // doc.addFont('Rajdhani-SemiBold.tff', 'RajdhaniBold', 'normal');\n doc.addFont('impact.ttf', 'impact', 'normal');\n \n doc.setFillColor(34,91,170);\n doc.rect(5, 5, 286, 200, 'F');\n doc.setFillColor(116,192,68);\n doc.rect(7, 7, 282, 196, 'F');\n doc.setFillColor(255,255,255);\n doc.rect(9, 9, 278, 192, 'F');\n\n doc.addImage(fadedLogo, 'PNG', 100, 150, 110, 40);\n doc.setFillColor(238,238,238);\n // doc.rect(30, 130, 235, 40, 'F');\n\n doc.setFontSize(34);\n doc.setFont('impact');\n doc.setFontType('normal');\n doc.myText(\"Training Completion Certificate\",{align: \"center\"},0,24);\n doc.setFontSize(13);\n doc.setFont('RajdhaniLight');\n doc.setFontType('normal');\n doc.myText(\"Presented To:\",{align: \"center\"},0,37);\n\n // doc.setFillColor(238,238,238)\n // doc.rect(90, 40, 120, 15, 'F')\n doc.setFontSize(40);\n doc.setFont('PinyonScript');\n doc.setFontType('normal');\n var fullName = cbie.firstName + \" \" + cbie.lastName;\n doc.myText(fullName, {align: \"center\"},0,51);\n \n doc.setFontSize(14);\n doc.setFont('TekoSemiBold');\n doc.setFontType('normal');\n doc.myText(\"FOR SATISFACTORY COMPLETION OF THE PRESCRIBED COURSE\",{align: \"center\"},0,61);\n doc.myText(\"OF INSTRUCTION ON\",{align: \"center\"},0,67);\n\n doc.setFont('impact');\n if(cbie.title.length < 40){\n doc.setFontSize(40);\n doc.setFontType('normal');\n doc.setFillColor(238,238,238);\n doc.myText(cbie.title, {align: \"center\"},0,83);\n } else {\n var titleArray = chunkString(cbie.title,40);\n if(titleArray.length >2){\n //Todo: must get smaller\n }else{\n for (var i=0;i= 0; i--) {\n for (var a = response.questions[i].answers.length - 1; a >= 0; a--) {\n response.questions[i].answers[a].is_correct = response.questions[i].answers[a].is_correct == 1 ? true : false;\n }\n }\n\n vm.companyCBIEsList[index] = vm.editCBIE = response;\n callBack();\n // console.log(vm.editCBIE); \n });\n\n };\n\n vm.getDate = function(date){\n var year= date.substring(0,4);\n var month= date.substring(5,7);\n var day= date.substring(9,11);\n return new Date(year, month-1, day);\n }\n\n vm.showSubmissionCBIE = function(cbieId){\n var reviewCbieEndpoint = \"cbiesAdmin/assignments/review/\" + cbieId;\n var cbieParams = { \"company\": vm.company };\n apiIntegration\n .getSingularData(reviewCbieEndpoint, cbieParams)\n .then(function(response){\n for (var i=0; i < response.length; i++) {\n if (response[i].updated_at) {response[i].updated_at = vm.getDate(response[i].updated_at);}\n }\n vm.editCBIE = $filter('filter')(vm.companyCBIEsList, {cbieId: cbieId}, true)[0];\n vm.editCBIE.employeeAssignments = response;\n vm.tableParams = new NgTableParams({}, { dataset: response});\n addToolTip('ng-table-group-toggle', 'Group Toggle');\n addToolTip('ng-table-group-close', 'Group Close');\n // console.log(vm.tableParams.settings().dataset);\n });\n };\n\n vm.editAssignmentCBIE = function(cbieId){\n var assignmentsCbieEndpoint = \"cbiesAdmin/assignments/\" + cbieId;\n var cbieParams = { \"company\": vm.company };\n apiIntegration\n .getSingularData(assignmentsCbieEndpoint, cbieParams)\n .then(function(response){\n vm.editCBIE = $filter('filter')(vm.companyCBIEsList, {cbieId: cbieId}, true)[0];\n vm.editCBIE.employeeAssignments = response;\n console.log(vm.editCBIE);\n apiIntegration\n .getSingularData(\"employees\", cbieParams)\n .then(function(response){\n vm.cbieEmployeeList = response;\n vm.assignedList = [];\n var employee;\n\n angular.forEach(vm.editCBIE.employeeAssignments, function (value, key) { \n employee = vm.cbieEmployeeList.find(function(v) {\n return v.employee_id == value.employee_id;\n });\n if(employee){\n employee.assignmentId = value.id;\n }\n \n });\n vm.tableParams = new NgTableParams({\n group: {\n positionName: \"desc\",\n departmentName: \"desc\"\n }\n }, { dataset: vm.cbieEmployeeList});\n addToolTip('ng-table-group-toggle', 'Group Toggle');\n addToolTip('ng-table-group-close', 'Group Close');\n });\n });\n };\n\n vm.resetCbieEmployeeTable = function(){\n vm.tableParams = new NgTableParams({\n group: {\n positionName: \"desc\",\n departmentName: \"desc\"\n }\n }, { dataset: vm.cbieEmployeeList});\n };\n\n vm.removeCBIEAssignment = function(row, rowForm){\n row.postingInfo = true;\n var deleteAssignmentEndpoint = \"cbiesAdmin/assignments/delete/\" + row.assignmentId;\n var deleteAssignmentParams = { \"company\": vm.company };\n\n apiIntegration\n .getSingularData(deleteAssignmentEndpoint, deleteAssignmentParams)\n .then(function(response){\n var cbie = vm.cbieEmployeeList.find(function(v) {\n return v.employee_id == row.employee_id;\n });\n cbie.assignmentId = row.assignmentId = undefined;\n cbie.postingInfo = row.postingInfo = false;\n vm.resetCbieEmployeeTable();\n });\n };\n\n vm.addCBIEAssignment = function(row, rowForm){\n var addAssignmentEndpoint = \"cbiesAdmin/assignments/create/\" + vm.editCBIE.cbieId;\n var addAssignmentParams = { \"company\": vm.company, \"employee_id\": row.employee_id };\n console.log(rowForm);\n row.postingInfo = true;\n\n apiIntegration\n .postData(addAssignmentEndpoint, addAssignmentParams)\n .then(function(response){\n var cbie = vm.cbieEmployeeList.find(function(v) {\n return v.employee_id == response.employee_id;\n });\n cbie.assignmentId = row.assignmentId = response.id;\n cbie.postingInfo = row.postingInfo = false;\n vm.resetCbieEmployeeTable();\n });\n };\n\n vm.addGroupCBIEAssignment = function(group){\n var addAssignmentEndpoint = \"cbiesAdmin/assignments/createGroup/\" + vm.editCBIE.cbieId;\n var addAssignmentParams = { \"company\": vm.company, \"employee_group\": group.value };\n vm.pendingGrouping = 1;\n \n for(var i=0;i 0){\n return swal(\"Validation.\", \"There \" + (countInError > 1 ? \"are \" : \"is \") + countInError + (countInError > 1 ? \" questions\" : \" question\") + \" with answers that need review.\", \"error\");\n }else{\n apiIntegration\n .postData(updateCbieEndpoint, cbieEdit)\n .then(function(response){\n vm.updateCBIEValue = \"Update\";\n vm.openCBIEView('show');\n });\n }\n\n \n };\n\n vm.cbieDelete = function(row, index){\n if (confirm('Are you sure you want to archive this CB-iE?')) {\n var deleteCbieEndpoint = \"cbiesAdmin/delete/\" + row.cbieId;\n var deleteCbieParams = { \"company\": vm.company };\n apiIntegration\n .getSingularData(deleteCbieEndpoint, deleteCbieParams)\n .then(function(response){\n _.remove(vm.adminCbieListTableParams.settings().dataset, function(item) {\n return row.cbieId === item.cbieId;\n });\n vm.adminCbieListTableParams.reload().then(function(data) {\n if (data.length === 0 && vm.adminCbieListTableParams.total() > 0) {\n vm.adminCbieListTableParams.page(vm.adminCbieListTableParams.page() - 1);\n vm.adminCbieListTableParams.reload();\n }\n });\n });\n }\n \n };\n\n vm.cbiePublish = function(cbie, index){\n if (confirm('Are you sure you want to publish this CB-iE?')) {\n cbie.is_draft = 0;\n cbie.status = 'Need Assignment';\n var cbieEndpoint = \"cbiesAdmin/publish/\" + cbie.cbieId;\n var cbieParams = { \"company\": vm.company };\n apiIntegration\n .getSingularData(cbieEndpoint, cbieParams)\n .then(function(response){\n if(response == false){\n swal(\"CB-iE was not published\", \"Please make sure to flag for each question a correct answer.\", \"error\");\n } else {\n cbie.is_draft = 0;\n cbie.status = 'Need Assignment';\n }\n });\n }\n \n };\n\n vm.cbieReleaseScores = function(cbie){\n if (confirm('Are you sure you want to release the scores for all of the assignments?')) {\n var releaseCbieEndpoint = \"cbiesAdmin/release/\" + cbie.cbieId;\n var releaseCbieParams = { \"company\": vm.company };\n apiIntegration\n .getSingularData(releaseCbieEndpoint, releaseCbieParams)\n .then(function(response){\n if(response.is_scores_released == 1){\n cbie.is_scores_released = 1;\n swal(\"CB-iE scores released.\", \"\", \"success\");\n }else{\n cbie.is_scores_released = 0;\n swal(\"Sorry, were unable to release the CB-iE scores as an Instructor is not assigned.\", \"\", \"error\");\n }\n });\n }\n \n };\n\n vm.loadAnalytics = function(){\n var ctx = document.getElementById('myChart');\n if(ctx){\n vm.ctx = ctx.getContext('2d');\n var endpoint = \"analyticAdmin/getMonthlyDelays\";\n if(vm.delayFrom == undefined){\n vm.delayFrom = new Date();\n vm.delayFrom.setDate(vm.delayFrom.getDate()-90);\n }\n vm.delayTo = vm.delayTo == undefined ? new Date() : vm.delayTo;\n \n var params = { company: vm.company, fromDate: vm.delayFrom, toDate: vm.delayTo };\n apiIntegration\n .getSingularData(endpoint, params)\n .then(function(response){\n if(response.length > 0){\n vm.delayData = response;\n vm.defaultCode = 0;\n vm.defaultCompany = 0;\n vm.delaySelected = vm.delayData[vm.defaultCode];\n vm.companyByCode = vm.delayData[vm.defaultCode].companies;\n vm.companySelected = vm.companyByCode[vm.defaultCompany];\n vm.flightsByCompany = vm.companyByCode[vm.defaultCompany].flights;\n vm.labels = [];\n vm.labelsDesc = {};\n vm.data = [];\n for (var i = vm.delayData.length - 1; i >= 0; i--) {\n vm.labels.push(vm.delayData[i].codeNumeric);\n vm.labelsDesc[Number(response[i].codeNumeric)] = response[i].descriptionLong;\n vm.data.push(vm.delayData[i].codeCount);\n }\n\n vm.myChart = new Chart(vm.ctx, {\n type: 'bar',\n data: {\n labels: vm.labels,\n datasets: [{\n label: 'Monthly Delays (Top 5 Delays)',\n data: vm.data,\n backgroundColor: [\n 'rgba(255, 99, 132, 0.2)',\n 'rgba(54, 162, 235, 0.2)',\n 'rgba(255, 206, 86, 0.2)',\n 'rgba(75, 192, 192, 0.2)',\n 'rgba(153, 102, 255, 0.2)'\n ],\n borderColor: [\n 'rgba(255, 99, 132, 1)',\n 'rgba(54, 162, 235, 1)',\n 'rgba(255, 206, 86, 1)',\n 'rgba(75, 192, 192, 1)',\n 'rgba(153, 102, 255, 1)'\n ],\n borderWidth: 1\n }]\n },\n options: {\n responsive: false,\n \"hover\": {\n \"animationDuration\": 0\n },\n \"animation\": {\n \"duration\": 1,\n \"onComplete\": function() {\n var chartInstance = this.chart,\n ctx = chartInstance.ctx;\n\n ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'bottom';\n\n this.data.datasets.forEach(function(dataset, i) {\n var meta = chartInstance.controller.getDatasetMeta(i);\n meta.data.forEach(function(bar, index) {\n var data = dataset.data[index];\n ctx.fillText(data, bar._model.x, bar._model.y - 10);\n });\n });\n }\n },\n legend: {\n display: false\n },\n onClick: vm.graphClickEvent,\n tooltips: {\n callbacks: {\n title: function(tooltipItems, data) {\n //Return value for title\n return formatLabel('Delay Code: ' + tooltipItems[0].xLabel + ' - ' + vm.labelsDesc[Number(tooltipItems[0].xLabel)], 30);\n },\n label: function(tooltipItem) {\n return \"Count of Occurences: \" + Number(tooltipItem.yLabel);\n }\n }\n },\n scales: {\n xAxes: [{\n scaleLabel: {\n display: true,\n labelString: 'Delay Codes'\n }\n }],\n yAxes: [{\n ticks: {\n beginAtZero: true,\n max: Math.ceil((Math.max.apply(this, vm.data) + 10) / 10) * 10 \n },\n scaleLabel: {\n display: true,\n labelString: 'Delay Code Counts Per Code'\n }\n }]\n }\n }\n });\n document.getElementById(\"myChart\").onclick = function(e) \n {\n var activeElement = vm.myChart.getElementsAtEvent(e);\n if(e.layerY > 843 && e.layerY < 866 && activeElement[0] !== undefined){\n console.log(activeElement[0]._index);\n }\n };\n } else {\n vm.delayData = [];\n }\n \n });\n }\n };\n\n vm.loadMonthlyAircraftUtil = function(){\n var ctxAircraft = document.getElementById('monthlyAircraftUtilChart');\n if(ctxAircraft){\n vm.ctxMonthlyUtilAircraft = ctxAircraft.getContext('2d');\n var endpoint = \"analyticAdmin/getMonthlyAircraftUtil\";\n if(vm.updateAircraftUtilFrom == undefined){\n vm.updateAircraftUtilFrom = new Date();\n vm.updateAircraftUtilFrom.setDate(vm.updateAircraftUtilFrom.getDate()-30);\n }\n console.log(vm.updateAircraftUtilTo);\n vm.updateAircraftUtilTo = vm.updateAircraftUtilTo == undefined ? new Date() : vm.updateAircraftUtilTo;\n console.log(vm.updateAircraftUtilTo);\n var params = { company: vm.company, fromDate: vm.updateAircraftUtilFrom, toDate: vm.updateAircraftUtilTo };\n\n apiIntegration\n .getSingularData(endpoint, params)\n .then(function(response){\n vm.monthlyUtilAircraftData = {\n labels: [\"Aircraft\"],\n datasets: []\n };\n var aircraftData = [];\n vm.aircraftData = [];\n vm.aircraftSum = [];\n\n for (var i = response.length - 1; i >= 0; i--) {\n vm.aircraftData.push(response[i]);\n vm.monthlyUtilAircraftData.datasets.push({\n label: response[i].description + ' | ' + response[i].serialNumber,\n backgroundColor: 'rgba(255, 99, 132, 0.2)',\n data: [response[i].sumTotalHours]\n });\n vm.aircraftSum.push(response[i].sumTotalHours);\n // console.log(vm.aircraftSum);\n }\n\n vm.aircraftSelected = vm.aircraftData[0];\n\n vm.monthlyUtilChartAircraft = new Chart(vm.ctxMonthlyUtilAircraft, {\n type: 'bar',\n data: vm.monthlyUtilAircraftData,\n options: {\n onClick: vm.graphClickEventAircraft,\n responsive: true,\n \"hover\": {\n \"animationDuration\": 0\n },\n \"animation\": {\n \"duration\": 1,\n \"onComplete\": function() {\n var chartInstance = this.chart,\n ctx = chartInstance.ctx;\n\n ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'bottom';\n\n this.data.datasets.forEach(function(dataset, i) {\n var meta = chartInstance.controller.getDatasetMeta(i);\n meta.data.forEach(function(bar, index) {\n ctx.fillText(vm.formatSeconds(dataset.data[index]*60*60), bar._model.x, bar._model.y - 10);\n });\n });\n }\n },\n scales: {\n yAxes: [{\n ticks: {\n beginAtZero: true,\n max: Math.ceil((Math.max.apply(this, vm.aircraftSum) + 10) / 10) * 10 \n },\n scaleLabel: {\n display: true,\n labelString: 'Total Hrs. Count per Aircraft'\n }\n }],\n xAxes: [{\n ticks: {\n display: false\n },\n scaleLabel: {\n display: true,\n labelString: 'Aircraft total Hrs for Selected Period'\n }\n }]\n },\n legend: {\n display: false\n },\n tooltips: {\n callbacks: {\n label: function(tooltipItem) {\n var col = vm.aircraftData.find(function(v) {\n return v.sumTotalHours == tooltipItem.yLabel;\n });\n return col.registration + \": \" + vm.formatSeconds(Number(tooltipItem.yLabel)*60*60);\n }\n }\n }\n }\n });\n\n });\n }\n };\n\n vm.loadMonthlyCrewUtil = function(){\n var ctxCapt = document.getElementById('monthlyUtilChartCapt');\n var ctxFO = document.getElementById('monthlyUtilChartFO');\n var ctxFA = document.getElementById('monthlyUtilChartFA');\n var ctxMech = document.getElementById('monthlyUtilChartMech');\n\n if(ctxCapt && ctxFO && ctxFA && ctxMech){\n vm.ctxMonthlyUtilCapt = ctxCapt.getContext('2d');\n vm.ctxMonthlyUtilFO = ctxFO.getContext('2d');\n vm.ctxMonthlyUtilFA = ctxFA.getContext('2d');\n vm.ctxMonthlyUtilMech = ctxMech.getContext('2d');\n\n var endpoint = \"analyticAdmin/getMonthlyCrewUtil\";\n if(vm.updateCrewUtilFrom == undefined){\n vm.updateCrewUtilFrom = new Date();\n vm.updateCrewUtilFrom.setDate(vm.updateCrewUtilFrom.getDate()-30);\n }\n vm.updateCrewUtilTo = vm.updateCrewUtilTo == undefined ? new Date() : vm.updateCrewUtilTo;\n \n var params = { company: vm.company, fromDate: vm.updateCrewUtilFrom, toDate: vm.updateCrewUtilTo };\n apiIntegration\n .getSingularData(endpoint, params)\n .then(function(response){\n if(response.length > 0){\n vm.monthlyUtilData = response;\n //vm.labelsUtil = [\"Captain\", \"First Officer\", \"Flight Attendent\", \"Mechanic\"];\n vm.monthlyUtilCaptData = {\n labels: [\"Captain\"],\n datasets: []\n };\n vm.monthlyUtilFOData = {\n labels: [\"First Officers\"],\n datasets: []\n };\n vm.monthlyUtilFAData = {\n labels: [\"First Attendants\"],\n datasets: []\n };\n vm.monthlyUtilMechData = {\n labels: [\"Mechanics\"],\n datasets: []\n };\n\n var captainData = [];\n var foData = [];\n var faData = [];\n var mechData = [];\n\n vm.captainData = [];\n vm.foData = [];\n vm.faData = [];\n vm.mechData = [];\n\n vm.captSum = [];\n vm.foSum = [];\n vm.faSum = [];\n vm.mechSum = [];\n\n for (var i = vm.monthlyUtilData.length - 1; i >= 0; i--) {\n if(vm.monthlyUtilData[i].flightDutyName == 'Captain'){\n captainData.push(vm.monthlyUtilData[i]);\n vm.monthlyUtilCaptData.datasets.push({\n label: vm.monthlyUtilData[i].fullName,\n backgroundColor: 'rgba(255, 99, 132, 0.2)',\n data: [vm.monthlyUtilData[i].sumTotalHours]\n });\n vm.captSum.push(vm.monthlyUtilData[i].sumTotalHours);\n } else if (vm.monthlyUtilData[i].flightDutyName == 'First Officer'){\n foData.push(vm.monthlyUtilData[i]);\n vm.monthlyUtilFOData.datasets.push({\n label: vm.monthlyUtilData[i].fullName,\n backgroundColor: 'rgba(54, 162, 235, 0.2)',\n data: [vm.monthlyUtilData[i].sumTotalHours]\n });\n vm.foSum.push(vm.monthlyUtilData[i].sumTotalHours);\n } else if (vm.monthlyUtilData[i].flightDutyName == 'Flight Attendent'){\n faData.push(vm.monthlyUtilData[i]);\n vm.monthlyUtilFAData.datasets.push({\n label: vm.monthlyUtilData[i].fullName,\n backgroundColor: 'rgba(255, 206, 86, 0.2)',\n data: [vm.monthlyUtilData[i].sumTotalHours]\n });\n vm.faSum.push(vm.monthlyUtilData[i].sumTotalHours);\n } else if (vm.monthlyUtilData[i].flightDutyName == 'Mechanic'){\n mechData.push(vm.monthlyUtilData[i]);\n vm.monthlyUtilMechData.datasets.push({\n label: vm.monthlyUtilData[i].fullName,\n backgroundColor: 'rgba(75, 192, 192, 0.2)',\n data: [vm.monthlyUtilData[i].sumTotalHours]\n });\n vm.mechSum.push(vm.monthlyUtilData[i].sumTotalHours);\n }\n }\n\n vm.captSelected = vm.captainData[0];\n vm.foSelected = vm.foData[0];\n vm.faSelected = vm.faData[0];\n vm.mechSelected = vm.mechData[0];\n\n vm.monthlyUtilChartCapt = new Chart(vm.ctxMonthlyUtilCapt, {\n type: 'bar',\n data: vm.monthlyUtilCaptData,\n options: {\n onClick: vm.graphClickEventCapt,\n responsive: true,\n \"hover\": {\n \"animationDuration\": 0\n },\n \"animation\": {\n \"duration\": 1,\n \"onComplete\": function() {\n var chartInstance = this.chart,\n ctx = chartInstance.ctx;\n\n ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'bottom';\n\n this.data.datasets.forEach(function(dataset, i) {\n var meta = chartInstance.controller.getDatasetMeta(i);\n meta.data.forEach(function(bar, index) {\n ctx.fillText(vm.formatSeconds(dataset.data[index]*60*60), bar._model.x, bar._model.y - 10);\n });\n });\n }\n },\n scales: {\n yAxes: [{\n ticks: {\n beginAtZero: true,\n max: Math.ceil((Math.max.apply(this, vm.captSum) + 10) / 10) * 10 \n },\n scaleLabel: {\n display: true,\n labelString: 'Total Hrs. Count per Crew'\n }\n }],\n xAxes: [{\n ticks: {\n display: false\n },\n scaleLabel: {\n display: true,\n labelString: 'Top 10 among Captains in Total Hrs for Selected Period'\n }\n }]\n },\n legend: {\n display: false\n },\n tooltips: {\n callbacks: {\n label: function(tooltipItem) {\n var col = vm.captainData.find(function(v) {\n return v.sumTotalHours == tooltipItem.yLabel;\n });\n return col.fullName + \": \" + vm.formatSeconds(Number(tooltipItem.yLabel)*60*60);\n }\n }\n }\n }\n });\n\n vm.monthlyUtilChartFO = new Chart(vm.ctxMonthlyUtilFO, {\n type: 'bar',\n data: vm.monthlyUtilFOData,\n options: {\n onClick: vm.graphClickEventFO,\n responsive: true,\n \"hover\": {\n \"animationDuration\": 0\n },\n \"animation\": {\n \"duration\": 1,\n \"onComplete\": function() {\n var chartInstance = this.chart,\n ctx = chartInstance.ctx;\n\n ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'bottom';\n\n this.data.datasets.forEach(function(dataset, i) {\n var meta = chartInstance.controller.getDatasetMeta(i);\n meta.data.forEach(function(bar, index) {\n ctx.fillText(vm.formatSeconds(dataset.data[index]*60*60), bar._model.x, bar._model.y - 10);\n });\n });\n }\n },\n scales: {\n yAxes: [{\n ticks: {\n beginAtZero: true,\n max: Math.ceil((Math.max.apply(this, vm.foSum) + 10) / 10) * 10 \n },\n scaleLabel: {\n display: true,\n labelString: 'Total Hrs. Count per Crew'\n }\n }],\n xAxes: [{\n ticks: {\n display: false\n },\n scaleLabel: {\n display: true,\n labelString: 'Top 10 among First Officers in Total Hrs for Selected Period'\n }\n }]\n },\n legend: {\n display: false\n },\n tooltips: {\n callbacks: {\n label: function(tooltipItem) {\n var col = vm.foData.find(function(v) {\n return v.sumTotalHours == tooltipItem.yLabel;\n });\n return col.fullName + \": \" + vm.formatSeconds(Number(tooltipItem.yLabel)*60*60);\n }\n }\n }\n }\n });\n\n vm.monthlyUtilChartFA = new Chart(vm.ctxMonthlyUtilFA, {\n type: 'bar',\n data: vm.monthlyUtilFAData,\n options: {\n onClick: vm.graphClickEventFA,\n responsive: true,\n \"hover\": {\n \"animationDuration\": 0\n },\n \"animation\": {\n \"duration\": 1,\n \"onComplete\": function() {\n var chartInstance = this.chart,\n ctx = chartInstance.ctx;\n\n ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'bottom';\n\n this.data.datasets.forEach(function(dataset, i) {\n var meta = chartInstance.controller.getDatasetMeta(i);\n meta.data.forEach(function(bar, index) {\n ctx.fillText(vm.formatSeconds(dataset.data[index]*60*60), bar._model.x, bar._model.y - 10);\n });\n });\n }\n },\n scales: {\n yAxes: [{\n ticks: {\n beginAtZero: true,\n max: Math.ceil((Math.max.apply(this, vm.faSum) + 10) / 10) * 10 \n },\n scaleLabel: {\n display: true,\n labelString: 'Total Hrs. Count per Crew'\n }\n }],\n xAxes: [{\n ticks: {\n display: false\n },\n scaleLabel: {\n display: true,\n labelString: 'Top 10 among Flight Attendants in Total Hrs for Selected Period'\n }\n }]\n },\n legend: {\n display: false\n },\n tooltips: {\n callbacks: {\n label: function(tooltipItem) {\n var col = vm.faData.find(function(v) {\n return v.sumTotalHours == tooltipItem.yLabel;\n });\n return col.fullName + \": \" + vm.formatSeconds(Number(tooltipItem.yLabel)*60*60);\n }\n }\n }\n }\n });\n\n vm.monthlyUtilChartMech = new Chart(vm.ctxMonthlyUtilMech, {\n type: 'bar',\n data: vm.monthlyUtilMechData,\n options: {\n onClick: vm.graphClickEventMech,\n responsive: true,\n \"hover\": {\n \"animationDuration\": 0\n },\n \"animation\": {\n \"duration\": 1,\n \"onComplete\": function() {\n var chartInstance = this.chart,\n ctx = chartInstance.ctx;\n\n ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'bottom';\n\n this.data.datasets.forEach(function(dataset, i) {\n var meta = chartInstance.controller.getDatasetMeta(i);\n meta.data.forEach(function(bar, index) {\n ctx.fillText(vm.formatSeconds(dataset.data[index]*60*60), bar._model.x, bar._model.y - 10);\n });\n });\n }\n },\n scales: {\n yAxes: [{\n ticks: {\n beginAtZero: true,\n max: Math.ceil((Math.max.apply(this, vm.mechSum) + 10) / 10) * 10 \n },\n scaleLabel: {\n display: true,\n labelString: 'Total Hrs. Count per Crew'\n }\n }],\n xAxes: [{\n ticks: {\n display: false\n },\n scaleLabel: {\n display: true,\n labelString: 'Top 10 among Mechanics in Total Hrs for Selected Period'\n }\n }]\n },\n legend: {\n display: false\n },\n tooltips: {\n callbacks: {\n label: function(tooltipItem) {\n var col = vm.mechData.find(function(v) {\n return v.sumTotalHours == tooltipItem.yLabel;\n });\n return col.fullName + \": \" + vm.formatSeconds(Number(tooltipItem.yLabel)*60*60);\n }\n }\n }\n }\n });\n\n // console.log(captainData);\n // console.log(foData);\n // console.log(faData);\n // console.log(mechData);\n\n for (var i = captainData.length - 1; i >= 0; i--) {\n captainData[i].iSumTotalHours = parseInt(captainData[i].sumTotalHours);\n }\n\n for (var i = foData.length - 1; i >= 0; i--) {\n foData[i].iSumTotalHours = parseInt(captainData[i].sumTotalHours);\n }\n\n for (var i = faData.length - 1; i >= 0; i--) {\n faData[i].iSumTotalHours = parseInt(captainData[i].sumTotalHours);\n }\n\n for (var i = mechData.length - 1; i >= 0; i--) {\n mechData[i].iSumTotalHours = parseInt(captainData[i].sumTotalHours);\n }\n\n vm.captainData = orderBy(captainData , \"iSumTotalHours\", true);\n vm.foData = orderBy(foData , \"iSumTotalHours\", true);\n vm.faData = orderBy(faData , \"iSumTotalHours\", true);\n vm.mechData = orderBy(mechData , \"iSumTotalHours\", true);\n\n // console.log(vm.captainData);\n // console.log(vm.foData);\n // console.log(vm.faData);\n // console.log(vm.mechData);\n\n } else {\n vm.monthlyUtilData = [];\n }\n \n });\n }\n };\n\n $scope.orderByFunction = function(utilData){\n return parseInt(utilData.sumTotalHours);\n };\n\n vm.summaryAnalytics = function(){\n\n };\n\n vm.updateDelayTime = function(delayTime){\n vm.delayFrom = delayTime == 'self' ? vm.delayFrom : new Date();\n vm.delayTo = delayTime == 'self' ? vm.delayTo : new Date();\n\n if(vm.delayFrom > vm.delayTo){\n swal(\"Please select a valid date range.\", errorsDescription, \"error\");\n return;\n }\n var now = new Date();\n var month = now.getMonth();\n switch(delayTime) {\n case 'self':\n break;\n case 'lw':\n vm.delayFrom.setDate(getMonday(vm.delayFrom).getDate()-8);\n vm.delayTo.setDate(getMonday(vm.delayTo).getDate()-2);\n break;\n case 'lm':\n vm.delayFrom = new Date(now.getFullYear() - (now.getMonth() > 0 ? 0 : 1), (now.getMonth() - 1 + 12) % 12, 1);\n vm.delayTo = new Date(now.getFullYear(), now.getMonth(), 0);\n break;\n case 'lq':\n if(month >= 1 && month <= 3){\n vm.delayFrom = new Date(now.getFullYear()-1,9);\n vm.delayTo = new Date(now.getFullYear()-1, 11, 31);\n } else if (month >= 4 && month <= 6) {\n vm.delayFrom = new Date(now.getFullYear(),0);\n vm.delayTo = new Date(now.getFullYear(), 2, 31);\n } else if(month >= 7 && month <= 9){\n vm.delayFrom = new Date(now.getFullYear(),3);\n vm.delayTo = new Date(now.getFullYear(), 5, 31);\n } else {\n vm.delayFrom = new Date(now.getFullYear(),6);\n vm.delayTo = new Date(now.getFullYear(), 8, 31);\n }\n break;\n case 7:\n case 30:\n case 90:\n vm.delayFrom = new Date();\n vm.delayFrom.setDate(vm.delayFrom.getDate()-delayTime);\n vm.delayTo = new Date();\n break;\n default:\n vm.delayFrom = new Date();\n vm.delayFrom.setDate(vm.delayFrom.getDate()-30);\n vm.delayTo = new Date();\n }\n if(vm.myChart){\n vm.delayData = [];\n vm.myChart.destroy();\n } \n vm.loadAnalytics();\n };\n\n vm.updateCrewUtilTime = function(delayTime){\n vm.updateCrewUtilFrom = delayTime == 'self' ? vm.updateCrewUtilFrom : new Date();\n vm.updateCrewUtilTo = delayTime == 'self' ? vm.updateCrewUtilTo : new Date();\n\n if(vm.updateCrewUtilFrom > vm.updateCrewUtilTo){\n swal(\"Please select a valid date range.\", errorsDescription, \"error\");\n return;\n }\n var now = new Date();\n var month = now.getMonth();\n switch(delayTime) {\n case 'self':\n break;\n case 'lw':\n vm.updateCrewUtilFrom.setDate(getMonday(vm.updateCrewUtilFrom).getDate()-8);\n vm.updateCrewUtilTo.setDate(getMonday(vm.updateCrewUtilTo).getDate()-2);\n break;\n case 'lm':\n vm.updateCrewUtilFrom = new Date(now.getFullYear() - (now.getMonth() > 0 ? 0 : 1), (now.getMonth() - 1 + 12) % 12, 1);\n vm.updateCrewUtilTo = new Date(now.getFullYear(), now.getMonth(), 0);\n break;\n case 'lq':\n if(month >= 1 && month <= 3){\n vm.updateCrewUtilFrom = new Date(now.getFullYear()-1,9);\n vm.updateCrewUtilTo = new Date(now.getFullYear()-1, 11, 31);\n } else if (month >= 4 && month <= 6) {\n vm.updateCrewUtilFrom = new Date(now.getFullYear(),0);\n vm.updateCrewUtilTo = new Date(now.getFullYear(), 2, 31);\n } else if(month >= 7 && month <= 9){\n vm.updateCrewUtilFrom = new Date(now.getFullYear(),3);\n vm.updateCrewUtilTo = new Date(now.getFullYear(), 5, 31);\n } else {\n vm.updateCrewUtilFrom = new Date(now.getFullYear(),6);\n vm.updateCrewUtilTo = new Date(now.getFullYear(), 8, 31);\n }\n break;\n case 7:\n case 30:\n case 90:\n vm.updateCrewUtilFrom = new Date();\n vm.updateCrewUtilFrom.setDate(vm.updateCrewUtilFrom.getDate()-delayTime);\n vm.updateCrewUtilTo = new Date();\n break;\n default:\n vm.updateCrewUtilFrom = new Date();\n vm.updateCrewUtilFrom.setDate(vm.updateCrewUtilFrom.getDate()-30);\n vm.updateCrewUtilTo = new Date();\n }\n\n if (vm.monthlyUtilChartCapt) {\n vm.captainData = [];\n vm.monthlyUtilChartCapt.destroy();\n }\n if (vm.monthlyUtilChartFO) {\n vm.foData = [];\n vm.monthlyUtilChartFO.destroy();\n }\n if (vm.monthlyUtilChartFA) {\n vm.faData = [];\n vm.monthlyUtilChartFA.destroy();\n }\n if (vm.monthlyUtilChartMech) {\n vm.mechData = [];\n vm.monthlyUtilChartMech.destroy();\n }\n \n vm.loadMonthlyCrewUtil();\n };\n\n vm.updateAircraftUtilTime = function(delayTime){\n vm.updateAircraftUtilFrom = delayTime == 'self' ? vm.updateAircraftUtilFrom : new Date();\n vm.updateAircraftUtilTo = delayTime == 'self' ? vm.updateAircraftUtilTo : new Date();\n\n if(vm.updateAircraftUtilFrom > vm.updateAircraftUtilTo){\n swal(\"Please select a valid date range.\", errorsDescription, \"error\");\n return;\n }\n var now = new Date();\n var month = now.getMonth();\n switch(delayTime) {\n case 'self':\n break;\n case 'lw':\n vm.updateAircraftUtilFrom.setDate(getMonday(vm.updateAircraftUtilFrom).getDate()-8);\n vm.updateAircraftUtilTo.setDate(getMonday(vm.updateAircraftUtilTo).getDate()-2);\n break;\n case 'lm':\n vm.updateAircraftUtilFrom = new Date(now.getFullYear() - (now.getMonth() > 0 ? 0 : 1), (now.getMonth() - 1 + 12) % 12, 1);\n vm.updateAircraftUtilTo = new Date(now.getFullYear(), now.getMonth(), 0);\n break;\n case 'lq':\n if(month >= 1 && month <= 3){\n vm.updateAircraftUtilFrom = new Date(now.getFullYear()-1,9);\n vm.updateAircraftUtilTo = new Date(now.getFullYear()-1, 11, 31);\n } else if (month >= 4 && month <= 6) {\n vm.updateAircraftUtilFrom = new Date(now.getFullYear(),0);\n vm.updateAircraftUtilTo = new Date(now.getFullYear(), 2, 31);\n } else if(month >= 7 && month <= 9){\n vm.updateAircraftUtilFrom = new Date(now.getFullYear(),3);\n vm.updateAircraftUtilTo = new Date(now.getFullYear(), 5, 31);\n } else {\n vm.updateAircraftUtilFrom = new Date(now.getFullYear(),6);\n vm.updateAircraftUtilTo = new Date(now.getFullYear(), 8, 31);\n }\n break;\n case 7:\n case 30:\n case 90:\n vm.updateAircraftUtilFrom = new Date();\n vm.updateAircraftUtilFrom.setDate(vm.updateAircraftUtilFrom.getDate()-delayTime);\n vm.updateAircraftUtilTo = new Date();\n break;\n default:\n vm.updateAircraftUtilFrom = new Date();\n vm.updateAircraftUtilFrom.setDate(vm.updateAircraftUtilFrom.getDate()-30);\n vm.updateAircraftUtilTo = new Date();\n }\n\n if (vm.monthlyUtilChartAircraft) {\n vm.aircraftData = [];\n vm.monthlyUtilChartAircraft.destroy();\n }\n \n vm.loadMonthlyAircraftUtil();\n };\n\n function getMonday(d) {\n d = new Date(d);\n var day = d.getDay(),\n diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday\n return new Date(d.setDate(diff));\n }\n\n vm.checkIfRead = function() { vm.confirmReadBulletin = vm.bulletinReadIt;};\n vm.logout = function() { $location.path(\"/\"+vm.company+\"/logout\"); };\n vm.settings = function() { $location.path(\"/\"+vm.company+\"/settings\"); };\n vm.cbiesExec = function() { $location.path(\"/\"+vm.company+\"/cbiesExec\"); };\n vm.employeeForms = function() { $location.path(\"/\"+vm.company+\"/employeeForms\"); };\n vm.goFlights = function() { setGoToPage(0); /* FLIGHTS */ };\n vm.goBulletins = function(bulletin) { setGoToPage(1,bulletin); /* Bulletins */ };\n vm.goCbies = function(cbie) { setGoToPage(2,cbie); /* CBIE */ };\n\n\n vm.analyticsExec = function() { $location.path(\"/\"+vm.company+\"/analyticsExec\");};\n\n function setGoToPage(pageTo, object){\n // console.log(object);\n SessionService.set('session', {pageTo:pageTo, object:object});\n $location.path(\"/\"+vm.company+\"/main\");\n }\n\n vm.goBack = function(area) { $window.history.back();};\n vm.goHome = function() { $location.path(\"/\"+vm.company+\"/home\"); };\n vm.loadMore = function()\n {\n vm.busy = true;\n currentPage ++;\n //var getflightsEndpoint = 'flights/2016-07-05%2014:00:00/flights';\n var getflightsEndpoint = 'flights/' + moment().format(\"YYYY-MM-DD 00:00:01\") + '/flights';\n\n // Load More\n // Call Default API for My Flights as default show data when start experience\n\n var newDuty = null;\n\n if(vm.dutySelected == \"Senior Flight Attendant\") { newDuty = \"Flight Attendant A\"; }\n else { newDuty = vm.dutySelected; }\n\n flightsParams = \n {\n ismyflights: vm.flightSelected,\n airport: vm.airportSelected,\n duty: newDuty,\n page: currentPage,\n company: vm.company\n };\n\n if(vm.flightsList.length >= 25)\n {\n apiIntegration.getData([getflightsEndpoint], [flightsParams]).then(function(response)\n {\n if(!angular.isUndefined(response[0].data.length))\n {\n currentFlightItems = response[0].length;\n\n // No more date to load\n if(currentFlightItems < 25) { vm.busy = true; }\n else { vm.busy = false; }\n\n angular.forEach(response[0].data, function(value, key)\n {\n var arrDep = value.departure.split(/[- :]/);\n var dateDep = new Date(arrDep[0], arrDep[1]-1, arrDep[2], arrDep[3], arrDep[4], arrDep[5]);\n value.departure = new Date(dateDep);\n\n var arrArr = value.arrival.split(/[- :]/);\n var dateArr = new Date(arrArr[0], arrArr[1]-1, arrArr[2], arrArr[3], arrArr[4], arrArr[5]);\n value.arrival = new Date(dateArr);\n\n if(vm.flightSelected == 'true')\n {\n if(value.assignedDuty == \"Flight Attendant A\")\n {\n value.valueassignedDuty = \"Senior FA\";\n }\n else if(value.assignedDuty.match(\"Flight Attendant\"))\n {\n value.assignedDuty = \"Flight Attendant\";\n }\n }\n \n });\n vm.flightsList.push.apply(vm.flightsList, response[0].data);\n }\n else\n {\n $log.log(\"There is no data to load more\");\n }\n\n }, function(error)\n {\n vm.flightsList = [];\n vm.filterMessage = \"An error occured, please refresh your web browser.\";\n $log.log(error);\n });\n }\n\n };\n\n vm.loadMoreOpenTime = function()\n {\n //alert(countOpenTime);\n if(countOpenTime === 0) { countOpenTime ++; }\n else\n {\n if(vm.openTimeList.length > 14)\n {\n // Load Mosre Open Time\n vm.busyOpenTime = true;\n currentPage ++;\n\n getflightsEndpoint = 'flights/' + moment().format(\"YYYY-MM-DD 00:00:01\") + '/opentime';\n //getflightsEndpoint = 'flights/2016-07-05%2014:00:00/opentime';\n flightsParams = { page: currentPage, company: vm.company };\n\n apiIntegration.getData([getflightsEndpoint], [flightsParams]).then(function(response)\n {\n if(!angular.isUndefined(response[0].data.length))\n {\n currentFlightItems = response[0].data.length;\n\n // No more date to load\n if(currentFlightItems < 25) { vm.busyOpenTime = true; }\n else { vm.busyOpenTime = false; }\n }\n else\n {\n //$log.log(response);\n }\n\n vm.openTimeList.push.apply(vm.openTimeList, response[0].data);\n\n }, function(error)\n {\n vm.openTimeList = [];\n vm.filterOpenTimeMessage = \"An error occured, please refresh your web browser.\";\n $log.log(error);\n });\n }\n }\n };\n\n vm.formatSeconds = function(secs) {\n var t = new Date(1970,0,1);\n t.setSeconds(secs);\n var s = t.toTimeString().substr(0,5);\n if(secs > 86399)\n s = Math.floor((t - Date.parse(\"1/1/70\")) / 3600000) + s.substr(2);\n return s;\n };\n\n var shuffleArray = function(array) {\n var m = array.length, t, i;\n \n // While there remain elements to shuffle\n while (m) {\n // Pick a remaining element…\n i = Math.floor(Math.random() * m--);\n \n // And swap it with the current element.\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n \n return array;\n };\n\n var addToolTip = function(elementClass, title) {\n var elements = document.getElementsByClassName(elementClass);\n for (var i = 0; i < elements.length; i++) { \n elements[i].title = title;\n elements[i].dataset.toggle = 'tooltip';\n elements[i].dataset.container = 'body';\n elements[i].dataset.placement = 'left';\n }\n };\n\n var renameKeys = function (data, newKeys) {\n if (Array.isArray(data)) {\n return data.map(function (item) {\n return renameKeys(item, newKeys);\n });\n } else if (typeof data === 'object' && data !== null) {\n return Object.keys(data).reduce(function (acc, key) {\n var newKey = newKeys[key] || key;\n if (typeof data[key] === 'object' && data[key] !== null) {\n acc[newKey] = renameKeys(data[key], newKeys);\n } else {\n acc[newKey] = data[key];\n }\n return acc;\n }, {});\n } else {\n return data;\n }\n };\n\n vm.graphClickEvent = function(event, array){\n var col;\n switch(\"bar\") {\n case \"horizontalBar\":\n this.getElementsAtEventForMode(event, \"y\", 1).forEach(function(item) { \n col = item._index ;\n });\n break;\n\n case \"bar\":\n this.getElementsAtEventForMode(event, \"x\", 1).forEach(function(item) { \n col = Number(item._xScale.ticks[item._index]);\n });\n break;\n }\n if(col){\n vm.delaySelected = vm.delayData.find(function(v) {\n return v.codeNumeric == col;\n });\n vm.companyByCode = vm.delaySelected.companies;\n vm.companySelected = vm.delaySelected.companies[vm.defaultCompany];\n vm.flightsByCompany = vm.delaySelected.companies[vm.defaultCompany].flights;\n $scope.$apply();\n } else {\n if(array[0]){\n var activePoints = vm.myChart.getElementsAtEvent(event);\n activePoints[0]._model.label;\n\n vm.delaySelected = vm.delayData.find(function(v) {\n return v.codeNumeric == activePoints[0]._model.label;\n });\n vm.companyByCode = vm.delaySelected.companies;\n vm.companySelected = vm.delaySelected.companies[vm.defaultCompany];\n vm.flightsByCompany = vm.delaySelected.companies[vm.defaultCompany].flights;\n $scope.$apply();\n }\n }\n };\n\n vm.graphClickEventAircraft = function(event, array){\n var col;\n this.getElementsAtEventForMode(event, \"x\", 1).forEach(function(item) { \n col = Number(item._datasetIndex);\n });\n\n if(col != undefined){\n vm.aircraftSelected = vm.aircraftData[col];\n $scope.$apply();\n }\n };\n\n vm.graphClickEventCapt = function(event, array){\n var col;\n this.getElementsAtEventForMode(event, \"x\", 1).forEach(function(item) { \n col = Number(item._datasetIndex);\n });\n\n if(col != undefined){\n vm.captSelected = vm.captainData[col];\n $scope.$apply();\n }\n };\n\n vm.graphClickEventFO = function(event, array){\n var col;\n this.getElementsAtEventForMode(event, \"x\", 1).forEach(function(item) { \n col = Number(item._datasetIndex);\n });\n console.log(col);\n if(col != undefined){\n vm.foSelected = vm.foData[col];\n $scope.$apply();\n }\n };\n\n vm.graphClickEventFA = function(event, array){\n var col;\n this.getElementsAtEventForMode(event, \"x\", 1).forEach(function(item) { \n col = Number(item._datasetIndex);\n });\n\n if(col != undefined){\n vm.faSelected = vm.faData[col];\n $scope.$apply();\n }\n };\n\n vm.graphClickEventMech = function(event, array){\n var col;\n this.getElementsAtEventForMode(event, \"x\", 1).forEach(function(item) { \n col = Number(item._datasetIndex);\n });\n\n if(col != undefined){\n vm.mechSelected = vm.mechData[col];\n $scope.$apply();\n }\n };\n\n vm.changeSelectedCompany = function(customer_id){\n vm.flightsByCompany = vm.companyByCode.find(function(v) {\n return v.customer_id == customer_id;\n }).flights;\n vm.companySelected = vm.companyByCode.find(function(v) {\n return v.customer_id == customer_id;\n });\n //$scope.$apply();\n };\n\n var formatLabel = function(str, maxwidth){\n var sections = [];\n var words = str.split(\" \");\n var temp = \"\";\n\n words.forEach(function(item, index){\n if(temp.length > 0)\n {\n var concat = temp + ' ' + item;\n\n if(concat.length > maxwidth){\n sections.push(temp);\n temp = \"\";\n }\n else{\n if(index == (words.length-1))\n {\n sections.push(concat);\n return;\n }\n else{\n temp = concat;\n return;\n }\n }\n }\n\n if(index == (words.length-1))\n {\n sections.push(item);\n return;\n }\n\n if(item.length < maxwidth) {\n temp = item;\n }\n else {\n sections.push(item);\n }\n\n });\n\n return sections;\n }\n\n\n var params = $location.search();\n if ($location.search().hasOwnProperty('to')) {\n var toRoute = $location.search().to;\n console.log(toRoute);\n if(toRoute == \"employeeForms\"){\n vm.employeeForms();\n }\n $location.search('to', null);\n }\n \n }\n\n function ModalController(apiIntegration, $uibModalInstance, flightObj, $log, $stateParams)\n {\n var vm = this;\n vm.flightDetails = [];\n\n vm.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n vm.company = $stateParams.company;\n vm.customer = null;\n\n // Call API for Flights Details\n var flightsEndpoint = 'flights/'+ flightObj.flightId +'/flightDetails';\n var flightsParams = { company: vm.company };\n var countDH = 0;\n var countACM = 0;\n apiIntegration.getData([flightsEndpoint], [flightsParams]).then(function(response)\n {\n angular.forEach(response[0].data, function(value, key)\n {\n vm.customer = value.customer;\n\n var arrDep = value.departure.split(/[- :]/);\n var dateDep = new Date(arrDep[0], arrDep[1]-1, arrDep[2], arrDep[3], arrDep[4], arrDep[5]);\n value.departure = new Date(dateDep);\n\n var arrArr = value.arrival.split(/[- :]/);\n var dateArr = new Date(arrArr[0], arrArr[1]-1, arrArr[2], arrArr[3], arrArr[4], arrArr[5]);\n value.arrival = new Date(dateArr);\n\n value.count = 0;\n\n switch (value.flightDutyName)\n {\n case 'Captain': value.flightDutyName = \"CAPT\"; value.order = 1; break;\n case 'First Officer': value.flightDutyName = \"F/O\"; value.order = 2; break;\n case 'Flight Attendant A': value.flightDutyName = \"S FA\"; value.order = 3; value.showSeparator = true; break;\n case 'Flight Attendant B': value.flightDutyName = \"FA\"; value.order = 4; break;\n case 'Flight Attendant C': value.flightDutyName = \"FA\"; value.order = 5; break;\n case 'Flight Attendant D': value.flightDutyName = \"FA\"; value.order = 6; break;\n case 'Flight Attendant E': value.flightDutyName = \"FA\"; value.order = 7; break;\n case 'Flight Attendant F': value.flightDutyName = \"FA\"; value.order = 8; break;\n case 'Mechanic': value.flightDutyName = \"MX\"; value.order = 9; value.showSeparator = true; break;\n case 'Ground Security Coordinator': value.flightDutyName = \"GSC\"; value.order = 10; break;\n\n case 'ACM':\n value.flightDutyName = \"ACM\";\n value.order = 11;\n countACM++;\n value.showSeparator = (countACM > 1) ? false : true;\n break;\n\n case 'Deadhead':\n value.flightDutyName = \"DH\";\n value.order = 12;\n countDH++;\n value.showSeparator = (countDH > 1) ? false : true;\n break;\n default: value.flightDutyName = \"To Be Confirmed\"; value.order = 0; break;\n }\n });\n \n vm.flightDetails = angular.copy(response[0].data);\n \n }, function(error)\n {\n swal(\"Error getting flight details\", error.statusText, \"error\");\n $log.log(error);\n });\n }\n\n function ModalApprovalActionMessageController($uibModalInstance, form, action, message,$log, $stateParams) {\n var vm = this;\n if(form.asap_form){\n vm.form = form.asap_form;\n }else{\n vm.form = form\n }\n vm.action = action;\n vm.actionFriendly = action == \"REJECT\" ? \"rejecting\" : \"revising\";\n vm.message = '';\n vm.flightCrewASAPFormApprove={message:''};\n\n vm.saveApproveASAPReport = function() {\n vm.message = vm.flightCrewASAPFormApprove.message\n $uibModalInstance.close(vm.message);\n };\n\n vm.cancel = function() {\n $uibModalInstance.dismiss('cancel');\n };\n }\n})();\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .filter('getDuty', getDuty)\n .filter('trusted', ['$sce', trusted]);\n\n function getDuty() {\n return filterFilter;\n\n ////////////////\n\n function filterFilter(params, $log) {\n $log.log(params);\n var dutyname = \"\";\n\n switch (params)\n {\n case 'Captain': dutyname = \"CAPT\"; break;\n case 'Firts Officer': dutyname = \"F/O\"; break;\n case 'Flight Attendant A': dutyname = \"FA A\"; break;\n case 'Flight Attendant B': dutyname = \"FA B\"; break;\n case 'Flight Attendant C': dutyname = \"FA C\"; break;\n case 'Flight Attendant D': dutyname = \"FA D\"; break;\n case 'Flight Attendant E': dutyname = \"FA E\"; break;\n case 'Flight Attendant F': dutyname = \"FA F\"; break;\n case 'Mechanic': dutyname = \"MX\"; break;\n case 'Ground Security Coordinator': dutyname = \"GSC\"; break;\n case 'ACM': dutyname = \"ACM\"; break;\n case 'Deadhead': dutyname = \"DH\"; break;\n\n } \n \n return dutyname;\n \n }\n }\n\n function trusted($sce)\n {\n return function(url) {\n return $sce.trustAsResourceUrl(url);\n };\n }\n\n})();\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .controller('ResetpasswordController', ResetpasswordController);\n\n ResetpasswordController.$inject = ['$scope', 'apiIntegration', 'SessionService', '$location', '$log', '$http', '$timeout', '$stateParams', 'logoUrl'];\n\n /** @ngInject */\n function ResetpasswordController($scope, apiIntegration, SessionService, $location, $log, $http, $timeout, $stateParams, logoUrl)\n {\n var vm = this;\n vm.company = $stateParams.company;\n vm.hash = $stateParams.hash;\n\n vm.activemsg = false;\n vm.wrongPassword = false;\n vm.confirmPasswordMessage = \"Passwords do not match or empty, min 8 characters\";\n var busy = false;\n\n var resetPasswordEndpoint = \"employees/resetPassword\";\n vm.logoUrl = logoUrl;\n\n vm.activateMenu = function() { vm.navCollapsed = (vm.navCollapsed == true) ? false : true; };\n\n //console.log(vm.hash);\n //console.log(vm.activemsg);\n\n vm.onSubmit = function(valid, dataResetPassword)\n {\n if(!busy)\n {\n busy = true;\n\n //console.log(valid);\n //console.log(dataLogin.email);\n //console.log(valid);\n //console.log(dataResetPassword);\n\n if (!valid)\n {\n vm.wrongPassword = (typeof vm.confirmPassword == \"undefined\") ? true : false;\n busy = false;\n }\n else\n {\n if(dataResetPassword.password == dataResetPassword.confirmPassword)\n {\n vm.confirmPasswordMessage = \"Passwords do not match or empty, min 8 characters\";\n vm.wrongPassword = false;\n\n var resetPasswordParams =\n {\n 'token': vm.hash,\n 'confirmPassword': dataResetPassword.confirmPassword,\n 'company': vm.company\n }\n\n //console.log(\"Before Call\");\n //console.log(resetPasswordEndpoint);\n //console.log(resetPasswordParams);\n\n // Can continue, call API\n apiIntegration.postData(resetPasswordEndpoint, resetPasswordParams).then(function(response)\n {\n //console.log(response);\n if(response == 1)\n {\n swal(\"Your password has been updated\", \"\", \"success\");\n if(!vm.company)\n {\n busy = false;\n $location.path(\"/flight_times\");\n }\n else\n {\n busy = false;\n $location.path(\"/\"+vm.company);\n }\n }\n else\n {\n busy = false;\n swal(\"An error occurred while updating your password, please check it again.\", \"\", \"info\");\n }\n }, function(error)\n {\n //console.log(error);\n busy = false;\n swal(error.data.message, \"\", \"error\");\n });\n }\n else\n {\n vm.confirmPasswordMessage = \"Passwords do not match or empty, please check it\";\n vm.wrongPassword = true;\n busy = false;\n }\n }\n }\n };\n}\n})();\n\n(function() {\n 'use strict';\n angular\n .module('app')\n .config(routerConfig);\n /** @ngInject */\n function routerConfig($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('login', {\n url: '/:company',\n templateUrl: 'app/login/login.html',\n controller: 'LoginController',\n controllerAs: 'login',\n reloadOnSearch: false \n });\n\n $urlRouterProvider.otherwise('/flight_times');\n }\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .controller('LoginController', LoginController);\n\n LoginController.$inject = ['$scope', 'apiIntegration', 'SessionService', '$location', '$log', '$http', '$stateParams', '$timeout', 'logoUrl'];\n\n /* @ngInject */\n function LoginController($scope, apiIntegration, SessionService, $location, $log, $http, $stateParams, $timeout, logoUrl) {\n var vm = this;\n vm.title = 'LoginController';\n vm.navCollapsed = true;\n vm.activemsg = false;\n vm.wrongPassword = false;\n vm.company = $stateParams.company;\n vm.loginValue = \"Login\";\n vm.logoUrl = logoUrl;\n\n if(!vm.company) { $location.path(\"/flight_times\"); }\n\n vm.emailMessage = \"Please fill your username\";\n vm.passwordMessage = \"Password is incorrect or empty\";\n\n var forgotPasswordEndpoint = \"employees/forgotPassword\";\n\n if(SessionService.get(\"user\")) { $location.path(\"/\"+vm.company+\"/main\"); }\n\n var canContinue;\n\n vm.onSubmit = function(valid, dataLogin)\n {\n canContinue = true;\n if(!valid)\n {\n vm.wrongPassword = (typeof vm.password == \"undefined\") ? true : false;\n }\n\n if(typeof dataLogin.email == \"undefined\" || dataLogin.email == \"\") { canContinue = false; }\n if(typeof dataLogin.password == \"undefined\" || dataLogin.password == \"\") { canContinue = false;}\n\n if(canContinue)\n {\n vm.loginValue = \"Loading...\";\n vm.activemsg = false;\n vm.wrongPassword = false;\n\n var loginEndpoint = 'employees/login';\n var loginParams =\n {\n \"employee_id\": dataLogin.email,\n \"password\": dataLogin.password,\n \"company\": vm.company\n };\n\n\n apiIntegration.postData(loginEndpoint, loginParams).then(function(response)\n {\n if(response.code == 3)\n {\n swal('Your account or password is incorrect.', 'If you don\\'t remember your password\\nplease click the \"Forgot password\" link.', \"error\");\n vm.loginValue = \"Login\";\n }\n else if(response.code == 5)\n {\n swal('User not authorized', 'Please contact your supervisor to request access.', \"error\");\n vm.loginValue = \"Login\";\n }\n else\n {\n var user = {\n userId: response.id,\n email: response.email,\n firstName: response.firstName,\n lastName: response.lastName,\n feature: response.feature,\n cbieAccessLevel: response.cbieAccessLevel,\n analyticsAccessLevel: response.analyticsAccessLevel,\n asapEditAccessLevel: response.asapEditAccessLevel,\n asapViewAccessLevel: response.asapViewAccessLevel,\n asapApproveAccessLevel: response.asapApproveAccessLevel,\n sessionToken: response.credentials.token_type + ' ' + response.credentials.access_token\n };\n\n if(angular.isUndefined(vm.remember_me)) { vm.remember_me = false; }\n\n SessionService.set('user', user, vm.remember_me);\n $http.defaults.headers.common['Authorization'] = user.sessionToken;\n $location.path(\"/\"+vm.company+\"/home\");\n // $location.path(\"/\"+vm.company+\"/main\");\n // if([51,52].indexOf(user.cbieAccessLevel) > -1){\n // $location.path(\"/\"+vm.company+\"/analyticsExec\");\n // } else {\n // $location.path(\"/\"+vm.company+\"/main\");\n // }\n $timeout(function(){ vm.loginValue = \"Login\"; }, 1000);\n }\n\n }, function(error)\n {\n swal('Your account or password is incorrect.', 'If you don\\'t remember your password\\nplease click the \"Forgot password\" link. ', \"error\");\n vm.loginValue = \"Login\";\n $log.log(error);\n });\n\n }\n };\n\n vm.activateMenu = function() { vm.navCollapsed = (vm.navCollapsed == true) ? false : true; };\n\n function validateEmail(email) {\n var re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(email);\n }\n\n function validate(email) {\n if (validateEmail(email)) { return true; }\n else { return false; }\n }\n\n vm.sendMailForgotPassword = function(valid, dataLogin)\n {\n if (typeof vm.email == \"undefined\") { vm.activemsg = true; }\n else\n {\n // Call API forgot password\n var forgotPasswordParams =\n {\n 'email': dataLogin.email,\n 'company': vm.company\n }\n\n apiIntegration.postData(forgotPasswordEndpoint, forgotPasswordParams).then(function(response)\n {\n if(response == 1)\n {\n swal(\"A message was sent to your company's email account\", \"Please check your mailbox and follow the instructions to reset your password.\", \"success\");\n }\n else\n {\n swal(\"Please check your username\", response.message, \"info\");\n }\n });\n }\n };\n }\n})();\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .config(routerConfig);\n\n /** @ngInject */\n function routerConfig($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('flightstatus', {\n url: '/:company/flightstatus',\n templateUrl: 'app/flightstatus/flightstatus.html',\n controller: 'FlightStatusController',\n controllerAs: 'flightstatus'\n });\n\n $urlRouterProvider.otherwise('/flight_status');\n }\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .controller('FlightStatusController', FlightStatusController);\n\n FlightStatusController.$inject = ['$scope', 'apiIntegration', 'SessionService', '$location', '$log', '$http', '$stateParams', '$timeout', 'logoUrl'];\n\n /* @ngInject */\n function FlightStatusController($scope, apiIntegration, SessionService, $location, $log, $http, $stateParams, $timeout, logoUrl) {\n var vm = this;\n vm.title = 'FlightStatusController';\n vm.showFlights = false;\n vm.showFlightsList = false;\n vm.company = $stateParams.company;\n vm.searchButtonText = 'Search';\n vm.dateFormat = \"dddd, MMM D, YYYY\";\n vm.dateParamFormat = \"YYYY-MM-DD\";\n vm.flights = [];\n vm.currentFlight = null;\n vm.dates = [\n { id: -1, label: moment().subtract(1, 'd').format(vm.dateFormat) },\n { id: 0, label: moment().format(vm.dateFormat) },\n { id: 1, label: moment().add(1, 'd').format(vm.dateFormat) }\n ]\n\n vm.date = vm.dates[1];\n\n if(!vm.company) { $location.path(\"/flight_times/flightstatus\"); }\n\n vm.emailMessage = \"Please fill your username\";\n vm.passwordMessage = \"Password is incorrect or empty\";\n\n var canContinue;\n\n vm.getLocalTime = function(utc, standardAdjustment, observesDST, startDST, endDST){\n var localTime = moment.utc();\n var adjustment = 0;\n // console.log(observesDST);\n // console.log(startDST);\n // console.log(moment(startDST,\"YYYY-MM-DD HH:mm:ss\"));\n if (observesDST)\n {\n \n if (moment(utc,\"YYYY-MM-DD HH:mm:ss\").diff(moment(startDST,\"YYYY-MM-DD HH:mm:ss\"), 'minutes') >= 0 && moment(utc,\"YYYY-MM-DD HH:mm:ss\").diff(moment(endDST,\"YYYY-MM-DD HH:mm:ss\"), 'minutes')<= 0)\n {\n adjustment = standardAdjustment + 60;\n }\n else\n {\n adjustment = standardAdjustment;\n }\n\n }\n else\n {\n adjustment = standardAdjustment;\n }\n\n\n localTime = moment(utc,\"YYYY-MM-DD HH:mm:ss\").add(adjustment, 'minutes').format(vm.dateFormat);\n \n return localTime;\n }\n\n vm.onSubmit = function(valid, dataLogin)\n {\n // console.log(valid)\n canContinue = true;\n\n if(canContinue)\n {\n vm.searchButtonText = \"Loading...\";\n\n var flightStatusEndpoint = 'getFlightStatus/' + moment(vm.date.label, vm.dateFormat).format(vm.dateParamFormat);\n var flightStatusParams =\n {\n \"destination\": vm.destination,\n \"origin\": vm.origin,\n \"flightNumber\": vm.flightNumber\n };\n\n\n apiIntegration.getData([flightStatusEndpoint], [flightStatusParams]).then(function(response)\n {\n \n // console.log(response.length)\n if(response.length > 0){\n vm.showFlights = true;\n vm.searchButtonText = \"Search\";\n response[0].data.forEach(function(flight, index){\n switch (flight.statusId) {\n case 0:\n response[0].data[index].localDeparture = vm.getLocalTime(flight.etd, flight.originStandardAdjustment, flight.originObservesDST, flight.originStartDST, flight.originEndDST);\n response[0].data[index].localArrival = vm.getLocalTime(flight.eta, flight.finalDestinationStandardAdjustment, flight.finalDestinationObservesDST, flight.finalDestinationStartDST, flight.finalDestinationEndDST);\n\n response[0].data[index].delayed = moment(flight.etd,\"YYYY-MM-DD HH:mm:ss\").diff(moment(flight.std,\"YYYY-MM-DD HH:mm:ss\"), 'minutes') > 15;\n response[0].data[index].status = response[0].data[index].delayed ? \"Delayed\" : \"On Time\";\n \n break;\n case 1:\n case 2:\n case 5:\n case 7:\n var etdLocal = etd.getLocalTime(originStandardAdjustment, originObservesDST, originStartDST, originEndDST);\n response[0].data[index].localDeparture = vm.getLocalTime(flight.atd, flight.originStandardAdjustment, flight.originObservesDST, flight.originStartDST, flight.originEndDST);\n response[0].data[index].localArrival = vm.getLocalTime(flight.eta, flight.finalDestinationStandardAdjustment, flight.finalDestinationObservesDST, flight.finalDestinationStartDST, flight.finalDestinationEndDST);\n\n response[0].data[index].status = \"En Route\";\n response[0].data[index].delayed = moment(flight.etd,\"YYYY-MM-DD HH:mm:ss\").diff(moment(flight.std,\"YYYY-MM-DD HH:mm:ss\"), 'minutes') > 15;\n break;\n\n case 3:\n case 4:\n case 6:\n case 8:\n response[0].data[index].localDeparture = vm.getLocalTime(flight.atd, flight.originStandardAdjustment, flight.originObservesDST, flight.originStartDST, flight.originEndDST);\n response[0].data[index].localArrival = vm.getLocalTime(flight.ata, flight.finalDestinationStandardAdjustment, flight.finalDestinationObservesDST, flight.finalDestinationStartDST, flight.finalDestinationEndDST);\n\n response[0].data[index].status = \"Arrived\";\n response[0].data[index].delayed = moment(flight.ata,\"YYYY-MM-DD HH:mm:ss\").diff(moment(flight.sta,\"YYYY-MM-DD HH:mm:ss\"), 'minutes') > 15;\n break;\n\n case 10:\n response[0].data[index].localDeparture = vm.getLocalTime(flight.etd, flight.originStandardAdjustment, flight.originObservesDST, flight.originStartDST, flight.originEndDST);\n response[0].data[index].localArrival = vm.getLocalTime(flight.eta, flight.finalDestinationStandardAdjustment, flight.finalDestinationObservesDST, flight.finalDestinationStartDST, flight.finalDestinationEndDST);\n\n response[0].data[index].status = \"Cancelled\";\n break;\n\n default:\n \"\"\n }\n response[0].data[index].nextDayArrival = moment(response[0].data[index].localArrival,vm.dateFormat).day() != moment(response[0].data[index].localDeparture, vm.dateFormat).day();\n \n });\n vm.flights = response[0].data;\n if(vm.flights.length == 1){\n vm.currentFlight = vm.flights[0]\n } else {\n vm.showFlightsList = true; \n }\n }\n }, function(error)\n {\n swal('', \"error\");\n vm.searchButtonText = \"Search\";\n $log.log(error);\n });\n\n }\n };\n\n vm.showFlightDetail = function(flight){\n console.log(flight)\n vm.currentFlight = flight;\n vm.showFlightsList = false;\n }\n\n vm.goBack = function(position){\n \n if(position==0){\n vm.showFlights = vm.flights.length == 1 ? false : true;\n vm.showFlightsList = vm.flights.length == 1 ? false : true;\n vm.currentFlight = null;\n }else{\n vm.showFlights = false;\n vm.showFlightsList = false;\n vm.flights = []; \n }\n }\n\n // vm.activateMenu = function() { vm.navCollapsed = (vm.navCollapsed == true) ? false : true; };\n\n // function validateEmail(email) {\n // var re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n // return re.test(email);\n // }\n\n // function validate(email) {\n // if (validateEmail(email)) { return true; }\n // else { return false; }\n // }\n }\n})();\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .run(runBlock);\n\n /** @ngInject */\n function runBlock($rootScope, SessionService, $location, $http, $stateParams) {\n\n if(SessionService.get(\"user\"))\n {\n //$location.path(\"/\"+$stateParams.company+\"/main\");\n $http.defaults.headers.common['Authorization'] = SessionService.get('user').sessionToken;\n }\n}\n\n})();\n\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .config(routerConfig);\n\n /** @ngInject */\n function routerConfig($stateProvider, $urlRouterProvider) {\n $stateProvider\n .state('resetpassword', {\n url: '/:company/resetpassword/:hash',\n templateUrl: 'app/resetpassword/resetpassword.html',\n controller: 'ResetpasswordController',\n controllerAs: 'resetpassword'\n })\n .state('logout',\n {\n url: \"/:company/logout\",\n resolve: {\n logout: function(SessionService, $location, $http, $stateParams)\n {\n SessionService.unsetAll(); \n $http.defaults.headers.common['Authorization'] = \"\";\n $location.path('/'+$stateParams.company);\n }\n }\n });\n\n $urlRouterProvider.otherwise('/flight_times');\n }\n\n})();\n\n/* global malarkey:false, moment:false */\n(function() {\n 'use strict';\n angular\n .module('app')\n .constant('malarkey', malarkey)\n .constant('moment', moment)\n .constant('logoUrl', 'http://www.raidensolutions.com/')\n //.constant('apiUrl', 'public/v1/');\n .constant('apiUrl', 'https://waa.flight-times.net/api/public/v1/');\n //.constant('apiUrl', 'http://98.142.184.10/api/public/v1/');\n})();\n(function() {\n 'use strict';\n\n angular\n .module('app')\n .config(config);\n\n /** @ngInject */\n function config($logProvider, toastrConfig, $httpProvider) {\n // Enable log\n $logProvider.debugEnabled(true);\n\n // Set options third-party lib\n toastrConfig.allowHtml = true;\n toastrConfig.timeOut = 3000;\n toastrConfig.positionClass = 'toast-top-right';\n toastrConfig.preventDuplicates = true;\n toastrConfig.progressBar = true;\n\n $httpProvider.interceptors.push(['$q', 'SessionService', '$location', '$rootScope', '$stateParams',\n function($q, SessionService, $location, $rootScope, $stateParams) {\n return {\n response: function(response) {\n return response || $q.when(response);\n },\n responseError: function(rejection) {\n // Show alerts\n if (rejection.status == 401 || rejection.status == 403)\n {\n var company = $stateParams.company;\n $location.path(\"/\"+company+\"/logout\");\n }\n\n return $q.reject(rejection);\n },\n request: function(config) {\n return config || $q.when(config);\n }\n };\n }\n ]);\n }\n\n})();\n\nangular.module(\"app\").run([\"$templateCache\", function($templateCache) {$templateCache.put(\"app/flightstatus/flightstatus.html\",\"

Search by...


and / or


{{flightstatus.currentFlight.localDeparture}}

{{flightstatus.currentFlight.originCity}} to {{flightstatus.currentFlight.finalDestinationCity}}

{{flightstatus.currentFlight.status}}

  • Flight Number
  • Depart
  • Arrive
  • Gate: {{flightstatus.currentFlight.parkingAtOrigin}}

  • Gate: {{flightstatus.currentFlight.parkingAtDestination}}

    Arrives {{flightstatus.currentFlight.localArrival}}

1 && flightstatus.showFlightsList\\\" id=\\\"flight-status-results\\\" class=\\\"row\\\">

{{flight.localDeparture}}

{{flight.originCity}} to {{flight.finalDestinationCity}}

  • Flight Number
  • Depart {{flight.originIataCode || flight.originIcaoCode}}
  • Arrive {{flight.finalDestinationIataCode || flight.finalDestinationIcaoCode}}
  • Check Status
Flight not found.
Try a different number or search by airport code.
Delayed Flights leave as soon as possible. Please be at the airport 60-90 minutes prior to \\\"Scheduled departure\\\".
Powered by \\\"Flight
\");\n$templateCache.put(\"app/login/login.html\",\"
\\\"Raiden
\\\"Flight
\\\"Airline
{{login.emailMessage}}
{{login.passwordMessage }}
\");\n$templateCache.put(\"app/main/analyticsExec.html\",\"
\\\"Flight
\\\"Customer
\\\"Profile
{{ main.fullName }}

Admin Analytics
Back Back

Monthly Delays (Top 5 Delays)


Required! Not a valid date!




List of Companies with Delay Code {{ main.delaySelected.codeNumeric }}

{{value.name}}{{value.countCustomer}}

Flights for {{main.companySelected.name | titleCase }} Delay Code {{ main.delaySelected.codeNumeric }}

{{value.concatFlight}}{{value.delayTime | secondsToDateTime | date:\\'HH:mm\\'}}

No Delay information is available within selected date range.

Monthly Crew Utilization


Required! Not a valid date!




{{value.fullName}}{{main.formatSeconds(value.sumTotalHours*60*60)}}

Flights Performed by {{ main.captSelected.fullName }}

{{value.timeOut}}{{value.registration}}{{value.flightName}}{{value.oiataCode}}{{value.aiataCode}}
{{value.fullName}}{{main.formatSeconds(value.sumTotalHours*60*60)}}

Flights Performed by {{ main.foSelected.fullName }}

{{value.timeOut}}{{value.registration}}{{value.flightName}}{{value.oiataCode}}{{value.aiataCode}}
{{value.fullName}}{{main.formatSeconds(value.sumTotalHours*60*60)}}

Flights Performed by {{ main.faSelected.fullName }}

{{value.timeOut}}{{value.registration}}{{value.flightName}}{{value.oiataCode}}{{value.aiataCode}}
{{value.fullName}}{{main.formatSeconds(value.sumTotalHours*60*60)}}

Flights Performed by {{ main.mechSelected.fullName }}

{{value.timeOut}}{{value.registration}}{{value.flightName}}{{value.oiataCode}}{{value.aiataCode}}

No Monthly Utility information is available within selected date range.

Monthly Aircraft Utilization


Required! Not a valid date!




{{value.registration}}{{main.formatSeconds(value.sumTotalHours*60*60)}}

No Monthly Aircraft Utility information is available within selected date range.

\");\n$templateCache.put(\"app/main/cbiesExec.html\",\"
\\\"Flight
\\\"Customer
\\\"Profile
{{ main.fullName }}

CB-iE: Computer Based Information Exchange
Back Back Back Back Back

Live CB-iE Create CB-iE

Title Certificate Enabled

We suggest using UPPERCASE ONLY for the Title. (Title will be used on the CERTIFICATE, if one is required)

Instructor
Description
Exam Level
Time Limit(Minutes)
Due Date
Questions Considered
Retry Attempts
Passing Score(%) {{(main.newCBIE.passing_score/100) * (main.newCBIE.questionsConsidered == undefined ? main.newCBIE.questions.length : main.newCBIE.questionsConsidered ) | ceil}}/{{main.newCBIE.questionsConsidered == undefined ? main.newCBIE.questions.length : main.newCBIE.questionsConsidered}}
Upload Reference Material
Preview File

Acceptable files formats for a CBIE\\'s reference material are as follows: PDF\\'s and MP4\\'s

Remove
Question {{ qIndex + 1 }}

Please make sure that a correct answer has been chosen and that the definition of an answer is not blank.

Type
0\\\" class=\\\"form-group col-xs-1\\\">

Mark as Correct

Please add an answer definition or upload an image.

Acceptable files formats are as follows: JPG\\'s, PNG, TIF, JPG, or JPEG

0\\\" class=\\\"form-group col-xs-1\\\">

Add Aditional Answer



Add Aditional Question

You have created {{main.newCBIE.questions.length}} question(s) thus far.


{{cbie.tableTitle}}{{cbie.issuedOn | date:\\'EEE dd MMM ‘yy\\'}}{{cbie.dateDue | date:\\'EEE dd MMM ‘yy\\'}}{{cbie.issuedByFullName}}{{cbie.status}}
No CB-iE\\'s have been created.

Print CB-iE

{{ main.currentCBIE.cbie.title }}

{{ main.currentCBIE.cbie.description }}
{{$index + 1}}. {{question.title}}

Review {{main.editCBIE.title}} v.{{main.editCBIE.control_version}}

Edits to Version {{main.editCBIE.control_version}} are allowed

0\\\"> Edits to questions and answers are disabled as {{main.editCBIE.completedAssignments}} employee(s) {{main.editCBIE.completedAssignments > 1 ? \\\"\\'s have\\\" : \\\"has\\\" }} already taken this version of the cbie.

0\\\">Create New Version | Preview CB-iE

Title Certificate Enabled

We suggest using UPPERCASE ONLY for the Title. (Title will be used on the CERTIFICATE, if one is required)

Instructor
Description
Exam Level
Time Limit(Minutes)
Due Date Please enter a due date in the future.
Questions Considered
Retry Attempts
Passing Score(%) {{(main.editCBIE.passing_score/100) * (main.editCBIE.questionsConsidered == undefined ? main.editCBIE.questions.length : main.editCBIE.questionsConsidered ) | ceil}}/{{main.editCBIE.questionsConsidered == undefined ? main.editCBIE.questions.length : main.editCBIE.questionsConsidered}}
Upload Reference Material

Acceptable files formats for a CBIE\\'s reference material are as follows: PDF\\'s and MP4\\'s

Preview File
Remove

Question {{ qIndex + 1 }} 0\\\" type=\\\"text\\\" name=\\\"questionTitle\\\" ng-model=\\\"question.title\\\" class=\\\"form-control\\\" ng-required=\\\"required\\\" required>
Type
0\\\" class=\\\"form-group col-xs-1\\\">

Please make sure that a correct answer has been chosen and that the definition of an answer is not blank.

0\\\" type=\\\"checkbox\\\" name=\\\"isCorrect\\\" ng-model=\\\"answer.is_correct\\\" ng-checked=\\\"{{answer.is_correct}}\\\"> Mark as Correct

Please add an answer definition or upload an image.

0\\\" type=\\\"text\\\" name=\\\"question_{{ $parent.$index + 1 }}_answer_{{ $index + 1 }}\\\" ng-model=\\\"answer.description\\\" ng-model-options=\\\"{allowInvalid: false}\\\" class=\\\"form-control\\\" required>

Acceptable files formats are as follows: JPG\\'s, PNG, TIF, JPG, or JPEG

0\\\" class=\\\"form-group col-xs-1\\\">

Add Aditional Answer



Add Aditional Question

You have created {{main.editCBIE.questions.length}} question(s) thus far.


Submissions: {{main.editCBIE.title}}

Release Scores
{{user.employeeNumber}}{{user.firstName}}{{user.lastName}}{{user.cbie.control_version}}{{user.updated_at | date:\\'EEE dd MMM ‘yy\\'}}{{user.score}}{{user.status == 1 ? \\'COMPLETE\\' : \\'PENDING\\'}}

{{main.editCBIE.title}} Employee Assignments

{{ group.value }}
{{user.employeeNumber}}{{user.firstName}}{{user.lastName}}{{user.email}}{{user.positionName}}{{user.departmentName}}
BackCB-iE: Employee Status

CB-iE: Employees Status

{{ group.value }}
{{user.employeeNumber}}{{user.firstName}}{{user.lastName}}{{user.email}}{{user.positionName}}{{user.departmentName}}

{{main.currentEmployee.firstName}} {{main.currentEmployee.lastName}} CB-iE Score Card



0\\\">
CBIE TitleIssuedCompletedVersionAttemptsStatusScoreCertificate
{{cbie.cbie.id}} - {{cbie.cbie.title}}{{cbie.cbie.issuedOn | date:\\'EEE dd MMM ‘yy H:mm\\'}}{{cbie.completed | date:\\'EEE dd MMM ‘yy H:mm\\'}}{{cbie.cbie.control_version}}{{cbie.attempts.length}}{{cbie.status}}{{cbie.score}}%

No CB-iE\\'s have been assigned.

\");\n$templateCache.put(\"app/main/employeeForms.html\",\"
\\\"Flight
\\\"Customer
\\\"Profile
{{ main.fullName }}

ASAP Reports
Back

Select an ASAP Report

Please choose the report type that best corresponds with your role or the issue you\\'ve encountered:


Flight Crew

For pilots and cabin crew. Use this report to address any flight-related anomalies, safety concerns, or operational issues experienced during the flight.

Dispatcher

If you\\'re coordinating flight movements or handling pre-flight administration. Report any logistical issues, scheduling problems, or communication breakdowns here.

Mechanic

For aircraft maintenance staff. Document any technical issues, discrepancies in maintenance records, or safety concerns related to aircraft machinery and equipment.

ASAP - {{main.flightCrewASAPFormData.formName}}

DO NOT REPORT AIRCRAFT ACCIDENTS AND CRIMINAL ACTIVITIES ON THIS FORM.

ALL IDENTITIES CONTAINED IN THIS REPORT WILL BE REMOVED TO ASSURE COMPLETE REPORTER ANONYMITY.

PLEASE FILL IN APPROPRIATE SPACES AND CHECK ALL ITEMS WHICH APPLY TO THIS EVENT OR SITUATION.


REPORTER


FLYING TIME (IN HOURS)

AIRSPACE
CONDITIONS / WEATHER ELEMENTS

4 && wIndex < 9\\\">

8\\\">
LIGHT/VISIBILITY

feet

miles

feet

ATC/ADVISORY SVC.

AIRCRAFT {{qIndex+1}}

(Make / Model, e.g. B737, NOT N #, Flt #, etc)







Route in Use

2 && rIndex < 6\\\">
5\\\" style=\\\"padding-bottom:10px\\\">
0\\\" class=\\\"form-group col-xs-12\\\">


IF MORE THAN ONE AIRCRAFT WAS INVOLVED, PLEASE ADD AN ADDITIONAL AIRCRAFT.


LOCATION

(single value)


and/or

from:

CONFLICTS

Estimated miss distance:


EXPERIENCE

Describe your qualifications

1 && qindex < 4\\\">
3 && qindex < 6\\\">
5\\\" style=\\\"padding-bottom:10px\\\">

What is your technician/maintenance experience in years?


FACTORS

Location


Was training a factor?


What other factors may have contributed?

1 && qindex < 4\\\">
3\\\" style=\\\"padding-bottom:10px\\\">

Check items which were involved in the event



2\\\" style=\\\"padding-bottom:10px\\\">

CONSEQUENCES / OUTCOME
1 && qindex < 4\\\">
3 && qindex < 6\\\">
5 && qindex < 8\\\">
7\\\" style=\\\"padding-bottom:10px\\\">

AIRCRAFT / AIRWORTHINESS STATUS
MISSION
2\\\">
4\\\" style=\\\"padding-bottom:10px\\\">

TYPE OF AIRCRAFT (MAKE / MODEL) AND ENGINE TYPE

DESCRIBE EVENT/SITUATION

Keeping in mind the topics shown below, discuss those which you feel are relevant and anything else you think is important. Include what you believe really caused the problem, and what can be done to prevent a recurrence, or correct the situation.


RESOLUTION SUGGESTED

ERC/CORRECTIVE ACTION


ASAP Report List
{{asap.id}} - {{asap.formName}}{{asap.dateOfOccurence | date:\\'EEE dd MMM ‘yy\\'}}{{asap.createdAt | date:\\'EEE dd MMM ‘yy\\'}}{{asap.name}}{{asap.formStatus}}

ASAP Manager

ERC

Director of Saftey

{{ level.actionTaken | date:\\'EEE dd MMM ‘yy\\' }}
{{ level.actionTaken | date:\\'EEE dd MMM ‘yy\\'}} | {{ level.updatedAt }}

{{ user.firstName }} {{ user.lastName }}

{{ user.firstName }} {{ user.lastName }}

Comments

{{row.comment}}
{{row.created_employee[0].firstName}} {{row.created_employee[0].lastName}} | {{row.createdAt}}
Back

ASAP Approvals

{{asap.asap_form.id}} - {{asap.asap_form.formName}}ASAP Manager ERC Director{{asap.asap_form.dateOfOccurence | date:\\'EEE dd MMM ‘yy\\'}}{{asap.createdAt | date:\\'EEE dd MMM ‘yy\\'}}{{asap.asap_form.name}}
\");\n$templateCache.put(\"app/main/flight-detail.modal.html\",\"

{{ modal.customer }}

Flight
{{ modal.flightDetails[0].callsign }}{{ modal.flightDetails[0].flightNumber }}
Departs
{{ modal.flightDetails[0].departureCode }} at {{ modal.flightDetails[0].departure | date:\\'HH:mm\\' }} Z
Arrives
{{ modal.flightDetails[0].arrivalCode }} at {{ modal.flightDetails[0].arrival | date:\\'HH:mm\\' }} Z
Aircraft
{{ modal.flightDetails[0].registration }}
Crew
{{ flightDetail.flightDutyName }} {{ flightDetail.lastName }} 0\\\">, {{ flightDetail.firstName }}
\");\n$templateCache.put(\"app/main/home.html\",\"
Home

Flights


0\\\">
DATETIMEFLIGHT
{{ flight.departure | date:\\'EEE dd MMM ‘yy\\'}}{{ flight.arrival | date:\\'HH:mm\\'}}z{{ flight.callsign }}{{ flight.flightNumber }}
{{ main.filterMessage }}

0\\\">
TITLEISSUED
{{value.title | limitTo: 20}}{{value.issuedOn | date:\\'EEE dd MMM ‘yy\\'}}
{{ main.filterBulletinsMessage }}

Analytics



0\\\">
TITLEISSUED
{{cbie.title | limitTo: 15 }}{{cbie.issuedOn | date:\\'EEE dd MMM ‘yy\\'}}


{{ main.filterCbieMessage }}

\");\n$templateCache.put(\"app/main/main.html\",\"
Flights
0\\\">
DEP DATETIMEFROMARR DATETIMETOFLIGHTASSIGNED DUTY
{{ flight.departure | date:\\'EEE dd MMM ‘yy\\' }}{{ flight.departure | date:\\'HH:mm\\' }}z{{ flight.departureCode }}{{ flight.arrival | date:\\'EEE dd MMM ‘yy\\' }}{{ flight.arrival | date:\\'HH:mm\\'}}z{{ flight.arrivalCode }}{{ flight.callsign }}{{ flight.flightNumber }}{{ flight.assignedDuty }}
{{ main.filterMessage }}
2 && openTime.diff <= 4,\\n \\'openTime3\\': openTime.diff > 4 }\\\" ng-repeat=\\\"openTime in main.openTimeList\\\">From {{ openTime.lastArrival | date:\\'MMM dd, ‘yy - HH:mm\\':\\'UTC\\' }}z · To {{ openTime.nextDeparture | date:\\'MMM dd, ‘yy - HH:mm\\':\\'UTC\\' }}z {{ openTime.openTime }}
{{ main.filterOpenTimeMessage }}
Bulletins 0\\\">{{ main.totalBulletinsNotRead }}
\\\"Ic \\\"Ic
{{ bulletin.title }}
Issued Date: {{ bulletin.issuedOn | date:\\'dd MMM ‘yy\\':\\'UTC\\' }}
Issued By: {{ bulletin.issuedByFullName }}
Must acknowledge by: {{ bulletin.dateDue | date:\\'dd MMM ‘yy\\':\\'UTC\\' }}

{{ bulletin.description }}

Clicking READ (NEW) Confirms that you Read & Acknowledge.

{{ main.filterBulletinsMessage }}
Back
CLICK HERE TO OPEN Mobile browsers display PDF documents in different ways.
CLICK HERE TO OPEN Mobile browsers display PDF documents in different ways.
CLICK HERE TO OPEN

Web browsers browsers display PDF documents in different ways.

CB-iE 0\\\">{{ main.totalCBIEPending }}
\\\"Ic \\\"Ic
{{ cbie.title }}
Issued Date: {{ cbie.issuedOn | date:\\'dd MMM ‘yy\\':\\'UTC\\' }}
Issued By: {{ cbie.issuedByFullName }}
Must complete by: {{ cbie.dateDue | date:\\'dd MMM ‘yy\\':\\'UTC\\' }}

{{ cbie.description | limitTo: 200 }}{{cbie.description.length > 200 ? \\'...\\' : \\'\\'}}


{{ main.filterCbieMessage }}

Back


Page: {{main.pageNum}}/ {{main.pageCount}}

Download Reference Material


{{ main.currentCBIE.cbie.title }} | Remaining: {{main.counter| secondsToDateTime | date:\\'HH:mm:ss\\'}}

0\\\" class=\\\"cbieTitle2\\\">{{ main.currentCBIE.cbie.title }} - Complete

{{ main.currentCBIE.cbie.description }}


{{$index + 1}}. {{question.title}}

Please select a response!

Analytics
\");\n$templateCache.put(\"app/main/modalApprovalFlowActionMessage.html\",\"

ASAP {{modal.form.formName}} Form - {{modal.form.id}}

By proceeding with this action, you will be {{modal.actionFriendly}} the current item. Please take a moment to provide a brief explanation for your decision in the space below.

\");\n$templateCache.put(\"app/main/settings.html\",\"
\\\"Flight
\\\"Customer
\\\"Profile
{{ main.fullName }}

Settings
Back

Change your password

Please enter a different password from your current password.

To conform with our Strong Password policy, you are required to use a sufficiently strong password. Password must be more than 7 characters.

\");\n$templateCache.put(\"app/resetpassword/resetpassword.html\",\"
\\\"Raiden
\\\"Flight
\\\"Airline
{{resetpassword.passwordMessage}}
{{resetpassword.confirmPasswordMessage }}
\");\n$templateCache.put(\"app/components/loginHeader/loginHeader.html\",\"\");\n$templateCache.put(\"app/components/navbar/navbar.html\",\"\");}]);"],"sourceRoot":"/source/"}