/// <summary> /// 前受振替(分割) 取消 /// </summary> /// <param name="source"></param> /// <param name="token"></param> /// <returns></returns> public async Task <int> CancelAsync(AdvanceReceivedSplitSource source, CancellationToken token = default(CancellationToken)) { var result = 0; using (var scope = transactionScopeBuilder.Create()) { var advanceReceipts = (await receiptQueryProcessor.GetAdvanceReceiptsAsync(source.OriginalReceiptId, token)) .Where(ar => ar.AssignmentFlag == 0).ToArray(); var receiptMemoDictionary = (await receiptMemoQueryProcessor.GetItemsAsync(advanceReceipts.Select(ar => ar.Id).ToArray(), token)) .ToDictionary(memo => memo.ReceiptId); foreach (var memo in receiptMemoDictionary.Values) { await deleteReceiptMemoQueryProcessor.DeleteAsync(memo.ReceiptId, token); } foreach (var receipt in advanceReceipts) { await deleteReceiptByIdQueryProcessor.DeleteAsync(receipt.Id, token); } var backup = await advanceReceivedBackupQueryProcessor.GetByOriginalReceiptIdAsync(source.OriginalReceiptId); if (backup == null) { throw new InvalidOperationException($"振替取消処理: 書き戻すためのAdvanceReceivedBackupデータが見つかりません。OriginalReceiptId = {source.OriginalReceiptId}"); } var restoringReceipt = backup.ConvertToReceipt(source.LoginUserId); var restoredReceipt = await addReceiptQueryProcessor.SaveAsync(restoringReceipt, specifyCreateAt : true, token : token); if (!string.IsNullOrEmpty(backup.Memo)) { await addReceiptMemoQueryProcessor.SaveAsync(restoredReceipt.Id, backup.Memo, token); } result = await advanceReceivedBackupQueryProcessor.DeleteAsync(source.OriginalReceiptId, token); scope.Complete(); } return(result); }
public async Task <int> CancelAdvanceReceivedDataSplit(AdvanceReceivedSplitSource source, CancellationToken token) => await advanceReceivedSplitProcessor.CancelAsync(source, token);
public async Task <ActionResult <int> > AdvanceReceivedDataSplit(AdvanceReceivedSplitSource source, CancellationToken token) => await advanceReceivedSplitProcessor.SplitAsync(source, token);
/// <summary> /// 前受振替(分割)処理 /// </summary> /// <param name="source"></param> /// <param name="token"></param> /// <returns></returns> /// <remarks> /// 前受入金 仕訳出力済 の場合に、入金データを 別テーブル AdvanceReceivedBackup へ退避 /// 条件 前受振替処理の対象となる 入金データは、未消込のデータのみ /// 分割前、分割後で、ID が 変更されるので、 関連テーブル ReceiptMemo などは 削除する /// ReceiptExclude は、未消込なので、存在しない /// </remarks> public async Task <int> SplitAsync(AdvanceReceivedSplitSource source, CancellationToken token = default(CancellationToken)) { var result = 0; using (var scope = transactionScopeBuilder.Create()) { var advanceReceipts = (await receiptQueryProcessor.GetAdvanceReceiptsAsync(source.OriginalReceiptId, token)) .Where(ar => ar.AssignmentFlag == 0).ToArray(); var receiptMemoDictionary = (await receiptMemoQueryProcessor.GetItemsAsync(advanceReceipts.Select(ar => ar.Id).ToArray(), token)) .ToDictionary(memo => memo.ReceiptId); var advanceReceivedBackup = await advanceReceivedBackupQueryProcessor.GetByOriginalReceiptIdAsync(source.OriginalReceiptId, token); if (advanceReceivedBackup == null && advanceReceipts.Count() != 0 && advanceReceipts.First().OutputAt.HasValue) { ReceiptMemo receiptMemo; foreach (var receipt in advanceReceipts) { advanceReceivedBackup = receipt.ConvertToAdvanceReceivedBackup(id => receiptMemoDictionary.TryGetValue(id, out receiptMemo) ? receiptMemo.Memo : ""); await advanceReceivedBackupQueryProcessor.SaveAsync(advanceReceivedBackup, token); } } foreach (var memo in receiptMemoDictionary.Values) { await deleteReceiptMemoQueryProcessor.DeleteAsync(memo.ReceiptId, token); } foreach (var receipt in advanceReceipts) { await deleteReceiptByIdQueryProcessor.DeleteAsync(receipt.Id, token); } var originalReceipt = await receiptGetByIdQueryProcessor.GetByIdAsync(source.OriginalReceiptId, token); var advanceReceiptCategoryId = (await categoryByCodeQueryProcessor.GetAsync(new CategorySearch { CompanyId = source.CompanyId, CategoryType = Rac.VOne.Common.CategoryType.Receipt, Codes = new[] { "99" }, }, token)).First().Id; foreach (var split in source.Items) { var receipt = split.ConvertToReceipt(originalReceipt, advanceReceiptCategoryId, source.LoginUserId); receipt = await addReceiptQueryProcessor.SaveAsync(receipt, token : token); if (!string.IsNullOrEmpty(split.Memo)) { await addReceiptMemoQueryProcessor.SaveAsync(receipt.Id, split.Memo, token); } } result = source.Items.Length; scope.Complete(); } return(result); }