public async Task<Order> Add(Order item) { if (!item.CreateBy.HasValue) { throw new ArgumentNullException("CreateBy", "CreateBy is Required"); } var order = new Order { CreateBy = await EmpExist(item.CreateBy.Value), CreateDate = DateTime.UtcNow, HdId = await HdExist(item.HdId), Version = await VersionExist(item.Version), Quantity = item.Quantity, State = 1,//create Deadline = item.Deadline }; if (item.Comment != null) order.Comment = item.Comment; order = _db.Orders.Add(order); try { await _db.SaveChangesAsync(); await AddVehicle(order.Quantity, order.HdId, order.Id); return order; } catch (DbUpdateConcurrencyException exception) { throw new DbUpdateConcurrencyException(exception.Message); } }
public async Task<bool> Update(Order item) { var order = await IdExist(item.Id); switch (item.State) { case 2: //checked (cs) var changeHd = false; var changeQuantity = false; if (order.HdId != item.HdId) changeHd = true; if (order.Quantity != item.Quantity) changeQuantity = true; order.HdId = await HdExist(item.HdId); order.Version = await VersionExist(item.Version); order.Quantity = item.Quantity; order.State = 2; order.Deadline = item.Deadline; //clear currentUser order.CurrentUser = null; //if (item.CurrentUser != null) order.CurrentUser = await EmpExist(item.CurrentUser.Value); if (item.Comment != null) order.Comment = item.Comment; //changeHD ... move vehicle from old hd to new hd //changeQuantity ... add or delete vehicle to eq New Order Quantity if (changeHd || changeQuantity) await ChangeOrder(changeHd, order.HdId, item.HdId, order.Quantity, order.Id); break; /*case 3: //QCworking (Qc) ... update in updateCurrentUser break;*/ case 4: //QCcomplete (Qc) //order.state = QCcomplete , when all productGPS in this Order active on universe var uni = _db.Universes.Where(u => u.OrderId == order.Id && u.GpsProductId == null); if (uni.Any()) throw new ArgumentNullException("GpsProductId", "one or more ProductGPS in this Order incomplete!!!"); order.State = 4; //clear currentUser order.CurrentUser = null; break; case 5: //Installation (cs) if (item.HeadInstall == null) throw new ArgumentNullException("HeadInstall", "HeadInstall is Required for this state"); var head = await EmpExist(item.HeadInstall.Value); //check logFee all product in this order var pd = _db.Gpss.Where(g => g.OrderId == order.Id); if (pd.Any()) { var logFee = _db.LogFees.OrderByDescending(f => f.CreateDate); foreach (var gps in pd) { var fee = await logFee.FirstOrDefaultAsync(f => f.GpsId == gps.Id); if (fee == null) throw new ArgumentNullException("GpsProductId", "one or more ProductGPS in LogFee incomplete!!!"); //update all product.state = 4 and product.installBy = HeadInstall gps.State = 4; gps.InstallBy = head; _db.Entry(gps).State = EntityState.Modified; } } else throw new ArgumentNullException("GpsProductId", "Notfound ProductGPS in this Order!!!"); order.HeadInstall = head; order.State = 5; //clear currentUser order.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(order).State = EntityState.Modified; try { await _db.SaveChangesAsync(); } catch (DbUpdateConcurrencyException exception) { throw new DbUpdateConcurrencyException(exception.Message); } return true; }