1481 lines
48 KiB
Python
1481 lines
48 KiB
Python
from datetime import datetime
|
|
from django.db import transaction
|
|
from django_ledger.io import roles
|
|
from django.core.mail import send_mail
|
|
from background_task import background
|
|
from django.utils.translation import gettext_lazy as _
|
|
from inventory.models import DealerSettings, Dealer
|
|
|
|
|
|
# @background
|
|
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(),
|
|
)
|
|
|
|
|
|
@background
|
|
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)
|
|
|
|
|
|
@background
|
|
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
|
|
|
|
|
|
@background
|
|
def send_email(from_, to_, subject, message):
|
|
subject = subject
|
|
message = message
|
|
from_email = from_
|
|
recipient_list = [to_]
|
|
send_mail(subject, message, from_email, recipient_list)
|
|
|
|
|
|
@background
|
|
def long_running_task(task_id, *args, **kwargs):
|
|
"""Example background task"""
|
|
print(f"Starting task {task_id} with args: {args}, kwargs: {kwargs}")
|
|
|
|
# Simulate work
|
|
for i in range(5):
|
|
print(f"Task {task_id} progress: {i + 1}/5")
|
|
|
|
result = f"Task {task_id} completed at {datetime.now()}"
|
|
print(result)
|
|
return result
|