瀏覽代碼

fleat: update order date and export

igb 14 小時之前
父節點
當前提交
579b3ea70f
共有 6 個文件被更改,包括 207 次插入12 次删除
  1. 161 0
      export_rebate_details.php
  2. 8 0
      get_rebate_details.php
  3. 2 2
      order_add.php
  4. 1 1
      order_details.php
  5. 2 2
      order_edit.php
  6. 33 7
      rebate_history.php

+ 161 - 0
export_rebate_details.php

@@ -0,0 +1,161 @@
+<?php
+require_once 'conn.php';
+checkLogin();
+
+// 获取返点兑换ID
+$redemptionId = isset($_GET['redemption_id']) ? intval($_GET['redemption_id']) : 0;
+
+if ($redemptionId <= 0) {
+    die('无效的兑换ID');
+}
+
+// 验证权限
+$employee_id = $_SESSION['employee_id'];
+$isAdmin = checkIfAdmin();
+
+// 检查是否为财务角色或管理员
+$isFinance = false;
+$checkRoleSql = "SELECT em_permission_role_id FROM employee WHERE id = $employee_id";
+$roleResult = mysqli_query($conn, $checkRoleSql);
+if ($roleResult && $row = mysqli_fetch_assoc($roleResult)) {
+    $isFinance = ($row['em_permission_role_id'] == 6 || $row['em_permission_role_id'] == 1);
+}
+
+// 获取客户信息和返点兑换基本信息
+$customerSql = "SELECT 
+                  c.cs_code, 
+                  c.cs_company,
+                  rr.redemption_date,
+                  rr.total_rebate_amount
+               FROM 
+                  rebate_redemptions rr
+               JOIN 
+                  customer c ON rr.customer_id = c.id
+               WHERE 
+                  rr.id = ?";
+
+$customerStmt = $conn->prepare($customerSql);
+$customerStmt->bind_param("i", $redemptionId);
+$customerStmt->execute();
+$customerResult = $customerStmt->get_result();
+
+if (!$customerResult || $customerResult->num_rows == 0) {
+    die('未找到返点兑换记录');
+}
+
+$customerInfo = $customerResult->fetch_assoc();
+
+// 获取返点兑换详情
+$sql = "SELECT 
+            rri.id,
+            rri.order_id,
+            rri.order_item_id,
+            rri.product_id,
+            rri.quantity,
+            rri.rebate_amount,
+            rri.rebate_rule_id,
+            p.ProductName AS product_name,
+            o.order_code,
+            o.order_date,
+            o.shipping_date,
+            oi.unit,
+            (SELECT rr.rebate_amount FROM rebate_rules rr WHERE rr.id = rri.rebate_rule_id) AS rule_amount
+        FROM 
+            rebate_redemption_items rri
+        JOIN 
+            products p ON rri.product_id = p.id
+        JOIN 
+            orders o ON rri.order_id = o.id
+        JOIN 
+            order_items oi ON rri.order_item_id = oi.id
+        JOIN
+            rebate_redemptions rr ON rri.redemption_id = rr.id
+        JOIN
+            customer c ON rr.customer_id = c.id
+        WHERE 
+            rri.redemption_id = ?";
+
+// 非管理员和非财务只能查看自己客户的数据
+if (!$isAdmin && !$isFinance) {
+    $sql .= " AND c.cs_belong = $employee_id";
+}
+
+$sql .= " ORDER BY o.order_code, p.ProductName";
+
+// 使用预处理语句防止SQL注入
+$stmt = $conn->prepare($sql);
+$stmt->bind_param("i", $redemptionId);
+$stmt->execute();
+$result = $stmt->get_result();
+
+if (!$result) {
+    die('查询失败: ' . $conn->error);
+}
+
+// 设置响应头,指定文件类型为CSV
+header('Content-Type: text/csv; charset=utf-8');
+header('Content-Disposition: attachment; filename="返点详情_' . textDecode($customerInfo['cs_code']) . '_' . date('Ymd') . '.csv"');
+
+// 创建一个文件指针,连接到PHP的输出流
+$output = fopen('php://output', 'w');
+
+// 添加UTF-8 BOM以确保Excel正确识别中文
+fprintf($output, chr(0xEF).chr(0xBB).chr(0xBF));
+
+// 写入CSV文件头信息
+fputcsv($output, [
+    '客户编码: ' . $customerInfo['cs_code'],
+    '客户名称: ' . $customerInfo['cs_company'],
+    '兑换日期: ' . date('Y-m-d', strtotime($customerInfo['redemption_date'])),
+    '总返点金额: ' . number_format($customerInfo['total_rebate_amount'], 2) . ' 元'
+]);
+
+// 空行
+fputcsv($output, []);
+
+// 写入CSV标题行
+fputcsv($output, [
+    '订单编号',
+    '订单日期',
+    '出货日期',
+    '产品名称',
+    '数量',
+    '单位',
+    '返点单价(元/件)',
+    '返点金额(元)'
+]);
+
+// 写入数据行
+$totalRebate = 0;
+while ($row = $result->fetch_assoc()) {
+    // 使用规则表中的单位返点金额,而不是存储的总返点金额
+    $unitRebate = isset($row['rule_amount']) ? $row['rule_amount'] : $row['rebate_amount'];
+    
+    // 计算每项的总返点金额
+    $itemTotalRebate = $row['quantity'] * $unitRebate;
+    $totalRebate += $itemTotalRebate;
+    
+    // 格式化日期
+    $orderDate = !empty($row['order_date']) ? date('Y-m-d', strtotime($row['order_date'])) : '-';
+    $shippingDate = !empty($row['shipping_date']) ? date('Y-m-d', strtotime($row['shipping_date'])) : '-';
+    
+    fputcsv($output, [
+        $row['order_code'],
+        $orderDate,
+        $shippingDate,
+        $row['product_name'],
+        $row['quantity'],
+        $row['unit'],
+        number_format($unitRebate, 2),
+        number_format($itemTotalRebate, 2)
+    ]);
+}
+
+// 写入合计行
+fputcsv($output, []);
+fputcsv($output, ['', '', '', '', '', '', '合计:', number_format($totalRebate, 2)]);
+
+// 关闭文件指针
+fclose($output);
+exit;
+?> 

+ 8 - 0
get_rebate_details.php

@@ -35,6 +35,8 @@ $sql = "SELECT
             rri.rebate_rule_id,
             p.ProductName AS product_name,
             o.order_code,
+            o.order_date,
+            o.shipping_date,
             oi.unit,
             (SELECT rr.rebate_amount FROM rebate_rules rr WHERE rr.id = rri.rebate_rule_id) AS rule_amount
         FROM 
@@ -79,10 +81,16 @@ while ($row = $result->fetch_assoc()) {
     // 计算每项的总返点金额
     $totalRebate = $row['quantity'] * $unitRebate;
     
+    // 格式化日期
+    $orderDate = !empty($row['order_date']) ? date('Y-m-d', strtotime($row['order_date'])) : '';
+    $shippingDate = !empty($row['shipping_date']) ? date('Y-m-d', strtotime($row['shipping_date'])) : '';
+    
     $items[] = [
         'id' => $row['id'],
         'order_id' => $row['order_id'],
         'order_code' => $row['order_code'],
+        'order_date' => $orderDate,
+        'shipping_date' => $shippingDate,
         'product_id' => $row['product_id'],
         'product_name' => htmlspecialcharsFix($row['product_name']),
         'quantity' => $row['quantity'],

+ 2 - 2
order_add.php

@@ -359,8 +359,8 @@ if ($customerId > 0) {
                 </td>
             </tr>
             <tr>
-                <th width="8%" nowrap>最新出货单日期</th>
-                <td><input type="date" id="order_date" name="order_date" value="<?= date('Y-m-d') ?>" class="txt1" style="width: 20%; min-width: 200px;"  /> <span style="color: red">注:当前出货最新出货单号日期</span></td>
+                <th width="8%" nowrap>最新销售单日期</th>
+                <td><input type="date" id="order_date" name="order_date" value="<?= date('Y-m-d') ?>" class="txt1" style="width: 20%; min-width: 200px;"  /> <span style="color: red">注:以上你录入的单号里面最新的销售开单单号日期</span></td>
             </tr>
             <tr>
                 <th width="8%" nowrap>出货日期</th>

+ 1 - 1
order_details.php

@@ -220,7 +220,7 @@ if (!empty($id) && is_numeric($id)) {
 <!--            <span class="info-label">联系人:</span> --><?php //= htmlspecialcharsFix($order['contact_name']) ?>
 <!--        </div>-->
         <div class="info-row">
-            <span class="info-label">最新出货单日期:</span> <?= date('Y-m-d', strtotime($order['order_date'])) ?>
+            <span class="info-label">最新销售单日期:</span> <?= date('Y-m-d', strtotime($order['order_date'])) ?>
         </div>
         <div class="info-row">
             <span class="info-label">出货日期:</span> <?= date('Y-m-d', strtotime($order['shipping_date'])) ?>

+ 2 - 2
order_edit.php

@@ -368,9 +368,9 @@ if (!empty($id) && is_numeric($id)) {
                 </td>
             </tr>
             <tr>
-                <th width="8%">最新出货单日期</th>
+                <th width="8%">最新销售单日期</th>
                 <td>
-                    <input type="date" id="order_date" name="order_date" value="<?= substr($order['order_date'], 0, 10) ?>" class="txt1"style="width: 20%; min-width: 200px;"  /> <span style="color: red">注:当前出货最新出货单号日期</span>
+                    <input type="date" id="order_date" name="order_date" value="<?= substr($order['order_date'], 0, 10) ?>" class="txt1"style="width: 20%; min-width: 200px;"  /> <span style="color: red">注:以上你录入的单号里面最新的销售开单单号日期</span>
                 </td>
             </tr>
             <tr>

+ 33 - 7
rebate_history.php

@@ -41,6 +41,7 @@ if ($roleResult && $row = mysqli_fetch_assoc($roleResult)) {
 $countSql = "SELECT COUNT(*) AS total 
              FROM rebate_redemptions rr
              JOIN customer c ON rr.customer_id = c.id
+             LEFT JOIN employee e ON rr.created_by = e.id
              WHERE 1=1";
 
 // 非管理员和非财务只能查看自己客户的返点历史
@@ -48,11 +49,9 @@ if (!$isAdmin && !$isFinance) {
     $countSql .= " AND c.cs_belong = $employee_id";
 }
 
-
-
 // 添加搜索条件
 if (!empty($keyscode)) {
-    $countSql .= " AND (c.cs_company LIKE '%$keyscode%' OR c.cs_code LIKE '%$keyscode%')";
+    $countSql .= " AND (c.cs_company LIKE '%$keyscode%' OR c.cs_code LIKE '%$keyscode%' OR e.em_user LIKE '%$keyscode%')";
 }
 
 // 添加日期筛选
@@ -113,7 +112,7 @@ if (!$isAdmin && !$isFinance) {
 
 // 添加搜索条件
 if (!empty($keyscode)) {
-    $sql .= " AND (c.cs_company LIKE '%$keyscode%' OR c.cs_code LIKE '%$keyscode%')";
+    $sql .= " AND (c.cs_company LIKE '%$keyscode%' OR c.cs_code LIKE '%$keyscode%' OR e.em_user LIKE '%$keyscode%')";
 }
 
 // 添加日期筛选
@@ -327,7 +326,21 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
         }
         
 
-        
+        .export-btn {
+            display: inline-block;
+            padding: 3px 8px;
+            margin: 0 2px;
+            border-radius: 3px;
+            cursor: pointer;
+            text-decoration: none;
+            font-size: 12px;
+            color: white;
+            box-sizing: border-box;
+            height: 24px;
+            line-height: 18px;
+            vertical-align: middle;
+        }
+              
 
 
         .approve-btn {
@@ -406,7 +419,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
             <input type="date" name="fliterToDate" class="date-input filterSearch" value="<?= $fliterToDate ?>">
         </div>
         <div class="inputSearch">
-            <input type="text" id="keys" class="inputTxt" placeholder="请输入客户名称或编码"
+            <input type="text" id="keys" class="inputTxt" placeholder="请输入客户名称、编码或处理人"
                 value="<?= empty($keyscode) ? '' : $keyscode ?>" />
             <input type="button" id="searchgo" class="searchgo" value="搜索"
                 onClick="location.href='?Keys='+encodeURIComponent(document.getElementById('keys').value)" />
@@ -449,7 +462,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
                 ?>
                 <div class="tline">
                     <div class="col2"><?= $tempNum ?></div>
-                    <div class="col3 rb-slidepanel" data-id="<?= $redemption['redemption_id'] ?>"><?= htmlspecialcharsFix($redemption['cs_code']) ?></div>
+                    <div class="col3 rb-slidepanel" data-id="<?= $redemption['redemption_id'] ?>" title="<?= htmlspecialcharsFix($redemption['cs_code'])  ?>"><?= htmlspecialcharsFix($redemption['cs_code'])  ?></div>
                     <div class="col4"><?= date('Y-m-d', strtotime($redemption['redemption_date'])) ?></div>
                     <div class="col5"><?= $redemption['product_count'] ?></div>
                     <div class="col6 <?= $statusClass ?>"><?= number_format($redemption['total_rebate_amount'], 2) ?> 元</div>
@@ -471,8 +484,11 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
                                data-id="<?= $redemption['redemption_id'] ?>" data-status="1">通过</a>
                             <a href="javascript:void(0)" class="examine-btn reject-btn" 
                                data-id="<?= $redemption['redemption_id'] ?>" data-status="2">拒绝</a>
+                            <a href="javascript:void(0)" class="export-btn" style="background-color: #3498db;" 
+                               data-id="<?= $redemption['redemption_id'] ?>">导出CSV</a>                               
                         </span>
                         <?php endif; ?>
+
                     </div>
                 </div>
                 <div class="notepanel clear" id="detail-<?= $redemption['redemption_id'] ?>">
@@ -684,6 +700,12 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
             }
         });
         
+        // 导出CSV按钮点击事件
+        $('.export-btn').on('click', function() {
+            var redemptionId = $(this).data('id');
+            window.location.href = 'export_rebate_details.php?redemption_id=' + redemptionId;
+        });
+        
         // 加载返点详情
         function loadRedemptionDetails(redemptionId) {
             var $detailsContainer = $('#rebate-details-' + redemptionId);
@@ -704,6 +726,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
                         var html = '<table class="detail-table" style="width:100%; border-collapse: collapse;">';
                         html += '<tr style="background-color: #eee; font-weight: bold;">' +
                                 '<th style="padding: 8px; text-align: left; border: 1px solid #ddd;">订单编号</th>' +
+                                '<th style="padding: 8px; text-align: center; border: 1px solid #ddd;">最新销售单日期</th>' +
+                                '<th style="padding: 8px; text-align: center; border: 1px solid #ddd;">出货日期</th>' +
                                 '<th style="padding: 8px; text-align: left; border: 1px solid #ddd;">产品名称</th>' +
                                 '<th style="padding: 8px; text-align: center; border: 1px solid #ddd;">数量</th>' +
                                 '<th style="padding: 8px; text-align: right; border: 1px solid #ddd;">返点单价</th>' +
@@ -713,6 +737,8 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['
                         $.each(data.items, function(i, item) {
                             html += '<tr style="border-bottom: 1px solid #ddd;">' +
                                    '<td style="padding: 8px; border: 1px solid #ddd;">' + item.order_code + '</td>' +
+                                   '<td style="padding: 8px; text-align: center; border: 1px solid #ddd;">' + (item.order_date || '-') + '</td>' +
+                                   '<td style="padding: 8px; text-align: center; border: 1px solid #ddd;">' + (item.shipping_date || '-') + '</td>' +
                                    '<td style="padding: 8px; border: 1px solid #ddd;">' + item.product_name + '</td>' +
                                    '<td style="padding: 8px; text-align: center; border: 1px solid #ddd;">' + item.quantity + ' ' + item.unit + '</td>' +
                                    '<td style="padding: 8px; text-align: right; border: 1px solid #ddd;">' + item.rebate_amount + ' 元/件</td>' +