def main():

    #    if not len(sys.argv) == 1:
    #        print ('usage: pce_grabar_detalles.py ')
    #        sys.exit(1)

    # Inicia contador de tiempo
    inicio = time.time()
    regUpdated = 0
    regRead = 0

    log2file("Inicio grabar detalles.")

    # Escribe el número de registros leidos
    nunContSinDet = (
        PceExpediente.select(PceExpediente.id_licitacion, PceExpediente.num_expediente, PceOrgano.descripcion)
        .where(PceExpediente.id_estado >> None)
        .count()
    )
    log2file("Hay " + str(nunContSinDet) + " contratos sin detalles.")

    # Lee de la BD contratos sin detalles
    contSinDet = (
        PceExpediente.select(PceExpediente.id_licitacion, PceExpediente.num_expediente, PceOrgano.descripcion)
        .where(PceExpediente.id_estado >> None)
        .join(PceOrgano)
        .naive()
    )

    # Para cada uno de ellos se leen los detalles y se graban en BD
    for contrato in contSinDet:
        try:
            detalles = detalleContrato(
                numExpediente=contrato.num_expediente, OrgContratacion=contrato.descripcion, driverType=2
            )

            regRead += 1

            nreg = grabarDetalleBD(contrato, detalles)
            regUpdated += nreg
            log2file("Procesado expediente  " + contrato.num_expediente + " id: " + str(contrato.id_licitacion))
        except:
            log2file("Error en expediente  " + contrato.num_expediente + " id: " + str(contrato.id_licitacion))
            var = traceback.format_exc()
            log2file("Error inesperado" + var)

    # Escribe el número de registros leidos
    log2file("Se han leido " + str(regRead) + " registros de la BD.")
    print("Se han leido ", str(regRead), " registros de la BD.")

    # Escribe el número de registros actualizados
    log2file("Se han actualizado " + str(regUpdated) + " registros de la BD.")

    # Escribe el tiempo tardado
    fin = time.time()
    tiempo_total = fin - inicio
    log2file("El proceso tardó :" + str(tiempo_total) + " s")
Example #2
0
    def grabarBD(self):
        # comprueba si existe el órgano. Si es así lee el Id, si no... lo crea
        try:
            idOrgano= PceOrgano.get(PceOrgano.descripcion==self.organo).id_organo
        except PceOrgano.DoesNotExist:
            organo = PceOrgano.create(descripcion = self.organo,
                                                      url = self.organoURL
                                                      )
            idOrgano= organo.id_organo

 # Se comprueba si existe ya una licitación con el id, si no se crea
        try:
            descLicitacion = PceExpediente.get(PceExpediente.id_licitacion ==self.id_licitacion).desc_expediente#
#            print("licitacion ",self.id_licitacion,"-",self.num_expediente ,"ya existe con descripcion: ",descLicitacion)
 #           print("La nueva descripcion seria: ",self.desc_expediente)
            return "Licitacion "+str(self.id_licitacion)+"-"+str(self.num_expediente) +" ya existe"
        except PceExpediente.DoesNotExist:
            expedienteBD= PceExpediente.create(desc_expediente = self.desc_expediente,
                                    num_expediente = self.num_expediente, 
                                    estado = self.estado,
                                    id_organo = idOrgano,
                                    importe_base = self.importe,
                                    tipo_contrato_1 = self.tiposContrato[0],
                                    tipo_contrato_2 = self.tiposContrato[1],
                                    id_ministerio = self.ministry,
                                    id_licitacion=self.id_licitacion
                                    )
#        nexp = expedienteBD.save()
        
        # recorre las fechas y las graba en la tabla de fechas
#		ATENCION, se leen fechas solo para las nuevas ---> MAL, tiene que haber nuevas fehcas!!!
#            for tipoFecha in self.Fecha.iterkeys():
            for tipoFecha in self.Fecha.keys():
                fechaBD = PceFecha.create(fecha = self.Fecha[tipoFecha],
                                    id_licitacion = self.id_licitacion,
                                    tipo_fecha = tipoFecha
                                    )
#            	print(self.id_licitacion,":",tipoFecha,"-", self.Fecha[tipoFecha])
        
#        return nexp
        return ""
def grabarDetalleBD(datos_contrato, detalles):

    # comprueba si existe el estado de licitación. Si es así lee el Id, si no... lo crea
    try:
        id_estado = PceEstado.get(PceEstado.descripcion == detalles.estadoLic).id_estado
    except PceEstado.DoesNotExist:
        estado = PceEstado.create(descripcion=detalles.estadoLic)
        id_estado = estado.id_estado

    # comprueba si existe el procedimiento de licitación. Si es así lee el Id, si no... lo crea
    try:
        id_tipo_procedimiento = PceTipoProcedimiento.get(
            PceTipoProcedimiento.descripcion == detalles.procedimiento
        ).id_tipo_procedimiento
    except PceTipoProcedimiento.DoesNotExist:
        procedimiento = PceTipoProcedimiento.create(descripcion=detalles.procedimiento)
        id_tipo_procedimiento = procedimiento.id_tipo_procedimiento

    # actualiza documentos
    for docs in detalles.Documento.keys():
        documento, created = PceDocumento.get_or_create(
            id_licitacion=datos_contrato.id_licitacion,
            tipo_documento=docs,
            defaults={"fecha": detalles.Documento[docs][0], "documento": detalles.Documento[docs][1]},
        )

    # actualiza registro
    q = PceExpediente.update(
        id_estado=id_estado,
        id_tipo_procedimiento=id_tipo_procedimiento,
        importe_adj=detalles.impadjudicacion,
        enlacelic=detalles.enlacelic,
        codigocpv=detalles.codigocpv,
        resultado=detalles.resultado,
        adjudicatario=detalles.adjudicatario,
        numlicitadores=detalles.numlicitadores,
    ).where(PceExpediente.id_licitacion == datos_contrato.id_licitacion)
    n = q.execute()

    return n