Beispiel #1
0
        public IHttpActionResult SavePeopleTrain(PeopleTrainFormViewModel model)
        {
            List <Model.ViewModel.Error> errors = new List <Model.ViewModel.Error>();

            if (!ModelState.IsValid)
            {
                return(Json(Utils.ParseFormError(ModelState)));
            }

            string message = "Ok";

            if (model.EmpId == 0)
            {
                model.EmpId = User.Identity.GetEmpId();
            }
            model.EmpId = 1042;
            var record = _hrUnitOfWork.Repository <PeopleTraining>().FirstOrDefault(a => a.Id == model.Id);

            //insert
            if (record == null)
            {
                record = new PeopleTraining();
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = record
                };
                AutoMapper(parms);
                record.CreatedUser    = User.Identity.Name;
                record.CreatedTime    = DateTime.Now;
                record.CompanyId      = User.Identity.GetDefaultCompany();
                record.ApprovalStatus = 6;
                record.RequestDate    = DateTime.Now;
                _hrUnitOfWork.TrainingRepository.Add(record);
            }
            //update
            else
            {
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = record
                };
                AutoMapper(parms);
                record.ModifiedTime   = DateTime.Now;
                record.ModifiedUser   = User.Identity.Name;
                record.CompanyId      = User.Identity.GetDefaultCompany();
                record.RequestDate    = DateTime.Now;
                record.ApprovalStatus = 6;
                _hrUnitOfWork.TrainingRepository.Attach(record);
                _hrUnitOfWork.TrainingRepository.Entry(record).State = EntityState.Modified;
            }
            var Errors = SaveChanges(User.Identity.GetLanguage());

            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
            }

            return(Ok(message));
        }
        public IHttpActionResult FollowupDetails(LeaveReqViewModel model)
        {
            List <Model.ViewModel.Error> errors = new List <Model.ViewModel.Error>();
            string message = "Ok";

            if (!ModelState.IsValid)
            {
                return(Json(Utils.ParseFormError(ModelState)));
            }
            LeaveRequest request = _hrUnitOfWork.LeaveRepository.Get(model.Id);

            model.PeriodId = request.PeriodId;
            AutoMapperParm parms = new AutoMapperParm()
            {
                Source = model, Destination = request
            };

            AutoMapper(parms);
            if (request.ApprovalStatus != 9)
            {
                request.RejectDesc   = null;
                request.RejectReason = null;
            }

            if (request.ApprovalStatus != 5)
            {
                request.ActualStartDate = null;
                request.ActualNofDays   = null;
                request.ActualEndDate   = null;
            }
            request.ModifiedTime = DateTime.Now;
            request.ModifiedUser = User.Identity.Name;

            if (request.ApprovalStatus == 5 || request.ApprovalStatus == 9) //Accepted or Rejected
            {
                string msg = AddWFTrans(request, null, null);

                // change here to 6
                if (request.ApprovalStatus == 6)
                {
                    //if msg == Success => msg = null || Error
                    if (msg == "Success")
                    {
                        msg = ChangeAssignmentStatus(request);
                    }
                    if (!string.IsNullOrEmpty(msg))
                    {
                        return(Json(msg)); //ApprovalStatus = 5 because not SaveChanges yet
                    }
                    _hrUnitOfWork.LeaveRepository.AddAcceptLeaveTrans(request, User.Identity.Name);
                }
            }

            _hrUnitOfWork.LeaveRepository.Attach(request);
            _hrUnitOfWork.LeaveRepository.Entry(request).State = EntityState.Modified;

            var Errors = SaveChanges(User.Identity.GetLanguage());

            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
            }
            return(Ok(message));
        }
        public IHttpActionResult SaveLeave(LeaveReqViewModel model)
        {
            List <Model.ViewModel.Error> errors = new List <Model.ViewModel.Error>();

            if (!ModelState.IsValid)
            {
                return(Json(Utils.ParseFormError(ModelState)));
            }


            model.EmpId = User.Identity.GetEmpId();
            LeaveRequest request = _hrUnitOfWork.LeaveRepository.Get(model.Id);
            var          type    = _hrUnitOfWork.LeaveRepository.GetLeaveType(model.TypeId);

            if (model.ReqReason == null && type.MustAddCause == true)
            {
                ModelState.AddModelError("ReqReason", MsgUtils.Instance.Trls("Required"));
                return(Ok(ModelState));
            }

            string message = "Ok";

            ///Save
            if (model.Id == 0)
            { /// New
                request = new LeaveRequest();
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = request
                };
                AutoMapper(parms);
                request.PeriodId       = _hrUnitOfWork.LeaveRepository.GetLeaveRequestPeriod(type.CalendarId, request.StartDate, User.Identity.GetLanguage(), out message);
                request.ApprovalStatus = (byte)(model.submit == true ? 2 : 1); //1- New, 2- Submit
                request.CreatedUser    = User.Identity.Name;
                request.CreatedTime    = DateTime.Now;
                _hrUnitOfWork.LeaveRepository.Add(request);
            }
            else
            { /// Edit
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = request
                };                                                                                     //, ObjectName = "LeaveRequest"
                AutoMapper(parms);

                if (model.submit)
                {
                    _hrUnitOfWork.TrainingRepository.AddTrail(new AddTrailViewModel()
                    {
                        ColumnName  = "ApprovalStatus",
                        CompanyId   = User.Identity.GetDefaultCompany(),
                        ObjectName  = "LeaveRequest",
                        SourceId    = request.Id.ToString(),
                        UserName    = User.Identity.Name,
                        ValueAfter  = MsgUtils.Instance.Trls("Submit"),
                        ValueBefore = MsgUtils.Instance.Trls("Darft")
                    });
                }

                request.ApprovalStatus = (byte)(model.submit == true ? 2 : model.ApprovalStatus); //1- New, 2- Submit
                request.ModifiedUser   = User.Identity.Name;
                request.ModifiedTime   = DateTime.Now;
                _hrUnitOfWork.LeaveRepository.Attach(request);
                _hrUnitOfWork.LeaveRepository.Entry(request).State = EntityState.Modified;
            }

            var Errors = SaveChanges(User.Identity.GetLanguage());

            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
                return(Ok(message));
            }

            if (model.submit)
            {
                WfViewModel wf = new WfViewModel()
                {
                    Source         = "Leave",
                    SourceId       = request.TypeId,
                    DocumentId     = request.Id,
                    RequesterEmpId = request.EmpId,
                    ApprovalStatus = 2,
                    CreatedUser    = User.Identity.Name,
                };
                var wfTrans = _hrUnitOfWork.LeaveRepository.AddWorkFlow(wf, User.Identity.GetLanguage());
                if (wfTrans == null && wf.WorkFlowStatus != "Success")
                {
                    request.ApprovalStatus = 1;
                    message += "," + (new JavaScriptSerializer()).Serialize(new { model = request, error = wf.WorkFlowStatus });

                    _hrUnitOfWork.LeaveRepository.Attach(request);
                    _hrUnitOfWork.LeaveRepository.Entry(request).State = EntityState.Modified;
                }
                else if (wfTrans != null)
                {
                    _hrUnitOfWork.LeaveRepository.Add(wfTrans);
                }
            }

            Errors = SaveChanges(User.Identity.GetLanguage());
            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
            }


            return(Ok(message));
        }
        public IHttpActionResult SaveComplaint(ComplaintRequestViewModel model)
        {
            List <Model.ViewModel.Error> errors = new List <Model.ViewModel.Error>();

            if (!ModelState.IsValid)
            {
                return(Json(Utils.ParseFormError(ModelState)));
            }

            //  return Ok(ModelState);

            model.EmpId = User.Identity.GetEmpId();
            model.EmpId = 1027;
            ComplainRequest request = _hrUnitOfWork.ComplaintRepository.Get(model.Id);
            string          message = "Ok";

            ///Save
            if (model.Id == 0)
            { /// New
                request = new ComplainRequest();
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = request
                };
                AutoMapper(parms);
                request.ApprovalStatus = (byte)(model.submit == true ? 2 : 1); //1- New, 2- Submit
                request.CreatedUser    = User.Identity.Name;
                request.CreatedTime    = DateTime.Now;
                request.RequestDate    = DateTime.Now;
                request.CompanyId      = User.Identity.GetDefaultCompany();
                _hrUnitOfWork.ComplaintRepository.Add(request);
            }
            else if (model.ApprovalStatus == 3 || model.ApprovalStatus == 1)
            { /// Edit
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = request
                };
                AutoMapper(parms);
                if (model.submit)
                {
                    _hrUnitOfWork.TrainingRepository.AddTrail(new AddTrailViewModel()
                    {
                        ColumnName  = "ApprovalStatus",
                        CompanyId   = User.Identity.GetDefaultCompany(),
                        ObjectName  = "ComplainRequests",
                        SourceId    = request.Id.ToString(),
                        UserName    = User.Identity.Name,
                        Version     = 0,
                        ValueAfter  = MsgUtils.Instance.Trls("Submit"),
                        ValueBefore = MsgUtils.Instance.Trls("Darft")
                    });
                }

                request.ApprovalStatus = (byte)(model.submit == true ? 2 : model.ApprovalStatus); //1- New, 2- Submit
                request.ModifiedUser   = User.Identity.Name;
                request.ModifiedTime   = DateTime.Now;
                request.RequestDate    = DateTime.Now;
                _hrUnitOfWork.ComplaintRepository.Attach(request);
                _hrUnitOfWork.ComplaintRepository.Entry(request).State = EntityState.Modified;
            }

            var Errors = SaveChanges(User.Identity.GetLanguage());

            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
                return(Ok(message));
            }

            if (model.submit)
            {
                WfViewModel wf = new WfViewModel()
                {
                    Source         = "Complaint" + model.Against,
                    SourceId       = User.Identity.GetDefaultCompany(),
                    DocumentId     = request.Id,
                    RequesterEmpId = request.EmpId,
                    ApprovalStatus = 2,
                    CreatedUser    = User.Identity.Name,
                };
                var wfTrans = _hrUnitOfWork.ComplaintRepository.AddWorkFlow(wf, User.Identity.GetLanguage());
                if (wfTrans == null && wf.WorkFlowStatus != "Success")
                {
                    request.ApprovalStatus = 1;
                    message = wf.WorkFlowStatus;
                }
                else if (wfTrans != null)
                {
                    _hrUnitOfWork.LeaveRepository.Add(wfTrans);
                }
            }

            Errors = SaveChanges(User.Identity.GetLanguage());
            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
            }

            return(Ok(message));
        }
Beispiel #5
0
        public IHttpActionResult EditLeave(EditVM model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            if (model == null)
            {
                return(NotFound());
            }

            List <Error> errors = new List <Error>();

            var request  = hrUnitOfWork.LeaveRepository.Get(model.RequestId);
            var type     = hrUnitOfWork.LeaveRepository.GetLeaveType(request.TypeId);
            var UserName = HttpContext.Current.User.Identity.Name;

            AutoMapperParm parms = new AutoMapperParm()
            {
                Source = model, Destination = request, Version = 0, ObjectName = "LeaveRequest", Options = null, Transtype = TransType.Update
            };

            AutoMapper(parms);

            hrUnitOfWork.LeaveRepository.AddTrail(new AddTrailViewModel
            {
                ObjectName  = "LeaveRequest",
                CompanyId   = model.CompanyId,
                UserName    = UserName,
                Version     = 0,
                ColumnName  = "ActualStartDate",
                SourceId    = request.Id.ToString(),
                ValueAfter  = model.EditedStartDate.ToString(),
                ValueBefore = request.ActualEndDate.ToString()
            });
            hrUnitOfWork.LeaveRepository.AddTrail(new AddTrailViewModel
            {
                ObjectName  = "LeaveRequest",
                CompanyId   = model.CompanyId,
                UserName    = UserName,
                Version     = 0,
                ColumnName  = "ActualEndDate",
                SourceId    = request.Id.ToString(),
                ValueAfter  = model.EditedEndDate.ToString(),
                ValueBefore = request.ActualNofDays.ToString()
            });


            request.ActualStartDate = model.EditedStartDate;
            request.ActualEndDate   = model.EditedEndDate;
            request.EndDate         = (DateTime)request.ActualEndDate;
            request.ReturnDate      = model.EditedReturnDate;
            request.ModifiedUser    = UserName;
            request.ModifiedTime    = DateTime.Now;
            DateTime oldStartDate = request.ActualStartDate.GetValueOrDefault(); // remmber to check startdate

            hrUnitOfWork.LeaveRepository.AddEditLeaveTrans(request, oldStartDate);
            hrUnitOfWork.LeaveRepository.Attach(request);
            hrUnitOfWork.LeaveRepository.Entry(request).State = EntityState.Modified;

            var Errors = SaveChanges(model.Language);

            if (Errors.Count > 0)
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            return(Ok(Errors));
        }
Beispiel #6
0
        public IHttpActionResult BreakLeave(BreakVM model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            if (model == null)
            {
                return(NotFound());
            }

            List <Error> errors = new List <Error>();

            var request = hrUnitOfWork.LeaveRepository.Get(model.RequestId);
            var type    = hrUnitOfWork.LeaveRepository.GetLeaveType(request.TypeId);

            var UserName = HttpContext.Current.User.Identity.Name;

            AutoMapperParm parms = new AutoMapperParm()
            {
                Source = model, Destination = request, Version = 0, ObjectName = "LeaveRequest", Options = null, Transtype = TransType.Update
            };

            AutoMapper(parms);

            hrUnitOfWork.LeaveRepository.AddTrail(new AddTrailViewModel
            {
                ObjectName  = "LeaveRequest",
                CompanyId   = model.CompanyId,
                UserName    = UserName,
                Version     = 0,
                ColumnName  = "ActualEndDate",
                SourceId    = request.Id.ToString(),
                ValueAfter  = model.BreakEndDate.ToString(),
                ValueBefore = request.ActualEndDate.ToString()
            });
            hrUnitOfWork.LeaveRepository.AddTrail(new AddTrailViewModel
            {
                ObjectName  = "LeaveRequest",
                CompanyId   = model.CompanyId,
                UserName    = UserName,
                Version     = 0,
                ColumnName  = "ActualNofDays",
                SourceId    = request.Id.ToString(),
                ValueAfter  = model.BreakNofDays.ToString(),
                ValueBefore = request.ActualNofDays.ToString()
            });
            float DiffDays = request.ActualNofDays.Value - model.BreakNofDays.Value;

            request.ActualEndDate = model.BreakEndDate;
            request.ActualNofDays = model.BreakNofDays;
            request.ReturnDate    = request.StartDate.AddDays((double)model.BreakNofDays);
            request.NofDays       = (float)model.BreakNofDays;
            //  if (type.AbsenceType == 8)
            //  {
            //request.EndDate = (DateTime)request.ActualEndDate;
            // }
            ///Brake Leave LeaveTrans
            hrUnitOfWork.LeaveRepository.AddBreakLeaveTrans(request, DiffDays, UserName);
            request.ModifiedUser = UserName;
            request.ModifiedTime = DateTime.Now;
            hrUnitOfWork.LeaveRepository.Attach(request);
            hrUnitOfWork.LeaveRepository.Entry(request).State = EntityState.Modified;

            var Errors = SaveChanges(model.Language);

            if (Errors.Count > 0)
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            return(Ok(Errors));
        }
Beispiel #7
0
        public IHttpActionResult CancelLeave(CancelVM model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            if (model == null)
            {
                return(NotFound());
            }

            List <Error> errors = new List <Error>();

            var leaveReq = hrUnitOfWork.LeaveRepository.Get(model.RequestId);


            AutoMapperParm parms = new AutoMapperParm()
            {
                Source = model, Destination = leaveReq, Version = 0, ObjectName = "LeaveRequest", Options = null, Transtype = TransType.Update
            };

            AutoMapper(parms);


            var UserName = HttpContext.Current.User.Identity.Name;

            //AddTrail(leaveReq.Id, "ApprovalStatus", MsgUtils.Instance.Trls("Cancel after accepted"), MsgUtils.Instance.Trls("Approved"));

            hrUnitOfWork.LeaveRepository.AddTrail(new AddTrailViewModel
            {
                ObjectName  = "LeaveRequest",
                CompanyId   = model.CompanyId,
                UserName    = UserName,
                Version     = 0,
                ColumnName  = "ApprovalStatus",
                SourceId    = leaveReq.Id.ToString(),
                ValueAfter  = MsgUtils.Instance.Trls("Cancel after accepted"),
                ValueBefore = MsgUtils.Instance.Trls("Approved")
            });
            leaveReq.ApprovalStatus = 8;
            ///Cancel change assign state
            hrUnitOfWork.EmployeeRepository.CancelLeaveAssignState(leaveReq, UserName, 0, model.Language);
            ///Cancel LeaveTrans
            var msg = hrUnitOfWork.LeaveRepository.AddCancelLeaveTrans(leaveReq, UserName, model.Language);

            if (msg.Length > 0)
            {
                return(Ok(msg));
            }
            leaveReq.ModifiedUser = UserName;
            leaveReq.ModifiedTime = DateTime.Now;
            hrUnitOfWork.LeaveRepository.Attach(leaveReq);
            hrUnitOfWork.LeaveRepository.Entry(leaveReq).State = EntityState.Modified;

            var Errors = SaveChanges(model.Language);

            if (Errors.Count > 0)
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            return(Ok(Errors));
        }
Beispiel #8
0
        public IHttpActionResult PutLeave(LeaveReqVM model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            if (model == null)
            {
                return(NotFound());
            }
            var UserName = HttpContext.Current.User.Identity.Name;


            var type = hrUnitOfWork.LeaveRepository.GetLeaveType(model.TypeId);

            LeaveRequest request = hrUnitOfWork.LeaveRepository.Get(model.Id);

            //if (type.AllowFraction && (model.FractionDays != 0 && model.FractionDays != null))
            //{
            //    model.NofDays = Math.Abs(model.FractionDays.GetValueOrDefault());

            //}
            if (type.AllowFraction && (model.DayFraction != 0))
            {
                switch (model.DayFraction)
                {
                case 1:
                case 3: model.NofDays = 0.25f; break;

                case 2:
                case 4: model.NofDays = 0.5f; break;
                }
            }
            AutoMapperParm parms = new AutoMapperParm()
            {
                Source = model, Destination = request, Version = 0, ObjectName = "LeaveRequest", Options = null, Transtype = TransType.Update
            };

            AutoMapper(parms);

            if (model.submit)
            {
                hrUnitOfWork.TrainingRepository.AddTrail(new AddTrailViewModel()
                {
                    ColumnName  = "ApprovalStatus",
                    CompanyId   = model.CompanyId,
                    ObjectName  = "LeaveRequest",
                    SourceId    = request.Id.ToString(),
                    UserName    = UserName,
                    Version     = 0,
                    ValueAfter  = MsgUtils.Instance.Trls("Submit"),
                    ValueBefore = MsgUtils.Instance.Trls("Darft")
                });
            }

            request.ApprovalStatus = (byte)(model.submit ? (type.ExWorkflow ? 6 : 2) : model.ApprovalStatus); //1- New, 2- Submit 6- Approved //AbsenceType 8- Casual
            model.ApprovalStatus   = request.ApprovalStatus;
            request.ModifiedUser   = UserName;
            request.ModifiedTime   = DateTime.Now;
            request.ReasonDesc     = model.ReasonDesc;
            request.NofDays        = (float)model.NofDays;
            request.DayFraction    = (byte)model.DayFraction;
            if (type.ExWorkflow && model.submit)
            {
                request.ActualStartDate = request.StartDate;
                request.ActualEndDate   = request.EndDate;
                request.ActualNofDays   = request.NofDays;
            }

            hrUnitOfWork.LeaveRepository.Attach(request);
            hrUnitOfWork.LeaveRepository.Entry(request).State = EntityState.Modified;

            if (model.submit && type.AbsenceType == 8)
            {
                hrUnitOfWork.LeaveRepository.AddAcceptLeaveTrans(request, UserName);
            }

            var trans  = hrUnitOfWork.BeginTransaction();
            var Errors = SaveChanges(model.Culture);

            if (Errors.Count > 0)
            {
                trans.Rollback();
                trans.Dispose();
                return(StatusCode(HttpStatusCode.Forbidden));
            }

            if (model.submit && !type.ExWorkflow) //Casual
            {
                WfViewModel wf = new WfViewModel()
                {
                    Source         = "Leave",
                    SourceId       = request.TypeId,
                    DocumentId     = request.Id,
                    RequesterEmpId = request.EmpId,
                    ApprovalStatus = 2,
                    CreatedUser    = UserName,
                };
                var wfTrans = hrUnitOfWork.LeaveRepository.AddWorkFlow(wf, model.Culture);
                if (wfTrans == null && wf.WorkFlowStatus != "Success")
                {
                    request.ApprovalStatus = 1;

                    hrUnitOfWork.LeaveRepository.Attach(request);
                    hrUnitOfWork.LeaveRepository.Entry(request).State = EntityState.Modified;
                }
                else if (wfTrans != null)
                {
                    hrUnitOfWork.LeaveRepository.Add(wfTrans);
                }
                Errors = Save(model.Culture);
                if (Errors.Count > 0)
                {
                    trans.Rollback();
                    trans.Dispose();
                    return(StatusCode(HttpStatusCode.NotModified));
                }
            }

            trans.Commit();
            trans.Dispose();

            return(Ok(model));
        }
        public ActionResult Details(AssignOrderViewModel model, OptionsViewModel moreInfo)
        {
            List <Error> errors = new List <Error>();

            if (ModelState.IsValid)
            {
                if (ServerValidationEnabled)
                {
                    errors = _hrUnitOfWork.CompanyRepository.CheckForm(new CheckParm
                    {
                        CompanyId    = CompanyId,
                        ObjectName   = "AssignOrders",
                        TableName    = "AssignOrders",
                        Columns      = Models.Utils.GetColumnViews(ModelState.Where(a => !a.Key.Contains('.'))),
                        ParentColumn = "CompanyId",
                        Culture      = Language
                    });

                    if (errors.Count() > 0)
                    {
                        foreach (var e in errors)
                        {
                            foreach (var errorMsg in e.errors)
                            {
                                ModelState.AddModelError(errorMsg.field, errorMsg.message);
                            }
                        }
                        return(Json(Models.Utils.ParseFormErrors(ModelState)));
                    }
                }
            }
            else
            {
                return(Json(Models.Utils.ParseFormErrors(ModelState)));
            }

            AssignOrder request = _hrUnitOfWork.LeaveRepository.GetAssignOrderByiD(model.Id);
            byte        version;

            byte.TryParse(Request.Form["version"], out version);
            var isRequired = _hrUnitOfWork.Repository <Workflow>().Where(w => w.Source == "AssignOrder" + model.CalcMethod && w.CompanyId == CompanyId).Select(a => a.IsRequired).FirstOrDefault();

            if (model.Id == 0)
            {
                //new
                request = new AssignOrder();
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = request, Version = version, ObjectName = "AssignOrders", Options = moreInfo, Transtype = TransType.Insert
                };
                AutoMapper(parms);

                request.CompanyId      = CompanyId;
                request.CreatedUser    = UserName;
                request.CreatedTime    = DateTime.Now;
                request.ApprovalStatus = (byte)(isRequired ? 1 : 6);
                _hrUnitOfWork.LeaveRepository.AddAssignOrder(request);
            }
            else
            {
                //Edit
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = request, Version = version, ObjectName = "AssignOrders", Options = moreInfo, Transtype = TransType.Update
                };
                AutoMapper(parms);
                //
                _hrUnitOfWork.TrainingRepository.AddTrail(new AddTrailViewModel()
                {
                    ColumnName  = "ApprovalStatus",
                    CompanyId   = CompanyId,
                    ObjectName  = "AssignOrders",
                    SourceId    = request.Id.ToString(),
                    UserName    = UserName,
                    ValueAfter  = MsgUtils.Instance.Trls("Submit"),
                    ValueBefore = MsgUtils.Instance.Trls("Darft"),
                    Transtype   = (byte)TransType.Update
                });

                request.CompanyId      = CompanyId;
                request.CreatedUser    = UserName;
                request.CreatedTime    = DateTime.Now;
                request.ApprovalStatus = (byte)(isRequired ? 1 : 6);
                _hrUnitOfWork.LeaveRepository.AttachAssignOrder(request);
                _hrUnitOfWork.LeaveRepository.EntryAssignOrder(request).State = EntityState.Modified;
            }

            if (!isRequired && model.CalcMethod == 2 && model.Id == 0)
            {
                var error = _hrUnitOfWork.LeaveRepository.AddAssignOrdersLeaveTrans(request, UserName, Language);
                if (error.Length > 0)
                {
                    return(Json(error));
                }
            }

            errors = SaveChanges(Language);
            string message = "OK," + ((new JavaScriptSerializer()).Serialize(model));

            if (errors.Count > 0)
            {
                message = errors.First().errors.First().message;
                return(Json(message));
            }
            //workflow
            if (isRequired)
            {
                if (request.CalcMethod == 1) //monetary
                {
                    WfViewModel wf = new WfViewModel()
                    {
                        Source         = "AssignOrder1",
                        SourceId       = request.CompanyId,
                        DocumentId     = request.Id,
                        RequesterEmpId = request.EmpId,
                        ApprovalStatus = 6,
                        CreatedUser    = UserName,
                    };

                    var wfTrans = _hrUnitOfWork.LeaveRepository.AddWorkFlow(wf, Language);
                    if (wfTrans == null && wf.WorkFlowStatus != "Success")
                    {
                        request.ApprovalStatus = 1;
                        message += "," + (new JavaScriptSerializer()).Serialize(new { model = request, error = wf.WorkFlowStatus });

                        _hrUnitOfWork.LeaveRepository.AttachAssignOrder(request);
                        _hrUnitOfWork.LeaveRepository.EntryAssignOrder(request).State = EntityState.Modified;
                    }
                    else if (wfTrans != null)
                    {
                        _hrUnitOfWork.LeaveRepository.Add(wfTrans);
                    }
                }
                else if (request.CalcMethod == 2) //time compensation
                {
                    WfViewModel wf = new WfViewModel()
                    {
                        Source         = "AssignOrder2",
                        SourceId       = request.CompanyId,
                        DocumentId     = request.Id,
                        RequesterEmpId = request.EmpId,
                        ApprovalStatus = 6,
                        CreatedUser    = UserName,
                    };

                    var wfTrans = _hrUnitOfWork.LeaveRepository.AddWorkFlow(wf, Language);
                    if (wfTrans == null && wf.WorkFlowStatus != "Success")
                    {
                        request.ApprovalStatus = 1;
                        message += "," + (new JavaScriptSerializer()).Serialize(new { model = request, error = wf.WorkFlowStatus });

                        _hrUnitOfWork.LeaveRepository.AttachAssignOrder(request);
                        _hrUnitOfWork.LeaveRepository.EntryAssignOrder(request).State = EntityState.Modified;
                    }
                    else if (wfTrans != null)
                    {
                        _hrUnitOfWork.LeaveRepository.Add(wfTrans);
                    }
                }

                errors = Save(Language);
                if (errors.Count > 0)
                {
                    message = errors.First().errors.First().message;
                }
            }
            //end workflow

            if (message == "OK")
            {
                message += "," + ((new JavaScriptSerializer()).Serialize(request));
            }

            return(Json(message));
        }
        public ActionResult Details(RenewRequestViewModel model, OptionsViewModel moreInfo)
        {
            List <Error> errors = new List <Error>();

            if (ModelState.IsValid)
            {
                if (ServerValidationEnabled)
                {
                    errors = _hrUnitOfWork.CompanyRepository.CheckForm(new CheckParm
                    {
                        CompanyId    = CompanyId,
                        ObjectName   = "RenewRequest",
                        TableName    = "RenewRequests",
                        Columns      = Models.Utils.GetColumnViews(ModelState.Where(a => !a.Key.Contains('.'))),
                        ParentColumn = "CompanyId",
                        Culture      = Language
                    });

                    if (errors.Count() > 0)
                    {
                        foreach (var e in errors)
                        {
                            foreach (var errorMsg in e.errors)
                            {
                                ModelState.AddModelError(errorMsg.field, errorMsg.message);
                            }
                        }
                        return(Json(Models.Utils.ParseFormErrors(ModelState)));
                    }
                }
            }
            else
            {
                return(Json(Models.Utils.ParseFormErrors(ModelState)));
            }

            RenewRequest request = _hrUnitOfWork.PeopleRepository.Getrequest(model.Id);
            byte         version;

            byte.TryParse(Request.Form["version"], out version);
            string message = "OK";

            if (model.Id == 0)
            {
                request = new RenewRequest();
                //if (model.ColumnName== "QualificationId")
                //{
                //    model.OldValueId = int.Parse(model.OldValue);
                //    model.NewValueId = int.Parse(model.NewValue);
                //    model.NewValue= _hrUnitOfWork.QualificationRepository.GetAll().Where(qq => qq.Id == int.Parse(model.NewValue)).FirstOrDefault().Name;
                //    model.OldValue = _hrUnitOfWork.QualificationRepository.GetAll().Where(qq => qq.Id == int.Parse(model.OldValue)).FirstOrDefault().Name;
                //}
                //if (model.ColumnName == "MaritalStat")
                //{
                //    model.OldValueId = int.Parse(model.OldValue);
                //    model.NewValueId = int.Parse(model.NewValue);
                //    model.NewValue = _hrUnitOfWork.LookUpRepository.GetLookUpUserCodes("MaritalStat", Language).Where(qq => qq.CodeId == int.Parse(model.NewValue)).FirstOrDefault().Name;
                //    model.OldValue = _hrUnitOfWork.LookUpRepository.GetLookUpUserCodes("MaritalStat", Language).Where(qq => qq.CodeId == int.Parse(model.OldValue)).FirstOrDefault().Name;
                //}
                request.EmpId = EmpId;
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = request, Version = version, ObjectName = "RenewRequest", Options = moreInfo, Transtype = TransType.Insert
                };
                AutoMapper(parms);

                request.ApprovalStatus = 2;
                request.CreatedUser    = UserName;
                request.CreatedTime    = DateTime.Now;
                _hrUnitOfWork.PeopleRepository.Add(request);
            }
            else
            {
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = request, Version = version, ObjectName = "RenewRequest", Options = moreInfo, Transtype = TransType.Update
                };
                AutoMapper(parms);
                _hrUnitOfWork.PeopleRepository.Attach(request);
                _hrUnitOfWork.PeopleRepository.Entry(request).State = EntityState.Modified;
            }

            var Errors = SaveChanges(Language);

            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
                return(Json(message));
            }
            if (message == "OK")
            {
                message += "," + ((new JavaScriptSerializer()).Serialize(request));
            }

            var js = Json(message);

            return(Json(message));
        }
Beispiel #11
0
        public ActionResult SaveBenefitSettlement(BenefitRequestFollowUp model, OptionsViewModel moreInfo)
        {
            List <Error> errors = new List <Error>();

            if (ModelState.IsValid)
            {
                if (ServerValidationEnabled)
                {
                    errors = _hrUnitOfWork.CompanyRepository.CheckForm(new CheckParm
                    {
                        CompanyId    = CompanyId,
                        ObjectName   = "acceptedMedical",
                        TableName    = "BenefitRequests",
                        Columns      = Models.Utils.GetColumnViews(ModelState.Where(a => !a.Key.Contains('.'))),
                        ParentColumn = "CompanyId",
                        Culture      = Language
                    });

                    if (errors.Count() > 0)
                    {
                        foreach (var e in errors)
                        {
                            foreach (var errorMsg in e.errors)
                            {
                                ModelState.AddModelError(errorMsg.field, errorMsg.message);
                            }
                        }
                        return(Json(Models.Utils.ParseFormErrors(ModelState)));
                    }
                }
            }
            else
            {
                return(Json(Models.Utils.ParseFormErrors(ModelState)));
            }
            BenefitRequest request = _hrUnitOfWork.MedicalRepository.Get(model.Id);
            byte           version;

            byte.TryParse(Request.Form["version"], out version);
            string message       = "OK";
            var    benefitplanId = _hrUnitOfWork.MedicalRepository.GetBenefitPlanId(model.ParentId, model.EmpId, model.BeneficiaryId);

            if (request == null)
            { /// New
                request = new BenefitRequest();
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source      = model,
                    Destination = request,
                    Version     = version,
                    ObjectName  = "acceptedMedical",
                    Options     = moreInfo,
                    Transtype   = TransType.Insert
                };
                AutoMapper(parms);
                request.ApprovalStatus = 6;
                request.CreatedUser    = UserName;
                request.CreatedTime    = DateTime.Now;
                request.RequestDate    = DateTime.Now;
                request.BenefitPlanId  = benefitplanId;
                request.CompanyId      = CompanyId;
                if (model.IssueDate != null)
                {
                    var Subperiod = _hrUnitOfWork.MedicalRepository.GetMedicalPeriodId(benefitplanId, (DateTime)model.IssueDate);
                    request.SubPeriodId = Subperiod;
                }
                _hrUnitOfWork.MedicalRepository.Add(request);
            }
            else if (request != null)
            { /// Edit
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source      = model,
                    Destination = request,
                    Version     = version,
                    ObjectName  = "MedicalRequestsForm",
                    Options     = moreInfo,
                    Transtype   = TransType.Update
                };
                AutoMapper(parms);
                request.ApprovalStatus = model.ApprovalStatus;
                request.ModifiedUser   = UserName;
                request.ModifiedTime   = DateTime.Now;
                request.RequestDate    = model.RequestDate;
                if (request.SubPeriodId == null)
                {
                    var coverageAmount = _hrUnitOfWork.Repository <BenefitPlan>().Where(a => a.Id == request.BenefitPlanId).Select(a => a.CoverAmount).FirstOrDefault();
                    var coverAmount    = coverageAmount == null ? 0 : coverageAmount;
                }
                else
                {
                }
                _hrUnitOfWork.MedicalRepository.Attach(request);
                _hrUnitOfWork.MedicalRepository.Entry(request).State = System.Data.Entity.EntityState.Modified;
            }

            var Errors = SaveChanges(Language);

            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
                return(Json(message));
            }

            return(Json(message));
        }
Beispiel #12
0
        public ActionResult SaveMedical(MedicalRequestViewModel model, OptionsViewModel moreInfo)
        {
            List <Error> errors = new List <Error>();

            if (ModelState.IsValid)
            {
                if (ServerValidationEnabled)
                {
                    errors = _hrUnitOfWork.CompanyRepository.CheckForm(new CheckParm
                    {
                        CompanyId    = CompanyId,
                        ObjectName   = "MedicalRequestsForm",
                        TableName    = "MedicalRequests",
                        Columns      = Models.Utils.GetColumnViews(ModelState.Where(a => !a.Key.Contains('.'))),
                        ParentColumn = "CompanyId",
                        Culture      = Language
                    });

                    if (errors.Count() > 0)
                    {
                        foreach (var e in errors)
                        {
                            foreach (var errorMsg in e.errors)
                            {
                                ModelState.AddModelError(errorMsg.field, errorMsg.message);
                            }
                        }
                        return(Json(Models.Utils.ParseFormErrors(ModelState)));
                    }
                }
            }
            else
            {
                return(Json(Models.Utils.ParseFormErrors(ModelState)));
            }
            BenefitRequest request = _hrUnitOfWork.MedicalRepository.Get(model.Id);
            byte           version;

            byte.TryParse(Request.Form["version"], out version);
            string message       = "OK";
            var    benefitplanId = _hrUnitOfWork.MedicalRepository.GetBenefitPlanId(model.ParentId, model.EmpId, model.BeneficiaryId);

            ///Save
            if (model.Id == 0)
            { /// New
                request = new BenefitRequest();
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = request, Version = version, ObjectName = "MedicalRequestsForm", Options = moreInfo, Transtype = TransType.Insert
                };
                AutoMapper(parms);
                request.BenefitPlanId  = benefitplanId;
                request.ApprovalStatus = (byte)(model.submit == true ? 2 : 1); //1- New, 2- Submit
                request.CreatedUser    = UserName;
                request.CreatedTime    = DateTime.Now;
                request.RequestDate    = DateTime.Now;
                request.CompanyId      = CompanyId;
                _hrUnitOfWork.MedicalRepository.Add(request);
            }
            else if (model.ApprovalStatus == 3 || model.ApprovalStatus == 1)
            { /// Edit
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = request, Version = version, ObjectName = "MedicalRequestsForm", Options = moreInfo, Transtype = TransType.Update
                };
                AutoMapper(parms);
                if (model.submit)
                {
                    _hrUnitOfWork.TrainingRepository.AddTrail(new AddTrailViewModel()
                    {
                        ColumnName  = "ApprovalStatus",
                        CompanyId   = CompanyId,
                        ObjectName  = "ComplainRequests",
                        SourceId    = request.Id.ToString(),
                        UserName    = UserName,
                        Version     = 0,
                        ValueAfter  = MsgUtils.Instance.Trls("Submit"),
                        ValueBefore = MsgUtils.Instance.Trls("Darft")
                    });
                }
                request.BenefitPlanId  = benefitplanId == 0 ? model.BenefitPlanId : benefitplanId;
                request.ApprovalStatus = (byte)(model.submit == true ? 2 : model.ApprovalStatus); //1- New, 2- Submit
                request.ModifiedUser   = UserName;
                request.ModifiedTime   = DateTime.Now;
                request.RequestDate    = DateTime.Now;
                _hrUnitOfWork.MedicalRepository.Attach(request);
                _hrUnitOfWork.MedicalRepository.Entry(request).State = System.Data.Entity.EntityState.Modified;
            }

            var Errors = SaveChanges(Language);

            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
                return(Json(message));
            }

            if (model.submit)
            {
                var chkWorkFlow = _hrUnitOfWork.Repository <Workflow>().Where(w => w.Source == "Medical").Select(a => a.IsRequired).FirstOrDefault();
                if (chkWorkFlow == true)
                {
                    WfViewModel wf = new WfViewModel()
                    {
                        Source         = "Medical",
                        SourceId       = CompanyId,
                        DocumentId     = request.Id,
                        RequesterEmpId = request.EmpId,
                        ApprovalStatus = 2,
                        CreatedUser    = UserName,
                    };
                    var wfTrans = _hrUnitOfWork.ComplaintRepository.AddWorkFlow(wf, Language);
                    if (wfTrans == null && wf.WorkFlowStatus != "Success")
                    {
                        request.ApprovalStatus = 1;
                        _hrUnitOfWork.MedicalRepository.Attach(request);
                        _hrUnitOfWork.MedicalRepository.Entry(request).State = System.Data.Entity.EntityState.Modified;
                        message = wf.WorkFlowStatus;
                    }
                    else if (wfTrans != null)
                    {
                        _hrUnitOfWork.LeaveRepository.Add(wfTrans);
                    }
                }
            }
            else
            {
                request.ApprovalStatus = 1;
                _hrUnitOfWork.MedicalRepository.Attach(request);
                _hrUnitOfWork.MedicalRepository.Entry(request).State = System.Data.Entity.EntityState.Modified;
            }

            Errors = SaveChanges(Language);
            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
            }

            return(Json(message));
        }
        public IHttpActionResult SaveTermination(TerminationFormViewModel model)
        {
            List <Model.ViewModel.Error> errors = new List <Model.ViewModel.Error>();

            if (!ModelState.IsValid)
            {
                return(Json(Utils.ParseFormError(ModelState)));
            }


            string message = "Ok";

            model.EmpId = User.Identity.GetEmpId();
            model.EmpId = 1042;

            var Term = _hrUnitOfWork.TerminationRepository.Get(model.Id);

            if (Term == null) // New
            {
                Term = new Termination();

                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = Term
                };
                AutoMapper(parms);
                Term.CreatedTime = DateTime.Now;
                Term.CreatedUser = User.Identity.Name;
                Term.RequestDate = DateTime.Now;
                if (model.Excute)
                {
                    Term.ApprovalStatus = 2;
                }
                _hrUnitOfWork.TerminationRepository.Add(Term);
            }
            else // Edit
            {
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = Term
                };
                AutoMapper(parms);
                Term.ModifiedTime = DateTime.Now;
                Term.ModifiedUser = User.Identity.Name;
                if (model.Excute)
                {
                    Term.ApprovalStatus = 2;
                }
                _hrUnitOfWork.TerminationRepository.Attach(Term);
                _hrUnitOfWork.TerminationRepository.Entry(Term).State = EntityState.Modified;
            }
            if (model.Excute)
            {
                string error = AddWFTrans(Term, null, null);
                if (error.Length > 0)
                {
                    return(Json(error));
                }

                var checklist = _hrUnitOfWork.CheckListRepository.GetTermCheckLists(User.Identity.GetDefaultCompany());
                if (checklist != null)
                {
                    EmpChkList EmpList = _hrUnitOfWork.CheckListRepository.AddEmpChlst(checklist, User.Identity.Name, Term.EmpId, User.Identity.GetDefaultCompany());
                    _hrUnitOfWork.CheckListRepository.Add(EmpList);
                    var checkTask = _hrUnitOfWork.CheckListRepository.ReadCheckListTask(checklist.Id).ToList();
                    if (checkTask.Count > 0)
                    {
                        _hrUnitOfWork.CheckListRepository.AddEmpTask(checkTask, User.Identity.Name, EmpList);
                    }
                }
            }
            try
            {
                _hrUnitOfWork.Save();
            }
            catch (Exception ex)
            {
                message = _hrUnitOfWork.HandleDbExceptions(ex, User.Identity.GetLanguage());
                if (message.Length > 0)
                {
                    return(Ok(message));
                }
            }

            return(Ok(message));
        }
        public ActionResult Details(LeaveOpViewModel model, OptionsViewModel moreInfo)
        {
            List <Error> errors = new List <Error>();

            if (ModelState.IsValid)
            {
                if (ServerValidationEnabled)
                {
                    errors = _hrUnitOfWork.CompanyRepository.CheckForm(new CheckParm
                    {
                        CompanyId    = CompanyId,
                        ObjectName   = "LeaveRequestForm",
                        TableName    = "LeaveRequests",
                        Columns      = Models.Utils.GetColumnViews(ModelState.Where(a => !a.Key.Contains('.'))),
                        ParentColumn = "CompanyId",
                        Culture      = Language
                    });

                    if (errors.Count() > 0)
                    {
                        foreach (var e in errors)
                        {
                            foreach (var errorMsg in e.errors)
                            {
                                ModelState.AddModelError(errorMsg.field, errorMsg.message);
                            }
                        }
                        return(Json(Models.Utils.ParseFormErrors(ModelState)));
                    }
                }
            }
            else
            {
                return(Json(Models.Utils.ParseFormErrors(ModelState)));
            }

            //Btn: 1.Edit, 2.Cancel, 3.Break
            string field = null;

            if (model.btn == 1 && model.EditedStartDate == null)
            {
                field = "EditedStartDate";
            }
            else if (model.btn == 2 && model.CancelReason == null)
            {
                field = "CancelReason";
            }
            else if (model.btn == 3 && model.BreakReturnDate == null)
            {
                field = "BreakReturnDate";
            }

            if (field != null)
            {
                ModelState.AddModelError(field, MsgUtils.Instance.Trls("Required"));
                return(Json(Models.Utils.ParseFormErrors(ModelState)));
            }

            LeaveRequest request = _hrUnitOfWork.LeaveRepository.Get(model.Id);

            byte version;

            byte.TryParse(Request.Form["version"], out version);
            string message = "OK";

            AutoMapperParm parms = new AutoMapperParm()
            {
                Source = model, Destination = request, Version = version, ObjectName = "LeaveRequest", Options = moreInfo, Transtype = TransType.Update
            };

            AutoMapper(parms);

            ///Btn: 1.Edit, 2.Cancel, 3.Break
            if (model.btn == 1)  //Edit
            {
                AddTrail(request.Id, "ActualStartDate", model.EditedStartDate.ToString(), request.ActualStartDate.ToString());
                AddTrail(request.Id, "ActualEndDate", model.EditedEndDate.ToString(), request.ActualEndDate.ToString());

                DateTime oldStartDate = request.ActualStartDate.GetValueOrDefault();
                request.ActualStartDate = model.EditedStartDate;
                request.ActualEndDate   = model.EditedEndDate;

                _hrUnitOfWork.LeaveRepository.AddEditLeaveTrans(request, oldStartDate);
            }
            else if (model.btn == 2) //Cancel
            {
                AddTrail(request.Id, "ApprovalStatus", MsgUtils.Instance.Trls("Cancel after accepted"), MsgUtils.Instance.Trls("Approved"));
                request.ApprovalStatus = 8;

                ///Cancel change assign state
                _hrUnitOfWork.EmployeeRepository.CancelLeaveAssignState(request, UserName, version, Language);
                ///Cancel LeaveTrans
                var msg = _hrUnitOfWork.LeaveRepository.AddCancelLeaveTrans(request, UserName, Language);
                if (msg.Length > 0)
                {
                    return(Json(msg));
                }
            }
            else if (model.btn == 3)  //Break
            {
                AddTrail(request.Id, "ActualEndDate", model.BreakEndDate.ToString(), request.ActualEndDate.ToString());
                AddTrail(request.Id, "ActualNofDays", model.BreakNofDays.ToString(), request.ActualNofDays.ToString());
                float DiffDays = request.ActualNofDays.Value - model.BreakNofDays.Value;

                request.ActualEndDate = model.BreakEndDate;
                request.ActualNofDays = model.BreakNofDays;
                request.ReturnDate    = model.BreakReturnDate;

                ///Brake Leave LeaveTrans
                _hrUnitOfWork.LeaveRepository.AddBreakLeaveTrans(request, DiffDays, UserName);
            }
            request.ModifiedUser = UserName;
            request.ModifiedTime = DateTime.Now;
            _hrUnitOfWork.LeaveRepository.Attach(request);
            _hrUnitOfWork.LeaveRepository.Entry(request).State = EntityState.Modified;

            var Errors = SaveChanges(Language);

            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
            }

            return(Json(message));
        }
Beispiel #15
0
        public ActionResult Details(LeaveReqViewModel model, OptionsViewModel moreInfo, bool clear)
        {
            List <Error> errors = new List <Error>();

            if (ModelState.IsValid)
            {
                if (ServerValidationEnabled)
                {
                    errors = _hrUnitOfWork.CompanyRepository.CheckForm(new CheckParm
                    {
                        CompanyId    = CompanyId,
                        ObjectName   = "LeaveRequest",
                        TableName    = "LeaveRequests",
                        Columns      = Models.Utils.GetColumnViews(ModelState.Where(a => !a.Key.Contains('.'))),
                        ParentColumn = "CompanyId",
                        Culture      = Language
                    });

                    if (errors.Count() > 0)
                    {
                        foreach (var e in errors)
                        {
                            foreach (var errorMsg in e.errors)
                            {
                                ModelState.AddModelError(errorMsg.field, errorMsg.message);
                            }
                        }
                        return(Json(Models.Utils.ParseFormErrors(ModelState)));
                    }
                }
            }
            else
            {
                return(Json(Models.Utils.ParseFormErrors(ModelState)));
            }

            LeaveRequest request = _hrUnitOfWork.LeaveRepository.Get(model.Id);
            var          type    = _hrUnitOfWork.LeaveRepository.GetLeaveType(model.TypeId);

            byte version;

            byte.TryParse(Request.Form["version"], out version);
            string message = "OK";

            if (type.AllowFraction && model.DayFraction != 0)
            {
                switch (model.DayFraction)
                {
                case 1:
                case 3: model.NofDays = 0.25f; break;

                case 2:
                case 4: model.NofDays = 0.5f; break;
                }
            }

            ///Save
            if (model.Id == 0)
            { /// New
                request             = new LeaveRequest();
                model.BalanceBefore = model.BalBefore;

                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = request, Version = version, ObjectName = "LeaveRequest", Options = moreInfo, Transtype = TransType.Insert
                };
                AutoMapper(parms);
                request.CompanyId      = CompanyId;
                request.PeriodId       = _hrUnitOfWork.LeaveRepository.GetLeaveRequestPeriod(type.CalendarId, request.StartDate, Language, out message);
                request.ApprovalStatus = (byte)(model.submit ? (type.ExWorkflow ? 6 : 2) : 1); //ApprovalStatus 1- New, 2- Submit 6- Approved //AbsenceType 8- Casual
                model.CompanyId        = request.CompanyId;
                model.PeriodId         = request.PeriodId;
                model.ApprovalStatus   = request.ApprovalStatus;

                if (type.ExWorkflow && model.submit)
                {
                    request.ActualStartDate = request.StartDate;
                    request.ActualEndDate   = request.EndDate;
                    request.ActualNofDays   = request.NofDays;
                    model.ActualStartDate   = request.StartDate;
                    model.ActualEndDate     = request.EndDate;
                    model.ActualNofDays     = request.NofDays;
                }

                request.CreatedUser = UserName;
                request.CreatedTime = DateTime.Now;
                _hrUnitOfWork.LeaveRepository.Add(request);

                if (!type.ExWorkflow && !clear && request.ApprovalStatus == 1)
                {
                    model.ForceUpload = _hrUnitOfWork.Repository <RequestWf>().Where(a => a.Source == "Leave" && a.SourceId == type.Id).Select(a => a.ForceUpload).FirstOrDefault() ? 1 : 0;
                }
            }
            else
            { /// Edit
                AutoMapperParm parms = new AutoMapperParm()
                {
                    Source = model, Destination = request, Version = version, ObjectName = "LeaveRequest", Options = moreInfo, Transtype = TransType.Update
                };
                AutoMapper(parms);

                if (model.submit)
                {
                    _hrUnitOfWork.TrainingRepository.AddTrail(new AddTrailViewModel()
                    {
                        ColumnName  = "ApprovalStatus",
                        CompanyId   = CompanyId,
                        ObjectName  = "LeaveRequest",
                        SourceId    = request.Id.ToString(),
                        UserName    = UserName,
                        Version     = Convert.ToByte(Request.Form["Version"]),
                        ValueAfter  = MsgUtils.Instance.Trls("Submit"),
                        ValueBefore = MsgUtils.Instance.Trls("Darft"),
                        Transtype   = (byte)TransType.Update
                    });
                }

                request.ApprovalStatus = (byte)(model.submit ? (type.ExWorkflow ? 6 : 2) : model.ApprovalStatus); //1- New, 2- Submit 6- Approved //AbsenceType 8- Casual
                model.ApprovalStatus   = request.ApprovalStatus;
                request.ModifiedUser   = UserName;
                request.ModifiedTime   = DateTime.Now;
                if (type.ExWorkflow && model.submit)
                {
                    request.ActualStartDate = request.StartDate;
                    request.ActualEndDate   = request.EndDate;
                    request.ActualNofDays   = request.NofDays;
                    model.ActualStartDate   = request.StartDate;
                    model.ActualEndDate     = request.EndDate;
                    model.ActualNofDays     = request.NofDays;
                }

                _hrUnitOfWork.LeaveRepository.Attach(request);
                _hrUnitOfWork.LeaveRepository.Entry(request).State = EntityState.Modified;
            }

            if (model.submit && type.ExWorkflow && request.ApprovalStatus == 1)
            {
                _hrUnitOfWork.LeaveRepository.AddAcceptLeaveTrans(request, UserName);
            }

            // update using transactions
            var trans = _hrUnitOfWork.BeginTransaction();

            // #First save changes
            var Errors = SaveChanges(Language);

            if (Errors.Count > 0)
            {
                message = Errors.First().errors.First().message;
                trans.Rollback();
                trans.Dispose();

                // return string error message
                return(Json(message));
            }

            model.Id = request.Id;
            if (model.submit) //Casual  && type.AbsenceType != 8
            {
                WfViewModel wf = new WfViewModel()
                {
                    Source         = "Leave",
                    SourceId       = request.TypeId,
                    DocumentId     = request.Id,
                    RequesterEmpId = request.EmpId,
                    ApprovalStatus = 2,
                    CreatedUser    = UserName,
                };

                var wfTrans = _hrUnitOfWork.LeaveRepository.AddWorkFlow(wf, Language);
                if (wfTrans == null && wf.WorkFlowStatus != "Success")
                {
                    request.ApprovalStatus = 1;
                    message += "," + (new JavaScriptSerializer()).Serialize(new { model = request, error = wf.WorkFlowStatus });

                    _hrUnitOfWork.LeaveRepository.Attach(request);
                    _hrUnitOfWork.LeaveRepository.Entry(request).State = EntityState.Modified;
                }
                else if (wfTrans != null)
                {
                    _hrUnitOfWork.LeaveRepository.Add(wfTrans);
                }

                // #Second Save changes
                Errors = Save(Language);
                if (Errors.Count > 0)
                {
                    message = Errors.First().errors.First().message;
                    trans.Rollback();
                    trans.Dispose();

                    // return string error message
                    return(Json(message));
                }
            }

            if (clear)
            {
                model = new LeaveReqViewModel();
            }

            if (message == "OK")
            {
                // send OK,model
                message += "," + ((new JavaScriptSerializer()).Serialize(new { model = model }));
                trans.Commit();
            }

            return(Json(message));
        }