public async Task<FixOrder> Add(FixOrder item) { if (!item.CreateBy.HasValue) { throw new ArgumentNullException("CreateBy", "CreateBy is Required"); } var gps = await GpsExist(item.ProblemProduct); var uni = await _db.Universes.FirstOrDefaultAsync(u => u.GpsProductId == gps.Id); var usrCreate = await EmpExist(item.CreateBy.Value); var d = DateTime.UtcNow; var fix = new FixOrder { CreateBy = usrCreate, CreateDate = d, State = 1, ProblemProduct = gps.Id }; //update product.State = bad & universe.DisplayStatus = test uni.DisplayStatus = 2;//test gps.State = 5;//bad gps.BadBy = usrCreate; gps.BadDate = d; if (item.Comment != null) { fix.Comment = item.Comment; gps.BadComment = item.Comment; } if (item.FromFixOrderId != null) fix.FromFixOrderId = await FixExist(item.FromFixOrderId.Value); if (item.FromOrderId != null) fix.FromOrderId = await OrderExist(item.FromOrderId.Value); //clear currentUser fix.CurrentUser = null; fix = _db.FixOrders.Add(fix); _db.Entry(gps).State = EntityState.Modified; _db.Entry(uni).State = EntityState.Modified; try { await _db.SaveChangesAsync(); return fix; } catch (DbUpdateConcurrencyException exception) { throw new DbUpdateConcurrencyException(exception.Message); } }
public async Task<bool> Update(FixOrder item) { var fix = await IdExist(item.Id); switch (item.State) { case 2: //checked (cs) if (fix.ProblemProduct != item.ProblemProduct) { var uniOld = await _db.Universes.FirstOrDefaultAsync(u => u.GpsProductId == fix.ProblemProduct); var gpsOld = fix.ProblemGps; var uniNew = await _db.Universes.FirstOrDefaultAsync(u => u.GpsProductId == item.ProblemProduct); var gpsNew = await GpsExist(item.ProblemProduct); uniNew.DisplayStatus = 2;//test gpsNew.State = 5;//bad gpsNew.BadBy = gpsOld.BadBy; gpsNew.BadDate = gpsOld.BadDate; _db.Entry(uniNew).State = EntityState.Modified; _db.Entry(gpsNew).State = EntityState.Modified; uniOld.DisplayStatus = 3;//normal gpsOld.State = 4;//install gpsOld.BadBy = null; gpsOld.BadDate = null; _db.Entry(uniOld).State = EntityState.Modified; _db.Entry(gpsOld).State = EntityState.Modified; } fix.FromFixOrderId = item.FromFixOrderId; fix.FromOrderId = item.FromOrderId; fix.Comment = item.Comment; fix.CurrentUser = null; fix.State = 2; break; /*case 3: //QCworking (Qc) ... update in updateCurrentUser //add SolvedProduct to fixOrder break;*/ case 4: //QCcomplete (Qc) if (!fix.SolvedProduct.HasValue) throw new ArgumentNullException("SolvedProduct", "SolvedProduct in this FixOrder incomplete!!!"); if (fix.ProblemProduct != fix.SolvedProduct) { //update logFee.GpsId from problem_id to solved_id var fee = await _db.LogFees.OrderByDescending(f => f.CreateDate) .FirstOrDefaultAsync(f => f.GpsId == fix.ProblemProduct); if (fee == null) throw new ArgumentNullException("ProblemProduct", "Notfound ProblemProduct in LogFees!!!"); fee.GpsId = fix.SolvedProduct.Value; _db.Entry(fee).State = EntityState.Modified; } fix.State = 4; fix.CurrentUser = null; break; case 5: //Installation (cs) if (item.HeadInstall == null) throw new ArgumentNullException("HeadInstall", "HeadInstall is Required for this state"); fix.HeadInstall = await EmpExist(item.HeadInstall.Value); fix.State = 5; fix.CurrentUser = null; break; /*case 6: //Complete (install) ... update in product process break;*/ /*case 8: //Incomplete (install) ... when create fixOrder from this Order break;*/ default: throw new ArgumentException("Incorrect State", "State"); } _db.Entry(fix).State = EntityState.Modified; try { await _db.SaveChangesAsync(); } catch (DbUpdateConcurrencyException exception) { throw new DbUpdateConcurrencyException(exception.Message); } return true; }