using Admin.NET.Core;
using System.ComponentModel.DataAnnotations;

namespace Admin.NET.Application;

    /// <summary>
    /// 发货通知单基础输入参数
    /// </summary>
    public class InvoiceBaseInput
    {
        /// <summary>
        /// 单号
        /// </summary>
        public virtual string? CodeNum { get; set; }
        
        /// <summary>
        /// 业务日期
        /// </summary>
        public virtual DateTime? StartDate { get; set; }
        
        /// <summary>
        /// 业务类型
        /// </summary>
        public virtual string BusinessType { get; set; }
        
        /// <summary>
        /// 客户
        /// </summary>
        public virtual string Custom { get; set; }
        
        /// <summary>
        /// 仓库
        /// </summary>
        public virtual string Warehouse { get; set; }
        
        /// <summary>
        /// 部门
        /// </summary>
        public virtual string? Department { get; set; }
        
        /// <summary>
        /// 车牌号
        /// </summary>
        public virtual string? CarNumber { get; set; }
        
        /// <summary>
        /// 停车位
        /// </summary>
        public virtual string? ParkingSpace { get; set; }
        
        /// <summary>
        /// 业务员
        /// </summary>
        public virtual string? Salesman { get; set; }
        
        /// <summary>
        /// 收货单位
        /// </summary>
        public virtual string? Consignee { get; set; }
        
        /// <summary>
        /// 交货日期
        /// </summary>
        public virtual DateTime? DeliveryDate { get; set; }
        
        /// <summary>
        /// 交货地址
        /// </summary>
        public virtual string? DeliveryAddress { get; set; }
        
        /// <summary>
        /// 备注
        /// </summary>
        public virtual string? Remarks { get; set; }
        
        /// <summary>
        /// 方案客户拓展
        /// </summary>
        public virtual string? CustomExpand { get; set; }
        
        /// <summary>
        /// 发货拓展
        /// </summary>
        public virtual string? SendOutExpand { get; set; }
        
        /// <summary>
        /// 租户Id
        /// </summary>
        public virtual long? TenantId { get; set; }
        
        /// <summary>
        /// 创建时间
        /// </summary>
        public virtual DateTime? CreateTime { get; set; }
        
        /// <summary>
        /// 更新时间
        /// </summary>
        public virtual DateTime? UpdateTime { get; set; }
        
        /// <summary>
        /// 创建者Id
        /// </summary>
        public virtual long? CreateUserId { get; set; }
        
        /// <summary>
        /// 创建者姓名
        /// </summary>
        public virtual string? CreateUserName { get; set; }
        
        /// <summary>
        /// 修改者Id
        /// </summary>
        public virtual long? UpdateUserId { get; set; }
        
        /// <summary>
        /// 修改者姓名
        /// </summary>
        public virtual string? UpdateUserName { get; set; }
        
        /// <summary>
        /// 软删除
        /// </summary>
        public virtual bool IsDelete { get; set; }
        
    }

    /// <summary>
    /// 发货通知单分页查询输入参数
    /// </summary>
    public class InvoiceInput : BasePageInput
    {
        /// <summary>
        /// 关键字查询
        /// </summary>
        public string? SearchKey { get; set; }

        /// <summary>
        /// 单号
        /// </summary>
        public string? CodeNum { get; set; }
        
        /// <summary>
        /// 业务日期
        /// </summary>
        public DateTime? StartDate { get; set; }
        
        /// <summary>
         /// 业务日期范围
         /// </summary>
         public List<DateTime?> StartDateRange { get; set; } 
        /// <summary>
        /// 业务类型
        /// </summary>
        public string? BusinessType { get; set; }
        
        /// <summary>
        /// 客户
        /// </summary>
        public string? Custom { get; set; }
        
        /// <summary>
        /// 仓库
        /// </summary>
        public string? Warehouse { get; set; }
        
        /// <summary>
        /// 部门
        /// </summary>
        public string? Department { get; set; }
        
        /// <summary>
        /// 车牌号
        /// </summary>
        public string? CarNumber { get; set; }
        
        /// <summary>
        /// 停车位
        /// </summary>
        public string? ParkingSpace { get; set; }
        
        /// <summary>
        /// 业务员
        /// </summary>
        public string? Salesman { get; set; }
        
        /// <summary>
        /// 收货单位
        /// </summary>
        public string? Consignee { get; set; }
        
        /// <summary>
        /// 交货日期
        /// </summary>
        public DateTime? DeliveryDate { get; set; }
        
        /// <summary>
         /// 交货日期范围
         /// </summary>
         public List<DateTime?> DeliveryDateRange { get; set; } 
        /// <summary>
        /// 交货地址
        /// </summary>
        public string? DeliveryAddress { get; set; }
        
    }

    /// <summary>
    /// 发货通知单增加输入参数
    /// </summary>
    public class AddInvoiceInput : InvoiceBaseInput
    {
        /// <summary>
        /// 业务类型
        /// </summary>
        [Required(ErrorMessage = "业务类型不能为空")]
        public override string BusinessType { get; set; }
        
        /// <summary>
        /// 客户
        /// </summary>
        [Required(ErrorMessage = "客户不能为空")]
        public override string Custom { get; set; }
        
        /// <summary>
        /// 仓库
        /// </summary>
        [Required(ErrorMessage = "仓库不能为空")]
        public override string Warehouse { get; set; }
        
        /// <summary>
        /// 软删除
        /// </summary>
        [Required(ErrorMessage = "软删除不能为空")]
        public override bool IsDelete { get; set; }
        
    }

    /// <summary>
    /// 发货通知单删除输入参数
    /// </summary>
    public class DeleteInvoiceInput : BaseIdInput
    {
    }

    /// <summary>
    /// 发货通知单更新输入参数
    /// </summary>
    public class UpdateInvoiceInput : InvoiceBaseInput
    {
        /// <summary>
        /// 主键Id
        /// </summary>
        [Required(ErrorMessage = "主键Id不能为空")]
        public long Id { get; set; }
        
    }

    /// <summary>
    /// 发货通知单主键查询输入参数
    /// </summary>
    public class QueryByIdInvoiceInput : DeleteInvoiceInput
    {

    }