Integration between Ongoing WMS and Logtrade
Logtrade is an adaptive, cloud-based multi carrier shipping platform for delivery and shipping management. Integrating Logtrade to Ongoing WMS helps you to automate the label printing process and access a large library of carriers directly from the WMS.
Features
Make transport bookings directly from Ongoing WMS
You can create a shipment in Logtrade based on an order in Ongoing WMS. All information about the shipment (address and number of packages) can be entered into Ongoing WMS, and then transferred to Logtrade at the click of a button.
Fetch information from Logtrade's Delivery Checkout
The system can retrieve information from Logtrade's Delivery Checkout to determine the chosen transporter and pickup point for a specific order. This enables the usage of a delivery checkout from Logtrade but a delivery management software from another supplier. The information can also be used in the warehouse. For instance, the carriers selected by the customers can be used for prioritization of orders, based on the pickup time for each carrier.
The delivery checkout process takes place in the webshop when the consumer selects between different delivery options. No shipment is created in the checkout. Once the order is created in Ongoing WMS, the pre-selected shipping details in Logtrade are fetched to the WMS. Subsequently, complementing information, such as how the order has been packed, is reported back to your delivery management system, e.g. Logtrade, to finalize the shipment process.
Make shipment information visible in Ongoing WMS
When the shipment in Logtrade has been booked, Ongoing WMS will receive a response from Logtrade. The response contains tracking information and shipping documents.
Printing
Printing of shipping labels and other documents can be carried out either by Ongoing WMS or Logtrade depending on your preference. To print documents from Ongoing WMS the function "Create PDF files" must be activated in Logtrade. Note that Logtrade may charge an additional cost for this function.
Transporters and services
It is possible to see all available transporters and services in Ongoing WMS. It is also possible to install them on demand without any need to find out corresponding codes.
Generate customs declaration
With an integration between Logtrade and Ongoing WMS electronic customs declarations can be generated.
Default setup
The order is sent to Logtrade when the Send button is pressed in Ongoing WMS.
If the shipment validates, tracking information and shipping documents will be returned to Ongoing WMS immediately.
Get Started
The following data is required to set up an integration with Logtrade:
- License number
- User id
- Password
After you have gathered this information, please see this guide on how to set up an integration between Ongoing WMS and Logtrade. For more information about the benefits, go to Logtrades landing page for Ongoing WMS.
Mapping
Logtrade Shipment - Ongoing WMS Order
Logtrade | Ongoing WMS | |
---|---|---|
AgentOfficeId | OrderInfo⇒TransporterServicePointId?⇒ToString() | |
ConsignmentId | $"{OrderInfo⇒OrderId}-{Guid⇒NewGuid()⇒ToString()⇒Substring(0,5)}" + (if isReturn then "-R", else "") | |
DeclaredCurrencyCode |
if isReturn then null, else if string⇒IsNullOrWhiteSpace(OrderInfo⇒OrderCustomsInfo?⇒CustomsValueCurrencyCode) then PickedOrderLines⇒FirstOrDefault()?⇒CurrencyCode, else OrderInfo⇒OrderCustomsInfo?⇒CustomsValueCurrencyCode |
|
DeclaredValue |
if isReturn then 0, else PickedOrderLines⇒Where(PickedNumberOfItems > 0)⇒Select(new ArticleItem)⇒ToArray()⇒Select(UnitValue * NumberOfItems)⇒Sum() |
|
CountryOfOrigin | PickedOrderLines⇒Article⇒CountryOfOriginCode | |
Description | GoodsItems⇒FirstOrDefault()?⇒GoodsCategory | |
GrossWeight | PickedOrderLine⇒Article⇒Weight if not null, else 0 | |
NetWeight |
PickedOrderLine⇒Article⇒NetWeight, if not null, else PickedOrderLine⇒Article⇒Weight if not null, else 0 |
|
NumberOfItems | (int)PickedOrderLine⇒PickedNumberOfItems | |
OtherQuantity | 1 | |
TaricNumber | new string(PickedOrderLine⇒Article⇒StatisticsNumber⇒Where(char⇒IsLetterOrDigit)⇒ToArray()) | |
UnitValue | Math.Round(TACustomsHelper⇒GetPickedOrderLineUnitValue(PickedOrderLine), 2) | |
GoodsItems | GoodsItems⇒Select(new Generated⇒Logtrade⇒GoodsItem⇒ToArray()) | |
GoodsDescription | Interface⇒GoodsItem⇒GoodsCategory | |
GrossWeight | Interface⇒GoodsItem⇒Weight | |
LoadingMeters | Interface⇒GoodsItem⇒LoadMeters | |
NumberOfPackages | Interface⇒GoodsItem⇒NumberOfPackages | |
TypeOfPackageCode | Interface⇒GoodsItem⇒PackageTypeCode | |
TypeOfPackages | Interface⇒GoodsItem⇒PackageTypeName | |
Volume | Interface⇒GoodsItem⇒Volume | |
Invoices | if isReturn then null, else Generated⇒Logtrade⇒Invoice | |
ArticleItems | PickedOrderLines⇒Where(PickedNumberOfItems > 0)⇒Select(new ArticleItem)⇒ToArray() | |
CountryOfOrigin | PickedOrderLines⇒Article⇒CountryOfOriginCode | |
Description | GoodsItems⇒FirstOrDefault()?⇒GoodsCategory | |
GrossWeight | PickedOrderLine⇒Article⇒Weight if not null, else 0 | |
NetWeight |
PickedOrderLine⇒Article⇒NetWeight, if not null, else PickedOrderLine⇒Article⇒Weight if not null, else 0 |
|
NumberOfItems | (int)PickedOrderLine⇒PickedNumberOfItems | |
OtherQuantity | 1 | |
TaricNumber | new string(PickedOrderLine⇒Article⇒StatisticsNumber⇒Where(char⇒IsLetterOrDigit)⇒ToArray()) | |
UnitValue | Math.Round(TACustomsHelper⇒GetPickedOrderLineUnitValue(PickedOrderLine), 2) | |
CurrencyCode |
if string⇒IsNullOrWhiteSpace(OrderInfo⇒OrderCustomsInfo?⇒CustomsValueCurrencyCode) then PickedOrderLines⇒FirstOrDefault()?⇒CurrencyCode, else OrderInfo⇒OrderCustomsInfo?⇒CustomsValueCurrencyCode |
|
ExportType | ExportType⇒Permanent | |
InvoiceDate | DateTime.Now | |
InvoiceNumber |
if not string.IsNullOrWhiteSpace(OrderInfo⇒InvoiceNumber) then OrderInfo⇒InvoiceNumber, else OrderInfo⇒OrderId⇒ToString() |
|
InvoiceType | InvoiceType.AnyInvoiceType | |
TermsOfPayment | None* | |
NumberOfEurPallets | GoodsItems⇒Sum(NumberOfPackages if PackageTypeCode == "EP", else 0) | |
PaymentIndicator |
PaymentType⇒Recipient if Financial⇒TransportPaymentType equals TransportPaymentType⇒Collect, PaymentType⇒Prepaid if Financial⇒TransportPaymentType equals TransportPaymentType⇒Sender, PaymentType⇒ThirdParty if Financial⇒TransportPaymentType equals TransportPaymentType⇒ThirdParty, PaymentType⇒Unknown if Financial⇒TransportPaymentType equals TransportPaymentType⇒UnknownParty |
|
ProductCode | if isReturn then ReturnTransporter⇒ServiceCode, else Transporter⇒ServiceCode | |
RecipientAddressId | if isReturn then ReturnTransporter⇒TransporterContractEdiCode, else None* | |
RecipientReference | if OrderInfo⇒SalesCode⇒Length <= 35, then OrderInfo⇒SalesCode, else OrderInfo⇒SalesCode⇒Remove(35) | |
SenderAddressId | if isReturn then None*, else OrderInfo⇒GoodsOwnerEdiCode | |
SenderReference |
senderReference if senderReference.Length <= 35, else senderReference⇒Remove(35), where senderReference = $"{preamble}-{OrderInfo⇒OrderId⇒ToString() if string.IsNullOrEmpty(OrderInfo⇒GoodsOwnerOrderNumber, else OrderInfo⇒GoodsOwnerOrderNumber)}" + "-R" if isReturn, where preamble = GoodsOwnerInfo⇒GoodsOwnerReference if GoodsOwnerInfo⇒GoodsOwnerReference != "", else GoodsOwnerInfo⇒Name |
|
ShipmentAddresses | Generated⇒Logtrade⇒ShipmentAddress | |
Address1 | if Consignee⇒Address⇒Length <= 35 then Consignee⇒Address, else Consignee⇒Address⇒Remove(35) | |
Address2 | if Consignee⇒Address2⇒Length <= 35 then Consignee⇒Address2, else Consignee⇒Address2⇒Remove(35) | |
Address3 | if Consignee⇒Address3⇒Length <= 35 then Consignee⇒Address3, else Consignee⇒Address3⇒Remove(35) | |
AddressType | addressType | |
City | if Consignee⇒City⇒Length <= 30 then Consignee⇒City, else Consignee⇒City⇒Remove(30) | |
ContactPerson | if Consignee⇒Name⇒Length <= 35 then Consignee⇒Name, else Consignee⇒Name⇒Remove(35) | |
CountryCode | Consignee⇒CountryCode | |
OrderInfo⇒EmailNotification?⇒Value | ||
EurPalletRegistrationNumber | Consignee⇒CustomerNumberPallets | |
ForwarderCustomerCode | if Financial⇒TransportPaymentType equals TransportPaymentType⇒Collect then TransportPayer⇒CustomerCode, else None* | |
GateCode | Consignee⇒DoorCode | |
Name | if Consignee⇒Name⇒Length <= 35 then Consignee⇒Name, else Consignee⇒Name⇒Remove(35) | |
PhoneNumber | OrderInfo⇒TelephoneNotification?⇒Value | |
Province | if string⇒IsNullOrEmpty(Consignee⇒CountryStateCode) then None*, else Consignee⇒CountryStateCode | |
SmsNumber | OrderInfo⇒SMSNotification?⇒Value | |
ZipCode |
if zipCode⇒Length <= 9 then zipCode, else zipCode⇒Remove(9), where zipCode = Consignee⇒PostCode⇒Replace("-", "") |
|
ShipmentInstructions | new ShipmentInstruction() if (not isReturn and not string.IsNullOrEmpty(OrderInfo⇒DeliveryInstruction)), else None* | |
Instruction | OrderInfo⇒DeliveryInstruction | |
InstructionType | new List<ShipmentServiceBase>().ToArray() | |
ShipmentDate | DateTime.Today | |
ShipmentTemplate | if isReturn then ReturnTransporter.WaybillTemplate, else Financial⇒WaybillTemplate | |
TermsOfDeliveryCode | if isReturn then None*, else OrderInfo⇒TermsOfDelivery | |
TestFlag | LogtradeMapperOptions⇒isTest | |
UseReturnLabel | false |
None* = those fields are not in the default set up, but it is easy to set them to any field in Ongoing WMS.