
Integration between Ongoing WMS and LogTrade
LogTrade is an adaptive, cloud-based multi carrier shipping platform for delivery and shipping management.
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.
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
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.
Preparations
Please see this guide on how to set up an integration between LogTrade and your Ongoing WMS. You will need your license number, user id and password to set up LogTrade in Ongoing WMS.
You will need your license number, user id and password to set up LogTrade in 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.