Spaces:
Runtime error
Runtime error
Download src/control.py from Prosync/reporte-uso-contratista: direct link, hf CLI and curl.
- Browser
- Download file 11.4 kB
-
https://huggingface.co/spaces/Prosync/reporte-uso-contratista/resolve/main/src/control.py
- Command line
-
hf download hf://spaces/Prosync/reporte-uso-contratista/src/control.py
-
curl -L -o control.py https://huggingface.co/spaces/Prosync/reporte-uso-contratista/resolve/main/src/control.py
11.4 kB
| def tabla_control_diario(semana): | |
| prod_s1, pcp_s1, pod_s1, cnc_avance_s1, cnc_pf_s1 = obtener_avance_pcp(f'NORDES_PC2506_W{semana}', semana) | |
| prod_s1_total = prod_s1.groupby('id_actividad')[['ganadas','gastadas']].sum().reset_index() | |
| prod_diaria_s1 = prod_s1.groupby('dia')[['ganadas','gastadas']].sum().reset_index() | |
| prod_diaria_s1.loc[prod_diaria_s1['ganadas']==0,'Reporta avance'] = 'No' | |
| prod_diaria_s1.loc[prod_diaria_s1['gastadas']==0,'Reporta HH gastadas'] = 'No' | |
| prod_diaria_s1.loc[prod_diaria_s1['ganadas']!=0,'Reporta avance'] = 'Si' | |
| prod_diaria_s1.loc[prod_diaria_s1['gastadas']!=0,'Reporta HH gastadas'] = 'Si' | |
| prod_diaria_s1.drop(columns=['ganadas','gastadas'],inplace=True) | |
| pcp_s1['lunes_pcp']=pcp_s1['lunes_pcp'].apply(lambda x: safe_decimal_conversion(x)) | |
| pcp_s1['martes_pcp']=pcp_s1['martes_pcp'].apply(lambda x: safe_decimal_conversion(x)) | |
| pcp_s1['miercoles_pcp']=pcp_s1['miercoles_pcp'].apply(lambda x: safe_decimal_conversion(x)) | |
| pcp_s1['jueves_pcp']=pcp_s1['jueves_pcp'].apply(lambda x: safe_decimal_conversion(x)) | |
| pcp_s1['viernes_pcp']=pcp_s1['viernes_pcp'].apply(lambda x: safe_decimal_conversion(x)) | |
| pcp_s1['sabado_pcp']=pcp_s1['sabado_pcp'].apply(lambda x: safe_decimal_conversion(x)) | |
| pcp_s1['domingo_pcp'] = pcp_s1['domingo_pcp'].apply(lambda x: safe_decimal_conversion(x)) | |
| # Diccionario con los días | |
| pcp_s1_total = {} | |
| dias = ["lunes_pcp", "martes_pcp", "miercoles_pcp", "jueves_pcp", | |
| "viernes_pcp", "sabado_pcp", "domingo_pcp"] | |
| for dia in dias: | |
| nombre_columna = dia.replace("_pcp", "").capitalize() | |
| pcp_s1_total[nombre_columna] = "Si" if pcp_s1[dia].sum() > 0 else "No" | |
| # Crear DataFrame y poner como índice el nombre de la métrica | |
| df_pcp = pd.DataFrame([pcp_s1_total], index=["Elabora Planificación Semanal"]) | |
| df_total = prod_diaria_s1.set_index('dia').T | |
| df_total.columns.name = None | |
| # orden que quieres | |
| orden_dias = ["Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo"] | |
| # si ya tienes el DataFrame creado: | |
| df_total = df_total[orden_dias] | |
| df_total = pd.concat([df_total,df_pcp]) | |
| pod_s1['lunes_pod']=pod_s1['lunes_pod'].apply(lambda x: safe_decimal_conversion(x)) | |
| pod_s1['martes_pod']=pod_s1['martes_pod'].apply(lambda x: safe_decimal_conversion(x)) | |
| pod_s1['miercoles_pod']=pod_s1['miercoles_pod'].apply(lambda x: safe_decimal_conversion(x)) | |
| pod_s1['jueves_pod']=pod_s1['jueves_pod'].apply(lambda x: safe_decimal_conversion(x)) | |
| pod_s1['viernes_pod']=pod_s1['viernes_pod'].apply(lambda x: safe_decimal_conversion(x)) | |
| pod_s1['sabado_pod']=pod_s1['sabado_pod'].apply(lambda x: safe_decimal_conversion(x)) | |
| pod_s1['domingo_pod'] = pod_s1['domingo_pod'].apply(lambda x: safe_decimal_conversion(x)) | |
| # Diccionario con los días | |
| pod_s1_total = {} | |
| dias = ["lunes_pod", "martes_pod", "miercoles_pod", "jueves_pod", | |
| "viernes_pod", "sabado_pod", "domingo_pod"] | |
| for dia in dias: | |
| nombre_columna = dia.replace("_pod", "").capitalize() | |
| pod_s1_total[nombre_columna] = "Si" if pod_s1[dia].sum() > 0 else "No" | |
| # Crear DataFrame y poner como índice el nombre de la métrica | |
| df_pod = pd.DataFrame([pod_s1_total], index=["Elabora POD"]) | |
| df_total = pd.concat([df_total,df_pod]) | |
| return df_total | |
| from decimal import Decimal, InvalidOperation | |
| import numpy as np | |
| import pandas as pd | |
| import boto3 | |
| from boto3.dynamodb.conditions import Key | |
| import os | |
| def safe_decimal_conversion(x): | |
| try: | |
| x_str = str(x).strip() | |
| if x_str == '': | |
| return Decimal(0) | |
| x_str = x_str.replace('.', '').replace(',', '.') | |
| return Decimal(x_str) | |
| except (InvalidOperation, ValueError): | |
| return Decimal(0) | |
| def obtener_avance_pcp(empresa_proyecto_semana, semana): | |
| dynamodb = boto3.resource('dynamodb', region_name='us-east-1', | |
| aws_access_key_id=os.getenv('ACCESS_KEY_US'), | |
| aws_secret_access_key=os.getenv('SECRET_KEY_US')) | |
| # Referencia a tu tabla de DynamoDB | |
| table = dynamodb.Table('corto-plazo') | |
| CNCS_AVANCE = [] | |
| CNCS_PF = [] | |
| # Realiza la consulta para obtener los datos más recientes | |
| try: | |
| response = table.query( | |
| KeyConditionExpression=Key('id_empresa_proyecto').eq(empresa_proyecto_semana), | |
| ScanIndexForward=False # Ordenar de forma descendente | |
| ) | |
| # Lista para almacenar todos los resultados | |
| resultados = {} | |
| resultados['dia'] = [] | |
| resultados['capataz'] = [] | |
| resultados['semana'] = [] | |
| resultados['gastadas'] = [] | |
| resultados['ganadas'] = [] | |
| resultados['rendimiento'] = [] | |
| resultados['id_actividad'] = [] | |
| resultados_pcp = [] | |
| resultados_pod = [] | |
| # Verifica si se encontraron elementos | |
| if 'Items' in response and len(response['Items']) > 0: | |
| # Iteramos sobre todos los elementos encontrados | |
| for item in response['Items']: | |
| id_actividad = item.get('id_actividad', 0) | |
| if id_actividad == 'A1620': | |
| continue | |
| capataz = item.get('rut_responsable_capataz', 0) | |
| rendimiento = item.get('rendimiento', 0) | |
| resultados['dia'].append('Lunes') | |
| resultados['ganadas'].append(item.get('lunes_re_q', 0)) | |
| resultados['gastadas'].append(item.get('lunes_rg_hh', 0)) | |
| resultados['rendimiento'].append(rendimiento) | |
| resultados['id_actividad'].append(id_actividad) | |
| resultados['semana'].append(semana) | |
| resultados['capataz'].append(capataz) | |
| resultados['dia'].append('Martes') | |
| resultados['ganadas'].append(item.get('martes_re_q', 0)) | |
| resultados['gastadas'].append(item.get('martes_rg_hh', 0)) | |
| resultados['rendimiento'].append(rendimiento) | |
| resultados['id_actividad'].append(id_actividad) | |
| resultados['semana'].append(semana) | |
| resultados['capataz'].append(capataz) | |
| resultados['dia'].append('Miercoles') | |
| resultados['ganadas'].append(item.get('miercoles_re_q', 0)) | |
| resultados['gastadas'].append(item.get('miercoles_rg_hh', 0)) | |
| resultados['rendimiento'].append(rendimiento) | |
| resultados['id_actividad'].append(id_actividad) | |
| resultados['semana'].append(semana) | |
| resultados['capataz'].append(capataz) | |
| resultados['dia'].append('Jueves') | |
| resultados['ganadas'].append(item.get('jueves_re_q', 0)) | |
| resultados['gastadas'].append(item.get('jueves_rg_hh', 0)) | |
| resultados['rendimiento'].append(rendimiento) | |
| resultados['id_actividad'].append(id_actividad) | |
| resultados['semana'].append(semana) | |
| resultados['capataz'].append(capataz) | |
| resultados['dia'].append('Viernes') | |
| resultados['ganadas'].append(item.get('viernes_re_q', 0)) | |
| resultados['gastadas'].append(item.get('viernes_rg_hh', 0)) | |
| resultados['rendimiento'].append(rendimiento) | |
| resultados['id_actividad'].append(id_actividad) | |
| resultados['semana'].append(semana) | |
| resultados['capataz'].append(capataz) | |
| resultados['dia'].append('Sabado') | |
| resultados['ganadas'].append(item.get('sabado_re_q', 0)) | |
| resultados['gastadas'].append(item.get('sabado_rg_hh', 0)) | |
| resultados['rendimiento'].append(rendimiento) | |
| resultados['id_actividad'].append(id_actividad) | |
| resultados['semana'].append(semana) | |
| resultados['capataz'].append(capataz) | |
| resultados['dia'].append('Domingo') | |
| resultados['ganadas'].append(item.get('domingo_re_q', 0)) | |
| resultados['gastadas'].append(item.get('domingo_rg_hh', 0)) | |
| resultados['rendimiento'].append(rendimiento) | |
| resultados['id_actividad'].append(id_actividad) | |
| resultados['semana'].append(semana) | |
| resultados['capataz'].append(capataz) | |
| result2 = { | |
| 'id_actividad': item.get('id_actividad', 0), | |
| 'lunes_pcp': item.get('lunes_pcp', 0), | |
| 'martes_pcp': item.get('martes_pcp', 0), | |
| 'miercoles_pcp': item.get('miercoles_pcp', 0), | |
| 'jueves_pcp': item.get('jueves_pcp', 0), | |
| 'viernes_pcp': item.get('viernes_pcp', 0), | |
| 'sabado_pcp': item.get('sabado_pcp', 0), | |
| 'domingo_pcp': item.get('domingo_pcp', 0), | |
| 'rendimiento': item.get('rendimiento', 0) | |
| } | |
| result3 = { | |
| 'id_actividad': item.get('id_actividad', 0), | |
| 'lunes_pod': item.get('lunes_pod', 0), | |
| 'martes_pod': item.get('martes_pod', 0), | |
| 'miercoles_pod': item.get('miercoles_pod', 0), | |
| 'jueves_pod': item.get('jueves_pod', 0), | |
| 'viernes_pod': item.get('viernes_pod', 0), | |
| 'sabado_pod': item.get('sabado_pod', 0), | |
| 'domingo_pod': item.get('domingo_pod', 0), | |
| 'rendimiento': item.get('rendimiento', 0) | |
| } | |
| if item.get('cnc_1_responsable'): | |
| CNCS_AVANCE.append(item.get('id_actividad')) | |
| if item.get('cnc_2_responsable'): | |
| CNCS_PF.append(item.get('id_actividad')) | |
| resultados_pcp.append(result2) | |
| resultados_pod.append(result3) | |
| df = pd.DataFrame(resultados) | |
| df.loc[(df['rendimiento']=='') | (df['rendimiento'].isna()) ,'rendimiento'] = '0' | |
| df.loc[(df['gastadas']=='') | (df['gastadas'].isna()) ,'gastadas'] = '0' | |
| df.loc[(df['ganadas']=='') | (df['ganadas'].isna()) ,'ganadas'] = '0' | |
| df['rendimiento'] = df['rendimiento'].apply(safe_decimal_conversion) | |
| df['gastadas'] = df['gastadas'].apply(safe_decimal_conversion) | |
| df['ganadas'] = df['ganadas'].apply(safe_decimal_conversion) | |
| df['ganadas'] = df['ganadas'].replace(0, np.nan)*df['rendimiento'].replace(0, np.nan) | |
| # Convertimos la lista de diccionarios en un DataFrame | |
| df.fillna(0, inplace=True) | |
| return df, pd.DataFrame(resultados_pcp), pd.DataFrame(resultados_pod), CNCS_AVANCE, CNCS_PF | |
| else: | |
| print("No se encontraron elementos para el id_empresa_proyecto dado.") | |
| return pd.DataFrame(),pd.DataFrame(), pd.DataFrame(), CNCS_AVANCE, CNCS_PF # En caso de error, devolvemos un DataFrame vacío | |
| except Exception as e: | |
| print(f"Error al consultar la tabla: {e}") | |
| return pd.DataFrame(), pd.DataFrame(), pd.DataFrame(), CNCS_AVANCE, CNCS_PF | |