Booking Screen Specification¶
Composition Of The Booking Screen¶
flowchart TB
O[Open a new or an existing booking from the list] --> H[Booking identity and summary]
H --> D[Details and the booking draft]
H --> P[Packing List and an independent edit state]
H --> C[Confirmation by policy and the output draft]
D --> S[Explicit save and result check]
P --> PS[Row and rate save, or output]
C --> CP[Preview and print]
H --> X[Close]
X --> Q{Are there unsaved changes?}
Q -->|yes| W[Confirm the discard]
Q -->|no| L[Return to the list]
Behaviour Per Area¶
| Area and situation | The display and behaviour | | The condition that must be kept | | | --------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Open | a new draft or one booking is shown | | loading, error, denied and not found are distinguished. When the first query fails, the warning and the close are kept and the empty edit form is not shown, and Submit, Clone, Packing and Confirmation are disabled. After a successful query, the existing draft is kept when the save fails. real execution | | Details | the booking, carrier, schedule, specification quantity, company, document and inspection information | | a read-only aggregate is distinguished from an input field | | C2 document dates | the SI Date, BL Date and AR Date are shown separately in the existing Schedule. Submit changes the date and clears an empty value | | it is a value different from the SI cutoff. The date does not change the billing or submission flags. The existing C1 screen is kept. The real C2 change, clearing and re-reading is PASS | | C2 list status | a date-derived state before RMK. AR→COMPLETED, BL→AR-PENDING, SI→SI-PENDING, and PENDING when there is none. The filter is All or an exact state, and the sort follows the display string | | the existing shared DataTable and SelectField are used. It is separated from whether it is used and from the billing or submission. The count and page use the same condition, and the C1 column is kept. The real C2 filter and sort is PASS | | Tab switch | Details, Packing and Confirmation by policy | | the draft of a visited related panel is kept; a tab switch is not a save | | Save | the submitting state and the normal, conflict and unconfirmed result | | a change entered after the request does not disappear because of a late response | | Single edit conflict | Reload latest | | it blocks the save and keeps the draft. Pressing the re-query button replaces the header draft and the version with the server value | | Multi edit | Add field of the selected bookings → Set value, or the allowed Clear value → Apply to N rows | | an unselected field is kept. One batch is saved with the read version of each booking, and a conflict in one row also rolls back everything | | Multi edit conflict | Reload selected rows | | the latest value and version of the selected bookings are read while the entered change draft is kept. The re-query itself is not a re-save, and it is reapplied explicitly after a review | | Single save result unconfirmed | Check saved result | | the value and version of the submitted UUID are re-queried. A repeated save before the check is not advised. A new UUID that was not created and a failure of an existing edit are distinguished | | Multi save result unconfirmed | Reload and review rows | | reopening the page discards the existing draft and checks whether it was saved. It is different from Reload selected rows for a conflict, and it does not resend automatically | | Clone | a count from 1 to 9 is selected from the stored bookings | | it does not save or overwrite the unsaved draft of the parent | | Close | the dirty check reaches the related areas | | the discard of the unsaved change is confirmed, and the return context is kept |
The current native Booking has no Photos tab. The equipment photo API and the photo test result of the past KJ screen are not evidence that the tab currently exists.
The SI Date, BL Date and AR Date date input and clearing are connected in the C2 Multi Edit. single save, multi set, clear and preservation of an unselected value, list state, filter and sort, Clone date preservation and partial API override have completed the real C2 verification. The Clone window enters only the quantity and copies the date from the stored original. The other roles, the small screen and the linked Sales clone are still separately unverified.
Packing Input, Save And Output Boundary¶
Even when they are in the same document, the save target differs. The Submit of Booking Details is not described as the save button of every Packing input. What follows is the distinction of the current native implementation, and it does not mean it is identical to the C1 Legacy behaviour or the C2 reference original.
| Input and action | The real processing and the condition that is kept | | Verification scope |
| ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| C2 Container and Weight unit | a query is made with all containers or one container and with the ST, MT, LB and LT display unit selected. The selection and the unit change are not an edit of the original weight | | the real current C2 linked query, selection and unit is PASS |
| C2 Document mode | Invoice shows Packing and Invoice, and Email shows Packing for an email. A mode selection makes no dispatch request. After the hidden Invoice is shown, the multi-row address height is calculated | | the real toggle, the two addresses 32/32 and the two captures after a change are PASS. It is not a dispatch acceptance |
| C2 Invoice Rate | a rate input that has a linked item original is saved when the focus leaves after an edit. The original, the selection and the conversion unit are stored when the input starts. During the handling of the save or the unconfirmed result, the selection, the unit and the output are blocked so that it is not reinterpreted as another original | | a comparison with the existing failure and recovery evidence and the current source. real current normal save, original preservation and re-reading is PASS |
| Output-only input such as the document address and Amount | a data-print-key value is a temporary value of the document. It does not update the DB address or the item amount, and it changes the display of the same key together. A temporary Amount change is reflected in the displayed total | | the past inline document evidence is reused; it is not the full current role and output acceptance |
| The Empty wt, the Seal and the displayed In and Out ref of C1 CONTAINER_DETAIL | the original input draft in the document is saved with Save. A hidden ref is not put into sourceFields. This is not confused with the C2 rate save on focus loss | | only the C1 technical description is kept; it is not a newly written C1 user manual |
| Equipment edit and Restore | Save row and Save compare the original version and the overlay version. A Restore confirmation restores the document override while keeping the Empty wt and the Out ref stored on the original | | the detail responsibility of the source and the overlay is in the module design, and the real reuse scope is the acceptance result |
C2 Packing Source And Selection Scope¶
The PACKING_LIST → CONTAINER_COMMODITY_BY_BOOKING_ID of the external reference reference/mkmetal/controller/Ajax.php reads the gross, tare and net, the quantity and the rate of the Sales item. Because the native holds the equipment loaded item and the outbound item separately, the following selection rule is used. It is not described as the same priority of the two tables in the reference.
- Packing: when every Container in the selection scope has a loaded item (
T_EQUIPMENT_COMMODITY), it is used. When even one is missing, the whole selection scope is queried instead with the outbound item (T_LOAD_ITEM). Only some Containers do not mix another source. Selecting all or one can change the source set, and this is not a table that shows the current remaining stock. - Product Invoice: when the selection scope has a linked outbound item, the rate and the billing quantity of that item with the duplicate orders removed are used. When there is no outbound item, a read-only row based on the loaded item is used. The item UUID of Packing and of Invoice can therefore differ, and this is not interpreted as a billing finalisation or an inventory reversal.
- A Source-only or META display follows the selected source, and a stored document aggregate override can change the displayed value. When comparing values, the selection scope, the unit, the source and the override are checked together. There is no rule that automatically changes the document weight to 0 after a reversal.
This complete-set behaviour is linked to the earlier real fallback execution of NS3-112 REC03C and to the current packing.ts and the existing model. current C2 reading checkincludes only the normal outbound item and the fully loaded item cases, and a new runtime of a mixed source and the output after a reversal were not run.
Packing Re-query And Output¶
| Action | The meaning for the draft and the save result | |
| --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Refresh preview | the original is read again to make a preview, but the output temporary values are kept. The C1 original input before saving is also merged and kept. It is not a header Submit or a rate re-save | |
| Reload source | the Packing original is received again and the row draft, the output temporary values, the rate draft and the unconfirmed state are discarded. It is used after the required input is stored | |
| Check saved result and Check saved invoice rate | the submitted Packing edit or the original rate is each re-queried and compared. A mismatch and a query failure are not treated as a completed check | |
| Print and Export Excel | the current input value of the screen document is serialised as text, and the script and the input controls are removed. Print is the browser print window, and Export Excel is a .xls download of the HTML content. It is not native .xlsx generation, an accounting finalisation or an email dispatch | |
An output temporary value is also included in the unsaved change check on close. When there is a failed Invoice rate draft, the rate is resolved or discarded with Reload source before the output. The full execution of a real Excel-compatible reading, a physical print and the discard confirmation is still NOT_RUN, and it is not accepted from the existence of a button or the source.
Original And Update Criteria¶
The single header recovery is owned by useBookingWorkspaceState, the multi edit by BookingMultiEdit → MultiEditDialog, and the Packing input, re-query and serialisation by BookingPackingPanel. The relevant original of 2026-09-12 8b0713c96 was compared. When the save, recovery or output behaviour of this owner changes, this document and the per-requirement execution result and C2 draft are re-reviewed together, and the Wiki document and the original hash are updated with the existing generation command. An unverified usage is not published in the DB manual just because the specification draft was checked.
Readability, Keyboard And Small Screen¶
It follows the shared UI rules of a work screen, and the input, save, close and recovery must be usable on a small screen. The shared single and multi select list opens upward or downward according to the scroll area and the remaining height of the screen. In an open select list, Escape closes only the list and keeps the edit window, and after the list is closed, Escape follows the existing edit window close and the unsaved confirmation. The value, the required state and the save behaviour are not changed.
2026-09-13, on C2/admin2, 390×844·768×1024·1680×922 the list filter, the date reading, the select list and the close were actually verified at 390×844 and 768×1024 and 1680×922. The required value rejection, creation, note save, single conflict recovery and list re-readwas also really checked. A small screen write of another field or multi edit, the full keyboard and assistive technology, and a physical mobile device are NOT_RUN. This diagram describes the feature placement and does not replace a verified screen capture.¶
Source:
new-system/docs/pages/transportation/booking-workspace/SPECIFICATION.md— ctc repository · This page is an English translation of the source document. Identifiers, file paths and code symbols are unchanged. A user instruction quoted inside the text is kept in its original language.