Esempio n. 1
0
        private void start(Period currentPeriod, Period sourcePeriod, IEventPublisher publisher)
        {
            basicDataCopyingProgress.State = new PeriodBasicDataCopying();
            basicDataCopyingProgress.Messages.Add("شروع کپی دوره");
            var preState = currentPeriod.State;
            publisher.OnHandlerError(exp => { basicDataCopyingProgress.Messages.Add(exp.Message); });
            copyCompletedSub = new DelegateHandler<CopyBasicDataCompleted>(
                p =>
                {
                    var srvManagerPeriod = periodServiceFactory.Create();
                    try
                    {
                        var ps = srvManagerPeriod.GetService();
                        ps.CompleteCopyingBasicData(currentPeriod.Id, preState);
                    }
                    finally
                    {
                        IsCopying = false;
                        basicDataCopyingProgress = new BasicDataCopyingProgress();
                        periodServiceFactory.Release(srvManagerPeriod);
                    }
                });
            publisher.RegisterHandler(copyCompletedSub);

            try
            {
                BasicDataCopyingProgress.SetProgress(100, 5);
                deleteAllPeriodData(currentPeriod);
                basicDataCopyingProgress.Messages.Add("اطلاعات پایه پیشین پاک شد.");

                basicDataCopyingProgress.SetProgress(100, 25);
                copyUnits(sourcePeriod, currentPeriod);
                basicDataCopyingProgress.Messages.Add("کپی واحد های سازمانی انجام شد.");


                basicDataCopyingProgress.SetProgress(100, 35);
                copyPeriodJobIndices(sourcePeriod, currentPeriod);
                basicDataCopyingProgress.Messages.Add("کپی شاخص ها انجام شد.");

                basicDataCopyingProgress.SetProgress(100, 45);
                copyJobs(sourcePeriod, currentPeriod);
                basicDataCopyingProgress.Messages.Add("کپی شغل ها انجام شد.");
                basicDataCopyingProgress.SetProgress(100, 65);

                copyJobPositions(sourcePeriod, currentPeriod);
                basicDataCopyingProgress.Messages.Add("کپی پست ها انجام شد.");
                basicDataCopyingProgress.SetProgress(100, 100);
                basicDataCopyingProgress.Messages.Add("اتمام عملیات کپی دوره.");
                lastPeriod=new KeyValuePair<PeriodId,List<string>>(currentPeriod.Id, basicDataCopyingProgress.Messages);
                publisher.Publish(new CopyBasicDataCompleted(currentPeriod,preState));
            }
            catch (Exception ex)
            {
                basicDataCopyingProgress.Messages.Add("خطا در کپی اطلاعات " + ex.Message);
                var logServiceMngt = LogServiceFactory.Create();
                try
                {
                    var logService = logServiceMngt.GetService();
                    logService.AddEventLog("Copy Exception",
                        LogLevel.Error,
                        null, this.GetType().Name, "start", ex.Message, ex.StackTrace);
                    logService.AddExceptionLog(ex);
                }
                finally
                {
                    LogServiceFactory.Release(logServiceMngt);
                }
                IsCopying = false;
                basicDataCopyingProgress = new BasicDataCopyingProgress();
            }
        }
        public void Configure(Period period, IEventPublisher publisher)
        {
            if (!IsRunning)
            {
                isRunning = true;
                inquiryInitializingProgress.State = new PeriodInitializingForInquiryState();
                inquiryInitializingProgress.Messages.Add("شروع آماده سازی دوره");

                #region JobPosition

                var jobPositionIds = new List <JobPositionId>();
                var srvManagerJob  = jobPositionServiceFactory.Create();
                try
                {
                    var jpService = srvManagerJob.GetService();
                    jobPositionIds = jpService.GetAllJobPositionId(period);
                }
                catch (Exception exp)
                {
                    isRunning = false;
                    inquiryInitializingProgress.State = new PeriodInitializingForInquiryState();
                    throw exp;
                }
                finally
                {
                    jobPositionServiceFactory.Release(srvManagerJob);
                }

                var jobPositionTotalCount = jobPositionIds.Count();

                #endregion

                #region Unit

                var unitIds        = new List <UnitId>();
                var srvManagerUnit = unitServiceFactory.Create();
                try
                {
                    var uService = srvManagerUnit.GetService();
                    unitIds = uService.GetAllUnitId(period);
                }
                catch (Exception exp)
                {
                    isRunning = false;
                    inquiryInitializingProgress.State = new PeriodInitializingForInquiryState();
                    throw exp;
                }
                finally
                {
                    unitServiceFactory.Release(srvManagerUnit);
                }

                var unitTotalCount = unitIds.Count();

                #endregion

                inquiryInitializingProgress.Messages.Add("تعداد " + jobPositionTotalCount + " پست برای پیکر بندی نظر سنجی آماده می باشد");
                inquiryInitializingProgress.Messages.Add("تعداد " + unitTotalCount + " واحد برای پیکر بندی نظر سنجی آماده می باشد");

                var totalCount = jobPositionTotalCount + unitTotalCount;

                Task.Factory.StartNew(() =>
                {
                    try
                    {
                        #region JobPosition

                        long jobPositionIndex = 0;
                        foreach (var jobPositionId in jobPositionIds)
                        {
                            JobPosition jobPosition;
                            var srvManagerJobPosition = jobPositionServiceFactory.Create();
                            try
                            {
                                var jps     = srvManagerJobPosition.GetService();
                                jobPosition = jps.ConfigureInquiry(jobPositionId, true);
                                var dummy   = jobPosition.ConfigurationItemList;
                            }
                            finally
                            {
                                jobPositionServiceFactory.Release(srvManagerJobPosition);
                            }


                            foreach (var itm in jobPosition.ConfigurationItemList)
                            {
                                var srvManagerInquiry = inquiryServiceFactory.Create();

                                try
                                {
                                    var iqs = srvManagerInquiry.GetService();
                                    iqs.CreateAllInquiryJobIndexPoint(itm);
                                }
                                finally
                                {
                                    inquiryServiceFactory.Release(srvManagerInquiry);
                                }
                            }
                            jobPositionIndex++;
                            inquiryInitializingProgress.SetProgress(totalCount, jobPositionIndex);
                        }

                        #endregion

                        #region Unit

                        long unitIndex = 0;
                        foreach (var unitId in unitIds)
                        {
                            Unit unit;
                            var srvManagerUnitInquiry = unitServiceFactory.Create();
                            try
                            {
                                var us    = srvManagerUnitInquiry.GetService();
                                unit      = us.GetUnitBy(unitId);
                                var dummy = unit.ConfigurationItemList;
                            }
                            finally
                            {
                                unitServiceFactory.Release(srvManagerUnitInquiry);
                            }


                            foreach (var itm in unit.ConfigurationItemList)
                            {
                                var srvManagerUnitInquiry2 = unitInquiryServiceFactory.Create();

                                try
                                {
                                    var iqs = srvManagerUnitInquiry2.GetService();
                                    iqs.CreateAllInquiryUnitIndexPoint(itm);
                                }
                                finally
                                {
                                    unitInquiryServiceFactory.Release(srvManagerUnitInquiry2);
                                }
                            }
                            unitIndex++;
                            inquiryInitializingProgress.SetProgress(totalCount, unitIndex);
                        }

                        #endregion

                        inquiryInitializingProgress.Messages.Add("اتمام آماده سازی دوره برای نظر سنجی");

                        var serviceManager = periodServiceFactory.Create();
                        try
                        {
                            var ps = serviceManager.GetService();
                            ps.CompleteInitializeInquiry(period.Id);
                        }
                        catch (Exception exp)
                        {
                            throw exp;
                        }
                        finally
                        {
                            isRunning = false;
                            inquiryInitializingProgress = new InquiryInitializingProgress();
                            periodServiceFactory.Release(serviceManager);
                        }
                    }
                    catch (Exception exp)
                    {
                        isRunning = false;
                        inquiryInitializingProgress.State = new PeriodInitializingForInquiryState();
                        throw exp;
                    }
                });
            }
        }