/// <summary> /// Check concurrecny in data /// </summary> /// <param name="d3010">Model object with data</param> /// <returns> /// if true then no concurrency /// if false then concurrency /// </returns> public Boolean CheckConcurrency(D3010 d3010) { Boolean rtnFlag = true; D3010 d3010db = db.D3010.Find(d3010.ORDERNO); if (d3010db != null) { if (d3010.UPDTDT != d3010db.UPDTDT) { rtnFlag = false; } } return(rtnFlag); }
public ActionResult UpdateScheduleRegData([Bind(Include = "ORDERNO,DELISCHECNT,DELISCHEDT,DELISCHEQTY,REPLYDT,RECEIVEDT,RECEIVEKBN,UKECHARGECD,UPDTLNG,UPDTDT")] List <DC0060> dc0060, String orderNo, String remark, int scrollTop, int scrollGridVer, int scrollGridHor, DateTime D3010Updtdt) { if (Session["LoginUserid"] == null) { ViewData["ID"] = "Login"; return(RedirectToAction("Index", "Login")); } ViewData["ID"] = "納期回答画面"; DbContextTransaction dbTran = db.Database.BeginTransaction(); var av_userid = new OracleParameter("av_userid", OracleDbType.Varchar2, Session["LoginUserid"], ParameterDirection.Input); var spSql = "BEGIN DBMS_APPLICATION_INFO.SET_CLIENT_INFO(:av_userid); END; "; var spResult = db.Database.ExecuteSqlCommand(spSql, av_userid); try { Boolean d310ConCurFlg = false; Boolean dc60ConFlg = false; Boolean isDataUpd = false; if (dc0060.Count() > 0) { for (int i = 0; i < dc0060.Count; i++) { String orderno = dc0060[i].ORDERNO; Byte delischecnt = dc0060[i].DELISCHECNT; //Get DC0060 data from db var dc0060db = (from dc60 in db.DC0060 where dc60.ORDERNO == orderno && dc60.DELISCHECNT == delischecnt select dc60).FirstOrDefault(); //Case of update if (dc0060db != null) { if ((dc0060db.DELISCHEDT != dc0060[i].DELISCHEDT) || (dc0060db.DELISCHEQTY != dc0060[i].DELISCHEQTY)) { //DateTime updtLng = new DateTime (1970,1,1) + TimeSpan.FromMilliseconds(dc0060[i].UPDTLNG); DateTime updtLng = new DateTime(1970, 1, 1) + TimeSpan.FromMilliseconds(dc0060[i].UPDTLNG) + TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now); var date = (new DateTime(1970, 1, 1)).AddMilliseconds(double.Parse(dc0060[i].UPDTLNG.ToString())); if (dc0060db.UPDTDT != updtLng) { dc60ConFlg = true; break; } else { dc0060db.DELISCHEDT = dc0060[i].DELISCHEDT; dc0060db.DELISCHEQTY = dc0060[i].DELISCHEQTY; db.Entry(dc0060db).State = EntityState.Modified; isDataUpd = true; } } } //Case of insert else { db.DC0060.Add(dc0060[i]); isDataUpd = true; } } //Case of delete String ordernum = dc0060[0].ORDERNO; List <KYOSAI_WEB.Models.DC0060> dc60db = (from dc60 in db.DC0060 where dc60.ORDERNO == ordernum select dc60).ToList(); if (dc60db.Count() > 0) { for (int c1 = 0; c1 < dc60db.Count; c1++) { bool datafound = false; for (int c2 = 0; c2 < dc0060.Count; c2++) { if ((dc60db[c1].ORDERNO == dc0060[c2].ORDERNO) && (dc60db[c1].DELISCHECNT == dc0060[c2].DELISCHECNT)) { datafound = true; } } if (!datafound) { db.Entry(dc60db[c1]).State = EntityState.Deleted; isDataUpd = true; } } } //Get D3010 data for update D3010 d3010Db = db.D3010.Find(dc0060[0].ORDERNO); if (d3010Db != null && d3010Db.BCCMT != remark) { if (d3010Db.UPDTDT != D3010Updtdt) { d310ConCurFlg = true; } else { d3010Db.BCCMT = remark; db.Entry(d3010Db).State = EntityState.Modified; isDataUpd = true; } } } var bolDataCommit = false; if (isDataUpd && !d310ConCurFlg && !dc60ConFlg) { db.Configuration.ValidateOnSaveEnabled = false; db.SaveChanges(); db.Configuration.ValidateOnSaveEnabled = true; dbTran.Commit(); bolDataCommit = true; } if ((d310ConCurFlg || dc60ConFlg)) { if (isDataUpd && !bolDataCommit) { dbTran.Rollback(); } TempData["ErrMsg"] = "他の端末にて更新中です。しばらく経ってから再度お試しください。"; TempData.Keep("ErrMsg"); } } catch (Exception e) { dbTran.Rollback(); ViewData["errMsgForErrorPage"] = e; return(View("~/Views/Shared/Error.cshtml")); } Session["scrollTop"] = scrollTop; Session["scrollGridVer"] = scrollGridVer; Session["scrollGridHor"] = scrollGridHor; return(RedirectToAction("getData", "D3010", new { @SUPPCD = (Session["SUPPCD"] == null ? "" : Session["SUPPCD"].ToString()), @ORDERNO = (Session["ORDERNO"] == null ? "" : Session["ORDERNO"].ToString()), @ORDERNOTO = (Session["ORDERNOTO"] == null ? "" : Session["ORDERNOTO"].ToString()), @SEHMNO = (Session["SEHMNO"] == null ? "" : Session["SEHMNO"].ToString()), @SEHMNOTO = (Session["SEHMNOTO"] == null ? "" : Session["SEHMNOTO"].ToString()), @HMNM = (Session["HMNM"] == null ? "" : Session["HMNM"].ToString()), @ORDERDTFR = (Session["ORDERDTFR"] == null ? "" : Session["ORDERDTFR"].ToString()), @ORDERDTTO = (Session["ORDERDTTO"] == null ? "" : Session["ORDERDTTO"].ToString()), @MAKERIPNM = (Session["MAKERIPNM"] == null ? "" : Session["MAKERIPNM"].ToString()), @AGREEDFR = (Session["AGREEDFR"] == null ? "" : Session["AGREEDFR"].ToString()), @AGREEDTO = (Session["AGREEDTO"] == null ? "" : Session["AGREEDTO"].ToString()), @DELINM = (Session["DELINM"] == null ? "" : Session["DELINM"].ToString()), @REQDELIDTFR = (Session["REQDELIDTFR"] == null ? "" : Session["REQDELIDTFR"].ToString()), @REQDELIDTTO = (Session["REQDELIDTTO"] == null ? "" : Session["REQDELIDTTO"].ToString()), @CHARGENM = (Session["CHARGENM"] == null ? "" : Session["CHARGENM"].ToString()), @STATE1 = (Session["STATE1"] == null ? "" : Session["STATE1"].ToString()), @STATE2 = (Session["STATE2"] == null ? "" : Session["STATE2"].ToString()), @REPLYKBN1 = (Session["REPLYKBN1"] == null ? "" : Session["REPLYKBN1"].ToString()), @REPLYKBN2 = (Session["REPLYKBN2"] == null ? "" : Session["REPLYKBN2"].ToString()), @REPLYKBN3 = (Session["REPLYKBN3"] == null ? "" : Session["REPLYKBN3"].ToString()), @OrderSeachFlg = (Session["OrderSeachFlg"] == null ? "0" : Session["OrderSeachFlg"].ToString()), @ShmnoSeachFlg = (Session["ShmnoSeachFlg"] == null ? "" : Session["ShmnoSeachFlg"].ToString()) })); }
public ActionResult UpdateData([Bind(Include = "ORDERNO,ORDERKBN,ORDERDT,SUPPCD,DELICD,HMNO,ORDERQTY,ORDERUNIT,PRICEKBN,PRICE,PRICEUNIT,AMOUNT,TAXKBN,AGREED,REPLY,STATE,REMARK,PRTKBN1,PRTKBN2,DECIKBN,REPLANKBN,SORDERNO,EXCEKBN,RATE,INSTID,INSTDT,INSTTERM,INSTPRGNM,UPDTID,UPDTDT,UPDTTERM,UPDTPRGNM,KYOTENCD,JITANCD,JORDERNO,SZCMT,BCCMT,SHEETNO,ROWNO,PRTDT1,REPLYDLDT,REQDELIDT,ADJREQKBN,MORDERNO,GAITNKBN")] List <D3010> d3010, int scrollTop, int scrollGridVer, int scrollGridHor) { if (Session["LoginUserid"] == null) { ViewData["ID"] = "Login"; return(RedirectToAction("Index", "Login")); } ViewData["ID"] = "納期回答画面"; DbContextTransaction dbTran = db.Database.BeginTransaction(); var av_userid = new OracleParameter("av_userid", OracleDbType.Varchar2, Session["LoginUserid"], ParameterDirection.Input); var spSql = "BEGIN DBMS_APPLICATION_INFO.SET_CLIENT_INFO(:av_userid); END; "; var spResult = db.Database.ExecuteSqlCommand(spSql, av_userid); try { List <D3010> d3010List = d3010; if (d3010List.Count > 0) { Boolean isUpdate = false; Boolean IsConCurErr = false; for (int i = 0; i < d3010List.Count; i++) { D3010 d3010Db = db.D3010.Find(d3010List[i].ORDERNO); if ((d3010Db.REPLY != d3010List[i].REPLY) || (d3010List[i].BCCMT != d3010Db.BCCMT)) { if (CheckConcurrency(d3010List[i])) { d3010Db.REPLY = d3010List[i].REPLY; d3010Db.BCCMT = d3010List[i].BCCMT; db.Entry(d3010Db).State = EntityState.Modified; List <DC0060> dC0060Lst = db.DC0060.Where(m => m.ORDERNO == d3010Db.ORDERNO).ToList(); //発注分納情報 の レコード件数 <= 1件であった場合は、発注情報、発注分納情報への更新処理を実行する。 if (dC0060Lst != null && dC0060Lst.Count == 1) { DC0060 dC0060 = dC0060Lst[0]; dC0060.DELISCHEDT = d3010Db.REPLY; db.Entry(dC0060).State = EntityState.Modified; } db.Configuration.ValidateOnSaveEnabled = false; db.SaveChanges(); db.Configuration.ValidateOnSaveEnabled = true; isUpdate = true; } else { IsConCurErr = true; break; } } } if (isUpdate && !IsConCurErr) { dbTran.Commit(); } if (IsConCurErr) { if (isUpdate) { dbTran.Rollback(); } TempData["ErrMsg"] = "他の端末にて更新中です。しばらく経ってから再度お試しください。"; TempData.Keep("ErrMsg"); } } } catch (Exception e) { dbTran.Rollback(); ViewData["errMsgForErrorPage"] = e; return(View("~/Views/Shared/Error.cshtml")); } Session["scrollTop"] = scrollTop; Session["scrollGridVer"] = scrollGridVer; Session["scrollGridHor"] = scrollGridHor; //ViewBag.HMNO = new SelectList(db.M0010, "HMNO", "HMNM", d3010.HMNO); return(RedirectToAction("getData", "D3010", new { @SUPPCD = (Session["SUPPCD"] == null ? "" : Session["SUPPCD"].ToString()), @ORDERNO = (Session["ORDERNO"] == null ? "" : Session["ORDERNO"].ToString()), @ORDERNOTO = (Session["ORDERNOTO"] == null ? "" : Session["ORDERNOTO"].ToString()), @SEHMNO = (Session["SEHMNO"] == null ? "" : Session["SEHMNO"].ToString()), @SEHMNOTO = (Session["SEHMNOTO"] == null ? "" : Session["SEHMNOTO"].ToString()), @HMNM = (Session["HMNM"] == null ? "" : Session["HMNM"].ToString()), @ORDERDTFR = (Session["ORDERDTFR"] == null ? "" : Session["ORDERDTFR"].ToString()), @ORDERDTTO = (Session["ORDERDTTO"] == null ? "" : Session["ORDERDTTO"].ToString()), @MAKERIPNM = (Session["MAKERIPNM"] == null ? "" : Session["MAKERIPNM"].ToString()), @AGREEDFR = (Session["AGREEDFR"] == null ? "" : Session["AGREEDFR"].ToString()), @AGREEDTO = (Session["AGREEDTO"] == null ? "" : Session["AGREEDTO"].ToString()), @DELINM = (Session["DELINM"] == null ? "" : Session["DELINM"].ToString()), @REQDELIDTFR = (Session["REQDELIDTFR"] == null ? "" : Session["REQDELIDTFR"].ToString()), @REQDELIDTTO = (Session["REQDELIDTTO"] == null ? "" : Session["REQDELIDTTO"].ToString()), @CHARGENM = (Session["CHARGENM"] == null ? "" : Session["CHARGENM"].ToString()), @STATE1 = (Session["STATE1"] == null ? "" : Session["STATE1"].ToString()), @STATE2 = (Session["STATE2"] == null ? "" : Session["STATE2"].ToString()), @REPLYKBN1 = (Session["REPLYKBN1"] == null ? "" : Session["REPLYKBN1"].ToString()), @REPLYKBN2 = (Session["REPLYKBN2"] == null ? "" : Session["REPLYKBN2"].ToString()), @REPLYKBN3 = (Session["REPLYKBN3"] == null ? "" : Session["REPLYKBN3"].ToString()), @OrderSeachFlg = (Session["OrderSeachFlg"] == null ? "0" : Session["OrderSeachFlg"].ToString()), @ShmnoSeachFlg = (Session["ShmnoSeachFlg"] == null ? "" : Session["ShmnoSeachFlg"].ToString()) })); }