Ejemplo n.º 1
0
        /// <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;
                }
            }
        }
Ejemplo n.º 2
0
        /// <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);
        }