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
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/')
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 )
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 )
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 )
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'] )
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'] )
def generar_qr(self, request, pk=None): tercero = self.get_object() tercero_generarQR(tercero.id) serializer = self.get_serializer(tercero) return Response(serializer.data)