/// <summary>
 /// Update the ChannelPartner Record
 /// </summary>
 public int UpdateChannelPartner(ChannelPartner ChannelPartnerData, ChannelPartner ChannelPartner, List <IFormFile> files)
 {
     ChannelPartner.FirstName        = ChannelPartnerData.FirstName;
     ChannelPartner.LastName         = ChannelPartnerData.LastName;
     ChannelPartner.Email            = ChannelPartnerData.Email;
     ChannelPartner.ContactNo        = ChannelPartnerData.ContactNo;
     ChannelPartner.AlternateContact = ChannelPartnerData.AlternateContact;
     ChannelPartner.Gender           = ChannelPartnerData.Gender;
     if (files?.Count > 0)
     {
         ChannelPartner.ProfilePictureUrl = _fileService.SaveFile(files, ChannelPartnerConstant.ImagePath_ChannelPartner);
     }
     ChannelPartner.DOB           = ChannelPartnerData.DOB;
     ChannelPartner.Address       = ChannelPartnerData.Address;
     ChannelPartner.StateId       = ChannelPartnerData.StateId;
     ChannelPartner.CityId        = ChannelPartnerData.StateId;
     ChannelPartner.Pincode       = ChannelPartnerData.Pincode;
     ChannelPartner.ApproveStatus = ChannelPartnerData.ApproveStatus;
     ChannelPartner.ApprovalDate  = ChannelPartnerData.ApprovalDate;
     ChannelPartner.Description   = ChannelPartnerData.Description;
     ChannelPartner.ReferCode     = ChannelPartnerData.ReferCode;
     ChannelPartner.UpdatedDate   = DateTime.Now;
     ChannelPartner.UpdatedBy     = 0;
     _channelPartnerManagementContext.ChannelPartner.Update(ChannelPartner);
     _channelPartnerManagementContext.SaveChanges();
     return(ChannelPartner.Id);
 }
        public IActionResult EditChannelPartner([FromForm] CommonRegistrationModel model)
        {
            ResponseModel responseModel = new ResponseModel();

            if (ModelState.IsValid)
            {
                ChannelPartner ChannelPartnerData = JsonConvert.DeserializeObject <ChannelPartner>(model.Data.ToString());
                if (ChannelPartnerData != null)
                {
                    if (_channelPartnerManagementContext.Users.Count(x => x.Email == ChannelPartnerData.Email && x.EntityId != ChannelPartnerData.Id) > 0)
                    {
                        responseModel.Message = ChannelPartnerConstantString.Validation_EmailExist.ToString();
                        return(StatusCode((int)HttpStatusCode.Conflict, responseModel));
                    }
                    else
                    {
                        List <IFormFile> files = new List <IFormFile>();
                        files.Add(model.File);
                        var singleChannelPartner = _channelPartnerManagementContext.ChannelPartner.Where(x => x.Id == ChannelPartnerData.Id).AsNoTracking().FirstOrDefault();
                        int channelPartnerId     = _channelPartnerService.UpdateChannelPartner(ChannelPartnerData, singleChannelPartner, files);
                        responseModel.Message = ChannelPartnerConstantString.Edit_ChannelPartner_Success.ToString();
                        return(StatusCode((int)HttpStatusCode.OK, responseModel));
                    }
                }
                return(StatusCode((int)HttpStatusCode.BadRequest));
            }
            else
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, ModelState));
            }
        }
        /// <summary>
        /// Save the ChannelPartner Record
        /// </summary>
        public (int ChannelPartnerId, string UniqueNo) SaveChannelPartner(ChannelPartner ChannelPartnerData, List <IFormFile> files)
        {
            ChannelPartner ChannelPartner = new ChannelPartner();

            ChannelPartner.FirstName        = ChannelPartnerData.FirstName;
            ChannelPartner.LastName         = ChannelPartnerData.LastName;
            ChannelPartner.Email            = ChannelPartnerData.Email;
            ChannelPartner.ContactNo        = ChannelPartnerData.ContactNo;
            ChannelPartner.AlternateContact = ChannelPartnerData.AlternateContact;
            ChannelPartner.Gender           = ChannelPartnerData.Gender;
            if (files?.Count > 0)
            {
                ChannelPartner.ProfilePictureUrl = _fileService.SaveFile(files, ChannelPartnerConstant.ImagePath_ChannelPartner);
            }
            ChannelPartner.DOB           = ChannelPartnerData.DOB;
            ChannelPartner.Address       = ChannelPartnerData.Address;
            ChannelPartner.StateId       = ChannelPartnerData.StateId;
            ChannelPartner.CityId        = ChannelPartnerData.StateId;
            ChannelPartner.Pincode       = ChannelPartnerData.Pincode;
            ChannelPartner.ApproveStatus = ChannelPartnerData.ApproveStatus;
            ChannelPartner.ApprovalDate  = ChannelPartnerData.ApprovalDate;
            ChannelPartner.Description   = ChannelPartnerData.Description;
            ChannelPartner.ReferCode     = GenerateReferecode();
            var previousUnique = _channelPartnerManagementContext.ChannelPartner.OrderByDescending(x => x.Id).Select(x => x.UniqueNo).FirstOrDefault();

            ChannelPartner.UniqueNo = GenerateUniqueNo(previousUnique, ChannelPartnerData.FirstName, ChannelPartnerData.Email);
            ChannelPartner.RegistrationFromTypeId = ChannelPartnerData.RegistrationFromTypeId;
            ChannelPartner.RegistrationByTypeId   = ChannelPartnerData.RegistrationByTypeId;
            ChannelPartner.CreatedDate            = DateTime.Now;
            ChannelPartner.CreatedBy = 0;
            ChannelPartner.Active    = true;
            ChannelPartner.Deleted   = false;
            _channelPartnerManagementContext.ChannelPartner.Add(ChannelPartner);
            _channelPartnerManagementContext.SaveChanges();

            // Save Channel Partner Mapping
            ChannelPartnerMapping channelPartnerMapping = new ChannelPartnerMapping();

            channelPartnerMapping.ChannelPartnerId = ChannelPartner.Id;
            channelPartnerMapping.LevelId          = 0;
            channelPartnerMapping.CurrentCount     = 0;
            channelPartnerMapping.TotalCount       = 0;
            if (!string.IsNullOrEmpty(ChannelPartnerData.ReferCode))
            {
                var channelPartners = _channelPartnerManagementContext.ChannelPartner.Where(x => x.ReferCode == ChannelPartnerData.ReferCode);
                if (channelPartners.Any())
                {
                    channelPartnerMapping.ParentId = channelPartners.FirstOrDefault().Id;
                }
                else
                {
                    channelPartnerMapping.ParentId = 0;
                }
            }
            _channelPartnerManagementContext.ChannelPartnerMapping.Add(channelPartnerMapping);
            _channelPartnerManagementContext.SaveChanges();

            return(ChannelPartner.Id, ChannelPartner.UniqueNo);
        }
        public async Task <IActionResult> Register([FromForm] CommonRegistrationModel model)
        {
            ResponseModel responseModel = new ResponseModel();

            if (ModelState.IsValid)
            {
                ChannelPartner ChannelPartnerData = JsonConvert.DeserializeObject <ChannelPartner>(model.Data.ToString());
                if (ChannelPartnerData != null)
                {
                    var singleUser = _channelPartnerManagementContext.Users.Where(x => x.Email == ChannelPartnerData.Email).AsNoTracking();
                    if (!singleUser.Any())
                    {
                        List <IFormFile> files = new List <IFormFile>();
                        files.Add(model.File);
                        (int channelPartnerId, string uniqueNo) = _channelPartnerService.SaveChannelPartner(ChannelPartnerData, files);
                        string UserName = ChannelPartnerData.FirstName + uniqueNo;
                        var    user     = _channelPartnerService.SaveUserData(channelPartnerId, Module.ChannelPartner, UserName, ChannelPartnerData.Email);
                        await Task.Run(() => _channelPartnerService.SendVerificationLinkEmail(ChannelPartnerData.Email, user.Password, Module.ChannelPartner.ToString()));

                        responseModel.Message = ChannelPartnerConstantString.Register_ChannelPartner_Success.ToString();
                        responseModel.Data    = _channelPartnerModelFactory.PrepareUserDetail(user);
                        return(StatusCode((int)HttpStatusCode.OK, responseModel));
                    }
                    else
                    {
                        responseModel.Message = ChannelPartnerConstantString.Validation_EmailExist.ToString();
                        return(StatusCode((int)HttpStatusCode.Conflict, responseModel));
                    }
                }
                return(StatusCode((int)HttpStatusCode.BadRequest));
            }
            else
            {
                return(StatusCode((int)HttpStatusCode.BadRequest, ModelState));
            }
        }