from django.db import models
from django.utils import timezone
from django.conf import settings
from django.db.models import JSONField 
from organisations.models import OrganisationBranch,Organisation
from customers.models import Customer,CustomerTypeField
from loans.models import LoanProduct, LoanSectors
from users.models import Staff
from overdraft.models import OverDraftProducts
from ledgers.models import OrganisationSubAccount
from savings.models import SavingsProduct,SavingAccount

class BulkImportInitiation(models.Model):
    initiation =  models.CharField(max_length=155)
    description = models.CharField(max_length=1555, null=True, blank=True)
    narration = models.CharField(max_length=155)
    import_type = models.CharField(max_length=55)
    total =  models.IntegerField(default=0)
    send_sms = models.BooleanField(default=False)
    failed_transactions = JSONField( null=True, blank=True)
    record_date = models.DateTimeField(default = timezone.now)
    initiation_added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='initiation_added_by')
    organisation_branch =  models.ForeignKey(OrganisationBranch, on_delete=models.CASCADE, related_name='initiation_organisation_branch')
    date_added = models.DateTimeField(default = timezone.now)
    last_updated = models.DateTimeField(default = timezone.now)
    status       = models.CharField(max_length=55)
    as_at = models.DateTimeField(default = timezone.now)
    
    class Meta:
        db_table = 'public\".\"bulk_import_initiations'

class BulkTempSalaryImports(models.Model):
    STATUSES = (
        ('Pending', 'Pending'),
        ('Failed', 'Failed'),
        ('Processed', 'Processed'),
    )

    # Reference to the Customer
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='salary_import_customer', null=True, blank=True)
    
    salary_account = models.CharField(max_length=50, null=True, blank=True)  # optional savings account number

    amount = models.FloatField(default=0.0)
    payment_method = models.CharField(max_length=50)

    debit_chart = models.ForeignKey(
        OrganisationSubAccount,
        on_delete=models.CASCADE,
        related_name='salary_import_debit_chart',
        null=True,
        blank=True
    )

    initiation = models.ForeignKey(
        BulkImportInitiation,
        on_delete=models.CASCADE,
        related_name='salary_import_initiation'
    )

    organisation_branch = models.ForeignKey(
        OrganisationBranch,
        on_delete=models.CASCADE,
        related_name='salary_import_branch',
        null=True,
        blank=True
    )

    status = models.CharField(max_length=50, choices=STATUSES, default='Pending')
    record_date = models.DateTimeField(default=timezone.now)

    msg = models.TextField(null=True, blank=True)
    heading = models.TextField(null=True, blank=True)
    comment = models.TextField(null=True, blank=True)

    added_by = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        related_name='salary_import_added_by'
    )

    date_added = models.DateTimeField(default=timezone.now)
    last_updated = models.DateTimeField(auto_now=True)

    class Meta:
        db_table = 'public"."bulk_temp_salary_imports'


class BulkTempLoansImport(models.Model):
    LOAN_PERIOD_TYPE = (('d', 'Days'),
        ('m', 'Months'),
        ('w', 'Weeks'),
        ('bw', 'Bi-Weeks'),
        ('q', 'Quarterly'),
        ('y', 'Years'),
        )
    INT_METHOD = (('flat', 'Flat'),
        ('declining', 'Declining Balance'),
        ('amortization', 'Amortization'),
        )
    GRACE_PERIOD_TYPE = (('pay_i', 'Pay Only Interest'),
        ('pay_p', 'Pay Only Principal'),
        ('pay_none', 'Pay None'),
        )
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='import_loan_customer')
    loan_amount =  models.FloatField(default=0.0)
    loan_period =  models.IntegerField(default=0)
    period_type = models.CharField(max_length=10, choices=LOAN_PERIOD_TYPE)
    int_rate =  models.FloatField(default=0.0)
    int_method =  models.CharField(max_length=50, choices=INT_METHOD)
    loan_officer = models.ForeignKey(Staff, on_delete=models.CASCADE, related_name='import_loan_officer')
    loan_application_product =  models.ForeignKey(LoanProduct, on_delete=models.CASCADE, related_name='import_loan_application_product')
    princ_bal =  models.FloatField(default=0.0)
    int_bal =  models.FloatField(default=0.0)
    grace_period =  models.FloatField(default=0.0)
    grace_period_type = models.CharField(max_length=50, choices=GRACE_PERIOD_TYPE, default='pay_none') 
    penalty =  models.FloatField(default=0.0)
    payment_method =  models.CharField(max_length=50)
    account_id =  models.IntegerField()
    record_date = models.DateTimeField(default = timezone.now)
    loan_date = models.DateTimeField(default = timezone.now)
    disbursement_date = models.DateTimeField(default = timezone.now)
    loan_initiation =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_import_initiation')
    teller = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='bul_import_loan_teller')
    loan_initiation_added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='loan_initiation_added_by')
    organisation_branch =  models.ForeignKey(OrganisationBranch, on_delete=models.CASCADE, related_name='bulk_import_organisation_branch')
    date_added = models.DateTimeField(default = timezone.now)
    last_updated = models.DateTimeField(default = timezone.now)
    status = models.CharField(max_length=55)
    loan_sector = models.ForeignKey(LoanSectors, on_delete=models.CASCADE, related_name='bulk_import_loan_sector', null=True, blank=True)
    reference_id = models.CharField(max_length=200, null=True, blank=True)
    payment_frequency = models.IntegerField(default=1)
    group_customer_number = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='group_customer_number', null=True, blank=True)

    class Meta:
        db_table = 'public\".\"bulk_temp_loans_imports'

class BulkTempMembersImport(models.Model):
    name =  models.CharField(max_length=550)
    member_number =  models.CharField(max_length=555)
    old_member_number =  models.CharField(max_length=555, null=True, blank=True)
    saving_product_id =  models.CharField(max_length=555)
    region =  models.CharField(max_length=200, null=True, blank=True)
    address =  models.CharField(max_length=200, null=True, blank=True)
    client_type =  models.IntegerField(default=0)
    phone =  models.CharField(max_length=50, null=True, blank=True)
    gender =  models.CharField(max_length=10, null=True, blank=True)
    age =  models.IntegerField(null=True, blank=True)
    nationality =  models.CharField(max_length=255, null=True, blank=True)
    disability =  models.BooleanField(null=True, blank=True)
    district =  models.CharField(max_length=255, null=True, blank=True)
    record_date = models.DateTimeField(default = timezone.now)
    member_initiation =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_import_memb_initiation')
    member_initiation_added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='members_initiation_added_by')
    organisation_branch =  models.ForeignKey(OrganisationBranch, on_delete=models.CASCADE, related_name='bulk_import_memb_organisation_branch')
    date_added = models.DateTimeField(default = timezone.now)
    last_updated = models.DateTimeField(default = timezone.now)
    status = models.CharField(max_length=55)
    group_member_number =  models.CharField(max_length=155, null=True, blank=True)

    class Meta:
        db_table = 'public\".\"bulk_temp_members_imports'

class BulkTempAccountsImport(models.Model):
    name =  models.CharField(max_length=550)
    member_number =  models.CharField(max_length=555)
    saving_product_id =  models.CharField(max_length=555)
    customer_id =  models.CharField(max_length=555)
    record_date = models.DateTimeField(default = timezone.now)
    member_initiation =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_import_accounts_initiation')
    member_initiation_added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='accounts_initiation_added_by')
    date_added = models.DateTimeField(default = timezone.now)
    status = models.CharField(max_length=55)

    class Meta:
        db_table = 'public\".\"bulk_temp_accounts_imports'

class BulkTempDepositsImports(models.Model):
    STATUSES = (
        ('Pending', 'Pending'),
        ('Failed', 'Failed'),
            ('Processed', 'Processed')
    )
    amount            =  models.FloatField()
    payment_method    =  models.CharField(max_length=50)
    deposited_by      =  models.CharField(max_length=255)
    teller_assign_id  = models.BigIntegerField(null=True, blank=True)
    product           =  models.ForeignKey(SavingsProduct, on_delete=models.CASCADE, related_name='import_product',null=True, blank=True)
    customer          =  models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='import_customer',null=True, blank=True)
    debit_chart       = models.ForeignKey(OrganisationSubAccount, on_delete=models.CASCADE, related_name='debit_chart')
    initiation        =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_deposit_import_initiation')
    organisation_branch  =  models.ForeignKey(OrganisationBranch, on_delete=models.CASCADE, related_name='bulk_import_branch', null=True, blank=True)
    status      = models.CharField(max_length=50, choices=STATUSES)
    record_date = models.DateTimeField(null=False, blank=False)
    msg         = models.TextField(null=True, blank=True)
    heading     = models.TextField(null=True, blank=True)
    comment     = models.TextField(null=True, blank=True)
    date_added  = models.DateTimeField(default = timezone.now)
    added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='saving_initiation_added_by')
    group_customer          =  models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='group_customer',null=True, blank=True)

    class Meta:
        db_table = 'public\".\"bulk_temp_deposits_imports'

class BulkTempClientDepositsImports(models.Model):
    STATUSES = (
        ('Pending', 'Pending'),
        ('Failed', 'Failed'),
        ('Processed', 'Processed')
    )
    amount            =  models.FloatField()
    charge            =  models.FloatField(default=0.0)     
    payment_method    =  models.CharField(max_length=50)
    deposited_by      =  models.CharField(max_length=255)
    teller_assign_id  = models.BigIntegerField(null=True, blank=True)
    account           =  models.ForeignKey(SavingAccount, on_delete=models.CASCADE, related_name='bulk_client_deposit_import_account',null=True, blank=True)
    customer          =  models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='bulk_client_deposit_import_customer',null=True, blank=True)
    debit_chart       = models.ForeignKey(OrganisationSubAccount, on_delete=models.CASCADE, related_name='bulk_client_deposit_import_debit_chart')
    initiation        =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_client_deposit_import_initiation')
    organisation_branch  =  models.ForeignKey(OrganisationBranch, on_delete=models.CASCADE, related_name='bulk_client_deposit_import_branch', null=True, blank=True)
    status      = models.CharField(max_length=50, choices=STATUSES)
    record_date = models.DateTimeField(null=False, blank=False)
    msg         = models.TextField(null=True, blank=True)
    heading     = models.TextField(null=True, blank=True)
    comment     = models.TextField(null=True, blank=True)
    send_sms    = models.BooleanField(default=False)
    date_added  = models.DateTimeField(default = timezone.now)
    added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='deposit_initiation_added_by')
    class Meta:
        db_table = 'public\".\"bulk_temp_client_deposits_imports'

class BulkTempFixedDepositsImports(models.Model):
    STATUSES = (
        ('Pending', 'Pending'),
        ('Failed', 'Failed'),
            ('Processed', 'Processed')
    )
    amount            =  models.FloatField()
    auto_close        =  models.BooleanField(default=False)
    auto_payments     =  models.BooleanField(default=False)
    withholding_tax   =  models.BooleanField(default=False)
    period            =  models.IntegerField(null=False,default=24)
    interest          =  models.FloatField(null=False,default=24.0)
    period_type       = models.CharField(max_length=30)
    frequency         = models.IntegerField(null=False)
    payment_method    =  models.CharField(max_length=50)
    deposited_by      =  models.CharField(max_length=255)
    teller_assign_id  = models.BigIntegerField(null=True, blank=True)
    customer          =  models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='fixed_deposit_import_customer',null=True, blank=True)
    product           =  models.ForeignKey(SavingsProduct, on_delete=models.CASCADE, related_name='fixed_deposit_import_product',null=True, blank=True)
    debit_chart       = models.ForeignKey(OrganisationSubAccount, on_delete=models.CASCADE, related_name='bulk_fixed_deposit_debit_chart')
    initiation        =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_fixed_deposit_import_initiation')
    organisation_branch  =  models.ForeignKey(OrganisationBranch, on_delete=models.CASCADE, related_name='bulk_fixed_deposit_import_branch', null=True, blank=True)
    status      = models.CharField(max_length=50, choices=STATUSES)
    fd_status   = models.CharField(max_length=50, choices=STATUSES)
    record_date = models.DateTimeField(null=False, blank=False)
    msg         = models.TextField(null=True, blank=True)
    heading     = models.TextField(null=True, blank=True)
    comment     = models.TextField(null=True, blank=True)
    date_added  = models.DateTimeField(default = timezone.now)
    added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='fixed_deposit_initiation_added_by')
    amount_paid          =  models.FloatField(null=False, default=0.0)

    class Meta:
        db_table = 'public\".\"bulk_temp_fixed_deposits_imports'

class BulkTempSharesImports(models.Model):
    STATUSES = (
        ('Pending', 'Pending'),
        ('Failed', 'Failed'),
            ('Processed', 'Processed')
    )
    amount            =  models.FloatField()
    payment_method    =  models.CharField(max_length=50)
    cur_share_value   =  models.IntegerField(default=0)
    purchased_by      =  models.CharField(max_length=255,default="")
    teller_assign_id  = models.BigIntegerField(null=True, blank=True)
    customer          = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='share_customer', null=True, blank=True)
    debit_chart       = models.ForeignKey(OrganisationSubAccount, on_delete=models.CASCADE, related_name='shar_debit_chart')
    initiation        =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_share_import_initiation')
    organisation_branch  =  models.ForeignKey(OrganisationBranch, on_delete=models.CASCADE, related_name='bulk_share_import_branch', null=True, blank=True)
    status      = models.CharField(max_length=50, choices=STATUSES)
    record_date = models.DateTimeField(null=False, blank=False)
    msg         = models.TextField(null=True, blank=True)
    heading     = models.TextField(null=True, blank=True)
    comment     = models.TextField(null=True, blank=True)
    date_added  = models.DateTimeField(default = timezone.now)
    added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='shares_initiation_added_by')                       
    class Meta:
        db_table = 'public\".\"bulk_temp_shares_imports'

class BulkTempSmsSubscriptonImports(models.Model):
    STATUSES = (
        ('Pending', 'Pending'),
        ('Failed', 'Failed'),
            ('Processed', 'Processed')
    )
    status       = models.CharField(max_length=50, choices=STATUSES)
    sms_key      =  models.CharField(max_length=50)
    charge_to    =  models.CharField(max_length=50)
    name         = models.TextField(null=True, blank=True)
    msg          = models.TextField(null=True, blank=True)
    customer     =  models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='import_sms_sub_customer',null=True, blank=True)
    initiation   =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_sms_sub_import_initiation')
    organisation =  models.ForeignKey(Organisation, on_delete=models.CASCADE, related_name='bulk_import_organisation', null=True, blank=True)
    date_added   = models.DateTimeField(default = timezone.now)
    added_by     = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='sms_sub_initiation_added_by')                      
    class Meta:
        db_table = 'public\".\"bulk_temp_sms_sub_imports'

class BulkTempMMBankingSubscriptonImports(models.Model):
    STATUSES = (
        ('Pending', 'Pending'),
        ('Failed', 'Failed'),
        ('Processed', 'Processed')
    )
    status       = models.CharField(max_length=50, choices=STATUSES)
    telephone    =  models.CharField(max_length=50)
    pin          =  models.CharField(max_length=50)
    name         = models.TextField(null=True, blank=True)
    msg          = models.TextField(null=True, blank=True)
    customer     =  models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='import_mm_sub_customer',null=True, blank=True)
    initiation   =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_mm_sub_import_initiation')
    organisation =  models.ForeignKey(Organisation, on_delete=models.CASCADE, related_name='bulk_import_mm_sub_organisation', null=True, blank=True)
    date_added   = models.DateTimeField(default = timezone.now)
    added_by     = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='mm_sub_initiation_added_by')                     
    class Meta:
        db_table = 'public\".\"bulk_temp_mm_banking_sub_imports'


class BulkTempMemberNumberImport(models.Model):
    member_number =  models.CharField(max_length=555)
    new_member_number = models.CharField(max_length=555, null=True, blank=True)
    telephone = models.CharField(max_length=555, null=True, blank=True)
    physical_address = models.CharField(max_length=555, null=True, blank=True)
    region = models.CharField(max_length=555, null=True, blank=True)
    customer_id =  models.CharField(max_length=555)
    record_date = models.DateTimeField(default = timezone.now)
    member_initiation =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_import_member_number_initiation')
    member_initiation_added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='member_number_initiation_added_by')
    date_added = models.DateTimeField(default = timezone.now)
    status = models.CharField(max_length=55)
    
    class Meta:
        db_table = 'public\".\"bulk_temp_member_number_imports'

class BulkTempClientPhotosImports(models.Model):
    STATUSES = (
        ('Pending', 'Pending'),
        ('Failed', 'Failed'),
            ('Processed', 'Processed')
    )
    status          = models.CharField(max_length=50, choices=STATUSES)
    profile_url    = models.TextField(null=True, blank=True)
    siginature_url = models.TextField(null=True, blank=True)
    name         = models.TextField(null=True, blank=True)
    msg          = models.TextField(null=True, blank=True)
    customer     =  models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='import_client_photos_customer',null=True, blank=True)
    initiation   =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_client_photos_import_initiation')
    organisation =  models.ForeignKey(Organisation, on_delete=models.CASCADE, related_name='bulk_client_photos_import_organisation', null=True, blank=True)
    date_added   = models.DateTimeField(default = timezone.now)
    added_by     = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='client_photos_initiation_added_by')
    
    class Meta:
        db_table = 'public\".\"bulk_temp_client_photo_imports'

class BulkTempLoanSecurityImport(models.Model):
    name =  models.CharField(max_length=550)
    member_number =  models.CharField(max_length=555)
    savings_held =  models.IntegerField(default=0)
    shares_held =  models.IntegerField(default=0)
    loan_id =  models.IntegerField(default=0)
    date_withheld = models.DateTimeField(default = timezone.now)
    status = models.CharField(max_length=50, default='in-progress')
    initiation   =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_loan_security_import_initiation')

    class Meta:
        db_table = 'public\".\"bulk_temp_loan_security_imports'
        
class BulkTempCustomerFieldsImport(models.Model):
    STATUSES = (
        ('Pending', 'Pending'),
        ('Failed', 'Failed'),
        ('Processed', 'Processed')
    )
    status       = models.CharField(max_length=50, choices=STATUSES)
    name         = models.TextField(null=True, blank=True)
    value        = models.TextField(null=True, blank=True)
    msg          = models.TextField(null=True, blank=True)
    field        =  models.TextField(null=True, blank=True)
    customer     =  models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='import_customer_fields_customer',null=True, blank=True)
    initiation   =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_customer_fields_import_initiation')
    organisation =  models.ForeignKey(Organisation, on_delete=models.CASCADE, related_name='bulk_customer_fields_import_organisation', null=True, blank=True)
    date_added   = models.DateTimeField(default = timezone.now)
    added_by     = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='customer_fields_initiation_added_by')
    
    class Meta:
        db_table = 'public\".\"bulk_temp_customer_fields_import'


class BulkTempOverDraftsImport(models.Model):
    CHARGE_TYPE = (
        ('percentage', "Percentage"),
        ('flat', 'Flat'),
    )
    member_number      = models.CharField(max_length=50)
    auto_close         = models.BooleanField(default=False)
    auto_payments      = models.BooleanField(default=False)
    customer           = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='import_over_draft_customer')
    amount             = models.FloatField(default=0.0)
    over_draft_period  = models.IntegerField(default=0)
    charge_rate        = models.FloatField(null=False,default=0)
    charge_type        = models.CharField(max_length=100, choices=CHARGE_TYPE, default='flat')
    penalty_rate       = models.FloatField(null=False,default=0)
    penalty_type       = models.CharField(max_length=100, choices = CHARGE_TYPE, default='flat')
    over_draft_product = models.ForeignKey(OverDraftProducts, on_delete=models.CASCADE, related_name='import_over_draft_product', null=False, blank=False)
    principal_paid     = models.FloatField(default=0.0)
    interest_paid      = models.FloatField(default=0.0)
    penalty_paid       = models.FloatField(default=0.0)
    penalty_grace_period = models.IntegerField(null=False,default=0)
    withdraw_allowance_period  = models.IntegerField(null=False,default=0)
    penalty_interval           = models.IntegerField(null=False,default=24)
    saving_product     = models.ForeignKey(SavingsProduct, on_delete=models.CASCADE, related_name='import_over_draft_saving_product')
    record_date        = models.DateTimeField(default = timezone.now)
    over_draft_date    = models.DateTimeField(default = timezone.now)
    initiation = models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='over_draft_bulk_import_initiation')
    added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='over_draft_initiation_added_by')
    organisation_branch =  models.ForeignKey(OrganisationBranch, on_delete=models.CASCADE, related_name='bulk_import_over_draft_organisation_branch')
    date_added = models.DateTimeField(default = timezone.now)
    last_updated = models.DateTimeField(default = timezone.now)
    status = models.CharField(max_length=55)
    reference_id = models.CharField(max_length=55, null=True, blank=True)
    payment_frequency = models.IntegerField(default=1)
    payment_method    =  models.CharField(max_length=50)
    heading      = models.TextField(null=True, blank=True)
    comment      = models.TextField(null=True, blank=True)
    credit_chart = models.CharField(max_length=50)


    class Meta:
        db_table = 'public\".\"bulk_temp_over_draft_imports'


class BulkTempLicenseImport(models.Model):
    LICENSE_PERIOD_TYPE = (
        ('d', 'Days'),
        ('m', 'Months'),
        ('w', 'Weeks'),
        ('bw','Bi-Weeks'),
        ('q', 'Quarterly'),
        ('y', 'Years'),
        )
    LICENSE_PACKAGES = (
       ('full-package','Full Package'),
       ('half-package','Half Package'),
       ('multiple-branches','Mulltiple Branches'),
       ('single-branch-clients','Single Branch Clients'),
       ('system-user-group','System User Group'),
       ('full-package+pmt-tool','Full Package + PMT Tool')
    )
    CALCULATION_TYPES = (
       ('annual-flat','Annual Flat Fee'),
       ('active-members','Calculate By Active Members')
    )
    STATUSES = (
        ('active','Active'),
        ('inactive','Inactive'),
        
    )
    PAYMENT_OPTIONS = (
        ('e-payment', 'E Payment'),
        ('bank', 'Bank'),
        ('cash', 'Cash'),
    )

    organisation            = models.ForeignKey(Organisation,on_delete=models.CASCADE, related_name='license_sub_org',default=2)
    subcription_date        = models.DateTimeField(default = timezone.now)
    period_type             = models.CharField(max_length=255, choices=LICENSE_PERIOD_TYPE, default='d')
    package                 = models.CharField(max_length=255, choices=LICENSE_PACKAGES, default='full-package')
    calculation_types       = models.CharField(max_length=255, choices=CALCULATION_TYPES, default='annual-flat')
    grace_period            = models.IntegerField(blank=True,null=True)
    period                  = models.IntegerField(blank=True,null=True)
    amount                  = models.FloatField(null=False,default=0)
    date_added              = models.DateTimeField(default = timezone.now)
    last_updated            = models.DateTimeField(default = timezone.now)
    grace_period_type       = models.CharField(max_length=255, choices=LICENSE_PERIOD_TYPE, default='d')
    status                  = models.CharField(max_length=255, choices=STATUSES,default='active')
    license_added_by        = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='import_license_added_by')
    license_last_updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='import_license_last_updated_by',null=True, blank=True)
    initiation              = models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='license_bulk_import_initiation')
    heading                 = models.TextField(null=True, blank=True)
    comment                 = models.TextField(null=True, blank=True)
    payment_method          = models.CharField(max_length=255, choices=PAYMENT_OPTIONS, default='cash')
    selected_account        = models.CharField(max_length=255,blank=True,null=True)

    class Meta:
        db_table = 'public\".\"bulk_temp_license_imports'

class BulkTempNegativeSavingsImports(models.Model):
    STATUSES = (
        ('Pending', 'Pending'),
        ('Failed', 'Failed'),
            ('Processed', 'Processed')
    )
    amount            =  models.FloatField()
    payment_method    =  models.CharField(max_length=50)
    deposited_by      =  models.CharField(max_length=255)
    teller_assign_id  = models.BigIntegerField(null=True, blank=True)
    product           =  models.ForeignKey(SavingsProduct, on_delete=models.CASCADE, related_name='neg_import_product',null=True, blank=True)
    customer          =  models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='neg_import_customer',null=True, blank=True)
    initiation        =  models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='neg_bulk_deposit_import_initiation')
    organisation_branch  =  models.ForeignKey(OrganisationBranch, on_delete=models.CASCADE, related_name='neg_bulk_import_branch', null=True, blank=True)
    credit_chart = models.ForeignKey(OrganisationSubAccount, on_delete=models.CASCADE, related_name='neg_bulk_import_credit_chart', null=True, blank=True)
    status      = models.CharField(max_length=50, choices=STATUSES)
    record_date = models.DateTimeField(null=False, blank=False)
    msg         = models.TextField(null=True, blank=True)
    heading     = models.TextField(null=True, blank=True)
    comment     = models.TextField(null=True, blank=True)
    date_added  = models.DateTimeField(default = timezone.now)
    added_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='neg_saving_initiation_added_by')

    class Meta:
        db_table = 'public\".\"bulk_temp_negative_savings'


class BulkTempMemberEmailImport(models.Model):
    STATUSES = (
        ('Pending', 'Pending'),
        ('Failed', 'Failed'),
        ('Processed', 'Processed'),
    )
    status       = models.CharField(max_length=50, choices=STATUSES)
    member_number = models.CharField(max_length=155, null=True, blank=True)
    email        = models.EmailField(null=True, blank=True)
    msg          = models.TextField(null=True, blank=True)
    customer     = models.ForeignKey(Customer, on_delete=models.CASCADE, related_name='email_import_customer', null=True, blank=True)
    initiation   = models.ForeignKey(BulkImportInitiation, on_delete=models.CASCADE, related_name='bulk_member_email_import_initiation')
    organisation = models.ForeignKey(Organisation, on_delete=models.CASCADE, related_name='bulk_member_email_import_organisation', null=True, blank=True)
    date_added   = models.DateTimeField(default=timezone.now)
    added_by     = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='member_email_initiation_added_by')

    class Meta:
        db_table = 'public\".\"bulk_temp_member_email_import'
