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;
|
this.loading = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -948,28 +919,21 @@
|
|||||||
this.initAllTables();
|
this.initAllTables();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
const data = await response.json();
|
const data = await response.json();
|
||||||
this.items = data.filter(item =>
|
this.items = data.filter(item =>
|
||||||
item.toUser === this.currentUser.id ||
|
item.toUser === this.currentUser.id ||
|
||||||
item.lastUser === this.currentUser.id ||
|
item.lastUser === this.currentUser.id ||
|
||||||
item.toStore === this.currentUser.store ||
|
item.toStore === this.currentUser.store ||
|
||||||
item.lastStore === this.currentUser.store
|
item.lastStore === this.currentUser.store
|
||||||
);
|
);
|
||||||
|
|
||||||
this.initAllTables();
|
this.initAllTables();
|
||||||
|
|
||||||
|
|
||||||
// console.log(this.items);
|
// console.log(this.items);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
// 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) {
|
if (this.itemDatatable) {
|
||||||
this.itemDatatable.clear().destroy();
|
this.itemDatatable.clear().destroy();
|
||||||
@ -982,101 +946,6 @@
|
|||||||
|
|
||||||
this.loading = false;
|
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() {
|
async fetchUser() {
|
||||||
try {
|
try {
|
||||||
const response = await fetch(`/IdentityAPI/GetUserInformation/`, {
|
const response = await fetch(`/IdentityAPI/GetUserInformation/`, {
|
||||||
@ -1109,89 +978,6 @@
|
|||||||
console.error('There was a problem with the fetch operation:', error);
|
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() {
|
handleSorting() {
|
||||||
this.renderTables();
|
this.renderTables();
|
||||||
},
|
},
|
||||||
@ -1226,11 +1012,9 @@
|
|||||||
{ title: "Last User", data: "lastUserName" },
|
{ title: "Last User", data: "lastUserName" },
|
||||||
{ title: "From Station", data: "toStationName" },
|
{ title: "From Station", data: "toStationName" },
|
||||||
{ title: "From Store", data: "toStoreName" },
|
{ title: "From Store", data: "toStoreName" },
|
||||||
// { title: "Action", data: "action" },
|
|
||||||
{ title: "Start Status", data: "toOther" },
|
{ title: "Start Status", data: "toOther" },
|
||||||
{ title: "Product Category", data: "productCategory" },
|
{ title: "Product Category", data: "productCategory" },
|
||||||
{ title: "Qty", data: "quantity" },
|
{ title: "Qty", data: "quantity" },
|
||||||
// { title: "Send Date", data: "sendDate" },
|
|
||||||
{
|
{
|
||||||
title: "Note",
|
title: "Note",
|
||||||
data: "consignmentNote",
|
data: "consignmentNote",
|
||||||
@ -1280,13 +1064,10 @@
|
|||||||
{ title: "Last Station", data: "lastStationName" },
|
{ title: "Last Station", data: "lastStationName" },
|
||||||
{ title: "From Store", data: "toStoreName" },
|
{ title: "From Store", data: "toStoreName" },
|
||||||
{ title: "Last Store", data: "lastStoreName" },
|
{ title: "Last Store", data: "lastStoreName" },
|
||||||
// { title: "Action", data: "action" },
|
|
||||||
{ title: "Start Status", data: "toOther" },
|
{ title: "Start Status", data: "toOther" },
|
||||||
{ title: "Latest Status", data: "latestStatus" },
|
{ title: "Latest Status", data: "latestStatus" },
|
||||||
{ title: "Product Category", data: "productCategory" },
|
{ title: "Product Category", data: "productCategory" },
|
||||||
{ title: "Qty", data: "quantity" },
|
{ title: "Qty", data: "quantity" },
|
||||||
// { title: "Send Date", data: "sendDate" },
|
|
||||||
// { title: "Receive Date", data: "receiveDate" },
|
|
||||||
{ title: "Note",
|
{ title: "Note",
|
||||||
data: "consignmentNote",
|
data: "consignmentNote",
|
||||||
render: function (data, type, full, meta) {
|
render: function (data, type, full, meta) {
|
||||||
|
|||||||
@ -585,7 +585,6 @@
|
|||||||
return {
|
return {
|
||||||
thisItem: null,
|
thisItem: null,
|
||||||
qrCodeResult: null,
|
qrCodeResult: null,
|
||||||
|
|
||||||
debounceTimeout: null,
|
debounceTimeout: null,
|
||||||
userlist: null,
|
userlist: null,
|
||||||
stationlist: null,
|
stationlist: null,
|
||||||
@ -601,19 +600,6 @@
|
|||||||
selectedOther: "",
|
selectedOther: "",
|
||||||
remark: "",
|
remark: "",
|
||||||
document: null,
|
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,
|
currentUser: null,
|
||||||
currentUserCompanyDept: null,
|
currentUserCompanyDept: null,
|
||||||
itemlateststatus: "",
|
itemlateststatus: "",
|
||||||
@ -682,59 +668,6 @@
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
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
|
// Split Url dapatkan unique ID Je
|
||||||
onDecode(detectedCodes) {
|
onDecode(detectedCodes) {
|
||||||
// const endTime = performance.now();
|
// const endTime = performance.now();
|
||||||
@ -766,126 +699,48 @@
|
|||||||
async onCameraReady(videoElement) {
|
async onCameraReady(videoElement) {
|
||||||
|
|
||||||
const video = document.querySelector("video");
|
const video = document.querySelector("video");
|
||||||
console.log("📸 Found Video Element:", video);
|
// console.log("📸 Found Video Element:", video);
|
||||||
console.log("🎬 Video.srcObject:", video?.srcObject);
|
// console.log("🎬 Video.srcObject:", video?.srcObject);
|
||||||
|
|
||||||
const track = video.srcObject.getVideoTracks()[0];
|
const track = video.srcObject.getVideoTracks()[0];
|
||||||
console.log("🎞 Video Track:", track);
|
// console.log("🎞 Video Track:", track);
|
||||||
|
|
||||||
|
|
||||||
if (track && track.getCapabilities) {
|
if (track && track.getCapabilities) {
|
||||||
const capabilities = track.getCapabilities(); // Get camera capabilities
|
const capabilities = track.getCapabilities(); // Get camera capabilities
|
||||||
console.log("🎛 Camera Capabilities:", capabilities);
|
// console.log("🎛 Camera Capabilities:", capabilities);
|
||||||
|
|
||||||
if (capabilities.sharpness) {
|
if (capabilities.sharpness) {
|
||||||
// track.applyConstraints({
|
|
||||||
// advanced: [ { sharpness: 100 }, Max sharpness
|
// Step 1: Apply resolution constraints first
|
||||||
// { contrast: 50 }, Boost contrast
|
track.applyConstraints({
|
||||||
// { brightness: 60 }, Increase brightness
|
advanced: [{ width: 1280, height: 720 }]
|
||||||
// { frameRate: 30 }, Try max FPS
|
}).then(() => {
|
||||||
// { exposureTime: 100 }, Lower for less motion blur
|
// console.log("✅ Resolution applied", track.getSettings().width, "x", track.getSettings().height);
|
||||||
// { focusMode: "continuous" }, Ensure auto-focus
|
|
||||||
// { width: 1280, height: 720 }
|
// Step 2: Apply sharpness separately
|
||||||
//]
|
return track.applyConstraints({ advanced: [{ sharpness: 100 }] });
|
||||||
// }) Max resolution] Max sharpness
|
}).then(() => {
|
||||||
|
// console.log("✅ Sharpness applied")
|
||||||
|
|
||||||
|
return track.applyConstraints({ advanced: [{ exposureMode: 'continuous' }] });
|
||||||
|
}).then(() => {
|
||||||
|
// console.log("✅ exposureMode applied");
|
||||||
|
|
||||||
|
|
||||||
// track.applyConstraints ({
|
})
|
||||||
// advanced: [
|
.then(() => { console.log("📷 Applied Constraintsss:", track.getSettings());
|
||||||
// {sharpness: 80},
|
}).catch(err =>
|
||||||
// { width: 1280, height: 720 }
|
// console.error("❌ Failed to apply constraints:", err)
|
||||||
// ]
|
);
|
||||||
// })
|
|
||||||
// .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
|
} else {
|
||||||
track.applyConstraints({
|
console.warn("⚠️ Some settings are not supported on this camera");
|
||||||
advanced: [{ width: 1280, height: 720 }]
|
}
|
||||||
}).then(() => {
|
}
|
||||||
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");
|
|
||||||
|
|
||||||
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("📷 Applied Constraintsss:", track.getSettings());
|
|
||||||
}).catch(err => console.error("❌ Failed to apply constraints:", err));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
console.warn("⚠️ Sharpness 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 {
|
try {
|
||||||
const devices = await navigator.mediaDevices.enumerateDevices();
|
const devices = await navigator.mediaDevices.enumerateDevices();
|
||||||
@ -1039,7 +894,7 @@ console.log("🎬 Video.srcObject:", video?.srcObject);
|
|||||||
if (response.ok) {
|
if (response.ok) {
|
||||||
// If the form submission was successful, display a success message
|
// If the form submission was successful, display a success message
|
||||||
// alert('Success!', 'Item form has been successfully submitted.', 'success');
|
// alert('Success!', 'Item form has been successfully submitted.', 'success');
|
||||||
const updatedItem = await response.json();
|
//const updatedItem = await response.json();
|
||||||
// this.items.push(updatedItem);
|
// this.items.push(updatedItem);
|
||||||
// console.log(updatedItem);
|
// console.log(updatedItem);
|
||||||
|
|
||||||
@ -1071,15 +926,6 @@ console.log("🎬 Video.srcObject:", video?.srcObject);
|
|||||||
this.itemlateststatus = this.thisItem.latestStatus ? this.thisItem.latestStatus : this.thisItem.toOther;
|
this.itemlateststatus = this.thisItem.latestStatus ? this.thisItem.latestStatus : this.thisItem.toOther;
|
||||||
this.itemassignedtouser = this.thisItem.toUser == this.currentUser.id || this.thisItem.lastUser == this.currentUser.id ? true : false;
|
this.itemassignedtouser = this.thisItem.toUser == this.currentUser.id || this.thisItem.lastUser == this.currentUser.id ? true : false;
|
||||||
// console.log(this.thisItem);
|
// 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 {
|
} else {
|
||||||
console.error('Failed to fetch item information');
|
console.error('Failed to fetch item information');
|
||||||
|
|||||||
@ -553,8 +553,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
|||||||
public async Task<IActionResult> ItemMovementList()
|
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
|
var itemMovementList = await _centralDbContext.ItemMovements
|
||||||
.Include(i => i.Item)
|
.Include(i => i.Item)
|
||||||
.ThenInclude(i => i.Product)
|
.ThenInclude(i => i.Product)
|
||||||
@ -566,7 +564,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
|||||||
.Include(i => i.NextUser)
|
.Include(i => i.NextUser)
|
||||||
.Include(i => i.NextUser)
|
.Include(i => i.NextUser)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
//var itemList = await _centralDbContext.Items.ToListAsync();
|
|
||||||
|
|
||||||
int itemrow = 0;
|
int itemrow = 0;
|
||||||
var itemMovementListWithQR = itemMovementList.Select(item => new
|
var itemMovementListWithQR = itemMovementList.Select(item => new
|
||||||
@ -578,12 +575,9 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
|||||||
toUserName = item.NextUser?.FullName,
|
toUserName = item.NextUser?.FullName,
|
||||||
lastUserName = item.FromUser?.FullName
|
lastUserName = item.FromUser?.FullName
|
||||||
}).ToList();
|
}).ToList();
|
||||||
//Console.WriteLine(Json(itemMovementList));
|
//Console.WriteLine(Json(itemMovementListWithQR));
|
||||||
|
|
||||||
|
|
||||||
//return Json(itemMovementList);
|
|
||||||
//return Json(itemMovementListWithQR);
|
|
||||||
|
|
||||||
return Json(itemMovementList.Select(i => new
|
return Json(itemMovementList.Select(i => new
|
||||||
{
|
{
|
||||||
i.Id,
|
i.Id,
|
||||||
@ -614,16 +608,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
|||||||
i.receiveDate,
|
i.receiveDate,
|
||||||
i.MovementComplete
|
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")]
|
[HttpPost("AddItemMovement")]
|
||||||
@ -642,7 +626,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
|||||||
// throw new Exception("itemmovement.ToUser is null");
|
// 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);
|
var inventoryMaster = await _centralDbContext.InventoryMasters.Include("User").FirstOrDefaultAsync(i => i.UserId == itemmovement.ToUser);
|
||||||
if (inventoryMaster != null)
|
if (inventoryMaster != null)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user