#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""新产业 / 迪安 —— 不同货号的 2026 分季度采购金额。

数据源：用户表《刘子研三季度数据-截止至9.30.xls》sheet「2026年销售数据」
口径：标准销售订单 · 已审核 · 非赠品 · 排除关联方；季度按【合同日期】切
输出：销售分析/新产业_迪安_货号分季度采购额.xlsx
"""
import os
import pandas as pd

ROOT = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
USR = os.path.expanduser('~/.hermes/profiles/zone-b/cache/documents/doc_6f16ee249d8e_刘子研三季度数据-截止至9.30(1).xls')
OUT = os.path.join(ROOT, '销售分析', '新产业_迪安_货号分季度采购额.xlsx')
QN = {1: 'Q1', 2: 'Q2', 3: 'Q3', 4: 'Q4'}
TARGETS = [('新产业', '新产业'), ('迪安', '迪安')]


def main():
    df = pd.read_excel(USR, sheet_name='2026年销售数据', header=0, engine='xlrd')
    df.columns = [str(c).strip() for c in df.columns]
    df['_d'] = pd.to_datetime(df['合同日期'], errors='coerce')
    df['_q'] = df['_d'].dt.quarter
    df['_yr'] = df['_d'].dt.year
    df['_amt'] = pd.to_numeric(df['价税合计'], errors='coerce').fillna(0)
    hk = '货号#' if '货号#' in df.columns else '货号'
    df['_sku'] = df[hk].fillna('（未填货号）').astype(str).str.strip().replace({'': '（未填货号）', 'nan': '（未填货号）'})

    k = df['_yr'] == 2026
    k = k & df['单据类型'].astype(str).str.contains('标准销售订单', na=False)
    k = k & df['单据状态'].astype(str).str.contains('已审核', na=False)
    k = k & ~df['是否赠品'].astype(str).str.strip().isin(['是', 'Y', 'True', 'true'])
    k = k & ~df['客户'].astype(str).str.contains('宝锐|宝泰|横琴', na=False, regex=True)
    d = df[k].copy()

    summaries = {}
    for label, kw in TARGETS:
        sub = d[d['客户'].astype(str).str.contains(kw, na=False)]
        print('\n' + '═' * 78)
        print('【%s】2026 年 —— %s（%d 行 / ¥%.2f）' % (label, '、'.join(sorted(sub['客户'].unique())) or '无记录', len(sub), sub['_amt'].sum()))
        print('═' * 78)
        if sub.empty:
            continue
        pv = (sub.groupby(['_sku', '_q'])
                 .agg(金额=('_amt', 'sum'), 数量=('销售数量', 'sum'), 单数=('单据编号', 'nunique'))
                 .reset_index())
        mat = pv.pivot_table(index='_sku', columns='_q', values='金额', aggfunc='sum', fill_value=0)
        for q in (1, 2, 3, 4):
            if q not in mat.columns:
                mat[q] = 0.0
        mat = mat[[1, 2, 3, 4]]
        mat.columns = [QN[q] for q in (1, 2, 3, 4)]
        mat['合计'] = mat.sum(axis=1)
        mat = mat.sort_values('合计', ascending=False)
        print('   %-24s %10s %10s %10s %10s %12s' % ('货号', 'Q1', 'Q2', 'Q3', 'Q4', '合计'))
        for sku, r in mat.iterrows():
            print('   %-24s %10.2f %10.2f %10.2f %10.2f %12.2f' % (str(sku)[:24], r['Q1'], r['Q2'], r['Q3'], r['Q4'], r['合计']))
        _b, _a = sub['_amt'].sum(), mat['合计'].sum()
        assert abs(_b - _a) < 0.05, '守恒失败: %.2f vs %.2f' % (_b, _a)
        print('   %-24s %10.2f %10.2f %10.2f %10.2f %12.2f' % ('— 合计 —', mat['Q1'].sum(), mat['Q2'].sum(), mat['Q3'].sum(), mat['Q4'].sum(), mat['合计'].sum()))
        print('   货号数 %d ｜ 订单数 %d ｜ 数量合计 %.1f' % (len(mat), sub['单据编号'].nunique(), sub['销售数量'].sum()))
        summaries[label] = mat.reset_index().rename(columns={'_sku': '货号'})

    os.makedirs(os.path.dirname(OUT), exist_ok=True)
    with pd.ExcelWriter(OUT) as w:
        for label, mat in summaries.items():
            mat.to_excel(w, sheet_name=label, index=False)
        det = d[d['客户'].astype(str).str.contains('新产业|迪安', na=False)][
            ['_d', '单据编号', '客户', '销售员', '_sku', '物料名称', '销售数量', '含税单价', '_amt', '出货批号#']
        ].rename(columns={'_d': '合同日期', '_sku': '货号', '_amt': '价税合计'})
        det.sort_values(['客户', '合同日期']).to_excel(w, sheet_name='明细', index=False)
    print('\n→ %s' % OUT)


if __name__ == '__main__':
    main()
