:: **Zploit** v1.0 | Current Path: **/home/kreativepixelz/www/kreative_crm/quatation/**
:: Editing File: stock_save.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 DATA ---------------- */ $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'] ?? ''); $driver_name = mysqli_real_escape_string($conn, $_POST['driver_name'] ?? ''); $driver_number = mysqli_real_escape_string($conn, $_POST['driver_number'] ?? ''); $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 REQUESTED BOX QTY ---------------- */ $boxQty = []; $total_box = 0; foreach ($boxTypes as $b) { $boxQty[$b] = isset($_POST[$b]) ? (int)$_POST[$b] : 0; $total_box += $boxQty[$b]; } /* ---------------- GET AVAILABLE STOCK ---------------- */ $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 "; $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'] = "❌ Stock not available for $b. Available: $avail"; header("Location: stock_add.php"); exit; } } if ($total_box > (int)($available['total_box'] ?? 0)) { $_SESSION['error'] = "❌ Total box stock not available."; header("Location: stock_add.php"); exit; } } /* ---------------- TRANSACTION START ---------------- */ mysqli_begin_transaction($conn); try { /* ---------- INSERT PARENT ---------- */ $parentSql = " INSERT INTO stock_movements ( movement_type, movement_date, product_id, vendor_id, cold_storage_id, brand_desc, vehicle_number, container_no, driver_name, driver_number, dispatch_time, total_box, remark, status, user_id ) VALUES ( '$movement_type', '$movement_date', $product_id, ".($vendor_id ? $vendor_id : "NULL").", ".($cold_storage_id ? $cold_storage_id : "NULL").", '$brand_desc', '$vehicle_number', '$container_no', '$driver_name', '$driver_number', ".($dispatch_time ? "'$dispatch_time'" : "NULL").", $total_box, '$remark', 1, $user_id )"; if (!mysqli_query($conn, $parentSql)) { throw new Exception(mysqli_error($conn)); } $movement_id = mysqli_insert_id($conn); /* ---------- INSERT CHILD ---------- */ $childSql = " INSERT INTO stock_movement_boxes ( movement_id, box_4H, box_5H, box_6H, box_7H, box_8H, box_9H, box_10H, box_CL, total_box ) VALUES ( $movement_id, {$boxQty['box_4H']}, {$boxQty['box_5H']}, {$boxQty['box_6H']}, {$boxQty['box_7H']}, {$boxQty['box_8H']}, {$boxQty['box_9H']}, {$boxQty['box_10H']}, {$boxQty['box_CL']}, $total_box )"; if (!mysqli_query($conn, $childSql)) { throw new Exception(mysqli_error($conn)); } mysqli_commit($conn); $_SESSION['success'] = "✅ Stock movement saved successfully!"; header("Location: stock_list.php"); exit; } catch (Exception $e) { mysqli_rollback($conn); $_SESSION['error'] = "❌ Stock save failed: " . $e->getMessage(); header("Location: stock_add.php"); exit; }