{"version":3,"sources":["app.js","routing.js","actions/controllers/actionCategoriesCtrl.js","actions/controllers/actionCategoriesDetailCtrl.js","actions/controllers/actionsCtrl.js","actions/controllers/actionsDetailCtrl.js","actions/controllers/actionsScheduleCtrl.js","actions/controllers/actionsStudentsAttendanceDetailCtrl.js","actions/controllers/actionsStudentsCtrl.js","actions/controllers/actionsStudentsDetailCtrl.js","actions/directives/wbActionCategoryCombo.js","activities/controllers/ActivityReconciliationRecurringInvoiceDetailCtrl.js","activities/controllers/activitiesCtrl.js","activities/controllers/activityInstructorDetailCtrl.js","activities/controllers/activityReconciliationAttendanceCtrl.js","activities/controllers/activityReconciliationCtrl.js","activities/controllers/activityReconciliationDetailCtrl.js","activities/controllers/activityReconciliationIssuedInvoicesCtrl.js","activities/controllers/activityReconciliationReconciliationCtrl.js","activities/controllers/activityReconciliationRecurringInvoicesCtrl.js","activities/controllers/activityReservationDetailCtrl.js","activities/controllers/activityScheduleDetailCtrl.js","activities/controllers/activityScheduleInstructorsCtrl.js","activities/controllers/activityScheduleStudentsCtrl.js","activities/controllers/activitySchedulesCtrl.js","activities/controllers/activityTariffCtrl.js","activities/controllers/activityTariffDetailCtrl.js","activities/controllers/contractTemplateDetailDialogCtrl.js","activities/controllers/contractTemplatesCtrl.js","activities/controllers/contractsCtrl.js","activities/controllers/contractsDetailCtrl.js","activities/controllers/contractsOpzPlusParamsCtrl.js","activities/controllers/contractsSendContractsParamsCtrl.js","activities/controllers/czMsMtRegistryCtrl.js","activities/controllers/czMsMtRegistryDetailCtrl.js","activities/controllers/czMsMtRegistryExportDetailCtrl.js","activities/controllers/czMsMtRegistryStudentRecordsCtrl.js","activities/controllers/galleryInfoEditDialogCtrl.js","activities/directives/wbActivityCompensationTypeCombo.js","activities/directives/wbActivityTariffsCombo.js","activities/directives/wbActivityWeekEditor.js","activities/directives/wbActivityWeekSelector.js","activities/directives/wbContractTemplateCombo.js","activities/directives/wbContractTemplateTypeCombo.js","activities/directives/wbCzMsMtListUniversalCombo.js","activities/directives/wbEndIssueTypeCombo.js","activities/directives/wbReconciliationDataRangeCombo.js","activities/directives/wbRecurrenceUnitTypeCombo.js","activities/filters/aggregateNotes.js","activities/filters/contractScheduleShort.js","activities/filters/contractTemplateType.js","activities/filters/datePartOccupied.js","activities/filters/wbCzMsMtListUniversalFlt.js","activities/filters/wbRecurrenceUnitTypeFlt.js","activities/models/invoiceBase.js","activities/models/scheduleDayBase.js","activities/models/scheduleResourceBase.js","activities/models/scheduleResourceDetailBase.js","activities/models/scheduleResourceDetailDayBase.js","activities/services/activityInstructorSvc.js","activities/services/activityReservationSvc.js","activities/services/activityScheduleSvc.js","activities/services/activityStudentSettingSvc.js","activities/services/activityTariffSvc.js","activities/services/contractSvc.js","activities/services/contractTemplateSvc.js","activities/services/czMsMtRegistrySvc.js","activities/services/invoiceRecurrenceScheduleSvc.js","common/directives/authDirective.js","common/directives/codeMirror.js","common/directives/errorAlert.js","common/directives/toastUIEditor.js","common/directives/wbAccountingBookCombo.js","common/directives/wbActionCombo.js","common/directives/wbActivityCombo.js","common/directives/wbAddressEdit.js","common/directives/wbAgeRangeWithAddCombo.js","common/directives/wbAlerts.js","common/directives/wbAmortizationScheduleModeCombo.js","common/directives/wbColorPicker.js","common/directives/wbCompensationGroupCombo.js","common/directives/wbCompensationGroupMultiSelect.js","common/directives/wbCourseCategoryCombo.js","common/directives/wbCourseCombo.js","common/directives/wbCourseScheduleCombo.js","common/directives/wbDateTimePicker.js","common/directives/wbEmailCategoryCombo.js","common/directives/wbEmployeeCombo.js","common/directives/wbExcuseThresholdTypeCombo.js","common/directives/wbFranchiseCentralsCombo.js","common/directives/wbGrid3.js","common/directives/wbGroupSelect.js","common/directives/wbHtmlEditor.js","common/directives/wbInfoCardBackTypeCombo.js","common/directives/wbJarvisMenu.js","common/directives/wbOnlinePaymentConfigurationCombo.js","common/directives/wbPreviewStateCodeCombo.js","common/directives/wbRecurrenceEditor.js","common/directives/wbReferenceSourceCombo.js","common/directives/wbReservationStartTimeTypeCombo.js","common/directives/wbSchedulerScaleTypeCombo.js","common/directives/wbSearchFilter.js","common/directives/wbSecurityRoleCombo.js","common/directives/wbSecurityShow.js","common/directives/wbSemesterCombo.js","common/directives/wbSemesterDateRangeFilterTypeCombo.js","common/directives/wbSemesterMultiSelect.js","common/directives/wbSequenceEdit.js","common/directives/wbSparkline.js","common/directives/wbSplitter.js","common/directives/wbSubjectCombo.js","common/directives/wbUserLookup.js","common/filters/accountingBook.js","common/filters/activityScheduleFullName.js","common/filters/compensationGroup.js","common/filters/compensationGroups.js","common/filters/courseFullName.js","common/filters/courseType.js","common/filters/emailCategory.js","common/filters/errorIndicator.js","common/filters/franchiseCentralFlt.js","common/filters/groups.js","common/filters/groupsColors.js","common/filters/level.js","common/filters/phase.js","common/filters/previewStateCode.js","common/filters/referenceSource.js","common/filters/reservationStartTimeType.js","common/filters/semester.js","common/filters/subjectCategory.js","common/filters/userRole.js","common/interceptors/http-auth-interceptor.js","common/services/courseCategorySvc.js","common/services/previewHoursSvc.js","common/services/previewInterestSvc.js","common/services/stateCodesSvc.js","common/services/userRolesSvc.js","courses/controllers/coursesAttendanceCtrl.js","courses/controllers/coursesCopyDetailCtrl.js","courses/controllers/coursesCtrl.js","courses/controllers/coursesDetailCtrl.js","courses/controllers/coursesLeadsCtrl.js","courses/controllers/coursesScheduleCtrl.js","courses/controllers/coursesStudentsCtrl.js","courses/controllers/coursesStudentsDetailCtrl.js","courses/controllers/onlineMeetingsCtrl.js","courses/controllers/onlineMeetingsRecordingsCtrl.js","courses/controllers/studentAmortizationScheduleCtrl.js","courses/controllers/subjectsCtrl.js","courses/controllers/subjectsDetailCtrl.js","courses/directives/wbAcceptCompensationsFromEdit.js","courses/directives/wbContentInfoAccessTimeBaselineCombo.js","courses/directives/wbContentInfoAccessTimeTypeCombo.js","courses/directives/wbContentInfoAccessTypeCombo.js","courses/directives/wbFranchiseCentralSubjectsCombo.js","courses/services/onlineMeetingsSvc.js","crm/controllers/formResponsePreviewDetailCtrl.js","crm/controllers/formResponsesCtrl.js","crm/controllers/formsCtrl.js","crm/controllers/formsDetailCtrl.js","crm/controllers/leadsAdmissionDetailCtrl.js","crm/controllers/leadsAssignCourseDetailCtrl.js","crm/controllers/leadsBindUserAndStudentDetailCtrl.js","crm/controllers/leadsCtrl.js","crm/controllers/leadsDetailCtrl.js","crm/controllers/leadsSelectOpenLeadsDialogCtrl.js","crm/controllers/leadsTabsCrmNotesCtrl.js","crm/controllers/leadsTabsCrmNotesDetailCtrl.js","crm/controllers/leadsTabsDetailCtrl.js","crm/controllers/leadsTabsUserHistoryActionsCtrl.js","crm/controllers/leadsTabsUserHistoryCoursesCtrl.js","crm/controllers/levelsCtrl.js","crm/controllers/levelsDetailCtrl.js","crm/controllers/phasesCtrl.js","crm/controllers/phasesDetailCtrl.js","crm/directives/wbFlagCombo.js","crm/directives/wbFormAccessPermissionsTypeCombo.js","crm/directives/wbFormQuestionTypeCombo.js","crm/directives/wbFormTypeCombo.js","crm/directives/wbLeadSourceTypeCombo.js","crm/directives/wbLeadStatusCombo.js","crm/directives/wbPhaseCombo.js","crm/filters/wbFlag.js","crm/filters/wbFormAccessPermissionsType.js","crm/filters/wbLeadConversionType.js","crm/filters/wbLeadSourceType.js","crm/filters/wbLeadStatus.js","crm/filters/wbLevel.js","crm/filters/wbPhase.js","crm/services/leadSvc.js","crm/services/notRegisteredUserSvc.js","crm/services/phaseSvc.js","dashboard/controllers/dashboardCtrl.js","dashboard/controllers/financeSummary.js","dashboard/controllers/semesterCourseSummary.js","finance/controllers/BankCtrl.js","finance/controllers/BankUnimportantRecoveryDetailCtrl.js","finance/controllers/InvoicesCtrl.js","finance/controllers/InvoicesDetailCtrl.js","finance/controllers/accountingBookCtrl.js","finance/controllers/accountingBookDetailCtrl.js","finance/controllers/bankAccountSelectionDialogCtrl.js","finance/controllers/bankPairedInvoiceCtrl.js","finance/controllers/bankSelectionDialogCtrl.js","finance/controllers/compensationsCoursesCtrl.js","finance/controllers/compensationsCtrl.js","finance/controllers/duePaymentsAmortizationScheduleCtrl.js","finance/controllers/duePaymentsCtrl.js","finance/controllers/duePaymentsPaymentsCtrl.js","finance/controllers/duePaymentsSummaryCtrl.js","finance/controllers/duePaymentsUserInvoicesCtrl.js","finance/controllers/duePaymentsUserPaymentsCtrl.js","finance/controllers/onlinePaymentConfigurationCtrl.js","finance/controllers/onlinePaymentConfigurationDetailCtrl.js","finance/controllers/onlinePaymentsCtrl.js","finance/controllers/paymentsCtrl.js","finance/controllers/paymentsDetailCtrl.js","finance/controllers/paymentsSalesReportParamsCtrl.js","finance/controllers/taxDocumentsCtrl.js","finance/directives/wbBankImportTypeCombo.js","finance/directives/wbOnlinePaymentTypeCombo.js","finance/directives/wbYearCombo.js","finance/filters/invoiceValid.js","finance/services/bankSvc.js","finance/services/compensationsSvc.js","finance/services/taxDocumentsSvc.js","franchise/controllers/franchisesAttendanceSummaryCtrl.js","franchise/controllers/franchisesCtrl.js","franchise/controllers/franchisesEmployeesCtrl.js","franchise/controllers/franchisesEmployeesDetailCtrl.js","franchise/controllers/franchisesEmployeesLicenseDetailCtrl.js","franchise/models/franchiseEmployee.js","franchise/services/franchiseSvc.js","main/controllers/mainCtrl.js","messages/controllers/addressListCtrl.js","messages/controllers/addressSelectorCtrl.js","messages/controllers/emailCtrl.js","messages/controllers/emailTemplateLoadDialogCtrl.js","messages/controllers/emailTemplateSaveDialogCtrl.js","messages/controllers/emailTemplatesAttachmentsDetailCtrl.js","messages/controllers/emailTemplatesCtrl.js","messages/controllers/emailTemplatesDetailCtrl.js","messages/controllers/sentEmailStatisticsCtrl.js","messages/controllers/sentEmailsCtrl.js","messages/controllers/sentEmailsEmailDetailCtrl.js","messages/controllers/sentEmailsGroupDetailCtrl.js","messages/controllers/smsCtrl.js","messages/directives/wbEmailTemplateCombo.js","messages/directives/wbRecipientGroupCombo.js","messages/directives/wbRecipientList.js","messages/filters/emailGroupStatus.js","messages/services/emailAttachmentsSvc.js","messages/services/emailTemplatesSvc.js","messages/services/messageTemplateSvc.js","messages/services/messagesSvc.js","messages/services/recipientSvc.js","messages/services/sentEmailsSvc.js","navigation/controllers/asideCtrl.js","navigation/controllers/headerCtrl.js","previewHours/controllers/previewHoursCtrl.js","previewHours/controllers/previewHoursSucessSummaryCtrl.js","previewHours/controllers/previewInterestCtrl.js","previewHours/controllers/stateCodesCtrl.js","promo/controllers/membershipCtrl.js","promo/filters/wbMembershipAppliesTo.js","rents/controllers/itemTypesCtrl.js","rents/controllers/itemTypesDetailCtrl.js","rents/controllers/rentCategoriesCtrl.js","rents/controllers/rentCategoriesDetailCtrl.js","rents/controllers/rentCategoryGroupsCtrl.js","rents/controllers/rentCategoryGroupsDetailCtrl.js","rents/controllers/rentDetailAddItemDetailCtrl.js","rents/controllers/rentItemTabsRentsCtrl.js","rents/controllers/rentItemsCtrl.js","rents/controllers/rentItemsDetailCtrl.js","rents/controllers/rentTabsItemsCtrl.js","rents/controllers/rentsCtrl.js","rents/controllers/rentsDetailCtrl.js","rents/directives/wbItemConditionTypeCombo.js","rents/directives/wbItemSelectionTypeCombo.js","rents/directives/wbRentCategoryCombo.js","rents/directives/wbRentCategoryGroupCombo.js","rents/directives/wbRentHourStartTypeCombo.js","rents/directives/wbRentItemCombo.js","rents/directives/wbRentItemMultiSelect.js","rents/directives/wbRentItemTypeCombo.js","rents/directives/wbRentStatusTypeCombo.js","rents/directives/wbRentingPeriodTypeCombo.js","reports/controllers/courseStudentFluctuationCtrl.js","reports/controllers/coursesAttendanceSummaryCtrl.js","reports/controllers/franchiseAttendanceSummaryCtrl.js","reports/controllers/oneOffsSummaryCtrl.js","reports/controllers/registeredAttendanceCtrl.js","reports/controllers/registrationsSummaryCtrl.js","reports/directives/wbCourseStudentFluctuationTypeCombo.js","reports/services/reportsSvc.js","reservations/controllers/domainsCtrl.js","reservations/controllers/domainsDetailCtrl.js","reservations/controllers/domainsSpecializationsCtrl.js","reservations/controllers/domainsSpecializationsDetailCtrl.js","reservations/controllers/reservationSchedulesCtrl.js","reservations/services/domainsSpecializationsSvc.js","rfidCards/controllers/attendanceLogCtrl.js","rfidCards/controllers/attendanceLogDetailCtrl.js","rfidCards/controllers/attendanceLogMpsvReportParamsCtrl.js","rfidCards/controllers/attendanceLogMpsvStudentReportParamsCtrl.js","rfidCards/controllers/attendanceLogSupportDetailCtrl.js","rfidCards/controllers/deviceRegistrationCtrl.js","rfidCards/controllers/deviceRegistrationDetailCtrl.js","rfidCards/controllers/driverDownloadDetailCtrl.js","rfidCards/controllers/efsReportImportDetailCtrl.js","rfidCards/controllers/logUploadContactCtrl.js","rfidCards/directives/rfidCardUserTypeCombo.js","rfidCards/filters/rfidCardUserType.js","rfidCards/services/rfidCardsSvc.js","rfidCards/services/rfidDeviceRegistrationSvc.js","schedule/controllers/scheduleCourseDetailCtrl.js","schedule/controllers/scheduleCtrl.js","schedule/controllers/scheduleEventDetailCtrl.js","setting/controllers/ageRangesCtrl.js","setting/controllers/ageRangesDetailCtrl.js","setting/controllers/classroomAvailabilitySchedulesCtrl.js","setting/controllers/classroomsCtrl.js","setting/controllers/classroomsDetailCtrl.js","setting/controllers/compensationGroupsCtrl.js","setting/controllers/compensationGroupsDetailCtrl.js","setting/controllers/compensationTransferDetailCtrl.js","setting/controllers/compensationTransferDetailTransferDetailCtrl.js","setting/controllers/courseTypesCtrl.js","setting/controllers/courseTypesDetailCtrl.js","setting/controllers/holidayCalendarsCtrl.js","setting/controllers/holidayCalendarsDetailCtrl.js","setting/controllers/newsCtrl.js","setting/controllers/newsDetailCtrl.js","setting/controllers/preferredBookingDetailCourseRegistrationDetailCtrl.js","setting/controllers/preferredBookingDetailCtrl.js","setting/controllers/semestersCtrl.js","setting/controllers/semestersDetailCtrl.js","setting/controllers/terminalsCtrl.js","setting/controllers/terminalsDetailCtrl.js","setting/directives/wbAmendTypeCombo.js","setting/directives/wbCourseTypeImageCombo.js","setting/directives/wbDestinationCourseCombo.js","setting/directives/wbHolidayCalendarCombo.js","setting/directives/wbHolidayCalendarWithAddCombo.js","setting/services/compensationTransferSvc.js","setting/services/courseTypeImageSvc.js","setting/services/holidayCalendarSvc.js","setting/services/newsSvc.js","setting/services/preferredBookingSvc.js","storage/controllers/picturesCtrl.js","storage/controllers/picturesDetailCtrl.js","storage/controllers/picturesSelectDlgCtrl.js","storage/controllers/protectedStorageCtrl.js","storage/controllers/protectedStorageSelectDlgCtrl.js","storage/services/picturesSvc.js","storage/services/protectedStorageSvc.js","survey/controllers/surveyAnswerDetailCtrl.js","survey/controllers/surveyAnswersCtrl.js","survey/controllers/surveyDetailCtrl.js","survey/controllers/surveysCtrl.js","survey/directives/wbSurveyCombo.js","survey/directives/wbSurveyQuestionTypeCombo.js","survey/services/surveyResponseSvc.js","system/controllers/accountingSettingsCtrl.js","system/controllers/clientSettingsCtrl.js","system/controllers/dataExportHistoryCtrl.js","system/controllers/htmlContentCtrl.js","system/controllers/mainSettingsCtrl.js","system/controllers/notificationSettingsCtrl.js","system/controllers/settingSettingsCtrl.js","system/controllers/settingsCtrl.js","system/controllers/smsHistoryCtrl.js","system/controllers/textsSettingsCtrl.js","system/directives/wbClientThemeCombo.js","system/directives/wbDueDateTypeCombo.js","system/directives/wbLanguageAliasCombo.js","system/directives/wbMandatoryTypeCombo.js","system/directives/wbNotificationTypeCombo.js","system/directives/wbRfidLogoTypeCombo.js","system/directives/wbStorageImageCombo.js","system/services/accountingSettingsSvc.js","system/services/contentSvc.js","system/services/dataExportHistorySvc.js","system/services/dataExportSettingSvc.js","system/services/mainSettingsSvc.js","system/services/smsHistorySvc.js","users/controllers/EmployeesTimeSheetReportParamsCtrl.js","users/controllers/consentsDefinitionsCtrl.js","users/controllers/consentsDefinitionsDetailCtrl.js","users/controllers/employeeAvailabilitySchedulesCtrl.js","users/controllers/employeesCtrl.js","users/controllers/employeesDetailCtrl.js","users/controllers/groupsCtrl.js","users/controllers/groupsDetailCtrl.js","users/controllers/referenceSourceCtrl.js","users/controllers/referenceSourceTimeDevelopmentCtrl.js","users/controllers/requestConsentFromAllCtrl.js","users/controllers/selectWeekDateRangeDlg.js","users/controllers/studentsActionsCtrl.js","users/controllers/studentsAttendanceDetailCtrl.js","users/controllers/studentsAttendanceSummaryCtrl.js","users/controllers/studentsCoursesCtrl.js","users/controllers/studentsCtrl.js","users/controllers/studentsDetailCtrl.js","users/controllers/studentsTaxDeductionReportParamsCtrl.js","users/controllers/userRolesCtrl.js","users/controllers/userRolesDetailCtrl.js","users/controllers/usersConsentsCtrl.js","users/controllers/usersConsentsDetailCtrl.js","users/controllers/usersCtrl.js","users/controllers/usersDetailCtrl.js","users/controllers/usersStudentsCtrl.js","users/directives/wbAvailabilityScheduleEditor.js","users/directives/wbConsentDefinitionCombo.js","users/directives/wbConsentTypeCombo.js","users/directives/wbRfidAccessGroupTimeScheduleDayEditor.js","users/directives/wbRfidAccessTypeCombo.js","users/filters/wbAvailabilityScheduleFilter.js","users/filters/wbConsentType.js","users/filters/wbRfidAccessGroupTimeScheduleDayFilter.js","users/services/consentDefinitionSvc.js","users/services/employeeAvailabilitySchedulesSvc.js","users/services/groupSvc.js","activities/models/employee/employee.js","activities/models/employeeDetail/employeeDetail.js","activities/models/employeeDetail/employeeDetailDay.js","activities/models/reconciliation/reconciliation.js","activities/models/reconciliation/reconciliationAttendance.js","activities/models/schedule/schedule.js","activities/models/schedule/scheduleWeek.js","activities/models/scheduleDetail/scheduleDetail.js","activities/models/scheduleDetail/scheduleDetailDay.js","activities/models/student/student.js","activities/models/studentDetail/studentDetail.js","activities/models/studentDetail/studentDetailDay.js","activities/models/recurringInvoiceDetail/recurringInvoice.js","activities/models/recurringInvoiceDetail/recurringSchedule.js","wb-directives.js","wb-directives.tpl.js"],"names":["wbApp","angular","module","run","$rootScope","$translate","$on","event","currentRoute","previousRoute","title","instant","label","convertDateStringsToDates","input","key","value","date","hasOwnProperty","isNaN","moment","ISO_8601","isValid","toDate","convertDatesToDateString","_","cloneDeepWith","Date","endsWith","utc","format","config","$logProvider","debugEnabled","$datepickerProvider","extend","defaults","startWeek","autoclose","container","useNative","dateFormat","$timepicketProvider","timeFormat","$modalProvider","animation","placement","backdrop","$popoverProvider","html","localStorageServiceProvider","setPrefix","setStorageType","setNotify","$httpProvider","transformResponse","push","data","headerGetter","transformRequest","header","$translateProvider","useSanitizeValueStrategy","preferredLanguage","prototype","toISOString","this","constant","tenantInfo","uiGmapGoogleMapApiProvider","configure","v","libraries","Number","pad","size","s","String","length","$routeProvider","when","templateUrl","controller","otherwise","redirectTo","$scope","$modal","subjectsSvc","setSelectedActionCategory","actionCategory","selectedActionCategory","gridSettings","columns","dataField","caption","dataType","width","sortOrder","e","actionCategories","getAllForActionsAsync","ActionCategory","onRowSelected","onRowEdit","detailDialogPromise","$promise","then","model","copy","show","onRowAdd","createNew","onRowDelete","remove","tabs","template","activeTab","scope","$new","tenantSettingSvc","enableNewClientDesign","settings","modelOrig","detailIsUnchanged","equals","onDetailSave","success","$hide","error","detailError","isSaving","id","update","insert","semesterSvc","courseSvc","securitySvc","courseRegistrationSvc","setSelectedAction","action","refresh","selectedAction","gridInstance","clearSelection","$broadcast","isInAccountingBookRole","isInRole","filteredActions","getDefaultAsync","semester","semesterID","actions","getAllActionsAsync","refreshActionRecord","courseID","selectRows","getSemesterPercentFilled","getSemesterFilled","getSemesterCapacity","sumBy","onFilterApplied","rows","onSemesterChange","name","raw","precision","customCommands","text","isVisible","callback","getAllForCourse","forEach","courseRegistration","sendRegistrationNotification","courseRegistrationID","onRowCopy","collection","onActionSave","$watch","newValue","oldValue","onCourseSave","detailTabs","onDeletePictureBtnClick","picture","pictures","imageUri","picturesSelectDlgPromise","showPictureSelect","onPicturesSelected","p","find","courseScheduleSvc","isActive","loaded","setCanAddNewRow","actionSchedules","canAddNewRow","actionInd","getAllAsync","shouldDisableAdd","selectedSchedule","eventDetailDialogPromise","hideActionChange","onSave","onActionScheduleChanged","sendEmailNotification","sendSmsNotification","$emit","attendanceSvc","isBusy","getStudentCourseAttendance","studentID","atts","onAfterSuccessSave","$q","$window","$filter","gridSortSvc","tenantSettings","firstLesson","setUpGrid","columnOption","allowMultiAttendance","actionRegistrations","calculateSortValue","sortHumanFullName","calculateCellValue","rowData","contactPhone","type","onRowPrepared","rowType","component","getKeyByRowIndex","rowIndex","attendanceStatusNotPresent","rowElement","addClass","onCellPrepared","columnIndex","cellElement","mousemove","studentBirthday","attr","row","arrear","addPaymentPromise","isAddDuePayment","paymentDetail","paymentID","invoiceForType","invoiceID","amount","selectedDate","open","attendanceDetailDialogPromise","onActionRegistrationChanged","notificationSent","showArrearInsteadOfPayments","column","selectedRegistration","webooker_courses_models","CourseRegistration","all","actionRegistration","messageBoxSvc","localStorageService","extendModel","setIsBusy","initializeModel","registeredAttendance","allowDiscounts","calcExpectedDueDate","registrationDate","calculatedDueDate","dueDate","errorResult","isReady","tab","disabled","onRegistrationDateChange","onStudentChange","onAttendanceCountChange","updateReservedPlaces","reservedPlaces","confirmUpdate","updateInvoice","showConfirmClientNotification","userSetting","showSendSmsNotification","notificationConfig","saveManualAdjustmentTextToLocalStorage","invoice","isModified","showMessageDlg","message","buttons","isSupported","manualAdjustmentLine","lines","line","lineType","runtimeManualAdjustmentType","set","percent","addInvoiceLine","manualAdjustmentLineType","newLine","addManualAdjustmentLine","get","removeInvoiceLine","index","removeManualAdjustmentLine","addManualAdjustmentLineDropdown","click","directive","$timeout","formatResult","formatSelection","restrict","require","priority","link","elm","attrs","ctrl","models","$","select2","placeholder","dropdownAutoWidth","allowClear","minimumResultsForSearch","sortBy","a","localeSort","matcher","term","toUpperCase","indexOf","$render","$viewValue","$parsers","unshift","viewValue","parseInt","$formatters","bind","$observe","invoiceRecurrenceScheduleSvc","minDate","startDate","startOf","subtract","onScheduleSave","invoiceRecurrenceScheduleID","activitySvc","classroomSvc","accountingBookSvc","protectedStorageSvc","refreshData","reselect","resolve","reject","selectedRowKeys","getSelectedRowKeys","getAllBySemesterIDAsync","activities","setSelectedActivity","activity","selectedActivity","loadGalleryInfo","activityDetail","picturesFolders","galleryInfoBusy","findGalleryInfoByPaths","galleryInfoData","keyBy","o","galleryDirectoryPath","protectedStorageEdit","filterOptions","filterText","defaultAccountingBookID","classroomID","isNew","accountingBookID","activityDetailOrig","promises","modelPromise","getByActivityID","activityID","onActivityDetailSave","hide","protectedStorageSelectDlgPromise","galleryInfoEditDlgPromise","showProtectedStorageSelect","selectFoldersOnly","onFilesSelected","files","objectUri","removePicture","pictureUrl","splice","startEditInfo","galleryDirectory","onGalleryInfoSave","newModel","activityInstructorSvc","employeeDetailModel","days","onDataSourceChange","applyChanges","instructorsOrig","onEmployeeChange","employeeID","getAllByEmployeeAndActivity","instructorDetailModel","instructors","schedules","selection","createEmployeeDetailModel","onWeekSelectionChange","call","saveActivityInstructorDetailChanges","saveAsync","onActivityInstructorSave","reason","activityInstructorDetailError","activityReconciliationSvc","attendance","reloadData","getStudentsAttendanceByActivity","reasonCode","acivityReconciliationAttendanceFilterOptions","acivityReconciliationAttendanceGridOptions","sortInfo","fields","directions","columnDefs","field","cellFilter","displayName","noCommandColumn","disabledField","loadData","selectedStudent","students","getStudentsByActivity","reconciliationDataRange","fromDate","onStudentSelected","setUpRemainingExcuses","getAvailableExuses","remainingExcusesSparklineData","map","excusesByDate","item","noOfExcuses","broadcastStudentSelectionChanged","studentFullName","onDataRangeChanged","hasAttendance","sparklineOpts","tooltipFormatter","sparkline","options","x","y","refreshByStudentAndActivity","activeSemester","semesterId","onActivityChange","student","gridOptions","hideFooter","multiSelect","reconcileMinDate","reconcileMaxDate","reconcileFrom","reconcileTo","reconciliation","getReconciliationDetail","activityReconciliationID","reconciliationNameChanged","tariffFullName","getMinDateRange","getMaxDateRange","activityStudentSetting","tariffName","tariffPrice","i","isSelected","reconciliationOrig","add","getToDateRange","selectDateRange","getReconciliationName","rangeChanged","from","to","resetFields","onReconciliationNameChange","newName","onSelectionChanged","isSaveDisabled","isInvoiceEmpty","saveChanges","updateReconciliationDetail","insertReconciliationDetail","invoiceSvc","relatedInvoices","getInvoiceEvidenceByActivityAndStudent","relatedGridFilterOptions","relatedGridOptions","smHide","mdHide","sort","align","customCmds","command","disabledAreSelectable","hideDelete","isRecurring","isActivite","getByStudentAndActivity","acivityReconciliationReconciliationFilterOptions","acivityReconciliationReconciliationGridOptions","selected","onPrintInvoice","onSendReconciliationInfo","deleteReconciliationDetail","sendReconciliationNotification","recurringInvoices","getAllForStudentAndActivity","acivityReconciliationRecurringInvoiceFilterOptions","acivityReconciliationRecurringInvoicesGridOptions","activityReservationSvc","activityStudentSettingSvc","studentDetailModel","reservationsOrig","res","getAllByStudentAndActivity","reservationDetailModel","reservations","setting","createStudentDetailModel","activityTarifOrig","saveActivityReservationDetailChanges","tar","activitySetting","resources","onActivityReservationSave","activityReservationDetailError","activityScheduleSvc","scheduleDetailModel","scheduleWeeks","apply","saveActivityDetailChanges","activityScheduleDetailError","weeks","onScheduleDetailSave","activityWeeks","sw","selectedWeeks","sweek","w","week","weekNo","startDay","isSame","webooker_acivity_models","ScheduleDetail","slice","getWeekModelByIntervals","singlePeriodProgramOnly","acivityScheduleInstructorsGridOptions","sortHumanFullName2","monday","tuesday","wednesday","thursday","friday","saturday","notes","activityInstructorsDetailError","instructor","activityInstructorsnDetailError","acivityScheduleStudentsGridOptions","sortable","activitiesForSemester","first","changeActivity","activityId","realod","getWeeksAsync","onWeekSelected","scheduleDetailModelOrig","activityTariffSvc","activityTariffs","getAllNonDeletedAsync","activityTariffID","contractTemplateSvc","isLoading","onContractTemplateTypeChange","typeId","getSampleByType","templateSample","templateData","err","onSaveSuccessful","htmlEditorComponent","setContractTemplateId","newId","contractTemplateId","option","modelWasModified","setVariables","variables","getById","getVariablesByType","contractTemplateType","endUpdate","modelIsUnchanged","onReloadTemplate","onTemplateSelected","onNewTemplate","showNewDialog","dialogPromise","onRenameTemplate","onSaveTemplate","onDeleteTemplate","deleteTemplate","onGeneratePreview","window","htmlEditorOptions","height","valueType","readOnly","toolbar","items","acceptedValues","multiline","tableContextMenu","enabled","mediaResizing","allowSoftLineBreak","dataSource","escapeChar","bindingOptions","onContentReady","onValueChanged","undefined","customizeModules","history","delay","maxStack","contractSvc","groupSvc","preFilter","contractsRaw","groups","groupIDs","values","customFilter","contracts","filter","intersectionWith","studentGroupsIds","g1","g2","getAll","setSelectedContract","onPrintContractByType","contract","selectedContract","keyExpr","shouldShowColumnChooser","visible","fullName","studentName","studentMiddleName","studentSurname","userName","userMiddlename","userSurname","contractSchedules","encodeHtml","allowFiltering","allowHeaderFiltering","accountingBookId","getContractTemplateIdByType","contractTemplatesInfos","sendContractsParamsDialogPromise","beginGroup","opzPlusParamsDialogPromise","onContractSave","transformModelForEdit","onDeleteSchedule","schedule","onAddSchedule","active","startTime","endTime","food","sunday","onActiveClick","daySchedule","modelForSave","transformModelForSave","isFormValid","groupId","endOf","toJSON","editContractModel","contractTemplateType0Enabled","contractTemplateType0","contractTemplateType1Enabled","contractTemplateType1","contractTemplateType2Enabled","contractTemplateType2","contractTemplateType3Enabled","contractTemplateType3","contractTemplateType4Enabled","contractTemplateType4","contractTemplateType6Enabled","contractTemplateType6","contractTemplateType7Enabled","contractTemplateType7","typesToSend","sendContracts","czMsMtRegistrySvc","findLatestByActivity","czMsMtRegistry","setSelectedStudent","record","selectedRecord","parentFullName","userMiddleName","studentId","recordId","shouldDisableDelete","isLast","exportDialogPromise","dataP","onRegistryDetailSave","detailSaveAsNewImpl","dataCopy","detailSaveImpl","lastValidatedModel","changeStudentId","changeActivityId","onSaveAsANewRecord","validate","onValidate","isValidating","alert","requireSpecialEducationChanged","requireSpecialEducation","setRequireSpecialEducation","validFromUtc_help","kodVety_help","zmendat_help","validToUtc_help","zahdat_help","izo_help","cast_help","newExportModel","getInfoByRange","activitiesComboInstance","activityIds","initExportResponse","exportResponse","errors","filesToDownload","onDateRangeChanged","isBefore","isGenerating","getDownloadUrl","downloadUri","getFileName","split","pop","onGenerateExport","exportToXml","result","onErrorClick","onDruhProvozuChanged","prumDobaCelodenniProvoz","prumDobaPolodenniProvoz","prumDobaInternatniProvoz","activitiesCombo","displayExpr","valueExpr","showSelectionControls","maxDisplayedTags","itemTemplate","onInitialized","selectedStudentInd","studentRecords","findByStudent","studentInd","studentRecordsGridSettings","selectedRecord1","images","detailGalleryEditTabs","updateGalleryInfo","paymentType","on","$apply","$setViewValue","tariff","price","ngModel","replace","inLineNote","scheduleOnly","foodSupport","singlePeriod","elem","selectedDay","onNoteClick","day","createScheduleModel","restrictToSchedules","Schedule","newRow","idx","Object","defineProperty","enumerable","configurable","r","c","val","ngChange","showClearButton","init","getAllWithFilter","listName","allLists","lists","multiple","maximumSelectionSize","Array","isArray","join","n","f","reduce","asyncResult","$resolved","$stateful","ns","InvoiceBase","isReccuring","invoiceLineKindergartenCustomUnitPrice","invoiceLineKindergartenOneOffUnitPrice","_invoiceLineKindergartenLunchQty","_invoiceLineKindergartenSnackQty","_invoiceLineKindergartenLatePickupQty","initLocalization","invoiceLineKindergartenFeeName","invoiceLineKindergartenFeeReccuringName","invoiceLineKindergartenOneOffName","invoiceLineKindergartenLunchName","invoiceLineKindergartenSnackName","invoiceLineKindergartenLatePickupName","invoiceLineKindergartenCustomName","initDataByInvoiceDTO","invoiceDTO","invoiceDate","operatorID","customerOperatorID","taxDate","isVATPayer","lineItems","li","invoiceLineType","invoiceLineKindergartenSnackQty","quantity","invoiceLineKindergartenSnackUnitPrice","unitPrice","invoiceLineKindergartenLunchQty","invoiceLineKindergartenLunchUnitPrice","invoiceLineKindergartenLatePickupQty","invoiceLineKindergartenLatePickupUnitPrice","invoiceLineKindergartenFeeQty","invoiceLineKindergartenFeeUnitPrice","invoiceLineKindergartenFeeReccuringQty","invoiceLineKindergartenFeeReccuringUnitPrice","invoiceLineKindergartenOneOffQty","invoiceLineKindergartenCustomQty","getInvoiceDTO","total","invoiceSumPrice","customerStudentID","invoiceLineKindergartenSnackPrice","invoiceLineKindergartenLunchPrice","invoiceLineKindergartenLatePickupPrice","invoiceLineKindergartenFeeReccuringPrice","invoiceLineKindergartenFeePrice","invoiceLineKindergartenOneOffPrice","invoiceLineKindergartenCustomPrice","notRounded","Math","round","noOfLunches","noFirstSnacks","noSecondSnacks","sumLatePickupHours","ScheduleDayBase","normalizeDate","mvalue","hours","minutes","getUnboundedMinTimeValue","getUnboundedMaxTimeValue","getMinTimeValue","propertyName","nullIfNoValue","valueSet","d","prop","hour","minute","getMaxTimeValue","maxDate","getSchedulesByDay","sch","dayOfWeek","dateIndicia","firstPeriodStartDate","firstPeriodEndDate","secondPeriodStartDate","secondPeriodEndDate","isoWeekday","isTimeIndeterminate2","daySchedules","min","valueDate","valueMin","scheduleValue","schDate","schMin","isBoolIndeterminate2","ScheduleResourceBase","initialize","selectedSchedules","getSchedulesByDayImpl","timeCompare","vr","p1","p2","getScheduleIndiciesByDay","fpsd","spsd","selectedSch","isNullOrWhitespace","daysEnum","ScheduleResourceDetailBase","resourceID","createDayModel","dayName","notScheduled","notScheduledAM","notScheduledPM","cnt","amActive","pmActive","ScheduleResourceDetailDayBase","constructor","parent","getTimeValue","dayReservations","relevantReservations","getRelevantReservations","ret","activityScheduleID","reservation","getReservationsByDay","notScheduledProperty","getReservationByScheduleID","normalizeTimeValue","scheduleDate","scheduleMinutes","normalizedValue","valueMinutes","year","month","isTimeIndeterminate","rDate","rvalue","getBoolValue","getStringValue","isBoolIndeterminate","isStringIndeterminate","getAMNotScheduled","getPMNotScheduled","calculateProperties","createReservation","applyChangesToTimeProperty","applyChangesToBoolProperty","applyChangesToStringProperty","getReservationIndexByScheduleID","hasFirstPeriod","hasSecondPeriod","firstPeriodStartDateChanged","firstPeriodEndDateChanged","secondPeriodStartDateChanged","secondPeriodEndDateChanged","notesChanged","rindex","_firstPeriodStartDate","_firstPeriodEndDate","_secondPeriodStartDate","_secondPeriodEndDate","_notes","firstPeriodStartDateMin","firstPeriodEndDateMax","secondPeriodStartDateMin","secondPeriodEndDateMax","firstPeriodStartDateIndeterminate","firstPeriodEndDateIndeterminate","secondPeriodStartDateIndeterminate","secondPeriodEndDateIndeterminate","notesIndeterminate","firstPeriodStartDateNotScheduled","firstPeriodEndDateNotScheduled","secondPeriodStartDateNotScheduled","secondPeriodEndDateNotScheduled","getActive","setActive","getAmActive","setAmActive","getPmActive","setPmActive","factory","$resource","$http","repositorySvc","notificationSvc","BuildWeekModel","activityinstructors","employeeHash","employee","Employee","employeeFullName","scheduleIDs","sidx","deferred","defer","promise","method","url","status","headers","fatalNotify","notifyError","translateError","EmployeeDetail","notifyInfo","activityReservations","studentHash","Student","StudentDetail","bySemesterAndActivity","lastSemesterID","lastActivityID","ActivitySchedules","getAllBySemesterAndActivityID","save","reload","getAsync","customGet","scheduleModel","endDate","toBeSendToServer","getToBeSendToServer","ActivityStudentSetting","delete","successCallback","errorCallback","activityStudentSettingID","origData","nonDeleted","ActivityTariffs","allActivityTariffs","isDeleted","entity","entityInserted","entityUpdated","entityRemoved","Contract","transformDayModelForEdit","dayModel","transformDayModelForSave","midnight","diff","userId","dfAccountingBookPromise","acc","expanded","customPost","rentCategoryId","customDelete","customPutWithParams","userFullName","contractTemplatesIds","contractId","contractTemplateTypes","customPostWithParams","ContractTemplate","contractTemplates","m","CzMsMtRegistry","getStudent","getActivity","export","saveToLocalStorage","izo","cast","provoz","jazyK_O","fromDTOToModel","listsCache","fromModelToDTO","validFromUtc","okresb","okresb2","dto","startsWith","substring","trida","kstpr","stpr","sP_OBVOD","koD_ZAH","zpusob","koD_VETY","koD_ZMEN","druhProvozu","rozliseni","koD_ZAKA","tyP_TR","tyP_TR2","zvj","nadani","sz","zz","pspo","iD_ZNEV","rodc","personalIDNumber","birthday","pohlavi","gender","last","assign","fromDateUtc","toDateUtc","InvoiceRecurrenceSchedule","query","reccurenceUnitTypeID","repeatEveryNoOfUnits","endAfterNoOfIssues","RecurringSchedule","initData","getBySemesterIDAndActivityID","endAtSpecificDate","endIssueTypeID","defaultSnackPrice","defaultLunchPrice","getDTO","console","log","uiCodemirrorConfig","compile","isUndefined","CodeMirror","Error","postLink","iElement","iAttrs","codemirrot","uiCodemirrorAttr","codemirrorDefaultsKeys","codemirror","codeMirror","codemirrorOptions","$eval","uiCodemirror","uiCodemirrorOpts","tagName","fromTextArea","cm_el","append","newCodemirrorEditor","keys","newValues","isObject","setOption","safeViewValue","setValue","instance","getValue","$evalAsync","uiRefreshAttr","uiRefresh","newVal","oldVal","isFunction","onLoad","serverError","languageService","currentLangKey","transformMarkdownIn","element","editor","toastui","Editor","el","initialValue","hideModeSwitch","initialEditType","language","events","change","markDown","getMarkdown","toolbarItems","removeHook","test","setHTML","setMarkdown","isDefault","subjectName","course","filled","capacity","courses","newCourses","linkSemesterId","newActivities","location","iElem","defaultLocation","longitude","latitude","mapZoom","markerOptions","draggable","labelContent","labelAnchor","labelClass","control","mapCenter","markerEvents","dragend","marker","eventName","args","lat","lng","markerPos","getPosition","ageRangeSvc","disableAddBtn","onAddClick","onDataSaved","ageRangeID","$alert","queue","getQueue","$watchCollection","newCollection","oldCollection","newMessage","myAlert","content","amortizationScheduleMode","onColorClick","color","target","css","webooker_utils","ColorUtils","rgbToInt","colorUtils","intToRgb","children","compensationGroupSvc","getLookupActiveAsync","$modelValue","newModels","courseCategorySvc","courseCategories","orderBy","courseCategory","courseCategoryID","courseFullName","courseSchedule","teacher","courseId","getAllSortedAsync","courseScheduleID","newSchedules","datetimepicker","pickDate","pickTime","useMinutes","useSeconds","minuteStepping","defaultDate","disabledDates","icons","time","up","down","picker","getDate","setDate","inputVal","employeeSvc","employees","getAllActiveAsync","newEmployees","franchiseCentral","alias","tenantID","franchiseCentrals","fc","gridDataSource","onDelete","onEdit","onAdd","onCopy","resource","idPrefix","tElem","tAttrs","pre","clickTimer","lastRowCLickedId","idPrefixFixed","savedColumnVisibility","defaultOptions","cacheEnabled","rowAlternationEnabled","showRowLines","focusStateEnabled","hoverStateEnabled","filterRow","searchPanel","paging","pageSize","pager","showInfo","showPageSizeSelector","showNavigationButtons","showOperationChooser","groupPanel","mode","editing","allowUpdating","allowDeleting","allowAdding","proxyUrl","onExporting","exportVisibleColumnsOnly","beginUpdate","col","onExported","allowColumnResizing","remoteOperations","selectedRowsInfo","prepareToolButtons","selectedRowsData","onRowClick","getSelectedRowsData","clearTimeout","raiseOnEdit","setTimeout","masterDetail","columnChooser","stateStoring","storageKey","ignoreColumnOptionNames","calculateFilterExpression","filterValue","selectedFilterOperation","filterExpressionWithoutAccents","shouldDisableEdit","detailSetting","detailOnSelectionChanged","detailonRowPrepared","cellTemplate","allowGrouping","allowHiding","allowReordering","allowResizing","allowSorting","commandMenuDS","detailCommandMenuDS","menuItemClicked","itemData","showDeleteMsg","contextMenu","DevExpress","ui","dxContextMenu","appendTo","onItemClick","position","offset","alternativeInvocationMode","shouldDisableExportMenu","disable","shouldShowAdd","shouldDisableCopy","shouldShowEdit","shouldShowCopy","shouldShowDelete","menuItemCanBeginGroup","menu","atLeastOneVisible","isDisabled","isBeginGroup","toLowerCase","commandColHeaderBtn","icon","onClick","submenuShowing","ds","menuItem","detailSubmenuShowing","detailMenuItemClicked","_options","parentData","disableDeleteConfirmation","headerCellTemplate","showInColumnChooser","autoSizeGrid","repaint","newHeight","significantParent","closest","outerHeight","prevAll","nextAll","removeToolButtons","exportMenuElementId","pagerDiv","filterRowSwithElementId","exportButtonElementId","exportDiv","contextExportMenu","Globalize","formatMessage","workbook","ExcelJS","Workbook","worksheet","addWorksheet","excelExporter","exportDataGrid","autoFilterEnabled","xlsx","writeBuffer","buffer","fileName","saveAs","Blob","prependTo","dxButton","stateResetButtonElementId","dxDropDownButton","useSelectMode","splitButton","stylingMode","hint","dropDownOptions","minWidth","showColumnChooser","state","onButtonClick","filterExpr","getCombinedFilter","gridData","DataSource","store","paginate","load","done","origOnCellPrepared","onDisposing","off","onSplitterPaneResized","onActiveTabChanged","post","parentTab","description","groupID","resizeEditor","prev","scrollWindow","taBind","jarvismenu","accordion","speed","closedSign","openedSign","fn","opts","$this","each","parents","slideDown","is","visibleIndex","close","parentIndex","slideUp","removeClass","hasClass","onlinePaymentConfigurationSvc","getProviderTypeStr","providerType","configs","stateCodesSvc","stateCode","stateCodes","ngEnable","recurrence","defaultRecurrence","repeatByWeeks","endByType","range","rangeDays","endByOccurenceCount","repeatEveryWeekday","weekDayIdx","referenceSourceSvc","added","reservationStartTimeType","required","searchText","userRolesSvc","roles","attributes","wbSecurityShow","shouldReplaceContent","wbSecurityUnauthorizedContent","dateFilter","isMain","semesters","setDefault","destroyed","initialized","read","amt","autoNumeric","aSign","aDec","aSep","altDec","pSign","vMin","vMax","parseFloat","render","isString","methods","setMinHeightAndMinWidth","$splitPane","components","getComponents","minHeight","divider","mousedownHandler","preventDefault","$divider","match","pageX","pageY","moveEventHandler","pageXof","pageYof","fixedTopHandler","fixedBottomHandler","horizontalPercentHandler","fixedLeftHandler","fixedRightHandler","verticalPercentHandler","document","one","trigger","getComponentsSizes","property","firstComponentSize","lastComponentSize","attachResizeHandler","internalHandler","lastComponentMinHeight","maxfirstComponentHeight","splitPane","offsetHeight","setTop","firstComponentMinHeight","maxLastComponentHeight","setBottom","lastComponentMinWidth","maxFirstComponentWidth","offsetWidth","setLeft","firstComponentMinWidth","maxLastComponentWidth","setRight","maxFirstComponentHeight","topOffset","offsetTop","top","max","bottomOffset","bottom","splitPaneHeight","leftOffset","offsetLeft","left","rightOffset","right","splitPaneWidth","originalEvent","touches","style","$splitPanes","grep","arguments","it","jQuery","transclude","splitPaneProperties","addComponent","addDivider","bottomPercent","localFirstComponentSize","localLastComponentSize","$firstComponent","$lastComponent","rightPercent","marginRight","marginLeft","marginBottom","marginTop","paneCtrl","subject","getAllWithActiveFranchiesesAsync","userSvc","email","phone","ajax","page","pageNo","results","more","initSelection","params","userID","getActivityScheduleFullName","getLookup","flatten","getCourseFullName","courseTypeSvc","courseTypeID","levelSvc","phaseSvc","httpBuffer","loginConfirmed","configUpdater","updater","retryAll","responseInterceptors","response","ignoreAuthModule","$injector","retryHttpRequest","previewHours","forSemesterID","PreviewHour","register","excuse","rebook","getPreviewHoursSuccessStats","getAllForClassroomAsync","registerOnCourse","successResult","excuseFromLesson","bookOnLessonAgain","getPreviewHoursSuccessGraph","cols","reference","noOfPreviewHours","noOfRegistrationsInTheSameSemester","noOfRegistrationsInAnySemester","previewInterests","PreviewInterest","book","bookLesson","interestID","StateCode","sc","userRoles","UserRole","userRolesDict","ConvertArrayToProperties","array","sf","extendWithRfidSchedule","rfidAccessGroup","rfidAccessGroupID","period0","period1","period2","period3","period4","role","securityFeatures","ConvertPropertiesToArray","buildIn","selectedCourse","courseAttendance","prepareFullCourseAttendanceTable","columnCount","deleteColumn","sortedSchedules","addColumn","alignment","attendanceStatus","setGridColumns","courseAttendanceGridSettings","courseInd","columnFixing","sortIndex","fixed","showColumnLines","visibleColumnIndex","attendanceStatusStr","attendanceTypeStr","attendanceType","isRegistered","holidayCalendarSvc","origCourseID","lessons","courseCopyMode","lastExpanded","recurrenceInfo","expandRecurrence","holidayCalendarId","holidayCalendar","expandRecurrenceImpl","holidays","recurrenceType","expandRecurrencePattern","lessonsGridSettings","selectAll","h","lesson","l","deselectRows","recurrenceExpanded","saveImpl","dataToSave","selectedStudents","studentsGridSettings","studentIDs","selectedLessons","courseCopySave","onCourseCopySave","studentsLoaded","lessonAttendance","newRecurrenceModel","editRecurrence","duration","fdays","fhours","fminutes","fmonths","months","fyears","years","lessonLength","onStartDateChanged","updateEventByStartDate","teacherFromNowOnShouldShow","enableZoomIntegration","enableAmortizationSchedules","findIndex","addAmortizationSchedule","amortizationSchedules","percentageAmount","issueAt","issueDaysAfterRegistration","removeAmortizationSchedule","dataFiled","noFurtherRegisteredAttendance","rawCourses","compensationGroupID","filteredCourses","setSelectedCourse","courseTypes","getAllForLookup","refreshCourseRecord","mfirstLesson","getByCourseID","detailCopyDialogPromise","lessonLengthInMinutes","onContentInfoAccessTimeChanged","contentInfoAccessTime","accessTimeType","noOfDays","accessAtUtc","onContentInfoDeleteBtnClick","contentInfo","contentInfos","contentType","accessTimeBaseline","accessType","allowAccessFrom","allowAccessTo","leadSvc","courseLeads","getAllByStatusAndCourse","courseLeadsGridSettings","lead","studentIds","ignoreLeadAssignment","cr","conversionType","conversionReferenceId","conversionDateUtc","conversionText","user","loggedInUser","updatedAtUtc","updatedByUserId","updatedByName","onChangeStatus","leadsNoteDetailPromise","leadId","noteId","onLeadSave","courseSchedules","orderIdx","onCourseScheduleChanged","newLesson","courseDetailDialogPromise","newRecurrence","deleteSingleLessonRecurrence","getSelectedCourseName","deleteEvent","courseName","getPattern","pattern","courseSchedulesGridSettings","cellInfo","waitQueue","courseRegistrations","courseRegistrationsGridSettings","popover","okClick","fromDateM","toDateM","lessonStartDate","isSameOrBefore","isSameOrAfter","onDetailCanceled","onAfterDialogCancel","selectedLead","cancel","getAllByStatusAndStudent","leads","leadSelectionDlg","onLeadSelected","attendanceFilterOptions","amortizationScheduleDlg","attendanceGridOptions","selectedField","showAmortizationSchedule","studentRegistration","amortizationScheduleTemplates","onlineMeetingsSvc","onlineMeetings","getInfoByDateRange","joinUrl","meeting","onlineMeetingsRecordings","onlineMeetingInd","onlineMeetingDetail","recordings","onlineMeetingsRecordingsGridSettings","datetime","coursePriceSvc","calculateAmortizationSchedules","setSelectedSubject","selectedSubject","isFranchise","supportSubjectLicenses","isFranchiseCentral","subjects","getAllForCoursesAsync","isFranchiseSubject","franchiseSubjectID","franchiseCentralTenantID","isAnyFranchiesActive","isFranchiesActive","onSubjectDetailSave","onFranchiseCentralChange","franchiseCentralID","onFranchiseSubjectChange","getFranchiseCentralSubject","compensationGroupsRaw","compensationGroups","lookup","cg","included","newViewValue","franchiseCentralTenantId","getAllFranchiseCentralCourseSubjects","newSubjects","tenantInfoSvc","ZoomMeetings","meetingId","formSvc","formResponseSvc","studentSvc","saveResponse","responseDto","showFullEditableUserDetail","formSaved","adminEdit","formResponseId","shouldEnableSaveButton","formResponse","enableSave","onSaveClick","showFullEditableStudentDetail","isNotRegisteredUser","respondedSuccesfully","errorDetail","formsResponses","selectedForm","formId","getAllByFormId","newlySelectedForm","formsResponsesGridSettings","formType","allowClearing","calculateDisplayValue","userPhone","onEditorPreparing","parentType","editorOptions","itemIndex","itemElement","onShowFormPreview","onShowContractTemplate","responseInfo","formPreviewPromise","formDefinitionRevision","auditEvent","revision","onAddResponse","onDeleteResponse","forms","setSelectedForm","form","tenantSetting","enableKindergartenSupport","onFormSave","primaryQuestionIndexPlusOne","primaryQuestionIndex","onPrimaryQuestionIndexPlusOneChange","onQuestionAdd","addNewQuestion","onQuestionRemove","question","questions","onOptionAdd","addNewOption","onOptionRemove","onQuestionTypeChanged","questionType","pull","pictureUrls","imageUrl","onAccessPermissionChange","accessPermissions","contractTemplateTypeId","dialogType","contractTemplateTypeFilter","savebuttonText","onSaveChanges","admissionAcceptanceNotification","admissionRejectionNotification","leadSourceType","getCourseInterestById","leadSourceReferenceId","assignExistingRegistration","studentRegistrations","existingRegistration","canBeSaved","onAssignExistingCourseBtnClick","getAllCoursesByStudent","onCreateNewRegistrationBtnClick","onExistingRegistrationRowSelected","isSaving2","firstDate","lead_and_course","parentID","studentRegistrationsGridSettings","onHide","inputModel","isInvalid","disableStudentAdd","onAddUserClick","userDetail","notRegisteredUserInfo","surname","middlename","address","referenceSourceID","referenceSourceId","userDetailDialogPromise","preFilled","userSaved","onAddStudentclick","nationality","adminNotes","health","studentDialogPromise","onStudentSave","onUserAndStudentAssigned","semesterDataRange","getAllByStatusAndDateRange","setSelectedLead","getAllByStatusAndSemester","semestersDataSource","CustomStore","loadOptions","byKey","loadMode","phaseDataSource","markerIdToColor","levelId","toNow","editorName","onAssignCourse","onCreateContract","onSendAdmissionAcceptance","onPrintAdmissionAcceptance","onSendAdmissionRejection","onPrintAdmissionRejection","leadsAdmissionDialogPromise","leadsDetailPromise","onLeadStatusChange","leadsAssingCourseDetailPromise","contractDetailDialogPromise","disableUserStudentSelection","freshLead","notRegisteredUserSvc","loadUser","promisses","getByIDFull","getAllByUserIDAsync","arrVal","othVal","notRegisteredUserInfoOrig","onAnonymousBtnClick","onExistingBtnClick","modelEquals","userEquals","modelToSave","nextContactAtUtc","onBindUserAndStudentClick","bindUserAndStudentDialogPromise","onChangeUserAndOrStudentClick","finalizeLoading","onLeadSelectionDetailSave","onLeadSelectionDetailCancel","onLeadSelectionRowSelected","leadSelectionGridSettings","auditEvents","eventTimeUtc","leadNotes","fullLead","newlySelectedLead","leadNotesGridSettings","leadOrig","userEmailAddress","getAllActionsByUser","middleName","surName","getAllCoursesByUser","levels","setSelectedLevel","level","selectedLevel","onLevelSave","phases","setSelectedPhase","phase","selectedPhase","onPhaseSave","shouldBeVisible","visibleSelection","includes","disabledSelection","Lead","leadSourceName","leadSourceText","phaseId","markerId","notRegisteredUsers","NotRegistredUser","Phase","selectSemesterData","semesterData","chart","displayExactValues","isStacked","chartArea","legend","seriesType","series","3","getFinanceSummary","newData","summary","getCourseSummaryAsync","statusPresent","statusNotPresentNotExcused","statusNotPresentExcused","statusNotPresentExcusedNoCompensation","bankSvc","records","onAccountingBookChange","unimportantRecoveryDetailDlgPromise","setSelectedRecord","getAllByAccountingBookID","transactionID","isAddBankPayment","bankTransactionDetail","invoiceNo","externalAccountNo","paymentTypeID","onPaymentSuccessSave","markAsUnimportant","removePairing","requestPairing","onFromDateChange","onToDateChange","transactions","getUnimportantByAccountingBookID","isReadyToSave","some","restoreUnimportant","rawInvoices","accountingBooks","accountingBookIDs","invoices","getInvoiceEvidenceBySemester","getInvoiceEvidenceByDateRange","onMoneyS3ExportRequested","exportAsInvoices","uniqueByAccountingBooks","uniqBy","filteredRows","getMoneyS3InvoiceExport","onMoneyS3ExportGenerated","onStormwareExportGenerated","onCsvExportGenerated","typeID","latest","notLatest","allRows","invoiceIDs","encodeURIComponent","JSON","stringify","getStormwareInvoiceExport","getCsvInvoiceExport","selectedInvoice","getByID","$routeParams","$location","editDetailAccountingBookId","path","tag","$options","isBussy","bankImportCredentials","shopName","password","minFromDate","goCardlessData","bankTransactionImportType","securityAccessToken","institutionId","statusStr","accountingStampUrl","getConnection","onBankImportCredentialsChange","onImportTypeChange","bankTransactionImportAmountLimit","bankTransactionImportStartDate","onSelectBankClick","bankSelectionDialogPromise","onInstitutionSelected","institution","createBankConnection","href","authorizationLinkUrl","onSelectBankAccount","bankAccountSelectionDialogPromise","onBankAccountSelected","account","selectBankAccount","selectedAccountIndex","onDeleteBankConnection","deleteConnection","tabId","selectedTabId","selectedTabIndex","isTdSequenceSaving","tdSeq","selectedYear","nextSequenceNo","peekNextSequenceNoRaw","onTaxDocumentYearChange","nextSeq","onTaxDocumentSequnceSave","setNextSequenceNoRaw","getSequenceNoPadded","number","getAccountingBookIdPadded","onAddStampBtnClick","pictureWidth","pictureHeight","onUploadImage","uploadAccountingStamp","onImageSave","getTime","onDeleteStampBtnClick","deleteAccountingStamp","selectedBankAccount","onBankAccountSelect","isBankAccountSelected","selectedInvoiceID","getInvoiceEvidenceByInvoiceID","selectedInvoiceNo","institutions","getInstitutions","selectedInstitution","onInstitutionConnect","selectInstitution","isInstitutionSelected","compensationsSvc","compensationCoursesGridFilterOptions","compensationCoursesGridOptions","compensationCourses","compensation","getDetailAsync","setSelectedCompensation","selectedCompensation","comensationSummary","paymentsSvc","getAmortizationScheduleDuePayments","amortizationSchedulesGridSettings","duePaymentsSvc","rawDuePayments","typeIDs","showAfterDueDateOnly","duePayments","claimOverdue","getAllByDateRangeAsync","setSelectedDuePayment","duePayment","selectedDuePayment","trueText","falseText","showEditorAlways","invoiceNotInSync","onDuePaymentNotification","removeFromCourse","expectedPricePop","typeReferenceID","onUpdateInvoice","invoiceDetailDialogPromise","sendRequestForPayment","typeReference2ID","payments","getAllRelatedPaymentsByInvoiceID","paymentsGridSettings","terminalID","filterSummaryDuePaymentsTypes","summaryDuePaymentsTypes","calculateSummary","types","summaryAll","calculateSummaryAll","getInvoiceEvidenceByUserAsync","dangerFn","relatedPayments","getAllForUserAsync","onlinePaymentConfigurations","secret","merchantId","merchantPassword","clientCertificateBase64","onlinePaymentsSvc","onlinePayments","getAllByDateRange","isTesting","createdAt","isAfter","onlinePaymentID","reverse","manualReverse","isOnlinePayment","onlineTransactionDetail","selectedOnlinePayment","terminalSvc","rawPayments","terminals","includesTypeID","includesTerminalID","terminal","includesAccountBookID","getAllForSemester","getAllForDateRange","onPrintReceipt","onPrintConfirmationReport","selectedPayment","allowColumnReordering","accountingBookTransactionID","salesReportParamsPromise","createTaxDocuments","issueTaxDocumentIfNeeded","filterSummaryPaymentTypes","paymentTypes","orig","payment","paymentDate","cashReceiptNo","onPaymentDetailSave","savePayment","sendNotification","finalizePayment","autoPaymentConfirmationPrintForCardPayments","savePaymentEditModel","onClearBtnClick","initializePaymentEditModel","clearPaymentEditModel","getTerminalSetting","terminalChanged","setTerminalSetting","onSaveBtnClick","isPaymentValid","isRequired","isPaymentEditModelValid","terminalSetting","terminalIDparam","taxDocumentsSvc","rawTaxDocuments","taxDocuments","onPrintTaxDocument","taxDocumentID","taxDocumentsIDs","getStormwareTaxDocumentExport","getMoneyS3TaxDocumentExport","getCsvTaxDocumentExport","GetBriefBySemester","selectedTaxDocument","origin","maxYear","Bank","removePayment","accountingBookTransactionIDs","Compensations","getDetail","TaxDocuments","taxDocumentIDs","franchiseSvc","attendanceSummary","getAttendanceSummaryAsync","requireTeacherFranchiseLicenses","franchises","selectedFranchise","newFranchise","franchiseTenantAlias","getEmployeesByTenant","onSaveSuccess","employeeDTO","licenses","license","updateEmployeeByTenant","franchiseSubjectName","webooker_franchise_models","FranchiseEmployee","$cacheFactory","Franchise","getAttendanceSummary","getAttendanceSummaryForFranchiseCentral","cache","put","tenant","employeesForTenantAlias","breadcrumbs","onRefreshButtonClick","recipientSvc","addressList","getAddressList","recipientList","onAddAddress","recipient","isAddDisabled","recipientGroupType","courseScheduleId","classroomId","compensationGroupId","semester2Id","messagesSvc","messageTemplateSvc","addAddress","addressSelectorPromise","createRecipientModel","templateModel","clearAll","messageBody","attachments","sendMessage","sendEmail","getRecipients","addressListPromise","recipients","saveTemplateDialogPromise","savedData","onLoadTemplate","loadTemplateDialogPromise","loadedData","recipientInfo","uploadComponent","uploadUrl","uploadSuccess","uploadFullSuccess","uploadError","uploadInProgress","removeAttachment","attachment","fileUploaderOptions","accept","uploadMode","showFileList","labelText","selectButtonText","maxFileSize","onUploadError","request","responseText","reset","onUploadStarted","onUploaded","parse","templates","getAllInfo","selectedTemplate","loadTemplate","onSaveAsNew","onSaveExisting","emailAttachmentsSvc","localeAlias","languageAlias","fileManagerOptions","fileSystemProvider","fileManagement","CustomFileSystemProvider","getItems","pathInfo","getFiles","documentTemplateType","emailCategory","downloadItems","deleteItem","deleteFile","uploadFileChunk","fileData","uploadInfo","destinationDirectory","fileSize","deffered","chunkCount","filePath","chunkIndex","getUploadUrl","customData","accessUrl","chunkBlob","chunkFirstByte","bytesUploaded","chunkLastByte","contentLength","Content-Range","crossDomain","processData","nameExpr","sizeExpr","dateModifiedExpr","permissions","download","create","upload","selectionMode","chunkSize","itemView","showFolders","showParentFolder","emailTemplatesSvc","codeEditorInstance","oldEmailTemplateId","emailTemplateId","markClean","docIsClean","isClean","numberOfAttachments","onRefreshTemplate","saveDisabled","onValidateTemplate","previewDialogPromise","detail","preview","onAttachments","attachmentsDialogPromise","codemirrorLoaded","_editor","getDoc","lineNumbers","theme","base","sampleDataEditorOptions","json","statementIndent","loadWithIsCleanCheck","oldemailTemplateId","getInfoById","infoData","isCompatibleOverride","isOverridden","validationErrors","contents","htmlBody","sentEmailsSvc","getStatistics","sentEmailStatistics","vAxis","hAxis","orientation","selectedGroup","emails","getSummary","subjectHtmlEncoded","toAddressEmailHtmlEncoded","toAddress","sentEmailsGroupGridSettings","onEmailSelected","enableSMSSupport","smsMessages","getSmsHistoryByDateRage","selectedRow","onNewSms","smsText","sendSms","attachmentsCnt","emailTemplateName","current","old","wbAutoSize","removeItem","EamilAttachments","allInfos","EmailTemplates","MessageTemplate","templateId","SmsHistory","getSmsHistoryByDateRange","Recipient","activeOnly","_name","getName","groupType","str","str2","me","getByIDAsync","getCourseAsync","allData","classroom","compensationGroup","getActionAsync","list","emailAddress","Emails","count","runningSum","previewInterestSvc","uiUtilsSvc","scrollbarWidth","getScrollbarWidth","getActiveAsync","enableRfidCardSupport","isFranchiseCentralAndSupportSubjectLicenses","franchiseCentralSettings","enableDataExportHistory","enableDataExport","enableOnlinePayments","enablePaymentGateways","enableReservationSupport","enableOnlineMeetings","enableRentSupport","minifyAsideClick","toggleClass","resize","supportedLanguages","currentLanguage","isAuthenticated","changeLanguage","langKey","supportedLanguagesDropdown","lang","img","nameResID","toggleAssideNavigation","signInDialogPromise","signOut","adminLogout","signIn","isAdmin","previewHoursSvc","activeSemesterPromise","onClassroomChange","regCourseID","onRegisterOnCourse","onAttendanceExcuse","onAttendanceBookAgain","grid","origColLength","prepareGridForExport","cleanGridAfterExport","stateCodeName","stateModel","previewHoursDetail","nextContact","note","previewHoursDetailOrig","onPreviewHoursDetailSave","previewHoursRegOnCourse","previewHoursRegOnCourseOrig","regCourseSemesterID","detailRegisterOncoursePromise","registerOnCourseError","onRegisterOnCourseSave","payload","previewHoursBookPreview","previewHoursBookPreviewOrig","onBookPreview","detailBookPreviewPromise","bookPreviewError","bookPreviewIsUnchanged","onBookPreviewSave","dlgExcuseConfirmationPromise","attendanceExcuseData","onConfirmExcuse","attendanceBookAgainData","dlgReBookConfirmationPromise","onConfirmBookAgain","stats","previewHoursSuccessGraph","previewHoursSuccessStatsGridSettings","previewInterestDetail","previewInterestDetailOrig","onPreviewInterestDetailSave","stateCodeDetail","stateCodeDetailOrig","onStateCodeDetailSave","membershipSvc","membershipStudentSvc","lastSelectedMembershipId","setSelectedMembership","selectedMembershipStudents","GetAllByMembershipAsync","memberships","validityPeriodInDays","validFrom","validTo","isBetween","membershipDetail","membershipDetailOrig","isMandatory","isClientAssignable","discountPct","applyToActions","applyToCourses","onMembershipDetailSave","membershipStudentDetail","membershipStudentDetailOrig","membershipStudentDetailError","onMSRowEdit","membershipStudentDetailDialogPromise","onMSRowAdd","membershipStudentID","membershipID","onMSRowDelete","membershipStudentDetailIsUnchanged","onMembershipStudentDetailSave","itemTypeSvc","itemTypes","setSelectedItemType","itemType","selectedItemType","onItemTypeSave","rentCategorySvc","rentCategoryGroupSvc","rentCategories","setSelectedRentCategory","rentCategoryGroupDataSource","rentCategory","selectedRentCategory","onRentCategorySave","pickupTimeFrom","date_pickupTimeFrom","pickupTimeTo","date_pickupTimeTo","returnTimeFrom","date_returnTimeFrom","returnTimeTo","date_returnTimeTo","ondate_pickupTimeFromChange","ondate_pickupTimeToChange","ondate_returnTimeFromChange","ondate_returnTimeToChange","onrentingPeriodTypeChange","rentingPeriodType","rentingPeriodStepSize","minimumRentingPeriods","maximumRentingPeriods","rentHourStartType","setSelectedRentCategoryGroup","rentCategoryGroup","selectedRentCategoryGroup","onRentCategoryGroupSave","rentItemSvc","allCategories","selectedCategory","itemSelectionType","minimumNumberOfRentedItem","maximumNumberOfRentedItems","externalId","numberOfItemsToAdd","itemTypeId","times","allItems","onAddItemDetailSave","onCategoryChange","rentSvc","selectedRentItem","rents","rentItem","totoDateUtc","getAllByPlaceAndItemAndDateRange","placeId","newlySelectedRentItem","rentsGridSettings","rentedItems","sum","rentedItem","itemCondition","momentNow","toUtc","rentItemName","rentCategoryName","rentItems","setSelectedRentItem","classroomDataSource","rentCategoryDataSource","itemTypeDataSource","onRentItemSave","selectedRent","newlySelectedRent","rentItemsGridSettings","getAllByPlaceAndDateRange","setSelectedRent","rent","classrooms","selectedPlace","head","onPlaceChange","onRentSave","notRegisteredUserPromise","statusDisabledSelection","$index","addItemDialogPromise","addItem","union","unionWith","fromUtcPickerOptions","toUtcPickerOptions","oldRentCategoryId","getAllByPlaceAndRentCategory","getAllByCategoryGroupedByItemType","shouldBeDisbled","reportsSvc","fromSemesterID","toSemesterID","include","includeNew","includeLeaving","fluctuationType","sankeyInstance","courseStudentFluctuationOverall","courseStudentFluctuationByTeacher","courseStudentFluctuationByClassroom","courseStudentFluctuationBySubject","leftCount","uniq","rightCount","setTitle","newTitle","resizableOptions","handles","onResizeEnd","sankeyOptions","sourceField","targetField","weightField","node","padding","customizeText","info","weightOut","linksOut","weightIn","linksIn","margin","colorMode","tooltip","zIndex","customizeLinkTooltip","allLeftCounts","source","weight","customizeNodeTooltip","onFromSemesterChange","onToSemesterChange","onFluctuationTypeChange","onIncludeNewChange","onIncludeLeavingChange","mFromDate","mToDate","cousesAttendaceSummary","getCoursesAttendanceSummaryForDateRange","courseAttendanceStatusID","courseAttendanceTypeID","studentGroups","onSeachCriteriaChanged","rawOneOffsSummary","noGroupSelected","oneOffsSummary","intersection","getOneOffAttendanceSummary","courseAbbreviation","parentName","parentMiddlename","parentSurname","parentPhone","getRegisteredAttendanceAsync","newColumnDefs","sortedDefs","getCourseRegistrationSummaryForSemester","getCourseRegistrationSummaryForDateRange","groupsCombo","subjectCategoryID","operatorPhone","operatorPhone2","Reports","getRegisteredAttendance","getCourseStudentFluctuationOverall","getCourseStudentFluctuationByTeacher","getCourseStudentFluctuationBySubject","getCourseStudentFluctuationByClassroom","includeNewClients","includeLeavingClients","domainsSvc","setSelectedDomain","domain","selectedDomain","domains","domainsSpecializationsSvc","domainsSpecializations","domainInd","domainsSpecializationsGridSettings","domainId","classroomAvailabilitySchedulesSvc","reservationsSvc","pricingSvc","employeesForDateRangePromise","nowStr","availableCache","now","selectedClassroom","activeClassrooms","place","classroomAvailiability","selectedEmployees","lastFilteredEmployeeSchedules","relaodDueToResources","getDomain","getSpecialization","specializationId","specializations","getAllExpanded","domainsDataSource","refreshUsersDataSource","userDataSource","getAllBrief","selectedUserId","refreshStudentsDataSource","studentsDataSource","lastError","scheduleDataSource","canLoadData","employeeSchedules","schedulerInstance","getStartViewDate","getEndViewDate","classroomAvailabilityPromise","loadDay","reservationsPromise","getAllByRangeAndPlace","availability","periods","start","end","employeeId","filteredEmployeeSchedules","reservationStartDate","reservationEndDate","studentsIds","domainSpecialization","domainName","domainSpecializationName","mbirthday","age","invoiceId","employeeData","specialization","employeeDataCopy","schedulesUpdateDay","createEmployeeScheduleIfMissing","oldData","affectedPeriod","periodStartDate","periodEndDate","employeeIds","schedulesDeleteDay","errorHandler","setUpStudentBookingForm","copyMode","appointmentData","tbStartDate","tbEndDate","formData","calculatePrice","domainOrSpecializationId","domainAndSpecializationIds","domainSpecializationId","calculateReservationPrice","popup","dxPopup","userSelectBox","studentAddButtonInstance","xs","sm","md","lg","editorType","searchExpr","searchEnabled","previousValue","validationRules","cssClass","applyValueMode","resizeEnabled","contentTemplate","dxTreeView","dataStructure","itemsExpr","selectByClick","selectNodesRecursive","onItemSelectionChanged","arg","currency","getCurrencySymbol","dxValidator","validationCallback","reevaluate","classroomSelectOptions","employeeSelectOptions","cellContextMenuItems","cellContextMenuCellData","showAppointmentPopup","emptyCellContextMenuOptions","schedulerOptions","views","timeCellTemplate","resourceCellTemplate","currentView","maxAppointmentsPerCell","firstDayOfWeek","startDayHour","endDayHour","cellDuration","crossScrollingEnabled","currentDate","allowDragging","fieldExpr","allowMultiple","useColorAsDefault","resources[0].dataSource","dataCellTemplate","markAvailable","appointmentTooltipTemplate","onCellContextMenu","cellData","selectedCellData","onCellClick","onAppointmentFormOpening","setUpEmployeeReservationForm","popupConfig","_popupConfig","popupOptions","onOptionChanged","onAppointmentRendered","origHeight","appointmentElement","backgroundColor","markPlaceAvailable","getHours","getMinutes","dayAvailability","periodStart","periodEnd","startIndication","endIndication","employeeScheduleDelete","deleteAppointment","hideAppointmentTooltip","employeeScheduleEdit","reservationDelete","reservationEdit","reservationCopy","reservationCreatePayment","Specializations","rfidCardsSvc","rawAttendanceLog","hasAttendanceWithoutGroup","attendanceLog","inUpdateRole","inInsertRole","inDeleteRole","inSupportRole","mfromDate","mtoDate","getAllLogsAsync","showMPSVReportParamsDialog","isNursery","mpsvDialogPromise","reportGenerated","showAttendanceLogSupportDetail","operationMode","attendanceLogSupportDetailPromise","rowAddDisabled","skeleton","validationErrorMessage","userIDType","overriden","overridenWithDescription","rfidCardLogOverrideID","childrenGroupSupport","smallNurserySupport","rfidAttendanceEUSupport","mpsvStudentDialogPromise","projectName","projectRegistrationNumber","recipientName","rr","deviceSerialNumber","rrr","shortened","toJson","encodeURI","efsReportImportDetailPromise","deleteConfirmationPromise","dataToDelete","downloadBtnClick","driverDownloadDetailPromise","rfidCardLogID","onUserTypeChange","isLoadingData","studentIsSelected","employeeIsSelected","getRegisteredStudentsForPeriodAsync","getRegisteredEmployeesForPeriodAsync","updateDetailError","shouldMessageBePresent","msg","studentsGridSelectionChanged","employeesGridSelectionChanged","studentsGridFilterOptions","filterFunction","employeesGridFilterOptions","studentsGridOptions","hidden","disableExport","employeesGridOptions","isSavingXls","isSavingXlsx","compatibility","group","getMPSVNurseryAttendanceReportAsync","getMPSVAttendanceReportAsync","repParams","g","projectBeneficiary","operationResultText","userIdType","oldUserId","newUserId","timeShiftInMinutes","uploadContacts","supportReplaceRange","supportDeleteUserInRange","successWithTextDecode","supportReplaceUserInRange","timeShift","abs","seconds","supportShiftOriginEventInRange","rfidDeviceRegistrationSvc","deviceRegistrations","dryRun","uploadResultText","getAllUploadContacts","RfidCards","getAllLogs","getRegisteredStudentsForPeriod","getRegisteredEmployeesForPeriod","getMPSVAttendanceReport","getMPSVNurseryAttendanceReport","filtered","rejectReason","isRemove","rfidCardLogUploadContactID","eventType","subEvent","eventTime","operatorFullName","operatorAddress","operatorEmail","uploadedAt","RfidDevices","getLessonAttendance","getRegisteredAttendanceForCourse","attendanceChanged","onCourseChange","cID","onDetailCancel","waitQeueuGridSettings","lastStartDate","lastEndDate","loadSemesterSchedule","isValidDate","getAllForSemesterAllAsync","onDateChanged","origAction","schedulerSettings","weekView","autoHourRange","noHeader","visibleResources","showRecurrence","startHour","scheduleVisibleTimeStart","endHour","scheduleVisibleTimeEnd","scale","scheduleTimeScale","resourcesMapping","actionsMapping","commands","createNewCourse","selectedResourceID","createNewEvent","getSingle","ageRanges","selectedWeek","reloadDataWithModificationAsk","saveClassroom","newClassroom","startOfWeek","saveModel","loadWeek","saveWeek","newlySelectedClassroom","calendarSettings","newStartOfWeek","onModelSave","onModelCancel","isSaveRangeEnabled","dateRangeSelectionDlg","onModelRangeSave","onCanceled","onSaved","rangeModel","saveWeekAsPaternForPeriod","setSelectedEmployee","addressID","geoCoderSvc","domainsInitialized","treeListInstance","classroomDomains","domainsOptions","recursive","autoExpandAll","allowEditing","isNil","reservationTeacherHourSingleRateOverride","reservationTeacherHourSingleRate","reservationTeacherHourGroupOneRateOverride","reservationTeacherHourGroupOneRate","reservationTeacherHourGroupTwoRateOverride","reservationTeacherHourGroupTwoRate","origDomainsSelected","obj","currentSelectedRowKeys","parentId","currentDeselectedRowKeys","originDomains","domainsAreUnchanged","isEqual","loadDomainsData","cloneDeep","onClassroomDetailSave","saveDomainsData","getAddress","geocode","compensationTransferSvc","createEmptyModel","sourceSemesterID","initilizeModelAsync","compensationTransfer","destinationSemesterID","onDestinationSemesterChange","onTransferToAmendTypeChange","transferToAmendType","changeTransferToAmendType","onMaximumTransferredAmendsChange","maximumTransferredAmends","changeMaximumTransferredAmends","onTransferRemainingPreAmendsChange","transferRemainingPreAmends","changeTransferRemainingPreAmends","onTransferRemainingTimeBoundAmendsChange","transferRemainingTimeBoundAmends","changeTransferRemainingTimeBoundAmends","onNextBtnClick","onBackBtnClick","errorGridOptions","onCompensationTransferDetailSave","compensationTransferErrorModalPromise","compensationTransferDetailDialogPromise","modelCopy","onSemesterDetailSave","isPristine","onDestinationCourseChange","destinationCourseRegistrationID","destinationCourseFullName","selectedCourseType","holidayCalendars","onDataSave","onDeleteDay","onAddDay","b","onAddBankHoliday","getBankHoliday","newsSvc","news","publishedAtUtcPickerOptions","onNewsDetailSave","onCourseRegistrationDetailSave","preferredBookingSvc","getBySemesterID","isModelValid","sourceSemestersIDs","onFromSemestersChanged","getByPreferredBooking","destinationSemesterCourseRegistrations","compensationGroupsIDs","onCourseRegistrationRowEdit","courseRegistrationDetailPromise","onPreferredBookingSave","onPreferredBookingSavedSuccessfully","preferredBookingID","rawSemesters","showInactive","preferredBookingSupported","courseInterestsSupport","coursePreviewOnlyRegistration","allowClientCourseRegistration","preferredBookingStartDate","preferredBookingEndDate","preferredBookingIsActive","preferredBookingEffectiveIsActive","compensationTransferDialogPromise","preferredBookingDialogPromise","selectedSemester","courseTypeImageSvc","courseTypeImage","CompensationTransfer","availableAmends","transferredPreAmends","transferredTimeBoundAmends","initializeAmends","remainingAmends","remainingPreAmends","remainingTimeBoundAmends","CourseTypeImage","HolidayCalendar","countryCode","News","subTitle","publishedAtUtc","isVisibleToClients","body","PreferredBooking","picturesSvc","setSelected","onDeleteBtnClick","isUsed","onUploadImageClick","image","croppedImage","imageIsValid","previewHeight","pictureAspect","resultPictureSize","onImageLoadSuccess","onImageLoadError","handleFileSelect","evt","file","currentTarget","reader","FileReader","onload","readAsDataURL","onUploadClick","originalFormat","prepareImageData","decodeImageTypeFromData","querySelector","toggleSelected","onPicturesAdd","onAddBtnClick","fileManagerInstance","contextMenuItems","getDirectory","downloadUrl","dataUrl","createElement","setAttribute","appendChild","removeChild","createDirectory","parentDir","isDirectory","deleteDirectory","contentExpr","isPublic","selectedItems","dataItem","onContextMenuItemClick","getSelectedItems","setPublicAccess","details","onOk","selectedFiles","isNothingSelected","selectedItemKeys","jpgstr","pngstr","Picture","dashboard","includesGlobal","imageData","imageType","imageBase64","imageFormatType","convertToImageFormatType","errorReason","lastIndexOf","includeGlobal","getDashboardImages","insertDashboard","ProtectedStorage","paths","includeImages","surveyResponseSvc","getByResponseIDAyns","surveyResponseID","getQuestionWithAnswersModel","survey","surveyQuestions","responseAnswers","newlySelectedSurvey","surveyID","surveyAnswers","getAllBySurveyIDAsync","surveyAnswersFilterOptions","onShowAnswers","onGetExcelExport","getExcelExportBySurveyID","answersGridOptions","surveySvc","paneScrollable","newQuestion","onSurveyTypeChanged","surveyTypeID","allowCustomNote","onSurveyDetailSave","surveys","getAllNonDeleted","selectedSurvey","SurveyResponse","getByResponseID","answers","q","surveyQuestionID","surveyQuestionTypeID","bitAnswer","intAnswer","textAnswer","accountingSettingsSvc","accountingSetting","tenantSettingSrc","accountingSettingOrig","tenantSettingOrig","onCancel","accountingSettingData","tenantSettingData","updates","accountingSettingIsUnchanged","tenantSettingIsUnchanged","currentSetting","printedInvoiceName","sendInvoicesToClients","invoiceDueDateType","invoiceDueDates","invoiceDueDate","cashReceiptPurposeForCourses","disableCashReceiptNumbering","cashReceiptPurposeForActions","cashReceiptPurposeForActivitiesReconciliation","cashReceiptPurposeForActivitiesReccuring","showInvoiceNoInCashReceipt","putStudentAgeIntoInvoices","enableQrCodeOnInvoices","themeData","newClientDesignThemeData","transformThemeDataIn","seedColor","primary","onPrimary","primaryContainer","onPrimaryContainer","secondary","onSecondary","secondaryContainer","onSecondaryContainer","tertiary","onTertiary","tertiaryContainer","onTertiaryContainer","onError","errorContainer","onErrorContainer","surface","onSurface","surfaceTint","surfaceVariant","outline","background","onUpdateThemeData","checked","clientTitlePictureUrl","onCheckboxClick","transformThemeDataOut","tenantSettingCurrent","newClientDesignThemeCode","imageUpload","imageUploadError","Image","src","isImageUploading","dataExportHistorySvc","grouping","groupIndex","groupItems","summaryType","displayFormat","alignByColumn","showInColumn","sortByGroupSummaryInfo","summaryItem","dataExportHistory","contentSvc","htmlContentType","tabIndex","htmlData","mainSettingsSvc","mainSetting","mainSettingOrig","mainSettingData","mainSettingIsUnchanged","registrationOpenPicture","facebookPageUrl","customerLogos","instagramUrl","twitterUrl","userSettingSvc","userSettingSrc","userSettingOrig","userSettingData","userSettingIsUnchanged","sendEmailsToClients","disableInformTeachers","courseRegistrationQuestionCCToTeacher","disableAllEmails","disableAllEmailsExceptUserRegistration","allowTeacherEmailInClientSection","enableUserCreatedNotification","enableCoursePaymentEvidenceNotification","enableAttendanceExcusedCancelledNotification","enableCourseScheduleDateChangedNotification","enableStudentActionRegistrationDeleteNotification","enableStudentCourseRegistrationPriceChangeNotification","enableAttendanceActionExcusedCancelledNotification","enableStudentAddedToWaitQueueNotification","enableStudentRemovedFromActionWaitQueueNotification","enableAttendancePreviewInterestNotification","enableUserPasswordChangedNotification","enableAttendanceExcusedNotification","enableAttendanceNewOneOffNotification","enableCourseScheduleTeacherChangedNotification","enableSendRequestForPaymentNotification","enableAttendanceActionExcusedNotification","enableStudentCourseInterestRegistrationNotification","enableStudentRemovedFromWaitQueueNotification","enableNotExcusedNotification","enableStudentActionRegistrationPriceChange","enableStudentCourseRegistrationNotification","enableAttendanceExcusedNoCompensationNotification","enableAttendanceNewAmendNotification","enableStudentActionRegistrationNotification","enableCourseScheduleNoteChangedNotification","enableAttendanceActionExcusedNoCompensationNotification","enableAttendanceNoteChangedNotification","enableStudentAddedToActionWaitQueueNotification","enableAttendancePreviewNotification","coursePaymentEvidenceCCTeacher","enableActivityAttendanceChangeNotification","enableActivityReconciliationCreatedNotification","enableActivityReconciliationPaymentEvidenceNotification","enableActivityAttendanceFoodTakenNotification","enableActivityFoodOrderNotification","enableRegisterActivityInterestNotification","enableSurveyRequestNotification","enableCourseRegistrationQuestionNotification","enableOnlineLessonReminderNotification","enableOnlineLessonStartedNotification","enableScheduledInvoiceIssuedNotification","enableActivityScheduleNoteChangeNotification","enableTaxDocumentCreatedNotification","enableNewConsentAssignedNotification","enableAmortizationSchedulePaymentNotification","enableFormResponseCreatedNotification","enableFullCourseInterestNotification","enableStudentActionRegistrationAutoDeleteNotification","EnableOnlineMeetingRecordingCompletedNotification","enableOnlineMeetingRecordingCompletedNotification","enableReservationPaymentEvidenceNotification","dataExportSettingSvc","dataExportSetting","dataExportSettingOrig","dataExportSettingData","dataExportSettingIsUnchanged","enableUserRegistration","defaultNationality","quickUserRegistrationMode","allowClientActionRegistration","sortNamesBySurname","showArrearInMyCourses","readOnlyClientCourseRegistration","allowShareOnFBForCourses","allowShareOnFBForActions","enableSMSInWaitQueueAutoBooking","showQuickNavOnHomePage","disableExcuseInMyCourses","courseRegistrationAgreement","noOfDaysToShowAction","showHealthInCourseRegistration","showAttendantHealthInCourseRegistration","sendApplicationForm","showClassroomFilterInCourses","showLessonsRemaining","showNearestLessonInCourses","showPriceInCourseRegistration","useTotalPriceForCourses","noteDescriptionInCourseRegistration","showCourseTypeFilterInCourses","noOfAllowedOneOffs","showNoteInCourseRegistration","coursesSortByDate","clientScheduleWeekView","scheduleEnableAutoHourRange","disableClientCalendar","scheduleDayViewResourcesPerPage","showAllCoursesInClientSchedule","courseExcuseThresholdType","courseExcuseThreshold","showContatInClientAttendance","clientAttendanceShowStudentNote","showArrearInClientAttendance","showNoteInClientAttendance","actionExcuseThresholdType","actionExcuseThreshold","showAgeInClientAttenandace","noOfHoursToUpdateAttendance","allowMultiAmends","activityExcuseWithoutFoodThresholdType","activityExcuseWithoutFoodThreshold","calcSnacksOnlyForPresent","activityExcuseThresholdType","activityExcuseThreshold","enableRfidAccessGroups","rfidBreakTresholdIntervalInMinutes","rfidValidateESFByLaw","sendInfoCardWithCourseRegistration","sendApplicationFormAction","showExcusesAndAmendsInMyActivities","facebookPixelID","showAgeFilterInCourses","showScheduleInCourses","showAgeRangesInCourses","enableDuePaymentsInClient","showOverpaymentsInClientDuePayments","showDateInClientCourses","showAskQuestionInCourseRegistration","maxNumberOfActivityWaitQueueReservations","maxNumberOfCourseWaitQueueReservations","allowReferenceSource","mandatoryStudentBirthday","mandatoryStudentNationality","mandatoryUserAddress","mandatoryUserNationality","mandatoryStudentName","mandatoryEmail2","mandatoryPhone2","mandatoryStudentGender","maxNoOfPreviewStudentsOnOneLesson","showCourseWaitQueueIndexInClient","reservationExcuseThresholdType","reservationExcuseThreshold","reservationTeacherGroupOneSizeFrom","reservationTeacherGroupOneSizeTo","reservationTeacherGroupTwoSizeFrom","reservationTeacherGroupTwoSizeTo","reservationCreateThresholdType","reservationCreateThreshold","enableFullCourseInterest","enableWalletSupport","walletAccountingBook","walletDepositExpirationInDays","mandatoryStudentPersonalIDNumber","sendPaymentConfirmationForm","requireTermsAndConditionsAgreement","requireTradeTermsAgreement","googleAnalyticsId","allowClientActionUnRegistrationInsteadOfExcuse","mandatoryStudentHealthInsurance","mandatoryStudentAddress","mandatoryStudentAllergies","mandatoryStudentPlaceOfBirth","mandatoryUserIdentityCardNumber","mandatoryUserPersonalIDNumber","mandatoryUserNationality2","mandatoryUserName2","mandatoryUserSurname2","mandatoryUserMiddleName2","mandatoryUserAddress2","mandatoryUserIdentityCardNumber2","mandatoryUserPersonalIDNumber2","mandatoryUserBirthday","mandatoryUserBirthday2","infoCardBackUseLogo","mandatoryStudentNotes","showNoteInEventRegistration","enableClientUserSchedules","rfidLogoType","showCapacityInClientUserSchedules","showEmailInClientAttendance","enableCashPayments","showFreePlacesInCourseDetail","showRemainingLessonsInCourseDetail","noteDescriptionInReservations","onTriggerPortalUpdate","triggerPortalUpdate","ts","smsHistorySvc","smsHistory","coursesMainPageButton","eventMainPageButton","compensationsMainPageButton","kidergartenMainPageButton","reservationsMainPageButton","formsMainPageButton","rentsMainPageButton","attendanceMainPageButton","coursesMenuName","eventsMenuName","compensationsMenuName","kidergartenMenuName","customContentTypeText","myKidergartenMenuName","attendanceMenuName","containerCssClass","useFullUrl","AccountingSettings","Content","DataExportHistory","DataExportSetting","MainSetting","onReportPrint","isRfidReport","withCarryOver","onExportReportToXls","consentDefinitionSvc","consentTypeID","consentsDefinitions","consentDefinitionID","employeeAvailabilitySchedulesSvc","selectedEmployee","saveEmployee","newEmployee","newlySelectedEmployee","rawEmployees","selectedGroups","onPrintEmployeeTimeSheet","employeeTimeSheetParamsDialog","defaultCroppedImage","emptyImage","employeeDomains","isDeletePictureDisabled","smallImageUrl","onDeletePicture","smallImageData","onFranchiseAdd","initNewFranchisesLicense","onFranchiseRemove","franchise","childrenGroupModel","nurseryGroupModel","nurseryGroupModelOrig","childrenGroupModelOrig","isChildrenGroupModelSet","isNurseryGroupModelSet","rederenceSource","referenceSourceDetail","referenceSourceDetailOrig","onReferenceSourceDetailSave","getReferenceSourceTimeDevelopment","referenceSourceTimeDevelopment","consentSvc","selectableConsents","consent","onConsentClick","informUsers","selectedConsentIDs","userIDs","selectedUsers","assignConsensts","consnetIDs","getAllActionsByStudent","attendanceDetail","groupAttendanceDetail","getStudentAttendanceDetail","attendanceDetailFilterOptions","disableRowSelection","isGroupRowPropertyName","subItemsPropertyName","$popover","onExcusesClick","myPopover","eligibleAmends","eligiblePreAmends","eligibleTimeBoundAmends","autoClose","viewport","$applyPlacement","isInCourseRole","isInActionRole","isInAttendanceRole","rawStudents","isInProtectedViewRole","filteredStudents","studentAddress","activityTaxDeductionReportParamsDialog","getStudentsActive","countBy","getStudentsCount","getStudentsActivePercent","isInSupportRole","newStudent","typeAheadAddress","allMatch","region","bounds","endOfApril","onAccessTypeChange","setSelectedUser","selectedUser","usersConsents","getConsentsInfoBrief","filteredUsers","customFileter","dataGridInstance","idmConsentIssued","showConsentsDefinitionsDetail","requestConsentsFromAll","requestAnonimizeData","consents","customConsent","consentRatifiedTo","getConsentNameByIDAsync","requestConsentFromAllDialog","anonymize","danger","userConsentsDetails","newlySelectedUser","getConsentsInfoForUser","userConsentsDetailGridSettings","consentRevokedAt","consentRatifiedAt","unfinishedRegistrations","users","hasSecondContact","sendInvitationToAll","reSendOnly","sendInvitationToAllImpl","usersToInvite","sendInvitationToUser","progressCallback","requestBindToIDM","pctProgress","progressMsg","errorMsg","showPctProgress","boundUsersToReInvite","notBoundUsersToInvite","isAnonymized","idmEmailConfirmed","boundToIDM","allowEmailContact","securityRoleID","navigateToRow","userUpdateRole","IDMInfoLockedForEdit","userDetailOrig","onIDMLockClick","onUserDetailSave","newUser","userDetailError","overrideIDMProperties","onUserDetailSaveWithIDMRequest","selectedUserStudents","mday","grpIndex","colAssignPeriod","period","markAllToIndex","isSelecting","isDeselecting","startIdx","lastSelectedIdx","grpStart","changed","lastSelectedCell","onMouseDown","onMouseUp","onMouseMove","consentDefinition","grpIdx","printPeriod","startMinute","floor","endMinute","consentDefinitions","ConsentDefinition","validToDays","consentDefinitionIDToInclude","sIDs","filteredConsentDefinitions","AvailabilitySchedule","getRange","updateRange","endOfWeek","dayData","extractErrorData","weekModelTemplate","templateCopy","timeDifference","startOfWeekPeriod","endOfWeekPeriod","currentPeriod","toSave","$sce","Label","addNoLabel","rgbColor","htmlCaption","trustAsHtml","EmployeeDetailDay","activityInstructorID","Reconciliation","getReconciliationDetailDTO","reconciledAt","notificationSentAt","att","getReconciliationAttendanceDTO","reconciliationDetailDTO","initDataAttendance","initDataActivity","defaultLatePickupPrice","amodel","ReconciliationAttendance","lunch","firstSnack","secondSnack","firstPeriodRegistered","secondPeriodRegistered","secondPeriodAttendanceShortened","firstPeriodAttendanceTypeID","firstPeriodAttendanceStatusID","secondPeriodAttendanceTypeID","secondPeriodAttendanceStatusID","firstPeriodLatePickupHours","secondPeriodLatePickupHours","noOfMinutes","minutesOrig","reconciled","reservationNotes","scheduleNotes","firstPeriod","secondPeriod","firstSnackReserved","firstPeriodAttendanceStatus","attendanceStatusToString","firstPeriodAttendanceType","attendanceTypeToString","secondSnackReserved","secondPeriodAttendanceStatus","secondPeriodAttendanceType","semesterStartDate","semesterEndDate","firstStart","lastStart","mStartDate","mEndDate","weekModel","ScheduleWeek","findWeekSchedule","currentSchedule","currentStart","weekSchedules","getScheduleByDay","removeScheduleByDay","am","pm","ScheduleDetailDay","getPrevFilledInDay","next","scheduleDetail","parentDetail","_lunch","_firstSnack","_secondSnack","_firstPeriodCapacity","getNumberValue","_secondPeriodCapacity","lunchIndeterminate","firstSnackIndeterminate","secondSnackIndeterminate","firstPeriodCapacityIndeterminate","isNumberIndeterminate","secondPeriodCapacityIndeterminate","_active","lunchChanged","firstSnackChanged","secondSnackChanged","firstPeriodCapacityChanged","secondPeriodCapacityChanged","isDirty","applyChangesToNumberProperty","firstPeriodCapacity","secondPeriodCapacity","nvalue","setCommonPropertyValue","wasUndef","dirty","getCommonPropertyValue","propertyValue","firstRun","mPropertValue","schedulePropertyValue","mSchedulePropertyValue","valueOf","StudentDetailDay","activityReservationID","fistSnack","lunchNotScheduled","firstSnackNotScheduled","secondSnackNotScheduled","RecurringInvoice","invoiceTemplateID","paymentReferenceNumber","issuedInvoices","today","_endIssueTypeID","_lastEndAfterNoOfIssues","_lastEndAtSpecificDate","issuedAt","lastDayOfMonth","maxDay","lastIssuedDate","nextIssueDate","todayIsImportant","$tooltip","oldHtml","tooltipMode","busyTooltip","tooltipTop","wbBusyIndicator","wbBusyIndicatorOverlay","margin-top","spanChecked","spanClick","$event","focus","indeterminate","fromViewValue","translations","TXT_TODAY","TXT_BUSY","TXT_LBL_START_DATE","TXT_LBL_END_DATE","TXT_LBL_EMPLOYEE","TXT_LBL_NAME","TXT_LBL_FILLED","TXT_NOTE","TXT_RECURRENCE_TYPE_DAILY","TXT_RECURRENCE_TYPE_WEEKLY","TXT_RECURRENCE_TYPE_MONTHLY","TXT_RECURRENCE_TYPE_YEARLY","TXT_RECURRENCE_WEEK_DAYS_SUNDAY","TXT_RECURRENCE_WEEK_DAYS_MONDAY","TXT_RECURRENCE_WEEK_DAYS_TUESDAY","TXT_RECURRENCE_WEEK_DAYS_WEDNESDAY","TXT_RECURRENCE_WEEK_DAYS_THURSDAY","TXT_RECURRENCE_WEEK_DAYS_FRIDAY","TXT_RECURRENCE_WEEK_DAYS_SATURDAY","TXT_RECURRENCE_WEEK_EVERY_1","TXT_RECURRENCE_WEEK_EVERY_2","TXT_RECURRENCE_WEEK_EVERY_3","TXT_RECURRENCE_WEEK_1","TXT_RECURRENCE_WEEK_2","TXT_RECURRENCE_WEEK_3","TXT_RECURRENCE_DAY_1","TXT_RECURRENCE_DAY_2","TXT_RECURRENCE_DAY_3","TXT_RECURRENCE_WEEK_WORKDAY","TXT_RECURRENCE_MONTH_EVERY_1","TXT_RECURRENCE_MONTH_EVERY_2","TXT_RECURRENCE_MONTH_EVERY_3","TXT_RECURRENCE_MONTH_FROM_EVERY","TXT_RECURRENCE_MONTH_MONTH","TXT_RECURRENCE_WEEK_OF_MONTH_FIRST","TXT_RECURRENCE_WEEK_OF_MONTH_SECOND","TXT_RECURRENCE_WEEK_OF_MONTH_THIRD","TXT_RECURRENCE_WEEK_OF_MONTH_FOURTH","TXT_RECURRENCE_WEEK_OF_MONTH_LAST","TXT_RECURRENCE_MONTH_JANUARY","TXT_RECURRENCE_MONTH_FEBRUARY","TXT_RECURRENCE_MONTH_MARCH","TXT_RECURRENCE_MONTH_APRIL","TXT_RECURRENCE_MONTH_MAY","TXT_RECURRENCE_MONTH_JUNE","TXT_RECURRENCE_MONTH_JULY","TXT_RECURRENCE_MONTH_AUGUST","TXT_RECURRENCE_MONTH_SEPTEMBER","TXT_RECURRENCE_MONTH_OCTOBER","TXT_RECURRENCE_MONTH_NOVEMBER","TXT_RECURRENCE_MONTH_DECEMBER","TXT_RECURRENCE_IN","TXT_RECURRENCE_ENDS_AFTER","TXT_RECURRENCE_ENDS_AT","TXT_RECURRENCE_OCCURRENCES","$parse","wbRightClick","$dropdown","wbSchedulerSvc","defaultSettings","showWeekend","toolTipDelay","toolTipTemplateUrl","toolTipTrigger","selectByBlocks","maximumSelectedBlocks","startTimeType","sourceSettings","actionClicked","selectionChanged","commandDropdown","calculateColumns","calculateRows","calculateSizes","calculateEvents","calculateAvailability","toolTipEnabled","isAlternateRow","isSelectable","selectionStart","selectionEnd","inSelection","setSelection","colStart","colEnd","rowStart","startEndDates","newSelection","rowEnd","colIndex","endRow","getStartEndDateBySelection","disposeCommandDropdown","destroy","showCommandMenu","commandMenu","onCellMouseDown","canSelectRegion","onCellMouseMove","secondClickCheck","onCellMouseUp","lastClickEvent","onSelectEvent","dateChanged","onPrevBtnClick","interval","selectPrevDate","selectNextDate","onTodayBtnClick","selectToday","onDatePickerChange","fixSelectedDate","mapRecurrenceDtoToModel","mapRecurrenceModelToDto","lastWeekViewValue","lastVisibleResources","selectedResources","getSelectedResources","getMappedResourceID","currentVal","validResourceID","getValidSelectedResourceID","limitEvents","findColumn","calculateEventsImpl","mStartDateStartOfDay","mEndDateStartOfDay","mCurrentStartDate","mCurrentEndDate","mCurrentStartDateStartOfDay","getResourceIDPropertyName","columnDate","startFix","startOverflow","startOverflowDay","endFix","endOverflow","endOverflowDay","noOfSubColumns","subColumn","getMappedPropertyName","showWaitQueue","showActionNote","lastEvent","detectOverlaps","mapping","defaultPropertyName","getSelectedResourceIDStartIndex","findSettings","resourceStartIdx","emptyResource","resourcesLimit","origResource","getDateByRowAndColIndex","isStartTime","subIndex","noOfSubRows","dateToWeekDays","shouldBeSelected","daysLimit","todayIndex","saturdayStartDay","clone","sundayEndDay","actionStartDate","actionEndDate","recourcesMapping","shouldShowWeekend","clonedDate","resourceName","ceil","startEndHours","lowerBound","upperBound","endDateSorted","visibleStartDateActions","visibleEndDateActions","actionStartDateDay","actionEndDateDay","startDateSorted","calcStartEndHours","firstRow","lastRow","columnWidth","rowHeigh","occurrenceCount","dayWeekDays","weekDays","dayPeriodicity","periodicity","weekPeriodicity","weekWeekDays","monthRecurrenceType","weekOfMonth","monthDayNumber","dayNumber","monthWeekOfMonth","monthPeriodicity0","monthPeriodicity1","monthWeekDays","yearRecurrenceType","yearWeekOfMonth","yearMonth0","yearMonth1","yearWeekDays","yearDayNumber","availabilityObj","a_startDate","a_endDate","startDateOffset","startIndex","endDateOffset","endIndex","endRowIdx","startRowIdx","startCol","endCol","origStartRowIdx","$compile","panes","addPane","pane","handler","$parent","topHeight","pane1","pane2","vertical","pane1Min","minSize","pane2Min","pane2Size","initSize","drag","lastSize","minified","after","getBoundingClientRect","setPosition","pos","ev","clientY","clientX","onMinimizeUp","onMinimizeDown","wbSplitterCtrl","$templateCache"],"mappings":"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","file":"../admin-admin-app.min.js","sourcesContent":["//'use strict';\n\n//$(document).bind('touchmove', false);\n\n\nvar wbApp = angular.module('wbApp', [\n 'ngAnimate',\n 'mgcrea.ngStrap',\n 'pascalprecht.translate',\n 'ngRoute',\n 'ngResource', \n 'ngSanitize',\n 'wb.directives', \n //'http-auth-interceptor',\n 'services.breadcrumbs',\n 'textAngular',\n //'authDirectives',\n 'angulartics',\n 'angulartics.google.analytics',\n 'googlechart',\n 'LocalStorageModule',\n 'WBGrid',\n 'ngImgCrop',\n 'angular-loading-bar',\n 'uiGmapgoogle-maps',\n 'jkuri.gallery',\n 'dx'\n]).run(['$rootScope', '$translate', function ($rootScope, $translate) {\n $rootScope.$on(\"$routeChangeSuccess\", function (event, currentRoute, previousRoute) {\n $rootScope.title = $translate.instant(currentRoute.label);\n });\n}]);\n\nwbApp.config(['$logProvider',\n function ($logProvider) {\n $logProvider.debugEnabled(true);\n}]);\n\nwbApp.config(['$datepickerProvider', function ($datepickerProvider) {\n angular.extend($datepickerProvider.defaults, {\n startWeek: 1,\n autoclose: true,\n container: 'body',\n useNative: true,\n dateFormat: 'd.M.yyyy'\n });\n}]);\n\n\nwbApp.config(['$timepickerProvider', function ($timepicketProvider) {\n angular.extend($timepicketProvider.defaults, {\n autoclose: true,\n //container: 'body',\n useNative: true, \n timeFormat: 'H:mm'\n });\n}]);\n\nwbApp.config(['$modalProvider', function ($modalProvider) {\n angular.extend($modalProvider.defaults, {\n animation: 'am-fade-and-slide-top',\n placement: 'center',\n backdrop: 'static',\n });\n}]);\n\nwbApp.config(['$popoverProvider', function($popoverProvider) {\n angular.extend($popoverProvider.defaults, {\n container: 'body',\n html: true\n });\n}]);\n\nwbApp.config(['localStorageServiceProvider', function (localStorageServiceProvider) {\n localStorageServiceProvider.setPrefix('wbAppNgAdmin');\n localStorageServiceProvider.setStorageType('localStorage');\n localStorageServiceProvider.setNotify(true, true);\n}]);\n\n\n//var regexIso8601 = /^(\\d{4}|\\+\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2}):(\\d{2})(Z|([\\-+])(\\d{2}):(\\d{2}))?)?)?)?$/;\n//var regexIso8601 = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(Z|([\\-+])(\\d{2}):(\\d{2}))?$/;\n\nfunction convertDateStringsToDates(input) {\n // Ignore things that aren't objects.\n if (typeof input !== \"object\") return input;\n\n for (var key in input) {\n if (!input.hasOwnProperty(key)) continue;\n\n var value = input[key];\n // var match;\n // Check for string properties which look like dates.\n if (typeof value === \"string\" && isNaN(value)) {\n var date = moment(value, moment.ISO_8601);\n if (date.isValid()) {\n input[key] = date.toDate();\n }\n } else if (typeof value === \"object\") {\n // Recurse into object\n convertDateStringsToDates(value);\n }\n }\n}\n\n// If the property is Date and property name ends with Utc than it converts from local to Utc and appends Z to resulting string\nfunction convertDatesToDateString(input) {\n\n return _.cloneDeepWith(input, function (value, key) {\n if (value instanceof Date) {\n var date = moment(value);\n if (date.isValid()) {\n if (isNaN(key) && key.endsWith('Utc')) {\n return date.utc().format();\n } else {\n return date.format('YYYY-MM-DDTHH:mm:ss');\n }\n }\n }\n });\n}\n\nwbApp.config([\"$httpProvider\", function ($httpProvider) {\n $httpProvider.defaults.transformResponse.push(function (data, headerGetter) {\n convertDateStringsToDates(data);\n return data;\n });\n\n $httpProvider.defaults.transformRequest.push(function (data, header) {\n return data;\n });\n}]);\n\n\nwbApp.config(['$translateProvider', function ($translateProvider) {\n $translateProvider\n .useSanitizeValueStrategy(null);\n $translateProvider\n .preferredLanguage('en');\n}]);\n\n\n// Strip the timezone\nDate.prototype.toISOString = function () {\n return moment(this).format('YYYY-MM-DDTHH:mm:ss');\n};\n\nwbApp.constant('tenantInfo', tenantInfo);\nwbApp.constant('preferredLanguage', preferredLanguage);\n\nwbApp.config(['uiGmapGoogleMapApiProvider', function (uiGmapGoogleMapApiProvider) {\n uiGmapGoogleMapApiProvider.configure({\n key: 'AIzaSyDgac1ahn5_WNYnb1b0TgRf7Q_JhM3ZRQc',\n v: '3.20', //defaults to latest 3.X anyhow\n libraries: 'weather,geometry,visualization'\n });\n}]);\n\n\nNumber.prototype.pad = function (size) {\n var s = String(this);\n while (s.length < (size || 2)) { s = \"0\" + s; }\n return s;\n}\n\n\n","'use strict';\r\n\r\nwbApp.config(['$routeProvider',\r\n function ($routeProvider) {\r\n $routeProvider.\r\n when('/dashboard', {\r\n templateUrl: 'dashboard/dashboard.html',\r\n controller: 'DashboardCtrl',\r\n label: 'TXT_MENU_DASHBOARD'\r\n })\r\n .when('/preview-hours/state-codes', {\r\n templateUrl: 'preview-hours/state-codes.html',\r\n controller: 'StateCodesCtrl',\r\n label: 'TXT_MENU_PREVIEW_HOURS_STATE_CODES'\r\n })\r\n .when('/preview-hours/preview-hours', {\r\n templateUrl: 'preview-hours/preview-hours.html',\r\n controller: 'PreviewHoursCtrl',\r\n label: 'TXT_MENU_PREVIEW_HOURS_PREVIEW_HOURS'\r\n })\r\n .when('/preview-hours/preview-interest', {\r\n templateUrl: 'preview-hours/preview-interest.html',\r\n controller: 'PreviewInterestCtrl',\r\n label: 'TXT_MENU_PREVIEW_HOURS_PREVIEW_INTEREST'\r\n })\r\n .when('/reservations/domains', {\r\n templateUrl: 'reservations/domains.html',\r\n controller: 'DomainsCtrl',\r\n label: 'TXT_MENU_RESERVATIONS_DOMAINS'\r\n })\r\n .when('/reservations/schedule', {\r\n templateUrl: 'reservations/reservations-schedule.html',\r\n controller: 'ReservationSchedulesCtrl',\r\n label: 'TXT_MENU_RESERVATIONS_RESERVATIONS_SCHEDULE'\r\n })\r\n .when('/rents/item-types', {\r\n templateUrl: 'rents/item-type/item-type.html',\r\n controller: 'ItemTypesCtrl',\r\n label: 'TXT_MENU_RENTS_ITEM_TYPES'\r\n })\r\n .when('/rents/rent-category-groups', {\r\n templateUrl: 'rents/rent-category-group/rent-category-group.html',\r\n controller: 'RentCategoryGroupsCtrl',\r\n label: 'TXT_MENU_RENTS_RENT_CATEGORY_GROUPS'\r\n })\r\n .when('/rents/rent-categories', {\r\n templateUrl: 'rents/rent-category/rent-category.html',\r\n controller: 'RentCategoriesCtrl',\r\n label: 'TXT_MENU_RENTS_RENT_CATEGORIES'\r\n })\r\n .when('/rents/rent-items', {\r\n templateUrl: 'rents/rent-item/rent-item.html',\r\n controller: 'RentItemsCtrl',\r\n label: 'TXT_MENU_RENTS_RENT_ITEMS'\r\n })\r\n .when('/rents/rents', {\r\n templateUrl: 'rents/rent/rent.html',\r\n controller: 'RentsCtrl',\r\n label: 'TXT_MENU_RENTS_RENTS'\r\n })\r\n .when('/crm/forms', {\r\n templateUrl: 'forms/forms.html',\r\n controller: 'FormsCtrl',\r\n label: 'TXT_MENU_CRM_FORMS'\r\n })\r\n .when('/crm/leads', {\r\n templateUrl: 'leads/leads.html',\r\n controller: 'LeadsCtrl',\r\n label: 'TXT_MENU_CRM_LEADS'\r\n })\r\n .when('/crm/levels', {\r\n templateUrl: 'levels/levels.html',\r\n controller: 'LevelsCtrl',\r\n label: 'TXT_MENU_CRM_LEVELS'\r\n })\r\n .when('/crm/phases', {\r\n templateUrl: 'phases/phases.html',\r\n controller: 'PhasesCtrl',\r\n label: 'TXT_MENU_CRM_PHASES'\r\n })\r\n .when('/users/users', {\r\n templateUrl: 'users/users.html',\r\n controller: 'UsersCtrl',\r\n label: 'TXT_MENU_USERS'\r\n })\r\n .when('/users/user-roles', {\r\n templateUrl: 'users/user-roles.html',\r\n controller: 'UserRolesCtrl',\r\n label: 'TXT_MENU_USERS_USER_ROLES'\r\n })\r\n .when('/users/reference-source', {\r\n templateUrl: 'users/reference-source.html',\r\n controller: 'ReferenceSourceCtrl',\r\n label: 'TXT_MENU_USERS_REFERENCE_SOURCE'\r\n })\r\n .when('/users/employees', {\r\n templateUrl: 'users/employees/employees.html',\r\n controller: 'EmployeesCtrl',\r\n label: 'TXT_MENU_USERS_EMPLOYEES'\r\n })\r\n .when('/users/students', {\r\n templateUrl: 'users/students/students.html',\r\n controller: 'StudentsCtrl',\r\n label: 'TXT_MENU_USERS_STUDENTS'\r\n })\r\n .when('/users/users-consents', {\r\n templateUrl: 'users/users-consents/users-consents.html',\r\n controller: 'UsersConsentsCtrl',\r\n label: 'TXT_MENU_USERS_USERS_CONSENTS'\r\n })\r\n .when('/promo/membership', {\r\n templateUrl: 'promo/membership.html',\r\n controller: 'MembershipCtrl',\r\n label: 'TXT_MENU_PROMO_MEMBERSHIP'\r\n })\r\n .when('/activities/activities', {\r\n templateUrl: 'activities/activities.html',\r\n controller: 'ActivitiesCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_ACTIVITIES'\r\n })\r\n .when('/activities/activity-schedules', {\r\n templateUrl: 'activities/activity-schedule.html',\r\n controller: 'ActivitySchedulesCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_ACTIVITY_SCHEDULES'\r\n })\r\n .when('/activities/activity-reconciliation', {\r\n templateUrl: 'activities/activity-reconciliation.html',\r\n controller: 'ActivityReconciliationCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_ACTIVITY_RECONCILIATION'\r\n })\r\n .when('/activities/activity-tariffs', {\r\n templateUrl: 'activities/activity-tariffs/activity-tariffs.html',\r\n controller: 'ActivityTariffCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_ACTIVITY_TARIFFS'\r\n })\r\n .when('/activities/cz-ms-mt-registry', {\r\n templateUrl: 'cz-ms-mt-registry/cz-ms-mt-registry.html',\r\n controller: 'CzMsMtRegistryCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_CZ_MS_MT_REGISTRY'\r\n }) \r\n .when('/activities/contracts', {\r\n templateUrl: 'activities/contracts/contract.html',\r\n controller: 'ContractsCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_CONTRACTS'\r\n })\r\n .when('/activities/contract-templates', {\r\n templateUrl: 'activities/contract-templates/contract-template.html',\r\n controller: 'ContractTemplatesCtrl',\r\n label: 'TXT_MENU_ACTIVITIES_CONTRACT_TEMPLATES'\r\n })\r\n .when('/messages/email', {\r\n templateUrl: 'messages/email.html',\r\n controller: 'EmailCtrl',\r\n label: 'TXT_MENU_MESSAGES_EMAIL'\r\n })\r\n .when('/messages/sent-emails', {\r\n templateUrl: 'messages/sent-emails.html',\r\n controller: 'SentEmailsCtrl',\r\n label: 'TXT_MENU_SENT_EMAILS'\r\n })\r\n .when('/messages/email-templates', {\r\n templateUrl: 'messages/email-templates.html',\r\n controller: 'EmailTemplatesCtrl',\r\n label: 'TXT_MENU_MESSAGES_EMAIL_TEMPLATES'\r\n })\r\n .when('/messages/sms', {\r\n templateUrl: 'messages/sms.html',\r\n controller: 'SmsCtrl',\r\n label: 'TXT_MENU_MESSAGES_SMS'\r\n })\r\n .when('/courses/subjects', {\r\n templateUrl: 'courses/subjects.html',\r\n controller: 'SubjectsCtrl',\r\n label: 'TXT_MENU_COURSES_SUBJECTS'\r\n })\r\n .when('/courses/courses', {\r\n templateUrl: 'courses/courses/courses.html',\r\n controller: 'CoursesCtrl',\r\n label: 'TXT_MENU_COURSES_COURSES'\r\n })\r\n .when('/courses/online-meetings', {\r\n templateUrl: 'courses/online-meetings/online-meetings.html',\r\n controller: 'OnlineMeetingsCtrl',\r\n label: 'TXT_MENU_COURSES_ONLINE_MEETINGS'\r\n })\r\n .when('/finance/payments', {\r\n templateUrl: 'finance/payments/payments.html',\r\n controller: 'PaymentsCtrl',\r\n label: 'TXT_MENU_FINANCE_PAYMENTS'\r\n })\r\n .when('/finance/due-payments', {\r\n templateUrl: 'finance/due-payments/due-payments.html',\r\n controller: 'DuePaymentsCtrl',\r\n label: 'TXT_MENU_FINANCE_DUE_PAYMENTS'\r\n })\r\n .when('/finance/invoices', {\r\n templateUrl: 'finance/invoices/invoices.html',\r\n controller: 'InvoicesCtrl',\r\n label: 'TXT_MENU_FINANCE_INVOICES'\r\n })\r\n .when('/finance/bank', {\r\n templateUrl: 'finance/bank/bank.html',\r\n controller: 'BankCtrl',\r\n label: 'TXT_MENU_FINANCE_BANK'\r\n })\r\n .when('/finance/accounting-books', {\r\n templateUrl: 'finance/accounting-books/accounting-books.html',\r\n controller: 'AccountingBookCtrl',\r\n label: 'TXT_MENU_FINANCE_ACCOUNTING_BOOKS'\r\n })\r\n .when('/finance/accounting-books/:id', {\r\n templateUrl: 'finance/accounting-books/accounting-books.html',\r\n controller: 'AccountingBookCtrl',\r\n // label: 'TXT_MENU_FINANCE_ACCOUNTING_BOOKS'\r\n }) \r\n .when('/finance/accounting-books/:id/tab/:tabId', {\r\n templateUrl: 'finance/accounting-books/accounting-books.html',\r\n controller: 'AccountingBookCtrl',\r\n // label: 'TXT_MENU_FINANCE_ACCOUNTING_BOOKS'\r\n })\r\n .when('/finance/compensations', {\r\n templateUrl: 'finance/compensations/compensations.html',\r\n controller: 'CompensationsCtrl',\r\n label: 'TXT_MENU_FINANCE_COMPENSATIONS'\r\n })\r\n .when('/finance/online-payment-configurations', {\r\n templateUrl: 'finance/online-payment-configurations/online-payment-configurations.html',\r\n controller: 'OnlinePaymentConfigurationCtrl',\r\n label: 'TXT_MENU_FINANCE_ONLINE_PAYMENT_CONFIGURATION'\r\n })\r\n .when('/finance/online-payments', {\r\n templateUrl: 'finance/online-payments/online-payments.html',\r\n controller: 'OnlinePaymentsCtrl',\r\n label: 'TXT_MENU_FINANCE_ONLINE_PAYMENTS'\r\n })\r\n .when('/finance/tax-documents', {\r\n templateUrl: 'finance/tax-documents/tax-documents.html',\r\n controller: 'TaxDocumentsCtrl',\r\n label: 'TXT_MENU_FINANCE_TAX_DOCUMENTS'\r\n })\r\n .when('/storage/protected-storage', {\r\n templateUrl: 'storage/protected-storage/protected-storage.html',\r\n controller: 'ProtectedStorageCtrl',\r\n label: 'TXT_MENU_STORAGE_PROTECTED_STORAGE'\r\n })\r\n .when('/storage/pictures', {\r\n templateUrl: 'storage/pictures/pictures.html',\r\n controller: 'PicturesCtrl',\r\n label: 'TXT_MENU_STORAGE_PICTURES'\r\n })\r\n .when('/survey/surveys', {\r\n templateUrl: 'survey/surveys.html',\r\n controller: 'SurveysCtrl',\r\n label: 'TXT_MENU_SURVEYS_SURVEY'\r\n })\r\n .when('/reports/registeredAttendance', {\r\n templateUrl: 'reports/registered-attendance.html',\r\n controller: 'RegisteredAttendanceCtrl',\r\n label: 'TXT_MENU_DASHBOARD_REGISTERED_ATTENDANCE'\r\n })\r\n .when('/reports/franchise-attendance-summary', {\r\n templateUrl: 'reports/franchise-attendance-summary.html',\r\n controller: 'FranchiseAttendanceSummaryCtrl',\r\n label: 'TXT_MENU_REPORTS_FRANCHISE_ATTENDANCE_SUMMARY'\r\n })\r\n .when('/reports/registrations-summary', {\r\n templateUrl: 'reports/registrations-summary.html',\r\n controller: 'RegistrationsSummaryCtrl',\r\n label: 'TXT_MENU_REPORTS_REGISTRATIONS_SUMMARY'\r\n })\r\n .when('/reports/one-offs-summary', {\r\n templateUrl: 'reports/one-offs-summary.html',\r\n controller: 'OneOffsSummaryCtrl',\r\n label: 'TXT_MENU_REPORTS_ONE_OFFS_SUMMARY'\r\n })\r\n .when('/reports/course-student-fluctuation', {\r\n templateUrl: 'reports/course-student-fluctuation.html',\r\n controller: 'CourseStudentFluctuationCtrl',\r\n label: 'TXT_MENU_REPORTS_COURSE_STUDENT_FLUCTUATION'\r\n })\r\n .when('/reports/courses-attendance-summary', {\r\n templateUrl: 'reports/courses-attendance-summary.html',\r\n controller: 'CoursesAttendanceSummaryCtrl',\r\n label: 'TXT_MENU_REPORTS_COURSES_ATTENDANCE_SUMMARY'\r\n })\r\n .when('/setting/semesters', {\r\n templateUrl: 'setting/semesters/semesters.html',\r\n controller: 'SemestersCtrl',\r\n label: 'TXT_MENU_SETTING_SEMESTERS'\r\n })\r\n .when('/setting/classrooms', {\r\n templateUrl: 'setting/classrooms/classrooms.html',\r\n controller: 'ClassroomsCtrl',\r\n label: 'TXT_MENU_SETTING_CLASSROOMS'\r\n })\r\n .when('/setting/courseTypes', {\r\n templateUrl: 'setting/course-types/course-types.html',\r\n controller: 'CourseTypesCtrl',\r\n label: 'TXT_MENU_SETTING_COURSE_TYPES'\r\n })\r\n .when('/setting/compensation-groups', {\r\n templateUrl: 'setting/compensation-groups/compensation-groups.html',\r\n controller: 'CompensationGroupsCtrl',\r\n label: 'TXT_MENU_SETTING_COMPENSATION_GROUPS'\r\n })\r\n .when('/users/groups', {\r\n templateUrl: 'users/groups/groups.html',\r\n controller: 'GroupsCtrl',\r\n label: 'TXT_MENU_SETTING_GROUPS'\r\n })\r\n .when('/setting/age-ranges', {\r\n templateUrl: 'setting/age-ranges/age-ranges.html',\r\n controller: 'AgeRangesCtrl',\r\n label: 'TXT_MENU_SETTING_AGE_RANGES'\r\n })\r\n .when('/setting/holiday-calendars', {\r\n templateUrl: 'setting/holiday-calendars/holiday-calendars.html',\r\n controller: 'HolidayCalendarsCtrl',\r\n label: 'TXT_MENU_SETTING_HOLIDAY_CALENDARS'\r\n })\r\n .when('/setting/terminals', {\r\n templateUrl: 'setting/terminals/terminals.html',\r\n controller: 'TerminalsCtrl',\r\n label: 'TXT_MENU_SETTING_TERMINALS'\r\n })\r\n .when('/setting/news', {\r\n templateUrl: 'setting/news/news.html',\r\n controller: 'NewsCtrl',\r\n label: 'TXT_MENU_SETTING_NEWS'\r\n }) \r\n .when('/franchise/franchises', {\r\n templateUrl: 'franchise/franchises/franchises.html',\r\n controller: 'FranchisesCtrl',\r\n label: 'TXT_MENU_FRANCHISE_FRANCHISES'\r\n })\r\n .when('/franchise/franchises-attendance-summary', {\r\n templateUrl: 'franchise/franchises/franchises-attendance-summary.html',\r\n controller: 'FranchisesAttendanceSummaryCtrl',\r\n label: 'TXT_MENU_FRANCHISE_FRANCHISES_ATTENDANCE_SUMMARY'\r\n })\r\n .when('/rfid-cards/rfid-card-log', {\r\n templateUrl: 'rfid-cards/attendance-log/attendance-log.html',\r\n controller: 'AttendanceLogCtrl',\r\n label: 'TXT_MENU_RFID_CARD_LOG_RFID_CARD_LOG'\r\n })\r\n .when('/rfid-cards/rfid-card-log-upload-contact', {\r\n templateUrl: 'rfid-cards/log-upload-contact/log-upload-contact.html',\r\n controller: 'LogUploadContactCtrl',\r\n label: 'TXT_MENU_RFID_CARD_LOG_RFID_CARD_LOG_UPLOAD_CONTACT'\r\n })\r\n .when('/rfid-cards/device-registration', {\r\n templateUrl: 'rfid-cards/device-registration/device-registration.html',\r\n controller: 'DeviceRegistrationCtrl',\r\n label: 'TXT_MENU_RFID_CARD_LOG_TXT_MENU_RFID_CARD_LOG_DEVICE_REGISTRATION'\r\n })\r\n .when('/system/settings', {\r\n templateUrl: 'system/settings/settings.html',\r\n controller: 'SettingsCtrl',\r\n label: 'TXT_MENU_SYSTEM_SETTINGS'\r\n })\r\n .when('/system/sms-history', {\r\n templateUrl: 'system/sms-history/sms-history.html',\r\n controller: 'SmsHistoryCtrl',\r\n label: 'TXT_MENU_SYSTEM_SMS_HISTORY'\r\n })\r\n .when('/system/data-export-history', {\r\n templateUrl: 'system/data-export-history/data-export-history.html',\r\n controller: 'DataExportHistoryCtrl',\r\n label: 'TXT_MENU_SYSTEM_DATA_EXPORT_HISTORY'\r\n })\r\n .when('/actions/action-categories', {\r\n templateUrl: 'actions/action-categories.html',\r\n controller: 'ActionCategoriesCtrl',\r\n label: 'TXT_MENU_ACTIONS_ACTION_CATEGORIES'\r\n })\r\n .when('/actions/actions', {\r\n templateUrl: 'actions/actions/actions.html',\r\n controller: 'ActionsCtrl',\r\n label: 'TXT_MENU_ACTIONS_ACTIONS'\r\n })\r\n .when('/schedule/schedule', {\r\n templateUrl: 'schedule/schedule.html',\r\n controller: 'ScheduleCtrl',\r\n label: 'TXT_MENU_SCHEDULE_SCHEDULE'\r\n })\r\n .otherwise({\r\n redirectTo: '/dashboard'\r\n });\r\n }]);\r\n\r\n","wbApp.controller('ActionCategoriesCtrl', ['$scope', '$modal', '$translate', 'subjectsSvc', 'tenantInfo',\nfunction ($scope, $modal, $translate, subjectsSvc, tenantInfo) {\n\n $scope.gridSettings = {\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '270px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\n ]\n }\n\n function setSelectedActionCategory(actionCategory) {\n $scope.selectedActionCategory = actionCategory;\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.actionCategories = subjectsSvc.getAllForActionsAsync(true);\n setSelectedActionCategory(null);\n });\n\n $scope.actionCategories = subjectsSvc.getAllForActionsAsync(true);\n\n $scope.ActionCategory = {};\n\n $scope.onRowSelected = function (data) {\n setSelectedActionCategory(data);\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = subjectsSvc.createNew(2);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n subjectsSvc.remove(data);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"actions/action-categories-detail-tabs/detail.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'actions/action-categories-detail.html',\n show: false, \n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('ActionCategoriesDetailCtrl', ['$scope', 'subjectsSvc', 'tenantInfo', 'tenantSettingSvc',\nfunction ($scope, subjectsSvc, tenantInfo, tenantSettingSvc) {\n\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n \n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!data.id) {\n subjectsSvc.insert(data, success, error);\n } else {\n subjectsSvc.update(data, success, error);\n }\n\n function success() {\n $scope.$hide();\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n}]);\n","wbApp.controller('ActionsCtrl', ['$scope', '$modal', '$translate', 'semesterSvc', 'courseSvc', 'securitySvc', 'tenantSettingSvc', 'courseRegistrationSvc',\nfunction ($scope, $modal, $translate, semesterSvc, courseSvc, securitySvc, tenantSettingSvc, courseRegistrationSvc) {\n\n $scope.isInAccountingBookRole = securitySvc.isInRole('AccountingBook');\n $scope.filteredActions = [];\n\n function setSelectedAction(action, refresh) {\n $scope.selectedAction = action;\n\n if (!action && !!$scope.gridSettings.gridInstance) {\r\n $scope.gridSettings.gridInstance.clearSelection();\r\n }\n\n $scope.$broadcast('selectedActionChanged', { action: action, refresh: !!refresh });\n\n }\n\n semesterSvc.getDefaultAsync()\n .then(function (semester) {\n $scope.semesterID = semester.id;\n\n $scope.actions = courseSvc.getAllActionsAsync($scope.semesterID, true);\n $scope.filteredActions = $scope.actions;\n setSelectedAction(null);\n });\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID) {\n $scope.actions = courseSvc.getAllActionsAsync($scope.semesterID, true);\n $scope.filteredActions = $scope.actions;\n setSelectedAction(null);\n }\n });\n\n $scope.$on('onActionShouldRefresh', function (e, data) {\n courseSvc.refreshActionRecord($scope.semesterID, data.action.courseID, $scope.actions, function () {\n if ($scope.selectedAction.courseID === data.action.courseID) {\n setSelectedAction(data.action, true);\n if ($scope.gridSettings.gridInstance) {\r\n $scope.gridSettings.gridInstance.selectRows(data.action, false);\r\n }\n }\n });\n });\n\n $scope.getSemesterPercentFilled = function () {\n return ($scope.getSemesterFilled() / $scope.getSemesterCapacity()) * 100;\n }\n\n $scope.getSemesterFilled = function () {\n if (!!$scope.filteredActions) {\n return _.sumBy($scope.filteredActions, 'filled');\n }\n return 0;\n }\n\n $scope.getSemesterCapacity = function () {\n if (!!$scope.filteredActions) {\n return _.sumBy($scope.filteredActions, 'capacity');\n }\n return 100;\n }\n\n $scope.onFilterApplied = function (rows) {\n $scope.filteredActions = rows;\n }\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n $scope.actions = courseSvc.getAllActionsAsync($scope.semesterID, true);\n }\n setSelectedAction(null);\n }\n\n $scope.gridSettings = {\n name: 'actions',\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '170px' },\n { dataField: 'abbreviation', caption: $translate.instant(\"TXT_LBL_ABBREVIATION\"), dataType: 'string', width: '130px' },\n { dataField: 'subjectName', caption: $translate.instant('TXT_LBL_ACTION_CATEGORY'), dataType: 'string', sortOrder: 'asc' },\n { dataField: 'firstLesson', caption: $translate.instant('TXT_MENU_SCHEDULE'), dataType: 'date', format: { raw: \"EEE - dd.MM. HH:mm\" }, width: '140px' },\n { dataField: 'teacher', caption: $translate.instant('TXT_LBL_EMPLOYEE'), dataType: 'string', width: '170px' },\n { dataField: 'capacity', caption: $translate.instant('TXT_LBL_CAPACITY'), dataType: 'number', width: '70px' },\n { dataField: 'filled', caption: $translate.instant('TXT_LBL_FILLED'), dataType: 'number', width: '80px' },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format:'currency', precision: 2, width: '100px' },\n { dataField: 'allowRegistration', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n ],\r\n customCommands: [{\r\n text: $translate.instant('TXT_MENU_RESEND_COURSE_REGISTRATION_NOTIFICATION'),\r\n isVisible: function () { return securitySvc.isInRole('CourseRegistration'); },\r\n callback: function (data) { onResendCourseRegistrationNotification(data.courseID); }\r\n }]\n }\n\n function onResendCourseRegistrationNotification(courseID) {\r\n var courseRegistrations = courseRegistrationSvc.getAllForCourse(courseID);\r\n courseRegistrations.$promise.then(function (data) {\r\n _.forEach(data, function (courseRegistration) {\r\n courseRegistrationSvc.sendRegistrationNotification(courseRegistration.courseRegistrationID);\r\n });\r\n });\r\n }\n \n $scope.selectedAction = {};\n\n $scope.onRowSelected = function (data) {\n $scope.selectedAction = data;\n setSelectedAction($scope.selectedAction);\n }\n\n $scope.onRowCopy = function (data) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.collection = $scope.actions;\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.model.courseID = 0; \n detailDialogPromise.show();\r\n });\r\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.actions;\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onActionSave = function (model) {\n setSelectedAction(model, true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.actions;\n detailDialogPromise.$scope.model = courseSvc.createNew($scope.semesterID, true); \n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n courseSvc.remove(data, $scope.actions, function () {\n $scope.selectedAction = null;\n setSelectedAction(null);\n });\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"actions/actions/actions-detail-tabs/detail.html\"\n }, {\n title: 'TXT_LBL_STUDENTS',\n template: 'actions/actions/actions-detail-tabs/students.html'\n }, {\n title: 'TXT_MENU_SCHEDULE',\n template: 'actions/actions/actions-detail-tabs/schedule.html'\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n var detailDialogPromise = $modal({\n templateUrl: 'actions/actions/detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('ActionsDetailCtrl', ['$scope', '$modal', 'courseSvc', 'tenantSettingSvc',\nfunction ($scope, $modal, courseSvc, tenantSettingSvc) {\n\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n \n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!data.courseID) {\n courseSvc.insert(data, $scope.collection, success, error);\n } else {\n courseSvc.update(data, $scope.collection, success, error);\n }\n\n function success(model) {\n $scope.$hide();\n if (!!$scope.onCourseSave) {\n $scope.onCourseSave(model);\n }\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"actions/actions/detail-main-tab.html\"\n }, {\n title: 'TXT_PRICE_TAB',\n template: \"actions/actions/detail-price-tab.html\"\n }, {\n title: 'TXT_LBL_SETTING',\n template: \"actions/actions/detail-settings-tab.html\"\n }, {\n title: 'TXT_LBL_DESCRIPTION',\n template: \"actions/actions/detail-description-tab.html\"\n }, {\n title: 'TXT_LBL_PICTURES',\n template: \"actions/actions/detail-pictures-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.onDeletePictureBtnClick = function (picture) {\n _.remove($scope.model.pictures || [], { imageUri: picture.imageUri });\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictures) {\n $scope.model.pictures = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictures, { imageUri: p.imageUri })) {\n $scope.model.pictures.push(p);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('ActionsScheduleCtrl', ['$scope', '$modal', '$translate','courseScheduleSvc',\nfunction ($scope, $modal, $translate, courseScheduleSvc) {\n\n var selectedAction = null;\n var isActive = false;\n var loaded = false;\n $scope.canAddNewRow = false;\n $scope.actionSchedules = [];\n\n function setCanAddNewRow() {\n if ($scope.actionSchedules.$promise) {\n $scope.actionSchedules.$promise.then(function () {\n if ($scope.actionSchedules.length === 0) {\n $scope.canAddNewRow = true;\n } else {\n $scope.canAddNewRow = false;\n }\n });\n } else {\n $scope.canAddNewRow = false;\n }\n }\n\n $scope.$on('selectedActionChanged', function (e, actionInd) {\n if (actionInd.action) {\n if (isActive) {\n if (selectedAction !== actionInd.action || actionInd.refresh) {\n $scope.actionSchedules = courseScheduleSvc.getAllAsync(actionInd.action.courseID, true /*actionInd.refresh*/);\n setCanAddNewRow();\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.actionSchedules.length = 0;\n }\n selectedAction = actionInd.action;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedAction) {\n $scope.actionSchedules = courseScheduleSvc.getAllAsync(selectedAction.courseID, true);\n setCanAddNewRow();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.gridSettings = {\n columns: [\n { dataField: 'startDate', caption: $translate.instant('TXT_LBL_START_DATE'), dataType: 'date', format: { raw: \"dd.MM.yy EEE HH:mm\" }, width: '150px', sortOrder: 'asc' },\n { dataField: 'endDate', caption: $translate.instant('TXT_LBL_END_DATE'), dataType: 'date', format: { raw: \"HH:mm\" }, width: '60px' },\n { dataField: 'classroomName', caption: $translate.instant('TXT_LBL_CLASSROOM'), dataType: 'string', width: '180px' },\n { dataField: 'teacher', caption: $translate.instant('TXT_LBL_EMPLOYEE'), dataType: 'string', width: '180px' },\n { dataField: 'filled', caption: $translate.instant('TXT_LBL_FILLED'), dataType: 'number', width: '70px' },\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' }\n ],\n shouldDisableAdd: function () { return !$scope.selectedAction || !$scope.canAddNewRow }\n }\n \n $scope.selectedSchedule = {};\n\n $scope.onRowSelected = function (data) {\n $scope.selectedSchedule = data;\n }\n\n $scope.onRowEdit = function (data) {\n eventDetailDialogPromise.$promise.then(function () {\n eventDetailDialogPromise.$scope.model = angular.copy(data);\n eventDetailDialogPromise.$scope.hideActionChange = true;\n eventDetailDialogPromise.$scope.onSave = $scope.onActionScheduleChanged;\n eventDetailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n if ($scope.canAddNewRow) {\n eventDetailDialogPromise.$promise.then(function () {\n eventDetailDialogPromise.$scope.model = courseScheduleSvc.createNew(selectedAction);\n eventDetailDialogPromise.$scope.hideActionChange = true;\n eventDetailDialogPromise.$scope.onSave = $scope.onActionScheduleChanged;\n eventDetailDialogPromise.show();\n });\n }\n }\n\n $scope.onRowDelete = function (data) {\n courseScheduleSvc.remove(data, { sendEmailNotification: true, sendSmsNotification: false }, function () {\n $scope.onActionScheduleChanged(data);\n });\n setCanAddNewRow();\n }\n\n $scope.onActionScheduleChanged = function (model) {\n $scope.$emit('onActionShouldRefresh', { action: $scope.selectedAction });\n }\n\n //var detailDialogPromise = $modal({\n // templateUrl: 'actions/actions/actions-detail-tabs/schedule-detail.html',\n // show: false,\n // scope: $scope.$new()\n //});\n\n var eventDetailDialogPromise = $modal({\n templateUrl: 'schedule/schedule-event-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","'use strict';\n\nwbApp.controller('ActionsStudentsAttendanceDetailCtrl', ['$scope', 'attendanceSvc',\nfunction ($scope, attendanceSvc) {\n\n $scope.isSaving = false;\n $scope.isBusy = true;\n\n var model = null;\n\n var attendance = attendanceSvc.getStudentCourseAttendance($scope.courseID, $scope.studentID)\n .$promise.then(function (atts) {\n $scope.isBusy = false;\n\n if (atts.length > 0) {\n $scope.model = atts[0];\n $scope.modelOrig = angular.copy($scope.model);\n }\n });\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success() {\n $scope.onAfterSuccessSave();\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n function cancel() {\n $scope.isSaving = false;\n }\n\n attendanceSvc.update(model, null, success, error);\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n}]);\n","'use strict';\n\nwbApp.controller('ActionsStudentsCtrl', ['$scope', '$q', '$modal', '$window', '$translate', '$filter', 'securitySvc', 'tenantSettingSvc', 'courseRegistrationSvc', 'gridSortSvc',\nfunction ($scope, $q, $modal, $window, $translate, $filter, securitySvc, tenantSettingSvc, courseRegistrationSvc, gridSortSvc) {\n\n $scope.tenantSettings = tenantSettingSvc.settings;\n\n $scope.selectedAction = null;\n var isActive = false;\n var loaded = false;\n $scope.canAddNewRow = false;\n $scope.actionRegistrations = [];\n\n function setCanAddNewRow() {\n if (loaded && !!$scope.selectedAction && !!$scope.selectedAction.firstLesson) {\n $scope.canAddNewRow = true;\n } else {\n $scope.canAddNewRow = false;\n }\n }\n\n $scope.$on('selectedActionChanged', function (e, actionInd) {\n if (actionInd.action) {\n if (isActive) {\n if ($scope.selectedAction !== actionInd.action || actionInd.refresh) {\n $scope.actionRegistrations = courseRegistrationSvc.getAllForCourse(actionInd.action.courseID);\n $scope.actionRegistrations.$promise.then(function () {\n setUpGrid();\n setCanAddNewRow();\n });\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.actionRegistrations.length = 0;\n }\n $scope.selectedAction = actionInd.action;\n setCanAddNewRow();\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.selectedAction) {\n $scope.actionRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedAction.courseID);\n $scope.actionRegistrations.$promise.then(function () {\n setUpGrid();\n setCanAddNewRow();\n });\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n setCanAddNewRow();\n });\n\n $scope.gridSettings = {\n columns: [\n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '190px', sortOrder: 'asc',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'studentName', 'studentSurname', 'studentMiddleName') },\n },\n { dataField: 'studentAge', caption: $translate.instant('TXT_LBL_AGE'), dataType: 'string', width: '70px' },\n {\n dataField: 'contactPhone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.contactPhone);\n },\n width: '140px'\n },\n { dataField: 'contactEmail', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px' },\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\n { dataField: 'attendanceStatusText', caption: $translate.instant('TXT_LBL_ATTENDANCE'), dataType: 'string', width: '100px' },\n { dataField: 'paymentsSum', caption: $translate.instant('TXT_LBL_PAYMENTS'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'reservedPlaces', caption: $translate.instant('TXT_LAB_RESERVED_PALCES'), dataType: 'number', width: '40px' },\n { dataField: 'registrationDate', caption: $translate.instant('TXT_SEC_CLIENT_COURSE_REGISTRATION'), dataType: 'date', format: { date: 'short' }, width: '110px' },\n ],\n shouldDisableAdd: function () { return !$scope.selectedAction || !$scope.canAddNewRow },\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex); \n if (data.attendanceStatusNotPresent) {\n e.rowElement.addClass('text-muted');\n }\n }\n },\n onCellPrepared: function (e) {\n if (e.rowType === \"data\" && e.columnIndex == 2) {\n e.cellElement.mousemove(function () {\n if (!!e.data.studentBirthday) {\n e.cellElement.attr('title', $translate.instant(\"TXT_LAB_BIRTHDAY\") + \": \" + $filter('date')(e.data.studentBirthday, 'shortDate'));\n }\n });\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_MENU_CREATE_PAYMENT'),\n isVisible: function (row) { return (row.arrear > 0) && securitySvc.isInRole('Payment.Insert'); },\n callback: function (row) { addPayment(row); }\n }, {\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\n isVisible: function () { return securitySvc.isInRole('Reports'); },\n callback: function (data) { onPrintInvoice(data.courseRegistrationID); }\n }, {\n text: $translate.instant('TXT_MENU_PRINT_APPLICATION_FORM'),\n isVisible: function () { return securitySvc.isInRole('Reports') && securitySvc.isInRole('CourseRegistration.PrintApplicationForm'); },\n callback: function (data) { onPrintApplicationForm(data.courseRegistrationID); }\n }, {\n text: $translate.instant('TXT_MENU_EDIT_ATTENDANCE'),\n isVisible: function () { return securitySvc.isInRole('Attendance.Update'); },\n callback: function (data) { onAttendanceUpdate(data.courseID, data.studentID); }\n }, {\n text: $translate.instant('TXT_MENU_RESEND_COURSE_REGISTRATION_NOTIFICATION'),\n isVisible: function () { return securitySvc.isInRole('CourseRegistration'); },\n callback: function (data) {\n courseRegistrationSvc.sendRegistrationNotification(data.courseRegistrationID)\n .then(function () {\n data.notificationSent = true;\n });\n }\n }]\n }\n\n\n function setUpGrid() {\n if ($scope.selectedAction && $scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.columnOption('reservedPlaces', 'visible', $scope.selectedAction.allowMultiAttendance);\n }\n }\n\n function onPrintInvoice(courseRegistrationID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + courseRegistrationID + '&ReportIDType=0',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onPrintApplicationForm(courseRegistrationID) {\n $window.open('/Admin/Report/ApplicationFormAction?CourseRegistrationID=' + courseRegistrationID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onAttendanceUpdate(courseID, studentID) {\n attendanceDetailDialogPromise.$promise.then(function () {\n attendanceDetailDialogPromise.$scope.courseID = courseID;\n attendanceDetailDialogPromise.$scope.studentID = studentID;\n attendanceDetailDialogPromise.$scope.onAfterSuccessSave = function () {\n $scope.onActionRegistrationChanged($scope.selectedAction);\n }\n attendanceDetailDialogPromise.show();\n });\n }\n\n if ($scope.tenantSettings.showArrearInsteadOfPayments) {\n var column = _.find($scope.gridSettings.columns, { dataField: 'paymentsSum' });\n if (column) {\n column.dataField = 'arrear';\n column.caption = $translate.instant('TXT_LBL_ARREAR')\n }\n }\n \n $scope.selectedRegistration = {};\n\n $scope.onRowSelected = function (data) {\n $scope.selectedRegistration = data;\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.action = $scope.selectedAction;\n detailDialogPromise.$scope.model = new webooker_courses_models.CourseRegistration(data);\n detailDialogPromise.$scope.onAfterSuccessSave = function () {\n $scope.actionRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedAction.courseID);\n $scope.onActionRegistrationChanged($scope.selectedAction);\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onActionRegistrationChanged = function (model) {\n $scope.$emit('onActionShouldRefresh', { action: $scope.selectedAction });\n }\n\n $scope.onRowAdd = function () {\n\n $q.all([detailDialogPromise.$promise, courseRegistrationSvc.createNew($scope.selectedAction, true)])\n .then(function (data) {\n var actionRegistration = data[1];\n detailDialogPromise.$scope.action = $scope.selectedAction;\n detailDialogPromise.$scope.model = actionRegistration;\n detailDialogPromise.$scope.onAfterSuccessSave = function () {\n $scope.actionRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedAction.courseID);\n $scope.onActionRegistrationChanged($scope.selectedAction);\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n courseRegistrationSvc.remove(\n data,\n 2, /* SubjectCategory.OneOffActions */\n function () {\n $scope.actionRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedAction.courseID);\n $scope.onActionRegistrationChanged($scope.selectedAction);\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'actions/actions/actions-detail-tabs/students-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var attendanceDetailDialogPromise = $modal({\n templateUrl: 'actions/actions/actions-detail-tabs/actions-attendance-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var addPaymentPromise = $modal({\n templateUrl: 'finance/payments/payments-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n function addPayment(data) {\n addPaymentPromise.$scope.isAddDuePayment = true;\n addPaymentPromise.$scope.paymentDetail = {\n paymentID: 0,\n invoiceForType: 2,\n invoiceID: data.invoiceID,\n amount: data.arrear,\n selectedDate: moment().toDate(),\n };\n\n addPaymentPromise.$promise.then(function () {\n addPaymentPromise.$scope.detailError = null;\n addPaymentPromise.$scope.onSave = function () {\n $scope.actionRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedAction.courseID);\n }\n\n addPaymentPromise.show();\n });\n }\n}]);\n","'use strict';\n\nwbApp.controller('ActionsStudentsDetailCtrl', ['$scope', 'securitySvc', 'messageBoxSvc', 'courseRegistrationSvc', 'tenantSettingSvc',\n 'localStorageService', '$translate',\nfunction ($scope, securitySvc, messageBoxSvc, courseRegistrationSvc, tenantSettingSvc, localStorageService, $translate) {\n\n $scope.allowDiscounts = tenantSettingSvc.settings.allowDiscounts;\n $scope.calculatedDueDate = { dueDate: null };\n $scope.modelOrig = angular.copy($scope.model);\n $scope.registeredAttendance = [];\n\n $scope.isReady = false;\n $scope.isBusy = false;\n\n $scope.onRegistrationDateChange = function(registrationDate) {\n if ($scope.allowDiscounts) {\n courseRegistrationSvc.calcExpectedDueDate($scope.action.courseID, registrationDate).$promise.then( function(data) {\n $scope.calculatedDueDate.dueDate = data.dueDate;\n });\n }\n }\n \n function extendModel(action) {\n\n setIsBusy(true);\n\n courseRegistrationSvc.initializeModel($scope.model, action, true, true)\n .then(function () {\n $scope.modelOrig = angular.copy($scope.model);\n $scope.registeredAttendance = $scope.model.registeredAttendance;\n\n if ($scope.allowDiscounts) {\n courseRegistrationSvc.calcExpectedDueDate($scope.action.courseID, $scope.model.registrationDate).$promise.then( function(data) {\n $scope.calculatedDueDate.dueDate = data.dueDate;\n });\n } \n \n setIsBusy(false);\n },\n function (errorResult) {\n $scope.registeredAttendance = [];\n $scope.detailError = errorResult;\n\n setIsBusy(false);\n });\n }\n\n function setIsBusy(isBusy) {\n $scope.isBusy = isBusy;\n $scope.isReady = !isBusy;\n angular.forEach($scope.detailTabs, function (tab) {\n tab.disabled = isBusy;\n });\n }\n\n\n extendModel($scope.action);\n\n $scope.onStudentChange = function (studentID) {\n extendModel($scope.action);\n }\n\n $scope.onAttendanceCountChange = function (model) {\n courseRegistrationSvc.updateReservedPlaces(model, model.reservedPlaces);\n }\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.saveManualAdjustmentTextToLocalStorage(model.invoice);\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success() {\n $scope.onAfterSuccessSave();\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n function cancel() {\n $scope.isSaving = false;\n }\n\n function confirmUpdate(updateInvoice) {\n messageBoxSvc.showConfirmClientNotification({\n userSetting: ['confirmNotificationEventStudent'],\n showSendSmsNotification: false,\n callback: function (notificationConfig) {\n courseRegistrationSvc.update(\n model,\n notificationConfig,\n 2, /* SubjectCategory.OneOffActions */\n updateInvoice,\n success,\n error);\n }\n });\n }\n\n if (!model.courseRegistrationID) {\n messageBoxSvc.showConfirmClientNotification({\n userSetting: ['confirmNotificationEventStudent'],\n showSendSmsNotification: false,\n callback: function (notificationConfig) {\n courseRegistrationSvc.insert(\n model,\n notificationConfig,\n 2, /* SubjectCategory.OneOffActions */\n success,\n error);\n }\n });\n } else {\n if (model.invoice.isModified) {\n // Invoice has changed, ask user for confirmation\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'TXT_TEXT_INVOICE_HAS_CHANGED',\n buttons: [{\n text: 'TXT_BTN_CANCEL',\n callback: cancel\n }, {\n text: 'TXT_BTN_NO_INVOICE_CHANGES',\n callback: function () { confirmUpdate(false); }\n }, {\n text: 'TXT_BTN_CREATE_NEW_INVOICE',\n callback: function () { confirmUpdate(true); }\n }]\n });\n } else {\n courseRegistrationSvc.update(\n model,\n {\n sendEmailNotification: false,\n sendSmsNotification: false \n },\n 2, /* SubjectCategory.OneOffActions */\n false,\n success,\n error);\n }\n\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig) &&\n (!!$scope.model.invoice && !$scope.model.invoice.isModified) &&\n !!$scope.model.courseRegistrationID;\n };\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: 'actions/actions/actions-detail-tabs/students-detail-main-tab.html',\n disabled: true,\n }, {\n title: 'TXT_PRICE_TAB',\n template: 'actions/actions/actions-detail-tabs/students-detail-price-tab.html',\n disabled: true,\n }, {\n title: 'TXT_LBL_PARENT',\n template: 'actions/actions/actions-detail-tabs/students-detail-parent-tab.html',\n disabled: true,\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.saveManualAdjustmentTextToLocalStorage = function (invoice) {\n if (localStorageService.isSupported) {\n var manualAdjustmentLine = _.find(invoice.lines, function (line) {\n return line.lineType == \"ManualAdjustment\" && line.runtimeManualAdjustmentType == 1;\n });\n\n if (!!manualAdjustmentLine) {\n localStorageService.set('manualAdjustmentDiscountLineName', manualAdjustmentLine.name);\n localStorageService.set('manualAdjustmentDiscountLinePercent', manualAdjustmentLine.percent);\n }\n }\n }\n\n $scope.addInvoiceLine = function (manualAdjustmentLineType) {\n var newLine = $scope.model.invoice.addManualAdjustmentLine(manualAdjustmentLineType);\n if (manualAdjustmentLineType == 1) {\n\n if (localStorageService.isSupported) {\n newLine.name = localStorageService.get('manualAdjustmentDiscountLineName') || $translate.instant('TXT_DISCOUNT');\n newLine.percent = localStorageService.get('manualAdjustmentDiscountLinePercent') || 0;\n } else {\n newLine.name = $translate.instant('TXT_DISCOUNT');\n }\n }\n }\n\n $scope.removeInvoiceLine = function (invoice, index) {\n invoice.removeManualAdjustmentLine(index);\n }\n\n $scope.addManualAdjustmentLineDropdown = [\n {\n text: $translate.instant('TXT_ADD_LINE_DISCOUNT_IN_PERCENT'),\n click: 'addInvoiceLine(1)'\n },\n {\n text: $translate.instant('TXT_ADD_LINE_EMPTY'),\n click: 'addInvoiceLine(0)'\n }\n ];\n\n}]);\n","wbApp.directive('wbActionCategoryCombo', ['$timeout', '$translate', '$filter', 'subjectsSvc', 'gridSortSvc',\n function ($timeout, $translate, $filter, subjectsSvc, gridSortSvc) {\n function formatResult(actionCategory) {\n if (!actionCategory) { return; }\n\n return actionCategory.name;\n }\n\n function formatSelection(actionCategory) {\n return actionCategory.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n\n let models = subjectsSvc.getAllForActionsAsync(true);\n\n models.$promise.then(function () {\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_CATEGORY'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5,\n id: function (model) {\n return model.id;\n },\n data: _.sortBy(models, function (a) {\n return gridSortSvc.localeSort(a, 'name');\n }),\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n ctrl.$render = function () {\n $(elm).select2('val', ctrl.$viewValue);\n }\n\n ctrl.$render();\n }, 1);\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n ctrl.$render();\n });\n }\n }\n }]);\n ","'use strict';\n\nwbApp.controller('ActivityReconciliationRecurringInvoiceDetailCtrl', ['$scope', '$filter', 'messageBoxSvc', 'invoiceRecurrenceScheduleSvc',\nfunction ($scope, $filter, messageBoxSvc, invoiceRecurrenceScheduleSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"activities/activity-reconciliation/recurring-invoice-detail-main-tab.html\"\n },\n {\n title: 'TXT_LAB_INVOICE',\n template: \"activities/activity-reconciliation/recurring-invoice-detail-invoice-tab.html\"\n }\n ];\n\n $scope.minDate = moment($scope.model.startDate).startOf('day').subtract(1, 'day');\n\n $scope.detailTabs.activeTab = 0;\n\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n\n if (!data.invoiceRecurrenceScheduleID) {\n invoiceRecurrenceScheduleSvc.insert(data, success, error);\n } else {\n invoiceRecurrenceScheduleSvc.update(data, success, error);\n }\n\n function success(model) {\n $scope.$hide();\n if (!!$scope.onScheduleSave) {\n $scope.onScheduleSave(model);\n }\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n}]);","'use strict';\n\nwbApp.controller('ActivitiesCtrl', ['$scope', '$modal', '$timeout', '$q', '$translate', '$filter', 'activitySvc', 'semesterSvc', \n 'classroomSvc', 'accountingBookSvc', 'protectedStorageSvc', 'securitySvc',\n function ($scope, $modal, $timeout, $q, $translate, $filter, activitySvc, semesterSvc, \n classroomSvc, accountingBookSvc, protectedStorageSvc, securitySvc) {\n\n $scope.isSaving = false;\n $scope.protectedStorageEdit = securitySvc.isInRole('ProtectedStorage.Insert');\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $q.all([semesterSvc.getDefaultAsync(),\n accountingBookSvc.getDefaultAsync(),\n classroomSvc.getAllAsync().$promise,\n accountingBookSvc.getAllAsync().$promise])\n .then(function (data) {\n if (data[0]) {\n $scope.semesterID = data[0].id;\n }\n\n if (data[1]) {\n $scope.defaultAccountingBookID = data[1].id;\n }\n\n $scope.activities = activitySvc.getAllBySemesterIDAsync(\n $scope.semesterID != null ? $scope.semesterID : null);\n });\n\n $scope.onSemesterChange = function (semesterID) {\n refreshData(false);\n }\n\n function refreshData(reselect) {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = activitySvc.getAllBySemesterIDAsync($scope.semesterID, true);\n all.$promise.then(function (data) {\n $scope.activities = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedActivity(null);\n }\n })\n }, 100);\n } else {\n setSelectedActivity(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.activities = [];\n setSelectedActivity(null);\n\n reject();\n });\n });\n }\n\n function setSelectedActivity(activity, refresh) {\n $scope.selectedActivity = activity;\n $scope.$broadcast('activitySelectionChanged', $scope.selectedActivity);\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'activities',\n columns: [\n {\n dataField: 'name',\n caption: $translate.instant('TXT_LBL_NAME'),\n dataType: 'string',\n width: '170px',\n sortOrder: 'asc'\n },\n {dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string'},\n {\n dataField: 'classroomID',\n caption: $translate.instant('TXT_LBL_CLASSROOM'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('classroom')(rowData.classroomID);\n },\n width: '250px'\n },\n ]\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedActivity(data);\n }\n\n $scope.onRowAdd = function () {\n\n $scope.activityDetail = {\n semesterID: $scope.semesterID,\n isNew: true,\n accountingBookID: $scope.defaultAccountingBookID,\n };\n $scope.activityDetailOrig = angular.copy($scope.activityDetail);\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n\n var promises = [];\n var modelPromise = activitySvc.getByActivityID(data.activityID, true);\n promises.push(modelPromise.$promise);\n\n promises.push(detailDialogPromise.$promise);\n\n $q.all(promises).then(function () {\n $scope.activityDetail = modelPromise;\n $scope.activityDetailOrig = angular.copy($scope.activityDetail);\n\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n activitySvc.remove(data).$promise.then(function () {\n refreshData(false);\n });\n }\n\n $scope.onActivityDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n activitySvc.insert(data, success, error);\n } else {\n activitySvc.update(data, success, error);\n }\n\n function success() {\n detailDialogPromise.hide();\n $scope.isSaving = false;\n refreshData(true);\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.activityDetailOrig);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"activities/detail-tabs/home.html\",\n }\n ];\n\n $scope.tabs.activeTab = 0;\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"activities/activities-detail-main-tab.html\"\n }, {\n title: 'TXT_PRICE_TAB',\n template: \"activities/activities-detail-price-tab.html\"\n }, {\n title: 'TXT_LBL_COMPENSATIONS',\n template: \"activities/activities-detail-compensation-tab.html\"\n }, {\n title: \"TXT_LBL_DESCRIPTION\",\n template: \"activities/activities-detail-description-tab.html\"\n }, {\n title: 'TXT_LBL_PHOTO_ALBUM',\n template: \"activities/activities-detail-storage-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.$watch('detailTabs.activeTab', function (newValue, oldValue) {\n switch (newValue) {\n case 4:\n loadGalleryInfo();\n break;\n }\n });\n \n $scope.galleryInfoBusy = false;\n $scope.galleryInfoData = [];\n function loadGalleryInfo() {\n if (!$scope.activityDetail.picturesFolders || $scope.activityDetail.picturesFolders.length === 0) {\n return;\n }\n \n $scope.galleryInfoBusy = true;\n protectedStorageSvc.findGalleryInfoByPaths($scope.activityDetail.picturesFolders, false)\n .$promise.then(function(data) {\n $scope.galleryInfoBusy = false;\n \n $scope.galleryInfoData = _.keyBy(data, function(o) {\n return o.galleryDirectoryPath;\n });\n }, \n function (error) {\n $scope.galleryInfoBusy = false;\n }\n );\n \n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activities-detail.html',\n show: false,\n scope: $scope\n });\n\n var protectedStorageSelectDlgPromise = $modal({\n templateUrl: 'storage/protected-storage/protected-storage-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n var galleryInfoEditDlgPromise = $modal({\n templateUrl: 'activities/gallery-info-edit-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.showProtectedStorageSelect = function () {\n protectedStorageSelectDlgPromise.$promise.then(function () {\n\n protectedStorageSelectDlgPromise.$scope.selectFoldersOnly = true;\n\n protectedStorageSelectDlgPromise.$scope.onFilesSelected = function (files) {\n\n if (!$scope.activityDetail.picturesFolders) {\n $scope.activityDetail.picturesFolders = [];\n }\n\n angular.forEach(files, function (p) {\n if (!$scope.activityDetail.picturesFolders.find(e => e == p.objectUri)) {\n $scope.activityDetail.picturesFolders.push(p.objectUri);\n loadGalleryInfo();\n }\n });\n };\n protectedStorageSelectDlgPromise.show();\n });\n }\n\n $scope.removePicture = function (pictureUrl) {\n const index = $scope.activityDetail.picturesFolders.indexOf(pictureUrl);\n if (index > -1) {\n $scope.activityDetail.picturesFolders.splice(index, 1);\n }\n }\n \n $scope.startEditInfo = function(galleryDirectory) {\n let model = $scope.galleryInfoData[galleryDirectory];\n galleryInfoEditDlgPromise.$promise.then(function () {\n galleryInfoEditDlgPromise.$scope.model = angular.copy(model);\n galleryInfoEditDlgPromise.$scope.galleryDirectory = galleryDirectory;\n galleryInfoEditDlgPromise.$scope.onGalleryInfoSave = function (newModel) {\n $scope.galleryInfoData[galleryDirectory] = newModel;\n }\n galleryInfoEditDlgPromise.show();\n });\n }\n\n }]);","'use strict';\n\nwbApp.controller('ActivityInstructorDetailCtrl', ['$scope', 'activityInstructorSvc',\nfunction ($scope, activityInstructorSvc) {\n\n $scope.employeeDetailModel = { days: [], onDataSourceChange: function () { }, applyChanges: function () { }};\n $scope.instructorsOrig = [];\n\n\n function reloadData(instructors, schedules, employeeID, activityID) {\n // todo: Check changes\n\n var model = activityInstructorSvc.createEmployeeDetailModel(instructors, schedules, employeeID, activityID);\n $scope.instructorsOrig = angular.copy(instructors);\n $scope.employeeDetailModel = model;\n }\n\n $scope.onEmployeeChange = function (employeeID) {\n activityInstructorSvc.getAllByEmployeeAndActivity(\n employeeID, $scope.instructorDetailModel.activityID)\n .$promise\n .then(function (instructors) {\n reloadData(instructors, $scope.instructorDetailModel.selection, employeeID, $scope.instructorDetailModel.activityID);\n }); \n }\n\n $scope.onWeekSelectionChange = function (selection) {\n $scope.employeeDetailModel.applyChanges.call($scope.employeeDetailModel);\n $scope.employeeDetailModel.onDataSourceChange.call($scope.employeeDetailModel);\n }\n\n $scope.saveActivityInstructorDetailChanges = function () {\n $scope.employeeDetailModel.applyChanges.call($scope.employeeDetailModel);\n if (!angular.equals($scope.employeeDetailModel.instructors, $scope.instructorsOrig)) {\n activityInstructorSvc.saveAsync(\n $scope.employeeDetailModel.instructors,\n $scope.instructorDetailModel.employeeID,\n $scope.instructorDetailModel.activityID)\n .then(function (data) {\n $scope.onActivityInstructorSave(data);\n }, function (reason) {\n $scope.activityInstructorDetailError = reason;\n });\n\n }\n }\n\n if (!$scope.instructorDetailModel.isNew) {\n $scope.onEmployeeChange($scope.instructorDetailModel.employeeID);\n }\n\n}]);","'use strict';\n\nwbApp.controller('ActivityReconciliationAttendanceCtrl', ['$scope', '$modal', 'activityReconciliationSvc',\nfunction ($scope, $modal, activityReconciliationSvc) {\n\n $scope.attendance = [];\n\n $scope.semesterID = null;\n $scope.activityID = null;\n $scope.studentID = null;\n\n var isActive = false;\n var loaded = false;\n\n function reloadData() {\n if ($scope.activityID && $scope.studentID) {\n $scope.attendance = activityReconciliationSvc.getStudentsAttendanceByActivity(\n $scope.semesterID,\n $scope.activityID,\n $scope.studentID);\n loaded = true;\n } else {\n $scope.attendance = [];\n }\n }\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded) {\n reloadData();\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.$on('activityStudentSelectionChanged', function (e, data) {\n if (data.studentID != $scope.studentID ||\n data.activityID != $scope.activityID ||\n data.reasonCode == 'activityReconciliationChanged') {\n $scope.semesterID = data.semesterID;\n $scope.activityID = data.activityID;\n $scope.studentID = data.studentID;\n\n if (isActive) {\n reloadData();\n } else {\n loaded = false;\n }\n } else {\n $scope.attendance.length = 0;\n }\n });\n\n $scope.acivityReconciliationAttendanceFilterOptions = {\n filterText: \"\"\n };\n\n $scope.acivityReconciliationAttendanceGridOptions = {\n sortInfo: { fields: ['date'], directions: ['asc'] },\n columnDefs: [\n { field: 'date', cellFilter: \"date:'EEE d. M. yy'\", displayName: \"TXT_DAY\", width: '100px' },\n { field: 'firstPeriod', displayName: \"TXT_AM\", width: '100px' },\n { field: 'firstSnack', displayName: \"TXT_SNACK\", width: '70px' },\n { field: 'lunch', displayName: \"TXT_LUNCH\", width: '70px' },\n { field: 'firstPeriodAttendanceStatus', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_STATUS\", width: '120px' },\n { field: 'firstPeriodAttendanceType', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_TYPE\", width: '120px' },\n { field: 'secondPeriod', displayName: \"TXT_PM\", width: '100px' },\n { field: 'secondSnack', displayName: \"TXT_SNACK\", width: '70px' },\n { field: 'secondPeriodAttendanceStatus', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_STATUS\", width: '120px' },\n { field: 'secondPeriodAttendanceType', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_TYPE\", width: '120px' },\n { field: 'notes', displayName: \"TXT_LBL_NOTE\" }\n ],\n noCommandColumn: true,\n disabledField: 'reconciled'\n };\n\n\n}]);","'use strict';\n\nwbApp.controller('ActivityReconciliationCtrl', ['$scope', '$modal', '$translate', '$filter', 'messageBoxSvc', 'activitySvc', 'semesterSvc', 'activityReconciliationSvc',\nfunction ($scope, $modal, $translate, $filter, messageBoxSvc, activitySvc, semesterSvc, activityReconciliationSvc) {\n\n $scope.reconciliationDataRange = 1; // 1 - since last reconciliation, 2 - from last reconciliation\n $scope.fromDate = moment().subtract(1, 'M').startOf('day').toDate();\n $scope.toDate = moment().startOf('day').toDate();\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID && $scope.activityID) {\n loadData();\n }\n });\n\n $scope.onDataRangeChanged = function () {\n if ($scope.semesterID && $scope.activityID) {\n loadData();\n }\n }\n\n function loadData() {\n $scope.selectedStudent = {};\n\n if ($scope.activityID) {\n $scope.students = activityReconciliationSvc.getStudentsByActivity(\n $scope.semesterID,\n $scope.activityID,\n $scope.reconciliationDataRange,\n $scope.fromDate,\n $scope.toDate);\n } else {\n $scope.students.length = 0;\n }\n \n $scope.onStudentSelected(null);\n\n setUpRemainingExcuses($scope.activityID, null);\n }\n\n $scope.gridSettings = {\r\n name: 'students',\r\n columns: [\r\n { dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', sortOrder: 'asc', },\r\n\r\n { dataField: 'fullDayRegisteredAttendance', caption: $translate.instant('TXT_FULL_DAYS') + ' ' + $translate.instant('TXT_REGISTERED_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n { dataField: 'firstPeriodOnlyRegisteredAttendance', caption: $translate.instant('TXT_FIRST_PERIOD_ONLY') + ' ' + $translate.instant('TXT_REGISTERED_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n { dataField: 'secondPeriodOnlyRegisteredAttendance', caption: $translate.instant('TXT_SECOND_PERIOD_ONLY') + ' ' + $translate.instant('TXT_REGISTERED_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n\r\n { dataField: 'fullDayActualAttendanceNoOneOffs', caption: $translate.instant('TXT_FULL_DAYS') + ' ' + $translate.instant('TXT_REAL_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n { dataField: 'firstPeriodOnlyActualAttendanceNoOneOffs', caption: $translate.instant('TXT_FIRST_PERIOD_ONLY') + ' ' + $translate.instant('TXT_REAL_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n { dataField: 'secondPeriodOnlyActualAttendanceNoOneOffs', caption: $translate.instant('TXT_SECOND_PERIOD_ONLY') + ' ' + $translate.instant('TXT_REAL_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n\r\n { dataField: 'fullDayOneOffs', caption: $translate.instant('TXT_FULL_DAYS') + ' ' + $translate.instant('TXT_ONE_OFF_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n { dataField: 'firstPeriodOnlyOneOffs', caption: $translate.instant('TXT_FIRST_PERIOD_ONLY') + ' ' + $translate.instant('TXT_ONE_OFF_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n { dataField: 'secondPeriodOnlyOneOffs', caption: $translate.instant('TXT_SECOND_PERIOD_ONLY') + ' ' + $translate.instant('TXT_ONE_OFF_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n\r\n //{ dataField: 'firstPeriodExcuses', caption: $translate.instant('TXT_LBL_FIRST_PERIOD_EXCUSED_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'firstPeriodExcusesWithoutFood', caption: $translate.instant('TXT_LBL_FIRST_PERIOD_EXCUSED_WITHOUT_FOOD_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'firstPeriodExcusesWithoutComp', caption: $translate.instant('TXT_LBL_FIRST_PERIOD_EXCUSED_NO_COMP_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'firstPeriodNonExcuses', caption: $translate.instant('TXT_LBL_FIRST_PERIOD_NOT_EXCUSED_SHORT'), dataType: 'number', width: '70px' },\r\n\r\n //{ dataField: 'secondPeriodRegisteredPresent', caption: $translate.instant('TXT_LBL_SECOND_PERIOD_ATTENDANCE'), dataType: 'number', width: '70px' },\r\n //{ dataField: 'secondPeriodOneOffs', caption: $translate.instant('TXT_SECOND_PERIOD_ONLY_ONE_OFF_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'secondPeriodExcuses', caption: $translate.instant('TXT_LBL_SECOND_PERIOD_EXCUSED_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'secondPeriodExcusesWithoutFood', caption: $translate.instant('TXT_LBL_SECOND_PERIOD_EXCUSED_WITHOUT_FOOD_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'secondPeriodExcusesWithoutComp', caption: $translate.instant('TXT_LBL_SECOND_PERIOD_EXCUSED_NO_COMP_SHORT'), dataType: 'number', width: '70px' },\r\n // { dataField: 'secondPeriodNonExcuses', caption: $translate.instant('TXT_LBL_SECOND_PERIOD_NOT_EXCUSED_SHORT'), dataType: 'number', width: '70px' },\r\n\r\n { dataField: 'lunches', caption: $translate.instant('TXT_LBL_ACTIVITY_LUNCH'), dataType: 'number', width: '70px' },\r\n { dataField: 'firstSnacks', caption: $translate.instant('TXT_FIRST_SNACK'), dataType: 'number', width: '70px' },\r\n { dataField: 'secondSnacks', caption: $translate.instant('TXT_SECOND_SNACK'), dataType: 'number', width: '70px' },\r\n { dataField: 'lastReconciliationDate', caption: $translate.instant('TXT_LBL_RECONCILIATIONS'), dataType: 'date', width: '100px' }\r\n ],\r\n onRowPrepared: function (e) {\r\n if (e.rowType == \"data\") {\r\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (!data.hasAttendance) {\r\n e.rowElement.addClass('text-muted');\r\n }\r\n }\r\n }\r\n }\n\n //$scope.gridOptions = {\n // sortInfo: { fields: ['studentFullName'], directions: ['asc'] },\n // // > 992\n // columnDefs: [\n // { field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'humanName' },\n // { field: 'firstPeriodRegisteredPresent', displayName: \"TXT_LBL_FIRST_PERIOD_ATTENDANCE\", width: '70px', smHide: true },\n // { field: 'firstPeriodExcuses', displayName: \"TXT_LBL_FIRST_PERIOD_EXCUSED_SHORT\", width: '70px', smHide: true },\n // { field: 'firstPeriodExcusesWithoutFood', displayName: \"TXT_LBL_FIRST_PERIOD_EXCUSED_WITHOUT_FOOD_SHORT\", width: '70px', mdHide: true, smHide: true },\n // { field: 'firstPeriodExcusesWithoutComp', displayName: \"TXT_LBL_FIRST_PERIOD_EXCUSED_NO_COMP_SHORT\", width: '70px', mdHide: true, smHide: true },\n // { field: 'firstPeriodNonExcuses', displayName: \"TXT_LBL_FIRST_PERIOD_NOT_EXCUSED_SHORT\", width: '70px', mdHide: true, smHide: true },\n\n // { field: 'secondPeriodRegisteredPresent', displayName: \"TXT_LBL_SECOND_PERIOD_ATTENDANCE\", width: '70px', smHide: true },\n // { field: 'secondPeriodExcuses', displayName: \"TXT_LBL_SECOND_PERIOD_EXCUSED_SHORT\", width: '70px', smHide: true },\n // { field: 'secondPeriodExcusesWithoutFood', displayName: \"TXT_LBL_SECOND_PERIOD_EXCUSED_WITHOUT_FOOD_SHORT\", width: '70px', mdHide: true, smHide: true },\n // { field: 'secondPeriodExcusesWithoutComp', displayName: \"TXT_LBL_SECOND_PERIOD_EXCUSED_NO_COMP_SHORT\", width: '70px', mdHide: true, smHide: true },\n // { field: 'secondPeriodNonExcuses', displayName: \"TXT_LBL_SECOND_PERIOD_NOT_EXCUSED_SHORT\", width: '70px', mdHide: true, smHide: true },\n\n // { field: 'lunches', displayName: \"TXT_LBL_ACTIVITY_LUNCH\", width: '70px' },\n // { field: 'firstSnacks', displayName: \"TXT_FIRST_SNACK\", width: '70px', mdHide: true, smHide: true },\n // { field: 'secondSnacks', displayName: \"TXT_SECOND_SNACK\", width: '70px', mdHide: true, smHide: true },\n // { field: 'lastReconciliationDate', displayName: \"TXT_LBL_RECONCILIATIONS\", cellFilter: \"date:'shortDate'\", width: '100px' }\n // ],\n // disabledField: 'hasAttendance',\n // noCommandColumn: true\n //};\n\n $scope.sparklineOpts = {\n width: '100%',\n tooltipFormatter: function (sparkline, options, fields) {\n return $filter('date')(fields.x, 'EEE') + ' ' + $filter('date')(fields.x, 'shortDate') + ' - ' + fields.y;\n //return ' {{prefix}}{{x.1}}{{y}}{{suffix}}';\n }\n };\n $scope.remainingExcusesSparklineData = [];\n\n function setUpRemainingExcuses(activityID, studentID) {\n if (!activityID || !studentID) {\n $scope.remainingExcusesSparklineData = [];\n } else {\n var remaininigExcusesPromise = activityReconciliationSvc.getAvailableExuses($scope.activityID, $scope.selectedStudent.studentID);\n remaininigExcusesPromise.$promise.then(function (data) {\n $scope.remainingExcusesSparklineData = _.map(data.excusesByDate, function (item) {\n return [item.date, item.noOfExcuses];\n }\n );\n }, function (error) {\n $scope.remainingExcusesSparklineData = [];\n });\n }\n }\n\n\n $scope.semesterID;\n $scope.activityID;\n $scope.students = [];\n $scope.selectedStudent = {};\n\n $scope.$on('activityReconciliationChanged', function (e, data) {\n // Refresh data\n activityReconciliationSvc.refreshByStudentAndActivity(\n $scope.students,\n data.studentID,\n $scope.semesterID,\n $scope.activityID,\n $scope.reconciliationDataRange,\n $scope.fromDate,\n $scope.toDate);\n\n broadcastStudentSelectionChanged('activityReconciliationChanged');\n });\n\n semesterSvc.getDefaultAsync().then(function (activeSemester) {\n if (activeSemester) {\n $scope.semesterID = activeSemester.id;\n $scope.onSemesterChange($scope.semesterID);\n } else {\n $scope.semesterID = null;\n }\n });\n\n $scope.onSemesterChange = function (semesterId) {\n activitySvc.getAllBySemesterIDAsync(semesterId);\n }\n\n $scope.onActivityChange = function (activityID) {\n loadData();\n }\n\n function broadcastStudentSelectionChanged(reasonCode) {\n $scope.$broadcast('activityStudentSelectionChanged', {\n semesterID: $scope.semesterID,\n activityID: $scope.activityID,\n studentID: !!$scope.selectedStudent ? $scope.selectedStudent.studentID : null, \n studentFullName: !!$scope.selectedStudent ? $scope.selectedStudent.studentFullName : null,\n reasonCode: reasonCode\n });\n }\n\n $scope.onStudentSelected = function (student) {\n $scope.selectedStudent = student;\n setUpRemainingExcuses($scope.activityID, !!student ? student.studentID : null)\n broadcastStudentSelectionChanged('studentSelectionChanged');\n }\n \n $scope.onRowEdit = function (student) {\n\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"activities/activity-reconciliation-tabs/detail.html\"\n },\n {\n title: 'TXT_SEC_ATTENDANCE',\n template: \"activities/activity-reconciliation-tabs/attendance.html\"\n },\n {\n title: 'TXT_LBL_RECONCILIATIONS',\n template: \"activities/activity-reconciliation-tabs/reconciliations.html\"\n },\n {\n title: 'TXT_LBL_RECURRING_INVOICES',\n template: \"activities/activity-reconciliation-tabs/recurring-invoices.html\"\n },\n {\n title: 'TXT_LBL_ISSUED_INVOICES',\n template: \"activities/activity-reconciliation-tabs/issued-invoices.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue });\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('ActivityReconciliationDetailCtrl', ['$scope', '$filter', 'messageBoxSvc', 'activityReconciliationSvc',\nfunction ($scope, $filter, messageBoxSvc, activityReconciliationSvc) {\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"activities/activity-reconciliation-detail-main-tab.html\"\n },\n {\n title: 'TXT_LBL_EXCUSES',\n template: \"activities/activity-reconciliation-detail-excuse-tab.html\"\n },\n {\n title: 'TXT_LBL_ATTENDANCE',\n template: \"activities/activity-reconciliation-detail-attendance-tab.html\"\n },\n {\n title: 'TXT_LBL_NOTE',\n template: \"activities/activity-reconciliation-detail-notes-tab.html\"\n },\n {\n title: 'TXT_PRICE_TAB',\n template: \"activities/activity-reconciliation-detail-invoice-tab.html\"\n }\n ];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.gridOptions = {\n sortInfo: { fields: ['date'], directions: ['asc'] },\n columnDefs: [\n { field: 'date', cellFilter: \"date:'EEE d. M. '\", displayName: \"Den\" },\n { field: 'firstPeriod', displayName: \"Dopoledne\", width: '95px' },\n { field: 'lunch', displayName: \"Oběd\", width: '55px' },\n { field: 'firstPeriodAttendanceStatus', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_STATUS\", width: '80px' },\n { field: 'firstPeriodAttendanceType', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_TYPE\", width: '90px' },\n { field: 'secondPeriod', displayName: \"Odpoledne\", width: '95px' },\n { field: 'secondPeriodAttendanceStatus', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_STATUS\", width: '80px' },\n { field: 'secondPeriodAttendanceType', cellFilter: 'translate', displayName: \"TXT_COL_ATTENDANCE_TYPE\", width: '90px' }\n ],\n noCommandColumn: true,\n hideFooter: false,\n multiSelect: true,\n disabledField: 'reconciled'\n };\n\n $scope.reconcileMinDate = new Date();\n $scope.reconcileMaxDate = new Date();\n $scope.reconcileFrom = $scope.reconcileMinDate;\n $scope.reconcileTo = $scope.reconcileMaxDate;\n $scope.reconciliation = activityReconciliationSvc.getReconciliationDetail($scope.activityID, $scope.studentID, $scope.activityReconciliationID);\n $scope.reconciliationNameChanged = false;\n $scope.tariffFullName = '';\n\n $scope.reconciliation.$promise.then(function () {\n $scope.reconcileMinDate = activityReconciliationSvc.getMinDateRange($scope.reconciliation.attendance);\n $scope.reconcileMaxDate = activityReconciliationSvc.getMaxDateRange($scope.reconciliation.attendance);\n $scope.tariffFullName = $scope.reconciliation.activityStudentSetting\n ? $scope.reconciliation.activityStudentSetting.tariffName + ' (' + $filter('wbCurrencyFlt')($scope.reconciliation.activityStudentSetting.tariffPrice) + ')'\n : '';\n if (!$scope.reconciliation.activityReconciliationID) {\n // New reconciliation\n $scope.reconciliationOrig = angular.copy($scope.reconciliation);\n\n $scope.reconcileFrom = moment($scope.reconcileMinDate).add(1, \"days\").startOf('day').toDate();\n $scope.reconcileTo = activityReconciliationSvc.getToDateRange(\n $scope.reconciliation.attendance, $scope.reconcileFrom, $scope.reconcileMaxDate);\n\n activityReconciliationSvc.selectDateRange($scope.reconciliation.attendance, $scope.reconcileFrom, $scope.reconcileTo);\n $scope.reconciliation.name = activityReconciliationSvc.getReconciliationName($scope.reconcileFrom, $scope.reconcileTo);\n } else {\n $scope.reconcileFrom = null;\n for (var i = 0; i < $scope.reconciliation.attendance.length; i++) {\n var attendance = $scope.reconciliation.attendance[i];\n if (attendance.isSelected) {\n $scope.reconcileTo = moment(attendance.date).startOf('day').toDate();\n\n if (!$scope.reconcileFrom) {\n $scope.reconcileFrom = moment(attendance.date).startOf('day').toDate();\n }\n }\n }\n $scope.reconciliationOrig = angular.copy($scope.reconciliation);\n }\n });\n\n $scope.rangeChanged = function (from, to) {\n activityReconciliationSvc.selectDateRange($scope.reconciliation.attendance, from, to);\n $scope.reconciliation.resetFields.call($scope.reconciliation);\n\n if (!$scope.reconciliationNameChanged) {\n $scope.reconciliation.name = activityReconciliationSvc.getReconciliationName(from, to);\n }\n }\n\n $scope.onReconciliationNameChange = function(newName) {\n $scope.reconciliationNameChanged = true;\n }\n\n $scope.onSelectionChanged = function (data) {\n $scope.reconciliation.resetFields.call($scope.reconciliation);\n }\n\n $scope.isSaveDisabled = function () {\n return $scope.reconciliation.isInvoiceEmpty ||\n angular.equals($scope.reconciliation, $scope.reconciliationOrig);\n }\n\n $scope.saveChanges = function () {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_CLIENT_NOTIFICATION',\n message: 'TXT_TEXT_CONFIRM_CLIENT_NOTIFICATION',\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: onNoClicked \n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked \n }]\n });\n\n function onYesClicked() {\n if ($scope.reconciliation.activityReconciliationID) {\n activityReconciliationSvc.updateReconciliationDetail(\n $scope.reconciliation,\n true,\n success,\n error);\n } else {\n activityReconciliationSvc.insertReconciliationDetail(\n $scope.reconciliation,\n true,\n success,\n error);\n }\n }\n\n function onNoClicked() {\n if ($scope.reconciliation.activityReconciliationID) {\n activityReconciliationSvc.updateReconciliationDetail(\n $scope.reconciliation,\n false,\n success,\n error);\n } else {\n activityReconciliationSvc.insertReconciliationDetail(\n $scope.reconciliation,\n false,\n success,\n error);\n }\n }\n\n function success() {\n $scope.$emit('activityReconciliationDetailSaved', {});\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n}]);","wbApp.controller('ActivityReconciliationIssuedInvoicesCtrl', ['$scope', '$modal', '$window', 'invoiceSvc',\nfunction ($scope, $modal, $window, invoiceSvc) {\n\n $scope.semesterID = null;\n $scope.activityID = null;\n $scope.studentID = null; \n\n var isActive = false;\n var loaded = false;\n\n $scope.relatedInvoices = null;\n\n function loadData(semesterID, activityID, studentID) {\n if (!!activityID && !!studentID) {\n $scope.relatedInvoices = invoiceSvc.getInvoiceEvidenceByActivityAndStudent(activityID, studentID);\n } else {\n $scope.relatedInvoices = null;\n }\n }\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 4) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.activityID && $scope.studentID) {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.$on('activityStudentSelectionChanged', function (e, data) {\n if (data.studentID != $scope.studentID ||\n data.activityID != $scope.activityID ||\n data.reasonCode == 'activityReconciliationChanged') {\n $scope.semesterID = data.semesterID;\n $scope.activityID = data.activityID;\n $scope.studentID = data.studentID;\n\n if (isActive) {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n loaded = true;\n } else {\n loaded = false;\n }\n }\n });\n\n\n $scope.relatedGridFilterOptions = {\n filterText: \"\"\n };\n\n $scope.relatedGridOptions = {\n sortInfo: { fields: ['recordNumber'], directions: ['dsc'] },\n columnDefs: [\n { field: 'isRecurring', displayName: \"TXT_LBL_RECURRING\", width: '90px', cellFilter: 'checkmark', smHide: true, mdHide: true },\n { field: 'recordNumber', displayName: \"TXT_LBL_INVOICE_NO\", width: '100px', smHide: true, mdHide: true },\n { field: 'typeID', displayName: \"TXT_LBL_TYPE\", cellFilter: 'invoiceForType', width: '55px', smHide: true, mdHide: true },\n { field: 'subject', displayName: \"TXT_LBL_SUBJECT\", sort: 'locale' },\n { field: 'invoiceDate', displayName: \"TXT_LBL_INVOICE_DATE\", cellFilter: \"date:'shortDate'\", width: '80px', smHide: true, mdHide: true },\n { field: 'dueDate', displayName: \"TXT_LBL_DUE_DATE\", cellFilter: \"date:'shortDate'\", width: '70px' },\n { field: 'total', displayName: \"TXT_LBL_AMOUNT\", cellFilter: 'wbCurrencyFlt', width: '130px', align: 'right' },\n { field: 'paymentSum', displayName: \"TXT_LBL_PAYMENTS_SUM\", cellFilter: 'wbCurrencyFlt', width: '130px', align: 'right', smHide: true },\n { field: 'latest', displayName: \"TXT_LBL_VALID\", cellFilter: 'invoiceValid', width: '90px' }\n ],\n customCmds: [\n {\n text: 'TXT_MENU_PRINT_INVOICE',\n // hide: function () { return true; },\n command: function (row) { onPrintInvoice(row.invoiceID); }\n }],\n disabledField: 'notLatest',\n disabledAreSelectable: true,\n hideDelete: function (row) { return !row.isRecurring; }\n };\n\n function onPrintInvoice(invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n\n $scope.onRowDelete = function (row) {\n if (row.isRecurring) {\n invoiceSvc.remove(row, function () {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n });\n }\n }\n\n}]);","'use strict';\n\nwbApp.controller('ActivityReconciliationReconciliationCtrl', ['$scope', '$modal', '$q', '$window', 'activityReconciliationSvc',\nfunction ($scope, $modal, $q, $window, activityReconciliationSvc) {\n\n $scope.reconciliation = [];\n\n $scope.semesterID = null;\n $scope.activityID = null;\n $scope.studentID = null;\n $scope.studentFullName = null;\n\n var isActivite = false;\n var loaded = false;\n\n function reloadData() {\n if (isActivite) {\n if ($scope.activityID && $scope.studentID) {\n $scope.reconciliation = activityReconciliationSvc.getByStudentAndActivity(\n $scope.semesterID,\n $scope.activityID,\n $scope.studentID);\n loaded = true;\n } else {\n loaded = false;\n $scope.reconciliation = [];\n }\n }\n }\n\n $scope.$on('activityReconciliationDetailSaved', function (e, data) {\n reloadData();\n $scope.$emit('activityReconciliationChanged', { studentID: $scope.studentID });\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActivite) {\n isActivite = true;\n if (!loaded) {\n reloadData();\n }\n }\n } else {\n isActivite = false;\n }\n });\n\n $scope.$on('activityStudentSelectionChanged', function (e, data) {\n if (data.studentID != $scope.studentID ||\n data.activityID != $scope.activityID) {\n $scope.semesterID = data.semesterID;\n $scope.activityID = data.activityID;\n $scope.studentID = data.studentID;\n $scope.studentFullName = data.studentFullName;\n\n if (isActivite) {\n reloadData();\n } else {\n loaded = false;\n }\n } else {\n $scope.reconciliation.length = 0;\n }\n });\n\n $scope.acivityReconciliationReconciliationFilterOptions = {\n filterText: \"\"\n };\n\n $scope.acivityReconciliationReconciliationGridOptions = {\n sortInfo: { fields: ['reconciledAt'], directions: ['asc'] },\n columnDefs: [\n { field: 'reconciledAt', cellFilter: \"date:'shortDate'\", displayName: \"TXT_LBL_DATE\", width: '90px' },\n { field: 'name', width: '250px', displayName: \"TXT_LBL_NAME\" },\n { field: 'notes', displayName: \"TXT_LBL_NOTE\" },\n { field: 'debit', displayName: \"TXT_LBL_PRICE\", width: '90px', cellFilter: 'wbCurrencyFlt', align: 'right' },\n { field: 'credit', displayName: \"TXT_LBL_PAYMENTS\", width: '90px', cellFilter: 'wbCurrencyFlt', align: 'right' },\n { field: 'notificationSentAt', displayName: \"Oznámení\", width: '110px', cellFilter: \"date:'short'\" },\n ],\n customCmds: [\n {\n text: 'TXT_MENU_PRINT_INVOICE',\n hide: function (selected) { return !selected || !selected.invoiceID; },\n command: function (row) { $scope.onPrintInvoice(row); }\n }, {\n text: 'TXT_MENU_SEND_RECONCILIATION_INFO',\n hide: function (selected) { return !selected || !selected.invoiceID; },\n command: function (row) { $scope.onSendReconciliationInfo(row); }\n }]\n };\n\n $scope.onRowDelete = function (row) {\n activityReconciliationSvc.deleteReconciliationDetail(\n $scope.activityID,\n $scope.studentID,\n row.activityReconciliationID,\n success);\n\n function success() {\n reloadData();\n }\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.activityReconciliationID = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (row) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.activityReconciliationID = row.activityReconciliationID;\n detailDialogPromise.show();\n });\n }\n\n $scope.onPrintInvoice = function (row) {\n $window.open('/Admin/Report/Invoice?ReportID=' + row.invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n\n }\n\n $scope.onSendReconciliationInfo = function (row) {\n activityReconciliationSvc.sendReconciliationNotification(\n $scope.activityID,\n $scope.studentID,\n row.activityReconciliationID,\n row.invoiceID,\n success);\n\n function success() {\n reloadData();\n }\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activity-reconciliation-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);","wbApp.controller('ActivityReconciliationRecurringInvoicesCtrl', ['$q', '$scope', '$modal', 'invoiceRecurrenceScheduleSvc',\nfunction ($q, $scope, $modal, invoiceRecurrenceScheduleSvc) {\n\n $scope.semesterID = null;\n $scope.activityID = null;\n $scope.studentID = null;\n\n var isActive = false;\n var loaded = false;\n\n function loadData(semesterID, activityID, studentID) {\n if ($scope.activityID && $scope.studentID) {\n $scope.recurringInvoices = invoiceRecurrenceScheduleSvc.getAllForStudentAndActivity(semesterID, studentID, activityID);\n loaded = true;\n } else {\n loaded = false;\n $scope.recurringInvoices = null;\n }\n }\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 3) {\n if (!isActive) {\n isActive = true;\n if (!loaded) {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.$on('activityStudentSelectionChanged', function (e, data) {\n if (data.studentID != $scope.studentID ||\n data.activityID != $scope.activityID ||\n data.reasonCode == 'activityReconciliationChanged') {\n $scope.semesterID = data.semesterID;\n $scope.activityID = data.activityID;\n $scope.studentID = data.studentID;\n $scope.studentFullName = data.studentFullName;\n\n if (isActive) {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n } else {\n loaded = false;\n }\n }\n });\n\n\n $scope.acivityReconciliationRecurringInvoiceFilterOptions = {\n filterText: \"\"\n };\n\n $scope.acivityReconciliationRecurringInvoicesGridOptions = {\n sortInfo: { fields: ['reconciledAt'], directions: ['asc'] },\n columnDefs: [\n { field: 'active', displayName: \"TXT_LBL_ACTIVE\", cellFilter: 'checkmark', width: '70px' },\n { field: 'name', displayName: \"TXT_LBL_NAME\" },\n { field: 'repeatEveryNoOfUnits', displayName: \"TXT_LBL_REPEAT_EVERY\", width: '110px' },\n { field: 'reccurenceUnitTypeID', displayName: \"\", cellFilter: 'wbRecurrenceUnitTypeFlt', width: '130px' },\n { field: 'startDate', cellFilter: \"date:'shortDate'\", displayName: \"TXT_LBL_START_DATE\", width: '90px' },\n { field: 'endDate', cellFilter: \"date:'shortDate'\", displayName: \"TXT_LBL_END_DATE\", width: '90px' },\n { field: 'nextInvoice', cellFilter: \"date:'shortDate'\", displayName: \"TXT_LBL_NEXT_ISSUE\", width: '110px' },\n { field: 'invoiceTotal', cellFilter: \"wbCurrencyFlt\", displayName: \"TXT_LBL_SUMMARY\", align: 'right', width: '110px' }\n ],\n disabledField: 'notActive',\n disabledAreSelectable: true,\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onScheduleSave = function () {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n\n var model = invoiceRecurrenceScheduleSvc.createNew(\n $scope.semesterID, $scope.studentID, $scope.activityID);\n\n $q.all([detailDialogPromise.$promise, model.$promise]).then(function () {\n detailDialogPromise.$scope.model = model;\n detailDialogPromise.$scope.onScheduleSave = function () {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n invoiceRecurrenceScheduleSvc.remove(data, function () {\n loadData($scope.semesterID, $scope.activityID, $scope.studentID);\n });\n }\n\n $scope.recurringInvoices = [];\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activity-reconciliation/recurring-invoice-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);","'use strict';\n\nwbApp.controller('ActivityReservationDetailCtrl', ['$scope', '$q', 'activityReservationSvc', 'activityStudentSettingSvc',\nfunction ($scope, $q, activityReservationSvc, activityStudentSettingSvc) {\n\n $scope.studentDetailModel = { days: [], onDataSourceChange: function () { }, applyChanges: function () { }};\n $scope.reservationsOrig = [];\n\n\n function reloadData(reservations, schedules, studentID, activityID, setting) {\n // todo: Check changes\n\n var model = activityReservationSvc.createStudentDetailModel(reservations, schedules, studentID, activityID, setting);\n $scope.reservationsOrig = angular.copy(reservations);\n $scope.activityTarifOrig = angular.copy(setting);\n $scope.studentDetailModel = model;\n }\n\n $scope.onStudentChange = function (studentID) {\n var res = activityReservationSvc.getAllByStudentAndActivity(\n studentID, $scope.reservationDetailModel.activityID);\n var set = activityStudentSettingSvc.getByStudentAndActivity(studentID, $scope.reservationDetailModel.activityID);\n\n $q.all([res.$promise, set])\n .then(function (data) {\n\n var reservations = data[0];\n var setting = data[1];\n\n setting.activityID = $scope.reservationDetailModel.activityID;\n setting.studentID = studentID;\n\n reloadData(reservations, $scope.reservationDetailModel.selection, studentID, $scope.reservationDetailModel.activityID, setting);\n }); \n }\n\n $scope.onWeekSelectionChange = function (selection) {\n $scope.studentDetailModel.applyChanges.call($scope.studentDetailModel);\n $scope.studentDetailModel.onDataSourceChange.call($scope.studentDetailModel);\n }\n\n $scope.saveActivityReservationDetailChanges = function () {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.studentDetailModel.applyChanges.call($scope.studentDetailModel);\n\n $scope.isSaving = true;\n\n var res = activityReservationSvc.saveAsync(\n $scope.studentDetailModel.reservations,\n $scope.reservationDetailModel.studentID,\n $scope.reservationDetailModel.activityID,\n $scope.reservationsOrig);\n\n var tar = activityStudentSettingSvc.saveAsync(\n $scope.studentDetailModel.activitySetting,\n $scope.activityTarifOrig);\n\n $q.all([res, tar])\n .then(function (data) {\n var resources = data[0];\n $scope.onActivityReservationSave(resources);\n }, function (reason) {\n $scope.activityReservationDetailError = reason;\n $scope.isSaving = false; \n });\n }\n\n if (!$scope.reservationDetailModel.isNew) {\n $scope.onStudentChange($scope.reservationDetailModel.studentID);\n }\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"activities/activity-reservation/detail-main-tab.html\"\n },\n {\n title: 'TXT_MENU_SETTING',\n template: \"activities/activity-reservation/detail-settings-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n}]);","'use strict';\n\nwbApp.controller('ActivityScheduleDetailCtrl', ['$scope', 'activityScheduleSvc', \nfunction ($scope, activityScheduleSvc) {\n\n // $scope.singlePeriodProgramOnly from caller\n\n function reloadData() {\n $scope.weeks = angular.copy($scope.activityWeeks);\n $scope.selection = [];\n for (var sw = 0; sw < $scope.selectedWeeks.length; sw++) {\n var sweek = $scope.selectedWeeks[sw];\n\n for (var w = 0; w < $scope.weeks.length; w++) {\n var week = $scope.weeks[w];\n if (week.weekNo === sweek.weekNo) {\n if (moment(week.startDay).isSame(moment(sweek.startDay))) {\n $scope.selection.push(week);\n }\n }\n }\n }\n\n $scope.scheduleDetailModel = new webooker_acivity_models.ScheduleDetail($scope.selection.slice(0));\n }\n\n $scope.onWeekSelectionChange = function (selection) {\n $scope.scheduleDetailModel.applyChanges.call($scope.scheduleDetailModel);\n $scope.scheduleDetailModel.scheduleWeeks.length = 0;\n $scope.scheduleDetailModel.scheduleWeeks.push.apply(\n $scope.scheduleDetailModel.scheduleWeeks,\n selection);\n $scope.scheduleDetailModel.onDataSourceChange.call($scope.scheduleDetailModel);\n }\n\n $scope.saveActivityDetailChanges = function (scheduleDetailModel) {\n $scope.activityScheduleDetailError = null;\n $scope.scheduleDetailModel.applyChanges.call($scope.scheduleDetailModel);\n\n activityScheduleSvc.saveAsync(\n $scope.weeks,\n $scope.semesterID,\n $scope.activityID)\n .then(function(data) {\n $scope.onScheduleDetailSave(data);\n }, function (reason) {\n $scope.activityScheduleDetailError = reason.data;\n });\n }\n\n reloadData();\n\n}]);","'use strict';\n\nwbApp.controller('ActivityScheduleInstructorsCtrl', ['$scope', '$modal', '$translate', '$filter', 'gridSortSvc','activityInstructorSvc',\nfunction ($scope, $modal, $translate, $filter, gridSortSvc, activityInstructorSvc) {\n\n $scope.activityWeeks = null;\n $scope.selection = null;\n $scope.activityID = null;\n $scope.semesterID = null;\n\n var selectedActivity = null;\n\n $scope.$on('activityScheduleSelectionChanged', function (e, data) {\n if (data.selection && data.selection.length > 0) {\n if (!angular.equals(data.selection, $scope.selection)) {\n $scope.semesterID = data.semesterID;\n $scope.instructors = activityInstructorSvc.getWeekModelByIntervals(data.semesterID, data.activityID, data.selection);\n\n $scope.instructors.$promise.then(function () {\n _.forEach($scope.instructors, function (w) {\n w.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n });\n });\n\n $scope.activityWeeks = data.activityWeeks;\n $scope.selection = data.selection;\n $scope.activityID = data.activityID;\n }\n } else {\n if (!!$scope.instructors) {\n $scope.instructors.length = 0;\n }\n\n $scope.semesterID = null;\n $scope.activityWeeks = data.activityWeeks;\n $scope.selection = null;\n $scope.activityID = null;\n }\n });\n\n\n $scope.$on('activitySelectionChanged', function (e, data) {\n if (data.activityID) {\n $scope.activityID = data.activityID;\n }\n\n selectedActivity = data.activity;\n });\n\n $scope.acivityScheduleInstructorsGridOptions = {\n name: 'selectedActivityScheduleInstructors',\n columns: [\n {\n dataField: 'fullName',\n dataType: 'string',\n caption: $translate.instant(\"TXT_HUMAN_NAME\"),\n width: '180px',\n sortOrder: 'asc',\n calculateSortValue: function (data) {\n return gridSortSvc.sortHumanFullName2(data, 'fullName')\n }\n },\n {\n dataField: 'monday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_MONDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.monday);\n },\n width: '70px',\n },\n {\n dataField: 'tuesday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_TUESDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.tuesday);\n },\n width: '70px'\n },\n {\n dataField: 'wednesday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_WEDNESDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.wednesday);\n },\n width: '70px'\n },\n {\n dataField: 'thursday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_THURSDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.thursday);\n },\n width: '70px'\n },\n {\n dataField: 'friday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_FRIDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.friday);\n },\n width: '70px'\n },\n {\n dataField: 'saturday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_SATURDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.saturday);\n },\n width: '70px'\n },\n {\n dataField: 'sunday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_SUNDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.saturday);\n },\n width: '70px'\n },\n {\n dataField: 'notes',\n dataType: 'string',\n caption: $translate.instant(\"TXT_LBL_NOTE\"),\n calculateCellValue: function (rowData) {\n return $filter('aggregateNotes')(rowData.notes);\n }\n }\n ],\n shouldDisableAdd: function () { return !$scope.selection; },\n }\n\n $scope.instructorDetailModel = null;\n\n $scope.onRowAdd = function () {\n $scope.instructorDetailModel = {\n isNew: true,\n employeeID: null,\n activityID: $scope.activityID,\n selection: $scope.selection.slice(0),\n activityWeeks: $scope.activityWeeks\n };\n\n detailDialogPromise.$promise.then(function () {\n $scope.activityInstructorsDetailError = null;\n detailDialogPromise.$scope.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (instructor) {\n\n $scope.instructorDetailModel = {\n isNew: false,\n employeeID: instructor.employeeID,\n activityID: $scope.activityID,\n selection: $scope.selection.slice(0),\n activityWeeks: $scope.activityWeeks\n };\n\n detailDialogPromise.$promise.then(function () {\n $scope.activityInstructorsnDetailError = null;\n detailDialogPromise.$scope.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n detailDialogPromise.show();\n });\n }\n\n $scope.onActivityInstructorSave = function () {\n detailDialogPromise.hide();\n // Reload data \n $scope.instructors = activityInstructorSvc.getWeekModelByIntervals(\n $scope.semesterID,\n $scope.activityID,\n $scope.selection);\n\n $scope.instructors.$promise.then(function () {\n _.forEach($scope.instructors, function (w) {\n w.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n });\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activity-instructor/detail.html',\n show: false,\n scope: $scope\n });\n\n\n}]);","'use strict';\n\nwbApp.controller('ActivityScheduleStudentsCtrl', ['$scope', '$modal', '$translate', '$filter', 'gridSortSvc', 'activityReservationSvc',\nfunction ($scope, $modal, $translate, $filter, gridSortSvc, activityReservationSvc) {\n\n $scope.activityWeeks = null;\n $scope.selection = null;\n $scope.activityID = null;\n $scope.semesterID = null;\n\n var selectedActivity = null;\n\n $scope.$on('activityScheduleSelectionChanged', function (e, data) {\n if (data.selection && data.selection.length > 0) {\n if (!angular.equals(data.selection, $scope.selection)) {\n $scope.semesterID = data.semesterID;\n $scope.students = activityReservationSvc.getWeekModelByIntervals(data.semesterID, data.activityID, data.selection);\n\n $scope.students.$promise.then(function () {\n _.forEach($scope.students, function (w) {\n w.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n });\n });\n\n $scope.activityWeeks = data.activityWeeks;\n $scope.selection = data.selection.slice(0);\n $scope.activityID = data.activityID;\n }\n } else {\n if (!!$scope.students) {\n $scope.students.length = 0;\n }\n\n $scope.semesterID = null;\n $scope.activityWeeks = data.activityWeeks;\n $scope.selection = null;\n $scope.activityID = null;\n }\n });\n\n $scope.$on('activitySelectionChanged', function (e, data) {\n if (data.activityID) {\n $scope.activityID = data.activityID;\n }\n\n selectedActivity = data.activity;\n });\n\n $scope.acivityScheduleStudentsGridOptions = {\n name: 'selectedActivityScheduleStudents',\n columns: [\n { \n dataField: 'fullName',\n dataType: 'string',\n caption: $translate.instant(\"TXT_HUMAN_NAME\"), \n width: '180px',\n sortOrder: 'asc',\n calculateSortValue: function (data) { \n return gridSortSvc.sortHumanFullName2(data, 'fullName') \n }\n },\n { \n dataField: 'monday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_MONDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.monday);\n },\n width: '70px', \n },\n { \n dataField: 'tuesday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_TUESDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.tuesday);\n },\n width: '70px'\n },\n { \n dataField: 'wednesday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_WEDNESDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.wednesday);\n },\n width: '70px'\n },\n { \n dataField: 'thursday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_THURSDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.thursday);\n },\n width: '70px' \n },\n { \n dataField: 'friday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_FRIDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.friday);\n },\n width: '70px'\n },\n { \n dataField: 'saturday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_SATURDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.saturday);\n },\n width: '70px'\n },\n { \n dataField: 'sunday',\n dataType: 'string',\n caption: $translate.instant(\"TXT_SUNDAY\"),\n calculateCellValue: function (rowData) {\n return $filter('datePartOccupied')(rowData.saturday);\n },\n width: '70px'\n },\n { \n dataField: 'notes',\n dataType: 'string',\n caption: $translate.instant(\"TXT_LBL_NOTE\"),\n calculateCellValue: function (rowData) {\n return $filter('aggregateNotes')(rowData.notes);\n }\n }\n ],\n shouldDisableAdd: function () { return !$scope.selection; },\n }\n\n $scope.reservationDetailModel = null;\n\n $scope.onRowAdd = function () {\n $scope.reservationDetailModel = {\n isNew: true,\n studentID: null,\n activityID: $scope.activityID,\n selection: $scope.selection.slice(0),\n activityWeeks: $scope.activityWeeks\n };\n\n detailDialogPromise.$promise.then(function () {\n $scope.activityReservationDetailError = null;\n detailDialogPromise.$scope.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (student) {\n\n $scope.reservationDetailModel = {\n isNew: false,\n studentID: student.studentID,\n activityID: $scope.activityID,\n selection: $scope.selection.slice(0),\n activityWeeks: $scope.activityWeeks\n };\n\n detailDialogPromise.$promise.then(function () {\n $scope.activityReservationDetailError = null;\n detailDialogPromise.$scope.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n detailDialogPromise.show();\n });\n }\n\n $scope.onActivityReservationSave = function () {\n detailDialogPromise.hide();\n // Reload data \n $scope.students = activityReservationSvc.getWeekModelByIntervals(\n $scope.semesterID,\n $scope.activityID,\n $scope.selection);\n\n $scope.students.$promise.then(function () {\n _.forEach($scope.students, function (w) {\n w.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n });\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activity-reservation/detail.html',\n show: false,\n scope: $scope\n });\n\n\n}]);","'use strict';\n\nwbApp.controller('ActivitySchedulesCtrl', ['$scope', '$modal', '$timeout', 'messageBoxSvc', 'activitySvc', \n 'semesterSvc', 'activityScheduleSvc', 'securitySvc',\nfunction ($scope, $modal, $timeout, messageBoxSvc, activitySvc, semesterSvc, activityScheduleSvc, securitySvc) {\n\n $scope.gridOptions = {\n sortInfo: { fields: ['startDate'], directions: ['asc'] },\n // > 992\n columnDefs: [{ field: 'weekNo', displayName: \"TXT_LBL_WEEK_NO\", width: '70px', sortable: false },\n { field: 'startDate', displayName: \"TXT_LBL_FROM\", cellFilter: \"date:'shortDate'\", width: '80px', sortable: false },\n { field: 'endDate', displayName: \"TXT_LBL_TO\", cellFilter: \"date:'shortDate'\", width: '80px', sortable: false },\n { field: 'monday', displayName: \"TXT_MONDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'tuesday', displayName: \"TXT_TUESDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'wednesday', displayName: \"TXT_WEDNESDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'thursday', displayName: \"TXT_THURSDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'friday', displayName: \"TXT_FRIDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'saturday', displayName: \"TXT_SATURDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'sunday', displayName: \"TXT_SUNDAY\", cellFilter: \"datePartOccupied\", width: '70px', sortable: false },\n { field: 'notes', displayName: \"TXT_LBL_NOTE\", cellFilter: \"aggregateNotes\", sortable: false }\n ],\n noCommandColumn: false\n };\n\n var activitiesForSemester = [];\n var selectedActivity;\n\n $scope.semesterID;\n $scope.activityID;\n $scope.activityWeeks = [];\n var first = true;\n\n function selectFirst() {\n $scope.activityWeeks.$promise.then(function () { \n $timeout(function () {\n if ($scope.activityWeeks.length > 0) {\n var week = $scope.activityWeeks[0];\n week.isSelected = true;\n\n $scope.onWeekSelected(week);\n }\n })\n });\n }\n\n function changeActivity(activityId, realod) {\n\n selectedActivity = _.find(activitiesForSemester, { 'activityID': activityId });\n\n if (activityId) {\n $scope.activityWeeks = activityScheduleSvc.getWeeksAsync(\n $scope.semesterID, activityId, realod);\n\n $scope.activityWeeks.$promise.then(function () {\n _.forEach($scope.activityWeeks, function (w) {\n w.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n });\n });\n\n if (first) {\n first = false;\n selectFirst();\n }\n } else {\n $scope.activityWeeks.length = 0;\n }\n $scope.$broadcast('activityScheduleSelectionChanged', { selection: null });\n }\n\n $scope.onSemesterChange = function (semesterId) {\n activitySvc.getAllBySemesterIDAsync(semesterId).$promise.then(function (activities) {\n\n activitiesForSemester = activities;\n\n changeActivity(activities.length > 0 ? activities[0].activityID : null, true);\n\n $scope.$broadcast('activityScheduleSelectionChanged', { selection: null });\n });\n }\n\n $scope.onActivityChange = function (activity) {\n changeActivity(activity);\n\n $scope.$broadcast('activityScheduleSelectionChanged', { selection: null });\n $scope.$broadcast('activitySelectionChanged', {\n activityID: activity,\n activity: selectedActivity\n });\n }\n\n semesterSvc.getDefaultAsync().then(function (activeSemester) {\n if (activeSemester) {\n $scope.semesterID = activeSemester.id;\n $scope.onSemesterChange($scope.semesterID);\n } else {\n $scope.semesterID = null;\n }\n });\n\n $scope.scheduleDetailModel;\n $scope.scheduleDetailModelOrig;\n\n $scope.onRowEdit = function (activityWeeks) {\n\n var selection = [];\n if (activityWeeks) {\n selection.push(activityWeeks);\n }\n\n $scope.selectedWeeks = selection;\n\n detailDialogPromise.$promise.then(function () {\n $scope.activityScheduleDetailError = null;\n detailDialogPromise.$scope.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n detailDialogPromise.show();\n });\n }\n\n $scope.onScheduleDetailSave = function (data) {\n $scope.activityWeeks = data;\n $scope.selectedWeeks.length = 0;\n detailDialogPromise.hide();\n\n $scope.$broadcast('activityScheduleSelectionChanged', {\n semesterID: $scope.semesterID,\n activityID: $scope.activityID,\n selection: $scope.selectedWeeks,\n activityWeeks: $scope.activityWeeks\n });\n\n _.forEach($scope.activityWeeks, function (w) {\n w.singlePeriodProgramOnly = !!selectedActivity ? selectedActivity.singlePeriodProgramOnly : false;\n });\n }\n\n $scope.onWeekSelected = function (data) {\n\n var selection = [];\n if (data) {\n selection.push(data);\n }\n $scope.selectedWeeks = selection;\n\n $scope.$broadcast('activityScheduleSelectionChanged', {\n semesterID: $scope.semesterID,\n activityID: $scope.activityID,\n selection: selection,\n activityWeeks: $scope.activityWeeks\n });\n }\n\n $scope.tabs = [];\n \n if (securitySvc.isInRole('ActivityReservation')) {\n $scope.tabs.push({\n title: 'TXT_LBL_STUDENTS',\n template: \"activities/activity-schedule-tabs/students.html\"\n });\n }\n\n if (securitySvc.isInRole('ActivityInstructor')) {\n $scope.tabs.push({\n title: 'TXT_LBL_INSTRUCTORS',\n template: \"activities/activity-schedule-tabs/instructors.html\"\n });\n }\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue });\n });\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activity-schedule-detail.html',\n show: false,\n scope: $scope\n });\n\n}]);","wbApp.controller('ActivityTariffCtrl', ['$scope', '$modal', 'activityTariffSvc',\nfunction ($scope, $modal, activityTariffSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale' },\n { field: 'price', displayName: \"TXT_LBL_PRICE\", align: 'right', cellFilter: 'wbCurrencyFlt', width: '110px' }\n ]\n };\n\n $scope.$on('refreshData', function (e, data) {\n $scope.activityTariffs = activityTariffSvc.getAllNonDeletedAsync(true);\n });\n\n $scope.activityTariffs = activityTariffSvc.getAllNonDeletedAsync(true);\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = activityTariffSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n activityTariffSvc.remove(data);\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/activity-tariffs/activity-tariffs-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('ActivityTariffDetailCtrl', ['$scope', 'activityTariffSvc',\nfunction ($scope, activityTariffSvc) {\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success() {\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n if (!model.activityTariffID) {\n activityTariffSvc.insert(model, success, error);\n } else {\n activityTariffSvc.update(model, success, error);\n }\n }\n\n}]);\n","wbApp.controller('ContractTemplateDetailDialogCtrl', ['$scope', 'contractTemplateSvc',\nfunction ($scope, contractTemplateSvc) {\n\n $scope.model = $scope.model ?? contractTemplateSvc.createNew();\n $scope.modelOrig = angular.copy($scope.model);\n \n $scope.isSaving = false;\n $scope.isLoading = false;\n \n $scope.onContractTemplateTypeChange = function(typeId)\n {\n $scope.isLoading = true;\n contractTemplateSvc.getSampleByType(typeId).$promise.then(function(templateSample) {\n $scope.model.templateData = templateSample.templateData;\n $scope.isLoading = false;\n }, function(err) {\n $scope.isLoading = false;\n })\n }\n\n if (!$scope.model.id) {\n $scope.onContractTemplateTypeChange(0);\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving || $scope.isLoading) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success(data) {\n if (!!$scope.onSaveSuccessful) {\n $scope.onSaveSuccessful(data);\n }\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n if (!model.id) {\n contractTemplateSvc.insert(model).$promise.then(success, error);\n } else {\n contractTemplateSvc.update(model).$promise.then(success, error);\n } \n }\n\n}]);\n","wbApp.controller('ContractTemplatesCtrl', ['$scope', '$modal', '$translate', '$filter', '$timeout', '$q', 'contractTemplateSvc',\n'messageBoxSvc',\nfunction ($scope, $modal, $translate, $filter, $timeout, $q, contractTemplateSvc, messageBoxSvc) {\n\n $scope.model = {\n templateData: null\n };\n \n $scope.modelOrig = null;\n \n var htmlEditorComponent = null;\n $scope.contractTemplateId = null;\n \n function setContractTemplateId(newId) {\n if ($scope.contractTemplateId !== newId) {\n $scope.contractTemplateId = newId;\n }\n if (!!htmlEditorComponent) {\n htmlEditorComponent.option(\"readOnly\", !$scope.contractTemplateId);\n }\n }\n\n\n var modelWasModified = false;\n $scope.modelIsUnchanged = function () {\n \n return !modelWasModified;\n\n };\n \n function setVariables(variables) {\n if (!!htmlEditorComponent) {\n htmlEditorComponent.option(\"variables.dataSource\", variables);\n } \n }\n\n function loadData() {\n if (!$scope.contractTemplateId) {\n $scope.modelOrig = {\n templateData: null\n };\n $scope.model = {\n templateData: null\n };\n modelWasModified = false;\n setVariables([]);\n } else {\n let model = contractTemplateSvc.getById($scope.contractTemplateId);\n model.$promise.then(function () {\n let variables = contractTemplateSvc.getVariablesByType(model.contractTemplateType);\n variables.$promise.then(function() {\n $scope.model = model;\n $scope.modelOrig = angular.copy($scope.model);\n modelWasModified = false;\n setVariables(variables);\n htmlEditorComponent.endUpdate();\n });\n });\n }\n\n if (!!htmlEditorComponent) {\n htmlEditorComponent.option(\"readOnly\", !$scope.contractTemplateId);\n }\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.onReloadTemplate();\n });\n \n $scope.onReloadTemplate = function() {\n if (!$scope.modelIsUnchanged()) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: $translate.instant('TXT_CONFIRM_CONTRACT_TEMPLATE_RELOAD_DATA'),\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: loadData\n }]\n });\n } else {\n loadData();\n }\n }\n \n $scope.onTemplateSelected = function() {\n if (!$scope.modelIsUnchanged() && !!$scope.modelOrig) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: $translate.instant('TXT_CONFIRM_LOAD_TEMPLATE_MODIFIED'),\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: function() {\n setContractTemplateId($scope.modelOrig.id);\n }\n }, {\n text: 'TXT_BTN_YES',\n callback: loadData\n }]\n }); \n } else {\n loadData();\n }\n }\n \n $scope.onNewTemplate = function() {\n\n function showNewDialog() {\n dialogPromise.$promise.then(function () {\n dialogPromise.$scope.model = null;\n dialogPromise.$scope.onSaveSuccessful = function(model) {\n $scope.$broadcast('refreshContractTemplateCombo', { id: model.id });\n setContractTemplateId(model.id);\n loadData();\n };\n dialogPromise.show();\n });\n }\n \n if (!$scope.modelIsUnchanged() && !!$scope.modelOrig) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: $translate.instant('TXT_CONFIRM_NEW_TEMPLATE_MODIFIED'),\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: showNewDialog\n }]\n });\n } else {\n showNewDialog();\n }\n }\n \n $scope.onRenameTemplate = function() {\n dialogPromise.$promise.then(function () {\n dialogPromise.$scope.model = angular.copy($scope.model);\n dialogPromise.$scope.onSaveSuccessful = function(model) {\n $scope.$broadcast('refreshContractTemplateCombo', { id: model.id });\n setContractTemplateId(model.id);\n loadData();\n };\n dialogPromise.show();\n }); \n }\n\n $scope.onSaveTemplate = function() {\n contractTemplateSvc.update($scope.model).$promise.then(function(model) {\n $scope.model = model;\n $scope.modelOrig = angular.copy($scope.model);\n modelWasModified = false;\n\n });\n }\n\n $scope.onDeleteTemplate = function() {\n \n function deleteTemplate() {\n contractTemplateSvc.remove($scope.model.id).$promise.then(function() {\n $scope.$broadcast('refreshContractTemplateCombo', { });\n $scope.contractTemplateId = null;\n loadData();\n });\n }\n \n if (!$scope.modelIsUnchanged() && !!$scope.modelOrig) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: $translate.instant('TXT_CONFIRM_DELETE_TEMPLATE_MODIFIED'),\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: deleteTemplate\n }]\n });\n } else {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: $translate.instant('TXT_CONFIRM_DELETE_TEMPLATE_UNMODIFIED'),\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: deleteTemplate\n }]\n });\n } \n }\n \n $scope.onGeneratePreview = function(id) {\n contractTemplateSvc.update($scope.model).$promise.then(function(model) {\n $scope.model = model;\n $scope.modelOrig = angular.copy($scope.model);\n modelWasModified = false;\n window.open(\"restapi/contract-templates/\" + id + \"/preview\", '_blank');\n });\n \n // $(\"#dataDownloadIFrame\").remove();\n // $(\"body\").append(\"\"); \n }\n \n $scope.htmlEditorOptions = {\n width: \"100%\",\n height: \"100%\",\n valueType: \"html\",\n readOnly: true,\n toolbar: {\n items: [\n \"undo\",\n \"redo\",\n \"separator\",\n {\n name: \"size\",\n acceptedValues: [\"8pt\", \"10pt\", \"12pt\", \"14pt\", \"18pt\", \"24pt\", \"36pt\"]\n },\n {\n name: \"font\",\n acceptedValues: [\"Arial\", \"Georgia\", \"Tahoma\", \"Times New Roman\", \"Verdana\"]\n },\n \"separator\",\n \"bold\",\n \"italic\",\n \"strike\",\n \"underline\",\n \"separator\",\n \"alignLeft\",\n \"alignCenter\",\n \"alignRight\",\n \"alignJustify\",\n \"separator\",\n \"orderedList\",\n \"bulletList\",\n \"separator\",\n {\n name: \"header\",\n acceptedValues: [false, 1, 2, 3, 4, 5]\n },\n \"separator\",\n \"color\",\n \"background\",\n \"separator\",\n \"link\",\n \"image\",\n \"separator\",\n \"clear\",\n \"codeBlock\",\n \"blockquote\",\n \"separator\",\n \"insertTable\",\n \"deleteTable\",\n \"insertRowAbove\",\n \"insertRowBelow\",\n \"deleteRow\",\n \"insertColumnLeft\",\n \"insertColumnRight\",\n \"deleteColumn\",\n \"cellProperties\",\n \"tableProperties\",\n \"variable\"\n ],\n multiline: true\n },\n tableContextMenu: {\n enabled: true\n },\n mediaResizing: {\n enabled: true\n },\n allowSoftLineBreak: true,\n // Template reload or show preview generates an error and break the editor. Probably DevExpress issue\n // tableResizing: {\n // enabled: true \n // },\n variables: {\n dataSource: [],\n escapeChar: [\"\", \"\"]\n },\n bindingOptions: {\n value: \"model.templateData\"\n },\n onContentReady: function (e) {\n htmlEditorComponent = e.component;\n },\n onValueChanged: function (e) {\n if (e.event !== undefined) {\n modelWasModified = true;\n }\n },\n customizeModules: function (config) {\n config.history = {\n delay: 0,\n maxStack: 5000\n };\n }\n }\n\n var dialogPromise = $modal({\n templateUrl: 'activities/contract-templates/contract-template-detail-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('ContractsCtrl', ['$scope', '$modal', '$translate', '$filter', '$timeout', '$q', 'contractSvc', 'groupSvc', 'securitySvc',\nfunction ($scope, $modal, $translate, $filter, $timeout, $q, contractSvc, groupSvc, securitySvc) {\n\n $scope.contractsRaw = [];\n $scope.contracts = [];\n $scope.groups = groupSvc.getAllAsync();\n $scope.customFilter = { groups: [] };\n \n function preFilter() {\n return $q(function (resolve, reject) {\n $q.all([$scope.contractsRaw.$promise, $scope.groups.$promise]).then(function () {\n var groupIDs = _.values($scope.customFilter.groups);\n $scope.contracts.length = 0;\n $scope.contracts.push.apply($scope.contracts,\n _.filter($scope.contractsRaw, function (o) {\n if (groupIDs.length > 0) {\n return _.intersectionWith(o.studentGroupsIds, groupIDs, function(g1, g2) {\n return g1 == g2;\n }).length > 0;\n }\n return true;\n })\n );\n resolve();\n });\n });\n } \n \n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n let all = contractSvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.contractsRaw = data;\n preFilter().then(function() {\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedContract(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedContract(null);\n }\n\n resolve();\n });\n }, function (error) {\n $scope.contracts = [];\n setSelectedContract(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n $scope.onRowSelected = function (data) {\n setSelectedContract(data);\n }\n\n let onPrintContractByType = function (model, contractTemplateType) {\n window.open(\"restapi/contracts/\" + model.id + \"/report/\" + contractTemplateType, '_blank');\n }\n\n $scope.gridSettings = {\n name: 'contracts',\n keyExpr: 'id',\n shouldShowColumnChooser: true,\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'isActive', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n { dataField: 'fromDate', caption: $translate.instant('TXT_LAB_VALID_FROM'), dataType: 'date', format: { type: 'shortDate' }, width: '80px' },\n { dataField: 'toDate', caption: $translate.instant('TXT_LAB_VALID_TO'), dataType: 'date', format: { type: 'shortDate' }, width: '80px' },\n {\n dataField: 'studentSurname',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n width: '140px',\n calculateCellValue: function (rowData) {\n return String.prototype.fullName(rowData.studentName, rowData.studentMiddleName, rowData.studentSurname);\n }\n },\n {\n dataField: 'userSurname',\n caption: $translate.instant('TXT_LBL_PARENT'),\n dataType: 'string',\n width: '140px',\n calculateCellValue: function (rowData) {\n return String.prototype.fullName(rowData.userName, rowData.userMiddlename, rowData.userSurname);\n }\n }, \n {\n dataField: 'contractSchedules',\n caption: $translate.instant('TXT_SCHEDULE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('contractScheduleShort')(rowData.contractSchedules);\n }\n },\n {\n dataField: 'studentGroupsIds',\n caption: $translate.instant('TXT_MENU_GROUPS'),\n dataType: 'string',\n encodeHtml: false,\n allowFiltering: false,\n allowHeaderFiltering: false,\n calculateCellValue: function (rowData) {\n return $filter('groupsColors')(rowData.studentGroupsIds);\n },\n width: '80px'\n }, \n {\n dataField: 'accountingBookId',\n caption: $translate.instant('TXT_LBL_ACCOUNTING_BOOK'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('accountingBook')(+rowData.accountingBookId);\n },\n width: '180px',\n visible: false\n }, \n ],\n customCommands: [{\n text: $translate.instant('TXT_MENU_PRINT_CONTRACT'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 0); },\n callback: function (data) { onPrintContractByType(data, 0); } \n },{\n text: $translate.instant('TXT_MENU_PRINT_DOCTORS_ASSESSMENT'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 1); },\n callback: function (data) { onPrintContractByType(data, 1); }\n },{\n text: $translate.instant('TXT_MENU_PRINT_REGISTRATION_SHEET'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 2); },\n callback: function (data) { onPrintContractByType(data, 2); }\n },{\n text: $translate.instant('TXT_MENU_PRINT_LABOR_MARKET_POSITION'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 3); },\n callback: function (data) { onPrintContractByType(data, 3); }\n },{\n text: $translate.instant('TXT_MENU_PRINT_GDPR'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 4); },\n callback: function (data) { onPrintContractByType(data, 4); }\n },{\n text: $translate.instant('TXT_MENU_PRINT_CUSTOM_1'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 6); },\n callback: function (data) { onPrintContractByType(data, 6); }\n },{\n text: $translate.instant('TXT_MENU_PRINT_CUSTOM_2'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') && !!contractSvc.getContractTemplateIdByType(data, 7); },\n callback: function (data) { onPrintContractByType(data, 7); }\n },{\n text: $translate.instant('TXT_SEND_CONTRACTS'),\n isVisible: function (data) { return !!data.contractTemplatesInfos }, \n callback: function (data) { onShowSendContractsParamsDialog(data); },\n beginGroup: true\n },{\n text: $translate.instant('TXT_OPZ_PLUS'),\n isVisible: function (data) { return securitySvc.isInRole('Reports') },\n callback: function (data) { onShowOpzPlusParamsDialog(); },\n beginGroup: true\n }]\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n contractSvc.createNew().then(function(newModel) {\n detailDialogPromise.$scope.model = newModel;\n detailDialogPromise.$scope.onContractSave = function (model) {\n refreshData().then(function () {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedContract(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onContractSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n contractSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n } \n\n $scope.onRowCopy = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.model.isNew = true;\n detailDialogPromise.$scope.model.id = null;\n detailDialogPromise.$scope.onContractSave = function (model) {\n refreshData().then(function () {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedContract(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n \n function onShowSendContractsParamsDialog(contract) {\n sendContractsParamsDialogPromise.$promise.then(function () {\n sendContractsParamsDialogPromise.$scope.contract = angular.copy(contract);\n // sendContractsParamsDialogPromise.$scope.onContractsSend = function () {\n // };\n sendContractsParamsDialogPromise.show();\n }); \n }\n \n function onShowOpzPlusParamsDialog() {\n opzPlusParamsDialogPromise.$promise.then(function() {\n opzPlusParamsDialogPromise.show();\n });\n }\n \n function setSelectedContract(contract, refresh) {\n $scope.selectedContract = contract;\n $scope.$broadcast('contractSelectionChanged', $scope.selectedContract);\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'activities/contracts/contract-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var sendContractsParamsDialogPromise = $modal({\n templateUrl: 'activities/contracts/send-contracts-params-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n\n var opzPlusParamsDialogPromise = $modal({\n templateUrl: 'activities/contracts/opz-plus-params-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('ContractsDetailCtrl', ['$scope', '$modal', 'contractSvc',\nfunction ($scope, $modal, contractSvc) {\n\n $scope.model = contractSvc.transformModelForEdit($scope.model);\n \n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDeleteSchedule = function(schedule) {\n const index = $scope.model.contractSchedules.indexOf(schedule);\n if (index > -1) {\n $scope.model.contractSchedules.splice(index, 1);\n }\n if ($scope.model.contractSchedules.length === 0) {\n $scope.onAddSchedule();\n }\n }\n \n $scope.onAddSchedule = function() {\n $scope.model.contractSchedules.push({\n monday: { active: false, startTime: null, endTime: null, food: false },\n tuesday: { active: false, startTime: null, endTime: null, food: false },\n wednesday: { active: false, startTime: null, endTime: null, food: false },\n thursday: { active: false, startTime: null, endTime: null, food: false },\n friday: { active: false, startTime: null, endTime: null, food: false },\n saturday: { active: false, startTime: null, endTime: null, food: false },\n sunday: { active: false, startTime: null, endTime: null, food: false },\n });\n }\n \n $scope.onActiveClick = function(daySchedule, active) {\n if (!active) {\n daySchedule.startTime = null;\n daySchedule.endTime = null;\n daySchedule.food = false;\n }\n }\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n let modelForSave = contractSvc.transformModelForSave(angular.copy(data));\n \n $scope.isSaving = true;\n\n if (!data.id) {\n contractSvc.insert(modelForSave)\n .$promise.then(success, error);\n } else {\n contractSvc.update(modelForSave)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onContractSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n \n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"activities/contracts/contract-detail-main-tab.html\"\n },{\n title: 'TXT_SCHEDULE',\n template: \"activities/contracts/contract-detail-schedule-tab.html\"\n },{\n title: 'TXT_TEMPLATES',\n template: \"activities/contracts/contract-detail-templates-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n}]);\n","wbApp.controller('ContractsOpzPlusParamsCtrl', ['$scope', '$q', '$translate', 'groupSvc',\n function ($scope, $q, $translate, groupSvc) {\n $scope.isSaving = false;\n \n $scope.model = {\n fromDate: moment().toDate(),\n toDate: moment().toDate(),\n groupId: null\n };\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.groups = groupSvc.getAllAsync();\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onDetailSave = function (model) {\n $scope.$hide();\n let fromDate = moment(model.fromDate).startOf('day').toDate();\n let toDate = moment(model.toDate).endOf('day').toDate();\n window.open(\"restapi/contracts/exports/opzplus?fromDate=\" + fromDate.toJSON() + \"&toDate=\" + toDate.toJSON() + \"&groupId=\" + model.groupId, '_blank');\n };\n\n }]);\n\n","wbApp.controller('ContractsSendContractsParamsCtrl', ['$scope', '$modal', 'contractSvc',\nfunction ($scope, $modal, contractSvc) {\n\n let editContractModel = contractSvc.transformModelForEdit($scope.contract);\n \n $scope.model = {\n contractTemplateType0Enabled: !!editContractModel.contractTemplateType0,\n contractTemplateType1Enabled: !!editContractModel.contractTemplateType1,\n contractTemplateType2Enabled: !!editContractModel.contractTemplateType2,\n contractTemplateType3Enabled: !!editContractModel.contractTemplateType3,\n contractTemplateType4Enabled: !!editContractModel.contractTemplateType4,\n contractTemplateType6Enabled: !!editContractModel.contractTemplateType6,\n contractTemplateType7Enabled: !!editContractModel.contractTemplateType7,\n\n contractTemplateType0: false,\n contractTemplateType1: false,\n contractTemplateType2: false,\n contractTemplateType3: false,\n contractTemplateType4: false,\n contractTemplateType6: false,\n contractTemplateType7: false,\n }\n\n $scope.isFormValid = function() {\n return !!$scope.model.contractTemplateType0 ||\n !!$scope.model.contractTemplateType1 ||\n !!$scope.model.contractTemplateType2 ||\n !!$scope.model.contractTemplateType3 ||\n !!$scope.model.contractTemplateType4 ||\n !!$scope.model.contractTemplateType6 ||\n !!$scope.model.contractTemplateType7;\n }\n\n $scope.onDetailSave = function (model) {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n \n let typesToSend = [];\n if (!!$scope.model.contractTemplateType0) {\n typesToSend.push(0);\n }\n if (!!$scope.model.contractTemplateType1) {\n typesToSend.push(1);\n }\n if (!!$scope.model.contractTemplateType2) {\n typesToSend.push(2);\n }\n if (!!$scope.model.contractTemplateType3) {\n typesToSend.push(3);\n }\n if (!!$scope.model.contractTemplateType4) {\n typesToSend.push(4);\n }\n if (!!$scope.model.contractTemplateType6) {\n typesToSend.push(6);\n }\n if (!!$scope.model.contractTemplateType7) {\n typesToSend.push(7);\n }\n\n contractSvc.sendContracts($scope.contract.id, typesToSend).$promise.then(function() {\n $scope.isSaving = false;\n $scope.$hide();\n }, function(error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n })\n \n }\n}]);\n","'use strict';\n\nwbApp.controller('CzMsMtRegistryCtrl', ['$scope', '$modal', '$timeout', '$q', '$translate', '$filter', 'czMsMtRegistrySvc', 'semesterSvc', 'activitySvc',\n function ($scope, $modal, $timeout, $q, $translate, $filter, czMsMtRegistrySvc, semesterSvc, activitySvc) {\n\n $scope.isSaving = false;\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.semesterID = null;\n $scope.activityID = null;\n $scope.czMsMtRegistry = [];\n\n $q.all([semesterSvc.getDefaultAsync()])\n .then(function (data) {\n if (data[0]) {\n $scope.semesterID = data[0].id;\n }\n\n // $scope.activities = activitySvc.getAllBySemesterIDAsync(\n // $scope.semesterID != null ? $scope.semesterID : null);\n });\n\n $scope.onSemesterChange = function (semesterId) {\n $scope.activityID = null;\n $scope.czMsMtRegistry = [];\n setSelectedStudent({});\n }\n\n $scope.onActivityChange = function (activityId) {\n refreshData();\n setSelectedStudent({});\n }\n \n function refreshData() {\n if (!!$scope.activityID) {\n czMsMtRegistrySvc.findLatestByActivity($scope.activityID).$promise.then(function (data) {\n $scope.czMsMtRegistry = data;\n });\n }\n }\n\n function setSelectedStudent(record, refresh) {\n $scope.selectedRecord = record;\n $scope.studentFullName = String.prototype.fullName(record.studentName, record.studentMiddleName, record.studentSurname);\n $scope.parentFullName = String.prototype.fullName(record.userName, record.userMiddleName, record.userSurname);\n \n if (!!record) {\n $scope.$broadcast('selectedStudentChanged', {\n studentId: record.studentId,\n refresh: !!refresh,\n recordId: record.id\n });\n } else {\n $scope.$broadcast('selectedStudentChanged', {\n studentId: null,\n refresh: !!refresh,\n recordId: null\n }); \n }\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n $scope.gridSettings = {\n name: 'czMsMtRegistry',\n columns: [\n {\n dataField: 'studentSurname',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n \n calculateCellValue: function (rowData) {\n return String.prototype.fullName(rowData.studentName, rowData.studentMiddleName, rowData.studentSurname);\n }\n },\n {\n dataField: 'userSurname',\n caption: $translate.instant('TXT_LBL_PARENT'),\n dataType: 'string',\n width: '140px',\n calculateCellValue: function (rowData) {\n return String.prototype.fullName(rowData.userName, rowData.userMiddlename, rowData.userSurname);\n }\n },\n { dataField: 'provoz', caption: 'Provoz', dataType: 'string', width: '80px',},\n { dataField: 'validFromUtc', caption: $translate.instant('TXT_LAB_VALID_FROM'), dataType: 'date', format: { type: 'shortDate' }, width: '80px' },\n { dataField: 'isValid', caption: 'Validní', dataType: 'boolean', width: '60px' },\n { dataField: 'requireSpecialEducation', caption: 'Spec', dataType: 'boolean', width: '60px' },\n ],\n shouldDisableDelete: function () { return !$scope.selectedRecord || !$scope.selectedRecord.isLast; },\n customCommands: [{\n text: 'Předávání dat (Export XML)',\n callback: function (data) { onShowExportDetailDialog(); },\n }]\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedStudent(data);\n }\n\n $scope.onRowAdd = function () {\n if (!!$scope.semesterID && !!$scope.activityID) {\n $q.all([\n detailDialogPromise.$promise,\n czMsMtRegistrySvc.createNew($scope.semesterID, $scope.activityID)\n ]).then(function(dataP) {\n detailDialogPromise.$scope.model = dataP[1];\n detailDialogPromise.$scope.onRegistryDetailSave = function (data) {\n refreshData(true);\n $scope.$broadcast('selectedStudentChanged', { studentId: data.studentId, refresh: true, recordId: data.id });\n };\n detailDialogPromise.show();\n })\n }\n }\n\n \n $scope.onRowEdit = function (data) {\n\n let modelPromise = czMsMtRegistrySvc.getById(data.id);\n $q.all([modelPromise, detailDialogPromise.$promise]).then(function(model) {\n detailDialogPromise.$scope.model = model[0];\n detailDialogPromise.$scope.onRegistryDetailSave = function (data) {\n refreshData(true);\n $scope.$broadcast('selectedStudentChanged', { studentId: data.studentId, refresh: true, recordId: data.id });\n };\n detailDialogPromise.show();\n \n });\n }\n\n $scope.onRowDelete = function (data) {\n czMsMtRegistrySvc.remove(data.id).$promise.then(function () {\n refreshData(true);\n setSelectedStudent(null);\n });\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"cz-ms-mt-registry/detail-tabs/home.html\",\n },\n {\n title: 'Všechny věty studenta',\n template: \"cz-ms-mt-registry/cz-ms-mt-registry-detail-tabs-student-records.html\",\n }\n ];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n \n let detailDialogPromise = $modal({\n templateUrl: 'cz-ms-mt-registry/cz-ms-mt-registry-detail.html',\n show: false,\n scope: $scope.$new(true)\n });\n \n function onShowExportDetailDialog() {\n exportDialogPromise.$promise.then(function() {\n exportDialogPromise.show();\n });\n }\n\n let exportDialogPromise = $modal({\n templateUrl: 'cz-ms-mt-registry/cz-ms-mt-registry-export-detail.html',\n show: false,\n scope: $scope.$new(true)\n });\n }]);","wbApp.controller('CzMsMtRegistryDetailCtrl', ['$scope', '$modal', 'czMsMtRegistrySvc', 'messageBoxSvc',\nfunction ($scope, $modal, czMsMtRegistrySvc, messageBoxSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n $scope.lastValidatedModel = angular.copy($scope.model);\n\n $scope.onStudentChange = function(studentId) {\n czMsMtRegistrySvc.changeStudentId($scope.model, studentId);\n }\n \n $scope.onActivityChange = function () {\n czMsMtRegistrySvc.changeActivityId($scope.model, $scope.model.activityId);\n }\n \n $scope.onSaveAsANewRecord = function(data) {\n czMsMtRegistrySvc.validate(data).$promise.then(function(success) {\n if (success.length === 0) {\n detailSaveAsNewImpl(data);\n }\n else {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'Záznam není validní! Opravdu chcete vytvořit novou větu k tomuto studentovi?',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n detailSaveAsNewImpl(data);\n }\n }]\n });\n }\n });\n }\n \n $scope.onDetailSave = function (data) {\n if ($scope.modelOrig.isValid) {\n // Record was valid before, let's try to validate it again \n let dataCopy = angular.copy(data);\n czMsMtRegistrySvc.validate(dataCopy).$promise.then(function(success) {\n if (success.length === 0) {\n detailSaveImpl(data);\n } else {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'Záznam není validní! Před Vaší poslední úpravou byl záznam validní. Opravdu chcete tuto změnu uložit?',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n detailSaveImpl(data);\n }\n }]\n });\n }\n });\n } else {\n detailSaveImpl(data);\n }\n }\n \n function detailSaveAsNewImpl(data) {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n let dataCopy = angular.copy(data);\n dataCopy.id = null;\n \n czMsMtRegistrySvc.insert(dataCopy)\n .$promise.then(success, error);\n\n function success(newModel) {\n $scope.onRegistryDetailSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n } \n }\n \n function detailSaveImpl(data) {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n let dataCopy = angular.copy(data);\n \n if (!data.id) {\n czMsMtRegistrySvc.insert(dataCopy)\n .$promise.then(success, error);\n } else {\n czMsMtRegistrySvc.update(dataCopy)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onRegistryDetailSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n \n $scope.onValidate = function (data) {\n if ($scope.isValidating) {\n return;\n }\n \n $scope.isValidating = true;\n let dataCopy = angular.copy(data);\n \n czMsMtRegistrySvc.validate(dataCopy).$promise.then(function(success) {\n $scope.isValidating = false;\n if (success.length === 0) {\n data.isValid = true;\n $scope.lastValidatedModel = angular.copy(data);\n } else {\n data.isValid = false;\n $scope.lastValidatedModel = angular.copy(data);\n\n let message = '';\n _.forEach(success, function (s) {\n message += '
' + s + '
';\n });\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_INFORMATION',\n message: message,\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n }\n }, function(error) {\n $scope.isValidating = false;\n alert(error);\n });\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function(data) {\n return angular.equals(data, $scope.lastValidatedModel) && $scope.lastValidatedModel.isValid;\n }\n \n $scope.requireSpecialEducationChanged = function(requireSpecialEducation) {\n czMsMtRegistrySvc.setRequireSpecialEducation($scope.model, requireSpecialEducation);\n }\n \n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"cz-ms-mt-registry/cz-ms-mt-registry-detail-main-tab.html\"\n },{\n title: 'TXT_LBL_ATTENDANCE',\n template: \"cz-ms-mt-registry/cz-ms-mt-registry-detail-attendance-tab.html\"\n },{\n title: 'Platnost věty',\n template: \"cz-ms-mt-registry/cz-ms-mt-registry-detail-changes-tab.html\"\n },{\n title: 'Speciální potřeby',\n template: \"cz-ms-mt-registry/cz-ms-mt-registry-detail-special-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n \n $scope.validFromUtc_help = \"

\\\"Začátek platnosti věty\\\" se uvádí datum, od kterého platí kombinace hodnot položek uvedená v datové větě. U téhož\\n\" +\n \" žáka/studenta musí jednotlivé předávané věty na sebe přesně časově navazovat. Se začátkem platnosti nové věty\\n\" +\n \" s aktualizovaným obsahem položek se zároveň ukončuje platnost předchozí věty, a to dnem předcházejícím. Položka\\n\" +\n \" \\\"Začátek platnosti věty\\\" musí být vyplněna u každé věty

\\n\" +\n \"

U žáků/studentů se vytváří nová věta vždy minimálně k 1. 9., kdy žáci postupují do vyšších ročníků, mění se název\\n\" +\n \" třídy, příp. opakují ročník. U individuálního vzdělávacího plánu, který stanovuje organizaci vzdělávání odlišně\\n\" +\n \" od standardního období školního roku, se rovněž vždy k 1. 9. vytváří nová věta.

\"\n \n $scope.kodVety_help = \"Kód věty (podle číselníku RAKV) rozlišuje, za koho se příslušná věta předává, a umožňuje kontrolovat správnost\\n\" +\n \"vyplnění ostatních položek. Jiné vyplnění položek je požadováno ve větě o žákovi/studentovi, jiné ve větě\\n\" +\n \"o absolventovi, o osobě s přerušeným vzděláváním nebo ukončeným vzděláváním bez absolvování (předepsaná\\n\" +\n \"zkouška nesložena), apod.\";\n \n $scope.zmendat_help = \"\\n\" +\n \"

\\n\" +\n \" Za každého žáka se předává tolik vět, kolikrát se změnil obsah předávaných údajů za vykazované období (nezahrnuje\\n\" +\n \" opravy chybně zadaných údajů!!!). Předávají se vždy úplné věty, obsahující všechny povinné položky, přičemž tyto\\n\" +\n \" věty na sebe časově plynule navazují.\\n\" +\n \"

\" +\n \"

\\n\" +\n \" Položka KOD_ZMEN v sobě obsahuje informaci o registrované změně, jež je už promítnuta v položkách této aktuální\\n\" +\n \" věty. Kód změny uvedený podle číselníku RAKZ se tedy objevuje ve větě s „novými“ údaji. Pokud došlo k několika\\n\" +\n \" změnám ve stejném termínu, uvádí se kód odpovídající hlavnímu důvodu vzniku nové věty\\\". Zjednodušeně by se dalo\\n\" +\n \" říci, že \\\"vyšší\\\" hodnota kódu má přednost před \\\"nižší\\\" (výjimkou je kód 8). Nejvyšší prioritu však má KOD_ZMEN=7\\n\" +\n \" změna osobního identifikátoru – v takovém případě se v komentáři uvede doposud uváděný identifikátor.\\n\" +\n \" Standardní postoupení do vyššího ročníku sice vytváří vždy novou větu, ale tato očekávaná změna se nepromítá\\n\" +\n \" do změnových položek.\\n\" +\n \"

\";\n \n $scope.validToUtc_help = \"

\\n\" +\n \" V položce PLAT_KON se uvádí datum, do kterého platila kombinace hodnot položek uvedená v datové větě.\\n\" +\n \"

\\n\" +\n \"

\\n\" +\n \" V aktuálně platné větě zůstává položka PLAT_KON prázdná, neboť konec platnosti této věty ještě nenastal.\\n\" +\n \" Jinými slovy u vět, které jsou aktuální a tudíž platné, je položka PLAT_KON nevyplněna, neuvádí se předpokládané\\n\" +\n \" budoucí datum ukončení platnosti věty.\\n\" +\n \"

\";\n \n $scope.zahdat_help = \"

\\n\" +\n \" Zahájení školního vzdělávání se vztahuje k aktuální škole, případně druhu studia (přechod do nástavbového nebo\\\\n\\\" +\\n\" +\n \" \\\"zkráceného studia pro získání středního vzdělání). Pokud žák přestupuje z jiné školy podle §§ 45, 66 nebo 97\\\\n\\\" +\\n\" +\n \" \\\"školského zákona, uvede se kód pro přestup z jiné školy.\\n\" +\n \"

\";\n \n $scope.izo_help = \"

\\n\" +\n \" Resortní identifikátor školy (IZO), se objevuje v názvu souboru, v záhlaví souboru a v každé větě souboru v položce\\n\" +\n \" IZO. V názvu souboru i uvnitř souboru musí být ve všech větách uvedeno stejné IZO.\\n\" +\n \" Je třeba rozlišovat resortní identifikátor právnické osoby vykonávající činnost školy (RED_IZO), uváděný od roku\\n\" +\n \" 2011 na vysvědčeních o maturitní zkoušce, a resortní identifikátor školy (IZO), který se uvádí na dalších dokladech\\n\" +\n \" o vzdělání (vyhláška č. 3/2015 Sb. o některých dokladech o vzdělání, ve znění pozdějších předpisů).\\n\" +\n \"

\";\n \n $scope.cast_help = \"

\\n\" +\n \" Číslo části je uvedeno (podobně jako IZO) v názvu souboru, v záhlaví souboru a v každé větě za každou vykazovanou\\n\" +\n \" osobu v položce CAST a v souboru za jednu část musí být všude stejné. Jde o rozlišení jednotlivých míst\\n\" +\n \" poskytovaného vzdělávání v rámci jednoho druhu školy (jednoho platného IZO) pomocí znaků 01, 02, atd.\\n\" +\n \"

\\n\" +\n \"

\\n\" +\n \" Číslo části v předávaných souborech musí odpovídat stavu v nabídce „Nastavení částí“ v aplikaci pro předání dat ze\\n\" +\n \" školních matrik. Čísla částí u jednotlivých míst by měla škola zkontrolovat a podle potřeby upravit před každým\\n\" +\n \" novým sběrem dat tak, aby odpovídala počtu předávaných souborů a jejich označení.\\n\" +\n \"

\";\n \n \n}]);\n","wbApp.controller('CzMsMtRegistryExportDetailCtrl', ['$scope', '$modal', 'czMsMtRegistrySvc', '$q', 'activitySvc',\nfunction ($scope, $modal, czMsMtRegistrySvc, $q, activitySvc) {\n\n $scope.model = czMsMtRegistrySvc.newExportModel();\n $scope.activities = activitySvc.getInfoByRange($scope.model.fromDate, $scope.model.toDate);\n $scope.activities.$promise.then(function() {\n if (activitiesComboInstance != null) {\n $scope.model.activityIds = _.map($scope.activities, 'id');\n }\n });\n \n let activitiesComboInstance = null;\n \n function initExportResponse() {\n $scope.exportResponse = {\n errors: [],\n filesToDownload: []\n };\n }\n \n $scope.onDateRangeChanged = function() {\n if ($scope.model.fromDate && $scope.model.toDate &&\n moment($scope.model.fromDate).isBefore(moment($scope.model.toDate))) {\n $scope.activities = activitySvc.getInfoByRange($scope.model.fromDate, $scope.model.toDate);\n $scope.activities.$promise.then(function() {\n if (activitiesComboInstance != null) {\n $scope.model.activityIds = _.map($scope.activities, 'id');\n } \n });\n } else {\n $scope.activities = [];\n }\n }\n \n $scope.isGenerating = false;\n\n initExportResponse();\n \n $scope.getDownloadUrl = function(downloadUri) {\n return `/restapi/cz-ms-mt-registry/registry-export/${downloadUri}`\n }\n \n $scope.getFileName = function(downloadUri) {\n return downloadUri.split('-').pop();\n }\n \n $scope.onGenerateExport = function() {\n \n if ($scope.isGenerating) {\n return;\n }\n\n $scope.isGenerating = true;\n\n initExportResponse(); \n \n czMsMtRegistrySvc.exportToXml($scope.model).$promise.then(function(result) {\n $scope.exportResponse = result;\n $scope.isGenerating = false;\n }, function (error) {\n $scope.isGenerating = false;\n });\n }\n \n $scope.onErrorClick = function(id) {\n let modelPromise = czMsMtRegistrySvc.getById(id);\n $q.all([modelPromise.$promise, detailDialogPromise.$promise]).then(function() {\n detailDialogPromise.$scope.model = modelPromise;\n detailDialogPromise.$scope.onRegistryDetailSave = function () {\n };\n detailDialogPromise.show();\n });\n }\n \n $scope.onDruhProvozuChanged = function() {\n $scope.model.prumDobaCelodenniProvoz = 0;\n $scope.model.prumDobaPolodenniProvoz = 0;\n $scope.model.prumDobaInternatniProvoz = 0;\n }\n\n let detailDialogPromise = $modal({\n templateUrl: 'cz-ms-mt-registry/cz-ms-mt-registry-detail.html',\n show: false,\n scope: $scope.$new(true)\n });\n \n $scope.activitiesCombo = {\n //items: $scope.activities,\n displayExpr: 'name',\n valueExpr: 'id',\n showSelectionControls: true,\n maxDisplayedTags: 6,\n multiline: false,\n\n itemTemplate: 'customItem',\n bindingOptions: {\n items: 'activities',\n value: 'model.activityIds'\n },\n onInitialized: function (e) {\n activitiesComboInstance = e.component;\n }\n }\n \n}]);\n","'use strict';\r\n\r\nwbApp.controller('CzMsMtRegistryStudentRecordsCtrl', ['$scope', '$q', '$modal', '$window', '$translate', '$filter', 'securitySvc', 'tenantSettingSvc', 'czMsMtRegistrySvc', 'gridSortSvc',\r\nfunction ($scope, $q, $modal, $window, $translate, $filter, securitySvc, tenantSettingSvc, czMsMtRegistrySvc, gridSortSvc) {\r\n\r\n $scope.tenantSettings = tenantSettingSvc.settings;\r\n\r\n $scope.selectedStudentInd = {};\r\n let isActive = false;\r\n let loaded = false;\r\n $scope.studentRecords = [];\r\n\r\n function refreshData(studentId) {\r\n $scope.studentRecords = czMsMtRegistrySvc.findByStudent(studentId);\r\n }\r\n \r\n \r\n $scope.$on('selectedStudentChanged', function (e, studentInd) {\r\n if (studentInd.studentId) {\r\n if (isActive) {\r\n if ($scope.selectedStudentInd.studentId !== studentInd.studentId || studentInd.refresh) {\r\n refreshData(studentInd.studentId);\r\n }\r\n loaded = true;\r\n } else {\r\n loaded = false;\r\n }\r\n } else {\r\n $scope.studentRecords = [];\r\n }\r\n $scope.selectedStudentInd = studentInd;\r\n });\r\n\r\n $scope.$on('activeTabChanged', function (e, data) {\r\n if (data.activeTab === 1) {\r\n if (!isActive) {\r\n isActive = true;\r\n if (!loaded && $scope.selectedStudentInd && $scope.selectedStudentInd.studentId) {\r\n refreshData($scope.selectedStudentInd.studentId);\r\n loaded = true;\r\n }\r\n }\r\n } else {\r\n isActive = false;\r\n }\r\n });\r\n\r\n $scope.studentRecordsGridSettings = {\r\n name: 'studentRecords',\r\n columns: [\r\n {\r\n dataField: 'studentSurname',\r\n caption: $translate.instant('TXT_LBL_STUDENT'),\r\n dataType: 'string',\r\n\r\n calculateCellValue: function (rowData) {\r\n return String.prototype.fullName(rowData.studentName, rowData.studentMiddleName, rowData.studentSurname);\r\n }\r\n },\r\n { dataField: 'semesterName', caption: $translate.instant('TXT_LBL_SEMESTER'), dataType: 'string', width: '110px',},\r\n { dataField: 'activityName', caption: $translate.instant('TXT_LBL_ACTIVITY'), dataType: 'string', width: '110px',},\r\n { dataField: 'validFromUtc', caption: $translate.instant('TXT_LAB_VALID_FROM'), dataType: 'date', format: { type: 'shortDate' }, width: '90px', sortOrder: 'desc' },\r\n { dataField: 'validToUtc', caption: $translate.instant('TXT_LAB_VALID_TO'), dataType: 'date', format: { type: 'shortDate' }, width: '90px' },\r\n { dataField: 'isValid', caption: 'Validní', dataType: 'boolean', width: '60px' },\r\n { dataField: 'requireSpecialEducation', caption: 'Spec', dataType: 'boolean', width: '60px' },\r\n ],\r\n shouldDisableDelete: function () { return !$scope.selectedRecord1 || !$scope.selectedRecord1.isLast; },\r\n onRowPrepared: function (e) {\r\n if (e.rowType === \"data\" && $scope.selectedStudentInd) {\r\n let data = e.component.getKeyByRowIndex(e.rowIndex);\r\n if (data.id === $scope.selectedStudentInd.recordId) {\r\n e.rowElement.addClass('text-success');\r\n }\r\n }\r\n },\r\n // onCellPrepared: function (e) {\r\n // if (e.rowType === \"data\" && e.columnIndex == 2) {\r\n // e.cellElement.mousemove(function () {\r\n // if (!!e.data.studentBirthday) {\r\n // e.cellElement.attr('title', $translate.instant(\"TXT_LAB_BIRTHDAY\") + \": \" + $filter('date')(e.data.studentBirthday, 'shortDate'));\r\n // }\r\n // });\r\n // }\r\n // },\r\n // customCommands: [{\r\n // text: $translate.instant('TXT_MENU_CREATE_PAYMENT'),\r\n // isVisible: function (row) { return (row.arrear > 0) && securitySvc.isInRole('Payment.Insert'); },\r\n // callback: function (row) { addPayment(row); }\r\n // },{\r\n // text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\r\n // isVisible: function () { return securitySvc.isInRole('Reports') && securitySvc.isInRole('CourseRegistration.PrintInvoice'); },\r\n // callback: function (data) { onPrintInvoice(data.courseRegistrationID); }\r\n // }, {\r\n // text: $translate.instant('TXT_MENU_PRINT_APPLICATION_FORM'),\r\n // isVisible: function () { return securitySvc.isInRole('Reports') && securitySvc.isInRole('CourseRegistration.PrintApplicationForm'); },\r\n // callback: function (data) { onPrintApplicationForm(data.courseRegistrationID); }\r\n // }, {\r\n // text: $translate.instant('TXT_MENU_PRINT_INFO_CARD'),\r\n // isVisible: function () { return securitySvc.isInRole('Course.InfoCard') && securitySvc.isInRole('Reports'); },\r\n // callback: function (data) { onPrintInfoCard(data.courseID, data.studentID); }\r\n // }, {\r\n // text: $translate.instant('TXT_MENU_RESEND_COURSE_REGISTRATION_NOTIFICATION'),\r\n // isVisible: function () { return securitySvc.isInRole('CourseRegistration'); },\r\n // callback: function (data) {\r\n // courseRegistrationSvc.sendRegistrationNotification(data.courseRegistrationID)\r\n // .then(function () {\r\n // data.notificationSent = true;\r\n // });\r\n // }\r\n // }]\r\n }\r\n\r\n $scope.onRowSelected = function (data) {\r\n $scope.selectedRecord1 = data;\r\n }\r\n \r\n // $scope.onRowEdit = function (data) {\r\n // detailDialogPromise.$promise.then(function () {\r\n // detailDialogPromise.$scope.course = $scope.selectedCourse;\r\n // detailDialogPromise.$scope.model = new webooker_courses_models.CourseRegistration(data);\r\n // detailDialogPromise.$scope.onAfterSuccessSave = function () {\r\n // $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID);\r\n // onCourseScheduleChanged();\r\n // }\r\n // detailDialogPromise.show();\r\n // });\r\n // }\r\n //\r\n // $scope.onRowAdd = function () {\r\n //\r\n // $q.all([detailDialogPromise.$promise, courseRegistrationSvc.createNew($scope.selectedCourse, false)])\r\n // .then(function (data) {\r\n // var courseRegistration = data[1];\r\n // detailDialogPromise.$scope.course = $scope.selectedCourse;\r\n // detailDialogPromise.$scope.model = courseRegistration;\r\n // detailDialogPromise.$scope.onAfterSuccessSave = function () {\r\n // $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID);\r\n // onCourseScheduleChanged();\r\n // }\r\n // detailDialogPromise.show();\r\n // });\r\n // }\r\n //\r\n $scope.onRowDelete = function (data) {\r\n czMsMtRegistrySvc.remove(data.id).$promise.then(function () {\r\n refreshData($scope.selectedStudentInd.studentId);\r\n $scope.$emit('refreshData', null);\r\n $scope.selectedRecord1 = null;\r\n });\r\n }\r\n\r\n $scope.onRowEdit = function (data) {\r\n\r\n let modelPromise = czMsMtRegistrySvc.getById(data.id);\r\n $q.all([modelPromise.$promise, detailDialogPromise.$promise]).then(function() {\r\n detailDialogPromise.$scope.model = modelPromise;\r\n detailDialogPromise.$scope.onRegistryDetailSave = function () {\r\n refreshData($scope.selectedStudentInd.studentId);\r\n $scope.$emit('refreshData', null);\r\n };\r\n detailDialogPromise.show();\r\n\r\n });\r\n }\r\n\r\n let detailDialogPromise = $modal({\r\n templateUrl: 'cz-ms-mt-registry/cz-ms-mt-registry-detail.html',\r\n show: false,\r\n scope: $scope\r\n });\r\n\r\n}]);\r\n","wbApp.controller('GalleryInfoEditDialogCtrl', ['$scope', 'protectedStorageSvc', 'securitySvc',\nfunction ($scope, protectedStorageSvc, securitySvc) {\n\n $scope.isSaving = false;\n $scope.galleryDirectory = $scope.galleryDirectory || \"\";\n $scope.modelOrig = angular.copy($scope.model);\n $scope.images = [];\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.detailGalleryEditTabs = [{\n title: 'TXT_MAIN',\n template: \"activities/gallery-info-edit-dlg-main-tab.html\"\n }];\n if (securitySvc.isInRole('ProtectedStorage')) {\n $scope.detailGalleryEditTabs.push({\n title: 'TXT_LBL_PICTURES',\n template: \"activities/gallery-info-edit-dlg-pictures-tab.html\"\n });\n }\n\n $scope.detailGalleryEditTabs.activeTab = 0;\n\n $scope.$watch('detailGalleryEditTabs.activeTab', function (newValue, oldValue) {\n switch (newValue) {\n case 1:\n loadPictures();\n break;\n }\n });\n \n function loadPictures() {\n protectedStorageSvc.findGalleryInfoByPaths([$scope.galleryDirectory], true)\n .$promise.then(function(data) {\n $scope.images.length = 0;\n $scope.images.push.apply($scope.images,data[0].images);\n }, function error() {\n \n });\n }\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n\n protectedStorageSvc.updateGalleryInfo(model, $scope.galleryDirectory)\n .$promise.then(function () {\n $scope.isSaving = false;\n $scope.$hide();\n if ($scope.onGalleryInfoSave) {\n $scope.onGalleryInfoSave(model);\n }\n }, function (data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n });\n }\n\n}]);\n","wbApp.directive('wbActivityCompensationTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_VAL_ACTIVITY_COMPENSATION_TYPE_ONE_FOR_ONE' },\n { id: 1, text: 'TXT_VAL_ACTIVITY_COMPENSATION_TYPE_TWO_FOR_ONE' },\n { id: 2, text: 'TXT_VAL_ACTIVITY_COMPENSATION_TYPE_DISABLED' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbActivityTariffsCombo', ['$timeout', '$translate', '$filter', 'activityTariffSvc',\n function ($timeout, $translate, $filter, activityTariffSvc) {\n function formatResult(tariff) {\n if (!tariff) { return; }\n\n // return tariff.name;\n\n return \"
\" +\n \"
\" + tariff.name + \"
\" +\n \"
\" + $filter('wbCurrencyFlt')(tariff.price) + \"
\" +\n \"
\";\n }\n\n function formatSelection(tariff) {\n return tariff.name + ' (' + $filter('wbCurrencyFlt')(tariff.price) + ')';\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n var models = activityTariffSvc.getAllNonDeletedAsync(false, scope.ngModel);\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_ACTIVITY_TARIFF'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: -1,\n id: function (model) { return model.activityTariffID; },\n data: models\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n if (models.$promise) {\n models.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n }\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbActivityWeekEditor', [\n function () {\n\n return {\n restrict: 'A',\n priority: 1,\n replace: true,\n scope: {\n ngModel: '=',\n inLineNote: '=',\n scheduleOnly: '=',\n foodSupport: '=',\n singlePeriod: '='\n },\n templateUrl: 'activities/directives/activity-week-editor.html',\n link: function (scope, elem, attrs) {\n\n scope.selectedDay = {};\n\n scope.onNoteClick = function (day) {\n scope.selectedDay = day;\n }\n }\n }\n }]);","wbApp.directive('wbActivityWeekSelector', [\n function () {\n\n function createScheduleModel(weeks, selection, restrictToSchedules) {\n\n function isSelected(selection, week) {\n for (var i = 0; i < selection.length; i++) {\n var s = selection[i];\n if (s.weekNo === week.weekNo &&\n moment(s.startDate).isSame(moment(week.startDate))) {\n return true;\n }\n }\n return false;\n }\n\n function Schedule(weeks, selection, restrictToSchedules) {\n this.rows = [];\n this.restrictToSchedules = restrictToSchedules;\n\n var newRow = [];\n this.rows.push(newRow);\n\n for (var idx = 0; idx < weeks.length; idx++) {\n if (idx % 6 === 0 && idx > 0) {\n newRow = [];\n this.rows.push(newRow);\n }\n newRow.push({\n selected: isSelected(selection, weeks[idx]) &&\n ((weeks[idx].schedules && weeks[idx].schedules.length > 0) || !this.restrictToSchedules),\n week: weeks[idx]\n });\n }\n }\n\n Object.defineProperty(Schedule.prototype, 'allSelected', {\n enumerable: true, configurable: true,\n get: function () {\n var selected = true;\n for (var r = 0; r < this.rows.length; r++) {\n var row = this.rows[r];\n for (var c = 0; c < row.length; c++) {\n var column = row[c];\n if ((column.week.schedules && column.week.schedules.length > 0) || !this.restrictToSchedules) {\n selected &= column.selected;\n }\n }\n }\n return selected !== 0;\n },\n set: function (val) {\n for (var r = 0; r < this.rows.length; r++) {\n var row = this.rows[r];\n for (var c = 0; c < row.length; c++) {\n var column = row[c];\n if ((column.week.schedules && column.week.schedules.length > 0) || !this.restrictToSchedules) {\n column.selected = val;\n }\n }\n }\n }\n });\n\n return new Schedule(weeks, selection, restrictToSchedules);\n }\n\n return {\n restrict: 'A',\n priority: 1,\n replace: true,\n scope: {\n ngModel: '=',\n selection: '=',\n restrictToSchedules: '=',\n ngChange: '&'\n },\n templateUrl: 'activities/directives/activity-week-selector.html',\n link: function (scope, elem, attrs) {\n\n scope.schedule = [];\n\n scope.$watch('ngModel', function (newValue, oldValue) {\n if (scope.selection) {\n scope.schedule = createScheduleModel(newValue, scope.selection, scope.restrictToSchedules);\n }\n });\n\n scope.$watch('schedule', function (model) {\n scope.selection.length = 0;\n for (var r = 0; r < model.rows.length; r++) {\n var row = model.rows[r];\n for (var c = 0; c < row.length; c++) {\n var column = row[c];\n if (column.selected) {\n scope.selection.push(column.week);\n }\n }\n }\n if (scope.ngChange()) {\n scope.ngChange()(scope.selection);\n }\n }, true);\n }\n }\n }]);","wbApp.directive('wbContractTemplateCombo', ['$timeout', '$translate', '$filter', 'contractTemplateSvc',\n function ($timeout, $translate, $filter, contractTemplateSvc) {\n \n function formatResult(model) {\n if (!model) { return; }\n \n return \"
\" +\n \"
\" + $filter('contractTemplateType')(model.contractTemplateType) + \"
\" +\n \"
\" + model.name + \"
\" +\n \"
\";\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: {\n ngModel: '=',\n showClearButton: '=',\n contractTemplateType: '=?'\n },\n link: function (scope, elm, attrs, controller) {\n\n function init() {\n models.$promise.then(function () {\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_CONTRACT_TEMPLATE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: !!scope.showClearButton,\n minimumResultsForSearch: 5,\n id: function (model) {\n return model.id;\n },\n data: models,\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n controller.$render();\n }, 1);\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n });\n }\n\n var models = contractTemplateSvc.getAllWithFilter(false, scope.contractTemplateType);\n models.$promise.then(function() {\n $timeout(function () {\n if (!scope.showClearButton && models.length === 1) {\n controller.$setViewValue(models[0].id);\n }\n });\n })\n\n scope.$on('refreshContractTemplateCombo', function (e, data) {\n models = contractTemplateSvc.getAllWithFilter(true, scope.contractTemplateType);\n models.$promise.then(function () {\n $timeout(function () {\n var selection = (!data || !data.id) \n ? elm.select2('val')\n : data.id;\n elm.select2('destroy');\n init();\n controller.$setViewValue(selection);\n });\n });\n });\n\n init(); \n }\n }\n }]);","wbApp.directive('wbContractTemplateTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(model) {\n if (!model) { return; }\n return $translate.instant(model.text);\n }\n\n function formatSelection(model) {\n return $translate.instant(model.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_LBL_CONTRACT_KINDERGARTEN' },\n { id: 1, text: 'TXT_LBL_DOCTORS_ASSESSMENT' },\n { id: 2, text: 'TXT_LBL_REGISTRATION_SHEET' },\n { id: 3, text: 'TXT_LBL_LABOR_MARKET_POSITION' },\n { id: 4, text: 'TXT_LBL_GDPR' },\n { id: 5, text: 'TXT_FROM_TYPE_KINDERGARTEN_ENROLLMENT' },\n { id: 6, text: 'TXT_FROM_TYPE_KINDERGARTEN_CUSTOM1' },\n { id: 7, text: 'TXT_FROM_TYPE_KINDERGARTEN_CUSTOM2' },\n { id: 8, text: 'TXT_ADMISSION_ACCEPTANCE' },\n { id: 9, text: 'TXT_ADMISSION_REJECTION' } \n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbCzMsMtListUniversalCombo', ['$timeout', '$translate', 'czMsMtRegistrySvc',\n function ($timeout, $translate, czMsMtRegistrySvc) {\n function format(item) {\n if (item.id) return item.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n scope: {\n ngModel: '=',\n listName: '=',\n multiSelect: '=' \n },\n link: function (scope, elm, attrs, controller) {\n \n let allLists = czMsMtRegistrySvc.lists();\n allLists.$promise.then(function() {\n $timeout(function () {\n $(elm).select2({\n placeholder: 'Nevyplněno',\n formatResult: format,\n formatSelection: format,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: 5,\n id: function (model) {\n return model.id;\n },\n data: allLists[scope.listName],\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n },\n multiple: scope.multiSelect || false,\n maximumSelectionSize: 5\n });\n\n controller.$render = function () {\n if (allLists.$promise) {\n allLists.$promise.then(function() {\n elm.select2('val', controller.$viewValue);\n });\n }\n };\n\n if (scope.multiSelect) {\n controller.$parsers.unshift(function (viewValue) {\n if (Array.isArray(viewValue)) {\n if (viewValue.length === 0) {\n return null;\n } \n return viewValue.join(\",\");\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return null;\n }\n return _.map(value.split(','), function (n) {\n return n + '';\n }).join(\",\");\n });\n }\n \n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n \n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n \n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n \n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n }, 1);\n });\n }\n }\n }]);","wbApp.directive('wbEndIssueTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_LBL_AT_DATE' },\n { id: 2, text: 'TXT_LBL_AFTER_NO_OF_ISSUES' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbReconciliationDataRangeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_LBL_FROM_LAST_RECONCILIATION' },\n { id: 2, text: 'TXT_LBL_FROM_DATE_TO_DATE' } \n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbRecurrenceUnitTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_LBL_DAY' },\n { id: 2, text: 'TXT_LBL_WEEK' },\n { id: 3, text: 'TXT_LBL_MONTH' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.filter('aggregateNotes', ['$translate', function ($translate) {\n return function (input) {\n if (input) {\n return input.f(\n $translate.instant('TXT_MONDAY_SHORT'),\n $translate.instant('TXT_TUESDAY_SHORT'),\n $translate.instant('TXT_WEDNESDAY_SHORT'),\n $translate.instant('TXT_THURSDAY_SHORT'),\n $translate.instant('TXT_FRIDAY_SHORT'),\n $translate.instant('TXT_SATURDAY_SHORT'),\n $translate.instant('TXT_SUNDAY_SHORT'));\n }\n return '';\n };\n}]);","wbApp.filter('contractScheduleShort', ['$translate', function ($translate) {\n\n /*\n \"contractSchedules\": [\n {\n \"id\": \"e845febe-9e2f-4dd3-93eb-6d055f81c476\",\n \"fromDate\": \"2022-01-01T00:00:00\",\n \"toDate\": \"2022-04-01T00:00:00\",\n \"monday\": {\n \"startTime\": 480,\n \"endTime\": 960,\n \"food\": true\n },\n \"tuesday\": {\n \"startTime\": 480,\n \"endTime\": 960,\n \"food\": true\n },\n \"wednesday\": {\n \"startTime\": 480,\n \"endTime\": 840,\n \"food\": true\n }\n }\n ] \n */\n \n return function (input) {\n if (input) {\n \n return _.reduce(input, function(result, schedule) {\n if (!!result) {\n result += \" | \";\n }\n result += moment(schedule.fromDate).format('DD.MM.YY') + ' - ' + moment(schedule.toDate).format('DD.MM.YY') + ' [';\n \n let days = [];\n if (!!schedule.monday) {\n days.push($translate.instant('TXT_MONDAY_SHORT'));\n }\n if (!!schedule.tuesday) {\n days.push($translate.instant('TXT_TUESDAY_SHORT'));\n }\n if (!!schedule.wednesday) {\n days.push($translate.instant('TXT_WEDNESDAY_SHORT'));\n }\n if (!!schedule.thursday) {\n days.push($translate.instant('TXT_THURSDAY_SHORT'));\n }\n if (!!schedule.friday) {\n days.push($translate.instant('TXT_FRIDAY_SHORT'));\n }\n if (!!schedule.saturday) {\n days.push($translate.instant('TXT_SATURDAY_SHORT'));\n }\n if (!!schedule.sunday) {\n days.push($translate.instant('TXT_SUNDAY_SHORT'));\n }\n \n return result + days.join(',') + ']';\n }, '');\n }\n };\n}]);","wbApp.filter('contractTemplateType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_LBL_CONTRACT_KINDERGARTEN');\n case 1:\n return $translate.instant('TXT_LBL_DOCTORS_ASSESSMENT');\n case 2:\n return $translate.instant('TXT_LBL_REGISTRATION_SHEET');\n case 3:\n return $translate.instant('TXT_LBL_LABOR_MARKET_POSITION');\n case 4:\n return $translate.instant('TXT_LBL_GDPR');\n case 5:\n return $translate.instant('TXT_FROM_TYPE_KINDERGARTEN_ENROLLMENT');\n case 6:\n return $translate.instant('TXT_FROM_TYPE_KINDERGARTEN_CUSTOM1');\n case 7:\n return $translate.instant('TXT_FROM_TYPE_KINDERGARTEN_CUSTOM2');\n case 8:\n return $translate.instant('TXT_ADMISSION_ACCEPTANCE');\n case 9:\n return $translate.instant('TXT_ADMISSION_REJECTION');\n default:\n return '';\n }\n };\n}]);","wbApp.filter('datePartOccupied', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 'am':\n return $translate.instant('TXT_DATE_PART_AM');\n case 'pm':\n return $translate.instant('TXT_DATE_PART_PM');\n case 'both':\n return $translate.instant('TXT_DATE_PART_FULL_DAY');\n case 'indeterminate':\n return $translate.instant('TXT_DATE_PART_INDETERMINATE');\n }\n return '';\n };\n}]);","wbApp.filter('wbCzMsMtListUniversalFlt', ['$translate', 'czMsMtRegistrySvc', function ($translate, czMsMtRegistrySvc) {\n let allLists = czMsMtRegistrySvc.lists();\n\n function asyncResult(input, listName) {\n if (allLists.$resolved) {\n let model = _.find(allLists[listName], { id: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n}]);","wbApp.filter('wbRecurrenceUnitTypeFlt', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 1:\n return $translate.instant('TXT_LBL_DAY');\n case 2:\n return $translate.instant('TXT_LBL_WEEK');\n case 3:\n return $translate.instant('TXT_LBL_MONTH');\n }\n return '';\n };\n}]);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region InvoiceBase - Ctor \n ns.InvoiceBase = function InvoiceBase(isReccuring) {\n this.isReccuring = isReccuring;\n }\n // #endregion\n\n // #region InvoiceBase - Methods\n\n ns.InvoiceBase.prototype.resetFields = function () {\n this.invoiceLineKindergartenCustomUnitPrice = 0;\n this.invoiceLineKindergartenOneOffUnitPrice = 0;\n\n if (this._invoiceLineKindergartenLunchQty) {\n delete (this._invoiceLineKindergartenLunchQty);\n }\n\n if (this._invoiceLineKindergartenSnackQty) {\n delete (this._invoiceLineKindergartenSnackQty);\n }\n\n if (this._invoiceLineKindergartenLatePickupQty) {\n delete (this._invoiceLineKindergartenLatePickupQty);\n }\n }\n\n ns.InvoiceBase.prototype.initLocalization = function ($translate) {\n this.invoiceLineKindergartenFeeName = $translate.instant('TXT_LBL_ACTIVITY_FEE');\n this.invoiceLineKindergartenFeeReccuringName = $translate.instant('TXT_LBL_ACTIVITY_FEE');\n this.invoiceLineKindergartenOneOffName = $translate.instant('TXT_LBL_ACTIVITY_ONE_OFF_FEE');\n this.invoiceLineKindergartenLunchName = $translate.instant('TXT_LBL_ACTIVITY_LUNCH');\n this.invoiceLineKindergartenSnackName = $translate.instant('TXT_LBL_ACTIVITY_SNACK');\n this.invoiceLineKindergartenLatePickupName = $translate.instant('TXT_LBL_ACTIVITY_LATE_PICKUP');\n this.invoiceLineKindergartenCustomName = $translate.instant('TXT_LBL_ACTIVITY_OTHER');\n }\n\n ns.InvoiceBase.prototype.initDataByInvoiceDTO = function (invoiceDTO) {\n if (invoiceDTO) {\n this.invoiceID = invoiceDTO.invoiceID;\n this.invoiceDate = invoiceDTO.invoiceDate;\n this.operatorID = invoiceDTO.customerOperatorID;\n this.accountingBookID = invoiceDTO.accountingBookID;\n this.taxDate = invoiceDTO.taxDate;\n this.isVATPayer = invoiceDTO.isVATPayer;\n\n if (invoiceDTO.lineItems) {\n for (var i = 0; i < invoiceDTO.lineItems.length; i++) {\n var li = invoiceDTO.lineItems[i];\n switch (li.invoiceLineType) {\n case 'ActivitySnack':\n this.invoiceLineKindergartenSnackName = li.name;\n this.invoiceLineKindergartenSnackQty = li.quantity;\n this.invoiceLineKindergartenSnackUnitPrice = li.unitPrice || 0;\n break;\n case 'ActivityLunch':\n this.invoiceLineKindergartenLunchName = li.name;\n this.invoiceLineKindergartenLunchQty = li.quantity;\n this.invoiceLineKindergartenLunchUnitPrice = li.unitPrice || 0;\n break;\n case 'ActivityLatePickup':\n this.invoiceLineKindergartenLatePickupName = li.name;\n this.invoiceLineKindergartenLatePickupQty = li.quantity;\n this.invoiceLineKindergartenLatePickupUnitPrice = li.unitPrice || 0;\n break;\n case 'ActivityFee':\n this.invoiceLineKindergartenFeeName = li.name;\n this.invoiceLineKindergartenFeeQty = (li.quantity == null)\n ? 1\n : li.quantity;\n this.invoiceLineKindergartenFeeUnitPrice = li.unitPrice || li.price;\n break;\n case 'ActivityFeeReccuring':\n this.invoiceLineKindergartenFeeReccuringName = li.name;\n this.invoiceLineKindergartenFeeReccuringQty = (li.quantity == null)\n ? 1\n : li.quantity;\n this.invoiceLineKindergartenFeeReccuringUnitPrice = li.unitPrice || li.price;\n break;\n case 'ActivityOneOffFee':\n this.invoiceLineKindergartenOneOffName = li.name;\n this.invoiceLineKindergartenOneOffQty = (li.quantity == null)\n ? ((!li.price) ? 0 : 1)\n : li.quantity;\n this.invoiceLineKindergartenOneOffUnitPrice = li.unitPrice || li.price;\n break;\n case 'ManualAdjustment':\n this.invoiceLineKindergartenCustomName = li.name;\n this.invoiceLineKindergartenCustomQty = (li.quantity == null)\n ? ((!li.price) ? 0 : 1)\n : li.quantity;\n this.invoiceLineKindergartenCustomUnitPrice = li.unitPrice || li.price;\n break;\n default:\n alert('Unknown invoice line type: ' + li.invoiceLineType);\n break;\n }\n }\n }\n }\n this.invoiceLineKindergartenSnackUnitPrice = this.invoiceLineKindergartenSnackUnitPrice || 0;\n if (!!this.invoiceLineKindergartenSnackUnitPrice) {\n this.invoiceLineKindergartenSnackQty = this.invoiceLineKindergartenSnackQty || 1;\n }\n\n this.invoiceLineKindergartenLunchUnitPrice = this.invoiceLineKindergartenLunchUnitPrice || 0;\n if (!!this.invoiceLineKindergartenLunchUnitPrice) {\n this.invoiceLineKindergartenLunchQty = this.invoiceLineKindergartenLunchQty || 1;\n }\n\n this.invoiceLineKindergartenLatePickupUnitPrice = this.invoiceLineKindergartenLatePickupUnitPrice || 0;\n if (!!this.invoiceLineKindergartenLatePickupUnitPrice) {\n this.invoiceLineKindergartenLatePickupQty = this.invoiceLineKindergartenLatePickupQty || 1;\n }\n\n this.invoiceLineKindergartenFeeUnitPrice = this.invoiceLineKindergartenFeeUnitPrice || 0;\n this.invoiceLineKindergartenFeeQty = this.invoiceLineKindergartenFeeQty || 0;\n\n this.invoiceLineKindergartenFeeReccuringUnitPrice = this.invoiceLineKindergartenFeeReccuringUnitPrice || 0;\n this.invoiceLineKindergartenFeeReccuringQty = this.invoiceLineKindergartenFeeReccuringQty || 0;\n\n this.invoiceLineKindergartenOneOffUnitPrice = this.invoiceLineKindergartenOneOffUnitPrice || 0;\n this.invoiceLineKindergartenOneOffQty = this.invoiceLineKindergartenOneOffQty || 0;\n\n this.invoiceLineKindergartenCustomUnitPrice = this.invoiceLineKindergartenCustomUnitPrice || 0;\n this.invoiceLineKindergartenCustomQty = this.invoiceLineKindergartenCustomQty || 0;\n\n\n }\n\n ns.InvoiceBase.prototype.getInvoiceDTO = function ($translate) {\n var res = { lineItems: [] } ;\n\n res.invoiceID = this.invoiceID;\n res.total = this.invoiceSumPrice;\n res.customerStudentID = this.studentID;\n res.customerOperatorID = this.operatorID;\n res.accountingBookID = this.accountingBookID;\n res.invoiceDate = this.invoiceDate || new Date();\n res.taxDate = this.taxDate;\n\n if (this.invoiceLineKindergartenSnackPrice) {\n res.lineItems.push({\n invoiceLineType: 'ActivitySnack',\n name: this.invoiceLineKindergartenSnackName,\n price: this.invoiceLineKindergartenSnackPrice,\n quantity: this.invoiceLineKindergartenSnackQty,\n unitPrice: this.invoiceLineKindergartenSnackUnitPrice\n });\n }\n\n if (this.invoiceLineKindergartenLunchPrice) {\n res.lineItems.push({\n invoiceLineType: 'ActivityLunch',\n name: this.invoiceLineKindergartenLunchName,\n price: this.invoiceLineKindergartenLunchPrice,\n quantity: this.invoiceLineKindergartenLunchQty,\n unitPrice: this.invoiceLineKindergartenLunchUnitPrice\n });\n }\n\n if (this.invoiceLineKindergartenLatePickupPrice) {\n res.lineItems.push({\n invoiceLineType: 'ActivityLatePickup',\n name: this.invoiceLineKindergartenLatePickupName,\n price: this.invoiceLineKindergartenLatePickupPrice,\n quantity: this.invoiceLineKindergartenLatePickupQty,\n unitPrice: this.invoiceLineKindergartenLatePickupUnitPrice\n });\n }\n\n // Always add activity fee line, even if 0\n if (!this.isReccuring) {\n res.lineItems.push({\n invoiceLineType: 'ActivityFee',\n name: this.invoiceLineKindergartenFeeName || $translate.instant('TXT_LBL_ACTIVITY_FEE'),\n price: this.invoiceLineKindergartenFeePrice || 0,\n quantity: this.invoiceLineKindergartenFeeQty || 0,\n unitPrice: this.invoiceLineKindergartenFeeUnitPrice || 0\n });\n } else {\n res.lineItems.push({\n invoiceLineType: 'ActivityFeeReccuring',\n name: this.invoiceLineKindergartenFeeReccuringName || $translate.instant('TXT_LBL_ACTIVITY_FEE'),\n price: this.invoiceLineKindergartenFeeReccuringPrice || 0,\n quantity: this.invoiceLineKindergartenFeeReccuringQty || 0,\n unitPrice: this.invoiceLineKindergartenFeeReccuringUnitPrice || 0\n });\n }\n\n if (this.invoiceLineKindergartenOneOffPrice) {\n res.lineItems.push({\n invoiceLineType: 'ActivityOneOffFee',\n name: this.invoiceLineKindergartenOneOffName,\n price: this.invoiceLineKindergartenOneOffPrice || 0,\n quantity: this.invoiceLineKindergartenOneOffQty || 0,\n unitPrice: this.invoiceLineKindergartenOneOffUnitPrice || 0\n });\n }\n\n if (this.invoiceLineKindergartenCustomPrice) {\n res.lineItems.push({\n invoiceLineType: 'ManualAdjustment',\n name: this.invoiceLineKindergartenCustomName,\n price: this.invoiceLineKindergartenCustomPrice || 0,\n quantity: this.invoiceLineKindergartenCustomQty || 0,\n unitPrice: this.invoiceLineKindergartenCustomUnitPrice || 0\n });\n }\n\n return res;\n }\n\n // #endregion\n\n // #region InvoiceBase - Properties\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenFeePrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenFeeQty * this.invoiceLineKindergartenFeeUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenFeeReccuringPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenFeeReccuringQty * this.invoiceLineKindergartenFeeReccuringUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenOneOffPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenOneOffQty * this.invoiceLineKindergartenOneOffUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenCustomPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenCustomQty * this.invoiceLineKindergartenCustomUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenLunchQty', {\n enumerable: true, configurable: true,\n get: function () {\n if (this._invoiceLineKindergartenLunchQty === undefined) {\n return this.noOfLunches;\n } else {\n return this._invoiceLineKindergartenLunchQty;\n }\n },\n set: function (value) {\n this._invoiceLineKindergartenLunchQty = value;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenLunchPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenLunchQty * this.invoiceLineKindergartenLunchUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenSnackQty', {\n enumerable: true, configurable: true,\n get: function () {\n if (this._invoiceLineKindergartenSnackQty === undefined) {\n return this.noFirstSnacks + this.noSecondSnacks;\n } else {\n return this._invoiceLineKindergartenSnackQty;\n }\n },\n set: function (value) {\n this._invoiceLineKindergartenSnackQty = value;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenSnackPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenSnackQty * this.invoiceLineKindergartenSnackUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenLatePickupQty', {\n enumerable: true, configurable: true,\n get: function () {\n if (this._invoiceLineKindergartenLatePickupQty === undefined) {\n return this.sumLatePickupHours;\n } else {\n return this._invoiceLineKindergartenLatePickupQty;\n }\n },\n set: function (value) {\n this._invoiceLineKindergartenLatePickupQty = value;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceLineKindergartenLatePickupPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var notRounded = this.invoiceLineKindergartenLatePickupQty * this.invoiceLineKindergartenLatePickupUnitPrice;\n return Math.round(notRounded * 100) / 100;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'invoiceSumPrice', {\n enumerable: true, configurable: true,\n get: function () {\n var res = Number(this.invoiceLineKindergartenSnackPrice || 0) +\n Number(this.invoiceLineKindergartenLunchPrice || 0) +\n Number(this.invoiceLineKindergartenOneOffPrice || 0) +\n Number(this.invoiceLineKindergartenFeePrice || 0) +\n Number(this.invoiceLineKindergartenFeeReccuringPrice || 0) +\n Number(this.invoiceLineKindergartenCustomPrice || 0) +\n Number(this.invoiceLineKindergartenLatePickupPrice || 0);\n\n return res;\n }\n });\n\n Object.defineProperty(ns.InvoiceBase.prototype, 'isInvoiceEmpty', {\n enumerable: true, configurable: true,\n get: function () {\n\n return !(this.invoiceLineKindergartenSnackPrice || 0) &&\n !(this.invoiceLineKindergartenLunchPrice || 0) &&\n !(this.invoiceLineKindergartenOneOffPrice || 0) &&\n !(this.invoiceLineKindergartenFeePrice || 0) &&\n !(this.invoiceLineKindergartenFeeReccuringPrice || 0) &&\n !(this.invoiceLineKindergartenCustomPrice || 0) &&\n !(this.invoiceLineKindergartenLatePickupPrice || 0);\n }\n });\n\n // #endregion\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region ScheduleDayBase - Ctor \n ns.ScheduleDayBase = function ScheduleDetail() {\n }\n // #endregion\n\n // #region ScheduleDayBase - Methods\n\n ns.ScheduleDayBase.prototype.normalizeDate = function (mvalue) { \n return new Date(1970, 0, 1, mvalue.hours(), mvalue.minutes());\n }\n\n ns.ScheduleDayBase.prototype.getUnboundedMinTimeValue = function () {\n return moment(new Date(1970, 0, 1, 0));\n }\n\n ns.ScheduleDayBase.prototype.getUnboundedMaxTimeValue = function () {\n // Date(year, month, day, hour, minute, second, millisecond)\n return moment(new Date(2200, 0, 1, 23, 59, 59, 99));\n }\n \n ns.ScheduleDayBase.prototype.getMinTimeValue = function (schedules, propertyName, nullIfNoValue) {\n var minDate = this.getUnboundedMinTimeValue();\n var valueSet = false;\n\n if (schedules) {\n for (var d = 0; d < schedules.length; d++) {\n var prop = schedules[d][propertyName];\n if (prop) {\n var date = moment(prop);\n var minutes = date.hour() * 60 + date.minute();\n var minMinutes = minDate.hour() * 60 + minDate.minute();\n\n if (minutes <= minMinutes || !valueSet) {\n minDate = date;\n valueSet = true;\n }\n }\n }\n }\n\n if (!valueSet && nullIfNoValue) {\n return null;\n }\n\n return this.normalizeDate(minDate);\n }\n\n ns.ScheduleDayBase.prototype.getMaxTimeValue = function (schedules, propertyName, nullIfNoValue) {\n var maxDate = this.getUnboundedMaxTimeValue();\n var valueSet = false;\n\n if (schedules) {\n for (var d = 0; d < schedules.length; d++) {\n var prop = schedules[d][propertyName];\n if (prop) {\n var date = moment(prop);\n var minutes = date.hour() * 60 + date.minute();\n var maxMinutes = maxDate.hour() * 60 + maxDate.minute();\n\n if (minutes >= maxMinutes || !valueSet) {\n maxDate = date;\n valueSet = true;\n }\n }\n }\n }\n\n if (!valueSet && nullIfNoValue) {\n return null;\n }\n\n return this.normalizeDate(maxDate);\n }\n\n ns.ScheduleDayBase.prototype.getSchedulesByDay = function (sch, dayOfWeek) {\n var all = [];\n\n if (sch) {\n for (var w = 0; w < sch.length; w++) {\n var week = sch[w];\n\n // TODO: call getReservationsByDay\n for (var s = 0; s < week.schedules.length; s++) {\n var schedule = week.schedules[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n var scheduleDayOfWeek = moment(dateIndicia).isoWeekday();\n\n if (scheduleDayOfWeek === dayOfWeek) {\n all.push(schedule);\n }\n }\n }\n }\n }\n\n return all;\n }\n\n ns.ScheduleDayBase.prototype.isTimeIndeterminate2 = function (daySchedules, propertyName, value, min) {\n if (!daySchedules || !daySchedules.length || !value) {\n return false;\n }\n\n var valueDate = moment(value);\n var valueMin = valueDate.hours() * 60 + valueDate.minutes();\n\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n var scheduleValue = daySchedule[propertyName];\n if (!scheduleValue) {\n return true;\n }\n\n var schDate = moment(scheduleValue);\n var schMin = schDate.hours() * 60 + schDate.minutes();\n\n if (min) {\n if (schMin > valueMin) {\n return true;\n }\n } else {\n if (schMin < valueMin) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n ns.ScheduleDayBase.prototype.isBoolIndeterminate2 = function (daySchedules, propertyName, value) {\n if (!daySchedules || !daySchedules.length || value === undefined || value === null) {\n return false;\n }\n\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n var scheduleValue = daySchedule[propertyName];\n if (value && !scheduleValue) {\n return true;\n }\n }\n\n return false;\n }\n\n\n\n // #endregion\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region ScheduleResourceBase - Ctor\n ns.ScheduleResourceBase = function ScheduleResourceBase() {\n this.singlePeriodProgramOnly = false;\n\n };\n // #endregion\n\n // #region ScheduleResourceBase - Methods\n ns.ScheduleResourceBase.prototype.initialize = function (selectedSchedules) {\n this.schedules = [];\n this.selectedSchedules = selectedSchedules;\n }\n\n ns.ScheduleResourceBase.prototype.getSchedulesByDayImpl = function (sch, dayOfWeek) {\n var all = [];\n\n if (sch) {\n for (var s = 0; s < sch.length; s++) {\n var schedule = sch[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n var scheduleDayOfWeek = moment(dateIndicia).isoWeekday();\n\n if (scheduleDayOfWeek === dayOfWeek) {\n all.push(schedule);\n }\n }\n }\n }\n\n return all;\n };\n\n ns.ScheduleResourceBase.prototype.getSchedulesByDay = function (sch, dayOfWeek) {\n return this.getSchedulesByDayImpl(sch, dayOfWeek);\n }\n\n ns.ScheduleResourceBase.prototype.timeCompare = function (vr, s, propertyName) {\n if (typeof vr === \"undefined\") {\n return s[propertyName];\n } else {\n if (s[propertyName] && vr) {\n var p1 = moment(s[propertyName]);\n var p2 = moment(vr);\n\n if (p1.hour() !== p2.hour() ||\n p1.minute() !== p2.minute()) {\n return \"indeterminate\";\n } else {\n return vr;\n }\n } else {\n return vr;\n }\n }\n }\n\n ns.ScheduleResourceBase.prototype.getScheduleIndiciesByDay = function (dayOfWeek) {\n var sch = this.getSchedulesByDay(this.schedules, dayOfWeek);\n var selectedSch = this.getSchedulesByDay(this.selectedSchedules, dayOfWeek);\n\n if (sch.length === 0) {\n return '';\n }\n\n if (sch.length !== selectedSch.length) {\n return \"indeterminate\";\n }\n\n var fpsd, spsd;\n\n angular.forEach(sch, function (s, idx) {\n fpsd = this.timeCompare(fpsd, s, 'firstPeriodStartDate');\n spsd = this.timeCompare(spsd, s, 'secondPeriodStartDate');\n }, this);\n\n if (fpsd && fpsd === \"indeterminate\") {\n return \"indeterminate\";\n }\n\n if (spsd && spsd === \"indeterminate\") {\n return \"indeterminate\";\n }\n\n if (fpsd && spsd) { return 'both'; }\n if (fpsd && this.singlePeriodProgramOnly) { return 'both'; }\n if (fpsd) { return 'am'; }\n if (spsd) { return 'pm'; }\n\n return '';\n }\n // #endregion\n\n // #region ScheduleResourceBase - Properties\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'monday', {\n enumerable: true, configurable: true,\n get: function () {\n return this.getScheduleIndiciesByDay(1);\n }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'tuesday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(2); }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'wednesday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(3); }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'thursday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(4); }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'friday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(5); }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'saturday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(6); }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'sunday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(7); }\n });\n\n Object.defineProperty(ns.ScheduleResourceBase.prototype, 'notes', {\n enumerable: true, configurable: true,\n get: function () {\n\n var days = new Array(7);\n\n if (this.schedules) {\n for (var s = 0; s < this.schedules.length; s++) {\n var schedule = this.schedules[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n days[moment(dateIndicia).isoWeekday() - 1] = schedule;\n }\n }\n }\n\n var result = '';\n\n for (var d = 0; d < days.length; d++) {\n var day = days[d];\n if (day && !String.prototype.isNullOrWhitespace(day.notes)) {\n if (String.prototype.isNullOrWhitespace(result)) {\n result += '{' + d + '}: ' + day.notes;\n } else {\n result += ', {' + d + '}: ' + day.notes;\n }\n }\n }\n\n return result;\n }\n });\n\n // #endregion\n\n\n})(webooker_acivity_models);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n var daysEnum = ['TXT_MONDAY', 'TXT_TUESDAY', 'TXT_WEDNESDAY', 'TXT_THURSDAY', 'TXT_FRIDAY', 'TXT_SATURDAY', 'TXT_SUNDAY'];\n\n // #region ScheduleResourceDetailBase - Ctor\n ns.ScheduleResourceDetailBase = function ScheduleResourceDetailBase() {\n }\n // #endregion\n\n // #region ScheduleResourceDetailBase - Methods\n ns.ScheduleResourceDetailBase.prototype.initialize = function (reservations, schedules, resourceID, activityID) {\n //this.reservations = reservations;\n this.schedules = schedules;\n\n this.days = [];\n for (var day = 1; day <= 7; day++) {\n this.days.push(this.createDayModel(reservations, schedules, day, daysEnum[day - 1], resourceID, activityID));\n }\n }\n\n ns.ScheduleResourceDetailBase.prototype.createDayModel = function (reservations, schedules, dayOfWeek, dayName, resourceID, activityID) {\n return null; // new ns.scheduleResourceDetailDayBase(reservations, schedules, dayOfWeek, dayName, resourceID, activityID);\n }\n\n ns.ScheduleResourceDetailBase.prototype.onDataSourceChange = function () {\n for (var d = 0; d < this.days.length; d++) {\n this.days[d].onDataSourceChange.call(this.days[d]);\n }\n }\n\n ns.ScheduleResourceDetailBase.prototype.applyChanges = function () {\n for (var d = 0; d < this.days.length; d++) {\n this.days[d].applyChanges.call(this.days[d]);\n }\n }\n // #endregion\n\n // #region ScheduleResourceDetailBase - Properties\n Object.defineProperty(ns.ScheduleResourceDetailBase.prototype, \"notScheduled\", {\n get: function () {\n var notScheduled = true;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n notScheduled &= d.notScheduled;\n }\n return notScheduled\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailBase.prototype, \"notScheduledAM\", {\n get: function () {\n var notScheduled = true;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n notScheduled &= d.notScheduledAM;\n }\n return notScheduled\n },\n enumerable: true,\n configurable: true\n });\n\n\n Object.defineProperty(ns.ScheduleResourceDetailBase.prototype, \"notScheduledPM\", {\n get: function () {\n var notScheduled = true;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n notScheduled &= d.notScheduledPM;\n }\n return notScheduled\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailBase.prototype, \"active\", {\n get: function () {\n var a = true;\n var cnt = 0;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n if (!d.notScheduled) {\n a &= d.active;\n cnt++;\n }\n }\n return a && cnt > 0;\n },\n set: function (value) {\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n if (!d.notScheduled) {\n d.active = value;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailBase.prototype, \"amActive\", {\n get: function () {\n var a = true;\n var cnt = 0;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n if (!d.notScheduledAM) {\n a &= d.amActive;\n cnt++;\n }\n }\n return a && cnt > 0;\n },\n set: function (value) {\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n if (!d.notScheduledAM) {\n d.amActive = value;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailBase.prototype, \"pmActive\", {\n get: function () {\n var a = true;\n var cnt = 0;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n if (!d.notScheduledPM) {\n a &= d.pmActive;\n cnt++;\n }\n }\n return a && cnt > 0;\n },\n set: function (value) {\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n if (!d.notScheduledPM) {\n d.pmActive = value;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n // #endregion\n\n}(webooker_acivity_models));\n","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region ScheduleResourceDetailDayBase - Ctor\n ns.ScheduleResourceDetailDayBase = function ScheduleResourceDetailDayBase() {\n\n }\n // #endregion\n\n // #region ScheduleResourceDetailDayBase - Inheritance\n\n ns.ScheduleResourceDetailDayBase.prototype = new ns.ScheduleDayBase();\n ns.ScheduleResourceDetailDayBase.prototype.constructor = ns.ScheduleResourceDetailDayBase;\n ns.ScheduleResourceDetailDayBase.prototype.parent = ns.ScheduleDayBase.prototype;\n\n // #endregion\n\n // #region ScheduleResourceDetailDayBase - Methods\n ns.ScheduleResourceDetailDayBase.prototype.initialize = function (reservations, schedules, dayOfWeek, dayName, resourceID, activityID) {\n this.reservations = reservations;\n this.schedules = schedules;\n this.dayOfWeek = dayOfWeek;\n this.day = dayName;\n this.resourceID = resourceID;\n this.activityID = activityID;\n\n this.onDataSourceChange();\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getTimeValue = function (daySchedules, dayReservations, propertyName, min) {\n if (!daySchedules || !daySchedules.length || !dayReservations || !dayReservations.length) {\n return null;\n }\n\n var relevantReservations = this.getRelevantReservations(daySchedules, dayReservations);\n if (min) {\n return this.getMinTimeValue(relevantReservations, propertyName, true);\n } else {\n return this.getMaxTimeValue(relevantReservations, propertyName, true);\n }\n\n return null;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getRelevantReservations = function (daySchedules, dayReservations) {\n if (!daySchedules || !daySchedules.length || !dayReservations || !dayReservations.length) {\n return [];\n }\n\n var ret = [];\n\n for (var s = 0; s < daySchedules.length; s++) {\n var activityScheduleID = daySchedules[s].activityScheduleID;\n for (var r = 0; r < dayReservations.length; r++) {\n var reservation = dayReservations[r];\n if (reservation.activityScheduleID === activityScheduleID) {\n ret.push(reservation);\n }\n }\n }\n\n return ret;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getReservationsByDay = function (sch, dayOfWeek) {\n var all = [];\n\n if (sch) {\n for (var s = 0; s < sch.length; s++) {\n var schedule = sch[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n var scheduleDayOfWeek = moment(dateIndicia).isoWeekday();\n\n if (scheduleDayOfWeek === dayOfWeek) {\n all.push(schedule);\n }\n }\n }\n }\n\n return all;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.notScheduledProperty = function (daySchedules, propertyName) {\n if (!daySchedules || !daySchedules.length) {\n return true;\n }\n\n for (var d = 0; d < daySchedules.length; d++) {\n var schedule = daySchedules[d];\n if (schedule[propertyName]) {\n return false;\n }\n }\n\n return true;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getRelevantReservations = function (daySchedules, dayReservations) {\n if (!daySchedules || !daySchedules.length || !dayReservations || !dayReservations.length) {\n return [];\n }\n\n var ret = [];\n\n for (var s = 0; s < daySchedules.length; s++) {\n var activityScheduleID = daySchedules[s].activityScheduleID;\n for (var r = 0; r < dayReservations.length; r++) {\n var reservation = dayReservations[r];\n if (reservation.activityScheduleID === activityScheduleID) {\n ret.push(reservation);\n }\n }\n }\n\n return ret;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getReservationByScheduleID = function (reservations, activityScheduleID) {\n if (!reservations || !reservations.length) {\n return null;\n }\n\n for (var r = 0; r < reservations.length; r++) {\n var res = reservations[r];\n if (res.activityScheduleID === activityScheduleID) {\n return res;\n }\n }\n\n return null;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.normalizeTimeValue = function (scheduleValue, value, min) {\n var normalizedValue = null;\n\n if (value) {\n var scheduleDate = moment(scheduleValue);\n var valueDate = moment(value);\n var scheduleMinutes = scheduleDate.hour() * 60 + scheduleDate.minute();\n var valueMinutes = valueDate.hour() * 60 + valueDate.minute();\n\n if (min) {\n if (scheduleMinutes <= valueMinutes) {\n normalizedValue = new Date(scheduleDate.year(), scheduleDate.month(), scheduleDate.date(), valueDate.hour(), valueDate.minute(), 0 , 0);\n } else {\n normalizedValue = scheduleValue;\n }\n } else {\n if (scheduleMinutes <= valueMinutes) {\n normalizedValue = scheduleValue;\n } else {\n normalizedValue = new Date(scheduleDate.year(), scheduleDate.month(), scheduleDate.date(), valueDate.hour(), valueDate.minute(), 0, 0);\n }\n }\n }\n\n return normalizedValue;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.isTimeIndeterminate = function (daySchedules, dayReservations, propertyName) {\n\n if (!daySchedules ||\n !daySchedules.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n var rDate = null;\n var rMin = null;\n\n for (var s = 0; s < daySchedules.length; s++) {\n var schedule = daySchedules[s];\n if (schedule[propertyName]) {\n \n var res = this.getReservationByScheduleID(dayReservations, schedule.activityScheduleID);\n if (!res) {\n if (!first && val) {\n return true;\n }\n first = false;\n } else {\n var rvalue = res[propertyName];\n if (first) {\n if (rvalue) {\n rDate = moment(rvalue);\n rMin = rDate.hours() * 60 + rDate.minutes();\n val = rMin;\n }\n first = false;\n } else {\n if (rvalue) {\n rDate = moment(rvalue);\n rMin = rDate.hours() * 60 + rDate.minutes();\n if (val !== rMin) {\n return true;\n }\n } else {\n if (val === null) {\n return true;\n }\n }\n }\n }\n }\n }\n\n return false;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getBoolValue = function (daySchedules, dayReservations, propertyName) {\n if (!daySchedules || !daySchedules.length || !dayReservations || !dayReservations.length) {\n return null;\n }\n\n var relevantReservations = this.getRelevantReservations(daySchedules, dayReservations);\n\n for (var d = 0; d < relevantReservations.length; d++) {\n var prop = relevantReservations[d][propertyName];\n if (prop) {\n return true;\n }\n }\n\n return false;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getStringValue = function (daySchedules, dayReservations, propertyName) {\n if (!daySchedules || !daySchedules.length || !dayReservations || !dayReservations.length) {\n return null;\n }\n\n var relevantReservations = this.getRelevantReservations(daySchedules, dayReservations);\n\n var val = null;\n var first = true;\n\n for (var d = 0; d < relevantReservations.length; d++) {\n var prop = relevantReservations[d][propertyName];\n if (first) {\n first = false;\n val = prop;\n } else {\n if (val !== prop) {\n return null;\n }\n }\n }\n\n return val;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.isBoolIndeterminate = function (daySchedules, dayReservations, propertyName) {\n if (!daySchedules ||\n !daySchedules.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n\n for (var s = 0; s < daySchedules.length; s++) {\n var schedule = daySchedules[s];\n if (schedule[propertyName]) {\n\n var res = this.getReservationByScheduleID(dayReservations, schedule.activityScheduleID);\n if (!res) {\n if (!first && val) {\n return true;\n }\n first = false;\n } else {\n var rvalue = res[propertyName];\n if (first) {\n val = rvalue;\n first = false;\n } else {\n if (rvalue !== val) {\n return true;\n }\n }\n }\n\n }\n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.isStringIndeterminate = function (daySchedules, dayReservations, propertyName) {\n if (!daySchedules ||\n !daySchedules.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n\n for (var s = 0; s < daySchedules.length; s++) {\n var schedule = daySchedules[s];\n\n var res = this.getReservationByScheduleID(dayReservations, schedule.activityScheduleID);\n if (!res) {\n if (!first && val) {\n return true;\n }\n first = false;\n } else {\n var rvalue = res[propertyName];\n if (first) {\n val = rvalue;\n first = false;\n } else {\n if (!String.prototype.isNullOrWhitespace(rvalue) && !String.prototype.isNullOrWhitespace(val) && (rvalue !== val)) {\n return true;\n }\n }\n }\n }\n return false;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getAMNotScheduled = function (daySchedules) {\n if (!daySchedules || !daySchedules.length) {\n return true;\n }\n\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n \n if (!daySchedule['firstPeriodStartDate'] || \n !daySchedule['firstPeriodEndDate']) {\n return true;\n }\n }\n\n return false;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getPMNotScheduled = function (daySchedules) {\n if (!daySchedules || !daySchedules.length) {\n return true;\n }\n\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n\n if (!daySchedule['secondPeriodStartDate'] ||\n !daySchedule['secondPeriodEndDate']) {\n return true;\n }\n }\n\n return false;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.onDataSourceChange = function () {\n this.calculateProperties(this.schedules, this.reservations, this.dayOfWeek);\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.createReservation = function (activityScheduleID) {\n return null;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.applyChangesToTimeProperty = function (daySchedules, reservations, propertyName, value, min) {\n\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n var scheduleValue = daySchedule[propertyName];\n if (!scheduleValue) {\n continue;\n }\n\n var normalizedValue = this.normalizeTimeValue(scheduleValue, value, min);\n\n var reservation = this.getReservationByScheduleID(reservations, daySchedule.activityScheduleID);\n if (!reservation) {\n if (normalizedValue) {\n \n reservation = this.createReservation(daySchedule.activityScheduleID);\n reservation[propertyName] = normalizedValue;\n reservations.push(reservation);\n }\n } else {\n reservation[propertyName] = normalizedValue;\n }\n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.applyChangesToBoolProperty = function (daySchedules, reservations, propertyName, value) {\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n var scheduleValue = daySchedule[propertyName];\n\n var reservation = this.getReservationByScheduleID(reservations, daySchedule.activityScheduleID);\n if (reservation) {\n reservation[propertyName] = value && scheduleValue;\n } \n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.applyChangesToStringProperty = function (daySchedules, reservations, propertyName, value) {\n for (var s = 0; s < daySchedules.length; s++) {\n var daySchedule = daySchedules[s];\n var reservation = this.getReservationByScheduleID(reservations, daySchedule.activityScheduleID);\n if (reservation) {\n reservation[propertyName] = value;\n }\n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getReservationIndexByScheduleID = function (reservations, activityScheduleID) {\n for (var i = 0; i < reservations.length; i++) {\n var reservation = reservations[i];\n if (reservation.activityScheduleID === activityScheduleID) {\n return i;\n }\n }\n\n return -1;\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.applyChanges = function () {\n\n var hasFirstPeriod = (!!this.firstPeriodStartDate && !!this.firstPeriodEndDate);\n var hasSecondPeriod = (!!this.secondPeriodStartDate && !!this.secondPeriodEndDate);\n \n\n if (!(hasFirstPeriod || hasSecondPeriod)) {\n\n for (var s = 0; s < this.daySchedules.length; s++) {\n var schedule = this.daySchedules[s];\n var rindex = this.getReservationIndexByScheduleID(this.reservations, schedule.activityScheduleID);\n if (rindex !== -1) {\n this.reservations.splice(rindex, 1);\n }\n }\n\n this.firstPeriodStartDateChanged = false;\n this.firstPeriodEndDateChanged = false;\n this.secondPeriodStartDateChanged = false;\n this.secondPeriodEndDateChanged = false;\n this.notesChanged = false;\n } else {\n if (hasFirstPeriod) {\n if (this.firstPeriodStartDateChanged) {\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'firstPeriodStartDate', this.firstPeriodStartDate, true);\n this.firstPeriodStartDateChanged = false;\n }\n if (this.firstPeriodEndDateChanged) {\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'firstPeriodEndDate', this.firstPeriodEndDate, false);\n this.firstPeriodEndDateChanged = false;\n }\n } else {\n if (this.firstPeriodStartDateChanged || this.firstPeriodEndDateChanged) {\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'firstPeriodStartDate', null, true);\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'firstPeriodEndDate', null, false);\n this.firstPeriodStartDateChanged = false;\n this.firstPeriodEndDateChanged = false;\n }\n }\n\n if (hasSecondPeriod) {\n if (this.secondPeriodStartDateChanged) {\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'secondPeriodStartDate', this.secondPeriodStartDate, true);\n this.secondPeriodStartDateChanged = false;\n }\n if (this.secondPeriodEndDateChanged) {\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'secondPeriodEndDate', this.secondPeriodEndDate, false);\n this.secondPeriodEndDateChanged = false;\n }\n } else {\n if (this.secondPeriodStartDateChanged || this.secondPeriodEndDateChanged) {\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'secondPeriodStartDate', null, true);\n this.applyChangesToTimeProperty(this.daySchedules, this.reservations, 'secondPeriodEndDate', null, false);\n this.secondPeriodStartDateChanged = false;\n this.secondPeriodEndDateChanged = false;\n }\n\n }\n\n if (this.notesChanged) {\n this.applyChangesToStringProperty(this.daySchedules, this.reservations, 'notes', this.notes);\n this.notesChanged = false;\n }\n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.calculateProperties = function (schedules, reservations, dayOfWeek) {\n\n this.daySchedules = this.getSchedulesByDay(schedules, dayOfWeek);\n this.dayReservations = this.getReservationsByDay(reservations, dayOfWeek);\n\n this._firstPeriodStartDate = this.getTimeValue(this.daySchedules, this.dayReservations, 'firstPeriodStartDate', true);\n this._firstPeriodEndDate = this.getTimeValue(this.daySchedules, this.dayReservations, 'firstPeriodEndDate', false);\n this._secondPeriodStartDate = this.getTimeValue(this.daySchedules, this.dayReservations, 'secondPeriodStartDate', true);\n this._secondPeriodEndDate = this.getTimeValue(this.daySchedules, this.dayReservations, 'secondPeriodEndDate', false);\n this._notes = this.getStringValue(this.daySchedules, this.dayReservations, 'notes');\n\n\n this.notScheduled = !(this.daySchedules && this.daySchedules.length);\n this.notScheduledAM = this.getAMNotScheduled(this.daySchedules);\n this.notScheduledPM = this.getPMNotScheduled(this.daySchedules);\n\n this.firstPeriodStartDateMin = this.getMinTimeValue(this.daySchedules, 'firstPeriodStartDate');\n this.firstPeriodEndDateMax = this.getMaxTimeValue(this.daySchedules, 'firstPeriodEndDate');\n this.secondPeriodStartDateMin = this.getMinTimeValue(this.daySchedules, 'secondPeriodStartDate');\n this.secondPeriodEndDateMax = this.getMaxTimeValue(this.daySchedules, 'secondPeriodEndDate');\n\n\n this.firstPeriodStartDateIndeterminate = this.isTimeIndeterminate(this.daySchedules, this.dayReservations, 'firstPeriodStartDate');\n this.firstPeriodEndDateIndeterminate = this.isTimeIndeterminate(this.daySchedules, this.dayReservations, 'firstPeriodEndDate');\n this.secondPeriodStartDateIndeterminate = this.isTimeIndeterminate(this.daySchedules, this.dayReservations, 'secondPeriodStartDate');\n this.secondPeriodEndDateIndeterminate = this.isTimeIndeterminate(this.daySchedules, this.dayReservations, 'secondPeriodEndDate');\n this.notesIndeterminate = this.isStringIndeterminate(this.daySchedules, this.dayReservations, 'notes');\n\n\n this.firstPeriodStartDateNotScheduled = this.notScheduledProperty(this.daySchedules, 'firstPeriodStartDate');\n this.firstPeriodEndDateNotScheduled = this.notScheduledProperty(this.daySchedules, 'firstPeriodEndDate');\n this.secondPeriodStartDateNotScheduled = this.notScheduledProperty(this.daySchedules, 'secondPeriodStartDate');\n this.secondPeriodEndDateNotScheduled = this.notScheduledProperty(this.daySchedules, 'secondPeriodEndDate');\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getActive = function () {\n if (this.notScheduled) {\n return false;\n }\n\n return (!!this.firstPeriodStartDate && !!this.firstPeriodEndDate) ||\n (!!this.secondPeriodStartDate && !!this.secondPeriodEndDate);\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.setActive = function (value) {\n if (value) {\n if (!this.firstPeriodStartDateNotScheduled) {\n this.firstPeriodStartDate = this.firstPeriodStartDateMin;\n this.firstPeriodEndDate = this.firstPeriodEndDateMax;\n }\n if (!this.secondPeriodStartDateNotScheduled) {\n this.secondPeriodStartDate = this.secondPeriodStartDateMin;\n this.secondPeriodEndDate = this.secondPeriodEndDateMax;\n }\n } else {\n this.firstPeriodStartDate = null;\n this.firstPeriodEndDate = null;\n this.secondPeriodStartDate = null;\n this.secondPeriodEndDate = null;\n this.notes = null;\n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getAmActive = function () {\n if (this.notScheduled) {\n return false;\n }\n\n return (!!this.firstPeriodStartDate && !!this.firstPeriodEndDate);\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.setAmActive = function (value) {\n if (value) {\n if (!this.firstPeriodStartDateNotScheduled) {\n this.firstPeriodStartDate = this.firstPeriodStartDateMin;\n this.firstPeriodEndDate = this.firstPeriodEndDateMax;\n }\n } else {\n this.firstPeriodStartDate = null;\n this.firstPeriodEndDate = null;\n }\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.getPmActive = function () {\n if (this.notScheduled) {\n return false;\n }\n\n return (!!this.secondPeriodStartDate && !!this.secondPeriodEndDate);\n }\n\n ns.ScheduleResourceDetailDayBase.prototype.setPmActive = function (value) {\n if (value) {\n if (!this.secondPeriodStartDateNotScheduled) {\n this.secondPeriodStartDate = this.secondPeriodStartDateMin;\n this.secondPeriodEndDate = this.secondPeriodEndDateMax;\n }\n } else {\n this.secondPeriodStartDate = null;\n this.secondPeriodEndDate = null;\n }\n }\n\n // #endregion\n\n // #region ScheduleResourceDetailDayBase - Properties\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"active\", {\n get: function () { return this.getActive(); },\n set: function (value) { this.setActive(value); },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"amActive\", {\n get: function () { return this.getAmActive(); },\n set: function (value) { this.setAmActive(value); },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"pmActive\", {\n get: function () { return this.getPmActive(); },\n set: function (value) { this.setPmActive(value); },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"firstPeriodStartDate\", {\n get: function () {\n return this._firstPeriodStartDate;\n },\n set: function (value) {\n this._firstPeriodStartDate = value !== null ? moment(value).toDate() : null;\n this.firstPeriodStartDateChanged = true;\n if (value !== undefined) {\n this.firstPeriodStartDateIndeterminate = this.isTimeIndeterminate2(this.daySchedules, 'firstPeriodStartDate', value, true);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"firstPeriodEndDate\", {\n get: function () {\n return this._firstPeriodEndDate;\n },\n set: function (value) {\n this._firstPeriodEndDate = value !== null ? moment(value).toDate() : null;\n this.firstPeriodEndDateChanged = true;\n if (value !== undefined) {\n this.firstPeriodEndDateIndeterminate = this.isTimeIndeterminate2(this.daySchedules, 'firstPeriodEndDate', value, false);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"secondPeriodStartDate\", {\n get: function () {\n return this._secondPeriodStartDate;\n },\n set: function (value) {\n this._secondPeriodStartDate = value !== null ? moment(value).toDate() : null;\n this.secondPeriodStartDateChanged = true;\n if (value !== undefined) {\n this.secondPeriodStartDateIndeterminate = this.isTimeIndeterminate2(this.daySchedules, 'secondPeriodStartDate', value, true);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"secondPeriodEndDate\", {\n get: function () {\n return this._secondPeriodEndDate;\n },\n set: function (value) {\n this._secondPeriodEndDate = value !== null ? moment(value).toDate() : null;\n this.secondPeriodEndDateChanged = true;\n if (value !== undefined) {\n this.secondPeriodEndDateIndeterminate = this.isTimeIndeterminate2(this.daySchedules, 'secondPeriodEndDate', value, false);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n\n Object.defineProperty(ns.ScheduleResourceDetailDayBase.prototype, \"notes\", {\n get: function () {\n return this._notes;\n },\n set: function (value) {\n this._notes = value;\n this.notesChanged = true;\n if (value !== undefined) {\n this.notesIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n // #endregion\n\n}(webooker_acivity_models));\n","'use strict';\n\nwbApp.factory('activityInstructorSvc', ['$resource', '$q', '$translate', '$http', 'repositorySvc', 'notificationSvc',\nfunction ($resource, $q, $translate, $http, repositorySvc, notificationSvc) {\n\n function createEmployeeModel(selectedSchedules) {\n return new webooker_acivity_models.Employee(selectedSchedules);\n } \n\n function BuildWeekModel(activityinstructors, schedules) {\n var employeeHash = {};\n\n angular.forEach(activityinstructors, function (instructor, idx) {\n var employee = employeeHash[instructor.employeeID];\n if (!employee) {\n employee = createEmployeeModel(schedules);\n employeeHash[instructor.employeeID] = employee;\n employee.fullName = instructor.employeeFullName;\n employee.employeeID = instructor.employeeID;\n employee.activityID = instructor.activityID;\n }\n\n employee.schedules.push(instructor);\n });\n\n var ret = [];\n\n for (var employeeID in employeeHash) {\n ret.push(employeeHash[employeeID]);\n }\n\n return ret;\n }\n\n function getWeekModelByIntervals(semesterId, activityId, weeks) {\n var scheduleIDs = [];\n var schedules = [];\n\n angular.forEach(weeks, function (week, idx) {\n angular.forEach(week.schedules, function (schedule, sidx) {\n scheduleIDs.push(schedule.activityScheduleID);\n schedules.push(schedule);\n })\n \n });\n\n var deferred = $q.defer();\n var result = [];\n\n result.$promise = deferred.promise;\n\n if (scheduleIDs.length > 0) {\n $http({\n method: 'POST',\n url: '/Api/ActivityInstructors/GetAllBySchedules',\n data: {\n semesterID: semesterId,\n activityID: activityId,\n schedules: scheduleIDs\n }\n })\n .success(function (data, status, headers, config) {\n\n var model = BuildWeekModel(data, schedules);\n\n result.push.apply(result, model);\n deferred.resolve(model);\n })\n .error(function (errorResult, status, headers, config) {\n deferred.reject(errorResult);\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify(\n $translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n } else {\n deferred.resolve([]);\n }\n\n return result;\n }\n\n function getAllByEmployeeAndActivity(employeeID, activityID) {\n var deferred = $q.defer();\n var result = [];\n result.$promise = deferred.promise;\n\n $http({\n method: 'POST',\n url: '/Api/ActivityInstructors/GetAllByEmployeeAndActivity',\n data: {\n employeeID: employeeID,\n activityID: activityID\n }\n })\n .success(function (data, status, headers, config) {\n result.push.apply(result, data);\n deferred.resolve(result);\n })\n .error(function (errorResult, status, headers, config) {\n deferred.reject(errorResult);\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify(\n $translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n\n return result;\n }\n\n function createEmployeeDetailModel(instructors, schedules, employeeID, activityID)\n {\n return new webooker_acivity_models.EmployeeDetail(instructors, schedules, employeeID, activityID);\n }\n\n function saveAsync(instructors, employeeID, activityID) {\n var deferred = $q.defer();\n\n $http({\n method: 'POST',\n url: '/Api/ActivityInstructors/Save',\n data: {\n employeeID: employeeID,\n activityID: activityID,\n instructors: instructors || []\n }\n })\n .success(function (data, status, headers, config) {\n deferred.resolve(data);\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_ACTION_REGISTRATION_SUCCESS'));\n })\n .error(function (errorResult, status, headers, config) {\n deferred.reject(errorResult);\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify(\n $translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n\n return deferred.promise;\n }\n\n return {\n getWeekModelByIntervals: getWeekModelByIntervals,\n getAllByEmployeeAndActivity: getAllByEmployeeAndActivity,\n createEmployeeDetailModel: createEmployeeDetailModel,\n saveAsync: saveAsync\n }\n\n}]);\n","'use strict';\n\nwbApp.factory('activityReservationSvc', ['$resource', '$q', '$translate', '$http', 'repositorySvc', 'notificationSvc',\nfunction ($resource, $q, $translate, $http, repositorySvc, notificationSvc) {\n\n function createStudentModel(selectedSchedules) {\n return new webooker_acivity_models.Student(selectedSchedules);\n } \n\n function BuildWeekModel(activityReservations, schedules) {\n var studentHash = {};\n\n angular.forEach(activityReservations, function (reservation, idx) {\n var student = studentHash[reservation.studentID];\n if (!student) {\n student = createStudentModel(schedules);\n studentHash[reservation.studentID] = student;\n student.fullName = reservation.studentFullName;\n student.studentID = reservation.studentID;\n student.activityID = reservation.activityID;\n }\n\n student.schedules.push(reservation);\n });\n\n var ret = [];\n\n for (var studentID in studentHash) {\n ret.push(studentHash[studentID]);\n }\n\n return ret;\n }\n\n function getWeekModelByIntervals(semesterId, activityId, weeks) {\n var scheduleIDs = [];\n var schedules = [];\n\n angular.forEach(weeks, function (week, idx) {\n angular.forEach(week.schedules, function (schedule, sidx) {\n scheduleIDs.push(schedule.activityScheduleID);\n schedules.push(schedule);\n })\n \n });\n\n var deferred = $q.defer();\n var result = [];\n\n result.$promise = deferred.promise;\n\n if (scheduleIDs.length > 0) {\n $http({\n method: 'POST',\n url: '/Api/ActivityReservations/GetAllBySchedules',\n data: {\n semesterID: semesterId,\n activityID: activityId,\n schedules: scheduleIDs\n }\n })\n .success(function (data, status, headers, config) {\n\n var model = BuildWeekModel(data, schedules);\n\n result.push.apply(result, model);\n deferred.resolve(model);\n })\n .error(function (errorResult, status, headers, config) {\n deferred.reject(errorResult);\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify(\n $translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n } else {\n deferred.resolve([]);\n }\n\n return result;\n }\n\n function getAllByStudentAndActivity(studentID, activityID) {\n var deferred = $q.defer();\n var result = [];\n result.$promise = deferred.promise;\n\n $http({\n method: 'POST',\n url: '/Api/ActivityReservations/GetAllByStudentAndActivity',\n data: {\n studentID: studentID,\n activityID: activityID\n }\n })\n .success(function (data, status, headers, config) {\n result.push.apply(result, data);\n deferred.resolve(result);\n })\n .error(function (errorResult, status, headers, config) {\n deferred.reject(errorResult);\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify(\n $translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n\n return result;\n }\n\n function createStudentDetailModel(reservations, schedules, studentID, activityID, activitySetting)\n {\n return new webooker_acivity_models.StudentDetail(reservations, schedules, studentID, activityID, activitySetting);\n }\n\n function saveAsync(reservations, studentID, activityID, reservationsOrig) {\n var deferred = $q.defer();\n\n if (angular.equals(reservations, reservationsOrig)) {\n deferred.resolve(reservations);\n } else {\n $http({\n method: 'POST',\n url: '/Api/ActivityReservations/Save',\n data: {\n studentID: studentID,\n activityID: activityID,\n reservations: reservations || []\n }\n })\n .success(function (data, status, headers, config) {\n deferred.resolve(data);\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_ACTION_REGISTRATION_SUCCESS'));\n })\n .error(function (errorResult, status, headers, config) {\n deferred.reject(errorResult);\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify(\n $translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n }\n\n return deferred.promise;\n }\n\n return {\n getWeekModelByIntervals: getWeekModelByIntervals,\n getAllByStudentAndActivity: getAllByStudentAndActivity,\n createStudentDetailModel: createStudentDetailModel,\n saveAsync: saveAsync\n }\n\n}]);\n","'use strict';\n\nwbApp.factory('activityScheduleSvc', ['$resource', '$q', '$translate', 'repositorySvc', 'semesterSvc', 'notificationSvc',\nfunction ($resource, $q, $translate, repositorySvc, semesterSvc, notificationSvc) {\n var ActivitySchedules = $resource('/Api/ActivitySchedules/:id', {}, {\n 'getAllBySemesterAndActivityID': { method: 'GET', isArray: true, url: '/Api/ActivitySchedules/GetAllBySemesterAndActivityID' },\n 'save': { method: 'POST', url: '/Api/ActivitySchedules/Save', isArray: true },\n });\n\n var bySemesterAndActivity;\n var lastSemesterID;\n var lastActivityID;\n\n function getAllBySemesterAndActivityIDAsync(semesterID, activityID, reload) {\n if (!bySemesterAndActivity || lastSemesterID !== semesterID || lastActivityID !== activityID || reload) {\n bySemesterAndActivity = repositorySvc.customGet('getAllBySemesterAndActivityID', ActivitySchedules, {\n semesterID: semesterID,\n activityID: activityID\n });\n lastSemesterID = semesterID;\n lastActivityID = activityID;\n }\n\n return bySemesterAndActivity;\n }\n\n function getWeeksAsync(semesterID, activityID, reload) {\n var result = [];\n var deferred = $q.defer();\n\n $q.all([\n semesterSvc.getAsync(semesterID),\n getAllBySemesterAndActivityIDAsync(semesterID, activityID, reload).$promise\n ]).then(function (data) {\n var semester = data[0];\n var schedules = data[1];\n var scheduleModel = new webooker_acivity_models.Schedule(semester.startDate, semester.endDate, schedules);\n result.push.apply(result, scheduleModel.weeks);\n deferred.resolve(result);\n });\n\n result.$promise = deferred.promise;\n return result;\n }\n\n function getToBeSendToServer(selectedWeeks, semesterId, activityId) {\n var toBeSendToServer = [];\n for (var w = 0; w < selectedWeeks.length; w++) {\n var week = selectedWeeks[w];\n\n for (var s = 0; s < week.schedules.length; s++) {\n var schedule = week.schedules[s];\n\n schedule.semesterID = semesterId;\n schedule.activityID = activityId;\n toBeSendToServer.push(schedule);\n \n }\n }\n\n return toBeSendToServer;\n }\n\n function saveAsync(weeks, semesterId, activityId) {\n\n var toBeSendToServer = getToBeSendToServer(weeks, semesterId, activityId);\n\n var result = [];\n var deferred = $q.defer();\n\n var res = ActivitySchedules.save({\n semesterID: semesterId,\n activityID: activityId,\n model: toBeSendToServer\n });\n\n $q.all([ \n semesterSvc.getAsync(semesterId),\n res.$promise\n ]).then(function (data) {\n var semester = data[0];\n var schedules = data[1];\n var scheduleModel = new webooker_acivity_models.Schedule(semester.startDate, semester.endDate, schedules);\n result.push.apply(result, scheduleModel.weeks);\n\n bySemesterAndActivity = result;\n lastSemesterID = semesterId;\n lastActivityID = activityId;\n\n deferred.resolve(result);\n notificationSvc.notifyInfo($translate.instant('TXT_ALERT_TITLE_ACTIVITY_SCHEDULE_SAVED'));\n }, function (errorResult) {\n if (errorResult.status === 403) {\n notificationSvc.fatalNotify($translate.instant('TXT_ALERT_TITLE_FORBIDEN'));\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ACTIVIT_SCHEDULE_SAVE_ERROR'),\n notificationSvc.translateError(errorResult.data));\n }\n deferred.reject(errorResult);\n });\n\n return deferred.promise;\n }\n\n return {\n getWeeksAsync: getWeeksAsync,\n saveAsync: saveAsync\n }\n}]);\n","'use strict';\n\nwbApp.factory('activityStudentSettingSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var ActivityStudentSetting = $resource('/Api/ActivityStudentSetting/:id', {}, {\n 'getByStudentAndActivity': { method: 'GET', url: '/Api/ActivityStudentSetting/GetByStudentAndActivity' },\n 'update': { method: 'POST', url: '/Api/ActivityStudentSetting/Update' },\n 'insert': { method: 'POST', url: '/Api/ActivityStudentSetting/Insert' },\n 'delete': { method: 'POST', url: '/Api/ActivityStudentSetting/Delete' }\n });\n\n function createNew() {\n return {\n };\n }\n\n function getByStudentAndActivity(studentID, activityID) {\n return repositorySvc.customGet('getByStudentAndActivity', ActivityStudentSetting, {\n studentID: studentID,\n activityID: activityID\n });\n }\n\n function saveAsync(data, origData) {\n var deferred = $q.defer();\n\n function success(d) {\n deferred.resolve(d);\n }\n\n function error(e) {\n deferred.reject(e);\n }\n\n if (angular.equals(data, origData)) {\n deferred.resolve(data);\n } else {\n if (data.activityStudentSettingID) {\n update(data, success, error);\n } else {\n insert(data, success, error);\n }\n }\n\n return deferred.promise;\n }\n\n function insert(data, successCallback, errorCallback) {\n repositorySvc.insert(\n ActivityStudentSetting, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'activityStudentSettingID');\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n ActivityStudentSetting, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'activityStudentSettingID');\n }\n\n function remove(data, successCallback, errorCallback) {\n repositorySvc.remove(\n ActivityStudentSetting, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback,\n { activityStudentSettingID: data.activityStudentSettingID },\n 'activityStudentSettingID');\n }\n\n return {\n createNew: createNew,\n getByStudentAndActivity: getByStudentAndActivity,\n insert: insert,\n update: update,\n remove: remove,\n saveAsync: saveAsync\n }\n }]);","'use strict';\n\nwbApp.factory('activityTariffSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var ActivityTariffs = $resource('/Api/ActivityTariffs/:id', {}, {\n 'getAll': { method: 'GET', isArray: true, url: '/Api/ActivityTariffs/GetAll' },\n 'update': { method: 'POST', url: '/Api/ActivityTariffs/Update' },\n 'insert': { method: 'POST', url: '/Api/ActivityTariffs/Insert' },\n 'delete': { method: 'POST', url: '/Api/ActivityTariffs/Delete' }\n });\n\n var activityTariffs;\n var nonDeleted;\n\n function createNew() {\n return {\n price: 0\n };\n }\n\n function getAllAsync(reload) {\n if (!activityTariffs || reload) {\n activityTariffs = repositorySvc.customGet('getAll', ActivityTariffs);\n nonDeleted = null;\n }\n\n return activityTariffs;\n }\n\n\n function getAllNonDeletedAsync(reload, activityTariffID) {\n if (nonDeleted && !reload) {\n return nonDeleted;\n }\n\n var allActivityTariffs = getAllAsync(reload);\n nonDeleted = [];\n var deferred = $q.defer();\n nonDeleted.$promise = deferred.promise;\n\n allActivityTariffs.$promise.then(function (data) {\n angular.forEach(data, function (value, key) {\n if (!value.isDeleted || value.activityTariffID === activityTariffID) {\n nonDeleted.push(value);\n }\n });\n deferred.resolve(nonDeleted);\n }, function (reason) {\n deferred.reject(reason);\n });\n\n return nonDeleted;\n }\n\n function insert(data, successCallback, errorCallback) {\n repositorySvc.insert(\n ActivityTariffs, // $resource\n activityTariffs, // collection\n data, // entity\n success,\n errorCallback,\n 'activityTariffID');\n\n function success(entity) {\n repositorySvc.entityInserted(nonDeleted, entity);\n\n if (successCallback) {\n successCallback(entity);\n }\n }\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n ActivityTariffs, // $resource\n activityTariffs, // collection\n data, // entity\n success,\n errorCallback,\n 'activityTariffID');\n\n function success(entity) {\n repositorySvc.entityUpdated(nonDeleted, entity, 'activityTariffID');\n\n if (successCallback) {\n successCallback(entity);\n }\n }\n }\n\n function remove(data, successCallback, errorCallback) {\n repositorySvc.remove(\n ActivityTariffs, // $resource\n activityTariffs, // collection\n data, // entity\n success,\n errorCallback,\n { activityTariffID: data.activityTariffID },\n 'activityTariffID');\n\n function success() {\n repositorySvc.entityRemoved(nonDeleted, data.id, 'activityTariffID');\n\n if (successCallback) {\n successCallback();\n }\n }\n }\n\n return {\n createNew: createNew,\n getAllAsync: getAllAsync,\n getAllNonDeletedAsync: getAllNonDeletedAsync,\n insert: insert,\n update: update,\n remove: remove\n }\n }]);","'use strict';\n\nwbApp.factory('contractSvc', ['$resource', '$q', 'repositorySvc', 'accountingBookSvc',\n function ($resource, $q, repositorySvc, accountingBookSvc) {\n\n const Contract = $resource('/restapi/contracts/:id', {}, {\n 'getById': {method: 'GET', url: '/restapi/contracts/:id'},\n 'getAll': {method: 'GET', isArray: true, url: '/restapi/contracts'},\n 'insert': {method: 'POST', url: '/restapi/contracts'},\n 'update': {method: 'PUT', url: '/restapi/contracts/:id'},\n 'delete': {method: 'DELETE', url: '/restapi/contracts/:id'},\n 'sendContracts': {method: 'POST', url: '/restapi/contracts/:id/send-contracts-notification'}\n });\n\n let contracts;\n\n function createNew()\n {\n return $q(function (resolve, reject) {\n var model = {\n id: null,\n isActive: true,\n contractSchedules: [{}],\n userId: null,\n studentId: null\n };\n\n let dfAccountingBookPromise = accountingBookSvc.getDefaultAsync();\n dfAccountingBookPromise.then(function (acc) {\n model.accountingBookId = acc.id;\n resolve(model);\n }, function (err) {\n reject(err);\n });\n })\n }\n \n function transformModelForSave(model) {\n model.userFullName = null;\n\n if (!model.contractSchedules || model.contractSchedules.length === 0) {\n model.contractSchedules = [];\n }\n\n _.forEach(model.contractSchedules, function(schedule) {\n schedule.monday = transformDayModelForSave(schedule.monday);\n schedule.tuesday = transformDayModelForSave(schedule.tuesday);\n schedule.wednesday = transformDayModelForSave(schedule.wednesday);\n schedule.thursday = transformDayModelForSave(schedule.thursday);\n schedule.friday = transformDayModelForSave(schedule.friday);\n schedule.saturday = transformDayModelForSave(schedule.saturday);\n schedule.sunday = transformDayModelForSave(schedule.sunday);\n });\n \n model.contractTemplatesIds = [];\n if (!!model.contractTemplateType0) model.contractTemplatesIds.push(model.contractTemplateType0);\n if (!!model.contractTemplateType1) model.contractTemplatesIds.push(model.contractTemplateType1);\n if (!!model.contractTemplateType2) model.contractTemplatesIds.push(model.contractTemplateType2);\n if (!!model.contractTemplateType3) model.contractTemplatesIds.push(model.contractTemplateType3);\n if (!!model.contractTemplateType4) model.contractTemplatesIds.push(model.contractTemplateType4);\n if (!!model.contractTemplateType6) model.contractTemplatesIds.push(model.contractTemplateType6);\n if (!!model.contractTemplateType7) model.contractTemplatesIds.push(model.contractTemplateType7);\n\n return model;\n }\n \n function getContractTemplateIdByType(model, contractTemplateType)\n {\n return _.find(model.contractTemplatesInfos, { 'contractTemplateType' : contractTemplateType })?.id;\n }\n \n function transformModelForEdit(model) {\n model.userFullName = '';\n \n if (!model.contractSchedules || model.contractSchedules.length === 0) {\n model.contractSchedules = [];\n }\n \n _.forEach(model.contractSchedules, function(schedule) {\n schedule.monday = transformDayModelForEdit(schedule.monday);\n schedule.tuesday = transformDayModelForEdit(schedule.tuesday);\n schedule.wednesday = transformDayModelForEdit(schedule.wednesday);\n schedule.thursday = transformDayModelForEdit(schedule.thursday);\n schedule.friday = transformDayModelForEdit(schedule.friday);\n schedule.saturday = transformDayModelForEdit(schedule.saturday);\n schedule.sunday = transformDayModelForEdit(schedule.sunday);\n });\n \n if (!model.contractTemplatesInfos) {\n model.contractTemplatesInfos = [];\n }\n model.contractTemplateType0 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 0 })?.id;\n model.contractTemplateType1 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 1 })?.id;\n model.contractTemplateType2 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 2 })?.id;\n model.contractTemplateType3 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 3 })?.id;\n model.contractTemplateType4 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 4 })?.id;\n model.contractTemplateType6 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 6 })?.id;\n model.contractTemplateType7 = _.find(model.contractTemplatesInfos, { 'contractTemplateType' : 7 })?.id;\n \n return model;\n }\n \n function transformDayModelForEdit(dayModel) {\n if (!dayModel) {\n return {\n active: false,\n startTime: null,\n endTime: null,\n food: false\n };\n } else {\n dayModel.active = true;\n if (!isNaN(dayModel.startTime)) {\n dayModel.startTime = moment().startOf('day').add(dayModel.startTime, 'minutes').toDate();\n }\n if (!isNaN(dayModel.endTime)) {\n dayModel.endTime = moment().startOf('day').add(dayModel.endTime, 'minutes').toDate();\n }\n }\n \n return dayModel;\n }\n\n function transformDayModelForSave(dayModel) {\n if (!dayModel.active) {\n return null;\n } else {\n if (moment(dayModel.startTime).isValid()) {\n let midnight = moment(dayModel.startTime).startOf('day');\n dayModel.startTime = moment(dayModel.startTime).diff(midnight, 'minutes')\n } else {\n dayModel.startTime = null;\n }\n if (moment(dayModel.endTime).isValid()) {\n let midnight = moment(dayModel.endTime).startOf('day');\n dayModel.endTime = moment(dayModel.endTime).diff(midnight, 'minutes')\n } else {\n dayModel.endTime = null;\n }\n }\n\n return dayModel;\n } \n \n function sendContracts(contractId, contractTemplateTypes) {\n return repositorySvc.customPostWithParams(\n 'sendContracts',\n Contract,\n { id: contractId },\n {\n contractTemplateTypes: contractTemplateTypes\n }); \n }\n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n Contract,\n model);\n }\n\n function remove(rentCategoryId) {\n contracts = null;\n return repositorySvc.customDelete(\n 'delete',\n Contract,\n { id: rentCategoryId });\n }\n\n function update(model) {\n contracts = null;\n return repositorySvc.customPutWithParams(\n 'update',\n Contract,\n { id: model.id },\n convertDatesToDateString(model));\n }\n\n function getById(id) {\n return repositorySvc.customGet('getById', Contract, { id: id });\n }\n\n function getAll(refresh) {\n if (!contracts || refresh) {\n contracts = repositorySvc.customGet('getAll', Contract, { \n expanded: 'SimplePersonalInfo,ContractTemplatesInfo'\n });\n }\n return contracts;\n }\n \n return {\n createNew: createNew,\n getById: getById,\n getAll: getAll,\n insert: insert,\n remove: remove,\n update: update,\n transformModelForEdit: transformModelForEdit,\n transformModelForSave: transformModelForSave,\n getContractTemplateIdByType: getContractTemplateIdByType,\n sendContracts: sendContracts\n }\n }]);","'use strict';\n\nwbApp.factory('contractTemplateSvc', ['$resource', '$q', 'repositorySvc', \n function ($resource, $q, repositorySvc) {\n\n const ContractTemplate = $resource('/restapi/contract-templates/:id', {}, {\n 'getById': {method: 'GET', url: '/restapi/contract-templates/:id'},\n 'getAll': {method: 'GET', isArray: true, url: '/restapi/contract-templates'},\n 'insert': {method: 'POST', url: '/restapi/contract-templates'},\n 'update': {method: 'PUT', url: '/restapi/contract-templates/:id'},\n 'delete': {method: 'DELETE', url: '/restapi/contract-templates/:id'},\n 'getVariablesByType': {method: 'GET', isArray: true, url: '/restapi/contract-templates/template-types/:id/variables'},\n 'getSampleByType': {method: 'GET', url: '/restapi/contract-templates/template-types/:id/sample-template'},\n });\n\n let contractTemplates;\n\n function createNew()\n {\n return {\n id: null,\n name: \"\",\n contractTemplateType: 0,\n templateData: \"\"\n };\n }\n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n ContractTemplate,\n model);\n }\n\n function remove(id) {\n contractTemplates = null;\n return repositorySvc.customDelete(\n 'delete',\n ContractTemplate,\n { id: id });\n }\n\n function update(model) {\n contractTemplates = null;\n return repositorySvc.customPutWithParams(\n 'update',\n ContractTemplate,\n { id: model.id },\n convertDatesToDateString(model));\n }\n\n function getById(id) {\n return repositorySvc.customGet('getById', ContractTemplate, { id: id });\n }\n\n function getSampleByType(typeId) {\n return repositorySvc.customGet('getSampleByType', ContractTemplate, { id: typeId });\n } \n\n function getAll(refresh) {\n if (!contractTemplates || refresh) {\n contractTemplates = repositorySvc.customGet('getAll', ContractTemplate, {});\n }\n return contractTemplates;\n }\n \n function getAllWithFilter(refresh, contractTemplateType) {\n if (typeof contractTemplateType === 'undefined' || contractTemplateType === null)\n {\n return getAll(refresh);\n }\n else\n {\n var deferred = $q.defer();\n var m = [];\n m.$promise = deferred.promise;\n\n let models = getAll(refresh);\n models.$promise.then(function() {\n m.push.apply(m, _.filter(models, {'contractTemplateType': contractTemplateType}));\n deferred.resolve(m);\n });\n \n return m;\n }\n }\n\n function getVariablesByType(typeId) {\n return repositorySvc.customGet('getVariablesByType', ContractTemplate, { id: typeId });\n } \n \n return {\n createNew: createNew,\n getById: getById,\n getAll: getAll,\n insert: insert,\n remove: remove,\n update: update,\n getVariablesByType: getVariablesByType,\n getAllWithFilter: getAllWithFilter,\n getSampleByType: getSampleByType\n }\n }]);","'use strict';\n\nwbApp.factory('czMsMtRegistrySvc', ['$q', '$resource', 'repositorySvc', 'localStorageService',\n function ($q, $resource, repositorySvc, localStorageService) {\n const CzMsMtRegistry = $resource('/restapi/cz-ms-mt-registry/:id', {}, {\n 'getById': {method: 'GET', url: '/restapi/cz-ms-mt-registry/:id'},\n 'findByStudent': {method: 'GET', isArray: true, url: '/restapi/cz-ms-mt-registry/find-by-student'},\n 'findLatestByActivity': {method: 'GET', isArray: true, url: '/restapi/cz-ms-mt-registry/find-latest-by-activity'},\n 'insert': {method: 'POST', url: '/restapi/cz-ms-mt-registry'},\n 'update': {method: 'PUT', url: '/restapi/cz-ms-mt-registry/:id'},\n 'delete': {method: 'DELETE', url: '/restapi/cz-ms-mt-registry/:id'},\n 'lists': {method: 'GET', url: '/restapi/cz-ms-mt-registry/registry-lists' },\n 'validate': {method: 'POST', isArray: true, url: '/restapi/cz-ms-mt-registry/registry-validate'},\n 'getStudent': {method: 'GET', url: '/restapi/students/:id' },\n 'getActivity': {method: 'GET', url: '/restapi/activities/:id'},\n 'export': {method: 'POST', url: '/restapi/cz-ms-mt-registry/registry-export'},\n });\n \n function newExportModel() {\n let model = {\n fromDate: new Date(moment().year() - 1, 9, 1),\n toDate: new Date(moment().year(), 8, 30),\n izo: '',\n cast: '',\n druhProvozu: '1',\n rozliseni: '0',\n prumDobaCelodenniProvoz: 0,\n prumDobaPolodenniProvoz: 0,\n prumDobaInternatniProvoz: 0,\n activityIds: []\n };\n\n if (localStorageService.isSupported) {\n let izo = localStorageService.get('CzMsMtRegistry-izo');\n if (izo) {\n model.izo = izo;\n }\n let cast = localStorageService.get('CzMsMtRegistry-cast');\n if (cast) {\n model.cast = cast;\n }\n let druhProvozu = localStorageService.get('CzMsMtRegistry-druhProvozu');\n if (druhProvozu) {\n model.druhProvozu = druhProvozu;\n }\n let rozliseni = localStorageService.get('CzMsMtRegistry-rozliseni');\n if (rozliseni) {\n model.rozliseni = rozliseni;\n } \n }\n \n return model;\n }\n\n function fromExportModelToDTO(model) {\n let dto = {\n fromDateUtc: moment(model.fromDate).startOf('day').toDate(),\n toDateUtc: moment(model.toDate).startOf('day').toDate(),\n izo: model.izo,\n cast: model.cast,\n druhProvozu: model.druhProvozu,\n rozliseni: model.rozliseni,\n prumDobaCelodenniProvoz: model.prumDobaCelodenniProvoz,\n prumDobaPolodenniProvoz: model.prumDobaPolodenniProvoz,\n prumDobaInternatniProvoz: model.prumDobaInternatniProvoz,\n activityIds: model.activityIds\n };\n return convertDatesToDateString(dto);\n }\n\n function saveExportToLocalStorage(model) {\n if (localStorageService.isSupported) {\n localStorageService.set('CzMsMtRegistry-izo', model.izo);\n localStorageService.set('CzMsMtRegistry-cast', model.cast);\n localStorageService.set('CzMsMtRegistry-druhProvozu', model.druhProvozu);\n localStorageService.set('CzMsMtRegistry-rozliseni', model.rozliseni);\n }\n }\n \n function exportToXml(model) {\n let dto = fromExportModelToDTO(model);\n saveExportToLocalStorage(model);\n return repositorySvc.customPostWithParams(\n 'export',\n CzMsMtRegistry,\n { },\n dto,\n null,\n null,\n true); \n }\n \n function saveToLocalStorage(model) {\n if (localStorageService.isSupported) {\n localStorageService.set('CzMsMtRegistry-izo', model.izo);\n localStorageService.set('CzMsMtRegistry-cast', model.cast);\n if (model.activityId) {\n localStorageService.set(`CzMsMtRegistry-cast-${model.activityId}-provoz`, model.provoz);\n localStorageService.set(`CzMsMtRegistry-cast-${model.activityId}-jazyK_O`, model.jazyK_O);\n }\n }\n }\n \n function loadFromLocalStorage(model) {\n if (localStorageService.isSupported) {\n let izo = localStorageService.get('CzMsMtRegistry-izo');\n if (izo) {\n model.izo = izo;\n }\n let cast = localStorageService.get('CzMsMtRegistry-cast');\n if (cast) {\n model.cast = cast;\n }\n let provoz = localStorageService.get(`CzMsMtRegistry-cast-${model.activityId}-provoz`);\n if (provoz) {\n model.provoz = provoz;\n }\n let jazyK_O = localStorageService.get(`CzMsMtRegistry-cast-${model.activityId}-jazyK_O`);\n if (jazyK_O) {\n model.jazyK_O = jazyK_O;\n }\n }\n }\n \n function changeActivityId(model, activityId) {\n return $q(function (resolve, reject) {\n repositorySvc.customGet('getActivity', CzMsMtRegistry, { id: activityId }).$promise.then(\n function(activity) {\n model.activityId = activityId;\n model.trida = activity.name;\n resolve(model);\n }, reject);\n });\n }\n \n function createNew(semesterId, activityId) {\n return $q(function (resolve, reject) {\n repositorySvc.customGet('getActivity', CzMsMtRegistry, { id: activityId }).$promise.then(\n function(activity) {\n let model = {\n id: null,\n studentId: null,\n semesterId: semesterId,\n activityId: activityId,\n trida: activity.name,\n requireSpecialEducation: false,\n validFromUtc: new Date(),\n kstpr: \"3\",\n stpr: \"203\",\n sP_OBVOD: \"1\",\n // obecb\n koD_ZAH: \"1\",\n // prizN_ST: \"C\"\n // provoz: \"C\"\n jazyK_O: \"10\",\n zpusob: \"1\",\n koD_VETY: \"1\",\n koD_ZMEN: \"0\",\n };\n loadFromLocalStorage(model);\n resolve(model);\n },\n reject\n );\n });\n }\n \n function changeStudentId(model, studentId) {\n return $q(function (resolve, reject) {\n model.studentId = studentId;\n if (!!studentId) {\n $q.all([\n findByStudent(model.studentId).$promise,\n repositorySvc.customGet('getStudent', CzMsMtRegistry, { id: studentId })\n ]).then(function (data) {\n let studentRecords = data[0];\n let student = data[1];\n if (!!student) {\n model.rodc = student.personalIDNumber;\n model.birthday = student.birthday;\n model.pohlavi = student.gender === 'F' ? '2' : '1';\n }\n if (!!studentRecords) {\n let last = _.find(studentRecords, {isLast: true});\n if (!!last) {\n let semesterId = model.semesterId;\n let activityId = model.activityId;\n\n _.assign(model, last);\n\n model.semesterId = semesterId;\n model.activityId = activityId;\n model.validFromUtc = new Date();\n } \n }\n resolve(model);\n }, reject);\n } else {\n resolve(model);\n }\n });\n }\n\n function getById(id) {\n return $q(function(resolve, reject) {\n repositorySvc.customGet('getById', CzMsMtRegistry, { id: id }).$promise.then(\n function(data) {\n resolve(fromDTOToModel(data));\n }, reject);\n });\n }\n \n function findByStudent(studentId) {\n let deferred = $q.defer();\n let result = [];\n result.$promise = deferred.promise;\n \n repositorySvc.customGet('findByStudent', CzMsMtRegistry, { studentId: studentId }).$promise.then(\n function(data) {\n deferred.resolve(_.map(data, fromDTOToModel));\n }, deferred.reject);\n\n return result;\n }\n\n function findLatestByActivity(activityId) {\n let deferred = $q.defer();\n let result = [];\n result.$promise = deferred.promise;\n\n repositorySvc.customGet('findLatestByActivity', CzMsMtRegistry, { activityId: activityId }).$promise.then(\n function(data) {\n deferred.resolve(_.map(data, fromDTOToModel));\n }, deferred.reject);\n \n return result;\n }\n\n function insert(model, successCallback, errorCallback) {\n saveToLocalStorage(model);\n let dto = fromModelToDTO(model);\n return repositorySvc.insert(\n CzMsMtRegistry, // $resource\n null, // collection\n dto, // entity\n successCallback,\n errorCallback);\n }\n\n function update(model) {\n saveToLocalStorage(model);\n let dto = fromModelToDTO(model);\n return repositorySvc.customPutWithParams(\n 'update',\n CzMsMtRegistry, \n { id: dto.id },\n dto);\n }\n\n function validate(model) {\n let dto = fromModelToDTO(model);\n return repositorySvc.customPostWithParams(\n 'validate',\n CzMsMtRegistry,\n { },\n dto,\n null,\n null,\n true);\n }\n\n function remove(id) {\n return repositorySvc.customDelete(\n 'delete',\n CzMsMtRegistry,\n { id: id });\n }\n\n let listsCache = null;\n \n function lists() {\n if (!listsCache) {\n listsCache = repositorySvc.customGet('lists', CzMsMtRegistry, {});\n }\n \n return listsCache;\n }\n \n function setRequireSpecialEducation(model, requireSpecialEducation) {\n if (!requireSpecialEducation) {\n model.koD_ZAKA = null;\n model.tyP_TR = null;\n model.tyP_TR2 = null;\n model.zvj = null;\n model.nadani = null;\n model.sz = null;\n model.zz = null;\n model.pspo = null;\n model.iD_ZNEV = null;\n }\n else {\n model.koD_ZAKA = model.studentId;\n }\n }\n \n function fromModelToDTO(model) {\n model.validFromUtc = moment(model.validFromUtc).startOf('day').toDate();\n if (model.okresb === '999xxx' && model.okresb2 != null) {\n model.okresb = '999' + model.okresb2;\n }\n \n delete model.okresb2;\n \n return convertDatesToDateString(model);\n // let dto = _.clone(model, true);\n // if (!!dto.iD_ZNEV && Array.isArray(dto.iD_ZNEV) && dto.iD_ZNEV.length > 0) {\n // dto.iD_ZNEV = dto.iD_ZNEV.join(\",\");\n // } else {\n // dto.iD_ZNEV = null;\n // }\n // return dto;\n }\n \n function fromDTOToModel(dto) {\n if (dto.okresb != null && dto.okresb.startsWith('999'))\n {\n dto.okresb2 = dto.okresb.substring(3);\n dto.okresb = '999xxx';\n }\n return dto;\n }\n\n return {\n createNew: createNew,\n newExportModel: newExportModel,\n findByStudent: findByStudent,\n findLatestByActivity: findLatestByActivity,\n getById: getById,\n insert: insert,\n update: update,\n remove: remove,\n lists: lists,\n setRequireSpecialEducation: setRequireSpecialEducation,\n validate: validate,\n changeStudentId: changeStudentId,\n changeActivityId: changeActivityId,\n exportToXml: exportToXml\n }\n }]);","wbApp.factory('invoiceRecurrenceScheduleSvc', ['$resource', '$q', '$translate', '$filter', 'repositorySvc', 'notificationSvc', 'tenantSettingSvc', 'semesterSvc', 'activityStudentSettingSvc', 'activitySvc',\nfunction ($resource, $q, $translate, $filter, repositorySvc, notificationSvc, tenantSettingSvc, semesterSvc, activityStudentSettingSvc, activitySvc) {\n\n //var ActivityReconciliations = $resource('/Api/ActivityReconciliations/:id', {}, {\n // 'getStudentsByActivity': { method: 'GET', isArray: true, url: '/Api/ActivityReconciliations/GetStudentsByActivity' },\n // 'getStudentsAttendanceByActivity': { method: 'GET', isArray: true, url: '/Api/ActivityReconciliations/GetStudentsAttendanceByActivity' },\n // 'getByStudentAndActivity': { method: 'GET', isArray: true, url: '/Api/ActivityReconciliations/GetByStudentAndActivity' },\n // 'getReconciliationDetail': { method: 'GET', isArray: false, url: '/Api/ActivityReconciliations/GetReconciliationDetail' },\n // 'insertReconciliationDetail': { method: 'POST', url: '/Api/ActivityReconciliations/InsertReconciliationDetail' },\n // 'updateReconciliationDetail': { method: 'POST', url: '/Api/ActivityReconciliations/UpdateReconciliationDetail' },\n // 'deleteReconciliationDetail': { method: 'POST', url: '/Api/ActivityReconciliations/DeleteReconciliationDetail' },\n // 'sendReconciliationNotification': { method: 'POST', url: '/Api/ActivityReconciliations/SendReconciliationNotification' },\n // 'getAvailableExuses': { method: 'GET', url: '/Api/ActivityReconciliations/GetAvailableExuses' }\n //});\n\n // var invoiceRecurrenceSchedules = [];\n\n var InvoiceRecurrenceSchedule = $resource('/Api/InvoiceRecurrenceSchedule/:id', {}, {\n 'query': { method: 'GET', isArray: true },\n 'update': { method: 'POST', url: '/Api/InvoiceRecurrenceSchedule/Update' },\n 'insert': { method: 'POST', url: '/Api/InvoiceRecurrenceSchedule/Insert' },\n 'delete': { method: 'POST', url: '/Api/InvoiceRecurrenceSchedule/Delete' },\n 'getAllForStudentAndActivity': { method: 'GET', isArray: true, url: '/Api/InvoiceRecurrenceSchedule/GetAllForStudentAndActivity' }\n });\n\n function getAllForStudentAndActivity(semesterID, studentID, activityID) {\n var deferred = $q.defer();\n var result = [];\n\n $q.all([\n repositorySvc.customGet('getAllForStudentAndActivity', InvoiceRecurrenceSchedule, {\n studentID: studentID,\n activityID: activityID\n }).$promise,\n // semesterSvc.getAsync(semesterID),\n activityStudentSettingSvc.getByStudentAndActivity(studentID, activityID).$promise,\n activitySvc.getBySemesterIDAndActivityID(semesterID, activityID)\n ]).then(function (data) {\n\n angular.forEach(data[0], function (m) {\n var model = new webooker_acivity_models.RecurringSchedule($translate);\n model.initData(m);\n model.tariffFullName = data[1].tariffName + ' (' + $filter('wbCurrencyFlt')(data[1].tariffPrice) + ')';\n // This does not look right! Why to update price on existing invoices: https://aperus.atlassian.net/browse/WEB-409\n //model.invoice.invoiceLineKindergartenSnackUnitPrice = data[2].defaultSnackPrice;\n //model.invoice.invoiceLineKindergartenLunchUnitPrice = data[2].defaultLunchPrice;\n result.push(model);\n });\n\n deferred.resolve(result);\n }, function (errorResult) {\n deferred.reject(errorResult);\n });\n\n result.$promise = deferred.promise;\n return result;\n }\n\n function createNew(semesterID, studentID, activityID) {\n var m = {\n invoiceRecurrenceScheduleID: 0,\n reccurenceUnitTypeID: 3,\n repeatEveryNoOfUnits: 1,\n endAfterNoOfIssues: null,\n studentID: studentID,\n activityID: activityID,\n semesterID: semesterID,\n startDate: moment().startOf('day').toDate(),\n active: true,\n invoice: {\n customerStudentID: studentID\n }\n };\n\n var model = new webooker_acivity_models.RecurringSchedule($translate);\n model.initData(m);\n\n var deferred = $q.defer();\n model.$promise = deferred.promise;\n\n $q.all([\n semesterSvc.getAsync(semesterID),\n activityStudentSettingSvc.getByStudentAndActivity(studentID, activityID).$promise,\n activitySvc.getBySemesterIDAndActivityID(semesterID, activityID)]\n ).then(function (data) {\n model.endAtSpecificDate = data[0].endDate;\n model.endIssueTypeID = 1;\n model.invoice.invoiceLineKindergartenFeeReccuringUnitPrice = data[1].tariffPrice;\n model.invoice.invoiceLineKindergartenFeeReccuringQty = 1;\n model.tariffFullName = data[1].tariffName + ' (' + $filter('wbCurrencyFlt')(data[1].tariffPrice) + ')';\n model.invoice.invoiceLineKindergartenSnackUnitPrice = data[2].defaultSnackPrice;\n model.invoice.invoiceLineKindergartenLunchUnitPrice = data[2].defaultLunchPrice;\n\n deferred.resolve(model);\n }, function (errorResult) {\n deferred.reject(errorResult);\n });\n\n return model;\n }\n\n function insert(data, successCallback, errorCallback) {\n\n var dto = data.getDTO($translate);\n\n repositorySvc.insert(\n InvoiceRecurrenceSchedule, // $resource\n null, // collection\n dto, // entity\n successCallback,\n errorCallback);\n }\n\n\n function update(data, successCallback, errorCallback) {\n\n var dto = data.getDTO($translate);\n\n repositorySvc.update(\n InvoiceRecurrenceSchedule, // $resource\n null, // collection\n dto, // entity\n successCallback,\n errorCallback,\n 'invoiceRecurrenceScheduleID');\n }\n\n function remove(data, successCallback, errorCallback) {\n\n var dto = data.getDTO($translate);\n\n repositorySvc.remove(\n InvoiceRecurrenceSchedule, // $resource\n null, // collection\n dto, // entity\n successCallback, \n errorCallback,\n null,\n 'invoiceRecurrenceScheduleID');\n }\n\n return {\n createNew: createNew,\n insert: insert,\n update: update,\n remove: remove,\n getAllForStudentAndActivity: getAllForStudentAndActivity\n }\n\n}]);\n","'use strict';\nangular.module('authDirectives', []).directive('authDirective', function ($modal) {\n return {\n restrict: 'C',\n link: function (scope, elem, attrs) {\n scope.$on('event:auth-loginRequired', function () {\n console.log('auth-loginRequired');\n\n\n\n });\n }\n };\n});","wbApp.constant('uiCodemirrorConfig', {})\n .directive('uiCodemirror', ['$timeout', 'uiCodemirrorConfig',\nfunction uiCodemirrorDirective($timeout, uiCodemirrorConfig) {\n\n return {\n restrict: 'EA',\n require: '?ngModel',\n compile: function compile() {\n\n // Require CodeMirror\n if (angular.isUndefined(window.CodeMirror)) {\n throw new Error('ui-codemirror needs CodeMirror to work... (o rly?)');\n }\n\n return postLink;\n }\n };\n\n function postLink(scope, iElement, iAttrs, ngModel) {\n\n var codemirrorOptions = angular.extend(\n { value: iElement.text() },\n uiCodemirrorConfig.codemirror || {},\n scope.$eval(iAttrs.uiCodemirror),\n scope.$eval(iAttrs.uiCodemirrorOpts)\n );\n\n var codemirror = newCodemirrorEditor(iElement, codemirrorOptions);\n\n configOptionsWatcher(\n codemirror,\n iAttrs.uiCodemirror || iAttrs.uiCodemirrorOpts,\n scope\n );\n\n configNgModelLink(codemirror, ngModel, scope);\n\n configUiRefreshAttribute(codemirror, iAttrs.uiRefresh, scope);\n\n // Allow access to the CodeMirror instance through a broadcasted event\n // eg: $broadcast('CodeMirror', function(cm){...});\n scope.$on('CodeMirror', function (event, callback) {\n if (angular.isFunction(callback)) {\n callback(codemirror);\n } else {\n throw new Error('the CodeMirror event requires a callback function');\n }\n });\n\n // onLoad callback\n if (angular.isFunction(codemirrorOptions.onLoad)) {\n codemirrorOptions.onLoad(codemirror);\n }\n }\n\n function newCodemirrorEditor(iElement, codemirrorOptions) {\n var codemirrot;\n\n if (iElement[0].tagName === 'TEXTAREA') {\n // Might bug but still ...\n codemirrot = window.CodeMirror.fromTextArea(iElement[0], codemirrorOptions);\n } else {\n iElement.html('');\n codemirrot = new window.CodeMirror(function (cm_el) {\n iElement.append(cm_el);\n }, codemirrorOptions);\n }\n\n return codemirrot;\n }\n\n function configOptionsWatcher(codemirrot, uiCodemirrorAttr, scope) {\n if (!uiCodemirrorAttr) { return; }\n\n var codemirrorDefaultsKeys = Object.keys(window.CodeMirror.defaults);\n scope.$watch(uiCodemirrorAttr, updateOptions, true);\n function updateOptions(newValues, oldValue) {\n if (!angular.isObject(newValues)) { return; }\n codemirrorDefaultsKeys.forEach(function (key) {\n if (newValues.hasOwnProperty(key)) {\n\n if (oldValue && newValues[key] === oldValue[key]) {\n return;\n }\n\n codemirrot.setOption(key, newValues[key]);\n }\n });\n }\n }\n\n function configNgModelLink(codemirror, ngModel, scope) {\n if (!ngModel) { return; }\n // CodeMirror expects a string, so make sure it gets one.\n // This does not change the model.\n ngModel.$formatters.push(function (value) {\n if (angular.isUndefined(value) || value === null) {\n return '';\n } else if (angular.isObject(value) || angular.isArray(value)) {\n throw new Error('ui-codemirror cannot use an object or an array as a model');\n }\n return value;\n });\n\n\n // Override the ngModelController $render method, which is what gets called when the model is updated.\n // This takes care of the synchronizing the codeMirror element with the underlying model, in the case that it is changed by something else.\n ngModel.$render = function () {\n //Code mirror expects a string so make sure it gets one\n //Although the formatter have already done this, it can be possible that another formatter returns undefined (for example the required directive)\n var safeViewValue = ngModel.$viewValue || '';\n codemirror.setValue(safeViewValue);\n };\n\n\n // Keep the ngModel in sync with changes from CodeMirror\n codemirror.on('change', function (instance) {\n var newValue = instance.getValue();\n if (newValue !== ngModel.$viewValue) {\n scope.$evalAsync(function () {\n ngModel.$setViewValue(newValue);\n });\n }\n });\n }\n\n function configUiRefreshAttribute(codeMirror, uiRefreshAttr, scope) {\n if (!uiRefreshAttr) { return; }\n\n scope.$watch(uiRefreshAttr, function (newVal, oldVal) {\n // Skip the initial watch firing\n if (newVal !== oldVal) {\n $timeout(function () {\n codeMirror.refresh();\n });\n }\n });\n }\n}]);","'use strict';\n\nwbApp.directive('wbErrorAlert',\n function () {\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n scope: { serverError: '=ngModel' },\n replace: true,\n template:\n \"
\" +\n \"{{'TXT_TITLE_FIX_ERRORS' | translate}}\" +\n \"\" +\n \"\" +\n \"\" +\n \"
\"\n }\n });","wbApp.directive('wbToastUiEditor', ['$window', '$timeout', 'languageService',\n function ($window, $timeout, languageService) {\n let currentLangKey = languageService.currentLangKey();\n \n\n function isHtml(input) {\n //console.error(input);\n return /<[a-z]+\\d?(\\s+[\\w-]+=(\"[^\"]*\"|'[^']*'))*\\s*\\/?>|&#?\\w+;/i.test(input);\n }\n\n // issue: https://github.com/nhn/tui.editor/issues/485\n //
to \\\n function transformMarkdownOut(input) {\n return input.replace(/
/g, \"\\\\\"); //.replace(/
/g, \"\\\\\\n\");\n }\n\n // issue: https://github.com/nhn/tui.editor/issues/485\n // \\ to
\n function transformMarkdownIn(input) {\n return input.replace(/\\\\\\n/g, \"
\\n\");\n }\n \n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n status: '=ngModel',\n height: '=ngHeight',\n },\n replace: true,\n template: '
',\n link: function (scope, element, attrs, ctrl) {\n $timeout(function () {\n const editor = new toastui.Editor({\n el: element[0], \n height: scope.height || '300px',\n initialValue: transformMarkdownIn(ctrl.$viewValue || ''),\n hideModeSwitch: false,\n initialEditType: 'wysiwyg',\n language: currentLangKey,\n events: {\n change: function(data) {\n let markDown = transformMarkdownOut(editor.getMarkdown());\n //console.error(markDown);\n ctrl.$setViewValue(markDown);\n }\n },\n // hooks: {\n // addImageBlobHook(imgeBlob, callback) {\n // }\n // }, \n toolbarItems: [\n ['heading', 'bold', 'italic', 'strike'],\n ['hr', 'quote'],\n ['ul', 'ol', 'task', 'indent', 'outdent'],\n ['table', 'link'],\n ['code', 'codeblock'],\n ['scrollSync'],\n ], \n });\n editor.removeHook('addImageBlobHook');\n\n ctrl.$render = function () {\n if (isHtml(ctrl.$viewValue)) {\n editor.setHTML(ctrl.$viewValue);\n } else {\n editor.setMarkdown(transformMarkdownIn(ctrl.$viewValue));\n }\n }\n });\n }\n }\n }]);","wbApp.directive('wbAccountingBookCombo', ['$timeout', '$translate', 'accountingBookSvc',\n function ($timeout, $translate, accountingBookSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n if (model.isDefault) {\n return \"
\" +\n \"
\" + model.name + \"
\" +\n \"
\" + (model.subjectName || '') + \"
\" +\n \"
\";\n } else {\n return \"
\" +\n \"
\" + model.name + \"
\" +\n \"
\" + (model.subjectName || '') + \"
\" +\n \"
\";\n }\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = accountingBookSvc.getAllAsync();\n\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_ACCOUNTING_BOOK'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: models\n });\n\n ctrl.$render();\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]); ","wbApp.directive('wbActionCombo', ['$timeout', '$translate', '$filter', 'courseSvc',\n function ($timeout, $translate, $filter, courseSvc) {\n function formatResult(course) {\n if (!course) { return; }\n\n return \"
\" +\n \"
\" + $filter('courseFullName')(course) + \"
\" +\n \"
\" + (!!course.firstLesson ? $filter('date')(course.firstLesson, 'EEE HH:mm').toUpperCase() : '') + \"
\" +\n \"
\" + course.filled + \"/\" + course.capacity + \"
\" +\n \"
\";\n }\n\n function formatSelection(course) {\n return $filter('courseFullName')(course);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n semesterId: '=',\n },\n link: function (scope, elm, attrs, ctrl) {\r\n\n var courses = courseSvc.getAllActionsAsync(scope.semesterId, true);\n\n $timeout(function () {\r\n $(elm).select2({\r\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_COURSE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (course) { return course.courseID; },\n data: courses\r\n });\r\n\r\n ctrl.$render();\r\n });\n\n ctrl.$render = function () {\r\n courses.$promise.then(function () {\r\n $(elm).select2('val', ctrl.$viewValue);\r\n });\r\n }\n\n scope.$watch('semesterId', function (newValue) {\r\n var newCourses = courseSvc.getAllActionsAsync(newValue);\n newCourses.$promise.then(function () {\r\n if (newCourses !== courses) {\r\n courses.length = 0;\n courses.push.apply(courses, newCourses);\r\n }\n\n for (var i = 0; i < courses.length; i++) {\r\n if (courses[i].courseID == ctrl.$viewValue) {\r\n return;\r\n }\r\n }\n\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\r\n });\r\n });\n\n elm.bind(\"$destroy\", function () {\r\n elm.select2(\"destroy\");\r\n });\n\n attrs.$observe('readonly', function (value) {\r\n elm.select2('readonly', !!value);\r\n });\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbActivityCombo', ['$timeout', '$translate', 'activitySvc', '$q',\n function ($timeout, $translate, activitySvc, $q) {\n function formatResult(model) {\n if (!model) { return; }\n\n return model.name;\n }\n\n function formatSelection(model) {\n if (model) {\n return model.name;\n }\n\n return \"\";\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n semesterId: '='\n },\n link: function (scope, elm, attrs, ctrl) {\n\n let linkSemesterId = scope.semesterId;\n let activities;\n if (scope.semesterId) {\n activities = activitySvc.getAllBySemesterIDAsync(scope.semesterId);\n } else {\n let deferred = $q.defer();\n activities = [];\n activities.$promise = deferred.promise;\n deferred.resolve(activities);\n }\n\n activities.$promise.then(function() {\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_ACTIVITY'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (activity) { return activity.activityID; },\n data: activities\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n if (activities.$promise) {\n activities.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n } else {\n $(elm).select2('val', ctrl.$viewValue);\n }\n }\n\n scope.$watch('semesterId', function (newValue) {\n if (!newValue) {\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\n return;\n }\n\n if (newValue == linkSemesterId) {\n return;\n }\n linkSemesterId = null;\n\n activitySvc.getAllBySemesterIDAsync(newValue)\n .$promise.then(function (newActivities) {\n activities.length = 0;\n activities.push.apply(activities, newActivities);\n\n for (var i = 0; i < activities.length; i++) {\n if (activities[i].activityID == ctrl.$viewValue) {\n return;\n }\n }\n\n if (activities.length > 0) {\n $(elm).select2('val', activities[0].activityID);\n ctrl.$setViewValue(activities[0].activityID);\n } else {\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\n }\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n });\n }\n }\n }]);","wbApp.directive('wbAddressEdit', ['$timeout',\n function ($timeout) {\n\n return {\n restrict: 'A',\n scope: {\n location: '='\n },\n template: '' +\n '' +\n '',\n link: function (scope, iElem, attr, controller) {\n\n var defaultLocation = {\n longitude: 15.47296200000005200000,\n latitude: 49.81749199999999000000\n };\n\n scope.mapZoom = 16;\n\n scope.markerOptions = {\n draggable: true,\n labelContent: \"\",\n labelAnchor: \"0 0\",\n labelClass: \"marker-labels\"\n }\n\n scope.control = {};\n\n scope.$on('activeTabChanged', function (e, data) {\n $timeout(function () {\n scope.control.refresh(scope.mapCenter);\n },100);\n });\n\n scope.markerEvents = {\n dragend: function (marker, eventName, args) {\n if (marker) {\n var markerPos = marker.getPosition();\n if (markerPos) {\n var lat = markerPos.lat();\n var lng = markerPos.lng();\n }\n }\n if (!scope.location) {\n scope.location = {};\n }\n\n scope.location.latitude = lat;\n scope.location.longitude = lng;\n }\n }\n\n scope.$watch('location', function (val) {\n // console.log(val);\n if (!val || (!val.longitude && !val.latitude)) {\n val = defaultLocation;\n scope.mapZoom = 6;\n } else {\n scope.mapZoom = 16;\n }\n\n scope.mapCenter = angular.copy(val);\n scope.markerPos = angular.copy(val);\n }, true);\n }\n }\n }]);","wbApp.directive('wbAgeRangeWithAddCombo', [\r\n function () {\r\n \r\n return {\r\n restrict: 'A', \r\n priority: 1,\r\n scope: {\r\n ngModel: '='\r\n },\r\n template:\r\n '
' +\r\n ' ' +\r\n ' ' +\r\n ' ' +\r\n ' ' + \r\n '
',\r\n controller: ['$scope', '$modal', 'securitySvc', 'ageRangeSvc',\r\n function ($scope, $modal, securitySvc, ageRangeSvc) {\r\n\r\n $scope.disableAddBtn = !securitySvc.isInRole('AgeRange.Insert')\r\n\r\n $scope.onAddClick = function () {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = ageRangeSvc.createNew();\r\n detailDialogPromise.$scope.onDataSaved = function(model) {\r\n if (!!model) {\r\n $scope.ngModel = model.ageRangeID; \r\n } \r\n };\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n var detailDialogPromise = $modal({\r\n templateUrl: 'setting/age-ranges/age-ranges-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n }]\r\n }\r\n }]);","'use strict';\n\nwbApp.directive('wbAlert', ['$timeout', '$alert', 'notificationSvc',\n function ($timeout, $alert, notificationSvc) {\n return {\n restrict: 'A',\n priority: 1,\n replace: true,\n scope: {},\n link: function (scope, elm, attrs, controller) {\n },\n controller: ['$scope', function ( $scope ) {\n $scope.queue = notificationSvc.getQueue();\n\n $scope.$watchCollection('queue', function (newCollection, oldCollection, scope)\n {\n if (newCollection.length) {\n var newMessage = newCollection[0];\n newCollection.splice(0, 1);\n\n var myAlert = $alert(\n {\n title: newMessage.title,\n content: newMessage.content,\n placement: 'top-right',\n animation: 'am-fade-and-scale',\n container: '#alertContainer',\n type: newMessage.type,\n show: true\n });\n\n $timeout(function () {\n myAlert.hide();\n }, 5000)\n }\n });\n\n }]\n }\n }]);","wbApp.directive('wbAmortizationScheduleModeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(amortizationScheduleMode) {\n if (!amortizationScheduleMode) { return; }\n return $translate.instant(amortizationScheduleMode.text);\n }\n\n function formatSelection(amortizationScheduleMode) {\n return $translate.instant(amortizationScheduleMode.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_VAL_DO_NOT_OFFER_TO_CLIENTS' },\n { id: 1, text: 'TXT_VAL_OFFER_TO_CLIENTS_AS_AN_OPTION' },\n { id: 2, text: 'TXT_VAL_FORCED_TO_ALL_CLIENTS' },\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbColorPicker', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n scope: { ngModel: '=' },\n template: '
',\n link: function (scope, elm, attrs, ctrl) {\n scope.onColorClick = function (e) {\n var color = $(e.target).css(\"background-color\");\n if (color) {\n ctrl.$setViewValue(color, e);\n ctrl.$render();\n }\n }\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n var colorUtils = new webooker_utils.ColorUtils();\n\n return colorUtils.rgbToInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n var colorUtils = new webooker_utils.ColorUtils();\n\n if (!value) {\n return colorUtils.intToRgb(0);\n } else {\n return colorUtils.intToRgb(value);\n }\n });\n\n ctrl.$render = function () {\n elm.children().css('background-color', ctrl.$viewValue);\n };\n }\n }\n }]);\n","wbApp.directive('wbCompensationGroupCombo', ['$timeout', '$translate', 'compensationGroupSvc',\n function ($timeout, $translate, compensationGroupSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n var name;\n if (model.isDeleted) {\n name = model.name + ' (' + $translate.instant('TXT_VAL_DELETED') + ')';\n } else if (!model.active) {\n name = model.name + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n name = model.name;\n }\n\n if (model.isDefault) {\n return \"\" + name + \"\";\n } else {\n return name;\n }\n }\n\n function formatSelection(model) {\n if (model.isDeleted) {\n return model.name + ' (' + $translate.instant('TXT_VAL_DELETED') + ')';\n } else if (!model.active) {\n return model.name + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n return model.name;\n }\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1, \n link: function (scope, elm, attrs, ctrl) {\n\n var models = compensationGroupSvc.getLookupActiveAsync(!!ctrl.$modelValue ? [ctrl.$modelValue] : null);\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_COMPENSATION_GROUP'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: 5,\n data: models,\n matcher: function (term, text, data) {\r\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\r\n }\n });\n\n ctrl.$render();\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (String.prototype.isNullOrWhitespace(viewValue)) {\r\n return null;\r\n } else {\r\n return parseInt(viewValue);\r\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!typeof value === 'undefined' || value === null) {\r\n return value;\r\n } else {\r\n return value + \"\";\r\n }\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n if (!_.find(models, { id: ctrl.$modelValue })) {\n // employee is not in the list, reload!\n var newModels = compensationGroupSvc.getLookupActiveAsync(!!ctrl.$modelValue ? [ctrl.$modelValue] : null);\n newModels.$promise.then(function () {\n models.length = 0;\n models.push.apply(models, newModels);\n\n $(elm).select2('val', ctrl.$viewValue);\n });\n } else {\n $(elm).select2('val', ctrl.$viewValue);\n }\n });\n }\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]); ","'use strict';\n\nwbApp.directive('wbCompensationGroupMultiSelect', ['$timeout', '$translate', 'compensationGroupSvc',\n function ($timeout, $translate, compensationGroupSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n var name;\n if (model.isDeleted) {\n name = model.name + ' (' + $translate.instant('TXT_VAL_DELETED') + ')';\n } else if (!model.active) {\n name = model.name + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n name = model.name;\n }\n\n if (model.isDefault) {\n return \"\" + name + \"\";\n } else {\n return name;\n }\n }\n\n function formatSelection(model) {\n if (model.isDeleted) {\n return model.name + ' (' + $translate.instant('TXT_VAL_DELETED') + ')';\n } else if (!model.active) {\n return model.name + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n return model.name;\n }\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = compensationGroupSvc.getLookupActiveAsync(!!ctrl.$modelValue ? ctrl.$modelValue : null);\n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5, \n data: models,\n multiple: true,\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n ctrl.$render();\n });\n });\n\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return [];\n } else {\n if (Array.isArray(viewValue)) {\n return _.map(viewValue, function (n) { return parseInt(n); });\n } else {\n return _.map(viewValue.split(','), function (n) { return parseInt(n); });\n }\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n if (Array.isArray(value)) {\n return _.map(value, function (n) { return n + ''; }).join();\n } else {\n return _.map(value.split(','), function (n) { return n + ''; }).join();\n }\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]);","wbApp.directive('wbCourseCategoryCombo', ['$timeout', '$translate', '$filter', 'courseCategorySvc',\n function ($timeout, $translate, $filter, courseCategorySvc) {\n function formatResult(model) {\r\n if (!model) { return; }\n\n return model.text;\r\n }\n\n function formatSelection(model) {\r\n if (model) {\r\n return model.text;\r\n }\n\n return \"\";\r\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n link: function (scope, elm, attrs, ctrl) {\r\n\n var courseCategories = _.orderBy(courseCategorySvc.getAll(), 'text');\n\n $timeout(function () {\r\n $(elm).select2({\r\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n // minimumResultsForSearch: -1,\n id: function (courseCategory) { return courseCategory.courseCategoryID; },\n data: courseCategories\r\n });\r\n\r\n ctrl.$render();\r\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\r\n if (!viewValue) {\r\n return 0;\r\n } else {\r\n return parseInt(viewValue);\r\n }\r\n });\n\n ctrl.$formatters.unshift(function (value) {\r\n if (!value) {\r\n return \"\";\r\n } else {\r\n return value + \"\";\r\n }\r\n });\n\n ctrl.$render = function () {\r\n $(elm).select2('val', ctrl.$viewValue);\r\n }\n\n elm.bind(\"$destroy\", function () {\r\n elm.select2(\"destroy\");\r\n });\n\n attrs.$observe('readonly', function (value) {\r\n elm.select2('readonly', !!value);\r\n });\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbCourseCombo', ['$timeout', '$translate', '$filter', 'courseSvc',\n function ($timeout, $translate, $filter, courseSvc) {\n function formatResult(course) {\n if (!course) { return; }\n\n return \"
\" +\n \"
\" + $filter('courseFullName')(course) + \"
\" +\n \"
\" + (!!course.firstLesson ? $filter('date')(course.firstLesson, 'EEE HH:mm').toUpperCase() : '') + \"
\" +\n \"
\" + course.filled + \"/\" + course.capacity + \"
\" +\n \"
\";\n }\n\n function formatSelection(course) {\n return $filter('courseFullName')(course);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n semesterId: '=',\n },\n link: function (scope, elm, attrs, ctrl) {\r\n\n var courses = courseSvc.getAllAsync(scope.semesterId, true);\n\n $timeout(function () {\r\n $(elm).select2({\r\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_COURSE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5,\n id: function (course) { return course.courseID; },\n data: courses,\r\n matcher: function (term, text, course) {\r\n var courseFullName = $filter('courseFullName')(course);\r\n var firstLesson = !!course.firstLesson ? $filter('date')(course.firstLesson, 'EEE HH:mm').toUpperCase() : '';\r\n return courseFullName.toUpperCase().indexOf(term.toUpperCase()) >= 0 ||\r\n firstLesson.toUpperCase().indexOf(term.toUpperCase()) >= 0;\r\n }\r\n });\n\n ctrl.$render();\r\n });\n\n ctrl.$render = function () {\r\n courses.$promise.then(function () {\r\n $(elm).select2('val', ctrl.$viewValue);\r\n });\r\n }\n\n scope.$watch('semesterId', function (newValue) {\r\n var newCourses = courseSvc.getAllAsync(newValue);\n newCourses.$promise.then(function () {\r\n if (newCourses !== courses) {\r\n courses.length = 0;\n courses.push.apply(courses, newCourses);\r\n }\n\n for (var i = 0; i < courses.length; i++) {\r\n if (courses[i].courseID == ctrl.$viewValue) {\r\n return;\r\n }\r\n }\n\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\r\n });\r\n });\n\n elm.bind(\"$destroy\", function () {\r\n elm.select2(\"destroy\");\r\n });\n\n attrs.$observe('readonly', function (value) {\r\n elm.select2('readonly', !!value);\r\n });\r\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbCourseScheduleCombo', ['$timeout', '$translate', '$filter', 'courseScheduleSvc',\n function ($timeout, $translate, $filter, courseScheduleSvc) {\n function formatResult(courseSchedule) {\n if (!courseSchedule) { return; }\n\n return \"
\" +\n \"
\" + $filter('date')(courseSchedule.startDate, 'dd.MM.yy') + \"
\" +\n \"
\" +\n $filter('date')(courseSchedule.startDate, 'EEE HH:mm').toUpperCase() +\n ' - ' +\n $filter('date')(courseSchedule.endDate, 'HH:mm').toUpperCase() +\n \"
\" +\n \"
\" + courseSchedule.teacher + \"
\" +\n \"
\" + courseSchedule.filled + '/' + courseSchedule.capacity + \"
\" +\n \"
\";\n }\n\n function formatSelection(courseSchedule) {\n return $filter('date')(courseSchedule.startDate, 'dd. MM. yyyy - (EEE HH:mm').toUpperCase() +\n ' - ' +\n $filter('date')(courseSchedule.endDate, 'HH:mm)').toUpperCase();\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n courseId: '=',\n ngModel: '='\n },\n link: function (scope, elm, attrs, ctrl) {\n\n var schedules = !!scope.courseId\n ? courseScheduleSvc.getAllSortedAsync(scope.courseId)\n : [];\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_COURSE_SCHEDULE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (schedule) { return schedule.courseScheduleID; },\n data: schedules\n });\n\n ctrl.$render = function () {\n if(ctrl.$viewValue) {\n if (!schedules.$promise) {\n schedules = courseScheduleSvc.getAllSortedAsync(ctrl.$viewValue)\n }\n\n schedules.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n }\n\n scope.$watch('courseId', function (newValue) {\n if (!!newValue) {\n var newSchedules = courseScheduleSvc.getAllSortedAsync(newValue);\n newSchedules.$promise.then(function () {\n if (newSchedules !== schedules) {\n schedules.length = 0;\n schedules.push.apply(schedules, newSchedules);\n }\n\n for (var i = 0; i < schedules.length; i++) {\n if (schedules[i].courseScheduleID == ctrl.$viewValue) {\n return;\n }\n }\n\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\n })\n } else {\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n ctrl.$render();\n\n }, 1);\n }\n }\n }]);","'use strict';\n\n// http://eonasdan.github.io/bootstrap-datetimepicker/\n\nwbApp.directive('wbDateTimePicker', ['$timeout',\n function ($timeout) {\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n ngModel: '=',\n placeholder: '@'\n },\n template: \n '
' +\n '' +\n '' +\n '' +\n '
',\n replace: true,\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).datetimepicker({\n pickDate: true, //en/disables the date picker\n pickTime: true, //en/disables the time picker\n useMinutes: true, //en/disables the minutes picker\n useSeconds: false, //en/disables the seconds picker\n minuteStepping: 15, //set the minute stepping\n // startDate: 1 / 1 / 1970, //set a minimum date\n //endDate: (today +50 years), //set a maximum date\n language: 'cs', //sets language locale\n defaultDate: \"\", //sets a default date, accepts js dates, strings and moment objects\n disabledDates: [], //an array of dates that cannot be selected\n //enabledDates:1/1/1970, //an array of dates that can be selected\n icons: {\n time: \"fa fa-clock-o\",\n date: \"fa fa-calendar\",\n up: \"fa fa-arrow-up\",\n down: \"fa fa-arrow-down\"\n }\n });\n\n scope.$watch('ngModel', function (newValue) {\n var picker = $(elm).data(\"DateTimePicker\");\n if (picker) {\n var date = picker.getDate();\n if (newValue !== date) {\n picker.setDate(newValue);\n }\n }\n });\n\n $(elm).on(\"change.dp\", function (e) {\n\n var inputVal = $(elm).find('input').val();\n\n if (e.date !== undefined) {\n if (!inputVal) {\n scope.ngModel = null;\n } else {\n if (scope.ngModel !== e.date) {\n scope.ngModel = e.date;\n }\n }\n scope.$apply();\n }\n });\n\n }, 1);\n }\n }\n }\n]);\n","'use strict';\n\nwbApp.directive('wbEmailCategoryCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_VAL_EMAIL_CATEGORY_DEFAULT' },\n { id: 2, text: 'TXT_VAL_EMAIL_CATEGORY_SEASON_TICKET' },\n { id: 3, text: 'TXT_VAL_EMAIL_CATEGORY_MULTI_ATTEND' },\n { id: 4, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_1' },\n { id: 5, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_2' },\n { id: 6, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_3' },\n { id: 7, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_4' },\n { id: 8, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_5' },\n { id: 9, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_6' },\n { id: 10, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_7' },\n { id: 11, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_8' },\n { id: 12, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_9' },\n { id: 13, text: 'TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_10' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbEmployeeCombo', ['$timeout', '$translate', 'employeeSvc',\n function ($timeout, $translate, employeeSvc) {\n function formatResult(employee) {\n if (!employee) { return; }\n if (employee.isDeleted) {\n return employee.fullName + ' (' + $translate.instant('TXT_VAL_DELETED') + ')';\n } else if (!employee.active) {\n return employee.fullName + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n return employee.fullName;\n }\n }\n\n function formatSelection(employee) {\n if (employee.isDeleted) {\n return employee.fullName + ' (' + $translate.instant('TXT_VAL_DELETED') + ')';\n } else if (!employee.active) {\n return employee.fullName + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n return employee.fullName;\n }\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n var employees = employeeSvc.getAllActiveAsync(ctrl.$modelValue); \n\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_EMPLOYEE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5,\n data: employees,\n id: function (employee) { return employee.employeeID; },\n matcher: function (term, text, employee) {\n return employee.fullName.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n ctrl.$render();\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n employees.$promise.then(function () {\n if (!_.find(employees, { employeeID: ctrl.$modelValue })) {\n // employee is not in the list, reload!\n var newEmployees = employeeSvc.getAllActiveAsync(ctrl.$modelValue);\n newEmployees.$promise.then(function () {\n employees.length = 0;\n employees.push.apply(employees, newEmployees);\n\n $(elm).select2('val', ctrl.$viewValue);\n });\n } else {\n $(elm).select2('val', ctrl.$viewValue);\n }\n });\n }\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]);","wbApp.directive('wbExcuseThresholdTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_VAL_NO_OF_HOURS_BEFORE_START' },\n { id: 1, text: 'TXT_VAL_AT_SPECIFIC_TIME_ON_START_DATE' },\n { id: 2, text: 'TXT_VAL_AT_SPECIFIC_TIME_ON_DATE_BEFORE_START_DATE' },\n { id: 3, text: 'TXT_VAL_AT_SPECIFIC_TIME_ON_PREV_BUSINESS_DAY' },\n { id: 4, text: 'TXT_VAL_AT_SPECIFIC_TIME_ON_PREV_PREV_BUSINESS_DAY' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbFranchiseCentralsCombo', ['$timeout', '$translate', 'tenantInfo',\n function ($timeout, $translate, tenantInfo) {\n function formatResult(franchiseCentral) { \n return franchiseCentral.alias;\n }\n\n function formatSelection(franchiseCentral) {\n return franchiseCentral.alias;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_FRANCHISE_CENTRAL'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: -1,\n id: function(n) { return n.tenantID },\n data: _.map(tenantInfo.franchiseCentrals, function (fc) {\n return {\n tenantID: fc.tenantID,\n alias: fc.alias,\n disabled: !fc.isActive\n };\n })\n });\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbGrid3', ['$window', '$translate', '$filter', '$timeout', 'messageBoxSvc', 'securitySvc', 'gridSortSvc',\n function ($window, $translate, $filter, $timeout, messageBoxSvc, securitySvc, gridSortSvc) {\n\n return {\n restrict: 'A',\n scope: {\n gridSettings: '=',\n gridDataSource: '=',\n onDelete: '&',\n onEdit: '&',\n onAdd: '&',\n onCopy: '&',\n onSelectionChanged: '&',\n onFilterApplied: '&',\n resource: '@',\n idPrefix: '@'\n },\n template:\n '
' +\n '
' +\n '
' +\n '' +\n '' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '' +\n '' +\n '
' +\n '
' +\n '
' + \n '
' +\n '
',\n replace: true,\n compile: function (tElem, tAttrs) {\n return {\n pre: function (scope, iElem, iAttrs) {\n\n scope.idPrefixFixed = scope.idPrefix;\n\n var clickTimer, lastRowCLickedId;\n\n function onRowClick(e){ \n var rows = scope.gridInstance.getSelectedRowsData();\n\n if (clickTimer && lastRowCLickedId === e.rowIndex) {\n clearTimeout(clickTimer);\n clickTimer = null;\n lastRowCLickedId = e.rowIndex;\n\n raiseOnEdit(e.data);\n\n } else {\n clickTimer = setTimeout(function () {\n lastRowCLickedId = null;\n }, 250);\n }\n\n lastRowCLickedId = e.rowIndex;\n }\n\n var savedColumnVisibility = [];\n\n var defaultOptions = {\n width: '100%',\n height: '100%',\n cacheEnabled: false,\n rowAlternationEnabled: true,\n showRowLines: true,\n focusStateEnabled: false,\n hoverStateEnabled: true,\n bindingOptions: {\n dataSource: 'gridDataSource',\n filterRow: 'gridSettings.filterRow',\n searchPanel: 'gridSettings.searchPanel'\n },\n paging: {\n pageSize: 30\n },\n pager: {\n showInfo: true,\n showPageSizeSelector: true,\n showNavigationButtons: true,\n visible: \"true\"\n },\n filterRow: { \n showOperationChooser: true\n },\n groupPanel: {\n visible: false\n },\n selection: {\n mode: 'single'\n },\n editing: {\n allowUpdating: false,\n allowDeleting: false,\n allowAdding: false\n },\n export: {\n proxyUrl: 'Api/Proxy'\n },\n onExporting: function (e) {\n if (!scope.settings.exportVisibleColumnsOnly) {\n e.component.beginUpdate();\n savedColumnVisibility = [];\n var columns = e.component.option('columns');\n for (var i = 0; i < columns.length; i++) {\n var col = columns[i];\n savedColumnVisibility[col.dataField] = e.component.columnOption(col.dataField, \"visible\");\n e.component.columnOption(col.dataField, \"visible\", true);\n }\n }\n },\n onExported: function (e) {\n if (!scope.settings.exportVisibleColumnsOnly) {\n var columns = e.component.option('columns');\n for (var i = 0; i < columns.length; i++) {\n var col = columns[i];\n e.component.columnOption(col.dataField, \"visible\", savedColumnVisibility[col.dataField]);\n }\n e.component.endUpdate();\n }\n },\n allowColumnResizing: true,\n remoteOperations: false,\n onSelectionChanged: function (selectedRowsInfo) {\n scope.prepareToolButtons();\n\n if (iAttrs.onSelectionChanged) {\n if (selectedRowsInfo.selectedRowsData.length > 0) {\n scope.onSelectionChanged({ model: selectedRowsInfo.selectedRowsData[0] });\n }\n }\n },\n onRowClick: onRowClick,\n customCommands: [],\n masterDetail: {\n enabled: false,\n settings: {\n selection: {\n mode: 'single'\n },\n }\n },\n columnChooser: {\n enabled: false,\n mode: 'select',\n title: $translate.instant('TXT_COLUMN_CHOOSER')\n },\n stateStoring: {\n enabled: false,\n storageKey: scope.idPrefixFixed + '-grid-setting',\n type: 'localStorage',\n ignoreColumnOptionNames: []\n }\n };\n\n if (!scope.gridSettings.filterRow) {\n scope.gridSettings.filterRow = {};\n }\n\n scope.settings = angular.extend({}, defaultOptions, scope.gridSettings);\n\n scope.settings.stateStoring.enabled = scope.gridSettings.shouldShowColumnChooser;\n\n // scope.settings.columns = scope.gridSettings.columns;\n\n for(let i = 0; i < scope.settings.columns.length; i++) {\n let column = scope.settings.columns[i];\n if (column.calculateSortValue != null && column.dataField != null) {\n column.calculateFilterExpression = (filterValue, selectedFilterOperation, target) =>\n gridSortSvc.filterExpressionWithoutAccents(filterValue, selectedFilterOperation, target, column.dataField)\n }\n }\n\n scope.detailSetting = !!scope.gridSettings.masterDetail\n ? scope.gridSettings.masterDetail.settings\n : {};\n if (scope.detailSetting.bindingOptions) {\n scope.detailSetting.bindingOptions.onSelectionChanged = '$parent.detailOnSelectionChanged';\n scope.detailSetting.bindingOptions.onRowPrepared = '$parent.detailonRowPrepared';\n }\n\n scope.detailOnSelectionChanged = function (e) {\n if (scope.detailSetting.onSelectionChanged) {\n scope.detailSetting.onSelectionChanged(e);\n }\n }\n\n scope.detailonRowPrepared = function (e) {\n if (scope.detailSetting.onRowPrepared) {\n scope.detailSetting.onRowPrepared(e);\n }\n }\n\n if (scope.settings.masterDetail.settings.columns) {\n scope.settings.masterDetail.settings.columns.unshift(\n {\n dataField: 'siteKeyGroupID',\n cellTemplate: 'detailCommandBtnCellTemplate',\n allowFiltering: false,\n allowGrouping: false,\n allowHiding: false,\n allowReordering: false,\n allowResizing: false,\n allowSorting: false,\n caption: '',\n width: '38px'\n });\n }\n\n scope.commandMenuDS = [];\n scope.detailCommandMenuDS = [];\n\n function raiseOnEdit(data) {\n if (!scope.shouldDisableEdit(data)) {\n scope.onEdit({ model: data });\n }\n }\n\n function raiseOnCopy(data) {\n scope.onCopy({ model: data });\n }\n\n scope.menuItemClicked = function (val) {\n switch (val.itemData.id) {\n case 'add':\n if (iAttrs.onAdd) {\n scope.onAdd();\n }\n break;\n case 'edit':\n raiseOnEdit(val.itemData.data);\n break;\n case 'copy':\n if (iAttrs.onAdd) {\n raiseOnCopy(val.itemData.data);\n }\n break;\n case 'delete':\n if (iAttrs.onDelete) {\n scope.showDeleteMsg(val.itemData.data);\n }\n break;\n default:\n if (val.itemData.callback) {\n val.itemData.callback(val.itemData.data);\n }\n break;\n }\n }\n\n var contextMenu = new DevExpress.ui.dxContextMenu($(\"
\").appendTo(\"body\"), {\n target: $(),\n dataSource: scope.commandMenuDS,\n onItemClick: scope.menuItemClicked,\n position: { offset: '25 20' },\n alternativeInvocationMode: { enabled: true },\n width: function (w) {\n return w + 150 + 'px';\n }\n });\n\n scope.shouldDisableAdd = function () {\n var enabled = true;\n enabled = enabled && !!iAttrs.onAdd;\n enabled = enabled && securitySvc.isInRole((scope.resource || '') + '.Insert');\n if (!!scope.gridSettings.shouldDisableAdd) {\n enabled = enabled && !scope.gridSettings.shouldDisableAdd();\n }\n\n return !enabled;\n }\n\n scope.shouldDisableExportMenu = function () {\n var disable = false;\n\n if (!!scope.gridSettings.shouldDisableExportMenu) {\n disable = disable || scope.gridSettings.shouldDisableExportMenu();\n }\n\n return disable;\n }\n\n scope.shouldShowAdd = function () {\n var show = true;\n\n if (!!scope.gridSettings.shouldShowAdd) {\n show = show && scope.gridSettings.shouldShowAdd();\n }\n\n return show;\n }\n\n scope.shouldDisableEdit = function (row) {\n var enabled = true;\n enabled = enabled && !!iAttrs.onEdit; \n if (!!scope.gridSettings.shouldDisableEdit) {\n enabled = enabled && !scope.gridSettings.shouldDisableEdit(row);\n } else {\n enabled = enabled && securitySvc.isInRole((scope.resource || '') + '.Update');\n }\n\n return !enabled;\n }\n\n scope.shouldDisableCopy = function (row) {\n var enabled = true;\n enabled = enabled && !!iAttrs.onCopy;\n if (!!scope.gridSettings.shouldDisableCopy) {\n enabled = enabled && !scope.gridSettings.shouldDisableCopy(row);\n } else {\n enabled = enabled && securitySvc.isInRole((scope.resource || '') + '.Insert');\n }\n\n return !enabled;\n }\n\n scope.shouldShowEdit = function (row) {\n var show = true;\n\n if (!!scope.gridSettings.shouldShowEdit) {\n show = show && scope.gridSettings.shouldShowEdit(row);\n }\n\n return show;\n }\n\n scope.shouldShowCopy = function (row) {\n var show = true;\n show = show && !!iAttrs.onCopy;\n if (!!scope.gridSettings.shouldShowCopy) {\n show = show && scope.gridSettings.shouldShowCopy(row);\n }\n\n return show;\n }\n\n scope.shouldDisableDelete = function (row) {\n var enabled = true;\n enabled = enabled && !!iAttrs.onDelete;\n if (!!scope.gridSettings.shouldDisableDelete) {\n enabled = enabled && !scope.gridSettings.shouldDisableDelete(row);\n } else {\n enabled = enabled && securitySvc.isInRole((scope.resource || '') + '.Delete');\n }\n\n return !enabled;\n }\n\n scope.shouldShowDelete = function (row) {\n var show = true;\n\n if (!!scope.gridSettings.shouldShowDelete) {\n show = show && scope.gridSettings.shouldShowDelete(row);\n }\n\n return show;\n }\n\n scope.menuItemCanBeginGroup = function (menu, item) {\n if (!menu || !item) {\n return false;\n }\n\n var atLeastOneVisible = false;\n for (var i = 0; i < menu.length; i++) {\n if (menu[i] !== item) {\n atLeastOneVisible = atLeastOneVisible || menu[i].visible;\n } else {\n break;\n }\n }\n\n return atLeastOneVisible;\n }\n\n if (iAttrs.onAdd) {\n scope.commandMenuDS.push({\n text: $translate.instant('TXT_MENU_NEW'),\n id: \"add\",\n isDisabled: scope.shouldDisableAdd,\n isVisible: scope.shouldShowAdd\n });\n }\n\n if (iAttrs.onEdit) {\n scope.commandMenuDS.push({\n text: $translate.instant('TXT_MENU_EDIT'),\n id: \"edit\",\n isDisabled: function (val) {\n return scope.shouldDisableEdit(val);\n },\n isVisible: function (val) {\n return scope.shouldShowEdit(val);\n }\n });\n }\n\n if (iAttrs.onCopy) {\n scope.commandMenuDS.push({\n text: $translate.instant('TXT_COPY'),\n id: \"copy\",\n isDisabled: function (val) {\n scope.shouldDisableCopy(val);\n },\n isVisible: function (val) {\n scope.shouldShowCopy(val);\n }\n });\n }\n\n if (iAttrs.onDelete) {\n scope.commandMenuDS.push({\n text: $translate.instant('TXT_MENU_DELETE'),\n id: \"delete\",\n beginGroup: scope.commandMenuDS.length > 0,\n isDisabled: scope.shouldDisableDelete,\n isVisible: function (val) {\n return scope.shouldShowDelete(val);\n },\n isBeginGroup: function (menu, item) {\n return scope.menuItemCanBeginGroup(menu, item);\n }\n });\n }\n\n var beginGroup = true;\n\n angular.forEach(scope.settings.customCommands, function (item) {\n scope.commandMenuDS.push({\n text: item.text,\n id: \"custom-\" + (!!item.id ? item.id : item.text.toLowerCase()),\n beginGroup: beginGroup || !!item.beginGroup,\n callback: item.callback,\n isDisabled: !!item.isDisabled ? item.isDisabled : function () { return false; },\n isVisible: !!item.isVisible ? item.isVisible : function () { return true; },\n isBeginGroup: beginGroup || !!item.beginGroup \n ? function (menu, item) { return scope.menuItemCanBeginGroup(menu, item); }\n : function () { return false; }\n });\n beginGroup = false;\n });\n\n angular.forEach(scope.settings.masterDetail.settings.customCommands, function (item) {\n scope.detailCommandMenuDS.push({\n text: item.text,\n id: \"custom-detail-\" + (!!item.id ? item.id : item.text.toLowerCase()),\n callback: item.callback,\n isDisabled: !!item.isDisabled ? item.isDisabled : function () { return false; },\n isVisible: !!item.isVisible ? item.isVisible : function () { return true; }\n });\n });\n\n\n scope.commandColHeaderBtn = {\n bindingOptions: {\n disabled: '$parent.shouldDisableAdd()'\n },\n icon: 'fa fa-lg fa-edit',\n width: '20px',\n height: '14px',\n onClick: function () {\n if (iAttrs.onAdd) {\n scope.onAdd();\n }\n }\n }\n\n scope.submenuShowing = function (data) {\n\n var id = scope.idPrefixFixed + 'list-row-context-menu';\n var ds = contextMenu.option('dataSource');\n for (var i = 0; i < ds.length; i++) {\n var menuItem = ds[i];\n menuItem.beginGroup = !!menuItem.isBeginGroup ? menuItem.isBeginGroup(ds, menuItem) : menuItem.beginGroup;\n menuItem.disabled = menuItem.isDisabled(data.data);\n menuItem.visible = menuItem.isVisible(data.data);\n menuItem.data = data.data;\n }\n contextMenu.option('dataSource', ds);\n contextMenu.option('target', data.cellElement);\n contextMenu.show();\n }\n\n scope.detailSubmenuShowing = function (data) {\n // TODO\n //var id = scope.idPrefixFixed + 'list-row-' + (data.$parent.dxTemplateModel.rowIndex + 1) + '-detail-command-button-' + (data.dxTemplateModel.rowIndex + 1);\n //var instance = $('#' + id).dxDropDownMenu('instance');\n //var ds = instance.option('dataSource');\n //for (var i = 0; i < ds.length; i++) {\n // var menuItem = ds[i];\n // menuItem.disabled = menuItem.isDisabled(data.data);\n //}\n //instance.option('dataSource', ds);\n }\n\n scope.detailMenuItemClicked = function (val) {\n if (val.itemData.callback) {\n val.itemData.callback(val.component._options.parentData, val.itemData.data);\n }\n }\n\n scope.showDeleteMsg = function (model) {\n if (!!scope.gridSettings.disableDeleteConfirmation) {\n scope.onDelete({ model: model });\n } else {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: 'TXT_TEXT_CONFIRM_DELETE',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () { scope.onDelete({ model: model }); }\n }]\n });\n }\n }\n\n if (scope.commandMenuDS.length || iAttrs.onAdd) {\n scope.settings.columns.unshift(\n {\n dataField: 'siteKeyGroupID',\n cellTemplate: 'commandBtnCellTemplate',\n headerCellTemplate: !!iAttrs.onAdd ? 'commandBtnHeaderTemplate' : null,\n allowFiltering: false,\n allowGrouping: false,\n allowHiding: false,\n allowReordering: false,\n allowResizing: false,\n allowSorting: false,\n showInColumnChooser: false,\n caption: '',\n width: '38px'\n });\n }\n\n scope.autoSizeGrid = function (repaint) {\n if (scope.gridInstance) {\n if (repaint) {\n scope.gridInstance.repaint();\n }\n\n var significantParent = iElem.closest('div.dx-grid-resize-pivot');\n\n var newHeight = significantParent.length > 0\n ? significantParent.outerHeight() - iElem.prevAll().outerHeight() - iElem.nextAll().outerHeight()\n : iElem.parent().outerHeight() - iElem.prevAll().outerHeight() - iElem.nextAll().outerHeight();\n var currentHeight = scope.gridInstance.option('height');\n if (newHeight !== currentHeight) {\n scope.gridInstance.option('height', newHeight);\n }\n }\n }\n\n // scope.contextExportMenu = null;\n\n scope.removeToolButtons = function () {\n var exportMenuElementId = scope.idPrefixFixed + \"-context-export-menu\";\n var elm = $(\"#\" + exportMenuElementId);\n if (elm.length > 0) {\n elm.remove();\n }\n }\n\n scope.prepareToolButtons = function () {\n if (!scope.gridInstance) {\n return;\n }\n \n var exportMenuElementId = scope.idPrefixFixed + \"-context-export-menu\";\n if ($(\"#\" + exportMenuElementId).length === 0) {\n scope.contextExportMenu = new DevExpress.ui.dxContextMenu($(\"
\").appendTo(\"body\"), {\n target: $(),\n items: [{\n id: 'exportSelected',\n text: Globalize.formatMessage('dxDataGrid-exportToExcel'),\n disabled: scope.shouldDisableExportMenu()\n }],\n onItemClick: function (val) {\n switch (val.itemData.id) {\n case 'exportSelected': {\n const workbook = new ExcelJS.Workbook();\n const worksheet = workbook.addWorksheet('Main sheet');\n\n DevExpress.excelExporter.exportDataGrid({\n worksheet: worksheet,\n component: scope.gridInstance,\n autoFilterEnabled: true\n }).then(function() {\n workbook.xlsx.writeBuffer().then(function(buffer) {\n let fileName = 'data-' + $filter('date')(new Date(), 'yyyy-MM-dd_HH-mm-ss-sss') + '.xlsx';\n saveAs(new Blob([buffer], { type: 'application/octet-stream' }), fileName);\n });\n });\n break;\n }\n // scope.gridInstance.option('export.fileName', 'data-' + $filter('date')(new Date(), 'yyyy-MM-dd_HH-mm-ss-sss'));\n // scope.gridInstance.option('export.proxyUrl', '/Api/Export/Proxy');\n // scope.gridInstance.exportToExcel(false); // selected is not filtered, export all means export filtered\n \n }\n },\n position: { offset: '25 20' },\n alternativeInvocationMode: { enabled: true },\n width: function (w) {\n return w + 150 + 'px';\n }\n });\n }\n \n var pagerDiv = $(scope.gridInstance.element()).find('div.dx-page-sizes');\n var filterRowSwithElementId = scope.idPrefixFixed + \"-filter-row-switch\";\n\n if ($(\"#\" + filterRowSwithElementId).length === 0) {\n var filterRowSwitchDiv = $(\"
\").prependTo(pagerDiv);\n filterRowSwitchDiv.dxButton({\n icon: 'fa fa-search',\n onClick: function () {\n scope.gridInstance.option('filterRow.visible', !scope.gridInstance.option('filterRow.visible'));\n }\n });\n }\n\n if (!!scope.gridSettings.shouldShowColumnChooser) {\n //var columnChooserButtonElementId = scope.idPrefixFixed + \"-column-chooser-button\";\n //if ($(\"#\" + columnChooserButtonElementId).length === 0) {\n // var columnChooserDiv = $(\"
\").prependTo(pagerDiv);\n // columnChooserDiv.dxButton({\n // icon: 'fa fa-table',\n // onClick: function () {\n // scope.gridInstance.showColumnChooser();\n // }\n // });\n //}\n\n var stateResetButtonElementId = scope.idPrefixFixed + \"-state-reset-button\";\n if ($(\"#\" + stateResetButtonElementId).length === 0) {\n var stateResetDiv = $(\"
\").prependTo(pagerDiv);\n stateResetDiv.dxDropDownButton({\n icon: 'fa fa-table',\n useSelectMode: false,\n splitButton: true,\n stylingMode: 'outlined',\n keyExpr: 'id',\n displayExpr: 'text',\n hint: $translate.instant('TXT_COLUMN_CHOOSER'),\n items: [\n { id: 0, text: $translate.instant('TXT_COLUMN_CHOOSER') },\n { id: 1, text: $translate.instant('TXT_RESET_GRID_STATE') }],\n dropDownOptions: {\n minWidth: 150\n },\n onItemClick: function(e) {\n if (e.itemData.id == 0) {\n scope.gridInstance.showColumnChooser();\n } else if (e.itemData.id == 1) {\n $timeout(function () {\n scope.gridInstance.state({});\n scope.gridInstance.refresh();\n scope.gridInstance.repaint();\n });\n }\n },\n onButtonClick: function () {\n scope.gridInstance.showColumnChooser();\n }\n });\n }\n }\n\n var exportButtonElementId = scope.idPrefixFixed + \"-export-button\";\n if ($(\"#\" + exportButtonElementId).length === 0) {\n var exportDiv = $(\"
\").prependTo(pagerDiv);\n exportDiv.dxButton({\n icon: 'fa fa-download',\n onClick: function () {\n scope.contextExportMenu.option('target', exportDiv);\n scope.contextExportMenu.show();\n }\n });\n }\n }\n\n scope.settings.onContentReady = function (e) {\n\n scope.gridInstance = e.component;\n scope.autoSizeGrid();\n\n scope.gridSettings.gridInstance = e.component;\n\n if (scope.gridSettings.onContentReady) { \n scope.gridSettings.onContentReady(e);\n }\n\n if (iAttrs.onFilterApplied) {\n var filterExpr = scope.gridInstance.getCombinedFilter();\n if (filterExpr) {\n var gridData = new DevExpress.data.DataSource({\n store: scope.gridDataSource,\n paginate: false\n });\n\n gridData.filter(filterExpr);\n gridData.load().done(function (result) {\n scope.onFilterApplied()(result);\n });\n } else {\n scope.onFilterApplied()(scope.gridDataSource);\n }\n }\n\n scope.prepareToolButtons();\n }\n\n var origOnCellPrepared = scope.settings.onCellPrepared;\n\n scope.settings.onCellPrepared = function (e) {\n if (e.rowType === 'filter') {\n if (e.column['index'] === 0 &&\n (scope.commandMenuDS.length || iAttrs.onAdd)) {\n angular.element('
')\n .dxButton({\n icon: 'clear',\n width: '17px',\n height: '14px',\n onClick: function () {\n if (scope.gridInstance) {\n var columns = scope.gridInstance.option(\"columns\");\n for (var i = 0; i < columns.length; i++) {\n scope.gridInstance.columnOption(i, \"filterValue\", undefined);\n }\n }\n }\n })\n .appendTo(e.cellElement);\n }\n }\n\n if (!!origOnCellPrepared) {\n origOnCellPrepared(e);\n }\n }\n\n scope.settings.onDisposing = function (e) {\n\n scope.removeToolButtons();\n e.component.off('contentReady');\n scope.settings.onContentReady = null;\n\n if (scope.onSplitterPaneResized) {\n scope.onSplitterPaneResized();\n }\n\n if (scope.onActiveTabChanged) {\n scope.onActiveTabChanged();\n }\n }\n },\n post: function (scope, iElem, iAttrs) {\n scope.onSplitterPaneResized = scope.$on('splitter-pane-resized', function () {\n if (scope.autoSizeGrid) {\n scope.autoSizeGrid();\n }\n });\n\n scope.onActiveTabChanged = scope.$on('activeTabChanged', function (event, data) {\n\n if (data && data.activeTab !== undefined) {\n var parentTab = iElem.closest('.dummy-tab-pane-class');\n if (parentTab.length === 1) {\n var ownTabIndex = parentTab.attr('tab-index');\n if (ownTabIndex == data.activeTab) {\n $timeout(function () {\n scope.autoSizeGrid(true);\n }, 10);\n $timeout(function () {\n scope.autoSizeGrid(true);\n }, 200);\n }\n }\n }\n });\n\n angular.element($window).bind('resize', function () {\n if (scope.autoSizeGrid) {\n scope.autoSizeGrid();\n }\n });\n }\n }\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbGroupSelect', ['$timeout', '$translate', 'groupSvc',\n function ($timeout, $translate, groupSvc) {\n function formatResult(model) {\n var colorUtils = new webooker_utils.ColorUtils();\n\n return \"
\" +\n \"
\" + model.name + \"
\" + \n \"
\" + (model.description || \"\") + \"
\" +\n \"
\" +\n \"
\";\n }\n\n function formatSelection(model) {\n var colorUtils = new webooker_utils.ColorUtils();\n\n return \"
\" + model.name + \"
\";\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = groupSvc.getAllAsync(); \n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (model) { return model.groupID; },\n data: models,\n multiple: true\n });\n\n ctrl.$render();\n });\n });\n\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return [];\n } else {\n if (Array.isArray(viewValue)) {\n return _.map(viewValue, function (n) { return parseInt(n); });\n } else {\n return _.map(viewValue.split(','), function (n) { return parseInt(n); });\n }\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n if (Array.isArray(value)) {\n return _.map(value, function (n) { return n + ''; }).join();\n } else {\n return _.map(value.split(','), function (n) { return n + ''; }).join();\n }\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]);","'use strict';\n\n//wbApp.config(function ($provide) {\n// $provide.decorator('taOptions', ['taRegisterTool', '$delegate', function (taRegisterTool, taOptions) {\n// // $delegate is the taOptions we are decorating\n// // register the tool with textAngular\n \n// taRegisterTool('colourRed', {\n// display: '',\n// // iconclass: \"fa fa-square red\",\n// action: function (deffered) {\n// var btn = angular.element('#text-angular-font-color').scope();\n// var me = this;\n// if (me.wbExt) {\n// me.wbExt.deffered = deffered;\n// }\n// else {\n// me.wbExt = { fontColor: '', deffered: deffered };\n// btn.$watch('wbExt.fontColor', function (newVal) {\n// if (newVal !== '') {\n// me.$editor().wrapSelection('forecolor', 'red');\n// }\n// me.wbExt.deffered.resolve();\n// });\n// }\n \n// return false;\n// }\n// });\n// // add the button to the default toolbar definition\n// taOptions.toolbar[1].push('colourRed');\n// return taOptions;\n// }]);\n//});\n\nwbApp.directive('wbHtmlEditor', ['$window', '$timeout',\n function ($window, $timeout) {\n return {\n restrict: 'A',\n require: '^ngModel',\n replace: true,\n template: '
',\n link: function (scope, element, attrs, ngModel) {\n\n function resizeEditor() {\n var parent = element.parent();\n var prev = element.prev();\n var scrollWindow = element.find('.ta-scroll-window');\n var taBind = element.find('.ta-bind');\n var toolbar = element.find('.ta-toolbar');\n\n var newHeight = parent.height() - prev.outerHeight() - toolbar.outerHeight() - 1;\n scrollWindow.height(newHeight);\n taBind.css(\"min-height\", newHeight + 'px');\n }\n\n angular.element($window).bind('resize', resizeEditor);\n\n $timeout(function () { resizeEditor(); });\n }\n }\n }]);","wbApp.directive('wbInfoCardBackTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_INFO_CARD_BACK_TYPE_SMS_CODE' },\n { id: 1, text: 'TXT_INFO_CARD_BACK_TYPE_LOGO' },\n { id: 2, text: 'TXT_INFO_CARD_BACK_TYPE_BAR_CODE' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbJarvisMenu', ['$timeout',\n function ($timeout) {\n return {\n restrict: 'A',\n priority: 1,\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).jarvismenu({\n accordion: true,\n speed: 235,\n closedSign: '',\n openedSign: ''\n });\n }, 1);\n }\n }\n }]);\n\n\n\n\n$.fn.extend({\n //pass the options variable to the function\n jarvismenu: function (options) {\n\n var defaults = {\n accordion: 'true',\n speed: 200,\n closedSign: '[+]',\n openedSign: '[-]'\n };\n\n // Extend our default options with those provided.\n var opts = $.extend(defaults, options);\n //Assign current element to variable, in this case is UL element\n var $this = $(this);\n\n //add a mark [+] to a multilevel menu\n $this.find(\"li\")\n .each(function () {\n if ($(this)\n .find(\"ul\")\n .size() != 0) {\n //add the multilevel sign next to the link\n $(this)\n .find(\"a:first\")\n .append(\"\" + opts.closedSign + \"\");\n\n //avoid jumping to the top of the page when the href is an #\n if ($(this)\n .find(\"a:first\")\n .attr('href') == \"#\") {\n $(this)\n .find(\"a:first\")\n .click(function () {\n return false;\n });\n }\n }\n });\n\n //open active level\n $this.find(\"li.active\")\n .each(function () {\n $(this)\n .parents(\"ul\")\n .slideDown(opts.speed);\n $(this)\n .parents(\"ul\")\n .parent(\"li\")\n .find(\"b:first\")\n .html(opts.openedSign);\n $(this)\n .parents(\"ul\")\n .parent(\"li\")\n .addClass(\"open\")\n });\n\n $this.find(\"li a\")\n .click(function () {\n\n if ($(this)\n .parent()\n .find(\"ul\")\n .size() != 0) {\n\n if (opts.accordion) {\n //Do nothing when the list is open\n if (!$(this)\n .parent()\n .find(\"ul\")\n .is(':visible')) {\n var parents = $(this)\n .parent()\n .parents(\"ul\");\n var visible = $this.find(\"ul:visible\");\n visible.each(function (visibleIndex) {\n var close = true;\n parents.each(function (parentIndex) {\n if (parents[parentIndex] == visible[visibleIndex]) {\n close = false;\n return false;\n }\n });\n if (close) {\n if ($(this)\n .parent()\n .find(\"ul\") != visible[visibleIndex]) {\n $(visible[visibleIndex])\n .slideUp(opts.speed, function () {\n $(this)\n .parent(\"li\")\n .find(\"b:first\")\n .html(opts.closedSign);\n $(this)\n .parent(\"li\")\n .removeClass(\"open\");\n });\n\n }\n }\n });\n }\n } // end if\n if ($(this)\n .parent()\n .find(\"ul:first\")\n .is(\":visible\") && !$(this)\n .parent()\n .find(\"ul:first\")\n .hasClass(\"active\")) {\n $(this)\n .parent()\n .find(\"ul:first\")\n .slideUp(opts.speed, function () {\n $(this)\n .parent(\"li\")\n .removeClass(\"open\");\n $(this)\n .parent(\"li\")\n .find(\"b:first\")\n .delay(opts.speed)\n .html(opts.closedSign);\n });\n\n } else {\n $(this)\n .parent()\n .find(\"ul:first\")\n .slideDown(opts.speed, function () {\n /*$(this).effect(\"highlight\", {color : '#616161'}, 500); - disabled due to CPU clocking on phones*/\n $(this)\n .parent(\"li\")\n .addClass(\"open\");\n $(this)\n .parent(\"li\")\n .find(\"b:first\")\n .delay(opts.speed)\n .html(opts.openedSign);\n });\n } // end else\n } // end if\n });\n } // end function\n});\n","wbApp.directive('wbOnlinePaymentConfigurationCombo', ['$timeout', '$translate', '$filter', 'onlinePaymentConfigurationSvc',\n function ($timeout, $translate, $filter, onlinePaymentConfigurationSvc) {\n\n function getProviderTypeStr(providerType) {\n switch (providerType) {\n // case 0:\n // return 'Payeezy (Fio)';\n case 1:\n return 'Comgate';\n case 2:\n return 'GP webpay';\n default:\n return 'UNKNOWN';\n }\n }\n\n function formatResult(config) {\n if (!config) { return; }\n\n return \"
\" +\n \"
\" + config.name + \"
\" +\n \"
\" + getProviderTypeStr(config.providerType) + \"
\" +\n \"
\";\n }\n\n\n function formatSelection(config) {\n return config.name + ' [' + getProviderTypeStr(config.providerType) + ']';\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n\n var configs = onlinePaymentConfigurationSvc.getAllAsync();\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_ONLINE_PAYMENT_CONFIGURATION'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: -1,\n data: configs,\n id: function (config) { return config.id; }\n });\n\n ctrl.$render();\n });\n\n ctrl.$render = function () {\n configs.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val); \n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbPreviewStateCodeCombo', ['$timeout', '$translate', 'stateCodesSvc',\n function ($timeout, $translate, stateCodesSvc) {\n function formatResult(stateCode) {\n if (!stateCode) { return; }\n\n return \"
\" +\n \"
\" + stateCode.name + \"
\" +\n \"
\" + (stateCode.description != null ? stateCode.description : \"\") + \"
\" +\n \"
\";\n }\n\n function formatSelection(item) {\n return item.name;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: { ngModel: '=' },\n template: \"\",\n link: function (scope, elm, attrs, controller) {\n\n var stateCodes = stateCodesSvc.getAllAsync();\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_STATE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: stateCodes\n });\n controller.$render();\n\n scope.$watch('ngModel', function (newValue) {\n if (newValue) {\n stateCodes.$promise.then(function () {\n $(elm).select2('val', newValue);\n });\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n if (attrs.ngEnable) {\n scope.$watch(attrs.ngEnable, function (newVal) {\n elm.select2('enable', !!newVal);\n });\n }\n\n }, 1);\n }\n }\n }]);\n\n\n","wbApp.directive('wbRecurrenceEditor',\n function () {\n return {\n restrict: 'A',\n require: '^ngModel',\n priority: 1,\n scope: {\n recurrence: '=ngModel',\n startDate: '='\n },\n replace: true,\n templateUrl: 'recurrence-editor-template.html',\n controller: ['$scope', function ($scope) {\n\n var defaultRecurrence = {\n type: 2,\n repeatByWeeks: 1,\n endByType: 1,\n range: 2,\n rangeDays: 1,\n endByOccurenceCount: 10,\n repeatEveryWeekday: [false, false, false, false, false, false, false]\n }\n\n if (!$scope.recurrence) {\n $scope.recurrence = angular.extend({}, defaultRecurrence);\n } else {\n $scope.recurrence = angular.extend({}, defaultRecurrence, $scope.recurrence);\n }\n\n $scope.$watch('startDate', function (newValue) {\n if (!!newValue) {\n var weekDayIdx = moment(newValue).isoWeekday() - 1;\n\n for (var i = 0; i < 7; i++) {\n $scope.recurrence.repeatEveryWeekday[i] = i === weekDayIdx;\n }\n }\n });\n }]\n }\n });","'use strict';\n\nwbApp.directive('wbReferenceSourceCombo', ['$timeout', '$translate', 'referenceSourceSvc',\n function ($timeout, $translate, referenceSourceSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n ngModel: '=',\n ngChange: '&'\n },\n template: \"\",\n link: function (scope, elm, attrs, controller) {\n\n\n var models = referenceSourceSvc.getAllAsync();\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_REFERENCE_SOURCE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: models\n });\n controller.$render();\n\n scope.$watch('ngModel', function (newValue) {\n if (newValue) {\n models.$promise.then(function () {\n $(elm).select2('val', newValue);\n });\n }\n });\n\n $(elm).on(\"change\", function (e) {\n if (scope.ngChange()) {\n scope.ngChange()(e.added);\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n if (attrs.ngEnable) {\n scope.$watch(attrs.ngEnable, function (newVal) {\n elm.select2('enable', !!newVal);\n });\n }\n\n }, 1);\n }\n }\n }]); ","wbApp.directive('wbReservationStartTimeType', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(reservationStartTimeType) {\n if (!reservationStartTimeType) { return; }\n return $translate.instant(reservationStartTimeType.text);\n }\n\n function formatSelection(reservationStartTimeType) {\n return $translate.instant(reservationStartTimeType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: !attrs.required,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_VAL_CAN_START_AT_WHOLE_OR_HALF_HOUR' },\n { id: 2, text: 'TXT_VAL_CAN_START_AT_WHOLE_HOUR_ONLY' },\n { id: 3, text: 'TXT_VAL_CAN_START_AT_HALF_HOUR_ONLY' },\n { id: 4, text: 'TXT_CAN_START_AT_SELECT_BY_BLOCKS_CONSECUTIVE' },\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return null;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return null;\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbSchedulerScaleTypeCombo', ['$timeout', \n function ($timeout) {\n function formatResult(schedulerScaleType) {\n return schedulerScaleType;\n }\n\n function formatSelection(schedulerScaleType) {\n return schedulerScaleType;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n // formatResult: formatResult,\n // formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 15, text: '15' },\n { id: 30, text: '30' },\n { id: 60, text: '60' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbSearchFilter', [\n function () {\n return {\n restrict: 'A',\n scope: {\n filterOptions: '='\n },\n template: '
' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n '
'\n }\n }\n]);\n\nwbApp.directive('wbSearchFilter2', [\n function () {\n return {\n restrict: 'A',\n scope: {\n filterOptions: '=',\n searchText: '='\n },\n template: '
' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n '
'\n }\n }\n]);","'use strict';\n\nwbApp.directive('wbSecurityRoleCombo', ['$timeout', 'userRolesSvc',\n function ($timeout, userRolesSvc) {\n function formatResult(data) {\n if (!data) { return; }\n\n return \"
\" +\n \"
\" + data.name + \"
\" +\n \"
\" + (data.description || '') + \"
\" +\n \"
\";\n }\n\n function formatSelection(data) {\n return data.name;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n ngModel: '=',\n ngChange: '&'\n },\n template: \"\",\n link: function (scope, elm, attrs, controller) {\n\n var roles = userRolesSvc.getAllAsync();\n\n $timeout(function () {\n $(elm).select2({\n //placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_SEMESTER'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: roles\n });\n controller.$render();\n\n scope.$watch('ngModel', function (newValue) {\n if (newValue) {\n roles.$promise.then(function () {\n $(elm).select2('val', newValue);\n });\n }\n });\n\n $(elm).on(\"change\", function (e) {\n if (scope.ngChange()) {\n scope.ngChange()(e.added);\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n if (attrs.ngEnable) {\n scope.$watch(attrs.ngEnable, function (newVal) {\n elm.select2('enable', !!newVal);\n });\n }\n\n }, 1);\n }\n }\n }]); ","'use strict';\n\nwbApp.directive('wbSecurityShow', ['securitySvc', '$translate',\n function (securitySvc, $translate) {\n return {\n restrict: 'A',\n priority: 100000,\n link: function link($scope, element, attributes) {\n var roles = attributes.wbSecurityShow;\n var shouldReplaceContent = attributes.wbSecurityUnauthorizedContent;\n var r = $scope.$eval(roles);\n if (!securitySvc.isInRole(r)) {\n if (shouldReplaceContent) {\n element.html(\"

\"+ $translate.instant('TXT_MESSAGE_FORBIDEN_VIEW') + \"

\");\n } else {\n element.hide();\n }\n }\n }\n }\n }]);","wbApp.directive('wbSemesterCombo', ['$timeout', '$translate', '$filter', 'semesterSvc',\n function ($timeout, $translate, $filter, semesterSvc) {\n function formatResult(semester) {\n if (!semester) { return; }\n\n let dateFilter = $filter('date');\n\n if (semester.isMain) {\n return \"
\" +\n \"
\" + semester.name + \"
\" +\n \"
\" + dateFilter(semester.startDate, 'shortDate') + ' - ' + dateFilter(semester.endDate, 'shortDate') + \"
\" +\n \"
\";\n } else {\n return \"
\" +\n \"
\" + semester.name + \"
\" +\n \"
\" + dateFilter(semester.startDate, 'shortDate') + ' - ' + dateFilter(semester.endDate, 'shortDate') + \"
\" +\n \"
\";\n }\n }\n\n function formatSelection(semester) {\n return semester.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n scope: {\n ngModel: '=', \n showClearButton: '='\n },\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n\n let semesters = semesterSvc.getAllActiveAsync();\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_SEMESTER'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: !!scope.showClearButton,\n minimumResultsForSearch: 5,\n data: semesters,\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n ctrl.$render();\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return null;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n semesters.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val);\n semesterSvc.setDefault(e.val);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }\n }\n }]);","wbApp.directive('wbSemesterDateRangeFilterTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_LBL_FOR_SEMESTER' },\n { id: 2, text: 'TXT_LBL_FROM_DATE_TO_DATE' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbSemesterMultiSelect', ['$timeout', '$translate', 'semesterSvc',\n function ($timeout, $translate, semesterSvc) {\n function formatResult(model) {\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = semesterSvc.getAllAsync();\n\n models.$promise.then(function () {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (model) { return model.id; },\n data: models,\n multiple: true\n });\n\n ctrl.$render();\n });\n });\n\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return [];\n } else {\n if (Array.isArray(viewValue)) {\n return _.map(viewValue, function (n) { return parseInt(n); });\n } else {\n return _.map(viewValue.split(','), function (n) { return parseInt(n); });\n }\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n if (Array.isArray(value)) {\n return _.map(value, function (n) { return n + ''; }).join();\n } else {\n return _.map(value.split(','), function (n) { return n + ''; }).join();\n }\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]);","wbApp.directive('wbSequenceEdit', ['$timeout',\nfunction ($timeout) {\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 10000,\n link: function (scope, element, attr, ngModel) {\n var destroyed = false;\n var initialized = false;\n\n $timeout(function () {\n element.autoNumeric('init',\n {\n aSign: '',\n aDec: ',',\n aSep: '',\n altDec: '',\n pSign: 's',\n vMin: '0',\n vMax: '99999'\n });\n\n initialized = true;\n });\n\n ngModel.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n if (typeof viewValue === 'string' || viewValue instanceof String) {\n return parseFloat(viewValue.replace(/,/g, '.'));\n }\n\n return viewValue;\n }\n });\n\n ngModel.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n ngModel.$render = function () {\n if (!destroyed) {\n\n if (initialized) {\n element.autoNumeric('set', ngModel.$viewValue || '0');\n } else {\n $timeout(function () {\n element.autoNumeric('set', ngModel.$viewValue || '0');\n });\n }\n }\n };\n\n element.on('blur keyup change', function () {\n scope.$evalAsync(read);\n });\n\n function read() {\n var amt = element.autoNumeric('get');\n ngModel.$setViewValue(amt);\n }\n\n $(element).on(\"remove\", function () {\n destroyed = true;\n element.autoNumeric(\"destroy\");\n })\n }\n };\n}]);","wbApp.directive('wbSparkline', [function () {\n 'use strict';\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n opts: '='\n },\n link: function (scope, elem, attrs, ctrl) {\n\n var opts = { type: 'line' };\n\n var render = function () {\n var model;\n //if (attrs.opts) angular.extend(opts, angular.fromJson(attrs.opts));\n angular.extend(opts, scope.opts);\n //console.log(opts);\n // Trim trailing comma if we are a string\n angular.isString(ctrl.$viewValue) ? model = ctrl.$viewValue.replace(/(^,)|(,$)/g, \"\") : model = ctrl.$viewValue;\n var data;\n // Make sure we have an array of numbers\n angular.isArray(model) ? data = model : data = model.split(',');\n $(elem).sparkline(data, opts);\n };\n\n ctrl.$render = function () {\n render();\n }\n\n scope.$watch(opts, function () {\n render();\n });\n }\n }\n}]);\n","/*!\n\nSplit Pane v0.9.4\n\nCopyright (c) 2014 - 2016 Simon Hagström\n\nReleased under the MIT license\nhttps://raw.github.com/shagstrom/split-pane/master/LICENSE\n\n*/\n\n(function ($) {\n\n 'use strict';\n\n var methods = {};\n\n methods.init = function () {\n var $splitPanes = this;\n $splitPanes.each(setMinHeightAndMinWidth);\n $splitPanes.children('.split-pane-divider').html('
');\n $splitPanes.children('.split-pane-divider').on('touchstart mousedown', mousedownHandler);\n setTimeout(function () {\n // Doing this later because of an issue with Chrome (v23.0.1271.64) returning split-pane width = 0\n // and triggering multiple resize events when page is being opened from an .\n $splitPanes.each(attachResizeHandler);\n $(window).trigger('resize');\n }, 100);\n };\n\n methods.firstComponentSize = function (value) {\n this.each(function () {\n var $splitPane = $(this),\n\t\t\t\tcomponents = getComponents($splitPane);\n if ($splitPane.is('.fixed-top')) {\n fixedTopHandler(components, components.divider.offsetTop)({ pageY: value });\n } else if ($splitPane.is('.fixed-bottom')) {\n value = components.splitPane.offsetHeight - components.divider.offsetHeight - value;\n fixedBottomHandler(components, -components.last.offsetHeight)({ pageY: -value });\n } else if ($splitPane.is('.horizontal-percent')) {\n value = components.splitPane.offsetHeight - components.divider.offsetHeight - value;\n horizontalPercentHandler(components, -components.last.offsetHeight)({ pageY: -value });\n } else if ($splitPane.is('.fixed-left')) {\n fixedLeftHandler(components, components.divider.offsetLeft)({ pageX: value });\n } else if ($splitPane.is('.fixed-right')) {\n value = components.splitPane.offsetWidth - components.divider.offsetWidth - value;\n fixedRightHandler(components, -components.last.offsetWidth)({ pageX: -value });\n } else if ($splitPane.is('.vertical-percent')) {\n value = components.splitPane.offsetWidth - components.divider.offsetWidth - value;\n verticalPercentHandler(components, -components.last.offsetWidth)({ pageX: -value });\n }\n });\n };\n\n methods.lastComponentSize = function (value) {\n this.each(function () {\n var $splitPane = $(this),\n\t\t\t\tcomponents = getComponents($splitPane);\n if ($splitPane.is('.fixed-top')) {\n value = components.splitPane.offsetHeight - components.divider.offsetHeight - value;\n fixedTopHandler(components, components.divider.offsetTop)({ pageY: value });\n } else if ($splitPane.is('.fixed-bottom')) {\n fixedBottomHandler(components, -components.last.offsetHeight)({ pageY: -value });\n } else if ($splitPane.is('.horizontal-percent')) {\n horizontalPercentHandler(components, -components.last.offsetHeight)({ pageY: -value });\n } else if ($splitPane.is('.fixed-left')) {\n value = components.splitPane.offsetWidth - components.divider.offsetWidth - value;\n fixedLeftHandler(components, components.divider.offsetLeft)({ pageX: value });\n } else if ($splitPane.is('.fixed-right')) {\n fixedRightHandler(components, -components.last.offsetWidth)({ pageX: -value });\n } else if ($splitPane.is('.vertical-percent')) {\n verticalPercentHandler(components, -components.last.offsetWidth)({ pageX: -value });\n }\n });\n };\n\n $.fn.splitPane = function (method) {\n methods[method || 'init'].apply(this, $.grep(arguments, function (it, i) { return i > 0; }));\n };\n\n function setMinHeightAndMinWidth() {\n var $splitPane = $(this),\n\t\t\tcomponents = getComponents($splitPane);\n if ($splitPane.is('.fixed-top, .fixed-bottom, .horizontal-percent')) {\n $splitPane.css('min-height', (minHeight(components.first) + minHeight(components.last) + $(components.divider).height()) + 'px');\n } else {\n $splitPane.css('min-width', (minWidth(components.first) + minWidth(components.last) + $(components.divider).width()) + 'px');\n }\n }\n\n function mousedownHandler(event) {\n event.preventDefault();\n var $divider = $(this),\n\t\t\t$splitPane = $divider.parent();\n $divider.addClass('dragged');\n if (event.type.match(/^touch/)) {\n $divider.addClass('touch');\n }\n var moveEventHandler = createMousemove($splitPane, pageXof(event), pageYof(event));\n $(document).on('touchmove mousemove', moveEventHandler);\n $(document).one('touchend mouseup', function (event) {\n $(document).off('touchmove mousemove', moveEventHandler);\n $divider.removeClass('dragged touch');\n $splitPane.trigger('dividerdragend', [getComponentsSizes($splitPane)]);\n });\n $splitPane.trigger('dividerdragstart', [getComponentsSizes($splitPane)]);\n }\n\n function getComponentsSizes($splitPane) {\n var property = $splitPane.is('.fixed-top, .fixed-bottom, .horizontal-percent') ?\n\t\t\t'height' : 'width';\n return {\n firstComponentSize: parseInt($splitPane.find('.split-pane-component:first').css(property), 10),\n lastComponentSize: parseInt($splitPane.find('.split-pane-component:last').css(property), 10)\n };\n }\n\n function attachResizeHandler() {\n var $splitPane = $(this),\n\t\t\tinternalHandler = createParentresizeHandler($splitPane),\n\t\t\tparent = $splitPane.parent().closest('.split-pane')[0] || window;\n $(parent).on(parent === window ? 'resize' : 'splitpaneresize', function (event) {\n var target = event.target === document ? window : event.target;\n if (target === parent) {\n internalHandler(event);\n }\n });\n }\n\n function createParentresizeHandler($splitPane) {\n var components = getComponents($splitPane);\n if ($splitPane.is('.fixed-top')) {\n return function (event) {\n var lastComponentMinHeight = minHeight(components.last),\n\t\t\t\t\tmaxfirstComponentHeight = components.splitPane.offsetHeight - lastComponentMinHeight - components.divider.offsetHeight;\n if (components.first.offsetHeight > maxfirstComponentHeight) {\n setTop(components, maxfirstComponentHeight + 'px');\n }\n $splitPane.trigger('splitpaneresize', [getComponentsSizes($splitPane)]);\n };\n } else if ($splitPane.is('.fixed-bottom')) {\n return function (event) {\n var firstComponentMinHeight = minHeight(components.first),\n\t\t\t\t\tmaxLastComponentHeight = components.splitPane.offsetHeight - firstComponentMinHeight - components.divider.offsetHeight;\n if (components.last.offsetHeight > maxLastComponentHeight) {\n setBottom(components, maxLastComponentHeight + 'px');\n }\n $splitPane.trigger('splitpaneresize', [getComponentsSizes($splitPane)]);\n };\n } else if ($splitPane.is('.horizontal-percent')) {\n return function (event) {\n var lastComponentMinHeight = minHeight(components.last),\n\t\t\t\t\tfirstComponentMinHeight = minHeight(components.first),\n\t\t\t\t\tmaxLastComponentHeight = components.splitPane.offsetHeight - firstComponentMinHeight - components.divider.offsetHeight;\n if (components.last.offsetHeight > maxLastComponentHeight) {\n setBottom(components, (maxLastComponentHeight / components.splitPane.offsetHeight * 100) + '%');\n } else {\n if (components.splitPane.offsetHeight - components.first.offsetHeight - components.divider.offsetHeight < lastComponentMinHeight) {\n setBottom(components, (lastComponentMinHeight / components.splitPane.offsetHeight * 100) + '%');\n }\n }\n $splitPane.trigger('splitpaneresize', [getComponentsSizes($splitPane)]);\n };\n } else if ($splitPane.is('.fixed-left')) {\n return function (event) {\n var lastComponentMinWidth = minWidth(components.last),\n\t\t\t\t\tmaxFirstComponentWidth = components.splitPane.offsetWidth - lastComponentMinWidth - components.divider.offsetWidth;\n if (components.first.offsetWidth > maxFirstComponentWidth) {\n setLeft(components, maxFirstComponentWidth + 'px');\n }\n $splitPane.trigger('splitpaneresize', [getComponentsSizes($splitPane)]);\n };\n } else if ($splitPane.is('.fixed-right')) {\n return function (event) {\n var firstComponentMinWidth = minWidth(components.first),\n\t\t\t\t\tmaxLastComponentWidth = components.splitPane.offsetWidth - firstComponentMinWidth - components.divider.offsetWidth;\n if (components.last.offsetWidth > maxLastComponentWidth) {\n setRight(components, maxLastComponentWidth + 'px');\n }\n $splitPane.trigger('splitpaneresize', [getComponentsSizes($splitPane)]);\n };\n } else if ($splitPane.is('.vertical-percent')) {\n return function (event) {\n var lastComponentMinWidth = minWidth(components.last),\n\t\t\t\t\tfirstComponentMinWidth = minWidth(components.first),\n\t\t\t\t\tmaxLastComponentWidth = components.splitPane.offsetWidth - firstComponentMinWidth - components.divider.offsetWidth;\n if (components.last.offsetWidth > maxLastComponentWidth) {\n setRight(components, (maxLastComponentWidth / components.splitPane.offsetWidth * 100) + '%');\n } else {\n if (components.splitPane.offsetWidth - components.first.offsetWidth - components.divider.offsetWidth < lastComponentMinWidth) {\n setRight(components, (lastComponentMinWidth / components.splitPane.offsetWidth * 100) + '%');\n }\n }\n $splitPane.trigger('splitpaneresize', [getComponentsSizes($splitPane)]);\n };\n }\n }\n\n function createMousemove($splitPane, pageX, pageY) {\n var components = getComponents($splitPane);\n if ($splitPane.is('.fixed-top')) {\n return fixedTopHandler(components, pageY);\n } else if ($splitPane.is('.fixed-bottom')) {\n return fixedBottomHandler(components, pageY);\n } else if ($splitPane.is('.horizontal-percent')) {\n return horizontalPercentHandler(components, pageY);\n } else if ($splitPane.is('.fixed-left')) {\n return fixedLeftHandler(components, pageX);\n } else if ($splitPane.is('.fixed-right')) {\n return fixedRightHandler(components, pageX);\n } else if ($splitPane.is('.vertical-percent')) {\n return verticalPercentHandler(components, pageX);\n }\n }\n\n function fixedTopHandler(components, pageY) {\n var firstComponentMinHeight = minHeight(components.first),\n\t\t\tmaxFirstComponentHeight = components.splitPane.offsetHeight - minHeight(components.last) - components.divider.offsetHeight,\n\t\t\ttopOffset = components.divider.offsetTop - pageY;\n return function (event) {\n event.preventDefault && event.preventDefault();\n var top = newTop(firstComponentMinHeight, maxFirstComponentHeight, topOffset + pageYof(event));\n setTop(components, top + 'px');\n $(components.splitPane).trigger('splitpaneresize', [getComponentsSizes($(components.splitPane))]);\n };\n }\n\n function fixedBottomHandler(components, pageY) {\n var lastComponentMinHeight = minHeight(components.last),\n\t\t\tmaxLastComponentHeight = components.splitPane.offsetHeight - minHeight(components.first) - components.divider.offsetHeight,\n\t\t\tbottomOffset = components.last.offsetHeight + pageY;\n return function (event) {\n event.preventDefault && event.preventDefault();\n var bottom = Math.min(Math.max(lastComponentMinHeight, bottomOffset - pageYof(event)), maxLastComponentHeight);\n setBottom(components, bottom + 'px');\n $(components.splitPane).trigger('splitpaneresize', [getComponentsSizes($(components.splitPane))]);\n };\n }\n\n function horizontalPercentHandler(components, pageY) {\n var splitPaneHeight = components.splitPane.offsetHeight,\n\t\t\tlastComponentMinHeight = minHeight(components.last),\n\t\t\tmaxLastComponentHeight = splitPaneHeight - minHeight(components.first) - components.divider.offsetHeight,\n\t\t\tbottomOffset = components.last.offsetHeight + pageY;\n return function (event) {\n event.preventDefault && event.preventDefault();\n var bottom = Math.min(Math.max(lastComponentMinHeight, bottomOffset - pageYof(event)), maxLastComponentHeight);\n setBottom(components, (bottom / splitPaneHeight * 100) + '%');\n $(components.splitPane).trigger('splitpaneresize', [getComponentsSizes($(components.splitPane))]);\n };\n }\n\n function fixedLeftHandler(components, pageX) {\n var firstComponentMinWidth = minWidth(components.first),\n\t\t\tmaxFirstComponentWidth = components.splitPane.offsetWidth - minWidth(components.last) - components.divider.offsetWidth,\n\t\t\tleftOffset = components.divider.offsetLeft - pageX;\n return function (event) {\n event.preventDefault && event.preventDefault();\n var left = newLeft(firstComponentMinWidth, maxFirstComponentWidth, leftOffset + pageXof(event));\n setLeft(components, left + 'px');\n $(components.splitPane).trigger('splitpaneresize', [getComponentsSizes($(components.splitPane))]);\n };\n }\n\n function fixedRightHandler(components, pageX) {\n var lastComponentMinWidth = minWidth(components.last),\n\t\t\tmaxLastComponentWidth = components.splitPane.offsetWidth - minWidth(components.first) - components.divider.offsetWidth,\n\t\t\trightOffset = components.last.offsetWidth + pageX;\n return function (event) {\n event.preventDefault && event.preventDefault();\n var right = Math.min(Math.max(lastComponentMinWidth, rightOffset - pageXof(event)), maxLastComponentWidth);\n setRight(components, right + 'px');\n $(components.splitPane).trigger('splitpaneresize', [getComponentsSizes($(components.splitPane))]);\n };\n }\n\n function verticalPercentHandler(components, pageX) {\n var splitPaneWidth = components.splitPane.offsetWidth,\n\t\t\tlastComponentMinWidth = minWidth(components.last),\n\t\t\tmaxLastComponentWidth = splitPaneWidth - minWidth(components.first) - components.divider.offsetWidth,\n\t\t\trightOffset = components.last.offsetWidth + pageX;\n return function (event) {\n event.preventDefault && event.preventDefault();\n var right = Math.min(Math.max(lastComponentMinWidth, rightOffset - pageXof(event)), maxLastComponentWidth);\n setRight(components, (right / splitPaneWidth * 100) + '%');\n $(components.splitPane).trigger('splitpaneresize', [getComponentsSizes($(components.splitPane))]);\n };\n }\n\n function getComponents($splitPane) {\n return {\n splitPane: $splitPane[0],\n first: $splitPane.children('.split-pane-component:first')[0],\n divider: $splitPane.children('.split-pane-divider')[0],\n last: $splitPane.children('.split-pane-component:last')[0]\n };\n }\n\n function pageXof(event) {\n if (event.pageX !== undefined) {\n return event.pageX;\n } else if (event.originalEvent.pageX !== undefined) {\n return event.originalEvent.pageX;\n } else if (event.originalEvent.touches) {\n return event.originalEvent.touches[0].pageX;\n }\n }\n\n function pageYof(event) {\n if (event.pageY !== undefined) {\n return event.pageY;\n } else if (event.originalEvent.pageY !== undefined) {\n return event.originalEvent.pageY;\n } else if (event.originalEvent.touches) {\n return event.originalEvent.touches[0].pageY;\n }\n }\n\n function minHeight(element) {\n return parseInt($(element).css('min-height'), 10) || 0;\n }\n\n function minWidth(element) {\n return parseInt($(element).css('min-width'), 10) || 0;\n }\n\n function maxHeight(element) {\n return parseInt($(element).css('max-height'), 10);\n }\n\n function maxWidth(element) {\n return parseInt($(element).css('max-width'), 10);\n }\n\n function newTop(firstComponentMinHeight, maxFirstComponentHeight, value) {\n return Math.min(Math.max(firstComponentMinHeight, value), maxFirstComponentHeight);\n }\n\n function newLeft(firstComponentMinWidth, maxFirstComponentWidth, value) {\n return Math.min(Math.max(firstComponentMinWidth, value), maxFirstComponentWidth);\n }\n function setTop(components, top) {\n components.first.style.height = top;\n components.divider.style.top = top;\n components.last.style.top = top;\n }\n\n function setBottom(components, bottom) {\n components.first.style.bottom = bottom;\n components.divider.style.bottom = bottom;\n components.last.style.height = bottom;\n }\n\n function setLeft(components, left) {\n components.first.style.width = left;\n components.divider.style.left = left;\n components.last.style.left = left;\n }\n\n function setRight(components, right) {\n components.first.style.right = right;\n components.divider.style.right = right;\n components.last.style.width = right;\n }\n\n})(jQuery);\n\nwbApp.directive('splitPane', function () {\n return {\n restrict: 'EA',\n replace: true,\n transclude: true,\n scope: {\n splitPaneProperties: '='\n },\n controller: ['$scope', function ($scope) {\n $scope.components = [];\n this.addComponent = function (attributes) {\n $scope.components.push(attributes);\n };\n this.addDivider = function (attributes) {\n $scope.divider = attributes;\n };\n }],\n link: function ($scope, element, attrs) {\n var $firstComponent = element.children('.split-pane-component:first'),\n\t\t\t\t$divider = element.children('.split-pane-divider'),\n\t\t\t\t$lastComponent = element.children('.split-pane-component:last');\n if ($scope.components[0].width && $scope.components[0].width.match(/%$/)) {\n element.addClass('vertical-percent');\n var rightPercent = (100 - parseFloat($scope.components[0].width.match(/(\\d+)%$/)[1])) + \"%\";\n $firstComponent.css({ right: rightPercent, marginRight: $scope.divider.width });\n $divider.css({ right: rightPercent, width: $scope.divider.width });\n $lastComponent.css({ width: rightPercent });\n } else if ($scope.components[0].width) {\n element.addClass('fixed-left');\n $firstComponent.css({ width: $scope.components[0].width });\n $divider.css({ left: $scope.components[0].width, width: $scope.divider.width });\n $lastComponent.css({ left: $scope.components[0].width, marginLeft: $scope.divider.width });\n } else if ($scope.components[1].width && $scope.components[1].width.match(/%$/)) {\n element.addClass('vertical-percent');\n $firstComponent.css({ right: $scope.components[1].width, marginRight: $scope.divider.width });\n $divider.css({ right: $scope.components[1].width, width: $scope.divider.width });\n $lastComponent.css({ width: $scope.components[1].width });\n } else if ($scope.components[1].width) {\n element.addClass('fixed-right');\n $firstComponent.css({ right: $scope.components[1].width, marginRight: $scope.divider.width });\n $divider.css({ right: $scope.components[1].width, width: $scope.divider.width });\n $lastComponent.css({ width: $scope.components[1].width });\n } else if ($scope.components[0].height && $scope.components[0].height.match(/%$/)) {\n element.addClass('horizontal-percent');\n var bottomPercent = (100 - parseFloat($scope.components[0].height.match(/(\\d+)%$/)[1])) + \"%\";\n $firstComponent.css({ bottom: bottomPercent, marginBottom: $scope.divider.height });\n $divider.css({ bottom: bottomPercent, height: $scope.divider.height });\n $lastComponent.css({ height: bottomPercent });\n } else if ($scope.components[0].height) {\n element.addClass('fixed-top');\n $firstComponent.css({ height: $scope.components[0].height });\n $divider.css({ top: $scope.components[0].height, height: $scope.divider.height });\n $lastComponent.css({ top: $scope.components[0].height, marginTop: $scope.divider.height });\n } if ($scope.components[1].height && $scope.components[1].height.match(/%$/)) {\n element.addClass('horizontal-percent');\n $firstComponent.css({ bottom: $scope.components[1].height, marginBottom: $scope.divider.height });\n $divider.css({ bottom: $scope.components[1].height, height: $scope.divider.height });\n $lastComponent.css({ height: $scope.components[1].height });\n } else if ($scope.components[1].height) {\n element.addClass('fixed-bottom');\n $firstComponent.css({ bottom: $scope.components[1].height, marginBottom: $scope.divider.height });\n $divider.css({ bottom: $scope.components[1].height, height: $scope.divider.height });\n $lastComponent.css({ height: $scope.components[1].height });\n }\n element.splitPane();\n var localFirstComponentSize, localLastComponentSize;\n element.on('splitpaneresize', function (event, splitPaneProperties) {\n if ($scope.splitPaneProperties && event.target === element[0] &&\n\t\t\t\t\t\tlocalFirstComponentSize !== splitPaneProperties.firstComponentSize &&\n\t\t\t\t\t\tlocalLastComponentSize !== splitPaneProperties.lastComponentSize) {\n $scope.$apply(function () {\n localFirstComponentSize = splitPaneProperties.firstComponentSize;\n $scope.splitPaneProperties.firstComponentSize = splitPaneProperties.firstComponentSize;\n localLastComponentSize = splitPaneProperties.lastComponentSize;\n $scope.splitPaneProperties.lastComponentSize = splitPaneProperties.lastComponentSize;\n });\n }\n });\n $scope.$watch('splitPaneProperties.firstComponentSize', function (firstComponentSize) {\n if ((firstComponentSize || firstComponentSize === 0) && firstComponentSize !== localFirstComponentSize) {\n localFirstComponentSize = firstComponentSize;\n element.splitPane('firstComponentSize', firstComponentSize);\n }\n });\n $scope.$watch('splitPaneProperties.lastComponentSize', function (lastComponentSize) {\n if ((lastComponentSize || lastComponentSize === 0) && lastComponentSize !== localLastComponentSize) {\n localLastComponentSize = lastComponentSize;\n element.splitPane('lastComponentSize', lastComponentSize);\n }\n });\n },\n template: '
'\n };\n})\n.directive('splitPaneComponent', function () {\n return {\n restrict: 'EA',\n replace: true,\n transclude: true,\n require: '^splitPane',\n link: function ($scope, element, attrs, paneCtrl) {\n paneCtrl.addComponent({ width: attrs.width, height: attrs.height });\n },\n template: '
'\n };\n})\n.directive('splitPaneDivider', function () {\n return {\n restrict: 'EA',\n replace: true,\n transclude: true,\n require: '^splitPane',\n link: function ($scope, element, attrs, paneCtrl) {\n paneCtrl.addDivider({ width: attrs.width, height: attrs.height });\n },\n template: '
'\n };\n});","wbApp.directive('wbSubjectCombo', ['$timeout', '$translate', '$filter', 'subjectsSvc', 'gridSortSvc',\n function ($timeout, $translate, $filter, subjectsSvc, gridSortSvc) {\n function formatResult(subject) {\n if (!subject) { return; }\n\n return subject.name;\n }\n\n function formatSelection(subject) {\n return subject.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n\n let models = subjectsSvc.getAllWithActiveFranchiesesAsync(false, ctrl.$modelValue);\n\n models.$promise.then(function () {\n $timeout(function () {\n \n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_SUBJECT'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5,\n id: function (model) {\n return model.id;\n },\n data: _.sortBy(models, function (a) {\n return gridSortSvc.localeSort(a, 'name');\n }),\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n\n ctrl.$render = function () {\n $(elm).select2('val', ctrl.$viewValue);\n }\n\n ctrl.$render();\n }, 1);\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n ctrl.$render();\n });\n }\n }\n }]);\n ","'use strict';\n\nwbApp.directive('wbUserLookup', ['$http', '$translate', '$timeout', '$filter', 'userSvc',\n function ($http, $translate, $timeout, $filter, userSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n return \"
\" +\n \"
\" + model.fullName + \"
\" +\n \"
\" + model.email + \"
\" +\n \"
\" + $filter('phone')(model.phone) + \"
\" +\n \"
\";\n }\n\n function formatSelection(model) {\n return model.fullName;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_USER'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: !attrs.required,\n ajax: {\n url: \"Api/Users/GetLookupQuery\",\n data: function (term, page) {\n return {\n query: term,\n pageSize: 10,\n pageNo: page,\n };\n },\n results: function (data, page) {\n var more = data.length > 0;\n return { results: data, more: more };\n }\n },\n initSelection: function (element, callback) {\n var id = $(element).val();\n if (!!id && id != \"undefined\") {\n $http({\n method: 'GET',\n url: \"Api/Users/GetLookupID\",\n params: { userID: id }\n })\n .success(function (data, status, headers, config) {\n controller.$setViewValue(data.id);\n callback(data);\n });\n }\n }\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n //elm.on('change', function () {\n // scope.$apply(function () {\n // controller.$setViewValue(elm.select2('val'));\n // });\n //});\n\n //attrs.$observe('disabled', function (value) {\n // elm.select2('enable', !value);\n //});\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n\n }\n }\n}]);\n","wbApp.filter('accountingBook', ['$translate', 'accountingBookSvc', 'securitySvc',\n function ($translate, accountingBookSvc, securitySvc) {\n\n var isInAccountingBookRole = securitySvc.isInRole('AccountingBook');\n var models = [];\n\n if (isInAccountingBookRole) {\n models = accountingBookSvc.getAllAsync();\n }\n\n function asyncResult(input) {\n if (!isInAccountingBookRole) {\n return $translate.instant('TXT_ALERT_TITLE_FORBIDEN');\n }\n\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n }]\n);","wbApp.filter('activityScheduleFullName', ['activityScheduleSvc', function (activityScheduleSvc) {\n return function (input) {\n if (input) {\n return activityScheduleSvc.getActivityScheduleFullName(input);\n }\n\n return input;\n };\n}]);","wbApp.filter('compensationGroup', ['$translate', 'compensationGroupSvc', function ($translate, compensationGroupSvc) {\n var models = compensationGroupSvc.getLookup();\n\n function asyncResult(input) {\n if (models.$resolved) {\n var model = _.find(models, function (item) { return item.id == input; });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n}]);","wbApp.filter('compensationGroups', ['$translate', 'compensationGroupSvc', function ($translate, compensationGroupSvc) {\n var models = compensationGroupSvc.getLookup();\n\n function asyncResult(input) {\n if (models.$resolved) {\n var selected = _.flatten(_.map(input, function (item) {\n return _.filter(models, { id: item });\n }));\n\n if (selected.length > 0) {\n return _.map(selected, 'name').join(', ')\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n}]);","wbApp.filter('courseFullName', ['courseSvc', function (courseSvc) {\n return function (input) {\n if (input) {\n return courseSvc.getCourseFullName(input);\n }\n\n return input;\n };\n}]);","wbApp.filter('courseType', ['$translate', 'courseTypeSvc', function ($translate, courseTypeSvc) {\n function asyncResult(input) {\n let models = courseTypeSvc.getAllAsync();\n \n if (models.$resolved) {\n let model = _.find(models, { courseTypeID: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n }\n]);","wbApp.filter('emailCategory', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 1:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_DEFAULT');\n case 2:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_SEASON_TICKET');\n case 3:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_MULTI_ATTEND');\n case 4:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_1');\n case 5:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_2');\n case 6:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_3');\n case 7:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_4');\n case 8:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_5');\n case 9:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_6');\n case 10:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_7');\n case 11:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_8');\n case 12:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_9');\n case 13:\n return $translate.instant('TXT_VAL_EMAIL_CATEGORY_ALTERNATIVE_10');\n \n default:\n return '';\n }\n };\n}]);","wbApp.filter('errorIndicator', [function () {\r\n return function (input) {\r\n if (!!input) {\r\n return \"\"\r\n }\r\n\r\n return \"\";\r\n };\r\n}]);\r\n\r\n\r\nwbApp.filter('noteIndicator', [function () {\r\n return function (input) {\r\n if (!!input) {\r\n return \"\"\r\n }\r\n\r\n return \"\";\r\n };\r\n}]);","wbApp.filter('franchiseCentralFlt', ['tenantInfo', function (tenantInfo) {\n return function (input) {\n if (input) { \n var franchiseCentral = _.find(tenantInfo.franchiseCentrals, { tenantID: input });\n if (franchiseCentral) {\n return franchiseCentral.alias;\n }\n }\n \n return '';\n };\n}]);","wbApp.filter('groups', ['$translate', 'groupSvc',\r\n function ($translate, groupSvc) {\r\n\r\n var models = groupSvc.getAllAsync();\r\n\r\n function asyncResult(input) {\r\n if (models.$resolved) {\r\n var selected = _.flatten(_.map(input, function (item) {\r\n return _.filter(models, { groupID: item });\r\n }));\r\n\r\n if (selected.length > 0) {\r\n return _.map(selected, 'name').join(', ')\r\n } else {\r\n return '';\r\n }\r\n } else {\r\n return $translate.instant('TXT_LOADING_DATA');\r\n }\r\n }\r\n\r\n asyncResult.$stateful = true;\r\n\r\n return asyncResult;\r\n }]\r\n);","wbApp.filter('groupsColors', ['$translate', 'groupSvc',\r\n function ($translate, groupSvc) {\r\n\r\n var models = groupSvc.getAllAsync();\r\n\r\n function asyncResult(input) {\r\n if (models.$resolved) {\r\n var selected = _.flatten(_.map(input, function (item) {\r\n return _.filter(models, function(m) { return m.groupID == item; });\r\n }));\r\n\r\n if (selected.length > 0) {\r\n var colorUtils = new webooker_utils.ColorUtils();\r\n return _.map(selected, function (s) {\r\n var title = selected.length > 1\r\n ? \"POZOR! Tento záznam má přiřazeno více skupin, reporty pro MPSV se nemusí generovat správně!\"\r\n : s.name;\r\n\r\n return \" \";\r\n }).join(' ')\r\n } else {\r\n return '';\r\n }\r\n } else {\r\n return $translate.instant('TXT_LOADING_DATA');\r\n }\r\n }\r\n\r\n asyncResult.$stateful = true;\r\n\r\n return asyncResult;\r\n }]\r\n);","wbApp.filter('level', ['$translate', 'levelSvc', function ($translate, levelSvc) {\n var models = levelSvc.getAll();\n\n function asyncResult(input) {\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else if (!!input) {\n // the value is non 0 and should have been found, reload the data\n models = levelSvc.getAll();\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n}\n]);","wbApp.filter('phase', ['$translate', 'phaseSvc', function ($translate, phaseSvc) {\n var models = phaseSvc.getAll();\n\n function asyncResult(input) {\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else if (!!input) {\n // the value is non 0 and should have been found, reload the data\n models = phaseSvc.getAll();\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n } else {\n return '';\n } \n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n }\n]);","wbApp.filter('previewStateCode', ['stateCodesSvc', function (stateCodesSvc) {\n return function (input) {\n if (input) {\n var res = stateCodesSvc.get(input);\n if (res) {\n return res.name;\n }\n }\n\n return input;\n };\n}]);","wbApp.filter('referenceSource', ['referenceSourceSvc', function (referenceSourceSvc) {\n return function (input) {\n if (input) {\n var res = referenceSourceSvc.get(input);\n if (res) {\n return res.name;\n }\n }\n\n return input;\n };\n}]);","wbApp.filter('reservationStartTimeType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 1:\n return $translate.instant('TXT_VAL_CAN_START_AT_WHOLE_OR_HALF_HOUR');\n case 2:\n return $translate.instant('TXT_VAL_CAN_START_AT_WHOLE_HOUR_ONLY');\n case 3:\n return $translate.instant('TXT_VAL_CAN_START_AT_HALF_HOUR_ONLY');\n default:\n return '';\n }\n };\n}]);","wbApp.filter('semester', ['semesterSvc', function (semesterSvc) {\n return function (input) {\n if (input) {\n var res = semesterSvc.get(input);\n if (res) {\n return res.name;\n }\n }\n\n return \"\";\n };\n}]);","wbApp.filter('subjectCategory', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 1:\n return $translate.instant('TXT_LBL_COURSE');\n case 2:\n return $translate.instant('TXT_LBL_ACTION');\n default:\n return '';\n }\n };\n}]);\n","wbApp.filter('userRole', ['userRolesSvc', function (userRolesSvc) {\n return function (input) {\n if (input) {\n var res = userRolesSvc.get(input);\n if (res) {\n return res.name;\n }\n }\n\n return input;\n };\n}]);","/*global angular:true, browser:true */\n\n/**\n * @license HTTP Auth Interceptor Module for AngularJS\n * (c) 2012 Witold Szczerba\n * License: MIT\n */\n//(function () {\n 'use strict';\n\n angular.module('http-auth-interceptor', ['http-auth-interceptor-buffer'])\n\n .factory('authService', ['$rootScope','httpBuffer', function($rootScope, httpBuffer) {\n return {\n /**\n * call this function to indicate that authentication was successfull and trigger a\n * retry of all deferred requests.\n * @param data an optional argument to pass on to $broadcast which may be useful for\n * example if you need to pass through details of the user that was logged in\n */\n loginConfirmed: function(data, configUpdater) {\n var updater = configUpdater || function(config) {return config;};\n $rootScope.$broadcast('event:auth-loginConfirmed', data);\n httpBuffer.retryAll(updater);\n }\n };\n }])\n\n /**\n * $http interceptor.\n * On 401 response (without 'ignoreAuthModule' option) stores the request\n * and broadcasts 'event:angular-auth-loginRequired'.\n */\n .config(['$httpProvider', function($httpProvider) {\n\n var interceptor = ['$rootScope', '$q', 'httpBuffer', function($rootScope, $q, httpBuffer) {\n function success(response) {\n return response;\n }\n\n function error(response) {\n if (response.status === 403 && !response.config.ignoreAuthModule) {\n var deferred = $q.defer();\n httpBuffer.append(response.config, deferred);\n $rootScope.$broadcast('event:auth-loginRequired');\n return deferred.promise;\n }\n // otherwise, default behaviour\n return $q.reject(response);\n }\n\n return function(promise) {\n return promise.then(success, error);\n };\n\n }];\n $httpProvider.responseInterceptors.push(interceptor);\n }]);\n\n /**\n * Private module, a utility, required internally by 'http-auth-interceptor'.\n */\n angular.module('http-auth-interceptor-buffer', [])\n\n .factory('httpBuffer', ['$injector', function($injector) {\n /** Holds all the requests, so they can be re-requested in future. */\n var buffer = [];\n\n /** Service initialized later because of circular dependency problem. */\n var $http;\n\n function retryHttpRequest(config, deferred) {\n function successCallback(response) {\n deferred.resolve(response);\n }\n function errorCallback(response) {\n deferred.reject(response);\n }\n $http = $http || $injector.get('$http');\n $http(config).then(successCallback, errorCallback);\n }\n\n return {\n /**\n * Appends HTTP request configuration object with deferred response attached to buffer.\n */\n append: function(config, deferred) {\n buffer.push({\n config: config,\n deferred: deferred\n });\n },\n\n /**\n * Retries all the buffered requests clears the buffer.\n */\n retryAll: function(updater) {\n for (var i = 0; i < buffer.length; ++i) {\n retryHttpRequest(updater(buffer[i].config), buffer[i].deferred);\n }\n buffer = [];\n }\n };\n }]);\n//})();\n","wbApp.factory('courseCategorySvc', ['$resource', '$translate',\n function ($resource, $translate) {\n\n function getAll() {\n return [\n { courseCategoryID: 1, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_OTHERS') },\n { courseCategoryID: 2, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_SWIMMING') },\n { courseCategoryID: 3, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_LANGUAGES') },\n { courseCategoryID: 4, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_MOTIONAL') },\n { courseCategoryID: 5, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_PREGNANCY') },\n { courseCategoryID: 6, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_SUBURBAN') },\n { courseCategoryID: 7, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_CREATIVE') },\n { courseCategoryID: 8, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_MUSIC') },\n { courseCategoryID: 9, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_DANCING') },\n { courseCategoryID: 10, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_LOGIC') },\n { courseCategoryID: 11, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_ACROBATICS') },\n { courseCategoryID: 12, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_SPORTS') },\n { courseCategoryID: 13, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_FREE_TIME') },\n { courseCategoryID: 14, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_FIGHTING') },\n { courseCategoryID: 15, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_THEATRE') },\n { courseCategoryID: 16, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_SERVICES') },\n { courseCategoryID: 17, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_EDUCATION') },\n { courseCategoryID: 18, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_COGNITIVE') },\n { courseCategoryID: 19, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_ART') },\n { courseCategoryID: 20, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_HEALTH') },\n { courseCategoryID: 21, text: $translate.instant('TXT_VAL_COURSE_CATEGORY_PARENTS_WITH_CHILDREN') }\n ];\n }\n\n return {\n getAll: getAll,\n }\n\n }]);","'use strict';\n\nwbApp.factory('previewHoursSvc', ['$resource', '$translate', '$q', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, $q, notificationSvc, repositorySvc) {\n\n var PreviewHour = $resource('/Api/PreviewHours/Get', {}, {\n 'query': { method: 'GET', isArray: true },\n 'insert': { method: 'POST', url: '/Api/PreviewHours/Insert' },\n 'update': { method: 'POST', url: '/Api/PreviewHours/Update' },\n 'delete': { method: 'POST', url: '/Api/PreviewHours/Delete' },\n 'register': { method: 'POST', url: '/Api/PreviewHours/Register' },\n 'excuse': { method: 'POST', url: '/Api/PreviewHours/Excuse' },\n 'rebook': { method: 'POST', url: '/Api/PreviewHours/ReBook' },\n 'getPreviewHoursSuccessStats': { method: 'GET', isArray: true, url: '/Api/PreviewHours/GetPreviewHoursSuccessStats' },\n });\n\n var previewHours;\n var forSemesterID;\n\n function getPreviewHoursSuccessStats(fromDate, toDate)\n {\n return repositorySvc.customGet(\n 'getPreviewHoursSuccessStats',\n PreviewHour,\n {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getPreviewHoursSuccessGraph(data)\n {\n var cols = [\n { id: 'r', label: $translate.instant(\"TXT_LBL_REFERENCE\"), type: 'string' },\n { id: 'p', label: $translate.instant('TXT_PREVIEW_HOURS'), type: 'number' },\n { id: 's', label: $translate.instant('TXT_SAME_SEMESTER'), type: 'number' },\n { id: 'a', label: $translate.instant('TXT_ANY_TIME'), type: 'number' }\n ];\n var rows = [];\n\n _.forEach(data, function (d) {\n rows.push({\n c: [\n { v: d.reference },\n { v: d.noOfPreviewHours },\n { v: d.noOfRegistrationsInTheSameSemester },\n { v: d.noOfRegistrationsInAnySemester }\n ]\n })\n });\n\n return {\n cols: cols,\n rows: rows\n };\n\n }\n\n function getAll(semesterID, refresh) {\n if (!previewHours || forSemesterID != semesterID || refresh) {\n previewHours = repositorySvc.get(PreviewHour, { semesterID: semesterID });\n forSemesterID = semesterID;\n }\n return previewHours;\n }\n\n function getAllForClassroomAsync(semesterID, classroomID, refresh) {\n if (!classroomID) {\n return getAll(semesterID, refresh);\n }\n\n var deferred = $q.defer();\n var m = [];\n m.$promise = deferred.promise;\n\n getAll(semesterID, refresh).$promise\n .then(function (data) {\n for (var i = 0; i < data.length; i++) {\n var d = data[i];\n if (d.classroomID === classroomID) {\n m.push(d);\n }\n }\n\n deferred.resolve(m);\n });\n\n return m;\n }\n\n function insert(data, successCallback, errorCallback) {\n var p;\n if (forSemesterID != data.semesterID) {\n p = [];\n } else {\n if (!previewHours) {\n previewHours = [];\n }\n p = previewHours;\n }\n\n repositorySvc.insert(\n PreviewHour, // $resource\n p, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n PreviewHour, // $resource\n previewHours, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n function remove(data, errorCallback) {\n repositorySvc.remove(\n PreviewHour, // $resource\n previewHours, // collection\n data, // entity\n null, // successCallback\n errorCallback,\n { studentID: data.studentID, courseScheduleID: data.courseScheduleID });\n }\n\n function registerOnCourse(data, successCallback, errorCallback) {\n PreviewHour.register(data, function (successResult) {\n if (!!successCallback) {\n repositorySvc.entityUpdated(previewHours, successResult);\n successCallback(successResult);\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_COURSE_REGISTRATION_SUCCESS'));\n }\n },\n function (errorResult) {\n if (!!errorCallback) {\n errorCallback(errorResult.data);\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_COURSE_REGISTRATION_FAILURE'),\n notificationSvc.translateError(errorResult.data));\n }\n });\n }\n\n function excuseFromLesson(data, successCallback, errorCallback) {\n\n PreviewHour.excuse(data, success, error);\n\n function success(successResult) {\n repositorySvc.entityUpdated(previewHours, successResult);\n if (!!successCallback) {\n successCallback(successResult);\n }\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_ATTENDANCE_EXCUSE_SUCCESS'));\n }\n\n function error(errorResult) {\n if (!!errorCallback) {\n errorCallback(errorResult.data);\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ATTENDANCE_EXCUSE_FAILURE'),\n notificationSvc.translateError(errorResult.data));\n }\n }\n }\n\n function bookOnLessonAgain(data, successCallback, errorCallback) {\n\n PreviewHour.rebook(data, success, error);\n\n function success(successResult) {\n repositorySvc.entityUpdated(previewHours, successResult);\n if (!!successCallback) {\n successCallback(successResult);\n }\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_ATTENDANCE_BOOK_AGAIN_SUCCESS'));\n }\n\n function error(errorResult) {\n if (!!errorCallback) {\n errorCallback(errorResult.data);\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ATTENDANCE_BOOK_AGAIN_FAILURE'),\n notificationSvc.translateError(errorResult.data));\n }\n }\n }\n\n return {\n getAll: getAll,\n getAllForClassroomAsync: getAllForClassroomAsync,\n insert: insert,\n update: update,\n remove: remove,\n registerOnCourse: registerOnCourse,\n excuseFromLesson: excuseFromLesson,\n bookOnLessonAgain: bookOnLessonAgain,\n getPreviewHoursSuccessStats: getPreviewHoursSuccessStats,\n getPreviewHoursSuccessGraph: getPreviewHoursSuccessGraph\n }\n }]);","'use strict';\n\nwbApp.factory('previewInterestSvc', ['$resource', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, notificationSvc, repositorySvc) {\n\n var PreviewInterest = $resource('/Api/PreviewInterests/Get', {}, {\n 'query': { method: 'GET', isArray: true },\n 'book': { method: 'POST', url: '/Api/PreviewInterests/Book' },\n });\n\n var previewInterests;\n var forSemesterID;\n\n function getAll(semesterID) {\n if (!previewInterests || forSemesterID != semesterID) {\n previewInterests = repositorySvc.get(PreviewInterest, { semesterID: semesterID });\n forSemesterID = semesterID;\n }\n return previewInterests;\n }\n\n function bookLesson(data, successCallback, errorCallback) {\n PreviewInterest.book({ interestID: data.interestID, courseScheduleID: data.courseScheduleID },\n function (successResult) {\n if (data.semesterID == forSemesterID) {\n repositorySvc.entityRemoved(previewInterests, data.interestID);\n }\n successCallback(successResult);\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_LESSON_BOOKING_SUCCESS'));\n },\n function (errorResult) {\n if (!!errorCallback) {\n errorCallback(errorResult.data);\n } else {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_LESSON_BOOKING_FAILURE'),\n notificationSvc.translateError(errorResult.data));\n }\n })\n };\n\n return {\n getAll: getAll,\n bookLesson: bookLesson\n }\n\n }]);","'use strict';\n\nwbApp.factory('stateCodesSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n\n var StateCode = $resource('/Api/PreviewStateCodes/Get', {}, {\n 'query': { method: 'GET', isArray: true },\n 'save': { method: 'POST', url: '/Api/PreviewStateCodes/Save' },\n 'delete': { method: 'POST', url: '/Api/PreviewStateCodes/Delete' }\n });\n\n var stateCodes;\n\n function getAllAsync() {\n if (!stateCodes) {\n stateCodes = repositorySvc.get(StateCode, {});\n }\n return stateCodes;\n }\n\n function get(id) {\n if (stateCodes) {\n for (var i = 0; i < stateCodes.length; i++) {\n var sc = stateCodes[i];\n if (sc.id === id) {\n return sc;\n }\n }\n }\n return null;\n }\n\n function save(data, successCallback, errorCallback) {\n repositorySvc.save(\n StateCode, // $resource\n stateCodes, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n function remove(data, errorCallback) {\n repositorySvc.remove(\n StateCode, // $resource\n stateCodes, // collection\n data, // entity\n null, // successCallback\n errorCallback);\n }\n\n return {\n getAllAsync: getAllAsync,\n save: save,\n remove: remove,\n get: get,\n }\n\n }]);","'use strict';\n\nwbApp.factory('userRolesSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n var UserRole = $resource('/Api/UserRoles/Get', {}, {\n 'query': { method: 'GET', isArray: true },\n 'save': { method: 'POST', url: '/Api/UserRoles/Save' },\n 'delete': { method: 'POST', url: '/Api/UserRoles/Delete' }\n });\n\n var userRoles;\n var userRolesDict = {};\n\n function getAllAsync(refresh) {\n if (!userRoles || !!refresh) {\n userRolesDict = {};\n userRoles = repositorySvc.get(UserRole, '', function (result) {\n for (var r = 0; r < result.length; r++) {\n var role = result[r];\n role.sf = ConvertArrayToProperties(role.securityFeatures);\n userRolesDict[role.id] = role;\n }\n });\n }\n return userRoles;\n }\n\n function ConvertArrayToProperties(array) {\n var sf = {};\n if (array) {\n for (var f = 0; f < array.length; f++) {\n sf[array[f]] = true;\n }\n }\n\n return sf;\n }\n\n function ConvertPropertiesToArray(sf) {\n var array = [];\n if (sf) {\n for (var propertyName in sf) {\n if (sf[propertyName]) {\n array.push(propertyName);\n }\n }\n }\n\n return array;\n }\n\n function get(id) {\n return userRolesDict[id];\n }\n\n function save(data, successCallback, errorCallback) {\n\n data.securityFeatures = ConvertPropertiesToArray(data.sf);\n // data.sf = undefined;\n repositorySvc.save(\n UserRole, // $resource\n userRoles, // collection\n data, // entity\n function (data) {\n data.sf = ConvertArrayToProperties(data.securityFeatures);\n if (successCallback) {\n successCallback(data);\n }\n },\n errorCallback);\n }\n\n function remove(data, errorCallback) {\n repositorySvc.remove(\n UserRole, // $resource\n userRoles, // collection\n data, // entity\n null, // successCallback\n errorCallback);\n }\n\n function createNew() {\r\n return extendWithRfidSchedule({\r\n id: -1,\n name: \"\",\n description: \"\",\n buildIn: false,\n sf: {},\r\n rfidAccessGroup: {\r\n rfidAccessGroupID: 255\r\n }\r\n });\r\n }\n\n function extendWithRfidSchedule(model) {\r\n\r\n if (model.rfidAccessGroup.rfidAccessGroupID == 255 ||\r\n model.rfidAccessGroup.rfidAccessGroupID == 254 ||\r\n model.rfidAccessGroup.rfidAccessGroupID == 253) {\r\n\r\n model.rfidAccessGroup.schedule = {\r\n sunday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n monday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n tuesday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n wednesday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n thursday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n friday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n saturday: { period0: { startTime: 0, endTime: 0 }, period1: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period2: { startTime: 0, endTime: 0 }, period3: { startTime: 0, endTime: 0 }, period4: { startTime: 0, endTime: 0 } },\r\n };\r\n }\r\n\r\n return model;\r\n }\n\n return {\n getAllAsync: getAllAsync,\n get: get,\n save: save,\n remove: remove,\n createNew: createNew,\n extendWithRfidSchedule: extendWithRfidSchedule\n }\n }\n]);\n","wbApp.controller('CoursesAttendanceCtrl', ['$scope', '$translate', '$q', '$filter', 'courseScheduleSvc', 'attendanceSvc', 'gridSortSvc',\nfunction ($scope, $translate, $q, $filter, courseScheduleSvc, attendanceSvc, gridSortSvc) {\n\n var selectedCourse = null;\n var isActive = false;\n var loaded = false;\n $scope.courseAttendance = [];\n\n function reloadData(refresh) {\r\n if (selectedCourse) {\r\n var schedules = courseScheduleSvc.getAllAsync(selectedCourse.courseID, refresh);\r\n var attendance = attendanceSvc.getAllForCourse(selectedCourse.courseID);\r\n $q.all([schedules.$promise, attendance.$promise]).then(function (res) {\r\n $scope.courseAttendance = attendanceSvc.prepareFullCourseAttendanceTable(attendance, schedules);\r\n\r\n setGridColumns($scope.courseAttendanceGridSettings, schedules);\r\n loaded = true;\r\n });\r\n \r\n }\r\n }\n\n function onCourseScheduleChanged(refresh) {\n reloadData(refresh);\n $scope.$emit('onCourseShouldRefresh', { course: $scope.selectedCourse });\r\n }\n\n $scope.$on('selectedCourseChanged', function (e, courseInd) {\n if (courseInd.course) {\n if (isActive) {\n if (selectedCourse !== courseInd.course || courseInd.refresh) {\n selectedCourse = courseInd.course;\n reloadData(courseInd.refresh);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else { \n $scope.courseAttendance = [];\n }\n selectedCourse = courseInd.course;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 3) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedCourse) {\n reloadData();\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.courseAttendanceGridSettings = {\r\n name: 'courseAttendance',\n columnFixing: { \n enabled: true\n },\n columns: [{\r\n dataField: 'fullName',\r\n caption: $translate.instant('TXT_LBL_STUDENT'),\r\n dataType: 'string',\r\n sortOrder: 'asc',\r\n sortIndex: 1,\r\n fixed: true,\r\n width: '190px',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'fullName') }\r\n }, {\r\n dataField: 'isRegistered',\r\n caption: $translate.instant('TXT_LBL_REGISTERED'),\r\n sortOrder: 'desc',\r\n sortIndex: 0,\r\n visible: false\r\n }],\r\n showColumnLines: true,\r\n showRowLines: true,\r\n onCellPrepared: function (e) {\r\n var visibleColumnIndex = e.columnIndex + 1; // TODO\r\n\r\n if (e.rowType === \"data\" && visibleColumnIndex > 1) {\r\n e.cellElement.mousemove(function () {\r\n var dataField = $scope.courseAttendanceGridSettings.gridInstance.columnOption(visibleColumnIndex, 'dataField'); // $scope.courseAttendanceGridSettings.columns[visibleColumnIndex].dataField;\r\n var attendanceStatusStr = $filter('attendanceStatus')(e.data[dataField].attendanceStatus);\r\n var attendanceTypeStr = $filter('attendanceType')(e.data[dataField].attendanceType);\r\n var msg = !!attendanceTypeStr ? attendanceTypeStr + \"\\n\" + attendanceStatusStr : '';\r\n e.cellElement.attr('title', msg);\r\n });\r\n }\r\n\r\n if (e.rowType === \"data\" && e.columnIndex === 0) { \r\n if (e.data.isRegistered) {\r\n e.cellElement.addClass('bold');\r\n }\r\n }\r\n }\r\n }\n\n function setGridColumns(gridSettings, schedules) {\r\n if (gridSettings.gridInstance) {\r\n\r\n gridSettings.gridInstance.beginUpdate();\r\n\r\n var colCount = gridSettings.gridInstance.columnCount();\r\n for (var i = colCount - 1; i >= 2; i--) {\r\n gridSettings.gridInstance.deleteColumn(i);\r\n }\r\n\r\n var sortedSchedules = _.orderBy(schedules, 'startDate');\r\n _.forEach(sortedSchedules, function (schedule) {\r\n gridSettings.gridInstance.addColumn({\r\n dataField: schedule.courseScheduleID,\r\n caption: $filter('date')(schedule.startDate, 'shortDate'),\r\n width: '65px',\r\n alignment: 'center',\r\n calculateCellValue: function (rowData) {\r\n //Present = 0,\r\n //NotPresentNotExcused = 1,\r\n //NotPresentExcused = 2,\r\n //NotPresentExcusedNoCompensation = 3\r\n var model = rowData[schedule.courseScheduleID] || { attendanceStatus: null };\r\n\r\n switch (model.attendanceStatus) {\r\n case null:\r\n return '';\r\n case 0:\r\n return '|';\r\n case 1:\r\n return 'X';\r\n case 2:\r\n return 'O';\r\n case 3:\r\n return 'PO'\r\n }\r\n }\r\n });\r\n });\r\n\r\n gridSettings.gridInstance.addColumn({\r\n dataField: null,\r\n caption: ' '\r\n });\r\n\r\n gridSettings.gridInstance.endUpdate();\r\n }\r\n }\n}]);\n","wbApp.controller('CoursesCopyDetailCtrl', ['$scope', '$modal', 'courseSvc', 'tenantSettingSvc', 'courseScheduleSvc', 'courseRegistrationSvc',\n '$translate', '$timeout', 'messageBoxSvc', 'semesterSvc', 'holidayCalendarSvc', 'gridSortSvc',\nfunction ($scope, $modal, courseSvc, tenantSettingSvc, courseScheduleSvc, courseRegistrationSvc,\n $translate, $timeout, messageBoxSvc, semesterSvc, holidayCalendarSvc, gridSortSvc) {\n\n // force refresh semesters\n semesterSvc.getAllAsync(true);\n \n var origCourseID = $scope.model.courseID;\n\n $scope.model.courseID = 0;\n $scope.lessons = [];\n $scope.courseCopyMode = true;\n\n var lastExpanded = {\n recurrenceInfo: {},\n };\n\n\n $scope.onSemesterChange = function (semesterID) {\n expandRecurrence($scope.model);\n }\n\n $scope.isBusy = true;\n\n $scope.studentsLoaded = false;\n $scope.recurrenceExpanded = false;\n\n function expandRecurrence(model) {\n var semester = semesterSvc.get(model.semesterID);\n\n if (!!semester && !!semester.holidayCalendarId) {\n holidayCalendarSvc.getById(semester.holidayCalendarId).$promise.then(function (holidayCalendar) {\n expandRecurrenceImpl(model, holidayCalendar.days || []);\n });\n }\n else {\n expandRecurrenceImpl(model, []);\n }\n }\n\n function expandRecurrenceImpl(model, holidays) {\n lastExpanded = {\n startDate: model.startDate,\n endDate: model.endDate,\n semesterID: model.semesterID,\n recurrenceInfo: angular.copy(model.recurrenceInfo),\n recurrenceType: model.recurrenceType\n };\n\n courseScheduleSvc.expandRecurrencePattern(\n lastExpanded).$promise.then(function (data) {\n $scope.lessons = data;\n\n if ($scope.lessonsGridSettings.gridInstance) {\n $timeout(function () {\n $scope.lessonsGridSettings.gridInstance.selectAll();\n\n _.forEach(holidays, function (h) {\n var lesson = _.find($scope.lessons, function (l) {\n return moment(l.startDate).startOf('day').isSame(h);\n });\n if (!!lesson) {\n $scope.lessonsGridSettings.gridInstance.deselectRows([lesson.courseScheduleID]);\n }\n });\n\n $scope.recurrenceExpanded = true;\n $scope.isBusy = false;\n }, 300);\n } else {\n $scope.recurrenceExpanded = true;\n $scope.isBusy = false;\n }\n }, function (error) {\n //$scope.isBusy = false;\n });\n }\n\n courseRegistrationSvc.getAllForCourse(origCourseID).$promise.then(\n function (students) {\n $scope.lessonAttendance = students; \n\n var newRecurrenceModel = courseScheduleSvc.createNew($scope.model, true, function () {\n $scope.model.startDate = newRecurrenceModel.startDate;\n $scope.model.endDate = newRecurrenceModel.endDate;\n $scope.model.recurrenceInfo = newRecurrenceModel.recurrenceInfo;\n $scope.model.recurrenceType = newRecurrenceModel.recurrenceType;\n $scope.editRecurrence = true;\n });\n\n if ($scope.studentsGridSettings.gridInstance) {\n $timeout(function () {\n $scope.studentsGridSettings.gridInstance.selectAll();\n\n expandRecurrence($scope.model);\n\n $scope.$watch('model', function (model) {\n var diff = moment.duration(moment(model.endDate).diff(moment(model.startDate)));\n\n var fdays = diff.days() ? diff.days() + 'd ' : '';\n var fhours = diff.hours() ? diff.hours() + 'h ' : '';\n var fminutes = diff.minutes() ? diff.minutes() + 'm ' : '';\n var fmonths = diff.months() ? diff.months() + 'm ' : '';\n var fyears = diff.years() ? diff.years() + 'r ' : '';\n\n $scope.lessonLength = fyears + fmonths + fdays + fhours + fminutes;\n\n if (!angular.equals(model.recurrenceInfo, lastExpanded.recurrenceInfo) ||\n !moment(model.startDate).isSame(lastExpanded.startDate) ||\n !moment(model.endDate).isSame(lastExpanded.endDate) ||\n model.recurrenceType != lastExpanded.recurrenceType) {\n\n if (model.startDate && model.endDate &&\n moment(model.startDate).isBefore(model.endDate)) {\n $scope.isBusy = true;\n expandRecurrence(model);\n }\n }\n\n }, true);\n\n $scope.studentsLoaded = true;\n\n $scope.isBusy = false;\n }, 300);\n } else {\n $scope.studentsLoaded = true;\n $scope.isBusy = false;\n }\n },\n function (error) {\n $scope.isBusy = false;\n });\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onStartDateChanged = function (startDate) {\n courseScheduleSvc.updateEventByStartDate($scope.model, startDate);\n }\n\n // $scope.model.pictures = [];\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n function saveImpl(data) {\n $scope.isSaving = true;\n\n var dataToSave = angular.copy(data);\n var selectedStudents = $scope.studentsGridSettings.gridInstance.getSelectedRowsData();\n var studentIDs = _.map(selectedStudents, 'studentID');\n dataToSave.studentIDs = studentIDs;\n\n var selectedLessons = $scope.lessonsGridSettings.gridInstance.getSelectedRowsData();\n var lessons = _.map(selectedLessons, 'startDate');\n dataToSave.lessons = lessons;\n\n courseSvc.courseCopySave(dataToSave, success, error);\n\n function success() {\n $scope.$hide();\n if (!!$scope.onCourseCopySave) {\n $scope.onCourseCopySave();\n }\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: $translate.instant('TXT_CONFIRM_COURSE_COPY'),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_SAVE',\n callback: function () { saveImpl(data); }\n }]\n });\n }\n\n $scope.teacherFromNowOnShouldShow = function () {\n return false;\n }\n\n $scope.recurrence = {\n type: 1\n };\n\n $scope.enableZoomIntegration = tenantSettingSvc.settings.enableZoomIntegration;\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"courses/courses/detail-main-tab.html\"\n }, {\n title: 'TXT_PRICE_TAB',\n template: \"courses/courses/detail-price-tab.html\"\n }, {\n title: 'TXT_COMPENSATION',\n template: \"courses/courses/detail-compensation-tab.html\"\n }, {\n title: 'TXT_COMPENSATION_GROUPS',\n template: \"courses/courses/detail-compensation-groups-tab.html\"\n }, {\n title: 'TXT_LBL_SETTING',\n template: \"courses/courses/detail-settings-tab.html\"\n }, {\n title: 'TXT_LBL_DESCRIPTION',\n template: \"courses/courses/detail-description-tab.html\"\n }, {\n title: 'TXT_LBL_PICTURES',\n template: \"courses/courses/detail-pictures-tab.html\"\n }, {\n title: 'TXT_LBL_FILES',\n template: \"courses/courses/detail-protected-storage-tab.html\"\n }, {\n title: 'TXT_LBL_RECURRENCE',\n template: \"schedule/schedule/schedule-course-detail-recurrence-tab.html\"\n }, {\n title: 'TXT_LBL_COURSE_SCHEDULE',\n template: \"courses/courses/copy-detail-lessons-tab.html\"\n }, {\n title: 'TXT_LBL_STUDENTS',\n template: 'courses/courses/copy-detail-students-tab.html'\n }];\n\n if (tenantSettingSvc.settings.enableAmortizationSchedules) {\n var index = _.findIndex($scope.detailTabs, { 'title': 'TXT_COMPENSATION' });\n\n $scope.detailTabs.splice(index, 0, {\n title: 'TXT_TAB_AMORTIZATION_SCHEDULE',\n template: \"courses/courses/detail-amortization-schedule-tab.html\"\n }); \n }\n\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.onDeletePictureBtnClick = function (picture) {\n _.remove($scope.model.pictures || [], { imageUri: picture.imageUri });\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictures) {\n $scope.model.pictures = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictures, { imageUri: p.imageUri }))\n {\n $scope.model.pictures.push(p);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.addAmortizationSchedule = function() {\n $scope.model.amortizationSchedules.push({\n amount: null,\n percentageAmount: null,\n issueAt: null,\n issueDaysAfterRegistration: $scope.model.amortizationSchedules.length == 0 ? 0 : null\n });\n }\n\n $scope.removeAmortizationSchedule = function (schedule) {\n var index = _.indexOf($scope.model.amortizationSchedules, schedule);\n if (index > -1) {\n $scope.model.amortizationSchedules.splice(index, 1);\n }\n }\n\n $scope.lessonsGridSettings = {\n name: 'lessons',\n keyExpr: 'courseScheduleID',\n columns: [\n { dataFiled: 'courseScheduleID', dataType: 'number', visible: false },\n { dataField: 'startDate', caption: $translate.instant('TXT_LBL_START_DATE'), dataType: 'date', format: { raw: \"dd.MM.yy EEE HH:mm\" }, width: '130px', sortOrder: 'asc' },\n { dataField: 'endDate', caption: $translate.instant(\"TXT_LBL_END_DATE\"), dataType: 'date', format: { raw: \"HH:mm\" } },\n ],\n selection: {\n mode: 'multiple'\n },\n onContentReady: function() {\n // $scope.lessonsGridSettings.gridInstance.selectAll();\n }\n };\n\n $scope.studentsGridSettings = {\n name: 'students',\n columns: [\n { dataFiled: 'studentID', dataType: 'number', visible: false },\n { dataField: 'studentFullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', \n sortOrder: 'asc',\n calculateSortValue: function (data) {\n return gridSortSvc.sortHumanFullName2(data, 'studentFullName')\n } }\n ],\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.noFurtherRegisteredAttendance) {\n e.rowElement.addClass('text-muted');\n }\n }\n },\n selection: {\n mode: 'multiple'\n },\n onContentReady: function () {\n $scope.studentsGridSettings.gridInstance.selectAll();\n }\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('CoursesCtrl', ['$scope', '$modal', '$window', '$translate', '$filter', 'semesterSvc',\n 'courseSvc', 'securitySvc', 'tenantSettingSvc', 'courseTypeSvc', 'courseRegistrationSvc',\nfunction ($scope, $modal, $window, $translate, $filter, semesterSvc, courseSvc, securitySvc, tenantSettingSvc, courseTypeSvc,\n courseRegistrationSvc) {\n\n $scope.isInAccountingBookRole = securitySvc.isInRole('AccountingBook');\n $scope.filteredCourses = [];\n $scope.rawCourses = [];\n $scope.courses = [];\n $scope.customFilter = { compensationGroupID: null };\n $scope.courseTypes = courseTypeSvc.getAllForLookup();\n \n function preFilter() {\n if (!$scope.rawCourses.$promise) {\n return;\n }\n\n $scope.rawCourses.$promise.then(function () {\n if (!$scope.customFilter.compensationGroupID) {\n $scope.courses.length = 0;\n $scope.courses.push.apply($scope.courses, $scope.rawCourses);\n } else {\n $scope.courses.length = 0;\n $scope.courses.push.apply($scope.courses,\n _.filter($scope.rawCourses, function (o) {\n return o.compensationGroupID == $scope.customFilter.compensationGroupID;\n }));\n }\n\n $scope.filteredCourses = $scope.courses;\n });\n }\n\n $scope.$watch('customFilter.compensationGroupID', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n function setSelectedCourse(course, refresh) {\n $scope.selectedCourse = course;\n\n if (!course && !!$scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.clearSelection();\n }\n\n $scope.$broadcast('selectedCourseChanged', { course: course, refresh: !!refresh });\n }\n\n $scope.enableZoomIntegration = tenantSettingSvc.settings.enableZoomIntegration;\n\n semesterSvc.getDefaultAsync()\n .then(function (semester) {\n $scope.semesterID = semester.id;\n\n $scope.rawCourses = courseSvc.getAllAsync($scope.semesterID, true);\n // $scope.filteredCourses = $scope.rawCourses;\n preFilter();\n setSelectedCourse(null);\n });\n\n function refreshData() {\n if ($scope.semesterID) {\n $scope.rawCourses = courseSvc.getAllAsync($scope.semesterID, true);\n preFilter();\n //$scope.filteredCourses = $scope.rawCourses;\n setSelectedCourse(null);\n }\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n $scope.$on('onCourseShouldRefresh', function (e, data) {\n courseSvc.refreshCourseRecord($scope.semesterID, data.course.courseID, $scope.courses, function () {\n if ($scope.selectedCourse.courseID === data.course.courseID) {\n setSelectedCourse(data.course, true);\n if ($scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.selectRows(data.course, false);\n }\n }\n });\n });\n\n $scope.getSemesterPercentFilled = function () {\n return ($scope.getSemesterFilled() / $scope.getSemesterCapacity()) * 100;\n }\n\n $scope.getSemesterFilled = function () {\n if (!!$scope.filteredCourses) {\n return _.reduce($scope.filteredCourses, function (total, n) {\n return total + n.filled;\n }, 0);\n }\n return 0;\n }\n\n $scope.getSemesterCapacity = function () {\n if (!!$scope.filteredCourses) {\n return _.reduce($scope.filteredCourses, function (total, n) {\n return total + n.capacity;\n }, 0);\n }\n return 100;\n }\n\n $scope.onFilterApplied = function (rows) {\n $scope.filteredCourses = rows;\n }\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n $scope.rawCourses = courseSvc.getAllAsync($scope.semesterID, true);\n preFilter();\n }\n setSelectedCourse(null);\n }\n\n $scope.gridSettings = {\n name: 'courses',\n columns: [\n { dataField: 'courseID', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n { dataField: 'abbreviation', caption: $translate.instant(\"TXT_LBL_ABBREVIATION\"), dataType: 'string', width: '130px' },\n {\n dataField: 'courseTypeID',\n caption: $translate.instant(\"TXT_LBL_COURSE_TYPE\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('courseType')(rowData.courseTypeID);\n },\n width: '110px'\n },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string' }, \n { dataField: 'subjectName', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string', sortOrder: 'asc' },\n {\n dataField: 'firstLesson',\n caption: $translate.instant('TXT_MENU_SCHEDULE'),\n dataType: 'date',\n format: { raw: \"EEE HH:mm\" },\n calculateSortValue: function (rowData) {\n var mfirstLesson = moment(rowData.firstLesson);\n return mfirstLesson.isValid()\n ? mfirstLesson.day() * 10000 + mfirstLesson.hour() * 100 + mfirstLesson.minute()\n : rowData.firstLesson;\n },\n width: '90px'\n },\n { dataField: 'teacher', caption: $translate.instant('TXT_LBL_EMPLOYEE'), dataType: 'string', width: '170px' },\n { dataField: 'filled', caption: $translate.instant('TXT_LBL_FILLED'), dataType: 'number', width: '80px' },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'fixedPrice', caption: $translate.instant('TXT_LBL_FIXED_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'allowRegistration', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n { dataField: 'isOnlineMeeting', caption: $translate.instant('TXT_LBL_ONLINE'), dataType: 'boolean', width: '60px', visible: $scope.enableZoomIntegration },\n { dataField: 'lessonLengthInMinutes', caption: $translate.instant('TXT_LBL_LESSON_LENGTH'), dataType: 'number', width: '120px', visible: false },\n ],\n onRowPrepared: function (e) {\n if (e.rowType === \"data\") {\n let data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.filled >= data.capacity) {\n e.rowElement.addClass('text-muted');\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_MENU_PRINT_INFO_CARD'),\n isVisible: function () { return securitySvc.isInRole('Course.InfoCard') && securitySvc.isInRole('Reports'); },\n callback: function (data) { onPrintInfoCard(data.courseID); }\n }, {\n text: $translate.instant('TXT_MENU_RESEND_COURSE_REGISTRATION_NOTIFICATION'),\n isVisible: function () { return securitySvc.isInRole('CourseRegistration'); },\n callback: function (data) { onResendCourseRegistrationNotification(data.courseID); }\n }, {\n text: $translate.instant('TXT_COPY'),\n isVisible: function () {\n return securitySvc.isInRole('Course.Copy') &&\n securitySvc.isInRole('CourseRegistration.Insert') &&\n securitySvc.isInRole('CourseSchedule.Insert') &&\n securitySvc.isInRole('Course.Insert');\n },\n callback: function (data) { onCourseCopy(data.courseID); }\n }]\n }\n\n function onResendCourseRegistrationNotification(courseID) {\n var courseRegistrations = courseRegistrationSvc.getAllForCourse(courseID);\n courseRegistrations.$promise.then(function (data) {\n _.forEach(data, function (courseRegistration) {\n courseRegistrationSvc.sendRegistrationNotification(courseRegistration.courseRegistrationID);\n });\n });\n }\n\n\n function onPrintInfoCard(courseID) {\n $window.open('/Admin/Report/InfoCard?CourseID=' + courseID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onCourseCopy(courseID) {\n courseSvc.getByCourseID(courseID).$promise.then(function (course) {\n detailCopyDialogPromise.$promise.then(function () {\n detailCopyDialogPromise.$scope.model = angular.copy(course);\n detailCopyDialogPromise.$scope.onCourseCopySave = function () {\n refreshData();\n };\n detailCopyDialogPromise.show();\n });\n });\n }\n\n $scope.selectedCourse = {};\n\n $scope.onRowSelected = function (data) {\n $scope.selectedCourse = data;\n setSelectedCourse($scope.selectedCourse);\n }\n\n $scope.onRowEdit = function (data) {\n courseSvc.getByCourseID(data.courseID).$promise.then(function (course) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.courses;\n detailDialogPromise.$scope.model = angular.copy(course);\n detailDialogPromise.$scope.onCourseSave = function (model) {\n setSelectedCourse(model, true);\n };\n detailDialogPromise.show();\n });\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.courses;\n detailDialogPromise.$scope.model = courseSvc.createNew($scope.semesterID, false);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n courseSvc.remove(data, $scope.courses, function () {\n $scope.selectedCourse = null;\n setSelectedCourse(null);\n });\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"courses/courses/courses-detail-tabs/detail.html\"\n }, {\n title: 'TXT_LBL_STUDENTS',\n template: 'courses/courses/courses-detail-tabs/students.html'\n }, {\n title: 'TXT_MENU_SCHEDULE',\n template: 'courses/courses/courses-detail-tabs/schedule.html'\n }, {\n title: 'TXT_LBL_ATTENDANCE',\n template: 'courses/courses/courses-detail-tabs/attendance.html'\n }];\n\n if (securitySvc.isInRole('Leads'))\n {\n $scope.tabs.push({\n title: 'TXT_ENABLE_FULL_COURSE_INTEREST',\n template: 'courses/courses/courses-detail-tabs/leads.html'\n });\n }\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n var detailDialogPromise = $modal({\n templateUrl: 'courses/courses/detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n var detailCopyDialogPromise = $modal({\n templateUrl: 'courses/courses/copy-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('CoursesDetailCtrl', ['$scope', '$modal', 'courseSvc', 'tenantSettingSvc', 'localStorageService',\nfunction ($scope, $modal, courseSvc, tenantSettingSvc, localStorageService) {\n\n if (localStorageService.isSupported) {\n if (!$scope.model.courseID) {\n $scope.model.lessonLengthInMinutes = localStorageService.get('lessonLengthInMinutes') || 45;\n }\n }\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (localStorageService.isSupported) {\n if ($scope.modelOrig.lessonLengthInMinutes != data.lessonLengthInMinutes) {\n localStorageService.set('lessonLengthInMinutes', data.lessonLengthInMinutes);\n }\n }\n\n if (!data.courseID) {\n courseSvc.insert(data, $scope.collection, success, error);\n } else {\n courseSvc.update(data, $scope.collection, success, error);\n }\n\n function success(model) {\n $scope.$hide();\n if (!!$scope.onCourseSave) {\n $scope.onCourseSave(model);\n }\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n $scope.onSemesterChange = function (semesterID) {\n\n }\n\n $scope.teacherFromNowOnShouldShow = function () {\n return !!$scope.model.courseID && $scope.modelOrig.employeeID !== $scope.model.employeeID;\n }\n\n $scope.recurrence = {\n type: 1\n };\n\n $scope.enableZoomIntegration = tenantSettingSvc.settings.enableZoomIntegration;\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"courses/courses/detail-main-tab.html\"\n }, {\n title: 'TXT_PRICE_TAB',\n template: \"courses/courses/detail-price-tab.html\"\n }, {\n title: 'TXT_COMPENSATION',\n template: \"courses/courses/detail-compensation-tab.html\"\n }, {\n title: 'TXT_COMPENSATION_GROUPS',\n template: \"courses/courses/detail-compensation-groups-tab.html\"\n }, {\n title: 'TXT_LBL_SETTING',\n template: \"courses/courses/detail-settings-tab.html\"\n }, {\n title: 'TXT_LBL_DESCRIPTION',\n template: \"courses/courses/detail-description-tab.html\"\n }, {\n title: 'TXT_LBL_PICTURES',\n template: \"courses/courses/detail-pictures-tab.html\"\n }, {\n title: 'TXT_LBL_FILES',\n template: \"courses/courses/detail-protected-storage-tab.html\"\n }];\n\n if (tenantSettingSvc.settings.enableAmortizationSchedules) {\n var index = _.findIndex($scope.detailTabs, { 'title': 'TXT_COMPENSATION' });\n\n $scope.detailTabs.splice(index, 0, {\n title: 'TXT_TAB_AMORTIZATION_SCHEDULE',\n template: \"courses/courses/detail-amortization-schedule-tab.html\"\n }); \n }\n\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.onDeletePictureBtnClick = function (picture) {\n _.remove($scope.model.pictures || [], { imageUri: picture.imageUri });\n }\n\n $scope.onContentInfoAccessTimeChanged = function (contentInfoAccessTime) {\n switch (contentInfoAccessTime.accessTimeType) {\n case 0: // NoRestrictions\n contentInfoAccessTime.noOfDays = null;\n contentInfoAccessTime.accessAtUtc = null;\n break;\n case 1: // DaysFromBaseline\n contentInfoAccessTime.noOfDays = 0;\n contentInfoAccessTime.accessAtUtc = null;\n break;\n case 2: // AtSpecificDate\n contentInfoAccessTime.noOfDays = null;\n contentInfoAccessTime.accessAtUtc = new Date();\n break;\n }\n }\n\n $scope.onContentInfoDeleteBtnClick = function (contentInfo) {\n _.remove($scope.model.contentInfos || [], { objectUri: contentInfo.objectUri });\n }\n\n $scope.showProtectedStorageSelect = function () {\n protectedStorageSelectDlgPromise.$promise.then(function () {\n protectedStorageSelectDlgPromise.$scope.onFilesSelected = function (files) {\n\n if (!$scope.model.contentInfos) {\n $scope.model.contentInfos = [];\n }\n\n angular.forEach(files, function (p) {\n if (!_.find($scope.model.contentInfos, { objectUri: p.objectUri })) {\n $scope.model.contentInfos.push({\n objectUri: p.objectUri,\n name: p.name,\n description: null,\n contentType: p.contentType,\n accessTimeBaseline: 0, // AfterPayment\n accessType: 1, // AccessToDownload\n allowAccessFrom: {\n accessTimeType: 1, // DaysFromBaseline\n noOfDays: 0\n },\n allowAccessTo: {\n accessTimeType: 0 // NoRestrictions\n }\n });\n }\n });\n };\n protectedStorageSelectDlgPromise.show();\n });\n }\n\n var protectedStorageSelectDlgPromise = $modal({\n templateUrl: 'storage/protected-storage/protected-storage-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictures) {\n $scope.model.pictures = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictures, { imageUri: p.imageUri }))\n {\n $scope.model.pictures.push(p);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.addAmortizationSchedule = function() {\n $scope.model.amortizationSchedules.push({\n amount: null,\n percentageAmount: null,\n issueAt: null,\n issueDaysAfterRegistration: $scope.model.amortizationSchedules.length == 0 ? 0 : null\n });\n }\n\n $scope.removeAmortizationSchedule = function (schedule) {\n var index = _.indexOf($scope.model.amortizationSchedules, schedule);\n if (index > -1) {\n $scope.model.amortizationSchedules.splice(index, 1);\n }\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('CoursesLeadsCtrl', ['$scope', '$modal', '$q', '$translate', '$filter', 'leadSvc', 'courseSvc', 'gridSortSvc',\n 'securitySvc', 'courseRegistrationSvc',\nfunction ($scope, $modal, $q, $translate, $filter, leadSvc, courseSvc, gridSortSvc, securitySvc, courseRegistrationSvc) {\n\n $scope.selectedCourse = null;\n var isActive = false;\n var loaded = false;\n $scope.courseLeads = [];\n \n $scope.$on('selectedCourseChanged', function (e, courseInd) {\n if (courseInd.course) {\n if (isActive) {\n if ($scope.selectedCourse !== courseInd.course || courseInd.refresh) {\n $scope.courseLeads = leadSvc.getAllByStatusAndCourse(0 /* Open */, courseInd.course.courseID);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.courseLeads = [];\n }\n $scope.selectedCourse = courseInd.course;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 4) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.selectedCourse) {\n $scope.courseLeads = leadSvc.getAllByStatusAndCourse(0 /* Open */, $scope.selectedCourse.courseID);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.courseLeadsGridSettings = {\n name: 'courseLeads',\n columns: [\n {\n dataField: 'id',\n caption: $translate.instant('TXT_LBL_ID'),\n dataType: 'string',\n visible: false,\n showInColumnChooser: false\n },\n {\n dataField: 'userFullName',\n caption: $translate.instant('TXT_LBL_USER'),\n dataType: 'string',\n width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'userFullName') }\n },\n {\n dataField: 'studentsFullName',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string', \n sortOrder: 'asc',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentsFullName') }\n },\n {\n dataField: 'studentBirthday',\n caption: $translate.instant(\"TXT_LAB_BIRTHDAY\"),\n dataType: 'date',\n format: { date: 'short' },\n width: '90px',\n },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '120px'\n },\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px' },\n\n {\n dataField: 'createdAtUtc',\n caption: $translate.instant('TXT_LBL_CREATED_AT'),\n dataType: 'date',\n format: { date: 'short' },\n width: '80px'\n },\n ],\n customCommands: [{\n text: $translate.instant('TXT_MENU_REGISTER_ON_COURSE'),\n isVisible: function (row) { return securitySvc.isInRole('Leads.Update') && securitySvc.isInRole('CourseRegistration.Insert'); },\n callback: function (row) { createCourseRegistrations(row); }\n },{\n text: $translate.instant('TXT_CHANGE_STATE'),\n isVisible: function (data) { return securitySvc.isInRole('Leads.Update'); },\n callback: function (data) { $scope.onChangeStatus(data); }\n }]\n }\n\n function createCourseRegistrations(model) {\n leadSvc.getById(model.id).$promise.then(function (lead) {\n\n var course = $scope.selectedCourse;\n\n if (lead.status == 1) {\n $scope.detailError = { errors: [{ message: $translate.instant('TXT_ERROR_LEAD_ALREADY_CONVERTED') }] };\n }\n else {\n $q.all([detailDialogPromise.$promise, courseRegistrationSvc.createNew(course, false)])\n .then(function (data) {\n var courseRegistration = data[1];\n if (!!lead.studentIds && lead.studentIds.length > 0) {\n courseRegistration.studentID = lead.studentIds[0];\n }\n\n detailDialogPromise.$scope.course = course;\n detailDialogPromise.$scope.model = courseRegistration;\n // Do not search for leads during course registration save\n detailDialogPromise.$scope.ignoreLeadAssignment = true; \n detailDialogPromise.$scope.onAfterSuccessSave = function (cr) {\n\n lead.conversionType = 1; // CourseRegistraction\n lead.conversionReferenceId = cr.courseRegistrationID;\n lead.conversionDateUtc = moment().toDate();\n\n var courseFullName = $filter('courseFullName')(course);\n var firstLesson = !!course.firstLesson\n ? ' (' + $filter('date')(course.firstLesson, 'EEE HH:mm').toUpperCase() + ')'\n : '';\n lead.conversionText = courseFullName + firstLesson;\n lead.status = 1; // Converted\n\n if (!lead.notes || lead.notes.length == 0) {\n lead.notes = [];\n }\n\n var user = securitySvc.loggedInUser();\n\n lead.notes.push({\n text: $translate.instant('TXT_TITLE_REGISTER_ON_COURSE') + ': ' + lead.conversionText,\n updatedAtUtc: moment().toDate(),\n updatedByUserId: user.userID + \"\",\n updatedByName: user.fullName\n });\n\n leadSvc.update(lead).$promise.then(function () {\n $scope.courseLeads = leadSvc.getAllByStatusAndCourse(0 /* Open */, $scope.selectedCourse.courseID);\n });\n };\n detailDialogPromise.show();\n })\n }\n })\n }\n\n $scope.onChangeStatus = function (lead) {\n leadsNoteDetailPromise.$promise.then(function () {\n leadsNoteDetailPromise.$scope.leadId = lead.id;\n leadsNoteDetailPromise.$scope.noteId = null;\n leadsNoteDetailPromise.$scope.onLeadSave = function (model) {\n $scope.courseLeads = leadSvc.getAllByStatusAndCourse(0 /* Open */, $scope.selectedCourse.courseID);\n };\n leadsNoteDetailPromise.show();\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'courses/courses/courses-detail-tabs/students-detail.html',\n show: false, \n scope: $scope.$new()\n });\n\n var leadsNoteDetailPromise = $modal({\n templateUrl: 'leads/leads-detail-tabs/crm-notes-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('CoursesScheduleCtrl', ['$scope', '$modal', '$translate', '$q', 'messageBoxSvc', 'courseScheduleSvc', 'securitySvc', 'courseSvc',\nfunction ($scope, $modal, $translate, $q, messageBoxSvc, courseScheduleSvc, securitySvc, courseSvc) {\n\n var selectedCourse = null;\n var isActive = false;\n var loaded = false;\n $scope.courseSchedules = [];\n\n function reloadData(refresh) {\r\n if (selectedCourse) {\r\n $scope.courseSchedules = courseScheduleSvc.getAllAsync(selectedCourse.courseID, refresh, true);\r\n $scope.courseSchedules.$promise.then(function (data) {\r\n\r\n var acc = 1;\r\n _.forEach(_.orderBy(data, ['startDate'], ['asc'] ), function (schedule) {\r\n if (schedule.recurrenceType !== 4) {\r\n schedule.orderIdx = acc;\r\n acc++;\r\n } \r\n });\r\n });\r\n loaded = true;\r\n }\r\n }\n\n function onCourseScheduleChanged(refresh) {\n reloadData(refresh);\n $scope.$emit('onCourseShouldRefresh', { course: $scope.selectedCourse });\r\n }\n\n $scope.$on('selectedCourseChanged', function (e, courseInd) {\n if (courseInd.course) {\n if (isActive) {\n if (selectedCourse !== courseInd.course || courseInd.refresh) {\n selectedCourse = courseInd.course;\n reloadData(courseInd.refresh);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else { \n $scope.courseSchedules = [];\n }\n selectedCourse = courseInd.course;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedCourse) {\n reloadData();\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function newLesson() {\r\n courseDetailDialogPromise.$promise.then(function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = false;\n courseDetailDialogPromise.$scope.model = courseScheduleSvc.createNew(selectedCourse);\n courseDetailDialogPromise.$scope.onSave = function () {\r\n onCourseScheduleChanged(true);\r\n };\n courseDetailDialogPromise.show();\r\n });\r\n }\n\n function newRecurrence() {\r\n courseDetailDialogPromise.$promise.then(function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = true;\r\n courseDetailDialogPromise.$scope.model = courseScheduleSvc.createNew(selectedCourse, true);\n courseDetailDialogPromise.$scope.onSave = function () {\r\n onCourseScheduleChanged(true);\r\n };\n courseDetailDialogPromise.show();\r\n });\r\n }\n\n function changeRecurrence(lesson) {\r\n var pattern = courseScheduleSvc.getPattern(\r\n lesson.courseID, lesson.courseScheduleID);\r\n $q.all([pattern.$promise, courseDetailDialogPromise.$promise]).then(\r\n function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = true;\r\n courseDetailDialogPromise.$scope.model = angular.copy(pattern);\n courseDetailDialogPromise.$scope.onSave = function () {\r\n onCourseScheduleChanged(true);\r\n };\n courseDetailDialogPromise.show();\r\n });\r\n }\n\n\n function changeLesson(data) {\r\n courseDetailDialogPromise.$promise.then(function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = false;\n courseDetailDialogPromise.$scope.model = angular.copy(data);\n courseDetailDialogPromise.$scope.onSave = function () {\r\n onCourseScheduleChanged(true);\r\n };\n courseDetailDialogPromise.show();\r\n });\r\n }\n\n function deleteSingleLessonNoRecurrence(event) {\r\n courseScheduleSvc.remove(\r\n event,\r\n {\r\n sendEmailNotification: true,\r\n sendSmsNotification: false\r\n },\r\n function () {\r\n onCourseScheduleChanged(true);\r\n }\r\n );\r\n }\n\n function deleteSingleLessonRecurrence(event) {\r\n courseScheduleSvc.remove(\r\n event,\r\n {\r\n sendEmailNotification: true,\r\n sendSmsNotification: false\r\n },\r\n function () {\r\n onCourseScheduleChanged(true);\r\n }\r\n );\r\n }\n\n function deleteRecurrence(event) {\r\n\r\n var pattern = courseScheduleSvc.getPattern(\r\n event.courseID, event.courseScheduleID)\r\n .$promise.then(function (pattern) {\r\n courseScheduleSvc.remove(\r\n pattern,\r\n {\r\n sendEmailNotification: true,\r\n sendSmsNotification: false\r\n },\r\n function () {\r\n onCourseScheduleChanged(true);\r\n }\r\n );\r\n });\r\n }\n\n function getSelectedCourseName() {\r\n return courseSvc.getCourseFullName(selectedCourse);\r\n }\n\n function restoreEvent(event) {\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_RESTORE',\n message: $translate.instant('TXT_TEXT_CONFIRM_RESTORE'),\n buttons: [{\r\n text: 'TXT_BTN_CANCEL'\r\n }, {\r\n text: 'TXT_RESTORE',\n callback: function () {\r\n deleteSingleLessonRecurrence(event);\r\n }\r\n }]\r\n });\r\n }\n\n function deleteEvent(event) {\r\n if (event.recurrenceType === 0) {\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: 'TXT_TEXT_CONFIRM_DELETE',\n buttons: [{\r\n text: 'TXT_BTN_NO'\r\n }, {\r\n text: 'TXT_BTN_YES',\n callback: function () {\r\n deleteSingleLessonNoRecurrence(event);\r\n }\r\n }]\r\n });\r\n } else {\r\n // Recurrence\r\n var courseName = getSelectedCourseName();\r\n\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_DELETE_RECURRENCE',\n message: $translate.instant('TXT_TEXT_CONFIRM_DELETE_RECURRENCE').f(courseName),\n buttons: [{\r\n text: 'TXT_BTN_CANCEL'\r\n }, {\r\n text: 'TXT_BTN_SERIES',\n callback: function () {\r\n deleteRecurrence(event);\r\n }\r\n }, {\r\n text: 'TXT_BTN_THIS_LESSON',\n callback: function () {\r\n deleteSingleLessonRecurrence(event);\r\n }\r\n }]\r\n });\r\n }\n }\n\n\n $scope.courseSchedulesGridSettings = {\r\n name: 'courseSchedules',\n columns: [\n {\r\n dataField: 'courseScheduleID',\n caption: '#', \n dataType: 'number',\r\n allowFiltering: false,\r\n cellTemplate: function (cellElement, cellInfo) {\r\n $('
' + (cellInfo.data.orderIdx || '') + '
').appendTo(cellElement);\r\n },\r\n width: '35px'\r\n },\n {\r\n dataField: 'recurrenceId',\n caption: '',\n dataType: 'string',\r\n allowFiltering: false,\r\n cellTemplate: function (cellElement, cellInfo) {\r\n if (cellInfo.data.recurrenceType === -1) {\r\n $('').appendTo(cellElement);\r\n } else if (!!cellInfo.data.recurrenceType) {\r\n $('').appendTo(cellElement);\r\n } \r\n },\r\n width: '20px'\r\n },\n { dataField: 'startDate', caption: $translate.instant('TXT_LBL_START_DATE'), dataType: 'date', format: { raw: \"dd.MM.yy EEE HH:mm\" }, width: '130px', sortOrder: 'asc' },\n { dataField: 'endDate', caption: $translate.instant(\"TXT_LBL_END_DATE\"), dataType: 'date', format: { raw: \"HH:mm\" }, width: '60px' },\n { dataField: 'classroomName', caption: $translate.instant('TXT_LBL_CLASSROOM'), dataType: 'string', width: '180px' },\n { dataField: 'teacher', caption: $translate.instant('TXT_LBL_EMPLOYEE'), dataType: 'string', width: '180px' },\n { dataField: 'filled', caption: $translate.instant('TXT_LBL_FILLED'), dataType: 'number', width: '70px' },\n { dataField: 'capacity', caption: $translate.instant('TXT_LBL_CAPACITY'), dataType: 'number', width: '70px' },\n {\r\n dataField: 'waitQueue',\n caption: $translate.instant('TXT_LBL_WAIT_QUEUE'),\n dataType: 'number',\r\n calculateCellValue: function (rowData) {\r\n return rowData.waitQueue.length;\r\n },\r\n width: '70px'\r\n },\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' }\n ],\r\n shouldDisableAdd: function () { return !$scope.selectedCourse; },\r\n onRowPrepared: function (e) {\r\n if (e.rowType == \"data\") {\r\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.recurrenceType === 4) {\r\n e.rowElement.addClass('text-muted');\r\n }\r\n }\r\n },\r\n customCommands: [{\r\n text: $translate.instant('TXT_LBL_NEW_LESSON'),\r\n isVisible: function () {\r\n return securitySvc.isInRole('CourseSchedule.Insert');\r\n },\r\n callback: function () {\r\n newLesson();\r\n }\r\n }, {\r\n text: $translate.instant('TXT_LBL_NEW_RECURRENCE'),\r\n isVisible: function () {\r\n return securitySvc.isInRole('CourseSchedule.Insert');\r\n },\r\n callback: function () {\r\n newRecurrence();\r\n }\r\n }, {\r\n text: $translate.instant('TXT_MENU_EDIT'),\r\n isVisible: function (event) {\r\n return !!event && event.recurrenceType !== 4 && securitySvc.isInRole('CourseSchedule.Update');\r\n },\r\n callback: function (event) {\r\n changeLesson(event);\r\n }\r\n }, {\r\n text: $translate.instant('TXT_LBL_CHANGE_RECURRENCE'),\r\n isVisible: function (event) {\r\n return !!event && event.recurrenceType !== 0 && event.recurrenceType !== 4 && securitySvc.isInRole('CourseSchedule.Update');\r\n },\r\n callback: function (event) {\r\n changeRecurrence(event);\r\n }\r\n }, {\r\n text: $translate.instant('TXT_MENU_DELETE'),\r\n isVisible: function (event) {\r\n return !!event && event.recurrenceType !== 4 && securitySvc.isInRole('CourseSchedule.Delete');\r\n },\r\n callback: function (event) {\r\n deleteEvent(event);\r\n }\r\n }, {\r\n text: $translate.instant('TXT_RESTORE'),\r\n isVisible: function (event) {\r\n return !!event && event.recurrenceType === 4 && securitySvc.isInRole('CourseSchedule.Delete');\r\n },\r\n callback: function (event) {\r\n restoreEvent(event);\r\n }\r\n }]\r\n }\n\n \n $scope.selectedSchedule = {};\n\n $scope.onRowSelected = function (data) {\n $scope.selectedSchedule = data;\n }\n\n $scope.onRowAdd = function () {\n var courseName = getSelectedCourseName();\r\n\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_QUESTION',\n message: $translate.instant('TXT_TEXT_CREATE_LESSON_OR_RECURRENCE').f(courseName),\n buttons: [{\r\n text: 'TXT_BTN_CANCEL'\r\n }, {\r\n text: 'TXT_BTN_CREATE_SERIES',\n callback: function () {\r\n newRecurrence();\r\n }\r\n }, {\r\n text: 'TXT_BTN_SINGLE_LESSON',\n callback: function () {\r\n newLesson();\r\n }\r\n }]\r\n });\n }\n\n var courseDetailDialogPromise = $modal({\r\n templateUrl: 'schedule/schedule-course-detail.html',\n show: false,\n scope: $scope.$new()\r\n });\n}]);\n","'use strict';\r\n\r\nwbApp.controller('CoursesStudentsCtrl', ['$scope', '$q', '$modal', '$window', '$translate', '$filter', 'securitySvc', 'tenantSettingSvc', 'courseRegistrationSvc', 'gridSortSvc',\r\nfunction ($scope, $q, $modal, $window, $translate, $filter, securitySvc, tenantSettingSvc, courseRegistrationSvc, gridSortSvc) {\r\n\r\n $scope.tenantSettings = tenantSettingSvc.settings;\r\n\r\n $scope.selectedCourse = null;\r\n var isActive = false;\r\n var loaded = false;\r\n $scope.courseRegistrations = [];\r\n\r\n function onCourseScheduleChanged() {\r\n $scope.$emit('onCourseShouldRefresh', { course: $scope.selectedCourse });\r\n }\r\n\r\n $scope.$on('selectedCourseChanged', function (e, courseInd) {\r\n if (courseInd.course) {\r\n if (isActive) {\r\n if ($scope.selectedCourse !== courseInd.course || courseInd.refresh) {\r\n $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse(courseInd.course.courseID);\r\n }\r\n loaded = true;\r\n } else {\r\n loaded = false;\r\n }\r\n } else {\r\n $scope.courseRegistrations = [];\r\n }\r\n $scope.selectedCourse = courseInd.course;\r\n });\r\n\r\n $scope.$on('activeTabChanged', function (e, data) {\r\n if (data.activeTab === 1) {\r\n if (!isActive) {\r\n isActive = true;\r\n if (!loaded && $scope.selectedCourse) {\r\n $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID);\r\n loaded = true;\r\n }\r\n }\r\n } else {\r\n isActive = false;\r\n }\r\n });\r\n\r\n $scope.courseRegistrationsGridSettings = {\r\n name: 'courseRegistrations',\r\n columns: [\r\n {\r\n dataField: 'studentFullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '190px', sortOrder: 'asc',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'studentName', 'studentSurname', 'studentMiddleName') }\r\n },\r\n { dataField: 'studentAge', caption: $translate.instant(\"TXT_LBL_AGE\"), dataType: 'string', width: '70px' },\r\n { dataField: 'studentBirthday', caption: $translate.instant(\"TXT_LAB_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '70px', visible: false },\r\n {\r\n dataField: 'contactPhone',\r\n caption: $translate.instant('TXT_LBL_PHONE'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.contactPhone);\r\n },\r\n width: '120px'\r\n },\r\n { dataField: 'contactEmail', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px' },\r\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\r\n { dataField: 'paymentsSum', caption: $translate.instant('TXT_LBL_PAYMENTS'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\r\n { dataField: 'registrationDate', caption: $translate.instant('TXT_SEC_CLIENT_COURSE_REGISTRATION'), dataType: 'date', format: { date: 'short' }, width: '80px' },\r\n { dataField: 'notificationSent', caption: $translate.instant('TXT_LBL_NOTIFICATION_SENT'), dataType: 'boolean', width: '40px' },\r\n ],\r\n shouldDisableAdd: function () { return !$scope.selectedCourse; },\r\n onRowPrepared: function (e) {\r\n if (e.rowType == \"data\") {\r\n var data = e.component.getKeyByRowIndex(e.rowIndex);\r\n if (data.noFurtherRegisteredAttendance) {\r\n e.rowElement.addClass('text-muted');\r\n }\r\n }\r\n },\r\n onCellPrepared: function (e) {\r\n if (e.rowType === \"data\" && e.columnIndex == 2) {\r\n e.cellElement.mousemove(function () {\r\n if (!!e.data.studentBirthday) {\r\n e.cellElement.attr('title', $translate.instant(\"TXT_LAB_BIRTHDAY\") + \": \" + $filter('date')(e.data.studentBirthday, 'shortDate'));\r\n }\r\n });\r\n }\r\n },\r\n customCommands: [{\r\n text: $translate.instant('TXT_MENU_CREATE_PAYMENT'),\n isVisible: function (row) { return (row.arrear > 0) && securitySvc.isInRole('Payment.Insert'); },\n callback: function (row) { addPayment(row); }\r\n },{\r\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\r\n isVisible: function () { return securitySvc.isInRole('Reports') && securitySvc.isInRole('CourseRegistration.PrintInvoice'); },\r\n callback: function (data) { onPrintInvoice(data.courseRegistrationID); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_PRINT_APPLICATION_FORM'),\r\n isVisible: function () { return securitySvc.isInRole('Reports') && securitySvc.isInRole('CourseRegistration.PrintApplicationForm'); },\r\n callback: function (data) { onPrintApplicationForm(data.courseRegistrationID); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_PRINT_INFO_CARD'),\r\n isVisible: function () { return securitySvc.isInRole('Course.InfoCard') && securitySvc.isInRole('Reports'); },\r\n callback: function (data) { onPrintInfoCard(data.courseID, data.studentID); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_RESEND_COURSE_REGISTRATION_NOTIFICATION'),\r\n isVisible: function () { return securitySvc.isInRole('CourseRegistration'); },\r\n callback: function (data) {\r\n courseRegistrationSvc.sendRegistrationNotification(data.courseRegistrationID)\r\n .then(function () {\r\n data.notificationSent = true;\r\n });\r\n }\r\n }]\r\n }\r\n\r\n function onPrintInfoCard(courseID, studentID) {\r\n $window.open('/Admin/Report/InfoCard?CourseID=' + courseID + '&studentID=' + studentID,\r\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\r\n\r\n function onPrintInvoice(courseRegistrationID) {\r\n $window.open('/Admin/Report/Invoice?ReportID=' + courseRegistrationID + '&ReportIDType=0',\r\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\r\n\r\n function onPrintApplicationForm(courseRegistrationID) {\r\n $window.open('/Admin/Report/ApplicationForm?CourseRegistrationID=' + courseRegistrationID,\r\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\r\n\r\n\r\n if ($scope.tenantSettings.showArrearInsteadOfPayments) {\r\n var column = _.find($scope.courseRegistrationsGridSettings.columns, { dataField: 'paymentsSum' });\r\n if (column) {\r\n column.dataField = 'arrear';\r\n column.caption = $translate.instant('TXT_LBL_ARREAR')\r\n }\r\n }\r\n \r\n $scope.selectedRegistration = {};\r\n\r\n $scope.onRowSelected = function (data) {\r\n $scope.selectedRegistration = data;\r\n }\r\n\r\n $scope.onRowEdit = function (data) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.course = $scope.selectedCourse;\r\n detailDialogPromise.$scope.model = new webooker_courses_models.CourseRegistration(data);\r\n detailDialogPromise.$scope.onAfterSuccessSave = function () {\r\n $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID);\r\n onCourseScheduleChanged();\r\n }\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowAdd = function () {\r\n\r\n $q.all([detailDialogPromise.$promise, courseRegistrationSvc.createNew($scope.selectedCourse, false)])\r\n .then(function (data) {\r\n var courseRegistration = data[1];\r\n detailDialogPromise.$scope.course = $scope.selectedCourse;\r\n detailDialogPromise.$scope.model = courseRegistration;\r\n detailDialogPromise.$scope.onAfterSuccessSave = function () {\r\n $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID);\r\n onCourseScheduleChanged();\r\n }\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n courseRegistrationSvc.remove(\r\n data,\r\n 1, /* SubjectCategory.RegularCourses */\r\n function () {\r\n $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID);\r\n onCourseScheduleChanged();\r\n });\r\n }\r\n\r\n var detailDialogPromise = $modal({\r\n templateUrl: 'courses/courses/courses-detail-tabs/students-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n var addPaymentPromise = $modal({\r\n templateUrl: 'finance/payments/payments-detail.html',\n show: false,\n scope: $scope.$new()\r\n });\n\n function addPayment(data) {\r\n addPaymentPromise.$scope.isAddDuePayment = true;\n addPaymentPromise.$scope.paymentDetail = {\r\n paymentID: 0,\n invoiceForType: 1,\n invoiceID: data.invoiceID,\n amount: data.arrear,\n selectedDate: moment().toDate(),\r\n };\n\n addPaymentPromise.$promise.then(function () {\r\n addPaymentPromise.$scope.detailError = null;\n addPaymentPromise.$scope.onSave = function () {\r\n $scope.courseRegistrations = courseRegistrationSvc.getAllForCourse($scope.selectedCourse.courseID); \r\n }\n\n addPaymentPromise.show();\r\n });\r\n }\r\n}]);\r\n","'use strict';\n\nwbApp.controller('CoursesStudentsDetailCtrl', ['$scope', '$modal', 'securitySvc', 'messageBoxSvc', 'courseRegistrationSvc', 'tenantSettingSvc', 'leadSvc',\n '$translate', 'courseSvc', '$filter', 'localStorageService',\nfunction ($scope, $modal, securitySvc, messageBoxSvc, courseRegistrationSvc, tenantSettingSvc, leadSvc, $translate, courseSvc, $filter, localStorageService) {\n\n $scope.allowDiscounts = tenantSettingSvc.settings.allowDiscounts;\n $scope.calculatedDueDate = { dueDate: null };\n $scope.modelOrig = angular.copy($scope.model);\n $scope.registeredAttendance = [];\n\n $scope.isReady = false;\n $scope.isBusy = false;\n\n $scope.popover = {\n fromDate: null,\n toDate: null,\n okClick: function () {\n var fromDateM = moment($scope.popover.fromDate).startOf('day');\n var toDateM = moment($scope.popover.toDate).endOf('day');\n\n angular.forEach($scope.registeredAttendance, function (key, value) {\n var lessonStartDate = moment(key.startDate);\n if (fromDateM.isSameOrBefore(lessonStartDate) &&\n toDateM.isSameOrAfter(lessonStartDate)) {\n // in range\n if (!key.isDisabled) {\n key.isRegistered = true;\n }\n } else {\n // out of range\n if (!key.isDisabled) {\n key.isRegistered = false;\n }\n }\n }); \n }\n }\n \n $scope.onRegistrationDateChange = function(registrationDate) {\n if ($scope.allowDiscounts) {\n courseRegistrationSvc.calcExpectedDueDate($scope.course.courseID, registrationDate).$promise.then( function(data) {\n $scope.calculatedDueDate.dueDate = data.dueDate;\n });\n } \n }\n\n function extendModel(course) {\n\n setIsBusy(true);\n\n courseRegistrationSvc.initializeModel($scope.model, course, false, true)\n .then(function () {\n $scope.modelOrig = angular.copy($scope.model);\n $scope.registeredAttendance = $scope.model.registeredAttendance;\n\n if ($scope.allowDiscounts) {\n courseRegistrationSvc.calcExpectedDueDate($scope.course.courseID, $scope.model.registrationDate).$promise.then( function(data) {\n $scope.calculatedDueDate.dueDate = data.dueDate;\n });\n }\n\n setIsBusy(false);\n },\n function (errorResult) {\n $scope.registeredAttendance = [];\n $scope.detailError = errorResult;\n\n setIsBusy(false);\n });\n }\n\n function setIsBusy(isBusy) {\n $scope.isBusy = isBusy;\n $scope.isReady = !isBusy;\n angular.forEach($scope.detailTabs, function (tab) {\n tab.disabled = isBusy;\n });\n }\n\n\n extendModel($scope.course);\n\n $scope.onStudentChange = function (studentID) {\n extendModel($scope.course);\n }\n\n $scope.isSaving = false;\n\n $scope.onDataRangeChanged = function () {\n\n }\n\n $scope.onDetailCanceled = function () {\n $scope.$hide();\n if ($scope.onAfterDialogCancel) {\n $scope.onAfterDialogCancel();\n } \n }\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function saveLead(cr) {\n if (!!selectedLead) {\n if (securitySvc.isInRole('Leads') && securitySvc.isInRole('Leads.Update')) {\n\n selectedLead.conversionType = 1; // CourseRegistraction\n selectedLead.conversionReferenceId = cr.courseRegistrationID;\n selectedLead.conversionDateUtc = moment().toDate();\n\n var courseFullName = courseSvc.getCourseFullName($scope.course);\n var firstLesson = !!$scope.course.firstLesson\n ? ' (' + $filter('date')($scope.course.firstLesson, 'EEE HH:mm').toUpperCase() + ')'\n : '';\n selectedLead.conversionText = courseFullName + firstLesson;\n selectedLead.status = 1; // Converted\n\n if (!selectedLead.notes || selectedLead.notes.length == 0) {\n selectedLead.notes = [];\n }\n\n var user = securitySvc.loggedInUser();\n\n selectedLead.notes.push({\n text: $translate.instant('TXT_TITLE_REGISTER_ON_COURSE') + ': ' + selectedLead.conversionText,\n updatedAtUtc: moment().toDate(),\n updatedByUserId: user.userID + \"\",\n updatedByName: user.fullName\n });\n\n leadSvc.update(selectedLead);\n }\n }\n }\n\n function success(cr) {\n saveLead(cr);\n $scope.onAfterSuccessSave(cr);\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n function cancel() {\n $scope.isSaving = false;\n }\n\n var selectedLead = null;\n\n function confirmUpdate(updateInvoice) {\n messageBoxSvc.showConfirmClientNotification({\n userSetting: ['confimNotificationCourseStudent'],\n showSendSmsNotification: false,\n callback: function (notificationConfig) {\n courseRegistrationSvc.update(\n model,\n notificationConfig,\n 1, /* SubjectCategory.RegularCourses */\n updateInvoice,\n success,\n error);\n }\n });\n }\n\n if (!$scope.ignoreLeadAssignment && // Do not search for leads during course registration save\n !model.courseRegistrationID &&\n securitySvc.isInRole('Leads') &&\n securitySvc.isInRole('Leads.Update')) {\n leadSvc.getAllByStatusAndStudent(0, model.studentID).$promise.then(function (leads) {\n if (!!leads && leads.length != 0) {\n // Leads selection dialog\n leadSelectionDlg.$promise.then(function () {\n leadSelectionDlg.$scope.leads = leads;\n leadSelectionDlg.$scope.onLeadSelected = function (lead) {\n selectedLead = lead;\n saveImpl();\n };\n leadSelectionDlg.show();\n });\n } else {\n selectedLead = null;\n saveImpl();\n }\n });\n } else {\n saveImpl();\n }\n\n function saveImpl()\n {\n $scope.saveManualAdjustmentTextToLocalStorage(model.invoice);\n\n if (!model.courseRegistrationID) {\n messageBoxSvc.showConfirmClientNotification({\n userSetting: ['confimNotificationCourseStudent'],\n showSendSmsNotification: false,\n callback: function (notificationConfig) {\n courseRegistrationSvc.insert(\n model,\n notificationConfig,\n 1, /* SubjectCategory.RegularCourses */\n success,\n error);\n }\n });\n } else {\n if (model.invoice.isModified) {\n // Invoice has changed, ask user for confirmation\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'TXT_TEXT_INVOICE_HAS_CHANGED',\n buttons: [{\n text: 'TXT_BTN_CANCEL',\n callback: cancel\n }, {\n text: 'TXT_BTN_NO_INVOICE_CHANGES',\n callback: function () { confirmUpdate(false); }\n }, {\n text: 'TXT_BTN_CREATE_NEW_INVOICE',\n callback: function () { confirmUpdate(true); }\n }]\n });\n } else {\n courseRegistrationSvc.update(\n model,\n {\n sendEmailNotification: false,\n sendSmsNotification: false\n },\n 1, /* SubjectCategory.RegularCourses */\n false,\n success,\n error);\n }\n }\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig) && !!$scope.modelOrig.courseRegistrationID &&\n (!!$scope.model.invoice && !$scope.model.invoice.isModified);\n };\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: 'courses/courses/courses-detail-tabs/students-detail-main-tab.html',\n disabled: true,\n }, {\n title: 'TXT_SEC_COMPENSATION_SUMMARY',\n template: 'courses/courses/courses-detail-tabs/students-detail-compensations-tab.html',\n disabled: true,\n }, {\n title: 'TXT_LBL_ATTENDANCE',\n template: 'courses/courses/courses-detail-tabs/students-detail-attendance-tab.html',\n disabled: true,\n }, {\n title: 'TXT_PRICE_TAB',\n template: 'courses/courses/courses-detail-tabs/students-detail-price-tab.html',\n disabled: true,\n }, {\n title: 'TXT_LAB_HEALTH',\n template: 'courses/courses/courses-detail-tabs/students-detail-health-tab.html',\n disabled: true,\n }, {\n title: 'TXT_LBL_PARENT',\n template: 'courses/courses/courses-detail-tabs/students-detail-parent-tab.html',\n disabled: true,\n }];\n\n if (!securitySvc.isInRole('CourseRegistration.Compensations')) {\n $scope.detailTabs.splice(1, 1);\n }\n\n $scope.detailTabs.activeTab = 0;\n\n\n $scope.attendanceFilterOptions = {\n filterText: \"\"\n };\n\n $scope.attendanceGridOptions = {\n sortInfo: { fields: ['startDate'], directions: ['asc'] },\n columnDefs: [{ field: 'startDate', displayName: \"TXT_LBL_START_DATE\", cellFilter: 'date:dd.MM.yy EEE HH:mm', width: '130px' },\n { field: 'endDate', displayName: \"TXT_LBL_END_DATE\", cellFilter: 'date:HH:mm', width: '60px' },\n { field: 'courseAttendanceType', displayName: \"TXT_COL_ATTENDANCE_TYPE\", cellFilter: 'attendanceType', width: '110px' },\n { field: 'courseAttendanceStatus', displayName: \"TXT_COL_ATTENDANCE_STATUS\", cellFilter: 'attendanceStatus', width: '110px' },\n { field: 'attendanceNotes', displayName: \"TXT_NOTE\" }\n ],\n noCommandColumn: true,\n multiSelect: true,\n selectedField: 'isRegistered',\n disabledField: 'isDisabled',\n pageSize: 50\n };\n\n var amortizationScheduleDlg = $modal({\n templateUrl: 'courses/courses/courses-detail-tabs/students-amortization-schedule.html',\n show: false,\n backdrop: true,\n scope: $scope.$new()\n });\n\n var leadSelectionDlg = $modal({\n templateUrl: 'leads/leads/lead-select-open-leads-dialog.html',\n show: false,\n backdrop: true,\n scope: $scope.$new()\n });\n\n\n $scope.showAmortizationSchedule = function (studentRegistration) {\n amortizationScheduleDlg.$promise.then(function () {\n amortizationScheduleDlg.$scope.model = studentRegistration;\n amortizationScheduleDlg.$scope.amortizationScheduleTemplates = studentRegistration.invoice.course.amortizationSchedules;\n amortizationScheduleDlg.show();\n });\n }\n\n $scope.saveManualAdjustmentTextToLocalStorage = function (invoice) {\n if (localStorageService.isSupported) {\n var manualAdjustmentLine = _.find(invoice.lines, function (line) {\n return line.lineType == \"ManualAdjustment\" && line.runtimeManualAdjustmentType == 1;\n });\n\n if (!!manualAdjustmentLine) {\n localStorageService.set('manualAdjustmentDiscountLineName', manualAdjustmentLine.name);\n localStorageService.set('manualAdjustmentDiscountLinePercent', manualAdjustmentLine.percent);\n }\n }\n }\n\n $scope.addInvoiceLine = function (manualAdjustmentLineType) {\n var newLine = $scope.model.invoice.addManualAdjustmentLine(manualAdjustmentLineType);\n if (manualAdjustmentLineType == 1) {\n\n if (localStorageService.isSupported) {\n newLine.name = localStorageService.get('manualAdjustmentDiscountLineName') || $translate.instant('TXT_DISCOUNT');\n newLine.percent = localStorageService.get('manualAdjustmentDiscountLinePercent') || 0;\n } else {\n newLine.name = $translate.instant('TXT_DISCOUNT');\n }\n }\n }\n\n $scope.removeInvoiceLine = function (invoice, index) {\n invoice.removeManualAdjustmentLine(index);\n }\n\n $scope.addManualAdjustmentLineDropdown = [\n {\n text: $translate.instant('TXT_ADD_LINE_DISCOUNT_IN_PERCENT'),\n click: 'addInvoiceLine(1)'\n },\n {\n text: $translate.instant('TXT_ADD_LINE_EMPTY'),\n click: 'addInvoiceLine(0)'\n }\n ];\n\n\n}]);\n","'use strict';\n\nwbApp.controller('OnlineMeetingsCtrl', ['$scope', '$modal', '$translate', 'onlineMeetingsSvc', 'tenantInfo', 'messageBoxSvc', 'securitySvc',\nfunction ($scope, $modal, $translate, onlineMeetingsSvc, tenantInfo, messageBoxSvc, securitySvc) {\n\n $scope.fromDate = moment().subtract(5, 'day').startOf('day');\n $scope.toDate = moment().add(1, 'day').startOf('day');\n $scope.onlineMeetings = [];\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n $scope.onDataRangeChanged = function () {\n refreshData();\n }\n\n function refreshData()\n {\n $scope.onlineMeetings = onlineMeetingsSvc.getInfoByDateRange($scope.fromDate, $scope.toDate);\n }\n\n refreshData();\n\n $scope.gridSettings = {\n name: 'onlineMeetings',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n {\n dataField: 'scheduledStartTime',\n caption: $translate.instant('TXT_MENU_SCHEDULE'),\n dataType: 'date',\n format: { type: 'shortDateShortTime' },\n width: '120px',\n sortOrder: 'desc'\n },\n { dataField: 'employeeFullName', caption: $translate.instant('TXT_LBL_EMPLOYEE'), dataType: 'string', width: '160px' },\n { dataField: 'topic', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\n { dataField: 'hasRecordings', caption: $translate.instant('TXT_LBL_RECORDINGS'), dataType: 'boolean', width: '90px' },\n { dataField: 'lengthInMinutes', caption: $translate.instant('TXT_LBL_LESSON_LENGTH'), dataType: 'number', width: '90px' },\n {\n dataField: 'status',\n caption: $translate.instant(\"TXT_LBL_STATE\"),\n dataType: 'number',\n width: '140px',\n calculateCellValue: function (rowData) {\n switch (rowData.status)\n {\n case 0:\n return $translate.instant('TXT_ONLINE_MEETING_STATE_NOT_STARTED');\n case 1:\n return $translate.instant('TXT_ONLINE_MEETING_STATE_IN_PROGRESS');\n case 2:\n return $translate.instant('TXT_ONLINE_MEETING_STATE_FINISHED');\n }\n return $translate.instant('TXT_ONLINE_MEETING_STATE_NOT_STARTED');\n },\n width: '110px'\n },\n ],\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.isDeleted) {\n e.rowElement.addClass('text-muted');\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_DIRECT_JOIN_LINK'),\n isVisible: function (data) { return securitySvc.isInRole('OnlineLessons'); },\n callback: function (data) { onShowDirectJoinLink(data.joinUrl); }\n }]\n }\n\n $scope.onRowSelected = function (data) { \n $scope.$broadcast('selectedOnlineMeetingChanged', { meeting: data });\n }\n\n function onShowDirectJoinLink(joinUrl) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_DIRECT_JOIN_LINK',\n message: '
{0}'.f(joinUrl),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n }\n\n $scope.tabs = [\n {\n title: 'TXT_LBL_RECORDINGS',\n template: \"courses/online-meetings/online-meetings-tabs/recordings.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n \n\n\n\n}]);\n","'use strict';\n\nwbApp.controller('OnlineMeetingsRecordingsCtrl', ['$scope', '$q', '$modal', '$window', '$translate', 'onlineMeetingsSvc',\nfunction ($scope, $q, $modal, $window, $translate, onlineMeetingsSvc) {\n\n $scope.onlineMeetingsRecordings = [];\n\n $scope.$on('selectedOnlineMeetingChanged', function (e, onlineMeetingInd) {\n if (!!onlineMeetingInd) {\n onlineMeetingsSvc.getById(onlineMeetingInd.meeting.id).$promise.then(function (onlineMeetingDetail) {\n $scope.onlineMeetingsRecordings = onlineMeetingDetail.recordings;\n })\n } else {\n $scope.onlineMeetingsRecordings = [];\n }\n });\n\n $scope.onlineMeetingsRecordingsGridSettings = {\n name: 'onlineMeetingsRecordings',\n columns: [\n {\n dataField: 'url',\n caption: $translate.instant('TXT_HUMAN_NAME'),\n dataType: 'string',\n cellTemplate: function (cellElement, cellInfo) {\n $('' + cellInfo.data.url + '').appendTo(cellElement);\n },\n },\n { dataField: 'startedAtUtc', caption: $translate.instant('TXT_LBL_START_DATE'), dataType: 'datetime', format: { datetime: 'short' }, width: '120px', sortOrder: 'asc' },\n { dataField: 'endedAteUtc', caption: $translate.instant(\"TXT_LBL_END_DATE\"), dataType: 'datetime', format: { datetime: 'short' }, width: '120px' },\n\n ],\n }\n\n}]);\n","wbApp.controller('StudentAmortizationScheduleCtrl', ['$scope', 'coursePriceSvc',\n function ($scope, coursePriceSvc) {\n\n $scope.amortizationSchedules = coursePriceSvc.calculateAmortizationSchedules(\n $scope.model.invoice.total,\n $scope.model.registrationDate || moment().toDate(),\n $scope.amortizationScheduleTemplates);\n }]);\n","'use strict';\n\nwbApp.controller('SubjectsCtrl', ['$scope', '$modal', 'subjectsSvc', 'tenantInfo',\nfunction ($scope, $modal, subjectsSvc, tenantInfo) {\n\n $scope.isFranchise = !!_.find(tenantInfo.franchiseCentrals, { isActive: true, supportSubjectLicenses: true });\n $scope.isFranchiseCentral = tenantInfo.isFranchiseCentral;\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n if ($scope.isFranchise) {\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'franchiseCentralTenantID', displayName: \"TXT_LBL_FRANCHISE\", cellFilter: 'franchiseCentralFlt', width: '90px' },\n { field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '270px' }, \n { field: 'description', displayName: \"TXT_LBL_DESCRIPTION\", sort: 'locale' }\n ],\n disabledField: 'franchiseCentralTenantID',\n disabledAreSelectable: true\n };\n } else {\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '270px' },\n { field: 'description', displayName: \"TXT_LBL_DESCRIPTION\", sort: 'locale' }\n ],\n disabledField: 'franchiseCentralTenantID',\n disabledAreSelectable: true\n };\n }\n\n function setSelectedSubject(subject) {\n $scope.selectedSubject = subject;\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.subjects = subjectsSvc.getAllForCoursesAsync(true);\n setSelectedSubject(null);\n });\n\n $scope.subjects = subjectsSvc.getAllForCoursesAsync(true);\n\n $scope.selectedSubject = {};\n\n $scope.onRowSelected = function (data) {\n setSelectedSubject(data);\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = subjectsSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n subjectsSvc.remove(data);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"courses/subjects-detail-tabs/detail.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'courses/subjects-detail.html',\n show: false, \n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('SubjectsDetailCtrl', ['$scope', 'subjectsSvc', 'tenantInfo', 'tenantSettingSvc',\nfunction ($scope, subjectsSvc, tenantInfo, tenantSettingSvc) {\n\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n \n $scope.modelOrig = angular.copy($scope.model);\n\n \n $scope.isFranchiseSubject = function () {\n return (!!$scope.model.franchiseSubjectID || !!$scope.model.franchiseCentralTenantID) && !tenantInfo.isFranchiseCentral;\n }\n\n $scope.isAnyFranchiesActive = !!_.find(tenantInfo.franchiseCentrals, { isActive: true, supportSubjectLicenses: true });\n\n $scope.isFranchiseCentral = tenantInfo.isFranchiseCentral;\n\n $scope.isFranchiesActive = function () {\n return !!_.find(tenantInfo.franchiseCentrals, { tenantID: $scope.model.franchiseCentralTenantID, isActive: true });\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onSubjectDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!data.id) {\n subjectsSvc.insert(data, success, error);\n } else {\n subjectsSvc.update(data, success, error);\n }\n\n function success() {\n $scope.$hide();\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n $scope.onFranchiseCentralChange = function (franchiseCentralID) {\n if (!franchiseCentralID) {\n $scope.model.franchiseCentralTenantID = null;\n $scope.model.franchiseSubjectID = null;\n }\n }\n\n $scope.onFranchiseSubjectChange = function (franchiseSubjectID) {\n if (franchiseSubjectID) {\n subjectsSvc.getFranchiseCentralSubject(\n $scope.model.franchiseCentralTenantID,\n franchiseSubjectID)\n .then(function (subject) {\n if (subject) {\n $scope.model.name = subject.name;\n $scope.model.description = subject.description;\n } else {\n $scope.model.name = '';\n $scope.model.description = null;\n }\n });\n } else {\n $scope.model.name = '';\n $scope.model.description = null;\n }\n }\n\n}]);\n","wbApp.directive('wbAcceptCompensationsFromEdit', ['compensationGroupSvc',\n function (compensationGroupSvc) {\n\n return {\n restrict: 'A',\n require: 'ngModel',\n template: '
' +\n '
' +\n ' ' +\n ' ' +\n '
' +\n '
',\n replace: true,\n link: function (scope, elm, attrs, ctrl) {\n var compensationGroupsRaw = compensationGroupSvc.getLookupActiveAsync(ctrl.$viewValue);\n var initialized = false;\n\n scope.compensationGroups = [];\n\n ctrl.$render = function () {\n\n if (!initialized) {\n compensationGroupsRaw = compensationGroupSvc.getLookupActiveAsync(ctrl.$viewValue);\n }\n\n compensationGroupsRaw.$promise.then(function () {\n\n var lookup = ctrl.$viewValue;\n\n var models = _.map(compensationGroupsRaw, function (cg) {\n return {\n id: cg.id,\n name: cg.name,\n active: cg.active,\n isDeleted: cg.isDeleted,\n included: _.indexOf(lookup, cg.id) !== -1\n };\n });\n\n initialized = true;\n scope.compensationGroups.length = 0;\n scope.compensationGroups.push.apply(scope.compensationGroups, models);\n\n });\n };\n\n scope.$watch('compensationGroups', function (newValue) {\n if (!initialized) {\n return;\n }\n\n var included = _.filter(newValue, { included: true });\n var newViewValue = _.map(included, function (i) {\n return i.id;\n })\n\n ctrl.$setViewValue(newViewValue);\n }, true);\n }\n }\n }]);\n\n\n//
\n//
\n \n// \n// \n \n//
\n//
","'use strict';\n\nwbApp.directive('wbContentInfoAccessTimeBaselineCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_ACCESS_TIME_BASELINE_AFTER_PAYMENT' },\n { id: 1, text: 'TXT_ACCESS_TIME_BASELINE_AFTER_REGISTRACTION' },\n { id: 2, text: 'TXT_ACCESS_TIME_BASELINE_AFTER_COURSE_STARTS' }\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbContentInfoAccessTimeTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_ACCESS_TIME_TYPE_NO_RESTRICTIONS' },\n { id: 1, text: 'TXT_ACCESS_TIME_TYPE_DAYS_FROM_BASELINE' },\n { id: 2, text: 'TXT_ACCESS_TIME_TYPE_AT_SPECIFIC_DATE' }\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbContentInfoAccessTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_ACCESS_TYPE_ACCESS_TO_VIEW' },\n { id: 1, text: 'TXT_ACCESS_TYPE_ACCESS_TO_DOWNLOAD' }\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","wbApp.directive('wbFranchiseCentralSubjectsCombo', ['$timeout', '$translate', 'subjectsSvc',\n function ($timeout, $translate, subjectsSvc) {\n function formatResult(subject) {\n if (!subject) { return; }\n\n return subject.name;\n\n //return \"
\" +\n // \"
\" + subject.name + \"
\" +\n // \"
\" + subject.description || '' + \"
\" +\n // \"
\";\n }\n\n function formatSelection(subject) {\n return subject.name;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n scope: {\n franchiseCentralTenantId: '=',\n },\n link: function (scope, elm, attrs, ctrl) {\n\n \n var subjects = !!scope.franchiseCentralTenantId\n ? subjectsSvc.getAllFranchiseCentralCourseSubjects(scope.franchiseCentralTenantId, true)\n : [];\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_FRANCHISE_CENTRAL_SUBJECT'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: -1,\n id: function (subject) { return subject.id; },\n data: subjects\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n if (subjects.$promise) {\n subjects.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n }\n\n scope.$watch('franchiseCentralTenantId', function (newValue) {\n if (!newValue) {\n subjects.length = 0;\n return;\n }\n var newSubjects = subjectsSvc.getAllFranchiseCentralCourseSubjects(newValue);\n newSubjects.$promise.then(function () {\n if (newSubjects !== subjects) {\n subjects.length = 0;\n subjects.push.apply(subjects, newSubjects);\n }\n\n for (var i = 0; i < subjects.length; i++) {\n if (subjects[i].id == ctrl.$viewValue) {\n $(elm).select2('val', subjects[i].id);\n return;\n }\n }\n\n $(elm).select2('val', null);\n ctrl.$setViewValue(null);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);","wbApp.factory('onlineMeetingsSvc', ['$resource', '$q', 'repositorySvc', 'tenantInfoSvc',\n function ($resource, $q, repositorySvc, tenantInfoSvc) {\n var ZoomMeetings = $resource('/restapi/zoom-meetings', {}, {\n 'getInfoByDateRange': { method: 'GET', url: '/restapi/zoom-meetings/info/range', isArray: true },\n 'getById': { method: 'GET', url: '/restapi/zoom-meetings/:id' },\n });\n\n function getInfoByDateRange(fromDateUtc, toDateUtc) {\n return repositorySvc.customGet('getInfoByDateRange', ZoomMeetings, {\n from: moment(fromDateUtc).startOf('day').toDate(),\n to: moment(toDateUtc).endOf('day').toDate(),\n expanded: 'EmployeePersonalInformation'\n });\n }\n\n function getById(meetingId) {\n return repositorySvc.customGet('getById', ZoomMeetings, { id: meetingId });\n }\n\n return {\n getById: getById,\n getInfoByDateRange: getInfoByDateRange\n }\n }\n]);\n","wbApp.controller('FormResponsePreviewDetailCtrl', ['$scope', '$q', 'formSvc', 'formResponseSvc', 'userSvc', 'studentSvc',\nfunction ($scope, $q, formSvc, formResponseSvc, userSvc, studentSvc) {\n\n // $scope.formId\n \n $scope.adminEdit = !$scope.formResponseId;\n $scope.isSaving = false;\n\n $scope.shouldEnableSaveButton = function () {\n return !!$scope.formResponse.isValid && !$scope.isSaving && !!$scope.enableSave;\n }\n\n $scope.formResponse = {\n id: $scope.formResponseId\n };\n\n function saveResponse(response) {\n\n let responseDto = angular.copy(response);\n responseDto.user = null;\n responseDto.student = null;\n responseDto.showFullEditableUserDetail = null;\n\n formResponseSvc.insert(responseDto).$promise.then(function (success) {\n if (!!$scope.formSaved) {\n $scope.formSaved(success);\n } \n $scope.isSaving = false;\n $scope.$hide();\n },\n function (error) {\n $scope.isSaving = false;\n })\n }\n\n $scope.onSaveClick = function () {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (($scope.formResponse.showFullEditableUserDetail || $scope.formResponse.showFullEditableStudentDetail) &&\n !$scope.formResponse.isNotRegisteredUser) {\n\n let promises = [];\n\n if (!!$scope.formResponse.user && $scope.formResponse.showFullEditableUserDetail) {\n promises.push(userSvc.update($scope.formResponse.user, null, null, true));\n }\n\n if (!!$scope.formResponse.student && $scope.formResponse.showFullEditableStudentDetail) {\n promises.push(studentSvc.update($scope.formResponse.student, null, null, null, true));\n }\n\n $q.all(promises).then(function() {\n saveResponse($scope.formResponse);\n }, function (error) {\n $scope.isSaving = false;\n $scope.respondedSuccesfully = false;\n $scope.errorDetail = error;\n });\n }\n else{\n saveResponse($scope.formResponse);\n } \n }\n\n}]);\n","wbApp.controller('FormResponsesCtrl', ['$scope', '$modal', '$translate', '$filter', 'formResponseSvc', 'securitySvc', 'gridSortSvc',\nfunction ($scope, $modal, $translate, $filter, formResponseSvc, securitySvc, gridSortSvc) {\n\n $scope.formsResponses = [];\n var selectedForm = null;\n\n var formId = null;\n\n function loadData(formId)\n {\n $scope.formsResponses = [];\n var all = formResponseSvc.getAllByFormId(formId);\n all.then(function (data) {\n $scope.formsResponses = data;\n }, function (error) {\n $scope.formsResponses = [];\n });\n }\n\n $scope.$on('formSelectionChanged', function (e, newlySelectedForm) {\n if (newlySelectedForm) {\n \n if ($scope.formsResponsesGridSettings.gridInstance) {\n $scope.formsResponsesGridSettings.gridInstance.columnOption('referenceNumber', 'visible', newlySelectedForm.formType === 1);\n }\n \n if (!selectedForm || (selectedForm.id !== newlySelectedForm.id)) {\n formId = newlySelectedForm.id;\n loadData(formId);\n }\n }\n else {\n $scope.formsResponses = [];\n }\n\n selectedForm = newlySelectedForm;\n });\n\n $scope.formsResponsesGridSettings = {\n name: 'formsResponses',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n {\n showInColumnChooser: false,\n caption: '',\n dataField: 'isNotRegisteredUser',\n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: true, name: $translate.instant('TXT_ANONYMOUS_USER') },\n { id: false, name: $translate.instant('TXT_REGISTERED_USER') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n encodeHtml: false,\n calculateSortValue: function (rowData) { return rowData.marker; },\n calculateDisplayValue: function (rowData) {\n if (typeof rowData.isNotRegisteredUser === 'undefined' || rowData.isNotRegisteredUser === null) {\n return \"\";\n } else {\n var icon = !!rowData.isNotRegisteredUser ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n },\n },\n {\n dataField: 'referenceNumber',\n name: 'referenceNumber',\n caption: $translate.instant('TXT_REFERENCE_NUMBER'), \n dataType: 'string', \n width: '50px',\n visible: false\n }, \n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '190px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\n },\n {\n dataField: 'userPhone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.userPhone);\n },\n width: '120px'\n },\n { dataField: 'userEmail', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px' },\n { dataField: 'studentBirthday', caption: $translate.instant(\"TXT_LBL_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '80px' },\n {\n dataField: 'userFullName', caption: $translate.instant('TXT_VAL_RCPG_USER'), dataType: 'string', width: '190px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'userFullName') }\n },\n { dataField: 'primaryAnswer', caption: $translate.instant('TXT_LBL_YOUR_ANSWER'), dataType: 'string' },\n { dataField: 'createdAt', caption: $translate.instant(\"TXT_LBL_CREATED_AT\"), dataType: 'date', sortOrder: 'desc', format: { type: 'shortDateShortTime' }, width: '120px' },\n ],\n onEditorPreparing: function (e) {\n if (e.parentType == 'filterRow' && e.dataField == 'isNotRegisteredUser') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n var icon = itemIndex == 1 ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n }\n }\n },\n shouldDisableAdd: function () { return !$scope.selectedForm },\n customCommands: [{\n text: $translate.instant('TXT_SHOW_PREVIEW'),\n isVisible: function () { return securitySvc.isInRole('FormsDefinitions') && !!selectedForm; },\n callback: function (data) { $scope.onShowFormPreview(data); }\n }, {\n text: $translate.instant('TXT_PRINT_CONTRACT_TEMPLATE'),\n isVisible: function () { return !!selectedForm && !String.prototype.isNullOrWhitespace(selectedForm.contractTemplateId); },\n callback: function (data) { $scope.onShowContractTemplate(data); }\n }]\n }\n\n $scope.onShowContractTemplate = function(responseInfo) {\n window.open(\"restapi/forms-responses/\" + responseInfo.id + \"/report\", '_blank');\n }\n\n $scope.onShowFormPreview = function (responseInfo) {\n formPreviewPromise.$promise.then(function () {\n formPreviewPromise.$scope.formId = selectedForm.id;\n formPreviewPromise.$scope.formDefinitionRevision = selectedForm.auditEvent.revision !== responseInfo.formDefinitionRevision\n ? responseInfo.formDefinitionRevision\n : null;\n formPreviewPromise.$scope.formResponseId = responseInfo.id;\n formPreviewPromise.$scope.enableSave = true;\n formPreviewPromise.show();\n });\n }\n\n $scope.onAddResponse = function() {\n formPreviewPromise.$promise.then(function () {\n formPreviewPromise.$scope.formId = selectedForm.id;\n formPreviewPromise.$scope.formDefinitionRevision = null;\n formPreviewPromise.$scope.formResponseId = null;\n formPreviewPromise.$scope.enableSave = true;\n formPreviewPromise.$scope.formSaved = function () {\n loadData(formId);\n },\n formPreviewPromise.show();\n });\n }\n\n $scope.onDeleteResponse = function (data) {\n formResponseSvc.remove(data.id).$promise.then(function () {\n loadData(selectedForm.id);\n });\n }\n\n var formPreviewPromise = $modal({\n templateUrl: 'forms/forms-response-preview.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('FormsCtrl', ['$scope', '$q', '$modal', '$translate', 'formSvc', 'securitySvc', 'tenantSettingSvc',\nfunction ($scope, $q, $modal, $translate, formSvc, securitySvc, tenantSettingSvc) {\n\n $scope.tenantSetting = tenantSettingSvc.settings;\n \n function refreshData()\n {\n return $q(function (resolve, reject) {\n let all = formSvc.getAll();\n all.then(function (data) {\n $scope.forms = data;\n setSelectedForm(null);\n resolve();\n }, function (error) {\n $scope.forms = [];\n setSelectedForm(null);\n reject();\n });\n });\n \n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n $scope.gridSettings = {\n name: 'forms',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc' },\n { dataField: 'isActive', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n {\n dataField: 'formType',\n caption: $translate.instant('TXT_LBL_FORM_TYPE'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_FROM_TYPE_GENERIC') },\n { id: 1, name: $translate.instant('TXT_FROM_TYPE_KINDERGARTEN_ENROLLMENT') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', \n displayExpr: 'name'\n },\n width: '140px',\n visible: $scope.tenantSetting.enableKindergartenSupport\n },\n {dataField: 'auditEvent.eventTimeUtc', caption: $translate.instant('TXT_LBL_UPDATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n { dataField: 'auditEvent.userFullName', caption: $translate.instant('TXT_LBL_UPDATED_BY'), dataType: 'string', width: '160px' },\n { dataField: 'displayOrder', caption: $translate.instant('TXT_ORDER'), dataType: 'number', width: '60px' },\n { dataField: 'auditEvent.revision', caption: $translate.instant('TXT_LBL_REVISION'), dataType: 'number', width: '60px' },\n ],\n customCommands: [{\n text: $translate.instant('TXT_SHOW_PREVIEW'),\n isVisible: function () { return securitySvc.isInRole('FormsDefinitions'); },\n callback: function (data) { $scope.onShowFormPreview(data.id); }\n }]\n }\n\n $scope.onShowFormPreview = function (formId) {\n formPreviewPromise.$promise.then(function () {\n formPreviewPromise.$scope.formId = formId;\n formPreviewPromise.$scope.enableSave = false;\n formPreviewPromise.show();\n });\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedForm(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = formSvc.createNew();\n detailDialogPromise.$scope.onFormSave = function (model) {\n refreshData();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onFormSave = function () {\n refreshData();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowCopy = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.model.isNew = true;\n detailDialogPromise.$scope.model.id = null;\n detailDialogPromise.$scope.onFormSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedForm(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n formSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedForm(form, refresh) {\n $scope.selectedForm = form;\n $scope.$broadcast('formSelectionChanged', $scope.selectedForm);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_LBL_FORM_RESPONSES',\n template: \"form/form-detail-tabs/responses.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n var detailDialogPromise = $modal({\n templateUrl: 'forms/forms-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var formPreviewPromise = $modal({\n templateUrl: 'forms/forms-response-preview.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('FormsDetailCtrl', ['$scope', '$modal', 'formSvc', 'tenantSettingSvc',\nfunction ($scope, $modal, formSvc, tenantSettingSvc) {\n\n $scope.tenantSetting = tenantSettingSvc.settings;\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n \n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n formSvc.insert(data)\n .$promise.then(success, error);\n } else {\n formSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success() {\n $scope.onFormSave();\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.primaryQuestionIndexPlusOne = $scope.model.primaryQuestionIndex + 1;\n $scope.onPrimaryQuestionIndexPlusOneChange = function(newValue)\n {\n $scope.model.primaryQuestionIndex = newValue - 1;\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onQuestionAdd = function () {\n formSvc.addNewQuestion($scope.model);\n }\n\n $scope.onQuestionRemove = function (question) {\n var index = $scope.model.questions.indexOf(question);\n if (index > -1) {\n $scope.model.questions.splice(index, 1);\n }\n }\n\n $scope.onOptionAdd = function (question) {\n formSvc.addNewOption(question);\n }\n\n $scope.onOptionRemove = function (question, option) {\n var index = question.options.indexOf(option);\n if (index > -1) {\n question.options.splice(index, 1);\n }\n }\n\n $scope.isFormValid = function() {\n return formSvc.isFormValid($scope.model);\n }\n\n $scope.onQuestionTypeChanged = function(question, questionType) \n {\n if (questionType != 4)\n {\n if (!question.options || question.options.length == 0)\n {\n formSvc.addNewOption(question);\n }\n }\n else \n {\n question.options = null;\n }\n }\n\n $scope.onDeletePictureBtnClick = function (pictureUrl) {\n _.pull($scope.model.pictureUrls || [], pictureUrl);\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictureUrls) {\n $scope.model.pictureUrls = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictureUrls, p.imageUrl)) {\n $scope.model.pictureUrls.push(p.imageUrl);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n \n $scope.onAccessPermissionChange = function() {\n if ($scope.model.accessPermissions != 0) {\n $scope.model.showFullEditableStudentDetail = false;\n\n if ($scope.model.accessPermissions != 3) {\n $scope.model.showFullEditableUserDetail = false;\n \n $scope.model.contractTemplateId = null;\n $scope.model.formType = 0;\n }\n }\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"forms/forms-detail-main-tab.html\"\n },\n {\n title: 'TXT_LBL_SETTING',\n template: \"forms/forms-detail-settings-tab.html\"\n },\n {\n title: 'TXT_LBL_QUESTIONS',\n template: \"forms/forms-detail-questions-tab.html\"\n },\n {\n title: 'TXT_LBL_PICTURES',\n template: \"forms/forms-detail-pictures-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n}]);\n","wbApp.controller('LeadsAdmissionDetailCtrl', ['$scope', '$modal', '$translate', '$timeout', 'leadSvc', 'localStorageService',\nfunction ($scope, $modal, $translate, $timeout, leadSvc, localStorageService) {\n\n// $scope.lead = ...; // Full lead object\n// $scope.dialogType = ['sendAdmissionAcceptance', 'sendAdmissionRejection', 'printAdmissionAcceptance', 'printAdmissionRejection']\n \n $scope.isSaving = false;\n $scope.model = {\n contractTemplateTypeId: null\n };\n \n switch($scope.dialogType) {\n case 'sendAdmissionAcceptance':\n $scope.contractTemplateTypeFilter = 8; // AdmissionAcceptance\n $scope.savebuttonText = $translate.instant('TXT_BTN_SEND');\n $scope.title = $translate.instant('TXT_SEND_ADMISSION_ACCEPTANCE');\n $scope.model.contractTemplateTypeId = localStorageService.get('admissionAcceptanceContractTemplateId');\n break;\n case 'printAdmissionAcceptance':\n $scope.contractTemplateTypeFilter = 8; // AdmissionAcceptance\n $scope.savebuttonText = $translate.instant('TXT_BTN_PRINT');\n $scope.title = $translate.instant('TXT_PRINT_ADMISSION_ACCEPTANCE');\n $scope.model.contractTemplateTypeId = localStorageService.get('admissionAcceptanceContractTemplateId');\n break;\n case 'sendAdmissionRejection':\n $scope.contractTemplateTypeFilter = 9; // AdmissionRejection\n $scope.savebuttonText = $translate.instant('TXT_BTN_SEND');\n $scope.title = $translate.instant('TXT_SEND_ADMISSION_REJECTION');\n $scope.model.contractTemplateTypeId = localStorageService.get('admissionRejectionContractTemplateId');\n break;\n case 'printAdmissionRejection':\n $scope.contractTemplateTypeFilter = 9; // AdmissionRejection\n $scope.savebuttonText = $translate.instant('TXT_BTN_PRINT');\n $scope.title = $translate.instant('TXT_PRINT_ADMISSION_REJECTION');\n $scope.model.contractTemplateTypeId = localStorageService.get('admissionRejectionContractTemplateId');\n break;\n }\n\n $scope.onDetailSave = function () {\n\n $scope.isSaving = true;\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onSaveChanges) {\n $timeout(function() {\n $scope.onSaveChanges();\n }, 2000);\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n } \n \n switch($scope.dialogType) {\n case 'sendAdmissionAcceptance':\n localStorageService.set('admissionAcceptanceContractTemplateId', $scope.model.contractTemplateTypeId);\n leadSvc.admissionAcceptanceNotification($scope.lead.id, $scope.model.contractTemplateTypeId, success, error);\n break; \n case 'printAdmissionAcceptance':\n localStorageService.set('admissionAcceptanceContractTemplateId', $scope.model.contractTemplateTypeId);\n window.open(\"restapi/leads/\" + $scope.lead.id + \"/admission/acceptance-report?contractTemplateId=\" + $scope.model.contractTemplateTypeId, '_blank');\n success();\n break;\n case 'sendAdmissionRejection':\n localStorageService.set('admissionRejectionContractTemplateId', $scope.model.contractTemplateTypeId);\n leadSvc.admissionRejectionNotification($scope.lead.id, $scope.model.contractTemplateTypeId, success, error);\n break;\n case 'printAdmissionRejection':\n localStorageService.set('admissionRejectionContractTemplateId', $scope.model.contractTemplateTypeId);\n window.open(\"restapi/leads/\" + $scope.lead.id + \"/admission/rejection-report?contractTemplateId=\" + $scope.model.contractTemplateTypeId, '_blank');\n success();\n break;\n }\n }\n\n}]);\n","wbApp.controller('LeadsAssignCourseDetailCtrl', ['$scope', '$modal', '$translate', '$q', '$filter', 'leadSvc',\n 'courseRegistrationSvc', 'courseSvc', 'semesterSvc', 'securitySvc',\nfunction ($scope, $modal, $translate, $q, $filter, leadSvc, courseRegistrationSvc, courseSvc, semesterSvc, securitySvc) {\n\n $scope.model = {\n semesterID: null,\n courseID: null,\n notes: null\n };\n \n if ($scope.leadSourceType === 5) { // CourseInterest\n courseRegistrationSvc.getCourseInterestById($scope.leadSourceReferenceId).$promise.then(function (data) {\n if (!!data) {\n $scope.model.courseID = data.courseId;\n $scope.model.notes = data.notes;\n } \n });\n }\n \n \n $scope.assignExistingRegistration = false;\n $scope.studentRegistrations = [];\n $scope.existingRegistration = null;\n\n $scope.canBeSaved = function () {\n if ($scope.assignExistingRegistration) {\n return !!$scope.existingRegistration;\n }\n\n return true;\n }\n\n $scope.onAssignExistingCourseBtnClick = function () {\n $scope.assignExistingRegistration = true;\n $scope.existingRegistration = false;\n $scope.studentRegistrations = courseRegistrationSvc.getAllCoursesByStudent($scope.studentId);\n }\n\n $scope.onCreateNewRegistrationBtnClick = function () {\n $scope.assignExistingRegistration = false;\n }\n\n $scope.onExistingRegistrationRowSelected = function (row) {\n $scope.existingRegistration = row;\n }\n\n $scope.isSaving = false;\n var isSaving2 = false;\n\n semesterSvc.getDefaultAsync().then(function (data) {\n if (!!data) {\n $scope.model.semesterID = data.id;\n }\n });\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if ($scope.assignExistingRegistration && $scope.existingRegistration) {\n leadSvc.getById($scope.leadId).$promise.then(function (lead) {\n\n isSaving2 = true;\n\n lead.conversionType = 1; // CourseRegistration\n lead.conversionReferenceId = $scope.existingRegistration.courseRegistrationID;\n lead.conversionDateUtc = moment().toDate();\n var courseFullName = $scope.existingRegistration.courseFullName;\n var firstLesson = !!$scope.existingRegistration.firstDate\n ? ' (' + $filter('date')($scope.existingRegistration.firstDate, 'EEE HH:mm').toUpperCase() + ')'\n : '';\n lead.conversionText = courseFullName + firstLesson;\n lead.status = 1; // Converted\n\n if (!lead.notes || lead.notes.length == 0) {\n lead.notes = [];\n }\n\n var user = securitySvc.loggedInUser();\n\n lead.notes.push({\n text: $translate.instant('TXT_TITLE_REGISTER_ON_COURSE') + ': ' + lead.conversionText,\n updatedAtUtc: moment().toDate(),\n updatedByUserId: user.userID + \"\",\n updatedByName: user.fullName\n });\n\n leadSvc.update(lead).$promise.then(function () {\n $scope.isSaving = false;\n isSaving2 = false;\n $scope.$hide();\n $scope.onLeadSave(lead);\n }, function (error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n isSaving2 = false;\n });\n }, function (error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n });\n\n } else {\n\n $q.all([\n leadSvc.getById($scope.leadId).$promise,\n courseSvc.getByCourseID(model.courseID).$promise]).then(function (lead_and_course) {\n\n var lead = lead_and_course[0];\n var course = lead_and_course[1];\n\n if (lead.status == 1) {\n $scope.detailError = { errors: [{ message: $translate.instant('TXT_ERROR_LEAD_ALREADY_CONVERTED') }] };\n $scope.isSaving = false;\n }\n else {\n $q.all([detailDialogPromise.$promise, courseRegistrationSvc.createNew(course, false)])\n .then(function (data) {\n var courseRegistration = data[1];\n courseRegistration.parentID = lead.userId;\n if (!!lead.studentIds && lead.studentIds.length > 0) {\n courseRegistration.studentID = lead.studentIds[0];\n }\n courseRegistration.notes = model.notes;\n detailDialogPromise.$scope.course = course;\n detailDialogPromise.$scope.model = courseRegistration;\n // Do not search for leads during course registration save\n detailDialogPromise.$scope.ignoreLeadAssignment = true; \n detailDialogPromise.$scope.onAfterSuccessSave = function (cr) {\n\n isSaving2 = true;\n\n lead.conversionType = 1; // CourseRegistraction\n lead.conversionReferenceId = cr.courseRegistrationID;\n lead.conversionDateUtc = moment().toDate();\n\n var courseFullName = $filter('courseFullName')(course);\n var firstLesson = !!course.firstLesson\n ? ' (' + $filter('date')(course.firstLesson, 'EEE HH:mm').toUpperCase() + ')'\n : '';\n lead.conversionText = courseFullName + firstLesson;\n lead.status = 1; // Converted\n\n if (!lead.notes || lead.notes.length == 0) {\n lead.notes = [];\n }\n\n var user = securitySvc.loggedInUser();\n\n lead.notes.push({\n text: $translate.instant('TXT_TITLE_REGISTER_ON_COURSE') + ': ' + lead.conversionText,\n updatedAtUtc: moment().toDate(),\n updatedByUserId: user.userID + \"\",\n updatedByName: user.fullName\n });\n\n leadSvc.update(lead).$promise.then(function () {\n $scope.isSaving = false;\n isSaving2 = false;\n $scope.$hide();\n $scope.onLeadSave(lead);\n }, function (error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n isSaving2 = false;\n });\n };\n detailDialogPromise.$scope.onAfterDialogCancel = function () {\n $scope.isSaving = false;\n };\n detailDialogPromise.show();\n }, function (error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n });\n }\n }, function (error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n })\n }\n }\n\n $scope.studentRegistrationsGridSettings = {\n name: 'studentRegistrationsAssing',\n keyExpr: 'courseRegistrationID',\n columns: [\n {\n dataField: 'courseRegistrationID',\n caption: $translate.instant('TXT_LBL_ID'),\n dataType: 'string',\n visible: false,\n showInColumnChooser: false\n },\n {\n dataField: 'registrationDate', caption: $translate.instant('TXT_SEC_CLIENT_COURSE_REGISTRATION'),\n dataType: 'date',\n format: { date: 'short' },\n width: '80px',\n sortOrder: 'desc'\n },\n {\n dataField: 'semesterName', caption: $translate.instant('TXT_LBL_SEMESTER'),\n dataType: 'string',\n width: '120px'\n },\n {\n dataField: 'firstDate',\n caption: $translate.instant('TXT_MENU_SCHEDULE'),\n dataType: 'date',\n format: { raw: \"EEE HH:mm\" },\n calculateSortValue: function (rowData) {\n var mfirstLesson = moment(rowData.firstLesson);\n return mfirstLesson.isValid()\n ? mfirstLesson.day() * 10000 + mfirstLesson.hour() * 100 + mfirstLesson.minute()\n : rowData.firstLesson;\n },\n width: '90px'\n },\n { dataField: 'courseFullName', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string' },\n ]\n };\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'courses/courses/courses-detail-tabs/students-detail.html',\n show: false,\n onHide: function () { if (!isSaving2) { $scope.isSaving = false; } },\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('LeadsBindUserAndStudentDetailCtrl', ['$scope', '$translate', '$q', '$modal', 'userSvc', 'studentSvc',\nfunction ($scope, $translate, $q, $modal, userSvc, studentSvc) {\n\n $scope.model = $scope.inputModel || {};\n\n $scope.isSaving = false;\n\n $scope.isInvalid = function (model) {\n return !model || !model.userID || !model.studentID;\n }\n\n $scope.disableStudentAdd = function (model) {\n return !model || !model.userID;\n }\n\n $scope.onAddUserClick = function () {\n var userDetail = userSvc.createNew();\n if (!!$scope.notRegisteredUserInfo) {\n userDetail.surname = $scope.notRegisteredUserInfo.surname;\n userDetail.name = $scope.notRegisteredUserInfo.name;\n userDetail.middlename = $scope.notRegisteredUserInfo.middlename;\n userDetail.phone = $scope.notRegisteredUserInfo.phone;\n userDetail.email = $scope.notRegisteredUserInfo.email;\n userDetail.address = $scope.notRegisteredUserInfo.address;\n userDetail.referenceSourceID = $scope.notRegisteredUserInfo.referenceSourceId;\n }\n\n userDetailDialogPromise.$promise.then(function () {\n userDetailDialogPromise.$scope.userDetail = angular.copy(userDetail);\n userDetailDialogPromise.$scope.preFilled = true;\n userDetailDialogPromise.$scope.userSaved = function (model) {\n $scope.model.userID = model.id;\n },\n userDetailDialogPromise.show();\n });\n }\n\n $scope.onAddStudentclick = function () {\n var student = studentSvc.createNew();\n student.userID = $scope.model.userID;\n if (!!$scope.notRegisteredUserInfo &&\n !!$scope.notRegisteredUserInfo.students &&\n $scope.notRegisteredUserInfo.students.length > 0) {\n\n student.name = $scope.notRegisteredUserInfo.students[0].name;\n student.middlename = $scope.notRegisteredUserInfo.students[0].middlename;\n student.surname = $scope.notRegisteredUserInfo.students[0].surname;\n student.birthday = $scope.notRegisteredUserInfo.students[0].birthday;\n student.nationality = $scope.notRegisteredUserInfo.students[0].nationality;\n student.adminNotes = $scope.notRegisteredUserInfo.students[0].health;\n }\n\n studentDialogPromise.$promise.then(function () {\n studentDialogPromise.$scope.collection = [];\n studentDialogPromise.$scope.model = student;\n studentDialogPromise.$scope.preFilled = true;\n studentDialogPromise.$scope.onStudentSave = function (model) {\n $scope.model.studentID = model.id; \n };\n studentDialogPromise.show();\n });\n }\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n $scope.onUserAndStudentAssigned($scope.model);\n $scope.$hide();\n\n $scope.isSaving = false;\n }\n\n var userDetailDialogPromise = $modal({\n templateUrl: 'users/users-detail.html',\n show: false,\n scope: $scope\n });\n\n var studentDialogPromise = $modal({\n templateUrl: 'users/students/students-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('LeadsCtrl', ['$scope', '$modal', '$translate', '$filter', '$timeout', 'leadSvc', 'localStorageService', \n 'semesterSvc', 'securitySvc', 'gridSortSvc', 'levelSvc', 'phaseSvc', 'contractSvc',\nfunction ($scope, $modal, $translate, $filter, $timeout, leadSvc, localStorageService, \n semesterSvc, securitySvc, gridSortSvc, levelSvc, phaseSvc, contractSvc) {\n\n $scope.semesterDataRange = 2; // 1 - semester, 2 - from to\n $scope.fromDate = moment().subtract(3, 'M').startOf('day').toDate();\n $scope.toDate = moment().startOf('day').toDate();\n $scope.status = 0;\n\n semesterSvc.getDefaultAsync().then(function (data) { \n if (!!data) {\n $scope.semesterID = data.id;\n if ($scope.semesterDataRange === 1) {\n refreshData();\n }\n }\n });\n\n if (localStorageService.isSupported) {\n $scope.semesterDataRange = localStorageService.get('semesterDataRange') || 2;\n $scope.status = localStorageService.get('leadStatus') || 0;\n }\n\n $scope.leads = [];\n\n function refreshData()\n {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n // status, fromDateUtc, toDateUtc\n if ($scope.semesterDataRange === 2) {\n $scope.leads = leadSvc.getAllByStatusAndDateRange($scope.status, $scope.fromDate, $scope.toDate);\n $scope.leads.$promise.then(function () {\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedLead(null);\n }\n })\n }, 100); \n }\n else {\n setSelectedLead(null);\n }\n },\n function (error) {\n setSelectedLead(null);\n })\n \n } else if ($scope.semesterDataRange === 1 && $scope.semesterID) {\n $scope.leads = leadSvc.getAllByStatusAndSemester($scope.status, $scope.semesterID);\n setSelectedLead(null);\n } \n }\n\n function setSelectedLead(lead) {\n $scope.selectedLead = lead;\n $scope.$broadcast('leadSelectionChanged', $scope.selectedLead);\n }\n\n refreshData();\n\n var semestersDataSource = new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return semesterSvc.getAllAsync().$promise;\n },\n byKey: function (e) {\n return semesterSvc.getAsync(e);\n },\n loadMode: 'processed'\n });\n \n var phaseDataSource = new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return phaseSvc.getAll().$promise;\n },\n byKey: function (e) {\n return phaseSvc.getById(e);\n },\n loadMode: 'processed'\n });\n\n $scope.gridSettings = {\n name: 'leads',\n keyExpr: 'id',\n shouldShowColumnChooser: true,\n columns: [\n {\n dataField: 'id',\n caption: $translate.instant('TXT_LBL_ID'),\n dataType: 'string',\n visible: false,\n showInColumnChooser: false\n },\n {\n showInColumnChooser: false,\n caption: '',\n dataField: 'marker', \n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n loadMode: 'raw',\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_FLAG_RED') },\n { id: 1, name: $translate.instant('TXT_FLAG_ORANGE') },\n { id: 2, name: $translate.instant('TXT_FLAG_YELLOW') },\n { id: 3, name: $translate.instant('TXT_FLAG_GREEN') },\n { id: 4, name: $translate.instant('TXT_FLAG_BLUE') },\n { id: 5, name: $translate.instant('TXT_FLAG_PURPLE') },\n { id: 6, name: $translate.instant('TXT_FLAG_GRAY') },\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n encodeHtml: false,\n calculateSortValue: function(rowData) { return rowData.marker; },\n calculateDisplayValue: function (rowData) {\n if (typeof rowData.marker === 'undefined' || rowData.marker === null) {\n return \"\";\n } else {\n return \"\";\n }\n },\n },\n {\n showInColumnChooser: false,\n caption: '',\n dataField: 'isNotRegisteredUser',\n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: true, name: $translate.instant('TXT_ANONYMOUS_USER') },\n { id: false, name: $translate.instant('TXT_REGISTERED_USER') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n encodeHtml: false,\n calculateSortValue: function (rowData) { return rowData.marker; },\n calculateDisplayValue: function (rowData) {\n if (typeof rowData.isNotRegisteredUser === 'undefined' || rowData.isNotRegisteredUser === null) {\n return \"\";\n } else {\n var icon = !!rowData.isNotRegisteredUser ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n },\n },\n { dataField: 'leadSourceReferenceId', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false, showInColumnChooser: false },\n {\n dataField: 'referenceNumber',\n name: 'referenceNumber',\n caption: $translate.instant('TXT_REFERENCE_NUMBER'),\n dataType: 'string',\n width: '50px',\n visible: false\n },\n {\n dataField: 'studentsFullName',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n width: '140px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentsFullName') }\n },\n \n {\n dataField: 'phaseId',\n caption: $translate.instant('TXT_PHASE'),\n dataType: 'string',\n width: '140px',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: phaseDataSource,\n pageSize: 20,\n paginate: true\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n }\n },\n {\n dataField: 'levelId',\n caption: $translate.instant('TXT_LEVEL'),\n dataType: 'string',\n width: '100px',\n calculateCellValue: function (rowData) {\n return $filter('level')(rowData.levelId);\n }\n },\n {\n dataField: 'semesterId',\n caption: $translate.instant('TXT_LBL_SEMESTER'),\n dataType: 'string',\n width: '150px',\n visible: false,\n lookup: {\n allowClearing: true,\n dataSource: {\n store: semestersDataSource,\n pageSize: 20,\n paginate: true\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n },\n { dataField: 'studentBirthday', caption: $translate.instant(\"TXT_LBL_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '70px' },\n { \n dataField: 'studentBirthday', \n caption: $translate.instant(\"TXT_LBL_AGE\"), \n dataType: 'string',\n visible: false,\n calculateCellValue: function (rowData) {\n return rowData.studentBirthday \n ? moment(rowData.studentBirthday).toNow(true) \n : '';\n },\n width: '70px' },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '130px'\n },\n {\n dataField: 'email',\n caption: $translate.instant('TXT_LBL_EMAIL'),\n dataType: 'string',\n visible: false,\n width: '190px'\n },\n {\n dataField: 'leadSourceType',\n caption: $translate.instant('TXT_CONSENT_TYPE'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_LEAD_SOURCE_FORM_RESPONSE') },\n { id: 1, name: $translate.instant('TXT_LEAD_SOURCE_FULL_COURSE_INTEREST') },\n { id: 2, name: $translate.instant('TXT_LEAD_SOURCE_PHONE') },\n { id: 3, name: $translate.instant('TXT_LEAD_SOURCE_EMAIL') },\n { id: 4, name: $translate.instant('TXT_LEAD_SOURCE_PERSONAL_CONTACT') },\n { id: 5, name: $translate.instant('TXT_LEAD_SOURCE_COURSE_INTEREST') },\n { id: 6, name: $translate.instant('TXT_LEAD_SOURCE_FORM_RESPONSE_KINDERGARTEN_ENROLLMENT') },\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '70px'\n },\n {\n dataField: 'userFullName',\n caption: $translate.instant('TXT_VAL_RCPG_USER'),\n width: '140px',\n dataType: 'string',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'userFullName') }\n },\n {\n dataField: 'leadSourceName',\n caption: $translate.instant('TXT_NAME'),\n dataType: 'string',\n width: '120px'\n },\n {\n dataField: 'leadSourceText',\n caption: $translate.instant('TXT_LBL_TEXT'),\n dataType: 'string',\n width: '160px'\n },\n {\n dataField: 'lastNoteText',\n caption: $translate.instant('TXT_LBL_NOTE'),\n dataType: 'string'\n },\n { dataField: 'createdAtUtc', caption: $translate.instant('TXT_LBL_CREATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n { dataField: 'nextContactAtUtc', caption: $translate.instant('TXT_LBL_NEXT_CONTACT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n { dataField: 'decisionDateUtc', caption: $translate.instant('TXT_LBL_LAST_ACTIVITY'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px', sortOrder: 'desc' },\n ],\n onEditorPreparing: function(e) { \n if (e.parentType == 'filterRow' && e.dataField == 'marker') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n return $(\"\");\n }\n }\n }\n else {\n if (e.parentType == 'filterRow' && e.dataField == 'isNotRegisteredUser') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n var icon = itemIndex == 1 ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n }\n }\n else {\n if (e.parentType == 'filterRow' && e.dataField == 'levelId') {\n e.editorName = \"dxTextBox\";\n }\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_SHOW_PREVIEW'),\n isVisible: function (data) { return (data.leadSourceType == 0 || data.leadSourceType == 6) && securitySvc.isInRole('FormsDefinitions'); },\n callback: function (data) { $scope.onShowFormPreview(data.leadSourceReferenceId); }\n }, {\n text: $translate.instant('TXT_CHANGE_STATE'),\n isVisible: function (data) { return !!data && data.status != 1 && securitySvc.isInRole('FormsResponse.Update'); },\n callback: function (data) { $scope.onChangeStatus(data); }\n }, {\n text: $translate.instant('TXT_MENU_REGISTER_ON_COURSE'),\n isVisible: function (data) {\n return !!data &&\n data.leadSourceType != 6 &&\n data.status != 1 &&\n !data.isNotRegisteredUser &&\n securitySvc.isInRole('FormsResponse.Update') &&\n securitySvc.isInRole('CourseRegistration.Insert');\n },\n callback: function (data) { $scope.onAssignCourse(data); }\n }, {\n text: $translate.instant('TXT_MENU_CREATE_CONTRACT'),\n isVisible: function (data) {\n return !!data &&\n data.leadSourceType == 6 &&\n data.status != 1 &&\n !data.isNotRegisteredUser &&\n securitySvc.isInRole('Leads.Update') &&\n securitySvc.isInRole('Contract.Insert');\n },\n callback: function (data) { $scope.onCreateContract(data); }\n }, {\n text: $translate.instant('TXT_SEND_ADMISSION_ACCEPTANCE'),\n isVisible: function (data) { return !!data && data.leadSourceType == 6 && securitySvc.isInRole('Leads.Update'); },\n callback: function (data) { $scope.onSendAdmissionAcceptance(data); },\n beginGroup: true\n },{\n text: $translate.instant('TXT_PRINT_ADMISSION_ACCEPTANCE'),\n isVisible: function (data) { return !!data && data.leadSourceType == 6 && securitySvc.isInRole('Leads.Update'); },\n callback: function (data) { $scope.onPrintAdmissionAcceptance(data); }\n }, {\n text: $translate.instant('TXT_SEND_ADMISSION_REJECTION'),\n isVisible: function (data) { return !!data && data.leadSourceType == 6 && securitySvc.isInRole('Leads.Update'); },\n callback: function (data) { $scope.onSendAdmissionRejection(data); },\n beginGroup: true\n }, {\n text: $translate.instant('TXT_PRINT_ADMISSION_REJECTION'),\n isVisible: function (data) { return !!data && data.leadSourceType == 6 && securitySvc.isInRole('Leads.Update'); },\n callback: function (data) { $scope.onPrintAdmissionRejection(data); }\n }]\n }\n \n $scope.onSendAdmissionAcceptance = function(lead) {\n leadsAdmissionDialogPromise.$promise.then(function () {\n leadsAdmissionDialogPromise.$scope.lead = lead;\n leadsAdmissionDialogPromise.$scope.dialogType = 'sendAdmissionAcceptance';\n leadsAdmissionDialogPromise.onSaveChanges = function () {\n refreshData();\n };\n leadsAdmissionDialogPromise.show();\n });\n }\n\n $scope.onSendAdmissionRejection = function(lead) {\n leadsAdmissionDialogPromise.$promise.then(function () {\n leadsAdmissionDialogPromise.$scope.lead = lead;\n leadsAdmissionDialogPromise.$scope.dialogType = 'sendAdmissionRejection';\n leadsAdmissionDialogPromise.onSaveChanges = function () {\n refreshData();\n };\n leadsAdmissionDialogPromise.show();\n });\n }\n\n $scope.onPrintAdmissionAcceptance = function(lead) {\n leadsAdmissionDialogPromise.$promise.then(function () {\n leadsAdmissionDialogPromise.$scope.lead = lead;\n leadsAdmissionDialogPromise.$scope.dialogType = 'printAdmissionAcceptance';\n leadsAdmissionDialogPromise.onSaveChanges = function () {\n refreshData();\n };\n leadsAdmissionDialogPromise.show();\n });\n }\n\n $scope.onPrintAdmissionRejection = function(lead) {\n leadsAdmissionDialogPromise.$promise.then(function () {\n leadsAdmissionDialogPromise.$scope.lead = lead;\n leadsAdmissionDialogPromise.$scope.dialogType = 'printAdmissionRejection';\n leadsAdmissionDialogPromise.onSaveChanges = function () {\n refreshData();\n };\n leadsAdmissionDialogPromise.show();\n });\n } \n\n \n $scope.onShowFormPreview = function (formResponseId) {\n formPreviewPromise.$promise.then(function () {\n formPreviewPromise.$scope.formId = null;\n formPreviewPromise.$scope.formDefinitionRevision = null;\n formPreviewPromise.$scope.formResponseId = formResponseId;\n formPreviewPromise.show();\n });\n }\n\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n $scope.$on('leadChanged', function (e, data) {\n refreshData();\n });\n\n $scope.onRowSelected = function (data) {\n setSelectedLead(data);\n }\n\n $scope.onRowAdd = function () {\n leadsDetailPromise.$promise.then(function () {\n leadsDetailPromise.$scope.model = leadSvc.createNew();\n leadsDetailPromise.$scope.onLeadSave = function (model) {\n refreshData();\n };\n leadsDetailPromise.show();\n });\n }\n\n $scope.onRowEdit = function (lead) {\n leadsDetailPromise.$promise.then(function () {\n leadsDetailPromise.$scope.leadId = lead.id;\n leadsDetailPromise.$scope.model = null;\n leadsDetailPromise.$scope.onLeadSave = function () {\n refreshData();\n };\n leadsDetailPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n leadSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n $scope.onDataRangeChanged = function () {\n if (!!$scope.fromDate && moment($scope.fromDate).isValid() && !!$scope.toDate && moment($scope.toDate).isValid()) {\n if (localStorageService.isSupported) {\n localStorageService.set('semesterDataRange', $scope.semesterDataRange);\n }\n refreshData();\n }\n }\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n // get invoices\n refreshData(); \n }\n }\n\n $scope.onChangeStatus = function (lead) {\n leadsNoteDetailPromise.$promise.then(function () {\n leadsNoteDetailPromise.$scope.leadId = lead.id;\n leadsNoteDetailPromise.$scope.noteId = null;\n leadsNoteDetailPromise.$scope.onLeadSave = function (model) {\n refreshData();\n };\n leadsNoteDetailPromise.show();\n });\n }\n\n $scope.onLeadStatusChange = function (status) {\n if (localStorageService.isSupported) {\n localStorageService.set('leadStatus', status);\n }\n refreshData();\n }\n\n $scope.onAssignCourse = function (lead) {\n leadsAssingCourseDetailPromise.$promise.then(function () {\n leadsAssingCourseDetailPromise.$scope.leadSourceType = lead.leadSourceType;\n leadsAssingCourseDetailPromise.$scope.leadSourceReferenceId = lead.leadSourceReferenceId;\n leadsAssingCourseDetailPromise.$scope.leadId = lead.id;\n leadsAssingCourseDetailPromise.$scope.studentId = lead.studentIds[0];\n leadsAssingCourseDetailPromise.$scope.onLeadSave = function (model) {\n refreshData();\n };\n leadsAssingCourseDetailPromise.show();\n });\n }\n\n $scope.onCreateContract = function (lead) {\n contractDetailDialogPromise.$promise.then(function () {\n contractSvc.createNew().then(function(newModel) {\n \n newModel.userId = lead.userId;\n newModel.studentId = lead.studentIds[0];\n \n contractDetailDialogPromise.$scope.model = newModel;\n contractDetailDialogPromise.$scope.disableUserStudentSelection = true;\n contractDetailDialogPromise.$scope.onContractSave = function (model) {\n\n leadSvc.getById(lead.id).$promise.then(function (freshLead) {\n freshLead.conversionType = 2; // Contract\n freshLead.conversionReferenceId = model.id;\n freshLead.conversionDateUtc = moment().toDate();\n\n \n if (moment(model.toDate).isValid()) {\n freshLead.conversionText = $translate.instant('TXT_MENU_CONTRACT_CREATED').f($filter('date')(model.fromDate, 'dd.MM.yy'), $filter('date')(model.toDate, 'dd.MM.yy'));\n } else {\n freshLead.conversionText = $translate.instant('TXT_MENU_CONTRACT_CREATED').f($filter('date')(model.fromDate, 'dd.MM.yy'), \"\");\n }\n \n freshLead.status = 1; // Converted\n if (!freshLead.notes || freshLead.notes.length == 0) {\n freshLead.notes = [];\n }\n\n let user = securitySvc.loggedInUser();\n freshLead.notes.push({\n text: freshLead.conversionText,\n updatedAtUtc: moment().toDate(),\n updatedByUserId: user.userID + \"\",\n updatedByName: user.fullName\n });\n\n leadSvc.update(freshLead).$promise.then(function () {\n refreshData();\n }); \n });\n }; \n contractDetailDialogPromise.show();\n });\n });\n }\n \n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"leads/leads-detail-tabs/detail.html\"\n }, {\n title: 'TXT_LBL_COURSES',\n template: \"leads/leads-detail-tabs/user-history-courses.html\"\n }, {\n title: 'TXT_LBL_ACTIONS',\n template: \"leads/leads-detail-tabs/user-history-actions.html\"\n }, {\n title: 'TXT_LBL_NOTES',\n template: \"leads/leads-detail-tabs/crm-notes.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n\n var formPreviewPromise = $modal({\n templateUrl: 'forms/forms-response-preview.html',\n show: false,\n scope: $scope.$new()\n });\n\n var leadsNoteDetailPromise = $modal({\n templateUrl: 'leads/leads-detail-tabs/crm-notes-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var leadsAssingCourseDetailPromise = $modal({\n templateUrl: 'leads/leads/leads-assing-course-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var leadsDetailPromise = $modal({\n templateUrl: 'leads/leads-detail.html',\n show: false,\n scope: $scope.$new()\n });\n \n var leadsAdmissionDialogPromise = $modal({\n templateUrl: 'leads/leads/leads-admission-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n\n var contractDetailDialogPromise = $modal({\n templateUrl: 'activities/contracts/contract-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('LeadsDetailCtrl', ['$scope', '$modal', '$translate', '$q', 'leadSvc', 'notRegisteredUserSvc', 'studentSvc', 'userSvc', \nfunction ($scope, $modal, $translate, $q, leadSvc, notRegisteredUserSvc, studentSvc, userSvc) {\n\n $scope.model = $scope.model || {}; // Full lead object\n $scope.modelOrig = {};\n $scope.isDisabled = true;\n\n $scope.user = {};\n $scope.students = [];\n\n $scope.notRegisteredUserInfo = null;\n $scope.notRegisteredUserInfoOrig = null;\n\n function loadUser() {\n return $q(function (success, reject) {\n\n var promisses = [];\n promisses.push(userSvc.getByIDFull($scope.model.userId).$promise);\n if (!!$scope.model.studentIds && $scope.model.studentIds.length > 0) {\n promisses.push(studentSvc.getAllByUserIDAsync($scope.model.userId).$promise);\n }\n\n $q.all(promisses).then(function (data) {\n $scope.user = data[0];\n if (data.length > 1) {\n var students = data[1];\n $scope.students = _.intersectionWith(students, $scope.model.studentIds, function (arrVal, othVal) {\n return arrVal.id == othVal;\n });\n\n _.forEach($scope.students, function (e) {\n e.fullName = String.prototype.fullName(e.name, e.middlename, e.surname);\n });\n }\n\n success();\n }, function (error) {\n reject(error);\n });\n });\n }\n\n function loadData(leadId) {\n $scope.isLoading = true;\n\n function finalizeLoading()\n {\n if ($scope.model.status == 1) {\n $scope.detailError = { errors: [{ message: $translate.instant('TXT_ERROR_LEAD_ALREADY_CONVERTED') }] };\n $scope.isSaving = false;\n $scope.isDisabled = true;\n } else {\n $scope.isDisabled = false;\n }\n $scope.isLoading = false;\n }\n\n leadSvc.getById(leadId).$promise.then(function (data) {\n\n $scope.model = data;\n $scope.modelOrig = angular.copy($scope.model);\n\n if ($scope.model.isNotRegisteredUser)\n { \n notRegisteredUserSvc.getById($scope.model.userId).$promise.then(function (user) {\n\n $scope.notRegisteredUserInfo = user;\n $scope.notRegisteredUserInfoOrig = angular.copy($scope.notRegisteredUserInfo);\n\n finalizeLoading();\n }, function (error) {\n $scope.isLoading = false;\n });\n }\n else\n {\n loadUser().then(function () {\n finalizeLoading();\n }, function (error) {\n $scope.model = {};\n $scope.isLoading = false;\n });\n }\n }, function (error) {\n $scope.model = {};\n $scope.isLoading = false;\n });\n }\n\n $scope.onAnonymousBtnClick = function () {\n if (!$scope.notRegisteredUserInfo) {\n $scope.notRegisteredUserInfo = notRegisteredUserSvc.createNew();\n }\n $scope.model.isNotRegisteredUser = true;\n $scope.model.userID = null;\n $scope.model.studentIds = [];\n }\n\n $scope.onExistingBtnClick = function () {\n $scope.model.isNotRegisteredUser = false;\n $scope.model.userID = null;\n $scope.model.studentIds = [\"\"];\n\n }\n\n $scope.isFormValid = function () {\n return true;\n }\n\n $scope.detailIsUnchanged = function () {\n var modelEquals = angular.equals($scope.model, $scope.modelOrig);\n var userEquals = angular.equals($scope.notRegisteredUserInfo, $scope.notRegisteredUserInfoOrig);\n\n return modelEquals && userEquals;\n };\n\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function () {\n\n $scope.isSaving = true;\n\n var modelToSave = angular.copy($scope.model);\n\n var promisses = [];\n\n var modelEquals = angular.equals(modelToSave, $scope.modelOrig);\n var userEquals = angular.equals($scope.notRegisteredUserInfo, $scope.notRegisteredUserInfoOrig);\n\n if (modelToSave.isNew)\n {\n if (!!modelToSave.studentIds && !!modelToSave.studentIds.length && modelToSave.studentIds[0] == \"\") {\n modelToSave.studentIds = [];\n }\n\n if (!!modelToSave.notes && !!modelToSave.notes.length) {\n if (!modelToSave.notes[0].text && !modelToSave.notes[0].nextContactAtUtc) {\n modelToSave.notes = null;\n }\n }\n\n if (!userEquals && !!$scope.notRegisteredUserInfo && modelToSave.isNotRegisteredUser) {\n notRegisteredUserSvc.insert($scope.notRegisteredUserInfo).$promise.then(function s(d) {\n\n modelToSave.userId = d.id;\n if (!!d.students && !!d.students.length) {\n modelToSave.studentIds = [d.students[0].id];\n }\n\n leadSvc.insert(modelToSave).$promise.then(success, error);\n\n }, error);\n } else {\n leadSvc.insert(modelToSave).$promise.then(success, error);\n }\n }\n else \n {\n if (!userEquals && !!$scope.notRegisteredUserInfo && modelToSave.isNotRegisteredUser) {\n if (!$scope.notRegisteredUserInfo.students || !$scope.notRegisteredUserInfo.students.length) {\n\n if (!!modelToSave.studentIds && !!modelToSave.studentIds.length) {\n modelToSave.studentIds = [];\n modelEquals = false;\n } \n } \n }\n\n if (!userEquals && modelToSave.isNotRegisteredUser) {\n notRegisteredUserSvc.update($scope.notRegisteredUserInfo).$promise.then(function s() {\n\n if (!!$scope.notRegisteredUserInfo.students && !!$scope.notRegisteredUserInfo.students.length) {\n if (!modelToSave.studentIds || !modelToSave.studentIds.length) {\n\n // Fetch the id\n notRegisteredUserSvc.getById($scope.notRegisteredUserInfo.id).$promise.then(function (d) {\n\n if (!!d.students && !!d.students.length) {\n modelToSave.studentIds = [d.students[0].id];\n modelEquals = false;\n }\n\n if (!modelEquals) {\n leadSvc.update(modelToSave).$promise.then(success, error);\n }\n\n }, error);\n }\n else \n {\n if (!modelEquals) {\n leadSvc.update(modelToSave).$promise.then(success, error);\n } else {\n success();\n }\n }\n }\n else {\n if (!modelEquals) {\n leadSvc.update(modelToSave).$promise.then(success, error);\n } else {\n success();\n }\n }\n\n }, error);\n } else {\n if (!modelEquals) {\n leadSvc.update(modelToSave).$promise.then(function s() {\n if (!modelToSave.isNotRegisteredUser &&\n $scope.modelOrig.isNotRegisteredUser &&\n (modelToSave.leadSourceType == 2 || modelToSave.leadSourceType == 3 || modelToSave.leadSourceType == 4) &&\n !!$scope.modelOrig.userId) {\n notRegisteredUserSvc.remove($scope.modelOrig.userId).$promise.then(success, error);\n } else {\n success();\n }\n }, error);\n }\n }\n }\n\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onLeadSave) {\n $scope.onLeadSave(modelToSave);\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"leads/leads-detail-main-tab.html\"\n }, {\n title: 'TXT_LBL_USER',\n template: \"leads/leads-detail-user-tab.html\"\n }];\n\n if ($scope.model.isNew) {\n $scope.detailTabs.push({\n title: 'TXT_LBL_NOTES',\n template: \"leads/leads-detail-notes-tab.html\"\n });\n }\n\n $scope.detailTabs.activeTab = 0;\n\n\n $scope.onBindUserAndStudentClick = function() \n {\n bindUserAndStudentDialogPromise.$promise.then(function () {\n bindUserAndStudentDialogPromise.$scope.notRegisteredUserInfo = $scope.notRegisteredUserInfo;\n bindUserAndStudentDialogPromise.$scope.onUserAndStudentAssigned = function (model) {\n $scope.model.userId = model.userID;\n $scope.model.studentIds = [model.studentID];\n $scope.model.isNotRegisteredUser = false;\n $scope.notRegisteredUserInfo = null;\n\n loadUser();\n };\n bindUserAndStudentDialogPromise.show();\n });\n }\n\n $scope.onChangeUserAndOrStudentClick = function()\n {\n bindUserAndStudentDialogPromise.$promise.then(function () {\n bindUserAndStudentDialogPromise.$scope.notRegisteredUserInfo = null;\n bindUserAndStudentDialogPromise.$scope.inputModel = {\n userID: $scope.model.userId,\n studentID: $scope.model.studentIds != null && $scope.model.studentIds.length > 0\n ? $scope.model.studentIds[0]\n : null\n };\n bindUserAndStudentDialogPromise.$scope.onUserAndStudentAssigned = function (model) {\n $scope.model.userId = model.userID;\n $scope.model.studentIds = [model.studentID];\n $scope.model.isNotRegisteredUser = false;\n $scope.notRegisteredUserInfo = null;\n\n loadUser();\n };\n bindUserAndStudentDialogPromise.show();\n });\n }\n\n var bindUserAndStudentDialogPromise = $modal({\n templateUrl: 'leads/leads/leads-bind-user-and-student-detail.html',\n show: false, \n scope: $scope.$new()\n });\n\n if (!$scope.model.isNew) {\n loadData($scope.leadId);\n } else {\n $scope.isDisabled = false;\n $scope.onAnonymousBtnClick();\n }\n\n}]);\n","wbApp.controller('LeadsSelectOpenLeadsDialogCtrl', ['$scope', '$modal', '$translate', '$q', '$filter', \nfunction ($scope, $modal, $translate, $q, $filter) {\n\n\n $scope.onLeadSelectionDetailSave = function (model) {\n $scope.onLeadSelected($scope.selectedLead);\n $scope.$hide();\n }\n\n $scope.onLeadSelectionDetailCancel = function () {\n $scope.onLeadSelected(null);\n $scope.$hide();\n }\n\n $scope.onLeadSelectionRowSelected = function (row) {\n $scope.selectedLead = row;\n }\n\n $scope.canBeSaved = function () {\n return !!$scope.selectedLead;\n }\n\n $scope.leadSelectionGridSettings = {\n name: 'leadSelection',\n keyExpr: 'id',\n columns: [\n {\n dataField: 'id',\n caption: $translate.instant('TXT_LBL_ID'),\n dataType: 'string',\n visible: false,\n showInColumnChooser: false\n },\n {\n dataField: 'createdAtUtc',\n caption: $translate.instant('TXT_LBL_CREATED_AT'),\n dataType: 'date',\n format: { type: 'shortDateShortTime' },\n width: '140px',\n sortOrder: 'desc',\n calculateCellValue: function (rowData) {\n if (rowData.auditEvents && rowData.auditEvents.length != 0) {\n return rowData.auditEvents[0].eventTimeUtc;\n }\n return '';\n },\n },\n {\n dataField: 'leadSourceType',\n caption: $translate.instant('TXT_CONSENT_TYPE'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_LEAD_SOURCE_FORM_RESPONSE') },\n { id: 1, name: $translate.instant('TXT_LEAD_SOURCE_FULL_COURSE_INTEREST') },\n { id: 2, name: $translate.instant('TXT_LEAD_SOURCE_PHONE') },\n { id: 3, name: $translate.instant('TXT_LEAD_SOURCE_EMAIL') },\n { id: 4, name: $translate.instant('TXT_LEAD_SOURCE_PERSONAL_CONTACT') },\n { id: 5, name: $translate.instant('TXT_LEAD_SOURCE_COURSE_INTEREST') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '70px'\n },\n {\n dataField: 'leadSourceName', caption: $translate.instant('TXT_NAME'),\n dataType: 'string',\n width: '120px'\n },\n {\n dataField: 'leadSourceText', caption: $translate.instant('TXT_LBL_TEXT'),\n dataType: 'string'\n }\n ]\n };\n}]);\n","wbApp.controller('LeadsTabsCrmNotesCtrl', ['$scope', '$modal', '$translate', 'leadSvc', 'notificationSvc',\nfunction ($scope, $modal, $translate, leadSvc, notificationSvc) {\n\n $scope.leadNotes = [];\n var selectedLead = null;\n var fullLead = null;\n\n var isActive = false;\n var loaded = false;\n\n $scope.$on('leadSelectionChanged', function (e, newlySelectedLead) {\n if (newlySelectedLead) {\n if (isActive) {\n loadData(newlySelectedLead.id);\n } else {\n loaded = false;\n }\n }\n else {\n $scope.leadNotes = [];\n fullLead = null;\n }\n\n selectedLead = newlySelectedLead;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 3) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedLead) {\n loadData(selectedLead.id);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function loadData(id) {\n $scope.leadNotes = [];\n leadSvc.getById(id).$promise.then(function (data) {\n fullLead = data;\n $scope.leadNotes = fullLead.notes;\n loaded = true;\n }, function (error) {\n fullLead = null;\n $scope.leadNotes = [];\n loaded = false;\n });\n }\n\n $scope.onRowAdd = function () {\n leadsNoteDetailPromise.$promise.then(function () {\n leadsNoteDetailPromise.$scope.leadId = selectedLead.id;\n leadsNoteDetailPromise.$scope.noteId = null;\n leadsNoteDetailPromise.$scope.onLeadSave = function (model) {\n $scope.$emit('leadChanged', { id: selectedLead.id });\n };\n leadsNoteDetailPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n leadsNoteDetailPromise.$promise.then(function () {\n leadsNoteDetailPromise.$scope.leadId = selectedLead.id;\n leadsNoteDetailPromise.$scope.noteId = data.id;\n leadsNoteDetailPromise.$scope.onLeadSave = function () {\n $scope.$emit('leadChanged', { id: selectedLead.id });\n };\n leadsNoteDetailPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n leadSvc.getById(fullLead.id).$promise.then(function (lead) {\n if (lead.status == 1) {\n notificationSvc.notifyError($translate.instant('TXT_ERROR_LEAD_ALREADY_CONVERTED'));\n }\n else {\n\n if (!!lead.notes && typeof data.id !== 'undefined' || data.id !== null) {\n var idx = _.findIndex(lead.notes, { 'id': data.id });\n if (idx != -1) {\n lead.notes.splice(idx, 1);\n leadSvc.update(lead).$promise.then(function () {\n $scope.$emit('leadChanged', { id: selectedLead.id });\n });\n }\n }\n }\n });\n }\n\n $scope.leadNotesGridSettings = {\n name: 'leadNotes',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n {\n dataField: 'text', caption: $translate.instant('TXT_LBL_NOTE'), dataType: 'string'\n\n },\n { dataField: 'nextContactAtUtc', caption: $translate.instant('TXT_LBL_NEXT_CONTACT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n { dataField: 'updatedAtUtc', caption: $translate.instant('TXT_LBL_UPDATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px', sortOrder: 'desc' },\n { dataField: 'updatedByName', caption: $translate.instant('TXT_LBL_UPDATED_BY'), dataType: 'string', width: '160px' },\n ],\n shouldDisableAdd: function () { return !selectedLead || selectedLead.status == 1; },\n shouldDisableEdit: function () { return !selectedLead || selectedLead.status == 1; },\n shouldDisableDelete: function () { return !selectedLead || selectedLead.status == 1; },\n\n }\n\n var leadsNoteDetailPromise = $modal({\n templateUrl: 'leads/leads-detail-tabs/crm-notes-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('LeadsTabsCrmNotesDetailCtrl', ['$scope', '$modal', '$translate', 'leadSvc', 'securitySvc',\nfunction ($scope, $modal, $translate, leadSvc, securitySvc) {\n\n $scope.model = {}; // Single note\n $scope.lead = null; // Full lead object\n $scope.isDisabled = true;\n\n function loadData(leadId, noteId) {\n $scope.isLoading = true;\n\n leadSvc.getById(leadId).$promise.then(function (data) {\n\n $scope.lead = data;\n\n if ($scope.lead.status == 1) {\n $scope.detailError = { errors: [{ message: $translate.instant('TXT_ERROR_LEAD_ALREADY_CONVERTED') }] };\n $scope.isSaving = false;\n $scope.isDisabled = true;\n } else {\n $scope.isDisabled = false;\n }\n\n if (!data.notes || typeof noteId === 'undefined' || noteId === null) {\n data.notes = data.notes || [];\n $scope.model = {};\n data.notes.push($scope.model);\n } else {\n var idx = _.findIndex(data.notes, { 'id': noteId });\n if (idx != -1) {\n $scope.model = data.notes[idx];\n if ($scope.model) {\n $scope.model.updatedAtUtc = moment().toDate();\n var user = securitySvc.loggedInUser();\n\n $scope.model.updatedByUserId = user.userID + \"\";\n $scope.model.updatedByName = user.fullName;\n }\n } else {\n $scope.model = {};\n data.notes.push($scope.model);\n }\n }\n \n $scope.leadOrig = angular.copy($scope.lead);\n\n $scope.isLoading = false;\n }, function (error) {\n $scope.model = {};\n $scope.isLoading = false;\n });\n }\n\n loadData($scope.leadId, $scope.noteId);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.leadOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function () {\n\n $scope.isSaving = true;\n\n leadSvc.update($scope.lead).$promise.then(success, error);\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onLeadSave) {\n $scope.onLeadSave($scope.lead);\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n}]);\n","wbApp.controller('LeadsTabsDetailCtrl', ['$scope', '$modal', '$translate', 'userSvc', 'notRegisteredUserSvc',\nfunction ($scope, $modal, $translate, userSvc, notRegisteredUserSvc) {\n\n $scope.selectedLead = null;\n $scope.userEmailAddress = ''\n\n $scope.$on('leadSelectionChanged', function (e, newlySelectedLead) {\n $scope.selectedLead = newlySelectedLead;\n });\n\n}]);\n","wbApp.controller('LeadsTabsUserHistoryActionsCtrl', ['$scope', '$modal', '$translate', 'courseRegistrationSvc', 'gridSortSvc',\nfunction ($scope, $modal, $translate, courseRegistrationSvc, gridSortSvc) {\n\n var selectedLead = null;\n var isActive = false;\n var loaded = false;\n\n $scope.$on('leadSelectionChanged', function (e, newlySelectedLead) {\n if (newlySelectedLead) {\n if (isActive) {\n loadData(newlySelectedLead);\n } else {\n loaded = false;\n }\n }\n else {\n $scope.leadNotes = [];\n fullLead = null;\n }\n\n selectedLead = newlySelectedLead;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedLead) {\n loadData(selectedLead);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function loadData(lead) {\n if (lead.isNotRegisteredUser) {\n $scope.courseRegistrations = [];\n loaded = true;\n }\n else {\n $scope.leadNotes = [];\n courseRegistrationSvc.getAllActionsByUser(lead.userId).$promise.then(function (data) {\n $scope.courseRegistrations = data;\n loaded = true;\n }, function (error) {\n $scope.courseRegistrations = [];\n loaded = false;\n });\n }\n }\n\n function getFullName(name, middleName, surName) {\n var fullName = name;\n if (!!middleName) {\n if (!!fullName) {\n fullName = fullName + \" \" + middleName;\n }\n else {\n fullName = middleName;\n }\n }\n\n if (!!surName) {\n if (!!fullName)\n fullName = fullName + \" \" + surName;\n else\n fullName = surName;\n }\n\n return fullName;\n }\n\n $scope.courseRegistrationsGridSettings = {\n name: 'courseRegistrations',\n columns: [\n { dataField: 'courseRegistrationID', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n {\n dataField: 'studentSurname',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return getFullName(rowData.studentName, rowData.studentMiddleName, rowData.studentSurname);\n },\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'studentName', 'studentSurname', 'studentMiddleName') }, \n width: '140px'\n },\n { dataField: 'semesterName', caption: $translate.instant('TXT_LBL_SEMESTER'), dataType: 'string', width: '140px' },\n { dataField: 'courseFullName', caption: $translate.instant('TXT_LBL_ACTIONS'), dataType: 'string', width: '300px' },\n {\n dataField: 'firstDate',\n caption: $translate.instant('TXT_MENU_SCHEDULE'),\n dataType: 'date',\n format: { raw: \"dd.MM.yy EEE HH:mm\" },\n calculateSortValue: function (rowData) {\n var mfirstLesson = moment(rowData.firstLesson);\n return mfirstLesson.isValid()\n ? mfirstLesson.day() * 10000 + mfirstLesson.hour() * 100 + mfirstLesson.minute()\n : rowData.firstLesson;\n },\n width: '120px'\n },\n { dataField: 'notes', caption: $translate.instant('TXT_LBL_NOTE'), dataType: 'string' },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'paymentsSum', caption: $translate.instant('TXT_LBL_PAYMENTS'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'registrationDate', caption: $translate.instant('TXT_LBL_REGISTRATION_DATE'), dataType: 'date', format: { type: 'shortDate' }, width: '100px', sortOrder: 'desc' },\n ],\n onRowPrepared: function (e) {\n if (!!selectedLead && selectedLead.conversionType == 2 && !!selectedLead.conversionReferenceId) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.courseRegistrationID == selectedLead.conversionReferenceId) {\n e.rowElement.addClass('text-danger');\n }\n }\n }\n },\n\n }\n\n}]);\n","wbApp.controller('LeadsTabsUserHistoryCoursesCtrl', ['$scope', '$modal', '$translate', 'courseRegistrationSvc', 'gridSortSvc',\nfunction ($scope, $modal, $translate, courseRegistrationSvc, gridSortSvc) {\n\n var selectedLead = null;\n var isActive = false;\n var loaded = false;\n\n $scope.$on('leadSelectionChanged', function (e, newlySelectedLead) {\n if (newlySelectedLead) {\n if (isActive) {\n loadData(newlySelectedLead);\n } else {\n loaded = false;\n }\n }\n else {\n $scope.leadNotes = [];\n fullLead = null;\n }\n\n selectedLead = newlySelectedLead;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedLead) {\n loadData(selectedLead);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function loadData(lead) {\n if (lead.isNotRegisteredUser) {\n $scope.courseRegistrations = [];\n loaded = true;\n }\n else {\n $scope.leadNotes = [];\n courseRegistrationSvc.getAllCoursesByUser(lead.userId).$promise.then(function (data) {\n $scope.courseRegistrations = data;\n loaded = true;\n }, function (error) {\n $scope.courseRegistrations = [];\n loaded = false;\n });\n }\n }\n\n function getFullName(name, middleName, surName) {\n var fullName = name;\n if (!!middleName) {\n if (!!fullName) {\n fullName = fullName + \" \" + middleName;\n }\n else {\n fullName = middleName;\n }\n }\n\n if (!!surName) {\n if (!!fullName)\n fullName = fullName + \" \" + surName;\n else\n fullName = surName;\n }\n\n return fullName;\n }\n\n $scope.courseRegistrationsGridSettings = {\n name: 'courseRegistrations',\n columns: [\n { dataField: 'courseRegistrationID', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n {\n dataField: 'studentSurname',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return getFullName(rowData.studentName, rowData.studentMiddleName, rowData.studentSurname);\n },\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'studentName', 'studentSurname', 'studentMiddleName') }, \n width: '140px'\n },\n { dataField: 'semesterName', caption: $translate.instant('TXT_LBL_SEMESTER'), dataType: 'string', width: '140px' },\n { dataField: 'courseFullName', caption: $translate.instant('TXT_LBL_COURSE'), dataType: 'string', width: '300px' },\n {\n dataField: 'firstDate',\n caption: $translate.instant('TXT_MENU_SCHEDULE'),\n dataType: 'date',\n format: { raw: \"EEE HH:mm\" },\n calculateSortValue: function (rowData) {\n var mfirstLesson = moment(rowData.firstLesson);\n return mfirstLesson.isValid()\n ? mfirstLesson.day() * 10000 + mfirstLesson.hour() * 100 + mfirstLesson.minute()\n : rowData.firstLesson;\n },\n width: '90px'\n },\n { dataField: 'notes', caption: $translate.instant('TXT_LBL_NOTE'), dataType: 'string' },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'paymentsSum', caption: $translate.instant('TXT_LBL_PAYMENTS'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'registrationDate', caption: $translate.instant('TXT_LBL_REGISTRATION_DATE'), dataType: 'date', format: { type: 'shortDate' }, width: '100px', sortOrder: 'desc' },\n ],\n onRowPrepared: function (e) {\n if (!!selectedLead && selectedLead.conversionType == 1 && !!selectedLead.conversionReferenceId) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.courseRegistrationID == selectedLead.conversionReferenceId) {\n e.rowElement.addClass('text-danger');\n }\n }\n }\n },\n\n }\n\n}]);\n","wbApp.controller('LevelsCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', 'levelSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, levelSvc) {\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = levelSvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.levels = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedLevel(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedLevel(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.levels = [];\n setSelectedLevel(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'levels',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '160px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string', width: '60px' },\n ]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedLevel(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = levelSvc.createNew();\n detailDialogPromise.$scope.onLevelSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedLevel(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onLevelSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n levelSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedLevel(level, refresh) {\n $scope.selectedLevel = level;\n $scope.$broadcast('levelSelectionChanged', $scope.selectedLevel);\n }\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'levels/levels-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('LevelsDetailCtrl', ['$scope', '$modal', 'levelSvc',\nfunction ($scope, $modal, levelSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n levelSvc.insert(data)\n .$promise.then(success, error);\n } else {\n levelSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onLevelSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n}]);\n","wbApp.controller('PhasesCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', 'phaseSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, phaseSvc) {\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = phaseSvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.phases = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedPhase(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedPhase(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.phases = [];\n setSelectedPhase(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'phases',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '160px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string', width: '60px' },\n ]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedPhase(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = phaseSvc.createNew();\n detailDialogPromise.$scope.onPhaseSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedPhase(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onPhaseSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n phaseSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedPhase(phase, refresh) {\n $scope.selectedPhase = phase;\n $scope.$broadcast('phaseSelectionChanged', $scope.selectedPhase);\n }\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'phases/phases-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('PhasesDetailCtrl', ['$scope', '$modal', 'phaseSvc',\nfunction ($scope, $modal, phaseSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n phaseSvc.insert(data)\n .$promise.then(success, error);\n } else {\n phaseSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onPhaseSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n}]);\n","'use strict';\n\nwbApp.directive('wbFlagCombo', ['$timeout', '$translate', 'leadSvc',\n function ($timeout, $translate, leadSvc) {\n function formatResult(model) {\n return \"  \" + $translate.instant(model.text);\n }\n\n function formatSelection(model) {\n return \"  \" + $translate.instant(model.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_LBL_FLAG'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: -1,\n id: function (model) { return model.id; },\n data: [\n { id: 0, text: 'TXT_FLAG_RED' },\n { id: 1, text: 'TXT_FLAG_ORANGE' },\n { id: 2, text: 'TXT_FLAG_YELLOW' },\n { id: 3, text: 'TXT_FLAG_GREEN' },\n { id: 4, text: 'TXT_FLAG_BLUE' },\n { id: 5, text: 'TXT_FLAG_PURPLE' },\n { id: 6, text: 'TXT_FLAG_GRAY' },\n ] \n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (String.prototype.isNullOrWhitespace(viewValue)) {\n return null;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!typeof value === 'undefined' || value === null) {\n return value;\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbFormAccessPermissionsTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_FROM_ACCESS_PERMISSION_TYPE_LOGGED_IN_USERS_ONLY_STUDENT_REQUIRED' },\n { id: 3, text: 'TXT_FROM_ACCESS_PERMISSION_TYPE_LOGGED_IN_USERS_ONLY_NO_STUDENT' },\n { id: 2, text: 'TXT_FROM_ACCESS_PERMISSION_TYPE_ALLOW_ANONYMOUS_STUDENT_REQUIRED' },\n { id: 1, text: 'TXT_FROM_ACCESS_PERMISSION_TYPE_ALLOW_ANONYMOUS_NO_STUDENT' },\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbFormQuestionTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_FROM_QUESTION_TYPE_SINGLE_SELECT' },\n { id: 1, text: 'TXT_FROM_QUESTION_TYPE_MULTI_SELECT' },\n { id: 2, text: 'TXT_FROM_QUESTION_TYPE_SINGLE_SELECT_PLUS' },\n { id: 3, text: 'TXT_FROM_QUESTION_TYPE_MULTI_SELECT_PLUS' },\n { id: 4, text: 'TXT_FROM_QUESTION_TYPE_TEXT' }\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbFormTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_FROM_TYPE_GENERIC' },\n { id: 1, text: 'TXT_FROM_TYPE_KINDERGARTEN_ENROLLMENT' }\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbLeadSourceTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n function shouldBeVisible(visibleSelection, id) {\n if (visibleSelection) {\n return visibleSelection.includes(id + '');\n }\n\n return true;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n visibleSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n\n var data = [];\n if (shouldBeVisible(scope.visibleSelection, 0)) {\n data.push({ id: 0, text: 'TXT_LEAD_SOURCE_FORM_RESPONSE' });\n }\n if (shouldBeVisible(scope.visibleSelection, 1)) {\n data.push({ id: 1, text: 'TXT_LEAD_SOURCE_FULL_COURSE_INTEREST' });\n }\n if (shouldBeVisible(scope.visibleSelection, 2)) {\n data.push({ id: 2, text: 'TXT_LEAD_SOURCE_PHONE' });\n }\n if (shouldBeVisible(scope.visibleSelection, 3)) {\n data.push({ id: 3, text: 'TXT_LEAD_SOURCE_EMAIL' });\n }\n if (shouldBeVisible(scope.visibleSelection, 4)) {\n data.push({ id: 4, text: 'TXT_LEAD_SOURCE_PERSONAL_CONTACT' });\n }\n if (shouldBeVisible(scope.visibleSelection, 5)) {\n data.push({ id: 5, text: 'TXT_LEAD_SOURCE_COURSE_INTEREST' });\n }\n if (shouldBeVisible(scope.visibleSelection, 6)) {\n data.push({ id: 6, text: 'TXT_LEAD_SOURCE_FORM_RESPONSE_KINDERGARTEN_ENROLLMENT' });\n } \n\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: data\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbLeadStatusCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n disabledSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_LEAD_STATUS_OPEN', disabled: scope.disabledSelection === 0 },\n { id: 1, text: 'TXT_LEAD_STATUS_CONVERTED', disabled: scope.disabledSelection === 1 },\n { id: 2, text: 'TXT_LEAD_STATUS_CANNOT_CONTACT', disabled: scope.disabledSelection === 2 },\n { id: 3, text: 'TXT_LEAD_STATUS_NO_LONGER_INTERESTED', disabled: scope.disabledSelection === 3 },\n { id: 4, text: 'TXT_LEAD_STATUS_CANCELED', disabled: scope.disabledSelection === 4 }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbPhaseCombo', ['$timeout', '$translate', 'phaseSvc', 'gridSortSvc',\n function ($timeout, $translate, phaseSvc, gridSortSvc) {\n function formatResult(model) {\n if (!model) {\n return \"\";\n }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, controller) {\n\n var models = phaseSvc.getAll();\n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_PHASE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: 5,\n id: function (model) { return model.id; },\n data: _.sortBy(models, function (a) { return gridSortSvc.localeSort(a, 'name'); }),\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n controller.$render();\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n }\n }]);","wbApp.filter('wbFlag', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_FLAG_RED');\n case 1:\n return $translate.instant('TXT_FLAG_ORANGE');\n case 2:\n return $translate.instant('TXT_FLAG_YELLOW');\n case 3:\n return $translate.instant('TXT_FLAG_GREEN');\n case 4:\n return $translate.instant('TXT_FLAG_BLUE');\n case 5:\n return $translate.instant('TXT_FLAG_PURPLE');\n case 6:\n return $translate.instant('TXT_FLAG_GRAY');\n default:\n return '';\n }\n };\n}]);","wbApp.filter('formAccessPermissionsType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_FROM_ACCESS_PERMISSION_TYPE_LOGGED_IN_USERS_ONLY_STUDENT_REQUIRED');\n case 1:\n return $translate.instant('TXT_FROM_ACCESS_PERMISSION_TYPE_ALLOW_ANONYMOUS_NO_STUDENT');\n case 2:\n return $translate.instant('TXT_FROM_ACCESS_PERMISSION_TYPE_ALLOW_ANONYMOUS_STUDENT_REQUIRED');\n case 3:\n return $translate.instant('TXT_FROM_ACCESS_PERMISSION_TYPE_LOGGED_IN_USERS_ONLY_NO_STUDENT');\n default:\n return '';\n }\n };\n}]);","wbApp.filter('leadConversionType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_LEAD_CONVERSION_TYPE_NONE');\n case 1:\n return $translate.instant('TXT_LEAD_CONVERSION_TYPE_COURSE_REGISTRACTION');\n default:\n return '';\n }\n };\n}]);","wbApp.filter('leadSourceType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_LEAD_SOURCE_FORM_RESPONSE');\n case 1:\n return $translate.instant('TXT_LEAD_SOURCE_FULL_COURSE_INTEREST');\n case 2:\n return $translate.instant('TXT_LEAD_SOURCE_PHONE');\n case 3:\n return $translate.instant('TXT_LEAD_SOURCE_EMAIL');\n case 4:\n return $translate.instant('TXT_LEAD_SOURCE_PERSONAL_CONTACT');\n case 5:\n return $translate.instant('TXT_LEAD_SOURCE_COURSE_INTEREST');\n case 6:\n return $translate.instant('TXT_LEAD_SOURCE_FORM_RESPONSE_KINDERGARTEN_ENROLLMENT'); \n default:\n return '';\n }\n };\n}]);","wbApp.filter('leadStatus', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_LEAD_STATUS_OPEN');\n case 1:\n return $translate.instant('TXT_LEAD_STATUS_CONVERTED');\n case 2:\n return $translate.instant('TXT_LEAD_STATUS_CANNOT_CONTACT');\n case 3:\n return $translate.instant('TXT_LEAD_STATUS_NO_LONGER_INTERESTED');\n case 4:\n return $translate.instant('TXT_LEAD_STATUS_CANCELED');\n default:\n return '';\n }\n };\n}]);","wbApp.filter('wbLevel', ['$translate', 'levelSvc', function ($translate, levelSvc) {\n var models = levelSvc.getAll();\n\n function asyncResult(input) {\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n}]);","wbApp.filter('wbPhase', ['$translate', 'phaseSvc', function ($translate, phaseSvc) {\n var models = phaseSvc.getAll();\n\n function asyncResult(input) {\n if (models.$resolved) {\n var model = _.find(models, { id: input });\n if (model) {\n return model.name;\n } else {\n return '';\n }\n } else {\n return $translate.instant('TXT_LOADING_DATA');\n }\n }\n\n asyncResult.$stateful = true;\n\n return asyncResult;\n}]);","wbApp.factory('leadSvc', ['$resource', '$q','repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var Lead = $resource('/restapi/leads/:id', {}, {\n 'getById': { method: 'GET', url: '/restapi/leads/:id' },\n 'getAllByStatusAndDateRange': { method: 'GET', isArray: true, url: 'restapi/leads/info/range/find-by-status' },\n 'getAllByStatusAndSemester': { method: 'GET', isArray: true, url: 'restapi/leads/info/find-by-status-and-semester' },\n 'getAllByStatusAndStudent': { method: 'GET', isArray: true, url: 'restapi/leads/find-by-status-and-student' },\n 'getAllByStatusAndCourse': { method: 'GET', isArray: true, url: 'restapi/leads/info/find-by-status-and-course' },\n 'insert': { method: 'POST', url: '/restapi/leads' },\n 'update': { method: 'PUT', url: '/restapi/leads/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/leads/:id' },\n 'admissionAcceptanceNotification': { method: 'POST', url: '/restapi/leads/:id/admission/acceptance-notification' },\n 'admissionRejectionNotification': { method: 'POST', url: '/restapi/leads/:id/admission/rejection-notification' },\n });\n\n function createNew()\n {\n var lead = {\n userId: null,\n studentIds: [],\n semesterId: null,\n leadSourceType: 3,\n leadSourceName: null,\n leadSourceText: null,\n leadSourceReferenceId: null,\n status: 0,\n conversionType: 0,\n notes: [{\n }],\n auditEvents: [],\n marker: null,\n levelId: null,\n phaseId: null,\n isNotRegisteredUser: false,\n isNew: true\n };\n\n return lead;\n }\n\n function admissionAcceptanceNotification(id, contractTemplateId, success, error) {\n return repositorySvc.customPostWithParams(\n 'admissionAcceptanceNotification',\n Lead,\n { id: id, contractTemplateId: contractTemplateId },\n null,\n success,\n error\n );\n }\n\n function admissionRejectionNotification(id, contractTemplateId, success, error) {\n return repositorySvc.customPostWithParams(\n 'admissionRejectionNotification',\n Lead,\n { id: id, contractTemplateId: contractTemplateId },\n null,\n success,\n error\n );\n } \n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n Lead,\n convertDatesToDateString(model));\n }\n\n function remove(leadId) {\n return repositorySvc.customDelete(\n 'delete',\n Lead,\n { id: leadId });\n }\n\n function update(model) {\n return repositorySvc.customPutWithParams(\n 'update',\n Lead,\n { id: model.id },\n convertDatesToDateString(model));\n }\n\n function getById(leadId) {\n return repositorySvc.customGet('getById', Lead, { id: leadId });\n }\n\n\n function getAllByStatusAndDateRange(status, fromDateUtc, toDateUtc) {\n return repositorySvc.customGet('getAllByStatusAndDateRange', Lead, {\n status: status,\n fromDateUtc: fromDateUtc,\n toDateUtc: moment(toDateUtc).endOf('day').toDate(),\n expanded: 'PersonalInformation'\n });\n }\n\n function getAllByStatusAndSemester(status, semesterId) {\n return repositorySvc.customGet('getAllByStatusAndSemester', Lead, {\n status: status,\n semesterId: semesterId,\n expanded: 'PersonalInformation'\n });\n }\n\n function getAllByStatusAndStudent(status, studentId) {\n return repositorySvc.customGet('getAllByStatusAndStudent', Lead, {\n status: status,\n studentId: studentId\n });\n }\n\n function getAllByStatusAndCourse(status, courseId) {\n return repositorySvc.customGet('getAllByStatusAndCourse', Lead, {\n status: status,\n courseId: courseId,\n expanded: 'PersonalInformation'\n });\n }\n\n function markerIdToColor(markerId) {\n switch (markerId) {\n case 0: return \"#f23430\"; // red\n case 1: return \"#f38b24\"; // orange\n case 2: return \"#f4c12c\"; // yellow\n case 3: return \"#2cc141\"; // green\n case 4: return \"#1374f1\"; // blue\n case 5: return \"#9e50c6\"; // purple\n case 6: return \"#848489\"; // gray\n default: return 'white';\n }\n }\n\n return {\n createNew: createNew,\n getById: getById,\n getAllByStatusAndDateRange: getAllByStatusAndDateRange,\n getAllByStatusAndSemester: getAllByStatusAndSemester,\n getAllByStatusAndStudent: getAllByStatusAndStudent,\n getAllByStatusAndCourse: getAllByStatusAndCourse,\n insert: insert,\n remove: remove,\n update: update,\n markerIdToColor: markerIdToColor,\n admissionAcceptanceNotification: admissionAcceptanceNotification,\n admissionRejectionNotification: admissionRejectionNotification\n }\n }\n]);","wbApp.factory('notRegisteredUserSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var NotRegistredUser = $resource('/restapi/not-registered-users/:id', {}, {\n 'getById': { method: 'GET', url: '/restapi/not-registered-users/:id' },\n 'getAll': { method: 'GET', isArray: true, url: 'restapi/not-registered-users' },\n 'insert': { method: 'POST', url: '/restapi/not-registered-users' },\n 'update': { method: 'PUT', url: '/restapi/not-registered-users/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/not-registered-users/:id' },\n });\n\n var notRegisteredUsers;\n\n function createNew()\n {\n var notRegisteredUsers = {\n isNew: true,\n students: [{\n }]\n };\n\n return notRegisteredUsers;\n }\n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n NotRegistredUser,\n model);\n }\n\n function remove(userId) {\n notRegisteredUsers = null;\n return repositorySvc.customDelete(\n 'delete',\n NotRegistredUser,\n { id: userId });\n }\n\n function update(model) {\n notRegisteredUsers = null;\n return repositorySvc.customPutWithParams(\n 'update',\n NotRegistredUser,\n { id: model.id },\n model);\n }\n\n function getById(userId) {\n return repositorySvc.customGet('getById', NotRegistredUser, { id: userId });\n }\n\n function getAll(refresh) {\n if (!notRegisteredUsers || refresh) {\n notRegisteredUsers = repositorySvc.customGet('getAll', NotRegistredUser, {});\n }\n return notRegisteredUsers;\n }\n\n return {\n createNew: createNew,\n getById: getById,\n getAll: getAll,\n insert: insert,\n remove: remove,\n update: update,\n }\n }\n]);","wbApp.factory('phaseSvc', ['$resource', '$q','repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var Phase = $resource('/restapi/phase/:id', {}, {\n 'getById': { method: 'GET', url: '/restapi/phases/:id' },\n 'getAll': { method: 'GET', isArray: true, url: 'restapi/phases' },\n 'insert': { method: 'POST', url: '/restapi/phases' },\n 'update': { method: 'PUT', url: '/restapi/phases/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/phases/:id' },\n });\n\n var phases;\n\n function createNew()\n {\n var phase = {\n isNew: true\n };\n\n return phase;\n }\n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n Phase,\n model);\n }\n\n function remove(phaseId) {\n phases = null;\n return repositorySvc.customDelete(\n 'delete',\n Phase,\n { id: phaseId });\n }\n\n function update(model) {\n phases = null;\n return repositorySvc.customPutWithParams(\n 'update',\n Phase,\n { id: model.id },\n convertDatesToDateString(model));\n }\n\n function getById(phaseId) {\n return repositorySvc.customGet('getById', Phase, { id: phaseId });\n }\n\n function getAll(refresh) {\n if (!phases || refresh) {\n phases = repositorySvc.customGet('getAll', Phase, {});\n }\n return phases;\n }\n\n return {\n createNew: createNew,\n getById: getById,\n getAll: getAll,\n insert: insert,\n remove: remove,\n update: update,\n }\n }\n]);","'use strict';\n\nwbApp.controller('DashboardCtrl', ['$scope',\nfunction ($scope) {\n}]);","'use strict';\n\nwbApp.controller('FinanceSummaryCtrl', ['$scope', '$timeout', '$translate', 'invoiceSvc', 'semesterSvc', 'securitySvc',\nfunction ($scope, $timeout, $translate, invoiceSvc, semesterSvc, securitySvc) {\n \n if (!securitySvc.isInRole('Dashboard.FinanceSummary')) {\n return;\n }\n\n var activeSemesterPromise = semesterSvc.getDefaultAsync();\n\n // Wait for active semester\n activeSemesterPromise.then(function (activeSemester) {\n if (activeSemester) {\n $scope.semesterID = activeSemester.id;\n } else {\n $scope.semesterID = null;\n }\n\n $scope.onSemesterChange($scope.semesterID);\n });\n\n $scope.chart = {\n type: 'ComboChart',\n data: [\n [$translate.instant('TXT_LBL_SEMESTER'), $translate.instant('TXT_LBL_COURSES'), $translate.instant('TXT_LBL_ACTIONS'), $translate.instant('TXT_VAL_ONEOFF'), $translate.instant('TXT_LBL_PAYMENTS')],\n [\"\",0,0,0,0]\n ],\n options: {\n displayExactValues: true,\n isStacked: true,\n chartArea: { width: '70%', height: '60%' },\n legend: { position: 'bottom' },\n seriesType: \"bars\",\n series: { 3: { type: \"line\" }}\n }\n };\n\n $scope.semesterData = {};\n\n function selectSemesterData(data, semesterID) {\n for (var i = 0; i < data.length; i++) {\n var d = data[i];\n if (d.semesterID == semesterID) {\n $scope.semesterData = d;\n break;\n }\n }\n }\n\n $scope.onSemesterChange = function (semesterID) {\n if (!$scope.data) {\n $scope.data = invoiceSvc.getFinanceSummary();\n\n $scope.data.$promise.then(function (data) {\n $timeout(function () {\n\n var newData = [\n [$translate.instant('TXT_LBL_SEMESTER'), $translate.instant('TXT_LBL_COURSES'), $translate.instant('TXT_LBL_ACTIONS'), $translate.instant('TXT_VAL_ONEOFF'), $translate.instant('TXT_LBL_PAYMENTS')]\n ];\n\n for (var i = 0; i < data.length; i++) {\n var d = data[i];\n\n newData.push([\n d['semesterName'],\n d['courseRegistrationsInvoiced'],\n d['actionsInvoiced'],\n d['oneOffsAmount'],\n d['cashPayments'] + d['bankTransferPayments'] + d['creditCardPayments'] + d['benefitPlusPayments'] + d['onlinePayments']\n ]);\n }\n\n\n $scope.chart.data.length = 0;\n $scope.chart.data.push.apply($scope.chart.data, newData);\n\n selectSemesterData(data, semesterID);\n });\n });\n } else {\n selectSemesterData($scope.data, semesterID);\n }\n }\n}]);","'use strict';\n\nwbApp.controller('SemesterCourseSummaryCtrl', ['$scope', '$timeout', '$translate', 'semesterSvc', 'securitySvc',\nfunction ($scope, $timeout, $translate, semesterSvc, securitySvc) {\n\n if (!securitySvc.isInRole('Dashboard.SemesterCourse')) {\n return;\n }\n\n $scope.summary;\n var activeSemesterPromise = semesterSvc.getDefaultAsync();\n\n // Wait for active semester\n activeSemesterPromise.then(function (activeSemester) {\n if (activeSemester) {\n $scope.semesterID = activeSemester.id;\n } else {\n $scope.semesterID = null;\n }\n\n $scope.onSemesterChange($scope.semesterID);\n });\n\n $scope.chart = {\n type: 'PieChart', data: [\n ['Component', 'Value'],\n [$translate.instant('TXT_COL_ATTENDANCE_STATUS'), 0],\n [$translate.instant('TXT_STATUS_NOT_PRESENT_NOT_EXCUSED'), 0],\n [$translate.instant('TXT_STATUS_NOT_PRESENT_EXCUSED'), 0],\n [$translate.instant('TXT_STATUS_NOT_PRESENT_EXCUSED_NO_COMPENSATION'), 0]\n ], options: {\n displayExactValues: true,\n chartArea: { width: '100%', height: '70%' },\n legend: { position: 'bottom' },\n }\n };\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n $scope.summary = semesterSvc.getCourseSummaryAsync(semesterID);\n $scope.summary.$promise.then(function (data) {\n $timeout(function () {\n $scope.chart.data[1][1] = data.statusPresent;\n $scope.chart.data[2][1] = data.statusNotPresentNotExcused;\n $scope.chart.data[3][1] = data.statusNotPresentExcused;\n $scope.chart.data[4][1] = data.statusNotPresentExcusedNoCompensation;\n });\n });\n }\n }\n\n\n $scope.title = 'ABC';\n}]);","'use strict';\n\nwbApp.controller('BankCtrl', ['$scope', '$modal', '$q', '$timeout', '$translate', 'messageBoxSvc', 'accountingBookSvc', 'bankSvc', 'notificationSvc',\nfunction ($scope, $modal, $q, $timeout, $translate, messageBoxSvc, accountingBookSvc, bankSvc, notificationSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.fromDate = moment().startOf('month').toDate();\n $scope.toDate = moment().endOf('month').toDate();\n $scope.records = null;\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.accountingBookID) {\n refreshData($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n }\n });\n\n $q.all([accountingBookSvc.getDefaultAsync()])\n .then(function (data) {\n if (data && data.length === 1) {\n $scope.accountingBookID = data[0].id;\n $scope.onAccountingBookChange($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n }\n });\n\n var unimportantRecoveryDetailDlgPromise = $modal({\n templateUrl: 'finance/bank/unimportant-recovery-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n function restoreIrrelevantTransactions() {\n unimportantRecoveryDetailDlgPromise.$promise.then(function () {\n unimportantRecoveryDetailDlgPromise.$scope.fromDate = $scope.fromDate;\n unimportantRecoveryDetailDlgPromise.$scope.toDate = $scope.toDate;\n unimportantRecoveryDetailDlgPromise.$scope.accountingBookID = $scope.accountingBookID;\n unimportantRecoveryDetailDlgPromise.$scope.onSave = function () {\n refreshData($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n }\n\n unimportantRecoveryDetailDlgPromise.show();\n });\n }\n\n var addPaymentPromise = $modal({\n templateUrl: 'finance/payments/payments-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n function addPayment(data) {\n addPaymentPromise.$scope.isAddBankPayment = true;\n addPaymentPromise.$scope.bankTransactionDetail = {\n invoiceNo: data.invoiceNo,\n externalAccountNo: data.externalAccountNo,\n text: data.text,\n transactionID: data.transactionID,\n accountingBookID: $scope.accountingBookID\n };\n addPaymentPromise.$scope.paymentDetail = {\n paymentID: 0,\n paymentTypeID: 1,\n amount: data.value,\n selectedDate: data.date,\n };\n\n addPaymentPromise.$promise.then(function () {\n addPaymentPromise.$scope.detailError = null;\n addPaymentPromise.$scope.onPaymentSuccessSave = function () {\n refreshData($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n }\n\n addPaymentPromise.show();\n });\n }\n\n $scope.gridOptions = {\n sortInfo: { fields: ['date'], directions: ['dsc'] },\n columnDefs: [{ field: 'date', displayName: \"TXT_LBL_DATE\", cellFilter: 'date:shortDate', width: '75px' },\n { field: 'transactionNumber', displayName: \"TXT_LBL_TRANSACTION_NUMBER\", align: 'right', width: '100px', smHide: true },\n { field: 'invoiceNo', displayName: \"TXT_LBL_VARIABLE_SYMBOL\", width: '120px', align: 'right' },\n { field: 'externalAccountNo', displayName: \"TXT_LBL_EXTERNAL_ACCOUNT\", width: '190px', align: 'right', smHide: true, mdHide: true },\n { field: 'text', displayName: \"TXT_LBL_TEXT\", sort: 'locale' },\n { field: 'paymentID', displayName: \"TXT_LBL_PAYMENT\", cellFilter: 'checkmark', width: '60px', smHide: true },\n { field: 'value', displayName: \"TXT_LBL_VALUE\", cellFilter: 'wbCurrencyFlt', width: '100px', align: 'right' }\n ],\n disabledField: 'paymentID',\n disabledAreSelectable: true,\n customCmds: [{\n text: 'TXT_MENU_CREATE_PAYMENT',\n hide: function (row) { return !!row.paymentID; },\n command: function (row) {\n addPayment(row);\n }\n }, {\n text: 'TXT_MENU_MARK_AS_IRRELEVANT',\n hide: function (row) { return !!row.paymentID; },\n command: function (row) { \n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'TXT_CONFIRM_MARK_AS_IRRELEVANT_MESSAGE',\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO',\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n bankSvc.markAsUnimportant($scope.accountingBookID, row.transactionID)\n .then(function () {\n refreshData($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n },\n function (errorResult) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_DATA_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n }]\n });\n }\n }, {\n text: 'TXT_MENU_REMOVE_PAIRING',\n hide: function (row) { return !row.paymentID; },\n command: function (row) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'TXT_CONFIRM_REMOVE_PAIRING_MESSAGE',\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO',\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n bankSvc.removePairing($scope.accountingBookID, row.transactionID, false)\n .then(function () {\n refreshData($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n },\n function (errorResult) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_DATA_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n }]\n });\n }\n }, {\n text: 'TXT_MENU_REMOVE_PAIRING_AND_DELETE_PAYMENT',\n hide: function (row) { return !row.paymentID; },\n command: function (row) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'TXT_CONFIRM_REMOVE_PAIRING_WITH_DELETE_MESSAGE',\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO',\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n bankSvc.removePairing($scope.accountingBookID, row.transactionID, true)\n .then(function () {\n refreshData($scope.accountingBookID, $scope.fromDate, $scope.toDate);\n },\n function (errorResult) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_DATA_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n }]\n });\n }\n }, {\n text: 'TXT_MENU_RESTORE_IRRELEVANT_TRANSACTIONS',\n command: function (row) {\n restoreIrrelevantTransactions(row);\n }\n }, {\n text: 'TXT_MENU_REQUEST_AUTOMATIC_PAIRING',\n command: function (row) {\n bankSvc.requestPairing($scope.accountingBookID)\n .then(function () {\n $timeout(function () {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_INFORMATION',\n message: 'TXT_PAIRING_IN_PROGRESS',\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n });\n });\n }\n }]\n };\n\n\n function setSelectedRecord(selectedRecord) {\n if ($scope.selectedRecord !== selectedRecord) {\n $scope.selectedRecord = selectedRecord;\n $scope.$broadcast('selectedAccountingBookTransactionChanged', selectedRecord);\n }\n }\n\n function refreshData(accountingBookID, fromDate, toDate) {\n var records = bankSvc.getAllByAccountingBookID(accountingBookID, fromDate, toDate);\n\n if ($scope.records && $scope.records.length) {\n records.$promise.then(function (data) {\n $scope.records.length = 0;\n $scope.records.push.apply($scope.records, data);\n\n if ($scope.selectedRecord) {\n setSelectedRecord(\n _.find($scope.records, { transactionID: $scope.selectedRecord.transactionID }));\n if ($scope.selectedRecord) {\n $scope.selectedRecord.isSelected = true;\n }\n }\n });\n } else {\n $scope.records = records;\n setSelectedRecord(null);\n }\n }\n\n $scope.onAccountingBookChange = function (accountingBookID) {\n if (accountingBookID) {\n refreshData(accountingBookID, $scope.fromDate, $scope.toDate);\n }\n }\n\n $scope.onFromDateChange = function (fromDate) {\n if (fromDate) {\n refreshData($scope.accountingBookID, fromDate, $scope.toDate);\n }\n }\n\n $scope.onToDateChange = function (toDate) {\n if (toDate) {\n refreshData($scope.accountingBookID, $scope.fromDate, toDate);\n }\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedRecord(data);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"finance/bank/bank-tabs/paired-invoice.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n}]);\n","'use strict';\n\nwbApp.controller('BankUnimportantRecoveryDetailCtrl', ['$scope', 'bankSvc',\nfunction ($scope, bankSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.transactions = bankSvc.getUnimportantByAccountingBookID($scope.accountingBookID,\n $scope.fromDate, $scope.toDate);\n\n $scope.gridOptions = {\n sortInfo: { fields: ['date'], directions: ['dsc'] },\n columnDefs: [{ field: 'date', displayName: \"TXT_LBL_DATE\", cellFilter: 'date:shortDate', width: '75px' },\n { field: 'invoiceNo', displayName: \"TXT_LBL_VARIABLE_SYMBOL\", width: '120px', align: 'right' },\n { field: 'externalAccountNo', displayName: \"TXT_LBL_EXTERNAL_ACCOUNT\", width: '190px', align: 'right', smHide: true, mdHide: true },\n { field: 'text', displayName: \"TXT_LBL_TEXT\", sort: 'locale' },\n { field: 'value', displayName: \"TXT_LBL_VALUE\", cellFilter: 'wbCurrencyFlt', width: '100px', align: 'right' }\n ],\n noCommandColumn: true,\n hideFooter: false,\n multiSelect: true\n };\n\n var isSaving = false;\n\n $scope.isReadyToSave = function () {\n return _.some($scope.transactions, 'isSelected') && !isSaving;\n }\n\n $scope.onDetailSave = function () {\n\n isSaving = true;\n\n let selected = _.map(_.filter($scope.transactions, { 'isSelected' : true }), 'transactionID');\n bankSvc.restoreUnimportant($scope.accountingBookID, selected)\n .then(function () {\n isSaving = false;\n $scope.$hide();\n $scope.onSave();\n }, function () { isSaving = false; });\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('InvoicesCtrl', ['$scope', '$modal', '$q', '$window', '$translate', '$timeout', '$filter', 'semesterSvc',\n 'invoiceSvc', 'messageBoxSvc', 'notificationSvc', 'accountingBookSvc', 'securitySvc', 'gridSortSvc', 'localStorageService',\nfunction ($scope, $modal, $q, $window, $translate, $timeout, $filter, semesterSvc,\n invoiceSvc, messageBoxSvc, notificationSvc, accountingBookSvc, securitySvc, gridSortSvc, localStorageService) {\n\n $scope.semesterDataRange = 1; // 1 - semester, 2 - from to\n $scope.fromDate = moment().subtract(3, 'M').startOf('day').toDate();\n $scope.toDate = moment().startOf('day').toDate();\n\n if (localStorageService.isSupported)\n {\n $scope.semesterDataRange = localStorageService.get('semesterDataRange') || 1;\n }\n\n $scope.customFilter = { accountingBooks: [] };\n $scope.rawInvoices = [];\n $scope.invoices = [];\n $scope.filteredRows = [];\n\n $scope.accountingBooks = accountingBookSvc.getAllAsync();\n\n function preFilter() {\n $q.all([$scope.rawInvoices.$promise, $scope.accountingBooks.$promise]).then(function () {\n var accountingBookIDs = _.values($scope.customFilter.accountingBooks);\n $scope.invoices.length = 0;\n $scope.invoices.push.apply($scope.invoices,\n _.filter($scope.rawInvoices, function (o) {\n \n if (accountingBookIDs.length > 0) {\n return _.includes(accountingBookIDs, o.accountingBookID);\n }\n\n return true;\n })\n );\n });\n }\n\n $scope.onDataRangeChanged = function () {\n if (localStorageService.isSupported) {\n localStorageService.set('semesterDataRange', $scope.semesterDataRange);\n }\n\n if ($scope.semesterID != null) {\n loadData();\n }\n\n if ($scope.gridSettings.gridInstance) {\n if ($scope.semesterDataRange === 1) {\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", false);\n } else {\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", true);\n }\n }\n }\n\n function loadData() {\n if ($scope.semesterDataRange === 1) {\n $scope.rawInvoices = invoiceSvc.getInvoiceEvidenceBySemester($scope.semesterID);\n } else {\n $scope.rawInvoices = invoiceSvc.getInvoiceEvidenceByDateRange(\n $scope.fromDate, $scope.toDate, true);\n }\n preFilter();\n }\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n $scope.gridSettings = {\n name: 'invoices',\n columns: [\n {\n name: 'semesterColumn',\n dataField: 'semesterID',\n caption: $translate.instant('TXT_LBL_SEMESTER'),\n dataType: 'string',\n width: '120px',\n calculateCellValue: function (rowData) {\n return $filter('semester')(rowData.semesterID);\n },\n visible: $scope.semesterDataRange === 2\n },\n { dataField: 'recordNumber', caption: $translate.instant('TXT_LBL_INVOICE_NO'), dataType: 'number', width: '100px', sortOrder: 'desc' },\n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\n },\n {\n dataField: 'customerOperatorID',\n caption: $translate.instant('TXT_LBL_PARENT') + ' ID',\n dataType: 'number',\n width: '100px',\n visible: false\n },\n {\n dataField: 'operatorFullName', caption: $translate.instant(\"TXT_LBL_PARENT\"), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'operatorFullName') }\n },\n {\n dataField: 'typeID',\n caption: $translate.instant(\"TXT_LBL_TYPE\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('invoiceForType')(rowData.typeID);\n },\n width: '55px'\n },\n { dataField: 'subject', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string' },\n { dataField: 'invoiceDate', caption: $translate.instant('TXT_LBL_INVOICE_DATE'), dataType: 'date', width: '90px' },\n { dataField: 'total', caption: $translate.instant('TXT_LBL_AMOUNT'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'paymentSum', caption: $translate.instant('TXT_LBL_PAYMENTS_SUM'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n {\n dataField: 'latest',\n caption: $translate.instant('TXT_LBL_VALID'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('invoiceValid')(rowData.latest);\n },\n width: '80px'\n },\n { dataField: 'accountingBookID', caption: $translate.instant('TXT_LBL_ACCOUNTING_BOOK'), dataType: 'number', visible: false },\n ],\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.notLatest) {\n e.rowElement.addClass('text-muted');\n }\n }\n }, \n customCommands: [{\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\n isVisible: function (row) {\n return securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintInvoice(row.invoiceID, 'pdf'); }\n },\n {\n text: $translate.instant('TXT_MENU_PRINT_INVOICE_ALL'),\n isVisible: function (row) {\n return securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports');\n },\n callback: function (row, allRows) { onPrintInvoiceAll(row, allRows); }\n },\n {\n text: $translate.instant('TXT_MENU_STORMWARE_EXPORT'), \n callback: function (row, allRows) { onStormwareExportRequested(row, allRows); }\n },\n {\n text: $translate.instant('TXT_MENU_MONEYS3_PURCHASE_ORDER_EXPORT'),\n callback: function (row, allRows) { onMoneyS3ExportRequested(row, false); }\n },\n {\n text: $translate.instant('TXT_MENU_MONEYS3_INVOICE_EXPORT'),\n callback: function (row, allRows) { onMoneyS3ExportRequested(row, true); }\n },\n {\n text: $translate.instant('TXT_MENU_CSV_EXPORT'),\n callback: function (row, allRows) { onCsvExportRequested(row, allRows); }\n },\n {\n text: $translate.instant('TXT_EXPORT_INVOICE_TO_EXCEL'),\n isVisible: function (row) {\n return securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintInvoice(row.invoiceID, 'xls'); }\n }]\n }\n\n\n $scope.onFilterApplied = function (filteredRows) {\n $scope.filteredRows = filteredRows;\n }\n\n function onPrintInvoiceAll(row) {\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICES_PRINT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_PRINT').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n var invoiceIDs = encodeURIComponent(JSON.stringify(_.map($scope.filteredRows, 'invoiceID')));\n\n $window.open('/Admin/Report/InvoiceAll?InvoiceIDs=' + invoiceIDs,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onStormwareExportRequested(row) {\n\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_EXPORT').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n function onYesClicked() {\n invoiceSvc.getStormwareInvoiceExport(row.accountingBookID, _.map($scope.filteredRows, 'invoiceID'),\n onStormwareExportGenerated,\n function (error) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_SERVER_ERROR'),\n notificationSvc.translateError(error));\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_CONFIRM_INVOICE_EXPORT_GENERATION').f($scope.filteredRows.length),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked\n }]\n });\n }\n\n function onMoneyS3ExportRequested(row, exportAsInvoices) {\n\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_EXPORT').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n function onYesClicked() {\n invoiceSvc.getMoneyS3InvoiceExport(\n row.accountingBookID, \n _.map($scope.filteredRows, 'invoiceID'),\n exportAsInvoices,\n onMoneyS3ExportGenerated,\n function (error) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_SERVER_ERROR'),\n notificationSvc.translateError(error));\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_CONFIRM_INVOICE_EXPORT_GENERATION').f($scope.filteredRows.length),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked\n }]\n });\n }\n\n function onCsvExportRequested(row) {\n\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_EXPORT').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n function onYesClicked() {\n invoiceSvc.getCsvInvoiceExport(row.accountingBookID, _.map($scope.filteredRows, 'invoiceID'),\n onCsvExportGenerated,\n function (error) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_SERVER_ERROR'),\n notificationSvc.translateError(error));\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_CONFIRM_INVOICE_EXPORT_GENERATION').f($scope.filteredRows.length),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked\n }]\n });\n }\n\n function onStormwareExportGenerated(data) {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n \n function onMoneyS3ExportGenerated(data) {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n\n function onCsvExportGenerated(data) {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n function onPrintInvoice(invoiceID, format) {\n\n if (format == 'xls') {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n } else {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n }\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID) {\n loadData();\n $scope.selectedInvoice = null;\n preFilter();\n }\n });\n\n $q.all([semesterSvc.getDefaultAsync()])\n .then(function (data) {\n if (data[0]) {\n $scope.semesterID = data[0].id;\n }\n\n if ($scope.semesterID) {\n // get invoices\n loadData();\n } \n });\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n // get invoices\n loadData();\n $scope.selectedInvoice = null; \n }\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedInvoice = data;\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('InvoicesDetailCtrl', ['$scope', 'invoiceSvc',\nfunction ($scope, invoiceSvc) {\n $scope.model = invoiceSvc.getByID($scope.invoiceID);\n}]);\n","wbApp.controller('AccountingBookCtrl', ['$scope', '$modal', 'accountingBookSvc', '$routeParams', '$location', '$timeout',\nfunction ($scope, $modal, accountingBookSvc, $routeParams, $location, $timeout) {\n \n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '250px' },\n { field: 'subjectName', displayName: \"TXT_LBL_SUBJECT_NAME\", sort: 'locale', width: '250px' },\n { field: 'subjectAddress', displayName: \"TXT_LBL_ADDRESS\", sort: 'locale' },\n { field: 'organisationIdentifier', displayName: \"TXT_LBL_ORGANISATION_IDENTIFIER\", align: 'right', width: '110px' },\n { field: 'accountNo', displayName: \"TXT_LBL_ACCOUNT_NO\", align: 'right', width: '160px' }\n ]\n };\n\n $scope.accountingBooks = accountingBookSvc.getAllAsync(true);\n\n // Open Detail if we have query parameter\n let editDetailAccountingBookId = Number($routeParams.id);\n if (editDetailAccountingBookId) {\n $scope.accountingBooks.$promise.then(function (result) {\n let data = _.find($scope.accountingBooks, { id: editDetailAccountingBookId });\n if (!data) {\n $location.path('/finance/accounting-books');\n } else {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n }); \n }\n })\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.accountingBooks = accountingBookSvc.getAllAsync(true);\n });\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = accountingBookSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n accountingBookSvc.remove(data);\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'finance/accounting-books/accounting-books-detail.html',\n show: false,\n scope: $scope.$new(),\n tag: 'accountingBookDetail'\n });\n\n $scope.$on('modal.hide', function(e, target) {\n if (target.$options.tag === 'accountingBookDetail') {\n if ($routeParams.id) {\n $timeout(function () {\n $location.path('/finance/accounting-books');\n }, 1);\n }\n }\n })\n}]);\n","wbApp.controller('AccountingBookDetailCtrl', ['$scope', 'accountingBookSvc', '$timeout', '$modal', 'messageBoxSvc', '$routeParams', '$translate', '$location',\nfunction ($scope, accountingBookSvc, $timeout, $modal, messageBoxSvc, $routeParams, $translate, $location) {\n\n $scope.modelOrig = angular.copy($scope.model);\n $scope.isBussy = false;\n\n $scope.bankImportCredentials = {\n shopName: null,\n password: null\n };\n\n $scope.minFromDate = moment().subtract(90, 'days').toDate();\n $scope.goCardlessData = {\n id: $scope.model.bankTransactionImportType === 3 ? $scope.model.securityAccessToken : null,\n institutionId: null,\n statusStr: null\n }\n \n $scope.accountingStampUrl = `restapi/accounting-books/${$scope.model.id}/accounting-stamp`;\n\n if ($scope.model.securityAccessToken && $scope.model.bankTransactionImportType == 2) {\n var split = $scope.model.securityAccessToken.split('#');\n if (split.length == 2) {\n $scope.bankImportCredentials.shopName = split[0];\n $scope.bankImportCredentials.password = split[1];\n }\n }\n\n // 0 - TXT_VAL_BANK_CONNECTION_STATUS_CREATED\n // 1 - TXT_VAL_BANK_CONNECTION_STATUS_GIVING_CONSENT\n // 2 - TXT_VAL_BANK_CONNECTION_STATUS_UNDERGOING_AUTHENTICATION\n // 3 - TXT_VAL_BANK_CONNECTION_STATUS_REJECTED\n // 4 - TXT_VAL_BANK_CONNECTION_STATUS_SELECTING_ACCOUNTS\n // 5 - TXT_VAL_BANK_CONNECTION_STATUS_GRANTING_ACCESS\n // 6 - TXT_VAL_BANK_CONNECTION_STATUS_LINKED\n // 7 - TXT_VAL_BANK_CONNECTION_STATUS_EXPIRED\n // 8 - TXT_VAL_BANK_CONNECTION_STATUS_UNKNOWN\n \n if ($scope.model.bankTransactionImportType === 3) {\n accountingBookSvc.getConnection($scope.model.securityAccessToken).$promise.then(function (data) {\n $scope.goCardlessData = angular.extend({}, data, $scope.goCardlessData);\n switch(data.status) {\n case 0:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_CREATED');\n break;\n case 1:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_GIVING_CONSENT');\n break;\n case 2:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_UNDERGOING_AUTHENTICATION');\n break;\n case 3:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_REJECTED');\n break;\n case 4:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_SELECTING_ACCOUNTS');\n break;\n case 5:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_GRANTING_ACCESS');\n break;\n case 6:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_LINKED');\n break;\n case 7:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_EXPIRED');\n break;\n case 8:\n $scope.goCardlessData.statusStr = $translate.instant('TXT_VAL_BANK_CONNECTION_STATUS_UNKNOWN');\n break;\n }\n });\n }\n\n $scope.onBankImportCredentialsChange = function (shopName, password) {\n if ($scope.model.bankTransactionImportType == 2) {\n $scope.model.securityAccessToken = shopName + '#' + password;\n }\n }\n\n $scope.onImportTypeChange = function (val) {\n $scope.model.securityAccessToken = null;\n $scope.bankImportCredentials.shopName = null;\n $scope.bankImportCredentials.password = null;\n\n if ($scope.model.bankTransactionImportType == 0) {\n $scope.model.bankTransactionImportAmountLimit = null;\n $scope.model.bankTransactionImportStartDate = null;\n }\n }\n \n $scope.onSelectBankClick = function () {\n bankSelectionDialogPromise.$promise.then(function () {\n bankSelectionDialogPromise.$scope.model = $scope.model;\n bankSelectionDialogPromise.$scope.onInstitutionSelected = function (institution) {\n $scope.isBussy = true;\n accountingBookSvc.createBankConnection(\n institution.id,\n `${location.href}/${$scope.model.id}/tab/bank`,\n $scope.model.id).$promise.then(function (data) {\n $scope.model.securityAccessToken = data.id;\n accountingBookSvc.update($scope.model, function () {\n $scope.isBussy = false;\n window.location.href = data.authorizationLinkUrl;\n }, \n function(error) {\n $scope.isBussy = false;\n });\n }, function (error) {$scope.isBussy = false});\n }\n bankSelectionDialogPromise.show();\n });\n }\n \n $scope.onSelectBankAccount = function () {\n bankAccountSelectionDialogPromise.$promise.then(function () {\n bankAccountSelectionDialogPromise.$scope.model = $scope.goCardlessData;\n bankAccountSelectionDialogPromise.$scope.onBankAccountSelected = function (account) {\n $scope.isBussy = true;\n accountingBookSvc.selectBankAccount($scope.goCardlessData.id, account.id).$promise.then(function (data) {\n $scope.goCardlessData.selectedAccountIndex = data.selectedAccountIndex;\n $scope.isBussy = false;\n },\n function (reason) {\n $scope.isBussy = false;\n });\n }\n bankAccountSelectionDialogPromise.show();\n });\n }\n \n $scope.onDeleteBankConnection = function () {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE_BANK_CONNECTION',\n message: 'TXT_TEXT_CONFIRM_DELETE_BANK_CONNECTION',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n $scope.isBussy = true;\n accountingBookSvc.deleteConnection($scope.model.securityAccessToken).$promise.then(function () {\n $scope.model.securityAccessToken = null;\n $scope.model.bankTransactionImportType = 0;\n accountingBookSvc.update($scope.model, function () {\n $scope.isBussy = false;\n $scope.goCardlessData = {\n id: null,\n institutionId: null,\n statusStr: null\n };\n }, function (error) {\n $scope.isBussy = false;\n });\n }, function (error) {\n $scope.isBussy = false;\n });\n }\n }]\n });\n }\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"finance/accounting-books/accounting-books-detail-main-tab.html\",\n tabId: 'main'\n },\n {\n title: \"TXT_LBL_ACCOUNTING\",\n template: \"finance/accounting-books/accounting-books-detail-accounting-tab.html\",\n tabId: 'accounting'\n },\n {\n title: \"TXT_LBL_BANK\",\n template: \"finance/accounting-books/accounting-books-detail-bank-tab.html\",\n tabId: 'bank'\n }\n ];\n\n if (!!$scope.model.id) {\n $scope.detailTabs.push({\n title: \"TXT_LBL_SEQUENCES\",\n template: \"finance/accounting-books/accounting-books-detail-sequences-tab.html\",\n tabId: 'sequences'\n });\n $scope.detailTabs.push({\n title: \"TXT_LBL_ACCOUNTING_STAMP\",\n template: \"finance/accounting-books/accounting-books-detail-accounting-stamp-tab.html\",\n tabId: 'accounting-stamp'\n });\n }\n\n $scope.detailTabs.activeTab = 0;\n\n let selectedTabId = $routeParams.tabId;\n if (selectedTabId) {\n let selectedTabIndex = _.findIndex($scope.detailTabs, { tabId: selectedTabId });\n if (selectedTabIndex !== -1) {\n $scope.detailTabs.activeTab = selectedTabIndex; \n }\n }\n \n $scope.isTdSequenceSaving = false;\n $scope.tdSeq = {\n selectedYear: moment().year(),\n accountingBookId: $scope.model.id,\n nextSequenceNo: 1\n };\n \n if (!!$scope.model.id) {\n accountingBookSvc.peekNextSequenceNoRaw(\n 3, /* TaxDocument */\n $scope.tdSeq.accountingBookId,\n $scope.tdSeq.selectedYear, function (data) {\n $scope.tdSeq.nextSequenceNo = data.value;\n });\n }\n\n $scope.onTaxDocumentYearChange = function (year) {\n accountingBookSvc.peekNextSequenceNoRaw(3, $scope.tdSeq.accountingBookId, $scope.tdSeq.selectedYear, function (nextSeq) {\n $scope.tdSeq.nextSequenceNo = nextSeq.value;\n });\n }\n\n $scope.onTaxDocumentSequnceSave = function (m) {\n if ($scope.isTdSequenceSaving) {\n return;\n }\n\n $scope.isTdSequenceSaving = true;\n accountingBookSvc.setNextSequenceNoRaw(3, $scope.tdSeq.accountingBookId, $scope.tdSeq.selectedYear, m,\n function () {\n $scope.tdSeq.nextSequenceNo = m;\n $scope.isTdSequenceSaving = false;\n }, function (error) {\n $scope.isTdSequenceSaving = false;\n });\n }\n\n $scope.getSequenceNoPadded = function(number) {\n return (number % 100000).pad(5);\n }\n\n $scope.getAccountingBookIdPadded = function (number) {\n return (number % 1000).pad(3);\n }\n \n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n if (!model.id) {\n accountingBookSvc.insert(model, success, error);\n } else {\n accountingBookSvc.update(model, success, error);\n }\n }\n\n $scope.onAddStampBtnClick = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.pictureWidth = 558;\n detailDialogPromise.$scope.pictureHeight = 206;\n detailDialogPromise.$scope.onUploadImage = function(data, success, error) {\n accountingBookSvc.uploadAccountingStamp($scope.model.id, data).$promise.then(function(result) {\n success({'imageUrl': `restapi/accounting-books/${$scope.model.id}/accounting-stamp`});\n }, error);\n };\n detailDialogPromise.$scope.onImageSave = function (imageUrl) {\n $scope.accountingStampUrl = `restapi/accounting-books/${$scope.model.id}/accounting-stamp?${new Date().getTime()}`;\n }\n detailDialogPromise.show();\n });\n }\n \n $scope.onDeleteStampBtnClick = function() {\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: 'TXT_TEXT_CONFIRM_DELETE_STAMP',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n accountingBookSvc.deleteAccountingStamp($scope.model.id).$promise.then(function() {\n $scope.accountingStampUrl = `restapi/accounting-books/${$scope.model.id}/accounting-stamp?${new Date().getTime()}`;\n });\n }\n }]\n }); \n }\n\n\n let detailDialogPromise = $modal({\n templateUrl: 'storage/pictures/pictures-detail.html',\n show: false,\n scope: $scope\n });\n\n let bankSelectionDialogPromise = $modal({\n templateUrl: 'finance/accounting-books/bank-selection-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n\n let bankAccountSelectionDialogPromise = $modal({\n templateUrl: 'finance/accounting-books/bank-account-selection-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('BankAccountSelectionDialogCtrl', ['$scope',\nfunction ($scope) {\n \n \n $scope.selectedBankAccount = {\n id: null\n };\n \n \n $scope.onBankAccountSelect = function () {\n $scope.$hide();\n $scope.onBankAccountSelected($scope.selectedBankAccount);\n }\n \n $scope.selectBankAccount = function (account) {\n $scope.selectedBankAccount = account;\n }\n \n $scope.isBankAccountSelected = function () {\n return !!$scope.selectedBankAccount.id;\n }\n}]);\n","wbApp.controller('BankPairedInvoiceCtrl', ['$scope', '$window', 'invoiceSvc',\nfunction ($scope, $window, invoiceSvc) {\n\n $scope.selectedInvoiceID = null;\n $scope.model = null;\n\n $scope.$on('selectedAccountingBookTransactionChanged', function (e, data) {\n if (!data) {\n $scope.model = null;\n $scope.selectedInvoiceNo = null;\n } else if ($scope.selectedInvoiceID !== data.invoiceID) {\n $scope.selectedInvoiceID = data.invoiceID;\n if (!!$scope.selectedInvoiceID) {\n $scope.model = invoiceSvc.getInvoiceEvidenceByInvoiceID($scope.selectedInvoiceID);\n } else {\n $scope.model = null;\n }\n }\n });\n\n\n $scope.onPrintInvoice = function (invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n}]);\n","wbApp.controller('BankSelectionDialogCtrl', ['$scope', '$modal', 'accountingBookSvc',\nfunction ($scope, $modal, accountingBookSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n \n $scope.institutions = accountingBookSvc.getInstitutions();\n $scope.selectedInstitution = {\n id: null\n };\n \n \n $scope.onInstitutionConnect = function () {\n $scope.onInstitutionSelected($scope.selectedInstitution);\n $scope.$hide();\n }\n \n $scope.selectInstitution = function (institution) {\n $scope.selectedInstitution = institution;\n }\n \n $scope.isInstitutionSelected = function () {\n return !!$scope.selectedInstitution.id;\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n}]);\n","wbApp.controller('CompensationsCoursesCtrl', ['$scope', 'compensationsSvc',\nfunction ($scope, compensationsSvc) {\n\n\n $scope.compensationCoursesGridFilterOptions = {\n filterText: \"\"\n };\n\n $scope.compensationCoursesGridOptions = {\n sortInfo: { fields: ['courseFullName'], directions: ['dsc'] },\n columnDefs: [\n { field: 'courseFullName', displayName: \"TXT_LAB_COURSE\", sort: 'locale' },\n { field: 'eligiblePreAmends', displayName: \"TXT_LBL_PRE_AMENDS_GRANTED\", width: '90px', align: 'right' },\n { field: 'remainingPreAmends', displayName: \"TXT_LBL_PRE_AMENDS_LEFT\", width: '90px', align: 'right' },\n { field: 'preAmendsTaken', displayName: \"TXT_LBL_PRE_AMENDS_TAKEN\", width: '90px', align: 'right' },\n { field: 'eligibleAmends', displayName: \"TXT_LBL_ELIGIBLE_AMENDS\", width: '90px', align: 'right' },\n { field: 'remainingAmends', displayName: \"TXT_LBL_AMENDS_LEFT\", width: '90px', align: 'right' },\n { field: 'eligibleTimeBoundAmends', displayName: \"TXT_LBL_ELIGIBLE_TIME_BOUNDS\", width: '90px', align: 'right' },\n { field: 'remainingTimeBoundAmends', displayName: \"TXT_LBL_TIME_BOUNDS_AMEND\", width: '90px', align: 'right' },\n ],\n noCommandColumn: true\n };\n\n $scope.compensationCourses = [];\n\n $scope.$on('selectedCompensationChanged', function (e, data) {\n if (!!data && !!data.semesterID && !!data.compensation) {\n $scope.compensationCourses = compensationsSvc.getDetailAsync(data.semesterID, data.compensation.studentID);\n } else {\n $scope.compensationCourses.length = 0;\n }\n });\n}]);","wbApp.controller('CompensationsCtrl', ['$scope', '$filter', 'semesterSvc', 'compensationsSvc',\nfunction ($scope, $filter, semesterSvc, compensationsSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n function setSelectedCompensation(semesterID, compensation) {\n $scope.selectedCompensation = compensation;\n $scope.$broadcast('selectedCompensationChanged', { semesterID: semesterID, compensation: compensation });\n }\n\n function refreshData(semesterID) {\n setSelectedCompensation(null, null);\n $scope.comensationSummary = compensationsSvc.getAllAsync(semesterID || null);\n }\n\n semesterSvc.getDefaultAsync()\n .then(function (data) {\n if (data) {\n $scope.semesterID = data.id;\n }\n\n refreshData($scope.semesterID);\n });\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n refreshData($scope.semesterID);\n }\n }\n\n $scope.gridOptions = {\n sortInfo: { fields: ['studentFullName'], directions: ['asc'] },\n columnDefs: [{ field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'humanName', width: '170px' },\n { field: 'parentFullName', displayName: \"TXT_LBL_PARENT\", sort: 'humanName', width: '170px', smHide: true, mdHide: true },\n { field: 'address', displayName: \"TXT_LBL_ADDRESS\", sort: 'locale', smHide: true },\n { field: 'email', displayName: \"TXT_LBL_EMAIL\", smHide: true, mdHide: true, width: '190px' },\n { field: 'preAmendsGranted', displayName: \"TXT_LBL_PRE_AMENDS_GRANTED\", width: '90px', align: 'right' },\n { field: 'preAmendsLeft', displayName: \"TXT_LBL_PRE_AMENDS_LEFT\", width: '90px', align: 'right' },\n { field: 'preAmendsTaken', displayName: \"TXT_LBL_PRE_AMENDS_TAKEN\", width: '90px', align: 'right' },\n { field: 'amends', displayName: \"TXT_LBL_AMENDS_LEFT\", width: '90px', align: 'right' },\n { field: 'timeBoundAmendCount', displayName: \"TXT_LBL_TIME_BOUNDS_AMEND\", width: '90px', align: 'right' },\n\n ],\n noCommandColumn: true\n };\n\n $scope.onRowSelected = function (data) {\n setSelectedCompensation($scope.semesterID, data);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_LBL_COURSES',\n template: \"finance/compensations/compensations-tabs/courses.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$on('refreshData', function (e, data) {\n refreshData($scope.semesterID);\n });\n}]);","'use strict';\n\nwbApp.controller('DuePaymentAmortizationScheduleCtrl', ['$scope', '$window', '$translate', '$filter', 'paymentsSvc', 'securitySvc',\nfunction ($scope, $window, $translate, $filter, paymentsSvc, securitySvc) {\n\n\n var isActive = false;\n var loaded = false;\n $scope.invoiceID = null;\n $scope.amortizationSchedules = [];\n\n $scope.$on('selectedDuePaymentChanged', function (e, data) {\n\n if (data) {\n if (data.invoiceID !== $scope.invoiceID || !loaded) {\n $scope.invoiceID = data.invoiceID;\n if (isActive) {\n $scope.amortizationSchedules = paymentsSvc.getAmortizationScheduleDuePayments(data.invoiceID);\n loaded = true;\n } else {\n loaded = false;\n }\n }\n } else {\n $scope.amortizationSchedules.length = 0;\n loaded = false;\n }\n });\n\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 5) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.invoiceID) {\n $scope.amortizationSchedules = paymentsSvc.getAmortizationScheduleDuePayments($scope.invoiceID);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.amortizationSchedulesGridSettings = {\n name: 'amortizationSchedules',\n columns: [\n {\n dataField: 'amortizationScheduleNo',\n caption: $translate.instant(\"TXT_ORDER\"),\n dataType: 'number',\n width: '90px',\n sortOrder: 'asc'\n },\n { dataField: 'issueAt', caption: $translate.instant('TXT_LBL_DATE'), dataType: 'date', width: '90px' },\n { dataField: 'amount', caption: $translate.instant('TXT_LBL_AMOUNT'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'arrear', caption: $translate.instant('TXT_LBL_ARREAR'), dataType: 'number', format: { type: 'currency', precision: 2 } }\n ]\n }\n \n}]);","'use strict';\n\nwbApp.controller('DuePaymentsCtrl', ['$scope', '$modal', '$q', '$window', '$translate', '$timeout',\n '$filter', 'semesterSvc', 'duePaymentsSvc', 'securitySvc', 'messageBoxSvc', 'courseRegistrationSvc', 'tenantSettingSvc',\n 'localStorageService', 'accountingBookSvc', 'gridSortSvc',\n function ($scope, $modal, $q, $window, $translate, $timeout, $filter, semesterSvc,\n duePaymentsSvc, securitySvc, messageBoxSvc, courseRegistrationSvc, tenantSettingSvc, localStorageService, accountingBookSvc, gridSortSvc) {\n\n $scope.semesterDataRange = 1; // 1 - semester, 2 - from to\n $scope.fromDate = moment().subtract(3, 'M').startOf('day').toDate();\n $scope.toDate = moment().startOf('day').toDate();\n\n if (localStorageService.isSupported)\n {\n $scope.semesterDataRange = localStorageService.get('semesterDataRange') || 1;\n }\n\n $scope.customFilter = { invoiceForType: [], showAfterDueDateOnly: false };\n $scope.rawDuePayments = [];\n $scope.duePayments = [];\n\n $scope.accountingBooks = accountingBookSvc.getAllAsync();\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n function preFilter() {\n var now = moment();\n\n $q.all([$scope.rawDuePayments.$promise, $scope.accountingBooks.$promise]).then(function () {\n var typeIDs = _.values($scope.customFilter.invoiceForType);\n var accountingBookIDs = _.values($scope.customFilter.accountingBooks);\n var showAfterDueDateOnly = $scope.customFilter.showAfterDueDateOnly;\n $scope.duePayments.length = 0;\n $scope.duePayments.push.apply($scope.duePayments,\n _.filter($scope.rawDuePayments, function (o) {\n var result = true;\n if (typeIDs.length > 0) {\n result = _.includes(typeIDs, o.typeID);\n }\n\n if (accountingBookIDs.length > 0) {\n result = result && _.includes(accountingBookIDs, o.accountingBookID);\n }\n\n if (showAfterDueDateOnly) {\n \n result = result && o.claimOverdue;\n // hasAmortizationSchedule\n // ? result && o.priceByAmortizationSchedule != o.payments \n // : result && moment(o.dueDate).isBefore(now);\n }\n\n return result;\n })\n );\n });\n }\n\n $scope.onDataRangeChanged = function () {\n if (localStorageService.isSupported) {\n localStorageService.set('semesterDataRange', $scope.semesterDataRange);\n }\n\n if ($scope.semesterID != null) {\n loadData();\n }\n\n if ($scope.gridSettings.gridInstance) {\n if ($scope.semesterDataRange === 1) {\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", false);\n } else {\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", true);\n }\n }\n }\n\n function loadData() {\n if ($scope.semesterDataRange === 1) {\n $scope.rawDuePayments = duePaymentsSvc.getAllBySemesterIDAsync(\n $scope.semesterID != null ? $scope.semesterID : null, true);\n } else {\n $scope.rawDuePayments = duePaymentsSvc.getAllByDateRangeAsync(\n $scope.fromDate, $scope.toDate, true);\n }\n preFilter();\n }\n\n $q.all([semesterSvc.getDefaultAsync()])\n .then(function (data) {\n if (data[0]) {\n $scope.semesterID = data[0].id;\n }\n\n loadData();\n });\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID) {\n loadData();\n setSelectedDuePayment(null);\n }\n });\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n loadData(); \n setSelectedDuePayment(null);\n }\n }\n\n var addPaymentPromise = $modal({\n templateUrl: 'finance/payments/payments-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n function addPayment(data) {\n addPaymentPromise.$scope.isAddDuePayment = true;\n addPaymentPromise.$scope.paymentDetail = {\n paymentID: 0,\n invoiceForType: data.typeID,\n invoiceID: data.invoiceID,\n amount: data.value,\n selectedDate: data.date,\n };\n\n addPaymentPromise.$promise.then(function () {\n addPaymentPromise.$scope.detailError = null;\n addPaymentPromise.$scope.onSave = function () {\n loadData();\n setSelectedDuePayment(null);\n }\n\n addPaymentPromise.show();\n });\n }\n\n\n\n function setSelectedDuePayment(duePayment) {\n if ($scope.selectedDuePayment !== duePayment) {\n $scope.selectedDuePayment = duePayment;\n $scope.$broadcast('selectedDuePaymentChanged', duePayment);\n }\n }\n\n $scope.icons = [{\n value: 1,\n label: $translate.instant('TXT_LAB_COURSE')\n }, {\n value: 2,\n label: $translate.instant('TXT_LAB_ACTION_SINGULAR')\n }, {\n value: 3,\n label: $translate.instant('TXT_LAB_KINDERGARTEN')\n }, {\n value: 4,\n label: $translate.instant('TXT_LAB_RESERVATION')\n }];\n\n $scope.gridSettings = {\n name: 'duePayments',\n columns: [\n {\n name: 'semesterColumn',\n dataField: 'semesterID',\n caption: $translate.instant('TXT_LBL_SEMESTER'),\n dataType: 'string',\n width: '120px',\n calculateCellValue: function (rowData) {\n return $filter('semester')(rowData.semesterID);\n },\n visible: $scope.semesterDataRange === 2\n },\n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\n },\n { dataField: 'invoiceNo', caption: $translate.instant('TXT_LBL_INVOICE_NO'), dataType: 'string', width: '90px' },\n {\n dataField: 'typeID',\n caption: $translate.instant(\"TXT_LBL_TYPE\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('invoiceForType')(rowData.typeID);\n },\n width: '55px'\n },\n { dataField: 'subject', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string', sortOrder: 'asc' },\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\n {\n dataField: 'hasAmortizationSchedule',\n caption: $translate.instant('TXT_TAB_AMORTIZATION_SCHEDULE'),\n dataType: 'boolean',\n trueText: '',\n falseText: ' ',\n encodeHtml: false,\n showEditorAlways: false,\n width: '40px',\n visible: tenantSettingSvc.settings.enableAmortizationSchedules,\n },\n { dataField: 'dueDate', caption: $translate.instant('TXT_LBL_DUE_DATE'), dataType: 'date', width: '90px' },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'payments', caption: $translate.instant('TXT_LBL_PAYMENTS'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'arrear', caption: $translate.instant('TXT_LBL_ARREAR'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' }\n ], \n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.invoiceNotInSync) {\n e.rowElement.addClass('text-danger');\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_MENU_CREATE_PAYMENT'),\n isVisible: function (row) { return securitySvc.isInRole('Payment.Insert'); },\n callback: function (row) { addPayment(row); }\n },{\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\n isVisible: function (row) {\n return securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { $scope.onPrintInvoice(row.invoiceID); }\n },\n {\n text: $translate.instant('TXT_MENU_SEND_DUE_PAYMENT_NOTIF'),\n callback: function (row) { $scope.onDuePaymentNotification(row); }\n },\n {\n text: $translate.instant('TXT_MENU_REMOVE_FROM_COURSE'),\n isVisible: function (row) {\n return securitySvc.isInRole('CourseRegistration.Delete') && row.typeID === 1;\n },\n callback: function (row) { $scope.removeFromCourse(row); }\n }]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedDuePayment(data);\n }\n\n $scope.expectedPricePop = {\n title: 'Očekávaná cena',\n content: $translate.instant('TXT_LBL_EXPECTED_PRICE_MISMATCH')\n }\n\n function removeFromCourseImpl(data) {\n courseRegistrationSvc.remove(\n { courseRegistrationID: data.typeReferenceID },\n 1 /* Courses */,\n function () {\n loadData();\n });\n }\n\n $scope.removeFromCourse = function (data) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: $translate.instant('TXT_CONFIRM_REMOVE_FROM_COURSE').f(data.studentFullName, data.subject),\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () { return removeFromCourseImpl(data); }\n }]\n });\n }\n \n $scope.onPrintInvoice = function(invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n $scope.onUpdateInvoice = function (invoiceID) {\n invoiceDetailDialogPromise.$promise.then(function() {\n invoiceDetailDialogPromise.$scope.invoiceID = invoiceID;\n invoiceDetailDialogPromise.show();\n });\n }\n\n $scope.onDuePaymentNotification = function (row) {\n duePaymentsSvc.sendRequestForPayment(\n row.invoiceID,\n row.typeID,\n row.typeReferenceID,\n row.typeReference2ID,\n row.parentID,\n row.isReccuring);\n }\n\n $scope.onFilterApplied = function (filteredRows) {\n $scope.$broadcast('filterApplied', filteredRows);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"finance/due-payments/due-payments-tabs/detail.html\"\n }, {\n title: 'TXT_FILTER_SUMMARY',\n template: \"finance/due-payments/due-payments-tabs/summary.html\"\n }, {\n title: 'TXT_USER_PAYMENTS',\n template: \"finance/due-payments/due-payments-tabs/user-payments.html\"\n }, {\n title: 'TXT_USER_INVOICES',\n template: \"finance/due-payments/due-payments-tabs/user-invoices.html\"\n }, {\n title: 'TXT_LBL_PAYMENTS',\n template: \"finance/due-payments/due-payments-tabs/payments.html\"\n }];\n\n if (tenantSettingSvc.settings.enableAmortizationSchedules) {\n $scope.tabs.push({\n title: 'TXT_TAB_AMORTIZATION_SCHEDULE',\n template: \"finance/due-payments/due-payments-tabs/amortization-schedule.html\"\n });\n }\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n\n var invoiceDetailDialogPromise = $modal({\n templateUrl: 'finance/invoices/invoices-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);","'use strict';\n\nwbApp.controller('DuePaymentPaymentsCtrl', ['$scope', '$window', '$translate', '$filter', 'paymentsSvc', 'securitySvc',\nfunction ($scope, $window, $translate, $filter, paymentsSvc, securitySvc) {\n\n\n\n var isActive = false;\n var loaded = false;\n $scope.invoiceID = null;\n $scope.payments = [];\n\n $scope.$on('selectedDuePaymentChanged', function (e, data) {\n\n if (data) {\n if (data.invoiceID !== $scope.invoiceID || !loaded) {\n $scope.invoiceID = data.invoiceID;\n if (isActive) {\n $scope.payments = paymentsSvc.getAllRelatedPaymentsByInvoiceID(data.invoiceID);\n loaded = true;\n } else {\n loaded = false;\n }\n }\n } else {\n $scope.payments.length = 0;\n loaded = false;\n }\n });\n\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 4) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.invoiceID) {\n $scope.payments = paymentsSvc.getAllRelatedPaymentsByInvoiceID($scope.invoiceID);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n\n $scope.paymentsGridSettings = {\n name: 'payments',\n columns: [\n {\n dataField: 'typeID',\n caption: $translate.instant(\"TXT_LBL_TYPE\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('invoiceForType')(rowData.typeID);\n },\n width: '55px'\n },\n { dataField: 'subject', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string', sortOrder: 'dsc' },\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\n { dataField: 'value', caption: $translate.instant('TXT_LBL_AMOUNT'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n {\n dataField: 'paymentTypeID',\n caption: $translate.instant(\"TXT_LBL_PAYMENT\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('paymentType')(rowData.paymentTypeID);\n },\n width: '70px'\n },\n { dataField: 'paymentDate', caption: $translate.instant('TXT_LBL_DATE'), dataType: 'date', width: '90px', sortOrder: 'asc' },\n { dataField: 'invoiceNo', caption: $translate.instant('TXT_LBL_INVOICE_NO'), dataType: 'string', width: '90px', visible: false },\n {\n dataField: 'terminalID',\n caption: $translate.instant('TXT_LBL_TERMINAL'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('terminal')(rowData.terminalID);\n },\n width: '150px',\n visible: false\n }\n ]\n }\n \n}]);","'use strict';\n\nwbApp.controller('DuePaymentSummaryCtrl', ['$scope', '$translate', '$timeout', 'duePaymentsSvc',\nfunction ($scope, $translate, $timeout, duePaymentsSvc) {\n\n $scope.filterSummaryDuePaymentsTypes = {\n type: 'PieChart', data: [\n ['Component', 'Value'],\n [$translate.instant('TXT_LAB_COURSE'), 0],\n [$translate.instant('TXT_LAB_ACTION_SINGULAR'), 0],\n [$translate.instant('TXT_LAB_KINDERGARTEN'), 0],\n [$translate.instant('TXT_LAB_RESERVATION'), 0]\n ], options: {\n displayExactValues: true,\n chartArea: { top: '0px', left: '0px', width: '85%', height: '85%' },\n //pieSliceText: 'label',\n legend: { position: 'right' },\n }\n };\n\n $scope.summaryDuePaymentsTypes = {\n type: 'PieChart', data: [\n ['Component', 'Value'],\n [$translate.instant('TXT_LAB_COURSE'), 0],\n [$translate.instant('TXT_LAB_ACTION_SINGULAR'), 0],\n [$translate.instant('TXT_LAB_KINDERGARTEN'), 0],\n [$translate.instant('TXT_LAB_RESERVATION'), 0]\n ], options: {\n displayExactValues: true,\n chartArea: { top: '0px', left: '0px', width: '85%', height: '85%' },\n //pieSliceText: 'label',\n legend: { position: 'right' },\n }\n };\n\n var filteredRows = null;\n var isActive = false;\n var loaded = false;\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n onFilterApplied(filteredRows);\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.$on('filterApplied', function (e, data) {\n // TODO: only when tab is shown \n filteredRows = data;\n loaded = false;\n\n if (isActive) {\n onFilterApplied(data);\n }\n });\n\n var onFilterApplied = function (filteredRows) {\n if (loaded || !filteredRows) {\n return;\n }\n loaded = true;\n $scope.summary = duePaymentsSvc.calculateSummary(filteredRows);\n $timeout(function () {\n $scope.filterSummaryDuePaymentsTypes.data[1][1] = $scope.summary.types[0].value;\n $scope.filterSummaryDuePaymentsTypes.data[2][1] = $scope.summary.types[1].value;\n $scope.filterSummaryDuePaymentsTypes.data[3][1] = $scope.summary.types[2].value;\n $scope.filterSummaryDuePaymentsTypes.data[4][1] = $scope.summary.types[3].value;\n });\n\n $scope.summaryAll = duePaymentsSvc.calculateSummaryAll();\n $scope.summaryAll.$promise.then(function (data) {\n $timeout(function () {\n $scope.summaryDuePaymentsTypes.data[1][1] = data.types[0].value;\n $scope.summaryDuePaymentsTypes.data[2][1] = data.types[1].value;\n $scope.summaryDuePaymentsTypes.data[3][1] = data.types[2].value;\n $scope.summaryDuePaymentsTypes.data[4][1] = data.types[3].value;\n });\n });\n }\n\n}]);","'use strict';\n\nwbApp.controller('DuePaymentUserInvoicesCtrl', ['$scope', '$window', 'invoiceSvc',\nfunction ($scope, $window, invoiceSvc) {\n\n\n $scope.relatedGridFilterOptions = {\n filterText: \"\"\n };\n\n $scope.relatedGridOptions = {\n sortInfo: { fields: ['recordNumber'], directions: ['dsc'] },\n columnDefs: [\n { field: 'semesterID', displayName: \"TXT_LBL_SEMESTER\", cellFilter: 'semester', width: '160px' },\n { field: 'recordNumber', displayName: \"TXT_LBL_INVOICE_NO\", width: '100px', smHide: true, mdHide: true },\n { field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'humanName', width: '160px' },\n { field: 'typeID', displayName: \"TXT_LBL_TYPE\", cellFilter: 'invoiceForType', width: '55px', smHide: true, mdHide: true },\n { field: 'subject', displayName: \"TXT_LBL_SUBJECT\", sort: 'locale' },\n { field: 'total', displayName: \"TXT_LBL_AMOUNT\", cellFilter: 'wbCurrencyFlt', width: '130px', align: 'right' },\n { field: 'paymentSum', displayName: \"TXT_LBL_PAYMENTS_SUM\", cellFilter: 'wbCurrencyFlt', width: '130px', align: 'right', smHide: true },\n { field: 'latest', displayName: \"TXT_LBL_VALID\", cellFilter: 'invoiceValid', width: '90px' }\n ],\n customCmds: [\n {\n text: 'TXT_MENU_PRINT_INVOICE',\n // hide: function () { return true; },\n command: function (row) { onPrintInvoice(row.invoiceID); }\n }],\n disabledField: 'notLatest',\n disabledAreSelectable: true\n };\n\n function onPrintInvoice(invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n var isActive = false;\n var loaded = false;\n $scope.parentID = null;\n $scope.relatedInvoices = [];\n\n $scope.$on('selectedDuePaymentChanged', function (e, data) {\n\n if (data) {\n if (data.parentID !== $scope.parentID || !loaded) {\n $scope.parentID = data.parentID;\n if (isActive) {\n $scope.relatedInvoices = invoiceSvc.getInvoiceEvidenceByUserAsync(data.parentID);\n loaded = true;\n } else {\n loaded = false;\n }\n }\n } else {\n $scope.relatedInvoices.length = 0;\n loaded = false;\n }\n });\n\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 3) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.parentID) {\n $scope.relatedInvoices = invoiceSvc.getInvoiceEvidenceByUserAsync($scope.parentID);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n\n}]);","'use strict';\n\nwbApp.controller('DuePaymentUserPaymentsCtrl', ['$scope', '$window', 'paymentsSvc', 'securitySvc',\nfunction ($scope, $window, paymentsSvc, securitySvc) {\n\n\n\n $scope.relatedGridFilterOptions = {\n filterText: \"\"\n };\n\n $scope.relatedGridOptions = {\n sortInfo: { fields: ['paymentDate'], directions: ['asc'] },\n columnDefs: [\n { field: 'semesterID', displayName: \"TXT_LBL_SEMESTER\", cellFilter: 'semester', width: '160px' },\n { field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'humanName', width: '160px' },\n { field: 'typeID', displayName: \"TXT_LBL_TYPE\", cellFilter: 'invoiceForType', width: '55px' },\n { field: 'subject', displayName: \"TXT_LBL_SUBJECT\", sort: 'locale' },\n { field: 'notes', displayName: \"TXT_NOTE\", sort: 'locale', smHide: true, mdHide: true },\n { field: 'value', displayName: \"TXT_LBL_AMOUNT\", cellFilter: 'wbCurrencyFlt', width: '100px', align: 'right' },\n { field: 'paymentTypeID', displayName: \"TXT_LBL_PAYMENT\", cellFilter: 'paymentType', width: '80px' },\n { field: 'paymentDate', displayName: \"TXT_LBL_DATE\", cellFilter: \"date:'shortDate'\", width: '70px' }\n ],\n dangerFn: function (row) { return row.value < 0; },\n customCmds: [\n {\n text: 'TXT_MENU_PRINT_RECEIPT',\n hide: function (row) {\n return row.paymentTypeID !== 1 || !securitySvc.isInRole('Payment.CashReceipt') || !securitySvc.isInRole('Reports');\n },\n command: function (row) { onPrintReceipt(row.paymentID); }\n },\n {\n text: 'TXT_MENU_PRINT_INVOICE',\n hide: function () { return !securitySvc.isInRole('Reports'); },\n command: function (row) { onPrintInvoice(row.invoiceID); }\n }]\n };\n\n\n function onPrintReceipt(paymentID) {\n if (securitySvc.isInRole('Payment.CashReceipt') && securitySvc.isInRole('Reports')) {\n $window.open('/Admin/Report/CashReceipt?PaymentID=' + paymentID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n }\n\n function onPrintInvoice(invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n var isActive = false;\n var loaded = false;\n $scope.parentID = null;\n $scope.relatedPayments = [];\n\n $scope.$on('selectedDuePaymentChanged', function (e, data) {\n\n if (data) {\n if (data.parentID !== $scope.parentID || !loaded) {\n $scope.parentID = data.parentID;\n if (isActive) {\n $scope.relatedPayments = paymentsSvc.getAllForUserAsync(data.parentID);\n loaded = true;\n } else {\n loaded = false;\n }\n }\n } else {\n $scope.relatedPayments.length = 0;\n loaded = false;\n }\n });\n\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.parentID) {\n $scope.relatedPayments = paymentsSvc.getAllForUserAsync($scope.parentID);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n \n}]);","wbApp.controller('OnlinePaymentConfigurationCtrl', ['$scope', '$modal', '$q', '$translate', 'onlinePaymentConfigurationSvc',\nfunction ($scope, $modal, $q, $translate, onlinePaymentConfigurationSvc) {\n\n $scope.onlinePaymentConfigurations = onlinePaymentConfigurationSvc.getAllAsync(true);\n\n $scope.gridSettings = {\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc' },\n {\n dataField: 'providerType',\n caption: $translate.instant('TXT_LBL_PROVIDER_TYPE'),\n dataType: 'number',\n width: '140px',\n lookup: {\n dataSource: {\n store: {\n type: 'array',\n data: [\n // { id: 0, name: 'Payeezy (Fio)' },\n { id: 1, name: 'Comgate' },\n { id: 2, name: 'GP webpay' }\n ],\n key: \"id\"\n }\n },\n valueExpr: 'id', \n displayExpr: 'name'\n }\n },\n { dataField: 'isTestConfig', caption: $translate.instant('TXT_LBL_IS_TESTING'), dataType: 'boolean', width: '80px' },\n ]\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.onlinePaymentConfigurations = onlinePaymentConfigurationSvc.getAllAsync(true);\n });\n\n $scope.onRowEdit = function (data) {\n $q.all([detailDialogPromise.$promise,\n onlinePaymentConfigurationSvc.getAsync(data.id).$promise]).then(function (d) {\n detailDialogPromise.$scope.model = angular.copy(d[1]);\n detailDialogPromise.$scope.onSave = function () {\n $scope.onlinePaymentConfigurations = onlinePaymentConfigurationSvc.getAllAsync(true);\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = onlinePaymentConfigurationSvc.createNew();\n detailDialogPromise.$scope.onSave = function () {\n $scope.onlinePaymentConfigurations = onlinePaymentConfigurationSvc.getAllAsync(true);\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n onlinePaymentConfigurationSvc.remove(data.id).$promise.then(function () {\n $scope.onlinePaymentConfigurations = onlinePaymentConfigurationSvc.getAllAsync(true);\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'finance/online-payment-configurations/online-payment-configurations-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('OnlinePaymentConfigurationDetailCtrl', ['$scope', 'onlinePaymentConfigurationSvc',\nfunction ($scope, onlinePaymentConfigurationSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n switch (model.providerType) {\n case 0:\n model.secret.merchantId = null;\n model.secret.merchantPassword = null;\n break;\n case 1:\n model.secret.clientCertificateBase64 = null;\n break;\n case 2:\n model.secret.merchantPassword = null;\n break;\n }\n\n if (!model.id) {\n onlinePaymentConfigurationSvc.insert(model).$promise.then(success, error);\n } else {\n onlinePaymentConfigurationSvc.update(model).$promise.then(success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n if ($scope.onSave) {\n $scope.onSave();\n }\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","wbApp.controller('OnlinePaymentsCtrl', ['$scope', '$modal', '$q', '$translate', '$filter', '$window',\r\n 'onlinePaymentsSvc', 'securitySvc', 'messageBoxSvc', 'gridSortSvc',\r\nfunction ($scope, $modal, $q, $translate, $filter, $window,\r\n onlinePaymentsSvc, securitySvc, messageBoxSvc, gridSortSvc) {\r\n\r\n $scope.gridSettings = {\r\n columns: [\r\n {\r\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '160px',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\r\n },\r\n {\r\n dataField: 'parentFullName', caption: $translate.instant(\"TXT_LBL_PARENT\"), dataType: 'string', width: '160px',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'operatorFullName') }\r\n },\r\n { dataField: 'productName', caption: $translate.instant('TXT_LBL_TYPE'), dataType: 'string', width: '55px' },\r\n { dataField: 'description', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string' },\r\n {\r\n dataField: 'state',\r\n caption: $translate.instant('TXT_LBL_STATE'),\r\n dataType: 'number',\r\n width: '80px',\r\n lookup: {\r\n dataSource: {\r\n store: {\r\n type: 'array',\r\n data: [\r\n { id: 0, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_NONE') },\r\n { id: 1, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_CREATED') },\r\n { id: 2, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_PENDING') },\r\n { id: 3, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_PAID') },\r\n { id: 4, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_REVERSED') },\r\n { id: 5, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_AUTOREVERSED') },\r\n { id: 6, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_CANCELLED') },\r\n { id: 7, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_DECLAINED') },\r\n { id: 8, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_ERROR') },\r\n { id: 9, name: $translate.instant('TXT_VAL_ONLINE_PAYMENT_STATUS_MANUALLY_REVERSED') }\r\n ],\r\n key: \"id\"\r\n }\r\n },\r\n valueExpr: 'id', \r\n displayExpr: 'name'\r\n }\r\n },\r\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\r\n {\r\n dataField: 'createdAt',\r\n caption: $translate.instant('TXT_LBL_DATE'),\r\n sortOrder: 'desc',\r\n dataType: 'date',\r\n format: 'shortDateShortTime',\r\n width: '130px'\r\n },\r\n { dataField: 'isTesting', caption: $translate.instant('TXT_LBL_IS_TESTING'), dataType: 'boolean', width: '80px' },\r\n ],\r\n shouldDisableDelete: function(row) { return !row.isTesting && row.state === 3 /* Paid */; },\r\n customCommands: [{\r\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\r\n isVisible: function (row) { \r\n return !!row.invoiceID && securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports'); \r\n },\r\n callback: function (row) { onPrintInvoice(row.invoiceID); }\r\n }, {\r\n text: $translate.instant('TXT_LBL_REVERSE_PAYMENT'),\r\n isVisible: function (row) {\r\n return securitySvc.isInRole('OnlinePayment.Update') &&\r\n moment(row.createdAt).isAfter(moment().subtract(90, 'days')) &&\r\n row.state === 3 && \r\n row.providerType === 0; // Payeezy\r\n },\r\n callback: function (row) { onReverseOnlinePayment(row.onlinePaymentID); }\r\n }, {\r\n text: $translate.instant('TXT_LBL_MANUALLY_REVERSE_PAYMENT_DELETE_PAYMENTS'),\r\n isVisible: function (row) {\r\n return securitySvc.isInRole('OnlinePayment.Update') &&\r\n moment(row.createdAt).isBefore(moment().subtract(2, 'hour')) &&\r\n (row.state === 2 || row.state === 3); // Pending || Paid\r\n },\r\n callback: function (row) { onManuallyReverseOnlinePayment(row.onlinePaymentID); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_CREATE_PAYMENT'),\r\n isVisible: function (row) {\r\n return securitySvc.isInRole('OnlinePayment.Update') &&\r\n !row.invoiceID && \r\n (row.state === 9); // ManuallyReversed\r\n },\r\n callback: function (row) { addPayment(row); }\r\n }, ]\r\n }\r\n\r\n function onPrintInvoice(invoiceID) {\r\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\r\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\r\n\r\n function onReverseOnlinePayment(onlinePaymentID) {\r\n\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_REVERSE',\r\n message: 'TXT_TEXT_CONFIRM_REVERSE',\r\n buttons: [{\r\n text: 'TXT_BTN_NO'\r\n }, {\r\n text: 'TXT_BTN_YES',\r\n callback: function () {\r\n onlinePaymentsSvc.reverse(onlinePaymentID);\r\n }\r\n }]\r\n });\r\n }\r\n\r\n function onManuallyReverseOnlinePayment(onlinePaymentID) {\r\n\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_MANUAL_REVERSE',\r\n message: 'TXT_TEXT_CONFIRM_MANUAL_REVERSE_DELETE_PAYMENTS',\r\n buttons: [{\r\n text: 'TXT_BTN_NO'\r\n }, {\r\n text: 'TXT_BTN_YES',\r\n callback: function () {\r\n onlinePaymentsSvc.manualReverse(onlinePaymentID);\r\n }\r\n }]\r\n });\r\n } \r\n\r\n $scope.fromDate = moment().startOf('month').toDate();\r\n $scope.toDate = moment().endOf('month').toDate();\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n refreshData($scope.fromDate, $scope.toDate, true);\r\n });\r\n\r\n function refreshData(fromDate, toDate, refresh) {\r\n $scope.onlinePayments = onlinePaymentsSvc.getAllByDateRange(fromDate, toDate, refresh);\r\n }\r\n\r\n refreshData($scope.fromDate, $scope.toDate, false);\r\n\r\n $scope.onFromDateChange = function (fromDate) {\r\n if (fromDate) {\r\n refreshData(fromDate, $scope.toDate);\r\n }\r\n }\r\n\r\n $scope.onToDateChange = function (toDate) {\r\n if (toDate) {\r\n refreshData($scope.fromDate, toDate);\r\n }\r\n }\r\n\r\n $scope.onRowSelected = function (data) {\r\n $scope.selectedOnlinePayment = data; \r\n }\r\n\r\n $scope.onRowEdit = function (data) {\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n onlinePaymentsSvc.remove(data);\r\n }\r\n\r\n var addPaymentPromise = $modal({\r\n templateUrl: 'finance/payments/payments-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n function addPayment(data) {\r\n \r\n // var parsingRegExp = new RegExp(\".*\\[(.*)\\s-\\s(.*)\\s-\\s(.*)]\", \"g\");\r\n // var match = parsingRegExp.exec(data.description);\r\n \r\n addPaymentPromise.$scope.isOnlinePayment = true;\r\n addPaymentPromise.$scope.onlineTransactionDetail = {\r\n text: data.description,\r\n transactionID: data.onlinePaymentID\r\n };\r\n addPaymentPromise.$scope.paymentDetail = {\r\n paymentID: 0,\r\n paymentTypeID: 4,\r\n amount: data.price,\r\n selectedDate: data.createdAt,\r\n };\r\n\r\n addPaymentPromise.$promise.then(function () {\r\n addPaymentPromise.$scope.detailError = null;\r\n addPaymentPromise.$scope.onSave = function () {\r\n refreshData($scope.fromDate, $scope.toDate, true);\r\n }\r\n\r\n addPaymentPromise.show();\r\n });\r\n } \r\n \r\n $scope.tabs = [\r\n {\r\n title: 'TXT_DETAIL',\r\n template: \"finance/online-payments/online-payments-tabs/detail.html\"\r\n }];\r\n}]);\r\n","'use strict';\n\nwbApp.controller('PaymentsCtrl', ['$scope', '$modal', '$q', '$window', '$translate', '$timeout', '$filter', 'semesterSvc',\n 'paymentsSvc', 'securitySvc', 'gridSortSvc', 'terminalSvc', 'accountingBookSvc', 'localStorageService', 'tenantSettingSvc',\n function ($scope, $modal, $q, $window, $translate, $timeout, $filter, semesterSvc,\n paymentsSvc, securitySvc, gridSortSvc, terminalSvc, accountingBookSvc, localStorageService, tenantSettingSvc) {\n\n $scope.semesterDataRange = 1; // 1 - semester, 2 - from to\n $scope.fromDate = moment().subtract(3, 'M').startOf('day').toDate();\n $scope.toDate = moment().startOf('day').toDate();\n\n if (localStorageService.isSupported) {\n $scope.semesterDataRange = localStorageService.get('semesterDataRange') || 1;\n }\n\n $scope.customFilter = { invoiceForType: [], terminal: [] };\n $scope.rawPayments = [];\n $scope.payments = [];\n\n $scope.accountingBooks = accountingBookSvc.getAllAsync();\n\n function preFilter() {\n $q.all([$scope.rawPayments.$promise, $scope.terminals.$promise, $scope.accountingBooks.$promise]).then(function () {\n var typeIDs = _.values($scope.customFilter.invoiceForType);\n var accountingBookIDs = _.values($scope.customFilter.accountingBooks);\n $scope.payments.length = 0;\n $scope.payments.push.apply($scope.payments,\n _.filter($scope.rawPayments, function (o) {\n var includesTypeID = true;\n if (typeIDs.length > 0) {\n includesTypeID = _.includes(typeIDs, o.typeID);\n }\n\n var includesTerminalID = true;\n if ($scope.customFilter.terminal.length > 0) {\n includesTerminalID = _.includes($scope.customFilter.terminal, o.terminalID);\n }\n\n var includesAccountBookID = true;\n if (accountingBookIDs.length > 0) {\n includesAccountBookID = _.includes(accountingBookIDs, o.accountingBookID);\n }\n\n return includesTypeID && includesTerminalID && includesAccountBookID;\n })\n );\n });\n }\n\n $scope.onDataRangeChanged = function () {\n if (localStorageService.isSupported) {\n localStorageService.set('semesterDataRange', $scope.semesterDataRange);\n }\n\n if ($scope.semesterID != null) {\n loadData();\n }\n\n if ($scope.gridSettings.gridInstance) {\n if ($scope.semesterDataRange === 1) {\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", false);\n } else {\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", true);\n }\n }\n }\n\n function loadData() {\n if ($scope.semesterDataRange === 1) {\n $scope.rawPayments = paymentsSvc.getAllForSemester($scope.semesterID, true);\n } else {\n $scope.rawPayments = paymentsSvc.getAllForDateRange(\n $scope.fromDate, $scope.toDate, true);\n }\n preFilter();\n }\n\n $scope.terminals = terminalSvc.getAllAsync();\n\n $scope.icons = [{\n value: 1,\n label: $translate.instant('TXT_LAB_COURSE')\n }, {\n value: 2,\n label: $translate.instant('TXT_LAB_ACTION_SINGULAR')\n }, {\n value: 3,\n label: $translate.instant('TXT_LAB_KINDERGARTEN')\n }, {\n value: 4,\n label: $translate.instant('TXT_LAB_RESERVATION')\n }];\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID) {\n loadData();\n $scope.selectedPayment = null;\n }\n });\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n $scope.gridSettings = {\n name: 'payments',\n keyExpr: 'paymentID',\n shouldShowColumnChooser: true,\n exportVisibleColumnsOnly: true,\n allowColumnReordering: true,\n columns: [\n {\n name: 'semesterColumn',\n dataField: 'semesterID',\n caption: $translate.instant('TXT_LBL_SEMESTER'),\n dataType: 'string',\n width: '120px',\n calculateCellValue: function (rowData) {\n return $filter('semester')(rowData.semesterID);\n },\n visible: $scope.semesterDataRange === 2\n },\n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\n },\n {\n dataField: 'operatorFullName', caption: $translate.instant(\"TXT_LBL_PARENT\"), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'operatorFullName') }\n },\n {\n dataField: 'typeID',\n caption: $translate.instant(\"TXT_LBL_TYPE\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('invoiceForType')(rowData.typeID);\n },\n width: '55px'\n },\n { dataField: 'subject', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string' },\n { dataField: 'notes', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\n { dataField: 'value', caption: $translate.instant('TXT_LBL_AMOUNT'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n {\n dataField: 'paymentTypeID',\n caption: $translate.instant(\"TXT_LBL_PAYMENT\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('paymentType')(rowData.paymentTypeID);\n },\n width: '70px'\n },\n { dataField: 'paymentDate', caption: $translate.instant('TXT_LBL_DATE'), dataType: 'date', width: '90px', sortOrder: 'desc' },\n { dataField: 'invoiceNo', caption: $translate.instant('TXT_LBL_INVOICE_NO'), dataType: 'string', width: '90px', visible: false },\n {\n dataField: 'terminalID',\n caption: $translate.instant('TXT_LBL_TERMINAL'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('terminal')(rowData.terminalID);\n },\n width: '150px',\n visible: false\n },\n {\n dataField: 'email',\n caption: $translate.instant('TXT_LBL_EMAIL'),\n dataType: 'string',\n width: '180px',\n visible: false\n },\n {\n dataField: 'accountingBookID',\n caption: $translate.instant('TXT_LBL_ACCOUNTING_BOOK'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('accountingBook')(rowData.accountingBookID);\n },\n width: '180px',\n visible: false\n },\n ],\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.accountingBookTransactionID || data.paymentTypeID === 4) {\n e.rowElement.addClass('text-muted');\n }\n if (data.value < 0 && !data.accountingBookTransactionID) {\n e.rowElement.addClass('text-danger');\n }\n }\n },\n shouldDisableEdit: function (row) { return !!row.accountingBookTransactionID || (row.paymentTypeID === 4); },\n customCommands: [{\n text: $translate.instant('TXT_MENU_PRINT_RECEIPT'),\n isVisible: function (row) {\n return row.paymentTypeID === 1 && securitySvc.isInRole('Payment.CashReceipt') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintReceipt(row.paymentID, 'pdf'); }\n },\n {\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\n isVisible: function () { return securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports'); },\n callback: function (row) { onPrintInvoice(row.invoiceID); }\n },\n {\n text: $translate.instant('TXT_MENU_PRINT_SALES_REPORT'),\n isVisible: function () { return securitySvc.isInRole('Payment.SalesReport') && securitySvc.isInRole('Reports'); },\n callback: function (row) { onPrintSalesReport(); }\n },\n {\n text: $translate.instant('TXT_MENU_PRINT_PAYMENT_CONFIRMATION_REPORT'),\n isVisible: function () { return securitySvc.isInRole('Payment.ConfirmationReport') && securitySvc.isInRole('Reports'); },\n callback: function (row) { onPrintConfirmationReport(row.paymentID, 'pdf'); }\n },\n {\n text: $translate.instant('TXT_MENU_EXPORT_RECEIPT_XLS'),\n isVisible: function (row) {\n return row.paymentTypeID === 1 && securitySvc.isInRole('Payment.CashReceipt') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintReceipt(row.paymentID, 'xls'); }\n },\n {\n text: $translate.instant('TXT_MENU_EXPORT_PAYMENT_CONFIRMATION_REPORT_XLS'),\n isVisible: function () { return securitySvc.isInRole('Payment.ConfirmationReport') && securitySvc.isInRole('Reports'); },\n callback: function (row) { onPrintConfirmationReport(row.paymentID, 'xls'); }\n },\n {\n text: \"(\" + $translate.instant('TXT_LBL_SUPPORT') + \") \" + $translate.instant('TXT_ISSUE_TAX_DOCUMENT_IF_NEEDED'),\n isVisible: function () { return tenantSettingSvc.settings.createTaxDocuments && securitySvc.isInRole('Support'); },\n callback: function (row) { onIssueTaxDocumentIfNeeded(row.paymentID); }\n }]\n }\n\n function onPrintReceipt(paymentID, format) {\n if (securitySvc.isInRole('Payment.CashReceipt') && securitySvc.isInRole('Reports')) {\n\n if (format == 'xls') {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n else {\n $window.open('/Admin/Report/CashReceipt?PaymentID=' + paymentID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n }\n }\n\n function onPrintInvoice(invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onPrintConfirmationReport(paymentID, format) {\n if (securitySvc.isInRole('Payment.ConfirmationReport') && securitySvc.isInRole('Reports')) {\n\n if (format == 'xls') {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n else {\n $window.open('/Admin/Report/PaymentConfirmation?PaymentID=' + paymentID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n }\n }\n \n function onIssueTaxDocumentIfNeeded(paymentID) {\n paymentsSvc.issueTaxDocumentIfNeeded(paymentID);\n }\n\n function onPrintSalesReport() {\n salesReportParamsPromise.$promise.then(function () { \n salesReportParamsPromise.show();\n });\n }\n\n\n $q.all([semesterSvc.getDefaultAsync()])\n .then(function (data) {\n if (data[0]) {\n $scope.semesterID = data[0].id;\n }\n\n if ($scope.semesterID) {\n // get invoices\n loadData();\n }\n\n });\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n loadData();\n $scope.selectedPayment = null;\n }\n }\n\n $scope.filterSummaryPaymentTypes = {\n type: 'PieChart', data: [\n ['Component', 'Value'],\n [$translate.instant('TXT_VAL_PAYMENT_TYPE_BANK_TRANSFER'), 0],\n [$translate.instant('TXT_VAL_PAYMENT_TYPE_CASH'), 0],\n [$translate.instant('TXT_VAL_PAYMENT_TYPE_CREDIT_CARD'), 0],\n [$translate.instant('TXT_VAL_PAYMENT_TYPE_BENEFIT_PLUS'), 0],\n [$translate.instant('TXT_VAL_PAYMENT_TYPE_ONLINE'), 0]\n ], options: {\n displayExactValues: true,\n chartArea: { top: '0px', left: '0px', width: '75%', height: '75%' },\n //pieSliceText: 'label',\n legend: { position: 'right' },\n }\n };\n\n $scope.onFilterApplied = function (filteredRows) {\n $scope.summary = paymentsSvc.calculateSummary(filteredRows);\n $timeout(function () {\n $scope.filterSummaryPaymentTypes.data[1][1] = $scope.summary.paymentTypes[0].value;\n $scope.filterSummaryPaymentTypes.data[2][1] = $scope.summary.paymentTypes[1].value;\n $scope.filterSummaryPaymentTypes.data[3][1] = $scope.summary.paymentTypes[2].value;\n $scope.filterSummaryPaymentTypes.data[4][1] = $scope.summary.paymentTypes[3].value;\n $scope.filterSummaryPaymentTypes.data[5][1] = $scope.summary.paymentTypes[4].value;\n });\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"finance/payments/payments-tabs/detail.html\"\n }, {\n title: 'TXT_FILTER_SUMMARY',\n template: \"finance/payments/payments-tabs/filter-summary.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n if (newValue !== oldValue && newValue === 1) {\n // Reset google chart to fix wrong positioning\n var orig = $scope.filterSummaryPaymentTypes.data[1][1];\n $scope.filterSummaryPaymentTypes.data[1][1] = 1;\n $timeout(function () {\n $scope.filterSummaryPaymentTypes.data[1][1] = orig;\n });\n }\n // $scope.$broadcast('activeTabChanged', { activeTab: newValue });\n });\n\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$scope.paymentDetail = {\n paymentID: 0\n };\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.$scope.onSave = function (payment) {\n loadData();\n $q.all([$scope.rawPayments.$promise, $scope.terminals.$promise, $scope.accountingBooks.$promise]).then(function () {\n if (!!payment && !!$scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.selectRows([payment.paymentID], false);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedPayment = data;\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$scope.paymentDetail = {\n paymentID: data.paymentID,\n invoiceForType: data.typeID,\n invoiceID: data.invoiceID,\n studentID: data.studentID,\n semesterID: data.semesterID,\n // This is wrong!! typeReferenceID for Courses And Actions should contain CourseRegistrationID\n // The same wrong code is in PaymentService.UpdateAsync\n // The problem is in wbPaymentEdit\n courseID: data.typeID !== 3 ? data.typeReferenceID : null,\n activityID: null,\n activityReconciliationID: data.typeID === 3 ? data.typeReferenceID : null,\n paymentTypeID: data.paymentTypeID,\n amount: data.value,\n selectedDate: data.paymentDate,\n notes: data.notes,\n cashReceiptNo: data.cashReceiptNo\n };\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.$scope.onSave = function (payment) {\n loadData();\n $q.all([$scope.rawPayments.$promise, $scope.terminals.$promise, $scope.accountingBooks.$promise]).then(function () {\n if (!!payment && !!$scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.selectRows([payment.paymentID], false);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n paymentsSvc.remove(data, function () {\n preFilter();\n });\n }\n\n $scope.onPaymentDetailSave = function (paymentDetail) {\n\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'finance/payments/payments-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var salesReportParamsPromise = $modal({\n templateUrl: 'finance/payments/sales-report-params.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('PaymentsDetailCtrl', ['$scope', '$window', 'paymentsSvc', 'messageBoxSvc', 'securitySvc', 'terminalSvc', 'tenantSettingSvc',\nfunction ($scope, $window, paymentsSvc, messageBoxSvc, securitySvc, terminalSvc, tenantSettingSvc) {\n $scope.payment = paymentsSvc.initializePaymentEditModel($scope.paymentDetail, $scope.isAddBankPayment, $scope.isAddDuePayment, $scope.isOnlinePayment);\n\n $scope.onClearBtnClick = function (payment) {\n paymentsSvc.clearPaymentEditModel(payment, $scope.isAddBankPayment, $scope.isAddDuePayment, $scope.isOnlinePayment);\n }\n\n $scope.terminal = terminalSvc.getTerminalSetting();\n\n $scope.terminalChanged = function (terminal) {\n terminalSvc.setTerminalSetting(terminal);\n }\n\n $scope.isSaving = false;\n\n $scope.onSaveBtnClick = function (payment) {\n\n if ($scope.isSaving)\n {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!payment.paymentID) {\n messageBoxSvc.showConfirmClientNotification({\n userSetting: ['confimNotificationCourseRegistrationPayment'],\n showSendSmsNotification: false,\n callback: function (notificationConfig) {\n savePayment(notificationConfig.sendEmailNotification);\n }\n });\n } else {\n savePayment(false);\n }\n }\n\n function savePayment(sendNotification) {\n var model = $scope.payment;\n\n if ($scope.isAddBankPayment) {\n paymentsSvc.savePaymentEditModel(model, sendNotification, success, error,\n $scope.bankTransactionDetail.transactionID, $scope.bankTransactionDetail.accountingBookID, false);\n } else if ($scope.isOnlinePayment) {\n paymentsSvc.savePaymentEditModel(model, sendNotification, success, error,\n $scope.onlineTransactionDetail.transactionID, 0,true); \n } else {\n paymentsSvc.savePaymentEditModel(model, sendNotification, success, error);\n }\n\n function success(data) {\n if (model.paymentTypeID === 1 && securitySvc.isInRole('Payment.CashReceipt') && securitySvc.isInRole('Reports')) { // Cash\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_PRINT',\n message: 'TXT_CONFIRM_PRINT_CASH_RECEIPT_MESSAGE',\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: function () { finalizePayment(data); }\n }, {\n text: 'TXT_BTN_PRINT',\n callback: function () { finalizePayment(data); onPrintReceipt(data.paymentID); }\n }]\n });\n } else if (model.paymentTypeID === 2 && securitySvc.isInRole('Payment.ConfirmationReport') && securitySvc.isInRole('Reports') &&\n tenantSettingSvc.settings.autoPaymentConfirmationPrintForCardPayments) { // Card\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_PRINT',\n message: 'TXT_CONFIRM_PRINT_PAYMENT_EVIDENCE_MESSAGE',\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: function () { finalizePayment(data); }\n }, {\n text: 'TXT_BTN_PRINT',\n callback: function () { finalizePayment(data); onPrintPaymentEvidence(data.paymentID); }\n }]\n });\n } else { \n finalizePayment(data);\n }\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n function onPrintReceipt(paymentID) {\n $window.open('/Admin/Report/CashReceipt?PaymentID=' + paymentID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onPrintPaymentEvidence(paymentID) {\n $window.open('/Admin/Report/PaymentConfirmation?PaymentID=' + paymentID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function finalizePayment(payment) {\n $scope.onClearBtnClick($scope.payment);\n $scope.$hide();\n $scope.isSaving = false;\n if ($scope.onSave) {\n $scope.onSave(payment);\n }\n }\n\n\n\n $scope.isPaymentValid = function (payment) {\n if ($scope.terminal.isRequired && !$scope.terminal.terminalID) {\n return false;\n }\n\n return paymentsSvc.isPaymentEditModelValid(payment);\n }\n\n}]);","wbApp.controller('PaymentsSalesRepotParamsCtrl', ['$scope', '$window', 'terminalSvc',\nfunction ($scope, $window, terminalSvc) {\n\n $scope.terminalSetting = terminalSvc.getTerminalSetting();\n\n $scope.model = {\r\n startDate: moment().toDate(),\r\n endDate: moment().toDate(),\r\n paymentTypeID: 1, // Cash\r\n terminalID: null\r\n };\n\n $scope.terminalSetting.$promise.then(function (s) {\r\n $scope.model.terminalID = s.terminalID;\r\n });\n\n\n $scope.onDetailSave = function () {\r\n\r\n if ($scope.isSaving) {\r\n return;\r\n }\r\n\r\n $scope.isSaving = true;\r\n\r\n var fromDate = moment($scope.model.startDate).startOf('day').toDate();\r\n var toDate = moment($scope.model.endDate).endOf('day').toDate();\r\n\r\n $scope.$hide();\r\n\r\n var terminalIDparam = !!$scope.model.terminalID ? '&terminalID=' + $scope.model.terminalID : '';\r\n\r\n $window.open('/Admin/Report/Sales' + \n '?startDate=' + fromDate.toJSON() + \n '&endDate=' + toDate.toJSON() + \n terminalIDparam +\n '&paymentTypeID=' + $scope.model.paymentTypeID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('TaxDocumentsCtrl', ['$scope', '$q', '$window', '$translate', '$filter', 'semesterSvc',\n 'taxDocumentsSvc', 'accountingBookSvc', 'securitySvc', 'gridSortSvc', 'messageBoxSvc', 'notificationSvc',\nfunction ($scope, $q, $window, $translate, $filter, semesterSvc,\n taxDocumentsSvc, accountingBookSvc, securitySvc, gridSortSvc, messageBoxSvc, notificationSvc) {\n\n $scope.customFilter = { accountingBooks: [] };\n $scope.rawTaxDocuments = [];\n $scope.taxDocuments = [];\n $scope.filteredRows = [];\n\n $scope.accountingBooks = accountingBookSvc.getAllAsync();\n\n function preFilter() {\n $q.all([$scope.rawTaxDocuments.$promise, $scope.accountingBooks.$promise]).then(function () {\n var accountingBookIDs = _.values($scope.customFilter.accountingBooks);\n $scope.taxDocuments.length = 0;\n $scope.taxDocuments.push.apply($scope.taxDocuments,\n _.filter($scope.rawTaxDocuments, function (o) {\n \n if (accountingBookIDs.length > 0) {\n return _.includes(accountingBookIDs, o.accountingBookID);\n }\n\n return true;\n })\n );\n });\n }\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n $scope.gridSettings = {\n name: 'taxDocuments',\n columns: [\n { dataField: 'taxDocumentNo', caption: $translate.instant('TXT_LBL_TAX_DOCUMENT_NO'), dataType: 'number', width: '100px', sortOrder: 'dsc' },\n { dataField: 'invoiceNo', caption: $translate.instant('TXT_LBL_INVOICE_NO'), dataType: 'number', width: '100px' },\n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\n },\n {\n dataField: 'operatorFullName', caption: $translate.instant(\"TXT_LBL_PARENT\"), dataType: 'string', width: '160px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'operatorFullName') }\n },\n { dataField: 'subject', caption: $translate.instant('TXT_LBL_SUBJECT'), dataType: 'string' },\n { dataField: 'issueDate', caption: $translate.instant('TXT_LBL_INVOICE_DATE'), dataType: 'date', width: '90px' },\n { dataField: 'total', caption: $translate.instant('TXT_LBL_AMOUNT'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n { dataField: 'accountingBookID', caption: $translate.instant('TXT_LBL_ACCOUNTING_BOOK'), dataType: 'number', visible: false },\n ],\n //onRowPrepared: function (e) {\n // if (e.rowType == \"data\") {\n // var data = e.component.getKeyByRowIndex(e.rowIndex);\n // if (data.notLatest) {\n // e.rowElement.addClass('text-muted');\n // }\n // }\n //}, \n customCommands: [{\n text: $translate.instant('TXT_MENU_PRINT_TAX_DOCUMENT'),\n isVisible: function (row) {\n return securitySvc.isInRole('TaxDocument.Print') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintTaxDocument(row.taxDocumentID, 'pdf'); }\n },\n {\n text: $translate.instant('TXT_MENU_PRINT_TAX_DOCUMENT_ALL'),\n isVisible: function (row) {\n return securitySvc.isInRole('TaxDocument.Print') && securitySvc.isInRole('Reports');\n },\n callback: function (row, allRows) { onPrintTaxDocumentAll(row, allRows); }\n },\n {\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\n isVisible: function (row) {\n return securitySvc.isInRole('CourseRegistration.PrintInvoice') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintInvoice(row.invoiceID); }\n }, {\n text: $translate.instant('TXT_MENU_STORMWARE_EXPORT'),\n callback: function (row, allRows) { onStormwareExportRequested(row, allRows); }\n }, {\n text: $translate.instant('TXT_MENU_MONEYS3_EXPORT'),\n callback: function (row, allRows) { onMoneyS3ExportRequested(row, allRows); }\n }, {\n text: $translate.instant('TXT_MENU_CSV_EXPORT'),\n callback: function (row, allRows) { onCsvExportRequested(row, allRows); }\n }, {\n text: $translate.instant('TXT_EXPORT_TAX_DOCUMENT_TO_EXCEL'),\n isVisible: function (row) {\n return securitySvc.isInRole('TaxDocument.Print') && securitySvc.isInRole('Reports');\n },\n callback: function (row) { onPrintTaxDocument(row.taxDocumentID, 'xls'); }\n }]\n }\n\n function onPrintTaxDocumentAll(row) {\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICES_PRINT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_PRINT').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n var taxDocumentsIDs = encodeURIComponent(JSON.stringify(_.map($scope.filteredRows, 'taxDocumentID')));\n\n $window.open('/Admin/Report/TaxDocumentAll?taxDocumentsIDs=' + taxDocumentsIDs,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n\n $scope.onFilterApplied = function (filteredRows) {\n $scope.filteredRows = filteredRows;\n }\n\n function onPrintInvoice(invoiceID) {\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n function onPrintTaxDocument(taxDocumentID, format) {\n\n if (format == 'xls') {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n\n }\n else {\n $window.open('/Admin/Report/TaxDocument?TaxDocumentID=' + taxDocumentID,\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n }\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID) {\n $scope.rawTaxDocuments = taxDocumentsSvc.GetBriefBySemester($scope.semesterID);\n $scope.selectedTaxDocument = null;\n preFilter();\n }\n });\n\n $q.all([semesterSvc.getDefaultAsync()])\n .then(function (data) {\n if (data[0]) {\n $scope.semesterID = data[0].id;\n }\n\n // get taxDocuemnts\n $scope.rawTaxDocuments = taxDocumentsSvc.GetBriefBySemester($scope.semesterID);\n preFilter(); \n });\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n // get taxDocuemnts\n $scope.rawTaxDocuments = taxDocumentsSvc.GetBriefBySemester(semesterID);\n $scope.selectedTaxDocument = null;\n preFilter();\n }\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedTaxDocument = data;\n }\n\n function onStormwareExportRequested(row) {\n\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_EXPORT_TD').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n function onYesClicked() {\n taxDocumentsSvc.getStormwareTaxDocumentExport(row.accountingBookID, _.map($scope.filteredRows, 'taxDocumentID'),\n onStormwareExportGenerated,\n function (error) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_SERVER_ERROR'),\n notificationSvc.translateError(error));\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_CONFIRM_TAX_DOCUMENT_EXPORT_GENERATION').f($scope.filteredRows.length),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked\n }]\n });\n }\n\n\n function onMoneyS3ExportRequested(row)\n {\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_EXPORT_TD').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n function onYesClicked() {\n taxDocumentsSvc.getMoneyS3TaxDocumentExport(row.accountingBookID, _.map($scope.filteredRows, 'taxDocumentID'),\n onStormwareExportGenerated,\n function (error) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_SERVER_ERROR'),\n notificationSvc.translateError(error));\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_CONFIRM_TAX_DOCUMENT_EXPORT_GENERATION').f($scope.filteredRows.length),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked\n }]\n });\n }\n\n function onCsvExportRequested(row)\n {\n var uniqueByAccountingBooks = _.uniqBy($scope.filteredRows, 'accountingBookID');\n if (uniqueByAccountingBooks.length > 1) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_TOO_MANY_ACCOUNTING_BOOKS_IN_EXPORT_TD').f(uniqueByAccountingBooks.length),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n function onYesClicked() {\n taxDocumentsSvc.getCsvTaxDocumentExport(row.accountingBookID, _.map($scope.filteredRows, 'taxDocumentID'),\n onStormwareExportGenerated,\n function (error) {\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_SERVER_ERROR'),\n notificationSvc.translateError(error));\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_INVOICE_EXPORT_GENERATION',\n message: $translate.instant('TXT_TEXT_CONFIRM_TAX_DOCUMENT_EXPORT_GENERATION').f($scope.filteredRows.length),\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: onYesClicked\n }]\n });\n }\n\n function onStormwareExportGenerated(data) {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n\n}]);\n","'use strict';\n\nwbApp.directive('wbBankImportTypeCombo', ['$timeout', '$translate', '$window',\n function ($timeout, $translate, $window) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n console.log($window.location.origin);\n \n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_VAL_IMPORT_TYPE_NONE' },\n { id: 1, text: 'TXT_VAL_IMPORT_TYPE_FIO_AUTOMATIC' },\n { id: 2, text: 'TXT_VAL_IMPORT_TYPE_RAIFFEISENBANK_AUTOMATIC' },\n { id: 3, text: 'TXT_VAL_IMPORT_TYPE_PSD2' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbOnlinePaymentTypeCombo', ['$timeout',\n function ($timeout) {\n function formatResult(data) {\n if (!data) { return; }\n return data.text;\n }\n\n function formatSelection(data) {\n return data.text;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n // { id: 0, text: 'Payeezy (Fio)' },\n { id: 1, text: 'Comgate' },\n { id: 2, text: 'GP webpay' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbYearCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: '^ngModel',\n scope: {\n model: '=ngModel',\n maxYear: '='\n },\n link: function (scope, elm, attrs, controller) {\n\n var data = [{ id: 2017, text: '2017' },\n { id: 2018, text: '2018' },\n { id: 2019, text: '2019' },\n { id: 2020, text: '2020' },\n { id: 2021, text: '2021' },\n { id: 2022, text: '2022' },\n { id: 2023, text: '2023' },\n { id: 2024, text: '2024' },\n { id: 2025, text: '2025' },\n { id: 2026, text: '2026' },\n { id: 2027, text: '2027' },\n { id: 2028, text: '2028' }];\n\n if (!!scope.maxYear) {\n data = _.filter(data, function (y) { return y.id <= scope.maxYear });\n }\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: data\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"2018\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.filter('invoiceValid', ['$translate', function ($translate) {\n return function (input) {\n\n if (input === null || input === undefined) {\n return '';\n }\n\n return input\n ? $translate.instant('TXT_INVOICE_VALID')\n : $translate.instant('TXT_INVOICE_CANCEL');\n }\n}]);","wbApp.factory('bankSvc', ['$resource', 'repositorySvc', '$q',\n function ($resource, repositorySvc, $q) {\n\n var Bank = $resource('/Api/Bank/GetAll', {}, {\n 'query': { method: 'GET', isArray: true },\n 'getAllByAccountingBookID': { method: 'GET', isArray: true, url: '/Api/Bank/GetAllByAccountingBookID' },\n 'getUnimportantByAccountingBookID': { method: 'GET', isArray: true, url: '/Api/Bank/GetUnimportantByAccountingBookID' },\n 'requestPairing': { method: 'POST', isArray: false, url: '/Api/Bank/RequestPairing' },\n 'removePairing': { method: 'POST', isArray: false, url: '/Api/Bank/RemovePairing' },\n 'markAsUnimportant': { method: 'POST', isArray: false, url: '/Api/Bank/MarkAsUnimportant' },\n 'restoreUnimportant': { method: 'POST', isArray: false, url: '/Api/Bank/RestoreUnimportant' },\n\n });\n\n function getAllByAccountingBookID(accountingBookID, fromDate, toDate) {\n return repositorySvc.customGet('getAllByAccountingBookID', Bank, {\n accountingBookID: accountingBookID,\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getUnimportantByAccountingBookID(accountingBookID, fromDate, toDate) {\n return repositorySvc.customGet('getUnimportantByAccountingBookID', Bank, {\n accountingBookID: accountingBookID,\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function requestPairing(accountingBookID) {\n return $q(function (resolve, reject) {\n repositorySvc.customPostWithParams(\n 'requestPairing',\n Bank, {\n accountingBookID: accountingBookID \n },\n null,\n resolve,\n reject\n )\n });\n }\n\n function removePairing(accountingBookID, transactionID, removePayment) {\n return $q(function (resolve, reject) {\n repositorySvc.customPost(\n 'removePairing',\n Bank, {\n accountingBookID: accountingBookID,\n transactionID: transactionID,\n removePayment: removePayment\n },\n resolve,\n reject\n )\n });\n }\n\n function markAsUnimportant(accountingBookID, transactionID) {\n return $q(function (resolve, reject) {\n repositorySvc.customPost(\n 'markAsUnimportant',\n Bank, {\n accountingBookID: accountingBookID,\n transactionID: transactionID\n },\n resolve,\n reject\n )\n });\n }\n\n function restoreUnimportant(accountingBookID, accountingBookTransactionIDs) {\n return $q(function (resolve, reject) {\n repositorySvc.customPost(\n 'restoreUnimportant',\n Bank, {\n accountingBookID: accountingBookID,\n accountingBookTransactionIDs: accountingBookTransactionIDs\n },\n resolve,\n reject\n )\n });\n }\n\n return {\n getAllByAccountingBookID: getAllByAccountingBookID,\n getUnimportantByAccountingBookID: getUnimportantByAccountingBookID,\n requestPairing: requestPairing,\n removePairing: removePairing,\n markAsUnimportant: markAsUnimportant,\n restoreUnimportant: restoreUnimportant\n }\n }]);","wbApp.factory('compensationsSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n\n var Compensations = $resource('/Api/CompensationSummary/GetAll', {}, {\n 'query': { method: 'GET', isArray: true },\n 'getDetail': { method: 'GET', isArray: true, url: '/Api/CompensationSummary/GetDetail' },\n });\n\n function getAllAsync(semesterID) {\n return repositorySvc.get(Compensations, { semesterID: semesterID });\n }\n\n function getDetailAsync(semesterID, studentID) {\n return repositorySvc.customGet('getDetail', Compensations, {\n semesterID: semesterID,\n studentID: studentID\n });\n }\n\n return {\n getAllAsync: getAllAsync,\n getDetailAsync: getDetailAsync\n }\n }]);","wbApp.factory('taxDocumentsSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n\n var TaxDocuments = $resource('/Api/TaxDocuments/GetBriefBySemester', {}, {\n 'query': { method: 'GET', isArray: true },\n 'getStormwareTaxDocumentExport': { method: 'POST', url: '/Api/TaxDocuments/GetStormwareTaxDocumentExport' },\n 'getMoneyS3TaxDocumentExport': { method: 'POST', url: '/Api/TaxDocuments/GetMoneyS3TaxDocumentExport' },\n 'getCsvTaxDocumentExport': { method: 'POST', url: '/Api/TaxDocuments/GetCsvTaxDocumentExport' },\n });\n\n function GetBriefBySemester(semesterID) {\n return repositorySvc.get(TaxDocuments, { semesterID: semesterID });\n }\n\n function getStormwareTaxDocumentExport(accountingBookID, taxDocumentIDs, success, error) {\n return repositorySvc.customPost('getStormwareTaxDocumentExport', TaxDocuments, {\n accountingBookID: accountingBookID,\n taxDocumentIDs: taxDocumentIDs\n },\n success,\n error);\n }\n\n function getMoneyS3TaxDocumentExport(accountingBookID, taxDocumentIDs, success, error) {\n return repositorySvc.customPost('getMoneyS3TaxDocumentExport', TaxDocuments, {\n accountingBookID: accountingBookID,\n taxDocumentIDs: taxDocumentIDs\n },\n success,\n error);\n }\n\n function getCsvTaxDocumentExport(accountingBookID, taxDocumentIDs, success, error) {\n return repositorySvc.customPost('getCsvTaxDocumentExport', TaxDocuments, {\n accountingBookID: accountingBookID,\n taxDocumentIDs: taxDocumentIDs\n },\n success,\n error);\n }\n\n return {\n GetBriefBySemester: GetBriefBySemester,\n getStormwareTaxDocumentExport: getStormwareTaxDocumentExport,\n getMoneyS3TaxDocumentExport: getMoneyS3TaxDocumentExport,\n getCsvTaxDocumentExport: getCsvTaxDocumentExport\n }\n }]);","'use strict';\n\nwbApp.controller('FranchisesAttendanceSummaryCtrl', ['$scope', 'franchiseSvc',\nfunction ($scope, franchiseSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.fromDate = moment().startOf('month').toDate();\n $scope.toDate = moment().endOf('month').toDate();\n\n $scope.onDateRangeChanged = function () {\n $scope.attendanceSummary = franchiseSvc.getAttendanceSummaryAsync($scope.fromDate, $scope.toDate);\n }\n\n $scope.attendanceSummary = franchiseSvc.getAttendanceSummaryAsync($scope.fromDate, $scope.toDate);\n\n $scope.gridOptions = {\n sortInfo: { fields: ['tenantName'], directions: ['dsc'] },\n noCommandColumn: true,\n columnDefs: [\n { field: 'franchiseSubjectName', displayName: \"TXT_LBL_SUBJECT\", sort: 'locale' },\n { field: 'tenantName', displayName: \"TXT_LBL_PARTNER\", sort: 'locale', width: \"200px\" },\n { field: 'employeeFullName', displayName: \"TXT_LBL_EMPLOYEE\", sort: 'locale', width: \"200px\" },\n { field: 'noOFCredits', displayName: \"TXT_LBL_NO_OF_CREDITS\", width: \"120px\", align: 'right' }\n ]\n };\n\n //$scope.franchises = franchiseSvc.getAllAsync(true);\n}]);","'use strict';\n\nwbApp.controller('FranchisesCtrl', ['$scope', 'franchiseSvc', 'tenantSettingSvc',\nfunction ($scope, franchiseSvc, tenantSettingSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.requireTeacherFranchiseLicenses = tenantSettingSvc.settings.requireTeacherFranchiseLicenses;\n\n if ($scope.requireTeacherFranchiseLicenses) {\n $scope.gridOptions = {\r\n sortInfo: { fields: ['franchiseName'], directions: ['dsc'] },\n noCommandColumn: true,\n columnDefs: [\n { field: 'franchiseName', displayName: \"TXT_LBL_FRANCHISE\", sort: 'locale' },\n { field: 'noOfTeachers', displayName: \"TXT_LBL_NO_OF_TEACHERS\", width: \"90px\" },\n { field: 'noOfInActiveTeachers', displayName: \"TXT_LBL_NO_OF_INACTIVE_TEACHERS\", width: \"90px\" },\n { field: 'noOfTeachersWithoutLicense', displayName: \"TXT_LBL_NO_OF_TEACHERS_WITHOUT_LICENSE\", width: \"90px\" }\n ]\r\n };\r\n } else {\r\n $scope.gridOptions = {\r\n sortInfo: { fields: ['franchiseName'], directions: ['dsc'] },\n noCommandColumn: true,\n columnDefs: [\n { field: 'franchiseName', displayName: \"TXT_LBL_FRANCHISE\", sort: 'locale' },\n { field: 'noOfTeachers', displayName: \"TXT_LBL_NO_OF_TEACHERS\", width: \"90px\" },\n { field: 'noOfInActiveTeachers', displayName: \"TXT_LBL_NO_OF_INACTIVE_TEACHERS\", width: \"90px\" } \n ]\r\n };\r\n }\n\n $scope.franchises = franchiseSvc.getAllAsync(true);\n\n $scope.tabs = [\n {\n title: 'TXT_FRANCHISES_EMPLOYEES',\n template: \"franchise/franchises-tabs/employees.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.onRowSelected = function (data) {\n $scope.selectedFranchise = data;\n $scope.$broadcast('franchiseSelectionChanged', $scope.selectedFranchise);\n }\n\n $scope.$on('franchiseEmployeeUpdated', function (e, employee) {\n var newData = franchiseSvc.getAllAsync(true);\n newData.$promise.then(function (data) {\n var newFranchise = _.find(data, { franchiseTenantAlias: $scope.selectedFranchise.franchiseTenantAlias });\n if (newFranchise) {\n angular.extend($scope.selectedFranchise, newFranchise);\n } else {\n $scope.franchises = data;\n }\n });\n });\n\n //$scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n // $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n //});\n}]);","wbApp.controller('FranchisesEmployeesCtrl', ['$scope', '$modal', 'franchiseSvc', 'tenantSettingSvc',\nfunction ($scope, $modal, franchiseSvc, tenantSettingSvc) {\n\n $scope.employees = [];\n\n var selectedFranchise;\n\n $scope.requireTeacherFranchiseLicenses = tenantSettingSvc.settings.requireTeacherFranchiseLicenses;\n\n $scope.$on('franchiseSelectionChanged', function (e, newFranchise) {\n if (newFranchise) {\n selectedFranchise = newFranchise;\n $scope.employees = franchiseSvc.getEmployeesByTenant(selectedFranchise.franchiseTenantAlias);\n } else {\n $scope.employees = [];\n }\n });\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['fullName'], directions: ['dsc'] }, \n columnDefs: [\n { field: 'fullName', displayName: \"TXT_HUMAN_NAME\", sort: 'locale' },\n { field: 'franchiseActive', displayName: \"TXT_LBL_ACTIVE\", cellFilter: 'checkmark', width: '70px' }\n ]\n };\n\n\n $scope.onRowEdit = function (employee) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(employee);\n detailDialogPromise.$scope.selectedFranchise = selectedFranchise;\n detailDialogPromise.$scope.onSaveSuccess = function (newData) {\n employee.employeeDTO = newData.employeeDTO;\n $scope.$emit('franchiseEmployeeUpdated', employee);\n }\n detailDialogPromise.show();\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'franchise/franchises-tabs/employee-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);","wbApp.controller('FranchisesEmployeesDetailCtrl', ['$scope', '$modal', 'franchiseSvc', 'tenantInfo',\nfunction ($scope, $modal, franchiseSvc, tenantInfo) {\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['franchiseSubjectName'], directions: ['dsc'] },\n columnDefs: [\n { field: 'franchiseSubjectName', displayName: \"TXT_LBL_SUBJECT\", sort: 'locale' },\n { field: 'validFrom', displayName: \"TXT_LAB_VALID_FROM\", cellFilter: 'date:shortDate', width: '100px' },\n { field: 'validTo', displayName: \"TXT_LAB_VALID_TO\", cellFilter: 'date:shortDate', width: '100px' }\n ]\n };\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.licenses = $scope.model.licenses;\n detailDialogPromise.$scope.modelOrig = { isNew: true };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (license) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.licenses = $scope.model.licenses;\n detailDialogPromise.$scope.modelOrig = license;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (license) {\n _.pull($scope.model.licenses, license);\n }\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n franchiseSvc.updateEmployeeByTenant($scope.selectedFranchise.franchiseTenantAlias, data, success, error);\n\n function success(newData) {\n $scope.$hide();\n $scope.onSaveSuccess(newData);\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'franchise/franchises-tabs/employee-license-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);","wbApp.controller('FranchisesEmployeesLicenseDetailCtrl', ['$scope', 'tenantInfo', 'subjectsSvc',\nfunction ($scope, tenantInfo, subjectsSvc) {\n $scope.model = angular.copy($scope.modelOrig);\n $scope.franchiseCentralTenantID = tenantInfo.tenantID;\n \n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) { \n angular.extend($scope.modelOrig, data);\n delete $scope.modelOrig.isNew;\n $scope.licenses.push($scope.modelOrig);\n } else {\n angular.extend($scope.modelOrig, data);\n }\n\n subjectsSvc.getFranchiseCentralSubject($scope.franchiseCentralTenantID, $scope.modelOrig.franchiseSubjectID)\n .then(function (subject) {\n $scope.modelOrig.franchiseSubjectName = subject.name;\n $scope.$hide();\n }, function (error) {\n $scope.detailError = error;\n $scope.isSaving = false;\n });\n \n }\n\n\n}]);","var webooker_franchise_models = webooker_franchise_models || {};\n\n(function (ns) {\n\n ns.FranchiseEmployee = function (employeeDTO) {\n this.employeeDTO = employeeDTO;\n\n this.fullName = employeeDTO.fullName;\n }\n\n Object.defineProperty(ns.FranchiseEmployee.prototype, 'franchiseActive', {\n enumerable: true, configurable: true,\n get: function () {\n return this.employeeDTO.franchises[0].active;\n },\n set: function (value) {\n this.employeeDTO.franchises[0].active = value;\n }\n });\n\n Object.defineProperty(ns.FranchiseEmployee.prototype, 'licenses', {\n enumerable: true, configurable: true,\n get: function () {\n return this.employeeDTO.franchises[0].licenses;\n },\n set: function (value) {\n this.employeeDTO.franchises[0].licenses = value;\n }\n });\n\n})(webooker_franchise_models);","'use strict';\n\nwbApp.factory('franchiseSvc', ['$resource', '$cacheFactory', '$q', 'repositorySvc', \n function ($resource, $cacheFactory, $q, repositorySvc) {\n\n var Franchise = $resource('/Api/Franchise/Get', {}, {\n 'getAll': { method: 'GET', isArray: true, url: '/Api/Franchise/GetAll' },\n 'getEmployeesByTenant': { method: 'GET', isArray: true, url: '/Api/Franchise/GetEmployeesByTenant' },\n 'updateEmployeeByTenant': { method: 'POST', isArray: false, url: '/Api/Franchise/UpdateEmployeeByTenant' },\n 'getAttendanceSummary': { method: 'GET', isArray: true, url: '/Api/Franchise/GetAttendanceSummary' },\n 'getAttendanceSummaryForFranchiseCentral': { method: 'GET', isArray: true, url: '/Api/Franchise/GetAttendanceSummaryForFranchiseCentral' },\n });\n\n var cache = $cacheFactory('franchiseSvcCache');\n\n function getAllAsync(refresh) {\n\n var models = cache.get('franchises');\n\n if (refresh || !models) {\n if (models) {\n cache.remove('franchises');\n }\n\n models = repositorySvc.customGet('getAll', Franchise);\n cache.put('franchises', models);\n }\n\n return models;\n }\n\n function getAttendanceSummaryAsync(fromDate, toDate) {\n return repositorySvc.customGet('getAttendanceSummary', Franchise, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getAttendanceSummaryForFranchiseCentral(franchiseCentralTenantID, fromDate, toDate) {\n return repositorySvc.customGet('getAttendanceSummaryForFranchiseCentral', Franchise, {\n franchiseCentralTenantID: franchiseCentralTenantID,\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getEmployeesByTenant(tenant) {\n var deferred = $q.defer();\n var result = [];\n result.$promise = deferred.promise;\n\n repositorySvc.customGet('getEmployeesByTenant', Franchise, {\n employeesForTenantAlias: tenant\n }).$promise.then(\n function (data) {\n angular.forEach(data, function (value) {\n result.push(new webooker_franchise_models.FranchiseEmployee(value));\n });\n deferred.resolve(result);\n },\n function (reason) { deferred.reject(reason); });\n\n return result;\n }\n\n function updateEmployeeByTenant(tenant, employee, success, error) {\n repositorySvc.customPost(\n 'updateEmployeeByTenant',\n Franchise,\n {\n employeesForTenantAlias: tenant,\n employee: employee.employeeDTO\n },\n function (data) {\n if (success) {\n success(new webooker_franchise_models.FranchiseEmployee(data));\n }\n },\n error\n );\n }\n\n return {\n getAllAsync: getAllAsync,\n getEmployeesByTenant: getEmployeesByTenant,\n updateEmployeeByTenant: updateEmployeeByTenant,\n getAttendanceSummaryAsync: getAttendanceSummaryAsync,\n getAttendanceSummaryForFranchiseCentral: getAttendanceSummaryForFranchiseCentral\n }\n }\n]);\n","'use strict';\n\nwbApp.controller('MainCtrl', ['$scope', 'breadcrumbs',\nfunction ($scope, breadcrumbs) {\n $scope.breadcrumbs = breadcrumbs;\n\n $scope.onRefreshButtonClick = function () {\n $scope.$broadcast('refreshData', null);\n }\n}]);","'use strict';\n\nwbApp.controller('AddressListCtrl', ['$scope', 'recipientSvc',\nfunction ($scope, recipientSvc) {\n\n $scope.addressList = '';\n\n recipientSvc.getAddressList($scope.recipientList)\n .then(function (data) {\n $scope.addressList = data;\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('AddressSelectorCtrl', ['$scope', \nfunction ($scope) {\n\n $scope.onAdd = function () {\n $scope.onAddAddress($scope.recipient);\n }\n\n $scope.isAddDisabled = function () {\n\n if (!$scope.recipient) {\n return true;\n }\n\n var groupType = parseInt($scope.recipient.recipientGroupType);\n\n switch (groupType) {\n case 1:\n return !$scope.recipient.userId;\n case 2:\n return !$scope.recipient.semesterId || !$scope.recipient.courseId;\n case 3:\n return !$scope.recipient.semesterId || !$scope.recipient.courseId || !$scope.recipient.courseScheduleId;\n case 4:\n return !$scope.recipient.semesterId || !$scope.recipient.classroomId;\n case 5:\n return !$scope.recipient.classroomId || !$scope.recipient.toDate;\n case 6:\n return !$scope.recipient.semesterId || !$scope.recipient.compensationGroupId;\n case 7:\n case 8:\n case 9:\n case 10:\n case 11:\n return !$scope.recipient.semesterId;\n case 12:\n return !$scope.recipient.semesterId || !$scope.recipient.semester2Id;\n\n case 13:\n case 14:\n return !$scope.recipient.semesterId;\n case 15:\n return !$scope.recipient.toDate;\n case 16:\n return !$scope.recipient.studentId;\n case 17:\n return !$scope.recipient.semesterId || !$scope.recipient.courseId;\n }\n }\n}]);\n","'use strict';\n\nwbApp.controller('EmailCtrl', ['$scope', '$modal', '$translate', 'recipientSvc', 'messagesSvc', 'messageTemplateSvc',\nfunction ($scope, $modal, $translate, recipientSvc, messagesSvc, messageTemplateSvc) {\n\n $scope.addAddress = function () {\n addressSelectorPromise.$promise.then(function () {\n $scope.recipient = recipientSvc.createRecipientModel();\n addressSelectorPromise.show();\n });\n }\n\n $scope.templateModel = messageTemplateSvc.createNew();\n\n $scope.onAddAddress = function (recipient)\n {\n $scope.recipientList.push(recipient);\n }\n\n $scope.clearAll = function () {\n $scope.recipientList.length = 0;\n $scope.subject = '';\n $scope.messageBody = '';\n $scope.attachments = [];\n\n $scope.templateModel = messageTemplateSvc.createNew();\n }\n\n $scope.sendMessage = function (recipientList, subject, messageBody, attachments) {\n messagesSvc.sendEmail(recipientList, subject, messageBody, attachments)\n .then($scope.clearAll);\n }\n\n $scope.recipientList = [];\n\n var addressSelectorPromise = $modal({\n templateUrl: 'messages/address-selector.html',\n show: false,\n scope: $scope\n });\n\n\n $scope.getRecipients = function (recipientList) {\n addressListPromise.$promise.then(function () {\n addressListPromise.show();\n });\n }\n\n $scope.onSaveTemplate = function () {\n\n $scope.templateModel.subject = $scope.subject;\n $scope.templateModel.messageBody = $scope.messageBody;\n $scope.templateModel.recipients = $scope.recipientList;\n if (!$scope.templateModel.name) {\n $scope.templateModel.name = $scope.templateModel.subject;\n }\n\n saveTemplateDialogPromise.$promise.then(function () {\n saveTemplateDialogPromise.$scope.model = angular.copy($scope.templateModel);\n saveTemplateDialogPromise.$scope.onSave = function (savedData) {\n $scope.templateModel.name = savedData.name;\n $scope.templateModel.id = savedData.id;\n };\n saveTemplateDialogPromise.show();\n });\n }\n\n $scope.onLoadTemplate = function () {\n loadTemplateDialogPromise.$promise.then(function () {\n loadTemplateDialogPromise.$scope.onLoad = function (loadedData) {\n $scope.templateModel = loadedData;\n\n $scope.subject = loadedData.subject;\n\n\n $scope.recipientList = _.map(loadedData.recipients, function (recipientInfo) {\n var recipient = recipientSvc.createRecipientModel();\n angular.extend(recipient, recipientInfo);\n return recipient;\n });\n\n $scope.messageBody = loadedData.messageBody;\n $scope.attachments = [];\n };\n loadTemplateDialogPromise.show(); \n });\n }\n\n var uploadComponent = null;\n $scope.uploadUrl = \"restapi/emails/attachment\";\n $scope.uploadSuccess = false;\n $scope.uploadFullSuccess = false;\n $scope.uploadError = false;\n $scope.uploadInProgress = false;\n $scope.attachments = [];\n\n $scope.removeAttachment = function (attachment) {\n if (!$scope.attachments || !attachment) {\n return;\n }\n\n var idx = $scope.attachments.indexOf(attachment);\n if (idx !== -1) {\n $scope.attachments.splice(idx, 1);\n }\n }\n\n $scope.fileUploaderOptions = {\n accept: \"*\",\n uploadMode: \"instantly\",\n showFileList: false,\n labelText: \"\",\n selectButtonText: $translate.instant('TXT_ATTACHMENT_ADD'),\n maxFileSize: 1024 * 1024 * 10, // 20 MB\n onContentReady: function (e) {\n uploadComponent = e.component;\n },\n onUploadError: function (e) {\n alert(e.request.responseText);\n $scope.uploadSuccess = false;\n $scope.uploadError = true;\n $scope.uploadInProgress = false;\n uploadComponent.reset();\n },\n onUploadStarted: function (e) {\n $scope.uploadSuccess = false;\n $scope.uploadError = false;\n $scope.uploadInProgress = true;\n },\n onUploaded: function (e) {\n $scope.attachments.push(JSON.parse(e.request.responseText));\n $scope.uploadSuccess = true;\n $scope.uploadError = false;\n $scope.uploadInProgress = false;\n uploadComponent.reset();\n },\n bindingOptions: {\n uploadUrl: \"uploadUrl\",\n disabled: \"form.$invalid\"\n }\n };\n\n var addressListPromise = $modal({\n templateUrl: 'messages/address-list.html',\n show: false,\n scope: $scope\n });\n\n var saveTemplateDialogPromise = $modal({\n templateUrl: 'messages/email-template-save-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n\n var loadTemplateDialogPromise = $modal({\n templateUrl: 'messages/email-template-load-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('EmailTemplateLoadDialogCtrl', ['$scope', '$translate', '$filter', 'messageTemplateSvc',\n function ($scope, $translate, $filter, messageTemplateSvc) {\n\n $scope.templates = messageTemplateSvc.getAllInfo();\n $scope.selectedTemplate = null;\n\n $scope.onRowSelected = function (model) {\n $scope.selectedTemplate = model;\n }\n\n $scope.gridSettings = {\n name: 'templates',\n keyExpr: 'id',\n shouldDisableDelete: function(row) {return false; },\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string' },\n {\n dataField: 'updatedAtUtc',\n caption: $translate.instant('TXT_LBL_UPDATED_AT'),\n dataType: 'date',\n format: { type: 'shortDateShortTime' },\n width: '140px',\n sortOrder: 'desc'\n },\n ]\n }\n\n $scope.onRowDelete = function (model) {\n messageTemplateSvc.remove(model.id).$promise.then(function () {\n $scope.selectedTemplate = null;\n $scope.templates = messageTemplateSvc.getAllInfo();\n });\n }\n\n $scope.loadTemplate = function () {\n messageTemplateSvc.getById($scope.selectedTemplate.id).$promise.then(function (model) {\n $scope.onLoad(model);\n });\n }\n}]);\n","wbApp.controller('EmailTemplateSaveDialogCtrl', ['$scope', '$translate', '$filter', 'messageTemplateSvc',\n function ($scope, $translate, $filter, messageTemplateSvc) {\n\n $scope.isSaving = false;\n\n $scope.onSaveAsNew = function () {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n $scope.model.id = null;\n\n messageTemplateSvc.insert($scope.model).$promise.then(\n function (data) {\n $scope.isSaving = false;\n\n $scope.onSave(data);\n },\n function (error) {\n $scope.isSaving = false;\n }\n );\n }\n\n $scope.onSaveExisting = function () {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n messageTemplateSvc.update($scope.model).$promise.then(\n function () {\n $scope.isSaving = false;\n\n $scope.onSave($scope.model);\n },\n function (error) {\n $scope.isSaving = false;\n }\n );\n }\n}]);\n","wbApp.controller('EmailTemplatesAttachmentsDetailCtrl', ['$scope', '$translate', '$filter', '$q', 'emailAttachmentsSvc', 'tenantInfo',\nfunction ($scope, $translate, $filter, $q, emailAttachmentsSvc, tenantInfo) {\n\n var fileManagerInstance;\n var chunkSize = 1024 * 1024 * 8; // 8 MB\n\n $scope.localeAlias = tenantInfo.languageAlias || 'cs';\n\n\n $scope.fileManagerOptions = {\n fileSystemProvider: new DevExpress.fileManagement.CustomFileSystemProvider({\n getItems: function(pathInfo) {\n return emailAttachmentsSvc.getFiles($scope.model.documentTemplateType, $scope.model.emailCategory, $scope.localeAlias).$promise;\n },\n downloadItems: function (items) {\n },\n deleteItem: function (item) {\n return emailAttachmentsSvc.deleteFile($scope.model.documentTemplateType, $scope.model.emailCategory, item.path, $scope.localeAlias).$promise;\n },\n uploadFileChunk: function (fileData, uploadInfo, destinationDirectory) {\n var fileSize = fileData.size;\n var contentType = fileData.type;\n var chunkCount = uploadInfo.chunkCount;\n\n var deffered = $q(function (resolve, reject) {\n if (uploadInfo.chunkIndex === 0) {\n var filePath = destinationDirectory.path ? destinationDirectory.path + \"/\" + fileData.name : fileData.name;\n emailAttachmentsSvc.getUploadUrl($scope.model.documentTemplateType, $scope.model.emailCategory, filePath, $scope.localeAlias).$promise.then(function (uploadUrl) {\n uploadInfo.customData.accessUrl = uploadUrl.url;\n resolve();\n });\n }\n else {\n resolve();\n }\n });\n\n return $q(function (resolve, reject) {\n deffered.then(function () {\n\n var chunkSize = uploadInfo.chunkBlob.size;\n var chunkFirstByte = uploadInfo.bytesUploaded;\n var chunkLastByte = uploadInfo.bytesUploaded + uploadInfo.chunkBlob.size - 1;\n var totalObjectSize = fileSize;\n\n $.ajax({\n url: uploadInfo.customData.accessUrl,\n type: 'PUT',\n contentType: contentType,\n contentLength: uploadInfo.chunkBlob.size,\n headers: {\n 'Content-Range': \"bytes \" + chunkFirstByte + \"-\" + chunkLastByte + \"/\" + fileSize\n },\n data: uploadInfo.chunkBlob,\n crossDomain: true,\n processData: false,\n success: function (res) {\n resolve();\n },\n error: function (err) {\n if (err.status == 308) { // Continue with next chunk \n resolve();\n } else {\n reject(err);\n }\n }\n });\n });\n });\n },\n nameExpr: 'fileName',\n sizeExpr: 'fileSize',\n keyExpr: 'fileName',\n dateModifiedExpr: \"createdAtUtc\"\n }),\n permissions: {\n download: false,\n create: false,\n delete: true,\n upload: true\n },\n selectionMode: \"single\",\n upload: {\n maxFileSize: (1024 * 1024) * 20, // 20 MB object limit\n chunkSize: chunkSize\n },\n onContentReady: function (e) {\n fileManagerInstance = e.component;\n },\n itemView: {\n mode: \"details\",\n showFolders: false,\n showParentFolder: false\n }\n }\n}]);\n","wbApp.controller('EmailTemplatesCtrl', ['$scope', '$translate', '$filter', '$timeout', '$modal', 'messageBoxSvc', \n 'emailTemplatesSvc', 'tenantInfo',\nfunction ($scope, $translate, $filter, $timeout, $modal, messageBoxSvc, emailTemplatesSvc, tenantInfo) {\n \n $scope.emailTemplateId = null;\n $scope.oldEmailTemplateId = null;\n $scope.localeAlias = tenantInfo.languageAlias || 'cs';\n $scope.model = null;\n $scope.modelOrig = null;\n $scope.docIsClean = true;\n $scope.numberOfAttachments = 0;\n\n var codeEditorInstance;\n\n $scope.$on('refreshData', function (e, data) {\n $scope.onTemplateSelected();\n $scope.$broadcast('refreshEmailTemplateData', {});\n });\n\n $scope.onRefreshTemplate = function () {\n $scope.onTemplateSelected();\n }\n\n $scope.saveDisabled = function () {\n return $scope.docIsClean ||\n !$scope.model ||\n !$scope.emailTemplateId;\n }\n\n $scope.onSaveTemplate = function () {\n if (!$scope.saveDisabled()) {\n\n emailTemplatesSvc.update($scope.model).$promise.then(\n function (success) {\n\n $scope.$broadcast('refreshEmailTemplateData', {});\n loadData($scope.model.documentTemplateType, $scope.model.emailCategory);\n });\n }\n }\n\n $scope.onDeleteTemplate = function () {\n if (!!$scope.emailTemplateId && !!$scope.model) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_QUESTION',\n message: $translate.instant('TXT_CONFIRM_DELETE_EMAIL_TEMPLATE'),\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n emailTemplatesSvc.remove($scope.model.documentTemplateType, $scope.model.emailCategory, $scope.localeAlias).$promise.then(\n function (success) {\n $scope.$broadcast('refreshEmailTemplateData', {});\n loadData($scope.model.documentTemplateType, $scope.model.emailCategory);\n },\n function (error) {\n alert(error);\n });\n }\n }]\n });\n }\n }\n\n $scope.onValidateTemplate = function () {\n\n previewDialogPromise.$promise.then(function () {\n previewDialogPromise.$scope.detail = emailTemplatesSvc.preview($scope.model);\n previewDialogPromise.show();\n });\n }\n\n $scope.onAttachments = function () {\n attachmentsDialogPromise.$promise.then(function () {\n attachmentsDialogPromise.$scope.model = $scope.model;\n attachmentsDialogPromise.show();\n });\n }\n\n $scope.codemirrorLoaded = function (_editor) {\n codeEditorInstance = _editor.getDoc();\n $scope.docIsClean = codeEditorInstance.isClean();\n codeEditorInstance.on(\"change\", function () {\n $scope.docIsClean = codeEditorInstance.isClean();\n });\n };\n\n $scope.editorOptions = {\n lineNumbers: true, \n theme: 'default',\n mode: { name: \"handlebars\", base: \"text/html\" },\n };\n\n $scope.sampleDataEditorOptions = {\n lineNumbers: true,\n theme: 'default',\n mode: {\n name: \"javascript\",\n json: true,\n statementIndent: 2\n }\n };\n\n function loadData(documentTemplateType, emailCategory) {\n emailTemplatesSvc.getById(documentTemplateType, emailCategory, $scope.localeAlias).$promise.then(\n function (data) {\n $scope.model = data;\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.oldEmailTemplateId = $scope.emailTemplateId;\n\n if (!!codeEditorInstance) {\n $timeout(function () {\n codeEditorInstance.markClean();\n $scope.docIsClean = codeEditorInstance.isClean();\n })\n }\n }, function (err) {\n $scope.model = null;\n $scope.modelOrig = null;\n });\n }\n\n $scope.onTemplateSelected = function () {\n\n function loadWithIsCleanCheck(documentTemplateType, emailCategory) {\n if (!$scope.docIsClean) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_QUESTION',\n message: $translate.instant('TXT_CONFIRM_DISCARD_MODIFIED_DATA'),\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: function () {\n $scope.emailTemplateId = $scope.oldemailTemplateId;\n }\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n loadData(documentTemplateType, emailCategory);\n }\n }]\n });\n } else {\n loadData(documentTemplateType, emailCategory);\n }\n }\n\n if (!!$scope.emailTemplateId) {\n var split = $scope.emailTemplateId.split('_');\n var documentTemplateType = parseInt(split[0]);\n var emailCategory = parseInt(split[1]);\n\n var info = emailTemplatesSvc.getInfoById(documentTemplateType, emailCategory, $scope.localeAlias);\n info.then(function (infoData) {\n \n $scope.numberOfAttachments = infoData.attachments.length;\n\n if (infoData.isCompatibleOverride || !infoData.isOverridden) {\n loadWithIsCleanCheck(documentTemplateType, emailCategory);\n } else {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_ERROR',\n message: $translate.instant('TXT_INCOMPATIBLE_TEMPLATE'),\n buttons: [{\n text: 'TXT_BTN_OK',\n callback: function () {\n loadWithIsCleanCheck(documentTemplateType, emailCategory);\n }\n }]\n });\n }\n });\n }\n }\n\n var previewDialogPromise = $modal({\n templateUrl: 'messages/email-templates-preview-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n var attachmentsDialogPromise = $modal({\n templateUrl: 'messages/email-templates-attachments-detail.html',\n show: false, \n scope: $scope.$new(),\n });\n\n attachmentsDialogPromise.$scope.$on('modal.hide.before', function () {\n $scope.$broadcast('refreshEmailTemplateData', {});\n })\n}]);\n","wbApp.controller('EmailTemplatesDetailCtrl', ['$scope', '$translate', '$filter', \nfunction ($scope, $translate, $filter) {\n\n $scope.detailTabs = [\n {\n title: 'TXT_LBL_EMAIL',\n template: \"messages/email-templates-preview-detail-email-tab.html\"\n }, {\n title: 'TXT_SEC_VALIDATE',\n template: \"messages/email-templates-preview-detail-errors-tab.html\"\n }];\n\n $scope.detail.$promise.then(function (model) {\n $scope.validationErrors = model.validationErrors;\n $scope.isValid = model.isValid;\n if (!$scope.isValid) {\n $scope.detailTabs.activeTab = 1;\n }\n $(\"#email-content-iframe\").contents().find('html').html(model.htmlBody);\n });\n\n\n}]);\n","'use strict';\n\nwbApp.controller('SentEmailStatisticsCtrl', ['$scope', '$translate', '$timeout', 'sentEmailsSvc',\nfunction ($scope, $translate, $timeout, sentEmailsSvc) {\n\n $scope.fromDate = moment().subtract(6, 'months').toDate();\n $scope.toDate = moment().add(1, 'day').toDate();\n\n $scope.sentEmailStatistics = {\n type: 'AreaChart',\n data: [[]],\n options: {\n displayExactValues: true,\n isStacked: false,\n chartArea: { top: 20, left: 70, right: 20, height: '85%' },\n legend: {\n position: 'none'\n },\n vAxis: {},\n hAxis: {},\n orientation: 'horizontal'\n }\n };\n\n function loadData() {\n if ($scope.fromDate && $scope.toDate) {\n sentEmailsSvc.getStatistics($scope.fromDate, $scope.toDate)\n .then(function (data) {\n $scope.sentEmailStatistics.data = data;\n });\n }\n loaded = true;\n }\n\n\n $scope.onDateRangeChanged = function () {\n loadData();\n }\n\n var isActive = false;\n var loaded = false;\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded) {\n loadData();\n }\n }\n } else {\n isActive = false;\n }\n });\n\n}]);","wbApp.controller('SentEmailsCtrl', ['$scope', '$translate', '$filter', 'sentEmailsSvc',\nfunction ($scope, $translate, $filter, sentEmailsSvc) {\n\n $scope.selectedGroup = [];\n\n $scope.gridSettings = {\n columns: [\n {\n dataField: 'recipients',\n caption: $translate.instant('TXT_LBL_RECIPIENTS'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return _.map(_.filter(rowData.emails, 'name'), 'name').join(', ');\n },\n width: '240px'\n },\n { dataField: 'subject', caption: $translate.instant('TXT_EMAIL_SUBJECT'), dataType: 'string' }, \n {\n dataField: 'status',\n caption: $translate.instant('TXT_LBL_STATE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('emailGroupStatus')(rowData.status);\n },\n width: '120px'\n },\n {\n dataField: 'updatedAt',\n caption: $translate.instant('TXT_LBL_UPDATED_AT'),\n dataType: 'date',\n format: 'shortDateShortTime',\n width: '130px',\n sortOrder: 'desc'\n }\n ]\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedGroup = data.emails; \n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.emails = sentEmailsSvc.getSummary();\n $scope.selectedGroup = [];\n });\n\n $scope.emails = sentEmailsSvc.getSummary();\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"messages/sent-emails-tabs-group-detail.html\"\n },{\n title: 'TXT_STATISTICS',\n template: \"messages/sent-emails-tabs-statistics.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n}]);\n","wbApp.controller('SentEmailsEmailDetailCtrl', ['$scope', '$translate', '$filter', 'sentEmailsSvc',\nfunction ($scope, $translate, $filter, sentEmailsSvc) {\n\n $scope.detailTabs = [\n {\n title: 'TXT_LBL_EMAIL',\n template: \"messages/sent-emails-email-detail-content-tab.html\"\n }, {\n title: 'TXT_ATTACHMENTS',\n template: \"messages/sent-emails-email-detail-attachment-tab.html\"\n }, {\n title: 'TXT_COMMUNICATION_HISTORY',\n template: \"messages/sent-emails-email-detail-events-tab.html\"\n }];\n\n $scope.subjectHtmlEncoded = \"\";\n\n $scope.detail.$promise.then(function (model) {\n $scope.toAddressEmailHtmlEncoded =\n model.toAddress.name + '<' + model.toAddress.email + '>';\n $scope.subjectHtmlEncoded = 'Re: ' + jQuery('
').text(model.subject).html(); \n $(\"#email-content-iframe\").contents().find('html').html(model.htmlBody);\n });\n\n\n}]);\n","wbApp.controller('SentEmailsGroupDetailCtrl', ['$scope', '$translate', '$filter', '$modal', 'sentEmailsSvc',\nfunction ($scope, $translate, $filter, $modal, sentEmailsSvc) {\n\n $scope.sentEmailsGroupGridSettings = {\n columns: [\n {\n dataField: 'name',\n caption: $translate.instant('TXT_HUMAN_NAME'),\n dataType: 'string',\n width: '160px'\n },\n {\n dataField: 'email',\n caption: $translate.instant('TXT_LBL_EMAIL'),\n dataType: 'string',\n width: '160px'\n },\n {\n dataField: 'status',\n caption: $translate.instant('TXT_LBL_STATE'),\n dataType: 'number',\n calculateCellValue: function (rowData) {\n return $filter('emailStatus')(rowData.status);\n },\n width: '250px'\n },\n { dataField: 'response', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\n {\n dataField: 'updatedAt',\n caption: $translate.instant('TXT_LBL_UPDATED_AT'),\n dataType: 'date',\n format: 'shortDateShortTime',\n width: '130px',\n sortOrder: 'desc'\n }\n ],\n customCommands: [{\n text: $translate.instant('TXT_DETAIL'),\n callback: function (row) { onShowDetail(row.id); }\n }]\n }\n \n function onShowDetail(id) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.detail = sentEmailsSvc.getDetail(id);\n detailDialogPromise.show();\n });\n }\n\n $scope.onEmailSelected = function (model) {\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'messages/sent-emails-email-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('SmsCtrl', ['$scope', '$modal', '$translate', '$filter', 'recipientSvc', 'messagesSvc', 'tenantSettingSvc',\nfunction ($scope, $modal, $translate, $filter, recipientSvc, messagesSvc, tenantSettingSvc) {\n\n $scope.fromDate = moment().startOf('month').toDate();\n $scope.toDate = moment().endOf('month').toDate();\n\n $scope.enableSMSSupport = tenantSettingSvc.settings.enableSMSSupport;\n $scope.smsMessages = messagesSvc.getSmsHistoryByDateRage($scope.fromDate, $scope.toDate);\n\n $scope.gridSettings = {\r\n columns: [\n { dataField: 'createdAt', caption: $translate.instant('TXT_LBL_CREATED_AT'), dataType: 'date', format: 'shortDateShortTime', width: '140px', sortOrder: 'desc' },\n {\r\n dataField: 'recipient',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.recipient);\r\n },\n width: '130px'\r\n },\n { dataField: 'noOfSms', caption: $translate.instant('TXT_LBL_NO_OF_SMS'), dataType: 'number', width: '90px' },\n { dataField: 'text', caption: $translate.instant('TXT_LBL_TEXT'), dataType: 'string' },\n { dataField: 'errorText', caption: $translate.instant('TXT_LBL_ERROR_CODE'), dataType: 'string', width: '130px' }\n ]\r\n }\n\n //$scope.gridOptions = {\n // sortInfo: { fields: ['createdAt'], directions: ['dsc'] },\n // // > 992\n // largeColumnDefs: [{ field: 'createdAt', displayName: \"TXT_LBL_CREATED_AT\", width: '120px', cellFilter: \"date:'short'\" }, \n // { field: 'recipient', displayName: \"TXT_LBL_PHONE\", width: '120px', cellFilter: 'phone' },\n // { field: 'noOfSms', displayName: \"TXT_LBL_NO_OF_SMS\", width: '90px' },\n // { field: 'text', displayName: \"TXT_LBL_TEXT\" },\n // { field: 'errorText', displayName: \"TXT_LBL_ERROR_CODE\", width: '130px' }\n // ]\n //};\n\n $scope.onFromDateChange = function (fromDate) {\n if (fromDate) {\n $scope.smsMessages = messagesSvc.getSmsHistoryByDateRage(fromDate, $scope.toDate);\n }\n }\n\n $scope.onToDateChange = function (toDate) {\n if (toDate) {\n $scope.smsMessages = messagesSvc.getSmsHistoryByDateRage($scope.fromDate, toDate);\n }\n }\n\n $scope.selectedRow = {};\n\n $scope.onRowSelected = function (data) {\n if (!angular.equals($scope.selectedRow, data)) {\n $scope.selectedRow = data;\n }\n }\n\n $scope.onNewSms = function () {\n detailDialogPromise.$promise.then(function () {\n $scope.clearAll();\n detailDialogPromise.show();\n });\n }\n\n $scope.detailError = null;\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"messages/sms-detail-tabs/home.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n var detailDialogPromise = $modal({\n templateUrl: 'messages/sms-detai.html',\n show: false,\n scope: $scope\n });\n\n $scope.addAddress = function () {\n addressSelectorPromise.$promise.then(function () {\n $scope.recipient = recipientSvc.createRecipientModel();\n addressSelectorPromise.show();\n });\n }\n\n $scope.onAddAddress = function (recipient)\n {\n $scope.recipientList.push(recipient);\n }\n\n $scope.smsText = '';\n $scope.recipientList = [];\n\n var addressSelectorPromise = $modal({\n templateUrl: 'messages/address-selector.html',\n show: false,\n scope: $scope\n });\n\n $scope.clearAll = function () {\n $scope.recipientList.length = 0;\n $scope.smsText = '';\n }\n\n $scope.sendMessage = function (recipientList, smsText) {\n messagesSvc.sendSms(recipientList, smsText)\n .then(function () {\n $scope.clearAll();\n detailDialogPromise.hide();\n });\n }\n\n}]);\n","'use strict';\n\nwbApp.directive('wbEmailTemplateCombo', ['$timeout', '$translate', 'emailTemplatesSvc', 'gridSortSvc', 'tenantInfo',\n function ($timeout, $translate, emailTemplatesSvc, gridSortSvc, tenantInfo) {\n function formatResult(model) {\n if (!model) {\n return \"\";\n }\n\n var attachmentsCnt = model.attachments.length || '';\n\n if (model.isOverridden)\n {\n if (model.isCompatibleOverride) {\n return \"
\" +\n \"
\" + model.emailTemplateName + \"
\" +\n \"
\" + attachmentsCnt + \"
\" +\n \"
\";\n\n } else {\n return \"
\" +\n \"
\" + model.emailTemplateName + \"
\" +\n \"
\" + attachmentsCnt + \"
\" +\n \"
\";\n }\n } else {\n return \"
\" +\n \"
\" + model.emailTemplateName + \"
\" +\n \"
\" + attachmentsCnt + \"
\" +\n \"
\";\n }\n }\n\n function formatSelection(model) {\n if (!model) {\n return \"\";\n }\n\n var attachmentsCnt = !!model.attachments.length\n ? ' (' + model.attachments.length + ')'\n : '';\n\n if (model.isOverridden) {\n if (model.isCompatibleOverride) {\n return \"\" + model.emailTemplateName + attachmentsCnt + \"\";\n } else {\n return \"\" + model.emailTemplateName + attachmentsCnt + \"\";\n }\n } else {\n return model.emailTemplateName + attachmentsCnt;\n }\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n link: function (scope, elm, attrs, controller) {\n\n function init() {\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_SELECT_EMAIL_TEMPLATE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5,\n id: function (model) { return model.documentTemplateType + '_' + model.emailCategory; },\n data: _.sortBy(models, function (a) { return gridSortSvc.localeSort(a, 'emailTemplateName'); }),\n matcher: function (term, text, data) {\n return data.emailTemplateName.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n controller.$render();\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n\n var models = emailTemplatesSvc.getAllInfo(tenantInfo.languageAlias || 'cs', true);\n\n scope.$on('refreshEmailTemplateData', function (e, data) {\n models = emailTemplatesSvc.getAllInfo(tenantInfo.languageAlias || 'cs', true);\n models.$promise.then(function () {\n $timeout(function () {\n var selection = elm.select2('val');\n elm.select2('destroy');\n init();\n controller.$setViewValue(selection);\n });\n });\n });\n\n init();\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRecipientGroupCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return \"
\" +\n \"
\" + $translate.instant(item.text) + \"
\" +\n \"
\" + $translate.instant(item.description) + \"
\" +\n \"
\";\n\n }\n\n function formatSelection(item) {\n return '{0} ({1})'.f(\n $translate.instant(item.text),\n $translate.instant(item.description));\n }\n\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n data: [\n { id: 1, text: 'TXT_VAL_RCPG_USER', description: 'TXT_DESC_RCPG_USER' },\n { id: 17, text: 'TXT_VAL_RCPG_ACTION', description: 'TXT_DESC_RCPG_ACTION' },\n { id: 2, text: 'TXT_VAL_RCPG_COURSE', description: 'TXT_DESC_RCPG_COURSE' },\n { id: 3, text: 'TXT_VAL_RCPG_COURSE_LESSON', description: 'TXT_DESC_RCPG_COURSE_LESSON' },\n { id: 4, text: 'TXT_VAL_RCPG_CLASSROOM', description: 'TXT_DESC_RCPG_CLASSROOM' },\n { id: 5, text: 'TXT_VAL_RCPG_CLASSROOM_AT_DATE', description: 'TXT_DESC_RCPG_CLASSROOM_AT_DATE' },\n { id: 6, text: 'TXT_VAL_RCPG_COMPENSATION_GROUP', description: 'TXT_DESC_RCPG_COMPENSATION_GROUP' },\n { id: 7, text: 'TXT_VAL_RCPG_ALL_COURSES', description: 'TXT_DESC_RCPG_ALL_COURSES' },\n { id: 8, text: 'TXT_VAL_RCPG_ALL_ACTIONS', description: 'TXT_DESC_RCPG_ALL_ACTIONS' },\n { id: 9, text: 'TXT_VAL_RCPG_ALL_ACTIONS_WITHOUT_COURSES', description: 'TXT_DESC_RCPG_ALL_ACTIONS_WITHOUT_COURSES' },\n { id: 10, text: 'TXT_VAL_RCPG_SEMESTER', description: 'TXT_DESC_RCPG_SEMESTER' },\n { id: 11, text: 'TXT_VAL_RCPG_NOT_IN_SEMESTER', description: 'TXT_DESC_RCPG_NOT_IN_SEMESTER' },\n { id: 12, text: 'TXT_VAL_RCPG_NOT_IN_SEMESTER_ATTENDING_LAST_ONE', description: 'TXT_DESC_RCPG_NOT_IN_SEMESTER_ATTENDING_LAST_ONE' },\n { id: 13, text: 'TXT_VAL_RCPG_NOT_IN_SEMESTR_NO_ACTIONS', description: 'TXT_DESC_RCPG_NOT_IN_SEMESTR_NO_ACTIONS' },\n { id: 14, text: 'TXT_VAL_RCPG_NOT_IN_SEMESTR_NO_ACTIONS_ATTENDING_LAST_ONE', description: 'TXT_DESC_RCPG_NOT_IN_SEMESTR_NO_ACTIONS_ATTENDING_LAST_ONE' },\n { id: 15, text: 'TXT_VAL_RCPG_ALL_AT_DATE', description: 'TXT_DESC_RCPG_ALL_AT_DATE' },\n { id: 16, text: 'TXT_VAL_RCPG_STUDENT', description: 'TXT_DESC_RCPG_STUDENT' },\n { id: 18, text: 'TXT_VAL_RCPG_ALL', description: 'TXT_DESC_RCPG_ALL' },\n ]\n });\n\n elm.on('change', function (event) {\n scope.$apply(function () {\n controller.$setViewValue(event.val);\n });\n });\n\n scope.$watch(attrs.ngModel, function (current, old) {\n $(elm).select2('val', current);\n }, true);\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n if (attrs.ngEnable) {\n scope.$watch(attrs.ngEnable, function (newVal) {\n elm.select2('enable', !!newVal);\n });\n }\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbRecipientList', function () {\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n scope: {\n ngModel: '=',\n wbAutoSize: '='\n },\n template:\n '
' +\n '
' +\n '' +\n '' +\n '
' +\n '
',\n link: function (scope, element, attr, ctrl) {\n scope.removeItem = function (item) {\n if (!scope.ngModel || !item) {\n return;\n }\n\n var idx = scope.ngModel.indexOf(item);\n if (idx !== -1) {\n scope.ngModel.splice(idx, 1);\n }\n }\n }\n }\n});","wbApp.filter('emailGroupStatus', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_EMAIL_GROUP_PROCESSING');\n case 1:\n return $translate.instant('TXT_EMAIL_GROUP_ALL_DELIVERED');\n case 2:\n return $translate.instant('TXT_EMAIL_GROUP_PARTIALLY_DELIVERED');\n case 3:\n return $translate.instant('TXT_EMAIL_GROUP_NOT_DELIVERED');\n default:\n return '';\n }\n };\n}]);\n\nwbApp.filter('emailStatus', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0: // NotSentToSendgridWillRetry\n return $translate.instant('TXT_EMAIL_NOT_SENT_TO_GW_WILL_RETRY');\n case 1: // NotSentToSendgridWillNotRetry\n return $translate.instant('TXT_EMAIL_NOT_SENT_TO_GW_WILL_NOT_RETRY');\n case 2: // SentToSendGrid\n return $translate.instant('TXT_EMAIL_NOT_SENT_TO_GW');\n case 3: // Processed\n return $translate.instant('TXT_EMAIL_PROCESSED');\n case 4: // Dropped\n return $translate.instant('TXT_EMAIL_DROPPED');\n case 5: // Delivered\n return $translate.instant('TXT_EMAIL_DELIVERED');\n case 6: // Deferred\n return $translate.instant('TXT_EMAIL_DEFERRED');\n case 7: // Bounce\n return $translate.instant('TXT_EMAIL_BOUNCE');\n default:\n return 'Unknown';\n }\n };\n}]);\n\n\n","'use strict';\n\nwbApp.factory('emailAttachmentsSvc', ['$resource', '$translate', '$q', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, $q, notificationSvc, repositorySvc) {\n\n var EamilAttachments = $resource('/restapi/email-attachments/:id', {}, {\n 'getFiles': { method: 'GET', isArray: true, url: '/restapi/email-attachments/:id' },\n 'deleteFile': { method: 'DELETE', url: '/restapi/email-attachments/:id' },\n 'getUploadUrl': { method: 'POST', url: '/restapi/email-attachments/create-upload-url/:id' },\n });\n\n function getFiles(documentTemplateType, emailCategory, localeAlias) {\n return repositorySvc.customGet(\n 'getFiles',\n EamilAttachments,\n {\n id: documentTemplateType,\n emailCategory: emailCategory,\n localeAlias: localeAlias || 'CS'\n });\n }\n\n function deleteFile(documentTemplateType, emailCategory, fileName, localeAlias) {\n return repositorySvc.customPostWithParams(\n 'deleteFile',\n EamilAttachments,\n {\n id: documentTemplateType,\n fileName: fileName,\n emailCategory: emailCategory,\n localeAlias: localeAlias || 'CS'\n },\n null,\n null,\n null,\n true);\n }\n\n function getUploadUrl(documentTemplateType, emailCategory, fileName, localeAlias) {\n return repositorySvc.customPostWithParams(\n 'getUploadUrl',\n EamilAttachments,\n {\n id: documentTemplateType,\n fileName: fileName,\n emailCategory: emailCategory,\n localeAlias: localeAlias || 'CS'\n },\n null,\n null,\n null,\n true);\n }\n\n return {\n getFiles: getFiles,\n deleteFile: deleteFile,\n getUploadUrl: getUploadUrl\n }\n }]);","'use strict';\n\nwbApp.factory('emailTemplatesSvc', ['$resource', '$translate', '$q', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, $q, notificationSvc, repositorySvc) {\n\n var EmailTemplates = $resource('/restapi/email-templates', {}, {\n 'getAllInfo': { method: 'GET', url: '/restapi/email-templates/info', isArray: true },\n 'getById': { method: 'GET', url: '/restapi/email-templates/:id' },\n 'update': { method: 'PUT', url: '/restapi/email-templates/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/email-templates/:id' },\n 'preview': { method: 'POST', url: '/restapi/email-templates/preview' },\n });\n\n var allInfos;\n\n function getAllInfo(localeAlias, reload) {\n if (!allInfos || reload) {\n allInfos = repositorySvc.customGet('getAllInfo', EmailTemplates, {\n localeAlias: localeAlias || 'CS'\n });\n }\n\n return allInfos;\n\n }\n\n function getInfoById(documentTemplateType, emailCategory, localeAlias) {\n\n return $q(function (resolve, reject) {\n var infos = getAllInfo(localeAlias);\n infos.$promise.then(function (data) {\n resolve(_.find(data, { 'documentTemplateType': documentTemplateType, 'emailCategory': emailCategory }));\n }, reject);\n });\n }\n\n function getById(documentTemplateType, emailCategory, localeAlias) {\n return repositorySvc.customGet('getById', EmailTemplates, {\n id: documentTemplateType,\n emailCategory: emailCategory,\n localeAlias: localeAlias || 'CS'\n });\n }\n\n function update(model) {\n return repositorySvc.customPutWithParams(\n 'update',\n EmailTemplates,\n {\n id: model.documentTemplateType,\n emailCategory: model.emailCategory,\n localeAlias: model.localeAlias\n },\n model);\n }\n\n function preview(model) {\n return repositorySvc.customPost(\n 'preview',\n EmailTemplates,\n model,\n null /* successCallback */,\n null /* errorCallback */,\n true /* doNotShowSuccessNotification */);\n }\n\n\n function remove(documentTemplateType, emailCategory, localeAlias) {\n return repositorySvc.customDelete(\n 'delete',\n EmailTemplates,\n {\n id: documentTemplateType,\n emailCategory: emailCategory,\n localeAlias: localeAlias || 'CS'\n });\n }\n\n return {\n getAllInfo: getAllInfo,\n getById: getById,\n update: update,\n remove: remove,\n preview: preview,\n getInfoById: getInfoById\n }\n }]);","'use strict';\n\nwbApp.factory('messageTemplateSvc', ['$resource', '$http', '$q', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $http, $q, $translate, notificationSvc, repositorySvc) {\n\n var MessageTemplate = $resource('/restapi/custom-email-message-templates/:id', {}, {\n 'getById': { method: 'GET', url: '/restapi/custom-email-message-templates/:id' },\n 'getAllInfo': { method: 'GET', isArray: true, url: '/restapi/custom-email-message-templates/info' },\n 'insert': { method: 'POST', url: '/restapi/custom-email-message-templates' },\n 'update': { method: 'PUT', url: '/restapi/custom-email-message-templates/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/custom-email-message-templates/:id' },\n });\n\n function createNew() {\n var model = {\n id: null,\n recipients: [],\n name: null,\n subject: null,\n messageBody: null\n };\n\n return model;\n }\n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n MessageTemplate,\n model);\n }\n\n function remove(templateId) {\n return repositorySvc.customDelete(\n 'delete',\n MessageTemplate,\n { id: templateId });\n }\n\n function update(model) {\n return repositorySvc.customPutWithParams(\n 'update',\n MessageTemplate,\n { id: model.id },\n model);\n }\n\n function getById(templateId) {\n return repositorySvc.customGet('getById', MessageTemplate, { id: templateId });\n }\n\n function getAllInfo() {\n return repositorySvc.customGet('getAllInfo', MessageTemplate, {});\n }\n\n return {\n createNew: createNew,\n getById: getById,\n getAllInfo: getAllInfo,\n insert: insert,\n remove: remove,\n update: update,\n };\n }\n]);","'use strict';\n\nwbApp.factory('messagesSvc', ['$resource', '$http', '$q', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $http, $q, $translate, notificationSvc, repositorySvc) {\n\n var SmsHistory = $resource('/Api/Messages/:id', {}, {\n 'getSmsHistoryByDateRange': { method: 'GET', isArray: true, url: '/Api/Messages/GetSmsHistoryByDateRange' },\n });\n\n function sendEmail(recipientList, subject, messageBody, attachments) {\n var deferred = $q.defer();\n\n $http({\n method: 'POST',\n url: 'Api/Messages/SendEmail',\n data: {\n recipients: recipientList,\n subject: subject,\n messageBody: messageBody,\n attachments: attachments\n }\n })\n .success(function (data, status, headers, config) {\n deferred.resolve(data);\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_EMAIL_SEND_SUCCESS'));\n })\n .error(function (data, status, headers, config) {\n deferred.reject(data);\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_EMAIL_SEND_FAILURE'),\n notificationSvc.translateError(data));\n });\n\n return deferred.promise;\n }\n\n function sendSms(recipientList, smsText) {\n var deferred = $q.defer();\n\n $http({\n method: 'POST',\n url: 'Api/Messages/SendSms',\n data: {\n recipients: recipientList,\n messageBody: smsText\n }\n })\n .success(function (data, status, headers, config) {\n deferred.resolve(data);\n notificationSvc.notifyInfo(\n $translate.instant('TXT_ALERT_TITLE_SEND_SEND_SUCCESS'));\n })\n .error(function (data, status, headers, config) {\n deferred.reject(data);\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_SMS_SEND_FAILURE'),\n notificationSvc.translateError(data));\n });\n\n return deferred.promise;\n }\n\n function getSmsHistoryByDateRage(fromDate, toDate) {\n return repositorySvc.customGet(\n 'getSmsHistoryByDateRange',\n SmsHistory,\n {\n fromDate: moment(fromDate).toJSON(),\n toDate: moment(toDate).toJSON()\n });\n }\n\n return {\n sendEmail: sendEmail,\n sendSms: sendSms,\n getSmsHistoryByDateRage: getSmsHistoryByDateRage\n };\n }\n]);","'use strict';\n\nwbApp.factory('recipientSvc', ['$translate', '$filter', '$http', '$q', 'notificationSvc', 'semesterSvc', 'courseSvc', 'classroomSvc', 'compensationGroupSvc', 'studentSvc', 'userSvc',\n function ($translate, $filter, $http, $q, notificationSvc, semesterSvc, courseSvc, classroomSvc, compensationGroupSvc, studentSvc, userSvc) {\n\n function createRecipientModel() {\n function Recipient() {\n this.recipientGroupType = 1;\n this.activeOnly = true;\n this._name = null;\n }\n\n Recipient.prototype.getName = function () {\n\n if (this._name) {\n return this._name;\n }\n\n var groupType = parseInt(this.recipientGroupType);\n var str = \"{0} ({1})\";\n var str2 = \"{0} ({1} - {2})\";\n var me = this;\n\n switch (groupType) {\n case 1:\n me._name = $translate.instant('TXT_VAL_RCPG_USER');\n userSvc.getByIDAsync(me.userId).$promise.then(function (user) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_USER'), user.fullName);\n });\n break;\n case 2:\n me._name = $translate.instant('TXT_LOADING_DATA');\n courseSvc.getCourseAsync(parseInt(me.semesterId), parseInt(me.courseId)).then(function (course) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_COURSE'), $filter('courseFullName')(course));\n }); \n break;\n case 3:\n me._name = $translate.instant('TXT_LOADING_DATA');\n courseSvc.getCourseAsync(parseInt(me.semesterId), parseInt(me.courseId)).then(function (course) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_COURSE_LESSON'), $filter('courseFullName')(course));\n }); \n break;\n case 4:\n me._name = $translate.instant('TXT_LOADING_DATA');\n $q.all([\n classroomSvc.getAsync(parseInt(me.classroomId)),\n semesterSvc.getAsync(parseInt(me.semesterId))]\n ).then(function (allData) {\n me._name = str2.f($translate.instant('TXT_VAL_RCPG_CLASSROOM'), allData[0].name, allData[1].name);\n });\n break;\n case 5:\n me._name = $translate.instant('TXT_LOADING_DATA');\n classroomSvc.getAsync(parseInt(me.classroomId)).then(function (classroom) {\n me._name = str2.f($translate.instant('TXT_VAL_RCPG_CLASSROOM_AT_DATE'), classroom.name, $filter('date')(me.toDate, 'dd.MM.yy'));\n });\n break;\n case 6:\n me._name = $translate.instant('TXT_LOADING_DATA');\n compensationGroupSvc.getAsync(parseInt(me.compensationGroupId)).then(function (compensationGroup) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_COMPENSATION_GROUP'), compensationGroup.name);\n });\n break;\n case 7:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_ALL_COURSES'), semester.name);\n });\n break;\n case 8:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_ALL_ACTIONS'), semester.name);\n }); \n break;\n case 9:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_ALL_ACTIONS_WITHOUT_COURSES'), semester.name);\n });\n \n break;\n case 10:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_SEMESTER'), semester.name);\n }); \n break;\n case 11:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_NOT_IN_SEMESTER'), semester.name);\n });\n break;\n case 12:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_NOT_IN_SEMESTER_ATTENDING_LAST_ONE'), semester.name);\n });\n \n break;\n case 13:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_NOT_IN_SEMESTR_NO_ACTIONS'), semester.name);\n });\n break;\n case 14:\n me._name = $translate.instant('TXT_LOADING_DATA');\n semesterSvc.getAsync(parseInt(me.semesterId)).then(function (semester) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_NOT_IN_SEMESTR_NO_ACTIONS_ATTENDING_LAST_ONE'), semester.name);\n }); \n break;\n case 15:\n me._name = str.f($translate.instant('TXT_VAL_RCPG_ALL_AT_DATE'), $filter('date')(me.toDate, 'dd.MM.yy'));\n break;\n case 16:\n me._name = $translate.instant('TXT_VAL_RCPG_STUDENT');\n studentSvc.getByIDAsync(parseInt(me.studentId)).$promise.then(function (student) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_STUDENT'), student.fullName);\n });\n break;\n case 17:\n me._name = $translate.instant('TXT_VAL_RCPG_STUDENT');\n courseSvc.getActionAsync(parseInt(me.semesterId), parseInt(me.courseId)).then(function (course) {\n me._name = str.f($translate.instant('TXT_VAL_RCPG_ACTION'), $filter('courseFullName')(course));\n });\n break;\n case 18:\n me._name = $translate.instant('TXT_VAL_RCPG_ALL');\n break;\n default:\n me._name = '== error ==';\n break;\n }\n\n return this._name;\n }\n\n Object.defineProperty(Recipient.prototype, 'name', {\n enumerable: true, configurable: true,\n get: function () { return this.getName(); }\n });\n\n return new Recipient();\n }\n\n function getAddressList(recipientList) {\n var deferred = $q.defer();\n\n $http({\n method: 'POST',\n url: 'Api/Messages/ResolveRecipients',\n data: recipientList\n })\n .success(function (data, status, headers, config) {\n\n var list = '';\n for (var i = 0; i < data.length; i++) {\n list += data[i].fullName + ' <' + data[i].emailAddress + '>';\n if (i < data.length - 1) {\n list += ';';\n }\n }\n\n deferred.resolve(list);\n })\n .error(function (data, status, headers, config) {\n deferred.reject(data);\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_GET_ERROR'),\n notificationSvc.translateError(data));\n });\n\n return deferred.promise;\n }\n\n return {\n createRecipientModel: createRecipientModel,\n getAddressList: getAddressList\n }\n}]);","'use strict';\n\nwbApp.factory('sentEmailsSvc', ['$resource', '$translate', '$q', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, $q, notificationSvc, repositorySvc) {\n\n var Emails = $resource('/restapi/emails', {}, {\n 'query': { method: 'GET', isArray: true },\n 'getSummary': { method: 'GET', isArray: false, url: '/restapi/emails' },\n 'getDetail': { method: 'GET', isArray: false, url: '/restapi/emails/:id' },\n 'getStatistics': { method: 'GET', isArray: true, url: '/restapi/emails/statistics/range' }\n });\n\n function getSummary() {\n var deferred = $q.defer();\n var result = [];\n result.$promise = deferred.promise;\n\n repositorySvc.customGet('getSummary', Emails)\n .$promise.then(function (data) {\n result.push.apply(result, data.emails);\n deferred.resolve(result);\n },\n function (error) {\n deferred.reject(errorResult);\n });\n\n return result;\n }\n\n function getDetail(id) {\n return repositorySvc.customGet('getDetail', Emails, { id: id });\n }\n\n function getStatistics(fromDate, toDate) {\n\n var deffered = $q.defer();\n\n var td = repositorySvc.customGet(\n 'getStatistics',\n Emails,\n {\n fromDateUtc: fromDate,\n toDateUtc: toDate\n });\n\n td.$promise.then(function (data) {\n\n var cols = [];\n cols.push({\n id: 'date',\n label: 'Date',\n type: 'date',\n p: {}\n });\n\n cols.push({\n id: 'c_count',\n label: $translate.instant('TXT_DAILY_SUM'),\n type: 'number',\n p: {}\n });\n\n cols.push({\n id: 'c_runningSum',\n label: $translate.instant('TXT_MONTH_RUNNING_SUM'),\n type: 'number',\n p: {}\n });\n\n cols.push({\n id: 'c_freeLimit',\n label: $translate.instant('TXT_FREE_LIMIT'),\n type: 'number',\n p: {}\n });\n\n var rows = [];\n for (var d = 0; d < data.length; d++) {\n var day = data[d];\n var o = {\n c: [\n { v: moment(day.day).toDate() },\n { v: day.count },\n { v: day.runningSum },\n { v: 2000 }\n ]\n };\n\n rows.push(o);\n }\n\n deffered.resolve({\n cols: cols,\n rows: rows\n });\n\n }, function (reason) {\n deffered.reject(reason);\n });\n\n return deffered.promise;\n }\n\n return {\n getSummary: getSummary,\n getDetail: getDetail,\n getStatistics: getStatistics\n }\n }]);","wbApp.controller('AsideCtrl', ['$scope', '$timeout', 'securitySvc', 'previewInterestSvc', 'semesterSvc', 'tenantSettingSvc', 'tenantInfo', 'uiUtilsSvc',\n function ($scope, $timeout, securitySvc, previewInterestSvc, semesterSvc, tenantSettingSvc, tenantInfo, uiUtilsSvc) {\n\n $scope.roles = securitySvc.roles;\n\n $scope.user = securitySvc.loggedInUser();\n $scope.scrollbarWidth = uiUtilsSvc.getScrollbarWidth()\n\n var activeSemesterPromise = semesterSvc.getActiveAsync();\n activeSemesterPromise.then(function (activeSemester) {\n if (activeSemester) {\n if (securitySvc.isInRole('PreviewHours')) {\n $scope.previewInterests = previewInterestSvc.getAll(activeSemester.id);\n }\n }\n });\n \n $scope.allowDiscounts = tenantSettingSvc.settings.allowDiscounts;\n $scope.enableKindergartenSupport = tenantSettingSvc.settings.enableKindergartenSupport;\n $scope.enableRfidCardSupport = tenantSettingSvc.settings.enableRfidCardSupport;\n $scope.isFranchiseCentral = tenantInfo.isFranchiseCentral;\n $scope.isFranchiseCentralAndSupportSubjectLicenses = tenantInfo.isFranchiseCentral && tenantInfo.franchiseCentralSettings.supportSubjectLicenses;\n\n $scope.isFranchise = !!_.find(tenantInfo.franchiseCentrals, { isActive: true });\n $scope.enableDataExportHistory = tenantSettingSvc.settings.enableDataExport;\n $scope.enableOnlinePayments = tenantSettingSvc.settings.enablePaymentGateways;\n $scope.createTaxDocuments = tenantSettingSvc.settings.createTaxDocuments;\n $scope.enableReservationSupport = tenantSettingSvc.settings.enableReservationSupport;\n $scope.enableOnlineMeetings = tenantSettingSvc.settings.enableZoomIntegration;\n $scope.enableRentSupport = tenantSettingSvc.settings.enableRentSupport;\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n\n $scope.minifyAsideClick = function () {\n $('body').toggleClass(\"minified\");\n $timeout(function () {\n $('body').resize();\n }, 100);\n }\n\n }]);","wbApp.controller('HeaderCtrl', ['$scope', '$timeout', '$translate', 'languageService', 'messageBoxSvc', 'securitySvc', '$modal',\n function ($scope, $timeout, $translate, languageService, messageBoxSvc, securitySvc, $modal) {\n\n $scope.currentLanguage = languageService.currentLanguage();\n $scope.isAuthenticated = securitySvc.isAuthenticated();\n\n $scope.changeLanguage = function (langKey) {\n languageService.currentLangKey(langKey);\n location.reload();\n //$scope.currentLanguage = languageService.currentLanguage();\n //$scope.supportedLanguagesDropdown.length = 0;\n //fillLanguagesDropdown(languageService.supportedLanguages);\n };\n\n $scope.supportedLanguagesDropdown = [];\n fillLanguagesDropdown(languageService.supportedLanguages)\n\n $scope.toggleAssideNavigation = function () {\n $('body').toggleClass(\"hidden-menu\");\n $timeout(function () {\n $('body').resize();\n }, 100);\n }\n\n $scope.signOut = function () {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRMATION',\n message: 'TXT_SIGN_OUT_CONFIRMATION',\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_CMD_SIGN_OUT',\n callback: function () { securitySvc.adminLogout(); }\n }]\n });\n }\n\n\n function fillLanguagesDropdown(supportedLanguages) {\n angular.forEach(supportedLanguages, function (lang, key) {\n var item = {\n \"text\": \"  \" + $translate.instant(lang.nameResID),\n \"click\": 'changeLanguage(\"' + lang.key + '\")'\n }\n this.push(item);\n }, $scope.supportedLanguagesDropdown);\n }\n\n var signInDialogPromise = $modal({\n templateUrl: 'sign-in/sign-in-dialog.html',\n show: false,\n scope: $scope.$new()\n });\n \n $scope.signIn = function() {\n signInDialogPromise.$promise.then(function () {\n signInDialogPromise.$scope.isAdmin = true;\n signInDialogPromise.show();\n }); \n }\n \n if (!$scope.isAuthenticated) {\n signInDialogPromise.$promise.then(function () {\n signInDialogPromise.$scope.isAdmin = true;\n signInDialogPromise.show();\n });\n }\n\n\n\n }]);","'use strict';\n\nwbApp.controller('PreviewHoursCtrl', ['$q', '$scope', '$modal', '$translate', '$filter', 'previewHoursSvc', 'semesterSvc', 'stateCodesSvc', 'gridSortSvc',\nfunction ($q, $scope, $modal, $translate, $filter, previewHoursSvc, semesterSvc, stateCodesSvc, gridSortSvc) {\n\n var activeSemesterPromise = semesterSvc.getDefaultAsync();\n var stateCodes = stateCodesSvc.getAllAsync();\n\n $q.all([activeSemesterPromise, stateCodes.$promise]).then(function (data) {\r\n var activeSemester = data[0];\r\n if (activeSemester) {\r\n $scope.semesterID = activeSemester.id;\r\n } else {\r\n $scope.semesterID = null;\r\n }\r\n\r\n $scope.previewHours = previewHoursSvc.getAllForClassroomAsync(\n activeSemester != null ? activeSemester.id : null,\n $scope.classroomID);\r\n\r\n $scope.selectedRow = null;\r\n });\n\n $scope.$on('refreshData', function (e, data) {\r\n if ($scope.semesterID) {\r\n $scope.previewHours = previewHoursSvc.getAllForClassroomAsync($scope.semesterID, $scope.classroomID, true);\n $scope.selectedRow = null;\r\n }\r\n });\n\n $scope.onSemesterChange = function (semesterId) {\n if (semesterId) {\n $scope.previewHours = previewHoursSvc.getAllForClassroomAsync(semesterId, $scope.classroomID);\n $scope.selectedRow = null;\n }\n }\n\n $scope.onClassroomChange = function (classroomID) {\n if ($scope.semesterID) {\n $scope.previewHours = previewHoursSvc.getAllForClassroomAsync($scope.semesterID, classroomID);\n $scope.selectedRow = null;\n }\n }\n\n $scope.gridSettings = {\r\n name: 'previewHours',\n columns: [\n {\r\n dataField: 'student', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '140px',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'student') },\r\n sortOrder: 'desc'\r\n },\n {\r\n dataField: 'parent', caption: $translate.instant('TXT_LBL_PARENT'), dataType: 'string', width: '140px',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'parent') }\r\n },\n {\r\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.phone);\r\n },\n width: '120px'\r\n },\n { dataField: 'course', caption: $translate.instant(\"TXT_LBL_COURSE\"), dataType: 'string' }, \n { dataField: 'lesson', caption: $translate.instant('TXT_LBL_LESSON'), dataType: 'date', format: { raw: \"dd.MM.yy HH:mm\" }, width: '110px' },\n {\r\n dataField: 'status',\n caption: $translate.instant('TXT_LBL_PRESENT'),\n dataType: 'string',\r\n alignment: 'left',\r\n calculateCellValue: function (rowData) {\r\n return $filter('attendanceStatus')(rowData.status);\r\n },\r\n width: '100px'\r\n },\n { dataField: 'nextContact', caption: $translate.instant('TXT_LBL_NEXT_CONTACT'), dataType: 'date', format: { raw: \"dd.MM.yy HH:mm\" }, width: '110px' },\n { dataField: 'note', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\n {\r\n dataField: 'regCourseID',\n caption: $translate.instant('TXT_LBL_REG'),\r\n dataType: 'boolean',\r\n calculateCellValue: function (rowData) {\r\n return !!rowData.regCourseID;\r\n },\r\n width: '60px'\r\n },\n {\r\n dataField: 'state',\n caption: $translate.instant('TXT_LBL_STATE'),\n dataType: 'string',\r\n alignment: 'left',\r\n calculateCellValue: function (rowData) {\r\n return $filter('previewStateCode')(rowData.state);\r\n },\r\n width: '100px'\r\n },\n { dataField: 'referenceSource', caption: $translate.instant('TXT_LAB_REFERENCE_SOURCE'), dataType: 'string', width: '130px', visible: true },\n ],\r\n customCommands: [{\r\n text: $translate.instant('TXT_MENU_REGISTER_ON_COURSE'),\r\n isVisible: function (selected) { return !!selected && !selected.regCourseID },\r\n callback: function (row) { $scope.onRegisterOnCourse(row); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_ATTENDANCE_EXCUSE'),\r\n isVisible: function (selected) { return !!selected && selected.status === 0 },\r\n callback: function (row) { $scope.onAttendanceExcuse(row); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_ATTENDANCE_BOOK_AGAIN'),\r\n isVisible: function (selected) { return !!selected && selected.status !== 0 },\r\n callback: function (row) { $scope.onAttendanceBookAgain(row); }\r\n }],\r\n onExporting: function (e) {\r\n e.component.beginUpdate();\r\n prepareGridForExport(e.component);\r\n },\r\n onExported: function (e) {\r\n cleanGridAfterExport(e.component);\r\n e.component.endUpdate();\r\n },\r\n }\n\n var origColLength = -1;\n\n function prepareGridForExport(grid) {\n for (var i = origColLength + 1; i < grid.columnCount(); i++) {\r\n grid.columnOption(i, \"visible\", true);\r\n }\n }\n\n function cleanGridAfterExport(grid) {\r\n for (var i = origColLength + 1; i < grid.columnCount(); i++) {\r\n grid.columnOption(i, \"visible\", false);\r\n }\r\n }\n\n function extendGrid() {\r\n origColLength = $scope.gridSettings.columns.length;\r\n stateCodes.$promise.then(function (result) {\r\n for (var idx = 0; idx < stateCodes.length; idx++) {\r\n var stateCodeName = stateCodes[idx].name;\n $scope.gridSettings.columns.push({\r\n dataField: 'state',\n caption: stateCodeName,\n dataType: 'boolean',\r\n alignment: 'left',\r\n calculateCellValue: function (rowData) {\r\n var stateModel = stateCodesSvc.get(rowData.state);\r\n return !!stateModel && stateModel.name == this.caption;\r\n },\r\n width: '50px',\r\n visible: false\r\n });\r\n }\r\n });\r\n }\n\n extendGrid();\n\n //#region Detail\n\n $scope.previewHoursDetail = { state: 0, nextContact: new Date(), note: \"\" };\n\n $scope.onRowEdit = function (data) {\n $scope.previewHoursDetail = angular.copy(data);\n\n // TODO: remove me when datepicker is fixed\n $scope.previewHoursDetail.nextContact = !!data.nextContact ? data.nextContact : new Date();\n\n $scope.previewHoursDetailOrig = angular.copy($scope.previewHoursDetail);\n \n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.detailError = null;\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.previewHoursDetailOrig);\n }\n\n $scope.onPreviewHoursDetailSave = function (data) {\n previewHoursSvc.update(data, function (successResult) {\n detailDialogPromise.hide();\n }, function (errorResult) {\n $scope.detailError = errorResult;\n });\n }\n\n $scope.onRowDelete = function (data) {\n previewHoursSvc.remove(data);\n }\n\n //#endregion\n\n //#region Register on course\n\n $scope.previewHoursRegOnCourse = {};\n $scope.previewHoursRegOnCourseOrig;\n\n $scope.onRegisterOnCourse = function (data) {\n $scope.previewHoursRegOnCourse.regCourseSemesterID = data.regCourseSemesterID != null\n ? data.regCourseSemesterID\n : $scope.semesterID;\n $scope.previewHoursRegOnCourse.regCourseID = data.regCourseID != null \n ? data.regCourseID\n : $scope.selectedRow.courseID;\n\n $scope.previewHoursRegOnCourseOrig = angular.copy($scope.previewHoursRegOnCourse);\n\n detailRegisterOncoursePromise.$promise.then(function () {\n $scope.registerOnCourseError = null;\n detailRegisterOncoursePromise.show();\n });\n }\n\n $scope.onRegisterOnCourseSave = function (data) {\n var payload = angular.copy(data);\n\n payload.studentID = $scope.selectedRow.studentID;\n payload.courseScheduleID = $scope.selectedRow.courseScheduleID;\n $scope.registerOnCourseError = null;\n\n previewHoursSvc.registerOnCourse(payload, function (successResult) {\n detailRegisterOncoursePromise.hide();\n }, function (errorResult) {\n $scope.registerOnCourseError = errorResult;\n });\n }\n\n //#endregion\n\n //#region Book preview\n\n $scope.previewHoursBookPreview = {};\n $scope.previewHoursBookPreviewOrig;\n\n $scope.onBookPreview = function (data) {\n\n $scope.previewHoursBookPreview.studentID = null;\n $scope.previewHoursBookPreview.courseID = null;\n $scope.previewHoursBookPreview.courseScheduleID = null;\n $scope.previewHoursBookPreview.semesterID = $scope.semesterID;\n\n $scope.previewHoursBookPreviewOrig = angular.copy($scope.previewHoursBookPreview);\n\n detailBookPreviewPromise.$promise.then(function () {\n $scope.bookPreviewError = null;\n detailBookPreviewPromise.show();\n });\n }\n\n $scope.bookPreviewIsUnchanged = function (data) {\n return angular.equals(data, $scope.previewHoursBookPreviewOrig);\n }\n\n $scope.onBookPreviewSave = function (data) {\n previewHoursSvc.insert(data, function (successResult) {\n detailBookPreviewPromise.hide();\n }, function (errorResult) {\n $scope.bookPreviewError = errorResult;\n });\n }\n\n //#endregion\n\n //#region Attendance Excuse\n\n $scope.onAttendanceExcuse = function (data) {\n $scope.attendanceExcuseData = angular.copy(data);\n\n dlgExcuseConfirmationPromise.$promise.then(function () {\n dlgExcuseConfirmationPromise.show();\n });\n }\n\n var dlgExcuseConfirmationPromise = $modal({\n templateUrl: 'preview-hours/preview-hours-confirm-excuse-dlg.html',\n show: false,\n scope: $scope\n });\n\n $scope.onConfirmExcuse = function (data) {\n previewHoursSvc.excuseFromLesson(data);\n }\n\n //#endregion\n\n //#region Attendance Book Again\n\n $scope.onAttendanceBookAgain = function (data) {\n $scope.attendanceBookAgainData = angular.copy(data);\n\n dlgReBookConfirmationPromise.$promise.then(function () {\n dlgReBookConfirmationPromise.show();\n });\n }\n\n $scope.onConfirmBookAgain = function (data) {\n previewHoursSvc.bookOnLessonAgain(data);\n }\n\n var dlgReBookConfirmationPromise = $modal({\n templateUrl: 'preview-hours/preview-hours-confirm-rebook-dlg.html',\n show: false,\n scope: $scope\n });\n\n //#endregion\n\n $scope.selectedRow = {};\n\n $scope.onRowSelected = function (data) {\n $scope.selectedRow = data;\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"preview-hours/detail-tabs/home.html\"\n },\n {\n title: \"TXT_NOTE\",\n template: \"preview-hours/detail-tabs/note.html\"\n },\n {\r\n title: \"TXT_SUCCESS_STATS\",\n template: \"preview-hours/detail-tabs/success-stats.html\"\r\n }\n ];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\r\n });\n\n var detailBookPreviewPromise = $modal({\n templateUrl: 'preview-hours/preview-hours-book-preview.html',\n show: false,\n scope: $scope\n });\n\n var detailRegisterOncoursePromise = $modal({\n templateUrl: 'preview-hours/preview-hours-register-on-course.html',\n show: false,\n scope: $scope\n });\n\n var detailDialogPromise = $modal({\n templateUrl: 'preview-hours/preview-hours-detail.html',\n show: false,\n scope: $scope\n });\n\n function getStateCodesNames(stateCodes) {\n var ret = [];\n stateCodes.$promise.then(function (result) {\n for (var idx = 0; idx < stateCodes.length; idx++) {\n var stateCode = stateCodes[idx];\n ret.push(stateCode.name);\n }\n });\n return ret;\n }\n}]);","wbApp.controller('PreviewHoursSucessSummaryCtrl', ['$scope', '$translate', '$timeout', 'previewHoursSvc',\nfunction ($scope, $translate, $timeout, previewHoursSvc) {\n\n $scope.fromDate = moment().subtract(6, 'months').toDate();\n $scope.toDate = moment().add(1, 'day').toDate();\n\n $scope.stats = [];\n var isActive = false;\n var loaded = false;\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n if (!loaded) {\n loadData();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function loadData() {\n if ($scope.fromDate && $scope.toDate) {\n $scope.stats = previewHoursSvc.getPreviewHoursSuccessStats($scope.fromDate, $scope.toDate);\n $scope.stats.$promise.then(function(data)\n {\n $scope.previewHoursSuccessGraph.data = \n previewHoursSvc.getPreviewHoursSuccessGraph(data);\n })\n } else \n {\n $scope.stats = [];\n $scope.previewHoursSuccessGraph.data = \n previewHoursSvc.getPreviewHoursSuccessGraph([]);\n }\n }\n\n\n $scope.onDateRangeChanged = function () {\n loadData();\n }\n \n $scope.previewHoursSuccessGraph = {\n type: 'BarChart',\n data: previewHoursSvc.getPreviewHoursSuccessGraph([]),\n options: {\n displayExactValues: true, \n chartArea: { width: '90%', height: '70%' },\n legend: {\n position: 'top'\n },\n vAxis: {},\n hAxis: {},\n orientation: 'horizontal'\n }\n };\n\n\n $scope.previewHoursSuccessStatsGridSettings = {\n name: 'previewHoursSuccessStat',\n columns: [\n { dataField: 'reference', caption: $translate.instant(\"TXT_LBL_REFERENCE\"), dataType: 'string' },\n { dataField: 'noOfPreviewHours', caption: $translate.instant('TXT_PREVIEW_HOURS'), dataType: 'number', width: '70px' },\n { dataField: 'noOfRegistrationsInTheSameSemester', caption: $translate.instant('TXT_SAME_SEMESTER'), dataType: 'number', width: '70px' },\n { dataField: 'noOfRegistrationsInAnySemester', caption: $translate.instant('TXT_ANY_TIME'), dataType: 'number', width: '70px' },\n ]\n };\n\n}]);","'use strict';\n\nwbApp.controller('PreviewInterestCtrl', ['$scope', '$modal', '$q', 'semesterSvc', 'previewInterestSvc',\nfunction ($scope, $modal, $q, semesterSvc, previewInterestSvc) {\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n var activeSemesterPromise = semesterSvc.getDefaultAsync();\n // Wait for active semester\n activeSemesterPromise.then(function (activeSemester) {\n if (activeSemester) {\n $scope.semesterID = activeSemester.id;\n } else {\n $scope.semesterID = null;\n }\n\n $scope.previewInterests = previewInterestSvc.getAll(\n activeSemester != null ? activeSemester.id : null);\n });\n\n $scope.onSemesterChange = function (semesterId) {\n if (semesterId) {\n $scope.previewInterests = previewInterestSvc.getAll(semesterId);\n $scope.selectedRow = null;\n }\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedRow = data;\n }\n\n $scope.gridOptions = {\n sortInfo: { fields: ['student'], directions: ['dsc'] },\n columnDefs: [{ field: 'student', displayName: \"TXT_LBL_STUDENT\", width: '140px' },\n { field: 'course', displayName: \"TXT_LBL_COURSE\" },\n { field: 'lesson', displayName: \"TXT_LBL_LESSON\", width: '110px', cellFilter: \"date:'short'\" },\n { field: 'createdAt', displayName: \"TXT_LBL_CREATED_AT\", width: '110px', cellFilter: \"date:'short'\" }\n ]\n };\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"preview-interest/detail-tabs/home.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.onRowSelected = function (data) {\n $scope.selectedRow = data;\n }\n\n $scope.onRowEdit = function (data) {\n $scope.previewInterestDetail = angular.copy(data);\n\n $scope.previewInterestDetail.semesterID = $scope.semesterID;\n $scope.previewInterestDetail.courseID = data.courseID;\n $scope.previewInterestDetail.courseScheduleID = data.courseScheduleID;\n $scope.previewInterestDetail.interestID = data.id;\n\n $scope.previewInterestDetailOrig = angular.copy($scope.previewInterestDetail);\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.onPreviewInterestDetailSave = function (data) {\n \n $scope.detailError = null;\n\n previewInterestSvc.bookLesson(data,\n function (successResult) {\n detailDialogPromise.hide();\n }, function (errorResult) {\n $scope.detailError = errorResult;\n });\n }\n\n $scope.detailError = null;\n\n var detailDialogPromise = $modal({\n templateUrl: 'preview-hours/preview-interest-detail.html',\n show: false,\n scope: $scope\n });\n\n}]);","'use strict';\n\nwbApp.controller('StateCodesCtrl', ['$scope', '$modal', 'stateCodesSvc',\nfunction ($scope, $modal, stateCodesSvc) {\n \n $scope.stateCodes = stateCodesSvc.getAllAsync();\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", width: '140px' },\n { field: 'description', displayName: \"TXT_LBL_DESCRIPTION\" }]\n };\n\n $scope.stateCodeDetail = { name: \"\", description: \"\" };\n $scope.stateCodeDetailOrig;\n\n $scope.onRowEdit = function (data) {\n $scope.stateCodeDetail.id = data.id;\n $scope.stateCodeDetail.name = data.name;\n $scope.stateCodeDetail.description = data.description;\n\n $scope.stateCodeDetailOrig = angular.copy($scope.stateCodeDetail);\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.detailError = null;\n\n $scope.onRowAdd = function () {\n $scope.stateCodeDetail.id = -1;\n $scope.stateCodeDetail.name = \"\";\n $scope.stateCodeDetail.description = \"\";\n\n $scope.stateCodeDetailOrig = angular.copy($scope.stateCodeDetail);\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n stateCodesSvc.remove(data);\n }\n\n $scope.onStateCodeDetailSave = function (data) {\n stateCodesSvc.save(data, function (successResult) {\n detailDialogPromise.hide();\n }, function (errorResult) {\n $scope.detailError = errorResult;\n });\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.stateCodeDetailOrig);\n };\n\n var detailDialogPromise = $modal({\n templateUrl: 'preview-hours/state-codes-detail.html',\n show: false,\n scope: $scope\n });\n}]);","'use strict';\r\n\r\nwbApp.controller('MembershipCtrl', ['$scope', '$modal', '$translate', '$filter', '$window', 'membershipSvc', 'membershipStudentSvc', 'securitySvc',\r\n function ($scope, $modal, $translate, $filter, $window, membershipSvc, membershipStudentSvc, securitySvc) {\r\n\r\n $scope.memberships = membershipSvc.getAllAsync();\r\n\r\n $scope.$on('refreshData', function (e, data) {\n $scope.memberships = membershipSvc.getAllAsync(true);\n setSelectedMembership(null);\n });\r\n\r\n $scope.gridSettings = {\r\n name: 'memberships',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc', width: '220px' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string'},\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px' },\n {\r\n dataField: 'discountPct', caption: $translate.instant('TXT_LBL_DISCOUNT_PCT'), dataType: 'number',\n format: function (value) {\n return $filter('wbPercent')(value);\n }, width: '70px'\r\n },\n { dataField: 'isMandatory', caption: $translate.instant('TXT_LBL_IS_MANDATORY'), dataType: 'boolean', width: '60px' },\n {\n dataField: 'validityPeriodInDays',\r\n caption: $translate.instant('TXT_LBL_ACTIVE'),\r\n dataType: 'boolean',\r\n calculateCellValue: function (rowData) {\r\n if (rowData.validityPeriodInDays) {\r\n return true;\r\n }\r\n\r\n var validFrom = moment(rowData.validFrom);\r\n var validTo = moment(rowData.validTo);\r\n\r\n return moment().isBetween(validFrom, validTo);\r\n },\r\n width: '60px'\r\n },\n ]\r\n }\r\n\r\n $scope.studentsGridSettings = {\r\n name: 'selectedMembershipStudents',\n shouldShowColumnChooser: true,\n columns: [\n { dataField: 'membershipStudentID', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n { dataField: 'student', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', sortOrder: 'desc' },\n { dataField: 'notes', caption: $translate.instant('TXT_LBL_NOTES'), dataType: 'string', visible: false },\n { dataField: 'birthday', caption: $translate.instant(\"TXT_LAB_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '100px'},\n { dataField: 'parent', caption: $translate.instant('TXT_LBL_PARENT'), dataType: 'string', width: '140px' },\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '240px' },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '120px'\n },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '90px' },\n {\r\n dataField: 'discountPct', caption: $translate.instant('TXT_LBL_DISCOUNT_PCT'), dataType: 'number',\n format: function (value) {\n return $filter('wbPercent')(value);\n }, width: '60px'\r\n },\n { dataField: 'createdAt', caption: $translate.instant(\"TXT_LBL_CREATED_AT\"), dataType: 'date', format: 'shortDateShortTime', width: '110px' },\n {\r\n dataField: 'invoiceID',\n caption: $translate.instant('TXT_LAB_INVOICE'),\r\n dataType: 'boolean',\r\n calculateCellValue: function (rowData) {\r\n return !!rowData.invoiceID;\r\n },\r\n width: '60px',\r\n visible: false\r\n },\n { dataField: 'isValid', caption: $translate.instant('TXT_LAB_VALID'), dataType: 'boolean', width: '60px' },\n ],\r\n shouldDisableAdd: function () { return !$scope.selectedRow.id; },\r\n customCommands: [{\r\n text: $translate.instant('TXT_MENU_PRINT_INVOICE'),\r\n isVisible: function (row) { return securitySvc.isInRole('Reports') && securitySvc.isInRole('CourseRegistration.PrintInvoice') && !!row.invoiceID; },\r\n callback: function (data) { onPrintInvoice(data.invoiceID); }\r\n }]\r\n }\r\n\r\n function onPrintInvoice(invoiceID) {\r\n $window.open('/Admin/Report/Invoice?ReportID=' + invoiceID + '&ReportIDType=1',\r\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\r\n\r\n //#region Membership Detail\r\n\r\n $scope.membershipDetail = {};\r\n $scope.membershipDetailOrig;\r\n\r\n $scope.onRowEdit = function (data) {\r\n $scope.membershipDetail = angular.copy(data);\r\n $scope.membershipDetailOrig = angular.copy(data);\r\n\r\n detailDialogPromise.$promise.then(function () {\r\n $scope.detailError = null;\r\n $scope.detailTabs.activeTab = 0;\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.detailError = null;\r\n\r\n $scope.onRowAdd = function () {\r\n\r\n $scope.membershipDetail.id = -1;\r\n $scope.membershipDetail.name = \"\";\r\n $scope.membershipDetail.description = \"\";\r\n $scope.membershipDetail.isMandatory = true;\r\n $scope.membershipDetail.isClientAssignable = true;\r\n $scope.membershipDetail.price = 0;\r\n $scope.membershipDetail.discountPct = 0;\r\n $scope.membershipDetail.validityPeriodInDays = null;\r\n $scope.membershipDetail.validFrom = undefined;\r\n $scope.membershipDetail.validTo = undefined;\r\n $scope.membershipDetail.applyToActions = false;\r\n $scope.membershipDetail.applyToCourses = true;\r\n\r\n $scope.membershipDetailOrig = angular.copy($scope.membershipDetail);\r\n\r\n detailDialogPromise.$promise.then(function () {\r\n $scope.detailError = null;\r\n $scope.detailTabs.activeTab = 0;\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n membershipSvc.remove(data, success);\r\n\r\n function success() {\r\n $scope.selectedRow = {};\r\n lastSelectedMembershipId = 0;\r\n }\r\n }\r\n\r\n $scope.selectedRow = {};\r\n $scope.selectedMembershipStudents = [];\r\n\r\n var lastSelectedMembershipId;\r\n\r\n function setSelectedMembership(data) {\r\n $scope.selectedRow = data || {};\r\n if (!data) {\r\n $scope.selectedMembershipStudents = [];\r\n } else {\r\n if (lastSelectedMembershipId !== data.id) {\r\n lastSelectedMembershipId = data.id;\r\n $scope.selectedMembershipStudents = membershipStudentSvc.GetAllByMembershipAsync(data.id);\r\n }\r\n }\r\n }\r\n\r\n $scope.onRowSelected = function (data) {\r\n setSelectedMembership(data);\r\n }\r\n\r\n $scope.onMembershipDetailSave = function (data) {\r\n membershipSvc.save(data, function (successResult) {\r\n detailDialogPromise.hide();\r\n }, function (errorResult) {\r\n $scope.detailError = errorResult;\r\n });\r\n }\r\n\r\n $scope.detailIsUnchanged = function (data) {\r\n return angular.equals(data, $scope.membershipDetailOrig);\r\n };\r\n\r\n $scope.detailTabs = [\r\n {\r\n title: 'TXT_MAIN',\r\n template: \"promo/membership-detail-main-tab.html\"\r\n },\r\n {\r\n title: \"TXT_PRICE_TAB\",\r\n template: \"promo/membership-detail-price-tab.html\"\r\n },\r\n {\r\n title: \"TXT_VALIDITY_TAB\",\r\n template: \"promo/membership-detail-validity-tab.html\"\r\n }\r\n ];\r\n\r\n $scope.detailTabs.activeTab = 0;\r\n\r\n var detailDialogPromise = $modal({\r\n templateUrl: 'promo/membership-detail.html',\r\n show: false,\r\n scope: $scope\r\n });\r\n\r\n //#endregion\r\n\r\n //#region Membership student detail\r\n\r\n $scope.membershipStudentDetail = {};\r\n $scope.membershipStudentDetailOrig;\r\n $scope.membershipStudentDetailError = null;\r\n\r\n $scope.onMSRowEdit = function (data) {\r\n $scope.membershipStudentDetail = angular.copy(data);\r\n $scope.membershipStudentDetailOrig = angular.copy(data);\r\n\r\n membershipStudentDetailDialogPromise.$promise.then(function () {\r\n $scope.membershipStudentDetailError = null;\r\n membershipStudentDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onMSRowAdd = function () {\r\n $scope.membershipStudentDetail.membershipStudentID = null;\r\n $scope.membershipStudentDetail.studentID = null;\r\n $scope.membershipStudentDetail.notes = null;\r\n $scope.membershipStudentDetail.membershipID = $scope.selectedRow.id;\r\n if ($scope.selectedRow.validityPeriodInDays) {\r\n $scope.membershipStudentDetail.validFrom = new Date();\r\n $scope.membershipStudentDetail.validTo = moment($scope.membershipStudentDetail.validFrom)\r\n .add('d', $scope.selectedRow.validityPeriodInDays)\r\n .toDate();\r\n } else {\r\n $scope.membershipStudentDetail.validFrom = $scope.selectedRow.validFrom;\r\n $scope.membershipStudentDetail.validTo = $scope.selectedRow.validTo;\r\n }\r\n $scope.membershipStudentDetail.price = 0;\r\n $scope.membershipStudentDetail.discountPct = $scope.selectedRow.discountPct;\r\n $scope.membershipStudentDetail.applyToCourses = $scope.selectedRow.applyToCourses;\r\n $scope.membershipStudentDetail.applyToActions = $scope.selectedRow.applyToActions;\r\n $scope.membershipStudentDetail.isNew = true;\r\n\r\n $scope.membershipStudentDetailOrig = angular.copy($scope.membershipStudentDetail);\r\n\r\n membershipStudentDetailDialogPromise.$promise.then(function () {\r\n $scope.membershipStudentDetailError = null;\r\n membershipStudentDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onMSRowDelete = function (data) {\r\n membershipStudentSvc.remove(data);\r\n }\r\n\r\n $scope.membershipStudentDetailIsUnchanged = function (data) {\r\n return angular.equals(data, $scope.membershipStudentDetailOrig);\r\n };\r\n\r\n $scope.onMembershipStudentDetailSave = function (data) {\r\n if (data.isNew) {\r\n membershipStudentSvc.insert(data, success, error);\r\n } else {\r\n membershipStudentSvc.update(data, success, error);\r\n }\r\n\r\n function success() {\r\n membershipStudentDetailDialogPromise.hide();\r\n }\r\n\r\n function error(errorResult) {\r\n $scope.membershipStudentDetailError = errorResult;\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n var membershipStudentDetailDialogPromise = $modal({\r\n templateUrl: 'promo/membership-student-detail.html',\r\n show: false,\r\n scope: $scope\r\n });\r\n\r\n //#endregion\r\n\r\n $scope.tabs = [\r\n {\r\n title: 'TXT_DETAIL',\r\n template: \"membership/detail-tabs/home.html\"\r\n },\r\n {\r\n title: 'TXT_LBL_STUDENTS',\r\n template: \"membership/detail-tabs/students.html\"\r\n }\r\n ];\r\n\r\n $scope.tabs.activeTab = 0;\r\n\r\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue });\r\n });\r\n\r\n}]);","'use strict';\n\nwbApp.filter('wbMembershipAppliesTo', ['$translate', function ($translate) {\n return function (input) {\n var result = '';\n if (input.applyToCourses) {\n result = $translate.instant('TXT_LBL_COURSES')\n }\n if (input.applyToActions) {\n if (result) {\n result += ', ' + $translate.instant('TXT_LBL_ACTIONS');\n } else {\n result = $translate.instant('TXT_LBL_ACTIONS');\n }\n }\n\n return result;\n }\n}]);","wbApp.controller('ItemTypesCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', 'itemTypeSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, itemTypeSvc) {\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = itemTypeSvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.itemTypes = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedItemType(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedItemType(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.itemTypes = [];\n setSelectedItemType(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'itemTypes',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '160px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string', width: '60px' },\n ]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedItemType(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = itemTypeSvc.createNew();\n detailDialogPromise.$scope.onItemTypeSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedItemType(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onItemTypeSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n itemTypeSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedItemType(itemType, refresh) {\n $scope.selectedItemType = itemType;\n $scope.$broadcast('itemTypeSelectionChanged', $scope.selectedItemType);\n }\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'rents/item-type/item-type-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('ItemTypesDetailCtrl', ['$scope', '$modal', 'itemTypeSvc',\nfunction ($scope, $modal, itemTypeSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n itemTypeSvc.insert(data)\n .$promise.then(success, error);\n } else {\n itemTypeSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onItemTypeSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n}]);\n","wbApp.controller('RentCategoriesCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', 'rentCategorySvc', 'rentCategoryGroupSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, rentCategorySvc, rentCategoryGroupSvc) {\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = rentCategorySvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.rentCategories = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentCategory(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedRentCategory(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.rentCategories = [];\n setSelectedRentCategory(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n var rentCategoryGroupDataSource = new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return rentCategoryGroupSvc.getAll().$promise;\n },\n byKey: function (e) {\n return rentCategoryGroupSvc.getById(e);\n },\n loadMode: 'processed'\n });\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'rentCategories',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'isActive', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '160px', sortOrder: 'asc' },\n { dataField: 'shortDescription', caption: $translate.instant('TXT_LBL_SHORT_DESCRIPTION'), dataType: 'string' },\n {\n dataField: 'rentCategoryGroupId',\n caption: $translate.instant('TXT_MENU_RENT_CATEGORY_GROUP'),\n dataType: 'string',\n width: '150px',\n visible: true,\n lookup: {\n allowClearing: true,\n dataSource: {\n store: rentCategoryGroupDataSource,\n pageSize: 20,\n paginate: true\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n },\n {\n dataField: 'itemSelectionType',\n caption: $translate.instant('TXT_LBL_ITEM_SELECTION_TYPE'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_ITEM_SELECTION_TYPE_MANUAL') },\n { id: 1, name: $translate.instant('TXT_ITEM_SELECTION_TYPE_AUTOMATIC') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '150px'\n },\n {\n dataField: 'rentingPeriodType',\n caption: $translate.instant('TXT_RENTING_PERIOD_TYPE'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_RENTING_PERIOD_TYPE_MINUTES') },\n { id: 1, name: $translate.instant('TXT_RENTING_PERIOD_TYPE_WHOLE_CALLENDAR_DAYS') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '150px'\n },\n ]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedRentCategory(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = rentCategorySvc.createNew();\n detailDialogPromise.$scope.onRentCategorySave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentCategory(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onRentCategorySave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowCopy = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.model.isNew = true;\n detailDialogPromise.$scope.model.id = null;\n detailDialogPromise.$scope.onRentCategorySave = function (model) {\n refreshData().then(function () {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentCategory(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n rentCategorySvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedRentCategory(rentCategory, refresh) {\n $scope.selectedRentCategory = rentCategory;\n $scope.$broadcast('rentCategorySelectionChanged', $scope.selectedRentCategory);\n }\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'rents/rent-category/rent-category-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('RentCategoriesDetailCtrl', ['$scope', '$modal', 'rentCategorySvc',\nfunction ($scope, $modal, rentCategorySvc) {\n\n function extendModel(model) {\n\n if (!(model.pickupTimeFrom == null)) {\n model.date_pickupTimeFrom = moment().startOf('day').add(model.pickupTimeFrom, 'm').toDate();\n }\n if (!(model.pickupTimeTo == null)) {\n model.date_pickupTimeTo = moment().startOf('day').add(model.pickupTimeTo, 'm').toDate();\n }\n if (!(model.returnTimeFrom == null)) {\n model.date_returnTimeFrom = moment().startOf('day').add(model.returnTimeFrom, 'm').toDate();\n }\n if (!(model.returnTimeTo == null)) {\n model.date_returnTimeTo = moment().startOf('day').add(model.returnTimeTo, 'm').toDate();\n }\n }\n\n extendModel($scope.model);\n\n $scope.modelOrig = angular.copy($scope.model);\n\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n rentCategorySvc.insert(data)\n .$promise.then(success, error);\n } else {\n rentCategorySvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onRentCategorySave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n\n $scope.onDeletePictureBtnClick = function (pictureUrl) {\n _.pull($scope.model.pictureUrls || [], pictureUrl);\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictureUrls) {\n $scope.model.pictureUrls = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictureUrls, p.imageUrl)) {\n $scope.model.pictureUrls.push(p.imageUrl);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.ondate_pickupTimeFromChange = function (date_pickupTimeFrom) {\n var m = moment(date_pickupTimeFrom);\n if (m.isValid()) {\n $scope.model.pickupTimeFrom = m.hour() * 60 + m.minute();\n } else {\n $scope.model.pickupTimeFrom = 12 * 60; // Default\n }\n }\n\n $scope.ondate_pickupTimeToChange = function (date_pickupTimeTo) {\n var m = moment(date_pickupTimeTo);\n if (m.isValid()) {\n $scope.model.pickupTimeTo = m.hour() * 60 + m.minute();\n } else {\n $scope.model.pickupTimeTo = 23 * 60 + 59; // Default\n }\n }\n\n $scope.ondate_returnTimeFromChange = function (date_returnTimeFrom) {\n var m = moment(date_returnTimeFrom);\n if (m.isValid()) {\n $scope.model.returnTimeFrom = m.hour() * 60 + m.minute();\n } else {\n $scope.model.returnTimeFrom = 0; // Default\n }\n }\n\n $scope.ondate_returnTimeToChange = function (date_returnTimeTo) {\n var m = moment(date_returnTimeTo);\n if (m.isValid()) {\n $scope.model.returnTimeTo = m.hour() * 60 + m.minute();\n } else {\n $scope.model.returnTimeTo = 12 * 60; // Default\n }\n }\n\n $scope.onrentingPeriodTypeChange = function (rentingPeriodType) {\n if (rentingPeriodType == 0) { // minutes\n\n $scope.model.pickupTimeFrom = null; // Default\n $scope.model.pickupTimeTo = null; // Default\n $scope.model.returnTimeFrom = null; // Default\n $scope.model.returnTimeTo = null; // Default\n\n $scope.model.rentingPeriodStepSize = 60;\n $scope.model.minimumRentingPeriods = 60;\n $scope.model.maximumRentingPeriods = 120;\n\n $scope.model.rentHourStartType = 1;\n \n } else { // days\n $scope.model.pickupTimeFrom = 12 * 60; // Default\n $scope.model.pickupTimeTo = 23 * 60 + 59; // Default\n $scope.model.returnTimeFrom = 0; // Default\n $scope.model.returnTimeTo = 12 * 60; // Default\n\n $scope.model.rentingPeriodStepSize = 1;\n $scope.model.minimumRentingPeriods = 1;\n $scope.model.maximumRentingPeriods = 14;\n\n $scope.model.rentHourStartType = 0;\n }\n extendModel($scope.model);\n }\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"rents/rent-category/rent-category-detail-main-tab.html\"\n },\n {\n title: 'TXT_TIME_SETTING',\n template: \"rents/rent-category/rent-category-detail-time-setting-tab.html\"\n },\n {\n title: 'TXT_LBL_DESCRIPTION',\n template: \"rents/rent-category/rent-category-detail-description-tab.html\"\n },\n {\n title: 'TXT_LBL_PICTURES',\n template: \"rents/rent-category/rent-category-detail-pictures-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n}]);\n","wbApp.controller('RentCategoryGroupsCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', 'rentCategoryGroupSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, rentCategoryGroupSvc) {\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = rentCategoryGroupSvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.rentCategories = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentCategoryGroup(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedRentCategoryGroup(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.rentCategories = [];\n setSelectedRentCategoryGroup(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'rentCategories',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'isActive', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '160px', sortOrder: 'asc' },\n { dataField: 'shortDescription', caption: $translate.instant('TXT_LBL_SHORT_DESCRIPTION'), dataType: 'string' },\n ]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedRentCategoryGroup(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = rentCategoryGroupSvc.createNew();\n detailDialogPromise.$scope.onRentCategoryGroupSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentCategoryGroup(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onRentCategoryGroupSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowCopy = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.model.isNew = true;\n detailDialogPromise.$scope.model.id = null;\n detailDialogPromise.$scope.onRentCategoryGroupSave = function (model) {\n refreshData().then(function () {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentCategoryGroup(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n rentCategoryGroupSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedRentCategoryGroup(rentCategoryGroup, refresh) {\n $scope.selectedRentCategoryGroup = rentCategoryGroup;\n $scope.$broadcast('rentCategoryGroupSelectionChanged', $scope.selectedRentCategoryGroup);\n }\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'rents/rent-category-group/rent-category-group-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('RentCategoryGroupDetailCtrl', ['$scope', '$modal', 'rentCategoryGroupSvc',\nfunction ($scope, $modal, rentCategoryGroupSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n rentCategoryGroupSvc.insert(data)\n .$promise.then(success, error);\n } else {\n rentCategoryGroupSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onRentCategoryGroupSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n\n $scope.onDeletePictureBtnClick = function (pictureUrl) {\n _.pull($scope.model.pictureUrls || [], pictureUrl);\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictureUrls) {\n $scope.model.pictureUrls = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictureUrls, p.imageUrl)) {\n $scope.model.pictureUrls.push(p.imageUrl);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"rents/rent-category-group/rent-category-group-detail-main-tab.html\"\n },\n {\n title: 'TXT_LBL_DESCRIPTION',\n template: \"rents/rent-category-group/rent-category-group-detail-description-tab.html\"\n },\n {\n title: 'TXT_LBL_PICTURES',\n template: \"rents/rent-category-group/rent-category-group-detail-pictures-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n}]);\n","wbApp.controller('RentDetailAddItemDetailCtrl', ['$scope', 'rentCategorySvc', 'rentItemSvc',\nfunction ($scope, rentCategorySvc, rentItemSvc) {\n\n var allCategories = rentCategorySvc.getAll();\n $scope.selectedCategory = {\n itemSelectionType: 0,\n minimumNumberOfRentedItem: 1,\n maximumNumberOfRentedItems: 1\n };\n\n $scope.model = {\n id: null,\n externalId: null,\n numberOfItemsToAdd: 1,\n rentCategoryId: null,\n itemTypeId: null\n };\n \n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n var models;\n if ($scope.selectedCategory.itemSelectionType == 1) { // Automatic\n models = _.times($scope.model.numberOfItemsToAdd, function(idx) {\n return {\n //_id: idx + _.random(100, 9999999999),\n id: null,\n externalId: null,\n rentCategoryId: $scope.model.rentCategoryId,\n itemTypeId: $scope.model.itemTypeId\n }\n });\n } else {\n models = _.times(1, _.constant({\n // _id: $scope.model.id,\n id: $scope.model.id,\n externalId: null,\n rentCategoryId: $scope.model.rentCategoryId,\n itemTypeId: $scope.model.itemTypeId\n }));\n\n rentItemSvc.getAll().$promise.then(function (allItems) {\n var item = _.find(allItems, { id: models[0].id });\n models[0].itemTypeId = item.itemTypeId;\n });\n }\n\n\n $scope.isSaving = true;\n $scope.onAddItemDetailSave(models);\n $scope.$hide();\n\n }\n\n $scope.onCategoryChange = function () {\n allCategories.$promise.then(function () {\n $scope.selectedCategory = _.find(allCategories, { 'id': $scope.model.rentCategoryId });\n if (!!$scope.selectedCategory) {\n $scope.model.numberOfItemsToAdd = $scope.selectedCategory.minimumNumberOfRentedItem;\n }\n });\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n\n\n}]);\n","wbApp.controller('RentItemTabsRentsCtrl', ['$scope', '$modal', '$translate', '$filter', 'rentSvc',\nfunction ($scope, $modal, $translate, $filter, rentSvc) {\n\n var selectedRentItem = null;\n\n $scope.rents = [];\n\n var isActive = true;\n var loaded = false;\n\n $scope.$on('rentItemSelectionChanged', function (e, newlySelectedRentItem) {\n if (newlySelectedRentItem) {\n if (isActive) {\n loadData(newlySelectedRentItem);\n } else {\n loaded = false;\n }\n }\n else {\n $scope.leadNotes = [];\n fullLead = null;\n }\n\n selectedRentItem = newlySelectedRentItem;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 0) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedRentItem) {\n loadData(selectedRentItem);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function loadData(rentItem) {\n $scope.rents = [];\n\n if (!!rentItem) {\n\n var fromDateUtc = moment().subtract(3, 'month').startOf('day').toDate();\n var totoDateUtc = moment().add(1, 'month').startOf('day').toDate();\n\n rentSvc.getAllByPlaceAndItemAndDateRange(rentItem.placeId, rentItem.id, fromDateUtc, totoDateUtc)\n .$promise.then(function (data) {\n fullLead = data;\n $scope.rents = data;\n loaded = true;\n }, function (error) {\n fullLead = null;\n $scope.rents = [];\n loaded = false;\n });\n }\n }\n\n\n $scope.rentsGridSettings = {\n name: 'rents',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n {\n dataField: 'condition',\n caption: '',\n dataType: 'string',\n encodeHtml: false,\n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_READY_FOR_RENTING') },\n { id: 1, name: $translate.instant('TXT_ITEM_CONDITION_NOT_READY') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n calculateCellValue: function (rowData) {\n var isOverallConditionGreen = _.reduce(rowData.rentedItems, function (sum, rentedItem) {\n return sum && rentedItem.itemCondition == 0;\n }, true);\n return isOverallConditionGreen ? 0 : 1;\n },\n calculateDisplayValue: function (rowData) {\n\n // ReadyForRenting,\n // Broken,\n // Maintenance,\n // Decommissioned\n\n // Only for future rents\n var momentNow = moment();\n var isOverallConditionGreen = moment(rowData.toUtc).isBefore(momentNow)\n ? true\n : _.reduce(rowData.rentedItems, function (sum, rentedItem) {\n return sum && rentedItem.itemCondition == 0;\n }, true);\n\n if (isOverallConditionGreen) {\n return \"\";\n } else {\n return \"\";\n }\n },\n },\n {\n dataField: 'rentedItems',\n caption: $translate.instant('TXT_MENU_RENT_ITEMS'),\n dataType: 'string',\n calculateDisplayValue: function (rowData) {\n return _.join(_.map(rowData.rentedItems, function (rentedItem) {\n if (!!rentedItem.externalId) {\n return rentedItem.rentItemName + ' (' + rentedItem.externalId + ')' + ' - ' + rentedItem.rentCategoryName;\n } else {\n return rentedItem.rentItemName + ' - ' + rentedItem.rentCategoryName;\n }\n }), ', ');\n },\n },\n {\n showInColumnChooser: false,\n caption: '',\n dataField: 'isNotRegisteredUser',\n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: true, name: $translate.instant('TXT_ANONYMOUS_USER') },\n { id: false, name: $translate.instant('TXT_REGISTERED_USER') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n encodeHtml: false,\n calculateSortValue: function (rowData) { return rowData.marker; },\n calculateDisplayValue: function (rowData) {\n if (typeof rowData.isNotRegisteredUser === 'undefined' || rowData.isNotRegisteredUser === null) {\n return \"\";\n } else {\n var icon = !!rowData.isNotRegisteredUser ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n },\n },\n {\n dataField: 'userFullName',\n caption: $translate.instant('TXT_VAL_RCPG_USER'),\n width: '140px',\n dataType: 'string',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'userFullName') }\n },\n {\n dataField: 'studentsFullName',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n width: '140px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentsFullName') }\n },\n { dataField: 'studentBirthday', caption: $translate.instant(\"TXT_LBL_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '70px' },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '130px'\n },\n {\n dataField: 'email',\n caption: $translate.instant('TXT_LBL_EMAIL'),\n dataType: 'string',\n visible: true,\n width: '190px'\n },\n { dataField: 'fromUtc', caption: $translate.instant('TXT_LBL_FROM'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px', sortOrder: 'desc' },\n { dataField: 'toUtc', caption: $translate.instant('TXT_LBL_TO'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n {\n dataField: 'status',\n caption: $translate.instant('TXT_RENT_STATUS'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_RENT_STATUS_RESERVED') },\n { id: 1, name: $translate.instant('TXT_RENT_STATUS_CANCELED') },\n { id: 2, name: $translate.instant('TXT_RENT_STATUS_RENTED') },\n { id: 3, name: $translate.instant('TXT_RENT_STATUS_RETURNED') },\n { id: 4, name: $translate.instant('TXT_RENT_STATUS_NOT_RETURNED') },\n { id: 5, name: $translate.instant('TXT_RENT_STATUS_RETURNED_WITH_ISSUES') },\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '100px'\n },\n { dataField: 'updatedAtUtc', caption: $translate.instant('TXT_LBL_UPDATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n ],\n onEditorPreparing: function (e) {\n if (e.parentType == 'filterRow' && e.dataField == 'isNotRegisteredUser') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n var icon = itemIndex == 1 ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n }\n }\n if (e.parentType == 'filterRow' && e.dataField == 'condition') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n if (itemIndex == 1) {\n return \"\";\n }\n else {\n return \"\";\n }\n }\n }\n }\n }\n }\n\n}]);\n","wbApp.controller('RentItemsCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', 'rentItemSvc', 'classroomSvc', 'rentCategorySvc', 'itemTypeSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, rentItemSvc, classroomSvc, rentCategorySvc, itemTypeSvc) {\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = rentItemSvc.getAll(true);\n all.$promise.then(function (data) {\n $scope.rentItems = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentItem(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedRentItem(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.rentItems = [];\n setSelectedRentItem(null);\n\n reject();\n });\n });\n }\n\n refreshData();\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n var classroomDataSource = new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return classroomSvc.getAllAsync().$promise;\n },\n byKey: function (e) {\n return classroomSvc.getAsync(e);\n },\n loadMode: 'processed'\n });\n\n var rentCategoryDataSource = new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return rentCategorySvc.getAll().$promise;\n },\n byKey: function (e) {\n return rentCategorySvc.getById(e);\n },\n loadMode: 'processed'\n });\n\n var itemTypeDataSource = new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return itemTypeSvc.getAll().$promise;\n },\n byKey: function (e) {\n return itemTypeSvc.getById(e);\n },\n loadMode: 'processed'\n });\n\n $scope.gridSettings = {\n name: 'rentItems',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n {\n dataField: 'rentCategoryId',\n caption: $translate.instant('TXT_MENU_RENT_CATEGORY'),\n dataType: 'string',\n width: '150px',\n visible: true,\n lookup: {\n allowClearing: true,\n dataSource: {\n store: rentCategoryDataSource,\n pageSize: 20,\n paginate: true\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '160px', sortOrder: 'asc' },\n {\n dataField: 'itemTypeId',\n caption: $translate.instant('TXT_MENU_ITEM_TYPE'),\n dataType: 'string',\n width: '150px',\n visible: true,\n lookup: {\n allowClearing: true,\n dataSource: {\n store: itemTypeDataSource,\n pageSize: 20,\n paginate: true\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n },\n { dataField: 'externalId', caption: $translate.instant('TXT_EXTERNAL_ID'), dataType: 'string', width: '160px' },\n { dataField: 'shortDescription', caption: $translate.instant('TXT_LBL_SHORT_DESCRIPTION'), dataType: 'string' },\n {\n dataField: 'placeId',\n caption: $translate.instant('TXT_PLACE'),\n dataType: 'string',\n width: '150px',\n visible: true,\n lookup: {\n allowClearing: true,\n dataSource: {\n store: classroomDataSource,\n pageSize: 20,\n paginate: true\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n },\n {\n dataField: 'itemCondition',\n caption: $translate.instant('TXT_MENU_ITEM_CONDITION'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_READY_FOR_RENTING') },\n { id: 1, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_BROKEN') },\n { id: 2, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_MAINTENANCE') },\n { id: 3, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_DECOMMISSIONED') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '150px'\n },\n ]\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedRentItem(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = rentItemSvc.createNew();\n detailDialogPromise.$scope.onRentItemSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentItem(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onRentItemSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowCopy = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.model.id = null;\n detailDialogPromise.$scope.model.isNew = true,\n detailDialogPromise.$scope.onRentItemSave = function (model) {\n refreshData().then(function () {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRentItem(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n rentItemSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedRentItem(rentItem, refresh) {\n $scope.selectedRentItem = rentItem;\n $scope.$broadcast('rentItemSelectionChanged', $scope.selectedRentItem);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_MENU_RENTS',\n template: \"rents/rent-item/rent-item-detail-tabs/rents.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'rents/rent-item/rent-item-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('RentItemsDetailCtrl', ['$scope', '$modal', 'rentItemSvc',\nfunction ($scope, $modal, rentItemSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n rentItemSvc.insert(data)\n .$promise.then(success, error);\n } else {\n rentItemSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onRentItemSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n\n $scope.isFormValid = function() {\n return true;\n }\n\n $scope.onDeletePictureBtnClick = function (pictureUrl) {\n _.pull($scope.model.pictureUrls || [], pictureUrl);\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictureUrls) {\n $scope.model.pictureUrls = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictureUrls, p.imageUrl)) {\n $scope.model.pictureUrls.push(p.imageUrl);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"rents/rent-item/rent-item-detail-main-tab.html\"\n },\n {\n title: 'TXT_MENU_SETTING',\n template: \"rents/rent-item/rent-item-detail-settings-tab.html\"\n },\n {\n title: 'TXT_LBL_DESCRIPTION',\n template: \"rents/rent-item/rent-item-detail-description-tab.html\"\n },\n {\n title: 'TXT_LBL_PICTURES',\n template: \"rents/rent-item/rent-item-detail-pictures-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n}]);\n","wbApp.controller('RentTabsItemsCtrl', ['$scope', '$modal', '$translate',\nfunction ($scope, $modal, $translate) {\n\n var selectedRent = null;\n\n $scope.rentItems = [];\n\n $scope.$on('rentSelectionChanged', function (e, newlySelectedRent) {\n selectedRent = newlySelectedRent;\n\n $scope.rentItems.length = 0;\n if (!!selectedRent) {\n $scope.rentItems.push.apply($scope.rentItems, selectedRent.rentedItems);\n }\n });\n\n\n $scope.rentItemsGridSettings = {\n name: 'rentItems',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n {\n dataField: 'externalId',\n caption: $translate.instant('TXT_EXTERNAL_ID'),\n dataType: 'string',\n width: '140px',\n sortOrder: 'asc'\n },\n {\n dataField: 'rentItemName',\n caption: $translate.instant('TXT_NAME'),\n dataType: 'string'\n },\n {\n dataField: 'rentCategoryName',\n caption: $translate.instant('TXT_MENU_RENT_CATEGORIES'),\n dataType: 'date',\n dataType: 'string',\n width: '160px'\n },\n {\n dataField: 'itemTypeName',\n caption: $translate.instant('TXT_MENU_ITEM_TYPE'),\n dataType: 'date',\n dataType: 'string',\n width: '160px'\n },\n {\n dataField: 'itemCondition',\n caption: $translate.instant('TXT_MENU_ITEM_CONDITION'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_READY_FOR_RENTING') },\n { id: 1, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_BROKEN') },\n { id: 2, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_MAINTENANCE') },\n { id: 3, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_DECOMMISSIONED') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '200px'\n }\n ]\n }\n\n}]);\n","wbApp.controller('RentsCtrl', ['$scope', '$modal', '$translate', '$timeout', '$q', '$filter', 'rentSvc', 'classroomSvc', 'localStorageService', 'notRegisteredUserSvc',\nfunction ($scope, $modal, $translate, $timeout, $q, $filter, rentSvc, classroomSvc, localStorageService, notRegisteredUserSvc) {\n\n $scope.placeId = null;\n $scope.fromDate = moment().subtract(1, 'week').startOf('day').toDate();\n $scope.toDate = moment().add(3, 'week').startOf('day').toDate();\n\n classroomSvc.getAllNonDeletedAsync().$promise.then(function (classrooms) {\n var selectedPlace = null;\n if (localStorageService.isSupported) {\n var placeId = localStorageService.get('rentsPlaceId');\n if (!!placeId) {\n selectedPlace = _.find(classrooms, { 'id': placeId });\n }\n }\n if (!selectedPlace) {\n selectedPlace = _.head(classrooms);\n }\n if (!!selectedPlace) {\n $scope.placeId = selectedPlace.id;\n if (localStorageService.isSupported) {\n localStorageService.set('rentsPlaceId', $scope.placeId);\n }\n\n $scope.onPlaceChange($scope.placeId);\n }\n });\n\n function refreshData(reselect)\n {\n return $q(function (resolve, reject) {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n var all = rentSvc.getAllByPlaceAndDateRange($scope.placeId, $scope.fromDate, $scope.toDate);\n all.$promise.then(function (data) {\n $scope.rents = data;\n\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance && !!reselect) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRent(null);\n }\n })\n }, 100);\n }\n else {\n setSelectedRent(null);\n }\n\n resolve();\n\n }, function (error) {\n $scope.rents = [];\n setSelectedRent(null);\n\n reject();\n });\n });\n }\n\n \n\n $scope.onDataRangeChanged = function () {\n refreshData(true);\n }\n\n $scope.onPlaceChange = function()\n {\n if (localStorageService.isSupported) {\n localStorageService.set('rentsPlaceId', $scope.placeId);\n }\n refreshData(false);\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData(true);\n });\n\n $scope.gridSettings = {\n name: 'rents',\n keyExpr: 'id',\n shouldShowColumnChooser: true,\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n {\n dataField: 'condition',\n caption: '',\n dataType: 'string',\n encodeHtml: false,\n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_ITEM_CONDITION_TYPE_READY_FOR_RENTING') },\n { id: 1, name: $translate.instant('TXT_ITEM_CONDITION_NOT_READY') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n calculateCellValue: function (rowData) {\n var isOverallConditionGreen = _.reduce(rowData.rentedItems, function (sum, rentedItem) {\n return sum && rentedItem.itemCondition == 0;\n }, true);\n return isOverallConditionGreen ? 0 : 1;\n },\n calculateDisplayValue: function (rowData) {\n\n // ReadyForRenting,\n // Broken,\n // Maintenance,\n // Decommissioned\n\n // Only for future rents\n var momentNow = moment();\n var isOverallConditionGreen = moment(rowData.toUtc).isBefore(momentNow)\n ? true\n : _.reduce(rowData.rentedItems, function (sum, rentedItem) {\n return sum && rentedItem.itemCondition == 0;\n }, true);\n\n if (isOverallConditionGreen) {\n return \"\";\n } else {\n return \"\";\n }\n },\n },\n {\n dataField: 'rentedItems',\n caption: $translate.instant('TXT_MENU_RENT_ITEMS'),\n dataType: 'string',\n calculateDisplayValue: function (rowData) {\n return _.join(_.map(rowData.rentedItems, function (rentedItem) {\n if (!!rentedItem.externalId) {\n return rentedItem.rentItemName + ' (' + rentedItem.externalId + ')' + ' - ' + rentedItem.rentCategoryName;\n } else {\n return rentedItem.rentItemName + ' - ' + rentedItem.rentCategoryName;\n }\n }), ', ');\n },\n },\n {\n showInColumnChooser: false,\n caption: '',\n dataField: 'isNotRegisteredUser',\n width: '42px',\n alignment: 'center',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: true, name: $translate.instant('TXT_ANONYMOUS_USER') },\n { id: false, name: $translate.instant('TXT_REGISTERED_USER') }\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n encodeHtml: false,\n calculateSortValue: function (rowData) { return rowData.marker; },\n calculateDisplayValue: function (rowData) {\n if (typeof rowData.isNotRegisteredUser === 'undefined' || rowData.isNotRegisteredUser === null) {\n return \"\";\n } else {\n var icon = !!rowData.isNotRegisteredUser ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n },\n },\n {\n dataField: 'userFullName',\n caption: $translate.instant('TXT_VAL_RCPG_USER'),\n width: '140px',\n dataType: 'string',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'userFullName') }\n },\n {\n dataField: 'studentsFullName',\n caption: $translate.instant('TXT_LBL_STUDENT'),\n dataType: 'string',\n width: '140px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentsFullName') }\n },\n { dataField: 'studentBirthday', caption: $translate.instant(\"TXT_LBL_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '70px' },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '130px'\n },\n {\n dataField: 'email',\n caption: $translate.instant('TXT_LBL_EMAIL'),\n dataType: 'string',\n visible: true,\n width: '190px'\n },\n { dataField: 'fromUtc', caption: $translate.instant('TXT_LBL_FROM'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px', sortOrder: 'desc' },\n { dataField: 'toUtc', caption: $translate.instant('TXT_LBL_TO'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n {\n dataField: 'status',\n caption: $translate.instant('TXT_RENT_STATUS'),\n dataType: 'string',\n lookup: {\n allowClearing: true,\n dataSource: {\n store: {\n type: 'array',\n data: [\n { id: 0, name: $translate.instant('TXT_RENT_STATUS_RESERVED') },\n { id: 1, name: $translate.instant('TXT_RENT_STATUS_CANCELED') },\n { id: 2, name: $translate.instant('TXT_RENT_STATUS_RENTED') },\n { id: 3, name: $translate.instant('TXT_RENT_STATUS_RETURNED') },\n { id: 4, name: $translate.instant('TXT_RENT_STATUS_NOT_RETURNED') },\n { id: 5, name: $translate.instant('TXT_RENT_STATUS_RETURNED_WITH_ISSUES') },\n ],\n key: \"id\"\n },\n pageSize: 10,\n paginate: false\n },\n valueExpr: 'id', // contains the same values as the \"statusId\" field provides\n displayExpr: 'name' // provides display values\n },\n width: '100px'\n },\n { dataField: 'updatedAtUtc', caption: $translate.instant('TXT_LBL_UPDATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n ],\n onEditorPreparing: function (e) {\n if (e.parentType == 'filterRow' && e.dataField == 'isNotRegisteredUser') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n var icon = itemIndex == 1 ? 'fa-user-o' : 'fa-user';\n var res = \"\";\n\n return res;\n }\n }\n }\n if (e.parentType == 'filterRow' && e.dataField == 'condition') {\n e.editorOptions.itemTemplate = function (itemData, itemIndex, itemElement) {\n if (itemIndex == 0) {\n return $(\"\");\n } else {\n if (itemIndex == 1) {\n return \"\";\n }\n else {\n return \"\";\n }\n }\n }\n }\n }\n }\n\n\n $scope.onRowSelected = function (data) {\n setSelectedRent(data);\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = rentSvc.createNew($scope.placeId);\n detailDialogPromise.$scope.onRentSave = function (model) {\n refreshData().then(function() {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows([model.id], false).then(function (rows) {\n if (!rows || !rows.length) {\n setSelectedRent(null);\n }\n });\n }, 100);\n }\n });\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n\n var promises = [];\n\n var modelPromise = rentSvc.getById(data.id);\n promises.push(modelPromise.$promise);\n\n promises.push(detailDialogPromise.$promise);\n\n var notRegisteredUserPromise = null;\n if (data.isNotRegisteredUser)\n {\n notRegisteredUserPromise = notRegisteredUserSvc.getById(data.userId);\n promises.push(notRegisteredUserPromise.$promise);\n }\n\n $q.all(promises).then(function () {\n\n detailDialogPromise.$scope.model = angular.copy(modelPromise);\n if (data.isNotRegisteredUser)\n {\n detailDialogPromise.$scope.model.notRegisteredUserInfo = notRegisteredUserPromise;\n detailDialogPromise.$scope.model.userId = null;\n detailDialogPromise.$scope.model.studentId = null;\n }\n \n detailDialogPromise.$scope.onRentSave = function () {\n refreshData(true);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n rentSvc.remove(data.id).$promise.then(function () {\n refreshData();\n });\n }\n\n function setSelectedRent(rent, refresh) {\n $scope.selectedRent = rent;\n $scope.$broadcast('rentSelectionChanged', $scope.selectedRent);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_MENU_RENT_ITEMS',\n template: \"rents/rent-detail-tabs/items.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'rents/rent/rent-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('RentsDetailCtrl', ['$scope', '$modal', 'rentSvc', 'notRegisteredUserSvc',\nfunction ($scope, $modal, rentSvc, notRegisteredUserSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n if ($scope.model.isNew) {\n $scope.statusDisabledSelection = [1, 3, 4, 5];\n } else {\n $scope.statusDisabledSelection = [];\n }\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n rentSvc.insert(data)\n .$promise.then(success, error);\n } else {\n rentSvc.update(data)\n .$promise.then(success, error);\n }\n\n function success(newModel) {\n $scope.onRentSave(newModel);\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n //$scope.detailIsUnchanged = function (data) {\n // return angular.equals(data, $scope.modelOrig);\n //};\n\n\n $scope.isFormValid = function() {\n return true;\n }\n\n $scope.removeItem = function ($index) {\n $scope.model.rentedItems.splice($index, 1);\n }\n\n\n $scope.addItem = function () {\n addItemDialogPromise.$promise.then(function () {\n addItemDialogPromise.$scope.placeId = $scope.model.placeId;\n addItemDialogPromise.$scope.onAddItemDetailSave = function (items) {\n\n var union = _.unionWith($scope.model.rentedItems, items, function (arrVal, othVal) {\n return (arrVal.id == othVal.id) && !!arrVal.id && !!othVal.id;\n });\n\n $scope.model.rentedItems.length = 0;\n $scope.model.rentedItems.push.apply($scope.model.rentedItems, union);\n };\n addItemDialogPromise.show();\n });\n }\n\n var addItemDialogPromise = $modal({\n templateUrl: 'rents/rent/rent-detail-add-item-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.fromUtcPickerOptions = {\n type: \"datetime\",\n width: '100%'\n };\n\n $scope.toUtcPickerOptions = {\n type: \"datetime\",\n width: '100%'\n };\n\n $scope.onAnonymousBtnClick = function () {\n \n if (!$scope.model.notRegisteredUserInfo) {\n $scope.model.notRegisteredUserInfo = notRegisteredUserSvc.createNew();\n }\n $scope.model.isNotRegisteredUser = true;\n $scope.model.userID = null;\n $scope.model.studentId = null;\n }\n\n $scope.onExistingBtnClick = function () {\n $scope.model.userID = null;\n $scope.model.studentId = null;\n $scope.model.isNotRegisteredUser = false;\n }\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"rents/rent/rent-detail-main-tab.html\"\n },\n {\n title: 'TXT_LBL_USER',\n template: \"rents/rent/rent-detail-user-tab.html\"\n },\n {\n title: 'TXT_LBL_NOTES',\n template: \"rents/rent/rent-detail-notes-tab.html\"\n },\n {\n title: 'TXT_RENT_STATUS',\n template: \"rents/rent/rent-detail-status-history-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n}]);\n","'use strict';\n\nwbApp.directive('wbItemConditionTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(itemSelectionType) {\n if (!itemSelectionType) { return; }\n return $translate.instant(itemSelectionType.text);\n }\n\n function formatSelection(itemSelectionType) {\n return $translate.instant(itemSelectionType.text);\n }\n\n function shouldBeVisible(visibleSelection, id) {\n if (visibleSelection) {\n return visibleSelection.includes(id + '');\n }\n\n return true;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n visibleSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_ITEM_CONDITION_TYPE_READY_FOR_RENTING', disabled: scope.disabledSelection === 0 },\n { id: 1, text: 'TXT_ITEM_CONDITION_TYPE_BROKEN', disabled: scope.disabledSelection === 1 },\n { id: 2, text: 'TXT_ITEM_CONDITION_TYPE_MAINTENANCE', disabled: scope.disabledSelection === 2 },\n { id: 3, text: 'TXT_ITEM_CONDITION_TYPE_DECOMMISSIONED', disabled: scope.disabledSelection === 3 }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbItemSelectionTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(itemSelectionType) {\n if (!itemSelectionType) { return; }\n return $translate.instant(itemSelectionType.text);\n }\n\n function formatSelection(itemSelectionType) {\n return $translate.instant(itemSelectionType.text);\n }\n\n function shouldBeVisible(visibleSelection, id) {\n if (visibleSelection) {\n return visibleSelection.includes(id + '');\n }\n\n return true;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n visibleSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_ITEM_SELECTION_TYPE_MANUAL', disabled: scope.disabledSelection === 0 },\n { id: 1, text: 'TXT_ITEM_SELECTION_TYPE_AUTOMATIC', disabled: scope.disabledSelection === 1 }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentCategoryCombo', ['$timeout', '$translate', 'rentCategorySvc',\n function ($timeout, $translate, rentCategorySvc) {\n function formatResult(model) {\n if (!model) {\n return \"\";\n }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: {\n allowClear: '='\n },\n link: function (scope, elm, attrs, controller) {\n\n var models = rentCategorySvc.getAll();\n models.$promise.then(function () {\n if (models.length == 1) {\n $(elm).select2('val', models[0].id);\n controller.$setViewValue(models[0].id);\n }\n });\n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_MENU_RENT_CATEGORY'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: (typeof scope.allowClear !== 'undefined') ? scope.allowClear : true,\n minimumResultsForSearch: -1,\n id: function (model) { return model.id; },\n data: models\n });\n\n controller.$render();\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentCategoryGroupCombo', ['$timeout', '$translate', 'rentCategoryGroupSvc',\n function ($timeout, $translate, rentCategoryGroupSvc) {\n function formatResult(model) {\n if (!model) {\n return \"\";\n }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: {\n allowClear: '='\n },\n link: function (scope, elm, attrs, controller) {\n\n var models = rentCategoryGroupSvc.getAll();\n models.$promise.then(function () {\n if (models.length == 1) {\n $(elm).select2('val', models[0].id);\n controller.$setViewValue(models[0].id);\n }\n });\n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_MENU_RENT_CATEGORY_GROUP'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: (typeof scope.allowClear !== 'undefined') ? scope.allowClear : true,\n minimumResultsForSearch: -1,\n id: function (model) { return model.id; },\n data: models\n });\n\n controller.$render();\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentHourStartTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(itemSelectionType) {\n if (!itemSelectionType) { return; }\n return $translate.instant(itemSelectionType.text);\n }\n\n function formatSelection(itemSelectionType) {\n return $translate.instant(itemSelectionType.text);\n }\n\n function shouldBeVisible(visibleSelection, id) {\n if (visibleSelection) {\n return visibleSelection.includes(id + '');\n }\n\n return true;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n visibleSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_RENT_HOUR_START_TYPE_AT_ANY_TIME', disabled: scope.disabledSelection === 0 },\n { id: 1, text: 'TXT_RENT_HOUR_START_TYPE_AT_WHOLE_HOUR_ONLY', disabled: scope.disabledSelection === 1 },\n { id: 2, text: 'TXT_RENT_HOUR_START_TYPE_AT_HALF_HOUR_ONLY', disabled: scope.disabledSelection === 2 },\n { id: 3, text: 'TXT_RENT_HOUR_START_TYPE_AT_HALF_OR_FULL_HOUR', disabled: scope.disabledSelection === 3 },\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentItemCombo', ['$timeout', '$translate', 'rentItemSvc',\n function ($timeout, $translate, rentItemSvc) {\n function formatResult(model) {\n if (!model) {\n return \"\";\n }\n\n return \"
\" +\n \"
\" + model.name + \"
\" +\n \"
\" + (!!model.externalId ? model.externalId : '') + \"
\" +\n \"
\" + (!!model.notes ? model.notes : '') + \"
\" +\n \"
\";\n }\n\n function formatSelection(model) {\n if (!!model.externalId) {\n return model.name + ' (' + model.externalId + ')';\n } else {\n return model.name;\n }\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: {\n placeId: '=',\n rentCategoryId: '=',\n allowClear: '='\n },\n link: function (scope, elm, attrs, controller) {\n\n var oldRentCategoryId = scope.rentCategoryId;\n\n var models = rentItemSvc.getAllByPlaceAndRentCategory(scope.placeId, scope.rentCategoryId);\n models.$promise.then(function () {\n if (models.length == 1) {\n $(elm).select2('val', models[0].id);\n controller.$setViewValue(models[0].id);\n }\n });\n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_MENU_RENT_ITEM'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: (typeof scope.allowClear !== 'undefined') ? scope.allowClear : true,\n minimumResultsForSearch: -1,\n id: function (model) { return model.id; },\n data: models\n });\n\n controller.$render();\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n scope.$watch('rentCategoryId', function (newValue) {\n if (oldRentCategoryId != newValue) {\n oldRentCategoryId = newValue;\n var newModels = rentItemSvc.getAllByPlaceAndRentCategory(scope.placeId, newValue);\n newModels.$promise.then(function () {\n models.length = 0;\n models.push.apply(models, newModels);\n\n if (models.length == 1) {\n $(elm).select2('val', models[0].id);\n controller.$setViewValue(models[0].id);\n } else {\n $(elm).select2('val', null);\n controller.$setViewValue(null);\n }\n });\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentItemMultiSelect', ['$timeout', '$translate', 'rentItemSvc', 'gridSortSvc',\n function ($timeout, $translate, rentItemSvc, gridSortSvc) {\n function formatResult(model) {\n if (!!model.externalId) {\n return model.name + ' (' + model.externalId + ')';\n } else {\n return model.name;\n }\n }\n\n function formatSelection(model) {\n if (!!model.externalId) {\n return model.name + ' (' + model.externalId + ')';\n } else {\n return model.name;\n }\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = rentItemSvc.getAll();\n\n models.$promise.then(function () {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: 5,\n id: function (model) { return model.id; },\n data: _.sortBy(models, function (a) { return gridSortSvc.localeSort(a, 'name'); }),\n multiple: true,\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n },\n maximumSelectionSize: 5\n });\n\n ctrl.$render();\n });\n });\n\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return [];\n } else {\n if (Array.isArray(viewValue)) {\n return viewValue;\n } else {\n return viewValue.split(',');\n }\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n if (Array.isArray(value)) {\n return _.map(value, function (n) { return n + ''; }).join();\n } else {\n return _.map(value.split(','), function (n) { return n + ''; }).join();\n }\n }\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentItemTypeCombo', ['$timeout', '$translate', 'rentItemSvc',\n function ($timeout, $translate, rentItemSvc) {\n function formatResult(model) {\n if (!model) {\n return \"\";\n }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: '?ngModel',\n priority: 1,\n scope: {\n rentCategoryId: '=',\n allowClear: '='\n },\n link: function (scope, elm, attrs, controller) {\n\n var oldRentCategoryId = scope.rentCategoryId;\n\n var models = rentItemSvc.getAllByCategoryGroupedByItemType(scope.placeId, scope.rentCategoryId);\n models.$promise.then(function () {\n if (models.length == 1) {\n $(elm).select2('val', models[0].id);\n controller.$setViewValue(models[0].id);\n }\n });\n\n models.$promise.then(function () {\n $timeout(function () {\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_MENU_RENT_ITEM'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: (typeof scope.allowClear !== 'undefined') ? scope.allowClear : true,\n minimumResultsForSearch: -1,\n id: function (model) { return model.id; },\n data: models\n });\n\n controller.$render();\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n scope.$watch('rentCategoryId', function (newValue) {\n if (oldRentCategoryId != newValue) {\n oldRentCategoryId = newValue;\n var newModels = rentItemSvc.getAllByCategoryGroupedByItemType(scope.placeId, newValue);\n newModels.$promise.then(function () {\n models.length = 0;\n models.push.apply(models, newModels);\n\n if (models.length == 1) {\n $(elm).select2('val', models[0].id);\n controller.$setViewValue(models[0].id);\n } else {\n $(elm).select2('val', null);\n controller.$setViewValue(null);\n }\n });\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentStatusTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(itemSelectionType) {\n if (!itemSelectionType) { return; }\n return $translate.instant(itemSelectionType.text);\n }\n\n function formatSelection(itemSelectionType) {\n return $translate.instant(itemSelectionType.text);\n }\n\n function shouldBeVisible(visibleSelection, id) {\n if (visibleSelection) {\n return visibleSelection.includes(id + '');\n }\n\n return true;\n }\n\n function shouldBeDisbled(disabledSelection, id) {\n if (disabledSelection) {\n return disabledSelection.includes(id);\n }\n\n return false;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n disabledSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_RENT_STATUS_RESERVED', disabled: shouldBeDisbled(scope.disabledSelection, 0) },\n { id: 1, text: 'TXT_RENT_STATUS_CANCELED', disabled: shouldBeDisbled(scope.disabledSelection, 1) },\n { id: 2, text: 'TXT_RENT_STATUS_RENTED', disabled: shouldBeDisbled(scope.disabledSelection, 2) },\n { id: 3, text: 'TXT_RENT_STATUS_RETURNED', disabled: shouldBeDisbled(scope.disabledSelection, 3) },\n { id: 4, text: 'TXT_RENT_STATUS_NOT_RETURNED', disabled: shouldBeDisbled(scope.disabledSelection, 4) },\n { id: 5, text: 'TXT_RENT_STATUS_RETURNED_WITH_ISSUES', disabled: shouldBeDisbled(scope.disabledSelection, 5) },\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbRentingPeriodTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(itemSelectionType) {\n if (!itemSelectionType) { return; }\n return $translate.instant(itemSelectionType.text);\n }\n\n function formatSelection(itemSelectionType) {\n return $translate.instant(itemSelectionType.text);\n }\n\n function shouldBeVisible(visibleSelection, id) {\n if (visibleSelection) {\n return visibleSelection.includes(id + '');\n }\n\n return true;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n model: '=ngModel',\n visibleSelection: '=',\n },\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_RENTING_PERIOD_TYPE_MINUTES', disabled: scope.disabledSelection === 0 },\n { id: 1, text: 'TXT_RENTING_PERIOD_TYPE_WHOLE_CALLENDAR_DAYS', disabled: scope.disabledSelection === 1 }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.controller('CourseStudentFluctuationCtrl', ['$scope', '$translate', 'reportsSvc', 'localStorageService', 'semesterSvc',\nfunction ($scope, $translate, reportsSvc, localStorageService, semesterSvc) {\n\n $scope.fromSemesterID = null;\n $scope.toSemesterID = null;\n $scope.include = {\n includeNew: true,\n includeLeaving: true\n };\n $scope.fluctuationType = 0;\n $scope.data = [];\n\n var sankeyInstance = null;\n\n var dataSource = new DevExpress.data.DataSource({\n load: function (loadOptions) {\n return $scope.data.$promise;\n },\n byKey: function (e) {\n },\n loadMode: 'processed'\n });\n\n $scope.resizableOptions = {\n handles: 'bottom',\n onResizeEnd: function (e) {\n if (sankeyInstance) {\n sankeyInstance.render();\n }\n }\n }\n\n $scope.sankeyOptions = {\n dataSource: dataSource,\n sourceField: \"from\",\n targetField: \"to\",\n weightField: \"studentCount\",\n title: \"\",\n //export: {\n // enabled: true\n //},\n node: {\n width: 10,\n padding: 15\n },\n label: {\n customizeText: function (info) {\n\n var weightOut = _.sumBy(info.linksOut, 'weight');\n var weightIn = _.sumBy(info.linksIn, 'weight');\n\n if (weightOut != 0) {\n return '(' + weightOut + ') ' + info.title;\n }\n\n return info.title + ' (' + weightIn + ')';\n }\n },\n margin: {\n left: 10,\n right: 0\n },\n link: {\n colorMode: \"source\"\n },\n tooltip: {\n enabled: true,\n zIndex: 2000,\n customizeLinkTooltip: function (info) {\n\n var allLeftCounts = _.sumBy(_.filter($scope.data, { 'from': info.source }), 'studentCount');\n var percent = Math.round((100 / allLeftCounts * info.weight) * 100) / 100;\n\n if ($scope.fluctuationType == 1) {\n // Teachers\n\n return {\n html:\n \"\" + $translate.instant('TXT_TEACHER_FROM') + \": \" +\n info.source +\n \"
\" + $translate.instant('TXT_TEACHER_TO') + \": \" +\n info.target +\n \"
\" +\n \"\" + $translate.instant('TXT_NO_OF_STUDENTS') + \": \" +\n info.weight + ' (' + percent + '%)'\n };\n } else {\n // Others\n\n return {\n html:\n \"\" + $translate.instant('TXT_CLASSROOM_FROM') + \": \" +\n info.source +\n \"
\" + $translate.instant('TXT_CLASSROOM_TO') + \": \" +\n info.target +\n \"
\" +\n \"\" + $translate.instant('TXT_NO_OF_STUDENTS') + \": \" +\n info.weight + ' (' + percent + '%)'\n };\n }\n\n\n },\n customizeNodeTooltip: function (info) {\n return {\n html:\n \"\" + info.title + \" \" + \n \"
\" + $translate.instant('TXT_NO_OF_STUDENTS') + \": \" +\n (info.weightIn != 0\n ? info.weightIn \n : info.weightOut)\n };\n }\n },\n onInitialized: function (e) {\n sankeyInstance = e.component;\n setTitle();\n }\n };\n\n if (localStorageService.isSupported) {\n $scope.fromSemesterID = localStorageService.get('courseStudentFluctuationFromSemesterID');\n $scope.toSemesterID = localStorageService.get('courseStudentFluctuationToSemesterID');\n $scope.fluctuationType = localStorageService.get('courseStudentFluctuationType') || 0;\n $scope.include.includeNew = localStorageService.get('courseStudentFluctuationIncludeNew') || true;\n $scope.include.includeLeaving = localStorageService.get('courseStudentFluctuationIncludeLeaving') || true;\n\n loadData();\n }\n\n if (!$scope.fromSemesterID) {\n semesterSvc.getDefaultAsync().then(function (data) {\n if (!!data) {\n $scope.fromSemesterID = data.id;\n $scope.toSemesterID = data.id;\n loadData();\n }\n });\n }\n\n $scope.onFromSemesterChange = function(semesterID) {\n if (localStorageService.isSupported) {\n localStorageService.set('courseStudentFluctuationFromSemesterID', semesterID);\n }\n loadData();\n }\n\n $scope.onToSemesterChange = function (semesterID) {\n if (localStorageService.isSupported) {\n localStorageService.set('courseStudentFluctuationToSemesterID', semesterID);\n }\n loadData();\n }\n\n $scope.onFluctuationTypeChange = function (type) {\n if (localStorageService.isSupported) {\n localStorageService.set('courseStudentFluctuationType', type);\n }\n setTitle();\n loadData();\n }\n\n $scope.onIncludeNewChange = function (value) {\n if (localStorageService.isSupported) {\n localStorageService.set('courseStudentFluctuationIncludeNew', value);\n }\n loadData();\n }\n\n $scope.onIncludeLeavingChange = function (value) {\n if (localStorageService.isSupported) {\n localStorageService.set('courseStudentFluctuationIncludeLeaving', value);\n }\n loadData();\n }\n\n function loadData() {\n if (!!$scope.fromSemesterID && \n !!$scope.toSemesterID &&\n $scope.fromSemesterID != $scope.toSemesterID) {\n\n var newData = [];\n\n switch ($scope.fluctuationType) {\n case 0:\n newData =\n reportsSvc.courseStudentFluctuationOverall($scope.fromSemesterID, $scope.toSemesterID);\n break;\n case 1:\n newData =\n reportsSvc.courseStudentFluctuationByTeacher($scope.fromSemesterID, $scope.toSemesterID, $scope.include.includeNew, $scope.include.includeLeaving);\n break;\n case 2:\n newData =\n reportsSvc.courseStudentFluctuationByClassroom($scope.fromSemesterID, $scope.toSemesterID, $scope.include.includeNew, $scope.include.includeLeaving);\n break;\n case 3:\n newData =\n reportsSvc.courseStudentFluctuationBySubject($scope.fromSemesterID, $scope.toSemesterID, $scope.include.includeNew, $scope.include.includeLeaving);\n break;\n }\n\n $scope.data = newData;\n $scope.data.$promise.then(function (d) {\n setHeight(d);\n });\n dataSource.reload();\n }\n }\n\n function setTitle() {\n var newTitle = '';\n switch ($scope.fluctuationType) {\n case 0:\n newTitle = $translate.instant('TXT_COURSE_STUDENT_FLUCTUATION_OVERALL');\n break;\n case 1:\n newTitle = $translate.instant('TXT_COURSE_STUDENT_FLUCTUATION_BY_TEACHER');\n break;\n case 2:\n newTitle = $translate.instant('TXT_COURSE_STUDENT_FLUCTUATION_BY_CLASSROOM');\n break;\n case 3:\n newTitle = $translate.instant('TXT_COURSE_STUDENT_FLUCTUATION_BY_SUBJECT');\n break;\n }\n if (sankeyInstance) {\n sankeyInstance.option('title', $translate.instant('TXT_MENU_COURSE_STUDENT_FLUCTUATION') + ' - ' + newTitle);\n }\n if ($scope.gridSettings.gridInstance) {\n\n $scope.gridSettings.gridInstance.columnOption(0, { caption: ($scope.fluctuationType == 1\n ? $translate.instant('TXT_TEACHER_FROM')\n : $translate.instant('TXT_CLASSROOM_FROM')) });\n $scope.gridSettings.gridInstance.columnOption(1, { caption: ($scope.fluctuationType == 1\n ? $translate.instant('TXT_TEACHER_TO')\n : $translate.instant('TXT_CLASSROOM_TO')) });\n }\n }\n\n function setHeight(data) {\n var leftCount = _.uniq(_.map(data, 'from')).length;\n var rightCount = _.uniq(_.map(data, 'to')).length;\n\n var m = Math.max(leftCount, rightCount);\n\n if (sankeyInstance) {\n sankeyInstance.option('size.height', Math.max(350, 70 * m) + 50);\n }\n }\n\n\n $scope.gridSettings = {\n name: 'courseStudentFluctuation',\n pager: {\n showPageSizeSelector: true,\n visible: \"false\"\n },\n paging: { pageSize: 100 },\n columns: [\n {\n dataField: 'from',\n caption: $scope.fluctuationType == 1\n ? $translate.instant('TXT_TEACHER_FROM')\n : $translate.instant('TXT_CLASSROOM_FROM'),\n dataType: 'string'\n },\n {\n dataField: 'to',\n caption: $scope.fluctuationType == 1\n ? $translate.instant('TXT_TEACHER_TO')\n : $translate.instant('TXT_CLASSROOM_TO'),\n dataType: 'string'\n },\n { dataField: 'studentCount', caption: $translate.instant('TXT_NO_OF_STUDENTS'), dataType: 'number', width: '60px' },\n ],\n };\n}]);\n","'use strict';\n\nwbApp.controller('CoursesAttendanceSummaryCtrl', ['$scope', '$filter', '$translate', 'reportsSvc',\nfunction ($scope, $filter, $translate, reportsSvc) {\n\n $scope.fromDate = moment().startOf('day').toDate();\n $scope.toDate = moment().startOf('day').add(3, 'days').toDate();\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.onDataRangeChanged = function () {\n\n var mFromDate = moment($scope.fromDate);\n var mToDate = moment($scope.toDate);\n\n if (!!$scope.fromDate && mFromDate.isValid() && !!$scope.toDate && mToDate.isValid()) {\n\n if (mFromDate.isAfter(mToDate)) {\n $scope.toDate = mFromDate.toDate();\n }\n\n if (mToDate.diff(mFromDate, 'days') > 32) {\n $scope.toDate = mFromDate.add(31, 'days').toDate();\n }\n\n refreshData($scope.fromDate, $scope.toDate);\n }\n }\n\n $scope.gridSettings = {\n name: 'attendanceSummary',\n shouldShowColumnChooser: true,\n exportVisibleColumnsOnly: true,\n allowColumnReordering: true,\n columns: [\n {\n dataField: 'studentID',\n caption: 'studentID',\n dataType: 'string',\n visible: false,\n width: '70px'\n },\n {\n dataField: 'lessonStartDate',\n caption: $translate.instant('TXT_LBL_START_DATE'),\n dataType: 'date',\n format: { raw: \"dd.MM.yy EEE HH:mm\" },\n width: '130px',\n sortOrder: 'asc'\n },\n { dataField: 'lessonEndDate', caption: $translate.instant(\"TXT_LBL_END_DATE\"), dataType: 'date', format: { raw: \"HH:mm\" }, width: '60px' },\n { dataField: 'classroomName', caption: $translate.instant('TXT_LBL_CLASSROOM'), dataType: 'string', width: '180px', visible: false },\n { dataField: 'courseFullName', caption: $translate.instant('TXT_LBL_COURSE'), dataType: 'string', width: '180px' },\n { dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '140px' },\n { dataField: 'courseTeacherFullName', caption: $translate.instant('TXT_LBL_EMPLOYEE') + ' - ' + $translate.instant('TXT_LBL_COURSE'), dataType: 'string', width: '160px' },\n { dataField: 'scheduleTeacherFullName', caption: $translate.instant('TXT_LBL_EMPLOYEE') + ' - ' + $translate.instant('TXT_LBL_LESSON'), dataType: 'string', width: '160px' },\n { dataField: 'registrationNotes', caption: $translate.instant('TXT_NOTE') + ' - ' + $translate.instant('TXT_SEC_REGISTRATION'), dataType: 'string' },\n { dataField: 'scheduleNotes', caption: $translate.instant('TXT_NOTE') + ' - ' + $translate.instant('TXT_LBL_LESSON'), dataType: 'string', visible: false },\n { dataField: 'attendanceNotes', caption: $translate.instant('TXT_NOTE') + ' - ' + $translate.instant('TXT_LBL_ATTENDANCE'), dataType: 'string', visible: false },\n { dataField: 'semesterName', caption: $translate.instant('TXT_LBL_SEMESTER'), width: '180px', visible: false },\n {\n dataField: 'courseAttendanceStatusID',\n caption: $translate.instant('TXT_COL_ATTENDANCE_STATUS'),\n dataType: 'string',\n width: '100px',\n calculateCellValue: function (rowData) {\n return $filter('attendanceStatus')(rowData.courseAttendanceStatusID);\n }\n },\n {\n dataField: 'courseAttendanceTypeID',\n caption: $translate.instant('TXT_COL_ATTENDANCE_TYPE'),\n dataType: 'string',\n width: '100px',\n calculateCellValue: function (rowData) {\n return $filter('attendanceType')(rowData.courseAttendanceTypeID);\n }\n }, {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '120px',\n visible: false\n },\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px', visible: false },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px', visible: false },\n { dataField: 'paymentsSum', caption: $translate.instant('TXT_LBL_PAYMENTS'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px', visible: false },\n { dataField: 'arrear', caption: $translate.instant('TXT_LBL_ARREAR'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '100px', visible: false },\n { dataField: 'userFullName', caption: $translate.instant('TXT_LBL_PARENT'), dataType: 'string', visible: false },\n {\n dataField: 'studentBirthday',\n caption: $translate.instant('TXT_LBL_BIRTHDAY'),\n dataType: 'date',\n format: { date: 'short' },\n width: '70px',\n alignment: 'right',\n visible: false\n },\n {\n dataField: 'studentGroups',\n caption: $translate.instant('TXT_MENU_GROUPS'),\n dataType: 'object',\n calculateCellValue: function (rowData) {\n return $filter('groups')(rowData.studentGroups);\n },\n visible: false\n },\n ]\n }\n\n function refreshData(fromDate, toDate) {\n\n var mFromDate = moment($scope.fromDate);\n var mToDate = moment($scope.toDate);\n\n if (mFromDate.isValid() && mToDate.isValid()) {\n $scope.cousesAttendaceSummary = reportsSvc.getCoursesAttendanceSummaryForDateRange(fromDate, toDate);\n } else {\n $scope.cousesAttendaceSummary = [];\n }\n }\n\n refreshData($scope.fromDate, $scope.toDate);\n\n $scope.$on('refreshData', function (e, data) {\n refreshData($scope.fromDate, $scope.toDate);\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('FranchiseAttendanceSummaryCtrl', ['$scope', 'franchiseSvc', 'tenantInfo',\nfunction ($scope, franchiseSvc, tenantInfo) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.fromDate = moment().startOf('month').toDate();\n $scope.toDate = moment().endOf('month').toDate();\n $scope.franchiseCentralID = tenantInfo.franchiseCentrals.length\n ? tenantInfo.franchiseCentrals[0].tenantID\n : null;\n\n $scope.onSeachCriteriaChanged = function () {\n $scope.attendanceSummary = franchiseSvc.getAttendanceSummaryForFranchiseCentral($scope.franchiseCentralID, $scope.fromDate, $scope.toDate);\n }\n\n $scope.attendanceSummary = franchiseSvc.getAttendanceSummaryForFranchiseCentral($scope.franchiseCentralID, $scope.fromDate, $scope.toDate);\n\n $scope.gridOptions = {\n sortInfo: { fields: ['tenantName'], directions: ['dsc'] },\n noCommandColumn: true,\n columnDefs: [\n { field: 'franchiseSubjectName', displayName: \"TXT_LBL_SUBJECT\", sort: 'locale' },\n { field: 'employeeFullName', displayName: \"TXT_LBL_EMPLOYEE\", sort: 'locale', width: \"200px\" },\n { field: 'noOFCredits', displayName: \"TXT_LBL_NO_OF_CREDITS\", width: \"120px\", align: 'right' }\n ]\n };\n}]);","'use strict';\n\nwbApp.controller('OneOffsSummaryCtrl', ['$scope', '$filter', '$translate', '$q', 'reportsSvc', 'semesterSvc', 'accountingBookSvc', 'groupSvc',\nfunction ($scope, $filter, $translate, $q, reportsSvc, semesterSvc, accountingBookSvc, groupSvc) {\n\n $scope.groups = groupSvc.getAllAsync(true);\n $scope.customFilter = { groups: [], accountingBooks: [] };\n\n $scope.accountingBooks = accountingBookSvc.getAllAsync();\n $scope.rawOneOffsSummary = [];\n $scope.oneOffsSummary = [];\n\n\n function preFilter() {\n $q.all([$scope.rawOneOffsSummary.$promise, $scope.accountingBooks.$promise, $scope.groups.$promise]).then(function () {\n var groupIDs = _.values($scope.customFilter.groups);\n var accountingBookIDs = _.values($scope.customFilter.accountingBooks);\n var noGroupSelected = $scope.customFilter.groups.indexOf(-1) !== -1;\n $scope.oneOffsSummary.length = 0;\n $scope.oneOffsSummary.push.apply($scope.oneOffsSummary,\n _.filter($scope.rawOneOffsSummary, function (o) {\n var ret = true;\n if (noGroupSelected) {\n ret = ret && !o.groups.length;\n } else {\n if (groupIDs.length > 0) {\n ret = ret && _.intersection(o.groups, groupIDs).length > 0;\n }\n }\n if (accountingBookIDs.length > 0) {\n ret = ret && _.includes(accountingBookIDs, o.accountingBookID);\n }\n return ret;\n })\n );\n });\n }\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n semesterSvc.getDefaultAsync()\n .then(function (semester) {\n $scope.semesterID = semester.id;\n $scope.rawOneOffsSummary = reportsSvc.getOneOffAttendanceSummary($scope.semesterID);\n preFilter();\n });\n\n $scope.$on('refreshData', function (e, data) {\n if ($scope.semesterID) {\n $scope.rawOneOffsSummary = reportsSvc.getOneOffAttendanceSummary($scope.semesterID);\n preFilter();\n }\n });\n\n $scope.onSemesterChange = function (semesterID) {\n if (semesterID) {\n $scope.rawOneOffsSummary = reportsSvc.getOneOffAttendanceSummary($scope.semesterID);\n preFilter();\n }\n }\n\n $scope.gridSettings = {\n name: 'oneOffsSummary',\n shouldShowColumnChooser: true,\n columns: [\n { dataField: 'studentSurname', caption: $translate.instant('TXT_HUMAN_SURNAME'), dataType: 'string', width: '110px' },\n { dataField: 'studentName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '110px' },\n { dataField: 'studentMiddlename', caption: $translate.instant('TXT_LBL_MIDDLENAME'), dataType: 'string', width: '110px' },\n {\n dataField: 'courseName',\n caption: $translate.instant('TXT_LBL_COURSE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n var ret = rowData.subjectName;\n if (!!rowData.courseAbbreviation) {\n ret += \" (\" + rowData.courseAbbreviation + \")\";\n }\n\n if (!!rowData.courseName) {\n ret += \" - \" + rowData.courseName;\n }\n\n return ret;\n }\n },\n { dataField: 'lessonStartTime', caption: $translate.instant('TXT_LBL_START_DATE'), dataType: 'date', format: { raw: \"dd.MM.yy EEE HH:mm\" }, width: '130px', sortOrder: 'asc' },\n { dataField: 'lessonEndTime', caption: $translate.instant(\"TXT_LBL_END_DATE\"), dataType: 'date', format: { raw: \"HH:mm\" }, width: '60px' },\n { dataField: 'price', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '90px' },\n {\n dataField: 'courseAttendanceStatusID',\n caption: $translate.instant('TXT_COL_ATTENDANCE_STATUS'),\n dataType: 'string',\n width: '90px',\n calculateCellValue: function (rowData) {\n return $filter('attendanceStatus')(rowData.courseAttendanceStatusID);\n }\n },\n {\n dataField: 'studentBirthday',\n caption: $translate.instant('TXT_LBL_BIRTHDAY'),\n dataType: 'date',\n format: { date: 'short' },\n width: '70px',\n alignment: 'right'\n },\n {\n dataField: 'parentSurname',\n caption: $translate.instant('TXT_LBL_PARENT'),\n dataType: 'string',\n width: '140px',\n calculateCellValue: function (rowData) {\n return String.prototype.fullName(rowData.parentName, rowData.parentMiddlename, rowData.parentSurname);\n }\n },\n {\n dataField: 'parentPhone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n width: '120px',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.parentPhone);\n }\n },\n { dataField: 'parentEmail', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '160px' },\n { dataField: 'parentAddress', caption: $translate.instant('TXT_LBL_ADDRESS'), dataType: 'string', visible: false },\n {\n dataField: 'groups',\n caption: $translate.instant('TXT_MENU_GROUPS'),\n dataType: 'object',\n calculateCellValue: function (rowData) {\n return $filter('groups')(rowData.groups);\n },\n visible: false\n },\n ]\n }\n}]);\n","'use strict';\n\nwbApp.controller('RegisteredAttendanceCtrl', ['$scope', 'reportsSvc',\nfunction ($scope, reportsSvc) {\n\n var startDate = moment().startOf('month').subtract(1, 'days').startOf('month');\n\n $scope.fromDate = startDate.toDate();\n $scope.toDate = moment(startDate).endOf('month').toDate();\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.onFromDateChange = function (fromDate) {\n if (fromDate) {\n refreshData(fromDate, $scope.toDate);\n }\n }\n\n $scope.onToDateChange = function (toDate) {\n if (toDate) {\n refreshData($scope.fromDate, toDate);\n }\n }\n\n $scope.gridOptions = {\n sortInfo: { fields: ['ClassroomName'], directions: ['dsc'] },\n columnDefs: [{ field: 'ClassroomName', displayName: \"TXT_LBL_CLASSROOM\", sort: 'locale' }\n ]\n };\n\n function refreshData(fromDate, toDate) {\n $scope.registeredAttendance = reportsSvc.getRegisteredAttendanceAsync(fromDate, toDate);\n\n $scope.registeredAttendance.$promise.then(function (data) {\n $scope.gridOptions.columnDefs = [{ field: 'ClassroomName', displayName: \"TXT_LBL_CLASSROOM\", sort: 'locale' }];\n var newColumnDefs = [];\n if (data.length > 0) {\n for (var prop in data[0]) { \n if (data[0].hasOwnProperty(prop) && prop !== \"classroomID\" && prop !== \"ClassroomName\") {\n newColumnDefs.push({ field: prop, displayName: prop, width: '60px' });\n }\n }\n }\n var sortedDefs = _.sortBy(newColumnDefs, 'displayName');\n $scope.gridOptions.columnDefs.push.apply($scope.gridOptions.columnDefs, sortedDefs);\n });\n }\n\n refreshData($scope.fromDate, $scope.toDate);\n\n\n}]);\n","'use strict';\r\n\r\nwbApp.controller('RegistrationsSummaryCtrl', ['$scope', '$filter', '$translate', '$q', 'reportsSvc', 'semesterSvc', 'groupSvc',\r\n 'accountingBookSvc', 'localStorageService', 'securitySvc',\r\nfunction ($scope, $filter, $translate, $q, reportsSvc, semesterSvc, groupSvc, accountingBookSvc,\r\n localStorageService, securitySvc) {\r\n\r\n $scope.semesterDataRange = 1; // 1 - semester, 2 - from to\r\n $scope.fromDate = moment().subtract(3, 'M').startOf('day').toDate();\r\n $scope.toDate = moment().startOf('day').toDate();\r\n\r\n if (localStorageService.isSupported) {\r\n $scope.semesterDataRange = localStorageService.get('semesterDataRange') || 1;\r\n }\r\n\r\n $scope.customFilter = { groups: [], accountingBooks: [] };\r\n\r\n $scope.groups = groupSvc.getAllAsync();\r\n $scope.accountingBooks = accountingBookSvc.getAllAsync();\r\n $scope.rawCourses = [];\r\n $scope.courses = [];\r\n\r\n function preFilter() {\r\n $q.all([$scope.rawCourses.$promise, $scope.groups.$promise, $scope.accountingBooks.$promise]).then(function () {\r\n var groupIDs = _.values($scope.customFilter.groups);\r\n var accountingBookIDs = _.values($scope.customFilter.accountingBooks);\r\n $scope.courses.length = 0;\r\n $scope.courses.push.apply($scope.courses,\r\n _.filter($scope.rawCourses, function (o) {\r\n var ret = true;\r\n if (groupIDs.length > 0) {\r\n ret = ret && _.intersection(o.studentGroups, groupIDs).length > 0;\r\n }\r\n if (accountingBookIDs.length > 0) {\r\n ret = ret && _.includes(accountingBookIDs, o.accountingBookID);\r\n }\r\n return ret;\r\n })\r\n );\r\n });\r\n }\r\n\r\n $scope.groupsCombo = {\r\n items: $scope.groups,\r\n displayExpr: 'name',\r\n valueExpr: 'groupID',\r\n showSelectionControls: true,\r\n maxDisplayedTags: 3,\r\n multiline: false,\r\n itemTemplate: 'customItem',\r\n placeholder: $translate.instant('TXT_LBL_SELECT_GROUPS'),\r\n bindingOptions: {\r\n value: 'customFilter.groups'\r\n },\r\n }\r\n\r\n $scope.onDataRangeChanged = function () {\r\n if (localStorageService.isSupported) {\r\n localStorageService.set('semesterDataRange', $scope.semesterDataRange);\r\n }\r\n\r\n if ($scope.semesterID != null) {\r\n loadData();\r\n }\r\n\r\n if ($scope.gridSettings.gridInstance) {\r\n if ($scope.semesterDataRange === 1) {\r\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", false);\r\n } else {\r\n $scope.gridSettings.gridInstance.columnOption(\"semesterColumn\", \"visible\", true);\r\n }\r\n }\r\n }\r\n\r\n function loadData() {\r\n if ($scope.semesterDataRange === 1) {\r\n $scope.rawCourses = reportsSvc.getCourseRegistrationSummaryForSemester($scope.semesterID);\r\n } else {\r\n $scope.rawCourses = reportsSvc.getCourseRegistrationSummaryForDateRange($scope.fromDate, $scope.toDate);\r\n }\r\n preFilter();\r\n }\r\n\r\n $scope.$watch('customFilter', function (newValue, oldValue) {\r\n preFilter();\r\n }, true);\r\n\r\n semesterSvc.getDefaultAsync()\r\n .then(function (semester) {\r\n $scope.semesterID = semester.id;\r\n loadData();\r\n });\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n if ($scope.semesterID) {\r\n loadData();\r\n }\r\n });\r\n\r\n $scope.onSemesterChange = function (semesterID) {\r\n if (semesterID) {\r\n loadData();\r\n }\r\n }\r\n\r\n $scope.gridSettings = {\r\n name: 'registrationsSummary',\r\n shouldShowColumnChooser: true,\r\n columns: [\r\n {\r\n name: 'semesterColumn',\r\n dataField: 'semesterID',\r\n caption: $translate.instant('TXT_LBL_SEMESTER'),\r\n dataType: 'string',\r\n width: '120px',\r\n calculateCellValue: function (rowData) {\r\n return $filter('semester')(rowData.semesterID);\r\n },\r\n visible: $scope.semesterDataRange === 2\r\n },\r\n {\r\n dataField: 'studentID',\r\n caption: 'studentID',\r\n dataType: 'string',\r\n visible: false,\r\n width: '70px'\r\n },\r\n {\r\n dataField: 'subjectCategoryID',\r\n caption: $translate.instant('TXT_LBL_COURSE_TYPE'),\r\n dataType: 'string',\r\n encodeHtml: false,\r\n calculateCellValue: function (rowData) {\r\n return $filter('subjectCategory')(rowData.subjectCategoryID);\r\n },\r\n width: '70px'\r\n },\r\n { dataField: 'studentSurname', caption: $translate.instant('TXT_HUMAN_SURNAME'), dataType: 'string', width: '110px' },\r\n { dataField: 'studentName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '110px' },\r\n { dataField: 'courseFullName', caption: $translate.instant('TXT_LBL_COURSE'), dataType: 'string', sortOrder: 'desc', },\r\n { dataField: 'payments', caption: $translate.instant('TXT_LBL_PAYMENT'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '90px' },\r\n {\r\n dataField: 'studentBirthday',\r\n caption: $translate.instant('TXT_LBL_BIRTHDAY'),\r\n dataType: 'date',\r\n format: { date: 'short' },\r\n width: '70px',\r\n alignment: 'right'\r\n },\r\n {\r\n dataField: 'studentPersonalIDNumber',\r\n caption: $translate.instant('TXT_LAB_PERSONAL_ID_NUMBER'),\r\n dataType: 'string',\r\n width: '90px',\r\n visible: securitySvc.isInRole('Student.ProtectedView')\r\n },\r\n { dataField: 'nationality', caption: $translate.instant('TXT_LBL_NATIONALITY'), dataType: 'string', width: '40px' },\r\n {\r\n dataField: 'gender',\r\n caption: $translate.instant('TXT_LBL_GENDER'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('gender')(rowData.gender);\r\n },\r\n width: '80px'\r\n },\r\n { dataField: 'operatorAddressCity', caption: $translate.instant('TXT_LBL_CITY'), dataType: 'string', width: '90px' },\r\n { dataField: 'operatorAddressStreet', caption: $translate.instant('TXT_LBL_STREET'), dataType: 'string', width: '140px' },\r\n { dataField: 'operatorAddressPostalCode', caption: $translate.instant('TXT_LBL_POSTAL_CODE'), dataType: 'string', width: '60px' },\r\n {\r\n dataField: 'firstAttendedLesson',\r\n caption: $translate.instant('TXT_LBL_FIRST_LESSON'),\r\n dataType: 'date',\r\n format: { date: 'short' },\r\n width: '70px',\r\n alignment: 'right'\r\n },\r\n {\r\n dataField: 'lastAttendedLesson',\r\n caption: $translate.instant('TXT_LBL_LAST_LESSON'),\r\n dataType: 'date',\r\n format: { date: 'short' },\r\n width: '70px',\r\n alignment: 'right'\r\n },\r\n { dataField: 'studentHealth', caption: $translate.instant('TXT_LAB_HEALTH'), dataType: 'string', width: '80px' }, \r\n { dataField: 'studentAllergies', caption: $translate.instant('TXT_LBL_ALLERGIES'), dataType: 'string', width: '80px', visible: false },\r\n { dataField: 'registrationNote', caption: $translate.instant('TXT_NOTE'), dataType: 'string' },\r\n { dataField: 'operatorFullName', caption: $translate.instant('TXT_LBL_PARENT'), dataType: 'string' },\r\n {\r\n dataField: 'operatorPhone',\r\n caption: $translate.instant('TXT_LBL_PHONE'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.operatorPhone);\r\n }\r\n },\r\n { dataField: 'operatorEmail', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string' },\r\n {\r\n dataField: 'registrationDate',\r\n caption: $translate.instant('TXT_SEC_CLIENT_COURSE_REGISTRATION'),\r\n dataType: 'date',\r\n format: { date: 'short' },\r\n width: '70px',\r\n visible: false,\r\n alignment: 'right'\r\n },\r\n {\r\n dataField: 'studentGroups',\r\n caption: $translate.instant('TXT_MENU_GROUPS'),\r\n dataType: 'object',\r\n calculateCellValue: function (rowData) {\r\n return $filter('groups')(rowData.studentGroups);\r\n },\r\n visible: false\r\n },\r\n {\r\n dataField: 'accountingBookID',\r\n caption: $translate.instant('TXT_LBL_ACCOUNTING_BOOK'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('accountingBook')(rowData.accountingBookID);\r\n },\r\n visible: false\r\n },\r\n { dataField: 'courseTypeName', caption: $translate.instant('TXT_LBL_TYPE'), dataType: 'string', visible: false },\r\n { dataField: 'fromAge', caption: $translate.instant('TXT_LBL_FROM_AGE'), dataType: 'number', visible: false },\r\n { dataField: 'toAge', caption: $translate.instant('TXT_LBL_TO_AGE'), dataType: 'number', visible: false },\r\n { dataField: 'ageRangeName', caption: $translate.instant('TXT_LBL_AGE_RANGE'), dataType: 'string', visible: false },\r\n {\r\n dataField: 'idmConsentIssued',\r\n caption: $translate.instant('TXT_LBL_IDM_CONSENT'),\r\n dataType: 'date',\r\n format: { date: 'short' },\r\n width: '70px',\r\n alignment: 'right',\r\n visible: false\r\n },{\r\n dataField: 'studentCreatedAt',\r\n caption: $translate.instant('TXT_STUDENT_CREATED_AT'),\r\n dataType: 'date',\r\n format: { date: 'short' },\r\n width: '70px',\r\n visible: false,\r\n alignment: 'right'\r\n }, \r\n { \r\n dataField: 'operatorFullName2', \r\n caption: $translate.instant('TXT_LBL_SECONDARY_CONTACT'), \r\n dataType: 'string',\r\n visible: false, \r\n },\r\n {\r\n dataField: 'operatorPhone2',\r\n caption: $translate.instant('TXT_LBL_PHONE2'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.operatorPhone2);\r\n },\r\n visible: false,\r\n },\r\n { \r\n dataField: 'operatorEmail2', \r\n caption: $translate.instant('TXT_LBL_EMAIL2'), \r\n dataType: 'string',\r\n visible: false,\r\n },\r\n ]\r\n }\r\n}]);\r\n","'use strict';\n\nwbApp.directive('wbCourseStudentFluctuationTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n return Number(viewValue);\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 0, text: 'TXT_COURSE_STUDENT_FLUCTUATION_OVERALL' },\n { id: 1, text: 'TXT_COURSE_STUDENT_FLUCTUATION_BY_TEACHER' },\n { id: 2, text: 'TXT_COURSE_STUDENT_FLUCTUATION_BY_CLASSROOM' },\n { id: 3, text: 'TXT_COURSE_STUDENT_FLUCTUATION_BY_SUBJECT' },\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","wbApp.factory('reportsSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n var Reports = $resource('/Api/Reports/GetAll', {}, {\n 'getRegisteredAttendance': { method: 'GET', isArray: true, url: '/Api/Reports/GetRegisteredAttendance' },\n 'getCourseRegistrationSummaryForSemester': { method: 'GET', isArray: true, url: '/Api/Reports/GetCourseRegistrationSummaryForSemester' },\n 'getCourseRegistrationSummaryForDateRange': { method: 'GET', isArray: true, url: '/Api/Reports/GetCourseRegistrationSummaryForDateRange' },\n 'getOneOffAttendanceSummary': { method: 'GET', isArray: true, url: '/Api/Reports/GetOneOffAttendanceSummary' },\n\n 'getCourseStudentFluctuationOverall': { method: 'GET', isArray: true, url: '/Api/CourseStudentFluctuation/GetOverall' },\n 'getCourseStudentFluctuationByTeacher': { method: 'GET', isArray: true, url: '/Api/CourseStudentFluctuation/GetByTeacher' },\n 'getCourseStudentFluctuationBySubject': { method: 'GET', isArray: true, url: '/Api/CourseStudentFluctuation/GetBySubject' },\n 'getCourseStudentFluctuationByClassroom': { method: 'GET', isArray: true, url: '/Api/CourseStudentFluctuation/GetByClassroom' },\n\n 'getCoursesAttendanceSummaryForDateRange': { method: 'GET', isArray: true, url: '/Api/Reports/GetCoursesAttendanceSummaryForDateRange' },\n });\n\n function getRegisteredAttendanceAsync(fromDate, toDate) {\n return repositorySvc.customGet('getRegisteredAttendance', Reports, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getCourseRegistrationSummaryForSemester(semesterID) {\n return repositorySvc.customGet('getCourseRegistrationSummaryForSemester', Reports, {\n semesterID: semesterID\n });\n }\n\n function getCourseRegistrationSummaryForDateRange(fromDate, toDate) {\n return repositorySvc.customGet('getCourseRegistrationSummaryForDateRange', Reports, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getCoursesAttendanceSummaryForDateRange(fromDate, toDate) {\n return repositorySvc.customGet('getCoursesAttendanceSummaryForDateRange', Reports, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getOneOffAttendanceSummary(semesterID) {\n return repositorySvc.customGet('getOneOffAttendanceSummary', Reports, {\n semesterID: semesterID\n });\n }\n\n function courseStudentFluctuationOverall(fromSemesterID, toSemesterID) {\n return repositorySvc.customGet('getCourseStudentFluctuationOverall', Reports, {\n fromSemesterID: fromSemesterID,\n toSemesterID: toSemesterID\n });\n }\n\n function courseStudentFluctuationByTeacher(fromSemesterID, toSemesterID, includeNewClients, includeLeavingClients) {\n return repositorySvc.customGet('getCourseStudentFluctuationByTeacher', Reports, {\n fromSemesterID: fromSemesterID,\n toSemesterID: toSemesterID,\n includeNewClients: includeNewClients,\n includeLeavingClients: includeLeavingClients\n });\n }\n\n function courseStudentFluctuationBySubject(fromSemesterID, toSemesterID, includeNewClients, includeLeavingClients) {\n return repositorySvc.customGet('getCourseStudentFluctuationBySubject', Reports, {\n fromSemesterID: fromSemesterID,\n toSemesterID: toSemesterID,\n includeNewClients: includeNewClients,\n includeLeavingClients: includeLeavingClients\n });\n }\n\n function courseStudentFluctuationByClassroom(fromSemesterID, toSemesterID, includeNewClients, includeLeavingClients) {\n return repositorySvc.customGet('getCourseStudentFluctuationByClassroom', Reports, {\n fromSemesterID: fromSemesterID,\n toSemesterID: toSemesterID,\n includeNewClients: includeNewClients,\n includeLeavingClients: includeLeavingClients\n });\n }\n\n return {\n getRegisteredAttendanceAsync: getRegisteredAttendanceAsync,\n getCourseRegistrationSummaryForSemester: getCourseRegistrationSummaryForSemester,\n getCourseRegistrationSummaryForDateRange: getCourseRegistrationSummaryForDateRange,\n getOneOffAttendanceSummary: getOneOffAttendanceSummary,\n courseStudentFluctuationOverall: courseStudentFluctuationOverall,\n courseStudentFluctuationByTeacher: courseStudentFluctuationByTeacher,\n courseStudentFluctuationBySubject: courseStudentFluctuationBySubject,\n courseStudentFluctuationByClassroom: courseStudentFluctuationByClassroom,\n getCoursesAttendanceSummaryForDateRange: getCoursesAttendanceSummaryForDateRange\n }\n }\n]);\n","wbApp.controller('DomainsCtrl', ['$scope', '$modal', '$translate', 'domainsSvc',\nfunction ($scope, $modal, $translate, domainsSvc) {\n\n function setSelectedDomain(domain, refresh) {\n $scope.selectedDomain = domain;\n $scope.$broadcast('selectedDomainChanged', { domain: domain, refresh: !!refresh });\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.domains = domainsSvc.getAll(true); \n setSelectedDomain(null);\n });\n\n $scope.domains = domainsSvc.getAll(true);\n\n $scope.gridSettings = {\n name: 'domains',\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '270px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string'},\n { dataField: 'reservationTeacherHourSingleRate', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '80px' },\n { dataField: 'reservationTeacherHourGroupOneRate', caption: $translate.instant('TXT_LBL_GRP_ONE_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '80px' },\n { dataField: 'reservationTeacherHourGroupTwoRate', caption: $translate.instant('TXT_LBL_GRP_TWO_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '80px' },\n { dataField: 'disabledForClients', caption: $translate.instant('TXT_DISABLED_FOR_CLIENTS'), dataType: 'boolean', width: '60px' },\n ]\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedDomain(data);\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = domainsSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n domainsSvc.remove(data);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"reservations/domains/domains-detail-tabs/detail.html\"\n }, {\n title: 'TXT_SPECIALIZATIONS',\n template: \"reservations/domains/domains-detail-tabs/specializations.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n var detailDialogPromise = $modal({\n templateUrl: 'reservations/domains/detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('DomainsDetailCtrl', ['$scope', 'domainsSvc', 'tenantSettingSvc',\nfunction ($scope, domainsSvc, tenantSettingSvc) {\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n \n $scope.tenantSetting = tenantSettingSvc.settings;\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!data.id) {\n domainsSvc.insert(data, success, error);\n } else {\n domainsSvc.update(data, success, error);\n }\n\n function success() {\n $scope.$hide();\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"reservations/domains/domain-detail-main-tab.html\"\n },\n {\n title: 'TXT_PRICE_TAB',\n template: \"reservations/domains/domain-detail-price-tab.html\"\n },\n {\n title: 'TXT_RESERVATIONS_SETTINGS',\n template: \"reservations/domains/domain-detail-reservations-settings-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0; \n\n}]);\n","wbApp.controller('DomainsSpecializationsCtrl', ['$scope', '$modal', '$translate', 'domainsSpecializationsSvc',\nfunction ($scope, $modal, $translate, domainsSpecializationsSvc) {\n\n function setSelectedDomain(domain, refresh) {\n $scope.selectedDomain = domain;\n $scope.$broadcast('selectedDomainChanged', { domain: domain, refresh: !!refresh });\n }\n\n $scope.selectedDomain = null;\n var isActive = false;\n var loaded = false;\n $scope.domainsSpecializations = [];\n\n $scope.$on('selectedDomainChanged', function (e, domainInd) {\n if (domainInd.domain) {\n if (isActive) {\n if ($scope.selectedDomain !== domainInd.domain || domainInd.refresh) {\n $scope.domainsSpecializations = domainsSpecializationsSvc.getAll(domainInd.domain.id);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.domainsSpecializations = [];\n }\n $scope.selectedDomain = domainInd.domain;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded && $scope.selectedDomain) {\n $scope.domainsSpecializations = domainsSpecializationsSvc.getAll($scope.selectedDomain.id);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.domainsSpecializationsGridSettings = {\n name: 'domainsSpecializations',\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '270px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\n { dataField: 'reservationTeacherHourSingleRate', caption: $translate.instant('TXT_LBL_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '80px' },\n { dataField: 'reservationTeacherHourGroupOneRate', caption: $translate.instant('TXT_LBL_GRP_ONE_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '80px' },\n { dataField: 'reservationTeacherHourGroupTwoRate', caption: $translate.instant('TXT_LBL_GRP_TWO_PRICE'), dataType: 'number', format: { type: 'currency', precision: 2 }, width: '80px' },\n { dataField: 'disabledForClients', caption: $translate.instant('TXT_DISABLED_FOR_CLIENTS'), dataType: 'boolean', width: '60px' },\n ]\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedDomain(data);\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.domainId = $scope.selectedDomain.id;\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onSave = function () {\n $scope.domainsSpecializations = domainsSpecializationsSvc.getAll($scope.selectedDomain.id);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.domainId = $scope.selectedDomain.id;\n detailDialogPromise.$scope.model = domainsSpecializationsSvc.createNew();\n detailDialogPromise.$scope.onSave = function () {\n $scope.domainsSpecializations = domainsSpecializationsSvc.getAll($scope.selectedDomain.id);\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n domainsSpecializationsSvc.remove(\n $scope.selectedDomain.id,\n data,\n function () {\n $scope.domainsSpecializations = domainsSpecializationsSvc.getAll($scope.selectedDomain.id);\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'reservations/domains/domains-specializations-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('DomainsSpecializationsDetailCtrl', ['$scope', 'domainsSpecializationsSvc', 'tenantSettingSvc',\nfunction ($scope, domainsSpecializationsSvc, tenantSettingSvc) {\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.tenantSetting = tenantSettingSvc.settings;\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!data.id) {\n domainsSpecializationsSvc.insert($scope.domainId, data, success, error);\n } else {\n domainsSpecializationsSvc.update($scope.domainId, data, success, error);\n }\n\n function success() {\n $scope.$hide();\n $scope.onSave();\n }\n\n function error(data) {\n $scope.detailError = data;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailTabs = [{\n title: 'TXT_MAIN',\n template: \"reservations/domains/domains-specializations-detail-main-tab.html\"\n },\n {\n title: 'TXT_PRICE_TAB',\n template: \"reservations/domains/domains-specializations-detail-price-tab.html\"\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n}]);\n","wbApp.controller('ReservationSchedulesCtrl', ['$scope', '$modal', '$translate', '$q', '$timeout',\n 'classroomSvc', 'employeeSvc', 'classroomAvailabilitySchedulesSvc', 'messageBoxSvc', 'reservationsSvc',\n 'localStorageService', 'userSvc', 'studentSvc', 'tenantInfo', 'pricingSvc', 'domainsSvc',\nfunction ($scope, $modal, $translate, $q, $timeout, classroomSvc, employeeSvc, classroomAvailabilitySchedulesSvc,\n messageBoxSvc, reservationsSvc, localStorageService, userSvc, studentSvc, tenantInfo, pricingSvc, domainsSvc) {\n\n function getCurrencySymbol(tenantInfo) {\n switch (tenantInfo.currency) {\n case 'CZK':\n return ' Kč';\n case 'EUR':\n return ' €';\n default:\n return ' Kč';\n }\n }\n\n var model = {};\n var data = [];\n var availableCache = {};\n\n var employeesForDateRangePromise = null;\n \n var now = null;\n if (localStorageService.isSupported) {\n var nowStr = localStorageService.get('reservation-schedule-selected-date');\n if (!!nowStr) {\n now = new Date(JSON.parse(nowStr));\n }\n else {\n now = moment().startOf('day').toDate();\n }\n } else {\n now = moment().startOf('day').toDate();\n }\n\n\n $scope.selectedClassroom = null;\n var activeClassrooms = classroomSvc.getAllActiveAsync( /* classroomIDtoInclude */ null, /* filterForReservations */ true, /* filterForCourses */ false).$promise;\n\n var classrooms = $q(function (resolve, reject) { activeClassrooms.then(\n function (data) {\n resolve(_.map(data, function (c) {\n return {\n id: c.id + \"\",\n name: c.name\n }\n }));\n },\n function (error) {\n reject(error);\n });\n });\n\n var classroomDataSource = new DevExpress.data.DataSource({\n key:[\"id\"],\n load: function (loadOptions) { \n return classrooms;\n },\n byKey: function (e) {\n return $q(function (resolve, reject) {\n classrooms.then(\n function (data) {\n var place = _.find(data, { id: e });\n resolve(place);\n },\n function (error) {\n reject(error);\n });\n });\n },\n loadMode: 'raw'\n });\n\n classrooms.then(function (data) {\n if (localStorageService.isSupported) {\n $scope.selectedClassroom = localStorageService.get('reservation-schedule-selected-classroom'); \n }\n });\n\n var employees = null;\n var classroomAvailiability = null;\n var employeesShallow = employeeSvc.getAll();\n $scope.selectedEmployees = [];\n var lastFilteredEmployeeSchedules = [];\n var relaodDueToResources = false;\n\n $scope.getDomain = function (domainId) {\n return _.find(domains, { 'id': domainId });\n }\n\n $scope.getSpecialization = function (domain, specializationId) {\n return _.find(domain.specializations, { 'id': specializationId });\n }\n \n function resolveDomainAndSpecialization(domainOrSpecializationId) {\n var result = {\n domainId: null,\n domainSpecializationId: null\n };\n \n _.find(domains, function (d) {\n if (d.id === domainOrSpecializationId) {\n result = {\n domainId: domainOrSpecializationId,\n domainSpecializationId: null\n };\n return true;\n }\n let specialization = _.find(d.specializations, { id: domainOrSpecializationId });\n if (!!specialization) {\n result = {\n domainId: d.id,\n domainSpecializationId: domainOrSpecializationId\n };\n return true;\n }\n return false;\n });\n \n return result;\n }\n\n var domains = domainsSvc.getAllExpanded();\n var domainsDataSource = new DevExpress.data.DataSource({\n load: function (loadOptions) {\n return domains.$promise;\n },\n byKey: function (e) {\n return $q(function (resolve, reject) {\n domains.$promise.then(function (data) {\n _.forEach(data, function (d) {\n if (d.id == e) {\n resolve(d);\n return d;\n }\n\n var found = false;\n\n _.forEach(d.specializations, function (s) {\n if (s.id == e) {\n resolve(s);\n found = true;\n return s;\n }\n })\n\n if (found) {\n return;\n }\n });\n },\n function (error) {\n reject(error);\n })\n })\n },\n loadMode: 'processed'\n });\n\n var refreshUsersDataSource = false;\n\n var userDataSource = new DevExpress.data.DataSource({\n load: function (loadOptions) {\n return $q(function (resolve, reject) {\n userSvc.getAllBrief(refreshUsersDataSource).then(\n function (data) {\n refreshUsersDataSource = false;\n resolve(data);\n },\n function (error) {\n refreshUsersDataSource = false;\n reject(error);\n })\n });\n },\n byKey: function(e) {\n return $q(function (resolve, reject) {\n userSvc.getAllBrief(refreshUsersDataSource).then(\n function (data) {\n refreshUsersDataSource = false;\n resolve(_.find(data, { id: e + \"\" }));\n },\n function (error) {\n refreshUsersDataSource = false;\n reject(error);\n });\n });\n },\n loadMode: 'raw'\n });\n\n var selectedUserId = null;\n var refreshStudentsDataSource = false;\n var studentsDataSource = new DevExpress.data.DataSource({\n load: function (loadOptions) {\n return $q(function (resolve, reject) {\n if (!!selectedUserId) {\n studentSvc.getAllByUserIDAsync(selectedUserId, refreshStudentsDataSource).$promise.then(function (data) {\n resolve(data);\n }, function (error) {\n reject(error);\n });\n } else {\n resolve([]);\n }\n });\n },\n byKey: function (e) {\n return null;\n }\n });\n\n var lastError = null;\n\n var scheduleDataSource = new DevExpress.data.DataSource({\n store: new DevExpress.data.CustomStore({\n load: function (loadOptions) {\n return $q(function (resolve, reject) {\n\n availableCache = {};\n\n if (!canLoadData()) {\n resolve([]);\n return;\n }\n\n if (relaodDueToResources)\n {\n resolve(lastFilteredEmployeeSchedules);\n relaodDueToResources = false;\n return;\n }\n\n var employeeSchedules = [];\n\n var startDate = moment(/*loadOptions.dxScheduler.startDate*/schedulerInstance.getStartViewDate()).startOf('day').toDate();\n var endDate = moment(/*loadOptions.dxScheduler.endDate*/schedulerInstance.getEndViewDate()).startOf('day').toDate();\n \n employeesForDateRangePromise = employeeSvc.getAllExpanded(startDate, endDate);\n var classroomAvailabilityPromise = classroomAvailabilitySchedulesSvc.loadDay($scope.selectedClassroom, startDate);\n var reservationsPromise = reservationsSvc.getAllByRangeAndPlace($scope.selectedClassroom, startDate, endDate);\n\n $q.all([employeesForDateRangePromise, classroomAvailabilityPromise, reservationsPromise, domains.$promise]).then(\n function (data) {\n var selectedEmployees = _.sortBy(_.filter(data[0], function (e) {\n return e.availability.length > 0 || e.schedule.length > 0;\n }), ['surname', 'name']);\n\n employees = _.keyBy(selectedEmployees, 'id');\n classroomAvailiability = data[1];\n\n _.forEach(classroomAvailiability.periods, function (p) {\n var start = moment(p.start);\n var end = moment(p.end);\n while (start.isBefore(end)) {\n var id = \"time-cell-\" + start.format('HHmm');\n angular.element('#' + id).addClass('place-available');\n\n start.add(30, 'm');\n }\n });\n\n _.forEach(selectedEmployees, function (e) {\n if (e.schedule.length > 0) {\n var periods = \n _.map(e.schedule[0].periods, function (s) {\n return {\n employeeId: e.id,\n userId: e.userId,\n fullName: e.fullName,\n startDate: s.start,\n placeId: s.placeId, \n endDate: s.end,\n type: 0\n };\n });\n employeeSchedules.push.apply(employeeSchedules, periods);\n }\n });\n\n lastError = null;\n\n var filteredEmployeeSchedules = _.filter(employeeSchedules, { placeId: $scope.selectedClassroom + \"\" });\n\n var reservations = _.map(data[2], function (r) {\n return {\n id: r.id,\n employeeId: r.employeeId,\n userId: r.userId,\n placeId: r.placeId,\n startDate: r.reservationStartDate,\n endDate: r.reservationEndDate,\n template: 'reservationCellTemplate',\n type: 1,\n studentsIds: r.studentIds,\n price: r.price,\n notes: r.notes,\n domainId: !!r.domainSpecialization ? r.domainSpecialization.id: r.domain.id,\n domainName: $scope.getDomain(r.domain.id).name,\n domainSpecializationName: !!r.domainSpecialization\n ? $scope.getSpecialization($scope.getDomain(r.domain.id), r.domainSpecialization.id).name\n : '',\n students: _.map(r.students, function (s) {\n var mbirthday = !!s.birthday\n ? moment(s.birthday)\n : null;\n var age = null;\n if (!!mbirthday && mbirthday.isValid()) {\n if ((moment().diff(mbirthday, 'years') < 16) &&\n (moment().diff(mbirthday, 'months') >= 1)) {\n age = mbirthday.toNow(true);\n }\n }\n return {\n fullName: String.prototype.fullName(s.name, s.middlename, s.surname),\n age: age\n }\n }),\n arrear: r.invoice.arrear,\n invoiceId: r.invoice.id\n }\n });\n\n filteredEmployeeSchedules.push.apply(filteredEmployeeSchedules, reservations);\n\n if (!angular.equals($scope.selectedEmployees, selectedEmployees)) {\n relaodDueToResources = true;\n lastFilteredEmployeeSchedules = filteredEmployeeSchedules;\n $scope.selectedEmployees = selectedEmployees;\n }\n resolve(filteredEmployeeSchedules);\n },\n function (error) {\n employees = null;\n classroomAvailiability = null;\n lastError = error.data;\n reject(error.data.title);\n }\n ); \n })\n },\n insert: function (data) {\n return $q(function (resolve, reject) {\n\n if (data.type == 0) {\n var employeeData = employees[data.employeeId];\n if (employeeData && $scope.selectedClassroom) {\n\n var employeeDataCopy = angular.copy(employeeData);\n\n if (employeeDataCopy.schedule.length == 0) {\n employeeDataCopy.schedule.push({\n day: moment(data.startDate).startOf('day').toDate(),\n periods: [{\n placeId: $scope.selectedClassroom,\n start: data.startDate,\n end: data.endDate\n }]\n });\n } else {\n employeeDataCopy.schedule[0].periods.push({\n placeId: $scope.selectedClassroom,\n start: data.startDate,\n end: data.endDate\n });\n }\n\n employeeSvc.schedulesUpdateDay(\n data.employeeId,\n moment(data.startDate).startOf('day').toDate(),\n employeeDataCopy.schedule[0]).$promise\n .then(\n function (success) {\n resolve();\n },\n function (error) {\n lastError = error.data;\n reject(error.data.title);\n });\n }\n else {\n resolve();\n }\n }\n else if (data.type == 1) {\n var specialization = null;\n var domain = _.find(domains, function (d) {\n if (d.id == data.domainId) {\n return true;\n }\n specialization = _.find(d.specializations, { id: data.domainId });\n if (!!specialization) {\n return true;\n }\n return false;\n });\n\n reservationsSvc.insert({\n employeeId: data.employeeId,\n placeId: data.placeId,\n price: data.price,\n studentIds: data.studentsIds,\n registrationDate: new Date(),\n reservationStartDate: data.startDate,\n reservationEndDate: data.endDate,\n userId: data.userId,\n notes: data.notes || '',\n domain: { id: domain.id },\n createEmployeeScheduleIfMissing: data.createEmployeeScheduleIfMissing,\n domainSpecialization: !!specialization ? { id: specialization.id } : null\n }).$promise\n .then(function (success) {\n resolve();\n }, function (error) {\n reject(error.data.title);\n }); \n }\n });\n },\n update: function(oldData, newData) { \n return $q(function (resolve, reject) {\n if (newData.type == 0) {\n var employeeData = employees[oldData.employeeId];\n if (employeeData && $scope.selectedClassroom && employeeData.schedule.length == 1) {\n\n var employeeDataCopy = angular.copy(employeeData);\n\n var affectedPeriod = _.find(employeeDataCopy.schedule[0].periods, function (p) {\n var periodStartDate = moment(p.start);\n var periodEndDate = moment(p.end);\n\n return periodStartDate.isSame(oldData.startDate) &&\n periodEndDate.isSame(oldData.endDate);\n });\n if (affectedPeriod) {\n affectedPeriod.start = newData.startDate;\n affectedPeriod.end = newData.endDate;\n\n employeeSvc.schedulesUpdateDay(\n oldData.employeeId,\n moment(newData.startDate).startOf('day').toDate(),\n employeeDataCopy.schedule[0]).$promise\n .then(\n function (success) {\n resolve();\n return;\n },\n function (error) {\n lastError = error.data;\n reject(error.data.title);\n return;\n });\n }\n else {\n resolve();\n }\n }\n else {\n resolve();\n }\n } else if (newData.type == 1) {\n\n var specialization = null;\n var domain = _.find(domains, function (d) {\n if (d.id == newData.domainId) {\n return true;\n }\n specialization = _.find(d.specializations, { id: newData.domainId });\n if (!!specialization) {\n return true;\n }\n return false;\n });\n \n if (newData.employeeIds && newData.employeeIds.length > 0) {\n let promises = [];\n newData.employeeIds.forEach(function (employeeId) {\n promises.push(\n reservationsSvc.insert({\n employeeId: employeeId,\n placeId: newData.placeId,\n price: newData.price,\n studentIds: newData.studentsIds,\n registrationDate: new Date(),\n reservationStartDate: newData.startDate,\n reservationEndDate: newData.endDate,\n userId: newData.userId,\n notes: newData.notes || '',\n domain: { id: domain.id },\n createEmployeeScheduleIfMissing: newData.createEmployeeScheduleIfMissing,\n domainSpecialization: !!specialization ? { id: specialization.id } : null\n }).$promise\n );\n });\n $q.all(promises).then(function (success) {\n resolve();\n }, function (error) {\n reject(error.data.title);\n });\n }\n else {\n reservationsSvc.update({\n id: newData.id,\n employeeId: newData.employeeId,\n placeId: newData.placeId,\n price: newData.price,\n studentIds: newData.studentsIds,\n registrationDate: new Date(),\n reservationStartDate: newData.startDate,\n reservationEndDate: newData.endDate,\n userId: newData.userId,\n notes: newData.notes || '',\n domain: {id: domain.id},\n domainSpecialization: !!specialization ? {id: specialization.id} : null\n }).$promise\n .then(function (success) {\n resolve();\n }, function (error) {\n reject(error.data.title);\n });\n }\n }\n });\n },\n remove: function (data) {\n return $q(function (resolve, reject) {\n if (data.type == 0) {\n var employeeData = employees[data.employeeId];\n if (employeeData && $scope.selectedClassroom && employeeData.schedule.length == 1) {\n var newPeriods = _.remove(employeeData.schedule[0].periods, function (p) {\n var periodStartDate = moment(p.start);\n var periodEndDate = moment(p.end);\n\n return periodStartDate.isSame(data.startDate) &&\n periodEndDate.isSame(data.endDate);\n });\n\n if (employeeData.schedule[0].periods.length == 0) {\n // Delete day\n employeeSvc.schedulesDeleteDay(\n data.employeeId,\n moment(data.startDate).startOf('day').toDate()\n ).$promise\n .then(\n function (success) {\n resolve();\n return;\n },\n function (error) {\n lastError = error.data;\n reject(error.data.title);\n return;\n });\n }\n else {\n // Update day\n employeeSvc.schedulesUpdateDay(\n data.employeeId,\n moment(data.startDate).startOf('day').toDate(),\n employeeData.schedule[0]).$promise\n .then(\n function (success) {\n resolve();\n return;\n },\n function (error) {\n lastError = error.data;\n reject(error.data.title);\n return;\n });\n }\n }\n else {\n resolve();\n }\n } else if (data.type == 1) {\n reservationsSvc.remove(data.id).$promise.then(\n function (data) {\n resolve();\n },\n function (error) {\n reject(error.data.title);\n })\n } else\n {\n resolve();\n }\n });\n },\n errorHandler: function (error) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_ALERT_TITLE_ENTITY_SAVE_ERROR',\n message: error.message,\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n },\n loadMode: 'processed'\n })\n });\n\n function canLoadData() {\n return !!$scope.selectedClassroom;\n }\n\n $scope.classroomSelectOptions = {\n dataSource: classroomDataSource,\n bindingOptions: { \n value: 'selectedClassroom'\n },\n valueExpr: 'id',\n displayExpr: 'name',\n onValueChanged: function (v) {\n if (v.previousValue != v.value) {\n if (canLoadData()) {\n schedulerInstance.repaint();\n }\n if (!!v.value && localStorageService.isSupported) {\n localStorageService.set('reservation-schedule-selected-classroom', v.value);\n }\n }\n }\n };\n\n $scope.employeeSelectOptions = {\n dataSource: $scope.selectedEmployees,\n bindingOptions: {\n value: 'selectedEmployees'\n },\n valueExpr: 'id',\n displayExpr: 'fullName',\n showSelectionControls: true,\n applyValueMode: \"useButtons\",\n multiline: false,\n onValueChanged: function (v) {\n if (v.previousValue != v.value ) {\n if (canLoadData()) {\n schedulerInstance.repaint();\n }\n if (!!v.value && localStorageService.isSupported) {\n localStorageService.set('reservation-schedule-selected-employees', v.value);\n }\n }\n }\n };\n\n function createEmployeeReservation(e) {\n var appointmentData = angular.copy($scope.cellContextMenuCellData);\n appointmentData.type = 0; // employee-reservation\n\n schedulerInstance.showAppointmentPopup(appointmentData, true, {});\n }\n\n function createStudentsBooking(e) {\n var appointmentData = angular.copy($scope.cellContextMenuCellData);\n appointmentData.type = 1; // student-booking\n\n appointmentData.studentsIds = [];\n appointmentData.userId = null;\n\n schedulerInstance.showAppointmentPopup(appointmentData, true, {});\n }\n\n $scope.cellContextMenuItems = [\n { text: $translate.instant('TXT_TEACHER_SCHEDULE_RESERVATION'), onItemClick: createEmployeeReservation },\n { text: $translate.instant('TXT_CREATE_RESERVATION'), onItemClick: createStudentsBooking }\n ];\n\n $scope.emptyCellContextMenuOptions = {\n dataSource: $scope.cellContextMenuItems,\n target: '.dx-scheduler-date-table-cell',\n onItemClick: function(e) {\n e.itemData.onItemClick(e.itemData);\n }\n }\n\n function setUpEmployeeReservationForm(data) \n {\n var form = data.form;\n var formData = form.option('formData');\n var startDate = data.appointmentData.startDate;\n var employeeData = employees[data.appointmentData.employeeId];\n\n var tbStartDate, tbEndDate;\n\n const popup = data.element.find(\".dx-scheduler-appointment-popup\").dxPopup(\"instance\");\n\n popup.option('title', $translate.instant('TXT_TEACHER_SCHEDULE_RESERVATION'));\n\n var buttons = popup.option('toolbarItems');\n buttons[1].options = {\n onClick: function () {\n popup.hide();\n if (lastError) {\n data.component.repaint();\n }\n }\n };\n\n form.option(\"colCount\", 1);\n form.option(\"items\", [{\n label: {\n text: $translate.instant('TXT_EMPLOYEE')\n },\n name: \"employee\",\n editorType: \"dxTextBox\",\n editorOptions: {\n value: employeeData.fullName,\n readOnly: true\n },\n cssClass: 'first-form-item'\n }, {\n label: {\n text: $translate.instant('TXT_LBL_START_DATE')\n },\n dataField: \"startDate\",\n editorType: \"dxDateBox\",\n editorOptions: {\n width: \"100%\",\n type: \"datetime\",\n onInitialized: function (e) {\n tbStartDate = e.element;\n },\n onValueChanged: function (e) {\n if (tbEndDate) {\n tbEndDate.dxValidator(\"instance\").validate();\n }\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_START_DATE'))\n }, {\n type: \"custom\",\n validationCallback: function (e) {\n return moment(e.value).isBefore(formData.endDate);\n },\n reevaluate: true,\n message: $translate.instant('TXT_ERROR_MUST_BE_EARLIER_THEN_PARAM').f(\n $translate.instant('TXT_LBL_START_DATE'),\n $translate.instant('TXT_LBL_END_DATE')\n )\n }],\n }, {\n label: {\n text: $translate.instant('TXT_LBL_END_DATE')\n },\n name: \"endDate\",\n dataField: \"endDate\",\n editorType: \"dxDateBox\",\n editorOptions: {\n width: \"100%\",\n type: \"datetime\",\n onInitialized: function (e) {\n tbEndDate = e.element;\n },\n onValueChanged: function (e) {\n if (tbStartDate) {\n tbStartDate.dxValidator(\"instance\").validate();\n }\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_END_DATE'))\n }, {\n type: \"custom\",\n validationCallback: function (e) {\n return moment(e.value).isAfter(formData.startDate);\n },\n reevaluate: true,\n message: $translate.instant('TXT_ERROR_MUST_BE_LATER_THEN_PARAM').f(\n $translate.instant('TXT_LBL_END_DATE'),\n $translate.instant('TXT_LBL_START_DATE')\n )\n }],\n }, {\n label: {\n text: $translate.instant('TXT_PLACE')\n },\n name: \"place\",\n dataField: \"placeId\",\n editorType: \"dxSelectBox\",\n editorOptions: {\n dataSource: classroomDataSource,\n displayExpr: 'name',\n width: \"100%\",\n valueExpr: 'id',\n readOnly: true\n }\n }]);\n\n }\n\n function setUpStudentBookingForm(data)\n {\n let copyMode = data.appointmentData.copyMode || false;\n delete(data.appointmentData.copyMode);\n \n var form = data.form;\n var formData = form.option('formData');\n\n var startDate = formData.startDate;\n var employeeData = employees[formData.employeeId];\n\n var tbStartDate, tbEndDate;\n\n selectedUserId = formData.userId;\n\n function calculatePrice(d) {\n\n let domainAndSpecializationIds = resolveDomainAndSpecialization(d.domainId);\n \n if (!d.studentsIds || !d.studentsIds.length || !domainAndSpecializationIds.domainId)\n {\n return;\n }\n \n pricingSvc.calculateReservationPrice({\n userId: d.userId,\n placeId: d.placeId,\n studentsIds: d.studentsIds,\n employeeId: d.employeeId,\n reservationStartDate: d.startDate,\n reservationEndDate: d.endDate,\n domainId: domainAndSpecializationIds.domainId,\n domainSpecializationId: domainAndSpecializationIds.domainSpecializationId\n }, true).$promise.then(\n function (data) {\n d.price = data.price;\n },\n function (error) {\n \n });\n }\n\n const popup = data.element.find(\".dx-scheduler-appointment-popup\").dxPopup(\"instance\");\n\n popup.option('title', $translate.instant('TXT_CREATE_RESERVATION'));\n\n var buttons = popup.option('toolbarItems');\n buttons[1].options = {\n onClick: function () {\n\n var result = form.validate();\n popup.hide();\n if (lastError) {\n data.component.repaint();\n }\n }\n };\n\n var userSelectBox = null;\n var studentAddButtonInstance = null;\n \n form.option(\"colCount\", 1);\n form.option(\"colCountByScreen\", { xs: 1, sm: 1, md: 1, lg: 1 });\n form.option(\"labelLocation\", \"left\");\n form.option(\"items\", [\n {\n label: {\n text: $translate.instant('TXT_LBL_USER')\n },\n dataField: \"userId\",\n editorType: \"dxSelectBox\",\n editorOptions: { \n dataSource: userDataSource, \n displayExpr: 'fullName',\n searchExpr: ['fullName'],\n valueExpr: 'id',\n searchEnabled: true,\n readOnly: !!formData.id,\n onInitialized: function (e) {\n userSelectBox = e.component;\n },\n buttons: [\"dropDown\", {\n location: \"after\",\n name: \"addNewUser\",\n options: {\n icon: \"plus\",\n onClick: function() {\n onAddUserClick().then(function (model) {\n refreshUsersDataSource = true; \n userDataSource.reload().then(function () {\n userSelectBox.option('value', model.id + \"\");\n selectedUserId = model.id;\n if (!!selectedUserId && !!studentAddButtonInstance) {\n studentAddButtonInstance.option('disabled', false);\n }\n formData.studentsIds = [];\n studentsDataSource.load();\n });\n });\n }\n }\n }],\n onValueChanged: function (v) {\n if (v.previousValue != v.value) {\n selectedUserId = v.value;\n if (!!selectedUserId && !!studentAddButtonInstance) {\n studentAddButtonInstance.option('disabled', false);\n }\n formData.studentsIds = [];\n studentsDataSource.load();\n }\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_USER'))\n }],\n cssClass: 'first-form-item'\n }, \n {\n label: {\n text: $translate.instant('TXT_LBL_STUDENTS')\n },\n dataField: \"studentsIds\",\n editorType: \"dxTagBox\",\n editorOptions: {\n dataSource: studentsDataSource,\n displayExpr: 'fullName',\n valueExpr: 'id',\n showSelectionControls: true,\n applyValueMode: \"useButtons\",\n multiline: true,\n readOnly: copyMode,\n buttons: [{\n location: \"after\",\n name: \"addNewStudent\",\n options: {\n icon: \"plus\",\n disabled: true,\n onClick: function () {\n var prom = onAddStudentClick();\n prom.then(function (model) {\n refreshStudentsDataSource = true;\n studentsDataSource.reload().then(function () {\n formData.studentsIds.push(model.id + \"\");\n });\n });\n },\n onInitialized: function (e) {\n studentAddButtonInstance = e.component;\n },\n }\n }],\n onValueChanged: function (v) {\n calculatePrice(formData);\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_STUDENTS'))\n }],\n }, {\n label: {\n text: $translate.instant('TXT_DOMAIN')\n },\n dataField: \"domainId\",\n editorType: \"dxDropDownBox\",\n editorOptions: {\n dataSource: domainsDataSource,\n valueExpr: \"id\",\n displayExpr: \"name\",\n readOnly: copyMode,\n dropDownOptions: {\n height: '300px',\n resizeEnabled: true\n },\n contentTemplate: function(e) {\n var $tree = $(\"
\").dxTreeView(\n {\n dataSource: e.component.option(\"dataSource\"),\n dataStructure: \"tree\",\n keyExpr: 'id',\n itemsExpr: 'specializations',\n displayExpr: \"name\",\n selectByClick: true,\n selectNodesRecursive: false,\n selectionMode : \"single\",\n onItemSelectionChanged: function (arg) {\n if (arg.itemData.selected) {\n e.component.option(\"value\", arg.itemData.id);\n e.component.close();\n }\n } \n });\n return $tree;\n },\n onValueChanged: function (v) {\n calculatePrice(formData);\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_DOMAIN'))\n }]\n }, {\n label: {\n text: $translate.instant('TXT_LBL_NOTE')\n },\n dataField: \"notes\",\n editorType: \"dxTextArea\",\n editorOptions: {\n height: '54px',\n }\n }, {\n label: {\n text: $translate.instant('TXT_LBL_PRICE')\n },\n dataField: \"price\",\n editorType: \"dxNumberBox\",\n editorOptions: {\n readOnly: copyMode,\n format: \"#,##0.##\" + getCurrencySymbol(tenantInfo),\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_PRICE'))\n }],\n }, \n \n ... copyMode ? [] : [ \n {\n label: {\n text: $translate.instant('TXT_EMPLOYEE')\n },\n name: \"employee\",\n dataField: 'employeeId',\n editorType: \"dxSelectBox\",\n editorOptions: {\n dataSource: $scope.selectedEmployees,\n displayExpr: 'fullName',\n searchExpr: ['fullName'],\n valueExpr: 'id',\n searchEnabled: true,\n onValueChanged: function (v) {\n calculatePrice(formData);\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_EMPLOYEE'))\n }],\n cssClass: 'first-form-item'\n }],\n\n ... copyMode ? [\n {\n label: {\n text: $translate.instant('TXT_EMPLOYEE')\n },\n dataField: \"employeeIds\",\n editorType: \"dxTagBox\",\n editorOptions: {\n dataSource: $scope.selectedEmployees,\n displayExpr: 'fullName',\n valueExpr: 'id',\n showSelectionControls: true,\n applyValueMode: \"useButtons\",\n multiline: true,\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_EMPLOYEE'))\n }],\n }] : [], \n \n {\n label: {\n text: $translate.instant('TXT_CREATE_EMPLOYEE_SCHEDULE_IF_MISSING'),\n location: 'top',\n },\n name: \"CreateEmployeeScheduleIfMissing\",\n dataField: 'createEmployeeScheduleIfMissing',\n editorType: \"dxCheckBox\",\n cssClass: 'text-align-right'\n }, {\n label: {\n text: $translate.instant('TXT_LBL_START_DATE')\n },\n dataField: \"startDate\",\n editorType: \"dxDateBox\",\n editorOptions: {\n width: \"100%\",\n type: \"datetime\",\n onInitialized: function (e) {\n tbStartDate = e.element; \n },\n onValueChanged: function (e) {\n if (tbEndDate) {\n tbEndDate.dxValidator(\"instance\").validate();\n }\n calculatePrice(formData);\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_START_DATE'))\n }, {\n type: \"custom\",\n validationCallback: function (e) {\n return moment(e.value).isBefore(formData.endDate);\n },\n reevaluate: true,\n message: $translate.instant('TXT_ERROR_MUST_BE_EARLIER_THEN_PARAM').f(\n $translate.instant('TXT_LBL_START_DATE'),\n $translate.instant('TXT_LBL_END_DATE')\n )\n }],\n }, {\n label: {\n text: $translate.instant('TXT_LBL_END_DATE')\n },\n name: \"endDate\",\n dataField: \"endDate\",\n editorType: \"dxDateBox\",\n editorOptions: {\n width: \"100%\",\n type: \"datetime\",\n onInitialized: function (e) {\n tbEndDate = e.element;\n },\n onValueChanged: function (e) {\n if (tbStartDate) {\n tbStartDate.dxValidator(\"instance\").validate();\n }\n calculatePrice(formData);\n }\n },\n validationRules: [{\n type: \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_LBL_END_DATE'))\n }, {\n type: \"custom\",\n validationCallback: function (e) {\n return moment(e.value).isAfter(formData.startDate);\n },\n reevaluate: true,\n message: $translate.instant('TXT_ERROR_MUST_BE_LATER_THEN_PARAM').f(\n $translate.instant('TXT_LBL_END_DATE'),\n $translate.instant('TXT_LBL_START_DATE')\n )\n }],\n }, {\n label: {\n text: $translate.instant('TXT_PLACE')\n },\n name: \"place\",\n dataField: \"placeId\",\n editorType: \"dxSelectBox\",\n editorOptions: {\n dataSource: classroomDataSource,\n displayExpr: 'name',\n valueExpr: 'id',\n onValueChanged: function (e) {\n calculatePrice(formData);\n }\n },\n validationRules: [{\n type : \"required\",\n message: $translate.instant('TXT_ERROR_REQUIRED_WITH_PARAM').f($translate.instant('TXT_PLACE'))\n }],\n }]); \n }\n\n var schedulerInstance = null;\n\n $scope.schedulerOptions = {\n dataSource: scheduleDataSource,\n views: [{\n type: \"timelineDay\",\n timeCellTemplate: function (itemData, itemIndex, itemElement) {\n return \"
\" + itemData.text + \"
\";\n },\n resourceCellTemplate: 'resourceCellTemplate'\n }],\n currentView: \"timelineDay\",\n maxAppointmentsPerCell: \"unlimited\",\n firstDayOfWeek: 0,\n startDayHour: 7,\n endDayHour: 20,\n cellDuration: 30,\n groups: [\"employeeId\"],\n crossScrollingEnabled: true,\n currentDate: now,\n editing: {\n allowDragging: false, \n },\n resources: [{\n fieldExpr: \"employeeId\",\n valueExpr: \"id\",\n displayExpr: \"fullName\",\n allowMultiple: false, \n label: \"Employee\",\n useColorAsDefault: true\n }],\n bindingOptions: {\n \"resources[0].dataSource\": \"selectedEmployees \"\n },\n height: \"100%\",\n dataCellTemplate: function(data) {\n return $scope.markAvailable(data) \n ? \"
\"\n : \"\";\n },\n appointmentTooltipTemplate: 'tooltip',\n onCellContextMenu: function(e) {\n $scope.cellContextMenuCellData = e.cellData;\n \n if ($(e.cellElement).is(\".dx-scheduler-date-table-cell\")) {\n var data = {\n placeId: $scope.selectedClassroom,\n employeeId: e.cellData.groups.employeeId,\n startDate: e.cellData.startDate,\n endDate: e.cellData.endDate\n };\n \n let selectedCellData = e.component.option(\"selectedCellData\");\n \n for (let i = 0; i < selectedCellData.length; i++) { \n let cellData = selectedCellData[i];\n if (cellData) {\n if (!data.startDate || moment(data.startDate).isAfter(cellData.startDate)) {\n data.startDate = cellData.startDate;\n }\n if (!data.endDate || moment(data.endDate).isBefore(cellData.endDate)) {\n data.endDate = cellData.endDate;\n }\n }\n }\n $scope.cellContextMenuCellData = data;\n }\n },\n onInitialized: function (e) {\n schedulerInstance = e.component; \n },\n onCellClick: function (e) {\n e.cancel = true;\n },\n onAppointmentFormOpening: function (data) {\n\n if (data.appointmentData.type == 0) {\n setUpEmployeeReservationForm(data);\n }\n else if (data.appointmentData.type == 1) {\n data.popup.option(\"minWidth\", 700);\n setUpStudentBookingForm(data); \n }\n },\n onContentReady: function (e) {\n var popupConfig = e.component._popupConfig;\n\n e.component._popupConfig = function () {\n var popupOptions = popupConfig.apply(e.component, arguments) \n\n return $.extend(popupOptions, {\n height: 'auto',\n });\n }\n\n scheduleDataSource.load();\n },\n onOptionChanged: function (e) {\n if (e.name == \"currentDate\" && localStorageService.isSupported) {\n localStorageService.set('reservation-schedule-selected-date', JSON.stringify(e.value));\n }\n },\n onAppointmentRendered: function (e) {\n var origHeight = e.appointmentElement.height();\n // var offset = (origHeight - 4) / 2;\n switch (e.appointmentData.type) {\n case 0: \n e.appointmentElement.height(18); \n e.appointmentElement.addClass('availability-appointment');\n break;\n case 1:\n e.appointmentElement.addClass('reservation-appointment');\n e.appointmentElement.height(origHeight + origHeight - 20);\n e.appointmentElement.css('margin-top', -origHeight + 19);\n e.appointmentElement[0].style.backgroundColor = '#FF676D';\n break;\n }\n \n }\n };\n\n $scope.markPlaceAvailable = function (cellData) {\n\n }\n \n $scope.markAvailable = function (cellData) {\n if (!!employees && !!cellData.groups) {\n let employeeData = employees[cellData.groups.employeeId];\n if (employeeData && employeeData.availability.length > 0) {\n let key = cellData.groups.employeeId + '_' + cellData.startDate.getHours() + '_' + cellData.startDate.getMinutes();\n if (availableCache[key] !== undefined) {\n return availableCache[key];\n }\n \n let startDate = moment(cellData.startDate);\n let endDate = moment(cellData.endDate);\n\n let day = moment(startDate).startOf('day').toDate();\n\n let dayAvailability = _.find(employeeData.availability, { 'day': day });\n if (dayAvailability) {\n let coveringPeriod = _.find(dayAvailability.periods, function (p) {\n let periodStart = moment(p.start);\n let periodEnd = moment(p.end);\n\n let startIndication = periodStart.isSameOrBefore(startDate);\n let endIndication = periodEnd.isSameOrAfter(endDate);\n\n return startIndication && endIndication;\n });\n\n if (coveringPeriod) {\n availableCache[key] = true;\n return true;\n } else {\n availableCache[key] = false;\n }\n }\n }\n }\n return false; \n };\n\n $scope.employeeScheduleDelete = function (data) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: 'TXT_TEXT_CONFIRM_DELETE',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n schedulerInstance.deleteAppointment(data.appointmentData);\n }\n }]\n });\n schedulerInstance.hideAppointmentTooltip();\n };\n\n $scope.employeeScheduleEdit = function (data) {\n schedulerInstance.showAppointmentPopup(data.appointmentData);\n schedulerInstance.hideAppointmentTooltip();\n }\n\n $scope.reservationDelete = function (data) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: 'TXT_TEXT_CONFIRM_DELETE',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n schedulerInstance.deleteAppointment(data.appointmentData);\n }\n }]\n }); \n schedulerInstance.hideAppointmentTooltip();\n };\n\n $scope.reservationEdit = function (data) {\n schedulerInstance.showAppointmentPopup(data.appointmentData);\n schedulerInstance.hideAppointmentTooltip();\n }\n\n $scope.reservationCopy = function (data) {\n data.appointmentData.copyMode = true;\n schedulerInstance.showAppointmentPopup(data.appointmentData);\n schedulerInstance.hideAppointmentTooltip();\n }\n\n $scope.reservationCreatePayment = function (data) {\n addPayment(data.appointmentData);\n schedulerInstance.hideAppointmentTooltip();\n }\n\n var addPaymentPromise = $modal({\n templateUrl: 'finance/payments/payments-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n function addPayment(data) {\n addPaymentPromise.$scope.isAddDuePayment = true;\n addPaymentPromise.$scope.paymentDetail = {\n paymentID: 0,\n invoiceForType: 4,\n invoiceID: data.invoiceId,\n amount: data.arrear,\n selectedDate: moment().toDate(),\n };\n\n addPaymentPromise.$promise.then(function () {\n addPaymentPromise.$scope.detailError = null;\n addPaymentPromise.$scope.onSave = function () {\n schedulerInstance.repaint();\n }\n\n addPaymentPromise.show();\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n scheduleDataSource.load();\n\n if (schedulerInstance) {\n schedulerInstance.repaint();\n }\n });\n\n function onAddUserClick() {\n return $q(function (resolve, reject) {\n var userDetail = userSvc.createNew();\n\n userDetailDialogPromise.$promise.then(function () {\n userDetailDialogPromise.$scope.userDetail = angular.copy(userDetail);\n userDetailDialogPromise.$scope.preFilled = true;\n userDetailDialogPromise.$scope.userSaved = function (model) {\n resolve(model);\n }\n userDetailDialogPromise.show();\n });\n });\n }\n\n function onAddStudentClick() { \n return $q(function (resolve, reject) {\n\n if (!selectedUserId) {\n reject();\n return;\n }\n\n var student = studentSvc.createNew();\n student.userID = selectedUserId;\n\n studentDialogPromise.$promise.then(function () {\n studentDialogPromise.$scope.collection = [];\n studentDialogPromise.$scope.model = student;\n studentDialogPromise.$scope.preFilled = true;\n studentDialogPromise.$scope.onStudentSave = function (model) {\n resolve(model);\n };\n studentDialogPromise.show();\n });\n });\n }\n\n var userDetailDialogPromise = $modal({\n templateUrl: 'users/users-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var studentDialogPromise = $modal({\n templateUrl: 'users/students/students-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.factory('domainsSpecializationsSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n var Specializations = $resource('/restapi/domains/:id', {}, {\n 'get': { method: 'GET', isArray: true, url: '/restapi/domains/:domainId/specializations' },\n 'insert': { method: 'POST', url: '/restapi/domains/:domainId/specializations' },\n 'update': { method: 'PUT', url: '/restapi/domains/:domainId/specializations/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/domains/:domainId/specializations/:id' },\n });\n\n var domains;\n\n function getAll(domainId) { \n return repositorySvc.customGet(\n 'get',\n Specializations,\n {\n domainId: domainId\n });\n }\n\n function createNew() {\n return {\n name: '',\n description: null\n };\n }\n\n function insert(domainId, specialization, success, error) {\n return repositorySvc.customPutWithParams(\n 'insert',\n Specializations,\n {\n domainId: domainId\n },\n specialization,\n success,\n error);\n }\n\n function update(domainId, specialization, success, error) {\n return repositorySvc.customPutWithParams(\n 'update',\n Specializations,\n {\n domainId: domainId,\n id: specialization.id\n },\n specialization,\n success,\n error);\n }\n\n function remove(domainId, specialization, success, error) {\n return repositorySvc.customDelete(\n 'delete',\n Specializations,\n {\n domainId: domainId,\n id: specialization.id\n },\n success,\n error);\n }\n\n return {\n getAll: getAll,\n createNew: createNew,\n insert: insert,\n update: update,\n remove: remove\n }\n }]);","wbApp.controller('AttendanceLogCtrl', ['$scope', '$modal', '$window', '$translate', '$filter', '$q', 'messageBoxSvc', 'rfidCardsSvc', 'securitySvc', 'groupSvc', 'gridSortSvc', 'tenantSettingSvc',\nfunction ($scope, $modal, $window, $translate, $filter, $q, messageBoxSvc, rfidCardsSvc, securitySvc, groupSvc, gridSortSvc, tenantSettingSvc) {\n\n $scope.groups = groupSvc.getAllAsync();\n $scope.rawAttendanceLog = [];\n $scope.attendanceLog = [];\n $scope.hasAttendanceWithoutGroup = false;\n\n $scope.customFilter = { groups: [] };\n\n function preFilter() {\n $q.all([$scope.rawAttendanceLog.$promise, $scope.groups.$promise]).then(function () {\n\n $scope.hasAttendanceWithoutGroup = !!_.find($scope.rawAttendanceLog,\n function (o) {\n return (!o.groups || !o.groups.length) && !o.isDeleted;\n }\n );\n\n var groupIDs = _.values($scope.customFilter.groups);\n $scope.attendanceLog.length = 0;\n $scope.attendanceLog.push.apply($scope.attendanceLog,\n _.filter($scope.rawAttendanceLog, function (o) {\n if (groupIDs.length > 0) {\n return _.intersection(o.groups, groupIDs).length > 0;\n }\n return true;\n })\n );\n });\n }\n\n $scope.$watch('customFilter', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n var inUpdateRole = securitySvc.isInRole('RfidCardLog.Update');\n var inInsertRole = securitySvc.isInRole('RfidCardLog.Insert');\n var inDeleteRole = securitySvc.isInRole('RfidCardLog.Delete');\n var inSupportRole = securitySvc.isInRole('Support');\n\n\n $scope.rowAddDisabled = !inInsertRole;\n\n $scope.fromDate = moment().startOf('month').toDate();\n $scope.toDate = moment().endOf('month').toDate();\n\n function resetOriginalState(row) {\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_RESET_TO_DEFAULTS',\n message: 'TXT_TEXT_CONFIRM_RESET_TO_DEFAULTS',\n buttons: [{\n text: 'TXT_BTN_NO',\n }, {\n text: 'TXT_BTN_YES',\n callback: function () {\n rfidCardsSvc.reset(row, $scope.rawAttendanceLog, function () {\n preFilter();\n }, null);\n }\n }]\n });\n }\n\n $scope.gridSettings = {\n name: 'attendanceLog',\n columns: [\n { dataField: 'userID', caption: $translate.instant('TXT_LBL_ID'), dataType: 'number', visible: false },\n {\n dataField: 'eventTime',\n caption: $translate.instant('TXT_LBL_EVENT_TIME'),\n sortOrder: 'desc',\n dataType: 'date',\n format: {\n skeleton: 'yMEdHms'\n },\n width: '160px'\n },\n {\n dataField: 'validationErrorMessage',\n caption: \"\",\n dataType: 'string',\n allowFiltering: false,\n allowHeaderFiltering: false,\n encodeHtml: false,\n calculateCellValue: function (rowData) {\n return $filter('errorIndicator')(rowData.validationErrorMessage);\n },\n width: '25px'\n },\n {\n dataField: 'description',\n caption: $translate.instant('TXT_NOTE'),\n dataType: 'string',\n allowFiltering: false,\n allowHeaderFiltering: false,\n encodeHtml: false,\n calculateCellValue: function (rowData) {\n return $filter('noteIndicator')(rowData.description);\n },\n width: '25px'\n },\n\n {\n dataField: 'userIDType',\n caption: $translate.instant('TXT_LBL_TYPE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('rfidCardUserType')(rowData.userIDType);\n },\n width: '80px'\n },\n {\n dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string', width: '180px',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'studentFullName') }\n },\n {\n dataField: 'operatorFullName', caption: $translate.instant('TXT_LBL_USER'), dataType: 'string', \n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'operatorFullName') }\n },\n {\n dataField: 'deviceSerialNumber',\n caption: $translate.instant('TXT_LBL_DEVICE_SERIAL_NUMBER'),\n dataType: 'string',\n width: '90px',\n alignment: 'right'\n\n },\n //{ dataField: 'operatorAddress', caption: $translate.instant('TXT_LBL_ADDRESS'), dataType: 'string' },\n //{ dataField: 'operatorEmail', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px' },\n //{\n // dataField: 'operatorPhone',\n // caption: $translate.instant('TXT_LBL_PHONE'),\n // dataType: 'string',\n // calculateCellValue: function (rowData) {\n // return $filter('phone')(rowData.operatorPhone);\n // },\n // width: '130px'\n //},\n {\n dataField: 'groups',\n caption: $translate.instant('TXT_MENU_GROUPS'),\n dataType: 'string',\n encodeHtml: false,\n allowFiltering: false,\n allowHeaderFiltering: false,\n calculateCellValue: function (rowData) {\n return $filter('groupsColors')(rowData.groups);\n },\n width: '70px'\n },\n {\n dataField: 'uploadedAt',\n caption: $translate.instant('TXT_LBL_UPLOADED_AT'),\n dataType: 'date',\n format: { datetime: 'short' },\n width: '110px',\n visible: inInsertRole\n }, \n { dataField: 'isDeleted', caption: $translate.instant('TXT_VAL_DELETED'), dataType: 'boolean', width: 0 }\n ],\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.isDeleted) {\n e.rowElement.addClass('text-muted');\n } else {\n if (inUpdateRole && data.overriden) {\n e.rowElement.addClass('text-danger');\n }\n if (!inUpdateRole && data.overridenWithDescription) {\n e.rowElement.addClass('text-danger');\n }\n }\n }\n },\n shouldShowAdd: function () { return inInsertRole; },\n shouldShowEdit: function (row) {\n return ((!row.isDeleted || !String.prototype.isNullOrWhitespace(row.description)) &&\n (inUpdateRole || !String.prototype.isNullOrWhitespace(row.description)));\n },\n shouldDisableEdit: function (row) {\n return ((row.isDeleted && String.prototype.isNullOrWhitespace(row.description)) ||\n (!inUpdateRole && String.prototype.isNullOrWhitespace(row.description)));\n },\n shouldShowDelete: function (row) {\n return (!row.isDeleted && inDeleteRole);\n },\n //shouldDisableDelete: function (row) {\n // return (row.isDeleted || !inDeleteRole);\n //},\n disableDeleteConfirmation: true,\n customCommands: [{\n text: $translate.instant('TXT_LBL_RESET_TO_DEFAULT'),\n isVisible: function (row) { return row.rfidCardLogOverrideID && inUpdateRole; },\n callback: function (row) {\n resetOriginalState(row);\n }\n }, {\n text: $translate.instant('TXT_LBL_MPSV_ATTENDANCE_REPORT'),\n callback: function (row) {\n showMPSVReportParamsDialog(false);\n },\n isVisible: function (row) { return tenantSettingSvc.settings.childrenGroupSupport; }\n\n }, {\n text: $translate.instant('TXT_LBL_MPSV_NURSERY_ATTENDANCE_REPORT'),\n callback: function (row) {\n showMPSVReportParamsDialog(true);\n },\n isVisible: function (row) { return tenantSettingSvc.settings.smallNurserySupport; }\n\n }, {\n text: tenantSettingSvc.settings.rfidAttendanceEUSupport\n ? $translate.instant('TXT_LBL_MPSV_STUDENT_ATTENDANCE_REPORT')\n : $translate.instant('TXT_LBL_STUDENT_ATTENDANCE_REPORT'),\n callback: function (row) {\n showMPSVStudentReportParamsDialog(false);\n },\n isVisible: function (row) { return tenantSettingSvc.settings.childrenGroupSupport ||\n tenantSettingSvc.settings.smallNurserySupport;\n }\n }, {\n text: \"(\" + $translate.instant('TXT_LBL_SUPPORT') + \") \" + $translate.instant('TXT_TITLE_EFS_IMPORT'),\n callback: function (row) {\n showEfsReportImportDetail();\n },\n isVisible: function (row) {\n return inSupportRole;\n }\n }, {\n text: \"(\" + $translate.instant('TXT_LBL_SUPPORT') + \") \" + $translate.instant('TXT_TITLE_DELETE_ALL_IN_RANGE'),\n callback: function (row) {\n showAttendanceLogSupportDetail('delete-all-in-range');\n },\n isVisible: function (row) {\n return inSupportRole;\n }\n }, {\n text: \"(\" + $translate.instant('TXT_LBL_SUPPORT') + \") \" + $translate.instant('TXT_TITLE_DELETE_USER_IN_RANGE'),\n callback: function (row) {\n showAttendanceLogSupportDetail('delete-user-in-range');\n },\n isVisible: function (row) {\n return inSupportRole;\n }\n }, {\n text: \"(\" + $translate.instant('TXT_LBL_SUPPORT') + \") \" + $translate.instant('TXT_TITLE_REPLACE_USER_IN_RANGE'),\n callback: function (row) {\n showAttendanceLogSupportDetail('replace-user-in-range');\n },\n isVisible: function (row) {\n return inSupportRole;\n }\n }, {\n text: \"(\" + $translate.instant('TXT_LBL_SUPPORT') + \") \" + $translate.instant('TXT_TITLE_SHIFT_TIME_IN_RANGE'),\n callback: function (row) {\n showAttendanceLogSupportDetail('shift-time-in-range');\n },\n isVisible: function (row) {\n return inSupportRole;\n }\n }]\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData($scope.fromDate, $scope.toDate);\n });\n\n function refreshData(fromDate, toDate) {\n var mfromDate = moment(fromDate);\n var mtoDate = moment(toDate);\n\n if (mfromDate.isValid() && mtoDate.isValid() && mfromDate.isBefore(mtoDate)) {\n $scope.rawAttendanceLog = rfidCardsSvc.getAllLogsAsync(fromDate, toDate);\n } else {\n $scope.rawAttendanceLog = [];\n }\n preFilter();\n }\n\n refreshData($scope.fromDate, $scope.toDate);\n\n $scope.onFromDateChange = function (fromDate) {\n if (fromDate) {\n refreshData(fromDate, $scope.toDate);\n }\n }\n\n $scope.onToDateChange = function (toDate) {\n if (toDate) {\n refreshData($scope.fromDate, toDate);\n }\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.collection = $scope.rawAttendanceLog;\n detailDialogPromise.$scope.onSave = function () {\n preFilter();\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = rfidCardsSvc.createNew();\n detailDialogPromise.$scope.collection = $scope.rawAttendanceLog;\n detailDialogPromise.$scope.onSave = function () {\n preFilter();\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n deleteConfirmationPromise.$promise.then(function () {\n deleteConfirmationPromise.$scope.model = { description: \"\" }\n deleteConfirmationPromise.$scope.onDetailSave = function (model) {\n var dataToDelete = angular.copy(data);\n dataToDelete.description = model.description;\n rfidCardsSvc.remove(dataToDelete, $scope.rawAttendanceLog, function () {\n preFilter();\n });\n }\n deleteConfirmationPromise.show();\n });\n }\n\n function showMPSVReportParamsDialog(isNursery) {\n mpsvDialogPromise.$promise.then(function () {\n mpsvDialogPromise.$scope.fromDate = $scope.fromDate;\n mpsvDialogPromise.$scope.toDate = $scope.toDate;\n mpsvDialogPromise.$scope.isNursery = isNursery;\n mpsvDialogPromise.$scope.reportGenerated = function (data) {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n mpsvDialogPromise.show();\n });\n }\n\n function showEfsReportImportDetail()\n {\n efsReportImportDetailPromise.$promise.then(function () {\n efsReportImportDetailPromise.show();\n });\n }\n\n function showAttendanceLogSupportDetail(operationMode)\n {\n attendanceLogSupportDetailPromise.$promise.then(function () {\n attendanceLogSupportDetailPromise.$scope.operationMode = operationMode;\n attendanceLogSupportDetailPromise.$scope.onSave = function () {\n refreshData($scope.fromDate, $scope.toDate);\n }\n attendanceLogSupportDetailPromise.show();\n });\n }\n \n\n function showMPSVStudentReportParamsDialog() {\n mpsvStudentDialogPromise.$promise.then(function () {\n mpsvStudentDialogPromise.$scope.fromDate = $scope.fromDate;\n mpsvStudentDialogPromise.$scope.toDate = $scope.toDate;\n mpsvStudentDialogPromise.$scope.rfidAttendanceEUSupport = tenantSettingSvc.settings.rfidAttendanceEUSupport;\n mpsvStudentDialogPromise.$scope.reportGenerated = function (fromDate, toDate, students, projectName, projectRegistrationNumber, recipientName) {\n\n var rr = _.reduce(students, function (result, value, key) {\n (result[value.deviceSerialNumber] || (result[value.deviceSerialNumber] = [])).push(value.studentID);\n return result;\n }, {});\n\n var rrr = _.map(rr, function (value, key) {\n return {d: key, s: value}\n });\n\n var shortened = angular.toJson(rrr);\n\n if (tenantSettingSvc.settings.rfidAttendanceEUSupport) {\n $window.open(\n '/Admin/Report/MPSVAttendanceByStudent' +\n '?StartDate=' + fromDate.toJSON() +\n '&EndDate=' + toDate.toJSON() +\n '&projectName=' + encodeURI(projectName) +\n '&projectRegistrationNumber=' + encodeURI(projectRegistrationNumber) +\n '&recipientName=' + encodeURI(recipientName) +\n '&students=' + encodeURI(shortened),\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n } else {\n $window.open(\n '/Admin/Report/AttendanceByStudent' +\n '?StartDate=' + fromDate.toJSON() +\n '&EndDate=' + toDate.toJSON() +\n '&name=' + encodeURI(projectName) +\n '&providerName=' + encodeURI(recipientName) +\n '&students=' + encodeURI(shortened),\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n }\n\n mpsvStudentDialogPromise.show();\n });\n }\n\n $scope.downloadBtnClick = function () {\n driverDownloadDetailPromise.$promise.then(function () {\n driverDownloadDetailPromise.show();\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/attendance-log-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var mpsvDialogPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/attendance-log-mpsv-attendance-report.html',\n show: false,\n scope: $scope.$new()\n });\n\n var mpsvStudentDialogPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/attendance-log-mpsv-student-attendance-report.html',\n show: false,\n scope: $scope.$new()\n });\n\n var deleteConfirmationPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/attendance-log-delete-confirmation.html',\n show: false,\n scope: $scope.$new()\n });\n\n var efsReportImportDetailPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/efs-report-import-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var attendanceLogSupportDetailPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/attendance-log-support-detaill.html',\n show: false,\n scope: $scope.$new()\n });\n\n var driverDownloadDetailPromise = $modal({\n templateUrl: 'rfid-cards/attendance-log/driver-download-detaill.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('AttendanceLogDetailCtrl', ['$scope', 'rfidCardsSvc', 'securitySvc',\nfunction ($scope, rfidCardsSvc, securitySvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.inUpdateRole = securitySvc.isInRole('RfidCardLog.Update');\n $scope.inInsertRole = securitySvc.isInRole('RfidCardLog.Insert');\n $scope.isDisabled = $scope.model.isDeleted ||\n (!!$scope.modelOrig.rfidCardLogID && !$scope.inUpdateRole) ||\n (!$scope.modelOrig.rfidCardLogID && !$scope.inInsertRole);\n\n $scope.isSaving = false;\n\n $scope.onUserTypeChange = function (model) {\r\n model.userID = null;\r\n }\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\r\n return;\r\n }\n\n $scope.isSaving = true;\n\n if (!model.rfidCardLogID) {\n rfidCardsSvc.insert(model, $scope.collection, success, error);\n } else {\n rfidCardsSvc.update(model, $scope.collection, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n $scope.onSave();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","wbApp.controller('AttendanceLogMpsvReportParamsCtrl', ['$scope', '$q', 'rfidCardsSvc', '$translate', 'groupSvc',\nfunction ($scope, $q, rfidCardsSvc, $translate, groupSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.studentIsSelected = false;\n $scope.employeeIsSelected = false;\n\n $scope.detailIsUnchanged = function (data) {\n return !$scope.studentIsSelected || !$scope.employeeIsSelected || !!$scope.isLoadingData;\n };\n\n function loadData(fromDate, toDate) {\n\n if (!fromDate || !toDate) {\n return;\n }\n\n $scope.isLoadingData = true;\n $scope.studentIsSelected = false;\n $scope.employeeIsSelected = false;\n $scope.students = rfidCardsSvc.getRegisteredStudentsForPeriodAsync(fromDate, toDate);\n $scope.employees = rfidCardsSvc.getRegisteredEmployeesForPeriodAsync(fromDate, toDate);\n\n $q.all([$scope.students.$promise, $scope.employees.$promise]).then(function () {\n $scope.isLoadingData = false;\n });\n }\n\n function updateDetailError(shouldMessageBePresent, msg) {\n if (shouldMessageBePresent) {\n // remove msg\n if (!!$scope.detailError &&\n !!$scope.detailError.errors &&\n $scope.detailError.errors.length > 0) {\n var idx = _.findIndex($scope.detailError.errors, { message: msg });\n if (idx !== -1) {\n $scope.detailError.errors.splice(idx, 1);\n }\n if ($scope.detailError.errors.length === 0) {\n $scope.detailError = null;\n }\n }\n } else {\n // add msg\n if (!$scope.detailError) {\n $scope.detailError = { errors: [{ message: msg }] };\n } else {\n if (!$scope.detailError.errors) {\n $scope.detailError.errors = [{ message: msg }];\n } else {\n if (!_.find($scope.detailError.errors, { message: msg })) {\n $scope.detailError.errors.push({ message: msg });\n }\n }\n }\n }\n }\n\n $scope.detailError = {\n errors: [\n { message: $translate.instant('TXT_MSG_SELECT_STUDENTS_TO_INCLUDE_IN_REPORT') },\n { message: $translate.instant('TXT_MSG_SELECT_EMPLOYEES_TO_INCLUDE_IN_REPORT') }\n ]\n }\n\n $scope.studentsGridSelectionChanged = function () {\n\n $scope.studentIsSelected = !!_.find($scope.students, { isSelected: true });\n var msg = $translate.instant('TXT_MSG_SELECT_STUDENTS_TO_INCLUDE_IN_REPORT');\n\n updateDetailError($scope.studentIsSelected, msg);\n };\n\n $scope.employeesGridSelectionChanged = function () {\n $scope.employeeIsSelected = !!_.find($scope.employees, { isSelected: true });\n var msg = $translate.instant('TXT_MSG_SELECT_EMPLOYEES_TO_INCLUDE_IN_REPORT');\n\n updateDetailError($scope.employeeIsSelected, msg);\n }\n\n loadData($scope.fromDate, $scope.toDate);\n\n $scope.detailTabs = [\n {\n title: 'TXT_LBL_STUDENTS',\n template: \"rfid-cards/attendance-log/attendance-log-mpsv-attendance-report-students-tab.html\"\n },\n {\n title: \"TXT_LBL_EMPLOYEES\",\n template: \"rfid-cards/attendance-log/attendance-log-mpsv-attendance-report-employees-tab.html\"\n }];\n\n $scope.rangeChanged = function (fromDate, toDate) {\n loadData(fromDate, toDate);\n }\n\n $scope.groups = groupSvc.getAllAsync();\n\n $scope.studentsGridFilterOptions = {\n groups: [],\n filterText: \"\",\n filterFunction: function (value, index) {\n if (!$scope.studentsGridFilterOptions.groups.length) {\n return true;\n }\n\n return _.intersection(value.groups, $scope.studentsGridFilterOptions.groups).length > 0;\n }\n };\n\n $scope.employeesGridFilterOptions = {\n filterText: \"\"\n };\n\n $scope.studentsGridOptions = {\n sortInfo: { fields: ['fullName'], directions: ['asc'] },\n columnDefs: [\n { field: 'deviceSerialNumber', displayName: \"TXT_LBL_DEVICE_SERIAL_NUMBER\", width: '90px' },\n { field: 'fullName', displayName: \"TXT_HUMAN_NAME\", sort: 'humanName' },\n { field: 'parentFullName', displayName: \"TXT_LBL_PARENT\"},\n { field: 'email', displayName: \"TXT_LBL_EMAIL\", width: '180px' },\n { field: 'phone', displayName: \"TXT_LBL_PHONE\", cellFilter: \"phone\", width: '130px' },\n { field: 'groups', displayName: \"TXT_LBL_GROUPS\", hidden: true },\n ],\n noCommandColumn: true,\n multiSelect: true,\n disableExport: true\n };\n\n $scope.employeesGridOptions = {\n sortInfo: { fields: ['fullName'], directions: ['asc'] },\n columnDefs: [\n { field: 'deviceSerialNumber', displayName: \"TXT_LBL_DEVICE_SERIAL_NUMBER\", width: '90px' },\n { field: 'fullName', displayName: \"TXT_HUMAN_NAME\", sort: 'humanName' },\n { field: 'groups', displayName: \"TXT_LBL_GROUPS\", hidden: true }],\n noCommandColumn: true,\n multiSelect: true,\n disableExport: true\n };\n\n $scope.isSavingXls = false;\n $scope.isSavingXlsx = false;\n\n $scope.onDetailSave = function (model, compatibility) {\n\n if (compatibility) {\n $scope.isSavingXls = true;\n } else {\n $scope.isSavingXlsx = true;\n }\n\n function success(data) {\n $scope.isSavingXls = false;\n $scope.isSavingXlsx = false;\n $scope.$hide();\n $scope.reportGenerated(data);\n }\n\n function error(data) {\n $scope.isSavingXls = false;\n $scope.isSavingXlsx = false;\n $scope.detailError = data;\n }\n\n var students = _.map(_.filter($scope.students, { isSelected: true }),\n function (s) { return { studentID: s.studentID, deviceSerialNumber: s.deviceSerialNumber }; });\n var employees = _.map(_.filter($scope.employees, { isSelected: true }),\n function (e) { return { employeeID: e.employeeID, deviceSerialNumber: e.deviceSerialNumber }; });\n\n var group = (!!$scope.studentsGridFilterOptions.groups && $scope.studentsGridFilterOptions.groups.length === 1)\n ? $scope.studentsGridFilterOptions.groups[0]\n : null;\n\n var res = null;\n \n if ($scope.isNursery) {\n res = rfidCardsSvc.getMPSVNurseryAttendanceReportAsync(\n students,\n employees,\n $scope.fromDate,\n $scope.toDate,\n compatibility,\n group);\n\n } else {\n res = rfidCardsSvc.getMPSVAttendanceReportAsync(\n students,\n employees,\n $scope.fromDate,\n $scope.toDate,\n compatibility,\n group);\n }\n\n res.$promise.then(success, error);\n }\n}]);\n","wbApp.controller('AttendanceLogMpsvStudentReportParamsCtrl', ['$scope', 'rfidCardsSvc', '$translate', 'localStorageService', 'groupSvc',\n function ($scope, rfidCardsSvc, $translate, localStorageService, groupSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.repParams = {};\n\n function loadDefaultData() {\n if (localStorageService.isSupported) {\n $scope.repParams.projectName = localStorageService.get('mpsv_projectName');\n $scope.repParams.projectRegistrationNumber = localStorageService.get('mpsv_projectRegistrationNumber');\n $scope.repParams.recipientName = localStorageService.get('mpsv_recipientName');\n }\n }\n\n function saveDefaultData() {\n if (localStorageService.isSupported) {\n localStorageService.set('mpsv_projectName', $scope.repParams.projectName);\n localStorageService.set('mpsv_projectRegistrationNumber', $scope.repParams.projectRegistrationNumber);\n localStorageService.set('mpsv_recipientName', $scope.repParams.recipientName);\n }\n }\n\n loadDefaultData();\n\n $scope.studentIsSelected = false; \n\n $scope.detailIsUnchanged = function (data) {\n return !$scope.studentIsSelected || !!$scope.isLoadingData;\n };\n\n function loadData(fromDate, toDate) {\n\n if (!fromDate || !toDate) {\r\n return;\r\n }\n\n $scope.isLoadingData = true;\n $scope.studentIsSelected = false;\n $scope.students = rfidCardsSvc.getRegisteredStudentsForPeriodAsync(fromDate, toDate);\n\n $scope.students.$promise.then(function () {\n $scope.isLoadingData = false;\n });\n }\n\n function updateDetailError(shouldMessageBePresent, msg) {\n if (shouldMessageBePresent) {\n // remove msg\n if (!!$scope.detailError &&\n !!$scope.detailError.errors &&\n $scope.detailError.errors.length > 0) {\n var idx = _.findIndex($scope.detailError.errors, { message: msg });\n if (idx !== -1) {\n $scope.detailError.errors.splice(idx, 1);\n }\n if ($scope.detailError.errors.length === 0) {\n $scope.detailError = null;\n }\n }\n } else {\n // add msg\n if (!$scope.detailError) {\n $scope.detailError = { errors: [{ message: msg }] };\n } else {\n if (!$scope.detailError.errors) {\n $scope.detailError.errors = [{ message: msg }];\n } else {\n if (!_.find($scope.detailError.errors, { message: msg })) {\n $scope.detailError.errors.push({ message: msg });\n }\n }\n }\n }\n }\n\n $scope.detailError = {\n errors: [\n { message: $translate.instant('TXT_MSG_SELECT_STUDENTS_TO_INCLUDE_IN_REPORT') }\n ]\n }\n\n $scope.studentsGridSelectionChanged = function () {\n\n $scope.studentIsSelected = !!_.find($scope.students, { isSelected: true });\n var msg = $translate.instant('TXT_MSG_SELECT_STUDENTS_TO_INCLUDE_IN_REPORT');\n\n updateDetailError($scope.studentIsSelected, msg);\n };\n\n loadData($scope.fromDate, $scope.toDate);\n\n $scope.detailTabs = [{\n title: \"TXT_MAIN\",\n template: \"rfid-cards/attendance-log/attendance-log-mpsv-student-attendance-report-main-tab.html\"\n },{\n title: 'TXT_LBL_STUDENTS',\n template: \"rfid-cards/attendance-log/attendance-log-mpsv-student-attendance-report-students-tab.html\"\n }];\n\n $scope.rangeChanged = function (fromDate, toDate) {\n loadData(fromDate, toDate);\n }\n\n $scope.groups = groupSvc.getAllAsync();\n\n $scope.studentsGridFilterOptions = {\n groups: [],\n filterText: \"\",\n filterFunction: function (value, index) {\n if (!$scope.studentsGridFilterOptions.groups.length) {\n return true;\n }\n\n return _.intersection(value.groups, $scope.studentsGridFilterOptions.groups).length > 0;\n }\n };\n\n $scope.$watch('studentsGridFilterOptions.groups', function (newValue, oldValue) {\n if (!!newValue && newValue.length === 1) {\r\n $scope.groups.$promise.then(function (g) {\r\n var group = _.find(g, { 'groupID': newValue[0] });\r\n if (group) {\r\n if (group.projectName) {\r\n $scope.repParams.projectName = group.projectName;\r\n }\r\n if (group.projectRegistrationNumber) {\r\n $scope.repParams.projectRegistrationNumber = group.projectRegistrationNumber;\r\n }\r\n if (group.projectBeneficiary) {\r\n $scope.repParams.recipientName = group.projectBeneficiary;\r\n }\r\n }\r\n });\r\n }\r\n });\n\n $scope.studentsGridOptions = {\n sortInfo: { fields: ['fullName'], directions: ['asc'] },\n columnDefs: [\n { field: 'deviceSerialNumber', displayName: \"TXT_LBL_DEVICE_SERIAL_NUMBER\", width: '90px' },\n { field: 'fullName', displayName: \"TXT_HUMAN_NAME\", sort: 'humanName' },\n { field: 'parentFullName', displayName: \"TXT_LBL_PARENT\"},\n { field: 'email', displayName: \"TXT_LBL_EMAIL\", width: '180px' },\n { field: 'phone', displayName: \"TXT_LBL_PHONE\", cellFilter: \"phone\", width: '130px' },\n { field: 'groups', displayName: \"TXT_LBL_GROUPS\", hidden: true },\n ],\n noCommandColumn: true,\n multiSelect: true,\r\n disableExport: true\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n var students = _.map(_.filter($scope.students, { isSelected: true }), \n function (s) { return { studentID: s.studentID, deviceSerialNumber: s.deviceSerialNumber }; });\n\n saveDefaultData();\n\n $scope.$hide();\n\n $scope.reportGenerated(\n $scope.fromDate,\n $scope.toDate,\n students,\n $scope.repParams.projectName,\n $scope.repParams.projectRegistrationNumber,\n $scope.repParams.recipientName);\n }\n}]);\n","wbApp.controller('AttendanceLogSupportDetailCtrl', ['$scope', '$http', '$translate', 'localStorageService', 'rfidCardsSvc',\nfunction ($scope, $http, $translate,localStorageService, rfidCardsSvc) {\n\n $scope.title = '';\n $scope.isSaving = false;\n\n $scope.operationResultText = null;\n\n $scope.model = {\n fromDate: new Date(),\n toDate: new Date(),\n userIdType: 0,\n oldUserId: null,\n newUserId: null,\n userId: null,\n timeShiftInMinutes: 0,\n deviceSerialNumber: null\n };\n\n if (localStorageService.isSupported) {\n $scope.model.deviceSerialNumber = localStorageService.get('lastRfidCardDeviceSerialNumber');\n }\n\n $scope.$watch('model', function (model) { \n if (localStorageService.isSupported) {\n localStorageService.set('lastRfidCardDeviceSerialNumber', model.deviceSerialNumber);\n }\n }, true);\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onUserTypeChange = function (model) {\n model.oldUserId = null;\n model.newUserId = null;\n model.userId = null;\n }\n\n switch ($scope.operationMode)\n {\n case 'delete-all-in-range':\n $scope.title = $translate.instant('TXT_TITLE_DELETE_ALL_IN_RANGE');\n break;\n case 'delete-user-in-range':\n $scope.title = $translate.instant('TXT_TITLE_DELETE_USER_IN_RANGE');\n break;\n case 'replace-user-in-range':\n $scope.title = $translate.instant('TXT_TITLE_REPLACE_USER_IN_RANGE');\n break;\n case 'shift-time-in-range':\n $scope.title = $translate.instant('TXT_TITLE_SHIFT_TIME_IN_RANGE');\n break;\n }\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n $scope.operationResultText = null;\n\n var dto = {\n fromDateUtc: moment(model.fromDate).utc().format(),\n toDateUtc: moment(model.toDate).utc().format()\n }\n\n switch ($scope.operationMode) {\n case 'delete-all-in-range':\n dto.events = [];\n dto.uploadContacts = [];\n rfidCardsSvc.supportReplaceRange(dto).$promise.then(success, error);\n break;\n case 'delete-user-in-range':\n dto.userId = model.userId;\n dto.userIdType = model.userIdType;\n rfidCardsSvc.supportDeleteUserInRange(dto).$promise.then(successWithTextDecode, error);\n break;\n case 'replace-user-in-range':\n dto.oldUserId = model.oldUserId;\n dto.newUserId = model.newUserId;\n dto.userIdType = model.userIdType;\n rfidCardsSvc.supportReplaceUserInRange(dto).$promise.then(successWithTextDecode, error);\n break;\n case 'shift-time-in-range':\n {\n var duration = moment.duration(model.timeShiftInMinutes, 'minutes');\n if (model.timeShiftInMinutes < 0) {\n dto.timeShift = '-' + Math.abs(duration.days()) + '.' + (\"0\" + Math.abs(duration.hours())).slice(-2) + ':' + (\"0\" + Math.abs(duration.minutes())).slice(-2) + ':' + (\"0\" + Math.abs(duration.seconds())).slice(-2);\n } else {\n dto.timeShift = duration.days() + '.' + (\"0\" + duration.hours()).slice(-2) + ':' + (\"0\" + duration.minutes()).slice(-2) + ':' + (\"0\" + duration.seconds()).slice(-2);\n }\n dto.deviceSerialNumber = model.deviceSerialNumber;\n rfidCardsSvc.supportShiftOriginEventInRange(dto).$promise.then(success, error);\n }\n break;\n }\n\n //if (!model.rfidCardLogID) {\n // rfidCardsSvc.insert(model, $scope.collection, success, error);\n //} else {\n // rfidCardsSvc.update(model, $scope.collection, success, error);\n //}\n\n function successWithTextDecode(result) {\n if (result.length == 0) {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onSave) {\n $scope.onSave();\n }\n } else {\n error(result);\n }\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onSave) {\n $scope.onSave();\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.operationResultText = data;\n }\n }\n}]);\n","wbApp.controller('DeviceRegistrationCtrl', ['$scope', '$modal', '$translate', '$timeout', 'messageBoxSvc', 'rfidDeviceRegistrationSvc',\nfunction ($scope, $modal, $translate, $timeout, messageBoxSvc, rfidDeviceRegistrationSvc) {\n\n $scope.gridSettings = {\n name: 'deviceRegistrations',\n keyExpr: 'id',\n columns: [\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\n { dataField: 'deviceSerialNumber', caption: $translate.instant('TXT_LBL_DEVICE_SERIAL_NUMBER'), dataType: 'string' },\n { dataField: 'isAllowed', caption: $translate.instant('TXT_LBL_ALLOWED'), dataType: 'boolean', width: '70px' },\n { dataField: 'createdAt', caption: $translate.instant('TXT_LBL_CREATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px' },\n { dataField: 'updatedAt', caption: $translate.instant('TXT_LBL_UPDATED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px', sortOrder: 'desc' },\n { dataField: 'updatedByFullName', caption: $translate.instant('TXT_LBL_UPDATED_BY'), dataType: 'string', width: '180px' },\n ]\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n function refreshData() {\n var selectedRowKeys = null;\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n selectedRowKeys = $scope.gridSettings.gridInstance.getSelectedRowKeys();\n }\n\n $scope.deviceRegistrations = rfidDeviceRegistrationSvc.getAllAsync();\n\n $scope.deviceRegistrations.$promise.then(function () {\n if (!!selectedRowKeys && !!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $timeout(function () {\n $scope.gridSettings.gridInstance.selectRows(selectedRowKeys, false);\n }, 100);\n }\n });\n }\n\n refreshData();\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onSave = function () {\n refreshData();\n };\n detailDialogPromise.show();\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'rfid-cards/device-registration/device-registration-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('DeviceRegistrationDetailCtrl', ['$scope', 'rfidDeviceRegistrationSvc',\nfunction ($scope, rfidDeviceRegistrationSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n rfidDeviceRegistrationSvc.update(model).$promise.then(success, error);\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n if ($scope.onSave) {\n $scope.onSave();\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","wbApp.controller('DriverDownloadDetailCtrl', ['$scope', \nfunction ($scope) {\n\n}]);\n","wbApp.controller('EfsReportImportDetailCtrl', ['$scope', 'localStorageService',\nfunction ($scope, localStorageService) {\n\n $scope.uploadUrl = \"restapi/rfid-card-logs/support/import-efs-report?deviceSerialNumber='ABC123'&dryRun=true\";\n $scope.uploadSuccess = false;\n $scope.uploadFullSuccess = false;\n $scope.uploadError = false;\n\n var uploadComponent = null;\n\n $scope.model = {\n deviceSerialNumber: '',\n dryRun: true\n }\n\n if (localStorageService.isSupported) {\n $scope.model.deviceSerialNumber = localStorageService.get('lastRfidCardDeviceSerialNumber');\n }\n\n $scope.$watch('model', function (model) {\n $scope.uploadUrl = \"restapi/rfid-card-logs/support/import-efs-report?deviceSerialNumber=\" + encodeURI(model.deviceSerialNumber) + \"&dryRun=\" + model.dryRun;\n if (localStorageService.isSupported) {\n localStorageService.set('lastRfidCardDeviceSerialNumber', model.deviceSerialNumber);\n }\n uploadComponent.reset();\n $scope.uploadResultText = null;\n $scope.uploadSuccess = false;\n $scope.uploadFullSuccess = false;\n $scope.uploadError = false;\n }, true);\n\n $scope.fileUploaderOptions = {\n accept: \"application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n uploadMode: \"instantly\",\n maxFileSize: 1024 * 1024 * 20, // 20 MB\n onContentReady: function (e) {\n uploadComponent = e.component;\n },\n onUploadError: function (e) {\n $scope.uploadResultText = JSON.parse(e.request.responseText);\n $scope.uploadSuccess = false;\n $scope.uploadFullSuccess = false;\n $scope.uploadError = true;\n uploadComponent.reset();\n },\n onUploadStarted: function (e) {\n $scope.uploadResultText = null;\n $scope.uploadSuccess = false;\n $scope.uploadFullSuccess = false;\n $scope.uploadError = false;\n },\n onUploaded: function (e) {\n $scope.uploadResultText = JSON.parse(e.request.responseText);\n $scope.uploadSuccess = true;\n $scope.uploadFullSuccess = !$scope.model.dryRun;\n $scope.uploadError = false;\n },\n bindingOptions: {\n uploadUrl: \"uploadUrl\",\n disabled: \"form.$invalid\"\n }\n };\n\n}]);\n","wbApp.controller('LogUploadContactCtrl', ['$scope', '$modal', 'rfidCardsSvc',\nfunction ($scope, $modal, rfidCardsSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.fromDate = moment().startOf('month').toDate();\n $scope.toDate = moment().endOf('month').toDate();\n\n\n $scope.gridOptions = {\n sortInfo: { fields: ['createdAt'], directions: ['dsc'] },\n columnDefs: [{ field: 'deviceSerialNumber', displayName: \"TXT_LBL_DEVICE_SERIAL_NUMBER\" },\n { field: 'noOfLogEntriesUploaded', displayName: \"TXT_LBL_NO_OF_LOG_ENTRIES_UPLOADED\", align: 'right', width: '150px' },\n { field: 'noOfNewLogEntries', displayName: \"TXT_LBL_NO_OF_NEW_LOG_ENTRIES\", sort: 'locale', align: 'right', width: '150px' },\n { field: 'createdAt', displayName: \"TXT_LBL_UPLOADED_AT\", cellFilter: \"date:'EEE (dd.MM.yy) HH:mm:ss'\", width: '160px' },\n ],\n noCommandColumn: true\n };\n\n $scope.$on('refreshData', function (e, data) {\n refreshData($scope.fromDate, $scope.toDate);\n });\n\n function refreshData(fromDate, toDate) {\n $scope.uploadContacts = rfidCardsSvc.getAllUploadContacts(fromDate, toDate);\n }\n\n refreshData($scope.fromDate, $scope.toDate);\n\n $scope.onFromDateChange = function (fromDate) {\n if (fromDate) {\n refreshData(fromDate, $scope.toDate);\n }\n }\n\n $scope.onToDateChange = function (toDate) {\n if (toDate) {\n refreshData($scope.fromDate, toDate);\n }\n }\n}]);\n","wbApp.directive('rfidCardUserTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_LBL_STUDENT' },\n { id: 1, text: 'TXT_LBL_EMPLOYEE' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","wbApp.filter('rfidCardUserType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 0:\n return $translate.instant('TXT_LBL_STUDENT');\n case 1:\n return $translate.instant('TXT_LBL_EMPLOYEE');\n default:\n return '';\n }\n };\n}]);","'use strict';\n\nwbApp.factory('rfidCardsSvc', ['$resource', '$q', 'repositorySvc', 'securitySvc', 'localStorageService',\n function ($resource, $q, repositorySvc, securitySvc, localStorageService) {\n var RfidCards = $resource('/Api/RfidCard/:id', {}, {\n 'getAllLogs': { method: 'GET', isArray: true, url: '/Api/RfidCard/GetAllLogs' },\n 'getAllUploadContacts': { method: 'GET', isArray: true, url: '/Api/RfidCard/GetAllUploadContacts' },\n 'insert': { method: 'POST', url: '/Api/RfidCard/Insert' },\n 'update': { method: 'POST', url: '/Api/RfidCard/Update' },\n 'delete': { method: 'POST', url: '/Api/RfidCard/Delete' },\n 'getRegisteredStudentsForPeriod': { method: 'GET', isArray: true, url: '/Api/RfidCard/GetRegisteredStudentsForPeriod' },\n 'getRegisteredEmployeesForPeriod': { method: 'GET', isArray: true, url: '/Api/RfidCard/GetRegisteredEmployeesForPeriod' },\n 'getMPSVAttendanceReport': { method: 'POST', url: '/Api/RfidCard/GetMPSVAttendanceReport' },\n 'getMPSVNurseryAttendanceReport': { method: 'POST', url: '/Api/RfidCard/GetMPSVNurseryAttendanceReport' },\n 'supportReplaceRange': { method: 'POST', url: '/restapi/rfid-card-logs/support/replace-range' },\n 'supportDeleteUserInRange': { method: 'POST', isArray: true, url: '/restapi/rfid-card-logs/support/delete-user-in-range' },\n 'supportReplaceUserInRange': { method: 'POST', isArray: true, url: '/restapi/rfid-card-logs/support/replace-user-in-range' },\n 'supportShiftOriginEventInRange': { method: 'POST', url: '/restapi/rfid-card-logs/support/shift-origin-event-in-range' },\n });\n\n function getAllLogsAsync(fromDate, toDate) {\n var res = [];\n res.$promise = $q(function (resolve, reject) {\n repositorySvc.customGet('getAllLogs', RfidCards, {\n fromDate: fromDate,\n toDate: toDate\n }).$promise.then(function (dto) {\n if (securitySvc.isInRole('RfidCardLog.Update')) {\n res.push.apply(res, dto);\n resolve(dto);\n } else {\n var filtered = _.filter(dto, function(row) {\n return !row.isDeleted || (row.isDeleted && !String.prototype.isNullOrWhitespace(row.description));\n });\n res.push.apply(res, filtered);\n resolve(filtered);\n }\n }, function (rejectReason) {\n reject(rejectReason);\n });\n });\n\n return res;\n }\n\n function getAllUploadContacts(fromDate, toDate) {\n return repositorySvc.customGet('getAllUploadContacts', RfidCards, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function createNew() {\n var model = {\n rfidCardLogID: 0,\n rfidCardLogUploadContactID: null,\n rfidCardLogOverrideID: null,\n deviceSerialNumber: null,\n userID: null,\n userIDType: 0,\n eventType: 39,\n subEvent: 47,\n eventTime: moment().toDate(),\n operatorFullName: null,\n operatorAddress: null,\n operatorEmail: null,\n operatorPhone: null,\n studentFullName: null,\n uploadedAt: null,\n isDeleted: false\n };\n\n if (localStorageService.isSupported) {\n model.userID = localStorageService.get('lastRfidCardUserID');\n model.userIDType = localStorageService.get('lastRfidCardUserIDType') || 0;\n model.deviceSerialNumber = localStorageService.get('lastRfidCardDeviceSerialNumber');\n }\n\n return model;\n }\n\n function insert(data, collection, successCallback, errorCallback) {\n\n if (!data.rfidCardLogOverrideID) {\n data.rfidCardLogOverrideID = 0;\n }\n\n // Save for later\n if (localStorageService.isSupported) {\n localStorageService.set('lastRfidCardUserID', data.userID);\n localStorageService.set('lastRfidCardUserIDType', data.userIDType);\n localStorageService.set('lastRfidCardDeviceSerialNumber', data.deviceSerialNumber);\n }\n\n repositorySvc.insert(\n RfidCards, // $resource\n collection, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'rfidCardLogID');\n }\n\n function update(data, collection, successCallback, errorCallback) {\n\n if (!data.rfidCardLogOverrideID) {\n data.rfidCardLogOverrideID = 0;\n }\n\n repositorySvc.update(\n RfidCards, // $resource\n collection, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'rfidCardLogID');\n }\n\n function remove(data, collection, successCallback, errorCallback) {\n\n var id = data.rfidCardLogID;\n\n function success(result) {\n\n if (!!result.rfidCardLogID) {\n // Update soft deleted record in the collection\n repositorySvc.entityUpdated(collection, result, 'rfidCardLogID');\n } else {\n // This is a real delete \n repositorySvc.entityRemoved(collection, id, 'rfidCardLogID');\n }\n\n if (successCallback) {\n successCallback(result);\n }\n }\n\n repositorySvc.remove(\n RfidCards, // $resource\n null, // collection\n data, // entity\n success, // successCallback\n errorCallback,\n {\r\n id: data.rfidCardLogID,\r\n description: data.description\r\n },\n 'rfidCardLogID');\n }\n\n function reset(data, collection, successCallback, errorCallback) {\n\n var isRemove = !data.rfidCardLogUploadContactID;\n data.rfidCardLogOverrideID = null;\n\n var id = data.rfidCardLogID;\n\n function success(result) {\n if (isRemove) {\n // This is a real delete \n repositorySvc.entityRemoved(collection, id, 'rfidCardLogID');\n } else {\n repositorySvc.entityUpdated(collection, result, 'rfidCardLogID');\n }\n\n if (successCallback) {\n successCallback(result);\n }\n }\n\n repositorySvc.update(\n RfidCards, // $resource\n null, // collection\n data, // entity\n success,\n errorCallback,\n 'rfidCardLogID');\n }\n\n function getRegisteredStudentsForPeriodAsync(fromDate, toDate) {\n return repositorySvc.customGet('getRegisteredStudentsForPeriod', RfidCards, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getRegisteredEmployeesForPeriodAsync(fromDate, toDate) {\n return repositorySvc.customGet('getRegisteredEmployeesForPeriod', RfidCards, {\n fromDate: fromDate,\n toDate: toDate\n });\n }\n\n function getMPSVAttendanceReportAsync(students, employees, fromDate, toDate, compatibility, group) {\n return repositorySvc.customPost('getMPSVAttendanceReport', RfidCards, {\r\n students: students,\r\n employees: employees,\r\n fromDate: fromDate,\r\n toDate: toDate,\r\n compatibility: compatibility,\r\n group: group\r\n });\n }\n\n function supportReplaceRange(model) {\r\n return repositorySvc.customPost('supportReplaceRange', RfidCards, model);\r\n }\n\n function supportDeleteUserInRange(model) {\r\n return repositorySvc.customPost('supportDeleteUserInRange', RfidCards, model);\r\n }\n\n function supportReplaceUserInRange(model) {\r\n return repositorySvc.customPost('supportReplaceUserInRange', RfidCards, model);\r\n }\n\n function supportShiftOriginEventInRange(model) {\r\n return repositorySvc.customPost('supportShiftOriginEventInRange', RfidCards, model);\r\n }\n\n\n function getMPSVNurseryAttendanceReportAsync(students, employees, fromDate, toDate, compatibility, group) {\r\n return repositorySvc.customPost('getMPSVNurseryAttendanceReport', RfidCards, {\r\n students: students,\r\n employees: employees,\r\n fromDate: fromDate,\r\n toDate: toDate,\r\n compatibility: compatibility,\r\n group: group\r\n });\r\n }\n\n return {\n getAllLogsAsync: getAllLogsAsync,\n getAllUploadContacts: getAllUploadContacts,\n insert: insert,\n update: update,\n remove: remove,\n reset: reset,\n createNew: createNew,\n getRegisteredStudentsForPeriodAsync: getRegisteredStudentsForPeriodAsync,\n getRegisteredEmployeesForPeriodAsync: getRegisteredEmployeesForPeriodAsync,\n getMPSVAttendanceReportAsync: getMPSVAttendanceReportAsync,\n getMPSVNurseryAttendanceReportAsync: getMPSVNurseryAttendanceReportAsync,\n supportReplaceRange: supportReplaceRange,\n supportDeleteUserInRange: supportDeleteUserInRange,\n supportReplaceUserInRange: supportReplaceUserInRange,\n supportShiftOriginEventInRange: supportShiftOriginEventInRange\n }\n }]);","wbApp.factory('rfidDeviceRegistrationSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n var RfidDevices = $resource('restapi/rfid-devices/:id', {}, {\n 'getAll': { method: 'GET', isArray: true, url: '/restapi/rfid-devices' },\n 'update': { method: 'PUT', url: 'restapi/rfid-devices/:id' },\n });\n\n function getAllAsync() {\n return repositorySvc.customGet('getAll', RfidDevices);\n }\n\n function update(model) {\n return repositorySvc.customPutWithParams(\n 'update',\n RfidDevices,\n { id: model.id },\n model);\n }\n\n return {\n getAllAsync: getAllAsync,\n update: update\n }\n }]);","wbApp.controller('ScheduleCourseDetailCtrl', ['$scope', '$translate', '$filter', 'courseScheduleSvc', 'courseSvc', 'messageBoxSvc',\n 'tenantInfo', 'attendanceSvc', 'courseRegistrationSvc',\nfunction ($scope, $translate, $filter, courseScheduleSvc, courseSvc, messageBoxSvc, tenantInfo, attendanceSvc, courseRegistrationSvc) {\r\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.attendanceChanged = false;\n\n function loadData() {\n // $scope.editRecurrence\n if ($scope.model.courseScheduleID && !$scope.editRecurrence) {\r\n $scope.lessonAttendance = attendanceSvc.getLessonAttendance($scope.model.courseScheduleID);\r\n } else {\n $scope.lessonAttendance = courseRegistrationSvc.getRegisteredAttendanceForCourse($scope.model.courseID);\r\n }\n }\n\n loadData();\n\n $scope.detailIsUnchanged = function (data) {\r\n return angular.equals(data, $scope.modelOrig) && !!$scope.model.courseScheduleID;\r\n };\n\n $scope.onStartDateChanged = function (startDate) {\r\n if (!!$scope.editRecurrence) {\r\n courseScheduleSvc.updateEventByStartDate($scope.model, startDate);\r\n }\r\n }\n\n var selectedCourse = null;\n\n $scope.onCourseChange = function (courseID) {\r\n var cID = courseID;\r\n\r\n if (typeof courseID === 'string' || courseID instanceof String) {\r\n cID = parseInt(courseID);\r\n }\r\n\r\n if (!!cID) {\r\n courseSvc.getCourseAsync($scope.model.semesterID, cID).then(function (course) {\r\n $scope.model.employeeID = course.employeeID;\r\n selectedCourse = course;\r\n $scope.model.capacity = course.capacity;\r\n\r\n $scope.lessonAttendance = courseRegistrationSvc.getRegisteredAttendanceForCourse(selectedCourse.courseID);\r\n }, function (reason) {\r\n alert(reason);\r\n });\r\n }\r\n }\n\n $scope.onDetailSave = function (data) {\r\n\n if ($scope.isSaving) {\r\n return;\r\n }\n\n $scope.isSaving = true;\n\n\n function success() {\r\n $scope.$hide();\r\n if ($scope.onSave) {\r\n $scope.onSave();\r\n }\r\n }\n\n function error(data) {\r\n $scope.detailError = data;\n $scope.isSaving = false;\r\n }\n\n if (!data.courseScheduleID) {\r\n courseScheduleSvc.insert(data, success, error);\r\n } else {\r\n if (!$scope.editRecurrence) {\r\n messageBoxSvc.showConfirmClientNotification({\r\n userSetting: ['ConfirmNotificationSchedule', 'ConfirmNotificationSmsSchedule'],\n showSendSmsNotification: true,\n callback: function (notificationConfig) {\r\n courseScheduleSvc.update(data, notificationConfig, success, error);\r\n }\r\n });\r\n } else {\r\n // We are changing the series, so do not ask for notifications, there are no emails send anyways\r\n var notificationConfig = {\r\n sendEmailNotification: false,\n sendSmsNotification: false\r\n };\r\n courseScheduleSvc.update(data, notificationConfig, success, error);\r\n }\r\n }\r\n }\n\n $scope.onDetailCancel = function () {\r\n if ($scope.attendanceChanged && $scope.onSave) {\r\n $scope.onSave();\r\n }\r\n $scope.$hide();\r\n }\n\n $scope.$watch('model', function (model) {\r\n var diff = moment.duration(moment(model.endDate).diff(moment(model.startDate)));\n\n var fdays = diff.days() ? diff.days() + 'd ' : '';\n var fhours = diff.hours() ? diff.hours() + 'h ' : '';\n var fminutes = diff.minutes() ? diff.minutes() + 'm ' : '';\n var fmonths = diff.months() ? diff.months() + 'm ' : '';\n var fyears = diff.years() ? diff.years() + 'r ' : '';\n\n $scope.lessonLength = fyears + fmonths + fdays + fhours + fminutes;\r\n }, true);\n\n $scope.detailTabs = [\n {\r\n title: 'TXT_MAIN',\n template: \"schedule/schedule/schedule-course-detail-main-tab.html\"\r\n }];\n\n if (!!$scope.editRecurrence) {\n $scope.detailTabs.push({\r\n title: 'TXT_LBL_RECURRENCE',\n template: \"schedule/schedule/schedule-course-detail-recurrence-tab.html\"\r\n });\r\n }\n\n $scope.detailTabs.push({\r\n title: 'TXT_LBL_STUDENTS',\n template: 'schedule/schedule/schedule-course-detail-students-tab.html'\r\n });\n\n if ($scope.model.courseScheduleID && !$scope.editRecurrence) {\r\n $scope.detailTabs.push({\r\n title: 'TXT_LBL_WAIT_QUEUE',\r\n template: 'schedule/schedule/schedule-course-detail-wait-queue-tab.html'\r\n });\r\n }\n\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.$watch('detailTabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\r\n });\n\n $scope.studentsGridSettings = {\r\n name: 'students',\n columns: [\n { dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string' },\n {\r\n dataField: 'attendanceStatus',\n caption: $translate.instant('TXT_COL_ATTENDANCE_STATUS'),\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('attendanceStatus')(rowData.attendanceStatus);\r\n },\r\n width: '100px'\r\n },\n {\r\n dataField: 'attendanceType',\n caption: $translate.instant('TXT_COL_ATTENDANCE_TYPE'),\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('attendanceType')(rowData.attendanceType);\r\n },\r\n width: '100px'\r\n },\n { dataField: 'attendanceCount', caption: $translate.instant('TXT_LBL_COUNT'), dataType: 'number', width: '50px' },\n {\r\n dataField: 'updatedAt',\r\n caption: $translate.instant('TXT_LBL_UPDATED_AT'),\r\n dataType: 'date',\r\n format: 'shortDateShortTime',\r\n width: '130px',\r\n visible: !$scope.editRecurrence\r\n },\n { dataField: 'updatedBy', caption: $translate.instant('TXT_LBL_UPDATED_BY'), dataType: 'string', width: '80px', visible: !$scope.editRecurrence },\n ],\r\n shouldDisableDelete: function (row) {\r\n return row.attendanceType === 0;\r\n }\r\n }\n\n $scope.onRowDelete = function (data) {\n attendanceSvc.remove(data, null, function () {\r\n $scope.attendanceChanged = true;\r\n loadData();\r\n });\r\n \r\n }\n\n\n $scope.waitQeueuGridSettings = {\r\n name: 'waitQueue',\n columns: [\n { dataField: 'studentFullName', caption: $translate.instant('TXT_LBL_STUDENT'), dataType: 'string' },\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '190px' },\n {\r\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.phone);\r\n },\n width: '130px'\r\n },\n { dataField: 'createdAt', caption: $translate.instant('TXT_LBL_CREATED_AT'), dataType: 'date', format: 'shortDateShortTime', width: '130px', sortOrder: 'asc' },\n ]\r\n }\n\n}]);\n","wbApp.controller('ScheduleCtrl', ['$scope', '$modal', '$filter', '$translate', '$q',\r\n 'classroomSvc', 'semesterSvc', 'tenantSettingSvc', 'securitySvc',\r\n 'messageBoxSvc', 'courseScheduleSvc', 'employeeSvc',\r\nfunction ($scope, $modal, $filter, $translate, $q,\r\n classroomSvc, semesterSvc, tenantSettingSvc, securitySvc,\r\n messageBoxSvc, courseScheduleSvc, employeeSvc) {\r\n\r\n var lastStartDate = moment().startOf('isoWeek').toDate();\r\n var lastEndDate = moment(lastStartDate).add(7, 'day').startOf('day').toDate();\r\n \r\n var employees = [] \r\n employeeSvc.getAllAsync().$promise.then(function(e) {\r\n employees = e;\r\n });\r\n\r\n semesterSvc.getDefaultAsync()\r\n .then(function (semester) {\r\n $scope.semesterID = semester.id;\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n });\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n if ($scope.semesterID) {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n }\r\n });\r\n\r\n $scope.onSemesterChange = function (semesterID) {\r\n if (semesterID) { \r\n $scope.semesterID = semesterID;\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n }\r\n };\r\n\r\n $scope.onDateChanged = function (startDate, endDate) {\r\n if (Date.prototype.isValidDate(startDate) && Date.prototype.isValidDate(endDate)) {\r\n loadSemesterSchedule($scope.semesterID, startDate, endDate);\r\n }\r\n }\r\n\r\n function loadSemesterSchedule(semesterID, startDate, endDate) {\r\n if (!Date.prototype.isValidDate(startDate) || !Date.prototype.isValidDate(endDate)) {\r\n return;\r\n }\r\n\r\n lastStartDate = startDate;\r\n lastEndDate = endDate;\r\n\r\n $scope.isBusy = true;\r\n\r\n courseScheduleSvc.getAllForSemesterAllAsync(\r\n semesterID,\r\n null, // compensationGroupID\r\n null, // userID\r\n startDate,\r\n endDate)\r\n .$promise.then(function (data) {\r\n schedules.length = 0;\r\n schedules.push.apply(schedules, data);\r\n $scope.isBusy = false;\r\n }, function () {\r\n $scope.isBusy = false;\r\n });\r\n }\r\n\r\n var resources = classroomSvc.getAllActiveAsync( /* classroomIDtoInclude */ null, /* filterForReservations */ false, /* filterForCourses */ true);\r\n var schedules = [];\r\n\r\n function newLesson(startDate, endDate) {\r\n courseDetailDialogPromise.$promise.then(function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = false;\r\n courseDetailDialogPromise.$scope.model = courseScheduleSvc.createNewCourse(\r\n startDate,\r\n endDate,\r\n $scope.schedulerSettings.selectedResourceID,\r\n $scope.semesterID);\r\n courseDetailDialogPromise.$scope.onSave = function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n };\r\n courseDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n function newRecurrence(startDate, endDate) {\r\n courseDetailDialogPromise.$promise.then(function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = true;\r\n courseDetailDialogPromise.$scope.model = courseScheduleSvc.createNewCourse(\r\n startDate,\r\n endDate,\r\n $scope.schedulerSettings.selectedResourceID,\r\n $scope.semesterID,\r\n true);\r\n courseDetailDialogPromise.$scope.onSave = function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n };\r\n courseDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n function newEvent(startDate, endDate) {\r\n eventDetailDialogPromise.$promise.then(function () {\r\n eventDetailDialogPromise.$scope.model = courseScheduleSvc.createNewEvent(\r\n startDate,\r\n endDate,\r\n $scope.schedulerSettings.selectedResourceID,\r\n $scope.semesterID);\r\n eventDetailDialogPromise.$scope.hideActionChange = false;\r\n eventDetailDialogPromise.$scope.onSave = function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n };\r\n eventDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n function changeEvent(event) {\r\n var current = courseScheduleSvc.getSingle(event.origAction.courseScheduleID);\r\n\r\n $q.all([current.$promise, courseDetailDialogPromise.$promise]).then(\r\n function () {\r\n eventDetailDialogPromise.$scope.model = angular.copy(current);\r\n eventDetailDialogPromise.$scope.hideActionChange = false;\r\n eventDetailDialogPromise.$scope.onSave = function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n };\r\n eventDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n function changeLesson(lesson) {\r\n var current = courseScheduleSvc.getSingle(lesson.origAction.courseScheduleID);\r\n\r\n $q.all([current.$promise, courseDetailDialogPromise.$promise]).then(\r\n function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = false;\r\n courseDetailDialogPromise.$scope.model = angular.copy(current);\r\n courseDetailDialogPromise.$scope.onSave = function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n };\r\n courseDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n function changeRecurrence(lesson) {\r\n var pattern = courseScheduleSvc.getPattern(\r\n lesson.origAction.courseID, lesson.origAction.courseScheduleID);\r\n\r\n $q.all([pattern.$promise, courseDetailDialogPromise.$promise]).then(\r\n function () {\r\n courseDetailDialogPromise.$scope.editRecurrence = true;\r\n courseDetailDialogPromise.$scope.model = angular.copy(pattern);\r\n courseDetailDialogPromise.$scope.onSave = function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n };\r\n courseDetailDialogPromise.show();\r\n });\r\n }\r\n\r\n function deleteSingleLessonNoRecurrence(event) {\r\n courseScheduleSvc.remove(\r\n event.origAction,\r\n {\r\n sendEmailNotification: true,\r\n sendSmsNotification: false\r\n },\r\n function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n }\r\n );\r\n }\r\n\r\n function deleteSingleLessonRecurrence(event) {\r\n courseScheduleSvc.remove(\r\n event.origAction,\r\n {\r\n sendEmailNotification: true,\r\n sendSmsNotification: false\r\n },\r\n function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n }\r\n );\r\n }\r\n\r\n function deleteRecurrence(event) {\r\n \r\n var pattern = courseScheduleSvc.getPattern(\r\n event.origAction.courseID, event.origAction.courseScheduleID)\r\n .$promise.then(function (pattern) {\r\n courseScheduleSvc.remove(\r\n pattern,\r\n {\r\n sendEmailNotification: true,\r\n sendSmsNotification: false\r\n },\r\n function () {\r\n loadSemesterSchedule($scope.semesterID, lastStartDate, lastEndDate);\r\n }\r\n );\r\n });\r\n }\r\n\r\n function deleteEvent(event) {\r\n if (event.recurrenceType === 0) {\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_DELETE',\r\n message: 'TXT_TEXT_CONFIRM_DELETE',\r\n buttons: [{\r\n text: 'TXT_BTN_NO'\r\n }, {\r\n text: 'TXT_BTN_YES',\r\n callback: function () {\r\n deleteSingleLessonNoRecurrence(event);\r\n }\r\n }]\r\n });\r\n } else {\r\n // Recurrence\r\n messageBoxSvc.showMessageDlg({\r\n title: 'TXT_TITLE_CONFIRM_DELETE_RECURRENCE',\r\n message: $translate.instant('TXT_TEXT_CONFIRM_DELETE_RECURRENCE').f(event.name),\r\n buttons: [{\r\n text: 'TXT_BTN_CANCEL'\r\n }, {\r\n text: 'TXT_BTN_SERIES',\r\n callback: function () {\r\n deleteRecurrence(event);\r\n }\r\n }, {\r\n text: 'TXT_BTN_THIS_LESSON',\r\n callback: function () {\r\n deleteSingleLessonRecurrence(event);\r\n }\r\n }]\r\n });\r\n }\r\n }\r\n\r\n $scope.schedulerSettings = {\r\n weekView: true,\r\n autoHourRange: false,\r\n noHeader: true,\r\n width: '100%',\r\n visibleResources: 1,\r\n showRecurrence: true,\r\n // selectedResourceID: 1,\r\n startHour: tenantSettingSvc.settings.scheduleVisibleTimeStart,\r\n endHour: tenantSettingSvc.settings.scheduleVisibleTimeEnd,\r\n scale: tenantSettingSvc.settings.scheduleTimeScale,\r\n startDate: lastStartDate,\r\n resources: resources,\r\n resourcesMapping: { resourceID: 'id' },\r\n actions: schedules,\r\n actionsMapping: {\r\n resourceID: 'classroomID',\r\n name: 'subject',\r\n teacher: 'teacherName',\r\n filled: 'filledCapacity'\r\n },\r\n commands: [{\r\n text: 'TXT_LBL_NEW_LESSON',\r\n isVisible: function (event, startDate, endDate) { \r\n return !event && securitySvc.isInRole('CourseSchedule.Insert');\r\n },\r\n callback: function (event, startDate, endDate) {\r\n newLesson(startDate, endDate);\r\n }\r\n }, {\r\n text: 'TXT_LBL_NEW_RECURRENCE',\r\n isVisible: function (event, startDate, endDate) { \r\n return !event && securitySvc.isInRole('CourseSchedule.Insert');\r\n },\r\n callback: function (event, startDate, endDate) {\r\n newRecurrence(startDate, endDate);\r\n }\r\n }, {\r\n text: 'TXT_LBL_NEW_EVENT',\r\n isVisible: function (event, startDate, endDate) {\r\n return !event && securitySvc.isInRole('CourseSchedule.Insert');\r\n },\r\n callback: function (event, startDate, endDate) {\r\n newEvent(startDate, endDate);\r\n }\r\n }, {\r\n text: 'TXT_MENU_EDIT',\r\n isVisible: function (event, startDate, endDate) {\r\n if (!event) {\r\n return false;\r\n }\r\n \r\n if (securitySvc.isInRole('CourseSchedule.Update')) {\r\n return true;\r\n }\r\n\r\n if (securitySvc.isInRole('CourseSchedule.UpdateOwn')) {\r\n let employee = _.find(employees, {employeeID: event.origAction.employeeID});\r\n return employee != null && employee.userID === securitySvc.loggedInUser().userID;\r\n }\r\n \r\n return false;\r\n },\r\n callback: function (event, startDate, endDate) {\r\n if (event.type === 1) {\r\n changeLesson(event);\r\n } else {\r\n changeEvent(event);\r\n }\r\n }\r\n }, {\r\n text: 'TXT_LBL_CHANGE_RECURRENCE',\r\n isVisible: function (event, startDate, endDate) {\r\n return !!event && event.recurrenceType !== 0 && securitySvc.isInRole('CourseSchedule.Update');\r\n },\r\n callback: function (event, startDate, endDate) {\r\n changeRecurrence(event);\r\n }\r\n }, {\r\n text: 'TXT_MENU_DELETE',\r\n isVisible: function (event, startDate, endDate) {\r\n if (!event) {\r\n return false;\r\n }\r\n \r\n if (securitySvc.isInRole('CourseSchedule.Delete')) {\r\n return true;\r\n }\r\n if (securitySvc.isInRole('CourseSchedule.DeleteOwn')) {\r\n let employee = _.find(employees, {employeeID: event.origAction.employeeID});\r\n return employee != null && employee.userID === securitySvc.loggedInUser().userID;\r\n }\r\n \r\n return false;\r\n },\r\n callback: function (event, startDate, endDate) {\r\n deleteEvent(event);\r\n }\r\n }]\r\n }\r\n\r\n var eventDetailDialogPromise = $modal({\r\n templateUrl: 'schedule/schedule-event-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n var courseDetailDialogPromise = $modal({\r\n templateUrl: 'schedule/schedule-course-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n}]);\r\n","wbApp.controller('ScheduleEventDetailCtrl', ['$scope', '$translate', '$filter', 'courseScheduleSvc', 'courseSvc', 'messageBoxSvc',\n 'tenantInfo', 'attendanceSvc', 'courseRegistrationSvc',\nfunction ($scope, $translate, $filter, courseScheduleSvc, courseSvc, messageBoxSvc, tenantInfo, attendanceSvc, courseRegistrationSvc) {\r\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\r\n return angular.equals(data, $scope.modelOrig) && !!$scope.model.courseScheduleID;\r\n };\n\n function loadData() {\n if ($scope.model.courseScheduleID) {\r\n $scope.lessonAttendance = attendanceSvc.getLessonAttendance($scope.model.courseScheduleID);\r\n } else {\n // TODO\n $scope.lessonAttendance = courseRegistrationSvc.getRegisteredAttendanceForCourse($scope.model.courseID);\r\n }\n }\n\n loadData();\n\n var selectedCourse = null;\n\n $scope.onCourseChange = function (courseID) {\r\n var cID = courseID;\r\n\r\n if (typeof courseID === 'string' || courseID instanceof String) {\r\n cID = parseInt(courseID);\r\n }\r\n\r\n if (!!cID) {\r\n courseSvc.getActionAsync($scope.model.semesterID, cID).then(function (course) {\r\n $scope.model.employeeID = course.employeeID;\r\n $scope.model.capacity = course.capacity;\r\n selectedCourse = course;\r\n\r\n $scope.lessonAttendance = courseRegistrationSvc.getRegisteredAttendanceForCourse(selectedCourse.courseID);\r\n }, function (reason) {\r\n alert(reason);\r\n });\r\n }\r\n }\n\n $scope.onDetailSave = function (data) {\r\n\n if ($scope.isSaving) {\r\n return;\r\n }\n\n $scope.isSaving = true;\n\n\n function success() {\r\n $scope.$hide();\r\n if ($scope.onSave) {\r\n $scope.onSave();\r\n }\r\n }\n\n function error(data) {\r\n $scope.detailError = data;\n $scope.isSaving = false;\r\n }\n\n if (!data.courseScheduleID) {\r\n courseScheduleSvc.insert(data, success, error);\r\n } else {\r\n messageBoxSvc.showConfirmClientNotification({\r\n userSetting: ['ConfirmNotificationSchedule', 'ConfirmNotificationSmsSchedule'],\n showSendSmsNotification: true,\n callback: function (notificationConfig) {\r\n courseScheduleSvc.update(data, notificationConfig, success, error);\r\n }\r\n });\r\n }\r\n }\n\n $scope.$watch('model', function (model) {\r\n var diff = moment.duration(moment(model.endDate).diff(moment(model.startDate)));\n\n var fdays = diff.days() ? diff.days() + 'd ' : '';\n var fhours = diff.hours() ? diff.hours() + 'h ' : '';\n var fminutes = diff.minutes() ? diff.minutes() + 'm ' : '';\n var fmonths = diff.months() ? diff.months() + 'm ' : '';\n var fyears = diff.years() ? diff.years() + 'r ' : '';\n\n $scope.lessonLength = fyears + fmonths + fdays + fhours + fminutes;\r\n }, true);\n\n $scope.studentsGridSettings = {\r\n name: 'students',\n columns: [\n { dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string' },\n {\r\n dataField: 'attendanceStatus',\n caption: $translate.instant('TXT_COL_ATTENDANCE_STATUS'),\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('attendanceStatus')(rowData.attendanceStatus);\r\n },\r\n width: '120px'\r\n },\n {\r\n dataField: 'attendanceType',\n caption: $translate.instant('TXT_COL_ATTENDANCE_TYPE'),\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('attendanceType')(rowData.attendanceType);\r\n },\r\n width: '120px'\r\n },\n { dataField: 'attendanceCount', caption: $translate.instant('TXT_LBL_COUNT'), dataType: 'number', width: '50px' },\n ]\r\n }\n\n $scope.detailTabs = [\n {\r\n title: 'TXT_MAIN',\n template: \"schedule/schedule/schedule-event-detail-main-tab.html\"\r\n }, {\r\n title: 'TXT_LBL_STUDENTS',\n template: \"schedule/schedule/schedule-event-detail-students-tab.html\"\r\n }];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.$watch('detailTabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\r\n });\n\n}]);\n","'use strict';\r\n\r\nwbApp.controller('AgeRangesCtrl', ['$scope', '$modal', '$translate', 'ageRangeSvc',\r\nfunction ($scope, $modal, $translate, ageRangeSvc) {\r\n\r\n $scope.ageRanges = ageRangeSvc.getAllAsync(true);\r\n\r\n $scope.gridSettings = {\r\n columns: [\r\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc' },\r\n { dataField: 'fromAge', caption: $translate.instant('TXT_LBL_FROM'), dataType: 'number', width: '70px' },\r\n { dataField: 'toAge', caption: $translate.instant('TXT_LBL_TO'), dataType: 'number', width: '70px' },\r\n { dataField: 'buildIn', caption: $translate.instant('TXT_LBL_SYSTEM'), dataType: 'boolean', width: '70px' },\r\n ],\r\n onRowPrepared: function (e) {\r\n if (e.rowType == \"data\") {\r\n var data = e.component.getKeyByRowIndex(e.rowIndex);\r\n if (data.buildIn) {\r\n e.rowElement.addClass('text-muted');\r\n }\r\n }\r\n }\r\n }\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n $scope.ageRanges = ageRangeSvc.getAllAsync(true);\r\n });\r\n\r\n $scope.onRowEdit = function (data) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = angular.copy(data);\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowAdd = function () {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = ageRangeSvc.createNew();\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n ageRangeSvc.remove(data);\r\n }\r\n\r\n \r\n var detailDialogPromise = $modal({\r\n templateUrl: 'setting/age-ranges/age-ranges-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n}]);\r\n","wbApp.controller('AgeRangesDetailCtrl', ['$scope', 'ageRangeSvc',\nfunction ($scope, ageRangeSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n if (!model.ageRangeID) {\n ageRangeSvc.insert(model, success, error);\n } else {\n ageRangeSvc.update(model, success, error);\n }\n\n function success(model) {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onDataSaved) {\n $scope.onDataSaved(model);\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","wbApp.controller('ClassroomAvailabilitySchedulesCtrl', ['$scope', '$modal', 'classroomAvailabilitySchedulesSvc', 'messageBoxSvc',\nfunction ($scope, $modal, classroomAvailabilitySchedulesSvc, messageBoxSvc) {\n\n var isActive = false; \n var loaded = false;\n var selectedWeek = moment().startOf('isoWeek');\n var selectedClassroom = null;\n\n $scope.model = [];\n var modelOrig = [];\n\n $scope.isBusy = false;\n $scope.isSaving = false;\n\n function reloadDataWithModificationAsk(saveClassroom, newClassroom, startOfWeek) {\n if (!$scope.detailIsUnchanged()) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_LBL_QUESTION',\n message: 'TXT_MODEL_MODFIFIED_SHOULD_SAVE',\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: function () {\n loadData(newClassroom, startOfWeek);\n }\n }, {\n text: 'TXT_BTN_SAVE',\n callback: function () {\n saveModel($scope.model, saveClassroom, function () {\n loadData(newClassroom, startOfWeek);\n });\n }\n }]\n });\n }\n else {\n loadData(newClassroom, startOfWeek);\n }\n }\n\n function loadData(classroom, date) {\n if (classroom && date) {\n $scope.isBusy = true;\n classroomAvailabilitySchedulesSvc.loadWeek(classroom.id, date).then(\n function (data) {\n $scope.isBusy = false;\n selectedClassroom = classroom;\n selectedWeek = moment(date).startOf('isoWeek');\n $scope.model.length = 0;\n $scope.model.push.apply($scope.model, data);\n modelOrig = angular.copy($scope.model);\n\n loaded = true;\n }, function (error) {\n $scope.isBusy = false;\n selectedClassroom = null;\n selectedWeek = moment(date).startOf('isoWeek');\n $scope.model.length = 0;\n\n modelOrig = [];\n loaded = false;\n });\n }\n }\n\n $scope.$on('classroomSelectionChanged', function (e, newlySelectedClassroom) {\n if (newlySelectedClassroom) {\n if (isActive) {\n if (selectedClassroom != newlySelectedClassroom) {\n reloadDataWithModificationAsk(selectedClassroom, newlySelectedClassroom, selectedWeek)\n }\n }\n }\n else {\n $scope.model.length = 0;\n }\n\n selectedClassroom = newlySelectedClassroom;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedClassroom) {\n loadData(selectedClassroom, selectedWeek);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function saveModel(model, classroom, callback) {\n if (!$scope.detailIsUnchanged() && !$scope.isBusy && !$scope.isSaving && !!selectedClassroom) {\n\n $scope.isSaving = true;\n\n classroomAvailabilitySchedulesSvc.saveWeek(classroom.id, selectedWeek, model).then(\n function (data) {\n\n modelOrig = angular.copy($scope.model);\n $scope.isSaving = false;\n if (!!callback) {\n callback();\n }\n },\n function (error) {\n $scope.isSaving = false;\n if (!!callback) {\n callback();\n }\n }\n );\n }\n }\n\n $scope.calendarSettings = {\n onValueChanged: function (value) {\n var newStartOfWeek = moment(value.value).startOf('isoWeek');\n\n if (!newStartOfWeek.isSame(selectedWeek)) {\n reloadDataWithModificationAsk(selectedClassroom, selectedClassroom, newStartOfWeek);\n }\n }\n }\n\n $scope.detailIsUnchanged = function () {\n return angular.equals($scope.model, modelOrig);\n };\n\n $scope.onModelSave = function (model) {\n saveModel(model, selectedClassroom);\n }\n\n $scope.onModelCancel = function () {\n loadData(selectedClassroom, selectedWeek);\n }\n\n $scope.isSaveRangeEnabled = function () {\n return !$scope.isBusy && !$scope.isSaving && !!selectedClassroom && !!selectedWeek;\n }\n\n $scope.onModelRangeSave = function (model) {\n\n $scope.isSaving = true;\n dateRangeSelectionDlg.$promise.then(function () {\n dateRangeSelectionDlg.$scope.model = {\n from: moment().startOf('week').toDate(),\n to: moment().endOf('week').startOf('day').toDate(),\n };\n dateRangeSelectionDlg.$scope.onCanceled = function () {\n $scope.isSaving = false;\n },\n dateRangeSelectionDlg.$scope.onSaved = function (rangeModel) {\n classroomAvailabilitySchedulesSvc.saveWeekAsPaternForPeriod(\n selectedClassroom.id,\n rangeModel.from,\n rangeModel.to,\n model).then(\n function (data) {\n modelOrig = angular.copy($scope.model);\n $scope.isSaving = false;\n },\n function (error) {\n $scope.isSaving = false;\n }\n );\n },\n dateRangeSelectionDlg.show();\n });\n\n }\n\n var dateRangeSelectionDlg = $modal({\n templateUrl: 'users/dialogs/select-week-date-range.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('ClassroomsCtrl', ['$scope', '$modal', '$translate', 'classroomSvc', 'tenantSettingSvc',\nfunction ($scope, $modal, $translate, classroomSvc, tenantSettingSvc) {\n\n function setSelectedClassroom(data) {\n $scope.selectedClassroom = data;\n $scope.$broadcast('classroomSelectionChanged', $scope.selectedClassroom);\n }\n\n $scope.$on('refreshData', function (e, data) {\n $scope.classrooms = classroomSvc.getAllNonDeletedAsync(true);\n setSelectedEmployee(null);\n });\n\n $scope.classrooms = classroomSvc.getAllNonDeletedAsync(true);\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"setting/classrooms/detail-tabs/detail.html\"\n }\n ];\n\n $scope.enableReservationSupport = tenantSettingSvc.settings.enableReservationSupport;\n $scope.enableRentSupport = tenantSettingSvc.settings.enableRentSupport;\n\n if ($scope.enableReservationSupport || $scope.enableRentSupport) {\n $scope.tabs.push({\n title: 'TXT_AVAILABILITY_SCHEDULE',\n template: 'setting/classrooms/detail-tabs/availability-schedule.html'\n })\n }\n\n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n $scope.gridSettings = {\n name: 'classrooms',\n columns: [\n { dataField: 'active', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '250px', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\n { dataField: 'showInCourses', caption: $translate.instant('TXT_LBL_COURSES'), dataType: 'boolean', width: '60px' },\n { dataField: 'showInReservations', caption: $translate.instant('TXT_LBL_RESERVATIONS'), dataType: 'boolean', width: '60px', visible: $scope.enableReservationSupport },\n { dataField: 'showInRents', caption: $translate.instant('TXT_MENU_RENTS'), dataType: 'boolean', width: '60px', visible: $scope.enableRentSupport },\n {\n dataField: 'addressID', caption: $translate.instant('TXT_LBL_ADDRESS'), dataType: 'boolean', width: '60px',\n calculateCellValue: function (rowData) {\n return !!rowData.addressID;\n },\n }\n ]\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = classroomSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n classroomSvc.remove(data);\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedClassroom(data);\n }\n\n \n var detailDialogPromise = $modal({\n templateUrl: 'setting/classrooms/classrooms-detail.html',\n show: false,\n scope: $scope.$new()\n });\n \n\n}]);\n","wbApp.controller('ClassroomsDetailCtrl', ['$scope', 'classroomSvc', 'geoCoderSvc', 'tenantSettingSvc', '$translate', '$filter',\nfunction ($scope, classroomSvc, geoCoderSvc, tenantSettingSvc, $translate, $filter) {\n //var $hideImpl = $scope.$hide;\n\n //$scope.$hide = function () {\n // $hideImpl();\n // $scope.$destroy();\n // console.log('scope destroyed');\n //}\n\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"setting/classrooms/classrooms-detail-main-tab.html\",\n type: 'main'\n },\n {\n title: \"TXT_LBL_ADDRESS\",\n template: \"setting/classrooms/classrooms-detail-address-tab.html\",\n type: 'address'\n }\n ];\n\n if (tenantSettingSvc.settings.enableReservationSupport) {\n $scope.detailTabs.push({\n title: \"TXT_SPECIALIZATIONS\",\n template: \"setting/classrooms/classrooms-detail-domains-tab.html\",\n type: 'domains'\n });\n $scope.detailTabs.push({\n title: \"TXT_RESERVATIONS_SETTINGS\",\n template: \"setting/classrooms/classrooms-detail-reservations-settings-tab.html\",\n type: 'reservations-settings'\n }); \n }\n\n $scope.detailTabs.activeTab = 0;\n\n var domainsInitialized = false;\n\n $scope.classroomDomains = null;\n\n var treeListInstance = null;\n $scope.domainsOptions = {\n bindingOptions: {\n dataSource: 'classroomDomains',\n },\n height: 400,\n keyExpr: 'id',\n selection: {\n mode: 'multiple',\n recursive: false\n },\n editing: {\n allowUpdating: function(options) {\n if (!!options.row) {\n return options.row.isSelected;\n } \n return false;\n },\n mode: \"cell\"\n },\n showRowLines: true,\n allowColumnResizing: true,\n autoExpandAll: true,\n columns: [{\n caption: $translate.instant('TXT_LBL_NAME'),\n dataField: 'name',\n dataType: 'string',\n width: '220px',\n sortOrder: 'asc',\n allowEditing: false\n }, {\n caption: $translate.instant('TXT_LBL_DESCRIPTION'),\n dataField: 'description',\n dataType: 'string',\n allowEditing: false\n }, {\n caption: $translate.instant('TXT_RESERVATION_TEACHER_HOUR_SINGLE_RATE'),\n dataField: 'reservationTeacherHourSingleRateOverride',\n dataType: 'number', \n format: { type: 'currency', precision: 2 },\n allowEditing: true,\n width: '100px',\n calculateCellValue: function(e) {\n if (_.isNil(e.reservationTeacherHourSingleRateOverride)) {\n return e.reservationTeacherHourSingleRate;\n }\n\n return e.reservationTeacherHourSingleRateOverride;\n }\n }, {\n caption: $translate.instant('TXT_RESERVATION_TEACHER_HOUR_GROUP_ONE_RATE'),\n dataField: 'reservationTeacherHourGroupOneRateOverride',\n dataType: 'number',\n format: {type: 'currency', precision: 2},\n allowEditing: true,\n width: '100px',\n calculateCellValue: function (e) {\n if (_.isNil(e.reservationTeacherHourGroupOneRateOverride)) {\n return e.reservationTeacherHourGroupOneRate;\n }\n\n return e.reservationTeacherHourGroupOneRateOverride;\n }\n }, {\n caption: $translate.instant('TXT_RESERVATION_TEACHER_HOUR_GROUP_TWO_RATE'),\n dataField: 'reservationTeacherHourGroupTwoRateOverride',\n dataType: 'number',\n format: {type: 'currency', precision: 2},\n allowEditing: true,\n width: '100px',\n calculateCellValue: function (e) {\n if (_.isNil(e.reservationTeacherHourGroupTwoRateOverride)) {\n return e.reservationTeacherHourGroupTwoRate;\n }\n\n return e.reservationTeacherHourGroupTwoRateOverride;\n }\n }],\n onContentReady: function (e) {\n treeListInstance = e.component;\n if (!!origDomainsSelected) {\n treeListInstance.selectRows(origDomainsSelected, false);\n }\n },\n onCellPrepared: function(e) {\n if (e.columnIndex === 2) {\n e.cellElement.mousemove(function () {\n e.cellElement.attr('title', \n $translate.instant('TXT_RESERVATION_TEACHER_HOUR_SINGLE_RATE_DESC') + \n \"\\n\" + \n $translate.instant('TXT_PRICE_FROM_SETTINGS') +\n \" \" +\n $filter('wbCurrencyFlt')(tenantSettingSvc.settings.reservationTeacherHourSingleRate)\n );\n });\n }\n if (e.columnIndex === 3) {\n e.cellElement.mousemove(function () {\n e.cellElement.attr('title', \n $translate.instant('TXT_RESERVATION_TEACHER_HOUR_GROUP_ONE_RATE_DESC') +\n \"\\n\" +\n $translate.instant('TXT_PRICE_FROM_SETTINGS') +\n \" \" +\n $filter('wbCurrencyFlt')(tenantSettingSvc.settings.reservationTeacherHourGroupOneRate));\n });\n }\n if (e.columnIndex === 4) {\n e.cellElement.mousemove(function () {\n e.cellElement.attr('title', $translate.instant('TXT_RESERVATION_TEACHER_HOUR_GROUP_TWO_RATE_DESC') +\n \"\\n\" +\n $translate.instant('TXT_PRICE_FROM_SETTINGS') +\n \" \" +\n $filter('wbCurrencyFlt')(tenantSettingSvc.settings.reservationTeacherHourGroupTwoRate));\n });\n }\n \n if (e.rowType === \"data\" && e.columnIndex === 2) {\n if (_.isNil(e.data.reservationTeacherHourSingleRateOverride) && (!_.isNil(e.data.reservationTeacherHourSingleRate))) {\n e.cellElement.addClass('text-muted');\n }\n }\n if (e.rowType === \"data\" && e.columnIndex === 3) {\n if (_.isNil(e.data.reservationTeacherHourGroupOneRateOverride) && !_.isNil(e.data.reservationTeacherHourGroupOneRate)) {\n e.cellElement.addClass('text-muted');\n }\n }\n if (e.rowType === \"data\" && e.columnIndex === 4) {\n if (_.isNil(e.data.reservationTeacherHourGroupTwoRateOverride) && !_.isNil(e.data.reservationTeacherHourGroupTwoRate)) {\n e.cellElement.addClass('text-muted');\n }\n } \n },\n onSelectionChanged: function (e) {\n if (e.currentSelectedRowKeys.length === 1) {\n let obj = _.find(e.selectedRowsData, { id: e.currentSelectedRowKeys[0] });\n if (obj && obj.parentId) {\n treeListInstance.selectRows(obj.parentId, true);\n }\n } else if (e.currentDeselectedRowKeys.length === 1) {\n let obj = _.find(e.selectedRowsData, { parentId: e.currentDeselectedRowKeys[0] });\n if (obj) {\n treeListInstance.selectRows(e.currentDeselectedRowKeys[0], true);\n }\n }\n }\n };\n\n var origDomainsSelected = [];\n var originDomains = [];\n\n function loadDomainsData() {\n\n classroomSvc.loadDomainsData($scope.model.id).then(function (data) {\n $scope.classroomDomains = data.domains;\n originDomains = _.cloneDeep(data.domains);\n origDomainsSelected = data.selection;\n if (!!treeListInstance) {\n treeListInstance.selectRows(origDomainsSelected, false);\n }\n domainsInitialized = true;\n });\n }\n\n $scope.$watch('detailTabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue });\n\n if (newValue >= 0 && newValue < $scope.detailTabs.length) {\n var selectedTab = $scope.detailTabs[newValue];\n\n if (selectedTab.type == 'domains' && !domainsInitialized) {\n loadDomainsData();\n }\n }\n });\n\n function domainsAreUnchanged() {\n return !domainsInitialized || \n !treeListInstance ||\n (_.isEqual(origDomainsSelected.sort(), treeListInstance.getSelectedRowKeys().sort()) &&\n _.isEqual(originDomains, $scope.classroomDomains));\n \n }\n\n function detailIsUnchanged(data) {\n return angular.equals(data, $scope.modelOrig);\n }\n\n $scope.detailIsUnchanged = function (data) {\n return detailIsUnchanged(data) && domainsAreUnchanged();\n };\n\n $scope.isSaving = false;\n\n $scope.onClassroomDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n if (!detailIsUnchanged($scope.model)) {\n\n \n if (!model.id) {\n classroomSvc.insert(model, function (data) {\n if (!domainsAreUnchanged()) {\n classroomSvc.saveDomainsData(\n data.id,\n $scope.classroomDomains,\n origDomainsSelected,\n treeListInstance.getSelectedRowKeys(),\n success,\n error);\n } else {\n success();\n }\n }, error, $scope.collection);\n } else {\n classroomSvc.update(model, function () {\n if (!domainsAreUnchanged()) {\n classroomSvc.saveDomainsData(\n $scope.model.id,\n $scope.classroomDomains,\n origDomainsSelected,\n treeListInstance.getSelectedRowKeys(),\n success,\n error);\n } else {\n success();\n }\n }, error, $scope.collection);\n }\n } else if (!domainsAreUnchanged()) {\n classroomSvc.saveDomainsData(\n $scope.model.id,\n $scope.classroomDomains,\n origDomainsSelected,\n treeListInstance.getSelectedRowKeys(),\n success,\n error);\n } else {\n success();\n }\n\n\n }\n\n $scope.getAddress = function (val) {\n var res = geoCoderSvc.geocode(val);\n return res;\n }\n\n\n}]);\n","wbApp.controller('CompensationGroupsCtrl', ['$scope', '$modal', 'compensationGroupSvc',\nfunction ($scope, $modal, compensationGroupSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.compensationGroups = compensationGroupSvc.getAllAsync();\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'active', displayName: \"TXT_LBL_ACTIVE\", cellFilter: 'checkmark', width: '70px' },\n { field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '250px' },\n { field: 'description', displayName: \"TXT_LBL_DESCRIPTION\", sort: 'locale' },\n { field: 'isDefault', displayName: \"TXT_LBL_DEFAULT\", cellFilter: 'checkmark', width: '70px' },\n ]\n };\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = compensationGroupSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n compensationGroupSvc.remove(data);\n }\n \n var detailDialogPromise = $modal({\n templateUrl: 'setting/compensation-groups/compensation-groups-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n $scope.$on('refreshData', function (e, data) {\n $scope.compensationGroups = compensationGroupSvc.getAllAsync();\n });\n\n}]);\n","wbApp.controller('CompensationGroupsDetailCtrl', ['$scope', 'compensationGroupSvc',\nfunction ($scope, compensationGroupSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n $scope.isSaving = true;\n\n if (!model.compensationGroupID) {\n compensationGroupSvc.insert(model, success, error);\n } else {\n compensationGroupSvc.update(model, success, error);\n }\n }\n}]);\n","wbApp.controller('CompensationTransferDetailCtrl', ['$scope', '$modal', 'compensationTransferSvc',\nfunction ($scope, $modal, compensationTransferSvc) {\n\n $scope.initialized = false;\n $scope.model = compensationTransferSvc.createEmptyModel($scope.sourceSemesterID);\n\n compensationTransferSvc.initilizeModelAsync($scope.model)\n .then(function (model) {\n $scope.initialized = true;\n if (model.isNew) {\n $scope.model.compensationTransfer.destinationSemesterID = null;\n }\n });\n\n $scope.onDestinationSemesterChange = function (destinationSemesterID) {\n compensationTransferSvc.initilizeModelAsync($scope.model, destinationSemesterID)\n .then(function (model) {\n $scope.initialized = true; \n });\n };\n\n $scope.onTransferToAmendTypeChange = function (transferToAmendType) {\n compensationTransferSvc.changeTransferToAmendType($scope.model, transferToAmendType);\n }\n\n $scope.onMaximumTransferredAmendsChange = function (maximumTransferredAmends) {\n compensationTransferSvc.changeMaximumTransferredAmends($scope.model, maximumTransferredAmends);\n }\n\n $scope.onTransferRemainingPreAmendsChange = function (transferRemainingPreAmends) {\n compensationTransferSvc.changeTransferRemainingPreAmends($scope.model, transferRemainingPreAmends);\n }\n\n $scope.onTransferRemainingTimeBoundAmendsChange = function (transferRemainingTimeBoundAmends) {\n compensationTransferSvc.changeTransferRemainingTimeBoundAmends($scope.model, transferRemainingTimeBoundAmends);\n }\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"setting/semesters/compensation-transfer-detail-main-tab.html\"\n },\n {\n title: \"TXT_TITLE_COMPENSATION_TRANSFER_DETAIL\",\n template: \"setting/semesters/compensation-transfer-detail-transfer-tab.html\"\n }\n ];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.onNextBtnClick = function () {\n $scope.detailTabs.activeTab = 1;\n }\n\n $scope.onBackBtnClick = function () {\n $scope.detailTabs.activeTab = 0;\n }\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['studentFullName'], directions: ['asc'] },\n columnDefs: [{ field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'locale' },\n { field: 'sourceCourseFullName', displayName: \"TXT_LBL_SOURCE_COURSE\", sort: 'locale', width: '230px' },\n { field: 'optionsCount', displayName: '', width: '25px', align: 'right' },\n { field: 'destinationCourseFullName', displayName: \"TXT_LBL_DESTINATION_COURSE\", sort: 'locale', width: '230px' },\n { field: 'availableAmends', displayName: \"Náh\", width: '40px', align: 'right' },\n { field: 'transferredPreAmends', displayName: \"Pře\", width: '40px', align: 'right' },\n { field: 'transferredTimeBoundAmends', displayName: \"Čas\", width: '40px', align: 'right' }\n ],\n disabledField: 'isPristine',\n disabledAreSelectable: true\n };\n\n $scope.errorGridOptions = {\n sortInfo: { fields: ['studentFullName'], directions: ['asc'] },\n columnDefs: [{ field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'locale', width: '130px' },\n { field: 'sourceCourseFullName', displayName: \"TXT_LBL_SOURCE_COURSE\", sort: 'locale', width: '200px' },\n { field: 'destinationCourseFullName', displayName: \"TXT_LBL_DESTINATION_COURSE\", sort: 'locale', width: '200px' },\n { field: 'error', displayName: \"Chyba\" }\n ],\n noCommandColumn: true\n };\n\n $scope.isSaving = false;\n\n $scope.onCompensationTransferDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n $scope.detailError = null;\n\n compensationTransferSvc.update(model, success, error);\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n if (data.errors && data.errors.length) {\n compensationTransferErrorModalPromise.$promise.then(function () {\n compensationTransferErrorModalPromise.$scope.errors = data.errors;\n compensationTransferErrorModalPromise.show();\n });\n } else {\n $scope.detailError = data;\n }\n }\n }\n\n $scope.onRowEdit = function (row) {\n compensationTransferDetailDialogPromise.$promise.then(function () {\n compensationTransferDetailDialogPromise.$scope.model = row\n compensationTransferDetailDialogPromise.show();\n });\n };\n\n var compensationTransferDetailDialogPromise = $modal({\n templateUrl: 'setting/semesters/compensation-transfer-detail-transfer-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var compensationTransferErrorModalPromise = $modal({\n templateUrl: 'setting/semesters/compensation-transfer-error-modal.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('CompensationTransferDetailTransferDetailCtrl', ['$scope',\nfunction ($scope) {\n\n $scope.modelCopy = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.model);\n };\n\n $scope.onSemesterDetailSave = function (model) {\n angular.extend($scope.model, model);\n $scope.model.isPristine = false;\n $scope.$hide();\n }\n\n $scope.onDestinationCourseChange = function (destinationCourseRegistrationID) {\n var option = _.find($scope.modelCopy.options, { destinationCourseRegistrationID: destinationCourseRegistrationID });\n\n $scope.modelCopy.destinationCourseFullName = option.destinationCourseFullName;\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('CourseTypesCtrl', ['$scope', '$modal', 'courseTypeSvc',\nfunction ($scope, $modal, courseTypeSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.courseTypes = courseTypeSvc.getAllAsync(true);\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '250px' },\n { field: 'description', displayName: \"TXT_LBL_DESCRIPTION\", sort: 'locale' }\n ]\n };\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = courseTypeSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n courseTypeSvc.remove(data);\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedCourseType = data;\n }\n \n var detailDialogPromise = $modal({\n templateUrl: 'setting/course-types/course-types-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('CourseTypesDetailCtrl', ['$scope', 'courseTypeSvc',\nfunction ($scope, courseTypeSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n if (!model.courseTypeID) {\n courseTypeSvc.insert(model, success, error);\n } else {\n courseTypeSvc.update(model, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","'use strict';\n\nwbApp.controller('HolidayCalendarsCtrl', ['$scope', '$modal', '$translate', 'holidayCalendarSvc',\nfunction ($scope, $modal, $translate, holidayCalendarSvc) {\n\n $scope.holidayCalendars = holidayCalendarSvc.getAll(true);\n\n $scope.gridSettings = {\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc' },\n ],\n }\n\n function reloadData() {\n $scope.holidayCalendars = holidayCalendarSvc.getAll(true);\n }\n\n $scope.$on('refreshData', function (e, data) {\n reloadData();\n });\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onDataSave = function () {\n reloadData();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = holidayCalendarSvc.createNew();\n detailDialogPromise.$scope.onDataSave = function () {\n reloadData();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n holidayCalendarSvc.remove(data.id).$promise.then(function () {\n reloadData();\n });\n }\n\n \n var detailDialogPromise = $modal({\n templateUrl: 'setting/holiday-calendars/holiday-calendars-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('HolidayCalendarsDetailCtrl', ['$scope', 'holidayCalendarSvc',\nfunction ($scope, holidayCalendarSvc) {\n\n if (!$scope.model.days) {\n $scope.model.days = [];\n }\n\n $scope.modelOrig = angular.copy($scope.model);\n $scope.selectedYear = moment().year();\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDeleteDay = function(selectedDay) {\n var index = $scope.model.days.indexOf(selectedDay);\n if (index !== -1) $scope.model.days.splice(index, 1);\n }\n\n $scope.onAddDay = function (selectedDay) {\n if (!!selectedDay && moment(selectedDay).isValid()) {\n var alreadyExist = _.find($scope.model.days, function (d) {\n return moment(d).isSame(selectedDay);\n });\n\n if (!alreadyExist) {\n $scope.model.days.push(selectedDay);\n\n $scope.model.days.sort(function (a, b) {\n if (moment(a).isBefore(b)) {\n return -1;\n }\n\n if (moment(a).isAfter(b)) {\n return 1;\n }\n\n return 0;\n });\n }\n }\n }\n\n $scope.onAddBankHoliday = function(year) {\n var bankHoliday = holidayCalendarSvc.getBankHoliday('CZK', year);\n bankHoliday.$promise.then(function (data) {\n _.forEach(data.days, function (day) {\n $scope.onAddDay(day);\n });\n });\n }\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n var promise;\n if (!model.id) {\n promise = holidayCalendarSvc.insert(model).$promise;\n } else {\n promise = holidayCalendarSvc.update(model).$promise;\n }\n\n function success(data) {\n $scope.isSaving = false;\n if (!!$scope.onDataSave) {\n $scope.onDataSave(data);\n }\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n promise.then(success, error);\n }\n}]);\n","'use strict';\r\n\r\nwbApp.controller('NewsCtrl', ['$scope', '$modal', '$translate', 'newsSvc',\r\nfunction ($scope, $modal, $translate, newsSvc) {\r\n\r\n $scope.news = newsSvc.getAll(true);\r\n\r\n $scope.gridSettings = {\r\n columns: [\r\n { dataField: 'id', caption: $translate.instant('TXT_LBL_ID'), dataType: 'string', visible: false },\r\n { dataField: 'title', caption: $translate.instant('TXT_LBL_TITLE'), dataType: 'string', width: '200px' },\r\n { dataField: 'subTitle', caption: $translate.instant('TXT_LBL_SUB_TITLE'), dataType: 'string' },\r\n { dataField: 'publishedAtUtc', caption: $translate.instant('TXT_LBL_PUBLISHED_AT'), dataType: 'date', format: { type: 'shortDateShortTime' }, width: '120px', sortOrder: 'desc' },\r\n { dataField: 'isVisibleToClients', caption: $translate.instant('TXT_LBL_VISIBLE_TO_CLIENTS'), dataType: 'boolean', width: '60px' },\r\n ],\r\n }\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n $scope.news = newsSvc.getAll(true);\r\n });\r\n\r\n $scope.onRowEdit = function (data) {\r\n newsSvc.getById(data.id).$promise.then(function(model) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = angular.copy(model);\r\n detailDialogPromise.$scope.onDetailSave = function() {\r\n $scope.news = newsSvc.getAll(true);\r\n };\r\n detailDialogPromise.show();\r\n });\r\n });\r\n }\r\n\r\n $scope.onRowAdd = function () {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = newsSvc.createNew();\r\n detailDialogPromise.$scope.onDetailSave = function() {\r\n $scope.news = newsSvc.getAll(true);\r\n };\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n newsSvc.remove(data.id).$promise.then(function() {\r\n $scope.news = newsSvc.getAll(true);\r\n });\r\n }\r\n\r\n \r\n var detailDialogPromise = $modal({\r\n templateUrl: 'setting/news/news-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n}]);\r\n","wbApp.controller('NewsDetailCtrl', ['$scope', '$modal', 'newsSvc',\nfunction ($scope, $modal, newsSvc) {\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"setting/news/news-detail-main-tab.html\"\n },\n {\n title: \"TXT_LBL_TEXT\",\n template: \"setting/news/news-detail-body-tab.html\"\n },\n {\n title: 'TXT_LBL_PICTURES',\n template: \"setting/news/news-detail-pictures-tab.html\"\n }\n ];\n\n $scope.publishedAtUtcPickerOptions = {\n type: \"datetime\",\n width: '100%'\n };\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onNewsDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n if (!model.id) {\n newsSvc.insert(model).$promise.then(success, error);\n } else {\n newsSvc.update(model).$promise.then(success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.onDetailSave();\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n $scope.onDeletePictureBtnClick = function (picture) {\n _.pull($scope.model.pictureUrls || [], picture);\n }\n\n $scope.showPictureSelect = function () {\n picturesSelectDlgPromise.$promise.then(function () {\n picturesSelectDlgPromise.$scope.onPicturesSelected = function (pictures) {\n\n if (!$scope.model.pictureUrls) {\n $scope.model.pictureUrls = [];\n }\n\n angular.forEach(pictures, function (p) {\n if (!_.find($scope.model.pictureUrls, p.imageUrl)) {\n $scope.model.pictureUrls.push(p.imageUrl);\n }\n });\n };\n picturesSelectDlgPromise.show();\n });\n }\n\n var picturesSelectDlgPromise = $modal({\n templateUrl: 'storage/pictures/pictures-select-dlg.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('PreferredBookingDetailCourseRegistrationDetailCtrl', ['$scope',\nfunction ($scope) {\n\n $scope.modelCopy = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.model);\n };\n\n $scope.onCourseRegistrationDetailSave = function (model) {\n angular.extend($scope.model, model);\n $scope.model.isPristine = false;\n $scope.$hide();\n }\n\n}]);\n","wbApp.controller('PreferredBookingDetailCtrl', ['$scope', '$modal', '$translate', '$timeout', '$filter', 'preferredBookingSvc', 'compensationGroupSvc',\nfunction ($scope, $modal, $translate, $timeout, $filter, preferredBookingSvc, compensationGroupSvc) {\n\n $scope.isLoading = true;\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"setting/semesters/preferred-booking-detail-main-tab.html\"\n },\n {\n title: \"TXT_LBL_STUDENTS\",\n template: \"setting/semesters/preferred-booking-detail-course-registrations-tab.html\"\n }\n ];\n $scope.detailTabs.activeTab = 0;\n\n $scope.$watch('detailTabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n });\n\n $scope.model = [];\n compensationGroupSvc.getLookup().$promise.then(function () {\n $scope.model = preferredBookingSvc.getBySemesterID($scope.semesterID);\n $scope.model.$promise.then(function () {\n $scope.isLoading = false;\n });\n })\n\n $scope.isModelValid = function (model) {\n return !!model.sourceSemestersIDs && !!model.sourceSemestersIDs.length;\n }\n\n $scope.onFromSemestersChanged = function (model) {\n if (!model.sourceSemestersIDs || model.sourceSemestersIDs.length === 0) {\n model.data.length = 0; \n } else {\n preferredBookingSvc.getByPreferredBooking(model).$promise.then(function (data) {\n model.data.length = 0;\n model.data.push.apply(model.data, data.data); \n });\n }\n }\n\n $scope.isSaving = false;\n\n $scope.courseRegistrationsGridSettings = {\n columns: [\n { dataField: 'studentFullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '190px', sortOrder: 'asc' },\n {\n dataField: 'firstLesson',\n caption: $translate.instant('TXT_MENU_SCHEDULE'),\n dataType: 'date',\n format: { raw: \"EEE HH:mm\" },\n calculateSortValue: function (rowData) {\n var mfirstLesson = moment(rowData.firstLesson);\n return mfirstLesson.isValid()\n ? mfirstLesson.day() * 10000 + mfirstLesson.hour() * 100 + mfirstLesson.minute()\n : rowData.firstLesson;\n },\n width: '80px'\n },\n { dataField: 'courseFullName', caption: $translate.instant('TXT_LBL_COURSE'), dataType: 'string' },\n {\n dataField: 'destinationSemesterCourseRegistrations',\n caption: $translate.instant('TXT_MENU_BOOKED_IN_DST_SEMESTER'),\n dataType: 'boolean',\n calculateCellValue: function (rowData) {\n return !!rowData.destinationSemesterCourseRegistrations && rowData.destinationSemesterCourseRegistrations.length != 0;\n },\n width: '40px'\n }, \n {\n dataField: 'compensationGroupsIDs',\n caption: $translate.instant(\"TXT_MENU_COMPENSATION_GROUPS\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('compensationGroups')(rowData.compensationGroupsIDs);\n },\n width: '240px'\n },\n ],\n onCellPrepared: function (e) {\n if (e.rowType === \"data\" && e.columnIndex == 4) {\n e.cellElement.mousemove(function () {\n if (!!e.data.destinationSemesterCourseRegistrations) {\n e.cellElement.attr('title', e.data.destinationSemesterCourseRegistrations.join('\\n'));\n }\n });\n }\n },\n }\n\n $scope.onCourseRegistrationRowEdit = function (d) {\n courseRegistrationDetailPromise.$promise.then(function () {\n courseRegistrationDetailPromise.$scope.model = d\n courseRegistrationDetailPromise.show();\n });\n }\n\n $scope.onPreferredBookingSave = function (model) {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n $scope.detailError = null;\n\n if (model.preferredBookingID) {\n preferredBookingSvc.update(model, success, error);\n } else {\n preferredBookingSvc.insert(model, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n\n if (!!$scope.onPreferredBookingSavedSuccessfully) {\n $scope.onPreferredBookingSavedSuccessfully(model);\n }\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n var courseRegistrationDetailPromise = $modal({\n templateUrl: 'setting/semesters/preferred-booking-course-registration-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","'use strict';\n\nwbApp.controller('SemestersCtrl', ['$scope', '$modal', '$translate', '$filter', 'semesterSvc', 'securitySvc', 'tenantSettingSvc',\nfunction ($scope, $modal, $translate, $filter, semesterSvc, securitySvc, tenantSettingSvc) {\n\n $scope.preferredBookingSupported = !tenantSettingSvc.settings.courseInterestsSupport &&\n !(tenantSettingSvc.settings.coursePreviewOnlyRegistration && !tenantSettingSvc.settings.allowClientCourseRegistration);\n\n\n function showCompensationTransferDetail(row) {\n compensationTransferDialogPromise.$promise.then(function () {\n compensationTransferDialogPromise.$scope.sourceSemesterID = row.id;\n compensationTransferDialogPromise.show();\n });\n }\n\n function showPreferredBookingDetail(row) {\n preferredBookingDialogPromise.$promise.then(function () {\n preferredBookingDialogPromise.$scope.semesterID = row.id;\n preferredBookingDialogPromise.$scope.onPreferredBookingSavedSuccessfully = function (model) {\n $scope.semesters = semesterSvc.getAllAsync(true);\n }\n preferredBookingDialogPromise.show();\n });\n }\n\n $scope.rawSemesters = [];\n $scope.semesters = semesterSvc.getAllAsync();\n\n $scope.customFilter = { showInactive: false };\n\n function preFilter() {\n if (!$scope.rawSemesters.$promise) {\n return;\n }\n\n $scope.rawSemesters.$promise.then(function () {\n if ($scope.customFilter.showInactive) {\n $scope.semesters.length = 0;\n $scope.semesters.push.apply($scope.semesters, $scope.rawSemesters);\n } else {\n $scope.semesters.length = 0;\n $scope.semesters.push.apply($scope.semesters,\n _.filter($scope.rawSemesters, { active: true }));\n }\n });\n }\n \n $scope.$watch('customFilter.showInactive', function (newValue, oldValue) {\n preFilter();\n }, true);\n\n\n\n $scope.gridSettings = {\n columns: [\n { dataField: 'isMain', caption: $translate.instant('TXT_MAIN'), dataType: 'boolean', width: '70px' },\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '180px', sortOrder: 'asc' },\n { dataField: 'startDate', caption: $translate.instant('TXT_LBL_START_DATE'), dataType: 'date', width: '90px' },\n { dataField: 'endDate', caption: $translate.instant('TXT_LBL_END_DATE'), dataType: 'date', width: '90px' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string', sortOrder: 'asc' },\n { dataField: 'showInAttendance', caption: $translate.instant('TXT_LBL_SHOW_IN_ATTENDANCE'), dataType: 'boolean', width: '70px' },\n { dataField: 'openForRegistration', caption: $translate.instant('TXT_LBL_OPEN_FOR_REGISTRATION'), dataType: 'boolean', width: '70px' },\n {\n dataField: 'preferredBookingStartDate',\n caption: $translate.instant('TXT_MENU_PREFERRED_BOOKING'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return !!rowData.preferredBookingStartDate\n ? ($filter('date')(rowData.preferredBookingStartDate, 'shortDate') + ' - ' + $filter('date')(rowData.preferredBookingEndDate, 'shortDate'))\n : '';\n },\n width: '140px',\n visible: $scope.preferredBookingSupported\n },\n ],\n onCellPrepared: function (e) {\n if (e.rowType === \"data\" && e.columnIndex == 8) { \n if (!!e.data.preferredBookingStartDate && !e.data.preferredBookingIsActive) {\n e.cellElement.css('text-decoration', 'line-through');\n }\n if (!!e.data.preferredBookingEffectiveIsActive) {\n e.cellElement.addClass('text-success');\n }\n }\n },\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n let data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.active === false) {\n e.rowElement.addClass('text-muted');\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_MENU_TRANSFER_COMPENSATIONS'),\n isVisible: function (row) {\n return securitySvc.isInRole('Semester.CompensationTransfer');\n },\n callback: function (row) { showCompensationTransferDetail(row); }\n }, {\n text: $translate.instant('TXT_MENU_PREFERRED_BOOKING'),\n isVisible: function (row) {\n return $scope.preferredBookingSupported && securitySvc.isInRole('Semester.PreferredBooking');\n },\n callback: function (row) { showPreferredBookingDetail(row); }\n }]\n }\n \n function refreshData() {\n $scope.rawSemesters = semesterSvc.getAllAsync(true);\n preFilter();\n }\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n refreshData();\n\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onSaved = function () {\n preFilter();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = semesterSvc.newModel();\n detailDialogPromise.$scope.onSaved = function () {\n preFilter();\n }; \n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n semesterSvc.remove(data).$promise.then(function () {\n preFilter();\n });\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedSemester = data;\n }\n\n\n //$scope.tabs = [\n //{\n // title: 'TXT_DETAIL',\n // template: \"finance/invoices/invoices-tabs/detail.html\"\n //}];\n\n //$scope.tabs.activeTab = 0;\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'setting/semesters/semesters-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var compensationTransferDialogPromise = $modal({\n templateUrl: 'setting/semesters/compensation-transfer-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n var preferredBookingDialogPromise = $modal({\n templateUrl: 'setting/semesters/preferred-booking-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.controller('SemesterDetailCtrl', ['$scope', 'semesterSvc',\nfunction ($scope, semesterSvc) {\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"setting/semesters/semesters-detail-main-tab.html\"\n },\n {\n title: \"TXT_LBL_SETTING\",\n template: \"setting/semesters/semesters-detail-setting-tab.html\"\n }\n ];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onSemesterDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n if (!model.id) {\n semesterSvc.insert(model, success, error);\n } else {\n semesterSvc.update(model, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n if (!!$scope.onSaved) {\n $scope.onSaved();\n }\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('TerminalsCtrl', ['$scope', '$modal', '$translate', 'terminalSvc',\nfunction ($scope, $modal, $translate, terminalSvc) {\n\n $scope.terminals = terminalSvc.getAllAsync(true);\n\n $scope.gridSettings = {\r\n columns: [\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc' },\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\n ],\r\n onRowPrepared: function (e) {\r\n if (e.rowType == \"data\") {\r\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.buildIn) {\r\n e.rowElement.addClass('text-muted');\r\n }\r\n }\r\n }\r\n }\n\n $scope.$on('refreshData', function (e, data) {\r\n $scope.terminals = terminalSvc.getAllAsync(true);\n });\n\n $scope.onRowEdit = function (data) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\r\n });\r\n }\n\n $scope.onRowAdd = function () {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.model = terminalSvc.createNew();\n detailDialogPromise.show();\r\n });\r\n }\n\n $scope.onRowDelete = function (data) {\r\n terminalSvc.remove(data);\r\n }\n \n var detailDialogPromise = $modal({\n templateUrl: 'setting/terminals/terminals-detail.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('TerminalsDetailCtrl', ['$scope', 'terminalSvc',\nfunction ($scope, terminalSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n if (!model.terminalID) {\n terminalSvc.insert(model, success, error);\n } else {\n terminalSvc.update(model, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","'use strict';\n\nwbApp.directive('wbAmendTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(paymentType) {\n if (!paymentType) { return; }\n return $translate.instant(paymentType.text);\n }\n\n function formatSelection(paymentType) {\n return $translate.instant(paymentType.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_LBL_AMEND_TYPE_PRE_AMEND' },\n { id: 2, text: 'TXT_LBL_AMEND_TYPE_TIME_BOUND' }\n ]\n });\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbCourseTypeImageCombo', ['$timeout', '$translate', 'courseTypeImageSvc',\n function ($timeout, $translate, courseTypeImageSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n return \" \";\n }\n\n function formatSelection(model) {\n return \" \";\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = courseTypeImageSvc.getAllAsync();\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_COURSE_TYPE_IMAGE'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (courseTypeImage) { return courseTypeImage.imageUri; },\n data: models\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n ctrl.$render();\n\n }, 1);\n }\n }\n }]); ","wbApp.directive('wbDestinationCourseCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(model) {\n if (!model) { return; }\n return model.destinationCourseFullName;\n }\n\n function formatSelection(model) {\n return model.destinationCourseFullName;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n scope: {\n courses: '='\n },\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function(option) {return option.destinationCourseRegistrationID; },\n data: scope.courses\n });\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbHolidayCalendarCombo', ['$timeout', '$translate', 'holidayCalendarSvc',\n function ($timeout, $translate, holidayCalendarSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = holidayCalendarSvc.getAll();\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_HOLIDAY_CALENDAR'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: 5, \n data: models\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n ctrl.$render();\n\n }, 1);\n }\n }\n }]); ","wbApp.directive('wbHolidayCalendarWithAddCombo', [\n function () {\n\n return {\n restrict: 'A',\n priority: 1,\n scope: {\n ngModel: '='\n },\n template:\n '
' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n '
',\n controller: ['$scope', '$modal', 'securitySvc', 'holidayCalendarSvc',\n function ($scope, $modal, securitySvc, holidayCalendarSvc) {\n\n $scope.disableAddBtn = !securitySvc.isInRole('HolidayCalendar.Insert')\n\n $scope.onAddClick = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = holidayCalendarSvc.createNew();\n\n detailDialogPromise.$scope.onDataSave = function (data) {\n if (!!data) {\n $scope.ngModel = data.id;\n }\n };\n detailDialogPromise.show();\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'setting/holiday-calendars/holiday-calendars-detail.html',\n show: false,\n scope: $scope.$new()\n });\n }]\n }\n }]);","'use strict';\n\nwbApp.factory('compensationTransferSvc', ['$resource', '$q', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $q, $translate, notificationSvc, repositorySvc) {\n\n var CompensationTransfer = $resource('/Api/CompensationTransfer/Get', {}, {\n 'query': { method: 'GET', isArray: false },\n 'update': { method: 'POST', url: '/Api/CompensationTransfer/Update' }//,\n });\n\n\n function getAsync(sourceSemesterID, destinationSemesterID) {\n return repositorySvc.get(CompensationTransfer, {\n sourceSemesterID: sourceSemesterID,\n destinationSemesterID: destinationSemesterID\n });\n }\n\n function changeTransferToAmendType(model, transferToAmendType) {\n _.forEach(model.items, function (item) {\n if (transferToAmendType === 1) {\n // Pre - amends\n if (item.transferredTimeBoundAmends) {\n item.transferredPreAmends = item.transferredPreAmends + item.transferredTimeBoundAmends;\n item.transferredTimeBoundAmends = 0;\n }\n } else {\n // Time bound amends\n if (item.transferredPreAmends) {\n item.transferredTimeBoundAmends = item.transferredPreAmends + item.transferredTimeBoundAmends;\n item.transferredPreAmends = 0;\n }\n }\n item.isPristine = false;\n }); \n }\n\n function changeMaximumTransferredAmends(model, maximumTransferredAmends) {\n var newValue = 0;\n _.forEach(model.items, function (item) {\n if (model.compensationTransfer.transferToAmendType === 1) {\n // Pre - amends\n newValue = Math.min(maximumTransferredAmends, item.availableAmends);\n if (item.transferredPreAmends !== newValue) {\n item.transferredPreAmends = newValue;\n item.isPristine = false;\n }\n } else {\n // Time bound amends\n newValue = Math.min(maximumTransferredAmends, item.availableAmends);\n if (item.transferredTimeBoundAmends !== newValue) {\n item.transferredTimeBoundAmends = newValue;\n item.isPristine = false;\n }\n }\n });\n }\n\n function changeTransferRemainingPreAmends(model, transferRemainingPreAmends) {\n initializeAmends(model);\n changeMaximumTransferredAmends(model, model.compensationTransfer.maximumTransferredAmends);\n }\n\n function changeTransferRemainingTimeBoundAmends(model, transferRemainingTimeBoundAmends) {\n initializeAmends(model);\n changeMaximumTransferredAmends(model, model.compensationTransfer.maximumTransferredAmends);\n }\n\n function createEmptyModel(sourceSemesterID) {\n return {\n isNew: true,\n compensationTransfer: {\n sourceSemesterID: sourceSemesterID,\n destinationSemesterID: 2\n }\n };\n }\n\n function initilizeModelAsync(model, destinationSemesterID) {\n var deferred = $q.defer();\n\n var serverData = getAsync(model.compensationTransfer.sourceSemesterID, destinationSemesterID);\n serverData.$promise.then(function (data) {\n model.items = [];\n angular.extend(model, data);\n delete model.$promise;\n delete model.$resolved;\n\n initializeAmends(model);\n\n deferred.resolve(model);\n });\n\n return deferred.promise;\n }\n\n function initializeAmends(model) {\n _.forEach(model.items, function (item) {\n item.availableAmends = item.remainingAmends;\n if (model.compensationTransfer.transferRemainingPreAmends) {\n item.availableAmends = item.availableAmends + item.remainingPreAmends;\n }\n if (model.compensationTransfer.transferRemainingTimeBoundAmends) {\n item.availableAmends = item.availableAmends + item.remainingTimeBoundAmends;\n }\n });\n }\n\n function update(data, successCallback, errorCallback) {\n\n function error(data) {\n if (data.errors && data.errors.length) {\n notificationSvc.notifyError($translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'));\n }\n\n if (errorCallback) {\n errorCallback(data);\n }\n }\n\n return repositorySvc.update(\n CompensationTransfer, // $resource\n null, // collection\n data, // entity\n successCallback,\n error);\n }\n\n return {\n createEmptyModel: createEmptyModel,\n getAsync: getAsync,\n changeTransferToAmendType: changeTransferToAmendType,\n changeMaximumTransferredAmends: changeMaximumTransferredAmends,\n initilizeModelAsync: initilizeModelAsync,\n update: update,\n changeTransferRemainingPreAmends: changeTransferRemainingPreAmends,\n changeTransferRemainingTimeBoundAmends: changeTransferRemainingTimeBoundAmends\n }\n }\n]);\n","'use strict';\n\nwbApp.factory('courseTypeImageSvc', ['$resource', '$cacheFactory', 'repositorySvc', \n function ($resource, $cacheFactory, repositorySvc) {\n\n var CourseTypeImage = $resource('/restapi/icons', {}, {\n 'getAll': { method: 'GET', isArray: true, url: '/restapi/icons' }\n });\n\n var cache = $cacheFactory('courseTypeImageSvcCache');\n\n function getAllAsync(refresh) {\n\n var models = cache.get('courseTypeImages');\n\n if (refresh || !models) {\n if (models) {\n cache.remove('courseTypeImages');\n }\n\n models = repositorySvc.customGet('getAll', CourseTypeImage);\n cache.put('courseTypeImages', models);\n }\n\n return models;\n }\n\n return {\n getAllAsync: getAllAsync\n }\n }\n]);\n","wbApp.factory('holidayCalendarSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var HolidayCalendar = $resource('/restapi/holiday-calendars/:id', {}, {\n 'getById': { method: 'GET', url: '/restapi/holiday-calendars/:id' },\n 'getBankHoliday': { method: 'GET', url: '/restapi/holiday-calendars/bank-holidays/country/:countryCode/year/:year' },\n 'getAll': { method: 'GET', isArray: true, url: '/restapi/holiday-calendars' },\n 'insert': { method: 'POST', url: '/restapi/holiday-calendars' },\n 'update': { method: 'PUT', url: '/restapi/holiday-calendars/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/holiday-calendars/:id' } \n });\n\n var holidayCalendars;\n\n function createNew() {\n var holidayCalendar = {\n isNew: true\n };\n\n return holidayCalendar;\n }\n\n function insert(model) {\n var result = repositorySvc.customPost(\n 'insert',\n HolidayCalendar,\n model);\n\n result.$promise.then(function (entity) {\n repositorySvc.entityInserted(holidayCalendars, entity);\n });\n\n return result;\n }\n\n function remove(holidayCalendarId) {\n \n var result = repositorySvc.customDelete(\n 'delete',\n HolidayCalendar,\n { id: holidayCalendarId });\n\n result.$promise.then(function () {\n repositorySvc.entityRemoved(holidayCalendars, holidayCalendarId);\n });\n\n return result;\n }\n\n function update(model) {\n \n var result = repositorySvc.customPutWithParams(\n 'update',\n HolidayCalendar,\n { id: model.id },\n convertDatesToDateString(model));\n\n result.$promise.then(function () {\n repositorySvc.entityUpdated(holidayCalendars, model);\n });\n\n return result;\n }\n\n function getById(holidayCalendarId) {\n return repositorySvc.customGet('getById', HolidayCalendar, { id: holidayCalendarId });\n }\n\n function getBankHoliday(countryCode, year) {\n return repositorySvc.customGet('getBankHoliday', HolidayCalendar, { countryCode: countryCode, year: year });\n }\n\n function getAll(refresh) {\n if (!holidayCalendars || refresh) {\n holidayCalendars = repositorySvc.customGet('getAll', HolidayCalendar, {});\n }\n return holidayCalendars;\n }\n\n return {\n createNew: createNew,\n getById: getById,\n getBankHoliday: getBankHoliday,\n getAll: getAll,\n insert: insert,\n remove: remove,\n update: update,\n }\n }\n]);","'use strict';\n\nwbApp.factory('newsSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n const News = $resource('/restapi/news/:id', {}, {\n 'getById': {method: 'GET', url: '/restapi/news/:id'},\n 'getAll': {method: 'GET', isArray: true, url: '/restapi/news/info'},\n 'insert': {method: 'POST', url: '/restapi/news'},\n 'update': {method: 'PUT', url: '/restapi/news/:id'},\n 'delete': {method: 'DELETE', url: '/restapi/news/:id'}\n });\n\n let news;\n\n function createNew()\n {\n return {\n id: null,\n title: null,\n subTitle: null,\n publishedAtUtc: new Date(),\n isVisibleToClients: false,\n body: null,\n pictureUrls: null\n };\n }\n\n function insert(model) {\n return repositorySvc.customPost(\n 'insert',\n News,\n model);\n }\n\n function remove(id) {\n news = null;\n return repositorySvc.customDelete(\n 'delete',\n News,\n { id: id });\n }\n\n function update(model) {\n news = null;\n return repositorySvc.customPutWithParams(\n 'update',\n News,\n { id: model.id },\n convertDatesToDateString(model));\n }\n\n function getById(id) {\n return repositorySvc.customGet('getById', News, { id: id });\n }\n\n function getAll(refresh) {\n if (!news || refresh) {\n news = repositorySvc.customGet('getAll', News, {});\n }\n return news;\n }\n\n return {\n createNew: createNew,\n getById: getById,\n getAll: getAll,\n insert: insert,\n remove: remove,\n update: update\n }\n }]);","wbApp.factory('preferredBookingSvc', ['$resource', '$q', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $q, $translate, notificationSvc, repositorySvc) {\n\n var PreferredBooking = $resource('/Api/PreferredBooking/Get', {}, {\n 'getBySemesterID': { method: 'GET', isArray: false, url: '/Api/PreferredBooking/GetBySemesterID' },\n 'getByPreferredBooking': { method: 'POST', isArray: false, url: '/Api/PreferredBooking/GetByPreferredBooking' },\n 'update': { method: 'POST', url: '/Api/PreferredBooking/Update' },\n 'insert': { method: 'POST', url: '/Api/PreferredBooking/Insert' },\n });\n\n function createNew(semesterID) {\n return {\n preferredBookingID: 0,\n semesterID: semesterID,\n sourceSemestersIDs: [],\n data: []\n };\n }\n\n function getBySemesterID(semesterID) {\n return repositorySvc.customGet(\n 'getBySemesterID',\n PreferredBooking,\n {\n semesterID: semesterID\n });\n }\n\n function getByPreferredBooking(model) {\n return PreferredBooking['getByPreferredBooking'](\n {\n dto: model\n });\n }\n\n function insert(data, successCallback, errorCallback) {\n repositorySvc.insert(\n PreferredBooking, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n PreferredBooking, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'preferredBookingID');\n }\n\n return {\n createNew: createNew,\n insert: insert,\n update: update,\n getBySemesterID: getBySemesterID,\n getByPreferredBooking: getByPreferredBooking\n }\n }\n]);\n","'use strict';\n\nwbApp.controller('PicturesCtrl', ['$scope', '$modal', 'picturesSvc', 'localStorageService', 'messageBoxSvc',\nfunction ($scope, $modal, picturesSvc, localStorageService, messageBoxSvc) {\n\n localStorageService.bind($scope, 'size', 'medium', 'picture-gallery-picture-size');\n\n $scope.setSelected = function (picture) {\n $scope.selected = picture;\n }\n\n $scope.pictures = picturesSvc.getAllAsync();\n\n $scope.onDeleteBtnClick = function (picture) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: picture.isUsed ? 'TXT_TEXT_CONFIRM_DELETE_PICURE_IN_USE' : 'TXT_TEXT_CONFIRM_DELETE_PICURE',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () { picturesSvc.remove(picture); }\n }]\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'storage/pictures/pictures-detail.html',\n show: false,\n scope: $scope\n });\n\n $scope.onUploadImageClick = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.show();\n });\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('PicturesDetailCtrl', ['$scope', '$timeout', '$translate', 'notificationSvc', 'picturesSvc',\nfunction ($scope, $timeout, $translate, notificationSvc, picturesSvc) {\n\n $scope.image = '';\n $scope.croppedImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYEAAAEyCAYAAAAcB2z/AAAKNElEQVR4Xu3VAQkAMAwDwc2/6Axm468OcinkbttxBAgQIJAUuEYg2bvQBAgQ+AJGwCMQIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQIPqGDEp71BlCAAAAAASUVORK5CYII=';\n\n $scope.imageIsValid = false;\n $scope.pictureWidth = $scope.pictureWidth || 770;\n $scope.pictureHeight = $scope.pictureHeight || 612;\n \n $scope.previewHeight = (0.0 + $scope.pictureHeight) / $scope.pictureWidth * 385;\n \n $scope.pictureAspect = `${$scope.pictureWidth}x${$scope.pictureHeight}`;\n $scope.resultPictureSize = $scope.pictureWidth;\n \n\n $scope.onImageLoadSuccess = function () {\n $scope.imageIsValid = true;\n }\n\n $scope.onImageLoadError = function () {\n $scope.imageIsValid = false;\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_ERROR_LOADING_IMAGE'),\n $translate.instant('TXT_ALERT_UNSUPPORTED_IMAGE_TYPE'));\n }\n\n var handleFileSelect = function (evt) {\n var file = evt.currentTarget.files[0];\n var reader = new FileReader();\n reader.onload = function (evt) {\n $scope.$apply(function ($scope) {\n $scope.image = evt.target.result;\n });\n };\n reader.readAsDataURL(file);\n };\n\n $scope.onUploadClick = function () {\n\n function success(data) {\n $scope.$hide();\n if (!!$scope.onImageSave) {\n $scope.onImageSave(data.imageUrl);\n }\n }\n\n function error() {\n $scope.isSaving = false;\n }\n\n if ($scope.isSaving || !$scope.imageIsValid) {\n return;\n }\n\n $scope.isSaving = true;\n\n \n if ($scope.onUploadImage) {\n let data = picturesSvc.prepareImageData($scope.croppedImage, success, error)\n $scope.onUploadImage(data, success, error);\n } else {\n var originalFormat = picturesSvc.decodeImageTypeFromData($scope.image);\n picturesSvc.insert($scope.croppedImage, originalFormat, success, error);\n }\n }\n\n $timeout(function () {\n angular.element(document.querySelector('#fileInput')).on('change', handleFileSelect);\n }, 1000);\n\n}]);\n","wbApp.controller('PicturesSelectDlgCtrl', ['$scope', '$timeout', '$modal', '$translate', 'picturesSvc',\nfunction ($scope, $timeout, $modal, $translate, picturesSvc) {\n\n $scope.pictures = picturesSvc.getAllAsync(true);\n\n $scope.toggleSelected = function (picture) {\n picture.isSelected = !picture.isSelected;\n }\n\n $scope.detailIsUnchanged = function (pictures) {\n return !_.some(pictures, { isSelected: true });\n }\n\n $scope.onPicturesAdd = function (pictures) {\n\n if (!!$scope.onPicturesSelected) {\n $scope.onPicturesSelected(_.filter(pictures, { isSelected: true })); \n }\n\n $scope.$hide();\n }\n\n $scope.onAddBtnClick = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.show();\n detailDialogPromise.$scope.onImageSave = function (imageUrl) {\n\n $scope.pictures = picturesSvc.getAllAsync(true);\n\n $scope.pictures.$promise.then(function() {\n _.forEach(_.filter($scope.pictures, { imageUrl: imageUrl }), function (p) {\n p.isSelected = true;\n });\n });\n }\n });\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'storage/pictures/pictures-detail.html',\n show: false,\n scope: $scope\n });\n}]);\n","'use strict';\n\nwbApp.controller('ProtectedStorageCtrl', ['$scope', '$modal', '$q', '$http', '$translate', 'messageBoxSvc', 'protectedStorageSvc',\n function ($scope, $modal, $q, $http, $translate, messageBoxSvc, protectedStorageSvc) {\n\n $scope.$on('refreshData', function (e, data) {\n if (fileManagerInstance) {\n fileManagerInstance.refresh();\n }\n });\n\n function downloadDataUrlFromJavascript(name, dataUrl) {\n var link = document.createElement(\"a\"); \n link.target = \"_blank\";\n link.setAttribute(\"download\", name);\n link.href = dataUrl;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n var chunkSize = 1024 * 1024 * 8; // 8 MB\n\n var contextMenuItems = [\n \"delete\",\n {\n name: \"make-public\",\n text: $translate.instant('TXT_LBL_CHANGE_TO_PUBLIC'),\n icon: \"warning\",\n beginGroup: true\n },\n {\n name: \"make-private\",\n text: $translate.instant('TXT_LBL_CHANGE_TO_PRIVATE'),\n icon: \"key\",\n beginGroup: true\n },\n {\n name: \"get-download-url\",\n text: $translate.instant('TXT_LBL_SHOW_PUBLIC_URL'),\n icon: \"link\",\n },\n \"refresh\",\n \"download\"\n ];\n\n function onShowDirectJoinLink(downloadUrl) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_PUBLIC_URL',\n message: '{0}'.f(encodeURI(downloadUrl)),\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n }\n\n function onItemClick(args) {\n\n var selectedItems = fileManagerInstance.getSelectedItems();\n if (!!selectedItems && selectedItems.length > 0) {\n\n if (args.itemData.name === \"make-public\") {\n protectedStorageSvc.setPublicAccess(selectedItems[0].path, true).$promise.then(function () {\n fileManagerInstance.refresh();\n });\n }\n if (args.itemData.name === \"make-private\") {\n protectedStorageSvc.setPublicAccess(selectedItems[0].path, false).$promise.then(function () {\n fileManagerInstance.refresh();\n });\n }\n if (args.itemData.name === \"get-download-url\") {\n protectedStorageSvc.getDownloadUrl(selectedItems[0].path).$promise.then(function (downloadUrl) {\n onShowDirectJoinLink(downloadUrl.url);\n }); \n }\n }\n }\n\n var fileManagerInstance;\n $scope.fileManagerOptions = {\n fileSystemProvider: new DevExpress.fileManagement.CustomFileSystemProvider({\n getItems: function(pathInfo) {\n return protectedStorageSvc.getDirectory(pathInfo.path).$promise;\n },\n downloadItems: function (items) {\n protectedStorageSvc.getDownloadUrl(items[0].path).$promise.then(function (downloadUrl) {\n downloadDataUrlFromJavascript(items[0].name, downloadUrl.url);\n });\n },\n createDirectory: function (parentDir, name) { \n return protectedStorageSvc.createDirectory(!!parentDir.path ? parentDir.path + \"/\" + name : name).$promise;\n },\n deleteItem: function(item) {\n if (item.isDirectory)\n {\n return protectedStorageSvc.deleteDirectory(item.path).$promise;\n }\n else\n {\n return protectedStorageSvc.deleteFile(item.path).$promise;\n }\n },\n uploadFileChunk: function (fileData, uploadInfo, destinationDirectory) {\n\n var fileSize = fileData.size;\n var contentType = fileData.type;\n var chunkCount = uploadInfo.chunkCount;\n\n var deffered = $q(function (resolve, reject) {\n if (uploadInfo.chunkIndex === 0) {\n var filePath = destinationDirectory.path ? destinationDirectory.path + \"/\" + fileData.name : fileData.name;\n protectedStorageSvc.getUploadUrl(filePath, contentType).$promise.then(function (uploadUrl) {\n uploadInfo.customData.accessUrl = uploadUrl.url;\n resolve();\n });\n }\n else {\n resolve();\n }\n });\n\n return $q(function (resolve, reject) {\n deffered.then(function () {\n\n var chunkSize = uploadInfo.chunkBlob.size;\n var chunkFirstByte = uploadInfo.bytesUploaded;\n var chunkLastByte = uploadInfo.bytesUploaded + uploadInfo.chunkBlob.size - 1;\n var totalObjectSize = fileSize;\n\n $.ajax({\n url: uploadInfo.customData.accessUrl,\n type: 'PUT',\n contentType: contentType,\n contentLength: uploadInfo.chunkBlob.size,\n headers: {\n 'Content-Range': \"bytes \" + chunkFirstByte + \"-\" + chunkLastByte + \"/\" + fileSize\n },\n data: uploadInfo.chunkBlob,\n crossDomain: true,\n processData: false,\n success: function (res) {\n resolve();\n },\n error: function (err) {\n if (err.status == 308) { // Continue with next chunk \n resolve();\n } else {\n reject(err);\n }\n }\n });\n });\n });\n },\n contentExpr: \"contentType\",\n dateModifiedExpr: \"createdAtUtc\"\n }),\n permissions: {\n download: true,\n create: true,\n delete: true,\n upload: true\n },\n selectionMode: \"single\",\n upload: {\n maxFileSize: (1024 * 1024) * 1024 * 1204 * 5, // 5 TB GCS object limit\n chunkSize: chunkSize \n },\n onContentReady: function (e) {\n fileManagerInstance = e.component;\n },\n onSelectionChanged: function (e) {\n if (!!e.selectedItems && e.selectedItems.length > 0) {\n var isDirectory = e.selectedItems[0].dataItem.isDirectory;\n var isPublic = e.selectedItems[0].dataItem.isPublic;\n\n if (isDirectory) {\n e.component.option('contextMenu.items', contextMenuItems.filter(item => {\n if (item === 'delete' || item === 'refresh') {\n return item;\n }\n }));\n } else if (isPublic) {\n e.component.option('contextMenu.items', contextMenuItems.filter(item => {\n if (item === 'delete' || item === 'refresh' || item === \"download\" ||\n item.name === \"make-private\" || item.name === \"get-download-url\") {\n return item;\n }\n }));\n } else {\n e.component.option('contextMenu.items', contextMenuItems.filter(item => {\n if (item === 'delete' || item === 'refresh' || item === \"download\" || item.name === \"make-public\") {\n return item;\n }\n }));\n }\n } else {\n e.component.option('contextMenu.items', contextMenuItems.filter(item => {\n if (item === 'refresh') {\n return item;\n }\n }));\n }\n },\n contextMenu: {\n items: contextMenuItems\n },\n onContextMenuItemClick: onItemClick,\n itemView: {\n details: {\n columns: [\n \"thumbnail\",\n \"name\",\n {\n dataField: \"isPublic\",\n caption: $translate.instant('TXT_LBL_PUBLIC'),\n dataType: \"boolean\",\n width: 75\n },\n \"dateModified\",\n \"size\"\n ]\n }\n }\n };\n}]);\n","wbApp.controller('ProtectedStorageSelectDlgCtrl', ['$scope', '$timeout', '$modal', '$translate', 'protectedStorageSvc',\nfunction ($scope, $timeout, $modal, $translate, protectedStorageSvc) {\n\n $scope.onOk = function () {\n\n if (!!$scope.onFilesSelected) {\n if (!!fileManagerInstance) {\n var selectedItems = fileManagerInstance.getSelectedItems();\n selectedItems = _.filter(selectedItems, { isDirectory: !!$scope.selectFoldersOnly });\n\n\n var selectedFiles = _.map(selectedItems, function (value, index, collection) {\n return {\n objectUri: value.key,\n name: value.name,\n contentType: value.dataItem.contentType,\n };\n });\n\n $scope.onFilesSelected(selectedFiles);\n } \n }\n\n $scope.$hide();\n }\n\n $scope.isNothingSelected = function () {\n if (!!fileManagerInstance) {\n var selectedItems = fileManagerInstance.getSelectedItems();\n selectedItems = _.filter(selectedItems, { isDirectory: !!$scope.selectFoldersOnly });\n return selectedItems == null || selectedItems.length == 0;\n } else {\n return true;\n }\n }\n\n var fileManagerInstance;\n $scope.fileManagerOptions = {\n fileSystemProvider: new DevExpress.fileManagement.CustomFileSystemProvider({\n getItems: function (pathInfo) {\n return protectedStorageSvc.getDirectory(pathInfo.path).$promise;\n },\n contentExpr: \"contentType\",\n dateModifiedExpr: \"createdAtUtc\",\n }),\n selectionMode: \"multiple\", \n onContentReady: function (e) {\n fileManagerInstance = e.component;\n },\n onSelectionChanged: function (e) {\n\n if (!!$scope.selectFoldersOnly) {\n var selectedItems = fileManagerInstance.getSelectedItems();\n\n var selectedFiles = _.filter(selectedItems, { isDirectory: false });\n\n if (selectedFiles != null && selectedFiles.length > 0) {\n var selectedItemKeys = _.map(_.filter(selectedItems, { isDirectory: true }), 'key');\n fileManagerInstance.option(\"selectedItemKeys\", selectedItemKeys);\n }\n }\n }\n }\n}]);\n","'use strict';\n\nwbApp.factory('picturesSvc', ['$resource', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, notificationSvc, repositorySvc) {\n\n var jpgstr = 'data:image/jpeg;base64,';\n var pngstr = 'data:image/png;base64,';\n\n var Picture = $resource('/restapi/images', {}, {\n 'query': { method: 'GET', isArray: true },\n // 'update': { method: 'POST', url: '/Api/Subjects/Update' },\n 'insert': { method: 'POST', url: '/restapi/images' },\n 'delete': { method: 'DELETE', url: '/restapi/images' },\n 'dashboard': { method: 'GET', isArray: true, url: '/restapi/images/dashboard' }\n });\n\n var pictures;\n var includesGlobal = false;\n\n function getAllAsync(refresh, includeGlobal) {\n if (!pictures || refresh || (!!pictures && includesGlobal != includeGlobal)) {\n includesGlobal = includeGlobal;\n pictures = repositorySvc.get(Picture, { includeGlobal: includeGlobal || false });\n }\n return pictures;\n }\n \n function getDashboardImages() {\n return repositorySvc.customGet('dashboard', Picture, { includeGlobal: true });\n }\n\n function prepareImageData(imageData, originalFormat, errorCallback, imageType) {\n\n var data = {\n imageBase64: '',\n imageType: imageType || 0, // 0 - Generic, 1 - Profile, 3 - Dashboard\n imageFormatType: decodeImageTypeFromData(imageData),\n convertToImageFormatType: originalFormat\n }\n\n switch (data.imageFormatType) {\n case 0:\n data.imageBase64 = imageData.substring(pngstr.length);\n break;\n case 1:\n data.imageBase64 = imageData.substring(jpgstr.length);\n break;\n default:\n var errorReason = $translate.instant('TXT_ALERT_UNSUPPORTED_IMAGE_TYPE');\n notificationSvc.notifyError($translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'), errorReason);\n\n if (!!errorCallback) {\n errorCallback(errorReason);\n }\n return null;\n }\n\n return data;\n }\n \n function insertDashboard(imageData, successCallback, errorCallback) {\n let data = prepareImageData(imageData, 1, errorCallback, 3);\n if (!data) {\n return;\n }\n return repositorySvc.insert(\n Picture, // $resource\n pictures, // collection\n data, // entity\n successCallback,\n errorCallback); \n }\n\n function insert(imageData, originalFormat, successCallback, errorCallback) {\n\n var data = prepareImageData(imageData, originalFormat, errorCallback);\n if (!data) {\n return;\n }\n\n return repositorySvc.insert(\n Picture, // $resource\n pictures, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n function remove(data, successCallback, errorCallback) {\n repositorySvc.remove(\n Picture, // $resource\n pictures, // collection\n data, // entity\n successCallback, // successCallback\n errorCallback,\n { imageUrl: data.imageUrl },\n 'imageUrl');\n }\n\n // -1 unknown, 0 - png, 1 - jpeg\n function decodeImageTypeFromData(imageData) {\n if (imageData.lastIndexOf(jpgstr, 0) === 0) {\n // jpeg\n return 1;\n } else if (imageData.lastIndexOf(pngstr, 0) === 0) {\n // png\n return 0;\n } else {\n return -1;\n }\n }\n\n return {\n getAllAsync: getAllAsync,\n insert: insert,\n remove: remove,\n decodeImageTypeFromData: decodeImageTypeFromData,\n prepareImageData: prepareImageData,\n getDashboardImages: getDashboardImages,\n insertDashboard: insertDashboard\n }\n }\n]);\n","'use strict';\n\nwbApp.factory('protectedStorageSvc', ['$resource', '$translate', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, notificationSvc, repositorySvc) {\n\n var ProtectedStorage = $resource('/restapi/protected-content/:id', {}, { \n 'getDirectory': { method: 'GET', isArray: true, url: '/restapi/protected-content' },\n 'getDownloadUrl': { method: 'POST', url: '/restapi/protected-content/create-download-url' },\n 'setPublicAccess': { method: 'POST', url: '/restapi/protected-content/set-public-access' },\n 'getUploadUrl': { method: 'POST', url: '/restapi/protected-content/create-upload-url' },\n 'createDirectory': { method: 'POST', url: '/restapi/protected-content/create-directory' },\n 'deleteFile': { method: 'DELETE', url: '/restapi/protected-content/delete-file' },\n 'deleteDirectory': { method: 'DELETE', url: '/restapi/protected-content/delete-directory' },\n 'findGalleryInfoByPaths': { method: 'POST', isArray: true, url: '/restapi/protected-content/gallery/find-by-paths' },\n 'updateGalleryInfo': { method: 'PUT', url: '/restapi/protected-content/gallery/:path' },\n });\n\n function getDirectory(path) {\n return repositorySvc.customGet('getDirectory', ProtectedStorage, { path: path });\n }\n \n function updateGalleryInfo(model, path) {\n return repositorySvc.customPutWithParams(\n 'updateGalleryInfo',\n ProtectedStorage,\n {\n path: path\n },\n model,\n null,\n null,\n false\n );\n }\n \n // paths: [\"PhotoAlbum\", \"PhotoAlbum2\"]\n // includeImages: true|false\n function findGalleryInfoByPaths(paths, includeImages) {\n return repositorySvc.customPostWithParams(\n 'findGalleryInfoByPaths',\n ProtectedStorage,\n {},\n {\n includeImages: !!includeImages,\n paths: paths\n },\n null,\n null,\n true);\n }\n\n function getDownloadUrl(path) {\n return repositorySvc.customPostWithParams(\n 'getDownloadUrl',\n ProtectedStorage,\n { objectUri: path },\n null,\n null,\n null,\n true);\n }\n\n function setPublicAccess(path, isPublic) {\n return repositorySvc.customPostWithParams(\n 'setPublicAccess',\n ProtectedStorage,\n {\n objectUri: path,\n isPublic: isPublic\n },\n null,\n null,\n null,\n true);\n }\n\n function getUploadUrl(path, contentType) {\n return repositorySvc.customPost(\n 'getUploadUrl',\n ProtectedStorage,\n {\n objectUri: path,\n contentType: contentType\n },\n null,\n null,\n true);\n }\n\n function createDirectory(path) {\n return repositorySvc.customPostWithParams(\n 'createDirectory',\n ProtectedStorage,\n { objectUri: path },\n null,\n null,\n null,\n true);\n }\n\n function deleteFile(path) {\n return repositorySvc.customPostWithParams(\n 'deleteFile',\n ProtectedStorage,\n { objectUri: path },\n null,\n null,\n null,\n true);\n }\n\n function deleteDirectory(path) {\n return repositorySvc.customPostWithParams(\n 'deleteDirectory',\n ProtectedStorage,\n { objectUri: path },\n null,\n null,\n null,\n true);\n }\n\n return {\n getDirectory: getDirectory,\n getDownloadUrl: getDownloadUrl,\n setPublicAccess: setPublicAccess,\n getUploadUrl: getUploadUrl,\n createDirectory: createDirectory,\n deleteFile: deleteFile,\n deleteDirectory: deleteDirectory,\n findGalleryInfoByPaths: findGalleryInfoByPaths,\n updateGalleryInfo: updateGalleryInfo\n }\n }\n]);\n","wbApp.controller('SurveyAnswerDetailCtrl', ['$scope', 'surveyResponseSvc',\nfunction ($scope, surveyResponseSvc) {\n // $scope.survey\n // $scope.surveyResponseID\n\n $scope.response = surveyResponseSvc.getByResponseIDAyns($scope.surveyResponseID);\n\n $scope.response.$promise.then(function (response) {\n $scope.model = surveyResponseSvc.getQuestionWithAnswersModel(\n $scope.survey.surveyQuestions,\n response.responseAnswers);\n });\n\n}]);\n","'use strict';\n\nwbApp.controller('SurveyAnswersCtrl', ['$scope', '$modal', 'surveyResponseSvc',\nfunction ($scope, $modal, surveyResponseSvc) {\n\n $scope.$on('surveySelectionChanged', function (e, newlySelectedSurvey) {\n if ($scope.survey.surveyID !== newlySelectedSurvey.surveyID) {\n $scope.surveyAnswers = surveyResponseSvc.getAllBySurveyIDAsync(newlySelectedSurvey.surveyID);\n $scope.survey = newlySelectedSurvey;\n }\n });\n\n $scope.surveyAnswersFilterOptions = {\n filterText: \"\"\n };\n\n $scope.onShowAnswers = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.survey = angular.copy($scope.survey);\n detailDialogPromise.$scope.surveyResponseID = data.surveyResponseID;\n detailDialogPromise.show();\n });\n }\n\n $scope.onGetExcelExport = function () {\n\n function success(data)\n {\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n\n function error(data)\n {\n\n }\n\n var res = surveyResponseSvc.getExcelExportBySurveyID($scope.survey.surveyID);\n res.$promise.then(success, error);\n }\n\n $scope.surveyAnswers = [];\n $scope.survey = {};\n\n $scope.answersGridOptions = {\n sortInfo: { fields: ['filledAt'], directions: ['dsc'] },\n columnDefs: [\n { field: 'studentFullName', displayName: \"TXT_LBL_STUDENT\", sort: 'humanName', width: '180px' },\n { field: 'semesterName', displayName: \"TXT_LBL_SEMESTER\", width: '120px' },\n { field: 'firstDate', displayName: \"TXT_SEC_COURSE_SCHEDULE\", cellFilter: 'date:EEE HH:mm', width: '80px' },\n { field: 'subjectName', displayName: \"TXT_LBL_SUBJECT\", width: '190px' },\n { field: 'courseFullName', displayName: \"TXT_VAL_RCPG_COURSE\", },\n { field: 'teacherFullName', displayName: \"TXT_LBL_EMPLOYEE\", width: '180px' },\n { field: 'filledAt', displayName: \"TXT_LBL_CREATED_AT\", cellFilter: \"date:'short'\", width: '110px' },\n { field: 'pctRating', displayName: \"TXT_LBL_RATING\", cellFilter: \"number:2\", width: '80px' },\n ],\n customCmds: [\n {\n text: 'TXT_MENU_VIEW_ANSWER',\n command: function (row) { $scope.onShowAnswers(row); }\n }, {\n text: 'TXT_EXPORT_SURVEY_ANSWERS_TO_EXCEL',\n command: function () { $scope.onGetExcelExport(); }\n }]\n };\n\n var detailDialogPromise = $modal({\n templateUrl: 'survey/survey-detail-tabs/answer-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n\n}]);\n","wbApp.controller('SurveyDetailCtrl', ['$scope', 'surveySvc',\nfunction ($scope, surveySvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"survey/survey-detail-main-tab.html\"\n },\n {\n title: \"TXT_LBL_QUESTIONS\",\n template: \"survey/survey-detail-questions-tab.html\",\n paneScrollable: true\n }\n ];\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.onQuestionAdd = function () {\n $scope.model.surveyQuestions.push(surveySvc.newQuestion());\n }\n\n $scope.onQuestionRemove = function (question) {\n var index = $scope.model.surveyQuestions.indexOf(question);\n if (index > -1) {\n $scope.model.surveyQuestions.splice(index, 1);\n }\n }\n\n $scope.onSurveyTypeChanged = function (question, surveyTypeID) {\n if (surveyTypeID === 3) {\n question.allowCustomNote = false;\n } else {\n question.allowCustomNote = true;\n }\n }\n\n $scope.isSaving = false;\n\n $scope.onSurveyDetailSave = function (model) {\n \n $scope.isSaving = true;\n\n if (!model.surveyID) {\n surveySvc.insert(model, success, error);\n } else {\n surveySvc.update(model, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.onSave();\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n}]);\n","wbApp.controller('SurveysCtrl', ['$scope', '$modal', 'surveySvc',\nfunction ($scope, $modal, surveySvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'active', displayName: \"TXT_LBL_ACTIVE\", cellFilter: 'checkmark', width: '70px' },\n { field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '180px' },\n { field: 'notes', displayName: \"TXT_LBL_DESCRIPTION\", sort: 'locale' },\n { field: 'isDefault', displayName: \"TXT_LBL_IS_DEFAULT\", cellFilter: 'checkmark', width: '70px' }\n ]\n };\n\n\n $scope.$on('refreshData', function (e, data) {\n refreshData();\n });\n\n function refreshData() {\n $scope.surveys = surveySvc.getAllNonDeleted(true);\n }\n\n refreshData();\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.$scope.onSave = function () {\n refreshData();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = surveySvc.newModel();\n detailDialogPromise.$scope.onSave = function () {\n refreshData();\n };\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n surveySvc.remove(data).$promise.then(function () {\n refreshData();\n });\n }\n\n $scope.onRowSelected = function (data) {\n $scope.selectedSurvey = data;\n $scope.$broadcast('surveySelectionChanged', $scope.selectedSurvey);\n }\n\n $scope.tabs = [\n {\n title: 'TXT_LBL_SURVEY_RESPONSES',\n template: \"survey/survey-detail-tabs/answers.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n var detailDialogPromise = $modal({\n templateUrl: 'survey/survey-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.directive('wbSurveyCombo', ['$timeout', '$translate', 'surveySvc',\n function ($timeout, $translate, surveySvc) {\n\n function formatResult(model) {\n if (!model) { return ''; }\n\n if (model.isDefault) {\n return \"\" + model.name + \"\";\n } else {\n return model.name;\n }\n\n return model.name;\n }\n\n function formatSelection(model) {\n return model.name;\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n var models = surveySvc.getAllActiveAsync(ctrl.$modelValue);\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_SURVEY'),\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n data: models,\n id: function (survey) { return survey.surveyID; }\n });\n \n ctrl.$render();\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return null;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n\n if (!_.find(models, { surveyID: ctrl.$modelValue })) {\n // survey is not in the list, reload!\n var newModels = surveySvc.getAllActiveAsync(ctrl.$modelValue);\n newModels.$promise.then(function () {\n models.length = 0;\n models.push.apply(models, newModels);\n\n $(elm).select2('val', ctrl.$viewValue);\n });\n } else {\n $(elm).select2('val', ctrl.$viewValue);\n }\n });\n }\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]);\n","'use strict';\n\nwbApp.directive('wbSurveyQuestionTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n if (viewValue === '1') {\n return 1;\n }\n if (viewValue === '2') {\n return 2;\n }\n return 3;\n });\n\n ctrl.$formatters.unshift(function (value) {\n return value + '';\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 1, text: 'TXT_QUESTION_TYPE_TRUE_FALSE' },\n { id: 2, text: 'TXT_QUESTION_TYPE_ONE_TO_FIVE' },\n { id: 3, text: 'TXT_QUESTION_TYPE_TEXT' }\n ]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n }, 1);\n }\n }\n }]);\n","'use strict';\n\nwbApp.factory('surveyResponseSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n\n var SurveyResponse = $resource('/Api/SurveyResponses/GetAll', {}, {\n 'getByResponseID' : { method: 'GET', url: '/Api/SurveyResponses/Get', isArray: false },\n 'query': { method: 'GET', url: '/Api/SurveyResponses/GetDetailBySurveyID', isArray: true },\n 'getExcelExportBySurveyID': { method: 'POST', url: '/Api/SurveyResponses/GetExcelExportBySurveyID' }\n\n });\n\n function getByResponseIDAyns(surveyResponseID) {\n return repositorySvc.customGet('getByResponseID', SurveyResponse, { surveyResponseID: surveyResponseID });\n }\n\n function getAllBySurveyIDAsync(surveyID) {\n return repositorySvc.get(SurveyResponse, { surveyID: surveyID });\n }\n\n function getQuestionWithAnswersModel(questions, answers) {\n var res = [];\n\n _.forEach(questions, function (q) {\n var a = _.find(answers, { 'surveyQuestionID': q.surveyQuestionID });\n\n res.push({\n surveyQuestionTypeID: q.surveyQuestionTypeID,\n question: q.question,\n allowCustomNote: q.allowCustomNote,\n bitAnswer: !a ? true : a.bitAnswer,\n intAnswer: !a ? 3 : a.intAnswer,\n textAnswer: !a ? '' : a.textAnswer\n });\n });\n\n return res;\n }\n\n function getExcelExportBySurveyID(surveyID) {\n return repositorySvc.customPost('getExcelExportBySurveyID', SurveyResponse, {\n surveyID: surveyID\n });\n }\n\n return {\n getAllBySurveyIDAsync: getAllBySurveyIDAsync,\n getByResponseIDAyns: getByResponseIDAyns,\n getQuestionWithAnswersModel: getQuestionWithAnswersModel,\n getExcelExportBySurveyID: getExcelExportBySurveyID\n }\n }\n]);","wbApp.controller('AccountingSettingsCtrl', ['$scope', '$q', '$translate', 'accountingSettingsSvc', 'tenantSettingSvc', 'notificationSvc',\nfunction ($scope, $q, $translate, accountingSettingsSvc, tenantSettingSvc, notificationSvc) {\n\n var isActive = false;\n var loaded = false;\n\n function loadData() {\n $scope.isBusy = true;\n $scope.accountingSetting = accountingSettingsSvc.getAsync();\n $scope.tenantSetting = {};\n $scope.tenantSettingSrc = tenantSettingSvc.getAsync();\n $q.all([$scope.accountingSetting.$promise, $scope.tenantSettingSrc.$promise]).then(function () {\n $scope.accountingSettingOrig = angular.copy($scope.accountingSetting);\n $scope.tenantSetting = angular.copy($scope.tenantSettingSrc);\n $scope.tenantSettingOrig = angular.copy($scope.tenantSettingSrc);\n\n $scope.isBusy = false;\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n if (isActive) {\n loadData();\n }\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n\n if (!loaded) {\n loadData();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.onCancel = function () {\n loadData();\n }\n\n $scope.onModelSave = function (accountingSettingData, tenantSettingData) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n var updates = 0;\n\n if (!$scope.accountingSettingIsUnchanged(accountingSettingData)) {\n updates++;\n\n accountingSettingsSvc.update(accountingSettingData, function (model) {\n $scope.accountingSetting = model;\n $scope.accountingSettingOrig = angular.copy($scope.accountingSetting);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n\n if (!$scope.tenantSettingIsUnchanged(tenantSettingData)) {\n updates++;\n\n tenantSettingSvc.getAsync().$promise.then(function (currentSetting) {\n\n var current = angular.copy(currentSetting);\n\n // Set only fields which we do set on this tab\n current.printedInvoiceName = tenantSettingData.printedInvoiceName;\n current.sendInvoicesToClients = tenantSettingData.sendInvoicesToClients;\n current.invoiceDueDateType = tenantSettingData.invoiceDueDateType;\n current.invoiceDueDates = tenantSettingData.invoiceDueDates;\n current.invoiceDueDate = tenantSettingData.invoiceDueDate;\n current.cashReceiptPurposeForCourses = tenantSettingData.cashReceiptPurposeForCourses;\n current.disableCashReceiptNumbering = tenantSettingData.disableCashReceiptNumbering;\n current.autoPaymentConfirmationPrintForCardPayments = tenantSettingData.autoPaymentConfirmationPrintForCardPayments;\n current.cashReceiptPurposeForActions = tenantSettingData.cashReceiptPurposeForActions;\n current.cashReceiptPurposeForActivitiesReconciliation = tenantSettingData.cashReceiptPurposeForActivitiesReconciliation;\n current.cashReceiptPurposeForActivitiesReccuring = tenantSettingData.cashReceiptPurposeForActivitiesReccuring;\n current.showInvoiceNoInCashReceipt = tenantSettingData.showInvoiceNoInCashReceipt;\n current.createTaxDocuments = tenantSettingData.createTaxDocuments;\n current.enableAmortizationSchedules = tenantSettingData.enableAmortizationSchedules;\n current.putStudentAgeIntoInvoices = tenantSettingData.putStudentAgeIntoInvoices;\n current.enableQrCodeOnInvoices = tenantSettingData.enableQrCodeOnInvoices;\n\n tenantSettingSvc.update(current, function (model) {\n $scope.tenantSetting = angular.copy(model);\n $scope.tenantSettingOrig = angular.copy(model);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n });\n }\n }\n\n $scope.accountingSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.accountingSettingOrig);\n }\n\n $scope.tenantSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.tenantSettingOrig);\n }\n\n $scope.detailIsUnchanged = function (accountingSettingData, tenantSettingData) {\n return $scope.accountingSettingIsUnchanged(accountingSettingData) &&\n $scope.tenantSettingIsUnchanged(tenantSettingData);\n }\n}]);\n","wbApp.controller('clientSettingsCtrl', ['$scope', '$q', '$translate', 'tenantSettingSvc', 'notificationSvc', 'picturesSvc', '$timeout', 'messageBoxSvc',\nfunction ($scope, $q, $translate, tenantSettingSvc, notificationSvc, picturesSvc, $timeout, messageBoxSvc) {\n\n const tabId = 10;\n \n var isActive = false;\n var loaded = false;\n \n $scope.onCheckboxClick = function(index) {\n for(let i = 0; i < $scope.images.length; i++) {\n $scope.images[i].checked = i === index;\n }\n\n $scope.tenantSetting.clientTitlePictureUrl = $scope.images[index].imageUrl;\n }\n \n $scope.newClientDesignThemeData = {};\n \n $scope.onUpdateThemeData = function() {\n let data = transformThemeDataOut($scope.newClientDesignThemeData);\n $scope.tenantSetting.newClientDesignThemeData = JSON.stringify(data);\n }\n \n function resetThemeData() {\n $scope.newClientDesignThemeData.seedColor = \"#561581\";\n // Primary\n $scope.newClientDesignThemeData.primary = \"#561581\";\n $scope.newClientDesignThemeData.onPrimary = \"#FBF8FE\";\n $scope.newClientDesignThemeData.primaryContainer = \"#E8DAFC\";\n $scope.newClientDesignThemeData.onPrimaryContainer = \"#240539\";\n // Secondary\n $scope.newClientDesignThemeData.secondary = \"#F85830\";\n $scope.newClientDesignThemeData.onSecondary = \"#F9E9E8\";\n $scope.newClientDesignThemeData.secondaryContainer = \"#FAAB95\";\n $scope.newClientDesignThemeData.onSecondaryContainer = \"#B73A1C\";\n // Tertiary\n $scope.newClientDesignThemeData.tertiary = \"#33C236\";\n $scope.newClientDesignThemeData.onTertiary = \"#E8F8E8\";\n $scope.newClientDesignThemeData.tertiaryContainer = \"#A3E1A0\";\n $scope.newClientDesignThemeData.onTertiaryContainer = \"#006F00\";\n // Error\n $scope.newClientDesignThemeData.error = \"#D23031\";\n $scope.newClientDesignThemeData.onError = \"#FFEBEE\";\n $scope.newClientDesignThemeData.errorContainer = \"#EE9A9A\";\n $scope.newClientDesignThemeData.onErrorContainer = \"#B61E1D\";\n // Surface\n $scope.newClientDesignThemeData.surface = \"#FFFFFF\";\n $scope.newClientDesignThemeData.onSurface = \"#240539\";\n $scope.newClientDesignThemeData.surfaceTint = \"#FFFFFF\";\n $scope.newClientDesignThemeData.surfaceVariant = \"#FAFAFA\";\n $scope.newClientDesignThemeData.outline = \"#E0E0E0\";\n $scope.newClientDesignThemeData.background = \"#F3F3F5\";\n\n $scope.onUpdateThemeData();\n }\n \n function transformThemeDataOut(themeData) {\n let result = {};\n for (const property in themeData) {\n result[property] = themeData[property].replace(/(#)(\\w\\w\\w\\w\\w\\w)$/, \"$1FF$2\");\n }\n return result;\n }\n\n function transformThemeDataIn(themeData) {\n let result = {};\n for (const property in themeData) {\n result[property] = themeData[property].replace(/(#)(\\w\\w)(\\w\\w\\w\\w\\w\\w)$/, \"$1$3\");\n }\n return result;\n }\n \n function loadData() {\n $scope.isBusy = true;\n $scope.tenantSetting = {};\n $scope.tenantSettingSrc = tenantSettingSvc.getAsync();\n $scope.images = picturesSvc.getDashboardImages();\n $q.all([$scope.tenantSettingSrc.$promise, $scope.images.$promise]).then(function () {\n $scope.tenantSetting = angular.copy($scope.tenantSettingSrc);\n $scope.newClientDesignThemeData = {};\n if ($scope.tenantSettingSrc.newClientDesignThemeData !== \"\") {\n let themeData = JSON.parse($scope.tenantSettingSrc.newClientDesignThemeData);\n $scope.newClientDesignThemeData = transformThemeDataIn(themeData);\n }\n if (!$scope.newClientDesignThemeData.seedColor) {\n resetThemeData();\n }\n\n $scope.tenantSettingOrig = angular.copy($scope.tenantSetting);\n \n $scope.isBusy = false;\n\n for(let i = 0; i < $scope.images.length; i++) {\n $scope.images[i].checked = $scope.images[i].imageUrl === $scope.tenantSetting.clientTitlePictureUrl;\n }\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n if (isActive) {\n loadData();\n }\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === tabId) {\n if (!isActive) {\n isActive = true;\n\n if (!loaded) {\n loadData();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.onCancel = function () {\n loadData();\n }\n\n $scope.onModelSave = function (tenantSettingData) {\n\n if ($scope.isSaving) {\n return;\n }\n\n if (!$scope.detailIsUnchanged(tenantSettingData)) {\n\n $scope.isSaving = true;\n \n let tenantSettingCurrent = tenantSettingSvc.getAsync();\n tenantSettingCurrent.$promise.then(function (current) {\n\n // Set only fields which we do set on this tab\n current.clientTitlePictureUrl = tenantSettingData.clientTitlePictureUrl;\n current.newClientDesignThemeCode = tenantSettingData.newClientDesignThemeCode;\n if (current.newClientDesignThemeCode === 0) {\n current.newClientDesignThemeData = tenantSettingData.newClientDesignThemeData;\n } else {\n current.newClientDesignThemeData = \"\";\n }\n\n tenantSettingSvc.update(current, function (model) {\n $scope.tenantSetting = angular.copy(model);\n $scope.tenantSettingOrig = angular.copy(model);\n\n $scope.isSaving = false;\n }, function (errorResult) {\n $scope.isSaving = false;\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n });\n } \n }\n\n $scope.detailIsUnchanged = function (tenantSettingData) {\n return angular.equals(tenantSettingData, $scope.tenantSettingOrig);\n }\n\n $scope.imageUpload = null;\n $scope.imageUploadError = null;\n \n let handleFileSelect = function (evt) {\n $scope.imageUpload = null;\n $scope.imageUploadError = null;\n let file = evt.currentTarget.files[0];\n if (evt.currentTarget.files[0].size > 250 * 1024) {\n $scope.$apply(function ($scope) {\n $scope.imageUploadError = $translate.instant('TXT_LBL_DASHBOARD_IMAGE_TOO_BIG');\n });\n return;\n }\n let reader = new FileReader();\n reader.onload = function (evt) {\n let img = new Image();\n img.src = evt.target.result;\n img.onload = function() {\n if (img.width !== 1920 || img.height !== 264) {\n $scope.$apply(function ($scope) {\n $scope.imageUploadError = $translate.instant('TXT_LBL_DASHBOARD_IMAGE_INCORRECT_SIZE');\n });\n \n return;\n }\n \n $scope.$apply(function ($scope) {\n $scope.imageUpload = evt.target.result;\n });\n };\n };\n reader.readAsDataURL(file);\n };\n \n $scope.onUploadClick = function () {\n $scope.isImageUploading = true;\n \n picturesSvc.insertDashboard($scope.imageUpload, function() {\n $scope.isImageUploading = false;\n $scope.imageUpload = null;\n $scope.imageUploadError = null;\n \n loadData();\n }, function (err) {\n $scope.isImageUploading = false;\n $scope.imageUploadError = err;\n });\n }\n \n $scope.onDeletePictureBtnClick = function(picture) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_CONFIRM_DELETE',\n message: 'TXT_TEXT_CONFIRM_DELETE_PICURE',\n buttons: [{\n text: 'TXT_BTN_NO'\n }, {\n text: 'TXT_BTN_YES',\n callback: function () { picturesSvc.remove(picture, function() {\n loadData();\n }); }\n }]\n });\n }\n\n $timeout(function () {\n angular.element(document.querySelector('#fileInput')).on('change', handleFileSelect);\n }, 1000);\n}]);\n","wbApp.controller('DataExportHistoryCtrl', ['$scope', '$translate', '$filter', 'dataExportHistorySvc',\nfunction ($scope, $translate, $filter, dataExportHistorySvc) {\n\n $scope.gridSettings = {\r\n grouping: {\r\n autoExpandAll: false\r\n },\r\n columns: [\n { dataField: 'month', caption: $translate.instant('TXT_LBL_MONTH'), dataType: 'string', groupIndex: 1},\n {\r\n dataField: 'createdAt', caption: $translate.instant('TXT_LBL_CREATED_AT'),\n dataType: 'date', format: 'shortDateShortTime',\r\n sortOrder: 'desc',\r\n width: '130px'\r\n },\n { dataField: 'dataExportType', caption: $translate.instant('TXT_LBL_EXPORT_TYPE'), dataType: 'string', width: '130px' },\n { dataField: 'exportedObjectType', caption: $translate.instant('TXT_LBL_OBJECT_TYPE'), dataType: 'string', width: '90px' },\n { dataField: 'exportedObjectID', caption: $translate.instant('TXT_LBL_OBJECT_ID'), dataType: 'number', width: '80px' },\n { dataField: 'errorCodeStr', caption: $translate.instant('TXT_LBL_CODE'), dataType: 'string', width: '80px' },\n { dataField: 'errorText', caption: $translate.instant('TXT_LBL_TEXT'), dataType: 'string' },\n ],\r\n summary: {\r\n groupItems: [{\r\n column: \"dataExportHistoryID\",\r\n summaryType: \"count\",\r\n displayFormat: \"{0}\",\r\n alignByColumn: false\r\n }, {\r\n column: \"createdAt\",\r\n summaryType: \"min\",\r\n displayFormat: \" \",\r\n alignByColumn: true,\r\n showInColumn: 'errorText'\r\n }],\r\n },\r\n sortByGroupSummaryInfo: [\r\n {\r\n summaryItem: 1,\r\n sortOrder: 'desc'\r\n }\r\n ]\r\n }\n\n $scope.$on('refreshData', function (e, data) {\r\n $scope.dataExportHistory = dataExportHistorySvc.getAll(true);\n });\n\n $scope.dataExportHistory = dataExportHistorySvc.getAll();\n}]);\n","wbApp.controller('HtmlContentCtrl', ['$scope', '$q', '$translate', '$timeout', 'contentSvc', 'notificationSvc', 'tenantSettingSvc',\nfunction ($scope, $q, $translate, $timeout, contentSvc, notificationSvc, tenantSettingSvc) {\n\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n \n $scope.htmlContentType = 0;\n $scope.tabIndex = 4;\n\n $scope.init = function(htmlContentType, tabIndex)\n {\n $scope.htmlContentType = htmlContentType;\n $scope.tabIndex = tabIndex;\n }\n\n var isActive = false;\n var loaded = false;\n\n function loadData() {\n $scope.isBusy = true;\n $scope.model = contentSvc.getById($scope.htmlContentType);\n $scope.model.$promise.then(function () {\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.isBusy = false;\n }, function (error) {\n if (!!error && error.status == 404) {\n $scope.model = {\n id: $scope.htmlContentType + '',\n isNew: true,\n htmlData: null,\n };\n $scope.modelOrig = angular.copy($scope.model);\n }\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n if (isActive) {\n loadData();\n }\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === $scope.tabIndex) {\n if (!isActive) {\n isActive = true;\n\n if (!loaded) {\n loadData();\n loaded = true;\n }\n\n $timeout(function () {\n angular.element('#terms-and-conditions-editor').trigger(\"resize\");\n }, 100);\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.onCancel = function () {\n loadData();\n }\n\n $scope.onModelSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (!data.htmlData) {\n if (!data.isNew) {\n contentSvc.remove(data.id).$promise.then(function () {\n data.id = $scope.htmlContentType + '';\n data.isNew = true;\n $scope.model = data;\n $scope.modelOrig = angular.copy($scope.model);\n $scope.isSaving = false;\n }, function (errorResult) {\n $scope.isSaving = false;\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n } else {\n $scope.isSaving = false;\n }\n }\n else {\n\n contentSvc.update(data).$promise.then(function () {\n $scope.model = data;\n $scope.model.isNew = false;\n $scope.modelOrig = angular.copy(data);\n\n $scope.isSaving = false;\n }, function (errorResult) {\n $scope.isSaving = false;\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n }\n}]);\n","wbApp.controller('MainSettingsCtrl', ['$scope', '$q', '$translate', 'mainSettingsSvc', 'tenantSettingSvc', 'notificationSvc', 'tenantInfo',\nfunction ($scope, $q, $translate, mainSettingsSvc, tenantSettingSvc, notificationSvc, tenantInfo) {\n\n var isActive = true;\n var loaded = true;\n\n function loadData() {\n $scope.isBusy = true;\n $scope.tenantInfo = tenantInfo;\n $scope.mainSetting = mainSettingsSvc.getAsync();\n $scope.tenantSetting = {};\n $scope.tenantSettingSrc = tenantSettingSvc.getAsync();\n $q.all([$scope.mainSetting.$promise, $scope.tenantSettingSrc.$promise]).then(function () {\n $scope.mainSettingOrig = angular.copy($scope.mainSetting);\n $scope.tenantSetting = angular.copy($scope.tenantSettingSrc);\n $scope.tenantSettingOrig = angular.copy($scope.tenantSettingSrc);\n\n $scope.isBusy = false;\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n if (isActive) {\n loadData();\n }\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 0) {\n if (!isActive) {\n isActive = true;\n\n if (!loaded) {\n loadData();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.onCancel = function () {\n loadData();\n }\n\n $scope.onModelSave = function (mainSettingData, tenantSettingData) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n var updates = 0;\n\n if (!$scope.mainSettingIsUnchanged(mainSettingData)) {\n updates++;\n\n mainSettingsSvc.update(mainSettingData, function (model) {\n $scope.mainSetting = model;\n $scope.mainSettingOrig = angular.copy($scope.mainSetting);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n\n if (!$scope.tenantSettingIsUnchanged(tenantSettingData)) {\n updates++;\n\n tenantSettingSvc.getAsync().$promise.then(function (currentSetting) {\n\n var current = angular.copy(currentSetting);\n\n // Set only fields which we do set on this tab\n current.registrationOpenPicture = tenantSettingData.registrationOpenPicture;\n current.facebookPageUrl = tenantSettingData.facebookPageUrl;\n current.customerLogos = tenantSettingData.customerLogos;\n current.instagramUrl = tenantSettingData.instagramUrl;\n current.twitterUrl = tenantSettingData.twitterUrl;\n\n tenantSettingSvc.update(current, function (model) {\n $scope.tenantSetting = angular.copy(model);\n $scope.tenantSettingOrig = angular.copy(model);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n });\n }\n }\n\n $scope.mainSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.mainSettingOrig);\n }\n\n $scope.tenantSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.tenantSettingOrig);\n }\n\n $scope.detailIsUnchanged = function (mainSettingData, tenantSettingData) {\n return $scope.mainSettingIsUnchanged(mainSettingData) &&\n $scope.tenantSettingIsUnchanged(tenantSettingData);\n }\n\n loadData();\n}]);\n","wbApp.controller('NotificationSettingsCtrl', ['$scope', '$q', '$translate', 'userSettingSvc', 'tenantSettingSvc', 'notificationSvc',\nfunction ($scope, $q, $translate, userSettingSvc, tenantSettingSvc, notificationSvc) {\n\n var isActive = false;\n var loaded = false;\n\n function loadData() {\n $scope.isBusy = true;\n $scope.userSettingSrc = userSettingSvc.getAsync();\n $scope.tenantSetting = {};\n $scope.tenantSettingSrc = tenantSettingSvc.getAsync();\n $q.all([$scope.userSettingSrc.$promise, $scope.tenantSettingSrc.$promise]).then(function () {\n $scope.userSetting = angular.copy($scope.userSettingSrc);\n $scope.userSettingOrig = angular.copy($scope.userSettingSrc);\n $scope.tenantSetting = angular.copy($scope.tenantSettingSrc);\n $scope.tenantSettingOrig = angular.copy($scope.tenantSettingSrc);\n\n $scope.isBusy = false;\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n if (isActive) {\n loadData();\n }\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 3) {\n if (!isActive) {\n isActive = true;\n\n if (!loaded) {\n loadData();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.onCancel = function () {\n loadData();\n }\n\n $scope.onModelSave = function (userSettingData, tenantSettingData) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n var updates = 0;\n\n if (!$scope.userSettingIsUnchanged(userSettingData)) {\n updates++;\n\n userSettingSvc.saveAsync(userSettingData, function (model) {\n $scope.userSetting = angular.copy(model);\n $scope.userSettingOrig = angular.copy(model);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n }\n\n if (!$scope.tenantSettingIsUnchanged(tenantSettingData)) {\n updates++;\n\n var tenantSettingCurrent = tenantSettingSvc.getAsync();\n tenantSettingCurrent.$promise.then(function (current) {\n\n // Set only fields which we do set on this tab\n current.sendEmailsToClients = tenantSettingData.sendEmailsToClients;\n current.disableInformTeachers = tenantSettingData.disableInformTeachers;\n current.enableSMSSupport = tenantSettingData.enableSMSSupport;\n current.courseRegistrationQuestionCCToTeacher = tenantSettingData.courseRegistrationQuestionCCToTeacher;\n current.disableAllEmails = tenantSettingData.disableAllEmails;\n current.disableAllEmailsExceptUserRegistration = tenantSettingData.disableAllEmailsExceptUserRegistration;\n current.allowTeacherEmailInClientSection = tenantSettingData.allowTeacherEmailInClientSection;\n current.enableUserCreatedNotification = tenantSettingData.enableUserCreatedNotification;\n current.enableCoursePaymentEvidenceNotification = tenantSettingData.enableCoursePaymentEvidenceNotification;\n current.enableAttendanceExcusedCancelledNotification = tenantSettingData.enableAttendanceExcusedCancelledNotification;\n current.enableCourseScheduleDateChangedNotification = tenantSettingData.enableCourseScheduleDateChangedNotification;\n current.enableStudentActionRegistrationDeleteNotification = tenantSettingData.enableStudentActionRegistrationDeleteNotification;\n current.enableStudentCourseRegistrationPriceChangeNotification = tenantSettingData.enableStudentCourseRegistrationPriceChangeNotification;\n current.enableAttendanceActionExcusedCancelledNotification = tenantSettingData.enableAttendanceActionExcusedCancelledNotification;\n current.enableStudentAddedToWaitQueueNotification = tenantSettingData.enableStudentAddedToWaitQueueNotification;\n current.enableStudentRemovedFromActionWaitQueueNotification = tenantSettingData.enableStudentRemovedFromActionWaitQueueNotification;\n current.enableAttendancePreviewInterestNotification = tenantSettingData.enableAttendancePreviewInterestNotification;\n current.enableUserPasswordChangedNotification = tenantSettingData.enableUserPasswordChangedNotification;\n current.enableAttendanceExcusedNotification = tenantSettingData.enableAttendanceExcusedNotification;\n current.enableAttendanceNewOneOffNotification = tenantSettingData.enableAttendanceNewOneOffNotification;\n current.enableCourseScheduleTeacherChangedNotification = tenantSettingData.enableCourseScheduleTeacherChangedNotification;\n current.enableSendRequestForPaymentNotification = tenantSettingData.enableSendRequestForPaymentNotification;\n current.enableAttendanceActionExcusedNotification = tenantSettingData.enableAttendanceActionExcusedNotification;\n current.enableStudentCourseInterestRegistrationNotification = tenantSettingData.enableStudentCourseInterestRegistrationNotification;\n current.enableStudentRemovedFromWaitQueueNotification = tenantSettingData.enableStudentRemovedFromWaitQueueNotification;\n current.enableNotExcusedNotification = tenantSettingData.enableNotExcusedNotification;\n current.enableStudentActionRegistrationPriceChange = tenantSettingData.enableStudentActionRegistrationPriceChange;\n current.enableStudentCourseRegistrationNotification = tenantSettingData.enableStudentCourseRegistrationNotification;\n current.enableAttendanceExcusedNoCompensationNotification = tenantSettingData.enableAttendanceExcusedNoCompensationNotification;\n current.enableAttendanceNewAmendNotification = tenantSettingData.enableAttendanceNewAmendNotification;\n current.enableStudentActionRegistrationNotification = tenantSettingData.enableStudentActionRegistrationNotification;\n current.enableCourseScheduleNoteChangedNotification = tenantSettingData.enableCourseScheduleNoteChangedNotification;\n current.enableAttendanceActionExcusedNoCompensationNotification = tenantSettingData.enableAttendanceActionExcusedNoCompensationNotification;\n current.enableAttendanceNoteChangedNotification = tenantSettingData.enableAttendanceNoteChangedNotification;\n current.enableStudentAddedToActionWaitQueueNotification = tenantSettingData.enableStudentAddedToActionWaitQueueNotification;\n current.enableAttendancePreviewNotification = tenantSettingData.enableAttendancePreviewNotification;\n current.coursePaymentEvidenceCCTeacher = tenantSettingData.coursePaymentEvidenceCCTeacher;\n\n\n current.enableActivityAttendanceChangeNotification = tenantSettingData.enableActivityAttendanceChangeNotification;\n current.enableActivityReconciliationCreatedNotification = tenantSettingData.enableActivityReconciliationCreatedNotification;\n current.enableActivityReconciliationPaymentEvidenceNotification = tenantSettingData.enableActivityReconciliationPaymentEvidenceNotification;\n current.enableActivityAttendanceFoodTakenNotification = tenantSettingData.enableActivityAttendanceFoodTakenNotification;\n current.enableActivityFoodOrderNotification = tenantSettingData.enableActivityFoodOrderNotification;\n current.enableRegisterActivityInterestNotification = tenantSettingData.enableRegisterActivityInterestNotification;\n current.enableSurveyRequestNotification = tenantSettingData.enableSurveyRequestNotification;\n current.enableCourseRegistrationQuestionNotification = tenantSettingData.enableCourseRegistrationQuestionNotification;\n current.enableOnlineLessonReminderNotification = tenantSettingData.enableOnlineLessonReminderNotification;\n current.enableOnlineLessonStartedNotification = tenantSettingData.enableOnlineLessonStartedNotification;\n current.enableScheduledInvoiceIssuedNotification = tenantSettingData.enableScheduledInvoiceIssuedNotification;\n current.enableActivityScheduleNoteChangeNotification = tenantSettingData.enableActivityScheduleNoteChangeNotification; \n current.enableTaxDocumentCreatedNotification = tenantSettingData.enableTaxDocumentCreatedNotification;\n current.enableNewConsentAssignedNotification = tenantSettingData.enableNewConsentAssignedNotification;\n current.enableAmortizationSchedulePaymentNotification = tenantSettingData.enableAmortizationSchedulePaymentNotification;\n\n current.enableFormResponseCreatedNotification = tenantSettingData.enableFormResponseCreatedNotification;\n current.enableFullCourseInterestNotification = tenantSettingData.enableFullCourseInterestNotification;\n current.enableStudentActionRegistrationAutoDeleteNotification = tenantSettingData.enableStudentActionRegistrationAutoDeleteNotification;\n current.EnableOnlineMeetingRecordingCompletedNotification = tenantSettingData.enableOnlineMeetingRecordingCompletedNotification;\n\n current.enableReservationPaymentEvidenceNotification = tenantSettingData.enableReservationPaymentEvidenceNotification;\n\n tenantSettingSvc.update(current, function (model) {\n $scope.tenantSetting = angular.copy(model);\n $scope.tenantSettingOrig = angular.copy(model);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n });\n }\n }\n\n $scope.userSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.userSettingOrig);\n }\n\n $scope.tenantSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.tenantSettingOrig);\n }\n\n $scope.detailIsUnchanged = function (userSettingData, tenantSettingData) {\n return $scope.userSettingIsUnchanged(userSettingData) &&\n $scope.tenantSettingIsUnchanged(tenantSettingData);\n }\n}]);\n","wbApp.controller('SettingsSettingsCtrl', ['$scope', '$q', '$translate', 'tenantSettingSvc', 'dataExportSettingSvc', 'notificationSvc', 'tenantInfo',\r\nfunction ($scope, $q, $translate, tenantSettingSvc, dataExportSettingSvc, notificationSvc, tenantInfo) {\r\n\r\n var isActive = false;\r\n var loaded = false;\r\n\r\n $scope.isFranchiseCentral = tenantInfo.isFranchiseCentral;\r\n $scope.isFranchiseCentralAndSupportSubjectLicenses = tenantInfo.isFranchiseCentral && tenantInfo.franchiseCentralSettings.supportSubjectLicenses;\r\n\r\n function loadData() {\r\n $scope.isBusy = true;\r\n $scope.tenantSetting = {};\r\n $scope.tenantSettingSrc = tenantSettingSvc.getAsync();\r\n $scope.dataExportSetting = dataExportSettingSvc.getAsync();\r\n $q.all([$scope.dataExportSetting.$promise, $scope.tenantSettingSrc.$promise]).then(function () {\r\n $scope.tenantSetting = angular.copy($scope.tenantSettingSrc);\r\n $scope.tenantSettingOrig = angular.copy($scope.tenantSettingSrc);\r\n $scope.dataExportSettingOrig = angular.copy($scope.dataExportSetting);\r\n\r\n $scope.isBusy = false;\r\n });\r\n }\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n if (isActive) {\r\n loadData();\r\n }\r\n });\r\n\r\n $scope.$on('activeTabChanged', function (e, data) {\r\n if (data.activeTab === 1) {\r\n if (!isActive) {\r\n isActive = true;\r\n\r\n if (!loaded) {\r\n loadData();\r\n loaded = true;\r\n }\r\n }\r\n } else {\r\n isActive = false;\r\n }\r\n });\r\n\r\n $scope.onCancel = function () {\r\n loadData();\r\n }\r\n\r\n $scope.onModelSave = function (dataExportSettingData, data) {\r\n\r\n if ($scope.isSaving) {\r\n return;\r\n }\r\n\r\n $scope.isSaving = true;\r\n\r\n var updates = 0;\r\n\r\n if (!$scope.dataExportSettingIsUnchanged(dataExportSettingData)) {\r\n updates++;\r\n\r\n dataExportSettingSvc.update(dataExportSettingData, function (model) {\r\n $scope.dataExportSetting = model;\r\n $scope.dataExportSettingOrig = angular.copy($scope.dataExportSetting);\r\n\r\n updates--;\r\n if (!updates) {\r\n $scope.isSaving = false;\r\n }\r\n }, function (errorResult) {\r\n updates--;\r\n if (!updates) {\r\n $scope.isSaving = false;\r\n }\r\n\r\n notificationSvc.notifyError(\r\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\r\n notificationSvc.translateError(errorResult));\r\n });\r\n }\r\n\r\n if (!$scope.tenantSettingIsUnchanged(data)) {\r\n updates++;\r\n\r\n tenantSettingSvc.getAsync().$promise.then(function (currentSetting) {\r\n\r\n var current = angular.copy(currentSetting);\r\n\r\n // Apply only data we are setting in on this tab\r\n current.enableUserRegistration = data.enableUserRegistration;\r\n current.defaultNationality = data.defaultNationality;\r\n current.quickUserRegistrationMode = data.quickUserRegistrationMode;\r\n current.courseInterestsSupport = data.courseInterestsSupport;\r\n current.allowClientActionRegistration = data.allowClientActionRegistration;\r\n current.coursePreviewOnlyRegistration = data.coursePreviewOnlyRegistration;\r\n current.sortNamesBySurname = data.sortNamesBySurname;\r\n current.showArrearInsteadOfPayments = data.showArrearInsteadOfPayments;\r\n current.showArrearInMyCourses = data.showArrearInMyCourses;\r\n current.enableZoomIntegration = data.enableZoomIntegration;\r\n current.readOnlyClientCourseRegistration = data.readOnlyClientCourseRegistration;\r\n current.allowClientCourseRegistration = data.allowClientCourseRegistration;\r\n current.allowShareOnFBForCourses = data.allowShareOnFBForCourses;\r\n current.allowShareOnFBForActions = data.allowShareOnFBForActions;\r\n current.enableSMSInWaitQueueAutoBooking = data.enableSMSInWaitQueueAutoBooking;\r\n current.showQuickNavOnHomePage = data.showQuickNavOnHomePage;\r\n current.disableExcuseInMyCourses = data.disableExcuseInMyCourses;\r\n current.courseRegistrationAgreement = data.courseRegistrationAgreement;\r\n current.noOfDaysToShowAction = data.noOfDaysToShowAction;\r\n current.showHealthInCourseRegistration = data.showHealthInCourseRegistration;\r\n current.showAttendantHealthInCourseRegistration = data.showAttendantHealthInCourseRegistration;\r\n current.sendApplicationForm = data.sendApplicationForm;\r\n current.showClassroomFilterInCourses = data.showClassroomFilterInCourses;\r\n current.showLessonsRemaining = data.showLessonsRemaining; \r\n current.showNearestLessonInCourses = data.showNearestLessonInCourses;\r\n current.showPriceInCourseRegistration = data.showPriceInCourseRegistration;\r\n current.useTotalPriceForCourses = data.useTotalPriceForCourses;\r\n current.noteDescriptionInCourseRegistration = data.noteDescriptionInCourseRegistration;\r\n current.showCourseTypeFilterInCourses = data.showCourseTypeFilterInCourses;\r\n current.noOfAllowedOneOffs = data.noOfAllowedOneOffs;\r\n current.showNoteInCourseRegistration = data.showNoteInCourseRegistration;\r\n current.coursesSortByDate = data.coursesSortByDate;\r\n current.scheduleVisibleTimeStart = data.scheduleVisibleTimeStart;\r\n current.clientScheduleWeekView = data.clientScheduleWeekView;\r\n current.scheduleEnableAutoHourRange = data.scheduleEnableAutoHourRange;\r\n current.disableClientCalendar = data.disableClientCalendar;\r\n current.scheduleVisibleTimeEnd = data.scheduleVisibleTimeEnd;\r\n current.scheduleDayViewResourcesPerPage = data.scheduleDayViewResourcesPerPage;\r\n current.scheduleTimeScale = data.scheduleTimeScale;\r\n current.showAllCoursesInClientSchedule = data.showAllCoursesInClientSchedule;\r\n current.courseExcuseThresholdType = data.courseExcuseThresholdType;\r\n current.courseExcuseThreshold = data.courseExcuseThreshold;\r\n current.showContatInClientAttendance = data.showContatInClientAttendance;\r\n current.clientAttendanceShowStudentNote = data.clientAttendanceShowStudentNote;\r\n current.showArrearInClientAttendance = data.showArrearInClientAttendance;\r\n current.showNoteInClientAttendance = data.showNoteInClientAttendance;\r\n current.actionExcuseThresholdType = data.actionExcuseThresholdType;\r\n current.actionExcuseThreshold = data.actionExcuseThreshold;\r\n current.showAgeInClientAttenandace = data.showAgeInClientAttenandace;\r\n current.noOfHoursToUpdateAttendance = data.noOfHoursToUpdateAttendance;\r\n current.allowMultiAmends = data.allowMultiAmends;\r\n current.activityExcuseWithoutFoodThresholdType = data.activityExcuseWithoutFoodThresholdType;\r\n current.activityExcuseWithoutFoodThreshold = data.activityExcuseWithoutFoodThreshold;\r\n current.calcSnacksOnlyForPresent = data.calcSnacksOnlyForPresent;\r\n current.activityExcuseThresholdType = data.activityExcuseThresholdType;\r\n current.activityExcuseThreshold = data.activityExcuseThreshold;\r\n current.enableKindergartenSupport = data.enableKindergartenSupport;\r\n current.allowDiscounts = data.allowDiscounts;\r\n current.enableRfidCardSupport = data.enableRfidCardSupport;\r\n current.enableZoomIntegration = data.enableZoomIntegration;\r\n current.enableDataExport = data.enableDataExport;\r\n current.enableRfidAccessGroups = data.enableRfidAccessGroups;\r\n current.rfidBreakTresholdIntervalInMinutes = data.rfidBreakTresholdIntervalInMinutes;\r\n current.rfidValidateESFByLaw = data.rfidValidateESFByLaw;\r\n current.sendInfoCardWithCourseRegistration = data.sendInfoCardWithCourseRegistration;\r\n current.sendApplicationFormAction = data.sendApplicationFormAction;\r\n current.showExcusesAndAmendsInMyActivities = data.showExcusesAndAmendsInMyActivities;\r\n current.facebookPixelID = data.facebookPixelID;\r\n current.requireTeacherFranchiseLicenses = data.requireTeacherFranchiseLicenses;\r\n current.showAgeFilterInCourses = data.showAgeFilterInCourses;\r\n current.showScheduleInCourses = data.showScheduleInCourses;\r\n current.showAgeRangesInCourses = data.showAgeRangesInCourses;\r\n current.enablePaymentGateways = data.enablePaymentGateways;\r\n current.enableDuePaymentsInClient = data.enableDuePaymentsInClient;\r\n current.showOverpaymentsInClientDuePayments = data.showOverpaymentsInClientDuePayments;\r\n current.showDateInClientCourses = data.showDateInClientCourses;\r\n current.showAskQuestionInCourseRegistration = data.showAskQuestionInCourseRegistration;\r\n current.maxNumberOfActivityWaitQueueReservations = data.maxNumberOfActivityWaitQueueReservations;\r\n current.maxNumberOfCourseWaitQueueReservations = data.maxNumberOfCourseWaitQueueReservations;\r\n\r\n current.allowReferenceSource = data.allowReferenceSource;\r\n current.mandatoryStudentBirthday = data.mandatoryStudentBirthday;\r\n current.mandatoryStudentNationality = data.mandatoryStudentNationality;\r\n current.mandatoryUserAddress = data.mandatoryUserAddress;\r\n current.mandatoryUserNationality = data.mandatoryUserNationality;\r\n current.mandatoryStudentName = data.mandatoryStudentName;\r\n current.mandatoryEmail2 = data.mandatoryEmail2;\r\n current.mandatoryPhone2 = data.mandatoryPhone2;\r\n current.mandatoryStudentGender = data.mandatoryStudentGender;\r\n current.maxNoOfPreviewStudentsOnOneLesson = data.maxNoOfPreviewStudentsOnOneLesson;\r\n current.enableReservationSupport = data.enableReservationSupport;\r\n\r\n current.showCourseWaitQueueIndexInClient = data.showCourseWaitQueueIndexInClient;\r\n current.reservationExcuseThresholdType = data.reservationExcuseThresholdType;\r\n current.reservationExcuseThreshold = data.reservationExcuseThreshold;\r\n current.reservationTeacherHourSingleRate = data.reservationTeacherHourSingleRate;\r\n current.reservationTeacherHourGroupOneRate = data.reservationTeacherHourGroupOneRate;\r\n current.reservationTeacherGroupOneSizeFrom = data.reservationTeacherGroupOneSizeFrom;\r\n current.reservationTeacherGroupOneSizeTo = data.reservationTeacherGroupOneSizeTo;\r\n current.reservationTeacherHourGroupTwoRate = data.reservationTeacherHourGroupTwoRate;\r\n current.reservationTeacherGroupTwoSizeFrom = data.reservationTeacherGroupTwoSizeFrom;\r\n current.reservationTeacherGroupTwoSizeTo = data.reservationTeacherGroupTwoSizeTo;\r\n current.reservationCreateThresholdType = data.reservationCreateThresholdType;\r\n current.reservationCreateThreshold = data.reservationCreateThreshold;\r\n current.enableFullCourseInterest = data.enableFullCourseInterest;\r\n\r\n current.smallNurserySupport = data.smallNurserySupport;\r\n current.childrenGroupSupport = data.childrenGroupSupport;\r\n\r\n current.enableWalletSupport = data.enableWalletSupport;\r\n current.walletAccountingBook = data.walletAccountingBook;\r\n current.walletDepositExpirationInDays = data.walletDepositExpirationInDays;\r\n\r\n current.mandatoryStudentPersonalIDNumber = data.mandatoryStudentPersonalIDNumber;\r\n current.sendPaymentConfirmationForm = data.sendPaymentConfirmationForm;\r\n current.enableRentSupport = data.enableRentSupport;\r\n current.requireTermsAndConditionsAgreement = data.requireTermsAndConditionsAgreement;\r\n current.requireTradeTermsAgreement = data.requireTradeTermsAgreement;\r\n current.googleAnalyticsId = data.googleAnalyticsId;\r\n current.allowClientActionUnRegistrationInsteadOfExcuse = data.allowClientActionUnRegistrationInsteadOfExcuse;\r\n \r\n current.mandatoryStudentHealthInsurance = data.mandatoryStudentHealthInsurance;\r\n current.mandatoryStudentAddress = data.mandatoryStudentAddress;\r\n current.mandatoryStudentAllergies = data.mandatoryStudentAllergies;\r\n current.mandatoryStudentPlaceOfBirth = data.mandatoryStudentPlaceOfBirth;\r\n \r\n current.mandatoryUserIdentityCardNumber = data.mandatoryUserIdentityCardNumber;\r\n current.mandatoryUserPersonalIDNumber = data.mandatoryUserPersonalIDNumber;\r\n current.mandatoryUserNationality2 = data.mandatoryUserNationality2;\r\n current.mandatoryUserName2 = data.mandatoryUserName2;\r\n current.mandatoryUserSurname2 = data.mandatoryUserSurname2;\r\n current.mandatoryUserMiddleName2 = data.mandatoryUserMiddleName2;\r\n current.mandatoryUserAddress2 = data.mandatoryUserAddress2;\r\n current.mandatoryUserIdentityCardNumber2 = data.mandatoryUserIdentityCardNumber2;\r\n current.mandatoryUserPersonalIDNumber2 = data.mandatoryUserPersonalIDNumber2;\r\n current.mandatoryUserBirthday = data.mandatoryUserBirthday;\r\n current.mandatoryUserBirthday2 = data.mandatoryUserBirthday2;\r\n current.rfidAttendanceEUSupport = data.rfidAttendanceEUSupport;\r\n current.infoCardBackUseLogo = data.infoCardBackUseLogo;\r\n current.mandatoryStudentNotes = data.mandatoryStudentNotes;\r\n current.showNoteInEventRegistration = data.showNoteInEventRegistration;\r\n current.enableClientUserSchedules = data.enableClientUserSchedules;\r\n current.enableNewClientDesign = data.enableNewClientDesign;\r\n current.rfidLogoType = data.rfidLogoType;\r\n current.showCapacityInClientUserSchedules = data.showCapacityInClientUserSchedules;\r\n \r\n current.showEmailInClientAttendance = data.showEmailInClientAttendance;\r\n current.enableCashPayments = data.enableCashPayments;\r\n current.showFreePlacesInCourseDetail = data.showFreePlacesInCourseDetail;\r\n current.showRemainingLessonsInCourseDetail = data.showRemainingLessonsInCourseDetail;\r\n current.noteDescriptionInReservations = data.noteDescriptionInReservations;\r\n\r\n tenantSettingSvc.update(current, function (model) {\r\n $scope.tenantSetting = angular.copy(model);\r\n $scope.tenantSettingOrig = angular.copy(model);\r\n\r\n updates--;\r\n if (!updates) {\r\n $scope.isSaving = false;\r\n }\r\n }, function (errorResult) {\r\n updates--;\r\n if (!updates) {\r\n $scope.isSaving = false;\r\n }\r\n\r\n notificationSvc.notifyError(\r\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\r\n notificationSvc.translateError(errorResult));\r\n });\r\n });\r\n }\r\n }\r\n\r\n $scope.tenantSettingIsUnchanged = function (data) {\r\n return angular.equals(data, $scope.tenantSettingOrig);\r\n }\r\n\r\n $scope.dataExportSettingIsUnchanged = function (data) {\r\n return angular.equals(data, $scope.dataExportSettingOrig);\r\n }\r\n\r\n $scope.detailIsUnchanged = function (dataExportSetting, tenantSettingData) {\r\n return $scope.dataExportSettingIsUnchanged(dataExportSetting) &&\r\n $scope.tenantSettingIsUnchanged(tenantSettingData);\r\n }\r\n\r\n $scope.onTriggerPortalUpdate = function () {\r\n tenantSettingSvc.triggerPortalUpdate();\r\n }\r\n}]);\r\n","wbApp.controller('SettingsCtrl', ['$scope', 'securitySvc', 'tenantInfo', 'tenantSettingSvc',\r\nfunction ($scope, securitySvc, tenantInfo, tenantSettingSvc) {\r\n\r\n $scope.tabs = [\r\n {\r\n title: 'TXT_MAIN',\r\n template: \"system/settings/settings-main-tab.html\"\r\n }];\r\n\r\n if (securitySvc.isInRole('MainSettings')) {\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_SETTING',\r\n template: \"system/settings/settings-settings-tab.html\"\r\n });\r\n\r\n if (!tenantInfo.isFranchiseCentral) {\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_ACCOUNTING',\r\n template: \"system/settings/settings-accounting-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_NOTIFICATION',\r\n template: \"system/settings/settings-notification-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_TERMS_AND_CONDITIONS',\r\n template: \"system/settings/settings-terms-and-conditions-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_INSTRUCTIONS',\r\n template: \"system/settings/settings-instructions-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_TRADE_TERMS',\r\n template: \"system/settings/settings-trade-terms-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_PROTECTION_OF_PERSONAL_DATA',\r\n template: \"system/settings/settings-personal-data-protection-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_HTML_CUSTOM_CONTENT',\r\n template: \"system/settings/settings-html-custom-content-tab.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_TEXTS',\r\n template: \"system/settings/settings-texts-tab.html\"\r\n });\r\n }\r\n }\r\n\r\n tenantSettingSvc.getAsync().$promise.then(function(ts) {\r\n if (ts.enableNewClientDesign && !tenantInfo.isFranchiseCentral) {\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_CLIENT_SETTINGS',\r\n template: \"system/settings/settings-client-settings-tab.html\"\r\n });\r\n }\r\n });\r\n\r\n $scope.tabs.activeTab = 0;\r\n\r\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\r\n });\r\n\r\n}]);\r\n","wbApp.controller('SmsHistoryCtrl', ['$scope', '$translate', '$filter', 'smsHistorySvc',\nfunction ($scope, $translate, $filter, smsHistorySvc) {\n\n $scope.gridSettings = {\r\n grouping: {\r\n autoExpandAll: false\r\n },\r\n columns: [\n { dataField: 'month', caption: $translate.instant('TXT_LBL_MONTH'), dataType: 'string', groupIndex: 1},\n {\r\n dataField: 'createdAt', caption: $translate.instant('TXT_LBL_CREATED_AT'),\n dataType: 'date', format: 'shortDateShortTime',\r\n sortOrder: 'desc',\r\n width: '130px'\r\n }, {\r\n dataField: 'recipient',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.recipient);\r\n },\n width: '120px'\r\n },\n { dataField: 'noOfSms', caption: $translate.instant('TXT_LBL_NO_OF_SMS'), dataType: 'number', width: '80px' },\n { dataField: 'text', caption: $translate.instant('TXT_LBL_TEXT'), dataType: 'string' },\n { dataField: 'errorText', caption: $translate.instant('TXT_LBL_CODE'), dataType: 'string', width: '130px' },\n ],\r\n summary: {\r\n groupItems: [{\r\n column: \"noOfSms\",\r\n summaryType: \"sum\",\r\n displayFormat: \"{0}\",\r\n alignByColumn: true\r\n }, {\r\n column: \"createdAt\",\r\n summaryType: \"min\",\r\n displayFormat: \" \",\r\n alignByColumn: true,\r\n showInColumn: 'text'\r\n }],\r\n },\r\n sortByGroupSummaryInfo: [\r\n {\r\n summaryItem: 1,\r\n sortOrder: 'desc'\r\n }\r\n ]\r\n }\n\n $scope.$on('refreshData', function (e, data) {\r\n $scope.smsHistory = smsHistorySvc.getAll(true);\n });\n\n $scope.smsHistory = smsHistorySvc.getAll();\n}]);\n","wbApp.controller('TextsSettingsCtrl', ['$scope', '$q', '$translate', 'tenantSettingSvc', 'notificationSvc','tenantInfo',\nfunction ($scope, $q, $translate, tenantSettingSvc, notificationSvc, tenantInfo) {\n\n var isActive = false;\n var loaded = false;\n\n $scope.isFranchiseCentral = tenantInfo.isFranchiseCentral;\n\n function loadData() {\n $scope.isBusy = true;\n $scope.tenantSetting = {};\n $scope.tenantSettingSrc = tenantSettingSvc.getAsync();\n $q.all([$scope.tenantSettingSrc.$promise]).then(function () {\n $scope.tenantSetting = angular.copy($scope.tenantSettingSrc);\n $scope.tenantSettingOrig = angular.copy($scope.tenantSettingSrc);\n\n $scope.isBusy = false;\n });\n }\n\n $scope.$on('refreshData', function (e, data) {\n if (isActive) {\n loadData();\n }\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 9) {\n if (!isActive) {\n isActive = true;\n\n if (!loaded) {\n loadData();\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.onCancel = function () {\n loadData();\n }\n\n $scope.onModelSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n var updates = 0;\n\n if (!$scope.tenantSettingIsUnchanged(data)) {\n updates++;\n\n tenantSettingSvc.getAsync().$promise.then(function (currentSetting) {\n\n var current = angular.copy(currentSetting);\n\n // Apply only data we are setting in on this tab\n current.coursesMainPageButton = data.coursesMainPageButton;\n current.eventMainPageButton = data.eventMainPageButton;\n current.compensationsMainPageButton = data.compensationsMainPageButton;\n current.kidergartenMainPageButton = data.kidergartenMainPageButton;\n current.reservationsMainPageButton = data.reservationsMainPageButton;\n current.formsMainPageButton = data.formsMainPageButton;\n current.rentsMainPageButton = data.rentsMainPageButton;\n current.attendanceMainPageButton = data.attendanceMainPageButton;\n\n current.coursesMenuName = data.coursesMenuName;\n current.eventsMenuName = data.eventsMenuName;\n current.compensationsMenuName = data.compensationsMenuName;\n current.kidergartenMenuName = data.kidergartenMenuName;\n current.customContentTypeText = data.customContentTypeText;\n current.myKidergartenMenuName = data.myKidergartenMenuName;\n current.attendanceMenuName = data.attendanceMenuName;\n\n tenantSettingSvc.update(current, function (model) {\n $scope.tenantSetting = angular.copy(model);\n $scope.tenantSettingOrig = angular.copy(model);\n\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n }, function (errorResult) {\n updates--;\n if (!updates) {\n $scope.isSaving = false;\n }\n\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_TITLE_ENTITY_SAVE_ERROR'),\n notificationSvc.translateError(errorResult));\n });\n });\n }\n }\n\n $scope.tenantSettingIsUnchanged = function (data) {\n return angular.equals(data, $scope.tenantSettingOrig);\n }\n\n $scope.detailIsUnchanged = function (tenantSettingData) {\n return $scope.tenantSettingIsUnchanged(tenantSettingData);\n }\n\n $scope.onTriggerPortalUpdate = function () {\n tenantSettingSvc.triggerPortalUpdate();\n }\n}]);\n","wbApp.directive('wbClientThemeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n\n data: [\n { id: 0, text: 'TXT_VAL_THEME_CUSTOM' },\n { id: 1, text: 'TXT_VAL_THEME_DARK_BLUE' },\n { id: 2, text: 'TXT_VAL_THEME_TEAL' },\n { id: 3, text: 'TXT_VAL_THEME_BROWN' },\n { id: 4, text: 'TXT_VAL_THEME_LIGHT_BLUE' },\n { id: 5, text: 'TXT_VAL_THEME_PINK' },\n { id: 6, text: 'TXT_VAL_THEME_GREEN' },\n { id: 7, text: 'TXT_VAL_THEME_YELLOW' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbDueDateTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n placeholder: $translate.instant('TXT_LBL_DEFAULT_FROM_CENTRAL_SETTING'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: !attrs.required,\n minimumResultsForSearch: -1,\n data: [\n { id: 0, text: 'TXT_VAL_NO_OF_DAYS_AFTER_ISSUE_DATE' },\n { id: 1, text: 'TXT_VAL_ON_SPECIFIC_DATE' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (String.prototype.isNullOrWhitespace(viewValue)) {\n return null;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!typeof value === 'undefined' || value === null) {\n return value;\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n }, 1);\n }\n }\n }]);","'use strict';\n\nwbApp.directive('wbLanguageAliasCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, controller) {\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n data: [\n { id: 5, text: 'TXT_LANG_CS' },\n { id: 27, text: 'TXT_LANG_SK' },\n { id: 9, text: 'TXT_LANG_EN' },\n { id: 7, text: 'TXT_LANG_DE' }\n ]\n });\n\n elm.on('change', function (event) {\n scope.$apply(function () {\n controller.$setViewValue(event.val);\n });\n });\n\n scope.$watch(attrs.ngModel, function (current, old) {\n $(elm).select2('val', current || 5);\n }, true);\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n if (attrs.ngEnable) {\n scope.$watch(attrs.ngEnable, function (newVal) {\n elm.select2('enable', !!newVal);\n });\n }\n }, 1);\n }\n }\n }]);\n","wbApp.directive('wbMandatoryTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n\n data: [\n { id: 0, text: 'TXT_VAL_NOT_MANDATORY_BUT_VISIBLE' },\n { id: 1, text: 'TXT_VAL_MANDATORY' },\n { id: 2, text: 'TXT_VAL_NOT_VISIBLE' },\n { id: 3, text: 'TXT_VAL_NOT_VISIBLE_IN_ADMIN' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbNotificationTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n\n data: [\n { id: 0, text: 'TXT_VAL_ASK_FOR_CONFIRMATION' },\n { id: 1, text: 'TXT_VAL_NOT_SEND_NOTIFICATION' },\n { id: 2, text: 'TXT_VAL_SEND_NOTIFICATION' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (viewValue == 1) {\n return \"true\";\n } else if (viewValue == 2) {\n return \"false\";\n } else {\n return null;\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (value === \"true\") {\n return \"1\";\n } else if (value === \"false\") {\n return \"2\";\n } else {\n return \"0\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbRfidLogoTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n\n data: [\n { id: 1, text: 'MPSV' },\n { id: 2, text: 'OPZ+' },\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);","wbApp.directive('wbStorageImageCombo', ['$timeout', '$translate', 'picturesSvc',\n function ($timeout, $translate, picturesSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n return \" \";\n }\n\n function formatSelection(model) {\n return \" \";\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n replace: true,\n link: function (scope, elm, attrs, ctrl) {\n\n var models = picturesSvc.getAllAsync(false, true);\n\n $timeout(function () {\n $(elm).select2({\n //placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_COURSE_TYPE_IMAGE'),\n containerCssClass: 'wb-storage-image-combo',\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n id: function (model) {\n if (attrs.useFullUrl) {\n return model.imageUrl;\n }\n return model.imageUri;\n },\n data: models\n });\n\n ctrl.$render();\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n }\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]); ","wbApp.factory('accountingSettingsSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n var AccountingSettings = $resource('/Api/AccountingSettings/:id', {}, {\n 'get': { method: 'GET', isArray: false, url: '/Api/AccountingSettings/Get' },\n 'update': { method: 'POST', url: '/Api/AccountingSettings/Update' },\n });\n\n function getAsync() {\n return repositorySvc.customGet('get', AccountingSettings, {});\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n AccountingSettings, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n return {\n getAsync: getAsync,\n update: update\n }\n }]);","wbApp.factory('contentSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n var Content = $resource('/restapi/html-content', {}, {\n 'get': { method: 'GET', isArray: false, url: '/restapi/html-content/:id' },\n 'update': { method: 'PUT', url: '/restapi/html-content/:id' },\n 'delete': { method: 'DELETE', url: '/restapi/html-content/:id' },\n });\n\n function getById(id) {\n return Content['get']({ id: id });\n }\n\n function update(model) {\n return repositorySvc.customPutWithParams(\n 'update',\n Content,\n { id: model.id },\n model);\n }\n\n function remove(id) {\n return repositorySvc.customDelete(\n 'delete',\n Content,\n { id: id });\n }\n\n return {\n getById: getById,\n update: update,\n remove: remove\n }\n }]);","'use strict';\n\nwbApp.factory('dataExportHistorySvc', ['$resource', '$translate', '$q', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, $q, notificationSvc, repositorySvc) {\n\n var DataExportHistory = $resource('/Api/DataExportHistory', {}, {\n 'query': { method: 'GET', isArray: true },\n 'getAll': { method: 'GET', isArray: true, url: '/Api/DataExportHistory/GetAll' },\n });\n\n var dataExportHistory = null;\n\n function getAll(refresh) {\n if (!dataExportHistory || refresh) {\n dataExportHistory = repositorySvc.customGet('getAll', DataExportHistory);\n }\n return dataExportHistory;\n }\n\n return {\n getAll: getAll\n }\n }]);","wbApp.factory('dataExportSettingSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n var DataExportSetting = $resource('/Api/DataExportSetting/:id', {}, {\n 'get': { method: 'GET', isArray: false, url: '/Api/DataExportSetting/Get' },\n 'update': { method: 'POST', url: '/Api/DataExportSetting/Update' },\n });\n\n function getAsync() {\n return repositorySvc.customGet('get', DataExportSetting, {});\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n DataExportSetting, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n return {\n getAsync: getAsync,\n update: update\n }\n }]);","wbApp.factory('mainSettingsSvc', ['$resource', 'repositorySvc',\n function ($resource, repositorySvc) {\n var MainSetting = $resource('/Api/MainSettings/:id', {}, {\n 'get': { method: 'GET', isArray: false, url: '/Api/MainSettings/Get' },\n 'update': { method: 'POST', url: '/Api/MainSettings/Update' },\n });\n\n function getAsync() {\n return repositorySvc.customGet('get', MainSetting, {});\n }\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n MainSetting, // $resource\n null, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n return {\n getAsync: getAsync,\n update: update\n }\n }]);","'use strict';\n\nwbApp.factory('smsHistorySvc', ['$resource', '$translate', '$q', 'notificationSvc', 'repositorySvc',\n function ($resource, $translate, $q, notificationSvc, repositorySvc) {\n\n var SmsHistory = $resource('/Api/SmsHistory', {}, {\n 'query': { method: 'GET', isArray: true },\n 'getAll': { method: 'GET', isArray: true, url: '/Api/SmsHistory/GetAll' },\n });\n\n var smsHistory = null;\n\n function getAll(refresh) {\n if (!smsHistory || refresh) {\n smsHistory = repositorySvc.customGet('getAll', SmsHistory);\n }\n return smsHistory;\n }\n\n return {\n getAll: getAll\n }\n }]);","wbApp.controller('EmployeesTimeSheetReportParamsCtrl', ['$scope', '$window',\nfunction ($scope, $window) {\n\n $scope.model = {\n employeeID: $scope.employeeID,\n from: moment().startOf('month').subtract(1, 'months').startOf('month').toDate(),\n to: moment().startOf('month').subtract(1, 'day').endOf('month').toDate()\n };\n\n\n $scope.onReportPrint = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n $scope.$hide();\n\n if ($scope.isRfidReport) {\r\n $window.open('/Admin/Report/EmployeeTimeSheetRfid?EmployeeID=' + model.employeeID + '&StartDate=' + model.from.toJSON() + '&EndDate=' + model.to.toJSON(),\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n } else if ($scope.withCarryOver) {\n $window.open('/Admin/Report/EmployeeTimeSheetWithCarryOver?EmployeeID=' + model.employeeID + '&StartDate=' + model.from.toJSON() + '&EndDate=' + model.to.toJSON(),\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n } else {\r\n $window.open('/Admin/Report/EmployeeTimeSheet?EmployeeID=' + model.employeeID + '&StartDate=' + model.from.toJSON() + '&EndDate=' + model.to.toJSON(),\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\r\n }\n }\n\n $scope.onExportReportToXls = function (model) {\r\n\n if ($scope.isSaving) {\r\n return;\r\n }\n\n $scope.isSaving = true;\n\n $scope.$hide();\n\n if ($scope.isRfidReport) {\r\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\r\n } else if ($scope.withCarryOver) {\r\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\r\n } else {\r\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\r\n }\r\n }\n\n\n}]);\n","'use strict';\n\nwbApp.controller('ConsentsDefinitionsCtrl', ['$scope', '$http', '$q', '$modal', '$translate', '$filter', 'messageBoxSvc',\n 'consentDefinitionSvc', 'gridSortSvc',\nfunction ($scope, $http, $q, $modal, $translate, $filter, messageBoxSvc,\n consentDefinitionSvc, gridSortSvc) {\n\n $scope.gridSettings = {\n name: 'consentsDefinitions',\n columns: [\n {\n dataField: 'consentTypeID',\n caption: $translate.instant(\"TXT_CONSENT_TYPE\"),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('wbConsentType')(rowData.consentTypeID);\n },\n width: '90px'\n },\n { dataField: 'name', caption: $translate.instant('TXT_NAME'), dataType: 'string', sortOrder: 'asc' },\n { dataField: 'validFrom', caption: $translate.instant('TXT_LAB_VALID_FROM'), dataType: 'date', format: { date: 'short' }, width: '90px' },\n { dataField: 'validTo', caption: $translate.instant('TXT_LAB_VALID_TO'), dataType: 'date', format: { date: 'short' }, width: '90px' },\n { dataField: 'validToDays', caption: $translate.instant('TXT_LBL_VALID_FOR_DAYS'), dataType: 'number', width: '90px' },\n { dataField: 'active', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\n ]\n }\n\n function loadData(refresh) {\n $scope.consentsDefinitions = consentDefinitionSvc.getAllAsync(refresh);\n }\n\n loadData(true);\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = consentDefinitionSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n consentDefinitionSvc.remove(data);\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'users/users-consents/consents-definitions-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n\n\n","wbApp.controller('ConsentsDefinitionsDetailCtrl', ['$scope', '$http', '$q', '$modal', '$translate', '$filter', 'messageBoxSvc',\n 'consentDefinitionSvc',\nfunction ($scope, $http, $q, $modal, $translate, $filter, messageBoxSvc, consentDefinitionSvc) {\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n $scope.isSaving = true;\n\n if (!model.consentDefinitionID) {\n consentDefinitionSvc.insert(model, success, error);\n } else {\n consentDefinitionSvc.update(model, success, error);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n\n}]);\n\n\n","wbApp.controller('EmployeeAvailabilitySchedulesCtrl', ['$scope', '$modal', 'employeeAvailabilitySchedulesSvc', 'messageBoxSvc',\nfunction ($scope, $modal, employeeAvailabilitySchedulesSvc, messageBoxSvc) {\n\n var isActive = false; \n var loaded = false;\n var selectedWeek = moment().startOf('isoWeek');\n var selectedEmployee = null;\n\n $scope.model = [];\n var modelOrig = [];\n\n $scope.isBusy = false;\n $scope.isSaving = false;\n\n function reloadDataWithModificationAsk(saveEmployee, newEmployee, startOfWeek) {\n if (!$scope.detailIsUnchanged()) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_LBL_QUESTION',\n message: 'TXT_MODEL_MODFIFIED_SHOULD_SAVE',\n buttons: [{\n text: 'TXT_BTN_NO',\n callback: function () {\n loadData(newEmployee, startOfWeek);\n }\n }, {\n text: 'TXT_BTN_SAVE',\n callback: function () {\n saveModel($scope.model, saveEmployee, function () {\n loadData(newEmployee, startOfWeek);\n });\n }\n }]\n });\n }\n else {\n loadData(newEmployee, startOfWeek);\n }\n }\n\n function loadData(employee, date) {\n if (employee && date) {\n $scope.isBusy = true;\n employeeAvailabilitySchedulesSvc.loadWeek(employee.employeeID, date).then(\n function (data) {\n $scope.isBusy = false;\n selectedEmployee = employee;\n selectedWeek = moment(date).startOf('isoWeek');\n $scope.model.length = 0;\n $scope.model.push.apply($scope.model, data);\n modelOrig = angular.copy($scope.model);\n\n loaded = true;\n }, function (error) {\n $scope.isBusy = false;\n selectedEmployee = null;\n selectedWeek = moment(date).startOf('isoWeek');\n $scope.model.length = 0;\n\n modelOrig = [];\n loaded = false;\n });\n }\n }\n\n $scope.$on('employeeSelectionChanged', function (e, newlySelectedEmployee) {\n if (newlySelectedEmployee) {\n if (isActive) {\n if (selectedEmployee != newlySelectedEmployee) {\n reloadDataWithModificationAsk(selectedEmployee, newlySelectedEmployee, selectedWeek)\n }\n }\n }\n else {\n $scope.model.length = 0;\n }\n\n selectedEmployee = newlySelectedEmployee;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedEmployee) {\n loadData(selectedEmployee, selectedWeek);\n }\n }\n } else {\n isActive = false;\n }\n });\n\n function saveModel(model, employee, callback) {\n if (!$scope.detailIsUnchanged() && !$scope.isBusy && !$scope.isSaving && !!selectedEmployee) {\n\n $scope.isSaving = true;\n\n employeeAvailabilitySchedulesSvc.saveWeek(employee.employeeID, selectedWeek, model).then(\n function (data) {\n\n modelOrig = angular.copy($scope.model);\n $scope.isSaving = false;\n if (!!callback) {\n callback();\n }\n },\n function (error) {\n $scope.isSaving = false;\n messageBoxSvc.showMessageDlg({\n title: 'TXT_ALERT_TITLE_ENTITY_SAVE_ERROR',\n message: error.message,\n buttons: [{\n text: 'TXT_BTN_OK',\n callback: function () {\n if (!!callback) {\n callback();\n }\n }\n }]\n });\n\n }\n );\n }\n }\n\n $scope.calendarSettings = {\n onValueChanged: function (value) {\n var newStartOfWeek = moment(value.value).startOf('isoWeek');\n\n if (!newStartOfWeek.isSame(selectedWeek)) {\n reloadDataWithModificationAsk(selectedEmployee, selectedEmployee, newStartOfWeek);\n }\n }\n }\n\n $scope.detailIsUnchanged = function () {\n return angular.equals($scope.model, modelOrig);\n };\n\n $scope.onModelSave = function (model) {\n saveModel(model, selectedEmployee);\n }\n\n $scope.onModelCancel = function () {\n loadData(selectedEmployee, selectedWeek);\n }\n\n $scope.isSaveRangeEnabled = function () {\n return !$scope.isBusy && !$scope.isSaving && !!selectedEmployee && !!selectedWeek;\n }\n\n $scope.onModelRangeSave = function (model) {\n\n $scope.isSaving = true;\n dateRangeSelectionDlg.$promise.then(function () {\n dateRangeSelectionDlg.$scope.model = {\n from: moment().startOf('week').toDate(),\n to: moment().endOf('week').startOf('day').toDate(),\n };\n dateRangeSelectionDlg.$scope.onCanceled = function () {\n $scope.isSaving = false;\n },\n dateRangeSelectionDlg.$scope.onSaved = function (rangeModel) {\n employeeAvailabilitySchedulesSvc.saveWeekAsPaternForPeriod(\n selectedEmployee.employeeID,\n rangeModel.from,\n rangeModel.to,\n model).then(\n function (data) {\n modelOrig = angular.copy($scope.model);\n $scope.isSaving = false;\n },\n function (error) {\n $scope.isSaving = false;\n messageBoxSvc.showMessageDlg({\n title: 'TXT_ALERT_TITLE_ENTITY_SAVE_ERROR',\n message: error.message,\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n }); \n }\n );\n }\n \n dateRangeSelectionDlg.show();\n });\n\n }\n\n var dateRangeSelectionDlg = $modal({\n templateUrl: 'users/dialogs/select-week-date-range.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n","wbApp.controller('EmployeesCtrl', ['$scope', '$modal', '$translate', '$filter', '$q','employeeSvc', 'securitySvc', 'tenantSettingSvc', 'gridSortSvc', 'groupSvc',\r\nfunction ($scope, $modal, $translate, $filter, $q, employeeSvc, securitySvc, tenantSettingSvc, gridSortSvc, groupSvc) {\r\n\r\n $scope.groups = groupSvc.getAllAsync(true);\r\n $scope.customFilter = { selectedGroups: [] };\r\n $scope.rawEmployees = [];\r\n $scope.employees = [];\r\n\r\n function preFilter() {\r\n $q.all([$scope.groups.$promise, $scope.rawEmployees.$promise]).then(function () {\r\n if (!$scope.customFilter.selectedGroups.length) {\r\n $scope.employees.length = 0;\r\n $scope.employees.push.apply($scope.employees, $scope.rawEmployees);\r\n } else {\r\n var noGroupSelected = $scope.customFilter.selectedGroups.indexOf(-1) !== -1;\r\n\r\n $scope.employees.length = 0;\r\n $scope.employees.push.apply($scope.employees,\r\n _.filter($scope.rawEmployees, function (o) {\r\n if (noGroupSelected) {\r\n return !o.groups.length;\r\n }\r\n\r\n return _.intersection(o.groups, $scope.customFilter.selectedGroups).length > 0\r\n }));\r\n }\r\n });\r\n }\r\n\r\n $scope.$watch('customFilter.selectedGroups', function (newValue, oldValue) {\r\n preFilter();\r\n }, true);\r\n\r\n function onPrintEmployeeTimeSheet(data, isRfidReport, withCarryOver) {\r\n employeeTimeSheetParamsDialog.$promise.then(function () {\r\n employeeTimeSheetParamsDialog.$scope.employeeID = data.employeeID;\r\n employeeTimeSheetParamsDialog.$scope.withCarryOver = withCarryOver;\r\n employeeTimeSheetParamsDialog.$scope.isRfidReport = isRfidReport;\r\n employeeTimeSheetParamsDialog.show();\r\n });\r\n }\r\n\r\n function setSelectedEmployee(data) {\r\n $scope.selectedEmployee = data;\r\n $scope.$broadcast('employeeSelectionChanged', $scope.selectedEmployee);\r\n }\r\n\r\n $scope.enableZoomIntegration = tenantSettingSvc.settings.enableZoomIntegration;\r\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\r\n\r\n $scope.gridSettings = {\r\n name: 'employees',\r\n columns: [\r\n { dataField: 'active', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\r\n {\r\n dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '190px', sortOrder: 'asc',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'name', 'surname', 'middleName') }\r\n },\r\n { dataField: 'jobDescription', caption: $translate.instant('TXT_LBL_JOB_DESCRIPTION'), dataType: 'string' },\r\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '180px' },\r\n {\r\n dataField: 'phone',\r\n caption: $translate.instant('TXT_LBL_PHONE'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.phone);\r\n },\r\n width: '140px'\r\n },\r\n { dataField: 'isPublicProfile', caption: $translate.instant('TXT_LBL_PUBLIC_PROFILE'), dataType: 'boolean', width: '60px', visible: $scope.enableNewClientDesign },\r\n { dataField: 'teachingOnlineCourses', caption: $translate.instant('TXT_LBL_TEACHING_ONLINE_COURSES'), dataType: 'boolean', width: '60px', visible: $scope.enableZoomIntegration },\r\n { dataField: 'smallImage', caption: $translate.instant('TXT_LBL_PICTURE'), dataType: 'boolean', width: '60px' },\r\n ],\r\n customCommands: [{\r\n text: $translate.instant('TXT_MENU_PRINT_EMPLOYEE_TIME_SHEET'),\r\n isVisible: function () { return securitySvc.isInRole('Employee.TimeSheet') && securitySvc.isInRole('Reports'); },\r\n callback: function (data) { onPrintEmployeeTimeSheet(data, false, false); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_PRINT_EMPLOYEE_TIME_SHEET_WITH_CARRY_OVER'),\r\n isVisible: function () { return securitySvc.isInRole('Employee.TimeSheet') && securitySvc.isInRole('Reports'); },\r\n callback: function (data) { onPrintEmployeeTimeSheet(data, false, true); }\r\n }, {\r\n text: $translate.instant('TXT_MENU_PRINT_EMPLOYEE_TIME_SHEET_RFID'),\r\n isVisible: function () { return securitySvc.isInRole('Employee.TimeSheet') && securitySvc.isInRole('Reports') && tenantSettingSvc.settings.enableRfidCardSupport; },\r\n callback: function (data) { onPrintEmployeeTimeSheet(data, true, false); }\r\n }]\r\n }\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n $scope.rawEmployees = employeeSvc.getAllNonDeleted(true);\r\n setSelectedEmployee(null);\r\n });\r\n\r\n $scope.rawEmployees = employeeSvc.getAllNonDeleted(true);\r\n\r\n preFilter();\r\n\r\n $scope.tabs = [\r\n {\r\n title: 'TXT_DETAIL',\r\n template: \"users/employees/detail-tabs/detail.html\"\r\n }\r\n ];\r\n\r\n if (tenantSettingSvc.settings.enableReservationSupport)\r\n {\r\n $scope.tabs.push({\r\n title: 'TXT_AVAILABILITY_SCHEDULE',\r\n template: 'users/employees/detail-tabs/availability-schedule.html'\r\n })\r\n }\r\n\r\n $scope.tabs.activeTab = 0;\r\n\r\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\r\n });\r\n\r\n $scope.onRowEdit = function (data) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.collection = $scope.rawEmployees;\r\n detailDialogPromise.$scope.model = angular.copy(data);\r\n detailDialogPromise.$scope.onSave = function () {\r\n preFilter();\r\n };\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowAdd = function () {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.collection = $scope.rawEmployees;\r\n detailDialogPromise.$scope.model = employeeSvc.createNew();\r\n detailDialogPromise.$scope.onSave = function () {\r\n preFilter();\r\n };\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n employeeSvc.remove(data, function () {\r\n preFilter();\r\n }, null, $scope.rawEmployees);\r\n }\r\n\r\n $scope.onRowSelected = function (data) {\r\n setSelectedEmployee(data);\r\n }\r\n\r\n var detailDialogPromise = $modal({\r\n templateUrl: 'users/employees/employees-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n var employeeTimeSheetParamsDialog = $modal({\r\n templateUrl: 'users/employees/employees-time-sheet-report-params.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n}]);\r\n","wbApp.controller('EmployeesDetailCtrl', ['$scope', '$timeout', '$translate', 'employeeSvc', 'notificationSvc', 'picturesSvc', 'tenantInfo', 'tenantSettingSvc',\nfunction ($scope, $timeout, $translate, employeeSvc, notificationSvc, picturesSvc, tenantInfo, tenantSettingSvc) {\n\n $scope.isFranchise = tenantInfo.franchiseCentrals.length > 0;\n $scope.enableNewClientDesign = tenantSettingSvc.settings.enableNewClientDesign;\n\n var defaultCroppedImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYEAAAEyCAYAAAAcB2z/AAAKNElEQVR4Xu3VAQkAMAwDwc2/6Axm468OcinkbttxBAgQIJAUuEYg2bvQBAgQ+AJGwCMQIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQJGwA8QIEAgLGAEwuWLToAAASPgBwgQIBAWMALh8kUnQICAEfADBAgQCAsYgXD5ohMgQMAI+AECBAiEBYxAuHzRCRAgYAT8AAECBMICRiBcvugECBAwAn6AAAECYQEjEC5fdAIECBgBP0CAAIGwgBEIly86AQIEjIAfIECAQFjACITLF50AAQIPqGDEp71BlCAAAAAASUVORK5CYII=';\n $scope.emptyImage = 'https://gaxb7o2ddx-images.storage.googleapis.com/Profile/0/cf2830ffb3df4d72a4cbbc8f88fa3c8a.png';\n\n $scope.img = {\n image: '',\n croppedImage: defaultCroppedImage\n }\n\n $scope.enableZoomIntegration = tenantSettingSvc.settings.enableZoomIntegration;\n\n $scope.onImageLoadSuccess = function () {\n $scope.imageIsValid = true;\n }\n\n $scope.onImageLoadError = function () {\n $scope.imageIsValid = false;\n notificationSvc.notifyError(\n $translate.instant('TXT_ALERT_ERROR_LOADING_IMAGE'),\n $translate.instant('TXT_ALERT_UNSUPPORTED_IMAGE_TYPE'));\n }\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"users/employees/employees-detail-main-tab.html\",\n type: 'main'\n },\n {\n title: \"TXT_LBL_ADITIONAL\",\n template: \"users/employees/employees-detail-aditional-tab.html\",\n type: 'aditional'\n },\n {\n title: \"TXT_LBL_PUBLIC\",\n template: \"users/employees/employees-detail-public-tab.html\",\n type: 'public'\n },\n {\n title: \"TXT_LBL_PICTURE\",\n template: \"users/employees/employees-detail-picture-tab.html\",\n type: 'picture'\n } \n ];\n\n if ($scope.isFranchise) {\n $scope.detailTabs.push({\n title: \"TXT_LBL_FRANCHISE_LICENSES\",\n template: \"users/employees/employees-detail-franchise-licenses-tab.html\",\n type: 'franchise'\n });\n }\n\n if (tenantSettingSvc.settings.enableReservationSupport)\n {\n $scope.detailTabs.push({\n title: \"TXT_SPECIALIZATIONS\",\n template: \"users/employees/employees-detail-domains-tab.html\",\n type: 'domains'\n });\n }\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.detailTabs.activeTab = 0;\n\n var domainsInitialized = false;\n\n $scope.employeeDomains = null;\n\n var treeListInstance = null;\n $scope.domainsOptions = {\n bindingOptions: {\n dataSource: 'employeeDomains',\n },\n height: 400,\n dataStructure: 'tree',\n keyExpr: 'id',\n itemsExpr: 'specializations',\n selection: {\n mode: 'multiple', \n recursive: false\n },\n showRowLines: true,\n allowColumnResizing: true,\n autoExpandAll: true,\n columns: [{\n caption: 'Name',\n dataField: 'name',\n dataType: 'string',\n width: '220px'\n }, {\n caption: 'Popis',\n dataField: 'description',\n dataType: 'string'\n }],\n onContentReady: function (e) {\n treeListInstance = e.component;\n if (!!origDomainsSelected) {\n treeListInstance.selectRows(origDomainsSelected, false);\n }\n },\n onSelectionChanged: function (e) {\n if (e.currentSelectedRowKeys.length == 1) {\n var obj = _.find(e.selectedRowsData, { id: e.currentSelectedRowKeys[0] });\n if (obj && obj.parentId) {\n treeListInstance.selectRows(obj.parentId, true);\n }\n } else if (e.currentDeselectedRowKeys.length == 1) {\n var obj = _.find(e.selectedRowsData, { parentId: e.currentDeselectedRowKeys[0] });\n if (obj) {\n treeListInstance.selectRows(e.currentDeselectedRowKeys[0], true);\n }\n }\n }\n };\n\n var origDomainsSelected = [];\n\n function loadDomainsData() {\n\n employeeSvc.loadDomainsData($scope.model.employeeID).then(function (data) {\n $scope.employeeDomains = data.domains;\n origDomainsSelected = data.selection;\n if (!!treeListInstance) {\n treeListInstance.selectRows(origDomainsSelected, false);\n }\n domainsInitialized = true;\n });\n }\n\n $scope.$watch('detailTabs.activeTab', function (newValue, oldValue) {\n if (newValue >= 0 && newValue < $scope.detailTabs.length) {\n var selectedTab = $scope.detailTabs[newValue];\n\n if (selectedTab.type == 'domains' && !domainsInitialized) {\n loadDomainsData();\n }\n }\n });\n\n function domainsAreUnchanged() {\n return !domainsInitialized || !treeListInstance ||\n (!!domainsInitialized && (_.isEqual(origDomainsSelected.sort(), treeListInstance.getSelectedRowKeys().sort())));\n }\n\n function detailIsUnchanged(data) {\n return angular.equals(data, $scope.modelOrig);\n }\n\n $scope.detailIsUnchanged = function (data) {\n return detailIsUnchanged(data) && !$scope.imageIsValid && domainsAreUnchanged();\n };\n\n $scope.isDeletePictureDisabled = function () {\n return ($scope.emptyImage === $scope.model.smallImageUrl);\n }\n\n $scope.onDeletePicture = function () {\n $scope.imageIsValid = false;\n $scope.img.image = null;\n $scope.img.croppedImage = defaultCroppedImage;\n if (!$scope.model.smallImageData) {\n $scope.model.smallImageData = {};\n }\n $scope.model.smallImageData.delete = true;\n $scope.model.smallImageUrl = $scope.emptyImage;\n }\n\n $scope.isSaving = false;\n\n\n $scope.onDetailSave = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n function success() {\n $scope.$hide();\n $scope.onSave();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n\n if (!detailIsUnchanged($scope.model)) {\n\n if ($scope.imageIsValid) {\n var originalFormat = picturesSvc.decodeImageTypeFromData($scope.img.image);\n model.smallImageData = picturesSvc.prepareImageData($scope.img.croppedImage, originalFormat, error);\n if (!model.smallImageData) {\n return;\n }\n }\n\n if (!model.employeeID) {\n employeeSvc.insert(model, function (data) {\n if (!domainsAreUnchanged()) {\n employeeSvc.saveDomainsData(\n data.employeeID,\n $scope.employeeDomains,\n origDomainsSelected,\n treeListInstance.getSelectedRowKeys(),\n success,\n error);\n } else {\n success();\n }\n }, error, $scope.collection);\n } else {\n employeeSvc.update(model, function () {\n if (!domainsAreUnchanged()) {\n employeeSvc.saveDomainsData(\n $scope.model.employeeID,\n $scope.employeeDomains,\n origDomainsSelected,\n treeListInstance.getSelectedRowKeys(),\n success,\n error);\n } else {\n success();\n }\n }, error, $scope.collection);\n }\n } else if (!domainsAreUnchanged()) {\n employeeSvc.saveDomainsData(\n $scope.model.employeeID,\n $scope.employeeDomains,\n origDomainsSelected,\n treeListInstance.getSelectedRowKeys(),\n success,\n error);\n } else {\n success();\n }\n }\n\n var handleFileSelect = function (evt) {\n var file = evt.currentTarget.files[0];\n var reader = new FileReader();\n reader.onload = function (evt) {\n $scope.$apply(function ($scope) {\n $scope.img.image = evt.target.result;\n $scope.model.smallImageUrl = null;\n if ($scope.model.smallImageData) {\n $scope.model.smallImageData.delete = false;\n }\n \n });\n };\n reader.readAsDataURL(file);\n };\n\n $timeout(function () {\n angular.element(document.querySelector('#fileInput')).on('change', handleFileSelect);\n }, 1000);\n\n $scope.onFranchiseAdd = function () {\n employeeSvc.initNewFranchisesLicense($scope.model);\n }\n\n $scope.onFranchiseRemove = function (franchise) {\n _.remove($scope.model.franchises, function (n) {\n return n === franchise;\n });\n }\n\n}]);\n","wbApp.controller('GroupsCtrl', ['$scope', '$modal', 'groupSvc',\nfunction ($scope, $modal, groupSvc) {\n\n $scope.$on('refreshData', function (e, data) {\n $scope.groups = groupSvc.getAllAsync();\n });\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.groups = groupSvc.getAllAsync();\n\n $scope.gridOptions = {\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale', width: '250px' },\n { field: 'description', displayName: \"TXT_LBL_DESCRIPTION\", sort: 'locale' },\n { field: 'color', displayName: \"TXT_LBL_COLOR\", cellFilter: 'wbColor', width: '70px', html: true },\n ]\n };\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.groups;\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.groups;\n detailDialogPromise.$scope.model = groupSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n groupSvc.remove(data, null, null, $scope.groups);\n }\n \n var detailDialogPromise = $modal({\n templateUrl: 'users/groups/groups-detail.html',\n show: false,\n scope: $scope.$new()\n });\n \n\n}]);\n","wbApp.controller('GroupsDetailCtrl', ['$scope', 'groupSvc', 'tenantSettingSvc', 'messageBoxSvc',\nfunction ($scope, groupSvc, tenantSettingSvc, messageBoxSvc) {\n\n $scope.childrenGroupModel = {\n capacity: $scope.model.groupType == 1 ? $scope.model.capacity : null,\n projectName: $scope.model.groupType == 1 ? $scope.model.projectName : null,\n projectRegistrationNumber: $scope.model.groupType == 1 ? $scope.model.projectRegistrationNumber : null,\n projectBeneficiary: $scope.model.groupType == 1 ? $scope.model.projectBeneficiary : null\n };\n\n \n\n $scope.nurseryGroupModel = {\n capacity: null,\n projectName: $scope.model.groupType == 2 ? $scope.model.projectName : null,\n projectRegistrationNumber: $scope.model.groupType == 2 ? $scope.model.projectRegistrationNumber : null,\n projectBeneficiary: $scope.model.groupType == 2 ? $scope.model.projectBeneficiary : null\n }\n\n $scope.detailIsUnchanged = function () {\n return angular.equals($scope.model, $scope.modelOrig) &&\n angular.equals($scope.nurseryGroupModel, $scope.nurseryGroupModelOrig) &&\n angular.equals($scope.childrenGroupModel, $scope.childrenGroupModelOrig);\n };\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"users/groups/group-detail-main-tab.html\"\n }];\n\n if (tenantSettingSvc.settings.childrenGroupSupport) {\n $scope.detailTabs.push({\n title: \"TXT_LBL_CHILDREN_GROUP\",\n template: \"users/groups/group-detail-children-group.html\"\n });\n } else {\n $scope.childrenGroupModel.capacity = null;\n $scope.childrenGroupModel.projectName = null;\n $scope.childrenGroupModel.projectRegistrationNumber = null;\n $scope.childrenGroupModel.projectBeneficiary = null;\n }\n\n if (tenantSettingSvc.settings.smallNurserySupport) {\n $scope.detailTabs.push({\n title: \"TXT_LBL_SMALL_NURSERY\",\n template: \"users/groups/group-detail-nursery.html\"\n });\n } else {\n $scope.nurseryGroupModel.capacity = null;\n $scope.nurseryGroupModel.projectName = null;\n $scope.nurseryGroupModel.projectRegistrationNumber = null;\n $scope.nurseryGroupModel.projectBeneficiary = null;\n }\n\n $scope.nurseryGroupModelOrig = angular.copy($scope.nurseryGroupModel);\n $scope.childrenGroupModelOrig = angular.copy($scope.childrenGroupModel);\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.isSaving = false;\n\n $scope.onDetailSave = function (model) {\n\n var isChildrenGroupModelSet = (!!($scope.childrenGroupModel.capacity) || ($scope.childrenGroupModel.capacity === 0)) ||\n !!($scope.childrenGroupModel.projectName) ||\n !!($scope.childrenGroupModel.projectRegistrationNumber) ||\n !!($scope.childrenGroupModel.projectBeneficiary);\n\n var isNurseryGroupModelSet = !_.isNil($scope.nurseryGroupModel.capacity) ||\n !!($scope.nurseryGroupModel.projectName) ||\n !!($scope.nurseryGroupModel.projectRegistrationNumber) ||\n !!($scope.nurseryGroupModel.projectBeneficiary);\n\n if (isChildrenGroupModelSet && isNurseryGroupModelSet) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_INFORMATION',\n message: 'TXT_NURSERY_OR_CHILDREN_GROUP',\n buttons: [{\n text: 'TXT_BTN_OK'\n }]\n });\n return;\n }\n\n var modelToSave = angular.copy(model);\n\n if (isChildrenGroupModelSet) {\n modelToSave.groupType = 1;\n modelToSave.capacity = $scope.childrenGroupModel.capacity;\n modelToSave.projectName = $scope.childrenGroupModel.projectName;\n modelToSave.projectRegistrationNumber = $scope.childrenGroupModel.projectRegistrationNumber;\n modelToSave.projectBeneficiary = $scope.childrenGroupModel.projectBeneficiary;\n } else if (isNurseryGroupModelSet) {\n modelToSave.groupType = 2;\n modelToSave.capacity = null;\n modelToSave.projectName = $scope.nurseryGroupModel.projectName;\n modelToSave.projectRegistrationNumber = $scope.nurseryGroupModel.projectRegistrationNumber;\n modelToSave.projectBeneficiary = $scope.nurseryGroupModel.projectBeneficiary;\n } else {\n modelToSave.groupType = 0;\n modelToSave.capacity = null;\n modelToSave.projectName = null;\n modelToSave.projectRegistrationNumber = null;\n modelToSave.projectBeneficiary = null;\n }\n\n $scope.isSaving = true;\n\n if (!modelToSave.groupID) {\n groupSvc.insert(modelToSave, success, error, $scope.collection);\n } else {\n groupSvc.update(modelToSave, success, error, $scope.collection);\n }\n\n function success() {\n $scope.isSaving = false;\n $scope.$hide();\n }\n\n function error(data) {\n $scope.isSaving = false;\n $scope.detailError = data;\n }\n }\n}]);\n","'use strict';\n\nwbApp.controller('ReferenceSourceCtrl', ['$scope', '$modal', 'referenceSourceSvc',\nfunction ($scope, $modal, referenceSourceSvc) {\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['name'], directions: ['dsc'] },\n columnDefs: [{ field: 'name', displayName: \"TXT_LBL_NAME\", sort: 'locale' }]\n };\n\n $scope.rederenceSource = referenceSourceSvc.getAllAsync(true);\n\n $scope.referenceSourceDetail = { name: '' };\n $scope.referenceSourceDetailOrig;\n\n $scope.onRowEdit = function (data) {\n $scope.referenceSourceDetail.id = data.id;\n $scope.referenceSourceDetail.name = data.name;\n $scope.referenceSourceDetail.isNew = false;\n\n $scope.referenceSourceDetailOrig = angular.copy($scope.referenceSourceDetail);\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.detailError = null;\n\n $scope.onRowAdd = function () {\n $scope.referenceSourceDetail.id = -1;\n $scope.referenceSourceDetail.name = \"\";\n $scope.referenceSourceDetail.isNew = true;\n\n $scope.referenceSourceDetailOrig = angular.copy($scope.referenceSourceDetail);\n\n detailDialogPromise.$promise.then(function () {\n $scope.detailError = null;\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n referenceSourceSvc.remove(data);\n }\n\n $scope.onReferenceSourceDetailSave = function (data) {\n if (data.isNew) {\n referenceSourceSvc.insert(data, function (successResult) {\n detailDialogPromise.hide();\n }, function (errorResult) {\n $scope.detailError = errorResult;\n });\n } else {\n referenceSourceSvc.update(data, function (successResult) {\n detailDialogPromise.hide();\n }, function (errorResult) {\n $scope.detailError = errorResult;\n });\n }\n }\n\n $scope.tabs = [\n {\n title: 'TXT_REFERENCE_SOURCE_TIME_DEVELOPMENT',\n template: \"users/reference-source-tabs/time-development.html\"\n }];\n\n $scope.tabs.activeTab = 0;\n\n //$scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n // $scope.$broadcast('activeTabChanged', { activeTab: newValue, oldValue: oldValue });\n //});\n\n var detailDialogPromise = $modal({\n templateUrl: 'users/reference-source-detail.html',\n show: false,\n scope: $scope\n });\n}]);","'use strict';\n\nwbApp.controller('ReferenceSourceTimeDevelopmentCtrl', ['$scope', '$translate', '$timeout', 'referenceSourceSvc',\nfunction ($scope, $translate, $timeout, referenceSourceSvc) {\n\n $scope.fromDate = moment().subtract(6, 'months').toDate();\n $scope.toDate = moment().add(1, 'day').toDate();\n\n $scope.referenceSourceTimeDevelopment = {\n type: 'AreaChart',\n data: [[]],\n options: {\n displayExactValues: true,\n isStacked: true,\n chartArea: { top: 20, left: 30, width: '80%', height: '75%' },\n legend: {\n position: 'right'\n },\n vAxis: {},\n hAxis: {},\n orientation: 'horizontal'\n }\n };\n\n function loadData() {\n if ($scope.fromDate && $scope.toDate) {\n referenceSourceSvc.getReferenceSourceTimeDevelopment($scope.fromDate, $scope.toDate)\n .then(function (data) {\n $scope.referenceSourceTimeDevelopment.data = data;\n });\n }\n }\n\n\n $scope.onDateRangeChanged = function () {\n loadData();\n }\n\n loadData();\n\n}]);","wbApp.controller('RequestConsentFromAllCtrl', ['$scope', '$http', '$q', '$modal', '$translate', '$filter', 'messageBoxSvc',\n 'consentDefinitionSvc', 'consentSvc',\nfunction ($scope, $http, $q, $modal, $translate, $filter, messageBoxSvc, consentDefinitionSvc, consentSvc) {\n\n $scope.isSaving = false;\n $scope.selectableConsents = [];\n\n var allConsents = consentDefinitionSvc.getAllAsync(false);\n allConsents.$promise.then(function (c) {\n _.forEach(c, function (consent) {\n if (consent.active) {\n $scope.selectableConsents.push({\n selected: false,\n consent: consent\n });\n }\n }) ;\n });\n\n $scope.detailIsUnchanged = function () {\n return !(_.filter($scope.selectableConsents, { 'selected': true })).length;\n }\n\n $scope.onConsentClick = function (consent) {\n consent.selected = !consent.selected;\n };\n\n $scope.onSaveClick = function (selectableConsents, informUsers) {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n var selectedConsentIDs = _.map(_.filter(selectableConsents, { 'selected': true }), 'consent.consentDefinitionID');\n var userIDs = _.map($scope.selectedUsers, 'userID');\n\n if (selectedConsentIDs.length && userIDs.length) {\n consentSvc.assignConsensts({\n informUsers: informUsers,\n consnetIDs: selectedConsentIDs,\n userIDs: userIDs\n }, function () {\n $scope.isSaving = false;\n $scope.$hide();\n }, function () {\n $scope.isSaving = false;\n $scope.$hide();\n });\n } else {\n $scope.isSaving = false;\n $scope.$hide();\n }\n }\n \n}]);\n\n\n","wbApp.controller('SelectWeekDateRangeDlg', ['$scope',\nfunction ($scope, groupSvc) {\n\n $scope.onCancel = function () {\n $scope.$hide();\n $scope.onCanceled();\n }\n\n $scope.onDetailSave = function (model) {\n\n $scope.$hide();\n $scope.onSaved($scope.model);\n }\n}]);\n","wbApp.controller('StudentsActionsCtrl', ['$scope', 'courseRegistrationSvc', 'tenantSettingSvc',\nfunction ($scope, courseRegistrationSvc, tenantSettingSvc) {\n\n $scope.tenantSettings = tenantSettingSvc.settings;\n\n var selectedStudent = null;\n var isActive = false;\n var loaded = false;\n $scope.actions = [];\n\n $scope.$on('studentSelectionChanged', function (e, data) {\n if (data.student) {\n if (isActive) {\n if (selectedStudent !== data.student || data.refresh) {\n $scope.actions = courseRegistrationSvc.getAllActionsByStudent(data.student.id);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.actions.length = 0;\n }\n selectedStudent = data.student;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 2) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedStudent) {\n $scope.actions = courseRegistrationSvc.getAllActionsByStudent(selectedStudent.id);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['semesterName'], directions: ['asc'] },\n columnDefs: [\n { field: 'semesterName', displayName: \"TXT_LBL_SEMESTER\", width: '140px' },\n { field: 'courseFullName', displayName: \"TXT_LBL_ACTIONS\", width: '300px' },\n { field: 'firstDate', displayName: \"TXT_MENU_SCHEDULE\", cellFilter: 'date:dd.MM.yy EEE HH:mm', width: '120px' },\n { field: 'notes', displayName: \"TXT_LBL_NOTE\" },\n { field: 'price', displayName: \"TXT_LBL_PRICE\", cellFilter: 'wbCurrencyFlt', width: '100px', align: 'right', smHide: true, mdHide: true },\n { field: 'paymentsSum', displayName: \"TXT_LBL_PAYMENTS\", cellFilter: 'wbCurrencyFlt', align: 'right', width: '100px', smHide: true },\n { field: 'registrationDate', displayName: \"TXT_LBL_REGISTRATION_DATE\", cellFilter: 'date:shortDate', width: '75px', smHide: true }\n ],\n noCommandColumn: true\n };\n\n if ($scope.tenantSettings.showArrearInsteadOfPayments) {\n $scope.gridOptions.columnDefs[4].field = 'arrear';\n $scope.gridOptions.columnDefs[4].displayName = 'TXT_LBL_ARREAR';\n }\n\n}]);\n\n\n","wbApp.controller('StudentsAttendanceDetailCtrl', ['$scope', 'attendanceSvc',\nfunction ($scope, attendanceSvc) {\n\n var selectedStudent = null;\n var isActive = false;\n var loaded = false;\n $scope.attendanceDetail = [];\n\n $scope.$on('studentSelectionChanged', function (e, data) {\n if (data.student) {\n if (isActive) {\n if (selectedStudent !== data.student || data.refresh) {\n $scope.attendanceDetail = attendanceSvc.groupAttendanceDetail(\n attendanceSvc.getStudentAttendanceDetail(data.student.id));\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.attendanceDetail.length = 0;\n }\n selectedStudent = data.student;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 4) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedStudent) {\n $scope.attendanceDetail = attendanceSvc.groupAttendanceDetail(\n attendanceSvc.getStudentAttendanceDetail(selectedStudent.id));\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.attendanceDetailFilterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n columnDefs: [\n { field: 'course', displayName: \"TXT_LBL_COURSE\", sort: 'locale' },\n { field: 'attendanceCount', displayName: \"TXT_LBL_COUNT\", width: '55px' },\n { field: 'startDate', displayName: \"TXT_LBL_START_DATE\", cellFilter: 'date:dd.MM.yy - EEE HH:mm', width: '140px' },\n { field: 'endDate', displayName: \"TXT_LBL_END_DATE\", cellFilter: 'date:HH:mm', width: '55px' },\n { field: 'courseAttendanceStatus', displayName: \"TXT_COL_ATTENDANCE_STATUS\", cellFilter: 'attendanceStatus', width: '100px' },\n { field: 'courseAttendanceType', displayName: \"TXT_COL_ATTENDANCE_TYPE\", cellFilter: 'attendanceType', width: '100px' },\n { field: 'courseAttendanceFeeType', displayName: \"TXT_LBL_COURSE_FEE\", cellFilter: 'attendanceFeeType', width: '70px' },\n { field: 'teacherFullName', displayName: \"TXT_LBL_EMPLOYEE\", width: '140px', sort: 'locale' },\n { field: 'studentAttendanceNote', displayName: \"TXT_LBL_NOTES\",width: '180px', sort: 'locale' },\n ],\n noCommandColumn: true,\n pageSize: 20,\n disableRowSelection: true,\n grouping: {\n enabled: true,\n isGroupRowPropertyName: 'isGroupRow',\n subItemsPropertyName: 'items'\n }\n };\n\n}]);\n\n\n","wbApp.controller('StudentsAttendanceSummaryCtrl', ['$scope', '$popover', '$timeout', '$translate' ,'attendanceSvc',\nfunction ($scope, $popover, $timeout, $translate, attendanceSvc) {\n\n var selectedStudent = null;\n var isActive = false;\n var loaded = false;\n $scope.semesters = [];\n\n $scope.$on('studentSelectionChanged', function (e, data) {\n if (data.student) {\n if (isActive) {\n if (selectedStudent !== data.student || data.refresh) {\n $scope.semesters = attendanceSvc.getAttendanceSummary(data.student.id);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.semesters.length = 0;\n }\n selectedStudent = data.student;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 3) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedStudent) {\n $scope.semesters = attendanceSvc.getAttendanceSummary(selectedStudent.id);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n\n $scope.onExcusesClick = function (semester, event) {\n var element = angular.element(document.querySelector('#popover-detail-' + semester.semesterID));\n\n var myPopover = $popover(element, {\n title: $translate.instant('TXT_COMPENSATION'),\n content: '' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n ' ' +\n '
' + $translate.instant('TXT_LBL_ELIGIBLE_AMENDS') + '' + semester.eligibleAmends + '
' + $translate.instant('TXT_LBL_AMENDS_LEFT') + '' + semester.remainingAmends + '
' + $translate.instant('TXT_LBL_PRE_AMENDS_GRANTED') + '' + semester.eligiblePreAmends + '
' + $translate.instant('TXT_LBL_PRE_AMENDS_LEFT') + '' + semester.remainingPreAmends + '
' + $translate.instant('TXT_LBL_ELIGIBLE_TIME_BOUNDS') + '' + semester.eligibleTimeBoundAmends + '
' + $translate.instant('TXT_LBL_TIME_BOUNDS_AMEND') + '' + semester.remainingTimeBoundAmends + '
',\n placement: 'top',\n autoClose: true,\n html: true,\n trigger: 'manual',\n container: 'body',\n target: element,\n viewport: 'body',\n\n });\n\n myPopover.$promise.then(function () {\n $timeout(function () {\n myPopover.$applyPlacement();\n myPopover.show();\n }, 100);\n });\n }\n\n}]);\n\n\n","wbApp.controller('StudentsCoursesCtrl', ['$scope', 'courseRegistrationSvc', 'tenantSettingSvc',\nfunction ($scope, courseRegistrationSvc, tenantSettingSvc) {\n\n $scope.tenantSettings = tenantSettingSvc.settings;\n\n var selectedStudent = null;\n var isActive = true;\n var loaded = false;\n $scope.courses = [];\n\n $scope.$on('studentSelectionChanged', function (e, data) {\n if (data.student) {\n if (isActive) {\n if (selectedStudent !== data.student || data.refresh) {\n $scope.courses = courseRegistrationSvc.getAllCoursesByStudent(data.student.id);\n }\n loaded = true;\n } else {\n loaded = false;\n }\n } else {\n $scope.courses.length = 0;\n }\n selectedStudent = data.student;\n });\n\n $scope.$on('activeTabChanged', function (e, data) {\n if (data.activeTab === 1) {\n if (!isActive) {\n isActive = true;\n if (!loaded && selectedStudent) {\n $scope.courses = courseRegistrationSvc.getAllCoursesByStudent(selectedStudent.id);\n loaded = true;\n }\n }\n } else {\n isActive = false;\n }\n });\n\n $scope.filterOptions = {\n filterText: \"\"\n };\n\n $scope.gridOptions = {\n sortInfo: { fields: ['semesterName'], directions: ['asc'] },\n columnDefs: [\n { field: 'semesterName', displayName: \"TXT_LBL_SEMESTER\", width: '140px' },\n { field: 'courseFullName', displayName: \"TXT_LBL_COURSE\", width: '300px' },\n { field: 'firstDate', displayName: \"TXT_MENU_SCHEDULE\", cellFilter: 'date:EEE HH:mm', width: '80px' },\n { field: 'notes', displayName: \"TXT_LBL_NOTE\" },\n { field: 'price', displayName: \"TXT_LBL_PRICE\", cellFilter: 'wbCurrencyFlt', width: '100px', align: 'right', smHide: true, mdHide: true },\n { field: 'paymentsSum', displayName: \"TXT_LBL_PAYMENTS\", cellFilter: 'wbCurrencyFlt', align: 'right', width: '100px', smHide: true },\n { field: 'registrationDate', displayName: \"TXT_LBL_REGISTRATION_DATE\", cellFilter: 'date:shortDate', width: '75px', smHide: true }\n ],\n noCommandColumn: true\n };\n\n if ($scope.tenantSettings.showArrearInsteadOfPayments) {\n $scope.gridOptions.columnDefs[4].field = 'arrear';\n $scope.gridOptions.columnDefs[4].displayName = 'TXT_LBL_ARREAR';\n }\n\n}]);\n\n\n","wbApp.controller('StudentsCtrl', ['$scope', '$q', '$modal', '$window', '$translate', '$filter', 'studentSvc', 'securitySvc', 'groupSvc', 'tenantSettingSvc', 'gridSortSvc',\r\nfunction ($scope, $q, $modal, $window, $translate, $filter, studentSvc, securitySvc, groupSvc, tenantSettingSvc, gridSortSvc) {\r\n\r\n $scope.tenantSetting = tenantSettingSvc.settings;\r\n \r\n var isInCourseRole = securitySvc.isInRole('Course');\r\n var isInActionRole = securitySvc.isInRole('Action');\r\n var isInAttendanceRole = securitySvc.isInRole('Attendance');\r\n $scope.isInProtectedViewRole = securitySvc.isInRole('Student.ProtectedView');\r\n\r\n $scope.groups = groupSvc.getAllAsync(true);\r\n $scope.customFilter = { selectedGroups: [] };\r\n $scope.rawStudents = [];\r\n $scope.students = [];\r\n $scope.filteredStudents = [];\r\n\r\n function preFilter() {\r\n $q.all([$scope.groups.$promise, $scope.rawStudents.$promise]).then(function () {\r\n if (!$scope.customFilter.selectedGroups.length) {\r\n $scope.students.length = 0;\r\n $scope.students.push.apply($scope.students, $scope.rawStudents);\r\n } else {\r\n\r\n var noGroupSelected = $scope.customFilter.selectedGroups.indexOf(-1) !== -1;\r\n\r\n $scope.students.length = 0;\r\n $scope.students.push.apply($scope.students,\r\n _.filter($scope.rawStudents, function (o) {\r\n if (noGroupSelected) {\r\n return !o.groups.length;\r\n }\r\n\r\n return _.intersection(o.groups, $scope.customFilter.selectedGroups).length > 0\r\n }));\r\n }\r\n });\r\n }\r\n \r\n $scope.groupsCombo = {\r\n items: $scope.groups,\r\n displayExpr: 'name',\r\n valueExpr: 'groupID',\r\n showSelectionControls: true,\r\n maxDisplayedTags: 3,\r\n multiline: false,\r\n itemTemplate: 'customItem',\r\n bindingOptions: {\r\n value: 'customFilter.selectedGroups'\r\n },\r\n }\r\n\r\n $scope.$watch('customFilter.selectedGroups', function (newValue, oldValue) {\r\n preFilter();\r\n }, true);\r\n\r\n\r\n $scope.gridSettings = {\r\n name: 'students',\r\n columns: [\r\n {\r\n dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '180px', sortOrder: 'asc',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'name', 'surname', 'middleName') },\r\n },\r\n {\r\n dataField: 'gender',\r\n caption: $translate.instant('TXT_LBL_GENDER'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('gender')(rowData.gender);\r\n },\r\n width: '80px',\r\n visible: $scope.tenantSetting.mandatoryStudentGender < 3\r\n },\r\n { \r\n dataField: 'birthday', \r\n caption: $translate.instant(\"TXT_LBL_BIRTHDAY\"), \r\n dataType: 'date', \r\n format: { date: 'short' }, \r\n width: '70px',\r\n visible: $scope.tenantSetting.mandatoryStudentBirthday < 3\r\n },\r\n {\r\n dataField: 'parentFullName', caption: $translate.instant('TXT_LBL_PARENT'), dataType: 'string', width: '180px',\r\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'parentFullName') }\r\n },\r\n { \r\n dataField: 'address', \r\n caption: $translate.instant('TXT_LBL_ADDRESS'), \r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n if (!!rowData.studentAddress ) {\r\n return rowData.studentAddress;\r\n }\r\n return rowData.address;\r\n },\r\n \r\n },\r\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '180px' },\r\n {\r\n dataField: 'phone',\r\n caption: $translate.instant('TXT_LBL_PHONE'),\r\n dataType: 'string',\r\n calculateCellValue: function (rowData) {\r\n return $filter('phone')(rowData.phone);\r\n },\r\n width: '130px'\r\n },\r\n { dataField: 'active', caption: $translate.instant('TXT_LBL_ACTIVE'), dataType: 'boolean', width: '60px' },\r\n { dataField: 'adminNotes', caption: $translate.instant('TXT_LBL_NOTE'), dataType: 'string', visible: false },\r\n ],\r\n shouldDisableExportMenu: function () {\r\n return !securitySvc.isInRole('Student.Export');\r\n },\r\n customCommands: [{\r\n text: $translate.instant('TXT_LBL_ACTIVITY_YEAR_PAYMENT_CONFIRMATION_REPORT'),\r\n isVisible: function () {\r\n return securitySvc.isInRole('Reports') &&\r\n securitySvc.isInRole('ActivityYearPaymentConfirmation') &&\r\n $scope.tenantSetting.enableKindergartenSupport;\r\n },\r\n callback: function (data) { showActivityYearPaymentConfirmationDialog(data.id); }\r\n }]\r\n }\r\n\r\n $scope.tabs = [{\r\n title: 'TXT_DETAIL',\r\n template: \"users/students/detail-tabs/detail.html\"\r\n }];\r\n\r\n if (isInCourseRole) {\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_COURSES',\r\n template: \"users/students/detail-tabs/courses.html\"\r\n });\r\n }\r\n\r\n if (isInActionRole) {\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_ACTIONS',\r\n template: \"users/students/detail-tabs/actions.html\"\r\n });\r\n }\r\n\r\n if (isInAttendanceRole) {\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_ATTENDANCE_SUMMARY',\r\n template: \"users/students/detail-tabs/attendance-summary.html\"\r\n });\r\n\r\n $scope.tabs.push({\r\n title: 'TXT_LBL_ATTENDANCE_DETAIL',\r\n template: \"users/students/detail-tabs/attendance-detail.html\"\r\n });\r\n }\r\n\r\n $scope.tabs.activeTab = 0;\r\n\r\n $scope.selectedStudent = null;\r\n\r\n function setSelectedStudent(student, refresh) {\r\n $scope.selectedStudent = student;\r\n $scope.$broadcast('studentSelectionChanged', { student: $scope.selectedStudent, refresh: !!refresh });\r\n }\r\n\r\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\r\n $scope.$broadcast('activeTabChanged', { activeTab: newValue });\r\n });\r\n\r\n $scope.rawStudents = studentSvc.getAll();\r\n\r\n preFilter();\r\n\r\n $scope.$on('refreshData', function (e, data) {\r\n $scope.rawStudents = studentSvc.getAll();\r\n setSelectedStudent(null);\r\n });\r\n\r\n $scope.onRowSelected = function (data) {\r\n setSelectedStudent(data);\r\n }\r\n\r\n $scope.onRowAdd = function () {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.collection = $scope.students;\r\n detailDialogPromise.$scope.model = studentSvc.createNew();\r\n detailDialogPromise.$scope.onStudentSave = function (model) {\r\n setSelectedStudent(model, true);\r\n };\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowEdit = function (data) {\r\n detailDialogPromise.$promise.then(function () {\r\n detailDialogPromise.$scope.collection = $scope.students;\r\n detailDialogPromise.$scope.model = angular.copy(data);\r\n detailDialogPromise.show();\r\n });\r\n }\r\n\r\n $scope.onRowDelete = function (data) {\r\n studentSvc.remove(data, null, $scope.students);\r\n }\r\n\r\n $scope.onFilterApplied = function (rows) {\r\n $scope.filteredStudents = rows;\r\n }\r\n\r\n $scope.getStudentsActive = function () {\r\n if (!!$scope.filteredStudents) {\r\n return _.countBy($scope.filteredStudents, 'active')['true'] || 0;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n $scope.getStudentsCount = function () {\r\n if (!!$scope.filteredStudents) {\r\n return $scope.filteredStudents.length;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n $scope.getStudentsActivePercent = function () {\r\n return ($scope.getStudentsActive() / $scope.getStudentsCount()) * 100;\r\n }\r\n\r\n var detailDialogPromise = $modal({\r\n templateUrl: 'users/students/students-detail.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n\r\n function showActivityYearPaymentConfirmationDialog(studentID) {\r\n\r\n activityTaxDeductionReportParamsDialog.$promise.then(function () {\r\n activityTaxDeductionReportParamsDialog.$scope.studentID = studentID;\r\n activityTaxDeductionReportParamsDialog.show();\r\n });\r\n }\r\n\r\n var activityTaxDeductionReportParamsDialog = $modal({\r\n templateUrl: 'users/students/students-tax-deduction-report-params.html',\r\n show: false,\r\n scope: $scope.$new()\r\n });\r\n}]);\r\n\r\n\r\n","wbApp.controller('StudentsDetailCtrl', ['$scope', 'studentSvc', 'securitySvc', 'tenantSettingSvc', '$http',\nfunction ($scope, studentSvc, securitySvc, tenantSettingSvc, $http) {\n\n $scope.tenantSetting = tenantSettingSvc.settings;\n \n $scope.modelOrig = angular.copy($scope.model);\n $scope.isInSupportRole = securitySvc.isInRole('Support');\n $scope.isInProtectedViewRole = securitySvc.isInRole('Student.ProtectedView');\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n studentSvc.insert(data, success, error, $scope.collection);\n } else {\n studentSvc.update(data, success, error, $scope.collection);\n }\n\n function success(newStudent) {\n if (!!$scope.onStudentSave) {\n $scope.onStudentSave(newStudent);\n }\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig) && !$scope.preFilled;\n };\n\n $scope.detailTabs = [\n {\n title: 'TXT_MAIN',\n template: \"users/students/students-detail-main-tab.html\"\n },\n {\n title: 'TXT_LBL_ADITIONAL',\n template: \"users/students/students-detail-aditional-tab.html\"\n },\n {\n title: 'TXT_LAB_HEALTH',\n template: \"users/students/students-detail-health-tab.html\"\n }\n ];\n \n if ($scope.tenantSetting.mandatoryStudentNotes < 3) {\n $scope.detailTabs.push(\n {\n title: 'TXT_LBL_NOTE',\n template: \"users/students/students-detail-notes-tab.html\"\n });\n }\n\n $scope.detailTabs.activeTab = 0;\n\n $scope.typeAheadAddress = [];\n\n $scope.allMatch = function () {\n return true;\n };\n\n $scope.getAddress = function (viewValue) {\n if (viewValue) {\n let params = {\n address: viewValue,\n language: 'cs',\n region: 'cz',\n bounds: '48.270777,12.172380|51.246709,19.922157', // Czech republic bounds\n key: 'AIzaSyDdpRFWJaEcASaUgQxTdi8i42aaCaKfS0A'\n };\n return $http.get('https://maps.googleapis.com/maps/api/geocode/json', { params: params })\n .then(function (res) {\n $scope.typeAheadAddress.length = 0;\n $scope.typeAheadAddress.push.apply($scope.typeAheadAddress, res.data.results);\n });\n }\n }; \n\n}]);\n","wbApp.controller('StudentsTaxDeductionReportParamsCtrl', ['$scope', '$window',\nfunction ($scope, $window) {\n\n $scope.model = {\n selectedYear: 2018,\n maxYear: moment().year()\n };\n\n var endOfApril = moment().startOf('year').add(4, 'M').endOf('month');\n if (moment().isBefore(endOfApril)) {\n $scope.model.selectedYear = moment().startOf('year').subtract(1, 'year').year();\n } else {\n $scope.model.selectedYear = moment().startOf('year').year();\n }\n\n $scope.onReportPrint = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n $scope.$hide();\n\n var fromDate = moment().year($scope.model.selectedYear).startOf('year').toDate();\n var toDate = moment().year($scope.model.selectedYear).endOf('year').toDate();\n\n $window.open('/Admin/Report/ActivityYearPaymentConfirmation' +\n '?StudentID=' + $scope.studentID +\n '&StartDate=' + fromDate.toJSON() +\n '&EndDate=' + toDate.toJSON(),\n '_blank', 'width=1000,height=500,toolbar=no,resizable=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');\n }\n\n $scope.onExportReportToXls = function (model) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n $scope.$hide();\n\n var fromDate = moment().year($scope.model.selectedYear).startOf('year').toDate();\n var toDate = moment().year($scope.model.selectedYear).endOf('year').toDate();\n\n $(\"#dataDownloadIFrame\").remove();\n $(\"body\").append(\"\");\n }\n\n\n}]);\n","'use strict';\n\nwbApp.controller('UserRolesCtrl', ['$scope', '$modal', '$translate', 'userRolesSvc',\nfunction ($scope, $modal, $translate, userRolesSvc) {\n\n $scope.$on('refreshData', function (e, data) {\r\n $scope.userRoles = userRolesSvc.getAllAsync(true);\r\n });\n\n $scope.gridSettings = {\r\n name: 'userRoles',\r\n columns: [\r\n { dataField: 'name', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', width: '180px' },\r\n { dataField: 'description', caption: $translate.instant('TXT_LBL_DESCRIPTION'), dataType: 'string' },\r\n { dataField: 'buildIn', caption: $translate.instant('TXT_LBL_SYSTEM'), dataType: 'boolean', width: '70px' }\r\n ]\r\n };\n\n $scope.userRoles = userRolesSvc.getAllAsync();\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.model = userRolesSvc.createNew();\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n userRolesSvc.remove(data);\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'users/user-roles-detail.html',\n show: false,\n scope: $scope\n });\n\n}]);\n","wbApp.controller('UserRolesDetailCtrl', ['$scope', 'userRolesSvc', 'tenantSettingSvc',\nfunction ($scope, userRolesSvc, tenantSettingSvc) {\n\n userRolesSvc.extendWithRfidSchedule($scope.model);\n\n $scope.modelOrig = angular.copy($scope.model);\n\n $scope.onDetailSave = function (data) {\n\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n userRolesSvc.save(data, success, error);\n\n function success() {\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.detailError = errorResult;\n $scope.isSaving = false;\n }\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.modelOrig);\n };\n\n $scope.accessType = $scope.model.rfidAccessGroup.rfidAccessGroupID >= 253\n ? $scope.model.rfidAccessGroup.rfidAccessGroupID\n : 0;\n\n $scope.onAccessTypeChange = function (accessType) {\r\n if (accessType >= 253) {\r\n $scope.model.rfidAccessGroup.rfidAccessGroupID = accessType;\r\n } else {\r\n if ($scope.modelOrig.rfidAccessGroup.rfidAccessGroupID < 253) {\r\n $scope.model.rfidAccessGroup.rfidAccessGroupID = $scope.modelOrig.rfidAccessGroup.rfidAccessGroupID;\r\n } else {\r\n $scope.model.rfidAccessGroup.rfidAccessGroupID = 0;\r\n }\r\n }\r\n }\n\n $scope.detailTabs = [\n {\r\n title: 'TXT_MAIN',\n template: \"users/user-roles-detail-main-tab.html\"\r\n },{\r\n title: \"TXT_ADMIN_SECURITY\",\n template: \"users/user-roles-detail-admin-security-tab.html\",\n paneScrollable: true\r\n },{\r\n title: \"TXT_CLIENT_SECURITY\",\n template: \"users/user-roles-detail-client-security-tab.html\",\n paneScrollable: true\r\n }\n ];\n\n if (tenantSettingSvc.settings.enableRfidAccessGroups) {\r\n $scope.detailTabs.push({\r\n title: 'TXT_RFID_ACCESS_GROUP_TITLE',\r\n template: \"users/user-roles-detail-rfid-access-group-tab.html\"\r\n });\r\n }\n\n $scope.detailTabs.activeTab = 0;\n\n}]);\n","'use strict';\n\nwbApp.controller('UsersConsentsCtrl', ['$scope', '$http', '$q', '$modal', '$translate', '$filter', 'messageBoxSvc',\n 'consentSvc', 'gridSortSvc', 'securitySvc', 'userSvc', 'consentDefinitionSvc',\nfunction ($scope, $http, $q, $modal, $translate, $filter, messageBoxSvc,\n consentSvc, gridSortSvc, securitySvc, userSvc, consentDefinitionSvc) {\n\n $scope.filteredUsers = [];\n $scope.selectedUser = null;\n $scope.usersConsents = [];\n\n $scope.customFileter = { consentDefinitionID: null };\n\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"users/users-consents/detail-tabs/users-consents-detail.html\"\n }\n ];\n\n $scope.gridSettings = {\n name: 'usersConsents',\n columns: [\n {\n dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', sortOrder: 'asc',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'name', 'surname', 'middleName') }\n },\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '180px' },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '140px'\n },\n { dataField: 'customConsent', caption: $translate.instant(\"TXT_LBL_IDM_CONSENT\"), dataType: 'datetime', format: { date: 'short' }, width: '90px', visible: false },\n { dataField: 'idmEmailConfirmed', caption: $translate.instant('TXT_IDENTITY_CONFIRMED'), dataType: 'boolean', width: '90px' },\n { dataField: 'isDisabled', caption: $translate.instant('TXT_DISABLED'), dataType: 'boolean', width: '60px' },\n ],\n onInitialized: function (e) {\n $scope.dataGridInstance = e.component; \n },\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (!data.idmConsentIssued) {\n e.rowElement.addClass('text-danger');\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_LBL_CONSENTS_DEFINITIONS'),\n isVisible: function (row) { return securitySvc.isInRole('ConsentDefinition'); },\n callback: function (row) {\n $scope.showConsentsDefinitionsDetail();\n }\n }, {\n text: $translate.instant('TXT_LBL_REQUEST_CONSENT'),\n isVisible: function (row) { return securitySvc.isInRole('ConsentDefinition') && !!$scope.selectedUser; },\n callback: function (row) {\n $scope.requestConsentsFromAll([$scope.selectedUser]);\n }\n }, {\n text: $translate.instant('TXT_LBL_REQUEST_CONSENT_FROM_ALL'),\n isVisible: function (row) { return securitySvc.isInRole('ConsentDefinition'); },\n callback: function (row) {\n $scope.requestConsentsFromAll($scope.filteredUsers);\n }\n }, {\n text: $translate.instant('TXT_LBL_ANONYMIZE_DATA'),\n isVisible: function (row) { return securitySvc.isInRole('User.Anonymize'); },\n callback: function (row) {\n $scope.requestAnonimizeData($scope.selectedUser);\n }\n }]\n\n }\n\n $scope.$watch('customFilter.consentDefinitionID', function (newValue, oldValue) {\n if (newValue) {\n _.forEach($scope.usersConsents, function (item) {\n var idx = _.findIndex(item.consents, { 'consentDefinitionID': newValue });\n if (idx !== -1) {\n item.customConsent = item.consents[idx].consentRatifiedTo;\n } else {\n item.customConsent = null;\n }\n });\n\n if ($scope.dataGridInstance) {\n $scope.dataGridInstance.columnOption(\"customConsent\", \"visible\", true);\n\n consentDefinitionSvc.getConsentNameByIDAsync(newValue).then(function (consent) {\n $scope.dataGridInstance.columnOption(\"customConsent\", \"caption\", consent.name);\n });\n }\n } else {\n if ($scope.dataGridInstance) {\n $scope.dataGridInstance.columnOption(\"customConsent\", \"visible\", false);\n }\n\n _.forEach($scope.usersConsents, function (item) {\n item.customConsent = null;\n });\n }\n }, true);\n\n function setSelectedUser(data) {\n $scope.selectedUser = data;\n $scope.$broadcast('userConsentSelectionChanged', data);\n }\n\n function loadData(refresh) {\n $scope.usersConsents = consentSvc.getConsentsInfoBrief(refresh); \n }\n\n loadData(true);\n\n $scope.$on('refreshData', function (e, data) {\n loadData(true);\n\n setSelectedUser(null);\n });\n\n $scope.onFilterApplied = function (rows) {\n $scope.filteredUsers = rows;\n }\n\n $scope.onRowSelected = function (data) {\n setSelectedUser(data);\n }\n\n $scope.requestConsentsFromAll = function (selectedUsers) {\n requestConsentFromAllDialog.$promise.then(function () {\n requestConsentFromAllDialog.$scope.selectedUsers = selectedUsers;\n requestConsentFromAllDialog.show();\n });\n }\n\n\n $scope.showConsentsDefinitionsDetail = function () {\n consentsDefinitions.$promise.then(function () {\n consentsDefinitions.show();\n });\n }\n\n $scope.requestAnonimizeData = function (user) {\n\n function onYesClicked() {\n userSvc.anonymize(user.userID, false, function () {\n loadData(refresh);\n });\n }\n\n function onYesWithTaxDocumentClicked() {\n userSvc.anonymize(user.userID, true, function () {\n loadData(refresh);\n });\n }\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_ANONYMIZE_CONFIRM_TITLE',\n message: $translate.instant('TXT_ANONYMIZE_CONFIRM_DESC').f(user.fullName),\n buttons: [{\n text: 'TXT_BTN_YES',\n callback: onYesClicked,\n danger: true\n }, {\n text: 'TXT_BTN_YES_WITH_TAX_DOCUMENTS',\n callback: onYesWithTaxDocumentClicked,\n danger: true\n }, {\n text: 'TXT_BTN_NO',\n primary: true\n }]\n });\n }\n\n var consentsDefinitions = $modal({\n templateUrl: 'users/users-consents/consents-definitions.html',\n show: false,\n scope: $scope.$new()\n });\n\n var requestConsentFromAllDialog = $modal({\n templateUrl: 'users/users-consents/request-consent-from-all.html',\n show: false,\n scope: $scope.$new()\n });\n}]);\n\n\n","wbApp.controller('UsersConsentsDetailCtrl', ['$scope', '$modal', '$translate', 'consentSvc',\nfunction ($scope, $modal, $translate, consentSvc) {\n\n $scope.userConsentsDetails = [];\n\n $scope.$on('userConsentSelectionChanged', function (e, newlySelectedUser) {\n $scope.userConsentsDetails.length = 0;\n if (newlySelectedUser) {\n consentSvc.getConsentsInfoForUser(newlySelectedUser.userID).$promise.then(\n function (data) {\n $scope.userConsentsDetails.push.apply($scope.userConsentsDetails, data.consents);\n });\n }\n });\n\n $scope.userConsentsDetailGridSettings = {\n name: 'userConsentsDetail',\n columns: [\n { dataField: 'consentName', caption: $translate.instant('TXT_LBL_NAME'), dataType: 'string', sortOrder: 'asc', width: '130px' },\n { dataField: 'consentText', caption: $translate.instant('TXT_LBL_TEXT'), dataType: 'string' },\n\n { dataField: 'consentRatifiedAt', caption: $translate.instant('TXT_APPROVED_AT'), dataType: 'date', width: '90px' },\n { dataField: 'consentRevokedAt', caption: $translate.instant('TXT_DENIED_AT'), dataType: 'date', width: '90px' },\n\n { dataField: 'validFrom', caption: $translate.instant('TXT_LAB_VALID_FROM'), dataType: 'date', width: '90px' },\n { dataField: 'validTo', caption: $translate.instant('TXT_LAB_VALID_TO'), dataType: 'date', width: '90px' },\n ],\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (!!data.consentRevokedAt) {\n e.rowElement.addClass('text-danger');\n }\n else if (!!data.consentRatifiedAt) {\n e.rowElement.addClass('text-success');\n }\n }\n }\n }\n\n}]);\n","'use strict';\n\nwbApp.controller('UsersCtrl', ['$scope', '$http', '$q', '$modal', '$translate', '$filter', 'userSvc', 'userRolesSvc', \n 'referenceSourceSvc', 'gridSortSvc', 'securitySvc', 'messageBoxSvc', '$timeout', 'tenantSettingSvc',\nfunction ($scope, $http, $q, $modal, $translate, $filter, userSvc, userRolesSvc, \n referenceSourceSvc, gridSortSvc, securitySvc, messageBoxSvc, $timeout, tenantSettingSvc) {\n\n $scope.customFilter = { unfinishedRegistrations: false };\n $scope.users = [];\n \n $scope.tenantSetting = tenantSettingSvc.settings;\n let hasSecondContact =\n ($scope.tenantSetting.mandatoryEmail2 < 3) ||\n ($scope.tenantSetting.mandatoryPhone2 < 3) ||\n ($scope.tenantSetting.mandatoryUserNationality2 < 3) ||\n ($scope.tenantSetting.mandatoryUserName2 < 3) ||\n ($scope.tenantSetting.mandatoryUserSurname2 < 3) ||\n ($scope.tenantSetting.mandatoryUserMiddleName2 < 3) ||\n ($scope.tenantSetting.mandatoryUserAddress2 < 3) ||\n ($scope.tenantSetting.mandatoryUserIdentityCardNumber2 < 3) ||\n ($scope.tenantSetting.mandatoryUserPersonalIDNumber2 < 3) ||\n ($scope.tenantSetting.mandatoryUserBirthday2 < 3);\n \n \n $scope.$watch('customFilter.unfinishedRegistrations', function (newValue, oldValue) {\n $scope.users = userSvc.getAllAsync(true, !newValue);\n }, true); \n \n function sendInvitationToUser(usersToInvite, idx, progressCallback)\n {\n if (usersToInvite.length >= (idx + 1)) {\n var user = angular.copy(usersToInvite[idx]);\n user.requestBindToIDM = true;\n userSvc.update(user,\n function () {\n progressCallback({\n pctProgress: (((idx + 1) / usersToInvite.length) * 100) % 101,\n progressMsg: 'OK - ' + user.fullName + ' (' + user.email + ')',\n status: 0\n }); \n $timeout(function () {\n sendInvitationToUser(usersToInvite, idx + 1, progressCallback);\n }, 600);\n },\n function (error) {\n let errorMsg = _.join(_.map(error.errors || [], 'message'), ',');\n progressCallback({\n pctProgress: (((idx + 1) / usersToInvite.length) * 100) % 101,\n progressMsg: 'ERROR - ' + user.fullName + ' (' + user.email + ') : ' + errorMsg,\n status: 1\n });\n $timeout(function () {\n sendInvitationToUser(usersToInvite, idx + 1, progressCallback);\n }, 600);\n }, true);\n } else {\n progressCallback({\n pctProgress: 100,\n progressMsg: $translate.instant('TXT_FINISH'),\n status: 2\n });\n }\n }\n\n function sendInvitationToAll(reSendOnly) {\n\n function sendInvitationToAllImpl(usersToInvite) {\n if (usersToInvite.length > 0) {\n var callback = messageBoxSvc.showPctProgress(\n $translate.instant('TXT_SEND_INVITATION_PROGRESS_TITLE'),\n $translate.instant('TXT_SEND_INVITATION_PROGRESS_DESC'));\n sendInvitationToUser(usersToInvite, 0, callback);\n }\n }\n \n if (reSendOnly) {\n var boundUsersToReInvite = _.filter($scope.users, function (user) {\n return !user.isAnonymized && !user.isDisabled && !user.idmEmailConfirmed && user.boundToIDM && user.allowEmailContact;\n });\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_RE_SEND_INVITATION_CONFIRM_TITLE',\n message: $translate.instant('TXT_RE_SEND_INVITATION_CONFIRM_DESC').f(boundUsersToReInvite.length),\n buttons: [{\n text: 'TXT_BTN_SEND',\n callback: function () { sendInvitationToAllImpl(boundUsersToReInvite); }\n }, {\n text: 'TXT_BTN_CANCEL',\n primary: true\n }]\n });\n } else {\n var notBoundUsersToInvite = _.filter($scope.users, function (user) {\n return !user.isAnonymized && !user.isDisabled && !user.idmEmailConfirmed && !user.boundToIDM && user.allowEmailContact;\n });\n\n messageBoxSvc.showMessageDlg({\n title: 'TXT_SEND_INVITATION_CONFIRM_TITLE',\n message: $translate.instant('TXT_SEND_INVITATION_CONFIRM_DESC').f(notBoundUsersToInvite.length),\n buttons: [{\n text: 'TXT_BTN_SEND',\n callback: function () { sendInvitationToAllImpl(notBoundUsersToInvite); }\n }, {\n text: 'TXT_BTN_CANCEL',\n primary: true\n }]\n });\n }\n }\n\n $scope.gridSettings = {\n name: 'users',\n keyExpr: 'id',\n columns: [\n {\n dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', sortOrder: 'asc',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName(data, 'name', 'surname', 'middleName') }\n },\n {\n dataField: 'securityRoleID',\n caption: $translate.instant('TXT_LBL_ROLE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('userRole')(rowData.securityRoleID);\n },\n width: '100px'\n },\n { dataField: 'email', caption: $translate.instant('TXT_LBL_EMAIL'), dataType: 'string', width: '180px' },\n {\n dataField: 'phone',\n caption: $translate.instant('TXT_LBL_PHONE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('phone')(rowData.phone);\n },\n width: '140px'\n },\n { dataField: 'lastActivity', caption: $translate.instant(\"TXT_LBL_LAST_ACTIVITY\"), dataType: 'datetime', format: { datetime: 'short' }, width: '110px' },\n {\n dataField: 'referenceSourceID',\n caption: $translate.instant('TXT_LBL_REFERENCE'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('referenceSource')(rowData.referenceSourceID);\n },\n width: '100px'\n },\n { dataField: 'allowEmailContact', caption: $translate.instant('TXT_LBL_ALLOW_EMAIL_CONTACT'), dataType: 'boolean', width: '60px' },\n { dataField: 'idmEmailConfirmed', caption: $translate.instant('TXT_IDENTITY_CONFIRMED'), dataType: 'boolean', width: '60px' },\n ],\n shouldDisableExportMenu: function () {\n return !securitySvc.isInRole('User.Export');\n },\n onRowPrepared: function (e) {\n if (e.rowType == \"data\") {\n var data = e.component.getKeyByRowIndex(e.rowIndex);\n if (data.isDisabled) {\n e.rowElement.addClass('text-danger');\n }\n }\n },\n customCommands: [{\n text: $translate.instant('TXT_RE_SEND_INVITATION_CONFIRM_TITLE'),\n isVisible: function () { return securitySvc.isInRole('User.Update'); },\n callback: function (data) { sendInvitationToAll(true); }\n }, {\n text: $translate.instant('TXT_SEND_INVITATION_CONFIRM_TITLE'),\n isVisible: function () { return securitySvc.isInRole('User.Update'); },\n callback: function (data) { sendInvitationToAll(false); }\n }]\n }\n\n $q.all([userRolesSvc.getAllAsync().$promise, referenceSourceSvc.getAllAsync().$promise])\n .then(function () {\n $scope.users = userSvc.getAllAsync(true, !$scope.customFilter.unfinishedRegistrations);\n });\n\n $scope.$on('refreshData', function (e, data) {\n $q.all([userRolesSvc.getAllAsync().$promise, referenceSourceSvc.getAllAsync().$promise])\n .then(function () {\n $scope.users = userSvc.getAllAsync(true, !$scope.customFilter.unfinishedRegistrations);\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.selectRows([], false);\n }\n\n setSelectedUser(null); \n });\n });\n\n $scope.tabs = [\n {\n title: 'TXT_DETAIL',\n template: \"users/users-detail-tabs/detail.html\"\n },\n {\n title: 'TXT_LBL_STUDENTS',\n template: \"users/users-detail-tabs/students.html\"\n }\n ];\n \n if (hasSecondContact) {\n $scope.tabs.push({\n title: 'TXT_LBL_SECONDARY_CONTACT',\n template: \"users/users-detail-tabs/second-contact.html\"\n }); \n }\n \n $scope.tabs.activeTab = 0;\n\n $scope.$watch('tabs.activeTab', function (newValue, oldValue) {\n $scope.$broadcast('activeTabChanged', { activeTab: newValue });\n });\n\n function setSelectedUser(data) {\n $scope.selectedUser = data;\n $scope.$broadcast('userSelectionChanged', $scope.selectedUser);\n }\n\n $scope.selectedUser = {};\n\n $scope.onRowSelected = function (data) {\n setSelectedUser(data);\n }\n\n $scope.onRowAdd = function () {\n var userDetail = userSvc.createNew();\n\n detailDialogPromise.$promise.then(function () { \n detailDialogPromise.$scope.userDetail = angular.copy(userDetail);\n detailDialogPromise.$scope.userSaved = function (model) {\n if (!!$scope.gridSettings && !!$scope.gridSettings.gridInstance) {\n $scope.gridSettings.gridInstance.refresh(true);\n $scope.gridSettings.gridInstance.selectRows([model.id], false);\n $scope.gridSettings.gridInstance.navigateToRow(model.id);\n }\n }\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.userDetail = angular.copy(data);\n detailDialogPromise.$scope.userSaved = function (model) {\n\n },\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n userSvc.remove(data);\n }\n\n\n var detailDialogPromise = $modal({\n templateUrl: 'users/users-detail.html',\n show: false,\n scope: $scope\n });\n\n}]);\n\n\n","wbApp.controller('UsersDetailCtrl', ['$scope', 'userSvc', 'securitySvc', 'tenantSettingSvc', '$http', 'messageBoxSvc',\nfunction ($scope, userSvc, securitySvc, tenantSettingSvc, $http, messageBoxSvc) {\n\n $scope.userUpdateRole = securitySvc.isInRole('User.Update');\n \n $scope.tenantSetting = tenantSettingSvc.settings;\n let hasSecondContact =\n ($scope.tenantSetting.mandatoryEmail2 < 3) ||\n ($scope.tenantSetting.mandatoryPhone2 < 3) ||\n ($scope.tenantSetting.mandatoryUserNationality2 < 3) ||\n ($scope.tenantSetting.mandatoryUserName2 < 3) ||\n ($scope.tenantSetting.mandatoryUserSurname2 < 3) ||\n ($scope.tenantSetting.mandatoryUserMiddleName2 < 3) ||\n ($scope.tenantSetting.mandatoryUserAddress2 < 3) ||\n ($scope.tenantSetting.mandatoryUserIdentityCardNumber2 < 3) ||\n ($scope.tenantSetting.mandatoryUserPersonalIDNumber2 < 3) ||\n ($scope.tenantSetting.mandatoryUserBirthday2 < 3);\n \n $scope.IDMInfoLockedForEdit = $scope.userDetail.idmEmailConfirmed && $scope.userDetail.boundToIDM;\n $scope.userDetailOrig = angular.copy($scope.userDetail);\n $scope.isSaving = false;\n \n $scope.onIDMLockClick = function() {\n if ($scope.IDMInfoLockedForEdit) {\n messageBoxSvc.showMessageDlg({\n title: 'TXT_TITLE_INFORMATION',\n message: 'TXT_ENABLE_IDM_EDIT',\n buttons: [{\n text: 'TXT_BTN_CANCEL'\n }, {\n text: 'TXT_BTN_OK',\n callback: function () {\n $scope.IDMInfoLockedForEdit = !$scope.IDMInfoLockedForEdit;\n }\n }]\n });\n } else {\n $scope.IDMInfoLockedForEdit = !$scope.IDMInfoLockedForEdit;\n }\n }\n\n $scope.onUserDetailSave = function (data) {\n if ($scope.isSaving) {\n return;\n }\n\n $scope.isSaving = true;\n\n if (data.isNew) {\n userSvc.insert(data, success, error);\n } else {\n data.overrideIDMProperties = !$scope.IDMInfoLockedForEdit; // && securitySvc.isInRole('User.Update');\n userSvc.update(data, success, error);\n //data.overrideIDMProperties = false;\n }\n\n function success(newUser) {\n $scope.isSaving = false;\n if (!!$scope.userSaved) {\n $scope.userSaved(newUser);\n }\n $scope.$hide();\n }\n\n function error(errorResult) {\n $scope.isSaving = false;\n $scope.userDetailError = errorResult;\n }\n }\n\n $scope.onUserDetailSaveWithIDMRequest = function (data) {\n data.requestBindToIDM = true;\n $scope.onUserDetailSave(data);\n }\n\n $scope.detailIsUnchanged = function (data) {\n return angular.equals(data, $scope.userDetailOrig) && !$scope.preFilled;\n }\n\n\n $scope.typeAheadAddress = [];\n\n $scope.allMatch = function () {\n return true;\n };\n\n $scope.getAddress = function (viewValue) {\n if (viewValue) {\n let params = {\n address: viewValue,\n language: 'cs',\n region: 'cz',\n bounds: '48.270777,12.172380|51.246709,19.922157', // Czech republic bounds\n key: 'AIzaSyDdpRFWJaEcASaUgQxTdi8i42aaCaKfS0A'\n };\n return $http.get('https://maps.googleapis.com/maps/api/geocode/json', { params: params })\n .then(function (res) {\n $scope.typeAheadAddress.length = 0;\n $scope.typeAheadAddress.push.apply($scope.typeAheadAddress, res.data.results);\n });\n }\n };\n\n $scope.detailTabs = [\n {\n title: 'TXT_USER_ACCOUNT',\n template: \"users/users-detail-main-tab.html\"\n },\n {\n title: \"TXT_LBL_CONTACT_DETAILS\",\n template: \"users/users-detail-contact-tab.html\"\n }];\n \n if (hasSecondContact) {\n $scope.detailTabs.push({\n title: \"TXT_LBL_SECONDARY_CONTACT\",\n template: \"users/users-detail-second-contact-tab.html\"\n })\n }\n \n $scope.detailTabs.push({\n title: \"TXT_LBL_ADITIONAL\",\n template: \"users/users-detail-aditional-tab.html\"\n });\n\n $scope.detailTabs.activeTab = 0;\n\n}]);\n","wbApp.controller('UsersStudentsCtrl', ['$scope', '$modal', '$translate', '$filter', 'studentSvc', 'gridSortSvc',\nfunction ($scope, $modal, $translate, $filter, studentSvc, gridSortSvc) {\n\n $scope.$on('userSelectionChanged', function (e, newlySelectedUser) {\n if (newlySelectedUser) {\n if (!$scope.user || ($scope.user.id !== newlySelectedUser.id)) {\n $scope.selectedUserStudents = studentSvc.getAllByUserIDAsync(newlySelectedUser.id);\n \n }\n }\n else {\n $scope.selectedUserStudents = [];\n }\n\n $scope.user = newlySelectedUser;\n });\n\n $scope.selectedUserStudents = [];\n $scope.user = {};\n\n $scope.studentsGridSettings = {\n name: 'students',\n columns: [\n {\n dataField: 'fullName', caption: $translate.instant('TXT_HUMAN_NAME'), dataType: 'string', width: '180', sortOrder: 'asc',\n calculateSortValue: function (data) { return gridSortSvc.sortHumanFullName2(data, 'fullName') }\n },\n { dataField: 'adminNotes', caption: $translate.instant('TXT_LBL_NOTE'), dataType: 'string' },\n { dataField: 'age', caption: $translate.instant(\"TXT_LBL_AGE\"), dataType: 'string', width: '70px' },\n {\n dataField: 'gender',\n caption: $translate.instant('TXT_LBL_GENDER'),\n dataType: 'string',\n calculateCellValue: function (rowData) {\n return $filter('gender')(rowData.gender);\n },\n width: '70px'\n },\n { dataField: 'birthday', caption: $translate.instant(\"TXT_LAB_BIRTHDAY\"), dataType: 'date', format: { date: 'short' }, width: '100px' },\n ],\n shouldDisableAdd: function () { return !$scope.user; },\n };\n\n $scope.onRowEdit = function (data) {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.selectedUserStudents;\n detailDialogPromise.$scope.model = angular.copy(data);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowAdd = function () {\n detailDialogPromise.$promise.then(function () {\n detailDialogPromise.$scope.collection = $scope.selectedUserStudents;\n detailDialogPromise.$scope.model = studentSvc.createNew($scope.user);\n detailDialogPromise.show();\n });\n }\n\n $scope.onRowDelete = function (data) {\n studentSvc.remove(data, null, $scope.selectedUserStudents);\n }\n\n var detailDialogPromise = $modal({\n templateUrl: 'users/students/students-detail.html',\n show: false,\n scope: $scope.$new()\n });\n\n}]);\n","wbApp.directive('wbAvailabilityScheduleEditor', [\n function () {\n\n return {\n restrict: 'A',\n priority: 1,\n scope: {\n ngModel: '='\n },\n templateUrl: 'users/directives/availability-schedule-editor.html',\n link: function (scope, elem, attrs) {\n\n scope.cols = [];\n for (var i = 0; i < 24 * 2; i++) {\n var minutes = (i * 60 / 2);\n var mday = moment(scope.ngModel.day).add(minutes, 'm');\n\n var idx = _.find(scope.ngModel.periods, function (p) {\n return p.start <= mday && p.end > mday;\n });\n\n var selected = idx !== undefined;\n var grpIdx = idx + 1;\n\n scope.cols.push({\n idx: i,\n selected: selected,\n grpIndex: grpIdx\n });\n }\n\n scope.hours = [];\n for (var i = 0; i < 24; i++) {\n scope.hours.push(i);\n }\n\n\n scope.isSelecting = false;\n scope.isDeselecting = false;\n scope.startIdx = null;\n scope.lastSelectedCell = null;\n scope.grpIndex = 0;\n\n scope.onMouseDown = function (col) {\n if (col.selected) {\n scope.isSelecting = false;\n scope.isDeselecting = true;\n } else {\n scope.isSelecting = true;\n scope.isDeselecting = false;\n }\n scope.startIdx = col.idx;\n scope.lastSelectedCell = col; \n\n markAllToIndex(col.idx);\n }\n\n scope.onMouseUp = function (col) {\n scope.isSelecting = false;\n scope.isDeselecting = false;\n scope.startIdx = null;\n scope.lastSelectedCell = null;\n\n for (var i = 0; i < 24 * 2; i++) {\n scope.cols[i].changed = false;\n }\n }\n\n function getPeriodByIndex(idx) {\n if (!scope.ngModel.periods || scope.ngModel.periods.length < idx) {\n scope.ngModel.periods.push({});\n }\n return scope.ngModel.periods[idx - 1];\n }\n\n function colAssignPeriod(col, s, e) { \n var period = getPeriodByIndex(col.grpIndex);\n \n period.start = moment(scope.ngModel.day).add((s * 60 / 2), 'm');\n period.end = moment(scope.ngModel.day).add(((e + 1) * 60 / 2), 'm');\n\n if (period.start.isBefore(period.end, 'day')) {\n period.end.subtract(1, 'second');\n }\n }\n\n function resetPeriods() {\n scope.ngModel.periods = [];\n }\n\n function markAllToIndex(idx) {\n\n resetPeriods();\n\n if (scope.isSelecting || scope.isDeselecting) {\n var s = scope.startIdx <= idx ? scope.startIdx : idx;\n var e = scope.startIdx <= idx ? idx : scope.startIdx;\n\n scope.grpIndex = 0;\n\n var lastSelectedIdx = -2;\n var grpStart = 0;\n\n for (var i = 0; i < 24 * 2; i++) {\n var col = scope.cols[i];\n if (i >= s && i <= e) { \n if (scope.isSelecting) {\n col.selected = true;\n col.changed = true;\n } else if (scope.isDeselecting) {\n col.selected = false;\n col.changed = true;\n }\n } else {\n if (col.changed) {\n col.changed = false;\n col.selected = !col.selected;\n }\n }\n\n if (col.selected) {\n if ((col.idx - lastSelectedIdx) <= 1) {\n col.grpIndex = scope.grpIndex;\n colAssignPeriod(col, grpStart, col.idx);\n } else {\n scope.grpIndex = scope.grpIndex + 1;\n col.grpIndex = scope.grpIndex;\n grpStart = col.idx;\n colAssignPeriod(col, grpStart, col.idx);\n }\n lastSelectedIdx = col.idx;\n } else {\n col.grpIndex = null;\n }\n\n }\n }\n\n //console.log(JSON.stringify(scope.ngModel));\n }\n\n scope.onMouseMove = function (col) {\n if (scope.isSelecting || scope.isDeselecting) {\n if (scope.lastSelectedCell !== col) {\n markAllToIndex(col.idx);\n }\n\n scope.lastSelectedCell = col;\n }\n }\n\n\n }\n }\n }]);","wbApp.directive('wbConsentDefinitionCombo', ['$timeout', '$translate', 'consentDefinitionSvc',\n function ($timeout, $translate, consentDefinitionSvc) {\n function formatResult(model) {\n if (!model) { return; }\n\n var name;\n if (!model.active) {\n name = model.name + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n name = model.name;\n }\n\n return name;\n }\n\n function formatSelection(model) {\n if (!model.active) {\n return model.name + ' (' + $translate.instant('TXT_VAL_NOT_ACTIVE') + ')';\n } else {\n return model.name;\n }\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1, \n link: function (scope, elm, attrs, ctrl) {\n \n $timeout(function () {\n\n var models = consentDefinitionSvc.getAllActiveAsync(false, ctrl.$modelValue);\n\n $(elm).select2({\n placeholder: $translate.instant('TXT_PLACEHOLDER_SELECT_CONSENT_DEFINITION'),\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: true,\n minimumResultsForSearch: 5,\n data: models,\n id: function (consentDefinition) { return consentDefinition.consentDefinitionID; },\n matcher: function (term, text, data) {\n return data.name.toUpperCase().indexOf(term.toUpperCase()) >= 0;\n }\n });\n\n ctrl.$render = function () {\n models.$promise.then(function () {\n $timeout(function () {\n $(elm).select2('val', ctrl.$viewValue);\n });\n });\n }\n\n ctrl.$render();\n });\n\n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function (e) {\n scope.$apply(function () {\n ctrl.$setViewValue(e.val);\n });\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n }\n }\n }]); ","wbApp.directive('wbConsentTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n\n function formatResult(item) {\n if (!item) { return; }\n\n return $translate.instant(item.text);\n }\n\n function formatSelection(item) {\n return $translate.instant(item.text);\n }\n\n return {\n restrict: 'A',\n require: 'ngModel',\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs, ctrl) {\n \n ctrl.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n ctrl.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n data: [\n { id: 1, text: 'TXT_CONSENT_TYPE_GENERIC' },\n { id: 2, text: 'TXT_CONSENT_TYPE_MARKETING' }]\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n ctrl.$render = function () {\n $(elm).select2('val', ctrl.$viewValue);\n }\n\n ctrl.$render();\n }, 1);\n }\n }\n }]);\n","wbApp.directive('wbRfidAccessGroupTimeScheduleDayEditor', [\n function () {\n\n return {\n restrict: 'A',\n priority: 1,\n scope: {\n ngModel: '='\n },\n templateUrl: 'users/directives/rfid-access-group-time-schedule-day-editor.html',\n link: function (scope, elem, attrs) {\n\n scope.cols = [];\n for (var i = 0; i < 24 * 4; i++) {\r\n var minutes = (i * 60 / 4);\r\n\r\n var selected = (scope.ngModel.period0.startTime <= minutes && scope.ngModel.period0.endTime > minutes) ||\r\n (scope.ngModel.period1.startTime <= minutes && scope.ngModel.period1.endTime > minutes) ||\r\n (scope.ngModel.period2.startTime <= minutes && scope.ngModel.period2.endTime > minutes) ||\r\n (scope.ngModel.period3.startTime <= minutes && scope.ngModel.period3.endTime > minutes) ||\r\n (scope.ngModel.period4.startTime <= minutes && scope.ngModel.period4.endTime > minutes);\r\n\r\n var grpIdx = 0;\r\n grpIdx = (scope.ngModel.period0.startTime <= minutes && scope.ngModel.period0.endTime > minutes) ? 1 : grpIdx;\r\n grpIdx = (scope.ngModel.period1.startTime <= minutes && scope.ngModel.period1.endTime > minutes) ? 2 : grpIdx;\r\n grpIdx = (scope.ngModel.period2.startTime <= minutes && scope.ngModel.period2.endTime > minutes) ? 3 : grpIdx;\r\n grpIdx = (scope.ngModel.period3.startTime <= minutes && scope.ngModel.period3.endTime > minutes) ? 4 : grpIdx;\r\n grpIdx = (scope.ngModel.period4.startTime <= minutes && scope.ngModel.period4.endTime > minutes) ? 5 : grpIdx;\r\n\r\n scope.cols.push({\r\n idx: i,\r\n selected: selected,\r\n grpIndex: grpIdx\r\n });\r\n }\n\n scope.hours = [];\n for (var i = 0; i < 24; i++) {\r\n scope.hours.push(i);\r\n }\n\n\n scope.isSelecting = false;\n scope.isDeselecting = false;\n scope.startIdx = null;\n scope.lastSelectedCell = null;\n scope.grpIndex = 0;\n\n scope.onMouseDown = function (col) {\r\n if (col.selected) {\r\n scope.isSelecting = false;\r\n scope.isDeselecting = true;\r\n } else {\r\n scope.isSelecting = true;\r\n scope.isDeselecting = false;\r\n }\r\n scope.startIdx = col.idx;\r\n scope.lastSelectedCell = col; \r\n\r\n markAllToIndex(col.idx);\r\n }\n\n scope.onMouseUp = function (col) {\r\n scope.isSelecting = false;\r\n scope.isDeselecting = false;\r\n scope.startIdx = null;\n scope.lastSelectedCell = null;\r\n\r\n for (var i = 0; i < 24 * 4; i++) {\r\n scope.cols[i].changed = false;\r\n }\r\n }\n\n function getPeriodByIndex(idx) {\r\n return scope.ngModel[\"period\" + ((idx) - 1)];\r\n }\n\n function colAssignPeriod(col, s, e) {\r\n if (col.grpIndex <= 5) {\r\n var period = getPeriodByIndex(col.grpIndex);\r\n \r\n period.startTime = (s * 60 / 4);\r\n period.endTime = ((e + 1) * 60 / 4);\r\n }\r\n }\n\n function resetPeriods() {\r\n scope.ngModel.period0.startTime = 0;\r\n scope.ngModel.period0.endTime = 0;\r\n scope.ngModel.period1.startTime = 0;\r\n scope.ngModel.period1.endTime = 0;\r\n scope.ngModel.period2.startTime = 0;\r\n scope.ngModel.period2.endTime = 0;\r\n scope.ngModel.period3.startTime = 0;\r\n scope.ngModel.period3.endTime = 0;\r\n scope.ngModel.period4.startTime = 0;\r\n scope.ngModel.period4.endTime = 0;\r\n }\n\n function markAllToIndex(idx) {\r\n\r\n resetPeriods();\r\n\r\n if (scope.isSelecting || scope.isDeselecting) {\r\n var s = scope.startIdx <= idx ? scope.startIdx : idx;\r\n var e = scope.startIdx <= idx ? idx : scope.startIdx;\r\n\r\n scope.grpIndex = 0;\r\n\r\n var lastSelectedIdx = -2;\r\n var grpStart = 0;\r\n\r\n for (var i = 0; i < 24 * 4; i++) {\r\n var col = scope.cols[i];\r\n if (i >= s && i <= e) { \r\n if (scope.isSelecting) {\r\n col.selected = true;\r\n col.changed = true;\r\n } else if (scope.isDeselecting) {\r\n col.selected = false;\r\n col.changed = true;\r\n }\r\n } else {\r\n if (col.changed) {\r\n col.changed = false;\r\n col.selected = !col.selected;\r\n }\r\n }\r\n\r\n if (col.selected) {\r\n if ((col.idx - lastSelectedIdx) <= 1) {\r\n col.grpIndex = scope.grpIndex;\r\n colAssignPeriod(col, grpStart, col.idx);\r\n } else {\r\n scope.grpIndex = scope.grpIndex + 1;\r\n col.grpIndex = scope.grpIndex;\r\n grpStart = col.idx;\r\n colAssignPeriod(col, grpStart, col.idx);\r\n }\r\n lastSelectedIdx = col.idx;\r\n } else {\r\n col.grpIndex = null;\r\n }\r\n\r\n }\r\n }\r\n\r\n console.log(JSON.stringify(scope.ngModel));\r\n }\n\n scope.onMouseMove = function (col) {\r\n if (scope.isSelecting || scope.isDeselecting) {\r\n if (scope.lastSelectedCell !== col) {\r\n markAllToIndex(col.idx);\r\n }\r\n\r\n scope.lastSelectedCell = col;\r\n }\r\n }\n\n\n }\n }\n }]);","wbApp.directive('wbRfidAccessTypeCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return \"\"; }\n\n if (data.id === 255) {\r\n return ' ' + $translate.instant(data.text);\r\n }\n if (data.id === 253) {\r\n return ' ' + $translate.instant(data.text);\r\n }\n if (data.id === 0) {\r\n return ' ' + $translate.instant(data.text);\r\n }\n }\n\n function formatSelection(data) {\n return formatResult(data);\n }\n\n return {\r\n restrict: 'A',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\r\n\n $timeout(function () {\r\n $(elm).select2({\r\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 255, text: 'TXT_VAL_FULL_ACCESS' },\n { id: 253, text: 'TXT_VAL_NO_ACCESS' },\n { id: 0, text: 'TXT_VAL_CUSTOM_ACCESS' }\n ]\r\n });\n\n controller.$render();\r\n });\n\n controller.$render = function () {\r\n elm.select2('val', controller.$viewValue);\r\n };\n\n controller.$parsers.unshift(function (viewValue) {\r\n if (!viewValue) {\r\n return 0;\r\n } else {\r\n return parseInt(viewValue);\r\n }\r\n });\n\n controller.$formatters.unshift(function (value) {\r\n if (!value) {\r\n return \"0\";\r\n } else {\r\n return value + \"\";\r\n }\r\n });\n\n elm.on('change', function () {\r\n scope.$apply(function () {\r\n controller.$setViewValue(elm.select2('val'));\r\n });\r\n });\n\n attrs.$observe('disabled', function (value) {\r\n elm.select2('enable', !value);\r\n });\n\n attrs.$observe('readonly', function (value) {\r\n elm.select2('readonly', !!value);\r\n });\n\n elm.bind(\"$destroy\", function () {\r\n elm.select2(\"destroy\");\r\n });\r\n\n }\r\n }\n }]);","wbApp.filter('wbAvailabilityScheduleFilter', [function () {\n\n function printPeriod(period) {\n return moment(period.start).format('HH:mm') + \"-\" + moment(period.end).format('HH:mm');\n }\n\n return function (input) {\n\n var ret = \"\";\n\n _.forEach(input.periods, function (p) {\n if (ret) {\n ret = ret + \", \" + printPeriod(p);\n } else {\n ret = ret + printPeriod(p);\n }\n \n });\n\n if (ret !== \"\") {\n return \"(\" + ret + \")\"\n }\n\n return ret;\n };\n}]);","wbApp.filter('wbConsentType', ['$translate', function ($translate) {\n return function (input) {\n switch (input) {\n case 1:\n return $translate.instant('TXT_CONSENT_TYPE_GENERIC');\n case 2:\n return $translate.instant('TXT_CONSENT_TYPE_MARKETING'); \n default:\n return '';\n }\n };\n}]);","wbApp.filter('wbRfidAccessGroupTimeScheduleDayFilter', [function () {\n\n function printPeriod(line, period) {\r\n var ret = \"\";\r\n\r\n if (!!period && (period.endTime - period.startTime) > 0) {\r\n\r\n if (line !== \"\") {\r\n ret = ret + \", \";\r\n }\r\n\r\n var startHour = Math.floor(period.startTime / 60);\r\n var startMinute = Math.floor(period.startTime % 60);\r\n var endHour = Math.floor(period.endTime / 60);\r\n var endMinute = Math.floor(period.endTime % 60);\r\n\r\n ret = ret + \"\" + (\"0\" + startHour).slice(-2) + \":\" + (\"0\" + startMinute).slice(-2);\r\n ret = ret + \" - \" + (\"0\" + endHour).slice(-2) + \":\" + (\"0\" + endMinute).slice(-2);\r\n }\r\n\r\n return ret;\r\n }\n\n return function (input) {\n\n var ret = \"\";\n\n ret = ret + printPeriod(ret, input.period0);\n ret = ret + printPeriod(ret, input.period1);\n ret = ret + printPeriod(ret, input.period2);\n ret = ret + printPeriod(ret, input.period3);\n ret = ret + printPeriod(ret, input.period4);\n\n if (ret !== \"\") {\r\n return \"(\" + ret + \")\"\r\n }\n\n return ret;\n };\n}]);","wbApp.factory('consentDefinitionSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n\n var ConsentDefinition = $resource('/Api/ConsentsDefinitions/:id', {}, {\n 'getAll': { method: 'GET', isArray: true, url: '/Api/ConsentsDefinitions/GetAll' },\n 'update': { method: 'POST', url: '/Api/ConsentsDefinitions/Update' },\n 'insert': { method: 'POST', url: '/Api/ConsentsDefinitions/Insert' },\n 'delete': { method: 'POST', url: '/Api/ConsentsDefinitions/Delete' }\n });\n\n var consentDefinitions;\n\n function getAllAsync(refresh) {\n\n if (!consentDefinitions || refresh) {\n consentDefinitions = repositorySvc.customGet('getAll', ConsentDefinition);\n }\n\n return consentDefinitions;\n }\n\n function getAllActiveAsync(refresh, consentDefinitionIDToInclude) {\n\n var sIDs = consentDefinitionIDToInclude || 0;\n\n var deffered = $q.defer();\n var filteredConsentDefinitions = [];\n filteredConsentDefinitions.$promise = deffered.promise;\n\n var all = getAllAsync(refresh);\n all.$promise.then(function (data) {\n\n var filtered = _.filter(data, function (item) {\n return item.active || item.consentDefinitionID == sIDs;\n });\n\n filteredConsentDefinitions.push.apply(filteredConsentDefinitions, filtered);\n deffered.resolve(filteredConsentDefinitions);\n\n }, function (error) {\n deffered.reject(error);\n });\n\n return filteredConsentDefinitions;\n }\n\n function insert(data, successCallback, errorCallback) {\n repositorySvc.insert(\n ConsentDefinition, // $resource\n consentDefinitions, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'consentDefinitionID');\n }\n\n\n function update(data, successCallback, errorCallback) {\n repositorySvc.update(\n ConsentDefinition, // $resource\n consentDefinitions, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'consentDefinitionID');\n }\n\n function remove(data, successCallback, errorCallback) {\n repositorySvc.remove(\n ConsentDefinition, // $resource\n consentDefinitions, // collection\n { consentDefinitionID: data.consentDefinitionID }, // entity\n successCallback,\n errorCallback,\n {\n consentDefinitionID: data.consentDefinitionID\n },\n 'consentDefinitionID');\n }\n\n function createNew() {\n return {\n consentDefinitionID: 0,\n consentTypeID: 1,\n active: true,\n validFrom: null,\n validTo: null,\n validToDays: 365\n };\n }\n\n function getConsentNameByIDAsync(consentDefinitionID) {\n return $q(function (resolve, reject) {\n getAllAsync().$promise.then(function (data) {\n resolve(_.find(data, { consentDefinitionID: consentDefinitionID }));\n }, function (error) {\n reject(error);\n });\n });\n }\n\n return {\n getAllAsync: getAllAsync,\n insert: insert,\n update: update,\n remove: remove,\n createNew: createNew,\n getAllActiveAsync: getAllActiveAsync,\n getConsentNameByIDAsync: getConsentNameByIDAsync\n }\n\n }]);","wbApp.factory('employeeAvailabilitySchedulesSvc', ['$resource', '$q', 'repositorySvc',\n function ($resource, $q, repositorySvc) {\n var AvailabilitySchedule = $resource('/restapi/employees/:employeeId/availability-schedules/:id', {}, {\n 'getRange': { method: 'GET', isArray: true, url: '/restapi/employees/:employeeId/availability-schedules/range' },\n 'updateRange': { method: 'PUT', url: '/restapi/employees/:employeeId/availability-schedules/range' }\n });\n\n function loadWeek(employeeId, date) {\n return $q(function (resolve, reject) {\n\n var startOfWeek = moment(date).startOf('isoWeek');\n var endOfWeek = moment(date).endOf('isoWeek').startOf('day');\n\n repositorySvc.customGet('getRange', AvailabilitySchedule, {\n employeeId: employeeId,\n from: startOfWeek.toDate(),\n to: endOfWeek.toDate(),\n }, function (data) {\n var result = [];\n for (var i = 0; i < 7; i++) {\n var dayData = _.find(data, function (d) {\n return moment(d.day).isSame(startOfWeek);\n });\n if (dayData) {\n result.push(dayData);\n } else {\n result.push({ day: startOfWeek.toDate(), periods: [] });\n }\n startOfWeek.add(1, 'day');\n }\n resolve(result);\n },\n function (error) {\n reject(error);\n }\n );\n });\n }\n\n function saveWeek(employeeId, date, model) {\n return $q(function (resolve, reject) {\n\n var startOfWeek = moment(date).startOf('isoWeek');\n var endOfWeek = moment(date).endOf('isoWeek').startOf('day');\n\n var filtered = _.filter(model, function (d) { return !!d.periods && d.periods.length > 0; });\n\n repositorySvc.customPutWithParams(\n 'updateRange', \n AvailabilitySchedule,\n {\n employeeId: employeeId,\n from: startOfWeek.toDate(),\n to: endOfWeek.toDate()\n },\n filtered,\n function (data) {\n resolve(data);\n },\n function (error) {\n reject(repositorySvc.extractErrorData(error));\n }\n );\n });\n }\n\n function saveWeekAsPaternForPeriod(employeeId, periodStart, periodEnd, weekModelTemplate) \n {\n return $q(function (resolve, reject) {\n var startOfWeekPeriod = moment(periodStart).startOf('isoWeek');\n var endOfWeekPeriod = moment(periodEnd).endOf('isoWeek').startOf('day');\n\n var filtered = _.filter(weekModelTemplate, function (d) { return !!d.periods && d.periods.length > 0; });\n\n var currentPeriod = moment(startOfWeekPeriod);\n var toSave = [];\n while (currentPeriod.isBefore(endOfWeekPeriod)) {\n\n if (filtered.length > 0) {\n var templateCopy = angular.copy(filtered);\n var timeDifference = moment.duration(currentPeriod.diff(moment(templateCopy[0].day).startOf('week')));\n\n _.forEach(templateCopy, function (d) {\n d.day = moment(d.day).add(timeDifference).toDate();\n _.forEach(d.periods, function (p) {\n p.start = moment(p.start).add(timeDifference).toDate();\n p.end = moment(p.end).add(timeDifference).toDate();\n });\n\n toSave.push(d);\n });\n }\n\n currentPeriod.add(1, 'week'); \n }\n\n repositorySvc.customPutWithParams(\n 'updateRange',\n AvailabilitySchedule,\n {\n employeeId: employeeId,\n from: startOfWeekPeriod.toDate(),\n to: endOfWeekPeriod.toDate()\n },\n toSave,\n function (data) {\n resolve(data);\n },\n function (error) {\n reject(repositorySvc.extractErrorData(error));\n }\n );\n });\n }\n\n return {\n loadWeek: loadWeek,\n saveWeek: saveWeek,\n saveWeekAsPaternForPeriod: saveWeekAsPaternForPeriod\n }\n }]);","wbApp.factory('groupSvc', ['$resource', '$q', '$sce', '$translate', 'repositorySvc',\n function ($resource, $q, $sce, $translate, repositorySvc) {\n var Label = $resource('/Api/Groups/:id', {}, {\n 'getAll': { method: 'GET', isArray: true, url: '/Api/Groups/GetAll' },\n 'update': { method: 'POST', url: '/Api/Groups/Update' },\n 'insert': { method: 'POST', url: '/Api/Groups/Insert' },\n 'delete': { method: 'POST', url: '/Api/Groups/Delete' }\n });\n\n function createNew() {\n return {\n color: 16711680\n };\n }\n\n function getAllAsync(addNoLabel) {\n var result = [];\n var deferred = $q.defer();\n result.$promise = deferred.promise;\n result.$resolved = false;\n\n var colorUtils = new webooker_utils.ColorUtils();\n\n repositorySvc.customGet('getAll', Label).$promise.then(function (data) {\n angular.forEach(data, function (item) {\n item.rgbColor = colorUtils.intToRgb(item.color);\n item.htmlCaption = $sce.trustAsHtml(' ' + item.name);\n result.push(item);\n });\n\n if (result.length > 0 && addNoLabel) {\n result.push({\n groupID: -1,\n rgbColor:'red',\n name: $translate.instant('TXT_WITHOUT_GROUP'),\n htmlCaption: ' ' + $translate.instant('TXT_WITHOUT_GROUP')\n });\n }\n deferred.resolve(result);\n result.$resolved = true;\n }, function (errorResult) {\n deferred.reject(errorResult);\n result.$resolved = true;\n });\n\n return result;\n }\n\n function insert(data, successCallback, errorCallback, collection) {\n repositorySvc.insert(\n Label, // $resource\n collection, // collection\n data, // entity\n successCallback,\n errorCallback);\n }\n\n function update(data, successCallback, errorCallback, collection) {\n repositorySvc.update(\n Label, // $resource\n collection, // collection\n data, // entity\n successCallback,\n errorCallback,\n 'groupID');\n }\n\n function remove(data, successCallback, errorCallback, collection) {\n repositorySvc.remove(\n Label, // $resource\n collection, // collection\n data, // entity\n successCallback,\n errorCallback, \n null,\n 'groupID');\n }\n\n return {\n getAllAsync: getAllAsync,\n insert: insert,\n update: update,\n remove: remove,\n createNew: createNew\n }\n }]);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region Employee - Ctor\n ns.Employee = function Employee(selectedSchedules) {\n this.initialize(selectedSchedules);\n };\n // #endregion\n\n // #region Employee - Inheritance\n\n ns.Employee.prototype = new ns.ScheduleResourceBase();\n ns.Employee.prototype.constructor = ns.ScheduleResourceBase;\n ns.Employee.prototype.parent = ns.ScheduleResourceBase.prototype;\n\n // #endregion\n\n})(webooker_acivity_models);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region EmployeeDetail - Ctor\n ns.EmployeeDetail = function EmployeeDetail(instructors, schedules, employeeID, activityID) {\n this.instructors = instructors;\n this.initialize(instructors, schedules, employeeID, activityID);\n }\n // #endregion\n\n\n // #region EmployeeDetail - Inheritance\n\n ns.EmployeeDetail.prototype = new ns.ScheduleResourceDetailBase();\n ns.EmployeeDetail.prototype.constructor = ns.EmployeeDetail;\n ns.EmployeeDetail.prototype.parent = ns.ScheduleResourceDetailBase.prototype;\n\n // #endregion\n\n // #region EmployeeDetail - Methods\n\n ns.EmployeeDetail.prototype.createDayModel = function (reservations, schedules, dayOfWeek, dayName, resourceID, activityID) {\n return new ns.EmployeeDetailDay(reservations, schedules, dayOfWeek, dayName, resourceID, activityID);\n }\n\n // #endregion\n\n}(webooker_acivity_models));\n","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region EmployeeDetailDay - Ctor\n ns.EmployeeDetailDay = function EmployeeDetailDay(reservations, schedules, dayOfWeek, dayName, employeeID, activityID) {\n this.initialize(reservations, schedules, dayOfWeek, dayName, employeeID, activityID);\n }\n // #endregion\n\n // #region EmployeeDetailDay - Inheritance\n\n ns.EmployeeDetailDay.prototype = new ns.ScheduleResourceDetailDayBase();\n ns.EmployeeDetailDay.prototype.constructor = ns.EmployeeDetailDay;\n ns.EmployeeDetailDay.prototype.parent = ns.ScheduleResourceDetailDayBase.prototype;\n\n // #endregion\n\n // #region EmployeeDetailDay - Methods\n ns.EmployeeDetailDay.prototype.createReservation = function (activityScheduleID) {\n return {\n activityInstructorID: 0,\n activityID: this.activityID,\n employeeID: this.resourceID,\n activityScheduleID: activityScheduleID,\n firstPeriodStartDate: null,\n firstPeriodEndDate: null,\n secondPeriodStartDate: null,\n secondPeriodEndDate: null,\n notes: null\n };\n }\n\n}(webooker_acivity_models));\n","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region Reconciliation - Ctor \n ns.Reconciliation = function Reconciliation($translate, calcSnacksOnlyForPresent) {\n this.attendance = [];\n this.calcSnacksOnlyForPresent = calcSnacksOnlyForPresent;\n // from InvoiceBase\n this.resetFields();\n if ($translate) {\n this.initLocalization($translate);\n }\n }\n // #endregion\n\n // #region InvoiceBase - Inheritance\n\n ns.Reconciliation.prototype = new ns.InvoiceBase();\n ns.Reconciliation.prototype.constructor = ns.InvoiceBase;\n ns.Reconciliation.prototype.parent = ns.InvoiceBase.prototype;\n\n // #endregion\n\n // #region Reconciliation - Methods\n\n ns.Reconciliation.prototype.getReconciliationDetailDTO = function ($translate) {\n var res = { reconciliation: {}, attendance: [], invoice: { lineItems: [] } };\n\n res.reconciliation.activityReconciliationID = this.activityReconciliationID;\n res.reconciliation.studentID = this.studentID;\n res.reconciliation.activityID = this.activityID;\n res.reconciliation.name = this.name;\n res.reconciliation.notes = this.notes;\n res.reconciliation.reconciledAt = this.reconciledAt || new Date();\n res.reconciliation.notificationSentAt = this.notificationSentAt;\n\n res.invoice = this.getInvoiceDTO($translate);\n\n for (var a = 0; a < this.attendance.length; a++) {\n var att = this.attendance[a];\n if (att.isSelected) {\n res.attendance.push(att.getReconciliationAttendanceDTO.call(att));\n }\n }\n\n return res;\n }\n\n ns.Reconciliation.prototype.initData = function (reconciliationDetailDTO) {\n\n // reconciliation\n this.studentID = reconciliationDetailDTO.reconciliation.studentID;\n this.activityID = reconciliationDetailDTO.reconciliation.activityID;\n this.activityReconciliationID = reconciliationDetailDTO.reconciliation.activityReconciliationID;\n this.name = reconciliationDetailDTO.reconciliation.name;\n this.notes = reconciliationDetailDTO.reconciliation.notes;\n this.reconciledAt = reconciliationDetailDTO.reconciliation.reconciledAt;\n this.notificationSentAt = reconciliationDetailDTO.reconciliation.notificationSentAt;\n this.activity = reconciliationDetailDTO.activity;\n this.activityStudentSetting = reconciliationDetailDTO.activityStudentSetting;\n\n this.initDataAttendance(reconciliationDetailDTO);\n\n if (this.activityStudentSetting && this.activityStudentSetting.tariffPrice) {\n this.invoiceLineKindergartenFeeUnitPrice = this.activityStudentSetting.tariffPrice;\n this.invoiceLineKindergartenFeeQty = 1;\n }\n\n this.initDataByInvoiceDTO(reconciliationDetailDTO.invoice);\n\n this.initDataActivity(reconciliationDetailDTO);\n\n }\n\n ns.Reconciliation.prototype.initDataActivity = function (reconciliationDetailDTO) {\n if (!reconciliationDetailDTO.invoice || !reconciliationDetailDTO.invoice.invoiceID || reconciliationDetailDTO.invoice.invoiceID == \"0\") {\n this.invoiceLineKindergartenLunchUnitPrice = reconciliationDetailDTO.activity.defaultLunchPrice || 0;\n this.invoiceLineKindergartenSnackUnitPrice = reconciliationDetailDTO.activity.defaultSnackPrice || 0;\n this.invoiceLineKindergartenLatePickupUnitPrice = reconciliationDetailDTO.activity.defaultLatePickupPrice || 0;\n }\n }\n\n ns.Reconciliation.prototype.initDataAttendance = function (reconciliationDetailDTO) {\n var att = [];\n for (var i = 0; i < reconciliationDetailDTO.attendance.length; i++) {\n var amodel = new webooker_acivity_models.ReconciliationAttendance(reconciliationDetailDTO.attendance[i], this.activityReconciliationID, this.calcSnacksOnlyForPresent);\n att.push(amodel);\n if (this.activityReconciliationID && this.activityReconciliationID === amodel.attendance.activityReconciliationID) {\n amodel.isSelected = true;\n } else {\n amodel.isSelected = false;\n }\n }\n this.attendance.push.apply(this.attendance, att);\n }\n\n\n // #region Reconciliation - Properties\n\n Object.defineProperty(ns.Reconciliation.prototype, 'noOfLunches', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected && a.lunch === '\\u2713') {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'noFirstSnacks', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected && a.firstSnack === '\\u2713') {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'noSecondSnacks', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected && a.secondSnack === '\\u2713') {\n count++;\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'fullDayRegisteredAttendance', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.firstPeriodRegistered && a.attendance.secondPeriodRegistered) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'shortDayRegisteredAttendance', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.firstPeriodRegistered &&\n a.attendance.secondPeriodRegistered &&\n a.attendance.secondPeriodAttendanceShortened) {\n count++;\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodOnlyRegisteredAttendance', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.firstPeriodRegistered &&\n !a.attendance.secondPeriodRegistered) {\n count++;\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodOnlyRegisteredAttendance', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n !a.attendance.firstPeriodRegistered &&\n a.attendance.secondPeriodRegistered) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'fullDayActualAttendanceNoOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (((a.attendance.firstPeriodAttendanceTypeID == 0 &&\n a.attendance.firstPeriodRegistered) || (a.attendance.firstPeriodAttendanceTypeID == 2)) &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3) &&\n ((a.attendance.secondPeriodAttendanceTypeID == 0 && \n a.attendance.secondPeriodRegistered) || (a.attendance.secondPeriodAttendanceTypeID == 2)) &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3)) {\n count++;\n }\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'shortDayActualAttendanceNoOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (((a.attendance.firstPeriodAttendanceTypeID == 0 &&\n a.attendance.firstPeriodRegistered) || (a.attendance.firstPeriodAttendanceTypeID == 2)) &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3) &&\n ((a.attendance.secondPeriodAttendanceTypeID == 0 &&\n a.attendance.secondPeriodRegistered) || (a.attendance.secondPeriodAttendanceTypeID == 2)) &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3) &&\n a.attendance.secondPeriodAttendanceShortened) {\n count++;\n }\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodOnlyActualAttendanceNoOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if ((((a.attendance.firstPeriodAttendanceTypeID == 0 &&\n a.attendance.firstPeriodRegistered) || (a.attendance.firstPeriodAttendanceTypeID == 2)) &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3)) &&\n !(((a.attendance.secondPeriodAttendanceTypeID == 0 &&\n a.attendance.secondPeriodRegistered) || (a.attendance.secondPeriodAttendanceTypeID == 2)) &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3))) {\n count++;\n }\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodOnlyActualAttendanceNoOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (!(((a.attendance.firstPeriodAttendanceTypeID == 0 &&\n a.attendance.firstPeriodRegistered) || (a.attendance.firstPeriodAttendanceTypeID == 2)) &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3)) &&\n (((a.attendance.secondPeriodAttendanceTypeID == 0 &&\n a.attendance.secondPeriodRegistered) || (a.attendance.secondPeriodAttendanceTypeID == 2)) &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3))) {\n count++;\n }\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'fullDayOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (a.attendance.firstPeriodAttendanceTypeID == 1 &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3) &&\n a.attendance.secondPeriodAttendanceTypeID == 1 &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3)) {\n count++;\n }\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'shortDayOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (a.attendance.firstPeriodAttendanceTypeID == 1 &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3) &&\n a.attendance.secondPeriodAttendanceTypeID == 1 &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3) &&\n a.attendance.secondPeriodAttendanceShortened) {\n count++;\n }\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodOnlyOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (a.attendance.firstPeriodAttendanceTypeID == 1 &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3) &&\n !(a.attendance.secondPeriodAttendanceTypeID == 1 &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3))) {\n count++;\n }\n }\n\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodOnlyOneOffs', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n if (!(a.attendance.firstPeriodAttendanceTypeID == 1 &&\n (a.attendance.firstPeriodAttendanceStatusID == 0 ||\n a.attendance.firstPeriodAttendanceStatusID == 1 ||\n a.attendance.firstPeriodAttendanceStatusID == 3)) &&\n (a.attendance.secondPeriodAttendanceTypeID == 1 &&\n (a.attendance.secondPeriodAttendanceStatusID == 0 ||\n a.attendance.secondPeriodAttendanceStatusID == 1 ||\n a.attendance.secondPeriodAttendanceStatusID == 3))) {\n count++;\n }\n }\n\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodLatePickupHours', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n count += a.attendance.firstPeriodLatePickupHours;\n }\n\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodLatePickupHours', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n count += a.attendance.secondPeriodLatePickupHours;\n }\n\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'sumLatePickupHours', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n count += a.attendance.firstPeriodLatePickupHours;\n count += a.attendance.secondPeriodLatePickupHours;\n }\n\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodExcuses', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected && \n a.attendance.firstPeriodAttendanceStatusID == 2) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodExcuses', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.secondPeriodAttendanceStatusID == 2) {\n count++;\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodExcusesWithoutFood', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.firstPeriodAttendanceStatusID == 4) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodExcusesWithoutFood', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.secondPeriodAttendanceStatusID == 4) {\n count++;\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodExcusesNoComp', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.firstPeriodAttendanceStatusID == 3) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodExcusesNoComp', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected &&\n a.attendance.secondPeriodAttendanceStatusID == 3) {\n count++;\n }\n }\n return count;\n }\n });\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'firstPeriodNotExcused', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if ((a.isSelected && a.attendance.firstPeriodAttendanceStatusID == 1) &&\n !(a.attendance.firstPeriodAttendanceTypeID == 0 && !a.attendance.firstPeriodRegistered)) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'secondPeriodNotExcused', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if ((a.isSelected && a.attendance.secondPeriodAttendanceStatusID == 1) &&\n !(a.attendance.secondPeriodAttendanceTypeID == 0 && !a.attendance.secondPeriodRegistered)) {\n count++;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'noOfMinutes', {\n enumerable: true, configurable: true,\n get: function () {\n var count = 0;\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n\n if (a.isSelected) {\n count = count + a.noOfMinutes;\n }\n }\n return count;\n }\n });\n\n Object.defineProperty(ns.Reconciliation.prototype, 'noOfMinutesStr', {\n enumerable: true, configurable: true,\n get: function () {\n var minutesOrig = this.noOfMinutes;\n\n var hours = Math.floor(minutesOrig / 60);\n var minutes = Math.floor(minutesOrig - (hours * 60));\n\n if (minutes === 0) {\n return hours;\n }\n\n if (minutes < 10) {\n return hours + ':0' + minutes;\n }\n\n return hours + ':' + minutes;\n }\n });\n\n // #endregion\n\n // #region Utility properties\n\n\n Object.defineProperty(ns.Reconciliation.prototype, 'isAnythingSelected', {\n enumerable: true, configurable: true,\n get: function () {\n\n for (var i = 0; i < this.attendance.length; i++) {\n var a = this.attendance[i];\n if (a.isSelected) {\n return true;\n }\n }\n\n return false;\n }\n });\n\n // #endregion\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region ReconciliationAttendance - Ctor \n ns.ReconciliationAttendance = function ReconciliationAttendance(attendance, activityReconciliationID, calcSnacksOnlyForPresent) {\n this.attendance = attendance;\n this.calcSnacksOnlyForPresent = calcSnacksOnlyForPresent;\n this.activityReconciliationID = activityReconciliationID || null;\n this.calculateProperties(attendance, this.activityReconciliationID);\n }\n // #endregion\n\n // #region ReconciliationAttendance - Methods\n\n ns.ReconciliationAttendance.prototype.getReconciliationAttendanceDTO = function () {\n return this.attendance;\n }\n\n ns.ReconciliationAttendance.prototype.calculateProperties = function (attendance, activityReconciliationID) {\n this.activityID = attendance.activityID;\n this.studentID = attendance.studentID;\n this.activityScheduleID = attendance.activityScheduleID;\n this.studentFullName = attendance.studentFullName;\n this.date = attendance.date;\n this.noOfMinutes = attendance.noOfMinutes;\n\n if (!String.prototype.isNullOrWhitespace(attendance.notes)) {\n this.notes = attendance.notes;\n } else {\n this.notes = '';\n }\n\n this.reconciled = !!attendance.activityReconciliationID &&\n attendance.activityReconciliationID != activityReconciliationID;\n\n if (!String.prototype.isNullOrWhitespace(attendance.reservationNotes)) {\n if (!String.prototype.isNullOrWhitespace(this.notes)) {\n this.notes += ' ';\n }\n\n this.notes += attendance.reservationNotes;\n }\n\n if (!String.prototype.isNullOrWhitespace(attendance.scheduleNotes)) {\n if (!String.prototype.isNullOrWhitespace(this.notes)) {\n this.notes += ' ';\n }\n this.notes += attendance.scheduleNotes;\n }\n\n\n this.firstPeriod = !!attendance.firstPeriodStartDate\n ? moment(attendance.firstPeriodStartDate).format('HH:mm') + ' - ' + moment(attendance.firstPeriodEndDate).format('HH:mm')\n : '';\n\n this.secondPeriod = !!attendance.secondPeriodStartDate\n ? moment(attendance.secondPeriodStartDate).format('HH:mm') + ' - ' + moment(attendance.secondPeriodEndDate).format('HH:mm')\n : '';\n\n if (!attendance.firstPeriodRegistered && attendance.firstPeriodAttendanceStatusID == 1 && attendance.firstPeriodAttendanceTypeID == 0)\n {\n // Do not show first period\n this.firstSnack = '';\n this.lunch = '';\n this.firstPeriodAttendanceStatus = '';\n this.firstPeriodAttendanceType = '';\n } else {\n if (this.calcSnacksOnlyForPresent) {\n this.firstSnack = attendance.firstPeriodAttendanceStatusID === 0 && attendance.firstSnackReserved\n ? '\\u2713'\n : '\\u2718';\n } else {\n this.firstSnack = attendance.firstSnack ? '\\u2713' : '\\u2718';\n }\n this.lunch = attendance.lunch ? '\\u2713' : '\\u2718';\n this.firstPeriodAttendanceStatus = this.attendanceStatusToString(attendance.firstPeriodAttendanceStatusID);\n this.firstPeriodAttendanceType = this.attendanceTypeToString(attendance.firstPeriodAttendanceTypeID);\n }\n\n if (!attendance.secondPeriodRegistered && attendance.secondPeriodAttendanceStatusID == 1 && attendance.secondPeriodAttendanceTypeID == 0)\n {\n this.secondSnack = '';\n this.secondPeriodAttendanceStatus = '';\n this.secondPeriodAttendanceType = '';\n } else {\n if (this.calcSnacksOnlyForPresent) {\n this.secondSnack = attendance.secondPeriodAttendanceStatusID === 0 && attendance.secondSnackReserved\n ? '\\u2713'\n : '\\u2718';\n } else {\n this.secondSnack = attendance.secondSnack ? '\\u2713' : '\\u2718';\n }\n this.secondPeriodAttendanceStatus = this.attendanceStatusToString(attendance.secondPeriodAttendanceStatusID);\n this.secondPeriodAttendanceType = this.attendanceTypeToString(attendance.secondPeriodAttendanceTypeID);\n }\n }\n\n ns.ReconciliationAttendance.prototype.attendanceStatusToString = function (input) {\n switch (input) {\n case 0:\n return 'TXT_STATUS_PRESENT';\n case 1:\n return 'TXT_STATUS_NOT_PRESENT_NOT_EXCUSED';\n case 2:\n return 'TXT_STATUS_NOT_PRESENT_EXCUSED';\n case 3:\n return 'TXT_STATUS_NOT_PRESENT_EXCUSED_NO_COMPENSATION';\n case 4:\n return 'TXT_STATUS_NOT_PRESENT_EXCUSED_NO_FOOD';\n }\n }\n\n ns.ReconciliationAttendance.prototype.attendanceTypeToString = function (input) {\n switch (input) {\n case 0:\n return 'TXT_VAL_REGISTERED';\n case 1:\n return 'TXT_VAL_ONEOFF';\n case 2:\n return 'TXT_VAL_AMEND';\n case 3:\n return 'TAX_VAL_PREVIEW';\n }\n }\n // #endregion\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region Schedule - Ctor\n ns.Schedule = function Schedule(semesterStartDate, semesterEndDate, schedules) {\n this.weeks = [];\n\n var startDate = semesterStartDate;\n var endDate = semesterEndDate;\n\n if (schedules && schedules.length > 0) {\n var first = schedules[0];\n var last = schedules[schedules.length - 1];\n\n var firstStart = first.firstPeriodStartDate\n ? first.firstPeriodStartDate\n : first.secondPeriodStartDate;\n\n var lastStart = last.firstPeriodStartDate\n ? last.firstPeriodStartDate\n : last.secondPeriodStartDate;\n\n startDate = startDate < firstStart\n ? startDate\n : firstStart;\n\n endDate = endDate > lastStart\n ? endDate\n : lastStart;\n }\n\n var mStartDate = moment(startDate).startOf('week');\n var mEndDate = moment(endDate).startOf('week');\n\n while (mStartDate.isBefore(mEndDate)) {\n var weekModel = new ns.ScheduleWeek(\n mStartDate,\n this.findWeekSchedule(schedules, mStartDate));\n\n this.weeks.push(weekModel);\n\n mStartDate.add('weeks', 1);\n }\n }\n // #endregion\n\n // #region Schedule - Methods\n ns.Schedule.prototype.findWeekSchedule = function (schedules, mStartDate) {\n var idx = 0;\n var sch = [];\n while (!!schedules && (idx < schedules.length)) {\n\n var currentSchedule = schedules[idx];\n\n var currentStart = null;\n\n if (currentSchedule.firstPeriodStartDate) {\n currentStart = moment(currentSchedule.firstPeriodStartDate).startOf('week');\n } else {\n currentStart = moment(currentSchedule.secondPeriodStartDate).startOf('week');\n }\n\n if (currentStart.isAfter(mStartDate)) {\n break;\n }\n\n if (currentStart.isSame(mStartDate)) {\n sch.push(currentSchedule);\n }\n\n idx++;\n }\n\n return sch;\n }\n // #endregion\n\n})(webooker_acivity_models);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region ScheduleWeek - Ctor\n ns.ScheduleWeek = function ScheduleWeek(mStartDate, weekSchedules) {\n this.weekNo = mStartDate.week();\n this.startDate = moment(mStartDate).startOf('week').toDate();\n this.endDate = moment(mStartDate).endOf('week').toDate();\n\n this.schedules = [];\n if (weekSchedules && weekSchedules.length) {\n this.schedules.push.apply(this.schedules, weekSchedules);\n }\n this.singlePeriodProgramOnly = false;\n }\n // #endregion\n\n // #region ScheduleWeek - Methods\n ns.ScheduleWeek.prototype.getScheduleByDay = function (dayOfWeek) {\n if (this.schedules) {\n for (var s = 0; s < this.schedules.length; s++) {\n var schedule = this.schedules[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n var scheduleDayOfWeek = moment(dateIndicia).isoWeekday();\n\n if (scheduleDayOfWeek === dayOfWeek) {\n return schedule;\n }\n }\n }\n }\n\n return null;\n }\n\n ns.ScheduleWeek.prototype.removeScheduleByDay = function (dayOfWeek) {\n if (this.schedules) {\n\n var rindex = -1;\n\n for (var s = 0; s < this.schedules.length; s++) {\n var schedule = this.schedules[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n var scheduleDayOfWeek = moment(dateIndicia).isoWeekday();\n\n if (scheduleDayOfWeek === dayOfWeek) {\n rindex = s;\n break;\n }\n }\n }\n\n if (rindex !== -1) {\n this.schedules.splice(rindex, 1);\n }\n }\n }\n\n ns.ScheduleWeek.prototype.getScheduleIndiciesByDay = function (dayOfWeek) {\n var schedule = this.getScheduleByDay(dayOfWeek);\n if (schedule) {\n var am = schedule.firstPeriodStartDate || schedule.firstPeriodEndDate;\n var pm = schedule.secondPeriodStartDate || schedule.secondPeriodEndDate\n if (am && pm) { return 'both'; }\n if (am && this.singlePeriodProgramOnly) { return 'both'; }\n if (am) { return 'am'; }\n if (pm) { return 'pm'; }\n }\n\n return '';\n }\n //#endregion\n\n // #region ScheduleWeek - Properties\n Object.defineProperty(ns.ScheduleWeek.prototype, 'monday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(1); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'tuesday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(2); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'wednesday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(3); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'thursday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(4); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'friday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(5); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'saturday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(6); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'sunday', {\n enumerable: true, configurable: true,\n get: function () { return this.getScheduleIndiciesByDay(7); }\n });\n\n Object.defineProperty(ns.ScheduleWeek.prototype, 'notes', {\n enumerable: true, configurable: true,\n get: function () {\n\n var days = new Array(7);\n\n if (this.schedules) {\n for (var s = 0; s < this.schedules.length; s++) {\n var schedule = this.schedules[s];\n var dateIndicia = schedule.firstPeriodStartDate ||\n schedule.firstPeriodEndDate ||\n schedule.secondPeriodStartDate ||\n schedule.secondPeriodEndDate;\n\n if (!!dateIndicia) {\n days[moment(dateIndicia).isoWeekday() - 1] = schedule;\n }\n }\n }\n\n var result = '';\n\n for (var d = 0; d < days.length; d++) {\n var day = days[d];\n if (day && !String.prototype.isNullOrWhitespace(day.notes)) {\n if (String.prototype.isNullOrWhitespace(result)) {\n result += '{' + d + '}: ' + day.notes;\n } else {\n result += ', {' + d + '}: ' + day.notes;\n }\n }\n }\n\n return result;\n }\n });\n // #endregion\n\n})(webooker_acivity_models);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n var daysEnum = ['TXT_MONDAY', 'TXT_TUESDAY', 'TXT_WEDNESDAY', 'TXT_THURSDAY', 'TXT_FRIDAY', 'TXT_SATURDAY', 'TXT_SUNDAY'];\n\n // #region ScheduleDetail - Ctor\n ns.ScheduleDetail = function ScheduleDetail(scheduleWeeks) {\n this.scheduleWeeks = scheduleWeeks;\n this.days = [];\n for (var day = 1; day <= 7; day++) {\n this.days.push(new ns.ScheduleDetailDay(\n daysEnum[day - 1],\n scheduleWeeks,\n day, // isoWeekday\n this\n ));\n }\n }\n // #endregion \n\n // #region ScheduleDetail - Methods\n ns.ScheduleDetail.prototype.getPrevFilledInDay = function (day) {\n var isoWeekday = day.dayOfWeek;\n\n // Find previous one\n for (var d = isoWeekday - 1; d >= 0; d--) { \n var prev = this.days[d];\n\n if (prev.firstPeriodStartDate !== null ||\n prev.secondPeriodStartDate !== null) {\n return prev;\n }\n }\n\n // try nex one\n for (var d = isoWeekday + 1; d < this.days.length; d++) {\n var next = this.days[d];\n\n if (next.firstPeriodStartDate !== null ||\n next.secondPeriodStartDate !== null) {\n return next;\n }\n }\n\n return null;\n }\n\n ns.ScheduleDetail.prototype.onDataSourceChange = function () {\n for (var d = 0; d < this.days.length; d++) {\n this.days[d].onDataSourceChange.call(this.days[d]);\n }\n }\n\n ns.ScheduleDetail.prototype.applyChanges = function () {\n for (var d = 0; d < this.days.length; d++) {\n this.days[d].applyChanges.call(this.days[d]);\n }\n }\n // #endregion\n\n // #region ScheduleDetail - Properties\n Object.defineProperty(ns.ScheduleDetail.prototype, \"active\", {\n get: function () {\n var a = true;\n var cnt = 0;\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n a &= d.active;\n cnt++;\n }\n return a && cnt > 0;\n },\n set: function (value) {\n for (var i = 0; i < this.days.length; i++) {\n var d = this.days[i];\n d.active = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n // #endregion\n\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region ScheduleDetailDay - Ctor\n ns.ScheduleDetailDay = function ScheduleDetail(day, scheduleWeeks, isoWeekday, scheduleDetail) {\n this.parentDetail = scheduleDetail;\n this.day = day;\n this.dayOfWeek = isoWeekday;\n this.scheduleWeeks = scheduleWeeks;\n\n this.onDataSourceChange();\n }\n // #endregion\n\n // #region StudentDetailDay - Inheritance\n\n ns.ScheduleDetailDay.prototype = new ns.ScheduleDayBase();\n ns.ScheduleDetailDay.prototype.constructor = ns.ScheduleDetailDay;\n ns.ScheduleDetailDay.prototype.parent = ns.ScheduleDayBase.prototype;\n\n // #endregion\n\n // #region ScheduleDetailDay - Methods\n ns.ScheduleDetailDay.prototype.calculateProperties = function () {\n\n this.daySchedules = this.getSchedulesByDay(this.scheduleWeeks, this.dayOfWeek);\n\n this._firstPeriodStartDate = this.getTimeValue(this.daySchedules, 'firstPeriodStartDate', true);\n this._firstPeriodEndDate = this.getTimeValue(this.daySchedules, 'firstPeriodEndDate', false);\n this._secondPeriodStartDate = this.getTimeValue(this.daySchedules, 'secondPeriodStartDate', true);\n this._secondPeriodEndDate = this.getTimeValue(this.daySchedules, 'secondPeriodEndDate', false);\n this._lunch = this.getBoolValue(this.daySchedules, 'lunch');\n this._firstSnack = this.getBoolValue(this.daySchedules, 'firstSnack');\n this._secondSnack = this.getBoolValue(this.daySchedules, 'secondSnack');\n this._notes = this.getStringValue(this.daySchedules, 'notes');\n this._firstPeriodCapacity = this.getNumberValue(this.daySchedules, 'firstPeriodCapacity');\n this._secondPeriodCapacity = this.getNumberValue(this.daySchedules, 'secondPeriodCapacity');\n\n this.firstPeriodStartDateIndeterminate = this.isTimeIndeterminate(this.scheduleWeeks, 'firstPeriodStartDate');\n this.firstPeriodEndDateIndeterminate = this.isTimeIndeterminate(this.scheduleWeeks, 'firstPeriodEndDate');\n this.secondPeriodStartDateIndeterminate = this.isTimeIndeterminate(this.scheduleWeeks, 'secondPeriodStartDate');\n this.secondPeriodEndDateIndeterminate = this.isTimeIndeterminate(this.scheduleWeeks, 'secondPeriodEndDate');\n this.lunchIndeterminate = this.isBoolIndeterminate(this.scheduleWeeks, 'lunch');\n this.firstSnackIndeterminate = this.isBoolIndeterminate(this.scheduleWeeks, 'firstSnack');\n this.secondSnackIndeterminate = this.isBoolIndeterminate(this.scheduleWeeks, 'secondSnack');\n this.notesIndeterminate = this.isStringIndeterminate(this.scheduleWeeks, 'notes');\n this.firstPeriodCapacityIndeterminate = this.isNumberIndeterminate(this.scheduleWeeks, 'firstPeriodCapacity');\n this.secondPeriodCapacityIndeterminate = this.isNumberIndeterminate(this.scheduleWeeks, 'secondPeriodCapacity');\n\n this.firstPeriodStartDateMin = this.getUnboundedMinTimeValue().toDate();\n this.firstPeriodEndDateMax = this.getUnboundedMaxTimeValue().toDate();\n this.secondPeriodStartDateMin = this.getUnboundedMinTimeValue().toDate();\n this.secondPeriodEndDateMax = this.getUnboundedMaxTimeValue().toDate();\n\n this._active = (!!this.firstPeriodStartDate && !!this.firstPeriodEndDate) ||\n (!!this.secondPeriodStartDate && !!this.secondPeriodEndDate);\n }\n\n ns.ScheduleDetailDay.prototype.getTimeValue = function (daySchedules, propertyName, min) {\n if (!daySchedules || !daySchedules.length) {\n return null;\n }\n\n if (min) {\n return this.getMinTimeValue(daySchedules, propertyName, true);\n } else {\n return this.getMaxTimeValue(daySchedules, propertyName, true);\n }\n\n return null;\n }\n\n ns.ScheduleDetailDay.prototype.getBoolValue = function (daySchedules, propertyName) {\n if (!daySchedules || !daySchedules.length) {\n return null;\n }\n\n for (var d = 0; d < daySchedules.length; d++) {\n var prop = daySchedules[d][propertyName];\n if (prop) {\n return true;\n }\n }\n\n return false;\n }\n\n ns.ScheduleDetailDay.prototype.getStringValue = function (daySchedules, propertyName) {\n if (!daySchedules || !daySchedules.length) {\n return null;\n }\n\n var val = null;\n var first = true;\n\n for (var d = 0; d < daySchedules.length; d++) {\n var prop = daySchedules[d][propertyName];\n if (first) {\n first = false;\n val = prop;\n } else {\n if (val !== prop) {\n return null;\n }\n }\n }\n\n return val;\n }\n\n ns.ScheduleDetailDay.prototype.getNumberValue = function (daySchedules, propertyName) {\n if (!daySchedules || !daySchedules.length) {\n return null;\n }\n\n var val = null;\n var first = true;\n\n for (var d = 0; d < daySchedules.length; d++) {\n var prop = daySchedules[d][propertyName];\n if (first) {\n first = false;\n val = prop;\n } else {\n if (val > prop) {\n val = prop;\n }\n }\n }\n\n return val;\n }\n\n ns.ScheduleDetailDay.prototype.isTimeIndeterminate = function (scheduleWeeks, propertyName) {\n\n if (!scheduleWeeks ||\n !scheduleWeeks.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n var rDate = null;\n var rMin = null;\n\n for (var s = 0; s < scheduleWeeks.length; s++) {\n var activityWeek = scheduleWeeks[s];\n\n var schedule = activityWeek.getScheduleByDay(this.dayOfWeek);\n if (!schedule) {\n if (!first) {\n if (!!val) {\n return true;\n }\n }\n\n first = false;\n continue;\n }\n\n var rvalue = schedule[propertyName];\n\n if (first) {\n if (rvalue) {\n rDate = moment(rvalue);\n rMin = rDate.hours() * 60 + rDate.minutes();\n val = rMin;\n }\n first = false;\n } else {\n if (rvalue) {\n rDate = moment(rvalue);\n rMin = rDate.hours() * 60 + rDate.minutes();\n if (val !== rMin) {\n return true;\n }\n } else {\n if (val === null && !!rvalue) {\n return true;\n }\n }\n }\n }\n\n return false;\n }\n\n ns.ScheduleDetailDay.prototype.isBoolIndeterminate = function (scheduleWeeks, propertyName) {\n if (!scheduleWeeks ||\n !scheduleWeeks.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n\n for (var s = 0; s < scheduleWeeks.length; s++) {\n var activityWeek = scheduleWeeks[s];\n\n var schedule = activityWeek.getScheduleByDay(this.dayOfWeek);\n\n if (!schedule) {\n if (!first) {\n if (val) {\n return true;\n }\n }\n\n first = false;\n val = false;\n continue;\n }\n\n var rvalue = schedule[propertyName];\n\n if (first) {\n val = rvalue;\n first = false;\n } else {\n if (rvalue !== val) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n ns.ScheduleDetailDay.prototype.isStringIndeterminate = function (scheduleWeeks, propertyName) {\n if (!scheduleWeeks ||\n !scheduleWeeks.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n\n for (var s = 0; s < scheduleWeeks.length; s++) {\n var activityWeek = scheduleWeeks[s];\n\n var schedule = activityWeek.getScheduleByDay(this.dayOfWeek);\n if (!schedule) {\n if (!first) {\n if (!String.prototype.isNullOrWhitespace(val)) {\n return true;\n }\n }\n\n first = false;\n continue;\n }\n\n var rvalue = schedule[propertyName];\n if (first) {\n val = rvalue;\n first = false;\n } else {\n var differ = (!String.prototype.isNullOrWhitespace(rvalue) && !String.prototype.isNullOrWhitespace(val) && (rvalue !== val)) ||\n (String.prototype.isNullOrWhitespace(rvalue) !== String.prototype.isNullOrWhitespace(val));\n if (differ) {\n return true;\n }\n }\n }\n return false;\n }\n\n ns.ScheduleDetailDay.prototype.isNumberIndeterminate = function (scheduleWeeks, propertyName) {\n if (!scheduleWeeks ||\n !scheduleWeeks.length) {\n return false;\n }\n\n var first = true;\n var val = null;\n\n for (var s = 0; s < scheduleWeeks.length; s++) {\n var activityWeek = scheduleWeeks[s];\n\n var schedule = activityWeek.getScheduleByDay(this.dayOfWeek);\n if (!schedule) {\n if (!first) {\n if (val) {\n return true;\n }\n }\n\n first = false;\n continue;\n }\n\n var rvalue = schedule[propertyName];\n if (first) {\n val = rvalue;\n first = false;\n } else {\n if (rvalue !== val) {\n return true;\n }\n }\n }\n return false;\n }\n\n ns.ScheduleDetailDay.prototype.onDataSourceChange = function () {\n this.calculateProperties();\n }\n\n ns.ScheduleDetailDay.prototype.applyChanges = function () {\n if (this.scheduleWeeks) {\n\n var hasFirstPeriod = (!!this.firstPeriodStartDate && !!this.firstPeriodEndDate);\n var hasSecondPeriod = (!!this.secondPeriodStartDate && !!this.secondPeriodEndDate);\n var shouldRemove = !hasFirstPeriod && !hasSecondPeriod;\n var week = null;\n\n if (shouldRemove) {\n this.firstPeriodStartDateChanged = false;\n this.firstPeriodEndDateChanged = false;\n this.secondPeriodStartDateChanged = false;\n this.secondPeriodEndDateChanged = false;\n this.lunchChanged = false;\n this.firstSnackChanged = false;\n this.secondSnackChanged = false;\n this.notesChanged = false;\n this.firstPeriodCapacityChanged = false;\n this.secondPeriodCapacityChanged = false;\n\n for (var w = 0; w < this.scheduleWeeks.length; w++) {\n week = this.scheduleWeeks[w];\n week.removeScheduleByDay(this.dayOfWeek);\n }\n } else {\n\n for (var w = 0; w < this.scheduleWeeks.length; w++) {\n week = this.scheduleWeeks[w];\n var schedule = week.getScheduleByDay(this.dayOfWeek);\n\n if (!schedule) {\n schedule = {\n };\n }\n\n var isDirty = false;\n\n if (hasFirstPeriod) {\n if (this.firstPeriodStartDateChanged) {\n this.applyChangesToTimeProperty(week.startDate, schedule, this.firstPeriodStartDate, 'firstPeriodStartDate');\n isDirty = true;\n }\n if (this.firstPeriodEndDateChanged) {\n this.applyChangesToTimeProperty(week.startDate, schedule, this.firstPeriodEndDate, 'firstPeriodEndDate');\n isDirty = true;\n }\n } else {\n this.applyChangesToTimeProperty(week.startDate, schedule, null, 'firstPeriodStartDate');\n this.applyChangesToTimeProperty(week.startDate, schedule, null, 'firstPeriodEndDate');\n }\n\n if (hasSecondPeriod) {\n if (this.secondPeriodStartDateChanged) {\n this.applyChangesToTimeProperty(week.startDate, schedule, this.secondPeriodStartDate, 'secondPeriodStartDate');\n isDirty = true;\n }\n if (this.secondPeriodEndDateChanged) {\n this.applyChangesToTimeProperty(week.startDate, schedule, this.secondPeriodEndDate, 'secondPeriodEndDate');\n isDirty = true;\n }\n } else {\n this.applyChangesToTimeProperty(week.startDate, schedule, null, 'secondPeriodStartDate');\n this.applyChangesToTimeProperty(week.startDate, schedule, null, 'secondPeriodEndDate');\n }\n\n if (this.lunchChanged) {\n this.applyChangesToBoolProperty(schedule, this.lunch, 'lunch');\n }\n\n if (this.firstSnackChanged) {\n this.applyChangesToBoolProperty(schedule, this.firstSnack, 'firstSnack');\n }\n if (this.secondSnackChanged) {\n this.applyChangesToBoolProperty(schedule, this.secondSnack, 'secondSnack');\n }\n if (this.notesChanged) {\n this.applyChangesToStringProperty(schedule, this.notes, 'notes');\n }\n if (this.firstPeriodCapacityChanged) {\n this.applyChangesToNumberProperty(schedule, this.firstPeriodCapacity, 'firstPeriodCapacity');\n }\n if (this.secondPeriodCapacityChanged) {\n this.applyChangesToNumberProperty(schedule, this.secondPeriodCapacity, 'secondPeriodCapacity');\n }\n\n if (isDirty && !schedule.activityScheduleID) {\n week.schedules.push(schedule);\n }\n }\n\n this.firstPeriodStartDateChanged = false;\n this.firstPeriodEndDateChanged = false;\n this.secondPeriodStartDateChanged = false;\n this.secondPeriodEndDateChanged = false;\n this.lunchChanged = false;\n this.firstSnackChanged = false;\n this.secondSnackChanged = false;\n this.notesChanged = false;\n this.firstPeriodCapacityChanged = false;\n this.secondPeriodCapacityChanged = false;\n }\n }\n }\n\n ns.ScheduleDetailDay.prototype.applyChangesToTimeProperty = function (startDate, schedule, value, propertyName) {\n if (value) {\n var mvalue = moment(value);\n var nvalue = moment(startDate)\n .add('days', this.dayOfWeek - 1)\n .add('hours', mvalue.hour())\n .add('minutes', mvalue.minute())\n .toDate();\n schedule[propertyName] = nvalue;\n } else {\n schedule[propertyName] = null;\n }\n }\n\n ns.ScheduleDetailDay.prototype.applyChangesToBoolProperty = function (schedule, value, propertyName) {\n schedule[propertyName] = value || false;\n }\n\n ns.ScheduleDetailDay.prototype.applyChangesToStringProperty = function (schedule, value, propertyName) {\n schedule[propertyName] = value;\n }\n\n ns.ScheduleDetailDay.prototype.applyChangesToNumberProperty = function (schedule, value, propertyName) {\n schedule[propertyName] = value;\n }\n\n ns.ScheduleDetailDay.prototype.setCommonPropertyValue = function (startDate, schedule, propertyName) {\n var value = this.day[propertyName];\n\n if (value !== \"indeterminate\") {\n var timeCompare = schedule[propertyName] instanceof Date ||\n value instanceof Date;\n\n if (timeCompare && !!value) {\n value = moment(startDate)\n .add('days', this.dayOfWeek - 1)\n .add('hours', moment(value).hour())\n .add('minutes', moment(value).minute())\n .toDate();\n }\n\n if (timeCompare) {\n if (!schedule[propertyName] ||\n !value ||\n schedule[propertyName].getTime() !== value.getTime()) {\n schedule[propertyName] = value;\n schedule.dirty = true;\n }\n } else {\n if (schedule[propertyName] != value) {\n var wasUndef = (typeof schedule[propertyName] === 'undefined');\n schedule[propertyName] = value;\n if (!wasUndef || (wasUndef && value)) {\n schedule.dirty = true;\n }\n }\n }\n }\n }\n\n ns.ScheduleDetailDay.prototype.getCommonPropertyValue = function (scheduleWeeks, propertyName, timeCompare) {\n var propertyValue = null;\n var firstRun = true;\n\n if (scheduleWeeks) {\n for (var w = 0; w < scheduleWeeks.length; w++) {\n var activityWeek = scheduleWeeks[w];\n\n var schedule = activityWeek.getScheduleByDay(this.dayOfWeek);\n if (!schedule) {\n if (!firstRun) {\n if (!propertyValue) {\n return null;\n }\n\n return \"indeterminate\";\n }\n\n firstRun = false;\n continue;\n }\n\n var schedulePropertyValue = schedule[propertyName];\n var same = null;\n\n if (timeCompare && propertyValue && schedulePropertyValue) {\n var mPropertValue = moment(propertyValue);\n var mSchedulePropertyValue = moment(schedulePropertyValue);\n\n same = mPropertValue.hour() === mSchedulePropertyValue.hour() &&\n mPropertValue.minute() === mSchedulePropertyValue.minute();\n } else {\n same = propertyValue === schedulePropertyValue\n }\n\n if (!same) {\n if (firstRun) {\n if (timeCompare) {\n propertyValue = new Date(schedulePropertyValue.valueOf())\n } else {\n propertyValue = schedulePropertyValue;\n }\n firstRun = false;\n } else {\n return \"indeterminate\";\n }\n }\n }\n }\n\n return propertyValue;\n }\n // #endregion \n\n // #region ScheduleDetailDay - Properties\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"active\", {\n get: function () {\n return this._active;\n },\n set: function (value) {\n\n this._active = value;\n\n if (!value) {\n this.firstPeriodStartDate = null;\n this.firstPeriodEndDate = null;\n this.secondPeriodStartDate = null;\n this.secondPeriodEndDate = null;\n this.lunch = false;\n this.firstSnack = false;\n this.secondSnack = false;\n this.notes = null;\n this.firstPeriodCapacity = 0;\n this.secondPeriodCapacity = 0;\n } else {\n var filled = this.parentDetail.getPrevFilledInDay(this);\n if (filled) {\n this.firstPeriodStartDate = filled.firstPeriodStartDate;\n this.firstPeriodEndDate = filled.firstPeriodEndDate;\n this.secondPeriodStartDate = filled.secondPeriodStartDate;\n this.secondPeriodEndDate = filled.secondPeriodEndDate;\n this.lunch = filled.lunch;\n this.firstSnack = filled.firstSnack;\n this.secondSnack = filled.secondSnack;\n this.notes = filled.notes;\n this.firstPeriodCapacity = filled.firstPeriodCapacity;\n this.secondPeriodCapacity = filled.secondPeriodCapacity;\n }\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"firstPeriodStartDate\", {\n get: function () {\n return this._firstPeriodStartDate;\n },\n set: function (value) {\n this._firstPeriodStartDate = value;\n this.firstPeriodStartDateChanged = true;\n if (value !== undefined) {\n this.firstPeriodStartDateIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"firstPeriodEndDate\", {\n get: function () {\n return this._firstPeriodEndDate;\n },\n set: function (value) {\n this._firstPeriodEndDate = value;\n this.firstPeriodEndDateChanged = true;\n if (value !== undefined) {\n this.firstPeriodEndDateIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"secondPeriodStartDate\", {\n get: function () {\n return this._secondPeriodStartDate;\n },\n set: function (value) {\n this._secondPeriodStartDate = value;\n this.secondPeriodStartDateChanged = true;\n if (value !== undefined) {\n this.secondPeriodStartDateIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"secondPeriodEndDate\", {\n get: function () {\n return this._secondPeriodEndDate;\n },\n set: function (value) {\n this._secondPeriodEndDate = value;\n this.secondPeriodEndDateChanged = true;\n if (value !== undefined) {\n this.secondPeriodEndDateIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"lunch\", {\n get: function () {\n return this._lunch;\n },\n set: function (value) {\n this._lunch = value;\n this.lunchChanged = true;\n if (value !== undefined) {\n this.lunchIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"firstSnack\", {\n get: function () {\n return this._firstSnack;\n },\n set: function (value) {\n this._firstSnack = value;\n this.firstSnackChanged = true;\n if (value !== undefined) {\n this.firstSnackIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"secondSnack\", {\n get: function () {\n return this._secondSnack;\n },\n set: function (value) {\n this._secondSnack = value;\n this.secondSnackChanged = true;\n if (value !== undefined) {\n this.secondSnackIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"notes\", {\n get: function () {\n return this._notes;\n },\n set: function (value) {\n this._notes = value;\n this.notesChanged = true;\n if (value !== undefined) {\n this.notesIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"firstPeriodCapacity\", {\n get: function () {\n return this._firstPeriodCapacity;\n },\n set: function (value) {\n if (!value) {\n value = 0;\n }\n this._firstPeriodCapacity = value;\n this.firstPeriodCapacityChanged = true;\n if (value !== undefined) {\n this.firstPeriodCapacityIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n\n Object.defineProperty(ns.ScheduleDetailDay.prototype, \"secondPeriodCapacity\", {\n get: function () {\n return this._secondPeriodCapacity;\n },\n set: function (value) {\n if (!value) {\n value = 0;\n }\n this._secondPeriodCapacity = value;\n this.secondPeriodCapacityChanged = true;\n if (value !== undefined) {\n this.secondPeriodCapacityIndeterminate = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n // #endregion\n\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region Student - Ctor\n ns.Student = function Student(selectedSchedules) {\n this.initialize(selectedSchedules);\n };\n // #endregion\n\n // #region Student - Inheritance\n\n ns.Student.prototype = new ns.ScheduleResourceBase();\n ns.Student.prototype.constructor = ns.Student;\n ns.Student.prototype.parent = ns.ScheduleResourceBase.prototype;\n\n // #endregion\n\n})(webooker_acivity_models);","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region StudentDetail - Ctor\n ns.StudentDetail = function StudentDetail(reservations, schedules, studentID, activityID, activitySetting) {\n this.reservations = reservations;\n this.initialize(reservations, schedules, studentID, activityID);\n this.activitySetting = activitySetting;\n }\n // #endregion\n\n\n // #region StudentDetail - Inheritance\n\n ns.StudentDetail.prototype = new ns.ScheduleResourceDetailBase();\n ns.StudentDetail.prototype.constructor = ns.StudentDetail;\n ns.StudentDetail.prototype.parent = ns.ScheduleResourceDetailBase.prototype;\n\n // #endregion\n\n // #region StudentDetail - Methods\n\n ns.StudentDetail.prototype.createDayModel = function (reservations, schedules, dayOfWeek, dayName, resourceID, activityID) {\n return new ns.StudentDetailDay(reservations, schedules, dayOfWeek, dayName, resourceID, activityID);\n }\n\n // #endregion\n\n}(webooker_acivity_models));\n","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region StudentDetailDay - Ctor\n ns.StudentDetailDay = function StudentDetailDay(reservations, schedules, dayOfWeek, dayName, studentID, activityID) {\n this.initialize(reservations, schedules, dayOfWeek, dayName, studentID, activityID);\n }\n // #endregion\n\n // #region StudentDetailDay - Inheritance\n\n ns.StudentDetailDay.prototype = new ns.ScheduleResourceDetailDayBase();\n ns.StudentDetailDay.prototype.constructor = ns.StudentDetailDay;\n ns.StudentDetailDay.prototype.parent = ns.ScheduleResourceDetailDayBase.prototype;\n\n // #endregion\n\n\n // #region StudentDetailDay - Methods\n ns.StudentDetailDay.prototype.createReservation = function (activityScheduleID) {\n return {\n activityReservationID: 0,\n activityID: this.activityID,\n studentID: this.resourceID,\n activityScheduleID: activityScheduleID,\n firstPeriodStartDate: null,\n firstPeriodEndDate: null,\n secondPeriodStartDate: null,\n secondPeriodEndDate: null,\n lunch: false,\n fistSnack: false,\n secondSnack: false,\n notes: null\n };\n }\n\n ns.StudentDetailDay.prototype.applyChanges = function () {\n\n var hasFirstPeriod = (!!this.firstPeriodStartDate && !!this.firstPeriodEndDate);\n var hasSecondPeriod = (!!this.secondPeriodStartDate && !!this.secondPeriodEndDate);\n\n this.parent.applyChanges.call(this);\n\n if (!(hasFirstPeriod || hasSecondPeriod)) {\n this.lunchChanged = false;\n this.firstSnackChanged = false;\n this.secondSnackChanged = false;\n } else {\n if (this.lunchChanged) {\n this.applyChangesToBoolProperty(this.daySchedules, this.reservations, 'lunch', this.lunch);\n this.lunchChanged = false;\n }\n if (this.firstSnackChanged) {\n this.applyChangesToBoolProperty(this.daySchedules, this.reservations, 'firstSnack', this.firstSnack);\n this.firstSnackChanged = false;\n }\n if (this.secondSnackChanged) {\n this.applyChangesToBoolProperty(this.daySchedules, this.reservations, 'secondSnack', this.secondSnack);\n this.secondSnackChanged = false;\n }\n }\n }\n\n ns.StudentDetailDay.prototype.calculateProperties = function (schedules, reservations, dayOfWeek) {\n\n this.parent.calculateProperties.call(this, schedules, reservations, dayOfWeek);\n\n this._lunch = this.getBoolValue(this.daySchedules, this.dayReservations, 'lunch');\n this._firstSnack = this.getBoolValue(this.daySchedules, this.dayReservations, 'firstSnack');\n this._secondSnack = this.getBoolValue(this.daySchedules, this.dayReservations, 'secondSnack');\n\n this.lunchIndeterminate = this.isBoolIndeterminate(this.daySchedules, this.dayReservations, 'lunch');\n this.firstSnackIndeterminate = this.isBoolIndeterminate(this.daySchedules, this.dayReservations, 'firstSnack');\n this.secondSnackIndeterminate = this.isBoolIndeterminate(this.daySchedules, this.dayReservations, 'secondSnack');\n\n this.lunchNotScheduled = this.notScheduledProperty(this.daySchedules, 'lunch');\n this.firstSnackNotScheduled = this.notScheduledProperty(this.daySchedules, 'firstSnack');\n this.secondSnackNotScheduled = this.notScheduledProperty(this.daySchedules, 'secondSnack');\n }\n\n // #endregion\n\n // #region StudentDetailDay - Properties\n\n Object.defineProperty(ns.StudentDetailDay.prototype, \"active\", {\n get: function () { return this.parent.getActive.call(this); },\n set: function (value) {\n this.parent.setActive.call(this, value);\n if (value) {\n if (!this.lunchNotScheduled) {\n this.lunch = true;\n }\n if (!this.firstSnackNotScheduled) {\n this.firstSnack = true;\n }\n if (!this.secondSnackNotScheduled) {\n this.secondSnack = true;\n }\n } else {\n this.lunch = false;\n this.firstSnack = false;\n this.secondSnack = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.StudentDetailDay.prototype, \"amActive\", {\n get: function () { return this.parent.getAmActive.call(this); },\n\n set: function (value) {\n this.parent.setAmActive.call(this, value);\n if (value) {\n if (!this.lunchNotScheduled) {\n this.lunch = true;\n }\n if (!this.firstSnackNotScheduled) {\n this.firstSnack = true;\n }\n } else {\n this.lunch = false;\n this.firstSnack = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.StudentDetailDay.prototype, \"pmActive\", {\n get: function () { return this.parent.getPmActive.call(this); },\n\n set: function (value) {\n this.parent.setPmActive.call(this, value);\n if (value) {\n if (!this.secondSnackNotScheduled) {\n this.secondSnack = true;\n }\n } else {\n this.secondSnack = false;\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.StudentDetailDay.prototype, \"lunch\", {\n get: function () {\n return this._lunch;\n },\n set: function (value) {\n this._lunch = value;\n this.lunchChanged = true;\n if (value !== undefined) {\n this.lunchIndeterminate = this.isBoolIndeterminate2(this.daySchedules, 'lunch', value, false);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.StudentDetailDay.prototype, \"firstSnack\", {\n get: function () {\n return this._firstSnack;\n },\n set: function (value) {\n this._firstSnack = value;\n this.firstSnackChanged = true;\n if (value !== undefined) {\n this.firstSnackIndeterminate = this.isBoolIndeterminate2(this.daySchedules, 'firstSnack', value, false);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n Object.defineProperty(ns.StudentDetailDay.prototype, \"secondSnack\", {\n get: function () {\n return this._secondSnack;\n },\n set: function (value) {\n this._secondSnack = value;\n this.secondSnackChanged = true;\n if (value !== undefined) {\n this.secondSnackIndeterminate = this.isBoolIndeterminate2(this.daySchedules, 'secondSnack', value, false);\n }\n },\n enumerable: true,\n configurable: true\n });\n\n // #endregion\n\n\n\n}(webooker_acivity_models));\n","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region RecurringInvoice - Ctor \n\n ns.RecurringInvoice = function RecurringInvoice($translate) {\n\n // from InvoiceBase\n this.resetFields();\n if ($translate) {\n this.initLocalization($translate);\n }\n\n this.invoiceLineKindergartenLunchQty = 0;\n this.invoiceLineKindergartenSnackQty = 0;\n }\n\n // #endregion\n\n // #region InvoiceBase - Inheritance\n\n ns.RecurringInvoice.prototype = new ns.InvoiceBase(true);\n ns.RecurringInvoice.prototype.constructor = ns.InvoiceBase;\n ns.RecurringInvoice.prototype.parent = ns.InvoiceBase.prototype;\n\n // #endregion\n\n // #region RecurringInvoice - Methods\n\n ns.RecurringInvoice.prototype.getDTO = function ($translate) {\n\n var res = this.getInvoiceDTO($translate);\n\n res.invoiceTemplateID = this.invoiceTemplateID;\n res.paymentReferenceNumber = this.paymentReferenceNumber;\n\n return res;\n }\n\n ns.RecurringInvoice.prototype.initData = function (dto) {\n\n this.initDataByInvoiceDTO(dto);\n\n this.invoiceTemplateID = dto.invoiceTemplateID;\n this.paymentReferenceNumber = dto.paymentReferenceNumber; \n this.studentID = dto.customerStudentID;\n }\n\n // #endregion\n\n}(webooker_acivity_models));","var webooker_acivity_models = webooker_acivity_models || {};\n\n(function (ns) {\n\n // #region RecurringInvoice - Ctor \n\n ns.RecurringSchedule = function RecurringSchedule($translate) {\n\n this.invoice = new ns.RecurringInvoice($translate);\n this.issuedInvoices = [];\n }\n\n // #endregion\n\n // #region Reconciliation - Methods\n\n ns.RecurringSchedule.prototype.getDTO = function ($translate) {\n var res = {\n invoiceRecurrenceScheduleID: this.invoiceRecurrenceScheduleID,\n name: this.name,\n active: this.active,\n activityID: this.activityID,\n studentID: this.studentID,\n semesterID: this.semesterID,\n reccurenceUnitTypeID: this.reccurenceUnitTypeID,\n repeatEveryNoOfUnits: this.repeatEveryNoOfUnits,\n endAfterNoOfIssues: this.endAfterNoOfIssues,\n endAtSpecificDate: this.endAtSpecificDate,\n startDate: this.startDate,\n endDate: this.endDate,\n invoice: this.invoice.getDTO($translate)\n };\n\n return res;\n }\n\n ns.RecurringSchedule.prototype.initData = function (dto) {\n\n this.invoiceRecurrenceScheduleID = dto.invoiceRecurrenceScheduleID;\n this.name = dto.name;\n this.active = dto.active;\n this.activityID = dto.activityID,\n this.studentID = dto.studentID,\n this.semesterID = dto.semesterID,\n this.reccurenceUnitTypeID = dto.reccurenceUnitTypeID;\n this.repeatEveryNoOfUnits = dto.repeatEveryNoOfUnits;\n this.endIssueTypeID = !!dto.endAtSpecificDate ? 1 : 2;\n this.endAfterNoOfIssues = dto.endAfterNoOfIssues;\n this.endAtSpecificDate = dto.endAtSpecificDate;\n this.startDate = dto.startDate;\n\n this.issuedInvoices = dto.issuedInvoices || [];\n \n this.invoice.initData(dto.invoice);\n this.today = moment().toDate();\n }\n\n // #endregion\n\n // #region InvoiceBase - Properties\n\n Object.defineProperty(ns.RecurringSchedule.prototype, 'notActive', {\n enumerable: true, configurable: true,\n get: function () {\n return !this.active;\n }\n });\n\n Object.defineProperty(ns.RecurringSchedule.prototype, 'endIssueTypeID', {\n enumerable: true, configurable: true,\n get: function () {\n return this._endIssueTypeID;\n },\n set: function (val) {\n this._endIssueTypeID = val;\n if (val === 1) {\n this._lastEndAfterNoOfIssues = this.endAfterNoOfIssues;\n this.endAfterNoOfIssues = null;\n this.endAtSpecificDate = this._lastEndAtSpecificDate || this.endAtSpecificDate || moment(this.startDate).add(1, 'M').toDate();\n } else {\n this._lastEndAtSpecificDate = this.endAtSpecificDate;\n this.endAtSpecificDate = null;\n this.endAfterNoOfIssues = this._lastEndAfterNoOfIssues || this.endAfterNoOfIssues || 10;\n }\n }\n });\n\n Object.defineProperty(ns.RecurringSchedule.prototype, 'lastIssuedDate', {\n enumerable: true, configurable: true,\n get: function () {\n var last = _.last(_.sortBy(this.issuedInvoices, 'issuedAt'));\n return !!last\n ? last.issuedAt\n : null;\n }\n });\n\n Object.defineProperty(ns.RecurringSchedule.prototype, 'endDate', {\n enumerable: true, configurable: true,\n get: function () {\n if (this.endIssueTypeID === 2) { // endAfterNoOfIssues\n switch (this.reccurenceUnitTypeID) {\n case 1: // day\n return moment(this.startDate).add(this.repeatEveryNoOfUnits * Math.max(0, this.endAfterNoOfIssues - 1), 'd').toDate();\n case 2: // week\n return moment(this.startDate).add(this.repeatEveryNoOfUnits * Math.max(0, this.endAfterNoOfIssues - 1), 'w').toDate();\n case 3: // month\n return moment(this.startDate).add(this.repeatEveryNoOfUnits * Math.max(0, this.endAfterNoOfIssues - 1), 'M').toDate();\n }\n }\n\n // endAtSpecificDate\n return this.endAtSpecificDate;\n }\n });\n\n Object.defineProperty(ns.RecurringSchedule.prototype, 'nextInvoice', {\n enumerable: true, configurable: true,\n get: function () {\n\n var lastIssuedDate = this.lastIssuedDate;\n var nextIssueDate = lastIssuedDate || this.startDate;\n var todayIsImportant = moment(this.startDate).isBefore(this.today);\n \n if (!this.repeatEveryNoOfUnits) {\n return null;\n }\n\n if (!lastIssuedDate) {\n if (moment(this.startDate).isAfter(this.endDate)) {\n return null;\n }\n\n if (!todayIsImportant && moment(this.startDate).isSameOrBefore(this.endDate)) {\n return this.startDate;\n }\n\n lastIssuedDate = this.startDate;\n }\n\n if (this.reccurenceUnitTypeID == 3)\n {\n if (moment(lastIssuedDate).date() != moment(this.startDate).date())\n {\n var lastDayOfMonth = moment(lastIssuedDate).endOf('month').date();\n var maxDay = Math.min(moment(this.startDate).date(), lastDayOfMonth);\n\n lastIssuedDate = moment({\n year: moment(lastIssuedDate).year(),\n month: moment(lastIssuedDate).month(),\n day: maxDay\n });\n }\n }\n\n do\n {\n switch (this.reccurenceUnitTypeID) {\n case 1: // day\n nextIssueDate = moment(lastIssuedDate).add(this.repeatEveryNoOfUnits, 'd');\n break;\n case 2: // week\n nextIssueDate = moment(lastIssuedDate).add(this.repeatEveryNoOfUnits, 'w');\n break;\n case 3: // month\n nextIssueDate = moment(lastIssuedDate).add(this.repeatEveryNoOfUnits, 'M');\n if (nextIssueDate.date() < moment(this.startDate).date())\n {\n var lastDayOfMonth = moment(nextIssueDate).endOf('month').date();\n var maxDay = Math.min(moment(this.startDate).date(), lastDayOfMonth);\n\n nextIssueDate = moment({ year: nextIssueDate.year(), month: nextIssueDate.month(), day: maxDay });\n }\n break;\n }\n\n lastIssuedDate = nextIssueDate;\n }\n while ((moment(nextIssueDate).isBefore(this.today)) && (moment(this.today).isSameOrBefore(this.endDate)));\n\n if (moment(nextIssueDate).isAfter(this.endDate) ||\n moment(nextIssueDate).isBefore(this.today) ||\n moment(this.today).isAfter(this.endDate)) {\n return null;\n }\n\n return nextIssueDate.toDate();\n }\n });\n\n Object.defineProperty(ns.RecurringSchedule.prototype, 'invoiceTotal', {\n enumerable: true, configurable: true,\n get: function () { \n return this.invoice.invoiceSumPrice;\n }\n });\n\n // #endregion\n\n}(webooker_acivity_models));","(function(window, document, undefined) {\n'use strict';\n// Source: wb.directives.js\nangular.module('wb.directives', ['mgcrea.ngStrap', 'pascalprecht.translate']);\n\n// Source: wbBusyIndicator.js\nangular.module('wb.directives')\n\n .directive('wbBusyIndicator', ['$tooltip', function ($tooltip) {\n return {\n restrict: 'A',\n priority: 100000,\n scope: true,\n link: function link($scope, element, attributes) {\n var oldHtml = element.html();\n var changed = false;\n var tooltipMode = false;\n var busyTooltip = null;\n $scope.tooltipTop = 100;\n $scope.$watch(attributes.wbBusyIndicator, function (val) {\n if (val) {\n if (attributes.wbBusyIndicatorOverlay) {\n\n var marginTop = Math.min(350, element.height() / 3);\n\n\n tooltipMode = true;\n var tooltipCfg = {\n trigger: 'manual',\n placement: 'top center',\n template: 'busyIndicator/templates/wb-busy-indicator.tpl.html'//,\n // target: 'body'\n };\n busyTooltip = $tooltip(element, tooltipCfg);\n busyTooltip.$promise.then(function() {\n busyTooltip.show();\n element.next().css({ 'margin-top': marginTop + 'px'});\n });\n } else {\n oldHtml = element.html();\n element.html(\"\");\n }\n changed = true;\n } else {\n if (changed) {\n if (tooltipMode) {\n busyTooltip.$promise.then(function() {\n busyTooltip.hide();\n });\n } else {\n element.html(oldHtml);\n }\n }\n }\n }, true);\n\n }\n }\n }]);\n\n// Source: wbCheckboxBitmaskEdit.js\nangular.module('wb.directives')\n .directive('wbCheckboxBitmaskEdit',\n function () {\n return {\n restrict: 'AE',\n require: 'ngModel',\n priority: 1,\n scope: {\n ngModel: '=ngModel',\n value: '='\n },\n replace: true,\n templateUrl: 'checkbox/templates/wb-checkbox-bitmask-edit.tpl.html',\n link: function (scope, element, attr, ctrl) {\n\n scope.spanChecked = 0;\n\n scope.spanClick = function ($event) {\n ctrl.$setViewValue(scope.spanChecked\n ? ctrl.$viewValue & ~scope.value\n : ctrl.$viewValue | scope.value, $event.type);\n scope.spanChecked = (ctrl.$viewValue & scope.value) > 0;\n $event.preventDefault();\n $(element).focus();\n };\n\n ctrl.$render = function () {\n scope.spanChecked = (ctrl.$viewValue & scope.value) > 0;\n };\n }\n }\n });\n\n// Source: wbCheckboxEdit.js\nangular.module('wb.directives')\n .directive('wbCheckboxEdit', \n function () {\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n scope: {\n ngModel: '=ngModel',\n indeterminate: '='\n },\n replace: true,\n templateUrl: 'checkbox/templates/wb-checkbox-edit.tpl.html',\n link: function (scope, element, attr, ctrl) {\n\n scope.spanClick = function ($event) {\n scope.spanChecked = negateValue(scope.spanChecked);\n ctrl.$setViewValue(toViewValue(scope.spanChecked), $event.type);\n $event.preventDefault();\n $(element).focus();\n }\n\n ctrl.$render = function () {\n scope.spanChecked = fromViewValue(ctrl.$viewValue);\n };\n\n function negateValue(value) {\n if (value === 0) {\n return 1;\n }\n return 0;\n\n }\n\n function toViewValue(viewValue) {\n if (viewValue === 1) {\n return true;\n } else if (viewValue === 0) {\n return false;\n } else if (viewValue === 'indeterminate') {\n return viewValue;\n } else {\n return false;\n }\n }\n\n function fromViewValue(value) {\n if (value === true || value === 'true') {\n return 1;\n } else if (value === false || value === 'false') {\n return 0;\n } else if (value === 'indeterminate') {\n return value;\n } else {\n return 0;\n }\n }\n\n scope.spanChecked = fromViewValue(ctrl.$viewValue);\n ctrl.$render(); \n }\n }\n });\n\n// Source: wbRadioEdit.js\nangular.module('wb.directives')\n .directive('wbRadioEdit',\n function () {\n return {\n restrict: 'A',\n require: 'ngModel',\n priority: 1,\n scope: {\n ngModel: '=ngModel',\n value: '='\n },\n replace: true,\n templateUrl: 'checkbox/templates/wb-radio-edit.tpl.html',\n link: function (scope, element, attr, ctrl) {\n\n scope.spanChecked = 0;\n\n scope.spanClick = function ($event) {\n ctrl.$setViewValue(scope.value, $event.type);\n scope.spanChecked = true;\n $event.preventDefault();\n $(element).focus();\n }\n\n ctrl.$render = function () {\n scope.spanChecked = ctrl.$viewValue == scope.value;\n };\n }\n }\n });\n\n// Source: l10n-cs.js\nangular.module('wb.directives')\n .config(['$translateProvider',\n function ($translateProvider) {\n $translateProvider.translations('cs', {\n TXT_TODAY: 'Dnes',\n TXT_BUSY: 'Prosím čekejte',\n TXT_LBL_START_DATE: 'Začátek',\n TXT_LBL_END_DATE: 'Konec',\n TXT_LBL_EMPLOYEE: 'Učitel',\n TXT_LBL_NAME: 'Název',\n TXT_LBL_FILLED: 'Obsazeno',\n TXT_NOTE: 'Poznámka',\n TXT_RECURRENCE_TYPE_DAILY: 'Denně',\n TXT_RECURRENCE_TYPE_WEEKLY: 'Týdně',\n TXT_RECURRENCE_TYPE_MONTHLY: 'Měsíčně',\n TXT_RECURRENCE_TYPE_YEARLY: 'Ročně',\n TXT_RECURRENCE_WEEK_DAYS_SUNDAY: 'Ne',\n TXT_RECURRENCE_WEEK_DAYS_MONDAY: 'Po',\n TXT_RECURRENCE_WEEK_DAYS_TUESDAY: 'Út',\n TXT_RECURRENCE_WEEK_DAYS_WEDNESDAY: 'St',\n TXT_RECURRENCE_WEEK_DAYS_THURSDAY: 'Čt',\n TXT_RECURRENCE_WEEK_DAYS_FRIDAY: 'Pá',\n TXT_RECURRENCE_WEEK_DAYS_SATURDAY: 'So',\n TXT_RECURRENCE_WEEK_EVERY_1: 'Opakuje se každý',\n TXT_RECURRENCE_WEEK_EVERY_2: 'Opakuje se každé',\n TXT_RECURRENCE_WEEK_EVERY_3: 'Opakuje se každých',\n TXT_RECURRENCE_WEEK_1: 'týden',\n TXT_RECURRENCE_WEEK_2: 'týdny',\n TXT_RECURRENCE_WEEK_3: 'týdnů',\n TXT_RECURRENCE_DAY_1: 'den',\n TXT_RECURRENCE_DAY_2: 'dny',\n TXT_RECURRENCE_DAY_3: 'dnů',\n TXT_RECURRENCE_WEEK_WORKDAY: 'pracovní den',\n TXT_RECURRENCE_MONTH_EVERY_1: 'Každý',\n TXT_RECURRENCE_MONTH_EVERY_2: 'Každé',\n TXT_RECURRENCE_MONTH_EVERY_3: 'Každých',\n TXT_RECURRENCE_MONTH_FROM_EVERY: 'každého',\n TXT_RECURRENCE_MONTH_MONTH: 'měsíce',\n TXT_RECURRENCE_WEEK_OF_MONTH_FIRST: 'první',\n TXT_RECURRENCE_WEEK_OF_MONTH_SECOND: 'druhý',\n TXT_RECURRENCE_WEEK_OF_MONTH_THIRD: 'třetí',\n TXT_RECURRENCE_WEEK_OF_MONTH_FOURTH: 'čtvrtý',\n TXT_RECURRENCE_WEEK_OF_MONTH_LAST: 'poslední',\n TXT_RECURRENCE_MONTH_JANUARY: 'leden',\n TXT_RECURRENCE_MONTH_FEBRUARY: 'únor',\n TXT_RECURRENCE_MONTH_MARCH: 'březen',\n TXT_RECURRENCE_MONTH_APRIL: 'duben',\n TXT_RECURRENCE_MONTH_MAY: 'květen',\n TXT_RECURRENCE_MONTH_JUNE: 'červen',\n TXT_RECURRENCE_MONTH_JULY: 'červenec',\n TXT_RECURRENCE_MONTH_AUGUST: 'srpen',\n TXT_RECURRENCE_MONTH_SEPTEMBER: 'září',\n TXT_RECURRENCE_MONTH_OCTOBER: 'říjen',\n TXT_RECURRENCE_MONTH_NOVEMBER: 'listopad',\n TXT_RECURRENCE_MONTH_DECEMBER: 'prosinec',\n TXT_RECURRENCE_IN: 'v',\n TXT_RECURRENCE_ENDS_AFTER: 'Končí po',\n TXT_RECURRENCE_ENDS_AT: 'Končí dne',\n TXT_RECURRENCE_OCCURRENCES: 'výskytech'\n }\n );\n }\n ]);\n\n// Source: l10n-de.js\nangular.module('wb.directives')\n .config(['$translateProvider',\n function ($translateProvider) {\n $translateProvider.translations('de', {\n TXT_TODAY: 'Heute',\n TXT_BUSY: 'Bitte warten',\n TXT_LBL_START_DATE: 'Anfang',\n TXT_LBL_END_DATE: 'Ende',\n TXT_LBL_EMPLOYEE: 'Lehrer',\n TXT_LBL_NAME: 'Name',\n TXT_LBL_FILLED: 'Belegt',\n TXT_NOTE: 'Notiz',\n TXT_RECURRENCE_TYPE_DAILY: 'Täglich',\n TXT_RECURRENCE_TYPE_WEEKLY: 'Wöchentlich',\n TXT_RECURRENCE_TYPE_MONTHLY: 'Monatlich',\n TXT_RECURRENCE_TYPE_YEARLY: 'Jährlich',\n TXT_RECURRENCE_WEEK_DAYS_SUNDAY: 'So',\n TXT_RECURRENCE_WEEK_DAYS_MONDAY: 'Mo',\n TXT_RECURRENCE_WEEK_DAYS_TUESDAY: 'Di',\n TXT_RECURRENCE_WEEK_DAYS_WEDNESDAY: 'Mi',\n TXT_RECURRENCE_WEEK_DAYS_THURSDAY: 'Do',\n TXT_RECURRENCE_WEEK_DAYS_FRIDAY: 'Fr',\n TXT_RECURRENCE_WEEK_DAYS_SATURDAY: 'Sa',\n TXT_RECURRENCE_WEEK_EVERY_1: 'Wiederholt sich jede',\n TXT_RECURRENCE_WEEK_EVERY_2: 'Wiederholt sich jede',\n TXT_RECURRENCE_WEEK_EVERY_3: 'Wiederholt sich jede',\n TXT_RECURRENCE_WEEK_1: 'Woche',\n TXT_RECURRENCE_WEEK_2: 'Wochen',\n TXT_RECURRENCE_WEEK_3: 'Wochen',\n TXT_RECURRENCE_DAY_1: 'Tag',\n TXT_RECURRENCE_DAY_2: 'Tage',\n TXT_RECURRENCE_DAY_3: 'Tage',\n TXT_RECURRENCE_WEEK_WORKDAY: 'Arbeitstag',\n TXT_RECURRENCE_MONTH_EVERY_1: 'Jeden',\n TXT_RECURRENCE_MONTH_EVERY_2: 'Jedes',\n TXT_RECURRENCE_MONTH_EVERY_3: 'Jede',\n TXT_RECURRENCE_MONTH_FROM_EVERY: 'jeden',\n TXT_RECURRENCE_MONTH_MONTH: 'Monat',\n TXT_RECURRENCE_WEEK_OF_MONTH_FIRST: 'erste',\n TXT_RECURRENCE_WEEK_OF_MONTH_SECOND: 'zweite',\n TXT_RECURRENCE_WEEK_OF_MONTH_THIRD: 'dritte',\n TXT_RECURRENCE_WEEK_OF_MONTH_FOURTH: 'vierte',\n TXT_RECURRENCE_WEEK_OF_MONTH_LAST: 'letzte',\n TXT_RECURRENCE_MONTH_JANUARY: 'Januar',\n TXT_RECURRENCE_MONTH_FEBRUARY: 'Februar',\n TXT_RECURRENCE_MONTH_MARCH: 'März',\n TXT_RECURRENCE_MONTH_APRIL: 'April',\n TXT_RECURRENCE_MONTH_MAY: 'Mai',\n TXT_RECURRENCE_MONTH_JUNE: 'Juni',\n TXT_RECURRENCE_MONTH_JULY: 'Juli',\n TXT_RECURRENCE_MONTH_AUGUST: 'August',\n TXT_RECURRENCE_MONTH_SEPTEMBER: 'September',\n TXT_RECURRENCE_MONTH_OCTOBER: 'Oktober',\n TXT_RECURRENCE_MONTH_NOVEMBER: 'November',\n TXT_RECURRENCE_MONTH_DECEMBER: 'Dezember',\n TXT_RECURRENCE_IN: 'in',\n TXT_RECURRENCE_ENDS_AFTER: 'Endet nach',\n TXT_RECURRENCE_ENDS_AT: 'Endet am',\n TXT_RECURRENCE_OCCURRENCES: 'Vorkommen'\n }\n );\n }\n ]);\n\n// Source: l10n-en.js\nangular.module('wb.directives')\n .config(['$translateProvider',\n function ($translateProvider) {\n $translateProvider.translations('en', {\n TXT_TODAY: 'Today',\n TXT_BUSY: 'Please wait',\n TXT_LBL_START_DATE: 'Start',\n TXT_LBL_END_DATE: 'End',\n TXT_LBL_EMPLOYEE: 'Teacher',\n TXT_LBL_NAME: 'Name',\n TXT_LBL_FILLED: 'Filled',\n TXT_NOTE: 'Note',\n TXT_RECURRENCE_TYPE_DAILY: 'Daily',\n TXT_RECURRENCE_TYPE_WEEKLY: 'Weekly',\n TXT_RECURRENCE_TYPE_MONTHLY: 'Monthly',\n TXT_RECURRENCE_TYPE_YEARLY: 'Yearly',\n TXT_RECURRENCE_WEEK_DAYS_SUNDAY: 'Su',\n TXT_RECURRENCE_WEEK_DAYS_MONDAY: 'Mo',\n TXT_RECURRENCE_WEEK_DAYS_TUESDAY: 'Tu',\n TXT_RECURRENCE_WEEK_DAYS_WEDNESDAY: 'We',\n TXT_RECURRENCE_WEEK_DAYS_THURSDAY: 'Th',\n TXT_RECURRENCE_WEEK_DAYS_FRIDAY: 'Fr',\n TXT_RECURRENCE_WEEK_DAYS_SATURDAY: 'Sa',\n TXT_RECURRENCE_WEEK_EVERY_1: 'Repeats every',\n TXT_RECURRENCE_WEEK_EVERY_2: 'Repeats every',\n TXT_RECURRENCE_WEEK_EVERY_3: 'Repeats every',\n TXT_RECURRENCE_WEEK_1: 'week',\n TXT_RECURRENCE_WEEK_2: 'weeks',\n TXT_RECURRENCE_WEEK_3: 'weeks',\n TXT_RECURRENCE_DAY_1: 'day',\n TXT_RECURRENCE_DAY_2: 'days',\n TXT_RECURRENCE_DAY_3: 'days',\n TXT_RECURRENCE_WEEK_WORKDAY: 'work day',\n TXT_RECURRENCE_MONTH_EVERY_1: 'Every',\n TXT_RECURRENCE_MONTH_EVERY_2: 'Every',\n TXT_RECURRENCE_MONTH_EVERY_3: 'Every',\n TXT_RECURRENCE_MONTH_FROM_EVERY: 'on every',\n TXT_RECURRENCE_MONTH_MONTH: 'month',\n TXT_RECURRENCE_WEEK_OF_MONTH_FIRST: 'first',\n TXT_RECURRENCE_WEEK_OF_MONTH_SECOND: 'second',\n TXT_RECURRENCE_WEEK_OF_MONTH_THIRD: 'third',\n TXT_RECURRENCE_WEEK_OF_MONTH_FOURTH: 'fourth',\n TXT_RECURRENCE_WEEK_OF_MONTH_LAST: 'last',\n TXT_RECURRENCE_MONTH_JANUARY: 'january',\n TXT_RECURRENCE_MONTH_FEBRUARY: 'february',\n TXT_RECURRENCE_MONTH_MARCH: 'march',\n TXT_RECURRENCE_MONTH_APRIL: 'april',\n TXT_RECURRENCE_MONTH_MAY: 'may',\n TXT_RECURRENCE_MONTH_JUNE: 'june',\n TXT_RECURRENCE_MONTH_JULY: 'july',\n TXT_RECURRENCE_MONTH_AUGUST: 'august',\n TXT_RECURRENCE_MONTH_SEPTEMBER: 'september',\n TXT_RECURRENCE_MONTH_OCTOBER: 'october',\n TXT_RECURRENCE_MONTH_NOVEMBER: 'november',\n TXT_RECURRENCE_MONTH_DECEMBER: 'december',\n TXT_RECURRENCE_IN: 'in',\n TXT_RECURRENCE_ENDS_AFTER: 'Ends after',\n TXT_RECURRENCE_ENDS_AT: 'Ends at',\n TXT_RECURRENCE_OCCURRENCES: 'occurrences'\n }\n );\n }\n ]);\n\n// Source: l10n-sk.js\nangular.module('wb.directives')\n .config(['$translateProvider',\n function ($translateProvider) {\n $translateProvider.translations('sk', {\n TXT_TODAY: 'Dnes',\n TXT_BUSY: 'Prosím čakajte',\n TXT_LBL_START_DATE: 'Začiatok',\n TXT_LBL_END_DATE: 'Koniec',\n TXT_LBL_EMPLOYEE: 'Učiteľ',\n TXT_LBL_NAME: 'Názov',\n TXT_LBL_FILLED: 'Obsadené',\n TXT_NOTE: 'Poznámka',\n TXT_RECURRENCE_TYPE_DAILY: 'Denne',\n TXT_RECURRENCE_TYPE_WEEKLY: 'Týždenne',\n TXT_RECURRENCE_TYPE_MONTHLY: 'Mesačne',\n TXT_RECURRENCE_TYPE_YEARLY: 'Ročne',\n TXT_RECURRENCE_WEEK_DAYS_SUNDAY: 'Ne',\n TXT_RECURRENCE_WEEK_DAYS_MONDAY: 'Po',\n TXT_RECURRENCE_WEEK_DAYS_TUESDAY: 'Ut',\n TXT_RECURRENCE_WEEK_DAYS_WEDNESDAY: 'St',\n TXT_RECURRENCE_WEEK_DAYS_THURSDAY: 'Št',\n TXT_RECURRENCE_WEEK_DAYS_FRIDAY: 'Pi',\n TXT_RECURRENCE_WEEK_DAYS_SATURDAY: 'So',\n TXT_RECURRENCE_WEEK_EVERY_1: 'Opakuje sa každý',\n TXT_RECURRENCE_WEEK_EVERY_2: 'Opakuje sa každé',\n TXT_RECURRENCE_WEEK_EVERY_3: 'Opakuje sa každých',\n TXT_RECURRENCE_WEEK_1: 'týždeň',\n TXT_RECURRENCE_WEEK_2: 'týždne',\n TXT_RECURRENCE_WEEK_3: 'týždňov',\n TXT_RECURRENCE_DAY_1: 'deň',\n TXT_RECURRENCE_DAY_2: 'dni',\n TXT_RECURRENCE_DAY_3: 'dní',\n TXT_RECURRENCE_WEEK_WORKDAY: 'pracovný deň',\n TXT_RECURRENCE_MONTH_EVERY_1: 'Každý',\n TXT_RECURRENCE_MONTH_EVERY_2: 'Každé',\n TXT_RECURRENCE_MONTH_EVERY_3: 'Každých',\n TXT_RECURRENCE_MONTH_FROM_EVERY: 'každého',\n TXT_RECURRENCE_MONTH_MONTH: 'mesiac',\n TXT_RECURRENCE_WEEK_OF_MONTH_FIRST: 'prvý',\n TXT_RECURRENCE_WEEK_OF_MONTH_SECOND: 'druhý',\n TXT_RECURRENCE_WEEK_OF_MONTH_THIRD: 'tretí',\n TXT_RECURRENCE_WEEK_OF_MONTH_FOURTH: 'štvrtý',\n TXT_RECURRENCE_WEEK_OF_MONTH_LAST: 'posledný',\n TXT_RECURRENCE_MONTH_JANUARY: 'január',\n TXT_RECURRENCE_MONTH_FEBRUARY: 'február',\n TXT_RECURRENCE_MONTH_MARCH: 'marec',\n TXT_RECURRENCE_MONTH_APRIL: 'apríl',\n TXT_RECURRENCE_MONTH_MAY: 'máj',\n TXT_RECURRENCE_MONTH_JUNE: 'jún',\n TXT_RECURRENCE_MONTH_JULY: 'júl',\n TXT_RECURRENCE_MONTH_AUGUST: 'august',\n TXT_RECURRENCE_MONTH_SEPTEMBER: 'september',\n TXT_RECURRENCE_MONTH_OCTOBER: 'október',\n TXT_RECURRENCE_MONTH_NOVEMBER: 'november',\n TXT_RECURRENCE_MONTH_DECEMBER: 'december',\n TXT_RECURRENCE_IN: 'v',\n TXT_RECURRENCE_ENDS_AFTER: 'Končí po',\n TXT_RECURRENCE_ENDS_AT: 'Končí dňa',\n TXT_RECURRENCE_OCCURRENCES: 'výskytoch'\n }\n );\n }\n ]);\n\n// Source: wbRightClick.js\nangular.module('wb.directives')\n .directive('wbRightClick', [\"$parse\", function($parse) {\n return function(scope, element, attrs) {\n var fn = $parse(attrs.wbRightClick);\n element.bind('contextmenu', function(event) {\n scope.$apply(function() {\n event.preventDefault();\n fn(scope, {$event:event});\n });\n });\n };\n }]);\n\n// Source: wbScheduler.js\nangular.module('wb.directives')\n\n .directive('wbScheduler', ['$timeout', '$dropdown', '$translate', '$rootScope', 'wbSchedulerSvc',\n function($timeout, $dropdown, $translate, $rootScope, wbSchedulerSvc) {\n// TODO: Display hourglass when there is a wait queue\n\n var defaultSettings = {\n weekView: true,\n autoHourRange: false,\n startHour: 8,\n endHour: 20,\n scale: 15,\n width: '1000px',\n noHeader: false,\n showWeekend: false,\n toolTipDelay: 800,\n toolTipTemplateUrl: 'scheduler/templates/wb-scheduler-tooltip.tpl.html',\n toolTipTrigger: 'hover',\n showRecurrence: false,\n selectedResourceID: 0,\n startDate: new Date(),\n columns: [],\n resources: [],\n rows: [],\n events: [],\n commands: [],\n selectByBlocks: 1,\n maximumSelectedBlocks: -1,\n startTimeType: -1, // 1 - CanStartAtWholeOrHalfHour, 2 - CanStartAtWholeHourOnly, 3 - CanStartAtHalfHourOnly, -1 ignore\n };\n\n return {\n restrict: 'E',\n scope: {\n sourceSettings: '=settings',\n actionClicked: '&onActionClicked',\n selectionChanged: '&onSelectionChanged'\n },\n templateUrl: 'scheduler/templates/wb-scheduler.tpl.html',\n replace: true,\n controller: [\"$scope\", function ($scope) {\n\n var commandDropdown = null; \n\n $scope.$watch('sourceSettings', function(newValue) {\n $scope.option = angular.extend({}, angular.copy(defaultSettings), newValue);\n\n wbSchedulerSvc.calculateColumns($scope.option);\n wbSchedulerSvc.calculateRows($scope.option);\n wbSchedulerSvc.calculateSizes($scope.option);\n wbSchedulerSvc.calculateEvents($scope.option);\n wbSchedulerSvc.calculateAvailability($scope.option);\n\n $scope.toolTipEnabled = true;\n }, true);\n \n $scope.isAlternateRow = function(rowIndex) {\n return wbSchedulerSvc.isAlternateRow(rowIndex, $scope.option);\n }\n \n $scope.selection = {};\n\n var isSelectable = !!$scope.sourceSettings.commands && !!$scope.sourceSettings.commands.length;\n\n var selectionStart = null;\n var selectionEnd = null;\n var inSelection = false;\n\n function clearSelection() {\n selectionStart = null;\n selectionEnd = null;\n inSelection = false;\n setSelection(selectionStart, selectionEnd);\n }\n\n function setSelection(selectionStart, selectionEnd) {\n if (!selectionStart ||\n !selectionEnd ||\n !isSelectable ||\n !$scope.sourceSettings.weekView\n ) {\n Object.keys($scope.selection).forEach(function(key) { delete $scope.selection[key]; });\n return;\n }\n\n var newSelection = {};\n\n\n var colStart;\n var colEnd;\n var rowStart;\n var rowEnd;\n\n if (selectionStart.colIndex < selectionEnd.colIndex) {\n colStart = selectionStart.colIndex;\n colEnd = selectionEnd.colIndex;\n rowStart = selectionStart.rowIndex;\n rowEnd = selectionEnd.rowIndex;\n } else if (selectionStart.colIndex === selectionEnd.colIndex) {\n colStart = selectionStart.colIndex;\n colEnd = selectionStart.colIndex;\n if (selectionStart.rowIndex < selectionEnd.rowIndex) {\n rowStart = selectionStart.rowIndex;\n rowEnd = selectionEnd.rowIndex;\n } else {\n rowStart = selectionEnd.rowIndex;\n rowEnd = selectionStart.rowIndex;\n }\n } else {\n colStart = selectionEnd.colIndex;\n colEnd = selectionStart.colIndex;\n rowStart = selectionEnd.rowIndex;\n rowEnd = selectionStart.rowIndex;\n }\n\n for (var col = colStart; col <= colEnd; col++) {\n var startRow = col === colStart\n ? rowStart\n : 0;\n var endRow = col === colEnd\n ? rowEnd\n : $scope.option.rows.length;\n\n for(var row = startRow; row <= endRow; row++) {\n newSelection[row + '-' + col] = true;\n }\n }\n\n Object.keys($scope.selection).forEach(function(key) {\n if (!newSelection[key]) {\n delete $scope.selection[key];\n }\n });\n\n Object.keys(newSelection).forEach(function(key) {\n $scope.selection[key] = true;\n });\n\n if ($scope.selectionChanged) {\n var startEndDates = wbSchedulerSvc.getStartEndDateBySelection(\n $scope.option, selectionStart, selectionEnd); \n $timeout(function() {\n $scope.selectionChanged({ selection: startEndDates });\n });\n } \n }\n\n function disposeCommandDropdown() {\n if (!!commandDropdown) {\n if (!!commandDropdown.destroy) {\n commandDropdown.destroy();\n }\n }\n\n commandDropdown = null;\n }\n\n\n function showCommandMenu($event, event, startDate, endDate) {\n disposeCommandDropdown();\n\n var commandMenu = [];\n\n angular.forEach($scope.sourceSettings.commands, function(c) {\n\n if (!$scope.sourceSettings.commands || !$scope.sourceSettings.commands.length) {\n return;\n }\n\n var isVisible = true;\n if (!!c.isVisible) {\n isVisible = c.isVisible(event, startDate, endDate);\n }\n\n if (isVisible) {\n commandMenu.push({\n text: $translate.instant(c.text),\n click:\n angular.bind(this, function(event, startDate, endDate) {\n disposeCommandDropdown();\n c.callback(event, startDate, endDate);\n }, event, startDate, endDate)\n });\n }\n });\n\n var s = $rootScope.$new(true);\n s.content = commandMenu;\n commandDropdown = $dropdown(\n angular.element($event.target),\n {\n scope: s,\n placement: 'auto bottom',\n container: 'body',\n onHide: function() {\n disposeCommandDropdown();\n }\n }\n );\n\n commandDropdown.$promise.then(function () {\n $timeout(function() {\n commandDropdown.show();\n });\n });\n }\n\n $scope.onCellMouseDown = function(rowIndex, colIndex) {\n disposeCommandDropdown();\n\n selectionStart = {rowIndex: rowIndex, colIndex: colIndex};\n selectionEnd = {\n rowIndex: rowIndex + ($scope.option.selectByBlocks - 1), \n colIndex: colIndex\n };\n\n if (wbSchedulerSvc.canSelectRegion(\n $scope.option, selectionStart, selectionEnd))\n {\n inSelection = true;\n setSelection(selectionStart, selectionEnd);\n }\n else\n {\n clearSelection();\n }\n };\n\n $scope.onCellMouseMove = function(rowIndex, colIndex) {\n if (inSelection) {\n if (Math.abs(selectionStart.rowIndex - rowIndex) > 0 &&\n ((Math.abs(selectionStart.rowIndex - rowIndex) + 1) % $scope.option.selectByBlocks) === 0)\n {\n if ($scope.option.maximumSelectedBlocks !== -1)\n {\n if (selectionStart.colIndex === colIndex &&\n Math.abs(selectionStart.rowIndex - rowIndex ) < $scope.option.maximumSelectedBlocks)\n {\n selectionEnd = { rowIndex: rowIndex, colIndex: colIndex };\n\n if (wbSchedulerSvc.canSelectRegion(\n $scope.option, selectionStart, selectionEnd))\n {\n setSelection(selectionStart, selectionEnd); \n }\n }\n }\n else\n {\n selectionEnd = {rowIndex: rowIndex, colIndex: colIndex};\n if (wbSchedulerSvc.canSelectRegion(\n $scope.option, selectionStart, selectionEnd))\n {\n setSelection(selectionStart, selectionEnd); \n }\n }\n }\n }\n };\n\n $scope.onCellMouseUp = function($event) {\n inSelection = false;\n\n if (!selectionStart || !selectionEnd) {\n return;\n }\n\n var startEndDates = wbSchedulerSvc.getStartEndDateBySelection(\n $scope.option, selectionStart, selectionEnd);\n\n var event = null;\n\n showCommandMenu($event, event, startEndDates.startDate, startEndDates.endDate);\n };\n\n var secondClickCheck = false;\n var lastClickEvent = null;\n\n $scope.onSelectEvent = function ($event, event) {\n clearSelection();\n disposeCommandDropdown();\n\n $scope.option.selectedAction = event.origAction;\n\n if (secondClickCheck) {\n if (lastClickEvent === event) {\n secondClickCheck = false;\n lastClickEvent = null;\n $scope.toolTipEnabled = false;\n $timeout(function () {\n $scope.toolTipEnabled = true;\n }, 5000);\n showCommandMenu($event, event, event.startTime, event.endTime);\n return;\n }\n }\n\n secondClickCheck = true;\n lastClickEvent = event;\n\n $timeout(function() {\n secondClickCheck = false;\n }, 800);\n\n if ($scope.actionClicked) {\n $scope.toolTipEnabled = false;\n\n $timeout(function() {\n $scope.actionClicked({ action: $scope.option.selectedAction });\n });\n\n $timeout(function() {\n $scope.toolTipEnabled = true;\n }, 5000);\n }\n\n\n };\n }]\n };\n }]);\n\n// Source: wbSchedulerDatePicker.js\nangular.module('wb.directives')\n\n.directive('wbSchedulerDatePicker', ['wbSchedulerSvc', function(wbSchedulerSvc) {\n return {\n restrict: 'E',\n scope: {\n sourceSettings: '=settings',\n dateChanged: '&onDateChanged'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-date-picker.tpl.html',\n controller: [\"$scope\", function ($scope) {\n\n $scope.onPrevBtnClick = function() {\n var interval = wbSchedulerSvc.selectPrevDate($scope.sourceSettings);\n if ($scope.dateChanged) {\n $scope.dateChanged(interval);\n }\n };\n\n $scope.onNextBtnClick = function() {\n var interval = wbSchedulerSvc.selectNextDate($scope.sourceSettings);\n if ($scope.dateChanged) {\n $scope.dateChanged(interval);\n }\n };\n\n $scope.onTodayBtnClick = function() {\n var interval = wbSchedulerSvc.selectToday($scope.sourceSettings);\n if ($scope.dateChanged) {\n $scope.dateChanged(interval);\n }\n };\n\n $scope.onDatePickerChange = function() {\n var interval = wbSchedulerSvc.fixSelectedDate($scope.sourceSettings);\n if ($scope.dateChanged) {\n $scope.dateChanged(interval);\n }\n }\n }]\n }\n}]);\n\n// Source: wbSchedulerRecurrence.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrence', ['wbSchedulerSvc', function(wbSchedulerSvc) {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence.tpl.html',\n link: function (scope, elm, attrs, controller) {\n\n scope.model = {};\n\n controller.$render = function () {\n scope.model = wbSchedulerSvc.mapRecurrenceDtoToModel(scope.model, controller.$viewValue);\n };\n\n scope.$watch('ngModel', function(newValue) {\n scope.model = wbSchedulerSvc.mapRecurrenceDtoToModel(scope.model, controller.$viewValue);\n }, true);\n\n scope.$watch('model', function(newValue) {\n controller.$setViewValue(wbSchedulerSvc.mapRecurrenceModelToDto(controller.$viewValue, newValue));\n }, true);\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceDayPeriodicity.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceDayPeriodicity', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-day-periodicity.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceDayWeekDays.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceDayWeekDays', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-day-week-days.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceMonthCombo.js\nangular.module('wb.directives')\n .directive('wbSchedulerRecurrenceMonthCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'AE',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_RECURRENCE_MONTH_JANUARY' },\n { id: 2, text: 'TXT_RECURRENCE_MONTH_FEBRUARY' },\n { id: 3, text: 'TXT_RECURRENCE_MONTH_MARCH' },\n { id: 4, text: 'TXT_RECURRENCE_MONTH_APRIL' },\n { id: 5, text: 'TXT_RECURRENCE_MONTH_MAY' },\n { id: 6, text: 'TXT_RECURRENCE_MONTH_JUNE' },\n { id: 7, text: 'TXT_RECURRENCE_MONTH_JULY' },\n { id: 8, text: 'TXT_RECURRENCE_MONTH_AUGUST' },\n { id: 9, text: 'TXT_RECURRENCE_MONTH_SEPTEMBER' },\n { id: 10, text: 'TXT_RECURRENCE_MONTH_OCTOBER' },\n { id: 11, text: 'TXT_RECURRENCE_MONTH_NOVEMBER' },\n { id: 12, text: 'TXT_RECURRENCE_MONTH_DECEMBER' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceMonthPeriodicity.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceMonthPeriodicity', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-month-periodicity.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceMonthWeekDays.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceMonthWeekDays', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-month-week-days.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceWeekDaysCombo.js\nangular.module('wb.directives')\n .directive('wbSchedulerRecurrenceWeekDaysCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'AE',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_RECURRENCE_WEEK_DAYS_SUNDAY' },\n { id: 2, text: 'TXT_RECURRENCE_WEEK_DAYS_MONDAY' },\n { id: 4, text: 'TXT_RECURRENCE_WEEK_DAYS_TUESDAY' },\n { id: 8, text: 'TXT_RECURRENCE_WEEK_DAYS_WEDNESDAY' },\n { id: 16, text: 'TXT_RECURRENCE_WEEK_DAYS_THURSDAY' },\n { id: 32, text: 'TXT_RECURRENCE_WEEK_DAYS_FRIDAY' },\n { id: 64, text: 'TXT_RECURRENCE_WEEK_DAYS_SATURDAY' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceWeekOfMonthCombo.js\nangular.module('wb.directives')\n .directive('wbSchedulerRecurrenceWeekOfMonthCombo', ['$timeout', '$translate',\n function ($timeout, $translate) {\n function formatResult(data) {\n if (!data) { return; }\n return $translate.instant(data.text);\n }\n\n function formatSelection(data) {\n return $translate.instant(data.text);\n }\n\n return {\n restrict: 'AE',\n require: 'ngModel',\n link: function (scope, elm, attrs, controller) {\n\n $timeout(function () {\n $(elm).select2({\n formatResult: formatResult,\n formatSelection: formatSelection,\n dropdownAutoWidth: true,\n allowClear: false,\n minimumResultsForSearch: -1,\n data: [\n { id: 1, text: 'TXT_RECURRENCE_WEEK_OF_MONTH_FIRST' },\n { id: 2, text: 'TXT_RECURRENCE_WEEK_OF_MONTH_SECOND' },\n { id: 3, text: 'TXT_RECURRENCE_WEEK_OF_MONTH_THIRD' },\n { id: 4, text: 'TXT_RECURRENCE_WEEK_OF_MONTH_FOURTH' },\n { id: 5, text: 'TXT_RECURRENCE_WEEK_OF_MONTH_LAST' }\n ]\n });\n\n controller.$render = function () {\n elm.select2('val', controller.$viewValue);\n };\n\n controller.$parsers.unshift(function (viewValue) {\n if (!viewValue) {\n return 0;\n } else {\n return parseInt(viewValue);\n }\n });\n\n controller.$formatters.unshift(function (value) {\n if (!value) {\n return \"0\";\n } else {\n return value + \"\";\n }\n });\n\n elm.on('change', function () {\n scope.$apply(function () {\n controller.$setViewValue(elm.select2('val'));\n });\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n controller.$render();\n\n }, 1);\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceWeekPeriodicity.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceWeekPeriodicity', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-week-periodicity.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceWeekWeekDays.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceWeekWeekDays', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-week-week-days.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceYearPeriodicity.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceYearPeriodicity', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-year-periodicity.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerRecurrenceYearWeekDays.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerRecurrenceYearWeekDays', [function() {\n return {\n restrict: 'AE',\n require: 'ngModel',\n scope: {\n ngModel: '=ngModel'\n },\n templateUrl: 'scheduler/templates/wb-scheduler-recurrence-year-week-days.tpl.html',\n link: function (scope, element, attr, ngModel) {\n\n }\n }\n }]);\n\n// Source: wbSchedulerResourceCombo.js\nangular.module('wb.directives')\n\n .directive('wbSchedulerResourceCombo', ['$timeout', 'wbSchedulerSvc', function($timeout, wbSchedulerSvc) {\n\n function formatResult(item) {\n if (!item) { return; }\n return item.name;\n }\n\n\n return {\n restrict: 'E',\n scope: {\n sourceSettings: '=settings'\n },\n replace: true,\n priority: 1,\n link: function (scope, elm, attrs) {\n\n var lastWeekViewValue = scope.sourceSettings.weekView;\n var lastVisibleResources = scope.sourceSettings.visibleResources;\n\n function formatSelection(item) {\n\n if (!item) {\n return '';\n }\n\n var selectedResources = wbSchedulerSvc.getSelectedResources(\n scope.sourceSettings,\n wbSchedulerSvc.getMappedResourceID(scope.sourceSettings.resourcesMapping, item));\n var caption = null;\n\n angular.forEach(selectedResources, function(item) {\n if (caption === null) {\n caption = item.name;\n } else {\n caption += ', ' + item.name;\n }\n });\n\n return caption || '';\n }\n\n $timeout(function () {\n $(elm).select2({\n minimumResultsForSearch: -1,\n formatResult: formatResult,\n formatSelection: formatSelection,\n id: function(resource) { return wbSchedulerSvc.getMappedResourceID(scope.sourceSettings.resourcesMapping, resource); },\n data: scope.sourceSettings.resources\n });\n\n elm.on('change', function (event) {\n scope.$apply(function () {\n scope.sourceSettings.selectedResourceID = parseInt(event.val || '0');\n });\n });\n\n scope.$watch('sourceSettings', function(newValue) {\n var currentVal = parseInt($(elm).select2('val') || '0');\n\n var validResourceID = wbSchedulerSvc.getValidSelectedResourceID(newValue, newValue.selectedResourceID);\n\n if (validResourceID !== currentVal ||\n lastWeekViewValue !== scope.sourceSettings.weekView ||\n lastVisibleResources !== scope.sourceSettings.visibleResources) {\n\n lastWeekViewValue = scope.sourceSettings.weekView;\n lastVisibleResources = scope.sourceSettings.visibleResources;\n\n scope.sourceSettings.selectedResourceID =\n !validResourceID ? 0 : validResourceID;\n\n $(elm).select2('val',\n !validResourceID ? '0' : validResourceID + '');\n }\n }, true);\n\n elm.bind(\"$destroy\", function () {\n elm.select2(\"destroy\");\n });\n\n attrs.$observe('disabled', function (value) {\n elm.select2('enable', !value);\n });\n\n\n attrs.$observe('readonly', function (value) {\n elm.select2('readonly', !!value);\n });\n });\n\n }\n }\n }]);\n\n// Source: wbSchedulerSvc.js\nangular.module('wb.directives')\n\n.factory('wbSchedulerSvc', ['$filter',\n function($filter) {\nfunction findColumn(settings, event) {\n var startDay = moment(event.startDate).startOf('day');\n for (var c = 0; c < settings.columns.length; c++) {\n var column = settings.columns[c];\n if (moment(column.date).isSame(startDay)) {\n if (event.resourceID == column.resourceID) {\n return c;\n }\n }\n }\n\n return -1;\n }\n\n function calcStartTime(settings, startHour, startMinute, startDate, columnDate) {\n var min = 0;\n var res = (startHour * (60 / settings.scale)) + (startMinute / settings.scale);\n if (min > res) {\n return {\n startTime: min,\n startOverflow: true,\n startOverflowDay: moment(startDate).startOf('day').isBefore(moment(columnDate).startOf('day'))\n };\n } else {\n return {\n startTime: res,\n startOverflow: false,\n startOverflowDay: false\n };\n }\n }\n\n function calcEndTime(settings, endHour, endMinute, endDate, columnDate) {\n var max = (60 / settings.scale) * (settings.endHour - settings.startHour);\n var res = (endHour * (60 / settings.scale)) + (endMinute / settings.scale);\n if (max < res) {\n return {\n endTime: max,\n endOverflow: true,\n endOverflowDay: moment(endDate).startOf('day').isAfter(moment(columnDate).startOf('day'))\n };\n } else {\n return {\n endTime: res,\n endOverflow: false,\n endOverflowDay: false\n };\n }\n }\n\n function limitEvents(settings, event, events) {\n var column = findColumn(settings, event);\n if (column === -1) {\n return;\n }\n\n var mStartDate = moment(event.startDate);\n var mEndDate = moment(event.endDate);\n\n var startHour = mStartDate.hour() - settings.startHour;\n var startMinute = mStartDate.minute();\n\n var endHour = mEndDate.hour() - settings.startHour;\n var endMinute = mEndDate.minute();\n\n // Event ends earlier that the displayed min time\n if (endHour < 0 || (endHour === 0 && endMinute === 0)) {\n return;\n }\n\n // Event starts later than the displayed max time\n if (startHour >= (settings.endHour - settings.startHour)) {\n return;\n }\n\n event.startHour = startHour;\n event.startMinute = startMinute;\n event.endHour = endHour;\n event.endMinute = endMinute;\n event.column = column;\n\n events.push(event);\n }\n\n // removes actions which are outside of boundaries and should not influence layout\n // also breaks longer events by day\n function preFilterActions(settings, actions) {\n var result = [];\n\n angular.forEach(actions, function(action) {\n var mStartDate = moment(action.startDate);\n var mEndDate = moment(action.endDate);\n\n if (mStartDate.isAfter(mEndDate)) {\n return; // Invalid event\n }\n\n var mStartDateStartOfDay = moment(action.startDate).startOf('day');\n var mEndDateStartOfDay = moment(action.endDate).startOf('day');\n\n var mCurrentStartDate = moment(action.startDate);\n var mCurrentEndDate = moment(action.endDate);\n\n while(true) {\n\n var mCurrentStartDateStartOfDay = moment(mCurrentStartDate).startOf('day');\n\n if (mCurrentStartDateStartOfDay.isAfter(mStartDateStartOfDay)) {\n mCurrentStartDate = mCurrentStartDateStartOfDay;\n }\n\n if (mCurrentStartDateStartOfDay.isBefore(mEndDateStartOfDay)) {\n mCurrentEndDate = moment(mCurrentStartDate).endOf('day');\n } else {\n mCurrentEndDate = moment(mCurrentStartDateStartOfDay);\n mCurrentEndDate.set('hour', mEndDate.get('hour'));\n mCurrentEndDate.set('minute', mEndDate.get('minute'));\n mCurrentEndDate.set('second', mEndDate.get('second'));\n }\n\n var resourceID = action[getResourceIDPropertyName(settings.actionsMapping)];\n\n var event = {\n startDate: mCurrentStartDate.toDate(),\n endDate: mCurrentEndDate.toDate(),\n resourceID: resourceID,\n origAction: action\n };\n\n limitEvents(settings, event, result);\n\n if (mEndDateStartOfDay.isSame(mCurrentStartDateStartOfDay)) {\n break;\n }\n\n mCurrentStartDate.add(1, 'days').startOf('day');\n }\n });\n\n return _.sortBy(result, function(action) { return (action.column * 1000) + (action.startHour * 60) + action.startMinute; } );\n }\n\n function detectOverlaps(settings) {\n var group = [];\n if (settings.events.length > 1) {\n for (var e = 1; e < settings.events.length; e++) {\n var lastEvent = settings.events[e - 1];\n var event = settings.events[e];\n if (event.start < lastEvent.end && event.column === lastEvent.column) {\n if (group.length === 0) {\n group.push(lastEvent);\n group.push(event);\n } else {\n group.push(event);\n }\n } else {\n if (group.length > 1) {\n for(var g = 0; g < group.length; g++) {\n var element = group[g];\n element.noOfSubColumns = group.length;\n element.subColumn = g;\n }\n group = [];\n }\n }\n }\n }\n\n if (group.length > 1) {\n angular.forEach(group, function(element, index) {\n element.noOfSubColumns = group.length;\n element.subColumn = index;\n });\n }\n }\n\n function calculateEventsImpl(settings, actions) {\n\n var filteredActions = preFilterActions(settings, actions);\n\n angular.forEach(filteredActions, function(action) {\n var startFix = calcStartTime(settings, action.startHour, action.startMinute,\n action.origAction.startDate, settings.columns[action.column].date);\n var endFix = calcEndTime(settings, action.endHour, action.endMinute,\n action.origAction.endDate, settings.columns[action.column].date);\n\n var event = {\n column: action.column,\n noOfSubColumns: 1,\n subColumn: 0,\n start: startFix.startTime,\n startOverflow: startFix.startOverflow,\n startOverflowDay: startFix.startOverflowDay,\n end: endFix.endTime,\n endOverflow: endFix.endOverflow,\n endOverflowDay: endFix.endOverflowDay,\n name: action.origAction[getMappedPropertyName(settings.actionsMapping, 'name')],\n status: action.origAction.status || 1,\n type: action.origAction.type || 1,\n startTime: action.origAction.startDate,\n endTime: action.origAction.endDate,\n teacher: action.origAction[getMappedPropertyName(settings.actionsMapping, 'teacher')],\n filled: action.origAction[getMappedPropertyName(settings.actionsMapping, 'filled')],\n showWaitQueue: action.origAction.showWaitQueue,\n showActionNote: action.origAction.showActionNote,\n origAction: action.origAction,\n notes: action.origAction[getMappedPropertyName(settings.actionsMapping, 'notes')],\n recurrenceType: action.origAction[getMappedPropertyName(settings.actionsMapping, 'recurrenceType')]\n };\n settings.events.push(event);\n });\n\n detectOverlaps(settings);\n }\n\n function calculateEvents(settings) {\n calculateEventsImpl(settings, settings.actions);\n }\n\n function selectPrevDate(settings) {\n var ret = {\n startDate: settings.startDate,\n endDate: settings.startDate\n };\n\n if (settings.weekView) {\n settings.startDate = moment(settings.startDate)\n .startOf('isoWeek')\n .add(-7, 'd')\n .toDate();\n\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(7, 'd').toDate();\n } else {\n settings.startDate = moment(settings.startDate)\n .startOf('day')\n .add(-1, 'd')\n .toDate();\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(1, 'd').toDate();\n }\n\n return ret;\n }\n\n function selectNextDate(settings) {\n var ret = {\n startDate: settings.startDate,\n endDate: settings.startDate\n };\n\n if (settings.weekView) {\n settings.startDate = moment(settings.startDate)\n .startOf('isoWeek')\n .add(7, 'd')\n .toDate();\n\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(7, 'd').toDate();\n } else {\n settings.startDate = moment(settings.startDate)\n .startOf('day')\n .add(1, 'd')\n .toDate();\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(1, 'd').toDate();\n }\n\n return ret;\n }\n\n function selectToday(settings) {\n var ret = {\n startDate: settings.startDate,\n endDate: settings.startDate\n };\n\n if (settings.weekView) {\n settings.startDate = moment()\n .startOf('isoWeek')\n .toDate();\n\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(7, 'd').toDate();\n } else {\n settings.startDate = moment().startOf('day').toDate();\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(1, 'd').toDate();\n }\n\n return ret;\n }\n\n function fixSelectedDate(settings) {\n var ret = {\n startDate: settings.startDate,\n endDate: settings.startDate\n };\n\n if (settings.weekView) {\n var shouldBeSelected = moment(settings.startDate).startOf('isoweek');\n var isSelected = moment(settings.startDate);\n\n if (!shouldBeSelected.isSame(isSelected)) {\n settings.startDate = shouldBeSelected.toDate();\n }\n\n ret.startDate = settings.startDate;\n ret.endDate = moment(settings.startDate).add(7, 'd').toDate();\n } else {\n ret.endDate = moment(settings.startDate).add(1, 'd').toDate();\n }\n\n return ret;\n }\n\n function shouldShowWeekend(settings, selectedResources, startDate) {\n\n var saturdayStartDay = startDate.clone().isoWeekday(6).startOf('day');\n var sundayEndDay = startDate.clone().isoWeekday(7).endOf('day');\n\n for (var a = 0; a < settings.actions.length; a++) {\n var action = settings.actions[a];\n\n var actionStartDate = moment(action.startDate);\n var actionEndDate = moment(action.endDate);\n\n if (actionStartDate.isBefore(sundayEndDay) && actionEndDate.isAfter(saturdayStartDay)) {\n\n if (_.find(selectedResources, function(resource) {\n var actionResourceID = action[getMappedPropertyName(settings.actionsMapping, 'resourceID')];\n var resourceResourceID = resource[getMappedPropertyName(settings.recourcesMapping, 'resourceID')];\n return actionResourceID == resourceResourceID;\n } ))\n {\n return true;\n }\n }\n }\n\n return false;\n }\n\n function getMappedPropertyName(mapping, defaultPropertyName) {\n if (mapping && mapping[defaultPropertyName]) {\n return mapping[defaultPropertyName];\n }\n return defaultPropertyName;\n }\n\n function getResourceIDPropertyName(resourcesMapping) {\n return getMappedPropertyName(resourcesMapping, 'resourceID');\n }\n\n function getMappedResourceID(resourcesMapping, model) {\n if (resourcesMapping && resourcesMapping.resourceID) {\n return model[resourcesMapping.resourceID];\n }\n return model.resourceID;\n }\n\n function getSelectedResourceIDStartIndex(settings, selectedResourceID) {\n var findSettings = {};\n findSettings[getResourceIDPropertyName(settings.resourcesMapping)] = selectedResourceID;\n var resourceStartIdx = selectedResourceID\n ? _.findIndex(settings.resources, findSettings)\n : 0;\n if (resourceStartIdx < 0) {\n resourceStartIdx = 0;\n }\n\n return resourceStartIdx;\n }\n\n function getValidSelectedResourceID(settings, selectedResourceID) {\n if (settings.resources.length) {\n var resourceStartIdx = getSelectedResourceIDStartIndex(settings, selectedResourceID);\n return settings.resources[resourceStartIdx][getResourceIDPropertyName(settings.resourcesMapping)];\n } else {\n return selectedResourceID;\n }\n }\n\n function getSelectedResources(settings, selectedResourceID) {\n var resources = [];\n\n var resourcesLimit;\n\n var resourceStartIdx = getSelectedResourceIDStartIndex(settings, selectedResourceID);\n\n if (settings.weekView) {\n resourcesLimit = 1;\n } else {\n resourcesLimit = Math.min(settings.visibleResources, settings.resources.length) || 1;\n }\n\n for (var r = 0; r < resourcesLimit; r++) {\n var idx = resourceStartIdx + r;\n if (settings.resources.length !== 0) {\n var res = settings.resources[idx % settings.resources.length];\n resources.push({\n name: res.name,\n resourceID: res[getResourceIDPropertyName(settings.resourcesMapping)],\n origResource: res\n });\n } else {\n var emptyResource = { name: '', origResource: null };\n emptyResource[getResourceIDPropertyName(settings.resourcesMapping)] = 0;\n resources.push(emptyResource);\n }\n }\n\n return resources;\n }\n\n function calculateColumns(settings) {\n\n var today = moment().startOf('day');\n settings.todayIndex = -1;\n\n var daysLimit, startDate;\n\n var selectedResources = getSelectedResources(settings, settings.selectedResourceID);\n\n if (settings.weekView) {\n startDate = moment(settings.startDate).startOf('isoWeek');\n daysLimit = settings.showWeekend || shouldShowWeekend(settings, selectedResources, startDate) ? 7 : 5;\n } else {\n daysLimit = 1;\n startDate = moment(settings.startDate).startOf('day');\n }\n\n for (var d = 0; d < daysLimit; d++) {\n if (today.isSame(startDate)) {\n settings.todayIndex = d;\n }\n var clonedDate = startDate.clone().toDate();\n\n for (var r = 0; r < selectedResources.length; r++) {\n var resource = selectedResources[r];\n\n settings.columns.push({\n date: clonedDate,\n resourceID: resource.resourceID,\n resourceName: resource.name,\n caption: settings.weekView\n ? $filter('date')(clonedDate, 'EEE d. MMM')\n : resource.name\n });\n }\n startDate.add(1, 'days');\n }\n }\n\n function canSelectRegion(settings, selectionStart, selectionEnd)\n {\n if (!settings.availability) {\n return true;\n }\n\n var reverse = (selectionStart.colIndex > selectionEnd.colIndex) ||\n (selectionStart.colIndex == selectionEnd.colIndex &&\n selectionStart.rowIndex > selectionEnd.rowIndex);\n\n var startRowIdx = reverse\n ? selectionEnd.rowIndex\n : selectionStart.rowIndex;\n var startCol = reverse\n ? selectionEnd.colIndex\n : selectionStart.colIndex;\n\n var endRowIdx = reverse\n ? selectionStart.rowIndex\n : selectionEnd.rowIndex;\n\n var endCol = reverse\n ? selectionStart.colIndex\n : selectionEnd.colIndex; \n \n var origStartRowIdx = startRowIdx;\n\n while(startCol <= endCol)\n {\n if (startCol >= settings.columns.length) {\n break;\n }\n\n endRowIdx = startCol < endCol\n ? settings.rows.length\n : selectionEnd.rowIndex;\n\n while(startRowIdx <= endRowIdx) \n {\n if (!settings.availabilityObj[startRowIdx + '-' + startCol]) {\n return false;\n }\n\n startRowIdx = startRowIdx + 1;\n }\n\n startCol = startCol + 1;\n startRowIdx = 0;\n }\n\n var divider = 15;\n switch(settings.scale)\n {\n case 15:\n divider = 2;\n break;\n case 30:\n divider = 1;\n break;\n }\n \n switch(settings.startTimeType) {\n case 1: // CanStartAtWholeOrHalfHour\n if ((origStartRowIdx % divider) !== 0) {\n return false;\n }\n break;\n case 2: // CanStartAtWholeHourOnly\n if (origStartRowIdx % (2 * divider) !== 0) {\n return false;\n }\n break;\n case 3: // CanStartAtHalfHourOnly\n if (origStartRowIdx % (2 * divider) !== divider) {\n return false;\n }\n break;\n case 4: // CanStartAtSelectByBlocksConsecutive \n if ((origStartRowIdx % settings.selectByBlocks) !== 0) {\n return false;\n }\n break;\n }\n\n return true;\n }\n \n function isAlternateRow(rowIndex, settings) {\n var divider = 15;\n switch(settings.scale)\n {\n case 15:\n divider = 2;\n break;\n case 30:\n divider = 1;\n break;\n }\n\n switch(settings.startTimeType)\n {\n case 1: // CanStartAtWholeOrHalfHour\n return ~~(rowIndex/divider) % 2;\n case 2: // CanStartAtWholeHourOnly\n return ~~(rowIndex/(2 * divider)) % 2;\n case 3: // CanStartAtHalfHourOnly\n return ~~((rowIndex + divider)/(2 * divider)) % 2;\n case 4: // CanStartAtSelectByBlocksConsecutive\n return ~~(rowIndex/settings.selectByBlocks) % 2;\n default:\n return false;\n } \n }\n\n function calculateAvailability(settings) {\n \n settings.availabilityObj = {};\n var startDate;\n\n if (settings.weekView) {\n startDate = moment(settings.startDate).startOf('isoWeek');\n } else {\n startDate = moment(settings.startDate).startOf('day');\n }\n\n _.forEach(settings.availability || [], function(a) {\n var a_startDate = moment(a.start);\n var a_endDate = moment(a.end);\n var colIndex = a_startDate.diff(startDate, 'days');\n\n var startDateOffset = moment(a_startDate).subtract(settings.startHour, 'hours');\n var startIndex = \n (startDateOffset.hour() * settings.noOfSubRows) +\n (startDateOffset.minute() / settings.scale);\n\n var endDateOffset = moment(a_endDate).subtract(settings.startHour, 'hours');\n var endIndex = \n (endDateOffset.hour() * settings.noOfSubRows) +\n (endDateOffset.minute() / settings.scale); \n\n for(var i = startIndex; i < endIndex; i++) \n {\n settings.availabilityObj[i + '-' + colIndex] = true;\n }\n }); \n }\n\n function colIndexToDate(settings, colIndex) {\n return settings.columns[colIndex].date;\n }\n\n function rowIndexToTime(settings, rowIndex, isStartTime) {\n var row = settings.rows[rowIndex];\n if (isStartTime) {\n return {\n hour: row.hour,\n minute: row.subIndex * (60 / settings.noOfSubRows)\n }\n } else {\n return {\n hour: row.hour,\n minute: (row.subIndex + 1) * (60 / settings.noOfSubRows)\n }\n }\n }\n\n function getDateByRowAndColIndex(settings, colIndex, rowIndex, isStartTime) {\n var date = colIndexToDate(settings, colIndex);\n var hour = rowIndexToTime(settings, rowIndex, isStartTime);\n\n return moment(date).startOf('day').add(hour.hour, 'h').add(hour.minute, 'm').toDate();\n }\n\n function getStartEndDateBySelection(settings, selectionStart, selectionEnd) {\n\n if (selectionStart.colIndex < selectionEnd.colIndex ||\n (selectionStart.colIndex === selectionEnd.colIndex &&\n selectionStart.rowIndex < selectionEnd.rowIndex)) {\n\n return {\n startDate: getDateByRowAndColIndex(\n settings, selectionStart.colIndex, selectionStart.rowIndex, true),\n endDate: getDateByRowAndColIndex(\n settings, selectionEnd.colIndex, selectionEnd.rowIndex, false)\n };\n } else {\n return {\n startDate: getDateByRowAndColIndex(\n settings, selectionEnd.colIndex, selectionEnd.rowIndex, true),\n endDate: getDateByRowAndColIndex(\n settings, selectionStart.colIndex, selectionStart.rowIndex, false)\n };\n }\n }\n\n function calcStartEndHours(settings) {\n\n var visibleStartDateActions = [];\n var visibleEndDateActions = [];\n var startHour = settings.startHour || 8;\n var endHour = settings.endHour || 20;\n\n for (var a = 0; a < settings.actions.length; a++) {\n var action = settings.actions[a];\n\n var actionStartDate = moment(action.startDate);\n var actionEndDate = moment(action.endDate);\n\n var actionStartDateDay = actionStartDate.clone().startOf('day');\n var actionEndDateDay = actionEndDate.clone().startOf('day');\n\n // Find if this action should be displayed\n for(var c = 0; c < settings.columns.length; c++) {\n var column = settings.columns[c];\n\n var columnDate = moment(column.date);\n\n var actionResourceID = action[getMappedPropertyName(settings.actionsMapping, 'resourceID')];\n\n if (actionResourceID == column.resourceID) {\n if (columnDate.isSame(actionStartDateDay)) {\n visibleStartDateActions.push(action);\n }\n if (columnDate.isSame(actionEndDateDay)) {\n visibleEndDateActions.push(action);\n }\n }\n\n }\n }\n\n var lowerBound;\n var upperBound;\n\n if (visibleStartDateActions.length > 0) {\n var startDateSorted = _.sortBy(visibleStartDateActions, function(action) { return moment(action.startDate).hour() * 60 + moment(action.startDate).minute(); } );\n lowerBound = moment(startDateSorted[0].startDate);\n upperBound = moment(startDateSorted[startDateSorted.length - 1].startDate);\n\n if (settings.autoHourRange) {\n startHour = lowerBound.hour();\n } else {\n if (startHour > lowerBound.hour()) {\n startHour = lowerBound.hour();\n }\n\n if (endHour < upperBound.hour()) {\n endHour = upperBound.hour();\n if (upperBound.minute() > 0) {\n endHour += 1;\n }\n }\n }\n }\n\n if (visibleEndDateActions.length > 0) {\n var endDateSorted = _.sortBy(visibleEndDateActions, function(action) { return moment(action.endDate).hour() * 60 + moment(action.endDate).minute(); } );\n lowerBound = moment(endDateSorted[0].endDate);\n upperBound = moment(endDateSorted[endDateSorted.length - 1].endDate);\n\n if (settings.autoHourRange) {\n endHour = upperBound.hour();\n if (upperBound.minute() > 0) {\n endHour += 1;\n }\n } else {\n if (endHour < upperBound.hour()) {\n endHour = upperBound.hour();\n if (upperBound.minute() > 0) {\n endHour += 1;\n }\n }\n\n if (startHour > lowerBound.hour()) {\n startHour = lowerBound.hour();\n }\n }\n }\n\n if (settings.autoHourRange && (endHour - startHour) < 3) {\n endHour = startHour + 3;\n }\n\n if (settings.autoHourRange && !visibleStartDateActions.length && !visibleEndDateActions.length) {\n endHour = startHour + 3;\n }\n\n return {\n startHour: startHour,\n endHour: endHour\n }\n }\n\n function calculateRows(settings) {\n var noOfSubRows = Math.ceil(60.0 / settings.scale);\n\n settings.noOfSubRows = noOfSubRows;\n\n var startEndHours = calcStartEndHours(settings);\n settings.startHour = startEndHours.startHour;\n settings.endHour = startEndHours.endHour;\n\n for(var h = settings.startHour; h < settings.endHour; h++) {\n for (var s = 0; s < noOfSubRows; s++) {\n settings.rows.push({\n firstRow: s === 0,\n lastRow: s === (noOfSubRows - 1),\n subIndex: s,\n hour: h\n });\n }\n }\n }\n\n function calculateSizes(settings) {\n settings.columnWidth = 100 / settings.columns.length;\n settings.rowHeigh = 100 / settings.rows.length;\n }\n\n //scope.model = {\n // recurrenceType: 1,\n // weekPeriodicity: 1,\n // weekWeekDays: 0,\n // dayPeriodicity: 1,\n // dayWeekDays: 0,\n // monthRecurrenceType: 0,\n // monthDayNumber: 1,\n // monthPeriodicity0: 1,\n // monthPeriodicity1: 1,\n // monthWeekDays: 1,\n // monthWeekOfMonth: 1,\n // yearRecurrenceType: 0,\n // yearDayNumber: 1,\n // yearMonth0: 1,\n // yearMonth1: 1,\n // yearWeekOfMonth: 1,\n // yearWeekDays: 1\n //};\n\n //enum WeekOfMonth\n //{\n // None = 0,\n // First = 1,\n // Second = 2,\n // Third = 3,\n // Fourth = 4,\n // Last = 5\n //}\n\n function dateToWeekDays(date) {\n switch(moment(date).day()) {\n case 0:\n return 1;\n case 1:\n return 2;\n case 2:\n return 4;\n case 3:\n return 8;\n case 4:\n return 16;\n case 5:\n return 32;\n case 6:\n return 64;\n }\n\n return 0;\n }\n\n function mapRecurrenceDtoToModel(model, dto) {\n\n model.recurrenceType = dto.type;\n model.range = dto.range;\n model.occurrenceCount = dto.occurrenceCount || 10;\n model.start = dto.start || moment().toDate();\n model.end = dto.end || moment(model.start).add(3, 'month').toDate();\n\n // RecurrenceType.Daily === 0\n\n if (model.recurrenceType === 0) {\n model.dayWeekDays = dto.weekDays === 62 ? 62 : 0;\n model.dayPeriodicity = dto.periodicity || 1;\n } else {\n model.dayWeekDays = 0;\n model.dayPeriodicity = 1;\n }\n\n // RecurrenceType.Weekly === 1\n model.weekPeriodicity = dto.periodicity || 1;\n if (model.recurrenceType === 1) {\n model.weekWeekDays = dto.weekDays || dateToWeekDays(model.start);\n } else {\n model.weekWeekDays = dateToWeekDays(model.start);\n }\n\n // RecurrenceType.Monthly === 2\n model.monthRecurrenceType = !dto.weekOfMonth ? 0 : 1;\n model.monthDayNumber = dto.dayNumber || 1;\n model.monthWeekOfMonth = dto.weekOfMonth || 1;\n if (model.recurrenceType === 2) {\n model.monthPeriodicity0 = dto.periodicity || 1;\n model.monthPeriodicity1 = dto.periodicity || 1;\n model.monthWeekDays = dto.weekDays || dateToWeekDays(model.start);\n } else {\n model.monthPeriodicity0 = 1;\n model.monthPeriodicity1 = 1;\n model.monthWeekDays = dateToWeekDays(model.start);\n }\n\n // RecurrenceType.Yearly === 3\n model.yearRecurrenceType = !dto.weekOfMonth ? 0 : 1;\n model.yearWeekOfMonth = dto.weekOfMonth || 1;\n model.yearMonth0 = dto.month || 1;\n model.yearMonth1 = dto.month || 1;\n if (model.recurrenceType === 3) {\n model.yearWeekDays = dto.weekDays || dateToWeekDays(model.start);\n model.yearDayNumber = dto.dayNumber || 1;\n } else {\n model.yearWeekDays = dateToWeekDays(model.start);\n model.yearDayNumber = 1;\n }\n\n return model;\n }\n\n\n function mapRecurrenceModelToDto(dto, model) {\n // Clean up\n Object.keys(dto).forEach(function(key) { delete dto[key]; });\n\n dto.type = model.recurrenceType;\n dto.range = model.range;\n dto.start = model.start;\n if (model.range == 1) {\n dto.occurrenceCount = model.occurrenceCount;\n } else {\n dto.end = model.end;\n }\n\n if (model.recurrenceType === 0) {\n if (model.dayPeriodicity !== 1) {\n dto.periodicity = model.dayPeriodicity;\n }\n if (model.dayWeekDays) {\n dto.weekDays = model.dayWeekDays;\n }\n } else if (model.recurrenceType === 1) {\n dto.periodicity = model.weekPeriodicity;\n dto.weekDays = model.weekWeekDays;\n } else if (model.recurrenceType === 2) {\n if (model.monthRecurrenceType === 0) {\n dto.weekOfMonth = 0;\n dto.dayNumber = model.monthDayNumber;\n if (model.monthPeriodicity0 !== 1) {\n dto.periodicity = model.monthPeriodicity0;\n }\n } else {\n dto.weekOfMonth = model.monthWeekOfMonth;\n dto.weekDays = model.monthWeekDays;\n if (model.monthPeriodicity1 !== 1) {\n dto.periodicity = model.monthPeriodicity1;\n }\n }\n } else if (model.recurrenceType === 3) {\n if (model.yearRecurrenceType === 0) {\n dto.weekOfMonth = 0;\n dto.month = model.yearMonth0;\n dto.dayNumber = model.yearDayNumber;\n } else {\n dto.weekDays = model.yearWeekDays;\n dto.weekOfMonth = model.yearWeekOfMonth;\n dto.month = model.yearMonth1;\n }\n dto.periodicity = 1;\n }\n\n return dto;\n }\n\n return {\n calculateEvents: calculateEvents,\n selectPrevDate: selectPrevDate,\n selectNextDate: selectNextDate,\n selectToday: selectToday,\n fixSelectedDate: fixSelectedDate,\n calculateColumns: calculateColumns,\n getSelectedResources: getSelectedResources,\n calculateRows: calculateRows,\n calculateSizes: calculateSizes,\n getMappedResourceID: getMappedResourceID,\n getValidSelectedResourceID: getValidSelectedResourceID,\n mapRecurrenceDtoToModel: mapRecurrenceDtoToModel,\n mapRecurrenceModelToDto: mapRecurrenceModelToDto,\n getStartEndDateBySelection: getStartEndDateBySelection,\n calculateAvailability: calculateAvailability,\n canSelectRegion: canSelectRegion,\n isAlternateRow: isAlternateRow\n };\n}]);\n\n// Source: wbSplitter.js\nangular.module('wb.directives')\r\n\r\n .directive('wbSplitter', ['$compile', function ($compile) {\r\n return {\r\n restrict: 'EA',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n orientation: '@'\r\n },\r\n template: '
',\r\n controller: ['$scope', function ($scope) {\r\n $scope.panes = [];\r\n\r\n this.addPane = function (pane) {\r\n if ($scope.panes.length > 1)\r\n throw 'splitters can only have two panes';\r\n $scope.panes.push(pane);\r\n return $scope.panes.length;\r\n };\r\n }],\r\n link: function (scope, element, attrs, ctrl, transclude) {\r\n var handler = angular.element(\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
');\r\n\r\n transclude(scope.$parent, function (clone, scope) {\r\n element.append(clone);\r\n });\r\n\r\n var pane1 = scope.panes[0];\r\n var pane2 = scope.panes[1];\r\n var vertical = scope.orientation == 'vertical';\r\n var pane1Min = pane1.minSize || 0;\r\n var pane2Min = pane2.minSize || 8;\r\n var pane2Size = pane2.initSize || 100;\r\n var drag = false;\r\n var topHeight;\r\n var lastSize = 0;\r\n scope.minified = false;\r\n\r\n //scope.style1 = { height: '100px', width: '100px'};\r\n\r\n pane1.elem.after($compile(handler)(scope));\r\n\r\n var h = element[0].getBoundingClientRect().height;\r\n setPosition(h - pane2Size, h);\r\n\r\n element.bind('mousemove', function (ev) {\r\n if (!drag) return;\r\n\r\n var bounds = element[0].getBoundingClientRect();\r\n var pos = 0;\r\n\r\n if (vertical) {\r\n\r\n var height = bounds.bottom - bounds.top;\r\n pos = ev.clientY - bounds.top;\r\n\r\n if (pos < pane1Min) return;\r\n if (height - pos < pane2Min) return;\r\n\r\n setPosition(pos, height);\r\n\r\n } else {\r\n\r\n var width = bounds.right - bounds.left;\r\n pos = ev.clientX - bounds.left;\r\n\r\n if (pos < pane1Min) return;\r\n if (width - pos < pane2Min) return;\r\n\r\n handler.css('left', pos + 'px');\r\n pane1.elem.css('width', pos + 'px');\r\n pane2.elem.css('left', pos + 'px');\r\n }\r\n });\r\n\r\n handler.bind('mousedown', function (ev) {\r\n ev.preventDefault();\r\n drag = true;\r\n });\r\n\r\n angular.element(document).bind('mouseup', function (ev) {\r\n drag = false;\r\n });\r\n\r\n scope.onMinimizeUp = function () {\r\n var bounds = element[0].getBoundingClientRect();\r\n\r\n if (vertical) {\r\n var pos = lastSize;\r\n var height = bounds.bottom - bounds.top;\r\n\r\n setPosition(pos, height);\r\n }\r\n }\r\n\r\n scope.onMinimizeDown = function () {\r\n var bounds = element[0].getBoundingClientRect();\r\n var pos = 0;\r\n\r\n if (vertical) {\r\n var height = bounds.bottom - bounds.top;\r\n pos = height - handler.height();\r\n\r\n lastSize = pane1.elem.height();\r\n\r\n setPosition(pos, height);\r\n }\r\n }\r\n\r\n function setPosition(pos, height) {\r\n\r\n handler.css('top', pos + 'px');\r\n pane1.elem.css('height', pos + 'px');\r\n pane2.elem.css('top', pos + 'px');\r\n\r\n if (topHeight !== pos) {\r\n topHeight = pos;\r\n $(element).resize();\r\n\r\n scope.$parent.$broadcast('splitter-pane-resized');\r\n }\r\n\r\n if (pos >= (height - handler.height() - 10)) {\r\n scope.minified = true;\r\n if (!lastSize) {\r\n lastSize = height - 100;\r\n }\r\n } else {\r\n scope.minified = false;\r\n lastSize = 0;\r\n }\r\n }\r\n }\r\n };\r\n }])\r\n .directive('wbPane', function () {\r\n return {\r\n restrict: 'EA',\r\n require: '^wbSplitter',\r\n replace: true,\r\n transclude: true,\r\n scope: {\r\n minSize: '=',\r\n initSize: '='\r\n },\r\n template:\r\n '
',\r\n link: function (scope, element, attrs, wbSplitterCtrl, transclude) {\r\n scope.elem = element;\r\n scope.index = wbSplitterCtrl.addPane(scope);\r\n\r\n transclude(scope.$parent, function (clone, scope) {\r\n element.append(clone);\r\n });\r\n }\r\n };\r\n });\n\n})(window, document);\n","(function(window, document, undefined) {\n'use strict';\n\n// Source: wb-busy-indicator.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('busyIndicator/templates/wb-busy-indicator.tpl.html', '

{{\\'TXT_BUSY\\' | translate}}

');\n\n}]);\n\n// Source: wb-checkbox-bitmask-edit.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('checkbox/templates/wb-checkbox-bitmask-edit.tpl.html', '');\n\n}]);\n\n// Source: wb-checkbox-edit.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('checkbox/templates/wb-checkbox-edit.tpl.html', '');\n\n}]);\n\n// Source: wb-radio-edit.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('checkbox/templates/wb-radio-edit.tpl.html', '');\n\n}]);\n\n// Source: wb-scheduler-date-picker.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-date-picker.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-day-periodicity.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-day-periodicity.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-day-week-days.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-day-week-days.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-month-periodicity.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-month-periodicity.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-month-week-days.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-month-week-days.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-week-periodicity.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-week-periodicity.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-week-week-days.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-week-week-days.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-year-periodicity.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-year-periodicity.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence-year-week-days.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence-year-week-days.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-recurrence.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-recurrence.tpl.html', '
');\n\n}]);\n\n// Source: wb-scheduler-tooltip.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler-tooltip.tpl.html', '

{{startTime | date:\\'shortTime\\'}} - {{endTime | date:\\'shortTime\\'}}

{{startTime | date:\\'short\\'}}

{{endTime | date:\\'short\\'}}

{{teacher}}

{{name}}

{{notes}}

{{filled}}

');\n\n}]);\n\n// Source: wb-scheduler.tpl.js\nangular.module('wb.directives').run(['$templateCache', function($templateCache) {\n\n $templateCache.put('scheduler/templates/wb-scheduler.tpl.html', '
{{option.columns[0].date | date:\\'EEEE d. MMMM\\'}} {{option.columns[0].resourceName }}
{{::column.caption}}
{{::row.hour}} 00
{{::event.startTime | date:\\'short\\'}} {{::event.startTime | date:\\'shortTime\\'}} - {{::event.endTime | date:\\'short\\'}} {{::event.endTime | date:\\'shortTime\\'}}
3, \\'scheduler-cell-event-name-xs\\': option.columns.length > 5}\">{{::event.name}}
{{::event.teacher}}
{{::event.filled}}
');\n\n}]);\n\n\n})(window, document);\n"]}