Exemplo n.º 1
0
        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() }));
            }
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 6
0
        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);
        }