public async Task <ActionResult> EditCitizen(ViewModels.AddCitizen updateCitizen)
        {
            if (updateCitizen != null)
            {
                var currentUser = await db.Users.Where(x => x.UserName == User.Identity.Name)
                                  .SingleOrDefaultAsync();

                if (currentUser != null)
                {
                    var RT = await db.RT.FindAsync(updateCitizen.RT);

                    var RW = await db.RW.FindAsync(updateCitizen.RW);

                    var job = await db.Jobs.FindAsync(updateCitizen.Job);

                    var editCitizen = new Models.Citizens
                    {
                        NIK                = updateCitizen.NIK,
                        FullName           = updateCitizen.FullName,
                        RegistrationStatus = updateCitizen.RegistrationStatus,
                        IsBanned           = true,
                        Avatar             = updateCitizen.Avatar,
                        Address            = updateCitizen.Address,
                        RT            = RT,
                        RW            = RW,
                        DOB           = updateCitizen.DOB,
                        Institution   = updateCitizen.Institution,
                        PhoneNumber   = updateCitizen.PhoneNumber,
                        MaritalStatus = updateCitizen.MaritalStatus,
                        Religion      = updateCitizen.Religion,
                        Citizenship   = updateCitizen.Citizenship,
                        Descriptions  = updateCitizen.Descriptions,
                        Job           = job,
                        Gender        = updateCitizen.Gender,
                        Departement   = updateCitizen.Roles,
                        UpdatedBy     = currentUser,
                        Updated       = DateTime.UtcNow
                    };
                    try
                    {
                        db.Entry(editCitizen).State = EntityState.Modified;
                        var result = await db.SaveChangesAsync();

                        if (result > 0)
                        {
                            return(RedirectToAction("Citizen", "VillageHead"));
                        }
                    }
                    catch (Exception ex)
                    {
                        Trace.TraceError(ex.Message);
                        Trace.TraceError(ex.StackTrace);
                    }
                }
            }
            return(View("Error"));
        }
        public async Task <ActionResult> Confirm(ViewModels.AddCitizen newCitizen)
        {
            if (newCitizen != null)
            {
                var RT = await db.RT.FindAsync(newCitizen.RT);

                var RW = await db.RW.FindAsync(newCitizen.RW);

                var job = await db.Jobs.FindAsync(newCitizen.Job);

                var currentCitizen = await UserManager.FindByEmailAsync(newCitizen.Email);

                var addCitizen = await db.Citizens.FindAsync(currentCitizen.Id);

                if (addCitizen != null)
                {
                    addCitizen.NIK                = newCitizen.NIK;
                    addCitizen.Job                = job;
                    addCitizen.DOB                = newCitizen.DOB;
                    addCitizen.Religion           = newCitizen.Religion;
                    addCitizen.Departement        = newCitizen.Roles;
                    addCitizen.RegistrationStatus = newCitizen.RegistrationStatus;
                    addCitizen.RT             = RT;
                    addCitizen.RW             = RW;
                    addCitizen.MaritalStatus  = newCitizen.MaritalStatus;
                    addCitizen.Citizenship    = newCitizen.Citizenship;
                    addCitizen.Gender         = newCitizen.Gender;
                    addCitizen.Institution    = newCitizen.Institution;
                    addCitizen.IsBanned       = false;
                    addCitizen.Address        = newCitizen.Address;
                    addCitizen.EmailConfirmed = true;
                    addCitizen.Descriptions   = newCitizen.Descriptions;
                    addCitizen.FullName       = newCitizen.FullName;
                    addCitizen.PhoneNumber    = newCitizen.PhoneNumber;
                }
                db.Entry(addCitizen).State = EntityState.Modified;
                var result = await db.SaveChangesAsync();

                if (result > 0)
                {
                    return(RedirectToAction("Login", "Account"));
                }
            }
            return(View("Error"));
        }
        public async Task <ActionResult> AddCitizen(ViewModels.AddCitizen newCitizen)
        {
            var currentUser = await db.Users.Where(x => x.UserName == User.Identity.Name)
                              .SingleOrDefaultAsync();

            if (currentUser != null)
            {
                try
                {
                    var searchUser = await db.Users.Where(x => x.Email == newCitizen.Email).SingleOrDefaultAsync();

                    if (searchUser == null)
                    {
                        var citizen = new Citizens
                        {
                            Id          = Guid.NewGuid().ToString(),
                            UserName    = newCitizen.NIK,
                            Email       = newCitizen.Email,
                            FullName    = newCitizen.FullName,
                            PhoneNumber = newCitizen.PhoneNumber
                        };
                        var resultUserManager = await UserManager.CreateAsync(citizen, newCitizen.Password);

                        var currentCitizen = await UserManager.FindByEmailAsync(newCitizen.Email);

                        var addToRoleResult = await UserManager.AddToRoleAsync(currentCitizen.Id, "Citizen");

                        if (newCitizen.Roles == Departement.Admin)
                        {
                            addToRoleResult = await UserManager.AddToRoleAsync(currentCitizen.Id, "Administrator");
                        }
                        else if (newCitizen.Roles == Departement.VillageHead)
                        {
                            addToRoleResult = await UserManager.AddToRoleAsync(currentCitizen.Id, "VillageHead");
                        }
                        if (resultUserManager.Succeeded && addToRoleResult.Succeeded)
                        {
                            var RT = await db.RT.FindAsync(newCitizen.RT);

                            var RW = await db.RW.FindAsync(newCitizen.RW);

                            var job = await db.Jobs.FindAsync(newCitizen.Job);

                            var addCitizen = await db.Citizens.FindAsync(currentCitizen.Id);

                            if (addCitizen != null)
                            {
                                addCitizen.NIK                = newCitizen.NIK;
                                addCitizen.Job                = job;
                                addCitizen.DOB                = newCitizen.DOB;
                                addCitizen.Religion           = newCitizen.Religion;
                                addCitizen.RegisteredBy       = currentUser;
                                addCitizen.Departement        = newCitizen.Roles;
                                addCitizen.RegistrationStatus = newCitizen.RegistrationStatus;
                                addCitizen.RT             = RT;
                                addCitizen.RW             = RW;
                                addCitizen.MaritalStatus  = newCitizen.MaritalStatus;
                                addCitizen.Citizenship    = newCitizen.Citizenship;
                                addCitizen.Gender         = newCitizen.Gender;
                                addCitizen.Institution    = newCitizen.Institution;
                                addCitizen.IsBanned       = false;
                                addCitizen.Address        = newCitizen.Address;
                                addCitizen.EmailConfirmed = false;
                                addCitizen.Descriptions   = newCitizen.Descriptions;
                            }
                            db.Entry(addCitizen).State = EntityState.Modified;
                            var result = await db.SaveChangesAsync();

                            if (result > 0)
                            {
                                return(RedirectToAction("Citizen", "VillageHead"));
                            }
                        }
                    }
                }
                catch (DbEntityValidationException dbEx)
                {
                    foreach (var validationErrors in dbEx.EntityValidationErrors)
                    {
                        foreach (var validationError in validationErrors.ValidationErrors)
                        {
                            System.Console.WriteLine("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Trace.TraceError(ex.Message);
                    Trace.TraceError(ex.StackTrace);
                }
            }
            return(View("Error"));
        }