File "add_item.php"
Full path: /home/atrmarke/public_html/atrdemolive.site/bcopy/pages/add_item.php
File
size: 0.05 KB (53.78 KB bytes)
MIME-type: text/x-php
Charset: utf-8
Download Open Edit Advanced Editor Back
<?php
ob_start();
if (isset($_SESSION['user_name']) && isset($_SESSION['user_role']) && isset($_SESSION['outlet_name']) && isset($_SESSION['outlet_address'])) {
$userName = $_SESSION['user_name'];
$userRole = $_SESSION['user_role'];
$outlet_address = $_SESSION['outlet_address'];
$outlet_name = $_SESSION['outlet_name'];
}
$order_id= $_GET["order_id"];
if (isset($_GET['query'])) {
$query = $connection->real_escape_string($_GET['query']);
$sql = "SELECT product_id, product_name, retail_price, trade_price, supplier, company, product_unit, quantity FROM products WHERE product_name LIKE '%$query%'";
$result = $connection->query($sql);
$suggestions = "";
while ($row = $result->fetch_assoc()) {
$suggestions .= "<div class='dropdown-item' data-product-id='" . $row['product_id'] . "' data-product-quantity='" . $row['quantity'] . "' data-retail-price='" . $row['retail_price'] . "' data-trade-price='" . $row['trade_price'] . "' data-supplier='" . $row['supplier'] . "' data-company='" . $row['company'] . "' data-product-unit='" . $row['product_unit'] . "'>" . $row['product_name'] . "</div>";
}
echo $suggestions;
exit;
}
if (isset($_GET['customer_name'])) {
$customerName = $connection->real_escape_string($_GET['customer_name']);
$sql = "SELECT cr_name, shop_name, route, cr_address, phone_number FROM credit_note WHERE shop_name LIKE '%$customerName%' LIMIT 5";
$result = $connection->query($sql);
$suggestions = "";
while ($row = $result->fetch_assoc()) {
$suggestions .= "<div class='dropdown-item' data-customer-name='" . $row['shop_name'] . "' data-customer-id='" . $row['route'] . "' data-customer-phone='" . $row['phone_number'] . "'>" . $row['shop_name'] . "</div>";
}
echo $suggestions;
exit;
}
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
if (isset($_GET['customerQuery'])) {
$customerQuery = $connection->real_escape_string($_GET['customerQuery']);
$sql = "SELECT DISTINCT customer_name FROM log_user_sales WHERE LOWER(customer_name) LIKE LOWER('%$customerQuery%') LIMIT 5"; // case-insensitive search
$result = $connection->query($sql);
$suggestions = "";
if ($result) {
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$suggestions .= "<div class='dropdown-item select-customer'>" . htmlspecialchars($row['customer_name']) . "</div>";
}
} else {
$suggestions = "<div class='dropdown-item text-danger'>No customers found</div>";
}
} else {
echo "<div class='dropdown-item text-danger'>Error fetching customers: " . $connection->error . "</div>";
}
echo $suggestions;
exit;
}
if (isset($_GET['productQuery']) && isset($_GET['customer_name2'])) {
$productQuery = $connection->real_escape_string($_GET['productQuery']);
$customerName2 = $connection->real_escape_string($_GET['customer_name2']);
$sql = "
SELECT DISTINCT product_name, product_price, order_id
FROM log_user_sales
WHERE LOWER(customer_name) = LOWER('$customerName2')
AND LOWER(product_name) LIKE LOWER('%$productQuery%')
LIMIT 5
";
$result = $connection->query($sql);
$suggestions = "";
if ($result) {
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$suggestions .= "<div class='dropdown-item select-product'>" . htmlspecialchars($row['product_name']) . "</div>";
}
} else {
$suggestions = "<div class='dropdown-item text-danger'>No products found for this customer</div>";
}
} else {
echo "<div class='dropdown-item text-danger'>Error fetching products: " . $connection->error . "</div>";
}
echo $suggestions;
exit;
}
if (isset($_GET['productInput2']) && isset($_GET['customer_name2'])) {
$productName = $connection->real_escape_string($_GET['productInput2']);
$customerName2 = $connection->real_escape_string($_GET['customer_name2']);
$sql = "
SELECT product_name, product_price, order_id
FROM log_user_sales
WHERE LOWER(customer_name) = LOWER('$customerName2')
AND LOWER(product_name) = LOWER('$productName')
LIMIT 1
";
$result = $connection->query($sql);
$productDetails = "";
if ($result) {
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$productDetails .= "<tr><td>" . htmlspecialchars($row['order_id']) . "</td><td>" . htmlspecialchars($row['product_name']) . "</td><td>" . htmlspecialchars($row['product_price']) . "</td></tr>";
}
} else {
$productDetails = "<tr><td colspan='3'>No product details found</td></tr>";
}
} else {
$productDetails = "<tr><td colspan='3'>Error fetching product details: " . $connection->error . "</td></tr>";
}
echo $productDetails;
exit;
}
}
$user = $userName;
$role = $userRole;
$outlet = $outlet_name;
$address = $outlet_address;
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST["bill"])) {
if ($connection->connect_error) {
die("Connection failed: " . $connection->connect_error);
}
$productData = json_decode($_POST['productData'], true);
$orderId = $_POST["orderid"];
$paidBy = $_POST['method'];
$discount_amount = $_POST["bill_amount"];
$discounted = $_POST["discount_amount"];
$discount_per = $_POST["discount_percent"];
$cash_amount = $_POST["cash_received"];
$change_amount = $_POST["cash_return"];
$customerName = $_POST["customer_name"];
$customerPhone = $_POST["customer_phone"];
$customer_type = $_POST["customer_type"];
$customer_id = $_POST["customer_id"];
$r_order_id = $_POST["r_order_id"];
$bill_no = $_POST["bill_no"];
$date_time = date("Y-m-d");
foreach ($productData as $product) {
$productId = $product['productId'];
$productName = $product['description'];
$productPrice = $product['pricePerUnit'];
$tradePrice = $product['tradePrice'];
$productQuantity = $product['quantity'];
$productTotal = $product['totalPrice'];
$discount = $product['discountPercentage'];
$tax = $product['tax'];
$netAmount = $product['netAmount'];
$supplierName = $product['supplier'];
$company = $product['company'];
$sale_cost = $tradePrice * $productQuantity;
$tp = $sale_cost;
$sql = "INSERT INTO log_user_sales (
bill_no,
product_id,
supplier_name,
company,
product_name,
product_price,
trade_price,
product_quantity,
product_total,
bonus,
discount,
tax,
net_amount,
total_amount,
paid_by,
sale_cost,
customer_id,
customer_type,
customer_name,
customer_phone,
discount_amount,
discounted,
discount_per,
cash_amount,
change_amount,
order_id,
r_order_id,
outlet_name,
login_user,
user_role,
outlet_address,
date_time
) VALUES (
'$bill_no',
'$productId',
'$supplierName',
'$company',
'$productName',
'$productPrice',
'$tradePrice',
'$productQuantity',
'$productTotal',
'',
'$discount',
'$tax',
'$netAmount',
'$productTotal',
'$paidBy',
'$sale_cost',
'$customer_id',
'$customer_type',
'$customerName',
'$customerPhone',
'$discount_amount',
'$discounted',
'$discount_per',
'$cash_amount',
'$change_amount',
'$orderId',
'$r_order_id',
'$outlet',
'$user',
'$role',
'$address',
'$date_time'
)";
if ($connection->query($sql) !== TRUE) {
echo "Error: " . $sql . "<br>" . $connection->error;
ob_end_flush();
exit;
}
// Update product quantity based on payment type
$updateSql = "UPDATE products SET quantity = quantity - $productQuantity, total_amount = total_amount - $tp WHERE product_id = '$productId'";
if ($connection->query($updateSql) !== TRUE) {
throw new Exception("Error updating product quantity: " . $connection->error);
}
$updateSqlt = "UPDATE log_user_sales SET discount_amount = discount_amount + $discount_amount WHERE order_id = '$orderId'";
if ($connection->query($updateSqlt) !== TRUE) {
throw new Exception("Error updating product quantity: " . $connection->error);
}
}
ob_end_clean();
echo "<script type='text/javascript'>window.location.href = 'order_detail_v.php';</script>";
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST["refund"])) {
if ($connection->connect_error) {
die("Connection failed: " . $connection->connect_error);
}
$productData = json_decode($_POST['productData'], true);
$paidBy = $_POST["method"];
$status = 'Refund';
$discount_amount = $_POST["bill_amount"];
$discounted = $_POST["discount_amount"];
$discount_per = $_POST["discount_percent"];
$cash_amount = $_POST["cash_received"];
$change_amount = $_POST["cash_return"];
$customerName = $_POST["customer_name"];
$customerPhone = $_POST["customer_phone"];
$customer_type = $_POST["customer_type"];
$customer_id = $_POST["customer_id"];
$r_order_id = $_POST["r_order_id"];
$bill_no = $_POST["bill_no"];
$date_time = date("Y-m-d");
$orderId = $r_order_id;
foreach ($productData as $product) {
$productId = $product['productId'];
$productName = $product['description'];
$productPrice = $product['pricePerUnit'];
$tradePrice = $product['tradePrice'];
$productQuantity = $product['quantity'];
$productTotal = $product['totalPrice'];
$discount = $product['discountPercentage'];
$tax = $product['tax'];
$netAmount = $product['netAmount'];
$supplierName = $product['supplier'];
$company = $product['company'];
// Calculate the sale cost to add to total_amount on refund
$refundAmount = $tradePrice * $productQuantity; // Total amount for the refund
// Insert refund entry into log_user_sales
$sql = "INSERT INTO log_user_sales (
bill_no,
product_id,
supplier_name,
company,
product_name,
product_price,
trade_price,
product_quantity,
product_total,
bonus,
discount,
tax,
net_amount,
total_amount,
paid_by,
sale_cost,
customer_id,
customer_type,
customer_name,
customer_phone,
discount_amount,
discounted,
discount_per,
cash_amount,
change_amount,
order_id,
r_order_id,
status,
outlet_name,
login_user,
user_role,
outlet_address,
date_time
) VALUES (
'$bill_no',
'$productId',
'$supplierName',
'$company',
'$productName',
'$productPrice',
'$tradePrice',
'-$productQuantity', /* Negative quantity for logging refund in log_user_sales */
'$productTotal',
'',
'$discount',
'$tax',
'$netAmount',
'$productTotal',
'$paidBy',
'$refundAmount',
'$customer_id',
'$customer_type',
'$customerName',
'$customerPhone',
'$discount_amount',
'$discounted',
'$discount_per',
'$cash_amount',
'$change_amount',
'$orderId',
'$r_order_id',
'$status',
'$outlet',
'$user',
'$role',
'$address',
'$date_time'
)";
if ($connection->query($sql) !== TRUE) {
echo "Error: " . $sql . "<br>" . $connection->error;
ob_end_flush();
exit;
}
// Update the products table to increase both quantity and total_amount for the refund
$updateSql = "UPDATE products
SET quantity = quantity + $productQuantity,
total_amount = total_amount + $refundAmount
WHERE product_id = '$productId'";
if ($connection->query($updateSql) !== TRUE) {
throw new Exception("Error updating product quantity: " . $connection->error);
}
}
ob_end_clean();
echo "<script type='text/javascript'>window.location.href = 'add_item.php';</script>";
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST["hold"])) {
if ($connection->connect_error) {
die("Connection failed: " . $connection->connect_error);
}
$productData = json_decode($_POST['productData'], true);
$orderId = uniqid("ORDER");
$paidBy = $_POST['method'];
$discount_amount = $_POST["bill_amount"];
$discounted = $_POST["discount_amount"];
$discount_per = $_POST["discount_percent"];
$cash_amount = $_POST["cash_received"];
$change_amount = $_POST["cash_return"];
$customerName = $_POST["customer_name"];
$customerPhone = $_POST["customer_phone"];
$customer_type = $_POST["customer_type"];
$customer_id = $_POST["customer_id"];
$r_order_id = $_POST["r_order_id"];
$date_time = date("Y-m-d");
foreach ($productData as $product) {
$productId = $product['productId'];
$productName = $product['description'];
$productPrice = $product['pricePerUnit'];
$tradePrice = $product['tradePrice'];
$productQuantity = $product['quantity'];
$productTotal = $product['totalPrice'];
$discount = $product['discountPercentage'];
$tax = $product['tax'];
$netAmount = $product['netAmount'];
$supplierName = $product['supplier'];
$company = $product['company'];
$sale_cost = (int)$tradePrice * (int)$productQuantity;
$sql = "INSERT INTO pay_hold (
product_id,
supplier_name,
company,
product_name,
product_price,
trade_price,
product_quantity,
product_total,
bonus,
discount,
tax,
net_amount,
total_amount,
paid_by,
sale_cost,
customer_id,
customer_type,
customer_name,
customer_phone,
discount_amount,
discounted,
discount_per,
cash_amount,
change_amount,
order_id,
outlet_name,
login_user,
user_role,
outlet_address,
date_time
) VALUES (
'$productId',
'$supplierName',
'$company',
'$productName',
'$productPrice',
'$tradePrice',
'$productQuantity',
'$productTotal',
'',
'$discount',
'$tax',
'$netAmount',
'$productTotal',
'$paidBy',
'$sale_cost',
'$customer_id',
'$customer_type',
'$customerName',
'$customerPhone',
'$discount_amount',
'$discounted',
'$discount_per',
'$cash_amount',
'$change_amount',
'$orderId',
'$outlet',
'$user',
'$role',
'$address',
'$date_time'
)";
if ($connection->query($sql) !== TRUE) {
echo "Error: " . $sql . "<br>" . $connection->error;
ob_end_flush();
exit;
}
}
ob_end_clean();
echo "<script type='text/javascript'>window.location.href = 'add_item.php';</script>";
}
ob_end_flush();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Almas Copy House
</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<link href="https://fonts.googleapis.com/css2?family=Quicksand:wght@200;300;400;500;600;700&display=swap" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
body {
font-family: 'Quicksand', sans-serif;
}
#table-container-wrapper {
max-height: 390px;
overflow-y: auto;
}
.bg {
background: linear-gradient(270deg, #060606, #0A4657);
}
.input-group-text {
font-weight: 600;
font-size: 11px;
}
.in_form {
height: 30px;
font-size: 13px;
border-color: #0A5064;
}
label {
font-size: 13.5px;
font-weight: 700;
}
.input-group-text {
font-weight: 600;
font-size: 11px;
width: 73px;
display:
}
.dropdown-menu {
max-height: 200px;
overflow-y: auto;
position: absolute;
z-index: 1000;
width: 100%;
}
.input-group {
position: relative;
}
.dropdown-item.active, .dropdown-item:active {
color: #fff;
text-decoration: none;
background-color: #0A5064;
}
.form-control{
font-weight:700;
}
tr{
font-weight:700;
}
</style>
</head>
<body>
<div class="container-fluid">
<div class="row bg">
<div class="col-sm-3 " style="width:100%; height:69px;">
<img src="../img/s.png" style="margin-top:5px;" width="76" height="70">
</div>
<div class="col-sm-6">
<h3 class="mb-4" style="color:#fff; font-weight:700; text-align:center; text-transform:uppercase;line-height:60px;">
Almas Copy House
</h3>
</div>
<div class="col-sm-3">
<a href="addproduct.php" class="btn btn-light" style="margin-top:20px; float:right;" >Back</a>
</div>
</div>
</div>
<div class="container-fluid">
<form action="add_item.php" method="post" enctype="multipart/form-data">
<div class="row">
<div class="col-sm-3" style="background:#F0F0F0; padding:10px; border:1px solid #CCC;">
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text bg-dark text-white">Product</span>
</div>
<input type="text" class="form-control" id="productInput" placeholder="Start typing a product name..." autocomplete="off">
<div class="dropdown-menu" id="suggestions"></div>
</div>
<hr>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text bg-dark text-white">Quantity</span>
</div>
<input type="text" id="quantity" name="quantity" class="form-control" placeholder="">
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text bg-dark text-white">Price / Unit</span>
</div>
<input type="text" id="retail_price" name="retail_price" class="form-control" placeholder="">
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text bg-dark text-white">Total Price</span>
</div>
<input type="text" id="total_amount" name="total_amount" class="form-control" placeholder="" readonly>
<div class="input-group-prepend">
<span class="input-group-text bg-dark text-white">-/ PKR</span>
</div>
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text bg-dark text-white">Dis PKR</span>
</div>
<input type="text" id="percentage" name="percentage" class="form-control" placeholder="">
</div>
<div class="input-group mb-3">
<div class="input-group-prepend">
<span class="input-group-text bg-dark text-white">Total Price</span>
</div>
<input type="text" id="trade_price" name="trade_price" class="form-control" placeholder="" readonly>
</div>
<br>
<button type="button" class="form-control btn btn-dark" id="makeEntry">Make Entry</button>
<hr>
<!--<h3 class="text-center" style="font-size:18px; font-weight:700; padding:13px; width:100%; background:#0A4657;color:#fff;">History</h3>-->
<div class="form-group position-relative">
<!--<label for="customer_name2">Customer Name:</label>-->
<input type="hidden" id="customer_name2" class="form-control" placeholder="Type customer name..." style="font-weight:700; color:#000;">
<div id="customerSuggestions" class="dropdown-menu"></div>
</div>
<!-- Product Input -->
<div class="form-group position-relative">
<!--<label for="productInput2">Product Name:</label>-->
<input type="hidden" id="productInput2" class="form-control" placeholder="Type product name..." style="font-weight:700; color:#000;">
<div id="productSuggestions" class="dropdown-menu"></div>
</div>
<!-- Product Details Table -->
<table class="table table-bordered mt-4 text-center bg-white">
<!--<thead>-->
<!--<tr class="bg-dark text-white">-->
<!-- <th>Order ID</th>-->
<!-- <th>Product</th>-->
<!-- <th>Price</th>-->
<!--</tr>-->
<!--</thead>-->
<tbody id="productTableBody"></tbody>
</table>
<!--<a href="view_hold.php"><button type="button" class="form-control btn btn-dark" >View Hold Bill</button></a>
<hr>
<button type="button" class="form-control btn btn-dark" onclick="location.reload();">Refresh</button>-->
</div>
<?php
?>
<div class="col-sm-9">
<div class="row" style="background:#F0F0F0; padding:10px; border:1px solid #CCC;">
<!--<div class="">-->
<!-- <div class="form-group">-->
<!-- <label>Bill No.</label>-->
<!-- <input type="text" name="bill_no" value="<?php echo $newBillNo; ?>" readonly style="background:#0A4657; color:#fff; font-weight:700;" >-->
<!-- </div>-->
<!--</div>-->
<!--<div class="col-sm-2">-->
<!-- <div class="form-group">-->
<!-- <label>Booker</label>-->
<!-- <select style="font-weight:700;" class="form-control in_form" name="customer_type">-->
<!-- <option value="">Select</option>-->
<!-- </select>-->
<!-- </div>-->
<!--</div>-->
<?php
$cs = mysqli_query($connection,"select * from log_user_sales where order_id = '$order_id'");
$rc = mysqli_fetch_array($cs);
?>
<div class="col-sm-3">
<div class="form-group">
<label>Customer Name</label>
<input type="text" id="customer_name" name="customer_name" class="form-control in_form"
value='<?php echo $rc["customer_name"]; ?>' autocomplete="off" readonly>
<div class="dropdown-menu" id="customer_suggestions"></div>
</div>
</div>
<div class="col-sm-3">
<div class="form-group">
<label>Customer Phone</label>
<input type="text" id="customer_phone" name="customer_phone" value='<?php echo $rc["customer_phone"]; ?>' class="form-control in_form" readonly>
</div>
</div>
<div class="col-sm-3">
<div class="form-group">
<label>Customer Address</label>
<input type="text" id="customer_id" name="customer_id" value='<?php echo $rc["customer_id"]; ?>' class="form-control in_form" readonly>
</div>
</div>
<div class="col-sm-3">
<div class="form-group">
<label>Order ID</label>
<input type="text" name="orderid" class="form-control in_form" value="<?php echo $order_id?>" readonly>
<input type="hidden" id="r_order_id" name="r_order_id" class="form-control in_form">
<div id="order_suggestions" class="dropdown-menu" style="display: none;"></div>
</div>
</div>
</div>
<div class="row" style="background:#fff; padding:10px; border:1px solid #CCC;">
<div class="col-sm-12" style="height:450px;">
<table class="table table-borderless table-sm text-center" id="productsTable">
<tr class="text-white text-center" style="background:#0A4657;font-weight:700;">
<td>R.Qty</td>
<td>Item Code</td>
<td>Description</td>
<td>Qty</td>
<td>Unit Price</td>
<td>Amount</td>
<td>% Dis</td>
<td>Tax</td>
<td>Net Amount</td>
<td>Action</td>
</tr>
</table>
</div>
</div>
<div class="row" style="margin-top: -10px;">
<div class="col-sm-12" style="background:#F0F0F0; padding:10px; border:1px solid #CCC;">
<br>
<div class="row">
<div class="col-sm-2">
<div class="form-group">
<label>Total</label>
<input type="number" id="total-input" name="total_input" class="form-control in_form input-height" readonly>
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label>Bill Amount</label>
<input type="text" id="bill-amount" name="bill_amount" class="form-control in_form input-height" required>
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label>Discount Amount</label>
<input type="number" id="discount_amount" name="discount_amount" class="form-control in_form input-height">
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label>Discount %</label>
<input type="number" id="discount_percent" name="discount_percent" class="form-control in_form input-height" readonly>
</div>
</div>
<div class="">
<div class="">
<input type="hidden" id="cash_received" name="cash_received" class="form-control in_form input-height">
</div>
</div>
<div class="">
<div class="">
<input type="hidden" id="cash_return" name="cash_return" class="form-control in_form input-height">
</div>
</div>
<div class="col-sm-2">
<div class="form-group">
<label>Method</label>
<select name="method" id="method" class="form-control in_form">
<option value="credit">Credit</option>
<option value="cash">Cash</option>
<option value="bank1">Bank 1</option>
<option value="bank2">Bank 2 </option>
<option value="bank3">Bank 3</option>
<option value="others">Others</option>
</select>
</div>
</div>
<input type="hidden" id="productData" name="productData">
<div class="col-2">
<div class="form-group">
<button type="submit" name="bill" class="btn btn-dark btn-lg" style="margin-top:20px;font-weight:700;">Add Item</button>
<input type="hidden" id="tax" name="tax" class="form-control in_form input-height" readonly>
</div>
</div>
<div class="col-sm-5">
<hr>
<!--<button type="submit" name="hold" class="btn btn-success btn-sm">Hold Bill</button>-->
<!--<button type="submit" name="refund" class="btn btn-danger btn-sm">Refund</button>-->
</div>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
<script>
$(document).ready(function () {
// Live Search for Customer
$('#customer_name2').on('input', function () {
let customerQuery = $(this).val();
if (customerQuery.length > 1) {
$.ajax({
url: '',
method: 'GET',
data: { customerQuery: customerQuery },
success: function (response) {
if (response.trim() !== "") {
$('#customerSuggestions').html(response).show();
} else {
$('#customerSuggestions').hide();
}
},
error: function () {
$('#customerSuggestions').html('<div class="dropdown-item text-danger">Error fetching results</div>').show();
}
});
} else {
$('#customerSuggestions').hide();
}
});
// Select Customer
$(document).on('click', '.select-customer', function () {
$('#customer_name2').val($(this).text());
$('#customerSuggestions').hide();
});
// Live Search for Product
$('#productInput2').on('input', function () {
let productQuery = $(this).val();
let customerName = $('#customer_name2').val();
if (customerName === "") {
alert('Please select a customer first!');
return;
}
if (productQuery.length > 1) {
$.ajax({
url: '',
method: 'GET',
data: { productQuery: productQuery, customer_name2: customerName },
success: function (response) {
if (response.trim() !== "") {
$('#productSuggestions').html(response).show();
} else {
$('#productSuggestions').hide();
}
},
error: function () {
$('#productSuggestions').html('<div class="dropdown-item text-danger">Error fetching results</div>').show();
}
});
} else {
$('#productSuggestions').hide();
}
});
// Select Product
$(document).on('click', '.select-product', function () {
$('#productInput2').val($(this).text());
$('#productSuggestions').hide();
let productName = $(this).text();
let customerName = $('#customer_name2').val();
$.ajax({
url: '', // Ensure your PHP script is properly loaded
method: 'GET',
data: { productInput2: productName, customer_name2: customerName },
success: function (response) {
$('#productTableBody').html(response); // Update table body with product details
},
error: function () {
$('#productTableBody').html('<tr><td colspan="2">Error fetching product details</td></tr>');
}
});
});
// Hide dropdowns when clicking outside
$(document).click(function (event) {
if (!$(event.target).closest('.form-group').length) {
$('.dropdown-menu').hide();
}
});
});
</script>
<script>
document.addEventListener("DOMContentLoaded", function() {
const generateInvoiceButton = document.querySelector("button[name='bill']");
const refundButton = document.querySelector("button[name='refund']");
generateInvoiceButton.addEventListener("click", function(event) {
const method = document.getElementById("method").value;
const customerName = document.getElementById("customer_name").value.trim();
// Check if method is "credit" and customer name is empty
if (method === "credit" && customerName === "") {
event.preventDefault(); // Prevent form submission
alert("Please fill in the Customer Name for Credit method.");
}
});
refundButton.addEventListener("click", function(event) {
const refundId = document.getElementById("r_order_id").value.trim();
// Check if Refund ID is empty when "Refund" button is clicked
if (refundId === "") {
event.preventDefault(); // Prevent form submission
alert("Please enter a Refund ID.");
}
});
});
</script>
<script>
document.addEventListener("DOMContentLoaded", function() {
let currentFocus = -1;
// Event listener for input field to trigger AJAX request
document.getElementById("r_order_id").addEventListener("input", function() {
var orderIdInput = this.value;
if (orderIdInput.length > 0) {
var xhr = new XMLHttpRequest();
xhr.open("GET", "?order_id=" + encodeURIComponent(orderIdInput), true); // Sends request to the same page
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var suggestions = document.getElementById("order_suggestions");
suggestions.innerHTML = xhr.responseText;
suggestions.style.display = 'block';
}
};
xhr.send();
} else {
document.getElementById("order_suggestions").style.display = 'none';
}
});
// Handle clicking on suggestion items
document.getElementById("order_suggestions").addEventListener("click", function(e) {
if (e.target && e.target.classList.contains("dropdown-item")) {
selectOrder(e.target);
}
});
// Add keyboard navigation for dropdown items
document.getElementById("r_order_id").addEventListener("keydown", function(e) {
var suggestions = document.getElementById("order_suggestions");
if (suggestions.style.display === 'block') {
var items = suggestions.getElementsByClassName("dropdown-item");
if (e.key === "ArrowDown") {
currentFocus++;
addActive(items);
} else if (e.key === "ArrowUp") {
currentFocus--;
addActive(items);
} else if (e.key === "Enter") {
e.preventDefault();
if (currentFocus > -1) {
if (items[currentFocus]) {
selectOrder(items[currentFocus]);
}
}
}
}
});
function addActive(items) {
if (!items) return false;
removeActive(items);
if (currentFocus >= items.length) currentFocus = 0;
if (currentFocus < 0) currentFocus = items.length - 1;
items[currentFocus].classList.add("active");
items[currentFocus].scrollIntoView({ block: "nearest" });
}
function removeActive(items) {
for (var i = 0; i < items.length; i++) {
items[i].classList.remove("active");
}
}
function selectOrder(item) {
var orderId = item.getAttribute('data-order-id');
document.getElementById("r_order_id").value = orderId;
document.getElementById("order_suggestions").style.display = 'none';
}
document.getElementById("customer_name").addEventListener("input", function() {
var customerName = this.value;
if (customerName.length > 0) {
var xhr = new XMLHttpRequest();
xhr.open("GET", "?customer_name=" + customerName, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var suggestions = document.getElementById("customer_suggestions");
suggestions.innerHTML = xhr.responseText;
suggestions.style.display = 'block';
}
};
xhr.send();
} else {
document.getElementById("customer_suggestions").style.display = 'none';
}
});
document.getElementById("customer_suggestions").addEventListener("click", function(e) {
if (e.target && e.target.classList.contains("dropdown-item")) {
selectCustomer(e.target);
}
});
document.getElementById("customer_name").addEventListener("keydown", function(e) {
var suggestions = document.getElementById("customer_suggestions");
if (suggestions.style.display === 'block') {
var items = suggestions.getElementsByClassName("dropdown-item");
if (e.key === "ArrowDown") {
currentFocus++;
addActive(items);
} else if (e.key === "ArrowUp") {
currentFocus--;
addActive(items);
} else if (e.key === "Enter") {
e.preventDefault();
if (currentFocus > -1) {
if (items[currentFocus]) {
selectCustomer(items[currentFocus]);
}
}
}
}
});
function addActive(items) {
if (!items) return false;
removeActive(items);
if (currentFocus >= items.length) currentFocus = 0;
if (currentFocus < 0) currentFocus = items.length - 1;
items[currentFocus].classList.add("active");
items[currentFocus].scrollIntoView({ block: "nearest" });
}
function removeActive(items) {
for (var i = 0; i < items.length; i++) {
items[i].classList.remove("active");
}
}
function selectCustomer(item) {
var customerName = item.getAttribute('data-customer-name');
var customerId = item.getAttribute('data-customer-id');
var customerPhone = item.getAttribute('data-customer-phone');
document.getElementById("customer_name").value = customerName;
document.getElementById("customer_phone").value = customerPhone;
document.getElementById("customer_id").value = customerId;
document.getElementById("customer_suggestions").style.display = 'none';
}
function calculateTotalPrice() {
let quantity = parseFloat(document.getElementById("quantity").value) || 0;
let pricePerUnit = parseFloat(document.getElementById("retail_price").value) || 0;
let discountAmount = parseFloat(document.getElementById("percentage").value) || 0; // Treating this as a direct amount now
let totalPrice = quantity * pricePerUnit;
let finalPrice = totalPrice;
if (discountAmount > 0) {
finalPrice = totalPrice - discountAmount;
if (finalPrice < 0) finalPrice = 0;
}
document.getElementById("total_amount").value = totalPrice.toFixed(2);
document.getElementById("trade_price").value = finalPrice.toFixed(2);
}
document.getElementById("quantity").addEventListener("input", calculateTotalPrice);
document.getElementById("retail_price").addEventListener("input", calculateTotalPrice);
document.getElementById("percentage").addEventListener("input", calculateTotalPrice);
document.getElementById("suggestions").addEventListener("click", function(e) {
if (e.target && e.target.classList.contains("dropdown-item")) {
selectProduct(e.target);
}
});
document.getElementById("productInput").addEventListener("input", function() {
var query = this.value;
if (query.length > 0) {
var xhr = new XMLHttpRequest();
xhr.open("GET", "?query=" + query, true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var suggestions = document.getElementById("suggestions");
suggestions.innerHTML = xhr.responseText;
suggestions.style.display = 'block';
}
};
xhr.send();
} else {
document.getElementById("suggestions").style.display = 'none';
}
});
document.getElementById("productInput").addEventListener("keydown", function(e) {
var suggestions = document.getElementById("suggestions");
if (suggestions.style.display === 'block') {
var items = suggestions.getElementsByClassName("dropdown-item");
if (e.key === "ArrowDown") {
currentFocus++;
addActive(items);
} else if (e.key === "ArrowUp") {
currentFocus--;
addActive(items);
} else if (e.key === "Enter") {
e.preventDefault();
if (currentFocus > -1) {
if (items[currentFocus]) {
selectProduct(items[currentFocus]);
}
}
}
}
});
function addActive(items) {
if (!items) return false;
removeActive(items);
if (currentFocus >= items.length) currentFocus = 0;
if (currentFocus < 0) currentFocus = items.length - 1;
items[currentFocus].classList.add("active");
items[currentFocus].scrollIntoView({ block: "nearest" });
}
function removeActive(items) {
for (var i = 0; i < items.length; i++) {
items[i].classList.remove("active");
}
}
function selectProduct(item) {
var selectedProduct = item.textContent;
var retailPrice = item.getAttribute('data-retail-price');
var productQuantity = item.getAttribute('data-product-quantity');
var tradePrice = item.getAttribute('data-trade-price');
var productId = item.getAttribute('data-product-id');
var supplier = item.getAttribute('data-supplier');
var company = item.getAttribute('data-company');
var productUnit = item.getAttribute('data-product-unit');
document.getElementById("productInput").value = selectedProduct;
document.getElementById("retail_price").value = retailPrice;
document.getElementById("productInput").setAttribute('data-product-id', productId);
document.getElementById("productInput").setAttribute('data-product-quantity', productQuantity);
document.getElementById("productInput").setAttribute('data-supplier', supplier);
document.getElementById("productInput").setAttribute('data-company', company);
document.getElementById("productInput").setAttribute('data-trade-price', tradePrice);
document.getElementById("productInput").setAttribute('data-product-unit', productUnit);
document.getElementById("suggestions").style.display = 'none';
calculateTotalPrice();
}
document.getElementById("makeEntry").addEventListener("click", function() {
var productInput = document.getElementById("productInput");
var productId = productInput.getAttribute('data-product-id');
var productQuantity = parseFloat(document.getElementById("quantity").value) || 0; // Parse the quantity and ensure it's a number
var supplier = productInput.getAttribute('data-supplier');
var company = productInput.getAttribute('data-company');
var description = productInput.value;
var quantity = productQuantity;
var pricePerUnit = parseFloat(document.getElementById("retail_price").value) || 0;
var totalPrice = parseFloat(document.getElementById("total_amount").value) || 0;
var discountPercentage = parseFloat(document.getElementById("percentage").value) || 0;
var netAmount = parseFloat(document.getElementById("trade_price").value) || 0;
var tradePrice = productInput.getAttribute('data-trade-price');
// Check if quantity is zero or negative before making the entry
if (quantity <= 0) {
alert("Product is not in stock. Cannot add entry.");
return; // Stop execution if quantity is zero or negative
}
if (productId && description && quantity && pricePerUnit && totalPrice && netAmount) {
var table = document.getElementById("productsTable");
var row = table.insertRow();
row.innerHTML = `
<td>${quantity}</td>
<td>${productId}</td>
<td style="color:#0A5064;font-weight:700px;">${description}</td>
<td>${quantity}</td>
<td>${pricePerUnit}</td>
<td>${totalPrice}</td>
<td>${discountPercentage || '0.00'}</td>
<td>0</td>
<td>${netAmount}</td>
<td style="display:none;">${supplier}</td>
<td style="display:none;">${company}</td>
<td style="display:none;">${tradePrice}</td>
<td><button class="btn btn-danger btn-sm delete-row">X</button></td>
`;
row.querySelector(".delete-row").addEventListener("click", function() {
row.remove();
calculateTotalAmount();
});
calculateTotalAmount();
var rows = document.querySelectorAll("#productsTable tr:not(:first-child)");
var productData = [];
rows.forEach(function(row) {
var cells = row.querySelectorAll("td");
var product = {
productId: cells[1].innerText,
description: cells[2].innerText,
quantity: cells[3].innerText,
pricePerUnit: cells[4].innerText,
totalPrice: cells[5].innerText,
discountPercentage: cells[6].innerText,
tax: cells[7].innerText,
netAmount: cells[8].innerText,
supplier: cells[9].innerText,
company: cells[10].innerText,
tradePrice: cells[11].innerText
};
productData.push(product);
});
document.getElementById("productData").value = JSON.stringify(productData);
// Reset product fields after making an entry
resetProductFields();
// Automatically focus back to the productInput field
productInput.focus();
} else {
alert("Some required fields are missing");
}
});
function resetProductFields() {
document.getElementById("productInput").value = '';
document.getElementById("quantity").value = '';
document.getElementById("retail_price").value = '';
document.getElementById("total_amount").value = '';
document.getElementById("percentage").value = '';
document.getElementById("trade_price").value = '';
// Remove data attributes for the next product
document.getElementById("productInput").removeAttribute('data-product-id');
document.getElementById("productInput").removeAttribute('data-product-quantity');
document.getElementById("productInput").removeAttribute('data-supplier');
document.getElementById("productInput").removeAttribute('data-company');
document.getElementById("productInput").removeAttribute('data-trade-price');
document.getElementById("productInput").removeAttribute('data-product-unit');
}
function calculateTotalAmount() {
var table = document.getElementById("productsTable");
var rows = table.getElementsByTagName("tr");
var total = 0;
for (var i = 1; i < rows.length; i++) {
var netAmountCell = rows[i].cells[8];
var netAmount = parseFloat(netAmountCell.textContent.trim());
if (!isNaN(netAmount)) {
total += netAmount;
}
}
var totalInput = document.getElementById("total-input");
var billAmountInput = document.getElementById("bill-amount");
totalInput.value = total.toFixed(2);
billAmountInput.value = total.toFixed(2);
updateDiscountAmount();
}
function updateDiscountAmount() {
var total = parseFloat(document.getElementById("total-input").value) || 0;
var billAmount = parseFloat(document.getElementById("bill-amount").value) || 0;
var discountAmountInput = document.getElementById("discount_amount");
var discountPercentInput = document.getElementById("discount_percent");
if (!isNaN(billAmount) && !isNaN(total)) {
var discountAmount = total - billAmount;
discountAmountInput.value = Math.round(discountAmount);
if (total > 0) {
var discountPercent = (discountAmount / total) * 100;
discountPercentInput.value = discountPercent.toFixed(2);
} else {
discountPercentInput.value = "0.00";
}
}
}
function calculateCashReturn() {
var billAmount = parseFloat(document.getElementById("bill-amount").value) || 0;
var cashReceived = parseFloat(document.getElementById("cash_received").value) || 0;
var cashReturnInput = document.getElementById("cash_return");
if (!isNaN(billAmount) && !isNaN(cashReceived)) {
var cashReturn = cashReceived - billAmount;
cashReturnInput.value = cashReturn.toFixed(2);
}
}
document.getElementById("bill-amount").addEventListener("input", function() {
updateDiscountAmount();
});
document.getElementById("cash_received").addEventListener("input", function() {
calculateCashReturn();
});
calculateTotalAmount();
});
</script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</body>
</html>