add price matrix and function for edit & delete

This commit is contained in:
raymart 2024-03-26 16:21:14 +08:00
parent c6c1995baf
commit c4f30aa999
6 changed files with 931 additions and 9 deletions

View File

@ -9,14 +9,14 @@
<!-- 03-07-2024 Stacy & Raymart modified this block of code -->
<div class="search-form d-lg-inline-block">
<form method="POST" action="vendor-card-action.php">
<div class="input-group">
<input type="text" name="search" id="search-input" class="form-control" placeholder="search.." autofocus autocomplete="off" />
<button class="submit" type="submit" id="search-btn" class="btn btn-flat">
<i class="mdi mdi-magnify" style="font-size:20px; color:gray; padding-right:8px;"></i>
</button>
</div>
</form>
<form action="vendor-product-search-action.php">
<div class="input-group">
<input type="text" name="search" id="search-input" class="form-control" placeholder="search for vendor with products.." autofocus autocomplete="off" />
<button class="submit" type="submit" id="search-btn" class="btn btn-flat">
<i class="mdi mdi-magnify" style="font-size:20px; color:gray; padding-right:8px;"></i>
</button>
</div>
</form>
<div id="search-results-container">
<ul id="search-results"></ul>
</div>

View File

@ -65,6 +65,7 @@ $response = editProduct(
$color,
$material,
$size,
$priceMatrix,
$token);
$array = json_decode($response, true);
$_SESSION['prodictId'] = $array['_id'];

View File

@ -907,6 +907,33 @@ $vendorId = $_SESSION["vendorId"];
)</span></label>
<input type="number" class="form-control" id="price2" name="sale_price" value="<?php echo $array['sale_price'] ?>">
</div>
<!-- 3-20-24 raymart added table for price matrix -->
<div class="col-md-12">
<label class="form-label">Price Matrix</label>
<table class="table">
<thead>
<tr>
<th scope="col">Quantity</th>
<th scope="col">Price (PHP)</th>
<th scope="col"></th>
</tr>
</thead>
<tbody id="price-matrix-body">
<?php foreach ($array['price_matrix'][0] as $index => $pair) : ?>
<tr data-row-index="<?php echo $index; ?>">
<td><input type="number" class="form-control" name="quantity[]" value="<?php echo $pair['quantity']; ?>"></td>
<td><input type="number" class="form-control" name="price[]" value="<?php echo $pair['price']; ?>"></td>
<td><button type="button" class="btn btn-danger delete-row">Delete</button></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<button type="button" class="btn btn-secondary" id="add-row">Add Row</button>
</div>
<!-- 3-20-24 raymart added table for price matrix -->
<!-- 02-19-2024 Jun Jihad Promo Field Product Upload Vendor Page -->
<div class="col-md-12" style="margin: 0 0 20px 0;">
<label class="form-label">Promo</label>
@ -1021,6 +1048,100 @@ $vendorId = $_SESSION["vendorId"];
newquill.on('text-change', function() {
document.getElementById('short-hidden-editor').value = newquill.root.innerHTML;
});
// 3-20-24 raymart added function for price matrix
document.getElementById("add-row").addEventListener("click", function() {
var newRow = '<tr>' +
'<td><input type="number" class="form-control quantity-input" name="quantity[]"></td>' +
'<td><input type="number" class="form-control" name="price[]"></td>' +
'<td><button type="button" class="btn btn-danger delete-row">Delete</button></td>' +
'</tr>';
document.getElementById("price-matrix-body").insertAdjacentHTML('beforeend', newRow);
var quantityInputs = document.querySelectorAll('.quantity-input');
var lastIndex = quantityInputs.length - 1;
quantityInputs[lastIndex].addEventListener('blur', function(event) {
checkQuantity(event, lastIndex);
});
});
document.getElementById("price-matrix-body").addEventListener("click", function(event) {
if (event.target.classList.contains("delete-row")) {
event.preventDefault();
var rows = document.querySelectorAll("#price-matrix-body tr");
if (rows.length > 1) {
event.target.closest("tr").remove();
} else {
alert("At least one row is required.");
}
}
});
function checkQuantity(event, index) {
var currentInput = event.target;
var previousRow = currentInput.parentNode.parentNode.previousElementSibling;
var nextRow = currentInput.parentNode.parentNode.nextElementSibling;
if (previousRow !== null) {
var previousQuantityInput = previousRow.querySelector('input[name="quantity[]"]');
var currentQuantity = parseInt(currentInput.value);
var previousQuantity = parseInt(previousQuantityInput.value);
if (currentQuantity <= previousQuantity) {
alert("Quantity must be greater than the previous row's quantity.");
currentInput.value = previousQuantity + 1;
}
}
if (nextRow !== null) {
var nextQuantityInput = nextRow.querySelector('input[name="quantity[]"]');
var nextQuantity = parseInt(nextQuantityInput.value);
if (currentQuantity >= nextQuantity) {
alert("Quantity must be less than the next row's quantity.");
currentInput.value = nextQuantity - 1;
}
}
}
function checkExistingQuantity(row) {
var currentInput = row.querySelector('input[name="quantity[]"]');
var allRows = document.querySelectorAll("#price-matrix-body tr");
var currentIndex = Array.from(allRows).indexOf(row);
for (var i = currentIndex - 1; i >= 0; i--) {
var previousRow = allRows[i];
var previousQuantityInput = previousRow.querySelector('input[name="quantity[]"]');
var currentQuantity = parseInt(currentInput.value);
var previousQuantity = parseInt(previousQuantityInput.value);
if (currentQuantity <= previousQuantity) {
alert("Quantity must be greater than the previous row's quantity.");
currentInput.value = previousQuantity + 1;
return;
}
}
var nextRow = allRows[currentIndex + 1];
if (nextRow !== undefined) {
var nextQuantityInput = nextRow.querySelector('input[name="quantity[]"]');
var nextQuantity = parseInt(nextQuantityInput.value);
if (currentQuantity >= nextQuantity) {
alert("Quantity must be less than the next row's quantity.");
currentInput.value = nextQuantity - 1;
return;
}
}
}
document.getElementById("price-matrix-body").addEventListener("blur", function(event) {
if (event.target.tagName === "INPUT" && event.target.name === "quantity[]") {
checkExistingQuantity(event.target.closest("tr"));
}
}, true);
// 3-20-24 raymart added function for price matrix
</script>
<script>
function onload() {
@ -1133,6 +1254,7 @@ $vendorId = $_SESSION["vendorId"];
// 03-14-2024 Jun Jihad modified this block of code to properly upload images with comma in the filename
Promise.all(promises)
.then(filenames => {
// const updatedImages = existingImages.concat(filenames.map(filename => `https://<?php echo $_SESSION["data_endpoint"]; ?>/images/storage/product_uploads/${filename}`));
const updatedImages = existingImages.concat(filenames.map(filename => `https://<?php echo $_SESSION["data_endpoint"]; ?>/images/storage/product_uploads/${encodeURIComponent(filename)}`));
if (!Array.isArray(updatedImages)) {

View File

@ -0,0 +1,73 @@
<?php
include "../functions.php";
$productId = $_SESSION['productId'];
$vendorId = $_SESSION['vendorId'];
//echo '$vendorId: '.$vendorId.'<br>';
$productName = $_POST['product_name'];
//echo '$productName: '.$productName.'<br>';
$stock = $_POST['stock'];
// 02-19-2024 Jun Jihad Promo Field Product Upload Vendor Page Action
$ndd = isset($_POST['promo']['next-day-delivery']) ? $_POST['promo']['next-day-delivery'] : 'No';
$sdd = isset($_POST['promo']['same-day-delivery']) ? $_POST['promo']['same-day-delivery'] : 'No';
$freeSf = isset($_POST['promo']['free-shipping']) ? $_POST['promo']['free-shipping'] : 'No';
// 02-19-2024 Jun Jihad Promo Field Product Upload Vendor Page Action
$minimumOrder = $_POST['minimum_order'];
//echo '$stock: '.$stock.'<br>';
$price = $_POST['regular_price'];
//echo '$price: '.$price.'<br>';
$salePrice = $_POST['sale_price'];
//echo '$salePrice: '.$salePrice.'<br>';
$weight = $_POST['weight'];
$length = $_POST['length'];
$width = $_POST['width'];
$height = $_POST['height'];
$description = $_POST['product_description'];
$specifications = $_POST['specifications'];
//echo '$specifications: '.$specifications.'<br>';
$productType = $_POST['product_type'];
$productCategory = $_POST['product_category'];
$productSf = $_POST['shipping_fee'];
$productStatus = $_POST['status'];
//echo '$productType: '.$productType.'<br>';
$parentId = $_POST['parent_id'];
//echo '$parentId: '.$parentId.'<br>';
$size = $_POST['size'];
//echo '$size: '.$size.'<br>';
$color = $_POST['color'];
//echo '$color: '.$color.'<br>';
$material = $_POST['material'];
//echo '$material: '.$material.'<br>';
$token = $_SESSION["token"];
$response = editProduct(
$productId,
$vendorId,
$productName,
$stock,
$ndd,
$sdd,
$freeSf,
$price,
$salePrice,
$weight,
$length,
$width,
$height,
$description,
$specifications,
$productType,
$productCategory,
$productSf,
$productStatus,
$parentId,
$minimumOrder,
$color,
$material,
$size,
$priceMatrix,
$token);
$array = json_decode($response, true);
$_SESSION['prodictId'] = $array['_id'];
header("location: vendor-product-search.php");
?>

View File

@ -0,0 +1,726 @@
<?php
include "../functions.php";
$_SESSION["url"] = $_SERVER['REQUEST_URI'];
$vendorId = $_SESSION["vendorId"];
if ($_SESSION["userId"] <> "") {
$_SESSION["isLoggedIn"] = true;
} else {
$_SESSION["isLoggedIn"] = false;
header("location: login.php");
exit();
}
if ($_SESSION["user_type"] != "admin") {
header("location: login.php?alert=Only admins allowed here!");
}
if (isset($_GET['id'])) {
$_SESSION['productId'] = $_GET['id'];
}
$result = getProduct($_SESSION['productId']);
$array = json_decode($result, true);
$_SESSION["vendorId"] = $array['vendor_api_id'];
$vendorId = $_SESSION["vendorId"];
?>
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="oBanana B2B - Admin Dashboard">
<title>oBanana B2B - Admin Dashboard</title>
<!-- GOOGLE FONTS -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@200;300;400;500;600;700;800&family=Poppins:wght@300;400;500;600;700;800;900&family=Roboto:wght@400;500;700;900&display=swap" rel="stylesheet">
<link href="https://cdn.materialdesignicons.com/4.4.95/css/materialdesignicons.min.css" rel="stylesheet" />
<!-- PLUGINS CSS STYLE -->
<link href="assets/plugins/simplebar/simplebar.css" rel="stylesheet" />
<!-- ekka CSS -->
<link id="ekka-css" rel="stylesheet" href="assets/css/ekka.css" />
<!-- FAVICON -->
<link href="assets/img/favicon.png" rel="shortcut icon" />
<link href="https://cdn.quilljs.com/1.3.6/quill.snow.css" rel="stylesheet">
</head>
<body class="ec-header-fixed ec-sidebar-fixed ec-sidebar-dark ec-header-light" id="body" onload="onload()">
<!-- WRAPPER -->
<div class="wrapper">
<!-- LEFT MAIN SIDEBAR -->
<?php include 'left-main-sidebar.php' ?>
<!-- HEADER -->
<?php include 'header.php' ?>
<!-- PAGE WRAPPER -->
<div class="ec-page-wrapper">
<!-- CONTENT WRAPPER -->
<div class="ec-content-wrapper">
<div class="content">
<div class="breadcrumb-wrapper d-flex align-items-center justify-content-between">
<div>
<h1>Add Product</h1>
<p class="breadcrumbs"><span><a href="index.php">Home</a></span>
<span><i class="mdi mdi-chevron-right"></i></span><span><a href="vendor-card.php">Vendors</a></span>
<span><i class="mdi mdi-chevron-right"></i></span><span><a href="vendor-profile.php">Profile</a></span>
<span><i class="mdi mdi-chevron-right"></i></span><span><a href="vendor-product-grid.php">Products</a></span>
<span><i class="mdi mdi-chevron-right"></i></span>Add
</p>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="card card-default">
<div class="card-header card-header-border-bottom">
<h2>Add Product</h2>
</div>
<div class="card-body">
<div class="row ec-vendor-uploads">
<div class="col-lg-4">
<div class="ec-vendor-img-upload">
<div class="ec-vendor-main-img">
<div class="avatar-upload">
<div class="avatar-edit">
<input type='file' id="imageUpload" class="ec-image-upload" accept=".png, .jpg, .jpeg" multiple onchange="uploadProductImage()" />
<label for="imageUpload"><img src="assets/img/icons/edit.svg" class="svg_img header_svg" alt="edit" /></label>
</div>
<div class="avatar-preview ec-preview">
<div class="imagePreview ec-div-preview">
<?php
if (isset($array['images'])) {
$image_urls = explode(',', $array['images']);
if (!empty($image_urls)) {
$first_image_url = trim($image_urls[0]);
?>
<img class="ec-image-preview" src="<?php echo $first_image_url; ?>" alt="edit" />
<?php
}
} else {
?>
<img class="ec-image-preview" src="https://upload.wikimedia.org/wikipedia/commons/thumb/6/65/No-Image-Placeholder.svg/495px-No-Image-Placeholder.svg.png?20200912122019" alt="edit" />
<?php
}
?>
</div>
</div>
</div>
<div class="thumb-upload-set colo-md-12">
<?php
if (isset($array['images'])) {
$image_urls = explode(',', $array['images']);
foreach ($image_urls as $index => $image_url) {
$image_url = trim($image_url);
?>
<div class="thumb-upload">
<div class="thumb-edit">
<button class="delete-image-button" onclick="deleteImage('<?php echo $array['_id']; ?>', <?php echo $index; ?>)">
<i class="mdi mdi-delete" style="font-size:16px; color: black; background-color:white; border-radius:3px;"></i>
</button>
</div>
<div class="thumb-preview ec-preview">
<div class="image-thumb-preview">
<img class="" src="<?php echo $image_url; ?>" alt="edit" />
</div>
</div>
</div>
<?php
}
} else {
?>
<div class="thumb-upload">
<div class="thumb-edit">
<input type='file' id="thumbUpload" class="ec-image-upload" accept=".png, .jpg, .jpeg" />
<label for="thumbUpload"><i class="fi-rr-edit"></i></label>
</div>
<div class="thumb-preview ec-preview">
<div class="image-thumb-preview">
<img class="image-thumb-preview ec-image-preview" src="assets/images/product-image/vender-upload-thumb-preview.jpg" alt="edit" />
</div>
</div>
</div>
<?php
}
?>
<script>
function deleteImage(productId, indexToDelete) {
fetch('https://<?php echo $_SESSION["data_endpoint"]; ?>/api/v1/products/' + productId)
.then(response => response.json())
.then(product => {
let imagesArray = product.images.split(',');
if (indexToDelete >= 0 && indexToDelete < imagesArray.length) {
imagesArray.splice(indexToDelete, 1);
}
const updatedImages = imagesArray.join(',');
const payload = {
images: updatedImages,
};
const token = '<?php echo $_SESSION["token"] ?>';
return fetch('https://<?php echo $_SESSION["data_endpoint"]; ?>/api/v1/products/' + productId, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token,
},
body: JSON.stringify(payload),
});
})
.then(response => {
if (response.ok) {
console.log('Image deleted successfully');
location.reload();
} else {
console.error('Image deletion failed');
}
})
.catch(error => {
console.error('Error during image deletion:', error);
});
}
</script>
</div>
</div>
</div>
</div>
<div class="col-lg-8">
<div class="ec-vendor-upload-detail">
<form action="vendor-edit-product-action.php" method="post">
<div class="row g-3">
<div class="col-md-6">
<label for="inputEmail4" class="form-label">Product name</label>
<input type="text" class="form-control" id="inputEmail4" name="product_name" value="<?php echo $array['product_name']; ?>">
</div>
<div class="col-md-6">
<label class="form-label">Product Type</label>
<select id="Categories" class="form-select" name="product_type" onchange="variables()">
<option value="simple" <?php if ($array['product_type'] == 'simple') {
echo 'selected';
} ?>>Simple</option>
<option value="variable" <?php if ($array['product_type'] == 'variable') {
echo 'selected';
} ?>>Variable</option>
<option value="variation" <?php if ($array['product_type'] == 'variation') {
echo 'selected';
} ?>>Variation</option>
</select>
</div>
</div>
<div class="row collapse" id="variation">
<div class="col-md-6">
<label class="form-label">Parent Id</label>
<select class="form-select" name="parent_id" id="variation-type-select">
<!-- Your variation options go here -->
<option value="" disabled selected>Select Product</option>
<?php
$products = productListVendor($vendorId);
foreach ($products as $product) {
// Check if the product type matches the selected product type
if ($product['product_type'] == "variable") {
if ($product['_id'] == $array['parent_id']) {
echo '<option value="' . $product['_id'] . '" selected >' . $product['product_name'] . '</option>';
} else {
echo '<option value="' . $product['_id'] . '">' . $product['product_name'] . '</option>';
}
}
}
?>
</select>
<!-- <label class="form-label">Colors</label>
<input type="color" class="form-control form-control-color" id="exampleColorInput1" value="#ff6191" title="Choose your color">
<input type="color" class="form-control form-control-color" id="exampleColorInput2" value="#33317d" title="Choose your color">
<input type="color" class="form-control form-control-color" id="exampleColorInput3" value="#56d4b7" title="Choose your color">
<input type="color" class="form-control form-control-color" id="exampleColorInput4" value="#009688" title="Choose your color"> -->
</div>
<div class="col-md-6">
<label class="form-label">Size</label>
<select class="form-select" name="size" id="size">
<!-- Your variation options go here -->
<option value="">Select Size</option>
<option value="XS" <?php echo ($array['variants'][0]['size'] === 'XS') ? 'selected' : ''; ?>>XS</option>
<option value="S" <?php echo ($array['variants'][0]['size'] === 'S') ? 'selected' : ''; ?>>S</option>
<option value="M" <?php echo ($array['variants'][0]['size'] === 'M') ? 'selected' : ''; ?>>M</option>
<option value="L" <?php echo ($array['variants'][0]['size'] === 'L') ? 'selected' : ''; ?>>L</option>
<option value="XL" <?php echo ($array['variants'][0]['size'] === 'XL') ? 'selected' : ''; ?>>XL</option>
<option value="XXL" <?php echo ($array['variants'][0]['size'] === 'XXL') ? 'selected' : ''; ?>>XXL</option>
<option value="XXXL" <?php echo ($array['variants'][0]['size'] === 'XXXL') ? 'selected' : ''; ?>>XXXL</option>
</select>
<!-- <label class="form-label">Size</label>
<div class="form-checkbox-box">
<div class="form-check form-check-inline">
<input type="checkbox" name="size1" value="size">
<label>S</label>
</div>
<div class="form-check form-check-inline">
<input type="checkbox" name="size1" value="size">
<label>M</label>
</div>
<div class="form-check form-check-inline">
<input type="checkbox" name="size1" value="size">
<label>L</label>
</div>
<div class="form-check form-check-inline">
<input type="checkbox" name="size1" value="size">
<label>XL</label>
</div>
<div class="form-check form-check-inline">
<input type="checkbox" name="size1" value="size">
<label>XXL</label>
</div>
</div> -->
</div>
<div class="col-md-6">
<label for="Color" class="form-label">Color</label>
<input type="text" class="form-control slug-title" id="color" name="color" value="<?php echo $array['variants'][0]['color']; ?>">
</div>
<div class="col-md-6">
<label for="Material" class="form-label">Material</label>
<input type="text" class="form-control slug-title" id="material" name="material" value="<?php echo $array['variants'][0]['material']; ?>">
</div>
</div>
<div class="row">
<div class="col-md-12">
<label for="slug" class="col-12 col-form-label">Slug</label>
<div class="col-12">
<input id="slug" name="slug" class="form-control here set-slug" type="text">
</div>
</div>
<div class="col-md-6">
<label for="weight" class="form-label">Weight(g)</label>
<input type="number" class="form-control slug-title" id="width" name="weight" value="<?php echo $array['weight']; ?>">
</div>
<div class="col-md-6">
<label for="length" class="form-label">Length(cm)</label>
<input type="number" class="form-control slug-title" id="length" name="length" value="<?php echo $array['length']; ?>">
</div>
<div class="col-md-6">
<label for="width" class="form-label">Width(cm)</label>
<input type="number" class="form-control slug-title" id="width" name="width" value="<?php echo $array['width']; ?>">
</div>
<div class="col-md-6">
<!-- <label for="height" class="form-label">Height</label> -->
<!-- raymart edit height -->
<label for="height" class="form-label">Height(cm)</label>
<input type="number" class="form-control slug-title" id="height" name="height" value="<?php echo $array['height']; ?>">
</div>
<div class="col-md-12">
<label class="form-label">Short Description</label>
<textarea class="form-control" name="product_description" id="short-hidden-editor" style="display: none;" rows="2"><?php echo $array['product_description'] ?></textarea>
<div id="short-editor-container" style="height: 200px;"><?php echo $array['product_description'] ?></div>
</div>
<div class="col-md-6">
<label class="form-label">Regular Price <span>( In PHP
)</span></label>
<input type="number" class="form-control" id="price1" name="regular_price" value="<?php echo $array['regular_price'] ?>">
</div>
<div class="col-md-6">
<label class="form-label">Sale Price <span>( In PHP
)</span></label>
<input type="number" class="form-control" id="price2" name="sale_price" value="<?php echo $array['sale_price'] ?>">
</div>
<!-- 3-20-24 raymart added table for price matrix -->
<div class="col-md-12">
<label class="form-label">Price Matrix</label>
<table class="table">
<thead>
<tr>
<th scope="col">Quantity</th>
<th scope="col">Price (PHP)</th>
<th scope="col"></th>
</tr>
</thead>
<tbody id="price-matrix-body">
<?php foreach ($array['price_matrix'][0] as $index => $pair) : ?>
<tr data-row-index="<?php echo $index; ?>">
<td><input type="number" class="form-control" name="quantity[]" value="<?php echo $pair['quantity']; ?>"></td>
<td><input type="number" class="form-control" name="price[]" value="<?php echo $pair['price']; ?>"></td>
<td><button type="button" class="btn btn-danger delete-row">Delete</button></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<button type="button" class="btn btn-secondary" id="add-row">Add Row</button>
</div>
<!-- 3-20-24 raymart added table for price matrix -->
<!-- 02-19-2024 Jun Jihad Promo Field Product Upload Vendor Page -->
<div class="col-md-12" style="margin: 0 0 20px 0;">
<label class="form-label">Promo</label>
<div class="row" justify-content-between>
<div class="col-md-4">
<div class="form-check">
<input type="checkbox" id="nextDayDeliveryCheckbox" name="promo[next-day-delivery]" value="Yes" <?php if ($array['promo'][0]['next-day-delivery'] === "Yes") echo "checked"; ?> style="background-color: blue;">
<label class="form-check-label" for="nextDayDeliveryCheckbox">Next Day Delivery</label>
</div>
</div>
<div class="col-md-4">
<div class="form-check">
<input type="checkbox" id="sameDayDeliveryCheckbox" name="promo[same-day-delivery]" value="Yes" <?php if ($array['promo'][0]['same-day-delivery'] === "Yes") echo "checked"; ?> style="background-color: blue;">
<label class="form-check-label" for="sameDayDeliveryCheckbox">Same Day Delivery</label>
</div>
</div>
<div class="col-md-4">
<div class="form-check">
<input type="checkbox" id="freeShippingCheckbox" name="promo[free-shipping]" value="Yes" <?php if ($array['promo'][0]['free-shipping'] === "Yes") echo "checked"; ?> style="background-color: blue;">
<label class="form-check-label" for="freeShippingCheckbox">Free Shipping</label>
</div>
</div>
</div>
</div>
<!-- 02-19-2024 Jun Jihad Promo Field Product Upload Vendor Page -->
<div class="col-md-6">
<label class="form-label">Stock</label>
<input type="number" class="form-control" id="quantity1" name="stock" value="<?php echo $array['stock'] ?>">
</div>
<div class="col-md-6">
<label class="form-label">Minimum Order</label>
<input type="number" class="form-control" id="minOrder" name="minimum_order" value="<?php echo $array['minimum_order'] ?>">
</div>
<div class="col-md-12">
<label class="form-label">Full Detail</label>
<textarea class="form-control" rows="4" name="specifications" id="hidden-editor" style="display: none;"><?php echo $array['specifications'] ?></textarea>
<div id="editor-container" style="height: 200px;"><?php echo $array['specifications'] ?></div>
</div>
<div class="col-md-6">
<label class="form-label">Product Category</label>
<select class="form-select" name="product_category" id="product_category">
<option value="">Select Category</option>
<option value="Electronics" <?php echo ($array['product_category'] === 'Electronics') ? 'selected' : ''; ?>>Electronics</option>
<option value="Solar" <?php echo ($array['product_category'] === 'Solar') ? 'selected' : ''; ?>>Solar</option>
<option value="E-bike" <?php echo ($array['product_category'] === 'E-bike') ? 'selected' : ''; ?>>E-bike</option>
<option value="E-vehicle" <?php echo ($array['product_category'] === 'E-vehicle') ? 'selected' : ''; ?>>E-Vehicle</option>
<option value="Appliance" <?php echo ($array['product_category'] === 'Appliance') ? 'selected' : ''; ?>>Appliance</option>
<option value="Smart Home" <?php echo ($array['product_category'] === 'Smart Home') ? 'selected' : ''; ?>>Smart Home</option>
<option value="Home" <?php echo ($array['product_category'] === 'Home') ? 'selected' : ''; ?>>Home</option>
<option value="Heavy Equipment" <?php echo ($array['product_category'] === 'Heavy Equipment') ? 'selected' : ''; ?>>Heavy Equipment</option>
<option value="Apparel" <?php echo ($array['product_category'] === 'Apparel') ? 'selected' : ''; ?>>Apparel</option>
<option value="Petcare" <?php echo ($array['product_category'] === 'Petcare') ? 'selected' : ''; ?>>Petcare</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label">Shipping Fee</label>
<input type="number" class="form-control" id="sfee" name="shipping_fee" value="<?php echo $array['shipping_fee'] ?>">
</div>
<div class="col-md-6">
<label class="form-label">Product Status</label>
<select class="form-select" name="status" id="status">
<option value="">Select Product Status</option>
<option value="Active" <?php echo ($array['status'] === 'Active') ? 'selected' : ''; ?>>Active</option>
<option value="Inactive" <?php echo ($array['status'] === 'Inactive') ? 'selected' : ''; ?>>Inactive</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label">Product Tags <span>( Type and
make comma to separate tags )</span></label>
<input type="text" class="form-control" id="group_tag" name="group_tag" value="" placeholder="" data-role="tagsinput" />
</div>
<div class="col-md-12">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div> <!-- End Content -->
</div> <!-- End Content Wrapper -->
<script src="https://cdn.quilljs.com/1.3.6/quill.js"></script>
</div>
</div>
<script>
var quill = new Quill('#editor-container', {
theme: 'snow'
});
quill.clipboard.dangerouslyPasteHTML(document.getElementById('hidden-editor').value);
quill.on('text-change', function() {
document.getElementById('hidden-editor').value = quill.root.innerHTML;
});
var newquill = new Quill('#short-editor-container', {
theme: 'snow'
});
newquill.clipboard.dangerouslyPasteHTML(document.getElementById('short-hidden-editor').value);
newquill.on('text-change', function() {
document.getElementById('short-hidden-editor').value = newquill.root.innerHTML;
});
// 3-20-24 raymart added function for price matrix
document.getElementById("add-row").addEventListener("click", function() {
var newRow = '<tr>' +
'<td><input type="number" class="form-control quantity-input" name="quantity[]"></td>' +
'<td><input type="number" class="form-control" name="price[]"></td>' +
'<td><button type="button" class="btn btn-danger delete-row">Delete</button></td>' +
'</tr>';
document.getElementById("price-matrix-body").insertAdjacentHTML('beforeend', newRow);
var quantityInputs = document.querySelectorAll('.quantity-input');
var lastIndex = quantityInputs.length - 1;
quantityInputs[lastIndex].addEventListener('blur', function(event) {
checkQuantity(event, lastIndex);
});
});
document.getElementById("price-matrix-body").addEventListener("click", function(event) {
if (event.target.classList.contains("delete-row")) {
event.preventDefault();
var rows = document.querySelectorAll("#price-matrix-body tr");
if (rows.length > 1) {
event.target.closest("tr").remove();
} else {
alert("At least one row is required.");
}
}
});
function checkQuantity(event, index) {
var currentInput = event.target;
var previousRow = currentInput.parentNode.parentNode.previousElementSibling;
var nextRow = currentInput.parentNode.parentNode.nextElementSibling;
if (previousRow !== null) {
var previousQuantityInput = previousRow.querySelector('input[name="quantity[]"]');
var currentQuantity = parseInt(currentInput.value);
var previousQuantity = parseInt(previousQuantityInput.value);
if (currentQuantity <= previousQuantity) {
alert("Quantity must be greater than the previous row's quantity.");
currentInput.value = previousQuantity + 1;
}
}
if (nextRow !== null) {
var nextQuantityInput = nextRow.querySelector('input[name="quantity[]"]');
var nextQuantity = parseInt(nextQuantityInput.value);
if (currentQuantity >= nextQuantity) {
alert("Quantity must be less than the next row's quantity.");
currentInput.value = nextQuantity - 1;
}
}
}
function checkExistingQuantity(row) {
var currentInput = row.querySelector('input[name="quantity[]"]');
var allRows = document.querySelectorAll("#price-matrix-body tr");
var currentIndex = Array.from(allRows).indexOf(row);
for (var i = currentIndex - 1; i >= 0; i--) {
var previousRow = allRows[i];
var previousQuantityInput = previousRow.querySelector('input[name="quantity[]"]');
var currentQuantity = parseInt(currentInput.value);
var previousQuantity = parseInt(previousQuantityInput.value);
if (currentQuantity <= previousQuantity) {
alert("Quantity must be greater than the previous row's quantity.");
currentInput.value = previousQuantity + 1;
return;
}
}
var nextRow = allRows[currentIndex + 1];
if (nextRow !== undefined) {
var nextQuantityInput = nextRow.querySelector('input[name="quantity[]"]');
var nextQuantity = parseInt(nextQuantityInput.value);
if (currentQuantity >= nextQuantity) {
alert("Quantity must be less than the next row's quantity.");
currentInput.value = nextQuantity - 1;
return;
}
}
}
document.getElementById("price-matrix-body").addEventListener("blur", function(event) {
if (event.target.tagName === "INPUT" && event.target.name === "quantity[]") {
checkExistingQuantity(event.target.closest("tr"));
}
}, true);
// 3-20-24 raymart added function for price matrix
</script>
<script>
function onload() {
variables();
}
function variables() {
var x = document.getElementById('Categories').value;
var y = document.getElementById('variation');
if (x != 'variation') {
y.style.visibility = 'hidden';
y.classList.add('collapse');
} else {
y.style.visibility = 'visible';
y.classList.remove('collapse');
}
}
function uploadProductImage() {
var productId = '<?php echo $_SESSION['productId'] ?>';
var fileInput = document.getElementById('imageUpload');
var files = fileInput.files;
if (files.length > 0) {
var promises = [];
var existingImages = [];
fetch('https://<?php echo $_SESSION["data_endpoint"]; ?>/api/v1/products/' + productId)
.then(response => response.json())
.then(product => {
existingImages = product.images || [];
existingImages = Array.isArray(existingImages) ? existingImages : [existingImages];
existingImages = existingImages.filter(image => image);
})
.catch(error => {
console.error('Error fetching existing images:', error);
});
for (let i = 0; i < files.length; i++) {
const file = files[i];
const reader = new FileReader();
const promise = new Promise((resolve, reject) => {
reader.onload = function(e) {
const img = new Image();
img.onload = function() {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
const maxWidth = 1200;
const maxHeight = 1000;
const aspectRatio = img.width / img.height;
let newWidth = img.width;
let newHeight = img.height;
if (img.width > maxWidth) {
newWidth = maxWidth;
newHeight = newWidth / aspectRatio;
}
if (newHeight > maxHeight) {
newHeight = maxHeight;
newWidth = newHeight * aspectRatio;
}
canvas.width = newWidth;
canvas.height = newHeight;
ctx.drawImage(img, 0, 0, newWidth, newHeight);
canvas.toBlob((blob) => {
const resizedFile = new File([blob], file.name, {
type: 'image/jpeg'
});
var formData = new FormData();
formData.append('image_id', productId);
formData.append('category', 'product');
formData.append('image', resizedFile);
fetch('https://<?php echo $_SESSION["data_endpoint"]; ?>/api/v1/upload_image', {
method: 'POST',
body: formData
})
.then(response => {
if (response.ok) {
return response.json();
} else {
console.error('File upload failed');
reject(new Error('File upload failed'));
}
})
.then(result => {
const filename = result.filename;
resolve(filename);
})
.catch(error => {
console.error('Error during fetch:', error);
reject(error);
});
}, 'image/jpeg');
};
img.src = e.target.result;
};
reader.readAsDataURL(file);
});
promises.push(promise);
}
// 03-14-2024 Jun Jihad modified this block of code to properly upload images with comma in the filename
Promise.all(promises)
.then(filenames => {
// const updatedImages = existingImages.concat(filenames.map(filename => `https://<?php echo $_SESSION["data_endpoint"]; ?>/images/storage/product_uploads/${filename}`));
const updatedImages = existingImages.concat(filenames.map(filename => `https://<?php echo $_SESSION["data_endpoint"]; ?>/images/storage/product_uploads/${encodeURIComponent(filename)}`));
if (!Array.isArray(updatedImages)) {
console.error('Updated images is not an array:', updatedImages);
throw new Error('Updated images is not an array');
}
const imagesString = updatedImages.join(',');
const payload = {
images: imagesString,
};
const token = '<?php echo $_SESSION["token"] ?>';
return fetch('https://<?php echo $_SESSION["data_endpoint"]; ?>/api/v1/products/' + productId, {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + token,
},
body: JSON.stringify(payload)
});
})
// 03-14-2024 Jun Jihad modified this block of code to properly upload images with comma in the filename
.then(response => {
if (response.ok) {
console.log('Images uploaded successfully');
location.reload();
} else {
console.error('Image upload failed');
}
})
.catch(error => {
console.error('Error during image upload:', error);
});
}
}
</script>
<!-- Common Javascript -->
<script src="assets/plugins/jquery/jquery-3.5.1.min.js"></script>
<script src="assets/js/bootstrap.bundle.min.js"></script>
<script src="assets/plugins/tags-input/bootstrap-tagsinput.js"></script>
<script src="assets/plugins/simplebar/simplebar.min.js"></script>
<script src="assets/plugins/jquery-zoom/jquery.zoom.min.js"></script>
<script src="assets/plugins/slick/slick.min.js"></script>
<!-- Option Switcher -->
<script src="assets/plugins/options-sidebar/optionswitcher.js"></script>
<!-- Ekka Custom -->
<script src="assets/js/ekka.js"></script>
</body>
</html>

View File

@ -785,7 +785,7 @@ $vendorSearchResult = $_SESSION["vendorSearchResult"];
console.log("Session Token:", sessionToken);
login(email, password, function() {
// Removed the call to updateSessionToken
window.open("product-edit.php?id=" + productId, "_self");
window.open("vendor-edit-product.php?id=" + productId, "_self");
});
}