import type { WmsShippingDetailsForm, WmsShippingDetailsVO } from '@/api/wms/wmsShippingDetails/types';

export interface WmsShippingBillVO {
  /**
   * 发货单ID
   */
  shippingBillId: string | number;

  /**
   * 发货单号
   */
  shippingCode: string;

  /**
   * 发货单类型
   */
  shippingType: string;

  /**
   * 发货方式：1公司仓库发货 2供应商代发货
   */
  shippingMode: string;

  /**
   * 绑定类型：1项目 2合同
   */
  bindType: string;

  /**
   * 项目ID
   */
  projectId: string | number;

  /**
   * 项目编号（冗余，方便导出）
   */
  projectCode: string;

  /**
   * 项目名称（冗余，方便导出）
   */
  projectName: string;

  /**
   * 客户ID（逻辑外键）
   */
  customerId: string | number;

  /**
   * 客户联系人ID（逻辑外键）
   */
  customerContactId?: string | number;

  /**
   * 客户名称（冗余，方便导出）
   */
  customerName: string;

  /**
   * 收货地址
   */
  shippingAddress: string;

  /**
   * 关联单号
   */
  inventoryAmount: string;

  /**
   * 来源单据类型（如PO采购订单、SO销售订单、PR项目采购申请等）
   */
  sourceBillType: string;

  /**
   * 来源单据ID（逻辑外键，不建物理外键）
   */
  sourceBillId: string | number;

  /**
   * 来源单据编号
   */
  sourceBillCode: string;

  /**
   * 合同ID（逻辑外键）
   */
  contractId: string | number;

  /**
   * 合同编号（冗余，方便导出）
   */
  contractCode: string;

  /**
   * 合同名称（冗余，方便导出）
   */
  contractName: string;

  /**
   * SAP订单号（来源合同表，展示用）
   */
  orderContractCode?: string;

  /**
   * 供应商
   */
  supplier: string;

  /**
   * 供应商ID（逻辑外键）
   */
  supplierId: string | number;

  /**
   * 联系人
   */
  contactUser: string;

  /**
   * 联系电话
   */
  contactNumber: string;

  /**
   * 收货联系人
   */
  receiverName: string;

  /**
   * 收货联系电话
   */
  receiverPhone: string;

  /**
   * 物流公司
   */
  logisticsCompany: string;

  /**
   * 运单号
   */
  trackingNo: string;

  /**
   * 物流联系电话
   */
  logisticsPhone: string;

  /**
   * 发货说明
   */
  directions: string;

  /**
   * 计划到货时间（冗余，用于未按时发货台账）
   */
  planArrivalTime: string;

  /**
   * 实际发货时间
   */
  shippingTime: string;

  /**
   * 客户收货时间
   */
  receivedTime: string;

  /**
   * 业务完成时间（如SAP投料 / 内部流程完成）
   */
  completedTime: string;

  /**
   * 发货单状态(1暂存 2审批中 3完成)
   */
  outStockBillStatus: string;

  /**
   * 流程状态
   */
  flowStatus: string;

  /**
   * 是否需要到货确认（1是 0否）
   */
  needArrivalConfirm?: string;

  /**
   * 到货标识（0全部到货 1部分到货）
   */
  isAllReceiving?: string;

  /**
   * 到货收货单附件OSS ID
   */
  arrivalReceiptOssId?: string;

  /**
   * 到货确认时间
   */
  arrivalConfirmTime?: string;

  /**
   * 到货确认人ID
   */
  arrivalConfirmBy?: string | number;

  /**
   * 到货确认人姓名
   */
  arrivalConfirmByName?: string;

  /**
   * 发货状态，字典shipping_status：1待发货 2已发货 3已收货 4已完成
   */
  shippingStatus: string;

  /**
   * 仓库ID（预留）
   */
  warehouseId: string | number;

  /**
   * 仓库名称（冗余，方便导出）
   */
  warehouseName: string;

  /**
   * 备注
   */
  remark: string;

  /**
   * 发货单明细列表
   */
  itemsVo?: WmsShippingDetailsVO[];
  /**
   * 创建人（申请人），用于到货确认身份判断
   */
  createBy?: string | number;

  /**
   * 创建时间
   */
  createTime?: string;
}

export interface WmsShippingBillForm extends BaseEntity {
  /**
   * 发货单ID
   */
  shippingBillId?: string | number;

  /**
   * 发货单号
   */
  shippingCode?: string;

  /**
   * 发货单类型
   */
  shippingType?: string;

  /**
   * 发货方式：1公司仓库发货 2供应商代发货
   */
  shippingMode?: string;

  /**
   * 绑定类型：1项目 2合同
   */
  bindType?: string;

  /**
   * 项目ID
   */
  projectId?: string | number;

  /**
   * 项目编号（冗余，方便导出）
   */
  projectCode?: string;

  /**
   * 项目名称（冗余，方便导出）
   */
  projectName?: string;

  /**
   * 客户ID（逻辑外键）
   */
  customerId?: string | number;

  /**
   * 客户联系人ID（逻辑外键）
   */
  customerContactId?: string | number;

  /**
   * 客户名称（冗余，方便导出）
   */
  customerName?: string;

  /**
   * 收货地址
   */
  shippingAddress?: string;

  /**
   * 关联单号
   */
  inventoryAmount?: string;

  /**
   * 来源单据类型（如PO采购订单、SO销售订单、PR项目采购申请等）
   */
  sourceBillType?: string;

  /**
   * 来源单据ID（逻辑外键，不建物理外键）
   */
  sourceBillId?: string | number;

  /**
   * 来源单据编号
   */
  sourceBillCode?: string;

  /**
   * 合同ID（逻辑外键）
   */
  contractId?: string | number;

  /**
   * 合同编号（冗余，方便导出）
   */
  contractCode?: string;

  /**
   * 合同名称（冗余，方便导出）
   */
  contractName?: string;

  /**
   * 供应商
   */
  supplier?: string;

  /**
   * 供应商ID（逻辑外键）
   */
  supplierId?: string | number;

  /**
   * 联系人
   */
  contactUser?: string;

  /**
   * 联系电话
   */
  contactNumber?: string;

  /**
   * 收货联系人
   */
  receiverName?: string;

  /**
   * 收货联系电话
   */
  receiverPhone?: string;

  /**
   * 物流公司
   */
  logisticsCompany?: string;

  /**
   * 运单号
   */
  trackingNo?: string;

  /**
   * 物流联系电话
   */
  logisticsPhone?: string;

  /**
   * 发货说明
   */
  directions?: string;

  /**
   * 计划到货时间（冗余，用于未按时发货台账）
   */
  planArrivalTime?: string;

  /**
   * 实际发货时间
   */
  shippingTime?: string;

  /**
   * 客户收货时间
   */
  receivedTime?: string;

  /**
   * 业务完成时间（如SAP投料 / 内部流程完成）
   */
  completedTime?: string;

  /**
   * 发货单状态(1暂存 2审批中 3完成)
   */
  outStockBillStatus?: string;

  /**
   * 流程状态
   */
  flowStatus?: string;

  /**
   * 发货状态，字典shipping_status：1待发货 2已发货 3已收货 4已完成
   */
  shippingStatus?: string;

  /**
   * 仓库ID（预留）
   */
  warehouseId?: string | number;

  /**
   * 仓库名称（冗余，方便导出）
   */
  warehouseName?: string;

  /**
   * 备注
   */
  remark?: string;

  /**
   * 发货单明细列表（主子表提交用）
   */
  detailsList?: WmsShippingDetailsForm[];

  /**
   * 是否需要到货确认（1是 0否）
   */
  needArrivalConfirm?: string;

  /**
   * 到货标识（0全部到货 1部分到货）
   */
  isAllReceiving?: string;

  /**
   * 到货收货单附件OSS ID
   */
  arrivalReceiptOssId?: string;

  /**
   * 到货确认时间
   */
  arrivalConfirmTime?: string;

  /**
   * 到货确认人ID
   */
  arrivalConfirmBy?: string | number;

  /**
   * 到货确认人姓名
   */
  arrivalConfirmByName?: string;

  /**
   * 流程编码（后端发起流程用）
   */
  flowCode?: string;

  /**
   * 流程变量
   */
  variables?: any;

  /**
   * 到货确认节点抄送人ID，发起流程时按绑定来源归一赋值
   */
  tManagerId?: string | number;

  /**
   * 流程业务扩展字段
   */
  bizExt?: any;
}

export interface WmsShippingBillQuery extends PageQuery {
  /**
   * 发货单号
   */
  shippingCode?: string;

  /**
   * 发货单类型
   */
  shippingType?: string;

  /**
   * 发货方式：1公司仓库发货 2供应商代发货
   */
  shippingMode?: string;

  /**
   * 项目ID
   */
  projectId?: string | number;

  /**
   * 项目编号（冗余，方便导出）
   */
  projectCode?: string;

  /**
   * 项目名称（冗余，方便导出）
   */
  projectName?: string;

  /**
   * 客户ID（逻辑外键）
   */
  customerId?: string | number;

  /**
   * 客户名称（冗余，方便导出）
   */
  customerName?: string;

  /**
   * 收货地址
   */
  shippingAddress?: string;

  /**
   * 关联单号
   */
  inventoryAmount?: string;

  /**
   * 来源单据类型（如PO采购订单、SO销售订单、PR项目采购申请等）
   */
  sourceBillType?: string;

  /**
   * 来源单据ID（逻辑外键，不建物理外键）
   */
  sourceBillId?: string | number;

  /**
   * 来源单据编号
   */
  sourceBillCode?: string;

  /**
   * 合同ID（逻辑外键）
   */
  contractId?: string | number;

  /**
   * 合同编号（冗余，方便导出）
   */
  contractCode?: string;

  /**
   * 合同名称（冗余，方便导出）
   */
  contractName?: string;

  /**
   * 供应商
   */
  supplier?: string;

  /**
   * 供应商ID（逻辑外键）
   */
  supplierId?: string | number;

  /**
   * 联系人
   */
  contactUser?: string;

  /**
   * 联系电话
   */
  contactNumber?: string;

  /**
   * 收货联系人
   */
  receiverName?: string;

  /**
   * 收货联系电话
   */
  receiverPhone?: string;

  /**
   * 物流公司
   */
  logisticsCompany?: string;

  /**
   * 运单号
   */
  trackingNo?: string;

  /**
   * 物流联系电话
   */
  logisticsPhone?: string;

  /**
   * 发货说明
   */
  directions?: string;

  /**
   * 计划到货时间（冗余，用于未按时发货台账）
   */
  planArrivalTime?: string;

  /**
   * 实际发货时间
   */
  shippingTime?: string;

  /**
   * 客户收货时间
   */
  receivedTime?: string;

  /**
   * 业务完成时间（如SAP投料 / 内部流程完成）
   */
  completedTime?: string;

  /**
   * 发货单状态(1暂存 2审批中 3完成)
   */
  outStockBillStatus?: string;

  /**
   * 流程状态
   */
  flowStatus?: string;

  /**
   * 发货状态，字典shipping_status：1待发货 2已发货 3已收货 4已完成
   */
  shippingStatus?: string;

  /**
   * 是否需要到货确认（1是 0否）
   */
  needArrivalConfirm?: string;

  /**
   * 到货标识（0全部到货 1部分到货）
   */
  isAllReceiving?: string;

  /**
   * 仓库ID（预留）
   */
  warehouseId?: string | number;

  /**
   * 仓库名称（冗余，方便导出）
   */
  warehouseName?: string;

  /**
   * 日期范围参数
   */
  params?: any;
}

export interface WmsShippingArrivalConfirmForm {
  /**
   * 发货单ID
   */
  shippingBillId: string | number;
  /**
   * 到货标识（0全部到货 1部分到货）
   */
  isAllReceiving: string;
  /**
   * 到货收货单附件OSS ID，多个逗号分隔
   */
  arrivalReceiptOssId: string;
  /**
   * 到货确认时间（可选）
   */
  arrivalConfirmTime?: string;
  /**
   * 当前任务ID
   */
  taskId: string | number;
}
