public void AddGBIpieceOfArt(GBIpieceOfArtBindingModel model)
        {
            int maxId = 0;

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

            for (int i = 0; i < source.GBIpieceofArt__ingridients.Count; ++i)
            {
                if (source.GBIpieceofArt__ingridients[i].Id > maxPCId)
                {
                    maxPCId = source.GBIpieceofArt__ingridients[i].Id;
                }
            }
            // убираем дубли по компонентам
            for (int i = 0; i < model.GBIpieceofArt__ingridients.Count; ++i)
            {
                for (int j = 1; j < model.GBIpieceofArt__ingridients.Count; ++j)
                {
                    if (model.GBIpieceofArt__ingridients[i].GBIingridientId ==
                        model.GBIpieceofArt__ingridients[j].GBIingridientId)
                    {
                        model.GBIpieceofArt__ingridients[i].Count +=
                            model.GBIpieceofArt__ingridients[j].Count;
                        model.GBIpieceofArt__ingridients.RemoveAt(j--);
                    }
                }
            }
            // добавляем компоненты
            for (int i = 0; i < model.GBIpieceofArt__ingridients.Count; ++i)
            {
                source.GBIpieceofArt__ingridients.Add(new GBIpieceofArt__ingridient
                {
                    Id = ++maxPCId,
                    GBIpieceOfArtId  = maxId + 1,
                    GBIindgridientId = model.GBIpieceofArt__ingridients[i].GBIingridientId,
                    Count            = model.GBIpieceofArt__ingridients[i].Count
                });
            }
        }
        public void UpdGBIpieceOfArt(GBIpieceOfArtBindingModel model)
        {
            int index = -1;

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

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