Ejemplo n.º 1
0
        /// <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;
                }
            }
        }
Ejemplo n.º 2
0
        /// <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;
                }
            }
        }