Exemplo n.º 1
0
        // flags usually go at the end
        public void PlaceOrder(Customer customer,
                               Order order,
                               Payment payment,
                               bool allowSplitOrders,
                               bool emailReceipt)
        {
            CustomerRepository.Add(customer);

            OrderRepository.Add(order);

            InventoryRepository.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment();

            if (emailReceipt)
            {
                // returnin an object makes the code more readable
                var result = customer.ValidateEmail();

                if (result.Success)
                {
                    CustomerRepository.Update();

                    EmailLibrary.SendEmail(customer.EmailAddress, "Here is your receipt");
                }
            }
        }
Exemplo n.º 2
0
        public void PlaceOrder(Customer customer,
                               Order order, Payment payment,
                               bool allowSplitOrders, bool emailReceipt)
        {
            customerRepository = new CustomerRepository();
            customerRepository.Add(customer);

            orderRepository = new OrderRepository();
            orderRepository.Add(order);

            inventoryRepository = new InventoryRepository();
            inventoryRepository.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment();

            if (emailReceipt)
            {
                customer.ValidateEmail();
                customerRepository.Update();

                emailLibrary = new EmailLibrary();
                emailLibrary.SendEmail(customer.EmailAddress,
                                       "Here is your receipt");
            }
        }
Exemplo n.º 3
0
        public void PlaceOrder(Customer customer,
                               Order order,
                               Payment payment,
                               bool allowSplitOrders, bool emailReceipt)
        {
            customerRepository.Add(customer);

            orderRepository.Add(order);

            inventoryRepository.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment();

            if (emailReceipt)
            {
                var result = customer.ValidateEmail();
                if (result.Success)
                {
                    emailLibrary.SendEmail(customer.EmailAddress,
                                           "Here is your receipt");
                }
                else
                {
                    // log the messages
                }
            }
        }
Exemplo n.º 4
0
        public void PlaceOrder(Customer customer, Order order, Payment payment, bool emailReceipt)
        {
            //1. Add New Customer
            customerRepository.Add(customer);

            //2. Add Order
            orderRepository.Add(order);

            //3. Substract from Inventory
            inventoryRepository.OrderItems(order);

            //4. Process Payment
            payment.ProcessPayment(payment);

            //5. Email Notifications
            if (emailReceipt)
            {
                var isValidEmail = customer.ValidateEmail();

                if (isValidEmail)
                {
                    customerRepository.Update();

                    Email.Send(customer.EmailAddress, "Order Sent");
                }
            }
        }
Exemplo n.º 5
0
        public OperationResult PlaceOrder(Customer customer,
                                          Order order,
                                          Payment payment,
                                          bool allowSplitOrders, bool emailReceipt)
        {
            Debug.Assert(customerRepository != null, "Missing customer respository instance");
            Debug.Assert(orderRepository != null, "Missing order repository instance");
            Debug.Assert(inventoryRepository != null, "Missing inventory repository instance");
            Debug.Assert(emailLibrary != null, "Missing email library instance");

            OperationResult operationResult = new OperationResult();

            if (customer == null)
            {
                throw new ArgumentNullException("Customer instance is null");
            }

            if (order == null)
            {
                throw new ArgumentNullException("Order instance is null");
            }

            if (payment == null)
            {
                throw new ArgumentNullException("Payment instance is null");
            }

            customerRepository.Add(customer);

            orderRepository.Add(order);

            inventoryRepository.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment(payment);

            if (emailReceipt)
            {
                operationResult = customer.ValidateEmail();
                if (operationResult.Success)
                {
                    customerRepository.Update();

                    emailLibrary.SendEmail(customer.EmailAddress,
                                           "Here is your receipt");
                }
                else
                {
                    //Log messages
                    if (operationResult.MessageList.Any())
                    {
                        operationResult.AddMessage(operationResult.MessageList[0]);
                    }
                }
            }

            return(operationResult);
        }
Exemplo n.º 6
0
        public OperationsResult PlaceOrder(Customer customer,
                                           Order order,
                                           Payment payment,
                                           bool allowSplitOrders,
                                           bool emailReciepts)
        {
            // Only works during the debug phase
            Debug.Assert(customerRepository != null, "Missing customer repository instance");
            Debug.Assert(orderRepository != null, "Missing order repository instance");
            Debug.Assert(inventoryRepository != null, "Missing inventory repository instance");
            Debug.Assert(emailLibrary != null, "Missing email repository instance");

            if (customer == null)
            {
                throw new ArgumentNullException("Customer instance is null");
            }
            if (order == null)
            {
                throw new ArgumentNullException("Order instance is null");
            }
            if (payment == null)
            {
                throw new ArgumentNullException("Payment instance is null");
            }

            var op = new OperationsResult();

            customerRepository.Add(customer);

            orderRepository.Add(order);

            inventoryRepository.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment(payment);

            if (emailReciepts)
            {
                var result = customer.ValidateEmail();
                if (result.Success)
                {
                    customerRepository.Update();

                    emailLibrary.SendEmail(customer.EmailAddress, "reciept");
                }
                else
                {
                    //log the messages
                    if (result.MessageList.Any())
                    {
                        op.AddMessage(result.MessageList[0]);
                    }
                }
            }
            return(op);
        }
Exemplo n.º 7
0
        public OperationResult PlaceOrder(Customer customer, Order order, Payment payment, bool allowSplitOrders, bool getEmailReceipt)
        {
            Debug.Assert(customerRepo != null, "Missing customer repository instance");
            Debug.Assert(orderRepo != null, "Missing order repository instance");
            Debug.Assert(invRepo != null, "Missing inventory repository instance");
            Debug.Assert(emailLibrary != null, "Missing email library instance");

            if (customer == null)
            {
                throw new ArgumentNullException("Customer cannot be null");
            }
            if (order == null)
            {
                throw new ArgumentNullException("Order cannot be null");
            }
            if (payment == null)
            {
                throw new ArgumentNullException("Payment cannot be null");
            }
            // bools are ok, since they cannot be null

            var op = new OperationResult();

            // TODO the below method should be changed to return something so I can properly update the op object
            customerRepo.Add(customer);

            orderRepo.Add(order);

            invRepo.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment();

            if (getEmailReceipt)
            {
                var result = customer.ValidateEmail();

                if (result.Success)
                {
                    customerRepo.Update();

                    emailLibrary.SendEmail(customer.EmailAddress, "Here is your receipt");
                }
                else
                {
                    // op.Success = false; //nope, since by this point the order was actually placed
                    // Log messages
                    if (result.MessageList.Any())
                    {
                        op.AddMessage(result.MessageList[0]);
                    }
                }
            }

            return(op);
        }
        public OperationResult PlaceOrder(Customer customer, Order order, Payment payment, bool allowSplitOrders, bool emailReceipt)
        {
            // This program makes assertions that certain functions are running (as functions below)
            // These will throw a warning during debuging if an assertion isn't true
            Debug.Assert(customerRepository != null, "Missing customer repository instance N***A");
            Debug.Assert(orderRepository != null, "Missing order repository instance");
            Debug.Assert(inventoryRepository != null, "Missing inventory repository instance");
            Debug.Assert(emailLibrary != null, "Missing email library instance");

            if (customer == null)
            {
                throw new ArgumentNullException("Customer instance is null");
            }
            if (order == null)
            {
                throw new ArgumentNullException("Order instance is null");
            }
            if (payment == null)
            {
                throw new ArgumentNullException("Payment instance is null");
            }

            var op = new OperationResult();

            customerRepository.Add(customer);

            orderRepository.Add(order);

            inventoryRepository.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment();

            if (emailReceipt)
            {
                var result = customer.ValidateEmail();
                if (result.Success)
                {
                    customerRepository.Update();

                    emailLibrary.SendEmail(customer.EmailAddress, "Here is your receipt");
                }
                else
                {
                    // log the messages
                    if (result.MessageList.Any())
                    {
                        op.AddMessage(result.MessageList[0]);
                    }
                }
            }
            return(op);
        }
Exemplo n.º 9
0
        public OperationResult PlaceOrder(Customer customer,
                                          Order order,
                                          Payment payment,
                                          bool allowSplitOrders, bool emailReceipt)
        {
            if (customer == null)
            {
                throw new ArgumentException("Customer instance is null");
            }
            if (order == null)
            {
                throw new ArgumentException("Order instance is null");
            }
            if (payment == null)
            {
                throw new ArgumentException("Payment instance is null");
            }
            var op = new OperationResult();

            customerRepository.Add(customer);

            OrderRepository.Add(order);

            inventoryRepository.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment(payment);

            if (emailReceipt)
            {
                string message = string.Empty;
                var    result  = customer.ValidateEmail();
                if (result.Success)
                {
                    customerRepository.Update();

                    emailLibrary.SendEmail(customer.Email, "Here is your receipt");
                }
                else
                {
                    //log message
                    if (result.MessageList.Any())
                    {
                        op.AddMessage(result.MessageList[0]);
                    }
                }
            }
            return(op);
        }
        public OperationResult PlaceOrder(Customer customer, Order order, Payment payment, bool allowSplitOrders, bool emailReceipt)
        {
            // This program makes assertions that certain functions are running (as functions below)
            // These will throw a warning during debuging if an assertion isn't true
            Debug.Assert(customerRepository != null, "Missing customer repository instance N***A");
            Debug.Assert(orderRepository != null, "Missing order repository instance");
            Debug.Assert(inventoryRepository != null, "Missing inventory repository instance");
            Debug.Assert(emailLibrary != null, "Missing email library instance");

            if (customer == null) throw new ArgumentNullException("Customer instance is null");
            if (order == null) throw new ArgumentNullException("Order instance is null");
            if (payment == null) throw new ArgumentNullException("Payment instance is null");

            var op = new OperationResult();

            customerRepository.Add(customer);

            orderRepository.Add(order);

            inventoryRepository.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment();

            if (emailReceipt)
            {
                var result = customer.ValidateEmail();
                if (result.Success)
                {
                    customerRepository.Update();

                    emailLibrary.SendEmail(customer.EmailAddress, "Here is your receipt");
                }
                else
                {
                    // log the messages
                    if (result.MessageList.Any())
                    {
                        op.AddMessage(result.MessageList[0]);
                    }
                }
            }
            return op;
        }
Exemplo n.º 11
0
        public void PlaceOrder(Customer customer,
                                Order order,
                                Payment payment,
                                bool allowSplitOrders, bool emailReceipt)
        {
            customerRepository.Add(customer);

            orderRepository.Add(order);

            inventoryRepository.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment();

            if (emailReceipt)
            {
                customer.ValidateEmail();
                customerRepository.Update();

                emailLibrary.SendEmail(customer.EmailAddress, "Here are your receipt!");
            }
        }
Exemplo n.º 12
0
        public void PlaceOrder(Customer customer,
                               Order order,
                               Payment payment,
                               bool allowSplitOrders, bool emailReceipt)   // put objects in order put flags(bool values) at the end
        {
            customerRepository.Add(customer);

            orderRepository.Add(order);

            inventoryRepository.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment(payment);

            if (emailReceipt)
            {
                customer.ValidateEmail();
                customerRepository.Update();

                emailLibrary.SendEmail(customer.EmailAddress,
                                       "Here is your receipt");
            }
        }
Exemplo n.º 13
0
        public void PlaceOrder(Customer customer,
                                Order order,
                                Payment payment,
                                bool allowSplitOrders, bool emailReceipt)  // put objects in order put flags(bool values) at the end
        {
            customerRepository.Add(customer);

            orderRepository.Add(order);

            inventoryRepository.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment(payment);

            if (emailReceipt)
            {
                customer.ValidateEmail();
                customerRepository.Update();

                emailLibrary.SendEmail(customer.EmailAddress,
                                        "Here is your receipt");
            }
        }
Exemplo n.º 14
0
        public OperationResult PlaceOrder(Customer customer,
                                          Order order,
                                          Payment payment,
                                          bool allowSplitOrders,
                                          bool emailReceipt)
        {
            /*!!! Assert, sets you upfront that certain conditions must be met before program
             *    execution continues, and if those conditions are not met, the program will abort,
             *    and end in the debugger, right at that spot. !!! */
            Debug.Assert(customerRepository != null, "Missing customer repository");
// this one above fails, because of commenting the init of one of the class's props in ctor
            Debug.Assert(orderRepository != null, "Missing order repository");
            Debug.Assert(inventoryRepository != null, "Missing inventory repository");
            Debug.Assert(emailLibrary != null, "Missing email library");


            //Validating parameters:
            if (customer == null)
            {
                throw new ArgumentNullException("Customer instance is null");
            }
            if (order == null)
            {
                throw new ArgumentNullException("Order instance is null");
            }
            if (payment == null)
            {
                throw new ArgumentNullException("Payment instance is null");
            }
            // The rest of parameters are not reference values, but structs, so they
            // may be only bool. There is no need to validate them.
            var op = new OperationResult();

            // Processing the method's logic:
            customerRepository.Add(customer);

            orderRepository.Add(order);

            inventoryRepository.OrderItems(order, allowSplitOrders);

            payment.ProcessPayment();

            if (emailReceipt)
            {
                var result = customer.ValidateEmail();
                if (result.Success)
                {
                    customerRepository.Update();

                    emailLibrary.SendEmail(customer.EmailAdress,
                                           "Here is your receipt");
                }
                else
                {
                    // log the error messages

                    // returning the result's message.
                    if (result.MessageList.Any())
                    {
                        op.AddMessage(result.MessageList[0]);
                    }
                }
            }

            return(op);
        }