public void CreateOrder(ZakazBindingModel model)
        {
            int maxId = 0;

            for (int i = 0; i < source.Zakazs.Count; ++i)
            {
                if (source.Zakazs[i].Id > maxId)
                {
                    maxId = source.Pokupatels[i].Id;
                }
            }
            source.Zakazs.Add(new Zakaz
            {
                Id          = maxId + 1,
                PokupatelId = model.PokupatelId,
                OutputId    = model.OutputId,
                DateCreate  = DateTime.Now,
                Number      = model.Number,
                Summa       = model.Summa,
                Status      = ZakazStatus.Принят
            });
        }
        public void CreateZakaz(ZakazBindingModel model)
        {
            int maxId = 0;

            for (int i = 0; i < source.Zakazes.Count; ++i)
            {
                if (source.Zakazes[i].Id > maxId)
                {
                    maxId = source.Buyers[i].Id;
                }
            }
            source.Zakazes.Add(new Zakaz
            {
                Id              = maxId + 1,
                BuyerId         = model.BuyerId,
                GBIpieceofArtId = model.GBIpieceOfArtId,
                DateCreate      = DateTime.Now,
                Count           = model.Count,
                Sum             = model.Sum,
                Status          = ZakazStatus.taken
            });
        }
        public void PayOrder(ZakazBindingModel model)
        {
            int index = -1;

            for (int i = 0; i < source.Zakazs.Count; ++i)
            {
                if (source.Zakazs[i].Id == model.Id)
                {
                    index = i;
                    break;
                }
            }
            if (index == -1)
            {
                throw new Exception("Элемент не найден");
            }
            if (source.Zakazs[index].Status != ZakazStatus.Готов)
            {
                throw new Exception("Заказ не в статусе \"Готов\"");
            }
            source.Zakazs[index].Status = ZakazStatus.Оплачен;
        }
        public void TakeOrderInWork(ZakazBindingModel model)
        {
            int index = -1;

            for (int i = 0; i < source.Zakazs.Count; ++i)
            {
                if (source.Zakazs[i].Id == model.Id)
                {
                    index = i;
                    break;
                }
            }
            if (index == -1)
            {
                throw new Exception("Элемент не найден");
            }
            if (source.Zakazs[index].Status != ZakazStatus.Принят)
            {
                throw new Exception("Заказ не в статусе \"Принят\"");
            }
            source.Zakazs[index].DateImplement = DateTime.Now;
            source.Zakazs[index].Status        = ZakazStatus.Выполняется;
        }
        public void TakeZakazInWork(ZakazBindingModel model)
        {
            int index = -1;

            for (int i = 0; i < source.Zakazes.Count; ++i)
            {
                if (source.Zakazes[i].Id == model.Id)
                {
                    index = i;
                    break;
                }
            }
            if (index == -1)
            {
                throw new Exception("Элемент не найден");
            }
            // смотрим по количеству компонентов на складах
            for (int i = 0; i < source.GBIpieceofArt__ingridients.Count; ++i)
            {
                if (source.GBIpieceofArt__ingridients[i].GBIpieceOfArtId == source.Zakazes[index].GBIpieceofArtId)
                {
                    int countOnStocks = 0;
                    for (int j = 0; j < source.Storage__GBIingridients.Count; ++j)
                    {
                        if (source.Storage__GBIingridients[j].GBIingridientId == source.GBIpieceofArt__ingridients[i].GBIindgridientId)
                        {
                            countOnStocks += source.Storage__GBIingridients[j].Count;
                        }
                    }
                    if (countOnStocks < source.GBIpieceofArt__ingridients[i].Count * source.Zakazes[index].Count)
                    {
                        for (int j = 0; j < source.GBIindgridients.Count; ++j)
                        {
                            if (source.GBIindgridients[j].Id == source.GBIpieceofArt__ingridients[i].GBIindgridientId)
                            {
                                throw new Exception("Не достаточно компонента " + source.GBIindgridients[j].GBIindgridientName +
                                                    " требуется " + source.GBIpieceofArt__ingridients[i].Count + ", в наличии " + countOnStocks);
                            }
                        }
                    }
                }
            }
            // списываем
            for (int i = 0; i < source.GBIpieceofArt__ingridients.Count; ++i)
            {
                if (source.GBIpieceofArt__ingridients[i].GBIpieceOfArtId == source.Zakazes[index].GBIpieceofArtId)
                {
                    int countOnStocks = source.GBIpieceofArt__ingridients[i].Count * source.Zakazes[index].Count;
                    for (int j = 0; j < source.Storage__GBIingridients.Count; ++j)
                    {
                        if (source.Storage__GBIingridients[j].GBIingridientId == source.GBIpieceofArt__ingridients[i].GBIindgridientId)
                        {
                            // компонентов на одном слкаде может не хватать
                            if (source.Storage__GBIingridients[j].Count >= countOnStocks)
                            {
                                source.Storage__GBIingridients[j].Count -= countOnStocks;
                                break;
                            }
                            else
                            {
                                countOnStocks -= source.Storage__GBIingridients[j].Count;
                                source.Storage__GBIingridients[j].Count = 0;
                            }
                        }
                    }
                }
            }
            source.Zakazes[index].ExecutorId  = model.ExecutorId;
            source.Zakazes[index].DateExecute = DateTime.Now;
            source.Zakazes[index].Status      = ZakazStatus.inProcess;
        }