Compare commits
No commits in common. "9324f61d05cff8b8591f6a976d9e02946c9352e3" and "38c46293020575303faf6554443ace3d5415f219" have entirely different histories.
9324f61d05
...
38c4629302
@ -8,7 +8,6 @@ namespace PSTW_CentralSystem.Areas.Inventory.Models
|
||||
[Key]
|
||||
public int ProductId { get; set; }
|
||||
public required string ProductName { get; set; }
|
||||
public required string ProductShortName { get; set; }
|
||||
public required int ManufacturerId { get; set; }
|
||||
public required string Category { get; set; }
|
||||
public required string ModelNo { get; set; }
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace PSTW_CentralSystem.Areas.Inventory.Models
|
||||
{
|
||||
@ -7,13 +6,9 @@ namespace PSTW_CentralSystem.Areas.Inventory.Models
|
||||
{
|
||||
[Key]
|
||||
public int SupplierId { get; set; }
|
||||
public required string SupplierCompName { get; set; }
|
||||
public required string SupplierAddress { get; set; }
|
||||
[AllowNull]
|
||||
public string? SupplierPIC { get; set; }
|
||||
[AllowNull]
|
||||
public string? SupplierEmail { get; set; }
|
||||
[AllowNull]
|
||||
public string? SupplierPhoneNo { get; set; }
|
||||
public required string SupplierName { get; set; }
|
||||
public required string SupplierGender { get; set; }
|
||||
public required string SupplierEmail { get; set; }
|
||||
public required string SupplierPhoneNo { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,14 +4,6 @@
|
||||
Layout = "~/Views/Shared/_Layout.cshtml";
|
||||
}
|
||||
<style>
|
||||
@@font-face {
|
||||
font-family: 'OCR-A';
|
||||
src: url('../assets/fonts/ocraext.ttf');
|
||||
}
|
||||
|
||||
.QrPrintFont {
|
||||
font-family: 'OCR-A', monospace;
|
||||
}
|
||||
.table td img {
|
||||
display: block !important;
|
||||
}
|
||||
@ -28,7 +20,7 @@
|
||||
<span class="visually-hidden">Loading...</span>
|
||||
</div>
|
||||
</div> *@
|
||||
<table class="table table-bordered table-hover table-striped no-wrap" id="itemDatatable" style=" width:100%;border-style: solid; border-width: 1px"></table>
|
||||
<table class="table table-bordered table-hover table-striped no-wrap" id="itemDatatable" style="width:100%;border-style: solid; border-width: 1px"></table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal fade" id="QrItemModal" tabindex="-1" role="dialog" aria-labelledby="QrItemModalLabel" aria-hidden="true" data-bs-target="#staticBackdrop">
|
||||
@ -53,17 +45,17 @@
|
||||
</div>
|
||||
<div class="col-7 d-flex align-items-center justify-content-center">
|
||||
<div class="text-center fs-4 text">
|
||||
<div class="col-12 my-3">
|
||||
{{thisQRInfo.uniqueID}}
|
||||
</div>
|
||||
<div class="col-12 my-3">
|
||||
{{thisQRInfo.departmentName}}
|
||||
</div>
|
||||
<div class="col-12 my-3">
|
||||
{{thisQRInfo.productShortName}}
|
||||
{{thisQRInfo.productName}}
|
||||
</div>
|
||||
<div class="col-12 my-3">
|
||||
{{thisQRInfo.serialNumber}}
|
||||
</div>
|
||||
<div class="col-12 my-3">
|
||||
{{thisQRInfo.partNumber}}
|
||||
{{thisQRInfo.endWDate}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -562,29 +554,12 @@
|
||||
},
|
||||
},
|
||||
{
|
||||
"title": "Print",
|
||||
"data": "uniqueID",
|
||||
"render": function (data, type, full, meta) {
|
||||
var printButton = `<button type="button" class="btn btn-success print-btn" data-id="${data}">Print</button>`;
|
||||
return printButton;
|
||||
},
|
||||
"className": "align-middle",
|
||||
},
|
||||
{
|
||||
"title": "Item Short Name",
|
||||
"data": "productShortName",
|
||||
"title": "Category",
|
||||
"data": "category",
|
||||
},
|
||||
{
|
||||
"title": "Serial Number",
|
||||
"data": "serialNumber",
|
||||
},
|
||||
{
|
||||
"title": "Part Number",
|
||||
"data": "partNumber",
|
||||
},
|
||||
{
|
||||
"title": "Category",
|
||||
"data": "category",
|
||||
},
|
||||
{
|
||||
"title": "Quantity",
|
||||
@ -626,14 +601,21 @@
|
||||
Station: ${currentStation}`
|
||||
}
|
||||
},
|
||||
{
|
||||
"title": "Print",
|
||||
"data": "uniqueID",
|
||||
"render": function (data, type, full, meta) {
|
||||
var printButton = `<button type="button" class="btn btn-success print-btn" data-id="${data}">Print</button>`;
|
||||
return printButton;
|
||||
},
|
||||
},
|
||||
{
|
||||
"title": "Delete",
|
||||
"data": "itemID",
|
||||
"data": "productId",
|
||||
"render": function (data) {
|
||||
var deleteButton = `<button type="button" class="btn btn-danger delete-btn" data-id="${data}">Delete</button>`;
|
||||
return deleteButton;
|
||||
},
|
||||
"className": "align-middle",
|
||||
}
|
||||
],
|
||||
responsive: true,
|
||||
@ -658,9 +640,9 @@
|
||||
correctLevel: QRCode.CorrectLevel.M
|
||||
});
|
||||
}
|
||||
// container.on('click', function() {
|
||||
// window.open(data.qrString, '_blank');
|
||||
// });
|
||||
container.on('click', function() {
|
||||
window.open(data.qrString, '_blank');
|
||||
});
|
||||
});
|
||||
},
|
||||
})
|
||||
@ -681,10 +663,10 @@
|
||||
// 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');
|
||||
imageSrc = $row.prev('tr').find('td:first-child 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');
|
||||
imageSrc = $row.find('td:first-child img').attr('src');
|
||||
}
|
||||
|
||||
if (imageSrc) {
|
||||
@ -855,7 +837,7 @@
|
||||
return;
|
||||
}
|
||||
try {
|
||||
const response = await fetch(`/InvMainAPI/DeleteItem/${itemId}`, {
|
||||
const response = await fetch(`/InvMainAPI/DeleteProduct/${itemId}`, {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
@ -953,22 +935,22 @@
|
||||
|
||||
// Populate the virtual DOM with content
|
||||
virtualElement.innerHTML = `
|
||||
<div class="container-fluid my-3 QrPrintFont" style="font-family: 'OCR A', monospace;">
|
||||
<div class="container-fluid my-3" 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 class="col-12 h4"><b>${this.thisQRInfo.uniqueID}</b></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-7 d-flex align-items-center justify-content-left">
|
||||
<div class="col-7 d-flex align-items-center justify-content-center">
|
||||
<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 class="col-12 h4"><b>${this.thisQRInfo.departmentName}</b></div>
|
||||
<div class="col-12 h4"><b>${this.thisQRInfo.serialNumber??"-"}</b></div>
|
||||
<div class="col-12 h4"><b>${this.thisQRInfo.productName}</b></div>
|
||||
<div class="col-12 h4"><b>${this.thisQRInfo.endWDate}</b></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -986,6 +968,7 @@
|
||||
}).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;
|
||||
|
||||
@ -28,15 +28,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Product Short Name *@
|
||||
<div class="form-group row">
|
||||
<label for="productName" class="col-sm-3">Product Short Name:</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" id="productShortName" name="productShortName" class="form-control" maxlength="13" v-model="productShortName" required>
|
||||
<p><em><small class="text-danger">* Product short name limited to 13 characters</small></em></p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Manufacturer *@
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3">Manufacturer:</label>
|
||||
@ -135,7 +126,6 @@
|
||||
imageSrc: '',
|
||||
products: null,
|
||||
productDatatable: null,
|
||||
productShortName: null,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
@ -152,9 +142,6 @@
|
||||
{ "title": "Product Name",
|
||||
"data": "productName",
|
||||
},
|
||||
{ "title": "Product Short Name",
|
||||
"data": "productShortName",
|
||||
},
|
||||
{ "title": "Model Number",
|
||||
"data": "modelNo",
|
||||
},
|
||||
@ -238,7 +225,6 @@
|
||||
// Create the payload
|
||||
const formData = {
|
||||
productName: this.productName,
|
||||
productShortName: this.productShortName,
|
||||
manufacturerId: this.manufacturer,
|
||||
category: this.category,
|
||||
modelNo: this.modelNo,
|
||||
|
||||
@ -18,35 +18,30 @@
|
||||
|
||||
@* Supplier Name *@
|
||||
<div class="form-group row">
|
||||
<label for="supplierCompName" class="col-sm-3">Supplier Company Name:</label>
|
||||
<label for="supplierName" class="col-sm-3">Supplier Name:</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="text" id="supplierCompName" name="supplierCompName" class="form-control" required v-model="supplierCompName">
|
||||
<input type="text" id="supplierName" name="supplierName" class="form-control" required v-model="supplierName">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Supplier Gender *@
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3">Supplier Address:</label>
|
||||
<label class="col-sm-3">Supplier Gender:</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="dropdown">
|
||||
<textarea type="text" id="supplierAddress" name="supplierAddress" class="form-control" required v-model="supplierAddress"></textarea>
|
||||
<select class="btn btn-primary dropdown-toggle w-100" v-model="supplierGender" required data-toggle="dropdown" aria-expanded="false">
|
||||
<option value="" selected>Select Gender</option>
|
||||
<option v-for="(item, index) in gender" :key="index" :value="item">{{ item }}</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Supplier PIC *@
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3">Supplier PIC:</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="email" id="supplierPIC" name="supplierPIC" class="form-control" v-model="supplierPIC">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@* Supplier Email *@
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3">Supplier Email:</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="email" id="supplierEmail" name="supplierEmail" class="form-control" v-model="supplierEmail">
|
||||
<input type="email" id="supplierName" name="supplierEmail" class="form-control" required v-model="supplierEmail">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -54,7 +49,7 @@
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3">Supplier Phone Number:</label>
|
||||
<div class="col-sm-9">
|
||||
<input type="tel" id="supplierPhoneNo" name="supplierPhoneNo" class="form-control" v-model="supplierPhoneNo">
|
||||
<input type="tel" id="supplierPhoneNo" name="supplierPhoneNo" class="form-control" required v-model="supplierPhoneNo">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -102,11 +97,10 @@
|
||||
const app = Vue.createApp({
|
||||
data() {
|
||||
return {
|
||||
supplierCompName : null,
|
||||
supplierName : null,
|
||||
supplierEmail : null,
|
||||
supplierAddress : null,
|
||||
supplierGender : '',
|
||||
supplierPhoneNo : null,
|
||||
supplierPIC : null,
|
||||
suuppliers: null,
|
||||
supplierDatatable: null,
|
||||
gender: ["Male", "Female", "Helicopter"],
|
||||
@ -151,16 +145,15 @@
|
||||
$('#loadingModal').modal('show');
|
||||
// Create the payload
|
||||
const formData = {
|
||||
supplierCompName: this.supplierCompName,
|
||||
supplierAddress: this.supplierAddress,
|
||||
supplierPIC: this.supplierPIC,
|
||||
supplierName: this.supplierName,
|
||||
supplierEmail: this.supplierEmail,
|
||||
supplierPhoneNo: this.supplierPhoneNo,
|
||||
supplierGender: this.supplierGender,
|
||||
supplierPhoneNo: this.supplierPhoneNo
|
||||
};
|
||||
|
||||
try {
|
||||
// List of required fields
|
||||
const requiredFields = ['supplierCompName', 'supplierAddress'];
|
||||
const requiredFields = ['supplierName', 'supplierEmail', 'supplierGender', 'supplierPhoneNo'];
|
||||
|
||||
// Loop through required fields and check if any are null or empty
|
||||
for (let field of requiredFields) {
|
||||
@ -203,11 +196,10 @@
|
||||
}
|
||||
},
|
||||
resetForm() {
|
||||
this.supplierCompName = null;
|
||||
this.supplierAddress = null;
|
||||
this.supplierName = null;
|
||||
this.supplierEmail = null;
|
||||
this.supplierGender = '';
|
||||
this.supplierPhoneNo = null;
|
||||
this.supplierPIC = null;
|
||||
},
|
||||
initiateTable() {
|
||||
self = this;
|
||||
@ -215,16 +207,12 @@
|
||||
"data": this.suppliers,
|
||||
"columns": [
|
||||
{
|
||||
"title": "Supplier Company Name",
|
||||
"data": "supplierCompName",
|
||||
"title": "Supplier Name",
|
||||
"data": "supplierName",
|
||||
},
|
||||
{
|
||||
"title": "Supplier Address",
|
||||
"data": "supplierAddress",
|
||||
},
|
||||
{
|
||||
"title": "Company PIC",
|
||||
"data": "supplierPIC",
|
||||
"title": "Supplier Gender",
|
||||
"data": "supplierGender",
|
||||
},
|
||||
{
|
||||
"title": "Supplier Email",
|
||||
|
||||
@ -17,36 +17,17 @@
|
||||
<div v-if="reportData">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-3">
|
||||
<div class="row col-10">
|
||||
<h4>Department</h4>
|
||||
<multiselect v-model="selectedDepartment" :options="compDeptList" :multiple="true" group-values="departments" group-label="companyName"
|
||||
:group-select="true" placeholder="Seach Department" track-by="departmentId" label="departmentName">
|
||||
</multiselect>
|
||||
<div class=""><button class="btn btn-danger" v-on:click="selectedDepartment = []">Clear</button></div>
|
||||
</div>
|
||||
<h4>Statistic</h4>
|
||||
<select class="form-select shadow-none mt-3" v-model="selectedDepartment" v-on:change="">
|
||||
<option value="" disabled selected>Please select</option>
|
||||
<option v-for="(dept, index) in compDeptList" :key="index" :value="dept.departmentId">{{ dept.departmentName }}</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="row col-10">
|
||||
<h4>Category</h4>
|
||||
<multiselect v-model="selectedCategory" :options="categoryList" :multiple="true" placeholder="Seach Category">
|
||||
</multiselect>
|
||||
<div class=""><button class="btn btn-danger" v-on:click="selectedCategory = []">Clear</button></div>
|
||||
</div>
|
||||
<h4>Item Registered </h4>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="row col-10">
|
||||
<h4>Product</h4>
|
||||
<multiselect v-model="selectedItem" :options="selectedCategory.length == 0 && selectedDepartment.length == 0 ? productList : filteredProduct " :multiple="true" placeholder="Seach Product" track-by="productId" label="productName">
|
||||
</multiselect>
|
||||
<div class=""><button class="btn btn-danger" v-on:click="selectedItem = []">Clear</button></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3">
|
||||
<div class="row col-10">
|
||||
<h4>Date filter</h4>
|
||||
<vue-date-picker v-model="selectedMonth" month-picker range></vue-date-picker>
|
||||
<div class=""><button class="btn btn-danger" v-on:click="selectedMonth = []">Clear</button></div>
|
||||
</div>
|
||||
<h4>Item Stock Out </h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -86,16 +67,13 @@
|
||||
<script>
|
||||
$(function () {
|
||||
app.mount('#invAdmin');
|
||||
|
||||
$('.closeModal').on('click', function () {
|
||||
// Show the modal with the ID 'addManufacturerModal'.
|
||||
$('.modal').modal('hide');
|
||||
});
|
||||
});
|
||||
const app = Vue.createApp({
|
||||
components: {
|
||||
'multiselect': window.VueMultiselect.default,
|
||||
VueDatePicker,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
currentUser: null,
|
||||
@ -105,30 +83,13 @@
|
||||
},
|
||||
reportData: null,
|
||||
compDeptList: {},
|
||||
productList: {},
|
||||
categoryList:['Asset', 'Part', 'Disposable'],
|
||||
monthList: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
|
||||
filteredProduct: [],
|
||||
selectedMonth: [],
|
||||
selectedDepartment: [],
|
||||
selectedItem: [],
|
||||
selectedCategory: []
|
||||
selectedDepartment: null,
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.fetchUser();
|
||||
this.fetchProductList();
|
||||
this.fetchDepartmentsCompaniesList();
|
||||
},
|
||||
watch: {
|
||||
//watch selectedDepartment. when selectedDepartment is changed, if selectedCategory is null filter productList based on selectedDepartment only. otherwise filter the productList based on selectedDepartment and selectedCategory
|
||||
selectedDepartment() {
|
||||
this.filterProducts();
|
||||
},
|
||||
selectedCategory() {
|
||||
this.filterProducts();
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async fetchUser() {
|
||||
try {
|
||||
@ -181,60 +142,25 @@
|
||||
});
|
||||
if (response.ok) {
|
||||
const data = await response.json();
|
||||
this.compDeptList = data;
|
||||
this.compDeptList = data.map(company => company.departments.map(department =>
|
||||
({
|
||||
companyId: company.companyId,
|
||||
companyName: company.companyName,
|
||||
departmentId: department.departmentId,
|
||||
departmentName: department.departmentName,
|
||||
departmentCode: department.departmentCode
|
||||
})
|
||||
)).flat();
|
||||
console.log(this.compDeptList);
|
||||
}
|
||||
else {
|
||||
console.error(`Failed to fetch company & department list: ${response.statusText}`);
|
||||
console.error(`Failed to fetch comapny & department list: ${response.statusText}`);
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
console.error('There was a problem with the fetch operation:', error);
|
||||
}
|
||||
},
|
||||
async fetchProductList(){
|
||||
try {
|
||||
const response = await fetch(`/InvMainAPI/ItemList/`, {
|
||||
method: 'POST',
|
||||
});
|
||||
if (response.ok) {
|
||||
const data = await response.json();
|
||||
this.productList = data;
|
||||
}
|
||||
else {
|
||||
console.error(`Failed to fetch item list: ${response.statusText}`);
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
console.error('There was a problem with the fetch operation:', error);
|
||||
}
|
||||
},
|
||||
filterProducts() {
|
||||
const selectedDepartmentIds = this.selectedDepartment.map(department => department.departmentId);
|
||||
const selectedCategory = this.selectedCategory;
|
||||
if (selectedDepartmentIds.length === 0 && selectedCategory.length === 0) {
|
||||
// No filters applied
|
||||
this.filteredProduct = this.productList;
|
||||
}
|
||||
else if (selectedDepartmentIds.length === 0) {
|
||||
// Filter by category only
|
||||
this.filteredProduct = this.productList.filter(product =>
|
||||
selectedCategory.includes(product.category)
|
||||
);
|
||||
}
|
||||
else if (selectedCategory.length === 0) {
|
||||
// Filter by department only
|
||||
this.filteredProduct = this.productList.filter(product =>
|
||||
selectedDepartmentIds.includes(product.departmentId)
|
||||
);
|
||||
}
|
||||
else {
|
||||
// Filter by both department and category
|
||||
this.filteredProduct = this.productList.filter(product =>
|
||||
selectedDepartmentIds.includes(product.departmentId) &&
|
||||
selectedCategory.includes(product.category)
|
||||
);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
@ -261,7 +261,7 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
||||
}
|
||||
|
||||
var userRole = await _userManager.GetRolesAsync(user);
|
||||
var isAdmin = userRole.Contains("SystemAdmin") || userRole.Contains("SuperAdmin") || userRole.Contains("Finance");
|
||||
var isAdmin = userRole.Contains("SystemAdmin") || userRole.Contains("SuperAdmin");
|
||||
List<ItemModel> itemList = new List<ItemModel>();
|
||||
// Get the item list
|
||||
if (isAdmin)
|
||||
@ -324,7 +324,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
||||
item.Department?.DepartmentName,
|
||||
CreatedBy=item.CreatedBy!.UserName,
|
||||
item.Product!.ProductName,
|
||||
item.Product!.ProductShortName,
|
||||
item.Product!.Category,
|
||||
//CurrentUser = item.Movement?.FromUser?.UserName,
|
||||
CurrentUser = item.Movement?.FromUser?.UserName,
|
||||
@ -496,7 +495,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
||||
item.Department?.DepartmentName,
|
||||
item.CreatedBy!.UserName,
|
||||
item.Product!.ProductName,
|
||||
item.Product!.ProductShortName,
|
||||
item.Product!.ImageProduct,
|
||||
QRString = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host.Value}/I/{item.UniqueID}" // Generate QR String
|
||||
};
|
||||
@ -555,7 +553,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
|
||||
item.Department?.DepartmentName,
|
||||
CreatedBy = item.CreatedBy!.UserName,
|
||||
item.Product!.ProductName,
|
||||
item.Product!.ProductShortName,
|
||||
item.Product!.Category,
|
||||
//CurrentUser = item.Movement?.FromUser?.UserName,
|
||||
CurrentUser = item.Movement?.FromUser?.UserName,
|
||||
|
||||
@ -76,7 +76,6 @@ namespace PSTW_CentralSystem.Controllers.API.Reporting
|
||||
item.Department?.DepartmentName,
|
||||
CreatedBy = item.CreatedBy!.UserName,
|
||||
item.Product!.ProductName,
|
||||
item.Product!.ProductShortName,
|
||||
item.Product!.Category,
|
||||
//CurrentUser = item.Movement?.FromUser?.UserName,
|
||||
CurrentUser = item.Movement?.FromUser?.UserName,
|
||||
|
||||
@ -22,7 +22,7 @@
|
||||
type="image/png"
|
||||
sizes="16x16"
|
||||
href="/assets/images/favicon.png" />
|
||||
|
||||
<link href="https://fonts.googleapis.com/css2?family=OCR+A&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- Custom CSS -->
|
||||
<link rel="stylesheet" href="~/assets/libs/select2/dist/css/select2.min.css" />
|
||||
@ -38,9 +38,6 @@
|
||||
@* <script src="~/js/vue.global.prod.js"></script> *@
|
||||
<!-- QR Js -->
|
||||
<script src="~/lib/qrcode/qrcode.min.js"></script>
|
||||
|
||||
|
||||
|
||||
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
@ -50,7 +47,6 @@
|
||||
</head>
|
||||
<body>
|
||||
<style>
|
||||
|
||||
.btn-teal {
|
||||
background-color: #20c997; /* Teal color */
|
||||
color: #ffffff; /* White text */
|
||||
@ -744,12 +740,6 @@
|
||||
<script src="~/assets/libs/jquery/dist/jquery.min.js"></script>
|
||||
@* <script src="~/dist/js/jquery.ui.touch-punch-improved.js"></script> *@
|
||||
<script src="~/dist/js/jquery-ui.min.js"></script>
|
||||
<!-- VUE Multiselect-->
|
||||
<script src="~/lib/vue-multiselect/vue-multiselect.js"></script>
|
||||
<link href="~/lib/vue-multiselect/vue-multiselect.min.css" rel="stylesheet" />
|
||||
<!-- VUE Date Picker-->
|
||||
<link href="~/lib/vue-datepicker/mainvuedate.css" rel="stylesheet" />
|
||||
<script src="~/lib/vue-datepicker/vue-datepicker.iife.js"></script>
|
||||
<!-- Bootstrap tether Core JavaScript -->
|
||||
<script src="~/assets/libs/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<!-- slimscrollbar scrollbar JavaScript -->
|
||||
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user