from django.db import transaction from django_ledger.io import roles from django.core.mail import send_mail from django.utils.translation import gettext_lazy as _ from inventory.models import DealerSettings, Dealer from django_q.tasks import async_task def create_settings(pk): instance = Dealer.objects.get(pk=pk) DealerSettings.objects.create( dealer=instance, invoice_cash_account=instance.entity.get_all_accounts() .filter(role=roles.ASSET_CA_CASH) .first(), invoice_prepaid_account=instance.entity.get_all_accounts() .filter(role=roles.ASSET_CA_RECEIVABLES) .first(), invoice_unearned_account=instance.entity.get_all_accounts() .filter(role=roles.LIABILITY_CL_DEFERRED_REVENUE) .first(), bill_cash_account=instance.entity.get_all_accounts() .filter(role=roles.ASSET_CA_CASH) .first(), bill_prepaid_account=instance.entity.get_all_accounts() .filter(role=roles.ASSET_CA_PREPAID) .first(), bill_unearned_account=instance.entity.get_all_accounts() .filter(role=roles.LIABILITY_CL_ACC_PAYABLE) .first(), ) def create_coa_accounts(pk): with transaction.atomic(): instance = Dealer.objects.select_for_update().get(pk=pk) entity = instance.entity coa = entity.get_default_coa() # accounts_data = [ # # Current Assets (must start with 1) # { # 'code': '1010', # 'name': 'Cash on Hand', # 'role': roles.ASSET_CA_CASH, # 'balance_type': roles.DEBIT, # 'locked': True, # }, # { # 'code': '1020', # 'name': 'Bank', # 'role': roles.ASSET_CA_CASH, # 'balance_type': roles.DEBIT, # 'locked': True, # }, # { # 'code': '1030', # 'name': 'Accounts Receivable', # 'role': roles.ASSET_CA_RECEIVABLES, # 'balance_type': roles.DEBIT, # 'locked': True # }, # { # 'code': '1040', # 'name': 'Inventory (Cars)', # 'role': roles.ASSET_CA_INVENTORY, # 'balance_type': roles.DEBIT, # 'locked': True # }, # { # 'code': '1045', # 'name': 'Spare Parts Inventory', # 'role': roles.ASSET_CA_INVENTORY, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '1050', # 'name': 'Employee Advances', # 'role': roles.ASSET_CA_RECEIVABLES, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '1060', # 'name': 'Prepaid Expenses', # 'role': roles.ASSET_CA_PREPAID, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '1070', # 'name': 'Notes Receivable', # 'role': roles.ASSET_LTI_NOTES_RECEIVABLE, # 'balance_type': roles.DEBIT, # 'locked': False # }, # # Fixed Assets (must also start with 1) # { # 'code': '1110', # 'name': 'Lands', # 'role': roles.ASSET_LTI_LAND, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '1111', # 'name': 'Buildings', # 'role': roles.ASSET_PPE_BUILDINGS, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '1112', # 'name': 'Company Vehicles', # 'role': roles.ASSET_PPE_EQUIPMENT, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '1113', # 'name': 'Equipment & Tools', # 'role': roles.ASSET_PPE_EQUIPMENT, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '1114', # 'name': 'Furniture & Fixtures', # 'role': roles.ASSET_PPE_EQUIPMENT, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '1115', # 'name': 'Other Fixed Assets', # 'role': roles.ASSET_PPE_EQUIPMENT, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '1120', # 'name': 'Long-term Investments', # 'role': roles.ASSET_LTI_SECURITIES, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '1130', # 'name': 'Intangible Assets', # 'role': roles.ASSET_INTANGIBLE_ASSETS, # 'balance_type': roles.DEBIT, # 'locked': False # }, # # Current Liabilities (must start with 2) # { # 'code': '2010', # 'name': 'Accounts Payable', # 'role': roles.LIABILITY_CL_ACC_PAYABLE, # 'balance_type': roles.CREDIT, # 'locked': True # }, # { # 'code': '2020', # 'name': 'Notes Payable', # 'role': roles.LIABILITY_CL_ST_NOTES_PAYABLE, # 'balance_type': roles.CREDIT, # 'locked': False # }, # { # 'code': '2030', # 'name': 'Short-term Loans', # 'role': roles.LIABILITY_CL_ST_NOTES_PAYABLE, # 'balance_type': roles.CREDIT, # 'locked': False # }, # { # 'code': '2040', # 'name': 'Employee Payables', # 'role': roles.LIABILITY_CL_WAGES_PAYABLE, # 'balance_type': roles.CREDIT, # 'locked': False # }, # { # 'code': '2050', # 'name': 'Accrued Expenses', # 'role': roles.LIABILITY_CL_OTHER, # 'balance_type': roles.CREDIT, # 'locked': False # }, # { # 'code': '2060', # 'name': 'Accrued Taxes', # 'role': roles.LIABILITY_CL_TAXES_PAYABLE, # 'balance_type': roles.CREDIT, # 'locked': False # }, # { # 'code': '2070', # 'name': 'Provisions', # 'role': roles.LIABILITY_CL_OTHER, # 'balance_type': roles.CREDIT, # 'locked': False # }, # # Long-term Liabilities (must also start with 2) # { # 'code': '2210', # 'name': 'Long-term Bank Loans', # 'role': roles.LIABILITY_LTL_NOTES_PAYABLE, # 'balance_type': roles.CREDIT, # 'locked': False # }, # { # 'code': '2220', # 'name': 'Lease Liabilities', # 'role': roles.LIABILITY_LTL_NOTES_PAYABLE, # 'balance_type': roles.CREDIT, # 'locked': False # }, # { # 'code': '2230', # 'name': 'Other Long-term Liabilities', # 'role': roles.LIABILITY_LTL_NOTES_PAYABLE, # 'balance_type': roles.CREDIT, # 'locked': False # }, # # Equity (must start with 3) # { # 'code': '3010', # 'name': 'Capital', # 'role': roles.EQUITY_CAPITAL, # 'balance_type': roles.CREDIT, # 'locked': True # }, # { # 'code': '3020', # 'name': 'Statutory Reserve', # 'role': roles.EQUITY_ADJUSTMENT, # 'balance_type': roles.CREDIT, # 'locked': False # }, # { # 'code': '3030', # 'name': 'Retained Earnings', # 'role': roles.EQUITY_ADJUSTMENT, # 'balance_type': roles.CREDIT, # 'locked': False # }, # { # 'code': '3040', # 'name': 'Profit & Loss for the Period', # 'role': roles.EQUITY_ADJUSTMENT, # 'balance_type': roles.CREDIT, # 'locked': False # }, # # Revenue (must start with 4) # { # 'code': '4010', # 'name': 'Car Sales', # 'role': roles.INCOME_OPERATIONAL, # 'balance_type': roles.CREDIT, # 'locked': True # }, # { # 'code': '4020', # 'name': 'After-Sales Services', # 'role': roles.INCOME_OPERATIONAL, # 'balance_type': roles.CREDIT, # 'locked': False # }, # { # 'code': '4030', # 'name': 'Car Rental Income', # 'role': roles.INCOME_PASSIVE, # 'balance_type': roles.CREDIT, # 'locked': False # }, # { # 'code': '4040', # 'name': 'Other Income', # 'role': roles.INCOME_OTHER, # 'balance_type': roles.CREDIT, # 'locked': False # }, # # Expenses (must start with 5 for COGS, 6 for others) # { # 'code': '5010', # 'name': 'Cost of Goods Sold', # 'role': roles.COGS, # 'balance_type': roles.DEBIT, # 'locked': True # }, # { # 'code': '5015', # 'name': 'Spare Parts Cost Consumed', # 'role': roles.COGS, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '6010', # 'name': 'Salaries & Wages', # 'role': roles.EXPENSE_OPERATIONAL, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '6020', # 'name': 'Rent', # 'role': roles.EXPENSE_OPERATIONAL, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '6030', # 'name': 'Utilities', # 'role': roles.EXPENSE_OPERATIONAL, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '6040', # 'name': 'Advertising & Marketing', # 'role': roles.EXPENSE_OPERATIONAL, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '6050', # 'name': 'Maintenance', # 'role': roles.EXPENSE_OPERATIONAL, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '6060', # 'name': 'Operating Expenses', # 'role': roles.EXPENSE_OPERATIONAL, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '6070', # 'name': 'Depreciation', # 'role': roles.EXPENSE_DEPRECIATION, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '6080', # 'name': 'Fees & Taxes', # 'role': roles.EXPENSE_OPERATIONAL, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '6090', # 'name': 'Bank Charges', # 'role': roles.EXPENSE_OPERATIONAL, # 'balance_type': roles.DEBIT, # 'locked': False # }, # { # 'code': '6100', # 'name': 'Other Expenses', # 'role': roles.EXPENSE_OTHER, # 'balance_type': roles.DEBIT, # 'locked': False # } # ] accounts_data = [ # Current Assets (must start with 1) { "code": "1010", "name": "Cash on Hand", "role": roles.ASSET_CA_CASH, "balance_type": roles.DEBIT, "locked": True, "default": True, # Default for ASSET_CA_CASH }, { "code": "1020", "name": "Bank", "role": roles.ASSET_CA_CASH, "balance_type": roles.DEBIT, "locked": True, "default": False, }, { "code": "1030", "name": "Accounts Receivable", "role": roles.ASSET_CA_RECEIVABLES, "balance_type": roles.DEBIT, "locked": True, "default": True, # Default for ASSET_CA_RECEIVABLES }, { "code": "1040", "name": "Inventory (Cars)", "role": roles.ASSET_CA_INVENTORY, "balance_type": roles.DEBIT, "locked": True, "default": True, # Default for ASSET_CA_INVENTORY }, { "code": "1045", "name": "Spare Parts Inventory", "role": roles.ASSET_CA_INVENTORY, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "1050", "name": "Employee Advances", "role": roles.ASSET_CA_RECEIVABLES, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "1060", "name": "Prepaid Expenses", "role": roles.ASSET_CA_PREPAID, "balance_type": roles.DEBIT, "locked": False, "default": True, # Default for ASSET_CA_PREPAID }, { "code": "1070", "name": "Notes Receivable", "role": roles.ASSET_LTI_NOTES_RECEIVABLE, "balance_type": roles.DEBIT, "locked": False, "default": True, # Default for ASSET_LTI_NOTES_RECEIVABLE }, # Fixed Assets (must also start with 1) { "code": "1110", "name": "Lands", "role": roles.ASSET_LTI_LAND, "balance_type": roles.DEBIT, "locked": False, "default": True, # Default for ASSET_LTI_LAND }, { "code": "1111", "name": "Buildings", "role": roles.ASSET_PPE_BUILDINGS, "balance_type": roles.DEBIT, "locked": False, "default": True, # Default for ASSET_PPE_BUILDINGS }, { "code": "1112", "name": "Company Vehicles", "role": roles.ASSET_PPE_EQUIPMENT, "balance_type": roles.DEBIT, "locked": False, "default": True, # Default for ASSET_PPE_EQUIPMENT }, { "code": "1113", "name": "Equipment & Tools", "role": roles.ASSET_PPE_EQUIPMENT, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "1114", "name": "Furniture & Fixtures", "role": roles.ASSET_PPE_EQUIPMENT, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "1115", "name": "Other Fixed Assets", "role": roles.ASSET_PPE_EQUIPMENT, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "1120", "name": "Long-term Investments", "role": roles.ASSET_LTI_SECURITIES, "balance_type": roles.DEBIT, "locked": False, "default": True, # Default for ASSET_LTI_SECURITIES }, { "code": "1130", "name": "Intangible Assets", "role": roles.ASSET_INTANGIBLE_ASSETS, "balance_type": roles.DEBIT, "locked": False, "default": True, # Default for ASSET_INTANGIBLE_ASSETS }, # Current Liabilities (must start with 2) { "code": "2010", "name": "Accounts Payable", "role": roles.LIABILITY_CL_ACC_PAYABLE, "balance_type": roles.CREDIT, "locked": True, "default": True, # Default for LIABILITY_CL_ACC_PAYABLE }, { "code": "2020", "name": "Notes Payable", "role": roles.LIABILITY_CL_ST_NOTES_PAYABLE, "balance_type": roles.CREDIT, "locked": False, "default": True, # Default for LIABILITY_CL_ST_NOTES_PAYABLE }, { "code": "2030", "name": "Short-term Loans", "role": roles.LIABILITY_CL_ST_NOTES_PAYABLE, "balance_type": roles.CREDIT, "locked": False, "default": False, }, { "code": "2040", "name": "Employee Payables", "role": roles.LIABILITY_CL_WAGES_PAYABLE, "balance_type": roles.CREDIT, "locked": False, "default": True, # Default for LIABILITY_CL_WAGES_PAYABLE }, { "code": "2050", "name": "Accrued Expenses", "role": roles.LIABILITY_CL_OTHER, "balance_type": roles.CREDIT, "locked": False, "default": True, # Default for LIABILITY_CL_OTHER }, { "code": "2060", "name": "Accrued Taxes", "role": roles.LIABILITY_CL_TAXES_PAYABLE, "balance_type": roles.CREDIT, "locked": False, "default": True, # Default for LIABILITY_CL_TAXES_PAYABLE }, { "code": "2070", "name": "Provisions", "role": roles.LIABILITY_CL_OTHER, "balance_type": roles.CREDIT, "locked": False, "default": False, }, # Long-term Liabilities (must also start with 2) { "code": "2210", "name": "Long-term Bank Loans", "role": roles.LIABILITY_LTL_NOTES_PAYABLE, "balance_type": roles.CREDIT, "locked": False, "default": True, # Default for LIABILITY_LTL_NOTES_PAYABLE }, { "code": "2220", "name": "Lease Liabilities", "role": roles.LIABILITY_LTL_NOTES_PAYABLE, "balance_type": roles.CREDIT, "locked": False, "default": False, }, { "code": "2230", "name": "Other Long-term Liabilities", "role": roles.LIABILITY_LTL_NOTES_PAYABLE, "balance_type": roles.CREDIT, "locked": False, "default": False, }, # Equity (must start with 3) { "code": "3010", "name": "Capital", "role": roles.EQUITY_CAPITAL, "balance_type": roles.CREDIT, "locked": True, "default": True, # Default for EQUITY_CAPITAL }, { "code": "3020", "name": "Statutory Reserve", "role": roles.EQUITY_ADJUSTMENT, "balance_type": roles.CREDIT, "locked": False, "default": True, # Default for EQUITY_ADJUSTMENT }, { "code": "3030", "name": "Retained Earnings", "role": roles.EQUITY_ADJUSTMENT, "balance_type": roles.CREDIT, "locked": False, "default": False, }, { "code": "3040", "name": "Profit & Loss for the Period", "role": roles.EQUITY_ADJUSTMENT, "balance_type": roles.CREDIT, "locked": False, "default": False, }, # Revenue (must start with 4) { "code": "4010", "name": "Car Sales", "role": roles.INCOME_OPERATIONAL, "balance_type": roles.CREDIT, "locked": True, "default": True, # Default for INCOME_OPERATIONAL }, { "code": "4020", "name": "After-Sales Services", "role": roles.INCOME_OPERATIONAL, "balance_type": roles.CREDIT, "locked": False, "default": False, }, { "code": "4030", "name": "Car Rental Income", "role": roles.INCOME_PASSIVE, "balance_type": roles.CREDIT, "locked": False, "default": True, # Default for INCOME_PASSIVE }, { "code": "4040", "name": "Other Income", "role": roles.INCOME_OTHER, "balance_type": roles.CREDIT, "locked": False, "default": True, # Default for INCOME_OTHER }, # Expenses (must start with 5 for COGS, 6 for others) { "code": "5010", "name": "Cost of Goods Sold", "role": roles.COGS, "balance_type": roles.DEBIT, "locked": True, "default": True, # Default for COGS }, { "code": "5015", "name": "Spare Parts Cost Consumed", "role": roles.COGS, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "6010", "name": "Salaries & Wages", "role": roles.EXPENSE_OPERATIONAL, "balance_type": roles.DEBIT, "locked": False, "default": True, # Default for EXPENSE_OPERATIONAL }, { "code": "6020", "name": "Rent", "role": roles.EXPENSE_OPERATIONAL, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "6030", "name": "Utilities", "role": roles.EXPENSE_OPERATIONAL, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "6040", "name": "Advertising & Marketing", "role": roles.EXPENSE_OPERATIONAL, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "6050", "name": "Maintenance", "role": roles.EXPENSE_OPERATIONAL, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "6060", "name": "Operating Expenses", "role": roles.EXPENSE_OPERATIONAL, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "6070", "name": "Depreciation", "role": roles.EXPENSE_DEPRECIATION, "balance_type": roles.DEBIT, "locked": False, "default": True, # Default for EXPENSE_DEPRECIATION }, { "code": "6080", "name": "Fees & Taxes", "role": roles.EXPENSE_OPERATIONAL, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "6090", "name": "Bank Charges", "role": roles.EXPENSE_OPERATIONAL, "balance_type": roles.DEBIT, "locked": False, "default": False, }, { "code": "6100", "name": "Other Expenses", "role": roles.EXPENSE_OTHER, "balance_type": roles.DEBIT, "locked": False, "default": True, # Default for EXPENSE_OTHER }, ] for account_data in accounts_data: try: account = entity.create_account( coa_model=coa, code=account_data["code"], name=_(account_data["name"]), role=_(account_data["role"]), balance_type=_(account_data["balance_type"]), active=True, ) account.role_default = account_data["default"] account.save() except Exception as e: print(e) def create_coa_accounts1(pk): with transaction.atomic(): instance = Dealer.objects.select_for_update().get(pk=pk) entity = instance.entity coa = entity.get_default_coa() # Cash Account asset_ca_cash = entity.create_account( coa_model=coa, code="1101", role=roles.ASSET_CA_CASH, name=_("Cash"), balance_type="debit", active=True, ) asset_ca_cash.role_default = True asset_ca_cash.save() # Accounts Receivable Account asset_ca_receivables = entity.create_account( coa_model=coa, code="1102", role=roles.ASSET_CA_RECEIVABLES, name=_("Accounts Receivable"), balance_type="debit", active=True, ) asset_ca_receivables.role_default = True asset_ca_receivables.save() # Inventory Account asset_ca_inventory = entity.create_account( coa_model=coa, code="1103", role=roles.ASSET_CA_INVENTORY, name=_("Inventory"), balance_type="debit", active=True, ) asset_ca_inventory.role_default = True asset_ca_inventory.save() # Prepaid Expenses Account asset_ca_prepaid = entity.create_account( coa_model=coa, code="1104", role=roles.ASSET_CA_PREPAID, name=_("Prepaid Expenses"), balance_type="debit", active=True, ) asset_ca_prepaid.role_default = True asset_ca_prepaid.save() # Employee Expenses Account asset_ca_prepaid_employee = entity.create_account( coa_model=coa, code="1105", role=roles.ASSET_CA_PREPAID, name=_("Employee Advance"), balance_type="debit", active=True, ) # VAT Payable Account liability_ltl_vat_receivable = entity.create_account( coa_model=coa, code="1106", role=roles.ASSET_CA_RECEIVABLES, name=_("VAT Receivable"), balance_type="debit", active=True, ) # Buildings Accumulated Depreciation Account asset_ppe_buildings_accum_depreciation = entity.create_account( coa_model=coa, code="1201", role=roles.ASSET_PPE_BUILDINGS_ACCUM_DEPRECIATION, name=_("Buildings - Accum. Depreciation"), balance_type="credit", active=True, ) asset_ppe_buildings_accum_depreciation.role_default = True asset_ppe_buildings_accum_depreciation.save() # intangible Account asset_lti_land_intangable = entity.create_account( coa_model=coa, code="1202", role=roles.ASSET_INTANGIBLE_ASSETS, name=_("Intangible Assets"), balance_type="debit", active=True, ) asset_lti_land_intangable.role_default = True asset_lti_land_intangable.save() # investment property Account asset_lti_land_investment = entity.create_account( coa_model=coa, code="1204", role=roles.ASSET_LTI_SECURITIES, name=_("Investments"), balance_type="debit", active=True, ) asset_lti_land_investment.role_default = True asset_lti_land_investment.save() # # Notes Receivable Account # asset_lti_notes_receivable = entity.create_account( # coa_model=coa, # code="1201", # role=roles.ASSET_LTI_NOTES_RECEIVABLE, # name=_("Notes Receivable"), # balance_type="debit", # active=True, # ) # asset_lti_notes_receivable.role_default = True # asset_lti_notes_receivable.save() # # Land Account # asset_lti_land = entity.create_account( # coa_model=coa, # code="1202", # role=roles.ASSET_LTI_LAND, # name=_("Land"), # balance_type="debit", # active=True, # ) # asset_lti_land.role_default = True # asset_lti_land.save() # Buildings Account asset_ppe_buildings = entity.create_account( coa_model=coa, code="1301", role=roles.ASSET_PPE_BUILDINGS, name=_("Buildings"), balance_type="debit", active=True, ) asset_ppe_buildings.role_default = True asset_ppe_buildings.save() # Accounts Payable Account liability_cl_acc_payable = entity.create_account( coa_model=coa, code="2101", role=roles.LIABILITY_CL_ACC_PAYABLE, name=_("Accounts Payable"), balance_type="credit", active=True, ) liability_cl_acc_payable.role_default = True liability_cl_acc_payable.save() # Deferred Revenue Account liability_cl_def_rev = entity.create_account( coa_model=coa, code="2103", role=roles.LIABILITY_CL_DEFERRED_REVENUE, name=_("Deferred Revenue"), balance_type="credit", active=True, ) liability_cl_def_rev.role_default = True liability_cl_def_rev.save() # Wages Payable Account liability_cl_wages_payable = entity.create_account( coa_model=coa, code="2102", role=roles.LIABILITY_CL_WAGES_PAYABLE, name=_("Wages Payable"), balance_type="credit", active=True, ) liability_cl_wages_payable.role_default = True liability_cl_wages_payable.save() # Long-Term Notes Payable Account liability_ltl_notes_payable = entity.create_account( coa_model=coa, code="2201", role=roles.LIABILITY_LTL_NOTES_PAYABLE, name=_("Long-Term Notes Payable"), balance_type="credit", active=True, ) liability_ltl_notes_payable.role_default = True liability_ltl_notes_payable.save() # VAT Payable Account liability_ltl_vat_payable = entity.create_account( coa_model=coa, code="2106", role=roles.LIABILITY_CL_OTHER, name=_("VAT Payable"), balance_type="credit", active=True, ) # taxes Payable Account liability_ltl_taxes_payable = entity.create_account( coa_model=coa, code="2107", role=roles.LIABILITY_CL_OTHER, name=_("Taxes Payable"), balance_type="credit", active=True, ) # social insurance Payable Account liability_ltl_social_insurance_payable = entity.create_account( coa_model=coa, code="2108", role=roles.LIABILITY_LTL_NOTES_PAYABLE, name=_("Social Insurance Payable"), balance_type="credit", active=True, ) # End of Service Benefits entity.create_account( coa_model=coa, code="2202", role=roles.LIABILITY_LTL_NOTES_PAYABLE, name=_("End of Service Benefits"), balance_type="credit", active=True, ) # Mortgage Payable Account liability_ltl_mortgage_payable = entity.create_account( coa_model=coa, code="2203", role=roles.LIABILITY_LTL_MORTGAGE_PAYABLE, name=_("Mortgage Payable"), balance_type="credit", active=True, ) liability_ltl_mortgage_payable.role_default = True liability_ltl_mortgage_payable.save() # Capital equity_capital = entity.create_account( coa_model=coa, code="3101", role=roles.EQUITY_CAPITAL, name=_("Registered Capital"), balance_type="credit", active=True, ) equity_capital.role_default = True equity_capital.save() entity.create_account( coa_model=coa, code="3102", role=roles.EQUITY_CAPITAL, name=_("Additional Paid-In Capital"), balance_type="credit", active=True, ) # Other Equity other_equity = entity.create_account( coa_model=coa, code="3201", role=roles.EQUITY_COMMON_STOCK, name=_("Opening Balances"), balance_type="credit", active=True, ) other_equity.role_default = True other_equity.save() # Reserves reserve = entity.create_account( coa_model=coa, code="3301", role=roles.EQUITY_ADJUSTMENT, name=_("Statutory Reserve"), balance_type="credit", active=True, ) reserve.role_default = True reserve.save() entity.create_account( coa_model=coa, code="3302", role=roles.EQUITY_ADJUSTMENT, name=_("Foreign Currency Translation Reserve"), balance_type="credit", active=True, ) # Retained Earnings Account equity_retained_earnings = entity.create_account( coa_model=coa, code="3401", role=roles.EQUITY_PREFERRED_STOCK, name=_("Operating Profits and Losses"), balance_type="credit", active=True, ) equity_retained_earnings.role_default = True equity_retained_earnings.save() equity_retained_earnings_losses = entity.create_account( coa_model=coa, code="3402", role=roles.EQUITY_PREFERRED_STOCK, name=_("Retained Earnings (or Losses)"), balance_type="credit", active=True, ) # Sales Revenue Account income_operational = entity.create_account( coa_model=coa, code="4101", role=roles.INCOME_OPERATIONAL, name=_("Sales Revenue"), balance_type="credit", active=True, ) income_operational.role_default = True income_operational.save() # Interest Income Account income_interest = entity.create_account( coa_model=coa, code="4102", role=roles.INCOME_INTEREST, name=_("Interest Income"), balance_type="credit", active=True, ) income_interest.role_default = True income_interest.save() # Uneared Income Account income_unearned = entity.create_account( coa_model=coa, code="4103", role=roles.INCOME_OTHER, name=_("Unearned Income"), balance_type="credit", active=True, ) # Operating Revenues entity.create_account( coa_model=coa, code="4104", role=roles.INCOME_OPERATIONAL, name=_("Sales/Service Revenue"), balance_type="credit", active=True, ) # Non-Operating Revenues entity.create_account( coa_model=coa, code="4201", role=roles.INCOME_OTHER, name=_("Non-Operating Revenues"), balance_type="credit", active=True, ) # Cost of Goods Sold (COGS) Account expense_cogs = entity.create_account( coa_model=coa, code="5101", role=roles.COGS, name=_("Cost of Goods Sold"), balance_type="debit", active=True, ) expense_cogs.role_default = True expense_cogs.save() # accrued Expenses Account expense_cogs = entity.create_account( coa_model=coa, code="6117", role=roles.EXPENSE_OPERATIONAL, name=_("Accrued Expenses"), balance_type="debit", active=True, ) # accrued salaries Account expense_cogs = entity.create_account( coa_model=coa, code="6118", role=roles.EXPENSE_OPERATIONAL, name=_("Accrued Salaries"), balance_type="debit", active=True, ) # Rent Expense Account expense_rent = entity.create_account( coa_model=coa, code="6102", role=roles.EXPENSE_OPERATIONAL, name=_("Rent Expense"), balance_type="debit", active=True, ) # expense_rent.role_default = True # expense_rent.save() # Salaries and Administrative Fees expense_salaries = entity.create_account( coa_model=coa, code="6103", role=roles.EXPENSE_OPERATIONAL, name=_("Salaries and Administrative Fees"), balance_type="debit", active=True, ) # Medical Insurance expense_medical_insurance = entity.create_account( coa_model=coa, code="6104", role=roles.EXPENSE_OPERATIONAL, name=_("Medical Insurance"), balance_type="debit", active=True, ) # Marketing and Advertising Expenses expense_marketing = entity.create_account( coa_model=coa, code="6105", role=roles.EXPENSE_OPERATIONAL, name=_("Marketing and Advertising Expenses"), balance_type="debit", active=True, ) # Commissions and Incentives expense_commissions = entity.create_account( coa_model=coa, code="6106", role=roles.EXPENSE_OPERATIONAL, name=_("Commissions and Incentives"), balance_type="debit", active=True, ) # Travel Tickets expense_travel = entity.create_account( coa_model=coa, code="6107", role=roles.EXPENSE_OPERATIONAL, name=_("Travel Tickets"), balance_type="debit", active=True, ) # Social Insurance expense_other = entity.create_account( coa_model=coa, code="6108", role=roles.EXPENSE_OPERATIONAL, name=_("Social Insurance"), balance_type="debit", active=True, ) # Government Fees expense_other = entity.create_account( coa_model=coa, code="6109", role=roles.EXPENSE_OPERATIONAL, name=_("Government Fees"), balance_type="debit", active=True, ) # Fees and Subscriptions expense_other = entity.create_account( coa_model=coa, code="6110", role=roles.EXPENSE_OPERATIONAL, name=_("Fees and Subscriptions"), balance_type="debit", active=True, ) # Office Services Expenses expense_other = entity.create_account( coa_model=coa, code="6111", role=roles.EXPENSE_OPERATIONAL, name=_("Office Services Expenses"), balance_type="debit", active=True, ) # Office Supplies and Printing expense_other = entity.create_account( coa_model=coa, code="6112", role=roles.EXPENSE_OPERATIONAL, name=_("Office Supplies and Printing"), balance_type="debit", active=True, ) # Hospitality Expenses expense_other = entity.create_account( coa_model=coa, code="6113", role=roles.EXPENSE_OPERATIONAL, name=_("Hospitality Expenses"), balance_type="debit", active=True, ) # Bank Commissions expense_other = entity.create_account( coa_model=coa, code="6114", role=roles.EXPENSE_OPERATIONAL, name=_("Bank Commissions"), balance_type="debit", active=True, ) # Other Expenses expense_other = entity.create_account( coa_model=coa, code="6115", role=roles.EXPENSE_OPERATIONAL, name=_("Other Expenses"), balance_type="debit", active=True, ) # Transportation Expenses expense_other = entity.create_account( coa_model=coa, code="6116", role=roles.EXPENSE_OPERATIONAL, name=_("Transportation Expenses"), balance_type="debit", active=True, ) # 5.1 Direct Costs entity.create_account( coa_model=coa, code="6201", role=roles.EXPENSE_OPERATIONAL, name=_("Cost of Goods Sold"), balance_type="debit", active=True, ) entity.create_account( coa_model=coa, code="6202", role=roles.EXPENSE_OPERATIONAL, name=_("Salaries and Wages"), balance_type="debit", active=True, ) entity.create_account( coa_model=coa, code="6203", role=roles.EXPENSE_OPERATIONAL, name=_("Sales Commissions"), balance_type="debit", active=True, ) entity.create_account( coa_model=coa, code="6204", role=roles.EXPENSE_OPERATIONAL, name=_("Shipping and Customs Clearance"), balance_type="debit", active=True, ) # 5.3 Non-Operating Expenses entity.create_account( coa_model=coa, code="6301", role=roles.EXPENSE_OTHER, name=_("Zakat"), balance_type="debit", active=True, ) entity.create_account( coa_model=coa, code="6302", role=roles.EXPENSE_OTHER, name=_("Taxes"), balance_type="debit", active=True, ) entity.create_account( coa_model=coa, code="6303", role=roles.EXPENSE_OTHER, name=_("Foreign Currency Translation"), balance_type="debit", active=True, ) entity.create_account( coa_model=coa, code="6304", role=roles.EXPENSE_OTHER, name=_("Interest Expenses"), balance_type="debit", active=True, ) # create_settings(instance.pk) # @background # def create_groups(instance): # group_names = ["Inventory", "Accountant", "Sales"] # for group_name in group_names: # group, _ = Group.objects.get_or_create(name=f"{instance.pk}_{group_name}") # group_manager,_ = CustomGroup.objects.get_or_create(name=group_name, dealer=instance, group=group) # group_manager.set_default_permissions() # instance.user.groups.add(group) # @background def create_accounts_for_make(dealer, makes): entity = dealer.entity coa = entity.get_default_coa() name = ["Inventory", "Revenue", "Cogs"] role = [roles.ASSET_CA_INVENTORY, roles.ASSET_CA_RECEIVABLES, roles.COGS] balance_type = ["debit", "credit", "debit"] for name, role, balance_type in zip(name, role, balance_type): create_make_accounts(entity, coa, makes, name, role, balance_type) def create_make_accounts(entity, coa, makes, name, role, balance_type): for make in makes: last_account = ( entity.get_all_accounts().filter(role=role).order_by("-created").first() ) if len(last_account.code) == 4: code = f"{int(last_account.code)}{1:03d}" elif len(last_account.code) > 4: code = f"{int(last_account.code) + 1}" acc = ( entity.get_all_accounts() .filter( name=f"{name}:{make.name}", role=role, coa_model=coa, balance_type=balance_type, active=True, ) .first() ) if not acc: acc = entity.create_account( name=f"{name}:{make.name}", code=code, role=role, coa_model=coa, balance_type=balance_type, active=True, ) return acc def send_email(from_, to_, subject, message): subject = subject message = message from_email = from_ recipient_list = [to_] async_task(send_mail,subject, message, from_email, recipient_list) # @background def long_running_task(duration): """Example background task""" print("Task completed") return True