public void ClosePM(PreventiveMaintenance pm)
        {
            var closedStatus = _valueItemRepository.GetAll().Where(c => c.ValueItemCategory.Name == "PM Status" && c.Name == "Closed").FirstOrDefault();

            pm.PMStatusId = closedStatus.Id;
            _preventiveMaintenanceRepository.UpdateAndCommit(pm);
        }
Esempio n. 2
0
        public ValueDataResponse <PreventiveMaintenance> InsertPreventiveMaintenance(UpsertPreventiveMaintenance PmOrders)
        {
            ValueDataResponse <PreventiveMaintenance> response = new ValueDataResponse <PreventiveMaintenance>();

            try
            {
                PreventiveMaintenance PM = _mapper.Map <PreventiveMaintenance>(PmOrders);
                var result = _appContext.PreventiveMaintenances.Add(PM);
                _appContext.SaveChanges();

                foreach (var sId in PmOrders.pmAssets)
                {
                    _appContext.PMAssetXrefs.Add(new PMAssetXref {
                        AssetId = sId.AssetId, PreventiveMaintenanceId = PM.Id, DaysApplicable = sId.DaysApplicable, AstFixedDate = sId.AstFixedDate
                    });
                }
                _appContext.SaveChanges();

                if (PmOrders != null)
                {
                    response.Result          = PM;
                    response.IsSuccess       = true;
                    response.AffectedRecords = 1;
                    response.EndUserMessage  = "Preventive Maintenance Added Successfully";
                }
                else
                {
                    response.IsSuccess       = true;
                    response.AffectedRecords = 0;
                    response.EndUserMessage  = "Preventive Maintenance Added Failed";
                }
            }
            catch (Exception ex)
            {
                response.IsSuccess       = false;
                response.AffectedRecords = 0;
                response.EndUserMessage  = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                response.Exception       = ex;
            }
            return(response);
        }
        public virtual void GeneratePMTasks(PreventiveMaintenance pm, long?assetId)
        {
            if (assetId == null)
            {
                return;
            }
            if (pm.IsNew == true)
            {
                var assetType = _assetRepository.GetById(assetId).AssetType.Name;
                var taskGroup = _taskGroupRepository.GetAll()
                                .Where(t => t.AssetTypes.Contains(assetType))
                                .FirstOrDefault();
                if (taskGroup != null)
                {
                    pm.TaskGroupId = taskGroup.Id;
                    var tasks = taskGroup.Tasks.ToList();
                    foreach (var task in tasks)
                    {
                        var pmTask = new PMTask
                        {
                            Sequence    = task.Sequence,
                            Description = task.Description
                        };
                        pm.PMTasks.Add(pmTask);
                    }
                    _preventiveMaintenanceRepository.Update(pm);
                    this._dbContext.SaveChanges();

                    //copy attachments, need to copy after saving PMTasks
                    //so we can have toEntityId
                    for (int i = 0; i < tasks.Count; i++)
                    {
                        _attachmentService.CopyAttachments(tasks[i].Id, EntityType.Task,
                                                           pm.PMTasks.ToList()[i].Id, EntityType.PMTask);
                    }
                }
            }
        }
Esempio n. 4
0
        public ValueDataResponse <PreventiveMaintenance> UpdatePreventiveMaintenance(UpsertPreventiveMaintenance PmOrder)
        {
            ValueDataResponse <PreventiveMaintenance> response = new ValueDataResponse <PreventiveMaintenance>();

            try
            {
                PreventiveMaintenance PM = _mapper.Map <PreventiveMaintenance>(PmOrder);
                var result = _appContext.PreventiveMaintenances.Where(x => x.Id == PmOrder.Id).FirstOrDefault();

                var List = _appContext.PMAssetXrefs.Where(x => x.PreventiveMaintenanceId == result.Id).ToList();
                _appContext.PMAssetXrefs.RemoveRange(List);
                _appContext.SaveChanges();
                foreach (var sId in PmOrder.pmAssets)
                {
                    _appContext.PMAssetXrefs.Add(new PMAssetXref {
                        AssetId = sId.AssetId, PreventiveMaintenanceId = PM.Id, DaysApplicable = sId.DaysApplicable, AstFixedDate = sId.AstFixedDate
                    });
                }
                _appContext.SaveChanges();

                if (result != null)
                {
                    result.PreventiveRefId = PmOrder.PreventiveRefId;
                    result.StartDate       = PmOrder.StartDate;
                    result.JobPlanId       = PmOrder.JobPlanId;
                    result.Priority        = PmOrder.Priority;
                    result.DurationinHours = PmOrder.DurationInHours;

                    result.StatusTypeId      = PmOrder.StatusTypeId;
                    result.WorkTechnicianId  = PmOrder.WorkTechnicianId;
                    result.TypeOfMaintenance = PmOrder.TypeOfMaintenance;
                    result.Details           = PmOrder.Details;
                    result.CreatedBy         = PmOrder.CreatedBy;
                    result.CreatedDate       = PmOrder.CreatedDate;
                    result.UpdatedBy         = PmOrder.UpdatedBy;
                    result.UpdatedDate       = PmOrder.UpdatedDate;
                    result.IsActive          = PmOrder.IsActive;
                }
                _appContext.SaveChanges();

                if (PM != null)
                {
                    response.Result          = PM;
                    response.IsSuccess       = true;
                    response.AffectedRecords = 1;
                    response.EndUserMessage  = "Preventive Maintenance Updated Successfully";
                }
                else
                {
                    response.IsSuccess       = true;
                    response.AffectedRecords = 0;
                    response.EndUserMessage  = "Preventive Maintenance Updation Failed";
                }
            }
            catch (Exception ex)
            {
                response.IsSuccess       = false;
                response.AffectedRecords = 0;
                response.EndUserMessage  = ex.InnerException == null ? ex.Message : ex.InnerException.Message;
                response.Exception       = ex;
            }
            return(response);
        }
        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);
        }
Esempio n. 6
0
        public JsonResult SavePM(PreventiveMaintenance PreventiveMaintenance, List <int> UserIds)
        {
            var result = new { Success = "true", Message = "Success" };

            try
            {
                PreventiveMaintenance PMobj = new Data.Models.PreventiveMaintenance();

                if (PreventiveMaintenance.Id == 0)
                {
                    if (PreventiveMaintenance.ScheduleStartDate == null)
                    {
                        result = new { Success = "false", Message = "Schedule start date is required!" };
                        return(Json(result, JsonRequestBehavior.AllowGet));
                    }

                    if (PreventiveMaintenance.ScheduleStartDate.Value.Date < DateTime.Now.Date)
                    {
                        result = new { Success = "false", Message = "Schedule start date can not be past date!" };
                        return(Json(result, JsonRequestBehavior.AllowGet));
                    }

                    //DateTime nextReviewDate = DateTime.UtcNow;
                    //if (PreventiveMaintenance.ScheduleType == 1)
                    //{
                    //    nextReviewDate = DateTime.UtcNow.AddDays(PreventiveMaintenance.Interval);
                    //}
                    //else if (PreventiveMaintenance.ScheduleType == 2)
                    //{
                    //    nextReviewDate = DateTime.UtcNow.AddDays(7 * (PreventiveMaintenance.Interval));
                    //}
                    //else if (PreventiveMaintenance.ScheduleType == 3)
                    //{
                    //    nextReviewDate = DateTime.UtcNow.AddMonths(PreventiveMaintenance.Interval);
                    //}
                    //else if (PreventiveMaintenance.ScheduleType == 4)
                    //{
                    //    nextReviewDate = DateTime.UtcNow.AddYears(PreventiveMaintenance.Interval);
                    //}
                    PreventiveMaintenance.CreatedBy = HttpContext.User.Identity.GetUserId <int>();
                    PreventiveMaintenance.CreatedOn = DateTime.UtcNow;
                    //PreventiveMaintenance.UpdatedBy = HttpContext.User.Identity.GetUserId<int>();
                    //PreventiveMaintenance.UpdatedOn= DateTime.UtcNow;
                    PreventiveMaintenance.NextReviewDate = PreventiveMaintenance.ScheduleStartDate.Value.Date; //nextReviewDate.Date;
                    PreventiveMaintenance.IsDeleted      = false;
                    PreventiveMaintenance.Id             = this._pmServices.Add(PreventiveMaintenance);
                }
                else
                {
                    //PreventiveMaintenance.CreatedBy = HttpContext.User.Identity.GetUserId<int>();
                    //PreventiveMaintenance.CreatedOn = DateTime.Now;
                    PreventiveMaintenance.UpdatedBy = HttpContext.User.Identity.GetUserId <int>();
                    PreventiveMaintenance.UpdatedOn = DateTime.UtcNow;
                    this._pmServices.Update(PreventiveMaintenance);
                }

                this._uaServices.DeleteUA(PreventiveMaintenance.Id, UserIds);

                foreach (int id in UserIds)
                {
                    this._uaServices.Add(new UserAssignment
                    {
                        PreventiveMaintenanceId = PreventiveMaintenance.Id,
                        UserId = id
                    });
                }
            }
            catch (Exception ex)
            {
                string exceptionMsg = base.ProcessException(ex);
                result = new { Success = "false", Message = exceptionMsg };
            }

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
Esempio n. 7
0
        public bool DetermineNextDate(PreventiveMaintenance pm, ref DateTime start, ref DateTime end)
        {
            if (pm.FrequencyType == (int?)FrequencyType.Daily)
            {
                // daily
                start = start.Add(new TimeSpan(pm.FrequencyCount.Value, 0, 0, 0));
                end   = end.Add(new TimeSpan(pm.FrequencyCount.Value, 0, 0, 0));
                return(true);
            }
            else if (pm.FrequencyType == (int?)FrequencyType.Weekly)
            {
                // based on specific days of the week
                //
                int[] dayOfWeekSelected = new int[] {
                    pm.Sunday == true ? 1 : 0,
                    pm.Monday == true ? 1 : 0,
                    pm.Tuesday == true ? 1 : 0,
                    pm.Wednesday == true ? 1 : 0,
                    pm.Thursday == true ? 1 : 0,
                    pm.Friday == true ? 1 : 0,
                    pm.Saturday == true ? 1 : 0
                };

                DateTime tempStart = start;
                DateTime tempEnd   = end;

                for (int i = 0; i < 7; i++)
                {
                    tempStart = tempStart.Add(new TimeSpan(1, 0, 0, 0));
                    tempEnd   = tempEnd.Add(new TimeSpan(1, 0, 0, 0));
                    //Convert tempStart and tempEnd from UTC to user time
                    var tempStartUserTime = _dateTimeHelper.ConvertToUserTime(tempStart, DateTimeKind.Utc);
                    var tempEndUserTime   = _dateTimeHelper.ConvertToUserTime(tempEnd, DateTimeKind.Utc);
                    if (dayOfWeekSelected[(int)tempStartUserTime.DayOfWeek] == 1)
                    {
                        start = tempStart;
                        end   = tempEnd;
                        return(true);
                    }
                    if (tempStartUserTime.DayOfWeek == DayOfWeek.Saturday)
                    {
                        tempStart = tempStart.Add(new TimeSpan(7 * (pm.FrequencyCount.Value - 1), 0, 0, 0));
                        tempEnd   = tempEnd.Add(new TimeSpan(7 * (pm.FrequencyCount.Value - 1), 0, 0, 0));
                    }
                }
                return(false);
            }
            else if (pm.FrequencyType == (int?)FrequencyType.Monthly)
            {
                // based on specific days of the week
                //
                int[] dayOfMonthSelected = new int[] {
                    pm.Day1 == true ? 1 : 0,
                    pm.Day2 == true ? 1 : 0,
                    pm.Day3 == true ? 1 : 0,
                    pm.Day4 == true ? 1 : 0,
                    pm.Day5 == true ? 1 : 0,
                    pm.Day6 == true ? 1 : 0,
                    pm.Day7 == true ? 1 : 0,
                    pm.Day8 == true ? 1 : 0,
                    pm.Day9 == true ? 1 : 0,
                    pm.Day10 == true ? 1 : 0,
                    pm.Day11 == true ? 1 : 0,
                    pm.Day12 == true ? 1 : 0,
                    pm.Day13 == true ? 1 : 0,
                    pm.Day14 == true ? 1 : 0,
                    pm.Day15 == true ? 1 : 0,
                    pm.Day16 == true ? 1 : 0,
                    pm.Day17 == true ? 1 : 0,
                    pm.Day18 == true ? 1 : 0,
                    pm.Day19 == true ? 1 : 0,
                    pm.Day20 == true ? 1 : 0,
                    pm.Day21 == true ? 1 : 0,
                    pm.Day22 == true ? 1 : 0,
                    pm.Day23 == true ? 1 : 0,
                    pm.Day24 == true ? 1 : 0,
                    pm.Day25 == true ? 1 : 0,
                    pm.Day26 == true ? 1 : 0,
                    pm.Day27 == true ? 1 : 0,
                    pm.Day28 == true ? 1 : 0,
                    pm.Day29 == true ? 1 : 0,
                    pm.Day30 == true ? 1 : 0,
                    pm.Day31 == true ? 1 : 0
                };

                DateTime tempStart = start;
                DateTime tempEnd   = end;
                //Convert tempStart and tempEnd from UTC to user time
                var tempStartUserTime = _dateTimeHelper.ConvertToUserTime(tempStart, DateTimeKind.Utc);
                while (tempStart <= pm.EndDateTime)
                {
                    tempStart = tempStart.Add(new TimeSpan(1, 0, 0, 0));
                    tempEnd   = tempEnd.Add(new TimeSpan(1, 0, 0, 0));
                    //Convert tempStart and tempEnd from UTC to user time
                    tempStartUserTime = _dateTimeHelper.ConvertToUserTime(tempStart, DateTimeKind.Utc);

                    if (dayOfMonthSelected[(int)tempStartUserTime.Day - 1] == 1)
                    {
                        start = tempStart;
                        end   = tempEnd.Add(tempStart.Subtract(start));
                        return(true);
                    }
                    if (tempStart.Day == DateTime.DaysInMonth(tempStartUserTime.Year, tempStartUserTime.Month) - 1)
                    {
                        DateTime nextMonth = start.AddMonths(pm.FrequencyCount.Value);
                        tempStart = new DateTime(nextMonth.Year, nextMonth.Month, 1);
                        tempEnd   = new DateTime(nextMonth.Year, nextMonth.Month, 1);
                    }
                }
                return(false);
            }
            else if (pm.FrequencyType == (int?)FrequencyType.Yearly)
            {
                start = start.AddMonths(12 * pm.FrequencyCount.Value);
                end   = end.AddMonths(12 * pm.FrequencyCount.Value);
                return(true);
            }
            return(false);
        }