Ejemplo n.º 1
0
        /// <summary>
        ///   Add order to area.
        /// </summary>
        /// <param name="file">Order to add.</param>
        /// <param name="currentUserId">Id of current user.</param>
        /// <returns>
        ///    Added order.
        /// </returns>
        /// <exception cref="System.ArgumentException">When one of params invalid.</exception>
        /// <exception cref="UnauthorizedAccessException">When customer id != user id</exception>

        public async Task <OrderToReturn> AddOrder(OrderToAdd order, string currentUrl, long currentUserId)
        {
            order.CheckArgumentException();

            var user = await _userRepository.GetAsync(currentUserId);

            order = order.CustomerId == user.Id
                ? order
                : throw new UnauthorizedAccessException();

            var attachments = await SaveFiles(order.Attachments, currentUrl, Defines.FileFolders.ORDER_ATTACHMENTS_FOLDER);

            var savedOrder = await _orderRepository.AddAsync(order);

            var skills = new List <Skill>();

            if (order.Skills != null)
            {
                foreach (var skill in order.Skills)
                {
                    await _orderSkillRepository.AddAsync(new OrderSkill
                    {
                        OrderId = order.Id,
                        SkillId = skill.Id
                    });
                }
            }

            return(savedOrder.ConvertOrderToReturn(attachments, skills));
        }
Ejemplo n.º 2
0
            public ProvisionShould()
            {
                customerRepositoryMock = new Mock <ICustomerRepository>();
                mobileRepositoryMock   = new Mock <IRepository <Mobile> >();
                guidCreatorMock        = new Mock <IGuidCreator>();
                monitoringMock         = new Mock <IMonitoring>();
                customersServiceMock   = new Mock <ICustomersService>();
                var loggingMock = new Mock <ILogger <CustomersController> >();
                var getMobilesByCustomerIdQueryMock = new Mock <IGetMobilesByCustomerIdQuery>();
                var dateTimeCreatorMock             = new Mock <IDateTimeCreator>();

                expectedOrderToAdd = new OrderToAdd
                {
                    Name = "Neil Armstrong",
                    ContactPhoneNumber = "01234 123123"
                };
                expectedCustomerGlobalId = Guid.NewGuid();
                expectedMobile           = new Mobile(dateTimeCreatorMock.Object, new MobileDataEntity()
                {
                    Id         = 101,
                    GlobalId   = Guid.NewGuid(),
                    CustomerId = expectedCustomerGlobalId,
                    State      = Mobile.MobileState.New.ToString()
                });

                customersServiceMock.Setup(x => x.Provision(expectedCustomerGlobalId, expectedOrderToAdd))
                .Returns(expectedMobile);

                sut = new CustomersController(customerRepositoryMock.Object,
                                              mobileRepositoryMock.Object,
                                              monitoringMock.Object,
                                              getMobilesByCustomerIdQueryMock.Object,
                                              customersServiceMock.Object);
            }
            public void ReturnNewMobile()
            {
                var dateTimeCreatorMock = new Mock <IDateTimeCreator>();

                var expectedGuid = Guid.NewGuid();
                var expectedId   = 0;
                var expectedInProgressOrderGuid = Guid.NewGuid();
                var expectedOrderToAdd          = new OrderToAdd()
                {
                    Name = "Neil", ContactPhoneNumber = "01234"
                };
                var expectedCustomerId = Guid.NewGuid();
                var phoneNumber        = new PhoneNumber("07930123456");

                var sut = new MobileWhenNewBuilder(dateTimeCreatorMock.Object, expectedGuid, expectedCustomerId, phoneNumber)
                          .AddInProgressOrder(expectedOrderToAdd, expectedInProgressOrderGuid);
                var actual = sut.Build();

                actual.State.Should().Be(Mobile.MobileState.New);
                actual.Id.Should().Be(expectedId);
                actual.GlobalId.Should().Be(expectedGuid);
                actual.CustomerId.Should().Be(expectedCustomerId);
                actual.InProgressOrder.GlobalId.Should().Be(expectedInProgressOrderGuid);
                actual.InProgressOrder.Name.Should().Be(expectedOrderToAdd.Name);
                actual.InProgressOrder.ContactPhoneNumber.Should().Be(expectedOrderToAdd.ContactPhoneNumber);
            }
Ejemplo n.º 4
0
            public CreateShould()
            {
                expectedOrderToAdd = new OrderToAdd()
                {
                    Reference = Guid.NewGuid()
                };
                dataStoreMock = new Mock <IDataStore>();

                sut = new OrdersController(dataStoreMock.Object);
            }
Ejemplo n.º 5
0
            public void ReturnOk()
            {
                var expectedOrder = new OrderToAdd
                {
                    Reference = Guid.NewGuid()
                };

                var actual = sut.Create(expectedOrder);

                actual.Should().BeOfType <OkResult>();
            }
Ejemplo n.º 6
0
            public void AddOrder()
            {
                var expectedOrder = new OrderToAdd
                {
                    Reference = Guid.NewGuid()
                };

                sut.Create(expectedOrder);

                ordersDataStoreMock.Verify(x => x.Add(It.Is <Order>(y => y.Reference == expectedOrder.Reference && y.Status == "New")));
                transactionMock.Verify(x => x.Dispose());
            }
            public void AddMobileToRepositoryWithStateOfNew()
            {
                var expectedOrder = new OrderToAdd
                {
                    Name = "Neil Armstrong",
                    ContactPhoneNumber = "01234 123123"
                };

                sut.Provision(expectedCustomer.GlobalId, expectedOrder);

                mobileRepositoryMock.Verify(x => x.Add(It.Is <Mobile>(y =>
                                                                      y.GlobalId == expectedNewMobileGlobalId &&
                                                                      y.State == Mobile.MobileState.New &&
                                                                      y.CustomerId == expectedCustomer.GlobalId)));
            }
        public MobileWhenNewBuilder AddInProgressOrder(OrderToAdd order, Guid orderGlobalId)
        {
            var newStateName = new EnumConverter().ToName <MobileState>(MobileState.New);
            var dataEntity   = new OrderDataEntity()
            {
                GlobalId           = orderGlobalId,
                Name               = order.Name,
                ContactPhoneNumber = order.ContactPhoneNumber,
                State              = newStateName,
                Type               = this.enumConverter.ToName <Order.OrderType>(Order.OrderType.Provision)
            };

            orders.Add(new Order(dataEntity));

            return(this);
        }
        public IActionResult Create([FromBody] OrderToAdd orderToAdd)
        {
            var order = new Order
            {
                PhoneNumber = orderToAdd.PhoneNumber,
                Name        = orderToAdd.Name,
                Reference   = orderToAdd.Reference,
                Status      = "New"
            };

            using (ordersDataStore.BeginTransaction())
            {
                ordersDataStore.Add(order);
            }

            return(new OkResult());
        }
Ejemplo n.º 10
0
        public IActionResult Create([FromBody] OrderToAdd orderToAdd)
        {
            var order = new Order
            {
                PhoneNumber    = orderToAdd.PhoneNumber,
                Reference      = orderToAdd.Reference,
                Type           = OrderTypes.Activate.ToString(),
                Status         = "New",
                ActivationCode = orderToAdd.ActivationCode
            };

            using (dataStore.BeginTransaction())
            {
                dataStore.Add(order);
            }

            return(new OkResult());
        }
Ejemplo n.º 11
0
        public Mobile Provision(Guid id, OrderToAdd orderToAdd)
        {
            var customer = customerRepository.GetById(id);

            if (customer == null)
            {
                logger.LogWarning("Attempt to Provision for an unknown Customer - CustomerId: {CustomerId}", id);
                return(null);
            }

            var mobile = new MobileWhenNewBuilder(dateTimeCreator, guidCreator.Create(), id,
                                                  new PhoneNumber(orderToAdd.PhoneNumber))
                         .AddInProgressOrder(orderToAdd, guidCreator.Create())
                         .Build();

            mobileRepository.Add(mobile);

            return(mobile);
        }
Ejemplo n.º 12
0
        public IActionResult Provision(Guid id, [FromBody] OrderToAdd orderToAdd)
        {
            var mobile = customersService.Provision(id, orderToAdd);

            if (mobile == null)
            {
                return(NotFound());
            }

            monitoring.Provision();

            return(new OkObjectResult(new MobileResource
            {
                Id = mobile.Id,
                GlobalId = mobile.GlobalId,
                CustomerId = mobile.CustomerId,
                CreatedAt = mobile.CreatedAt,
                UpdatedAt = mobile.UpdatedAt
            }));
        }
        public async Task <IActionResult> Create([FromBody, CustomizeValidator] OrderToAdd order, CancellationToken cancellationToken = default)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            try
            {
                var isEmailConf = await _userService.IsEmailConfirmedAsync(HttpContext.User.Claims.Single(_ => _.Type == "id").Value);

                if (isEmailConf.IsSuccess)
                {
                    var result = await _orderService.AddAsync(order, HttpContext.User.Claims.Single(_ => _.Type == "id").Value, cancellationToken);

                    if (result.IsError)
                    {
                        throw new InvalidOperationException(result.Message);
                    }
                    await _notificationHubContext.Clients.All.SendAsync("New order!", cancellationToken);

                    return((IActionResult)Ok(result.Data));
                    //return result.IsError ? throw new InvalidOperationException(result.Message) : (IActionResult)Ok(result.Data);
                }
                else
                {
                    return(StatusCode(StatusCodes.Status403Forbidden));
                }
            }
            catch (InvalidOperationException ex)
            {
                Log.Error(ex, ex.Message);
                return(StatusCode(StatusCodes.Status500InternalServerError, new CustumResult()
                {
                    Status = StatusCodes.Status500InternalServerError, Message = ex.Message
                }));
            }
        }
Ejemplo n.º 14
0
 // /api/user/AddOrder
 public async Task <OrderToReturn> AddOrder([FromBody] OrderToAdd order)
 {
     return(await _service.AddOrder(order, GetCurrentUrl(), User.GetUserId()));
 }
Ejemplo n.º 15
0
        //add row for order, rows for order details and row for credit card.
        private bool addOrderDetails()
        {
            bool              returnValue   = true;
            int               orderCode     = 0;
            ItemStockTable    itemStockT    = new ItemStockTable();
            ItemsTable        itemT         = new ItemsTable();
            OrderDetailsTable orderDetailsT = new OrderDetailsTable();

            //add order



            try
            {
                OrdersTable ordersTable = new OrdersTable();
                DataRow     rowToAdd    = ordersTable.Dt.NewRow();
                DataRow     currentRow  = OrderToAdd.BuildRow();
                orderCode             = int.Parse(currentRow["CodeOrder"].ToString());
                rowToAdd["CodeOrder"] = currentRow["CodeOrder"];
                rowToAdd["IDCust"]    = currentRow["IDCust"];
                rowToAdd["DateOrder"] = currentRow["DateOrder"];
                returnValue           = ordersTable.Add(rowToAdd);
            }
            catch (Exception)
            {
                returnValue = false;
            }
            //add order details
            OrderDetails detailToAdd;

            groupItemsList();
            foreach (var item in ShoppingCartListItems)
            {
                if (item.ItemAmount > 0)
                {
                    detailToAdd               = new OrderDetails();
                    detailToAdd.CodeOrder     = orderCode;
                    detailToAdd.CodeItemStoke = itemStockT.getItemStockCode(item.ItemCode, item.ColorCode, item.SizeCode) + "";
                    //decrease amount of items in stock
                    returnValue           = decreaseAmountOfItemInStock(int.Parse(detailToAdd.CodeItemStoke), item.ItemAmount);
                    detailToAdd.Amount    = item.ItemAmount;
                    detailToAdd.PriceItem = itemT.getItemPrice(item.ItemCode);
                    detailToAdd.SaleItem  = itemT.isSaleItem(item.ItemCode);
                    try
                    {
                        DataRow rowToAdd = detailToAdd.BuildRow();
                        returnValue = orderDetailsT.Add(rowToAdd);
                    }
                    catch (Exception)
                    {
                        returnValue = false;
                    }
                }
            }
            //add credit card details
            CreditCardOfCustomers      card        = new CreditCardOfCustomers();
            CreditCardOfCustomersTable creditCardT = new CreditCardOfCustomersTable();

            card.CodeCreditCard       = creditCardT.getNextCode();
            card.CodeOrder            = orderCode;
            card.NumCreditCard        = txtNumCard.Text;
            card.ValidityOfCreditCard = dtpValidate.Value;
            card.IdOwner        = txtBID.Text;
            card.ThreeNumOnCard = int.Parse(txtBThree.Text);
            card.TotalOfPrice   = lblPaymentSum.Text;
            card.NumOfPayments  = (int)nudNumOfPayments.Value;
            card.KindOfDeal     = "חיוב";
            DataRow rowToAddToCreditCardT = card.BuildRow();

            try
            {
                creditCardT.Add(rowToAddToCreditCardT);
            }
            catch (Exception)
            {
                returnValue = false;
            }


            return(returnValue);
        }
        public async Task <Result <OrderView> > AddAsync(OrderToAdd order, string userIdFromIdentity, CancellationToken cancellationToken = default)
        {
            AppUser userIdentity = await _userManager.FindByIdAsync(userIdFromIdentity);

            UserDB userDB = await _context.Users.Where(_ => _.IdFromIdentity == userIdentity.Id).Select(_ => _).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

            if (userDB is null || userIdentity is null)
            {
                return(Result <OrderView> .Fail <OrderView>(ExceptionConstants.USER_WAS_NOT_FOUND));
            }

            OrderDB orderToAdd = _mapper.Map <OrderDB>(order);

            if (orderToAdd.IsInfoFromProfile)
            {
                if (userIdentity.Address is null || userIdentity.PhoneNumber is null || userIdentity.Name is null || userIdentity.Surname is null)
                {
                    return(Result <OrderView> .Quite <OrderView>(NotificationConstans.FILL_PROFILE));
                }
                orderToAdd.Address     = userIdentity.Address;
                orderToAdd.PhoneNumber = userIdentity.PhoneNumber;
                orderToAdd.Name        = userIdentity.Name;
                orderToAdd.Surname     = userIdentity.Surname;
            }
            orderToAdd.PersonalDiscount = userIdentity.PersonalDiscount;
            orderToAdd.UserId           = userDB.Id;
            orderToAdd.Status           = Enum.GetName(typeof(OrderStatuses), 0);
            orderToAdd.UpdateTime       = DateTime.Now;
            orderToAdd.TotalCost        = 0;
            orderToAdd.DeliveryCost     = 0;

            var connections = await _context.BasketDishes.Where(_ => _.BasketId == userDB.BasketId).Select(_ => _).AsNoTracking().ToListAsync(cancellationToken);

            foreach (var connection in connections)
            {
                orderToAdd.TotalCost = orderToAdd.TotalCost.Value + connection.DishPrice.Value * (1 - (connection.Sale.Value / 100)) * connection.Quantity.Value;
            }
            orderToAdd.TotalCost *= 1 - userIdentity.PersonalDiscount / 100;
            orderToAdd.TotalCost  = Math.Round(orderToAdd.TotalCost.Value, 2);
            if (orderToAdd.TotalCost < NumberСonstants.FREE_DELIVERY_BORDER)
            {
                orderToAdd.DeliveryCost = NumberСonstants.DELIVERY_PRICE;
            }
            _context.Orders.Add(orderToAdd);

            foreach (var connection in connections)
            {
                connection.OrderId  = orderToAdd.Id;
                connection.BasketId = Guid.Empty;
                _context.Entry(connection).Property(c => c.OrderId).IsModified  = true;
                _context.Entry(connection).Property(c => c.BasketId).IsModified = true;
            }
            try
            {
                await _context.SaveChangesAsync();

                OrderDB orderAfterAdding = await _context.Orders.Where(_ => _.Id == orderToAdd.Id).Select(_ => _).AsNoTracking().FirstOrDefaultAsync(cancellationToken);

                var dishList = await _context.BasketDishes.Where(_ => _.OrderId == orderAfterAdding.Id).AsNoTracking().ToListAsync(cancellationToken);

                OrderView view  = CollectOrderView(orderAfterAdding).Result.Data;
                var       users = await _userManager.GetUsersInRoleAsync(AppIdentityConstants.ADMIN);

                foreach (var user in users)
                {
                    var sendEmailBefore = await _emailSender.SendEmailAsync(user.Email, EmailConstants.NEW_ORDER_SUBJECT, EmailConstants.NEW_ORDER_MESSAGE, cancellationToken);
                }
                return(Result <OrderView> .Ok(view));
            }
            catch (DbUpdateConcurrencyException ex)
            {
                return(Result <OrderView> .Fail <OrderView>(ExceptionConstants.CANNOT_SAVE_MODEL + ex.Message));
            }
            catch (DbUpdateException ex)
            {
                return(Result <OrderView> .Fail <OrderView>(ExceptionConstants.CANNOT_SAVE_MODEL + ex.Message));
            }
            catch (ArgumentNullException ex)
            {
                return(Result <OrderView> .Fail <OrderView>(ExceptionConstants.SOURCE_IS_NULL + ex.Message));
            }
        }