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})
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)
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)
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)
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') ])
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) ])