Beispiel #1
0
        public Job Clone(Job job, DateTime?dueDate, bool cloneRouteStops = true, string orderNumber = "",
                         bool copyJobPairId        = false, int?jobGroupIdOverride = null, JobTemplateType templateType = JobTemplateType.Unspecified,
                         bool copyDriverAssignment = true, bool copyPickNumber     = true, bool copyBookingNumber       = true, bool copyOrderNumber = true)
        {
            if (job == null)
            {
                return(null);
            }
            //job = GetByIdWithAll(job.Id);

            // create the new Job
            var clonedJob = new Job()
            {
                SubscriberId     = job.SubscriberId,
                DueDate          = dueDate,
                JobGroupId       = jobGroupIdOverride > 0 ? jobGroupIdOverride : job.JobGroupId,
                ChassisId        = job.ChassisId,
                ChassisOwnerId   = job.ChassisOwnerId,
                ContainerId      = job.ContainerId,
                ContainerOwnerId = job.ContainerOwnerId,
                IsTransmitted    = false,
                JobStatus        = JobStatus.Unassigned,
            };

            if (clonedJob.JobGroupId.HasValue && clonedJob.JobGroupId > 0 && (clonedJob.JobGroup == null || clonedJob.JobGroup.Id != clonedJob.JobGroupId))
            {
                clonedJob.JobGroup = _jobGroupService.GetById(clonedJob.JobGroupId.Value);
            }

            if (copyDriverAssignment)
            {
                clonedJob.AssignedDriverId = job.AssignedDriverId;
            }

            if (copyPickNumber)
            {
                clonedJob.PickupNumber = job.PickupNumber;
            }

            if (copyBookingNumber)
            {
                clonedJob.BookingNumber = job.BookingNumber;
            }

            if (copyOrderNumber)
            {
                clonedJob.OrderNumber = job.OrderNumber;
            }

            clonedJob.JobTemplateType = templateType != JobTemplateType.Unspecified ? templateType : job.JobTemplateType;

            if (clonedJob.JobTemplateType.ToString().ToLower().StartsWith("import"))
            {
                clonedJob.IsPreparatory = true;
            }

            if (jobGroupIdOverride.HasValue)
            {
                clonedJob.JobGroupId = jobGroupIdOverride;
            }

            if (copyJobPairId)
            {
                clonedJob.JobPairId = job.JobPairId;
            }

            if (orderNumber.Length > 0)
            {
                clonedJob.OrderNumber = orderNumber;
            }

            Insert(clonedJob);
            if (clonedJob.Id > 0)
            {
                clonedJob = GetById(clonedJob.Id);
            }

            var clonedRoutes = new List <RouteStop>();

            if (cloneRouteStops)
            {
                int count = 0;
                foreach (var route in job.RouteStops.OrderBy(rs => rs.SortOrder))
                {
                    var minutes = 30;
                    if (route.StopDelay.HasValue && route.StopDelay.Value > 0)
                    {
                        minutes = (int)route.StopDelay.Value;
                    }

                    clonedRoutes.Add(
                        CreateJobRouteStop(clonedJob, count++, route.LocationId, minutes, route.StopActionId, route.WindowStart, route.WindowEnd, false));
                }

                for (int i = 0; i < clonedRoutes.Count; i++)
                {
                    var route = clonedRoutes[i];
                    clonedJob.RouteStops.Add(route);
                    _routeStopService.Insert(route);    // TODO batch save
                }
            }

            Update(clonedJob);
            clonedJob = GetById(clonedJob.Id);

            return(clonedJob);
        }