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; } } }
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); }
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); } }
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; } }