{"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/recurringInvoiceDetail/recurringInvoice.js","activities/models/recurringInvoiceDetail/recurringSchedule.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","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","specification","allLists","lists","list","filteredList","multiple","maximumSelectionSize","Array","isArray","join","n","selectedValue","console","info","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","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","defaultOptions","cacheEnabled","rowAlternationEnabled","showRowLines","focusStateEnabled","hoverStateEnabled","filterRow","searchPanel","paging","pageSize","pager","showInfo","showPageSizeSelector","showNavigationButtons","showOperationChooser","groupPanel","mode","editing","allowUpdating","allowDeleting","allowAdding","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","notVisibleColumns","beginUpdate","col","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","exportVisibleColumnsOnly","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","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","onExporting","grid","origColLength","prepareGridForExport","onExported","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","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","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","RecurringInvoice","invoiceTemplateID","paymentReferenceNumber","issuedInvoices","today","_endIssueTypeID","_lastEndAfterNoOfIssues","_lastEndAtSpecificDate","issuedAt","lastDayOfMonth","maxDay","lastIssuedDate","nextIssueDate","todayIsImportant","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","$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 // Detect changes in activity name\n if ($scope.model.activityId) {\n $scope.onActivityChange();\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', 'gridSortSvc',\n function ($timeout, $translate, czMsMtRegistrySvc, gridSortSvc) {\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 specification: '=', \n },\n link: function (scope, elm, attrs, controller) {\n \n let allLists = czMsMtRegistrySvc.lists();\n let list = [];\n allLists.$promise.then(function() {\n list.length = 0;\n list.push.apply(list, allLists[scope.listName]);\n if (scope.specification !== undefined) {\n let filteredList = _.filter(allLists[scope.listName], function(item) {\n return item.specification === scope.specification;\n });\n list.length = 0;\n list.push.apply(list, filteredList);\n }\n \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: list,\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 scope.$watch('specification', function (newValue) {\n if (newValue !== undefined) {\n if (newValue === '999xxx') {\n newValue = 'C99xxx';\n }\n if (!!newValue) {\n let filteredList = _.filter(allLists[scope.listName], function (item) {\n return item.specification === newValue;\n });\n\n filteredList = _.sortBy(filteredList, function (a) {\n return gridSortSvc.localeSort(a, 'name');\n });\n \n list.length = 0;\n list.push.apply(list, filteredList);\n } else {\n let filteredList = allLists[scope.listName];\n filteredList = _.sortBy(filteredList, function (a) {\n return gridSortSvc.localeSort(a, 'name');\n });\n list.length = 0;\n list.push.apply(list, filteredList);\n }\n \n $(elm).select2('data', list);\n \n if (list.length === 0) {\n $(elm).select2('val', null);\n controller.$setViewValue(null);\n } else {\n let selectedValue = controller.$viewValue;\n console.info('selectedValue: ' + controller.$viewValue);\n if (!_.find(list, { 'id': selectedValue })) {\n\n console.info('not found');\n \n $(elm).select2('val', list[0].id);\n controller.$setViewValue(list[0].id);\n } else {\n $(elm).select2('val', selectedValue);\n controller.$setViewValue(selectedValue);\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 }, 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 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 let notVisibleColumns = [];\n scope.gridInstance.beginUpdate();\n scope.settings.columns.forEach(function (col) {\n if (col.visible !== undefined && !col.visible) {\n notVisibleColumns.push(col);\n scope.gridInstance.columnOption(col.dataField, \"visible\", true);\n }\n });\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 }).then(function() {\n notVisibleColumns.forEach(function (col) {\n scope.gridInstance.columnOption(col.dataField, \"visible\", false);\n });\n scope.gridInstance.endUpdate();\n }, function(error) {\n notVisibleColumns.forEach(function (col) {\n scope.gridInstance.columnOption(col.dataField, \"visible\", false);\n });\n scope.gridInstance.endUpdate(); \n });\n break;\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 refreshData();\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\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 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));","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","(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"]}