a
    0i                     @   s<   d dl mZmZ d dlmZmZmZmZmZm	Z	 dd Z
dS )    )jsonifyrequest)BOMExploderget_bom_datasearch_partsget_status_manualcalculate_total_costsget_total_cost_for_parentc                    s    j ddgddd } j ddgddd	 } j d
dgddd } j ddgddd } j ddgd fdd} j ddgd fdd}dS )u_   
    Registra las rutas para la funciones_BomPartIng directamente en la aplicación Flask.
    z:/SyC/GerenteSyC/UtilityMaterials/GSYCManufacBOMIng/explodePOST)methodsc               
   S   s   zRt j} | d}| d}|r$|s8tddddfW S t }|||}t|W S  ty } z(tddt| ddfW  Y d	}~S d	}~0 0 d	S )
zExplota una BOM multinivelpartNumrevisionFz!PartNum y Revision son requeridossuccesserror  Error interno:   N)r   jsongetr   r   explode_bom	Exceptionstr)datapart_numr   Zexploderresulte r   W/var/www/html/src/App/SupyCtrol_Module/GerenteSyC/UtilityMaterials/GSYCManufacBOMIng.pyr      s*    


z)funciones_BomPartIng.<locals>.explode_bomzG/SyC/GerenteSyC/UtilityMaterials/GSYCManufacBOMIng/get-bom/<process_id>GETc              
   S   s~   z8t | }d|v r*td|d ddfW S td|dW S  tyx } z(tddt| ddfW  Y d}~S d}~0 0 dS )	z"Obtiene datos de una BOM explodidar   Fr   r   T)r   r   r   N)r   r   r   r   )
process_idZbom_datar   r   r   r   get_bom)   s(    
z%funciones_BomPartIng.<locals>.get_bomz?/SyC/GerenteSyC/UtilityMaterials/GSYCManufacBOMIng/search-partsc               
   S   s   zFt jdd} t| dk r0tddddfW S t| }td|d	W S  ty } z(tdd
t| ddfW  Y d}~S d}~0 0 dS )z%Busca partes manufacturadas en el ERPq    Fu-   La búsqueda debe tener al menos 2 caracteresr   r   T)r   partsr   r   N)r   argsr   lenr   r   r   r   )queryr%   r   r   r   r   search_parts_endpoint@   s*    
z3funciones_BomPartIng.<locals>.search_parts_endpointz>/SyC/GerenteSyC/UtilityMaterials/GSYCManufacBOMIng/update-costc               
      s   zt    s"tddddfW S g d} t fdd| D sZtdd|  ddfW S t d	  d
  d d}|dst|dfW S t|W S  ty } z(tddt| ddfW  Y d }~S d }~0 0 d S )NFzDatos no proporcionadosr   r   )
newExtCost	processIdr   c                 3   s   | ]}| v V  qd S )Nr   ).0fieldr   r   r   	<genexpr>i       z<funciones_BomPartIng.<locals>.update_cost.<locals>.<genexpr>zFaltan campos requeridos: r*   r+   r   )Znew_ext_costr    r   r   Error inesperado: r   )r   get_jsonr   allr   r   r   r   )Zrequired_fieldsr   r   r   r.   r   update_cost_   s6    

z)funciones_BomPartIng.<locals>.update_costzO/SyC/GerenteSyC/UtilityMaterials/GSYCManufacBOMIng/calculate-costs/<process_id>c              
      s  z| rt | dkr&tddddfW S  jd|   t| }|dsp jd|d	  t|dfW S  jd
|  dt |d  d|d  d tdd|d |d | dW S  ty } z> jdt|  tddt| ddfW  Y d}~S d}~0 0 dS )z2Endpoint para calcular y actualizar costos totales$   Fu   ProcessID inválidor   r   u.   Iniciando cálculo de costos para process_id: r   zError calculando costos: r   z(
                Costos calculados para z+.
                Materiales actualizados: updatedMaterialsz(
                Costo total calculado: totalCalculatedCostz
            TzCostos calculados exitosamente)r   messager6   r7   r+   r1   zError interno del servidor: r   N)	r'   r   loggerinfor   r   r   r   r   )r    r   r   appr   r   calculate_costs   sF    



z-funciones_BomPartIng.<locals>.calculate_costszA/SyC/GerenteSyC/UtilityMaterials/GSYCManufacBOMIng/get-total-costc                     s   t jd} t jd}t jd}t| ||}|d rt jd}t jd}|r|d t|kr jd| d	|d   |r|d
 t|kr jd| d	|d
   t|S )u*   Endpoint con verificación de consistenciar+   r   r   r   ZexpectedMaterialsZexpectedOperationsZmaterialCountz$Diferencia en materiales: Esperados=z, Obtenidos=ZoperationCountz%Diferencia en operaciones: Esperados=)r   r&   r   r	   intr9   warningr   )r    r   r   r   Zexpected_materialsZexpected_operationsr;   r   r   get_total_cost   s    z,funciones_BomPartIng.<locals>.get_total_costN)route)r<   r   r!   r)   r4   r=   r@   r   r;   r   funciones_BomPartIng   s    



#(rB   N)flaskr   r   ZHConsultas_SQL.SupYCtrol.GerenteSyC.UtilityMaterials.GSYCManufacBOMIngSQLr   r   r   r   r   r	   rB   r   r   r   r   <module>   s    