using OASystem.Domain.Entities.PersonnelModule;
using OASystem.Domain.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OASystem.Domain.ViewModels.PersonnelModule
{
    /// 
    /// 物品详细信息 View
    /// 
    public class GoodsInfoView:Pm_GoodsInfo
    {
    }
    #region 物品领用List
    [SugarTable(tableName: "Pm_GoodsInfo", tableDescription: "物品信息表")]
    public class GoodsListView
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        public string Name { get; set; }
        public int Type { get; set; }
        [SugarColumn(IsIgnore = true)]
        public string TypeName { get; set; }
        public decimal StockQuantity { get; set; }
        public string Unit { get; set; }
        //SugarColumn(IsIgnore = true),
        [Navigate(NavigateType.OneToMany, nameof(GoodsListReceiveView.GoodsId))]
        //[Navigate(NavigateType.OneToMany, nameof(GoodsListReceiveView.GoodsId), nameof(Id))]
        public List Receives { get; set; }//注意禁止给books手动赋值
        [SugarColumn(IsIgnore = true)]
        public decimal WaitAuditQuantity
        {
            get
            {
                var quantity = 0.00M;
                if (Receives.Count > 0)
                {
                    quantity = Receives.Sum(x => x.Quantity);
                }
                return quantity;
            }
        }
        [SugarColumn(IsIgnore = true)]
        public string StockQuantityLabel
        {
            get
            {
                return $"物品待审核数量:{WaitAuditQuantity.ToString("#0.00")}";
            }
        }
        public int LastUpdateUserId { get; set; }
        [Navigate(NavigateType.OneToOne, nameof(Type))]
        public GoodsListSetDataView TypeData { get; set; }
        [Navigate(NavigateType.OneToOne, nameof(LastUpdateUserId))]
        public GoodsListUsersView UserData { get; set; }
        public DateTime LastUpdateTime { get; set; }
        public string Remark { get; set; }
        public int IsDel { get; set; }
    }
    [SugarTable(tableName: "Pm_GoodsReceive", tableDescription: "物品领用表")]
    public class GoodsListReceiveView
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        /// 
        /// 商品Id
        /// Pm_GoodsInfo Id
        /// 
        public int GoodsId { get; set; }
        /// 
        /// 领用数量
        /// 
        public decimal Quantity { get; set; }
        /// 
        /// 审核状态
        /// 
        public GoodsAuditEnum AuditStatus { get; set; } = GoodsAuditEnum.Pending;
        public int IsDel { get; set; }
    }
    [SugarTable(tableName: "Sys_SetData", tableDescription: "")]
    public class GoodsListSetDataView
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        /// 
        /// 
        /// 
        public string Name { get; set; }
    }
    [SugarTable(tableName: "Sys_Users", tableDescription: "")]
    public class GoodsListUsersView
    {
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        /// 
        /// 
        /// 
        public string CnName { get; set; }
    }
    #endregion
    /// 
    /// 物品类型View
    /// 
    [SugarTable("Sys_SetDataType")]
    public class GoodsTypeView
    {
        /// 
        /// 物品类型Id
        /// 
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        public string Name { get; set; }
        [Navigate(NavigateType.OneToMany, nameof(GoodsSubTypeView.STid))]
        public List SubTypeItems { get; set; }
        public string Remark { get; set; }
        
        public int IsDel { get; set; }
    }
    /// 
    /// 物品Sub类型
    /// View
    /// 
    [SugarTable("Sys_SetData")]
    public class GoodsSubTypeView
    {
        /// 
        /// 物品类型Id
        /// 
        [SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
        public int Id { get; set; }
        public int STid { get; set; }
        public string Name { get; set; }
        public int IsDel { get; set; }
    }
    public class GoodsReceiveView
    {
        public int Id { get; set; }
        public int GroupId { get; set; }
        public string GroupName { get; set; }
        public int GoodsId { get; set; }
        public string GoodsName { get; set; }
        public decimal Quantity { get; set; }
        public string Unit { get; set; }
        public string Reason { get; set; }
        public string Remark { get; set; }
        public GoodsAuditEnum AuditStatus { get; set; }
        public string AuditStatusText { get { return AuditStatus.GetEnumDescription(); } }
        public string StatusDesc { get; set; }
        public int AuditUserId { get; set; }
        public string AuditUserName { get; set; }
        public DateTime AuditTime { get; set; }
        public string CreateUserName { get; set; }
        public DateTime CreateTime { get; set; }
    }
    /// 
    /// 
    /// 
    public class GoodsReceiveListView: GoodsReceiveView
    {
        public string GoodsType { get; set; }
        public string GoodsDetails { get; set; }
        public GoodsStorageAuditPerView[] AuditPers { get; set; }
        /// 
        /// 审核权限
        /// true:有
        /// false:无
        /// 
        public bool IsAuditPer { get; set; } = false;
    }
    public class GoodsReceiveListMobileView : GoodsReceiveListView
    {
        public int GoodsTypeId { get; set; }
        /// 
        /// 是否贵重物品
        /// true:贵重物品
        /// false:非贵重物品
        /// 
        public bool IsValuable { get; set; } = false;
        //public GoodsStorageAuditPerView[] AuditPers { get; set; }
        /// 
        /// 审核权限
        /// true:有
        /// false:无
        /// 
        public bool IsAuditPer { get; set; } = false;
    }
    /// 
    /// 
    /// 
    public class GoodsReceiveInfoView : GoodsReceiveView
    {
        public string GoodsStorageInfo { get; set; }
        public object? QuantityInfos { get; set; }
        public object? GoodsStorageInfoStr { get; set; }
        public string GoodsType { get; set; }
    }
    public class GoodsReceiveInfoMobileView : GoodsReceiveInfoView
    {
        public string GroupName { get; set; }
    }
    /// 
    /// 
    /// 
    public class GoodsReceiveLinkStorageView
    {
        public int StorageId { get; set; }
        public decimal Quantity { get; set; }
    }
    public class GoodsStorageExcelDownloadView
    {
        public int Id { get; set; }
        public string Name { get; set; }
        /// 
        /// 开始库存
        /// 
        public decimal SQ_Total { get; set; }
        /// 
        /// 入库库存
        /// 
        public decimal SQ_Total1 { get; set; }
        public string StorageLabel { get; set; }
        public decimal OQ_Total { get; set; }
        public string ReceiveLabel { get; set; }
        public decimal StockQuantity { get; set; }
        public string Unit { get; set; }
    }
    public class GoodsStorageListView
    {
        public int Id { get; set; }
        public int GoodsId { get; set; }
        public int GoodsType { get; set; }
        public string GoodsName { get; set; }
        public string BatchNo { get; set; }
        public decimal Quantity { get; set; }
        public decimal UnitPrice { get; set; }
        public decimal TotalPrice { get; set; }
        public string SupplierName { get; set; }
        public string SupplierTel { get; set; }
        public string SupplierAddress { get; set; }
        public string SupplierSource { get; set; }
        public string StorageUserName { get; set; }
        public string StorageTime { get; set; }
        public string CreateUserName { get; set; }
        public GoodsConfirmEnum ConfirmStatus { get; set; }
        public string ConfirmStatusText
        {
            get
            {
                return ConfirmStatus.GetEnumDescription();
            }
        }
        public string StatusDesc { get; set; }
        public DateTime CreateTime { get; set; }
        public string Remark { get; set; }
        public GoodsStorageAuditPerView[] AuditPers { get; set; }
    }
    public class GoodsStorageAuditPerView
    {
        public bool AuditPer { get; set; }
        public GoodsAuditDepEnum AuditDep { get; set; }
        public string ButtonText { get; set; }
    }
    #region 审核部门View
    public class GoodsAuditDepView
    {
        public GoodsAuditDepEnum AuditDep { get; set; }
        public int[] AuditorIds { get; set; }
    }
    #endregion
}