Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
    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)
Пример #5
0
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]))
Пример #6
0
 def save(self):
     nombre = self.cleaned_data['nombre']
     nombre = slugify(nombre)
     nombre = nombre.upper()
     profile = return_profile(nombre, tipo="PROVEEDOR")
     return profile