예제 #1
0
        public void HandleOrder(CreateOrderModel orderModel)
        {
            using (var mappers = new ManagementDataMapperContainer())
            {
                var product = mappers.ProductMapper.Get(orderModel.ProductCode);
                var customer = mappers.CustomerMapper.Get(orderModel.CustomerId);

                if (product.AvailableAmount < orderModel.Quantity)
                {
                    //
                    //  Order can't be satisfied, notify the user.
                    //
                    NotificationHelper.NotifyOrderCantBeHeld(customer, product);
                    return;
                }

                product.AvailableAmount -= orderModel.Quantity;
                mappers.ProductMapper.Update(product);

                var customerOrderMapper = mappers.CustomerOrderMapper;

                customerOrderMapper.Create(new CustomerOrder
                {
                    CustomerId = orderModel.CustomerId,
                    ProductId = orderModel.ProductCode,
                    OrderAmount = orderModel.Quantity,
                    OrderDate = DateTime.Now,
                    State = (int)OrderState.Processing
                });

                NotificationHelper.NotifyOrderIsBeingProcessed(customer, product);
            }
        }
예제 #2
0
        public SupplierModel[] AllSuppliers()
        {
            using (var mappers = new ManagementDataMapperContainer())
            {
                var supplierMapper = mappers.ProductSupplierMapper;

                return supplierMapper.Query().Select(
                    s => new SupplierModel
                    {
                        Id = s.Id,
                        Address = s.Address,
                        Name = s.Name
                    }
                ).ToArray();
            }
        }
예제 #3
0
        public ProductModel[] AllProducts()
        {
            using (var mappers = new ManagementDataMapperContainer())
            {
                var productMapper = mappers.ProductMapper;

                return productMapper.Query().Select(p =>
                    new ProductModel
                    {
                        Code = p.Id,
                        Name = p.Name,
                        Quantity = p.AvailableAmount,
                        Supplier = p.SupplierId
                    }).ToArray();
            }
        }
예제 #4
0
        public CustomerModel[] AllCustomers()
        {
            using (var mappers = new ManagementDataMapperContainer())
            {
                var customerMapper = mappers.CustomerMapper;

                return customerMapper.Query().Select
                (c => new CustomerModel
                    {
                        Number = c.Id,
                        Address = c.Address,
                        EmailAddress = c.Email
                    }
                ).ToArray();
            }
        }
예제 #5
0
        public OrderModel[] AllOrders()
        {
            using (var mappers = new ManagementDataMapperContainer())
            {
                var orderMapper = mappers.CustomerOrderMapper;

                return orderMapper.Query().Select(o =>
                    new OrderModel
                    {
                        ProductCode = o.ProductId,
                        CustomerId = o.CustomerId,
                        OrderDate = o.OrderDate,
                        Quantity = o.OrderAmount.Value,
                        State = o.State
                    }).ToArray();
            }
        }
예제 #6
0
        public void ChangeOrderState(OrderKeyModel orderModel, OrderState state)
        {
            using (var transaction = new TransactionScope(TransactionScopeOption.Required))
            {
                using (var mappers = new ManagementDataMapperContainer())
                {
                    var orderMapper = mappers.CustomerOrderMapper;

                    var order = orderMapper.Query().SingleOrDefault(o => o.ProductId == orderModel.ProductCode && o.CustomerId == orderModel.CustomerId && o.OrderDate == orderModel.OrderDate);

                    if (order == null)
                    {
                        throw new ArgumentException("Order doesn't exist!");
                    }

                    order.State = (int)state;
                    orderMapper.Update(order);

                    NotificationHelper.NotifyOrderChangedState(mappers.CustomerMapper.Get(orderModel.CustomerId),
                                                               mappers.ProductMapper.Get(orderModel.ProductCode),
                                                               state.ToString());

                }

                transaction.Complete();
            }
        }
예제 #7
0
        public void RemoveCustomer(RemoveCustomerModel model)
        {
            using (var mappers = new ManagementDataMapperContainer())
            {
                var customerMapper = mappers.CustomerMapper;

                customerMapper.Delete(model.CustomerNumber);
            }
        }
예제 #8
0
        public void OrderReceived(OrderProductModel model)
        {
            using (var mappers = new ManagementDataMapperContainer())
            {
                var order = mappers.SupplierOrderMapper.Query().FirstOrDefault(
                    o => o.ProductId.Equals(model.ProductCode) && o.SupplierId.Equals(model.Supplier));

                if (order == null)
                    return;

                mappers.SupplierOrderMapper.Delete(order);

                var product = mappers.ProductMapper.Get(model.ProductCode);

                if (product == null)
                    return;

                product.AvailableAmount += order.OrderAmount;

                mappers.ProductMapper.Update(product);

            }
        }
예제 #9
0
        public void OrderProduct(OrderProductModel model)
        {
            using (var mappers = new ManagementDataMapperContainer())
            {
                var supplierOrderMapper = mappers.SupplierOrderMapper;

                supplierOrderMapper.Create(new SupplierOrder
                {
                    ProductId = model.ProductCode,
                    SupplierId = model.Supplier,
                    OrderAmount = model.Quantity,
                    OrderDate = DateTime.Now
                });
            }
        }
예제 #10
0
        public OrderModel GetOrder(OrderKeyModel orderModel)
        {
            using (var mappers = new ManagementDataMapperContainer())
            {
                var orderMapper = mappers.CustomerOrderMapper;

                return orderMapper.Query()
                    .Select(o =>
                        new OrderModel
                        {
                            ProductCode = o.ProductId,
                            CustomerId = o.CustomerId,
                            OrderDate = o.OrderDate,
                            Quantity = o.OrderAmount.Value,
                            State = o.State
                        })
                    .SingleOrDefault(o => o.ProductCode == orderModel.ProductCode && o.CustomerId == orderModel.CustomerId && o.OrderDate == orderModel.OrderDate);
            }
        }
예제 #11
0
        public void CreateCustomer(CreateCustomerModel model)
        {
            using (var mappers = new ManagementDataMapperContainer())
            {
                var customerMapper = mappers.CustomerMapper;

                customerMapper.Create(new Customer
                {
                    Address = model.Address,
                    Email = model.EmailAddress
                });
            }
        }