def create(self, validated_data): neto = validated_data['importe_neto'] porcentaje_iva = Gravado.objects.get( pk=validated_data['gravado_id']).porcentaje iva = Decimal(neto) * Decimal(porcentaje_iva) / Decimal(100) del validated_data['gravado_id'] return LineaDeComprobante(sub_total=iva + neto, iva=iva.normalize(), **validated_data)
def test_emitir_factura_de_credito_electronica(self, mock_wsfev1, mock_wsaa): mock_wsaa.return_value.Autenticar.return_value = TICKET mock_wsaa.return_value.Expirado.return_value = False mock_wsfev1.return_value.Conectar.return_value = True mock_wsfev1.return_value.CompUltimoAutorizado.return_value = 0 mock_wsfev1.return_value.AgregarIva.return_value = None mock_wsfev1.return_value.CAESolicitar.return_value = None mock_wsfev1.return_value.Resultado = "A" mock_wsfev1.return_value.CAE = 1 mock_wsfev1.return_value.Vencimiento = "30191231" afip = Afip() numero = afip.consultar_proximo_numero( "Brunetti", 3, TipoComprobante.objects.get(pk=5), "B") factura_electronica = Comprobante( **{ "nombre_cliente": "Obra Social de los Trabajadores de la Planta Nuclear de Springfield", "domicilio_cliente": " - Springfield - (CP:2000)", "nro_cuit": "30604958640", "gravado_paciente": "", "condicion_fiscal": "EXENTO", "gravado": Gravado.objects.get(pk=1), "responsable": "Brunetti", "sub_tipo": "B", "estado": "PENDIENTE", "numero": numero, "nro_terminal": 3, "total_facturado": "100000.00", "total_cobrado": "0.00", "fecha_emision": datetime.today(), "fecha_recepcion": datetime.today(), "tipo_comprobante": TipoComprobante.objects.get(pk=5), }) lineas_factura_electronica = [ LineaDeComprobante( **{ "comprobante": factura_electronica, "importe_neto": 100000.00, "sub_total": 100000.00, "iva": 0, }) ] afip.emitir_comprobante(factura_electronica, lineas_factura_electronica) assert factura_electronica.cae == 1
def _crear_linea(comp, importe, concepto, gravado): iva = calcular_iva(importe, gravado.porcentaje) return [ LineaDeComprobante( **{ 'comprobante': comp, 'concepto': concepto if concepto != '' else 'AJUSTA FACTURA {} No {}-{} SEGUN DEBITO APLICADO'. format(comp.sub_tipo, comp.nro_terminal, comp.numero), 'importe_neto': importe, 'sub_total': importe + iva, 'iva': iva, }) ]
def main(): # Iniciamos el la conexion con la AFIP. afip = Afip() ######### # Factura ######### # En la realidad podemos usar nuestro conteneo de numeros de comprobantes sin problemas, (si no coinciden hay algun problema grave) # pero aca no y de todas formas es util tener a mano esta info. numero = afip.consultar_proximo_numero("Cedir", 91, TipoComprobante.objects.get(pk=1), "A") # Esto es para poder usar la proxima id que pide afip y es un motivo fuerte para NO CORRER ESTE SCRIPT EN PRODUCCION!! # (los numeros en homologacion y produccion no coincididen entonces en la DB dev tenemos colisiones de numero) # Comprobante.objects.filter(nro_terminal=91, tipo_comprobante=TipoComprobante.objects.get(pk=1), numero=numero).delete() # Creamos un Factura # Esto crea el objeto, pero no lo guarda en DB. factura = Comprobante(**{ "nombre_cliente": "Obra Social de los Trabajadores de la Planta Nuclear de Springfield", "domicilio_cliente": " - Springfield - (CP:2000)", "nro_cuit": "30604958640", "gravado_paciente": "", "condicion_fiscal": "EXENTO", "gravado": Gravado.objects.get(pk=1), "responsable": "Cedir", "sub_tipo": "A", "estado": "PENDIENTE", "numero": numero, "nro_terminal": 91, "total_facturado": "2800.00", "total_cobrado": "0.00", "fecha_emision": date.today(), "fecha_recepcion": date.today(), "tipo_comprobante": TipoComprobante.objects.get(pk=1), }) # Creamos una linea de comprobante, parte necesaria de un comprobante para nuestro sistema. lineas_factura = [LineaDeComprobante(**{ "comprobante": factura, "importe_neto": 2800.00, "sub_total": 2800.00, "iva": 0, })] # Emitimos el comprobante en la AFIP. afip.emitir_comprobante(factura, lineas_factura) # Revisamos que los datos esten bien. # Si la emicion funciono correctamente, los datos se setean directamente en el comprobante. print("FACTURA") print("-------") print((factura.cae)) print((factura.vencimiento_cae)) # Le pedimos el comprobante a la AFIP y verificamos que los datos coincidan. print((afip.consultar_comprobante(factura))) # Si la AFIP emitio bien, ahora se guardan. # Aca deberia haber codigo que hizo las verificaciones en realidad, pero esto es un PoC. # factura.save() # lineas_factura[0].save() ######### # Nota de Debito ######### numero = afip.consultar_proximo_numero("Cedir", 91, TipoComprobante.objects.get(pk=3), "A") nota_debito = Comprobante(**{ "nombre_cliente": "Obra Social de los Trabajadores de la Planta Nuclear de Springfield", "domicilio_cliente": " - Springfield - (CP:2000)", "nro_cuit": "30604958640", "gravado_paciente": "", "condicion_fiscal": "EXENTO", "gravado": Gravado.objects.get(pk=1), "responsable": "Cedir", "sub_tipo": "A", "estado": "PENDIENTE", "numero": numero, "nro_terminal": 91, "total_facturado": "2800.00", "total_cobrado": "0.00", "fecha_emision": date.today(), "fecha_recepcion": date.today(), "tipo_comprobante": TipoComprobante.objects.get(pk=3), "factura": factura # Ponemos como comprobante asociado la factura que hicimos recien. }) lineas_nota_debito = [LineaDeComprobante(**{ "comprobante": nota_debito, "importe_neto": 2800.00, "sub_total": 2800.00, "iva": 0, })] afip.emitir_comprobante(nota_debito, lineas_nota_debito) print("NOTA DE DEBITO") print("--------------") print((nota_debito.cae)) print((nota_debito.vencimiento_cae)) print((afip.consultar_comprobante(nota_debito))) print("") ######### # Nota de Credito ######### numero = afip.consultar_proximo_numero("Cedir", 91, TipoComprobante.objects.get(pk=4), "A") nota_credito = Comprobante(**{ "nombre_cliente": "Obra Social de los Trabajadores de la Planta Nuclear de Springfield", "domicilio_cliente": " - Springfield - (CP:2000)", "nro_cuit": "30604958640", "gravado_paciente": "", "condicion_fiscal": "EXENTO", "gravado": Gravado.objects.get(pk=1), "responsable": "Cedir", "sub_tipo": "A", "estado": "PENDIENTE", "numero": numero, "nro_terminal": 91, "total_facturado": "2800.00", "total_cobrado": "0.00", "fecha_emision": date.today(), "fecha_recepcion": date.today(), "tipo_comprobante": TipoComprobante.objects.get(pk=4), "factura": nota_debito # Ponemos como comprobante asociado la factura que hicimos recien. }) lineas_nota_credito = [LineaDeComprobante(**{ "comprobante": nota_credito, "importe_neto": 2800.00, "sub_total": 2800.00, "iva": 0, })] print("NOTA DE CREDITO") print("---------------") afip.emitir_comprobante(nota_credito, lineas_nota_credito) print((nota_credito.cae)) print((nota_credito.vencimiento_cae)) print((afip.consultar_comprobante(nota_credito))) print("") ####################################### # Factura de Credito Electronica MiPyME ####################################### numero = afip.consultar_proximo_numero("Brunetti", 3, TipoComprobante.objects.get(pk=5), "B") factura_electronica = Comprobante(**{ "nombre_cliente": "Obra Social de los Trabajadores de la Planta Nuclear de Springfield", "domicilio_cliente": " - Springfield - (CP:2000)", "nro_cuit": "30604958640", "gravado_paciente": "", "condicion_fiscal": "EXENTO", "gravado": Gravado.objects.get(pk=1), "responsable": "Brunetti", "sub_tipo": "B", "estado": "PENDIENTE", "numero": numero, "nro_terminal": 3, "total_facturado": "100000.00", "total_cobrado": "0.00", "fecha_emision": date.today(), "fecha_recepcion": date.today(), "tipo_comprobante": TipoComprobante.objects.get(pk=5), }) lineas_factura_electronica = [LineaDeComprobante(**{ "comprobante": factura_electronica, "importe_neto": 100000.00, "sub_total": 100000.00, "iva": 0, })] print("FACTURA MIPYME") print("--------------") afip.emitir_comprobante(factura_electronica, lineas_factura_electronica) print((factura_electronica.cae)) print((factura_electronica.vencimiento_cae)) print((afip.consultar_comprobante(factura_electronica))) print("") ####################################### # Nota de Debito Electronica MiPyME ####################################### numero = afip.consultar_proximo_numero("Brunetti", 3, TipoComprobante.objects.get(pk=6), "B") nota_de_debito_electronica = Comprobante(**{ "nombre_cliente": "Obra Social de los Trabajadores de la Planta Nuclear de Springfield", "domicilio_cliente": " - Springfield - (CP:2000)", "nro_cuit": "30604958640", "gravado_paciente": "", "condicion_fiscal": "EXENTO", "gravado": Gravado.objects.get(pk=1), "responsable": "Brunetti", "sub_tipo": "B", "estado": "PENDIENTE", "numero": numero, "nro_terminal": 3, "total_facturado": "100000.00", "total_cobrado": "0.00", "fecha_emision": date.today(), "fecha_recepcion": date.today(), "tipo_comprobante": TipoComprobante.objects.get(pk=6), "factura": factura_electronica }) lineas_nota_de_debito_electronica = [LineaDeComprobante(**{ "comprobante": nota_de_debito_electronica, "importe_neto": 100000.00, "sub_total": 100000.00, "iva": 0, })] print("N DEBITO MIPYME") print("--------------") afip.emitir_comprobante(nota_de_debito_electronica, lineas_nota_de_debito_electronica) print((nota_de_debito_electronica.cae)) print((nota_de_debito_electronica.vencimiento_cae)) print((afip.consultar_comprobante(nota_de_debito_electronica))) print("") ####################################### # Nota de Credito Electronica MiPyME ####################################### numero = afip.consultar_proximo_numero("Brunetti", 3, TipoComprobante.objects.get(pk=7), "B") nota_de_credito_electronica = Comprobante(**{ "nombre_cliente": "Obra Social de los Trabajadores de la Planta Nuclear de Springfield", "domicilio_cliente": " - Springfield - (CP:2000)", "nro_cuit": "30604958640", "gravado_paciente": "", "condicion_fiscal": "EXENTO", "gravado": Gravado.objects.get(pk=1), "responsable": "Brunetti", "sub_tipo": "B", "estado": "PENDIENTE", "numero": numero, "nro_terminal": 3, "total_facturado": "100000.00", "total_cobrado": "0.00", "fecha_emision": date.today(), "fecha_recepcion": date.today(), "tipo_comprobante": TipoComprobante.objects.get(pk=7), "factura": factura_electronica }) lineas_nota_de_credito_electronica = [LineaDeComprobante(**{ "comprobante": nota_de_credito_electronica, "importe_neto": 100000.00, "sub_total": 100000.00, "iva": 0, })] print("N CREDITO MIPYME") print("--------------") afip.emitir_comprobante(nota_de_credito_electronica, lineas_nota_de_credito_electronica) print((nota_de_credito_electronica.cae)) print((nota_de_credito_electronica.vencimiento_cae)) print((afip.consultar_comprobante(nota_de_credito_electronica))) print("")