{"ast":null,"code":"import _asyncToGenerator from \"/root/rfcontavagas_hom/12.-Servidor-local-Docker/Front-Parking-Angular/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport * as XLSX from 'xlsx';\nimport { saveAs } from 'file-saver';\nimport jsPDF from 'jspdf';\nimport autoTable from 'jspdf-autotable';\nimport { environment } from '../environments/environment';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/common/http\";\nimport * as i2 from \"../services/user.service\";\nimport * as i3 from \"../services/client.service\";\nimport * as i4 from \"@angular/common\";\nimport * as i5 from \"@angular/forms\";\nfunction RelatorioComponent_div_3_option_7_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"option\", 11);\n    i0.ɵɵtext(1);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const relatorio_r3 = ctx.$implicit;\n    i0.ɵɵproperty(\"value\", relatorio_r3.tipo);\n    i0.ɵɵadvance();\n    i0.ɵɵtextInterpolate1(\" \", relatorio_r3.label, \" \");\n  }\n}\nfunction RelatorioComponent_div_3_div_10_option_6_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"option\", 11);\n    i0.ɵɵtext(1);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const piso_r5 = ctx.$implicit;\n    i0.ɵɵproperty(\"value\", piso_r5);\n    i0.ɵɵadvance();\n    i0.ɵɵtextInterpolate(piso_r5);\n  }\n}\nfunction RelatorioComponent_div_3_div_10_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r4 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"div\", 12)(1, \"label\");\n    i0.ɵɵtext(2, \"Filtrar Piso: \");\n    i0.ɵɵelementStart(3, \"select\", 5);\n    i0.ɵɵtwoWayListener(\"ngModelChange\", function RelatorioComponent_div_3_div_10_Template_select_ngModelChange_3_listener($event) {\n      i0.ɵɵrestoreView(_r4);\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      i0.ɵɵtwoWayBindingSet(ctx_r1.pisoFiltrado, $event) || (ctx_r1.pisoFiltrado = $event);\n      return i0.ɵɵresetView($event);\n    });\n    i0.ɵɵelementStart(4, \"option\", 13);\n    i0.ɵɵtext(5, \"Todos\");\n    i0.ɵɵelementEnd();\n    i0.ɵɵtemplate(6, RelatorioComponent_div_3_div_10_option_6_Template, 2, 2, \"option\", 6);\n    i0.ɵɵelementEnd()()();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵadvance(3);\n    i0.ɵɵtwoWayProperty(\"ngModel\", ctx_r1.pisoFiltrado);\n    i0.ɵɵadvance(3);\n    i0.ɵɵproperty(\"ngForOf\", ctx_r1.todosOsPisos);\n  }\n}\nfunction RelatorioComponent_div_3_div_11_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r6 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"div\", 14)(1, \"button\", 15);\n    i0.ɵɵlistener(\"click\", function RelatorioComponent_div_3_div_11_Template_button_click_1_listener() {\n      i0.ɵɵrestoreView(_r6);\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      return i0.ɵɵresetView(ctx_r1.exportarExcel());\n    });\n    i0.ɵɵtext(2, \"\\uD83D\\uDCE5 Exportar Excel\");\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(3, \"button\", 16);\n    i0.ɵɵlistener(\"click\", function RelatorioComponent_div_3_div_11_Template_button_click_3_listener() {\n      i0.ɵɵrestoreView(_r6);\n      const ctx_r1 = i0.ɵɵnextContext(2);\n      return i0.ɵɵresetView(ctx_r1.exportarPDF());\n    });\n    i0.ɵɵtext(4, \"\\uD83E\\uDDFE Exportar PDF\");\n    i0.ɵɵelementEnd()();\n  }\n}\nfunction RelatorioComponent_div_3_table_12_tr_12_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"tr\")(1, \"td\");\n    i0.ɵɵtext(2);\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(3, \"td\");\n    i0.ɵɵtext(4);\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(5, \"td\");\n    i0.ɵɵtext(6);\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(7, \"td\");\n    i0.ɵɵtext(8);\n    i0.ɵɵelementEnd()();\n  }\n  if (rf & 2) {\n    const item_r7 = ctx.$implicit;\n    i0.ɵɵadvance(2);\n    i0.ɵɵtextInterpolate(item_r7.data);\n    i0.ɵɵadvance(2);\n    i0.ɵɵtextInterpolate(item_r7.piso);\n    i0.ɵɵadvance(2);\n    i0.ɵɵtextInterpolate(item_r7.hora);\n    i0.ɵɵadvance(2);\n    i0.ɵɵtextInterpolate(item_r7.vagas);\n  }\n}\nfunction RelatorioComponent_div_3_table_12_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"table\", 17)(1, \"thead\")(2, \"tr\")(3, \"th\");\n    i0.ɵɵtext(4, \"Data\");\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(5, \"th\");\n    i0.ɵɵtext(6, \"Piso\");\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(7, \"th\");\n    i0.ɵɵtext(8, \"Hora\");\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(9, \"th\");\n    i0.ɵɵtext(10, \"Vagas\");\n    i0.ɵɵelementEnd()()();\n    i0.ɵɵelementStart(11, \"tbody\");\n    i0.ɵɵtemplate(12, RelatorioComponent_div_3_table_12_tr_12_Template, 9, 4, \"tr\", 18);\n    i0.ɵɵelementEnd()();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵadvance(12);\n    i0.ɵɵproperty(\"ngForOf\", ctx_r1.relatorioFiltradoPorPiso);\n  }\n}\nfunction RelatorioComponent_div_3_table_13_tr_10_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"tr\")(1, \"td\");\n    i0.ɵɵtext(2);\n    i0.ɵɵpipe(3, \"date\");\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(4, \"td\");\n    i0.ɵɵtext(5);\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(6, \"td\");\n    i0.ɵɵtext(7);\n    i0.ɵɵelementEnd()();\n  }\n  if (rf & 2) {\n    const item_r8 = ctx.$implicit;\n    i0.ɵɵadvance(2);\n    i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(3, 3, item_r8.data, \"dd/MM/yyyy\"));\n    i0.ɵɵadvance(3);\n    i0.ɵɵtextInterpolate(item_r8.hora);\n    i0.ɵɵadvance(2);\n    i0.ɵɵtextInterpolate(item_r8.total);\n  }\n}\nfunction RelatorioComponent_div_3_table_13_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"table\", 17)(1, \"thead\")(2, \"tr\")(3, \"th\");\n    i0.ɵɵtext(4, \"Data\");\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(5, \"th\");\n    i0.ɵɵtext(6, \"Hora\");\n    i0.ɵɵelementEnd();\n    i0.ɵɵelementStart(7, \"th\");\n    i0.ɵɵtext(8, \"Total de Vagas\");\n    i0.ɵɵelementEnd()()();\n    i0.ɵɵelementStart(9, \"tbody\");\n    i0.ɵɵtemplate(10, RelatorioComponent_div_3_table_13_tr_10_Template, 8, 6, \"tr\", 18);\n    i0.ɵɵelementEnd()();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext(2);\n    i0.ɵɵadvance(10);\n    i0.ɵɵproperty(\"ngForOf\", ctx_r1.relatorioConsolidado);\n  }\n}\nfunction RelatorioComponent_div_3_Template(rf, ctx) {\n  if (rf & 1) {\n    const _r1 = i0.ɵɵgetCurrentView();\n    i0.ɵɵelementStart(0, \"div\", 3)(1, \"label\");\n    i0.ɵɵtext(2, \"Data Inicial: \");\n    i0.ɵɵelementStart(3, \"input\", 4);\n    i0.ɵɵtwoWayListener(\"ngModelChange\", function RelatorioComponent_div_3_Template_input_ngModelChange_3_listener($event) {\n      i0.ɵɵrestoreView(_r1);\n      const ctx_r1 = i0.ɵɵnextContext();\n      i0.ɵɵtwoWayBindingSet(ctx_r1.dataInicial, $event) || (ctx_r1.dataInicial = $event);\n      return i0.ɵɵresetView($event);\n    });\n    i0.ɵɵelementEnd()();\n    i0.ɵɵelementStart(4, \"label\");\n    i0.ɵɵtext(5, \"Tipo de Relat\\u00F3rio: \");\n    i0.ɵɵelementStart(6, \"select\", 5);\n    i0.ɵɵtwoWayListener(\"ngModelChange\", function RelatorioComponent_div_3_Template_select_ngModelChange_6_listener($event) {\n      i0.ɵɵrestoreView(_r1);\n      const ctx_r1 = i0.ɵɵnextContext();\n      i0.ɵɵtwoWayBindingSet(ctx_r1.tipoRelatorio, $event) || (ctx_r1.tipoRelatorio = $event);\n      return i0.ɵɵresetView($event);\n    });\n    i0.ɵɵtemplate(7, RelatorioComponent_div_3_option_7_Template, 2, 2, \"option\", 6);\n    i0.ɵɵelementEnd()();\n    i0.ɵɵelementStart(8, \"button\", 7);\n    i0.ɵɵlistener(\"click\", function RelatorioComponent_div_3_Template_button_click_8_listener() {\n      i0.ɵɵrestoreView(_r1);\n      const ctx_r1 = i0.ɵɵnextContext();\n      return i0.ɵɵresetView(ctx_r1.consultar());\n    });\n    i0.ɵɵtext(9, \" Consultar \");\n    i0.ɵɵelementEnd();\n    i0.ɵɵtemplate(10, RelatorioComponent_div_3_div_10_Template, 7, 2, \"div\", 8)(11, RelatorioComponent_div_3_div_11_Template, 5, 0, \"div\", 9)(12, RelatorioComponent_div_3_table_12_Template, 13, 1, \"table\", 10)(13, RelatorioComponent_div_3_table_13_Template, 11, 1, \"table\", 10);\n    i0.ɵɵelementEnd();\n  }\n  if (rf & 2) {\n    const ctx_r1 = i0.ɵɵnextContext();\n    i0.ɵɵadvance(3);\n    i0.ɵɵtwoWayProperty(\"ngModel\", ctx_r1.dataInicial);\n    i0.ɵɵadvance(3);\n    i0.ɵɵtwoWayProperty(\"ngModel\", ctx_r1.tipoRelatorio);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"ngForOf\", ctx_r1.relatoriosDisponiveis);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"disabled\", !ctx_r1.dataInicial || !ctx_r1.tipoRelatorio);\n    i0.ɵɵadvance(2);\n    i0.ɵɵproperty(\"ngIf\", ctx_r1.tipoRelatorio === \"por-piso\" && ctx_r1.todosOsPisos.length > 0);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"ngIf\", ctx_r1.relatorioFiltrado.length > 0 || ctx_r1.relatorioConsolidado.length > 0);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"ngIf\", ctx_r1.tipoRelatorio === \"por-piso\" && ctx_r1.relatorioFiltradoPorPiso.length > 0);\n    i0.ɵɵadvance();\n    i0.ɵɵproperty(\"ngIf\", ctx_r1.tipoRelatorio === \"consolidado\" && ctx_r1.relatorioConsolidado.length > 0);\n  }\n}\nfunction RelatorioComponent_div_4_Template(rf, ctx) {\n  if (rf & 1) {\n    i0.ɵɵelementStart(0, \"div\", 19);\n    i0.ɵɵtext(1, \" Voc\\u00EA n\\u00E3o tem permiss\\u00E3o para visualizar relat\\u00F3rios neste estacionamento. \");\n    i0.ɵɵelementEnd();\n  }\n}\nexport let RelatorioComponent = /*#__PURE__*/(() => {\n  class RelatorioComponent {\n    constructor(http, userService, clientService) {\n      this.http = http;\n      this.userService = userService;\n      this.clientService = clientService;\n      this.dataInicial = '';\n      this.tipoRelatorio = 'por-piso';\n      this.nomeClienteSelecionado = '';\n      this.relatorioFiltrado = [];\n      this.relatorioConsolidado = [];\n      this.relatoriosDisponiveis = [];\n      this.pisoFiltrado = '';\n      this.todosOsPisos = [];\n      this.customerId = 0;\n    }\n    ngOnInit() {\n      this.clientService.selectedClient$.subscribe(clientIdStr => {\n        this.customerId = Number(clientIdStr);\n        this.nomeClienteSelecionado = this.clientService.getSelectedClientName();\n        this.carregarRelatoriosPermitidos();\n      });\n    }\n    carregarRelatoriosPermitidos() {\n      const funcionalidades = this.userService.getUserFunctionalitiesByParking(this.customerId);\n      this.relatoriosDisponiveis = [];\n      if (funcionalidades.includes('REL.OCUPACAO_CONSOLIDADO')) {\n        this.relatoriosDisponiveis.push({\n          tipo: 'consolidado',\n          label: 'Ocupação Consolidada'\n        });\n      }\n      if (funcionalidades.includes('REL.OCUPACAO_POR_PISO')) {\n        this.relatoriosDisponiveis.push({\n          tipo: 'por-piso',\n          label: 'Ocupação por Piso'\n        });\n      }\n      this.tipoRelatorio = this.relatoriosDisponiveis[0]?.tipo || '';\n    }\n    consultar() {\n      const headers = {\n        device: 'manager'\n      };\n      if (!this.dataInicial) {\n        alert(\"Selecione a data inicial.\");\n        return;\n      }\n      this.nomeClienteSelecionado = document.querySelector('#clienteSelect option:checked')?.text || '';\n      const dataFormatada = this.formatarData(this.dataInicial);\n      if (this.tipoRelatorio === 'por-piso') {\n        const apiUrl = environment.apiUrlBackEndExternaApiDB;\n        const url = `${apiUrl}/v1/report-statistical/vw_report_ocupacao_por_piso/${this.customerId}/${dataFormatada}`;\n        this.http.get(url, {\n          headers\n        }).subscribe(res => {\n          const resultado = [];\n          if (Array.isArray(res?.relatorio)) {\n            res.relatorio.forEach(item => {\n              const data = item.data;\n              for (const [piso, horas] of Object.entries(item.pisos)) {\n                for (const [hora, valor] of Object.entries(horas)) {\n                  resultado.push({\n                    data,\n                    piso,\n                    hora,\n                    vagas: valor\n                  });\n                }\n              }\n            });\n          }\n          this.relatorioFiltrado = resultado.sort((a, b) => {\n            const dataA = a.data.localeCompare(b.data);\n            const pisoA = a.piso.localeCompare(b.piso);\n            const [horaA, minutoA] = a.hora.split(':').map(Number);\n            const [horaB, minutoB] = b.hora.split(':').map(Number);\n            const horaComp = horaA - horaB || minutoA - minutoB;\n            return dataA || pisoA || horaComp;\n          });\n          this.todosOsPisos = [...new Set(resultado.map(item => item.piso))].sort();\n          this.pisoFiltrado = '';\n        }, error => console.error('[Relatório por piso] Erro:', error));\n      } else if (this.tipoRelatorio === 'consolidado') {\n        const apiUrl = environment.apiUrlBackEndExternaApiDB;\n        const url = `${apiUrl}/v1/report-statistical/vw_report_ocupacao_consolidada/${this.customerId}/${dataFormatada}`;\n        this.http.get(url, {\n          headers\n        }).subscribe(res => {\n          const resultado = [];\n          if (Array.isArray(res?.relatorio)) {\n            res.relatorio.forEach(item => {\n              const data = item.data;\n              for (const piso of Object.values(item.pisos)) {\n                for (const [hora, valor] of Object.entries(piso)) {\n                  resultado.push({\n                    data,\n                    hora,\n                    total: valor\n                  });\n                }\n              }\n            });\n          }\n          this.relatorioConsolidado = resultado.sort((a, b) => {\n            const dataA = a.data.localeCompare(b.data);\n            const [horaA, minutoA] = a.hora.split(':').map(Number);\n            const [horaB, minutoB] = b.hora.split(':').map(Number);\n            return dataA || horaA - horaB || minutoA - minutoB;\n          });\n        }, error => console.error('[Relatório consolidado] Erro:', error));\n      }\n    }\n    get relatorioFiltradoPorPiso() {\n      if (!this.pisoFiltrado) return this.relatorioFiltrado;\n      return this.relatorioFiltrado.filter(item => item.piso === this.pisoFiltrado);\n    }\n    formatarData(iso) {\n      const [ano, mes, dia] = iso.split('-');\n      return `${dia}-${mes}-${ano}`;\n    }\n    exportarExcel() {\n      const data = this.tipoRelatorio === 'por-piso' ? this.relatorioFiltrado : this.relatorioConsolidado;\n      if (!data.length) return;\n      const worksheet = XLSX.utils.json_to_sheet(data);\n      const workbook = {\n        Sheets: {\n          'Relatório': worksheet\n        },\n        SheetNames: ['Relatório']\n      };\n      const nomeCliente = this.nomeClienteSelecionado || 'Cliente';\n      const nomeRelatorio = this.tipoRelatorio === 'por-piso' ? 'Relatório Por Piso' : 'Relatório Consolidado';\n      const dataStr = this.dataInicial || new Date().toISOString().split('T')[0];\n      const nomeArquivo = `${nomeCliente} - ${nomeRelatorio} - ${dataStr}`.replace(/\\s+/g, '_');\n      const excelBuffer = XLSX.write(workbook, {\n        bookType: 'xlsx',\n        type: 'array'\n      });\n      const blob = new Blob([excelBuffer], {\n        type: 'application/octet-stream'\n      });\n      saveAs(blob, `${nomeArquivo}.xlsx`);\n    }\n    exportarPDF() {\n      var _this = this;\n      return _asyncToGenerator(function* () {\n        const data = _this.tipoRelatorio === 'por-piso' ? _this.relatorioFiltrado : _this.relatorioConsolidado;\n        if (!data.length) return;\n        const doc = new jsPDF();\n        const nomeCliente = _this.nomeClienteSelecionado || 'Cliente';\n        const nomeRelatorio = _this.tipoRelatorio === 'por-piso' ? 'Ocupação por Piso' : 'Ocupação Consolidada';\n        const dataStr = _this.dataInicial || new Date().toISOString().split('T')[0];\n        const dateObj = new Date(dataStr);\n        const dataFormatada = dateObj.toLocaleDateString('pt-BR', {\n          weekday: 'long',\n          year: 'numeric',\n          month: 'long',\n          day: 'numeric'\n        });\n        const nomeArquivo = `${nomeCliente} - ${nomeRelatorio} - ${dataStr}`.replace(/\\s+/g, '_');\n        // Carregar logotipo\n        try {\n          const base64Logo = yield _this.convertToBase64('assets/logo.png');\n          doc.addImage(base64Logo, 'PNG', 14, 10, 40, 50); // largura 40, altura 50\n        } catch (err) {\n          console.warn('Erro ao carregar o logotipo:', err);\n        }\n        doc.setFont('helvetica', 'bold');\n        doc.setFontSize(16);\n        doc.text(nomeRelatorio, 105, 25, {\n          align: 'center'\n        }); // sobe um pouco\n        doc.setFontSize(12);\n        doc.setFont('helvetica', 'normal');\n        doc.text(`Cliente: ${nomeCliente}`, 14, 65);\n        doc.text(`Data: ${dataFormatada}`, 14, 72);\n        doc.text(`Gerado em: ${new Date().toLocaleString('pt-BR')}`, 14, 79);\n        const colunas = Object.keys(data?.[0] || {});\n        const linhas = data.map(obj => colunas.map(c => obj[c]));\n        // Tabela + Rodapé em todas as páginas\n        autoTable(doc, {\n          startY: 85,\n          head: [colunas],\n          body: linhas,\n          theme: 'grid',\n          styles: {\n            fontSize: 10,\n            cellPadding: 3,\n            valign: 'middle'\n          },\n          headStyles: {\n            fillColor: [41, 128, 185],\n            textColor: [255, 255, 255],\n            fontStyle: 'bold'\n          },\n          alternateRowStyles: {\n            fillColor: [240, 240, 240]\n          },\n          margin: {\n            top: 10,\n            bottom: 30\n          },\n          didDrawPage: dataArg => {\n            const pageNumber = doc.getNumberOfPages();\n            const pageSize = doc.internal.pageSize;\n            const pageHeight = pageSize.height ? pageSize.height : pageSize.getHeight();\n            doc.setFontSize(10);\n            doc.setTextColor(150);\n            doc.text(`Cliente: ${nomeCliente} · Página ${pageNumber}`, dataArg.settings.margin.left, pageHeight - 10);\n          }\n        });\n        doc.save(`${nomeArquivo}.pdf`);\n      })();\n    }\n    convertToBase64(url) {\n      return new Promise((resolve, reject) => {\n        const img = new Image();\n        img.crossOrigin = 'Anonymous';\n        img.onload = () => {\n          const canvas = document.createElement('canvas');\n          canvas.width = img.width;\n          canvas.height = img.height;\n          const ctx = canvas.getContext('2d');\n          ctx?.drawImage(img, 0, 0);\n          const dataURL = canvas.toDataURL('image/png');\n          resolve(dataURL);\n        };\n        img.onerror = error => reject(error);\n        img.src = url;\n      });\n    }\n    static #_ = this.ɵfac = function RelatorioComponent_Factory(t) {\n      return new (t || RelatorioComponent)(i0.ɵɵdirectiveInject(i1.HttpClient), i0.ɵɵdirectiveInject(i2.UserService), i0.ɵɵdirectiveInject(i3.ClientService));\n    };\n    static #_2 = this.ɵcmp = /*@__PURE__*/i0.ɵɵdefineComponent({\n      type: RelatorioComponent,\n      selectors: [[\"app-relatorio\"]],\n      decls: 5,\n      vars: 2,\n      consts: [[1, \"container\"], [\"class\", \"filtros\", 4, \"ngIf\"], [\"class\", \"alert alert-warning mt-4\", 4, \"ngIf\"], [1, \"filtros\"], [\"type\", \"date\", 1, \"form-control\", 3, \"ngModelChange\", \"ngModel\"], [1, \"form-control\", 3, \"ngModelChange\", \"ngModel\"], [3, \"value\", 4, \"ngFor\", \"ngForOf\"], [1, \"btn\", \"btn-primary\", 3, \"click\", \"disabled\"], [\"style\", \"margin-top: 10px;\", 4, \"ngIf\"], [\"class\", \"export-buttons\", 4, \"ngIf\"], [\"class\", \"table table-striped mt-3\", 4, \"ngIf\"], [3, \"value\"], [2, \"margin-top\", \"10px\"], [\"value\", \"\"], [1, \"export-buttons\"], [1, \"btn\", \"btn-success\", 3, \"click\"], [1, \"btn\", \"btn-danger\", 3, \"click\"], [1, \"table\", \"table-striped\", \"mt-3\"], [4, \"ngFor\", \"ngForOf\"], [1, \"alert\", \"alert-warning\", \"mt-4\"]],\n      template: function RelatorioComponent_Template(rf, ctx) {\n        if (rf & 1) {\n          i0.ɵɵelementStart(0, \"div\", 0)(1, \"h2\");\n          i0.ɵɵtext(2, \"Relat\\u00F3rio de Ocupa\\u00E7\\u00E3o\");\n          i0.ɵɵelementEnd();\n          i0.ɵɵtemplate(3, RelatorioComponent_div_3_Template, 14, 8, \"div\", 1)(4, RelatorioComponent_div_4_Template, 2, 0, \"div\", 2);\n          i0.ɵɵelementEnd();\n        }\n        if (rf & 2) {\n          i0.ɵɵadvance(3);\n          i0.ɵɵproperty(\"ngIf\", ctx.relatoriosDisponiveis.length > 0);\n          i0.ɵɵadvance();\n          i0.ɵɵproperty(\"ngIf\", ctx.relatoriosDisponiveis.length === 0);\n        }\n      },\n      dependencies: [i4.NgForOf, i4.NgIf, i5.NgSelectOption, i5.ɵNgSelectMultipleOption, i5.DefaultValueAccessor, i5.SelectControlValueAccessor, i5.NgControlStatus, i5.NgModel, i4.DatePipe],\n      styles: [\".container[_ngcontent-%COMP%]{max-width:1000px;margin:40px auto;padding:20px;font-family:Arial,sans-serif;background-color:#f9f9f9;border-radius:12px;box-shadow:0 0 12px #00000014}h2[_ngcontent-%COMP%]{text-align:center;margin-bottom:30px;color:#333}.filtros[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:15px;align-items:center;justify-content:space-between;margin-bottom:20px}.filtros[_ngcontent-%COMP%]   label[_ngcontent-%COMP%]{display:flex;flex-direction:column;font-weight:700;color:#444}.filtros[_ngcontent-%COMP%]   input[_ngcontent-%COMP%], .filtros[_ngcontent-%COMP%]   select[_ngcontent-%COMP%]{padding:6px 10px;border:1px solid #ccc;border-radius:6px;font-size:14px}.filtros[_ngcontent-%COMP%]   button[_ngcontent-%COMP%]{padding:8px 16px;font-size:14px;border:none;border-radius:6px;cursor:pointer;transition:.2s ease-in-out}.filtros[_ngcontent-%COMP%]   button[_ngcontent-%COMP%]:first-of-type{background-color:#007bff;color:#fff}.filtros[_ngcontent-%COMP%]   button[_ngcontent-%COMP%]:last-of-type{background-color:#28a745;color:#fff}.filtros[_ngcontent-%COMP%]   button[_ngcontent-%COMP%]:hover{opacity:.9}table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;margin-top:20px;background-color:#fff;border-radius:8px;overflow:hidden;box-shadow:0 0 6px #0000000d}thead[_ngcontent-%COMP%]   th[_ngcontent-%COMP%]{background-color:#007bff;color:#fff;padding:12px;text-align:left;font-weight:700}tbody[_ngcontent-%COMP%]   td[_ngcontent-%COMP%]{padding:10px 12px;border-bottom:1px solid #eaeaea}tbody[_ngcontent-%COMP%]   tr[_ngcontent-%COMP%]:hover{background-color:#f1f1f1}button.btn-success[_ngcontent-%COMP%]{background-color:#28a745;color:#fff;border:none;margin-right:10px;padding:10px;border-radius:6px;cursor:pointer}button.btn-danger[_ngcontent-%COMP%]{background-color:#dc3545;color:#fff;border:none;padding:10px;border-radius:6px;cursor:pointer}.export-buttons[_ngcontent-%COMP%]{margin-top:20px;display:flex;gap:15px;justify-content:flex-end}button.btn-success[_ngcontent-%COMP%], button.btn-danger[_ngcontent-%COMP%]{padding:10px 18px;font-size:14px;border-radius:6px;font-weight:700;border:none;cursor:pointer;box-shadow:0 3px 6px #0000001a}.alert[_ngcontent-%COMP%]{background-color:#fff3cd;border:1px solid #ffeeba;color:#856404;padding:12px 16px;border-radius:6px;font-size:14px;margin-top:16px}button.btn-success[_ngcontent-%COMP%]{background-color:#28a745;color:#fff}button.btn-success[_ngcontent-%COMP%]:hover{background-color:#218838}button.btn-danger[_ngcontent-%COMP%]{background-color:#dc3545;color:#fff}button.btn-danger[_ngcontent-%COMP%]:hover{background-color:#c82333}.filtros[_ngcontent-%COMP%]{display:flex;gap:20px;align-items:center;flex-wrap:wrap;margin-bottom:20px}.alert[_ngcontent-%COMP%]{background-color:#fff3cd;border:1px solid #ffeeba;color:#856404;padding:12px 16px;border-radius:6px;font-size:14px}.export-buttons[_ngcontent-%COMP%]{margin-top:15px;display:flex;gap:10px}\\n\\n/*# sourceMappingURL=relatorio.component.css.map*/\"]\n    });\n  }\n  return RelatorioComponent;\n})();","map":{"version":3,"names":["XLSX","saveAs","jsPDF","autoTable","environment","i0","ɵɵelementStart","ɵɵtext","ɵɵelementEnd","ɵɵproperty","relatorio_r3","tipo","ɵɵadvance","ɵɵtextInterpolate1","label","piso_r5","ɵɵtextInterpolate","ɵɵtwoWayListener","RelatorioComponent_div_3_div_10_Template_select_ngModelChange_3_listener","$event","ɵɵrestoreView","_r4","ctx_r1","ɵɵnextContext","ɵɵtwoWayBindingSet","pisoFiltrado","ɵɵresetView","ɵɵtemplate","RelatorioComponent_div_3_div_10_option_6_Template","ɵɵtwoWayProperty","todosOsPisos","ɵɵlistener","RelatorioComponent_div_3_div_11_Template_button_click_1_listener","_r6","exportarExcel","RelatorioComponent_div_3_div_11_Template_button_click_3_listener","exportarPDF","item_r7","data","piso","hora","vagas","RelatorioComponent_div_3_table_12_tr_12_Template","relatorioFiltradoPorPiso","ɵɵpipeBind2","item_r8","total","RelatorioComponent_div_3_table_13_tr_10_Template","relatorioConsolidado","RelatorioComponent_div_3_Template_input_ngModelChange_3_listener","_r1","dataInicial","RelatorioComponent_div_3_Template_select_ngModelChange_6_listener","tipoRelatorio","RelatorioComponent_div_3_option_7_Template","RelatorioComponent_div_3_Template_button_click_8_listener","consultar","RelatorioComponent_div_3_div_10_Template","RelatorioComponent_div_3_div_11_Template","RelatorioComponent_div_3_table_12_Template","RelatorioComponent_div_3_table_13_Template","relatoriosDisponiveis","length","relatorioFiltrado","RelatorioComponent","constructor","http","userService","clientService","nomeClienteSelecionado","customerId","ngOnInit","selectedClient$","subscribe","clientIdStr","Number","getSelectedClientName","carregarRelatoriosPermitidos","funcionalidades","getUserFunctionalitiesByParking","includes","push","headers","device","alert","document","querySelector","text","dataFormatada","formatarData","apiUrl","apiUrlBackEndExternaApiDB","url","get","res","resultado","Array","isArray","relatorio","forEach","item","horas","Object","entries","pisos","valor","sort","a","b","dataA","localeCompare","pisoA","horaA","minutoA","split","map","horaB","minutoB","horaComp","Set","error","console","values","filter","iso","ano","mes","dia","worksheet","utils","json_to_sheet","workbook","Sheets","SheetNames","nomeCliente","nomeRelatorio","dataStr","Date","toISOString","nomeArquivo","replace","excelBuffer","write","bookType","type","blob","Blob","_this","_asyncToGenerator","doc","dateObj","toLocaleDateString","weekday","year","month","day","base64Logo","convertToBase64","addImage","err","warn","setFont","setFontSize","align","toLocaleString","colunas","keys","linhas","obj","c","startY","head","body","theme","styles","fontSize","cellPadding","valign","headStyles","fillColor","textColor","fontStyle","alternateRowStyles","margin","top","bottom","didDrawPage","dataArg","pageNumber","getNumberOfPages","pageSize","internal","pageHeight","height","getHeight","setTextColor","settings","left","save","Promise","resolve","reject","img","Image","crossOrigin","onload","canvas","createElement","width","ctx","getContext","drawImage","dataURL","toDataURL","onerror","src","_","ɵɵdirectiveInject","i1","HttpClient","i2","UserService","i3","ClientService","_2","selectors","decls","vars","consts","template","RelatorioComponent_Template","rf","RelatorioComponent_div_3_Template","RelatorioComponent_div_4_Template"],"sources":["/root/rfcontavagas_hom/12.-Servidor-local-Docker/Front-Parking-Angular/src/app/relatorio/relatorio.component.ts","/root/rfcontavagas_hom/12.-Servidor-local-Docker/Front-Parking-Angular/src/app/relatorio/relatorio.component.html"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\r\nimport { Component, OnInit } from '@angular/core';\r\nimport * as XLSX from 'xlsx';\r\nimport { saveAs } from 'file-saver';\r\nimport jsPDF from 'jspdf';\r\nimport autoTable from 'jspdf-autotable';\r\nimport { UserService } from '../services/user.service';\r\nimport { ClientService } from '../services/client.service';\r\nimport { environment } from '../environments/environment';\r\n\r\n@Component({\r\n  selector: 'app-relatorio',\r\n  templateUrl: './relatorio.component.html',\r\n  styleUrls: ['./relatorio.component.css']\r\n})\r\nexport class RelatorioComponent implements OnInit {\r\n  dataInicial: string = '';\r\n  tipoRelatorio: string = 'por-piso';\r\n  nomeClienteSelecionado: string = '';\r\n\r\n  relatorioFiltrado: any[] = [];\r\n  relatorioConsolidado: any[] = [];\r\n  relatoriosDisponiveis: { tipo: string, label: string }[] = [];\r\n\r\n  pisoFiltrado: string = '';\r\n  todosOsPisos: string[] = [];\r\n  customerId: number = 0;\r\n\r\n  constructor(\r\n    private http: HttpClient,\r\n    private userService: UserService,\r\n    private clientService: ClientService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.clientService.selectedClient$.subscribe(clientIdStr => {\r\n      this.customerId = Number(clientIdStr);\r\n      this.nomeClienteSelecionado = this.clientService.getSelectedClientName();\r\n      this.carregarRelatoriosPermitidos();\r\n    });\r\n  }\r\n\r\n  carregarRelatoriosPermitidos(): void {\r\n    const funcionalidades = this.userService.getUserFunctionalitiesByParking(this.customerId);\r\n    this.relatoriosDisponiveis = [];\r\n\r\n    if (funcionalidades.includes('REL.OCUPACAO_CONSOLIDADO')) {\r\n      this.relatoriosDisponiveis.push({ tipo: 'consolidado', label: 'Ocupação Consolidada' });\r\n    }\r\n\r\n    if (funcionalidades.includes('REL.OCUPACAO_POR_PISO')) {\r\n      this.relatoriosDisponiveis.push({ tipo: 'por-piso', label: 'Ocupação por Piso' });\r\n    }\r\n\r\n    this.tipoRelatorio = this.relatoriosDisponiveis[0]?.tipo || '';\r\n  }\r\n\r\n\r\n\r\n  consultar(): void {\r\n    const headers = { device: 'manager' };\r\n\r\n    if (!this.dataInicial) {\r\n      alert(\"Selecione a data inicial.\");\r\n      return;\r\n    }\r\n\r\n    this.nomeClienteSelecionado = (document.querySelector('#clienteSelect option:checked') as HTMLOptionElement)?.text || '';\r\n\r\n    const dataFormatada = this.formatarData(this.dataInicial);\r\n\r\n    if (this.tipoRelatorio === 'por-piso') {\r\n      const apiUrl = environment.apiUrlBackEndExternaApiDB;\r\n      const url = `${apiUrl}/v1/report-statistical/vw_report_ocupacao_por_piso/${this.customerId}/${dataFormatada}`;\r\n      this.http.get<any>(url, { headers }).subscribe(\r\n        (res) => {\r\n          const resultado: any[] = [];\r\n\r\n          if (Array.isArray(res?.relatorio)) {\r\n            res.relatorio.forEach((item: any) => {\r\n              const data = item.data;\r\n\r\n              for (const [piso, horas] of Object.entries(item.pisos as Record<string, Record<string, number>>)) {\r\n                for (const [hora, valor] of Object.entries(horas)) {\r\n                  resultado.push({\r\n                    data,\r\n                    piso,\r\n                    hora,\r\n                    vagas: valor\r\n                  });\r\n                }\r\n              }\r\n            });\r\n          }\r\n\r\n          this.relatorioFiltrado = resultado.sort((a, b) => {\r\n            const dataA = a.data.localeCompare(b.data);\r\n            const pisoA = a.piso.localeCompare(b.piso);\r\n            const [horaA, minutoA] = a.hora.split(':').map(Number);\r\n            const [horaB, minutoB] = b.hora.split(':').map(Number);\r\n            const horaComp = horaA - horaB || minutoA - minutoB;\r\n            return dataA || pisoA || horaComp;\r\n          });\r\n\r\n          this.todosOsPisos = [...new Set(resultado.map(item => item.piso))].sort();\r\n          this.pisoFiltrado = '';\r\n        },\r\n        (error) => console.error('[Relatório por piso] Erro:', error)\r\n      );\r\n    } else if (this.tipoRelatorio === 'consolidado') {\r\n      const apiUrl = environment.apiUrlBackEndExternaApiDB;\r\n      const url = `${apiUrl}/v1/report-statistical/vw_report_ocupacao_consolidada/${this.customerId}/${dataFormatada}`;\r\n      this.http.get<any>(url, { headers }).subscribe(\r\n        (res) => {\r\n          const resultado: any[] = [];\r\n\r\n          if (Array.isArray(res?.relatorio)) {\r\n            res.relatorio.forEach((item: any) => {\r\n              const data = item.data;\r\n\r\n              for (const piso of Object.values(item.pisos) as Record<string, number>[]) {\r\n                for (const [hora, valor] of Object.entries(piso)) {\r\n                  resultado.push({\r\n                    data,\r\n                    hora,\r\n                    total: valor\r\n                  });\r\n                }\r\n              }\r\n            });\r\n          }\r\n\r\n          this.relatorioConsolidado = resultado.sort((a, b) => {\r\n            const dataA = a.data.localeCompare(b.data);\r\n            const [horaA, minutoA] = a.hora.split(':').map(Number);\r\n            const [horaB, minutoB] = b.hora.split(':').map(Number);\r\n            return dataA || horaA - horaB || minutoA - minutoB;\r\n          });\r\n        },\r\n        (error) => console.error('[Relatório consolidado] Erro:', error)\r\n      );\r\n    }\r\n  }\r\n\r\n  get relatorioFiltradoPorPiso(): any[] {\r\n    if (!this.pisoFiltrado) return this.relatorioFiltrado;\r\n    return this.relatorioFiltrado.filter(item => item.piso === this.pisoFiltrado);\r\n  }\r\n\r\n  formatarData(iso: string): string {\r\n    const [ano, mes, dia] = iso.split('-');\r\n    return `${dia}-${mes}-${ano}`;\r\n  }\r\n\r\n  exportarExcel(): void {\r\n    const data = this.tipoRelatorio === 'por-piso' ? this.relatorioFiltrado : this.relatorioConsolidado;\r\n    if (!data.length) return;\r\n  \r\n    const worksheet: XLSX.WorkSheet = XLSX.utils.json_to_sheet(data);\r\n    const workbook: XLSX.WorkBook = {\r\n      Sheets: { 'Relatório': worksheet },\r\n      SheetNames: ['Relatório']\r\n    };\r\n  \r\n    const nomeCliente = this.nomeClienteSelecionado || 'Cliente';\r\n    const nomeRelatorio = this.tipoRelatorio === 'por-piso' ? 'Relatório Por Piso' : 'Relatório Consolidado';\r\n    const dataStr = this.dataInicial || new Date().toISOString().split('T')[0];\r\n    const nomeArquivo = `${nomeCliente} - ${nomeRelatorio} - ${dataStr}`.replace(/\\s+/g, '_');\r\n  \r\n    const excelBuffer: any = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });\r\n    const blob: Blob = new Blob([excelBuffer], { type: 'application/octet-stream' });\r\n    saveAs(blob, `${nomeArquivo}.xlsx`);\r\n  }\r\n  async exportarPDF(): Promise<void> {\r\n    const data = this.tipoRelatorio === 'por-piso' ? this.relatorioFiltrado : this.relatorioConsolidado;\r\n    if (!data.length) return;\r\n  \r\n    const doc = new jsPDF();\r\n    const nomeCliente = this.nomeClienteSelecionado || 'Cliente';\r\n    const nomeRelatorio = this.tipoRelatorio === 'por-piso' ? 'Ocupação por Piso' : 'Ocupação Consolidada';\r\n    const dataStr = this.dataInicial || new Date().toISOString().split('T')[0];\r\n  \r\n    const dateObj = new Date(dataStr);\r\n    const dataFormatada = dateObj.toLocaleDateString('pt-BR', {\r\n      weekday: 'long',\r\n      year: 'numeric',\r\n      month: 'long',\r\n      day: 'numeric'\r\n    });\r\n  \r\n    const nomeArquivo = `${nomeCliente} - ${nomeRelatorio} - ${dataStr}`.replace(/\\s+/g, '_');\r\n  \r\n    // Carregar logotipo\r\n    try {\r\n      const base64Logo = await this.convertToBase64('assets/logo.png');\r\n      doc.addImage(base64Logo, 'PNG', 14, 10, 40, 50); // largura 40, altura 50\r\n    } catch (err) {\r\n      console.warn('Erro ao carregar o logotipo:', err);\r\n    }\r\n  \r\n\r\ndoc.setFont('helvetica', 'bold');\r\ndoc.setFontSize(16);\r\ndoc.text(nomeRelatorio, 105, 25, { align: 'center' }); // sobe um pouco\r\n\r\ndoc.setFontSize(12);\r\ndoc.setFont('helvetica', 'normal');\r\ndoc.text(`Cliente: ${nomeCliente}`, 14, 65);\r\ndoc.text(`Data: ${dataFormatada}`, 14, 72);\r\ndoc.text(`Gerado em: ${new Date().toLocaleString('pt-BR')}`, 14, 79);\r\n\r\n  \r\n    const colunas = Object.keys(data?.[0] || {});\r\n    const linhas = data.map(obj => colunas.map(c => obj[c]));\r\n  \r\n    // Tabela + Rodapé em todas as páginas\r\n    autoTable(doc, {\r\n      startY: 85,\r\n      head: [colunas],\r\n      body: linhas,\r\n      theme: 'grid',\r\n      styles: {\r\n        fontSize: 10,\r\n        cellPadding: 3,\r\n        valign: 'middle',\r\n      },\r\n      headStyles: {\r\n        fillColor: [41, 128, 185],\r\n        textColor: [255, 255, 255],\r\n        fontStyle: 'bold'\r\n      },\r\n      alternateRowStyles: { fillColor: [240, 240, 240] },\r\n      margin: { top: 10, bottom: 30 },\r\n      didDrawPage: (dataArg) => {\r\n        const pageNumber = doc.getNumberOfPages();\r\n        const pageSize = doc.internal.pageSize;\r\n        const pageHeight = pageSize.height ? pageSize.height : pageSize.getHeight();\r\n  \r\n        doc.setFontSize(10);\r\n        doc.setTextColor(150);\r\n        doc.text(\r\n          `Cliente: ${nomeCliente} · Página ${pageNumber}`,\r\n          dataArg.settings.margin.left,\r\n          pageHeight - 10\r\n        );\r\n      }\r\n    });\r\n  \r\n    doc.save(`${nomeArquivo}.pdf`);\r\n  }\r\n  \r\n  convertToBase64(url: string): Promise<string> {\r\n    return new Promise((resolve, reject) => {\r\n      const img = new Image();\r\n      img.crossOrigin = 'Anonymous';\r\n      img.onload = () => {\r\n        const canvas = document.createElement('canvas');\r\n        canvas.width = img.width;\r\n        canvas.height = img.height;\r\n        const ctx = canvas.getContext('2d');\r\n        ctx?.drawImage(img, 0, 0);\r\n        const dataURL = canvas.toDataURL('image/png');\r\n        resolve(dataURL);\r\n      };\r\n      img.onerror = error => reject(error);\r\n      img.src = url;\r\n    });\r\n  }\r\n  \r\n  \r\n  \r\n}\r\n","<div class=\"container\">\r\n  <h2>Relatório de Ocupação</h2>\r\n\r\n  <!-- ✅ Se houver relatórios disponíveis -->\r\n  <div *ngIf=\"relatoriosDisponiveis.length > 0\" class=\"filtros\">\r\n    \r\n    <label>Data Inicial:\r\n      <input type=\"date\" [(ngModel)]=\"dataInicial\" class=\"form-control\">\r\n    </label>\r\n\r\n    <label>Tipo de Relatório:\r\n      <select [(ngModel)]=\"tipoRelatorio\" class=\"form-control\">\r\n        <option *ngFor=\"let relatorio of relatoriosDisponiveis\" [value]=\"relatorio.tipo\">\r\n          {{ relatorio.label }}\r\n        </option>\r\n      </select>\r\n    </label>\r\n\r\n    <button class=\"btn btn-primary\" (click)=\"consultar()\" [disabled]=\"!dataInicial || !tipoRelatorio\">\r\n      Consultar\r\n    </button>\r\n\r\n    <!-- Filtro de piso -->\r\n    <div *ngIf=\"tipoRelatorio === 'por-piso' && todosOsPisos.length > 0\" style=\"margin-top: 10px;\">\r\n      <label>Filtrar Piso:\r\n        <select [(ngModel)]=\"pisoFiltrado\" class=\"form-control\">\r\n          <option value=\"\">Todos</option>\r\n          <option *ngFor=\"let piso of todosOsPisos\" [value]=\"piso\">{{ piso }}</option>\r\n        </select>\r\n      </label>\r\n    </div>\r\n\r\n    <!-- Botões de exportação -->\r\n    <div class=\"export-buttons\" *ngIf=\"relatorioFiltrado.length > 0 || relatorioConsolidado.length > 0\">\r\n      <button class=\"btn btn-success\" (click)=\"exportarExcel()\">📥 Exportar Excel</button>\r\n      <button class=\"btn btn-danger\" (click)=\"exportarPDF()\">🧾 Exportar PDF</button>\r\n    </div>\r\n\r\n    <!-- Tabela Ocupação por Piso -->\r\n    <table *ngIf=\"tipoRelatorio === 'por-piso' && relatorioFiltradoPorPiso.length > 0\" class=\"table table-striped mt-3\">\r\n      <thead>\r\n        <tr>\r\n          <th>Data</th>\r\n          <th>Piso</th>\r\n          <th>Hora</th>\r\n          <th>Vagas</th>\r\n        </tr>\r\n      </thead>\r\n      <tbody>\r\n        <tr *ngFor=\"let item of relatorioFiltradoPorPiso\">\r\n          <td>{{ item.data }}</td>\r\n          <td>{{ item.piso }}</td>\r\n          <td>{{ item.hora }}</td>\r\n          <td>{{ item.vagas }}</td>\r\n        </tr>\r\n      </tbody>\r\n    </table>\r\n\r\n    <!-- Tabela Ocupação Consolidada -->\r\n    <table *ngIf=\"tipoRelatorio === 'consolidado' && relatorioConsolidado.length > 0\" class=\"table table-striped mt-3\">\r\n      <thead>\r\n        <tr>\r\n          <th>Data</th>\r\n          <th>Hora</th>\r\n          <th>Total de Vagas</th>\r\n        </tr>\r\n      </thead>\r\n      <tbody>\r\n        <tr *ngFor=\"let item of relatorioConsolidado\">\r\n          <td>{{ item.data | date:'dd/MM/yyyy' }}</td>\r\n          <td>{{ item.hora }}</td>\r\n          <td>{{ item.total }}</td>\r\n        </tr>\r\n      </tbody>\r\n    </table>\r\n  </div>\r\n\r\n  <!-- ❌ Se não houver relatórios disponíveis -->\r\n  <div *ngIf=\"relatoriosDisponiveis.length === 0\" class=\"alert alert-warning mt-4\">\r\n    Você não tem permissão para visualizar relatórios neste estacionamento.\r\n  </div>\r\n</div>\r\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}