private PendingDispensary AutoMapModelToEntity(PendingDispensaryModel pendingDispensary)
        {
            var entity = new PendingDispensary()
            {
                Id                      = pendingDispensary.Id,
                AddressId               = pendingDispensary.AddressId,
                Email                   = pendingDispensary.Email,
                Name                    = pendingDispensary.Name,
                PhoneNumber             = pendingDispensary.PhoneNumber,
                PendingDispensaryStatus = PendingDispensaryStatus.Initilized,
                Type                    = pendingDispensary.Type,
                Website                 = pendingDispensary.Website,
                Password                = UserManager.PasswordHasher.HashPassword(pendingDispensary.Password)
            };

            if (pendingDispensary.Address != null)
            {
                entity.Address = new Address()
                {
                    Address1 = pendingDispensary.Address.Address1,
                    Address2 = pendingDispensary.Address.Address2,
                    City     = pendingDispensary.Address.City,
                    State    = pendingDispensary.Address.State,
                    Zip      = pendingDispensary.Address.Zip,
                    Country  = pendingDispensary.Address.Country
                };
            }
            return(entity);
        }
        private void UpadteDispensary(PendingDispensaryModel pendingDispensary)
        {
            var entity = HGContext.PendingDispensaries.SingleOrDefault(d => d.Id == pendingDispensary.Id);


            entity.Id                      = pendingDispensary.Id;
            entity.AddressId               = pendingDispensary.AddressId;
            entity.Email                   = pendingDispensary.Email;
            entity.Name                    = pendingDispensary.Name;
            entity.PhoneNumber             = pendingDispensary.PhoneNumber;
            entity.PendingDispensaryStatus = PendingDispensaryStatus.WaitingForApprove;
            entity.Type                    = pendingDispensary.Type;
            entity.Website                 = pendingDispensary.Website;
            HGContext.Entry(entity).State  = EntityState.Modified;

            var address = HGContext.Addresses.SingleOrDefault(a => a.Id == pendingDispensary.Id);

            if (address != null)
            {
                address.Address1 = pendingDispensary.Address.Address1;
                address.Address2 = pendingDispensary.Address.Address2;
                address.City     = pendingDispensary.Address.City;
                address.State    = pendingDispensary.Address.State;
                address.Zip      = pendingDispensary.Address.Zip;
                address.Country  = pendingDispensary.Address.Country;
                HGContext.Entry(address).State = EntityState.Modified;
            }

            HGContext.SaveChanges();
        }
        public async Task <HttpResponseMessage> UpdatePendingDispensaryLicense([FromBody] PendingDispensaryModel pendingDispensary)
        {
            var dispensary = await HGContext.PendingDispensaries.FindAsync(pendingDispensary.Id);

            dispensary.IdNumber               = pendingDispensary.IdNumber;
            dispensary.ExperationDate         = pendingDispensary.ExperationDate;
            HGContext.Entry(dispensary).State = EntityState.Modified;
            await HGContext.SaveChangesAsync();

            return(Request.CreateResponse(HttpStatusCode.OK));
        }
        public async Task <HttpResponseMessage> UpdatePendingDispensaryDocuments([FromBody] PendingDispensaryModel pendingDispensary)
        {
            var dispensary = await HGContext.PendingDispensaries.FindAsync(pendingDispensary.Id);

            dispensary.DriversLicenseImageUrl  = pendingDispensary.DriversLicenseImageUrl;
            dispensary.RecommendationImageUrl  = pendingDispensary.RecommendationImageUrl;
            dispensary.PendingDispensaryStatus = PendingDispensaryStatus.WaitingForApprove;
            HGContext.Entry(dispensary).State  = EntityState.Modified;
            await HGContext.SaveChangesAsync();

            await SendVerifyEmaiForSuperAdminAccounts(dispensary);

            return(Request.CreateResponse(HttpStatusCode.OK));
        }
        public async Task <HttpResponseMessage> AddPendingDispensary([FromBody] PendingDispensaryModel pendingDispensary)
        {
            bool addressFlag = false;

            if (!ModelState.IsValid)
            {
                var errors     = ModelState.Keys.SelectMany(k => ModelState[k].Errors).Select(m => m.ErrorMessage).ToArray();
                var addressKey = ModelState.Where(x => x.Value.Errors.Count > 0 && x.Key.Contains("AddressId")).Select(x => new { x.Key, x.Value.Errors }).FirstOrDefault();
                if (pendingDispensary.Id != 0)
                {
                    bool flag = false;
                    foreach (var error in errors)
                    {
                        if (!error.ToLower().Contains("password"))
                        {
                            flag = true;
                        }
                    }
                    if (!flag)
                    {
                        UpadteDispensary(pendingDispensary);
                        return(Request.CreateResponse(HttpStatusCode.OK));
                    }
                }

                if (errors.Length <= 1 && addressKey != null)
                {
                    addressFlag = true;
                }
                else
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, errors));
                }
            }


            if (await HGContext.PendingDispensaries.AnyAsync(p => p.Email.ToLower() == pendingDispensary.Email.ToLower()) || await HGContext.Users.AnyAsync(p => p.Email.ToLower() == pendingDispensary.Email.ToLower()) ||
                await HGContext.Dispensaries.AnyAsync(p => p.EmailAddress.ToLower() == pendingDispensary.Email.ToLower()))
            {
                return(Request.CreateResponse(HttpStatusCode.BadRequest, new[] { pendingDispensary.Email + " is already exist." }));
            }

            if (addressFlag)
            {
                /*Add Data in Address Table*/

                var Address = new Address()
                {
                    Name      = pendingDispensary.Address.Name,
                    Address1  = pendingDispensary.Address.Address1,
                    Address2  = pendingDispensary.Address.Address2,
                    City      = pendingDispensary.Address.City,
                    State     = pendingDispensary.Address.State,
                    Zip       = pendingDispensary.Address.Zip,
                    Country   = pendingDispensary.Address.Country,
                    CreatedAt = DateTimeOffset.UtcNow,
                    UpdatedAt = DateTimeOffset.UtcNow
                };

                HGContext.Addresses.Add(Address);
                await HGContext.SaveChangesAsync();

                pendingDispensary.AddressId = Address.Id;
            }


            //TODO: Replace these line using automapper
            var entity = AutoMapModelToEntity(pendingDispensary);


            HGContext.PendingDispensaries.Add(entity);
            await HGContext.SaveChangesAsync();

            //await SendVerifyEmaiForSuperAdminAccounts(entity);
            string webUrl = ConfigurationManager.AppSettings["webclientURL"];

            await
            SendVerificationEmail(entity.Email,
                                  "Your application has been submitted, please login <a href='" + webUrl + "/dispensary/login'>here</a> and complete your data to active your account", "Dispensary registeration");

            return(Request.CreateResponse(HttpStatusCode.OK, entity));
        }