Ejemplo n.º 1
0
        public async Task AddItem(Guid tenderGuid, ItemDTO itemDTO)
        {
            if (!AccessManager.CanCreateTender)
            {
                throw new AccessViolationException();
            }
            var acc_token = await AccessManager.GetTenderTokenAsync(tenderGuid);

            var savedTender = await Context.GetTenderAsync(tenderGuid);

            var items = savedTender.Items;

            items.Add(new Item(itemDTO)
            {
                AdditionalClassifications =
                    itemDTO.AdditionalClassifications?.Select(x => new Classification(x)).ToList()
            });

            using (TendersService service = new TendersService())
            {
                var rest = await service.ChangeTender(tenderGuid, new { items }, acc_token);

                Context.UpdateTender(savedTender, rest);
            }

            await Context.SaveChangesAsync();
        }
Ejemplo n.º 2
0
 private async Task <Guid> GetFirstTenderGuid()
 {
     using (TendersService service = new TendersService(true))
     {
         return((await service.GetModificationsPage(null, false, 1)).Items.First().Guid);
     }
 }
Ejemplo n.º 3
0
 public async Task PrevSyncTest()
 {
     using (var tendersService = new TendersService(true))
     {
         var offset = (await tendersService.GetModificationsPage(null, false, 1)).NextPage.Offset;
         using (var syncService = new TendersSyncEngine(true, offset))
             await syncService.PrevSync(CancellationToken.None);
     }
 }
Ejemplo n.º 4
0
 public static void Init <U>(Tender tender)
     where U : class, IService
 {
     using (var service = new TendersService())
     {
         var created = service.CreateTender(TendersServiceTests.ValidTender).Result;
         Tender  = created.Data;
         Token   = created.Token;
         Service = (T)Activator.CreateInstance(typeof(U), created.Data.Guid, null);
     }
 }
Ejemplo n.º 5
0
        public static void Init(TestContext context)
        {
            Init <BidsService>(TendersServiceTests.ValidTender);

            // wait for tendering period
            using (TendersService service = new TendersService())
            {
                while (!string.Equals(Tender.Status, TenderStatus.ACTIVE_TENDERING, StringComparison.OrdinalIgnoreCase))
                {
                    Thread.Sleep(TimeSpan.FromSeconds(30));
                    Tender = service.GetTender(Tender.Guid).Result;
                }
            }
        }
Ejemplo n.º 6
0
        public async Task EditTender(TenderDTO tenderDTO)
        {
            if (!AccessManager.CanCreateTender)
            {
                throw new AccessViolationException();
            }
            string acc_token = await AccessManager.GetTenderTokenAsync(tenderDTO.Guid);

            using (var service = new TendersService())
            {
                var changes = await service.ChangeTender(tenderDTO.Guid, tenderDTO.DropComplexProperties(), acc_token);

                //await Context.TryUpdateTender(changes);
            }
        }
Ejemplo n.º 7
0
        public async Task <Guid?> PublishDraftTender(Guid tenderGuid)
        {
            // отримуємо всі звязані з тендером драфти з бази
            var draftTender = await Context.DraftTenders
                              .Include(t => t.ProcuringEntity)
                              .Include(t => t.ProcuringEntity.AllIdentifiers)
                              .Include(t => t.ProcuringEntity.ContactPoints)
                              .Include(t => t.ContactPointRefs)
                              .Include(t => t.Lots)
                              .Include(t => t.Items)
                              .Include(t => t.Items.Select(i => i.AdditionalClassifications))
                              .Include(t => t.Features)
                              .Include(t => t.Features.Select(f => f.Values))
                              .FirstOrDefaultAsync(t => t.Guid == tenderGuid);

            Protected <Rest.Tender> createdTenderInfo = null;

            // відправляємо запит в ЦБД
            using (var tendersService = new TendersService())
            {
                var newTender = draftTender.ToRest();
                switch (draftTender.ProcurementMethodType)
                {
                case ProcurementMethodType.ABOVE_THRESHOLD_UA_DEFENSE:
                case ProcurementMethodType.ABOVE_THRESHOLD_EU:
                    newTender.ProcuringEntity.ContactPoints = draftTender.ContactPointRefs.Select(c => new ContactPoint(c.ContactPoint));
                    break;

                case ProcurementMethodType.REPORTING:
                case ProcurementMethodType.NEGOTIATION:
                case ProcurementMethodType.NEGOTIATION_QUICK:
                    newTender.Features    = null;
                    newTender.MinimalStep = null;
                    newTender.Lots        = null;
                    goto default;

                default:
                    newTender.ProcuringEntity.ContactPoint.AvailableLanguage = null;
                    break;
                }
                createdTenderInfo = await tendersService.CreateTender(newTender);
            }

            // Якщо досі не вискочив вийняток - значить тендер успішно створений в ДБД
            // Відловимо всі наступні вийнятки - щоб клієнт зміг побачити, що тендер успішно створений
            try
            {
                CreatedTender createdTender = new CreatedTender
                {
                    Tender             = Context.UpdateTender(null, createdTenderInfo.Data),
                    Token              = createdTenderInfo.Token,
                    UserOrganizationId = draftTender.ProcuringEntityId
                };
                Context.CreatedTenders.Add(createdTender);
                Context.DraftTenders.Remove(draftTender);
                try
                {
                    await Context.SaveChangesAsync();
                }
                catch (UpdateException)
                {
                    // На випадок, ящо синхронізація пройшла швидше ніж додавання в базу при створенні
                    Trace.TraceError($"Draft tender {tenderGuid} must be deleted manually.");
                    using (StoreContext tempStore = new StoreContext())
                    {
                        Tender syncedTender =
                            tempStore.Tenders.FirstOrDefault(t => t.Guid == createdTenderInfo.Data.Guid);
                        if (syncedTender != null)
                        {
                            createdTender.Tender = syncedTender;
                            tempStore.CreatedTenders.Add(createdTender);
                            await tempStore.SaveChangesAsync();
                        }
                        else
                        {
                            throw;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Trace.TraceError(
                    $"New tender {createdTenderInfo.Data?.Guid} was created by organization {draftTender.ProcuringEntityId} with token {createdTenderInfo.Token}, but cannot be saved to store. Correct it manually. {ex}");
            }
            return(createdTenderInfo.Data?.Guid);
        }