order_save.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. require_once 'conn.php';
  3. checkLogin();
  4. // 辅助函数
  5. function textEncode($str) {
  6. return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
  7. }
  8. function htmlEncode($str) {
  9. return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
  10. }
  11. $isedit = false;
  12. $id = $_POST['id'] ?? '';
  13. if (!empty($id) && is_numeric($id)) {
  14. $isedit = true;
  15. }
  16. // 获取表单数据 - 订单基本信息
  17. $order_code = mysqli_real_escape_string($conn, textEncode($_POST['order_code']));
  18. $customer_id = (int)$_POST['customer_id'];
  19. $contact_id = !empty($_POST['contact_id']) ? (int)$_POST['contact_id'] : "NULL";
  20. $employee_id = $_SESSION['employee_id'];
  21. $order_date = mysqli_real_escape_string($conn, $_POST['order_date']);
  22. $delivery_date = !empty($_POST['delivery_date']) ? "'" . mysqli_real_escape_string($conn, $_POST['delivery_date']) . "'" : "NULL";
  23. $actual_delivery_date = !empty($_POST['actual_delivery_date']) ? "'" . mysqli_real_escape_string($conn, $_POST['actual_delivery_date']) . "'" : "NULL";
  24. $order_status = (int)$_POST['order_status'];
  25. $payment_status = (int)$_POST['payment_status'];
  26. $currency = mysqli_real_escape_string($conn, textEncode($_POST['currency']));
  27. $notes = mysqli_real_escape_string($conn, htmlEncode($_POST['notes']));
  28. $internal_notes = mysqli_real_escape_string($conn, htmlEncode($_POST['internal_notes']));
  29. // 获取订单项信息
  30. $items = $_POST['items'] ?? [];
  31. // 计算订单总额
  32. $subtotal = 0;
  33. $shipping_fee = !empty($_POST['shipping_fee']) ? (float)$_POST['shipping_fee'] : 0;
  34. $discount_amount = !empty($_POST['discount_amount']) ? (float)$_POST['discount_amount'] : 0;
  35. foreach ($items as $item) {
  36. $quantity = (int)$item['quantity'];
  37. $unit_price = (float)$item['unit_price'];
  38. $item_discount = (float)($item['discount_amount'] ?? 0);
  39. $item_total = ($quantity * $unit_price) - $item_discount;
  40. $subtotal += $item_total;
  41. }
  42. $total_amount = $subtotal + $shipping_fee - $discount_amount;
  43. // 验证必填字段
  44. if (empty($order_code)) {
  45. echo "<script>alert('订单编号不能为空');history.back();</script>";
  46. exit;
  47. }
  48. if ($customer_id <= 0) {
  49. echo "<script>alert('请选择客户');history.back();</script>";
  50. exit;
  51. }
  52. if (empty($items)) {
  53. echo "<script>alert('订单必须包含至少一个产品');history.back();</script>";
  54. exit;
  55. }
  56. // 处理保存
  57. if ($isedit) {
  58. // 更新订单基本信息
  59. $sql = "UPDATE orders SET
  60. order_code = '$order_code',
  61. customer_id = $customer_id,
  62. contact_id = $contact_id,
  63. employee_id = $employee_id,
  64. order_date = '$order_date',
  65. delivery_date = $delivery_date,
  66. actual_delivery_date = $actual_delivery_date,
  67. order_status = $order_status,
  68. payment_status = $payment_status,
  69. currency = '$currency',
  70. subtotal = $subtotal,
  71. shipping_fee = $shipping_fee,
  72. discount_amount = $discount_amount,
  73. total_amount = $total_amount,
  74. notes = '$notes',
  75. internal_notes = '$internal_notes',
  76. updated_at = NOW()
  77. WHERE id = $id";
  78. mysqli_query($conn, $sql);
  79. // 删除旧的订单项
  80. $sql = "DELETE FROM order_items WHERE order_id = $id";
  81. mysqli_query($conn, $sql);
  82. // 添加新的订单项
  83. foreach ($items as $item) {
  84. if (empty($item['product_id'])) continue; // 跳过没有选择产品的行
  85. $product_id = (int)$item['product_id'];
  86. $quantity = (int)$item['quantity'];
  87. $unit = mysqli_real_escape_string($conn, textEncode($item['unit']));
  88. $unit_price = (float)$item['unit_price'];
  89. $discount_percent = !empty($item['discount_percent']) ? (float)$item['discount_percent'] : 0;
  90. $discount_amount = !empty($item['discount_amount']) ? (float)$item['discount_amount'] : 0;
  91. $total_price = ($quantity * $unit_price) - $discount_amount;
  92. $item_notes = mysqli_real_escape_string($conn, htmlEncode($item['notes'] ?? ''));
  93. $sql = "INSERT INTO order_items (
  94. order_id, product_id, quantity, unit, unit_price,
  95. discount_percent, discount_amount, total_price, notes,
  96. created_at, updated_at
  97. ) VALUES (
  98. $id, $product_id, $quantity, '$unit', $unit_price,
  99. $discount_percent, $discount_amount, $total_price, '$item_notes',
  100. NOW(), NOW()
  101. )";
  102. mysqli_query($conn, $sql);
  103. }
  104. $message = "订单更新成功!";
  105. } else {
  106. // 创建新订单
  107. $sql = "INSERT INTO orders (
  108. order_code, customer_id, contact_id, employee_id,
  109. order_date, delivery_date, actual_delivery_date,
  110. order_status, payment_status, currency,
  111. subtotal, shipping_fee, discount_amount, total_amount,
  112. notes, internal_notes, created_at, updated_at
  113. ) VALUES (
  114. '$order_code', $customer_id, $contact_id, $employee_id,
  115. '$order_date', $delivery_date, $actual_delivery_date,
  116. $order_status, $payment_status, '$currency',
  117. $subtotal, $shipping_fee, $discount_amount, $total_amount,
  118. '$notes', '$internal_notes', NOW(), NOW()
  119. )";
  120. mysqli_query($conn, $sql);
  121. $order_id = mysqli_insert_id($conn);
  122. // 添加订单项
  123. foreach ($items as $item) {
  124. if (empty($item['product_id'])) continue; // 跳过没有选择产品的行
  125. $product_id = (int)$item['product_id'];
  126. $quantity = (int)$item['quantity'];
  127. $unit = mysqli_real_escape_string($conn, textEncode($item['unit']));
  128. $unit_price = (float)$item['unit_price'];
  129. $discount_percent = !empty($item['discount_percent']) ? (float)$item['discount_percent'] : 0;
  130. $discount_amount = !empty($item['discount_amount']) ? (float)$item['discount_amount'] : 0;
  131. $total_price = ($quantity * $unit_price) - $discount_amount;
  132. $item_notes = mysqli_real_escape_string($conn, htmlEncode($item['notes'] ?? ''));
  133. $sql = "INSERT INTO order_items (
  134. order_id, product_id, quantity, unit, unit_price,
  135. discount_percent, discount_amount, total_price, notes,
  136. created_at, updated_at
  137. ) VALUES (
  138. $order_id, $product_id, $quantity, '$unit', $unit_price,
  139. $discount_percent, $discount_amount, $total_price, '$item_notes',
  140. NOW(), NOW()
  141. )";
  142. mysqli_query($conn, $sql);
  143. }
  144. $message = "订单创建成功!";
  145. }
  146. // 重定向回订单列表页面
  147. $page = $_GET['Page'] ?? '';
  148. $keys = urlencode($_GET['Keys'] ?? '');
  149. echo "<script>alert('$message');location.href='order.php?keys=$keys&Page=$page';</script>";
  150. exit;
  151. ?>