Skip to content

Commit

Permalink
validate invoice after modified
Browse files Browse the repository at this point in the history
  • Loading branch information
mrzaizai2k committed Oct 6, 2024
1 parent 55f87e5 commit 848fc9b
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 18 deletions.
26 changes: 26 additions & 0 deletions src/Utils/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,32 @@ def convert_datetime_to_iso(data):
for item in data:
convert_datetime_to_iso(item)

def convert_iso_to_dmY(data):
"""
Convert ISO format datetime strings or datetime objects to 'dd/MM/YYYY' format
"""
def convert_single_value(value):
if isinstance(value, str):
try:
# Try to parse the string as an ISO format datetime
dt = datetime.fromisoformat(value)
return dt.strftime('%d/%m/%Y')
except ValueError:
# If it's not a valid ISO format, return the original string
return value
elif isinstance(value, datetime):
# If it's already a datetime object, just format it
return value.strftime('%d/%m/%Y')
else:
# For any other type, return as is
return value

if isinstance(data, dict):
return {key: convert_iso_to_dmY(value) for key, value in data.items()}
elif isinstance(data, list):
return [convert_iso_to_dmY(item) for item in data]
else:
return convert_single_value(data)

def get_currencies_from_txt(file_path:str ="config/currencies.txt"):
# Read the file and return a list of currency codes
Expand Down
17 changes: 14 additions & 3 deletions src/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@
from src.ldap_authen import (User, get_current_user, ldap_authen,
Token, create_access_token)
from src.Utils.utils import (read_config, get_current_time, is_base64,
valid_base64_image, convert_datetime_to_iso,
valid_base64_image, convert_datetime_to_iso, convert_iso_to_dmY,
get_land_and_city_list, get_currencies_from_txt)
from src.invoice_extraction import extract_invoice_info
from src.invoice_extraction import extract_invoice_info, validate_invoice
from src.Utils.logger import create_logger
from src.export_excel.main import export_json_to_excel

Expand Down Expand Up @@ -351,9 +351,20 @@ async def modify_invoice(invoice_uuid: str, request: Request):
status_code=status.HTTP_400_BAD_REQUEST,
content=msg)

logger.debug(msg = f"invoice_info.keys {invoice_info.keys()}")

invoice_info['invoice_info'] = convert_iso_to_dmY(invoice_info['invoice_info'])

invoice_dict = validate_invoice(invoice_info=invoice_info,
invoice_type=invoice_info['invoice_type'],
config=config)

logger.debug(msg = f"invoice_dict['invoice_info']: {invoice_dict['invoice_info']}")


# Prepare update fields
update_fields = {
"invoice_info": invoice_info,
"invoice_info": invoice_dict['invoice_info'],
"last_modified_at": get_current_time(timezone=config['timezone']),
"last_modified_by": user_uuid
}
Expand Down
33 changes: 18 additions & 15 deletions src/invoice_extraction.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
sys.path.append("")
import re
import numpy as np
from copy import deepcopy
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from typing import List, Optional
Expand Down Expand Up @@ -133,23 +134,25 @@ def extract_invoice_info(base64_img:str, ocr_reader:OcrReader,



def validate_invoice(invoice_info:dict, invoice_type:str, config:dict) ->dict:

if invoice_type == "invoice 1":
valid_invoice = validate_invoice_1(invoice_data=invoice_info, config=config)
full_invoice = Invoice1(invoice_info=valid_invoice['invoice_info'])
def validate_invoice(invoice_info: dict, invoice_type: str, config: dict) -> dict:
# Create a deep copy of the invoice_info to avoid modifying the original
invoice_info_copy = deepcopy(invoice_info)


elif invoice_type == "invoice 2":
valid_invoice = validate_invoice_2(invoice_data=invoice_info, config=config)
full_invoice = Invoice2(invoice_info=valid_invoice['invoice_info'])

elif invoice_type == "invoice 3":
valid_invoice = validate_invoice_3(invoice_data=invoice_info, config=config)
full_invoice = Invoice3(invoice_info=valid_invoice['invoice_info'])
invoice_types = {
"invoice 1": (validate_invoice_1, Invoice1),
"invoice 2": (validate_invoice_2, Invoice2),
"invoice 3": (validate_invoice_3, Invoice3)
}

full_invoice_dict = full_invoice.model_dump(exclude_unset=False)
return full_invoice_dict
if invoice_type not in invoice_types:
raise ValueError(f"Invalid invoice type: {invoice_type}")

validate_func, invoice_class = invoice_types[invoice_type]

valid_invoice = validate_func(invoice_data=invoice_info_copy, config=config)
full_invoice = invoice_class(invoice_info=valid_invoice['invoice_info'])

return full_invoice.model_dump(exclude_unset=False)


if __name__ == "__main__":
Expand Down

0 comments on commit 848fc9b

Please sign in to comment.