o
    iNT                     @   sf  d dl mZmZmZmZ d dlZd dlZd dlmZ d dlZd dl	Z	ee
Zdddddejjd	d
ZdZdd Zdd Zdd Zdd Zeddd Zeddd Zejddgddd Zejddgdd d! Zejd"dgdd#d$ Zejd%dgdd&d' Zejd(dgdd)d* Zejd+dgdd,d- Zejd.dgdd/d0 Zejd1dgdd2d3 Zejd4d5gdd6d7 Zejd8dgdd9d: Z ejd;dgdd<d= Z!ejd>dgdd?d@ Z"e#dAdBdC Z$e#dDdEdF Z%e
dGkr1e	j&'esedHe i e(dI e(dJ e(dI e(dK e(dL e(dM e(dI ej)dNdOdPdQ dS dS )R    )Flaskrender_templaterequestjsonifyN)datetimezsrv636.hstgr.iou733221342_Migsistemasz
Admin123*/u733221342_ordenservicioutf8mb4
   )hostuserpassworddbcharsetcursorclassconnect_timeoutztemplates.jsonc                   C   s,   ddddddddddd	dd
ddgS )z!Retorna templates predeterminadoszServicio OKz.Servicio realizado exitosamente sin novedades.nombretexto
Resoluciona0  SE REALIZA LA ACTUALIZACION DE LA RESOLUCION DE FACTURACION ELECTRONICA LA CUAL SE HABIA VENCIDO POR CONSECUTIVOS, SE CONFIGURA LA NUEVA RESOLUCION SE EMPATA BIEN LOS CONSECUTIVOS, SE ASOCIA ESTA RESOLUCION EN LA DIAN A EDN Y EN LA PLATAFORMA, SE CONFIGURA CLAVE TECNICA Y SE TRANSMITE TODO LO PENDIENTE.z	CUFE Y QRzEL CLIENTE REPORTA QUE NO SALE CUFE Y QR DEBIDO A QUE EL SISTEMA NO SE ENCONTRABA ACTUALIZADO INGRESE REINICIO EL SISTEMA PARA QUE SE CARGUE LA ACTUALIZACION Y SE LE PIDE QUE INTENTE NUEVAMENTE PARA CONFIRMAR QUE LE SALGA CUFE Y QR.zNo ingresa Miga5  Se atiende novedad reportada por el comercio, se realiza consulta de cantidad de usuarios de licencia en sistema y remotos, se realiza configuracion de cantidades en la informacion de la licencia, se realizan pruebas con cliente confirmando acceso y funcionamiento con el sistema, queda operativo y funcional.	Migracionad  SE REALIZA LA MIGRACION DE TODO EL SISTEMA A SQL SERVER, SE PASA TODA LA INFORMACION, SE ACTIVA LA FACTURACION ELECTRONICA, EN LA PLATAFORMA Y EN EL SISTEMA, SE ASOCIA CLAVE TECNICA, SE INSTALA EL DRIVER DE LA IMPRESORA CON LAS MEDIDAS CORRECTAS, Y FINALMENTE SE HACEN PRUEBAS PARA VALIDAR QUE EL SISTEMA QUEDE FUNCIONANDO CORRECTAMENTE Y CON SU CUFE Y QR. r   r   r   %/var/www/html/CerrarOrdenesWeb/app.pyget_templates_predeterminados   s   r   c               
   C   s   z<t jtr7ttddd!} t| }t|tr%d|iW  d   W S |W  d   W S 1 s2w   Y  dt	 iW S  t
yZ } ztd|  dt	 iW  Y d}~S d}~ww )z'Carga todos los templates desde archivorutf-8encodinggeneralNzError cargando templates: )ospathexistsTEMPLATES_FILEopenjsonload
isinstancelistr   	Exceptionprint)fdataer   r   r   cargar_templates$   s   

"r-   c              
   C   s   z%t tddd}tj| |ddd W d   W dS 1 sw   Y  W dS  ty? } ztd	|  W Y d}~dS d}~ww )
zGuarda templates en archivowr   r   F   )ensure_asciiindentNTzError guardando templates: )r#   r"   r$   dumpr(   r)   )templates_datar*   r,   r   r   r   guardar_templates2   s   
r4   c                 C   s,   t  }| |v r||  S d|v r|d S t S )z*Obtiene templates de un tecnico especificor   )r-   r   )tecnicoall_templatesr   r   r   get_templates_por_tecnico<   s   r7   /c                   C      t dS )z$Pagina principal - Cierre de ordenesz
index.htmlr   r   r   r   r   indexI      r;   z/crear-tareac                   C   r9   )zPagina de crear tarea rapidazcrear-tarea-tecnico.htmlr:   r   r   r   r   crear_tarea_pageN   r<   r=   z/api/conectarPOST)methodsc               
   C   s   z,t jd
i t} |  }d}|| dd | D }|  |   td|dW S  tyN } zt	d|  tdt
|dW  Y d	}~S d	}~ww )z+Conecta a la BD y obtiene lista de tecnicosz
            SELECT DISTINCT nombre_trab 
            FROM tarea 
            WHERE estado = 0 AND verificacion = 0 
            AND nombre_trab != 'PENDIENTE' 
            AND nombre_trab != 'Mary'
            ORDER BY nombre_trab
        c                 S   s   g | ]}|d  qS )nombre_trabr   ).0rowr   r   r   
<listcomp>e   s    zconectar.<locals>.<listcomp>T)successtecnicoszError en conectar: FrD   errorNr   pymysqlconnect	DB_CONFIGcursorexecutefetchallcloser   r(   r)   str)connrL   sqlrE   r,   r   r   r   conectarU   s"   

rS   z/api/tareasc               
   C   s   z<t  } | d}|stdddW S tjd
i t}| }d}|||f |	 }|
  |
  td|dW S  ty^ } ztd|  tdt|dW  Y d	}~S d	}~ww )zObtiene tareas de un tecnicor5   FzTecnico no especificadorF   a5  
            SELECT 
                T.id_tarea,
                T.descripcion as tarea,
                T.fechaTarea as fechaCreacion,
                T.nombre_trab,
                T.id_empresa,
                T.pendiente,
                E.punto_ven,
                E.ciudad
            FROM tarea T
            JOIN empresa E ON E.id_empresa = T.id_empresa
            WHERE T.nombre_trab = %s 
            AND T.estado = 0
            AND T.verificacion = 0
            AND T.nombre_trab != 'Mary'
            ORDER BY T.fechaTarea DESC, T.hora DESC
        T)rD   tareaszError en obtener_tareas: Nr   )r   get_jsongetr   rI   rJ   rK   rL   rM   rN   rO   r(   r)   rP   )r+   r5   rQ   rL   rR   rT   r,   r   r   r   obtener_tareasu   s*   

rW   z/api/crear-tareac               
   C   sD  zt  } | d}| d}| d}| d}| dd}| d}| d}| d	d}t||||||gsAtd
ddW S tjdi t}	|	 }
t	
 d}d}|||||||||f	}|
|| |	 }|	  |
  |	  tdd|dW S  ty } ztd|  td
t|dW  Y d}~S d}~ww )zCrea una nueva tarear@   
id_empresa
tipo_ordendescripcion
tipo_tarea0fecha_tareahoravalor_ordenFDatos incompletosrF   %Y-%m-%d %H:%M:%SS  
            INSERT INTO tarea (
                descripcion, id_empresa, id_orden, fechaTarea, fechaFinal,
                estado, factura, verificacion, nombre_trab, numero, valor,
                hora, tipo_orden, valor_orden, observacion, fechaCreacion,
                pendiente, fecha_seguimiento, tipoTarea, inicioOrden,
                fechaInicioOrden, fechaFinOrden
            ) VALUES (
                %s, %s, NULL, %s, NULL,
                0, 'NO', 0, %s, '', 0,
                %s, %s, %s, '', %s,
                0, NULL, %s, 0,
                NULL, NULL
            )
        TzTarea creada exitosamente)rD   messageid_tareazError en crear_tarea: Nr   )r   rU   rV   allr   rI   rJ   rK   rL   r   nowstrftimerM   	insert_idcommitrO   r(   r)   rP   )r+   r@   rX   rY   rZ   r[   r]   r^   r_   rQ   rL   fecha_creacionrR   valoresrd   r,   r   r   r   crear_tarea_api   sD   







rl   z/api/crear-tareas-masivoc            
      C   sV  zt  } | dg }|stdddW S tjdi t}| }t	 
d}d}d}|D ]B}z'|d |d	 |d
 |d |d |d |d ||d f	}||| |d7 }W q. typ }	 ztd|	  W Y d}	~	q.d}	~	ww |  |  |  td| d|dW S  ty }	 ztd|	  tdt|	dW  Y d}	~	S d}	~	ww )z%Crea multiples tareas de forma masivarT   FzNo se proporcionaron tareasrF   ra   rb   r   rZ   rX   r]   r@   r^   rY   r_   r[      z Error creando tarea individual: NTz tareas creadas exitosamente)rD   rc   createdzError en crear_tareas_masivo: r   )r   rU   rV   r   rI   rJ   rK   rL   r   rf   rg   rM   r(   r)   ri   rO   rP   )
r+   rT   rQ   rL   rj   rR   created_counttareark   r,   r   r   r   crear_tareas_masivo   sT   
rq   z/api/asignar-tareasc            	   
   C   s   z[t  } | dg }|stdddW S tjdi t}| }t	 
d}ddgt| }d| d	}|||g|  |j}|  |  |  td
| d|dW S  ty} } ztd|  tdt|dW  Y d}~S d}~ww )z'Asigna multiples tareas de forma masiva
tareas_idsFzNo se seleccionaron tareasrF   ra   ,z%sz
            UPDATE tarea 
            SET pendiente = 2,
                fecha_seguimiento = %s
            WHERE id_tarea IN (zF)
            AND estado = 0
            AND verificacion = 0
        Tz tareas asignadas exitosamente)rD   rc   countzError en asignar_tareas: Nr   )r   rU   rV   r   rI   rJ   rK   rL   r   rf   rg   joinlenrM   rowcountri   rO   r(   r)   rP   )	r+   rr   rQ   rL   fecha_seguimientoplaceholdersrR   affected_rowsr,   r   r   r   asignar_tareas"  s6   	
r{   z/api/cerrar-ordenc                  C   s  zt  } | d}| d}| d}| d}| d}| dd}| dd	}tjdi t}| }	|	d
|f |	 }
|
sKt	dddW S |
d }d}t
 d}|
d }t
 d}d}||||||||d|d|dddd||f}|	|| | }d}|	||||||f |  |	  |  t	dd|dW S  ty } ztd|  t	dt|dW  Y d}~S d}~ww )zCierra una orden de serviciord   r5   hora_ini
hora_finalobservacionesestado
Finalizadotipo_servicioVirtualz
            SELECT T.*, E.punto_ven, E.ciudad 
            FROM tarea T 
            JOIN empresa E ON E.id_empresa = T.id_empresa 
            WHERE T.id_tarea = %s
        FzTarea no encontradarF   	punto_ven z%Y-%m-%drX   ra   z
            INSERT INTO `orden` VALUES (
                null, %s, %s, %s, %s, %s, %s, %s, %s, 
                %s, %s, %s, %s, %s, %s, %s, %s, %s, %s
            )
        a  
            UPDATE tarea 
            SET id_orden = %s, 
                estado = 1, 
                fechaFinal = %s, 
                nombre_trab = %s, 
                id_empresa = %s, 
                pendiente = 0 
            WHERE id_tarea = %s
        TzOrden cerrada exitosamente)rD   rc   id_ordenzError en cerrar_orden: Nr   )r   rU   rV   rI   rJ   rK   rL   rM   fetchoner   r   rf   rg   rh   ri   rO   r(   r)   rP   )r+   rd   r5   r|   r}   r~   r   r   rQ   rL   rp   nombre_clienteemail_clientefecha_actualnit_empfechacreacion
sql_insertrk   r   
sql_updater,   r   r   r   cerrar_ordenN  sX   






r   z/api/clientesc               
   C   s   z't jdi t} |  }d}|| | }|  |   td|dW S  tyI } zt	d|  tdt
|dW  Y d}~S d}~ww )	z!Obtiene lista de clientes activosz
            SELECT id_empresa, punto_ven, ciudad, observacion 
            FROM empresa 
            WHERE estado = 1
            ORDER BY punto_ven ASC
        T)rD   clienteszError en obtener_clientes: FrF   Nr   rH   )rQ   rL   rR   r   r,   r   r   r   obtener_clientes  s"   

r   z/api/tipos-servicioc               
   C   s   z.t jd
i t} |  }d}|| | }|  |   dd |D }td|dW S  tyP } zt	d|  tdt
|dW  Y d	}~S d	}~ww )z"Obtiene lista de tipos de serviciozh
            SELECT nombre, valor 
            FROM tipo_orden 
            ORDER BY nombre ASC
        c                 S   s   g | ]}|d  |d dqS )r   valor)r   r   r   )rA   tr   r   r   rC     s    z*obtener_tipos_servicio.<locals>.<listcomp>T)rD   tiposz!Error en obtener_tipos_servicio: FrF   Nr   rH   )rQ   rL   rR   r   tipos_formateadosr,   r   r   r   obtener_tipos_servicio  s$   

r   z/api/templatesGETc               
   C   sn   zt jdd} t| }td|| dW S  ty6 } ztd|  tdt|dW  Y d}~S d}~ww )	z(Obtiene lista de templates de un tecnicor5   r   T)rD   	templatesr5   zError en obtener_templates: FrF   N)r   argsrV   r7   r   r(   r)   rP   )r5   r   r,   r   r   r   obtener_templates  s   
r   z/api/templates/agregarc               
   C   s   zKt  } | d}| d}| dd}|r|s!tdddW S t }||vr,g ||< || ||d t|rDtd	|| d
W S tdddW S  tym } ztd|  tdt	|dW  Y d}~S d}~ww )z%Agrega un nuevo template a un tecnicor   r   r5   r   Fr`   rF   r   TrD   r   No se pudo guardarzError en agregar_template: N)
r   rU   rV   r   r-   appendr4   r(   r)   rP   )r+   r   r   r5   r6   r,   r   r   r   agregar_template  s,   


r   z/api/templates/editarc               
   C   s$  zot  } | d}| d}| d}| dd}|du s"|r"|s*tddd	W S t }||vr9tdd
d	W S d|  krGt|| k rhn n||d|| |< t|r`td|| dW S tddd	W S tddd	W S  ty } ztd|  tdt	|d	W  Y d}~S d}~ww )zEdita un template existenter;   r   r   r5   r   NFr`   rF   Tecnico no encontrador   r   Tr   r   Indice invalidozError en editar_template: )
r   rU   rV   r   r-   rv   r4   r(   r)   rP   )r+   r;   r   r   r5   r6   r,   r   r   r   editar_template
  s2   


 
r   z/api/templates/eliminarc               
   C   s  z_t  } | d}| dd}|du rtdddW S t }||vr+tdddW S d	|  kr9t|| k rXn n|| | t|rPtd
|| dW S tdddW S tdddW S  ty } zt	d|  tdt
|dW  Y d}~S d}~ww )zElimina un templater;   r5   r   NFzIndice no especificadorF   r   r   Tr   r   r   zError en eliminar_template: )r   rU   rV   r   r-   rv   popr4   r(   r)   rP   )r+   r;   r5   r6   r,   r   r   r   eliminar_template,  s.   
 
r     c                 C      t ddddfS )NFzRecurso no encontradorF   r   r   rG   r   r   r   	not_foundN     r     c                 C   r   )NFzError interno del servidorrF   r   r   r   r   r   r   internal_errorR  r   r   __main__r   zF======================================================================z0Sistema de Cierre de Ordenes - MIG Sistemas v1.5zServidor: http://localhost:5000zPresiona Ctrl+C para detenerz4Nuevo: Crear Tareas Rapidas + Plantillas por tecnicoTz0.0.0.0i  )debugr   port)*flaskr   r   r   r   rI   pymysql.cursorsr   r$   r   __name__appcursors
DictCursorrK   r"   r   r-   r4   r7   router;   r=   rS   rW   rl   rq   r{   r   r   r   r   r   r   r   errorhandlerr   r   r    r!   r)   runr   r   r   r   <module>   s    






.
<
@
+
N




!
!


