From ca46776473119b8cc724e0d8e9fdf949e8811ea7 Mon Sep 17 00:00:00 2001 From: ameerulrasyid Date: Tue, 25 Feb 2025 16:23:45 +0800 Subject: [PATCH] fix itemmovementmaster update qrmaster --- .../Views/InventoryMaster/ItemMovement.cshtml | 28 +- .../InventoryMaster/ItemRequestMaster.cshtml | 53 +- .../Views/InventoryMaster/QrMaster.cshtml | 1016 +++++------------ Controllers/API/Inventory/InvMainAPI.cs | 30 +- ...e-5956-4e78-a4c7-ee2ae4ac94508_Request.jpg | Bin 0 -> 18882 bytes .../Inventory/request/sequence diagram.png | Bin 0 -> 71642 bytes 6 files changed, 362 insertions(+), 765 deletions(-) create mode 100644 wwwroot/Media/Inventory/itemmovement/8_9d1a573e-5956-4e78-a4c7-ee2ae4ac94508_Request.jpg create mode 100644 wwwroot/Media/Inventory/request/sequence diagram.png diff --git a/Areas/Inventory/Views/InventoryMaster/ItemMovement.cshtml b/Areas/Inventory/Views/InventoryMaster/ItemMovement.cshtml index b090376..77e7f63 100644 --- a/Areas/Inventory/Views/InventoryMaster/ItemMovement.cshtml +++ b/Areas/Inventory/Views/InventoryMaster/ItemMovement.cshtml @@ -407,24 +407,24 @@ // Generate QR codes after rows are rendered const api = this.api(); api.rows().every(function () { - const data = this.data(); // Row data - const containerId = `qr${data.id}`; - + const data = this.data(); + const containerId = `qr${data.id}`; //containerid is by increments from API const container = $(`#${containerId}`); + container.empty(); container.append(`${data.item.itemId}`); + + if (container.length) { + - // console.log(container[0]); - if (container) { - // Generate QR code only if not already generated - new QRCode(container[0], { - text: data.qrString, - width: 100, - height: 100, - colorDark: "#000000", - colorLight: "#ffffff", - correctLevel: QRCode.CorrectLevel.M - }); + new QRCode(container[0], { + text: data.qrString, + width: 100, + height: 100, + colorDark: "#000000", + colorLight: "#ffffff", + correctLevel: QRCode.CorrectLevel.M, + }); } // container.on('click', function() { // window.open(data.qrString, '_blank'); diff --git a/Areas/Inventory/Views/InventoryMaster/ItemRequestMaster.cshtml b/Areas/Inventory/Views/InventoryMaster/ItemRequestMaster.cshtml index 825a62b..e9a53eb 100644 --- a/Areas/Inventory/Views/InventoryMaster/ItemRequestMaster.cshtml +++ b/Areas/Inventory/Views/InventoryMaster/ItemRequestMaster.cshtml @@ -20,7 +20,7 @@
-

Item Request

+

Complete Request

@* *@
@@ -240,6 +240,31 @@ { "title": "Document/Picture", "data": "document", + "render": function (data, type, full, meta) { + if (!data) { + return "No Document"; + } + + // Check if the document is an image based on file extension + var isImage = /\.(jpeg|jpg|png|gif)$/i.test(data); + var isPdf = /\.pdf$/i.test(data); + + if (isImage) { + return ` + Image + `; + } + else if (isPdf) { + return ` + PDF Document +
View PDF +
`; + } else { + return `Download File`; + } + }, }, { "title": "User Remark", @@ -331,6 +356,31 @@ { "title": "Document/Picture", "data": "document", + "render": function (data, type, full, meta) { + if (!data) { + return "No Document"; + } + + // Check if the document is an image based on file extension + var isImage = /\.(jpeg|jpg|png|gif)$/i.test(data); + var isPdf = /\.pdf$/i.test(data); + + if (isImage) { + return ` + Image + `; + } + else if (isPdf) { + return ` + PDF Document +
View PDF +
`; + } else { + return `Download File`; + } + }, }, { "title": "User Remark", @@ -361,7 +411,6 @@ // data-remark="${row.remark || ''}"> // Reject // `; - // }, // "className": "align-middle", // }, diff --git a/Areas/Inventory/Views/InventoryMaster/QrMaster.cshtml b/Areas/Inventory/Views/InventoryMaster/QrMaster.cshtml index ea72ea8..3914b15 100644 --- a/Areas/Inventory/Views/InventoryMaster/QrMaster.cshtml +++ b/Areas/Inventory/Views/InventoryMaster/QrMaster.cshtml @@ -20,16 +20,8 @@
- @* *@
- @*
-
- Loading... -
-
*@ - @*
*@ -

QR & Barcode Scanner

@@ -117,195 +109,204 @@
- +
@*Right Side*@ -
-
-
-
-

Add Item Movement

-
+
+
+
+
+

Add Item Movement

+
-
- -
- - -
- -
-
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- - @* Submit and Reset Buttons *@ -
-
- - -
-
-
- -
- -
-
-
-
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- - @* Submit and Reset Buttons *@ -
-
- - -
-
-
-
-
- -
-
-
-
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- -
- -
-
- - -
- - @* Submit and Reset Buttons *@ -
-
- - -
-
-
-
-
- - -
-
+
- - -
@@ -341,10 +342,15 @@ debounceTimeout: null, userlist: null, storelist: null, + supplierlist: null, selectedUser: "", selectedStore: "", selectedAction: "", - + assigndate: null, + selectedSupplier: "", + selectedOther: "", + remark: "", + document: null, companies: [ { companyId: 1, @@ -358,66 +364,12 @@ }, ], company: "", - // Dept: null, - // teamTypes: ["Continuous", "Manual"], - // teamType: "", - // productName: null, - // imageProduct: null, - // productCategory: null, - // serialNumber: "", - // quantity: 1, - // supplierName: null, - // purchaseDate: null, - // PO: null, - // currency: "MYR", - // DefaultPrice: 0.01, - // currencyRate: 1, - // convertPrice: 0.01, - // DONo:null, - // DODate: null, - // warranty: 0, - // EndWDate: null, - // invoiceNo: null, - // invoiceDate: null,re - // partNumber: null, - // products: [], - // depts: [], - // suppliers: [ - // { - // supplierId: 1, - // supplierName: "Pang", - // }, - // { - // supplierId: 2, - // supplierName: "Ms Kim", - // }, - // ], - // isModalOpen: false, - // selectedProduct: "", - // selectedSupplier: "", - // selectedCompany: "", - // selectedDepartment: "", - // selectedTeamType: "", - // currencies: {}, - // showItemModal: false, - // loading: false, - // thisQRInfo: { - // uniqueID: null, - // departmentName: null, - // serialNumber: null, - // endWDate: null, - // }, - // items: [], currentUser: null, currentUserCompanyDept: null, } }, mounted() { this.fetchUser(); - this.fetchItems(); - this.fetchCurrencyData(); - this.fetchCompanies(); - this.fetchProducts(); this.fetchSuppliers(); this.startScanner(); this.fetchUsers(); @@ -445,35 +397,58 @@ }, }, methods: { + handleFileUpload(event) { + const file = event.target.files[0]; + + if (file) { + const reader = new FileReader(); + reader.onload = (e) => { + this.document = e.target.result.split(',')[1]; // Get Base64 string (remove metadata) + }; + reader.readAsDataURL(file); + } else { + this.document = null; + } + }, async addItemMovement() { + if (this.showProduct.category == "Disposable") { this.serialNumber = ""; } + + const now = new Date(); const formData = { - toUser: this.selectedUser, - toStore: this.selectedStore, - Remark: this.remark, + ...(this.selectedAction === 'user' ? { toUser: this.currentUser.id, toOther: 'On Delivery', SendDate: this.assigndate, lastUser: this.selectedUser, } : {}), + ...(this.selectedAction === 'store' ? { toUser: this.currentUser.id, toOther: 'On Delivery', SendDate: this.assigndate, lastUser: this.selectedStore} : {}), + ...(this.selectedAction === 'supplier' ? { toUser: this.currentUser.id, toOther: this.selectedOther, SendDate: this.assigndate, Remark: this.remark + '. Item sent to ' + this.selectedSupplier + ' for ' + this.selectedOther,lastUser: this.currentUser.id, } : {}), + ...(this.selectedAction === 'faulty' ? { toUser: this.currentUser.id,toOther: 'Faulty', Date: new Date(now.getTime() + 8 * 60 * 60 * 1000).toISOString(), Remark: this.remark, ConsignmentNote: this.document } : {}), + + ItemId: this.thisItem.itemID, + Action: 'Stock Out', + Quantity: 1, + MovementComplete: false, + }; try { // Additional specific checks - if (this.showSerialNumber) { - this.quantity = 0; - if (this.serialNumber === null || this.serialNumber === '') { - alert('Serial Number Error', 'Serial Number must be filled when selecting Item or Part.', 'warning'); - return; - } - } - else { - this.serialNumber = null; - if (this.quantity === 0 || this.quantity === null || this.quantity === '') { - alert('quantity Error', 'Quantity is required when selecting Disposable.', 'warning'); - return; - } - } + // if (this.showSerialNumber) { + // this.quantity = 0; + // if (this.serialNumber === null || this.serialNumber === '') { + // alert('Serial Number Error', 'Serial Number must be filled when selecting Item or Part.', 'warning'); + // return; + // } + // } + // else { + // this.serialNumber = null; + // if (this.quantity === 0 || this.quantity === null || this.quantity === '') { + // alert('quantity Error', 'Quantity is required when selecting Disposable.', 'warning'); + // return; + // } + // } // Proceed to send the data to the API const response = await fetch('/InvMainAPI/AddItemMovement', { @@ -488,12 +463,12 @@ // If the form submission was successful, display a success message alert('Success!', 'Item form has been successfully submitted.', 'success'); const updatedItem = await response.json(); - this.items.push(updatedItem); - - this.fetchItem(); + // this.items.push(updatedItem); // Reset the form this.resetForm(); + // window.location.href = '/Inventory/InventoryMaster/ItemMovement'; + } else { throw new Error('Failed to submit form.'); } @@ -547,6 +522,7 @@ ); if (response.ok) { this.thisItem = await response.json(); + } else { console.error('Failed to fetch item information'); @@ -556,300 +532,6 @@ console.error('Error fetching item information:', error); } }, - async addItem() { - - if (this.showProduct.category == "Disposable") { - this.serialNumber = ""; - } - const formData = { - CompanyId: this.selectedCompany, - DepartmentId: this.selectedDepartment, - ProductId: this.selectedProduct, - SerialNumber: this.serialNumber, - Quantity: this.quantity, - Supplier: this.selectedSupplier, - PurchaseDate: this.purchaseDate, - PONo: this.PO, - Currency: this.currency, - DefaultPrice: this.DefaultPrice, - CurrencyRate: this.currencyRate, - ConvertPrice: this.convertPrice, - DODate: this.DODate, - Warranty: this.warranty, - EndWDate: this.EndWDate, - InvoiceDate: this.invoiceDate, - CreatedByUserId: this.currentUser.id, - TeamType: this.selectedTeamType, - PartNumber: this.partNumber, - }; - - try { - - // Additional specific checks - if (this.showSerialNumber) { - this.quantity = 0; - if (this.serialNumber === null || this.serialNumber === '') { - alert('Serial Number Error', 'Serial Number must be filled when selecting Item or Part.', 'warning'); - return; - } - } - else { - this.serialNumber = null; - if (this.quantity === 0 || this.quantity === null || this.quantity === '') { - alert('quantity Error', 'Quantity is required when selecting Disposable.', 'warning'); - return; - } - } - - // Proceed to send the data to the API - const response = await fetch('/InvMainAPI/AddItem', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - // 'Authorization': `Bearer ${this.token}` - }, - body: JSON.stringify(formData) - }); - if (response.ok) { - // If the form submission was successful, display a success message - alert('Success!', 'Item form has been successfully submitted.', 'success'); - const updatedItem = await response.json(); - this.items.push(updatedItem); - - this.fetchItems(); - - // Reset the form - this.resetForm(); - } else { - throw new Error('Failed to submit form.'); - } - - } catch (error) { - console.error('Error:', error); - - // Displaying error message - alert('Inventory PSTW Error', `An error occurred: ${error.message}`, 'error'); - } - - }, - - initiateTable() { - self = this; - this.itemDatatable = $('#itemDatatable').DataTable({ - "data": this.items, - "columns": [ - { - "title": "Unique Id", - "data": "uniqueID", - "createdCell": function (td, cellData, rowData, row, col) { - // Assign a unique ID to the element - $(td).attr('id', `qr${cellData}`); - }, - }, - { - "title": "Print", - "data": "uniqueID", - "render": function (data, type, full, meta) { - var printButton = ``; - return printButton; - }, - "className": "align-middle", - }, - { - "title": "Item Short Name", - "data": "productShortName", - }, - { - "title": "Serial Number", - "data": "serialNumber", - }, - { - "title": "Part Number", - "data": "partNumber", - }, - { - "title": "Category", - "data": "category", - }, - { - "title": "Quantity", - "data": "quantity", - }, - { - "title": "Supplier", - "data": "supplier", - }, - { - "title": "Purchase Date", - "data": "purchaseDate", - }, - { - "title": "Price(RM)", - "data": "convertPrice", - }, - { - "title": "Invoice Date", - "data": "invoiceDate", - }, - { - "title": "Warranty Until", - "data": "warranty", - "render": function (data, type, full, meta) { - if (data > 0) { return full.endWDate } - else { return data } - } - }, - { - "title": "Location", - "data": "currentUser", - "render": function (data, type, full, meta) { - currentUser = data ?? null; - currentStore = full.currentStore ?? 'N/A'; - currentStation = full.currentStation ?? 'N/A'; - return `User: ${currentUser}
- Store: ${currentStore}
- Station: ${currentStation}` - } - }, - { - "title": "Delete", - "data": "itemID", - "render": function (data) { - var deleteButton = ``; - return deleteButton; - }, - "className": "align-middle", - } - ], - responsive: true, - drawCallback: function (settings) { - // Generate QR codes after rows are rendered - const api = this.api(); - api.rows().every(function () { - const data = this.data(); // Row data - const containerId = `qr${data.uniqueID}`; - const container = $(`#${containerId}`); - container.empty(); - container.append(`${data.uniqueID}`); - // console.log(container[0]); - if (container) { - // Generate QR code only if not already generated - new QRCode(container[0], { - text: data.qrString, - width: 100, - height: 100, - colorDark: "#000000", - colorLight: "#ffffff", - correctLevel: QRCode.CorrectLevel.M - }); - } - // container.on('click', function() { - // window.open(data.qrString, '_blank'); - // }); - }); - }, - }) - - // Attach click event listener to the delete buttons - $('#itemDatatable tbody').on('click', '.delete-btn', function () { - const itemId = $(this).data('id'); - self.deleteItem(itemId); - }); - - $('#itemDatatable tbody').on('click', '.print-btn', function () { - const $button = $(this); // The clicked button - const $row = $button.closest('tr'); // The parent row of the button - const itemId = $button.data('id'); // Get the item ID from the button's data attribute - - let imageSrc; - - // Check if the table is collapsed - if ($row.hasClass('child')) { - // For collapsed view: Look for the closest `.dtr-data` that contains the img - imageSrc = $row.prev('tr').find('td:nth-child(1) img').attr('src'); - } else { - // For expanded view: Find the img in the first column of the current row - imageSrc = $row.find('td:nth-child(1) img').attr('src'); - } - - if (imageSrc) { - self.printItem(itemId, imageSrc); // Call the print function with the itemId and imageSrc - } else { - console.error("Image source not found."); - } - }); - - this.loading = false; - }, - - async fetchItems() { - - try { - // const token = localStorage.getItem('token'); // Get the token from localStorage - const response = await fetch('/InvMainAPI/ItemList', { - method: 'POST', // Specify the HTTP method - headers: { - 'Content-Type': 'application/json', // Set content type - // 'Authorization': `Bearer ${token}` // Include the token in the headers - } - }); - - if (!response.ok) { - throw new Error('Failed to fetch item'); - } - this.items = await response.json(); - - if (this.itemDatatable) { - this.itemDatatable.clear().destroy(); - } - this.initiateTable(); - } - catch (error) { - console.error('Error fetching item:', error); - } - }, - - async fetchProducts() { - try { - // const token = localStorage.getItem('token'); // Get the token from localStorage - const response = await fetch('/InvMainAPI/ProductList', { - method: 'POST', // Specify the HTTP method - headers: { - 'Content-Type': 'application/json', // Set content type - // 'Authorization': `Bearer ${token}` // Include the token in the headers - } - }); - - if (!response.ok) { - throw new Error('Failed to fetch products'); - } - - this.products = await response.json(); - } - catch (error) { - console.error('Error fetching products:', error); - } - }, - - async fetchCompanies() { - try { - const response = await fetch('/AdminAPI/GetDepartmentWithCompanyList', { - method: 'POST', // Specify the HTTP method - headers: { - 'Content-Type': 'application/json' - } - }); - if (!response.ok) { - throw new Error('Failed to fetch companies'); - } - - this.companies = await response.json(); - - } catch (error) { - console.error('Error fetching products:', error); - } - }, - async fetchSuppliers() { try { const response = await fetch('/InvMainAPI/SupplierList', { @@ -861,127 +543,26 @@ if (!response.ok) { throw new Error('Failed to fetch suppliers'); } - this.suppliers = await response.json(); // Get the full response object + this.supplierlist = await response.json(); // Get the full response object } catch (error) { console.error('Error fetching suppliers:', error); } }, - async fetchCurrencyData() { - try { - // Fetch currency data from the API - const response = await fetch('https://openexchangerates.org/api/currencies.json'); // Example API - this.currencies = await response.json(); - } catch (error) { - console.error('Error fetching currency data:', error); - } - }, - convertCurrency() { - // Your currency conversion logic here - console.log('Selected currency:', this.currency); - }, resetForm() { - this.selectedUser = null; - this.selectedStore = null; - this.remark = ''; + this.selectedUser = ""; + this.selectedStore = ""; + this.remark = ""; + this.assigndate = ""; + this.selectedStore = ""; + this.selectedOther = ""; + }, // FRONT END FUNCTIONS //----------------------// - //Calculate Total Price - convertCurrency() { - const total = this.DefaultPrice * this.currencyRate; - this.convertPrice = total.toFixed(2); - this.DefaultPrice = this.DefaultPrice - // .replace(/[^0-9.]/g, '') // Remove non-numeric characters except decimal points - // .replace(/(\..*)\..*/g, '$1') // Allow only one decimal point - // .replace(/^(\d*\.\d{0,2})\d*$/, '$1'); // Limit to two decimal places - - }, - calculateWarrantyEndDate() { - // Check if DODate and warranty are valid - if (!this.DODate || isNaN(Date.parse(this.DODate))) { - this.EndWDate = null; - return; - } - - const DODates = new Date(this.DODate); - const warrantyMonth = parseInt(this.warranty); - - // Ensure warranty is a valid number - if (!isNaN(warrantyMonth)) { - DODates.setMonth(DODates.getMonth() + warrantyMonth); - this.EndWDate = DODates.toISOString().split('T')[0]; - } else { - this.EndWDate = null; - } - }, - async deleteItem(itemId) { - if (!confirm("Are you sure you want to delete this item?")) { - return; - } - try { - const response = await fetch(`/InvMainAPI/DeleteItem/${itemId}`, { - method: 'DELETE', - headers: { - 'Content-Type': 'application/json', - }, - }); - const result = await response.json(); - - if (result.success) { - alert(result.message); - // Remove the row from DataTables - this.itemDatatable - .row($(`.delete-btn[data-id="${itemId}"]`).closest('tr')) - .remove() - .draw(); - } else { - alert(result.message); - } - } - catch (error) { - console.error("Error deleting item:", error); - alert("An error occurred while deleting the item."); - } - finally { - this.loading = false; - } - }, - async printItem(itemId, imgSrc) { - try { - this.thisQRInfo.uniqueID = itemId; - const uniqueQR = itemId; - const container = document.getElementById("QrContainer"); - - if (!container) { - console.error("Container not found."); - return; - } - - // Safely set image content - const sanitizedImgSrc = encodeURI(imgSrc); // Sanitize the URL - container.innerHTML = `QR Code`; - - // Fetch QR information - const qrInfo = this.getPrintedQR(uniqueQR); - if (!qrInfo) { - console.error("QR Info not found."); - return; - } - - this.thisQRInfo = qrInfo; - this.thisQRInfo.imgSrc = sanitizedImgSrc - this.thisQRInfo.imgContainer = container.innerHTML - $(`#QrItemModal`).modal('show'); // Show modal - } - catch (error) { - console.error("Error generating QR code:", error); - alert("An error occurred while generating the QR code."); - } - }, async fetchUser() { try { const response = await fetch(`/IdentityAPI/GetUserInformation/`, { @@ -994,6 +575,7 @@ this.currentUserCompanyDept = companyDeptData; this.selectedCompany = companyDeptData?.companyId || ""; this.selectedDepartment = companyDeptData?.departmentId || ""; + } else { console.error(`Failed to fetch user: ${response.statusText}`); @@ -1003,88 +585,27 @@ console.error('There was a problem with the fetch operation:', error); } }, - getPrintedQR(uniqueID) { - if (!this.items || !Array.isArray(this.items)) { - console.error("Items list is not available or is not an array."); - return null; - } - return this.items.find(item => item.uniqueID === uniqueID); - }, - printQRInfo() { - // Create a virtual DOM element - const virtualElement = document.createElement('div'); - virtualElement.style.width = '330px '; // Match label size for 2 inches at 203 DPI - virtualElement.style.height = '160px'; - virtualElement.style.position = 'absolute'; - virtualElement.style.left = '-9999px'; // Position offscreen to avoid rendering on the main UI - // virtualElement.style.border = '1px solid #000'; // Optional: Add a border for debugging dimensions - - // Populate the virtual DOM with content - virtualElement.innerHTML = ` -
-
-
-
-
-
${this.thisQRInfo.imgContainer}
-
${this.thisQRInfo.uniqueID}
-
-
-
-
-
-
${this.thisQRInfo.departmentName}
-
${this.thisQRInfo.productShortName}
-
${this.thisQRInfo.serialNumber??"-"}
-
${this.thisQRInfo.partNumber}
-
-
-
-
- `; - - // Append the virtual DOM to the body (temporarily) - document.body.appendChild(virtualElement); - - // Wait for the font to be loaded (important for custom fonts like OCR-A) - document.fonts.load('1em "OCR A"').then(() => { - // Use html2canvas to convert the virtual DOM to an image - html2canvas(virtualElement, { - scale: 1, // Increase scale for sharper images - }).then((canvas) => { - // Convert the canvas to an image - const imgData = canvas.toDataURL('image/png'); - // Open the image in a new tab for preview (optional) - // const newWindow = window.open(); - // newWindow.location.href = imgData; - // console.log(imgData) - // Use printJS to print the image - printJS({ - printable: imgData, - type: 'image', - css: '/../lib/bootstrap/dist/css/bootstrap.css', - style: ` - @@media print { - @@page { - margin: 5px 5px 0px 5px; - } - body { margin: 0; } - } - ` - }); - - // Remove the virtual DOM from the body after use - document.body.removeChild(virtualElement); - }).catch((error) => { - console.error("Error generating image:", error); - // Remove the virtual DOM if an error occurs - document.body.removeChild(virtualElement); + async fetchStoreId() { + try { + const response = await fetch(`/IdentityAPI/GetUserInformation/`, { + method: 'POST', }); - }).catch((error) => { - console.error("Error loading font:", error); - // Remove the virtual DOM if font loading fails - document.body.removeChild(virtualElement); - }); + if (response.ok) { + const data = await response.json(); + this.currentUser = data?.userInfo || null; + const companyDeptData = await this.currentUser.department; + this.currentUserCompanyDept = companyDeptData; + this.selectedCompany = companyDeptData?.companyId || ""; + this.selectedDepartment = companyDeptData?.departmentId || ""; + + } + else { + console.error(`Failed to fetch user: ${response.statusText}`); + } + } + catch (error) { + console.error('There was a problem with the fetch operation:', error); + } }, async fetchUsers() { try { @@ -1125,6 +646,7 @@ this.storelist = await response.json(); + } catch (error) { console.error('Error fetching item:', error); diff --git a/Controllers/API/Inventory/InvMainAPI.cs b/Controllers/API/Inventory/InvMainAPI.cs index 94e49c1..3f3517f 100644 --- a/Controllers/API/Inventory/InvMainAPI.cs +++ b/Controllers/API/Inventory/InvMainAPI.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Authorization; +using Azure.Core; +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; @@ -643,7 +644,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory [HttpPost("AddItemMovement")] public async Task AddItemMovement([FromBody] ItemMovementModel itemmovement) - //public async Task AddItemMovement() { @@ -655,6 +655,32 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory try { + + if (!string.IsNullOrEmpty(itemmovement.ConsignmentNote)) + { + var bytes = Convert.FromBase64String(itemmovement.ConsignmentNote); + string filePath = ""; + + string uniqueName = $"{itemmovement.ItemId}_{Guid.NewGuid()}"; + + if (IsImage(bytes)) + { + filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/media/inventory/itemmovement", uniqueName + itemmovement.ItemId + "_Request.jpg"); + itemmovement.ConsignmentNote = "/media/inventory/itemmovement/" + uniqueName + itemmovement.ItemId + "_Request.jpg"; + } + else if (IsPdf(bytes)) + { + filePath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot/media/inventory/itemmovement", uniqueName + itemmovement.ItemId + "_Request.pdf"); + itemmovement.ConsignmentNote = "/media/inventory/itemmovement/" + uniqueName + itemmovement.ItemId + "_Request.pdf"; + } + else + { + return BadRequest("Unsupported file format."); + } + + await System.IO.File.WriteAllBytesAsync(filePath, bytes); + } + _centralDbContext.ItemMovements.Add(itemmovement); await _centralDbContext.SaveChangesAsync(); // This generates the auto-incremented ItemID diff --git a/wwwroot/Media/Inventory/itemmovement/8_9d1a573e-5956-4e78-a4c7-ee2ae4ac94508_Request.jpg b/wwwroot/Media/Inventory/itemmovement/8_9d1a573e-5956-4e78-a4c7-ee2ae4ac94508_Request.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4c89420085ad96e5988e2a8a78e500a99d17e21 GIT binary patch literal 18882 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≪wrX5p4C_zOH>@~mvNFO`{du*^cyh;EDp zO~|8Bl~_t6;p)CK`yMx7M5qhtdu6zyW6Wvg_d-4S=#osMQnPY0!SA9t&I?%heMxa<=>Tt^mKRo#JRIX!v(v6DDtCoeGd2fH?D8y z$$5Idzr+N?kBh&?fPY#%*p&#zuOE`&Y{c>Y-o^Jo+NQc?Uork%18YzAMz0fwHOcA% z69qDS(PMM>R_JKYEsDM**VU#v9*Ybs89UidSL_zF|IR9mX zM6}RWiN#?WkOmQ~y3*K{I{2=>$9gy8|5~R+>%WwZPHy>}$U_kY#hbo>QPRy{hm}(u zW(b21?z&RA2b8&@ATR$8a@s!+mueW3b?^85O_w|)f5qa_3w2|hlFqw@Dah>*T)4%g zl29PsNssnqf$#pB4=vV#B=z4pHvCVFNZbB#BMFPfS8 z`T2k0nMeP;jZJomt>0%lXvNq0(`d!rqi!R}Ob0n&W34+X!`LL6qZ!KJbb#p+h#ajq zh?;%-Vr>)5#tPlB+xb7|_sPH1j8E*>;thaK*3K*C$n}=!$C9WQ={2#gg?T{;y>nNZ z`qC|D02-l1N+-gFV`s@G!Q#dXz6X4mgbwAAV$LgO*;v1_0)&1VA|7qsSTvAlrk3?p z=c#;Ca59T*K*%i#}RV>1Fi6!nw z*tBo1p&Q&FrglnYE8Ja1WQi$0#vFb6BS7t*JcWnn_-oHURzjlkwdav4*4YT4#M0oW zrI)YeUe#`V2(QGsd-~tB7>*)iB@A?vrKJG{s@P>|W~$2C?l*}YZ>RigMvwg| zI#~ZZCdmJbN8zfGkr9ZVI{o$aGFQGz{uK&lGf9VdOCw&7fBfilJJQBwT1b&4eYSZ| z+s()=EwPt9bRaqQq!0rOZD3#kA(4rlx7oU6`v(U9>tmCh&`MLbeblo}UK7U#rN(ae zRSM$x`H7EzR`x%x-ha;o-gy{+CkP~&l#aLpD^<`193;m0s&6VV-&nLpra{>j_<6Bn zL#dk*0`TiF zb`}M`Ul_>A(Cq)?-0IYU_RI~W9OK$E8bjav`ubpS_M~IrpC^FHwU23c5qv<)wgV|` zUJ7P=Xdd>Vv0%!i$ic#JU?w~qbe%`@nK|HRqvwQC$#XaMU}FJ_djb z%r-FII^d<|=!Qn{?wfN;Q9O6{D0m)yhc4mI^bKHpl#|m~xl2ArH%w1xY4rh{-(m~M z*_`*uW#DD3y3_m%0K%2PyMf6JYTz|(aNnJZ>_Pw?Xf~)#CPa^0i?(aat#2Cc*pFe<1}RWLR~=m^X&3?sV2*is~? z9&?L)NGQ%eO?hZDSTF|<)71ffdgyNQOzO`)0n2B4>mf{0c^)4+xeUWRghFyq-^xe>Gl`BMl7I(uKuhO>(cb z=$AgjM7co=0~3)=(m-CT#N7@SMos_x`AA2WPrsiJ=xwrdZ#LNiZ~mD-Fw=n%J=2%) ziJH&FiMt5_T&Li-2rE03R)u3QTfj~C!!S;ZD@Q~kd9cX4~#3)+i=|Uf+Ta-7z;6Z06FZ6!0IzR$`xN@`k zUR?mq(6_QLRv-+()Vv)Bp56uA-86v(uve77i-z%QIBB7b2$OoE4@{-AC_-wd2L>x`v zc}Zs)_?MNV3$Yv^kwimJjow@80tt*&HR)?d2L+#H`vFAQ*ISks4RP;I3Ww2vVL-D$ zb;HUvM5@%vPl~v#r>w~ktbrLgT{+$rrwG7)@>?i^!j|d)_ih*leF0+&X9`@&x6GP? zKqv^fE-tcYe-~$?1;wXf6G+_OlbB0$mOHDzl4bp2xlym4-pgq010FyV6OO=&+2LWt$gZl`Vak@4f--y zKBvXe{fA>lTL-y@SXys0Q56*xTG~XIa-4=q06I(1O5PcZEayhqg0BEsO~(;}Em>A{E)n(n{I( z@Pd#|vHP8_6fQJd7?+;gw>`$z0qOq_tZIV9%1Vgp)bKlpDsO||!SWxpnda~8?ZIqV zQw=8QsGK(SrChgT}gcL>@9dvFUA9-D)6K(tlHvAu%v(mOR>hGWXS0~bB@&5)FbZANgv u*XG~$N&b(2RS{i+>gOAOcm literal 0 HcmV?d00001 diff --git a/wwwroot/Media/Inventory/request/sequence diagram.png b/wwwroot/Media/Inventory/request/sequence diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..0584ff4512e21d6f5655a55ad65d0de08dad1e1e GIT binary patch literal 71642 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 L?F&Es^4tFh