Beispiel #1
0
        public new static async Task <Response <Order> > CreateAsync(Order order, bool refreshFromDb = false, IList <string> navigationProperties = null)
        {
            Parallel.ForEach(order.OrderItems.Where(orderItem => orderItem.Id == Guid.Empty), orderItem => { orderItem.Id = Guid.NewGuid(); });

            if (!SalesValidator.ValidateOrder(order))
            {
                return(ResponseFactory <Order> .CreateResponse(false, ResponseCode.ErrorInvalidInput));
            }

            order.Date   = DateTime.Now;
            order.Status = OrderStatus.Created.ToInt();

            using (var orderRepository = DataLayerUnitOfWork.Repository <OrderRepository>())
            {
                var createdOrder =
                    await orderRepository.CreateAsync(order.CopyTo <DataLayer.Order>(), refreshFromDb, navigationProperties).ConfigureAwait(false);

                if (createdOrder == null)
                {
                    return(ResponseFactory <Order> .CreateResponse(false, ResponseCode.Error));
                }

                return(ResponseFactory <Order> .CreateResponse(true, ResponseCode.Success, createdOrder.CopyTo <Order>()));
            }
        }
Beispiel #2
0
        public new static async Task <Response <Order> > UpdateAsync(Order order, bool refreshFromDb = false, IList <string> navigationProperties = null)
        {
            if (!SalesValidator.ValidateOrder(order, false))
            {
                return(ResponseFactory <Order> .CreateResponse(false, ResponseCode.ErrorInvalidInput));
            }

            using (var orderRepository = DataLayerUnitOfWork.Repository <OrderRepository>())
            {
                var updatedOrder =
                    await orderRepository.UpdateAsync(order.CopyTo <DataLayer.Order>(), refreshFromDb, navigationProperties).ConfigureAwait(false);

                if (updatedOrder == null)
                {
                    return(ResponseFactory <Order> .CreateResponse(false, ResponseCode.Error));
                }

                return(ResponseFactory <Order> .CreateResponse(true, ResponseCode.Success, updatedOrder.CopyTo <Order>()));
            }
        }
Beispiel #3
0
        public static async Task <Response <Order> > Cancel(Order order)
        {
            if (!SalesValidator.ValidateOrder(order, false))
            {
                return(ResponseFactory <Order> .CreateResponse(false, ResponseCode.ErrorInvalidInput));
            }

            order.Status = OrderStatus.Cancelled.ToInt();

            using (var orderRepository = DataLayerUnitOfWork.Repository <OrderRepository>())
            {
                var dbModel      = order.CopyTo <DataLayer.Order>();
                var updatedOrder = await orderRepository.UpdateAsync(dbModel).ConfigureAwait(false);

                if (updatedOrder == null)
                {
                    return(ResponseFactory <Order> .CreateResponse(false, ResponseCode.Error));
                }

                return(ResponseFactory <Order> .CreateResponse(true, ResponseCode.Success, order));
            }
        }
Beispiel #4
0
        public static async Task <Response <OrderItem> > UpdateAsync(OrderItem orderItem)
        {
            using (var unitOfWork = new DataLayerUnitOfWork())
            {
                var order = await unitOfWork.TrackingRepository <OrderRepository>().GetAsync(orderItem.OrderId).ConfigureAwait(false);

                if (!SalesValidator.ValidateOrderItem(orderItem, (SaleType)order.SaleType))
                {
                    return(ResponseFactory <OrderItem> .CreateResponse(false, ResponseCode.ErrorInvalidInput));
                }

                var dbModel = orderItem.CopyTo <DataLayer.OrderItem>();
                var result  = await unitOfWork.TrackingRepository <OrderItemRepository>().UpdateAsync(dbModel).ConfigureAwait(false);

                if (result == null)
                {
                    return(ResponseFactory <OrderItem> .CreateResponse(false, ResponseCode.Error));
                }

                return(ResponseFactory <OrderItem> .CreateResponse(true, ResponseCode.Success, result.CopyTo <OrderItem>()));
            }
        }
Beispiel #5
0
        public static async Task <Response <Order> > Finalize(Order order)
        {
            if (!SalesValidator.ValidateOrder(order, false))
            {
                return(ResponseFactory <Order> .CreateResponse(false, ResponseCode.ErrorInvalidInput));
            }

            order.Status = OrderStatus.Finalized.ToInt();

            using (var unitOfWork = new DataLayerUnitOfWork())
            {
                var orderRepository = unitOfWork.TrackingRepository <OrderRepository>();

                var dbModel      = order.CopyTo <DataLayer.Order>();
                var updatedOrder = await orderRepository.UpdateAsync(dbModel, true).ConfigureAwait(false);

                if (updatedOrder == null)
                {
                    return(ResponseFactory <Order> .CreateResponse(false, ResponseCode.Error));
                }

                return(await CreatePayroll(order, unitOfWork, orderRepository));
            }
        }