{"version":3,"file":"documents-1QvkVR5P.js","sources":["../../../app/frontend/entrypoints/controllers/ticket/overview/show/documents.ts"],"sourcesContent":["import jQuery from 'jquery/dist/jquery';\nimport * as pdfjsLib from \"pdfjs-dist\"\nimport SignaturePad from \"signature_pad\";\nimport Swal from 'sweetalert2';\nimport * as bootstrap from 'bootstrap'\nimport Utils from '../../../../utils'\nimport TicketServiceMapEntity from \"../../../ticket_service_map/entity\";\n\nexport default class TicketShowDocuments {\n private parent: any;\n private tableElem: any;\n private datatable: any;\n private entity = \"services\";\n private toastr: any;\n private datatableElem: any;\n\n private pdfDocumentId = \"\";\n private pdfDownloadUrl = \"\";\n private pdfSignModal: bootstrap.Modal;\n private pdfModal: bootstrap.Modal;\n private signaturePad: SignaturePad | undefined;\n\n\n constructor(parent: any) {\n this.parent = parent\n this.toastr = parent.toastr\n this.datatableElem = jQuery(\".datatables-ticket-order-document\")\n this.pdfModal = new bootstrap.Modal((document.querySelector(\"#erpOrderDocumentPdfModal\") as HTMLElement));\n this.pdfSignModal = new bootstrap.Modal((document.querySelector(\"#erpOrderDocumentPdfSignModal\") as HTMLElement));\n this.setupPdfReader()\n this.bindListeners();\n }\n\n\n async setupPdfReader() {\n pdfjsLib.GlobalWorkerOptions.workerSrc = '/pdf.worker.min.js';\n }\n\n async setupSigning() {\n const canvas = document.querySelector('#erpOrderDocumentPdfSignCanvas') as HTMLCanvasElement | null;\n if (canvas) {\n if (!this.signaturePad) {\n this.signaturePad = new SignaturePad(canvas);\n } else {\n this.signaturePad.clear();\n }\n }\n }\n\n async saveSignature() {\n if (this.signaturePad) {\n const image = this.signaturePad.toDataURL();\n await Utils.erp.saveSignature(this.pdfDocumentId, this.pdfDownloadUrl, image)\n }\n }\n\n async renderPdfPage(page) {\n console.log(\"Render\", page)\n const canvas = document.createElement(\"canvas\")\n const scale = 1.5;\n const viewport = page.getViewport({scale: scale});\n const context = canvas.getContext('2d');\n if (context) {\n canvas.height = viewport.height;\n canvas.width = viewport.width;\n const renderContext = {\n canvasContext: context,\n viewport: viewport\n };\n const renderTask = page.render(renderContext);\n await renderTask.promise\n }\n canvas.style.maxWidth = \"100%\"\n return canvas\n }\n\n async loadPdf(downloadUrl: string) {\n pdfjsLib.getDocument(`${document.location.origin}/${downloadUrl}`).promise.then(async (pdf) => {\n const canvasHolder = document.querySelector('#erpOrderDocumentPdfCanvases') as HTMLCanvasElement | null;\n if (canvasHolder) {\n for (let i = 1; i <= pdf.numPages; i++) {\n const c = await this.renderPdfPage((await pdf.getPage(i)))\n canvasHolder.appendChild(c)\n }\n }\n this.pdfModal.show();\n const button = document.querySelector('#erpOrderDocumentPdfModalSignButton') as HTMLButtonElement;\n\n button.style.bottom = `${window.siteConfig.document.y}px`\n button.style.right = `${window.siteConfig.document.x / 10}px`;\n button.style.width =`${window.siteConfig.document.width/ 3}px`;\n button.style.height = `${window.siteConfig.document.height / 3}px`;\n })\n }\n\n getEntityData(elem: any) {\n return {...TicketServiceMapEntity.getEntityData(elem), ticket_id: this.parent.id}\n }\n\n bindListeners() {\n\n jQuery(\".datatables-ticket-order-document tbody\").delegate(\".sign-record\", \"click\", async (e: JQuery.TriggeredEvent) => {\n this.pdfDownloadUrl = e.currentTarget.getAttribute(\"data-url\");\n this.pdfDocumentId = e.currentTarget.getAttribute(\"data-document-id\");\n\n /*await this.setupSigning();\n this.pdfSignModal.show();*/\n await this.loadPdf(this.pdfDownloadUrl);\n\n });\n (document.querySelector('#erpOrderDocumentPdfModalSignButton') as HTMLButtonElement).addEventListener(\"click\", async (e) => {\n e.preventDefault();\n await this.setupSigning();\n this.pdfSignModal.show();\n });\n (document.querySelector('#erpOrderDocumentPdfSignSave') as HTMLButtonElement).addEventListener(\"click\", async (e) => {\n e.preventDefault();\n await this.saveSignature();\n this.pdfSignModal.hide();\n this.pdfModal.hide();\n await this.parent.getEntity();\n });\n }\n\n createDataTable() {\n this.datatable = new DataTable(\".datatables-ticket-order-document\", {\n processing: true,\n dom:\n '<\"row mb-2 w-100 align-items-center justify-content-between\"' +\n '<\"col-3 col-md-1 dt-info-l\"<\"\"l>>' +\n '<\"col-9 col-md-2 dt-info-r\"<\"dt-action-buttons\"fB>>' +\n '>t' +\n '<\"row mx-2 align-items-center justify-content-between\"' +\n '<\"col-7\"i>' +\n '<\"col-5 d-flex justify-content-end mt-3\"p>' +\n '>',\n language: {\n sLengthMenu: '_MENU_',\n search: '',\n searchPlaceholder: `${Utils.translate('generic.search')}...`,\n \"zeroRecords\": `${Utils.translate('generic.datatable.no_results')}`,\n \"emptyTable\": `${Utils.translate('generic.datatable.no_results')}`,\n \"paginate\": {\n \"first\": `${Utils.translate('generic.datatable.pagination.first')}`,\n \"last\": `${Utils.translate('generic.datatable.pagination.last')}`,\n \"next\": `${Utils.translate('generic.datatable.pagination.next')}`,\n \"previous\": `${Utils.translate('generic.datatable.pagination.previous')}`\n },\n \"info\": `${Utils.translate('generic.datatable.info.info')}`,\n \"infoEmpty\": `${Utils.translate('generic.datatable.info.empty')}`,\n \"infoFiltered\": `${Utils.translate('generic.datatable.info.filtered')}`,\n },\n buttons: [\n ],\n layout: {\n bottomEnd: {\n paging: {\n firstLast: false\n }\n }\n }\n });\n }\n\n async update(data: any) {\n if (this.datatable) {\n this.datatable.destroy();\n }\n const table = document.querySelector(\".datatables-ticket-order-document tbody\") as HTMLElement;\n table.innerHTML = \"\";\n if (data.orders) {\n data.orders.forEach((order: any) => {\n order.documents.forEach((document: any) => {\n let tr = `