예제 #1
0
        public void AddElement(BindingCommodity model)
        {
            int maxId = 0;

            for (int i = 0; i < source.Commodity.Count; ++i)
            {
                if (source.Commodity[i].Id > maxId)
                {
                    maxId = source.Commodity[i].Id;
                }
                if (source.Commodity[i].CommodityName == model.CommodityName)
                {
                    throw new Exception("Уже есть изделие с таким названием");
                }
            }
            source.Commodity.Add(new Commodity
            {
                Id            = maxId + 1,
                CommodityName = model.CommodityName,
                Price         = model.Price
            });
            // компоненты для изделия
            int maxPCId = 0;

            for (int i = 0; i < source.CommodityIngridients.Count; ++i)
            {
                if (source.CommodityIngridients[i].Id > maxPCId)
                {
                    maxPCId = source.CommodityIngridients[i].Id;
                }
            }
            // убираем дубли по компонентам
            for (int i = 0; i < model.CommodityIngridients.Count; ++i)
            {
                for (int j = 1; j < model.CommodityIngridients.Count; ++j)
                {
                    if (model.CommodityIngridients[i].IngridientId ==
                        model.CommodityIngridients[j].IngridientId)
                    {
                        model.CommodityIngridients[i].Count +=
                            model.CommodityIngridients[j].Count;
                        model.CommodityIngridients.RemoveAt(j--);
                    }
                }
            }
            // добавляем компоненты
            for (int i = 0; i < model.CommodityIngridients.Count; ++i)
            {
                source.CommodityIngridients.Add(new CommodityIngridient
                {
                    Id           = ++maxPCId,
                    CommodityId  = maxId + 1,
                    IngridientId = model.CommodityIngridients[i].IngridientId,
                    Count        = model.CommodityIngridients[i].Count
                });
            }
        }
예제 #2
0
        public void UpdElement(BindingCommodity model)
        {
            int index = -1;

            for (int i = 0; i < source.Commodity.Count; ++i)
            {
                if (source.Commodity[i].Id == model.Id)
                {
                    index = i;
                }
                if (source.Commodity[i].CommodityName == model.CommodityName &&
                    source.Commodity[i].Id != model.Id)
                {
                    throw new Exception("Уже есть изделие с таким названием");
                }
            }
            if (index == -1)
            {
                throw new Exception("Элемент не найден");
            }
            source.Commodity[index].CommodityName = model.CommodityName;
            source.Commodity[index].Price         = model.Price;
            int maxPCId = 0;

            for (int i = 0; i < source.CommodityIngridients.Count; ++i)
            {
                if (source.CommodityIngridients[i].Id > maxPCId)
                {
                    maxPCId = source.CommodityIngridients[i].Id;
                }
            }
            // обновляем существуюущие компоненты
            for (int i = 0; i < source.CommodityIngridients.Count; ++i)
            {
                if (source.CommodityIngridients[i].CommodityId == model.Id)
                {
                    bool flag = true;
                    for (int j = 0; j < model.CommodityIngridients.Count; ++j)
                    {
                        // если встретили, то изменяем количество
                        if (source.CommodityIngridients[i].Id == model.CommodityIngridients[j].Id)
                        {
                            source.CommodityIngridients[i].Count = model.CommodityIngridients[j].Count;
                            flag = false;
                            break;
                        }
                    }
                    // если не встретили, то удаляем
                    if (flag)
                    {
                        source.CommodityIngridients.RemoveAt(i--);
                    }
                }
            }
            // новые записи
            for (int i = 0; i < model.CommodityIngridients.Count; ++i)
            {
                if (model.CommodityIngridients[i].Id == 0)
                {
                    // ищем дубли
                    for (int j = 0; j < source.CommodityIngridients.Count; ++j)
                    {
                        if (source.CommodityIngridients[j].CommodityId == model.Id &&
                            source.CommodityIngridients[j].IngridientId == model.CommodityIngridients[i].IngridientId)
                        {
                            source.CommodityIngridients[j].Count += model.CommodityIngridients[i].Count;
                            model.CommodityIngridients[i].Id      = source.CommodityIngridients[j].Id;
                            break;
                        }
                    }
                    // если не нашли дубли, то новая запись
                    if (model.CommodityIngridients[i].Id == 0)
                    {
                        source.CommodityIngridients.Add(new CommodityIngridient
                        {
                            Id           = ++maxPCId,
                            CommodityId  = model.Id,
                            IngridientId = model.CommodityIngridients[i].IngridientId,
                            Count        = model.CommodityIngridients[i].Count
                        });
                    }
                }
            }
        }