UNPKG

rtech-struct

Version:

Rtech Platform Superstruct Entity

150 lines (137 loc) 5.58 kB
const calcDistance = (transports) => { let result = 0 for (const transport of transports) { for (const distance of transport.distances) { result += distance } } return result } const pointInfo = (point, suffix, defaultOption) => { const place = [ point.address.street || '', point.address.zip_code, point.address.city, point.address.country, point.address.country, point.address.timezone_string, ] if (point.address.additional_street) place.push(point.address.additional_street) return { [suffix + 'Place']: place, [suffix + 'Contact']: [ point.contact.company_name || defaultOption.company_name, point.contact.name || defaultOption.name, point.contact.email || defaultOption.email, point.contact.phone || defaultOption.phone, ], [suffix + 'Date']: point.arrival_from, [suffix + 'DateRange']: point.arrival_until, [suffix + 'Location']: [ point.address.position.lat.toString(), point.address.position.lon.toString() ], } } const dimension = (key, points, packages, defaultOption) => { let result = [] if (points.length <= 2) { for (const p of packages) { result.push(p.quantity.toString()) result.push(p.length.toString()) result.push(p.width.toString()) result.push(p.height.toString()) result.push(p.weight.toString()) result.push(p.stackable ? 'stackable:' + p.stackable : '') result.push( p.adr ? (p.adr.class + ',' + p.adr.un_code + ',' + p.adr.packing_group) : '' ) result.push( p.goods_value ? p.goods_value.value.toString() : '' ) result.push(p.comment || '') } } else { for (const p of packages) { result.push(p.quantity.toString()) result.push(p.length.toString()) result.push(p.width.toString()) result.push(p.height.toString()) result.push(p.weight.toString()) result.push(p.comment || '') result.push(p.stackable || '') result.push( p.adr ? (p.adr.class + ',' + p.adr.un_code + ',' + p.adr.packing_group) : '' ) result.push( p.goods_value ? p.goods_value.value.toString() : '' ) result.push('') for (const point of points) { if (point.package_to_load.includes(p.tracking_id) || point.package_to_unload.includes(p.tracking_id)) { result.push(key + '-' + point.key) result.push( (point.address.street || '') + (point.address.additional_street ? '\n' + point.address.additional_street : '') ) result.push(point.address.zip_code) result.push(point.address.city) result.push(point.address.country) result.push(point.address.country) result.push( point.address.position.lat.toString() + ',' + point.address.position.lon.toString() ) result.push(point.address.timezone_string) result.push(point.contact.company_name || defaultOption.company_name) result.push(point.contact.name || defaultOption.name) result.push(point.contact.email || defaultOption.email) result.push(point.contact.phone || defaultOption.phone) result.push(point.arrival_from) result.push(point.arrival_until) } } } } return result } const checkValidityTime = (time) => { if (!time) return time return { valid_from: time.valid_from, valid_until: time.valid_until, decision_from: time.decision_time ? time.decision_time.decision_from : undefined } } /** * Tool to transform request into auction. * @param {Object} request - The request object. * @param {Object} defaultOption - Object that contains default values for keys * @param {string} defaultOption.company_name - Default company_name * @param {string} defaultOption.name - Default name * @param {string} defaultOption.email - Default email * @param {string} defaultOption.phone - Default phone */ const requestToAuction = (request, defaultOption = {}) => { return { key: request.key, name: request.key, target: request.target, creator: request.creator, source: request.source, distance: calcDistance(request.transports), options: request.points.length <= 2 ? ['PKG_V2'] : ['MULTISTEP'], ...pointInfo(request.points.find((point) => point.key === 'A'), 'pu', defaultOption), ...pointInfo(request.points.find((point) => point.key === 'B'), 'de', defaultOption), dimension: dimension(request.key, request.points, request.packages, defaultOption), ...checkValidityTime(request.validity_time), notes: request.comment, extras: request.extras, incoterm: request.transports[0].incoterm, vehicles: request.transports[0].vehicles, transport: [request.packages[0].package_type] } } module.exports = requestToAuction