Esempio n. 1
0
        public ActionResult NuevaReserva([Bind(Include = "id_rec,fecha,hora")] nuevaReservaSocioViewModel model)
        {
            if (ModelState.IsValid)
            {
                // Recuperamos el socio
                string id_soc = Session["UserID"].ToString();
                socios db_socio = db.socios.Find(id_soc);

                DateTime fecha_baja = db_socio.f_baja ?? default(DateTime);
                if (DateTime.Compare(fecha_baja, DateTime.Today) < 0)
                {
                    addError("No puede realizar la reserva, su cuota ha expirado o aún no ha pagado su primera cuota de socio");
                }

                if (DateTime.Compare(fecha_baja, model.fecha) < 0)
                {
                    addError("No puede realizar la reserva, su cuota expira antes de la fecha de reserva");
                }

                // Recuperamos el recurso y comprobamos que existe y esta disponible
                recursos db_recurso = db.recursos.Find(model.id_rec);
                if (db_recurso == null)
                {
                    addError("El recurso no existe");
                }
                if (db_recurso.disponible == false)
                {
                    addError("El recurso seleccionado no está disponible");
                }
                reservas reserva = new reservas();
                reserva.fecha = model.fecha;
                reserva.hora = new DateTime(reserva.fecha.Year, reserva.fecha.Month, reserva.fecha.Day, model.hora.Hour, model.hora.Minute, model.hora.Second);
                reserva.pagado = false;
                reserva.precio = 3;

                // Comprobacion que la fecha y/u hora no son anteriores a hoy
                if (DateTime.Compare(reserva.fecha, DateTime.Today) < 0)
                {
                    addError("La fecha de la reserva no puede ser anterior a hoy");
                }
                if (DateTime.Compare(reserva.hora, DateTime.Now) < 0)
                {
                    addError("La hora de la reserva no puede ser anterior a ahora");
                }

                // Comprobacion que el socio no ha realizado reserva la fecha seleccionada
                reservas res_soc = db.reservas.Where(x => x.socios.id == id_soc && x.fecha == model.fecha).FirstOrDefault();
                if (res_soc != null)
                {
                    addError("Ya has hecho reserva en esta fecha (solo se te permite una reserva por dia)");
                }

                // Comprobación que el recurso se encuentra libre
                reservas existe_reserva = db.reservas.Where(x => x.recursos.id == model.id_rec && x.hora == reserva.hora).FirstOrDefault();
                if (existe_reserva != null)
                {
                    addError("El recurso se encuentra ocupado en esa fecha y hora");
                }

                if (errors != null)
                {
                    saveErrors();
                    return RedirectToAction("NuevaReserva", "Socio");
                }

                // Guardamos los datos en la BBDD
                reserva.socios = db_socio;
                reserva.recursos = db_recurso;
                facturas factura = new facturas();
                factura.xml_factura = "";
                reserva.facturas = factura;
                db.reservas.Add(reserva);
                factura.id_reserva = reserva.id;
                db.facturas.Add(factura);
                db.SaveChanges();
                factura.xml_factura = Tools.generarXmlFactura(factura, reserva);
                db.Entry(factura).State = EntityState.Modified;
                db.SaveChanges();

                // Envio de email al socio con los datos de la reserva
                string subject = "Reserva realizada en Gestenis";
                string body = "<h1>Esto es un mensaje automático del sistema</h1>"
                    + "<p>" + db_socio.nombre + " has realizado correctamente una reserva en GesTenis.</p>"
                    + "<p>Estos son los datos de su reserva:</p>"
                    + "<p>Nombre del recurso: " + reserva.recursos.nombre_rec + "</p>"
                    + "<p>Día: " + reserva.fecha.ToString("dd/MM/yyyy") + "</p>"
                    + "<p>Hora: " + reserva.hora.ToString("HH:00") + "</p>"
                    + "<p>Una vez realizado el pago en conserjería, podrá visualizar la factura en su área de usuario.</p>";
                Tools.sendEmail(db_socio, subject, body);

                saveMessage("Reserva realizada con éxito");
                return RedirectToAction("MisReservas");
            }

            //ViewBag.id = new SelectList(db.facturas, "id_reserva", "xml_factura");
            return View(model);
        }
Esempio n. 2
0
        /// <summary>
        /// Genera el xml con los datos para rellenar la factura
        /// </summary>
        /// <param name="factura">Instancia de facturas</param>
        /// <param name="reserva">Instancia de reservas</param>
        /// <returns>xml codificado en UTF8 para rellenar formulario en pdf</returns>
        public static string generarXmlFactura(facturas factura, reservas reserva)
        {
            // Transformamos los campos que pueden dar problemas de codificacion a utf8 para no tener problemas con el pdf
            byte[] bytes = Encoding.Default.GetBytes(reserva.socios.nombre);
            string nombre = Encoding.UTF8.GetString(bytes);

            bytes = Encoding.Default.GetBytes(reserva.socios.apellidos);
            string apellidos = Encoding.UTF8.GetString(bytes);

            bytes = Encoding.Default.GetBytes(reserva.socios.direccion1);
            string direccion1 = Encoding.UTF8.GetString(bytes);

            bytes = Encoding.Default.GetBytes(reserva.socios.direccion2);
            string direccion2 = Encoding.UTF8.GetString(bytes);

            bytes = Encoding.Default.GetBytes(reserva.recursos.nombre_rec);
            string nombre_rec = Encoding.UTF8.GetString(bytes);

            // Generamos el xml con formato UTF8
            string ret = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
                        + "<xfdf xmlns=\"http://ns.adobe.com/xfdf/\" xml:space=\"preserve\">"
                            + "<f href=\"c:/Google Drive/PFC/factura.pdf\" />"
                            + "<fields>"
                                + "<field name = \"n_factura\">"
                                + "<value>" + factura.id.ToString() + "</value>"
                                + "</field>"
                                + "<field name = \"f_factura\">"
                                + "<value>" + DateTime.Today.ToString("dd/MM/yyyy") + "</value>"
                                + "</field>"
                                + "<field name = \"id_socio\">"
                                + "<value>" + reserva.socios.id + "</value>"
                                + "</field>"
                                + "<field name = \"nombre\">"
                                + "<value>" + nombre + "  " + apellidos + "</value>"
                                + "</field>"
                                + "<field name = \"nif\">"
                                + "<value>" + reserva.socios.nif + "</value>"
                                + "</field>"
                                + "<field name = \"direccion1\">"
                                + "<value>" + direccion1 + "</value>"
                                + "</field>"
                                + "<field name = \"direccion2\">"
                                + "<value>" + direccion2 + "</value>"
                                + "</field>"
                                + "<field name = \"nombre_recurso\">"
                                + "<value>" + nombre_rec + "</value>"
                                + "</field>"
                                + "<field name = \"fecha\">"
                                + "<value>" + reserva.fecha.ToString("dd/MM/yyyy") + "</value>"
                                + "</field>"
                                + "<field name = \"hora\">"
                                + "<value>" + reserva.hora.ToString("HH:00") + "</value>"
                                + "</field>"
                                + "<field name = \"precio\">"
                                + "<value>" + reserva.precio.ToString() + "</value>"
                                + "</field>"
                                + "<field name = \"precio_total\">"
                                + "<value>" + reserva.precio.ToString() + "</value>"
                                + "</field>"
                            + "</fields>"
                        + "</xfdf>";

            return ret;
        }