From ab0b900721fd222dd1bcda6008e87a0008b779c9 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Fri, 21 Jan 2022 16:41:40 -0500 Subject: [PATCH] Still working on order and orders that are carts --- app/methods/order_methods.py | 51 +++++++++++++++++++++++++++++++++++ app/methods/person_methods.py | 40 ++++++++++++++++++++++++++- app/models/person_models.py | 2 ++ app/routers/person.py | 1 + app/routers/user.py | 3 ++- 5 files changed, 95 insertions(+), 2 deletions(-) diff --git a/app/methods/order_methods.py b/app/methods/order_methods.py index 1a353d8..db75510 100644 --- a/app/methods/order_methods.py +++ b/app/methods/order_methods.py @@ -314,6 +314,57 @@ def load_order_obj( # ### END ### API Order Methods ### load_order_obj() ### +# ### BEGIN ### API Order Methods ### get_order_obj_cart_for_person_id_v3() ### +# Updated 2022-01-21 +@logger_reset +def get_order_id_cart_for_person_id_v3( + person_id: int|str, + enabled: str = 'enabled', # enabled, disabled, all + limit: int = 5, + offset: int = 0, + by_alias: bool = True, + exclude_unset: bool = True, + model_as_dict: bool = False, + ) -> None|bool|dict|list: + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + if person_id := redis_lookup_id_random(record_id_random=person_id, table_name='person'): pass + else: return False # None, false bool + + data = {} + data['person_id'] = person_id + + sql_enabled, data['enable'] = sql_enable_part(table_name='order', enabled=enabled) # Reasonably safe return str and bool + sql_limit = sql_limit_offset_part(limit=limit, offset=offset) # Reasonably safe return str + + sql = f""" + SELECT `order`.id AS 'order_id', `order`.id_random AS 'order_id_random' + FROM `order` AS `order` + WHERE + `order`.person_id = :person_id + AND `order`.status = 'open' + {sql_enabled} + ORDER BY `order`.created_on DESC, `order`.updated_on DESC + {sql_limit}; + """ + log.debug(sql) + + if order_rec_result := sql_select(data=data, sql=sql): + log.debug(order_rec_result) + if isinstance(order_rec_result, dict): + order_id_cart = order_rec_result.get('order_id') + log.info(f'Got Order ID {order_id_cart} cart for Person ID {person_id}') + return order_id_cart + elif isinstance(order_rec_result, list): + log.warning(f'Got multiple Orders for a cart for Person ID {person_id}. This should not happen.') + return False + else: # None or [] or False + log.debug(order_rec_result) + return order_rec_result +# ### END ### API Order Methods ### get_order_obj_cart_for_person_id_v3() ### + + # ### BEGIN ### API Order Methods ### save_order_obj() ### # @logger_reset def save_order_obj(order_obj_new:Order_Base, repl_order_line_li:bool=False): diff --git a/app/methods/person_methods.py b/app/methods/person_methods.py index 2ad0b18..e2a7447 100644 --- a/app/methods/person_methods.py +++ b/app/methods/person_methods.py @@ -10,12 +10,13 @@ from app.lib_general import log, logging, logger_reset, send_email # from app.methods.address_methods import load_address_obj from app.methods.contact_methods import create_contact_obj, create_update_contact_obj, create_update_contact_obj_v4, load_contact_obj, update_contact_obj from app.methods.order_cart_methods import get_order_cart_id_for_person_id, load_order_cart_obj -from app.methods.order_methods import get_order_rec_list, load_order_obj +from app.methods.order_methods import create_order_obj, get_order_id_cart_for_person_id_v3, get_order_rec_list, load_order_obj from app.methods.organization_methods import create_update_organization_obj, load_organization_obj, update_organization_obj # from app.methods.user_methods import create_user_obj, load_user_obj, update_user_obj from app.models.common_field_schema import default_num_bytes from app.models.contact_models import Contact_Base +from app.models.order_models import Order_Base from app.models.person_models import Person_Base @@ -273,6 +274,7 @@ def load_person_obj( inc_order_line_list: bool = False, inc_order_list: bool = False, inc_order_cart: bool = False, + inc_order_cart_v3: bool = False, inc_organization: bool = False, inc_post_list: bool = False, inc_post_comment_list: bool = False, @@ -360,6 +362,8 @@ def load_person_obj( return False log.debug(person_obj) + account_id = person_obj.account_id + # Updated 2021-12-14 if inc_contact: log.info('Need to include contact data...') @@ -478,6 +482,40 @@ def load_person_obj( person_obj.order_cart = order_cart_result else: person_obj.order_cart = {} # None + # Updated 2022-01-21 + if inc_order_cart_v3: + log.info('Need to include order cart (v3)...') + if get_order_id_cart_for_person_id_v3_result := get_order_id_cart_for_person_id_v3( + person_id = person_id, + ): + order_id_cart = get_order_id_cart_for_person_id_v3_result + log.info(f'Got an order to use as a cart. Person ID: {person_id}; Order ID {order_id_cart}') + elif get_order_id_cart_for_person_id_v3_result is None: + log.info(f'An order for use as a cart was not found. Person ID: {person_id}') + order_dict = {} + order_dict['status'] = 'open' # open status should be used as an order cart + order_dict['checkout_status'] = None + try: + order_obj = Order_Base(**order_dict) + except ValidationError as e: + log.error(e.json()) + # return False + person_obj.order_cart_v3 = {} + if create_order_obj_result := create_order_obj( + account_id = account_id, + order_dict_obj = order_obj, + person_id = person_id, + ): + order_id_cart = create_order_obj_result + else: order_id_cart = None # person_obj.order_cart_v3 = {} # None + + if order_result := load_order_obj( + order_id = order_id_cart, + inc_order_line_list = True, + ): + person_obj.order_cart_v3 = order_result + else: person_obj.order_cart_v3 = {} # None + # Updated 2021-11-16 if inc_order_closed_count: log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL diff --git a/app/models/person_models.py b/app/models/person_models.py index 6688acb..b1be2cc 100644 --- a/app/models/person_models.py +++ b/app/models/person_models.py @@ -14,6 +14,7 @@ from app.models.journal_models import Journal_Base from app.models.membership_group_models import Membership_Group_Base from app.models.membership_person_models import Membership_Person_Base from app.models.membership_type_models import Membership_Type_Base +# from app.models.order_models import Order_Base from app.models.organization_models import Organization_Base from app.models.user_models import User_Base @@ -133,6 +134,7 @@ class Person_Base(BaseModel): orders_info: Optional[dict] # closed_count, etc order_list: Optional[list] # Order_Base() # Priority l2 order_cart: Optional[dict] # Order_Cart_Base() # Priority l2 + order_cart_v3: Optional[dict] # Order_Base() organization: Optional[Union[Organization_Base, None]] post_list: Optional[list] # Post_Base() # Priority l1 diff --git a/app/routers/person.py b/app/routers/person.py index 9659edb..3e73e85 100644 --- a/app/routers/person.py +++ b/app/routers/person.py @@ -372,6 +372,7 @@ async def get_person_obj( inc_order_line_list = inc_order_line_list, inc_order_list = inc_order_list, inc_order_cart = inc_order_cart, + inc_order_cart_v3 = inc_order_cart, # inc_order_cart_list = inc_order_cart_list, inc_organization = inc_organization, # inc_organization_list = inc_organization_list, diff --git a/app/routers/user.py b/app/routers/user.py index 4d7d536..569f111 100644 --- a/app/routers/user.py +++ b/app/routers/user.py @@ -134,8 +134,9 @@ async def user_obj_change_password( data = user_obj else: data = True + if generated_password: - return mk_resp(data=data, status_message='Generated password: fake-testing-12345', response=commons.response) + return mk_resp(data=data, status_message='Generated random password', response=commons.response) else: return mk_resp(data=data, status_message='The password has been changed.', response=commons.response) #return mk_resp(data=None, status_code=501, response=commons.response) # Not Implemented