コード例 #1
0
        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()));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
		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;
		}
コード例 #5
0
		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;
		}