public CitaEN CrearCita(CitaEN citaCrear)
        {
            CitaEN citaCreada = null;
            string codigoNroCita = GenerarCodigoCitaNuevo();
            citaCrear.NroCita = codigoNroCita;

            int anio = Convert.ToInt32(citaCrear.Fecha.Substring(6, 4));
            int mes = Convert.ToInt32(citaCrear.Fecha.Substring(3, 2));
            int dia = Convert.ToInt32(citaCrear.Fecha.Substring(0, 2));
            int hhInicio;
            int hhFinal; int mmFinal = 0; int ssFinal = 0;
            DateTime horaFinal;
            DateTime fechaCita = Convert.ToDateTime(citaCrear.Fecha);

            hhInicio = citaCrear.HoraInicio.Hour;

            ServicioEN servicioAsociado = null;
            try
            {
                //Obtener hora de termino calculada
                ServicioService proxy = new ServicioService();
                servicioAsociado = proxy.ObtenerServicio(citaCrear.Servicio.Codigo);
            }
            catch
            {
                servicioAsociado = new ServicioEN() { Codigo = citaCrear.Servicio.Codigo, TiempoEstimado = 3 };
            }

            hhFinal = hhInicio + servicioAsociado.TiempoEstimado;

            horaFinal = new DateTime(anio, mes, dia, hhInicio, mmFinal, ssFinal);
            citaCrear.HoraFin = horaFinal.AddHours(hhFinal);

            //Estado
            citaCrear.Estado = 1; //Pendiente

            if (fechaCita.Date < DateTime.Now.Date)
            {
                throw new FaultException<RepetidoException>(new RepetidoException()
                {
                    Codigo = 1,
                    Mensaje = "La fecha seleccionada de la cita es incorrecta."
                },
                new FaultReason("Validación de negocio"));
            }

            if (citaCrear.HoraInicio <= DateTime.Now.AddHours(1))
            {
                throw new FaultException<RepetidoException>(new RepetidoException()
                {
                    Codigo = 2,
                    Mensaje = "Las citas de servicios son registradas con 1 hora de anticipacion, por favor elija otro horario disponible."
                },
                new FaultReason("Validación de negocio"));
            }


            try
            {

                //validar si el horario ya no esta disponible
                bool bEstaDisponibleHorario = false;
                bEstaDisponibleHorario = ValidarFechaHoraCitaXTaller(citaCrear.Fecha,
                                                                      citaCrear.HoraInicio,
                                                                      citaCrear.HoraFin,
                                                                      citaCrear.Taller.Codigo, citaCrear.Usuario.Codigo);

                if (bEstaDisponibleHorario)
                {
                    throw new FaultException<RepetidoException>(new RepetidoException()
                    {
                        Codigo = 3,
                        Mensaje = "La fecha y hora seleccionada no esta disponible."
                    },
                    new FaultReason("Validación de negocio"));
                }

                string strConectado = ConfigurationManager.AppSettings["ModoDesconectado"];
                if (strConectado.Equals("0"))
                {
                    throw new Exception("Modo Desconectado -  Colas");
                }

                citaCreada = CitaDAO.Crear(citaCrear);
            }
            catch (Exception ex)
            {
                citaCreada = citaCrear;
                string rutacola = @".\private$\ColaCitas";
                if (!MessageQueue.Exists(rutacola))
                {
                    MessageQueue.Create(rutacola);
                }
                MessageQueue cola = new MessageQueue(rutacola);

                Message mensaje = new Message();
                mensaje.Label = "Cola Usuario : " + citaCrear.Usuario.Usuario;
                mensaje.Body = citaCrear;
                cola.Send(mensaje);
            }
            return citaCreada;
        }
        public void CrearCitaTest()
        {
            CitaEN citaCreada = null;
            VehiculoEN vehiculoAsignado = null;
            TallerEN tallerAsignado = null;
            UsuarioEN usuarioAsignado = null;
            ServicioEN servicioAsignado = null;

            GestionCitasWS.GestionCitasServiceClient _proxy = new GestionCitasWS.GestionCitasServiceClient();

            tallerAsignado = new TallerEN()
            {
                Codigo = 2
            };

            vehiculoAsignado = new VehiculoEN()
            {
                Codigo = 1
            };

            usuarioAsignado = new UsuarioEN()
            {
                Codigo = 2
            };

            servicioAsignado = new ServicioEN()
            {
                Codigo = 1
            };

            var fecha = "10/02/2016";
            int anio = Convert.ToInt32(fecha.Substring(6, 4));
            int mes = Convert.ToInt32(fecha.Substring(3, 2));
            int dia = Convert.ToInt32(fecha.Substring(0, 2));
            int hh = 13; //8  - 9 - 14 - 15 - 16
            int mm = 0;
            int ss = 0;

            CitaEN citaACrear = new CitaEN()
            {
                Fecha = fecha,
                HoraInicio = new DateTime(anio, mes,dia, hh,mm,ss),
                Observacion = "Pendiente de pago",
                Vehiculo = vehiculoAsignado,
                Taller = tallerAsignado,
                Servicio = servicioAsignado,
                Usuario = usuarioAsignado
            };

            try
            {
                citaCreada = _proxy.CrearCita(citaACrear);
                Assert.AreNotEqual(null, citaCreada);
            }
            catch (FaultException<RepetidoException> fe)
            {
                if (fe.Detail.Codigo == 1)
                {
                    Assert.AreEqual(1, fe.Detail.Codigo);
                    Assert.AreEqual("La fecha seleccionada de la cita es incorrecta.", fe.Detail.Mensaje);
                    Assert.AreEqual("Validación de negocio", fe.Reason.ToString());
                }
                else if (fe.Detail.Codigo == 2)
                {
                    Assert.AreEqual(2, fe.Detail.Codigo);
                    Assert.AreEqual("Las citas de servicios son registradas con 1 hora de anticipacion, por favor elija otro horario disponible.", fe.Detail.Mensaje);
                    Assert.AreEqual("Validación de negocio", fe.Reason.ToString());
                }
                else if (fe.Detail.Codigo == 3)
                {
                    Assert.AreEqual(3, fe.Detail.Codigo);
                    Assert.AreEqual("La fecha y hora seleccionada no esta disponible.", fe.Detail.Mensaje);
                    Assert.AreEqual("Validación de negocio", fe.Reason.ToString());
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }