public async Task <ActionResult> Edit([Bind(Include = "ID,NOME,EMAIL,CPF,SENHA,TIPO_ACESSO,FOTO,DATA_CRIACAO,DATA_MODIFICACAO,ATIVO")] USUARIOS uSUARIOS,
                                              string ENDERECO, string TELEFONE, string PLANO, string NUMERO_PLANO, string CRM, string[] CLINICA, string[] ESPECIALIDADE, string[] HORARIO)
        {
            uSUARIOS.DATA_MODIFICACAO = DateTime.Now;
            uSUARIOS.EMAIL            = uSUARIOS.EMAIL.ToLower();
            uSUARIOS.NOME             = uSUARIOS.NOME.ToUpper();

            if (ModelState.IsValid)
            {
                db.Entry(uSUARIOS).State = EntityState.Modified;
                await db.SaveChangesAsync();

                if (uSUARIOS.TIPO_ACESSO == 3)
                {
                    var pac       = db.PACIENTES.FirstOrDefault(x => x.ID_USUARIO == uSUARIOS.ID);
                    var pACIENTES = db.PACIENTES.Find(uSUARIOS.PACIENTES.ToList()[0].ID);
                    pACIENTES.ENDERECO       = ENDERECO;
                    pACIENTES.NUMERO_PLANO   = NUMERO_PLANO;
                    pACIENTES.TELEFONE       = TELEFONE;
                    pACIENTES.ID_PLANO_SAUDE = int.Parse(PLANO);
                    await db.SaveChangesAsync();
                }

                if (uSUARIOS.TIPO_ACESSO == 2)
                {
                    var med    = db.MEDICOS.FirstOrDefault(x => x.ID_USUARIO == uSUARIOS.ID);
                    var mEDICO = db.MEDICOS.Find(uSUARIOS.MEDICOS.ToList()[0].ID);
                    mEDICO.CRM = CRM;

                    db.MEDICO_CLINICA.RemoveRange(med.MEDICO_CLINICA);
                    db.MEDICO_ESPECIALIDADE.RemoveRange(med.MEDICO_ESPECIALIDADE);
                    db.MEDICO_HORARIO_ATENDIMENTO.RemoveRange(med.MEDICO_HORARIO_ATENDIMENTO);

                    foreach (var item in CLINICA)
                    {
                        var mEDICO_CLINICA = new MEDICO_CLINICA();
                        mEDICO_CLINICA.ID_CLINICA = int.Parse(item);
                        mEDICO_CLINICA.ID_MEDICO  = uSUARIOS.MEDICOS.ToList()[0].ID;
                        db.MEDICO_CLINICA.Add(mEDICO_CLINICA);
                    }

                    foreach (var item in ESPECIALIDADE)
                    {
                        var mEDICO_ESPECIALIDADE = new MEDICO_ESPECIALIDADE();
                        mEDICO_ESPECIALIDADE.ID_ESPECIALIDADE = int.Parse(item);
                        mEDICO_ESPECIALIDADE.ID_MEDICO        = uSUARIOS.MEDICOS.ToList()[0].ID;
                        db.MEDICO_ESPECIALIDADE.Add(mEDICO_ESPECIALIDADE);
                    }

                    foreach (var item in HORARIO)
                    {
                        var mEDICO_HORARIO = new MEDICO_HORARIO_ATENDIMENTO();
                        mEDICO_HORARIO.ID_HORARIO_ATENDIMENTO = int.Parse(item);
                        mEDICO_HORARIO.ID_MEDICO = uSUARIOS.MEDICOS.ToList()[0].ID;
                        db.MEDICO_HORARIO_ATENDIMENTO.Add(mEDICO_HORARIO);
                    }

                    await db.SaveChangesAsync();
                }


                return(RedirectToAction("Index", new { mensagem = "Registro editado com sucesso!" }));
            }
            return(View(uSUARIOS));
        }
        public async Task <ActionResult> Create([Bind(Include = "ID,NOME,EMAIL,CPF,SENHA,TIPO_ACESSO,FOTO")] USUARIOS uSUARIOS,
                                                string ENDERECO, string TELEFONE, string PLANO, string NUMERO_PLANO, string CRM, string CLINICA, string ESPECIALIDADE, string HORARIO)
        {
            try
            {
                uSUARIOS.DATA_CRIACAO     = DateTime.Now;
                uSUARIOS.DATA_MODIFICACAO = DateTime.Now;
                uSUARIOS.ATIVO            = true;
                uSUARIOS.SENHA            = new Crypto.Crypto().Encrypt("123");
                uSUARIOS.FOTO             = ImageToByteArray(Resources.user);
                uSUARIOS.EMAIL            = uSUARIOS.EMAIL.ToLower();
                uSUARIOS.NOME             = uSUARIOS.NOME.ToUpper();

                if (ModelState.IsValid)
                {
                    db.USUARIOS.Add(uSUARIOS);
                    await db.SaveChangesAsync();

                    if (uSUARIOS.TIPO_ACESSO == 3)
                    {
                        PACIENTES pACIENTES = new PACIENTES();
                        pACIENTES.ENDERECO       = ENDERECO;
                        pACIENTES.ID_USUARIO     = uSUARIOS.ID;
                        pACIENTES.NUMERO_PLANO   = NUMERO_PLANO;
                        pACIENTES.TELEFONE       = TELEFONE;
                        pACIENTES.ID_PLANO_SAUDE = int.Parse(PLANO);
                        db.PACIENTES.Add(pACIENTES);
                        await db.SaveChangesAsync();
                    }

                    if (uSUARIOS.TIPO_ACESSO == 2)
                    {
                        MEDICOS mEDICOS = new MEDICOS();
                        mEDICOS.CRM        = CRM;
                        mEDICOS.ID_USUARIO = uSUARIOS.ID;
                        db.MEDICOS.Add(mEDICOS);
                        await db.SaveChangesAsync();

                        MEDICO_CLINICA mc = new MEDICO_CLINICA();
                        mc.ID_CLINICA = int.Parse(CLINICA);
                        mc.ID_MEDICO  = mEDICOS.ID;
                        db.MEDICO_CLINICA.Add(mc);

                        MEDICO_ESPECIALIDADE mc2 = new MEDICO_ESPECIALIDADE();
                        mc2.ID_ESPECIALIDADE = int.Parse(ESPECIALIDADE);
                        mc2.ID_MEDICO        = mEDICOS.ID;
                        db.MEDICO_ESPECIALIDADE.Add(mc2);

                        MEDICO_HORARIO_ATENDIMENTO mc3 = new MEDICO_HORARIO_ATENDIMENTO();
                        mc3.ID_HORARIO_ATENDIMENTO = int.Parse(HORARIO);
                        mc3.ID_MEDICO = mEDICOS.ID;
                        db.MEDICO_HORARIO_ATENDIMENTO.Add(mc3);

                        await db.SaveChangesAsync();
                    }

                    return(RedirectToAction("Index", "USUARIOS", new { mensagem = "Registro criado com sucesso!" }));
                }
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                      eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                          ve.PropertyName, ve.ErrorMessage);
                    }
                }
                throw;
            }


            return(View(uSUARIOS));
        }