using Bp.Sync.Domain.Elastics.BaseEntities;
using Bp.Sync.Domain.Entities.Inventories;
using System;
using System.ComponentModel.DataAnnotations.Schema;

namespace Bp.Sync.Domain.Elastics.Inventories.Bills
{
    public class InventoryBillElastic : ElasticBaseEntityWithKey<long>
    {
        /// <summary>
        /// Mã phiếu
        /// </summary>
        public long BillId { get; set; }
        /// <summary>
        /// Id của mã lưu kho
        /// </summary>
        public long ProductInventoryId { get; set; }
        /// <summary>
        /// Id sản phẩm
        /// </summary>
        public long ProductId { get; set; }

        /// <summary>
        /// Id đơn vị tính
        /// </summary>
        public int UnitId { get; set; }
        /// <summary>
        /// Mã lưu kho
        /// </summary>
        public string InventoryCode { get; set; }
        /// <summary>
        /// Số lượng thực tế
        /// </summary>
        [Column(TypeName = "decimal(18, 8)")]
        public decimal QuantityActual { get; set; }
        /// <summary>
        /// Số lượng tồn trong kho
        /// </summary>
        [Column(TypeName = "decimal(18, 8)")]
        public decimal QuantityInStock { get; set; }
        /// <summary>
        /// Đã kiểm hay chưa
        /// </summary>
        public bool IsChecked { get; set; }
        /// <summary>
        /// Id vị trí
        /// </summary>
        public long LocationId { get; set; }
        /// <summary>
        /// ID của phiếu con
        /// </summary>
        public long ChildId { get; set; }

        //them moi cho bao cao
        public decimal DifferenceQuantity
        {
            get
            {
                decimal dif = QuantityInStock - QuantityActual;
                if (dif < 0) dif = dif * (-1);
                return dif;
            }
        }
        public bool IsDifferenceQuantity => DifferenceQuantity != 0 ? true : false;
        public int BranchId { get; set; }
        public BillType? BillType { get; set; }
        public bool BillIsDeleted { get; set; }
        public BillStatus? BillStatus { get; set; }
        public DateTimeOffset? BillCreatedTime { get; set; }
        public string BillCode { get; set; }
        public string ProductName { get; set; }
        public string ProductCode { get; set; }
        public string UnitName { get; set; }
    }
}
