Exemplo n.º 1
0
    def post(self, request):
        semanas = request.POST.getlist('semana', [])
        respuesta = []
        catalogoProd = Catalogo_Producto.objects.filter(fk_catalogo__fk_semana_id__in=semanas,
                                                        fk_catalogo__fk_cooperativa_id=get_id_cooperativa_global(
                                                            request))
        for pro in catalogoProd:
            valor_compra = obtener_valor_compra(semanas, pro.fk_producto, get_id_cooperativa_global(request))
            valor_venta = pro.precio
            cantVendida = obtener_cantidad_vendida(semanas, pro.fk_producto, get_id_cooperativa_global(request))
            producto = Producto.objects.filter(id=pro.fk_producto_id).first()
            porcentaje = int
            if cantVendida != 0:
                porcentaje = int((((valor_venta - valor_compra) * cantVendida) * 100) / (valor_compra * cantVendida))
            else:
                porcentaje = 0
            respuesta.append({
                'producto': producto,
                'cantidad_vendida': cantVendida,
                'valor_compra': valor_compra,
                'valor_venta': valor_venta,
                'ganancia': (valor_venta - valor_compra) * cantVendida,
                'porcentaje': porcentaje

            })
        ordenado = sorted(respuesta, key=itemgetter('ganancia'), reverse=True)
        return render(request, 'Administrador/Informes/mejoresProductos.html', {'datos': ordenado})
Exemplo n.º 2
0
def agregar_producto_carrito(request, product_id, quantity):
    product = Catalogo_Producto.objects.get(
        fk_producto_id=product_id,
        fk_catalogo__fk_cooperativa_id=get_id_cooperativa_global(request),
        fk_catalogo__fk_semana=get_or_create_week())
    cantidad_disponible = cantidad_disponible_producto_catalogo(
        product, get_id_cooperativa_global(request))
    cart = get_or_create_cart(request)
    items = cart.get('items', [])
    exists = False
    i = 0
    while not exists and i < len(items):
        item = items[i]
        if item['product_id'] == product_id:
            new_quantity = item['quantity'] + quantity
            if new_quantity > cantidad_disponible:
                new_quantity = cantidad_disponible
            item['quantity'] = new_quantity
            exists = True
        i += 1
    if not exists:
        items.append({
            'product_id': product_id,
            'quantity': quantity,
            'name': product.fk_producto.nombre,
            'image': product.fk_producto.imagen.url,
            'price': float(product.precio),
            'unit': product.fk_producto.unidad_medida,
            'cantidad_disponible': cantidad_disponible
        })
    cart['items'] = items
    return cart
Exemplo n.º 3
0
    def get(self, request):
        semana = Semana.objects.last()
        ofertas_por_pagar = Oferta_Producto \
            .objects.filter(fk_orden_compra__isnull=True, cantidad_vendida__gt=0,
                            fk_oferta__fk_productor__fk_cooperativa_id=get_id_cooperativa_global(request)) \
            .exclude(fk_oferta__fk_semana=semana) \
            .distinct('fk_oferta__fk_productor')

        productor = Productor.objects.filter(fk_cooperativa_id=get_id_cooperativa_global(request))

        return render(request, 'Administrador/pagos-pendientes-productor.html',
                      {'ofertas_por_pagar': ofertas_por_pagar,
                       'productores': productor})
Exemplo n.º 4
0
 def get(self, request):
     canastas = Canasta.objects.filter(
         esta_publicada=True,
         fk_semana=get_or_create_week(),
         fk_cooperativa_id=get_id_cooperativa_global(request))
     if canastas:
         arreglo_canastas = formatear_lista_canastas(
             canastas, get_id_cooperativa_global(request))
         return render(request, 'Cliente/canastas.html',
                       {'canastas_json': json.dumps(arreglo_canastas)})
     else:
         messages.add_message(request, messages.INFO,
                              'Actualmente no hay canastas disponibles')
         return redirect(reverse('cliente:index'))
Exemplo n.º 5
0
def agregar_canasta_carrito(request, canasta_id, quantity):
    canasta = Canasta.objects.get(id=canasta_id)
    cantidad_disponible = cantidad_disponible_canasta(
        canasta, get_id_cooperativa_global(request))
    cart = get_or_create_cart(request)
    canastas = cart.get('canastas', [])
    exists = False
    i = 0
    while not exists and i < len(canastas):
        canasta_act = canastas[i]
        if canasta_act['id'] == canasta_id:
            new_quantity = canasta_act['quantity'] + quantity
            if new_quantity > cantidad_disponible:
                new_quantity = cantidad_disponible
            canasta_act['quantity'] = new_quantity
            exists = True
        i += 1
    if not exists:
        canastas.append({
            'id': canasta_id,
            'quantity': quantity,
            'name': canasta.nombre,
            'image': canasta.imagen.url if canasta.imagen else '',
            'price': float(canasta.precio),
            'cantidad_disponible': cantidad_disponible
        })
    cart['canastas'] = canastas
    return cart
Exemplo n.º 6
0
 def post(self, request):
     id_canasta = request.POST.get('id_canasta', '0')
     canasta = Canasta.objects.filter(id=id_canasta, fk_semana=get_or_create_week(),
                                      fk_cooperativa_id=get_id_cooperativa_global(request)).first()
     if canasta:
         canasta.delete()
         messages.add_message(request, messages.SUCCESS, 'La canasta fue eliminada')
     else:
         messages.add_message(request, messages.ERROR, 'No existe la canasta que estás tratando de eliminar')
     return redirect(reverse('administrador:canastas'))
Exemplo n.º 7
0
    def get(self, request, id_canasta):
        canasta = Canasta.objects.filter(id=id_canasta, fk_semana=get_or_create_week(),
                                         fk_cooperativa_id=get_id_cooperativa_global(request)).first()
        if canasta:
            ids_productos_canasta = CanastaProducto.objects \
                .filter(fk_canasta_id=canasta.id) \
                .values_list('fk_producto_catalogo_id', flat=True)

            productos_disponibles = Catalogo_Producto.objects \
                .filter(fk_catalogo__fk_semana_id=canasta.fk_semana_id,
                        fk_catalogo__fk_cooperativa_id=get_id_cooperativa_global(request)) \
                .exclude(id__in=ids_productos_canasta) \
                .distinct()
            return render(request, 'Administrador/detalles-canasta.html', {
                'canasta': canasta, 'productos_disponibles': productos_disponibles
            })
        else:
            messages.add_message(request, messages.ERROR, 'No existe la canasta que estás buscando')
            return redirect(reverse('administrador:canastas'))
Exemplo n.º 8
0
 def post(self, request):
     nombre = request.POST.get('nombre', '')
     imagen = request.FILES.get('imagen', None)
     nueva = Canasta(fk_semana=get_or_create_week(), nombre=nombre, imagen=imagen,
                     fk_cooperativa_id=get_id_cooperativa_global(request))
     nueva.save()
     messages.add_message(
         request, messages.SUCCESS,
         'La canasta fue creada exitosamente. Ahora puede agregar los productos que desee'
     )
     return redirect(reverse('administrador:detalles-canasta', kwargs={'id_canasta': nueva.id}))
Exemplo n.º 9
0
 def get(self, request, id_productor):
     productor = Productor.objects.filter(id=id_productor,
                                          fk_cooperativa_id=get_id_cooperativa_global(request)).first()
     if productor:
         orden_compra = Orden_Compra.objects.filter(fk_productor_id=id_productor,
                                                    fk_productor__fk_cooperativa_id=get_id_cooperativa_global(
                                                        request)) \
             .order_by('-id')
         return render(request, 'Administrador/ordenes-pago-productor.html',
                       {'ordenes_compra': orden_compra,
                        'productor': productor})
     else:
         return redirect(reverse('administrador:pagos-pendientes-productor'))
Exemplo n.º 10
0
    def get(self, request, id_oferta, guardado_exitoso):

        if (Oferta.objects.filter(id=id_oferta,
                                  fk_productor__fk_cooperativa_id=get_id_cooperativa_global(request)).exists()):
            ofertas_producto = Oferta_Producto.cargar_ofertas(id_oferta)

            return render(request, 'Administrador/detalle-oferta.html', {
                'ofertas_producto': ofertas_producto,
                'id_oferta': id_oferta,
                'guardado_exitoso': guardado_exitoso
            })
        else:
            return redirect(reverse('administrador:ofertas'))
Exemplo n.º 11
0
    def get(self, request):
        semana = get_or_create_next_week()
        ofertas = list()
        for productor in Productor.objects.filter(fk_cooperativa_id=get_id_cooperativa_global(request)):
            cantidad_ofertas = 0
            id_oferta = 0
            for oferta in Oferta.objects.filter(fk_productor=productor, fk_semana=semana):
                cantidad_ofertas = Oferta_Producto.objects.filter(fk_oferta=oferta).count()
                id_oferta = oferta.id

            if cantidad_ofertas > 0:
                ofertas.append((productor.nombre, cantidad_ofertas, id_oferta))

        return render(request, 'Administrador/ofertas.html', {'ofertas': ofertas, 'semana': semana})
Exemplo n.º 12
0
    def get(self, request):
        semana = get_or_create_week()

        ofertas_pro = Oferta_Producto \
            .objects.filter(estado=1, fk_oferta__fk_semana=semana,
                            fk_oferta__fk_productor__fk_cooperativa_id=get_id_cooperativa_global(request)) \
            .values('fk_producto', 'fk_producto__nombre', 'fk_producto__imagen', 'fk_producto__unidad_medida') \
            .annotate(canAceptada=Sum('cantidad_aceptada'), canVendida=Sum('cantidad_vendida'),
                      canDisponible=Sum(F('cantidad_aceptada') - F('cantidad_vendida'))) \
            .distinct()

        return render(request, 'Administrador/Informes/inventario.html', {
            'ofertas_pro': ofertas_pro,
            'semana': semana
        })
Exemplo n.º 13
0
    def get(self, request, id_productor):
        productor = Productor.objects.filter(id=id_productor,
                                             fk_cooperativa_id=get_id_cooperativa_global(request)).first()
        if productor:
            semana = Semana.objects.last()
            ofertas_por_pagar = Oferta_Producto.objects. \
                filter(fk_orden_compra__isnull=True, fk_oferta__fk_productor_id=id_productor, cantidad_vendida__gt=0) \
                .exclude(fk_oferta__fk_semana=semana)

            productor = Productor.objects.filter(id=id_productor)[0]
            return render(request, 'Administrador/detalle-productos-orden-pago.html', {
                'ofertas_por_pagar': ofertas_por_pagar,
                'productor': productor
            })
        else:
            return redirect(reverse('administrador:pagos-pendientes-productor'))
Exemplo n.º 14
0
 def get(self, request):
     productores_destacados = list()
     for productor in Productor.objects.filter(fk_cooperativa_id=get_id_cooperativa_global(request)):
         ordenes = Orden_Compra.objects.filter(fk_productor=productor, estado='PA')
         cantidad_ordenes = ordenes.count()
         if cantidad_ordenes > 0:
             nombre = productor.nombre
             cooperativa = productor.fk_cooperativa.nombre
             total_ventas = ordenes.aggregate(Sum('valor_total'))['valor_total__sum']
             ultima_fecha = ordenes.latest('fecha_creacion')
             productores_destacados.append(
                 ProductorDestacado(productor.id, nombre, cooperativa, total_ventas, ultima_fecha)
             )
     productores_ordenados = sorted(productores_destacados, key=lambda x: x.total_ventas, reverse=True)
     return render(request, 'Administrador/Informes/productores_destacados.html', {
         'productores_destacados': productores_ordenados
     })
def get_cantidad_disponible_producto_catalogo(producto_catalogo, request):
    return cantidad_disponible_producto_catalogo(
        producto_catalogo, get_id_cooperativa_global(request))
Exemplo n.º 16
0
 def get(self, request):
     productores = Productor.objects.filter(fk_cooperativa_id=get_id_cooperativa_global(request)).order_by('id')
     return render(request, 'Administrador/Productores.html', {'listaProductores': productores})
Exemplo n.º 17
0
 def post(self, request):
     canastas = Canasta.objects.filter(fk_semana=get_or_create_week(),
                                       fk_cooperativa_id=get_id_cooperativa_global(request))
     canastas.update(esta_publicada=True)
     messages.add_message(request, messages.SUCCESS, 'Las canastas fueron publicadas exitosamente')
     return redirect(reverse('administrador:canastas'))
Exemplo n.º 18
0
    def post(self, request):
        checkout_Json = json.loads(request.POST.get('checkout_form'))
        detalles_productos = checkout_Json.get('detalles_productos')
        detalles_canastas = checkout_Json.get('detalles_canastas')
        informacion_envio = checkout_Json.get('informacion_envio')
        informacion_pago = checkout_Json.get('informacion_pago')
        nombre_envio = informacion_envio.get('nombre')
        direccion_envio = informacion_envio.get('direccion')
        email_envio = informacion_envio.get('email')
        celular_envio = informacion_envio.get('celular')
        telefono_envio = informacion_envio.get('telefono')
        observaciones_envio = informacion_envio.get('observaciones')
        nombre_pago = informacion_pago.get('nombre_completo')
        numero_identificacion = informacion_pago.get('numero_documento')
        tipo_identificacion = informacion_pago.get('tipo_documento')

        cliente_model = Cliente.objects.filter(
            fk_django_user_id=request.user.id).first()
        pedido_model = Pedido(fk_cliente=cliente_model,
                              fecha_pedido=datetime.now(),
                              fecha_entrega=datetime.now(),
                              estado='PE',
                              valor_total=0,
                              nombre_envio=nombre_envio,
                              direccion_envio=direccion_envio,
                              email_envio=email_envio,
                              telefono_envio=telefono_envio,
                              observaciones_envio=observaciones_envio,
                              nombre_pago=nombre_pago,
                              tipo_identificacion=tipo_identificacion,
                              numero_identificacion=numero_identificacion)
        checkpoint = savepoint()
        pedido_model.save()
        id_cooperativa = get_id_cooperativa_global(request)
        valor_total = 0
        for item in detalles_productos:
            producto_catalogo = Catalogo_Producto.objects.get(
                fk_producto_id=item.get('product_id'),
                fk_catalogo__fk_cooperativa_id=id_cooperativa,
                fk_catalogo__fk_semana=get_or_create_week())
            cantidad = int(item.get('quantity'))
            pedido_producto_model = PedidoProducto(
                fk_catalogo_producto=producto_catalogo,
                fk_pedido=pedido_model,
                cantidad=cantidad,
                fk_oferta_producto=Oferta_Producto.objects.filter(
                    fk_producto=producto_catalogo.fk_producto,
                    fk_oferta__fk_semana=get_or_create_week(),
                    estado=1).first())
            pedido_producto_model.save()

            cliente_producto_model = ClienteProducto.objects.filter(
                fk_producto=producto_catalogo.fk_producto,
                fk_cliente=cliente_model)
            if cliente_producto_model.exists():
                total_cantidad = cliente_producto_model[0].cantidad + cantidad
                total_frecuencia = cliente_producto_model[0].frecuencia + 1
                cliente_producto_model.update(cantidad=total_cantidad,
                                              frecuencia=total_frecuencia)
            else:
                cliente_producto_model = ClienteProducto(
                    fk_cliente=cliente_model,
                    fk_producto=producto_catalogo.fk_producto,
                    fk_semana=get_or_create_week(),
                    cantidad=cantidad,
                    frecuencia=1,
                    sugerir=False)
                cliente_producto_model.save()

            cantidad_restante = actualizar_inventario(
                producto_catalogo, cantidad,
                get_id_cooperativa_global(request))

            if cantidad_restante > 0:
                cart = get_or_create_cart(request)

                items = cart.get('items', [])
                cart['items'] = list(
                    filter(
                        lambda x: x['product_id'] != producto_catalogo.
                        fk_producto_id, items))
                request.session['cart'] = cart
                messages.add_message(
                    request, messages.ERROR,
                    'El producto {producto} ya no se encuentra disponible'.
                    format(producto=producto_catalogo.fk_producto.nombre))
                savepoint_rollback(checkpoint)
                return redirect(reverse('cliente:checkout'))
            else:
                valor_total += producto_catalogo.precio * cantidad

        canastas_query = Canasta.objects.filter(
            esta_publicada=True,
            fk_semana=get_or_create_week(),
            fk_cooperativa_id=get_id_cooperativa_global(request))
        for canasta_carrito in detalles_canastas:
            canasta = canastas_query.get(id=canasta_carrito.get('canasta_id'))
            cantidad_canasta = int(canasta_carrito.get('quantity'))
            pedido_canasta_model = PedidoCanasta(
                cantidad=cantidad_canasta,
                fk_pedido=pedido_model,
                fk_canasta=canasta,
            )
            for canasta_producto in canasta.productos:
                producto_catalogo = canasta_producto.fk_producto_catalogo
                cantidad_producto = canasta_producto.cantidad * cantidad_canasta
                cantidad_restante = actualizar_inventario(
                    producto_catalogo, cantidad_producto,
                    get_id_cooperativa_global(request))
                if cantidad_restante > 0:
                    cart = get_or_create_cart(request)
                    canastas_carrito = cart.get('canastas', [])
                    cart['canastas'] = list(
                        filter(lambda x: x['canasta_id'] != canasta.id,
                               canastas_carrito))
                    request.session['cart'] = cart
                    messages.add_message(
                        request, messages.ERROR,
                        'La canasta {canasta} ya no se encuentra disponible'.
                        format(canasta=canasta.nombre))
                    savepoint_rollback(checkpoint)
                    return redirect(reverse('cliente:checkout'))

            valor_total += canasta.precio * cantidad_canasta
            pedido_canasta_model.save()

        pedido_model.valor_total = valor_total
        pedido_model.save()
        savepoint_commit(checkpoint)
        request.session['cart'] = ""
        messages.add_message(request, messages.SUCCESS,
                             'La compra se realizó exitosamente')
        return redirect(
            reverse('cliente:detalle-mis-pedidos',
                    kwargs={'id_pedido': pedido_model.id}))
Exemplo n.º 19
0
 def get(self, request):
     canastas = Canasta.objects.filter(fk_semana=get_or_create_week(),
                                       fk_cooperativa_id=get_id_cooperativa_global(request))
     return render(request, 'Administrador/canastas.html', {'canastas': canastas})