/// <summary> /// 売上一覧ヘッダ登録処理(販社) /// </summary> /// <param name="context"></param> /// <param name="myCompanyCode">自社コード</param> /// <param name="yearMonth">請求年月(yyyymm)</param> /// <param name="salesCompanyCode">販社コード(M70_JIS)</param> /// <param name="code">取引先コード</param> /// <param name="eda">枝番</param> /// <param name="paymentDate">入金日</param> /// <param name="userId">ログインユーザID</param> private void setHeaderInfoHan(TRAC3Entities context, int myCompanyCode, int yearMonth, int salesCompanyCode, DateTime?targetStDate, DateTime?targetEdDate, int?code, int?eda, DateTime paymentDate, int userId) { int cnt = 1; TKS01010 tks01010 = new TKS01010(); // ヘッダ情報取得(販社) S01_SEIHD urdata = tks01010.getHeaderInfoHan(context, myCompanyCode, yearMonth, salesCompanyCode, cnt, targetStDate, targetEdDate, paymentDate, userId, true); // No.305 Mod // 都度請求の場合はヘッダデータを作成しない if (urdata == null) { return; } // 前月残高の再設定 S06_URIHD befData = getLastChargeInfo(context, myCompanyCode, yearMonth, code, eda, cnt); urdata.前月残高 = befData == null ? 0 : befData.当月請求額; // 繰越金額、当月残高の再計算 urdata.繰越残高 = urdata.前月残高 - urdata.入金額; urdata.当月請求額 = urdata.繰越残高 + urdata.売上額 + urdata.消費税; // ヘッダ情報の整形 S06_URIHD s06data = ConvertToS06_URIHD_Entity(urdata); // ヘッダ情報登録 S06_URIHD_Update(context, s06data); }
/// <summary> /// 都度請求締集計処理 /// </summary> /// <param name="paramDic"></param> /// <param name="userId"></param> public void BillingAggregation(Dictionary <string, string> paramDic, int userId) { string companyCd, startDate, endDate; try { // 画面パラメータ展開 companyCd = paramDic[PARAMS_NAME_COMPANY]; startDate = paramDic[PARAMS_NAME_CREATE_DATE_START]; endDate = paramDic[PARAMS_NAME_CREATE_DATE_END]; } catch (Exception e) { throw e; } using (TRAC3Entities context = new TRAC3Entities(CommonData.TRAC3_GetConnectionString())) { context.Connection.Open(); using (DbTransaction tran = context.Connection.BeginTransaction(System.Data.IsolationLevel.Serializable)) { try { TKS01010 tok01010 = new TKS01010(); // パラメータ型変換 int iCompany = int.Parse(companyCd); DateTime tStartDate = DateTime.Parse(startDate), tEndDate = DateTime.Parse(endDate); // 得意先取得 List <M01_TOK> tokList = getTargetTOK(context, iCompany); foreach (M01_TOK tok in tokList) { DateTime targetDate = tStartDate; while (targetDate <= tEndDate) { TKS01010.TKS01010_SearchMember mem = new TKS01010.TKS01010_SearchMember(); mem.ID = string.Format("{0} - {1}", tok.取引先コード, tok.枝番); mem.得意先コード = tok.取引先コード; mem.得意先枝番 = tok.枝番; mem.得意先名 = tok.得意先名1; mem.締日 = targetDate.Day; mem.区分 = string.Empty; mem.開始日付1 = targetDate; mem.終了日付1 = targetDate; mem.開始日付2 = null; mem.終了日付2 = null; mem.開始日付3 = null; mem.終了日付3 = null; mem.クリア開始日付 = targetDate; mem.クリア終了日付 = targetDate; mem.入金日 = targetDate; // 締集計の処理に投げる tok01010.getAggregateData(context, iCompany, targetDate.Year * 100 + targetDate.Month, mem, 1, userId); targetDate = targetDate.AddDays(1); } // -- end loop date } // -- end loop tok context.SaveChanges(); tran.Commit(); } catch (Exception ex) { tran.Rollback(); throw ex; } } } }
/// <summary> /// 調整計算確定処理をおこなう /// </summary> /// <param name="paramDic">パラメータDic</param> /// <param name="userId">ログインユーザID</param> public void SetConfirm(Dictionary <string, string> paramDic, int userId) { int compCd = int.Parse(paramDic[PARAM_NAME_COMPANY]), year = int.Parse(paramDic[PARAM_NAME_YEAR].Replace("/", "")); decimal rate = decimal.Parse(paramDic[PARAM_NAME_RATE]); using (TRAC3Entities context = new TRAC3Entities(CommonData.TRAC3_GetConnectionString())) { context.Connection.Open(); using (var tran = context.Connection.BeginTransaction(System.Data.IsolationLevel.Serializable)) { try { // 取引先情報取得 var hanData = context.M70_JIS .Where(w => w.削除日時 == null && w.自社コード == compCd) .Join(context.M01_TOK, x => new { code = x.取引先コード ?? 0, eda = x.枝番 ?? 0 }, y => new { code = y.取引先コード, eda = y.枝番 }, (x, y) => new { JIS = x, TOK = y }) .FirstOrDefault(); // 決算月・請求締日から売上集計期間を算出する int pMonth = hanData.JIS.決算月 ?? CommonConstants.DEFAULT_SETTLEMENT_MONTH, pYear = pMonth < 4 ? year + 1 : year; DateTime lastMonth = new DateTime(pYear, pMonth, 1); DateTime targetMonth = lastMonth.AddMonths(-11); while (targetMonth <= lastMonth) { // 開始日は前月締日を設定 // No.101-3 Mod Start DateTime calcStartDate = AppCommon.GetClosingDate(targetMonth.AddMonths(-1).Year, targetMonth.AddMonths(-1).Month, hanData.TOK.T締日 ?? CommonConstants.DEFAULT_CLOSING_DAY); // 終了日は当月締日の前日を設定 DateTime calcEndDate = AppCommon.GetClosingDate(targetMonth.Year, targetMonth.Month, hanData.TOK.T締日 ?? CommonConstants.DEFAULT_CLOSING_DAY).AddDays(-1); // No.101-3 Mod End var hdList = context.T02_URHD_HAN .Where(v => v.削除日時 == null && v.販社コード == compCd && v.売上日 >= calcStartDate && v.売上日 <= calcEndDate); foreach (var hdRow in hdList) { // 売上ヘッダ情報更新 hdRow.消費税 = hdRow.調整消費税 ?? 0; hdRow.最終更新者 = userId; hdRow.最終更新日時 = com.GetDbDateTime(); hdRow.AcceptChanges(); // 仕入情報が存在するか var srhd = context.T03_SRHD_HAN.Where(w => w.削除日時 == null && w.伝票番号 == hdRow.伝票番号) .FirstOrDefault(); if (srhd != null) { // 仕入がある場合は値を更新する srhd.消費税 = hdRow.調整消費税; srhd.最終更新者 = userId; srhd.最終更新日時 = com.GetDbDateTime(); srhd.AcceptChanges(); } // 売上明細情報更新 foreach (var dtlRow in context.T02_URDTL_HAN.Where(w => w.削除日時 == null && w.伝票番号 == hdRow.伝票番号)) { dtlRow.単価 = dtlRow.調整単価 ?? 0; dtlRow.金額 = dtlRow.調整金額; dtlRow.最終更新者 = userId; dtlRow.最終更新日時 = com.GetDbDateTime(); dtlRow.AcceptChanges(); if (srhd != null) { // 仕入があれば対象の仕入明細の値を更新する var srdtl = context.T03_SRDTL_HAN.Where(w => w.伝票番号 == dtlRow.伝票番号 && w.行番号 == dtlRow.行番号) .FirstOrDefault(); if (srdtl == null) { continue; } srdtl.単価 = dtlRow.調整単価 ?? 0; srdtl.金額 = dtlRow.調整金額 ?? 0; srdtl.最終更新者 = userId; srdtl.最終更新日時 = com.GetDbDateTime(); srdtl.AcceptChanges(); } } } // データ更新後に締集計をおこなう TKS01010 clampService = new TKS01010(); // 集計処理に必要なデータを作成 var jis = context.M70_JIS.Where(w => w.削除日時 == null && w.自社区分 == (int)CommonConstants.自社区分.自社) .First(); TKS01010.TKS01010_SearchMember srcMem = new TKS01010.TKS01010_SearchMember(); srcMem.ID = string.Format("{0:D3} - {1:D2}", hanData.TOK.取引先コード, hanData.TOK.枝番); srcMem.得意先コード = hanData.TOK.取引先コード; srcMem.得意先枝番 = hanData.TOK.枝番; srcMem.得意先名 = hanData.TOK.得意先名1; // No.101-3 Mod Start srcMem.締日 = hanData.TOK.T締日 ?? CommonConstants.DEFAULT_CLOSING_DAY; // No.101-3 Mod End srcMem.開始日付1 = calcStartDate; srcMem.終了日付1 = calcEndDate; // No.101-3 Mod Start srcMem.入金日 = AppCommon.GetClosingDate(targetMonth.Year, targetMonth.Month, hanData.TOK.T入金日1 ?? CommonConstants.DEFAULT_CLOSING_DAY, hanData.TOK.Tサイト1 ?? 0); // No-169 Mod // No.101-3 Mod End List <TKS01010.TKS01010_SearchMember> list = new List <TKS01010.TKS01010_SearchMember>(); list.Add(srcMem); DataTable dt = KESSVCEntry.ConvertListToDataTable(list); DataSet ds = new DataSet(); ds.Tables.Add(dt); // 集計実行 clampService.BillingAggregation(ds, jis.自社コード, targetMonth.Year * 100 + targetMonth.Month, userId); // 次データの為に各値をカウントアップ targetMonth = targetMonth.AddMonths(1); } // 変更状態を確定 context.SaveChanges(); // トランザクションコミット tran.Commit(); } catch (Exception ex) { // トランザクションロールバック tran.Rollback(); throw ex; } }// end transaction } }