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