Example #1
0
        public StudentModel Save(StudentModel model)
        {
            var isNew          = true;
            var entity         = this._dbContext.StudentDetails.Where(e => e.ID == model.Id).FirstOrDefault();
            int primaryTagId   = 0;
            int?secondaryTagId = 0;

            if (null != entity)
            {
                isNew          = false;
                primaryTagId   = entity.PrimaryTagId;
                secondaryTagId = entity.SecondaryTagId;
            }
            entity = _populateValues(entity, model);

            if (isNew)
            {
                this._dbContext.StudentDetails.Add(entity);
                //Set isAvailable flag to 'N'
                var primaryTagDetail = this._dbContext.TagDetails.Where(t => t.ID == entity.PrimaryTagId).FirstOrDefault();
                if (null != primaryTagDetail)
                {
                    primaryTagDetail.IsAvailable = "N";
                    this._dbContext.Entry <TagDetail>(primaryTagDetail).State = EntityState.Modified;
                }
                var secondaryTagDetail = this._dbContext.TagDetails.Where(t => t.ID == entity.SecondaryTagId).FirstOrDefault();
                if (null != secondaryTagDetail)
                {
                    secondaryTagDetail.IsAvailable = "N";
                    this._dbContext.Entry <TagDetail>(secondaryTagDetail).State = EntityState.Modified;
                }
            }
            else
            {
                this._dbContext.Entry <StudentDetail>(entity).State = EntityState.Modified;
                if (primaryTagId != entity.PrimaryTagId)
                {
                    var oldPrimaryTag = this._dbContext.TagDetails.Where(t => t.ID == primaryTagId).FirstOrDefault();
                    if (null != oldPrimaryTag)
                    {
                        oldPrimaryTag.IsAvailable = "Y";
                        this._dbContext.Entry <TagDetail>(oldPrimaryTag).State = EntityState.Modified;
                    }
                    var newPrimaryTag = this._dbContext.TagDetails.Where(t => t.ID == entity.PrimaryTagId).FirstOrDefault();
                    if (null != newPrimaryTag)
                    {
                        newPrimaryTag.IsAvailable = "N";
                        this._dbContext.Entry <TagDetail>(newPrimaryTag).State = EntityState.Modified;
                    }
                }
                if (secondaryTagId != entity.SecondaryTagId)
                {
                    var oldSecondaryTag = this._dbContext.TagDetails.Where(t => t.ID == primaryTagId).FirstOrDefault();
                    if (null != oldSecondaryTag)
                    {
                        oldSecondaryTag.IsAvailable = "Y";
                        this._dbContext.Entry <TagDetail>(oldSecondaryTag).State = EntityState.Modified;
                    }
                    var newSecondaryTag = this._dbContext.TagDetails.Where(t => t.ID == entity.PrimaryTagId).FirstOrDefault();
                    if (null != newSecondaryTag)
                    {
                        newSecondaryTag.IsAvailable = "N";
                        this._dbContext.Entry <TagDetail>(newSecondaryTag).State = EntityState.Modified;
                    }
                }
            }
            this._dbContext.SaveChanges();

            //Create user account when student gets registered.
            //create parent's account as well.
            if (isNew)
            {
                var securitySVC = new SecurityService(this._dbContext);
                var userModel   = new UserModel
                {
                    UserId        = entity.StudentId,
                    UserRole      = "Student",
                    Password      = "******",
                    Name          = entity.StudentName,
                    SchoolId      = entity.SchoolBranchId.Value,
                    ClassId       = entity.ClassId,
                    SectionId     = entity.SectionId,
                    EmailId       = entity.EmailId,
                    ContactNumber = entity.ParentMobileNo
                };
                securitySVC.Save(userModel);
                //Create account of parent as well
                userModel = new UserModel
                {
                    UserId        = entity.EmailId,
                    UserRole      = "Parent",
                    Password      = "******",
                    Name          = entity.ParentName,
                    SchoolId      = entity.SchoolBranchId.Value,
                    ClassId       = entity.ClassId,
                    SectionId     = entity.SectionId,
                    EmailId       = entity.EmailId,
                    ContactNumber = entity.ParentMobileNo
                };
                securitySVC.Save(userModel);
            }
            return(entity.MapAs <StudentDetail, StudentModel>());
        }