from django.db import models
from django.core.validators import MinValueValidator, MaxValueValidator
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import transaction
from django.utils import timezone
from simple_history.models import HistoricalRecords
from datetime import date
from .choices import *

class BaseModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True, blank=True, null=True)
    updated_at = models.DateTimeField(auto_now=True, blank=True, null=True)
    history = HistoricalRecords(inherit=True)
    class Meta:
        abstract = True
  
#Member Type
class MemberType(BaseModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=150)
    showName = models.CharField(max_length=150,default="",null=True,blank=True)
    def __str__(self):
        return self.name

class MemberStatus(BaseModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=150)
    def __str__(self):
        return self.name
class Rank(BaseModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=150)
    member_status = models.ForeignKey(MemberStatus, on_delete=models.SET_NULL, related_name='ranks', null=True, blank=True)
    memberType = models.ForeignKey(MemberType, on_delete=models.CASCADE, related_name='ranks')
    def __str__(self):
        return self.name
  
class Apartment(BaseModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=150)
    def __str__(self):
        return self.name

class Battalion(BaseModel):
    id = models.AutoField(primary_key=True)
    sn = models.IntegerField(default=0,null=True,blank=True)
    name = models.CharField(max_length=150,default='')
    
    def __str__(self):
        return self.name

class Company(BaseModel):
    id = models.AutoField(primary_key=True)
    sn = models.IntegerField(default=0,null=True,blank=True)
    battalion = models.ForeignKey(Battalion, on_delete=models.CASCADE, related_name='companies')
    name = models.CharField(max_length=150,default="")
    
    #member type
    offr = models.IntegerField(default=0,null=True,blank=True)
    mwo = models.IntegerField(default=0,null=True,blank=True)
    smo = models.IntegerField(default=0,null=True,blank=True)
    wo = models.IntegerField(default=0,null=True,blank=True)
    sgt = models.IntegerField(default=0,null=True,blank=True)
    cpl = models.IntegerField(default=0,null=True,blank=True)
    lcpl = models.IntegerField(default=0,null=True,blank=True)
    snk = models.IntegerField(default=0,null=True,blank=True)
    clk = models.IntegerField(default=0,null=True,blank=True)
    tailor = models.IntegerField(default=0,null=True,blank=True)
    e_br = models.IntegerField(default=0,null=True,blank=True)
    ck_mm = models.IntegerField(default=0,null=True,blank=True)
    carp = models.IntegerField(default=0,null=True,blank=True)
    rco = models.IntegerField(default=0,null=True,blank=True)
    nc_e = models.IntegerField(default=0,null=True,blank=True)
    nc_u = models.IntegerField(default=0,null=True,blank=True)
    att = models.IntegerField(default=0,null=True,blank=True)
    #ere member type
    ere_offr = models.IntegerField(default=0,null=True,blank=True)
    ere_mwo = models.IntegerField(default=0,null=True,blank=True)
    ere_smo = models.IntegerField(default=0,null=True,blank=True)
    ere_wo = models.IntegerField(default=0,null=True,blank=True)
    ere_sgt = models.IntegerField(default=0,null=True,blank=True)
    ere_cpl = models.IntegerField(default=0,null=True,blank=True)
    ere_lcpl = models.IntegerField(default=0,null=True,blank=True)
    ere_snk = models.IntegerField(default=0,null=True,blank=True)
    ere_clk = models.IntegerField(default=0,null=True,blank=True)
    ere_tailor = models.IntegerField(default=0,null=True,blank=True)
    ere_e_br = models.IntegerField(default=0,null=True,blank=True)
    ere_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    ere_carp = models.IntegerField(default=0,null=True,blank=True)
    ere_rco = models.IntegerField(default=0,null=True,blank=True)
    ere_nc_e = models.IntegerField(default=0,null=True,blank=True)
    ere_nc_u = models.IntegerField(default=0,null=True,blank=True)
    ere_att = models.IntegerField(default=0,null=True,blank=True)
    
    #offr member_type
    # offr_auth
    g = models.IntegerField(default=0,null=True,blank=True)
    lg = models.IntegerField(default=0,null=True,blank=True)
    mg = models.IntegerField(default=0,null=True,blank=True)
    bg = models.IntegerField(default=0,null=True,blank=True)
    c = models.IntegerField(default=0,null=True,blank=True)
    lc = models.IntegerField(default=0,null=True,blank=True)
    m = models.IntegerField(default=0,null=True,blank=True)
    cp = models.IntegerField(default=0,null=True,blank=True)
    l = models.IntegerField(default=0,null=True,blank=True)
    sl = models.IntegerField(default=0,null=True,blank=True)
    # ere_offr_auth
    ere_g = models.IntegerField(default=0,null=True,blank=True)
    ere_lg = models.IntegerField(default=0,null=True,blank=True)
    ere_mg = models.IntegerField(default=0,null=True,blank=True)
    ere_bg = models.IntegerField(default=0,null=True,blank=True)
    ere_c = models.IntegerField(default=0,null=True,blank=True)
    ere_lc = models.IntegerField(default=0,null=True,blank=True)
    ere_m = models.IntegerField(default=0,null=True,blank=True)
    ere_cp = models.IntegerField(default=0,null=True,blank=True)
    ere_l = models.IntegerField(default=0,null=True,blank=True)
    ere_sl = models.IntegerField(default=0,null=True,blank=True)
    def __str__(self):
        return self.name
    


# create a custom user model where required fields is username and password and multiple role users
class Module(BaseModel):
    name = models.CharField(max_length=100)
    def __str__(self):
        return self.name

class Role(BaseModel):
    name = models.CharField(max_length=100, unique=True)
    modules = models.ManyToManyField(Module, through='RoleModuleAccess')
    h_name = models.CharField(max_length=100, blank=True, null=True)
    sn = models.IntegerField(null=True,blank=True)

    def __str__(self):
        return self.name

class RoleModuleAccess(BaseModel):
    role = models.ForeignKey(Role, on_delete=models.CASCADE)
    module = models.ForeignKey(Module, on_delete=models.CASCADE)

class CustomUserManager(BaseUserManager):
    def create_user(self, email, password=None, **extra_fields):
        if not email:
            raise ValueError('The Username field must be set')
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        extra_fields.setdefault('is_active', True)
        user.save(using=self._db)
        return user
    def create_superuser(self, email, password=None, **extra_fields):
        # Auto-assign default role 'Admin' if not given
        if 'role' not in extra_fields or extra_fields['role'] is None:
            try:
                admin_role, created = Role.objects.get_or_create(name='Admin')
            except Role.DoesNotExist:
                raise ValueError("❌ Role 'Admin' does not exist. Please create it first.")
            extra_fields['role'] = admin_role
        extra_fields.setdefault('is_staff', True)
        extra_fields.setdefault('is_superuser', True)
        extra_fields.setdefault('is_active', True)
        if extra_fields.get('is_staff') is not True:
            raise ValueError('Superuser must have is_staff=True.')
        if extra_fields.get('is_superuser') is not True:
            raise ValueError('Superuser must have is_superuser=True.')
        return self.create_user(email, password, **extra_fields)

class CustomUser(AbstractBaseUser, PermissionsMixin):
    id = models.AutoField(primary_key=True)
    email = models.CharField(max_length=150, unique=True)
    army_no = models.CharField(max_length=50, null=True,blank=True)
    name = models.CharField(max_length=150,default='Anonymous')
    rank = models.ForeignKey(Rank, on_delete=models.SET_NULL, null=True, blank=True)
    apartment = models.ForeignKey(Apartment, on_delete=models.SET_NULL, null=True, blank=True)
    battalion = models.ForeignKey(Battalion, on_delete=models.CASCADE, null=True, blank=True)
    company = models.ForeignKey(Company, on_delete=models.CASCADE, null=True, blank=True)
    mobile_no = models.CharField(max_length=50,null=True,blank=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    # Roles
    role = models.ForeignKey(Role, on_delete=models.SET_NULL, null=True, blank=True)
    picture = models.ImageField(upload_to='users/',null=True, blank=True)

    objects = CustomUserManager()
    
    history = HistoricalRecords()

    USERNAME_FIELD = 'email'
    
    def __str__(self):
        return f"{self.email} - {self.role.name if self.role else 'No Role'}"


class Trade(BaseModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=150)
    def __str__(self):
        return self.name
class Core(BaseModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=150)
    def __str__(self):
        return self.name

class SpecialQuality(BaseModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=150)
    def __str__(self):
        return self.name
    

class District(BaseModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=150)
    def __str__(self):
        return self.name

class Upazila(BaseModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=150)
    district = models.ForeignKey(District, on_delete=models.CASCADE, related_name='upazilas')
    def __str__(self):
        return self.name

class Batch(BaseModel):
    text = models.CharField(max_length=150)
    def __str__(self):
        return self.text

class Member(BaseModel):
    id = models.AutoField(primary_key=True)
    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE, related_name='member')
    company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='members', null=True)
    member_type = models.ForeignKey(MemberType, on_delete=models.SET_NULL, related_name='members', null=True)
    rank = models.ForeignKey(Rank, on_delete=models.SET_NULL, related_name='members', null=True)
    apartment = models.ForeignKey(Apartment, on_delete=models.SET_NULL, related_name='members',null=True)
    army_no = models.CharField(max_length=50,unique=True)
    mobile_no = models.CharField(max_length=50)
    name = models.CharField(max_length=150)
    short_name = models.CharField(max_length=250, default="anonymous",null=True,blank=True)
    active = models.BooleanField(default=True,null=True,blank=True)
    picture = models.ImageField(upload_to='members/',null=True, blank=True)
    p_company = models.ForeignKey(Company, on_delete=models.SET_NULL, related_name='p_members',null=True)
    t_company = models.ForeignKey(Company, on_delete=models.SET_NULL, related_name='t_members',null=True)
    ops_depl = models.BooleanField(default=False,null=True,blank=True)
    def delete(self, *args, **kwargs):
        user = self.user  # Store reference to the user before deletion
        super().delete(*args, **kwargs)  # Delete the Member instance
        if user:
            user.delete()  # Delete the associated CustomUser
    def __str__(self):
        return f'{self.army_no}'
    
class LeaveType(BaseModel):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=150)
    showName = models.CharField(max_length=150,default="",null=True,blank=True)
    days = models.CharField(max_length=3,null=True,blank=True)
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    def __str__(self):
        return self.name  
    
class LeaveReason(BaseModel):
    text = models.CharField(max_length=150)
    def __str__(self):
        return self.text
class LeaveReasonDes(BaseModel):
    text = models.CharField(max_length=250)
    leave_reason = models.ForeignKey(LeaveReason, on_delete=models.CASCADE, related_name='descriptions')
    def __str__(self):
        return self.text

class CompanyTakeAttendance(BaseModel):
    id = models.AutoField(primary_key=True)
    company = models.ForeignKey(Company, on_delete=models.SET_NULL,null=True,blank=True)
    attendance_date = models.DateField()
    def __str__(self):
        return f"Attendance for {self.company} on {self.attendance_date}"           
    

class AttendanceMember(BaseModel):
    id = models.AutoField(primary_key=True)
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    ops_depl = models.BooleanField(default=False,null=True,blank=True)
    attendance = models.ForeignKey(CompanyTakeAttendance, on_delete=models.CASCADE)
    status = models.BooleanField(default=False,null=True,blank=True)
    reason = models.ForeignKey(LeaveReason, on_delete=models.SET_NULL, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    def __str__(self):
        return f"{self.member} - {self.attendance}"
class Leave(BaseModel):
    id = models.AutoField(primary_key=True)
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    attendance_member = models.OneToOneField(
        AttendanceMember, 
        on_delete=models.SET_NULL,
        related_name='leave',
        null=True,
        blank=True
    )
    reason = models.ForeignKey(LeaveReason, on_delete=models.SET_NULL, null=True, blank=True)
    reason_des = models.ForeignKey(LeaveReasonDes, on_delete=models.SET_NULL, null=True, blank=True)
    leave_type = models.ForeignKey(LeaveType, on_delete=models.SET_NULL, null=True, blank=True)
    days = models.IntegerField(null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    apply_by = models.CharField(max_length=50,null=True,blank=True)
    
    def __str__(self):
        return f"{self.member} - {self.leave_type}"
    
    
class AttendanceSummaryCart(BaseModel):
    battalion = models.ForeignKey(Battalion,on_delete=models.SET_NULL,null=True,blank=True)
    date = models.DateField()
    battalion_approved = models.BooleanField(null=True,blank=True)
    adjutant_approved = models.BooleanField(null=True,blank=True)
    dq_approved = models.BooleanField(null=True,blank=True)
    



class ApplyLeave(BaseModel):
    STATUS = (
        ('pending', 'Pending'),
        ('approved', 'Approved'),
        ('rejected', 'Rejected'),
    )
    CHOICE_LIST = [
        ("p_leave", "P Leave"),
        ("c_leave", "C Leave"),
        ("r_leave", "R Leave"),
        ("m_leave", "M Leave"),
        ("w_leave", "W Leave"),
        ("j_leave", "J Leave"),
    ]
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    leave_type = models.ForeignKey(LeaveType, on_delete=models.SET_NULL, null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    reason = models.ForeignKey(LeaveReason, on_delete=models.SET_NULL, null=True, blank=True)
    reason_des = models.ForeignKey(LeaveReasonDes, on_delete=models.SET_NULL, null=True, blank=True)
    days = models.IntegerField(null=True, blank=True)
    status = models.CharField(max_length=10, choices=STATUS, default='pending')
    csm_status = models.CharField(max_length=10, choices=STATUS, default='pending')
    company_commander_status = models.CharField(max_length=10, choices=STATUS, default='pending')
    apply_by = models.CharField(max_length=50,null=True,blank=True)

    def __str__(self):
        return f"{self.member} - {self.leave_type}"
    
     
class MovementOrder(BaseModel):
    CHOICE_LIST = [
        ("other_one", "Other One"),
        ("other_two", "Other Two"),
    ]
    inOut = [
        ("in", "In"),
        ("out", "Out"),
    ]
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    movement_type = models.CharField(max_length=50, null=True, blank=True)
    show_movement_type = models.CharField(max_length=50, null=True, blank=True)
    unit = models.CharField(max_length=50, null=True, blank=True)
    reason = models.TextField(null=True, blank=True)
    status = models.CharField(max_length=10, choices=inOut, null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    days = models.IntegerField(null=True, blank=True)
    
    
    
class MainLeave(BaseModel):
    CHOICE_LIST = [
        ("p_leave", "P Leave"),
        ("c_leave", "C Leave"),
        ("r_leave", "R Leave"),
        ("m_leave", "M Leave"),
        ("w_leave", "W Leave"),
        ("j_leave", "J Leave"),
    ]
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    leave_type = models.ForeignKey(LeaveType, on_delete=models.SET_NULL, null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    days = models.IntegerField(null=True, blank=True)
    reason = models.ForeignKey(LeaveReason, on_delete=models.SET_NULL, null=True, blank=True)
    reason_des = models.ForeignKey(LeaveReasonDes, on_delete=models.SET_NULL, null=True, blank=True)
    def __str__(self):
        return f"{self.member} - {self.leave_type}"
    
class CourseName(BaseModel):
    text = models.CharField(max_length=50, null=True, blank=True)
    def __str__(self):
        return f"{self.text}"
class CourseInstitution(BaseModel):
    text = models.CharField(max_length=50, null=True, blank=True)
    def __str__(self):
        return f"{self.text}"
    
class Course_Cdr_Trg(BaseModel):
    CHOICE_LIST = [
        ("course", "Course"),
        ("cdr", "CDR"),
        ("trg", "Trg"),
    ]
    RESULT_LIST = [
        (1, "Pass"),
        (2, "Fail"),
    ]
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    leave_type = models.ForeignKey(LeaveType, on_delete=models.SET_NULL, null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    days = models.IntegerField(null=True, blank=True)
    course_name = models.ForeignKey(CourseName, on_delete=models.SET_NULL, null=True, blank=True)
    institution = models.ForeignKey(CourseInstitution, on_delete=models.SET_NULL, null=True, blank=True)
    result = models.IntegerField(null=True, blank=True, choices=RESULT_LIST)
    marks = models.IntegerField(null=True, blank=True)
    def __str__(self):
        return f"{self.member} - {self.leave_type}"
    
class OutOfUnitEmp(BaseModel):
    CHOICE_LIST = [
        ("ere", "ERE"), 
        ("att", "Att"), 
        ("t_duty", "T Duty"), 
        ("msn", "Msn"),
        ("okp", "OKP"),
        ("demov", "Demov"),
    ]
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True,related_name='outOfUnitEmp')
    type_name = models.CharField(max_length=50, null=True, blank=True, choices=CHOICE_LIST)
    unit = models.CharField(max_length=50, null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    reason = models.TextField(null=True, blank=True)
    status = models.BooleanField(default=True,null=True,blank=True)
    def __str__(self):
            return f"{self.member} - {self.type_name}"
class UnauthAbsent(BaseModel):
    CHOICE_LIST = [
        ("awol", "AWOL"), 
        ("osl", "OSL"),
    ]
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True,related_name='unauthAbsent')
    leave_type = models.ForeignKey(LeaveType, on_delete=models.SET_NULL, null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    reason = models.ForeignKey(LeaveReason, on_delete=models.SET_NULL, null=True, blank=True)
    status = models.BooleanField(default=True,null=True,blank=True)
    def __str__(self):
        return f"{self.member} - {self.leave_type}"
  
    
class OtherReason(BaseModel):
    CHOICE_LIST = [
        ("cmh", "CMH"), 
        ("line_sick", "Line Sick"),
        ("misc", "Misc"),
        ("stmk", "STMK"),
    ]
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True,related_name='otherReason')
    leave_type = models.ForeignKey(LeaveType, on_delete=models.SET_NULL, null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    reason = models.ForeignKey(LeaveReason, on_delete=models.SET_NULL, null=True, blank=True)
    status = models.BooleanField(default=True,null=True,blank=True)
    def __str__(self):
        return f"{self.member} - {self.leave_type}"
    
class OpsDeplLocation(BaseModel):
    text = models.CharField(max_length=50, null=True, blank=True)
    def __str__(self):
        return f"{self.text}"
class OpsDepl(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    location = models.ForeignKey(OpsDeplLocation, on_delete=models.SET_NULL, null=True, blank=True)
    status = models.BooleanField(default=True,null=True,blank=True)
    def __str__(self):
        return f"{self.member}"
class TransCoy(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    old_company = models.ForeignKey(Company, on_delete=models.SET_NULL, null=True, blank=True, related_name="old_company")
    new_company = models.ForeignKey(Company, on_delete=models.SET_NULL, null=True, blank=True, related_name="new_company")
    reason = models.TextField(null=True, blank=True)
    
class EreTypeTwo(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    start_date = models.DateField(null=True, blank=True)
    end_date = models.DateField(null=True, blank=True)
    reason = models.TextField(null=True, blank=True)
    status = models.BooleanField(default=True,null=True,blank=True)
    from_company = models.ForeignKey(Company, on_delete=models.SET_NULL, null=True, blank=True, related_name="from_company")
    to_company = models.ForeignKey(Company, on_delete=models.SET_NULL, null=True, blank=True, related_name="to_company")
    def __str__(self):
        return f"{self.member}"
   
   
#TODO: performance 
class PunishmentType(BaseModel):
    text = models.CharField(max_length=150)
    def __str__(self):
        return self.text
class PunishmentName(BaseModel):
    text = models.CharField(max_length=150)
    def __str__(self):
        return self.text
class Punishment(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    punishment_type = models.ForeignKey(PunishmentType, on_delete=models.SET_NULL, null=True, blank=True)
    punishment_name = models.ForeignKey(PunishmentName, on_delete=models.SET_NULL, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    remarks = models.TextField(null=True, blank=True)
    def __str__(self):
        return f"{self.member}"

class PromotionType(BaseModel):
    text = models.CharField(max_length=50, null=True, blank=True)
    def __str__(self):
        return f"{self.text}"
class Promotion(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    promotion_type = models.ForeignKey(PromotionType, on_delete=models.SET_NULL, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    remarks = models.TextField(null=True, blank=True)
    def __str__(self):
        return f"{self.member}"
    
    
class DemotionType(BaseModel):
    text = models.CharField(max_length=50, null=True, blank=True)
    def __str__(self):
        return f"{self.text}"
class Demotion(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    demotion_type = models.ForeignKey(DemotionType, on_delete=models.SET_NULL, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    remarks = models.TextField(null=True, blank=True)
    def __str__(self):
        return f"{self.member}"
    

class PET(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    by_annual = models.IntegerField(choices=BY_ANNUAL_LIST, null=True, blank=True)
    result = models.IntegerField(choices=RESULT_LIST, null=True, blank=True)
    attempt = models.IntegerField(choices=ATTEMPT_LIST, null=True, blank=True)
    auth = models.CharField(max_length=250, null=True, blank=True)
    remark = models.IntegerField(choices=REMARK_LIST, null=True, blank=True)
    reason = models.IntegerField(choices=REASON_LIST, null=True, blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"
class PETMultiple(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    by_annual = models.IntegerField(choices=BY_ANNUAL_LIST, null=True, blank=True)
    auth = models.CharField(max_length=250, null=True, blank=True)
    submit = models.BooleanField(default=False,null=True,blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"
    
class RET(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    result = models.IntegerField(choices=RESULT_LIST, null=True, blank=True)
    attempt = models.IntegerField(choices=ATTEMPT_LIST, null=True, blank=True)
    gp = models.IntegerField(choices=GP_LIST, null=True, blank=True)
    hit = models.IntegerField(null=True, blank=True)
    total = models.IntegerField(null=True, blank=True)
    auth = models.CharField(max_length=250, null=True, blank=True)
    reason = models.IntegerField(choices=REASON_LIST, null=True, blank=True)
    ret = models.IntegerField(choices=Yes_No, null=True, blank=True)
    remark = models.IntegerField(choices=REMARK_LIST, null=True, blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"
class RETMultiple(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    auth = models.CharField(max_length=250, null=True, blank=True)
    submit = models.BooleanField(default=False,null=True,blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"
    
class GRFiring(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    result = models.IntegerField(choices=RESULT_LIST, null=True, blank=True)
    attempt = models.IntegerField(choices=ATTEMPT_LIST, null=True, blank=True)
    auth = models.CharField(max_length=250, null=True, blank=True)
    remark = models.IntegerField(choices=REMARK_LIST, null=True, blank=True)
    total = models.IntegerField(null=True, blank=True)
    reason = models.IntegerField(choices=REASON_LIST, null=True, blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"
    
class GRFiringMultiple(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    auth = models.CharField(max_length=250, null=True, blank=True)
    submit = models.BooleanField(default=False,null=True,blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"
    
class AsltCourse(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    result = models.IntegerField(choices=RESULT_LIST, null=True, blank=True)
    attempt = models.IntegerField(choices=ATTEMPT_LIST, null=True, blank=True)
    remark = models.IntegerField(choices=REMARK_LIST, null=True, blank=True)
    auth = models.CharField(max_length=250, null=True, blank=True)
    reason = models.IntegerField(choices=REASON_LIST, null=True, blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"
class AsltCourseMultiple(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    auth = models.CharField(max_length=250, null=True, blank=True)
    submit = models.BooleanField(default=False,null=True,blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"
    
class SM(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    result = models.IntegerField(choices=RESULT_LIST, null=True, blank=True)
    attempt = models.IntegerField(choices=ATTEMPT_LIST, null=True, blank=True)
    remark = models.IntegerField(choices=REMARK_LIST, null=True, blank=True)
    auth = models.CharField(max_length=250, null=True, blank=True)
    reason = models.IntegerField(choices=REASON_LIST, null=True, blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"
class SMMultiple(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    auth = models.CharField(max_length=250, null=True, blank=True)
    submit = models.BooleanField(default=False,null=True,blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"


class ExPerfName(BaseModel):
    text = models.CharField(max_length=50, null=True, blank=True)
    def __str__(self):
        return f"{self.text}"
class ExPerf(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date_from = models.DateField(null=True, blank=True)
    date_to = models.DateField(null=True, blank=True)
    appt_held = models.CharField(max_length=250, null=True, blank=True)
    ex_perf_name = models.ForeignKey(ExPerfName, on_delete=models.SET_NULL, null=True, blank=True)
    remark = models.IntegerField(choices=REMARK_LIST, null=True, blank=True)
    def __str__(self):
        return f"{self.member}"
class ExPerfMultiple(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date_from = models.DateField(null=True, blank=True)
    date_to = models.DateField(null=True, blank=True)
    ex_perf_name = models.ForeignKey(ExPerfName, on_delete=models.SET_NULL, null=True, blank=True)
    submit = models.BooleanField(default=False,null=True,blank=True)

    def __str__(self):
        return f"{self.member}"
    
class Range(BaseModel):
    text = models.CharField(max_length=50, null=True, blank=True)
    def __str__(self):
        return f"{self.text}"
class FDFiring(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date_from = models.DateField(null=True, blank=True)
    date_to = models.DateField(null=True, blank=True)
    result = models.IntegerField(choices=RESULT_LIST, null=True, blank=True)
    score = models.IntegerField(null=True, blank=True)
    remark = models.IntegerField(choices=REMARK_LIST, null=True, blank=True)
    reason = models.IntegerField(choices=REASON_LIST, null=True, blank=True)
    range = models.ForeignKey(Range, on_delete=models.SET_NULL, null=True, blank=True)
    @property
    def duration(self):
        return (self.date_to - self.date_from).days
    def __str__(self):
        return f"{self.member}"
class FDFiringMultiple(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date_from = models.DateField(null=True, blank=True)
    date_to = models.DateField(null=True, blank=True)
    range = models.ForeignKey(Range, on_delete=models.SET_NULL, null=True, blank=True)
    submit = models.BooleanField(default=False,null=True,blank=True)
    def __str__(self):
        return f"{self.member}"
    
class CourseShooting(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date_from = models.DateField(null=True, blank=True)
    date_to = models.DateField(null=True, blank=True)
    result = models.IntegerField(choices=RESULT_LIST, null=True, blank=True)
    score = models.IntegerField(null=True, blank=True)
    remark = models.IntegerField(choices=REMARK_LIST, null=True, blank=True)
    reason = models.IntegerField(choices=REASON_LIST, null=True, blank=True)
    range = models.ForeignKey(Range, on_delete=models.SET_NULL, null=True, blank=True)
    @property
    def duration(self):
        return (self.date_to - self.date_from).days
    def __str__(self):
        return f"{self.member}"
class CourseShootingMultiple(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date_from = models.DateField(null=True, blank=True)
    date_to = models.DateField(null=True, blank=True)
    range = models.ForeignKey(Range, on_delete=models.SET_NULL, null=True, blank=True)
    submit = models.BooleanField(default=False,null=True,blank=True)
    def __str__(self):
        return f"{self.member}"
    
class Observation(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    remarks = models.TextField(null=True, blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"
    
class Reward(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    remarks = models.TextField(null=True, blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"
    
class Deserter(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    remarks = models.TextField(null=True, blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"


class Notice(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    remarks = models.TextField(null=True, blank=True)
    notice_from = models.CharField(max_length=100, null=True, blank=True)
    notice_for = models.CharField(max_length=100, null=True, blank=True)
    sender_name = models.CharField(max_length=255, null=True, blank=True)
    def __str__(self):
        return f"{self.member} - {self.date}"

class NoticeHistory(BaseModel):
    date = models.DateField(null=True, blank=True)
    remarks = models.TextField(null=True, blank=True)
    notice_from = models.CharField(max_length=255, null=True, blank=True)
    notice_for = models.CharField(max_length=255, null=True, blank=True)
    def __str__(self):
        return f"{self.notice_from} - {self.date}"

class ListCategory(BaseModel):
    text = models.CharField(max_length=100, null=True, blank=True)
    def __str__(self):
        return f"{self.text}"
class List(BaseModel):
    category = models.ForeignKey(ListCategory, on_delete=models.CASCADE, null=True, blank=True)
    title = models.CharField(max_length=100, null=True, blank=True)
    date = models.DateField(null=True, blank=True)
    unit = models.CharField(max_length=255, null=True, blank=True)
    members = models.ManyToManyField(Member, related_name="lists")
    def __str__(self):
        return f"{self.text}"

class BasicInformation(BaseModel):
    BLOOD_LIST = [
        ("a+", "A+"),
        ("a-", "A-"),
        ("b+", "B+"),
        ("b-", "B-"),
        ("o+", "O+"),
        ("o-", "O-"),
        ("ab+", "AB+"),
        ("ab-", "AB-"),
    ]
    GENDER_LIST = [
        ("male", "Male"),
        ("female", "Female"),
    ]
    MARITAL_STATUS_LIST = [
        ("single", "Single"),
        ("married", "Married"),
        ("unmarried", "Unmarried"),
        ("divorced", "Divorced"),
        ("widowed", "Widowed"),
        ("separated", "Separated"),
    ]
    member = models.OneToOneField(Member, on_delete=models.CASCADE, null=True, blank=True, related_name='basic_information')
    blood = models.CharField(max_length=50, choices=BLOOD_LIST, null=True, blank=True)
    email = models.EmailField(null=True, blank=True)
    nid = models.CharField(max_length=150, null=True, blank=True)
    birth = models.CharField(max_length=150, null=True, blank=True)
    passport = models.CharField(max_length=150, null=True, blank=True)
    bank = models.CharField(max_length=150, null=True, blank=True)
    religion = models.CharField(max_length=150, null=True, blank=True)
    height = models.CharField(max_length=150, null=True, blank=True)
    district = models.ForeignKey(District, on_delete=models.SET_NULL, null=True, blank=True)
    upazila = models.ForeignKey(Upazila, on_delete=models.SET_NULL, null=True, blank=True)
    date_of_birth = models.DateField(null=True, blank=True)
    gender = models.CharField(max_length=50, choices=GENDER_LIST, null=True, blank=True)
    marital_status = models.CharField(max_length=150,choices=MARITAL_STATUS_LIST, null=True, blank=True)
    em_name = models.CharField(max_length=55,null=True,blank=True)
    em_mobile_no = models.CharField(max_length=55,null=True,blank=True)
    father_name = models.CharField(max_length=55,null=True,blank=True)
    mother_name = models.CharField(max_length=55,null=True,blank=True)
    @property
    def age(self):
        today = date.today()
        if self.date_of_birth:
            return today.year - self.date_of_birth.year - (
                (today.month, today.day) < (self.date_of_birth.month, self.date_of_birth.day)
            )
        return None


class FamilyInformation(BaseModel):
    REL_LIST = [
        ("wife", "Wife"),
        ("children", "Children")
    ]
    GENDER_LIST = [
        ("male", "Male"),
        ("female", "Female"),
    ]
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    name = models.CharField(max_length=150,default='',null=True,blank=True)
    relationship = models.CharField(max_length=50, choices=REL_LIST, null=True, blank=True)
    birth = models.CharField(max_length=150, null=True, blank=True)
    date_of_birth = models.DateField(null=True, blank=True)
    nid = models.CharField(max_length=150, null=True, blank=True)
    gender = models.CharField(max_length=50, choices=GENDER_LIST, null=True, blank=True)
    mobile_no = models.CharField(max_length=50, null=True, blank=True)
    occupation = models.CharField(max_length=150, null=True, blank=True)
    picture = models.ImageField(upload_to='family/', default='family/default.png',null=True, blank=True)
    
    
    @property
    def age(self):
        today = date.today()
        if self.date_of_birth:
            return today.year - self.date_of_birth.year - (
                (today.month, today.day) < (self.date_of_birth.month, self.date_of_birth.day)
            )
        return None
        
    
class EducationInformation(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    name = models.CharField(max_length=150,default='',null=True,blank=True)
    institution = models.CharField(max_length=150,default='',null=True,blank=True)
    year = models.CharField(max_length=150,null=True,blank=True)
    gpa = models.CharField(max_length=150,null=True,blank=True)

class ServiceInformation(BaseModel):
    MED_CAT_LIST = [
        ('a','A'),
        ('b','B'),
        ('c','C'),
    ]
    UN_MSN_LIST = [
        ('yes','Yes'),
        ('no','No'),
    ]
    member = models.OneToOneField(Member, on_delete=models.CASCADE, null=True, blank=True)
    trade = models.ForeignKey(Trade, on_delete=models.SET_NULL,null=True, blank=True)
    core = models.ForeignKey(Core, on_delete=models.SET_NULL,null=True, blank=True)
    med_cat = models.CharField(max_length=50, choices=MED_CAT_LIST,null=True,blank=True)
    un_msn = models.CharField(max_length=50, choices=UN_MSN_LIST,null=True,blank=True)
    retirement = models.DateField(null=True,blank=True)
    doe = models.DateField(null=True,blank=True)
    @property
    def svc_length(self):
        today = date.today()
        if self.doe:
            return today.year - self.doe.year - (
                (today.month, today.day) < (self.doe.month, self.doe.day)
            )
        return None
    
class SpecialQualityInformation(BaseModel):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, null=True, blank=True)
    special_quality = models.ForeignKey(SpecialQuality, on_delete=models.SET_NULL, null=True, blank=True)
    description = models.TextField(null=True,blank=True)
    




#TODO:APR
class APR(BaseModel):
    member = models.ForeignKey("Member", on_delete=models.CASCADE)
    year = models.PositiveIntegerField()
    date = models.DateField(null=True, blank=True)
    invoice_number = models.CharField(max_length=20, unique=True)

    # part 2
    obesity = models.TextField(blank=True, null=True)
    sickness = models.CharField(choices=Yes_No,max_length=55, blank=True, null=True)
    sickness_from = models.DateField(blank=True, null=True)
    sickness_to = models.DateField(blank=True, null=True)
    sickness_remarks = models.TextField(blank=True, null=True)


    # part 3
    part_3_resp_1 = models.TextField(blank=True, null=True)
    part_3_from_1 = models.DateField(blank=True, null=True)
    part_3_to_1 = models.DateField(blank=True, null=True)
    part_3_duration_1 =  models.PositiveIntegerField(blank=True, null=True) 
    part_3_unit_1 = models.TextField(blank=True, null=True)
    part_3_imm_reporting_1 = models.TextField(blank=True, null=True)
    part_3_reporting_offr_1 = models.TextField(blank=True, null=True)

    part_3_resp_2 = models.TextField(blank=True, null=True)
    part_3_from_2 = models.DateField(blank=True, null=True)
    part_3_to_2 = models.DateField(blank=True, null=True)
    part_3_duration_2 =  models.PositiveIntegerField(blank=True, null=True) 
    part_3_unit_2 = models.TextField(blank=True, null=True)
    part_3_imm_reporting_2 = models.TextField(blank=True, null=True)
    part_3_reporting_offr_2 = models.TextField(blank=True, null=True)

    part_3_resp_3 = models.TextField(blank=True, null=True)
    part_3_from_3 = models.DateField(blank=True, null=True)
    part_3_to_3 = models.DateField(blank=True, null=True)
    part_3_duration_3 =  models.PositiveIntegerField(blank=True, null=True) 
    part_3_unit_3 = models.TextField(blank=True, null=True)
    part_3_imm_reporting_3 = models.TextField(blank=True, null=True)
    part_3_reporting_offr_3 = models.TextField(blank=True, null=True)

    part_3_resp_4 = models.TextField(blank=True, null=True)
    part_3_from_4 = models.DateField(blank=True, null=True)
    part_3_to_4 = models.DateField(blank=True, null=True)
    part_3_duration_4 =  models.PositiveIntegerField(blank=True, null=True) 
    part_3_unit_4 = models.TextField(blank=True, null=True)
    part_3_imm_reporting_4 = models.TextField(blank=True, null=True)
    part_3_reporting_offr_4 = models.TextField(blank=True, null=True)

    part_3_resp_5 = models.TextField(blank=True, null=True)
    part_3_from_5 = models.DateField(blank=True, null=True)
    part_3_to_5 = models.DateField(blank=True, null=True)
    part_3_duration_5 =  models.PositiveIntegerField(blank=True, null=True) 
    part_3_unit_5 = models.TextField(blank=True, null=True)
    part_3_imm_reporting_5 = models.TextField(blank=True, null=True)
    part_3_reporting_offr_5 = models.TextField(blank=True, null=True)


    #spl contributions
    spl_contribution_1 = models.TextField(blank=True, null=True)
    spl_from_1 = models.DateField(blank=True, null=True)
    spl_to_1 = models.DateField(blank=True, null=True)
    spl_duration_1 = models.PositiveIntegerField(blank=True, null=True)
    spl_role_1 = models.TextField(blank=True, null=True)
    spl_performance_1 = models.TextField(blank=True, null=True)

    spl_contribution_2 = models.TextField(blank=True, null=True)
    spl_from_2 = models.DateField(blank=True, null=True)
    spl_to_2 = models.DateField(blank=True, null=True)
    spl_duration_2 = models.PositiveIntegerField(blank=True, null=True)
    spl_role_2 = models.TextField(blank=True, null=True)
    spl_performance_2 = models.TextField(blank=True, null=True)

    spl_contribution_3 = models.TextField(blank=True, null=True)
    spl_from_3 = models.DateField(blank=True, null=True)
    spl_to_3 = models.DateField(blank=True, null=True)
    spl_duration_3 = models.PositiveIntegerField(blank=True, null=True)
    spl_role_3 = models.TextField(blank=True, null=True)
    spl_performance_3 = models.TextField(blank=True, null=True)

    spl_contribution_4 = models.TextField(blank=True, null=True)
    spl_from_4 = models.DateField(blank=True, null=True)
    spl_to_4 = models.DateField(blank=True, null=True)
    spl_duration_4 = models.PositiveIntegerField(blank=True, null=True)
    spl_role_4 = models.TextField(blank=True, null=True)
    spl_performance_4 = models.TextField(blank=True, null=True)

    spl_contribution_5 = models.TextField(blank=True, null=True)
    spl_from_5 = models.DateField(blank=True, null=True)
    spl_to_5 = models.DateField(blank=True, null=True)
    spl_duration_5 = models.PositiveIntegerField(blank=True, null=True)
    spl_role_5 = models.TextField(blank=True, null=True)
    spl_performance_5 = models.TextField(blank=True, null=True)

    # part 5
    #ops activities
    ops_activities_1 = models.TextField(blank=True, null=True)
    ops_from_1 = models.DateField(blank=True, null=True)
    ops_to_1 = models.DateField(blank=True, null=True)
    ops_duration_1 = models.PositiveIntegerField(blank=True, null=True)
    ops_role_1 = models.TextField(blank=True, null=True)
    ops_performance_1 = models.TextField(blank=True, null=True)

    ops_activities_2 = models.TextField(blank=True, null=True)
    ops_from_2 = models.DateField(blank=True, null=True)
    ops_to_2 = models.DateField(blank=True, null=True)
    ops_duration_2 = models.PositiveIntegerField(blank=True, null=True)
    ops_role_2 = models.TextField(blank=True, null=True)
    ops_performance_2 = models.TextField(blank=True, null=True)

    ops_activities_3 = models.TextField(blank=True, null=True)
    ops_from_3 = models.DateField(blank=True, null=True)
    ops_to_3 = models.DateField(blank=True, null=True)
    ops_duration_3 = models.PositiveIntegerField(blank=True, null=True)
    ops_role_3 = models.TextField(blank=True, null=True)
    ops_performance_3 = models.TextField(blank=True, null=True)

    ops_activities_4 = models.TextField(blank=True, null=True)
    ops_from_4 = models.DateField(blank=True, null=True)
    ops_to_4 = models.DateField(blank=True, null=True)
    ops_duration_4 = models.PositiveIntegerField(blank=True, null=True)
    ops_role_4 = models.TextField(blank=True, null=True)
    ops_performance_4 = models.TextField(blank=True, null=True)

    ops_activities_5 = models.TextField(blank=True, null=True)
    ops_from_5 = models.DateField(blank=True, null=True)
    ops_to_5 = models.DateField(blank=True, null=True)
    ops_duration_5 = models.PositiveIntegerField(blank=True, null=True)
    ops_role_5 = models.TextField(blank=True, null=True)
    ops_performance_5 = models.TextField(blank=True, null=True)
    #trg activities
    trg_activities_1 = models.TextField(blank=True, null=True)
    trg_from_1 = models.DateField(blank=True, null=True)
    trg_to_1 = models.DateField(blank=True, null=True)
    trg_duration_1 = models.PositiveIntegerField(blank=True, null=True)
    trg_role_1 = models.TextField(blank=True, null=True)
    trg_performance_1 = models.TextField(blank=True, null=True)

    trg_activities_2 = models.TextField(blank=True, null=True)
    trg_from_2 = models.DateField(blank=True, null=True)
    trg_to_2 = models.DateField(blank=True, null=True)
    trg_duration_2 = models.PositiveIntegerField(blank=True, null=True)
    trg_role_2 = models.TextField(blank=True, null=True)
    trg_performance_2 = models.TextField(blank=True, null=True)

    trg_activities_3 = models.TextField(blank=True, null=True)
    trg_from_3 = models.DateField(blank=True, null=True)
    trg_to_3 = models.DateField(blank=True, null=True)
    trg_duration_3 = models.PositiveIntegerField(blank=True, null=True)
    trg_role_3 = models.TextField(blank=True, null=True)
    trg_performance_3 = models.TextField(blank=True, null=True)

    trg_activities_4 = models.TextField(blank=True, null=True)
    trg_from_4 = models.DateField(blank=True, null=True)
    trg_to_4 = models.DateField(blank=True, null=True)
    trg_duration_4 = models.PositiveIntegerField(blank=True, null=True)
    trg_role_4 = models.TextField(blank=True, null=True)
    trg_performance_4 = models.TextField(blank=True, null=True)

    trg_activities_5 = models.TextField(blank=True, null=True)
    trg_from_5 = models.DateField(blank=True, null=True)
    trg_to_5 = models.DateField(blank=True, null=True)
    trg_duration_5 = models.PositiveIntegerField(blank=True, null=True)
    trg_role_5 = models.TextField(blank=True, null=True)
    trg_performance_5 = models.TextField(blank=True, null=True)
    #admin activities
    admin_activities_1 = models.TextField(blank=True, null=True)
    admin_from_1 = models.DateField(blank=True, null=True)
    admin_to_1 = models.DateField(blank=True, null=True)
    admin_duration_1 = models.PositiveIntegerField(blank=True, null=True)
    admin_role_1 = models.TextField(blank=True, null=True)
    admin_performance_1 = models.TextField(blank=True, null=True)

    admin_activities_2 = models.TextField(blank=True, null=True)
    admin_from_2 = models.DateField(blank=True, null=True)
    admin_to_2 = models.DateField(blank=True, null=True)
    admin_duration_2 = models.PositiveIntegerField(blank=True, null=True)
    admin_role_2 = models.TextField(blank=True, null=True)
    admin_performance_2 = models.TextField(blank=True, null=True)

    admin_activities_3 = models.TextField(blank=True, null=True)
    admin_from_3 = models.DateField(blank=True, null=True)
    admin_to_3 = models.DateField(blank=True, null=True)
    admin_duration_3 = models.PositiveIntegerField(blank=True, null=True)
    admin_role_3 = models.TextField(blank=True, null=True)
    admin_performance_3 = models.TextField(blank=True, null=True)

    admin_activities_4 = models.TextField(blank=True, null=True)
    admin_from_4 = models.DateField(blank=True, null=True)
    admin_to_4 = models.DateField(blank=True, null=True)
    admin_duration_4 = models.PositiveIntegerField(blank=True, null=True)
    admin_role_4 = models.TextField(blank=True, null=True)
    admin_performance_4 = models.TextField(blank=True, null=True)

    admin_activities_5 = models.TextField(blank=True, null=True)
    admin_from_5 = models.DateField(blank=True, null=True)
    admin_to_5 = models.DateField(blank=True, null=True)
    admin_duration_5 = models.PositiveIntegerField(blank=True, null=True)
    admin_role_5 = models.TextField(blank=True, null=True)
    admin_performance_5 = models.TextField(blank=True, null=True)


    # part 7
    # honour_and_pride
    honour_and_pride_state = models.IntegerField(choices=STATE_LIST, blank=True, null=True)
    honour_and_pride_reason = models.TextField(blank=True, null=True)
    honour_and_pride_reference = models.TextField(blank=True, null=True)
    # honour_and_integrity
    honour_and_integrity_state = models.IntegerField(choices=STATE_LIST, blank=True, null=True)
    honour_and_integrity_reason = models.TextField(blank=True, null=True)
    honour_and_integrity_reference = models.TextField(blank=True, null=True)
    # loyalty
    loyalty_state = models.IntegerField(choices=STATE_LIST, blank=True, null=True)
    loyalty_reason = models.TextField(blank=True, null=True)
    loyalty_reference = models.TextField(blank=True, null=True)
    # dutifulness
    dutifulness_state = models.IntegerField(choices=STATE_LIST, blank=True, null=True)
    dutifulness_reason = models.TextField(blank=True, null=True)
    dutifulness_reference = models.TextField(blank=True, null=True)
    # courage
    courage_state = models.IntegerField(choices=STATE_LIST, blank=True, null=True)
    courage_reason = models.TextField(blank=True, null=True)
    courage_reference = models.TextField(blank=True, null=True)
    # respect
    respect_state = models.IntegerField(choices=STATE_LIST, blank=True, null=True)
    respect_reason = models.TextField(blank=True, null=True)
    respect_reference = models.TextField(blank=True, null=True)

    # part 9
    character_traits = models.IntegerField(choices=RATING_LIST, blank=True, null=True)
    physical_efficiency = models.IntegerField(choices=RATING_LIST, blank=True, null=True)
    firing_efficiency = models.IntegerField(choices=RATING_LIST, blank=True, null=True)
    tactical_efficiency = models.IntegerField(choices=RATING_LIST, blank=True, null=True)
    technical_efficiency = models.IntegerField(choices=RATING_LIST, blank=True, null=True)
    leadership = models.IntegerField(choices=RATING_LIST, blank=True, null=True)
    followership = models.IntegerField(choices=RATING_LIST, blank=True, null=True)
    turnout_and_bearing = models.IntegerField(choices=RATING_LIST, blank=True, null=True)
    comm_skill = models.IntegerField(choices=RATING_LIST, blank=True, null=True)
    appt = models.IntegerField(choices=RATING_LIST, blank=True, null=True)
    extra_curricular = models.TextField(blank=True, null=True)

    #recomm
    suitability_for_next_rk = models.IntegerField(choices=Yes_No, blank=True, null=True)
    suitability_for_next_rk_reason = models.TextField(blank=True, null=True)
    recom_for_un_msn = models.IntegerField(choices=Yes_No, blank=True, null=True)
    recom_for_un_msn_reason = models.TextField(blank=True, null=True)
    capable_appt = models.IntegerField(choices=Yes_No, blank=True, null=True)
    capable_appt_reason = models.TextField(blank=True, null=True)
    suitable_for_appt = models.IntegerField(choices=Yes_No, blank=True, null=True)
    suitable_for_appt_reason = models.TextField(blank=True, null=True)

    receive_training = models.TextField(blank=True, null=True)
    #all
    advice = models.TextField(blank=True, null=True)

    # marks
    marks_physical_efficiency = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(15)])
    marks_firing_efficiency = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(10)])
    marks_tactical_proficiency = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(5)])
    marks_technical_proficiency = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(5)])
    marks_leadership = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(5)])
    marks_followership = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(5)])
    marks_comm_skill = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(5)])
    marks_turnout_and_bearing = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(5)])
    marks_appt = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(15)])

    marks_character_traits = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(10)])
    marks_discipline = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(10)])
    marks_course_cdr = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(5)])
    marks_award = models.FloatField(blank=True, null=True,validators=[MinValueValidator(0),MaxValueValidator(5)])



    opinion_of_reported_sldr = models.IntegerField(choices=OPINION, blank=True, null=True)
    opinion_of_reported_sldr_reason = models.TextField(blank=True, null=True)
    cfm_suitability_for_next_rk = models.IntegerField(choices=Yes_No, blank=True, null=True)
    cfm_suitability_for_next_rk_reason = models.TextField(blank=True, null=True)
    cfm_recom_for_un_msn = models.IntegerField(choices=Yes_No, blank=True, null=True)
    cfm_recom_for_un_msn_reason = models.TextField(blank=True, null=True)
    opinion = models.TextField(blank=True, null=True)


class AttendanceSummary(BaseModel):
    attendance_summary_cart = models.ForeignKey(AttendanceSummaryCart,on_delete=models.CASCADE,null=True,blank=True)
    company = models.ForeignKey(Company, on_delete=models.SET_NULL,null=True,blank=True)
    date = models.DateField()
    
    #auth
    toe_offr_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_mwo_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_smo_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_wo_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_sgt_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_cpl_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_lcpl_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_snk_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_clk_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_tailor_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_e_br_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_ck_mm_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_carp_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_rco_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_nc_e_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_nc_u_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_att_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_total_auth = models.IntegerField(default=0,null=True,blank=True)
    #ere_auth
    ere_offr_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_mwo_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_smo_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_wo_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_sgt_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_cpl_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_lcpl_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_snk_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_clk_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_tailor_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_e_br_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_ck_mm_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_carp_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_rco_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_nc_e_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_nc_u_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_att_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_total_auth = models.IntegerField(default=0,null=True,blank=True)
    #auth
    offr_auth = models.IntegerField(default=0,null=True,blank=True)
    mwo_auth = models.IntegerField(default=0,null=True,blank=True)
    smo_auth = models.IntegerField(default=0,null=True,blank=True)
    wo_auth = models.IntegerField(default=0,null=True,blank=True)
    sgt_auth = models.IntegerField(default=0,null=True,blank=True)
    cpl_auth = models.IntegerField(default=0,null=True,blank=True)
    lcpl_auth = models.IntegerField(default=0,null=True,blank=True)
    snk_auth = models.IntegerField(default=0,null=True,blank=True)
    clk_auth = models.IntegerField(default=0,null=True,blank=True)
    tailor_auth = models.IntegerField(default=0,null=True,blank=True)
    e_br_auth = models.IntegerField(default=0,null=True,blank=True)
    ck_mm_auth = models.IntegerField(default=0,null=True,blank=True)
    carp_auth = models.IntegerField(default=0,null=True,blank=True)
    rco_auth = models.IntegerField(default=0,null=True,blank=True)
    nc_e_auth = models.IntegerField(default=0,null=True,blank=True)
    nc_u_auth = models.IntegerField(default=0,null=True,blank=True)
    att_auth = models.IntegerField(default=0,null=True,blank=True)
    total_auth = models.IntegerField(default=0,null=True,blank=True)
    total_auth = models.IntegerField(default=0,null=True,blank=True)
    # Posted counts
    offr_posted = models.IntegerField(default=0,null=True,blank=True)
    mwo_posted = models.IntegerField(default=0,null=True,blank=True)
    smo_posted = models.IntegerField(default=0,null=True,blank=True)
    wo_posted = models.IntegerField(default=0,null=True,blank=True)
    sgt_posted = models.IntegerField(default=0,null=True,blank=True)
    cpl_posted = models.IntegerField(default=0,null=True,blank=True)
    lcpl_posted = models.IntegerField(default=0,null=True,blank=True)
    snk_posted = models.IntegerField(default=0,null=True,blank=True)
    clk_posted = models.IntegerField(default=0,null=True,blank=True)
    tailor_posted = models.IntegerField(default=0,null=True,blank=True)
    e_br_posted = models.IntegerField(default=0,null=True,blank=True)
    ck_mm_posted = models.IntegerField(default=0,null=True,blank=True)
    carp_posted = models.IntegerField(default=0,null=True,blank=True)
    rco_posted = models.IntegerField(default=0,null=True,blank=True)
    nc_e_posted = models.IntegerField(default=0,null=True,blank=True)
    nc_u_posted = models.IntegerField(default=0,null=True,blank=True)
    att_posted = models.IntegerField(default=0,null=True,blank=True)
    total_posted = models.IntegerField(default=0,null=True,blank=True)
    # raw Posted counts
    raw_offr_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_mwo_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_smo_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_wo_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_sgt_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_cpl_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_lcpl_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_snk_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_clk_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_tailor_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_e_br_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_ck_mm_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_carp_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_rco_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_nc_e_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_nc_u_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_att_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_total_posted = models.IntegerField(default=0,null=True,blank=True)
    # def counts
    offr_def = models.IntegerField(default=0,null=True,blank=True)
    mwo_def = models.IntegerField(default=0,null=True,blank=True)
    smo_def = models.IntegerField(default=0,null=True,blank=True)
    wo_def = models.IntegerField(default=0,null=True,blank=True)
    sgt_def = models.IntegerField(default=0,null=True,blank=True)
    cpl_def = models.IntegerField(default=0,null=True,blank=True)
    lcpl_def = models.IntegerField(default=0,null=True,blank=True)
    snk_def = models.IntegerField(default=0,null=True,blank=True)
    clk_def = models.IntegerField(default=0,null=True,blank=True)
    tailor_def = models.IntegerField(default=0,null=True,blank=True)
    e_br_def = models.IntegerField(default=0,null=True,blank=True)
    ck_mm_def = models.IntegerField(default=0,null=True,blank=True)
    carp_def = models.IntegerField(default=0,null=True,blank=True)
    rco_def = models.IntegerField(default=0,null=True,blank=True)
    nc_e_def = models.IntegerField(default=0,null=True,blank=True)
    nc_u_def = models.IntegerField(default=0,null=True,blank=True)
    att_def = models.IntegerField(default=0,null=True,blank=True)
    total_def = models.IntegerField(default=0,null=True,blank=True)
    # held counts
    offr_held = models.IntegerField(default=0,null=True,blank=True)
    mwo_held = models.IntegerField(default=0,null=True,blank=True)
    smo_held = models.IntegerField(default=0,null=True,blank=True)
    wo_held = models.IntegerField(default=0,null=True,blank=True)
    sgt_held = models.IntegerField(default=0,null=True,blank=True)
    cpl_held = models.IntegerField(default=0,null=True,blank=True)
    lcpl_held = models.IntegerField(default=0,null=True,blank=True)
    snk_held = models.IntegerField(default=0,null=True,blank=True)
    clk_held = models.IntegerField(default=0,null=True,blank=True)
    tailor_held = models.IntegerField(default=0,null=True,blank=True)
    e_br_held = models.IntegerField(default=0,null=True,blank=True)
    ck_mm_held = models.IntegerField(default=0,null=True,blank=True)
    carp_held = models.IntegerField(default=0,null=True,blank=True)
    rco_held = models.IntegerField(default=0,null=True,blank=True)
    nc_e_held = models.IntegerField(default=0,null=True,blank=True)
    nc_u_held = models.IntegerField(default=0,null=True,blank=True)
    att_held = models.IntegerField(default=0,null=True,blank=True)
    total_held = models.IntegerField(default=0,null=True,blank=True)

    # Absent counts
    offr_absent = models.IntegerField(default=0,null=True,blank=True)
    mwo_absent = models.IntegerField(default=0,null=True,blank=True)
    smo_absent = models.IntegerField(default=0,null=True,blank=True)
    wo_absent = models.IntegerField(default=0,null=True,blank=True)
    sgt_absent = models.IntegerField(default=0,null=True,blank=True)
    cpl_absent = models.IntegerField(default=0,null=True,blank=True)
    lcpl_absent = models.IntegerField(default=0,null=True,blank=True)
    snk_absent = models.IntegerField(default=0,null=True,blank=True)
    clk_absent = models.IntegerField(default=0,null=True,blank=True)
    tailor_absent = models.IntegerField(default=0,null=True,blank=True)
    e_br_absent = models.IntegerField(default=0,null=True,blank=True)
    ck_mm_absent = models.IntegerField(default=0,null=True,blank=True)
    carp_absent = models.IntegerField(default=0,null=True,blank=True)
    rco_absent = models.IntegerField(default=0,null=True,blank=True)
    nc_e_absent = models.IntegerField(default=0,null=True,blank=True)
    nc_u_absent = models.IntegerField(default=0,null=True,blank=True)
    att_absent = models.IntegerField(default=0,null=True,blank=True)
    total_absent = models.IntegerField(default=0,null=True,blank=True)

    # Present counts
    offr_present = models.IntegerField(default=0,null=True,blank=True)
    mwo_present = models.IntegerField(default=0,null=True,blank=True)
    smo_present = models.IntegerField(default=0,null=True,blank=True)
    wo_present = models.IntegerField(default=0,null=True,blank=True)
    sgt_present = models.IntegerField(default=0,null=True,blank=True)
    cpl_present = models.IntegerField(default=0,null=True,blank=True)
    lcpl_present = models.IntegerField(default=0,null=True,blank=True)
    snk_present = models.IntegerField(default=0,null=True,blank=True)
    clk_present = models.IntegerField(default=0,null=True,blank=True)
    tailor_present = models.IntegerField(default=0,null=True,blank=True)
    e_br_present = models.IntegerField(default=0,null=True,blank=True)
    ck_mm_present = models.IntegerField(default=0,null=True,blank=True)
    carp_present = models.IntegerField(default=0,null=True,blank=True)
    rco_present = models.IntegerField(default=0,null=True,blank=True)
    nc_e_present = models.IntegerField(default=0,null=True,blank=True)
    nc_u_present = models.IntegerField(default=0,null=True,blank=True)
    att_present = models.IntegerField(default=0,null=True,blank=True)
    total_present = models.IntegerField(default=0,null=True,blank=True)
    # ops depl present counts
    ops_depl_offr_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_mwo_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_smo_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_wo_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_sgt_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_cpl_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_lcpl_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_snk_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_clk_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_tailor_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_e_br_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_ck_mm_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_carp_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_rco_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_nc_e_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_nc_u_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_att_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_total_present = models.IntegerField(default=0,null=True,blank=True)
    # rear present counts
    rear_offr_present = models.IntegerField(default=0,null=True,blank=True)
    rear_mwo_present = models.IntegerField(default=0,null=True,blank=True)
    rear_smo_present = models.IntegerField(default=0,null=True,blank=True)
    rear_wo_present = models.IntegerField(default=0,null=True,blank=True)
    rear_sgt_present = models.IntegerField(default=0,null=True,blank=True)
    rear_cpl_present = models.IntegerField(default=0,null=True,blank=True)
    rear_lcpl_present = models.IntegerField(default=0,null=True,blank=True)
    rear_snk_present = models.IntegerField(default=0,null=True,blank=True)
    rear_clk_present = models.IntegerField(default=0,null=True,blank=True)
    rear_tailor_present = models.IntegerField(default=0,null=True,blank=True)
    rear_e_br_present = models.IntegerField(default=0,null=True,blank=True)
    rear_ck_mm_present = models.IntegerField(default=0,null=True,blank=True)
    rear_carp_present = models.IntegerField(default=0,null=True,blank=True)
    rear_rco_present = models.IntegerField(default=0,null=True,blank=True)
    rear_nc_e_present = models.IntegerField(default=0,null=True,blank=True)
    rear_nc_u_present = models.IntegerField(default=0,null=True,blank=True)
    rear_att_present = models.IntegerField(default=0,null=True,blank=True)
    rear_total_present = models.IntegerField(default=0,null=True,blank=True)
    #p_leave
    p_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    p_leave_mwo = models.IntegerField(default=0,null=True,blank=True)
    p_leave_smo = models.IntegerField(default=0,null=True,blank=True)
    p_leave_wo = models.IntegerField(default=0,null=True,blank=True)
    p_leave_sgt = models.IntegerField(default=0,null=True,blank=True)
    p_leave_cpl = models.IntegerField(default=0,null=True,blank=True)
    p_leave_lcpl = models.IntegerField(default=0,null=True,blank=True)
    p_leave_snk = models.IntegerField(default=0,null=True,blank=True)
    p_leave_clk = models.IntegerField(default=0,null=True,blank=True)
    p_leave_tailor = models.IntegerField(default=0,null=True,blank=True)
    p_leave_e_br = models.IntegerField(default=0,null=True,blank=True)
    p_leave_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    p_leave_carp = models.IntegerField(default=0,null=True,blank=True)
    p_leave_rco = models.IntegerField(default=0,null=True,blank=True)
    p_leave_nc_e = models.IntegerField(default=0,null=True,blank=True)
    p_leave_nc_u = models.IntegerField(default=0,null=True,blank=True)
    p_leave_att = models.IntegerField(default=0,null=True,blank=True)
    p_leave_total = models.IntegerField(default=0,null=True,blank=True)
    #c_leave
    c_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    c_leave_mwo = models.IntegerField(default=0,null=True,blank=True)
    c_leave_smo = models.IntegerField(default=0,null=True,blank=True)
    c_leave_wo = models.IntegerField(default=0,null=True,blank=True)
    c_leave_sgt = models.IntegerField(default=0,null=True,blank=True)
    c_leave_cpl = models.IntegerField(default=0,null=True,blank=True)
    c_leave_lcpl = models.IntegerField(default=0,null=True,blank=True)
    c_leave_snk = models.IntegerField(default=0,null=True,blank=True)
    c_leave_clk = models.IntegerField(default=0,null=True,blank=True)
    c_leave_tailor = models.IntegerField(default=0,null=True,blank=True)
    c_leave_e_br = models.IntegerField(default=0,null=True,blank=True)
    c_leave_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    c_leave_carp = models.IntegerField(default=0,null=True,blank=True)
    c_leave_rco = models.IntegerField(default=0,null=True,blank=True)
    c_leave_nc_e = models.IntegerField(default=0,null=True,blank=True)
    c_leave_nc_u = models.IntegerField(default=0,null=True,blank=True)
    c_leave_att = models.IntegerField(default=0,null=True,blank=True)
    c_leave_total = models.IntegerField(default=0,null=True,blank=True)
    #r_leave
    r_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    r_leave_mwo = models.IntegerField(default=0,null=True,blank=True)
    r_leave_smo = models.IntegerField(default=0,null=True,blank=True)
    r_leave_wo = models.IntegerField(default=0,null=True,blank=True)
    r_leave_sgt = models.IntegerField(default=0,null=True,blank=True)
    r_leave_cpl = models.IntegerField(default=0,null=True,blank=True)
    r_leave_lcpl = models.IntegerField(default=0,null=True,blank=True)
    r_leave_snk = models.IntegerField(default=0,null=True,blank=True)
    r_leave_clk = models.IntegerField(default=0,null=True,blank=True)
    r_leave_tailor = models.IntegerField(default=0,null=True,blank=True)
    r_leave_e_br = models.IntegerField(default=0,null=True,blank=True)
    r_leave_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    r_leave_carp = models.IntegerField(default=0,null=True,blank=True)
    r_leave_rco = models.IntegerField(default=0,null=True,blank=True)
    r_leave_nc_e = models.IntegerField(default=0,null=True,blank=True)
    r_leave_nc_u = models.IntegerField(default=0,null=True,blank=True)
    r_leave_att = models.IntegerField(default=0,null=True,blank=True)
    r_leave_total = models.IntegerField(default=0,null=True,blank=True)
    #m_leave
    m_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    m_leave_mwo = models.IntegerField(default=0,null=True,blank=True)
    m_leave_smo = models.IntegerField(default=0,null=True,blank=True)
    m_leave_wo = models.IntegerField(default=0,null=True,blank=True)
    m_leave_sgt = models.IntegerField(default=0,null=True,blank=True)
    m_leave_cpl = models.IntegerField(default=0,null=True,blank=True)
    m_leave_lcpl = models.IntegerField(default=0,null=True,blank=True)
    m_leave_snk = models.IntegerField(default=0,null=True,blank=True)
    m_leave_clk = models.IntegerField(default=0,null=True,blank=True)
    m_leave_tailor = models.IntegerField(default=0,null=True,blank=True)
    m_leave_e_br = models.IntegerField(default=0,null=True,blank=True)
    m_leave_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    m_leave_carp = models.IntegerField(default=0,null=True,blank=True)
    m_leave_rco = models.IntegerField(default=0,null=True,blank=True)
    m_leave_nc_e = models.IntegerField(default=0,null=True,blank=True)
    m_leave_nc_u = models.IntegerField(default=0,null=True,blank=True)
    m_leave_att = models.IntegerField(default=0,null=True,blank=True)
    m_leave_total = models.IntegerField(default=0,null=True,blank=True)
    #j_leave
    j_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    j_leave_mwo = models.IntegerField(default=0,null=True,blank=True)
    j_leave_smo = models.IntegerField(default=0,null=True,blank=True)
    j_leave_wo = models.IntegerField(default=0,null=True,blank=True)
    j_leave_sgt = models.IntegerField(default=0,null=True,blank=True)
    j_leave_cpl = models.IntegerField(default=0,null=True,blank=True)
    j_leave_lcpl = models.IntegerField(default=0,null=True,blank=True)
    j_leave_snk = models.IntegerField(default=0,null=True,blank=True)
    j_leave_clk = models.IntegerField(default=0,null=True,blank=True)
    j_leave_tailor = models.IntegerField(default=0,null=True,blank=True)
    j_leave_e_br = models.IntegerField(default=0,null=True,blank=True)
    j_leave_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    j_leave_carp = models.IntegerField(default=0,null=True,blank=True)
    j_leave_rco = models.IntegerField(default=0,null=True,blank=True)
    j_leave_nc_e = models.IntegerField(default=0,null=True,blank=True)
    j_leave_nc_u = models.IntegerField(default=0,null=True,blank=True)
    j_leave_att = models.IntegerField(default=0,null=True,blank=True)
    j_leave_total = models.IntegerField(default=0,null=True,blank=True)
    #w_leave
    w_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    w_leave_mwo = models.IntegerField(default=0,null=True,blank=True)
    w_leave_smo = models.IntegerField(default=0,null=True,blank=True)
    w_leave_wo = models.IntegerField(default=0,null=True,blank=True)
    w_leave_sgt = models.IntegerField(default=0,null=True,blank=True)
    w_leave_cpl = models.IntegerField(default=0,null=True,blank=True)
    w_leave_lcpl = models.IntegerField(default=0,null=True,blank=True)
    w_leave_snk = models.IntegerField(default=0,null=True,blank=True)
    w_leave_clk = models.IntegerField(default=0,null=True,blank=True)
    w_leave_tailor = models.IntegerField(default=0,null=True,blank=True)
    w_leave_e_br = models.IntegerField(default=0,null=True,blank=True)
    w_leave_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    w_leave_carp = models.IntegerField(default=0,null=True,blank=True)
    w_leave_rco = models.IntegerField(default=0,null=True,blank=True)
    w_leave_nc_e = models.IntegerField(default=0,null=True,blank=True)
    w_leave_nc_u = models.IntegerField(default=0,null=True,blank=True)
    w_leave_att = models.IntegerField(default=0,null=True,blank=True)
    w_leave_total = models.IntegerField(default=0,null=True,blank=True)
    #osl
    osl_offr = models.IntegerField(default=0,null=True,blank=True)
    osl_mwo = models.IntegerField(default=0,null=True,blank=True)
    osl_smo = models.IntegerField(default=0,null=True,blank=True)
    osl_wo = models.IntegerField(default=0,null=True,blank=True)
    osl_sgt = models.IntegerField(default=0,null=True,blank=True)
    osl_cpl = models.IntegerField(default=0,null=True,blank=True)
    osl_lcpl = models.IntegerField(default=0,null=True,blank=True)
    osl_snk = models.IntegerField(default=0,null=True,blank=True)
    osl_clk = models.IntegerField(default=0,null=True,blank=True)
    osl_tailor = models.IntegerField(default=0,null=True,blank=True)
    osl_e_br = models.IntegerField(default=0,null=True,blank=True)
    osl_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    osl_carp = models.IntegerField(default=0,null=True,blank=True)
    osl_rco = models.IntegerField(default=0,null=True,blank=True)
    osl_nc_e = models.IntegerField(default=0,null=True,blank=True)
    osl_nc_u = models.IntegerField(default=0,null=True,blank=True)
    osl_att = models.IntegerField(default=0,null=True,blank=True)
    osl_total = models.IntegerField(default=0,null=True,blank=True)
    #awol
    awol_offr = models.IntegerField(default=0,null=True,blank=True)
    awol_mwo = models.IntegerField(default=0,null=True,blank=True)
    awol_smo = models.IntegerField(default=0,null=True,blank=True)
    awol_wo = models.IntegerField(default=0,null=True,blank=True)
    awol_sgt = models.IntegerField(default=0,null=True,blank=True)
    awol_cpl = models.IntegerField(default=0,null=True,blank=True)
    awol_lcpl = models.IntegerField(default=0,null=True,blank=True)
    awol_snk = models.IntegerField(default=0,null=True,blank=True)
    awol_clk = models.IntegerField(default=0,null=True,blank=True)
    awol_tailor = models.IntegerField(default=0,null=True,blank=True)
    awol_e_br = models.IntegerField(default=0,null=True,blank=True)
    awol_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    awol_carp = models.IntegerField(default=0,null=True,blank=True)
    awol_rco = models.IntegerField(default=0,null=True,blank=True)
    awol_nc_e = models.IntegerField(default=0,null=True,blank=True)
    awol_nc_u = models.IntegerField(default=0,null=True,blank=True)
    awol_att = models.IntegerField(default=0,null=True,blank=True)
    awol_total = models.IntegerField(default=0,null=True,blank=True)
    #course
    course_offr = models.IntegerField(default=0,null=True,blank=True)
    course_mwo = models.IntegerField(default=0,null=True,blank=True)
    course_smo = models.IntegerField(default=0,null=True,blank=True)
    course_wo = models.IntegerField(default=0,null=True,blank=True)
    course_sgt = models.IntegerField(default=0,null=True,blank=True)
    course_cpl = models.IntegerField(default=0,null=True,blank=True)
    course_lcpl = models.IntegerField(default=0,null=True,blank=True)
    course_snk = models.IntegerField(default=0,null=True,blank=True)
    course_clk = models.IntegerField(default=0,null=True,blank=True)
    course_tailor = models.IntegerField(default=0,null=True,blank=True)
    course_e_br = models.IntegerField(default=0,null=True,blank=True)
    course_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    course_carp = models.IntegerField(default=0,null=True,blank=True)
    course_rco = models.IntegerField(default=0,null=True,blank=True)
    course_nc_e = models.IntegerField(default=0,null=True,blank=True)
    course_nc_u = models.IntegerField(default=0,null=True,blank=True)
    course_att = models.IntegerField(default=0,null=True,blank=True)
    course_total = models.IntegerField(default=0,null=True,blank=True)
    #trg
    trg_offr = models.IntegerField(default=0,null=True,blank=True)
    trg_mwo = models.IntegerField(default=0,null=True,blank=True)
    trg_smo = models.IntegerField(default=0,null=True,blank=True)
    trg_wo = models.IntegerField(default=0,null=True,blank=True)
    trg_sgt = models.IntegerField(default=0,null=True,blank=True)
    trg_cpl = models.IntegerField(default=0,null=True,blank=True)
    trg_lcpl = models.IntegerField(default=0,null=True,blank=True)
    trg_snk = models.IntegerField(default=0,null=True,blank=True)
    trg_clk = models.IntegerField(default=0,null=True,blank=True)
    trg_tailor = models.IntegerField(default=0,null=True,blank=True)
    trg_e_br = models.IntegerField(default=0,null=True,blank=True)
    trg_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    trg_carp = models.IntegerField(default=0,null=True,blank=True)
    trg_rco = models.IntegerField(default=0,null=True,blank=True)
    trg_nc_e = models.IntegerField(default=0,null=True,blank=True)
    trg_nc_u = models.IntegerField(default=0,null=True,blank=True)
    trg_att = models.IntegerField(default=0,null=True,blank=True)
    trg_total = models.IntegerField(default=0,null=True,blank=True)
    #cdr
    cdr_offr = models.IntegerField(default=0,null=True,blank=True)
    cdr_mwo = models.IntegerField(default=0,null=True,blank=True)
    cdr_smo = models.IntegerField(default=0,null=True,blank=True)
    cdr_wo = models.IntegerField(default=0,null=True,blank=True)
    cdr_sgt = models.IntegerField(default=0,null=True,blank=True)
    cdr_cpl = models.IntegerField(default=0,null=True,blank=True)
    cdr_lcpl = models.IntegerField(default=0,null=True,blank=True)
    cdr_snk = models.IntegerField(default=0,null=True,blank=True)
    cdr_clk = models.IntegerField(default=0,null=True,blank=True)
    cdr_tailor = models.IntegerField(default=0,null=True,blank=True)
    cdr_e_br = models.IntegerField(default=0,null=True,blank=True)
    cdr_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    cdr_carp = models.IntegerField(default=0,null=True,blank=True)
    cdr_rco = models.IntegerField(default=0,null=True,blank=True)
    cdr_nc_e = models.IntegerField(default=0,null=True,blank=True)
    cdr_nc_u = models.IntegerField(default=0,null=True,blank=True)
    cdr_att = models.IntegerField(default=0,null=True,blank=True)
    cdr_total = models.IntegerField(default=0,null=True,blank=True)
    #cmh
    cmh_offr = models.IntegerField(default=0,null=True,blank=True)
    cmh_mwo = models.IntegerField(default=0,null=True,blank=True)
    cmh_smo = models.IntegerField(default=0,null=True,blank=True)
    cmh_wo = models.IntegerField(default=0,null=True,blank=True)
    cmh_sgt = models.IntegerField(default=0,null=True,blank=True)
    cmh_cpl = models.IntegerField(default=0,null=True,blank=True)
    cmh_lcpl = models.IntegerField(default=0,null=True,blank=True)
    cmh_snk = models.IntegerField(default=0,null=True,blank=True)
    cmh_clk = models.IntegerField(default=0,null=True,blank=True)
    cmh_tailor = models.IntegerField(default=0,null=True,blank=True)
    cmh_e_br = models.IntegerField(default=0,null=True,blank=True)
    cmh_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    cmh_carp = models.IntegerField(default=0,null=True,blank=True)
    cmh_rco = models.IntegerField(default=0,null=True,blank=True)
    cmh_nc_e = models.IntegerField(default=0,null=True,blank=True)
    cmh_nc_u = models.IntegerField(default=0,null=True,blank=True)
    cmh_att = models.IntegerField(default=0,null=True,blank=True)
    cmh_total = models.IntegerField(default=0,null=True,blank=True)
    #stmk
    stmk_offr = models.IntegerField(default=0,null=True,blank=True)
    stmk_mwo = models.IntegerField(default=0,null=True,blank=True)
    stmk_smo = models.IntegerField(default=0,null=True,blank=True)
    stmk_wo = models.IntegerField(default=0,null=True,blank=True)
    stmk_sgt = models.IntegerField(default=0,null=True,blank=True)
    stmk_cpl = models.IntegerField(default=0,null=True,blank=True)
    stmk_lcpl = models.IntegerField(default=0,null=True,blank=True)
    stmk_snk = models.IntegerField(default=0,null=True,blank=True)
    stmk_clk = models.IntegerField(default=0,null=True,blank=True)
    stmk_tailor = models.IntegerField(default=0,null=True,blank=True)
    stmk_e_br = models.IntegerField(default=0,null=True,blank=True)
    stmk_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    stmk_carp = models.IntegerField(default=0,null=True,blank=True)
    stmk_rco = models.IntegerField(default=0,null=True,blank=True)
    stmk_nc_e = models.IntegerField(default=0,null=True,blank=True)
    stmk_nc_u = models.IntegerField(default=0,null=True,blank=True)
    stmk_att = models.IntegerField(default=0,null=True,blank=True)
    stmk_total = models.IntegerField(default=0,null=True,blank=True)
    #line_sick
    line_sick_offr = models.IntegerField(default=0,null=True,blank=True)
    line_sick_mwo = models.IntegerField(default=0,null=True,blank=True)
    line_sick_smo = models.IntegerField(default=0,null=True,blank=True)
    line_sick_wo = models.IntegerField(default=0,null=True,blank=True)
    line_sick_sgt = models.IntegerField(default=0,null=True,blank=True)
    line_sick_cpl = models.IntegerField(default=0,null=True,blank=True)
    line_sick_lcpl = models.IntegerField(default=0,null=True,blank=True)
    line_sick_snk = models.IntegerField(default=0,null=True,blank=True)
    line_sick_clk = models.IntegerField(default=0,null=True,blank=True)
    line_sick_tailor = models.IntegerField(default=0,null=True,blank=True)
    line_sick_e_br = models.IntegerField(default=0,null=True,blank=True)
    line_sick_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    line_sick_carp = models.IntegerField(default=0,null=True,blank=True)
    line_sick_rco = models.IntegerField(default=0,null=True,blank=True)
    line_sick_nc_e = models.IntegerField(default=0,null=True,blank=True)
    line_sick_nc_u = models.IntegerField(default=0,null=True,blank=True)
    line_sick_att = models.IntegerField(default=0,null=True,blank=True)
    line_sick_total = models.IntegerField(default=0,null=True,blank=True)
    #misc
    misc_offr = models.IntegerField(default=0,null=True,blank=True)
    misc_mwo = models.IntegerField(default=0,null=True,blank=True)
    misc_smo = models.IntegerField(default=0,null=True,blank=True)
    misc_wo = models.IntegerField(default=0,null=True,blank=True)
    misc_sgt = models.IntegerField(default=0,null=True,blank=True)
    misc_cpl = models.IntegerField(default=0,null=True,blank=True)
    misc_lcpl = models.IntegerField(default=0,null=True,blank=True)
    misc_snk = models.IntegerField(default=0,null=True,blank=True)
    misc_clk = models.IntegerField(default=0,null=True,blank=True)
    misc_tailor = models.IntegerField(default=0,null=True,blank=True)
    misc_e_br = models.IntegerField(default=0,null=True,blank=True)
    misc_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    misc_carp = models.IntegerField(default=0,null=True,blank=True)
    misc_rco = models.IntegerField(default=0,null=True,blank=True)
    misc_nc_e = models.IntegerField(default=0,null=True,blank=True)
    misc_nc_u = models.IntegerField(default=0,null=True,blank=True)
    misc_att = models.IntegerField(default=0,null=True,blank=True)
    misc_total = models.IntegerField(default=0,null=True,blank=True)
    #total_leave
    total_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    total_leave_mwo = models.IntegerField(default=0,null=True,blank=True)
    total_leave_smo = models.IntegerField(default=0,null=True,blank=True)
    total_leave_wo = models.IntegerField(default=0,null=True,blank=True)
    total_leave_sgt = models.IntegerField(default=0,null=True,blank=True)
    total_leave_cpl = models.IntegerField(default=0,null=True,blank=True)
    total_leave_lcpl = models.IntegerField(default=0,null=True,blank=True)
    total_leave_snk = models.IntegerField(default=0,null=True,blank=True)
    total_leave_clk = models.IntegerField(default=0,null=True,blank=True)
    total_leave_tailor = models.IntegerField(default=0,null=True,blank=True)
    total_leave_e_br = models.IntegerField(default=0,null=True,blank=True)
    total_leave_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    total_leave_carp = models.IntegerField(default=0,null=True,blank=True)
    total_leave_rco = models.IntegerField(default=0,null=True,blank=True)
    total_leave_nc_e = models.IntegerField(default=0,null=True,blank=True)
    total_leave_nc_u = models.IntegerField(default=0,null=True,blank=True)
    total_leave_att = models.IntegerField(default=0,null=True,blank=True)
    total_leave_total = models.IntegerField(default=0,null=True,blank=True)
    #ration_out
    ration_out_offr = models.IntegerField(default=0,null=True,blank=True)
    ration_out_mwo = models.IntegerField(default=0,null=True,blank=True)
    ration_out_smo = models.IntegerField(default=0,null=True,blank=True)
    ration_out_wo = models.IntegerField(default=0,null=True,blank=True)
    ration_out_sgt = models.IntegerField(default=0,null=True,blank=True)
    ration_out_cpl = models.IntegerField(default=0,null=True,blank=True)
    ration_out_lcpl = models.IntegerField(default=0,null=True,blank=True)
    ration_out_snk = models.IntegerField(default=0,null=True,blank=True)
    ration_out_clk = models.IntegerField(default=0,null=True,blank=True)
    ration_out_tailor = models.IntegerField(default=0,null=True,blank=True)
    ration_out_e_br = models.IntegerField(default=0,null=True,blank=True)
    ration_out_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    ration_out_carp = models.IntegerField(default=0,null=True,blank=True)
    ration_out_rco = models.IntegerField(default=0,null=True,blank=True)
    ration_out_nc_e = models.IntegerField(default=0,null=True,blank=True)
    ration_out_nc_u = models.IntegerField(default=0,null=True,blank=True)
    ration_out_att = models.IntegerField(default=0,null=True,blank=True)
    ration_out_total = models.IntegerField(default=0,null=True,blank=True)
    #out of unit emp
    #ere
    ere_offr = models.IntegerField(default=0,null=True,blank=True)
    ere_mwo = models.IntegerField(default=0,null=True,blank=True)
    ere_smo = models.IntegerField(default=0,null=True,blank=True)
    ere_wo = models.IntegerField(default=0,null=True,blank=True)
    ere_sgt = models.IntegerField(default=0,null=True,blank=True)
    ere_cpl = models.IntegerField(default=0,null=True,blank=True)
    ere_lcpl = models.IntegerField(default=0,null=True,blank=True)
    ere_snk = models.IntegerField(default=0,null=True,blank=True)
    ere_clk = models.IntegerField(default=0,null=True,blank=True)
    ere_tailor = models.IntegerField(default=0,null=True,blank=True)
    ere_e_br = models.IntegerField(default=0,null=True,blank=True)
    ere_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    ere_carp = models.IntegerField(default=0,null=True,blank=True)
    ere_rco = models.IntegerField(default=0,null=True,blank=True)
    ere_nc_e = models.IntegerField(default=0,null=True,blank=True)
    ere_nc_u = models.IntegerField(default=0,null=True,blank=True)
    ere_att = models.IntegerField(default=0,null=True,blank=True)
    ere_total = models.IntegerField(default=0,null=True,blank=True)
    #att
    att_offr = models.IntegerField(default=0,null=True,blank=True)
    att_mwo = models.IntegerField(default=0,null=True,blank=True)
    att_smo = models.IntegerField(default=0,null=True,blank=True)
    att_wo = models.IntegerField(default=0,null=True,blank=True)
    att_sgt = models.IntegerField(default=0,null=True,blank=True)
    att_cpl = models.IntegerField(default=0,null=True,blank=True)
    att_lcpl = models.IntegerField(default=0,null=True,blank=True)
    att_snk = models.IntegerField(default=0,null=True,blank=True)
    att_clk = models.IntegerField(default=0,null=True,blank=True)
    att_tailor = models.IntegerField(default=0,null=True,blank=True)
    att_e_br = models.IntegerField(default=0,null=True,blank=True)
    att_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    att_carp = models.IntegerField(default=0,null=True,blank=True)
    att_rco = models.IntegerField(default=0,null=True,blank=True)
    att_nc_e = models.IntegerField(default=0,null=True,blank=True)
    att_nc_u = models.IntegerField(default=0,null=True,blank=True)
    att_att = models.IntegerField(default=0,null=True,blank=True)
    att_total = models.IntegerField(default=0,null=True,blank=True)
    #t_duty
    t_duty_offr = models.IntegerField(default=0,null=True,blank=True)
    t_duty_mwo = models.IntegerField(default=0,null=True,blank=True)
    t_duty_smo = models.IntegerField(default=0,null=True,blank=True)
    t_duty_wo = models.IntegerField(default=0,null=True,blank=True)
    t_duty_sgt = models.IntegerField(default=0,null=True,blank=True)
    t_duty_cpl = models.IntegerField(default=0,null=True,blank=True)
    t_duty_lcpl = models.IntegerField(default=0,null=True,blank=True)
    t_duty_snk = models.IntegerField(default=0,null=True,blank=True)
    t_duty_clk = models.IntegerField(default=0,null=True,blank=True)
    t_duty_tailor = models.IntegerField(default=0,null=True,blank=True)
    t_duty_e_br = models.IntegerField(default=0,null=True,blank=True)
    t_duty_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    t_duty_carp = models.IntegerField(default=0,null=True,blank=True)
    t_duty_rco = models.IntegerField(default=0,null=True,blank=True)
    t_duty_nc_e = models.IntegerField(default=0,null=True,blank=True)
    t_duty_nc_u = models.IntegerField(default=0,null=True,blank=True)
    t_duty_att = models.IntegerField(default=0,null=True,blank=True)
    t_duty_total = models.IntegerField(default=0,null=True,blank=True)
    #msn
    msn_offr = models.IntegerField(default=0,null=True,blank=True)
    msn_mwo = models.IntegerField(default=0,null=True,blank=True)
    msn_smo = models.IntegerField(default=0,null=True,blank=True)
    msn_wo = models.IntegerField(default=0,null=True,blank=True)
    msn_sgt = models.IntegerField(default=0,null=True,blank=True)
    msn_cpl = models.IntegerField(default=0,null=True,blank=True)
    msn_lcpl = models.IntegerField(default=0,null=True,blank=True)
    msn_snk = models.IntegerField(default=0,null=True,blank=True)
    msn_clk = models.IntegerField(default=0,null=True,blank=True)
    msn_tailor = models.IntegerField(default=0,null=True,blank=True)
    msn_e_br = models.IntegerField(default=0,null=True,blank=True)
    msn_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    msn_carp = models.IntegerField(default=0,null=True,blank=True)
    msn_rco = models.IntegerField(default=0,null=True,blank=True)
    msn_nc_e = models.IntegerField(default=0,null=True,blank=True)
    msn_nc_u = models.IntegerField(default=0,null=True,blank=True)
    msn_att = models.IntegerField(default=0,null=True,blank=True)
    msn_total = models.IntegerField(default=0,null=True,blank=True)
    #okp
    okp_offr = models.IntegerField(default=0,null=True,blank=True)
    okp_mwo = models.IntegerField(default=0,null=True,blank=True)
    okp_smo = models.IntegerField(default=0,null=True,blank=True)
    okp_wo = models.IntegerField(default=0,null=True,blank=True)
    okp_sgt = models.IntegerField(default=0,null=True,blank=True)
    okp_cpl = models.IntegerField(default=0,null=True,blank=True)
    okp_lcpl = models.IntegerField(default=0,null=True,blank=True)
    okp_snk = models.IntegerField(default=0,null=True,blank=True)
    okp_clk = models.IntegerField(default=0,null=True,blank=True)
    okp_tailor = models.IntegerField(default=0,null=True,blank=True)
    okp_e_br = models.IntegerField(default=0,null=True,blank=True)
    okp_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    okp_carp = models.IntegerField(default=0,null=True,blank=True)
    okp_rco = models.IntegerField(default=0,null=True,blank=True)
    okp_nc_e = models.IntegerField(default=0,null=True,blank=True)
    okp_nc_u = models.IntegerField(default=0,null=True,blank=True)
    okp_att = models.IntegerField(default=0,null=True,blank=True)
    okp_total = models.IntegerField(default=0,null=True,blank=True)
    #demov
    demov_offr = models.IntegerField(default=0,null=True,blank=True)
    demov_mwo = models.IntegerField(default=0,null=True,blank=True)
    demov_smo = models.IntegerField(default=0,null=True,blank=True)
    demov_wo = models.IntegerField(default=0,null=True,blank=True)
    demov_sgt = models.IntegerField(default=0,null=True,blank=True)
    demov_cpl = models.IntegerField(default=0,null=True,blank=True)
    demov_lcpl = models.IntegerField(default=0,null=True,blank=True)
    demov_snk = models.IntegerField(default=0,null=True,blank=True)
    demov_clk = models.IntegerField(default=0,null=True,blank=True)
    demov_tailor = models.IntegerField(default=0,null=True,blank=True)
    demov_e_br = models.IntegerField(default=0,null=True,blank=True)
    demov_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    demov_carp = models.IntegerField(default=0,null=True,blank=True)
    demov_rco = models.IntegerField(default=0,null=True,blank=True)
    demov_nc_e = models.IntegerField(default=0,null=True,blank=True)
    demov_nc_u = models.IntegerField(default=0,null=True,blank=True)
    demov_att = models.IntegerField(default=0,null=True,blank=True)
    demov_total = models.IntegerField(default=0,null=True,blank=True)
    #total out of unit emp
    out_of_unit_emp_offr = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_mwo = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_smo = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_wo = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_sgt = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_cpl = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_lcpl = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_snk = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_clk = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_tailor = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_e_br = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_ck_mm = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_carp = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_rco = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_nc_e = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_nc_u = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_att = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_total = models.IntegerField(default=0,null=True,blank=True)
    
    #TODO: for jco
    toe_jco_auth = models.IntegerField(default=0,null=True,blank=True)
    # ere_jco_auth
    ere_jco_auth = models.IntegerField(default=0,null=True,blank=True)
    # jco_auth
    jco_auth = models.IntegerField(default=0,null=True,blank=True)
    # jco_posted
    jco_posted = models.IntegerField(default=0,null=True,blank=True)
    # raw_jco_posted
    raw_jco_posted = models.IntegerField(default=0,null=True,blank=True)
    # jco def
    jco_def = models.IntegerField(default=0,null=True,blank=True)
    # jco held
    jco_held = models.IntegerField(default=0,null=True,blank=True)
    # jco absent
    jco_absent = models.IntegerField(default=0,null=True,blank=True)
    # jco present
    jco_present = models.IntegerField(default=0,null=True,blank=True)
    # jco ops_depl present
    ops_depl_jco_present = models.IntegerField(default=0,null=True,blank=True)
    # jco rear present
    rear_jco_present = models.IntegerField(default=0,null=True,blank=True)
    # p_leave
    p_leave_jco = models.IntegerField(default=0,null=True,blank=True)
    # c_leave
    c_leave_jco = models.IntegerField(default=0,null=True,blank=True)
    # r_leave
    r_leave_jco = models.IntegerField(default=0,null=True,blank=True)
    # m_leave
    m_leave_jco = models.IntegerField(default=0,null=True,blank=True)
    # j_leave
    j_leave_jco = models.IntegerField(default=0,null=True,blank=True)
    # w_leave
    w_leave_jco = models.IntegerField(default=0,null=True,blank=True)
    # osl
    osl_jco = models.IntegerField(default=0,null=True,blank=True)
    # awol
    awol_jco = models.IntegerField(default=0,null=True,blank=True)
    # course
    course_jco = models.IntegerField(default=0,null=True,blank=True)
    # trg
    trg_jco = models.IntegerField(default=0,null=True,blank=True)
    # cdr
    cdr_jco = models.IntegerField(default=0,null=True,blank=True)
    # cmh
    cmh_jco = models.IntegerField(default=0,null=True,blank=True)
    # stmk
    stmk_jco = models.IntegerField(default=0,null=True,blank=True)
    # line_sick
    line_sick_jco = models.IntegerField(default=0,null=True,blank=True)
    # misc
    misc_jco = models.IntegerField(default=0,null=True,blank=True)
    # total_leave
    total_leave_jco = models.IntegerField(default=0,null=True,blank=True)
    # ration_out
    ration_out_jco = models.IntegerField(default=0,null=True,blank=True)
    # out of unit emp
    # ere
    ere_jco = models.IntegerField(default=0,null=True,blank=True)
    # att
    att_jco = models.IntegerField(default=0,null=True,blank=True)
    # t_duty
    t_duty_jco = models.IntegerField(default=0,null=True,blank=True)
    # msn
    msn_jco = models.IntegerField(default=0,null=True,blank=True)
    # okp
    okp_jco = models.IntegerField(default=0,null=True,blank=True)
    # demov
    demov_jco = models.IntegerField(default=0,null=True,blank=True)
    # out_of_unit_emp
    out_of_unit_emp_jco = models.IntegerField(default=0,null=True,blank=True)

    
    def __str__(self):
        return f"Attendance Summary for {self.company} on {self.date}"
    

class AttendanceSummaryOffr(BaseModel):
    attendance_summary = models.OneToOneField(AttendanceSummary, on_delete=models.CASCADE, related_name='attendance_summary_offr')
    company = models.ForeignKey(Company, on_delete=models.SET_NULL,null=True,blank=True)
    date = models.DateField(null=True,blank=True)
    #TODO: for offr
    # toe_offr_auth
    toe_g_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_lg_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_mg_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_bg_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_c_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_lc_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_m_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_cp_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_l_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_sl_auth = models.IntegerField(default=0,null=True,blank=True)
    toe_offr_auth = models.IntegerField(default=0,null=True,blank=True)
    # ere_offr_auth
    ere_g_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_lg_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_mg_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_bg_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_c_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_lc_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_m_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_cp_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_l_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_sl_auth = models.IntegerField(default=0,null=True,blank=True)
    ere_offr_auth = models.IntegerField(default=0,null=True,blank=True)
    # offr_auth
    g_auth = models.IntegerField(default=0,null=True,blank=True)
    lg_auth = models.IntegerField(default=0,null=True,blank=True)
    mg_auth = models.IntegerField(default=0,null=True,blank=True)
    bg_auth = models.IntegerField(default=0,null=True,blank=True)
    c_auth = models.IntegerField(default=0,null=True,blank=True)
    lc_auth = models.IntegerField(default=0,null=True,blank=True)
    m_auth = models.IntegerField(default=0,null=True,blank=True)
    cp_auth = models.IntegerField(default=0,null=True,blank=True)
    l_auth = models.IntegerField(default=0,null=True,blank=True)
    sl_auth = models.IntegerField(default=0,null=True,blank=True)
    offr_auth = models.IntegerField(default=0,null=True,blank=True)
    # offr_posted
    g_posted = models.IntegerField(default=0,null=True,blank=True)
    lg_posted = models.IntegerField(default=0,null=True,blank=True)
    mg_posted = models.IntegerField(default=0,null=True,blank=True)
    bg_posted = models.IntegerField(default=0,null=True,blank=True)
    c_posted = models.IntegerField(default=0,null=True,blank=True)
    lc_posted = models.IntegerField(default=0,null=True,blank=True)
    m_posted = models.IntegerField(default=0,null=True,blank=True)
    cp_posted = models.IntegerField(default=0,null=True,blank=True)
    l_posted = models.IntegerField(default=0,null=True,blank=True)
    sl_posted = models.IntegerField(default=0,null=True,blank=True)
    offr_posted = models.IntegerField(default=0,null=True,blank=True)
    # raw_offr_posted
    raw_g_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_lg_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_mg_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_bg_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_c_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_lc_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_m_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_cp_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_l_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_sl_posted = models.IntegerField(default=0,null=True,blank=True)
    raw_offr_posted = models.IntegerField(default=0,null=True,blank=True)
    # off def
    g_def = models.IntegerField(default=0,null=True,blank=True)
    lg_def = models.IntegerField(default=0,null=True,blank=True)
    mg_def = models.IntegerField(default=0,null=True,blank=True)
    bg_def = models.IntegerField(default=0,null=True,blank=True)
    c_def = models.IntegerField(default=0,null=True,blank=True)
    lc_def = models.IntegerField(default=0,null=True,blank=True)
    m_def = models.IntegerField(default=0,null=True,blank=True)
    cp_def = models.IntegerField(default=0,null=True,blank=True)
    l_def = models.IntegerField(default=0,null=True,blank=True)
    sl_def = models.IntegerField(default=0,null=True,blank=True)
    offr_def = models.IntegerField(default=0,null=True,blank=True)
    # off held
    g_held = models.IntegerField(default=0,null=True,blank=True)
    lg_held = models.IntegerField(default=0,null=True,blank=True)
    mg_held = models.IntegerField(default=0,null=True,blank=True)
    bg_held = models.IntegerField(default=0,null=True,blank=True)
    c_held = models.IntegerField(default=0,null=True,blank=True)
    lc_held = models.IntegerField(default=0,null=True,blank=True)
    m_held = models.IntegerField(default=0,null=True,blank=True)
    cp_held = models.IntegerField(default=0,null=True,blank=True)
    l_held = models.IntegerField(default=0,null=True,blank=True)
    sl_held = models.IntegerField(default=0,null=True,blank=True)
    offr_held = models.IntegerField(default=0,null=True,blank=True)
    # off absent
    g_absent = models.IntegerField(default=0,null=True,blank=True)
    lg_absent = models.IntegerField(default=0,null=True,blank=True)
    mg_absent = models.IntegerField(default=0,null=True,blank=True)
    bg_absent = models.IntegerField(default=0,null=True,blank=True)
    c_absent = models.IntegerField(default=0,null=True,blank=True)
    lc_absent = models.IntegerField(default=0,null=True,blank=True)
    m_absent = models.IntegerField(default=0,null=True,blank=True)
    cp_absent = models.IntegerField(default=0,null=True,blank=True)
    l_absent = models.IntegerField(default=0,null=True,blank=True)
    sl_absent = models.IntegerField(default=0,null=True,blank=True)
    offr_absent = models.IntegerField(default=0,null=True,blank=True)
    # off present
    g_present = models.IntegerField(default=0,null=True,blank=True)
    lg_present = models.IntegerField(default=0,null=True,blank=True)
    mg_present = models.IntegerField(default=0,null=True,blank=True)
    bg_present = models.IntegerField(default=0,null=True,blank=True)
    c_present = models.IntegerField(default=0,null=True,blank=True)
    lc_present = models.IntegerField(default=0,null=True,blank=True)
    m_present = models.IntegerField(default=0,null=True,blank=True)
    cp_present = models.IntegerField(default=0,null=True,blank=True)
    l_present = models.IntegerField(default=0,null=True,blank=True)
    sl_present = models.IntegerField(default=0,null=True,blank=True)
    offr_present = models.IntegerField(default=0,null=True,blank=True)
    # off ops_depl present
    ops_depl_g_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_lg_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_mg_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_bg_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_c_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_lc_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_m_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_cp_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_l_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_sl_present = models.IntegerField(default=0,null=True,blank=True)
    ops_depl_offr_present = models.IntegerField(default=0,null=True,blank=True)
    # off rear present
    rear_g_present = models.IntegerField(default=0,null=True,blank=True)
    rear_lg_present = models.IntegerField(default=0,null=True,blank=True)
    rear_mg_present = models.IntegerField(default=0,null=True,blank=True)
    rear_bg_present = models.IntegerField(default=0,null=True,blank=True)
    rear_c_present = models.IntegerField(default=0,null=True,blank=True)
    rear_lc_present = models.IntegerField(default=0,null=True,blank=True)
    rear_m_present = models.IntegerField(default=0,null=True,blank=True)
    rear_cp_present = models.IntegerField(default=0,null=True,blank=True)
    rear_l_present = models.IntegerField(default=0,null=True,blank=True)
    rear_sl_present = models.IntegerField(default=0,null=True,blank=True)
    rear_offr_present = models.IntegerField(default=0,null=True,blank=True)
    # p_leave
    p_leave_g = models.IntegerField(default=0,null=True,blank=True)
    p_leave_lg = models.IntegerField(default=0,null=True,blank=True)
    p_leave_mg = models.IntegerField(default=0,null=True,blank=True)
    p_leave_bg = models.IntegerField(default=0,null=True,blank=True)
    p_leave_c = models.IntegerField(default=0,null=True,blank=True)
    p_leave_lc = models.IntegerField(default=0,null=True,blank=True)
    p_leave_m = models.IntegerField(default=0,null=True,blank=True)
    p_leave_cp = models.IntegerField(default=0,null=True,blank=True)
    p_leave_l = models.IntegerField(default=0,null=True,blank=True)
    p_leave_sl = models.IntegerField(default=0,null=True,blank=True)
    p_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    # c_leave
    c_leave_g = models.IntegerField(default=0,null=True,blank=True)
    c_leave_lg = models.IntegerField(default=0,null=True,blank=True)
    c_leave_mg = models.IntegerField(default=0,null=True,blank=True)
    c_leave_bg = models.IntegerField(default=0,null=True,blank=True)
    c_leave_c = models.IntegerField(default=0,null=True,blank=True)
    c_leave_lc = models.IntegerField(default=0,null=True,blank=True)
    c_leave_m = models.IntegerField(default=0,null=True,blank=True)
    c_leave_cp = models.IntegerField(default=0,null=True,blank=True)
    c_leave_l = models.IntegerField(default=0,null=True,blank=True)
    c_leave_sl = models.IntegerField(default=0,null=True,blank=True)
    c_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    # r_leave
    r_leave_g = models.IntegerField(default=0,null=True,blank=True)
    r_leave_lg = models.IntegerField(default=0,null=True,blank=True)
    r_leave_mg = models.IntegerField(default=0,null=True,blank=True)
    r_leave_bg = models.IntegerField(default=0,null=True,blank=True)
    r_leave_c = models.IntegerField(default=0,null=True,blank=True)
    r_leave_lc = models.IntegerField(default=0,null=True,blank=True)
    r_leave_m = models.IntegerField(default=0,null=True,blank=True)
    r_leave_cp = models.IntegerField(default=0,null=True,blank=True)
    r_leave_l = models.IntegerField(default=0,null=True,blank=True)
    r_leave_sl = models.IntegerField(default=0,null=True,blank=True)
    r_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    # m_leave
    m_leave_g = models.IntegerField(default=0,null=True,blank=True)
    m_leave_lg = models.IntegerField(default=0,null=True,blank=True)
    m_leave_mg = models.IntegerField(default=0,null=True,blank=True)
    m_leave_bg = models.IntegerField(default=0,null=True,blank=True)
    m_leave_c = models.IntegerField(default=0,null=True,blank=True)
    m_leave_lc = models.IntegerField(default=0,null=True,blank=True)
    m_leave_m = models.IntegerField(default=0,null=True,blank=True)
    m_leave_cp = models.IntegerField(default=0,null=True,blank=True)
    m_leave_l = models.IntegerField(default=0,null=True,blank=True)
    m_leave_sl = models.IntegerField(default=0,null=True,blank=True)
    m_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    # j_leave
    j_leave_g = models.IntegerField(default=0,null=True,blank=True)
    j_leave_lg = models.IntegerField(default=0,null=True,blank=True)
    j_leave_mg = models.IntegerField(default=0,null=True,blank=True)
    j_leave_bg = models.IntegerField(default=0,null=True,blank=True)
    j_leave_c = models.IntegerField(default=0,null=True,blank=True)
    j_leave_lc = models.IntegerField(default=0,null=True,blank=True)
    j_leave_m = models.IntegerField(default=0,null=True,blank=True)
    j_leave_cp = models.IntegerField(default=0,null=True,blank=True)
    j_leave_l = models.IntegerField(default=0,null=True,blank=True)
    j_leave_sl = models.IntegerField(default=0,null=True,blank=True)
    j_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    # w_leave
    w_leave_g = models.IntegerField(default=0,null=True,blank=True)
    w_leave_lg = models.IntegerField(default=0,null=True,blank=True)
    w_leave_mg = models.IntegerField(default=0,null=True,blank=True)
    w_leave_bg = models.IntegerField(default=0,null=True,blank=True)
    w_leave_c = models.IntegerField(default=0,null=True,blank=True)
    w_leave_lc = models.IntegerField(default=0,null=True,blank=True)
    w_leave_m = models.IntegerField(default=0,null=True,blank=True)
    w_leave_cp = models.IntegerField(default=0,null=True,blank=True)
    w_leave_l = models.IntegerField(default=0,null=True,blank=True)
    w_leave_sl = models.IntegerField(default=0,null=True,blank=True)
    w_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    # osl
    osl_g = models.IntegerField(default=0,null=True,blank=True)
    osl_lg = models.IntegerField(default=0,null=True,blank=True)
    osl_mg = models.IntegerField(default=0,null=True,blank=True)
    osl_bg = models.IntegerField(default=0,null=True,blank=True)
    osl_c = models.IntegerField(default=0,null=True,blank=True)
    osl_lc = models.IntegerField(default=0,null=True,blank=True)
    osl_m = models.IntegerField(default=0,null=True,blank=True)
    osl_cp = models.IntegerField(default=0,null=True,blank=True)
    osl_l = models.IntegerField(default=0,null=True,blank=True)
    osl_sl = models.IntegerField(default=0,null=True,blank=True)
    osl_offr = models.IntegerField(default=0,null=True,blank=True)
    # awol
    awol_g = models.IntegerField(default=0,null=True,blank=True)
    awol_lg = models.IntegerField(default=0,null=True,blank=True)
    awol_mg = models.IntegerField(default=0,null=True,blank=True)
    awol_bg = models.IntegerField(default=0,null=True,blank=True)
    awol_c = models.IntegerField(default=0,null=True,blank=True)
    awol_lc = models.IntegerField(default=0,null=True,blank=True)
    awol_m = models.IntegerField(default=0,null=True,blank=True)
    awol_cp = models.IntegerField(default=0,null=True,blank=True)
    awol_l = models.IntegerField(default=0,null=True,blank=True)
    awol_sl = models.IntegerField(default=0,null=True,blank=True)
    awol_offr = models.IntegerField(default=0,null=True,blank=True)
    # course
    course_g = models.IntegerField(default=0,null=True,blank=True)
    course_lg = models.IntegerField(default=0,null=True,blank=True)
    course_mg = models.IntegerField(default=0,null=True,blank=True)
    course_bg = models.IntegerField(default=0,null=True,blank=True)
    course_c = models.IntegerField(default=0,null=True,blank=True)
    course_lc = models.IntegerField(default=0,null=True,blank=True)
    course_m = models.IntegerField(default=0,null=True,blank=True)
    course_cp = models.IntegerField(default=0,null=True,blank=True)
    course_l = models.IntegerField(default=0,null=True,blank=True)
    course_sl = models.IntegerField(default=0,null=True,blank=True)
    course_offr = models.IntegerField(default=0,null=True,blank=True)
    # trg
    trg_g = models.IntegerField(default=0,null=True,blank=True)
    trg_lg = models.IntegerField(default=0,null=True,blank=True)
    trg_mg = models.IntegerField(default=0,null=True,blank=True)
    trg_bg = models.IntegerField(default=0,null=True,blank=True)
    trg_c = models.IntegerField(default=0,null=True,blank=True)
    trg_lc = models.IntegerField(default=0,null=True,blank=True)
    trg_m = models.IntegerField(default=0,null=True,blank=True)
    trg_cp = models.IntegerField(default=0,null=True,blank=True)
    trg_l = models.IntegerField(default=0,null=True,blank=True)
    trg_sl = models.IntegerField(default=0,null=True,blank=True)
    trg_offr = models.IntegerField(default=0,null=True,blank=True)
    # cdr
    cdr_g = models.IntegerField(default=0,null=True,blank=True)
    cdr_lg = models.IntegerField(default=0,null=True,blank=True)
    cdr_mg = models.IntegerField(default=0,null=True,blank=True)
    cdr_bg = models.IntegerField(default=0,null=True,blank=True)
    cdr_c = models.IntegerField(default=0,null=True,blank=True)
    cdr_lc = models.IntegerField(default=0,null=True,blank=True)
    cdr_m = models.IntegerField(default=0,null=True,blank=True)
    cdr_cp = models.IntegerField(default=0,null=True,blank=True)
    cdr_l = models.IntegerField(default=0,null=True,blank=True)
    cdr_sl = models.IntegerField(default=0,null=True,blank=True)
    cdr_offr = models.IntegerField(default=0,null=True,blank=True)
    # cmh
    cmh_g = models.IntegerField(default=0,null=True,blank=True)
    cmh_lg = models.IntegerField(default=0,null=True,blank=True)
    cmh_mg = models.IntegerField(default=0,null=True,blank=True)
    cmh_bg = models.IntegerField(default=0,null=True,blank=True)
    cmh_c = models.IntegerField(default=0,null=True,blank=True)
    cmh_lc = models.IntegerField(default=0,null=True,blank=True)
    cmh_m = models.IntegerField(default=0,null=True,blank=True)
    cmh_cp = models.IntegerField(default=0,null=True,blank=True)
    cmh_l = models.IntegerField(default=0,null=True,blank=True)
    cmh_sl = models.IntegerField(default=0,null=True,blank=True)
    cmh_offr = models.IntegerField(default=0,null=True,blank=True)
    # stmk
    stmk_g = models.IntegerField(default=0,null=True,blank=True)
    stmk_lg = models.IntegerField(default=0,null=True,blank=True)
    stmk_mg = models.IntegerField(default=0,null=True,blank=True)
    stmk_bg = models.IntegerField(default=0,null=True,blank=True)
    stmk_c = models.IntegerField(default=0,null=True,blank=True)
    stmk_lc = models.IntegerField(default=0,null=True,blank=True)
    stmk_m = models.IntegerField(default=0,null=True,blank=True)
    stmk_cp = models.IntegerField(default=0,null=True,blank=True)
    stmk_l = models.IntegerField(default=0,null=True,blank=True)
    stmk_sl = models.IntegerField(default=0,null=True,blank=True)
    stmk_offr = models.IntegerField(default=0,null=True,blank=True)
    # line_sick
    line_sick_g = models.IntegerField(default=0,null=True,blank=True)
    line_sick_lg = models.IntegerField(default=0,null=True,blank=True)
    line_sick_mg = models.IntegerField(default=0,null=True,blank=True)
    line_sick_bg = models.IntegerField(default=0,null=True,blank=True)
    line_sick_c = models.IntegerField(default=0,null=True,blank=True)
    line_sick_lc = models.IntegerField(default=0,null=True,blank=True)
    line_sick_m = models.IntegerField(default=0,null=True,blank=True)
    line_sick_cp = models.IntegerField(default=0,null=True,blank=True)
    line_sick_l = models.IntegerField(default=0,null=True,blank=True)
    line_sick_sl = models.IntegerField(default=0,null=True,blank=True)
    line_sick_offr = models.IntegerField(default=0,null=True,blank=True)
    # misc
    misc_g = models.IntegerField(default=0,null=True,blank=True)
    misc_lg = models.IntegerField(default=0,null=True,blank=True)
    misc_mg = models.IntegerField(default=0,null=True,blank=True)
    misc_bg = models.IntegerField(default=0,null=True,blank=True)
    misc_c = models.IntegerField(default=0,null=True,blank=True)
    misc_lc = models.IntegerField(default=0,null=True,blank=True)
    misc_m = models.IntegerField(default=0,null=True,blank=True)
    misc_cp = models.IntegerField(default=0,null=True,blank=True)
    misc_l = models.IntegerField(default=0,null=True,blank=True)
    misc_sl = models.IntegerField(default=0,null=True,blank=True)
    misc_offr = models.IntegerField(default=0,null=True,blank=True)
    # total_leave
    total_leave_g = models.IntegerField(default=0,null=True,blank=True)
    total_leave_lg = models.IntegerField(default=0,null=True,blank=True)
    total_leave_mg = models.IntegerField(default=0,null=True,blank=True)
    total_leave_bg = models.IntegerField(default=0,null=True,blank=True)
    total_leave_c = models.IntegerField(default=0,null=True,blank=True)
    total_leave_lc = models.IntegerField(default=0,null=True,blank=True)
    total_leave_m = models.IntegerField(default=0,null=True,blank=True)
    total_leave_cp = models.IntegerField(default=0,null=True,blank=True)
    total_leave_l = models.IntegerField(default=0,null=True,blank=True)
    total_leave_sl = models.IntegerField(default=0,null=True,blank=True)
    total_leave_offr = models.IntegerField(default=0,null=True,blank=True)
    # ration_out
    ration_out_g = models.IntegerField(default=0,null=True,blank=True)
    ration_out_lg = models.IntegerField(default=0,null=True,blank=True)
    ration_out_mg = models.IntegerField(default=0,null=True,blank=True)
    ration_out_bg = models.IntegerField(default=0,null=True,blank=True)
    ration_out_c = models.IntegerField(default=0,null=True,blank=True)
    ration_out_lc = models.IntegerField(default=0,null=True,blank=True)
    ration_out_m = models.IntegerField(default=0,null=True,blank=True)
    ration_out_cp = models.IntegerField(default=0,null=True,blank=True)
    ration_out_l = models.IntegerField(default=0,null=True,blank=True)
    ration_out_sl = models.IntegerField(default=0,null=True,blank=True)
    ration_out_offr = models.IntegerField(default=0,null=True,blank=True)
    # out of unit emp
    # ere
    ere_g = models.IntegerField(default=0,null=True,blank=True)
    ere_lg = models.IntegerField(default=0,null=True,blank=True)
    ere_mg = models.IntegerField(default=0,null=True,blank=True)
    ere_bg = models.IntegerField(default=0,null=True,blank=True)
    ere_c = models.IntegerField(default=0,null=True,blank=True)
    ere_lc = models.IntegerField(default=0,null=True,blank=True)
    ere_m = models.IntegerField(default=0,null=True,blank=True)
    ere_cp = models.IntegerField(default=0,null=True,blank=True)
    ere_l = models.IntegerField(default=0,null=True,blank=True)
    ere_sl = models.IntegerField(default=0,null=True,blank=True)
    ere_offr = models.IntegerField(default=0,null=True,blank=True)
    # att
    att_g = models.IntegerField(default=0,null=True,blank=True)
    att_lg = models.IntegerField(default=0,null=True,blank=True)
    att_mg = models.IntegerField(default=0,null=True,blank=True)
    att_bg = models.IntegerField(default=0,null=True,blank=True)
    att_c = models.IntegerField(default=0,null=True,blank=True)
    att_lc = models.IntegerField(default=0,null=True,blank=True)
    att_m = models.IntegerField(default=0,null=True,blank=True)
    att_cp = models.IntegerField(default=0,null=True,blank=True)
    att_l = models.IntegerField(default=0,null=True,blank=True)
    att_sl = models.IntegerField(default=0,null=True,blank=True)
    att_offr = models.IntegerField(default=0,null=True,blank=True)
    # t_duty
    t_duty_g = models.IntegerField(default=0,null=True,blank=True)
    t_duty_lg = models.IntegerField(default=0,null=True,blank=True)
    t_duty_mg = models.IntegerField(default=0,null=True,blank=True)
    t_duty_bg = models.IntegerField(default=0,null=True,blank=True)
    t_duty_c = models.IntegerField(default=0,null=True,blank=True)
    t_duty_lc = models.IntegerField(default=0,null=True,blank=True)
    t_duty_m = models.IntegerField(default=0,null=True,blank=True)
    t_duty_cp = models.IntegerField(default=0,null=True,blank=True)
    t_duty_l = models.IntegerField(default=0,null=True,blank=True)
    t_duty_sl = models.IntegerField(default=0,null=True,blank=True)
    t_duty_offr = models.IntegerField(default=0,null=True,blank=True)
    # msn
    msn_g = models.IntegerField(default=0,null=True,blank=True)
    msn_lg = models.IntegerField(default=0,null=True,blank=True)
    msn_mg = models.IntegerField(default=0,null=True,blank=True)
    msn_bg = models.IntegerField(default=0,null=True,blank=True)
    msn_c = models.IntegerField(default=0,null=True,blank=True)
    msn_lc = models.IntegerField(default=0,null=True,blank=True)
    msn_m = models.IntegerField(default=0,null=True,blank=True)
    msn_cp = models.IntegerField(default=0,null=True,blank=True)
    msn_l = models.IntegerField(default=0,null=True,blank=True)
    msn_sl = models.IntegerField(default=0,null=True,blank=True)
    msn_offr = models.IntegerField(default=0,null=True,blank=True)
    # okp
    okp_g = models.IntegerField(default=0,null=True,blank=True)
    okp_lg = models.IntegerField(default=0,null=True,blank=True)
    okp_mg = models.IntegerField(default=0,null=True,blank=True)
    okp_bg = models.IntegerField(default=0,null=True,blank=True)
    okp_c = models.IntegerField(default=0,null=True,blank=True)
    okp_lc = models.IntegerField(default=0,null=True,blank=True)
    okp_m = models.IntegerField(default=0,null=True,blank=True)
    okp_cp = models.IntegerField(default=0,null=True,blank=True)
    okp_l = models.IntegerField(default=0,null=True,blank=True)
    okp_sl = models.IntegerField(default=0,null=True,blank=True)
    okp_offr = models.IntegerField(default=0,null=True,blank=True)
    # demov
    demov_g = models.IntegerField(default=0,null=True,blank=True)
    demov_lg = models.IntegerField(default=0,null=True,blank=True)
    demov_mg = models.IntegerField(default=0,null=True,blank=True)
    demov_bg = models.IntegerField(default=0,null=True,blank=True)
    demov_c = models.IntegerField(default=0,null=True,blank=True)
    demov_lc = models.IntegerField(default=0,null=True,blank=True)
    demov_m = models.IntegerField(default=0,null=True,blank=True)
    demov_cp = models.IntegerField(default=0,null=True,blank=True)
    demov_l = models.IntegerField(default=0,null=True,blank=True)
    demov_sl = models.IntegerField(default=0,null=True,blank=True)
    demov_offr = models.IntegerField(default=0,null=True,blank=True)
    # out_of_unit_emp
    out_of_unit_emp_g = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_lg = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_mg = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_bg = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_c = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_lc = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_m = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_cp = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_l = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_sl = models.IntegerField(default=0,null=True,blank=True)
    out_of_unit_emp_offr = models.IntegerField(default=0,null=True,blank=True)