{"version":3,"file":"list-j9Bj0OTG.js","sources":["../../../app/frontend/entrypoints/controllers/erp/inventory/overview/list.ts"],"sourcesContent":["import jQuery from 'jquery/dist/jquery';\nimport Swal from 'sweetalert2';\nimport * as bootstrap from 'bootstrap'\n\nimport Utils from '../../../../utils'\nimport DefaultController from \"../../../defaultController\";\nimport ErpInventoryEntity from '../entity';\n\nexport default class ErpInventoryList extends DefaultController {\n tableElem: any;\n datatable: any;\n editModal: bootstrap.Modal | undefined;\n warehouses = [];\n locationMap = {}\n\n async init() {\n this.entity = \"erp/inventories\"\n this.tableElem = jQuery('.datatables-users')\n await this.getWarehouses()\n this.createTable();\n this.editModal = new bootstrap.Modal((document.querySelector(\"#editInventory\") as HTMLElement));\n await super.init();\n }\n\n async getWarehouses() {\n const entities = await Utils.entity.getAll(\"erp/warehouses\")\n this.warehouses = entities.data\n }\n getEntityData(elem: any) {\n return ErpInventoryEntity.getEntityData(elem)\n }\n\n bindListeners() {\n this.tableElem.delegate(\".export-list\", \"click\", async (e: any) => {\n const id = e.currentTarget.getAttribute(\"data-id\");\n const requestData = await Utils.entity.get(id, this.entity)\n if (requestData.status === 200) {\n const data = requestData.data[0]\n const exportArray = [[\"Lager\", \"Lagerplatz\", \"Artikel\", \"Anzahl\"]]\n data.inventoryOrderWarehouseLocations.forEach((orderWarehouseLocation: any) => {\n orderWarehouseLocation.inventoryOrderWarehouseLocationItems.forEach((orderItem: any) => {\n exportArray.push([\n orderWarehouseLocation.warehouseLocation[0].warehouse[0].name,\n orderWarehouseLocation.warehouseLocation[0].name,\n orderItem.product[0].name,\n orderItem.quantity\n ])\n })\n })\n let csv = '';\n exportArray.forEach((e) => {\n csv += `${e.join(\";\")}\\n`\n })\n await Utils.download(new Blob([\"\\ufeff\", csv]), `inventur_${data.title}.csv`)\n }\n\n });\n this.tableElem.delegate(\".export-missing-list\", \"click\", async (e: any) => {\n const id = e.currentTarget.getAttribute(\"data-id\");\n\n });\n\n\n (document.querySelector(\"#editErpInventoryForm\") as HTMLFormElement).addEventListener(\"submit\", async (e) => {\n e.preventDefault();\n const elem = document.querySelector(\"#editErpInventoryForm\") as HTMLFormElement;\n const valid = elem.checkValidity();\n if (valid) {\n const r = await Utils.entity.upsert(this.getEntityData(elem), this.entity)\n if (r.status === 200) {\n this.datatable.ajax.reload();\n // @ts-ignore\n this.editModal.hide();\n this.toastr.success(`${Utils.translate('erp.inventory.name')} ${Utils.translate('generic.saved')}`, `${Utils.translate('generic.success')}`)\n }\n }\n });\n\n this.tableElem.delegate(\".edit-record\", \"click\", async (e: any) => {\n const id = e.currentTarget.getAttribute(\"data-id\")\n const requestData = await Utils.entity.get(id, this.entity)\n if (requestData.status === 200) {\n const data = requestData.data[0]\n const form = (document.querySelector(\"#editErpInventoryForm\") as HTMLFormElement);\n Object.keys(data).forEach((key) => {\n const elem = form.querySelector(`#erp_inventory_${key}`) as HTMLInputElement | null\n if(elem && data[key]) {\n elem.value = data[key]\n }\n })\n // @ts-ignore\n this.editModal.show();\n }\n\n });\n\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('erp.inventory.name')} ${Utils.translate('generic.deleted')}`, `${Utils.translate('generic.success')}`)\n } else {\n this.toastr.error(`${Utils.translate('erp.inventory.name')} ${Utils.translate('generic.messages.not_deleted')}`, `${Utils.translate('generic.error')}`)\n }\n this.datatable.ajax.reload();\n }\n });\n (document.querySelector(\"#addNewErpInventoryForm\") as HTMLFormElement).addEventListener(\"submit\", async (e) => {\n e.preventDefault();\n const elem = document.querySelector(\"#addNewErpInventoryForm\") as HTMLFormElement;\n const valid = elem.checkValidity();\n if (valid) {\n const r = await Utils.entity.upsert(this.getEntityData(elem), this.entity)\n if (r.status === 200) {\n elem.reset()\n jQuery('#erp_inventory_inventoryOrderWarehouseLocations').val(null).trigger('change');\n await this.datatable.ajax.reload();\n\n const bsElem = bootstrap.Offcanvas.getInstance((document.querySelector(\"#offcanvasAddErpInventory\") as HTMLElement))\n if (bsElem) {\n bsElem.hide();\n }\n this.toastr.success(`${Utils.translate('erp.inventory.name')} ${Utils.translate('generic.messages.created')}`, `${Utils.translate('generic.success')}`)\n }\n }\n })\n }\n\n createTable() {\n this.datatable = new DataTable(this.tableElem, {\n initComplete: () => {\n this.tableElem.closest(\".card\").find(\".loading-body\").addClass(\"d-none\")\n this.tableElem.closest(\".card\").find(\".card-datatable\").removeClass(\"d-none\")\n },\n \"ajax\": {\n \"type\" : \"GET\",\n \"url\" : `/api/v1/erp/inventories`,\n \"dataSrc\": ( json: any ) => {\n json.data.forEach((e: any) => {\n // @ts-ignore\n this.locationMap[e.id] = [];\n if (e.inventoryOrderWarehouseLocations) {\n let warehouseLocationIds = e.inventoryOrderWarehouseLocations.map((e: { warehouseLocationId: any; }) => e.warehouseLocationId);\n this.warehouses.forEach((warehouse) => {\n // @ts-ignore\n const warehouseIdMap = warehouse.warehouseLocations.map(wL => wL.id)\n if(warehouseIdMap.every((r: any) => warehouseLocationIds.includes(r))) {\n // @ts-ignore\n this.locationMap[e.id].push(`Komplettes Lager ${warehouse.name}`)\n warehouseLocationIds = warehouseLocationIds.filter((id: any) => warehouseIdMap.indexOf(id) === -1)\n }\n })\n e.inventoryOrderWarehouseLocations.forEach((wL: { warehouseLocationId: any; warehouseLocation: { name: any; }; }) => {\n if (warehouseLocationIds.indexOf(wL.warehouseLocationId) !== -1) {\n // @ts-ignore\n this.locationMap[e.id].push(wL.warehouseLocation[0].name)\n }\n })\n }\n })\n\n\n return json.data;\n }\n },\n columns: [\n {data: 'title'},\n {data: 'id'},\n {data: 'id'},\n {data: 'status'},\n {data: 'createdAt'},\n {data: 'id'},\n ],\n columnDefs: [\n {\n targets: 0,\n render: (data: any, type: any, full: any, meta: any) => {\n return data;\n },\n },\n {\n targets: 1,\n render: (data: any, type: any, full: any, meta: any) => {\n // @ts-ignore\n return this.locationMap[data].join(\", \");\n },\n },\n {\n targets: 2,\n render: (data: any, type: any, full: any, meta: any) => {\n return full.user[0] ? full.user[0].username : \"\";\n },\n },\n {\n targets: 3,\n searchable: false,\n orderable: false,\n render: (data: any, type: any, full: any, meta: any) => {\n return data;\n },\n },\n {\n targets: 4,\n searchable: false,\n orderable: false,\n render: (data: any, type: any, full: any, meta: any) => {\n return new Date(Date.parse(data)).toLocaleString();\n },\n },\n {\n targets: 5,\n searchable: false,\n orderable: false,\n render: (data: any, type: any, full: any, meta: any) => {\n let html = \"\";\n html += `