:: **Zploit** v1.0 | Current Path: **/home/kreativepixelz/www/kreative_crm/quatation/**
:: Editing File: edit_stock.php
<?php error_reporting(E_ALL); ini_set('display_errors', 1); include_once("session.php"); include("header.php"); include("db.php"); // $conn mysqli // --- 1. Validate incoming id --- if (!isset($_GET['id']) || !is_numeric($_GET['id'])) { $_SESSION['error'] = "Invalid stock movement id."; header("Location: stock_list.php"); exit; } $movement_id = (int) $_GET['id']; // --- 2. Fetch master movement --- $sql_master = "SELECT * FROM stock_movements WHERE id = ?"; $stmt = mysqli_prepare($conn, $sql_master); if (!$stmt) { $_SESSION['error'] = "DB prepare error: " . mysqli_error($conn); header("Location: stock_list.php"); exit; } mysqli_stmt_bind_param($stmt, "i", $movement_id); mysqli_stmt_execute($stmt); $res = mysqli_stmt_get_result($stmt); $movement = mysqli_fetch_assoc($res); mysqli_stmt_close($stmt); if (!$movement) { $_SESSION['error'] = "Stock movement not found."; header("Location: stock_list.php"); exit; } // --- 3. Fetch box breakdown for this movement --- $boxes_map = []; // key => box_count, keyed by category_name (exact) $sql_boxes = "SELECT category_name, box_count FROM stock_movement_boxes WHERE movement_id = ?"; $stmtB = mysqli_prepare($conn, $sql_boxes); mysqli_stmt_bind_param($stmtB, "i", $movement_id); mysqli_stmt_execute($stmtB); $resB = mysqli_stmt_get_result($stmtB); while ($r = mysqli_fetch_assoc($resB)) { $boxes_map[$r['category_name']] = (int)$r['box_count']; } mysqli_stmt_close($stmtB); // Helper to safely echo values function h($v) { return htmlspecialchars($v ?? '', ENT_QUOTES); } ?> <main> <div class="container-fluid"> <div class="row m-1"> <div class="col-12"> <h4 class="main-title">Edit Stock Movement #<?php echo h($movement['id']); ?></h4> <ul class="app-line-breadcrumbs mb-3"> <li><a href="dashboard.php">Home</a></li> <li><a href="stock_list.php">Stock List</a></li> <li class="active"><a href="#">Edit Stock</a></li> </ul> </div> </div> <div class="card"> <div class="card-body"> <?php if (isset($_SESSION['success'])) { echo '<div class="alert alert-success">'.$_SESSION['success'].'</div>'; unset($_SESSION['success']); } if (isset($_SESSION['error'])) { echo '<div class="alert alert-danger">'.$_SESSION['error'].'</div>'; unset($_SESSION['error']); } ?> <form method="post" action="update_stock.php" class="row g-3" enctype="multipart/form-data"> <input type="hidden" name="movement_id" value="<?php echo (int)$movement['id']; ?>"> <!-- <input type="hidden" name="updated_by" value="<?php echo (int)$_SESSION['user_id']; ?>">--> <h5 class="mt-2">Stock Movement Details</h5> <div class="col-md-3"> <label class="form-label">Movement Date</label> <input type="date" name="movement_date" class="form-control" required value="<?php echo h($movement['movement_date']); ?>"> </div> <div class="col-md-3"> <label class="form-label">Movement Type</label> <select name="movement_type" class="form-control" required> <option value="IN" <?php echo ($movement['movement_type'] === 'IN') ? 'selected' : ''; ?>>IN (Received)</option> <option value="OUT" <?php echo ($movement['movement_type'] === 'OUT') ? 'selected' : ''; ?>>OUT (Dispatch)</option> </select> </div> <div class="col-md-3"> <label class="form-label">Vendor / Party</label> <select name="vendor_id" class="form-control"> <option value="">Select Party</option> <?php $q = mysqli_query($conn, "SELECT id,name FROM party ORDER BY name ASC"); while ($r = mysqli_fetch_assoc($q)) { $sel = ($r['id'] == $movement['vendor_id']) ? 'selected' : ''; echo "<option value='".(int)$r['id']."' $sel>".h($r['name'])."</option>"; } ?> </select> </div> <div class="col-md-3"> <label class="form-label">Cold Storage</label> <select name="cold_storage_id" class="form-control"> <option value="">Select Cold Storage</option> <?php $q = mysqli_query($conn, "SELECT id, company_name FROM cold_storage ORDER BY company_name ASC"); while ($r = mysqli_fetch_assoc($q)) { $sel = ($r['id'] == $movement['cold_storage_id']) ? 'selected' : ''; echo "<option value='".(int)$r['id']."' $sel>".h($r['company_name'])."</option>"; } ?> </select> </div> <div class="col-md-6"> <label class="form-label">Product Name</label> <input type="text" name="product_name" class="form-control" value="<?php echo h($movement['product_name']); ?>"> </div> <div class="col-md-6"> <label class="form-label">Brand / Description</label> <input type="text" name="brand_desc" class="form-control" value="<?php echo h($movement['brand_desc']); ?>"> </div> <h5 class="mt-3">Box Category Counts</h5> <?php // Render dynamic categories (same source as add_stock) $catQ = mysqli_query($conn, "SELECT category_name FROM box_category WHERE status = 1 ORDER BY id ASC"); if ($catQ && mysqli_num_rows($catQ) > 0) { while ($c = mysqli_fetch_assoc($catQ)) { $cat_name = $c['category_name']; $input_key = 'box_' . preg_replace("/[^A-Za-z0-9]/", "", $cat_name); $value = 0; // match using exact category_name key if present, otherwise 0 if (isset($boxes_map[$cat_name])) { $value = (int)$boxes_map[$cat_name]; } else { // also try sanitized key names in case previous system stored by sanitized columns // (for backward compatibility) // try to find by comparing case-insensitively foreach ($boxes_map as $kname => $kcount) { if (strcasecmp($kname, $cat_name) === 0) { $value = (int)$kcount; break;} } } echo " <div class='col-md-2 mb-3'> <label class='form-label'>".h($cat_name)."</label> <input type='number' class='form-control box-input' name='".h($input_key)."' id='".h($input_key)."' min='0' value='".(int)$value."'> </div>"; } } else { echo "<div class='col-12'><small class='text-muted'>No box categories defined. Please add categories in box_category table.</small></div>"; } ?> <div class="col-md-2"> <label class="form-label">Total Boxes</label> <input type="number" id="total_boxes" name="total_box" class="form-control" readonly value="<?php echo (int)$movement['total_box']; ?>"> </div> <div class="col-md-12 mt-3"> <label class="form-label">Remarks</label> <textarea name="remark" class="form-control" rows="3"><?php echo h($movement['remark']); ?></textarea> </div> <div class="col-12 mt-4"> <button class="btn btn-primary">Update Stock Movement</button> <a href="stock_list.php" class="btn btn-secondary ms-2">Cancel</a> </div> </form> </div> </div> </div> </main> <script> document.addEventListener('DOMContentLoaded', function() { function recalcTotal() { let total = 0; document.querySelectorAll('.box-input').forEach(function(el) { let v = parseInt(el.value); if (!isNaN(v)) total += v; }); document.getElementById('total_boxes').value = total; } // Recalc on input document.querySelectorAll('.box-input').forEach(function(el) { el.addEventListener('input', recalcTotal); }); // Run once on load recalcTotal(); }); </script> <?php include("footer.php"); ?>