// No-222 Add Start /// <summary> /// 在庫数チェックを行う /// </summary> /// <param name="strReceiptCode">入荷先コード</param> /// <param name="ds">データセット</param> /// <param name="intUserId">ユーザID</param> /// <returns></returns> public Dictionary <int, string> CheckStockQty(string strReceiptCode, DataSet ds, int intUserId) { using (TRAC3Entities context = new TRAC3Entities(CommonData.TRAC3_GetConnectionString())) { T03Service = new T03(context, intUserId); Dictionary <int, string> resultDic = new Dictionary <int, string>(); DataTable dt = ds.Tables[T03_DETAIL_TABLE_NAME]; List <T03_SRDTL> dtlList = getDetailDataList(dt); // 入荷先から対象の倉庫を取得 int intReceiptCode = int.Parse(strReceiptCode); int intSouk = T03Service.get倉庫コード(intReceiptCode); Common com = new Common(); foreach (T03_SRDTL row in dtlList) { if (string.IsNullOrEmpty(row.品番コード.ToString())) { continue; } decimal nowStockQty = 0; if (!com.CheckStokItemQty(intSouk, row.品番コード, row.賞味期限, out nowStockQty, row.数量)) { // キー:行番号、値:エラーメッセージ resultDic.Add(row.行番号, string.Format("在庫数が不足しています。(現在庫数:{0:#,0.##})", nowStockQty)); } } return(resultDic); } }
/// <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 } }
/// <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); }