Example #1
0
    def setUp(self):
        from terceros.factories import AcompananteFactory, ColaboradorFactory, ProveedorFactory
        from puntos_venta.factories import PuntoVentaFactory
        from puntos_venta.services import punto_venta_abrir
        from terceros.services import (tercero_set_new_pin,
                                       tercero_registra_entrada)

        self.punto_venta = PuntoVentaFactory(abierto=False,
                                             usuario_actual=None)
        self.colaborador_pdv = ColaboradorFactory()
        tercero_set_new_pin(self.colaborador_pdv.id, '0000')
        tercero_registra_entrada(self.colaborador_pdv.id, '0000')
        punto_venta_abrir(usuario_pv_id=self.colaborador_pdv.usuario.id,
                          punto_venta_id=self.punto_venta.id,
                          base_inicial_efectivo=0)

        self.colaborador = ColaboradorFactory()
        tercero_set_new_pin(self.colaborador.id, '0000')
        tercero_registra_entrada(self.colaborador.id, '0000')

        self.acompanante = AcompananteFactory()
        tercero_set_new_pin(self.acompanante.id, '0000')
        tercero_registra_entrada(self.acompanante.id, '0000')

        self.proveedor = ProveedorFactory()
Example #2
0
    def setUp(self):
        from ..factories import OperacionCajaFactory, ConceptoOperacionCajaFactory
        from terceros.factories import ColaboradorFactory
        from puntos_venta.factories import PuntoVentaFactory
        from terceros.services import tercero_registra_entrada, tercero_set_new_pin
        from puntos_venta.services import punto_venta_abrir
        super().setUp()
        self.Factory = OperacionCajaFactory
        self.url = '/api/operaciones_caja/'
        self.permiso = 'operacioncaja'
        self.modelo = OperacionCaja
        self.data_for_create_test = self.Factory.stub().__dict__
        self.colaborador = ColaboradorFactory(usuario=self.user)
        tercero_set_new_pin(self.colaborador.id, '0000')
        tercero_registra_entrada(self.colaborador.id, '0000')
        self.punto_venta = PuntoVentaFactory(abierto=False,
                                             usuario_actual=None)
        punto_venta_abrir(base_inicial_efectivo=0,
                          usuario_pv_id=self.colaborador.usuario.id,
                          punto_venta_id=self.punto_venta.id)

        self.concepto = ConceptoOperacionCajaFactory(tipo='I',
                                                     grupo='C',
                                                     tipo_cuenta='CXC')
        self.data_for_create_test['tercero'] = self.colaborador.id
        self.data_for_create_test['concepto'] = self.concepto.id
        self.data_for_create_test.pop('cuenta')
        self.data_for_update_test = {'observacion': 'probando'}
Example #3
0
class OperacionCajaTestsApi(BaseTestsApi):
    def setUp(self):
        from ..factories import OperacionCajaFactory, ConceptoOperacionCajaFactory
        from terceros.factories import ColaboradorFactory
        from puntos_venta.factories import PuntoVentaFactory
        from terceros.services import tercero_registra_entrada, tercero_set_new_pin
        from puntos_venta.services import punto_venta_abrir
        super().setUp()
        self.Factory = OperacionCajaFactory
        self.url = '/api/operaciones_caja/'
        self.permiso = 'operacioncaja'
        self.modelo = OperacionCaja
        self.data_for_create_test = self.Factory.stub().__dict__
        self.colaborador = ColaboradorFactory(usuario=self.user)
        tercero_set_new_pin(self.colaborador.id, '0000')
        tercero_registra_entrada(self.colaborador.id, '0000')
        self.punto_venta = PuntoVentaFactory(abierto=False,
                                             usuario_actual=None)
        punto_venta_abrir(base_inicial_efectivo=0,
                          usuario_pv_id=self.colaborador.usuario.id,
                          punto_venta_id=self.punto_venta.id)

        self.concepto = ConceptoOperacionCajaFactory(tipo='I',
                                                     grupo='C',
                                                     tipo_cuenta='CXC')
        self.data_for_create_test['tercero'] = self.colaborador.id
        self.data_for_create_test['concepto'] = self.concepto.id
        self.data_for_create_test.pop('cuenta')
        self.data_for_update_test = {'observacion': 'probando'}

    def test_ingreso_no_autorizado(self):
        self.ingreso_no_autorizado()

    def test_crear(self):
        self.crear()

    def test_delete(self):
        self.delete()

    def test_list(self):
        self.list()

    def test_consultar_por_tercero_cuenta_abierta(self):
        self.crear()
        cuenta = self.colaborador.cuenta_abierta
        self.colaborador.usuario = self.superuser
        self.colaborador.save()
        response = self.list_route_get('consultar_por_tercero_cuenta_abierta/')
        cuenta_id = int(response.data[0]['cuenta'])
        self.assertEqual(cuenta_id, cuenta.id)
        valor = float(response.data[0]['valor'])
        self.assertEqual(abs(float(self.data_for_create_test.get('valor'))),
                         abs(valor))
Example #4
0
    def setUp(self):
        from terceros.factories import AcompananteFactory, ColaboradorFactory
        self.user_sin_tercero = UserFactory()
        self.user = UserFactory()

        self.user_acompanante = UserFactory()
        self.punto_venta = PuntoVentaFactory(abierto=False,
                                             usuario_actual=None)
        self.punto_venta_dos = PuntoVentaFactory(abierto=False,
                                                 usuario_actual=None)
        self.acompanante = AcompananteFactory(usuario=self.user_acompanante)

        self.colaborador = ColaboradorFactory(usuario=UserFactory())
        self.colaborador_dos = ColaboradorFactory(usuario=UserFactory())
Example #5
0
 def setUp(self):
     super().setUp()
     from terceros.factories import AcompananteFactory, ColaboradorFactory
     self.url = '/api/terceros/'
     self.permiso = 'tercero'
     self.acompanante = AcompananteFactory()
     self.acompanante.usuario.set_password('contrasena')
     self.acompanante.usuario.save()
     self.colaborador = ColaboradorFactory()
Example #6
0
    def crear_base_venta(self):
        self.crear_productos()
        from terceros.factories import ColaboradorFactory, AcompananteFactory, CuentaColaboradorFactory
        from ..factories import PuntoVentaFactory
        from ..services import punto_venta_abrir
        from terceros.services import (tercero_set_new_pin,
                                       tercero_registra_entrada)
        tercero = ColaboradorFactory()
        tercero.usuario = self.user
        tercero.save()
        tercero_set_new_pin(tercero_id=tercero.id, raw_pin='0000')
        tercero_registra_entrada(tercero_id=tercero.id, raw_pin='0000')
        punto_venta = PuntoVentaFactory(abierto=False,
                                        usuario_actual=None,
                                        bodega=self.bodega)
        self.punto_venta, punto_venta_turno = punto_venta_abrir(
            punto_venta_id=punto_venta.id,
            usuario_pv_id=self.user.id,
            base_inicial_efectivo=0)

        acompanante = AcompananteFactory()
        tercero_set_new_pin(tercero_id=acompanante.id, raw_pin='0000')
        tercero_registra_entrada(tercero_id=acompanante.id, raw_pin='0000')
        self.cuenta = CuentaColaboradorFactory(propietario=acompanante.usuario)
        self.pedido = [
            {
                'producto_id': self.mid_uno.producto.id,
                'precio_total': 2000,
                'cantidad': 1
            },
            {
                'producto_id': self.mid_dos.producto.id,
                'precio_total': 3000,
                'cantidad': 2
            },
            {
                'producto_id': self.mid_tres.producto.id,
                'precio_total': 4000,
                'cantidad': 3
            },
        ]
Example #7
0
 def test_adicionar_quitar_punto_venta(self):
     from ..factories import ColaboradorFactory
     from puntos_venta.factories import PuntoVentaFactory
     colaborador = ColaboradorFactory()
     punto_venta = PuntoVentaFactory()
     self.assertTrue(
         colaborador.usuario.mis_puntos_venta.all().count() == 0)
     self.detail_route_post('adicionar_punto_venta',
                            {'punto_venta_id': punto_venta.id},
                            colaborador.id)
     self.assertTrue(
         colaborador.usuario.mis_puntos_venta.all().count() == 1)
     self.detail_route_post('quitar_punto_venta',
                            {'punto_venta_id': punto_venta.id},
                            colaborador.id)
     self.assertTrue(
         colaborador.usuario.mis_puntos_venta.all().count() == 0)
Example #8
0
    def setUp(self):
        from puntos_venta.factories import PuntoVentaFactory
        from puntos_venta.services import punto_venta_abrir
        from terceros.factories import ColaboradorFactory
        from ..factories import TipoVehiculoFactory, ModalidadFraccionTiempoFactory, VehiculoFactory
        self.punto_venta = PuntoVentaFactory(usuario_actual=None,
                                             abierto=False)
        colaborador = ColaboradorFactory(presente=True)
        punto_venta, self.punto_venta_turno = punto_venta_abrir(
            usuario_pv_id=colaborador.usuario.id,
            punto_venta_id=self.punto_venta.id,
            base_inicial_efectivo=0)

        tipo_vehiculo_sin_placa = TipoVehiculoFactory(tiene_placa=False)
        self.vehiculo = VehiculoFactory()
        self.modalidad_fraccion_tiempo_sin_placa = ModalidadFraccionTiempoFactory(
            tipo_vehiculo=tipo_vehiculo_sin_placa)

        tipo_vehiculo_con_placa = TipoVehiculoFactory(tiene_placa=True)
        self.modalidad_fraccion_tiempo_con_placa = ModalidadFraccionTiempoFactory(
            tipo_vehiculo=tipo_vehiculo_con_placa)
Example #9
0
    def setUp(self):
        from terceros.factories import ColaboradorFactory
        from puntos_venta.factories import PuntoVentaFactory
        from terceros.services import tercero_registra_entrada, tercero_set_new_pin
        from puntos_venta.services import punto_venta_abrir, punto_venta_cerrar
        super().setUp()
        self.url = '/api/arqueos_cajas/'
        self.permiso = 'arqueocaja'
        self.modelo = ArqueoCaja
        self.colaborador = ColaboradorFactory(usuario=self.superuser)
        tercero_set_new_pin(self.colaborador.id, '0000')
        tercero_registra_entrada(self.colaborador.id, '0000')
        self.punto_venta = PuntoVentaFactory(abierto=False,
                                             usuario_actual=None)
        punto_venta_abrir(base_inicial_efectivo=0,
                          usuario_pv_id=self.colaborador.usuario.id,
                          punto_venta_id=self.punto_venta.id)

        punto_venta_cerrar(usuario_pv_id=self.colaborador.usuario.id,
                           entrega_efectivo_dict={},
                           operaciones_caja_dict={},
                           entrega_base_dict={},
                           valor_tarjeta=0,
                           nro_vauchers=0,
                           valor_dolares=0,
                           tasa_dolar=0)

        punto_venta_abrir(base_inicial_efectivo=0,
                          usuario_pv_id=self.colaborador.usuario.id,
                          punto_venta_id=self.punto_venta.id)
        self.punto_venta, self.arqueo = punto_venta_cerrar(
            usuario_pv_id=self.colaborador.usuario.id,
            entrega_efectivo_dict={},
            operaciones_caja_dict={},
            entrega_base_dict={},
            valor_tarjeta=200000,
            nro_vauchers=1,
            valor_dolares=0,
            tasa_dolar=0)
Example #10
0
 def test_listar_por_colaborador_y_username(self):
     from terceros.factories import ColaboradorFactory
     from ..factories import PuntoVentaFactory
     tercero = ColaboradorFactory()
     response = self.list_route_get(
         'listar_por_colaborador/?colaborador_id=%s' % tercero.id)
     self.assertEqual(len(response.data), 0)
     response = self.list_route_get(
         'listar_por_usuario_username/?username=%s' %
         tercero.usuario.username)
     self.assertEqual(len(response.data), 0)
     pv_uno = PuntoVentaFactory()
     pv_dos = PuntoVentaFactory()
     tercero.usuario.mis_puntos_venta.add(pv_uno)
     tercero.usuario.mis_puntos_venta.add(pv_dos)
     response = self.list_route_get(
         'listar_por_colaborador/?colaborador_id=%s' % tercero.id)
     self.assertEqual(len(response.data), 2)
     response = self.list_route_get(
         'listar_por_usuario_username/?username=%s' %
         tercero.usuario.username)
     self.assertEqual(len(response.data), 2)
Example #11
0
    def setUp(self):
        from productos.factories import ProductoFactory
        from usuarios.factories import UserFactory
        from ..services import (movimiento_inventario_detalle_entrada_add_item,
                                movimiento_inventario_saldo_inicial_crear,
                                movimiento_inventario_aplicar_movimiento)
        from ..factories import TrasladoFactory, BodegaFactory
        from terceros.factories import ColaboradorFactory
        from terceros.services import (tercero_set_new_pin,
                                       tercero_registra_entrada)
        from puntos_venta.services import punto_venta_abrir
        from puntos_venta.factories import PuntoVentaFactory

        # Primer colaborador presente
        self.punto_venta_abierto = PuntoVentaFactory(usuario_actual=None,
                                                     abierto=False)
        self.colaborador_presente = ColaboradorFactory()
        tercero_set_new_pin(tercero_id=self.colaborador_presente.id,
                            raw_pin='0000')
        tercero_registra_entrada(self.colaborador_presente.id, raw_pin='0000')
        self.colaborador_presente.usuario.set_password('otro')
        self.colaborador_presente.usuario.save()
        punto_venta_abrir(usuario_pv_id=self.colaborador_presente.usuario.id,
                          punto_venta_id=self.punto_venta_abierto.id,
                          base_inicial_efectivo=0)
        self.punto_venta_abierto.refresh_from_db()
        self.bodega_punto_venta_abierto = self.punto_venta_abierto.bodega
        self.bodega_punto_venta_abierto.es_principal = False
        self.bodega_punto_venta_abierto.save()
        self.colaborador_presente.refresh_from_db()

        # Segundo colaborador presente
        self.punto_venta_abierto_dos = PuntoVentaFactory(usuario_actual=None,
                                                         abierto=False)
        self.colaborador_presente_dos = ColaboradorFactory()
        tercero_set_new_pin(tercero_id=self.colaborador_presente_dos.id,
                            raw_pin='0000')
        tercero_registra_entrada(self.colaborador_presente_dos.id,
                                 raw_pin='0000')
        self.colaborador_presente_dos.usuario.set_password('otro')
        self.colaborador_presente_dos.usuario.save()
        punto_venta_abrir(
            usuario_pv_id=self.colaborador_presente_dos.usuario.id,
            punto_venta_id=self.punto_venta_abierto_dos.id,
            base_inicial_efectivo=0)
        self.punto_venta_abierto_dos.refresh_from_db()
        self.bodega_punto_venta_abierto_dos = self.punto_venta_abierto_dos.bodega
        self.bodega_punto_venta_abierto_dos.es_principal = False
        self.bodega_punto_venta_abierto_dos.save()
        self.colaborador_presente_dos.refresh_from_db()

        # Colaborador no presente
        self.colaborador_no_presente = ColaboradorFactory()

        self.usuario = UserFactory()

        self.traslado = TrasladoFactory()

        self.producto_uno = ProductoFactory()
        self.producto_dos = ProductoFactory()
        self.producto_tres = ProductoFactory()
        self.producto_cuatro = ProductoFactory()

        self.bodega_inventario = BodegaFactory(es_principal=True)
        self.bodega_destino = BodegaFactory(es_principal=False)

        self.movimiento_saldo_inicial = movimiento_inventario_saldo_inicial_crear(
            bodega_destino_id=self.bodega_inventario.id,
            usuario_id=self.usuario.id,
            fecha=timezone.now())

        self.mv_uno_detalle_uno = movimiento_inventario_detalle_entrada_add_item(
            movimiento_id=self.movimiento_saldo_inicial.id,
            producto_id=self.producto_uno.id,
            cantidad=20,
            costo_total=10000)
        self.mv_uno_detalle_dos = movimiento_inventario_detalle_entrada_add_item(
            movimiento_id=self.movimiento_saldo_inicial.id,
            producto_id=self.producto_dos.id,
            cantidad=30,
            costo_total=40000)
        self.mv_uno_detalle_tres = movimiento_inventario_detalle_entrada_add_item(
            movimiento_id=self.movimiento_saldo_inicial.id,
            producto_id=self.producto_tres.id,
            cantidad=40,
            costo_total=90000)
        movimiento_inventario_aplicar_movimiento(
            self.movimiento_saldo_inicial.id)
Example #12
0
class TrasladoServicesTests(TestCase):
    def setUp(self):
        from productos.factories import ProductoFactory
        from usuarios.factories import UserFactory
        from ..services import (movimiento_inventario_detalle_entrada_add_item,
                                movimiento_inventario_saldo_inicial_crear,
                                movimiento_inventario_aplicar_movimiento)
        from ..factories import TrasladoFactory, BodegaFactory
        from terceros.factories import ColaboradorFactory
        from terceros.services import (tercero_set_new_pin,
                                       tercero_registra_entrada)
        from puntos_venta.services import punto_venta_abrir
        from puntos_venta.factories import PuntoVentaFactory

        # Primer colaborador presente
        self.punto_venta_abierto = PuntoVentaFactory(usuario_actual=None,
                                                     abierto=False)
        self.colaborador_presente = ColaboradorFactory()
        tercero_set_new_pin(tercero_id=self.colaborador_presente.id,
                            raw_pin='0000')
        tercero_registra_entrada(self.colaborador_presente.id, raw_pin='0000')
        self.colaborador_presente.usuario.set_password('otro')
        self.colaborador_presente.usuario.save()
        punto_venta_abrir(usuario_pv_id=self.colaborador_presente.usuario.id,
                          punto_venta_id=self.punto_venta_abierto.id,
                          base_inicial_efectivo=0)
        self.punto_venta_abierto.refresh_from_db()
        self.bodega_punto_venta_abierto = self.punto_venta_abierto.bodega
        self.bodega_punto_venta_abierto.es_principal = False
        self.bodega_punto_venta_abierto.save()
        self.colaborador_presente.refresh_from_db()

        # Segundo colaborador presente
        self.punto_venta_abierto_dos = PuntoVentaFactory(usuario_actual=None,
                                                         abierto=False)
        self.colaborador_presente_dos = ColaboradorFactory()
        tercero_set_new_pin(tercero_id=self.colaborador_presente_dos.id,
                            raw_pin='0000')
        tercero_registra_entrada(self.colaborador_presente_dos.id,
                                 raw_pin='0000')
        self.colaborador_presente_dos.usuario.set_password('otro')
        self.colaborador_presente_dos.usuario.save()
        punto_venta_abrir(
            usuario_pv_id=self.colaborador_presente_dos.usuario.id,
            punto_venta_id=self.punto_venta_abierto_dos.id,
            base_inicial_efectivo=0)
        self.punto_venta_abierto_dos.refresh_from_db()
        self.bodega_punto_venta_abierto_dos = self.punto_venta_abierto_dos.bodega
        self.bodega_punto_venta_abierto_dos.es_principal = False
        self.bodega_punto_venta_abierto_dos.save()
        self.colaborador_presente_dos.refresh_from_db()

        # Colaborador no presente
        self.colaborador_no_presente = ColaboradorFactory()

        self.usuario = UserFactory()

        self.traslado = TrasladoFactory()

        self.producto_uno = ProductoFactory()
        self.producto_dos = ProductoFactory()
        self.producto_tres = ProductoFactory()
        self.producto_cuatro = ProductoFactory()

        self.bodega_inventario = BodegaFactory(es_principal=True)
        self.bodega_destino = BodegaFactory(es_principal=False)

        self.movimiento_saldo_inicial = movimiento_inventario_saldo_inicial_crear(
            bodega_destino_id=self.bodega_inventario.id,
            usuario_id=self.usuario.id,
            fecha=timezone.now())

        self.mv_uno_detalle_uno = movimiento_inventario_detalle_entrada_add_item(
            movimiento_id=self.movimiento_saldo_inicial.id,
            producto_id=self.producto_uno.id,
            cantidad=20,
            costo_total=10000)
        self.mv_uno_detalle_dos = movimiento_inventario_detalle_entrada_add_item(
            movimiento_id=self.movimiento_saldo_inicial.id,
            producto_id=self.producto_dos.id,
            cantidad=30,
            costo_total=40000)
        self.mv_uno_detalle_tres = movimiento_inventario_detalle_entrada_add_item(
            movimiento_id=self.movimiento_saldo_inicial.id,
            producto_id=self.producto_tres.id,
            cantidad=40,
            costo_total=90000)
        movimiento_inventario_aplicar_movimiento(
            self.movimiento_saldo_inicial.id)

    def test_crear_traslado_origen_bodega_principal_destino_bodega_principal(
            self):
        from ..factories import BodegaFactory
        from ..services import traslado_inventario_crear
        self.bodega_inventario.es_principal = True
        self.bodega_inventario.save()
        bodega_inventario_principal_dos = BodegaFactory(es_principal=True)
        traslado = traslado_inventario_crear(
            bodega_origen_id=self.bodega_inventario.id,
            bodega_destino_id=bodega_inventario_principal_dos.id,
            usuario_crea_id=self.usuario.id)
        self.assertTrue(traslado.estado == 1)
        self.assertFalse(traslado.trasladado)
        self.assertEqual(traslado.bodega_origen_id, self.bodega_inventario.id)
        self.assertEqual(traslado.bodega_destino.id,
                         bodega_inventario_principal_dos.id)
        self.assertEqual(traslado.creado_por.id, self.usuario.id)

    def test_crear_traslado_origen_bodega_principal_destino_bodega_no_principal(
            self):
        from ..services import traslado_inventario_crear
        traslado = traslado_inventario_crear(
            bodega_origen_id=self.bodega_inventario.id,
            bodega_destino_id=self.bodega_punto_venta_abierto.id,
            usuario_crea_id=self.usuario.id)
        self.assertTrue(traslado.estado == 1)
        self.assertFalse(traslado.trasladado)
        self.assertEqual(traslado.bodega_origen_id, self.bodega_inventario.id)
        self.assertEqual(traslado.bodega_destino.id,
                         self.bodega_punto_venta_abierto.id)
        self.assertEqual(traslado.creado_por.id, self.usuario.id)

    def test_crear_traslado_origen_bodega_no_principal_destino_bodega_no_principal(
            self):
        from ..services import traslado_inventario_crear
        traslado = traslado_inventario_crear(
            bodega_origen_id=self.bodega_punto_venta_abierto_dos.id,
            bodega_destino_id=self.bodega_punto_venta_abierto.id,
            usuario_crea_id=self.colaborador_presente_dos.usuario.id)
        self.assertTrue(traslado.estado == 1)
        self.assertFalse(traslado.trasladado)
        self.assertEqual(traslado.bodega_origen_id,
                         self.bodega_punto_venta_abierto_dos.id)
        self.assertEqual(traslado.bodega_destino.id,
                         self.bodega_punto_venta_abierto.id)
        self.assertEqual(traslado.creado_por.id,
                         self.colaborador_presente_dos.usuario.id)

    def test_crear_traslado_a_destino_bodega_no_principal_solo_pdv_destino_abierto(
            self):
        from ..services import traslado_inventario_crear
        self.punto_venta_abierto.abierto = False
        self.punto_venta_abierto.save()
        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Para realizar traslado a una bodega que no es principal, debe de haber alguien en el para recibirlo. Actualmente no hay nadie'}"
        ):
            traslado_inventario_crear(
                bodega_origen_id=self.bodega_inventario.id,
                bodega_destino_id=self.bodega_punto_venta_abierto.id,
                usuario_crea_id=self.usuario.id)
        self.punto_venta_abierto.abierto = True
        self.punto_venta_abierto.usuario_actual = None
        self.punto_venta_abierto.save()

        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Para realizar traslado a una bodega que no es principal, debe de haber alguien en el para recibirlo. Actualmente no hay nadie'}"
        ):
            traslado_inventario_crear(
                bodega_origen_id=self.bodega_inventario.id,
                bodega_destino_id=self.bodega_punto_venta_abierto.id,
                usuario_crea_id=self.usuario.id)

    def test_crear_traslado_origen_bodega_no_principal_solo_pdv_origen_abierto(
            self):
        from ..services import traslado_inventario_crear
        self.punto_venta_abierto_dos.abierto = False
        self.punto_venta_abierto_dos.save()
        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Para realizar traslado desde una bodega que no es principal, debe de haber alguien en el punto de venta para crearlo. Actualmente no hay nadie'}"
        ):
            traslado_inventario_crear(
                bodega_origen_id=self.bodega_punto_venta_abierto_dos.id,
                bodega_destino_id=self.bodega_punto_venta_abierto.id,
                usuario_crea_id=self.colaborador_presente_dos.usuario.id)

        self.punto_venta_abierto_dos.abierto = True
        self.punto_venta_abierto_dos.save()

        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Sólo el usuario de la bodega origen puede crear un traslado desde su lugar'}"
        ):
            traslado_inventario_crear(
                bodega_origen_id=self.bodega_punto_venta_abierto_dos.id,
                bodega_destino_id=self.bodega_punto_venta_abierto.id,
                usuario_crea_id=self.colaborador_presente.usuario.id)

        self.punto_venta_abierto_dos.usuario_actual = None
        self.punto_venta_abierto_dos.save()
        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Para realizar traslado desde una bodega que no es principal, debe de haber alguien en el punto de venta para crearlo. Actualmente no hay nadie'}"
        ):
            traslado_inventario_crear(
                bodega_origen_id=self.bodega_punto_venta_abierto_dos.id,
                bodega_destino_id=self.bodega_punto_venta_abierto.id,
                usuario_crea_id=self.colaborador_presente_dos.usuario.id)

    def test_traslado_inventario_adicionar_item(self):
        from ..services import traslado_inventario_crear, traslado_inventario_adicionar_item
        traslado = traslado_inventario_crear(
            bodega_origen_id=self.bodega_inventario.id,
            bodega_destino_id=self.bodega_punto_venta_abierto.id,
            usuario_crea_id=self.usuario.id)
        traslado_inventario_adicionar_item(traslado_inventario_id=traslado.id,
                                           producto_id=self.producto_uno.id,
                                           cantidad=10)
        traslado_inventario_adicionar_item(traslado_inventario_id=traslado.id,
                                           producto_id=self.producto_dos.id,
                                           cantidad=5)
        traslado_inventario_adicionar_item(traslado_inventario_id=traslado.id,
                                           producto_id=self.producto_tres.id,
                                           cantidad=15)
        self.assertTrue(
            traslado.detalles.filter(producto=self.producto_uno).exists())
        self.assertTrue(
            traslado.detalles.filter(
                producto=self.producto_uno).first().cantidad == 10)
        self.assertTrue(
            traslado.detalles.filter(producto=self.producto_dos).exists())
        self.assertTrue(
            traslado.detalles.filter(
                producto=self.producto_dos).first().cantidad == 5)
        self.assertTrue(
            traslado.detalles.filter(producto=self.producto_tres).exists())
        self.assertTrue(
            traslado.detalles.filter(
                producto=self.producto_tres).first().cantidad == 15)
        self.assertFalse(
            traslado.detalles.filter(producto=self.producto_cuatro).exists())

    def test_traslado_inventario_adicionar_item_sin_nunca_existencia(self):
        from ..services import traslado_inventario_crear, traslado_inventario_adicionar_item
        traslado = traslado_inventario_crear(
            bodega_origen_id=self.bodega_inventario.id,
            bodega_destino_id=self.bodega_punto_venta_abierto.id,
            usuario_crea_id=self.usuario.id)
        with self.assertRaisesMessage(
                ValidationError, "{'_error': 'No hay existencias de producto"):
            traslado_inventario_adicionar_item(
                traslado_inventario_id=traslado.id,
                producto_id=self.producto_cuatro.id,
                cantidad=10)

    def test_traslado_inventario_adicionar_item_cantidad_mayor_a_existencia(
            self):
        from ..services import traslado_inventario_crear, traslado_inventario_adicionar_item
        traslado = traslado_inventario_crear(
            bodega_origen_id=self.bodega_inventario.id,
            bodega_destino_id=self.bodega_punto_venta_abierto.id,
            usuario_crea_id=self.usuario.id)
        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'No hay existencias suficientes del producto seleccionado. Solo hay"
        ):
            traslado_inventario_adicionar_item(
                traslado_inventario_id=traslado.id,
                producto_id=self.producto_dos.id,
                cantidad=200)

    def test_traslado_inventario_realizar_traslado(self):
        from ..services import (traslado_inventario_crear,
                                traslado_inventario_adicionar_item,
                                traslado_inventario_realizar_traslado)
        from ..models import MovimientoInventarioDetalle

        traslado = traslado_inventario_crear(
            bodega_origen_id=self.bodega_inventario.id,
            bodega_destino_id=self.bodega_punto_venta_abierto.id,
            usuario_crea_id=self.usuario.id)
        self.assertTrue(traslado.estado == 1)
        traslado_inventario_adicionar_item(traslado_inventario_id=traslado.id,
                                           producto_id=self.producto_uno.id,
                                           cantidad=1)
        traslado_inventario_adicionar_item(traslado_inventario_id=traslado.id,
                                           producto_id=self.producto_dos.id,
                                           cantidad=2)
        traslado_inventario_adicionar_item(traslado_inventario_id=traslado.id,
                                           producto_id=self.producto_tres.id,
                                           cantidad=3)

        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'El traslado a esta bodega sólamente puede realizarlo"
        ):
            traslado_inventario_realizar_traslado(
                traslado_inventario_id=traslado.id, usuario_id=self.usuario.id)

        traslado_inventario_realizar_traslado(
            traslado_inventario_id=traslado.id,
            usuario_id=self.punto_venta_abierto.usuario_actual.id)
        traslado.refresh_from_db()
        self.assertTrue(traslado.estado == 3)
        self.assertTrue(traslado.recibido_por.id ==
                        self.punto_venta_abierto.usuario_actual.id)
        self.assertTrue(traslado.movimiento_origen.cargado)
        self.assertTrue(traslado.movimiento_destino.cargado)
        [
            self.assertTrue(x.es_ultimo_saldo)
            for x in traslado.movimiento_origen.detalles.all()
        ]
        [
            self.assertTrue(x.es_ultimo_saldo)
            for x in traslado.movimiento_destino.detalles.all()
        ]

        movimientos_iniciales_producto_uno = MovimientoInventarioDetalle.objects.filter(
            producto_id=self.producto_uno.id).exclude(movimiento_id__in=[
                traslado.movimiento_origen_id, traslado.movimiento_destino_id
            ])
        [
            self.assertFalse(x.es_ultimo_saldo)
            for x in movimientos_iniciales_producto_uno.all()
        ]

        movimientos_iniciales_producto_dos = MovimientoInventarioDetalle.objects.filter(
            producto_id=self.producto_dos.id).exclude(movimiento_id__in=[
                traslado.movimiento_origen_id, traslado.movimiento_destino_id
            ])
        [
            self.assertFalse(x.es_ultimo_saldo)
            for x in movimientos_iniciales_producto_dos.all()
        ]

        movimientos_iniciales_producto_tres = MovimientoInventarioDetalle.objects.filter(
            producto_id=self.producto_tres.id).exclude(movimiento_id__in=[
                traslado.movimiento_origen_id, traslado.movimiento_destino_id
            ])
        [
            self.assertFalse(x.es_ultimo_saldo)
            for x in movimientos_iniciales_producto_tres.all()
        ]

        md_detalle_producto_uno = traslado.movimiento_destino.detalles.filter(
            producto=self.producto_uno).first()
        self.assertTrue(md_detalle_producto_uno.saldo_cantidad == 1)
        self.assertTrue(int(md_detalle_producto_uno.entra_cantidad) == 1)
        self.assertTrue(int(md_detalle_producto_uno.costo_unitario) == 500)
        self.assertTrue(int(md_detalle_producto_uno.saldo_costo) == 500)
        self.assertTrue(
            int(md_detalle_producto_uno.costo_unitario_promedio) == 500)

        md_detalle_producto_dos = traslado.movimiento_destino.detalles.filter(
            producto=self.producto_dos).first()
        self.assertTrue(md_detalle_producto_dos.saldo_cantidad == 2)
        self.assertTrue(int(md_detalle_producto_dos.entra_cantidad) == 2)
        self.assertTrue(
            int(md_detalle_producto_dos.costo_unitario) == int(40000 / 30))
        self.assertTrue(
            int(md_detalle_producto_dos.saldo_costo) == int(40000 / 30) * 2)
        self.assertTrue(
            int(md_detalle_producto_dos.costo_unitario_promedio) == int(40000 /
                                                                        30))

        md_detalle_producto_tres = traslado.movimiento_destino.detalles.filter(
            producto=self.producto_tres).first()
        self.assertTrue(md_detalle_producto_tres.saldo_cantidad == 3)
        self.assertTrue(int(md_detalle_producto_tres.entra_cantidad) == 3)
        self.assertTrue(
            int(md_detalle_producto_tres.costo_unitario) == int(90000 / 40))
        self.assertTrue(
            int(md_detalle_producto_tres.saldo_costo) == int(90000 / 40) * 3)
        self.assertTrue(
            int(md_detalle_producto_tres.costo_unitario_promedio) == int(
                90000 / 40))

    def test_traslado_inventario_set_estado_esperando_traslado(self):
        from ..services import (
            traslado_inventario_crear, traslado_inventario_adicionar_item,
            traslado_inventario_set_estado_esperando_traslado)

        traslado = traslado_inventario_crear(
            bodega_origen_id=self.bodega_inventario.id,
            bodega_destino_id=self.bodega_punto_venta_abierto.id,
            usuario_crea_id=self.usuario.id)
        self.assertTrue(traslado.estado == 1)
        traslado_inventario_adicionar_item(traslado_inventario_id=traslado.id,
                                           producto_id=self.producto_uno.id,
                                           cantidad=1)
        traslado_inventario_adicionar_item(traslado_inventario_id=traslado.id,
                                           producto_id=self.producto_dos.id,
                                           cantidad=2)
        traslado_inventario_adicionar_item(traslado_inventario_id=traslado.id,
                                           producto_id=self.producto_tres.id,
                                           cantidad=3)
        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Sólo el usuario que creo el traslado puede solicitar que se realice traslado'}"
        ):
            traslado_inventario_set_estado_esperando_traslado(
                traslado_inventario_id=traslado.id,
                usuario_id=self.punto_venta_abierto.usuario_actual.id)
        traslado = traslado_inventario_set_estado_esperando_traslado(
            traslado_inventario_id=traslado.id, usuario_id=self.usuario.id)
        self.assertTrue(traslado.estado == 2)
Example #13
0
    def colaboradoresSetUp(self):
        # region Puntos de Venta
        from puntos_venta.factories import PuntoVentaFactory
        from puntos_venta.services import punto_venta_abrir
        self.punto_venta = PuntoVentaFactory(abierto=False,
                                             usuario_actual=None)
        self.bodega = self.punto_venta.bodega
        self.bodega.es_principal = False
        self.bodega.save()
        self.punto_venta_dos = PuntoVentaFactory(abierto=False,
                                                 usuario_actual=None)
        self.bodega_dos = self.punto_venta.bodega
        self.bodega_dos.es_principal = False
        self.bodega_dos.save()
        # endregion

        # region Colaboradores
        from terceros.factories import ColaboradorFactory
        from terceros.services import tercero_registra_entrada, tercero_set_new_pin, colaborador_crear

        # region Colaborador Uno
        self.colaborador_base = ColaboradorFactory.build(usuario=None)
        self.colaborador_base.pop('es_colaborador')
        self.colaborador_base.pop('usuario')
        self.colaborador_cajero = colaborador_crear(self.colaborador_base)

        tercero_set_new_pin(tercero_id=self.colaborador_cajero.id,
                            raw_pin='0000')
        tercero_registra_entrada(tercero_id=self.colaborador_cajero.id,
                                 raw_pin='0000')
        self.punto_venta, self.punto_venta_turno = punto_venta_abrir(
            usuario_pv_id=self.colaborador_cajero.usuario.id,
            punto_venta_id=self.punto_venta.id,
            base_inicial_efectivo=500000)
        # endregion

        # region Colaborador Dos

        self.colaborador_dos_base = ColaboradorFactory.build(usuario=None)
        self.colaborador_dos_base.pop('es_colaborador')
        self.colaborador_dos_base.pop('usuario')
        self.colaborador_dos = colaborador_crear(self.colaborador_dos_base)

        tercero_set_new_pin(tercero_id=self.colaborador_dos.id, raw_pin='0000')
        tercero_registra_entrada(tercero_id=self.colaborador_dos.id,
                                 raw_pin='0000')
        # endregion

        # region Colaborador Mesero

        self.colaborador_tres_base = ColaboradorFactory.build(usuario=None)
        self.colaborador_tres_base.pop('es_colaborador')
        self.colaborador_tres_base.pop('usuario')
        self.colaborador_mesero = colaborador_crear(self.colaborador_tres_base)

        tercero_set_new_pin(tercero_id=self.colaborador_mesero.id,
                            raw_pin='0000')
        tercero_registra_entrada(tercero_id=self.colaborador_mesero.id,
                                 raw_pin='0000')
        # endregion

        # region Colaborador Mesero Dos

        self.colaborador_cuatro_base = ColaboradorFactory.build(usuario=None)
        self.colaborador_cuatro_base.pop('es_colaborador')
        self.colaborador_cuatro_base.pop('usuario')
        self.colaborador_mesero_dos = colaborador_crear(
            self.colaborador_cuatro_base)

        tercero_set_new_pin(tercero_id=self.colaborador_mesero_dos.id,
                            raw_pin='0000')
        tercero_registra_entrada(tercero_id=self.colaborador_mesero_dos.id,
                                 raw_pin='0000')
Example #14
0
class OperacionCajaServicesTests(TestCase):
    def setUp(self):
        from terceros.factories import AcompananteFactory, ColaboradorFactory, ProveedorFactory
        from puntos_venta.factories import PuntoVentaFactory
        from puntos_venta.services import punto_venta_abrir
        from terceros.services import (tercero_set_new_pin,
                                       tercero_registra_entrada)

        self.punto_venta = PuntoVentaFactory(abierto=False,
                                             usuario_actual=None)
        self.colaborador_pdv = ColaboradorFactory()
        tercero_set_new_pin(self.colaborador_pdv.id, '0000')
        tercero_registra_entrada(self.colaborador_pdv.id, '0000')
        punto_venta_abrir(usuario_pv_id=self.colaborador_pdv.usuario.id,
                          punto_venta_id=self.punto_venta.id,
                          base_inicial_efectivo=0)

        self.colaborador = ColaboradorFactory()
        tercero_set_new_pin(self.colaborador.id, '0000')
        tercero_registra_entrada(self.colaborador.id, '0000')

        self.acompanante = AcompananteFactory()
        tercero_set_new_pin(self.acompanante.id, '0000')
        tercero_registra_entrada(self.acompanante.id, '0000')

        self.proveedor = ProveedorFactory()

    def test_operacion_caja_acompanante(self):
        from ..factories import ConceptoOperacionCajaFactory
        from ..services import operacion_caja_crear, operacion_caja_generar_recibo
        concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                          grupo='A',
                                                          tipo_cuenta='CXP')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            tercero_id=self.acompanante.id,
            valor=23000)
        self.assertEqual(operacion_caja.valor, 23000)
        self.assertIsNotNone(operacion_caja.cuenta)

        concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                          grupo='A',
                                                          tipo_cuenta='CXC')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            tercero_id=self.acompanante.id,
            valor=23000)
        self.assertEqual(operacion_caja.valor, -23000)
        self.assertIsNotNone(operacion_caja.cuenta)

        comprobante = operacion_caja_generar_recibo(operacion_caja.id)
        comprobante.write_pdf(
            target=
            'media/pruebas_pdf/comprobante_operacion_caja_egreso_acompanante.pdf'
        )

        concepto_operacion = ConceptoOperacionCajaFactory(tipo='E',
                                                          grupo='A',
                                                          tipo_cuenta='CXC')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            tercero_id=self.acompanante.id,
            valor=18500,
            observacion='hola')
        self.assertEqual(operacion_caja.valor, -18500)
        self.assertIsNotNone(operacion_caja.cuenta)

        concepto_operacion = ConceptoOperacionCajaFactory(tipo='E',
                                                          grupo='A',
                                                          tipo_cuenta='CXP')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            tercero_id=self.acompanante.id,
            valor=18500,
            observacion='hola')
        self.assertEqual(operacion_caja.valor, 18500)
        self.assertIsNotNone(operacion_caja.cuenta)

        comprobante = operacion_caja_generar_recibo(operacion_caja.id)
        comprobante.write_pdf(
            target=
            'media/pruebas_pdf/comprobante_operacion_caja_ingreso_acompanante.pdf'
        )

    def test_operacion_caja_transacciones(self):
        from ..factories import ConceptoOperacionCajaFactory
        from ..services import operacion_caja_crear
        concepto_operacion = ConceptoOperacionCajaFactory(tipo='I', grupo='A')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            tercero_id=self.acompanante.id,
            valor=1000,
            observacion='hola')
        transaccion_caja = operacion_caja.transacciones_caja.last()
        self.assertEqual(transaccion_caja.tipo, 'I')
        self.assertEqual(transaccion_caja.tipo_dos, 'OPERA_CAJA')
        self.assertEqual(transaccion_caja.valor_efectivo, 1000)

        concepto_operacion = ConceptoOperacionCajaFactory(tipo='E', grupo='A')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            tercero_id=self.acompanante.id,
            valor=2000,
            observacion='hola')
        self.assertEqual(operacion_caja.transacciones_caja.all().count(), 1)
        transaccion_caja = operacion_caja.transacciones_caja.last()
        self.assertEqual(transaccion_caja.tipo, 'E')
        self.assertEqual(transaccion_caja.tipo_dos, 'OPERA_CAJA')
        self.assertEqual(transaccion_caja.valor_efectivo, -2000)

    def test_operacion_caja_colaborador(self):
        from ..factories import ConceptoOperacionCajaFactory
        from ..services import operacion_caja_crear
        concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                          grupo='C',
                                                          tipo_cuenta='CXP')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            tercero_id=self.colaborador.id,
            valor=1000,
            observacion='hola')
        self.assertEqual(operacion_caja.valor, 1000)
        self.assertIsNotNone(operacion_caja.cuenta)

        concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                          grupo='C',
                                                          tipo_cuenta='CXC')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            tercero_id=self.colaborador.id,
            valor=1000,
            observacion='hola')
        self.assertEqual(operacion_caja.valor, -1000)
        self.assertIsNotNone(operacion_caja.cuenta)

        concepto_operacion = ConceptoOperacionCajaFactory(tipo='E',
                                                          grupo='C',
                                                          tipo_cuenta='CXC')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            tercero_id=self.colaborador.id,
            valor=1000,
            observacion='hola')
        self.assertEqual(operacion_caja.valor, -1000)
        self.assertIsNotNone(operacion_caja.cuenta)

        concepto_operacion = ConceptoOperacionCajaFactory(tipo='E',
                                                          grupo='C',
                                                          tipo_cuenta='CXP')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            tercero_id=self.colaborador.id,
            valor=1000,
            observacion='hola')
        self.assertEqual(operacion_caja.valor, 1000)
        self.assertIsNotNone(operacion_caja.cuenta)

    def test_operacion_caja_proveedor(self):
        from ..factories import ConceptoOperacionCajaFactory
        from ..services import operacion_caja_crear
        concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                          grupo='P',
                                                          tipo_cuenta='NA')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            tercero_id=self.proveedor.id,
            valor=1000,
            observacion='hola')
        self.assertEqual(operacion_caja.valor, 1000)
        self.assertIsNone(operacion_caja.cuenta)

        concepto_operacion = ConceptoOperacionCajaFactory(tipo='E',
                                                          grupo='P',
                                                          tipo_cuenta='NA')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            tercero_id=self.proveedor.id,
            valor=1000,
            observacion='hola')
        self.assertEqual(operacion_caja.valor, -1000)
        self.assertIsNone(operacion_caja.cuenta)

    def test_operacion_caja_taxi(self):
        from ..factories import ConceptoOperacionCajaFactory
        from ..services import operacion_caja_crear
        concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                          grupo='T',
                                                          tipo_cuenta='NA')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            valor=1000,
            observacion='hola')
        self.assertEqual(operacion_caja.valor, 1000)
        self.assertIsNone(operacion_caja.cuenta)

        concepto_operacion = ConceptoOperacionCajaFactory(tipo='E',
                                                          grupo='T',
                                                          tipo_cuenta='NA')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            valor=1000,
            observacion='hola')
        self.assertEqual(operacion_caja.valor, -1000)
        self.assertIsNone(operacion_caja.cuenta)

    def test_operacion_caja_otro(self):
        from ..factories import ConceptoOperacionCajaFactory
        from ..services import operacion_caja_crear
        concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                          grupo='O',
                                                          tipo_cuenta='NA')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            valor=1000,
            observacion='hola')
        self.assertEqual(operacion_caja.valor, 1000)
        self.assertIsNone(operacion_caja.cuenta)

        concepto_operacion = ConceptoOperacionCajaFactory(tipo='E',
                                                          grupo='O',
                                                          tipo_cuenta='NA')
        operacion_caja = operacion_caja_crear(
            concepto_id=concepto_operacion.id,
            usuario_pdv_id=self.colaborador_pdv.usuario.id,
            valor=1000,
            observacion='hola')
        self.assertEqual(operacion_caja.valor, -1000)
        self.assertIsNone(operacion_caja.cuenta)

    def test_operacion_caja_colaborador_creador_punto_venta_turno(self):
        from ..factories import ConceptoOperacionCajaFactory
        from ..services import operacion_caja_crear

        turno = self.colaborador_pdv.turno_punto_venta_abierto
        turno.finish = timezone.now()
        turno.save()

        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Quien crea de la operación debe tener un turno de punto de venta abierto'}"
        ):
            concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                              grupo='A')
            operacion_caja_crear(
                concepto_id=concepto_operacion.id,
                usuario_pdv_id=self.colaborador_pdv.usuario.id,
                tercero_id=self.acompanante.id,
                valor=1000,
                observacion='hola')

    def test_operacion_caja_valor_solo_positivo(self):
        from ..factories import ConceptoOperacionCajaFactory
        from ..services import operacion_caja_crear
        concepto_operacion = ConceptoOperacionCajaFactory(tipo='E', grupo='T')
        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'El valor ingresado debe ser positivo mayor a cero'}"
        ):
            operacion_caja_crear(
                concepto_id=concepto_operacion.id,
                usuario_pdv_id=self.colaborador_pdv.usuario.id,
                valor=-1000,
                observacion='hola')

    def test_operacion_caja_colaborador_acompanante_presentes(self):
        from ..factories import ConceptoOperacionCajaFactory
        from ..services import operacion_caja_crear
        from terceros.services import tercero_registra_salida, tercero_registra_entrada

        tercero_registra_salida(self.colaborador_pdv.id, '0000')
        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Quien crea de la operación debe estar presente'}"
        ):
            concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                              grupo='A')
            operacion_caja_crear(
                concepto_id=concepto_operacion.id,
                usuario_pdv_id=self.colaborador_pdv.usuario.id,
                tercero_id=self.acompanante.id,
                valor=1000,
                observacion='hola')

        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'A quien se le crea la operación debe estar presente.'}"
        ):
            tercero_registra_entrada(self.colaborador_pdv.id, '0000')
            tercero_registra_salida(self.acompanante.id, '0000')
            concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                              grupo='A')
            operacion_caja_crear(
                concepto_id=concepto_operacion.id,
                usuario_pdv_id=self.colaborador_pdv.usuario.id,
                tercero_id=self.acompanante.id,
                valor=1000,
                observacion='hola')

        usuario = self.colaborador_pdv.usuario
        self.colaborador_pdv.usuario = None
        self.colaborador_pdv.save()
        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Quien crea la operación debe tener un tercero'}"):
            concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                              grupo='A')
            operacion_caja_crear(concepto_id=concepto_operacion.id,
                                 usuario_pdv_id=usuario.id,
                                 tercero_id=self.colaborador_pdv.id,
                                 valor=1000,
                                 observacion='hola')

    def test_operacion_caja_grupos(self):
        from ..factories import ConceptoOperacionCajaFactory
        from ..services import operacion_caja_crear
        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Un tipo de operacion de caja para acompañante solo debe ser creada para un acompañante'}"
        ):
            concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                              grupo='A')
            operacion_caja_crear(
                concepto_id=concepto_operacion.id,
                usuario_pdv_id=self.colaborador_pdv.usuario.id,
                tercero_id=self.proveedor.id,
                valor=1000,
                observacion='hola')

        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Un tipo de operacion de caja para colaborador solo debe ser creada para un colaborador'}"
        ):
            concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                              grupo='C')
            operacion_caja_crear(
                concepto_id=concepto_operacion.id,
                usuario_pdv_id=self.colaborador_pdv.usuario.id,
                tercero_id=self.proveedor.id,
                valor=1000,
                observacion='hola')

        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Un tipo de operacion de caja para proveedor solo debe ser creada para un proveedor'}"
        ):
            concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                              grupo='P')
            operacion_caja_crear(
                concepto_id=concepto_operacion.id,
                usuario_pdv_id=self.colaborador_pdv.usuario.id,
                tercero_id=self.acompanante.id,
                valor=1000,
                observacion='hola')

        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Para el concepto seleccionado se requiere un tercero'}"
        ):
            concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                              grupo='A')
            operacion_caja_crear(
                concepto_id=concepto_operacion.id,
                usuario_pdv_id=self.colaborador_pdv.usuario.id,
                valor=1000,
                observacion='hola')

        with self.assertRaisesMessage(
                ValidationError,
                "{'_error': 'Para los conceptos Otro y Taxi no se utiliza tercero'}"
        ):
            concepto_operacion = ConceptoOperacionCajaFactory(tipo='I',
                                                              grupo='O')
            operacion_caja_crear(
                concepto_id=concepto_operacion.id,
                usuario_pdv_id=self.colaborador_pdv.usuario.id,
                tercero_id=self.acompanante.id,
                valor=1000,
                observacion='hola')
Example #15
0
    def setUp(self):
        from terceros.factories import AcompananteFactory, ColaboradorFactory
        from puntos_venta.factories import PuntoVentaFactory
        from puntos_venta.services import punto_venta_abrir
        from habitaciones.factories import (HabitacionFactory,
                                            TipoHabitacionFactory)
        from servicios.services import servicio_crear_nuevo, servicio_iniciar
        from terceros_acompanantes.factories import (
            CategoriaFraccionTiempoFactory, FraccionTiempoFactory,
            CategoriaAcompananteFactory)
        from terceros.services import (acompanante_crear, tercero_set_new_pin,
                                       tercero_registra_entrada,
                                       colaborador_crear)

        self.tipo_habitacion_uno = TipoHabitacionFactory(valor=40000)
        self.tipo_habitacion_dos = TipoHabitacionFactory(valor=60000)
        self.tipo_habitacion_tres = TipoHabitacionFactory(valor=30000)

        self.habitacion_uno = HabitacionFactory(tipo=self.tipo_habitacion_uno)
        self.habitacion_dos = HabitacionFactory(tipo=self.tipo_habitacion_dos)
        self.habitacion_tres = HabitacionFactory(
            tipo=self.tipo_habitacion_tres)

        # Colaborador para transacciones
        colaborador_base = ColaboradorFactory.build(usuario=None)
        colaborador_base.pop('es_colaborador')
        colaborador_base.pop('usuario')

        self.colaborador = colaborador_crear(colaborador_base)
        self.colaborador, pin_nuevo = tercero_set_new_pin(
            self.colaborador.id, '0000')
        tercero_registra_entrada(tercero_id=self.colaborador.id,
                                 raw_pin='0000')
        self.punto_venta = PuntoVentaFactory(abierto=False,
                                             usuario_actual=None)
        self.punto_venta, self.punto_venta_turno = punto_venta_abrir(
            punto_venta_id=self.punto_venta.id,
            usuario_pv_id=self.colaborador.usuario.id,
            base_inicial_efectivo=0)

        # Acompanante
        self.categoria_modelo = CategoriaAcompananteFactory()
        self.fraccion_tiempo_30 = FraccionTiempoFactory(minutos=30)
        self.fraccion_tiempo_45 = FraccionTiempoFactory(minutos=45)
        self.fraccion_tiempo_60 = FraccionTiempoFactory(minutos=60)
        self.categoria_modelo = CategoriaAcompananteFactory()
        self.categoria_fraccion_tiempo_30 = CategoriaFraccionTiempoFactory(
            categoria=self.categoria_modelo,
            fraccion_tiempo=self.fraccion_tiempo_30,
            valor=100000)
        self.categoria_fraccion_tiempo_45 = CategoriaFraccionTiempoFactory(
            categoria=self.categoria_modelo,
            fraccion_tiempo=self.fraccion_tiempo_45,
            valor=150000)
        self.categoria_fraccion_tiempo_60 = CategoriaFraccionTiempoFactory(
            categoria=self.categoria_modelo,
            fraccion_tiempo=self.fraccion_tiempo_60,
            valor=200000)
        acompanante_base = AcompananteFactory.build(
            usuario=None, categoria_modelo=self.categoria_modelo)
        acompanante_base.pop('es_acompanante')
        acompanante_base.pop('usuario')

        self.acompanante = acompanante_crear(acompanante_base)

        self.acompanante_base_dos = AcompananteFactory.build(
            usuario=None, categoria_modelo=self.categoria_modelo)
        self.acompanante_base_dos.pop('es_acompanante')
        self.acompanante_base_dos.pop('usuario')
        self.acompanante_dos = acompanante_crear(self.acompanante_base_dos)

        self.acompanante, pin = tercero_set_new_pin(
            tercero_id=self.acompanante.id, raw_pin='0000')
        tercero_registra_entrada(tercero_id=self.acompanante.id,
                                 raw_pin='0000')

        self.acompanante_dos, pin = tercero_set_new_pin(
            tercero_id=self.acompanante_dos.id, raw_pin='0000')
        tercero_registra_entrada(tercero_id=self.acompanante_dos.id,
                                 raw_pin='0000')

        self.array_servicios = [
            {
                'tercero_id':
                self.acompanante.id,
                'categoria_fraccion_tiempo_id':
                self.categoria_fraccion_tiempo_30.id
            },
            {
                'tercero_id':
                self.acompanante_dos.id,
                'categoria_fraccion_tiempo_id':
                self.categoria_fraccion_tiempo_45.id
            },
            {
                'tercero_id':
                self.acompanante_dos.id,
                'categoria_fraccion_tiempo_id':
                self.categoria_fraccion_tiempo_60.id
            },
            {
                'tercero_id':
                self.acompanante.id,
                'categoria_fraccion_tiempo_id':
                self.categoria_fraccion_tiempo_60.id
            },
            {
                'tercero_id':
                self.acompanante.id,
                'categoria_fraccion_tiempo_id':
                self.categoria_fraccion_tiempo_45.id
            },
        ]

        self.array_servicios_id = []
        for servicio in self.array_servicios:
            tercero_id = servicio.pop('tercero_id')
            categoria_fraccion_tiempo_id = servicio.pop(
                'categoria_fraccion_tiempo_id')

            servicio_adicionado = servicio_crear_nuevo(
                habitacion_id=self.habitacion_uno.id,
                acompanante_id=tercero_id,
                categoria_fraccion_tiempo_id=categoria_fraccion_tiempo_id,
                usuario_pdv_id=self.colaborador.usuario.id)
            self.array_servicios_id.append(servicio_adicionado.id)

        servicios_a_iniciar = self.habitacion_uno.servicios.filter(estado=0)
        [
            servicio_iniciar(servicio_id=servicio.id,
                             usuario_pdv_id=self.colaborador.usuario.id)
            for servicio in servicios_a_iniciar.order_by('id').all()
        ]