Esempio n. 1
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
            }
        }
Esempio n. 2
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);
        }
Esempio n. 3
0
        /// <summary>
        /// 在庫情報の更新をおこなう
        /// </summary>
        /// <param name="context"></param>
        /// <param name="idohd">移動ヘッダデータ</param>
        /// <param name="dtlTbl">移動明細データテーブル</param>
        /// <param name="isSubtract">減算フラグ(True:減算,False:減算しない)</param>
        private void setS03_STOK_Update(TRAC3Entities context, DataRow hdTbl, DataTable dtlTbl, bool isSubtract)
        {
            T05_IDOHD idohd = convertDataRowToT05_IDOHD_Entity(hdTbl);

            foreach (DataRow row in dtlTbl.Rows)
            {
                T05_IDODTL dtlRow = convertDataRowToT05_IDODTL_Entity(row);

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

                int souko = isSubtract ? (int)idohd.出荷元倉庫コード : (int)idohd.出荷先倉庫コード;

                #region 在庫数計算
                decimal stockQty        = 0;
                decimal oldstockQty     = 0;
                bool    isSamekigenFlg  = false; // 賞味期限同一フラグ
                bool    isSameSoukFlg   = false; // 倉庫同一フラグ
                bool    isSameSyohinFlg = false; // 商品同一フラグ

                if (hdTbl.RowState == DataRowState.Modified)
                {
                    isSameSoukFlg = isSubtract ? CheckSameValue(hdTbl, "出荷元倉庫コード") : CheckSameValue(hdTbl, "出荷先倉庫コード");
                }

                if (row.RowState == DataRowState.Added)
                {
                    // 数量分在庫数を加減算
                    stockQty = dtlRow.数量 * (isSubtract ? -1 : 1);
                }
                else if (row.RowState == DataRowState.Modified || (hdTbl.RowState == DataRowState.Modified && !isSameSoukFlg))
                {
                    // 明細を変更または前回と倉庫が異なる場合
                    isSamekigenFlg  = CheckSameValue(row, "賞味期限");
                    isSameSyohinFlg = CheckSameValue(row, "品番コード");

                    // 賞味期限、倉庫、商品が変更された場合、過去在庫を取得
                    if (!isSamekigenFlg || !isSameSoukFlg || !isSameSyohinFlg)
                    {
                        //  減算フラグ(True:減算)の場合:旧賞味期限の在庫を加算、新賞味期限の在庫を減算する
                        //  減算フラグ(True:False)の場合:旧賞味期限の在庫を減算、新賞味期限の在庫を加算する

                        // 旧賞味期限の在庫数
                        oldstockQty = ParseNumeric <decimal>(row["数量", DataRowVersion.Original]) * (isSubtract ? 1 : -1);
                        // 新賞味期限の在庫数
                        stockQty = dtlRow.数量 * (isSubtract ? -1 : 1);
                    }
                    else
                    {
                        // 数量が変更された場合
                        decimal orgQty = ParseNumeric <decimal>(row["数量", DataRowVersion.Original]);
                        stockQty = (dtlRow.数量 - orgQty) * (isSubtract ? -1 : 1);
                    }
                }
                else
                {
                    // 明細対象なし(DataRowState.Unchanged)
                    continue;
                }
                #endregion

                // 賞味期限、倉庫、商品が変更された場合
                if ((row.RowState == DataRowState.Modified && (!isSamekigenFlg || !isSameSoukFlg)) || (hdTbl.RowState == DataRowState.Modified && !isSameSyohinFlg))
                {
                    DateTime dt;
                    S03_STOK oldStok = new S03_STOK();
                    oldStok.庫コード  = isSubtract ? int.Parse(hdTbl["出荷元倉庫コード", DataRowVersion.Original].ToString()) : int.Parse(hdTbl["出荷先倉庫コード", DataRowVersion.Original].ToString());
                    oldStok.品番コード = int.Parse(row["品番コード", DataRowVersion.Original].ToString());
                    oldStok.賞味期限  = row["賞味期限", DataRowVersion.Original] == DBNull.Value ? AppCommon.DateTimeToDate(null, DateTime.MaxValue) :
                                    DateTime.TryParse(row["賞味期限", DataRowVersion.Original].ToString(), out dt) ? dt : AppCommon.DateTimeToDate(null, DateTime.MaxValue);
                    oldStok.在庫数 = oldstockQty;

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

                // 対象データ設定
                S03_STOK stok = new S03_STOK();
                stok.庫コード  = souko;
                stok.品番コード = dtlRow.品番コード;
                stok.賞味期限  = AppCommon.DateTimeToDate(dtlRow.賞味期限, DateTime.MaxValue);
                stok.在庫数   = stockQty;

                // 新賞味期限の在庫を更新
                S03Service.S03_STOK_Update(stok);

                // 変更状態を確定
                context.SaveChanges();
            }
        }
Esempio n. 4
0
        /// <summary>
        /// 在庫情報の更新をおこなう
        /// </summary>
        /// <param name="context"></param>
        /// <param name="idohd">移動ヘッダデータ</param>
        /// <param name="dtlTbl">移動明細データテーブル</param>
        /// <param name="isSubtract">減算フラグ(True:減算,False:減算しない)</param>
        private void setS03_STOK_Update(TRAC3Entities context, T05_IDOHD idohd, DataTable dtlTbl, bool isSubtract, bool isDeleteFlg = false)          // No-258 Mod
        {
            foreach (DataRow row in dtlTbl.Rows)
            {
                T05_IDODTL dtlRow = convertDataRowToT05_IDODTL_Entity(row);

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

                int souko = isSubtract ? (int)idohd.出荷元倉庫コード : (int)idohd.出荷先倉庫コード;

                #region 在庫数計算
                decimal stockQty         = 0;
                decimal oldstockQty      = 0;
                bool    iskigenChangeFlg = false; // 賞味期限変更フラグ    No-258 Add

                if (isDeleteFlg)
                {
                    stockQty = dtlRow.数量 * (isSubtract ? 1 : -1);
                }
                else if (row.RowState == DataRowState.Deleted)
                {
                    // 数量分在庫数を加減算
                    stockQty = dtlRow.数量 * (isSubtract ? -1 : 1);
                }
                else if (row.RowState == DataRowState.Added)
                {
                    // 数量分在庫数を加減算
                    stockQty = dtlRow.数量 * (isSubtract ? -1 : 1);
                }
                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]) * (isSubtract ? 1 : -1);
                        // 新賞味期限の在庫数
                        stockQty = dtlRow.数量 * (isSubtract ? -1 : 1);
                    }
                    else
                    {
                        // 数量が変更された場合
                        decimal orgQty = ParseNumeric <decimal>(row["数量", DataRowVersion.Original]);
                        stockQty = (dtlRow.数量 - orgQty) * (isSubtract ? -1 : 1);
                    }
                    // No-258 Mod End
                }
                else
                {
                    // 対象なし(DataRowState.Unchanged)
                    continue;
                }
                #endregion

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

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

                // 対象データ設定
                S03_STOK stok = new S03_STOK();
                stok.庫コード  = souko;
                stok.品番コード = dtlRow.品番コード;
                stok.賞味期限  = AppCommon.DateTimeToDate(dtlRow.賞味期限, DateTime.MaxValue);
                stok.在庫数   = stockQty;

                // 新賞味期限の在庫を更新
                S03Service.S03_STOK_Update(stok);

                // 変更状態を確定
                context.SaveChanges();              // No-258 Add
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 移動入力情報を削除する
        /// </summary>
        /// <param name="ds">
        /// 移動データセット
        /// [0:T05_IDOHD、1:T05_IDODTL]
        /// </param>
        /// <param name="userId">ログインユーザID</param>
        /// <returns></returns>
        public void 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))
                {
                    T05Service = new T05(context, userId);
                    S03Service = new S03(context, userId);
                    S04Service = new S04(context, userId, S04.機能ID.振替入力);

                    int number = 0;
                    if (int.TryParse(slipNumber, out number))
                    {
                        try
                        {
                            var idohd =
                                context.T05_IDOHD
                                .Where(x => x.削除日時 == null &&
                                       x.伝票番号 == number)
                                .FirstOrDefault();

                            var idodtl =
                                context.T05_IDODTL
                                .Where(x => x.削除日時 == null &&
                                       x.伝票番号 == number)
                                .ToList();

                            // 伝票データが存在しない場合は処理しない。
                            if (idodtl == null || idodtl.Count == 0)
                            {
                                return;
                            }

                            // 1>> ヘッダ情報削除
                            T05Service.T05_IDOHD_Delete(number);

                            // 2>> 明細情報削除
                            T05Service.T05_IDODTL_Delete(number);

                            // 3>> 在庫情報削除
                            #region 在庫調整

                            foreach (T05_IDODTL row in idodtl)
                            {
                                int souko = row.行番号 == 2 ? (int)idohd.出荷元倉庫コード : (int)idohd.出荷先倉庫コード;

                                // 対象データ設定
                                S03_STOK stok = new S03_STOK();
                                stok.庫コード  = souko;
                                stok.品番コード = row.品番コード;
                                stok.賞味期限  = AppCommon.DateTimeToDate(row.賞味期限, DateTime.MaxValue);
                                stok.在庫数   = row.行番号 == 2 ? row.数量 : row.数量 * (-1);

                                // 旧賞味期限の在庫を更新
                                S03Service.S03_STOK_Update(stok);

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

                            #endregion

                            // 4>> 入出庫データの物理削除
                            S04Service.PhysicalDeletionProductHistory(context, number, (int)S04.機能ID.振替入力);

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

                            tran.Commit();
                        }
                        catch (Exception ex)
                        {
                            tran.Rollback();
                            throw ex;
                        }
                    }
                    else
                    {
                        throw new KeyNotFoundException("伝票番号が正しくありません");
                    }
                }
            }
        }