@open-mercato/core 0.4.11-develop.1406.2f08706ed8 → 0.4.11-develop.1413.f6aab77ce7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/entities/access_log/index.js.map +1 -1
- package/dist/generated/entities/action_log/index.js.map +1 -1
- package/dist/generated/entities/api_key/index.js.map +1 -1
- package/dist/generated/entities/attachment/index.js.map +1 -1
- package/dist/generated/entities/attachment_partition/index.js.map +1 -1
- package/dist/generated/entities/business_rule/index.js.map +1 -1
- package/dist/generated/entities/carrier_shipment/index.js.map +1 -1
- package/dist/generated/entities/catalog_offer/index.js.map +1 -1
- package/dist/generated/entities/catalog_option_schema_template/index.js.map +1 -1
- package/dist/generated/entities/catalog_price_kind/index.js.map +1 -1
- package/dist/generated/entities/catalog_product/index.js.map +1 -1
- package/dist/generated/entities/catalog_product_category/index.js.map +1 -1
- package/dist/generated/entities/catalog_product_category_assignment/index.js.map +1 -1
- package/dist/generated/entities/catalog_product_price/index.js.map +1 -1
- package/dist/generated/entities/catalog_product_tag/index.js.map +1 -1
- package/dist/generated/entities/catalog_product_tag_assignment/index.js.map +1 -1
- package/dist/generated/entities/catalog_product_unit_conversion/index.js.map +1 -1
- package/dist/generated/entities/catalog_product_variant/index.js.map +1 -1
- package/dist/generated/entities/catalog_product_variant_relation/index.js.map +1 -1
- package/dist/generated/entities/currency/index.js.map +1 -1
- package/dist/generated/entities/currency_fetch_config/index.js.map +1 -1
- package/dist/generated/entities/custom_entity/index.js.map +1 -1
- package/dist/generated/entities/custom_entity_storage/index.js.map +1 -1
- package/dist/generated/entities/custom_field_def/index.js.map +1 -1
- package/dist/generated/entities/custom_field_entity_config/index.js.map +1 -1
- package/dist/generated/entities/custom_field_value/index.js.map +1 -1
- package/dist/generated/entities/customer_activity/index.js.map +1 -1
- package/dist/generated/entities/customer_address/index.js.map +1 -1
- package/dist/generated/entities/customer_comment/index.js.map +1 -1
- package/dist/generated/entities/customer_company_profile/index.js.map +1 -1
- package/dist/generated/entities/customer_deal/index.js.map +1 -1
- package/dist/generated/entities/customer_deal_company_link/index.js.map +1 -1
- package/dist/generated/entities/customer_deal_person_link/index.js.map +1 -1
- package/dist/generated/entities/customer_dictionary_entry/index.js.map +1 -1
- package/dist/generated/entities/customer_entity/index.js.map +1 -1
- package/dist/generated/entities/customer_interaction/index.js.map +1 -1
- package/dist/generated/entities/customer_person_profile/index.js.map +1 -1
- package/dist/generated/entities/customer_pipeline/index.js.map +1 -1
- package/dist/generated/entities/customer_pipeline_stage/index.js.map +1 -1
- package/dist/generated/entities/customer_role/index.js.map +1 -1
- package/dist/generated/entities/customer_role_acl/index.js.map +1 -1
- package/dist/generated/entities/customer_settings/index.js.map +1 -1
- package/dist/generated/entities/customer_tag/index.js.map +1 -1
- package/dist/generated/entities/customer_tag_assignment/index.js.map +1 -1
- package/dist/generated/entities/customer_todo_link/index.js.map +1 -1
- package/dist/generated/entities/customer_user/index.js.map +1 -1
- package/dist/generated/entities/customer_user_acl/index.js.map +1 -1
- package/dist/generated/entities/customer_user_email_verification/index.js.map +1 -1
- package/dist/generated/entities/customer_user_invitation/index.js.map +1 -1
- package/dist/generated/entities/customer_user_password_reset/index.js.map +1 -1
- package/dist/generated/entities/customer_user_role/index.js.map +1 -1
- package/dist/generated/entities/customer_user_session/index.js.map +1 -1
- package/dist/generated/entities/dashboard_layout/index.js.map +1 -1
- package/dist/generated/entities/dashboard_role_widgets/index.js.map +1 -1
- package/dist/generated/entities/dashboard_user_widgets/index.js.map +1 -1
- package/dist/generated/entities/dictionary/index.js.map +1 -1
- package/dist/generated/entities/dictionary_entry/index.js.map +1 -1
- package/dist/generated/entities/encryption_map/index.js.map +1 -1
- package/dist/generated/entities/entity_index_coverage/index.js.map +1 -1
- package/dist/generated/entities/entity_index_job/index.js.map +1 -1
- package/dist/generated/entities/entity_index_row/index.js.map +1 -1
- package/dist/generated/entities/entity_translation/index.js.map +1 -1
- package/dist/generated/entities/exchange_rate/index.js.map +1 -1
- package/dist/generated/entities/feature_toggle/index.js.map +1 -1
- package/dist/generated/entities/feature_toggle_override/index.js.map +1 -1
- package/dist/generated/entities/gateway_transaction/index.js.map +1 -1
- package/dist/generated/entities/inbox_discrepancy/index.js.map +1 -1
- package/dist/generated/entities/inbox_email/index.js.map +1 -1
- package/dist/generated/entities/inbox_proposal/index.js.map +1 -1
- package/dist/generated/entities/inbox_proposal_action/index.js.map +1 -1
- package/dist/generated/entities/inbox_settings/index.js.map +1 -1
- package/dist/generated/entities/indexer_error_log/index.js.map +1 -1
- package/dist/generated/entities/indexer_status_log/index.js.map +1 -1
- package/dist/generated/entities/integration_credentials/index.js.map +1 -1
- package/dist/generated/entities/integration_log/index.js.map +1 -1
- package/dist/generated/entities/integration_state/index.js.map +1 -1
- package/dist/generated/entities/message/index.js.map +1 -1
- package/dist/generated/entities/message_access_token/index.js.map +1 -1
- package/dist/generated/entities/message_confirmation/index.js.map +1 -1
- package/dist/generated/entities/message_object/index.js.map +1 -1
- package/dist/generated/entities/message_recipient/index.js.map +1 -1
- package/dist/generated/entities/module_config/index.js.map +1 -1
- package/dist/generated/entities/notification/index.js.map +1 -1
- package/dist/generated/entities/organization/index.js.map +1 -1
- package/dist/generated/entities/password_reset/index.js.map +1 -1
- package/dist/generated/entities/perspective/index.js.map +1 -1
- package/dist/generated/entities/planner_availability_rule/index.js.map +1 -1
- package/dist/generated/entities/planner_availability_rule_set/index.js.map +1 -1
- package/dist/generated/entities/progress_job/index.js.map +1 -1
- package/dist/generated/entities/resources_resource/index.js.map +1 -1
- package/dist/generated/entities/resources_resource_activity/index.js.map +1 -1
- package/dist/generated/entities/resources_resource_comment/index.js.map +1 -1
- package/dist/generated/entities/resources_resource_tag/index.js.map +1 -1
- package/dist/generated/entities/resources_resource_tag_assignment/index.js.map +1 -1
- package/dist/generated/entities/resources_resource_type/index.js.map +1 -1
- package/dist/generated/entities/role/index.js.map +1 -1
- package/dist/generated/entities/role_acl/index.js.map +1 -1
- package/dist/generated/entities/role_perspective/index.js.map +1 -1
- package/dist/generated/entities/role_sidebar_preference/index.js.map +1 -1
- package/dist/generated/entities/rule_execution_log/index.js.map +1 -1
- package/dist/generated/entities/rule_set/index.js.map +1 -1
- package/dist/generated/entities/rule_set_member/index.js.map +1 -1
- package/dist/generated/entities/sales_channel/index.js.map +1 -1
- package/dist/generated/entities/sales_credit_memo/index.js.map +1 -1
- package/dist/generated/entities/sales_credit_memo_line/index.js.map +1 -1
- package/dist/generated/entities/sales_delivery_window/index.js.map +1 -1
- package/dist/generated/entities/sales_document_address/index.js.map +1 -1
- package/dist/generated/entities/sales_document_sequence/index.js.map +1 -1
- package/dist/generated/entities/sales_document_tag/index.js.map +1 -1
- package/dist/generated/entities/sales_document_tag_assignment/index.js.map +1 -1
- package/dist/generated/entities/sales_invoice/index.js.map +1 -1
- package/dist/generated/entities/sales_invoice_line/index.js.map +1 -1
- package/dist/generated/entities/sales_note/index.js.map +1 -1
- package/dist/generated/entities/sales_order/index.js.map +1 -1
- package/dist/generated/entities/sales_order_adjustment/index.js.map +1 -1
- package/dist/generated/entities/sales_order_line/index.js.map +1 -1
- package/dist/generated/entities/sales_payment/index.js.map +1 -1
- package/dist/generated/entities/sales_payment_allocation/index.js.map +1 -1
- package/dist/generated/entities/sales_payment_method/index.js.map +1 -1
- package/dist/generated/entities/sales_quote/index.js.map +1 -1
- package/dist/generated/entities/sales_quote_adjustment/index.js.map +1 -1
- package/dist/generated/entities/sales_quote_line/index.js.map +1 -1
- package/dist/generated/entities/sales_return/index.js.map +1 -1
- package/dist/generated/entities/sales_return_line/index.js.map +1 -1
- package/dist/generated/entities/sales_settings/index.js.map +1 -1
- package/dist/generated/entities/sales_shipment/index.js.map +1 -1
- package/dist/generated/entities/sales_shipment_item/index.js.map +1 -1
- package/dist/generated/entities/sales_shipping_method/index.js.map +1 -1
- package/dist/generated/entities/sales_tax_rate/index.js.map +1 -1
- package/dist/generated/entities/search_token/index.js.map +1 -1
- package/dist/generated/entities/session/index.js.map +1 -1
- package/dist/generated/entities/staff_leave_request/index.js.map +1 -1
- package/dist/generated/entities/staff_team/index.js.map +1 -1
- package/dist/generated/entities/staff_team_member/index.js.map +1 -1
- package/dist/generated/entities/staff_team_member_activity/index.js.map +1 -1
- package/dist/generated/entities/staff_team_member_address/index.js.map +1 -1
- package/dist/generated/entities/staff_team_member_comment/index.js.map +1 -1
- package/dist/generated/entities/staff_team_member_job_history/index.js.map +1 -1
- package/dist/generated/entities/staff_team_role/index.js.map +1 -1
- package/dist/generated/entities/step_instance/index.js.map +1 -1
- package/dist/generated/entities/sync_cursor/index.js.map +1 -1
- package/dist/generated/entities/sync_external_id_mapping/index.js.map +1 -1
- package/dist/generated/entities/sync_mapping/index.js.map +1 -1
- package/dist/generated/entities/sync_run/index.js.map +1 -1
- package/dist/generated/entities/sync_schedule/index.js.map +1 -1
- package/dist/generated/entities/tenant/index.js.map +1 -1
- package/dist/generated/entities/upgrade_action_run/index.js.map +1 -1
- package/dist/generated/entities/user/index.js.map +1 -1
- package/dist/generated/entities/user_acl/index.js.map +1 -1
- package/dist/generated/entities/user_consent/index.js.map +1 -1
- package/dist/generated/entities/user_role/index.js.map +1 -1
- package/dist/generated/entities/user_sidebar_preference/index.js.map +1 -1
- package/dist/generated/entities/user_task/index.js.map +1 -1
- package/dist/generated/entities/webhook_processed_event/index.js.map +1 -1
- package/dist/generated/entities/workflow_definition/index.js.map +1 -1
- package/dist/generated/entities/workflow_event/index.js.map +1 -1
- package/dist/generated/entities/workflow_event_trigger/index.js.map +1 -1
- package/dist/generated/entities/workflow_instance/index.js.map +1 -1
- package/dist/generated/entities.ids.generated.js +1 -2
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +2585 -316
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/auth.js +23 -0
- package/dist/helpers/integration/auth.js.map +2 -2
- package/dist/helpers/integration/salesUi.js +261 -28
- package/dist/helpers/integration/salesUi.js.map +3 -3
- package/dist/modules/api_docs/frontend/docs/api/page.js +10 -10
- package/dist/modules/api_docs/frontend/docs/api/page.js.map +2 -2
- package/dist/modules/auth/api/admin/nav.js +5 -3
- package/dist/modules/auth/api/admin/nav.js.map +2 -2
- package/dist/modules/auth/lib/backendChrome.js +28 -1
- package/dist/modules/auth/lib/backendChrome.js.map +2 -2
- package/dist/modules/catalog/api/products/route.js +23 -6
- package/dist/modules/catalog/api/products/route.js.map +2 -2
- package/dist/modules/configs/lib/system-status.js +1 -1
- package/dist/modules/configs/lib/system-status.js.map +1 -1
- package/dist/modules/customers/backend/customers/deals/[id]/page.js +226 -221
- package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
- package/dist/modules/customers/commands/companies.js +14 -0
- package/dist/modules/customers/commands/companies.js.map +2 -2
- package/dist/modules/customers/commands/people.js +18 -1
- package/dist/modules/customers/commands/people.js.map +2 -2
- package/dist/modules/entities/backend/entities/user/[entityId]/records/create/page.js +0 -1
- package/dist/modules/entities/backend/entities/user/[entityId]/records/create/page.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +2 -2
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/generated/entities/access_log/index.ts +11 -11
- package/generated/entities/action_log/index.ts +20 -20
- package/generated/entities/api_key/index.ts +17 -17
- package/generated/entities/attachment/index.ts +15 -15
- package/generated/entities/attachment_partition/index.ts +11 -11
- package/generated/entities/business_rule/index.ts +23 -23
- package/generated/entities/carrier_shipment/index.ts +17 -17
- package/generated/entities/catalog_offer/index.ts +15 -15
- package/generated/entities/catalog_option_schema_template/index.ts +12 -12
- package/generated/entities/catalog_price_kind/index.ts +13 -13
- package/generated/entities/catalog_product/index.ts +39 -39
- package/generated/entities/catalog_product_category/index.ts +19 -19
- package/generated/entities/catalog_product_category_assignment/index.ts +8 -8
- package/generated/entities/catalog_product_price/index.ts +25 -25
- package/generated/entities/catalog_product_tag/index.ts +8 -8
- package/generated/entities/catalog_product_tag_assignment/index.ts +7 -7
- package/generated/entities/catalog_product_unit_conversion/index.ts +12 -12
- package/generated/entities/catalog_product_variant/index.ts +24 -24
- package/generated/entities/catalog_product_variant_relation/index.ts +14 -14
- package/generated/entities/currency/index.ts +14 -14
- package/generated/entities/currency_fetch_config/index.ts +13 -13
- package/generated/entities/custom_entity/index.ts +13 -13
- package/generated/entities/custom_entity_storage/index.ts +9 -9
- package/generated/entities/custom_field_def/index.ts +11 -11
- package/generated/entities/custom_field_entity_config/index.ts +9 -9
- package/generated/entities/custom_field_value/index.ts +13 -13
- package/generated/entities/customer_activity/index.ts +14 -14
- package/generated/entities/customer_address/index.ts +20 -20
- package/generated/entities/customer_comment/index.ts +12 -12
- package/generated/entities/customer_company_profile/index.ts +13 -13
- package/generated/entities/customer_deal/index.ts +22 -22
- package/generated/entities/customer_deal_company_link/index.ts +4 -4
- package/generated/entities/customer_deal_person_link/index.ts +5 -5
- package/generated/entities/customer_dictionary_entry/index.ts +11 -11
- package/generated/entities/customer_entity/index.ts +32 -32
- package/generated/entities/customer_interaction/index.ts +20 -20
- package/generated/entities/customer_person_profile/index.ts +16 -16
- package/generated/entities/customer_pipeline/index.ts +7 -7
- package/generated/entities/customer_pipeline_stage/index.ts +8 -8
- package/generated/entities/customer_role/index.ts +12 -12
- package/generated/entities/customer_role_acl/index.ts +8 -8
- package/generated/entities/customer_settings/index.ts +6 -6
- package/generated/entities/customer_tag/index.ts +10 -10
- package/generated/entities/customer_tag_assignment/index.ts +6 -6
- package/generated/entities/customer_todo_link/index.ts +8 -8
- package/generated/entities/customer_user/index.ts +17 -17
- package/generated/entities/customer_user_acl/index.ts +8 -8
- package/generated/entities/customer_user_email_verification/index.ts +7 -7
- package/generated/entities/customer_user_invitation/index.ts +15 -15
- package/generated/entities/customer_user_password_reset/index.ts +6 -6
- package/generated/entities/customer_user_role/index.ts +5 -5
- package/generated/entities/customer_user_session/index.ts +9 -9
- package/generated/entities/dashboard_layout/index.ts +8 -8
- package/generated/entities/dashboard_role_widgets/index.ts +8 -8
- package/generated/entities/dashboard_user_widgets/index.ts +9 -9
- package/generated/entities/dictionary/index.ts +12 -12
- package/generated/entities/dictionary_entry/index.ts +11 -11
- package/generated/entities/encryption_map/index.ts +9 -9
- package/generated/entities/entity_index_coverage/index.ts +9 -9
- package/generated/entities/entity_index_job/index.ts +12 -12
- package/generated/entities/entity_index_row/index.ts +11 -11
- package/generated/entities/entity_translation/index.ts +8 -8
- package/generated/entities/exchange_rate/index.ts +13 -13
- package/generated/entities/feature_toggle/index.ts +10 -10
- package/generated/entities/feature_toggle_override/index.ts +6 -6
- package/generated/entities/gateway_transaction/index.ts +22 -22
- package/generated/entities/inbox_discrepancy/index.ts +15 -15
- package/generated/entities/inbox_email/index.ts +26 -26
- package/generated/entities/inbox_proposal/index.ts +22 -22
- package/generated/entities/inbox_proposal_action/index.ts +23 -23
- package/generated/entities/inbox_settings/index.ts +9 -9
- package/generated/entities/indexer_error_log/index.ts +11 -11
- package/generated/entities/indexer_status_log/index.ts +11 -11
- package/generated/entities/integration_credentials/index.ts +8 -8
- package/generated/entities/integration_log/index.ts +12 -12
- package/generated/entities/integration_state/index.ts +12 -12
- package/generated/entities/message/index.ts +31 -31
- package/generated/entities/message_access_token/index.ts +8 -8
- package/generated/entities/message_confirmation/index.ts +9 -9
- package/generated/entities/message_object/index.ts +10 -10
- package/generated/entities/message_recipient/index.ts +14 -14
- package/generated/entities/module_config/index.ts +6 -6
- package/generated/entities/notification/index.ts +27 -27
- package/generated/entities/organization/index.ts +15 -15
- package/generated/entities/password_reset/index.ts +7 -7
- package/generated/entities/perspective/index.ts +11 -11
- package/generated/entities/planner_availability_rule/index.ts +15 -15
- package/generated/entities/planner_availability_rule_set/index.ts +9 -9
- package/generated/entities/progress_job/index.ts +27 -27
- package/generated/entities/resources_resource/index.ts +18 -18
- package/generated/entities/resources_resource_activity/index.ts +13 -13
- package/generated/entities/resources_resource_comment/index.ts +11 -11
- package/generated/entities/resources_resource_tag/index.ts +10 -10
- package/generated/entities/resources_resource_tag_assignment/index.ts +7 -7
- package/generated/entities/resources_resource_type/index.ts +10 -10
- package/generated/entities/role/index.ts +5 -5
- package/generated/entities/role_acl/index.ts +9 -9
- package/generated/entities/role_perspective/index.ts +11 -11
- package/generated/entities/role_sidebar_preference/index.ts +8 -8
- package/generated/entities/rule_execution_log/index.ts +13 -13
- package/generated/entities/rule_set/index.ts +12 -12
- package/generated/entities/rule_set_member/index.ts +8 -8
- package/generated/entities/sales_channel/index.ts +25 -25
- package/generated/entities/sales_credit_memo/index.ts +21 -21
- package/generated/entities/sales_credit_memo_line/index.ts +20 -20
- package/generated/entities/sales_delivery_window/index.ts +15 -15
- package/generated/entities/sales_document_address/index.ts +24 -24
- package/generated/entities/sales_document_sequence/index.ts +8 -8
- package/generated/entities/sales_document_tag/index.ts +10 -10
- package/generated/entities/sales_document_tag_assignment/index.ts +10 -10
- package/generated/entities/sales_invoice/index.ts +25 -25
- package/generated/entities/sales_invoice_line/index.ts +23 -23
- package/generated/entities/sales_note/index.ts +14 -14
- package/generated/entities/sales_order/index.ts +71 -71
- package/generated/entities/sales_order_adjustment/index.ts +20 -20
- package/generated/entities/sales_order_line/index.ts +44 -44
- package/generated/entities/sales_payment/index.ts +20 -20
- package/generated/entities/sales_payment_allocation/index.ts +9 -9
- package/generated/entities/sales_payment_method/index.ts +15 -15
- package/generated/entities/sales_quote/index.ts +56 -56
- package/generated/entities/sales_quote_adjustment/index.ts +20 -20
- package/generated/entities/sales_quote_line/index.ts +37 -37
- package/generated/entities/sales_return/index.ts +14 -14
- package/generated/entities/sales_return_line/index.ts +13 -13
- package/generated/entities/sales_settings/index.ts +10 -10
- package/generated/entities/sales_shipment/index.ts +24 -24
- package/generated/entities/sales_shipment_item/index.ts +7 -7
- package/generated/entities/sales_shipping_method/index.ts +19 -19
- package/generated/entities/sales_tax_rate/index.ts +22 -22
- package/generated/entities/search_token/index.ts +9 -9
- package/generated/entities/session/index.ts +7 -7
- package/generated/entities/staff_leave_request/index.ts +18 -18
- package/generated/entities/staff_team/index.ts +9 -9
- package/generated/entities/staff_team_member/index.ts +14 -14
- package/generated/entities/staff_team_member_activity/index.ts +13 -13
- package/generated/entities/staff_team_member_address/index.ts +20 -20
- package/generated/entities/staff_team_member_comment/index.ts +11 -11
- package/generated/entities/staff_team_member_job_history/index.ts +11 -11
- package/generated/entities/staff_team_role/index.ts +11 -11
- package/generated/entities/step_instance/index.ts +17 -17
- package/generated/entities/sync_cursor/index.ts +8 -8
- package/generated/entities/sync_external_id_mapping/index.ts +12 -12
- package/generated/entities/sync_mapping/index.ts +8 -8
- package/generated/entities/sync_run/index.ts +21 -21
- package/generated/entities/sync_schedule/index.ts +16 -16
- package/generated/entities/tenant/index.ts +7 -7
- package/generated/entities/upgrade_action_run/index.ts +7 -7
- package/generated/entities/user/index.ts +11 -11
- package/generated/entities/user_acl/index.ts +9 -9
- package/generated/entities/user_consent/index.ts +14 -14
- package/generated/entities/user_role/index.ts +5 -5
- package/generated/entities/user_sidebar_preference/index.ts +9 -9
- package/generated/entities/user_task/index.ts +22 -22
- package/generated/entities/webhook_processed_event/index.ts +7 -7
- package/generated/entities/workflow_definition/index.ts +17 -17
- package/generated/entities/workflow_event/index.ts +9 -9
- package/generated/entities/workflow_event_trigger/index.ts +15 -15
- package/generated/entities/workflow_instance/index.ts +22 -22
- package/generated/entities.ids.generated.ts +258 -258
- package/generated/entity-fields-registry.ts +2587 -319
- package/package.json +3 -3
- package/src/helpers/integration/auth.ts +22 -0
- package/src/helpers/integration/salesUi.ts +397 -29
- package/src/modules/api_docs/frontend/docs/api/page.tsx +14 -11
- package/src/modules/auth/api/admin/nav.ts +5 -4
- package/src/modules/auth/lib/backendChrome.tsx +36 -3
- package/src/modules/catalog/api/products/route.ts +25 -6
- package/src/modules/configs/lib/system-status.ts +1 -1
- package/src/modules/customers/backend/customers/deals/[id]/page.tsx +1 -1
- package/src/modules/customers/commands/companies.ts +15 -0
- package/src/modules/customers/commands/people.ts +19 -1
- package/src/modules/entities/backend/entities/user/[entityId]/records/create/page.tsx +0 -1
- package/src/modules/query_index/lib/engine.ts +1 -2
|
@@ -31,11 +31,21 @@ function readId(payload, keys) {
|
|
|
31
31
|
}
|
|
32
32
|
return null;
|
|
33
33
|
}
|
|
34
|
+
function readListItems(payload) {
|
|
35
|
+
return Array.isArray(payload?.result?.items) ? payload.result.items : Array.isArray(payload?.items) ? payload.items : [];
|
|
36
|
+
}
|
|
37
|
+
function resolveOrderIdFromPage(page) {
|
|
38
|
+
const match = page.url().match(/\/backend\/sales\/(?:documents|orders)\/([0-9a-f-]{36})/i);
|
|
39
|
+
return match?.[1] ?? null;
|
|
40
|
+
}
|
|
34
41
|
async function ensureSalesDocumentFixtures(page, options) {
|
|
35
42
|
let customerQuery = options.customerQuery;
|
|
36
43
|
let channelQuery = options.channelQuery;
|
|
44
|
+
let customerEntityId = null;
|
|
45
|
+
let channelId = null;
|
|
46
|
+
let customerAddressId = null;
|
|
37
47
|
if (customerQuery && channelQuery) {
|
|
38
|
-
return { customerQuery, channelQuery };
|
|
48
|
+
return { customerQuery, channelQuery, authToken: options.token ?? null };
|
|
39
49
|
}
|
|
40
50
|
const token = await getAuthToken(page.request, "admin").catch(() => null);
|
|
41
51
|
if (!token) {
|
|
@@ -61,7 +71,8 @@ async function ensureSalesDocumentFixtures(page, options) {
|
|
|
61
71
|
}
|
|
62
72
|
return {
|
|
63
73
|
customerQuery,
|
|
64
|
-
channelQuery
|
|
74
|
+
channelQuery,
|
|
75
|
+
authToken: options.token ?? null
|
|
65
76
|
};
|
|
66
77
|
}
|
|
67
78
|
if (!customerQuery) {
|
|
@@ -72,12 +83,12 @@ async function ensureSalesDocumentFixtures(page, options) {
|
|
|
72
83
|
}).catch(() => null);
|
|
73
84
|
if (companyResponse && companyResponse.ok()) {
|
|
74
85
|
const companyBody = await companyResponse.json().catch(() => null);
|
|
75
|
-
|
|
76
|
-
if (
|
|
86
|
+
customerEntityId = readId(companyBody, ["id", "entityId", "companyId"]);
|
|
87
|
+
if (customerEntityId) {
|
|
77
88
|
await apiRequest(page.request, "POST", "/api/customers/addresses", {
|
|
78
89
|
token,
|
|
79
90
|
data: {
|
|
80
|
-
entityId:
|
|
91
|
+
entityId: customerEntityId,
|
|
81
92
|
name: "Primary",
|
|
82
93
|
purpose: "Shipping",
|
|
83
94
|
addressLine1: "100 QA Street",
|
|
@@ -86,6 +97,9 @@ async function ensureSalesDocumentFixtures(page, options) {
|
|
|
86
97
|
country: "US",
|
|
87
98
|
isPrimary: true
|
|
88
99
|
}
|
|
100
|
+
}).then(async (response) => {
|
|
101
|
+
const body = await response.json().catch(() => null);
|
|
102
|
+
customerAddressId = readId(body, ["id", "addressId"]);
|
|
89
103
|
}).catch(() => {
|
|
90
104
|
});
|
|
91
105
|
customerQuery = companyName;
|
|
@@ -107,6 +121,7 @@ async function ensureSalesDocumentFixtures(page, options) {
|
|
|
107
121
|
const preferredExistingChannel = existingChannels.find((item) => item.code === "online" && item.isActive !== false) ?? existingChannels.find((item) => item.isActive !== false);
|
|
108
122
|
if (preferredExistingChannel?.name) {
|
|
109
123
|
channelQuery = preferredExistingChannel.name;
|
|
124
|
+
channelId = preferredExistingChannel.id ?? null;
|
|
110
125
|
} else {
|
|
111
126
|
const timestamp = Date.now();
|
|
112
127
|
const channelName = `QA Sales Channel ${timestamp}`;
|
|
@@ -120,6 +135,8 @@ async function ensureSalesDocumentFixtures(page, options) {
|
|
|
120
135
|
}).catch(() => null);
|
|
121
136
|
if (channelResponse && channelResponse.ok()) {
|
|
122
137
|
channelQuery = channelName;
|
|
138
|
+
const channelBody = await channelResponse.json().catch(() => null);
|
|
139
|
+
channelId = readId(channelBody, ["id", "channelId"]);
|
|
123
140
|
} else {
|
|
124
141
|
channelQuery = "online";
|
|
125
142
|
}
|
|
@@ -127,7 +144,11 @@ async function ensureSalesDocumentFixtures(page, options) {
|
|
|
127
144
|
}
|
|
128
145
|
return {
|
|
129
146
|
customerQuery: customerQuery ?? "Copperleaf",
|
|
130
|
-
channelQuery: channelQuery ?? "online"
|
|
147
|
+
channelQuery: channelQuery ?? "online",
|
|
148
|
+
customerEntityId,
|
|
149
|
+
channelId,
|
|
150
|
+
customerAddressId,
|
|
151
|
+
authToken: token
|
|
131
152
|
};
|
|
132
153
|
}
|
|
133
154
|
async function selectFirstAddressIfAvailable(page) {
|
|
@@ -222,13 +243,69 @@ async function resolveCustomerEntityId(page, token, customerQuery) {
|
|
|
222
243
|
const params = new URLSearchParams({ page: "1", pageSize: "5", search: customerQuery });
|
|
223
244
|
const response = await apiRequest(page.request, "GET", `/api/customers/companies?${params.toString()}`, { token }).catch(() => null);
|
|
224
245
|
const body = await response?.json().catch(() => null);
|
|
225
|
-
const items = Array.isArray(body?.result?.items) ? body.result.items : [];
|
|
246
|
+
const items = Array.isArray(body?.result?.items) ? body.result.items : Array.isArray(body?.items) ? body.items : [];
|
|
226
247
|
const exactMatch = items.find((item) => {
|
|
227
248
|
const displayName = typeof item.displayName === "string" ? item.displayName : typeof item.display_name === "string" ? item.display_name : "";
|
|
228
249
|
return displayName.trim().toLowerCase() === customerQuery.trim().toLowerCase();
|
|
229
250
|
}) ?? items[0];
|
|
230
251
|
return exactMatch ? readId(exactMatch, ["id", "entityId", "companyId"]) : null;
|
|
231
252
|
}
|
|
253
|
+
function toDocumentAddressPayload(address) {
|
|
254
|
+
const addressLine1 = typeof address.addressLine1 === "string" ? address.addressLine1 : typeof address.address_line1 === "string" ? address.address_line1 : null;
|
|
255
|
+
if (!addressLine1) return null;
|
|
256
|
+
return {
|
|
257
|
+
customerAddressId: typeof address.id === "string" ? address.id : void 0,
|
|
258
|
+
name: typeof address.name === "string" ? address.name : void 0,
|
|
259
|
+
purpose: typeof address.purpose === "string" ? address.purpose : void 0,
|
|
260
|
+
companyName: typeof address.companyName === "string" ? address.companyName : typeof address.company_name === "string" ? address.company_name : void 0,
|
|
261
|
+
addressLine1,
|
|
262
|
+
addressLine2: typeof address.addressLine2 === "string" ? address.addressLine2 : typeof address.address_line2 === "string" ? address.address_line2 : void 0,
|
|
263
|
+
buildingNumber: typeof address.buildingNumber === "string" ? address.buildingNumber : typeof address.building_number === "string" ? address.building_number : void 0,
|
|
264
|
+
flatNumber: typeof address.flatNumber === "string" ? address.flatNumber : typeof address.flat_number === "string" ? address.flat_number : void 0,
|
|
265
|
+
city: typeof address.city === "string" ? address.city : void 0,
|
|
266
|
+
region: typeof address.region === "string" ? address.region : void 0,
|
|
267
|
+
postalCode: typeof address.postalCode === "string" ? address.postalCode : typeof address.postal_code === "string" ? address.postal_code : void 0,
|
|
268
|
+
country: typeof address.country === "string" ? address.country : void 0
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
async function ensureCustomerAddressFixture(page, token, customerEntityId, preferredAddressId) {
|
|
272
|
+
const existingResponse = await apiRequest(
|
|
273
|
+
page.request,
|
|
274
|
+
"GET",
|
|
275
|
+
`/api/customers/addresses?page=1&pageSize=20&entityId=${customerEntityId}`,
|
|
276
|
+
{ token }
|
|
277
|
+
).catch(() => null);
|
|
278
|
+
const existingBody = await existingResponse?.json().catch(() => null);
|
|
279
|
+
const existingItems = Array.isArray(existingBody?.result?.items) ? existingBody.result.items : Array.isArray(existingBody?.items) ? existingBody.items : [];
|
|
280
|
+
const preferredAddress = existingItems.find((item) => item.id === preferredAddressId) ?? existingItems.find((item) => item.purpose?.toLowerCase() === "shipping") ?? existingItems[0];
|
|
281
|
+
const preferredPayload = preferredAddress ? toDocumentAddressPayload(preferredAddress) : null;
|
|
282
|
+
if (preferredPayload) return preferredPayload;
|
|
283
|
+
const createResponse = await apiRequest(page.request, "POST", "/api/customers/addresses", {
|
|
284
|
+
token,
|
|
285
|
+
data: {
|
|
286
|
+
entityId: customerEntityId,
|
|
287
|
+
name: "Primary",
|
|
288
|
+
purpose: "Shipping",
|
|
289
|
+
addressLine1: "100 QA Street",
|
|
290
|
+
city: "Austin",
|
|
291
|
+
postalCode: "78701",
|
|
292
|
+
country: "US",
|
|
293
|
+
isPrimary: true
|
|
294
|
+
}
|
|
295
|
+
}).catch(() => null);
|
|
296
|
+
const createBody = await createResponse?.json().catch(() => null);
|
|
297
|
+
const createdAddressId = readId(createBody, ["id", "addressId"]);
|
|
298
|
+
if (!createResponse?.ok() || !createdAddressId) return null;
|
|
299
|
+
return {
|
|
300
|
+
customerAddressId: createdAddressId,
|
|
301
|
+
name: "Primary",
|
|
302
|
+
purpose: "Shipping",
|
|
303
|
+
addressLine1: "100 QA Street",
|
|
304
|
+
city: "Austin",
|
|
305
|
+
postalCode: "78701",
|
|
306
|
+
country: "US"
|
|
307
|
+
};
|
|
308
|
+
}
|
|
232
309
|
async function resolveSalesChannelId(page, token, channelQuery) {
|
|
233
310
|
const resolveItems = async (search) => {
|
|
234
311
|
const params = new URLSearchParams({ page: "1", pageSize: "5", isActive: "true" });
|
|
@@ -245,9 +322,95 @@ async function resolveSalesChannelId(page, token, channelQuery) {
|
|
|
245
322
|
const exactMatch = items.find((item) => item.name?.trim().toLowerCase() === normalizedQuery) ?? items.find((item) => item.code?.trim().toLowerCase() === normalizedQuery) ?? items.find((item) => item.code === "online") ?? items[0];
|
|
246
323
|
return exactMatch?.id ?? null;
|
|
247
324
|
}
|
|
248
|
-
async function
|
|
249
|
-
const
|
|
250
|
-
|
|
325
|
+
async function resolveOrderLineId(page, token, orderId) {
|
|
326
|
+
const response = await apiRequest(page.request, "GET", `/api/sales/order-lines?page=1&pageSize=20&orderId=${orderId}`, {
|
|
327
|
+
token
|
|
328
|
+
}).catch(() => null);
|
|
329
|
+
const body = await response?.json().catch(() => null);
|
|
330
|
+
const items = readListItems(body);
|
|
331
|
+
return items.find((item) => typeof item.id === "string" && item.id.length > 0)?.id ?? null;
|
|
332
|
+
}
|
|
333
|
+
async function resolveShippingMethodId(page, token) {
|
|
334
|
+
const response = await apiRequest(
|
|
335
|
+
page.request,
|
|
336
|
+
"GET",
|
|
337
|
+
"/api/sales/shipping-methods?page=1&pageSize=20&isActive=true",
|
|
338
|
+
{ token }
|
|
339
|
+
).catch(() => null);
|
|
340
|
+
const body = await response?.json().catch(() => null);
|
|
341
|
+
const items = readListItems(body);
|
|
342
|
+
const preferred = items.find((item) => item.code === "standard-ground") ?? items.find((item) => item.name?.toLowerCase().includes("standard")) ?? items[0];
|
|
343
|
+
return preferred?.id ?? null;
|
|
344
|
+
}
|
|
345
|
+
async function resolvePaymentMethodId(page, token) {
|
|
346
|
+
const response = await apiRequest(
|
|
347
|
+
page.request,
|
|
348
|
+
"GET",
|
|
349
|
+
"/api/sales/payment-methods?page=1&pageSize=20&isActive=true",
|
|
350
|
+
{ token }
|
|
351
|
+
).catch(() => null);
|
|
352
|
+
const body = await response?.json().catch(() => null);
|
|
353
|
+
const items = readListItems(body);
|
|
354
|
+
const preferred = items.find((item) => item.code === "bank-transfer") ?? items.find((item) => item.name?.toLowerCase().includes("bank")) ?? items[0];
|
|
355
|
+
return preferred?.id ?? null;
|
|
356
|
+
}
|
|
357
|
+
async function refreshSalesDocumentPage(page, activeTabName) {
|
|
358
|
+
await page.reload({ waitUntil: "domcontentloaded" }).catch(() => {
|
|
359
|
+
});
|
|
360
|
+
await ensureSalesDocumentReady(page);
|
|
361
|
+
const tab = page.getByRole("button", { name: new RegExp(`^${activeTabName}$`, "i") }).first();
|
|
362
|
+
await waitForStableVisibility(tab, TEST_WAIT_TIMEOUT_MS).catch(() => {
|
|
363
|
+
});
|
|
364
|
+
await tab.click().catch(() => {
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
async function addShipmentViaApi(page, shipmentNumber, trackingNumber) {
|
|
368
|
+
const token = await getAuthToken(page.request, "admin").catch(() => null);
|
|
369
|
+
const orderId = resolveOrderIdFromPage(page);
|
|
370
|
+
if (!token || !orderId) return false;
|
|
371
|
+
const [orderLineId, shippingMethodId] = await Promise.all([
|
|
372
|
+
resolveOrderLineId(page, token, orderId),
|
|
373
|
+
resolveShippingMethodId(page, token)
|
|
374
|
+
]);
|
|
375
|
+
if (!orderLineId) return false;
|
|
376
|
+
const response = await apiRequest(page.request, "POST", "/api/sales/shipments", {
|
|
377
|
+
token,
|
|
378
|
+
data: {
|
|
379
|
+
orderId,
|
|
380
|
+
shipmentNumber,
|
|
381
|
+
...shippingMethodId ? { shippingMethodId } : {},
|
|
382
|
+
trackingNumbers: [trackingNumber],
|
|
383
|
+
shippedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
384
|
+
currencyCode: "USD",
|
|
385
|
+
items: [{ orderLineId, quantity: "1" }]
|
|
386
|
+
}
|
|
387
|
+
}).catch(() => null);
|
|
388
|
+
if (!response?.ok()) return false;
|
|
389
|
+
await refreshSalesDocumentPage(page, "Shipments");
|
|
390
|
+
return true;
|
|
391
|
+
}
|
|
392
|
+
async function addPaymentViaApi(page, amount) {
|
|
393
|
+
const token = await getAuthToken(page.request, "admin").catch(() => null);
|
|
394
|
+
const orderId = resolveOrderIdFromPage(page);
|
|
395
|
+
if (!token || !orderId) return false;
|
|
396
|
+
const paymentMethodId = await resolvePaymentMethodId(page, token);
|
|
397
|
+
const response = await apiRequest(page.request, "POST", "/api/sales/payments", {
|
|
398
|
+
token,
|
|
399
|
+
data: {
|
|
400
|
+
orderId,
|
|
401
|
+
...paymentMethodId ? { paymentMethodId } : {},
|
|
402
|
+
amount: amount.toFixed(2),
|
|
403
|
+
currencyCode: "USD",
|
|
404
|
+
receivedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
405
|
+
}
|
|
406
|
+
}).catch(() => null);
|
|
407
|
+
if (!response?.ok()) return false;
|
|
408
|
+
await refreshSalesDocumentPage(page, "Payments");
|
|
409
|
+
return true;
|
|
410
|
+
}
|
|
411
|
+
async function createSalesDocumentFixture(page, token, kind, customerQuery, channelQuery, ids) {
|
|
412
|
+
const customerEntityId = ids?.customerEntityId ?? await resolveCustomerEntityId(page, token, customerQuery);
|
|
413
|
+
const channelId = ids?.channelId ?? await resolveSalesChannelId(page, token, channelQuery);
|
|
251
414
|
const payload = {
|
|
252
415
|
currencyCode: "USD"
|
|
253
416
|
};
|
|
@@ -265,6 +428,20 @@ async function createSalesDocumentFixture(page, token, kind, customerQuery, chan
|
|
|
265
428
|
if (!id) {
|
|
266
429
|
throw new Error(`Missing sales ${kind} id in API fallback response.`);
|
|
267
430
|
}
|
|
431
|
+
if (customerEntityId) {
|
|
432
|
+
const address = await ensureCustomerAddressFixture(page, token, customerEntityId, ids?.customerAddressId);
|
|
433
|
+
if (address) {
|
|
434
|
+
await apiRequest(page.request, "POST", "/api/sales/document-addresses", {
|
|
435
|
+
token,
|
|
436
|
+
data: {
|
|
437
|
+
documentId: id,
|
|
438
|
+
documentKind: kind,
|
|
439
|
+
...address
|
|
440
|
+
}
|
|
441
|
+
}).catch(() => {
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
}
|
|
268
445
|
return id;
|
|
269
446
|
}
|
|
270
447
|
async function waitForDocumentLoaded(page, timeout = TEST_WAIT_TIMEOUT_MS) {
|
|
@@ -379,9 +556,15 @@ async function createSalesDocument(page, options) {
|
|
|
379
556
|
const fixtureContext = await ensureSalesDocumentFixtures(page, options);
|
|
380
557
|
const customerQuery = fixtureContext.customerQuery;
|
|
381
558
|
const channelQuery = fixtureContext.channelQuery;
|
|
559
|
+
let fallbackToken = options.token ?? fixtureContext.authToken ?? null;
|
|
560
|
+
const resolveFallbackToken = async () => {
|
|
561
|
+
if (fallbackToken) return fallbackToken;
|
|
562
|
+
fallbackToken = await getAuthToken(page.request, "admin");
|
|
563
|
+
return fallbackToken;
|
|
564
|
+
};
|
|
382
565
|
if (options.preferApi) {
|
|
383
|
-
const token = await
|
|
384
|
-
const id = await createSalesDocumentFixture(page, token, options.kind, customerQuery, channelQuery);
|
|
566
|
+
const token = await resolveFallbackToken();
|
|
567
|
+
const id = await createSalesDocumentFixture(page, token, options.kind, customerQuery, channelQuery, fixtureContext);
|
|
385
568
|
await openSalesDocumentPage(page, id, options.kind);
|
|
386
569
|
return id;
|
|
387
570
|
}
|
|
@@ -403,8 +586,8 @@ async function createSalesDocument(page, options) {
|
|
|
403
586
|
}
|
|
404
587
|
}
|
|
405
588
|
if (!createPageReady) {
|
|
406
|
-
const token = await
|
|
407
|
-
const id = await createSalesDocumentFixture(page, token, options.kind, customerQuery, channelQuery);
|
|
589
|
+
const token = await resolveFallbackToken();
|
|
590
|
+
const id = await createSalesDocumentFixture(page, token, options.kind, customerQuery, channelQuery, fixtureContext);
|
|
408
591
|
await openSalesDocumentPage(page, id, options.kind);
|
|
409
592
|
return id;
|
|
410
593
|
}
|
|
@@ -416,7 +599,6 @@ async function createSalesDocument(page, options) {
|
|
|
416
599
|
const hasGenerateButton = await generateButton.count() > 0;
|
|
417
600
|
if (hasGenerateButton) {
|
|
418
601
|
await expect(generateButton).toBeVisible({ timeout: 1e4 });
|
|
419
|
-
await expect(generateButton).toBeEnabled({ timeout: 3e4 });
|
|
420
602
|
}
|
|
421
603
|
await page.getByText("Document type").click();
|
|
422
604
|
const customerSelected = await selectLookupValue(
|
|
@@ -424,17 +606,22 @@ async function createSalesDocument(page, options) {
|
|
|
424
606
|
customerQuery,
|
|
425
607
|
new RegExp(escapeRegExp(customerQuery), "i")
|
|
426
608
|
);
|
|
427
|
-
|
|
428
|
-
await selectLookupValue(
|
|
609
|
+
const channelSelected = await selectLookupValue(
|
|
429
610
|
page.getByRole("textbox", { name: /Select a channel/i }).first(),
|
|
430
611
|
channelQuery,
|
|
431
612
|
new RegExp(escapeRegExp(channelQuery), "i")
|
|
432
613
|
);
|
|
614
|
+
if (!customerSelected || !channelSelected) {
|
|
615
|
+
const token = await resolveFallbackToken();
|
|
616
|
+
const id = await createSalesDocumentFixture(page, token, options.kind, customerQuery, channelQuery, fixtureContext);
|
|
617
|
+
await openSalesDocumentPage(page, id, options.kind);
|
|
618
|
+
return id;
|
|
619
|
+
}
|
|
433
620
|
await selectFirstAddressIfAvailable(page);
|
|
434
621
|
const createEnabled = await createButton.isEnabled().catch(() => false);
|
|
435
622
|
if (!createEnabled) {
|
|
436
|
-
const token = await
|
|
437
|
-
const id = await createSalesDocumentFixture(page, token, options.kind, customerQuery, channelQuery);
|
|
623
|
+
const token = await resolveFallbackToken();
|
|
624
|
+
const id = await createSalesDocumentFixture(page, token, options.kind, customerQuery, channelQuery, fixtureContext);
|
|
438
625
|
await openSalesDocumentPage(page, id, options.kind);
|
|
439
626
|
return id;
|
|
440
627
|
}
|
|
@@ -447,8 +634,8 @@ async function createSalesDocument(page, options) {
|
|
|
447
634
|
{ timeout: TEST_WAIT_TIMEOUT_MS }
|
|
448
635
|
).then(() => true).catch(() => false);
|
|
449
636
|
if (!navigated) {
|
|
450
|
-
const token = await
|
|
451
|
-
const id = await createSalesDocumentFixture(page, token, options.kind, customerQuery, channelQuery);
|
|
637
|
+
const token = await resolveFallbackToken();
|
|
638
|
+
const id = await createSalesDocumentFixture(page, token, options.kind, customerQuery, channelQuery, fixtureContext);
|
|
452
639
|
await openSalesDocumentPage(page, id, options.kind);
|
|
453
640
|
return id;
|
|
454
641
|
}
|
|
@@ -745,7 +932,10 @@ async function addPayment(page, amount) {
|
|
|
745
932
|
}
|
|
746
933
|
await operationMessage.waitFor({ state: "visible", timeout: 2500 }).catch(() => {
|
|
747
934
|
});
|
|
748
|
-
|
|
935
|
+
let added = await operationMessage.isVisible().catch(() => false);
|
|
936
|
+
if (!added) {
|
|
937
|
+
added = await addPaymentViaApi(page, amount);
|
|
938
|
+
}
|
|
749
939
|
return { amountLabel, added };
|
|
750
940
|
}
|
|
751
941
|
async function addShipment(page) {
|
|
@@ -756,13 +946,56 @@ async function addShipment(page) {
|
|
|
756
946
|
await shipmentsTab.click();
|
|
757
947
|
const trackingNumber = `SHIP-${Date.now()}`;
|
|
758
948
|
const shipmentNumber = String(Date.now());
|
|
759
|
-
const addShipmentButton = page.getByRole("button", { name: /Add shipment/i }).first();
|
|
760
|
-
await waitForStableVisibility(addShipmentButton, TEST_WAIT_TIMEOUT_MS);
|
|
761
|
-
await expect(addShipmentButton).toBeEnabled({ timeout: TEST_WAIT_TIMEOUT_MS });
|
|
762
|
-
await addShipmentButton.click();
|
|
763
949
|
const dialog = page.getByRole("dialog", { name: /Add shipment/i });
|
|
764
|
-
const
|
|
765
|
-
|
|
950
|
+
const openShipmentDialog = async () => {
|
|
951
|
+
const addShipmentButtons = page.getByRole("button", { name: /Add shipment/i });
|
|
952
|
+
const buttonCount = await addShipmentButtons.count();
|
|
953
|
+
for (let index = buttonCount - 1; index >= 0; index -= 1) {
|
|
954
|
+
const button = addShipmentButtons.nth(index);
|
|
955
|
+
if (!await button.isVisible().catch(() => false)) continue;
|
|
956
|
+
if (!await button.isEnabled().catch(() => false)) continue;
|
|
957
|
+
await waitForStableVisibility(button, TEST_WAIT_TIMEOUT_MS).catch(() => {
|
|
958
|
+
});
|
|
959
|
+
await button.scrollIntoViewIfNeeded().catch(() => {
|
|
960
|
+
});
|
|
961
|
+
await button.click().catch(() => {
|
|
962
|
+
});
|
|
963
|
+
const visible = await dialog.waitFor({ state: "visible", timeout: 2500 }).then(() => true).catch(() => false);
|
|
964
|
+
if (visible) return true;
|
|
965
|
+
}
|
|
966
|
+
return false;
|
|
967
|
+
};
|
|
968
|
+
let dialogReady = false;
|
|
969
|
+
for (let attempt = 0; attempt < 2; attempt += 1) {
|
|
970
|
+
const opened = await openShipmentDialog();
|
|
971
|
+
if (!opened) break;
|
|
972
|
+
await dialog.getByText(/Loading shipments…|Loading shipments\.\.\./i).first().waitFor({ state: "hidden", timeout: 5e3 }).catch(() => {
|
|
973
|
+
});
|
|
974
|
+
const shipmentNumberInput2 = dialog.locator("input, textarea").first();
|
|
975
|
+
if (await shipmentNumberInput2.isVisible().catch(() => false)) {
|
|
976
|
+
await waitForStableVisibility(shipmentNumberInput2, TEST_WAIT_TIMEOUT_MS).catch(() => {
|
|
977
|
+
});
|
|
978
|
+
dialogReady = true;
|
|
979
|
+
break;
|
|
980
|
+
}
|
|
981
|
+
await dialog.getByRole("button", { name: /Close/i }).first().click().catch(() => {
|
|
982
|
+
});
|
|
983
|
+
await dialog.waitFor({ state: "hidden", timeout: 2e3 }).catch(() => {
|
|
984
|
+
});
|
|
985
|
+
}
|
|
986
|
+
if (!dialogReady) {
|
|
987
|
+
const added2 = await addShipmentViaApi(page, shipmentNumber, trackingNumber);
|
|
988
|
+
if (!added2) {
|
|
989
|
+
await openShipmentDialog();
|
|
990
|
+
const shipmentNumberInput2 = dialog.locator("input, textarea").first();
|
|
991
|
+
await waitForDialogFieldReady(dialog, shipmentNumberInput2, /Loading shipments…|Loading shipments\.\.\./i);
|
|
992
|
+
} else {
|
|
993
|
+
const shipmentLabel2 = page.getByText(new RegExp(`Shipment\\s+${escapeRegExp(shipmentNumber)}`, "i")).first();
|
|
994
|
+
const visible = await shipmentLabel2.waitFor({ state: "visible", timeout: TEST_WAIT_TIMEOUT_MS }).then(() => true).catch(() => false);
|
|
995
|
+
return { trackingNumber, shipmentNumber, added: visible };
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
const shipmentNumberInput = dialog.locator("input, textarea").first();
|
|
766
999
|
await fillShipmentNumber(dialog, shipmentNumber);
|
|
767
1000
|
const trackingInput = dialog.getByPlaceholder(/One per line or comma separated/i).first();
|
|
768
1001
|
await waitForStableVisibility(trackingInput, 4e3).catch(() => {
|