initial commit

This commit is contained in:
2026-07-21 14:22:06 +07:00
commit 2d7959f202
572 changed files with 45295 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
using Indotalent.Data.Interfaces;
using Microsoft.AspNetCore.Identity;
namespace Indotalent.Data.Entities;
public class ApplicationUser : IdentityUser, IHasIsDeleted
{
public string? FullName { get; set; }
public string? FirstName { get; set; }
public string? LastName { get; set; }
public string? ShortBio { get; set; }
public string? JobTitle { get; set; }
public DateTime DateOfBirth { get; set; }
public string? StreetAddress { get; set; }
public string? City { get; set; }
public string? StateProvince { get; set; }
public string? ZipCode { get; set; }
public string? Country { get; set; }
public string SocialMediaLinkedIn { get; set; } = string.Empty;
public string SocialMediaX { get; set; } = string.Empty;
public string SocialMediaFacebook { get; set; } = string.Empty;
public string SocialMediaInstagram { get; set; } = string.Empty;
public string SocialMediaTikTok { get; set; } = string.Empty;
public string OtherInformation1 { get; set; } = string.Empty;
public string OtherInformation2 { get; set; } = string.Empty;
public string OtherInformation3 { get; set; } = string.Empty;
public string? SsoIdFirebase { get; set; }
public string? SsoIdKeycloak { get; set; }
public string? SsoIdAzure { get; set; }
public string? SsoIdAws { get; set; }
public string? SsoIdOther1 { get; set; }
public string? SsoIdOther2 { get; set; }
public string? SsoIdOther3 { get; set; }
public DateTime CreatedAt { get; set; } = DateTime.Now;
public DateTime? LastLoginAt { get; set; }
public DateTime? UpdatedAt { get; set; }
public bool IsActive { get; set; } = true;
public bool IsDeleted { get; set; } = false;
public string? AvatarFile { get; set; }
public string? RefreshToken { get; set; }
}
+20
View File
@@ -0,0 +1,20 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Appraisal : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string EmployeeId { get; set; } = string.Empty;
public Employee? Employee { get; set; }
public string LastRating { get; set; } = string.Empty;
public decimal CurrentSalary { get; set; }
public decimal IncrementPercentage { get; set; }
public decimal NewSalary { get; set; }
public string AppraisalType { get; set; } = string.Empty;
public DateTime EffectiveDate { get; set; }
public string AppraisalNote { get; set; } = string.Empty;
public string Status { get; set; } = string.Empty;
public string? TenantId { get; set; }
}
+17
View File
@@ -0,0 +1,17 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
using Indotalent.Infrastructure.AutoNumberGenerator;
namespace Indotalent.Data.Entities;
public class AutoNumberSequence : BaseEntity, IAutoNumberGenerator, IMultiTenant
{
public string? EntityName { get; set; }
public int? Year { get; set; }
public int? Month { get; set; }
public long? CurrentSequence { get; set; }
public string? PrefixTemplate { get; set; }
public string? SuffixTemplate { get; set; }
public int? PaddingLength { get; set; }
public string? TenantId { get; set; }
}
+22
View File
@@ -0,0 +1,22 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Branch : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string? Code { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
public string StreetAddress { get; set; } = string.Empty;
public string City { get; set; } = string.Empty;
public string StateProvince { get; set; } = string.Empty;
public string ZipCode { get; set; } = string.Empty;
public string Phone { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public string OtherInformation1 { get; set; } = string.Empty;
public string OtherInformation2 { get; set; } = string.Empty;
public string OtherInformation3 { get; set; } = string.Empty;
public string? TenantId { get; set; }
}
+32
View File
@@ -0,0 +1,32 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Company : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string Name { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public bool IsDefault { get; set; } = false;
public string CurrencyId { get; set; } = string.Empty; //lookup to Currency
public Currency? Currency { get; set; }
public string TaxIdentification { get; set; } = string.Empty;
public string BusinessLicense { get; set; } = string.Empty;
public string CompanyLogo { get; set; } = string.Empty;
public string StreetAddress { get; set; } = string.Empty;
public string City { get; set; } = string.Empty;
public string StateProvince { get; set; } = string.Empty;
public string ZipCode { get; set; } = string.Empty;
public string Phone { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public string SocialMediaLinkedIn { get; set; } = string.Empty;
public string SocialMediaX { get; set; } = string.Empty;
public string SocialMediaFacebook { get; set; } = string.Empty;
public string SocialMediaInstagram { get; set; } = string.Empty;
public string SocialMediaTikTok { get; set; } = string.Empty;
public string OtherInformation1 { get; set; } = string.Empty;
public string OtherInformation2 { get; set; } = string.Empty;
public string OtherInformation3 { get; set; } = string.Empty;
public string? TenantId { get; set; }
}
+15
View File
@@ -0,0 +1,15 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Currency : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
public string? Code { get; set; }
public string? Symbol { get; set; }
public string? CountryOwner { get; set; }
public string? TenantId { get; set; }
}
+17
View File
@@ -0,0 +1,17 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Deduction : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string? Code { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
public string? Category { get; set; }
public bool PreTax { get; set; } = false;
public string? CalculationMethod { get; set; }
public string? Status { get; set; } = "Active";
public string? TenantId { get; set; }
}
+17
View File
@@ -0,0 +1,17 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Department : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string? CostCenter { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
public string HeadOfDeptartment { get; set; } = string.Empty;
public string OtherInformation1 { get; set; } = string.Empty;
public string OtherInformation2 { get; set; } = string.Empty;
public string OtherInformation3 { get; set; } = string.Empty;
public string? TenantId { get; set; }
}
+17
View File
@@ -0,0 +1,17 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Designation : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string? Code { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
public string? Level { get; set; }
public string OtherInformation1 { get; set; } = string.Empty;
public string OtherInformation2 { get; set; } = string.Empty;
public string OtherInformation3 { get; set; } = string.Empty;
public string? TenantId { get; set; }
}
+57
View File
@@ -0,0 +1,57 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Employee : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string Code { get; set; } = string.Empty;
public string FirstName { get; set; } = string.Empty;
public string MiddleName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
public string JobDescription { get; set; } = string.Empty;
public string? GradeId { get; set; }
public Grade? Grade { get; set; }
public decimal BasicSalary { get; set; }
public string SalaryBankName { get; set; } = string.Empty;
public string SalaryBankAccountName { get; set; } = string.Empty;
public string SalaryBankAccountNumber { get; set; } = string.Empty;
public string PlaceOfBirth { get; set; } = string.Empty;
public DateTime? DateOfBirth { get; set; }
public string Gender { get; set; } = string.Empty;
public string MaritalStatus { get; set; } = string.Empty;
public string Religion { get; set; } = string.Empty;
public string BloodType { get; set; } = string.Empty;
public string IdentityNumber { get; set; } = string.Empty;
public string TaxNumber { get; set; } = string.Empty;
public string LastEducation { get; set; } = string.Empty;
public DateTime? JoinedDate { get; set; }
public DateTime? ResignedDate { get; set; }
public string EmployeeStatus { get; set; } = string.Empty;
public string EmploymentType { get; set; } = string.Empty;
public string StreetAddress { get; set; } = string.Empty;
public string City { get; set; } = string.Empty;
public string StateProvince { get; set; } = string.Empty;
public string ZipCode { get; set; } = string.Empty;
public string Phone { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public string BranchId { get; set; } = string.Empty;
public Branch? Branch { get; set; }
public string DepartmentId { get; set; } = string.Empty;
public Department? Department { get; set; }
public string DesignationId { get; set; } = string.Empty;
public Designation? Designation { get; set; }
public string SocialMediaLinkedIn { get; set; } = string.Empty;
public string SocialMediaX { get; set; } = string.Empty;
public string SocialMediaFacebook { get; set; } = string.Empty;
public string SocialMediaInstagram { get; set; } = string.Empty;
public string SocialMediaTikTok { get; set; } = string.Empty;
public string OtherInformation1 { get; set; } = string.Empty;
public string OtherInformation2 { get; set; } = string.Empty;
public string OtherInformation3 { get; set; } = string.Empty;
public string? TenantId { get; set; }
public virtual ICollection<EmployeeIncome> EmployeeIncome { get; set; } = new List<EmployeeIncome>();
public virtual ICollection<EmployeeDeduction> EmployeeDeduction { get; set; } = new List<EmployeeDeduction>();
}
+17
View File
@@ -0,0 +1,17 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class EmployeeDeduction : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string? EmployeeId { get; set; }
public Employee? Employee { get; set; }
public string? DeductionId { get; set; }
public Deduction? Deduction { get; set; }
public decimal Amount { get; set; }
public string? Description { get; set; }
public bool IsActive { get; set; } = true;
public string? TenantId { get; set; }
}
+17
View File
@@ -0,0 +1,17 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class EmployeeIncome : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string? EmployeeId { get; set; }
public Employee? Employee { get; set; }
public string? IncomeId { get; set; }
public Income? Income { get; set; }
public decimal Amount { get; set; }
public string? Description { get; set; }
public bool IsActive { get; set; } = true;
public string? TenantId { get; set; }
}
+20
View File
@@ -0,0 +1,20 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Evaluation : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string EmployeeId { get; set; } = string.Empty;
public Employee? Employee { get; set; }
public string Period { get; set; } = string.Empty;
public string FinalScore { get; set; } = string.Empty;
public string Rating { get; set; } = string.Empty;
public string EvaluatorId { get; set; } = string.Empty;
public Employee? Evaluator { get; set; }
public DateTime EvaluationDate { get; set; }
public string EvaluationNote { get; set; } = string.Empty;
public string Status { get; set; } = string.Empty;
public string? TenantId { get; set; }
}
+17
View File
@@ -0,0 +1,17 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Grade : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string? Code { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
public decimal SalaryFrom { get; set; }
public decimal SalaryTo { get; set; }
public bool IsOverTimeEligible { get; set; } = true;
public string? Status { get; set; } = "Active";
public string? TenantId { get; set; }
}
+17
View File
@@ -0,0 +1,17 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Income : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string? Code { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
public string? Type { get; set; }
public bool IsTaxable { get; set; } = true;
public string? CalculationBase { get; set; }
public string? Status { get; set; } = "Active";
public string? TenantId { get; set; }
}
+23
View File
@@ -0,0 +1,23 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class LeaveBalance : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string EmployeeId { get; set; } = string.Empty;
public Employee? Employee { get; set; }
public string LeaveCategoryId { get; set; } = string.Empty;
public LeaveCategory? LeaveCategory { get; set; }
public int Entitlement { get; set; }
public int Used { get; set; }
public int Pending { get; set; }
public int Remaining { get; set; }
public int Year { get; set; }
public DateTime ValidFrom { get; set; }
public DateTime ValidTo { get; set; }
public int CarryForward { get; set; }
public string? TenantId { get; set; }
}
+20
View File
@@ -0,0 +1,20 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class LeaveCategory : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string Code { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public int Quota { get; set; }
public bool IsPaidLeave { get; set; }
public string Description { get; set; } = string.Empty;
public string Status { get; set; } = string.Empty;
public bool AllowCarryForward { get; set; }
public int MaxCarryForward { get; set; }
public int MinServiceMonths { get; set; }
public string? TenantId { get; set; }
}
+23
View File
@@ -0,0 +1,23 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class LeaveRequest : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string EmployeeId { get; set; } = string.Empty;
public Employee? Employee { get; set; }
public string LeaveCategoryId { get; set; } = string.Empty;
public LeaveCategory? LeaveCategory { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public double Days { get; set; }
public string Reason { get; set; } = string.Empty;
public string Status { get; set; } = string.Empty; // Pending, Approved, Rejected, Cancelled
public string? AttachmentPath { get; set; }
public string? ApproverId { get; set; }
public DateTime? ActionDate { get; set; }
public string? RejectReason { get; set; }
public string? TenantId { get; set; }
}
+15
View File
@@ -0,0 +1,15 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class PayrollComponent : BaseEntity, IMultiTenant
{
public string? PayrollDetailId { get; set; }
public PayrollDetail? PayrollDetail { get; set; }
public string? ComponentName { get; set; }
public string? ComponentType { get; set; }
public decimal Amount { get; set; }
public string? Description { get; set; }
public string? TenantId { get; set; }
}
+20
View File
@@ -0,0 +1,20 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class PayrollDetail : BaseEntity, IMultiTenant
{
public string? PayrollProcessId { get; set; }
public PayrollProcess? PayrollProcess { get; set; }
public string? EmployeeId { get; set; }
public Employee? Employee { get; set; }
public string? EmployeeCode { get; set; }
public string? EmployeeName { get; set; }
public decimal BasicSalary { get; set; }
public decimal TotalIncome { get; set; }
public decimal TotalDeduction { get; set; }
public decimal TakeHomePay { get; set; }
public virtual ICollection<PayrollComponent> Components { get; set; } = new List<PayrollComponent>();
public string? TenantId { get; set; }
}
+23
View File
@@ -0,0 +1,23 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class PayrollProcess : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string? PeriodName { get; set; }
public DateTime FromDate { get; set; }
public DateTime ToDate { get; set; }
public int TotalEmployees { get; set; }
public decimal TotalBasicSalary { get; set; }
public decimal TotalIncome { get; set; }
public decimal TotalDeduction { get; set; }
public decimal TotalGross { get; set; }
public decimal TotalTakeHomePay { get; set; }
public string? Status { get; set; }
public string? ProcessedBy { get; set; }
public DateTime ProcessedAt { get; set; }
public string? Description { get; set; }
public string? TenantId { get; set; }
}
+17
View File
@@ -0,0 +1,17 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Promotion : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string EmployeeId { get; set; } = string.Empty;
public Employee? Employee { get; set; }
public string FromGrade { get; set; } = string.Empty;
public string ToGrade { get; set; } = string.Empty;
public DateTime? EffectiveDate { get; set; }
public string PromotionNote { get; set; } = string.Empty;
public string Status { get; set; } = string.Empty;
public string? TenantId { get; set; }
}
+16
View File
@@ -0,0 +1,16 @@
using System.ComponentModel.DataAnnotations;
namespace Indotalent.Data.Entities;
public class SerilogLogs
{
[Key]
public int Id { get; set; }
public string? Message { get; set; }
public string? MessageTemplate { get; set; }
public string? Level { get; set; }
public DateTimeOffset TimeStamp { get; set; }
public string? Exception { get; set; }
public string? Properties { get; set; }
public string? LogEvent { get; set; }
}
+15
View File
@@ -0,0 +1,15 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Tax : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string? Name { get; set; }
public string? Description { get; set; }
public string? Code { get; set; }
public decimal PercentageValue { get; set; }
public string? Category { get; set; }
public string? TenantId { get; set; }
}
+21
View File
@@ -0,0 +1,21 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Tenant : BaseEntity
{
public string? Name { get; set; }
public string? Description { get; set; }
public string? Street { get; set; }
public string? City { get; set; }
public string? State { get; set; }
public string? ZipCode { get; set; }
public string? Country { get; set; }
public string? PhoneNumber { get; set; }
public string? FaxNumber { get; set; }
public string? EmailAddress { get; set; }
public string? Website { get; set; }
public bool IsActive { get; set; } = true;
public ICollection<TenantUser> TenantUserList { get; set; } = new List<TenantUser>();
}
+12
View File
@@ -0,0 +1,12 @@
using Indotalent.Data.Abstracts;
namespace Indotalent.Data.Entities;
public class TenantUser : BaseEntity
{
public string? TenantId { get; set; }
public Tenant? Tenant { get; set; }
public string? UserId { get; set; }
public string? Summary { get; set; }
public bool IsActive { get; set; } = true;
}
+27
View File
@@ -0,0 +1,27 @@
using Indotalent.Data.Abstracts;
using Indotalent.Data.Interfaces;
namespace Indotalent.Data.Entities;
public class Transfer : BaseEntity, IHasAutoNumber, IMultiTenant
{
public string? AutoNumber { get; set; }
public string EmployeeId { get; set; } = string.Empty;
public Employee? Employee { get; set; }
public string FromBranchId { get; set; } = string.Empty;
public Branch? FromBranch { get; set; }
public string FromDepartmentId { get; set; } = string.Empty;
public Department? FromDepartment { get; set; }
public string FromDesignationId { get; set; } = string.Empty;
public Designation? FromDesignation { get; set; }
public string ToBranchId { get; set; } = string.Empty;
public Branch? ToBranch { get; set; }
public string ToDepartmentId { get; set; } = string.Empty;
public Department? ToDepartment { get; set; }
public string ToDesignationId { get; set; } = string.Empty;
public Designation? ToDesignation { get; set; }
public DateTime? TransferDate { get; set; }
public string TransferNote { get; set; } = string.Empty;
public string Status { get; set; } = string.Empty;
public string? TenantId { get; set; }
}