Пример #1
0
        /// <summary>
        /// DataRow型をT03_SRHDに変換する
        /// </summary>
        /// <param name="drow"></param>
        /// <returns></returns>
        protected T03_SRHD convertDataRowToT03_SRHD_Entity(DataRow drow)
        {
            T03_SRHD srhd = new T03_SRHD();
            int      ival = 0;

            srhd.伝票番号   = ParseNumeric <int>(drow["伝票番号"]);
            srhd.会社名コード = ParseNumeric <int>(drow["会社名コード"]);
            if (drow["仕入日"] != null && !string.IsNullOrEmpty(drow["仕入日"].ToString()))
            {
                srhd.仕入日 = DateTime.Parse(string.Format("{0:yyyy/MM/dd}", drow["仕入日"]));
            }
            srhd.入力区分   = ParseNumeric <int>(drow["入力区分"]);
            srhd.仕入区分   = ParseNumeric <int>(drow["仕入区分"]);
            srhd.仕入先コード = ParseNumeric <int>(drow["仕入先コード"]);
            srhd.仕入先枝番  = ParseNumeric <int>(drow["仕入先枝番"]);
            srhd.入荷先コード = ParseNumeric <int>(drow["入荷先コード"]);
            srhd.発注番号   = int.TryParse(drow["発注番号"].ToString(), out ival) ? ival : (int?)null;
            srhd.備考     = drow["備考"].ToString();
            // REMARKS:カラムが無い場合は参照しない
            srhd.元伝票番号 = drow.Table.Columns.Contains("元伝票番号") ?
                         (int.TryParse(drow["元伝票番号"].ToString(), out ival) ? ival : (int?)null) : (int?)null;
            // No-94 Add Start
            srhd.通常税率対象金額 = ParseNumeric <int>(drow["通常税率対象金額"]);
            srhd.軽減税率対象金額 = ParseNumeric <int>(drow["軽減税率対象金額"]);
            srhd.通常税率消費税  = ParseNumeric <int>(drow["通常税率消費税"]);
            srhd.軽減税率消費税  = ParseNumeric <int>(drow["軽減税率消費税"]);
            // No-94 Add End
            // No-95 Add Start
            srhd.小計  = ParseNumeric <int>(drow["小計"]);
            srhd.総合計 = ParseNumeric <int>(drow["総合計"]);
            // No-95 Add End
            srhd.消費税 = ParseNumeric <int>(drow["消費税"]);

            return(srhd);
        }
Пример #2
0
        /// <summary>
        /// 仕入明細情報の更新をおこなう
        /// </summary>
        /// <param name="srhd">仕入ヘッダデータ</param>
        /// <param name="dt">仕入明細データテーブル</param>
        /// <returns></returns>
        private List <T03_SRDTL> setT03_SRDTL_Update(T03_SRHD shd, DataTable dt)
        {
            // 登録済データの削除
            T03Service.T03_SRDTL_DeleteRecords(shd.伝票番号);

            List <T03_SRDTL> resultList = new List <T03_SRDTL>();

            // 明細追加
            foreach (DataRow row in dt.Rows)
            {
                // Del-Insの為削除されたレコードは不要
                if (row.RowState == DataRowState.Deleted)
                {
                    continue;
                }

                T03_SRDTL dtlData = convertDataRowToT03_SRDTL_Entity(row);
                dtlData.伝票番号 = shd.伝票番号;

                if (dtlData.品番コード <= 0)
                {
                    continue;
                }

                // 明細データの登録実行
                T03Service.T03_SRDTL_Update(dtlData);

                resultList.Add(dtlData);
            }

            return(resultList);
        }
Пример #3
0
        /// <summary>
        /// 仕入ヘッダ情報の更新をおこなう
        /// </summary>
        /// <param name="row">仕入ヘッダデータ行</param>
        /// <returns></returns>
        private T03_SRHD setT03_SRHD_Update(DataRow row)
        {
            // 入力情報
            T03_SRHD t03Data = convertDataRowToT03_SRHD_Entity(row);

            // 仕入ヘッダの登録を実行
            T03Service.T03_SRHD_Update(t03Data);

            return(t03Data);
        }
Пример #4
0
        /// <summary>
        /// 在庫情報の更新をおこなう
        /// </summary>
        /// <param name="srhd">仕入ヘッダデータ</param>
        /// <param name="dt">仕入明細データテーブル</param>
        private void setS03_STOK_Update(T03_SRHD srhd, DataTable dt)
        {
            // 会社名から対象の倉庫を取得
            int souk = T03Service.get倉庫コード(srhd.入荷先コード);

            foreach (DataRow row in dt.Rows)
            {
                T03_SRDTL srdtl = convertDataRowToT03_SRDTL_Entity(row);

                // 未入力レコードはスキップ
                if (srdtl.品番コード <= 0)
                {
                    continue;
                }

                // 元伝票からの返品対象外商品なので処理しない
                if (row.RowState == DataRowState.Deleted)
                {
                    continue;
                }

                decimal stockQty = 0;

                // 在庫調整数計算
                if (srhd.仕入区分 == (int)CommonConstants.仕入区分.返品)
                {
                    // No-108 Add Start
                    stockQty = srdtl.数量 * -1;

                    // オリジナル(変更前数量)と比較して差分数量を加減算
                    if (row.HasVersion(DataRowVersion.Original))
                    {
                        decimal orgQty = ParseNumeric <decimal>(row["数量", DataRowVersion.Original]);
                        stockQty = srdtl.数量 * -1 + orgQty;
                    }
                    // No-108 Add End
                }
                else
                {
                    // 上記以外の場合は処理なし
                    continue;
                }

                // 在庫作成・更新
                S03_STOK stok = new S03_STOK();

                stok.庫コード  = souk;
                stok.品番コード = srdtl.品番コード;
                stok.賞味期限  = AppCommon.DateTimeToDate(srdtl.賞味期限, DateTime.MaxValue);
                stok.在庫数   = stockQty;

                S03Service.S03_STOK_Update(stok);
            }
        }
Пример #5
0
        /// <summary>
        /// 仕入入力情報を登録・更新する
        /// </summary>
        /// <param name="ds">
        /// 仕入データセット
        /// [0:T03_SRHD、1:T03_SRDTL]
        /// </param>
        /// <param name="userId">ユーザID</param>
        /// <returns></returns>
        public int Update(DataSet ds, int userId)
        {
            using (TRAC3Entities context = new TRAC3Entities(CommonData.TRAC3_GetConnectionString()))
            {
                context.Connection.Open();

                using (var tran = context.Connection.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    T03Service = new T03(context, userId);
                    S03Service = new S03(context, userId);
                    S04Service = new S04(context, userId, S04.機能ID.仕入入力);

                    try
                    {
                        DataTable hdTable  = ds.Tables[T03_HEADER_TABLE_NAME];
                        DataTable dtlTable = ds.Tables[T03_DETAIL_TABLE_NAME];

                        if (hdTable == null || hdTable.Rows.Count == 0)
                        {
                            throw new Exception("仕入データの形式が正しくない為、登録処理をおこなう事ができませんでした。");
                        }

                        // 1>> ヘッダ情報更新
                        T03_SRHD shd = setT03_SRHD_Update(hdTable.Rows[0]);

                        // 2>> 明細情報更新
                        setT03_SRDTL_Update(shd, dtlTable);

                        // 3>> 在庫情報更新
                        setS03_STOK_Update(context, shd, dtlTable);         // No-258 Mod

                        // 4>> 入出庫履歴の作成
                        setS04_HISTORY_Create(context, shd, dtlTable, hdTable.Rows[0]);  // No.156-1 Mod,No-258 Mod

                        // 変更状態を確定
                        context.SaveChanges();

                        tran.Commit();
                    }
                    catch (Exception ex)
                    {
                        tran.Rollback();
                        throw ex;
                    }
                }
            }

            return(1);
        }
Пример #6
0
        /// <summary>
        /// 入出庫履歴の登録・更新をおこなう
        /// </summary>
        /// <param name="context"></param>
        /// <param name="srhd">仕入ヘッダデータ</param>
        /// <param name="dtlTable">仕入明細データテーブル</param>
        /// <param name="orghd">変更前仕入ヘッダデータ</param>
        private void setS04_HISTORY_Create(TRAC3Entities context, T03_SRHD srhd, DataTable dtlTable, DataRow orghd)     // No-258 Mod
        {
            // No-258 Mod Start
            // 登録済み入出庫データの削除
            int intSlipNumber = srhd.伝票番号;

            // 入出庫データの物理削除
            S04Service.PhysicalDeletionProductHistory(context, intSlipNumber, (int)S04.機能ID.仕入入力);

            // 不要レコード除去
            DataTable dtlTblTmp = dtlTable.Clone();

            foreach (DataRow row in dtlTable.Rows)
            {
                T03_SRDTL dtlRow = convertDataRowToT03_SRDTL_Entity(row);

                if (dtlRow.品番コード <= 0)
                {
                    continue;
                }

                dtlTblTmp.ImportRow(row);
            }

            // 入出庫データ作成単位に集約
            var dtlTblWk = dtlTblTmp.AsEnumerable()
                           .Where(x => x.RowState != DataRowState.Deleted)
                           .GroupBy(g => new
            {
                伝票番号  = g.Field <int>("伝票番号"),
                品番コード = g.Field <int>("品番コード"),
                賞味期限  = g.Field <DateTime?>("賞味期限")
            })
                           .Select(s => new T03_SRDTL
            {
                伝票番号  = s.Key.伝票番号,
                品番コード = s.Key.品番コード,
                賞味期限  = s.Key.賞味期限,
                数量    = s.Sum(m => m.Field <decimal>("数量"))
            })
                           .ToList();

            foreach (T03_SRDTL row in dtlTblWk)
            {
                decimal stockQtyhist = 0;                               // No-155 Add
                stockQtyhist = row.数量;
                S04_HISTORY history = new S04_HISTORY();

                history.入出庫日  = srhd.仕入日;
                history.入出庫時刻 = com.GetDbDateTime().TimeOfDay;
                history.庫コード  = T03Service.get倉庫コード(srhd.入荷先コード);
                history.入出庫区分 = (int)CommonConstants.入出庫区分.ID01_入庫;
                history.品番コード = row.品番コード;
                history.賞味期限  = row.賞味期限;
                history.数量    = decimal.ToInt32(row.数量);
                history.伝票番号  = srhd.伝票番号;

                Dictionary <string, string> hstDic = new Dictionary <string, string>()
                {
                    // No.156-1 Mod Start
                    { S04.COLUMNS_NAME_入出庫日, orghd == null?
                      history.入出庫日.ToString("yyyy/MM/dd") : string.Format("{0:yyyy/MM/dd}", orghd["仕入日", DataRowVersion.Original]) },
                    { S04.COLUMNS_NAME_倉庫コード, orghd == null?
                      history.庫コード.ToString() :
                          orghd["入荷先コード", DataRowVersion.Original] == DBNull.Value?
                          null : T03Service.get倉庫コード(Convert.ToInt32(orghd["入荷先コード", DataRowVersion.Original])).ToString() },
                    { S04.COLUMNS_NAME_伝票番号, orghd == null?
                      history.伝票番号.ToString() : orghd["伝票番号", DataRowVersion.Original].ToString() },
                    { S04.COLUMNS_NAME_品番コード, history.品番コード.ToString() }
                    // No.156-1 Mod End
                };

                // 履歴作成
                S04Service.CreateProductHistory(history);
            }
            // No-258 Mod End
        }
Пример #7
0
        /// <summary>
        /// 在庫情報の更新をおこなう
        /// </summary>
        /// <param name="context"></param>
        /// <param name="srhd">仕入ヘッダデータ</param>
        /// <param name="dt">仕入明細データテーブル</param>
        private void setS03_STOK_Update(TRAC3Entities context, T03_SRHD srhd, DataTable dt)         // No-258 Mod
        {
            // 会社名から対象の倉庫を取得
            int souk = T03Service.get倉庫コード(srhd.入荷先コード);

            foreach (DataRow row in dt.Rows)
            {
                T03_SRDTL srdtl = convertDataRowToT03_SRDTL_Entity(row);

                // 未入力レコードはスキップ
                if (srdtl.品番コード <= 0)
                {
                    continue;
                }

                decimal stockQty         = 0;
                decimal oldstockQty      = 0;       // 変更前数量            No-258 Add
                bool    iskigenChangeFlg = false;   // 賞味期限変更フラグ    No-258 Add

                // 在庫調整数計算
                if (srhd.仕入区分 == (int)CommonConstants.仕入区分.通常)
                {
                    #region 通常仕入
                    if (row.RowState == DataRowState.Deleted)
                    {
                        // 数量分在庫数を減算
                        if (row.HasVersion(DataRowVersion.Original))
                        {
                            // オリジナルが存在する場合はその数量を優先する
                            stockQty = ParseNumeric <decimal>(row["数量", DataRowVersion.Original]);
                        }
                        else
                        {
                            stockQty = srdtl.数量;
                        }

                        // 仕入減算なので反転させる
                        stockQty = stockQty * -1;
                    }
                    else if (row.RowState == DataRowState.Added)
                    {
                        // 数量分在庫数を加算
                        stockQty = srdtl.数量;
                    }
                    else if (row.RowState == DataRowState.Modified)
                    {
                        // No-258 Mod Start
                        if (!row["賞味期限"].Equals(row["賞味期限", DataRowVersion.Original]))
                        {
                            // 賞味期限が変更された場合
                            //  減算フラグ(True:減算)の場合:旧賞味期限の在庫を加算、新賞味期限の在庫を減算する
                            //  減算フラグ(True:False)の場合:旧賞味期限の在庫を減算、新賞味期限の在庫を加算する
                            iskigenChangeFlg = true;
                            // 旧賞味期限の在庫数
                            oldstockQty = ParseNumeric <decimal>(row["数量", DataRowVersion.Original]) * -1;
                            // 新賞味期限の在庫数
                            stockQty = srdtl.数量;
                        }
                        else
                        {
                            // 数量が変更された場合
                            decimal orgQty = ParseNumeric <decimal>(row["数量", DataRowVersion.Original]);
                            stockQty = srdtl.数量 - orgQty;
                        }
                        // No-258 Mod End
                    }
                    else
                    {
                        // 対象なし(DataRowState.Unchanged)
                        continue;
                    }
                    #endregion
                }
                else
                {
                    // 上記以外の場合は処理なし
                    continue;
                }

                // No-258 Add Start
                // 賞味期限が変更された場合
                if (iskigenChangeFlg == true)
                {
                    DateTime dtKigen;
                    S03_STOK oldStok = new S03_STOK();
                    oldStok.庫コード  = souk;
                    oldStok.品番コード = srdtl.品番コード;
                    oldStok.賞味期限  = row["賞味期限", DataRowVersion.Original] == DBNull.Value ? AppCommon.DateTimeToDate(null, DateTime.MaxValue) :
                                    DateTime.TryParse(row["賞味期限", DataRowVersion.Original].ToString(), out dtKigen) ? dtKigen : AppCommon.DateTimeToDate(null, DateTime.MaxValue);
                    oldStok.在庫数 = oldstockQty;

                    // 旧賞味期限の在庫を更新
                    S03Service.S03_STOK_Update(oldStok);
                }
                // No-258 Add End

                // 在庫作成・更新
                S03_STOK stok = new S03_STOK();
                stok.庫コード  = souk;
                stok.品番コード = srdtl.品番コード;
                stok.賞味期限  = AppCommon.DateTimeToDate(srdtl.賞味期限, DateTime.MaxValue);
                stok.在庫数   = stockQty;

                S03Service.S03_STOK_Update(stok);

                // 変更状態を確定
                context.SaveChanges();              // No-258 Add
            }
        }
Пример #8
0
        /// <summary>
        /// 仕入入力情報の削除をおこなう
        /// </summary>
        /// <param name="slipNumber">伝票番号</param>
        /// <param name="userId">ユーザID</param>
        /// <returns></returns>
        public int Delete(string slipNumber, int userId)
        {
            using (TRAC3Entities context = new TRAC3Entities(CommonData.TRAC3_GetConnectionString()))
            {
                context.Connection.Open();

                using (var tran = context.Connection.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    int number = 0;
                    if (int.TryParse(slipNumber, out number))
                    {
                        T03Service = new T03(context, userId);      // No.156-1 Add
                        S03Service = new S03(context, userId);
                        S04Service = new S04(context, userId, S04.機能ID.仕入入力);

                        try
                        {
                            // ①仕入ヘッダ論理削除
                            T03_SRHD hdData = T03Service.T03_SRHD_Delete(number);

                            // ②仕入明細論理削除
                            List <T03_SRDTL> dtlList = T03Service.T03_SRDTL_Delete(number);

                            // ③在庫更新
                            foreach (T03_SRDTL row in dtlList)
                            {
                                S03_STOK stok = new S03_STOK();
                                stok.庫コード  = T03Service.get倉庫コード(hdData.会社名コード);
                                stok.品番コード = row.品番コード;
                                stok.賞味期限  = AppCommon.DateTimeToDate(row.賞味期限, DateTime.MaxValue);
                                stok.在庫数   = row.数量 * -1;

                                S03Service.S03_STOK_Update(stok);
                            }

                            // ④入出庫履歴作成
                            DataTable wkTbl = KESSVCEntry.ConvertListToDataTable <T03_SRDTL>(dtlList);
                            wkTbl.AcceptChanges();      // No.156-1 Add
                            foreach (DataRow row in wkTbl.Rows)
                            {
                                // 削除分を判定させる為、RowStateを変更する
                                row.Delete();
                            }
                            setS04_HISTORY_Create(context, hdData, wkTbl, null);     // No.156-1 Mod,No-258 Mod

                            // 変更状態を確定
                            context.SaveChanges();      // No.156-1 Add
                        }
                        catch
                        {
                            tran.Rollback();
                            throw new Exception("削除処理実行中にエラーが発生しました。");
                        }
                    }
                    else
                    {
                        throw new KeyNotFoundException("伝票番号が正しくありません");
                    }

                    tran.Commit();
                }
            }

            return(1);
        }
Пример #9
0
        /// <summary>
        /// 仕入ヘッダの登録・更新をおこなう
        /// </summary>
        /// <param name="shdData"></param>
        public void T03_SRHD_Update(T03_SRHD shdData)
        {
            // 登録済データが存在するか判定
            var hdData = _context.T03_SRHD
                         .Where(w => w.伝票番号 == shdData.伝票番号)
                         .FirstOrDefault();

            if (hdData == null)
            {
                // データなしの為追加
                T03_SRHD srhd = new T03_SRHD();

                srhd.伝票番号   = shdData.伝票番号;
                srhd.会社名コード = shdData.会社名コード;
                srhd.仕入日    = shdData.仕入日;
                srhd.入力区分   = shdData.入力区分;
                srhd.仕入区分   = shdData.仕入区分;
                srhd.仕入先コード = shdData.仕入先コード;
                srhd.仕入先枝番  = shdData.仕入先枝番;
                srhd.入荷先コード = shdData.入荷先コード;
                srhd.発注番号   = shdData.発注番号;
                srhd.備考     = shdData.備考;
                srhd.元伝票番号  = shdData.元伝票番号;
                // No-94 Add Start
                srhd.通常税率対象金額 = shdData.通常税率対象金額;
                srhd.軽減税率対象金額 = shdData.軽減税率対象金額;
                srhd.通常税率消費税  = shdData.通常税率消費税;
                srhd.軽減税率消費税  = shdData.軽減税率消費税;
                // No-94 Add End
                // No-95 Add Start
                srhd.小計  = shdData.小計;
                srhd.総合計 = shdData.総合計;
                // No-95 Add End
                srhd.消費税    = shdData.消費税;
                srhd.登録者    = _loginUserId;
                srhd.登録日時   = com.GetDbDateTime();
                srhd.最終更新者  = _loginUserId;
                srhd.最終更新日時 = com.GetDbDateTime();

                _context.T03_SRHD.ApplyChanges(srhd);
            }
            else
            {
                // データを更新
                hdData.会社名コード = shdData.会社名コード;
                hdData.仕入日    = shdData.仕入日;
                hdData.入力区分   = shdData.入力区分;
                hdData.仕入区分   = shdData.仕入区分;
                hdData.仕入先コード = shdData.仕入先コード;
                hdData.仕入先枝番  = shdData.仕入先枝番;
                hdData.入荷先コード = shdData.入荷先コード;
                hdData.発注番号   = shdData.発注番号;
                hdData.備考     = shdData.備考;
                hdData.元伝票番号  = shdData.元伝票番号;
                // No-94 Add Start
                hdData.通常税率対象金額 = shdData.通常税率対象金額;
                hdData.軽減税率対象金額 = shdData.軽減税率対象金額;
                hdData.通常税率消費税  = shdData.通常税率消費税;
                hdData.軽減税率消費税  = shdData.軽減税率消費税;
                // No-94 Add End
                // No-95 Add Start
                hdData.小計  = shdData.小計;
                hdData.総合計 = shdData.総合計;
                // No-95 Add End
                hdData.消費税    = shdData.消費税;
                hdData.最終更新者  = _loginUserId;
                hdData.最終更新日時 = com.GetDbDateTime();

                hdData.AcceptChanges();
            }
        }
Пример #10
0
        /// <summary>
        /// 入出庫履歴の登録・更新をおこなう
        /// </summary>
        /// <param name="srhd">仕入ヘッダデータ</param>
        /// <param name="dtlTable">仕入明細データテーブル</param>
        /// <param name="orghd">変更前仕入ヘッダデータ</param>
        protected void setS04_HISTORY_Create(T03_SRHD srhd, DataTable dtlTable, DataRow orghd)
        {
            foreach (DataRow row in dtlTable.Rows)
            {
                // 仕入明細データ取得
                T03_SRDTL srdtl = convertDataRowToT03_SRDTL_Entity(row);

                // 商品未設定レコードは処理しない
                if (srdtl.品番コード <= 0)
                {
                    continue;
                }

                // 元伝票からの返品対象外商品なので処理しない
                if (row.RowState == DataRowState.Deleted)
                {
                    continue;
                }

                S04_HISTORY history = new S04_HISTORY();

                history.入出庫日  = srhd.仕入日;
                history.入出庫時刻 = com.GetDbDateTime().TimeOfDay;
                history.庫コード  = T03Service.get倉庫コード(srhd.入荷先コード);
                history.入出庫区分 = (int)S04Service.getInboundType(row, "数量", srdtl.数量);
                history.品番コード = srdtl.品番コード;
                history.賞味期限  = srdtl.賞味期限;
                history.数量    = Math.Abs(decimal.ToInt32(srdtl.数量));
                history.伝票番号  = srhd.伝票番号;

                Dictionary <string, string> hstDic = new Dictionary <string, string>()
                {
                    // No.156-2 Mod Start
                    { S04.COLUMNS_NAME_入出庫日, orghd == null?
                      history.入出庫日.ToString("yyyy/MM/dd") : string.Format("{0:yyyy/MM/dd}", orghd["仕入日", DataRowVersion.Original]) },
                    { S04.COLUMNS_NAME_倉庫コード, orghd == null?
                      history.庫コード.ToString() :
                          orghd["入荷先コード", DataRowVersion.Original] == DBNull.Value?
                          null : T03Service.get倉庫コード(Convert.ToInt32(orghd["入荷先コード", DataRowVersion.Original])).ToString() },
                    { S04.COLUMNS_NAME_伝票番号, orghd == null?
                      history.伝票番号.ToString() : orghd["伝票番号", DataRowVersion.Original].ToString() },
                    { S04.COLUMNS_NAME_品番コード, history.品番コード.ToString() }
                    // No.156-2 Mod End
                };

                if (row.RowState == DataRowState.Added)
                {
                    // 仕入作成の為、履歴作成
                    S04Service.CreateProductHistory(history);
                }
                else if (row.RowState == DataRowState.Deleted)
                {
                    S04Service.DeleteProductHistory(hstDic);
                }
                // No.156-2 Mod Start
                else
                {
                    // (DataRowState.Modified、DataRowState.Unchanged)
                    // 仕入更新の為、履歴更新
                    S04Service.UpdateProductHistory(history, hstDic);
                }
                // No.156-2 Mod End
            }
        }