public async void OnNavigatedTo(INavigationParameters parameters)
        {
            await LoadPickerSourceAsync();

            MasterItem = parameters.GetValue <WorkingLogDto>(MagicStringHelper.MasterRecordActionName);
            var fooObject = parameters.GetValue <WorkingLogDetailDto>(MagicStringHelper.CurrentSelectdItemParameterName);

            SelectedItem     = fooObject;
            CrudAction       = parameters.GetValue <string>(MagicStringHelper.CrudActionName);
            ShowDeleteButton = true;
            if (CrudAction == MagicStringHelper.CrudAddAction)
            {
                ShowDeleteButton = false;
            }

            #region 進行選單初始化
            #region 專案
            if (SelectedItem.ProjectId >= 0)
            {
                ProjectSelectedItem = ProjectItemsSource
                                      .FirstOrDefault(x => x.Id == SelectedItem.ProjectId);
            }
            #endregion
            #endregion
        }
        public async Task <IActionResult> Put([FromRoute] int id, [FromBody] WorkingLogDto data)
        {
            APIResult apiResult;

            #region 驗證 DTO 物件的資料一致性
            if (!ModelState.IsValid)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                   ErrorMessageEnum.傳送過來的資料有問題, payload: data);
                return(Ok(apiResult));
            }
            #endregion

            var record = await WorkingLogService.GetAsync(id);

            if (record != null)
            {
                WorkingLogAdapterModel recordTarget = mapper.Map <WorkingLogAdapterModel>(data);
                recordTarget.Id = id;
                var result = mapper.Map <WorkingLogDto>(recordTarget);

                #region 修改記錄前的紀錄完整性檢查
                VerifyRecordResult verify = await WorkingLogService.BeforeUpdateCheckAsync(record);

                if (verify.Success == false)
                {
                    apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                       ErrorMessageMappingHelper.Instance.GetErrorMessage(verify.MessageId),
                                                       payload: result);
                    return(Ok(apiResult));
                }
                #endregion

                var verifyRecordResult = await WorkingLogService.UpdateAsync(recordTarget);

                if (verifyRecordResult.Success)
                {
                    apiResult = APIResultFactory.Build(true, StatusCodes.Status202Accepted,
                                                       ErrorMessageEnum.None, payload: null);
                }
                else
                {
                    apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                       ErrorMessageEnum.無法修改紀錄, payload: result);
                }
            }
            else
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                   ErrorMessageEnum.沒有任何符合資料存在, payload: data);
            }
            return(Ok(apiResult));
        }
        public async Task <IActionResult> Post([FromBody] WorkingLogDto data)
        {
            APIResult apiResult;

            #region 驗證 DTO 物件的資料一致性
            if (!ModelState.IsValid)
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                   ErrorMessageEnum.傳送過來的資料有問題, payload: null);
                return(Ok(apiResult));
            }
            #endregion

            WorkingLogAdapterModel record = mapper.Map <WorkingLogAdapterModel>(data);
            if (record != null)
            {
                var result = mapper.Map <WorkingLogDto>(record);

                #region 新增記錄前的紀錄完整性檢查
                VerifyRecordResult verify = await WorkingLogService.BeforeAddCheckAsync(record);

                if (verify.Success == false)
                {
                    apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                       ErrorMessageMappingHelper.Instance.GetErrorMessage(verify.MessageId),
                                                       payload: result);
                    return(Ok(apiResult));
                }
                #endregion

                var verifyRecordResult = await WorkingLogService.AddAsync(record);

                if (verifyRecordResult.Success)
                {
                    apiResult = APIResultFactory.Build(true, StatusCodes.Status201Created,
                                                       ErrorMessageEnum.None, payload: result);
                }
                else
                {
                    apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                       ErrorMessageEnum.無法新增紀錄, payload: result);
                }
            }
            else
            {
                apiResult = APIResultFactory.Build(false, StatusCodes.Status200OK,
                                                   ErrorMessageEnum.傳送過來的資料有問題, payload: data);
            }
            return(Ok(apiResult));
        }
 public async void OnNavigatedTo(INavigationParameters parameters)
 {
     if (parameters.GetNavigationMode() == NavigationMode.New)
     {
         MasterItem = parameters.GetValue <WorkingLogDto>(MagicStringHelper.MasterRecordActionName);
         await RefreshData();
     }
     else
     {
         string CrudAction = parameters.GetValue <string>(MagicStringHelper.CrudActionName);
         if (CrudAction == MagicStringHelper.CrudRefreshAction)
         {
             await ReloadData();
         }
     }
 }
        public WorkingLogPageViewModel(INavigationService navigationService, IPageDialogService dialogService,
                                       WorkingLogService workingLogService, ProjectService projectService,
                                       MyUserService myUserService, WorkingLogDetailService workingLogDetailService,
                                       RefreshTokenService refreshTokenService,
                                       SystemStatusService systemStatusService, AppStatus appStatus)
        {
            this.navigationService       = navigationService;
            this.dialogService           = dialogService;
            this.workingLogService       = workingLogService;
            this.projectService          = projectService;
            this.myUserService           = myUserService;
            this.workingLogDetailService = workingLogDetailService;
            this.refreshTokenService     = refreshTokenService;
            this.systemStatusService     = systemStatusService;
            this.appStatus = appStatus;

            #region 新增紀錄
            AddCommand = new DelegateCommand(async() =>
            {
                NavigationParameters paras = new NavigationParameters();
                var fooObject     = new WorkingLogDto();
                fooObject.LogDate = DateTime.Now.Date;

                #region 設定該使用者為預設紀錄申請者
                var myUser = myUserService.Items
                             .FirstOrDefault(x => x.Id == appStatus.SystemStatus.UserID);
                if (myUser != null)
                {
                    fooObject.MyUserId   = myUser.Id;
                    fooObject.MyUserName = myUser.Name;
                }
                #endregion

                paras.Add(MagicStringHelper.CurrentSelectdItemParameterName, fooObject);
                paras.Add(MagicStringHelper.CrudActionName, MagicStringHelper.CrudAddAction);
                await navigationService.NavigateAsync("WorkingLogRecordPage", paras);
            });
            #endregion

            #region 點選某筆紀錄觸發命令
            ItemTappedCommand = new DelegateCommand(async() =>
            {
                NavigationParameters paras = new NavigationParameters();
                var fooObject = SelectedItem.Clone();
                paras.Add(MagicStringHelper.CurrentSelectdItemParameterName, fooObject);
                paras.Add(MagicStringHelper.CrudActionName, MagicStringHelper.CrudEditAction);
                await navigationService.NavigateAsync("WorkingLogRecordPage", paras);
            });
            #endregion

            #region 更新遠端紀錄命令
            RefreshCommand = new DelegateCommand(async() =>
            {
                IsRefresh = true;
                await ReloadData();
                IsRefresh = false;
            });
            #endregion

            #region 顯示明細頁面
            ShowDetailCommand = new DelegateCommand <WorkingLogDto>(async x =>
            {
                #region 讀取該筆明細清單
                using (IProgressDialog fooIProgressDialog = UserDialogs.Instance.Loading($"請稍後,更新資料中...",
                                                                                         null, null, true, MaskType.Black))
                {
                    await AppStatusHelper.ReadAndUpdateAppStatus(systemStatusService, appStatus);
                    #region 檢查 Access Token 是否還可以使用
                    bool refreshTokenResult = await RefreshTokenHelper
                                              .CheckAndRefreshToken(dialogService, refreshTokenService,
                                                                    systemStatusService, appStatus);
                    if (refreshTokenResult == false)
                    {
                        return;
                    }
                    #endregion

                    #region 取得 專案清單
                    fooIProgressDialog.Title = "請稍後,取得 專案清單";
                    var apiResultssss        = await projectService.GetAsync();
                    if (apiResultssss.Status == true)
                    {
                        await projectService.WriteToFileAsync();
                    }
                    else
                    {
                        await DialogHelper.ShowAPIResultIsFailureMessage(dialogService, apiResultssss);
                        return;
                    }
                    #endregion

                    #region 取得 工作日誌明細
                    fooIProgressDialog.Title = "請稍後,取得 工作日誌明細";
                    apiResultssss            = await workingLogDetailService.GetAsync(x.Id);
                    if (apiResultssss.Status == true)
                    {
                        await workingLogDetailService.WriteToFileAsync();

                        NavigationParameters paras = new NavigationParameters();
                        paras.Add(MagicStringHelper.MasterRecordActionName, x);
                        await navigationService.NavigateAsync("WorkingLogDetailPage", paras);
                    }
                    else
                    {
                        await DialogHelper.ShowAPIResultIsFailureMessage(dialogService, apiResultssss);
                        return;
                    }
                    #endregion
                }
                #endregion
            });
            #endregion
        }