{"version":3,"file":"header-VzBK1--9.js","sources":["../../../app/frontend/entrypoints/controllers/teams/timetrack/header.ts"],"sourcesContent":["import Utils from \"../../../utils\";\nimport Swal from 'sweetalert2';\nimport flatpickr from \"flatpickr\";\nimport {German} from \"flatpickr/dist/l10n/de.js\"\nimport AbsenceEntity from \"../../absence/entity\";\nimport TripEntity from \"../../trip/entity\";\nimport * as bootstrap from 'bootstrap'\nimport DefaultController from \"../../defaultController\";\nimport {en} from \"@fullcalendar/core/internal-common\";\n\n\nexport default class TeamsTimetrackHeader extends DefaultController {\n private datepicker: any;\n private absenceModal: any;\n private tripModal: any;\n private absenceTable: any\n private tableElem: any;\n\n private userId: any;\n\n async init() {\n this.entity = \"absences\"\n this.tableElem = jQuery(\".teams_header_absences_pending\")\n this.tableElem.delegate(\".delete-record\", \"click\", async (e: any) => {const confirm = await Swal.fire({\n title: 'Are you sure?',\n text: \"You won't be able to revert this!\",\n icon: 'warning',\n showCancelButton: true,\n confirmButtonText: 'Yes, delete it!',\n customClass: {\n confirmButton: 'btn btn-primary me-3',\n cancelButton: 'btn btn-label-secondary'\n },\n buttonsStyling: false\n })\n if(confirm.value === true) {\n const id = e.currentTarget.getAttribute(\"data-id\")\n const r = await Utils.entity.destroy(id, this.entity)\n if (r.status === 200) {\n this.toastr.success(`${Utils.translate('absence.name')} ${Utils.translate('generic.deleted')}`, `${Utils.translate('generic.success')}`)\n } else {\n this.toastr.error(`${Utils.translate('absence.name')} ${Utils.translate('generic.messages.not_deleted')}`, `${Utils.translate('generic.error')}`)\n }\n await this.request(\"\")\n console.log(\"this.absenceTable\", this.absenceTable)\n }\n });\n jQuery(\"#navbar-collapse\").delegate(\"button.btn[data-mode]\", \"click\", async (e) => {\n e.preventDefault();\n const btn = e.currentTarget;\n const mode = btn.getAttribute(\"data-mode\");\n await Utils.entity.request(`/api/v1/time_entries/scan`, 'POST', {mode})\n const p = document.querySelector(\".time_entry_mode_buttons\") as HTMLElement;\n let html = '';\n if (mode === \"IN\" || mode === \"P_OUT\") {\n html += ``\n html += ``\n } else if (mode === \"P_IN\") {\n html += ``\n } else if (mode === \"OUT\") {\n html += ``\n }\n p.innerHTML = html;\n });\n await Utils.createSelects({}, (elem: any) => {\n return {}\n }, (data: any, entity: any, element: any) => {\n if (element.id === \"absence_replacement_user_id\") {\n // @ts-ignore\n if(window.activeUser) {\n // @ts-ignore\n data = data.filter((u) => {return u.uuid !== window.activeUser.uuid})\n }\n }\n return data\n }, (data: any, entity: any) => {return {}},\n \"#navbarAbsenceNew .select2\");\n let config = {\n mode: 'range',\n onChange: (selectedDates: any, dateStr: any, instance: any) => {\n if (selectedDates && selectedDates[0]) {\n const fromElem = document.querySelector(\"#absence_from\") as HTMLInputElement;\n const toElem = document.querySelector(\"#absence_to\") as HTMLInputElement;\n const userTimezoneOffset = selectedDates[0].getTimezoneOffset() * 60000;\n if (selectedDates[0]) {\n fromElem.value = `${selectedDates[0].toISOString()}`\n }\n if (selectedDates[1]) {\n const d = selectedDates[1]\n d.setHours(23, 59, 59, 999)\n toElem.value = `${d.toISOString()}`\n }\n }\n },\n showMonths: 2,\n disable: window.activeUser.absenceDays\n }\n if ((window as any).currentLocale === 'de') {\n // @ts-ignore\n config[\"locale\"] = German;\n }\n // @ts-ignore\n this.datepicker = flatpickr((document.querySelector(\"#absence_daterange\") as HTMLElement), config);\n\n jQuery(\"#absence_user_id\").on(\"select2:select\", async (e: any) => {\n console.log(\"e\", e)\n const val = e.params.data.id;\n this.userId = val;\n await this.request(\"\");\n });\n\n (document.querySelector(\"#navbarAbsenceNew\") as HTMLFormElement).addEventListener(\"submit\", async (e) => {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n if (form.checkValidity()) {\n const data = AbsenceEntity.getEntityData(form)\n const reply = await Utils.entity.upsert(data, 'absences')\n if (this.absenceTable) {\n this.absenceTable.ajax.reload();\n }\n form.reset();\n if (this.datepicker) {\n this.datepicker.clear();\n }\n console.log(\"DISABLE\", reply.range, window.activeUser.absenceDays.concat(reply.data[0].range), this.datepicker)\n //@ts-ignore\n this.datepicker.set(\"disable\", window.activeUser.absenceDays.concat(reply.data[0].range));\n await this.request(\"\")\n //@ts-ignore\n const $opt = jQuery(\"\").val(activeUser.uuid).text(activeUser.name)\n jQuery(\"#navbarAbsenceNew #absence_user_id\").append($opt).trigger('change');\n\n this.toastr.success(`${Utils.translate('absence.name')} ${Utils.translate('generic.messages.created')}`, `${Utils.translate('generic.success')}`)\n\n }\n });\n (document.querySelector(\"#navbarTripNew\") as HTMLFormElement).addEventListener(\"submit\", async (e) => {\n e.preventDefault();\n const form = e.target as HTMLFormElement;\n if (form.checkValidity()) {\n const data = TripEntity.getEntityData(form)\n await Utils.entity.upsert(data, 'trips')\n form.reset();\n this.tripModal.hide()\n this.toastr.success(`${Utils.translate('trip.name')} ${Utils.translate('generic.messages.created')}`, `${Utils.translate('generic.success')}`)\n\n }\n })\n\n this.setupTimer();\n this.absenceModal = new bootstrap.Modal((document.querySelector(\"#navbarAbsenceNew\") as HTMLElement));\n this.tripModal = new bootstrap.Modal((document.querySelector(\"#navbarTripNew\") as HTMLElement));\n this.setupEventListeners();\n\n await this.setupDatatables();\n await this.request(\"\");\n this.bindListeners()\n setInterval(async () => {\n await this.setupTimer();\n }, 1000)\n }\n\n protected bindListeners() {\n }\n\n setupDatatables() {\n let columns = [\n {data: 'from'},\n {data: 'to'},\n {data: 'name'},\n {data: 'uuid'}\n ];\n let columnDefs = [\n {\n targets: 0,\n render: (data: any, type: any, full: any, meta: any) => {\n return `
${new Date(Date.parse(data)).toLocaleDateString()}`;\n },\n },\n {\n targets: 1,\n render: (data: any, type: any, full: any, meta: any) => {\n return ` ${new Date(Date.parse(data)).toLocaleDateString()}`;\n },\n },\n {\n targets: 2,\n render: (data: any, type: any, full: any, meta: any) => {\n return full.absence_mode.name\n },\n },\n {\n targets: 3,\n searchable: false,\n orderable: false,\n render: (data: any, type: any, full: any, meta: any) => {\n if (full.status === \"NEW\" || (window.activeUser && window.activeUser.role === \"admin\")) {\n return `