def bod_formula(reactivo_id): check_only_bod() reactivo = Reactivo.query.get_or_404(reactivo_id) if reactivo.area != Area.Bod: return abort(403) if reactivo.tiene_formula: flash('Este reactivo ya tiene una formula asociada', 'info') return redirect( url_for('reactivos.bod_reactivo', reactivo_id=reactivo.id)) form = BodNewFormulaForm() if form.validate_on_submit(): formula = Formula(reactivo=reactivo) for materia in form.materias.data: ing = Ingrediente(ratio=0, materia=materia) formula.materias.append(ing) db.session.add(formula) db.session.commit() flash('Ingrese los ratios de las materias seleccionadas', 'info') return redirect( url_for('reactivos.bod_ingrediente', reactivo_id=reactivo.id)) return render_template('formula.html', form=form, legend='Menu Formulas', area='Bod')
def bod_delete_reactivo(reactivo_id): check_only_bod() reactivo = Reactivo.query.get_or_404(reactivo_id) if reactivo.area != Area.Bod: return abort(403) historiales = HistorialReactivos.query.filter_by( reactivo_id=reactivo_id).all() quimicos = Quimico.query.filter_by(reactivo_id=reactivo_id).all() formulas = Formula.query.filter_by(reactivo_id=reactivo_id).all() # Eliminar Tablas dependientes de reactivo for historial in historiales: q_historiales = HistorialQuimicos.query.filter_by( reactivo_id=historial.id).all() for q_historial in q_historiales: db.session.delete(q_historial) db.session.delete(historial) for quimico in quimicos: db.session.delete(quimico) for formula in formulas: Ingrediente.query.filter_by(formula_id=formula.id).delete() db.session.delete(formula) db.session.delete(reactivo) db.session.commit() flash('El reactivo se ha eliminado', 'success') return redirect(url_for('main.bod_home'))
def bod_add_reactivo(reactivo_id): check_only_bod() reactivo = Reactivo.query.get_or_404(reactivo_id) if reactivo.area != Area.Bod: return abort(403) form = AddReactivoForm() if form.validate_on_submit(): reactivo.cantidad += form.cantidad.data historial = HistorialReactivos(observacion=form.observacion.data, cantidad=form.cantidad.data, reactivo=reactivo, user=current_user, tipo='Entrada', area=Area.Bod) db.session.add(historial) db.session.commit() historial_quimico = HistorialQuimicos( tipo='Reactivo', historial_reactivo=historial, fecha_registro=historial.fecha_registro, area=Area.Bod) db.session.add(historial_quimico) db.session.commit() flash('Se ha añadido la entrada de reactivo', 'success') return redirect( url_for('reactivos.bod_reactivo', reactivo_id=reactivo.id)) return render_template('añadir_reactivo.html', title='Menu Reactivo', form=form, legend='Menu Reactivo', reactivo=reactivo, area='Bod')
def bod_ingrediente(reactivo_id): check_only_bod() reactivo = Reactivo.query.get_or_404(reactivo_id) if reactivo.area != Area.Bod: return abort(403) if reactivo.tiene_formula: flash('El reactivo ya tiene una formula ingresada', 'danger') return redirect( url_for('reactivos.bod_reactivo', reactivo_id=reactivo.id)) formula = reactivo.formula ingredientes = Ingrediente.query.filter_by(formula_id=formula.id).all() form = NewIngrediente() if request.method == 'POST': form = request.form i = 0 for i in (0, len(ingredientes) - 1): if not is_number(form['ratio_' + str(i)]): flash('Por favor ingrese un numero valido para los ratios', 'warning') return render_template('ingredientes.html', form=form, legend='Ingrese Ratio', ingredientes=ingredientes, len=len(ingredientes), area='Bod') else: if float(form['ratio_' + str(i)]) <= 0: flash( 'Por favor ingrese numeros positivos mayores a 0 para los ratios', 'warning') return render_template('ingredientes.html', form=form, legend='Ingrese Ratio', ingredientes=ingredientes, len=len(ingredientes), area='Bod') i = 0 for ingrediente in ingredientes: ingrediente.ratio = form['ratio_' + str(i)] i += 1 reactivo.tiene_formula = True db.session.commit() flash('Formula Creada', 'success') return redirect( url_for('reactivos.bod_reactivo', reactivo_id=reactivo.id)) return render_template('ingredientes.html', form=form, legend='Ingresa Ratio', ingredientes=ingredientes, len=len(ingredientes), area='Bod')
def bod_alerta_reactivo(reactivo_id): check_only_bod() reactivo = Reactivo.query.get_or_404(reactivo_id) if reactivo.area != Area.Bod: return abort(403) form = ModBajoStockForm() if form.validate_on_submit(): reactivo.bajo_stock = form.bajo_stock.data db.session.commit() flash('Actualizada la cantidad para la alerta de bajo stock', 'success') return redirect( url_for('reactivos.bod_reactivo', reactivo_id=reactivo.id)) return render_template('alerta_reactivo.html', form=form, legend='Modifica Alerta', area='Bod', reactivo=reactivo)
def bod_new_reactivo(): check_only_bod() form = ReactivoForm() if form.validate_on_submit(): reactivo = Reactivo(nombre=form.nombre.data, codigo=form.codigo.data, medida=form.medida.data, bajo_stock=form.bajo_stock.data, area=Area.Bod) db.session.add(reactivo) db.session.commit() quimico = Quimico(tipo='Reactivo', reactivo=reactivo, area=Area.Bod) db.session.add(quimico) db.session.commit() flash('El reactivo se ha creado exitosamente!', 'success') return redirect(url_for('main.bod_home')) return render_template('crear_reactivo.html', title='Nuevo Reactivo', form=form, legend='Nuevo Reactivo', area='Bod')
def bod_entrada_reactivo(reactivo_id): check_only_bod() reactivo = Reactivo.query.get_or_404(reactivo_id) if reactivo.area != Area.Bod: return abort(403) # print(reactivo.formula) if not reactivo.tiene_formula: flash( 'El reactivo no tiene una formula asociada, crea una para poder realizar produccion de reactivo', 'info') return redirect( url_for('reactivos.bod_formula', reactivo_id=reactivo.id)) formula = reactivo.formula ingredientes = Ingrediente.query.filter_by(formula_id=formula.id).all() for ingrediente in ingredientes: if ingrediente.ratio == 0: Ingrediente.query.filter_by(formula_id=formula.id).delete() db.session.delete(formula) db.session.commit() flash( 'El proceso de asignarle formula al reactivo fue detenido antes de finalizar. Para asignarle una formula por favor complete el proceso', 'warning') return redirect( url_for('reactivos.bod_formula', reactivo_id=reactivo.id)) form = ProdReactivoForm() if form.validate_on_submit(): ingredientes = Ingrediente.query.filter_by(formula_id=formula.id) flag = True for assoc in ingredientes: if (assoc.materia.cantidad - form.cantidad.data * assoc.ratio) < 0: flag = False break if flag: correlativo = BodCorr.query.first() if correlativo: correlativo.nro += 1 db.session.commit() else: new_correlativo = BodCorr() db.session.add(new_correlativo) db.session.commit() last = db.session.query(HistorialReactivos).filter( HistorialReactivos.area == Area.Bod).order_by( HistorialReactivos.id.desc()).first() año_actual = datetime.utcnow().strftime("%y") if last: print("EXISTE LAST") año_anterior = last.fecha_registro.strftime("%y") if año_anterior != año_actual: correlativo = BodCorr.query.first() print("LOS AÑOS SON DIFERENTES") if correlativo: correlativo.nro = 1 db.session.commit() else: new_correlativo = BodCorr() db.session.add(new_correlativo) db.session.commit() correlativo = BodCorr.query.first() nro_correlativo = f'{correlativo.nro:04}' nro_analisis = f'{form.nro_analisis.data:04}' lote = 'Q' + año_actual + nro_correlativo + nro_analisis for assoc in ingredientes: # print(assoc.materia.cantidad) # print("-") # print(assoc.ratio) # print(assoc.materia.cantidad - assoc.ratio) assoc.materia.cantidad -= (form.cantidad.data * assoc.ratio) historial = HistorialMaterias( observacion= f"Produccion de reactivo [{reactivo.id}, {reactivo.nombre}]", cantidad=form.cantidad.data * assoc.ratio, materia=assoc.materia, user=current_user, tipo='Produccion', area='Bod') # Quizas cambiar el tipo db.session.add(historial) db.session.commit() historial_quimico = HistorialQuimicos( tipo='Materia', historial_materia=historial, fecha_registro=historial.fecha_registro, area='Bod') db.session.add(historial_quimico) db.session.commit() reactivo.cantidad += form.cantidad.data historial = HistorialReactivos(observacion=form.observacion.data, cantidad=form.cantidad.data, reactivo=reactivo, user=current_user, tipo='Produccion', area='Bod', lote=lote) # Quizas cambiar el tipo db.session.add(historial) db.session.commit() historial_quimico = HistorialQuimicos( tipo='Reactivo', historial_reactivo=historial, fecha_registro=historial.fecha_registro, area='Bod') db.session.add(historial_quimico) db.session.commit() flash('Se ha producido con exito el reactivo', 'success') return redirect( url_for('reactivos.bod_reactivo', reactivo_id=reactivo.id)) else: flash('La cantidad ingresada supera al stock de las materias', 'danger') return redirect( url_for('reactivos.bod_entrada_reactivo', reactivo_id=reactivo.id)) return render_template('producir_reactivo.html', legend='Menu Produccion', form=form, reactivo=reactivo, area='Bod')