Merge branch 'Dev2' of https://git.pstw.com.my/catalyx/PSTW_CentralizeSystem into Dev2
This commit is contained in:
commit
ed04371e3c
@ -893,35 +893,6 @@
|
||||
},
|
||||
})
|
||||
|
||||
// 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;
|
||||
},
|
||||
|
||||
@ -963,13 +934,6 @@
|
||||
|
||||
|
||||
}
|
||||
// const allowedKeys = ["toUser", "lastUser"];
|
||||
// this.items = (await response.json()).filter(item => allowedKeys.some(key => item[key] === this.currentUser.id));
|
||||
// this.items = (await response.json()).filter(item => item.lastUser === this.currentUser);
|
||||
// const allowedKeys = ["toUser", "lastUser"];
|
||||
// this.items = (await response.json()).filter(item =>
|
||||
// allowedKeys.some(key => item[key] === this.currentuser.id)
|
||||
// );
|
||||
|
||||
if (this.itemDatatable) {
|
||||
this.itemDatatable.clear().destroy();
|
||||
@ -982,101 +946,6 @@
|
||||
|
||||
this.loading = false;
|
||||
},
|
||||
|
||||
// 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 = `<img src="${sanitizedImgSrc}" alt="QR Code" class="text-center " />`;
|
||||
|
||||
// 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/`, {
|
||||
@ -1109,89 +978,6 @@
|
||||
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 = `
|
||||
// <div class="container-fluid my-3 QrPrintFont" style="font-family: 'OCR A', monospace;">
|
||||
// <div class="row" >
|
||||
// <div class="col-5 text-center d-flex align-items-center justify-content-center">
|
||||
// <div class="row">
|
||||
// <div class="col-12">
|
||||
// <div>${this.thisQRInfo.imgContainer}</div>
|
||||
// <div class="col-12 h4"style="font-family: 'Arial', monospace;"><b>${this.thisQRInfo.uniqueID}</b></div>
|
||||
// </div>
|
||||
// </div>
|
||||
// </div>
|
||||
// <div class="col-7 d-flex align-items-center justify-content-left">
|
||||
// <div class="row-fluid">
|
||||
// <div class="col-12 h3"style="font-family: 'Verdana', monospace;"><b>${this.thisQRInfo.departmentName}</b></div>
|
||||
// <div class="col-12 h4"style="font-family: 'Arial', monospace;"><b>${this.thisQRInfo.productShortName}</b></div>
|
||||
// <div class="col-12 h4"style="font-family: 'Arial', monospace;"><b>${this.thisQRInfo.serialNumber??"-"}</b></div>
|
||||
// <div class="col-12 h4"style="font-family: 'Arial', monospace;"><b>${this.thisQRInfo.partNumber}</b></div>
|
||||
// </div>
|
||||
// </div>
|
||||
// </div>
|
||||
// </div>
|
||||
// `;
|
||||
|
||||
// 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);
|
||||
// });
|
||||
// }).catch((error) => {
|
||||
// console.error("Error loading font:", error);
|
||||
// Remove the virtual DOM if font loading fails
|
||||
// document.body.removeChild(virtualElement);
|
||||
// });
|
||||
// },
|
||||
handleSorting() {
|
||||
this.renderTables();
|
||||
},
|
||||
@ -1226,11 +1012,9 @@
|
||||
{ title: "Last User", data: "lastUserName" },
|
||||
{ title: "From Station", data: "toStationName" },
|
||||
{ title: "From Store", data: "toStoreName" },
|
||||
// { title: "Action", data: "action" },
|
||||
{ title: "Start Status", data: "toOther" },
|
||||
{ title: "Product Category", data: "productCategory" },
|
||||
{ title: "Qty", data: "quantity" },
|
||||
// { title: "Send Date", data: "sendDate" },
|
||||
{
|
||||
title: "Note",
|
||||
data: "consignmentNote",
|
||||
@ -1280,13 +1064,10 @@
|
||||
{ title: "Last Station", data: "lastStationName" },
|
||||
{ title: "From Store", data: "toStoreName" },
|
||||
{ title: "Last Store", data: "lastStoreName" },
|
||||
// { title: "Action", data: "action" },
|
||||
{ title: "Start Status", data: "toOther" },
|
||||
{ title: "Latest Status", data: "latestStatus" },
|
||||
{ title: "Product Category", data: "productCategory" },
|
||||
{ title: "Qty", data: "quantity" },
|
||||
// { title: "Send Date", data: "sendDate" },
|
||||
// { title: "Receive Date", data: "receiveDate" },
|
||||
{ title: "Note",
|
||||
data: "consignmentNote",
|
||||
render: function (data, type, full, meta) {
|
||||
|
||||
@ -585,7 +585,6 @@
|
||||
return {
|
||||
thisItem: null,
|
||||
qrCodeResult: null,
|
||||
|
||||
debounceTimeout: null,
|
||||
userlist: null,
|
||||
stationlist: null,
|
||||
@ -601,19 +600,6 @@
|
||||
selectedOther: "",
|
||||
remark: "",
|
||||
document: null,
|
||||
// companies: [
|
||||
// {
|
||||
// companyId: 1,
|
||||
// companyName: "PSTW",
|
||||
// departments: [{ departmentId: 1, departmentName: "Air" }, { departmentId: 2, departmentName: "Marine" }, { departmentId: 3, departmentName: "River" }]
|
||||
// },
|
||||
// {
|
||||
// companyId: 2,
|
||||
// companyName: "TES",
|
||||
// departments: [{ departmentId: 1, departmentName: "Air" }],
|
||||
// },
|
||||
// ],
|
||||
// company: "",
|
||||
currentUser: null,
|
||||
currentUserCompanyDept: null,
|
||||
itemlateststatus: "",
|
||||
@ -682,59 +668,6 @@
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
sharpenFrame(videoCanvas) {
|
||||
const ctx = videoCanvas.getContext("2d");
|
||||
if (!ctx) return;
|
||||
|
||||
const { width, height } = videoCanvas;
|
||||
const imageData = ctx.getImageData(0, 0, width, height);
|
||||
const data = imageData.data;
|
||||
|
||||
// Sharpening kernel (edge enhancement)
|
||||
const kernel = [0, -1, 0, -1, 5, -1, 0, -1, 0];
|
||||
|
||||
// Apply convolution
|
||||
const newData = new Uint8ClampedArray(data);
|
||||
const w = width * 4; // Each pixel has 4 values (RGBA)
|
||||
|
||||
for (let y = 1; y < height - 1; y++) {
|
||||
for (let x = 1; x < width - 1; x++) {
|
||||
const i = (y * width + x) * 4;
|
||||
|
||||
let r = 0, g = 0, b = 0;
|
||||
for (let ky = -1; ky <= 1; ky++) {
|
||||
for (let kx = -1; kx <= 1; kx++) {
|
||||
const j = i + (ky * w) + (kx * 4);
|
||||
const weight = kernel[(ky + 1) * 3 + (kx + 1)];
|
||||
r += data[j] * weight;
|
||||
g += data[j + 1] * weight;
|
||||
b += data[j + 2] * weight;
|
||||
}
|
||||
}
|
||||
|
||||
// Apply sharpening
|
||||
newData[i] = Math.min(255, Math.max(0, r));
|
||||
newData[i + 1] = Math.min(255, Math.max(0, g));
|
||||
newData[i + 2] = Math.min(255, Math.max(0, b));
|
||||
}
|
||||
}
|
||||
|
||||
// Update canvas with the sharpened frame
|
||||
ctx.putImageData(new ImageData(newData, width, height));
|
||||
},
|
||||
processFrame(videoElement) {
|
||||
console.log(videoElement);
|
||||
console.log("Type:", typeof videoElement);
|
||||
console.log(videoElement.constructor.name);
|
||||
console.log(Array.isArray(videoElement)); // Check if it's an array
|
||||
console.log(Object.keys(videoElement));
|
||||
|
||||
for (const key in videoElement) {
|
||||
if (videoElement[key] instanceof HTMLVideoElement) {
|
||||
console.log("Found HTMLVideoElement at:", key, videoElement[key]);
|
||||
}
|
||||
}
|
||||
},
|
||||
// Split Url dapatkan unique ID Je
|
||||
onDecode(detectedCodes) {
|
||||
// const endTime = performance.now();
|
||||
@ -766,126 +699,48 @@
|
||||
async onCameraReady(videoElement) {
|
||||
|
||||
const video = document.querySelector("video");
|
||||
console.log("📸 Found Video Element:", video);
|
||||
console.log("🎬 Video.srcObject:", video?.srcObject);
|
||||
// console.log("📸 Found Video Element:", video);
|
||||
// console.log("🎬 Video.srcObject:", video?.srcObject);
|
||||
|
||||
const track = video.srcObject.getVideoTracks()[0];
|
||||
console.log("🎞 Video Track:", track);
|
||||
// console.log("🎞 Video Track:", track);
|
||||
|
||||
|
||||
if (track && track.getCapabilities) {
|
||||
const capabilities = track.getCapabilities(); // Get camera capabilities
|
||||
console.log("🎛 Camera Capabilities:", capabilities);
|
||||
// console.log("🎛 Camera Capabilities:", capabilities);
|
||||
|
||||
if (capabilities.sharpness) {
|
||||
// track.applyConstraints({
|
||||
// advanced: [ { sharpness: 100 }, Max sharpness
|
||||
// { contrast: 50 }, Boost contrast
|
||||
// { brightness: 60 }, Increase brightness
|
||||
// { frameRate: 30 }, Try max FPS
|
||||
// { exposureTime: 100 }, Lower for less motion blur
|
||||
// { focusMode: "continuous" }, Ensure auto-focus
|
||||
// { width: 1280, height: 720 }
|
||||
//]
|
||||
// }) Max resolution] Max sharpness
|
||||
|
||||
|
||||
// track.applyConstraints ({
|
||||
// advanced: [
|
||||
// {sharpness: 80},
|
||||
// { width: 1280, height: 720 }
|
||||
// ]
|
||||
// })
|
||||
// .then(() => {console.log("✅ Sharpness applied"); console.log("📷 Applied Constraintsss:", track.getSettings()); })
|
||||
// .catch(err => console.error("❌ Failed to apply sharpness:", err));
|
||||
|
||||
// Step 1: Apply resolution constraints first
|
||||
track.applyConstraints({
|
||||
advanced: [{ width: 1280, height: 720 }]
|
||||
}).then(() => {
|
||||
console.log("✅ Resolution applied", track.getSettings().width, "x", track.getSettings().height);
|
||||
// console.log("✅ Resolution applied", track.getSettings().width, "x", track.getSettings().height);
|
||||
|
||||
// Step 2: Apply sharpness separately
|
||||
return track.applyConstraints({ advanced: [{ sharpness: 100 }] });
|
||||
}).then(() => {console.log("✅ Sharpness applied")
|
||||
|
||||
// Step 2: Apply sharpness separately
|
||||
// return track.applyConstraints({ advanced: [{ whiteBalanceMode: 'manual' }] });
|
||||
// }).then(() => {console.log("✅ whitebalancemode continous applied");
|
||||
}).then(() => {
|
||||
// console.log("✅ Sharpness applied")
|
||||
|
||||
return track.applyConstraints({ advanced: [{ exposureMode: 'continuous' }] });
|
||||
}).then(() => {console.log("✅ exposureMode applied");
|
||||
|
||||
// return track.applyConstraints({ advanced: [{ exposureTime: 100 }] });
|
||||
// }).then(() => {console.log("✅ exposure time improvement applied");
|
||||
|
||||
|
||||
}).then(() => {
|
||||
// console.log("✅ exposureMode applied");
|
||||
|
||||
|
||||
})
|
||||
.then(() => { console.log("📷 Applied Constraintsss:", track.getSettings());
|
||||
}).catch(err => console.error("❌ Failed to apply constraints:", err));
|
||||
}).catch(err =>
|
||||
// console.error("❌ Failed to apply constraints:", err)
|
||||
);
|
||||
|
||||
} else {
|
||||
console.warn("⚠️ Sharpness not supported on this camera");
|
||||
console.warn("⚠️ Some settings are not supported on this camera");
|
||||
}
|
||||
}
|
||||
|
||||
console.log("📷 Applied Constraintsss:", track.getSettings());
|
||||
console.log("📷 Applied Capabilities:",track.getCapabilities());
|
||||
|
||||
// console.log("Is it a video element?", videoElement instanceof HTMLVideoElement);
|
||||
// console.log("Camera Ready! Video element:", videoElement);
|
||||
// this.videoElement = videoElement; Store for later use
|
||||
// this.scanStartTime = performance.now(); Start timing
|
||||
// this.scanTime = null; Reset previous scan time
|
||||
// if (!videoElement || !videoElement.srcObject) {
|
||||
// console.error("❌ No video source found.");
|
||||
// return;
|
||||
// }
|
||||
|
||||
// const track = videoElement.srcObject.getVideoTracks()[0];
|
||||
|
||||
// if (!videoElement) {
|
||||
// console.error("❌ No video element provided.");
|
||||
// return;
|
||||
// } else {
|
||||
// console.log(" video element provided.");
|
||||
|
||||
// }
|
||||
|
||||
// Wait a bit to ensure the video stream is attached
|
||||
// await new Promise(resolve => setTimeout(resolve, 1000));
|
||||
|
||||
// if (!videoElement.srcObject) {
|
||||
// console.error("❌ No video source (srcObject is missing).");
|
||||
// return;
|
||||
// }
|
||||
|
||||
// const track = videoElement.srcObject.getVideoTracks()[0];
|
||||
|
||||
// if (!track) {
|
||||
// console.error("❌ No video track found.");
|
||||
// return;
|
||||
// }
|
||||
// const capabilities = track.getCapabilities();
|
||||
|
||||
// console.log("📸 Camera Capabilities:", capabilities); Debugging
|
||||
|
||||
// if ("sharpness" in capabilities) {
|
||||
// try {
|
||||
// await track.applyConstraints({
|
||||
// advanced: [{ sharpness: 100 }] Max sharpness
|
||||
// });
|
||||
|
||||
// console.log("✅ Sharpness applied:", track.getSettings().sharpness);
|
||||
// } catch (error) {
|
||||
// console.error("❌ Failed to apply sharpness:", error);
|
||||
// }
|
||||
// } else {
|
||||
// console.warn("⚠️ Sharpness not supported on this camera.");
|
||||
// };
|
||||
|
||||
// console.log("📷 Applied Constraintsss:", track.getSettings());
|
||||
// console.log("📷 Applied Capabilities:",track.getCapabilities());
|
||||
|
||||
try {
|
||||
const devices = await navigator.mediaDevices.enumerateDevices();
|
||||
@ -1039,7 +894,7 @@ console.log("🎬 Video.srcObject:", video?.srcObject);
|
||||
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();
|
||||
//const updatedItem = await response.json();
|
||||
// this.items.push(updatedItem);
|
||||
// console.log(updatedItem);
|
||||
|
||||
@ -1072,15 +927,6 @@ console.log("🎬 Video.srcObject:", video?.srcObject);
|
||||
this.itemassignedtouser = this.thisItem.toUser == this.currentUser.id || this.thisItem.lastUser == this.currentUser.id ? true : false;
|
||||
// console.log(this.thisItem);
|
||||
|
||||
|
||||
// if ((this.thisItem.toOther === "Repair" || this.thisItem.toOther === "Calibration" || this.thisItem.toOther === "Return" ) && this.thisItem.lastUser === this.currentUser.id && this.thisItem.movementComplete === false) {
|
||||
// this.selectedAction = "receive";
|
||||
// }
|
||||
|
||||
// if ((this.itemlateststatus === "Repair" || this.itemlateststatus === "Calibration" || this.itemlateststatus === "Return" ) && this.thisItem.lastUser === this.currentUser.id && this.thisItem.movementComplete === false) {
|
||||
// this.selectedAction = "receive";
|
||||
// }
|
||||
|
||||
} else {
|
||||
console.error('Failed to fetch item information');
|
||||
this.responseMessage = await response.text();
|
||||
|
||||
@ -553,8 +553,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
||||
public async Task<IActionResult> ItemMovementList()
|
||||
{
|
||||
|
||||
//var itemMovementList = await _centralDbContext.ItemMovements.Include(i => i.NextUser).Include(i => i.Item).ThenInclude(i => i.Product).ToListAsync();
|
||||
|
||||
var itemMovementList = await _centralDbContext.ItemMovements
|
||||
.Include(i => i.Item)
|
||||
.ThenInclude(i => i.Product)
|
||||
@ -566,7 +564,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
||||
.Include(i => i.NextUser)
|
||||
.Include(i => i.NextUser)
|
||||
.ToListAsync();
|
||||
//var itemList = await _centralDbContext.Items.ToListAsync();
|
||||
|
||||
int itemrow = 0;
|
||||
var itemMovementListWithQR = itemMovementList.Select(item => new
|
||||
@ -578,12 +575,9 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
||||
toUserName = item.NextUser?.FullName,
|
||||
lastUserName = item.FromUser?.FullName
|
||||
}).ToList();
|
||||
//Console.WriteLine(Json(itemMovementList));
|
||||
//Console.WriteLine(Json(itemMovementListWithQR));
|
||||
|
||||
|
||||
//return Json(itemMovementList);
|
||||
//return Json(itemMovementListWithQR);
|
||||
|
||||
return Json(itemMovementList.Select(i => new
|
||||
{
|
||||
i.Id,
|
||||
@ -614,16 +608,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
||||
i.receiveDate,
|
||||
i.MovementComplete
|
||||
}));
|
||||
|
||||
//return Json(itemMovementList.Select(item => new
|
||||
//{
|
||||
// id = itemrow++,
|
||||
// item,
|
||||
// QRString = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host.Value}/I/{item.ItemId}", // Generate QR String
|
||||
// ProductName = item.Item?.Product?.ProductName,
|
||||
// toUserName = item.NextUser?.FullName,
|
||||
// lastUserName = item.FromUser?.FullName
|
||||
//}));
|
||||
}
|
||||
|
||||
[HttpPost("AddItemMovement")]
|
||||
@ -642,7 +626,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
||||
// throw new Exception("itemmovement.ToUser is null");
|
||||
//}
|
||||
|
||||
//var inventoryMaster = await _centralDbContext.InventoryMasters.Include("User").FirstOrDefaultAsync(i => i.UserId == itemmovement.ToUser) ?? new InventoryMasterModel { UserId = itemmovement.ToUser };
|
||||
var inventoryMaster = await _centralDbContext.InventoryMasters.Include("User").FirstOrDefaultAsync(i => i.UserId == itemmovement.ToUser);
|
||||
if (inventoryMaster != null)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user