U
    i                     @   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k
r } z$tddt| ddf W Y S d	}~X Y nX 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   C:\Users\victor.barrera\Documents\proyectos\elepV3\Elep\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|kr*td|d ddfW S td|dW S  tk
rz } z$tddt| ddf W Y S d}~X Y nX 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k
r } z$tdd
t| ddf W Y S d}~X Y nX 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 dddg} t fdd	| D s\tdd
|  ddfW S t d  d  d d}|dst|dfW S t|W S  tk
r } z$tddt| ddf W Y S d }~X Y nX d S )NFzDatos no proporcionadosr   r   Z
newExtCost	processIdr   c                 3   s   | ]}| kV  qd S )Nr   ).0fieldr   r   r   	<genexpr>i   s     z<funciones_BomPartIng.<locals>.update_cost.<locals>.<genexpr>zFaltan campos requeridos: )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k
r } z: jdt|  tddt| ddf W Y S d}~X Y nX 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   messager4   r5   r*   r/   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	   intr7   warningr   )r    r   r   r   Zexpected_materialsZexpected_operationsr9   r   r   get_total_cost   s    z,funciones_BomPartIng.<locals>.get_total_costN)route)r:   r   r!   r)   r2   r;   r>   r   r9   r   funciones_BomPartIng   s    



#(r@   N)flaskr   r   ZHConsultas_SQL.SupYCtrol.GerenteSyC.UtilityMaterials.GSYCManufacBOMIngSQLr   r   r   r   r   r	   r@   r   r   r   r   <module>   s    