:: **Zploit** v1.0 | Current Path: **/home/kreativepixelz/www/crm/quatation/**
:: Editing File: stock_update.php
<?php error_reporting(E_ALL); ini_set('display_errors', 1); include_once("session.php"); include("db.php"); $user_id = $_SESSION['user_id'] ?? 0; if ($_SERVER['REQUEST_METHOD'] !== 'POST') { header("Location: stock_list.php"); exit; } /* ---------------- BASIC INPUT ---------------- */ $id = (int)$_POST['id']; $movement_date = $_POST['movement_date']; $movement_type = $_POST['movement_type']; // IN / OUT $product_id = (int)$_POST['product_id']; $vendor_id = !empty($_POST['vendor_id']) ? (int)$_POST['vendor_id'] : NULL; $cold_storage_id = !empty($_POST['cold_storage_id']) ? (int)$_POST['cold_storage_id'] : NULL; $brand_desc = mysqli_real_escape_string($conn, $_POST['brand_desc'] ?? ''); $vehicle_number = mysqli_real_escape_string($conn, $_POST['vehicle_number'] ?? ''); $container_no = mysqli_real_escape_string($conn, $_POST['container_no'] ?? ''); $dispatch_time = !empty($_POST['dispatch_time']) ? $_POST['dispatch_time'] : NULL; $remark = mysqli_real_escape_string($conn, $_POST['remark'] ?? ''); /* ---------------- BOX TYPES ---------------- */ $boxTypes = [ 'box_4H','box_5H','box_6H','box_7H', 'box_8H','box_9H','box_10H','box_CL' ]; /* ---------------- READ NEW BOX QTY ---------------- */ $boxQty = []; $total_box = 0; foreach ($boxTypes as $b) { $boxQty[$b] = isset($_POST[$b]) ? (int)$_POST[$b] : 0; $total_box += $boxQty[$b]; } if ($total_box <= 0) { $_SESSION['error'] = "❌ Total boxes cannot be zero."; header("Location: stock_edit.php?id=$id"); exit; } /* ---------------- CHECK RECORD EXISTS ---------------- */ $old = mysqli_fetch_assoc(mysqli_query($conn," SELECT * FROM stock_movements WHERE id=$id AND status=1 ")); if (!$old) { $_SESSION['error'] = "❌ Invalid stock record."; header("Location: stock_list.php"); exit; } /* ---------------- GET AVAILABLE STOCK (EXCLUDING CURRENT) ---------------- */ $stockSql = " SELECT SUM(CASE WHEN sm.movement_type='IN' THEN sb.box_4H ELSE -sb.box_4H END) AS box_4H, SUM(CASE WHEN sm.movement_type='IN' THEN sb.box_5H ELSE -sb.box_5H END) AS box_5H, SUM(CASE WHEN sm.movement_type='IN' THEN sb.box_6H ELSE -sb.box_6H END) AS box_6H, SUM(CASE WHEN sm.movement_type='IN' THEN sb.box_7H ELSE -sb.box_7H END) AS box_7H, SUM(CASE WHEN sm.movement_type='IN' THEN sb.box_8H ELSE -sb.box_8H END) AS box_8H, SUM(CASE WHEN sm.movement_type='IN' THEN sb.box_9H ELSE -sb.box_9H END) AS box_9H, SUM(CASE WHEN sm.movement_type='IN' THEN sb.box_10H ELSE -sb.box_10H END) AS box_10H, SUM(CASE WHEN sm.movement_type='IN' THEN sb.box_CL ELSE -sb.box_CL END) AS box_CL, SUM(CASE WHEN sm.movement_type='IN' THEN sb.total_box ELSE -sb.total_box END) AS total_box FROM stock_movements sm JOIN stock_movement_boxes sb ON sb.movement_id = sm.id WHERE sm.product_id = $product_id AND sm.status = 1 AND sm.id != $id "; $available = mysqli_fetch_assoc(mysqli_query($conn, $stockSql)); /* ---------------- VALIDATION (NO NEGATIVE) ---------------- */ if ($movement_type === 'OUT') { foreach ($boxTypes as $b) { $avail = (int)($available[$b] ?? 0); if ($boxQty[$b] > $avail) { $_SESSION['error'] = "❌ Not enough stock for $b. Available: $avail"; header("Location: stock_edit.php?id=$id"); exit; } } if ($total_box > (int)($available['total_box'] ?? 0)) { $_SESSION['error'] = "❌ Total stock not available."; header("Location: stock_edit.php?id=$id"); exit; } } /* ---------------- TRANSACTION START ---------------- */ mysqli_begin_transaction($conn); try { /* ---------- UPDATE PARENT ---------- */ $updateParent = " UPDATE stock_movements SET movement_type = '$movement_type', movement_date = '$movement_date', product_id = $product_id, vendor_id = ".($vendor_id ? $vendor_id : "NULL").", cold_storage_id = ".($cold_storage_id ? $cold_storage_id : "NULL").", brand_desc = '$brand_desc', vehicle_number = '$vehicle_number', container_no = '$container_no', dispatch_time = ".($dispatch_time ? "'$dispatch_time'" : "NULL").", total_box = $total_box, remark = '$remark' WHERE id = $id "; if (!mysqli_query($conn, $updateParent)) { throw new Exception(mysqli_error($conn)); } /* ---------- UPDATE CHILD ---------- */ $updateChild = " UPDATE stock_movement_boxes SET box_4H = {$boxQty['box_4H']}, box_5H = {$boxQty['box_5H']}, box_6H = {$boxQty['box_6H']}, box_7H = {$boxQty['box_7H']}, box_8H = {$boxQty['box_8H']}, box_9H = {$boxQty['box_9H']}, box_10H = {$boxQty['box_10H']}, box_CL = {$boxQty['box_CL']}, total_box= $total_box WHERE movement_id = $id "; if (!mysqli_query($conn, $updateChild)) { throw new Exception(mysqli_error($conn)); } mysqli_commit($conn); $_SESSION['success'] = "✅ Stock updated successfully."; header("Location: stock_list.php"); exit; } catch (Exception $e) { mysqli_rollback($conn); $_SESSION['error'] = "❌ Update failed: " . $e->getMessage(); header("Location: stock_edit.php?id=$id"); exit; }