{"version":3,"sources":["angular-block-ui.js","app.js","login/activation-controller.js","login/authentication-service.js","login/company-profile-service.js","login/http-interceptor.js","login/login-controller.js","login/login.js","login/reset-password-controller.js","login/user-profile-service.js","navigation/navigation-controller.js","navigation/navigation-service.js","navigation/navigation.js","user-account-dropdown/change-password-modal-controller.js","user-account-dropdown/user-account-dropdown-controller.js","user-account-dropdown/user-guide-modal-controller.js","user-account-dropdown/user-profile-modal-controller.js","login/change-expired-password/change-expired-password-modal-controller.js","login/config/http-provider-config.js","company-service.js","currency-service.js","global-service.js","notification-service.js","request-transform-service.js","role-service.js","user-service.js","date-util.js","checkbox-required-directive.js","click-go-directive.js","document-preview-directive.js","due-date-directive.js","dynamic-name-directive.js","enabled-status-directive.js","file-icon-directive.js","file-status-directive.js","input-amount-directive.js","input-currency-code-directive.js","input-currency-directive.js","input-date-directive.js","input-employee-directive.js","input-fiscal-year-directive.js","input-integer-directive.js","input-text-directive.js","input-user-directive.js","input-vendor-directive.js","invoice-extra-status-directive.js","invoice-status-directive.js","list-directive.js","ng-ckeditor-directive.js","ng-match-directive.js","no-propagation-directive.js","payment-type-directive.js","show-tab-directive.js","string-to-number.js","student-avatar-directive.js","unique-email-directive.js","unique-username-directive.js","user-random-avatar-directive.js","vendor-status-directive.js","custom-date-filter.js","exchange-rate-filter.js","filesize-filter.js","invoice-status-filter.js","money-filter.js","payment-type-filter.js","titlecase-filter.js","thesis/examination/send-exam-req/send-exam-req-controller.js","academic/academic-service.js","academic/academic.js","checklist/checklist-service.js","checklist/checklist.js","dashboard/dashboard-service.js","dashboard/dashboard.js","email-template/email-template-service.js","email-template/email-template.js","examination/examination-service.js","examination/examination.js","instruction/instruction-service.js","instruction/instruction.js","payables/document-viewer-controller.js","payables/payables-service.js","payables/payables.js","school/school-service.js","school/school.js","setting/setting-service.js","setting/setting.js","staff/staff-service.js","staff/staff.js","student/student-service.js","student/student.js","thesis/thesis-service.js","thesis/thesis.js","user/examiner-service.js","user/user-service.js","user/user.js","academic/list/academic-list-controller.js","checklist/list/checklist-list-controller.js","checklist/list/edit-checklist-controller.js","dashboard/dashboard-part/dashboard-controller.js","dashboard/dashboard-part/dashboard-examination-request-completed-controller.js","dashboard/dashboard-part/dashboard-examiner-response-controller.js","dashboard/dashboard-part/dashboard-number-of-thesis-controller.js","dashboard/dashboard-part/dashboard-thesis-process-completion-controller.js","email-template/list/edit-template-modal-controller.js","email-template/list/email-template-list-controller.js","examination/info/examination-document-controller.js","examination/info/examination-document-service.js","examination/info/examination-info-controller.js","examination/info/examination-info-for-examiner-modal-controller.js","examination/info/examination-info-service.js","examination/info/submit-exam-confirm-modal-controller.js","examination/list/examination-list-controller.js","examination/modal/add-attachment-modal-controller.js","examination/modal/cancel-exam-modal-controller.js","examination/modal/delete-exam-document-modal-controller.js","examination/modal/examination-document-viewer-modal-controller.js","examination/modal/examiner-instruction-controller.js","examination/modal/remove-attachment-modal-controller.js","examination/modal/submit-exam-recommendation-modal-controller.js","instruction/examiner-instruction/edit-instruction-controller.js","instruction/examiner-instruction/instruction-controller.js","payables/controller/pay-modal-controller.js","payables/controller/payables-add-new-controller.js","payables/controller/payables-detailed-view-controller.js","payables/controller/payables-doc-preview-controller.js","payables/controller/payables-edit-controller.js","payables/controller/payables-header-form-controller.js","payables/controller/payables-lines-controller.js","payables/controller/payables-list-controller.js","payables/controller/payables-main-controller.js","payables/controller/void-modal-controller.js","school/assign/assign-dean-email-modal-controller.js","school/assign/assign-dean-modal-controller.js","school/assign/assign-email-modal-controller.js","school/assign/select-acad-staff-directive.js","school/assign/select-acad-staff-no-validate-directive.js","school/list/school-list-controller.js","school/programme/programme-list-controller.js","school/programme/programme-service.js","setting/list/edit-setting-controller.js","setting/list/setting-list-controller.js","staff/add/add-staff-directive.js","staff/add/add-staff-modal-controller.js","staff/list/staff-list-controller.js","staff/edit/edit-roles-modal-controller.js","staff/edit/remove-staff-modal-controller.js","student/list/student-list-controller.js","thesis/delete-document/delete-thesis-document-modal-controller.js","thesis/examination/examination-list-controller.js","thesis/info/approve-thesis-modal-controller.js","thesis/info/check-thesis-modal-controller.js","thesis/info/complete-thesis-modal-controller.js","thesis/info/first-submit-modal-controller.js","thesis/info/hold-thesis-modal-controller.js","thesis/info/proceed-thesis-modal-controller.js","thesis/info/reject-thesis-confirm-modal-controller.js","thesis/info/reject-thesis-modal-controller.js","thesis/info/release-thesis-modal-controller.js","thesis/info/reroute-staff-directive.js","thesis/info/reroute-thesis-modal-controller.js","thesis/info/select-dean-modal-controller.js","thesis/info/select-reroute-staff-directive.js","thesis/info/submit-amd-modal-controller.js","thesis/info/submit-exam-modal-controller.js","thesis/info/submit-oral-modal-controller.js","thesis/info/submit-title-confirm-modal-controller.js","thesis/info/terminate-thesis-modal-controller.js","thesis/info/thesis-info-controller.js","thesis/info/thesis-info-service.js","thesis/info/update-liability-status-controller.js","thesis/info/view-recommendation-controller.js","thesis/info/view-rejection-modal-controller.js","thesis/info/view-school-comment-controller.js","thesis/info/withdraw-thesis-modal-controller.js","thesis/info-part/thesis-document-permission-controller.js","thesis/info-part/thesis-document-viewer-modal-controller.js","thesis/info-part/thesis-info-documents-controller.js","thesis/info-part/thesis-info-documents-history-controller.js","thesis/info-part/thesis-info-documents-service.js","thesis/info-part/thesis-info-process-history-controller.js","thesis/list/thesis-list-controller.js","thesis/upload/add-document-modal-controller.js","thesis/upload/file-model-directive.js","user/detail/edit-user-modal-controller.js","user/detail/reset-password-modal-controller.js","user/detail/user-delete-modal-controller.js","user/detail/user-detail-controller.js","user/form/user-form-controller.js","user/list/user-list-controller.js"],"names":["angular","moduleLoaded","name","module","ex","blockNavigation","$scope","mainBlockUI","blockUIConfig","registerLocationChange","$on","event","$_blockLocationChange","state","blockCount","preventDefault","blockBrowserNavigation","fn","blkUI","config","$provide","$httpProvider","decorator","$delegate","$injector","blockUI","exception","cause","get","resetOnException","instances","reset","console","log","interceptors","push","run","$document","$templateCache","autoInjectBodyBlock","find","attr","template","templateUrl","put","decorateLocation","hook","f","s","result","apply","arguments","overrides","forEach","directive","blockUiContainerLinkFn","scope","restrict","compile","$element","factory","blockUIUtils","$attrs","srvInstance","inheritedData","Error","blockUiCompileFn","blockUiPreLinkFn","append","pre","hasClass","addClass","cssClass","$observe","value","$_blockUiMessageClass","instanceId","blockUi","$id","parentInstance","_parent","release","addRef","$_blockUiState","$watch","toggleClass","pattern","blockUiPattern","regExp","buildRegExp","data","constant","delay","message","autoBlock","requestFilter","noop","$q","injectBlockUI","stopBlockUI","$_noBlock","$_blocks","stop","error","rejection","reject","request","method","url","x","excludedUrls","indexOf","locate","start","requestError","response","responseError","$timeout","BlockUI","id","startPromise","self","this","blocking","doneCallbacks","_id","_refs","messageOrOptions","block","isString","reservedStateProperties","extend","$ae","element","activeElement","length","isElementInBlockScope","_restoreFocus","$body","blur","_cancelStartTimeout","cancel","Math","max","isBlocking","regexp","undefined","_pattern","executeCallbacks","focus","e1","elementToFocus","e2","cb","done","mainBlock","_destroy","isNaN","instance","idOrInstance","i","splice","forEachFnHook","test","$","utils","match","RegExp","forEachFn","arr","fnName","args","t","blockScope","c","findElement","predicateFn","traverse","ret","$elements","parent","children","obj","j","invo","$stateProvider","$urlRouterProvider","appVersion","otherwise","$rootScope","$state","auth","global","serverUrl","getServerUrl","routesThatDontRequireAuth","loginState","loginPath","mainAppState","initialStateAfterLogin","isProduction","getEnvironment","then","timeoutMillis","$current","session","isExaminer","logout","isSessionExpired","transitionTo","controller","userService","$stateParams","email","token","password","confirm","activationSuccess","activationFailed","sendUrlFailed","sendUrlSuccess","showNewUrlForm","type","active","showRequestForm","hasNotification","activate","code","invalidSamePassword","invalidAuthentication","loginForm","$setPristine","checkToken","isValid","sendNewActivationUrl","sendActivationUrl","isAccountActive","checkUserActive","availability","checkWhiteSpace","alert","$http","notify","userProfileService","companyProfileService","hasRole","roleAuthority","roles","role","key","authority","user","company","isLoggedIn","isAdmin","isView","isSysAdmin","isLastLoginFailed","isNotAuthorized","isAccountLocked","isPasswordExpired","isStudent","isSchoolAdmin","isOASAdmin","isSchoolStaff","isOASStaff","isSchoolDean","isAcadStaff","clearSession","isLoaded","$broadcast","determineRolePrivilege","loadSession","deferred","defer","all","resolve","promise","login","rememberMe","encodeURIComponent","post","check","sendResetPasswordUrl","resetPassword","changeExpiredPassword","newp","confirmp","update","requestTransformService","changeLogo","file","onSuccess","onError","onProgress","onCancelled","formData","FormData","xhr","XMLHttpRequest","upload","addEventListener","open","send","defaults","headers","transformRequest","identity","useLegacyPromiseExtensions","$location","sessionTimeOut","canRecover","responseOrNewPromise","status","path","window","location","roleService","$uibModal","$window","j_username","j_password","staff","staffId","student","matricNo","username","isExpired","passwordExpired","sendNewResetPasswordUrl","singleSignOn","ssuser","go","signedInStudent","signedInStaff","changePasswordModal","reload","ev","to","toParams","from","fromParams","setAsLogin","matriculationNo","resetPasswordSuccess","resetPasswordFailed","changePassword","currentp","fullname","navigationService","menuItems","getMenus","goState","noClick","hasSubNav","activeName","subMenu","clickState","navigationTemplate","showSubMenu","item","menus","sortMenus","sort","a","b","order","getMenuByState","menu","_","findIndex","each","getMenuById","addMenu","dropdownClass","addSubMenu","clearActive","$uibModalStack","alertMessage","nav","dismissAll","$uibModalInstance","currentPassword","newPassword","confirmPassword","showError","showSuccess","ok","changePasswordForm","dismiss","closeAlert","closeSuccess","close","showUserGuide","userGuideModal","editUserProfile","UserProfileModal","editUser","list","q","offset","success","listAll","enable","disable","create","value1","key1","Content-Type","getByCode","buildSuccessTitle","buildSuccessMessage","description","buildErrorMessage","buildErrorTitle","multiStr","errors","val","field","messages","toastr","options","closeButton","debug","positionClass","onclick","showDuration","hideDuration","timeOut","extendedTimeOut","showEasing","hideEasing","showMethod","hideMethod","warning","title","info","Object","listUser","userId","listAvailable","addUserRole","roleId","removeUserRole","getMember","listAvalaible","DateUtil","DateDiffInDays","d1","d2","Date","setHours","t2","getTime","t1","parseInt","require","link","attrs","ngModel","$validators","checkRequired","modelValue","viewValue","$eval","ngTrueValue","on","clickGo","replace","imagesrc","pdfsrc","isshowimage","isvalidfile","filename","date","dueDate","dateDiff","labelclass","label","$compile","terminal","priority","dynamicName","removeAttr","newVal","badgeclass","fileName","endsWith","str","suffix","toLowerCase","icon","inputModel","inputName","inputClass","positive","required","newValue","oldValue","index_dot","newAmount","String","split","validity","valueMissing","badInput","selectedCurrency","inputPlaceholder","codeonly","limitToFilter","currencyList","currencies","$parse","transclude","modelAccessor","html","newElem","replaceWith","selectedEmployee","employeeList","Vendors","selectedFiscalYear","fiscalYears","showRequired","isRequired","selectedUser","userList","users","selectedVendor","vendorList","$filter","extrastatus","paymentdate","duedate","label2","define","amd","$defer","app","loaded","checkLoaded","CKEDITOR","isUndefined","disableAutoInline","ctrls","form","EMPTY_HTML","isTextarea","tagName","isReady","onLoad","toolbar","toolbar_full","items","disableNativeSpellChecker","uiColor","width","fontSize_sizes","enterMode","ENTER_BR","shiftEnterMode","ckeditor","inline","configLoaderDef","bind","destroy","setModelData","setPristine","getData","$viewValue","$setViewValue","onUpdateModelData","pop","setData","$apply","document","$render","elem","ctrl","firstPassword","ngMatch","add","v","$setValidity","stopPropagation","click","e","tab","$parsers","$formatters","parseFloat","size","unwatch","initials","toUpperCase","$interval","_interval","_isTimerRun","newEmail","$error","originalValue","$pristine","currentValue","checkEmailAvailability","checkUsernameAvailability","colorMapping","color","randomColor","letters","floor","random","filter","dateFilter","text","symbol","num","Number","toFixed","currencyFilter","input","words","charAt","slice","join","examinationService","examinationDocumentService","thesisId","examinerAlias","documents","listAttachableThesisDocuments","listAttachableThesisDocumentsByMatricNo","docs","groupBy","selectedDocuments","toggleSelection","idx","sendRequest","sortBy","filterBy","numberPerPage","schoolList","academicId","exportToExcel","fs","fd","sb","sbString","getPager","totalItems","currentPage","pageSize","startPage","endPage","totalPages","ceil","startIndex","endIndex","pages","range","service","sectionName","className","isHidden","submenu5","isSearchable","editChecklist","submenu10","getExaminerResponse","examinerType","dateFrom","dateTo","getThesisProcessCompletion","getThesisProcessCompletionByProcess","getThesisCount","getExaminationRequestCompleted","getSchoolList","getCollegeList","getProcessList","typeStr","exportToExcel2","editTemplate","subject","content","submenu6","examinerEmail","JSON","stringify","trim","updateNotes","notes","getExaminationRequestCount","examinationRequestList","examinationList","oe","searchDueDate","wfstatusList","fsc","fdd","indicatorVar","totalER","hasIndicator","getInstructionForExaminer","editInstruction","saveEditInstruction","submenu7","imageSrc","pdfSrc","isShowImage","isValidFile","isCanClickPrev","isCanClickNext","fileTotal","currentFilePage","oldVal","display","files","prevActive","nextActive","next","prev","fileType","temp","view","total","edit","hasMoreItem","types","initPayable","payable","currency","baseCurrency","paymentTerm","tax","discount","subTotal","invoiceDate","payablesType","payablesLines","vendorName","saveListData","concat","invoices","invoice","fileId","addFile","onComplete","responseType","listOverdue","listDueIn7Days","getQuickStats","pay","paymentType","paymentRefNo","paymentAmount","createLine","invoiceLine","getLine","updateLine","deleteLine","lineId","invoiceId","setSelected","payables","calculateDueDate","term","setDate","getDate","calculateTax","round","defaultTaxRate","calculateLineTotal","lines","totalPrice","assignDean","schoolCode","addSchoolDeanAssignment","removeSchoolDeanAssignment","assignmentId","setDefaultDean","deanEmail","listSchoolDean","saveAssignEmail","saveAssignDeanEmail","stats","schools","submenu4","editSetting","page","isEnabled","listRoles","saveRoleListData","listRolesAddStaff","saveRoleListData2","addStaff","removeStaff","editRoles","rolesId","deptList","depts","fr","pager","staffs","rolesAddStaff","schoolstaffMenu","submenu3","studentId","assignedOnly","cbStatus","enabled","university","begin","end","getUserStatistic","initNewUser","needActivation","del","listUserByRole","listUserAvailableRoles","listUserRoles","checked","availableRoles","delete","submenu2","academicService","filterByData","orderData","sortData","statusCB","myBlock","isOAS","academicList","academics","enabledisableList","currentEd","itemselectedEd","edFilterClass","buildQuery","clearSchoolFilter","getClassEd","clearEdFilter","dataSchool","currentSchool","itemselectedSchool","schoolFilterClass","getClassSchool","sortByList","currentSortBy","itemselectedSortBy","getClassSortBy","searchByList","currentSearchBy","itemselectedSearchBy","getClassSearchBy","buildCriteria","criteria","searchBy","handleCriteriaChange","debounce","academic","setPage","checklistService","checklist","checklists","editChecklistModal","dashboardService","collegeList","processList","reloadExaminerResponse","reloadThesisProcessCompletion","reloadNumberOfThesis","reloadExaminationRequestCompleted","erFrom","erTo","init","programmeList","itemselectedCollege","currentCollege","collegeFilterClass","itemselectedProgramme","currentProgramme","programmeFilterClass","getClassCollege","getClassProgramme","clearCollegeFilter","clearProgrammeFilter","parse","moment","format","dashboardData","dataExist","piechart","c3","generate","columns","bindto","shortest","average","longest","examinerList","itemselectedExaminer","currentExaminer","examinerFilterClass","getClassExaminer","clearExaminerFilter","chart","itemselectedProcess","currentProcess","processFilterClass","getClassProcess","clearProcessFilter","buildQueryDetail","dashboardDataDetail","emailTemplateService","emailTemplate","editorOptions","language","height","emailTemplateList","emailtemplates","editTemplateModal","examinationInfoService","examId","permissions","requiredDocuments","attachments","isAllUploaded","changeFile","fileInput","ext","rownum","docTypeCode","fileMessage","uploadDocument","uploadFileToUrl","exm","examination","getRequiredDocuments","canSubmitDocument","canRemoveAttachment","canAddAttachment","canDelete","classification","processName","author","deleteExamDocument","documentId","isLockedExamDocument","isLocked","deleteExamDocumentModal","removeAttachment","removeAttachmentModal","getDocuments","submitRecommendation","urlTemplate","submitRecommendationModal","submitRecommendationConfirm","selectedRecommendation","submitExamConfirmModal","addAttachment","addAttachmentModal","n","req","isUploaded","noOfDocument","getExamRequestPermissions","listUserPermissions","downloadExamDocument","viewDocument","doc","showDocAlert","checkIfXodRenditionAvailable","isAvailable","loadViewer","documentViewerModal","doctypeCode","listUserExamDocumentPermission","ids","isSchool","isAcadOrExternal","isPHD","examinationInfo","saveInfoData","permissionList","fullnameCompleted","instruction","oasEmail","ins","thesis","programme","examinationInfoForExaminer","examinerInstruction","instruct","downloadExaminerReportTemplate","no","examinationId","examinationInfoForExaminerModal","backdrop","keyboard","cancelExam","cancelExamModal","examinationInfoForAcknowledgement","listRecommendationType","recommendationCode","cancelExamination","oeCB","dueDateLbl","due","dueDateStart","dueDateEnd","currentDueDate","examinations","wfstsList","saveWfStatusListData","dataWfStatus","currentWfStatus","itemselectedWfs","statusFilterClass","getClassWfs","clearStatusFilter","schlList","saveSchoolListData","okDueDateRange","monthNames","dateStart","getMonth","getFullYear","dateEnd","option1","placement","shortcutPropagation","option2","popup1","opened","popup2","open1","open2","clearDueDateRange","selectedDocument","attachment","okConfirm","loadDocument","canAnnotate","PDFTron","WebViewer","custom","annotationUrl","saveAnnotationUrl","annotationUser","annotationAdmin","initialDoc","enableAnnotations","streaming","enableReadOnlyMode","$sce","trustAsHtml","checkCode","recommendation","getRecommendationType","recommendationTypes","instructionService","successSave","saveData","inst","save","pageTitle","instructionPage","$modalInstance","payablesService","dataI","paylist","exchangeRate","exchangeRateUSD","showAmount","initialize","closeWindow","$emit","isEditLine","addNewLine","lineTotal","showPayment","extraStatus","showPayAmount","isEditable","hideError","editPayables","$modal","showProgress","isCanPay","isVoid","voidModal","payableService","payModal","clickInfo","newFile","progress","evt","lengthComputable","editID","today","submitted","initDate","isEdit","saveOrRestoreCache","clearCache","today1","today2","payablesForm","$valid","createVendor","paymentTermDays","$watchCollection","changeInvoiceDate","getElementById","changeDueDate","payableLine","addLine","saveLine","quantity","unitPrice","lineForm","editLine","pos","previousPos","displayError","showMoreItems","current","currentPos","listTemplate","newTemplate","detailTemplate","documentViewTemplate","isError","listView","leftView","rightView","showListView","showEdit","showNew","showDetail","showList","broadcastGetNew","schoolService","school","deanList","showSetDefaultForm","showAddDeanForm","cancelSetDefault","openAddDeanForm","addDeanAssignment","isAssigned","dean","staffData","errorAlert","removeDeanAssignment","openSetDefaultForm","deanAssignment","defaultDeanAssignment","setDefault","selectedStaff","formatLabel","model","shortTitleDesc","dept","staffList","numPerPage","maxSize","searchData","assignDeanModal","assignEmail","assignEmailModal","assignDeanEmail","assignDeanEmailModal","criteriaData","programmeService","programmes","programmeCode","settingService","setting","settingList","settings","editSettingModal","staffService","roleData","currentDept","currentRole","deptFilterClass","roleFilterClass","pageHelper","itemselectedDept","getClassDept","clearDeptFilter","itemselectedRole","getClassRole","clearRoleFilter","addStaffModal","editRolesModal","verify","toggle","countChecked","count","getAllRolesSelected","studentService","studentList","students","thesisInfoDocumentsService","deleteThesisDocument","examReqData","currentList","oldList","rowShow","sendExaminationRequest","examiner","sendExamReqModal","dataThesis","borderColor","examReqDataTemp","exam","newList","currentTemp","dataTemp","oldTemp","examiners","workflow","flag","examinerId","staf","acknowledgedDate","requestedDate","cancelledDate","completedDate","completedBy","account","submit","first","iteration","disableExam","trusted","getDateList","input1","input2","input3","input4","thesisInfoService","actionName","approveMessage","showSuccessSubmission","showApproverConfirmation","hideApproverModal","successMessage","checkAssignedExaminer","approveThesis","isUpdateTuitionFee","updateTuitionFees","updateLiabilityStatusModal","tuitionFeesStatus","tuitionFeesEmailSentDate","tuitionFeesChargeDate","tuitionFeesSemester","tuitionFeesYear","otherLiability","setActionName","objectName","cbxForPopup","isselected","checkAdmission","admissionYear","eval","getLastSchoolComment","lastSchoolComment","comment","updateTuitionFeeFlag","getLiabilityStatus","getFinancialLiability","endorsedDate","currentSemesterStartDate","isPreviousChecklistVisible","showHidePreviousChecklist","isStudentConfirmVisible","showHideStudentConfirm","isSupervisorConfirmVisible","showHideSupervisorConfirm","isSupervisorAcknowledgeVisible","showHideSupervisorAcknowledge","isSchoolConfirmVisible","showHideSchoolConfirm","isDeanConfirmVisible","showHideDeanConfirm","isDeanAcknowledgeVisible","showHideDeanAcknowledge","hideDeanSelection","hideCommentEntry","completeChecking","selectedDean","listThesisDean","thesisService","sendExaminationRecommendation","newTitle","newProposedTitle","validate","nt","updateProposedTitle","checkChar","charCodeAt","holdThesis","completeExaminerAppointment","showSuccessRejection","showSupervisorRejectAlert","rejectThesis","rejectMessage","supervisorCloseAlert","releaseHold","currentUserFullName","rerouteThesis","selectDean","hasDocTobeSubmitted","getRecomType","recomTypeForInfoPopup","recomType","recomList","checkIsValid","selected","classificationList","listThesisDocumentToBeSubmittedToSchool","hideDocIds","unhideDocIds","submitExam","recomTypeData","oral","oralExamDate","isMoreThan","selectedDate","currentDate","submitOralExam","submitAmd","firstSubmit","terminationMessage","terminateThesis","getThesisInfo","thesisInfo","supervisors","oralPanels","hasRejectionMessages","hasRejectionMessage","degreeAuditUrl","isThesisDataLoaded","checkboxForInfoPopup","saveCheckboxForInfoPopup","checkboxForInfoPopupApprove","saveRecomTypeForInfoPopup","rejectionMessages","isRequiredDocumentUploaded","examStatus","fullnameFW","rejectionMessage","isExamFeePaid","isPaymentReceiptUploaded","currentDean","defaultDean","canViewRejectionMessages","examFeePaymentStatus","isExceedCandidaturePeriod","maxCandidature","extensionCandidature","date1","date2","diff","cbList","lastStudentCB","lastSupervisorCB","lastDeanCB","lastSchoolCB","lastCB","isDocsAnnotated","firstSubmitModal","titleConfirmModal","submitAmdModal","submitExamModal","approveThesisModal","backToList","checkThesis","checkThesisModal","proceedThesis","proceedThesisModal","selectDeanModal","submitOral","submitOralModal","withdrawThesis","withdrawThesisModal","rejectThesisModal","rejectThesisConfirm","rejectThesisConfirmModal","completeThesis","completeThesisModal","viewRejection","viewRejectionModal","viewRecommendation","viewSchoolComments","viewSchoolCommentModal","holdThesisModal","rerouteThesisModal","terminateThesisModal","releaseThesis","releaseThesisModal","updateThesisNotes","getExaminerPopover","getOralPanelPopover","panelis","alias","getSupervisorPopover","supervisor","getDeanPopover","fullName","cancelProposedTitle","countExaminer","increaseCount","reloadHistory","reloadDocHistory","reloadExamination","reloadDocument","getRecommendationList","ids2","updateFinancialLiability","liabilityStatus","getSchoolComments","checkRequiredDocumentsIsUploaded","listProcessHistory","editTuitionFees","showConfirmation","lastTeachingWeek2Date","financialLiabilityCheckResult","semesterChargeDate","confirmEdit","showOtherLiability","recommendations","comments","docId","listDocumentUsers","thesisUsers","docUsers","addReadPermission","removeReadPermission","isAnnotated","listUserThesisDocumentPermission","downloadThesisDocument","findNonCurrentRequiredDocument","getRequiredDocumentCompleted","currentNonRequiredProcessDocuments","thesisDocumentListData","uploadedRequiredDocIds","retry","setTimeout","docsUnderExamination","checkbox","svCB","fileMessaage","viewDocPermissions","viewDocPermissionsModal","buildQueryInfo","hasAnnotation","documentTypeList","saveDocumentTypeData","dataDocumentType","documentTypeListData","addDocument","addDocumentModal","docTypes","thesisDocumentListCompleted","thesisDocumentList","cfn","doctype","thesisSchoolDocumentList","saveThesisDocumentData","dataThesisDocument","listClass","listDocTypeForFilter","listDocProcessForFilter","classes","collapsed","documentTypeListForFilter","documentProcessListForFilter","clearDocprocessFilter","currentDocprocess","currentDocprocessFlag","itemselectedDocprocess","getClassDocprocess","clearDoctypeFilter","currentDoctypeFilter","itemselectedDoctypeFilter","getClassDoctypeFilter","isLockedThesisDocument","deleteThesisDocumentModal","docTitle","isCurrent","getExaminerTitle","currentAction","currentUser","currentCategory","loadProcessHistory","events","clearCategoryFilter","selectCategory","getClassCategory","clearUserFilter","selectUser","getClassUser","clearActionFilter","selectAction","getClassAction","selectProcess","categories","actions","processes","initSortAndSearchByList","atmCB","submissionDateLbl","submission","submissionDateStart","submissionDateEnd","clearSubmissionDateRange","okSubmissionDateRange","wfstatusListFunc","dataStudentStatus","currentStudentStatus","studentStatusFilterClass","studentStatusList","itemSelectedStudentStatus","getClassStudentStatus","clearStudentStatusFilter","schoolListFunc","userLogin","thesiss","sortByEvaluated","getExaminerList","ExaminerTitle","examinerTitle","isExaminerDocument","currentType","currentDocumentType","fileModel","modelSetter","assign","examinerService","deleteModal","remove","isCurrentUser","resetPasswordModal","userForm","isUserExist","editModal"],"mappings":"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","file":"app.js","sourcesContent":["/*!\r\n angular-block-ui v0.2.1\r\n (c) 2015 (null) McNull https://github.com/McNull/angular-block-ui\r\n License: MIT\r\n*/\r\n(function(angular) {\r\n\r\nvar blkUI = angular.module('blockUI', []);\r\n\r\nblkUI.config([\"$provide\", \"$httpProvider\", function ($provide, $httpProvider) {\r\n\r\n $provide.decorator('$exceptionHandler', ['$delegate', '$injector',\r\n function ($delegate, $injector) {\r\n var blockUI, blockUIConfig;\r\n\r\n return function (exception, cause) {\r\n\r\n blockUIConfig = blockUIConfig || $injector.get('blockUIConfig');\r\n\r\n if (blockUIConfig.resetOnException) {\r\n try {\r\n blockUI = blockUI || $injector.get('blockUI');\r\n blockUI.instances.reset();\r\n } catch (ex) {\r\n console.log('$exceptionHandler', exception);\r\n }\r\n }\r\n\r\n $delegate(exception, cause);\r\n };\r\n }\r\n ]);\r\n\r\n $httpProvider.interceptors.push('blockUIHttpInterceptor');\r\n}]);\r\n\r\nblkUI.run([\"$document\", \"blockUIConfig\", \"$templateCache\", function ($document, blockUIConfig, $templateCache) {\r\n if (blockUIConfig.autoInjectBodyBlock) {\r\n $document.find('body').attr('block-ui', 'main');\r\n }\r\n\r\n if (blockUIConfig.template) {\r\n\r\n // Swap the builtin template with the custom template.\r\n // Create a magic cache key and place the template in the cache.\r\n\r\n blockUIConfig.templateUrl = '$$block-ui-template$$';\r\n $templateCache.put(blockUIConfig.templateUrl, blockUIConfig.template);\r\n }\r\n}]);\r\n\r\nfunction moduleLoaded(name) {\r\n try {\r\n angular.module(name);\r\n } catch(ex) {\r\n return false;\r\n }\r\n return true;\r\n}\r\nblkUI.config([\"$provide\", function ($provide) {\r\n $provide.decorator('$location', decorateLocation);\r\n}]);\r\n\r\nvar decorateLocation = [\r\n '$delegate', 'blockUI', 'blockUIConfig',\r\n function ($delegate, blockUI, blockUIConfig) {\r\n\r\n if (blockUIConfig.blockBrowserNavigation) {\r\n\r\n blockUI.$_blockLocationChange = true;\r\n\r\n var overrides = ['url', 'path', 'search', 'hash', 'state'];\r\n\r\n function hook(f) {\r\n var s = $delegate[f];\r\n $delegate[f] = function () {\r\n\r\n // console.log(f, Date.now(), arguments);\r\n\r\n var result = s.apply($delegate, arguments);\r\n\r\n // The call was a setter if the $location service is returned.\r\n\r\n if (result === $delegate) {\r\n\r\n // Mark the mainblock ui to allow the location change.\r\n\r\n blockUI.$_blockLocationChange = false;\r\n }\r\n\r\n return result;\r\n };\r\n }\r\n\r\n angular.forEach(overrides, hook);\r\n\r\n }\r\n\r\n return $delegate;\r\n}];\r\n\r\n// Called from block-ui-directive for the 'main' instance.\r\n\r\nfunction blockNavigation($scope, mainBlockUI, blockUIConfig) {\r\n\r\n if (blockUIConfig.blockBrowserNavigation) {\r\n\r\n function registerLocationChange() {\r\n\r\n $scope.$on('$locationChangeStart', function (event) {\r\n\r\n // console.log('$locationChangeStart', mainBlockUI.$_blockLocationChange + ' ' + mainBlockUI.state().blockCount);\r\n\r\n if (mainBlockUI.$_blockLocationChange && mainBlockUI.state().blockCount > 0) {\r\n event.preventDefault();\r\n }\r\n });\r\n\r\n $scope.$on('$locationChangeSuccess', function () {\r\n mainBlockUI.$_blockLocationChange = blockUIConfig.blockBrowserNavigation;\r\n\r\n // console.log('$locationChangeSuccess', mainBlockUI.$_blockLocationChange + ' ' + mainBlockUI.state().blockCount);\r\n });\r\n }\r\n\r\n if (moduleLoaded('ngRoute')) {\r\n\r\n // After the initial content has been loaded we'll spy on any location\r\n // changes and discard them when needed.\r\n\r\n var fn = $scope.$on('$viewContentLoaded', function () {\r\n\r\n // Unhook the view loaded and hook a function that will prevent\r\n // location changes while the block is active.\r\n\r\n fn();\r\n registerLocationChange();\r\n\r\n });\r\n\r\n } else {\r\n registerLocationChange();\r\n }\r\n\r\n }\r\n}\r\nblkUI.directive('blockUiContainer', [\"blockUIConfig\", \"blockUiContainerLinkFn\", function (blockUIConfig, blockUiContainerLinkFn) {\r\n return {\r\n scope: true,\r\n restrict: 'A',\r\n templateUrl: blockUIConfig.templateUrl,\r\n compile: function($element) {\r\n return blockUiContainerLinkFn;\r\n }\r\n };\r\n}]).factory('blockUiContainerLinkFn', [\"blockUI\", \"blockUIUtils\", function (blockUI, blockUIUtils) {\r\n\r\n return function ($scope, $element, $attrs) {\r\n\r\n var srvInstance = $element.inheritedData('block-ui');\r\n\r\n if (!srvInstance) {\r\n throw new Error('No parent block-ui service instance located.');\r\n }\r\n\r\n // Expose the state on the scope\r\n\r\n $scope.state = srvInstance.state();\r\n\r\n// $scope.$watch('state.blocking', function(value) {\r\n// $element.toggleClass('block-ui-visible', !!value);\r\n// });\r\n//\r\n// $scope.$watch('state.blockCount > 0', function(value) {\r\n// $element.toggleClass('block-ui-active', !!value);\r\n// });\r\n };\r\n}]);\r\nblkUI.directive('blockUi', [\"blockUiCompileFn\", function (blockUiCompileFn) {\r\n\r\n return {\r\n scope: true,\r\n restrict: 'A',\r\n compile: blockUiCompileFn\r\n };\r\n\r\n}]).factory('blockUiCompileFn', [\"blockUiPreLinkFn\", function (blockUiPreLinkFn) {\r\n\r\n return function ($element, $attrs) {\r\n\r\n // Class should be added here to prevent an animation delay error.\r\n\r\n $element.append('
');\r\n\r\n return {\r\n pre: blockUiPreLinkFn\r\n };\r\n\r\n };\r\n\r\n}]).factory('blockUiPreLinkFn', [\"blockUI\", \"blockUIUtils\", \"blockUIConfig\", function (blockUI, blockUIUtils, blockUIConfig) {\r\n\r\n return function ($scope, $element, $attrs) {\r\n\r\n // If the element does not have the class \"block-ui\" set, we set the\r\n // default css classes from the config.\r\n\r\n if (!$element.hasClass('block-ui')) {\r\n $element.addClass(blockUIConfig.cssClass);\r\n }\r\n\r\n // Expose the blockUiMessageClass attribute value on the scope\r\n\r\n $attrs.$observe('blockUiMessageClass', function (value) {\r\n $scope.$_blockUiMessageClass = value;\r\n });\r\n\r\n // Create the blockUI instance\r\n // Prefix underscore to prevent integers:\r\n // https://github.com/McNull/angular-block-ui/pull/8\r\n\r\n var instanceId = $attrs.blockUi || '_' + $scope.$id;\r\n var srvInstance = blockUI.instances.get(instanceId);\r\n\r\n // If this is the main (topmost) block element we'll also need to block any\r\n // location changes while the block is active.\r\n\r\n if (instanceId === 'main') {\r\n blockNavigation($scope, srvInstance, blockUIConfig);\r\n } else {\r\n // Locate the parent blockUI instance\r\n var parentInstance = $element.inheritedData('block-ui');\r\n\r\n if (parentInstance) {\r\n // TODO: assert if parent is already set to something else\r\n srvInstance._parent = parentInstance;\r\n }\r\n }\r\n\r\n // Ensure the instance is released when the scope is destroyed\r\n\r\n $scope.$on('$destroy', function () {\r\n srvInstance.release();\r\n });\r\n\r\n // Increase the reference count\r\n\r\n srvInstance.addRef();\r\n\r\n // Expose the state on the scope\r\n\r\n $scope.$_blockUiState = srvInstance.state();\r\n\r\n $scope.$watch('$_blockUiState.blocking', function (value) {\r\n // Set the aria-busy attribute if needed\r\n $element.attr('aria-busy', !!value);\r\n $element.toggleClass('block-ui-visible', !!value);\r\n });\r\n\r\n $scope.$watch('$_blockUiState.blockCount > 0', function (value) {\r\n $element.toggleClass('block-ui-active', !!value);\r\n });\r\n\r\n // If a pattern is provided assign it to the state\r\n\r\n var pattern = $attrs.blockUiPattern;\r\n\r\n if (pattern) {\r\n var regExp = blockUIUtils.buildRegExp(pattern);\r\n srvInstance.pattern(regExp);\r\n }\r\n\r\n // Store a reference to the service instance on the element\r\n\r\n $element.data('block-ui', srvInstance);\r\n\r\n };\r\n\r\n}]);\r\n//.factory('blockUiPostLinkFn', function(blockUIUtils) {\r\n//\r\n// return function($scope, $element, $attrs) {\r\n//\r\n// var $message;\r\n//\r\n// $attrs.$observe('blockUiMessageClass', function(value) {\r\n//\r\n// $message = $message || blockUIUtils.findElement($element, function($e) {\r\n// return $e.hasClass('block-ui-message');\r\n// });\r\n//\r\n// $message.addClass(value);\r\n//\r\n// });\r\n// };\r\n//\r\n//});\r\nblkUI.constant('blockUIConfig', {\r\n templateUrl: 'angular-block-ui/angular-block-ui.ng.html',\r\n delay: 250,\r\n message: \"Loading ...\",\r\n autoBlock: true,\r\n resetOnException: true,\r\n requestFilter: angular.noop,\r\n autoInjectBodyBlock: true,\r\n cssClass: 'block-ui block-ui-anim-fade',\r\n blockBrowserNavigation: false\r\n});\r\n\r\n\r\nblkUI.factory('blockUIHttpInterceptor', [\"$q\", \"$injector\", \"blockUIConfig\", \"$templateCache\", function($q, $injector, blockUIConfig, $templateCache) {\r\n\r\n var blockUI;\r\n\r\n function injectBlockUI() {\r\n blockUI = blockUI || $injector.get('blockUI');\r\n }\r\n\r\n function stopBlockUI(config) {\r\n if (blockUIConfig.autoBlock && (config && !config.$_noBlock && config.$_blocks)) {\r\n injectBlockUI();\r\n config.$_blocks.stop();\r\n }\r\n }\r\n\r\n function error(rejection) {\r\n\r\n try {\r\n stopBlockUI(rejection.config);\r\n } catch(ex) {\r\n console.log('httpRequestError', ex);\r\n }\r\n\r\n return $q.reject(rejection);\r\n }\r\n\r\n return {\r\n request: function(config) {\r\n\r\n // Only block when autoBlock is enabled ...\r\n // ... and the request doesn't match a cached template.\r\n\r\n if (blockUIConfig.autoBlock &&\r\n !(config.method == 'GET' && $templateCache.get(config.url))) {\r\n for (x in blockUIConfig.excludedUrls){\r\n if (config.url.indexOf(blockUIConfig.excludedUrls[x])>-1){\r\n return config;\r\n }\r\n }\r\n // Don't block excluded requests\r\n\r\n var result = blockUIConfig.requestFilter(config);\r\n\r\n if (result === false) {\r\n // Tag the config so we don't unblock this request\r\n config.$_noBlock = true;\r\n } else {\r\n\r\n injectBlockUI();\r\n\r\n config.$_blocks = blockUI.instances.locate(config);\r\n config.$_blocks.start(result);\r\n }\r\n }\r\n\r\n return config;\r\n },\r\n\r\n requestError: error,\r\n\r\n response: function(response) {\r\n\r\n // If the connection to the website goes down the response interceptor gets and error with \"cannot read property config of null\".\r\n // https://github.com/McNull/angular-block-ui/issues/53\r\n\r\n if(response) {\r\n stopBlockUI(response.config);\r\n }\r\n\r\n return response;\r\n },\r\n\r\n responseError: error\r\n };\r\n\r\n}]);\r\n\r\nblkUI.factory('blockUI', [\"blockUIConfig\", \"$timeout\", \"blockUIUtils\", \"$document\", function(blockUIConfig, $timeout, blockUIUtils, $document) {\r\n\r\n var $body = $document.find('body');\r\n \r\n // These properties are not allowed to be specified in the start method.\r\n var reservedStateProperties = ['id', 'blockCount', 'blocking'];\r\n \r\n function BlockUI(id) {\r\n\r\n var self = this;\r\n\r\n var state = {\r\n id: id,\r\n blockCount: 0,\r\n message: blockUIConfig.message,\r\n blocking: false\r\n }, startPromise, doneCallbacks = [];\r\n\r\n this._id = id;\r\n\r\n this._refs = 0;\r\n\r\n this.start = function(messageOrOptions) {\r\n \r\n messageOrOptions = messageOrOptions || {};\r\n \r\n if(angular.isString(messageOrOptions)) {\r\n messageOrOptions = {\r\n message: messageOrOptions\r\n };\r\n } else {\r\n angular.forEach(reservedStateProperties, function(x) {\r\n if(messageOrOptions[x]) {\r\n throw new Error('The property ' + x + ' is reserved for the block state.');\r\n }\r\n });\r\n } \r\n \r\n angular.extend(state, messageOrOptions);\r\n \r\n if(state.blockCount > 0) {\r\n state.message = messageOrOptions.message || state.message || blockUIConfig.message;\r\n } else {\r\n state.message = messageOrOptions.message || blockUIConfig.message;\r\n }\r\n \r\n // if(state.blockCount > 0) {\r\n // messageOrOptions = messageOrOptions || state.message || blockUIConfig.message;\r\n // } else {\r\n // messageOrOptions = messageOrOptions || blockUIConfig.message;\r\n // }\r\n\r\n // state.message = messageOrOptions;\r\n\r\n state.blockCount++;\r\n\r\n // Check if the focused element is part of the block scope\r\n\r\n var $ae = angular.element($document[0].activeElement);\r\n\r\n if($ae.length && blockUIUtils.isElementInBlockScope($ae, self)) {\r\n\r\n // Let the active element lose focus and store a reference \r\n // to restore focus when we're done (reset)\r\n\r\n self._restoreFocus = $ae[0];\r\n\r\n // https://github.com/McNull/angular-block-ui/issues/13\r\n // http://stackoverflow.com/questions/22698058/apply-already-in-progress-error-when-using-typeahead-plugin-found-to-be-relate\r\n // Queue the blur after any ng-blur expression.\r\n\r\n $timeout(function() {\r\n // Ensure we still need to blur\r\n // Don't restore if active element is body, since this causes IE to switch windows (see http://tjvantoll.com/2013/08/30/bugs-with-document-activeelement-in-internet-explorer/)\r\n if (self._restoreFocus && self._restoreFocus !== $body[0]) {\r\n self._restoreFocus.blur();\r\n }\r\n });\r\n }\r\n\r\n if (!startPromise && blockUIConfig.delay !== 0) {\r\n startPromise = $timeout(block, blockUIConfig.delay);\r\n } else if (blockUIConfig.delay === 0) {\r\n block();\r\n }\r\n\r\n function block () {\r\n startPromise = null;\r\n state.blocking = true;\r\n }\r\n };\r\n\r\n this._cancelStartTimeout = function() {\r\n if (startPromise) {\r\n $timeout.cancel(startPromise);\r\n startPromise = null;\r\n }\r\n };\r\n\r\n this.stop = function() {\r\n state.blockCount = Math.max(0, --state.blockCount);\r\n\r\n if (state.blockCount === 0) {\r\n self.reset(true);\r\n }\r\n };\r\n\r\n this.isBlocking = function () {\r\n return state.blocking;\r\n };\r\n\r\n this.message = function(value) {\r\n state.message = value;\r\n };\r\n\r\n this.pattern = function(regexp) {\r\n if (regexp !== undefined) {\r\n self._pattern = regexp;\r\n }\r\n\r\n return self._pattern;\r\n };\r\n\r\n this.reset = function(executeCallbacks) {\r\n \r\n self._cancelStartTimeout();\r\n state.blockCount = 0;\r\n state.blocking = false;\r\n\r\n // Restore the focus to the element that was active\r\n // before the block start, but not if the user has \r\n // focused something else while the block was active.\r\n\r\n if(self._restoreFocus && \r\n (!$document[0].activeElement || $document[0].activeElement === $body[0])) {\r\n //IE8 will throw if element for setting focus is invisible\r\n try {\r\n self._restoreFocus.focus();\r\n } catch(e1) {\r\n (function () {\r\n var elementToFocus = self._restoreFocus;\r\n $timeout(function() { \r\n if(elementToFocus) { \r\n try { \r\n elementToFocus.focus(); \r\n } catch(e2) { }\r\n } \r\n },100);\r\n })();\r\n }\r\n \r\n self._restoreFocus = null;\r\n }\r\n else {\r\n if(self._restoreFocus && typeof(self._restoreFocus) != \"undefined\")\r\n {\r\n self._restoreFocus.focus();\r\n self._restoreFocus = null;\r\n }\r\n }\r\n \r\n try {\r\n if (executeCallbacks) {\r\n angular.forEach(doneCallbacks, function(cb) {\r\n cb();\r\n });\r\n }\r\n } finally {\r\n doneCallbacks.length = 0;\r\n }\r\n };\r\n\r\n this.done = function(fn) {\r\n doneCallbacks.push(fn);\r\n };\r\n\r\n this.state = function() {\r\n return state;\r\n };\r\n\r\n this.addRef = function() {\r\n self._refs += 1;\r\n };\r\n\r\n this.release = function() {\r\n if(--self._refs <= 0) {\r\n mainBlock.instances._destroy(self);\r\n }\r\n };\r\n }\r\n\r\n var instances = [];\r\n\r\n instances.get = function(id) {\r\n\r\n if(!isNaN(id)) {\r\n throw new Error('BlockUI id cannot be a number');\r\n }\r\n\r\n var instance = instances[id];\r\n\r\n if(!instance) {\r\n // TODO: ensure no array instance trashing [xxx] -- current workaround: '_' + $scope.$id\r\n instance = instances[id] = new BlockUI(id);\r\n instances.push(instance);\r\n }\r\n\r\n return instance;\r\n };\r\n\r\n instances._destroy = function(idOrInstance) {\r\n if (angular.isString(idOrInstance)) {\r\n idOrInstance = instances[idOrInstance];\r\n }\r\n\r\n if (idOrInstance) {\r\n idOrInstance.reset();\r\n\r\n var i = blockUIUtils.indexOf(instances, idOrInstance);\r\n instances.splice(i, 1);\r\n\r\n delete instances[idOrInstance.state().id];\r\n }\r\n };\r\n \r\n instances.locate = function(request) {\r\n\r\n var result = [];\r\n\r\n // Add function wrappers that will be executed on every item\r\n // in the array.\r\n \r\n blockUIUtils.forEachFnHook(result, 'start');\r\n blockUIUtils.forEachFnHook(result, 'stop');\r\n\r\n var i = instances.length;\r\n\r\n while(i--) {\r\n var instance = instances[i];\r\n var pattern = instance._pattern;\r\n\r\n if(pattern && pattern.test(request.url)) {\r\n result.push(instance);\r\n }\r\n }\r\n\r\n if(result.length === 0) {\r\n result.push(mainBlock);\r\n }\r\n\r\n return result;\r\n };\r\n\r\n // Propagate the reset to all instances\r\n\r\n blockUIUtils.forEachFnHook(instances, 'reset');\r\n\r\n var mainBlock = instances.get('main');\r\n\r\n mainBlock.addRef();\r\n mainBlock.instances = instances;\r\n\r\n return mainBlock;\r\n}]);\r\n\r\n\r\nblkUI.factory('blockUIUtils', function() {\r\n\r\n var $ = angular.element;\r\n\r\n var utils = {\r\n buildRegExp: function(pattern) {\r\n var match = pattern.match(/^\\/(.*)\\/([gim]*)$/), regExp;\r\n\r\n if(match) {\r\n regExp = new RegExp(match[1], match[2]);\r\n } else {\r\n throw Error('Incorrect regular expression format: ' + pattern);\r\n }\r\n\r\n return regExp;\r\n },\r\n forEachFn: function(arr, fnName, args) {\r\n var i = arr.length;\r\n while(i--) {\r\n var t = arr[i];\r\n t[fnName].apply(t, args);\r\n }\r\n },\r\n forEachFnHook: function(arr, fnName) {\r\n arr[fnName] = function() {\r\n utils.forEachFn(this, fnName, arguments);\r\n }\r\n },\r\n isElementInBlockScope: function($element, blockScope) {\r\n var c = $element.inheritedData('block-ui');\r\n\r\n while(c) {\r\n if(c === blockScope) {\r\n return true;\r\n }\r\n\r\n c = c._parent;\r\n }\r\n\r\n return false;\r\n },\r\n findElement: function ($element, predicateFn, traverse) {\r\n var ret = null;\r\n\r\n if (predicateFn($element)) {\r\n ret = $element;\r\n } else {\r\n\r\n var $elements;\r\n\r\n if (traverse) {\r\n $elements = $element.parent();\r\n } else {\r\n $elements = $element.children();\r\n }\r\n\r\n var i = $elements.length;\r\n while (!ret && i--) {\r\n ret = utils.findElement($($elements[i]), predicateFn, traverse);\r\n }\r\n }\r\n\r\n return ret;\r\n },\r\n indexOf: function(arr, obj, start) {\r\n// if(Array.prototype.indexOf) {\r\n// return arr.indexOf(obj, start);\r\n// }\r\n\r\n for (var i = (start || 0), j = arr.length; i < j; i++) {\r\n if (arr[i] === obj) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n }\r\n };\r\n\r\n return utils;\r\n\r\n});\r\n// Automatically generated.\r\n// This file is already embedded in your main javascript output, there's no need to include this file\r\n// manually in the index.html. This file is only here for your debugging pleasures.\r\nangular.module('blockUI').run(['$templateCache', function($templateCache){\r\n $templateCache.put('angular-block-ui/angular-block-ui.ng.html', '
{{ state.message }}
');\r\n}]);\r\n})(angular);\r\n//# sourceMappingURL=angular-block-ui.js.map","var invo = angular.module('App', ['ui.router','ui.bootstrap','ngMessages','ngSanitize','datepicker','blockUI','ngCkeditor']);\r\ninvo.constant('appVersion', '62');\r\ninvo.config(function($stateProvider, $urlRouterProvider,appVersion,blockUIConfig) {\r\n //\r\n // For any unmatched url, redirect to /state1\r\n $urlRouterProvider.otherwise(\"/app\");\r\n blockUIConfig.autoBlock = true;\r\n blockUIConfig.excludedUrls=['listNonLecturer','listStaffToReroute','listAcademic']\r\n // Now set up the states\r\n $stateProvider\r\n .state('login', {\r\n url: '/login',\r\n templateUrl: './component/login/login.html?ver='+appVersion\r\n })\r\n .state('activation', {\r\n url: '/activation?email&token',\r\n templateUrl: './component/login/activation.html?ver='+appVersion\r\n })\r\n .state('resetPassword', {\r\n url: '/resetPassword?email&token&isExpired',\r\n templateUrl: './component/login/reset-password.html?ver='+appVersion\r\n })\r\n .state('app', {\r\n url: '/app',\r\n templateUrl: './app/main.html?ver='+appVersion\r\n })\r\n .state('instruction', {\r\n url: '/instruction/:id',\r\n templateUrl: './app/instruction/examiner-instruction/instruction.html?ver='+appVersion\r\n })\r\n});\r\n\r\ninvo.run(function ($rootScope,$state,auth,global,appVersion) {\r\n //Login component Configuration\r\n $rootScope.appVersion=appVersion;\r\n\t$rootScope.serverUrl = global.getServerUrl();\r\n $rootScope.routesThatDontRequireAuth = ['login','activation','resetPassword'];\r\n $rootScope.loginState='login';\r\n $rootScope.loginPath='/login';\r\n $rootScope.mainAppState='app';\r\n $rootScope.initialStateAfterLogin = 'app.thesis';\r\n $rootScope.isProduction = true;\r\n global.getEnvironment().then(function(response){\r\n $rootScope.isProduction=response.data.data.isProduction;\r\n });\r\n\r\n\r\n //Uncomment this portion if you want to have the session expired\r\n $rootScope.timeoutMillis=1800000;\r\n\r\n //Listen to user inactivity event that published by login component\r\n $rootScope.$on(\"timeout\",function(){\r\n if ($state.$current.name != $rootScope.loginState){\r\n if (auth.session.isExaminer()) {\r\n auth.logout().then(function (data) {\r\n auth.session.isSessionExpired = true;\r\n $state.transitionTo($rootScope.loginState);\r\n });\r\n }\r\n }\r\n });\r\n\r\n});","invo.controller('ActivationController',function($scope,auth,userService,$stateParams){\r\n $scope.email=$stateParams.email;\r\n $scope.token=$stateParams.token;\r\n $scope.password=\"\";\r\n $scope.confirm=\"\";\r\n $scope.activationSuccess=false;\r\n $scope.activationFailed=false;\r\n $scope.sendUrlFailed=false;\r\n $scope.sendUrlSuccess=false;\r\n $scope.showNewUrlForm=false;\r\n $scope.type='Activation';\r\n $scope.active=false;\r\n\r\n $scope.showRequestForm=function(){\r\n $scope.showNewUrlForm=!$scope.showNewUrlForm;\r\n }\r\n\r\n $scope.hasNotification=function(){\r\n return $scope.activationSuccess || $scope.activationFailed || $scope.sendUrlFailed || $scope.sendUrlSuccess;\r\n }\r\n $scope.activate = function(){\r\n $scope.activationSuccess=false;\r\n $scope.activationFailed=false;\r\n $scope.sendUrlFailed=false;\r\n $scope.sendUrlSuccess=false;\r\n auth.activate($scope.email,$scope.password,$scope.confirm,$scope.token)\r\n .then(function(response){\r\n if (response.data.message.code=='exception.profile.invalid.same.password') {\r\n $scope.invalidSamePassword = true;\r\n } else if (response.data.message.code=='exception.profile.failed.authentication') {\r\n $scope.invalidAuthentication = true;\r\n } else {\r\n $scope.activationSuccess = true;\r\n $scope.password = \"\";\r\n $scope.confirm = \"\";\r\n $scope.loginForm.$setPristine();\r\n }\r\n }).catch(function(response){\r\n $scope.activationFailed=true;\r\n $scope.password=\"\";\r\n $scope.confirm=\"\";\r\n });\r\n\r\n }\r\n $scope.checkToken= function(){\r\n $scope.activationSuccess=false;\r\n $scope.activationFailed=false;\r\n $scope.sendUrlFailed=false;\r\n $scope.sendUrlSuccess=false;\r\n auth.checkToken($scope.email,$scope.type,$scope.token)\r\n .then(function(response){\r\n if (!response.data.data.isValid){\r\n $scope.activationFailed=true;\r\n }\r\n }).catch(function(response){\r\n $scope.activationFailed=true;\r\n });\r\n }\r\n\r\n $scope.sendNewActivationUrl = function(){\r\n $scope.activationSuccess=false;\r\n $scope.activationFailed=false;\r\n $scope.sendUrlFailed=false;\r\n $scope.sendUrlSuccess=false;\r\n auth.sendActivationUrl($scope.email)\r\n .then(function(response){\r\n $scope.sendUrlSuccess=true;\r\n })\r\n .catch(function(response){\r\n $scope.sendUrlFailed=true;\r\n });\r\n $scope.showNewUrlForm=false;\r\n }\r\n\r\n $scope.isAccountActive = function(){\r\n auth.checkUserActive($scope.email)\r\n .then(function(response){\r\n if(response.data.data.availability){\r\n if(response.data.data.availability==1){\r\n $scope.active = true;\r\n }else if (response.data.data.availability==0){\r\n $scope.checkToken($scope.email, $scope.token)\r\n }\r\n }\r\n else $scope.checkToken($scope.email, $scope.token);\r\n })\r\n }\r\n\r\n $scope.isAccountActive()\r\n //$scope.checkToken($scope.email,$scope.token);\r\n\r\n $scope.checkWhiteSpace = function () {\r\n $scope.invalidAuthentication = false;\r\n $scope.invalidSamePassword = false;\r\n if ($scope.password.indexOf(' ') > -1) {\r\n $scope.password = '';\r\n alert(\"Password cannot contain whitespace !\");\r\n }\r\n }\r\n});\r\n","invo.factory('auth',function($http,notify,$rootScope,$q,userProfileService,companyProfileService,$state){\r\n var session={};\r\n session.user={};\r\n session.roles={};\r\n session.company={};\r\n session.isLoggedIn = false;\r\n session.isAdmin = false;\r\n session.isView = false;\r\n session.isSysAdmin = false;\r\n session.isLastLoginFailed=false;\r\n session.isNotAuthorized=false;\r\n session.isSessionExpired=false;\r\n session.isAccountLocked=false;//for attempts login\r\n session.isPasswordExpired=false;//for password expired\r\n session.isStudent=function(){return hasRole('ROLE_COM_STUDENT');}\r\n session.isExaminer=function(){return hasRole('ROLE_COM_EXTERNAL_USER');}\r\n session.isSchoolAdmin=function(){return hasRole('ROLE_COM_SCHOOL_ADMIN');}\r\n session.isOASAdmin=function(){return hasRole('ROLE_COM_OAS_ADMIN');}\r\n session.isSchoolStaff=function(){return hasRole('ROLE_COM_SCHOOL_STAFF');}\r\n session.isOASStaff=function(){return hasRole('ROLE_COM_OAS_STAFF');}\r\n session.isSchoolDean=function(){return hasRole('ROLE_COM_SCHOOL_DEAN');}\r\n session.isAcadStaff=function(){return hasRole('ROLE_COM_ACAD_STAFF');}\r\n\r\n var clearSession=function(){\r\n session.isLoggedIn = false;\r\n session.user={};\r\n session.company={};\r\n session.roles={};\r\n session.isAdmin = false;\r\n session.isView = false;\r\n session.isSysAdmin = false;\r\n session.isLoaded = false;\r\n $rootScope.$broadcast('logout');\r\n }\r\n function hasRole(roleAuthority){\r\n var hasRole = false;\r\n angular.forEach(session.roles,function(role,key){\r\n if (role.authority===roleAuthority) {\r\n hasRole=true;\r\n }\r\n })\r\n return hasRole;\r\n }\r\n\r\n var determineRolePrivilege= function(){\r\n session.isAdmin = false;\r\n session.isView = false;\r\n session.isSysAdmin = false;\r\n angular.forEach(session.roles,function(role,key){\r\n if (role.authority == \"ROLE_SYS_ADMIN\"){\r\n session.isAdmin=true;session.isSysAdmin=true;session.isView=false;\r\n }\r\n if (role.authority == \"ROLE_COM_ADMIN\" && !session.isSysAdmin){\r\n session.isAdmin=true;session.isView=false;\r\n }\r\n if (role.authority == \"ROLE_COM_VIEW\" && !session.isSysAdmin && !session.isAdmin){\r\n session.isView=true;\r\n }\r\n });\r\n }\r\n\r\n var loadSession=function(){\r\n var deferred = $q.defer();\r\n session.isLoggedIn = true;\r\n $q.all([\r\n userProfileService.get().then(function(response){\r\n session.user = response.data.data.user;\r\n session.roles= response.data.data.roles;\r\n determineRolePrivilege();\r\n }),\r\n //companyProfileService.get().then(function(response){\r\n // session.company = response.data.data.company;\r\n //})\r\n ]).then(function(){\r\n session.isLoaded = true;\r\n $rootScope.$broadcast('login')\r\n session.isLastLoginFailed = false;\r\n session.isNotAuthorized = false;\r\n session.isSessionExpired = false;\r\n session.isAccountLocked = false;\r\n session.isPasswordExpired = false;\r\n deferred.resolve(true);\r\n session.isExaminer=function(){return hasRole('ROLE_COM_EXTERNAL_USER');}\r\n session.isAcadStaff=function(){return hasRole('ROLE_COM_ACAD_STAFF');}\r\n });\r\n return deferred.promise;\r\n }\r\n\r\n return {\r\n login : function(user,password,rememberMe){\r\n var url = $rootScope.serverUrl+\"j_spring_security_check?j_username=\"+encodeURIComponent(user)+\"&j_password=\"+encodeURIComponent(password)+\"&ajax=true\";\r\n if(rememberMe==true){\r\n url= url +\"&_spring_security_remember_me=on\";\r\n }\r\n return $http.post(url).\r\n then(function(response){\r\n if (response.data.message.code!=\"default.authentication.login.passwordExpired\") {\r\n loadSession();\r\n }\r\n return response;\r\n }).\r\n catch(function(response){\r\n clearSession();\r\n //clear first\r\n session.isAccountLocked = false;\r\n session.isPasswordExpired = false;\r\n\r\n session.isLastLoginFailed=true;\r\n if (response.data.message.code=='default.authentication.login.locked') {\r\n session.isAccountLocked = true;\r\n } else if (response.data.message.code==\"default.authentication.login.passwordExpired\") {\r\n session.isPasswordExpired = true;\r\n }\r\n throw response;\r\n });\r\n }\r\n ,\r\n logout : function(){\r\n return $http.post($rootScope.serverUrl+\"j_spring_security_logout?ajax=true\").\r\n then(function(response){\r\n clearSession();\r\n return response;\r\n }).\r\n catch(function(response){\r\n clearSession();\r\n throw response;\r\n });\r\n },\r\n check: function(){\r\n return $http.post($rootScope.serverUrl+\"Login/check\").\r\n then(function(response){\r\n loadSession();\r\n return response;\r\n }).\r\n catch(function(response){\r\n if(session.isLoggedIn) {\r\n clearSession();\r\n }\r\n throw response;\r\n });\r\n\r\n },\r\n activate: function(email,password,confirm,token){\r\n return $http.post($rootScope.serverUrl+\"Login/activate?email=\"+encodeURIComponent(email)+\"&password=\"+encodeURIComponent(password)+\"&confirm=\"+encodeURIComponent(confirm)+\"&token=\"+encodeURIComponent(token));\r\n },\r\n sendActivationUrl: function(email){\r\n return $http.get($rootScope.serverUrl+\"Login/sendActivationUrl?email=\"+encodeURIComponent(email));\r\n },\r\n sendResetPasswordUrl: function(email){\r\n return $http.get($rootScope.serverUrl+\"Login/sendResetPasswordUrl?email=\"+encodeURIComponent(email));\r\n },\r\n resetPassword: function(email,password,confirm,token){\r\n return $http.post($rootScope.serverUrl+\"Login/resetPassword?email=\"+encodeURIComponent(email)+\"&password=\"+encodeURIComponent(password)+\"&confirm=\"+encodeURIComponent(confirm)+\"&token=\"+encodeURIComponent(token));\r\n },\r\n checkToken: function(email,type,token){\r\n return $http.get($rootScope.serverUrl+\"Login/checkToken?email=\"+encodeURIComponent(email)+\"&type=\"+encodeURIComponent(type)+\"&token=\"+encodeURIComponent(token));\r\n },\r\n changeExpiredPassword: function(id,newp,confirmp){\r\n return $http.get($rootScope.serverUrl+\"Login/changePassword?id=\" + id+\"&newp=\"+encodeURIComponent(newp)+\"&confirmp=\"+encodeURIComponent(confirmp)).\r\n then(function(response){\r\n session.isLastLoginFailed = false;\r\n session.isPasswordExpired = false;\r\n return response;\r\n }).\r\n catch(function(response){\r\n\r\n throw response;\r\n });\r\n },\r\n checkUserActive: function(email){\r\n return $http.get($rootScope.serverUrl+\"Login/checkUserActive?email=\"+encodeURIComponent(email))\r\n .then(function(response) {\r\n return response;\r\n });\r\n },\r\n session: session\r\n }\r\n});\r\n\r\n","invo.factory('companyProfileService',function($http,notify,$rootScope,$q){\r\n\treturn {\r\n\t\tget : function(){\r\n\t\t\t return $http.get($rootScope.serverUrl+\"CompanyProfile/viewCompanyProfile\")\r\n\t\t},\r\n update : function(company){\r\n //var deferred = $q.defer();\r\n //var formData = new FormData();\r\n //angular.forEach(company, function(value, key) {\r\n // if (key!='members' && key != 'subscriptionPlan' && key!='status'){\r\n // if(key == 'baseCurrency' || key == 'fiscalYear' || key == 'mainContact' )\r\n // {\r\n // angular.forEach(value, function(value1, key1) {\r\n // formData.append(key + \".\" + key1, value1);\r\n // });\r\n // }\r\n // else {\r\n // formData.append(key, value);\r\n // }\r\n // }\r\n //});\r\n //$http.post($rootScope.serverUrl+\"CompanyProfile/updateCompanyProfile\",company)\r\n $http.post($rootScope.serverUrl+'CompanyProfile/updateCompanyProfile',requestTransformService(company));\r\n },\r\n changeLogo : function(file,onSuccess,onError,onProgress,onCancelled){\r\n\r\n\t\t\tvar formData = new FormData();\r\n\t\t\t//formData.append('source', 'web');\r\n\t\t\t\r\n\t\t\tformData.append('file', file);\r\n\t\t\t\r\n var xhr = new XMLHttpRequest();\r\n xhr.upload.addEventListener(\"progress\", onProgress, false);\r\n xhr.addEventListener(\"load\", onSuccess, false);\r\n xhr.addEventListener(\"error\", onError, false);\r\n xhr.addEventListener(\"abort\", onCancelled, false);\r\n xhr.open(\"POST\", $rootScope.serverUrl+'CompanyProfile/uploadLogo');\r\n xhr.send(formData);\r\n//\t\t\t$http({method: 'POST', url: $rootScope.serverUrl+'FileImage/upload', data: formData, headers: {'Content-Type': undefined}, transformRequest: angular.identity})\r\n//\t\t\t.success(function(data, status, headers, config) {\r\n//\t\t\t\tonSuccess(data);\r\n//\t\t\t}).\r\n//\t error(function(data,status){\r\n//\t \tnotify.error(data,status);\r\n//\t\t\t});\r\n\r\n\r\n\t\t}\r\n\t}\r\n});","invo.config(function($httpProvider) {\r\n $httpProvider.defaults.headers.post['Content-Type'] = undefined;\r\n $httpProvider.defaults.transformRequest=angular.identity;\r\n $httpProvider.useLegacyPromiseExtensions(true);\r\n $httpProvider.interceptors.push(function ($q, $location, $timeout, $rootScope) {\r\n var sessionTimeOut = null;\r\n return {\r\n // optional method\r\n 'request': function (config) {\r\n // do something on success\r\n return config;\r\n },\r\n\r\n // optional method\r\n 'requestError': function (rejection) {\r\n // do something on error\r\n if (canRecover(rejection)) {\r\n return responseOrNewPromise\r\n }\r\n return $q.reject(rejection);\r\n },\r\n\r\n\r\n // optional method\r\n 'response': function (response) {\r\n if (sessionTimeOut) {\r\n $timeout.cancel(sessionTimeOut);\r\n }\r\n sessionTimeOut = $timeout(function () {\r\n $rootScope.$broadcast('timeout')\r\n }, $rootScope.timeoutMillis);\r\n return response;\r\n },\r\n\r\n // optional method\r\n 'responseError': function (response) {\r\n if (response.status === 403) {\r\n $location.path($rootScope.loginPath);\r\n return $q.reject(response);\r\n }\r\n if (response.status === 401) {\r\n window.location=\"/unauthorized.html\";\r\n }\r\n else {\r\n return $q.reject(response);\r\n }\r\n }\r\n };\r\n });\r\n});\r\n","invo.controller('LoginController',function($scope,auth,userProfileService,roleService,$rootScope,$state,$http,$stateParams,$uibModal,$window){\r\n $scope.session= auth.session;\r\n $scope.j_username=\"\";\r\n $scope.j_password=\"\";\r\n $scope.rememberMe=\"\";\r\n $scope.showNewUrlForm=false;\r\n $scope.sendUrlFailed=false;\r\n $scope.sendUrlSuccess=false;\r\n\r\n $scope.staff = {}\r\n $scope.staff.staffId;\r\n\r\n $scope.student = {}\r\n $scope.student.matricNo;\r\n\r\n $scope.showRequestForm=function(){\r\n $scope.showNewUrlForm=!$scope.showNewUrlForm;\r\n }\r\n\r\n $scope.login = function() {\r\n auth.login($scope.j_username,$scope.j_password,$scope.rememberMe).then(function(data){\r\n $scope.j_username=\"\";\r\n $scope.j_password=\"\";\r\n $scope.rememberMe=\"\";\r\n $scope.loginForm.$setPristine();\r\n if (data.data.message.code=='default.authentication.login.passwordExpired') {\r\n $state.transitionTo('resetPassword',{token:data.data.data.token,email:data.data.data.user.username,isExpired:data.data.data.user.passwordExpired});\r\n } else {\r\n $state.transitionTo('app.examination');\r\n }\r\n },function(data){\r\n if (data.data.message.code=='default.authentication.login.passwordExpired') {\r\n $state.transitionTo('resetPassword', {token:data.data.data.token,email:data.data.data.user.username,isExpired:data.data.data.user.passwordExpired});\r\n\r\n //$scope.changeExpiredPassword(data.data.data.user);\r\n }\r\n });\r\n }\r\n\r\n $scope.sendNewResetPasswordUrl = function(){\r\n $scope.sendUrlFailed=false;\r\n $scope.sendUrlSuccess=false;\r\n auth.sendResetPasswordUrl($scope.email)\r\n .then(function(response){\r\n $scope.sendUrlSuccess=true;\r\n })\r\n .catch(function(response){\r\n $scope.sendUrlFailed=true;\r\n });\r\n $scope.showNewUrlForm=false;\r\n }\r\n\r\n $scope.singleSignOn= function(ssuser){\r\n $http.get($rootScope.serverUrl+\"?\"+ssuser).then(function(){\r\n //alert('login successful');\r\n $state.go($rootScope.mainAppState);\r\n },function(){\r\n alert('login failed');\r\n })\r\n }\r\n\r\n $scope.signedInStudent=function(){\r\n $http.get($rootScope.serverUrl+\"?matricNo=\"+$scope.student.matricNo).then(function(){\r\n //alert('login successful');\r\n $state.go($rootScope.mainAppState);\r\n },function(){\r\n alert('login failed');\r\n })\r\n }\r\n $scope.signedInStaff=function(){\r\n console.log($scope.staff)\r\n $http.get($rootScope.serverUrl+\"?staffId=\"+$scope.staff.staffId).then(function(){\r\n //alert('login successful');\r\n $state.go($rootScope.mainAppState);\r\n },function(){\r\n alert('login failed');\r\n })\r\n }\r\n\r\n $scope.changeExpiredPassword = function(user){\r\n $stateParams.user = user;\r\n var changePasswordModal = $uibModal.open({\r\n templateUrl: './component/login/change-expired-password/change-expired-password.html?ver='+$scope.appVersion,\r\n controller: 'ChangeExpiredPasswordModalController'\r\n });\r\n changePasswordModal.result.then(function (data) {\r\n $window.location.reload();\r\n }, function () {\r\n });\r\n }\r\n});\r\n","/**\r\n * Created by Troy on 5/12/2015.\r\n */\r\ninvo.run(function ($rootScope,$state,auth,global) {\r\n\r\n //Listen to unauthorized access event that published by login component\r\n $rootScope.$on(\"userNotAuthorized\",function(){\r\n if(!auth.session.isLoggedIn){\r\n auth.session.isNotAuthorized = false;\r\n $state.transitionTo($rootScope.loginState);\r\n }\r\n else {\r\n auth.logout().then(function (data) {\r\n auth.session.isNotAuthorized = true;\r\n $state.transitionTo($rootScope.loginState);\r\n });\r\n }\r\n });\r\n\r\n // check if current location matches route\r\n $rootScope.$on('$stateChangeStart', function (ev, to, toParams, from, fromParams) {\r\n if ($rootScope.routesThatDontRequireAuth.indexOf(to.name) < 0) {\r\n if (!auth.session.isLoggedIn) {\r\n var setAsLogin= function (data){\r\n if (to.name == $rootScope.mainAppState) {\r\n //if (data.data.data.user.passwordExpired){\r\n // $rootScope.initialStateAfterLogin = 'resetPassword';\r\n //}\r\n //else\r\n if (data.data.data.user.matriculationNo){\r\n $rootScope.initialStateAfterLogin = 'app.thesis-info';\r\n toParams={id:data.data.data.user.matriculationNo}\r\n }\r\n else if (data.data.data.user.id !=null){\r\n $rootScope.initialStateAfterLogin = 'app.examination';\r\n }\r\n else {\r\n $rootScope.initialStateAfterLogin = 'app.thesis';\r\n }\r\n $state.transitionTo($rootScope.initialStateAfterLogin,toParams);\r\n }\r\n else {\r\n $state.transitionTo(to.name,toParams);\r\n }\r\n }\r\n auth.check().then(function (data) {\r\n setAsLogin(data)\r\n },function(response){\r\n if (response.status==404) {\r\n auth.check().then(function (data) {\r\n setAsLogin(data)\r\n });\r\n }\r\n });\r\n } else {\r\n if (to.name == $rootScope.mainAppState) {\r\n ev.preventDefault();\r\n $state.transitionTo($rootScope.initialStateAfterLogin,toParams);\r\n }\r\n }\r\n }\r\n });\r\n\r\n});","invo.controller('ResetPasswordController',function($scope,auth,$stateParams,$state){\r\n $scope.email=$stateParams.email;\r\n $scope.token=$stateParams.token;\r\n $scope.isExpired=$stateParams.isExpired;\r\n $scope.password=\"\";\r\n $scope.confirm=\"\";\r\n $scope.resetPasswordSuccess=false;\r\n $scope.resetPasswordFailed=false;\r\n $scope.sendUrlFailed=false;\r\n $scope.sendUrlSuccess=false;\r\n $scope.showNewUrlForm=false;\r\n $scope.type='Reset Password';\r\n\r\n $scope.hasNotification=function(){\r\n return $scope.resetPasswordSuccess || $scope.resetPasswordFailed || $scope.sendUrlFailed || $scope.sendUrlSuccess;\r\n }\r\n\r\n $scope.showRequestForm=function(){\r\n $scope.showNewUrlForm=!$scope.showNewUrlForm;\r\n }\r\n\r\n $scope.resetPassword = function(){\r\n $scope.resetPasswordSuccess=false;\r\n $scope.resetPasswordFailed=false;\r\n $scope.sendUrlFailed=false;\r\n $scope.sendUrlSuccess=false;\r\n auth.resetPassword($scope.email,$scope.password,$scope.confirm,$scope.token)\r\n .then(function(response){\r\n if (response.data.message.code=='exception.profile.invalid.same.password') {\r\n $scope.invalidSamePassword = true;\r\n }\r\n else{\r\n console.log(\"login user automatically\");\r\n auth.login($scope.email,$scope.password).then(function(data){\r\n console.log(\"login succcess\");\r\n $state.transitionTo('app.examination');\r\n });\r\n //$scope.resetPasswordSuccess=true;\r\n //$scope.password=\"\";\r\n //$scope.confirm=\"\";\r\n //$scope.loginForm.$setPristine();\r\n }\r\n\r\n })\r\n .catch(function(response){\r\n $scope.resetPasswordFailed=true;\r\n $scope.password=\"\";\r\n $scope.confirm=\"\";\r\n });\r\n\r\n }\r\n $scope.checkToken= function(){\r\n $scope.resetPasswordSuccess=false;\r\n $scope.resetPasswordFailed=false;\r\n $scope.sendUrlFailed=false;\r\n $scope.sendUrlSuccess=false;\r\n auth.checkToken($scope.email,$scope.type,$scope.token)\r\n .then(function(response){\r\n if (!response.data.data.isValid){\r\n $scope.resetPasswordFailed=true;\r\n }\r\n }).catch(function(response){\r\n $scope.resetPasswordFailed=true;\r\n });\r\n }\r\n\r\n $scope.checkWhiteSpace = function () {\r\n $scope.invalidAuthentication = false;\r\n $scope.invalidSamePassword = false;\r\n if ($scope.password.indexOf(' ') > -1) {\r\n $scope.password = '';\r\n alert(\"Password cannot contain whitespace !\");\r\n }\r\n }\r\n\r\n $scope.sendNewResetPasswordUrl = function(){\r\n $scope.resetPasswordSuccess=false;\r\n $scope.resetPasswordFailed=false;\r\n $scope.sendUrlFailed=false;\r\n $scope.sendUrlSuccess=false;\r\n auth.sendResetPasswordUrl($scope.email)\r\n .then(function(response){\r\n $scope.sendUrlSuccess=true;\r\n })\r\n .catch(function(response){\r\n $scope.sendUrlFailed=true;\r\n });\r\n $scope.showNewUrlForm=false;\r\n }\r\n\r\n $scope.checkToken($scope.email,$scope.token);\r\n});\r\n","invo.factory('userProfileService',function($http,notify,$rootScope,$q){\r\n\treturn {\r\n\t\t get : function(){\r\n\t\t\t return $http.get($rootScope.serverUrl+\"UserProfile/get\");\r\n\t\t},\r\n changePassword : function(currentp,newp,confirmp){\r\n return $http.post($rootScope.serverUrl+\"UserProfile/changePassword?currentp=\"+encodeURIComponent(currentp)+\"&newp=\"+encodeURIComponent(newp)+\"&confirmp=\"+encodeURIComponent(confirmp));\r\n },\r\n update : function(user){\r\n return $http.post($rootScope.serverUrl+\"UserProfile/update?id=\"+encodeURIComponent(user.id)+\"&fullname=\"+encodeURIComponent(user.fullname)+\"&email=\"+encodeURIComponent(user.email));\r\n }\r\n\t}\r\n});","invo.controller('NavigationController',function($scope,$state,navigationService){\r\n $scope.menuItems = navigationService.getMenus();\r\n\t$scope.go = function(goState){\r\n if (goState.noClick==true){\r\n return;\r\n }\r\n //navigationService.clearActive();\r\n if (goState.hasSubNav){\r\n goState.activeName = \"active\";\r\n $state.transitionTo(goState.subMenu[0].clickState);\r\n goState.subMenu[0].activeName=\"active arrow\";\r\n }\r\n else{\r\n $state.transitionTo(goState.clickState);\r\n goState.activeName=\"active arrow\";\r\n if(goState.parent){\r\n goState.parent.activeName=\"active\";\r\n }\r\n }\r\n\t}\r\n $scope.navigationTemplate=\"./component/user-account-dropdown/user-account-dropdown.html?ver=\"+$scope.appVersion;\r\n $scope.showSubMenu= function(item){\r\n if (item.hasSubNav && item.activeName == \"active\"){\r\n return true;\r\n }\r\n else{\r\n return false;\r\n }\r\n }\r\n\r\n});","/**\r\n * Created by Troy on 5/12/2015.\r\n */\r\ninvo.factory('navigationService',function() {\r\n var menuItems=[];\r\n var menus=[];\r\n var sortMenus= function(){\r\n menuItems.sort(function(a,b){\r\n return a.order - b.order;\r\n });\r\n for (i=0;i=0){\r\n menu=this;\r\n }\r\n }\r\n });\r\n }\r\n else\r\n {\r\n menu = menus[i];\r\n }\r\n return menu;\r\n },\r\n getMenuById: function (id){\r\n var i = _.findIndex(menus,{id:id});\r\n return menus[i];\r\n },\r\n getMenus:function(){\r\n return menuItems;\r\n },\r\n addMenu:function(menu){\r\n menu.hasSubNav=false;\r\n menu.dropdownClass='';\r\n menu.subMenu=[];\r\n menuItems.push(menu);\r\n menus.push(menu);\r\n sortMenus();\r\n\r\n },\r\n addSubMenu:function(id,subMenu){\r\n var menu = this.getMenuById(id);\r\n if (typeof menu.subMenu == 'undefined'){\r\n menu.subMenu = [];\r\n }\r\n menu.hasSubNav=true;\r\n menu.dropdownClass='dropdown';\r\n subMenu.parent = menu;\r\n menu.subMenu.push(subMenu);\r\n menus.push(subMenu);\r\n },\r\n clearActive:function(){\r\n $.each(menus,function() {\r\n this.activeName = '';\r\n });\r\n }\r\n\r\n }\r\n});\r\n","/**\r\n * Created by Troy on 5/12/2015.\r\n */\r\ninvo.run(function ($rootScope,$state,navigationService,$uibModalStack){\r\n $rootScope.$on('$stateChangeStart', function (ev, to, toParams, from, fromParams) {\r\n navigationService.clearActive();\r\n $rootScope.alertMessage=\"\";\r\n var nav = navigationService.getMenuByState(to.name);\r\n if (typeof nav != 'undefined'){\r\n nav.activeName = \"active arrow\";\r\n if (nav.parent) {\r\n nav.parent.activeName = \"active\";\r\n }\r\n }\r\n $uibModalStack.dismissAll();\r\n });\r\n});","invo.controller('ChangePasswordModalController',function ($scope, $uibModalInstance,userProfileService) {\r\n $scope.currentPassword;\r\n $scope.newPassword;\r\n $scope.confirmPassword;\r\n $scope.showError=false;\r\n $scope.showSuccess=false;\r\n\r\n $scope.ok = function () {\r\n userProfileService.changePassword($scope.currentPassword, $scope.newPassword, $scope.confirmPassword).then(function(data){\r\n if (data.data.message.code=='exception.profile.invalid.same.password') {\r\n $scope.invalidSamePassword = true;\r\n } else if (data.data.message.code=='exception.profile.failed.authentication') {\r\n $scope.invalidAuthentication = true;\r\n } else {\r\n $scope.showError = false;\r\n $scope.showSuccess = true;\r\n }\r\n },function(data){\r\n $scope.showError = true;\r\n $scope.changePasswordForm.$setPristine();\r\n $scope.currentPassword=\"\";\r\n $scope.newPassword=\"\";\r\n $scope.confirmPassword=\"\";\r\n });\r\n };\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n $scope.closeAlert = function(){\r\n $scope.showError=false;\r\n }\r\n $scope.closeSuccess = function(){\r\n $scope.showSuccess=false;\r\n $uibModalInstance.close('ok');\r\n }\r\n\r\n $scope.checkWhiteSpace = function () {\r\n $scope.invalidAuthentication = false;\r\n $scope.invalidSamePassword = false;\r\n if ($scope.newPassword.indexOf(' ') > -1) {\r\n $scope.newPassword = '';\r\n alert(\"Password cannot contain whitespace !\");\r\n }\r\n }\r\n});\r\n","invo.controller('UserAccountDropdownController',function($scope,$rootScope,$state,$uibModal,auth,$window) {\r\n $scope.session = auth.session;\r\n $scope.logout = function () {\r\n auth.logout().then(function(data){\r\n $state.transitionTo($rootScope.loginState);\r\n });\r\n }\r\n $scope.close = function () {\r\n $window.close();\r\n }\r\n\r\n $scope.showUserGuide = function () {\r\n var userGuideModal = $uibModal.open({\r\n templateUrl: './component/user-account-dropdown/user-guide-modal.html?ver='+$scope.appVersion,\r\n controller: 'UserGuideModalController'\r\n });\r\n userGuideModal.result.then(function (data) {\r\n }, function () {\r\n });\r\n }\r\n\r\n\r\n $scope.changePassword = function(){\r\n var changePasswordModal = $uibModal.open({\r\n templateUrl: './component/user-account-dropdown/change-password.html?ver='+$scope.appVersion,\r\n controller: 'ChangePasswordModalController'\r\n });\r\n changePasswordModal.result.then(function (data) {\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.editUserProfile = function(){\r\n var UserProfileModal = $uibModal.open({\r\n templateUrl: './component/user-account-dropdown/user-profile-edit.html?ver='+$scope.appVersion,\r\n controller: 'UserProfileModalController'\r\n });\r\n UserProfileModal.result.then(function (data) {\r\n }, function () {\r\n });\r\n }\r\n\r\n});\r\n\r\n","invo.controller('UserGuideModalController',function ($scope, $uibModalInstance,auth) {\r\n $scope.session = auth.session;\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n});\r\n","invo.controller('UserProfileModalController',function ($scope, $uibModalInstance,userProfileService,auth) {\r\n $scope.user = auth.session.user;\r\n $scope.editUser={};\r\n $scope.editUser.id = $scope.user.id;\r\n $scope.editUser.fullname = $scope.user.fullname;\r\n $scope.editUser.email = $scope.user.email;\r\n $scope.editUser.username = $scope.user.username;\r\n $scope.ok = function () {\r\n userProfileService.update($scope.editUser).then(function(response){\r\n auth.session.user =response.data.data.user;\r\n $uibModalInstance.close(response.data.data.user);\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n});\r\n","invo.controller('ChangeExpiredPasswordModalController',function ($scope, $uibModalInstance ,auth ,$stateParams) {\r\n\r\n $scope.newPassword;\r\n $scope.confirmPassword;\r\n\r\n $scope.ok = function () {\r\n auth.changeExpiredPassword($stateParams.user.id, $scope.newPassword, $scope.confirmPassword).then(function(data){\r\n if (data.data.message.code=='exception.profile.invalid.same.password') {\r\n $scope.invalidSamePassword = true;\r\n } else if (data.data.message.code=='exception.profile.failed.authentication') {\r\n $scope.invalidAuthentication = true;\r\n } else {\r\n $uibModalInstance.close('ok');\r\n }\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n $scope.checkWhiteSpace = function () {\r\n $scope.invalidAuthentication = false;\r\n $scope.invalidSamePassword = false;\r\n if ($scope.newPassword.indexOf(' ') > -1) {\r\n $scope.newPassword = '';\r\n alert(\"Password cannot contain whitespace !\");\r\n }\r\n }\r\n\r\n});\r\n","invo.config(function($httpProvider)\r\n{\r\n\t\r\n // Use x-www-form-urlencoded Content-Type\r\n //$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';\r\n //$httpProvider.defaults.headers.post['Content-Type'] = 'text/plain';\r\n // Override $http service's default transformRequest\r\n //$httpProvider.defaults.headers.post['Content-Type'] = undefined;\r\n ////$httpProvider.defaults.headers.post['Content-Type'] = undefined;\r\n //$httpProvider.defaults.transformRequest=angular.identity;\r\n //$httpProvider.useLegacyPromiseExtensions(true);\r\n //$httpProvider.defaults.transformRequest = [function(data)\r\n //{\r\n // /**\r\n // * The workhorse; converts an object to x-www-form-urlencoded serialization.\r\n // * @param {Object} obj\r\n // * @return {String}\r\n // */\r\n // var param = function(obj)\r\n // {\r\n // var query = '';\r\n // var name, value, fullSubName, subName, subValue, innerObj, i;\r\n //\r\n // for(name in obj)\r\n // {\r\n // value = obj[name];\r\n //\r\n // if(value instanceof Array)\r\n // {\r\n // for(i=0; i
{{filename}}
'\r\n\t};\t\r\n});","invo.directive('dueDate',function(){\r\n\treturn {\r\n\t replace:true,\r\n\t scope:{\r\n\t\t date:\"@\",\r\n\t\t status:\"@\"\r\n\t },\r\n\t template:'{{label}}',\r\n\t link: function(scope,element,attrs){\r\n\t\t scope.$watch('date', function (val) { \r\n\t\t\t var dueDate = new Date(val);\r\n\t\t\t var dateDiff = DateUtil.DateDiffInDays(dueDate);\r\n\t\t\t if (scope.status==\"PAID\"){\r\n\t\t\t\t scope.labelclass=\"\";\r\n\t \t\t\t scope.label=val;\r\n\t\t\t }\r\n\t\t\t else if (dateDiff<=0 && dateDiff >=-7){\r\n\t\t\t\t scope.labelclass=\"warning\";\r\n\t \t\t\t scope.label=val;\r\n\t\t\t }\r\n\t\t\t else if (dateDiff > 0){\r\n\t\t\t\t scope.labelclass=\"danger\";\r\n\t \t\t\t scope.label=val;\r\n\t\t\t }\r\n\t\t\t else{\r\n\t\t\t\t scope.labelclass=\"info\";\r\n\t \t\t\t scope.label=val;\r\n\t\t\t }\t \r\n\t\t\t }); \r\n\t }\r\n\t}\t\r\n});","invo.directive(\"dynamicName\",function($compile){\r\n return {\r\n restrict:\"A\",\r\n terminal:true,\r\n priority:1000,\r\n link:function(scope,element,attrs){\r\n element.attr('name', scope.$eval(attrs.dynamicName));\r\n element.attr('id', scope.$eval(attrs.dynamicName));\r\n element.removeAttr(\"dynamic-name\");\r\n $compile(element)(scope);\r\n }\r\n };\r\n});/**\r\n * Created by Troy on 22/4/2015.\r\n */\r\n","invo.directive('enabledstatus',function(){\r\n return {\r\n replace:true,\r\n scope:{\r\n status:\"@\"\r\n },\r\n template:'{{label}}',\r\n link: function(scope,element,attrs){\r\n scope.$watch('status', function (newVal) {\r\n if (scope.status==\"DISABLED\"){\r\n scope.badgeclass=\"badge badge-danger\";\r\n scope.label=\"Disabled\";\r\n }\r\n if (scope.status==\"ENABLED\"){\r\n scope.badgeclass=\"badge badge-success\";\r\n scope.label=\"Enabled\";\r\n }\r\n if (scope.status==\"false\"){\r\n scope.badgeclass=\"badge badge-danger\";\r\n scope.label=\"Disabled\";\r\n }\r\n if (scope.status==\"true\"){\r\n scope.badgeclass=\"badge badge-success\";\r\n scope.label=\"Enabled\";\r\n }\r\n });\r\n\r\n }\r\n }\r\n});","invo.directive('fileIcon',function(){\r\n return {\r\n replace:true,\r\n scope:{\r\n fileName:\"@\"\r\n },\r\n template:'',\r\n link: function(scope,element,attrs){\r\n scope.endsWith = function(str, suffix) {\r\n return str.indexOf(suffix, str.length - suffix.length) !== -1;\r\n }\r\n scope.fileName = scope.fileName.toLowerCase();\r\n\r\n if (scope.endsWith(scope.fileName,'pdf')){\r\n scope.icon =\"pdf-file\";\r\n }\r\n else if (scope.endsWith(scope.fileName,'doc')|| scope.endsWith(scope.fileName,'docx')){\r\n scope.icon =\"doc-file\";\r\n }\r\n else if (scope.endsWith(scope.fileName,'xls')||scope.endsWith(scope.fileName,'xlsx')){\r\n scope.icon =\"xls-file\";\r\n }\r\n else if (scope.endsWith(scope.fileName,'ppt')||scope.endsWith(scope.fileName,'pptx')){\r\n scope.icon =\"ppt-file\";\r\n }\r\n else if (scope.endsWith(scope.fileName,'zip')){\r\n scope.icon =\"zip-file\";\r\n }\r\n else if (scope.endsWith(scope.fileName,'png') || scope.endsWith(scope.fileName,'bmp') || scope.endsWith(scope.fileName,'jpg') || scope.endsWith(scope.fileName,'jpeg')||scope.endsWith(scope.fileName,'gif')){\r\n scope.icon =\"img-file\";\r\n }\r\n else if (scope.endsWith(scope.fileName,'txt')){\r\n scope.icon =\"txt-file\";\r\n }\r\n else if (scope.endsWith(scope.fileName,'exe')){\r\n scope.icon =\"exe-file\";\r\n }\r\n else if (scope.endsWith(scope.fileName,'iso')){\r\n scope.icon =\"iso-file\";\r\n }\r\n else if (scope.endsWith(scope.fileName,'bin')){\r\n scope.icon =\"bin-file\";\r\n }\r\n else if (scope.endsWith(scope.fileName,'msg')){\r\n scope.icon =\"msg-file\";\r\n }\r\n else if (scope.endsWith(scope.fileName,'rtf')){\r\n scope.icon =\"rtf-file\";\r\n }\r\n else if (scope.endsWith(scope.fileName,'tiff') || scope.endsWith(scope.fileName,'tif')){\r\n scope.icon =\"tif-file\";\r\n }\r\n else{\r\n scope.icon =\"-file\";\r\n }\r\n }\r\n }\r\n});","invo.directive('fileStatus',function(){\r\n return {\r\n replace:true,\r\n scope:{\r\n status:\"@\"\r\n },\r\n template:'{{label}}',\r\n link: function(scope,element,attrs){\r\n scope.$watch('status', function (newVal) {\r\n if (scope.status==\"UPLOADED\"){\r\n scope.badgeclass=\"\";\r\n scope.label=\"\";\r\n }\r\n if (scope.status==\"PENDING\"){\r\n scope.badgeclass=\"pending\";\r\n scope.label=\"Pending\";\r\n }\r\n if (scope.status==\"REJECT\"){\r\n scope.badgeclass=\"reject\";\r\n scope.label=\"Rejected\";\r\n }\r\n if (scope.status==\"FAILED\"){\r\n scope.badgeclass=\"\";\r\n scope.label=\"Failed\";\r\n }\r\n if (scope.status==\"PROCESSED\"){\r\n scope.badgeclass=\"\";\r\n scope.label=\"Processed\";\r\n }\r\n });\r\n }\r\n }\r\n});","/**\r\n * Created by Troy on 20/4/2015.\r\n */\r\ninvo.directive('inputAmount',function(){\r\n return{\r\n restrict:'EA',\r\n template: ' ',\r\n scope:{\r\n inputModel:'=',\r\n inputName:'@',\r\n inputClass:'@'\r\n },\r\n link:function(scope,element,attrs){\r\n scope.positive = 'positive' in attrs;\r\n scope.required = 'required' in attrs;\r\n scope.$watch('inputModel',function(newValue,oldValue){\r\n if (typeof newValue == 'undefined' ) newValue=0;\r\n var newAmount = String(newValue).replace(\",\",\"\");\r\n var index_dot,arr=String(newAmount).split(\"\");\r\n $(element)[0].children[0].value=newAmount;\r\n if ($(element)[0].children[0].validity.valueMissing && !$(element)[0].children[0].validity.badInput){\r\n scope.inputModel = 0;\r\n return;\r\n }\r\n if (isNaN(newAmount) || ((index_dot = String(newAmount).indexOf('.'))!=-1 && String(newAmount).length-index_dot>3)){\r\n scope.inputModel = oldValue;\r\n return;\r\n }\r\n if (scope.positive && newAmount < 0){\r\n scope.inputModel = oldValue;\r\n return;\r\n }\r\n $(element)[0].children[0].value=newAmount;\r\n });\r\n }\r\n };\r\n});","invo.directive('inputCurrencyCode',function($rootScope,$compile){\r\n return{\r\n restrict:'EA',\r\n template: '',\r\n scope:{\r\n selectedCurrency: '=ngModel',\r\n inputClass:'@inputClass',\r\n inputName:'@inputName',\r\n inputPlaceholder:'@placeholder'\r\n },\r\n link:function(scope,element,attrs){\r\n scope.codeonly = 'codeonly' in attrs;\r\n },\r\n controller: function($scope,$http,limitToFilter){\r\n\r\n $scope.currencyList = function(q) {\r\n return $http.get($rootScope.serverUrl+\"Currency/list?q=\"+q).then(function(response){\r\n return limitToFilter(response.data.data.currencies, 5);\r\n });\r\n }\r\n $scope.selectedCurrency;\r\n }\r\n };\r\n});","invo.directive('inputCurrency',function($rootScope,$compile){\r\n return{\r\n restrict:'EA',\r\n template: '',\r\n scope:{\r\n selectedCurrency: '=ngModel',\r\n inputClass:'@inputClass',\r\n inputName:'@inputName',\r\n inputPlaceholder:'@placeholder'\r\n },\r\n link:function(scope,element,attrs){\r\n scope.codeonly = 'codeonly' in attrs;\r\n },\r\n controller: function($scope,$http,limitToFilter){\r\n\r\n $scope.currencyList = function(q) {\r\n return $http.get($rootScope.serverUrl+\"Currency/list?q=\"+q).then(function(response){\r\n return limitToFilter(response.data.data.currencies, 5);\r\n });\r\n }\r\n $scope.selectedCurrency;\r\n }\r\n };\r\n});","/**\r\n * Created by Troy on 20/4/2015.\r\n */\r\ninvo.directive('inputDate',function($parse){\r\n return{\r\n replace:true,\r\n restrict:'EA',\r\n transclude:false,\r\n scope:{\r\n inputModel:'=',\r\n inputName:'@',\r\n inputClass:'@'\r\n },\r\n compile: function(element,attrs){\r\n var modelAccessor = $parse(attrs.inputModel);\r\n var html = '\";\r\n }\r\n else{\r\n html = html + \"/>\";\r\n }\r\n var newElem = $(html);\r\n element.replaceWith(newElem);\r\n return function(scope,element,attrs,controller){\r\n //element.datetimepicker({\r\n // format: 'DD-MM-YYYY'\r\n //});\r\n //$compile(element)(scope);\r\n scope.$watch(modelAccessor,function(val){\r\n\r\n });\r\n }\r\n }\r\n\r\n };\r\n});","invo.directive('inputEmployee',function($rootScope,$compile){\r\n return{\r\n restrict:'EA',\r\n template: '',\r\n scope:{\r\n selectedEmployee: '=ngModel',\r\n inputClass:'@inputClass',\r\n inputName:'@inputName',\r\n inputPlaceholder:'@placeholder'\r\n },\r\n link:function(scope,element,attrs){\r\n\r\n },\r\n controller: function($scope,$http,limitToFilter){\r\n $scope.employeeList = function(q) {\r\n return $http.get($rootScope.serverUrl+\"Employee/listAll?q=\"+q).then(function(response){\r\n return limitToFilter(response.data.data.Vendors, 5);\r\n });\r\n }\r\n $scope.selectedEmployee;\r\n }\r\n };\r\n});","invo.directive('inputFiscalYear',function($rootScope,$compile){\r\n return{\r\n restrict:'EA',\r\n template: '',\r\n scope:{\r\n selectedFiscalYear: '=ngModel',\r\n inputClass:'@inputClass',\r\n inputName:'@inputName'\r\n },\r\n link:function(scope,element,attrs){\r\n scope.$watch('selectedFiscalYear',function(newValue){\r\n if (newValue===null){\r\n scope.selectedFiscalYear=scope.fiscalYears[0];\r\n }\r\n });\r\n },\r\n controller: function($scope){\r\n $scope.fiscalYears=[ {name:'JANUARY',label:\"January - December\"},{name:'FEBRUARY',label:\"February - January\"},{name:'MARCH',label:\"March - February\"},\r\n {name:'APRIL',label:\"April - March\"},{name:'MAY',label:\"May - April\"},{name:'JUNE',label:\"June - May\"},\r\n {name:'JULY',label:\"July - June\"},{name:'AUGUST',label:\"August - July\"},{name:'SEPTEMBER',label:\"September - August\"},\r\n {name:'OCTOBER',label:\"October - September\"},{name:'NOVEMBER',label:\"November - October\"},{name:'DECEMBER',label:\"December - November\"}\r\n ];\r\n\r\n\r\n }\r\n };\r\n});","/**\r\n * Created by Troy on 20/4/2015.\r\n */\r\ninvo.directive('inputInteger',function(){\r\n return{\r\n restrict:'EA',\r\n template: ' ',\r\n scope:{\r\n inputModel:'=',\r\n inputName:'@',\r\n inputClass:'@',\r\n inputPlaceholder:'@'\r\n },\r\n link:function(scope,element,attrs){\r\n\r\n scope.required = 'required' in attrs;\r\n scope.showRequired = (scope.isRequired === 'true');\r\n scope.$watch('inputModel',function(newValue,oldValue){\r\n if ($(element)[0].children[0].validity.valueMissing && !$(element)[0].children[0].validity.badInput){\r\n scope.inputModel = 0;\r\n return;\r\n }\r\n if (newValue % 1 === 0 && newValue>=0) {\r\n $(element)[0].children[0].value=newValue;\r\n return;\r\n }\r\n else {\r\n scope.inputModel = oldValue;\r\n return;\r\n }\r\n\r\n });\r\n }\r\n };\r\n});\r\n\r\n","/**\r\n * Created by Troy on 20/4/2015.\r\n */\r\ninvo.directive('recordTextField',function(){\r\n return{\r\n restrict:'EA',\r\n templateUrl:'./shared/directives/input-text-directive.html',\r\n scope:{\r\n value: '=ngModel'\r\n },\r\n require: 'ngModel',\r\n link:function(scope,element,attrs){\r\n\r\n }\r\n }\r\n});","invo.directive('inputUser',function($rootScope,$compile){\r\n return{\r\n restrict:'EA',\r\n template: '',\r\n scope:{\r\n selectedUser: '=ngModel',\r\n inputClass:'@inputClass',\r\n inputName:'@inputName',\r\n inputPlaceholder:'@placeholder'\r\n },\r\n link:function(scope,element,attrs){\r\n\r\n },\r\n controller: function($scope,$http,limitToFilter){\r\n $scope.userList = function(q) {\r\n return $http.get($rootScope.serverUrl+\"UserApp/list?q=\"+q).then(function(response){\r\n return limitToFilter(response.data.data.users, 5);\r\n });\r\n }\r\n $scope.selectedUser;\r\n }\r\n };\r\n});","invo.directive('inputVendor',function($rootScope,$compile){\r\n return{\r\n restrict:'EA',\r\n template: '',\r\n scope:{\r\n selectedVendor: '=ngModel',\r\n inputClass:'@inputClass',\r\n inputName:'@inputName',\r\n inputPlaceholder:'@placeholder'\r\n },\r\n link:function(scope,element,attrs){\r\n\r\n },\r\n controller: function($scope,$http,limitToFilter){\r\n $scope.vendorList = function(q) {\r\n return $http.get($rootScope.serverUrl+\"Vendor/listAll?q=\"+q).then(function(response){\r\n return limitToFilter(response.data.data.Vendors, 5);\r\n });\r\n }\r\n $scope.selectedVendor;\r\n }\r\n };\r\n});","invo.directive('invoiceextrastatus',function(){\r\n\treturn {\r\n\t replace:true,\r\n\t scope:{\r\n\t\t status:\"@\"\r\n\t },\r\n\t template:'{{label}}',\r\n\t link: function(scope,element,attrs){\r\n\t\t scope.$watch('status', function (newVal) { \r\n if (scope.status==\"UNPAID\"){\r\n \t\t\t scope.badgeclass=\"badge badge-danger\";\r\n \t\t\t scope.label=\"Unpaid\";\r\n \t\t }\r\n if(scope.status==\"PENDING_APPROVAL\"){\r\n \t scope.badgeclass=\"badge badge-danger\";\r\n \t scope.label=\"Pending approval\"\r\n }\r\n \t\t if (scope.status==\"PAID\"){\r\n \t\t\t scope.badgeclass=\"badge badge-success\";\r\n \t\t\t scope.label=\"Paid\";\r\n \t\t }\r\n \t\t if(scope.status == \"RECEIVED\"){\r\n \t\t\t scope.badgeclass=\"badge badge-success\";\r\n \t\t\t scope.label=\"Received\";\r\n \t\t }\r\n \t\t if (scope.status==\"VOID\"){\r\n \t\t\t scope.badgeclass=\"badge badge-inverse\";\r\n \t\t\t scope.label=\"Void\";\r\n \t\t }\r\n \t\t if(scope.status==\"READY_TO_PAY\")\r\n \t\t\t {\r\n \t\t\t \t\tscope.badgeclass=\"badge badge-danger\";\r\n \t\t\t \t\tscope.label=\"Unpaid\";\r\n \t\t\t }\r\n });\r\n\t\t \r\n\t }\r\n\t}\t\r\n});","invo.directive('invoicestatus',function(){\r\n\treturn {\r\n\t replace:true,\r\n\t scope:{\r\n\t\t date:\"@\",\r\n\t\t status:\"@\"\r\n\t },\r\n\t template:'{{label}}',\r\n\t link: function(scope,element,attrs){\r\n\t\t scope.$watch('[status,date]', function (val) { \r\n\t\t\t var dueDate = new Date(val[1]);\r\n\t\t\t var dateDiff = DateUtil.DateDiffInDays(dueDate);\r\n\t\t\t if (val[0]==\"PAID\"){\r\n\t\t\t\t scope.labelclass=\"badge badge-success\";\r\n\t \t\t\t scope.label=\"PAID\";\r\n\t\t\t }\r\n\t\t\t else if(val[0] == \"VOID\"){\r\n\t\t\t\t scope.labelclass=\"badge badge-inverse\";\r\n\t\t\t\t scope.label=\"Cancelled\"\r\n\t\t\t }\r\n\t\t\t else if (dateDiff<=0 && dateDiff >=-7){\r\n\t\t\t\t scope.labelclass=\"badge badge-warning\";\r\n\t \t\t\t scope.label=\"Due In 7 Days\";\r\n\t\t\t }\r\n\t\t\t else if (dateDiff > 0){\r\n\t\t\t\t scope.labelclass=\"badge badge-important\";\r\n\t \t\t\t scope.label=\"Overdue\";\r\n\t\t\t }\r\n\t\t\t else{\r\n\t\t\t\t scope.labelclass=\"badge badge-danger\";\r\n\t \t\t\t scope.label=\"Outstanding\";\r\n\t\t\t }\r\n }, true);\r\n\t\t \r\n\t }\r\n\t}\t\r\n});","invo.directive('listdirective',function($filter){\r\n\treturn {\r\n\t\t replace:true,\r\n\t\t scope:{\r\n\t\t\t extrastatus:\"@\",\r\n\t\t\t paymentdate: \"@\",\r\n\t\t\t duedate: \"@\"\r\n\t\t },\r\n\t\t template:'{{label}} {{label2}}',\r\n\t\t link: function(scope,element,attrs){\r\n\t\t\t scope.$watch('[extrastatus,paymentdate,duedate]', function (val) {\r\n\t\t\t\t var dueDate = new Date(val[2]);\r\n\t\t\t\t var dateDiff = DateUtil.DateDiffInDays(dueDate);\r\n\t\t\t\t if(val[0] == \"PAID\")\r\n\t\t\t\t\t {\r\n\t\t\t\t\t \tscope.labelclass = \"paid\";\r\n\t\t\t\t\t \tscope.label = \"Paid\";\r\n\t\t\t\t\t \tscope.label2 = \" on \" + $filter(\"date\")(val[1], 'longDate');\r\n\t\t\t\t\t }\r\n\t\t\t\t if(val[0] == \"VOID\")\r\n\t\t\t\t\t {\r\n\t\t\t\t\t \tscope.labelclass = \"void\";\r\n\t\t\t\t\t \tscope.label = \"Void\";\r\n\t\t\t\t\t }\r\n\t\t\t\t if(val[0] == \"UNPAID\" && dateDiff <= 0 && dateDiff >= -7 )\r\n\t\t\t\t\t {\r\n\t\t\t\t\t\t if(dateDiff != 0)\r\n\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t \tscope.labelclass = \"unpaidUrgent\";\r\n\t\t\t\t\t\t\t\t \tscope.label= \"Due in \" + (dateDiff/-1) + \" day(s)\"\r\n\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t else\r\n\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t \t\tscope.labelclass = \"unpaidUrgent\";\r\n\t\t\t\t\t\t\t \t\tscope.label = \"Due today\"\r\n\t\t\t\t\t\t\t }\r\n\t\t\t\t\t }\r\n\t\t\t\t if(val[0] == \"UNPAID\" && dateDiff <= -8)\r\n\t\t\t\t\t {\r\n\t\t\t\t\t \tscope.labelclass = \"unpaidGrey\";\r\n\t\t\t\t\t \tscope.label= \"Due in \" + (dateDiff/-1) + \" day(s)\"\r\n\t\t\t\t\t }\r\n\t\t\t\t if(dateDiff > 0 && val[0] != \"PAID\" && val[0] != \"VOID\")\r\n\t\t\t\t\t {\r\n\t\t\t\t\t \tscope.labelclass = \"due\";\r\n\t\t\t\t\t \tscope.label = dateDiff + \" Day(s) overdue\" \r\n\t\t\t\t\t }\r\n\t }, true);\r\n\t\t\t \r\n\t\t }\r\n\t\t}\t\r\n});","'use strict';\r\n\r\n(function (angular, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['angular', 'ckeditor'], function (angular) {\r\n return factory(angular);\r\n });\r\n } else {\r\n return factory(angular);\r\n }\r\n}(angular || null, function (angular) {\r\n var app = angular.module('ngCkeditor', []);\r\n var $defer, loaded = false;\r\n\r\n app.run(['$q', '$timeout', function ($q, $timeout) {\r\n $defer = $q.defer();\r\n\r\n if (angular.isUndefined(CKEDITOR)) {\r\n throw new Error('CKEDITOR not found');\r\n }\r\n CKEDITOR.disableAutoInline = true;\r\n function checkLoaded() {\r\n if (CKEDITOR.status === 'loaded') {\r\n loaded = true;\r\n $defer.resolve();\r\n } else {\r\n checkLoaded();\r\n }\r\n }\r\n\r\n CKEDITOR.on('loaded', checkLoaded);\r\n $timeout(checkLoaded, 100);\r\n }]);\r\n\r\n app.directive('ckeditor', ['$timeout', '$q', function ($timeout, $q) {\r\n\r\n return {\r\n restrict: 'AC',\r\n require: ['ngModel', '^?form'],\r\n scope: false,\r\n link: function (scope, element, attrs, ctrls) {\r\n var ngModel = ctrls[0];\r\n var form = ctrls[1] || null;\r\n var EMPTY_HTML = '

',\r\n isTextarea = element[0].tagName.toLowerCase() === 'textarea',\r\n data = [],\r\n isReady = false;\r\n\r\n if (!isTextarea) {\r\n element.attr('contenteditable', true);\r\n }\r\n\r\n var onLoad = function () {\r\n var options = {\r\n toolbar: 'full',\r\n toolbar_full: [ //jshint ignore:line\r\n {\r\n name: 'basicstyles',\r\n items: ['Bold', 'Italic', 'Strike', 'Underline', 'Subscript', 'Superscript', 'HorizontalRule']\r\n },\r\n {name: 'paragraph', items: ['BulletedList', 'NumberedList', 'Blockquote']},\r\n {name: 'editing', items: ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock']},\r\n {name: 'links', items: ['Link', 'Unlink', 'Anchor']},\r\n {name: 'tools', items: ['SpellChecker', 'Maximize']},\r\n {\r\n name: 'styles',\r\n items: ['Styles', 'Format', 'Font', 'FontSize', 'TextColor', 'PasteText', 'PasteFromWord',\r\n 'RemoveFormat']\r\n },\r\n {name: 'insert', items: ['Image', 'Table', 'SpecialChar']},\r\n {name: 'forms', items: ['Outdent', 'Indent']},\r\n {name: 'clipboard', items: ['Undo', 'Redo']},\r\n {name: 'document', items: ['PageBreak', 'Source']}\r\n ],\r\n disableNativeSpellChecker: false,\r\n uiColor: '#FAFAFA',\r\n //height: '400px',\r\n width: '100%',\r\n fontSize_sizes : '8/8pt;9/9pt;10/10pt;12/12pt;14/14pt;16/16pt;18/18pt;20/20pt;22/22pt;24/24pt;26/26pt;28/28pt;36/36pt;48/48pt;',\r\n enterMode: CKEDITOR.ENTER_BR,\r\n shiftEnterMode: CKEDITOR.ENTER_BR\r\n };\r\n options = angular.extend(options, scope[attrs.ckeditor]);\r\n\r\n var instance = (isTextarea) ? CKEDITOR.replace(element[0], options) : CKEDITOR.inline(element[0], options),\r\n configLoaderDef = $q.defer();\r\n\r\n element.bind('$destroy', function () {\r\n if (instance && CKEDITOR.instances[instance.name]) {\r\n CKEDITOR.instances[instance.name].destroy();\r\n }\r\n });\r\n var setModelData = function (setPristine) {\r\n var data = instance.getData();\r\n if (data === '') {\r\n data = null;\r\n }\r\n $timeout(function () { // for key up event\r\n if (setPristine !== true || data !== ngModel.$viewValue) {\r\n ngModel.$setViewValue(data);\r\n }\r\n\r\n if (setPristine === true && form) {\r\n form.$setPristine();\r\n }\r\n }, 0);\r\n }, onUpdateModelData = function (setPristine) {\r\n if (!data.length) {\r\n return;\r\n }\r\n\r\n var item = data.pop() || EMPTY_HTML;\r\n isReady = false;\r\n instance.setData(item, function () {\r\n setModelData(setPristine);\r\n isReady = true;\r\n });\r\n };\r\n\r\n instance.on('pasteState', setModelData);\r\n instance.on('change', setModelData);\r\n instance.on('blur', setModelData);\r\n //instance.on('key', setModelData); // for source view\r\n\r\n instance.on('instanceReady', function () {\r\n scope.$broadcast('ckeditor.ready');\r\n scope.$apply(function () {\r\n onUpdateModelData(true);\r\n });\r\n\r\n instance.document.on('keyup', setModelData);\r\n });\r\n instance.on('customConfigLoaded', function () {\r\n configLoaderDef.resolve();\r\n });\r\n\r\n ngModel.$render = function () {\r\n data.push(ngModel.$viewValue);\r\n if (isReady) {\r\n onUpdateModelData();\r\n }\r\n };\r\n };\r\n\r\n if (CKEDITOR.status === 'loaded') {\r\n loaded = true;\r\n }\r\n if (loaded) {\r\n onLoad();\r\n } else {\r\n $defer.promise.then(onLoad);\r\n }\r\n }\r\n };\r\n }]);\r\n\r\n return app;\r\n}));","invo.directive('ngMatch', [function () {\r\n return {\r\n restrict: 'A',\r\n scope:{\r\n confirm:'=ngModel'\r\n },\r\n require: 'ngModel',\r\n link: function (scope, elem, attrs, ctrl) {\r\n var firstPassword = '#' + attrs.ngMatch;\r\n elem.add(firstPassword).on('keyup', function () {\r\n scope.$apply(function () {\r\n var v = elem.val()===$(firstPassword).val();\r\n ctrl.$setValidity('match', v);\r\n });\r\n });\r\n }\r\n }\r\n}]);\r\n\r\n\r\n\r\n","invo.directive('noPropagation', function () {\r\n return {\r\n restrict: 'A',\r\n link: function (scope, element) {\r\n element.bind('click', function (event) {\r\n event.stopPropagation();\r\n });\r\n }\r\n };\r\n});\r\n","invo.directive('paymenttype',function(){\r\n return {\r\n replace:true,\r\n scope:{\r\n type:\"@\"\r\n },\r\n template:'{{label}}',\r\n link: function(scope,element,attrs){\r\n scope.$watch('type', function (newVal) {\r\n scope.badgeclass=\"\";\r\n scope.label=\"\";\r\n if (scope.type==\"GIRO\"){\r\n scope.badgeclass=\"\";\r\n scope.label=\"Giro\";\r\n }\r\n if (scope.type==\"CASH\"){\r\n scope.badgeclass=\"\";\r\n scope.label=\"Cash\";\r\n }\r\n if (scope.type==\"CHEQUE\"){\r\n scope.badgeclass=\"\";\r\n scope.label=\"Cheque\";\r\n }\r\n });\r\n\r\n }\r\n }\r\n});","invo.directive('showtab',\r\n function () {\r\n return {\r\n link: function (scope, element, attrs) {\r\n element.click(function(e) {\r\n e.preventDefault();\r\n $(element).tab('show');\r\n });\r\n }\r\n };\r\n });","invo.directive('stringToNumber', function() {\r\n return {\r\n require: 'ngModel',\r\n link: function(scope, element, attrs, ngModel) {\r\n ngModel.$parsers.push(function(value) {\r\n return '' + value;\r\n });\r\n ngModel.$formatters.push(function(value) {\r\n return parseFloat(value, 10);\r\n });\r\n }\r\n };\r\n});","invo.directive('studentAvatar',function(){\r\n return {\r\n replace:true,\r\n scope:{\r\n size:\"@\",\r\n user:\"=\"\r\n },\r\n template:'{{initials}}',\r\n link: function(scope){\r\n var unwatch = scope.$watch(\"user\", function(user) {\r\n if (user.username) {\r\n scope.initials = (user.fullname[0] || \"A\").toUpperCase();\r\n unwatch();\r\n }\r\n });\r\n }\r\n }\r\n});","invo.directive('uniqueEmail',function($rootScope,$interval,userService){\r\n return{\r\n restrict:'A',\r\n require:'ngModel',\r\n link:function(scope,element,attrs,ngModel){\r\n var _interval;\r\n var _isTimerRun = false;\r\n scope.$watch( attrs.ngModel, function (newEmail ){\r\n ngModel.$setValidity('uniqueHelper', false);\r\n ngModel.$setValidity('unique', true);\r\n if (_isTimerRun){\r\n $interval.cancel( _interval );\r\n }\r\n _interval = $interval(function () {\r\n if (!ngModel || !element.val()) return;\r\n if (ngModel.$error.email) return;\r\n if (ngModel.$error.required) return;\r\n if (ngModel.originalValue==element.val()){\r\n ngModel.$setPristine(true);\r\n }\r\n if (ngModel.$pristine){\r\n ngModel.$setValidity('uniqueHelper', true);\r\n ngModel.$setValidity('unique', true);\r\n ngModel.originalValue=element.val();\r\n }\r\n else {\r\n var currentValue = element.val();\r\n userService.checkEmailAvailability(currentValue)\r\n .then(function (response) {\r\n console.log(response);\r\n if (currentValue == element.val()) {\r\n ngModel.$setValidity('unique', response.data.data.availability);\r\n ngModel.$setValidity('uniqueHelper', response.data.data.availability);\r\n }\r\n else {\r\n ngModel.$setValidity('uniqueHelper', false);\r\n ngModel.$setValidity('unique', true);\r\n }\r\n })\r\n .catch(function (data) {\r\n ngModel.$setValidity('uniqueHelper', false);\r\n ngModel.$setValidity('unique', true);\r\n });\r\n }\r\n },500,1);\r\n _isTimerRun=true;\r\n },true);\r\n }\r\n };\r\n});","invo.directive('uniqueUsername',function($rootScope,$interval,userService){\r\n return{\r\n restrict:'A',\r\n require:'ngModel',\r\n link:function(scope,element,attrs,ngModel){\r\n var _interval;\r\n var _isTimerRun = false;\r\n scope.$watch( attrs.ngModel, function (newValue ){\r\n ngModel.$setValidity('uniqueHelper', false);\r\n ngModel.$setValidity('unique', true);\r\n if (_isTimerRun){\r\n $interval.cancel( _interval );\r\n }\r\n _interval = $interval(function () {\r\n if (!ngModel || !element.val()) return;\r\n if (ngModel.$error.required) return;\r\n if (ngModel.originalValue==element.val()){\r\n ngModel.$setPristine(true);\r\n }\r\n if (ngModel.$pristine){\r\n ngModel.$setValidity('uniqueHelper', true);\r\n ngModel.$setValidity('unique', true);\r\n ngModel.originalValue=element.val();\r\n }\r\n else {\r\n var currentValue = element.val();\r\n userService.checkUsernameAvailability(currentValue)\r\n .then(function (response) {\r\n if (currentValue == element.val()) {\r\n ngModel.$setValidity('unique', response.data.data.availability);\r\n ngModel.$setValidity('uniqueHelper', response.data.data.availability);\r\n }\r\n else {\r\n ngModel.$setValidity('uniqueHelper', false);\r\n ngModel.$setValidity('unique', true);\r\n }\r\n })\r\n .catch(function (data) {\r\n ngModel.$setValidity('uniqueHelper', false);\r\n ngModel.$setValidity('unique', true);\r\n });\r\n }\r\n },500,1);\r\n _isTimerRun=true;\r\n },true);\r\n }\r\n };\r\n});","invo.directive('randomAvatar',function(){\r\n var colorMapping={};\r\n return {\r\n replace:true,\r\n scope:{\r\n color:\"@\",\r\n size:\"@\",\r\n user:\"=\"\r\n },\r\n template:'{{initials}}',\r\n link: function(scope){\r\n\r\n function randomColor() {\r\n var letters = '0123456789ABCDEF'.split('');\r\n var color = '#';\r\n for (var i = 0; i < 6; i++ ) {\r\n color += letters[Math.floor(Math.random() * 16)];\r\n }\r\n return color;\r\n }\r\n var unwatch = scope.$watch(\"user\", function(user) {\r\n if (user.username) {\r\n scope.initials = (user.fullname[0] || \"A\").toUpperCase();\r\n if (!colorMapping[user.id]) {\r\n if (color){\r\n colorMapping[user.id] = color;\r\n }\r\n else{\r\n colorMapping[user.id] = randomColor();\r\n }\r\n }\r\n scope.color = colorMapping[user.id];\r\n unwatch();\r\n }\r\n });\r\n }\r\n }\r\n});","invo.directive('vendorstatus',function(){\r\n\treturn {\r\n\t replace:true,\r\n\t scope:{\r\n\t\t status:\"@\"\r\n\t },\r\n\t template:'{{label}}',\r\n\t link: function(scope,element,attrs){\r\n\t\t scope.$watch('status', function (newVal) { \r\n if (scope.status==\"UNCONFIRMED\"){\r\n \t\t\t scope.badgeclass=\"badge badge-danger\";\r\n \t\t\t scope.label=\"Unconfirmed\";\r\n \t\t }\r\n \t\t if (scope.status==\"CONFIRMED\"){\r\n \t\t\t scope.badgeclass=\"badge badge-success\";\r\n \t\t\t scope.label=\"Confirmed\";\r\n \t\t }\r\n });\r\n\t\t \r\n\t }\r\n\t}\t\r\n});","invo.filter('customDate',function($filter){\r\n\tvar dateFilter = $filter(\"date\");\r\n return function(text,symbol){\r\n return dateFilter(text,\"longDate\");\r\n }\r\n});\r\n\r\ninvo.filter('fullTime',function($filter){\r\n\tvar dateFilter = $filter(\"date\");\r\n return function(text,symbol){\r\n return dateFilter(text,\"medium\");\r\n }\r\n});\r\n\r\ninvo.filter('formatDate', function($filter){\r\n\tvar dateFilter = $filter(\"date\");\r\n\treturn function(text,symbol){\r\n\t\treturn dateFilter(text, \"dd/MM/yyyy\");\r\n\t}\r\n});","invo.filter('exchangeRate',function($filter){\r\n return function(text){\r\n var num = Number(text);\r\n if (Number(num.toFixed(4))>0.01){\r\n return num.toFixed(4);\r\n }\r\n else\r\n return num.toFixed(6);\r\n }\r\n});","invo.filter('filesize', function () {\r\n\treturn function (size) {\r\n\t\tif (isNaN(size))\r\n\t\tsize = 0;\r\n\t\t \r\n\t\tif (size < 1024)\r\n\t\treturn size + ' B';\r\n\t\t \r\n\t\tsize /= 1024;\r\n\t\t \r\n\t\tif (size < 1024)\r\n\t\treturn size.toFixed(2) + ' KB';\r\n\t\t \r\n\t\tsize /= 1024;\r\n\t\t \r\n\t\tif (size < 1024)\r\n\t\treturn size.toFixed(2) + ' MB';\r\n\t\t \r\n\t\tsize /= 1024;\r\n\t\t \r\n\t\tif (size < 1024)\r\n\t\treturn size.toFixed(2) + ' GB';\r\n\t\t \r\n\t\tsize /= 1024;\r\n\t\t \r\n\t\treturn size.toFixed(2) + ' TB';\r\n\t\t};\r\n});","invo.filter('invoiceStatus',function(){\r\n return function(text){\r\n return 'Paid';\r\n }\r\n});","invo.filter('money',function($filter){\r\n\tvar currencyFilter = $filter(\"currency\");\r\n return function(text,symbol){\r\n if (symbol === null || typeof symbol ==='undefined') symbol=\"\";\r\n if (text === null || typeof text ==='undefined') text=0;\r\n return currencyFilter(text,symbol + \" \");\r\n }\r\n});","invo.filter('paymentType',function($filter){\r\n return function(text){\r\n if (text ===\"BANK_TRANSFER\")\r\n return \"Bank Transfer\"\r\n if (text ===\"CASH\")\r\n return \"Cash\"\r\n if (text ===\"CREDIT_CARD\")\r\n return \"Credit Card\"\r\n if (text ===\"GIRO\")\r\n return \"Giro\"\r\n if (text ===\"CHEQUE\")\r\n return \"Cheque\"\r\n }\r\n});","invo.filter('titleCase',function(){\r\n\treturn function (input) {\r\n\t\t if (!input) return; \r\n\t\t var words = input.split(' ');\r\n\t\t for (var i = 0; i < words.length; i++) {\r\n\t\t\t words[i] = words[i].charAt(0).toUpperCase() + words[i].slice(1);\r\n\t\t }\r\n\t\t return words.join(' ');\r\n\t}\r\n});","/**\r\n * Created by CC on 2/3/2016.\r\n */\r\ninvo.controller('SendExaminationRequestController',function($scope,$stateParams,$uibModalInstance,examinationService,examinationDocumentService,matriculationNo,thesisId,staffId,email,examinerAlias){\r\n\r\n $scope.thesisId = thesisId;\r\n console.log(\"initSendExamReq\");\r\n $scope.documents=[];\r\n\r\n $scope.listAttachableThesisDocuments=function(){\r\n\r\n examinationDocumentService.listAttachableThesisDocumentsByMatricNo(matriculationNo,examinerAlias).then(function(response){\r\n $scope.documents = response.data.data.documents\r\n $scope.docs = _.groupBy($scope.documents, 'classification');\r\n $scope.selectedDocuments=[];\r\n });\r\n }\r\n $scope.listAttachableThesisDocuments();\r\n\r\n $scope.toggleSelection = function(data){\r\n var idx = $scope.selectedDocuments.indexOf(data);\r\n\r\n if(idx > -1){\r\n $scope.selectedDocuments.splice(idx,1);\r\n }\r\n\r\n else {\r\n $scope.selectedDocuments.push(data);\r\n }\r\n }\r\n\r\n $scope.sendRequest = function(){\r\n\r\n examinationService.sendRequest($scope.thesisId,$scope.selectedDocuments,email,staffId).then(function(){\r\n $uibModalInstance.close('ok')\r\n }, function(data){\r\n });\r\n\r\n };\r\n\r\n $scope.close = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n})","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.factory('academicService',function($http,notify,$rootScope){\r\n\r\n var service = {\r\n list:list,\r\n schoolList:schoolList,\r\n enable : enable,\r\n disable : disable,\r\n exportToExcel:exportToExcel,\r\n getPager:getPager\r\n };\r\n\r\n return service;\r\n\r\n function list(q,offset,sortBy,filterBy,numberPerPage){\r\n return $http.get($rootScope.serverUrl+\"AcademicApp/list?offset=\"+offset+\"&max=\"+numberPerPage+\"&q=\"+encodeURIComponent(q)+\"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function schoolList(status){\r\n return $http.get($rootScope.serverUrl+\"AcademicApp/schoolList?status=\"+status).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function enable(academicId){\r\n return $http.post($rootScope.serverUrl+\"AcademicApp/enable?academicId=\"+academicId).\r\n then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function disable(academicId){\r\n return $http.post($rootScope.serverUrl+\"AcademicApp/disable?academicId=\"+academicId).\r\n then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function exportToExcel(q,sortBy,filterBy,fs,fd,sb,sbString){\r\n /*return $http({method: 'GET', url: $rootScope.serverUrl +\"AcademicApp/exportToExcel?q=\"+encodeURIComponent(q)+\r\n \"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&fs=\"+fs+\"&fd=\"+fd+\"&sb=\"+sb+\"&sbString=\"+encodeURIComponent(sbString)}).\r\n success(function(data, status, headers, config) {\r\n if (navigator.msSaveBlob) { //for IE\r\n var blob = b64toBlob(data.data.fileString, \"application/vnd.ms-excel\");\r\n navigator.msSaveBlob(blob, data.data.fileName + '.xlsx');\r\n function b64toBlob(b64Data, contentType, sliceSize) {\r\n contentType = contentType || '';\r\n sliceSize = sliceSize || 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n } else {\r\n var anchor = angular.element('');\r\n anchor.css({display: 'none'}); // Make sure it's not visible\r\n angular.element(document.body).append(anchor); // Attach to\r\n anchor.attr({\r\n href: 'data:attachment/xlsx;base64,' + encodeURI(data.data.fileString),\r\n target: '_blank',\r\n download: data.data.fileName + '.xlsx'\r\n })[0].click();\r\n console.log(anchor);\r\n anchor.remove(); // Clean it up afterwards\r\n }\r\n }).\r\n error(function(data, status, headers, config) {\r\n // handle error\r\n });*/\r\n window.open($rootScope.serverUrl +\"AcademicApp/exportToExcel?q=\"+encodeURIComponent(q)+\r\n \"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&fs=\"+fs+\"&fd=\"+fd+\"&sb=\"+sb+\"&sbString=\"+encodeURIComponent(sbString) ,\"_self\");\r\n }\r\n\r\n //for paging\r\n function getPager(totalItems, currentPage, pageSize) {\r\n // default to first page\r\n currentPage = currentPage || 1;\r\n\r\n // default page size is 10\r\n pageSize = pageSize || 10;\r\n\r\n // calculate total pages\r\n var totalPages = Math.ceil(totalItems / pageSize);\r\n\r\n var startPage, endPage;\r\n if (totalPages <= 10) {\r\n // less than 10 total pages so show all\r\n startPage = 1;\r\n endPage = totalPages;\r\n } else {\r\n // more than 10 total pages so calculate start and end pages\r\n if (currentPage <= 6) {\r\n startPage = 1;\r\n endPage = 10;\r\n } else if (currentPage + 4 >= totalPages) {\r\n startPage = totalPages - 9;\r\n endPage = totalPages;\r\n } else {\r\n startPage = currentPage - 5;\r\n endPage = currentPage + 4;\r\n }\r\n }\r\n\r\n // calculate start and end item indexes\r\n var startIndex = (currentPage - 1) * pageSize;\r\n var endIndex = startIndex + pageSize;\r\n\r\n // create an array of pages to ng-repeat in the pager control\r\n var pages = _.range(startPage, endPage + 1);\r\n\r\n // return object with all pager properties required by the view\r\n return {\r\n totalItems: totalItems,\r\n currentPage: currentPage,\r\n pageSize: pageSize,\r\n totalPages: totalPages,\r\n startPage: startPage,\r\n endPage: endPage,\r\n startIndex: startIndex,\r\n endIndex: endIndex,\r\n pages: pages\r\n };\r\n }\r\n\r\n});","/**\r\n * Created by Troy on 4/4/2015.\r\n */\r\ninvo.config(function($stateProvider, $urlRouterProvider,appVersion) {\r\n $stateProvider\r\n .state('app.academics',{\r\n url:\"/academics/:q\",\r\n templateUrl: \"./app/academic/list/academic-list.html?ver=\"+appVersion\r\n })\r\n});\r\n\r\ninvo.run(function (navigationService,auth) {\r\n if (navigationService.getMenuById('settings')==null) {\r\n var menu = {};\r\n menu.sectionName = \"Settings\";\r\n menu.noClick = true;\r\n menu.className = \"icon-cog3\";\r\n menu.id = \"settings\";\r\n menu.order = 50;\r\n menu.isHidden = function () {\r\n return !auth.session.isAdmin && !auth.session.isOASAdmin();\r\n }\r\n navigationService.addMenu(menu);\r\n }\r\n\r\n var submenu5={};\r\n submenu5.sectionName = \"Academic Staff\";\r\n submenu5.clickState = \"app.academics\";\r\n submenu5.order= 60;\r\n submenu5.id=\"academic\";\r\n submenu5.isSearchable=true;\r\n navigationService.addSubMenu('settings',submenu5);\r\n});","invo.factory('checklistService',function($http,notify,$rootScope,requestTransformService){\r\n\r\n var service = {\r\n list:list,\r\n editChecklist:editChecklist\r\n };\r\n\r\n return service;\r\n\r\n function list(){\r\n return $http.get($rootScope.serverUrl+\"StatusChecklist/list\").\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function editChecklist(name,value){\r\n var data = {name:name,value:value}\r\n return $http.post($rootScope.serverUrl + \"StatusChecklist/update\",requestTransformService.formData(data)).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n});","/**\r\n * Created by Troy on 4/4/2015.\r\n */\r\ninvo.config(function($stateProvider, $urlRouterProvider,appVersion) {\r\n $stateProvider\r\n .state('app.checklist',{\r\n url:\"/checklist/\",\r\n templateUrl: \"./app/checklist/list/checklist-list.html?ver=\"+appVersion\r\n })\r\n});\r\n\r\ninvo.run(function (navigationService,auth) {\r\n if (navigationService.getMenuById('settings')==null) {\r\n var menu = {};\r\n menu.sectionName = \"Settings\";\r\n menu.noClick = true;\r\n menu.className = \"icon-cog3\";\r\n menu.id = \"settings\";\r\n menu.order = 50;\r\n menu.isHidden = function () {\r\n return !auth.session.isAdmin && !auth.session.isOASAdmin();\r\n }\r\n navigationService.addMenu(menu);\r\n }\r\n\r\n var submenu10={};\r\n submenu10.sectionName = \"Checklist\";\r\n submenu10.clickState = \"app.checklist\";\r\n submenu10.order= 100;\r\n submenu10.id=\"checklist\";\r\n submenu10.isSearchable=true;\r\n navigationService.addSubMenu('settings',submenu10);\r\n});","/**\r\n * Created by CC on 29/3/2016.\r\n */\r\ninvo.factory('dashboardService',function($http,$rootScope){\r\n\r\n var service = {\r\n getExaminerResponse:getExaminerResponse,\r\n getThesisProcessCompletion:getThesisProcessCompletion,\r\n getThesisProcessCompletionByProcess:getThesisProcessCompletionByProcess,\r\n getThesisCount:getThesisCount,\r\n getExaminationRequestCompleted:getExaminationRequestCompleted,\r\n getSchoolList:getSchoolList,\r\n getCollegeList:getCollegeList,\r\n getProcessList:getProcessList,\r\n exportToExcel:exportToExcel,\r\n exportToExcel2:exportToExcel2\r\n };\r\n return service;\r\n\r\n\r\n function getExaminerResponse(filterBy,examinerType,dateFrom,dateTo){\r\n return $http.get($rootScope.serverUrl+\"Report/getExaminerResponse?filterBy=\"+encodeURIComponent(filterBy)+\"&examinerType=\"+examinerType+\"&dateFrom=\"+dateFrom+\"&dateTo=\"+dateTo).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function getThesisProcessCompletion(filterBy,dateFrom,dateTo){\r\n return $http.get($rootScope.serverUrl+\"Report/getThesisProcessCompletion?filterBy=\"+encodeURIComponent(filterBy)+\"&dateFrom=\"+dateFrom+\"&dateTo=\"+dateTo).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function getThesisProcessCompletionByProcess(filterBy,dateFrom,dateTo){\r\n return $http.get($rootScope.serverUrl+\"Report/getThesisProcessCompletionByProcess?filterBy=\"+encodeURIComponent(filterBy)+\"&dateFrom=\"+dateFrom+\"&dateTo=\"+dateTo).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function getThesisCount(filterBy,dateFrom,dateTo){\r\n return $http.get($rootScope.serverUrl+\"Report/getThesisCount?filterBy=\"+encodeURIComponent(filterBy)+\"&dateFrom=\"+dateFrom+\"&dateTo=\"+dateTo).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function getExaminationRequestCompleted(filterBy,dateFrom,dateTo){\r\n return $http.get($rootScope.serverUrl+\"Report/getExaminationRequestCompleted?filterBy=\"+encodeURIComponent(filterBy)+\"&dateFrom=\"+dateFrom+\"&dateTo=\"+dateTo).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function getSchoolList(){\r\n return $http.get($rootScope.serverUrl+\"Report/getSchoolList\").then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function getCollegeList(){\r\n return $http.get($rootScope.serverUrl+\"Report/getCollegeList\").then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function getProcessList(){\r\n return $http.get($rootScope.serverUrl+\"Report/getProcessList\").then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function exportToExcel(filterBy,dateFrom,dateTo,type){\r\n var typeStr = '';\r\n if (type==2) {\r\n typeStr = \"Report/exportToExcelThesisCompletion?\";\r\n } else if (type==3) {\r\n typeStr = \"Report/exportToExcelNumberOfThesis?\";\r\n } else if (type==4) {\r\n typeStr = \"Report/exportToExcelExaminationCompleted?\";\r\n }\r\n /*return $http({method: 'GET', url: $rootScope.serverUrl +typeStr+\"filterBy=\"+encodeURIComponent(filterBy)+\"&dateFrom=\"+dateFrom+\"&dateTo=\"+dateTo}).\r\n success(function(data, status, headers, config) {\r\n if (navigator.msSaveBlob) { //for IE\r\n var blob = b64toBlob(data.data.fileString, \"application/vnd.ms-excel\");\r\n navigator.msSaveBlob(blob, data.data.fileName + '.xlsx');\r\n function b64toBlob(b64Data, contentType, sliceSize) {\r\n contentType = contentType || '';\r\n sliceSize = sliceSize || 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n } else {\r\n var anchor = angular.element('');\r\n anchor.css({display: 'none'}); // Make sure it's not visible\r\n angular.element(document.body).append(anchor); // Attach to\r\n anchor.attr({\r\n href: 'data:attachment/xlsx;base64,' + encodeURI(data.data.fileString),\r\n target: '_blank',\r\n download: data.data.fileName + '.xlsx'\r\n })[0].click();\r\n console.log(anchor);\r\n anchor.remove(); // Clean it up afterwards\r\n }\r\n }).\r\n error(function(data, status, headers, config) {\r\n // handle error\r\n });*/\r\n window.open($rootScope.serverUrl +typeStr+\"filterBy=\"+encodeURIComponent(filterBy)+\"&dateFrom=\"+dateFrom+\"&dateTo=\"+dateTo ,\"_self\");\r\n }\r\n\r\n function exportToExcel2(filterBy,examinerType,dateFrom,dateTo){\r\n /*return $http({method: 'GET', url: $rootScope.serverUrl +\"Report/exportToExcelExaminerResponse?filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&dateFrom=\"+dateFrom+\"&dateTo=\"+dateTo+\"&examinerType=\"+examinerType}).\r\n success(function(data, status, headers, config) {\r\n if (navigator.msSaveBlob) { //for IE\r\n var blob = b64toBlob(data.data.fileString, \"application/vnd.ms-excel\");\r\n navigator.msSaveBlob(blob, data.data.fileName + '.xlsx');\r\n function b64toBlob(b64Data, contentType, sliceSize) {\r\n contentType = contentType || '';\r\n sliceSize = sliceSize || 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n } else {\r\n var anchor = angular.element('');\r\n anchor.css({display: 'none'}); // Make sure it's not visible\r\n angular.element(document.body).append(anchor); // Attach to\r\n anchor.attr({\r\n href: 'data:attachment/xlsx;base64,' + encodeURI(data.data.fileString),\r\n target: '_blank',\r\n download: data.data.fileName + '.xlsx'\r\n })[0].click();\r\n console.log(anchor);\r\n anchor.remove(); // Clean it up afterwards\r\n }\r\n }).\r\n error(function(data, status, headers, config) {\r\n // handle error\r\n });*/\r\n window.open($rootScope.serverUrl +\"Report/exportToExcelExaminerResponse?filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&dateFrom=\"+dateFrom+\"&dateTo=\"+dateTo+\"&examinerType=\"+examinerType ,\"_self\");\r\n }\r\n})","invo.config(function($stateProvider, $urlRouterProvider) {\r\n $stateProvider\r\n .state('app.dashboard', {\r\n url: \"/dashboard\",\r\n templateUrl: \"./app/dashboard/dashboard-part/dashboard.html\"\r\n })\r\n});\r\n\r\ninvo.run(function (navigationService, auth) {\r\n if(navigationService.getMenuById('dashboard')==null){\r\n var menu={};\r\n menu.sectionName = \"Report\";\r\n menu.className = \"icon-display4\";\r\n menu.clickState = \"app.dashboard\";\r\n menu.id=\"dashboard\";\r\n menu.order=100;\r\n menu.isHidden = function () {\r\n return !auth.session.isOASAdmin() && !auth.session.isOASStaff()\r\n }\r\n navigationService.addMenu(menu);\r\n }\r\n\r\n\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.factory('emailTemplateService',function($http,notify,$rootScope,requestTransformService){\r\n\r\n var service = {\r\n list:list,\r\n editTemplate:editTemplate\r\n };\r\n\r\n return service;\r\n\r\n function list(){\r\n return $http.get($rootScope.serverUrl+\"EmailTemplateSettingApp/list\").\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function editTemplate(name,subject,content,label,description){\r\n var data = {name:name,subject:subject,content:content,label:label,description:description}\r\n return $http.post($rootScope.serverUrl + \"EmailTemplateSettingApp/editTemplate\",requestTransformService.formData(data)).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n});","/**\r\n * Created by Troy on 4/4/2015.\r\n */\r\ninvo.config(function($stateProvider, $urlRouterProvider,appVersion) {\r\n $stateProvider\r\n .state('app.email-template',{\r\n url:\"/email-template/:q\",\r\n templateUrl: \"./app/email-template/list/email-template-list.html?ver=\"+appVersion\r\n })\r\n});\r\n\r\ninvo.run(function (navigationService,auth) {\r\n if (navigationService.getMenuById('settings')==null) {\r\n var menu = {};\r\n menu.sectionName = \"Settings\";\r\n menu.noClick = true;\r\n menu.className = \"icon-cog3\";\r\n menu.id = \"settings\";\r\n menu.order = 50;\r\n menu.isHidden = function () {\r\n return !auth.session.isAdmin && !auth.session.isOASAdmin();\r\n }\r\n navigationService.addMenu(menu);\r\n }\r\n\r\n var submenu6={};\r\n submenu6.sectionName = \"Email Template\";\r\n submenu6.clickState = \"app.email-template\";\r\n submenu6.order= 80;\r\n submenu6.id=\"email-template\";\r\n submenu6.isSearchable=true;\r\n navigationService.addSubMenu('settings',submenu6);\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.factory('examinationService',function($http,notify,$rootScope){\r\n\r\n var service = {\r\n examinationList:examinationList,\r\n examinationRequestList:examinationRequestList,\r\n getExaminationRequestCount:getExaminationRequestCount,\r\n wfstatusList:wfstatusList,\r\n schoolList:schoolList,\r\n getPager:getPager,\r\n sendRequest:sendRequest,\r\n updateNotes:updateNotes,\r\n exportToExcel:exportToExcel\r\n };\r\n\r\n return service;\r\n\r\n function sendRequest(thesisId,documents,examinerEmail,staffId){\r\n var url = $rootScope.serverUrl+\"ExaminationRequest/sendRequest?thesisId=\"+thesisId+\"&docIds=\"+JSON.stringify(documents);\r\n if (staffId!=null || staffId!= undefined){\r\n url = url + \"&examinerId=\"+staffId;\r\n }\r\n if ((examinerEmail!=null || examinerEmail!= undefined) && examinerEmail.trim().length>0){\r\n url = url + \"&examinerEmail=\"+examinerEmail;\r\n }\r\n return $http.get(url).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n function updateNotes(id, notes){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/updateNotes?id=\"+id+\"¬es=\"+encodeURIComponent(notes)).\r\n then(function (response){\r\n return response;\r\n });\r\n }\r\n\r\n function getExaminationRequestCount(){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/getExaminationRequestCount\");\r\n }\r\n\r\n function examinationRequestList(id){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/listThesisExaminationRequest?id=\"+id).\r\n then(function (response){\r\n return response;\r\n });\r\n }\r\n\r\n function examinationList(q,offset,sortBy,filterBy,numberPerPage,oe,searchDueDate){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/list?offset=\"+offset+\"&max=\"+numberPerPage+\"&q=\"+encodeURIComponent(q)+\"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\"&oe=\"+oe+\"&dueDate=\"+searchDueDate).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function wfstatusList(oe){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/wfstatusList?oe=\"+oe).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function schoolList(oe){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/schoolList?oe=\"+oe).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function exportToExcel(q,sortBy,filterBy,oe,fs,fsc,fdd,sb,sbString){\r\n /*return $http({method: 'GET', url: $rootScope.serverUrl +\"ExaminationRequest/exportToExcel?q=\"+encodeURIComponent(q)+\r\n \"&oe=\"+oe+\"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&fs=\"+fs+\"&fsc=\"+fsc+\"&fdd=\"+fdd+\"&sb=\"+sb+\"&sbString=\"+encodeURIComponent(sbString)}).\r\n success(function(data, status, headers, config) {\r\n if (navigator.msSaveBlob) { //for IE\r\n var blob = b64toBlob(data.data.fileString, \"application/vnd.ms-excel\");\r\n navigator.msSaveBlob(blob, data.data.fileName + '.xlsx');\r\n function b64toBlob(b64Data, contentType, sliceSize) {\r\n contentType = contentType || '';\r\n sliceSize = sliceSize || 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n } else {\r\n var anchor = angular.element('');\r\n anchor.css({display: 'none'}); // Make sure it's not visible\r\n angular.element(document.body).append(anchor); // Attach to\r\n anchor.attr({\r\n href: 'data:attachment/xlsx;base64,' + encodeURI(data.data.fileString),\r\n target: '_blank',\r\n download: data.data.fileName + '.xlsx'\r\n })[0].click();\r\n console.log(anchor);\r\n anchor.remove(); // Clean it up afterwards\r\n }\r\n }).\r\n error(function(data, status, headers, config) {\r\n // handle error\r\n });*/\r\n window.open($rootScope.serverUrl +\"ExaminationRequest/exportToExcel?q=\"+encodeURIComponent(q)+\r\n \"&oe=\"+oe+\"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&fs=\"+fs+\"&fsc=\"+fsc+\"&fdd=\"+fdd+\"&sb=\"+sb+\"&sbString=\"+encodeURIComponent(sbString) ,\"_self\");\r\n }\r\n\r\n //for paging\r\n function getPager(totalItems, currentPage, pageSize) {\r\n // default to first page\r\n currentPage = currentPage || 1;\r\n\r\n // default page size is 10\r\n pageSize = pageSize || 10;\r\n\r\n // calculate total pages\r\n var totalPages = Math.ceil(totalItems / pageSize);\r\n\r\n var startPage, endPage;\r\n if (totalPages <= 10) {\r\n // less than 10 total pages so show all\r\n startPage = 1;\r\n endPage = totalPages;\r\n } else {\r\n // more than 10 total pages so calculate start and end pages\r\n if (currentPage <= 6) {\r\n startPage = 1;\r\n endPage = 10;\r\n } else if (currentPage + 4 >= totalPages) {\r\n startPage = totalPages - 9;\r\n endPage = totalPages;\r\n } else {\r\n startPage = currentPage - 5;\r\n endPage = currentPage + 4;\r\n }\r\n }\r\n\r\n // calculate start and end item indexes\r\n var startIndex = (currentPage - 1) * pageSize;\r\n var endIndex = startIndex + pageSize;\r\n\r\n // create an array of pages to ng-repeat in the pager control\r\n var pages = _.range(startPage, endPage + 1);\r\n\r\n // return object with all pager properties required by the view\r\n return {\r\n totalItems: totalItems,\r\n currentPage: currentPage,\r\n pageSize: pageSize,\r\n totalPages: totalPages,\r\n startPage: startPage,\r\n endPage: endPage,\r\n startIndex: startIndex,\r\n endIndex: endIndex,\r\n pages: pages\r\n };\r\n }\r\n\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.config(function($stateProvider, $urlRouterProvider,appVersion) {\r\n $stateProvider\r\n .state('app.examination',{\r\n url:\"/examination/:q\",\r\n templateUrl: \"./app/examination/list/examination-list.html?ver=\"+appVersion\r\n })\r\n .state('app.examination-info',{\r\n url:\"/examination/info/:id\",\r\n templateUrl: \"./app/examination/info/examination-info.html?ver=\"+appVersion\r\n })\r\n .state('app.export-examination',{\r\n url:\"/export-examination/:q\",\r\n templateUrl: \"./app/export-examination/list/export-examination-list.html?ver=\"+appVersion\r\n })\r\n});\r\n\r\ninvo.run(function (navigationService,auth,examinationService,$rootScope) {\r\n if (navigationService.getMenuById('Examination')==null) {\r\n var menu = {};\r\n menu.sectionName = \"Examination\";\r\n menu.clickState = \"app.examination\";\r\n menu.className = \"icon-reading\";\r\n menu.id = \"examination\";\r\n menu.order = 30;\r\n menu.isHidden = function () {\r\n return !auth.session.isAdmin && !auth.session.isExaminer() && !auth.session.isAcadStaff() && !auth.session.isOASAdmin() && !auth.session.isOASStaff() && !auth.session.isSchoolAdmin()&& !auth.session.isSchoolStaff();\r\n }\r\n $rootScope.$on('login',function(){\r\n if (auth.session.isExaminer() || auth.session.isAcadStaff()){\r\n examinationService.getExaminationRequestCount().then(function(data){\r\n menu.indicatorVar = data.data.data.totalER;\r\n if (data.data.data.totalER>0){\r\n menu.hasIndicator = true;\r\n }\r\n else{\r\n menu.hasIndicator = false;\r\n }\r\n });\r\n }\r\n else{\r\n menu.hasIndicator = false;\r\n }\r\n });\r\n\r\n\r\n navigationService.addMenu(menu);\r\n\r\n }\r\n\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.factory('instructionService',function($http,notify,$rootScope,requestTransformService){\r\n\r\n var service = {\r\n getInstructionForExaminer:getInstructionForExaminer,\r\n editInstruction:editInstruction,\r\n saveEditInstruction:saveEditInstruction\r\n };\r\n\r\n return service;\r\n\r\n ////////////\r\n\r\n function getInstructionForExaminer(id){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/getInstructionForExaminer?id=\"+id);\r\n }\r\n\r\n function editInstruction(){\r\n return $http.get($rootScope.serverUrl+\"InstructionApp/getInstructionData\").\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function saveEditInstruction(content){\r\n var data = {content:content}\r\n return $http.post($rootScope.serverUrl + \"InstructionApp/saveEditInstruction\",requestTransformService.formData(data)).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n});","/**\r\n * Created by Troy on 4/4/2015.\r\n */\r\ninvo.config(function($stateProvider, $urlRouterProvider,appVersion) {\r\n $stateProvider\r\n .state('app.edit-instruction',{\r\n url:\"/edit-instruction\",\r\n templateUrl: \"./app/instruction/examiner-instruction/edit-instruction.html?ver=\"+appVersion\r\n })\r\n});\r\n\r\ninvo.run(function (navigationService,auth) {\r\n if (navigationService.getMenuById('settings')==null) {\r\n var menu = {};\r\n menu.sectionName = \"Settings\";\r\n menu.noClick = true;\r\n menu.className = \"icon-cog3\";\r\n menu.id = \"settings\";\r\n menu.order = 50;\r\n menu.isHidden = function () {\r\n return !auth.session.isAdmin && !auth.session.isOASAdmin();\r\n }\r\n navigationService.addMenu(menu);\r\n }\r\n\r\n var submenu7={};\r\n submenu7.sectionName = \"Instruction to Examiner\";\r\n submenu7.clickState = \"app.edit-instruction\";\r\n submenu7.order= 90;\r\n submenu7.id=\"edit-instruction\";\r\n submenu7.isSearchable=true;\r\n navigationService.addSubMenu('settings',submenu7);\r\n});","invo.controller('DocumentViewerController',function($scope,$rootScope) {\r\n $scope.imageSrc=\"\";\r\n $scope.pdfSrc=\"\";\r\n $scope.fileName = \"\";\r\n $scope.isShowImage=false;\r\n $scope.isValidFile = false;\r\n $scope.isCanClickPrev = true;\r\n $scope.isCanClickNext = true;\r\n $scope.fileTotal = 0;\r\n $scope.currentFilePage = 0;\r\n\r\n $scope.$watch('files',function(newVal,oldVal){\r\n console.log(newVal);\r\n $scope.fileTotal=newVal.length;\r\n if ($scope.fileTotal>0) {\r\n if ($scope.currentFilePage==0){$scope.currentFilePage=1;}\r\n if ($scope.currentFilePage>$scope.fileTotal){$scope.currentFilePage=1;}\r\n $scope.display($scope.files[$scope.currentFilePage-1]);\r\n }\r\n else{\r\n $scope.currentFilePage=0;\r\n }\r\n });\r\n\r\n $scope.$watch('[currentFilePage, fileTotal]', function(newVal, oldVal){\r\n if(newVal[0] == 1 || newVal[0] == 0){\r\n $scope.prevActive = \"inactive\";\r\n $scope.isCanClickPrev = true;\r\n }\r\n else{\r\n $scope.prevActive = \"\";\r\n $scope.isCanClickPrev = false;\r\n }\r\n if(newVal[1] > 1){\r\n $scope.nextActive = \"\";\r\n $scope.isCanClickNext = false;\r\n }\r\n if(newVal[1] < 1 || newVal[1] == newVal[0] && newVal[1] != 0){\r\n $scope.nextActive = \"inactive\";\r\n $scope.isCanClickNext = true;\r\n }\r\n },true);\r\n\r\n $scope.next = function(){\r\n $scope.currentFilePage ++ ;\r\n $scope.display($scope.files[$scope.currentFilePage-1]);\r\n }\r\n\r\n $scope.prev = function(){\r\n $scope.currentFilePage -- ;\r\n $scope.display($scope.files[$scope.currentFilePage-1]);\r\n }\r\n\r\n $scope.display = function(file){\r\n if(file != null){\r\n if (file.fileType == 'application/pdf')\r\n {\r\n $scope.isValidFile = true;\r\n $scope.isShowImage = false;\r\n $scope.imageSrc = \"\";\r\n $scope.pdfSrc = $rootScope.serverUrl+\"FileImage/getImage?id=\"+ file.id;\r\n $scope.fileName = file.name;\r\n }\r\n if(file.fileType == 'image/png' || file.fileType == 'image/jpg' || file.fileType == 'image/jpeg' || file.fileType == 'image/gif' || file.fileType == 'image/bmp')\r\n {\r\n $scope.isValidFile = true;\r\n $scope.isShowImage = true;\r\n $scope.pdfSrc = \"\";\r\n $scope.imageSrc = $rootScope.serverUrl+\"FileImage/getImage?id=\"+ file.id;\r\n $scope.fileName = file.name;\r\n }\r\n if(file.fileType != 'image/png' && file.fileType != 'image/jpg' && file.fileType != 'image/jpeg' && file.fileType != 'image/gif' && file.fileType != 'image/bmp' && file.fileType != 'application/pdf')\r\n {\r\n $scope.isValidFile = false;\r\n $scope.isShowImage = true;\r\n $scope.pdfSrc = \"\";\r\n $scope.imageSrc = $rootScope.serverUrl+\"FileImage/getImage?id=\"+ file.id;\r\n $scope.fileName = file.name;\r\n }\r\n }\r\n else\r\n $scope.isValidFile = false;\r\n }\r\n\r\n});","invo.factory('payablesService',function($q,$http,notify,$rootScope,auth,$filter,requestTransformService){\r\n var data={};\r\n var temp={};\r\n data.list=[];\r\n data.view={};\r\n data.total=0;\r\n temp.edit={};\r\n data.hasMoreItem=false;\r\n data.types=[\"Invoice\",\"Credit Memo\",\"Expense Claim\"];\r\n\r\n var initPayable = function() {\r\n var payable={};\r\n payable.currency = auth.session.company.baseCurrency;\r\n payable.paymentTerm = 0;\r\n payable.tax = 0;\r\n payable.discount = 0;\r\n payable.total = 0;\r\n payable.subTotal = 0;\r\n payable.dueDate = $filter(\"date\")(new Date(), 'yyyy-MM-dd');\r\n payable.invoiceDate = $filter(\"date\")(new Date(), 'yyyy-MM-dd');\r\n payable.payablesType = data.types[0];\r\n payable.payablesLines = [];\r\n payable.vendorName = \"\";\r\n return payable;\r\n }\r\n\r\n temp.new=initPayable();\r\n\r\n var saveListData = function(offset,response){\r\n data.list.splice(offset,10000);\r\n data.list = data.list.concat(response.data.invoices);\r\n data.total = response.data.total;\r\n data.hasMoreItem = data.list.length!=data.total;\r\n data.view = data.list[0];\r\n }\r\n\r\n\treturn {\r\n temp: temp,\r\n data: data,\r\n\t\tcreate : function(invoice,file){\r\n\t\t\tif(file.id != null){\r\n\t\t\t\tinvoice.fileId=file.id;\r\n\t\t\t}\r\n return $http.post($rootScope.serverUrl+'Payables/create', requestTransformService.formData(invoice))\r\n\t\t\t.then(function(response){\r\n data.view = response.data.data.invoice;\r\n data.list.splice(0,1,response.data.data.invoice);\r\n return response;\r\n\t\t\t});\r\n\t\t},\r\n addFile: function(id,file,onSuccess,onProgress,onError){\r\n var onComplete = function(e){\r\n if (xhr.status==200){\r\n var data =xhr.response;\r\n onSuccess(data);\r\n }\r\n else{\r\n data = xhr.response;\r\n notify.error(data,xhr.status);\r\n }\r\n }\r\n var formData = new FormData();\r\n formData.append('id', id);\r\n formData.append('file', file);\r\n var xhr = new XMLHttpRequest();\r\n xhr.upload.addEventListener(\"progress\", onProgress, false);\r\n xhr.addEventListener(\"load\", onComplete, false);\r\n xhr.open(\"POST\", $rootScope.serverUrl+'Payables/addFile');\r\n xhr.responseType='json';\r\n xhr.send(formData);\r\n },\r\n\t\tlist : function(q,offset,max){\r\n\t\t\treturn $http.get($rootScope.serverUrl+\"Payables/list?offset=\"+offset+\"&q=\"+q+\"&max=\"+max).\r\n\t\t\tthen (function(response){\r\n saveListData(offset,response.data);\r\n return response;\r\n\t\t\t});\r\n\t\t},\r\n\t\tlistOverdue : function(q,offset){\r\n\t\t\treturn $http.get($rootScope.serverUrl+\"Payables/listOverdue?offset=\"+offset+\"&q=\"+q).\r\n\t\t\tthen(function(response){\r\n saveListData(offset,response.data);\r\n return response;\r\n\t\t\t});\r\n\t\t},\r\n\t\tlistDueIn7Days : function(q,offset){\r\n\t\t\treturn $http.get($rootScope.serverUrl+\"Payables/listDueIn7Days?offset=\"+offset+\"&q=\"+q).\r\n\t\t\tthen(function(response){\r\n saveListData(offset,response.data);\r\n return response;\r\n\t\t\t})\r\n\t\t},\r\n\t\tget : function(id){\r\n\t\t\t return $http.get($rootScope.serverUrl+\"Payables/get?id=\" + id)\r\n .then(function( response ) {\r\n data.view = response.data.data.invoice;\r\n return response;\r\n\t });\r\n\t\t},\r\n\t\t\r\n update : function(invoice){\r\n return $http.post($rootScope.serverUrl+'Payables/update',requestTransformService.formData(invoice))\r\n .then(function(response){\r\n var idx = _.findIndex(data.list,{id:invoice.id});\r\n data.list.splice(idx, 1, response.data.data.invoice)\r\n data.view = response.data.data.invoice;\r\n return response;\r\n });\r\n },\r\n\t\tgetQuickStats: function(){\r\n\t\t\treturn $http.post($rootScope.serverUrl+\"Payables/getQuickStats\");\r\n\t\t},\r\n\t\tcancel : function(id){\r\n\t\t\treturn $http.post($rootScope.serverUrl+\"Payables/cancel?id=\"+id);\r\n\t\t},\r\n\t\t\r\n\t\tpay : function(id,paymentType,paymentRefNo,paymentAmount){\r\n\t\t\treturn $http.post($rootScope.serverUrl+\"Payables/pay?id=\"+id+\"&paymentType=\"+paymentType+\"&paymentRefNo=\"+paymentRefNo+\"&paymentAmount=\"+paymentAmount);\r\n\t\t},\r\n createLine : function(invoiceLine, id){\r\n return $http.post($rootScope.serverUrl+'PayablesLine/save?id=' + id,requestTransformService.formData(invoiceLine))\r\n .then(function(response) {\r\n data.view.payablesLines.push(response.data.data.invoiceLine);\r\n return response;\r\n });\r\n },\r\n\r\n getLine : function(id){\r\n \t\t return $http.get($rootScope.serverUrl+\"PayablesLine/get?id=\" + id);\r\n },\r\n\r\n updateLine : function(invoiceLine, id){\r\n return $http.post($rootScope.serverUrl+'PayablesLine/update?id=' + id,requestTransformService.formData(invoiceLine))\r\n .then(function(response){\r\n var idx = _.findIndex(data.view.payablesLines,{id:id});\r\n data.view.payablesLines.splice(idx, 1, response.data.data.invoiceLine)\r\n return response;\r\n });\r\n },\r\n \t\tdeleteLine : function(lineId,invoiceId){\r\n\r\n\t\treturn \t$http.get($rootScope.serverUrl+\"PayablesLine/deleteA?id=\" + lineId +\"&invoiceId=\" + invoiceId)\r\n .then(function( response ) {\r\n var idx = _.findIndex(data.view.payablesLines,{id:lineId});\r\n data.view.payablesLines.splice(idx, 1);\r\n return response;\r\n\t });\r\n\t\t},\r\n setSelected:function(payables){\r\n data.view=payables;\r\n },\r\n calculateDueDate: function(invoiceDate,paymentTerm){\r\n var date;\r\n if (invoiceDate == null || invoiceDate == undefined ) {\r\n date = new Date()\r\n }\r\n else{\r\n date = new Date(invoiceDate);\r\n }\r\n var term = parseInt(paymentTerm)\r\n if (isNaN(term)) term=0;\r\n date.setHours(0,0,0,0)\r\n date.setDate(date.getDate() + term);\r\n return $filter(\"date\")(date, 'yyyy-MM-dd');;\r\n },\r\n calculateTax:function(subTotal,discount){\r\n return Math.round((subTotal-discount) * auth.session.company.defaultTaxRate) / 100;\r\n },\r\n calculateLineTotal:function(lines){\r\n if (lines!=undefined) {\r\n var lineLength = lines.length;\r\n var total = 0;\r\n for (var i = 0; i < lines.length; i++) {\r\n total += lines[i].totalPrice;\r\n }\r\n return total;\r\n }\r\n return 0;\r\n },\r\n initPayable:initPayable\r\n\t}\r\n});","invo.config(function($stateProvider, $urlRouterProvider) {\r\n //\r\n // For any unmatched url, redirect to /state1\r\n //$urlRouterProvider.otherwise(\"/app\");\r\n //\r\n // Now set up the states\r\n $stateProvider\r\n\t .state('app.payables',{\r\n\t\t\turl:\"/payables/:id\",\r\n\t\t\ttemplateUrl: \"./App/payables/template/payables-main.html\"\r\n\t\t})\r\n});\r\n\r\ninvo.run(function (navigationService) {\r\n //var menu={};\r\n //menu.sectionName = \"Records\";\r\n //menu.className = \"icon-nav records\";\r\n //menu.id=\"records\";\r\n //menu.order=30;\r\n //navigationService.addMenu(menu);\r\n //var submenu={};\r\n //submenu.sectionName = \"Payables\";\r\n //submenu.clickState = \"app.payables\";\r\n //submenu.order = 10;\r\n //submenu.id=\"payables\";\r\n //submenu.isSearchable=true;\r\n //navigationService.addSubMenu('records',submenu);\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.factory('schoolService',function($http,notify,$rootScope,requestTransformService){\r\n var data={};\r\n data.list=[];\r\n data.view={};\r\n data.total=0;\r\n data.stats={};\r\n\r\n var saveListData = function(offset,response){\r\n //data.list.splice(offset,10000);\r\n data.list.splice(0,1000);\r\n data.list = data.list.concat(response.data.schools);\r\n data.total = response.data.total;\r\n //for paging\r\n /*if (begin == undefined) {\r\n begin = 0;\r\n }\r\n if (end == undefined) {\r\n end = 10;\r\n }\r\n data.list = data.list.slice(begin,end);*/\r\n }\r\n\r\n var service = {\r\n data: data,\r\n list:list,\r\n assignDean:assignDean,\r\n saveAssignEmail: saveAssignEmail,\r\n saveAssignDeanEmail: saveAssignDeanEmail,\r\n addSchoolDeanAssignment:addSchoolDeanAssignment,\r\n removeSchoolDeanAssignment:removeSchoolDeanAssignment,\r\n setDefaultDean:setDefaultDean,\r\n listSchoolDean:listSchoolDean,\r\n exportToExcel:exportToExcel\r\n };\r\n\r\n return service;\r\n\r\n ////////////\r\n\r\n\r\n function list(q,offset,sortBy,max){\r\n return $http.get($rootScope.serverUrl+\"SchoolApp/list?offset=\"+offset+\"&max=\"+max+\"&q=\"+encodeURIComponent(q)+\"&sortBy=\"+encodeURIComponent(sortBy)).\r\n then (function(response){\r\n saveListData(offset,response.data);\r\n return response;\r\n });\r\n }\r\n\r\n function assignDean(schoolCode,staffId){\r\n return $http.post($rootScope.serverUrl+\"SchoolApp/assignDean?schoolCode=\"+schoolCode+\"&staffId=\"+staffId).\r\n then(function(response){\r\n\r\n return response;\r\n });\r\n }\r\n\r\n function addSchoolDeanAssignment(schoolCode,staffId){\r\n return $http.post($rootScope.serverUrl+\"SchoolApp/addSchoolDeanAssignment?schoolCode=\"+schoolCode+\"&staffId=\"+staffId);\r\n }\r\n\r\n function removeSchoolDeanAssignment(assignmentId){\r\n return $http.post($rootScope.serverUrl+\"SchoolApp/removeSchoolDeanAssignment?id=\"+assignmentId);\r\n }\r\n\r\n function setDefaultDean(assignmentId,deanEmail){\r\n return $http.post($rootScope.serverUrl+\"SchoolApp/setDefaultDean?id=\"+assignmentId+\"&deanEmail=\"+encodeURIComponent(deanEmail));\r\n }\r\n function listSchoolDean(schoolCode){\r\n return $http.post($rootScope.serverUrl+\"SchoolApp/listSchoolDean?schoolCode=\"+schoolCode);\r\n }\r\n\r\n function saveAssignEmail(schoolCode, newEmail){\r\n return $http.post($rootScope.serverUrl+\"SchoolApp/saveAssignEmail?schoolCode=\"+schoolCode+\"&newEmail=\"+encodeURIComponent(newEmail)).\r\n then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function saveAssignDeanEmail(schoolCode, newEmail){\r\n return $http.post($rootScope.serverUrl+\"SchoolApp/saveAssignDeanEmail?schoolCode=\"+schoolCode+\"&newEmail=\"+encodeURIComponent(newEmail)).\r\n then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function exportToExcel(){\r\n /*return $http({method: 'GET', url: $rootScope.serverUrl +\"SchoolApp/exportToExcel\"}).\r\n success(function(data, status, headers, config) {\r\n if (navigator.msSaveBlob) { //for IE\r\n var blob = b64toBlob(data.data.fileString, \"application/vnd.ms-excel\");\r\n navigator.msSaveBlob(blob, data.data.fileName + '.xlsx');\r\n function b64toBlob(b64Data, contentType, sliceSize) {\r\n contentType = contentType || '';\r\n sliceSize = sliceSize || 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n } else {\r\n var anchor = angular.element('');\r\n anchor.css({display: 'none'}); // Make sure it's not visible\r\n angular.element(document.body).append(anchor); // Attach to\r\n anchor.attr({\r\n href: 'data:attachment/xlsx;base64,' + encodeURI(data.data.fileString),\r\n target: '_blank',\r\n download: data.data.fileName + '.xlsx'\r\n })[0].click();\r\n console.log(anchor);\r\n anchor.remove(); // Clean it up afterwards\r\n }\r\n }).\r\n error(function(data, status, headers, config) {\r\n // handle error\r\n });*/\r\n window.open($rootScope.serverUrl +\"SchoolApp/exportToExcel\" ,\"_self\");\r\n }\r\n\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.config(function($stateProvider, $urlRouterProvider,appVersion) {\r\n $stateProvider\r\n .state('app.schools',{\r\n url:\"/schools/:q\",\r\n templateUrl: \"./app/school/list/school-list.html?ver=\"+appVersion\r\n })\r\n .state('app.schools-programme',{\r\n url:\"/schools/programme/:id\",\r\n templateUrl: \"./app/school/programme/programme-list.html?ver=\"+appVersion\r\n })\r\n});\r\n\r\ninvo.run(function (navigationService,auth) {\r\n if (navigationService.getMenuById('settings')==null) {\r\n var menu = {};\r\n menu.sectionName = \"Settings\";\r\n menu.noClick = true;\r\n menu.className = \"icon-cog3\";\r\n menu.id = \"settings\";\r\n menu.order = 50;\r\n menu.isHidden = function () {\r\n return !auth.session.isAdmin && !auth.session.isOASAdmin();\r\n }\r\n navigationService.addMenu(menu);\r\n }\r\n\r\n var submenu4={};\r\n submenu4.sectionName = \"School\";\r\n submenu4.clickState = \"app.schools\";\r\n submenu4.order= 40;\r\n submenu4.id=\"school\";\r\n submenu4.isSearchable=true;\r\n navigationService.addSubMenu('settings',submenu4);\r\n});","invo.factory('settingService',function($http,notify,$rootScope,requestTransformService){\r\n\r\n var service = {\r\n list:list,\r\n editSetting:editSetting\r\n };\r\n\r\n return service;\r\n\r\n function list(){\r\n return $http.get($rootScope.serverUrl+\"SettingApp/list\").\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function editSetting(name,value){\r\n var data = {name:name,value:value}\r\n return $http.post($rootScope.serverUrl + \"SettingApp/update\",requestTransformService.formData(data)).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n});","/**\r\n * Created by Troy on 4/4/2015.\r\n */\r\ninvo.config(function($stateProvider, $urlRouterProvider,appVersion) {\r\n $stateProvider\r\n .state('app.setting',{\r\n url:\"/setting/\",\r\n templateUrl: \"./app/setting/list/setting-list.html?ver=\"+appVersion\r\n })\r\n});\r\n\r\ninvo.run(function (navigationService,auth) {\r\n if (navigationService.getMenuById('settings')==null) {\r\n var menu = {};\r\n menu.sectionName = \"Settings\";\r\n menu.noClick = true;\r\n menu.className = \"icon-cog3\";\r\n menu.id = \"settings\";\r\n menu.order = 50;\r\n menu.isHidden = function () {\r\n return !auth.session.isAdmin && !auth.session.isOASAdmin();\r\n }\r\n navigationService.addMenu(menu);\r\n }\r\n\r\n var submenu10={};\r\n submenu10.sectionName = \"Setting\";\r\n submenu10.clickState = \"app.setting\";\r\n submenu10.order= 100;\r\n submenu10.id=\"setting\";\r\n submenu10.isSearchable=true;\r\n navigationService.addSubMenu('settings',submenu10);\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.factory('staffService',function($http,notify,$rootScope,requestTransformService){\r\n var data={};\r\n data.list=[];\r\n data.view={};\r\n data.total=0;\r\n data.stats={};\r\n data.pager={};\r\n var saveListData = function(offset,response,page,numberPerPage){\r\n //data.list.splice(offset,10000);\r\n data.list.splice(0,1000);\r\n data.list = data.list.concat(response.data.staffs);\r\n data.total = response.data.total;\r\n //for paging\r\n data.pager = getPager(response.data.total, page, numberPerPage);//(totalList,pagenumber,numberperpage)\r\n }\r\n\r\n var roles={};\r\n roles.list=[];\r\n var saveRoleListData = function(offset,response){\r\n roles.list.splice(offset,10000);\r\n roles.list = roles.list.concat(response.data.roles);\r\n }\r\n var rolesAddStaff={};\r\n rolesAddStaff.list=[];\r\n var saveRoleListData2 = function(offset,response){\r\n rolesAddStaff.list.splice(offset,10000);\r\n rolesAddStaff.list = rolesAddStaff.list.concat(response.data.roles);\r\n }\r\n\r\n var depts = {};\r\n depts.list = [];\r\n\r\n var service = {\r\n data: data,\r\n roles: roles,\r\n rolesAddStaff: rolesAddStaff,\r\n depts: depts,\r\n list:list,\r\n deptList: deptList,\r\n enable : enable,\r\n disable : disable,\r\n listRoles : listRoles,\r\n listRolesAddStaff : listRolesAddStaff,\r\n addStaff: addStaff,\r\n editRoles: editRoles,\r\n sendActivationUrl:sendActivationUrl,\r\n exportToExcel:exportToExcel,\r\n removeStaff:removeStaff\r\n };\r\n\r\n return service;\r\n\r\n ////////////\r\n\r\n\r\n function list(q,offset,sortBy,filterBy,numberPerPage,page){\r\n return $http.get($rootScope.serverUrl+\"StaffApp/list?offset=\"+offset+\"&max=\"+numberPerPage+\"&q=\"+encodeURIComponent(q)+\"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)).\r\n then (function(response){\r\n saveListData(offset,response.data,page,numberPerPage);\r\n return response;\r\n });\r\n }\r\n\r\n function enable(staffId){\r\n return $http.post($rootScope.serverUrl+\"StaffApp/enable?staffId=\"+staffId).\r\n then(function(response){\r\n data.view.isEnabled = response.data.data.staff.isEnabled;\r\n return response;\r\n });\r\n }\r\n\r\n function disable(staffId){\r\n return $http.post($rootScope.serverUrl+\"StaffApp/disable?staffId=\"+staffId).\r\n then(function(response){\r\n data.view.isEnabled = response.data.data.staff.isEnabled;\r\n return response;\r\n });\r\n }\r\n\r\n function listRoles(){\r\n return $http.get($rootScope.serverUrl+\"StaffApp/getRoles?\").\r\n then (function(response){\r\n saveRoleListData(0,response.data);\r\n return response\r\n });\r\n }\r\n\r\n function listRolesAddStaff(){\r\n return $http.get($rootScope.serverUrl+\"StaffApp/getRolesForAddStaff?\").\r\n then (function(response){\r\n saveRoleListData2(0,response.data);\r\n return response\r\n });\r\n }\r\n\r\n function addStaff(staffId, roleId){\r\n return $http.post($rootScope.serverUrl+\"StaffApp/addStaff?staffId=\"+staffId+\"&roleId=\"+roleId).\r\n then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function removeStaff(staffId){\r\n return $http.post($rootScope.serverUrl+\"StaffApp/removeStaff?staffId=\"+staffId).\r\n then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function editRoles(staffId, rolesId){\r\n return $http.post($rootScope.serverUrl+\"StaffApp/editRoles?staffId=\"+staffId+\"&rolesId=\"+rolesId).\r\n then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function deptList(){\r\n return $http.get($rootScope.serverUrl+\"StaffApp/deptList?\").\r\n then (function(response){\r\n depts.list.splice(0,10000);\r\n depts.list = depts.list.concat(response.data.data.depts);\r\n return response;\r\n });\r\n }\r\n\r\n function sendActivationUrl (email){\r\n return $http.get($rootScope.serverUrl+\"StaffApp/sendActivationUrl?email=\"+staffId);\r\n }\r\n\r\n function exportToExcel(q,sortBy,filterBy,fs,fd,fr,sb,sbString){\r\n /*return $http({method: 'GET', url: $rootScope.serverUrl +\"StaffApp/exportToExcel?q=\"+encodeURIComponent(q)+\r\n \"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&fs=\"+fs+\"&fd=\"+fd+\"&fr=\"+fr+\"&sb=\"+sb+\"&sbString=\"+encodeURIComponent(sbString)}).\r\n success(function(data, status, headers, config) {\r\n if (navigator.msSaveBlob) { //for IE\r\n var blob = b64toBlob(data.data.fileString, \"application/vnd.ms-excel\");\r\n navigator.msSaveBlob(blob, data.data.fileName + '.xlsx');\r\n function b64toBlob(b64Data, contentType, sliceSize) {\r\n contentType = contentType || '';\r\n sliceSize = sliceSize || 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n } else {\r\n var anchor = angular.element('');\r\n anchor.css({display: 'none'}); // Make sure it's not visible\r\n angular.element(document.body).append(anchor); // Attach to\r\n anchor.attr({\r\n href: 'data:attachment/xlsx;base64,' + encodeURI(data.data.fileString),\r\n target: '_blank',\r\n download: data.data.fileName + '.xlsx'\r\n })[0].click();\r\n console.log(anchor);\r\n anchor.remove(); // Clean it up afterwards\r\n }\r\n }).\r\n error(function(data, status, headers, config) {\r\n // handle error\r\n });*/\r\n window.open($rootScope.serverUrl +\"StaffApp/exportToExcel?q=\"+encodeURIComponent(q)+\r\n \"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&fs=\"+fs+\"&fd=\"+fd+\"&fr=\"+fr+\"&sb=\"+sb+\"&sbString=\"+encodeURIComponent(sbString) ,\"_self\");\r\n }\r\n\r\n //for paging\r\n function getPager(totalItems, currentPage, pageSize) {\r\n // default to first page\r\n currentPage = currentPage || 1;\r\n\r\n // default page size is 10\r\n pageSize = pageSize || 10;\r\n\r\n // calculate total pages\r\n var totalPages = Math.ceil(totalItems / pageSize);\r\n\r\n var startPage, endPage;\r\n if (totalPages <= 10) {\r\n // less than 10 total pages so show all\r\n startPage = 1;\r\n endPage = totalPages;\r\n } else {\r\n // more than 10 total pages so calculate start and end pages\r\n if (currentPage <= 6) {\r\n startPage = 1;\r\n endPage = 10;\r\n } else if (currentPage + 4 >= totalPages) {\r\n startPage = totalPages - 9;\r\n endPage = totalPages;\r\n } else {\r\n startPage = currentPage - 5;\r\n endPage = currentPage + 4;\r\n }\r\n }\r\n\r\n // calculate start and end item indexes\r\n var startIndex = (currentPage - 1) * pageSize;\r\n var endIndex = startIndex + pageSize;\r\n\r\n // create an array of pages to ng-repeat in the pager control\r\n var pages = _.range(startPage, endPage + 1);\r\n\r\n // return object with all pager properties required by the view\r\n return {\r\n totalItems: totalItems,\r\n currentPage: currentPage,\r\n pageSize: pageSize,\r\n totalPages: totalPages,\r\n startPage: startPage,\r\n endPage: endPage,\r\n startIndex: startIndex,\r\n endIndex: endIndex,\r\n pages: pages\r\n };\r\n }\r\n\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.config(function($stateProvider, $urlRouterProvider,appVersion) {\r\n $stateProvider\r\n .state('app.staffs',{\r\n url:\"/staffs/:q\",\r\n templateUrl: \"./app/staff/list/staff-list.html?ver=\"+appVersion\r\n })\r\n});\r\n\r\ninvo.run(function (navigationService,auth) {\r\n if (navigationService.getMenuById('settings')==null) {\r\n var menu = {};\r\n menu.sectionName = \"Settings\";\r\n menu.noClick = true;\r\n menu.className = \"icon-cog3\";\r\n menu.id = \"settings\";\r\n menu.order = 50;\r\n menu.isHidden = function () {\r\n return !auth.session.isAdmin && !auth.session.isOASAdmin();\r\n }\r\n navigationService.addMenu(menu);\r\n }\r\n\r\n var schoolstaffMenu={};\r\n schoolstaffMenu.sectionName = \"Staff\";\r\n schoolstaffMenu.clickState = \"app.staffs\";\r\n schoolstaffMenu.order= 40;\r\n schoolstaffMenu.className = \"icon-people\";\r\n schoolstaffMenu.id=\"school-staff\";\r\n schoolstaffMenu.isSearchable=false;\r\n schoolstaffMenu.isHidden = function () {\r\n return !auth.session.isSchoolAdmin();\r\n }\r\n navigationService.addMenu(schoolstaffMenu);\r\n\r\n var submenu3={};\r\n submenu3.sectionName = \"Staff\";\r\n submenu3.clickState = \"app.staffs\";\r\n submenu3.order= 20;\r\n submenu3.id=\"staff\";\r\n submenu3.isSearchable=true;\r\n navigationService.addSubMenu('settings',submenu3);\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.factory('studentService',function($http,notify,$rootScope){\r\n\r\n var service = {\r\n list:list,\r\n schoolList:schoolList,\r\n enable : enable,\r\n disable : disable,\r\n exportToExcel:exportToExcel,\r\n getPager:getPager\r\n };\r\n\r\n return service;\r\n\r\n function list(q,offset,sortBy,filterBy,numberPerPage){\r\n return $http.get($rootScope.serverUrl+\"StudentApp/list?offset=\"+offset+\"&max=\"+numberPerPage+\"&q=\"+encodeURIComponent(q)+\"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function schoolList(status){\r\n return $http.get($rootScope.serverUrl+\"StudentApp/schoolList?status=\"+status).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function enable(studentId){\r\n return $http.post($rootScope.serverUrl+\"StudentApp/enable?studentId=\"+studentId).\r\n then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function disable(studentId){\r\n return $http.post($rootScope.serverUrl+\"StudentApp/disable?studentId=\"+studentId).\r\n then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function exportToExcel(q,sortBy,filterBy,fs,fd,sb,sbString){\r\n /*return $http({method: 'GET', url: $rootScope.serverUrl +\"StudentApp/exportToExcel?q=\"+encodeURIComponent(q)+\r\n \"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&fs=\"+fs+\"&fd=\"+fd+\"&sb=\"+sb+\"&sbString=\"+encodeURIComponent(sbString)}).\r\n success(function(data, status, headers, config) {\r\n if (navigator.msSaveBlob) { //for IE\r\n var blob = b64toBlob(data.data.fileString, \"application/vnd.ms-excel\");\r\n navigator.msSaveBlob(blob, data.data.fileName + '.xlsx');\r\n function b64toBlob(b64Data, contentType, sliceSize) {\r\n contentType = contentType || '';\r\n sliceSize = sliceSize || 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n } else {\r\n var anchor = angular.element('');\r\n anchor.css({display: 'none'}); // Make sure it's not visible\r\n angular.element(document.body).append(anchor); // Attach to\r\n anchor.attr({\r\n href: 'data:attachment/xlsx;base64,' + encodeURI(data.data.fileString),\r\n target: '_blank',\r\n download: data.data.fileName + '.xlsx'\r\n })[0].click();\r\n console.log(anchor);\r\n anchor.remove(); // Clean it up afterwards\r\n }\r\n }).\r\n error(function(data, status, headers, config) {\r\n // handle error\r\n });*/\r\n window.open($rootScope.serverUrl +\"StudentApp/exportToExcel?q=\"+encodeURIComponent(q)+\r\n \"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&fs=\"+fs+\"&fd=\"+fd+\"&sb=\"+sb+\"&sbString=\"+encodeURIComponent(sbString) ,\"_self\");\r\n }\r\n\r\n //for paging\r\n function getPager(totalItems, currentPage, pageSize) {\r\n // default to first page\r\n currentPage = currentPage || 1;\r\n\r\n // default page size is 10\r\n pageSize = pageSize || 10;\r\n\r\n // calculate total pages\r\n var totalPages = Math.ceil(totalItems / pageSize);\r\n\r\n var startPage, endPage;\r\n if (totalPages <= 10) {\r\n // less than 10 total pages so show all\r\n startPage = 1;\r\n endPage = totalPages;\r\n } else {\r\n // more than 10 total pages so calculate start and end pages\r\n if (currentPage <= 6) {\r\n startPage = 1;\r\n endPage = 10;\r\n } else if (currentPage + 4 >= totalPages) {\r\n startPage = totalPages - 9;\r\n endPage = totalPages;\r\n } else {\r\n startPage = currentPage - 5;\r\n endPage = currentPage + 4;\r\n }\r\n }\r\n\r\n // calculate start and end item indexes\r\n var startIndex = (currentPage - 1) * pageSize;\r\n var endIndex = startIndex + pageSize;\r\n\r\n // create an array of pages to ng-repeat in the pager control\r\n var pages = _.range(startPage, endPage + 1);\r\n\r\n // return object with all pager properties required by the view\r\n return {\r\n totalItems: totalItems,\r\n currentPage: currentPage,\r\n pageSize: pageSize,\r\n totalPages: totalPages,\r\n startPage: startPage,\r\n endPage: endPage,\r\n startIndex: startIndex,\r\n endIndex: endIndex,\r\n pages: pages\r\n };\r\n }\r\n\r\n});","/**\r\n * Created by Troy on 4/4/2015.\r\n */\r\ninvo.config(function($stateProvider, $urlRouterProvider,appVersion) {\r\n $stateProvider\r\n .state('app.students',{\r\n url:\"/students/:q\",\r\n templateUrl: \"./app/student/list/student-list.html?ver=\"+appVersion\r\n })\r\n});\r\n\r\ninvo.run(function (navigationService,auth) {\r\n if (navigationService.getMenuById('settings')==null) {\r\n var menu = {};\r\n menu.sectionName = \"Settings\";\r\n menu.noClick = true;\r\n menu.className = \"icon-cog3\";\r\n menu.id = \"settings\";\r\n menu.order = 50;\r\n menu.isHidden = function () {\r\n return !auth.session.isAdmin && !auth.session.isOASAdmin();\r\n }\r\n navigationService.addMenu(menu);\r\n }\r\n\r\n var submenu6={};\r\n submenu6.sectionName = \"Student\";\r\n submenu6.clickState = \"app.students\";\r\n submenu6.order= 70;\r\n submenu6.id=\"student\";\r\n submenu6.isSearchable=true;\r\n navigationService.addSubMenu('settings',submenu6);\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.factory('thesisService',function($http,notify,$rootScope){\r\n\r\n var service = {\r\n list:list,\r\n wfstatusList:wfstatusList,\r\n schoolList:schoolList,\r\n exportToExcel:exportToExcel,\r\n getPager:getPager\r\n //withdraw:withdraw,\r\n //approveThesis:approveThesis,\r\n //rejectThesis:rejectThesis,\r\n //submitNewThesis:submitNewThesis,\r\n //submitAmendedThesis:submitAmendedThesis,\r\n //submitOralExamReport:submitOralExamReport,\r\n //rerouteThesis:rerouteThesis,\r\n //sendExaminationRecommendation:sendExaminationRecommendation,\r\n //viewRejectionMessage:viewRejectionMessage,\r\n //viewRecommendation:viewRecommendation\r\n };\r\n\r\n return service;\r\n\r\n ////////////\r\n\r\n\r\n function list(q,offset,sortBy,filterBy,page,numberPerPage,assignedOnly){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/list?offset=\"+offset+\"&max=\"+numberPerPage+\"&q=\"+encodeURIComponent(q)+\"&assignedOnly=\"+assignedOnly+\"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function wfstatusList(){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/wfstatusList\").then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function schoolList(cbStatus){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/schoolList?cbStatus=\"+cbStatus).then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function exportToExcel(q,sortBy,filterBy,assignedOnly,fs,fsc,sb,sbString){\r\n /*return $http({method: 'GET', url: $rootScope.serverUrl +\"ThesisApp/exportToExcel?q=\"+encodeURIComponent(q)+\r\n \"&assignedOnly=\"+assignedOnly+\"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&fs=\"+fs+\"&fsc=\"+fsc+\"&sb=\"+sb+\"&sbString=\"+encodeURIComponent(sbString)}).\r\n success(function(data, status, headers, config) {\r\n if (navigator.msSaveBlob) { //for IE\r\n var blob = b64toBlob(data.data.fileString, \"application/vnd.ms-excel\");\r\n navigator.msSaveBlob(blob, data.data.fileName + '.xlsx');\r\n function b64toBlob(b64Data, contentType, sliceSize) {\r\n contentType = contentType || '';\r\n sliceSize = sliceSize || 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n } else {\r\n var anchor = angular.element('');\r\n anchor.css({display: 'none'}); // Make sure it's not visible\r\n angular.element(document.body).append(anchor); // Attach to\r\n anchor.attr({\r\n href: 'data:attachment/xlsx;base64,' + encodeURI(data.data.fileString),\r\n target: '_blank',\r\n download: data.data.fileName + '.xlsx'\r\n })[0].click();\r\n console.log(anchor);\r\n anchor.remove(); // Clean it up afterwards\r\n }\r\n }).\r\n error(function(data, status, headers, config) {\r\n // handle error\r\n });*/\r\n window.open($rootScope.serverUrl +\"ThesisApp/exportToExcel?q=\"+encodeURIComponent(q)+\r\n \"&assignedOnly=\"+assignedOnly+\"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&fs=\"+fs+\"&fsc=\"+fsc+\"&sb=\"+sb+\"&sbString=\"+encodeURIComponent(sbString) ,\"_self\");\r\n }\r\n\r\n //function withdraw(id){\r\n // return $http.get($rootScope.serverUrl+\"ThesisApp/withdraw?id=\"+id).\r\n // then (function(response){\r\n // return response;\r\n // });\r\n //}\r\n //\r\n //function approveThesis(id){\r\n // return $http.get($rootScope.serverUrl+\"ThesisApp/approveThesis?id=\"+id).\r\n // then (function(response){\r\n //\r\n // return response;\r\n // });\r\n //}\r\n //\r\n //function rejectThesis(id,message){\r\n // return $http.get($rootScope.serverUrl+\"ThesisApp/rejectThesis?id=\"+id+\"&rejectMessage=\"+message).\r\n // then (function(response){\r\n // return response;\r\n // });\r\n //}\r\n //\r\n //function rerouteThesis(id,staffId){\r\n // return $http.get($rootScope.serverUrl+\"ThesisApp/reroute?id=\"+id+\"&staffId=\"+staffId).\r\n // then (function(response){\r\n // return response;\r\n // });\r\n //}\r\n //\r\n //function submitOralExamReport(id,oralExamDate){\r\n // console.log(oralExamDate);\r\n // var strDate = moment(oralExamDate).format(\"YYYY-MM-DD\");\r\n // console.log(strDate);\r\n // return $http.get($rootScope.serverUrl+\"ThesisApp/submitOralExamReport?id=\"+id+\"&oralExamReportDate=\"+strDate).\r\n // then (function(response){\r\n // return response;\r\n // });\r\n //}\r\n //\r\n //function submitAmendedThesis(id,newTitle){\r\n // return $http.get($rootScope.serverUrl+\"ThesisApp/submitAmendedThesis?id=\"+id+\"&newTitle=\"+newTitle).\r\n // then (function(response){\r\n // return response;\r\n // });\r\n //}\r\n //\r\n //function submitNewThesis(id,newTitle){\r\n // return $http.get($rootScope.serverUrl+\"ThesisApp/submitNewThesis?id=\"+id+\"&newTitle=\"+newTitle).\r\n // then (function(response){\r\n // return response;\r\n // });\r\n //}\r\n //\r\n //function sendExaminationRecommendation(id,recommendation){\r\n // return $http.get($rootScope.serverUrl+\"ThesisApp/submitExaminationRecommendationToSchool?id=\"+id+\"&recommendation=\"+recommendation).\r\n // then (function(response){\r\n // return response;\r\n // });\r\n //}\r\n //\r\n //function viewRejectionMessage(id){\r\n // return $http.get($rootScope.serverUrl+\"ThesisApp/viewThesisRejectionMessage?id=\"+id).\r\n // then (function(response){\r\n // return response;\r\n // });\r\n //}\r\n //\r\n //function viewRecommendation(id){\r\n // return $http.get($rootScope.serverUrl+\"ThesisApp/viewThesisRejectionMessage?id=\"+id).\r\n // then (function(response){\r\n // return response;\r\n // });\r\n //}\r\n\r\n //for paging\r\n function getPager(totalItems, currentPage, pageSize) {\r\n // default to first page\r\n currentPage = currentPage || 1;\r\n\r\n // default page size is 10\r\n pageSize = pageSize || 10;\r\n\r\n // calculate total pages\r\n var totalPages = Math.ceil(totalItems / pageSize);\r\n\r\n var startPage, endPage;\r\n if (totalPages <= 10) {\r\n // less than 10 total pages so show all\r\n startPage = 1;\r\n endPage = totalPages;\r\n } else {\r\n // more than 10 total pages so calculate start and end pages\r\n if (currentPage <= 6) {\r\n startPage = 1;\r\n endPage = 10;\r\n } else if (currentPage + 4 >= totalPages) {\r\n startPage = totalPages - 9;\r\n endPage = totalPages;\r\n } else {\r\n startPage = currentPage - 5;\r\n endPage = currentPage + 4;\r\n }\r\n }\r\n\r\n // calculate start and end item indexes\r\n var startIndex = (currentPage - 1) * pageSize;\r\n var endIndex = startIndex + pageSize;\r\n\r\n // create an array of pages to ng-repeat in the pager control\r\n var pages = _.range(startPage, endPage + 1);\r\n\r\n // return object with all pager properties required by the view\r\n return {\r\n totalItems: totalItems,\r\n currentPage: currentPage,\r\n pageSize: pageSize,\r\n totalPages: totalPages,\r\n startPage: startPage,\r\n endPage: endPage,\r\n startIndex: startIndex,\r\n endIndex: endIndex,\r\n pages: pages\r\n };\r\n }\r\n\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.config(function($stateProvider, $urlRouterProvider,appVersion) {\r\n $stateProvider\r\n .state('app.thesis',{\r\n url:\"/thesis/:q\",\r\n templateUrl: \"./app/thesis/list/thesis-list.html?ver=\"+appVersion\r\n })\r\n .state('app.thesis-info',{\r\n url:\"/thesis/info/:id\",\r\n templateUrl: \"./app/thesis/info/thesis-info.html?ver=\"+appVersion\r\n })\r\n});\r\n\r\ninvo.run(function (navigationService,auth) {\r\n if (navigationService.getMenuById('Thesis')==null) {\r\n var menu = {};\r\n menu.sectionName = \"Thesis\";\r\n menu.clickState = \"app.thesis\";\r\n menu.className = \"icon-book\";\r\n menu.id = \"thesis\";\r\n menu.order = 20;\r\n menu.isHidden = function () {\r\n return !auth.session.isAdmin && !auth.session.isAcadStaff() && !auth.session.isOASAdmin()&&!auth.session.isOASStaff() && !auth.session.isSchoolStaff() && !auth.session.isSchoolAdmin();\r\n }\r\n navigationService.addMenu(menu);\r\n }\r\n\r\n /*if (navigationService.getMenuById('Examination')==null) {\r\n var menu = {};\r\n menu.sectionName = \"Examination\";\r\n menu.clickState = \"app.examinations\";\r\n menu.className = \"icon-reading\";\r\n menu.id = \"examination\";\r\n menu.order = 30;\r\n menu.isHidden = function () {\r\n return !auth.session.isAdmin && !auth.session.isAcadStaff() && !auth.session.isOASAdmin()&&!auth.session.isOASStaff() && !auth.session.isSchoolStaff() && !auth.session.isSchoolAdmin();\r\n }\r\n navigationService.addMenu(menu);\r\n }*/\r\n\r\n});","invo.factory('examinerService',function($http,notify,$rootScope){\r\n var data={};\r\n data.list=[];\r\n data.view={};\r\n data.total=0;\r\n data.stats={};\r\n data.pager={};\r\n var saveListData = function(offset,response,page,numberPerPage){\r\n //data.list.splice(offset,10000);\r\n data.list.splice(0,1000);\r\n data.list = data.list.concat(response.data.users);\r\n data.total = response.data.total;\r\n //for paging\r\n data.pager = getPager(response.data.total,page,numberPerPage);//(totalList,pagenumber,numberperpage)\r\n }\r\n\r\n var service = {\r\n data: data,\r\n list:list,\r\n enable : enable,\r\n disable : disable,\r\n update : update,\r\n resetPassword : resetPassword,\r\n setSelected:setSelected,\r\n sendActivationUrl:sendActivationUrl,\r\n exportToExcel:exportToExcel\r\n };\r\n\r\n return service;\r\n\r\n ////////////\r\n\r\n\r\n function list(q,offset,sortBy,filterBy,numberPerPage,page){\r\n return $http.get($rootScope.serverUrl+\"ExaminerApp/list?offset=\"+offset+\"&max=\"+numberPerPage+\"&q=\"+encodeURIComponent(q)+\"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)).\r\n then (function(response){\r\n saveListData(offset,response.data,page,numberPerPage);\r\n return response;\r\n });\r\n }\r\n\r\n function enable (id){\r\n return $http.post($rootScope.serverUrl+\"ExaminerApp/enable?id=\"+id).\r\n then(function(response){\r\n data.view.enabled = response.data.data.user.enabled;\r\n return response;\r\n });\r\n }\r\n\r\n function disable(id){\r\n return $http.post($rootScope.serverUrl+\"ExaminerApp/disable?id=\"+id).\r\n then(function(response){\r\n data.view.enabled = response.data.data.user.enabled;\r\n return response;\r\n });\r\n }\r\n\r\n function update(id,name,university){\r\n return $http.post($rootScope.serverUrl+\"ExaminerApp/update?id=\" + id+\"&name=\"+encodeURIComponent(name)+\"&university=\"+encodeURIComponent(university));\r\n }\r\n\r\n function resetPassword(id,newp,confirmp){\r\n return $http.get($rootScope.serverUrl+\"ExaminerApp/changePassword?id=\" + id+\"&newp=\"+encodeURIComponent(newp)+\"&confirmp=\"+encodeURIComponent(confirmp));\r\n }\r\n\r\n function setSelected(user){\r\n data.view=user;\r\n }\r\n\r\n function sendActivationUrl (email){\r\n return $http.get($rootScope.serverUrl+\"ExaminerApp/sendActivationUrl?email=\"+userId);\r\n }\r\n\r\n function exportToExcel(q,sortBy,filterBy,fs,sb,sbString){\r\n /*return $http({method: 'GET', url: $rootScope.serverUrl +\"ExaminerApp/exportToExcel?q=\"+encodeURIComponent(q)+\r\n \"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&fs=\"+fs+\"&sb=\"+sb+\"&sbString=\"+encodeURIComponent(sbString)}).\r\n success(function(data, status, headers, config) {\r\n if (navigator.msSaveBlob) { //for IE\r\n var blob = b64toBlob(data.data.fileString, \"application/vnd.ms-excel\");\r\n navigator.msSaveBlob(blob, data.data.fileName + '.xlsx');\r\n function b64toBlob(b64Data, contentType, sliceSize) {\r\n contentType = contentType || '';\r\n sliceSize = sliceSize || 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n } else {\r\n var anchor = angular.element('');\r\n anchor.css({display: 'none'}); // Make sure it's not visible\r\n angular.element(document.body).append(anchor); // Attach to\r\n anchor.attr({\r\n href: 'data:attachment/xlsx;base64,' + encodeURI(data.data.fileString),\r\n target: '_blank',\r\n download: data.data.fileName + '.xlsx'\r\n })[0].click();\r\n console.log(anchor);\r\n anchor.remove(); // Clean it up afterwards\r\n }\r\n }).\r\n error(function(data, status, headers, config) {\r\n // handle error\r\n });*/\r\n window.open($rootScope.serverUrl +\"ExaminerApp/exportToExcel?q=\"+encodeURIComponent(q)+\r\n \"&sortBy=\"+encodeURIComponent(sortBy)+\"&filterBy=\"+encodeURIComponent(filterBy)+\r\n \"&fs=\"+fs+\"&sb=\"+sb+\"&sbString=\"+encodeURIComponent(sbString) ,\"_self\");\r\n }\r\n\r\n //for paging\r\n function getPager(totalItems, currentPage, pageSize) {\r\n // default to first page\r\n currentPage = currentPage || 1;\r\n\r\n // default page size is 10\r\n pageSize = pageSize || 10;\r\n\r\n // calculate total pages\r\n var totalPages = Math.ceil(totalItems / pageSize);\r\n\r\n var startPage, endPage;\r\n if (totalPages <= 10) {\r\n // less than 10 total pages so show all\r\n startPage = 1;\r\n endPage = totalPages;\r\n } else {\r\n // more than 10 total pages so calculate start and end pages\r\n if (currentPage <= 6) {\r\n startPage = 1;\r\n endPage = 10;\r\n } else if (currentPage + 4 >= totalPages) {\r\n startPage = totalPages - 9;\r\n endPage = totalPages;\r\n } else {\r\n startPage = currentPage - 5;\r\n endPage = currentPage + 4;\r\n }\r\n }\r\n\r\n // calculate start and end item indexes\r\n var startIndex = (currentPage - 1) * pageSize;\r\n var endIndex = startIndex + pageSize;\r\n\r\n // create an array of pages to ng-repeat in the pager control\r\n var pages = _.range(startPage, endPage + 1);\r\n\r\n // return object with all pager properties required by the view\r\n return {\r\n totalItems: totalItems,\r\n currentPage: currentPage,\r\n pageSize: pageSize,\r\n totalPages: totalPages,\r\n startPage: startPage,\r\n endPage: endPage,\r\n startIndex: startIndex,\r\n endIndex: endIndex,\r\n pages: pages\r\n };\r\n }\r\n});\r\n","invo.factory('userService',function($http,notify,$rootScope,requestTransformService){\r\n var data={};\r\n data.list=[];\r\n data.view={};\r\n data.total=0;\r\n data.stats={};\r\n //data.hasMoreItem=false;\r\n\r\n var saveListData = function(offset,response,begin,end){\r\n data.list.splice(offset,10000);\r\n data.list = data.list.concat(response.data.users);\r\n data.total = response.data.total;\r\n //data.hasMoreItem = data.list.length!=data.total;\r\n //for paging\r\n if (begin == undefined) {\r\n begin = 0;\r\n }\r\n if (end == undefined) {\r\n end = 10;\r\n }\r\n data.list = data.list.slice(begin,end);\r\n }\r\n\r\n var service = {\r\n data: data,\r\n initNewUser:initNewUser,\r\n list:list,\r\n getUserStatistic : getUserStatistic,\r\n enable : enable,\r\n delete : del,\r\n disable : disable,\r\n listUserByRole:listUserByRole,\r\n get : get,\r\n resetPassword : resetPassword,\r\n create :create,\r\n update :update,\r\n checkEmailAvailability: checkEmailAvailability,\r\n checkUsernameAvailability: checkUsernameAvailability,\r\n setSelected:setSelected,\r\n addUserRole:addUserRole ,\r\n removeUserRole: removeUserRole,\r\n listUserRoles : listUserRoles,\r\n listUserAvailableRoles : listUserAvailableRoles,\r\n sendActivationUrl:sendActivationUrl\r\n };\r\n\r\n return service;\r\n\r\n ////////////\r\n\r\n\r\n function list(q,offset,sortBy,begin,end){\r\n return $http.get($rootScope.serverUrl+\"UserApp/list?offset=\"+offset+\"&q=\"+encodeURIComponent(q)+\"&sortBy=\"+encodeURIComponent(sortBy)).\r\n then (function(response){\r\n saveListData(offset,response.data,begin,end);\r\n return response;\r\n });\r\n }\r\n\r\n function getUserStatistic(){\r\n return $http.get($rootScope.serverUrl+\"UserApp/getUserStatistic\").\r\n then (function(response){\r\n data.stats=response.data.data;\r\n return response;\r\n });\r\n }\r\n function initNewUser(){\r\n data.view={};\r\n data.view.id=\"\";\r\n data.view.username=\"\";\r\n data.view.email=\"\";\r\n data.view.fullname=\"\";\r\n data.view.password=\"\";\r\n data.view.confirm=\"\";\r\n data.view.needActivation=false;\r\n }\r\n function del(id){\r\n return $http.post($rootScope.serverUrl+\"UserApp/delete?id=\"+id).\r\n then(function(response){\r\n var idx = _.findIndex(data.list,{id:id});\r\n if (idx>=0)data.list.splice(idx, 1);\r\n return response;\r\n });\r\n }\r\n\r\n function enable (id){\r\n return $http.post($rootScope.serverUrl+\"UserApp/enable?id=\"+id).\r\n then(function(response){\r\n data.view.enabled = response.data.data.user.enabled;\r\n return response;\r\n });\r\n }\r\n\r\n function disable(id){\r\n return $http.post($rootScope.serverUrl+\"UserApp/disable?id=\"+id).\r\n then(function(response){\r\n data.view.enabled = response.data.data.user.enabled;\r\n return response;\r\n });\r\n }\r\n\r\n function listUserByRole(roleId,q,offset){\r\n return $http.get($rootScope.serverUrl+\"UserApp/listAvailableUser?roleId=\"+roleId+\"&offset=\"+offset+\"&q=\"+q).\r\n then(function(response){\r\n data.list= response.data.data.users;\r\n return response;\r\n });\r\n }\r\n\r\n function get(id){\r\n return $http.get($rootScope.serverUrl+\"UserApp/get?id=\" + id)\r\n .then(function( response ) {\r\n data.view = response.data.data.user;\r\n listUserAvailableRoles(id);\r\n listUserRoles(id);\r\n return response;\r\n });\r\n }\r\n\r\n function resetPassword(id,newp,confirmp){\r\n /*return $http.get($rootScope.serverUrl+\"UserApp/changePassword?id=\" + id+\"&newp=\"+encodeURIComponent(newp)+\"&confirmp=\"+encodeURIComponent(confirmp))\r\n .then(function( data ) {\r\n return response;\r\n });*/\r\n return $http.get($rootScope.serverUrl+\"UserApp/changePassword?id=\" + id+\"&newp=\"+encodeURIComponent(newp)+\"&confirmp=\"+encodeURIComponent(confirmp));\r\n }\r\n\r\n function create(user){\r\n return $http.post($rootScope.serverUrl+'UserApp/save',requestTransformService.formData(user))\r\n .then(function(response){\r\n data.view = response.data.data.user;\r\n listUserAvailableRoles(data.view.id);\r\n listUserRoles(data.view.id);\r\n });\r\n }\r\n\r\n function update(user){\r\n return $http.post($rootScope.serverUrl+'UserApp/update',requestTransformService.formData(user))\r\n .then(function(response){\r\n data.view = response.data.data.user;\r\n listUserAvailableRoles(user.id);\r\n listUserRoles(user.id);\r\n });\r\n }\r\n\r\n function checkEmailAvailability(email){\r\n return $http.get($rootScope.serverUrl+\"UserApp/checkEmailAvailability?email=\"+encodeURIComponent(email))\r\n .then(function(response) {\r\n return response;\r\n });\r\n }\r\n\r\n function checkUsernameAvailability(username){\r\n return $http.get($rootScope.serverUrl+\"UserApp/checkUserNameAvailability?username=\"+encodeURIComponent(username))\r\n .then(function(response) {\r\n return response;\r\n });\r\n }\r\n\r\n function setSelected(user){\r\n data.view=user;\r\n }\r\n\r\n function addUserRole(userId,roleId){\r\n return $http.get($rootScope.serverUrl+\"Role/assignAppUser?userId=\"+userId+\"&roleId=\"+roleId).\r\n then(function(response){\r\n listUserAvailableRoles(userId);\r\n listUserRoles(userId);\r\n return response;\r\n });\r\n }\r\n\r\n function removeUserRole(userId,roleId){\r\n return $http.get($rootScope.serverUrl+\"Role/unAssignAppUser?userId=\"+userId+\"&roleId=\"+roleId).\r\n then(function(response){\r\n listUserAvailableRoles(userId);\r\n listUserRoles(userId);\r\n return response;\r\n });\r\n }\r\n\r\n function listUserRoles(userId){\r\n return $http.get($rootScope.serverUrl+\"Role/listRoleAppUser?userId=\"+userId).\r\n then(function(response){\r\n data.view.roles= response.data.data.roles;\r\n $.each(data.view.roles,function() {\r\n this.checked = true;\r\n });\r\n return response;\r\n });\r\n }\r\n\r\n function listUserAvailableRoles (userId){\r\n return $http.get($rootScope.serverUrl+\"Role/listAvalaibleAppRole?userId=\"+userId)\r\n .then(function(response) {\r\n data.view.availableRoles = response.data.data.roles;\r\n $.each(data.view.availableRoles,function() {\r\n this.checked = false;\r\n });\r\n return response;\r\n });\r\n }\r\n\r\n function sendActivationUrl (email){\r\n return $http.get($rootScope.serverUrl+\"UserApp/sendActivationUrl?email=\"+userId);\r\n }\r\n\r\n });\r\n","/**\r\n * Created by Troy on 4/4/2015.\r\n */\r\ninvo.config(function($stateProvider, $urlRouterProvider,appVersion) {\r\n $stateProvider\r\n .state('app.users',{\r\n url:\"/users/:q\",\r\n templateUrl: \"./app/user/list/user-list.html?ver=\"+appVersion\r\n })\r\n //.state('app.users-detail',{\r\n // url:\"/users/detail/:id\",\r\n // templateUrl: \"./app/user/detail/user-detail-info.html\"\r\n //})\r\n //.state('app.users-new',{\r\n // url:\"/users/new/\",\r\n // templateUrl: \"./app/user/form/user-form.html\"\r\n //})\r\n //.state('app.users-edit',{\r\n // url:\"/users/edit/:id\",\r\n // templateUrl: \"./app/user/form/user-form.html\"\r\n //})\r\n});\r\n\r\ninvo.run(function (navigationService) {\r\n if (navigationService.getMenuById('settings')==null) {\r\n var menu = {};\r\n menu.sectionName = \"Settings\";\r\n menu.noClick = true;\r\n menu.className = \"icon-cog3\";\r\n menu.id = \"settings\";\r\n menu.order = 50;\r\n menu.isHidden = function () {\r\n return !auth.session.isAdmin && !auth.session.isOASAdmin();\r\n }\r\n navigationService.addMenu(menu);\r\n }\r\n\r\n var submenu2={};\r\n submenu2.sectionName = \"Examiners\";\r\n submenu2.clickState = \"app.users\";\r\n submenu2.order= 30;\r\n submenu2.id=\"user\";\r\n submenu2.isSearchable=true;\r\n navigationService.addSubMenu('settings',submenu2);\r\n\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.controller('AcademicListController',function($scope,$uibModal,academicService,$rootScope,$stateParams,auth,blockUI){\r\n $scope.q=$stateParams.q;\r\n\r\n $scope.filterByData;\r\n $scope.orderData='fullname';\r\n $scope.sortData='asc';\r\n\r\n $scope.statusCB=undefined;\r\n\r\n var myBlock = blockUI.instances.get('academicBlock');\r\n $scope.block = function(){\r\n myBlock.start();\r\n }\r\n $scope.block();\r\n\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n\r\n $scope.list = function(q,offset,sortBy,filterBy,page){\r\n page = page ? page : 1;\r\n var numberPerPage = 20;\r\n if (page == 1) {\r\n offset = 0;\r\n } else {\r\n offset = (page-1)*numberPerPage;\r\n }\r\n academicService.list(q,offset,sortBy,filterBy,numberPerPage).then(function (response) {\r\n saveListData(offset,response,page,numberPerPage);\r\n }).finally(function(){myBlock.stop();});\r\n }\r\n var data={};\r\n data.list=[];\r\n data.total=0;\r\n data.pager={};\r\n var saveListData = function(offset,response,page,numberPerPage){\r\n data.list.splice(0,1000);\r\n data.list = data.list.concat(response.data.data.academicList);\r\n data.total = response.data.data.total;\r\n //for paging\r\n data.pager = academicService.getPager(response.data.data.total, page, numberPerPage);//(totalList,pagenumber,numberperpage)\r\n }\r\n if ($scope.q=='null') $scope.q=\"\";\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n $scope.academics=data;\r\n\r\n $scope.enabledisableList = [\r\n {id: 1, name: 'Enable'},\r\n {id: 0, name: 'Disable'}\r\n ]\r\n $scope.currentEd;\r\n $scope.itemselectedEd = function (item) {\r\n $scope.currentEd = item;\r\n $scope.edFilterClass='active';\r\n if (item.id==1) {\r\n $scope.statusCB = true;\r\n } else if (item.id==0) {\r\n $scope.statusCB = false;\r\n }\r\n $scope.buildQuery();\r\n $scope.schoolList();\r\n $scope.clearSchoolFilter();\r\n }\r\n $scope.getClassEd = function (item) {\r\n if ($scope.currentEd == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearEdFilter=function(){\r\n $scope.currentEd=undefined;\r\n $scope.edFilterClass='';\r\n $scope.statusCB=undefined;\r\n $scope.buildQuery();\r\n $scope.schoolList();\r\n $scope.clearSchoolFilter();\r\n }\r\n\r\n var dataSchool={};\r\n dataSchool.list=[];\r\n $scope.schoolList = function(){\r\n academicService.schoolList($scope.statusCB).then(function (response) {\r\n dataSchool.list.splice(0,1000);\r\n dataSchool.list = dataSchool.list.concat(response.data.data.schoolList);\r\n });\r\n }\r\n $scope.schoolList();\r\n $scope.schools=dataSchool;\r\n\r\n $scope.currentSchool;\r\n $scope.itemselectedSchool = function (item) {\r\n $scope.currentSchool = item;\r\n $scope.schoolFilterClass='active';\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSchool = function (item) {\r\n if ($scope.currentSchool == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearSchoolFilter=function(){\r\n $scope.currentSchool=undefined;\r\n $scope.schoolFilterClass='';\r\n $scope.buildQuery();\r\n }\r\n\r\n $scope.sortByList = [\r\n // {id: 'staffId', name: 'Staff Id'},\r\n {id: 'fullname', name: 'Name'},\r\n {id: 'email', name: 'Email'},\r\n {id: 'dept.name', name: 'Dept'}\r\n ]\r\n\r\n $scope.currentSortBy = $scope.sortByList[0];\r\n $scope.itemselectedSortBy = function (item) {\r\n $scope.currentSortBy = item;\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSortBy = function (item) {\r\n if ($scope.currentSortBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.searchByList = [\r\n {id: 'all', name: 'All'},\r\n // {id: 'staffId', name: 'Staff Id'},\r\n {id: 'fullname', name: 'Name'},\r\n {id: 'email', name: 'Email'},\r\n {id: 'dept.name', name: 'Dept'}\r\n ]\r\n\r\n $scope.currentSearchBy = $scope.searchByList[0];\r\n $scope.itemselectedSearchBy = function (item) {\r\n $scope.currentSearchBy = item;\r\n }\r\n $scope.getClassSearchBy = function (item) {\r\n if ($scope.currentSearchBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.buildQuery = function () {\r\n\r\n var filterBy = \"\";\r\n if (($scope.currentSchool!=undefined) && ($scope.currentSchool!=\"\")) {\r\n filterBy = filterBy.concat(\"dept.code,eq,\"+$scope.currentSchool.code+\",\");\r\n }\r\n\r\n if ($scope.statusCB!=undefined) {\r\n if ($scope.statusCB == true) {\r\n filterBy = filterBy.concat(\"isEnabled!b,eq,true\");\r\n } else if ($scope.statusCB == false) {\r\n filterBy = filterBy.concat(\"isEnabled!b,eq,false\");\r\n }\r\n }\r\n\r\n $scope.filterByData = filterBy;\r\n\r\n if (($scope.currentSortBy!=undefined) && ($scope.currentSortBy!=\"\")) {\r\n $scope.orderData = $scope.currentSortBy.id;\r\n }\r\n\r\n var sortBy = $scope.orderData +\",\"+ $scope.sortData;\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,sortBy,filterBy);\r\n }\r\n\r\n $scope.buildCriteria=function(){\r\n $scope.q=\"\";\r\n if ($scope.currentSearchBy==undefined || $scope.currentSearchBy==\"\") $scope.currentSearchBy=$scope.searchByList[0];\r\n if ($scope.criteria==undefined || $scope.criteria==\"\") $scope.criteria=\"\";\r\n if ($scope.currentSearchBy==$scope.searchByList[0]){\r\n $scope.searchByList.forEach(function(searchBy){\r\n if (searchBy.name!=\"All\"){\r\n if ($scope.q!=\"\") $scope.q=$scope.q+\",\";\r\n $scope.q = $scope.q.concat(searchBy.id +\",ilike,\"+\"%\"+$scope.criteria+\"%\");\r\n }\r\n });\r\n }\r\n else{\r\n $scope.q = $scope.currentSearchBy.id +\",ilike,\"+\"%\"+$scope.criteria+\"%\";\r\n }\r\n }\r\n\r\n /*$scope.$watch(\"criteria\", _.debounce(function (newVal,oldVal) {\r\n $scope.$apply(function(){\r\n if (newVal!=oldVal && oldVal!=undefined){\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n }\r\n })\r\n }, 500));*/\r\n $scope.handleCriteriaChange = _.debounce(function () {\r\n $scope.$apply(function(){\r\n if ($scope.criteria != undefined){\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n }\r\n })\r\n }, 500)\r\n\r\n $scope.$watch(\"currentSearchBy\", function(newVal,oldVal) {\r\n if (newVal!=oldVal && oldVal!=undefined ){\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n }\r\n });\r\n\r\n $scope.disable=function(academic){\r\n academicService.disable(academic.staffId).then(function(response){\r\n academic.isEnabled = response.data.data.academic.isEnabled;\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n });\r\n }\r\n\r\n $scope.enable=function(academic){\r\n academicService.enable(academic.staffId).then(function(response){\r\n academic.isEnabled = response.data.data.academic.isEnabled;\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n });\r\n }\r\n\r\n $scope.exportToExcel = function() {\r\n var fs = 'All';\r\n if (($scope.currentEd!=undefined) && ($scope.currentEd!=\"\")) {\r\n fs = $scope.currentEd.id;\r\n }\r\n var fd = 'All';\r\n if (($scope.currentSchool!=undefined) && ($scope.currentSchool!=\"\")) {\r\n fd = $scope.currentSchool.code;\r\n }\r\n var sb = $scope.currentSearchBy.name;\r\n var sbString = ''\r\n if ($scope.criteria!=undefined && $scope.criteria!=\"\") {\r\n sbString = $scope.criteria;\r\n }\r\n academicService.exportToExcel($scope.q,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,fs,fd,sb,sbString);\r\n }\r\n\r\n $scope.setPage = function(page){\r\n if (page < 1 || page > $scope.academics.pager.totalPages) {\r\n return;\r\n }\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,page);\r\n }\r\n\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.controller('ChecklistListController',function($scope,$uibModal,checklistService,$rootScope,$stateParams){\r\n \r\n $scope.list = function(){\r\n checklistService.list().then(function (response) {\r\n saveListData(response);\r\n $scope.checklist=data;\r\n console.log($scope.checklist);\r\n });\r\n }\r\n var data={};\r\n data.list=[];\r\n var saveListData = function(response){\r\n data.list.splice(0,1000000);\r\n data.list = data.list.concat(response.data.data.checklists);\r\n }\r\n $scope.list();\r\n \r\n\r\n $scope.edit = function(checklist){\r\n $stateParams.checklist = checklist;\r\n var editChecklistModal = $uibModal.open({\r\n templateUrl: './app/checklist/list/edit-checklist.html?ver='+$scope.appVersion,\r\n controller: 'EditChecklistModalController',\r\n\r\n });\r\n editChecklistModal.result.then(function (data) {\r\n \r\n }, function () {\r\n $scope.list();\r\n });\r\n\r\n }\r\n\r\n});","invo.controller('EditChecklistModalController',function ($scope, $uibModalInstance,checklistService, $stateParams) {\r\n\r\n $scope.checklist = $stateParams.checklist;\r\n\r\n $scope.ok = function () {\r\n checklistService.editChecklist($scope.checklist.code,$scope.checklist.label).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n\r\n});\r\n","/**\r\n * Created by CC on 8/4/2016.\r\n */\r\ninvo.controller('DashboardController',function($scope,dashboardService,$stateParams){\r\n\r\n $scope.getSchoolList = function(){\r\n dashboardService.getSchoolList().then(function(response){\r\n $stateParams.schoolList = response.data.data.schoolList\r\n });\r\n }\r\n\r\n $scope.getCollegeList = function(){\r\n dashboardService.getCollegeList().then(function(response){\r\n $stateParams.collegeList = response.data.data.collegeList\r\n });\r\n }\r\n\r\n $scope.getProcessList = function(){\r\n dashboardService.getProcessList().then(function(response){\r\n $stateParams.processList = response.data.data.processList\r\n });\r\n }\r\n\r\n $scope.reloadExaminerResponse=function(){\r\n $scope.$broadcast(\"reload-examiner-response\");\r\n }\r\n $scope.reloadThesisProcessCompletion=function(){\r\n $scope.$broadcast(\"reload-thesis-process-completion\");\r\n }\r\n $scope.reloadNumberOfThesis=function(){\r\n $scope.$broadcast(\"reload-number-of-thesis\");\r\n }\r\n $scope.reloadExaminationRequestCompleted=function(){\r\n $scope.$broadcast(\"reload-examination-request-completed\");\r\n }\r\n})","/**\r\n * Created by CC on 29/3/2016.\r\n */\r\ninvo.controller('Dashboard4Controller',function($scope,dashboardService,$stateParams,auth,blockUI){\r\n\r\n $scope.erFrom;\r\n $scope.erTo;\r\n\r\n /*$scope.schoolList = $stateParams.schoolList\r\n $scope.collegeList = $stateParams.collegeList*/\r\n\r\n $scope.$on('reload-examination-request-completed', function(event,args){\r\n $scope.init()\r\n })\r\n\r\n var myBlock = blockUI.instances.get('dashboard2Block');\r\n $scope.block = function(){\r\n myBlock.start();\r\n }\r\n\r\n $scope.getSchoolList = function(){\r\n dashboardService.getSchoolList().then(function(response){\r\n $scope.schoolList = response.data.data.schoolList\r\n });\r\n }\r\n\r\n $scope.getCollegeList = function(){\r\n dashboardService.getCollegeList().then(function(response){\r\n $scope.collegeList = response.data.data.collegeList\r\n });\r\n }\r\n\r\n $scope.programmeList = [\r\n {id: 1, name:'Master'},\r\n {id: 2, name:'PhD'}\r\n ]\r\n\r\n $scope.itemselectedSchool = function(item){\r\n $scope.currentSchool = item;\r\n $scope.schoolFilterClass = 'active';\r\n $scope.buildQuery()\r\n }\r\n\r\n $scope.itemselectedCollege = function(item){\r\n $scope.currentCollege = item;\r\n $scope.collegeFilterClass = 'active';\r\n $scope.buildQuery()\r\n }\r\n\r\n $scope.itemselectedProgramme = function(item){\r\n $scope.currentProgramme = item;\r\n $scope.programmeFilterClass = 'active';\r\n $scope.buildQuery()\r\n }\r\n\r\n $scope.getClassSchool = function (item) {\r\n if ($scope.currentSchool == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.getClassCollege = function (item) {\r\n if ($scope.currentCollege == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.getClassProgramme = function (item) {\r\n if ($scope.currentProgramme == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.clearSchoolFilter = function (){\r\n $scope.currentSchool = undefined;\r\n $scope.schoolFilterClass = '';\r\n $scope.buildQuery()\r\n }\r\n\r\n $scope.clearCollegeFilter = function (){\r\n $scope.currentCollege = undefined;\r\n $scope.collegeFilterClass = '';\r\n $scope.buildQuery()\r\n }\r\n\r\n $scope.clearProgrammeFilter = function (){\r\n $scope.currentProgramme = undefined;\r\n $scope.programmeFilterClass ='';\r\n $scope.buildQuery()\r\n }\r\n\r\n $scope.$watch('erFrom', function(response){\r\n if($scope.erTo!=undefined && Date.parse($scope.erTo)>Date.parse($scope.erFrom))\r\n $scope.buildQuery()\r\n })\r\n\r\n $scope.$watch('erTo', function(response){\r\n if($scope.erFrom!=undefined && Date.parse($scope.erFrom)Date.parse($scope.erFrom))\r\n $scope.buildQuery()\r\n })\r\n\r\n $scope.$watch('erTo', function(response){\r\n if($scope.erFrom!=undefined && Date.parse($scope.erFrom)Date.parse($scope.erFrom))\r\n $scope.buildQuery()\r\n })\r\n\r\n $scope.$watch('erTo', function(response){\r\n if($scope.erFrom!=undefined && Date.parse($scope.erFrom)Date.parse($scope.erFrom))\r\n $scope.buildQuery()\r\n })\r\n\r\n $scope.$watch('erTo', function(response){\r\n if($scope.erFrom!=undefined && Date.parse($scope.erFrom) -1;\r\n }\r\n $scope.canRemoveAttachment = function () {\r\n //return $scope.permissions.indexOf('REMOVE_ATTACHMENT') > -1;\r\n return false;\r\n }\r\n $scope.canAddAttachment = function () {\r\n //return $scope.permissions.indexOf('ADD_ATTACHMENT') > -1;\r\n return false;\r\n }\r\n\r\n\r\n $scope.canDelete = function (document) {\r\n if (document.classification == $scope.exm.examination.processName) {\r\n if (document.author == auth.session.user.username && $scope.permissions.indexOf('DELETE_DOCUMENT') > -1) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n\r\n $scope.deleteExamDocument = function (id,examId) {\r\n\r\n $stateParams.documentId = id;\r\n $stateParams.examId = examId;\r\n\r\n examinationDocumentService.isLockedExamDocument(id).then(function(data){\r\n if (data.data.data.isLocked=='1') {\r\n var deleteExamDocumentModal = $uibModal.open({\r\n templateUrl: './app/examination/modal/delete-exam-document-locked.html?ver='+$scope.appVersion,\r\n controller: 'DeleteExamDocumentModalController',\r\n\r\n });\r\n deleteExamDocumentModal.result.then(function (data) {\r\n }, function () {\r\n });\r\n } else {\r\n var deleteExamDocumentModal = $uibModal.open({\r\n templateUrl: './app/examination/modal/delete-exam-document.html?ver='+$scope.appVersion,\r\n controller: 'DeleteExamDocumentModalController',\r\n\r\n });\r\n deleteExamDocumentModal.result.then(function (data) {\r\n $scope.init()\r\n }, function () {\r\n });\r\n }\r\n });\r\n\r\n }\r\n\r\n $scope.removeAttachment = function (id,examId) {\r\n var removeAttachmentModal = $uibModal.open({\r\n templateUrl: './app/examination/modal/remove-attachment.html?ver='+$scope.appVersion,\r\n controller: 'RemoveAttachmentModalController',\r\n resolve: {\r\n id: function () {return id},\r\n examId:function () {return examId}\r\n }\r\n });\r\n removeAttachmentModal.result.then(function (data) {\r\n $scope.getDocuments(examId);\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.submitRecommendation = function (examId,examinerType) {\r\n var urlTemplate='';\r\n if ($scope.isAllUploaded) {\r\n urlTemplate = './app/examination/modal/submit-exam-recommendation.html?ver='+$scope.appVersion;\r\n } else{\r\n urlTemplate = './app/examination/modal/required-document-notuploaded.html?ver='+$scope.appVersion;\r\n }\r\n var submitRecommendationModal = $uibModal.open({\r\n templateUrl: urlTemplate,\r\n controller: 'SubmitExamRecommendationModalController',\r\n resolve: {\r\n examId:function () {return examId},\r\n examinerType:function(){return examinerType}\r\n }\r\n });\r\n submitRecommendationModal.result.then(function (data) {\r\n $scope.submitRecommendationConfirm(examId,data,examinerType);\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.submitRecommendationConfirm = function(examId,selectedRecommendation,examinerType){\r\n var submitExamConfirmModal = $uibModal.open({\r\n templateUrl: './app/examination/info/submit-exam-confirm.html?ver='+$scope.appVersion,\r\n controller: 'SubmitExamRecommendationConfirmModalController',\r\n resolve: {\r\n examinerType:function(){return examinerType},\r\n selectedRecommendation:function () {return selectedRecommendation}\r\n }\r\n });\r\n submitExamConfirmModal.result.then(function (data) {\r\n examinationInfoService.submitRecommendation(examId,selectedRecommendation.code).then(function(data){\r\n $state.go(\"app.examination\", {}, {reload:true});\r\n })\r\n }, function () {\r\n\r\n });\r\n }\r\n\r\n $scope.addAttachment = function (examId) {\r\n var addAttachmentModal = $uibModal.open({\r\n templateUrl: './app/examination/modal/add-attachment.html?ver='+$scope.appVersion,\r\n controller: 'AddAttachmentModalController',\r\n resolve: {\r\n examId:function () {return examId},\r\n attachments:function(){return $scope.attachments}\r\n }\r\n });\r\n addAttachmentModal.result.then(function (data) {\r\n $scope.getDocuments(examId)\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.getRequiredDocuments = function(id){\r\n examinationDocumentService.getRequiredDocuments(id).then(function(response){\r\n $scope.requiredDocuments=response.data.data.required;\r\n var n=0;\r\n var isAllUploaded=true;\r\n $scope.requiredDocuments.forEach(function(req){\r\n req.fileMessage=\"Please select file to be uploaded\";\r\n req.rownum=n++;\r\n if (!req.isUploaded){\r\n if (req.document.noOfDocument && req.isRequired){\r\n isAllUploaded = false;\r\n }\r\n }\r\n $scope.isAllUploaded=isAllUploaded;\r\n });\r\n });\r\n }\r\n\r\n $scope.getExamRequestPermissions=function(id){\r\n examinationInfoService.listUserPermissions(id).then(function(response){\r\n $scope.permissions = response.data.data.permissions;\r\n });\r\n }\r\n\r\n $scope.getDocuments = function(id){\r\n examinationDocumentService.getDocuments(id).then(function(response){\r\n $scope.attachments = response.data.data.attachments;\r\n $scope.documents = response.data.data.documents;\r\n });\r\n }\r\n\r\n $scope.downloadExamDocument = function (id,examId) {\r\n examinationDocumentService.isLockedExamDocument(id).then(function(data) {\r\n if (data.data.data.isLocked == '1') {\r\n var deleteExamDocumentModal = $uibModal.open({\r\n templateUrl: './app/examination/modal/delete-exam-document-locked.html?ver=' + $scope.appVersion,\r\n controller: 'DeleteExamDocumentModalController',\r\n\r\n });\r\n deleteExamDocumentModal.result.then(function (data) {\r\n }, function () {\r\n });\r\n } else {\r\n examinationDocumentService.downloadExamDocument(id, examId);\r\n }\r\n });\r\n }\r\n\r\n $scope.viewDocument=function(doc,examId,obj){\r\n doc.showDocAlert=!doc.showDocAlert;\r\n examinationDocumentService.checkIfXodRenditionAvailable(doc.id).then(function (response) {\r\n doc.isAvailable = response.data.data.isAvailable;\r\n if (doc.isAvailable) {\r\n $scope.loadViewer(doc,examId, obj);\r\n }\r\n });\r\n }\r\n\r\n\r\n $scope.loadViewer=function(doc,examId,obj){\r\n var documentViewerModal = $uibModal.open({\r\n templateUrl: './app/examination/modal/examination-document-viewer.html?ver='+$scope.appVersion,\r\n controller: 'ExaminationDocumentViewerModalController',\r\n size:\"doc\",\r\n resolve:{\r\n document : function(){return doc},\r\n examination: function(){return $scope.exm.examination}\r\n }\r\n\r\n });\r\n documentViewerModal.result.then(function (data) {\r\n }, function () {\r\n });\r\n\r\n }\r\n\r\n $scope.showDocAlert=function(doc){\r\n if (doc.showDocAlert != undefined){\r\n return doc.showDocAlert;\r\n }\r\n else{\r\n doc.showDocAlert=false;\r\n return doc.showDocAlert;\r\n }\r\n }\r\n\r\n $scope.isAvailable=function(doc){\r\n if (doc.isAvailable != undefined){\r\n return doc.isAvailable;\r\n }\r\n else{\r\n doc.isAvailable=true;\r\n return doc.isAvailable;\r\n }\r\n }\r\n\r\n\r\n $scope.init = function () {\r\n $scope.getExamRequestPermissions($scope.examId);\r\n $scope.getRequiredDocuments($scope.examId);\r\n $scope.getDocuments($scope.examId);\r\n $scope.isAllUploaded=false;\r\n }\r\n\r\n\r\n $scope.init();\r\n\r\n $scope.$on('reload', function (event, args) {\r\n $scope.init();\r\n });\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.factory('examinationDocumentService',function($http,notify,$rootScope,requestTransformService){\r\n\r\n var service = {\r\n getRequiredDocuments:getRequiredDocuments,\r\n getDocuments:getDocuments,\r\n uploadFileToUrl:uploadFileToUrl,\r\n listUserExamDocumentPermission:listUserExamDocumentPermission,\r\n checkIfXodRenditionAvailable:checkIfXodRenditionAvailable,\r\n deleteExamDocument:deleteExamDocument,\r\n downloadExamDocument:downloadExamDocument,\r\n listAttachableThesisDocuments:listAttachableThesisDocuments,\r\n listAttachableThesisDocumentsByMatricNo:listAttachableThesisDocumentsByMatricNo,\r\n removeAttachment:removeAttachment,\r\n addAttachment:addAttachment,\r\n isLockedExamDocument:isLockedExamDocument\r\n };\r\n\r\n return service;\r\n\r\n ////////////\r\n\r\n function getRequiredDocuments(id){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequestDocument/listCurrentRequiredDocuments?id=\"+id).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function getDocuments(id){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequestDocument/listExaminationDocuments?id=\"+id).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function uploadFileToUrl(file,id,doctypeCode,examinerAlias){\r\n var fd = new FormData();\r\n fd.append('file', file);\r\n fd.append('examId', id);\r\n fd.append('doctypeCode', doctypeCode);\r\n fd.append('examinerAlias', examinerAlias);\r\n\r\n return $http.post($rootScope.serverUrl + \"ExaminationRequestDocument/uploadExamDocument\", fd, {\r\n transformRequest: angular.identity,\r\n headers: {'Content-Type': undefined}\r\n }).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n function listUserExamDocumentPermission(id,examId){\r\n return $http.get($rootScope.serverUrl + \"ExaminationRequestDocument/listUserExamDocumentPermission?id=\"+ id+\"&examId=\"+examId).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n function checkIfXodRenditionAvailable(id){\r\n return $http.get($rootScope.serverUrl + \"ExaminationRequestDocument/checkIfXodRenditionAvailable?id=\"+ id).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n function deleteExamDocument(id,examId){\r\n return $http.get($rootScope.serverUrl + \"ExaminationRequestDocument/deleteExamDocument?id=\"+ id+\"&examId=\"+examId).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n function downloadExamDocument(id,examId){\r\n /*return $http({method: 'GET', url: $rootScope.serverUrl + \"ExaminationRequestDocument/downloadExamDocument?id=\"+ id+\"&examId=\"+examId}).\r\n success(function(data, status, headers, config) {\r\n if (navigator.msSaveBlob) { //for IE\r\n var blob = b64toBlob(data.data.fileString, \"application/pdf\");\r\n navigator.msSaveBlob(blob, data.data.fileName + '.pdf');\r\n function b64toBlob(b64Data, contentType, sliceSize) {\r\n contentType = contentType || '';\r\n sliceSize = sliceSize || 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n } else {\r\n var anchor = angular.element('');\r\n anchor.css({display: 'none'}); // Make sure it's not visible\r\n angular.element(document.body).append(anchor); // Attach to\r\n anchor.attr({\r\n href: 'data:attachment/pdf;base64,' + encodeURI(data.data.fileString),\r\n target: '_blank',\r\n download: data.data.fileName + '.pdf'\r\n })[0].click();\r\n console.log(anchor);\r\n anchor.remove(); // Clean it up afterwards\r\n }\r\n }).\r\n error(function(data, status, headers, config) {\r\n // handle error\r\n });*/\r\n window.open($rootScope.serverUrl + \"ExaminationRequestDocument/downloadExamDocument?id=\"+ id+\"&examId=\"+examId ,\"_blank\");\r\n }\r\n\r\n function listAttachableThesisDocuments(id,examinerAlias){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequestDocument/listAttachableThesisDocuments?id=\"+id+\"&examinerAlias=\"+examinerAlias).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function removeAttachment(id,examId){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/removeAttachment?id=\"+id+\"&examId=\"+examId).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function addAttachment(ids,examId){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/addAttachment?ids=\"+JSON.stringify(ids)+\"&examId=\"+examId).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n\r\n function listAttachableThesisDocumentsByMatricNo(id,examinerAlias){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequestDocument/listAttachableThesisDocumentsByMatricNo?matriculationNo=\"+id+\"&examinerAlias=\"+examinerAlias).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function isLockedExamDocument(id){\r\n return $http.get($rootScope.serverUrl + \"ExaminationRequestDocument/isLockedExamDocument?id=\"+ id).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.controller('ExaminationInfoController',function($scope,$uibModal,examinationInfoService,$rootScope,$stateParams,auth){\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n $scope.isSchool=function(){\r\n return auth.session.isSchoolAdmin() || auth.session.isSchoolStaff();\r\n }\r\n $scope.isAcadOrExternal=function(){\r\n return auth.session.isAcadStaff() || auth.session.isExaminer();\r\n }\r\n\r\n $scope.isPHD=false;\r\n\r\n $scope.examinationInfo = function(id){\r\n examinationInfoService.examinationInfo(id).then(function (response) {\r\n saveInfoData(response.data);\r\n });\r\n }\r\n var data={};\r\n data.examination={};\r\n data.permissionList;\r\n data.fullnameCompleted;\r\n data.instruction;\r\n data.oasEmail;\r\n data.ins;\r\n var saveInfoData = function(response){\r\n data.examination = response.data.examination;\r\n data.permissionList = response.data.permissionList;\r\n data.fullnameCompleted = response.data.fullnameCompleted;\r\n data.instruction = response.data.instruction;\r\n data.oasEmail = response.data.oasEmail;\r\n data.ins = response.data.ins;\r\n $scope.exm=data;\r\n if (response.data.examination.thesis.student.programme.type=='PHD'){\r\n $scope.isPHD=true;\r\n }\r\n\r\n if (data.permissionList.indexOf('ACKNOWLEDGE_EXAM_REQUEST') > -1) {\r\n $scope.examinationInfoForExaminer();\r\n }\r\n }\r\n\r\n $scope.examinerInstruction = function(){\r\n $uibModal.open({\r\n templateUrl: './app/examination/modal/examiner-instruction.html?ver='+$scope.appVersion,\r\n controller: 'ExaminerInstructionController',\r\n size:'lg',\r\n resolve: {\r\n instruct:function () {return $scope.exm.ins}\r\n }\r\n });\r\n }\r\n\r\n \r\n\r\n $scope.downloadExaminerReportTemplate = function (no) {\r\n examinationInfoService.downloadExaminerReportTemplate(no);\r\n }\r\n\r\n $scope.examinationInfo = function(id){\r\n examinationInfoService.examinationInfo(id).then(function (response) {\r\n saveInfoData(response.data);\r\n });\r\n }\r\n\r\n $scope.examinationInfo($stateParams.id);\r\n\r\n $scope.examinationInfoForExaminer = function () {\r\n $stateParams.examinationId = $stateParams.id;\r\n\r\n var examinationInfoForExaminerModal = $uibModal.open({\r\n templateUrl: './app/examination/info/examination-acknowledgement.html?ver='+$scope.appVersion,\r\n controller: 'ExaminationInfoForExaminerModalController',\r\n backdrop: 'static',\r\n keyboard: false\r\n });\r\n examinationInfoForExaminerModal.result.then(function (data) {\r\n $scope.$broadcast('reload');\r\n $scope.examinationInfo($stateParams.id);\r\n }, function () {\r\n\r\n });\r\n }\r\n\r\n $scope.updateNotes=function(id,notes){\r\n examinationInfoService.updateNotes(id,notes);\r\n }\r\n\r\n $scope.cancelExam = function (examId) {\r\n var cancelExamModal = $uibModal.open({\r\n templateUrl: './app/examination/modal/cancel-exam.html?ver='+$scope.appVersion,\r\n controller: 'CancelExamModalController',\r\n resolve: {\r\n examId:function () {return examId}\r\n }\r\n });\r\n cancelExamModal.result.then(function (data) {\r\n $scope.$broadcast('reload');\r\n $scope.examinationInfo($stateParams.id);\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.$on('reload',function(){\r\n //\r\n });\r\n\r\n $scope\r\n\r\n});","invo.controller('ExaminationInfoForExaminerModalController',function ($scope, $uibModalInstance ,examinationInfoService, $stateParams, $state) {\r\n $scope.examinationId=$stateParams.examinationId;\r\n\r\n $scope.ok = function () {\r\n examinationInfoService.examinationInfoForAcknowledgement($scope.examinationId).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n $state.go('app.examination');\r\n }\r\n\r\n\r\n});\r\n","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.factory('examinationInfoService',function($http,notify,$rootScope,requestTransformService){\r\n\r\n var service = {\r\n examinationInfo:examinationInfo,\r\n listUserPermissions:listUserPermissions,\r\n listRecommendationType:listRecommendationType,\r\n submitRecommendation:submitRecommendation,\r\n cancelExamination:cancelExamination,\r\n updateNotes:updateNotes,\r\n examinationInfoForAcknowledgement:examinationInfoForAcknowledgement,\r\n downloadExaminerReportTemplate:downloadExaminerReportTemplate\r\n };\r\n\r\n return service;\r\n\r\n ////////////\r\n\r\n\r\n function examinationInfo(id){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/examinationInfo?id=\"+id).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function downloadExaminerReportTemplate(no){\r\n window.open($rootScope.serverUrl + \"ExaminationRequest/downloadExaminerReportTemplate?no=\"+ no ,\"_blank\");\r\n\r\n }\r\n\r\n function listUserPermissions(id){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/listUserExaminationPermissions?id=\"+id)\r\n .then(function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function listRecommendationType(examId){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/getRecommendationTypeList?id=\"+examId).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function submitRecommendation(examId,recommendationCode){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/submitRecommendation?id=\"+examId+\"&recommendationCode=\"+recommendationCode).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function cancelExamination(examId){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/cancelExamRequest?id=\"+examId).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n function updateNotes(examId,notes){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/updateNotes?id=\"+examId+\"¬es=\"+notes).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function examinationInfoForAcknowledgement(id){\r\n return $http.get($rootScope.serverUrl+\"ExaminationRequest/acknowledgeExamRequest?id=\"+id).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n});","invo.controller('SubmitExamRecommendationConfirmModalController',function ($scope,$uibModalInstance,examinerType,selectedRecommendation) {\r\n $scope.examinerType = examinerType;\r\n\r\n $scope.selectedRecommendation=selectedRecommendation;\r\n $scope.ok = function () {\r\n $uibModalInstance.close('ok');\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.controller('ExaminationListController',function($scope,$uibModal,examinationService,$rootScope,$stateParams,auth,navigationService){\r\n $scope.q=$stateParams.q;\r\n\r\n $scope.filterByData;\r\n $scope.orderData='dueDate';\r\n $scope.sortData='asc';\r\n\r\n $scope.oeCB=true;\r\n\r\n $scope.dueDateLbl = 'Due Date';\r\n $scope.due = {};\r\n $scope.due.dueDateStart = null;\r\n $scope.due.dueDateEnd = null;\r\n\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n $scope.isSchool=function(){\r\n return auth.session.isSchoolAdmin() || auth.session.isSchoolStaff();\r\n }\r\n\r\n $scope.examinationList = function(q,offset,sortBy,filterBy,page){\r\n page = page ? page : 1;\r\n var numberPerPage = 20;\r\n if (page == 1) {\r\n offset = 0;\r\n } else {\r\n offset = (page-1)*numberPerPage;\r\n }\r\n\r\n var searchDueDate = ''\r\n if ($scope.currentDueDate!='Due Date') {\r\n searchDueDate = $scope.currentDueDate;\r\n }\r\n\r\n examinationService.examinationList(q,offset,sortBy,filterBy,numberPerPage,$scope.oeCB,searchDueDate).then(function (response) {\r\n saveListData(offset,response.data,page,numberPerPage);\r\n });\r\n }\r\n var data={};\r\n data.list=[];\r\n data.view={};\r\n data.total=0;\r\n data.stats={};\r\n //data.userLogin;\r\n data.pager={};\r\n var saveListData = function(offset,response,page,numberPerPage){\r\n data.list.splice(0,1000);\r\n data.list = data.list.concat(response.data.examinationList);\r\n data.total = response.data.total;\r\n var menu = navigationService.getMenuById('examination')\r\n menu.indicatorVar = data.total;\r\n\r\n //data.userLogin = response.data.userLogin;\r\n //for paging\r\n data.pager = examinationService.getPager(response.data.total, page, numberPerPage);//(totalList,pagenumber,numberperpage)\r\n }\r\n if ($scope.q=='null') $scope.q=\"\";\r\n $scope.examinationList($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n $scope.examinations=data;\r\n $scope.wfstsList = function(oe) {\r\n examinationService.wfstatusList(oe).then(function (response) {\r\n saveWfStatusListData(response);\r\n });\r\n }\r\n\r\n\r\n var dataWfStatus={};\r\n dataWfStatus.list=[];\r\n var saveWfStatusListData = function(response){\r\n dataWfStatus.list.splice(0,1000);\r\n dataWfStatus.list = dataWfStatus.list.concat(response.data.data.wfstatusList);\r\n }\r\n if ($scope.isOAS() || $scope.isSchool()){\r\n $scope.wfstsList($scope.oeCB);\r\n $scope.wfstatusList=dataWfStatus;\r\n }\r\n\r\n $scope.currentWfStatus;\r\n $scope.itemselectedWfs = function (item) {\r\n $scope.currentWfStatus = item;\r\n $scope.statusFilterClass='active';\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassWfs = function (item) {\r\n if ($scope.currentWfStatus == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearStatusFilter=function(){\r\n $scope.currentWfStatus=undefined;\r\n $scope.statusFilterClass='';\r\n $scope.buildQuery();\r\n }\r\n\r\n $scope.schlList = function(oe) {\r\n examinationService.schoolList(oe).then(function (response) {\r\n saveSchoolListData(response);\r\n });\r\n }\r\n var dataSchool={};\r\n dataSchool.list=[];\r\n var saveSchoolListData = function(response){\r\n dataSchool.list.splice(0,1000);\r\n dataSchool.list = dataSchool.list.concat(response.data.data.schoolList);\r\n }\r\n if ($scope.isOAS() || $scope.isSchool()){\r\n $scope.schlList($scope.oeCB);\r\n $scope.schoolList=dataSchool;\r\n }\r\n $scope.currentSchool;\r\n $scope.itemselectedSchool = function (item) {\r\n $scope.currentSchool = item;\r\n $scope.schoolFilterClass='active';\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSchool = function (item) {\r\n if ($scope.currentSchool == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearSchoolFilter=function(){\r\n $scope.currentSchool=undefined;\r\n $scope.schoolFilterClass='';\r\n $scope.buildQuery();\r\n }\r\n \r\n $scope.isAcadOrExternal=function(){\r\n return auth.session.isAcadStaff() || auth.session.isExaminer();\r\n }\r\n \r\n if ($scope.isAcadOrExternal()) {\r\n $scope.sortByList = [\r\n {id: 'dueDate', name: 'Due Date'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'thesis.name', name: 'Thesis Title'},\r\n {id: 'programme.degree', name: 'Programme'}\r\n ]\r\n } else {\r\n $scope.sortByList = [\r\n {id: 'dueDate', name: 'Due Date'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'school.name', name: 'School'},\r\n {id: 'programme.name', name: 'Programme'},\r\n {id: 'thesis.name', name: 'Thesis Title'},\r\n //{id: 'examiner.fullname', name: 'Examiner Name'}\r\n ]\r\n }\r\n\r\n $scope.currentSortBy = $scope.sortByList[0];\r\n $scope.itemselectedSortBy = function (item) {\r\n $scope.currentSortBy = item;\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSortBy = function (item) {\r\n if ($scope.currentSortBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n if ($scope.isAcadOrExternal()) {\r\n $scope.searchByList = [\r\n {id: 'all', name: 'All'},\r\n //{id: 'dueDate', name: 'Due Date'},\r\n {id: 'thesis.matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'thesis.name', name: 'Thesis Title'},\r\n {id: 'programme.degree', name: 'Programme'},\r\n {id: 'student.specialProgramme', name: 'Special Programme'}\r\n ]\r\n } else {\r\n $scope.searchByList = [\r\n {id: 'all', name: 'All'},\r\n //{id: 'dueDate', name: 'Due Date'},\r\n {id: 'thesis.matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'programme.name', name: 'Programme'},\r\n {id: 'examiner.fullname', name: 'Examiner Name'},\r\n {id: 'examiner.email', name: 'Examiner Email'},\r\n {id: 'student.specialProgramme', name: 'Special Programme'}\r\n ]\r\n }\r\n\r\n $scope.currentSearchBy = $scope.searchByList[0];\r\n $scope.itemselectedSearchBy = function (item) {\r\n $scope.currentSearchBy = item;\r\n }\r\n $scope.getClassSearchBy = function (item) {\r\n if ($scope.currentSearchBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.buildQuery = function () {\r\n\r\n var filterBy = \"\";\r\n if (($scope.currentWfStatus!=undefined) && ($scope.currentWfStatus!=\"\")) {\r\n filterBy = filterBy.concat(\"status.id!l,eq,\"+$scope.currentWfStatus.id+\",\");\r\n }\r\n if (($scope.currentSchool!=undefined) && ($scope.currentSchool!=\"\")) {\r\n filterBy = filterBy.concat(\"school.code,eq,\"+$scope.currentSchool.code+\",\");\r\n }\r\n\r\n //if ($scope.dueDateStart!=undefined && $scope.dueDateEnd!=undefined) {\r\n if ($scope.dueDateLbl != 'Due Date') {\r\n\r\n var start = moment($scope.due.dueDateStart).format('YYYY-MM-DD')\r\n var end = moment($scope.due.dueDateEnd).format('YYYY-MM-DD')\r\n\r\n /*var dateStart = $scope.dueDateStart.getFullYear() + '-' + $scope.dueDateStart.getMonth() + '-' + $scope.dueDateStart.getDate()\r\n var dateEnd = $scope.dueDateEnd.getFullYear() + '-' + $scope.dueDateEnd.getMonth() + '-' + $scope.dueDateEnd.getDate()\r\n var stDateEnd = new Date(dateEnd);\r\n stDateEnd.setDate(stDateEnd.getDate());\r\n var mm = stDateEnd.getMonth()+1;\r\n if (mm<10) {\r\n mm = '0'+(mm+1);\r\n }\r\n var dd = stDateEnd.getDate();\r\n if (dd<10) {\r\n dd = '0'+dd;\r\n }\r\n var stDateFmtEnd = stDateEnd.getFullYear()+'-'+mm+'-'+dd;\r\n\r\n var stDateStart = new Date(dateStart);\r\n stDateStart.setDate(stDateStart.getDate());\r\n var mm = stDateStart.getMonth()+1;\r\n if (mm<10) {\r\n mm = '0'+(mm+1);\r\n }\r\n var dd = stDateStart.getDate();\r\n if (dd<10) {\r\n dd = '0'+dd;\r\n }\r\n var stDateFmtStart = stDateStart.getFullYear()+'-'+mm+'-'+dd;*/\r\n filterBy = filterBy.concat(\"dueDate,ge,\"+start+\",dueDate,le,\"+end);\r\n }\r\n\r\n $scope.filterByData = filterBy;\r\n\r\n if (($scope.currentSortBy!=undefined) && ($scope.currentSortBy!=\"\")) {\r\n $scope.orderData = $scope.currentSortBy.id;\r\n }\r\n\r\n var sortBy = $scope.orderData +\",\"+ $scope.sortData;\r\n $scope.buildCriteria();\r\n $scope.examinationList($scope.q,0,sortBy,filterBy);\r\n }\r\n\r\n $scope.buildCriteria=function(){\r\n $scope.q=\"\";\r\n if ($scope.currentSearchBy==undefined || $scope.currentSearchBy==\"\") $scope.currentSearchBy=$scope.searchByList[0];\r\n if ($scope.criteria==undefined || $scope.criteria==\"\"){\r\n $scope.q=\"\";\r\n }\r\n else {\r\n if ($scope.currentSearchBy == $scope.searchByList[0]) {\r\n $scope.searchByList.forEach(function (searchBy) {\r\n if (searchBy.name != \"All\") {\r\n if ($scope.q != \"\") $scope.q = $scope.q + \",\";\r\n $scope.q = $scope.q.concat(searchBy.id + \",ilike,\" + \"%\" + $scope.criteria + \"%\");\r\n if (searchBy.id == 'examiner.fullname') {\r\n $scope.q = $scope.q.concat(\",staff.fullname,ilike,\" + \"%\" + $scope.criteria + \"%\");\r\n }\r\n if (searchBy.id == 'examiner.email') {\r\n $scope.q = $scope.q.concat(\",staff.email,ilike,\" + \"%\" + $scope.criteria + \"%\")\r\n }\r\n }\r\n });\r\n }\r\n else {\r\n $scope.q = $scope.currentSearchBy.id + \",ilike,\" + \"%\" + $scope.criteria + \"%\";\r\n if ($scope.currentSearchBy.id == 'examiner.fullname') {\r\n $scope.q = $scope.q.concat(\",staff.fullname,ilike,\" + \"%\" + $scope.criteria + \"%\");\r\n }\r\n if ($scope.currentSearchBy.id == 'examiner.email') {\r\n $scope.q = $scope.q.concat(\",staff.email,ilike,\" + \"%\" + $scope.criteria + \"%\");\r\n }\r\n }\r\n }\r\n }\r\n /*$scope.$watch(\"criteria\", _.debounce(function (newVal,oldVal) {\r\n $scope.$apply(function(){\r\n if (newVal!=oldVal && oldVal!=undefined){\r\n $scope.buildCriteria();\r\n $scope.examinationList($scope.q,0,$scope.orderData,$scope.filterByData);\r\n }\r\n })\r\n }, 500));*/\r\n $scope.handleCriteriaChange = _.debounce(function () {\r\n $scope.$apply(function(){\r\n if ($scope.criteria != undefined){\r\n $scope.buildCriteria();\r\n $scope.examinationList($scope.q,0,$scope.orderData,$scope.filterByData);\r\n }\r\n })\r\n }, 500)\r\n\r\n\r\n $scope.$watch(\"currentSearchBy\", function(newVal,oldVal) {\r\n if (newVal!=oldVal && oldVal!=undefined ){\r\n $scope.buildCriteria();\r\n $scope.examinationList($scope.q,0,$scope.orderData,$scope.filterByData);\r\n }\r\n });\r\n\r\n $scope.$watch(\"oeCB\", function(newVal,oldVal) {\r\n if (newVal!=oldVal && ($scope.isOAS() || $scope.isSchool()) ){\r\n $scope.wfstsList($scope.oeCB);\r\n //$scope.clearStatusFilter();\r\n $scope.currentWfStatus=undefined;\r\n $scope.statusFilterClass='';\r\n $scope.schlList($scope.oeCB);\r\n //$scope.clearSchoolFilter();\r\n $scope.currentSchool=undefined;\r\n $scope.schoolFilterClass='';\r\n $scope.buildQuery();\r\n\r\n }\r\n });\r\n\r\n $scope.okDueDateRange = function() {\r\n var monthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\r\n \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"\r\n ];\r\n if ($scope.due.dueDateStart!=undefined && $scope.due.dueDateEnd!=undefined) {\r\n var dateStart = $scope.due.dueDateStart.getDate() + ' ' + monthNames[$scope.due.dueDateStart.getMonth()] + ' ' + $scope.due.dueDateStart.getFullYear()\r\n var dateEnd = $scope.due.dueDateEnd.getDate() + ' ' + monthNames[$scope.due.dueDateEnd.getMonth()] + ' ' + $scope.due.dueDateEnd.getFullYear()\r\n $scope.dueDateLbl = dateStart +' - '+ dateEnd;\r\n $scope.buildQuery();\r\n }\r\n }\r\n\r\n $scope.option1 = {\r\n placement:\"left-bottom\",\r\n shortcutPropagation:true\r\n}\r\n\r\n $scope.option2 = {\r\n placement:'right-bottom',\r\n shortcutPropagation:true\r\n }\r\n\r\n $scope.popup1 = {\r\n opened: false\r\n };\r\n\r\n $scope.popup2 = {\r\n opened: false\r\n };\r\n\r\n $scope.open1 = function(){\r\n $scope.popup1.opened = true\r\n /*$('.dropdown-menu', '.dropdown-menu').click(function(event){\r\n event.stopPropagation();\r\n })*/\r\n $scope.popup2.opened= false\r\n }\r\n\r\n $scope.open2 = function(){\r\n $scope.popup2.opened=true\r\n /*$('.dropdown-menu', '.dropdown-menu').click(function(event){\r\n event.stopPropagation();\r\n })*/\r\n $scope.popup1.opened=false\r\n }\r\n\r\n $scope.clearDueDateRange = function() {\r\n $scope.dueDateLbl = 'Due Date';\r\n $scope.due.dueDateStart = null\r\n $scope.due.dueDateEnd = null\r\n $scope.buildQuery();\r\n }\r\n\r\n $scope.exportToExcel = function() {\r\n var fs = 'All';\r\n if (($scope.currentWfStatus!=undefined) && ($scope.currentWfStatus!=\"\")) {\r\n fs = $scope.currentWfStatus.id;\r\n }\r\n var fsc = 'All';\r\n if (($scope.currentSchool!=undefined) && ($scope.currentSchool!=\"\")) {\r\n fsc = $scope.currentSchool.code;\r\n }\r\n var fdd = 'Due Date';\r\n if ($scope.dueDateLbl != 'Due Date') {\r\n fdd = $scope.due.dueDateStart +' - '+$scope.due.dueDateEnd;\r\n }\r\n var sb = $scope.currentSearchBy.name;\r\n var sbString = ''\r\n if ($scope.criteria!=undefined && $scope.criteria!=\"\") {\r\n sbString = $scope.criteria;\r\n }\r\n examinationService.exportToExcel($scope.q,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,$scope.oeCB,fs,fsc,fdd,sb,sbString);\r\n }\r\n\r\n\r\n $scope.setPage = function(page){\r\n if (page < 1 || page > $scope.examinations.pager.totalPages) {\r\n return;\r\n }\r\n $scope.examinationList($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,page);\r\n }\r\n\r\n});","invo.controller('AddAttachmentModalController',function ($scope, $uibModalInstance ,examinationDocumentService , examId,attachments) {\r\n $scope.documents=[];\r\n $scope.selectedDocument;\r\n $scope.listAttachableThesisDocuments=function(){\r\n examinationDocumentService.listAttachableThesisDocuments(examId).then(function(response){\r\n\r\n response.data.data.documents.forEach(function(document){\r\n if (_.find(attachments,function(attachment){\r\n return attachment.id == document.id;\r\n })){\r\n }\r\n else{\r\n $scope.documents.push(document)\r\n }\r\n });\r\n\r\n });\r\n }\r\n\r\n $scope.listAttachableThesisDocuments();\r\n $scope.ok = function () {\r\n examinationDocumentService.addAttachment($scope.selectedDocuments,examId).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n","invo.controller('CancelExamModalController',function ($scope, $uibModalInstance ,examinationInfoService , examId) {\r\n\r\n $scope.ok = function () {\r\n examinationInfoService.cancelExamination(examId).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n","invo.controller('DeleteExamDocumentModalController',function ($scope, $uibModalInstance ,examinationDocumentService , $stateParams) {\r\n\r\n $scope.documentId = $stateParams.documentId;\r\n $scope.examId = $stateParams.examId;\r\n $scope.ok = function () {\r\n examinationDocumentService.deleteExamDocument($scope.documentId,$scope.examId).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n $scope.okConfirm = function () {\r\n $uibModalInstance.close('ok');\r\n };\r\n\r\n});\r\n","invo.controller('ExaminationDocumentViewerModalController',function ($scope,$rootScope,auth,$uibModalInstance ,examinationDocumentService,examination,document) {\r\n $scope.doc = document;\r\n $scope.examination = examination;\r\n\r\n $scope.loadDocument = function(doc,examId){\r\n examinationDocumentService.listUserExamDocumentPermission(doc.id,examId).then(function(response){\r\n var permissions = response.data.data.permissions;\r\n var canAnnotate = permissions.indexOf('ANNOTATE')>=0;\r\n console.log('load pdf');\r\n var viewer = new PDFTron.WebViewer({\r\n type: \"html5\",\r\n custom:JSON.stringify({examId:examination.id,annotationUrl:$rootScope.serverUrl+'ExaminationRequestDocument/loadAnnotation',saveAnnotationUrl:$rootScope.serverUrl+'ExaminationRequestDocument/saveAnnotation'}),\r\n documentId: doc.id,\r\n annotationUser: $scope.examination.examinerAlias,\r\n annotationAdmin: false,\r\n path: \"assets/webviewer/lib\",\r\n initialDoc: $rootScope.serverUrl+\"ExaminationRequestDocument/viewExamDocument?id=\"+doc.id+\"&examId=\"+examId,\r\n config: \"assets/webviewer/config.js\",\r\n enableAnnotations: true,\r\n streaming:true,\r\n enableReadOnlyMode:!canAnnotate\r\n }, $('#docviewer_'+doc.id));\r\n });\r\n\r\n }\r\n $scope.loadDocument($scope.doc,$scope.examination.id);\r\n $scope.downloadExamDocument = function (id,examId) {\r\n examinationDocumentService.downloadExamDocument(id,examId);\r\n }\r\n\r\n $scope.close=function(){\r\n $uibModalInstance.close();\r\n }\r\n});\r\n","/**\r\n * Created by CC on 28/3/2016.\r\n */\r\ninvo.controller('ExaminerInstructionController',function ($scope,$rootScope,$uibModalInstance,instruct,$sce){\r\n $scope.instruct = $sce.trustAsHtml(instruct);\r\n\r\n $scope.close = function(){\r\n $uibModalInstance.close();\r\n }\r\n});","invo.controller('RemoveAttachmentModalController',function ($scope, $uibModalInstance ,examinationDocumentService ,id,examId) {\r\n console.log(id);\r\n console.log(examId);\r\n $scope.ok = function () {\r\n examinationDocumentService.removeAttachment(id,examId).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n","invo.controller('SubmitExamRecommendationModalController',function ($scope, $uibModalInstance ,examinationInfoService ,examId,examinerType) {\r\n $scope.examinerType = examinerType;\r\n $scope.getRecommendationType=function(){\r\n examinationInfoService.listRecommendationType(examId).then(function(response){\r\n $scope.recommendationTypes = response.data.data.recommendationTypes;\r\n });\r\n }\r\n\r\n $scope.getRecommendationType();\r\n $scope.ok = function () {\r\n /*examinationInfoService.submitRecommendation(examId,$scope.selectedRecommendation).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });*/\r\n var recommendation = $scope.recommendationTypes.filter(checkCode)\r\n $uibModalInstance.close(recommendation[0]);\r\n };\r\n function checkCode(recommendation) {\r\n return recommendation.code == $scope.selectedRecommendation;\r\n }\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.controller('EditInstructionController',function($scope,$uibModal,instructionService,$rootScope,$stateParams,auth){\r\n\r\n $scope.successSave = false;\r\n\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin();\r\n }\r\n\r\n $scope.editInstruction = function(){\r\n instructionService.editInstruction().then(function (response) {\r\n saveData(response.data);\r\n });\r\n }\r\n var data={};\r\n data.inst={};\r\n var saveData = function(response){\r\n data.inst = response.data.inst;\r\n $scope.inst=data.inst;\r\n }\r\n $scope.editInstruction();\r\n\r\n $scope.save = function () {\r\n instructionService.saveEditInstruction($scope.inst.template).then(function(response){\r\n $scope.successSave = true;\r\n });\r\n }\r\n\r\n // setup editor options\r\n $scope.editorOptions = {\r\n language: 'eng',\r\n height: '330px',\r\n };\r\n\r\n});","invo.controller('InstructionController',function($scope,instructionService,$stateParams,$sce,$rootScope){\r\n instructionService.getInstructionForExaminer($stateParams.id).then(function (response) {\r\n $scope.instruction=$sce.trustAsHtml(response.data.data.instruction);\r\n });\r\n $rootScope.pageTitle = \"- Instruction to Examiner\";\r\n $rootScope.instructionPage = true;\r\n});\r\n","invo.controller('PayModalController',function ($scope,$rootScope, $modalInstance, invoice, payablesService,auth) {\r\n $scope.session=auth.session;\r\n $scope.dataI = invoice;\r\n $scope.dataI.paymentRefNo=\"\";\r\n $scope.paylist=[{\"name\":\"Cash\"},{\"name\":\"Bank Transfer\"},{\"name\":\"Cheque\"},{\"name\":\"GIRO\"},{\"name\":\"Credit Card\"}]\r\n $scope.dataI.paymentType = $scope.paylist[0];\r\n $scope.exchangeRate= invoice.currency.exchangeRateUSD/auth.session.company.baseCurrency.exchangeRateUSD;\r\n $scope.showAmount= invoice.currency.code != auth.session.company.baseCurrency.code;\r\n $scope.dataI.paymentAmount = invoice.total * $scope.exchangeRate;\r\n $scope.dataI.paymentAmount= Number($scope.dataI.paymentAmount.toFixed(2));\r\n\r\n $scope.$watch('dataI.paymentAmount',function(newVal,oldVal){\r\n if (newVal != oldVal){\r\n $scope.exchangeRate = newVal/$scope.dataI.total;\r\n }\r\n })\r\n $scope.ok = function () {\r\n payablesService.pay(invoice.id, $scope.dataI.paymentType.name, $scope.dataI.paymentRefNo ,$scope.dataI.paymentAmount,function(data){\r\n $modalInstance.close(data.invoice);\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss('cancel');\r\n };\r\n});\r\n","invo.controller('PayablesAddNewController',function($scope,payablesService,$filter,auth) {\r\n $scope.session=auth.session;\r\n\r\n $scope.initialize = function(){\r\n $scope.file = {};\r\n }\r\n\r\n\t$scope.closeWindow = function(){\r\n $scope.$emit(\"close-payables\");\r\n\t}\r\n\r\n $scope.initialize();\r\n\r\n //$scope.$on('getfile',function(e,data){\r\n //\t$scope.file = data;\r\n //});\r\n\t\r\n\t//$scope.$watch('payablesType', function(newVal, oldVal){\r\n\t//\tif(newVal != oldVal){\r\n\t//\t\t$scope.new.payablesType = $scope.payablesType.value;\r\n\t//\t}\r\n\t//},true)\r\n\r\n\r\n\r\n\t\r\n\t//$scope.$on('donecreate', function(e){\r\n\t//\t$scope.isCreateVendor = false;\r\n\t//});\r\n\t//\r\n\t//$scope.broadcastGetNew = function(data){\r\n\t//\t $scope.q = data.name;\r\n\t//\t $scope.payable.vendorName = data;\r\n\t//\t $scope.payable.currency = data.currency;\r\n\t//\t $scope.payable.paymentTerm = data.paymentTermDays;\r\n\t//}\r\n\t//\r\n\t//$scope.$on('closevendorwindow', function(e){\r\n\t//\t$scope.isCreateVendor = false;\r\n\t//});\r\n\r\n\r\n});","invo.controller('PayablesDetailedController',function($scope,payablesService,auth) {\r\n $scope.session = auth.session;\r\n $scope.payables= payablesService.data;\r\n\t$scope.isEditLine = false;\r\n\t$scope.addNewLine = false;\r\n $scope.lineTotal=0;\r\n\r\n $scope.showPayment=function(){\r\n if (typeof payablesService.data.view.extraStatus !='undefined')\r\n return payablesService.data.view.extraStatus.name===\"PAID\";\r\n else\r\n return false;\r\n }\r\n\r\n $scope.showPayAmount=function(){\r\n if (typeof payablesService.data.view.currency !='undefined')\r\n return payablesService.data.view.currency.code != auth.session.company.baseCurrency.code;\r\n else\r\n return false;\r\n }\r\n\r\n $scope.isEditable= function(){\r\n if(payablesService.data.view.extraStatus.name == \"PAID\" || payablesService.data.view.extraStatus.name ==\"VOID\"){\r\n return false;\r\n }\r\n else{\r\n return true;\r\n }\r\n }\r\n\r\n\t$scope.get = function(id){\r\n\t\tpayablesService.get(id).then(function(response){\r\n //$scope.lineTotal = payablesService.calculateLineTotal(payablesService.data.view.payablesLines)\r\n\t\t\t//if($scope.selectedData.poNumber == null)\r\n\t\t\t//\t$scope.selectedData.poNumber = \"-\";\r\n\t\t\t//if($scope.selectedData.paymentRefNo == '')\r\n\t\t\t//\t$scope.selectedData.paymentRefNo = \"-\";\r\n\t\t\t//$scope.payablesLines = $scope.selectedData.payablesLines;\r\n\t\t\t//if(data2 == true){\r\n\t\t\t//\t$scope.$emit('getEdited', $scope.selectedData);\r\n\t\t\t//}\r\n\t\t});\r\n\t}\r\n\r\n $scope.get(payablesService.data.view.id);\r\n\t\r\n\t$scope.closeWindow = function(){\r\n\t\t$scope.hideError();\r\n $scope.$emit(\"close-payables\");\r\n\t}\t\r\n\t\r\n\t$scope.editPayables = function(){\r\n $scope.$emit(\"edit-payables\");\r\n\t}\r\n});","invo.controller('PayablesDocPreviewController',function($scope,payablesService,$rootScope,$modal,$location,$filter,$timeout,auth) {\r\n $scope.session = auth.session;\r\n $scope.payables = payablesService.data.view;\r\n $scope.showProgress= false;\r\n\r\n $scope.get= function(id){\r\n payablesService.get(id).then(function(response){\r\n console.log(response.data);\r\n if(response.data.data.invoice.files.length == 0){\r\n $scope.files = [];\r\n }\r\n else\r\n {\r\n $scope.files = response.data.data.invoice.files;\r\n }\r\n });\r\n }\r\n\r\n $scope.$watch(function(){return payablesService.data.view.id},function(newVal,oldVal){\r\n console.log(newVal);\r\n if (newVal!= undefined){\r\n if (newVal !=oldVal){\r\n console.log('get files');\r\n $scope.get(newVal);\r\n }\r\n else{\r\n $scope.files = payablesService.data.view.files;\r\n }\r\n }\r\n else{\r\n $scope.files=[];\r\n }\r\n });\r\n\r\n $scope.isCanPay = function (){\r\n if(payablesService.data.view.extraStatus != undefined){\r\n if (payablesService.data.view.extraStatus.name != \"PAID\" || payablesService.data.view.extrastatus.name !=\"VOID\"){\r\n return true;\r\n }\r\n return false;\r\n }\r\n return false;\r\n }\r\n\r\n $scope.isVoid = function (){\r\n return payablesService.data.view.extraStatus == undefined || payablesService.data.view.extraStatus.name ==\"VOID\"\r\n }\r\n \r\n\t$scope.void = function (){\r\n\t\tvar voidModal = $modal.open({\r\n\t\t\ttemplateUrl: 'app/payables/template/voidmodal.html',\r\n\t\t\tcontroller: 'VoidModalController',\r\n size:'sm',\r\n\t\t\tresolve:\r\n\t\t\t{\r\n\t\t\t\tinvoice: function ()\r\n\t\t\t\t{\r\n\t\t\t\t\treturn payablesService.data.view;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n voidModal.result.then(function (invoice) {\r\n \tpayableService.update(invoice);\r\n }, function () {\r\n });\r\n\t}\r\n\t\r\n\t$scope.pay = function (){\r\n\t\tvar payModal = $modal.open({\r\n\t\t\ttemplateUrl: 'App/payables/template/paymodal.html',\r\n\t\t\tcontroller: 'PayModalController',\r\n size:'sm',\r\n\t\t\tresolve:\r\n\t\t\t{\r\n\t\t\t\tinvoice: function ()\r\n\t\t\t\t{\r\n\t\t\t\t\treturn payablesService.data.view;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n payModal.result.then(function (invoice) {\r\n \tpayableService.update(invoice);\r\n }, function () {\r\n });\r\n\t}\r\n\t\r\n\t$scope.clickInfo = function(){\r\n\t\t$scope.$emit(\"detail-payables\");\r\n\t}\r\n\r\n $scope.addFile = function(fileInput){\r\n $scope.$apply(function(){\r\n $scope.newFile=fileInput.files[0];\r\n $scope.newFile.progress=0;\r\n console.log($scope.newFile);\r\n $scope.upload(payablesService.data.view.id,$scope.newFile);\r\n $scope.showProgress = true;\r\n $(fileInput).val(\"\");\r\n });\r\n }\r\n\r\n $scope.upload = function(id,file){\r\n payablesService.addFile(id,file,function(data){\r\n $timeout(function(){\r\n $scope.showProgress = false;\r\n $scope.get(payablesService.data.view.id);\r\n },10);\r\n },function(evt) {\r\n $scope.$apply(function(){\r\n if (evt.lengthComputable) {\r\n var progress = Math.round(evt.loaded * 100 / evt.total)\r\n $scope.newFile.progress = progress;\r\n } else {\r\n progress = 'unable to compute'\r\n }\r\n });\r\n });\r\n }\r\n\r\n});","invo.controller('PayablesEditController',function($scope,payablesService,auth) {\r\n $scope.session=auth.session;\r\n $scope.editID = payablesService.data.view.id;\r\n\r\n $scope.closeWindow = function(){\r\n $scope.$emit(\"close-payables\");\r\n }\r\n\r\n\t//$scope.payableTypeList=[{\"name\":\"Invoice\", \"value\": \"Invoice\" },{\"name\":\"Credit Memo\", \"value\": \"Credit Memo\"},{\"name\":\"Expense Claim\", \"value\": \"Expense Claim\" }];\r\n\t//$scope.payablesType = $scope.payableTypeList[0];\r\n\t//$scope.payablesLines = [];\r\n\t//$scope.payableLine = {};\r\n\t//$scope.file = {};\r\n\t//$scope.addNewLine = false;\r\n\t//$scope.isEditLine = false;\r\n\t//$scope.previousPos = 0;\r\n\t//$scope.q = '';\r\n\t//$scope.type=\"vendor\";\r\n //$scope.requiredField = false;\r\n //\r\n\t////initializing default values;\r\n\t//$scope.$on('editpayables', function(e,data){\r\n\t//\t$scope.get(data);\r\n\t//});\r\n\t\r\n\r\n\t\r\n //$scope.listVendor = function(q) {\r\n // vendorService.listAll(q, function(data){\r\n // $scope.Vendors = data.Vendors;\r\n //\r\n // });\r\n //}\r\n\r\n //$scope.$watch('payable.vendorName', function (newVal, oldVal) {\r\n // if(newVal !=oldVal ){\r\n // if ($scope.payablesForm.$dirty)\r\n // {\r\n // $scope.payable.currency = newVal.currency;\r\n // $scope.payable.paymentTerm = newVal.paymentTermDays;\r\n // }\r\n // }\r\n //});\r\n //\r\n //$scope.save = function(){\r\n // if (!$scope.payablesForm.$valid){\r\n // $scope.requiredField = true;\r\n // }\r\n // else {\r\n // payablesService.update($scope.payable, function (data) {\r\n // $scope.showDetail();\r\n // });\r\n // }\r\n //}\r\n\t//\r\n\t//$scope.closeWindow = function(){\r\n // $scope.showDetail();\r\n\t//}\r\n\t//\r\n\t//$scope.open = function($event) {\r\n\t// $event.preventDefault();\r\n\t// $event.stopPropagation();\r\n\t// $scope.opened = true;\r\n\t//};\r\n\t//\r\n\t//$scope.open2 = function($event) {\r\n\t//\t $event.preventDefault();\r\n\t//\t $event.stopPropagation();\r\n\t//\t $scope.opened2 = true;\r\n\t//};\r\n\t//\r\n\t//\r\n\t//\r\n\t//$scope.fillDueDate = function() {\r\n\t//\tvar date;\r\n\t//\tif ($scope.payable.invoiceDate == null || $scope.payable.invoiceDate == undefined ) {\r\n\t//\t\tdate = new Date()\r\n\t//\t}\r\n\t//\telse{\r\n\t// \tdate = new Date($scope.payable.invoiceDate);\r\n\t//\t}\r\n\t//\tvar term = parseInt($scope.payable.paymentTerm)\r\n\t//\tif (isNaN(term)) term=0;\r\n\t//\tdate.setHours(0,0,0,0)\r\n\t//\tdate.setDate(date.getDate() + term);\r\n\t//\t$scope.payable.dueDate = date;\r\n\t//\t$scope.payable.dueDate = $filter(\"date\")($scope.payable.dueDate, 'yyyy-MM-dd');\r\n\t//\t$scope.tempDue = $filter(\"date\")($scope.payable.dueDate, 'dd-MM-yyyy');\r\n\t//};\r\n\t//\r\n\t//$scope.$watch('payable.invoiceDate', function(newVal, oldVal){\r\n\t//\tif(newVal != oldVal){\r\n // if ($scope.payablesForm.$dirty) {\r\n // $scope.fillDueDate();\r\n // }\r\n\t//\t}\r\n\t//}, true);\r\n\t//\r\n\t//$scope.changeInvoiceDate = function(){\r\n\t//\tvar result = document.getElementById('datetimepicker4').value.split(\"-\");\r\n\t//\tvar date = new Date(parseInt(result[2], 10), parseInt(result[1],10) -1, parseInt(result[0], 10));\r\n\t//\t$scope.payable.invoiceDate = $filter(\"date\")(date, 'yyyy-MM-dd');\r\n\t//}\r\n\t//\r\n\t//$scope.changeDueDate = function(){\r\n\t//\tvar result = document.getElementById('datetimepicker5').value.split(\"-\");\r\n\t//\tvar date = new Date(parseInt(result[2], 10), parseInt(result[1],10) -1, parseInt(result[0], 10));\r\n\t//\t$scope.payable.dueDate = $filter(\"date\")(date, 'yyyy-MM-dd');\r\n\t//}\r\n\t//\r\n\t//$scope.$watch('payable.paymentTerm', function(newVal, oldVal){\r\n\t//\tif(newVal != oldVal){\r\n // if ($scope.payablesForm.$dirty) {\r\n // $scope.fillDueDate();\r\n // }\r\n\t//\t}\r\n\t//},true);\r\n\t//\r\n\t//$scope.$watch('payablesType', function(newVal, oldVal){\r\n\t//\tif(newVal != oldVal){\r\n\t//\t\t$scope.payable.payablesType = $scope.payablesType.value;\r\n\t//\t}\r\n\t//},true)\r\n\t//\r\n\t//$scope.$watch('payable', function (newVal, oldVal) {\r\n\t//\tif (newVal != oldVal){\r\n // if ($scope.payablesForm.$dirty) {\r\n // $scope.payable.total = $scope.payable.subTotal + $scope.payable.tax - $scope.payable.discount;\r\n // }\r\n\t//\t}\r\n\t//}, true);\r\n\t//\r\n\t//$scope.$watch('payable.subTotal', function (newVal, oldVal) {\r\n\t//\tif (newVal != oldVal){\r\n // if ($scope.payablesForm.$dirty) {\r\n // $scope.payable.tax = Math.round($scope.payable.subTotal * auth.session.company.defaultTaxRate) / 100\r\n // }\r\n\t//\t}\r\n\t//}, true);\r\n\t//$scope.$watch('payable.discount', function (newVal, oldVal) {\r\n\t//\tif (newVal != oldVal){\r\n // if ($scope.payablesForm.$dirty) {\r\n // $scope.payable.tax = Math.round(($scope.payable.subTotal - $scope.payable.discount) * auth.session.company.defaultTaxRate) / 100;\r\n // }\r\n\t//\t}\r\n\t//}, true);\r\n\t//\r\n\t//$scope.createVendor = function(){\r\n\t//\t$scope.isCreateVendor = true;\r\n\t//}\r\n\t//\r\n\t//$scope.$on('donecreate', function(e){\r\n\t//\t$scope.isCreateVendor = false;\r\n\t//});\r\n\t\r\n\t//$scope.broadcastGetNew = function(data){\r\n\t//\t $scope.q = data.name;\r\n\t//\t $scope.payable.vendorName = data;\r\n\t//\t $scope.payable.currency = data.currency;\r\n\t//\t $scope.payable.paymentTerm = data.paymentTermDays;\r\n\t//}\r\n\t//\r\n\t//$scope.$on('closevendorwindow', function(e){\r\n\t//\t$scope.isCreateVendor = false;\r\n\t//});\r\n\t\r\n\t//line functions\r\n\t//$scope.addLine = function(){\r\n\t//\tif($scope.isEditLine == true){\r\n\t//\t\t$scope.saveLine($scope.previousPos);\r\n\t//\t}\r\n\t//\t$scope.payableLine = {};\r\n\t//\t$scope.payableLine.description = '';\r\n\t//\t$scope.payableLine.quantity = 0;\r\n\t//\t$scope.payableLine.unitPrice = 0;\r\n\t//\t$scope.payableLine.totalPrice = 0;\r\n\t//\t$scope.addNewLine = true;\r\n\t//}\r\n\t//\r\n\t//$scope.saveLine = function(pos){\r\n\t//\t\t$scope.payableLine.totalPrice = $scope.payableLine.quantity * $scope.payableLine.unitPrice;\r\n\t//\t\t$scope.lineTotalEdit += $scope.payableLine.totalPrice;\r\n\t//\t\t$scope.lineLength += 1;\r\n\t//\t\tif($scope.isEditLine == false){\r\n\t//\t\t\t$scope.addNewLine = false;\r\n\t//\t\t\tpayablesService.createLine($scope.payableLine, $scope.selectedData.id, function(data){\r\n\t//\t\t\t\t$scope.payablesLines.push(data.invoiceLine)\r\n\t//\t\t\t});\r\n\t//\t\t}\r\n\t//\t\telse{\r\n\t//\t\t\t$scope.payablesLines[pos].addNewLine = false;\r\n\t//\t\t\tpayablesService.updateLine($scope.payableLine, $scope.payableLine.id, function(data){\r\n\t//\t\t\t\t$scope.payablesLines.splice(pos, 1, data.invoiceLine)\r\n\t//\t\t\t});\r\n\t//\t\t}\r\n\t//\t\t$scope.payableLine = {};\r\n\t//\t\t$scope.isEditLine = false;\r\n\t//\t\t$scope.lineForm.$setPristine();\r\n\t//}\r\n\t//\r\n\t//$scope.editLine = function(pos){\r\n\t//\tif($scope.isEditLine == true && $scope.addNewLine == false){\r\n\t//\t\t$scope.saveLine($scope.previousPos);\r\n\t//\t}\r\n\t//\telse\r\n\t//\t\tif($scope.addNewLine == true){\r\n\t//\t\t\t$scope.addNewLine = false;\r\n\t//\t\t}\r\n\t//\t$scope.previousPos = pos;\r\n\t//\t$scope.payableLine.id = $scope.payablesLines[pos].id;\r\n\t//\t$scope.payableLine.description = $scope.payablesLines[pos].description;\r\n\t//\t$scope.payableLine.quantity = $scope.payablesLines[pos].quantity;\r\n\t//\t$scope.payableLine.unitPrice = $scope.payablesLines[pos].unitPrice;\r\n\t//\t$scope.payableLine.totalPrice = $scope.payablesLines[pos].totalPrice;\r\n\t//\t$scope.lineTotalEdit -= $scope.payablesLines[pos].totalPrice;\r\n\t//\t//$scope.payablesLines.splice(pos,1);\r\n\t//\t$scope.payablesLines[pos].addNewLine = true;\r\n\t//\t$scope.isEditLine = true;\r\n\t//}\r\n\t//\r\n\t//$scope.deleteLine = function(pos){\r\n\t//\tif($scope.isEditLine == true && $scope.addNewLine == false){\r\n\t//\t\t$scope.saveLine($scope.previousPos);\r\n\t//\t}\r\n\t//\telse\r\n\t//\t\tif($scope.addNewLine == true){\r\n\t//\t\t\t$scope.addNewLine = false;\r\n\t//\t\t}\r\n\t//\t$scope.lineTotalEdit = $scope.lineTotalEdit - $scope.payablesLines[pos].totalPrice;\r\n\t//\t$scope.lineLength -= 1;\r\n\t//\t$scope.payableLine = $scope.payablesLines[pos];\r\n\t//\t$scope.payablesLines.splice(pos, 1);\r\n\t//\tpayablesService.deleteClickLine($scope.payableLine.id, $scope.payable.id, function(data){});\r\n\t//}\r\n\t//\r\n\t//$scope.$watch('lineTotalEdit',function(newVal,oldVal){\r\n\t//\tif(newVal != oldVal){\r\n\t//\t\tif($scope.lineTotalEdit != $scope.payable.subTotal && $scope.lineLength >= 1){\r\n\t//\t\t\t$scope.editmessage = \"Line amt does not match payable's sub total\";\r\n\t//\t\t\t$scope.displayError($scope.editmessage);\r\n\t//\t\t}\r\n\t//\t\telse{\r\n\t//\t\t\t$scope.hideError();\r\n\t//\t\t}\r\n\t//\t}\r\n\t//\r\n\t//},true)\r\n\t//\r\n\t//$scope.listVendor($scope.q);\r\n});","invo.controller('PayablesHeaderFormController',function($scope,payablesService,$filter,auth) {\r\n\r\n $scope.today= new Date();\r\n $scope.types=payablesService.data.types;\r\n\r\n $scope.init=function(){\r\n $scope.submitted = false;\r\n if ($scope.editID!=undefined){\r\n payablesService.get($scope.editID).then(function(response){\r\n $scope.payable = response.data.data.invoice;\r\n initDate();\r\n $scope.isEdit=true;\r\n saveOrRestoreCache();\r\n });\r\n }\r\n else{\r\n saveOrRestoreCache();\r\n initDate();\r\n $scope.isEdit=false;\r\n }\r\n }\r\n\r\n var saveOrRestoreCache=function(){\r\n if ($scope.isEdit){\r\n if (payablesService.temp.edit.id!=undefined && payablesService.temp.edit.id == $scope.payable.id ) {\r\n $scope.payable = payablesService.temp.edit;\r\n }\r\n else {\r\n payablesService.temp.edit=$scope.payable;\r\n }\r\n }\r\n else{\r\n if (payablesService.temp.new != {}){\r\n $scope.payable = payablesService.temp.new;\r\n }\r\n else{\r\n payablesService.temp.new = $scope.payable;\r\n }\r\n }\r\n }\r\n var clearCache=function(){\r\n if ($scope.isEdit){\r\n payablesService.temp.edit={};\r\n }\r\n else{\r\n payablesService.temp.new=payablesService.initPayable();\r\n }\r\n };\r\n\r\n var initDate =function(){\r\n $scope.today1 = $filter(\"date\")($scope.payable.invoiceDate, 'dd-MM-yyyy');\r\n $scope.today2 = $filter(\"date\")($scope.payable.dueDate, 'dd-MM-yyyy');\r\n }\r\n\r\n\r\n $scope.save = function(){\r\n $scope.submitted = true;\r\n if (!$scope.payablesForm.$valid){\r\n\r\n }\r\n else{\r\n if ($scope.isEdit){\r\n payablesService.update($scope.payable).then(function (data) {\r\n clearCache();\r\n $scope.$emit(\"save-payables\");\r\n });\r\n }\r\n else{\r\n payablesService.create($scope.payable, $scope.file).then(function(data){\r\n clearCache();\r\n $scope.$emit(\"save-payables\");\r\n });\r\n }\r\n }\r\n }\r\n\r\n $scope.createVendor = function(){\r\n $scope.$emit('new-vendor');\r\n }\r\n\r\n $scope.$watch('payable.vendorName', function (newVal, oldVal) {\r\n if(newVal !=oldVal && typeof newVal != 'undefined'){\r\n $scope.payable.currency = newVal.currency;\r\n $scope.payable.paymentTerm = newVal.paymentTermDays;\r\n }\r\n });\r\n\r\n $scope.$watchCollection('[payable.invoiceDate, payable.paymentTerm]', function(newVal, oldVal){\r\n if(newVal != oldVal){\r\n $scope.payable.dueDate = payablesService.calculateDueDate(newVal[0],newVal[1]);\r\n $scope.today2 = $filter(\"date\")($scope.payable.dueDate, 'dd-MM-yyyy');\r\n }\r\n });\r\n\r\n $scope.$watchCollection('[payable.subTotal,payable.discount]', function (newVal, oldVal) {\r\n if (newVal != oldVal){\r\n $scope.payable.tax = payablesService.calculateTax(newVal[0],newVal[1])\r\n $scope.payable.total = $scope.payable.subTotal + $scope.payable.tax - $scope.payable.discount;\r\n }\r\n });\r\n\r\n $scope.changeInvoiceDate = function(){\r\n var result = document.getElementById('datetimepicker2').value.split(\"-\");\r\n var date = new Date(parseInt(result[2], 10), parseInt(result[1],10) -1, parseInt(result[0], 10));\r\n $scope.payable.invoiceDate = $filter(\"date\")(date, 'yyyy-MM-dd');\r\n }\r\n\r\n $scope.changeDueDate = function(){\r\n var result = document.getElementById('datetimepicker3').value.split(\"-\");\r\n var date = new Date(parseInt(result[2], 10), parseInt(result[1],10) -1, parseInt(result[0], 10));\r\n $scope.payable.dueDate = $filter(\"date\")(date, 'yyyy-MM-dd');\r\n }\r\n\r\n $scope.init();\r\n\r\n});","invo.controller('PayablesLinesController',function($scope,payablesService,auth) {\r\n $scope.session = auth.session;\r\n $scope.payables= payablesService.data;\r\n $scope.payableLine={};\r\n $scope.isEditLine = false;\r\n $scope.addNewLine = false;\r\n\r\n $scope.lineTotal = payablesService.calculateLineTotal(payablesService.data.view.payablesLines);\r\n\r\n //line functions\r\n $scope.addLine = function(){\r\n if($scope.isEditLine == true){\r\n $scope.saveLine();\r\n }\r\n $scope.payableLine = {};\r\n $scope.payableLine.description = '';\r\n $scope.payableLine.quantity = 0;\r\n $scope.payableLine.unitPrice = 0;\r\n $scope.payableLine.totalPrice = 0;\r\n $scope.addNewLine = true;\r\n }\r\n\r\n $scope.saveLine = function(){\r\n $scope.payableLine.totalPrice = $scope.payableLine.quantity * $scope.payableLine.unitPrice;\r\n if($scope.isEditLine == false){\r\n $scope.addNewLine = false;\r\n payablesService.createLine($scope.payableLine, payablesService.data.view.id);\r\n }\r\n else{\r\n payablesService.updateLine($scope.payableLine, $scope.payableLine.id);\r\n }\r\n $scope.payableLine = {};\r\n $scope.isEditLine = false;\r\n $scope.lineForm.$setPristine();\r\n }\r\n\r\n $scope.editLine = function(pos){\r\n if($scope.isEditLine == true && $scope.addNewLine == false){\r\n $scope.saveLine();\r\n }\r\n else\r\n if($scope.addNewLine == true){\r\n $scope.addNewLine = false;\r\n }\r\n\r\n $scope.previousPos = pos;\r\n $scope.payableLine.id = payablesService.data.view.payablesLines[pos].id;\r\n $scope.payableLine.description = payablesService.data.view.payablesLines[pos].description;\r\n $scope.payableLine.quantity = payablesService.data.view.payablesLines[pos].quantity;\r\n $scope.payableLine.unitPrice = payablesService.data.view.payablesLines[pos].unitPrice;\r\n $scope.payableLine.totalPrice = payablesService.data.view.payablesLines[pos].totalPrice;\r\n payablesService.data.view.payablesLines[pos].addNewLine = true;\r\n $scope.isEditLine = true;\r\n }\r\n\r\n $scope.deleteLine = function(pos){\r\n if($scope.isEditLine == true && $scope.addNewLine == false){\r\n $scope.saveLine();\r\n }\r\n else\r\n if($scope.addNewLine == true){\r\n $scope.addNewLine = false;\r\n }\r\n payablesService.deleteLine(payablesService.data.view.payablesLines[pos].id, payablesService.data.view.id);\r\n }\r\n\r\n $scope.$watch('payables.view.payablesLines',function(newVal,oldVal){\r\n if(newVal != oldVal){\r\n $scope.lineTotal = payablesService.calculateLineTotal(payablesService.data.view.payablesLines)\r\n if($scope.lineTotal != payablesService.data.view.subTotal && payablesService.data.view.payablesLines !=undefined && payablesService.data.view.payablesLines.length >= 1){\r\n $scope.message = \"Line amt does not match payable's sub total\";\r\n $scope.displayError($scope.message);\r\n }\r\n else{\r\n $scope.hideError();\r\n }\r\n }\r\n },true)\r\n});","invo.controller('PayablesListController',function($scope,$stateParams,$state,payablesService,$rootScope,$modal,$location,$filter,auth) {\r\n $scope.session=auth.session;\r\n $scope.payables = payablesService.data;\r\n $scope.q=\"\";\r\n\r\n $scope.list = function(q,offset,max) {\r\n \t if (q=='Due In 7 Days'){\r\n \t \t payablesService.listDueIn7Days(q,offset,max);\r\n\t\t\t}\r\n\t\t\telse if (q=='Overdue'){\r\n\t\t\t\tpayablesService.listOverdue(q,offset,max);\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tpayablesService.list(q,offset,max);\r\n\t\t\t}\r\n }\r\n\r\n $scope.$on('search', function (e, q) {\r\n $scope.q=q;\r\n $scope.list($scope.q,0,20);\r\n }, true);\r\n\r\n $scope.showMoreItems = function(){\r\n var offset = payablesService.data.list.length;\r\n $scope.list($scope.q,offset,20);\r\n }\r\n\r\n $scope.$watch(function(){return payablesService.data.view},function(newVal,oldVal){\r\n if (newVal!=undefined){\r\n newVal.className= 'active';\r\n }\r\n if (newVal.id != undefined && newVal.id !=oldVal.id){\r\n if($scope.current){\r\n $scope.current.className = '';\r\n }\r\n $scope.current=newVal;\r\n }\r\n\r\n });\r\n\r\n $scope.setSelected = function(payables, pos){\r\n if (payablesService.data.view == payables){\r\n $scope.$emit(\"detail-payables\");\r\n }\r\n else{\r\n payablesService.setSelected(payables);\r\n }\r\n $scope.currentPos = pos;\r\n }\r\n\r\n $scope.add=function(){\r\n $scope.$emit(\"new-payables\");\r\n }\r\n\r\n $scope.list($scope.q,0,20);\r\n\r\n});","invo.controller('PayablesMainController',function($scope,$stateParams,$state,payablesService,$rootScope,$modal,$location,$filter) {\r\n var requestFromEdit=false;\r\n var listTemplate='./App/payables/template/payables-list-view-left.html';\r\n var editTemplate='./App/payables/template/payables-edit-view-left.html';\r\n var newTemplate='./App/payables/template/payables-add-new-view-left.html';\r\n var detailTemplate='./App/payables/template/payables-detailed-view-left.html';\r\n var newVendorTemplate='./app/vendors/template/vendors-add-new-view-left.html';\r\n var documentViewTemplate='./App/payables/template/payables-list-view-right.html';\r\n var current=\"list\";\r\n\r\n\t$scope.isError = false;\r\n $scope.listView=listTemplate;\r\n $scope.leftView='';\r\n $scope.rightView=documentViewTemplate;\r\n $scope.showListView=true;\r\n\r\n $scope.$on('edit-payables',function(ev,state){\r\n $scope.showEdit();\r\n });\r\n\r\n $scope.$on('new-payables',function(ev,state){\r\n $scope.showNew();\r\n });\r\n\r\n $scope.$on('detail-payables',function(ev,state){\r\n $scope.showDetail();\r\n });\r\n\r\n $scope.$on('close-payables',function(ev,state){\r\n if(current==\"edit\"){\r\n $scope.showDetail();\r\n }\r\n else{\r\n $scope.showList();\r\n }\r\n });\r\n\r\n $scope.$on('save-payables',function(ev,state){\r\n $scope.showDetail();\r\n });\r\n\r\n $scope.$on('new-vendor',function(ev,state){\r\n $scope.showListView=false;\r\n $scope.leftView='./app/vendors/template/vendors-add-new-view-left.html';\r\n\r\n });\r\n\r\n $scope.$on('close-vendor',function(ev,state){\r\n if (current==\"edit\"){\r\n $scope.showEdit();\r\n }\r\n else{\r\n $scope.showNew();\r\n }\r\n });\r\n\r\n $scope.$on('save-vendor',function(ev,state){\r\n if (current==\"edit\"){\r\n payablesService.temp.edit.vendorName = data;\r\n payablesService.temp.edit.currency = data.currency;\r\n payablesService.temp.edit.paymentTerm = data.paymentTermDays;\r\n $scope.showEdit();\r\n }\r\n else{\r\n payablesService.temp.new.vendorName = data;\r\n payablesService.temp.new.currency = data.currency;\r\n payablesService.temp.new.paymentTerm = data.paymentTermDays;\r\n $scope.showNew();\r\n }\r\n });\r\n\r\n\r\n $scope.showList=function(){\r\n current=\"list\";\r\n $scope.showListView=true;\r\n $scope.leftView='';\r\n $scope.rightView=documentViewTemplate;\r\n }\r\n $scope.showNew=function(){\r\n current=\"new\";\r\n $scope.showListView=false;\r\n $scope.leftView=newTemplate;\r\n $scope.rightView=\"\";\r\n }\r\n $scope.showDetail=function(){\r\n current=\"detail\";\r\n $scope.showListView=false;\r\n $scope.leftView=detailTemplate;\r\n $scope.rightView=documentViewTemplate;\r\n }\r\n $scope.showEdit=function(){\r\n current=\"edit\";\r\n $scope.showListView=false;\r\n $scope.leftView=editTemplate;\r\n $scope.rightView=documentViewTemplate;\r\n }\r\n\r\n //$scope.$on('closevendorwindow',function(e){\r\n // console.log(e);\r\n // if (current==\"edit\"){\r\n //\r\n // $scope.showEdit();\r\n // }\r\n // else{\r\n // $scope.showNew();\r\n // }\r\n //});\r\n //\r\n //$scope.$on('donecreate',function(e,data){\r\n // console.log('here');\r\n // if (requestFromEdit){\r\n //\r\n // }\r\n // else{\r\n // payablesService.temp.new.vendorName = data;\r\n // payablesService.temp.new.currency = data.currency;\r\n // payablesService.temp.new.paymentTerm = data.paymentTermDays;\r\n // $scope.showNew();\r\n // }\r\n //});\r\n\r\n\r\n $scope.broadcastGetNew=function(){\r\n console.log('vendors created');\r\n }\r\n \r\n $scope.displayError = function(message){\r\n \t$scope.isError = true;\r\n \t$scope.message = message;\r\n }\r\n \r\n $scope.hideError = function(){\r\n \t$scope.isError = false;\r\n }\r\n\r\n \r\n});","invo.controller('VoidModalController',function ($scope, $modalInstance, invoice, payablesService) {\r\n $scope.dataI = invoice;\r\n\r\n $scope.ok = function () {\r\n \tpayablesService.cancel(invoice.id ,function(data){\r\n $modalInstance.close(data.invoice);\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $modalInstance.dismiss('cancel');\r\n };\r\n});","invo.controller('AssignDeanEmailSchoolModalController',function ($scope, $uibModalInstance ,schoolService, $stateParams) {\r\n\r\n $scope.school = $stateParams.school;\r\n $scope.deanEmail = $stateParams.school.deanEmail;\r\n\r\n $scope.ok = function () {\r\n schoolService.saveAssignDeanEmail($scope.school.code, $scope.deanEmail).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n","invo.controller('AssignDeanModalController',function ($scope,$uibModalInstance,$stateParams,schoolService) {\r\n\r\n $scope.deanList;\r\n $scope.school = $stateParams.school;\r\n $scope.showSetDefaultForm=false;\r\n $scope.showAddDeanForm=true;\r\n\r\n $scope.ok = function () {\r\n $uibModalInstance.close($scope.deanList[0]);\r\n };\r\n\r\n $scope.cancelSetDefault=function(){\r\n $scope.openAddDeanForm()\r\n }\r\n $scope.addDeanAssignment = function(){\r\n var isAssigned=false;\r\n $scope.deanList.forEach(function(dean){\r\n if (dean.staff.staffId == $scope.staffData.staffId){\r\n isAssigned=true;\r\n }\r\n });\r\n if (!isAssigned){\r\n schoolService.addSchoolDeanAssignment($scope.school.code,$scope.staffData.staffId).then(function(data){\r\n $scope.deanList = data.data.data.deanList;\r\n $scope.staffData=undefined;\r\n $scope.errorAlert=null;\r\n });\r\n }\r\n else{\r\n $scope.staffData=undefined;\r\n $scope.errorAlert=\"selected academic staff has been assigned to this school\";\r\n }\r\n }\r\n\r\n $scope.removeDeanAssignment = function(assignmentId){\r\n schoolService.removeSchoolDeanAssignment(assignmentId).then(function(data){\r\n $scope.deanList = data.data.data.deanList;\r\n });\r\n }\r\n\r\n $scope.openSetDefaultForm=function(deanAssignment){\r\n $scope.defaultDeanAssignment=deanAssignment;\r\n $scope.showSetDefaultForm=true;\r\n $scope.showAddDeanForm=false;\r\n }\r\n\r\n $scope.openAddDeanForm=function(){\r\n $scope.showSetDefaultForm=false;\r\n $scope.showAddDeanForm=true;\r\n }\r\n\r\n $scope.setDefault = function(){\r\n $scope.deanEmail\r\n schoolService.setDefaultDean($scope.defaultDeanAssignment.id,$scope.deanEmail).then(function(data){\r\n $scope.deanList = data.data.data.deanList;\r\n $scope.openAddDeanForm();\r\n });\r\n }\r\n\r\n\r\n schoolService.listSchoolDean($scope.school.code).then(function(data){\r\n $scope.deanList = data.data.data.deanList;\r\n })\r\n\r\n $scope.$watch('staffData',function(newVal,oldVal){\r\n if (newVal!=oldVal && newVal!=undefined && newVal!=null){\r\n $scope.addDeanAssignment();\r\n }\r\n });\r\n\r\n});\r\n","invo.controller('AssignEmailSchoolModalController',function ($scope, $uibModalInstance ,schoolService, $stateParams) {\r\n\r\n $scope.school = $stateParams.school;\r\n $scope.email = $stateParams.school.email;\r\n\r\n $scope.ok = function () {\r\n schoolService.saveAssignEmail($scope.school.code, $scope.email).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n","invo.directive('selectAcadStaff',function($rootScope){\r\n return{\r\n restrict:'EA',\r\n template: '',\r\n scope:{\r\n selectedStaff: '=ngModel',\r\n inputClass:'@inputClass',\r\n inputName:'@inputName',\r\n inputPlaceholder:'@placeholder'\r\n },\r\n link:function(scope,element,attrs){\r\n\r\n },\r\n controller: function($scope,$http,limitToFilter){\r\n $scope.formatLabel = function(model) {\r\n if (model){\r\n return model.shortTitleDesc + \" \"+ model.fullname + \" (\"+model.staffId+\")\" +\" - \"+model.dept.name;\r\n }\r\n else{\r\n return \"\";\r\n }\r\n\r\n };\r\n $scope.staffList = function(q) {\r\n return $http.get($rootScope.serverUrl+\"StaffApp/listAcademic?q=\"+encodeURIComponent(q)).then(function(response){\r\n return limitToFilter(response.data.data.staffs, 20);\r\n });\r\n }\r\n $scope.selectedStaff;\r\n }\r\n };\r\n});","invo.directive('selectAcadStaffNoValidate',function($rootScope){\r\n return{\r\n restrict:'EA',\r\n template: '',\r\n scope:{\r\n selectedStaff: '=ngModel',\r\n inputClass:'@inputClass',\r\n inputName:'@inputName',\r\n inputPlaceholder:'@placeholder'\r\n },\r\n link:function(scope,element,attrs){\r\n\r\n },\r\n controller: function($scope,$http,limitToFilter){\r\n $scope.formatLabel = function(model) {\r\n if (model){\r\n return model.shortTitleDesc + \" \" + model.fullname + \" - \" + model.dept.name;\r\n }\r\n else{\r\n return \"\";\r\n }\r\n };\r\n $scope.staffList = function(q) {\r\n return $http.get($rootScope.serverUrl+\"StaffApp/listAcademic?q=\"+encodeURIComponent(q)).then(function(response){\r\n return limitToFilter(response.data.data.staffs, 20);\r\n });\r\n }\r\n $scope.selectedStaff;\r\n }\r\n };\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.controller('SchoolListController',function($scope,$uibModal,schoolService,$rootScope,$stateParams,auth,blockUI){\r\n $scope.schools=schoolService.data;\r\n $scope.q=$stateParams.q;\r\n\r\n $scope.orderData='code';\r\n $scope.sortData='asc';\r\n\r\n //paging\r\n $scope.currentPage = 1;\r\n $scope.numPerPage = 20;\r\n $scope.maxSize = 5;\r\n\r\n var myBlock = blockUI.instances.get('schoolBlock');\r\n $scope.block = function(){\r\n myBlock.start();\r\n }\r\n $scope.block();\r\n\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n\r\n $scope.list = function(q,offset,sortBy,max) {\r\n max = max ? max : $scope.numPerPage;\r\n schoolService.list(q, offset, sortBy, max).then(function(){}).finally(function(){myBlock.stop();});\r\n }\r\n\r\n $scope.sortByList = [\r\n {id: 'code',name: 'Code'},\r\n {id: 'name', name: 'Name'}\r\n ]\r\n $scope.currentSortBy = $scope.sortByList[0];\r\n $scope.itemselectedSortBy = function (item) {\r\n $scope.currentSortBy = item;\r\n $scope.orderData = item.id;\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSortBy = function (item) {\r\n if ($scope.currentSortBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.searchByList = [\r\n {id: '', name: 'All '},\r\n {id: 'code',name: 'Code '},\r\n {id: 'name', name: 'Name '}\r\n ]\r\n\r\n $scope.currentSearchBy = $scope.searchByList[0];\r\n $scope.itemselectedSearchBy = function (item) {\r\n $scope.currentSearchBy = item;\r\n $scope.searchData = item.id;\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSearchBy = function (item) {\r\n if ($scope.currentSearchBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n /*\r\n $scope.list = function(q,offset,sortBy,begin,end){\r\n\r\n schoolService.list(q,offset,sortBy,begin,end);\r\n }\r\n */\r\n\r\n $scope.assignDean = function(school){\r\n $stateParams.school = school;\r\n var assignDeanModal = $uibModal.open({\r\n templateUrl: './app/school/assign/assign-dean-modal.html?ver='+$scope.appVersion,\r\n controller: 'AssignDeanModalController'\r\n });\r\n assignDeanModal.result.then(function (data) {\r\n $scope.buildQuery();\r\n }, function () {\r\n\r\n });\r\n }\r\n\r\n $scope.assignEmail = function(school){\r\n $stateParams.school = school;\r\n var assignEmailModal = $uibModal.open({\r\n templateUrl: './app/school/assign/assign-email.html?ver='+$scope.appVersion,\r\n controller: 'AssignEmailSchoolModalController'\r\n /*resolve: {\r\n rolesData: function(){\r\n $scope.listRoles();//stater roles data\r\n console.log(staffService.data);\r\n console.log(staffService.roles);\r\n return staffService.roles //get roles data\r\n }\r\n }*/\r\n });\r\n assignEmailModal.result.then(function (data) {\r\n $scope.buildQuery();\r\n }, function () {\r\n\r\n });\r\n }\r\n\r\n $scope.assignDeanEmail = function(school){\r\n $stateParams.school = school;\r\n var assignDeanEmailModal = $uibModal.open({\r\n templateUrl: './app/school/assign/assign-dean-email.html?ver='+$scope.appVersion,\r\n controller: 'AssignDeanEmailSchoolModalController'\r\n });\r\n assignDeanEmailModal.result.then(function (data) {\r\n $scope.buildQuery();\r\n }, function () {\r\n\r\n });\r\n }\r\n\r\n if ($scope.q=='null') $scope.q=\"\";\r\n //$scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData);\r\n\r\n $scope.buildQuery = function () {\r\n var q = \"\";\r\n\r\n if (($scope.searchData!=undefined && $scope.searchData!='') && ($scope.criteriaData!=undefined)) {\r\n q = q.concat($scope.searchData +\",ilike,%\"+$scope.criteriaData+\"%\");\r\n }\r\n\r\n //if searchData is undefined search in all\r\n if (($scope.searchData==undefined || $scope.searchData=='') && ($scope.criteriaData!=undefined)) {\r\n q = q.concat(\"code,ilike,%\"+$scope.criteriaData+\"%,\");\r\n q = q.concat(\"name,ilike,%\"+$scope.criteriaData+\"%\");\r\n }\r\n\r\n var sortBy = $scope.orderData +\",\"+ $scope.sortData;\r\n\r\n $scope.list(q,0,sortBy);\r\n $scope.currentPage = 1\r\n }\r\n\r\n $scope.$watch(\"currentPage + numPerPage\", function() {\r\n var begin = (($scope.currentPage - 1) * $scope.numPerPage)\r\n , end = begin + $scope.numPerPage;\r\n\r\n $scope.list($scope.q,begin,$scope.orderData +\",\"+ $scope.sortData);\r\n });\r\n\r\n $scope.exportToExcel = function() {\r\n schoolService.exportToExcel();\r\n }\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.controller('ProgrammeListController',function($scope,$uibModal,programmeService,$rootScope,$stateParams,auth){\r\n $scope.programmes=[];\r\n $scope.total;\r\n $scope.q=$stateParams.q;\r\n $scope.id=$stateParams.id;\r\n\r\n //paging\r\n $scope.currentPage = 1\r\n $scope.numPerPage = 10\r\n $scope.maxSize = 5\r\n\r\n //$scope.filterStatusData;\r\n $scope.orderData='name';\r\n $scope.sortData='asc';\r\n\r\n $scope.list = function(q,offset,sortBy,id,max){\r\n max = max ? max : $scope.numPerPage;\r\n programmeService.list(q,offset,sortBy,id,max).then(function(response){\r\n $scope.programmes = response.data.data.programmes;\r\n $scope.total = response.data.data.total;\r\n });\r\n }\r\n\r\n $scope.sortByList = [\r\n {id: 'code',name: 'Code'},\r\n {id: 'name', name: 'Name'}\r\n ]\r\n $scope.currentSortBy = $scope.sortByList[0];\r\n $scope.itemselectedSortBy = function (item) {\r\n $scope.currentSortBy = item;\r\n $scope.orderData = item.id;\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSortBy = function (item) {\r\n if ($scope.currentSortBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.searchByList = [\r\n {id: '', name: 'All '},\r\n {id: 'code',name: 'Code '},\r\n {id: 'name', name: 'Name '}\r\n ]\r\n\r\n $scope.currentSearchBy = $scope.searchByList[0];\r\n $scope.itemselectedSearchBy = function (item) {\r\n $scope.currentSearchBy = item;\r\n $scope.searchData = item.id;\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSearchBy = function (item) {\r\n if ($scope.currentSearchBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.disable=function(programme){\r\n programmeService.disable(programme.code).then(function(response){\r\n programme.isEnabled = response.data.data.programme.isEnabled;\r\n });\r\n }\r\n\r\n $scope.enable=function(programme){\r\n programmeService.enable(programme.code).then(function(response){\r\n programme.isEnabled = response.data.data.programme.isEnabled;\r\n });\r\n }\r\n\r\n if ($scope.q=='null') $scope.q=\"\";\r\n //$scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.id);\r\n\r\n $scope.buildQuery = function () {\r\n var q = \"\";\r\n\r\n if (($scope.searchData!=undefined && $scope.searchData!='') && ($scope.criteriaData!=undefined)) {\r\n q = q.concat($scope.searchData +\",ilike,\"+\"%\"+$scope.criteriaData+\"%\");\r\n }\r\n\r\n //if searchData is undefined search in all\r\n if (($scope.searchData==undefined || $scope.searchData=='') && ($scope.criteriaData!=undefined)) {\r\n q = q.concat(\"code,ilike,%\"+$scope.criteriaData+\"%,\");\r\n q = q.concat(\"name,ilike,%\"+$scope.criteriaData+\"%,\");\r\n }\r\n\r\n /*var filterBy = \"\";\r\n if (($scope.filterStatusData!=undefined) && ($scope.filterStatusData!=\"\")) {\r\n if ($scope.filterStatusData==1) {\r\n filterBy = filterBy.concat(\"isEnabled!b,eq,1\");\r\n } else {\r\n filterBy = filterBy.concat(\"isEnabled!b,eq,0\");\r\n }\r\n }*/\r\n\r\n var sortBy = $scope.orderData +\",\"+ $scope.sortData;\r\n\r\n $scope.list(q,0,sortBy,$scope.id);\r\n $scope.currentPage = 1\r\n }\r\n\r\n $scope.$watch(\"currentPage + numPerPage\", function() {\r\n var begin = (($scope.currentPage - 1) * $scope.numPerPage)\r\n , end = begin + $scope.numPerPage;\r\n\r\n $scope.list($scope.q,begin,$scope.orderData +\",\"+ $scope.sortData,$scope.id);\r\n });\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.factory('programmeService',function($http,notify,$rootScope,requestTransformService){\r\n var data={};\r\n data.list=[];\r\n data.view={};\r\n data.total=0;\r\n data.stats={};\r\n\r\n var saveListData = function(offset,response){\r\n //data.list.splice(offset,10000);\r\n data.list.splice(0,1000);\r\n data.list = data.list.concat(response.data.programmes);\r\n data.total = response.data.total;\r\n //for paging\r\n /*if (begin == undefined) {\r\n begin = 0;\r\n }\r\n if (end == undefined) {\r\n end = 10;\r\n }\r\n data.list = data.list.slice(begin,end);*/\r\n }\r\n\r\n var service = {\r\n data: data,\r\n list:list,\r\n enable : enable,\r\n disable : disable\r\n };\r\n\r\n return service;\r\n\r\n ////////////\r\n\r\n\r\n function list(q,offset,sortBy,id,max){\r\n return $http.get($rootScope.serverUrl+\"SchoolApp/programmeList?id=\"+id+\"&offset=\"+offset+\"&max=\"+max+\"&q=\"+encodeURIComponent(q)+\"&sortBy=\"+encodeURIComponent(sortBy)).\r\n then (function(response){\r\n saveListData(offset,response.data);\r\n return response;\r\n });\r\n }\r\n\r\n function enable(programmeCode){\r\n return $http.post($rootScope.serverUrl+\"SchoolApp/enableProgramme?programmeCode=\"+programmeCode).\r\n then(function(response){\r\n data.view.isEnabled = response.data.data.programme.isEnabled;\r\n return response;\r\n });\r\n }\r\n\r\n function disable(programmeCode){\r\n return $http.post($rootScope.serverUrl+\"SchoolApp/disableProgramme?programmeCode=\"+programmeCode).\r\n then(function(response){\r\n data.view.isEnabled = response.data.data.programme.isEnabled;\r\n return response;\r\n });\r\n }\r\n\r\n});","invo.controller('EditSettingModalController',function ($scope, $uibModalInstance ,settingService, $stateParams) {\r\n\r\n $scope.setting = $stateParams.setting;\r\n\r\n $scope.ok = function () {\r\n settingService.editSetting($scope.setting.name,$scope.setting.value).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n\r\n});\r\n","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.controller('SettingListController',function($scope,$uibModal,settingService,$rootScope,$stateParams){\r\n \r\n $scope.list = function(){\r\n settingService.list().then(function (response) {\r\n saveListData(response);\r\n });\r\n }\r\n var data={};\r\n data.list=[];\r\n var saveListData = function(response){\r\n data.list.splice(0,1000000);\r\n data.list = data.list.concat(response.data.data.settingList);\r\n }\r\n $scope.list();\r\n $scope.settings=data;\r\n\r\n $scope.edit = function(setting){\r\n $stateParams.setting = setting;\r\n var editSettingModal = $uibModal.open({\r\n templateUrl: './app/setting/list/edit-setting.html?ver='+$scope.appVersion,\r\n controller: 'EditSettingModalController',\r\n\r\n });\r\n editSettingModal.result.then(function (data) {\r\n \r\n }, function () {\r\n $scope.list();\r\n });\r\n\r\n }\r\n\r\n});","invo.directive('addStaff',function($rootScope,$compile){\r\n return{\r\n restrict:'EA',\r\n template: '',\r\n scope:{\r\n selectedStaff: '=ngModel',\r\n inputClass:'@inputClass',\r\n inputName:'@inputName',\r\n inputPlaceholder:'@placeholder'\r\n },\r\n link:function(scope,element,attrs){\r\n\r\n },\r\n controller: function($scope,$http,limitToFilter){\r\n $scope.formatLabel = function(model) {\r\n return model.shortTitleDesc + \" \" + model.fullname + \" - \"+ model.dept.name;\r\n };\r\n $scope.staffList = function(q) {\r\n return $http.get($rootScope.serverUrl+\"StaffApp/listNonLecturer?q=\"+encodeURIComponent(q)).then(function(response){\r\n return limitToFilter(response.data.data.staffs, 20);\r\n });\r\n }\r\n $scope.selectedStaff;\r\n }\r\n };\r\n});","invo.controller('AddStaffModalController',function ($scope, $uibModalInstance ,staffService) {\r\n\r\n $scope.staffData;\r\n $scope.roleData;\r\n $scope.rolesAddStaff = staffService.rolesAddStaff;\r\n\r\n $scope.roleData = $scope.rolesAddStaff.list[0];\r\n\r\n $scope.ok = function () {\r\n staffService.addStaff($scope.staffData.staffId,$scope.roleData.id).then(function(data){\r\n $uibModalInstance.dismiss('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.controller('StaffListController',function($scope,$uibModal,staffService,$rootScope,$stateParams,auth,blockUI){\r\n $scope.staffs=staffService.data;\r\n $scope.q=$stateParams.q;\r\n\r\n $scope.auth = auth.session;\r\n $scope.orderData='fullname';\r\n $scope.sortData='asc';\r\n $scope.filterByData;\r\n\r\n $scope.statusCB=undefined;\r\n\r\n $scope.currentDept;\r\n $scope.currentRole;\r\n $scope.deptFilterClass;\r\n $scope.roleFilterClass;\r\n\r\n $scope.pageHelper=1;\r\n\r\n var myBlock = blockUI.instances.get('staffBlock');\r\n $scope.block = function(){\r\n myBlock.start();\r\n }\r\n $scope.block();\r\n\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n\r\n $scope.itemselectedDept = function (item) {\r\n $scope.currentDept = item;\r\n $scope.deptFilterClass = 'active';\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassDept = function (item) {\r\n if ($scope.currentDept == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.list = function(q,offset,sortBy,filterBy,page){\r\n page = page ? page : 1;\r\n var numberPerPage = 20;\r\n if (page == 1) {\r\n offset = 0;\r\n } else {\r\n offset = (page-1)*numberPerPage;\r\n }\r\n\r\n staffService.list(q,offset,sortBy,filterBy,numberPerPage,page).then(function(){}).finally(function(){myBlock.stop();});\r\n }\r\n\r\n $scope.clearDeptFilter=function(){\r\n $scope.currentDept =undefined;\r\n $scope.deptFilterClass ='';\r\n $scope.buildQuery();\r\n }\r\n\r\n $scope.itemselectedRole = function (item) {\r\n $scope.currentRole = item;\r\n $scope.roleFilterClass ='active';\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassRole = function (item) {\r\n if ($scope.currentRole == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearRoleFilter=function(){\r\n $scope.currentRole =undefined;\r\n $scope.roleFilterClass ='';\r\n $scope.buildQuery();\r\n }\r\n\r\n $scope.enabledisableList = [\r\n {id: 1, name: 'Enable'},\r\n {id: 0, name: 'Disable'}\r\n ]\r\n $scope.currentEd;\r\n $scope.itemselectedEd = function (item) {\r\n $scope.currentEd = item;\r\n $scope.edFilterClass='active';\r\n if (item.id==1) {\r\n $scope.statusCB = true;\r\n } else if (item.id==0) {\r\n $scope.statusCB = false;\r\n }\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassEd = function (item) {\r\n if ($scope.currentEd == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearEdFilter=function(){\r\n $scope.currentEd=undefined;\r\n $scope.edFilterClass='';\r\n $scope.statusCB=undefined;\r\n $scope.buildQuery();\r\n }\r\n\r\n $scope.sortByList = [\r\n {id: 'fullname',name: 'Name'},\r\n {id: 'email', name: 'Email'},\r\n // {id: 'staffId', name: 'Staff ID'}\r\n ]\r\n $scope.currentSortBy = $scope.sortByList[0];\r\n $scope.itemselectedSortBy = function (item) {\r\n $scope.currentSortBy = item;\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSortBy = function (item) {\r\n if ($scope.currentSortBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.searchByList = [\r\n {id: '', name: 'All '},\r\n {id: 'fullname',name: 'Name'},\r\n {id: 'email', name: 'Email '},\r\n // {id: 'staffId', name: 'Staff ID '}\r\n ]\r\n\r\n $scope.currentSearchBy = $scope.searchByList[0];\r\n $scope.itemselectedSearchBy = function (item) {\r\n $scope.currentSearchBy = item;\r\n }\r\n $scope.getClassSearchBy = function (item) {\r\n if ($scope.currentSearchBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n /*\r\n $scope.list = function(q,offset,sortBy,filterBy,begin,end){\r\n\r\n staffService.list(q,offset,sortBy,filterBy,begin,end);\r\n }\r\n */\r\n\r\n $scope.disable=function(staff){\r\n staffService.disable(staff.staffId).then(function(response){\r\n staff.isEnabled = response.data.data.staff.isEnabled;\r\n });\r\n }\r\n\r\n $scope.enable=function(staff){\r\n staffService.enable(staff.staffId).then(function(response){\r\n staff.isEnabled = response.data.data.staff.isEnabled;\r\n });\r\n }\r\n\r\n $scope.sendActivationUrl = function(email){\r\n auth.sendActivationUrl(email);\r\n }\r\n\r\n if ($scope.q=='null') $scope.q=\"\";\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n\r\n $scope.buildQuery = function () {\r\n\r\n var filterBy =\"\";\r\n if (($scope.currentDept!=undefined) && ($scope.currentDept!='')){\r\n filterBy = filterBy.concat(\"dept.code,eq,\"+$scope.currentDept.code+\",\");\r\n }\r\n if (($scope.currentRole!=undefined) && ($scope.currentRole!='')){\r\n filterBy = filterBy.concat(\"role.authority,ilike,\"+$scope.currentRole.authority+\",\");\r\n }\r\n\r\n if ($scope.statusCB!=undefined) {\r\n if ($scope.statusCB == true) {\r\n filterBy = filterBy.concat(\"isEnabled!b,eq,true\");\r\n } else if ($scope.statusCB == false) {\r\n filterBy = filterBy.concat(\"isEnabled!b,eq,false\");\r\n }\r\n }\r\n\r\n $scope.filterByData = filterBy;\r\n\r\n if (($scope.currentSortBy!=undefined) && ($scope.currentSortBy!=\"\")) {\r\n $scope.orderData = $scope.currentSortBy.id;\r\n }\r\n\r\n var sortBy = $scope.orderData +\",\"+ $scope.sortData;\r\n\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,sortBy,filterBy);\r\n }\r\n\r\n $scope.buildCriteria=function(){\r\n $scope.q=\"\";\r\n if ($scope.currentSearchBy==undefined || $scope.currentSearchBy==\"\") $scope.currentSearchBy=$scope.searchByList[0];\r\n if ($scope.criteriaData==undefined || $scope.criteriaData==\"\") $scope.criteriaData=\"\";\r\n if ($scope.currentSearchBy==$scope.searchByList[0]){\r\n $scope.searchByList.forEach(function(searchBy){\r\n if (searchBy.name!=\"All \"){\r\n if ($scope.q!=\"\") $scope.q=$scope.q+\",\";\r\n $scope.q = $scope.q.concat(searchBy.id +\",ilike,\"+\"%\"+$scope.criteriaData+\"%\");\r\n }\r\n });\r\n }\r\n else{\r\n $scope.q = $scope.currentSearchBy.id +\",ilike,\"+\"%\"+$scope.criteriaData+\"%\";\r\n }\r\n }\r\n\r\n $scope.listRoles = function () {\r\n staffService.listRoles();\r\n }\r\n $scope.listRolesAddStaff = function () {\r\n staffService.listRolesAddStaff();\r\n }\r\n\r\n //initiate here to avoid 'promise' problems\r\n $scope.listRoles();\r\n $scope.roles = staffService.roles;\r\n $scope.listRolesAddStaff();\r\n\r\n $scope.addStaff = function(){\r\n //$scope.listRoles();\r\n\r\n var addStaffModal = $uibModal.open({\r\n templateUrl: './app/staff/add/add-staff.html?ver='+$scope.appVersion,\r\n controller: 'AddStaffModalController'\r\n });\r\n addStaffModal.result.then(function (data) {\r\n }, function () {\r\n $scope.buildQuery();\r\n });\r\n }\r\n\r\n $scope.editRoles = function(staff){\r\n $stateParams.staff = staff;\r\n $stateParams.roles = $scope.roles.list;\r\n\r\n var editRolesModal = $uibModal.open({\r\n templateUrl: './app/staff/edit/edit-roles-staff.html?ver='+$scope.appVersion,\r\n controller: 'EditRolesStaffModalController',\r\n /*resolve: {\r\n rolesData: function(){\r\n $scope.listRoles();//stater roles data\r\n console.log(staffService.data);\r\n console.log(staffService.roles);\r\n return staffService.roles //get roles data\r\n }\r\n }*/\r\n });\r\n editRolesModal.result.then(function (data) {\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,$scope.pageHelper);\r\n }, function () {\r\n });\r\n\r\n }\r\n\r\n $scope.removeStaff = function(staff){\r\n var editRolesModal = $uibModal.open({\r\n templateUrl: './app/staff/edit/remove-staff-modal.html?ver='+$scope.appVersion,\r\n controller: 'RemoveStaffModalController',\r\n resolve: {\r\n staffId: function(){return staff.staffId}\r\n }\r\n });\r\n editRolesModal.result.then(function (data) {\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,$scope.pageHelper);\r\n }, function () {\r\n });\r\n\r\n }\r\n\r\n $scope.deptList = function () {\r\n staffService.deptList();\r\n }\r\n $scope.deptList();\r\n $scope.depts = staffService.depts;\r\n\r\n\r\n\r\n /*$scope.$watch(\"criteriaData\", _.debounce(function (newVal,oldVal) {\r\n $scope.$apply(function(){\r\n if (newVal!=oldVal && oldVal!=undefined){\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,$scope.orderData,$scope.filterByData);\r\n }\r\n })\r\n }, 500));*/\r\n $scope.handleCriteriaChange = _.debounce(function () {\r\n $scope.$apply(function(){\r\n if ($scope.criteriaData != undefined){\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,$scope.orderData,$scope.filterByData);\r\n }\r\n })\r\n }, 500)\r\n\r\n $scope.$watch(\"currentSearchBy\", function(newVal, oldVal){\r\n if (newVal!=oldVal && oldVal!=undefined){\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,$scope.orderData,$scope.filterByData);\r\n }\r\n });\r\n\r\n $scope.isSchoolAdmin = function(){\r\n return auth.session.isSchoolAdmin();\r\n }\r\n $scope.isSchoolStaff = function(){\r\n return auth.session.isSchoolStaff();\r\n }\r\n $scope.verify = function(){\r\n if ($scope.isSchoolAdmin() || $scope.isSchoolStaff()) return false;\r\n else return true;\r\n }\r\n\r\n $scope.exportToExcel = function() {\r\n var fs = 'All';\r\n if (($scope.currentEd!=undefined) && ($scope.currentEd!=\"\")) {\r\n fs = $scope.currentEd.id;\r\n }\r\n var fd = 'All';\r\n if (($scope.currentDept!=undefined) && ($scope.currentDept!=\"\")) {\r\n fd = $scope.currentDept.code;\r\n }\r\n var fr = 'All';\r\n if (($scope.currentRole!=undefined) && ($scope.currentRole!=\"\")) {\r\n fr = $scope.currentRole.authority;\r\n }\r\n var sb = $scope.currentSearchBy.name;\r\n var sbString = ''\r\n if ($scope.criteriaData!=undefined && $scope.criteriaData!=\"\") {\r\n sbString = $scope.criteriaData;\r\n }\r\n staffService.exportToExcel($scope.q,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,fs,fd,fr,sb,sbString);\r\n }\r\n\r\n $scope.setPage = function(page){\r\n if (page < 1 || page > $scope.staffs.pager.totalPages) {\r\n return;\r\n }\r\n $scope.pageHelper=page;\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,page);\r\n }\r\n\r\n});","invo.controller('EditRolesStaffModalController',function ($scope, $uibModalInstance ,staffService, $stateParams) {\r\n\r\n $scope.staff = $stateParams.staff;\r\n $scope.staff.roles = $stateParams.staff.roles;\r\n $scope.roles = $stateParams.roles;\r\n\r\n $scope.availableRoles = $scope.roles;\r\n for (var i=0; i<$scope.availableRoles.length; i++) {\r\n $scope.availableRoles[i].checked = false;\r\n for (var j=0;j<$scope.staff.roles.length;j++) {\r\n if ($scope.availableRoles[i].id==$scope.staff.roles[j].role.id) {\r\n $scope.availableRoles[i].checked = true;\r\n }\r\n }\r\n }\r\n\r\n $scope.checked = function(){\r\n $scope.toggle=!$scope.toggle;\r\n }\r\n $scope.countChecked = function(){\r\n var count=0;\r\n angular.forEach($scope.availableRoles, function(value){\r\n if(value.checked) count++;\r\n });\r\n if(count>0) return false;\r\n else return true;\r\n\r\n }\r\n\r\n $scope.rolesId = [];\r\n var getAllRolesSelected = function() {\r\n for (var i=0; i<$scope.availableRoles.length; i++) {\r\n if ($scope.availableRoles[i].checked == true) {\r\n $scope.rolesId.push($scope.availableRoles[i].id);\r\n }\r\n }\r\n }\r\n\r\n\r\n $scope.ok = function () {\r\n getAllRolesSelected();\r\n staffService.editRoles($scope.staff.staffId, $scope.rolesId).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n","invo.controller('RemoveStaffModalController',function ($scope, $uibModalInstance ,staffService, $stateParams,staffId) {\r\n\r\n $scope.ok = function () {\r\n staffService.removeStaff(staffId).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.controller('StudentListController',function($scope,$uibModal,studentService,$rootScope,$stateParams,auth,blockUI){\r\n $scope.q=$stateParams.q;\r\n\r\n $scope.filterByData;\r\n $scope.orderData='fullname';\r\n $scope.sortData='asc';\r\n\r\n $scope.statusCB=undefined;\r\n\r\n var myBlock = blockUI.instances.get('studentBlock');\r\n $scope.block = function(){\r\n myBlock.start();\r\n }\r\n $scope.block();\r\n\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n\r\n $scope.list = function(q,offset,sortBy,filterBy,page){\r\n page = page ? page : 1;\r\n var numberPerPage = 20;\r\n if (page == 1) {\r\n offset = 0;\r\n } else {\r\n offset = (page-1)*numberPerPage;\r\n }\r\n studentService.list(q,offset,sortBy,filterBy,numberPerPage).then(function (response) {\r\n saveListData(offset,response,page,numberPerPage);\r\n }).finally(function(){myBlock.stop();});\r\n }\r\n var data={};\r\n data.list=[];\r\n data.total=0;\r\n data.pager={};\r\n var saveListData = function(offset,response,page,numberPerPage){\r\n data.list.splice(0,1000);\r\n data.list = data.list.concat(response.data.data.studentList);\r\n data.total = response.data.data.total;\r\n //for paging\r\n data.pager = studentService.getPager(response.data.data.total, page, numberPerPage);//(totalList,pagenumber,numberperpage)\r\n }\r\n if ($scope.q=='null') $scope.q=\"\";\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n $scope.students=data;\r\n\r\n $scope.enabledisableList = [\r\n {id: 1, name: 'Enable'},\r\n {id: 0, name: 'Disable'}\r\n ]\r\n $scope.currentEd;\r\n $scope.itemselectedEd = function (item) {\r\n $scope.currentEd = item;\r\n $scope.edFilterClass='active';\r\n if (item.id==1) {\r\n $scope.statusCB = true;\r\n } else if (item.id==0) {\r\n $scope.statusCB = false;\r\n }\r\n $scope.buildQuery();\r\n $scope.schoolList();\r\n $scope.clearSchoolFilter();\r\n }\r\n $scope.getClassEd = function (item) {\r\n if ($scope.currentEd == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearEdFilter=function(){\r\n $scope.currentEd=undefined;\r\n $scope.edFilterClass='';\r\n $scope.statusCB=undefined;\r\n $scope.buildQuery();\r\n $scope.schoolList();\r\n $scope.clearSchoolFilter();\r\n }\r\n\r\n var dataSchool={};\r\n dataSchool.list=[];\r\n $scope.schoolList = function(){\r\n studentService.schoolList($scope.statusCB).then(function (response) {\r\n dataSchool.list.splice(0,1000);\r\n dataSchool.list = dataSchool.list.concat(response.data.data.schoolList);\r\n });\r\n }\r\n $scope.schoolList();\r\n $scope.schools=dataSchool;\r\n\r\n $scope.currentSchool;\r\n $scope.itemselectedSchool = function (item) {\r\n $scope.currentSchool = item;\r\n $scope.schoolFilterClass='active';\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSchool = function (item) {\r\n if ($scope.currentSchool == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearSchoolFilter=function(){\r\n $scope.currentSchool=undefined;\r\n $scope.schoolFilterClass='';\r\n $scope.buildQuery();\r\n }\r\n\r\n $scope.sortByList = [\r\n {id: 'fullname', name: 'Student Name'},\r\n {id: 'email', name: 'Email'},\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'programme.name', name: 'Programme'}\r\n ]\r\n\r\n $scope.currentSortBy = $scope.sortByList[0];\r\n $scope.itemselectedSortBy = function (item) {\r\n $scope.currentSortBy = item;\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSortBy = function (item) {\r\n if ($scope.currentSortBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.searchByList = [\r\n {id: 'all', name: 'All'},\r\n {id: 'fullname', name: 'Student Name'},\r\n {id: 'email', name: 'Email'},\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'programme.name', name: 'Programme'}\r\n ]\r\n\r\n $scope.currentSearchBy = $scope.searchByList[0];\r\n $scope.itemselectedSearchBy = function (item) {\r\n $scope.currentSearchBy = item;\r\n }\r\n $scope.getClassSearchBy = function (item) {\r\n if ($scope.currentSearchBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.buildQuery = function () {\r\n\r\n var filterBy = \"\";\r\n if (($scope.currentSchool!=undefined) && ($scope.currentSchool!=\"\")) {\r\n filterBy = filterBy.concat(\"school.code,eq,\"+$scope.currentSchool.code+\",\");\r\n }\r\n\r\n if ($scope.statusCB!=undefined) {\r\n if ($scope.statusCB == true) {\r\n filterBy = filterBy.concat(\"isEnabled!b,eq,true\");\r\n } else if ($scope.statusCB == false) {\r\n filterBy = filterBy.concat(\"isEnabled!b,eq,false\");\r\n }\r\n }\r\n\r\n $scope.filterByData = filterBy;\r\n\r\n if (($scope.currentSortBy!=undefined) && ($scope.currentSortBy!=\"\")) {\r\n $scope.orderData = $scope.currentSortBy.id;\r\n }\r\n\r\n var sortBy = $scope.orderData +\",\"+ $scope.sortData;\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,sortBy,filterBy);\r\n }\r\n\r\n $scope.buildCriteria=function(){\r\n $scope.q=\"\";\r\n if ($scope.currentSearchBy==undefined || $scope.currentSearchBy==\"\") $scope.currentSearchBy=$scope.searchByList[0];\r\n if ($scope.criteria==undefined || $scope.criteria==\"\") $scope.criteria=\"\";\r\n if ($scope.currentSearchBy==$scope.searchByList[0]){\r\n $scope.searchByList.forEach(function(searchBy){\r\n if (searchBy.name!=\"All\"){\r\n if ($scope.q!=\"\") $scope.q=$scope.q+\",\";\r\n $scope.q = $scope.q.concat(searchBy.id +\",ilike,\"+\"%\"+$scope.criteria+\"%\");\r\n }\r\n });\r\n }\r\n else{\r\n $scope.q = $scope.currentSearchBy.id +\",ilike,\"+\"%\"+$scope.criteria+\"%\";\r\n }\r\n }\r\n /*$scope.$watch(\"criteria\", _.debounce(function (newVal,oldVal) {\r\n $scope.$apply(function(){\r\n if (newVal!=oldVal && oldVal!=undefined){\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n }\r\n })\r\n }, 500));*/\r\n $scope.handleCriteriaChange = _.debounce(function () {\r\n $scope.$apply(function(){\r\n if ($scope.criteria != undefined){\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n }\r\n })\r\n }, 500)\r\n\r\n $scope.$watch(\"currentSearchBy\", function(newVal,oldVal) {\r\n if (newVal!=oldVal && oldVal!=undefined ){\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n }\r\n });\r\n\r\n $scope.disable=function(student){\r\n studentService.disable(student.matriculationNo).then(function(response){\r\n student.isEnabled = response.data.data.student.isEnabled;\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n });\r\n }\r\n\r\n $scope.enable=function(student){\r\n studentService.enable(student.matriculationNo).then(function(response){\r\n student.isEnabled = response.data.data.student.isEnabled;\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n });\r\n }\r\n\r\n $scope.exportToExcel = function() {\r\n var fs = 'All';\r\n if (($scope.currentEd!=undefined) && ($scope.currentEd!=\"\")) {\r\n fs = $scope.currentEd.id;\r\n }\r\n var fd = 'All';\r\n if (($scope.currentSchool!=undefined) && ($scope.currentSchool!=\"\")) {\r\n fd = $scope.currentSchool.code;\r\n }\r\n var sb = $scope.currentSearchBy.name;\r\n var sbString = ''\r\n if ($scope.criteria!=undefined && $scope.criteria!=\"\") {\r\n sbString = $scope.criteria;\r\n }\r\n studentService.exportToExcel($scope.q,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,fs,fd,sb,sbString);\r\n }\r\n\r\n $scope.setPage = function(page){\r\n if (page < 1 || page > $scope.students.pager.totalPages) {\r\n return;\r\n }\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,page);\r\n }\r\n\r\n});","invo.controller('DeleteThesisDocumentModalController',function ($scope, $uibModalInstance ,thesisInfoDocumentsService, $stateParams,$window) {\r\n\r\n $scope.documentId = $stateParams.documentId;\r\n\r\n $scope.ok = function () {\r\n thesisInfoDocumentsService.deleteThesisDocument($scope.documentId).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n $scope.okConfirm = function () {\r\n $uibModalInstance.close('ok');\r\n };\r\n\r\n});\r\n","/**\r\n * Created by CC on 2/3/2016.\r\n */\r\ninvo.controller('ThesisExaminationListController',function($http,$scope,$rootScope,$uibModal,$stateParams,examinationService,$sce){\r\n\r\n $scope.examReqData;\r\n $scope.currentList = [];\r\n $scope.oldList = [];\r\n\r\n $scope.examReqData = [];\r\n\r\n $scope.id = $stateParams.id;\r\n\r\n //examinationService.examinationList($stateParams.id);\r\n\r\n $scope.rowShow = function(status, current){\r\n if (status==16 || status==17){\r\n if (current == undefined)\r\n return false;\r\n else return true;\r\n }\r\n else return true;\r\n }\r\n\r\n $scope.sendExaminationRequest = function(data) {\r\n\r\n $scope.examiner = data;\r\n var sendExamReqModal = $uibModal.open({\r\n templateUrl: './app/thesis/examination/send-exam-req/send-exam-req.html?ver='+$scope.appVersion,\r\n controller: 'SendExaminationRequestController',\r\n resolve:{\r\n matriculationNo:function(){return $scope.dataThesis.thesis.matriculationNo},\r\n thesisId:function(){return $scope.id},\r\n staffId:function(){return $scope.examiner.staffId},\r\n email:function(){return $scope.examiner.email},\r\n examinerAlias:function(){return $scope.examiner.examinerAlias}\r\n }\r\n });\r\n sendExamReqModal.result.then(function (data) {\r\n $scope.$emit(\"reload-info\");\r\n $scope.examinationRequestList($scope.id)\r\n }, function () {\r\n\r\n });\r\n }\r\n //$scope.$on(\"reload\",function(ev){\r\n // $scope.examinationRequestList($scope.id)\r\n //})\r\n $scope.$on(\"reload-examination\",function(){\r\n $scope.examinationRequestList($scope.id)\r\n });\r\n $scope.updateNotes = function(data){\r\n if(data.notes!=null){\r\n examinationService.updateNotes(data.id, data.notes)\r\n }\r\n }\r\n\r\n $scope.cancelExam = function (examId) {\r\n var cancelExamModal = $uibModal.open({\r\n templateUrl: './app/examination/modal/cancel-exam.html?ver='+$scope.appVersion,\r\n controller: 'CancelExamModalController',\r\n resolve: {\r\n examId:function () {return examId}\r\n }\r\n });\r\n cancelExamModal.result.then(function (data) {\r\n $scope.$emit(\"reload-info\");\r\n $scope.examinationRequestList($scope.id)\r\n }, function () {\r\n\r\n });\r\n }\r\n\r\n $scope.borderColor = function(data){\r\n if (data.end!=undefined && data.end!=null && data.end==1 && (data.processName==undefined || data.processName==null))\r\n {\r\n return 'Current'\r\n }\r\n else if(data.end!=undefined && data.end!=null && data.processName!=undefined && data.processName!=null)\r\n {\r\n return 'Not Current'\r\n }\r\n else return 'Blank'\r\n }\r\n\r\n var examReqDataTemp;\r\n $scope.examinationRequestList = function(id){\r\n examinationService.examinationRequestList(id).then(function(response){\r\n examReqDataTemp = response.data.data.examinations;\r\n $scope.examReqData = [];\r\n _.each(examReqDataTemp, function(post){\r\n post.exam.fullnameCompleted = post.fullname\r\n $scope.examReqData.push(post.exam)\r\n })\r\n $scope.newList($scope.examReqData)\r\n })\r\n }\r\n\r\n //$scope.examinationRequestList($scope.id);\r\n\r\n $scope.newList = function(examinations){\r\n $scope.currentList = [];\r\n $scope.oldList = [];\r\n var currentTemp=[];\r\n var dataTemp=[];\r\n var oldTemp = [];\r\n for (var i=0;i<$scope.examiners.length;i++)\r\n {\r\n currentTemp.push($scope.examiners[i]);\r\n }\r\n for (var i=0;i-1){\r\n var list = currentTemp[i].email.split(\";\");\r\n temp = list[0].toLowerCase();\r\n }\r\n if (dataTemp[j].examiner) examinerId = dataTemp[j].examiner.email.toLowerCase();\r\n if (dataTemp[j].staff) {examinerId = dataTemp[j].staff.staffId; staf = dataTemp[j].staff}\r\n //if (currentTemp[i].staffId) currentTemp[i].staffId = currentTemp[i].staffId.toLowerCase()\r\n if (currentTemp[i].email) currentTemp[i].email = currentTemp[i].email.toLowerCase()\r\n if (currentTemp[i].staffId == examinerId || currentTemp[i].email == examinerId || temp == examinerId) {\r\n currentTemp[i].acknowledgedDate = dataTemp[j].acknowledgedDate;\r\n currentTemp[i].requestedDate = dataTemp[j].requestedDate;\r\n currentTemp[i].cancelledDate = dataTemp[j].cancelledDate;\r\n currentTemp[i].completedDate = dataTemp[j].completedDate;\r\n currentTemp[i].completedBy = dataTemp[j].completedBy;\r\n currentTemp[i].fullnameCompleted = dataTemp[j].fullnameCompleted;\r\n currentTemp[i].dueDate = dataTemp[j].dueDate;\r\n currentTemp[i].status = dataTemp[j].status;\r\n currentTemp[i].notes = dataTemp[j].notes;\r\n currentTemp[i].account = dataTemp[j].account;\r\n currentTemp[i].id = dataTemp[j].id;\r\n currentTemp[i].recommendation = dataTemp[j].recommendation;\r\n if (staf!=undefined && staf!=null){currentTemp[i].shortTitleDesc = dataTemp[j].staff.shortTitleDesc;}\r\n flag = true;\r\n break;\r\n }\r\n }\r\n if (flag == false) {\r\n currentTemp[i].submit = 1;\r\n }\r\n if (j == dataTemp.length - 1) {\r\n currentTemp[i].end = 1;\r\n }\r\n if (i == 0) {\r\n currentTemp[i].first = 1;\r\n }\r\n\r\n $scope.currentList.push(currentTemp[i]);\r\n }\r\n\r\n for (var i=0;i' + 'Requested on ' + input3 + '' + '';\r\n }\r\n else if((input1==\"\" || input1==null) && (input4==null || input4==\"\"))\r\n {\r\n content = ''+ '' + 'Acknowledged on ' + input2 + '
'+ '
' + '
' + ''+ '' + 'Requested on ' + input3 + '' + '';\r\n }\r\n else if((input1==\"\" || input1==null) && (input2==null || input2==\"\") && (input4!=null || input4!=\"\"))\r\n {\r\n content = ''+ '' + 'Cancelled on ' + input1 + input4 + '
' + '
'+ '
' + '' + ''+ 'Requested on ' + input3 + '' + '';\r\n }\r\n else if ((input1!=\"\" || input1!=null) && (input2==null || input2==\"\") && (input4==null || input4==\"\"))\r\n {\r\n content = ''+ '' + 'Completed on ' + input1 + input4 + '
' + '
'+ '
' + '' + ''+ 'Requested on ' + input3 + '' + '';\r\n }\r\n else if ((input1!=\"\" || input1!=null) && (input4==null || input4==\"\"))\r\n {\r\n content = '' + '' + 'Completed on ' + input1 + input4 + '
' + '
'+ '
' + '' + '' + 'Acknowledged on ' + input2 + '
' + '
' + '
' + '' + '' + 'Requested on ' + input3 + '' + '';\r\n }\r\n else\r\n {\r\n content = '' + '' + 'Cancelled on ' + input1 + input4 + '
' + '
'+ '
' + '' + '' + 'Acknowledged on ' + input2 + '
' + '
' + '
' + '' + '' + 'Requested on ' + input3 + '' + '';\r\n\r\n }\r\n return trusted[content] || (trusted[content] = $sce.trustAsHtml(content));\r\n }\r\n})","invo.controller('ApproveThesisModalController',function ($scope, $uibModalInstance ,$uibModal,thesisInfoService, $stateParams, actionName) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n\r\n $scope.dataThesis = $stateParams.dataThesis;\r\n\r\n $scope.dataThesis.approveMessage='';\r\n\r\n $scope.actionName=actionName;\r\n\r\n $scope.showSuccessSubmission=false;\r\n $scope.showApproverConfirmation=false;\r\n $scope.hideApproverModal=false;\r\n $scope.successMessage='Successfully submitted.';\r\n\r\n $scope.ok = function () {\r\n if ($scope.checkAssignedExaminer($scope.dataThesis.thesis) && !$scope.showApproverConfirmation && $scope.actionName=='Approve'){\r\n $scope.showApproverConfirmation=true;\r\n }\r\n else{\r\n thesisInfoService.approveThesis($scope.thesis.matriculationNo,$scope.dataThesis.approveMessage,$scope.isUpdateTuitionFee).then(function(data){\r\n if ($scope.actionName==\"Endorse\" || $scope.actionName==\"Approve\"){\r\n $scope.showApproverConfirmation=false;\r\n $scope.showSuccessSubmission=true;\r\n }\r\n else\r\n {\r\n $uibModalInstance.close(false);\r\n }\r\n\r\n\r\n });\r\n }\r\n };\r\n\r\n $scope.updateTuitionFees = function(thesis){\r\n $stateParams.thesis = thesis;\r\n $scope.hideApproverModal=true;\r\n var updateLiabilityStatusModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/update-liability-status.html?ver='+$scope.appVersion,\r\n controller: 'UpdateLiabilityStatusModalController',\r\n\r\n });\r\n updateLiabilityStatusModal.result.then(function (data) {\r\n console.log('before');\r\n console.log($scope.thesis);\r\n console.log('data');\r\n console.log(data)\r\n $scope.hideApproverModal=false;\r\n $scope.thesis.tuitionFeesStatus = data.tuitionFeesStatus;\r\n $scope.thesis.tuitionFeesEmailSentDate = data.tuitionFeesEmailSentDate;\r\n $scope.thesis.tuitionFeesChargeDate = data.tuitionFeesChargeDate;\r\n $scope.thesis.tuitionFeesSemester = data.tuitionFeesSemester;\r\n $scope.thesis.tuitionFeesYear = data.tuitionFeesYear;\r\n $scope.thesis.otherLiability = data.otherLiability;\r\n console.log('after');\r\n console.log($scope.thesis);\r\n }, function () {\r\n $scope.hideApproverModal=false;\r\n });\r\n }\r\n\r\n $scope.close = function () {\r\n $uibModalInstance.close(true);\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n $scope.setActionName=function(){\r\n if ($scope.thesis.workflow.status.label.indexOf('Endorse')>-1){\r\n $scope.actionName= \"Endorse\";\r\n }\r\n if ($scope.thesis.workflow.status.label.indexOf('Review')>-1){\r\n $scope.actionName= \"Confirm\";\r\n }\r\n if ($scope.thesis.workflow.status.label.indexOf('Approval')>-1){\r\n $scope.actionName= \"Approve\";\r\n }\r\n\r\n if ($scope.thesis.workflow.status.code==\"TFR\"){\r\n $scope.objectName=\"Form(s)\"\r\n }\r\n else if ($scope.thesis.workflow.processName.indexOf('Amendment')>-1){\r\n $scope.objectName= \"Amended Thesis\";\r\n }\r\n else{\r\n $scope.objectName= \"Thesis\";\r\n }\r\n }\r\n\r\n $scope.setActionName();\r\n $scope.flag = false;\r\n\r\n $scope.countChecked = function(){\r\n $scope.count = 0;\r\n if($scope.flag === true) $scope.count=1;\r\n angular.forEach($scope.dataThesis.cbxForPopup, function(value){\r\n if(value.isselected) $scope.count++;\r\n });\r\n if($scope.count==$scope.dataThesis.cbxForPopup.length || $scope.dataThesis.cbxForPopup.length==0) return false;\r\n\r\n else return true;\r\n\r\n }\r\n $scope.checkAdmission = function(data){\r\n if(($scope.dataThesis.thesis.student.admissionYear<2012 || $scope.dataThesis.thesis.student.programme.type=='MAS') && data.id==10 ){\r\n $scope.flag=true;\r\n return false;\r\n }\r\n else return true;\r\n }\r\n\r\n $scope.checkAssignedExaminer = function(thesis){\r\n var flag = false;\r\n for ( i = 1;i<=8;i++){\r\n if(eval(\"thesis.examiner\"+i+\"Name\")!=null){\r\n flag = true;\r\n }\r\n }\r\n if(flag){\r\n return false;\r\n }\r\n else return true;\r\n }\r\n\r\n if ($scope.thesis.workflow.status.label.indexOf('Approval')>-1){\r\n thesisInfoService.getLastSchoolComment($scope.thesis.matriculationNo).then(function(data){\r\n $scope.lastSchoolComment = data.data.data.comment.message;\r\n });\r\n }\r\n $scope.isUpdateTuitionFee=false;\r\n $scope.updateTuitionFeeFlag = function(){\r\n $scope.isUpdateTuitionFee = !$scope.isUpdateTuitionFee;\r\n console.log('checkbox clicked, current value '+ $scope.isUpdateTuitionFee);\r\n }\r\n $scope.tuitionFeesStatus = null;\r\n\r\n $scope.getLiabilityStatus = function () {\r\n thesisInfoService.getFinancialLiability($scope.thesis.matriculationNo).then(function(data){\r\n $scope.tuitionFeesStatus = data.data.data.tuitionFeesStatus;\r\n $scope.endorsedDate = data.data.data.endorsedDate;\r\n $scope.currentSemesterStartDate = data.data.data.currentSemesterStartDate;\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n if ($scope.thesis.workflow.status.label.indexOf('Review')>-1){\r\n $scope.getLiabilityStatus();\r\n }\r\n\r\n $scope.isPreviousChecklistVisible=false;\r\n $scope.showHidePreviousChecklist = function(){\r\n $scope.isPreviousChecklistVisible = !$scope.isPreviousChecklistVisible;\r\n }\r\n $scope.isStudentConfirmVisible=false;\r\n $scope.showHideStudentConfirm = function(){\r\n $scope.isStudentConfirmVisible = !$scope.isStudentConfirmVisible;\r\n }\r\n $scope.isSupervisorConfirmVisible=false;\r\n $scope.showHideSupervisorConfirm = function(){\r\n $scope.isSupervisorConfirmVisible = !$scope.isSupervisorConfirmVisible;\r\n }\r\n $scope.isSupervisorAcknowledgeVisible=false;\r\n $scope.showHideSupervisorAcknowledge = function(){\r\n $scope.isSupervisorAcknowledgeVisible = !$scope.isSupervisorAcknowledgeVisible;\r\n }\r\n $scope.isSchoolConfirmVisible=false;\r\n $scope.showHideSchoolConfirm = function(){\r\n $scope.isSchoolConfirmVisible = !$scope.isSchoolConfirmVisible;\r\n }\r\n $scope.isDeanConfirmVisible=false;\r\n $scope.showHideDeanConfirm = function(){\r\n $scope.isDeanConfirmVisible = !$scope.isDeanConfirmVisible;\r\n }\r\n $scope.isDeanAcknowledgeVisible=false;\r\n $scope.showHideDeanAcknowledge= function(){\r\n $scope.isDeanAcknowledgeVisible = !$scope.isDeanAcknowledgeVisible;\r\n }\r\n\r\n});\r\n","invo.controller('CheckThesisModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,dean) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n $scope.title = 'Check Thesis';\r\n $scope.dean = dean;\r\n\r\n $scope.dataThesis = $stateParams.dataThesis;\r\n\r\n $scope.dataThesis.approveMessage='';\r\n $scope.hideDeanSelection=true;\r\n $scope.hideCommentEntry=false;\r\n\r\n $scope.ok = function () {\r\n thesisInfoService.completeChecking($scope.thesis.matriculationNo,$scope.dataThesis.approveMessage,$scope.dataThesis.selectedDean).then(function(data){\r\n $uibModalInstance.close('ok');\r\n });\r\n };\r\n\r\n $scope.next = function () {\r\n $scope.hideDeanSelection=false;\r\n $scope.hideCommentEntry=true;\r\n $scope.title = 'Re-assign Approver';\r\n };\r\n\r\n \r\n $scope.countChecked = function(){\r\n $scope.count = 0;\r\n if($scope.flag === true) $scope.count=1;\r\n angular.forEach($scope.dataThesis.cbxForPopup, function(value){\r\n if(value.isselected) $scope.count++;\r\n });\r\n if($scope.count==$scope.dataThesis.cbxForPopup.length || $scope.dataThesis.cbxForPopup.length==0) return false;\r\n\r\n else return true;\r\n\r\n }\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n $scope.checkAdmission = function(data){\r\n if(($scope.dataThesis.thesis.student.admissionYear<2012 || $scope.dataThesis.thesis.student.programme.type=='MAS') && data.id==10 ){\r\n $scope.flag=true;\r\n return false;\r\n }\r\n else return true;\r\n }\r\n\r\n $scope.flag = false;\r\n \r\n $scope.isPreviousChecklistVisible=false;\r\n $scope.showHidePreviousChecklist = function(){\r\n $scope.isPreviousChecklistVisible = !$scope.isPreviousChecklistVisible;\r\n }\r\n\r\n thesisInfoService.listThesisDean($scope.thesis.matriculationNo).then(function(data){\r\n $scope.dataThesis.selectedDean=\"\";\r\n $scope.deanList = data.data.data.deanList;\r\n });\r\n\r\n $scope.isStudentConfirmVisible=false;\r\n $scope.showHideStudentConfirm = function(){\r\n $scope.isStudentConfirmVisible = !$scope.isStudentConfirmVisible;\r\n }\r\n $scope.isSupervisorConfirmVisible=false;\r\n $scope.showHideSupervisorConfirm = function(){\r\n $scope.isSupervisorConfirmVisible = !$scope.isSupervisorConfirmVisible;\r\n }\r\n $scope.isSupervisorAcknowledgeVisible=false;\r\n $scope.showHideSupervisorAcknowledge = function(){\r\n $scope.isSupervisorAcknowledgeVisible = !$scope.isSupervisorAcknowledgeVisible;\r\n }\r\n\r\n});\r\n","invo.controller('CompleteThesisModalController',function ($scope, $uibModalInstance ,thesisService, $stateParams,$window) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n $scope.recommendation;\r\n\r\n $scope.ok = function () {\r\n thesisService.sendExaminationRecommendation($scope.thesis.matriculationNo,$scope.recommendation).then(function(){\r\n $uibModalInstance.close('ok');\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n","invo.controller('FirstSubmitThesisModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,$window) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n\r\n $scope.dataThesis = $stateParams.dataThesis;\r\n\r\n $scope.newTitle = $scope.thesis.newProposedTitle;\r\n\r\n $scope.validate = false;\r\n\r\n $scope.ok = function () {\r\n var nt = ''\r\n if ($scope.newTitle!=null) {\r\n nt = $scope.newTitle;\r\n }\r\n thesisInfoService.updateProposedTitle($scope.thesis.matriculationNo,nt).then(function(data){\r\n $uibModalInstance.close(nt);\r\n });\r\n\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n $scope.checked = function(){\r\n $scope.toggle=!$scope.toggle;\r\n }\r\n $scope.countChecked = function(){\r\n var count=0;\r\n angular.forEach($scope.dataThesis.cbxForPopup, function(value){\r\n if(value.isselected) count++;\r\n });\r\n if(count==$scope.dataThesis.cbxForPopup.length) return false;\r\n else return true;\r\n\r\n }\r\n\r\n $scope.checkChar = function(data){\r\n $scope.validate = false;\r\n for(var i=0;i127){\r\n $scope.validate = true;\r\n }\r\n }\r\n }\r\n\r\n});\r\n","invo.controller('HoldThesisModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,$window) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n\r\n $scope.ok = function () {\r\n thesisInfoService.holdThesis($scope.thesis.matriculationNo).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n\r\n});\r\n","invo.controller('ProceedThesisModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,dean) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n $scope.title = 'Proceed Thesis';\r\n\r\n $scope.dataThesis = $stateParams.dataThesis;\r\n\r\n $scope.checkAssignedExaminer = function(thesis){\r\n var flag = false;\r\n for ( i = 1;i<=8;i++){\r\n if(eval(\"thesis.examiner\"+i+\"Name\")!=null){\r\n flag = true;\r\n }\r\n }\r\n if(flag){\r\n return false;\r\n }\r\n else return true;\r\n }\r\n\r\n $scope.ok = function () {\r\n thesisInfoService.completeExaminerAppointment($scope.thesis.matriculationNo).then(function(data){\r\n $uibModalInstance.close('ok');\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n\r\n});\r\n","invo.controller('RejectThesisConfirmModalController',function ($scope,$uibModalInstance) {\r\n\r\n $scope.showSuccessRejection=false;\r\n $scope.successMessage='Successfully submitted.';\r\n $scope.ok = function () {\r\n $scope.showSuccessRejection=true;\r\n };\r\n\r\n $scope.close=function(){\r\n $uibModalInstance.close(true);\r\n }\r\n\r\n});\r\n","invo.controller('RejectThesisModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,$window) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n if ($scope.thesis.workflow.status.code=='TTPE') {\r\n $scope.showSupervisorRejectAlert = true;\r\n }\r\n else{\r\n $scope.showSupervisorRejectAlert = false;\r\n }\r\n $scope.showSuccessRejection=false;\r\n $scope.successMessage='Successfully submitted.';\r\n\r\n $scope.ok = function () {\r\n thesisInfoService.rejectThesis($scope.thesis.matriculationNo, $scope.rejectMessage).then(function(data){\r\n if ( $scope.thesis.workflow.status.code=='TTPA' || $scope.thesis.workflow.status.code=='TATPA'){\r\n $scope.showSuccessRejection=true;\r\n }\r\n else if($scope.thesis.workflow.status.code=='TATPE' || $scope.thesis.workflow.status.code=='TTPE'){\r\n $uibModalInstance.close(true);\r\n }\r\n else{\r\n $uibModalInstance.close(false);\r\n }\r\n\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.supervisorCloseAlert=function(){\r\n $scope.showSupervisorRejectAlert=false;\r\n }\r\n $scope.close=function(){\r\n $uibModalInstance.close(true);\r\n }\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n\r\n});\r\n","invo.controller('ReleaseThesisModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,$window) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n\r\n $scope.ok = function () {\r\n thesisInfoService.releaseHold($scope.thesis.matriculationNo).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n\r\n});\r\n","invo.directive('rerouteStaff',function($rootScope,$compile){\r\n return{\r\n restrict:'EA',\r\n template: '',\r\n scope:{\r\n selectedStaff: '=ngModel',\r\n inputClass:'@inputClass',\r\n inputName:'@inputName',\r\n inputPlaceholder:'@placeholder'\r\n },\r\n link:function(scope,element,attrs){\r\n\r\n },\r\n controller: function($scope,$http,limitToFilter){\r\n $scope.staffList = function(q) {\r\n return $http.get($rootScope.serverUrl+\"StaffApp/listNonLecturer?q=\"+encodeURIComponent(q)).then(function(response){\r\n return limitToFilter(response.data.data.staffs, 5);\r\n });\r\n }\r\n $scope.selectedStaff;\r\n }\r\n };\r\n});","invo.controller('RerouteThesisModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,currentUserFullName) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n $scope.currentUserFullName = currentUserFullName;\r\n $scope.staffData;\r\n\r\n $scope.ok = function () {\r\n thesisInfoService.rerouteThesis($scope.thesis.matriculationNo,$scope.staffData.staffId).then(function(data){\r\n $uibModalInstance.close('ok');\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n if ($scope.thesis.workflow.status.label.indexOf('Endorsement')>=0){\r\n $scope.role = 'Endorser';\r\n }\r\n else if ($scope.thesis.workflow.status.label.indexOf('Approval')>=0){\r\n $scope.role = 'Approver';\r\n }\r\n\r\n});\r\n","invo.controller('SelectDeanModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,dean) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n $scope.dean = dean;\r\n $scope.dataThesis = $stateParams.dataThesis;\r\n\r\n $scope.ok = function () {\r\n thesisInfoService.selectDean($scope.thesis.matriculationNo,$scope.dataThesis.selectedDean).then(function(data){\r\n $uibModalInstance.close(data.data.data.dean);\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n\r\n thesisInfoService.listThesisDean($scope.thesis.matriculationNo).then(function(data){\r\n $scope.deanList = data.data.data.deanList;\r\n });\r\n\r\n});\r\n","invo.directive('selectRerouteStaff',function($rootScope){\r\n return{\r\n restrict:'EA',\r\n template: '',\r\n scope:{\r\n selectedStaff: '=ngModel',\r\n matriculationNo:'@matriculationNo',\r\n inputClass:'@inputClass',\r\n inputName:'@inputName',\r\n inputPlaceholder:'@placeholder'\r\n },\r\n link:function(scope,element,attrs){\r\n\r\n },\r\n controller: function($scope,$http,limitToFilter){\r\n $scope.formatLabel = function(model) {\r\n return model.shortTitleDesc + \" \"+ model.fullname + \" - \"+model.dept.name;\r\n };\r\n\r\n $scope.staffList = function(q) {\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/listStaffToReroute?matriculationNo=\"+$scope.matriculationNo+\"&q=\"+encodeURIComponent(q)).then(function(response){\r\n return limitToFilter(response.data.data.staffs, 20);\r\n });\r\n }\r\n $scope.selectedStaff;\r\n }\r\n };\r\n});","invo.controller('SubmitAmdThesisModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,$window) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n\r\n $scope.dataThesis = $stateParams.dataThesis;\r\n\r\n $scope.newTitle = $scope.thesis.newProposedTitle;\r\n\r\n $scope.ok = function () {\r\n var nt = ''\r\n if ($scope.newTitle!=null) {\r\n nt = $scope.newTitle;\r\n }\r\n thesisInfoService.updateProposedTitle($scope.thesis.matriculationNo,nt).then(function(data){\r\n $uibModalInstance.close(nt);\r\n });\r\n\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n $scope.checked = function(){\r\n $scope.toggle = !$scope.toggle;\r\n }\r\n $scope.countChecked = function(){\r\n var count=0;\r\n angular.forEach($scope.dataThesis.cbxForPopup, function(value){\r\n if(value.isselected) count++;\r\n });\r\n if(count==$scope.dataThesis.cbxForPopup.length) return false;\r\n else return true;\r\n\r\n }\r\n\r\n $scope.checkChar = function(data){\r\n $scope.validate = false;\r\n for(var i=0;i127){\r\n $scope.validate = true;\r\n }\r\n }\r\n }\r\n\r\n});\r\n","invo.controller('SubmitExamThesisModalController',function ($scope, $uibModalInstance ,thesisInfoDocumentsService,thesisInfoService, $stateParams,$window, thesis, dataThesis) {\r\n\r\n $scope.thesis = thesis;\r\n $scope.docs = [];\r\n $scope.hasDocTobeSubmitted=true;\r\n\r\n\r\n $scope.getRecomType = function(matriculationNo){\r\n thesisInfoService.recomTypeForInfoPopup(matriculationNo).then(function(response){\r\n $scope.dataThesis.recomType = response.data.data.recomList;\r\n // thesisInfoService.getRecommendationList(matriculationNo).then(function(response){\r\n // $scope.recommendationList = response.data.data.recom;\r\n // var highestRecommendation;\r\n // if ($scope.recommendationList.length>0)\r\n // {\r\n // var recommendations = response.data.data.recom;\r\n // var sortedRecommendations = _.sortBy(recommendations, function(num){\r\n // return num.recommendation.rankOrder;\r\n // })\r\n // highestRecommendation = sortedRecommendations[sortedRecommendations.length-1].recommendation;\r\n // }\r\n // if (highestRecommendation!=undefined){\r\n // for (i=0;i<$scope.dataThesis.recomType.length;i++) {\r\n // var j = $scope.dataThesis.recomType.length-1-i;\r\n // if(highestRecommendation.rankOrder>=$scope.dataThesis.recomType[j].rankOrder){\r\n // $scope.recomTypeData = $scope.dataThesis.recomType[j];\r\n // break;\r\n // }\r\n // }\r\n // }\r\n //\r\n // $scope.recommendationList = _.sortBy($scope.recommendationList, function(num){\r\n // return num.alias\r\n // })\r\n // })\r\n });\r\n }\r\n\r\n $scope.checkIsValid=function(){\r\n var ids=[]\r\n angular.forEach($scope.docs, function(value, key) {\r\n if (value.selected){\r\n this.push(value.id);\r\n }\r\n },ids);\r\n if (ids.length<1){\r\n $scope.hasDocTobeSubmitted=false;\r\n }\r\n else{\r\n $scope.hasDocTobeSubmitted=true;\r\n }\r\n }\r\n\r\n\r\n if (thesis.workflow.status.code=='TUFP'){\r\n $scope.classificationList=[]\r\n var classification=\"\";\r\n thesisInfoDocumentsService.listThesisDocumentToBeSubmittedToSchool(thesis.matriculationNo).then(function(response){\r\n angular.forEach(response.data.data.docs, function(value, key) {\r\n if (classification != value.classification){\r\n classification = value.classification;\r\n $scope.classificationList.push(classification);\r\n }\r\n this.push(value);\r\n },$scope.docs);\r\n console.log($scope.classificationList);\r\n });\r\n\r\n $scope.dataThesis = dataThesis;\r\n $scope.getRecomType($scope.thesis.matriculationNo);\r\n }\r\n\r\n\r\n $scope.ok = function () {\r\n var hideDocIds=[];\r\n var unhideDocIds=[];\r\n angular.forEach($scope.docs, function(value, key) {\r\n if (!value.selected){\r\n this.push(value.id);\r\n }\r\n },hideDocIds);\r\n angular.forEach($scope.docs, function(value, key) {\r\n if (value.selected && value.isHidden){\r\n this.push(value.id);\r\n }\r\n },unhideDocIds);\r\n thesisInfoService.submitExam($scope.thesis.matriculationNo, $scope.recomTypeData.code,hideDocIds,unhideDocIds).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n\r\n});\r\n","invo.controller('SubmitOralModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams, $filter,$window) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n\r\n $scope.dataThesis = $stateParams.dataThesis;\r\n\r\n $scope.oral = {}\r\n $scope.oral.oralExamDate;\r\n\r\n $scope.isMoreThan = false;\r\n\r\n $scope.$watch(\"oral.oralExamDate\", function(newVal,oldVal) {\r\n if (newVal != oldVal) {\r\n var selectedDate = moment($scope.oral.oralExamDate, 'DD-MMM-YYYY');\r\n console.log(selectedDate)\r\n var currentDate = new Date();\r\n if (selectedDate > currentDate) {\r\n $scope.isMoreThan = true;\r\n } else if (selectedDate <= currentDate) {\r\n $scope.isMoreThan = false;\r\n }\r\n }\r\n });\r\n\r\n $scope.isPHD=function(){\r\n if ($scope.thesis.student.programme.type=='PHD'){\r\n return true\r\n }\r\n else {\r\n return false\r\n }\r\n }\r\n\r\n $scope.ok = function () {\r\n\r\n thesisInfoService.submitOralExam($scope.thesis.matriculationNo,moment($scope.oral.oralExamDate).format('DD-MM-YYYY')).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n});\r\n","invo.controller('SubmitTitleConfirmModalController',function ($scope,$uibModalInstance,thesis,thesisInfoService,type) {\r\n $scope.thesis = thesis;\r\n $scope.cancel = function () {\r\n console.log(type);\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n $scope.ok = function () {\r\n if (type=='Amendment'){\r\n thesisInfoService.submitAmd($scope.thesis.matriculationNo, thesis.newProposedTitle).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n });\r\n }\r\n else{\r\n thesisInfoService.firstSubmit($scope.thesis.matriculationNo, thesis.newProposedTitle).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n });\r\n }\r\n\r\n };\r\n\r\n});\r\n","invo.controller('TerminateThesisModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,$window) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n\r\n $scope.terminationMessage;\r\n\r\n $scope.ok = function () {\r\n thesisInfoService.terminateThesis($scope.thesis.matriculationNo, $scope.terminationMessage).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n\r\n});\r\n","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.controller('ThesisInfoController',function($scope,$uibModal,thesisInfoService,$rootScope,$stateParams,auth,$sce,$timeout,$state){\r\n\r\n $scope.session = auth.session;\r\n $scope.rejectionMessages=[];\r\n $scope.supervisors;\r\n $scope.examiners;\r\n $scope.oralPanels;\r\n $scope.hasRejectionMessages=false;\r\n $scope.isRequiredDocumentUploaded = false;\r\n $scope.isThesisDataLoaded=false;\r\n $scope.dean;\r\n\r\n\r\n function getThesisInfo(id){\r\n thesisInfoService.thesisInfo(id).then(function(response){\r\n saveData(response);\r\n $scope.supervisors=response.data.data.supervisors;\r\n $scope.examiners=response.data.data.examiners;\r\n $scope.oralPanels=response.data.data.oralPanels;\r\n $scope.hasRejectionMessages = response.data.data.hasRejectionMessage;\r\n if (auth.session.isStudent()){\r\n $scope.degreeAuditUrl='https://sso.wis.ntu.edu.sg/webexe/owa/sso_redirect.asp?t=3&app=https://wis.ntu.edu.sg/webexe/owa/pge$cwk_acad_rec.main_pg';\r\n }\r\n else{\r\n $scope.degreeAuditUrl='https://wis.ntu.edu.sg/webexe/owa/pge$acad_rec.main_app?P1='+response.data.data.thesis.matriculationNo+'~~'+auth.session.user.username+'~~PGE$ACAD_REC~~PQWERTYFILE&p2=';\r\n }\r\n $scope.isThesisDataLoaded=true;\r\n });\r\n }\r\n var data={};\r\n data.thesis={};\r\n data.examStatus;\r\n data.fullnameFW;\r\n data.permissionList;\r\n data.cbxForPopup={};\r\n data.recomType={}\r\n data.rejectionMessage={}\r\n\r\n var saveData = function(response){\r\n data.thesis = response.data.data.thesis;\r\n data.examStatus = response.data.data.examStatus;\r\n data.fullnameFW = response.data.data.fullnameFW;\r\n data.currentUserFullName = response.data.data.currentUserFullName;\r\n data.permissionList = response.data.data.permissionList;\r\n data.isExamFeePaid = response.data.data.isExamFeePaid;\r\n data.isPaymentReceiptUploaded = response.data.data.isPaymentReceiptUploaded;\r\n if (data.thesis.workflow.status.label.indexOf('Endorse')>-1){\r\n data.thesis.actionName= \"Endorse\";\r\n }\r\n if (data.thesis.workflow.status.label.indexOf('Review')>-1){\r\n data.thesis.actionName= \"Confirm\";\r\n }\r\n if (data.thesis.workflow.status.label.indexOf('Approval')>-1){\r\n data.thesis.actionName= \"Approve\";\r\n }\r\n if (data.thesis.workflow.status.label.indexOf('Checking')>-1){\r\n data.thesis.actionName= \"Complete Checking\";\r\n }\r\n if (data.thesis.workflow.status.label.indexOf('Appointment')>-1){\r\n data.thesis.actionName= \"Proceed\";\r\n }\r\n if (data.thesis.currentDean && data.thesis.currentDean.staffId ){\r\n $scope.dean = data.thesis.currentDean;\r\n }\r\n else {\r\n $scope.dean = response.data.data.defaultDean;\r\n }\r\n }\r\n\r\n getThesisInfo($stateParams.id);\r\n\r\n $scope.dataThesis=data;\r\n\r\n\r\n $scope.canViewRejectionMessages=function(){\r\n if ($scope.dataThesis.permissionList.length>0){\r\n if ($scope.dataThesis.permissionList.indexOf('VIEW_REJECTION_MESSAGES') > -1){\r\n return $scope.hasRejectionMessages;\r\n }\r\n }\r\n }\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n\r\n $scope.isExamFeePaid=function(){\r\n $scope.examFeePaymentStatus='';\r\n if (data.thesis.workflow){\r\n var status = data.thesis.workflow.status.code;\r\n var admissionYear = Number(data.thesis.student.admissionYear);\r\n if (admissionYear<2017){\r\n if (data.isExamFeePaid) {\r\n $scope.examFeePaymentStatus= 'Yes';\r\n }\r\n else {\r\n if (data.isPaymentReceiptUploaded){\r\n $scope.examFeePaymentStatus= 'Yes (with receipt uploaded)'\r\n\r\n }\r\n else{\r\n $scope.examFeePaymentStatus= 'No'\r\n\r\n }\r\n }\r\n }\r\n else{\r\n $scope.examFeePaymentStatus= 'NA';\r\n }\r\n }\r\n else $scope.examFeePaymentStatus= 'NA';\r\n return $scope.examFeePaymentStatus;\r\n }\r\n $scope.isExceedCandidaturePeriod=function(){\r\n if (data.thesis.workflow){\r\n var status = data.thesis.workflow.status.code;\r\n\r\n var maxCandidature = data.thesis.student.maxCandidature;\r\n var extensionCandidature = data.thesis.student.extensionCandidature;\r\n var date1 = moment(maxCandidature)\r\n var date2 = moment(extensionCandidature);\r\n var today = moment();\r\n if (extensionCandidature != null){\r\n return today.diff(date2,'days')>0 && status=='BLANK';\r\n }\r\n else{\r\n return today.diff(date1,'days')>0 && status=='BLANK';\r\n }\r\n }\r\n }\r\n\r\n function checkboxForInfoPopup(status){\r\n data.cbxForPopup={};\r\n thesisInfoService.checkboxForInfoPopup(status).then(function(response){\r\n saveCheckboxForInfoPopup(response);\r\n\r\n });\r\n }\r\n\r\n function checkboxForInfoPopupApprove(status){\r\n data.cbxForPopup={};\r\n thesisInfoService.checkboxForInfoPopupApprove(status).then(function(response){\r\n saveCheckboxForInfoPopup(response);\r\n\r\n });\r\n }\r\n\r\n var saveCheckboxForInfoPopup = function(response){\r\n data.cbxForPopup = response.data.data.cbList;\r\n data.lastStudentCB = []\r\n data.lastSupervisorCB = []\r\n data.lastDeanCB = []\r\n data.lastSchoolCB = []\r\n angular.forEach(response.data.data.lastCB, function(value, key) {\r\n if (value.status.code=='TATPE' || value.status.code=='TTPE'){\r\n data.lastSupervisorCB.push(value);\r\n }\r\n if (value.status.code=='TATPA' || value.status.code=='TTPA'){\r\n data.lastDeanCB.push(value);\r\n }\r\n if (value.status.code=='TPAS' || value.status.code=='BLANK'){\r\n data.lastStudentCB.push(value);\r\n }\r\n if (value.status.code=='TAPC' || value.status.code=='TPC'){\r\n data.lastSchoolCB.push(value);\r\n }\r\n });\r\n }\r\n\r\n $scope.isStudent=function(){\r\n return auth.session.isStudent();\r\n }\r\n\r\n $scope.firstSubmit = function(thesis,isAllUploaded,isDocsAnnotated){\r\n $stateParams.thesis = thesis;\r\n\r\n var urlTemplate='';\r\n if ($scope.isStudent() && (!isAllUploaded || isDocsAnnotated)) {\r\n urlTemplate = './app/thesis/info/required-document-notuploaded.html?ver=' + $scope.appVersion;\r\n }\r\n else{\r\n urlTemplate = './app/thesis/info/first-submit.html?ver='+$scope.appVersion;\r\n }\r\n checkboxForInfoPopup(thesis.workflow.status.id);\r\n\r\n $stateParams.dataThesis = $scope.dataThesis;\r\n\r\n var firstSubmitModal = $uibModal.open({\r\n templateUrl: urlTemplate,\r\n controller: 'FirstSubmitThesisModalController'\r\n });\r\n\r\n firstSubmitModal.result.then(function (data) {\r\n thesis.newProposedTitle=data;\r\n var titleConfirmModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/submit-title-confirm.html?ver='+$scope.appVersion,\r\n controller: 'SubmitTitleConfirmModalController',\r\n resolve: {\r\n thesis: thesis,\r\n type: function () {\r\n return 'Submission'\r\n }\r\n }\r\n });\r\n\r\n titleConfirmModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }, function () {\r\n });\r\n }, function () {\r\n });\r\n\r\n\r\n\r\n\r\n }\r\n\r\n $scope.submitAmd = function(thesis,isAllUploaded,isDocsAnnotated){\r\n $stateParams.thesis = thesis;\r\n\r\n var urlTemplate='';\r\n if ($scope.isStudent() && (!isAllUploaded || isDocsAnnotated)) {\r\n urlTemplate = './app/thesis/info/required-document-notuploaded.html?ver='+$scope.appVersion;\r\n }\r\n else{\r\n urlTemplate = './app/thesis/info/submit-amd.html?ver='+$scope.appVersion;\r\n }\r\n checkboxForInfoPopup(thesis.workflow.status.id);\r\n\r\n $stateParams.dataThesis = $scope.dataThesis;\r\n\r\n\r\n var submitAmdModal = $uibModal.open({\r\n templateUrl: urlTemplate,\r\n controller: 'SubmitAmdThesisModalController'\r\n });\r\n\r\n submitAmdModal.result.then(function (data) {\r\n thesis.newProposedTitle=data;\r\n var titleConfirmModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/submit-title-confirm.html?ver='+$scope.appVersion,\r\n controller: 'SubmitTitleConfirmModalController',\r\n resolve: {\r\n thesis: thesis,\r\n type: function () {\r\n return 'Amendment'\r\n }\r\n }\r\n });\r\n\r\n titleConfirmModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }, function () {\r\n });\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.$on(\"reload-info\",function(ev){\r\n getThesisInfo($stateParams.id);\r\n //$scope.$broadcast(\"reload\");\r\n })\r\n\r\n function recomTypeForInfoPopup(matriculationNo){\r\n thesisInfoService.recomTypeForInfoPopup(matriculationNo).then(function(response){\r\n saveRecomTypeForInfoPopup(response);\r\n\r\n });\r\n }\r\n var saveRecomTypeForInfoPopup = function(response){\r\n data.recomType = response.data.data.recomList;\r\n }\r\n\r\n $scope.submitExam = function(thesis){\r\n\r\n recomTypeForInfoPopup(thesis.matriculationNo);\r\n\r\n var submitExamModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/submit-exam.html?ver='+$scope.appVersion,\r\n controller: 'SubmitExamThesisModalController',\r\n resolve: {\r\n thesis: thesis,\r\n dataThesis: $scope.dataThesis\r\n }\r\n });\r\n submitExamModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.approveThesis = function(thesis){\r\n $stateParams.thesis = thesis;\r\n $scope.dataThesis.cbxForPopup={};\r\n checkboxForInfoPopupApprove(thesis.workflow.status.id);\r\n\r\n $stateParams.dataThesis = $scope.dataThesis;\r\n\r\n var approveThesisModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/approve-thesis.html?ver='+$scope.appVersion,\r\n controller: 'ApproveThesisModalController',\r\n backdrop: 'static',\r\n keyboard: false,\r\n resolve: {\r\n actionName: function(){return $scope.dataThesis.thesis.actionName}\r\n }\r\n });\r\n approveThesisModal.result.then(function (backToList) {\r\n if (backToList){\r\n $state.transitionTo('app.thesis');\r\n }\r\n else{\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }\r\n }, function () {\r\n getThesisInfo($stateParams.id);\r\n });\r\n\r\n }\r\n\r\n $scope.checkThesis = function(thesis){\r\n $stateParams.thesis = thesis;\r\n $scope.dataThesis.cbxForPopup={};\r\n checkboxForInfoPopupApprove(thesis.workflow.status.id);\r\n\r\n $stateParams.dataThesis = $scope.dataThesis;\r\n\r\n var checkThesisModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/check-thesis.html?ver='+$scope.appVersion,\r\n controller: 'CheckThesisModalController',\r\n resolve: {\r\n dean : function(){return $scope.dean}\r\n }\r\n });\r\n checkThesisModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }, function () {\r\n });\r\n\r\n }\r\n\r\n $scope.proceedThesis = function(thesis){\r\n $stateParams.thesis = thesis;\r\n\r\n $stateParams.dataThesis = $scope.dataThesis;\r\n\r\n var proceedThesisModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/proceed-thesis.html?ver='+$scope.appVersion,\r\n controller: 'ProceedThesisModalController',\r\n resolve: {\r\n dean : function(){return $scope.dean}\r\n }\r\n });\r\n proceedThesisModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }, function () {\r\n });\r\n\r\n }\r\n\r\n $scope.selectDean = function(thesis){\r\n $stateParams.thesis = thesis;\r\n $stateParams.dataThesis = $scope.dataThesis;\r\n\r\n var selectDeanModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/select-dean.html?ver='+$scope.appVersion,\r\n controller: 'SelectDeanModalController',\r\n resolve: {\r\n dean : function(){return $scope.dean}\r\n }\r\n });\r\n selectDeanModal.result.then(function (data) {\r\n $scope.dean = data;\r\n }, function () {\r\n });\r\n\r\n }\r\n\r\n\r\n\r\n $scope.isSchool=function(){\r\n return auth.session.isSchoolAdmin() || auth.session.isSchoolStaff();\r\n }\r\n\r\n $scope.submitOral = function(thesis,isAllUploaded,isDocsAnnotated){\r\n $stateParams.thesis = thesis;\r\n var urlTemplate='';\r\n if ($scope.isSchool() && (!isAllUploaded || isDocsAnnotated) ) {\r\n urlTemplate = './app/thesis/info/required-document-notuploaded2.html?ver='+$scope.appVersion;\r\n }\r\n else{\r\n urlTemplate = './app/thesis/info/submit-oral.html?ver='+$scope.appVersion;\r\n }\r\n\r\n $stateParams.dataThesis = $scope.dataThesis;\r\n\r\n var submitOralModal = $uibModal.open({\r\n templateUrl: urlTemplate,\r\n controller: 'SubmitOralModalController',\r\n\r\n });\r\n submitOralModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.withdrawThesis = function(thesis){\r\n $stateParams.thesis = thesis;\r\n\r\n var withdrawThesisModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/withdraw-thesis.html?ver='+$scope.appVersion,\r\n controller: 'WithdrawThesisModalController',\r\n\r\n });\r\n withdrawThesisModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.updateTuitionFees = function(thesis){\r\n $stateParams.thesis = thesis;\r\n\r\n var updateLiabilityStatusModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/update-liability-status.html?ver='+$scope.appVersion,\r\n controller: 'UpdateLiabilityStatusModalController',\r\n\r\n });\r\n updateLiabilityStatusModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.rejectThesis = function(thesis){\r\n $stateParams.thesis = thesis;\r\n\r\n var rejectThesisModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/reject-thesis.html?ver='+$scope.appVersion,\r\n controller: 'RejectThesisModalController',\r\n backdrop: 'static',\r\n keyboard: false\r\n });\r\n rejectThesisModal.result.then(function (backToList) {\r\n if (thesis.workflow.status.code=='TTPE' || thesis.workflow.status.code=='TATPE') {\r\n $scope.rejectThesisConfirm();\r\n } else {\r\n if (backToList){\r\n $state.transitionTo('app.thesis');\r\n }\r\n else{\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }\r\n }\r\n }, function () {\r\n });\r\n\r\n }\r\n\r\n $scope.rejectThesisConfirm = function(){\r\n var rejectThesisConfirmModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/reject-thesis-confirm.html?ver='+$scope.appVersion,\r\n controller: 'RejectThesisConfirmModalController',\r\n backdrop: 'static',\r\n keyboard: false\r\n });\r\n rejectThesisConfirmModal.result.then(function (data) {\r\n $state.transitionTo('app.thesis');\r\n }, function () {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n });\r\n\r\n }\r\n\r\n $scope.completeThesis = function(thesis){\r\n $stateParams.thesis = thesis;\r\n\r\n var completeThesisModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/complete-thesis.html?ver='+$scope.appVersion,\r\n controller: 'CompleteThesisModalController',\r\n\r\n });\r\n completeThesisModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.viewRejection = function(thesis){\r\n $stateParams.thesis = thesis;\r\n\r\n $stateParams.dataThesis = $scope.dataThesis;\r\n\r\n var viewRejectionModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/view-rejection.html?ver='+$scope.appVersion,\r\n controller: 'ViewRejectionModalController',\r\n\r\n });\r\n viewRejectionModal.result.then(function (data) {\r\n }, function () {\r\n });\r\n\r\n }\r\n\r\n $scope.viewRecommendation = function(thesis){\r\n\r\n var viewRejectionModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/view-recommendation.html?ver='+$scope.appVersion,\r\n controller: 'ViewRecommendationModalController',\r\n resolve:{\r\n matriculationNo:function(){return thesis.matriculationNo}\r\n }\r\n\r\n });\r\n viewRejectionModal.result.then(function (data) {\r\n\r\n }, function () {\r\n });\r\n\r\n }\r\n\r\n $scope.viewSchoolComments=function(thesis) {\r\n\r\n var viewSchoolCommentModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/view-school-comment.html?ver=' + $scope.appVersion,\r\n controller: 'ViewSchoolCommentModalController',\r\n resolve: {\r\n matriculationNo: function () {\r\n return thesis.matriculationNo\r\n }\r\n }\r\n\r\n });\r\n viewSchoolCommentModal.result.then(function (data) {\r\n\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.holdThesis = function(thesis){\r\n $stateParams.thesis = thesis;\r\n\r\n var holdThesisModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/hold-thesis.html?ver='+$scope.appVersion,\r\n controller: 'HoldThesisModalController',\r\n\r\n });\r\n holdThesisModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.rerouteThesis = function(thesis){\r\n $stateParams.thesis = thesis;\r\n\r\n var rerouteThesisModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/reroute-thesis.html?ver='+$scope.appVersion,\r\n controller: 'RerouteThesisModalController',\r\n resolve: {\r\n currentUserFullName: function(){return $scope.dataThesis.currentUserFullName}\r\n }\r\n\r\n });\r\n rerouteThesisModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload\");\r\n }, function () {\r\n });\r\n }\r\n\r\n\r\n $scope.terminateThesis = function(thesis){\r\n $stateParams.thesis = thesis;\r\n\r\n var terminateThesisModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/terminate-thesis.html?ver='+$scope.appVersion,\r\n controller: 'TerminateThesisModalController',\r\n\r\n });\r\n terminateThesisModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }, function () {\r\n });\r\n\r\n }\r\n\r\n $scope.releaseThesis = function(thesis){\r\n $stateParams.thesis = thesis;\r\n\r\n var releaseThesisModal = $uibModal.open({\r\n templateUrl: './app/thesis/info/release-thesis.html?ver='+$scope.appVersion,\r\n controller: 'ReleaseThesisModalController',\r\n\r\n });\r\n releaseThesisModal.result.then(function (data) {\r\n getThesisInfo($stateParams.id);\r\n $scope.$broadcast(\"reload-document\");\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.updateThesisNotes = function(notes){\r\n if (notes!=null) {\r\n thesisInfoService.updateThesisNotes($stateParams.id, notes);\r\n }\r\n }\r\n\r\n var trusted ={};\r\n $scope.getExaminerPopover = function(examiner) {\r\n var university = \"\";\r\n if (examiner.university!=null)university = examiner.university;\r\n var content = ''+examiner.name+'
' + examiner.examinerAlias + '
' + examiner.email+'
' + university;\r\n return trusted[content] || (trusted[content] = $sce.trustAsHtml(content));\r\n }\r\n\r\n $scope.getOralPanelPopover = function(panelis) {\r\n console.log(panelis);\r\n var university = \"\";\r\n if (panelis.university!=null)university = panelis.university;\r\n var content = ''+panelis.name+'
' + panelis.alias + '
' + panelis.email+'
' + university;\r\n return trusted[content] || (trusted[content] = $sce.trustAsHtml(content));\r\n }\r\n\r\n $scope.getSupervisorPopover = function(supervisor) {\r\n var email = \"\";\r\n if (supervisor.email!=null)email = supervisor.email;\r\n var content = ''+supervisor.name+'
' + supervisor.type + '
' + email ;\r\n return trusted[content] || (trusted[content] = $sce.trustAsHtml(content));\r\n }\r\n\r\n $scope.getDeanPopover = function(dean) {\r\n var email = \"\";\r\n if (dean.email!=null)email = dean.email;\r\n var content = ''+dean.fullName+'
Approver
' + email ;\r\n return trusted[content] || (trusted[content] = $sce.trustAsHtml(content));\r\n }\r\n\r\n $scope.cancelProposedTitle=function(matriculationNo){\r\n thesisInfoService.cancelProposedTitle(matriculationNo).then(function(response){\r\n $scope.dataThesis.thesis.newProposedTitle=\"\";\r\n })\r\n }\r\n\r\n $scope.countExaminer=0;\r\n $scope.increaseCount = function(data){\r\n if (data!=null)\r\n $scope.countExaminer++;\r\n }\r\n\r\n $scope.reloadHistory=function(){\r\n $scope.$broadcast(\"reload-history\");\r\n }\r\n $scope.reloadDocHistory=function(){\r\n $scope.$broadcast(\"reload-doc-history\");\r\n }\r\n $scope.reloadExamination=function(){\r\n $scope.$broadcast(\"reload-examination\");\r\n }\r\n $scope.reloadDocument=function(){\r\n $scope.$broadcast(\"reload-document\");\r\n }\r\n\r\n $scope.exportToExcel = function() {\r\n thesisInfoService.exportToExcel($stateParams.id);\r\n }\r\n\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.factory('thesisInfoService',function($http,notify,$rootScope,requestTransformService){\r\n\r\n var service = {\r\n thesisInfo:thesisInfo,\r\n checkboxForInfoPopup:checkboxForInfoPopup,\r\n checkboxForInfoPopupApprove:checkboxForInfoPopupApprove,\r\n firstSubmit:firstSubmit,\r\n submitAmd:submitAmd,\r\n approveThesis:approveThesis,\r\n completeChecking:completeChecking,\r\n getRecommendationList:getRecommendationList,\r\n recomTypeForInfoPopup:recomTypeForInfoPopup,\r\n submitExam:submitExam,\r\n submitOralExam:submitOralExam,\r\n withdrawThesis:withdrawThesis,\r\n rejectThesis:rejectThesis,\r\n holdThesis:holdThesis,\r\n rerouteThesis:rerouteThesis,\r\n terminateThesis:terminateThesis,\r\n releaseHold:releaseHold,\r\n getFinancialLiability:getFinancialLiability,\r\n updateFinancialLiability:updateFinancialLiability,\r\n selectDean:selectDean,\r\n viewRejection:viewRejection,\r\n updateThesisNotes:updateThesisNotes,\r\n viewRecommendation:viewRecommendation,\r\n getSchoolComments:getSchoolComments,\r\n getLastSchoolComment:getLastSchoolComment,\r\n cancelProposedTitle:cancelProposedTitle,\r\n updateProposedTitle:updateProposedTitle,\r\n checkRequiredDocumentsIsUploaded:checkRequiredDocumentsIsUploaded,\r\n listProcessHistory:listProcessHistory,\r\n exportToExcel:exportToExcel,\r\n listThesisDean:listThesisDean,\r\n completeExaminerAppointment:completeExaminerAppointment\r\n };\r\n\r\n return service;\r\n\r\n ////////////\r\n\r\n\r\n function thesisInfo(id){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/getThesisInfo?id=\"+id).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function checkboxForInfoPopup(status){\r\n\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/getCheckboxForInfoPopup?status=\"+status).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function selectDean(matriculationNo, staffId){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/selectDean?matriculationNo=\"+matriculationNo+\"&staffId=\"+staffId)\r\n }\r\n\r\n function checkboxForInfoPopupApprove(status){\r\n\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/getCheckboxForInfoPopupApprove?status=\"+status).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function firstSubmit(id,newTitle){\r\n if (newTitle==null) newTitle=\"\"\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/submitNewThesis?id=\"+id+\"&newTitle=\"+encodeURIComponent(newTitle)).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function submitAmd(id,newTitle){\r\n if (newTitle==null) newTitle=\"\"\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/submitAmendedThesis?id=\"+id+\"&newTitle=\"+encodeURIComponent(newTitle)).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function approveThesis(id,message,isUpdateTuitionFee){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/approveThesis?id=\"+id+\"&approvalMessage=\"+encodeURIComponent(message)+\"&isUpdateTuitionFee=\"+isUpdateTuitionFee).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function completeChecking(id,message,dean){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/completeChecking?id=\"+id+\"&approvalMessage=\"+encodeURIComponent(message)+\"&selectedDean=\"+dean).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function completeExaminerAppointment(id){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/completeExaminerAppointment?id=\"+id).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function getRecommendationList(matriculationNo){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/getRecommendationList?matriculationNo=\"+matriculationNo).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function recomTypeForInfoPopup(matriculationNo){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/getRecommendationType?matriculationNo=\"+matriculationNo).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function submitExam(id,recomType,hideDocIds,unhideDocIds){\r\n var ids = hideDocIds.join(\",\");\r\n var ids2 = unhideDocIds.join(\",\");\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/submitExaminationRecommendationToSchool?id=\"+id+\"&hideDocIds=\"+ids+\"&unhideDocIds=\"+ids2+\"&recomType=\"+encodeURIComponent(recomType)).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function submitOralExam(id,oralExamDate){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/submitOralExamReport?id=\"+id+\"&oralExamReportDate=\"+oralExamDate).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function withdrawThesis(id){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/withdraw?id=\"+id).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function getFinancialLiability(id){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/getFinancialLiability?id=\"+id).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function updateFinancialLiability(id,liabilityStatus,otherLiability){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/updateFinancialLiability?id=\"+id+\"&liabilityStatus=\"+liabilityStatus+\"&otherLiability=\"+otherLiability).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function rejectThesis(id,rejectMessage){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/rejectThesis?id=\"+id+\"&rejectMessage=\"+rejectMessage).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function holdThesis(id){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/holdThesis?id=\"+id).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function rerouteThesis(id,username){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/reroute?id=\"+id+\"&username=\"+username).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function terminateThesis(id,terminationMessage){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/terminate?id=\"+id+\"&terminationMessage=\"+terminationMessage).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function releaseHold(id){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/releaseHold?id=\"+id).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function viewRejection(id){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/viewThesisRejectionMessage?id=\"+id).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function updateThesisNotes(id,notes){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/updateThesisNotes?id=\"+id+\"¬es=\"+encodeURIComponent(notes)).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function viewRecommendation(id) {\r\n return $http.get($rootScope.serverUrl + \"ThesisApp/viewThesisRecommendation?matriculationNo=\" + id).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n function getSchoolComments(id) {\r\n return $http.get($rootScope.serverUrl + \"ThesisApp/getSchoolComments?matriculationNo=\" + id).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n function getLastSchoolComment(id){\r\n return $http.get($rootScope.serverUrl + \"ThesisApp/getLastSchoolComment?matriculationNo=\" + id);\r\n }\r\n\r\n function cancelProposedTitle(id) {\r\n return $http.get($rootScope.serverUrl + \"ThesisApp/cancelProposedTitle?id=\" + id).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n function updateProposedTitle(id,newTitle) {\r\n return $http.get($rootScope.serverUrl + \"ThesisApp/updateProposedTitle?id=\" + id+\"&newTitle=\"+encodeURIComponent(newTitle)).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n function checkRequiredDocumentsIsUploaded(matriculationNo){\r\n return $http.get($rootScope.serverUrl+\"ThesisDocument/checkRequiredDocumentsIsUploaded?matriculationNo=\"+matriculationNo).then(function(response){\r\n return response;\r\n })\r\n }\r\n\r\n function listProcessHistory(matriculationNo,q,filterBy){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/listProcessHistory?q=\"+q+\"&filterBy=\"+filterBy+\"&matriculationNo=\"+matriculationNo);\r\n }\r\n\r\n function exportToExcel(id){\r\n /*return $http({method: 'GET', url: $rootScope.serverUrl +\"ThesisApp/exportThesisInfoToExcel?id=\"+id}).\r\n success(function(data, status, headers, config) {\r\n if (navigator.msSaveBlob) { //for IE\r\n var blob = b64toBlob(data.data.fileString, \"application/vnd.ms-excel\");\r\n navigator.msSaveBlob(blob, data.data.fileName + '.xlsx');\r\n function b64toBlob(b64Data, contentType, sliceSize) {\r\n contentType = contentType || '';\r\n sliceSize = sliceSize || 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n } else {\r\n var anchor = angular.element('
');\r\n anchor.css({display: 'none'}); // Make sure it's not visible\r\n angular.element(document.body).append(anchor); // Attach to\r\n anchor.attr({\r\n href: 'data:attachment/xlsx;base64,' + encodeURI(data.data.fileString),\r\n target: '_blank',\r\n download: data.data.fileName + '.xlsx'\r\n })[0].click();\r\n console.log(anchor);\r\n anchor.remove(); // Clean it up afterwards\r\n }\r\n }).\r\n error(function(data, status, headers, config) {\r\n // handle error\r\n });*/\r\n window.open($rootScope.serverUrl +\"ThesisApp/exportThesisInfoToExcel?id=\"+id ,\"_self\");\r\n }\r\n\r\n function listThesisDean(id){\r\n return $http.get($rootScope.serverUrl+\"ThesisApp/listThesisDean?id=\"+id)\r\n }\r\n});","invo.controller('UpdateLiabilityStatusModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,$window) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n $scope.tuitionFeesStatus = null;\r\n $scope.editTuitionFees = false;\r\n $scope.showConfirmation= false;\r\n $scope.lastTeachingWeek2Date = null;\r\n $scope.data= {\r\n financialLiabilityCheckResult:null,\r\n tuitionFeesStatus:2,\r\n currentSemesterStartDate:null,\r\n endorsedDate:null\r\n }\r\n\r\n $scope.getLiabilityStatus = function () {\r\n thesisInfoService.getFinancialLiability($scope.thesis.matriculationNo).then(function(response){\r\n $scope.data.financialLiabilityCheckResult=response.data.data.financialLiabilityCheckResult; \r\n $scope.lastTeachingWeek2Date = new Date($scope.data.financialLiabilityCheckResult.semesterChargeDate);\r\n $scope.lastTeachingWeek2Date.setDate($scope.lastTeachingWeek2Date.getDate()-1);\r\n $scope.data.tuitionFeesStatus = response.data.data.financialLiabilityCheckResult.liabilityStatus;\r\n $scope.data.currentSemesterStartDate = response.data.data.financialLiabilityCheckResult.semesterChargeDate;\r\n $scope.data.endorsedDate = response.data.data.financialLiabilityCheckResult.endorsedDate;\r\n \r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.getLiabilityStatus();\r\n\r\n $scope.edit = function () {\r\n $scope.editTuitionFees = true;\r\n };\r\n $scope.confirmEdit = function () {\r\n $scope.editTuitionFees = false;\r\n };\r\n\r\n $scope.showOtherLiability=false;\r\n\r\n $scope.$watch('data.financialLiabilityCheckResult.liabilityStatus', function(newValue) {\r\n if (newValue==3){\r\n $scope.showOtherLiability=true;\r\n }\r\n else{\r\n $scope.showOtherLiability=false;\r\n }\r\n });\r\n\r\n $scope.ok = function () {\r\n if (!$scope.showConfirmation){\r\n $scope.showConfirmation=true;\r\n }\r\n else{\r\n if ($scope.data.financialLiabilityCheckResult.liabilityStatus!=3){\r\n $scope.data.financialLiabilityCheckResult.otherLiability=\"\";\r\n }\r\n thesisInfoService.updateFinancialLiability($scope.thesis.matriculationNo,$scope.data.financialLiabilityCheckResult.liabilityStatus,$scope.data.financialLiabilityCheckResult.otherLiability).then(function(response){\r\n $uibModalInstance.close(response.data.data.thesis);\r\n },function(data){\r\n //if error here\r\n });\r\n }\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n\r\n});\r\n","invo.controller('ViewRecommendationModalController',function ($scope, $uibModalInstance ,thesisInfoService, matriculationNo,auth) {\r\n\r\n $scope.recommendations;\r\n\r\n thesisInfoService.viewRecommendation(matriculationNo).then(function(response){\r\n $scope.recommendations= response.data.data.recommendations;\r\n });\r\n\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n\r\n});\r\n","invo.controller('ViewRejectionModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,auth) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n $scope.messages;\r\n\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n\r\n thesisInfoService.viewRejection($scope.thesis.matriculationNo).then(function(response){\r\n $scope.messages= response.data.data.messages;\r\n });\r\n\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n","invo.controller('ViewSchoolCommentModalController',function ($scope, $uibModalInstance ,thesisInfoService, matriculationNo,auth) {\r\n\r\n $scope.comments;\r\n\r\n thesisInfoService.getSchoolComments(matriculationNo).then(function(response){\r\n $scope.comments= response.data.data.comments;\r\n });\r\n\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n\r\n});\r\n","invo.controller('WithdrawThesisModalController',function ($scope, $uibModalInstance ,thesisInfoService, $stateParams,$window) {\r\n\r\n $scope.thesis = $stateParams.thesis;\r\n\r\n $scope.ok = function () {\r\n thesisInfoService.withdrawThesis($scope.thesis.matriculationNo).then(function(response){\r\n $uibModalInstance.close();\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n\r\n});\r\n","invo.controller('ThesisDocumentPermissionModalController',function ($scope, $uibModalInstance ,docId,thesisInfoDocumentsService) {\r\n\r\n $scope.thesisUsers;\r\n $scope.docUsers;\r\n $scope.docId = docId;\r\n\r\n $scope.addReadPermission=function(docId,username) {\r\n if (username!=undefined){\r\n thesisInfoDocumentsService.addReadPermission(docId, username).then(function (response) {\r\n $scope.thesisUsers = response.data.data.thesisUsers;\r\n $scope.docUsers = response.data.data.docUsers;\r\n });\r\n }\r\n }\r\n\r\n $scope.removeReadPermission=function(docId,username) {\r\n thesisInfoDocumentsService.removeReadPermission(docId, username).then(function (response) {\r\n $scope.thesisUsers = response.data.data.thesisUsers;\r\n $scope.docUsers = response.data.data.docUsers;\r\n });\r\n }\r\n\r\n function listDocumentUsers(docId){\r\n thesisInfoDocumentsService.listDocumentUsers(docId).then(function(response) {\r\n $scope.thesisUsers = response.data.data.thesisUsers;\r\n $scope.docUsers = response.data.data.docUsers;\r\n });\r\n }\r\n\r\n listDocumentUsers(docId);\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n }\r\n\r\n});\r\n\r\n","invo.controller('ThesisDocumentViewerModalController',function ($scope,$rootScope,auth,$uibModalInstance ,thesisInfoDocumentsService,thesis,document,isAnnotated) {\r\n $scope.doc = document;\r\n $scope.thesis = thesis;\r\n $scope.isAnnotated=isAnnotated;\r\n\r\n $scope.loadDocument = function(doc){\r\n thesisInfoDocumentsService.listUserThesisDocumentPermission(doc.id).then(function(response){\r\n var permissions = response.data.data.permissions;\r\n var canAnnotate = permissions.indexOf('ANNOTATE')>=0;\r\n var viewer = new PDFTron.WebViewer({\r\n type: \"html5\",\r\n custom:JSON.stringify({annotationUrl:$rootScope.serverUrl+'ThesisDocument/loadAnnotation',saveAnnotationUrl:$rootScope.serverUrl+'ThesisDocument/saveAnnotation'}),\r\n documentId: doc.id,\r\n annotationUser: auth.session.user.fullname,\r\n annotationAdmin: false,\r\n path: \"assets/webviewer/lib\",\r\n initialDoc: $rootScope.serverUrl+\"ThesisDocument/viewThesisDocument?id=\"+doc.id,\r\n config: \"assets/webviewer/config.js\",\r\n enableAnnotations: true,\r\n streaming:true,\r\n enableReadOnlyMode:!canAnnotate\r\n }, $('#docviewer_'+doc.id));\r\n //$('html,body').animate({scrollTop: $('#doctitle_'+doc.id).offset().top - 113}, 500);\r\n });\r\n }\r\n $scope.loadDocument($scope.doc);\r\n $scope.downloadThesisDocument = function (id) {\r\n thesisInfoDocumentsService.downloadThesisDocument(id);\r\n }\r\n\r\n $scope.close=function(){\r\n $uibModalInstance.close();\r\n }\r\n});\r\n","invo.controller('ThesisInfoDocumentsController',function($scope,$uibModal,thesisInfoDocumentsService,$rootScope,$stateParams,auth,$sce,$http){\r\n\r\n $scope.isAllUploaded=false;\r\n $scope.isDocsAnnotated=false;\r\n $scope.doc={};\r\n $scope.docsUnderExamination=[];\r\n $scope.checkbox={\r\n svCB:false\r\n };\r\n\r\n $scope.changeFile = function (fileInput) {\r\n //only .pdf file allowed\r\n var ext = fileInput.files[0].type;\r\n var size = fileInput.files[0].size;\r\n if (ext == 'application/pdf') {\r\n var max;\r\n if (fileInput.name.split(\"_\")[1]=='THESIS'){\r\n max = 62914560;\r\n }\r\n else{\r\n max=20971520;\r\n }\r\n if (size && size<=max){\r\n $scope.$apply(function () {\r\n var rownum = fileInput.name.split(\"_\")[0];\r\n var docTypeCode = fileInput.name.split(\"_\")[1];\r\n var examinerAlias = fileInput.name.split(\"_\")[2];\r\n $scope.requiredDocuments[parseInt(rownum)].fileMessaage = fileInput.files[0].name;\r\n $scope.uploadDocument(fileInput.files[0], docTypeCode, examinerAlias)\r\n })\r\n }\r\n else {\r\n if (fileInput.name.split(\"_\")[1]=='THESIS'){\r\n alert('The file exceeds the maximum upload size of 60MB.');\r\n }\r\n else{\r\n alert('The file exceeds the maximum upload size of 20MB.');\r\n }\r\n fileInput.value='';\r\n }\r\n\r\n } else {\r\n alert('Only .pdf file allowed');\r\n fileInput.value='';\r\n }\r\n }\r\n\r\n $scope.viewDocPermissions=function(docId){\r\n var viewDocPermissionsModal = $uibModal.open({\r\n templateUrl: './app/thesis/info-part/thesis-document-permission.html?ver='+$scope.appVersion,\r\n controller: 'ThesisDocumentPermissionModalController',\r\n resolve: {\r\n docId: function(){return docId}\r\n }\r\n });\r\n viewDocPermissionsModal.result.then(function (data) {\r\n $scope.buildQueryInfo();\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.uploadDocument=function(file,type,examinerAlias){\r\n thesisInfoDocumentsService.uploadFileToUrl(file,$scope.dataThesis.thesis.matriculationNo,type,examinerAlias).then(function(response){\r\n $scope.getRequiredDocuments($scope.dataThesis.thesis.matriculationNo);\r\n },function(data){\r\n //$scope.getRequiredDocuments($scope.dataThesis.thesis.matriculationNo);\r\n });\r\n }\r\n $scope.isAnnotated = function (doc){\r\n return (doc.hasAnnotation && $scope.docsUnderExamination.indexOf(doc.id)<0) || ($scope.isOAS() && doc.hasAnnotation)\r\n }\r\n\r\n $scope.canSubmitDocument=function(){\r\n if ($scope.isThesisDataLoaded) {\r\n if ($scope.dataThesis.permissionList) {\r\n return $scope.dataThesis.permissionList.indexOf('SUBMIT_DOCUMENT') > -1;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n $scope.canDelete=function(document){\r\n if ($scope.isThesisDataLoaded){\r\n if (document.classification == $scope.dataThesis.thesis.workflow.processName){\r\n if (document.author == auth.session.user.username && $scope.dataThesis.permissionList.indexOf('DELETE_DOCUMENT') > -1){\r\n return true;\r\n }\r\n else if ($scope.dataThesis.permissionList.indexOf('DELETE_ANY_DOCUMENT') > -1) {\r\n return true;\r\n }\r\n else{\r\n return false;\r\n }\r\n }\r\n else{\r\n return false;\r\n }\r\n }\r\n else{\r\n return false;\r\n }\r\n\r\n }\r\n\r\n //$scope.$on('reload', function(event, args) {\r\n // $scope.init()\r\n //});\r\n\r\n $scope.$on('reload-document', function(event, args) {\r\n $scope.init()\r\n });\r\n\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n\r\n $scope.documentTypeList = function(){\r\n thesisInfoDocumentsService.documentTypeList().then(function (response) {\r\n saveDocumentTypeData(response);\r\n });\r\n }\r\n var dataDocumentType={};\r\n dataDocumentType.list=[];\r\n var saveDocumentTypeData = function(response){\r\n dataDocumentType.list.splice(0,1000);\r\n dataDocumentType.list = dataDocumentType.list.concat(response.data.data.documentTypeList);\r\n }\r\n\r\n $scope.$watch(\"checkbox.svCB\", function(newVal,oldVal) {\r\n if (newVal!=oldVal){\r\n $scope.buildQueryInfo()\r\n }\r\n });\r\n\r\n\r\n $scope.documentTypeListData = dataDocumentType;\r\n $scope.requiredDocuments=[];\r\n $scope.addDocument = function(type,thesis){\r\n var addDocumentModal = $uibModal.open({\r\n templateUrl: './app/thesis/upload/add-document.html?ver='+$scope.appVersion,\r\n controller: 'AddDocumentModalController',\r\n resolve: {\r\n thesis: function(){return thesis},\r\n type: function(){return type},\r\n docTypes:function(){return $scope.documentTypeListData}\r\n }\r\n });\r\n addDocumentModal.result.then(function (data) {\r\n $scope.buildQueryInfo();\r\n }, function () {\r\n });\r\n\r\n }\r\nvar thesisDocumentListCompleted = false;\r\n $scope.thesisDocumentList = function(id,cfn,doctype){\r\n thesisDocumentListCompleted = false;\r\n if ($scope.checkbox.svCB){\r\n thesisInfoDocumentsService.thesisSchoolDocumentList(id,cfn,doctype).then(function (response) {\r\n saveThesisDocumentData(response);\r\n });\r\n }\r\n else{\r\n thesisInfoDocumentsService.thesisDocumentList(id,cfn,doctype).then(function (response) {\r\n saveThesisDocumentData(response);\r\n });\r\n }\r\n\r\n }\r\n var dataThesisDocument={};\r\n dataThesisDocument.list=[];\r\n dataThesisDocument.listClass=[];\r\n dataThesisDocument.listDocTypeForFilter=[];\r\n dataThesisDocument.listDocProcessForFilter=[];\r\n var saveThesisDocumentData = function(response){\r\n dataThesisDocument.list.splice(0,1000);\r\n dataThesisDocument.list = dataThesisDocument.list.concat(response.data.data.thesisDocumentList);\r\n dataThesisDocument.listClass.splice(0,1000);\r\n var classes = response.data.data.classificationList;\r\n classes.forEach(function(value){\r\n dataThesisDocument.listClass.push({name:value,collapsed:false});\r\n });\r\n dataThesisDocument.listDocTypeForFilter.splice(0,1000);\r\n dataThesisDocument.listDocTypeForFilter = dataThesisDocument.listDocTypeForFilter.concat(response.data.data.documentTypeListForFilter);\r\n dataThesisDocument.listDocProcessForFilter.splice(0,1000);\r\n dataThesisDocument.listDocProcessForFilter = dataThesisDocument.listDocProcessForFilter.concat(response.data.data.documentProcessListForFilter);\r\n $scope.thesisDocumentListData=dataThesisDocument;\r\n $scope.docsUnderExamination=response.data.data.docsUnderExamination;\r\n thesisDocumentListCompleted = true;\r\n findNonCurrentRequiredDocument()\r\n }\r\n\r\n var retry=false;\r\n function findNonCurrentRequiredDocument(){\r\n if (getRequiredDocumentCompleted){\r\n $scope.doc.currentNonRequiredProcessDocuments = [];\r\n $scope.thesisDocumentListData.list.forEach(function (doc){\r\n if (doc.classification == $scope.dataThesis.thesis.workflow.processName) {\r\n if (_.find(uploadedRequiredDocIds, function(id){ return id == doc.id; })==undefined){\r\n $scope.doc.currentNonRequiredProcessDocuments.push(doc)\r\n }\r\n }\r\n });\r\n if (retry) {\r\n $scope.$apply();\r\n }\r\n }\r\n else {\r\n retry=true;\r\n setTimeout(findNonCurrentRequiredDocument,300);\r\n }\r\n }\r\n\r\n\r\n $scope.clearDocprocessFilter=function(){\r\n $scope.currentDocprocess='All Process';\r\n $scope.currentDocprocessFlag=undefined;\r\n $scope.buildQueryInfo();\r\n }\r\n $scope.itemselectedDocprocess = function (item) {\r\n $scope.currentDocprocess = item;\r\n $scope.currentDocprocessFlag=item;\r\n $scope.buildQueryInfo();\r\n }\r\n $scope.getClassDocprocess = function (item) {\r\n if ($scope.currentDocprocess == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n\r\n $scope.clearDoctypeFilter=function(){\r\n $scope.currentDoctypeFilter.name='All Document Type';\r\n $scope.currentDoctypeFilter.code=undefined;\r\n $scope.buildQueryInfo();\r\n }\r\n $scope.itemselectedDoctypeFilter = function (item) {\r\n if (item==undefined) {\r\n $scope.currentDoctypeFilter.name='All Document Type';\r\n $scope.currentDoctypeFilter.code=undefined;\r\n return 'active';\r\n } else {\r\n $scope.currentDoctypeFilter = item;\r\n }\r\n $scope.buildQueryInfo();\r\n }\r\n $scope.getClassDoctypeFilter = function (item) {\r\n if (item==undefined) {\r\n if ($scope.currentDoctypeFilter.code==undefined) {\r\n return 'active';\r\n }\r\n } else {\r\n if ($scope.currentDoctypeFilter.code == item.code) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n }\r\n\r\n $scope.buildQueryInfo = function () {\r\n if ($scope.currentDoctypeFilter.code!=undefined) {\r\n $scope.thesisDocumentList($stateParams.id, $scope.currentDocprocessFlag, $scope.currentDoctypeFilter.code);\r\n } else {\r\n $scope.thesisDocumentList($stateParams.id, $scope.currentDocprocessFlag);\r\n }\r\n }\r\n\r\n $scope.deleteThesisDocument = function (id) {\r\n $stateParams.documentId = id;\r\n\r\n thesisInfoDocumentsService.isLockedThesisDocument(id).then(function(data){\r\n if (data.data.data.isLocked=='1') {\r\n var deleteThesisDocumentModal = $uibModal.open({\r\n templateUrl: './app/thesis/delete-document/delete-thesis-document-locked.html?ver='+$scope.appVersion,\r\n controller: 'DeleteThesisDocumentModalController',\r\n\r\n });\r\n deleteThesisDocumentModal.result.then(function (data) {\r\n }, function () {\r\n });\r\n } else {\r\n var deleteThesisDocumentModal = $uibModal.open({\r\n templateUrl: './app/thesis/delete-document/delete-thesis-document.html?ver='+$scope.appVersion,\r\n controller: 'DeleteThesisDocumentModalController',\r\n\r\n });\r\n deleteThesisDocumentModal.result.then(function (data) {\r\n $scope.getRequiredDocuments($scope.dataThesis.thesis.matriculationNo);\r\n $scope.buildQueryInfo()\r\n }, function () {\r\n });\r\n }\r\n });\r\n }\r\n\r\n $scope.downloadThesisDocument = function (id) {\r\n thesisInfoDocumentsService.isLockedThesisDocument(id).then(function(data) {\r\n if (data.data.data.isLocked == '1') {\r\n var deleteThesisDocumentModal = $uibModal.open({\r\n templateUrl: './app/thesis/delete-document/delete-thesis-document-locked.html?ver=' + $scope.appVersion,\r\n controller: 'DeleteThesisDocumentModalController',\r\n\r\n });\r\n deleteThesisDocumentModal.result.then(function (data) {\r\n }, function () {\r\n });\r\n } else {\r\n thesisInfoDocumentsService.downloadThesisDocument(id);\r\n }\r\n });\r\n }\r\n var uploadedRequiredDocIds=[];\r\n var getRequiredDocumentCompleted=false;\r\n $scope.getRequiredDocuments = function(id){\r\n if ($scope.checkbox.svCB){\r\n }\r\n else {\r\n uploadedRequiredDocIds=[];\r\n getRequiredDocumentCompleted=false;\r\n thesisInfoDocumentsService.getRequiredDocuments(id).then(function (response) {\r\n $scope.requiredDocuments = response.data.data.required;\r\n var n = 0;\r\n var isAllUploaded = true;\r\n $scope.isDocsAnnotated = false;\r\n $scope.requiredDocuments.forEach(function (req) {\r\n req.fileMessage = \"Please select file to be uploaded\";\r\n req.rownum = n++;\r\n if (!req.isUploaded) {\r\n if (req.isRequired) {\r\n isAllUploaded = false;\r\n }\r\n }\r\n $scope.isAllUploaded = isAllUploaded;\r\n if (req.isUploaded) {\r\n uploadedRequiredDocIds.push(req.document.id);\r\n if (req.document.hasAnnotation) {\r\n $scope.isDocsAnnotated = true;\r\n }\r\n }\r\n });\r\n getRequiredDocumentCompleted=true;\r\n });\r\n }\r\n // findNonCurrentRequiredDocument();\r\n }\r\n\r\n\r\n\r\n $scope.viewDocument=function(doc,obj){\r\n doc.showDocAlert=!doc.showDocAlert;\r\n thesisInfoDocumentsService.checkIfXodRenditionAvailable(doc.id).then(function (response) {\r\n doc.isAvailable = response.data.data.isAvailable;\r\n if (doc.isAvailable) {\r\n $scope.loadViewer(doc, obj);\r\n }\r\n });\r\n }\r\n\r\n $scope.loadViewer=function(doc,obj){\r\n var documentViewerModal = $uibModal.open({\r\n templateUrl: './app/thesis/info-part/thesis-document-viewer.html?ver='+$scope.appVersion,\r\n controller: 'ThesisDocumentViewerModalController',\r\n size:\"doc\",\r\n resolve:{\r\n document : function(){return doc},\r\n thesis: function(){return $scope.dataThesis.thesis},\r\n isAnnotated: function(){return $scope.isAnnotated(doc)}\r\n }\r\n\r\n });\r\n documentViewerModal.result.then(function (data) {\r\n $scope.getRequiredDocuments($scope.dataThesis.thesis.matriculationNo);\r\n $scope.buildQueryInfo()\r\n }, function () {\r\n $scope.getRequiredDocuments($scope.dataThesis.thesis.matriculationNo);\r\n $scope.buildQueryInfo()\r\n });\r\n }\r\n\r\n $scope.showDocAlert=function(doc){\r\n if (doc.showDocAlert != undefined){\r\n return doc.showDocAlert;\r\n }\r\n else{\r\n doc.showDocAlert=false;\r\n return doc.showDocAlert;\r\n }\r\n }\r\n\r\n $scope.isAvailable=function(doc){\r\n if (doc.isAvailable != undefined){\r\n return doc.isAvailable;\r\n }\r\n else{\r\n doc.isAvailable=true;\r\n return doc.isAvailable;\r\n }\r\n }\r\n\r\n $scope.init=function(){\r\n $scope.requiredDocuments=[];\r\n dataDocumentType={};\r\n dataDocumentType.list=[];\r\n $scope.thesisDocumentListData=dataThesisDocument;\r\n $scope.currentDocprocess='All Process';\r\n $scope.currentDocprocessFlag=undefined;\r\n dataThesisDocument={};\r\n dataThesisDocument.list=[];\r\n dataThesisDocument.listClass=[];\r\n dataThesisDocument.listDocTypeForFilter=[];\r\n dataThesisDocument.listDocProcessForFilter=[];\r\n $scope.currentDoctypeFilter = {\r\n name : 'All Document Type',\r\n code : undefined\r\n }\r\n $scope.getRequiredDocuments($stateParams.id);\r\n $scope.thesisDocumentList($stateParams.id);\r\n $scope.documentTypeList();\r\n $scope.documentTypeListData = dataDocumentType;\r\n $scope.isAllUploaded=false;\r\n $scope.isDocsAnnotated=false;\r\n }\r\n $scope.init();\r\n\r\n});","invo.controller('ThesisInfoDocumentsHistoryController',function($scope,$uibModal,thesisInfoDocumentsService,$rootScope,$stateParams,auth,$sce,$http){\r\n $scope.docsUnderExamination=[];\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n\r\n $scope.checkbox={\r\n svCB:false\r\n };\r\n\r\n $scope.documentTypeList = function(){\r\n thesisInfoDocumentsService.documentTypeList().then(function (response) {\r\n saveDocumentTypeData(response);\r\n });\r\n }\r\n var dataDocumentType={};\r\n dataDocumentType.list=[];\r\n var saveDocumentTypeData = function(response){\r\n dataDocumentType.list.splice(0,1000);\r\n dataDocumentType.list = dataDocumentType.list.concat(response.data.data.documentTypeList);\r\n }\r\n\r\n $scope.viewDocPermissions=function(docId){\r\n var viewDocPermissionsModal = $uibModal.open({\r\n templateUrl: './app/thesis/info-part/thesis-document-permission.html?ver='+$scope.appVersion,\r\n controller: 'ThesisDocumentPermissionModalController',\r\n resolve: {\r\n docId: function(){return docId}\r\n }\r\n });\r\n viewDocPermissionsModal.result.then(function (data) {\r\n $scope.buildQueryInfo();\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.isAnnotated = function (doc){\r\n return (doc.hasAnnotation && $scope.docsUnderExamination.indexOf(doc.id)<0) || ($scope.isOAS() && doc.hasAnnotation)\r\n }\r\n\r\n\r\n $scope.documentTypeListData = dataDocumentType;\r\n $scope.requiredDocuments=[];\r\n\r\n $scope.thesisDocumentList = function(id,cfn,doctype){\r\n if ($scope.checkbox.svCB){\r\n thesisInfoDocumentsService.thesisSchoolDocumentList(id,cfn,doctype,false).then(function (response) {\r\n saveThesisDocumentData(response);\r\n });\r\n }\r\n else {\r\n thesisInfoDocumentsService.thesisDocumentList(id, cfn, doctype, false).then(function (response) {\r\n saveThesisDocumentData(response);\r\n });\r\n }\r\n }\r\n var dataThesisDocument={};\r\n dataThesisDocument.list=[];\r\n dataThesisDocument.listClass=[];\r\n dataThesisDocument.listDocTypeForFilter=[];\r\n dataThesisDocument.listDocProcessForFilter=[];\r\n var saveThesisDocumentData = function(response){\r\n dataThesisDocument.list.splice(0,1000);\r\n dataThesisDocument.list = dataThesisDocument.list.concat(response.data.data.thesisDocumentList);\r\n dataThesisDocument.listClass.splice(0,1000);\r\n var classes = response.data.data.classificationList;\r\n classes.forEach(function(value){\r\n dataThesisDocument.listClass.push({name:value,collapsed:false});\r\n });\r\n dataThesisDocument.listDocTypeForFilter.splice(0,1000);\r\n dataThesisDocument.listDocTypeForFilter = dataThesisDocument.listDocTypeForFilter.concat(response.data.data.documentTypeListForFilter);\r\n dataThesisDocument.listDocProcessForFilter.splice(0,1000);\r\n dataThesisDocument.listDocProcessForFilter = dataThesisDocument.listDocProcessForFilter.concat(response.data.data.documentProcessListForFilter);\r\n $scope.thesisDocumentListData=dataThesisDocument;\r\n $scope.docsUnderExamination=response.data.data.docsUnderExamination;\r\n }\r\n\r\n $scope.$watch(\"checkbox.svCB\", function(newVal,oldVal) {\r\n if (newVal!=oldVal){\r\n $scope.buildQueryInfo()\r\n }\r\n });\r\n\r\n\r\n $scope.clearDocprocessFilter=function(){\r\n $scope.currentDocprocess='All Process';\r\n $scope.currentDocprocessFlag=undefined;\r\n $scope.buildQueryInfo();\r\n }\r\n $scope.itemselectedDocprocess = function (item) {\r\n $scope.currentDocprocess = item;\r\n $scope.currentDocprocessFlag=item;\r\n $scope.buildQueryInfo();\r\n }\r\n $scope.getClassDocprocess = function (item) {\r\n if ($scope.currentDocprocess == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n\r\n $scope.clearDoctypeFilter=function(){\r\n $scope.currentDoctypeFilter.name='All Document Type';\r\n $scope.currentDoctypeFilter.code=undefined;\r\n $scope.buildQueryInfo();\r\n }\r\n $scope.itemselectedDoctypeFilter = function (item) {\r\n if (item==undefined) {\r\n $scope.currentDoctypeFilter.name='All Document Type';\r\n $scope.currentDoctypeFilter.code=undefined;\r\n return 'active';\r\n } else {\r\n $scope.currentDoctypeFilter = item;\r\n }\r\n $scope.buildQueryInfo();\r\n }\r\n\r\n $scope.getClassDoctypeFilter = function (item) {\r\n if (item==undefined) {\r\n if ($scope.currentDoctypeFilter && $scope.currentDoctypeFilter.code==undefined) {\r\n return 'active';\r\n }\r\n } else {\r\n if ($scope.currentDoctypeFilter && $scope.currentDoctypeFilter.code == item.code) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n }\r\n\r\n $scope.buildQueryInfo = function () {\r\n if ($scope.currentDoctypeFilter.code!=undefined) {\r\n $scope.thesisDocumentList($stateParams.id, $scope.currentDocprocessFlag, $scope.currentDoctypeFilter.code);\r\n } else {\r\n $scope.thesisDocumentList($stateParams.id, $scope.currentDocprocessFlag);\r\n }\r\n }\r\n\r\n $scope.downloadThesisDocument = function (id) {\r\n thesisInfoDocumentsService.downloadThesisDocument(id);\r\n }\r\n\r\n $scope.viewDocument=function(doc,obj){\r\n doc.showDocAlert=!doc.showDocAlert;\r\n thesisInfoDocumentsService.checkIfXodRenditionAvailable(doc.id).then(function (response) {\r\n doc.isAvailable = response.data.data.isAvailable;\r\n if (doc.isAvailable) {\r\n $scope.loadViewer(doc, obj);\r\n }\r\n });\r\n }\r\n\r\n $scope.loadViewer=function(doc,obj){\r\n var documentViewerModal = $uibModal.open({\r\n templateUrl: './app/thesis/info-part/thesis-document-viewer.html?ver='+$scope.appVersion,\r\n controller: 'ThesisDocumentViewerModalController',\r\n size:\"doc\",\r\n resolve:{\r\n document : function(){return doc},\r\n thesis: function(){return $scope.dataThesis.thesis},\r\n isAnnotated:function(){return $scope.isAnnotated(doc)}\r\n }\r\n });\r\n documentViewerModal.result.then(function (data) {\r\n }, function () {\r\n $scope.buildQueryInfo()\r\n });\r\n }\r\n\r\n $scope.showDocAlert=function(doc){\r\n if (doc.showDocAlert != undefined){\r\n return doc.showDocAlert;\r\n }\r\n else{\r\n doc.showDocAlert=false;\r\n return doc.showDocAlert;\r\n }\r\n }\r\n\r\n $scope.isAvailable=function(doc){\r\n if (doc.isAvailable != undefined){\r\n return doc.isAvailable;\r\n }\r\n else{\r\n doc.isAvailable=true;\r\n return doc.isAvailable;\r\n }\r\n }\r\n\r\n\r\n $scope.init=function(){\r\n $scope.requiredDocuments=[];\r\n dataDocumentType={};\r\n dataDocumentType.list=[];\r\n $scope.thesisDocumentListData=dataThesisDocument;\r\n $scope.currentDocprocess='All Process';\r\n $scope.currentDocprocessFlag=undefined;\r\n dataThesisDocument={};\r\n dataThesisDocument.list=[];\r\n dataThesisDocument.listClass=[];\r\n dataThesisDocument.listDocTypeForFilter=[];\r\n dataThesisDocument.listDocProcessForFilter=[];\r\n $scope.currentDoctypeFilter = {\r\n name : 'All Document Type',\r\n code : undefined\r\n }\r\n $scope.thesisDocumentList($stateParams.id);\r\n $scope.documentTypeList();\r\n $scope.documentTypeListData = dataDocumentType;\r\n }\r\n //$scope.init();\r\n\r\n $scope.$on(\"reload-doc-history\",function(){\r\n $scope.init();\r\n });\r\n\r\n});","invo.factory('thesisInfoDocumentsService',function($http,notify,$rootScope){\r\n\r\n var service = {\r\n uploadFileToUrl:uploadFileToUrl,\r\n listUserThesisDocumentPermission:listUserThesisDocumentPermission,\r\n checkIfXodRenditionAvailable:checkIfXodRenditionAvailable,\r\n deleteThesisDocument:deleteThesisDocument,\r\n downloadThesisDocument:downloadThesisDocument,\r\n documentTypeList:documentTypeList,\r\n thesisDocumentList:thesisDocumentList,\r\n thesisSchoolDocumentList:thesisSchoolDocumentList,\r\n getRequiredDocuments:getRequiredDocuments,\r\n getExaminerTitle:getExaminerTitle,\r\n listDocumentUsers:listDocumentUsers,\r\n addReadPermission:addReadPermission,\r\n removeReadPermission:removeReadPermission,\r\n listThesisDocumentToBeSubmittedToSchool:listThesisDocumentToBeSubmittedToSchool,\r\n isLockedThesisDocument:isLockedThesisDocument\r\n };\r\n\r\n return service;\r\n\r\n function listDocumentUsers(docId){\r\n return $http.get($rootScope.serverUrl + \"ThesisDocument/listDocumentUser?docId=\"+ docId);\r\n }\r\n function addReadPermission(docId,username){\r\n return $http.get($rootScope.serverUrl + \"ThesisDocument/addDocumentPermission?docId=\"+ docId+\"&username=\"+username);\r\n }\r\n function removeReadPermission(docId,username){\r\n return $http.get($rootScope.serverUrl + \"ThesisDocument/removeDocumentPermission?docId=\"+ docId+\"&username=\"+username);\r\n }\r\n\r\n function uploadFileToUrl(file,id,doctypeCode,examinerAlias,docTitle){\r\n var fd = new FormData();\r\n fd.append('file', file);\r\n fd.append('id', id);\r\n fd.append('doctypeCode', doctypeCode);\r\n fd.append('examinerAlias', examinerAlias);\r\n fd.append('docTitle', encodeURIComponent(docTitle));\r\n\r\n return $http.post($rootScope.serverUrl + \"ThesisDocument/uploadThesisDocument\", fd, {\r\n transformRequest: angular.identity,\r\n headers: {'Content-Type': undefined}\r\n }).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n function listUserThesisDocumentPermission(id){\r\n return $http.get($rootScope.serverUrl + \"ThesisDocument/listUserThesisDocumentPermission?id=\"+ id).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n function checkIfXodRenditionAvailable(id){\r\n return $http.get($rootScope.serverUrl + \"ThesisDocument/checkIfXodRenditionAvailable?id=\"+ id).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n function deleteThesisDocument(id){\r\n return $http.get($rootScope.serverUrl + \"ThesisDocument/deleteThesisDocument?id=\"+ id).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n\r\n function downloadThesisDocument(id){\r\n /*return $http({method: 'GET', url: $rootScope.serverUrl + \"ThesisDocument/downloadThesisDocument?id=\"+ id}).\r\n success(function(data, status, headers, config) {\r\n /*if (navigator.msSaveBlob) { //for IE\r\n var blob = b64toBlob(data.data.fileString, \"application/pdf\");\r\n navigator.msSaveBlob(blob, data.data.fileName + '.pdf');\r\n function b64toBlob(b64Data, contentType, sliceSize) {\r\n contentType = contentType || '';\r\n sliceSize = sliceSize || 512;\r\n var byteCharacters = atob(b64Data);\r\n var byteArrays = [];\r\n for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n var slice = byteCharacters.slice(offset, offset + sliceSize);\r\n var byteNumbers = new Array(slice.length);\r\n for (var i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n var byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n var blob = new Blob(byteArrays, {type: contentType});\r\n return blob;\r\n }\r\n } else {\r\n var anchor = angular.element('');\r\n anchor.css({display: 'none'}); // Make sure it's not visible\r\n angular.element(document.body).append(anchor); // Attach to\r\n anchor.attr({\r\n href: 'data:attachment/pdf;base64,' + encodeURI(data.data.fileString),\r\n target: '_blank',\r\n download: data.data.fileName + '.pdf'\r\n })[0].click();\r\n console.log(anchor);\r\n anchor.remove(); // Clean it up afterwards\r\n }\r\n }).\r\n error(function(data, status, headers, config) {\r\n // handle error\r\n });*/\r\n window.open($rootScope.serverUrl + \"ThesisDocument/downloadThesisDocument?id=\"+ id ,\"_blank\");\r\n\r\n }\r\n\r\n function documentTypeList(){\r\n return $http.get($rootScope.serverUrl+\"ThesisDocument/documentTypeList\").\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function thesisDocumentList(id,cfn,doctype,isCurrent){\r\n return $http.get($rootScope.serverUrl+\"ThesisDocument/listThesisDocument?id=\"+id+\"&cfn=\"+cfn+\"&doctype=\"+doctype+\"&isCurrent=\"+isCurrent).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n function thesisSchoolDocumentList(id,cfn,doctype,isCurrent){\r\n return $http.get($rootScope.serverUrl+\"ThesisDocument/listSchoolThesisDocument?id=\"+id+\"&cfn=\"+cfn+\"&doctype=\"+doctype+\"&isCurrent=\"+isCurrent).\r\n then (function(response){\r\n return response;\r\n });\r\n }\r\n\r\n\r\n function getRequiredDocuments(matriculationNo){\r\n return $http.get($rootScope.serverUrl+\"ThesisDocument/listCurrentRequiredDocuments?matriculationNo=\"+matriculationNo).then(function(response){\r\n return response;\r\n })\r\n }\r\n\r\n function getExaminerTitle(data){\r\n return $http.get($rootScope.serverUrl+\"ThesisDocument/getExaminerTitle?q=\"+data).then(function(response){\r\n return response;\r\n })\r\n }\r\n\r\n function listThesisDocumentToBeSubmittedToSchool(matriculationNo){\r\n return $http.get($rootScope.serverUrl+\"ThesisDocument/listThesisDocumentToBeSubmittedToSchool?matriculationNo=\"+matriculationNo).then(function(response){\r\n return response;\r\n })\r\n }\r\n\r\n function isLockedThesisDocument(id){\r\n return $http.get($rootScope.serverUrl + \"ThesisDocument/isLockedThesisDocument?id=\"+ id).\r\n then(function (response) {\r\n return response;\r\n });\r\n }\r\n});","invo.controller('ThesisProcessHistoryController',function($scope,thesisInfoService,$rootScope,$stateParams,auth){\r\n $scope.matriculationNo = $stateParams.id;\r\n $scope.events=[];\r\n $scope.q=\"\";\r\n $scope.filterBy=\"\";\r\n\r\n $scope.clearCategoryFilter=function(){\r\n $scope.currentCategory='All Categories';\r\n buildQuery();\r\n }\r\n $scope.selectCategory = function (item) {\r\n $scope.currentCategory = item;\r\n buildQuery();\r\n }\r\n $scope.getClassCategory = function (item) {\r\n if ($scope.currentCategory == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearUserFilter=function(){\r\n $scope.currentUser='All Users';\r\n buildQuery();\r\n }\r\n $scope.selectUser = function (item) {\r\n $scope.currentUser = item;\r\n buildQuery();\r\n }\r\n $scope.getClassUser = function (item) {\r\n if ($scope.currentUser == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearActionFilter=function(){\r\n $scope.currentAction='All Actions';\r\n buildQuery();\r\n }\r\n $scope.selectAction = function (item) {\r\n $scope.currentAction = item;\r\n buildQuery();\r\n }\r\n $scope.getClassAction = function (item) {\r\n if ($scope.currentAction == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.clearProcessFilter=function(){\r\n $scope.currentProcess='All Processes';\r\n buildQuery();\r\n }\r\n $scope.selectProcess = function (item) {\r\n $scope.currentProcess = item;\r\n buildQuery();\r\n }\r\n $scope.getClassAction = function (item) {\r\n if ($scope.currentProcess == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.loadProcessHistory=function(q,filterBy,matriculationNo){\r\n thesisInfoService.listProcessHistory(matriculationNo,q,filterBy).then(function(response){\r\n $scope.events = response.data.data.events;\r\n $scope.categories = response.data.data.categories;\r\n $scope.users = response.data.data.users;\r\n $scope.actions= response.data.data.actions;\r\n $scope.processes = response.data.data.processes;\r\n });\r\n }\r\n\r\n function buildQuery(){\r\n $scope.filterBy=\"\";\r\n if ($scope.currentAction!='All Actions'){\r\n $scope.filterBy = $scope.filterBy.concat(\"action,eq,\"+$scope.currentAction+\",\");\r\n }\r\n if ($scope.currentUser!='All Users'){\r\n $scope.filterBy = $scope.filterBy.concat(\"fullName,eq,\"+$scope.currentUser+\",\");\r\n }\r\n if ($scope.currentCategory!='All Categories'){\r\n $scope.filterBy = $scope.filterBy.concat(\"category,eq,\"+$scope.currentCategory+\",\");\r\n }\r\n if ($scope.currentProcess!='All Processes'){\r\n $scope.filterBy = $scope.filterBy.concat(\"processName,eq,\"+$scope.currentProcess+\",\");\r\n }\r\n $scope.loadProcessHistory($scope.q,$scope.filterBy,$scope.matriculationNo);\r\n }\r\n\r\n function init(){\r\n $scope.q=\"\";\r\n $scope.filterBy=\"\";\r\n $scope.currentProcess=\"All Processes\"\r\n $scope.currentAction=\"All Actions\"\r\n $scope.currentCategory=\"All Categories\"\r\n $scope.currentUser=\"All Users\"\r\n $scope.loadProcessHistory($scope.q,$scope.filterBy,$scope.matriculationNo);\r\n }\r\n\r\n //init();\r\n //$scope.$on(\"reload\",function(){\r\n // init();\r\n //});\r\n $scope.$on(\"reload-history\",function(){\r\n init();\r\n });\r\n});","/**\r\n * Created by admin on 27/1/2016.\r\n */\r\ninvo.controller('ThesisListController',function($scope,$uibModal,thesisService,$rootScope,$stateParams,auth,blockUI,navigationService){\r\n $scope.q=$stateParams.q;\r\n\r\n $scope.filterByData;\r\n $scope.atmCB=true;\r\n $scope.orderData='matriculationNo';\r\n $scope.sortData='asc';\r\n\r\n $scope.submissionDateLbl = 'OAS Receipt Date';\r\n $scope.submission = {}\r\n $scope.submission.submissionDateStart;\r\n $scope.submission.submissionDateEnd;\r\n\r\n $scope.popup1 = {\r\n opened: false\r\n };\r\n\r\n $scope.popup2 = {\r\n opened: false\r\n };\r\n\r\n $scope.open1 = function(){\r\n $scope.popup1.opened = true\r\n $scope.popup2.opened= false\r\n }\r\n\r\n $scope.open2 = function(){\r\n $scope.popup2.opened=true\r\n $scope.popup1.opened=false\r\n }\r\n\r\n $scope.clearSubmissionDateRange = function() {\r\n $scope.submissionDateLbl = 'OAS Receipt Date';\r\n $scope.submission.submissionDateStart = null\r\n $scope.submission.submissionDateEnd = null\r\n $scope.buildQuery();\r\n }\r\n\r\n $scope.okSubmissionDateRange = function() {\r\n var monthNames = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\",\r\n \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"\r\n ];\r\n if ($scope.submission.submissionDateStart!=undefined && $scope.submission.submissionDateEnd!=undefined) {\r\n var dateStart = $scope.submission.submissionDateStart.getDate() + ' ' + monthNames[$scope.submission.submissionDateStart.getMonth()] + ' ' + $scope.submission.submissionDateStart.getFullYear()\r\n var dateEnd = $scope.submission.submissionDateEnd.getDate() + ' ' + monthNames[$scope.submission.submissionDateEnd.getMonth()] + ' ' + $scope.submission.submissionDateEnd.getFullYear()\r\n $scope.submissionDateLbl = dateStart +' - '+ dateEnd;\r\n $scope.buildQuery();\r\n }\r\n }\r\n\r\n\r\n\r\n var myBlock = blockUI.instances.get('thesisBlock');\r\n $scope.block = function(){\r\n myBlock.start();\r\n }\r\n $scope.block();\r\n\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n\r\n $scope.isOASAdmin=function(){\r\n return auth.session.isOASAdmin();\r\n }\r\n\r\n $scope.isOASStaff=function(){\r\n return auth.session.isOASStaff();\r\n }\r\n\r\n $scope.wfstatusListFunc = function () {\r\n thesisService.wfstatusList().then(function (response) {\r\n saveWfStatusListData(response);\r\n });\r\n }\r\n\r\n var dataWfStatus={};\r\n dataWfStatus.list=[];\r\n var saveWfStatusListData = function(response){\r\n dataWfStatus.list.splice(0,1000);\r\n dataWfStatus.list = dataWfStatus.list.concat(response.data.data.wfstatusList);\r\n }\r\n var dataStudentStatus={};\r\n dataStudentStatus.list=['Graduated','Withdrawn'];\r\n $scope.currentStudentStatus;\r\n $scope.studentStatusFilterClass='';\r\n $scope.studentStatusList= dataStudentStatus;\r\n $scope.itemSelectedStudentStatus = function (item) {\r\n $scope.currentStudentStatus = item;\r\n $scope.studentStatusFilterClass='active';\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassStudentStatus = function (item) {\r\n if ($scope.currentStudentStatus == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearStudentStatusFilter=function(){\r\n $scope.currentStudentStatus=undefined;\r\n $scope.studentStatusFilterClass='';\r\n $scope.buildQuery();\r\n }\r\n\r\n\r\n $scope.wfstatusListFunc();\r\n $scope.wfstatusList=dataWfStatus;\r\n $scope.statusFilterClass='';\r\n $scope.currentWfStatus;\r\n $scope.itemselectedWfs = function (item) {\r\n $scope.currentWfStatus = item;\r\n $scope.statusFilterClass='active';\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassWfs = function (item) {\r\n if ($scope.currentWfStatus == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearStatusFilter=function(){\r\n $scope.currentWfStatus=undefined;\r\n $scope.statusFilterClass='';\r\n $scope.buildQuery();\r\n }\r\n\r\n $scope.schoolListFunc = function (cbStatus) {\r\n thesisService.schoolList(cbStatus).then(function (response) {\r\n saveSchoolListData(response);\r\n });\r\n }\r\n var dataSchool={};\r\n dataSchool.list=[];\r\n var saveSchoolListData = function(response){\r\n dataSchool.list.splice(0,1000);\r\n dataSchool.list = dataSchool.list.concat(response.data.data.schoolList);\r\n }\r\n $scope.schoolListFunc($scope.atmCB);\r\n $scope.schoolList=dataSchool;\r\n\r\n $scope.schoolFilterClass='';\r\n $scope.clearSchoolFilter=function(){\r\n $scope.currentSchool=undefined;\r\n $scope.schoolFilterClass='';\r\n $scope.buildQuery();\r\n }\r\n $scope.currentSchool;\r\n $scope.itemselectedSchool = function (item) {\r\n $scope.currentSchool = item;\r\n $scope.schoolFilterClass='active';\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSchool = function (item) {\r\n if ($scope.currentSchool == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.list = function(q,offset,sortBy,filterBy,page){\r\n page = page ? page : 1;\r\n var numberPerPage = 20;\r\n if (page == 1) {\r\n offset = 0;\r\n } else {\r\n offset = (page-1)*numberPerPage;\r\n }\r\n thesisService.list(q,offset,sortBy,filterBy,page,numberPerPage,$scope.atmCB).then(function (response) {\r\n saveListData(offset,response.data,page,numberPerPage);\r\n }).finally(function(){myBlock.stop();});\r\n }\r\n var data={};\r\n data.list=[];\r\n data.view={};\r\n data.total=0;\r\n data.stats={};\r\n data.userLogin;\r\n data.pager={};\r\n var saveListData = function(offset,response,page,numberPerPage){\r\n data.list.splice(0,1000);\r\n data.list = data.list.concat(response.data.thesiss);\r\n data.total = response.data.total;\r\n data.userLogin = response.data.userLogin;\r\n data.totalER= response.data.totalER;\r\n if (data.totalER>0){\r\n $rootScope.alertMessage=\"You have \"+data.totalER+\" thesis to be examined. Please go to the above tab 'Examination' to retrieve the thesis.\";\r\n }\r\n else{\r\n $rootScope.alertMessage=\"\";\r\n }\r\n //for paging\r\n data.pager = thesisService.getPager(response.data.total, page, numberPerPage);//(totalList,pagenumber,numberperpage)\r\n }\r\n\r\n if ($scope.q=='null') $scope.q=\"\";\r\n //$scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n $scope.thesiss=data;\r\n\r\n $scope.buildCriteria=function(){\r\n $scope.q=\"\";\r\n if ($scope.currentSearchBy==undefined || $scope.currentSearchBy==\"\") $scope.currentSearchBy=$scope.searchByList[0];\r\n if ($scope.criteria==undefined || $scope.criteria==\"\"){\r\n $scope.q=\"\";\r\n }\r\n else {\r\n if ($scope.currentSearchBy == $scope.searchByList[0]) {\r\n $scope.searchByList.forEach(function (searchBy) {\r\n if (searchBy.name != \"All\") {\r\n if ($scope.q != \"\") $scope.q = $scope.q + \",\";\r\n $scope.q = $scope.q.concat(searchBy.id + \",ilike,\" + \"%\" + $scope.criteria + \"%\");\r\n }\r\n });\r\n }\r\n else {\r\n $scope.q = $scope.currentSearchBy.id + \",ilike,\" + \"%\" + $scope.criteria + \"%\";\r\n }\r\n }\r\n }\r\n\r\n $scope.buildQuery = function () {\r\n\r\n var filterBy = \"\";\r\n if (($scope.currentStudentStatus!=undefined) && ($scope.currentStudentStatus!=\"\")) {\r\n filterBy = filterBy.concat(\"student.status,eq,\"+$scope.currentStudentStatus.toUpperCase().charAt(0)+\",\");\r\n }\r\n if (($scope.currentWfStatus!=undefined) && ($scope.currentWfStatus!=\"\")) {\r\n filterBy = filterBy.concat(\"status.id!l,eq,\"+$scope.currentWfStatus.id+\",\");\r\n }\r\n if (($scope.currentSchool!=undefined) && ($scope.currentSchool!=\"\")) {\r\n filterBy = filterBy.concat(\"school.code,eq,\"+$scope.currentSchool.code+\",\");\r\n }\r\n\r\n if ($scope.submissionDateLbl != 'OAS Receipt Date') {\r\n\r\n var start = moment($scope.submission.submissionDateStart).format('YYYY-MM-DD')\r\n var end = moment($scope.submission.submissionDateEnd).add(1, 'days').format('YYYY-MM-DD')\r\n filterBy = filterBy.concat(\"lastSubmissionDate,ge,\"+start+\",lastSubmissionDate,le,\"+end);\r\n }\r\n $scope.filterByData = filterBy;\r\n\r\n\r\n if (($scope.currentSortBy!=undefined) && ($scope.currentSortBy!=\"\")) {\r\n $scope.orderData = $scope.currentSortBy.id;\r\n }\r\n\r\n var sortBy = $scope.orderData +\",\"+ $scope.sortData;\r\n $scope.buildCriteria();\r\n $scope.list($scope.q,0,sortBy,filterBy);\r\n }\r\n\r\n function initSortAndSearchByList(){\r\n if($scope.isOAS()==true){\r\n $scope.sortByList = [\r\n {id: 'lastSubmissionDate', name:'OAS Receipt Date'},\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'name', name: 'Title'},\r\n {id: 'school.name', name: 'School'},\r\n {id: 'programme.name', name: 'Programme'},\r\n {id: 'status.id', name: 'Status'},\r\n {id: 'student.specialProgramme', name: 'Special Programme'}\r\n ]\r\n $scope.searchByList = [\r\n {id: 'all', name: 'All'},\r\n {id: 'name', name: 'Thesis Title'},\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'programme.name', name: 'Programme'},\r\n {id: 'student.specialProgramme', name: 'Special Programme'}\r\n ]\r\n //$scope.currentSearchBy=$scope.searchByList[0];\r\n $scope.currentSortBy = $scope.sortByList[0];\r\n $scope.sortData='desc';\r\n $scope.buildQuery();\r\n\r\n }else {\r\n $scope.sortByList = [\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'name', name: 'Title'},\r\n {id: 'school.name', name: 'School'},\r\n {id: 'programme.name', name: 'Programme'},\r\n {id: 'status.id', name: 'Status'}\r\n ]\r\n $scope.searchByList = [\r\n {id: 'all', name: 'All'},\r\n {id: 'name', name: 'Thesis Title'},\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'programme.name', name: 'Programme'}\r\n ]\r\n //$scope.currentSearchBy=$scope.searchByList[0];\r\n $scope.currentSortBy = $scope.sortByList[0];\r\n $scope.buildQuery();\r\n }\r\n }\r\n if (auth.session.isLoaded){\r\n initSortAndSearchByList();\r\n $scope.sortByEvaluated = true;\r\n }\r\n\r\n\r\n $scope.$on('login',function(){\r\n if (!$scope.sortByEvaluated) {\r\n initSortAndSearchByList();\r\n $scope.sortByEvaluated = true;\r\n }\r\n });\r\n\r\n /*$scope.$watch(function(){\r\n return auth.session.isOASAdmin()\r\n },function(newVal,oldVal){\r\n if ($scope.isOASAdmin()) {\r\n if(newVal!=undefined && newVal!=oldVal){\r\n if(newVal==true){\r\n $scope.sortByList = [\r\n {id: 'submissionDate', name:'Submission Date'},\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'name', name: 'Title'},\r\n {id: 'school.name', name: 'School'},\r\n {id: 'programme.name', name: 'Programme'},\r\n {id: 'status.id', name: 'Status'},\r\n {id: 'student.specialProgramme', name: 'Special Programme'}\r\n ]\r\n $scope.searchByList = [\r\n {id: 'all', name: 'All'},\r\n {id: 'name', name: 'Thesis Title'},\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'programme.name', name: 'Programme'},\r\n {id: 'student.specialProgramme', name: 'Special Programme'}\r\n ]\r\n $scope.currentSearchBy=$scope.searchByList[0]\r\n $scope.sortData='desc';\r\n }else {\r\n $scope.sortByList = [\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'name', name: 'Title'},\r\n {id: 'school.name', name: 'School'},\r\n {id: 'programme.name', name: 'Programme'},\r\n {id: 'status.id', name: 'Status'}\r\n ]\r\n $scope.searchByList = [\r\n {id: 'all', name: 'All'},\r\n {id: 'name', name: 'Thesis Title'},\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'programme.name', name: 'Programme'}\r\n ]\r\n $scope.currentSearchBy=$scope.searchByList[0]\r\n }\r\n $scope.currentSortBy = $scope.sortByList[0];\r\n $scope.buildQuery();\r\n }\r\n }\r\n\r\n });\r\n\r\n $scope.$watch(function(){\r\n return auth.session.isOASStaff()\r\n },function(newVal,oldVal){\r\n if ($scope.isOASStaff()) {\r\n if(newVal!=undefined && newVal!=oldVal){\r\n if(newVal==true){\r\n $scope.sortByList = [\r\n {id: 'submissionDate', name:'Submission Date'},\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'name', name: 'Title'},\r\n {id: 'school.name', name: 'School'},\r\n {id: 'programme.name', name: 'Programme'},\r\n {id: 'status.id', name: 'Status'},\r\n {id: 'student.specialProgramme', name: 'Special Programme'}\r\n ]\r\n $scope.searchByList = [\r\n {id: 'all', name: 'All'},\r\n {id: 'name', name: 'Thesis Title'},\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'programme.name', name: 'Programme'},\r\n {id: 'student.specialProgramme', name: 'Special Programme'}\r\n ]\r\n $scope.currentSearchBy=$scope.searchByList[0]\r\n $scope.sortData='desc';\r\n }else {\r\n $scope.sortByList = [\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'name', name: 'Title'},\r\n {id: 'school.name', name: 'School'},\r\n {id: 'programme.name', name: 'Programme'},\r\n {id: 'status.id', name: 'Status'}\r\n ]\r\n $scope.searchByList = [\r\n {id: 'all', name: 'All'},\r\n {id: 'name', name: 'Thesis Title'},\r\n {id: 'matriculationNo', name: 'Matric No'},\r\n {id: 'student.fullname', name: 'Student Name'},\r\n {id: 'programme.name', name: 'Programme'}\r\n ]\r\n $scope.currentSearchBy=$scope.searchByList[0]\r\n }\r\n $scope.currentSortBy = $scope.sortByList[0];\r\n $scope.buildQuery();\r\n }\r\n }\r\n\r\n });*/\r\n\r\n\r\n\r\n $scope.itemselectedSortBy = function (item) {\r\n $scope.currentSortBy = item;\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSortBy = function (item) {\r\n if ($scope.currentSortBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.itemselectedSearchBy = function (item) {\r\n $scope.currentSearchBy = item;\r\n }\r\n $scope.getClassSearchBy = function (item) {\r\n if ($scope.currentSearchBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n /*$scope.$watch(\"criteria\", _.debounce(function (newVal,oldVal) {\r\n $scope.$apply(function(){\r\n if (newVal != oldVal && oldVal != undefined) {\r\n $scope.buildCriteria();\r\n $scope.list($scope.q, 0, $scope.orderData, $scope.filterByData);\r\n }\r\n })\r\n }, 500));*/\r\n $scope.handleCriteriaChange = _.debounce(function () {\r\n $scope.$apply(function(){\r\n if ($scope.criteria != undefined) {\r\n $scope.buildCriteria();\r\n var sortBy = $scope.orderData +\",\"+ $scope.sortData;\r\n $scope.list($scope.q, 0, sortBy, $scope.filterByData);\r\n }\r\n })\r\n }, 1000)\r\n\r\n $scope.$watch(\"currentSearchBy\", function(newVal,oldVal) {\r\n if (newVal != oldVal && oldVal != undefined) {\r\n $scope.buildCriteria();\r\n var sortBy = $scope.orderData +\",\"+ $scope.sortData;\r\n $scope.list($scope.q, 0, sortBy, $scope.filterByData);\r\n }\r\n });\r\n\r\n //for schoolList change based on real data\r\n //check wheter the checkbox status is change\r\n $scope.$watch(\"atmCB\", function(newVal,oldVal) {\r\n if (newVal!=oldVal){\r\n $scope.schoolListFunc($scope.atmCB);\r\n $scope.clearSchoolFilter();\r\n }\r\n });\r\n\r\n $scope.exportToExcel = function() {\r\n var fs = 'All';\r\n if (($scope.currentWfStatus!=undefined) && ($scope.currentWfStatus!=\"\")) {\r\n fs = $scope.currentWfStatus.id;\r\n }\r\n var fsc = 'All';\r\n if (($scope.currentSchool!=undefined) && ($scope.currentSchool!=\"\")) {\r\n fsc = $scope.currentSchool.code;\r\n }\r\n var sb = $scope.currentSearchBy.name;\r\n var sbString = ''\r\n if ($scope.criteria!=undefined && $scope.criteria!=\"\") {\r\n sbString = $scope.criteria;\r\n }\r\n thesisService.exportToExcel($scope.q,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,$scope.atmCB,fs,fsc,sb,sbString);\r\n }\r\n\r\n $scope.setPage = function(page){\r\n if (page < 1 || page > $scope.thesiss.pager.totalPages) {\r\n return;\r\n }\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,page);\r\n }\r\n\r\n $scope.isSchoolAdmin=function(){\r\n return auth.session.isSchoolAdmin();\r\n }\r\n\r\n});","invo.controller('AddDocumentModalController',function ($scope, $uibModalInstance ,thesisInfoDocumentsService, type,thesis,docTypes,thesisInfoService) {\r\n $scope.matriculationNo=thesis.matriculationNo;\r\n $scope.examinerList=[];\r\n $scope.documentTypeList=docTypes;\r\n $scope.isExaminerDocument=true;\r\n $scope.currentDocumentType = type;\r\n\r\n $scope.fileMessage = 'No file selected';\r\n $scope.changeFile = function (fileInput) {\r\n //only .pdf file allowed\r\n var ext = fileInput.files[0].type;\r\n if (ext == 'application/pdf') {\r\n $scope.$apply(function(){\r\n $scope.file=fileInput.files[0];\r\n $scope.fileMessage = $scope.file.name;\r\n })\r\n } else {\r\n alert('Only .pdf file allowed');\r\n fileInput.value='';\r\n }\r\n }\r\n\r\n function getExaminerList(thesis){\r\n var examinerList=[];\r\n console.log(thesis)\r\n for (i=1;i<=8;i++){\r\n if (eval(\"thesis.examiner\"+i+\"Name\")!=null){\r\n examinerList.push({name:eval(\"thesis.examiner\"+i+\"Name\"),alias:\"Examiner \"+i,id:eval(\"thesis.examiner\"+i+\"StaffId\")});\r\n }\r\n }\r\n var ExaminerTitle;\r\n _.each(examinerList, function(post){\r\n if (ExaminerTitle!=undefined && ExaminerTitle!=null)\r\n ExaminerTitle = ExaminerTitle + (post.id+',')\r\n else ExaminerTitle = undefined+',';\r\n })\r\n thesisInfoDocumentsService.getExaminerTitle(ExaminerTitle).then(function(response){\r\n $scope.examinerTitle = response.data.data.examinerTitle\r\n for(i=0;i<$scope.examinerTitle.length;i++){\r\n if($scope.examinerTitle!=' ')\r\n examinerList[i].name = $scope.examinerTitle[i] + ' ' + examinerList[i].name\r\n }\r\n })\r\n return examinerList\r\n }\r\n\r\n function isExaminerDocument(currentType){\r\n if (currentType==\"PART1\" ||currentType==\"PART2\"||currentType==\"LTE\" ||currentType==\"ATHESIS\"|| currentType==\"REPLY\"){\r\n return true;\r\n }\r\n else{\r\n return false;\r\n }\r\n }\r\n\r\n $scope.isExaminerDocument=isExaminerDocument(type);\r\n\r\n $scope.examinerList = getExaminerList(thesis);\r\n console.log($scope.examinerList)\r\n\r\n $scope.ok = function () {\r\n var file = $scope.file;\r\n var alias = \"\"\r\n if ($scope.currentExaminer) alias = $scope.currentExaminer.alias;\r\n\r\n thesisInfoDocumentsService.uploadFileToUrl(file,$scope.matriculationNo,$scope.currentDocumentType,alias,$scope.docTitle).then(function(data){\r\n $uibModalInstance.close('ok');\r\n },function(data){\r\n $uibModalInstance.close('ok');\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n\r\n }\r\n\r\n});\r\n","invo.directive('fileModel', ['$parse', function ($parse) {\r\n return {\r\n restrict: 'A',\r\n link: function(scope, element, attrs) {\r\n var model = $parse(attrs.fileModel);\r\n var modelSetter = model.assign;\r\n\r\n element.bind('change', function(){\r\n scope.$apply(function(){\r\n modelSetter(scope, element[0].files[0]);\r\n });\r\n });\r\n }\r\n };\r\n}]);","invo.controller('EditUserModalController',function ($scope, $uibModalInstance ,examinerService ,$stateParams) {\r\n $scope.user=$stateParams.user;\r\n $scope.name=$stateParams.user.fullName;\r\n $scope.university=$scope.user.university;\r\n\r\n $scope.ok = function () {\r\n examinerService.update($stateParams.user.id, $scope.name, $scope.university).then(function(data){\r\n $uibModalInstance.close(data.data.data.user);\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n});\r\n","invo.controller('ResetPasswordModalController',function ($scope, $uibModalInstance ,userService ,$stateParams) {\r\n\r\n $scope.newPassword;\r\n $scope.confirmPassword;\r\n\r\n $scope.ok = function () {\r\n userService.resetPassword($stateParams.user.id, $scope.newPassword, $scope.confirmPassword).then(function(data){\r\n $uibModalInstance.dismiss('ok');\r\n },function(data){\r\n //if error here\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n\r\n});\r\n","invo.controller('DeleteUserModalController',function ($scope, $uibModalInstance,id, userService) {\r\n $scope.ok = function () {\r\n userService.delete(id, function(data){\r\n $uibModalInstance.close();\r\n });\r\n };\r\n\r\n $scope.cancel = function () {\r\n $uibModalInstance.dismiss('cancel');\r\n };\r\n});\r\n","/**\r\n * Created by Troy on 4/4/2015.\r\n */\r\ninvo.controller('UserDetailController',function($scope,userService,roleService,$rootScope,$stateParams,$uibModal,auth){\r\n\r\n $scope.user=userService.data;\r\n $scope.current={}\r\n $scope.id=$stateParams.id;\r\n $scope.get = function(id){\r\n userService.get(id).then(function(response){\r\n $scope.current=response.data.data.user;\r\n });\r\n }\r\n\r\n $scope.get($scope.id);\r\n\r\n $scope.delete = function(){\r\n var deleteModal = $uibModal.open({\r\n templateUrl: 'App/user/detail/user-delete-modal.html?ver='+$scope.appVersion,\r\n controller: 'DeleteUserModalController',\r\n size:'sm',\r\n resolve:{\r\n id:function(){\r\n id:userService.data.view.id;\r\n }\r\n }\r\n });\r\n deleteModal.result.then(function (user) {\r\n $scope.$emit('delete-user')\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.add = function(roleId){\r\n userService.addUserRole($scope.user.view.id,roleId);\r\n }\r\n $scope.remove = function(roleId){\r\n userService.removeUserRole($scope.user.view.id,roleId);\r\n }\r\n\r\n $scope.isCurrentUser = function(){\r\n return userService.data.view.id === auth.session.user.id;\r\n }\r\n\r\n $scope.enable= function(){\r\n userService.enable(userService.data.view.id);\r\n }\r\n\r\n $scope.disable= function(){\r\n userService.disable(userService.data.view.id);\r\n }\r\n\r\n $scope.resetPassword = function(){\r\n var resetPasswordModal = $uibModal.open({\r\n templateUrl: 'App/user/detail/reset-password.html?ver='+$scope.appVersion,\r\n controller: 'ResetPasswordModalController',\r\n size:'sm',\r\n resolve: {\r\n user: function () {\r\n return userService.data.view;\r\n }\r\n }\r\n });\r\n resetPasswordModal.result.then(function (data) {\r\n }, function () {\r\n });\r\n }\r\n\r\n});","/**\r\n * Created by Troy on 4/4/2015.\r\n */\r\ninvo.controller('UserFormController',function($scope,userService,roleService,$state,$rootScope,$stateParams){\r\n $scope.user=userService.data;\r\n $scope.id=$stateParams.id;\r\n\r\n $scope.get = function(id){\r\n userService.get(id).then(function(response){\r\n $scope.userForm.$setPristine();\r\n });\r\n }\r\n\r\n if ($scope.id && $scope.id>0){\r\n $scope.get($scope.id);\r\n }\r\n else {\r\n userService.initNewUser();\r\n }\r\n\r\n $scope.isUserExist=function(){\r\n return $scope.user.view.id > 0;\r\n }\r\n\r\n $scope.add = function(roleId){\r\n userService.addUserRole($scope.user.view.id,roleId);\r\n }\r\n $scope.remove = function(roleId){\r\n userService.removeUserRole($scope.user.view.id,roleId);\r\n }\r\n\r\n $scope.save = function(){\r\n if ($scope.user.view.id > 0) {\r\n userService.update($scope.user.view).then(function (data) {\r\n $scope.$emit(\"save-user\");\r\n $state.transitionTo(\"app.users-detail\",{id:$scope.user.view.id});\r\n });\r\n }\r\n else{\r\n userService.create($scope.user.view).then(function (data) {\r\n $scope.$emit(\"save-user\");\r\n $state.transitionTo(\"app.users-detail\",{id:$scope.user.view.id});\r\n });\r\n }\r\n\r\n }\r\n\r\n});","/**\r\n * Created by Troy on 4/4/2015.\r\n */\r\ninvo.controller('UserListController',function($scope,$uibModal,examinerService,$rootScope,$stateParams,auth,blockUI){\r\n $scope.users=examinerService.data;\r\n $scope.q=$stateParams.q;\r\n\r\n $scope.searchData;\r\n $scope.criteriaData;\r\n $scope.orderData='fullname';\r\n $scope.sortData='asc'\r\n $scope.filterByData;\r\n\r\n $scope.statusCB=undefined;\r\n\r\n var myBlock = blockUI.instances.get('userBlock');\r\n $scope.block = function(){\r\n myBlock.start();\r\n }\r\n $scope.block();\r\n\r\n $scope.isOAS=function(){\r\n return auth.session.isOASAdmin() || auth.session.isOASStaff();\r\n }\r\n\r\n $scope.list = function(q,offset,sortBy,filterBy,page){\r\n page = page ? page : 1;\r\n var numberPerPage = 10;\r\n if (page == 1) {\r\n offset = 0;\r\n } else {\r\n offset = (page-1)*numberPerPage;\r\n }\r\n examinerService.list(q,offset,sortBy,filterBy,numberPerPage,page).then(function(){}).finally(function(){myBlock.stop();});\r\n }\r\n\r\n $scope.enabledisableList = [\r\n {id: 1, name: 'Enable'},\r\n {id: 0, name: 'Disable'}\r\n ]\r\n $scope.currentEd;\r\n $scope.itemselectedEd = function (item) {\r\n $scope.currentEd = item;\r\n $scope.edFilterClass='active';\r\n if (item.id==1) {\r\n $scope.statusCB = true;\r\n } else if (item.id==0) {\r\n $scope.statusCB = false;\r\n }\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassEd = function (item) {\r\n if ($scope.currentEd == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n $scope.clearEdFilter=function(){\r\n $scope.currentEd=undefined;\r\n $scope.edFilterClass='';\r\n $scope.statusCB=undefined;\r\n $scope.buildQuery();\r\n }\r\n\r\n $scope.delete = function(id){\r\n var deleteModal = $uibModal.open({\r\n templateUrl: 'App/user/detail/user-delete-modal.html?ver='+$scope.appVersion,\r\n controller: 'DeleteUserModalController',\r\n size:'sm',\r\n resolve:{\r\n id:function(){\r\n return id;\r\n }\r\n }\r\n });\r\n deleteModal.result.then(function (user) {\r\n $scope.$emit('delete-user')\r\n }, function () {\r\n\r\n });\r\n }\r\n\r\n $scope.disable=function(user){\r\n examinerService.disable(user.id).then(function(response){\r\n user.enabled = response.data.data.user.enabled;\r\n\r\n });\r\n }\r\n\r\n $scope.enable=function(user){\r\n examinerService.enable(user.id).then(function(response){\r\n user.enabled = response.data.data.user.enabled;\r\n //userService.getUserStatistic();\r\n });\r\n }\r\n\r\n $scope.sendActivationUrl = function(email){\r\n auth.sendActivationUrl(email);\r\n }\r\n\r\n $scope.orderData='fullname';\r\n $scope.sortData='asc';\r\n\r\n $scope.sortByList = [\r\n {id: 'fullname', name: 'Name'},\r\n {id: 'email', name: 'Email'},\r\n {id: 'university', name: 'University'}\r\n ]\r\n $scope.currentSortBy = $scope.sortByList[0];\r\n $scope.itemselectedSortBy = function (item) {\r\n $scope.currentSortBy = item;\r\n $scope.orderData = item.id;\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSortBy = function (item) {\r\n if ($scope.currentSortBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n $scope.searchByList = [\r\n {id: '', name: 'All '},\r\n {id: 'fullname',name: 'Name '},\r\n {id: 'email', name: 'Email '},\r\n {id: 'university', name: 'University '}\r\n ]\r\n\r\n $scope.currentSearchBy = $scope.searchByList[0];\r\n $scope.itemselectedSearchBy = function (item) {\r\n $scope.currentSearchBy = item;\r\n $scope.searchData = item.id;\r\n $scope.buildQuery();\r\n }\r\n $scope.getClassSearchBy = function (item) {\r\n if ($scope.currentSearchBy == item) {\r\n return 'active';\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n if ($scope.q=='null') $scope.q=\"\";\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData);\r\n\r\n $scope.buildQuery = function () {\r\n\r\n var q = \"\";\r\n\r\n if (($scope.searchData!=undefined && $scope.searchData!='') && ($scope.criteriaData!=undefined)) {\r\n q = q.concat($scope.searchData +\",ilike,\"+\"%\"+$scope.criteriaData+\"%\");\r\n }\r\n\r\n //if searchData is undefined search in all\r\n if (($scope.searchData==undefined || $scope.searchData=='') && ($scope.criteriaData!=undefined)) {\r\n q = q.concat(\"fullname,ilike,%\"+$scope.criteriaData+\"%,\");\r\n q = q.concat(\"email,ilike,%\"+$scope.criteriaData+\"%,\");\r\n q = q.concat(\"university,ilike,%\"+$scope.criteriaData+\"%\");\r\n }\r\n\r\n var filterBy = \"\";\r\n\r\n if ($scope.statusCB!=undefined) {\r\n if ($scope.statusCB == true) {\r\n filterBy = filterBy.concat(\"enabled!b,eq,true\");\r\n } else if ($scope.statusCB == false) {\r\n filterBy = filterBy.concat(\"enabled!b,eq,false\");\r\n }\r\n }\r\n\r\n $scope.filterByData = filterBy;\r\n\r\n var sortBy = $scope.orderData +\",\"+ $scope.sortData;\r\n\r\n //$scope.list(q,0,sortBy);\r\n $scope.list(q,0,sortBy,filterBy);\r\n }\r\n\r\n $scope.resetPassword = function(user){\r\n $stateParams.user = user;\r\n var resetPasswordModal = $uibModal.open({\r\n templateUrl: './app/user/detail/reset-password.html?ver='+$scope.appVersion,\r\n controller: 'ResetPasswordModalController'\r\n });\r\n resetPasswordModal.result.then(function (data) {\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.edit = function(user,i){\r\n $stateParams.user = user;\r\n var editModal = $uibModal.open({\r\n templateUrl: './app/user/detail/edit-user.html?ver='+$scope.appVersion,\r\n controller: 'EditUserModalController'\r\n });\r\n editModal.result.then(function (data) {\r\n $scope.users.list[i]=data;\r\n }, function () {\r\n });\r\n }\r\n\r\n $scope.exportToExcel = function() {\r\n var fs = 'All';\r\n if (($scope.currentEd!=undefined) && ($scope.currentEd!=\"\")) {\r\n fs = $scope.currentEd.id;\r\n }\r\n var sb = $scope.currentSearchBy.name;\r\n var sbString = ''\r\n if ($scope.criteriaData!=undefined && $scope.criteriaData!=\"\") {\r\n sbString = $scope.criteriaData;\r\n }\r\n examinerService.exportToExcel($scope.q,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,fs,sb,sbString);\r\n }\r\n\r\n $scope.setPage = function(page){\r\n if (page < 1 || page > $scope.users.pager.totalPages) {\r\n return;\r\n }\r\n $scope.list($scope.q,0,$scope.orderData +\",\"+ $scope.sortData,$scope.filterByData,page);\r\n }\r\n});"]}