class ProductoViewSet(viewsets.ModelViewSet):
    queryset = Producto.objects.all()
    serializer_class = ProductoSerializer
    permission_classes = (
        APIPermissionClassFactory(
            name='ProductoPermission',
            permission_configuration={
                'base': {
                    'create': True,
                    'list': lambda user, req: user.is_authenticated,
                },
                'instance': {
                    'retrieve': 'productos.view_producto',
                    #'retrieve': lambda user, obj, req: user.is_authenticated,
                    'partial_update': 'productos.change_producto',
                    'aplicar': lambda user, obj, req: user.is_authenticated,
                    'subtotal': lambda user, obj, req: user.is_authenticated,
                    'descontar': lambda user, obj, req: user.is_authenticated,
                }
            }
        ),
    )

    def perform_create(self, serializer):
        producto = serializer.save()
        user = self.request.user
        assign_perm('productos.change_producto', user, producto)
        assign_perm('productos.view_producto', user, producto)
        user.save()
        return Response(serializer.data)

    @action(detail=False, url_path='aplicar-descuento', methods=['patch'])
    def aplicar(self, request, pk=None):
        productos = Producto.objects.all()
        productosDescuento = []
        for producto in productos:
            ofertas = Oferta.objects.all().filter(idProducto=producto).filter(venceOferta__gte=date.today())
            if ofertas.count() > 0:
                for oferta in ofertas:
                    producto.descuentoProducto = oferta.descuentoOferta * producto.precioProducto
            else:
                producto.descuentoProducto = 0
            producto.save()
            productosDescuento.append(ProductoSerializer(producto).data)
        return Response(productosDescuento)

    @action(detail=True, url_path='subtotal-compra', methods=['get'])
    def subtotal(self, request, pk=None):
        producto = self.get_object()
        cantidad = int(request.data.get('cantidad'))
        subtotal = cantidad*producto.precioProducto
        return Response({'subtotal': subtotal})

    @action(detail=True, url_path='descuento-compra', methods=['get'])
    def descontar(self, request, pk=None):
        producto = self.get_object()
        cantidad = int(request.data.get('cantidad'))
        descuento = cantidad*producto.descuentoProducto
        return Response({'descuento': descuento})    
Exemple #2
0
class ListaViewSet(viewsets.ModelViewSet):
    queryset = Lista.objects.all()
    serializer_class = ListaSerializer
    permission_classes = (
        APIPermissionClassFactory(
            name='ListaPermission',
            permission_configuration={
                'base': {
                    'create': True,
                    'list': True,
                },
                'instance': {
                    'retrieve': 'listas.view_lista',
                    #'retrieve': True,
                    'partial_update': 'listas.change_lista',
                    'aumentar_producto':
                    lambda user, obj, req: user.is_authenticated,
                    'disminuir_producto':
                    lambda user, obj, req: user.is_authenticated,
                    'obtener_listas':
                    lambda user, obj, req: user.is_authenticated,
                }
            }), )

    def perform_create(self, serializer):
        lista = serializer.save()
        user = self.request.user
        assign_perm('listas.change_lista', user, lista)
        assign_perm('listas.view_lista', user, lista)
        user.save()
        return Response(serializer.data)

    @action(detail=True, url_path='aumentar-producto', methods=['patch'])
    def aumentar_producto(self, request, pk=None):
        lista = self.get_object()
        cantidad = int(request.data.get('cantidad'))
        lista.cantidadLista += cantidad
        lista.save()
        return Response(ListaSerializer(lista).data)

    @action(detail=True, url_path='disminuir-producto', methods=['patch'])
    def disminuir_producto(self, request, pk=None):
        lista = self.get_object()
        cantidad = int(request.data.get('cantidad'))
        lista.cantidadLista -= cantidad
        lista.save()
        return Response(ListaSerializer(lista).data)

    @action(detail=False, url_path='obtener-listas', methods=['get'])
    def obtener_listas(self, request, pk=None):
        return Response(
            ListaSerializer(lista).data for lista in Lista.objects.filter(
                fechaLista=(date.today().strftime("%Y-%m-%d"))))
class UsuarioViewSet(viewsets.ModelViewSet):
    queryset = Usuario.objects.all()
    serializer_class = UsuarioSerializer
    permission_classes = (APIPermissionClassFactory(
        name='UsuarioPermission',
        permission_configuration={
            'base': {
                'create': True,
            },
            'instance': {
                'retrieve': 'usuarios.view_usuario',
                'partial_update': 'usuarios.change_usuario',
                'mi_tipo': 'usuarios.view_usuario',
                'cliente': 'usuarios.view_usuario',
                'empleado': 'usuarios.view_usuario',
            }
        }), )

    def perform_create(self, serializer):
        usuario = serializer.save()
        user = self.request.user
        assign_perm('usuarios.change_usuario', user, usuario)
        assign_perm('usuarios.view_usuario', user, usuario)
        return Response(serializer.data)

    @action(detail=True, url_path="mi-tipo", methods=['get'])
    def mi_tipo(self, request, pk=None):
        usuario = self.get_object()
        return Response({'tipo': usuario.tipo})

    @action(detail=True, url_path="cliente", methods=['get'])
    def cliente(self, request, pk=None):
        usuario = self.get_object()
        return Response([
            ClienteSerializer(cliente).data
            for cliente in Cliente.objects.filter(idUsuario=usuario)
        ])

    @action(detail=True, url_path="empleado", methods=['get'])
    def empleado(self, request, pk=None):
        usuario = self.get_object()
        return Response([
            EmpleadoSerializer(empleado).data
            for empleado in Empleado.objects.filter(idUsuario=usuario)
        ])
class PedidoViewSet(viewsets.ModelViewSet):
    queryset = Pedido.objects.all()
    serializer_class = PedidoSerializer
    permission_classes = (
        APIPermissionClassFactory(
            name='PedidoPermission',
            permission_configuration={
                'base': {
                    'create': True,
                    'list': lambda user, req: user.is_authenticated,
                },
                'instance': {
                    'retrieve': 'pedidos.view_pedido',
                    #'partial_update': 'pedidos.change_pedido',
                    'confirmar': lambda user, obj, req: user.is_authenticated,
                    'completar': lambda user, obj, req: user.is_authenticated,
                }
            }), )

    def perform_create(self, serializer):
        pedido = serializer.save()
        user = self.request.user
        assign_perm('pedidos.change_pedido', user, pedido)
        assign_perm('pedidos.view_pedido', user, pedido)
        user.save()
        return Response(serializer.data)

    @action(detail=True, url_path='confirmado', methods=['patch'])
    def confirmar(self, request, pk=None):
        pedido = self.get_object()
        empleado = request.data.get('idEmpleado')
        pedido.estadoPedido = 'confirmado'
        pedido.idEmpleado = Empleado.objects.get(pk=empleado)
        pedido.save()
        return Response(PedidoSerializer(pedido).data)

    @action(detail=True, url_path='completado', methods=['patch'])
    def completar(self, request, pk=None):
        pedido = self.get_object()
        pedido.entregaPedido = 'completado'
        pedido.save()
        return Response(PedidoSerializer(pedido).data)
Exemple #5
0
class ValoracionViewSet(viewsets.ModelViewSet):
    queryset = Valoracion.objects.all()
    serializer_class = ValoracionSerializer
    permission_classes = (APIPermissionClassFactory(
        name='ValoracionPermission',
        permission_configuration={
            'base': {
                'create': True,
            },
            'instance': {
                'retrieve': 'valoraciones.change_valoracion',
                'partial_update': 'valoraciones.change_valoracion',
            }
        }), )

    def perform_create(self, serializer):
        valoracion = serializer.save()
        user = self.request.user
        assign_perm('valoraciones.change_valoracion', user, valoracion)
        assign_perm('valoraciones.view_valoracion', user, valoracion)
        return Response(serializer.data)
Exemple #6
0
class FacturaViewSet(viewsets.ModelViewSet):
    queryset = Factura.objects.all()
    serializer_class = FacturaSerializer
    permission_classes = (APIPermissionClassFactory(
        name='FacturaPermission',
        permission_configuration={
            'base': {
                'create': True,
                'list': lambda user, req: user.is_authenticated,
            },
            'instance': {
                'retrieve': 'facturas.change_factura',
                'partial_update': 'facturas.change_factura',
            }
        }), )

    def perform_create(self, serializer):
        factura = serializer.save()
        user = self.request.user
        assign_perm('facturas.change_factura', user, factura)
        assign_perm('facturas.view_factura', user, factura)
        return Response(serializer.data)
Exemple #7
0
class EmpleadoViewSet(viewsets.ModelViewSet):
    queryset = Empleado.objects.all()
    serializer_class = EmpleadoSerializer
    permission_classes = (
        APIPermissionClassFactory(
            name='EmpleadoPermission',
            permission_configuration={
                'base': {
                    'create': True,
                },
                'instance': {
                    'retrieve': 'empleados.change_empleado',
                    # 'partial_update': 'empleados.change_empleado',
                    #'retrieve': lambda user, obj, req: user.is_authenticated,
                    'partial_update':
                    lambda user, obj, req: user.is_authenticated,
                    'modificar_empleado':
                    lambda user, obj, req: user.is_authenticated,
                    'mis_comentarios':
                    lambda user, obj, req: user.is_authenticated,
                    'mi_puntuacion':
                    lambda user, obj, req: user.is_authenticated,
                    'mis_pedidos':
                    lambda user, obj, req: user.is_authenticated,
                }
            }), )

    def perform_create(self, serializer):
        empleado = serializer.save()
        user = self.request.user
        assign_perm('empleados.change_empleado', user, empleado)
        assign_perm('empleados.view_empleado', user, empleado)
        user.save()
        return Response(serializer.data)

    @action(detail=True, url_path='modificar-empleado', methods=['patch'])
    def modificar_empleado(self, request, pk=None):
        empleado = self.get_object()
        empleado.direccionEmpleado = request.data.get('direccion')
        empleado.telefonoEmpleado = request.data.get('telefono')
        empleado.save()
        return Response(EmpleadoSerializer(empleado).data)

    @action(detail=True, url_path="mis-comentarios", methods=['get'])
    def mis_comentarios(self, request, pk=None):
        empleado = self.get_object()
        return Response([
            ValoracionSerializer(valoracion).data
            for valoracion in Valoracion.objects.filter(idEmpleado=empleado)
        ])

    @action(detail=True, url_path="mi-puntuacion", methods=['get'])
    def mi_puntuacion(self, request, pk=None):
        empleado = self.get_object()
        puntuacion = Valoracion.objects.filter(idEmpleado=empleado).aggregate(
            Avg('puntuacionValoracion'))
        return Response(
            {'puntuacion': float(puntuacion['puntuacionValoracion__avg'])})

    @action(detail=True, url_path="mis-pedidos", methods=['get'])
    def mis_pedidos(self, request, pk=None):
        empleado = self.get_object()
        return Response([
            PedidoSerializer(pedido).data for pedido in Pedido.objects.filter(
                idEmpleado=empleado).filter(estadoPedido='pendiente')
        ])
Exemple #8
0
class ClienteViewSet(viewsets.ModelViewSet):
    queryset = Cliente.objects.all()
    serializer_class = ClienteSerializer
    permission_classes = (
        APIPermissionClassFactory(
            name='ClientePermission',
            permission_configuration={
                'base': {
                    'create': True,
                },
                'instance': {
                    'retrieve': 'clientes.view_cliente',
                    # 'partial_update': 'clientes.change_cliente',
                    #'retrieve': evaluar,
                    'partial_update': evaluar,
                    'modificar_cliente': evaluar,
                    'mis_pedidos': evaluar,
                    'mis_compras': evaluar,
                    'mis_facturas': evaluar,
                }
            }), )

    def perform_create(self, serializer):
        cliente = serializer.save()
        user = self.request.user
        assign_perm('clientes.change_cliente', user, cliente)
        assign_perm('clientes.view_cliente', user, cliente)
        user.save()
        return Response(serializer.data)

    @action(detail=True, url_path='modificar-cliente', methods=['patch'])
    def modificar_cliente(self, request, pk=None):
        cliente = self.get_object()
        cliente.direccionCliente = request.data.get('direccionCliente')
        cliente.telefonoCliente = request.data.get('telefonoCliente')
        cliente.save()
        return Response(ClienteSerializer(cliente).data)

    @action(detail=True, url_path="mis-pedidos", methods=['get'])
    def mis_pedidos(self, request, pk=None):
        cliente = self.get_object()
        return Response([
            PedidoSerializer(pedido).data
            for pedido in Pedido.objects.filter(idCliente=cliente)
        ])

    @action(detail=True, url_path="mis-compras", methods=['get'])
    def mis_compras(self, request, pk=None):
        cliente = self.get_object()
        return Response([
            CompraSerializer(compra).data for compra in Compra.objects.filter(
                idCliente=cliente).filter(estadoCompra='activo')
        ])

    @action(detail=True, url_path="mis-facturas", methods=['get'])
    def mis_facturas(self, request, pk=None):
        cliente = self.get_object()
        return Response([
            FacturaSerializer(factura).data
            for factura in Factura.objects.filter(idCliente=cliente)
        ])