{"version":3,"file":"c8y-ngx-components-reports.mjs","sources":["../../reports/reports.service.ts","../../reports/export-schedules.interface.ts","../../reports/cron.service.ts","../../reports/cron.component.ts","../../reports/cron.component.html","../../reports/schedule-modal.component.ts","../../reports/schedule-modal.component.html","../../reports/export-schedules.component.ts","../../reports/export-schedules.component.html","../../reports/reports.module.ts","../../reports/ng1/downgraded.components.ts","../../reports/ng1/downgraded.services.ts","../../reports/ng1/index.ts","../../reports/c8y-ngx-components-reports.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { Export, Schedule } from './export-schedules.interface';\nimport { AlertService } from '@c8y/ngx-components';\nimport { orderBy, isEqual, remove, some } from 'lodash-es';\nimport {\n  InventoryService,\n  IdReference,\n  IFetchResponse,\n  IIdentified,\n  FetchClient,\n  IFetchOptions\n} from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ReportsService {\n  microserviceUrl: string;\n  headers: any;\n  isReportAgentSubscribed: boolean;\n  REPORT_AGENT_NOT_SUBSCRIBED_EXPECTED_ERROR_LOWER_CASE: string;\n\n  constructor(\n    private alertService: AlertService,\n    private inventoryService: InventoryService,\n    private client: FetchClient,\n    private translateService: TranslateService\n  ) {\n    this.microserviceUrl = '/service/reporting';\n    this.headers = { 'Content-Type': 'application/json' };\n    this.isReportAgentSubscribed = true;\n    this.REPORT_AGENT_NOT_SUBSCRIBED_EXPECTED_ERROR_LOWER_CASE = 'microservice/not found';\n  }\n\n  async getExport(exportId: IdReference) {\n    let exp: Export;\n    const exportDetail = await this.inventoryService.detail(exportId);\n    const { data, res } = exportDetail;\n    if (res.status !== 200) {\n      this.alertService.addServerFailure({ data, res });\n    } else {\n      exp = data ? (data as unknown as Export) : ({} as Export);\n    }\n\n    return exp;\n  }\n\n  async getScheduleList(exportId: IdReference) {\n    const exp = await this.getExport(exportId);\n\n    return this.extractScheduleListFromExport(exp);\n  }\n\n  extractScheduleListFromExport(exp: Export) {\n    let scheduleList: Schedule[];\n    if (exp) {\n      scheduleList = exp.c8y_ScheduleConfiguration ? exp.c8y_ScheduleConfiguration : [];\n    }\n    return orderBy(scheduleList, ['timestamp'], ['desc']);\n  }\n\n  async addSchedule(schedule: Schedule, exportId: IdReference) {\n    return await this.updateSchedules(exportId, [], [schedule]);\n  }\n\n  async updateSchedule(oldSchedule: Schedule, schedule: Schedule, exportId: IdReference) {\n    return await this.updateSchedules(exportId, [oldSchedule], [schedule]);\n  }\n\n  async updateSchedules(\n    exportId: IdReference,\n    schedulesToRemove: Schedule[] = [],\n    schedulesToAdd: Schedule[] = []\n  ) {\n    let success = false;\n    const exp = await this.getExport(exportId);\n    const schedules = this.extractScheduleListFromExport(exp);\n\n    remove(schedules, (schedule: Schedule) =>\n      some(schedulesToRemove, (scheduleToRemove: Schedule) => isEqual(schedule, scheduleToRemove))\n    );\n    schedules.push(...schedulesToAdd);\n    exp.c8y_ScheduleConfiguration = schedules;\n    const { data, res } = await this.inventoryService.update(exp);\n    if (res.status === 200) {\n      success = await this.reschedule(exportId);\n    } else {\n      this.alertService.addServerFailure({ data, res });\n    }\n\n    return success;\n  }\n\n  async reschedule(exportId: IdReference) {\n    const options: IFetchOptions = {\n      method: 'PUT',\n      headers: this.headers\n    };\n    const rescheduling = await this.client.fetch(\n      `${this.microserviceUrl}/schedule/${exportId}`,\n      options\n    );\n    return rescheduling.status === 200;\n  }\n\n  async deleteSchedule(schedule: Schedule, exportId: IdReference) {\n    return await this.updateSchedules(exportId, [schedule], []);\n  }\n\n  /**\n   * Removes report configuration.\n   *\n   * Note: fallback strategy is based on error code returned by backend\n   * in case of missing subscription for report-agent microservice.\n   * @param config entity of report configuration\n   * @returns Response wrapped in [[IFetchResponse]]\n   */\n  async removeConfiguration(config: IIdentified): Promise<IFetchResponse> {\n    let res: IFetchResponse;\n    if (!this.isReportAgentSubscribed) {\n      res = await this.fallbackConfigurationRemoval(config);\n    } else {\n      res = await this.normalConfigurationRemoval(config);\n      if (res.status === 404) {\n        const data = await res.json();\n        if (\n          data &&\n          data.error &&\n          data.error.toLowerCase() === this.REPORT_AGENT_NOT_SUBSCRIBED_EXPECTED_ERROR_LOWER_CASE\n        ) {\n          res = await this.fallbackConfigurationRemoval(config);\n          this.isReportAgentSubscribed = false;\n        }\n      }\n    }\n    return res;\n  }\n\n  async normalConfigurationRemoval(config: IIdentified): Promise<IFetchResponse> {\n    const url = `${this.microserviceUrl}/config/${config.id}`;\n    return await this.client.fetch(url, { method: 'DELETE' });\n  }\n\n  async fallbackConfigurationRemoval(config: IIdentified): Promise<IFetchResponse> {\n    let res;\n    try {\n      res = (await this.inventoryService.delete(config)).res;\n    } catch (e) {\n      // this could be an error related to not existing object or anything else which makes request return error status code\n      // in case of concurrent removal everything is fine, therefor warning message. But it might not recover from some errors\n      this.alertService.addServerFailure(e, 'warning');\n    }\n    return res;\n  }\n\n  async requestExport(config: IIdentified): Promise<void> {\n    const response = await this.client.fetch(`export/exports?configurationId=${config.id}`);\n    if (response.ok) {\n      return;\n    }\n\n    throw new Error(`Failed to request export: ${response.statusText}`);\n  }\n}\n","import { IManagedObject } from '@c8y/client';\n\nexport interface Export extends IManagedObject {\n  c8y_ScheduleConfiguration: Schedule[];\n}\n\nexport interface Schedule {\n  timestamp: number;\n  emailConfig: EmailConfig;\n  cronConfig: CronConfig;\n}\n\nexport interface EmailConfig {\n  to: string[];\n  cc: string[];\n  bcc: string[];\n  replyTo: string;\n  text: string;\n  subject: string;\n}\n\nexport interface CronConfig {\n  month: string;\n  hour: string;\n  weekday: string;\n  day: string;\n  minute: string;\n}\n\nexport interface EmittedCron {\n  cron: string;\n  valid: boolean;\n}\n\nexport interface EmitterPayload {\n  success: boolean;\n  message: string;\n  schedule: Schedule;\n}\n\nexport enum ActionType {\n  CREATE = 'create',\n  EDIT = 'edit',\n  DUPLICATE = 'duplicate'\n}\n\nexport enum Base {\n  Initial = 1,\n  Hour,\n  Day,\n  Week,\n  Month,\n  Year\n}\n","import { Injectable } from '@angular/core';\nimport { CronConfig, Base } from './export-schedules.interface';\nimport { TranslateService } from '@ngx-translate/core';\nimport { formatDate } from '@angular/common';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Injectable()\nexport class CronService {\n  daysOfWeekPosix: any[] = [];\n  daysOfMonth = [\n    { value: '1', label: '1.' },\n    { value: '2', label: '2.' },\n    { value: '3', label: '3.' },\n    { value: '4', label: '4.' },\n    { value: '5', label: '5.' },\n    { value: '6', label: '6.' },\n    { value: '7', label: '7.' },\n    { value: '8', label: '8.' },\n    { value: '9', label: '9.' },\n    { value: '10', label: '10.' },\n    { value: '11', label: '11.' },\n    { value: '12', label: '12.' },\n    { value: '13', label: '13.' },\n    { value: '14', label: '14.' },\n    { value: '15', label: '15.' },\n    { value: '16', label: '16.' },\n    { value: '17', label: '17.' },\n    { value: '18', label: '18.' },\n    { value: '19', label: '19.' },\n    { value: '20', label: '20.' },\n    { value: '21', label: '21.' },\n    { value: '22', label: '22.' },\n    { value: '23', label: '23.' },\n    { value: '24', label: '24.' },\n    { value: '25', label: '25.' },\n    { value: '26', label: '26.' },\n    { value: '27', label: '27.' },\n    { value: '28', label: '28.' },\n    { value: '29', label: '29.' },\n    { value: '30', label: '30.' },\n    { value: '31', label: '31.' }\n  ];\n  months: any[] = [];\n  hours: any[] = [];\n  minutes: any[] = [];\n  intervals = [\n    { value: 2, label: gettext('Hour') },\n    { value: 3, label: gettext('Day') },\n    { value: 4, label: gettext('Week') },\n    { value: 5, label: gettext('Month') },\n    { value: 6, label: gettext('Year') }\n  ];\n  constructor(private translateService: TranslateService) {\n    for (let x = 0; x < 24; x++) {\n      this.hours.push({ value: x.toString(), label: `${x}` });\n    }\n    for (let x = 0; x < 60; x = x + 5) {\n      this.minutes.push({ value: x.toString(), label: `${x}` });\n    }\n\n    for (let x = 0; x < 7; x++) {\n      this.daysOfWeekPosix.push({\n        value: x.toString(),\n        label: this.getWeekDayName({ weekday: x } as unknown as CronConfig)\n      });\n    }\n\n    for (let x = 1; x < 13; x++) {\n      this.months.push({\n        value: x.toString(),\n        label: this.getMonthName({ month: x } as unknown as CronConfig)\n      });\n    }\n  }\n\n  generateCron(cronConfig: CronConfig) {\n    let cron = '';\n    cron = cronConfig.minute ? `${cronConfig.minute}` : '*';\n    cron += cronConfig.hour ? ` ${cronConfig.hour}` : ' *';\n    cron += cronConfig.day ? ` ${cronConfig.day}` : ' *';\n    cron += cronConfig.month ? ` ${cronConfig.month}` : ' *';\n    cron += cronConfig.weekday ? ` ${cronConfig.weekday}` : ' *';\n\n    return cron;\n  }\n\n  generateCronConfig(cron: string) {\n    const parts = cron.split(/\\s+/);\n    const cronConfig: CronConfig = {\n      minute: parts[0],\n      hour: parts[1],\n      day: parts[2],\n      month: parts[3],\n      weekday: parts[4]\n    };\n\n    return cronConfig;\n  }\n\n  getBase(cronConfig: CronConfig) {\n    let base: Base = Base.Initial;\n\n    if (\n      cronConfig.minute !== '*' &&\n      cronConfig.hour === '*' &&\n      cronConfig.day === '*' &&\n      cronConfig.month === '*' &&\n      cronConfig.weekday === '*'\n    ) {\n      base = Base.Hour;\n    } else if (\n      cronConfig.minute !== '*' &&\n      cronConfig.hour !== '*' &&\n      cronConfig.day === '*' &&\n      cronConfig.month === '*' &&\n      cronConfig.weekday === '*'\n    ) {\n      base = Base.Day;\n    } else if (\n      cronConfig.minute !== '*' &&\n      cronConfig.hour !== '*' &&\n      cronConfig.day === '*' &&\n      cronConfig.month === '*' &&\n      cronConfig.weekday !== '*'\n    ) {\n      base = Base.Week;\n    } else if (\n      cronConfig.minute !== '*' &&\n      cronConfig.hour !== '*' &&\n      cronConfig.day !== '*' &&\n      cronConfig.month === '*' &&\n      cronConfig.weekday === '*'\n    ) {\n      base = Base.Month;\n    } else if (\n      cronConfig.minute !== '*' &&\n      cronConfig.hour !== '*' &&\n      cronConfig.day !== '*' &&\n      cronConfig.month !== '*' &&\n      cronConfig.weekday === '*'\n    ) {\n      base = Base.Year;\n    } else {\n      // cronConfig invalid\n    }\n\n    return base;\n  }\n\n  validateModels(base: Base, cronConfig: CronConfig) {\n    let valid: boolean;\n    switch (base) {\n      case Base.Initial: // Please select\n        valid = false;\n        break;\n      case Base.Hour:\n        if (cronConfig.minute !== '*') {\n          valid = true;\n        } else {\n          valid = false;\n        }\n        break;\n      case Base.Day:\n        if (cronConfig.minute !== '*' && cronConfig.hour !== '*') {\n          valid = true;\n        } else {\n          valid = false;\n        }\n        break;\n      case Base.Week:\n        if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.weekday !== '*') {\n          valid = true;\n        } else {\n          valid = false;\n        }\n        break;\n      case Base.Month:\n        if (cronConfig.minute !== '*' && cronConfig.hour !== '*' && cronConfig.day !== '*') {\n          valid = true;\n        } else {\n          valid = false;\n        }\n        break;\n      case Base.Year:\n        if (\n          cronConfig.minute !== '*' &&\n          cronConfig.hour !== '*' &&\n          cronConfig.day !== '*' &&\n          cronConfig.month !== '*'\n        ) {\n          valid = true;\n        } else {\n          valid = false;\n        }\n        break;\n      default:\n        valid = false;\n    }\n\n    return valid;\n  }\n\n  clearNextModels(base: Base, cronConfig: CronConfig) {\n    if (base === Base.Initial) {\n      // please select, delete all\n      // cron expression: every minute at second 0\n      cronConfig.minute = '*';\n      cronConfig.hour = '*';\n      cronConfig.day = '*';\n      cronConfig.month = '*';\n      cronConfig.weekday = '*';\n    } else if (base === Base.Hour) {\n      // hour, don't delete minutes\n      // cron expression: every hour, at whatever minute, at second 0\n      cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n      cronConfig.hour = '*';\n      cronConfig.day = '*';\n      cronConfig.month = '*';\n      cronConfig.weekday = '*';\n    } else if (base === Base.Day) {\n      // day, don't delete minutes and hours\n      // cron expression: every day of every month, at whatever hour and minute, at second 0\n      cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n      cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n      cronConfig.day = '*';\n      cronConfig.month = '*';\n      cronConfig.weekday = '*';\n    } else if (base === Base.Week) {\n      // week, delete month and day\n      // cron expression: every month, at whatever weekday, hour and minute, at second 0\n      cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n      cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n      cronConfig.day = '*';\n      cronConfig.month = '*';\n      cronConfig.weekday =\n        cronConfig.weekday === '*' || cronConfig.weekday === '?'\n          ? this.daysOfWeekPosix[0].value\n          : cronConfig.weekday;\n    } else if (base === Base.Month) {\n      // month, delete month and weekday\n      // cron expression: every month, at whatever day of month, hour and minute, at second 0\n      cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n      cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n      cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n      cronConfig.month = '*';\n      cronConfig.weekday = '*';\n    } else if (base === Base.Year) {\n      // year, delete weekday\n      // cron expression: every year, at whatever month, day of month, hour and minute, at second 0\n      cronConfig.minute = cronConfig.minute === '*' ? this.minutes[0].value : cronConfig.minute;\n      cronConfig.hour = cronConfig.hour === '*' ? this.hours[0].value : cronConfig.hour;\n      cronConfig.day = cronConfig.day === '*' ? this.daysOfMonth[0].value : cronConfig.day;\n      cronConfig.month = cronConfig.month === '*' ? this.months[0].value : cronConfig.month;\n      cronConfig.weekday = '*';\n    }\n  }\n\n  getWeekDayName(cronConfig: CronConfig) {\n    const date = new Date(0);\n    const firstSundayDate = date.getDate() + 3; // because we know date 0 was on Thursday...\n    date.setDate(firstSundayDate + parseInt(cronConfig.weekday, 10));\n    return formatDate(date, 'EEEE', this.translateService.currentLang);\n  }\n\n  getMonthDayName(cronConfig: CronConfig) {\n    let name = '';\n    this.daysOfMonth.forEach(item => {\n      if (item.value === cronConfig.day) {\n        name = item.label;\n      }\n    });\n\n    return name;\n  }\n\n  getMonthName(cronConfig: CronConfig) {\n    const date = new Date(0);\n    date.setMonth(parseInt(cronConfig.month, 10) - 1);\n    return formatDate(date, 'LLLL', this.translateService.currentLang);\n  }\n}\n","import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';\nimport { EmittedCron, CronConfig, Base } from './export-schedules.interface';\nimport { CronService } from './cron.service';\nimport { C8yTranslateDirective, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { FormsModule } from '@angular/forms';\nimport { NgIf, NgFor, DecimalPipe } from '@angular/common';\n\n@Component({\n  selector: 'cron',\n  templateUrl: './cron.component.html',\n  imports: [C8yTranslateDirective, FormsModule, NgIf, NgFor, C8yTranslatePipe, DecimalPipe]\n})\nexport class CronComponent implements OnInit {\n  @Input() cronIn: string;\n  @Output() emitter: EventEmitter<EmittedCron> = new EventEmitter();\n  emittedCron: EmittedCron = {\n    valid: false,\n    cron: ''\n  };\n\n  base: Base = Base.Initial;\n  cronConfig: CronConfig;\n\n  daysOfWeekPosix: any[];\n  daysOfMonth: any[];\n  months: any[];\n  hours: any[];\n  minutes: any[];\n  intervals: any[];\n\n  constructor(private cronService: CronService) {\n    //\n  }\n\n  ngOnInit() {\n    this.daysOfWeekPosix = this.cronService.daysOfWeekPosix;\n    this.daysOfMonth = this.cronService.daysOfMonth;\n    this.months = this.cronService.months;\n    this.hours = this.cronService.hours;\n    this.minutes = this.cronService.minutes;\n    this.intervals = this.cronService.intervals;\n\n    this.cronConfig = this.cronService.generateCronConfig(this.cronIn);\n    this.base = this.cronService.getBase(this.cronConfig);\n  }\n\n  onChangeSelect() {\n    this.cronService.clearNextModels(this.base, this.cronConfig);\n    this.emittedCron.valid = this.cronService.validateModels(this.base, this.cronConfig);\n    this.emittedCron.cron = this.cronService.generateCron(this.cronConfig);\n    this.emitter.emit(this.emittedCron);\n  }\n}\n","<div class=\"cron-wrap\">\n  <div class=\"form-group smart-cron-job-every\">\n    <label for=\"smart-cron-job-every\" class=\"control-label\" translate>Interval</label>\n    <div>\n      <div class=\"c8y-select-wrapper\">\n        <select\n          class=\"cron-select form-control\"\n          id=\"smart-cron-job-every\"\n          [(ngModel)]=\"base\"\n          required=\"true\"\n          (change)=\"onChangeSelect()\"\n        >\n          <option *ngIf=\"base === 1\" value=\"1\" translate>Select…</option>\n          <option *ngFor=\"let baseInterval of intervals\" [ngValue]=\"baseInterval.value\">\n            {{ baseInterval.label | translate }}\n          </option>\n        </select>\n        <span></span>\n      </div>\n    </div>\n  </div>\n  <div class=\"row\">\n    <div class=\"form-group smart-cron-job-on col-md-6\" *ngIf=\"base == 4\">\n      <label class=\"control-label\" for=\"smart-cron-job-on\" translate>Day</label>\n\n      <div class=\"c8y-select-wrapper\">\n        <select\n          class=\"cron-select form-control day-value\"\n          id=\"smart-cron-job-on\"\n          [(ngModel)]=\"cronConfig.weekday\"\n          (change)=\"onChangeSelect()\"\n        >\n          <option *ngFor=\"let dayOfWeek of daysOfWeekPosix\" [ngValue]=\"dayOfWeek.value\">\n            {{ dayOfWeek.label | translate }}\n          </option>\n        </select>\n        <span></span>\n      </div>\n    </div>\n\n    <div class=\"form-group smart-cron-job-of col-md-6\" *ngIf=\"base == 6\">\n      <label for=\"smart-cron-job-of\" class=\"control-label\" translate>Month</label>\n      <div>\n        <div class=\"c8y-select-wrapper\">\n          <select\n            id=\"smart-cron-job-of\"\n            class=\"cron-select form-control month-value\"\n            [(ngModel)]=\"cronConfig.month\"\n            (change)=\"onChangeSelect()\"\n          >\n            <option *ngFor=\"let month of months\" [ngValue]=\"month.value\">\n              {{ month.label | translate }}\n            </option>\n          </select>\n          <span></span>\n        </div>\n      </div>\n    </div>\n\n    <div class=\"form-group smart-cron-job-on-the col-md-6\" *ngIf=\"base >= 5\">\n      <label for=\"smart-cron-job-on-the\" class=\"control-label\" translate>Day</label>\n      <div>\n        <div class=\"c8y-select-wrapper\">\n          <select\n            id=\"smart-cron-job-on-the\"\n            class=\"cron-select form-control day-of-month-value\"\n            [(ngModel)]=\"cronConfig.day\"\n            (change)=\"onChangeSelect()\"\n          >\n            <option *ngFor=\"let dayOfMonth of daysOfMonth\" [ngValue]=\"dayOfMonth.value\">\n              {{ dayOfMonth.label | translate }}\n            </option>\n          </select>\n          <span></span>\n        </div>\n      </div>\n    </div>\n  </div>\n\n  <div class=\"form-group smart-cron-job-at\" *ngIf=\"base >= 2\">\n    <label for=\"smart-cron-job-at-hour\" class=\"control-label\">\n      <span *ngIf=\"base >= 3\" translate>Time</span>\n      <span *ngIf=\"base < 3\" translate>Minutes</span>\n    </label>\n    <div>\n      <div class=\"form-inline\">\n        <div class=\"c8y-select-wrapper\" *ngIf=\"base >= 3\">\n          <select\n            id=\"smart-cron-job-at-hour\"\n            class=\"cron-select form-control hour-value\"\n            [(ngModel)]=\"cronConfig.hour\"\n            (change)=\"onChangeSelect()\"\n          >\n            <option *ngFor=\"let hour of hours\" [ngValue]=\"hour.value\">\n              {{ hour.value | number: '2.0-0' }}\n            </option>\n          </select>\n          <span></span>\n        </div>\n        <span *ngIf=\"base >= 3\">:</span>\n        <div class=\"c8y-select-wrapper\">\n          <select\n            class=\"cron-select form-control minute-value\"\n            id=\"smart-cron-job-at-minute\"\n            [(ngModel)]=\"cronConfig.minute\"\n            (change)=\"onChangeSelect()\"\n          >\n            <option *ngFor=\"let minute of minutes\" [ngValue]=\"minute.value\">\n              {{ minute.value | number: '2.0-0' }}\n            </option>\n          </select>\n          <span></span>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Schedule, ActionType, EmittedCron, EmitterPayload } from './export-schedules.interface';\nimport { CronService } from './cron.service';\nimport { cloneDeep } from 'lodash-es';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  IconDirective,\n  C8yTranslateDirective,\n  FormGroupComponent,\n  RequiredInputPlaceholderDirective,\n  EmailsValidatorDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\nimport { NgIf } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { CronComponent } from './cron.component';\n\n@Component({\n  selector: 'schedule-modal',\n  templateUrl: './schedule-modal.component.html',\n  imports: [\n    IconDirective,\n    NgIf,\n    C8yTranslateDirective,\n    FormsModule,\n    CronComponent,\n    FormGroupComponent,\n    RequiredInputPlaceholderDirective,\n    EmailsValidatorDirective,\n    C8yTranslatePipe\n  ]\n})\nexport class ScheduleModalComponent implements OnInit {\n  schedule: Schedule;\n  oldSchedule: Schedule;\n  @Output() emitter: EventEmitter<EmitterPayload> = new EventEmitter();\n  exportId: number;\n  actionType: ActionType;\n  ActionType = ActionType;\n  cronExpression = '* * * * *';\n  validCron = false;\n  emitterPayload: EmitterPayload = {\n    success: false,\n    message: '',\n    schedule: { timestamp: undefined, emailConfig: undefined, cronConfig: undefined }\n  };\n\n  emailTo: string;\n  emailCc: string;\n  emailBcc: string;\n  emailReplyTo: string;\n  emailSubject: string;\n  emailText: string;\n\n  placeholdersInfo = gettext(\n    'Available placeholders: {tenant-domain}, {host}, {binaryId}. Whole link to downloadable file is: {tenant-domain}/inventory/binaries/{binaryId}.'\n  );\n\n  constructor(\n    public reportsService: ReportsService,\n    public modalRef: BsModalRef,\n    private cronService: CronService\n  ) {}\n\n  ngOnInit() {\n    this.oldSchedule = cloneDeep(this.schedule);\n    this.populateEmailFieldsFromSchedule(this.schedule);\n    this.cronExpression = this.cronService.generateCron(this.schedule.cronConfig);\n    this.validCron = this.cronService.validateModels(\n      this.cronService.getBase(this.schedule.cronConfig),\n      this.schedule.cronConfig\n    );\n  }\n\n  populateEmailFieldsFromSchedule(schedule: Schedule) {\n    if (schedule.emailConfig.to && schedule.emailConfig.to.length) {\n      this.emailTo = schedule.emailConfig.to.toString();\n    }\n    if (schedule.emailConfig.cc && schedule.emailConfig.cc.length) {\n      this.emailCc = schedule.emailConfig.cc.toString();\n    }\n    if (schedule.emailConfig.bcc && schedule.emailConfig.bcc.length) {\n      this.emailBcc = schedule.emailConfig.bcc.toString();\n    }\n    if (schedule.emailConfig.replyTo) {\n      this.emailReplyTo = schedule.emailConfig.replyTo;\n    }\n    if (schedule.emailConfig.subject) {\n      this.emailSubject = schedule.emailConfig.subject;\n    }\n    if (schedule.emailConfig.text) {\n      this.emailText = schedule.emailConfig.text;\n    }\n  }\n\n  save() {\n    this.populateScheduleFromCronExpression();\n    this.populateScheduleFromEmailFields();\n    if (this.actionType === ActionType.CREATE || this.actionType === ActionType.DUPLICATE) {\n      const date = new Date();\n      const timestamp = date.getTime();\n      this.schedule.timestamp = timestamp;\n    }\n    this.emitterPayload.success = true;\n    this.emitterPayload.schedule = this.schedule;\n    this.modalRef.hide();\n    // signal to the parent component to update list\n    this.emitter.emit(this.emitterPayload);\n  }\n\n  cancel() {\n    this.modalRef.hide();\n  }\n\n  getCron(cron: EmittedCron) {\n    this.validCron = cron.valid;\n    if (cron.valid) {\n      this.cronExpression = cron.cron;\n    }\n  }\n\n  populateScheduleFromCronExpression() {\n    this.schedule.cronConfig = this.cronService.generateCronConfig(this.cronExpression);\n  }\n\n  convertStringOfEmailsToArray(stringOfEmails: string) {\n    const arr = [];\n    if (stringOfEmails) {\n      const parts = stringOfEmails.split(',');\n      parts.forEach(item => {\n        if (item) {\n          arr.push(item);\n        }\n      });\n    }\n    return arr;\n  }\n\n  populateScheduleFromEmailFields() {\n    this.schedule.emailConfig.to = this.emailTo\n      ? this.convertStringOfEmailsToArray(this.emailTo)\n      : null;\n    this.schedule.emailConfig.cc = this.emailCc\n      ? this.convertStringOfEmailsToArray(this.emailCc)\n      : null;\n    this.schedule.emailConfig.bcc = this.emailBcc\n      ? this.convertStringOfEmailsToArray(this.emailBcc)\n      : null;\n    this.schedule.emailConfig.replyTo = this.emailReplyTo;\n    this.schedule.emailConfig.subject = this.emailSubject;\n    this.schedule.emailConfig.text = this.emailText;\n  }\n}\n","<div class=\"modal-header dialog-header\">\n  <i c8yIcon=\"c8y-report\"></i>\n  <h4 id=\"modal-title\">\n    <span *ngIf=\"actionType === ActionType.CREATE\" translate>New export schedule</span>\n    <span *ngIf=\"actionType === ActionType.EDIT\" translate>Edit export schedule</span>\n    <span *ngIf=\"actionType === ActionType.DUPLICATE\" translate>Duplicate export schedule</span>\n  </h4>\n</div>\n\n<div class=\"modal-body\" id=\"modal-body\">\n  <p class=\"lead text-center p-t-24 m-b-0\" translate>On schedule send export via email</p>\n</div>\n<div class=\"modal-inner-scroll smart-rule-control\">\n  <form #scheduleForm=\"ngForm\" class=\"edit-smart-rule-details\">\n    <div class=\"list-group\">\n      <div class=\"list-group-item bg-level-1\">\n        <div class=\"smart-list-icon-label\">\n          <span class=\"dot bg-primary-light m-r-8\">1</span>\n          <strong translate>Frequency</strong>\n        </div>\n        <div class=\"p-t-16\">\n          <div class=\"form-group\">\n            <cron [cronIn]=\"cronExpression\" (emitter)=\"getCron($event)\" name=\"cron\"></cron>\n          </div>\n        </div>\n      </div>\n      <div class=\"list-group-item\">\n        <div class=\"smart-list-icon-label\">\n          <span class=\"dot bg-primary-light m-r-8\">2</span>\n          <div class=\"d-inline-block\">\n            <strong translate>Send email</strong>\n            <p class=\"help-block text-muted small p-absolute\">\n              <i class=\"text-info m-r-4 text-14\" c8yIcon=\"info-circle\"></i>\n              <span translate\n                >Enter one or more valid email addresses, separated with a comma.</span\n              >\n            </p>\n          </div>\n        </div>\n        <div class=\"p-t-24\">\n          <div class=\"form-group\">\n            <label class=\"control-label\" translate>Send to</label>\n            <c8y-form-group>\n              <input\n                emails\n                type=\"text\"\n                class=\"form-control\"\n                name=\"to\"\n                [(ngModel)]=\"emailTo\"\n                placeholder=\"{{\n                  'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`' | translate\n                }}\"\n                required\n              />\n            </c8y-form-group>\n          </div>\n\n          <div class=\"form-group\">\n            <label class=\"control-label\" translate>CC</label>\n            <c8y-form-group>\n              <input\n                emails\n                type=\"text\"\n                class=\"form-control span\"\n                name=\"cc\"\n                placeholder=\"{{\n                  'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`' | translate\n                }}\"\n                [(ngModel)]=\"emailCc\"\n              />\n            </c8y-form-group>\n          </div>\n\n          <div class=\"form-group\">\n            <label class=\"control-label\" translate>BCC</label>\n            <c8y-form-group>\n              <input\n                emails\n                type=\"text\"\n                class=\"form-control span\"\n                name=\"bcc\"\n                placeholder=\"{{\n                  'e.g. joe.doe@example.com,john.smith@example.com`LOCALIZE`' | translate\n                }}\"\n                [(ngModel)]=\"emailBcc\"\n              />\n            </c8y-form-group>\n          </div>\n\n          <div class=\"form-group\">\n            <label class=\"control-label\" translate>Reply to (single email address)</label>\n            <c8y-form-group>\n              <input\n                email\n                type=\"text\"\n                class=\"form-control span\"\n                name=\"replyTo\"\n                placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n                [(ngModel)]=\"emailReplyTo\"\n              />\n            </c8y-form-group>\n          </div>\n\n          <div class=\"form-group\">\n            <label class=\"control-label\" translate>Subject</label>\n            <c8y-form-group>\n              <input\n                type=\"text\"\n                class=\"form-control span\"\n                name=\"subject\"\n                [(ngModel)]=\"emailSubject\"\n                placeholder=\"{{ 'e.g. Daily report' | translate }}\"\n                required\n              />\n            </c8y-form-group>\n          </div>\n\n          <div class=\"form-group\">\n            <label class=\"control-label\" translate>Message</label>\n            <c8y-form-group>\n              <textarea\n                class=\"form-control\"\n                name=\"text\"\n                [(ngModel)]=\"emailText\"\n                placeholder=\"{{ 'Message' | translate }}\"\n                rows=\"4\"\n                required\n              ></textarea>\n              <p class=\"help-block text-muted\">\n                {{ placeholdersInfo | translate }}\n              </p>\n            </c8y-form-group>\n          </div>\n        </div>\n      </div>\n    </div>\n  </form>\n</div>\n\n<div class=\"modal-footer\">\n  <button class=\"btn btn-default\" (click)=\"cancel()\" title=\"{{ 'Cancel' | translate }}\">\n    {{ 'Cancel' | translate }}\n  </button>\n  <button\n    class=\"btn btn-primary\"\n    (click)=\"save()\"\n    [disabled]=\"!validCron || !scheduleForm.form.valid\"\n  >\n    <span>\n      <span *ngIf=\"actionType === ActionType.CREATE\" title=\"{{ 'Create' | translate }}\">\n        {{ 'Create' | translate }}\n      </span>\n      <span *ngIf=\"actionType === ActionType.EDIT\" title=\"{{ 'Save' | translate }}\">\n        {{ 'Save' | translate }}\n      </span>\n      <span *ngIf=\"actionType === ActionType.DUPLICATE\" title=\"{{ 'Duplicate' | translate }}\">\n        {{ 'Duplicate' | translate }}\n      </span>\n    </span>\n  </button>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';\nimport { Export, Schedule, EmitterPayload, ActionType } from './export-schedules.interface';\nimport { ReportsService } from './reports.service';\nimport { BsModalService, BsModalRef, ModalOptions } from 'ngx-bootstrap/modal';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  OptionsService,\n  Permissions,\n  LoadingComponent,\n  C8yTranslateDirective,\n  EmptyStateComponent,\n  IconDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { cloneDeep, isEmpty } from 'lodash-es';\nimport { CronService } from './cron.service';\nimport { IdReference, UserService } from '@c8y/client';\nimport { TranslateService } from '@ngx-translate/core';\nimport { NgIf, NgFor, DecimalPipe } from '@angular/common';\nimport {\n  BsDropdownDirective,\n  BsDropdownToggleDirective,\n  BsDropdownMenuDirective\n} from 'ngx-bootstrap/dropdown';\n\n@Component({\n  selector: 'export-schedules',\n  templateUrl: './export-schedules.component.html',\n  imports: [\n    NgIf,\n    LoadingComponent,\n    C8yTranslateDirective,\n    EmptyStateComponent,\n    NgFor,\n    IconDirective,\n    BsDropdownDirective,\n    BsDropdownToggleDirective,\n    BsDropdownMenuDirective,\n    C8yTranslatePipe,\n    DecimalPipe\n  ]\n})\nexport class ExportSchedulesComponent implements OnInit, OnChanges {\n  @Input() set exportId(exportId: IdReference) {\n    this._exportId = exportId;\n  }\n\n  @Output() onSchedulesUpdate = new EventEmitter<Schedule[]>();\n\n  exp: Export;\n  scheduleList: Schedule[] = [];\n  initialSchedule: Schedule = {\n    timestamp: null,\n    emailConfig: {\n      to: [],\n      cc: [],\n      bcc: [],\n      replyTo: '',\n      text: '',\n      subject: ''\n    },\n    cronConfig: {\n      minute: '0',\n      hour: '0',\n      day: '1',\n      month: '1',\n      weekday: '?'\n    }\n  };\n  buttonLabels: any;\n  listClass = 'interact-list';\n  loadingStatus: any;\n  sortType: string;\n  sortReverse = false;\n  isOpen: any = {};\n  isFlipped: boolean;\n  isEditMenuOpen = false;\n  modalRef: BsModalRef;\n  currentUserEmail = '';\n  hasRequiredRole = false;\n  private _exportId: IdReference;\n  private defaultExportEmailTemplate = this.translateService.instant(\n    gettext(\n      'File with exported data can be downloaded from {tenant-domain}/apps/cockpit/index.html#?download={binaryId}.'\n    )\n  );\n\n  constructor(\n    private reportsService: ReportsService,\n    private bsModalService: BsModalService,\n    public cronService: CronService,\n    private translateService: TranslateService,\n    private userService: UserService,\n    private optionsService: OptionsService\n  ) {\n    this.loadingStatus = {\n      inProgress: false,\n      done: false,\n      error: false\n    };\n  }\n\n  async ngOnInit() {\n    this.hasRequiredRole = await this.checkRole();\n    this.getScheduleList(true);\n    const currentUserEmail = await this.getCurrentUserEmail();\n    this.initialSchedule.emailConfig.text = await this.optionsService.getTenantOption(\n      'configuration',\n      'export.data.mail.text'\n    );\n    if (isEmpty(this.initialSchedule.emailConfig.text)) {\n      this.initialSchedule.emailConfig.text = await this.optionsService.getInheritedTenantOption(\n        'configuration',\n        'export.data.mail.text',\n        this.defaultExportEmailTemplate\n      );\n    }\n    this.initialSchedule.emailConfig.to = currentUserEmail;\n    this.exp = await this.reportsService.getExport(this._exportId);\n    this.initialSchedule.emailConfig.subject = this.translateService.instant(\n      gettext('Export of \"{{expName}}\"'),\n      { expName: this.exp.name }\n    );\n  }\n\n  ngOnChanges() {\n    this.translateButtonTitles();\n  }\n\n  translateButtonTitles() {\n    this.buttonLabels = {\n      edit: this.translateService.instant(gettext('Edit schedule')),\n      editNoPermission: this.translateService.instant(gettext('Edit schedule - no permissions')),\n      duplicate: this.translateService.instant(gettext('Duplicate schedule')),\n      duplicateNoPermission: this.translateService.instant(\n        gettext('Duplicate schedule - no permissions')\n      ),\n      delete: this.translateService.instant(gettext('Delete schedule')),\n      deleteNoPermission: this.translateService.instant(gettext('Delete schedule - no permissions'))\n    };\n  }\n\n  async getCurrentUserEmail() {\n    const { data } = await this.userService.current();\n    return data && data.email ? [data.email] : [];\n  }\n  async checkRole() {\n    const { data } = await this.userService.current();\n    const role = Permissions.ROLE_SCHEDULE_REPORT_ADMIN;\n    const hasRole = this.userService.hasRole(data, role);\n    return hasRole;\n  }\n\n  async getScheduleList(withProgress: boolean) {\n    if (withProgress) {\n      this.loadingStatus.inProgress = true;\n    }\n    this.scheduleList = await this.reportsService.getScheduleList(this._exportId);\n    if (withProgress) {\n      this.loadingStatus.inProgress = false;\n    }\n  }\n\n  addSchedule() {\n    this.openAddEditModal(this._exportId, this.initialSchedule, ActionType.CREATE);\n  }\n\n  editSchedule(schedule: Schedule, index: number, event: any) {\n    if (this.hasRequiredRole) {\n      event.preventDefault();\n      this.openAddEditModal(this._exportId, schedule, ActionType.EDIT, index);\n    }\n  }\n\n  duplicateSchedule(schedule: Schedule, event: any) {\n    event.preventDefault();\n    this.openAddEditModal(this._exportId, schedule, ActionType.DUPLICATE);\n  }\n\n  openAddEditModal(\n    exportId: IdReference,\n    schedule: Schedule,\n    actionType: ActionType,\n    index?: number\n  ) {\n    const payload = { actionType, exportId, schedule: cloneDeep(schedule) };\n    const modalOptions = {\n      class: 'modal-sm',\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title',\n      initialState: payload\n    } as ModalOptions;\n    this.modalRef = this.bsModalService.show(ScheduleModalComponent, modalOptions);\n    this.modalRef.content.emitter.subscribe((load: EmitterPayload) =>\n      this.getMessageFromModal(load, index)\n    );\n  }\n\n  getMessageFromModal(payload: EmitterPayload, index?: number) {\n    if (payload.success) {\n      if (index !== undefined) {\n        this.scheduleList[index] = payload.schedule;\n      } else {\n        this.scheduleList.push(payload.schedule);\n      }\n      this.onSchedulesUpdate.emit(this.scheduleList);\n    }\n  }\n\n  removeSchedule(schedule: Schedule, index: number, event: any) {\n    event.preventDefault();\n    this.scheduleList.splice(index, 1);\n    this.onSchedulesUpdate.emit(this.scheduleList);\n  }\n}\n","<div>\n  <div *ngIf=\"loadingStatus.inProgress\" class=\"d-flex a-i-center\">\n    <c8y-loading></c8y-loading>\n  </div>\n\n  <div *ngIf=\"!loadingStatus.inProgress && loadingStatus.done && loadingStatus.error\">\n    <div class=\"alert alert-warning max-width-100\" translate>Could not load schedules list.</div>\n  </div>\n\n  <div *ngIf=\"!loadingStatus.inProgress && !loadingStatus.done && !loadingStatus.error\">\n    <c8y-ui-empty-state\n      *ngIf=\"!scheduleList.length\"\n      [icon]=\"'c8y-report'\"\n      [title]=\"'No export schedules defined.' | translate\"\n      [horizontal]=\"true\"\n    ></c8y-ui-empty-state>\n\n    <div class=\"c8y-list__group\" *ngIf=\"scheduleList.length\">\n      <div class=\"c8y-list__item hidden-xs\">\n        <div class=\"c8y-list__item__block\">\n          <div class=\"c8y-list__item__icon\">\n            <i class=\"p-l-24\"></i>\n          </div>\n          <div class=\"c8y-list__item__body\">\n            <div class=\"d-flex\">\n              <div class=\"col-sm-6\">\n                <label class=\"m-0\">\n                  {{ 'Description' | translate }}\n                </label>\n              </div>\n              <div class=\"col-sm-6 m-r-40\">\n                <label class=\"m-0\">\n                  {{ 'Frequency' | translate }}\n                </label>\n              </div>\n            </div>\n          </div>\n          <span></span>\n        </div>\n      </div>\n\n      <div\n        class=\"c8y-list__item pointer\"\n        *ngFor=\"let schedule of scheduleList; index as i\"\n        (click)=\"editSchedule(schedule, i, $event)\"\n      >\n        <div class=\"c8y-list__item__block\">\n          <div class=\"c8y-list__item__icon\">\n            <i c8yIcon=\"c8y-report\" class=\"c8y-icon-duocolor\"></i>\n          </div>\n          <div class=\"c8y-list__item__body d-flex\">\n            <div class=\"col-sm-6 col-xs-6\">\n              <div class=\"text-truncate\" title=\"{{ schedule.emailConfig.subject }}\">\n                {{ schedule.emailConfig.subject }}\n              </div>\n            </div>\n            <div class=\"col-sm-6 col-xs-6\">\n              <div class=\"d-flex a-i-baseline\">\n                <i c8yIcon=\"calendar\" class=\"text-muted m-r-4\"></i>\n                <span class=\"smart-rule-information\">\n                  <span\n                    *ngIf=\"cronService.getBase(schedule.cronConfig) === 2\"\n                    ngNonBindable\n                    translate\n                    [translateParams]=\"{ minutes: schedule.cronConfig.minute | number: '2.0-0' }\"\n                  >\n                    Hourly: {{ minutes }} minute(s) past the hour.\n                  </span>\n                  <span\n                    *ngIf=\"cronService.getBase(schedule.cronConfig) === 3\"\n                    ngNonBindable\n                    translate\n                    [translateParams]=\"{\n                      hour: schedule.cronConfig.hour | number: '2.0-0',\n                      minutes: schedule.cronConfig.minute | number: '2.0-0'\n                    }\"\n                  >\n                    Daily: at {{ hour }}:{{ minutes }}.\n                  </span>\n                  <span\n                    *ngIf=\"cronService.getBase(schedule.cronConfig) === 4\"\n                    ngNonBindable\n                    translate\n                    [translateParams]=\"{\n                      weekDay: cronService.getWeekDayName(schedule.cronConfig),\n                      hour: schedule.cronConfig.hour | number: '2.0-0',\n                      minutes: schedule.cronConfig.minute | number: '2.0-0'\n                    }\"\n                  >\n                    Weekly: {{ weekDay }}, at {{ hour }}:{{ minutes }}.\n                  </span>\n                  <span\n                    *ngIf=\"cronService.getBase(schedule.cronConfig) === 5\"\n                    ngNonBindable\n                    translate\n                    [translateParams]=\"{\n                      monthDay: cronService.getMonthDayName(schedule.cronConfig),\n                      hour: schedule.cronConfig.hour | number: '2.0-0',\n                      minutes: schedule.cronConfig.minute | number: '2.0-0'\n                    }\"\n                  >\n                    Monthly: {{ monthDay }} day of the month, at {{ hour }}:{{ minutes }}.\n                  </span>\n                  <span\n                    *ngIf=\"cronService.getBase(schedule.cronConfig) === 6\"\n                    ngNonBindable\n                    translate\n                    [translateParams]=\"{\n                      month: cronService.getMonthName(schedule.cronConfig),\n                      monthDay: cronService.getMonthDayName(schedule.cronConfig),\n                      hour: schedule.cronConfig.hour | number: '2.0-0',\n                      minutes: schedule.cronConfig.minute | number: '2.0-0'\n                    }\"\n                  >\n                    Yearly: {{ month }}, {{ monthDay }} day of the month, at {{ hour }}:{{\n                      minutes\n                    }}.\n                  </span>\n                </span>\n              </div>\n            </div>\n          </div>\n          <div class=\"c8y-list__item__actions\" (click)=\"$event.stopPropagation()\">\n            <div class=\"settings dropdown\" dropdown>\n              <button\n                class=\"dropdown-toggle c8y-dropdown\"\n                type=\"button\"\n                title=\"{{ 'Actions' | translate }}\"\n                dropdownToggle\n              >\n                <i [c8yIcon]=\"'ellipsis-v'\"></i>\n              </button>\n              <ul role=\"list\" class=\"dropdown-menu dropdown-menu-right\" *dropdownMenu>\n                <li role=\"menuitem\">\n                  <button\n                    type=\"button\"\n                    [title]=\"hasRequiredRole ? buttonLabels.edit : buttonLabels.editNoPermission\"\n                    (click)=\"editSchedule(schedule, i, $event)\"\n                    [disabled]=\"!hasRequiredRole\"\n                  >\n                    <i [c8yIcon]=\"'pencil'\"></i>\n                    {{ 'Edit' | translate }}\n                  </button>\n                </li>\n                <li role=\"menuitem\">\n                  <button\n                    type=\"button\"\n                    [title]=\"\n                      hasRequiredRole ? buttonLabels.duplicate : buttonLabels.duplicateNoPermission\n                    \"\n                    (click)=\"duplicateSchedule(schedule, $event)\"\n                    [disabled]=\"!hasRequiredRole\"\n                  >\n                    <i [c8yIcon]=\"'copy'\"></i>\n                    {{ 'Duplicate' | translate }}\n                  </button>\n                </li>\n                <li role=\"menuitem\">\n                  <button\n                    type=\"button\"\n                    [title]=\"\n                      hasRequiredRole ? buttonLabels.delete : buttonLabels.deleteNoPermission\n                    \"\n                    (click)=\"removeSchedule(schedule, i, $event)\"\n                    [disabled]=\"!hasRequiredRole\"\n                  >\n                    <i [c8yIcon]=\"'delete'\"></i>\n                    {{ 'Delete' | translate }}\n                  </button>\n                </li>\n              </ul>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div class=\"alert alert-warning max-width-100\" *ngIf=\"!hasRequiredRole\" role=\"alert\" translate>\n    You don't have the permission required to schedule exports.\n  </div>\n  <button\n    class=\"btn btn-default m-t-16\"\n    type=\"button\"\n    title=\"{{ 'Add schedule' | translate }}\"\n    (click)=\"addSchedule()\"\n    [disabled]=\"!hasRequiredRole\"\n  >\n    <i [c8yIcon]=\"'plus-circle'\"></i>\n    {{ 'Add schedule' | translate }}\n  </button>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CoreModule, FormsModule } from '@c8y/ngx-components';\nimport { ReportsService } from './reports.service';\nimport { CronService } from './cron.service';\nimport { ExportSchedulesComponent } from './export-schedules.component';\nimport { ScheduleModalComponent } from './schedule-modal.component';\nimport { CronComponent } from './cron.component';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\n\n/**\n * The angular module definition for reports.\n * @exports ExportSchedulesComponent\n * @exports ScheduleModalComponent\n * @exports CronComponent\n */\n@NgModule({\n  imports: [\n    CoreModule,\n    FormsModule,\n    BsDropdownModule,\n    TooltipModule,\n    ExportSchedulesComponent,\n    ScheduleModalComponent,\n    CronComponent\n  ],\n  providers: [ReportsService, CronService],\n  exports: [ExportSchedulesComponent, ScheduleModalComponent, CronComponent]\n})\nexport class ReportsModule {}\n","import { downgradeComponent } from '@angular/upgrade/static';\nimport { ExportSchedulesComponent } from '../export-schedules.component';\nexport const exportSchedulesComponentDowngradedComponent = downgradeComponent({\n  component: ExportSchedulesComponent\n});\n","import { downgradeInjectable } from '@angular/upgrade/static';\nimport { ReportsService } from '../reports.service';\nexport const reportsServiceDowngradedInjectable = downgradeInjectable(ReportsService);\n","import * as angular from 'angular';\nimport { registerNgModule } from '@c8y/ng1-modules';\nimport { exportSchedulesComponentDowngradedComponent } from './downgraded.components';\nimport { reportsServiceDowngradedInjectable } from './downgraded.services';\n\nconst NAME_REPORTS = 'c8y.upgrade.reports';\n\nangular\n  .module(NAME_REPORTS, [])\n  .directive('c8yExportSchedules', exportSchedulesComponentDowngradedComponent)\n  .service('c8yReportsService', reportsServiceDowngradedInjectable);\n\nexport const ng1ModulesReports = [NAME_REPORTS];\n\nregisterNgModule(ng1ModulesReports);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.CronService","i2","i1.ReportsService","i3.CronService","i4","i5","i6","FormsModule"],"mappings":"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"}