187 lines
5.8 KiB
Python
187 lines
5.8 KiB
Python
#!/usr/bin/env python
|
|
"""
|
|
Script de inicialización para el Sistema de Gestión de Documentos ARCH.
|
|
Crea la estructura inicial de directorios y archivos necesarios.
|
|
"""
|
|
|
|
import os
|
|
import json
|
|
import bcrypt
|
|
from datetime import datetime
|
|
import pytz
|
|
|
|
def main():
|
|
"""Función principal de inicialización."""
|
|
print("Inicializando Sistema de Gestión de Documentos ARCH...")
|
|
|
|
# Crear estructura de directorios
|
|
print("Creando estructura de directorios...")
|
|
create_directory_structure()
|
|
|
|
# Inicializar archivos JSON
|
|
print("Inicializando archivos de datos...")
|
|
initialize_json_files()
|
|
|
|
print("\nSistema inicializado correctamente!")
|
|
print("\nPuede iniciar la aplicación con el comando:")
|
|
print(" flask run")
|
|
print("\nCredenciales de acceso por defecto:")
|
|
print(" Usuario: admin")
|
|
print(" Contraseña: admin123")
|
|
print("\nNOTA: Cambie la contraseña después del primer inicio de sesión.")
|
|
|
|
def create_directory_structure():
|
|
"""Crear la estructura de directorios necesaria."""
|
|
# Directorios principales
|
|
dirs = [
|
|
'storage',
|
|
'storage/logs',
|
|
'storage/schemas',
|
|
'storage/users',
|
|
'storage/filetypes',
|
|
'storage/projects',
|
|
]
|
|
|
|
for directory in dirs:
|
|
os.makedirs(directory, exist_ok=True)
|
|
print(f" Creado: {directory}")
|
|
|
|
def initialize_json_files():
|
|
"""Inicializar archivos JSON con datos por defecto."""
|
|
# Índices
|
|
indices = {
|
|
"max_project_id": 0,
|
|
"max_document_id": 0
|
|
}
|
|
save_json('storage/indices.json', indices)
|
|
|
|
# Usuarios
|
|
admin_password = bcrypt.hashpw("admin123".encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
|
|
users = {
|
|
"admin": {
|
|
"nombre": "Administrador",
|
|
"username": "admin",
|
|
"email": "admin@ejemplo.com",
|
|
"password_hash": admin_password,
|
|
"nivel": 9999,
|
|
"idioma": "es",
|
|
"fecha_caducidad": None,
|
|
"empresa": "ARCH",
|
|
"estado": "activo",
|
|
"ultimo_acceso": datetime.now(pytz.UTC).isoformat()
|
|
}
|
|
}
|
|
save_json('storage/users/users.json', users)
|
|
|
|
# Tipos de archivo
|
|
filetypes = {
|
|
"pdf": {
|
|
"extension": "pdf",
|
|
"descripcion": "Documento PDF",
|
|
"mime_type": "application/pdf",
|
|
"tamano_maximo": 20971520 # 20MB
|
|
},
|
|
"txt": {
|
|
"extension": "txt",
|
|
"descripcion": "Documento de texto",
|
|
"mime_type": "text/plain",
|
|
"tamano_maximo": 5242880 # 5MB
|
|
},
|
|
"zip": {
|
|
"extension": "zip",
|
|
"descripcion": "Archivo comprimido",
|
|
"mime_type": "application/zip",
|
|
"tamano_maximo": 104857600 # 100MB
|
|
},
|
|
"docx": {
|
|
"extension": "docx",
|
|
"descripcion": "Documento Word",
|
|
"mime_type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
"tamano_maximo": 20971520 # 20MB
|
|
},
|
|
"xlsx": {
|
|
"extension": "xlsx",
|
|
"descripcion": "Hoja de cálculo Excel",
|
|
"mime_type": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
"tamano_maximo": 20971520 # 20MB
|
|
},
|
|
"dwg": {
|
|
"extension": "dwg",
|
|
"descripcion": "Dibujo AutoCAD",
|
|
"mime_type": "application/acad",
|
|
"tamano_maximo": 52428800 # 50MB
|
|
}
|
|
}
|
|
save_json('storage/filetypes/filetypes.json', filetypes)
|
|
|
|
# Esquemas
|
|
schemas = {
|
|
"ESQ001": {
|
|
"codigo": "ESQ001",
|
|
"descripcion": "Proyecto estándar",
|
|
"fecha_creacion": datetime.now(pytz.UTC).isoformat(),
|
|
"creado_por": "admin",
|
|
"documentos": [
|
|
{
|
|
"tipo": "pdf",
|
|
"nombre": "Manual de Usuario",
|
|
"nivel_ver": 0,
|
|
"nivel_editar": 5000
|
|
},
|
|
{
|
|
"tipo": "dwg",
|
|
"nombre": "Planos Técnicos",
|
|
"nivel_ver": 0,
|
|
"nivel_editar": 5000
|
|
},
|
|
{
|
|
"tipo": "zip",
|
|
"nombre": "Archivos Fuente",
|
|
"nivel_ver": 1000,
|
|
"nivel_editar": 5000
|
|
},
|
|
{
|
|
"tipo": "xlsx",
|
|
"nombre": "Datos y Cálculos",
|
|
"nivel_ver": 0,
|
|
"nivel_editar": 1000
|
|
}
|
|
]
|
|
},
|
|
"ESQ002": {
|
|
"codigo": "ESQ002",
|
|
"descripcion": "Documentación técnica",
|
|
"fecha_creacion": datetime.now(pytz.UTC).isoformat(),
|
|
"creado_por": "admin",
|
|
"documentos": [
|
|
{
|
|
"tipo": "pdf",
|
|
"nombre": "Especificaciones Técnicas",
|
|
"nivel_ver": 0,
|
|
"nivel_editar": 5000
|
|
},
|
|
{
|
|
"tipo": "pdf",
|
|
"nombre": "Manual de Mantenimiento",
|
|
"nivel_ver": 0,
|
|
"nivel_editar": 5000
|
|
},
|
|
{
|
|
"tipo": "pdf",
|
|
"nombre": "Certificaciones",
|
|
"nivel_ver": 0,
|
|
"nivel_editar": 9000
|
|
}
|
|
]
|
|
}
|
|
}
|
|
save_json('storage/schemas/schema.json', schemas)
|
|
|
|
def save_json(file_path, data):
|
|
"""Guardar datos en archivo JSON con formato."""
|
|
with open(file_path, 'w', encoding='utf-8') as f:
|
|
json.dump(data, f, ensure_ascii=False, indent=2)
|
|
print(f" Inicializado: {file_path}")
|
|
|
|
if __name__ == '__main__':
|
|
main() |