Esempio n. 1
0
        public Eva_PerformanceEntity AddPerfomance360(Eva_PerformanceEntity model, bool isSelft)
        {
            /*
            *  Goal(Luu đánh giá nhân viên)
            *  Steps :
            *      Step1  :  Insert Eva_Performance
            *      Step2  :  Tự động insert xuống table Eva_PerformanceForDetail
            *      Step3  :  Tự động insert xuống table Eva_PerformanceEva &Eva_PerformanceEvaDetail 
            *                  - Tự Đánh Giá : orderNo =0 (Ngoai ra orderNo >0)
             
            */


            var evaluationStatus = PerformaceEvaStatus.E_WAITING.ToString();
            var result = new Eva_PerformanceEntity();
            var performanceForDetail = new Eva_PerformanceForDetail();
            var performanceEva = new Eva_PerformanceEva();
            var performanceEvaDetail = new Eva_PerformanceEvaDetail();

            using (var context = new VnrHrmDataContext())
            {
                var unitOfWork = (IUnitOfWork)(new UnitOfWork(context));
                var repoPerformance = new Eva_PerformanceRepository(unitOfWork);
                var repoEvaluator = new Eva_EvaluatorRepository(unitOfWork);
                var repoPerformanceForDetail = new Eva_PerformanceForDetailRepository(unitOfWork);
                var repoPerformanceEva = new Eva_PerformanceEvaRepository(unitOfWork);
                var repoPerformanceEvaDetail = new Eva_PerformanceEvaDetailRepository(unitOfWork);

                #region step1 : thêm Eva_Performance
                result = model;
                if (result != null && result.ID == Guid.Empty)
                {
                    result.Status = evaluationStatus;
                }
                Add(result);
                #endregion

                #region Step2  :  Tự động insert xuống table Eva_PerformanceForDetail dựa vào các KPI tương ứng

                //lay ds KPIs (kèm theo Marks và Evaluation) - lay dữ liệu từ edit trên lưới
                var kpis = model.KPIs;//cac tieu chi danh gia
                var kpiByTempalateIds = kpis;

                var lstPerformanceForDetails = new List<Eva_PerformanceForDetail>();
                foreach (var kpiByTempalateId in kpiByTempalateIds)
                {
                    performanceForDetail = new Eva_PerformanceForDetail();
                    performanceForDetail.ID = Guid.NewGuid();
                    if (result != null)
                    {
                        performanceForDetail.PerformanceID = result.ID;
                    }
                    performanceForDetail.KPIID = kpiByTempalateId.ID;
                    performanceForDetail.KPIName = kpiByTempalateId.KPIName;
                    performanceForDetail.OrderKPI = kpiByTempalateId.OrderNumber;
                    performanceForDetail.OrderNumber = kpiByTempalateId.OrderNumber;
                    performanceForDetail.Rate = kpiByTempalateId.Rate;
                    lstPerformanceForDetails.Add(performanceForDetail);
                    repoPerformanceForDetail.Add(performanceForDetail);//add vao repo
                }
                repoPerformanceForDetail.SaveChanges();
                #endregion

                #region Step3  :  Tự động insert xuống table Eva_PerformanceEva &Eva_PerformanceEvaDetail

                #region Luu bảng Eva_PerformanceEva (cho từng người đánh giá)

                var lstPerformanceEvaIDs = new List<Guid>();
                int orderNo = 1;
                var performanceEvaSeftId = Guid.Empty;//ID cua bang Eva_PerformanceEva

                #region Tự đánh giá : tự động add 1 người đánh giá là chính bảng thân người tạo bảng đánh giá
                if (isSelft && result != null && model != null && model.ProfileID != Guid.Empty)
                {
                    //tu tao nguoi danh gia la ban than
                    performanceEva = new Eva_PerformanceEva();
                    performanceEva.ID = Guid.NewGuid();
                    performanceEvaSeftId = performanceEva.ID;
                    lstPerformanceEvaIDs.Add(performanceEva.ID);
                    performanceEva.PerformanceID = result.ID;
                    performanceEva.EvaluatorID = model.ProfileID;
                    performanceEva.Status = PerformaceEvaStatus.E_SEFT.ToString();//evaluationStatus;
                    performanceEva.OrderEva = 0;
                    repoPerformanceEva.Add(performanceEva);

                    //cap nhat lai status cua Eva_Performance
                    var performanceEntity = repoPerformance.GetById(result.ID);
                    if (performanceEntity != null)
                    {
                        performanceEntity.Status = PerformaceEvaStatus.E_SEFT.ToString();
                        repoPerformance.SaveChanges();
                    }
                }

                #endregion

                //Lấy ds người đánh giá theo NV và loại đánh giá
                var evaluatorIds = model.EvaluatorIDs;
                var evaluatorObjs = repoEvaluator.FindBy(p => p.IsDelete == null && evaluatorIds.Contains(p.EvaluatorID ?? Guid.Empty)
                    && p.ProfileID == model.ProfileID
                    && p.PerformanceTypeID == model.PerformanceTypeID).ToList();
                evaluatorObjs = evaluatorObjs.OrderBy(p => p.OrderNo).ToList();

                foreach (var evaluator in evaluatorObjs)
                {
                    performanceEva = new Eva_PerformanceEva();
                    performanceEva.ID = Guid.NewGuid();
                    lstPerformanceEvaIDs.Add(performanceEva.ID);
                    if (result != null)
                    {
                        performanceEva.PerformanceID = result.ID;
                    }
                    performanceEva.EvaluatorID = evaluator.EvaluatorID;
                    performanceEva.Status = evaluationStatus;
                    performanceEva.OrderEva = orderNo++;
                    repoPerformanceEva.Add(performanceEva);
                }
                repoPerformanceEva.SaveChanges();
                #endregion
                              
                #region comment Luu Eva_PerformanceEvaDetail (lưu chi tiết cho bảng đánh giá)

                //var isSeft = false;
                ////khởi tạo chi tiet đánh giá cho từng người đánh giá
                //foreach (var performanceEvaID in lstPerformanceEvaIDs)
                //{
                //    //ds cac tieu chí
                //    foreach (var performanceForDetailItem in lstPerformanceForDetails)
                //    {
                //        performanceEvaDetail = new Eva_PerformanceEvaDetail
                //        {
                //            ID = Guid.NewGuid(),
                //            PerfomanceEvaID = performanceEvaID,
                //            PerfomanceDetailID = performanceForDetailItem.ID,
                //            KPIName = performanceForDetailItem.KPIName
                //        };

                //        #region Dành Cho Tự Đánh Giá

                //        if (performanceEvaSeftId != Guid.Empty && performanceEvaSeftId == performanceEvaID)
                //        {
                //            /*Add Mark va Evaluation cho nguoi danh gia la ban than*/
                //            //lay kpi theo name tu model de set data cho Mark va Evaluation

                //            var kpi = kpiByTempalateIds.FirstOrDefault(p => p.KPIName == performanceEvaDetail.KPIName);
                //            if (kpi != null)
                //            {
                //                performanceEvaDetail.Mark = kpi.Mark;
                //                performanceEvaDetail.Evaluation = kpi.Evaluation;
                //            }
                //            //đặt flag là tự đánh giá
                //            isSeft = true;
                //        }
                //        repoPerformanceEvaDetail.Add(performanceEvaDetail);
                //        #endregion
                //    }

                //    if (isSeft)
                //    {
                //        performanceEvaSeftId = Guid.Empty;
                //    }

                //}
                //repoPerformanceEvaDetail.SaveChanges();

                #endregion

                #endregion

            }
            return result;
        }
Esempio n. 2
0
        /// <summary>
        /// truoc khi vào màn hình chờ đánh giá , sẽ thêm vào bảng eva_performanceEvaDetail nếu bảng này chưa có data ứng với performanceID
        /// </summary>
        /// <param name="performanceEvaID"></param>
        /// <returns></returns>
        public bool AddPerformanceEvaDetail360(Guid performanceEvaID) {
            using (var context = new VnrHrmDataContext())
            {
                var unitOfWork = (IUnitOfWork)(new UnitOfWork(context));
                var repoPerformance = new Eva_PerformanceRepository(unitOfWork);
                var repoEvaluator = new Eva_EvaluatorRepository(unitOfWork);
                var repoPerformanceForDetail = new Eva_PerformanceForDetailRepository(unitOfWork);
                var repoPerformanceEva = new Eva_PerformanceEvaRepository(unitOfWork);
                var repoPerformanceEvaDetail = new Eva_PerformanceEvaDetailRepository(unitOfWork);
                var performanceEvaDetail = new Eva_PerformanceEvaDetail();

                #region Lay DS EvaPerformanceEvaDetail
                //neu co du lieu => khong tao moi 
                var lstPerformanceEvaDetail = unitOfWork.CreateQueryable<Eva_PerformanceEvaDetail>(Guid.Empty, m => m.PerfomanceEvaID == performanceEvaID).ToList();
                if (lstPerformanceEvaDetail.Any())
                {
                    return false;
                }
                #endregion
                   
                //lay performanceID
                var performanceEva = unitOfWork.CreateQueryable<Eva_PerformanceEva>(Guid.Empty, m => m.ID == performanceEvaID).FirstOrDefault();
                var performanceID = Guid.Empty;
                if (performanceEva != null && performanceEva.PerformanceID.HasValue)
                {
                    performanceID = performanceEva.PerformanceID.Value;
                }
                else
                {
                    return false;
                }

                #region lay ds eva_performancefordetail theo performanceID
                var lstPerformanceForDetails = unitOfWork.CreateQueryable<Eva_PerformanceForDetail>(Guid.Empty, m => m.PerformanceID == performanceID).ToList();
                #endregion
                                
                #region comment Luu Eva_PerformanceEvaDetail (lưu chi tiết cho bảng đánh giá)

                //khởi tạo chi tiet đánh giá cho người đánh giá
                if (performanceEvaID != Guid.Empty)
                {
                    //ds cac tieu chí
                    foreach (var performanceForDetailItem in lstPerformanceForDetails)
                    {
                        performanceEvaDetail = new Eva_PerformanceEvaDetail
                        {
                            ID = Guid.NewGuid(),
                            PerfomanceEvaID = performanceEvaID,
                            PerfomanceDetailID = performanceForDetailItem.ID,
                            KPIName = performanceForDetailItem.KPIName
                        };
                        repoPerformanceEvaDetail.Add(performanceEvaDetail);                       
                    }
                }
                repoPerformanceEvaDetail.SaveChanges();
                #endregion
            }
            return false;
        }