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("Activity")]
    public class Activity
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public long ActivityID { get; set; }

        [ForeignKey("TaxPayer")]
        public long? TPID { get; set; }

        [ForeignKey("Case")]
        public long? CaseID { get; set; }

        public long? OutboundID { get; set; }

        public long? HCLEmailBlastID { get; set; }

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

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

        [Required(AllowEmptyStrings = true)]
        [StringLength(255)]
        public string AssignedOfficerEmail { get; set; }

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

        public bool? IsTransferToCase { get; set; }

        public bool? IsOrphanActivity { get; set; }

        [StringLength(16)]
        public string InteractionID { get; set; }

        public int? ActChannelID { get; set; }

        public int? SumberID { get; set; }

        public int? Kategori1ID { get; set; }

        public int? Kategori2ID { get; set; }

        public int? Kategori3ID { get; set; }

        public int? ActStatusID { get; set; }

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

        public int? ActStatus1ID { get; set; }

        public int? ActStatus2ID { get; set; }

        public int? ActStatus3ID { get; set; }

        public int? AliranID { get; set; }

        public int? LanguageID { get; set; }

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

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

        public int? KodSelesaiID { get; set; }

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

        public int? TindakanSusulanID { get; set; }

        public int? TahunTaksiran { get; set; }

        public decimal? NilaiKes { get; set; }

        public int? StatusBayaranS104S22ID { get; set; }

        public int? TahapID { get; set; }

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

        public int? JenisPelangganID { get; set; }

        public bool? IsPelangganPembayarSama { get; set; }

        public long? PelangganTPID { get; set; }

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

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

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

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

        public int? PelangganIDType { get; set; }

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

        public int? PelangganOtherIDType { get; set; }

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

        public int? PelangganLokasiID { get; set; }

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

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

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

        public int? TPIDType { get; set; }

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

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

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

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

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

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

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

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

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

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

        public string Transcript { get; set; }

        public int? JenisKempenID { get; set; }

        public int? JenisCukaiID { get; set; }

        public string Description { get; set; }

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

        public int? DocTahunTaksiran { get; set; }

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

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

        public int? DocKategoriDokumen { get; set; }

        public int? DocCawanganTindakanID { get; set; }

        public int? DocUnit { get; set; }

        public bool? DocTindakanSuratKeluar { get; set; }

        public bool? DocTindakanSegera { get; set; }

        public bool? DocTindakanTidakPerluTindakan { get; set; }

        public bool? DocTindakanCetakSurat { get; set; }

        public bool? IsDelete { get; set; }

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

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

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

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

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

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

        [Column(TypeName = "timestamp")]
        [MaxLength(8)]
        [Timestamp]
        public byte[] ChangeStamp { get; set; }

        public int? DMSStatusID { get; set; }

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

        public short? CallAttempts { get; set; }

        public virtual TaxPayer TaxPayer { get; set; }

        public virtual Case Case { get; set; }
        public bool IsDraft { get; set; }
    }
}
