from django.db import models
from hr_department.models import Team, Vendors

# Create your models here.
class Incomes(models.Model):
    income_type = models.CharField(max_length=255, blank=False, null=False)
    donation_type = models.CharField(max_length=255, blank=False, null=False)
    donor = models.CharField(max_length=255, blank=False, null=False)
    email = models.CharField(max_length=255, blank=False, null=False)
    mobile = models.CharField(max_length=255, blank=False, null=False)
    aadhar_no = models.CharField(max_length=255, blank=True, null=True)
    pan_no = models.CharField(max_length=255, blank=True, null=True)    
    sanction_amount = models.IntegerField(blank=False, null=False)
    received_amount = models.IntegerField(blank=False, null=False)
    human_resource = models.CharField(blank=True, default="", max_length=255, null=True)
    camp_expenses = models.CharField(default="", max_length=255, blank=True,  null=True)
    training_expenses = models.CharField(default="", max_length=255, blank=True, null=True)
    equipment_expenses = models.CharField(default="", max_length=255, blank=True, null=True)
    travel_expenses = models.CharField(default="", max_length=255, blank=True, null=True)
    material_expences = models.CharField(default="", max_length=255, blank=True, null=True)
    administrative_expenses = models.CharField(default="", max_length=255, blank=True, null=True)
    accomodation_expenses = models.CharField(default="", max_length=255, blank=True, null=True)
    monitoring_expenses = models.CharField(default="", max_length=255, blank=True, null=True)
    miscellaneous_expenses = models.CharField(default="", max_length=255, blank=True, null=True)
    no_of_installments = models.CharField(default="", max_length=255, blank=True, null=True)
    mode_of_payment = models.CharField(max_length=255, default="", blank=True, null=True)
    proof_of_evidence = models.FileField(upload_to='income', blank=True, null=True)
    payment_date = models.CharField(default="", max_length=255, blank=True, null=True)
    program_type = models.ForeignKey('program_department.Program_Types', blank=True, null=True, default="", on_delete=models.CASCADE, related_name='income_program_type')
    project = models.ForeignKey('program_department.Projects', default="", blank=True, null=True, on_delete=models.CASCADE, related_name='income_project')
    start_date = models.CharField(default="", max_length=255, blank=True, null=True)
    end_date = models.CharField(default="", max_length=255, blank=True, null=True)
    state = models.ForeignKey('country.States', default="", on_delete=models.SET_NULL, null=True, related_name='income_state')
    district = models.ForeignKey('country.Districts', default="", on_delete=models.SET_NULL, null=True, related_name='income_district')
    address = models.TextField(blank=True, null=True)
    message = models.TextField(blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)



class Alloted_Targets(models.Model):
    income = models.ForeignKey(Incomes, default="", on_delete=models.CASCADE, related_name='alloted_targets')
    target_name = models.CharField(max_length=255, blank=False, null=False)
    target_number = models.IntegerField(blank=False, null=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)



class Expenditure(models.Model):
    expence_date = models.DateField(blank=False, null=False)
    sector_of_expence = models.CharField(max_length=255, blank=False, null=False)
    project = models.ForeignKey('program_department.Projects', default="", on_delete=models.SET_NULL, null=True, related_name='expenditure_project')
    administrative_expense = models.CharField(max_length=255, default="", blank=True, null=True)
    payment_type = models.CharField(max_length=255, blank=False, null=False)
    payment_status = models.IntegerField(default=0, choices=((0, 'Payment due'),(1, 'Complete')))
    assets = models.IntegerField(default=0, choices=((0, 'No'),(1, 'Yes')))
    other_payment_mode = models.CharField(default="", max_length=255, blank=True, null=True)
    other_invoice = models.FileField(upload_to="expenditures", blank=True, null=True)
    other_payment_proof = models.FileField(upload_to="expenditures", blank=True, null=True)
    advance= models.CharField(default="", max_length=255, blank=True, null=True)
    description = models.TextField(default="", blank=True, null=True)
    pan_no = models.CharField(default="", max_length=255, blank=True, null=True)
    member_or_vendor = models.CharField(default="", max_length=255, blank=True, null=True)
    member = models.ForeignKey(Team, on_delete=models.SET_NULL, default="", blank=True, null=True)
    vendor = models.ForeignKey(Vendors, on_delete=models.SET_NULL, default="", blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)



class HRExpenditure(models.Model):
    expenditure = models.OneToOneField(Expenditure, on_delete=models.CASCADE, related_name="hr")
    human_resource = models.CharField(max_length=25, default="", blank=True, null=True)
    hr_expence_date = models.CharField(max_length=255, default="", blank=True, null=True)
    hr_amount = models.CharField(default="", max_length=255, blank=True, null=True)
    hr_section = models.CharField(default="", max_length=255, blank=True, null=True)
    hr_tds_deduction = models.CharField(default="", max_length=255, blank=True, null=True)
    hr_tds_deduction_date = models.CharField(default="", max_length=255, blank=True, null=True)


class EquipmentExpenditure(models.Model):
    expenditure = models.OneToOneField(Expenditure, on_delete=models.CASCADE, related_name="equipment")
    equipment_expence_date = models.CharField(default="", max_length=255, blank=True, null=True)
    equipment_amount = models.CharField(default="", max_length=255, blank=True, null=True)
    equipment_section = models.CharField(default="", max_length=255, blank=True, null=True)
    equipment_supplier_name = models.CharField(default="", max_length=255, blank=True, null=True)
    equipment_tds_deduction = models.CharField(default="", max_length=255, blank=True, null=True)
    equipment_tds_deduction_date = models.CharField(default="", max_length=255, blank=True, null=True)


class TravelExpenditure(models.Model):
    expenditure = models.ForeignKey(Expenditure, on_delete=models.CASCADE, related_name="travel")
    travel_expence_date = models.CharField(default="", max_length=255, blank=True, null=True)
    departure = models.CharField(default="", max_length=255, blank=True, null=True)
    arrival = models.CharField(default="", max_length=255, blank=True, null=True)
    mode_of_travel = models.CharField(default="", max_length=255, blank=True, null=True)
    travel_amount = models.CharField(default="", max_length=255, blank=True, null=True)
    travel_section = models.CharField(default="", max_length=255, blank=True, null=True)
    travel_tds_deduction = models.CharField(default="", max_length=255, blank=True, null=True)
    travel_tds_deduction_date = models.CharField(default="", max_length=255, blank=True, null=True)

class IECExpenditure(models.Model):
    expenditure = models.OneToOneField(Expenditure, on_delete=models.CASCADE, related_name="iec")
    iec_expence_date = models.CharField(default="", max_length=255, blank=True, null=True)
    item = models.CharField(default="", max_length=255, blank=True, null=True)
    quantity = models.CharField(default="", max_length=255, blank=True, null=True)
    rate = models.CharField(default="", max_length=255, blank=True, null=True)
    iec_amount = models.CharField(default="", max_length=255, blank=True, null=True)
    iec_section = models.CharField(default="", max_length=255, blank=True, null=True)
    iec_remarks = models.CharField(default="", max_length=255, blank=True, null=True)
    iec_tds_deduction = models.CharField(default="", max_length=255, blank=True, null=True)
    iec_tds_deduction_date = models.CharField(default="", max_length=255, blank=True, null=True)


class AccommodationExpenditure(models.Model):
    expenditure = models.OneToOneField(Expenditure, on_delete=models.CASCADE, related_name="accommodation")
    accommodation_expence_date = models.CharField(default="", max_length=255, blank=True, null=True)
    accommodation_check_in = models.CharField(default="", max_length=255, blank=True, null=True)
    accommodation_check_out = models.CharField(default="", max_length=255, blank=True, null=True)
    no_of_days = models.CharField(default="", max_length=255, blank=True, null=True)
    accommodation_amount = models.CharField(default="", max_length=255, blank=True, null=True)
    accommodation_section = models.CharField(default="", max_length=255, blank=True, null=True)
    accommodation_tds_deduction = models.CharField(default="", max_length=255, blank=True, null=True)
    accommodation_tds_deduction_date = models.CharField(default="", max_length=255, blank=True, null=True)


class MiscellaneousExpenditure(models.Model):
    expenditure = models.OneToOneField(Expenditure, on_delete=models.CASCADE, related_name="miscellaneous")
    miscellaneous_expence_date = models.CharField(default="", max_length=255, blank=True, null=True)
    miscellaneous_other = models.CharField(default="", max_length=255, blank=True, null=True)
    miscellaneous_remarks = models.CharField(default="", max_length=255, blank=True, null=True)
    miscellaneous_amount = models.CharField(default="", max_length=255, blank=True, null=True)
    miscellaneous_section = models.CharField(default="", max_length=255, blank=True, null=True)
    miscellaneous_tds_deduction = models.CharField(default="", max_length=255, blank=True, null=True)
    miscellaneous_tds_deduction_date = models.CharField(default="", max_length=255, blank=True, null=True)
    miscellaneous_description = models.TextField(default="", blank=True, null=True)


class OfficeExpenditure(models.Model):
    expenditure = models.OneToOneField(Expenditure, on_delete=models.CASCADE, related_name="office")
    office_expence_date = models.CharField(default="", max_length=255, blank=True, null=True)
    office_amount = models.CharField(default="", max_length=255, blank=True, null=True)
    office_section = models.CharField(default="", max_length=255, blank=True, null=True)
    office_supplier_name = models.CharField(default="", max_length=255, blank=True, null=True)
    office_tds_deduction = models.CharField(default="", max_length=255, blank=True, null=True)
    office_tds_deduction_date = models.CharField(default="", max_length=255, blank=True, null=True)