/// <summary> /// 在庫評価額一覧印刷データ取得 /// </summary> /// <param name="dic">検索条件Dictionary</param> /// <returns></returns> public List <PrintMenber> GetPrintData(Dictionary <string, string> dic) { using (TRAC3Entities context = new TRAC3Entities(CommonData.TRAC3_GetConnectionString())) { try { int val = -1; int yearMonth = Int32.TryParse(dic["処理年月"].Replace("/", ""), out val) ? val : -1; int companyCd = Int32.TryParse(dic["会社コード"], out val) ? val : -1; int sokoCd = Int32.TryParse(dic["倉庫コード"], out val) ? val : -1; int tagetStock = Int32.TryParse(dic["対象在庫"], out val) ? val == (int)対象在庫.月次在庫 ? (int)対象在庫.月次在庫 : (int)対象在庫.調整在庫 : -1; #region 月次在庫データを取得 // 月次在庫データを取得 if (tagetStock == (int)対象在庫.月次在庫) { // =========================== // 在庫基本情報取得 // =========================== // 月次在庫情報取得 var stocktakingList = context.S05_STOK_MONTH.Where(w => w.締年月 == yearMonth) .Join(context.M09_HIN.Where(w => w.削除日時 == null), x => x.品番コード, y => y.品番コード, (x, y) => new { STOK_MONTH = x, HIN = y }) .GroupJoin(context.M22_SOUK.Where(w => w.削除日時 == null), x => x.STOK_MONTH.庫コード, y => y.庫コード, (x, y) => new { x, y }) .SelectMany(z => z.y.DefaultIfEmpty(), (a, b) => new { STOK_MONTH = a.x.STOK_MONTH, HIN = a.x.HIN, SOUK = b }) .ToList(); // 検索条件絞り込み if (companyCd != -1) { stocktakingList = stocktakingList.Where(w => w.SOUK.場所会社コード == companyCd).ToList(); } if (sokoCd != -1) { stocktakingList = stocktakingList.Where(w => w.STOK_MONTH.庫コード == sokoCd).ToList(); } // =========================== // 直近の仕入単価(最少額)を取得 // =========================== // 年月末日の取得 ZIK05010 zik05010 = new ZIK05010(); DateTime dteEndofMonth = zik05010.getDateEndofMonth(yearMonth); // 品番毎の直近日付を取得する var LatestList = context.T03_SRHD.Where(w => w.削除日時 == null && w.仕入日 < dteEndofMonth) .Join(context.T03_SRDTL.Where(w => w.削除日時 == null), x => x.伝票番号, y => y.伝票番号, (x, y) => new { SHD = x, SDTL = y }) .GroupBy(g => new { g.SDTL.品番コード, g.SDTL.賞味期限 }) .Select(s => new { 品番コード = s.Key.品番コード, 賞味期限 = s.Key.賞味期限, 仕入日 = s.Max(m => m.SHD.仕入日), }) .OrderBy(o => o.品番コード) .ToList(); // 直近の仕入単価(最少額)を取得 DateTime dteMaxDate = AppCommon.GetMaxDate(); var PurchaseList = LatestList .Join(context.T03_SRHD.Where(w => w.削除日時 == null), x => x.仕入日, y => y.仕入日, (x, y) => new { Latest = x, SRHD = y }) .Join(context.T03_SRDTL.Where(w => w.削除日時 == null), x => new { dno = x.SRHD.伝票番号, hin = x.Latest.品番コード, date = x.Latest.賞味期限 }, y => new { dno = y.伝票番号, hin = y.品番コード, date = y.賞味期限 }, (x, y) => new { x.Latest, x.SRHD, SDTL = y }) .GroupBy(g => new { g.SDTL.品番コード, g.SDTL.賞味期限 }) .Select(s => new ZIK05010.SearchDataUnitPrice { 品番コード = s.Key.品番コード, 賞味期限 = s.Key.賞味期限 ?? dteMaxDate, 仕入単価 = s.Min(m => m.SDTL.単価), }) .OrderBy(o => o.品番コード) .ToList(); // =========================== // 帳票データ取得 // =========================== var dataList = stocktakingList .GroupJoin(context.M06_IRO.Where(w => w.削除日時 == null), x => x.HIN.自社色, y => y.色コード, (x, y) => new { x, y }) .SelectMany(x => x.y.DefaultIfEmpty(), (a, b) => new { a.x.STOK_MONTH, a.x.HIN, a.x.SOUK, IRO = b }) .GroupJoin(context.M70_JIS.Where(w => w.削除日時 == null), x => x.SOUK.寄託会社コード, y => y.自社コード, (x, y) => new { x, y }) .SelectMany(x => x.y.DefaultIfEmpty(), (c, d) => new { c.x.STOK_MONTH, c.x.HIN, c.x.SOUK, c.x.IRO, JIS = d }) .GroupJoin(PurchaseList.Where(w => w.品番コード > 0), x => new { dno = x.STOK_MONTH.品番コード, date = x.STOK_MONTH.賞味期限 }, y => new { dno = y.品番コード, date = y.賞味期限 }, (x, y) => new { x, y }) .SelectMany(x => x.y.DefaultIfEmpty(), (e, f) => new { e.x.STOK_MONTH, e.x.HIN, e.x.SOUK, e.x.IRO, e.x.JIS, Purchase = f }) .Select(x => new PrintMenber { 自社コード = x.JIS.自社コード, 自社名 = x.JIS.自社名 ?? "", 庫名 = x.SOUK != null ? x.SOUK.庫略称名 : "", 庫コード = x.STOK_MONTH.庫コード, 品番コード = x.STOK_MONTH.品番コード, 自社品番 = x.HIN.自社品番, 自社品名 = x.HIN.自社品名, 自社色コード = x.HIN.自社色, 色名称 = x.IRO != null ? x.IRO.色名称 : "", 賞味期限 = AppCommon.GetMaxDate() == x.STOK_MONTH.賞味期限 ? "" : x.STOK_MONTH.賞味期限.ToString("yyyy/MM/dd"), 数量 = x.STOK_MONTH.在庫数量, 単位 = x.HIN.単位, 単価 = x.HIN.商品形態分類 == (int)商品形態分類.SET品 ? x.HIN.原価 ?? 0 : x.Purchase != null ? x.Purchase.仕入単価 : x.HIN.原価 ?? 0, 評価額 = x.STOK_MONTH.在庫数量 * (x.Purchase != null ? x.Purchase.仕入単価 : x.HIN.原価 ?? 0) }) .OrderBy(o => o.自社コード) .ThenBy(t => t.庫コード) .ThenBy(t => t.品番コード) .ThenBy(t => t.自社色コード) .ThenBy(t => t.賞味期限) ; return(dataList.ToList()); } #endregion #region 調整在庫データを取得 // 調整在庫データを取得 else { // =========================== // 在庫基本情報取得 // =========================== // 調整在庫情報取得 var stockAdjTakingList = context.S05_STOK_ADJUST.Where(w => w.締年月 == yearMonth) .Join(context.M09_HIN.Where(w => w.削除日時 == null), x => x.品番コード, y => y.品番コード, (x, y) => new { STOK_MONTH = x, HIN = y }) .GroupJoin(context.M22_SOUK.Where(w => w.削除日時 == null), x => x.STOK_MONTH.庫コード, y => y.庫コード, (x, y) => new { x, y }) .SelectMany(z => z.y.DefaultIfEmpty(), (a, b) => new { STOK_MONTH = a.x.STOK_MONTH, HIN = a.x.HIN, SOUK = b }) .ToList(); // 検索条件絞り込み if (companyCd != -1) { stockAdjTakingList = stockAdjTakingList.Where(w => w.SOUK.場所会社コード == companyCd).ToList(); } if (sokoCd != -1) { stockAdjTakingList = stockAdjTakingList.Where(w => w.STOK_MONTH.庫コード == sokoCd).ToList(); } // =========================== // 帳票データ取得 // =========================== var dataList = stockAdjTakingList .GroupJoin(context.M06_IRO.Where(w => w.削除日時 == null), x => x.HIN.自社色, y => y.色コード, (x, y) => new { x, y }) .SelectMany(x => x.y.DefaultIfEmpty(), (a, b) => new { a.x.STOK_MONTH, a.x.HIN, a.x.SOUK, IRO = b }) .GroupJoin(context.M70_JIS.Where(w => w.削除日時 == null), x => x.SOUK.寄託会社コード, y => y.自社コード, (x, y) => new { x, y }) .SelectMany(x => x.y.DefaultIfEmpty(), (c, d) => new { c.x.STOK_MONTH, c.x.HIN, c.x.SOUK, c.x.IRO, JIS = d }) .Select(x => new PrintMenber { 自社コード = x.JIS.自社コード, 自社名 = x.JIS.自社名 ?? "", 庫名 = x.SOUK != null ? x.SOUK.庫略称名 : "", 庫コード = x.STOK_MONTH.庫コード, 品番コード = x.STOK_MONTH.品番コード, 自社品番 = x.HIN.自社品番, 自社品名 = x.HIN.自社品名, 自社色コード = x.HIN.自社色, 色名称 = x.IRO != null ? x.IRO.色名称 : "", 賞味期限 = AppCommon.GetMaxDate() == x.STOK_MONTH.賞味期限 ? "" : x.STOK_MONTH.賞味期限.ToString("yyyy/MM/dd"), 数量 = x.STOK_MONTH.在庫数量, 単位 = x.HIN.単位, 単価 = x.STOK_MONTH.仕入単価, 評価額 = x.STOK_MONTH.在庫数量 * x.STOK_MONTH.仕入単価 }) .OrderBy(o => o.自社コード) .ThenBy(t => t.庫コード) .ThenBy(t => t.品番コード) .ThenBy(t => t.自社色コード) .ThenBy(t => t.賞味期限) ; return(dataList.ToList()); } #endregion } catch (System.ArgumentException agex) { throw agex; } catch (Exception ex) { throw ex; } } }
/// <summary> /// 月次在庫データ取得 /// </summary> /// <param name="pDateYM">処理年月</param> /// <param name="pCompany">会社コード</param> /// <param name="pSokoCd">倉庫コード</param> /// <returns></returns> public List <SearchDataMember> GetData(string pDateYM, string pCompany, string pSokoCd) { using (TRAC3Entities context = new TRAC3Entities(CommonData.TRAC3_GetConnectionString())) { try { int yearMonth = int.Parse(pDateYM.Replace("/", "")); int val = -1; int companyCd = Int32.TryParse(pCompany, out val) ? val : -1; int sokoCd = Int32.TryParse(pSokoCd, out val)? val : -1; #region 月次在庫データを取得 // 月次在庫データを取得 // =========================== // 在庫基本情報取得 // =========================== // 月次在庫情報取得 var stocktakingList = context.S05_STOK_MONTH.Where(w => w.締年月 == yearMonth) .Join(context.M09_HIN.Where(w => w.削除日時 == null), x => x.品番コード, y => y.品番コード, (x, y) => new { STOK_MONTH = x, HIN = y }) .GroupJoin(context.M22_SOUK.Where(w => w.削除日時 == null), x => x.STOK_MONTH.庫コード, y => y.庫コード, (x, y) => new { x, y }) .SelectMany(z => z.y.DefaultIfEmpty(), (a, b) => new { STOK_MONTH = a.x.STOK_MONTH, HIN = a.x.HIN, SOUK = b }) .ToList(); // 検索条件絞り込み if (companyCd != -1) { stocktakingList = stocktakingList.Where(w => w.SOUK.場所会社コード == companyCd).ToList(); } if (sokoCd != -1) { stocktakingList = stocktakingList.Where(w => w.STOK_MONTH.庫コード == sokoCd).ToList(); } // =========================== // 直近の仕入単価(最少額)を取得 // =========================== // 年月末日の取得 ZIK05010 zik05010 = new ZIK05010(); DateTime dteEndofMonth = zik05010.getDateEndofMonth(yearMonth); // 品番毎の直近日付を取得する var LatestList = context.T03_SRHD.Where(w => w.削除日時 == null && w.仕入日 < dteEndofMonth) .Join(context.T03_SRDTL.Where(w => w.削除日時 == null), x => x.伝票番号, y => y.伝票番号, (x, y) => new { SHD = x, SDTL = y }) .GroupBy(g => new { g.SDTL.品番コード, g.SDTL.賞味期限 }) .Select(s => new { 品番コード = s.Key.品番コード, 賞味期限 = s.Key.賞味期限, 仕入日 = s.Max(m => m.SHD.仕入日), }) .OrderBy(o => o.品番コード) .ToList(); // 直近の仕入単価(最少額)を取得 DateTime dteMaxDate = AppCommon.GetMaxDate(); var PurchaseList = LatestList .Join(context.T03_SRHD.Where(w => w.削除日時 == null), x => x.仕入日, y => y.仕入日, (x, y) => new { Latest = x, SRHD = y }) .Join(context.T03_SRDTL.Where(w => w.削除日時 == null), x => new { dno = x.SRHD.伝票番号, hin = x.Latest.品番コード, date = x.Latest.賞味期限 }, y => new { dno = y.伝票番号, hin = y.品番コード, date = y.賞味期限 }, (x, y) => new { x.Latest, x.SRHD, SDTL = y }) .GroupBy(g => new { g.SDTL.品番コード, g.SDTL.賞味期限 }) .Select(s => new ZIK05010.SearchDataUnitPrice { 品番コード = s.Key.品番コード, 賞味期限 = s.Key.賞味期限 ?? dteMaxDate, 仕入単価 = s.Min(m => m.SDTL.単価), }) .OrderBy(o => o.品番コード) .ToList(); // =========================== // データ取得 // =========================== var dataList = stocktakingList .GroupJoin(context.M06_IRO.Where(w => w.削除日時 == null), x => x.HIN.自社色, y => y.色コード, (x, y) => new { x, y }) .SelectMany(x => x.y.DefaultIfEmpty(), (a, b) => new { a.x.STOK_MONTH, a.x.HIN, a.x.SOUK, IRO = b }) .GroupJoin(context.M70_JIS.Where(w => w.削除日時 == null), x => x.SOUK.寄託会社コード, y => y.自社コード, (x, y) => new { x, y }) .SelectMany(x => x.y.DefaultIfEmpty(), (c, d) => new { c.x.STOK_MONTH, c.x.HIN, c.x.SOUK, c.x.IRO, JIS = d }) .GroupJoin(PurchaseList.Where(w => w.品番コード > 0), x => new { dno = x.STOK_MONTH.品番コード, date = x.STOK_MONTH.賞味期限 }, y => new { dno = y.品番コード, date = y.賞味期限 }, (x, y) => new { x, y }) .SelectMany(x => x.y.DefaultIfEmpty(), (e, f) => new { e.x.STOK_MONTH, e.x.HIN, e.x.SOUK, e.x.IRO, e.x.JIS, Purchase = f }) .Select(s => new SearchDataMember { 締年月 = s.STOK_MONTH.締年月, 品番コード = s.STOK_MONTH.品番コード, 自社品番 = s.HIN.自社品番, 自社色 = s.HIN.自社色, 色名称 = s.IRO != null ? s.IRO.色名称 : "", 自社品名 = s.HIN.自社品名, 賞味期限 = s.STOK_MONTH.賞味期限 == DEFAULT_YYYYMMDD ? (DateTime?)null : s.STOK_MONTH.賞味期限, 庫コード = s.STOK_MONTH.庫コード, 庫名 = s.SOUK != null ? s.SOUK.庫略称名 : "", 仕入単価 = s.HIN.商品形態分類 == (int)商品形態分類.SET品 ? s.HIN.原価 ?? 0 : s.Purchase != null ? s.Purchase.仕入単価 : s.HIN.原価 ?? 0, 在庫数量 = s.STOK_MONTH.在庫数量, 調整単価 = null, 調整数量 = null, }) .OrderBy(t => t.庫コード) .ThenBy(t => t.品番コード) .ThenBy(t => t.賞味期限); return(dataList.ToList()); #endregion } catch (Exception ex) { throw ex; } } }