/// <summary> /// Adds orders to project. /// </summary> /// <param name="ordersByDate">Order collection for date.</param> /// <param name="appOrdersByDate">Application order collection for date.</param> /// <param name="manager">Application order manager.</param> private void _AddOrdersToProject(IEnumerable ordersByDate, AppData.IDataObjectCollection <Order> appOrdersByDate, AppData.OrderManager manager) { Debug.Assert(null != ordersByDate); // created Debug.Assert(null != appOrdersByDate); // created Debug.Assert(null != manager); // created // check and replace data for orders with same name int appOrdersCount = appOrdersByDate.Count; foreach (Order order in ordersByDate) { bool isReplace = false; for (int index = 0; index < appOrdersCount; ++index) { Order currOrder = appOrdersByDate[index]; // update order data if (_IsOrdersEquals(currOrder, order)) { order.CopyTo(currOrder); _AddUpdateObjectWarning(currOrder); _ValidateObject(currOrder); if (!_updatedObjects.Contains(currOrder)) { _updatedObjects.Add(currOrder); // only unique } isReplace = true; break; // NOTE: process done } } // order with this name not found - add new order if (!isReplace) { _updatedObjects.Add(order); manager.Add(order); _ValidateObject(order); ++_createdCount; } } }
/// <summary> /// Adds orders to project. /// </summary> /// <param name="objects">Object collection (orders).</param> /// <param name="project">Project to adding objects.</param> private bool _AddOrdersToProject(IList <AppData.DataObject> objects, Project project) { Debug.Assert(null != objects); // created Debug.Assert(0 < objects.Count); // not empty Debug.Assert(objects[0] is Order); // supported type Debug.Assert(null != project); bool result = false; try { // NOTE: if order with this name present in application for same date - // need replace data // convert objects to orders IList <Order> orders = _GetOrders(objects); // create unique date list IList <DateTime> uniqueDate = _CreateOrdersUniqueDateList(objects); // foreach unique date do AppData.OrderManager manager = project.Orders; for (int index = 0; index < uniqueDate.Count; ++index) { DateTime date = uniqueDate[index]; IEnumerable ordersByDate = _CreateOrderListByDate(orders, date); AppData.IDataObjectCollection <Order> collection = manager.Search(date); // search application orders with this date if (0 < collection.Count) { // in application present orders to this date - add orders with update _AddOrdersToProject(ordersByDate, collection, manager); } else { // in application no orders to this date - add all orders foreach (Order order in ordersByDate) { manager.Add(order); _ValidateObject(order); ++_createdCount; _updatedObjects.Add(order); } } // create new schedule if early not created _CreateSchedule(date); } // store changes App.Current.Project.Save(); result = true; // Workaround _UpdateGui(orders); } catch (Exception ex) { Logger.Error(ex); _updatedObjects.Clear(); } return(result); }