public ActionResult _AddEditionKeyVisitor(int editionId, int keyVisitorId, string value)
        {
            var edition = EditionServices.GetEditionById(editionId);

            if (edition == null)
            {
                return(Json(new { success = false, message = "Edition doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            //var keyVisitor = KeyVisitorServices.GetKeyVisitorById(keyVisitorId);
            //if (keyVisitor == null)
            //    return Json(new { success = false, message = "KeyVisitor doesn't exist." }, JsonRequestBehavior.AllowGet);

            var editionKeyVisitorId = EditionKeyVisitorServices.CreateEditionKeyVisitor(new
                                                                                        EditionKeyVisitorEntity
            {
                EditionId    = editionId,
                EventBEID    = edition.AxEventId,
                KeyVisitorId = keyVisitorId,
                Value        = value.Trim()
            },
                                                                                        CurrentCedUser.CurrentUser.UserId
                                                                                        );

            // TODO: KeyVisitor entity is not loaded into EditionKeyVisitor entity.
            var editionKeyVisitor = EditionKeyVisitorServices.GetEditionKeyVisitorById(editionKeyVisitorId);
            var keyVisitor        = KeyVisitorServices.GetKeyVisitorById(editionKeyVisitor.KeyVisitorId);

            // UPDATE EDITION
            UpdateEditionUpdateInfo(edition);

            // DIFF
            var diff = new List <Variance> {
                new Variance {
                    Prop = "KeyVisitor", ValA = null, ValB = keyVisitor.Name + ": " + editionKeyVisitor.Value
                }
            };

            OnEditionUpdated(edition, diff);

            // UPDATE LOG
            var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson("KeyVisitor", new List <Variance> {
                new Variance {
                    Prop = "KeyVisitor"
                }
            });

            UpdateLogInMemory(edition, updatedFields);

            return(Json(new { success = true, message = "KeyVisitor has been added." /*, editionKeyVisitorCount = editionKeyVisitorCount*/ }, JsonRequestBehavior.AllowGet));
        }
        /* EMAIL NOTIFICATION */
        public EmailResult SendEmailNotification(EditionEntity edition, NotificationType notificationType, string recipients, UserEntity actor, string body,
                                                 string buttonUrl, string unsubscribingUrl = null)
        {
            //if (string.IsNullOrWhiteSpace(recipients))
            //{
            //    var message = $"{notificationType} type of notification email could not be sent since edition {edition.EditionId} - {edition.EditionName} has no recipients.";
            //    var log = CreateInternalLog(message, actor);
            //    ExternalLogHelper.Log(log, LoggingEventType.Warning);
            //    return new EmailResult { Sent = false, ErrorMessage = message };
            //}

            if (WebConfigHelper.RemoveActorUserFromNotificationRecipients)
            {
                recipients = NotificationControllerHelper.RemoveCurrentUserFromRecipients(recipients, actor?.Email);
            }

            //if (string.IsNullOrWhiteSpace(recipients))
            //    return false;

            try
            {
                var recipientFullName = _editionHelper.GetRecipientFullName(edition);

                var sendEmailAttr = notificationType.GetAttribute <NotificationAttribute>().SendEmail;
                if (sendEmailAttr)
                {
                    var editionTranslation =
                        edition.EditionTranslations.SingleOrDefault(x => string.Equals(x.LanguageCode,
                                                                                       LanguageHelper.GetBaseLanguageCultureName(), StringComparison.CurrentCultureIgnoreCase));

                    var emailResult = _emailNotificationHelper.Send(edition, editionTranslation, notificationType, recipientFullName, body, recipients,
                                                                    buttonUrl, unsubscribingUrl);

                    //// EMAIL LOGGING
                    //if (sent)
                    //LogEmail(edition.EditionId, recipients, body, actor?.Email, notificationType.ToString());

                    return(emailResult);
                }
            }
            catch (Exception exc)
            {
                var log = CreateInternalLog(exc, actor);
                ExternalLogHelper.Log(log, LoggingEventType.Error);
            }

            return(new EmailResult {
                Sent = false, ErrorMessage = ""
            });
        }
        public ActionResult _DeleteSocialMedia(int editionSocialMediaId)
        {
            var editionSocialMedia = EditionTranslationSocialMediaServices.GetById(editionSocialMediaId);

            if (editionSocialMedia == null)
            {
                return(Json(new { success = false, message = "Social media account doesn't exist!" }, JsonRequestBehavior.AllowGet));
            }

            var edition = EditionServices.GetEditionById(editionSocialMedia.EditionId);

            if (edition == null)
            {
                return(Json(new { success = false, message = "Edition doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            var deleted = EditionTranslationSocialMediaServices.Delete(editionSocialMediaId);

            if (!deleted)
            {
                return(Json(new { success = false, message = $"<i class='fa fa-{editionSocialMedia.SocialMediaId}'></i> {editionSocialMedia.SocialMediaId.ToEnumFromDescription<SocialMediaType>()} account could not be deleted." }, JsonRequestBehavior.AllowGet));
            }

            var scopeName = "Social Media Account";

            // UPDATE EDITION
            UpdateEditionUpdateInfo(edition);

            // DIFF
            var diff = new List <Variance> {
                new Variance {
                    Prop = scopeName, ValA = editionSocialMedia.SocialMediaId + "/" + editionSocialMedia.AccountName, ValB = null
                }
            };

            OnEditionUpdated(edition, diff);

            // UPDATE LOG
            var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson(scopeName, new List <Variance> {
                new Variance {
                    Prop = scopeName
                }
            });

            UpdateLogInMemory(edition, updatedFields);

            return(Json(new { success = true, message = $"<i class='fa fa-{editionSocialMedia.SocialMediaId}'></i> {editionSocialMedia.SocialMediaId.ToEnumFromDescription<SocialMediaType>()} account has been deleted." }, JsonRequestBehavior.AllowGet));
        }
예제 #4
0
        public ActionResult _DeleteEditionDiscountApprover(int id)
        {
            var discountApprover = EditionDiscountApproverServices.GetById(id);

            if (discountApprover == null)
            {
                return(Json(new { success = false, message = "Discount approver doesn't exist!" }, JsonRequestBehavior.AllowGet));
            }

            var edition = EditionServices.GetEditionById(discountApprover.EditionId);

            if (edition == null)
            {
                return(Json(new { success = false, message = "Edition doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            var deleted = EditionDiscountApproverServices.Delete(id);

            if (!deleted)
            {
                return(Json(new { success = false, message = $"Discount approver could not be deleted: {discountApprover.ApprovingUser}" }, JsonRequestBehavior.AllowGet));
            }

            var scopeName = "Edition Discount Approver";

            // UPDATE EDITION
            UpdateEditionUpdateInfo(edition);

            // DIFF
            var diff = new List <Variance> {
                new Variance {
                    Prop = scopeName, ValA = discountApprover.ApprovingUser, ValB = null
                }
            };

            OnEditionUpdated(edition, diff);

            // UPDATE LOG
            var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson(scopeName, new List <Variance> {
                new Variance {
                    Prop = scopeName
                }
            });

            UpdateLogInMemory(edition, updatedFields);

            return(Json(new { success = true, message = $"Discount approver has been deleted: {discountApprover.ApprovingUser}" }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult _DeleteCohostEdition(int cohostEditionId)
        {
            var cohostEdition = EditionCoHostServices.GetEditionCohostById(cohostEditionId);

            if (cohostEdition == null)
            {
                return(Json(new { success = false, message = "Co-host doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            var edition = EditionServices.GetEditionById(cohostEdition.FirstEditionId);

            if (edition == null)
            {
                return(Json(new { success = false, message = "Edition doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            var deleted = EditionCoHostServices.DeleteEditionCohost(cohostEditionId);

            if (!deleted)
            {
                return(Json(new { success = false, message = "Co-host could not be removed." }, JsonRequestBehavior.AllowGet));
            }

            var cohostCount = SetEditionCohostedEventStatus(cohostEdition.FirstEditionId);

            // UPDATE EDITION
            UpdateEditionUpdateInfo(edition);

            // DIFF
            var diff = new List <Variance> {
                new Variance {
                    Prop = "Co-host", ValA = null, ValB = cohostEdition.FirstEdition.EditionName
                }
            };

            OnEditionUpdated(edition, diff);

            // UPDATE LOG
            var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson("Co-host", new List <Variance> {
                new Variance {
                    Prop = "Co-host"
                }
            });

            UpdateLogInMemory(edition, updatedFields);

            return(Json(new { success = true, message = "Co-host has been removed.", cohostCount = cohostCount }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult _DeleteEditionPaymentSchedule(int editionPaymentScheduleId)
        {
            var editionPaymentSchedule = EditionPaymentScheduleServices.GetById(editionPaymentScheduleId);

            if (editionPaymentSchedule == null)
            {
                return(Json(new { success = false, message = "Edition payment schedule doesn't exist!" }, JsonRequestBehavior.AllowGet));
            }

            var edition = EditionServices.GetEditionById(editionPaymentSchedule.EditionId);

            if (edition == null)
            {
                return(Json(new { success = false, message = "Edition doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            var deleted = EditionPaymentScheduleServices.Delete(editionPaymentScheduleId);

            if (!deleted)
            {
                return(Json(new { success = false, message = $"Edition payment schedule could not be deleted: {editionPaymentSchedule.Name}" }, JsonRequestBehavior.AllowGet));
            }

            var scopeName = "Edition Payment Schedule";

            // UPDATE EDITION
            UpdateEditionUpdateInfo(edition);

            // DIFF
            var diff = new List <Variance> {
                new Variance {
                    Prop = scopeName, ValA = editionPaymentSchedule.Name, ValB = null
                }
            };

            OnEditionUpdated(edition, diff);

            // UPDATE LOG
            var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson(scopeName, new List <Variance> {
                new Variance {
                    Prop = scopeName
                }
            });

            UpdateLogInMemory(edition, updatedFields);

            return(Json(new { success = true, message = $"Edition payment schedule has been deleted: {editionPaymentSchedule.Name}" }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult _DeleteEditionKeyVisitor(int editionKeyVisitorId)
        {
            var editionKeyVisitor = EditionKeyVisitorServices.GetEditionKeyVisitorById(editionKeyVisitorId);

            if (editionKeyVisitor == null)
            {
                return(Json(new { success = false, message = "KeyVisitor doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            var edition = EditionServices.GetEditionById(editionKeyVisitor.EditionId);

            if (edition == null)
            {
                return(Json(new { success = false, message = "Edition doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            var deleted = EditionKeyVisitorServices.DeleteEditionKeyVisitor(editionKeyVisitorId);

            if (!deleted)
            {
                return(Json(new { success = false, message = "KeyVisitor could not be removed." }, JsonRequestBehavior.AllowGet));
            }

            // UPDATE EDITION
            UpdateEditionUpdateInfo(edition);

            // DIFF
            var diff = new List <Variance> {
                new Variance {
                    Prop = "KeyVisitor", ValA = editionKeyVisitor.KeyVisitor.Name + ": " + editionKeyVisitor.Value, ValB = null
                }
            };

            OnEditionUpdated(edition, diff);

            // UPDATE LOG
            var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson("KeyVisitor", new List <Variance> {
                new Variance {
                    Prop = "KeyVisitor"
                }
            });

            UpdateLogInMemory(edition, updatedFields);

            return(Json(new { success = true, message = "KeyVisitor has been removed." /*, editionKeyVisitorCount = editionKeyVisitorCount*/ }, JsonRequestBehavior.AllowGet));
        }
        protected void PushRealTimeInAppNotification(EditionEntity edition, NotificationType notificationType, string recipients, string actorUserEmail)
        {
            // TODO: If there are no recipients then notifications are getting pushed to Admins.
            if (string.IsNullOrWhiteSpace(recipients))
            {
                recipients = WebConfigHelper.AdminEmails;
            }

            var notifDesc = _inAppNotificationHelper.GetDescription(edition, notificationType);

            if (notificationType == NotificationType.EditionUpdated)
            {
                notifDesc = notifDesc + " by " + CurrentCedUser.CurrentUser.FullName + " on " + DateTime.Now;
            }

            if (WebConfigHelper.RemoveActorUserFromNotificationRecipients)
            {
                recipients = NotificationControllerHelper.RemoveCurrentUserFromRecipients(recipients, actorUserEmail);
            }

            NotificationHub.PushNotification(recipients.Split(',').ToList(), notifDesc, null);
        }
        public ActionResult _AddSocialMedia(int editionTranslationId, string socialMediaId, string accountName)
        {
            if (string.IsNullOrWhiteSpace(accountName))
            {
                return(Json(new { success = false, message = "Account name cannot be empty!" }, JsonRequestBehavior.AllowGet));
            }

            var editionTranslation = EditionTranslationServices.GetEditionTranslationById(editionTranslationId);

            if (editionTranslation == null)
            {
                return(Json(new { success = false, message = "Edition translation must be saved for this action." }, JsonRequestBehavior.AllowGet));
            }

            var edition = EditionServices.GetEditionById(editionTranslation.EditionId);

            if (edition == null)
            {
                return(Json(new { success = false, message = "Edition doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            var existingSocialMedia = SocialMediaServices.GetSocialMediaById(socialMediaId);

            if (existingSocialMedia == null)
            {
                socialMediaId = SocialMediaServices.CreateSocialMedia(socialMediaId);
            }

            if (!string.IsNullOrWhiteSpace(socialMediaId))
            {
                var existingEditionSocialMedia = EditionTranslationSocialMediaServices.Get(editionTranslationId, socialMediaId);

                if (existingEditionSocialMedia != null)
                {
                    return(Json(new { success = false, message = $"<i class='fa fa-{existingEditionSocialMedia.SocialMediaId}'></i> {existingEditionSocialMedia.SocialMediaId.ToEnumFromDescription<SocialMediaType>()} account already exists!" }, JsonRequestBehavior.AllowGet));
                }

                var editionSocialMedia = new EditionTranslationSocialMediaEntity
                {
                    EditionId            = editionTranslation.EditionId,
                    EditionTranslationId = editionTranslation.EditionTranslationId,
                    SocialMediaId        = socialMediaId,
                    AccountName          = accountName
                };
                EditionTranslationSocialMediaServices.Create(editionSocialMedia, CurrentCedUser.CurrentUser.UserId);


                var scopeName = "Social Media Account";

                // UPDATE EDITION
                UpdateEditionUpdateInfo(edition);

                // DIFF
                var diff = new List <Variance> {
                    new Variance {
                        Prop = scopeName, ValA = null, ValB = editionSocialMedia.SocialMediaId + "/" + editionSocialMedia.AccountName
                    }
                };

                OnEditionUpdated(edition, diff);

                // UPDATE LOG
                var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson(scopeName, new List <Variance> {
                    new Variance {
                        Prop = scopeName
                    }
                });
                UpdateLogInMemory(edition, updatedFields);

                return(Json(new { success = true, message = $"<i class='fa fa-{editionSocialMedia.SocialMediaId}'></i> {editionSocialMedia.SocialMediaId.ToEnumFromDescription<SocialMediaType>()} account has been added." }, JsonRequestBehavior.AllowGet));
            }

            return(Json(new { success = false, message = "<i class='fa fa-{editionSocialMedia.SocialMediaId}'></i> {editionSocialMedia.SocialMediaId.ToEnum<SocialMediaType>()} account could not be added!" }, JsonRequestBehavior.AllowGet));
        }
예제 #10
0
        public ActionResult _AddEditionDiscountApprover(EditionDiscountApproverAddModel model)
        {
            if (!ModelState.IsValid)
            {
                return(Json(new { success = false, message = ModelState.GetErrors() }, JsonRequestBehavior.AllowGet));
            }

            var edition = EditionServices.GetEditionById(model.EditionId);

            if (edition == null)
            {
                return(Json(new { success = false, message = "Edition doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            var existingDiscountApprover = EditionDiscountApproverServices.Get(model.EditionId, model.ApprovingUser);

            if (existingDiscountApprover != null)
            {
                return(Json(
                           new
                {
                    success = false,
                    message =
                        $"Discount approver already exists: {existingDiscountApprover.ApprovingUser}"
                }, JsonRequestBehavior.AllowGet));
            }

            var discountApprover = new EditionDiscountApproverEntity
            {
                EditionId               = edition.EditionId,
                ApprovingUser           = model.ApprovingUser,
                ApprovalLowerPercentage = model.ApprovalLowerPercentage.GetValueOrDefault(),
                ApprovalUpperPercentage = model.ApprovalUpperPercentage.GetValueOrDefault()
            };

            EditionDiscountApproverServices.Create(discountApprover, CurrentCedUser.CurrentUser.UserId);

            var scopeName = "Edition Discount Approver";

            // UPDATE EDITION
            UpdateEditionUpdateInfo(edition);

            // DIFF
            var diff = new List <Variance>
            {
                new Variance
                {
                    Prop = scopeName, ValA = null,
                    ValB = discountApprover.ApprovingUser
                }
            };

            OnEditionUpdated(edition, diff);

            // UPDATE LOG
            var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson(scopeName,
                                                                                    new List <Variance> {
                new Variance {
                    Prop = scopeName
                }
            });

            UpdateLogInMemory(edition, updatedFields);

            return(Json(
                       new
            {
                success = true,
                message =
                    $"Discount approver has been added: {discountApprover.ApprovingUser}"
            }, JsonRequestBehavior.AllowGet));
        }
예제 #11
0
        public ActionResult _Upload()
        {
            var entityId    = Convert.ToInt32(Request.Params["EntityId"]);
            var fileType    = Request.Params["FileType"].ToEnum <EditionFileType>();
            var langCode    = Request.Params["LanguageCode"];
            var isSaved     = true;
            var newFileName = "";

            var edition = EditionServices.GetEditionById(entityId);

            if (edition == null)
            {
                return(View("NotFound", new ErrorModel {
                    Message = Constants.EditionNotFound
                }));
            }
            if (edition.IsCancelled())
            {
                return(Json(new { success = false, message = Constants.WarningMessageEventCancelled }));
            }

            try
            {
                var file = Request.Files[0];

                if (file != null && file.ContentLength > 0)
                {
                    var fileName = Path.GetFileNameWithoutExtension(file.FileName);

                    // CHECK EXTENSION
                    var extension         = Path.GetExtension(file.FileName);
                    var allowedExtensions = fileType.GetAttribute <FileTypeAttribute>().AllowedExtensions;

                    if (!allowedExtensions.Contains(extension))
                    {
                        return(Json(new { success = false, message = Constants.InvalidFileExtension }));
                    }

                    newFileName = EditionServiceHelper.ComposeFileName(edition.EditionId, fileName, fileType, langCode, extension);

                    // The way of saving changes depending on fileType's Private property.
                    var result = fileType.GetAttribute <FileTypeAttribute>().Private
                        ? SaveFileToLocalDisk(fileType, newFileName, file)
                        : SaveFileToAzureStorage(fileType, newFileName, file);

                    switch (result.Result)
                    {
                    case OperationResult.AlreadyExists:
                        return(Json(new { success = false, message = Constants.FileAlreadyExistsWithTheSameName }));

                    case OperationResult.Failed:
                        return(Json(new { success = false, message = result.Message }));
                    }

                    // CREATE FILE
                    if (!SaveFileInfo(entityId, newFileName, fileType, extension, langCode))
                    {
                        return(Json(new { success = false, message = Constants.ErrorWhileSavingFile }));
                    }
                }
            }
            catch (Exception exc)
            {
                isSaved = false;

                var log = CreateInternalLog(exc);
                ExternalLogHelper.Log(log, LoggingEventType.Error);
            }

            if (!isSaved)
            {
                return(Json(new { success = false, message = Constants.ErrorWhileSavingFile }));
            }

            // UPDATE EDITION
            UpdateEditionUpdateInfo(edition);

            // UPDATE LOG
            var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson($"File ({fileType})", new List <Variance> {
                new Variance {
                    Prop = fileType.ToString()
                }
            });

            UpdateLogInMemory(edition, updatedFields);

            //UpdateLogInMemory(currentEdition, edition, currentEditionTranslation, editionTranslation);

            // UPDATEDCONTENT
            var currentFileForComparison = new FileEntity();
            var fileForComparison        = new FileEntity {
                FileName = newFileName
            };

            fileForComparison.SetFullUrl();
            var updatedContent = NotificationControllerHelper.GetUpdatedContent(currentFileForComparison, fileForComparison);

            PushEditionUpdateNotifications(edition, updatedContent);

            return(Json(new { success = true, message = Constants.FileSaved }));
        }
예제 #12
0
        public ActionResult _Delete(int fileId, string fileType)
        {
            var editionFileType = fileType.ToLower().ToEnumFromDescription <EditionFileType>();

            var file = FileServices.GetFileById(fileId);

            if (file == null)
            {
                return(Json(new { success = false, message = Constants.FileNotFound }));
            }

            var edition = EditionServices.GetEditionById(file.EntityId);

            if (edition.IsCancelled())
            {
                return(Json(new { success = false, message = Constants.WarningMessageEventCancelled }));
            }

            var success = FileServices.DeleteFile(file.FileId);

            if (success)
            {
                bool success2;
                if (file.EditionFileType.GetAttribute <FileTypeAttribute>().Private)
                {
                    success2 = DeleteFileFromLocalDisk(file.FileName, file.EditionFileType);
                }
                else
                {
                    var blobName = editionFileType.BlobFullName(file.FileName);

                    try
                    {
                        success2 = _azureStorageService.DeleteFile(blobName);
                    }
                    catch (Exception exc)
                    {
                        var log = CreateInternalLog(exc);
                        ExternalLogHelper.Log(log, LoggingEventType.Error);

                        success2 = false;
                    }
                }

                //if (!success2)
                //    return Json(new {success = false, message = "File could not be deleted!"});

                // UPDATE EDITON
                UpdateEditionUpdateInfo(edition);

                //// DIFF
                //var diff = new List<Variance> { new Variance { Prop = $"File ({file.EditionFileType})", ValA = file.FileName, ValB = null } };

                //OnEditionUpdated(edition, diff);

                // UPDATE LOG
                var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson($"File ({file.EditionFileType})", new List <Variance> {
                    new Variance {
                        Prop = editionFileType.ToString()
                    }
                });
                UpdateLogInMemory(edition, updatedFields);

                // UPDATEDCONTENT
                var currentFileForComparison = new FileEntity {
                    FileName = file.FileName
                };
                var fileForComparison = new FileEntity();
                fileForComparison.SetFullUrl();
                var updatedContent = NotificationControllerHelper.GetUpdatedContent(currentFileForComparison, fileForComparison);

                PushEditionUpdateNotifications(edition, updatedContent);

                return(Json(new { success = true, message = Constants.FileDeleted, fileType = editionFileType.GetDescription() }));
            }
            return(Json(new { success = false, message = Constants.FileNotDeleted }));
        }
        protected void OnEditionUpdated(EditionEntity edition, List <Variance> diff)
        {
            var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsDetailedHtml(diff);

            PushEditionUpdateNotifications(edition, updatedFields);
        }
        public ActionResult _AddCohostEdition(int editionId, int cohostEditionId)
        {
            var edition = EditionServices.GetEditionById(editionId);

            if (edition == null)
            {
                return(Json(new { success = false, message = "Edition doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            var cohostEdition = EditionServices.GetEditionById(cohostEditionId);

            if (cohostEdition == null)
            {
                return(Json(new { success = false, message = "Co-host edition doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            if (EditionCoHostServices.EditionCohostExists(editionId, cohostEditionId))
            {
                return(Json(new { success = false, message = "Co-host already exists." }, JsonRequestBehavior.AllowGet));
            }

            if (cohostEditionId == editionId)
            {
                return(Json(new { success = false, message = "You cannot add the edition itself as its co-host." }, JsonRequestBehavior.AllowGet));
            }

            EditionCoHostServices.CreateEditionCohost(new
                                                      EditionCohostEntity
            {
                FirstEditionId  = editionId,
                SecondEditionId = cohostEditionId
            }
                                                      , CurrentCedUser.CurrentUser.UserId
                                                      );

            var cohostCount = SetEditionCohostedEventStatus(editionId);

            SetEditionCohostedEventStatus(cohostEditionId);

            // UPDATE EDITION
            UpdateEditionUpdateInfo(edition);

            // DIFF
            var diff = new List <Variance> {
                new Variance {
                    Prop = "Co-host", ValA = null, ValB = cohostEdition.EditionName
                }
            };

            OnEditionUpdated(edition, diff);

            // UPDATE LOG
            var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson("Co-host", new List <Variance> {
                new Variance {
                    Prop = "Co-host"
                }
            });

            UpdateLogInMemory(edition, updatedFields);

            return(Json(new { success = true, message = "Co-host has been added.", cohostCount = cohostCount }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult _AddEditionSection(EditionSectionAddModel model)
        {
            if (!ModelState.IsValid)
            {
                return(Json(new { success = false, message = ModelState.GetErrors() }, JsonRequestBehavior.AllowGet));
            }

            var edition = EditionServices.GetEditionById(model.EditionId);

            if (edition == null)
            {
                return(Json(new { success = false, message = "Edition doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            var existingEditionSection = EditionSectionServices.Get(model.EditionId, model.Sections);

            if (existingEditionSection != null)
            {
                return(Json(
                           new
                {
                    success = false,
                    message =
                        $"Edition Section already exists: {existingEditionSection.Sections}"
                }, JsonRequestBehavior.AllowGet));
            }

            var editionSection = new EditionSectionEntity
            {
                EditionId = edition.EditionId,
                Sections  = model.Sections
            };

            EditionSectionServices.Create(editionSection, CurrentCedUser.CurrentUser.UserId);

            var scopeName = "Edition Section";

            // UPDATE EDITION
            UpdateEditionUpdateInfo(edition);

            // DIFF
            var diff = new List <Variance>
            {
                new Variance
                {
                    Prop = scopeName, ValA = null,
                    ValB = editionSection.Sections
                }
            };

            OnEditionUpdated(edition, diff);

            // UPDATE LOG
            var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson(scopeName,
                                                                                    new List <Variance> {
                new Variance {
                    Prop = scopeName
                }
            });

            UpdateLogInMemory(edition, updatedFields);

            return(Json(
                       new
            {
                success = true,
                message =
                    $"Edition Section has been added: {editionSection.Sections}"
            }, JsonRequestBehavior.AllowGet));
        }
        public ActionResult _AddEditionPaymentSchedule(EditionPaymentScheduleAddModel model)
        {
            if (!ModelState.IsValid)
            {
                return(Json(new { success = false, message = ModelState.GetErrors() }, JsonRequestBehavior.AllowGet));
            }

            var edition = EditionServices.GetEditionById(model.EditionId);

            if (edition == null)
            {
                return(Json(new { success = false, message = "Edition doesn't exist." }, JsonRequestBehavior.AllowGet));
            }

            var existingEditionPaymentSchedule = EditionPaymentScheduleServices.Get(model.EditionId, model.Name);

            if (existingEditionPaymentSchedule != null)
            {
                return(Json(
                           new
                {
                    success = false,
                    message =
                        $"Edition payment schedule already exists: {existingEditionPaymentSchedule.Name}"
                }, JsonRequestBehavior.AllowGet));
            }

            var editionPaymentSchedule = new EditionPaymentScheduleEntity
            {
                EditionId              = edition.EditionId,
                Name                   = model.Name,
                ActivationDate         = model.ActivationDate,
                ExpiryDate             = model.ExpiryDate,
                Installment1DueDate    = model.Installment1DueDate,
                Installment1Percentage = model.Installment1Percentage,
                Installment2DueDate    = model.Installment2DueDate,
                Installment2Percentage = model.Installment2Percentage,
                Installment3DueDate    = model.Installment3DueDate,
                Installment3Percentage = model.Installment3Percentage,
                Installment4DueDate    = model.Installment4DueDate,
                Installment4Percentage = model.Installment4Percentage,
                Installment5DueDate    = model.Installment5DueDate,
                Installment5Percentage = model.Installment5Percentage,
            };

            EditionPaymentScheduleServices.Create(editionPaymentSchedule, CurrentCedUser.CurrentUser.UserId);

            var scopeName = "Edition Payment Schedule";

            // UPDATE EDITION
            UpdateEditionUpdateInfo(edition);

            // DIFF
            var diff = new List <Variance>
            {
                new Variance
                {
                    Prop = scopeName, ValA = null,
                    ValB = editionPaymentSchedule.Name
                }
            };

            OnEditionUpdated(edition, diff);

            // UPDATE LOG
            var updatedFields = NotificationControllerHelper.GetUpdatedFieldsAsJson(scopeName,
                                                                                    new List <Variance> {
                new Variance {
                    Prop = scopeName
                }
            });

            UpdateLogInMemory(edition, updatedFields);

            return(Json(
                       new
            {
                success = true,
                message =
                    $"Edition payment schedule has been added: {editionPaymentSchedule.Name}"
            }, JsonRequestBehavior.AllowGet));
        }