public ActionResult Edit(AdjustModel model) { var adjust = _adjustRepository.GetById(model.Id); if (ModelState.IsValid) { adjust = model.ToEntity(adjust); if (adjust.IsNew == true) { string number = _autoNumberService.GenerateNextAutoNumber(_dateTimeHelper.ConvertToUserTime(DateTime.UtcNow, DateTimeKind.Utc), adjust); adjust.Number = number; } //always set IsNew to false when saving adjust.IsNew = false; //update attributes _adjustRepository.Update(adjust); //commit all changes in UI this._dbContext.SaveChanges(); //notification SuccessNotification(_localizationService.GetResource("Record.Saved")); return(Json(new { number = adjust.Number, isApproved = adjust.IsApproved })); } else { return(Json(new { Errors = ModelState.SerializeErrors() })); } }
public ActionResult Edit(ContractModel model) { var contract = _contractRepository.GetById(model.Id); var assignment = contract.Assignment; if (ModelState.IsValid) { contract = model.ToEntity(contract); if (contract.IsNew == true) { string number = _autoNumberService.GenerateNextAutoNumber(_dateTimeHelper.ConvertToUserTime(DateTime.UtcNow, DateTimeKind.Utc), contract); contract.Number = number; } //always set IsNew to false when saving contract.IsNew = false; //copy to Assignment if (contract.Assignment != null) { contract.Assignment.Number = contract.Number; contract.Assignment.Description = contract.Description; contract.Assignment.Priority = contract.Priority; } _contractRepository.Update(contract); //commit all changes in UI this._dbContext.SaveChanges(); //trigger workflow action if (!string.IsNullOrEmpty(model.ActionName)) { WorkflowServiceClient.TriggerWorkflowAction(contract.Id, EntityType.Contract, assignment.WorkflowDefinitionId, assignment.WorkflowInstanceId, assignment.WorkflowVersion.Value, model.ActionName, model.Comment, this._workContext.CurrentUser.Id); //Every time we query twice, because EF is caching entities so it won't get the latest value from DB //We need to detach the specified entity and load it again this._dbContext.Detach(contract.Assignment); assignment = _assignmentRepository.GetById(contract.AssignmentId); } //notification SuccessNotification(_localizationService.GetResource("Record.Saved")); return(Json(new { number = contract.Number, status = assignment.Name, assignedUsers = assignment.Users.Select(u => u.Name), availableActions = assignment.AvailableActions ?? "" })); } else { return(Json(new { Errors = ModelState.SerializeErrors() })); } }
public virtual PurchaseOrder CreatePO(PurchaseRequest pr) { var po = new PurchaseOrder { SiteId = pr.SiteId, PurchaseRequestId = pr.Id, RequestorId = pr.RequestorId, DateRequired = pr.DateRequired, Priority = pr.Priority, CreatedUserId = this._workContext.CurrentUser.Id }; _purchaseOrderRepository.Insert(po); foreach (var prItem in pr.PurchaseRequestItems) { po.PurchaseOrderItems.Add(new PurchaseOrderItem { Sequence = prItem.Sequence, ItemId = prItem.ItemId, QuantityOrdered = prItem.QuantityRequested }); } string number = _autoNumberService.GenerateNextAutoNumber(_dateTimeHelper.ConvertToUserTime(DateTime.UtcNow, DateTimeKind.Utc), po); po.Number = number; this._dbContext.SaveChanges(); //start workflow var workflowInstanceId = WorkflowServiceClient.StartWorkflow(po.Id, EntityType.PurchaseOrder, 0, this._workContext.CurrentUser.Id); this._dbContext.Detach(po); po = _purchaseOrderRepository.GetById(po.Id); this._dbContext.Detach(po.Assignment); // trigger Submit action WorkflowServiceClient.TriggerWorkflowAction(po.Id, EntityType.PurchaseOrder, po.Assignment.WorkflowDefinitionId, workflowInstanceId, po.Assignment.WorkflowVersion.Value, WorkflowActionName.Submit, "", this._workContext.CurrentUser.Id); return(po); }
public virtual void Approve(PhysicalCount physicalCount) { if (physicalCount.IsApproved == false) { bool needAdjust = false; var adjust = new Adjust(); //add adjust from physical count foreach (var item in physicalCount.PhysicalCountItems) { var currentQuantity = _storeService.GetTotalQuantity(item.StoreLocator.StoreId, item.StoreLocatorId, item.ItemId); if (item.Count.HasValue && item.Count != currentQuantity) { needAdjust = true; var adjustItem = new AdjustItem { StoreLocatorId = item.StoreLocatorId, ItemId = item.ItemId, AdjustQuantity = item.Count - currentQuantity }; adjust.AdjustItems.Add(adjustItem); } } if (needAdjust == true) { adjust.Name = adjust.Description = string.Format("Auto Generated adjust for PhysicalCount {0}", physicalCount.Number); adjust.AdjustDate = DateTime.UtcNow; adjust.SiteId = physicalCount.SiteId; adjust.StoreId = physicalCount.StoreId; string number = _autoNumberService.GenerateNextAutoNumber(_dateTimeHelper.ConvertToUserTime(DateTime.UtcNow, DateTimeKind.Utc), adjust); adjust.Number = number; adjust.PhysicalCountId = physicalCount.Id; _adjustRepository.InsertAndCommit(adjust); } physicalCount.IsApproved = true; if (needAdjust == true) { physicalCount.AdjustId = adjust.Id; } _physicalCountRepository.UpdateAndCommit(physicalCount); } }
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 ActionResult Edit(TenantLeaseModel model) { var tenantLease = _tenantLeaseRepository.GetById(model.Id); var assignment = tenantLease.Assignment; //find the list of leases status are leasing var existingLeases = _tenantLeaseRepository.GetAll().Where(l => l.SiteId == model.SiteId && l.PropertyId == model.PropertyId && l.TenantId == model.TenantId && l.Assignment.Name == "Leasing" && l.Id != model.Id).ToList(); if (existingLeases.Count > 0) { ModelState.AddModelError("TenantLease", _localizationService.GetResource("TenantLease.CannotCreateNewLease")); } if (ModelState.IsValid) { var hasChangedRentalTermAndDate = HasChangedRentalTermAndDate(tenantLease, model); tenantLease = model.ToEntity(tenantLease); if (tenantLease.IsNew == true) { string number = _autoNumberService.GenerateNextAutoNumber(_dateTimeHelper.ConvertToUserTime(DateTime.UtcNow, DateTimeKind.Utc), tenantLease); tenantLease.Number = number; } //always set IsNew to false when saving tenantLease.IsNew = false; //copy to Assignment if (tenantLease.Assignment != null) { tenantLease.Assignment.Number = tenantLease.Number; tenantLease.Assignment.Description = tenantLease.Description; tenantLease.Assignment.Priority = tenantLease.Priority; } _tenantLeaseRepository.Update(tenantLease); //commit all changes in UI this._dbContext.SaveChanges(); //trigger workflow action if (!string.IsNullOrEmpty(model.ActionName)) { WorkflowServiceClient.TriggerWorkflowAction(tenantLease.Id, EntityType.TenantLease, assignment.WorkflowDefinitionId, assignment.WorkflowInstanceId, assignment.WorkflowVersion.Value, model.ActionName, model.Comment, this._workContext.CurrentUser.Id); //Every time we query twice, because EF is caching entities so it won't get the latest value from DB //We need to detach the specified entity and load it again this._dbContext.Detach(tenantLease.Assignment); assignment = _assignmentRepository.GetById(tenantLease.AssignmentId); } //Generate Payment Schedule and Payment this._dbContext.Detach(tenantLease); tenantLease = _tenantLeaseRepository.GetById(tenantLease.Id); if (hasChangedRentalTermAndDate) { var tenantPayments = tenantLease.TenantPayments.Where(p => p.TenantLeasePaymentScheduleId != null).ToList(); var hasNotAnyPaymentCollectionOrDaysLateInTenantPayment = HasNotAnyPaymentCollectionOrDaysLateInTenantPayment(tenantPayments); if (hasNotAnyPaymentCollectionOrDaysLateInTenantPayment) { _tenantLeaseService.GeneratePaymentSchedules(tenantLease); var firstPaymentSchedulePeriod = _tenantLeasePaymentScheduleRepository.GetAll() .Where(s => s.TenantLeaseId == tenantLease.Id) .OrderBy(s => s.DueDate) .FirstOrDefault(); _tenantLeaseService.CreateRentPayment(firstPaymentSchedulePeriod, tenantLease.FirstPaymentDate); this._dbContext.SaveChanges(); } else { return(Json(new { Errors = _localizationService.GetResource("TenantLease.CannotGeneratePayment") })); } } //notification SuccessNotification(_localizationService.GetResource("Record.Saved")); return(Json(new { number = tenantLease.Number, status = assignment.Name, assignedUsers = assignment.Users.Select(u => u.Name), availableActions = assignment.AvailableActions ?? "" })); } else { return(Json(new { Errors = ModelState.SerializeErrors() })); } }
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); }