2024-08-01 08:53:38 -03:00
|
|
|
import pandas as pd
|
|
|
|
import os
|
2024-09-27 11:08:13 -03:00
|
|
|
import PyLibrary.funciones_comunes as fc
|
2024-10-12 09:06:22 -03:00
|
|
|
from translation_config import TranslationConfig
|
2024-10-11 09:11:29 -03:00
|
|
|
from openpyxl import load_workbook
|
|
|
|
from openpyxl.styles import Font
|
|
|
|
from openpyxl.comments import Comment
|
2024-08-01 08:53:38 -03:00
|
|
|
|
2024-10-12 09:06:22 -03:00
|
|
|
# Definir el logger a nivel de módulo
|
|
|
|
logger = None
|
|
|
|
|
|
|
|
|
|
|
|
def update_from_master(config: TranslationConfig, archivo_to_update):
|
|
|
|
archivo_maestro = config.get_master_path()
|
2024-08-01 08:53:38 -03:00
|
|
|
if not os.path.exists(archivo_maestro):
|
|
|
|
print("El archivo maestro no existe.")
|
|
|
|
return
|
|
|
|
|
|
|
|
logger.info(" .... ")
|
|
|
|
logger.info(
|
2024-10-12 09:06:22 -03:00
|
|
|
f"Iniciando actualización en {archivo_to_update} desde el archivo maestro. Para {config.codigo_idioma_seleccionado}"
|
2024-08-01 08:53:38 -03:00
|
|
|
)
|
|
|
|
|
2024-10-08 11:58:04 -03:00
|
|
|
df_maestro = fc.read_dataframe_with_cleanup_retries(archivo_maestro)
|
|
|
|
df_to_update = fc.read_dataframe_with_cleanup_retries(archivo_to_update)
|
2024-08-01 08:53:38 -03:00
|
|
|
|
2024-10-12 09:06:22 -03:00
|
|
|
col_clave = config.codigo_columna_maestra
|
2024-08-01 08:53:38 -03:00
|
|
|
|
2024-10-11 09:11:29 -03:00
|
|
|
celdas_con_errores = {}
|
|
|
|
|
2024-10-12 09:06:22 -03:00
|
|
|
for index, fila in df_to_update.iterrows():
|
2024-10-08 11:58:04 -03:00
|
|
|
valor_original = fila[col_clave]
|
2024-10-12 09:06:22 -03:00
|
|
|
clave = fc.compactar_celda_clave(config.codigo_tipo_PLC, valor_original)
|
|
|
|
logger.info(f"Fila {index} : Clave: {clave}")
|
2024-10-08 11:58:04 -03:00
|
|
|
|
2024-08-01 08:53:38 -03:00
|
|
|
if not pd.isnull(clave) and clave in df_maestro[col_clave].values:
|
2024-10-12 09:06:22 -03:00
|
|
|
indice_maestro = df_maestro.index[df_maestro[col_clave] == clave].tolist()[
|
|
|
|
0
|
|
|
|
]
|
|
|
|
valor_traducido_compacto = df_maestro.loc[
|
|
|
|
indice_maestro, config.codigo_idioma_seleccionado
|
|
|
|
]
|
|
|
|
|
|
|
|
valor_traducido = fc.decompactar_celda_traducida(
|
|
|
|
config.codigo_tipo_PLC,
|
|
|
|
celda_original=valor_original,
|
|
|
|
celda_traducida=valor_traducido_compacto,
|
2024-08-01 08:53:38 -03:00
|
|
|
)
|
|
|
|
if (
|
|
|
|
not pd.isnull(valor_traducido)
|
2024-10-12 09:06:22 -03:00
|
|
|
and fila[config.codigo_idioma_seleccionado] != valor_traducido
|
2024-08-01 08:53:38 -03:00
|
|
|
):
|
2024-10-12 09:06:22 -03:00
|
|
|
okToSave, Error = fc.verificar_celda_traducida(
|
|
|
|
config.codigo_tipo_PLC, clave, valor_traducido_compacto
|
2024-08-01 08:53:38 -03:00
|
|
|
)
|
|
|
|
if okToSave:
|
2024-10-08 11:58:04 -03:00
|
|
|
logger.info("Actualizado.")
|
2024-10-12 09:06:22 -03:00
|
|
|
df_to_update.at[index, config.codigo_idioma_seleccionado] = (
|
|
|
|
valor_traducido
|
|
|
|
)
|
2024-08-01 08:53:38 -03:00
|
|
|
else:
|
2024-10-12 09:06:22 -03:00
|
|
|
df_to_update.at[index, config.codigo_idioma_seleccionado] = (
|
|
|
|
valor_original
|
2024-08-01 08:53:38 -03:00
|
|
|
)
|
2024-10-12 09:06:22 -03:00
|
|
|
logger.error(f"No actualizado porque: {Error}")
|
2024-10-11 09:11:29 -03:00
|
|
|
celdas_con_errores[indice_maestro] = Error
|
2024-08-01 08:53:38 -03:00
|
|
|
|
2024-08-01 12:57:04 -03:00
|
|
|
nombre, extension = os.path.splitext(archivo_to_update)
|
|
|
|
nuevo_nombre = f"{nombre}_import{extension}"
|
|
|
|
fc.save_dataframe_with_retries(df_to_update, output_path=nuevo_nombre)
|
2024-10-12 09:06:22 -03:00
|
|
|
|
|
|
|
marcar_celdas_con_errores(
|
|
|
|
archivo_maestro, celdas_con_errores, config.codigo_idioma_seleccionado
|
|
|
|
)
|
|
|
|
|
2024-08-01 08:53:38 -03:00
|
|
|
print(
|
|
|
|
f"Se han actualizado las filas en {archivo_to_update} desde el archivo maestro. "
|
2024-10-11 09:11:29 -03:00
|
|
|
f"Se han marcado {len(celdas_con_errores)} celdas con errores en el archivo maestro."
|
2024-08-01 08:53:38 -03:00
|
|
|
)
|
|
|
|
logger.info(
|
|
|
|
f"Se han actualizado las filas en {archivo_to_update} desde el archivo maestro. "
|
2024-10-11 09:11:29 -03:00
|
|
|
f"Se han marcado {len(celdas_con_errores)} celdas con errores en el archivo maestro."
|
2024-08-01 08:53:38 -03:00
|
|
|
)
|
|
|
|
logger.info(" .... ")
|
|
|
|
|
2024-10-12 09:06:22 -03:00
|
|
|
|
2024-10-11 09:11:29 -03:00
|
|
|
def marcar_celdas_con_errores(archivo_maestro, celdas_con_errores, target_lang_code):
|
|
|
|
workbook = load_workbook(archivo_maestro)
|
|
|
|
sheet = workbook.active
|
2024-10-12 09:06:22 -03:00
|
|
|
|
2024-10-11 09:11:29 -03:00
|
|
|
for col in range(1, sheet.max_column + 1):
|
|
|
|
if sheet.cell(row=1, column=col).value == target_lang_code:
|
|
|
|
target_col = col
|
|
|
|
break
|
|
|
|
else:
|
|
|
|
print(f"No se encontró la columna para el idioma {target_lang_code}")
|
|
|
|
return
|
|
|
|
|
|
|
|
for indice_maestro, mensaje_error in celdas_con_errores.items():
|
2024-10-12 09:06:22 -03:00
|
|
|
row = indice_maestro + 2
|
2024-10-11 09:11:29 -03:00
|
|
|
cell = sheet.cell(row=row, column=target_col)
|
2024-10-12 09:06:22 -03:00
|
|
|
cell.font = Font(color="FF0000")
|
|
|
|
|
2024-10-11 09:11:29 -03:00
|
|
|
comment = Comment(mensaje_error, "Sistema de Traducción")
|
|
|
|
cell.comment = comment
|
|
|
|
|
|
|
|
workbook.save(archivo_maestro)
|
2024-10-12 09:06:22 -03:00
|
|
|
print(
|
|
|
|
f"Se han marcado {len(celdas_con_errores)} celdas con errores en rojo en el archivo maestro {archivo_maestro}"
|
|
|
|
)
|
|
|
|
|
2024-10-11 09:11:29 -03:00
|
|
|
|
2024-10-12 09:06:22 -03:00
|
|
|
def run(config: TranslationConfig):
|
|
|
|
global logger
|
|
|
|
logger = fc.configurar_logger(config.work_dir)
|
2024-09-27 04:44:09 -03:00
|
|
|
archivo_to_update = fc.select_file("xlsx")
|
2024-08-01 08:53:38 -03:00
|
|
|
if archivo_to_update:
|
2024-10-12 09:06:22 -03:00
|
|
|
update_from_master(config, archivo_to_update)
|
|
|
|
|
2024-08-01 12:57:04 -03:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2024-10-12 09:06:22 -03:00
|
|
|
import menu_pasos_traduccion
|
|
|
|
|
|
|
|
menu_pasos_traduccion.main()
|