Specifications:
- A customer can have many carts at a time but only one active.
- A customer can switch his active cart so new products are added to the current active one.
- A customer can select the cart where he wants a product to be added to in case he selects the option to choose from his list of carts.
- A customer can add a product to a non existing cart. A new cart is created at that point.
- A customer can name his carts to make them easy to catalogue.
- A customer can remove carts, removing all the products associated to that cart only when the cart hasn't been checked out.
- A customer can add, remove and view products in his carts.
- A customer can add the same product to different carts.
- A customer can delete a product from one cart or from all the carts that contain that product.
- A customer can look for the cart/s that contain/s a particular product.
- A customer can have many addresses but only one active.
- A customer can remove an address only if is not active.
- A customer can have many phone numbers but only one active.
- A customer can remove a phone number only if is not active.
- A customer can have many email addresses but only one active.
- A customer can remove an email address only if is not active.
- A customer can select payment type: voucher, credit card, paypal.
- A customer can look for products in previous orders.
- A phone number can start with + , 00 or just the number
- A customer can check-out a cart and be added a discount.
- A product has current/previous prices.
- A product can belong to many categories.
- A product can have discounts based on a fixed value or a percentage.