def un_trabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta, fecha_entrega_real, descripcion, retirado): t = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta, fecha_entrega_real, descripcion, retirado) t.id_contacto = self.rt.get_one(t) if t.id_trabajo == 0: return None else: return t
def nuevo_trabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta, fecha_entrega_real, descripcion, retirado): t = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta, fecha_entrega_real, descripcion, retirado) t.id_contacto = self.rt.store(t) if t.id_trabajo == 0: return None else: self.listatrabajo.append(t) return t
def nuevo_trabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta, descripcion): #Recibe los datos de un trabajo, crea un nuevo trabajo y lo agrega a la lista Trabajos. T = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta, None, descripcion,False) T.id_trabajo = self.RT.store(T) if T.id_trabajo == 0: print(T) return None else: self.TrabajoL.append(T) return T
def crear_trabajo(): post_values = request.values.to_dict() mi_trabajo = Trabajo(**post_values) try: mi_trabajo.save() db.commit() return 'Ok' except Exception as e: import ipdb ipdb.set_trace() return e, 500
def nuevo_trabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta, descripcion): "Recibe los datos de una trabajo, crea uno nuevo y lo agrega a la lista" t = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta, None, descripcion, False) t.id_trabajo = self.rt.store(t) if t.id_trabajo == 0: return None else: self.listaTrabajo.append(t) return t
def _obtener_trabajo_de_result(self, result, id_trabajo=None): '''Retorna un objeto Trabajo a partir del resultado de un SELECT''' # A partir del id_cliente, obtenemos el cliente correspondiente: rc = RepositorioClientes() cliente = rc.get_one(result[0]) if cliente == None: return None # A partir de la fecha en formato "2020-31-12", creamos un datetime: fecha_ingreso = datetime.date.fromisoformat(result[1]) #Hacemos lo mismo con las otras fechas, siempre que no sean nulas: if result[2] == None: fecha_entrega_propuesta = None else: fecha_entrega_propuesta = datetime.date.fromisoformat(result[2]) if result[3] == None: fecha_entrega_real = None else: fecha_entrega_real = datetime.date.fromisoformat(result[3]) # Guardamos la descripcion: descripcion = result[4] # Guardamos el valor booleano retirado: 0->False, 1->True retirado = result[5] == 1 if id_trabajo == None: id_trabajo = result[6] return Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta, fecha_entrega_real, descripcion, retirado, id_trabajo)
def edit_works_desc(self, id_cliente, new_entry_date, new_proposal_date, real_delivery_date, new_description, withdrawn, id_trabajo): '''Editar descripcion y fecha de ingreso''' nueva_fecha = datetime.strptime(new_entry_date, '%d-%m-%Y') nueva_fecha.strftime('%Y-%m-%d') fecha_ent_pro = datetime.strptime(new_proposal_date, '%d-%m-%Y') fecha_ent_pro.strftime('%Y-%m-%d') if real_delivery_date == 'None': real_delivery_date = '01-01-1981' fecha_ent_re = datetime.strptime(real_delivery_date, '%Y-%m-%d') fecha_ent_re.strftime('%Y-%m-%d') else: fecha_ent_re = datetime.strptime(real_delivery_date, '%Y-%m-%d') fecha_ent_re.strftime('%Y-%m-%d') parameters = Trabajo(id_cliente, nueva_fecha, fecha_ent_pro, fecha_ent_re, new_description, withdrawn, id_trabajo) a = self.rt.update(parameters) if a: self.edit_work_window.destroy() self.message['text'] = 'El trabajo sido editado correctamente' else: self.message['text'] = 'El trabajo no ha sido editado' self.get_works()
def nuevo_trabajo(self): obj_cliente = None while True: cliente = input("Ingrese el id del cliente: ") obj_cliente = self.rc.get_one(cliente) if obj_cliente != None: print(obj_cliente) break fecha_ingreso = datetime.date.today() while True: try: f = input("Ingrese la fecha propuesta (aaaa,mm,dd): ") fecha_propuesta = datetime.datetime.strptime(f, "%Y,%m,%d") except ValueError: print("Fecha no valida") continue break fecha_entrega_real = None descripcion = input("Ingrese la descripcion del trabajo: ") retirado = False nt = Trabajo(obj_cliente, fecha_ingreso, fecha_propuesta, fecha_entrega_real, descripcion, retirado, None) resultado = self.rt.store(nt) self.lista_Trabajo = self.rt.get_all() print("Trabajo guardado exitosamente. Con el id ", resultado)
def eliminar_trabajo(self): '''Eliminar un trabajo de la BD''' # Obtengo los datos actuales del objeto en cuestión description = self.tree3.item(self.tree3.selection())['values'][4] entry_date = self.tree3.item(self.tree3.selection())['values'][1] id_cliente = self.tree3.item(self.tree3.selection())['values'][0] proposal_delivery_date = self.tree3.item( self.tree3.selection())['values'][2] real_delivery_date = self.tree3.item( self.tree3.selection())['values'][3] withdrawn = self.tree3.item(self.tree3.selection())['values'][5] id_trabajo = self.tree3.item(self.tree3.selection())['text'] # Paso parametros al obj Trabajo parameters = Trabajo(id_cliente, entry_date, proposal_delivery_date, real_delivery_date, description, withdrawn, id_trabajo) a = self.rt.delete(parameters) # Códigos de éxito o error y retorno la lista de trabajos actualizados if a: self.message[ 'text'] = 'El trabajo {0} sido eliminado correctamente'.format( id_trabajo) else: self.message['text'] = 'El trabajo no ha sido eliminado' self.get_works()
def create_db_example(): nombre_alumnos = ['javier', 'gabriel', 'rodrigo'] nombre_trabajo = ['quimica', 'fisica', 'matematicas'] trabajo_dict = copy.deepcopy(consts.TRABAJO_DICT) trabajo_dict['id_alumno'] = random.randint(200, 500) trabajo_dict['nombre_alumno'] = random.choice(nombre_alumnos) trabajo_dict['nombre_trabajo'] = random.choice(nombre_trabajo) trabajo_dict['paginas_trabajo'] = 2 trabajo_dict['fecha'] = '2016-01-01' trabajo_dict['hora'] = 12 mi_trabajo = Trabajo(**trabajo_dict) try: mi_trabajo.save() db.commit() return 'Ok' except Exception as e: return e
def nuevo_trabajo(self, cliente, fecha_ingreso, fecha_entrega_propuesta, fecha_entrega_real, descripcion, retirado, id_trabajo=None): trabajo = Trabajo(cliente, fecha_ingreso, fecha_entrega_propuesta, fecha_entrega_real, descripcion, retirado, id_trabajo) trabajo.id_trabajo = self.repostrabajos.store(trabajo) if trabajo.id_trabajo == 0: return None else: self.lista.append(trabajo) return trabajo
def nuevo_trabajo( self, cliente, fecha_entrega_propuesta, descripcion, fecha_ingreso, ): t = Trabajo( cliente, fecha_entrega_propuesta, descripcion, fecha_ingreso, ) t.id_trabajo = self.rt.store(t) if t.id_trabajo == 0: return None else: self.lista.append(t) return t
def get_one(self, id_trabajo): rm = RepositorioMateria() trabajos_sql = "SELECT id, titulo, descripcion, fecha_publicada, \ fecha_entrega, archivo, id_materia, es_url FROM material \ WHERE id = ?;" self.cursor.execute(trabajos_sql, [id_trabajo]) f = self.cursor.fetchone() materia = rm.get_one(f[6]) trabajo = Trabajo(f[0], f[1],f[2],f[3], f[4], f[5], materia, f[7]) return trabajo
def get_trabajos_materia(self, materia): trabajos_sql = "SELECT id, titulo, descripcion, fecha_publicada, \ fecha_entrega, archivo \ FROM material WHERE id_materia = ?;" self.cursor.execute(trabajos_sql, [materia]) trabajos = [] for f in self.cursor.fetchall(): trabajos.append(Trabajo(f[0], f[1], f[2], f[3], f[4], f[5])) return trabajos
def get_all(self): rm = RepositorioMateria() trabajos_sql = "SELECT id, titulo, descripcion, fecha_publicada, \ fecha_entrega, archivo, id_materia, es_url FROM material \ order by id_materia, fecha_publicada;" self.cursor.execute(trabajos_sql) trabajos = [] for f in self.cursor.fetchall(): materia = rm.get_one(f[6]) trabajos.append(Trabajo(f[0], f[1],f[2],f[3], f[4], f[5], materia, f[7])) return trabajos
def get_trabajos_materia(self, materia): trabajos_sql = "SELECT id, titulo, descripcion, fecha_publicada, \ fecha_entrega, archivo, es_url \ FROM material WHERE id_materia = ? \ ORDER BY fecha_publicada desc;" self.cursor.execute(trabajos_sql, [materia]) trabajos = [] for f in self.cursor.fetchall(): url = (int(f[6]) == 1) trabajos.append( Trabajo(f[0], f[1], f[2], f[3], f[4], f[5], None, url)) return trabajos
def get_all_materia(self, materia): # Si me pasan un id_materia rm = RepositorioMateria() if type(materia) is not Materia: materia = rm.get_one(int(materia)) trabajos_sql = "SELECT id, titulo, descripcion, fecha_publicada, \ fecha_entrega, archivo, id_materia, es_url FROM material \ WHERE id_materia = ? order by fecha_publicada;" self.cursor.execute(trabajos_sql, [ materia.id ]) trabajos = [] for f in self.cursor.fetchall(): trabajos.append(Trabajo(f[0], f[1],f[2],f[3], f[4], f[5], materia, f[7])) return trabajos
def trabajo_finalizado(self): '''Cambiar el estado a finalizado, modificando su fecha de entrega real a hoy''' try: self.tree3.item(self.tree3.selection())['values'][0] except IndexError: self.message['text'] = 'Por favor, seleccione un registro' return # Obtengo la fecha de hoy hoy = date.today() hoy.strftime('%d, %m, %Y') # Obtengo los datos actuales del objeto en cuestión description = self.tree3.item(self.tree3.selection())['values'][4] entry_date = self.tree3.item(self.tree3.selection())['values'][1] id_cliente = self.tree3.item(self.tree3.selection())['values'][0] proposal_delivery_date = self.tree3.item( self.tree3.selection())['values'][2] #old_real_delivery_date = self.tree3.item(self.tree3.selection())['values'][3] withdrawn = self.tree3.item(self.tree3.selection())['values'][5] id_trabajo = self.tree3.item(self.tree3.selection())['text'] # Formateo las fechas nueva_fecha = datetime.strptime(entry_date, '%Y-%m-%d') nueva_fecha.strftime('%Y-%m-%d') if proposal_delivery_date == 'None': proposal_delivery_date = '2000-01-01' else: proposal_delivery_date = proposal_delivery_date fecha_ent_pro = datetime.strptime(proposal_delivery_date, '%Y-%m-%d') fecha_ent_pro.strftime('%Y-%m-%d') fecha_ent_pro = datetime.strptime(proposal_delivery_date, '%Y-%m-%d') fecha_ent_pro.strftime('%Y-%m-%d') # Paso parametros al obj Trabajo parameters = Trabajo(id_cliente, nueva_fecha, fecha_ent_pro, hoy, description, withdrawn, id_trabajo) a = self.rt.update(parameters) if a: self.message['text'] = 'El trabajo sido editado correctamente' else: self.message['text'] = 'El trabajo no ha sido editado' self.get_works()
def trabajo_entregado(self): '''Cambiar el estado a entregado''' try: self.tree3.item(self.tree3.selection())['values'][0] except IndexError: self.message['text'] = 'Por favor, seleccione un registro' return # Obtengo los datos actuales del objeto en cuestión description = self.tree3.item(self.tree3.selection())['values'][4] entry_date = self.tree3.item(self.tree3.selection())['values'][1] id_cliente = self.tree3.item(self.tree3.selection())['values'][0] proposal_delivery_date = self.tree3.item( self.tree3.selection())['values'][2] real_delivery_date = self.tree3.item( self.tree3.selection())['values'][3] #withdrawn = self.tree3.item(self.tree3.selection())['values'][5] id_trabajo = self.tree3.item(self.tree3.selection())['text'] # Formateo las fechas nueva_fecha = datetime.strptime(entry_date, '%Y-%m-%d') nueva_fecha.strftime('%Y-%m-%d') fecha_ent_pro = datetime.strptime(proposal_delivery_date, '%Y-%m-%d') fecha_ent_pro.strftime('%Y-%m-%d') fecha_ent_real = datetime.strptime(real_delivery_date, '%Y-%m-%d') fecha_ent_real.strftime('%Y-%m-%d') withdrawn = True # Paso parametros al obj Trabajo parameters = Trabajo(id_cliente, nueva_fecha, fecha_ent_pro, fecha_ent_real, description, withdrawn, id_trabajo) a = self.rt.update(parameters) if a: self.message[ 'text'] = 'El trabajo {0} sido entregado correctamente'.format( id_trabajo) else: self.message['text'] = 'El trabajo no ha sido editado' self.get_works()
def add_work(self): #si las validaciones son correctass if self.validations_work(): self.message['text'] = '' obj_cliente = None obj_cliente = self.rc.get_one(self.id_cliente_entry.get()) fe_entrada = datetime.strptime(self.entry_date.get(), '%d-%m-%Y') fe_entrada.strftime('%Y-%m-%d') fecha_ent_pro = '' # En caso de que la fecha propuesta esté en blanco, asignar None if fecha_ent_pro != '': fecha_ent_pro = datetime.strptime( self.proposal_delivery_date.get(), '%d-%m-%Y') fecha_ent_pro.strftime('%Y-%m-%d') else: fecha_ent_pro = None parameters = Trabajo(obj_cliente, fe_entrada, fecha_ent_pro, None, self.description.get(), False, None) a = self.rt.store(parameters) print(parameters, a) if a: self.message[ 'text'] = 'El trabajo del cliente {0} ha sido añadido correctamente'.format( self.id_cliente_entry.get()) self.get_works() self.id_cliente_entry.delete(0, END) self.entry_date.delete(0, END) self.proposal_delivery_date.delete(0, END) self.description.delete(0, END) else: self.message[ 'text'] = 'El trabajo del cliente no se ha sido añadido. Código de error: 0' print(fecha_ent_pro) else: self.message['text'] = 'Todos los campos son requeridos'
def create_trabajos(materia=None): rm = RepositorioMateria() if request.method == "GET": hoy = datetime.date.today() form = FlaskForm() materias = rm.get_all() return render_template("nuevo_trabajo.html", form=form, mensaje=None, trabajo=None, materias=materias, materia=materia, hoy=hoy, tipos=", ".join(ALLOWED_EXTENSIONS)) else: # Capturar los datos del request titulo = request.form["titulo"] descripcion = request.form["descripcion"] id_materia = request.form["materia"] # TODO: Las fechas tienen que ser "2020-04-30", revisar eso fecha_publicada = request.form["publicado"] if request.form.get("se_entrega"): fecha_entrega = request.form["entrega"] else: fecha_entrega = None es_url = request.form["opcion_archivo"] == "url" materia = rm.get_one(id_materia) # Manejo de archivos: # print("################### ARCHIVOS ##########################") # print(request.files.get("archivo_real").filename) if 'archivo_real' in request.files: archivo_real = request.files['archivo_real'] # FIXME: ¿Habría que advertir si eligen archivo pero no suben nada? # (ya está hecho por js) # if archivo_real.filename == '': if archivo_real and allowed_file(archivo_real.filename): filename = secure_filename(archivo_real.filename) archivo = filename try: archivo_real.save( os.path.join(app.config['UPLOAD_FOLDER'], filename)) except: #FIXME: Manejar esta excepción. TODO raise else: # FIXME: Manejar esta excepción raise else: archivo = request.form["archivo"] trabajo = Trabajo(None, titulo, descripcion, fecha_publicada, fecha_entrega, archivo, materia, es_url) #GUARDAR EL NUEVO TRABAJO rt = RepositorioTrabajo() id_trabajo = rt.create(trabajo) if id_trabajo: mensaje = "Trabajo/Material/Actividad creada correctamente" else: mensaje = "Error al crear el trabajo" #Redirigir a trabajos: return redirect(url_for('trabajos', mensaje=mensaje))
def update_trabajos(id_trabajo): rm = RepositorioMateria() rt = RepositorioTrabajo() trabajo_actual = rt.get_one(int(id_trabajo)) if request.method == "GET": if not trabajo_actual: return "Error: trabajo no encontrada. id_trabajo: " + str( id_trabajo) hoy = datetime.date.today() form = FlaskForm() materias = rm.get_all() return render_template("nuevo_trabajo.html", form=form, mensaje=None, trabajo=trabajo_actual, materias=materias, hoy=hoy) else: # Capturar los datos del request idt = request.form["id_trabajo"] titulo = request.form["titulo"] descripcion = request.form["descripcion"] id_materia = request.form["materia"] fecha_publicada = request.form["publicado"] if request.form.get("se_entrega"): fecha_entrega = request.form["entrega"] else: fecha_entrega = None es_url = request.form["opcion_archivo"] == "url" materia = rm.get_one(id_materia) # Manejo de archivos: if 'archivo_real' in request.files and \ request.form["archivo"] != trabajo_actual.archivo: archivo_real = request.files['archivo_real'] # FIXME: ¿Habría que advertir si eligen archivo pero no suben nada? # (ya está hecho por js) # if archivo_real.filename == '': if archivo_real and allowed_file(archivo_real.filename): filename = secure_filename(archivo_real.filename) archivo = filename try: archivo_real.save( os.path.join(app.config['UPLOAD_FOLDER'], filename)) except: #FIXME: Manejar esta excepción. TODO raise else: # FIXME: Manejar esta excepción raise else: archivo = request.form["archivo"] trabajo = Trabajo(idt, titulo, descripcion, fecha_publicada, fecha_entrega, archivo, materia, es_url) #HACER EL UPDATE resultado = rt.update(trabajo) if resultado: mensaje = "Datos del trabajo/actividad/material modificados" else: mensaje = "Error al modificar los datos del trabajo/material" #Redirigir a cursos: return redirect(url_for('trabajos', mensaje=mensaje))
def index(): trabajos = list(Trabajo.manager(db).all()) return render_template('listado.html', trabajos=trabajos)