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