public async Task <ActionResult> AddTranslation(EventTranslation translation)
        {
            var author = await db.GetByIdAsync(translation.EventId);

            if (ModelState.IsValid)
            {
                author.Translations.Add(translation);
                await db.SaveChangesAsync();

                return(RedirectToAction("Index"));
            }

            ViewBag.Languages = LanguageDefinitions.GenerateAvailableLanguageDDL(
                author.Translations.Select(t => t.LanguageCode).ToArray());

            return(View(translation));
        }
Beispiel #2
0
        public async Task <Tuple <Event, ErrorViewModel> > Handle(SaveEventCommand cmd, CancellationToken cancellationToken)
        {
            Tuple <Event, ErrorViewModel> result    = null;
            Event            resultEvent            = null;
            EventTranslation resultEventTranslation = null;

            if (!cmd.EventId.HasValue)
            {
                resultEvent = new Event();
                EventDataHandler.SetData(resultEvent, cmd);
                db.Events.Add(resultEvent);

                resultEventTranslation = new EventTranslation();
                EventTranslationDataHandler.SetData(resultEventTranslation, cmd);
                resultEventTranslation.Event = resultEvent;
                db.EventTranslations.Add(resultEventTranslation);
            }
            else
            {
                resultEvent = db.Events.Where(e => e.EventId == cmd.EventId).FirstOrDefault();

                if (resultEvent == null)
                {
                    logger.LogError("Existing event was not found when tried to update it. EventId: " + cmd.EventId);
                    result = new Tuple <Event, ErrorViewModel>(null, new ErrorViewModel()
                    {
                        ErrorCode = (int)AppError.DbRecordNotFound
                    });
                    return(result);
                }

                EventDataHandler.SetData(resultEvent, cmd);
                db.Events.Update(resultEvent);

                if (!cmd.EventTranslationId.HasValue)
                {
                    resultEventTranslation = new EventTranslation();
                    EventTranslationDataHandler.SetData(resultEventTranslation, cmd);
                    resultEventTranslation.Event = resultEvent;
                    db.EventTranslations.Add(resultEventTranslation);
                }
                else
                {
                    resultEventTranslation = db.EventTranslations.Where(x => x.EventTranslationId == cmd.EventTranslationId).FirstOrDefault();

                    if (resultEventTranslation == null)
                    {
                        logger.LogError("Existing event translation was not found when trying to udpate it. EventTranslationId: " + cmd.EventTranslationId);
                        result = new Tuple <Event, ErrorViewModel>(null, new ErrorViewModel()
                        {
                            ErrorCode = (int)AppError.DbRecordNotFound
                        });
                        return(null);
                    }

                    EventTranslationDataHandler.SetData(resultEventTranslation, cmd);
                    db.EventTranslations.Update(resultEventTranslation);
                }
            }

            await db.SaveChangesAsync();

            result = new Tuple <Event, ErrorViewModel>(resultEvent, null);
            return(result);
        }
Beispiel #3
0
 public async Task <int> Update(EventTranslation eventTranslation)
 {
     return(await Context.SaveChangesAsync());
 }
Beispiel #4
0
 public async Task <int> Insert(EventTranslation eventTranslation)
 {
     _eventTranslationRepository.Create(eventTranslation);
     return(await Context.SaveChangesAsync());
 }
Beispiel #5
0
        public async Task <ActionResultResponse <string> > Insert(string tenantId, string creatorId, string creatorFullName, string creatorAvatar, EventMeta eventMeta)
        {
            if (eventMeta.StartDate.HasValue && eventMeta.EndDate.HasValue)
            {
                if (DateTime.Compare(eventMeta.StartDate.Value, eventMeta.EndDate.Value) > 0)
                {
                    return(new ActionResultResponse <string>(-1, _websiteEventResourceService.GetString("Start time greater than end time.")));
                }
            }

            var eventId = Guid.NewGuid().ToString();
            var events  = new Domain.Models.Event
            {
                Id = eventId,
                ConcurrencyStamp            = eventId,
                IsActive                    = eventMeta.IsActive,
                StartDate                   = eventMeta.StartDate,
                EndDate                     = eventMeta.EndDate,
                LimitedUsers                = eventMeta.LimitedUsers,
                IsAllowRegisterWhenOverload = eventMeta.IsAllowRegisterWhenOverload,
                LimitedAccompanyPersons     = eventMeta.LimitedAccompanyPersons,
                StaffOnly                   = eventMeta.StaffOnly,
                IsAllowRegister             = eventMeta.IsAllowRegister,
                IsAllowAccompanyPerson      = eventMeta.IsAllowAccompanyPerson,
                Thumbnail                   = eventMeta.Thumbnail,
                Status          = ApproverStatus.Draft,
                TenantId        = tenantId,
                CreatorId       = creatorId,
                CreatorFullName = creatorFullName,
                CreatorAvatar   = creatorAvatar
            };

            var result = await _eventRepository.Insert(events);

            if (result <= 0)
            {
                return(new ActionResultResponse <string>(result,
                                                         _sharedResourceService.GetString(ErrorMessage.SomethingWentWrong)));
            }


            #region insert Translation.
            if (eventMeta.EventTranslations.Count > 0)
            {
                var resultInsertTranslation = await InsertEventTranslation();

                if (resultInsertTranslation.Code <= 0)
                {
                    return(resultInsertTranslation);
                }
            }
            #endregion

            await SendNotificationToApprover(tenantId, creatorId, creatorFullName, creatorAvatar, eventId);

            return(new ActionResultResponse <string>(1, _websiteEventResourceService.GetString("Add new event successful."),
                                                     string.Empty, eventId));

            #region Local functions
            async Task <ActionResultResponse <string> > InsertEventTranslation()
            {
                var apiUrls = _configuration.GetApiUrl();

                if (apiUrls == null)
                {
                    return(new ActionResultResponse <string>(-5,
                                                             _sharedResourceService.GetString(
                                                                 "Missing some configuration. Please contact with administrator.")));
                }

                var eventTags         = new List <TagSubjectViewModel>();
                var eventTranslations = new List <EventTranslation>();

                foreach (var eventTranslation in eventMeta.EventTranslations)
                {
                    // Check name exists.
                    //var isNameExists = await _eventTranslationRepository.CheckExists( eventId,
                    //    eventTranslation.LanguageId, eventTranslation.Name);
                    //if (isNameExists)
                    //{
                    //    await RollbackInsertEvent();
                    //    return new ActionResultResponse<string>(-1,
                    //        _websiteEventResourceService.GetString("Event name: \"{0}\" already exists.",
                    //            eventTranslation.Name));
                    //}

                    var eventTranslationInsert = new EventTranslation
                    {
                        EventId         = eventId,
                        LanguageId      = eventTranslation.LanguageId.Trim(),
                        Name            = eventTranslation.Name.Trim(),
                        MetaTitle       = eventTranslation.MetaTitle?.Trim(),
                        Description     = eventTranslation.Description?.Trim(),
                        MetaDescription = eventTranslation.MetaDescription?.Trim(),
                        Content         = eventTranslation.Content?.Trim(),
                        UnsignName      = eventTranslation.Name?.StripVietnameseChars().ToUpper(),
                        Address         = eventTranslation?.Address?.Trim()
                    };

                    eventTranslationInsert.SeoLink = !string.IsNullOrEmpty(eventTranslation.SeoLink)
                        ? eventTranslation.SeoLink.ToUrlString() : eventTranslation.Name.ToUrlString();

                    // Check Seolink exists.
                    var isSeolinkExists = await _eventTranslationRepository.CheckSeoLinkExists(eventId,
                                                                                               eventTranslation.LanguageId, eventTranslationInsert.SeoLink);

                    if (isSeolinkExists)
                    {
                        await RollbackInsertEvent();

                        return(new ActionResultResponse <string>(-2,
                                                                 _websiteEventResourceService.GetString("Seo link: \"{0}\" already exists.",
                                                                                                        eventTranslationInsert.SeoLink)));
                    }

                    eventTranslations.Add(eventTranslationInsert);

                    var eventTagInsert = new TagSubjectViewModel
                    {
                        TenantId        = tenantId,
                        CreatorId       = creatorId,
                        CreatorFullName = creatorFullName,
                        CreatorAvata    = creatorAvatar,
                        Type            = TagType.Event,
                        SubjectId       = eventId,
                        LanguageId      = eventTranslation.LanguageId.Trim(),
                        Tags            = eventTranslation.Tags
                    };
                    eventTags.Add(eventTagInsert);
                }

                var resultTag = await new HttpClientService()
                                .PostAsync <ActionResultResponse>($"{apiUrls.CoreApiUrl}/tags", eventTags);

                var resultTranslation = await _eventTranslationRepository.Inserts(eventTranslations);

                if (resultTranslation > 0)
                {
                    return(new ActionResultResponse <string>(resultTranslation,
                                                             _websiteEventResourceService.GetString("Add new event translation successful.")));
                }

                await RollbackInsertEventTranslation();
                await RollbackInsertEvent();

                return(new ActionResultResponse <string>(-3,
                                                         _websiteEventResourceService.GetString("Can not insert event translation. Please contact with administrator.")));
            }

            async Task RollbackInsertEvent()
            {
                await _eventRepository.ForceDelete(eventId);
            }

            async Task RollbackInsertEventTranslation()
            {
                await _eventTranslationRepository.Delete(eventId);
            }

            #endregion Local functions
        }
Beispiel #6
0
        public async Task <ActionResultResponse <string> > Update(string tenantId, string lastUpdateUserId, string lastUpdateFullName, string lastUpdateAvatar,
                                                                  string eventId, EventMeta eventMeta)
        {
            var apiUrls = _configuration.GetApiUrl();

            if (apiUrls == null)
            {
                return(new ActionResultResponse <string>(-5,
                                                         _sharedResourceService.GetString(
                                                             "Missing some configuration. Please contact with administrator.")));
            }
            var eventTags = new List <TagSubjectViewModel>();

            if (eventMeta.StartDate.HasValue && eventMeta.EndDate.HasValue)
            {
                if (DateTime.Compare(eventMeta.StartDate.Value, eventMeta.EndDate.Value) > 0)
                {
                    return(new ActionResultResponse <string>(-1, _websiteEventResourceService.GetString("Start time greater than end time.")));
                }
            }

            var info = await _eventRepository.GetInfo(eventId);

            if (info == null)
            {
                return(new ActionResultResponse <string>(-1, _websiteEventResourceService.GetString("Event does not exists.")));
            }

            if (info.TenantId != tenantId)
            {
                return(new ActionResultResponse <string>(-2,
                                                         _websiteEventResourceService.GetString(ErrorMessage.NotHavePermission)));
            }

            if (info.ConcurrencyStamp != eventMeta.ConcurrencyStamp)
            {
                return(new ActionResultResponse <string>(-3,
                                                         _websiteEventResourceService.GetString(
                                                             "The event already updated by other people. you are not allowed to edit the event information.")));
            }

            info.IsActive  = eventMeta.IsActive;
            info.Thumbnail = eventMeta.Thumbnail;

            info.StartDate    = eventMeta.StartDate;
            info.EndDate      = eventMeta.EndDate;
            info.LimitedUsers = eventMeta.LimitedUsers;
            info.IsAllowRegisterWhenOverload = eventMeta.IsAllowRegisterWhenOverload;
            info.LimitedAccompanyPersons     = eventMeta.LimitedAccompanyPersons;
            info.StaffOnly              = eventMeta.StaffOnly;
            info.IsAllowRegister        = eventMeta.IsAllowRegister;
            info.IsAllowAccompanyPerson = eventMeta.IsAllowAccompanyPerson;

            info.ConcurrencyStamp   = Guid.NewGuid().ToString();
            info.LastUpdate         = DateTime.Now;
            info.LastUpdateUserId   = lastUpdateUserId;
            info.LastUpdateFullName = lastUpdateFullName;
            info.LastUpdateAvatar   = lastUpdateAvatar;

            await _eventRepository.Update(info);

            #region translation.
            if (eventMeta.EventTranslations.Count > 0)
            {
                var resultUpdateTranslation = await UpdateEventTranslation();

                if (resultUpdateTranslation.Code <= 0)
                {
                    return(resultUpdateTranslation);
                }
            }
            #endregion

            return(new ActionResultResponse <string>(1, _websiteEventResourceService.GetString("Update event successful."),
                                                     string.Empty, info.ConcurrencyStamp));

            async Task <ActionResultResponse <string> > UpdateEventTranslation()
            {
                foreach (var eventTranslation in eventMeta.EventTranslations)
                {
                    //var isNameExists = await _eventTranslationRepository.CheckExists( info.Id,
                    //    eventTranslation.LanguageId, eventTranslation.Name);
                    //if (isNameExists)
                    //    return new ActionResultResponse(-4, _websiteEventResourceService.GetString("Event name: \"{0}\" already exists."));

                    var eventTranslationInfo =
                        await _eventTranslationRepository.GetInfo(info.Id, eventTranslation.LanguageId);

                    if (eventTranslationInfo != null)
                    {
                        eventTranslationInfo.Name            = eventTranslation.Name.Trim();
                        eventTranslationInfo.MetaTitle       = eventTranslation.MetaTitle?.Trim();
                        eventTranslationInfo.Description     = eventTranslation.Description?.Trim();
                        eventTranslationInfo.MetaDescription = eventTranslation.MetaDescription?.Trim();
                        eventTranslationInfo.Content         = eventTranslation.Content?.Trim();
                        eventTranslationInfo.UnsignName      = eventTranslation.Name?.StripVietnameseChars().ToUpper();
                        eventTranslationInfo.Address         = eventTranslation.Address?.Trim();
                        if (!string.IsNullOrEmpty(eventTranslation.SeoLink))
                        {
                            eventTranslationInfo.SeoLink = eventTranslation.SeoLink.ToUrlString();
                        }
                        else
                        {
                            eventTranslationInfo.SeoLink = eventTranslation.Name.ToUrlString();
                        }

                        // Check Seolink exists.
                        var isSeolinkExists = await _eventTranslationRepository.CheckSeoLinkExists(eventId,
                                                                                                   eventTranslation.LanguageId, eventTranslationInfo.SeoLink);

                        if (isSeolinkExists)
                        {
                            return(new ActionResultResponse <string>(-5,
                                                                     _websiteEventResourceService.GetString("Seo link: \"{0}\" already exists.",
                                                                                                            eventTranslationInfo.SeoLink)));
                        }

                        await _eventTranslationRepository.Update(eventTranslationInfo);
                    }
                    else
                    {
                        var eventTranslationInsert = new EventTranslation
                        {
                            EventId         = eventId,
                            LanguageId      = eventTranslation.LanguageId.Trim(),
                            Name            = eventTranslation.Name.Trim(),
                            MetaTitle       = eventTranslation.MetaTitle?.Trim(),
                            Description     = eventTranslation.Description?.Trim(),
                            MetaDescription = eventTranslation.MetaDescription?.Trim(),
                            Content         = eventTranslation.Content?.Trim(),
                            Address         = eventTranslation.Address?.Trim(),
                            UnsignName      = eventTranslation.Name.StripVietnameseChars().ToUpper()
                        };

                        if (!string.IsNullOrEmpty(eventTranslation.SeoLink))
                        {
                            eventTranslationInsert.SeoLink = eventTranslation.SeoLink.ToUrlString();
                        }
                        else
                        {
                            eventTranslationInsert.SeoLink = eventTranslation.Name.ToUrlString();
                        }

                        // Check Seolink exists.
                        var isSeolinkExists = await _eventTranslationRepository.CheckSeoLinkExists(eventId,
                                                                                                   eventTranslation.LanguageId, eventTranslationInsert.SeoLink);

                        if (isSeolinkExists)
                        {
                            return(new ActionResultResponse <string>(-6,
                                                                     _websiteEventResourceService.GetString("Seo link: \"{0}\" already exists.",
                                                                                                            eventTranslationInsert.SeoLink)));
                        }

                        await _eventTranslationRepository.Insert(eventTranslationInsert);
                    }

                    var eventTagInsert = new TagSubjectViewModel
                    {
                        TenantId        = tenantId,
                        CreatorId       = lastUpdateUserId,
                        CreatorFullName = lastUpdateFullName,
                        CreatorAvata    = lastUpdateAvatar,
                        Type            = TagType.Event,
                        SubjectId       = eventId,
                        LanguageId      = eventTranslation.LanguageId.Trim(),
                        Tags            = eventTranslation.Tags
                    };
                    eventTags.Add(eventTagInsert);
                }

                var resultTag = await new HttpClientService()
                                .PostAsync <ActionResultResponse>($"{apiUrls.CoreApiUrl}/tags", eventTags);

                return(new ActionResultResponse <string>(1,
                                                         _websiteEventResourceService.GetString("Update event translation successful."), string.Empty, info.ConcurrencyStamp));
            }
        }