private IEnumerator loadScene()
    {
        yield return(SceneManager.LoadSceneAsync(SceneNames[(int)NextFlow]));

        _OnChangeFlowEvent?.Invoke(true);

        switch (_State)
        {
        case FlowState.NextAsyncLoading:
        {
            FlowHistory.Add(NextFlow);
            if (FlowHistory.Count >= _FLOW_HISTORY_NUM)
            {
                FlowHistory.RemoveAt(0);
            }
        }
        break;

        case FlowState.BackAsyncLoading:
        {
            FlowHistory.RemoveAt(FlowHistory.Count - 1);
        }
        break;
        }

        _State      = FlowState.Idle;
        CurrentFlow = NextFlow;
        NextFlow    = Flow.None;
    }
        public async Task <VerifyRecordResult> DeleteAsync(int id)
        {
            try
            {
                CleanTrackingHelper.Clean <FlowHistory>(context);
                FlowHistory item = await context.FlowHistory
                                   .AsNoTracking()
                                   .FirstOrDefaultAsync(x => x.Id == id);

                if (item == null)
                {
                    return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.無法刪除紀錄));
                }
                else
                {
                    CleanTrackingHelper.Clean <FlowHistory>(context);
                    context.Entry(item).State = EntityState.Deleted;
                    await context.SaveChangesAsync();

                    CleanTrackingHelper.Clean <FlowHistory>(context);
                    return(VerifyRecordResultFactory.Build(true));
                }
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "刪除記錄發生例外異常");
                return(VerifyRecordResultFactory.Build(false, "刪除記錄發生例外異常", ex));
            }
        }
        public async Task <VerifyRecordResult> UpdateAsync(FlowHistoryAdapterModel paraObject)
        {
            try
            {
                FlowHistory itemData = Mapper.Map <FlowHistory>(paraObject);
                CleanTrackingHelper.Clean <FlowHistory>(context);
                FlowHistory item = await context.FlowHistory
                                   .AsNoTracking()
                                   .FirstOrDefaultAsync(x => x.Id == paraObject.Id);

                if (item == null)
                {
                    return(VerifyRecordResultFactory.Build(false, ErrorMessageEnum.無法修改紀錄));
                }
                else
                {
                    CleanTrackingHelper.Clean <FlowHistory>(context);
                    context.Entry(itemData).State = EntityState.Modified;
                    await context.SaveChangesAsync();

                    CleanTrackingHelper.Clean <FlowHistory>(context);
                    return(VerifyRecordResultFactory.Build(true));
                }
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "修改記錄發生例外異常");
                return(VerifyRecordResultFactory.Build(false, "修改記錄發生例外異常", ex));
            }
        }
        public async Task <FlowHistoryAdapterModel> GetAsync(int id)
        {
            FlowHistory item = await context.FlowHistory
                               .AsNoTracking()
                               .Include(x => x.MyUser)
                               .FirstOrDefaultAsync(x => x.Id == id);

            FlowHistoryAdapterModel result = Mapper.Map <FlowHistoryAdapterModel>(item);

            await OhterDependencyData(result);

            return(result);
        }
 public void Next(Flow nextFlow)
 {
     if (_State != FlowState.Idle)
     {
         return;
     }
     if (((int)nextFlow < 0) || ((int)nextFlow >= SceneNames.Length))
     {
         return;
     }
     SceneManager.LoadScene(SceneNames[(int)nextFlow], LoadSceneMode.Single);
     FlowHistory.Add(nextFlow);
     if (FlowHistory.Count >= _FLOW_HISTORY_NUM)
     {
         FlowHistory.RemoveAt(0);
     }
 }
        public async Task AddHistoryRecord(MyUserAdapterModel myUserAdapterModel,
                                           FlowMasterAdapterModel flowMasterAdapterModel, string Summary, string Comment,
                                           bool approve)
        {
            FlowHistory history = new FlowHistory()
            {
                Comment      = Comment,
                Summary      = Summary,
                Updatetime   = DateTime.Now,
                FlowMasterId = flowMasterAdapterModel.Id,
                MyUserId     = myUserAdapterModel.Id,
                Approve      = approve,
            };
            await context.FlowHistory.AddAsync(history);

            await context.SaveChangesAsync();
        }
    public void Back()
    {
        if (_State != FlowState.Idle)
        {
            return;
        }
        if (FlowHistory.Count < 1)
        {
            return;
        }
        int index = FlowHistory.Count - 1;
        var next  = FlowHistory[index];

        if (((int)next < 0) || ((int)next >= SceneNames.Length))
        {
            return;
        }
        SceneManager.LoadScene(SceneNames[(int)next]);
        FlowHistory.RemoveAt(index);
    }
        public async Task <VerifyRecordResult> AddAsync(FlowHistoryAdapterModel paraObject)
        {
            try
            {
                FlowHistory itemParameter = Mapper.Map <FlowHistory>(paraObject);
                CleanTrackingHelper.Clean <FlowHistory>(context);
                await context.FlowHistory
                .AddAsync(itemParameter);

                await context.SaveChangesAsync();

                CleanTrackingHelper.Clean <FlowHistory>(context);
                return(VerifyRecordResultFactory.Build(true));
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "新增記錄發生例外異常");
                return(VerifyRecordResultFactory.Build(false, "新增記錄發生例外異常", ex));
            }
        }
        public async Task <VerifyRecordResult> AddAsync(FlowMasterAdapterModel paraObject)
        {
            try
            {
                CleanTrackingHelper.Clean <FlowMaster>(context);
                CleanTrackingHelper.Clean <FlowUser>(context);
                CleanTrackingHelper.Clean <FlowHistory>(context);
                CleanTrackingHelper.Clean <MyUser>(context);
                FlowMaster itemParameter = Mapper.Map <FlowMaster>(paraObject);
                CleanTrackingHelper.Clean <FlowMaster>(context);
                await context.FlowMaster
                .AddAsync(itemParameter);

                await context.SaveChangesAsync();

                #region 產生要審核的使用者清單
                var user = await context.MyUser
                           .FirstOrDefaultAsync(x => x.Id == itemParameter.MyUserId);

                FlowUser auditUser = new FlowUser()
                {
                    MyUserId     = itemParameter.MyUserId,
                    FlowMasterId = itemParameter.Id,
                    Enable       = true,
                    Level        = 0,
                    OnlyCC       = false,
                    Name         = "發文者",
                };
                await context.FlowUser.AddAsync(auditUser);

                var policyDetails = await context.PolicyDetail
                                    .Where(x => x.PolicyHeaderId == paraObject.PolicyHeaderId)
                                    .OrderBy(x => x.Level)
                                    .ToListAsync();

                foreach (var item in policyDetails)
                {
                    if (item.Enable == false)
                    {
                        continue;
                    }
                    auditUser = new FlowUser()
                    {
                        MyUserId     = item.MyUserId,
                        FlowMasterId = itemParameter.Id,
                        Enable       = true,
                        Level        = item.Level,
                        OnlyCC       = item.OnlyCC,
                        Name         = item.Name,
                    };
                    await context.FlowUser.AddAsync(auditUser);
                }

                itemParameter.NextMyUserName = user.Name;
                context.FlowMaster.Update(itemParameter);
                await context.SaveChangesAsync();

                #endregion

                #region 增加簽核流程歷史紀錄 - 建立簽核表單
                FlowHistory history = new FlowHistory()
                {
                    FlowMasterId = itemParameter.Id,
                    MyUserId     = itemParameter.MyUserId,
                    Approve      = true,
                    Summary      = $"{user.Account} / {user.Name} 建立簽核表單",
                    Comment      = $"簽核單草稿",
                    Updatetime   = DateTime.Now,
                };
                await context.FlowHistory.AddAsync(history);

                await context.SaveChangesAsync();

                #endregion

                CleanTrackingHelper.Clean <FlowMaster>(context);
                CleanTrackingHelper.Clean <FlowUser>(context);
                CleanTrackingHelper.Clean <FlowHistory>(context);
                CleanTrackingHelper.Clean <MyUser>(context);
                return(VerifyRecordResultFactory.Build(true));
            }
            catch (Exception ex)
            {
                Logger.LogError(ex, "新增記錄發生例外異常");
                return(VerifyRecordResultFactory.Build(false, "新增記錄發生例外異常", ex));
            }
        }