def test_comprobante_asociado_acepta_iva(self, afip_mock):
        afip = afip_mock()
        afip.consultar_proximo_numero.return_value = 11

        gravado = Gravado.objects.get(pk=1)
        importe = Decimal('100.21')

        nuevo_comp = crear_comprobante_asociado(
            1, importe, '', ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO, gravado.id)
        importe_total = importe + calcular_iva(importe, gravado.porcentaje)

        assert nuevo_comp.total_facturado == importe_total.quantize(
            Decimal(10)**-2)
        assert nuevo_comp.gravado == gravado

        afip.consultar_proximo_numero.return_value = 12
        gravado = Gravado.objects.get(pk=2)

        nuevo_comp = crear_comprobante_asociado(
            1, importe, '', ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO, gravado.id)
        importe_total = importe + calcular_iva(importe, gravado.porcentaje)

        assert nuevo_comp.total_facturado == importe_total.quantize(
            Decimal(10)**-2)
        assert nuevo_comp.gravado == gravado
    def test_crear_comprobante_asociado_falla_si_no_se_realiza_la_conexion_con_afip(
            self, afip_mock):
        afip_mock.side_effect = AfipErrorRed

        with self.assertRaises(AfipErrorRed):
            crear_comprobante_asociado(1, Decimal(100), '',
                                       ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO)
 def test_falla_crear_comprobante_asociado_si_es_liquidacion(self, mock):
     nuevo_comp = Comprobante.objects.get(pk=1)
     nuevo_comp.tipo_comprobante = TipoComprobante.objects.get(
         pk=ID_TIPO_COMPROBANTE_LIQUIDACION)
     nuevo_comp.save()
     with self.assertRaises(TipoComprobanteAsociadoNoValidoException):
         crear_comprobante_asociado(1, Decimal(500), '',
                                    ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO)
    def test_crear_comprobante_asociado_falla_si_afip_no_valida_el_comprobante(
            self, afip_mock):
        afip = afip_mock()

        afip.emitir_comprobante.side_effect = AfipErrorValidacion

        with self.assertRaises(AfipErrorValidacion):
            crear_comprobante_asociado(1, Decimal(100), '',
                                       ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO)
Exemple #5
0
    def crear_comprobante_asociado(self, request, pk=None):
        id_comprobante_asociado = int(request.POST['id-comprobante-asociado'])
        importe = Decimal(request.POST['importe'])
        concepto = request.POST['concepto']
        tipo = request.POST.get('tipo', None)
        iva = request.POST.get('iva', None)

        try:
            comp = crear_comprobante_asociado(id_comprobante_asociado, importe, concepto, tipo, iva)
            content = {'data': ComprobanteSmallSerializer(comp).data , 'message': 'Comprobante creado correctamente'}
            return Response(content, status=status.HTTP_201_CREATED)
        except Comprobante.DoesNotExist:
            content = {'data': {}, 'message': 'El comprobante seleccionado no existe en la base de datos.'}
            return Response(content, status=status.HTTP_400_BAD_REQUEST)
        except TipoComprobanteAsociadoNoValidoException:
            content =  {'data': {}, 'message': 'No se puede crear un comprobante asociado con el tipo seleccionado.'}
            return Response(content, status=status.HTTP_400_BAD_REQUEST)
        except AfipErrorRed as e:
            content = {'data': {}, 'message': 'No se pudo realizar la conexion con Afip, intente mas tarde.\nError: ' + str(e)}
            return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        except AfipErrorValidacion as e:
            content = {'data': {}, 'message': 'Afip rechazo el comprobante.\nError: ' + str(e)}
            return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        except Exception as e:
            content = {'data': {}, 'message': 'Ocurrio un error inesperado.\nError: ' + str(e)}
            return Response(content, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
    def test_guarda_decimales_en_comprobante(self, afip_mock):
        afip = afip_mock()
        afip.consultar_proximo_numero.return_value = 11

        nuevo_comp = crear_comprobante_asociado(
            1, Decimal(200.52), '', ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO)

        assert nuevo_comp.total_facturado == Decimal(200.52).quantize(
            Decimal(10)**-2)
    def test_comprobante_asociado_permite_crear_distintos_tipos(
            self, afip_mock):
        afip = afip_mock()
        afip.consultar_proximo_numero.return_value = 11

        assert Comprobante.objects.get(
            pk=1).tipo_comprobante.id == ID_TIPO_COMPROBANTE_FACTURA

        nuevo_comp = crear_comprobante_asociado(
            1, Decimal(1), '', ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO)

        assert nuevo_comp.tipo_comprobante.id == ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO

        afip.consultar_proximo_numero.return_value = 11

        nuevo_comp = crear_comprobante_asociado(
            1, Decimal(1), '', ID_TIPO_COMPROBANTE_NOTA_DE_DEBITO)

        assert nuevo_comp.tipo_comprobante.id == ID_TIPO_COMPROBANTE_NOTA_DE_DEBITO
    def test_no_guarda_linea_en_db_si_comprobante_falla(self, afip_mock):
        afip = afip_mock()
        afip.emitir_comprobante.side_effect = AfipErrorValidacion

        cantidad_inicial = LineaDeComprobante.objects.count()

        with self.assertRaises(AfipErrorValidacion):
            crear_comprobante_asociado(1, Decimal(199), '',
                                       ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO)

        assert cantidad_inicial == LineaDeComprobante.objects.count()

        afip.emitir_comprobante.side_effect = AfipErrorRed

        with self.assertRaises(AfipErrorRed):
            crear_comprobante_asociado(1, Decimal(100), '',
                                       ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO)

        assert cantidad_inicial == LineaDeComprobante.objects.count()
    def test_guarda_linea_en_db(self, afip_mock):
        afip = afip_mock()
        afip.consultar_proximo_numero.return_value = 15

        cantidad_inicial = LineaDeComprobante.objects.count()

        nuevo_comp = crear_comprobante_asociado(
            1, Decimal(400), '', ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO)

        assert cantidad_inicial + 1 == LineaDeComprobante.objects.count()
        assert LineaDeComprobante.objects.latest(
            'id'
        ).concepto == 'AJUSTA FACTURA {} No {}-{} SEGUN DEBITO APLICADO'.format(
            nuevo_comp.sub_tipo, nuevo_comp.nro_terminal, nuevo_comp.numero)

        nuevo_comp = crear_comprobante_asociado(
            1, Decimal(400), 'prueba', ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO)

        assert cantidad_inicial + 2 == LineaDeComprobante.objects.count()
        assert LineaDeComprobante.objects.latest('id').concepto == 'prueba'
Exemple #10
0
 def anular(self):
     from comprobante.comprobante_asociado import crear_comprobante_asociado
     if self.tipo_comprobante.id != ID_TIPO_COMPROBANTE_LIQUIDACION:
         linea = LineaDeComprobante.objects.filter(comprobante=self).first()
         nuevo_comprobante = crear_comprobante_asociado(
             self.id, linea.importe_neto,
             "Anula comprobante nro " + str(self.numero),
             TIPO_COMPROBANTE_ASOCIADO[self.tipo_comprobante.id])
     else:
         nuevo_comprobante = None
     self.estado = Comprobante.ANULADO
     self.save()
     return nuevo_comprobante
    def test_genera_nota_de_credito_si_se_envia_una_factura(self, afip_mock):
        afip = afip_mock()
        afip.consultar_proximo_numero.return_value = 10

        comp = Comprobante.objects.get(pk=1)

        nuevo_comp = crear_comprobante_asociado(
            1, Decimal(200), '', ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO)

        assert nuevo_comp.nombre_cliente == comp.nombre_cliente
        assert nuevo_comp.nro_cuit == comp.nro_cuit
        assert nuevo_comp.responsable == comp.responsable
        assert nuevo_comp.condicion_fiscal == comp.condicion_fiscal
        assert nuevo_comp.total_facturado == Decimal(200).quantize(
            Decimal(10)**-2)
        assert nuevo_comp.tipo_comprobante == TipoComprobante.objects.get(
            pk=ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO)
        assert nuevo_comp.nro_terminal == comp.nro_terminal
 def test_crear_comprobante_asociado_falla_si_el_comprobante_no_existe(
         self):
     with self.assertRaises(Comprobante.DoesNotExist):
         crear_comprobante_asociado(50, Decimal(100), '',
                                    ID_TIPO_COMPROBANTE_NOTA_DE_CREDITO)