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")
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