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

namespace Bp.Sync.Domain.Elastics.Inventories.Generals
{
    /// <summary>
    /// Bảng chi tiết công nợ phải thu từ KH và phải trả NCC
    /// </summary>
    public class DebtElastic : ElasticBaseEntityWithKey<long>
    {
        /// <summary>
        /// ID của KH/NCC
        /// </summary>
        public int PartnerId { get; set; }
        /// <summary>
        /// Mã
        /// </summary>
        public string PartnerCode { get; set; }
        /// <summary>
        /// Tên đối tượng khác
        /// </summary>
        public string PartnerName2 { get; set; }
        /// <summary>
        /// Loại đối tượng
        /// </summary>
        public PartnerType PartnerType { get; set; }
        /// <summary>
        /// Ngày hạch toán
        /// </summary>
        public DateTimeOffset? AccountingDate { get; set; }
        /// <summary>
        /// Ngày chứng từ
        /// </summary>
        public DateTimeOffset? VocherDate { get; set; }
        public long VocherDateToLong => VocherDate.HasValue ? VocherDate.Value.Ticks : 0;
        /// <summary>
        /// Loại công nợ
        /// </summary>
        public DebtType DebtType { get; set; }
        /// <summary>
        /// Loại chứng từ
        /// </summary>
        public VocherType VocherType { get; set; }
        /// <summary>
        /// Mã chứng từ
        /// </summary>
        public string VocherCode { get; set; }
        /// <summary>
        /// Diễn giải
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// Mã tài khoản công nợ
        /// </summary>
        public string AccountCode { get; set; }
        /// <summary>
        /// Mã tài khoản đối ứng
        /// </summary>
        public string ReciprocalAccountCode { get; set; }
        /// <summary>
        /// Giá trị phát sinh nợ
        /// </summary>
        public long DebitIncurredValue { get; set; }
        /// <summary>
        /// Giá trị phát sinh có
        /// </summary>
        public long CreditIncurredValue { get; set; }
        /// <summary>
        /// Giá trị số dư nợ
        /// </summary>
        public long DebitBalanceValue { get; set; }
        /// <summary>
        /// Giá trị số dư có
        /// </summary>
        public long CreditBalanceValue { get; set; }
        /// <summary>
        /// Giá trị số dư (trong sổ quỹ)
        /// </summary>
        public long BalanceValue { get; set; }
        /// <summary>
        /// ID của VocherAccount
        /// </summary>
        public long VocherAccountId { get; set; }
        /// <summary>
        /// Là hạch toán kết chuyển?
        /// </summary>
        public bool IsAccountingEntry { get; set; }
    }
}
