public Aprobar AprobarSolicitud(int codigoSolicitud, int codigoEmpleadoSolicitante, int codigoUbigeoOrigen, int codigoUbigeoDestino, DateTime fechaSolicitud, DateTime fechaSalida, DateTime fechaRetorno, string sustentoViaje, double totalSolicitado, string flagAprobado, DateTime feAprobado, int CodigoEmpleadoAprueba)
        {
            Empleado empleadoObt = EmpleadoDAO.Obtener(codigoEmpleadoSolicitante);
            Ubigeo ubigeoO = UbigeoDAO.Obtener(codigoUbigeoOrigen);
            Ubigeo ubigeoD = UbigeoDAO.Obtener(codigoUbigeoDestino);

            // 1. Se obtiene el estado de Aprobación (y demás campos).
            Aprobar aprobarAModificar = new Aprobar()
            {
                CodigoSolicitud = codigoSolicitud,
                FechaSolicitud = fechaSolicitud,
                empleado = empleadoObt,
                ubigeoOrigen = ubigeoO,
                ubigeoDestino = ubigeoD,
                FechaSalida = fechaSalida,
                FechaRetorno = fechaRetorno,
                SustentoViaje = sustentoViaje,
                TotalSolicitado = totalSolicitado,
                FlagAprobado = flagAprobado,
                FeAprobado = feAprobado,
                CodigoEmpleadoAprueba = CodigoEmpleadoAprueba
            };

            // 2. Se verifica si existe presupuesto para el Area del comisionado solicitante.
            HttpWebRequest req = (HttpWebRequest)WebRequest
            .Create("http://localhost:2181/PresupuestoService.svc/Presupuestos/3");
            req.Method = "GET";

            try
            {
                // 3. Si existe Presupuesto para el Area, se verifica que el monto disponible.
                HttpWebResponse res = (HttpWebResponse)req.GetResponse();
                StreamReader reader = new StreamReader(res.GetResponseStream());
                string presupuestoJson = reader.ReadToEnd();
                JavaScriptSerializer js = new JavaScriptSerializer();
                Presupuesto presupuestoObtenido = js.Deserialize<Presupuesto>(presupuestoJson);

                // 5. Si el monto solicitado es mayor o igual al monto disponible, se manda execpcion, caso contrario se Aprueba.
                if ( aprobarAModificar.TotalSolicitado > presupuestoObtenido.Ss_MontoDisponible)
                    throw new WebFaultException<ValidationException>(
                        new ValidationException()
                        {
                            CodigoError = "E003",
                            MensajeError = "El monto solicitado es mayor al presupuesto aprobado."
                        },
                            HttpStatusCode.InternalServerError
                        );
            }
            catch (WebException e)
            {
                // 4. En caso NO existe Presupuesto para el Area, se muestra mensaje.
                HttpWebResponse resError1 = (HttpWebResponse)e.Response;
                StreamReader readerError1 = new StreamReader(resError1.GetResponseStream());
                string error = readerError1.ReadToEnd();
                JavaScriptSerializer jsError1 = new JavaScriptSerializer();
                ValidationException excepcion = jsError1.Deserialize<ValidationException>(error);

                throw new WebFaultException<ValidationException>(
                     new ValidationException()
                     {
                         CodigoError = excepcion.CodigoError,
                         MensajeError = excepcion.MensajeError
                     },
                         HttpStatusCode.InternalServerError
                     );

            }
            //////////////

            return AprobarDAO.Modificar(aprobarAModificar);
        }
        public List<Aprobar> ListarSolicitudes()
        {
            //1. Obtener las Solicitudes de Viaticos para Aprobar
            string rutaColaIn = @".\private$\indestructiblesIn";
            if (!MessageQueue.Exists(rutaColaIn))
                MessageQueue.Create(rutaColaIn);
            MessageQueue colaIn = new MessageQueue(rutaColaIn);
            colaIn.Formatter = new XmlMessageFormatter(new Type[] { typeof(ViaticoMsg) });
            Message mensajeIn = colaIn.Receive();
            ViaticoMsg viaticoMsg = (ViaticoMsg)mensajeIn.Body;
            Console.WriteLine("Asunto Recibido: " + mensajeIn.Label);
            Console.WriteLine("Viatico Recibido: " + viaticoMsg.CodigoSolicitud + ", Total Solicitado: " + viaticoMsg.TotalSolicitado);

            //2. Leer la Solicitud y mostrarlo en el List
            Aprobar[] viaticoArr = new Aprobar[1];

            for (int i = 0; i < 1; i++) //Lo ideal es detectar la cantidad de mensajes y mostrarlos todos
            {
                Aprobar viaticoAprobar = new Aprobar();
                viaticoAprobar.CodigoSolicitud = viaticoMsg.CodigoSolicitud;
                viaticoAprobar.FechaSolicitud = viaticoMsg.FechaSolicitud;
                viaticoAprobar.ubigeoOrigen = viaticoMsg.ubigeoOrigen;
                viaticoAprobar.ubigeoDestino = viaticoMsg.ubigeoDestino;
                viaticoAprobar.FechaSalida = viaticoMsg.FechaSalida;
                viaticoAprobar.FechaRetorno = viaticoMsg.FechaRetorno;
                viaticoAprobar.SustentoViaje = viaticoMsg.SustentoViaje;
                viaticoAprobar.TotalSolicitado = viaticoMsg.TotalSolicitado;
                viaticoArr[i] = viaticoAprobar;
            }

            //
            //return AprobarDAO.ListarTodos().ToList();
            return viaticoArr.ToList();
        }