/// <summary> /// データ取得 /// </summary> /// <param name="p明細番号"></param> /// <param name="p得意先ID"></param> /// <param name="p入金日付"></param> /// <returns></returns> public List <DLY09010_Member> DLY09010_GetData(int?p明細番号) { using (TRAC3Entities context = new TRAC3Entities(CommonData.TRAC3_GetConnectionString())) { context.Connection.Open(); DLY09010_Member result = new DLY09010_Member(); var NKubun = (from cmb in context.M99_COMBOLIST where cmb.分類 == "日次" && cmb.機能 == "入金伝票入力" && cmb.カテゴリ == "入金区分" select cmb); var query = (from t04 in context.T04_NYUK from m01 in context.M01_TOK.Where(c => c.得意先KEY == t04.取引先KEY) where t04.明細区分 == 3 && t04.明細番号 == p明細番号 select new DLY09010_Member { 得意先ID = m01.得意先ID, 得意先KEY = m01.得意先KEY, 入出金日付 = t04.入出金日付, 出金区分 = t04.入出金区分, 出金金額 = t04.入出金金額 == null ? 0 : t04.入出金金額, d出金金額 = t04.入出金金額 == null ? 0 : t04.入出金金額, 摘要ID = t04.摘要ID, 摘要 = t04.摘要名, 手形期日 = t04.手形日付, 明細番号 = t04.明細番号, 明細行 = t04.明細行, 入力者ID = t04.入力者ID, }).ToList(); foreach (var rec in query) { rec.Str手形期日 = rec.手形期日 == null ? "" : ((DateTime)(rec.手形期日)).ToString("yyyy/MM/dd"); } return(query); } }
//DLY08010_NData /// <summary> /// 入金予定額取得 /// </summary> /// <param name="p明細番号"></param> /// <param name="p得意先ID"></param> /// <param name="p入金日付"></param> /// <returns></returns> public List <DLY09010_NData> DLY09010_GETNData(int p得意先ID, DateTime p入出金日付, int p明細番号) { using (TRAC3Entities context = new TRAC3Entities(CommonData.TRAC3_GetConnectionString())) { context.Connection.Open(); DLY09010_Member result = new DLY09010_Member(); var ret = from m01 in context.M01_TOK where m01.得意先ID == p得意先ID select m01; var qm01 = ret.FirstOrDefault(); int i得意先KEY; i得意先KEY = qm01.得意先KEY; #region 日付計算(入金予定額) //***日付計算(入金予定額)***// //得意先の締日を取得 int x締日 = qm01.S締日; int x日付 = Convert.ToInt32(p入出金日付.Day.ToString()); int xi出金日付; DateTime x出金日付, x出金予定日; //サイトの考え方 サイトが1の場合 締日が翌月でも翌月の末日までがサイトの領域になります 20160517対応 //if (x締日 < x日付) //{ // //締日が20締に対して入金日付が31日等だった場合 月に1を足して来月のデータとしてカウント // x出金日付 = p入出金日付.AddMonths(+1); // //入金予定額を求めるためにサイトを引いた集計年月を作成 // x出金予定日 = x出金日付.AddMonths(-qm01.Tサイト日); // xi出金日付 = AppCommon.IntParse(x出金予定日.Month.ToString().Length == 1 ? x出金予定日.Year.ToString() + "0" + x出金予定日.Month.ToString() : x出金予定日.Year.ToString() + x出金予定日.Month.ToString()); //} //else //{ x出金日付 = p入出金日付; //入金予定額を求めるためにサイトを引いた集計年月を作成 x出金予定日 = x出金日付.AddMonths(-qm01.Tサイト日); xi出金日付 = AppCommon.IntParse(x出金予定日.Month.ToString().Length == 1 ? x出金予定日.Year.ToString() + "0" + x出金予定日.Month.ToString() : x出金予定日.Year.ToString() + x出金予定日.Month.ToString()); //} var query = (from s02 in context.S02_YOSS where s02.支払先KEY == i得意先KEY && s02.集計年月 == xi出金日付 group s02 by s02.締日売上金額 into Group select new DLY09010_NData { 予定出金金額 = Group.Sum(c => c.締日売上金額 + c.締日消費税 + c.締日通行料) == null ? 0 : Group.Sum(c => c.締日売上金額 + c.締日消費税 + c.締日通行料) }).AsQueryable(); #endregion #region 日付計算(既入金額) //***日付計算(既入金額)***// int y締日 = qm01.S締日; if (y締日 == 0) { return(null); } ; int y日付 = AppCommon.IntParse(p入出金日付.Day.ToString()); DateTime y出金日付From, y出金日付To; if (y締日 < 31) { if (y締日 < y日付) { y出金日付From = Convert.ToDateTime(p入出金日付.Year.ToString() + "/" + p入出金日付.Month.ToString() + "/" + (y締日 + 1).ToString()); y出金日付To = Convert.ToDateTime(p入出金日付.Year.ToString() + "/" + p入出金日付.Month.ToString() + "/" + 01); y出金日付To = y出金日付To.AddMonths(+1); y出金日付To = Convert.ToDateTime(y出金日付To.Year.ToString() + "/" + y出金日付To.Month + "/" + y締日.ToString()); } else { y出金日付From = Convert.ToDateTime(p入出金日付.Year.ToString() + "/" + p入出金日付.AddMonths(-1).Month.ToString() + "/" + (y締日 + 1).ToString()); y出金日付To = Convert.ToDateTime(p入出金日付.Year.ToString() + "/" + p入出金日付.Month.ToString() + "/" + y締日.ToString()); } } else { y出金日付From = Convert.ToDateTime(p入出金日付.Year.ToString() + "/" + p入出金日付.Month.ToString() + "/" + 01); y出金日付To = y出金日付From.AddMonths(1).AddDays(-1); } var query2 = (from t04 in context.T04_NYUK where t04.取引先KEY == i得意先KEY && (t04.入出金日付 >= y出金日付From && t04.入出金日付 <= y出金日付To) && t04.明細区分 == 3 && t04.明細番号 != p明細番号 group t04 by t04.入出金金額 into Group select new DLY09010_NData { 既出金額 = Group.Sum(c => c.入出金金額) == null ? 0 : Group.Sum(c => c.入出金金額) }); #endregion #region 日付計算(入金相殺) //***日付計算(入金相殺)***// int z締日 = qm01.S締日; int z日付 = AppCommon.IntParse(p入出金日付.Day.ToString()); DateTime z出金日付From, z出金日付To; if (y締日 < 31) { if (y締日 < y日付) { z出金日付From = Convert.ToDateTime(p入出金日付.Year.ToString() + "/" + p入出金日付.Month.ToString() + "/" + (z締日 + 1).ToString()); z出金日付To = Convert.ToDateTime(p入出金日付.Year.ToString() + "/" + p入出金日付.Month.ToString() + "/" + 01); z出金日付To = z出金日付To.AddMonths(+1); z出金日付To = Convert.ToDateTime(z出金日付To.Year.ToString() + "/" + z出金日付To.Month + "/" + z締日.ToString()); } else { z出金日付From = Convert.ToDateTime(p入出金日付.Year.ToString() + "/" + p入出金日付.AddMonths(-1).Month.ToString() + "/" + (z締日 + 1).ToString()); z出金日付To = Convert.ToDateTime(p入出金日付.Year.ToString() + "/" + p入出金日付.Month.ToString() + "/" + z締日.ToString()); } } else { z出金日付From = Convert.ToDateTime(p入出金日付.Year.ToString() + "/" + p入出金日付.Month.ToString() + "/" + 01); z出金日付To = z出金日付From.AddMonths(1).AddDays(-1); } var query3 = (from t04 in context.T04_NYUK where t04.取引先KEY == i得意先KEY && (t04.入出金日付 >= z出金日付From && t04.入出金日付 <= z出金日付To) && t04.明細区分 == 2 && t04.入出金区分 == 5 group t04 by t04.入出金金額 into Group select new DLY09010_NData { 入金相殺 = Group.Sum(c => c.入出金金額) == null ? 0 : Group.Sum(c => c.入出金金額) }); #endregion //+++リスト化***// List <DLY09010_NData> queryList = new List <DLY09010_NData>(); //初期値をセット queryList.Add(new DLY09010_NData() { 入金相殺 = 0, 既出金額 = 0, 予定出金金額 = 0 }); List <DLY09010_NData> queryLIST1 = query.ToList(); List <DLY09010_NData> queryLIST2 = query2.ToList(); List <DLY09010_NData> queryLIST3 = query3.ToList(); int x = 0, y = 0, z = 0; //上記で求めたqueryの件数をひとつの合計金額に foreach (var row in queryLIST1) { queryList[0].予定出金金額 += queryLIST1[x].予定出金金額; x += 1; } foreach (var row in queryLIST2) { queryList[0].既出金額 += queryLIST2[y].既出金額; y += 1; } foreach (var row in queryLIST3) { queryList[0].入金相殺 += queryLIST3[z].入金相殺; z += 1; } return(queryList); } }