/// <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("伝票番号が正しくありません"); } } } }