Example #1
0
        /// <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();
        }