Skip to content

Tiktok Sales Order Applet

Overview

The Tiktok Sales Order Applet is a marketplace-oriented build of Sales Order (Internal). It opens the same INTERNAL_SALES_ORDER documents, in the same listing and the same create / edit form, and it is meant for the person who works marketplace orders rather than the whole sales desk: the sidebar keeps the order listing, the line-item listing, the SO Detailed Report and the Ecomsync dashboards, and drops everything else.

The name needs saying plainly. The registry calls it Tiktok Sales Order Applet (its own note reads “previously called Shopee Sales Order”), but its code is shopee_sales_order_applet, its route root is …/shopee-sales-order-applet, and the source refers to Shopee 136 times and Lazada 65 times against one mention of TikTok — the applet’s display name. Nothing in it is TikTok-specific: the dashboards it ships are the Lazada and Shopee dashboards, the marketplace-status tab knows Shopee’s shipping statuses, and the scheduler offers only the Lazada and Shopee order jobs. Treat it as the Lazada / Shopee order desk with a newer label.

Same document type, same posting: INTERNAL_SALES_ORDER, amount signum 0, quantity signum 0. An order finalised here posts nothing and moves no stock, exactly as in Sales Order (Internal). Every field, validation and knock-off rule on that page applies here unchanged; this page documents only what differs.

The repository is one applet split out of a larger multi-applet build in November 2025; the split history shows the display name being changed in December 2025 and a sub-query clean-up in September 2026, and nothing else.

Where it fits

DirectionApplet / documentHow it connects
Same recordsSales Order (Internal)An order created or edited in either applet is visible in both; there is one document table
UpstreamOrganisationBranch → MarketplaceThe marketplace branch whose orders the ingestion jobs create; its stock rule and settlement method
UpstreamDoc Item MaintenanceMarketplace tabThe listings the marketplace order lines resolve to
DownstreamReceipt Voucher (Internal)The Receipt Voucher tab on an order; marketplace payouts land there through the EcomSync jobs
IndexEcomSync related appletsWhich applet owns each marketplace step and which background jobs run

Modules: E-Commerce (primary), Sales & POS.

Screens and menus

Route root: applet/tnt/wavelet/erp/shopee-sales-order-applet/. The sidebar is defined in menu-items.ts; the route table in app.routing.ts is wider than the sidebar, so the second column below matters.

ScreenRouteIn this applet’s sidebarIn Sales Order (Internal)’s sidebar
Sales Order listinginternal-sales-orderYesYes
Line Itemsline-itemsYesYes
SO Detailed Reportsales-order-detailed-reportYesYes
Ecomsync › Dashboardecomsync-dashboardYesYes
Ecomsync › Reply To Review, Replied Reviewecomsync-reply-to-review, ecomsync-replied-reviewYesYes
Ecomsync › Schedulerecomsync-schedulerNo — route onlyYes
Pick Pack Queuepick-pack-queueNo — route onlyYes
Delivery Itemsdelivery-itemsNo — route onlyYes
Batch Printingbatch-printingNo — route onlyYes
Delivery Plan, Calendardelivery-plan, delivery-plan-calendarNo — route onlyYes
File Exportfile-exportNo — route onlyYes
SO Line with SI KONo routeYes
File ImportNo routeYes
ApprovalNo routeYes
IntercompanyNo routeYes
Audit TrailNo routeYes
Settings, PersonalizationNo routeYes

“Route only” means the screen is compiled in and opens if the URL is typed, but no menu, button or routerLink in the applet leads to it. Nothing in the applet navigates to settings/… either — see Configuration.

The create / edit form

The create form has ten tabs — Search, Main Details, Account, Line Items, Delivery Details, Settlement, Department Hdr, KO For, Contra, Attachments — and the view form twenty-one: Main, Account, Line Items, ARAP, Delivery Details, Delivery Trips, Delivery Plans, Settlement, KO For, Receipt Voucher, Department Hdr, Trace Document, Contra, Doc Link, Attachments, Export, Convert, Ecomsync, Status, Events, Email. The tab order is fixed; there is no Details tab ordering setting because there is no Default Selection screen.

The Ecomsync tab on a FINAL order is the marketplace desk: sub-tabs Marketplace Status (set the order to Pending, To Pack or Ready To Ship; for Shopee, Ready To Ship or Processed, with the shipping method dropoff, pickup or non-integrated and a pick-up address and time slot fetched from Shopee), Detail, Printables and Line Item ToPack Batch Update.

Inside a line the tabs are Item Details, Grouped Item, Serial Number, Batches, Bin, Stock Availability, Costing Details, Pricing Details, Issue Link, Attachment, the four KO By / KO For Jobsheet and Job Order tabs, KO By / KO For Sales Quotation Item, Doc Link, Ecom Sync and MRP — the Sales Order (Internal) set minus Reserved Stock, Sales History and Membership Points.

The Ecomsync dashboard

Two tabs, Lazada Dashboard and Shopee Dashboard, each with Dashboard Main, Dashboard Total Orders and Dashboard Total Sales, plus an order listing whose detail view has Detail, Item, Customer Details, Processing Flow and Shipping Carrier. These are the same components as in Sales Order (Internal); the index page describes what feeds them.

Configuration

Before you can use it

The same prerequisites as Sales Order (Internal): company, branch and location; customers with credit terms; items; a pricing scheme and pricebook; and the API permissions TNT_API_DOC_INTERNAL_SALES_ORDER_{CREATE,READ,UPDATE}_TGT_GUID, TNT_API_DOC_INTERNAL_RECEIPT_VOUCHER_{CREATE,READ}_TGT_GUID and TNT_API_DOC_INTERNAL_SALES_ORDER_DELIVERY_BRANCH_READ, which are the eight permission definitions the applet enquires about at start-up (app.component.ts). For marketplace orders, a marketplace branch set up in Organisation and the Lazada / Shopee order jobs scheduled — see the EcomSync index.

Applet settings

There is no settings screen in this applet. app.routing.ts (commit af9f967) declares no settings or personalization route; the sidebar has no settings group; and no component navigates to one. The settings components are nevertheless compiled in — app.module.ts imports AppletSettingsModule and AppletPersonalizationModule, and components/settings-container/ holds Default Selection, Field Configuration, Custom Status, Branch Settings, Workflow Settings, Email Template, Sales Order Status, Printables and Printable Format Settings, Audit Trail, Release Notes and Applet Log, each of which would save through saveMasterSettingsInit — but nothing routes to them.

What this means in practice:

  • The applet reads its settings exactly as Sales Order (Internal) does: every component that subscribes to selectMasterSettings (the line editor, the customer editor, pick-pack queue, delivery details, contra and receipt-voucher forms) applies whatever is stored against this applet’s code.
  • Nothing in this applet writes them. A tenant that has never saved settings for shopee_sales_order_applet runs on the empty set — every HIDE_* toggle off, no default branch, no default pricebook, no custom statuses, no printable formats.
  • Settings saved in Sales Order (Internal) are stored against erp_internal_sales_order_applet_v2 and are not read here. The two applets can therefore show the same order with different columns and defaults.

Given that, the four-proof table below is short. Every key in applet-settings.model.ts is declared; none is rendered by a reachable screen; none is persisted from this applet; the ones listed are consumed.

Setting (key)Consumed byEffect when a stored value is true
HIDE_BATCHES, HIDE_BINadd- and edit-line-item templatesHide the Batches / Bin tab of a line. Sales Order (Internal) uses the four finer keys HIDE_BATCH_NUMBER, HIDE_BATCH_ISSUE_DATE, HIDE_BATCH_EXPIRY_DATE, HIDE_BIN_NUMBER instead
HIDE_PAYMENT_CONFIG, HIDE_TAX, HIDE_CONTACT, HIDE_BRANCH, HIDE_ITEM_PRICING, HIDE_REMARK, HIDE_CREDIT_TERM_AND_LIMITthe customer editor opened from the Account tab (customer-edit.component.html)Hide the matching tab when a customer is created or edited from inside the order. Sales Order (Internal)’s customer editor reads the same keys, but its settings model declares only HIDE_PAYMENT_CONFIG and HIDE_ENTITY_CATEGORY; here all seven are declared
GL_CODE_CHECK_FILTERDeclared only; consumed by nothing in this applet
Everything else in the model (DEFAULT_BRANCH / DEFAULT_LOCATION / DEFAULT_COMPANY, DEFAULT_PRICEBOOK, DEFAULT_CURRENCY, the HIDE_* column and tab toggles, ENABLE_SERIAL_NUMBER_VALIDATION_FINAL, DISALLOW_SELL_BELOW_*, SHOW_DRAFT_BUTTON, FINAL_STATUS_GUID, the custom-status arrays, the credit-card HIDE_* / MANDATORY_* pairs)the same components as in Sales Order (Internal)As documented on that page’s Applet settings, if a value has been stored for this applet’s code by some other means

Keys present in Sales Order (Internal)’s model and absent here: DEFAULT_PACKING_LOCATION_GUID, PRICING_RETAIL_GUID, DEFAULT_ORIENTATION, DEFAULT_DECIMAL_PRECISION / DEFAULT_DECIMAL_STEP, HIDE_TRACKING_ID_LISTING, HIDE_TRACKING_ID_GEN_DOC, HIDE_STATUS_GEN_DOC, HIDE_DOCUMENT_LINKS, HIDE_SALES_HISTORY, HIDE_RESERVED_STOCK, HIDE_SEARCH_DOCUMENT, and the HIDE_*_MENU family. So the sidebar cannot be trimmed per tenant — it is already trimmed in code — and there is no default pricing scheme; unit prices come from the pricebook rules evaluated client-side (components/utilities/pricebook-calculator.ts, a file this build carries and Sales Order (Internal) does not).

Document behaviour settings

No workflow, custom-status, sales-order-status, printable or email-template screen is reachable (see above). Status flow is the backend’s: DRAFT → FINAL → VOID, with Discard on a draft, and the per-line Close. The marketplace status pushed back to Lazada / Shopee is set from the order’s Ecomsync › Marketplace Status tab, not from a setting.

Feature visibility / permissions

The applet checks fifteen client-side permission codes: SHOW_GENDOC_FINAL_BUTTON, SHOW_GENDOC_VOID_BUTTON, SHOW_GENDOC_DISCARD_BUTTON, SHOW_DOC_NO_TENANT, SHOW_DOC_NO_COMPANY, SHOW_DOC_NO_BRANCH, SHOW_CLIENT_DOC_TYPE, SHOW_TRANSACTION_DATE, SHOW_LISTING_BRANCH, SHOW_ARAP_PNS, SHOW_ARAP_SETTLEMENT, SHOW_ARAP_DOC_OPEN, SHOW_ARAP_CONTRA, SHOW_ARAP_BAL and SHOW_MARKETPLACE_STATUS_UPDATE_PAGE. Whether any of them is registered in bl_applet_client_side_perm_dfn for shopee_sales_order_applet could not be confirmed on 2026-09-15 (registry tunnel down); the page will be corrected when it can be queried. The Feature Visibility and permission-listing screens exist in the route table of Sales Order (Internal) but not here, so client-side permissions for this applet can only be assigned from the shared permission tooling, not from inside the applet.

Fields

Identical to Sales Order (Internal) › Fields for Main Details, Account, Lines, Settlement, Contra and Delivery Plan. Differences:

AreaSales Order (Internal)This applet
Line tabsincludes Reserved Stock, Sales History, Membership Pointsnot present
Line tabsBatches and Bin hidden by four keyshidden by HIDE_BATCHES / HIDE_BIN
Unit price defaultpricing scheme from PRICING_RETAIL_GUIDpricebook rules only (pricebook-calculator.ts); no scheme default
Customer editor (Account tab)same hide keys read, two declaredPayment Config, Tax, Contact, Branch, Item Pricing, Remark, Credit Term and Limit each hideable, and all seven keys declared in the model
Ecomsync tabMarketplace Status, Detail, Printables, Line Item ToPack Batch Updateidentical

Lifecycle and effects

Posting proof, taken from Sales Order (Internal) and re-verified against the backend at blg-akaun-platform-java commit c4a3545d7c:

Server document typeINTERNAL_SALES_ORDER (AppletConstants.docType; ServerDocTypes.java line 49)
Amount signum0 (ServerDocTypes.INTERNAL_SALES_ORDER(0,0); AppletConstants.amount_signum = 0)
Quantity signum0 (AppletConstants.quantity_signum = 0)
Dr / Cr equationnone — JournalPostingTypeHandler has no handler for a signum-0 sales order; JournalPostingService is never entered
GL precedencenot applicable; no journal is built
Stock processornone — InventoryTransactionLineProcessorService writes no inventory transaction for quantity signum 0; the order only reduces available quantity in StockAvailabilityService
What VOID reversesnothing posted; VOID releases document links and reservations (same void processor as Sales Order (Internal))

Statuses TEMP → DRAFT → FINAL → VOID, FINAL validation (exchange rate, blacklist, serial / batch quantities when ENABLE_SERIAL_NUMBER_VALIDATION_FINAL is stored, locked period) and knock-off into a Sales Invoice are as on Sales Order (Internal) › Lifecycle and posting — it is the same InternalSalesOrderDataConsistencyObject.

Marketplace orders arrive in TEMP from the Lazada / Shopee order-ingestion jobs; a user opens and saves one before it gets a running number. The status pushed back to the marketplace from the Ecomsync tab is recorded per order as a fulfilment record, as described on the EcomSync index.

Related applets

Troubleshooting

SymptomCauseFix
Columns, defaults or hidden tabs differ from Sales Order (Internal) for the same orderSettings are stored per applet code and this applet has no screen to set its ownExpected; there is nothing to configure here. Use Sales Order (Internal) when a configured view is needed
Typing …/settings after the route root shows the applet’s 404 pageNo settings route exists in this buildNot a fault; see Configuration
Pick Pack Queue, Delivery Items, Batch Printing, Delivery Plan, File Export or the Ecomsync Scheduler cannot be foundCompiled in but absent from the sidebarType the route (pick-pack-queue, delivery-items, batch-printing, delivery-plan, file-export, ecomsync-scheduler) after the route root, or use Sales Order (Internal)
Error updating the marketplace statusThe marketplace rejected the status push from the Ecomsync tab; the toast carries the marketplace’s messageRead the message; for Shopee, make sure a shipping method and, for pick-up, an address and time slot are chosen
Please Select a Mode or Select at least One Data from Listing / Error mode being selected for lazada (or shopee)Bulk marketplace update run with no mode, no rows, or a mode that does not match the order’s marketplaceFilter to one marketplace, tick rows, pick its mode
Customer not linked to branchThe customer chosen on the Account tab has no link to the order’s branchLink the customer to the branch in Customer
There is no GL Code linked to this itemItem has no GL code and the line editor requires oneSet it in Doc Item Maintenance
Only maximum quantity of N is allowed for this componentGrouped-item component quantity exceeds its ratioReduce the quantity
Delivery Branch And Location Do Not Match / Delivery Types Do Not MatchDelivery Details disagree with the Main Details branch or with the delivery type of other linesAlign the branch, location and delivery type
Please refine your search as only 10 records … are being showedCustomer search returned more than ten matchesNarrow the search
Marketplace order stuck in TEMP with no running numberCreated by the ingestion job; the number is assigned when a user saves itOpen the order and save

Related documentation

Last updated on