public RegistrarUsuarioRestauranteResponse RegistrarUsuarioRestaurante(RegistrarUsuarioRestauranteRequest request)
        {
            RegistrarUsuarioRestauranteResponse response = new RegistrarUsuarioRestauranteResponse();

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(ServicioCommon.Parametros.URLServicio);
                HttpContent httpContent = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8);
                httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                var responseTask = client.PostAsync("api/usuario", httpContent);
                responseTask.Wait();
                var result = responseTask.Result;
                if (result.IsSuccessStatusCode)
                {
                    var usuarioResponse = result.Content.ReadAsStringAsync().Result;
                    response = JsonConvert.DeserializeObject <RegistrarUsuarioRestauranteResponse>(usuarioResponse);
                }
            }

            return(response);
        }
        public ActionResult MisDatos(UsuarioRestauranteModel model, FormCollection formCollection)
        {
            string vRutaParcial = "/File/Foto/";
            string archivo      = "";
            string vRuta;
            string vExtension;



            model.Distritos        = new List <SelectListItemCustom>();
            model.EspecialidadTipo = new List <SelectListItemCustom>();
            model.TipoCuenta       = new List <SelectListItemCustom>();

            model.MensajeSucces = string.Empty;



            ProxyApiComun   api        = new ProxyApiComun();
            ProxyApiUsuario apiUsuario = new ProxyApiUsuario();


            List <Telefono> listTelefonoRegistrar = new List <Telefono>();

            try
            {
                SeguridadMVC.Seguridad.SessionWrapper objSesion = new SeguridadMVC.Seguridad.SessionWrapper();



                ObtenerUsuarioResponse usuarioResponse = apiUsuario.ObtenerUsuario(objSesion.Usuario.Idusuario);


                model.usua_email = usuarioResponse.Usuario.usua_email;


                if (usuarioResponse.Restaurante != null)
                {
                    model.rest_rz  = usuarioResponse.Restaurante.rest_rz;
                    model.rest_ruc = usuarioResponse.Restaurante.rest_ruc;
                }


                ObtenerComunResponse responseComun = api.ObtenerComun();


                foreach (Distrito item in responseComun.Distritos)
                {
                    model.Distritos.Add(new SelectListItemCustom {
                        Text = item.dist_nombre, Value = item.dist_id.ToString()
                    });
                }

                foreach (EspecialidadTipo itemEspe in responseComun.EspecialidadesTipo)
                {
                    model.EspecialidadTipo.Add(new SelectListItemCustom {
                        Text = itemEspe.esti_descrip, Value = itemEspe.esti_id.ToString()
                    });
                }

                foreach (TipoCuenta itemCuenta in responseComun.TipoCuentas)
                {
                    model.TipoCuenta.Add(new SelectListItemCustom {
                        Text = itemCuenta.tico_descrip, Value = itemCuenta.tico_id.ToString()
                    });
                }


                model.Telefonos = JsonConvert.SerializeObject(listTelefonoRegistrar);

                ObtenerTipoTelefonoResponse responseTipoTelefono = api.ObtenerTipoTelefonos();


                model.ListTipoTelefono = new List <SelectListItemCustom>();
                model.ListTipoTelefono.Add(new SelectListItemCustom {
                    Text = "Seleccionar", Value = "0", Selected = true
                });

                foreach (TipoTelefono item in responseTipoTelefono.TipoTelefonos)
                {
                    model.ListTipoTelefono.Add(new SelectListItemCustom {
                        Text = item.DescripcionTelefono, Value = item.CodigoTelefono.ToString()
                    });
                }


                if (formCollection[$"slCodigoContacto"] != null && formCollection[$"txtCodigoContacto"] != null)
                {
                    string codigoTipoTelefno = "";
                    string numeroTelefno     = "";

                    codigoTipoTelefno = formCollection["slCodigoContacto"].ToString();
                    numeroTelefno     = formCollection["txtCodigoContacto"].ToString();

                    listTelefonoRegistrar.Add(new Telefono()
                    {
                        CodigoTipoTelefono = codigoTipoTelefno.Trim() == string.Empty ? 0 : Convert.ToInt32(codigoTipoTelefno),
                        NumeroTelefono     = numeroTelefno,
                        CodigoUsuario      = 0
                    });
                }

                int contador = 1;

                for (int i = 0; i < formCollection.Count; i++)
                {
                    if (formCollection[$"slCodigoContacto{contador}"] != null &&
                        formCollection[$"txtCodigoContacto{contador}"] != null)
                    {
                        string codigoTipoTelefno = "";
                        string numeroTelefno     = "";
                        codigoTipoTelefno = formCollection[$"slCodigoContacto{contador}"].ToString();
                        numeroTelefno     = formCollection[$"txtCodigoContacto{contador}"].ToString();


                        listTelefonoRegistrar.Add(new Telefono()
                        {
                            CodigoTipoTelefono = codigoTipoTelefno.Trim() == string.Empty ? 0 : Convert.ToInt32(codigoTipoTelefno),
                            NumeroTelefono     = numeroTelefno,
                            CodigoUsuario      = 0
                        });
                    }

                    contador++;
                }

                model.Telefonos = JsonConvert.SerializeObject(listTelefonoRegistrar);


                model.usua_id = objSesion.Usuario.Idusuario;

                // TODO: Add insert logic here

                if (!ModelState.IsValid)
                {
                    return(View(model));
                }
                else
                {
                    if (model.uploadFile != null)
                    {
                        if (model.uploadFile.ContentLength > 5242880)
                        {
                            ProcesoResponse resonseStatus = new ProcesoResponse();
                            resonseStatus.estado  = -1;
                            resonseStatus.mensaje = "No debe exceder los 5MB";



                            return(RedirectToAction("NuevoColaborador", new { }));
                        }
                    }



                    if (model.uploadFile != null)
                    {
                        vExtension   = Path.GetExtension(model.uploadFile.FileName);
                        archivo      = (DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + model.rest_ruc).ToLower() + vExtension;
                        vRutaParcial = vRutaParcial + archivo;
                        vRuta        = System.Web.Hosting.HostingEnvironment.MapPath("~" + vRutaParcial);


                        model.uploadFile.SaveAs(vRuta);



                        model.usua_rutaimagen = vRutaParcial;
                    }



                    RegistrarUsuarioRestauranteRequest request = new RegistrarUsuarioRestauranteRequest();
                    request.Usuario                 = new Usuario();
                    request.Usuario.usua_id         = model.usua_id;
                    request.Usuario.dist_id         = model.dist_id;
                    request.Usuario.usua_refedirec  = model.usua_refedirec;
                    request.Usuario.usua_direc      = model.usua_direc;
                    request.Usuario.usua_rutaiamgen = model.usua_rutaimagen;


                    request.Restaurante                   = new Restaurante();
                    request.Restaurante.usua_id           = model.usua_id;
                    request.Restaurante.rest_descrip      = model.rest_descrip;
                    request.Restaurante.rest_delivery     = model.rest_delivery;
                    request.Restaurante.rest_reservalocal = model.rest_reservalocal;
                    request.Restaurante.esti_id           = model.esti_id;
                    request.Restaurante.rest_nomcomer     = model.rest_nomcomer;
                    request.Restaurante.uscta_numero      = model.uscta_numero;
                    request.Restaurante.uscta_titular     = model.uscta_titular;
                    request.Restaurante.ticta_id          = model.ticta_id;

                    request.Telefonos = listTelefonoRegistrar;

                    var objRespuesta = apiUsuario.ActualizarUsuarioRestaurante(request);


                    if (objRespuesta.status.estado == 0)
                    {
                        model.MensajeSucces = "Actualizado";
                        return(View(model));
                    }
                    else
                    {
                        ModelState.AddModelError("MensajeGeneral", objRespuesta.status.mensaje);
                        return(View(model));
                    }



                    //if (objRespuesta.status.estado == 0)
                    //    {



                    //        return View("Correcto", model);
                    //    }
                    //    else
                    //    {
                    //        ModelState.AddModelError("MensajeGeneral", objRespuesta.status.mensaje);

                    //        return View(model);
                    //    }
                }
            }
            catch (Exception err)
            {
                ModelState.AddModelError("MensajeGeneral", err);

                return(View(model));
            }
        }
        public ActionResult Create(UsuarioRestaurante view, FormCollection formCollection)
        {
            UsuarioRestaurante model = view;
            ProxyApiComun      api   = new ProxyApiComun();
            List <Telefono>    listTelefonoRegistrar = new List <Telefono>();

            try
            {
                model.Telefonos = JsonConvert.SerializeObject(listTelefonoRegistrar);

                ObtenerTipoTelefonoResponse responseTipoTelefono = api.ObtenerTipoTelefonos();


                model.ListTipoTelefono = new List <SelectListItemCustom>();
                model.ListTipoTelefono.Add(new SelectListItemCustom {
                    Text = "Seleccionar", Value = "0", Selected = true
                });

                foreach (TipoTelefono item in responseTipoTelefono.TipoTelefonos)
                {
                    model.ListTipoTelefono.Add(new SelectListItemCustom {
                        Text = item.DescripcionTelefono, Value = item.CodigoTelefono.ToString()
                    });
                }


                if (formCollection[$"slCodigoContacto"] != null && formCollection[$"txtCodigoContacto"] != null)
                {
                    string codigoTipoTelefno = "";
                    string numeroTelefno     = "";

                    codigoTipoTelefno = formCollection["slCodigoContacto"].ToString();
                    numeroTelefno     = formCollection["txtCodigoContacto"].ToString();

                    listTelefonoRegistrar.Add(new Telefono()
                    {
                        CodigoTipoTelefono = codigoTipoTelefno.Trim() == string.Empty ? 0 : Convert.ToInt32(codigoTipoTelefno),
                        NumeroTelefono     = numeroTelefno,
                        CodigoUsuario      = 0
                    });
                }

                int contador = 1;

                for (int i = 0; i < formCollection.Count; i++)
                {
                    if (formCollection[$"slCodigoContacto{contador}"] != null &&
                        formCollection[$"txtCodigoContacto{contador}"] != null)
                    {
                        string codigoTipoTelefno = "";
                        string numeroTelefno     = "";
                        codigoTipoTelefno = formCollection[$"slCodigoContacto{contador}"].ToString();
                        numeroTelefno     = formCollection[$"txtCodigoContacto{contador}"].ToString();


                        listTelefonoRegistrar.Add(new Telefono()
                        {
                            CodigoTipoTelefono = codigoTipoTelefno.Trim() == string.Empty?0: Convert.ToInt32(codigoTipoTelefno),
                            NumeroTelefono     = numeroTelefno,
                            CodigoUsuario      = 0
                        });
                    }

                    contador++;
                }

                model.Telefonos = JsonConvert.SerializeObject(listTelefonoRegistrar);



                // TODO: Add insert logic here

                if (!ModelState.IsValid)
                {
                    ModelState.AddModelError("MensajeGeneral", "Ingrese los campos obligatorio");
                    return(View(model));
                }
                else
                {
                    if (!this.IsCaptchaValid(""))
                    {
                        ModelState.AddModelError("MensajeGeneral", "Invalid Captcha");
                        return(View(model));
                    }
                    else
                    {
                        RegistrarUsuarioRestauranteRequest reqeust = new RegistrarUsuarioRestauranteRequest();

                        reqeust.Usuario     = model.Usuario;
                        reqeust.Restaurante = model.Restaurante;
                        reqeust.Telefonos   = listTelefonoRegistrar;

                        RegistrarUsuarioRestauranteResponse objRespuesta = new ProxyApiUsuario().RegistrarUsuarioRestaurante(reqeust);

                        if (objRespuesta.status.estado == 0)
                        {
                            // enviar a cola mensajes para envio de correo

                            string link           = "http://localhost:59052/Usuario/ActivarCuenta?CodigoUsuario=" + objRespuesta.CodigoUsuario;
                            string DetalleMensaje = " Para activar la cuenta ingrese al siguiente enlace ";


                            CorreoAltaUsuario objCorreoAltaUsuario = new CorreoAltaUsuario();


                            //Mailer CorreoSolicitud = new Mailer();
                            //List<String> listCorreso = new List<string>();
                            //listCorreso.Add(model.Usuario.usua_email);
                            //CorreoSolicitud.Notificacion.CorreosPara = listCorreso;
                            //CorreoSolicitud.Notificacion.ConCopia = "";
                            //CorreoSolicitud.Notificacion.Asunto = " Activar cuenta";
                            //CorreoSolicitud.Notificacion.Cuerpo = new FormatoCorreo().BodyMensaje(model.Usuario.usua_nomb, DetalleMensaje, link);
                            //CorreoSolicitud.Enviar();

                            objCorreoAltaUsuario.CodigoUsuario = model.Usuario.usua_id;
                            objCorreoAltaUsuario.CorreoUsuario = model.Usuario.usua_email;
                            objCorreoAltaUsuario.Asunto        = " Activar cuenta";
                            objCorreoAltaUsuario.Mensaje       = new FormatoCorreo().BodyMensaje(model.Usuario.usua_nomb, DetalleMensaje, link);


                            this.CrearCola();
                            this.EnviarMensajeCola(objCorreoAltaUsuario);


                            return(View("Correcto", model));
                        }
                        else
                        {
                            ModelState.AddModelError("MensajeGeneral", objRespuesta.status.mensaje);

                            return(View(model));
                        }
                    }
                }
            }
            catch (Exception err)
            {
                ModelState.AddModelError("MensajeGeneral", err);

                return(View(model));
            }
        }
        public IHttpActionResult Put(RegistrarUsuarioRestauranteRequest request)
        {
            RegistrarUsuarioRestauranteResponse objresponse = new RegistrarUsuarioRestauranteResponse();

            objresponse.status = new ProcesoResponse();


            try
            {
                var usuarioActualizar = BD.t_usuario.FirstOrDefault(x => x.usua_id == request.Usuario.usua_id);

                usuarioActualizar.usua_direc     = request.Usuario.usua_direc;
                usuarioActualizar.dist_id        = request.Usuario.dist_id;
                usuarioActualizar.usua_refedirec = request.Usuario.usua_refedirec;
                if (request.Usuario.usua_rutaiamgen != null)
                {
                    usuarioActualizar.usua_rutaimagen = request.Usuario.usua_rutaiamgen;
                }


                var tRestuarante = BD.t_restaurante.FirstOrDefault(x => x.usua_id == request.Usuario.usua_id);
                tRestuarante.rest_delivery     = request.Restaurante.rest_delivery;
                tRestuarante.rest_reservalocal = request.Restaurante.rest_reservalocal;
                tRestuarante.rest_nomcomer     = request.Restaurante.rest_nomcomer;
                tRestuarante.esti_id           = request.Restaurante.esti_id;
                tRestuarante.rest_descrip      = request.Restaurante.rest_descrip;


                var objUsuarioCuenta = BD.t_usuariocuenta.FirstOrDefault(x => x.usua_id == request.Usuario.usua_id);

                if (objUsuarioCuenta == null)
                {
                    t_usuariocuenta objCuenta = new t_usuariocuenta();
                    objCuenta.uscta_titular = request.Restaurante.uscta_titular;
                    objCuenta.uscta_numero  = request.Restaurante.uscta_numero;
                    objCuenta.usua_id       = request.Usuario.usua_id;
                    objCuenta.ticta_id      = request.Restaurante.ticta_id;

                    BD.t_usuariocuenta.Add(objCuenta);
                }

                else
                {
                    objUsuarioCuenta.uscta_titular = request.Restaurante.uscta_titular;
                    objUsuarioCuenta.uscta_numero  = request.Restaurante.uscta_numero;
                    objUsuarioCuenta.usua_id       = request.Usuario.usua_id;
                }


                var tTelefonosExistentes = BD.t_telefono.Where(z => z.usua_id == request.Usuario.usua_id);


                foreach (var item in tTelefonosExistentes)
                {
                    BD.t_telefono.Remove(item);
                }



                foreach (var item in request.Telefonos)
                {
                    t_telefono nuevoTelefono = new t_telefono();
                    nuevoTelefono.tele_nume = item.NumeroTelefono;
                    nuevoTelefono.usua_id   = request.Usuario.usua_id;
                    nuevoTelefono.tite_id   = item.CodigoTipoTelefono;

                    BD.t_telefono.Add(nuevoTelefono);
                }


                BD.SaveChanges();
            }
            catch (Exception err)
            {
                objresponse.status.estado  = -1;
                objresponse.status.mensaje = err.Message;
                throw err;
            }

            return(Ok(objresponse));
        }
        public IHttpActionResult Post(RegistrarUsuarioRestauranteRequest request)
        {
            RegistrarUsuarioRestauranteResponse objresponse = new RegistrarUsuarioRestauranteResponse();

            objresponse.status = new ProcesoResponse();


            try
            {
                var usuario = BD.t_usuario.FirstOrDefault(x => x.usua_email == request.Usuario.usua_email);


                var restaurante = BD.t_restaurante.FirstOrDefault(x => x.rest_ruc == request.Restaurante.rest_ruc);

                if (restaurante != null)
                {
                    objresponse.status.estado  = 2;
                    objresponse.status.mensaje = "Ya existe una empresa con el mismo RUC";

                    return(Ok(objresponse));
                }


                if (usuario != null)
                {
                    objresponse.status.estado  = 1;
                    objresponse.status.mensaje = "Ya existe un usuario registrado con el mismo correo";

                    return(Ok(objresponse));
                }



                t_usuario nueUsuario = new t_usuario();
                nueUsuario.usua_direc      = null;
                nueUsuario.usua_dni        = request.Usuario.usua_dni;
                nueUsuario.usua_email      = request.Usuario.usua_email;
                nueUsuario.usua_esta       = false;
                nueUsuario.usua_fecnac     = null;
                nueUsuario.usua_nomb       = request.Usuario.usua_nomb;
                nueUsuario.usua_pass       = request.Usuario.usua_pass;
                nueUsuario.usua_refedirec  = null;
                nueUsuario.usua_rutaimagen = null;

                BD.t_usuario.Add(nueUsuario);
                BD.SaveChanges();


                objresponse.CodigoUsuario = nueUsuario.usua_id;


                t_restaurante nuevoRestauramte = new t_restaurante();
                nuevoRestauramte.usua_id           = nueUsuario.usua_id;
                nuevoRestauramte.rest_delivery     = null;
                nuevoRestauramte.rest_descrip      = null;
                nuevoRestauramte.rest_estado       = false;
                nuevoRestauramte.rest_nomcomer     = null;
                nuevoRestauramte.rest_reservalocal = null;
                nuevoRestauramte.rest_ruc          = request.Restaurante.rest_ruc;
                nuevoRestauramte.rest_rz           = request.Restaurante.rest_rz;

                BD.t_restaurante.Add(nuevoRestauramte);


                foreach (var item in request.Telefonos)
                {
                    t_telefono nuevoTelefono = new t_telefono();
                    nuevoTelefono.tele_nume = item.NumeroTelefono;
                    nuevoTelefono.usua_id   = nueUsuario.usua_id;
                    nuevoTelefono.tite_id   = item.CodigoTipoTelefono;



                    BD.t_telefono.Add(nuevoTelefono);
                }


                BD.SaveChanges();

                objresponse.status.estado  = 0;
                objresponse.status.mensaje = "Registrado con exito";
            }
            catch (Exception err)
            {
                objresponse.status.estado  = -1;
                objresponse.status.mensaje = err.Message;
                throw err;
            }

            return(Ok(objresponse));
        }