Commit f0ba73a5 by Javier

Se arregla error en IVA en Recargas

parent 82d50450
...@@ -2,11 +2,12 @@ from enum import Enum ...@@ -2,11 +2,12 @@ from enum import Enum
import imp import imp
from lib2to3.pytree import Base from lib2to3.pytree import Base
from pydoc import resolve from pydoc import resolve
from re import RegexFlag
from tkinter.tix import Form from tkinter.tix import Form
from turtle import title from turtle import title
from unicodedata import name from unicodedata import name
from urllib import response 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 fastapi.responses import JSONResponse
from typing import Optional, Tuple from typing import Optional, Tuple
from pydantic import BaseModel from pydantic import BaseModel
...@@ -48,9 +49,9 @@ class Rate(str, Enum): ...@@ -48,9 +49,9 @@ class Rate(str, Enum):
PLANA_2000 = "Tarifa Plana 2000 Minutos" PLANA_2000 = "Tarifa Plana 2000 Minutos"
class Tax(float, Enum): class Tax(str, Enum):
GENERAL = 0.21 GENERAL = 'IVA General (21%)'
LIBRE = 0.0 EXENTA = 'Operación Exenta de Impuestos'
class Refill(str, Enum): class Refill(str, Enum):
...@@ -238,8 +239,8 @@ def create_account(account: Account = Depends()): ...@@ -238,8 +239,8 @@ def create_account(account: Account = Depends()):
# Recarga Inicial de Cuenta # Recarga Inicial de Cuenta
if account.initial_balance > 0.0: 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: except mbilling.functions.MagnusCommandError as e:
response = JSONResponse( response = JSONResponse(
...@@ -253,7 +254,7 @@ def create_account(account: Account = Depends()): ...@@ -253,7 +254,7 @@ def create_account(account: Account = Depends()):
return response 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')): 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) 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 ...@@ -269,7 +270,7 @@ def get_account(account_name: str = Query(..., regex=r'[89][1-9]\d{7}', name='N
response = AccountDetails( response = AccountDetails(
host=user_data['host'], 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']), rate=decode_rate(user_data['plan'], user_data['offer']),
credentials=credentials credentials=credentials
) )
...@@ -293,32 +294,30 @@ def add_balance(account_name: str = Query(..., regex=r'[89][1-9]\d{7}', name='N ...@@ -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 = 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')): Query(default=Refill.AUTOMATICA, name='Tipo', description='Clase de Recarga')):
if quantity >= 0 and tax >= 0: if quantity >= 0:
try: 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( mbilling.functions.add_balance(
account_name, quantity, tax if description != Refill.TRASPASO else 0.0, description) account_name, quantity, tax_percentage, description
response = JSONResponse( )
return JSONResponse(
content={ content={
'result': 'OK', 'result': 'OK',
'description': 'Se ha realizado una recarga de {quantity} al usuario {account}.'.format( 'description': 'Se ha realizado una recarga de {quantity}€ ({quantity_taxed}€ iva exc.) al usuario {account}.'.format(
quantity=quantity, account=account_name quantity=quantity,
quantity_taxed=quantity*(1-tax_percentage),
account=account_name
) )
}, status_code=201 }, status_code=201
) )
except mbilling.functions.MagnusCommandError as e: except mbilling.functions.MagnusCommandError as e:
response = JSONResponse( raise HTTPException(status_code=404, detail="La cuenta SIP no ha sido localizada.")
content={
'result': 'ERROR',
'description': f'El usuario no ha sido localizado, {str(e)}'
}, status_code=500
)
else: else:
response = JSONResponse( raise HTTPException(status_code=400, detail="La cantidad debe ser mayor que 0.0€")
content={
'result': 'ERROR',
'description': 'La cantidad y tasa impositiva han de ser mayores que 0.'
}, status_code=400
)
return response
...@@ -171,7 +171,7 @@ def add_balance(phone_number: str, quantity: float, tax: float = 0.21, descript ...@@ -171,7 +171,7 @@ def add_balance(phone_number: str, quantity: float, tax: float = 0.21, descript
result = subprocess.check_output( result = subprocess.check_output(
['php', pathlib.Path(mbapi_path, 'add_balance.php'), ['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')): 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