Árvore de páginas

IMPORTANTE

  • A integração TOTVS OMS x TOTVS Planejamento de Rotas (TPR) será descontinuada no próximo release (Outubro/2023).



Introdução


Sistemas Envolvidos

  • TPR: TOTVS Planejamento de Rotas

  • Sistema Externo: Todos os ERPs que se conectam ou pretendem se conectar com os produtos de planejamento logístico TOTVS.

Integração

  • Formato de entrada/saída: Javascript

Escopo

  • API Javascript para ser importada no sistema externo a partir dela deve ser possível implementar e manipular mapas tanto para a tela de localidade quanto para a tela de rotas;

Pré-requisitos instalação/implantação/utilização

  • Para clientes Protheus versão xxxxxx;
  • Para clientes Datasul versão xxxxxx;
  • Para clientes externos contratação do trial via TOTVS Store;

Layout de Requisição 

TPR
class TPR {
   get(token: string, systemInfo: SystemInfo): Promise<TPRServices>
}
SystemInfo
interface SystemInfo {
    readonly system: string;
    readonly version: string;
    readonly qualifiers: string;
    readonly callbackURL?: string;
}

TPRServices
class TPRServices {
   createMap(element: HTMLElement): Promise<TPRMap>;
}


TPRMap
class TPRMap {
   addMarker(point: TPRPoint, markerOptions?: MarkerOptions): void;
   viewRoute(route: TPRRoute, routeOptions?: TPRRouteOptions): Promise<TPRMapRoute>;
   zoomIn(): void;
   zoomOut(): void;
   centerOn(point: TPRPoint);
   centerRoutes(): void;
   clear(): void;
   close(): void;
}

TPRPoint
class TPRPoint {
   readonly latitude;
   readonly longitude;
}

MarkerOptions
interface MarkerOptions {
   color?: String;
   draggable?: boolean;
   onDrag?: (latitude: number, longitude: number) => void
}

TPRRoute
class TPRRoute {
   constructor(readonly trip: TPRTrip, readonly identifier?: string) {
   }
}

TPRRouteOptions
class TPRRouteOptions {
   constructor(readonly tooglePopup: boolean) {}
}

TPRMapRoute
class TPRMapRoute {
	hide(): void;
	show(): void;
	color(color?: String);
}

TPRTrip
class TPRTrip {
    // Campos do TPRTrip (https://tdn.totvs.com/pages/viewpage.action?pageId=604507369)
	readonly sequential:Integer
	readonly distance:Double
	readonly tollValue:Double
	readonly numberOfStops:Integer
	readonly volume:Double
	readonly weight:Double
	readonly duration:Integer
	readonly extraTrip:boolean
	readonly considerReturnDistance: boolean
	readonly vehicle:TPRVehicle
	readonly stops:TPRTripStop[]

}


TPRVehicle
class TPRVehicle {
	readonly identifier: string,
	readonly weightCapacity: number,
	readonly volumeCapacity: number,
	readonly quantity: number,
	readonly speed: number,
	readonly vehicleType: string,
	readonly tollAxes: number,
	readonly tollReturnAxes: number
}

TPRTripStop
class TPRTripStop {
    // Campos do TPRTripStop (https://tdn.totvs.com/pages/viewpage.action?pageId=604507369)
	readonly sequence:Integer
	readonly type:String
	readonly distance:Double,
    readonly tollValue:Double,
	readonly locality:TPRRoutingLocality
	readonly arrivalTime:DateTime
	readonly departureTime:DateTime
	readonly loadedOrders:TPRRoutedOrder[]
	readonly unloadedOrders:TPRRoutedOrder[]
}

TPRRoutingLocality
class TPRRoutingLocality {
    // Campos do TPRRoutingLocality(https://tdn.totvs.com/pages/viewpage.action?pageId=604507369)
	readonly identifier:String
    readonly name: String
	readonly country:String
	readonly latitude:Double
	readonly longitude:Double
	readonly operation:String
	readonly customizedOperation: TPRCustomizedOperation[]
}

TPRCustomizedOperation
class TPRCustomizedOperation {   
		readonly weekDay: string,
        readonly startTime: string,
        readonly endTime: string 
}

TPRRoutedOrder
class TPRRoutedOrder {
	readonly identifier:String
	readonly weight:Double
	readonly volume:Double
}

Casos de uso

Casos de uso
(function() {
//require ou import TPR

	const tpr: TPR;
	let tprServices: TPRServices;
	tpr.get("algum-token-aqui", {"system": "system-1.0.0", "version": "1.0.0", "qualifiers": ""})
		.then((services) => {
			tprServices = services;
		});

	let tprMap: TPRMap;
// Caso de uso 1: visualizar uma localidade no mapa
	tprServices.createMap(document.getElementById("mapDiv"), {
		height: 300,
		width: 650
	}).then((map) => {
		tprMap = map;
	});

// Caso de uso 2: zoomIn
	tprMap.zoomIn();

// Caso de uso 3: zoomOut
	tprMap.zoomOut();

// Caso de uso 4: centralizar sobre um ponto específico
	tprMap.centerOn(new TPRPoint(-23, -46));

// Caso de uso 5: Centralizar considerando todos os pontos plotados
	tprMap.centerRoutes();

// Caso de uso 6: Ver rota
    let tprMapRoute: TPRMapRoute;
	tprMap.viewRoute(new TPRRoute(new TPRTrip(...)))
		.then((mapRoute) => tprMapRoute = mapRoute);

// Caso de uso 7: Limpa o conteúdo (pontos e rota)
	tprMap.clear();

// Caso de uso 8: Remover mapa
	tprMap.close();

// Caso de uso 9: Esconder roda
	tprMapRoute.hide();

// Caso de uso 10: Reexibir rota
	tprMapRoute.show();

// Caso de uso 11: Trocar cor de rota
	tprMapRoute.color("#AABBCC");

// Caso de uso 12: Exibir popup nas paradas
	tprMap.viewRoute(new TPRRoute(new TPRTrip(...)), new TPRRouteOptions(true));

// Caso de uso 12.1: Permitir alteração de rotas (Fluxo ocorre apenas quando há uma rota no mapa e a rota possui identificador. 
    OBS: é necessário ter uma callbackURL no modelo de SystemInfo ex: {"system": "system-1.0.0", "version": "1.0.0", "qualifiers": "", callbackURL:"https://abc.com.br"} )
	tprMap.viewRoute(new TPRRoute(new TPRTrip(...), "someRouteIdentifierToRouteAlteration"), new TPRRouteOptions(true));

// Caso de uso 13: Receber evento de drag dos marcadores
	tprMap.addMarker({latitude: -23, longitude: -46}, {
		draggable: true,
		onDrag: (lat, long) => console.log("Arrastei o marcador")
	});
})();

Anexos

  Arquivo Modificado
Arquivo TPR_visualizacao_rotas draw.io diagram 20 abr, 2021 by Julio Vinicius Oliveira dos Santos
Arquivo PNG TPR_visualizacao_rotas.png TPR_visualizacao_rotas exported to image 20 abr, 2021 by Julio Vinicius Oliveira dos Santos

  • Sem rótulos