Beispiel #1
0
 public static WorkOrderLabor ToEntity(this WorkOrderLaborModel model, WorkOrderLabor destination)
 {
     return(model.MapTo(destination));
 }
        public virtual WorkOrder CreateNextWorkOrder(PreventiveMaintenance pm,
                                                     DateTime startDateTime,
                                                     DateTime endDateTime)
        {
            DateTime prevDateTime = DateTime.MinValue;

            // if there's already an active WO for this PM
            // then return
            WorkOrder existingWork = _workOrderRepository.GetAll().
                                     Where(w => w.PreventiveMaintenanceId == pm.Id &&
                                           w.Assignment.Name != WorkflowStatus.Closed &&
                                           w.Assignment.Name != WorkflowStatus.Cancelled).FirstOrDefault();

            if (existingWork != null)
            {
                return(null);
            }
            // copy work parameters
            WorkOrder workOrder = new WorkOrder();

            workOrder.CreatedUserId         = this._workContext.CurrentUser.Id;
            workOrder.RequestedDateTime     = DateTime.UtcNow;
            workOrder.ExpectedStartDateTime = startDateTime;
            workOrder.DueDateTime           = endDateTime;
            workOrder.LocationId            = pm.LocationId;
            workOrder.AssetId                 = pm.AssetId;
            workOrder.SiteId                  = pm.SiteId;
            workOrder.WorkType                = pm.WorkType;
            workOrder.WorkCategoryId          = pm.WorkCategoryId;
            workOrder.FailureGroupId          = pm.FailureGroupId;
            workOrder.Description             = workOrder.Name = pm.Description;
            workOrder.PreventiveMaintenanceId = pm.Id;
            workOrder.Priority                = pm.Priority;
            workOrder.ContractId              = pm.ContractId;
            workOrder.IsNew = false;
            foreach (var pmLabor in pm.PMLabors)
            {
                var workOrderLabor = new WorkOrderLabor();
                workOrderLabor.TeamId       = pmLabor.TeamId;
                workOrderLabor.CraftId      = pmLabor.CraftId;
                workOrderLabor.TechnicianId = pmLabor.TechnicianId;
                workOrderLabor.PlanHours    = pmLabor.PlanHours;
                workOrderLabor.StandardRate = pmLabor.StandardRate;
                workOrderLabor.OTRate       = pmLabor.OTRate;
                workOrderLabor.PlanTotal    = pmLabor.PlanTotal;
                workOrder.WorkOrderLabors.Add(workOrderLabor);
            }
            foreach (var pmTask in pm.PMTasks)
            {
                var workOrderTask = new WorkOrderTask();
                workOrder.TaskGroupId        = pm.TaskGroupId;
                workOrderTask.Sequence       = pmTask.Sequence;
                workOrderTask.Description    = pmTask.Description;
                workOrderTask.AssignedUserId = pmTask.AssignedUserId;
                workOrder.WorkOrderTasks.Add(workOrderTask);
            }

            foreach (var pmItem in pm.PMItems)
            {
                var workOrderItem = new WorkOrderItem();
                workOrderItem.StoreId       = pmItem.StoreId;
                workOrderItem.ItemId        = pmItem.ItemId;
                workOrderItem.UnitPrice     = pmItem.UnitPrice;
                workOrderItem.PlanQuantity  = pmItem.PlanQuantity;
                workOrderItem.PlanTotal     = pmItem.PlanTotal;
                workOrderItem.PlanToolHours = pmItem.PlanToolHours;
                workOrderItem.ToolRate      = pmItem.ToolRate;
                workOrder.WorkOrderItems.Add(workOrderItem);
            }

            foreach (var pmServiceItem in pm.PMServiceItems)
            {
                var workOrderServiceItem = new WorkOrderServiceItem();
                workOrderServiceItem.ServiceItemId = pmServiceItem.ServiceItemId;
                workOrderServiceItem.Description   = pmServiceItem.Description;
                workOrderServiceItem.PlanUnitPrice = pmServiceItem.PlanUnitPrice;
                workOrderServiceItem.PlanQuantity  = pmServiceItem.PlanQuantity;
                workOrderServiceItem.PlanTotal     = pmServiceItem.PlanTotal;
                workOrder.WorkOrderServiceItems.Add(workOrderServiceItem);
            }

            foreach (var pmMiscCost in pm.PMMiscCosts)
            {
                var workOrderMiscCost = new WorkOrderMiscCost();
                workOrderMiscCost.Sequence      = pmMiscCost.Sequence;
                workOrderMiscCost.Description   = pmMiscCost.Description;
                workOrderMiscCost.PlanQuantity  = pmMiscCost.PlanQuantity;
                workOrderMiscCost.PlanUnitPrice = pmMiscCost.PlanUnitPrice;
                workOrderMiscCost.PlanTotal     = pmMiscCost.PlanTotal;
                workOrder.WorkOrderMiscCosts.Add(workOrderMiscCost);
            }

            if (!pm.FirstWorkExpectedStartDateTime.HasValue || workOrder.ExpectedStartDateTime.Value <= pm.EndDateTime.Value)
            {
                string number = _autoNumberService.GenerateNextAutoNumber(DateTime.Now, workOrder);
                workOrder.Number = number;
                _workOrderRepository.InsertAndCommit(workOrder);

                // copy attachments
                CopyAttachments(workOrder.PreventiveMaintenance.PMTasks.ToList(), workOrder.WorkOrderTasks.ToList());
                this._dbContext.SaveChanges();

                // start WO workflow
                var workflowInstanceId = WorkflowServiceClient.StartWorkflow(workOrder.Id, EntityType.WorkOrder, 0, this._workContext.CurrentUser.Id);
                this._dbContext.Detach(workOrder);
                workOrder = _workOrderRepository.GetById(workOrder.Id);
                this._dbContext.Detach(workOrder.Assignment);
                var assignment = _assignmentRepository.GetById(workOrder.AssignmentId);

                // trigger action
                WorkflowServiceClient.TriggerWorkflowAction(workOrder.Id, EntityType.WorkOrder, assignment.WorkflowDefinitionId, assignment.WorkflowInstanceId,
                                                            assignment.WorkflowVersion.Value, WorkflowActionName.Submit, "PreventiveMaintenance", this._workContext.CurrentUser.Id);
            }
            return(workOrder);
        }
Beispiel #3
0
 public static WorkOrderLaborModel ToModel(this WorkOrderLabor entity)
 {
     return(entity.MapTo <WorkOrderLabor, WorkOrderLaborModel>());
 }
        public virtual WorkOrder CreateNextWorkOrderForPM(WorkOrder workOrder)
        {
            WorkOrder newWork = null;
            var       pm      = workOrder.PreventiveMaintenance;

            // only time-based
            if (pm != null && pm.FirstWorkExpectedStartDateTime.HasValue)
            {
                DateTime startDateTime = workOrder.ExpectedStartDateTime.Value;
                DateTime endDateTime   = workOrder.DueDateTime.Value;

                var isValidDate = _calendarService.DetermineNextDate(workOrder.PreventiveMaintenance, ref startDateTime, ref endDateTime);

                if (isValidDate && startDateTime <= workOrder.PreventiveMaintenance.EndDateTime.Value)
                {
                    // create a new work order
                    newWork = new WorkOrder();
                    newWork.CreatedUserId         = this._workContext.CurrentUser.Id;
                    newWork.RequestedDateTime     = DateTime.UtcNow;
                    newWork.ExpectedStartDateTime = startDateTime;
                    newWork.DueDateTime           = endDateTime;
                    newWork.LocationId            = workOrder.PreventiveMaintenance.LocationId;
                    newWork.AssetId                 = workOrder.PreventiveMaintenance.AssetId;
                    newWork.SiteId                  = workOrder.SiteId;
                    newWork.WorkType                = workOrder.PreventiveMaintenance.WorkType;
                    newWork.WorkCategoryId          = workOrder.PreventiveMaintenance.WorkCategoryId;
                    newWork.FailureGroupId          = workOrder.PreventiveMaintenance.FailureGroupId;
                    newWork.Description             = newWork.Name = workOrder.PreventiveMaintenance.Description;
                    newWork.Priority                = workOrder.PreventiveMaintenance.Priority;
                    newWork.PreventiveMaintenanceId = workOrder.PreventiveMaintenanceId;
                    newWork.ContractId              = pm.ContractId;
                    newWork.IsNew = false;

                    foreach (var pmLabor in workOrder.PreventiveMaintenance.PMLabors)
                    {
                        var workOrderLabor = new WorkOrderLabor();
                        workOrderLabor.TeamId       = pmLabor.TeamId;
                        workOrderLabor.CraftId      = pmLabor.CraftId;
                        workOrderLabor.TechnicianId = pmLabor.TechnicianId;
                        workOrderLabor.PlanHours    = pmLabor.PlanHours;
                        workOrderLabor.StandardRate = pmLabor.StandardRate;
                        workOrderLabor.OTRate       = pmLabor.OTRate;
                        workOrderLabor.PlanTotal    = pmLabor.PlanTotal;
                        newWork.WorkOrderLabors.Add(workOrderLabor);
                    }

                    foreach (var pmTask in workOrder.PreventiveMaintenance.PMTasks)
                    {
                        var workOrderTask = new WorkOrderTask();
                        workOrder.TaskGroupId        = workOrder.PreventiveMaintenance.TaskGroupId;
                        workOrderTask.Sequence       = pmTask.Sequence;
                        workOrderTask.Description    = pmTask.Description;
                        workOrderTask.AssignedUserId = pmTask.AssignedUserId;
                        newWork.WorkOrderTasks.Add(workOrderTask);
                    }

                    foreach (var pmItem in workOrder.PreventiveMaintenance.PMItems)
                    {
                        var workOrderItem = new WorkOrderItem();
                        workOrderItem.StoreId       = pmItem.StoreId;
                        workOrderItem.ItemId        = pmItem.ItemId;
                        workOrderItem.UnitPrice     = pmItem.UnitPrice;
                        workOrderItem.PlanQuantity  = pmItem.PlanQuantity;
                        workOrderItem.PlanTotal     = pmItem.PlanTotal;
                        workOrderItem.PlanToolHours = pmItem.PlanToolHours;
                        workOrderItem.ToolRate      = pmItem.ToolRate;
                        newWork.WorkOrderItems.Add(workOrderItem);
                    }

                    foreach (var pmServiceItem in workOrder.PreventiveMaintenance.PMServiceItems)
                    {
                        var workOrderServiceItem = new WorkOrderServiceItem();
                        workOrderServiceItem.ServiceItemId = pmServiceItem.ServiceItemId;
                        workOrderServiceItem.Description   = pmServiceItem.Description;
                        workOrderServiceItem.PlanUnitPrice = pmServiceItem.PlanUnitPrice;
                        workOrderServiceItem.PlanQuantity  = pmServiceItem.PlanQuantity;
                        workOrderServiceItem.PlanTotal     = pmServiceItem.PlanTotal;
                        newWork.WorkOrderServiceItems.Add(workOrderServiceItem);
                    }

                    foreach (var pmMiscCost in workOrder.PreventiveMaintenance.PMMiscCosts)
                    {
                        var workOrderMiscCost = new WorkOrderMiscCost();
                        workOrderMiscCost.Sequence      = pmMiscCost.Sequence;
                        workOrderMiscCost.Description   = pmMiscCost.Description;
                        workOrderMiscCost.PlanQuantity  = pmMiscCost.PlanQuantity;
                        workOrderMiscCost.PlanUnitPrice = pmMiscCost.PlanUnitPrice;
                        workOrderMiscCost.PlanTotal     = pmMiscCost.PlanTotal;
                        newWork.WorkOrderMiscCosts.Add(workOrderMiscCost);
                    }

                    string number = _autoNumberService.GenerateNextAutoNumber(DateTime.Now, newWork);
                    newWork.Number = number;
                    _workOrderRepository.InsertAndCommit(newWork);

                    // copy attachments
                    _pmService.CopyAttachments(workOrder.PreventiveMaintenance.PMTasks.ToList(), newWork.WorkOrderTasks.ToList());
                    this._dbContext.SaveChanges();

                    // Start workflow
                    var workflowInstanceId = WorkflowServiceClient.StartWorkflow(newWork.Id, EntityType.WorkOrder, 0, this._workContext.CurrentUser.Id);
                    //Nguyen Le: reload work because there's data changes from workflow, need to detach first because of EF caching
                    this._dbContext.Detach(newWork);
                    newWork = _workOrderRepository.GetById(newWork.Id);

                    this._dbContext.Detach(newWork.Assignment);
                    var assignment = _assignmentRepository.GetById(newWork.AssignmentId);
                    WorkflowServiceClient.TriggerWorkflowAction(newWork.Id, EntityType.WorkOrder, assignment.WorkflowDefinitionId, assignment.WorkflowInstanceId,
                                                                assignment.WorkflowVersion.Value, WorkflowActionName.Submit, "WorkOrder", this._workContext.CurrentUser.Id);
                }
                else
                {
                    _pmService.ClosePM(pm);
                }
            }
            return(newWork);
        }