/// <summary> /// Change a route depot. /// </summary> public void ChangeRouteDepote() { var route4Me = new Route4MeManager(ActualApiKey); RunSingleDriverRoundTrip(); OptimizationsToRemove = new List <string>() { SDRT_optimization_problem_id }; string routeId = SDRT_route_id; var initialRoute = R4MeUtils.ObjectDeepClone <DataObjectRoute>(SDRT_route); SDRT_route.Addresses[0].IsDepot = false; int?addressId0 = SDRT_route.Addresses[0].RouteDestinationId; SDRT_route.Addresses[0].Alias = addressId0.ToString(); initialRoute.Addresses[0].Alias = addressId0.ToString(); SDRT_route.Addresses[1].IsDepot = true; int?addressId1 = SDRT_route.Addresses[1].RouteDestinationId; SDRT_route.Addresses[1].Alias = addressId1.ToString(); initialRoute.Addresses[1].Alias = addressId1.ToString(); var dataObject = route4Me.UpdateRoute( SDRT_route, initialRoute, out string errorString ); #region Print Results PrintExampleRouteResult(dataObject, errorString); var address0 = dataObject.Addresses .Where(x => x.Alias == addressId0.ToString()) .FirstOrDefault(); PrintExampleDestination(address0); var address1 = dataObject.Addresses .Where(x => x.Alias == addressId1.ToString()) .FirstOrDefault(); PrintExampleDestination(address1); #endregion RemoveTestOptimizations(); }
/// <summary> /// Update an address book contact by sending whole modified contact object. /// </summary> public void UpdateWholeAddressBookContact() { var route4Me = new Route4MeManager(ActualApiKey); CreateTestContacts(); // Create contact clone in the memory var contactClone = R4MeUtils.ObjectDeepClone <AddressBookContact>(contact1); // Modify the parameters of the contactClone contactClone.address_group = "Updated"; contactClone.schedule_blacklist = new string[] { "2020-03-14", "2020-03-15" }; contactClone.address_custom_data = new Dictionary <string, string> { { "key1", "value1" }, { "key2", "value2" } }; contactClone.local_time_window_start = R4MeUtils.DDHHMM2Seconds("7:05", out _); contactClone.local_time_window_end = R4MeUtils.DDHHMM2Seconds("7:22", out _); contactClone.AddressCube = 5; contactClone.AddressPieces = 6; contactClone.AddressRevenue = 700; contactClone.AddressWeight = 80; contactClone.AddressPriority = 9; var sched1 = new Schedule("daily", false) { Enabled = true, Mode = "daily", Daily = new ScheduleDaily(1) }; contactClone.schedule = new List <Schedule>() { sched1 }; contact1 = route4Me.UpdateAddressBookContact(contactClone, contact1, out string errorString); PrintExampleContact(contact1, 0, errorString); RemoveTestContacts(); }
/// <summary> /// Update route by sending a modified whole route object. /// </summary> public void UpdateWholeRoute() { var route4Me = new Route4MeManager(ActualApiKey); RunOptimizationSingleDriverRoute10Stops(); OptimizationsToRemove = new List <string>() { SD10Stops_optimization_problem_id }; string routeId = SD10Stops_route_id; var initialRoute = R4MeUtils.ObjectDeepClone <DataObjectRoute>(SD10Stops_route); #region // Notes, Custom Type Notes, Note File Uploading var customNotesResponse = route4Me.getAllCustomNoteTypes(out string errorString5); var allCustomNotes = customNotesResponse != null && customNotesResponse.GetType() == typeof(CustomNoteType[]) ? (CustomNoteType[])customNotesResponse : null; string tempFilePath = null; using (Stream stream = Assembly .GetExecutingAssembly() .GetManifestResourceStream("Route4MeSDKTest.Resources.test.png")) { var tempFiles = new TempFileCollection(); { tempFilePath = tempFiles.AddExtension("png"); Console.WriteLine(tempFilePath); using (Stream fileStream = File.OpenWrite(tempFilePath)) { stream.CopyTo(fileStream); } } } SD10Stops_route.Addresses[1].Notes = new AddressNote[] { new AddressNote() { NoteId = -1, RouteId = SD10Stops_route.RouteID, Latitude = SD10Stops_route.Addresses[1].Latitude, Longitude = SD10Stops_route.Addresses[1].Longitude, ActivityType = "dropoff", Contents = "C# SDK Test Content", CustomTypes = allCustomNotes.Length > 0 ? new AddressCustomNote[] { new AddressCustomNote() { NoteCustomTypeID = allCustomNotes[0].NoteCustomTypeID.ToString(), NoteCustomValue = allCustomNotes[0].NoteCustomTypeValues[0] } } : null, UploadUrl = tempFilePath } }; var updatedRoute0 = route4Me.UpdateRoute( SD10Stops_route, initialRoute, out string errorString0 ); if ((updatedRoute0?.Addresses[1]?.Notes.Length ?? 0) != 1) { Console.WriteLine("UpdateRouteTest failed: cannot create a note"); } if (allCustomNotes.Length > 0) { Assert.IsTrue(updatedRoute0.Addresses[1].Notes[0].CustomTypes.Length == 1, "UpdateRouteTest failed: cannot create a custom type note"); } Assert.IsTrue(updatedRoute0.Addresses[1].Notes[0].UploadId.Length == 32, "UpdateRouteTest failed: cannot create a custom type note"); #endregion SD10Stops_route.ApprovedForExecution = true; SD10Stops_route.Parameters.RouteName += " Edited"; SD10Stops_route.Parameters.Metric = Metric.Manhattan; SD10Stops_route.Addresses[1].AddressString += " Edited"; SD10Stops_route.Addresses[1].Group = "Example Group"; SD10Stops_route.Addresses[1].CustomerPo = "CPO 456789"; SD10Stops_route.Addresses[1].InvoiceNo = "INO 789654"; SD10Stops_route.Addresses[1].ReferenceNo = "RNO 313264"; SD10Stops_route.Addresses[1].OrderNo = "ONO 654878"; SD10Stops_route.Addresses[1].Notes = new AddressNote[] { new AddressNote() { RouteDestinationId = -1, RouteId = SD10Stops_route.RouteID, Latitude = SD10Stops_route.Addresses[1].Latitude, Longitude = SD10Stops_route.Addresses[1].Longitude, ActivityType = "dropoff", Contents = "C# SDK Test Content" } }; SD10Stops_route.Addresses[2].SequenceNo = 5; var addressID = SD10Stops_route.Addresses[2].RouteDestinationId; var dataObject = route4Me.UpdateRoute( SD10Stops_route, initialRoute, out string errorString ); Assert.IsTrue(dataObject.Addresses.Where(x => x.RouteDestinationId == addressID) .FirstOrDefault() .SequenceNo == 5, "UpdateWholeRouteTest failed."); Assert.IsTrue(SD10Stops_route.ApprovedForExecution, "UpdateRouteTest failed, ApprovedForExecution cannot set to true"); Assert.IsNotNull(dataObject, "UpdateRouteTest failed. " + errorString); Assert.IsTrue(dataObject.Parameters.RouteName.Contains("Edited"), "UpdateRouteTest failed, the route name not changed."); Assert.IsTrue(dataObject.Addresses[1].AddressString.Contains("Edited"), "UpdateRouteTest failed, second address name not changed."); Assert.IsTrue(dataObject.Addresses[1].Group == "Example Group", "UpdateWholeRouteTest failed."); Assert.IsTrue(dataObject.Addresses[1].CustomerPo == "CPO 456789", "UpdateWholeRouteTest failed."); Assert.IsTrue(dataObject.Addresses[1].InvoiceNo == "INO 789654", "UpdateWholeRouteTest failed."); Assert.IsTrue(dataObject.Addresses[1].ReferenceNo == "RNO 313264", "UpdateWholeRouteTest failed."); Assert.IsTrue(dataObject.Addresses[1].OrderNo == "ONO 654878", "UpdateWholeRouteTest failed."); initialRoute = R4MeUtils.ObjectDeepClone <DataObjectRoute>(SD10Stops_route); SD10Stops_route.ApprovedForExecution = false; SD10Stops_route.Addresses[1].Group = null; SD10Stops_route.Addresses[1].CustomerPo = null; SD10Stops_route.Addresses[1].InvoiceNo = null; SD10Stops_route.Addresses[1].ReferenceNo = null; SD10Stops_route.Addresses[1].OrderNo = null; dataObject = route4Me.UpdateRoute( SD10Stops_route, initialRoute, out errorString ); PrintExampleRouteResult(dataObject, errorString); RemoveTestOptimizations(); }