Overview #
See also:
- Sales Portal Data Verification—Reviewing your data to ensure correctness.
- Sales Information Access—How to limit who sees what information.
- Sales Territory File—Define names for your territories to make it easier to use.
- Setting up eOL portal Shipment Tracking—Three ways to specify tracking numbers on invoices.
Currencies #
The sales portal supports one currency at a time. However, you may configure what the currency is using the Company Settings "Sales portal currency code" field. E.g. if the values you provide below for "UnitPrice" etc are Euros, then specify EUR in the "Sales portal currency code" Company Setting.
File Requirements #
The eCat Online sales portal requires two files in addition to the files required for the eCat iPad app: order_data.csv and invoice_data.csv. (Filenames are case sensitive.) These files can be uploaded interactively in the admin portal or put in the FTP site /data directory for automated processing.
Order and invoice records have two sections, a header and a list of items. These two sections are combined into one CSV file as follows. The first row for a given order (or invoice) contains the header fields as well as the fields for the first item. Subsequent rows contain the fields for each of the remaining items, and contain nothing for the header fields. The order and invoice files must be sorted so all the lines for a given order or invoice are grouped together. For example:
| header 1 field 1 | header 1 field 2 | line 1 field 1 | line 1 field 2 |
| line 2 field 1 | line 2 field 2 | ||
| header 2 field 1 | header 2 field 2 | line 1 field 1 | line 1 field 2 |
| line 2 field 1 | line 2 field 2 | ||
| line 3 field 1 | line 3 field 2 |
Subsequent rows (for line items) may repeat the header details for ease of programming (SQL OUTER JOINs will repeat those details). We use the first row of header data we see and ignore subsequent redundant header values.
That is, the following is OK:
| header 1 field 1 | header 1 field 2 | line 1 field 1 | line 1 field 2 |
| header 1 field | header 1 field 2 | line 2 field 1 | line 2 field 2 |
| header 2 field 1 | header 2 field 2 | line 1 field 1 | line 1 field 2 |
| header 2 field 1 | header 2 field 2 | line 2 field 1 | line 2 field 2 |
| header 2 field 1 | header 2 field 2 | line 3 field 1 | line 3 field 2 |
Performance #
Import time is a concern because a single company could have millions of rows of imported invoice/order data and thousands of users. Therefore, we employ the following strategy:
- each record (order, invoice) includes a
LastModifiedAttimestamp. After an import, the system marks the most recent timestamp and stores it. On subsequent imports, only records with timestamps newer than theLastModifiedAtvalue will be considered for adding/modifying. - each record (order, invoice) includes a
OrderDate/InvoiceDate. The import process will keep track of the earliest date in the import file. Afterwards, it will delete all records with dates prior to that minimum date.
File Specification #
order_data.csv File Specifications #
(click here to download a sample order_data.csv file)
| Field Name | Type | Req? | Length | Comments |
| Order Header Fields | ———— | ———— | ———— | ———— |
| LastModifiedAt | N | Y | Specifies the last time this order record was modified. Accounts for the order lines as well. (Do not include this field for the subsequent order lines.) This must be a number, not a date/time. It could be,for example 'the number of milliseconds since Jan 1, 1970, 00:00 UTC'. | |
| OrderNumber | S | Y | used for display, search, and to correlate invoices with orders | |
| Complete | B | Y | indicates whether or not the order is complete - meaning there are no additional items on the order remaining to be invoiced; enables users to view only unshipped orders in the order list and customer dashboard; required for order filtering and for the customer dashboard 'Snapshot' view. Also used to determine whether to include the order’s items in the backlog calculations. | |
| OrderDate | D | Y | required field used for filtering, sorting, display, and dashboard graphs | |
| ShipDate | D | N | customer's requested order ship date for informational display | |
| CancelDate | D | N | customer's requested order cancellation date for informational display | |
| Status | S | Y | enables filtering by order status | |
| OrderOrigin | S | Y | enables filtering by order origin | |
| ShipComplete | B | N | customer's shipment preference | |
| BuyerName | S | N | for display as information on orders | |
| RepNumber | S | N | for display as information on orders | |
| RepEmail | S | N | for display as information on orders | |
| RepName | S | N | for display as information on orders | |
| CustomerPONumber | S | Y | used for search/finding orders; displayed as information on orders | |
| ShipmentPreference | S | N | e.g. “As Available”; For display as information on orders | |
| FOB | S | N | for display as information on orders | |
| Terms | S | N | for display as information on orders | |
| Tagfor | S | N | shipment 'mark for'; for display as information on orders | |
| OrderNotes | S | N | for display as information on orders | |
| OrderURL | S | N | used to link order to web hosted copy of 'official' company order | |
| CustomerBillToNumber | S | Y | The customer’s bill-to code. Used to group orders by customer. Also used to limit what a user can see by territory. This must match a customer code in customers.csv to work correctly. | |
| CustomerBillToName | S | Y | the company name of the customer; used for display, sorting, and search. | |
| CustomerBillToEmail | S | N | for display as information on orders | |
| CustomerBillToPhoneNumber | S | N | for display as information on orders | |
| CustomerBillToLine1 | S | N | for display as information on orders | |
| CustomerBillToLine2 | S | N | for display as information on orders | |
| CustomerBillToLine3 | S | N | for display as information on orders | |
| CustomerBillToCity | S | N | for display as information on orders | |
| CustomerBillToState | S | N | for display as information on orders | |
| CustomerBillToPostalCode | S | N | for display as information on orders | |
| CustomerBillToCountry | S | N | for display as information on orders | |
| CustomerShipToNumber | S | N | for display as information on orders | |
| CustomerShipToName | S | N | for display as information on orders | |
| CustomerShipToLine1 | S | N | for display as information on orders | |
| CustomerShipToLine2 | S | N | for display as information on orders | |
| CustomerShipToLine3 | S | N | for display as information on orders | |
| CustomerShipToCity | S | N | for display as information on orders | |
| CustomerShipToState | S | N | for display as information on orders | |
| CustomerShipToPostalCode | S | N | for display as information on orders | |
| CustomerShipToCountry | S | N | for display as information on orders | |
| DiscountAmount | F | N | for display as information on orders | |
| TaxableAmount | F | N | for display as information on orders | |
| NonTaxableAmount | F | N | for display as information on orders | |
| DepositAmount | F | N | for display as information on orders | |
| FreightAmount | F | N | for display as information on orders | |
| TaxAmount | F | N | for display as information on orders | |
| TotalAmount | F | Y | The total amount of the order after all discounts and surcharges. This number is used for display in the list of orders. Note: this number is not used for most totals in the Sales Portal, e.g. the Total Amount Ordered. Most totals use the individual line items. | |
| Order line fields | ———— | ———— | ———— | ———— |
| LineNumber | I | N | 20 | order line number used for sorting order lines to match original order |
| ItemNumber | S | Y | 25 | used to tie sales events to products, collections, tradenames, etc. eCatItemNumber is also available if the ItemNumber doesn't match a BaseItemCode in products.csv. |
| eCatItemNumber | S | N | 25 | If ItemNumber doesn't match an item in your products.csv file (before any matrix modifiers), include this. If blank, eCat Portal will use ItemNumber to link to the product record. |
| Description | S | Y | 255 | Product description for display in order view, order email |
| Description2 | S | N | 255 | Additional description available for line notes, production/delivery status, etc. |
| QuantityOrdered | I | Y | used to calculate backlog totals and order totals. May be negative. | |
| QuantityInvoiced | I | Y | quantity of order line that has been invoiced. Used to calculate backlog totals and invoice totals. | |
| QuantityBackordered | I | N | for information only | |
| QuantityAvailable | I | N | for information only | |
| QuantityPendingInvoice | I | N | for information only. If present, orders will display a new column. | |
| QuantityReleasedToShip | I | N | for information only. If present, orders will display a new column. | |
| AvailableDate | D | N | for information only | |
| AvailableDescription | S | N | for information only | |
| UnitPrice | F | Y | used to calculate sales totals, combined with QuantityOrdered and QuantityInvoiced. QuantityOrdered * UnitPrice = the line item’s extended price |
invoice_data.csv File Specifications #
(click here to download a sample invoice_data.csv file)
| Field Name | Type | Req? | Length | Comments |
| Invoice Header Fields | ----- | ----- | ----- | ----- |
| LastModifiedAt | N | Y | Specifies the last time this record was modified. Accounts for the order lines as well. (Do not include this field for the subsequent lines.) This must be a number, not a date/time. It could be, for example 'the number of milliseconds since Jan 1, 1970, 00:00 UTC'. | |
| InvoiceNumber | S | Y | used for display, search, and to correlate invoices with orders | |
| InvoiceDate | D | Y | required field used for filtering, sorting, display, and dashboard graphs | |
| OrderNumber | S | N | links the given order to the invoice | |
| RepNumber | S | N | ||
| ShipVia | S | N | for information only | |
| TrackingNumber | S | N | if present, will display a tracking link. Used with TrackingCarrier. | |
| TrackingCarrier | S | N | the carrier that the TrackingNumber is for. See Setting up eOL portal Shipment Tracking for a list of valid tracking carriers. | |
| Factor | S | N | ||
| FOB | S | N | for information only | |
| Terms | S | N | for information only | |
| InvoiceURL | S | N | used to link invoice to web hosted copy of 'official' company invoice | |
| CustomerPONumber | S | Y | ||
| CustomerBillToNumber | S | Y | The customer’s bill-to code. Used to group invoices by customer. Also used to limit what a user can see by territory. This must match a customer code in customers.csv to work correctly. | |
| CustomerBillToName | S | Y | the company name of the customer; used for display, sorting, and search. | |
| CustomerBillToEmail | S | N | for information only | |
| CustomerBillToPhoneNumber | S | N | for information only | |
| CustomerBillToLine1 | S | N | for information only | |
| CustomerBillToLine2 | S | N | for information only | |
| CustomerBillToLine3 | S | N | for information only | |
| CustomerBillToCity | S | N | for information only | |
| CustomerBillToState | S | N | for information only | |
| CustomerBillToPostalCode | S | N | for information only | |
| CustomerBillToCountry | S | N | for information only | |
| CustomerShipToNumber | S | N | for information only | |
| CustomerShipToName | S | N | for information only | |
| CustomerShipToLine1 | S | N | for information only | |
| CustomerShipToLine2 | S | N | for information only | |
| CustomerShipToLine3 | S | N | for information only | |
| CustomerShipToCity | S | N | for information only | |
| CustomerShipToState | S | N | for information only | |
| CustomerShipToPostalCode | S | N | for information only | |
| CustomerShipToCountry | S | N | for information only | |
| DiscountAmount | F | N | for information only | |
| FreightAmount | F | N | for information only | |
| TaxableAmount | F | N | for information only | |
| NonTaxableAmount | F | N | for information only | |
| TaxAmount | F | N | for information only | |
| DepositAmount | F | N | for information only | |
| footer_<text> | F | N | used to add custom invoice footer fields. When populated the fields will display as a footer entry above the invoice total with the label '<text>'. Spaces are allowed in the <text> label. The field values must be numeric. For example, add a field named 'footer_Drop Ship charge' to display a 'Drop Ship charge' on invoices. Please note that like the fields above, these fields are for informational display only. They are not used for calculations. The invoice_data.csv NetAmount field value should be adjusted to account for any discounts or charges shown. | |
| NetAmount | F | Y | Net total invoice amount. This number is used for display in the list of invoices. Note: it is not used for most totals in the Sales Portal, e.g. the CY Sales numbers. Most totals use individual line items. This should be negative for credit memos. | |
| Invoice line fields | ----- | ----- | ----- | ----- |
| LineNumber | I | Y | 20 | line number used for sorting lines to match original invoice |
| ItemNumber | S | Y | 25 | used to tie sales events to products, collections, tradenames, etc. eCatItemNumber is also available if the ItemNumber doesn't match a BaseItemCode in products.csv. |
| eCatItemNumber | S | N | 25 | If ItemNumber doesn't match an item in your products database (before any modifiers), include this. If blank, eCat Portal will use ItemNumber to link to the product record. |
| Description | S | Y | 255 | Product description for display in order view, order email |
| Description2 | S | N | 255 | Additional description available for line notes, production/delivery status, etc. |
| ItemTrackingNumber | S | N | 50 | Tracking number for this specific item. We recommend using tracking at the header level (see TrackingNumber and TrackingCarrier above), or by providing the invoice_tracking_data.csv file. For more information, see Setting up eOL portal Shipment Tracking. |
| ItemTrackingCarrier | S | N | 5 | The SCAC code for this item tracking number. See Setting up eOL portal Shipment Tracking for a list of valid tracking carriers. |
| QuantityOrdered | I | Y | for information only | |
| QuantityInvoiced | I | Y | multiplied by UnitPrice to calculate sales totals and extended line amount on invoice informational display; should be negative for credit memos | |
| QuantityBackordered | I | N | for information only | |
| QuantityReturned | I | N | for information only | |
| UnitPrice | F | Y | multiplied by QuantityInvoiced to calculate sales totals; used for informational display |
Automatic summary sales data file generation #
A summary data file named sales_data.csv can be used to make sales data available to users offline.
After importing order and invoice data files, you may have our system automatically create your company's sales_data.csv file from that data. To do so, upload a file called sales_data_sentinel.csv along with your order_data.csv and invoice_data.csv. The contents of the sentinel file don't matter. The sales data will be built after the other two files have been imported.
Note that automatic sales data file generation uses data in a data warehouse that's updated hourly to build the summary sales_data.csv file used in eCat on user iPads.
For automatic sales_data.csv file generation to work best, the order_data.csv and invoice_data.csv files should be uploaded to the FTP site roughly an hour before the sales_data_sentinel.csv file is put on the FTP site to start file generation. There may be some variation due to file sizes and server load, but the timing should almost always work if the order and invoice portal data is uploaded by the top of the hour, then the sentinel file at the top of the next hour.
Tips & Tricks #
- CSV file format guidelines
- See Sales Information Access for information about how to control/limit access to sales information
- File processing Timeframe: Invoice and order data can be uploaded at any time. However note that while invoice and order details are updated as soon as file processing is complete, dashboard totals and the totals in the customer report depend on a data warehouse update done hourly at 20 minutes after the hour. The warehouse update takes 30-40 minutes to complete. So depending on file upload timing it may be up to one hour and 40 minutes before data changes in the new file take effect.