public JsonResult PersenceSupport_Update(Guid PersenceSupportID, short SupportType, string Problem, string PlanDate,
                                                 string PlanTimeFrom, string PlanTimeTo, string PlanNote, int RowVersion)
        {
            GeneralResponse response = new GeneralResponse();

            #region Access Check
            bool hasPermission = GetEmployee().IsGuaranteed("PersenceSupport_Update");
            if (!hasPermission)
            {
                response.ErrorMessages.Add("AccessDenied");
                return(Json(response, JsonRequestBehavior.AllowGet));
            }
            #endregion

            EditPersenceSupportRequest request = new EditPersenceSupportRequest();
            request.ID                 = PersenceSupportID;
            request.RowVersion         = RowVersion;
            request.ModifiedEmployeeID = GetEmployee().ID;
            request.SupportType        = SupportType;
            request.Problem            = Problem;
            request.PlanDate           = PlanDate;
            request.PlanTimeFrom       = PlanTimeFrom;
            request.PlanTimeTo         = PlanTimeTo;
            request.PlanNote           = PlanNote;

            response = this._persenceSupportService.EditPersenceSupport(request);

            return(Json(response, JsonRequestBehavior.AllowGet));
        }
        public GeneralResponse EditPersenceSupport(EditPersenceSupportRequest request)
        {
            GeneralResponse response        = new GeneralResponse();
            PersenceSupport persenceSupport = new PersenceSupport();

            persenceSupport = _persenceSupportRepository.FindBy(request.ID);

            if (persenceSupport != null)
            {
                try
                {
                    // اگر تحویل شده بود قابل ویرایش نباشد
                    if (persenceSupport.Delivered)
                    {
                        response.ErrorMessages.Add("DeliveredAndCanNotBeEdited");
                        return(response);
                    }

                    persenceSupport.ModifiedDate     = PersianDateTime.Now;
                    persenceSupport.ModifiedEmployee = _employeeRepository.FindBy(request.ModifiedEmployeeID);
                    persenceSupport.PlanDate         = request.PlanDate;
                    persenceSupport.PlanNote         = request.PlanNote;
                    persenceSupport.PlanTimeFrom     = request.PlanTimeFrom;
                    persenceSupport.PlanTimeTo       = request.PlanTimeTo;
                    persenceSupport.Problem          = request.Problem;
                    persenceSupport.SupportType      = request.SupportType;
                    persenceSupport.Installer        = _employeeRepository.FindBy(request.InstallerID);

                    #region RowVersion Check

                    if (persenceSupport.RowVersion != request.RowVersion)
                    {
                        response.ErrorMessages.Add("کارشناس محترم، یک کاربر همزمان با شما در حال ویرایش این رکورد است. بنابراین اطلاعات شما ذخیره نمی شود.");
                        return(response);
                    }
                    else
                    {
                        persenceSupport.RowVersion += 1;
                        response.rowVersion         = persenceSupport.RowVersion;
                    }

                    #endregion

                    #region Validation

                    if (persenceSupport.GetBrokenRules().Count() > 0)
                    {
                        foreach (BusinessRule businessRule in persenceSupport.GetBrokenRules())
                        {
                            response.ErrorMessages.Add(businessRule.Rule);
                        }

                        return(response);
                    }

                    #endregion

                    _persenceSupportRepository.Save(persenceSupport);
                    _uow.Commit();
                }
                catch (Exception ex)
                {
                    response.ErrorMessages.Add(ex.Message);
                }
            }
            else
            {
                response.ErrorMessages.Add("NoItemToEditKey");
            }
            return(response);
        }