56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
import os
|
|
|
|
from django.apps import apps as django_apps
|
|
from django.conf import settings
|
|
from django.core.management import call_command
|
|
from django.core.management.base import BaseCommand
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "Dump all relevant data to JSON files."
|
|
|
|
def handle(self, *args, **options):
|
|
|
|
folder_name = input("Enter the name of the folder to save JSON files: ").strip()
|
|
if not folder_name:
|
|
self.stderr.write(self.style.ERROR("Folder name cannot be empty."))
|
|
return
|
|
|
|
dump_dir = os.path.join(settings.BASE_DIR, folder_name)
|
|
os.makedirs(dump_dir, exist_ok=True)
|
|
|
|
data_files = [
|
|
("auth.User", "user_data.json"),
|
|
("employee.Employee", "employee_info_data.json"),
|
|
("base", "base_data.json"),
|
|
("employee.employeeworkinformation", "work_info_data.json"),
|
|
("employee.employeebankdetails", "bank_info_data.json"),
|
|
]
|
|
|
|
optional_apps = [
|
|
("attendance", "attendance_data.json"),
|
|
("leave", "leave_data.json"),
|
|
("asset", "asset_data.json"),
|
|
("recruitment", "recruitment_data.json"),
|
|
("onboarding", "onboarding_data.json"),
|
|
("offboarding", "offboarding_data.json"),
|
|
("pms", "pms_data.json"),
|
|
("payroll", "payroll_data.json"),
|
|
("payroll", "payroll_loanaccount_data.json"),
|
|
("project", "project_data.json"),
|
|
]
|
|
|
|
data_files += [
|
|
(app, file) for app, file in optional_apps if django_apps.is_installed(app)
|
|
]
|
|
|
|
for data in data_files:
|
|
output_path = os.path.join(dump_dir, data[1])
|
|
|
|
try:
|
|
with open(output_path, "w") as f:
|
|
call_command("dumpdata", data[0], stdout=f, indent=4)
|
|
self.stdout.write(self.style.SUCCESS(f"Dumped: {data[0]}"))
|
|
except Exception as e:
|
|
self.stderr.write(self.style.ERROR(f"Error dumping {data[0]}: {e}"))
|