using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace LHDN.CRM.Models.Models
{
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;

    [Table("TaxPayer")]
    public class TaxPayer
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public long TPID { get; set; }   

        [Required]
        [StringLength(100)]
        public string TPName { get; set; }   

        [Required]
        [StringLength(2)]
        public string NoCukaiCode { get; set; }

        [Required]
        [StringLength(20)]
        public string NoCukai { get; set; }

        [Required]
        [StringLength(20)]
        public string NoCukaiSTS { get; set; }

        [Required]
        [StringLength(2)]
        public string FileType { get; set; }

        public Nullable<int> FileTypeID { get; set; }

        //[Required]
        public int? VIPID { get; set; }    

        [Required]
        public bool IsSekatanPerjalanan { get; set; }

        [Required]
        public Nullable<int> IdentityTypeID  { get; set; }
          
        [Required]
        [StringLength(12)]
        public string IdentityNo { get; set; }
         
        [StringLength(20)]
        public string IdentityType { get; set; }
        
        [StringLength(12)]
        public string NoKPBaru { get; set; }

        [StringLength(12)]
        public string NoPassport { get; set; }

        [StringLength(12)]
        public string NoPolis { get; set; }

        [StringLength(12)]
        public string NoKPLama { get; set; }

        [StringLength(12)]
        public string NoROC { get; set; }

        public Nullable<int> CWPenaksiranCPID { get; set; }

        public Nullable<int> CWPenaksiranCKHTID { get; set; }

        public Nullable<int> CWPungutanCPID { get; set; }

        public Nullable<int> CWPungutanCKHTID { get; set; }

        public Nullable<int> CWGuamanSivilID { get; set; }
         
        public Nullable<decimal> KreditBlmDigunakan { get; set; }

        public Nullable<decimal> KreditBlhDibayarBalikCP { get; set; }

        public Nullable<decimal> DebitBlmDijelaskanCP { get; set; }

        public Nullable<int> GelaranID { get; set; }   

        public Nullable<int> HonorificID { get; set; }

        [StringLength(60)]
        public string BankName { get; set; }                 

         [StringLength(28)]
        public string AccountNo { get; set; }

        public Nullable<int> KelasID  { get; set; }               
               
        public Nullable<int> WarganegaraID{ get; set; }       

        [Column(TypeName = "datetime2")]
        public Nullable<DateTime> DOB { get; set; }
           
        [StringLength(14)]
        public string TelNo { get; set; }

        [StringLength(14)]
        public string MobileNo { get; set; }

        [StringLength(100)]
        public string Email { get; set; }

        [StringLength(14)]
        public string FakNo { get; set; }

        [StringLength(50)]
        public string FBID { get; set; }

        [StringLength(50)]
        public string FBDisplayName { get; set; }

        [StringLength(50)]
        public string TWID { get; set; }

        [StringLength(50)]
        public string TWDisplayName { get; set; }

        public Nullable<bool> IsAlamatEjenCukai { get; set; }

        [StringLength(40)]
        public string Address1 { get; set; }

        [StringLength(40)]
        public string Address2 { get; set; }

        [StringLength(40)]
        public string Address3 { get; set; }

        [StringLength(10)]
        public string Poskod { get; set; }

        [StringLength(30)]
        public string City { get; set; }

        [StringLength(30)]
        public string Country { get; set; }
             
        public Nullable<int> StatusFailID { get; set; }     

        public Nullable<bool> IsPelangganPembayarSama { get; set; }
          
        [StringLength(14)]
        public string InTelefonMB { get; set; }

        [Column(TypeName = "datetime2")]
        public Nullable<DateTime> InUpdateTelefonMBDate { get; set; }

        [StringLength(100)]
        public string InEmailMB { get; set; }

        [Column(TypeName = "datetime2")]
        public Nullable<DateTime> InUpdateEmailMBDate { get; set; }

        [StringLength(14)]
        public string OutTelefonBimbit { get; set; }

        [StringLength(14)]
        public string OutTelefonPejabat { get; set; }

        [StringLength(14)]
        public string OutTelefonJPDP { get; set; }

        [StringLength(100)]
        public string OutEmailMB { get; set; }

        [Column(TypeName = "datetime2")]
        public Nullable<DateTime> OutUpdateTPDate { get; set; }

        [Column(TypeName = "datetime2")]
        public Nullable<DateTime> OutUpdateTelefonBimbitDate { get; set; }

        [Column(TypeName = "datetime2")]
        public Nullable<DateTime>OutUpdateEmailMBDate { get; set; }
         
        [Required]
        [StringLength(255)]
        public string CreatedBy { get; set; }

        [StringLength(255)]
        public string CreatedByName { get; set; }

        [Required]
        [Column(TypeName = "datetime2")]
        public DateTime CreatedDateTime { get; set; }

        [Required]
        [StringLength(255)]
        public string LastUpdatedBy { get; set; }

        [StringLength(255)]
        public string LastUpdatedByName { get; set; }

        [Required]
        [Column(TypeName = "datetime2")]
        public DateTime LastUpdatedDateTime { get; set; }

        [Column(TypeName = "datetime2")]
        public Nullable<DateTime> DWMirror_LastUpdatedDateTime { get; set; }

        [Column(TypeName = "datetime2")]
        public Nullable<DateTime> ReMS_LastUpdatedDateTime { get; set; }

        public Nullable<bool> IsGenerateFileTP{ get; set; }

        public Nullable<int>LanguageID { get; set; }

        [StringLength(20)]
        public string EmplNoCukaiSTS { get; set; }
        
        public Nullable<int> EmplFileTypeID { get; set; }

        public Nullable<long> EmplTPID { get; set; }

        [StringLength(25)]
        public string EmplNoRujukanCukai { get; set; }

        [StringLength(255)]
        public string RefundStatus { get; set; }

        public virtual ICollection<Activity> Activity { get; set; }

    }
}
