def entrada_general_add(request, vale_id): context = {} obj = get_object_or_404(ValeAlmacenGeneral, pk=vale_id) context['vale'] = obj if request.method == 'POST': profile_asociado = return_profile(request.user.username) movimiento_instance = MovimientoGeneral( vale=obj, tipo_movimiento=obj.tipo_movimiento, fecha_movimiento=obj.fecha_vale, origen=obj.persona_asociada, creador=profile_asociado) form = MovimientoEntradaGeneralForm( request.POST, instance=movimiento_instance) # MovimientoGeneral if form.is_valid(): mov = form.save() messages.add_message( request, messages.SUCCESS, 'Movimiento de entrada insertado: {}'.format(mov.id)) return HttpResponseRedirect( reverse('entrada_general_add', args=[obj.id])) else: messages.add_message(request, messages.ERROR, 'Revisa el formulario') else: form = MovimientoEntradaGeneralForm() context["form"] = form return render(request, 'entrada_general_add.html', context)
def entrada_general(request, tipo_movimiento="ENTRADA"): context = {} hoy = d_utils_now() fecha_hoy = hoy.strftime("%d-%m-%Y") tm = TipoMovimiento.objects.get(nombre=tipo_movimiento) profile_asociado = return_profile(request.user.username) initial_data = { 'tipo_movimiento': tm, 'fecha_vale': fecha_hoy, 'creador_vale': profile_asociado } if request.method == 'POST': vale_instance = ValeAlmacenGeneral(tipo_movimiento=tm, creador_vale=profile_asociado, vale_llantas=False) form = EntradaGeneralForm(request.POST, instance=vale_instance) if form.is_valid(): vale = form.save() return HttpResponseRedirect( reverse('entrada_general_add', args=[vale.id])) else: messages.add_message(request, messages.ERROR, 'Error en formulario') else: form = EntradaGeneralForm(initial=initial_data) context["action"] = 'add' context["form"] = form return render(request, 'entrada_general.html', context)
def conteo(request): context = {} tipo_reference, bandera = TipoUnidadMedida.objects.get_or_create(tipo="0") categoria_unidad, bandera = CategoriaUnidadMedida.objects.get_or_create( nombre="Unidad") unidad_medida = UnidadMedida.objects.get( nombre="Unidad", categoria=categoria_unidad, tipo_unidad=tipo_reference, ) user = request.user bodega_actual = request.GET.get("destino", "BODEGA_GENERAL") user_bodega = User.objects.get(username=bodega_actual) profile_destino = Profile.objects.get(user__id=user_bodega.id) profile_origen = return_profile("CONTEO_INICIAL", "ABSTRACT") profilepositions = ProfilePosition.objects.filter(profile=profile_destino) pepp = ProductoExactProfilePosition.objects.all().values_list( 'exactposition') profilepositions = profilepositions.exclude(id__in=pepp) profilepositions = [[str(p.id), p.in_words()] for p in profilepositions] #profiles_destino = sorted(profiles_destino, key=lambda x: x[1]) productos = Producto.objects.all().order_by('nombre') productos = productos.exclude( id__in=ProductoExactProfilePosition.objects.all().values_list( 'movimiento__producto__id')) def quit_quote(cadena): return cadena.replace('\"', "") productos = [[str(pr.id), quit_quote(pr.nombre)] for pr in productos] token_api = request.session.get('token_api', '?') if token_api == "?": token_api, flag_created = Token.objects.get_or_create(user=user) request.session['token_api'] = token_api.key context['token'] = token_api context['productos'] = productos context['profilepositions'] = profilepositions context['profile_destino'] = profile_destino context['profile_origen'] = profile_origen context['unidad_medida'] = unidad_medida return render(request, 'conteo.html', context)
def handle(self, *args, **options): ''' lee el archivo ubicaciones.csv Posición PosiciónDescripción BA1N1 BODEGA_GENERAL>>ANAQUEL 1>>NIVEL DE ANAQUEL 1 ''' with open(settings.BASE_DIR + '/load_init/ubicaciones01octubre2021_dos.csv') as csvfile_in: readCSV = csv.reader(csvfile_in, delimiter=';') profile_no_existente = 0 profile_existente = 0 for indice, row in enumerate(readCSV): if indice != 0: # quit name of column position_string = row[1] list_positions = position_string.split(">>") if len(list_positions) > 0: # code for profile tipo_ = "BODEGA" tipo = Tipo.objects.get(nombre=tipo_) profile_username = list_positions.pop(0) profile_username = profile_username.strip().upper() try: u = User.objects.get(username=profile_username) p = Profile.objects.get(user=u) existe_usuario = True existe_profile = True except Profile.DoesNotExist: existe_profile = False except User.DoesNotExist: existe_usuario = False if not (existe_usuario) or not (existe_profile): p = return_profile(profile_username) print("new_profile: {}".format(p)) profile_no_existente += 1 else: profile_existente += 1 print("profile: {}".format(p)) # list of positions # make sure exist all positions for position_name in list_positions: positions = Position.objects.filter( name=position_name) if len(positions) == 0: position = Position.objects.create( name=position_name) elif len(positions) == 1: position = positions[0] else: print("MANY... position {}".format( position_name)) position = positions[0] parent = None for position_name in list_positions: if parent: parent, bandera = Position.objects.get_or_create( name=position_name, parent=parent) continue parent = Position.objects.get(name=position_name) # P # A >> B >> C >> D print("<<<<<<<<<<<<<<<<<<<<<<<<<<") print(parent) print( "last step >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" ) pp, band_pp = ProfilePosition.objects.get_or_create( profile=p, position=parent) print(pp)
def salida_general_add_movimiento(request, vale_id): obj = get_object_or_404(ValeAlmacenGeneral, pk=vale_id) if request.method == 'POST': form = MovimientoSalidaGeneralForm(request.POST) if form.is_valid(): unidad = form.cleaned_data['unidad'] cantidad = form.cleaned_data['cantidad'] cantidad_en_unidades_base = unidad.ratio * cantidad id_unidadmedida_referencia = request.POST['id_unidad_referencia'] cantidad_max = request.POST['cantidad_max'] id_producto = request.POST['id_producto'] id_origen = request.POST['id_origen'] id_profileposition = request.POST['id_profileposition'] producto = get_object_or_404(Producto, pk=id_producto) last_price_not_zero = producto.last_not_zero_purchase_price() origen = get_object_or_404(Profile, pk=id_origen) profileposition = get_object_or_404(ProfilePosition, pk=id_profileposition) unidadmedida_referencia = get_object_or_404( UnidadMedida, pk=id_unidadmedida_referencia) unidad_enviada = form.cleaned_data['unidad'] creador = return_profile(request.user.username, "STAFF") dicc_movimiento = { "vale": obj, "tipo_movimiento": obj.tipo_movimiento, "fecha_movimiento": obj.fecha_vale, "origen": origen, "producto": producto, "precio_unitario": last_price_not_zero, "unidad": form.cleaned_data['unidad'], "cantidad": cantidad, "observacion": form.cleaned_data['observacion'], "destino": form.cleaned_data['destino'], "creador": creador } if unidadmedida_referencia.categoria == unidad_enviada.categoria: pass #messages.add_message(request, messages.SUCCESS, 'La unidad de medida enviada, es correcta.') else: messages.add_message( request, messages.ERROR, 'La unidad de medida enviado, no corresponde con el producto' ) return HttpResponseRedirect( reverse('salida_general_add', args=[obj.id])) if float(cantidad_en_unidades_base) <= float( cantidad_max ): ## extra validacion, solo puede sacarse una cantidad menor o igual a lo existente m = MovimientoGeneral(**dicc_movimiento) m.save() ProductoExactProfilePosition.objects.create( exactposition=profileposition, #nivel_twenty_three movimiento=m) messages.add_message(request, messages.SUCCESS, 'Se adiciona movimiento {}'.format(m.id)) return HttpResponseRedirect( reverse('salida_general_add', args=[obj.id])) else: messages.add_message( request, messages.ERROR, 'No se puede sacar una cantidad mayor a la que existente en la ubicacion' ) return HttpResponseRedirect( reverse('salida_general_add', args=[obj.id])) messages.add_message(request, messages.ERROR, 'Error en formulario') return HttpResponseRedirect(reverse('salida_general_add', args=[obj.id]))
def save(self): nombre = self.cleaned_data['nombre'] nombre = slugify(nombre) nombre = nombre.upper() profile = return_profile(nombre, tipo="PROVEEDOR") return profile