Beispiel #1
0
        private void UpdateJobForce(OrderModel order)
        {
            // Checking whether the new orders are okay or not
            job.Order.Description = order.Description;
            (job.Order as DeliveryOrder).NoteToDeliveryMan = (order as DeliveryOrder).NoteToDeliveryMan;
            (job.Order as DeliveryOrder).RequiredChangeFor = (order as DeliveryOrder).RequiredChangeFor;
            job.Order.ETA        = order.ETA;
            job.Order.ETAMinutes = order.ETAMinutes;

            if (order.Type == OrderTypes.ClassifiedDelivery)
            {
                (job.Order as ClassifiedDeliveryOrder).BuyerInfo  = (order as ClassifiedDeliveryOrder).BuyerInfo;
                (job.Order as ClassifiedDeliveryOrder).SellerInfo = (order as ClassifiedDeliveryOrder).SellerInfo;
            }

            CompareLogic compareLogic = new CompareLogic();

            compareLogic.Config.ComparePrivateFields = true;

            job.Order.From = order.From;
            job.Order.To   = order.To;

            job.Order.OrderCart = order.OrderCart;

            var orderCartComparisonResult = compareLogic.Compare(job.Order.OrderCart, order.OrderCart);

            // TODO: The reason Im keeping all the order comparison result is to invoke a job activity notification from it

            // INFO: Yes, this is stupid. Fetching all the Tasks and updating them
            foreach (var task in job.Tasks)
            {
                switch (task.Type)
                {
                case JobTaskTypes.FETCH_DELIVERYMAN:
                    FetchDeliveryManTask fetchDeliveryManTask = task as FetchDeliveryManTask;
                    fetchDeliveryManTask.From = order.From;
                    fetchDeliveryManTask.To   = order.To;
                    break;

                case JobTaskTypes.PACKAGE_PICKUP:
                    PackagePickUpTask pickUpTask = task as PackagePickUpTask;
                    pickUpTask.PickupLocation = order.From;
                    break;

                case JobTaskTypes.SECURE_DELIVERY:
                case JobTaskTypes.DELIVERY:
                    DeliveryTask deliveryTask = task as DeliveryTask;
                    deliveryTask.From = order.From;
                    deliveryTask.To   = order.To;
                    break;
                }
            }
        }
Beispiel #2
0
        public override void BuildJob()
        {
            // FIXME: Looks like I can definitely refactor this and work this out

            job.Tasks = new List<JobTask>();

            // INFO: Fetching to 
            FetchDeliveryManTask fetchDeliveryManTask = new FetchDeliveryManTask(order.From, order.To);
            job.Tasks.Add(fetchDeliveryManTask);
            fetchDeliveryManTask.AssetUpdated += JobTask_AssetUpdated;

            PackagePickUpTask pickUpTask = new PackagePickUpTask(order.From);
            pickUpTask.SetPredecessor(fetchDeliveryManTask);
            job.Tasks.Add(pickUpTask);
            pickUpTask.AssetUpdated += JobTask_AssetUpdated;

            DeliveryTask deliveryTask = new DeliveryTask(order.From, order.To);
            deliveryTask.SetPredecessor(pickUpTask);
            job.Tasks.Add(deliveryTask);
            deliveryTask.AssetUpdated += JobTask_AssetUpdated;

            if (order.Type == OrderTypes.ClassifiedDelivery && order.Variant == DeliveryOrderVariants.Default)
            {
                SecureDeliveryTask secureDeliveryTask = new SecureDeliveryTask(order.To, order.From);
                secureDeliveryTask.SetPredecessor(deliveryTask);
                job.Tasks.Add(secureDeliveryTask);
                secureDeliveryTask.AssetUpdated += JobTask_AssetUpdated;

                job.TerminalTask = secureDeliveryTask;
            }
            else if (
                (order.Type == OrderTypes.ClassifiedDelivery && order.Variant == DeliveryOrderVariants.EnterpriseDelivery)
                || order.Type == OrderTypes.Delivery)
            {
                job.TerminalTask = deliveryTask;
            }

            job.PaymentMethod = this.paymentMethod.Key;
            job.PaymentStatus = PaymentStatus.Pending;

            job.EnsureJobTaskChangeEventsRegistered();

            job.EnsureTaskAssetEventsAssigned();

            if (order.JobTaskETAPreference?.Count > 0)
                SetupJobTaskETAs(order);
        }
Beispiel #3
0
        public override void BuildJob()
        {
            // FIXME: Looks like I can definitely refactor this and work this out

            job.Tasks = new List <JobTask>();

            // INFO: Fetching to
            FetchDeliveryManTask fetchDeliveryManTask = new FetchDeliveryManTask(order.From, order.To);

            job.Tasks.Add(fetchDeliveryManTask);

            PackagePickUpTask pickUpTask = new PackagePickUpTask(order.From);

            pickUpTask.SetPredecessor(fetchDeliveryManTask);
            job.Tasks.Add(pickUpTask);

            DeliveryTask deliveryTask = new DeliveryTask(order.From, order.To);

            deliveryTask.SetPredecessor(pickUpTask);
            job.Tasks.Add(deliveryTask);

            if (order.Type == OrderTypes.ClassifiedDelivery && order.Variant == DeliveryOrderVariants.Default)
            {
                SecureDeliveryTask secureDeliveryTask = new SecureDeliveryTask(order.To, order.From);
                secureDeliveryTask.SetPredecessor(deliveryTask);
                job.Tasks.Add(secureDeliveryTask);

                job.TerminalTask = secureDeliveryTask;
            }
            else if (
                (order.Type == OrderTypes.ClassifiedDelivery && order.Variant == DeliveryOrderVariants.EnterpriseDelivery) ||
                order.Type == OrderTypes.Delivery)
            {
                job.TerminalTask = deliveryTask;
            }

            job.PaymentMethod = this.paymentMethod.Key;
            job.PaymentStatus = PaymentStatus.Pending;

            job.EnsureJobTaskChangeEventsRegistered();

            if (order.JobTaskETAPreference?.Count > 0)
            {
                SetupJobTaskETAs(order);
            }
        }
Beispiel #4
0
        private void UpdateJobSmart(OrderModel order)
        {
            if (job.State >= JobState.COMPLETED)
            {
                throw new NotSupportedException("Updating order of a completed/cancelled job is not supported");
            }

            // Checking whether the new orders are okay or not
            job.Order.Description = order.Description;
            (job.Order as DeliveryOrder).NoteToDeliveryMan = (order as DeliveryOrder).NoteToDeliveryMan;
            (job.Order as DeliveryOrder).RequiredChangeFor = (order as DeliveryOrder).RequiredChangeFor;
            job.Order.ETA        = order.ETA;
            job.Order.ETAMinutes = order.ETAMinutes;

            if (order.Type == OrderTypes.ClassifiedDelivery)
            {
                (job.Order as ClassifiedDeliveryOrder).BuyerInfo  = (order as ClassifiedDeliveryOrder).BuyerInfo;
                (job.Order as ClassifiedDeliveryOrder).SellerInfo = (order as ClassifiedDeliveryOrder).SellerInfo;
            }

            CompareLogic compareLogic = new CompareLogic();

            compareLogic.Config.ComparePrivateFields = true;

            var orderCartComparisonResult = compareLogic.Compare(job.Order.OrderCart, order.OrderCart);

            // Fetching the job task that is currently in progress
            var    jobTaskCurrentlyInProgress = job.Tasks.FirstOrDefault(x => x.State == JobTaskState.IN_PROGRESS);
            string firstJobTaskTypeToUpdate   = null;

            // Usually this jobTask depicts the state of the JOB itself
            // And this definitely needs refactoring mama
            if (jobTaskCurrentlyInProgress == null && job.State > JobState.ENQUEUED)
            {
                throw new NotSupportedException("No job task is currently in progress, this job is probably close to finished");
            }
            else if (jobTaskCurrentlyInProgress == null && job.State == JobState.ENQUEUED)
            {
                firstJobTaskTypeToUpdate = JobTaskTypes.FETCH_DELIVERYMAN;
            }
            else if (jobTaskCurrentlyInProgress != null)
            {
                firstJobTaskTypeToUpdate = jobTaskCurrentlyInProgress.Type;
            }

            if (firstJobTaskTypeToUpdate == JobTaskTypes.SECURE_DELIVERY)
            {
                throw new NotSupportedException("Cant update order when secure delivery is in progress");
            }

            switch (firstJobTaskTypeToUpdate)
            {
            case JobTaskTypes.FETCH_DELIVERYMAN:
                FetchDeliveryManTask fetchDeliveryManTask = job.Tasks.First() as FetchDeliveryManTask;
                fetchDeliveryManTask.From  = order.From;
                fetchDeliveryManTask.To    = order.To;
                fetchDeliveryManTask.State = JobTaskState.PENDING;
                goto case JobTaskTypes.PACKAGE_PICKUP;

            case JobTaskTypes.PACKAGE_PICKUP:
                PackagePickUpTask pickUpTask = job.Tasks[1] as PackagePickUpTask;
                pickUpTask.PickupLocation = order.From;
                pickUpTask.State          = JobTaskState.PENDING;

                if (!orderCartComparisonResult.AreEqual)
                {
                    job.Order.OrderCart = order.OrderCart;
                }
                goto case JobTaskTypes.DELIVERY;

            case JobTaskTypes.SECURE_DELIVERY:
            case JobTaskTypes.DELIVERY:
                DeliveryTask deliveryTask = job.Tasks[2] as DeliveryTask;
                deliveryTask.From  = order.From;
                deliveryTask.To    = order.To;
                deliveryTask.State = JobTaskState.PENDING;

                job.Order.From = order.From;
                job.Order.To   = order.To;
                break;
            }
        }