public async Task <CustomerPaymentContract> SaveAsync(CustomerPaymentContract contract, CancellationToken token = default(CancellationToken)) => await addCustomerPaymentContractQueryProcessor.SaveAsync(contract, token);
public async Task <CustomerPaymentContract> Save(CustomerPaymentContract contract, CancellationToken token) => await customerPaymentContractProcessor.SaveAsync(contract, token);
public async Task <CustomerPaymentContractResult> SavePaymentContractAsync(string SessionKey, CustomerPaymentContract CustomerPaymentContract) { return(await authorizationProcessor.DoAuthorizeAsync(SessionKey, async token => { var result = await customerPaymentContractProcessor.SaveAsync(CustomerPaymentContract, token); return new CustomerPaymentContractResult { ProcessResult = new ProcessResult { Result = true }, Payment = result, }; }, logger)); }
public Task <CustomerPaymentContract> SaveAsync(CustomerPaymentContract contract, CancellationToken token = default(CancellationToken)) { if (contract.GreaterThanCollectCategoryId2 == 0) { contract.GreaterThanCollectCategoryId2 = null; } if (contract.GreaterThanCollectCategoryId3 == 0) { contract.GreaterThanCollectCategoryId3 = null; } #region merge query var query = @" MERGE INTO CustomerPaymentContract AS target USING ( SELECT @CustomerId AS CustomerId ) AS source ON ( target.CustomerId = source.CustomerId ) WHEN MATCHED THEN UPDATE SET CustomerId = @CustomerId , ThresholdValue = @ThresholdValue , LessThanCollectCategoryId = @LessThanCollectCategoryId , GreaterThanCollectCategoryId1 = @GreaterThanCollectCategoryId1 , GreaterThanRate1 = @GreaterThanRate1 , GreaterThanRoundingMode1 = @GreaterThanRoundingMode1 , GreaterThanSightOfBill1 = @GreaterThanSightOfBill1 , GreaterThanCollectCategoryId2 = @GreaterThanCollectCategoryId2 , GreaterThanRate2 = @GreaterThanRate2 , GreaterThanRoundingMode2 = @GreaterThanRoundingMode2 , GreaterThanSightOfBill2 = @GreaterThanSightOfBill2 , GreaterThanCollectCategoryId3 = @GreaterThanCollectCategoryId3 , GreaterThanRate3 = @GreaterThanRate3 , GreaterThanRoundingMode3 = @GreaterThanRoundingMode3 , GreaterThanSightOfBill3 = @GreaterThanSightOfBill3 , UpdateBy = @UpdateBy , UpdateAt = GETDATE() WHEN NOT MATCHED THEN INSERT (CustomerId ,ThresholdValue ,LessThanCollectCategoryId ,GreaterThanCollectCategoryId1 ,GreaterThanRate1 ,GreaterThanRoundingMode1 ,GreaterThanSightOfBill1 ,GreaterThanCollectCategoryId2 ,GreaterThanRate2 ,GreaterThanRoundingMode2 ,GreaterThanSightOfBill2 ,GreaterThanCollectCategoryId3 ,GreaterThanRate3 ,GreaterThanRoundingMode3 ,GreaterThanSightOfBill3 ,CreateBy ,CreateAt ,UpdateBy ,UpdateAt) VALUES ( @CustomerId ,@ThresholdValue ,@LessThanCollectCategoryId ,@GreaterThanCollectCategoryId1 ,@GreaterThanRate1 ,@GreaterThanRoundingMode1 ,@GreaterThanSightOfBill1 ,@GreaterThanCollectCategoryId2 ,@GreaterThanRate2 ,@GreaterThanRoundingMode2 ,@GreaterThanSightOfBill2 ,@GreaterThanCollectCategoryId3 ,@GreaterThanRate3 ,@GreaterThanRoundingMode3 ,@GreaterThanSightOfBill3 ,@CreateBy ,GETDATE() ,@UpdateBy ,GETDATE()) OUTPUT inserted.*;"; #endregion return(dbHelper.ExecuteAsync <CustomerPaymentContract>(query, contract, token)); }
/// <summary> /// 明細一行を約定条件によって分割する処理 /// </summary> /// <param name="detail">分割対象の 約定の行</param> /// <param name="contract">約定条件</param> /// <returns> /// 列ごとの約定金額判定を実施するため、dic に 横縦変換して保持する /// </returns> private List <CollectionSchedule> Divide(CollectionSchedule detail, CustomerPaymentContract contract) { var list = new List <CollectionSchedule>(); var dic = Pivot(detail); if (dic.Values.Any(x => x != 0M && x < contract.ThresholdValue)) { list.Add(GetNewItem(contract.LessThanCode, contract.LessThanName, detail)); } if (dic.Values.Any(x => x >= contract.ThresholdValue)) { if (!list.Any(x => x.CollectCategoryCode == contract.GreaterThanCode1)) { list.Add(GetNewItem(contract.GreaterThanCode1, contract.GreaterThanName1, detail)); } if ((contract.GreaterThanCollectCategoryId2 ?? 0) != 0 && !list.Any(x => x.CollectCategoryCode == contract.GreaterThanCode2)) { list.Add(GetNewItem(contract.GreaterThanCode2, contract.GreaterThanName2, detail)); } if ((contract.GreaterThanCollectCategoryId3 ?? 0) != 0 && !list.Any(x => x.CollectCategoryCode == contract.GreaterThanCode3)) { list.Add(GetNewItem(contract.GreaterThanCode3, contract.GreaterThanName3, detail)); } } foreach (var key in dic.Keys) { if (dic[key] == 0M) { continue; } if (dic[key] < contract.ThresholdValue) { var index = list.FindIndex(x => x.CollectCategoryCode == contract.LessThanCode); SetValue(list[index], key, dic[key]); continue; } var remainingIndex = -1; var remaining = dic[key]; { var index = list.FindIndex(x => x.CollectCategoryCode == contract.GreaterThanCode1); var mode = contract.GreaterThanRoundingMode1.Value; if (mode == 0) { remainingIndex = index; } var scale = GetScale(mode); var value = decimal.Truncate(dic[key] * contract.GreaterThanRate1.Value / 100M / scale) * scale; SetValue(list[index], key, value); remaining -= value; } if ((contract.GreaterThanCollectCategoryId2 ?? 0) != 0) { var index = list.FindIndex(x => x.CollectCategoryCode == contract.GreaterThanCode2); var mode = contract.GreaterThanRoundingMode2.Value; if (mode == 0) { remainingIndex = index; } var scale = GetScale(mode); var value = decimal.Truncate(dic[key] * contract.GreaterThanRate2.Value / 100M / scale) * scale; SetValue(list[index], key, value); remaining -= value; } if ((contract.GreaterThanCollectCategoryId3 ?? 0) != 0) { var index = list.FindIndex(x => x.CollectCategoryCode == contract.GreaterThanCode3); var mode = contract.GreaterThanRoundingMode3.Value; if (mode == 0) { remainingIndex = index; } var scale = GetScale(mode); var value = decimal.Truncate(dic[key] * contract.GreaterThanRate3.Value / 100M / scale) * scale; SetValue(list[index], key, value); remaining -= value; } if (remaining != 0M && remainingIndex != -1) { SetValue(list[remainingIndex], key, remaining); } } return(list); }
/// <summary> /// 得意先情報 および 得意先マスター設定の 回収区分情報取得 /// </summary> /// <param name="detail"></param> /// <param name="category"></param> /// <param name="contract"></param> /// <returns></returns> private List <string> GetCustomerInfo(CollectionSchedule detail, Category category, CustomerPaymentContract contract) { var list = new List <string>(); list.Add($"{detail.CustomerCode} {detail.CustomerName}"); if (category != null) { list.Add(detail.CustomerSightOfBill.HasValue ? $" {category.Name} {detail.CustomerSightOfBill}日" : $" {category.Name}"); return(list); } if (contract == null) { return(list); } list.Add($" {contract.ThresholdValue:#,##0}円未満 {contract.LessThanName}"); { var item = new List <string>(); item.Add(" 以上"); item.Add($"{contract.GreaterThanRate1}%"); item.Add(contract.GreaterThanName1); if (contract.GreaterThanSightOfBill1 != 0) { item.Add($"{contract.GreaterThanSightOfBill1}日"); } if (contract.GreaterThanRoundingMode1 == 0) { item.Add("端数"); } list.Add(string.Join(" ", item.ToArray())); } if (contract.GreaterThanCollectCategoryId2.HasValue) { var item = new List <string>(); item.Add(" 以上"); item.Add($"{contract.GreaterThanRate2}%"); item.Add(contract.GreaterThanName2); if ((contract.GreaterThanSightOfBill2 ?? 0) != 0) { item.Add($"{contract.GreaterThanSightOfBill2}日"); } if (contract.GreaterThanRoundingMode2 == 0) { item.Add("端数"); } list.Add(string.Join(" ", item.ToArray())); } if (contract.GreaterThanCollectCategoryId3.HasValue) { var item = new List <string>(); item.Add(" 以上"); item.Add($"{contract.GreaterThanRate3}%"); item.Add(contract.GreaterThanName3); if ((contract.GreaterThanSightOfBill3 ?? 0) != 0) { item.Add($"{contract.GreaterThanSightOfBill3}日"); } if (contract.GreaterThanRoundingMode3 == 0) { item.Add("端数"); } list.Add(string.Join(" ", item.ToArray())); } return(list); }