fosadiaria.py 4.82 KB
import datetime
from time import sleep
import os, subprocess, configuracion
from configuracion import *
import pandas as pd

date_format_cent = '%d/%m/%Y %H:%M'
hora_format_cent = '%H:%M'

class FosaDiaria():
    """Esta clase almacenara todos los datos de finalizacion de 
    una planilla de foza, se busca se baja el excel se abra
    y se guarda en ran los resultados"""
    
    def __init__(self) -> None:
        self.Cache = {}
        self.Archivo = "data/fosa.json"
        self.cabezaera = cabezaeraDescargas
        self.CarpetaDescarga = carpetaDescargas

    def BuscarDatosDominio(self,dominio,selenium,dia=False):
        if dia == False:
            now = datetime.datetime.now()
            dia = now.strftime("%d/%m/%Y")
        try:
            data1 = self.Cache[dia]
        except:
            self.Cache[dia] = {}
        try:
            data = self.Cache[dia][dominio]
        except:
            data = False
        if not data == False:
            return data["hora"]
        try:
            self.ActualizarDatosDominios(selenium,dia)
        except Exception as E:
            print(f"""Error al actualizar dominio {str(E)}""")
        
        return self.LimpiarData(dominio,dia)
    
    def LimpiarData(self,dominio,dia):
        """Por ahora solo lo usa para extraer hora el resto lo descartp"""
        try:
            data = self.Cache[dia][dominio]
            fin = data["hora"]
            del data
        except Exception as E:
            print("Error al limpiar datos ",E)    
            fin = datetime.datetime.now().strftime(hora_format_cent)
        return(fin)
    
    def ActualizarDatosDominios(self,selenium,dia):
        self.BajarExcel(selenium)
        archivo = self.BuscarExcelDescargado()
        df = pd.read_excel(archivo)
        #print(df)
        #print(df.to_dict())
        self.ProcesarDatos(df,dia)

    def ProcesarDatos(self,df,dia):
        data = df.to_dict()
        #print(data["domino"], type(data["domino"]))
        try:
            test = self.Cache[dia]
            #print(test)
        except:    
            self.Cache[dia] = {}
        for n in data["domino"].keys():
            if data["resultado"][n] in  ["No Inspeccionado","Anulado"]:
                continue
            #print("key", n)
            dominio = data["domino"][n]
            #print(dominio,"dominio")
            #print(type(n))
            self.Cache[dia][dominio] ={
                "dominio":dominio,
                "tipo":data["tipo"][n],
                "inicio":data["inicio"][n],
                "fin":data["fin"][n],
                "resultado":data["resultado"][n],
                "cuit":data["cuit"][n],
                "vence":data["vence"][n],
                "hora":self.CorreccionDeHora(data["fin"][n],dia)
            }
            n = n + 1 #arranco desde 0
        #print(self.Cache)

    def CorreccionDeHora(self,fin, dia):
        """Hora de finalizacion menos 10 minutos"""
        strdatetime = f"{dia} {fin}"
        delta = datetime.timedelta(minutes=configuracion.deltaminutos)
        tmp = datetime.datetime.strptime(strdatetime, date_format_cent)
        if configuracion.delataPositivoNegativo == "-":
            obj = tmp - delta
        else:
            obj = tmp + delta
        return obj.strftime(hora_format_cent)

    
    def BajarExcel(self,selenium):
        self.LimpiarCarpertaDescarga()
        selenium.get("https://rto.cent.gov.ar/rto/RTO/planillaDiaria")
        now = datetime.datetime.now()
        dia = now.strftime("%d")
        mes = now.strftime("%m")
        ano = now.strftime("%Y")
        self.LimpiarCarpertaDescarga()
        URL = f"""https://rto.cent.gov.ar/rto/report/planillaDiariaEXCEL/planillaDiariaEXCEL?codTaller={codigo_cent}&fechaConsulta={dia}%2F{mes}%2F{ano}&agruparPorLinea=false&format=excel&extension=xls"""
        selenium.get(URL)
        
        
    def BuscarExcelDescargado(self,tmp="/dev/shm/tmpscdecas_1.txt"):
        test = True
        n = 0
        while test:
            arc = self._BuscarExcelDescargado(tmp)
            n = n + 1
            if not arc == False:
                print(arc, n)
                test = False
            if n > 70:
                return " "
        return(arc) 
    
    def _BuscarExcelDescargado(self,tmp):
        rta = False
        os.system(grepfile)
        sleep(0.1)
        file1 = open(tmp, 'r')
        Lines = file1.readlines()
        for line in Lines:
            der = str(line).split(" ")
            archivo = f"""{self.CarpetaDescarga}{der[-1]}"""
            rta =  archivo.replace("\n","")
        file1.close()
        os.system(f"""rm {tmp}""")
        return rta

    def LimpiarCarpertaDescarga(self):
        try:
            os.system(f"""rm {self.CarpetaDescarga}{self.cabezaera}*""")
            sleep(0.1)
        except Exception as E:
            print(f"Error al intentar borrar planillas diarias anteriores: {str(E)}")