public ActionResult CancelOrder(int cancelOrderId) { var order = this.Data.Orders.SearchFor(o => o.OrderId == cancelOrderId).FirstOrDefault(); if (order != null) { switch (order.OrderStatus) { case OrderStatus.Unassigned: break; case OrderStatus.Waiting: break; case OrderStatus.InProgress: return(ErrorResult("Order in progress cannot be cancelled!")); case OrderStatus.Finished: return(ErrorResult("Order is already finished!")); case OrderStatus.Cancelled: return(ErrorResult("Order is already cancelled!")); default: break; } // Updating or adding a new OperatorOrder entity var operatorUser = this.Data.Users.SearchFor(u => u.Id == UserProfile.Id).FirstOrDefault(); var lastOperatorOrder = this.Data.OperatorsOrders.All().Where(o => o.OrderId == cancelOrderId).FirstOrDefault(); if (lastOperatorOrder != null) { // Update operator Id and comment lastOperatorOrder.OperatorId = operatorUser.Id; lastOperatorOrder.Comment += " Cancelled at " + DateTime.Now.ToString(); this.Data.OperatorsOrders.Update(lastOperatorOrder); } else { // Mobile client order that is being cancelled by the operator var operatorOrder = new OperatorOrder() { OperatorId = operatorUser.Id, OrderId = order.OrderId, Comment = "Cancelled at " + DateTime.Now.ToString() }; this.Data.OperatorsOrders.Add(operatorOrder); } order.OrderStatus = OrderStatus.Cancelled; var customer = order.Customer; var district = order.District; this.Data.Orders.Update(order); this.Data.Orders.SaveChanges(); this.bridge.CancelOrder(order.OrderId, district.DistrictId); } else { return(ErrorResult("Order could not be found!")); } return(PartialView("_OrderInputPartialView", new OrderInputVM())); }
public ActionResult UpdateOrder(OrderInputVM orderVm) { if (ModelState.IsValid) { var order = this.Data.Orders.SearchFor(o => o.OrderId == orderVm.OrderId).FirstOrDefault(); if (order != null) { // HACK: (EF hack) re-assigning district and customer var operatorUser = this.Data.Users.SearchFor(u => u.Id == UserProfile.Id).FirstOrDefault(); var district = operatorUser.District; var customer = this.Data.Users.SearchFor(u => u.Id == order.Customer.Id).FirstOrDefault(); OrderInputVM.UpdateOrderFromOperator(orderVm, order); order.District = district; order.Customer = customer; this.Data.Orders.Update(order); // Updating or adding a new OperatorOrder entity var lastOperatorOrder = this.Data.OperatorsOrders.All().Where(o => o.OrderId == orderVm.OrderId).FirstOrDefault(); if (lastOperatorOrder != null) { // Update operator Id and comment lastOperatorOrder.OperatorId = operatorUser.Id; lastOperatorOrder.Comment = orderVm.UserComment; this.Data.OperatorsOrders.Update(lastOperatorOrder); } else { // Mobile client order that is updated by the operator var operatorOrder = new OperatorOrder() { OperatorId = operatorUser.Id, OrderId = orderVm.OrderId, Comment = orderVm.UserComment }; this.Data.OperatorsOrders.Add(operatorOrder); } this.Data.SaveChanges(); var orderVM = this.Data.Orders.All().Where(o => o.OrderId == order.OrderId).Project().To <OrderDetailsDTO>().FirstOrDefault(); this.bridge.UpdateOrder(orderVM, district.DistrictId); } else { ViewBag.Error = "Order could not be found!"; return(PartialView("_OrderInputPartialView", orderVm)); } return(PartialView("_OrderInputPartialView", new OrderInputVM())); } return(PartialView("_OrderInputPartialView", orderVm)); }
public async Task <ActionResult> CreateOrder([Bind(Include = "OrderLatitude,OrderLongitude,OrderAddress,DestinationLatitude,DestinationLongitude,DestinationAddress,FirstName,LastName,PhoneNumber,UserComment")] OrderInputVM orderVm) { if (ModelState.IsValid) { ModelState.Clear(); Order order; var operatorUser = this.Data.Users.SearchFor(u => u.Id == UserProfile.Id).FirstOrDefault(); var district = operatorUser.District; var knownClient = this.Data.Users.SearchFor(u => u.PhoneNumber == orderVm.PhoneNumber).FirstOrDefault(); if (knownClient != null) { // Known client, new order order = OrderInputVM.ToOrderDataModel(orderVm, knownClient); order.OrderStatus = OrderStatus.Unassigned; order.District = district; this.Data.Orders.Add(order); this.Data.Orders.SaveChanges(); } else { //New client // TODO: Review phone user creation! ApplicationUser newClient = new ApplicationUser() { UserName = orderVm.PhoneNumber + "@getataxi.com", PhoneNumber = orderVm.PhoneNumber, // TODO: Phone user default address DefaultAddress = orderVm.OrderAddress, FirstName = orderVm.FirstName, LastName = orderVm.LastName, Email = orderVm.PhoneNumber + "@getataxi.com" }; var id = newClient.Id; var password = this.services.CreatePassword(15); var result = await UserManager.CreateAsync(newClient, password); if (result.Succeeded) { //New order for the new client order = OrderInputVM.ToOrderDataModel(orderVm, newClient); order.OrderStatus = OrderStatus.Unassigned; order.District = district; this.Data.Orders.Add(order); this.Data.Orders.SaveChanges(); } else { ViewBag.Error = "Order could not be added:" + result.Errors.ToString(); return(PartialView("_OrderInputPartialView", orderVm)); } } // New order by operator var operatorOrder = new OperatorOrder() { OperatorId = operatorUser.Id, OrderId = order.OrderId, Comment = order.UserComment }; this.Data.OperatorsOrders.Add(operatorOrder); this.Data.OperatorsOrders.SaveChanges(); var orderVM = this.Data.Orders.All().Where(o => o.OrderId == order.OrderId).Project().To <OrderDetailsDTO>().FirstOrDefault(); this.bridge.AddOrder(orderVM, district.DistrictId); //this.bridge.AddOrder(order.OrderId, district.DistrictId); return(PartialView("_OrderInputPartialView", new OrderInputVM())); } return(PartialView("_OrderInputPartialView", orderVm)); }
private bool ParseItem(CharEnumerator experIter, OperatorOrder opOrder, ref IOperator op) { StringBuilder sb = new StringBuilder(); bool isEof = false; while (!IsSplit(experIter.Current) && !IsOp(experIter.Current) && experIter.Current != '(' && experIter.Current != ')') { sb.Append(experIter.Current); if (!experIter.MoveNext()) { isEof = true; break; } } string item = sb.ToString(); if (Char.IsDigit(item[0]) || item[0] == '-' || item[0] == '+' || item[0] == '.') { op = new ValOp(Double.Parse(item)); return isEof; } if (item.Equals("DDHEIGHT")) { op = new HeightOp(this); return isEof; } else if (item.Equals("DDANGLE")) { op = new AngleOp(this); return isEof; } else if (item.Equals("DDRADIUS")) { op = new RadiusOp(this); return isEof; } if (isEof) throw new FormatException(); if (item.Equals("TIMES")) { IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref valueOp); op = new MulOp(null, valueOp); } else if (item.Equals("DIFFERENCE")) { IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref valueOp); IOperator nextValueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref nextValueOp); op = new SubOp(valueOp, nextValueOp); } else if (item.Equals("SUM")) { IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref valueOp); IOperator nextValueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref nextValueOp); op = new AddOp(valueOp, nextValueOp); } else if (item.Equals("DIV")) { IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref valueOp); IOperator nextValueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref nextValueOp); op = new DivOp(valueOp, nextValueOp); } else if (item.Equals("TANF")) { IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref valueOp); IOperator nextValueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref nextValueOp); op = new TanfOp(valueOp, nextValueOp); } else if (item.Equals("MIN")) { IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_PARAM, ref valueOp); if (isEof || experIter.Current != ',' || !experIter.MoveNext()) throw new FormatException(); IOperator nextValueOp = null; isEof = Parse(experIter, OperatorOrder.NONE, ref nextValueOp); isFunBracketEnd = false; op = new MinOp(valueOp, nextValueOp); } else if (item.Equals("MAX")) { IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_PARAM, ref valueOp); if (isEof || experIter.Current != ',' || !experIter.MoveNext()) throw new FormatException(); IOperator nextValueOp = null; isEof = Parse(experIter, OperatorOrder.NONE, ref nextValueOp); isFunBracketEnd = false; op = new MaxOp(valueOp, nextValueOp); } else if (item.Equals("COS")) { CosOp cosOp = new CosOp(); IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_PARAM, ref valueOp); isFunBracketEnd = false; cosOp.Item = valueOp; op = cosOp; return isEof; } else if (item.Equals("SIN")) { SinOp sinOp = new SinOp(); IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_PARAM, ref valueOp); isFunBracketEnd = false; sinOp.Item = valueOp; op = sinOp; return isEof; } else if (item.Equals("SQRT")) { SqrtOp sqrtOp = new SqrtOp(); IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_PARAM, ref valueOp); isFunBracketEnd = false; sqrtOp.Item = valueOp; op = sqrtOp; return isEof; } else if (item.Equals("INT")) { IntOp intOp = new IntOp(); IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_PARAM, ref valueOp); isFunBracketEnd = false; intOp.Item = valueOp; op = intOp; return isEof; } else if (item.Equals("PARAM")) { ParamOp paramOp = new ParamOp(this); IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref valueOp); paramOp.Item = valueOp; op = paramOp; return isEof; } else if (item.Equals("IPARAM")) { IParamOp paramOp = new IParamOp(this); IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref valueOp); paramOp.Item = valueOp; op = paramOp; return isEof; } else if (item.Equals("DESIGN")) { isEof = !SkipSpace(experIter); if (isEof) throw new FormatException(); sb = new StringBuilder(); while (!IsSplit(experIter.Current) && !IsOp(experIter.Current) && experIter.Current != '(' && experIter.Current != ')') { sb.Append(experIter.Current); if (!experIter.MoveNext()) { isEof = true; break; } } if (isEof) throw new FormatException(); item = sb.ToString(); if (item.Equals("PARAM")) { DParamOp paramOp = new DParamOp(this); IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref valueOp); paramOp.Item = valueOp; op = paramOp; return isEof; } else throw new FormatException(); } else if (item.Equals("TWICE")) { IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref valueOp); op = new TwiceOp(valueOp); } else if (item.Equals("ATTRIB")) { isEof = !SkipSpace(experIter); if (isEof) throw new FormatException(); sb = new StringBuilder(); while (!IsSplit(experIter.Current) && !IsOp(experIter.Current) && experIter.Current != '(' && experIter.Current != ')') { sb.Append(experIter.Current); if (!experIter.MoveNext()) { isEof = true; break; } } if (isEof) throw new FormatException(); item = sb.ToString(); if (item.Equals("RPRO")) { isEof = !SkipSpace(experIter); if (isEof) throw new FormatException(); sb = new StringBuilder(); while (!IsSplit(experIter.Current) && !IsOp(experIter.Current) && experIter.Current != '(' && experIter.Current != ')') { sb.Append(experIter.Current); if (!experIter.MoveNext()) { isEof = true; break; } } if (isEof) throw new FormatException(); item = sb.ToString(); DbExperOp experOp = new DbExperOp(this); experOp.DbExper = DbExpression.Parse("ATTRIB RPRO " + item); op = experOp; } else { DbAttribute attr = DbAttribute.GetDbAttribute(item); if (attr == null) throw new FormatException(); while (!isEof && Char.IsWhiteSpace(experIter.Current)) { isEof = !experIter.MoveNext(); } if (isEof || experIter.Current == '[') { AttribArrayOp paramOp = new AttribArrayOp(this); paramOp.Attr = attr; IOperator valueOp = null; isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref valueOp); paramOp.Item = valueOp; op = paramOp; } else { AttribOp paramOp = new AttribOp(this); paramOp.Attr = attr; op = paramOp; } } } else if (item.Equals("PL") || item.Equals("PA")) { isEof = !SkipSpace(experIter); if (isEof) throw new FormatException(); sb = new StringBuilder(); while (!IsSplit(experIter.Current) && !IsOp(experIter.Current) && experIter.Current != '(' && experIter.Current != ')') { sb.Append(experIter.Current); if (!experIter.MoveNext()) { isEof = true; break; } } if (isEof) throw new FormatException(); DbAttribute attr = item.Equals("PL") ? DbAttributeInstance.LOD : DbAttributeInstance.AOD; item = sb.ToString(); if (!item.Equals("OD")) throw new FormatException(); AttribOp paramOp = new AttribOp(this); paramOp.Attr = attr; op = paramOp; } else if (item.Equals("PLOD")) { AttribOp paramOp = new AttribOp(this); paramOp.Attr = DbAttributeInstance.LOD; op = paramOp; } else if (item.Equals("PAOD")) { AttribOp paramOp = new AttribOp(this); paramOp.Attr = DbAttributeInstance.AOD; op = paramOp; } else throw new FormatException(); return isEof; }
private bool Parse(CharEnumerator experIter, OperatorOrder opOrder, ref IOperator op) { op = null; if (!SkipSpace(experIter)) return true; bool isEof = false; if (IsOp(experIter.Current)) { if (experIter.Current == '-') { isEof = !experIter.MoveNext(); IOperator valueOp = null; if (!isEof) isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref valueOp); if (valueOp == null) throw new FormatException(); op = new NegOp(valueOp); } else if (experIter.Current == '+') { isEof = !experIter.MoveNext(); if (isEof) throw new FormatException(); isEof = Parse(experIter, OperatorOrder.NEED_VALUE, ref op); } else throw new FormatException(); } else if (experIter.Current == '(') { isEof = !experIter.MoveNext(); if (isEof) throw new FormatException(); if (!SkipSpace(experIter)) throw new FormatException(); if (opOrder == OperatorOrder.NEED_PARAM) bracketStack.Push(BracketType.FUNCTION); else bracketStack.Push(BracketType.GENERAL); isFunBracketEnd = false; isEof = Parse(experIter, OperatorOrder.NONE, ref op); } else if (experIter.Current == ')') { if (bracketStack.Count <= 0) throw new FormatException(); BracketType type = bracketStack.Pop(); if (type == BracketType.FUNCTION) isFunBracketEnd = true; isEof = !experIter.MoveNext(); return isEof; } else { isEof = ParseItem(experIter, OperatorOrder.NEED_VALUE, ref op); } bool isEnd = false; while (!isEof && !isEnd && !isFunBracketEnd && (opOrder == OperatorOrder.NONE || opOrder == OperatorOrder.NEED_PARAM) && experIter.Current != ',') { IOperator nextValueOp = null; isEof = Parse(experIter, op, ref nextValueOp, ref isEnd); if (nextValueOp != null) op = nextValueOp; } return isEof; }