using Google.Protobuf;
using Newtonsoft.Json;
using OASystem.Domain.Entities.Financial;
using OASystem.Domain.Entities.Groups;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OASystem.Domain.ViewModels.Statistics
{
    /// <summary>
    /// 团组报表
    /// </summary>
    public class GroupStatementView
    {
    }

    /// <summary>
    /// 团组报表
    /// Items View
    /// </summary>
    public class GroupStatementItemView
    {
        /// <summary>
        /// 序号
        /// </summary>
        public int Row_Number { get; set; }

        /// <summary>
        /// 是否操作完成 
        /// 0否1是
        /// </summary>
        public int IsSure { get; set; }

        /// <summary>
        /// 主键Id
        /// 团组Id
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// 团号
        /// </summary>
        public string? TourCode { get; set; }

        /// <summary>
        /// 接团操作人
        /// </summary>
        public string? JietuanOperator { get; set; }

        /// <summary>
        /// 团组等级Id
        /// </summary>
        public int TeamLevId { get; set; }

        /// <summary>
        /// 团组等级 
        /// </summary>
        public string? TeamLev { get; set; }

        /// <summary>
        /// 团组名称
        /// </summary>
        public string? TeamName { get; set; }

        /// <summary>
        /// 客户名称
        /// </summary>
        public string? ClientName { get; set; }

        /// <summary>
        /// 客户所属公司
        /// </summary>
        public string? ClientUnit { get; set; }

        /// <summary>
        /// 团组类型Id
        /// </summary>
        public int TeamTypeId { get; set; }

        /// <summary>
        /// 团组类型
        /// </summary>
        public string? TeamType { get; set; }

        /// <summary>
        /// 出团日期
        /// </summary>
        public DateTime VisitDate { get; set; }

        /// <summary>
        /// 出行天数
        /// </summary>
        public int VisitDays { get; set; }

        /// <summary>
        /// 出行人数
        /// </summary>
        public int VisitPNumber { get; set; }

        /// <summary>
        /// 最后收款时间
        /// </summary>
        public DateTime? LastCollectionTime { get; set; }

    }

    /// <summary>
    /// 团组报表
    /// Details View
    /// </summary>
    public class GroupStatementDetailsView
    {
        /// <summary>
        /// 费用总计 描述
        /// </summary>
        public string? FeeTotalStr { get; set; }

        /// <summary>
        /// 团组收入
        /// Data View 
        /// </summary>
        public GroupIncomeView? GroupIncome { get; set; }

        /// <summary>
        /// 团组收入
        /// 描述
        /// </summary>
        public string? GroupIncomeStr { get; set; }

        /// <summary>
        /// 团组支出
        /// </summary>
        public GroupExpenditureView? GroupExpenditure { get; set; }
    }

    #region 团组收入

    /// <summary>
    /// 团组收入 
    /// Data View
    /// </summary>
    public class GroupIncomeView
    {
        /// <summary>
        /// 应收 Items
        /// </summary>
        public List<Gsd_ForeignReceivablesView>? Receivables { get; set; }

        /// <summary>
        /// 应收 Str
        /// </summary>
        public string? ReceivableStr { get; set; }

        /// <summary>
        /// 已收 Items
        /// </summary>
        public List<Gsd_ProceedsReceivedView>? ProceedsReceivedViews { get; set; }

        /// <summary>
        /// 已收 Str
        /// </summary>
        public string? ProceedsReceivedStr { get; set; }

        /// <summary>
        /// 支出费用 Items
        /// </summary>
        public List<Gsd_ExtraCostsView>? ExtraCostsViews { get; set; } 

        /// <summary>
        /// 支出费用 Str
        /// </summary>
        public string? ExtraCostsStr { get; set; } 

        /// <summary>
        /// 收款退还 Items
        /// </summary>
        public List<Gsd_PaymentRefundAndOtherMoneyView>? PaymentRefundAndOtherMoneyViews { get; set; }

        /// <summary>
        /// 收款退还 Str
        /// </summary>
        public string? PaymentRefundAndOtherMoneyStr { get; set; }
    }

    /// <summary>
    /// 应收报表
    /// </summary>
    public class Gsd_ForeignReceivablesView
    {
        public int Id { get; set; }

        public int diid { get; set; }

        /// <summary>
        /// 添加方式   
        /// 0 - 账单模块   1 - 成本预算模块 2 - 实际报价
        /// </summary>
        public int AddingWay { get; set; }

        /// <summary>
        /// 审核状态 AddingWay==2该项有值
        /// 0 - 未审核 1 - 审核通过 2 - 审核不通过
        /// </summary>
        public int Status { get; set; }

        public string StatusStr
        {
            get
            {
                string str = "-";
                if (AddingWay == 2)
                {
                    if (Status == 0) str = "未审核";
                    else if (Status == 1) str = "审核通过";
                    else if (Status == 2) str = "审核不通过";
                }
                return str;
            }
        }

        public string Auditor { get; set; }

        public string AuditorStr { get {
                string str = "-";
                if (AddingWay == 2)
                {
                    if (Status != 0)
                    {
                        str = @$"{Auditor} ";
                    }
                }
                return str;
            } }

        //public DateTime? AuditTime { get; set; }

        /// <summary>
        /// 费用名称
        /// </summary>
        public string? PriceName { get; set; }

        /// <summary>
        /// 单价
        /// </summary>
        public decimal Price { get; set; } = 0.00M;

        /// <summary>
        /// 数量
        /// </summary>
        public int Count { get; set; }

        /// <summary>
        /// 单位
        /// </summary>
        public string? Unit { get; set; }

        /// <summary>
        /// 币种
        /// </summary>
        public int Currency { get; set; }

        /// <summary>
        /// 币种 Code
        /// </summary>
        public string CurrencyCode { get; set; }

        /// <summary>
        /// 币种 Name
        /// </summary>
        public string CurrencyName { get; set; }

        /// <summary>
        /// 汇率
        /// </summary>
        public decimal Rate { get; set; } = 1.0000M;

        /// <summary>
        /// 应收金额
        /// </summary>
        public decimal ItemSumPrice { get; set; } = 0.00M;

        public string Remark { get; set; }
    }

    /// <summary>
    /// 已收报表
    /// </summary>
    public class Gsd_ProceedsReceivedView
    {
        public int Id { get; set; }

        public int Diid { get; set; }

        public string SectionTimeDt { get; set; }

        /// <summary>
        /// 到款时间
        /// </summary>
        public string SectionTime { get {

                string dt = "";

                if (!string.IsNullOrEmpty(SectionTimeDt))
                {
                    DateTime validDate;

                    bool isValid = DateTime.TryParse(SectionTimeDt, out validDate);

                    if (isValid)
                    {
                        dt = validDate.ToString("yyyy-MM-dd");
                    }
                }

                return dt;
            } }

        /// <summary>
        /// 费用金额
        /// </summary>
        public decimal Price { get; set; } = 0.00M;

        /// <summary>
        /// 币种
        /// </summary>
        public int Currency { get; set; }

        /// <summary>
        /// 币种 Code
        /// </summary>
        public string CurrencyCode { get; set; }

        /// <summary>
        /// 币种 Name
        /// </summary>
        public string CurrencyName { get; set; }

        /// <summary>
        /// 支出单位
        /// </summary>
        public string? Client { get; set; }

        /// <summary>
        /// 转账标识Id
        /// </summary>
        public int ReceivablesType { get; set; }

        /// <summary>
        /// 转账类型名称
        /// </summary>
        public string ReceivablesTypeName { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        public string? Remark { get; set; }
    }

    /// <summary>
    /// 超支费用
    /// </summary>
    public class Gsd_ExtraCostsView 
    {
        public int GECId { get; set; }
        public int GECDiId { get; set; }

        /// <summary>
        /// 费用名称
        /// </summary>
        public string? PriceName { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 付款币种
        /// </summary>
        public string? PaymentCurrency { get; set; }

        /// <summary>
        /// 当天汇率
        /// </summary>
        public decimal DayRate { get; set; } = 1.0000M;

        /// <summary>
        /// 人民币金额
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;

        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 费用标识
        /// -1 未选择 0 公转 1 私转
        /// </summary>
        public int OrbitalPrivateTransfer { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PayWay { get; set; }

        /// <summary>
        /// 卡类型
        /// </summary>
        public string? CardType { get; set; }

        /// <summary>
        /// 付款状态
        /// </summary>
        public int IsPay { get; set; }

        /// <summary>
        /// 申请人
        /// </summary>
        public string? Applicant { get; set; }
    }

    /// <summary>
    /// 收款退还
    /// </summary>
    public class Gsd_PaymentRefundAndOtherMoneyView
    {
        public int Id { get; set; }

        public int DiId { get; set; }

        /// <summary>
        /// 费用名称
        /// </summary>
        public string? PriceName { get; set; }

        /// <summary>
        /// 币种code
        /// </summary>
        public string? PayCurrencyCode { get; set; }

        /// <summary>
        /// 币种名称
        /// </summary>
        public string? PayCurrencyName { get; set; }

        /// <summary>
        /// 费用
        /// </summary>
        public decimal Price { get; set; } = 0.00M;

        /// <summary>
        /// 人民币金额
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;

        /// <summary>
        /// 当时汇率
        /// </summary>
        public decimal ThisRate { get; set; } = 1.0000M;

        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 付款时间
        /// </summary>
        public string? PayTime { get; set; }

        /// <summary>
        /// 费用标识
        /// -1 未选择 0 公转 1 私转
        /// </summary>
        public int OrbitalPrivateTransfer { get; set; }

        public string CostMark
        {
            get
            {
                return OrbitalPrivateTransfer == 0 ? "公转" : OrbitalPrivateTransfer == 1 ? "私转" : "-";
            }
        }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PayType { get; set; }

        /// <summary>
        /// 付款状态
        /// 0 未付款 1 已付款
        /// </summary>
        public int IsPay { get; set; }

        public string IsPayLable
        {
            get
            {
                return IsPay == 0 ? "未付款" : IsPay == 1 ? "已付款" : "-";
            }
        }


        /// <summary>
        /// 申请人
        /// </summary>
        public string? Applicant { get; set; }

        public string Remark { get; set; }
    }

    #region 收款退还 View

    public class Gsd_PaymentRefundAndOtherMoneyDataSource1View : Grp_CreditCardPayment 
    {
        /// <summary>
        /// 申请人
        /// </summary>
        public string Appliction { get; set; }
        public int PrId { get; set; }

        public int PrDiId { get; set; }
        public string PrPriceName { get; set; }
        public decimal PrPrice { get; set; } = 0.00M;
        public int PrCurrencyId { get; set; }
        public int PrPayType { get; set; }
        public int PrPriceType { get; set; }
        public string SKTHRemark { get; set; }
    };

    #endregion

    #endregion

    #region 团组支出
    /// <summary>
    /// 团组支出 View
    /// </summary>
    public class GroupExpenditureView
    {
        /// <summary>
        /// 酒店费用集合
        /// </summary>
        public List<GroupHotelFeeView>? GroupHotelFeeViews { get; set; }

        /// <summary>
        /// 酒店费用描述
        /// </summary>
        public string? GroupHotelFeeStr { get; set; }

        /// <summary>
        /// 地接费用集合
        /// </summary>
        public List<GroupCTGGRFeeView>? GroupCTGGRFeeViews { get; set; }

        /// <summary>
        /// 地接费用描述
        /// </summary>
        public string? GroupCTGGRFeeStr { get; set; }

        /// <summary>
        /// 机票费用集合
        /// </summary>
        public List<GroupAirFeeView>? GroupAirFeeViews { get; set; }

        /// <summary>
        /// 机票费用描述
        /// </summary>
        public string? GroupAirFeeStr { get; set; }

        /// <summary>
        /// 签证费用集合
        /// </summary>
        public List<GroupVisaFeeView>? GroupVisaFeeViews { get; set; }

        /// <summary>
        /// 签证费用描述
        /// </summary>
        public string? GroupVisaFeeStr { get; set; }

        /// <summary>
        /// 邀请/公务费用集合
        /// </summary>
        public List<GroupInvitationalFeeView>? GroupInvitationalFeeViews { get; set; }

        /// <summary>
        /// 邀请/公务费用描述
        /// </summary>
        public string? GroupInvitationalFeeStr { get; set; }

        /// <summary>
        /// 保险费用集合
        /// </summary>
        public List<GroupInsuranceFeeView>? GroupInsuranceFeeViews { get; set; }

        /// <summary>
        /// 保险费用描述
        /// </summary>
        public string? GroupInsuranceFeeStr { get; set; }

        /// <summary>
        /// 增减款项费用集合
        /// </summary>
        public List<GroupDecreaseFeeView>? GroupDecreaseFeeViews { get; set; }

        /// <summary>
        /// 增减款项费用描述
        /// </summary>
        public string? GroupDecreaseFeeStr { get; set; }

        public List<GroupRoyaltyFeeView> GroupRoyaltyFeeViews { get; set; }
        public string? GroupRoyaltyFeeStr { get; set; }
    }

    /// <summary>
    /// 酒店费用View
    /// </summary>
    public class GroupHotelFeeView
    {
        /// <summary>
        /// 团组Id
        /// </summary>
        public int HrDiId { get; set; }

        /// <summary>
        /// 酒店Id
        /// </summary>
        public int HrId { get; set; }

        /// <summary>
        /// 城市
        /// </summary>
        public string? City { get; set; }

        /// <summary>
        /// 酒店名称
        /// </summary>
        public string? HotelName { get; set; }

        /// <summary>
        /// 入住时间
        /// </summary>
        public string? CheckInDate { get; set; }

        /// <summary>
        /// 离店时间
        /// </summary>
        public string? CheckOutDate { get; set; }

        /// <summary>
        /// 单间价格
        /// </summary>
        public decimal SingleRoomPrice { get; set; } = 0.00M;

        /// <summary>
        /// 单间数量
        /// </summary>
        public int SingleRoomCount { get; set; }

        /// <summary>
        /// 双间价格
        /// </summary>
        public decimal DoubleRoomPrice { get; set; } = 0.00M;

        /// <summary>
        /// 双间数量
        /// </summary>
        public int DoubleRoomCount { get; set; }

        /// <summary>
        /// 套房价格
        /// </summary>
        public decimal SuiteRoomPrice { get; set; } = 0.00M;

        /// <summary>
        /// 套房数量
        /// </summary>
        public int SuiteRoomCount { get; set; }

        /// <summary>
        /// 其他房型价格
        /// </summary>
        public decimal OtherRoomPrice { get; set; } = 0.00M;

        /// <summary>
        /// 其他房型数量
        /// </summary>
        public int OtherRoomCount { get; set; }

        /// <summary>
        /// 房间费用
        /// </summary>
        public decimal RoomPrice { get; set; }

        /// <summary>
        /// 房间费用币种
        /// </summary>
        public string RoomPriceCurrency { get; set; }

        /// <summary>
        /// 房间费用提示信息
        /// </summary>
        public string RoomInfoTips { get; set; }

        /// <summary>
        /// excel Label
        /// </summary>
        public string RoomFeeLabel { get { return $"{RoomPrice.ToString("#0.00")} {RoomPriceCurrency}"; } }

        /// <summary>
        /// 早餐费用
        /// </summary>
        public decimal BreakfastPrice { get; set; } = 0.00M;

        /// <summary>
        /// 早餐币种
        /// </summary>
        public string? BreakfastCurrency { get; set; }

        /// <summary>
        /// 早餐提示消息
        /// </summary>
        public string BreakfastInfoTips { get; set; }

        /// <summary>
        /// excel Label
        /// </summary>
        public string BreakfastFeeLabel { get { return $"{BreakfastPrice.ToString("#0.00")} {BreakfastCurrency}"; } }

        ///// <summary>
        ///// 由地接支付
        ///// 0 是 1否
        ///// </summary>
        //public int Isoppay { get; set; }

        /// <summary>
        /// 地税
        /// </summary>
        public decimal GovernmentRent { get; set; } = 0.00M;

        /// <summary>
        /// 地税币种
        /// </summary>
        public string? GovernmentRentCurrency { get; set; }

        /// <summary>
        /// 地税提示消息
        /// </summary>
        public string GovernmentRentTips { get; set; }


        /// <summary>
        /// excel Label
        /// </summary>
        public string GovernmentRentFeeLabel { get { return $"{GovernmentRent.ToString("#0.00")} {GovernmentRentCurrency}"; } }

        /// <summary>
        /// 城市价格
        /// </summary>
        public decimal CityTax { get; set; } = 0.00M;

        /// <summary>
        /// 城市币种
        /// </summary>
        public string? CityTaxCurrency { get; set; }

        /// <summary>
        /// 城市税提示信息
        /// </summary>
        public string? CityTaxTips { get; set; }

        /// <summary>
        /// excel Label
        /// </summary>
        public string CityTaxFeeLabel { get { return $"{CityTax.ToString("#0.00")} {CityTaxCurrency}"; } }

        /// <summary>
        /// 信用卡金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 信用卡金额币种
        /// </summary>
        public string? PaymentCurrency { get; set; }

        /// <summary>
        /// 人民币金额
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;

        /// <summary>
        /// 人民币金额
        /// </summary>
        public string CNYPriceLabel { get { return $"{CNYPrice.ToString("#0.00")} CNY"; } }

        ///// <summary>
        ///// 当天汇率
        ///// </summary>
        //public decimal DayRate { get; set; } = 0.0000M;

        ///// <summary>
        ///// 币种汇率
        ///// </summary>
        //public string? CurrencyRateStr { get; set; }

        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        ///// <summary>
        ///// 费用标识
        ///// -1 未选择 0 公转 1 私转
        ///// </summary>
        public int OrbitalPrivateTransfer { get; set; }

        public string CostMark
        {
            get
            {
                var label = string.Empty;

                if (OrbitalPrivateTransfer == 0) label = "公转";
                else if (OrbitalPrivateTransfer == 1) label = "私转";
                return label;
            }
        }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PayWay { get; set; }

        ///// <summary>
        ///// 卡类型
        ///// </summary>
        //public string? CardType { get; set; }

        /// <summary>
        /// 是否支付
        /// -1 未选择 0 未付款 1 已付款  2 其它费用子项未付款
        /// </summary>
        public int IsPay { get; set; }

        public string IsPayLable
        {
            get
            {
                var label = $"未选择";
                if (IsPay == 0) label = "未付款";
                else if (IsPay == 1) label = "已付款";
                else if (IsPay == 2) label = "其它费用子项未付款";
                return label;
            }
        }

        /// <summary>
        /// 
        /// </summary>
        public string PayTips { get; set; }

        /// <summary>
        /// 操作人
        /// </summary>
        public string? Applicant { get; set; }

        public string Remark { get; set; }
    }

    /// <summary>
    /// 地接费用View
    /// </summary>
    public class GroupCTGGRFeeView
    {
        public int CTGGRDiId { get; set; }
        public int CTGGRId { get; set; }

        /// <summary>
        /// 地区
        /// </summary>
        public string? Area { get; set; }

        /// <summary>
        /// 费用名称
        /// </summary>
        public string? PriceName { get; set; }

        /// <summary>
        /// 费用描述
        /// </summary>
        public string? PriceContent { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 付款币种
        /// </summary>
        public string? PaymentCurrency { get; set; }

        /// <summary>
        /// 此次付款百分比
        /// </summary>
        public decimal PayPercentage { get; set; } = 0.00M;

        /// <summary>
        /// 已付款金额
        /// </summary>
        public decimal AmountPaid { get; set; } = 0.00M;

        /// <summary>
        /// 尾款
        /// </summary>
        public decimal BalancePayment { get; set; } = 0.00M;

        /// <summary>
        /// 消费日期
        /// </summary>
        public DateTime DatePrice { get; set; }

        /// <summary>
        /// 当时汇率
        /// </summary>
        public decimal DayRate { get; set; } = 1.0000M;

        /// <summary>
        /// 付款人民币金额
        /// </summary>
        public decimal CNYPrice { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 付款时间
        /// </summary>
        public string? AuditGMDate { get; set; }

        /// <summary>
        /// 费用标识
        /// -1 未选择 0 公转 1 私转
        /// </summary>
        public int OrbitalPrivateTransfer { get; set; }

        /// <summary>
        /// 费用标识Text
        /// </summary>
        public string CostMark
        {
            get
            {
                return OrbitalPrivateTransfer == 0 ? "公转" : OrbitalPrivateTransfer == 1 ? "私转" : "-";
            }
        }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PayWay { get; set; }

        /// <summary>
        /// 是否支付
        /// -1 未选择 0 未付款 1 已付款 
        /// </summary>
        public int IsPay { get; set; }


        public string IsPayLabel
        {
            get
            {
                return IsPay == 0 ? "未付款" : IsPay == 1 ? "已付款" : "-";
            }
        }


        /// <summary>
        /// 操作人
        /// </summary>
        public string? Applicant { get; set; }
    }

    /// <summary>
    /// 机票费用View
    /// </summary>
    public class GroupAirFeeView 
    {
        public int AirId { get; set; }
        public int AirDiId { get; set; }

        /// <summary>
        /// 舱位类型
        /// </summary>
        public string? AirTypeName { get; set; }
        /// <summary>
        /// 航班号
        /// </summary>
        public string? FlightsCode { get; set; }

        /// <summary>
        /// 城市A-B
        /// </summary>
        public string? FlightsCity { get; set; }

        /// <summary>
        /// 航班日期
        /// </summary>
        public string? FlightsDate { get; set; }

        /// <summary>
        /// 航班时间
        /// </summary>
        public string? FlightsTime { get; set; }

        /// <summary>
        /// 客户姓名
        /// </summary>
        public string? ClientName { get; set; }

        /// <summary>
        /// 客户人数
        /// </summary>
        public int ClientNum { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 付款币种
        /// </summary>
        public string? PayMoneyCurrency { get; set; }

        /// <summary>
        /// CNY 金额
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;

        /// <summary>
        /// 当时汇率
        /// </summary>
        public decimal DayRate { get; set; } = 1.0000M;

        /// <summary>
        /// 付款时间
        /// </summary>
        public string? AuditGMDate { get; set; }

        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 费用标识
        /// -1 未选择 0 公转 1 私转
        /// </summary>
        public int OrbitalPrivateTransfer { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PayWay { get; set; }

        /// <summary>
        /// 卡类型
        /// </summary>
        public string? CardType { get; set; }

        /// <summary>
        /// 是否支付
        /// -1 未选择 0 未付款 1 已付款 
        /// </summary>
        public int IsPay { get; set; }

        /// <summary>
        /// 操作人
        /// </summary>
        public string? Applicant { get; set; }

        /// <summary>
        /// SetDataId
        /// </summary>
        public int CType { get; set; }
    }

    /// <summary>
    /// 签证费用View
    /// </summary>
    public class GroupVisaFeeView
    {
        public int VisaId { get; set; }

        public int VisaDiId { get; set; }

        /// <summary>
        /// 客户名称
        /// </summary>
        public string? VisaClient { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;

        /// <summary>
        /// 付款币种
        /// </summary>
        public string? PayMoneyCurrency { get; set; }

        /// <summary>
        /// 当时汇率
        /// </summary>
        public decimal DayRate { get; set; } = 1.0000M;

        /// <summary>
        /// 付款时间
        /// </summary>
        public string? AuditGMDate { get; set; }
        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 费用标识
        /// -1 未选择 0 公转 1 私转
        /// </summary>
        public int OrbitalPrivateTransfer { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PayWay { get; set; }

        /// <summary>
        /// 卡类型
        /// </summary>
        public string? CardType { get; set; }

        /// <summary>
        /// 是否支付
        /// -1 未选择 0 未付款 1 已付款 
        /// </summary>
        public int IsPay { get; set; }

        /// <summary>
        /// 操作人
        /// </summary>
        public string? Applicant { get; set; }
    }

    /// <summary>
    /// 邀请/公务费用View
    /// </summary>
    public class GroupInvitationalFeeView
    {
        public int IOAId { get; set; }

        public int IOADiId { get; set; }

        /// <summary>
        /// 邀请方地区
        /// </summary>
        public string? InviterArea { get; set; }

        /// <summary>
        /// 邀请方
        /// </summary>
        public string? Inviter { get; set; }

        /// <summary>
        /// 邀请时间
        /// </summary>
        public string? InviteTime { get; set; }

        /// <summary>
        /// 邀请函费用
        /// </summary>
        public decimal InviteCost { get; set; } = 0.00M;

        /// <summary>
        /// 邀请函币种
        /// </summary>
        public string? InviteCurrency { get; set; }

        /// <summary>
        /// 快递费用
        /// </summary>
        public decimal SendCost { get; set; } = 0.00M;

        /// <summary>
        /// 快递币种
        /// </summary>
        public string? SendCurrency { get; set; }

        /// <summary>
        /// 活动费用
        /// </summary>
        public decimal EventsCost { get; set; } = 0.00M;

        /// <summary>
        /// 活动币种
        /// </summary>
        public string? EventsCurrency { get; set; }

        /// <summary>
        /// 翻译费用
        /// </summary>
        public decimal TranslateCost { get; set; } = 0.00M;

        /// <summary>
        /// 翻译币种
        /// </summary>
        public string? TranslateCurrency { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 付款币种
        /// </summary>
        public string? PaymentCurrency { get; set; }

        /// <summary>
        /// 人民币费用
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;


        /// <summary>
        /// 人民币费用(后台计算)
        /// </summary>
        public decimal CNYPrice2 { get; set; } = 0.00M;
        

        /// <summary>
        /// 当时币种汇率
        /// </summary>
        public string? CurrencyRateStr { get; set; }

        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 付款时间
        /// </summary>
        public string? AuditGMDate { get; set; }

        /// <summary>
        /// 费用标识
        /// -1 未选择 0 公转 1 私转
        /// </summary>
        public int OrbitalPrivateTransfer { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PayWay { get; set; }

        /// <summary>
        /// 是否支付
        /// -1 未选择 0 未付款 1 已付款 
        /// </summary>
        public int IsPay { get; set; }

        /// <summary>
        /// 操作人
        /// </summary>
        public string? Applicant { get; set; }
    }

    /// <summary>
    /// 保险费用View
    /// </summary>
    public class GroupInsuranceFeeView
    {
        public int InsuranceId { get; set; }

        public int InsuranceDiId { get; set; }

        /// <summary>
        /// 客户名称
        /// </summary>
        public string? ClientName { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 付款币种
        /// </summary>
        public string? PayMoneyCurrency { get; set; }

        /// <summary>
        /// 人民币金额
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;

        /// <summary>
        /// 付款时间
        /// </summary>
        public string? AuditGMDate { get; set; }

        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 费用标识
        /// -1 未选择 0 公转 1 私转
        /// </summary>
        public int OrbitalPrivateTransfer { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PayWay { get; set; }

        /// <summary>
        /// 是否支付
        /// -1 未选择 0 未付款 1 已付款 
        /// </summary>
        public int IsPay { get; set; }

        /// <summary>
        /// 操作人
        /// </summary>
        public string? Applicant { get; set; }
    }

    /// <summary>
    /// 增减款项View
    /// </summary>
    public class GroupDecreaseFeeView
    {
        public int DPId { get; set; }
        public int DPDiId { get; set; }

        /// <summary>
        /// 费用名称
        /// </summary>
        public string? PriceName { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 付款币种
        /// </summary>
        public string? PayMoneyCurrency { get; set; }

        /// <summary>
        /// 当时汇率
        /// </summary>
        public decimal DayRate { get; set; } = 1.0000M;

        /// <summary>
        /// 人民币金额
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;

        /// <summary>
        /// 付款时间
        /// </summary>
        public string? AuditGMDate { get; set; }

        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 费用标识
        /// -1 未选择 0 公转 1 私转
        /// </summary>
        public int OrbitalPrivateTransfer { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PayWay { get; set; }

        /// <summary>
        /// 是否支付
        /// -1 未选择 0 未付款 1 已付款 
        /// </summary>
        public int IsPay { get; set; }

        /// <summary>
        /// 操作人
        /// </summary>
        public string? Applicant { get; set; }

    }


    public class GroupRoyaltyFeeInfo
    {
        public int GroupId { get; set; }
        public string OverviewInfo { get; set; }
        [JsonIgnore]
        public string DetailedInfo { get; set; }
        public string[] DetailedInfoText
        {
            get
            {
                var jsonArray = Array.Empty<string>();
                string str = DetailedInfo;
                if (string.IsNullOrWhiteSpace(str)) return jsonArray;
                str = str.Trim();
                if ((str.StartsWith("{") && str.EndsWith("}")) || // 检查是否是 JSON 对象
                    (str.StartsWith("[") && str.EndsWith("]")))   // 检查是否是 JSON 数组
                {
                    try
                    {
                        return JsonConvert.DeserializeObject<string[]>(str);
                    }
                    catch (JsonException)
                    {
                        return jsonArray;
                    }
                }
                return jsonArray;
            }
        }

        public string DetailedInfoExcelText
        {
            get
            {
                string label = string.Empty;
                var array = DetailedInfoText;
                if (!array.Any()) return label;
                foreach (var item in array) label += $"{item}\n";
                if (label.EndsWith(@"\n")) label = label.Substring(0, label.Length - 2);
                return label;
            }
        }
        public decimal Amount { get; set; }
        public int IsConfirm { get; set; }
        public string IsConfrimText { get { return IsConfirm == 1 ? "已确认" : "未确认"; } }
        public int IsSeed { get; set; }
        public string IsSeedText { get { return IsSeed == 1 ? "已发放" : "未发放"; } }
        public string RoyaltyUserName { get; set; }
        public string CreateUserName { get; set; }
        public DateTime CreateTime { get; set; }
    }

    /// <summary>
    /// 操作人员提成View
    /// </summary>
    public class GroupRoyaltyFeeView
    {
        public int GroupId { get; set; }
        public string OverviewInfo { get; set; }
        public string[] DetailedInfoText { get; set; }
        public decimal Amount { get; set; }
        public string IsConfrimText { get; set; }
        public string IsSeedText { get; set; }
        public string RoyaltyUserName { get; set; }
        public string CreateUserName { get; set; }
        public DateTime CreateTime { get; set; }
    }

    #endregion

    #region 团组统计报表下载

    /// <summary>
    /// Excel 签证费用View
    /// </summary>
    public class GroupVisaFeeExcelView
    {
        public int VisaId { get; set; }

        public int VisaDiId { get; set; }

        /// <summary>
        /// 客户名称
        /// </summary>
        public string? VisaClient { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;

        /// <summary>
        /// 付款币种
        /// </summary>
        public string? PayMoneyCurrency { get; set; }

        /// <summary>
        /// 当时汇率
        /// </summary>
        public decimal DayRate { get; set; } = 1.0000M;

        /// <summary>
        /// 付款时间
        /// </summary>
        public string? AuditGMDate { get; set; }
        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 费用标识
        /// -1 未选择 0 公转 1 私转
        /// </summary>
        public string CostMark { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PaymentModes { get; set; }

        /// <summary>
        /// 卡类型
        /// </summary>
        public string? CardType { get; set; }

        /// <summary>
        /// 是否支付
        /// </summary>
        public string IsPay { get; set; }

        /// <summary>
        /// 付款时间
        /// </summary>
        public string ConsumptionDate { get; set; }

        public string Remark { get; set; }

        /// <summary>
        /// 操作人
        /// </summary>
        public string? Applicant { get; set; }

        public DateTime CreateTime { get; set; }
    }

    /// <summary>
    /// Excel 商邀费用View
    /// </summary>
    public class GroupOAFeeExcelView
    {

        public int IOAId { get; set; }

        public int IOADiId { get; set; }

        /// <summary>
        /// 邀请方地区
        /// </summary>
        public string? InviterArea { get; set; }

        /// <summary>
        /// 邀请方
        /// </summary>
        public string? Inviter { get; set; }

        /// <summary>
        /// 邀请时间
        /// </summary>
        public string? InviteTime { get; set; }

        /// <summary>
        /// 邀请函费用
        /// </summary>
        public decimal InviteCost { get; set; } = 0.00M;

        /// <summary>
        /// 邀请函币种
        /// </summary>
        public string? InviteCurrency { get; set; }

        /// <summary>
        /// 快递费用
        /// </summary>
        public decimal SendCost { get; set; } = 0.00M;

        /// <summary>
        /// 快递币种
        /// </summary>
        public string? SendCurrency { get; set; }

        /// <summary>
        /// 活动费用
        /// </summary>
        public decimal EventsCost { get; set; } = 0.00M;

        /// <summary>
        /// 活动币种
        /// </summary>
        public string? EventsCurrency { get; set; }

        /// <summary>
        /// 翻译费用
        /// </summary>
        public decimal TranslateCost { get; set; } = 0.00M;

        /// <summary>
        /// 翻译币种
        /// </summary>
        public string? TranslateCurrency { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 付款币种汇率
        /// </summary>
        public decimal DayRate { get; set; } = 0.0000M;

        /// <summary>
        /// 付款币种
        /// </summary>
        public string? PaymentCurrency { get; set; }

        /// <summary>
        /// 人民币费用
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;

        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 消费日期
        /// </summary>
        public string ConsumptionDate { get; set; }

        /// <summary>
        /// 费用标识
        /// </summary>
        public string CostMark { get; set; }

        /// <summary>
        /// 支付标识
        /// </summary>
        public string IsPay { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string PaymentModes { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }

        /// <summary>
        /// 审核时间
        /// </summary>
        public string? AuditGMDate { get; set; }

        /// <summary>
        /// 操作人
        /// </summary>
        public string? Applicant { get; set; }

        public DateTime CreateTime { get; set; }
    }

    /// <summary>
    /// Excel 机票费用View
    /// </summary>
    public class GroupAirTicketExcelView
    {
        public int AirId { get; set; }
        public int AirDiId { get; set; }

        /// <summary>
        /// 航班号
        /// </summary>
        public string? FlightsCode { get; set; }

        /// <summary>
        /// 城市A-B
        /// </summary>
        public string? FlightsCity { get; set; }

        /// <summary>
        /// 舱位类型
        /// </summary>
        public string? AirTypeName { get; set; }

        /// <summary>
        /// 航班日期
        /// </summary>
        public string? FlightsDate { get; set; }

        /// <summary>
        /// 航班时间
        /// </summary>
        public string? FlightsTime { get; set; }

        /// <summary>
        /// 客户姓名
        /// </summary>
        public string? ClientName { get; set; }

        /// <summary>
        /// 客户人数
        /// </summary>
        public int ClientNum { get; set; }

        /// <summary>
        /// 费用描述
        /// </summary>
        public string PriceDescription { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 当时汇率
        /// </summary>
        public decimal DayRate { get; set; } = 1.0000M;

        /// <summary>
        /// 付款币种
        /// </summary>
        public string? PayMoneyCurrency { get; set; }

        /// <summary>
        /// CNY 金额
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;

        /// <summary>
        /// 付款时间
        /// </summary>
        public string ConsumptionDate { get; set; }

        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 费用标识
        /// </summary>
        public string CostMark { get; set; }

        /// <summary>
        /// 是否支付
        /// </summary>
        public string IsPay { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PaymentModes { get; set; }

        /// <summary>
        /// 卡类型
        /// </summary>
        public string? CardType { get; set; }

        /// <summary>
        /// 审核时间
        /// </summary>
        public string? AuditGMDate { get; set; }

        /// <summary>
        /// 操作人
        /// </summary>
        public string? Applicant { get; set; }

        /// <summary>
        /// 创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// SetDataId
        /// </summary>
        public int CType { get; set; }

        public string Remark { get; set; }
    }


    /// <summary>
    /// Excel 保险费用View
    /// </summary>
    public class GroupInsureExcelView
    {

        public int InsuranceId { get; set; }

        public int InsuranceDiId { get; set; }

        /// <summary>
        /// 客户名称
        /// </summary>
        public string? ClientName { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 付款币种
        /// </summary>
        public string? PayMoneyCurrency { get; set; }

        /// <summary>
        /// 当时汇率
        /// </summary>
        public decimal DayRate { get; set; }

        /// <summary>
        /// 人民币金额
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;

        /// <summary>
        /// 付款时间
        /// </summary>
        public string ConsumptionDate { get; set; }

        /// <summary>
        /// 费用标识
        /// </summary>
        public string CostMark { get; set; }

        /// <summary>
        /// 审核时间
        /// </summary>
        public string? AuditGMDate { get; set; }

        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 是否支付
        /// </summary>
        public string IsPay { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PaymentModes { get; set; }

        /// <summary>
        /// 操作人
        /// </summary>
        public string? Applicant { get; set; }

        public DateTime CreateTime { get; set; }

        public string Remark { get; set; }
    }

    /// <summary>
    /// Excel 保险费用View
    /// </summary>
    public class GroupOtherFeeExcelView
    {
        public int DPId { get; set; }
        public int DPDiId { get; set; }

        /// <summary>
        /// 费用名称
        /// </summary>
        public string? PriceName { get; set; }

        /// <summary>
        /// 付款金额
        /// </summary>
        public decimal PayMoney { get; set; } = 0.00M;

        /// <summary>
        /// 付款币种
        /// </summary>
        public string? PayMoneyCurrency { get; set; }

        /// <summary>
        /// 当时汇率
        /// </summary>
        public decimal DayRate { get; set; } = 1.0000M;

        /// <summary>
        /// 人民币金额
        /// </summary>
        public decimal CNYPrice { get; set; } = 0.00M;

        /// <summary>
        /// 付款时间
        /// </summary>
        public string? AuditGMDate { get; set; }

        /// <summary>
        /// 收款方
        /// </summary>
        public string? Payee { get; set; }

        /// <summary>
        /// 费用标识
        /// </summary>
        public string CostMark { get; set; }

        /// <summary>
        /// 支付方式
        /// </summary>
        public string? PaymentModes { get; set; }

        /// <summary>
        /// 是否支付
        /// </summary>
        public string IsPay { get; set; }

        /// <summary>
        /// 操作人
        /// </summary>
        public string? Applicant { get; set; }

        public DateTime CreateTime { get; set; }

        public string? Remark { get; set; }
    }

    /// <summary>
    /// 操作人员提成View
    /// </summary>
    public class GroupRoyaltyFeeExcelView
    {
        public int GroupId { get; set; }
        public string OverviewInfo { get; set; }
        public string DetailedInfoExcelText { get; set; }
        public decimal Amount { get; set; }
        public string IsConfrimText { get; set; }
        public string IsSeedText { get; set; }
        public string RoyaltyUserName { get; set; }
        public string CreateUserName { get; set; }
        public DateTime CreateTime { get; set; }
    }

    #endregion

}