Commit f0ba73a5 by Javier

Se arregla error en IVA en Recargas

parent 82d50450
......@@ -2,11 +2,12 @@ from enum import Enum
import imp
from lib2to3.pytree import Base
from pydoc import resolve
from re import RegexFlag
from tkinter.tix import Form
from turtle import title
from unicodedata import name
from urllib import response
from fastapi import Body, Depends, FastAPI, Query, Response
from fastapi import Body, Depends, FastAPI, HTTPException, Query, Response
from fastapi.responses import JSONResponse
from typing import Optional, Tuple
from pydantic import BaseModel
......@@ -48,9 +49,9 @@ class Rate(str, Enum):
PLANA_2000 = "Tarifa Plana 2000 Minutos"
class Tax(float, Enum):
GENERAL = 0.21
LIBRE = 0.0
class Tax(str, Enum):
GENERAL = 'IVA General (21%)'
EXENTA = 'Operación Exenta de Impuestos'
class Refill(str, Enum):
......@@ -238,8 +239,8 @@ def create_account(account: Account = Depends()):
# Recarga Inicial de Cuenta
if account.initial_balance > 0.0:
mbilling.functions.add_balance(account.number, account.initial_balance, description=Refill.INICIAL)
mbilling.functions.add_balance(
account.number, account.initial_balance, description=Refill.INICIAL)
except mbilling.functions.MagnusCommandError as e:
response = JSONResponse(
......@@ -253,7 +254,7 @@ def create_account(account: Account = Depends()):
return response
@app.get('/account/{account_name}', response_model=AccountDetails,name="Obtener Cuenta", description="Obtiene la información de Conexión de una cuenta SIP", tags=['Account'])
@app.get('/account/{account_name}', response_model=AccountDetails, name="Obtener Cuenta", description="Obtiene la información de Conexión de una cuenta SIP", tags=['Account'])
def get_account(account_name: str = Query(..., regex=r'[89][1-9]\d{7}', name='Número', description='Cuenta SIP a recargar')):
user_data = mbilling.functions.get_user(account_name)
......@@ -269,7 +270,7 @@ def get_account(account_name: str = Query(..., regex=r'[89][1-9]\d{7}', name='N
response = AccountDetails(
host=user_data['host'],
credit=round(user_data['credit'],2),
credit=round(user_data['credit'], 2),
rate=decode_rate(user_data['plan'], user_data['offer']),
credentials=credentials
)
......@@ -293,32 +294,30 @@ def add_balance(account_name: str = Query(..., regex=r'[89][1-9]\d{7}', name='N
tax: Tax = Query(default=Tax.GENERAL, name='Impuesto', description='Tasa impositiva a reducir del monto.'), description: Refill =
Query(default=Refill.AUTOMATICA, name='Tipo', description='Clase de Recarga')):
if quantity >= 0 and tax >= 0:
if quantity >= 0:
try:
# Cálculo de Impuestos
if description != Refill.TRASPASO:
tax_percentage = 0.21 if tax == Tax.GENERAL else 0.0
else:
tax_percentage = 0.0
# Llamada a API Magnus
mbilling.functions.add_balance(
account_name, quantity, tax if description != Refill.TRASPASO else 0.0, description)
response = JSONResponse(
account_name, quantity, tax_percentage, description
)
return JSONResponse(
content={
'result': 'OK',
'description': 'Se ha realizado una recarga de {quantity} al usuario {account}.'.format(
quantity=quantity, account=account_name
'description': 'Se ha realizado una recarga de {quantity}€ ({quantity_taxed}€ iva exc.) al usuario {account}.'.format(
quantity=quantity,
quantity_taxed=quantity*(1-tax_percentage),
account=account_name
)
}, status_code=201
)
except mbilling.functions.MagnusCommandError as e:
response = JSONResponse(
content={
'result': 'ERROR',
'description': f'El usuario no ha sido localizado, {str(e)}'
}, status_code=500
)
else:
response = JSONResponse(
content={
'result': 'ERROR',
'description': 'La cantidad y tasa impositiva han de ser mayores que 0.'
}, status_code=400
)
return response
raise HTTPException(status_code=404, detail="La cuenta SIP no ha sido localizada.")
else:
raise HTTPException(status_code=400, detail="La cantidad debe ser mayor que 0.0€")
......@@ -171,7 +171,7 @@ def add_balance(phone_number: str, quantity: float, tax: float = 0.21, descript
result = subprocess.check_output(
['php', pathlib.Path(mbapi_path, 'add_balance.php'),
phone_number.strip(), quantity, f'\"{description}\"']
phone_number.strip(), str(quantity), f'\"{description}\"']
)
if not re.match(succesful, result.decode('utf-8')):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment