diff --git a/app.log.1 b/app.log.1 index 5478ae66..ae7ececa 100644 --- a/app.log.1 +++ b/app.log.1 @@ -1,10 +1,21 @@ +result: +index_variation_type: {1: 0, 2: 1} +raw errors: () +new result set: () +argument_dict: {'active': True} +executing p_shop_get_many_unit_measurement +DataStore_Base.db_procedure_execute +proc_string: CALL p_shop_get_many_unit_measurement(:active) +args: {'active': True} +result: +data received raw units of measurement: ((1, 'metre', 'metres', 'm', b'\x01', b'\x01', b'\x01', b'\x00', b'\x00', b'\x00', b'\x01'), (2, 'millimetre', 'millimetres', 'mm', b'\x01', b'\x00', b'\x01', b'\x00', b'\x00', b'\x00', b'\x01'), (3, 'kilogram', 'kilograms', 'kg', b'\x01', b'\x01', b'\x00', b'\x01', b'\x00', b'\x00', b'\x01'), (4, 'gram', 'grams', 'g', b'\x01', b'\x00', b'\x00', b'\x01', b'\x00', b'\x00', b'\x01'), (5, 'litre', 'litres', 'L', b'\x01', b'\x00', b'\x00', b'\x00', b'\x00', b'\x01', b'\x01'), (6, 'millilitre', 'millilitres', 'mL', b'\x01', b'\x00', b'\x00', b'\x00', b'\x00', b'\x01', b'\x01'), (7, 'item', 'items', 'x', b'\x01', b'\x00', b'\x00', b'\x00', b'\x00', b'\x00', b'\x01'), (8, 'hour', 'hours', 'h', b'\x01', b'\x01', b'\x00', b'\x00', b'\x01', b'\x00', b'\x01'), (9, 'day', 'days', 'd', b'\x01', b'\x00', b'\x00', b'\x00', b'\x01', b'\x00', b'\x01')) raw errors: () executing p_shop_get_many_currency DataStore_Base.db_procedure_execute proc_string: CALL p_shop_get_many_currency(:a_get_inactive_currency) args: {'a_get_inactive_currency': 0} -result: +result: data received currencies: [ id: 1 @@ -26,25 +37,35 @@ currencies: [ new result set: () {1: {'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 1, 'name_singular': 'metre', 'name_plural': 'metres', 'symbol': 'm', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': True, 'is_unit_of_distance': True, 'is_unit_of_mass': False, 'is_unit_of_time': False, 'is_unit_of_volume': False, 'active': True}, 2: {'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 2, 'name_singular': 'millimetre', 'name_plural': 'millimetres', 'symbol': 'mm', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': False, 'is_unit_of_distance': True, 'is_unit_of_mass': False, 'is_unit_of_time': False, 'is_unit_of_volume': False, 'active': True}, 3: {'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 3, 'name_singular': 'kilogram', 'name_plural': 'kilograms', 'symbol': 'kg', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': True, 'is_unit_of_distance': False, 'is_unit_of_mass': True, 'is_unit_of_time': False, 'is_unit_of_volume': False, 'active': True}, 4: {'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 4, 'name_singular': 'gram', 'name_plural': 'grams', 'symbol': 'g', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': False, 'is_unit_of_distance': False, 'is_unit_of_mass': True, 'is_unit_of_time': False, 'is_unit_of_volume': False, 'active': True}, 5: {'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 5, 'name_singular': 'litre', 'name_plural': 'litres', 'symbol': 'L', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': False, 'is_unit_of_distance': False, 'is_unit_of_mass': False, 'is_unit_of_time': False, 'is_unit_of_volume': True, 'active': True}, 6: {'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 6, 'name_singular': 'millilitre', 'name_plural': 'millilitres', 'symbol': 'mL', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': False, 'is_unit_of_distance': False, 'is_unit_of_mass': False, 'is_unit_of_time': False, 'is_unit_of_volume': True, 'active': True}, 7: {'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 7, 'name_singular': 'item', 'name_plural': 'items', 'symbol': 'x', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': False, 'is_unit_of_distance': False, 'is_unit_of_mass': False, 'is_unit_of_time': False, 'is_unit_of_volume': False, 'active': True}, 8: {'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 8, 'name_singular': 'hour', 'name_plural': 'hours', 'symbol': 'h', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': True, 'is_unit_of_distance': False, 'is_unit_of_mass': False, 'is_unit_of_time': True, 'is_unit_of_volume': False, 'active': True}, 9: {'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 9, 'name_singular': 'day', 'name_plural': 'days', 'symbol': 'd', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': False, 'is_unit_of_distance': False, 'is_unit_of_mass': False, 'is_unit_of_time': True, 'is_unit_of_volume': False, 'active': True}} {8: {'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 8, 'name_singular': 'hour', 'name_plural': 'hours', 'symbol': 'h', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': True, 'is_unit_of_distance': False, 'is_unit_of_mass': False, 'is_unit_of_time': True, 'is_unit_of_volume': False, 'active': True}, 9: {'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 9, 'name_singular': 'day', 'name_plural': 'days', 'symbol': 'd', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': False, 'is_unit_of_distance': False, 'is_unit_of_mass': False, 'is_unit_of_time': True, 'is_unit_of_volume': False, 'active': True}} +Product_Variation_Tree.to_preview_str +variation_types: [ + Product_Variation_Type + id_type: 1 + code: COLOUR + name_singular: Colour + name_plural: Colours + display_order: 1 + active: True + ] +preview_str: Colour: Red + +{'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 1, 'name_singular': 'metre', 'name_plural': 'metres', 'symbol': 'm', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': True, 'is_unit_of_distance': True, 'is_unit_of_mass': False, 'is_unit_of_time': False, 'is_unit_of_volume': False, 'active': True} +Product_Variation_Tree.to_preview_str +variation_types: [ + Product_Variation_Type + id_type: 1 + code: COLOUR + name_singular: Colour + name_plural: Colours + display_order: 1 + active: True + ] +preview_str: Colour: Blue + +{'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 1, 'name_singular': 'metre', 'name_plural': 'metres', 'symbol': 'm', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': True, 'is_unit_of_distance': True, 'is_unit_of_mass': False, 'is_unit_of_time': False, 'is_unit_of_volume': False, 'active': True} +{'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 1, 'name_singular': 'metre', 'name_plural': 'metres', 'symbol': 'm', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': True, 'is_unit_of_distance': True, 'is_unit_of_mass': False, 'is_unit_of_time': False, 'is_unit_of_volume': False, 'active': True} +{'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 1, 'name_singular': 'metre', 'name_plural': 'metres', 'symbol': 'm', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': True, 'is_unit_of_distance': True, 'is_unit_of_mass': False, 'is_unit_of_time': False, 'is_unit_of_volume': False, 'active': True} +{'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 1, 'name_singular': 'metre', 'name_plural': 'metres', 'symbol': 'm', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': True, 'is_unit_of_distance': True, 'is_unit_of_mass': False, 'is_unit_of_time': False, 'is_unit_of_volume': False, 'active': True} +{'NAME_ATTR_OPTION_TEXT': 'name_singular', 'NAME_ATTR_OPTION_VALUE': 'id_unit_measurement', 'id_unit_measurement': 1, 'name_singular': 'metre', 'name_plural': 'metres', 'symbol': 'm', 'symbol_is_suffix_not_prefix': True, 'is_base_unit': True, 'is_unit_of_distance': True, 'is_unit_of_mass': False, 'is_unit_of_time': False, 'is_unit_of_volume': False, 'active': True} Model_View_Store.__init__ starting -session: -DataStore_Base.get_user_session -User.from_json -json: {'can_admin_store': True, 'can_admin_user': True, 'email': 'edward.middletonsmith@gmail.com', 'firstname': 'Teddy', 'id_currency_default': None, 'id_region_default': None, 'id_user': 1, 'id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'is_email_verified': False, 'is_included_VAT_default': True, 'is_super_user': True, 'surname': 'Middleton-Smith'} -user: - id_user: 1 - id_user_auth0: auth0|6582b95c895d09a70ba10fef - firstname: Teddy - surname: Middleton-Smith - email: edward.middletonsmith@gmail.com - is_email_verified: False - is_super_user: True - id_currency_default: None - id_region_default: None - is_included_VAT_default: True - can_admin_store: True - can_admin_user: True - -User.from_json -json: {'can_admin_store': True, 'can_admin_user': True, 'email': 'edward.middletonsmith@gmail.com', 'firstname': 'Teddy', 'id_currency_default': None, 'id_region_default': None, 'id_user': 1, 'id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'is_email_verified': False, 'is_included_VAT_default': True, 'is_super_user': True, 'surname': 'Middleton-Smith'} diff --git a/app.log.2 b/app.log.2 index dde08f22..1ba9ed32 100644 --- a/app.log.2 +++ b/app.log.2 @@ -1,3 +1,20 @@ +DataStore_Base.get_user_session +User.from_json +json: {'can_admin_store': True, 'can_admin_user': True, 'email': 'edward.middletonsmith@gmail.com', 'firstname': 'Teddy', 'id_currency_default': None, 'id_region_default': None, 'id_user': 1, 'id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'is_email_verified': False, 'is_included_VAT_default': True, 'is_super_user': True, 'surname': 'Middleton-Smith'} +user: + id_user: 1 + id_user_auth0: auth0|6582b95c895d09a70ba10fef + firstname: Teddy + surname: Middleton-Smith + email: edward.middletonsmith@gmail.com + is_email_verified: False + is_super_user: True + id_currency_default: None + id_region_default: None + is_included_VAT_default: True + can_admin_store: True + can_admin_user: True + User.from_json json: {'can_admin_store': True, 'can_admin_user': True, 'email': 'edward.middletonsmith@gmail.com', 'firstname': 'Teddy', 'id_currency_default': None, 'id_region_default': None, 'id_user': 1, 'id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'is_email_verified': False, 'is_included_VAT_default': True, 'is_super_user': True, 'surname': 'Middleton-Smith'} user: @@ -19,7 +36,7 @@ executing p_get_many_user DataStore_Base.db_procedure_execute proc_string: CALL p_get_many_user(:a_id_user, :a_id_user_auth0, :get_all_user, :get_inactive_user, :ids_user, :ids_user_auth0, :a_debug) args: {'a_id_user': 1, 'a_id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'get_all_user': False, 'get_inactive_user': False, 'ids_user': 1, 'ids_user_auth0': '', 'a_debug': 0} -result: +result: data received raw users: ((1, 'auth0|6582b95c895d09a70ba10fef', 'Teddy', 'Middleton-Smith', 'edward.middletonsmith@gmail.com', b'\x00', None, None, b'\x01', b'\x01', b'\x01', b'\x01', b'\x00'),) raw errors: () @@ -29,7 +46,7 @@ executing p_shop_get_many_product DataStore_Base.db_procedure_execute proc_string: CALL p_shop_get_many_product(:a_id_user, :a_get_all_product_category, :a_get_inactive_product_category, :a_ids_product_category, :a_get_all_product, :a_get_inactive_product, :a_ids_product, :a_get_all_permutation, :a_get_inactive_permutation, :a_ids_permutation, :a_get_all_image, :a_get_inactive_image, :a_ids_image, :a_get_products_quantity_stock_below_min, :a_debug) args: {'a_id_user': 1, 'a_get_all_product_category': True, 'a_get_inactive_product_category': False, 'a_ids_product_category': '', 'a_get_all_product': True, 'a_get_inactive_product': False, 'a_ids_product': '', 'a_get_all_permutation': True, 'a_get_inactive_permutation': False, 'a_ids_permutation': '', 'a_get_all_image': False, 'a_get_inactive_image': False, 'a_ids_image': '', 'a_get_products_quantity_stock_below_min': False, 'a_debug': 0} -result: +result: data received initial category_list: categories: [] raw categories: ((4, 'CHOCOLATE', 'Chocolates and sweets', 'Confectionery', 1, 'View', 1, b'\x01', None, None, None),) @@ -156,7 +173,7 @@ executing p_get_many_user DataStore_Base.db_procedure_execute proc_string: CALL p_get_many_user(:a_id_user, :a_id_user_auth0, :get_all_user, :get_inactive_user, :ids_user, :ids_user_auth0, :a_debug) args: {'a_id_user': 1, 'a_id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'get_all_user': False, 'get_inactive_user': False, 'ids_user': 1, 'ids_user_auth0': '', 'a_debug': 0} -result: +result: data received raw users: ((1, 'auth0|6582b95c895d09a70ba10fef', 'Teddy', 'Middleton-Smith', 'edward.middletonsmith@gmail.com', b'\x00', None, None, b'\x01', b'\x01', b'\x01', b'\x01', b'\x00'),) raw errors: () @@ -164,14 +181,3 @@ new result set: () DataStore_Base.db_procedure_execute proc_string: CALL p_shop_get_many_product_variation(:a_id_user, :a_get_all_variation_type, :a_get_inactive_variation_type, :a_ids_variation_type, :a_get_all_variation, :a_get_inactive_variation, :a_ids_variation, :a_debug) args: {'a_id_user': 1, 'a_get_all_variation_type': True, 'a_get_inactive_variation_type': False, 'a_ids_variation_type': '', 'a_get_all_variation': True, 'a_get_inactive_variation': False, 'a_ids_variation': '', 'a_debug': 0} -result: -index_variation_type: {1: 0, 2: 1} -raw errors: () -new result set: () -argument_dict: {'active': True} -executing p_shop_get_many_unit_measurement -DataStore_Base.db_procedure_execute -proc_string: CALL p_shop_get_many_unit_measurement(:active) -args: {'active': True} -result: -data received diff --git a/app.log.3 b/app.log.3 index aa268209..4f015eaa 100644 --- a/app.log.3 +++ b/app.log.3 @@ -1,153 +1,125 @@ -user: - id_user: 1 - id_user_auth0: auth0|6582b95c895d09a70ba10fef - firstname: Teddy - surname: Middleton-Smith - email: edward.middletonsmith@gmail.com - is_email_verified: False - is_super_user: True - id_currency_default: None - id_region_default: None - is_included_VAT_default: True - can_admin_store: True - can_admin_user: True - -User.from_json -json: {'can_admin_store': True, 'can_admin_user': True, 'email': 'edward.middletonsmith@gmail.com', 'firstname': 'Teddy', 'id_currency_default': None, 'id_region_default': None, 'id_user': 1, 'id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'is_email_verified': False, 'is_included_VAT_default': True, 'is_super_user': True, 'surname': 'Middleton-Smith'} -user: - id_user: 1 - id_user_auth0: auth0|6582b95c895d09a70ba10fef - firstname: Teddy - surname: Middleton-Smith - email: edward.middletonsmith@gmail.com - is_email_verified: False - is_super_user: True - id_currency_default: None - id_region_default: None - is_included_VAT_default: True - can_admin_store: True - can_admin_user: True - -argument_dict: {'a_id_user': 1, 'a_id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'get_all_user': False, 'get_inactive_user': False, 'ids_user': 1, 'ids_user_auth0': '', 'a_debug': 0} -executing p_get_many_user -DataStore_Base.db_procedure_execute -proc_string: CALL p_get_many_user(:a_id_user, :a_id_user_auth0, :get_all_user, :get_inactive_user, :ids_user, :ids_user_auth0, :a_debug) -args: {'a_id_user': 1, 'a_id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'get_all_user': False, 'get_inactive_user': False, 'ids_user': 1, 'ids_user_auth0': '', 'a_debug': 0} -result: -data received -raw users: ((1, 'auth0|6582b95c895d09a70ba10fef', 'Teddy', 'Middleton-Smith', 'edward.middletonsmith@gmail.com', b'\x00', None, None, b'\x01', b'\x01', b'\x01', b'\x01', b'\x00'),) -raw errors: () -new result set: () -model_view_base init end - model.user: - id_user: 1 - id_user_auth0: auth0|6582b95c895d09a70ba10fef - firstname: Teddy - surname: Middleton-Smith - email: edward.middletonsmith@gmail.com - is_email_verified: False - is_super_user: True - id_currency_default: None - id_region_default: None - is_included_VAT_default: True - can_admin_store: True - can_admin_user: True - -form question: -bool interpretted: False -form question: -get_inactive:False -type form: -DataStore_Base.get_user_session -User.from_json -json: {'can_admin_store': True, 'can_admin_user': True, 'email': 'edward.middletonsmith@gmail.com', 'firstname': 'Teddy', 'id_currency_default': None, 'id_region_default': None, 'id_user': 1, 'id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'is_email_verified': False, 'is_included_VAT_default': True, 'is_super_user': True, 'surname': 'Middleton-Smith'} -user: - id_user: 1 - id_user_auth0: auth0|6582b95c895d09a70ba10fef - firstname: Teddy - surname: Middleton-Smith - email: edward.middletonsmith@gmail.com - is_email_verified: False - is_super_user: True - id_currency_default: None - id_region_default: None - is_included_VAT_default: True - can_admin_store: True - can_admin_user: True - -User.from_json -json: {'can_admin_store': True, 'can_admin_user': True, 'email': 'edward.middletonsmith@gmail.com', 'firstname': 'Teddy', 'id_currency_default': None, 'id_region_default': None, 'id_user': 1, 'id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'is_email_verified': False, 'is_included_VAT_default': True, 'is_super_user': True, 'surname': 'Middleton-Smith'} -user: - id_user: 1 - id_user_auth0: auth0|6582b95c895d09a70ba10fef - firstname: Teddy - surname: Middleton-Smith - email: edward.middletonsmith@gmail.com - is_email_verified: False - is_super_user: True - id_currency_default: None - id_region_default: None - is_included_VAT_default: True - can_admin_store: True - can_admin_user: True - -argument_dict: {'a_id_user': 1, 'a_id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'get_all_user': False, 'get_inactive_user': False, 'ids_user': 1, 'ids_user_auth0': '', 'a_debug': 0} -executing p_get_many_user -DataStore_Base.db_procedure_execute -proc_string: CALL p_get_many_user(:a_id_user, :a_id_user_auth0, :get_all_user, :get_inactive_user, :ids_user, :ids_user_auth0, :a_debug) -args: {'a_id_user': 1, 'a_id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'get_all_user': False, 'get_inactive_user': False, 'ids_user': 1, 'ids_user_auth0': '', 'a_debug': 0} -result: -data received -raw users: ((1, 'auth0|6582b95c895d09a70ba10fef', 'Teddy', 'Middleton-Smith', 'edward.middletonsmith@gmail.com', b'\x00', None, None, b'\x01', b'\x01', b'\x01', b'\x01', b'\x00'),) -raw errors: () -new result set: () -argument_dict: {'a_id_user': 1, 'a_get_all_product_category': True, 'a_get_inactive_product_category': False, 'a_ids_product_category': '', 'a_get_all_product': True, 'a_get_inactive_product': False, 'a_ids_product': '', 'a_get_all_permutation': True, 'a_get_inactive_permutation': False, 'a_ids_permutation': '', 'a_get_all_image': False, 'a_get_inactive_image': False, 'a_ids_image': '', 'a_get_products_quantity_stock_below_min': False, 'a_debug': 0} -executing p_shop_get_many_product -DataStore_Base.db_procedure_execute -proc_string: CALL p_shop_get_many_product(:a_id_user, :a_get_all_product_category, :a_get_inactive_product_category, :a_ids_product_category, :a_get_all_product, :a_get_inactive_product, :a_ids_product, :a_get_all_permutation, :a_get_inactive_permutation, :a_ids_permutation, :a_get_all_image, :a_get_inactive_image, :a_ids_image, :a_get_products_quantity_stock_below_min, :a_debug) -args: {'a_id_user': 1, 'a_get_all_product_category': True, 'a_get_inactive_product_category': False, 'a_ids_product_category': '', 'a_get_all_product': True, 'a_get_inactive_product': False, 'a_ids_product': '', 'a_get_all_permutation': True, 'a_get_inactive_permutation': False, 'a_ids_permutation': '', 'a_get_all_image': False, 'a_get_inactive_image': False, 'a_ids_image': '', 'a_get_products_quantity_stock_below_min': False, 'a_debug': 0} -result: -data received -initial category_list: categories: [] -raw categories: ((4, 'CHOCOLATE', 'Chocolates and sweets', 'Confectionery', 1, 'View', 1, b'\x01', None, None, None),) -new_category: - id: 4 - code: CHOCOLATE - name: Chocolates and sweets - description: Confectionery +get many category_list: categories: [ + id: 1 + code: ASS + name: Assistive Devices + description: Braille product line and other assistive devices access_level: View display_order: 1 - active: True - products: [] - -category-loaded category_list: categories: [ - id: 4 - code: CHOCOLATE - name: Chocolates and sweets - description: Confectionery - access_level: View - display_order: 1 - active: True - products: [] - ] -raw products: ((6, 4, 'Digestives', b'\x01', 1, 'View', b'\x01', 1, None, None, None),) -row: (6, 4, 'Digestives', b'\x01', 1, 'View', b'\x01', 1, None, None, None) -new_product: Product - id_product: 6 - id_category: 4 - name: Digestives + active: False + products: [Product + id_product: 1 + id_category: 1 + name: Braille Keyboard Translator display_order: 1 can_view: False can_edit: False can_admin: False has_variations: True - permutations: [] - variation trees: [] - active: True + permutations: [Product_Permutation + id_permutation: 1 + id_product: 1 + id_category: 1 + description: Good Red + cost_local_VAT_excl: 5.0 + cost_local_VAT_incl: 6.0 + currency_cost: + id: 1 + name: None + code: GBP + symbol: £ + factor from GBP: None + display_order: None + active: None -raw errors: () -product with id:6 has variations -new result set: () -get many category_list: categories: [ + latency_manufacture: 14 + id_unit_measurement_quantity: 1 + symbol_unit_measurement_quantity: m + symbol_is_suffix_not_prefix_unit_measurement_quantity: True + name_singular_unit_measurement_quantity: metre + name_plural_unit_measurement_quantity: metres + count_unit_measurement_per_quantity_step: 1.0 + quantity_min: 3.0 + quantity_max: 99.0 + quantity_stock: 1.0 + is_subscription: False + id_unit_measurement_interval_recurrence: None + symbol_unit_measurement_interval_recurrence: None + symbol_is_suffix_not_prefix_unit_measurement_interval_recurrence: False + name_singular_unit_measurement_interval_recurrence: None + name_plural_unit_measurement_interval_recurrence: None + count_interval_recurrence: None + id_stripe_product: None + does_expire_faster_once_unsealed: False + id_unit_measurement_interval_expiration_unsealed: None + symbol_unit_measurement_interval_expiration_unsealed: None + symbol_is_suffix_not_prefix_unit_measurement_interval_expiration_unsealed: False + name_singular_unit_measurement_interval_expiration_unsealed: None + name_plural_unit_measurement_interval_expiration_unsealed: None + count_interval_expiration_unsealed: None + has_variations: True + csv_id_pairs_variation: None + can_view: False + can_edit: False + can_admin: False + variation tree: + images: [] + delivery_options: [] + prices: [] + , Product_Permutation + id_permutation: 2 + id_product: 1 + id_category: 1 + description: Good Blue + cost_local_VAT_excl: 6.0 + cost_local_VAT_incl: 7.2 + currency_cost: + id: 1 + name: None + code: GBP + symbol: £ + factor from GBP: None + display_order: None + active: None + + latency_manufacture: 14 + id_unit_measurement_quantity: 1 + symbol_unit_measurement_quantity: m + symbol_is_suffix_not_prefix_unit_measurement_quantity: True + name_singular_unit_measurement_quantity: metre + name_plural_unit_measurement_quantity: metres + count_unit_measurement_per_quantity_step: 1.0 + quantity_min: 3.0 + quantity_max: 99.0 + quantity_stock: 1.0 + is_subscription: False + id_unit_measurement_interval_recurrence: None + symbol_unit_measurement_interval_recurrence: None + symbol_is_suffix_not_prefix_unit_measurement_interval_recurrence: False + name_singular_unit_measurement_interval_recurrence: None + name_plural_unit_measurement_interval_recurrence: None + count_interval_recurrence: None + id_stripe_product: None + does_expire_faster_once_unsealed: False + id_unit_measurement_interval_expiration_unsealed: None + symbol_unit_measurement_interval_expiration_unsealed: None + symbol_is_suffix_not_prefix_unit_measurement_interval_expiration_unsealed: False + name_singular_unit_measurement_interval_expiration_unsealed: None + name_plural_unit_measurement_interval_expiration_unsealed: None + count_interval_expiration_unsealed: None + has_variations: True + csv_id_pairs_variation: None + can_view: False + can_edit: False + can_admin: False + variation tree: + images: [] + delivery_options: [] + prices: [] + ] + variation trees: [, ] + active: False + ] + , id: 4 code: CHOCOLATE name: Chocolates and sweets @@ -168,21 +140,270 @@ get many category_list: categories: [ variation trees: [] active: True ] - ] -DataStore_Base.get_user_session -User.from_json -json: {'can_admin_store': True, 'can_admin_user': True, 'email': 'edward.middletonsmith@gmail.com', 'firstname': 'Teddy', 'id_currency_default': None, 'id_region_default': None, 'id_user': 1, 'id_user_auth0': 'auth0|6582b95c895d09a70ba10fef', 'is_email_verified': False, 'is_included_VAT_default': True, 'is_super_user': True, 'surname': 'Middleton-Smith'} -user: - id_user: 1 - id_user_auth0: auth0|6582b95c895d09a70ba10fef - firstname: Teddy - surname: Middleton-Smith - email: edward.middletonsmith@gmail.com - is_email_verified: False - is_super_user: True - id_currency_default: None - id_region_default: None - is_included_VAT_default: True - can_admin_store: True - can_admin_user: True + , + id: 3 + code: TECH + name: Technology + description: Technological devices + access_level: View + display_order: 2 + active: False + products: [Product + id_product: 3 + id_category: 3 + name: Phone + display_order: 2 + can_view: False + can_edit: False + can_admin: False + has_variations: False + permutations: [Product_Permutation + id_permutation: 4 + id_product: 3 + id_category: 3 + description: Phone describes good + cost_local_VAT_excl: 10.0 + cost_local_VAT_incl: 12.0 + currency_cost: + id: 1 + name: None + code: GBP + symbol: £ + factor from GBP: None + display_order: None + active: None + latency_manufacture: 14 + id_unit_measurement_quantity: 1 + symbol_unit_measurement_quantity: m + symbol_is_suffix_not_prefix_unit_measurement_quantity: True + name_singular_unit_measurement_quantity: metre + name_plural_unit_measurement_quantity: metres + count_unit_measurement_per_quantity_step: 1.0 + quantity_min: 2.0 + quantity_max: 99.0 + quantity_stock: 1.0 + is_subscription: False + id_unit_measurement_interval_recurrence: None + symbol_unit_measurement_interval_recurrence: None + symbol_is_suffix_not_prefix_unit_measurement_interval_recurrence: False + name_singular_unit_measurement_interval_recurrence: None + name_plural_unit_measurement_interval_recurrence: None + count_interval_recurrence: None + id_stripe_product: None + does_expire_faster_once_unsealed: False + id_unit_measurement_interval_expiration_unsealed: None + symbol_unit_measurement_interval_expiration_unsealed: None + symbol_is_suffix_not_prefix_unit_measurement_interval_expiration_unsealed: False + name_singular_unit_measurement_interval_expiration_unsealed: None + name_plural_unit_measurement_interval_expiration_unsealed: None + count_interval_expiration_unsealed: None + has_variations: False + csv_id_pairs_variation: None + can_view: False + can_edit: False + can_admin: False + variation tree: None + images: [] + delivery_options: [] + prices: [] + ] + variation trees: [] + active: False + , Product + id_product: 4 + id_category: 3 + name: Laptop + display_order: 2 + can_view: False + can_edit: False + can_admin: False + has_variations: False + permutations: [Product_Permutation + id_permutation: 5 + id_product: 4 + id_category: 3 + description: Laptop describes good + cost_local_VAT_excl: 10.0 + cost_local_VAT_incl: 12.0 + currency_cost: + id: 1 + name: None + code: GBP + symbol: £ + factor from GBP: None + display_order: None + active: None + + latency_manufacture: 14 + id_unit_measurement_quantity: 1 + symbol_unit_measurement_quantity: m + symbol_is_suffix_not_prefix_unit_measurement_quantity: True + name_singular_unit_measurement_quantity: metre + name_plural_unit_measurement_quantity: metres + count_unit_measurement_per_quantity_step: 1.0 + quantity_min: 2.0 + quantity_max: 99.0 + quantity_stock: 1.0 + is_subscription: False + id_unit_measurement_interval_recurrence: None + symbol_unit_measurement_interval_recurrence: None + symbol_is_suffix_not_prefix_unit_measurement_interval_recurrence: False + name_singular_unit_measurement_interval_recurrence: None + name_plural_unit_measurement_interval_recurrence: None + count_interval_recurrence: None + id_stripe_product: None + does_expire_faster_once_unsealed: False + id_unit_measurement_interval_expiration_unsealed: None + symbol_unit_measurement_interval_expiration_unsealed: None + symbol_is_suffix_not_prefix_unit_measurement_interval_expiration_unsealed: False + name_singular_unit_measurement_interval_expiration_unsealed: None + name_plural_unit_measurement_interval_expiration_unsealed: None + count_interval_expiration_unsealed: None + has_variations: False + csv_id_pairs_variation: None + can_view: False + can_edit: False + can_admin: False + variation tree: None + images: [] + delivery_options: [] + prices: [] + ] + variation trees: [] + active: False + , Product + id_product: 5 + id_category: 3 + name: Smart Watch + display_order: 2 + can_view: False + can_edit: False + can_admin: False + has_variations: False + permutations: [Product_Permutation + id_permutation: 6 + id_product: 5 + id_category: 3 + description: Smart watch describes good + cost_local_VAT_excl: 10.0 + cost_local_VAT_incl: 12.0 + currency_cost: + id: 1 + name: None + code: GBP + symbol: £ + factor from GBP: None + display_order: None + active: None + + latency_manufacture: 14 + id_unit_measurement_quantity: 1 + symbol_unit_measurement_quantity: m + symbol_is_suffix_not_prefix_unit_measurement_quantity: True + name_singular_unit_measurement_quantity: metre + name_plural_unit_measurement_quantity: metres + count_unit_measurement_per_quantity_step: 1.0 + quantity_min: 2.0 + quantity_max: 99.0 + quantity_stock: 1.0 + is_subscription: False + id_unit_measurement_interval_recurrence: None + symbol_unit_measurement_interval_recurrence: None + symbol_is_suffix_not_prefix_unit_measurement_interval_recurrence: False + name_singular_unit_measurement_interval_recurrence: None + name_plural_unit_measurement_interval_recurrence: None + count_interval_recurrence: None + id_stripe_product: None + does_expire_faster_once_unsealed: False + id_unit_measurement_interval_expiration_unsealed: None + symbol_unit_measurement_interval_expiration_unsealed: None + symbol_is_suffix_not_prefix_unit_measurement_interval_expiration_unsealed: False + name_singular_unit_measurement_interval_expiration_unsealed: None + name_plural_unit_measurement_interval_expiration_unsealed: None + count_interval_expiration_unsealed: None + has_variations: False + csv_id_pairs_variation: None + can_view: False + can_edit: False + can_admin: False + variation tree: None + images: [] + delivery_options: [] + prices: [] + ] + variation trees: [] + active: False + ] + , + id: 2 + code: MISC + name: Miscellaneous + description: Not category allocated products + access_level: View + display_order: 99 + active: False + products: [Product + id_product: 2 + id_category: 2 + name: Test product 1 + display_order: 99 + can_view: False + can_edit: False + can_admin: False + has_variations: False + permutations: [Product_Permutation + id_permutation: 3 + id_product: 2 + id_category: 2 + description: Test product describes good + cost_local_VAT_excl: 10.0 + cost_local_VAT_incl: 12.0 + currency_cost: + id: 1 + name: None + code: GBP + symbol: £ + factor from GBP: None + display_order: None + active: None + + latency_manufacture: 14 + id_unit_measurement_quantity: 1 + symbol_unit_measurement_quantity: m + symbol_is_suffix_not_prefix_unit_measurement_quantity: True + name_singular_unit_measurement_quantity: metre + name_plural_unit_measurement_quantity: metres + count_unit_measurement_per_quantity_step: 1.0 + quantity_min: 2.0 + quantity_max: 99.0 + quantity_stock: 1.0 + is_subscription: False + id_unit_measurement_interval_recurrence: None + symbol_unit_measurement_interval_recurrence: None + symbol_is_suffix_not_prefix_unit_measurement_interval_recurrence: False + name_singular_unit_measurement_interval_recurrence: None + name_plural_unit_measurement_interval_recurrence: None + count_interval_recurrence: None + id_stripe_product: None + does_expire_faster_once_unsealed: False + id_unit_measurement_interval_expiration_unsealed: None + symbol_unit_measurement_interval_expiration_unsealed: None + symbol_is_suffix_not_prefix_unit_measurement_interval_expiration_unsealed: False + name_singular_unit_measurement_interval_expiration_unsealed: None + name_plural_unit_measurement_interval_expiration_unsealed: None + count_interval_expiration_unsealed: None + has_variations: False + csv_id_pairs_variation: None + can_view: False + can_edit: False + can_admin: False + variation tree: None + images: [] + delivery_options: [] + prices: [] + ] + variation trees: [] + active: False + ] + ] diff --git a/controllers/store/__pycache__/product_permutation.cpython-312.pyc b/controllers/store/__pycache__/product_permutation.cpython-312.pyc index 09bc7ab5..5b4c8733 100644 Binary files a/controllers/store/__pycache__/product_permutation.cpython-312.pyc and b/controllers/store/__pycache__/product_permutation.cpython-312.pyc differ diff --git a/static/MySQL/6500_p_shop_calc_user.sql b/static/MySQL/6500_p_shop_calc_user.sql index 98dc5680..91f4421f 100644 --- a/static/MySQL/6500_p_shop_calc_user.sql +++ b/static/MySQL/6500_p_shop_calc_user.sql @@ -587,6 +587,15 @@ CALL partsltd_prod.p_shop_calc_user ( , '1,2,3,4,5' , 0 ); +CALL partsltd_prod.p_shop_calc_user ( + 'chips ' + , 1 + , 0 + , '2' + , '1' + , NULL + , 0 +); SELECT * FROM partsltd_prod.Shop_Calc_User_Temp WHERE GUID = 'chips '; DELETE FROM partsltd_prod.Shop_Calc_User_Temp WHERE GUID = 'chips '; diff --git a/static/MySQL/7206_p_shop_save_product_permutation.sql b/static/MySQL/7206_p_shop_save_product_permutation.sql index aa61e81c..51a3e326 100644 --- a/static/MySQL/7206_p_shop_save_product_permutation.sql +++ b/static/MySQL/7206_p_shop_save_product_permutation.sql @@ -457,7 +457,7 @@ BEGIN ; END IF; - IF EXISTS (SELECT * FROM partsltd_prod.Shop_User_Eval_Temp WHERE ISNULL(id_product) AND GUID = a_guid AND can_edit = 0) THEN + IF EXISTS (SELECT * FROM partsltd_prod.Shop_Calc_User_Temp WHERE ISNULL(id_product) AND GUID = a_guid AND can_edit = 0) THEN DELETE FROM tmp_Msg_Error WHERE id_type <> v_id_type_error_no_permission ; diff --git a/static/MySQL/7206_p_shop_save_product_permutation_test.sql b/static/MySQL/7206_p_shop_save_product_permutation_test.sql index 3ce60a20..cfa06e27 100644 --- a/static/MySQL/7206_p_shop_save_product_permutation_test.sql +++ b/static/MySQL/7206_p_shop_save_product_permutation_test.sql @@ -96,7 +96,7 @@ BEGIN -1 -- id_permutation , 1 -- id_product , '1:3' -- csv_id_pairs_variation - , 'Test with variations' -- description + , 'Good Green' -- description , NULL -- cost_local_VAT_excl , NULL -- cost_local_VAT_incl , 1 -- id_currency_cost @@ -147,7 +147,6 @@ BEGIN END // DELIMITER ;; -/* CALL partsltd_prod.p_shop_save_product_permutation_test (); DELETE FROM partsltd_prod.Shop_Product_Permutation_Temp; @@ -155,6 +154,7 @@ DELETE FROM partsltd_prod.Shop_Product_Permutation_Temp; DROP TABLE IF EXISTS tmp_Msg_Error; +/* DELETE FROM partsltd_prod.Shop_Product_Permutation_Variation_Link WHERE id_link >= 3 ; diff --git a/static/css/main.css b/static/css/main.css index 9c1ac85d..b56c8995 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -269,7 +269,7 @@ li { } -:not(input,textarea,select).dirty { +:not(input,textarea,select,button).dirty { background-color: var(--c_purple_dark); } input.dirty, textarea.dirty, select.dirty { diff --git a/static/dist/css/main.bundle.css b/static/dist/css/main.bundle.css index 5cfac856..4a91ab5c 100644 --- a/static/dist/css/main.bundle.css +++ b/static/dist/css/main.bundle.css @@ -269,7 +269,7 @@ li { } -:not(input,textarea,select).dirty { +:not(input,textarea,select,button).dirty { background-color: var(--c_purple_dark); } input.dirty, textarea.dirty, select.dirty { diff --git a/static/dist/js/main.bundle.js b/static/dist/js/main.bundle.js index e4a9c692..e265ee31 100644 --- a/static/dist/js/main.bundle.js +++ b/static/dist/js/main.bundle.js @@ -2626,13 +2626,23 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { key: "hookupButtonsRowDelete", value: function hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete) { var _this13 = this; + var changeHandler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (event, element) { + _this13.handleChangeNestedElementCellTable(event, element); + }; this.hookupEventHandler("click", selectorButtonDelete, function (event, element) { - _this13.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete); + _this13.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, function (changeEvent, changeElement) { + changeHandler(changeEvent, changeElement); + }); }); } }, { key: "handleClickButtonRowDelete", value: function handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete) { + var _this14 = this; + var changeHandler = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (event, element) { + _this14.handleChangeNestedElementCellTable(event, element); + }; + debugger; var row = DOM.getRowFromElement(element); // row.classList.add(flagDelete); if (row.classList.contains(flagRowNew) && !DOM.hasDirtyChildrenContainer(row)) { @@ -2645,21 +2655,33 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { buttonAdd.textContent = '+'; // DOM.setElementAttributeValueCurrent(buttonAdd, false); element.replaceWith(buttonAdd); - this.handleChangeNestedElementCellTable(null, buttonAdd); - this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete); + changeHandler(null, buttonAdd); + this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, function (changeEvent, changeElement) { + changeHandler(changeEvent, changeElement); + }); this.updateAndToggleShowButtonsSaveCancel(); } }, { key: "hookupButtonsRowUndelete", value: function hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete) { - var _this14 = this; + var _this15 = this; + var changeHandler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (event, element) { + _this15.handleChangeNestedElementCellTable(event, element); + }; this.hookupEventHandler("click", selectorButtonUndelete, function (event, element) { - _this14.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete); + _this15.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, function (changeEvent, changeElement) { + changeHandler(changeEvent, changeElement); + }); }); } }, { key: "handleClickButtonRowUndelete", value: function handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete) { + var _this16 = this; + var changeHandler = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (event, element) { + _this16.handleChangeNestedElementCellTable(event, element); + }; + debugger; // let row = DOM.getRowFromElement(element); // row.classList.remove(flagDelete); var buttonDelete = element.cloneNode(false); // document.createElement("button"); @@ -2669,8 +2691,10 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { buttonDelete.textContent = 'x'; // DOM.setElementAttributeValueCurrent(buttonDelete, true); element.replaceWith(buttonDelete); - this.handleChangeNestedElementCellTable(null, buttonDelete); - this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete); + changeHandler(null, buttonDelete); + this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, function (changeEvent, changeElement) { + changeHandler(changeEvent, changeElement); + }); this.updateAndToggleShowButtonsSaveCancel(); } }, { @@ -2682,15 +2706,15 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { }, { key: "hookupTableCellDdlPreviews", value: function hookupTableCellDdlPreviews(cellSelector, optionList) { - var _this15 = this; + var _this17 = this; var ddlHookup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (cellSelector) { - _this15.hookupTableCellDdls(cellSelector); + _this17.hookupTableCellDdls(cellSelector); }; var changeHandler = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : function (event, element) { - _this15.handleChangeNestedElementCellTable(event, element); + _this17.handleChangeNestedElementCellTable(event, element); }; this.hookupEventHandler("click", cellSelector, function (event, td) { - _this15.handleClickTableCellDdlPreview(event, td, optionList, cellSelector, function (cellSelector) { + _this17.handleClickTableCellDdlPreview(event, td, optionList, cellSelector, function (cellSelector) { ddlHookup(cellSelector, function (event, element) { changeHandler(event, element); }); @@ -2701,9 +2725,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { }, { key: "hookupTableCellDdls", value: function hookupTableCellDdls(ddlSelector) { - var _this16 = this; + var _this18 = this; var changeHandler = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (event, element) { - _this16.handleChangeNestedElementCellTable(event, element); + _this18.handleChangeNestedElementCellTable(event, element); }; this.hookupEventHandler("change", ddlSelector, function (event, element) { changeHandler(event, element); @@ -2712,9 +2736,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { }, { key: "handleClickTableCellDdlPreview", value: function handleClickTableCellDdlPreview(event, td, optionObjectList, cellSelector) { - var _this17 = this; + var _this19 = this; var ddlHookup = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function (cellSelector) { - _this17.hookupTableCellDdls(cellSelector); + _this19.hookupTableCellDdls(cellSelector); }; if (td.querySelector('select')) return; // td.removeEventListener("click", ddlHookup); @@ -2774,14 +2798,14 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { }, { key: "hookupTableCellDDlPreviewsWhenNotCollapsed", value: function hookupTableCellDDlPreviewsWhenNotCollapsed(cellSelector, optionList) { - var _this18 = this; + var _this20 = this; var ddlHookup = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (event, element) { - _this18.hookupTableCellDdls(event, element); + _this20.hookupTableCellDdls(event, element); }; this.hookupEventHandler("click", cellSelector, function (event, td) { var div = td.querySelector('div'); if (!div || div.classList.contains(flagCollapsed)) return; - _this18.handleClickTableCellDdlPreview(event, td, optionList, cellSelector, function (event, element) { + _this20.handleClickTableCellDdlPreview(event, td, optionList, cellSelector, function (event, element) { ddlHookup(event, element); }); }); @@ -2789,9 +2813,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { }, { key: "hookupProductCategoryDdls", value: function hookupProductCategoryDdls(ddlSelector) { - var _this19 = this; + var _this21 = this; this.hookupChangeHandlerTableCells(ddlSelector, function (event, element) { - _this19.handleChangeProductCategoryDdl(event, element); + _this21.handleChangeProductCategoryDdl(event, element); }); } }, { @@ -2825,15 +2849,15 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { }, { key: "hookupPreviewsProductPermutationVariation", value: function hookupPreviewsProductPermutationVariation() { - var _this20 = this; + var _this22 = this; this.hookupEventHandler("click", idTableMain + ' td.' + flagProductVariations, function (event, element) { - return _this20.handleClickProductPermutationVariationsPreview(event, element); + return _this22.handleClickProductPermutationVariationsPreview(event, element); }); } }, { key: "handleClickProductPermutationVariationsPreview", value: function handleClickProductPermutationVariationsPreview(event, element) { - var _this21 = this; + var _this23 = this; var tblVariations = element.querySelector('table.' + flagProductVariations); if (!validation_Validation.isEmpty(tblVariations)) return; this.toggleColumnCollapsed(flagProductVariations, false); @@ -2862,7 +2886,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { var tbody = document.createElement("tbody"); if (!validation_Validation.isEmpty(permutationVariations)) { permutationVariations.forEach(function (permutationVariation, index) { - _this21.addProductPermutationVariationRow(tbody, permutationVariation); + _this23.addProductPermutationVariationRow(tbody, permutationVariation); }); } tblVariations.appendChild(tbody); @@ -2993,8 +3017,10 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { var tdDelete = document.createElement("td"); tdDelete.classList.add(flagDelete); var buttonDelete = document.createElement("button"); + buttonDelete.classList.add(flagActive); buttonDelete.classList.add(flagDelete); buttonDelete.textContent = 'x'; + DOM.setElementAttributesValuesCurrentAndPrevious(buttonDelete, true); var tr = document.createElement("tr"); tr.classList.add(flagProductVariation); tdVariationType.appendChild(ddlVariationType); @@ -3008,9 +3034,9 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { }, { key: "hookupDdlsProductPermutationVariationType", value: function hookupDdlsProductPermutationVariationType() { - var _this22 = this; + var _this24 = this; this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariationType + ' select', function (event, ddlVariationType) { - _this22.handleChangeDdlProductVariationOrVariationType(event, ddlVariationType); + _this24.handleChangeProductVariationInput(event, ddlVariationType); var idVariationTypeSelected = DOM.getElementValueCurrent(ddlVariationType); var row = DOM.getRowFromElement(ddlVariationType); var tdVariation = row.querySelector('td.' + flagProductVariation); @@ -3026,43 +3052,44 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { option = DOM.createOption(optionJson); ddlVariation.appendChild(option); }); - _this22.handleChangeDdlProductVariationOrVariationType(event, ddlVariation); + _this24.handleChangeProductVariationInput(event, ddlVariation); }); } }, { - key: "handleChangeDdlProductVariationOrVariationType", - value: function handleChangeDdlProductVariationOrVariationType(event, element) { + key: "handleChangeProductVariationInput", + value: function handleChangeProductVariationInput(event, element) { this.handleChangeNestedElementCellTable(event, element); this.updateProductPermutationVariations(element); } }, { key: "hookupDdlsProductPermutationVariation", value: function hookupDdlsProductPermutationVariation() { - var _this23 = this; + var _this25 = this; this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation + ' select', function (event, ddlVariation) { - _this23.handleChangeDdlProductVariationOrVariationType(event, ddlVariation); + _this25.handleChangeProductVariationInput(event, ddlVariation); }); } }, { key: "hookupButtonsProductPermutationVariationAddDelete", value: function hookupButtonsProductPermutationVariationAddDelete() { - var _this24 = this; + var _this26 = this; var selectorButton = idTableMain + ' td.' + flagProductVariations + ' tr.' + flagProductVariation + ' button'; var selectorButtonDelete = selectorButton + '.' + flagDelete; var selectorButtonUndelete = selectorButton + '.' + flagAdd; this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, function (event, element) { - _this24.handleClickButtonRowDelete(event, element); - _this24.updateProductPermutationVariations(element); + _this26.handleChangeProductVariationInput(event, element); + }); + this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, function (event, element) { + _this26.handleChangeProductVariationInput(event, element); }); - this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete); this.hookupButtonsProductPermutationVariationAdd(); } }, { key: "hookupButtonsProductPermutationVariationAdd", value: function hookupButtonsProductPermutationVariationAdd() { - var _this25 = this; + var _this27 = this; this.hookupEventHandler("click", idTableMain + ' td.' + flagProductVariations + ' button.' + flagAdd, function (event, element) { - _this25.handleClickButtonProductPermutationVariationAdd(event, element); + _this27.handleClickButtonProductPermutationVariationAdd(event, element); }); } }, { @@ -3085,7 +3112,7 @@ var TableBasePage = /*#__PURE__*/function (_BasePage) { }, { key: "getProductPermutationVariationsText", value: function getProductPermutationVariationsText(variationsTd) { - var rows = variationsTd.querySelectorAll(':scope tbody tr'); + var rows = variationsTd.querySelectorAll(':scope tbody tr:has(button.' + flagDelete + ')'); var variationPairsString = ''; var ddlVariationType, ddlVariation, idVariationType, idVariation; rows.forEach(function (row, index) { diff --git a/static/js/pages/base_table.js b/static/js/pages/base_table.js index 64df452d..14f876d7 100644 --- a/static/js/pages/base_table.js +++ b/static/js/pages/base_table.js @@ -484,45 +484,40 @@ export default class TableBasePage extends BasePage { , (event, button) => { handleClickRowNew(event, button); } ); } - hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete) { + hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) { this.hookupEventHandler("click", selectorButtonDelete, (event, element) => { - this.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete); + this.handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); }); }); } - handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete) { + handleClickButtonRowDelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) { let row = DOM.getRowFromElement(element); - // row.classList.add(flagDelete); if (row.classList.contains(flagRowNew) && !DOM.hasDirtyChildrenContainer(row)) { row.parentNode.removeChild(row); } - let buttonAdd = element.cloneNode(false); // document.createElement("button"); + let buttonAdd = element.cloneNode(false); buttonAdd.classList.remove(flagInitialised); buttonAdd.classList.remove(flagDelete); buttonAdd.classList.add(flagAdd); buttonAdd.textContent = '+'; - // DOM.setElementAttributeValueCurrent(buttonAdd, false); element.replaceWith(buttonAdd); - this.handleChangeNestedElementCellTable(null, buttonAdd); - this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete); + changeHandler(null, buttonAdd); + this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); }); this.updateAndToggleShowButtonsSaveCancel(); } - hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete) { + hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) { this.hookupEventHandler("click", selectorButtonUndelete, (event, element) => { - this.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete); + this.handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); }); }); } - handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete) { - // let row = DOM.getRowFromElement(element); - // row.classList.remove(flagDelete); - let buttonDelete = element.cloneNode(false); // document.createElement("button"); + handleClickButtonRowUndelete(event, element, selectorButtonDelete, selectorButtonUndelete, changeHandler = (event, element) => { this.handleChangeNestedElementCellTable(event, element); }) { + let buttonDelete = element.cloneNode(false); buttonDelete.classList.remove(flagInitialised); buttonDelete.classList.remove(flagAdd); buttonDelete.classList.add(flagDelete); buttonDelete.textContent = 'x'; - // DOM.setElementAttributeValueCurrent(buttonDelete, true); element.replaceWith(buttonDelete); - this.handleChangeNestedElementCellTable(null, buttonDelete); - this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete); + changeHandler(null, buttonDelete); + this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, (changeEvent, changeElement) => { changeHandler(changeEvent, changeElement); }); this.updateAndToggleShowButtonsSaveCancel(); } hookupTdsAccessLevel() { @@ -810,8 +805,10 @@ export default class TableBasePage extends BasePage { tdDelete.classList.add(flagDelete); let buttonDelete = document.createElement("button"); + buttonDelete.classList.add(flagActive); buttonDelete.classList.add(flagDelete); buttonDelete.textContent = 'x'; + DOM.setElementAttributesValuesCurrentAndPrevious(buttonDelete, true); let tr = document.createElement("tr"); tr.classList.add(flagProductVariation); @@ -827,7 +824,7 @@ export default class TableBasePage extends BasePage { this.hookupTableCellDdls( idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariationType + ' select' , (event, ddlVariationType) => { - this.handleChangeDdlProductVariationOrVariationType(event, ddlVariationType); + this.handleChangeProductVariationInput(event, ddlVariationType); let idVariationTypeSelected = DOM.getElementValueCurrent(ddlVariationType); let row = DOM.getRowFromElement(ddlVariationType); let tdVariation = row.querySelector('td.' + flagProductVariation); @@ -845,26 +842,23 @@ export default class TableBasePage extends BasePage { option = DOM.createOption(optionJson); ddlVariation.appendChild(option); }); - this.handleChangeDdlProductVariationOrVariationType(event, ddlVariation); + this.handleChangeProductVariationInput(event, ddlVariation); } ); } - handleChangeDdlProductVariationOrVariationType(event, element) { + handleChangeProductVariationInput(event, element) { this.handleChangeNestedElementCellTable(event, element); this.updateProductPermutationVariations(element); } hookupDdlsProductPermutationVariation() { - this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation + ' select', (event, ddlVariation) => { this.handleChangeDdlProductVariationOrVariationType(event, ddlVariation); }); + this.hookupTableCellDdls(idTableMain + ' td.' + flagProductVariations + ' td.' + flagProductVariation + ' select', (event, ddlVariation) => { this.handleChangeProductVariationInput(event, ddlVariation); }); } hookupButtonsProductPermutationVariationAddDelete() { let selectorButton = idTableMain + ' td.' + flagProductVariations + ' tr.' + flagProductVariation + ' button'; let selectorButtonDelete = selectorButton + '.' + flagDelete; let selectorButtonUndelete = selectorButton + '.' + flagAdd; - this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, (event, element) => { - this.handleClickButtonRowDelete(event, element); - this.updateProductPermutationVariations(element); - }); - this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete); + this.hookupButtonsRowDelete(selectorButtonDelete, selectorButtonUndelete, (event, element) => { this.handleChangeProductVariationInput(event, element); }); + this.hookupButtonsRowUndelete(selectorButtonDelete, selectorButtonUndelete, (event, element) => { this.handleChangeProductVariationInput(event, element); }); this.hookupButtonsProductPermutationVariationAdd(); } hookupButtonsProductPermutationVariationAdd() { @@ -888,7 +882,7 @@ export default class TableBasePage extends BasePage { this.handleChangeNestedElementCellTable(null, variationsCell); } getProductPermutationVariationsText(variationsTd) { - let rows = variationsTd.querySelectorAll(':scope tbody tr'); + let rows = variationsTd.querySelectorAll(':scope tbody tr:has(button.' + flagDelete + ')'); let variationPairsString = ''; let ddlVariationType, ddlVariation, idVariationType, idVariation; rows.forEach((row, index) => {