import { PageParams } from "../base/BaseDataModel";
import { StableFeeItemModelDto, TempFeeItemModelDto } from "../receivable/receivableModel";

/**
 * 提单查询参数
 */
export interface LadingBillMainParam extends PageParams {
    /**
     * 编号
     */
    id?: number;

    /**
     * 主体
     */
    stakeholder?: number;

    /**
     * 业务类型
     */
    businessType?: number;

    /**
     * 订舱号
     */
    bookingNumber?: string;

    /**
     * 提单号
     */
    waybillNumber?: string;

    /**
     * 客户
     */
    customerId?: number;

    /**
     * 航司名称
     */
    airlinesId?: number;

    /**
     * 订舱代理
     */
    bookingAgentId?: number;

    /**
     * 业务员
     */
    salesmanId?: number;

    /**
     * 编号
     */
    ids?: number[];

    /**
     * StateType 提单状态类型
     */
    stateType?: number;

    /**
     * BookingState 订舱状态
     */
    bookingState?: number;

    /**
     * 操作状态
     */
    operateState?: number;

    /**
     * 应付状态
     */
    payState?: number;

    /**
     * 应收状态
     */
    receivableState?: number;

    /**
     * 提单时间类型
     */
    ladingBillDateType?: number;

    /**
     * 起始时间
     */
    beginDate?: string;

    /**
     * 结束时间
     */
    endDate?: string;
}

/**
 * 新增或编辑提单
 */
export interface LadingBillMainDto {
    /** 编号 */
    id?: number;

    /** 主体 */
    stakeholder?: number;

    /** 主体名称 */
    stakeholderName?: string;

    /** 业务类型 */
    businessType?: number;

    /** 订舱时间 */
    bookingTime?: string;

    /** 起飞时间 */
    takeOffTime?: string;

    /** 订舱号 */
    bookingNumber?: string;

    /** 提单号 */
    waybillNumber?: string;

    /** 客户 */
    customerId?: number;

    /** 航司名称 */
    airlinesId?: number;

    /** 订舱代理 */
    bookingAgentId?: number;

    /** 始发港 */
    departurePort?: string;

    /** 中转港 */
    transitPort?: string;

    /** 目的港 */
    destinationPort?: string;

    /** 国家/地区 */
    countryId?: number;

    /** 邮编 */
    zipCode?: string;

    /** 地址 */
    address?: string;

    /** 业务员 */
    salesmanId?: number;

    /** 卖价 */
    sellingPrice?: number;

    /** 成本价 */
    costPrice?: number;

    /** 结算价 */
    settlementPrice?: number;

    /** 件数 */
    orderNumber?: number;

    /** 重量 */
    weight?: number;

    /** 体积 */
    volume?: number;

    /** 订舱备注 */
    bookingRemark?: string;

    /** 包装件数 */
    packageNumber?: number;

    /** 毛重 */
    grossWeight?: number;

    /** 计费体积 */
    feeVolume?: number;

    /** 体积重 */
    volumeWeight?: number;

    /** 计费重 */
    feeWeight?: number;

    /** 分配比例 */
    allocationRatio?: number;

    /** 应收重量 */
    receivableWeight?: number;

    /** 应付重量 */
    payableWeight?: number;

    /** 计费备注 */
    feeRemark?: number;

    /** 订舱状态 */
    bookingState?: number;

    /** 操作状态 */
    operationalState?: number;

    /** 应收状态 */
    receivableState?: number;

    /** 应付状态 */
    payableState?: number;

    /** 创建人编号 */
    createUserId?: number;

    /** 创建人名 */
    createUserName?: string;

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

    /** 修改人编号 */
    updateUserId?: number;

    /** 修改人名 */
    updateUserName?: string;

    /** 修改时间 */
    updateTime?: string;

    /** 分公司编号 */
    branchOfficeCode?: string;

    /** 客户名称 */
    customerName?: string;
}


/**
 * 提单费用设置
 */
export interface LadingBillFeeSetDto {
    /**
     * 费用编号
     */
    id: string;

    /**
     * 提单主单编号
     */
    ladingBillMainId: number;

    /**
     * 应收
     */
    billReceivable: BillReceivableDto;

    /**
     * 应付
     */
    payableModel: BillPayableDto;
}

/**
 * 提单应收费用
 */
export interface BillPayableDto {
    /**
     * 临时费用
     */
    tempFeeItemModelList: TempFeeItemModelDto[];

    /**
     * 稳定费用
     */
    stableFeeItemModelList: LadingPayableStableFeeItemModelDto[];

    /**
     * 参考应付（应付）模板编号
     */
    referencePayableModelId: string;
}
export interface LadingPayableStableFeeItemModelDto extends StableFeeItemModelDto {
    /**
         * 日期版本
         */
    dateVersion: string;

    /**
     * 特殊费用类型
     */
    specialFeeItemList?: number[];

    /**
     * 特殊费用类型名称
     */
    specialFeeItemNameList?: string[];
}
/**
 * 提单应付费用
 */
export interface BillReceivableDto {
    /**
     * 临时费用
     */
    tempFeeItemModelList: TempFeeItemModelDto[];

    /**
     * 稳定费用
     */
    stableFeeItemModelList: StableFeeItemModelDto[];

    /**
     * 参考应收模板编号
     */
    referenceReceivableModelId: string;
}

/**
 * 客户费用编号分组接口参数
 */
export interface FeeGroupList {
    parentIdList: string[]//费用编号
}
/**
 * 客户费用编号分组接口返回的数据
 */
export interface CostFeeSetProductIdData {
    /**
     * 服务商编号
     */
    providerId: string;

    /**
     * 当前系统时间
     */
    currentDate: string;

    /**
     * 查询当前时间对应的父ID
     */
    parentData: boolean;

    /**
     * 同版本编号
     */
    parentIdList: string[];
}

/**
 * 提单费用计算结果
 */
export interface LadingBillFeeQueryResultDto {
    /**
     * FeeSetType 结算类型
     */
    feeSetType: number;

    /**
     * 结算类型名称
     */
    feeSetTypeName: string;

    /**
     * 服务商编号
     */
    providerId: string;

    /**
     * 名称
     */
    providerName: string;

    /**
     * 费项编号
     */
    feeItemCategoryId: number;

    /**
     * 费项名称
     */
    feeItemCategoryName: string;

    /**
     * 费用金额
     */
    fee: number;

    /**
     * 计费重量
     */
    feeWeight: number;

    /**
     * 体积
     */
    volume: number;

    /**
     * 公式描述
     */
    formulaDescription: string;

    /**
     * 提示信息
     */
    message: string;

    /**
     * 费用明细类型
     */
    feeItemDtoList: FeeItemResultDto[];

    /**
     * 产品编号
     */
    productId: string;

    /**
     * 产品名称
     */
    productName: string;
}

/**
 * 费用明细
 */
export interface FeeItemResultDto {
    /**
     * 费用（科目）编号
     */
    feeItemId: number;

    /**
     * 费用名称
     */
    feeItemName: string;

    /**
     * 费用
     */
    fee: number;

    /**
     * 汇率
     */
    exchangeRate: number;

    /**
     * 原币金额
     */
    oriCurrencyFee: number;

    /**
     * 原币种
     */
    oriCurrencyCode: string;
}

/**
 * 货单金额参数
 */
export interface LadingBillMoneyParam {
    /**
     * 编号
     */
    id?: number;

    /**
     * 主单编号
     */
    mainId?: number;

    /**
     * 订舱号
     */
    bookingNumber?: string;

    /**
     * 提单号
     */
    waybillNumber?: string;

    /**
     * 结算类型 (0: 结算, 1: 应收, 2: 应付) - 都是预估费用
     */
    feeSetType?: 0 | 1 | 2;

    /**
     * 渠道商
     */
    providerId?: number;

    /**
     * 费项类型
     */
    feeItemCategory?: number;

     /**
     * 是否显示尾程 0: 否 1: 是
     */
    showFinal?: 0 | 1;

    /**
     * 单号类型
     */
    billCodeType?: number
}

// 提单费用分页参数
export interface LadingBillMoneyPageParam extends LadingBillMoneyParam, PageParams {}

export interface LadingBillMoneyDetailParam {
    /**
     * 主单编号
     *
     * @mbg.generated
     */
    mainId?: number;

    /**
     * 费用编号
     *
     * @mbg.generated
     */
    billMoneyId?: number;

    /**
     * 费项类型
     *
     * @mbg.generated
     */
    feeItemCategory?: number;
}

/**
 * 保存费用参数
 */
export interface LadingBillMoneyDto {
    /**
     * 编号
     */
    id: number;

    /**
     * 主单编号
     */
    mainId: number;

    /**
     * 订舱号
     */
    bookingNumber: string;

    /**
     * 提单号
     */
    waybillNumber: string;

    /**
     * 结算类型 (0: 结算, 1: 应收, 2: 应付) - 都是预估费用
     */
    feeSetType: number;
    /**
     * 结算类型名称
     */
    feeSetTypeName: string;

    /**
     * 渠道商
     */
    providerId: number;

    /**
     * 渠道商名称
     */
    providerName: string;

    /**
     * 产品编号
     */
    productId: number;
    /**
     * 产品名称
     */
    productName: string;

    /**
     * 费项类型
     */
    feeItemCategory: number;

    /**
     * 费项名称
     */
    feeItemCategoryName: string;

    /**
     * 计费重量
     */
    feeWeight: number;

    /**
     * 费用
     */
    fee: number;

    /**
     * 费用设置编号
     */
    billFeeSet: string;

    /**
     * 提单费用明细
     */
    ladingBillMoneyDetailDtoList: LadingBillMoneyDetailDto[];
}

/**
 * 提单费用明细数据传输对象
 */
export interface LadingBillMoneyDetailDto {
    /**
     * 编号
     */
    id: number;

    /**
     * 主单编号
     */
    mainId: number;

    /**
     * 费用编号
     */
    billMoneyId: number;

    /**
     * 费项类型
     */
    feeItemCategory: number;

    /**
     * 费用类型
     */
    feeItemId: number;

    /**
     * 费用名称
     */
    feeItemName: string;

    /**
     * 币种
     */
    currencyCode: string;

    /**
     * 原币费用
     */
    originalFee: number;

    /**
     * 费用
     */
    fee: number;

    /**
     * 汇率版本
     */
    rateVersion: string;

    /**
     * 汇率
     */
    rate: number;
}

/**
 * 批量更新状态参数
 */
export interface LadingBillUpdateState {
    /**
    * 编号
    */
    ids: number[];

    /**
     * StateType 提单状态类型
     */
    stateType?: number;

    /**
    * BookingState 订舱状态
    */
    bookingState?: number;

    /**
    * 操作状态
    */
    operateState?: number;

    /**
    * 应付状态
    */
    payState?: number;

    /**
    * 应收状态
    */
    receivableState?: number;
}

/**
 * 客户账单
 */
export interface CustomerBillDto {
    /**
     * 编号
     */
    id: number;

    /**
    * 客户
    *
    * @mbg.generated
    */
    customerId: number;

    /**
     * 客户名称
     */
    customerName: string;

    /**
     * 订舱时间
     */
    bookingTime: string;

    /**
     * 运单号(提单号)
     */
    waybillNumber: string;

    /**
     * 件数
     */
    orderNumber: number;

    /**
     * 重量
     */
    weight: number;

    /**
     * 体积
     */
    volume: number;

    /**
     * 毛重
     */
    grossWeight: number;

    /**
     * 始发港
     */
    departurePort: string;

    /**
     * 目的港
     */
    destinationPort: string;

    /**
     * 总费用
     */
    totalFee: number;

    /**
     * 费用明细
     */
    customerBillMoneyDetailList: CustomerBillMoneyDetail[];
}

/**
 * 账单的费用明细
 */
export interface CustomerBillMoneyDetail {
    /**
    * 费用类型
    *
    * @mbg.generated
    */
    feeItem: number;

    /**
     * 费用类型
     *
     * @mbg.generated
     */
    feeItemName: string;

    /**
     * 币种
     *
     * @mbg.generated
     */
    currencyCode: string;

    /**
     * 原币费用
     *
     * @mbg.generated
     */
    fee: number;
}

/**
 * 
 */
export interface OrderReCountFeeDto {
     /**
     * 提单编号
     *
     * @mbg.generated
     */
    ladingId: string;

    /**
     * 订单编号
     */
    orderIdList: string[];
}
/**
 * 尾程重算参数
 */
export interface OrderReCountFeeParam {
    /**
     * 是否拉取数据
     */
    pullData: boolean;

    /**
     * 提单、订单数据
     */
    orderReCountFeeDtoList: OrderReCountFeeDto[];
}