Ejemplo n.º 1
0
    def hacer_venta_productos_dos(
            self,
            punto_venta: PuntoVenta,
            nro_referencias: int = 5,
            cliente: Tercero = None,
            mesero: Tercero = None) -> [VentaProducto, dict]:
        from ventas.services import venta_producto_efectuar_venta
        from terceros.services import tercero_generarQR
        if not Producto.objects.exists():
            array_id_productos = self.crear_inventarios_productos(
                nro_referencias)
        else:
            array_id_productos = Producto.objects.values_list('pk', flat=True)

        pedido = []
        informacion = {'valor_venta': 0}
        precio_a_pagar = 0
        for i in range(len(array_id_productos)):
            precio_venta = Producto.objects.get(
                pk=array_id_productos[i]).precio_venta
            cantidad = random.randint(2, 7)
            precio_a_pagar += precio_venta * cantidad
            pedido.append({
                'producto_id': array_id_productos[i],
                'precio_total': precio_venta * cantidad,
                'cantidad': cantidad
            })

        if mesero is not None:
            venta = venta_producto_efectuar_venta(
                usuario_pdv_id=self.colaborador_cajero.usuario.id,
                punto_venta_id=punto_venta.id,
                tipo_venta=2,
                pedidos=pedido,
                cliente_usuario_id=mesero.usuario.id,
                cliente_qr_codigo=tercero_generarQR(mesero.id).qr_acceso)
        else:
            if cliente is not None:
                venta = venta_producto_efectuar_venta(
                    usuario_pdv_id=self.colaborador_cajero.usuario.id,
                    punto_venta_id=punto_venta.id,
                    tipo_venta=3,
                    pedidos=pedido,
                    cliente_usuario_id=cliente.usuario.id,
                    cliente_qr_codigo=tercero_generarQR(cliente.id).qr_acceso)
            else:
                venta = venta_producto_efectuar_venta(
                    usuario_pdv_id=self.colaborador_cajero.usuario.id,
                    punto_venta_id=punto_venta.id,
                    tipo_venta=1,
                    pedidos=pedido,
                    pago_efectivo=precio_a_pagar)

        valor_venta = venta.productos.aggregate(valor=Sum('precio_total'))
        informacion['valor_venta'] = valor_venta['valor']
        return venta, informacion
Ejemplo n.º 2
0
    def test_efectuar_venta_producto_con_cuenta(self):
        self.crear_base_venta()
        from terceros.services import tercero_generarQR
        self.detail_route_post(
            'efectuar_venta_producto', {
                'tercero_id': self.user.tercero.id,
                'qr_codigo': tercero_generarQR(self.user.tercero.id).qr_acceso,
                'tipo_venta': 2,
                'pedido': json.dumps(self.pedido)
            }, self.punto_venta.id)

        self.url = '/api/puntos_ventas_turnos/'
        self.list_route_get('abiertos/')
Ejemplo n.º 3
0
 def test_venta_producto_efectuar_venta_producto_no_existente(self):
     from ventas.services import venta_producto_efectuar_venta
     from terceros.services import tercero_generarQR
     with self.assertRaisesMessage(
             ValidationError,
             "{'_error': 'No existe en el inventario el item de código"
     ):
         venta_producto_efectuar_venta(
             usuario_pdv_id=self.colaborador_cajero.usuario.id,
             punto_venta_id=self.punto_venta.id,
             tipo_venta=3,
             pedidos=self.crear_pedido_errado_producto_no_existente(),
             cliente_usuario_id=self.acompanante.usuario.id,
             cliente_qr_codigo=tercero_generarQR(self.acompanante.id).qr_acceso
         )
Ejemplo n.º 4
0
 def test_venta_producto_efectuar_venta_cantidad_no_existente(self):
     from ventas.services import venta_producto_efectuar_venta
     from terceros.services import tercero_generarQR
     with self.assertRaisesMessage(
             ValidationError,
             "{'_error': 'No hay suficientes existencias del producto"
     ):
         pedido = self.crear_pedido(inventario_no_existente=True)
         venta_producto_efectuar_venta(
             usuario_pdv_id=self.colaborador_cajero.usuario.id,
             punto_venta_id=self.punto_venta.id,
             tipo_venta=3,
             pedidos=pedido['pedido'],
             cliente_usuario_id=self.acompanante.usuario.id,
             cliente_qr_codigo=tercero_generarQR(self.acompanante.id).qr_acceso
         )
Ejemplo n.º 5
0
 def test_venta_producto_efectuar_venta_mesero_a_acompanante(self):
     from ventas.services import venta_producto_efectuar_venta, venta_producto_generar_comprobante_venta
     from terceros.services import tercero_generarQR
     pedido = self.crear_pedido()
     self.assertTrue(self.colaborador_dos.cuenta_abierta_mesero.compras_productos.all().count() == 0)
     with self.assertRaisesMessage(
             ValidationError,
             "'_error': 'No se puede crear una venta mesero a una acompañante'}"
     ):
         venta_producto_efectuar_venta(
             usuario_pdv_id=self.colaborador_cajero.usuario.id,
             punto_venta_id=self.punto_venta.id,
             tipo_venta=2,
             pedidos=pedido['pedido'],
             cliente_usuario_id=self.acompanante_dos.usuario.id,
             cliente_qr_codigo=tercero_generarQR(self.acompanante_dos.id).qr_acceso
         )
Ejemplo n.º 6
0
    def test_venta_producto_efectuar_venta_mesero(self):
        from ventas.services import venta_producto_efectuar_venta, venta_producto_generar_comprobante_venta
        from terceros.services import tercero_generarQR
        pedido = self.crear_pedido()
        self.assertTrue(self.colaborador_dos.cuenta_abierta_mesero.compras_productos.all().count() == 0)
        venta = venta_producto_efectuar_venta(
            usuario_pdv_id=self.colaborador_cajero.usuario.id,
            punto_venta_id=self.punto_venta.id,
            tipo_venta=2,
            pedidos=pedido['pedido'],
            cliente_usuario_id=self.colaborador_dos.usuario.id,
            cliente_qr_codigo=tercero_generarQR(self.colaborador_dos.id).qr_acceso
        )

        recibo_venta = venta_producto_generar_comprobante_venta(venta_producto_id=venta.id)
        recibo_venta.write_pdf(
            target='media/pruebas_pdf/recibo_venta_producto_mesero.pdf'
        )

        movimientos_detalles_venta = venta.movimientos.first()
        self.assertEqual(movimientos_detalles_venta.detalle, 'Salida de Mercancia x Venta')
        self.assertEqual(movimientos_detalles_venta.motivo, 'venta')
        for x in pedido['pedido']:
            producto_id = x.get('producto_id')
            cantidad = x.get('cantidad')
            precio_total = x.get('precio_total')
            movimiento_item = movimientos_detalles_venta.detalles.filter(producto__id=producto_id).first()
            venta_item = venta.productos.filter(producto__id=producto_id).first()
            self.assertEqual(movimiento_item.sale_cantidad, cantidad)
            self.assertEqual(movimiento_item.es_ultimo_saldo, True)
            self.assertEqual(venta_item.precio_total, precio_total)
            self.assertEqual(venta_item.cantidad, cantidad)
            self.assertEqual(venta_item.costo_unitario, movimiento_item.costo_unitario_promedio)
            self.assertEqual(venta_item.costo_total, movimiento_item.sale_costo)

        compras_productos = self.colaborador_dos.cuenta_abierta_mesero.compras_productos.first()
        self.assertEqual(compras_productos.productos.count(), len(pedido['pedido']))
        self.assertEqual(
            self.colaborador_dos.cuenta_abierta_mesero.cxc_por_compras_productos,
            pedido['valor_pedido']
        )
Ejemplo n.º 7
0
    def test_venta_producto_efectuar(self):
        from ventas.services import venta_producto_efectuar_venta
        from terceros.services import tercero_generarQR
        self.assertTrue(self.acompanante.cuenta_abierta.compras_productos.all().count() == 0)
        pedido_ini = self.crear_pedido(nro_referencias=5)
        venta_producto_efectuar_venta(
            usuario_pdv_id=self.colaborador_cajero.usuario.id,
            punto_venta_id=self.punto_venta.id,
            tipo_venta=3,
            pedidos=pedido_ini['pedido'],
            cliente_usuario_id=self.colaborador_dos.usuario.id,
            cliente_qr_codigo=tercero_generarQR(self.colaborador_dos.id).qr_acceso
        )

        self.assertEqual(
            self.colaborador_dos.cuenta_abierta.cxc_por_compras_productos,
            pedido_ini['valor_pedido']
        )

        pedido = self.crear_pedido(nro_referencias=5)
        venta = venta_producto_efectuar_venta(
            usuario_pdv_id=self.colaborador_cajero.usuario.id,
            punto_venta_id=self.punto_venta.id,
            tipo_venta=3,
            pedidos=pedido['pedido'],
            cliente_usuario_id=self.acompanante.usuario.id,
            cliente_qr_codigo=tercero_generarQR(self.acompanante.id).qr_acceso
        )
        valor_pedido_efectivo = venta.productos.aggregate(
            precio_venta=Sum('precio_total')
        )['precio_venta']
        cantidad_pedido_efectivo = venta.productos.aggregate(
            cantidad=Sum('cantidad')
        )['cantidad']
        valor_pedido_esperado = pedido['valor_pedido']
        cantidad_pedido_esperado = pedido['cantidad_pedido']

        self.assertEqual(valor_pedido_efectivo, valor_pedido_esperado)
        self.assertEqual(cantidad_pedido_efectivo, cantidad_pedido_esperado)

        movimientos_detalles_venta = venta.movimientos.first()
        self.assertEqual(movimientos_detalles_venta.detalle, 'Salida de Mercancia x Venta')
        self.assertEqual(movimientos_detalles_venta.motivo, 'venta')
        for x in pedido['pedido']:
            producto_id = x.get('producto_id')
            cantidad = x.get('cantidad')
            precio_total = x.get('precio_total')
            movimiento_item = movimientos_detalles_venta.detalles.filter(producto__id=producto_id).first()
            venta_item = venta.productos.filter(producto__id=producto_id).first()
            self.assertEqual(movimiento_item.sale_cantidad, cantidad)
            self.assertEqual(movimiento_item.es_ultimo_saldo, True)
            self.assertEqual(venta_item.precio_total, precio_total)
            self.assertEqual(venta_item.cantidad, cantidad)
            self.assertEqual(venta_item.costo_unitario, movimiento_item.costo_unitario_promedio)
            self.assertEqual(venta_item.costo_total, movimiento_item.sale_costo)
        compras_productos = self.acompanante.cuenta_abierta.compras_productos.first()
        self.assertEqual(compras_productos.productos.count(), len(pedido['pedido']))
        self.assertEqual(
            self.acompanante.cuenta_abierta.cxc_por_compras_productos,
            pedido['valor_pedido']
        )
Ejemplo n.º 8
0
 def generar_qr(self, request, pk=None):
     tercero = self.get_object()
     tercero_generarQR(tercero.id)
     serializer = self.get_serializer(tercero)
     return Response(serializer.data)