public void Add(Customer customer)
        {
            var web = SPContext.Current.Web;
            var list = web.Lists[ListName];
            var item = list.AddItem();
            item["Title"] = customer.Name;

            item.Update();
        }
 private static SalesOrder GetSalesOrderHeader(Customer customer, SPListItem item)
 {
     return new SalesOrder
     {
         Customer = customer,
         OrderDate = (DateTime)item["OrderDate"],
         SalesOrderId = item.ID,
         Status = (OrderStatus)Enum.Parse(typeof(OrderStatus), item["Status"].ToString())
     };
 }
        public void CanGetSalesOrderByCustomer()
        {
            using (var context = new SPEmulationContext(Settings.Default.IsolationLevel, Settings.Default.Url))
            {
                var solutionRelativePath = @"..\..\..\SalesOrderPortalSolution\Lists\";
                var salesOrderList = context.GetOrCreateList(solutionRelativePath + "SalesOrders\\Elements.xml", solutionRelativePath + "SalesOrders\\schema.xml");
                var orderLinesList = context.GetOrCreateList(solutionRelativePath + "OrderLines\\Elements.xml", solutionRelativePath + "OrderLines\\schema.xml");

                var repository = new SalesOrderListRepository();

                // CAML not yet supported. Fake queries.
                if (context.IsolationLevel == IsolationLevel.Fake)
                {
                    new ShimSPList(salesOrderList)
                    {
                        GetItemsSPQuery = (q) =>
                            {
                                var shim = new ShimSPListItemCollection();
                                shim.Bind(salesOrderList.Items.Cast<SPListItem>().Where(i => (int)i["Customer"] == 1));

                                return shim.Instance;
                            }
                    };

                    new ShimSPList(orderLinesList)
                    {
                        GetItemsSPQuery = (q) =>
                        {
                            var shim = new ShimSPListItemCollection();
                            var match = Regex.Match(q.Query, "<FieldRef Name='SalesOrder' LookupId='TRUE' /><Value Type='Lookup' >.*?</Value>");
                            var lookupId = int.Parse(match.Value.Replace("<FieldRef Name='SalesOrder' LookupId='TRUE' /><Value Type='Lookup' >", "").Replace("</Value>", ""));
                            shim.Bind(orderLinesList.Items.Cast<SPListItem>().Where(i => (int)i["SalesOrder"] == 1));

                            return shim.Instance;
                        }
                    };
                }

                var customer1 = new Customer
                {
                    CustomerId = 1,
                    Name = "Customer 1"
                };

                var salesOrdersOfCustomer1 = repository.GetByCustomer(customer1);
                Assert.AreEqual<int>(2, salesOrdersOfCustomer1.Count());
                Assert.AreEqual<int>(2, salesOrdersOfCustomer1.First().Lines.Count);
            }
        }
        public IEnumerable<SalesOrder> GetByCustomer(Customer customer)
        {
            var web = SPContext.Current.Web;
            var salesOrderList = web.Lists[SalesOrderListName];
            var orderLineList = web.Lists[OrderLinesListName];

            var query = new SPQuery();
            query.Query = "<Where><Eq><FieldRef Name='Customer' LookupId='TRUE' /><Value Type='Lookup' >" + customer.CustomerId.ToString() + "</Value></Eq></Where>";
            query.RowLimit = 100;
            var results = salesOrderList.GetItems(query);

            var salesOrders = new List<SalesOrder>();
            foreach (SPListItem item in results)
            {
                var salesOrder = GetSalesOrderHeader(customer, item);
                GetOrderLines(orderLineList, salesOrder);
                salesOrders.Add(salesOrder);
            }

            return salesOrders;
        }
 public void Add(Customer customer)
 {
     customers.Add(customer);
 }
        public void CanCreateSalesOrder()
        {
            using (var context = new SPEmulationContext(Settings.Default.IsolationLevel, Settings.Default.Url))
            {
                var salesOrderList = context.GetOrCreateList(
                    SalesOrderListRepository.SalesOrderListName,
                    SPListTemplateType.GenericList,
                    "OrderDate", "Customer", "Status");

                var orderLinesList = context.GetOrCreateList(
                    SalesOrderListRepository.OrderLinesListName,
                    SPListTemplateType.GenericList,
                    "SalesOrder", "Price", "Quantity");

                var repository = new SalesOrderListRepository();

                var customer = new Customer
                {
                    CustomerId = 2,
                    Name = "Customer 2"
                };

                var order = new SalesOrder
                {
                    SalesOrderId = 0,
                    Customer = customer,
                    OrderDate = DateTime.Today,
                    Status = OrderStatus.New
                };


                order.Lines.Add(new OrderLine
                {
                    Product = "Product 1",
                    Quantity = 5,
                    Price = 5.5
                });

                order.Lines.Add(new OrderLine
                {
                    Product = "Product 2",
                    Quantity = 2,
                    Price = 106.5
                });

                int salesOrderCount = salesOrderList.ItemCount;
                int orderLineCount = orderLinesList.ItemCount;

                repository.Add(order);

                Assert.AreEqual<int>(salesOrderCount + 1, salesOrderList.Items.Count);
                Assert.AreEqual<int>(orderLineCount + 2, orderLinesList.Items.Count);
            }
        }
 public IEnumerable<SalesOrder> GetByCustomer(Customer customer)
 {
     return salesOrders.Where(so => so.Customer.CustomerId == customer.CustomerId);
 }