public ActionResult CreateOffer([FromBody] PostEmailOfferDTO EmailOfferRelatedDTO)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            if (EmailOfferRelatedDTO.ProcedureIds.Count > 0)
            {
                foreach (int id in EmailOfferRelatedDTO.ProcedureIds)
                {
                    EmailOffer emailOfferRelated = new EmailOffer()
                    {
                        GUId        = EmailOfferRelatedDTO.GUId,
                        ProcedureId = id,
                        //CoursePackageIds = EmailOfferRelatedDTO.CoursePackageIds,
                        //AlternativeCousrsePackages = EmailOfferRelatedDTO.AlternativeCousrsePackages,
                        CreatedDate = DateTime.UtcNow,
                        CreatedBy   = EmailOfferRelatedDTO.CreatedBy,
                    };

                    _choiceRepository.Add <EmailOffer>(emailOfferRelated);

                    var Procedure = _choiceRepository.DbContext.Procedure.Where(x => x.ProcedureId == id).FirstOrDefault();
                    if (Procedure != null)
                    {
                        Procedure.UsedInEmailOffer = true;
                        _choiceRepository.Attach(Procedure);
                    }
                }
            }

            if (EmailOfferRelatedDTO.CoursePackageIds.Count > 0)
            {
                for (int i = 0; i < EmailOfferRelatedDTO.CoursePackageIds.Count; i++)
                {
                    EmailOfferCoursePackages emailOfferPackages = new EmailOfferCoursePackages()
                    {
                        GUId            = EmailOfferRelatedDTO.GUId,
                        CoursePackageId = EmailOfferRelatedDTO.CoursePackageIds[i],
                        AlternativeCousrsePackageName = EmailOfferRelatedDTO.AlterNativeCoursePackageNames[i],
                        //CoursePackageIds = EmailOfferRelatedDTO.CoursePackageIds,
                        //AlternativeCousrsePackages = EmailOfferRelatedDTO.AlternativeCousrsePackages,
                        CreatedDate = DateTime.UtcNow,
                        CreatedBy   = EmailOfferRelatedDTO.CreatedBy,
                    };

                    _choiceRepository.Add <EmailOfferCoursePackages>(emailOfferPackages);
                }
            }

            _choiceRepository.Complete();

            return(CreatedAtRoute("EmailOfferRelatedByGUId", new { EmailOfferRelatedDTO.GUId }, EmailOfferRelatedDTO));
        }
        public ActionResult UpdateEmailOffer([FromBody] PUTEmailOfferDTO EmailOfferRelatedDTO)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            var offersInDB = _choiceRepository.GetEmailOfferRelated().Where(x => x.GUId == EmailOfferRelatedDTO.GUId).ToList();
            var CPInDB     = _choiceRepository.GetEmailOfferRelatedCPs().Where(x => x.GUId == EmailOfferRelatedDTO.GUId).ToList();

            if ((EmailOfferRelatedDTO.ProcedureIds.Count != EmailOfferRelatedDTO.Approve.Count) || (EmailOfferRelatedDTO.ProcedureIds.Count != EmailOfferRelatedDTO.Reject.Count))
            {
                return(BadRequest());
            }

            if (EmailOfferRelatedDTO.ProcedureIds.Count > 0)
            {
                for (int i = 0; i < EmailOfferRelatedDTO.ProcedureIds.Count; i++)
                {
                    var offer = _choiceRepository.GetById <EmailOffer>(x => x.ProcedureId == EmailOfferRelatedDTO.ProcedureIds[i]);
                    if (offer == null)
                    {
                        EmailOffer emailOfferRelated = new EmailOffer()
                        {
                            GUId           = EmailOfferRelatedDTO.GUId,
                            ProcedureId    = EmailOfferRelatedDTO.ProcedureIds[i],
                            Approve        = EmailOfferRelatedDTO.Approve[i],
                            Reject         = EmailOfferRelatedDTO.Reject[i],
                            CreatedDate    = DateTime.UtcNow,
                            CreatedBy      = EmailOfferRelatedDTO.CreatedBy,
                            LastModified   = DateTime.UtcNow,
                            LastModifiedBy = EmailOfferRelatedDTO.LastModifiedBy,
                        };

                        _choiceRepository.Add <EmailOffer>(emailOfferRelated);

                        var Procedure = _choiceRepository.DbContext.Procedure.Where(x => x.ProcedureId == EmailOfferRelatedDTO.ProcedureIds[i]).FirstOrDefault();
                        if (Procedure != null)
                        {
                            Procedure.UsedInEmailOffer = true;
                            _choiceRepository.Attach(Procedure);
                        }
                    }
                    else
                    {
                        EmailOffer emailOffer = _mapper.Map <EmailOffer>(offer);
                        // emailOffer.GUId = EmailOfferRelatedDTO.GUId;
                        //emailOffer.ProcedureId = EmailOfferRelatedDTO.ProcedureIds[i];
                        emailOffer.Approve        = EmailOfferRelatedDTO.Approve[i];
                        emailOffer.Reject         = EmailOfferRelatedDTO.Reject[i];
                        emailOffer.LastModified   = DateTime.UtcNow;
                        emailOffer.LastModifiedBy = EmailOfferRelatedDTO.LastModifiedBy;
                        _choiceRepository.Attach(emailOffer);

                        var Procedure = _choiceRepository.DbContext.Procedure.Where(x => x.ProcedureId == EmailOfferRelatedDTO.ProcedureIds[i]).FirstOrDefault();
                        if (Procedure != null)
                        {
                            Procedure.UsedInEmailOffer = false;
                            _choiceRepository.Attach(Procedure);
                        }
                    }
                }
            }

            if (EmailOfferRelatedDTO.CoursePackageIds.Count > 0)
            {
                for (int i = 0; i < EmailOfferRelatedDTO.CoursePackageIds.Count; i++)
                {
                    var CP = _choiceRepository.GetById <EmailOfferCoursePackages>(x => x.CoursePackageId == EmailOfferRelatedDTO.CoursePackageIds[i]);// CPInDB.Where(x => x.CoursePackageId == EmailOfferRelatedDTO.CoursePackageIds[i]);
                    if (CP == null)
                    {
                        EmailOfferCoursePackages emailOfferPackages = new EmailOfferCoursePackages()
                        {
                            GUId            = EmailOfferRelatedDTO.GUId,
                            CoursePackageId = EmailOfferRelatedDTO.CoursePackageIds[i],
                            AlternativeCousrsePackageName = EmailOfferRelatedDTO.AlterNativeCoursePackageNames[i],
                            CreatedDate = DateTime.UtcNow,
                            CreatedBy   = EmailOfferRelatedDTO.CreatedBy,
                        };

                        _choiceRepository.Add <EmailOfferCoursePackages>(emailOfferPackages);
                    }
                }
            }

            _choiceRepository.Complete();

            foreach (var offer in offersInDB)
            {
                if (!EmailOfferRelatedDTO.ProcedureIds.Contains(offer.ProcedureId))
                {
                    var Noffer = _choiceRepository.GetById <EmailOffer>(x => x.ProcedureId == offer.ProcedureId);
                    _choiceRepository.Remove(Noffer);
                    var Procedure = _choiceRepository.DbContext.Procedure.Where(x => x.ProcedureId == offer.ProcedureId).FirstOrDefault();
                    if (Procedure != null)
                    {
                        Procedure.UsedInEmailOffer = false;
                        _choiceRepository.Attach(Procedure);
                    }
                }
            }

            foreach (var CP in CPInDB)
            {
                if (!EmailOfferRelatedDTO.CoursePackageIds.Contains(CP.CoursePackageId))
                {
                    var NCp = _choiceRepository.GetById <EmailOfferCoursePackages>(x => x.CoursePackageId == CP.CoursePackageId);
                    _choiceRepository.Remove(NCp);
                }
            }
            _choiceRepository.Complete();
            return(NoContent());
        }