public async Task <ActionResult> DeleteConfirmed(int id)
        {
            clientes_dietas clientes_dietas = await db.clientes_dietas.FindAsync(id);

            db.clientes_dietas.Remove(clientes_dietas);
            await db.SaveChangesAsync();

            return(RedirectToAction("Index"));
        }
        // GET: ClientesDietas/Details/5
        public async Task <ActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            clientes_dietas clientes_dietas = await db.clientes_dietas.FindAsync(id);

            if (clientes_dietas == null)
            {
                return(HttpNotFound());
            }
            return(View(clientes_dietas));
        }
        public async Task <ActionResult> Create(string json)
        {
            List <Dictionary <string, object> > oDict = Newtonsoft.Json.JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(json);

            clientes_dietas cd = new clientes_dietas();

            cd.created_at           = CurrentDate.getNow();
            cd.updated_at           = CurrentDate.getNow();
            cd.programa_clientes_id = int.Parse(oDict[oDict.Count - 1]["programID"].ToString());
            List <DailyDiet> dietDetails = new List <DailyDiet>();

            for (int i = 0; i < oDict.Count - 1; i++)
            {
                DailyDiet dietDetail = new DailyDiet();

                dietDetail.clientes_dietas_id = cd.id;
                dietDetail.opcion             = int.Parse(oDict[i]["option"].ToString());
                dietDetail.tipo_comida        = (FoodTypes)int.Parse(oDict[i]["foodType"].ToString());
                dietDetail.texto = oDict[i]["detail"].ToString();
                dietDetail.dia   = int.Parse(oDict[i]["day"].ToString()) + 1;

                dietDetails.Add(dietDetail);
            }

            cd.dieta_diaria = dietDetails;

            db.clientes_dietas.Add(cd);

            int s = await db.SaveChangesAsync();

            if (s > 0)
            {
                return(RedirectToAction("Index"));
            }

            ViewBag.clientId  = int.Parse(oDict[oDict.Count - 1]["clientId"].ToString());
            ViewBag.programId = int.Parse(oDict[oDict.Count - 1]["programID"].ToString());

            return(View());
        }
        public async Task <ActionResult> Edit(string json)
        {
            List <Dictionary <string, object> > oDict = Newtonsoft.Json.JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(json);

            int dietId = int.Parse(oDict[oDict.Count - 1]["dietID"].ToString());

            IQueryable <clientes_dietas> cdQuery = db.clientes_dietas.Where(m => m.id == dietId).Include(m => m.dieta_diaria);
            clientes_dietas cd = cdQuery.FirstOrDefault();

            cd.updated_at = CurrentDate.getNow();

            List <DailyDiet> dietDetails = new List <DailyDiet>();

            for (int i = 0; i < oDict.Count - 1; i++)
            {
                int id = int.Parse(oDict[i]["id"].ToString());

                DailyDiet dd = null;

                if (id > 0)
                {
                    dd = cd.dieta_diaria.Where(c => c.id == id).FirstOrDefault();
                }

                if (dd != null)
                {
                    dd.clientes_dietas_id = cd.id;
                    dd.opcion             = int.Parse(oDict[i]["option"].ToString());
                    dd.tipo_comida        = (FoodTypes)int.Parse(oDict[i]["foodType"].ToString());
                    dd.texto = oDict[i]["detail"].ToString();
                    dd.dia   = int.Parse(oDict[i]["day"].ToString()) + 1;

                    dietDetails.Add(dd);
                }
                else
                {
                    DailyDiet dietDetail = new DailyDiet();

                    dietDetail.clientes_dietas_id = cd.id;
                    dietDetail.opcion             = int.Parse(oDict[i]["option"].ToString());
                    dietDetail.tipo_comida        = (FoodTypes)int.Parse(oDict[i]["foodType"].ToString());
                    dietDetail.texto = oDict[i]["detail"].ToString();
                    dietDetail.dia   = int.Parse(oDict[i]["day"].ToString()) + 1;

                    dietDetails.Add(dietDetail);
                }
            }

            cd.dieta_diaria = dietDetails;

            db.Entry(cd).State = EntityState.Modified;

            int s = await db.SaveChangesAsync();

            if (s > 0)
            {
                return(RedirectToAction("Index"));
            }

            ViewBag.clientId  = int.Parse(oDict[oDict.Count - 1]["clientId"].ToString());
            ViewBag.programId = int.Parse(oDict[oDict.Count - 1]["programID"].ToString());

            return(View());
        }
        // GET: ClientesDietas/Edit/5
        public async Task <ActionResult> Edit(int id)
        {
            ViewBag.programId = id;

            clientes_dietas clientes_dietas = await db.clientes_dietas.Where(m => m.id == id).Include(m => m.programa_clientes).Include(m => m.dieta_diaria).FirstOrDefaultAsync();

            ViewBag.clientId = clientes_dietas.programa_clientes.cliente_id;

            int createdOptions = clientes_dietas.dieta_diaria.OrderByDescending(d => d.opcion).Select(d => d.opcion).FirstOrDefault();

            ViewBag.optionsCount = createdOptions;

            StringBuilder diets = new StringBuilder();

            for (int opt = 0; opt < createdOptions; opt++)
            {
                StringBuilder dietsDiv = new StringBuilder();

                var newDietOptionLabelRow = "<div class='row mar-bot-10'><label class='diet-title-sub'>Opción " + (opt + 1).ToString() + "</label></div>";
                dietsDiv.Append(newDietOptionLabelRow);

                var dietDivRowId  = "opt-" + opt.ToString();
                var newDietDivRow = "<div id='" + dietDivRowId + "' class='row diet-row mar-bot-15'>";
                dietsDiv.Append(newDietDivRow);

                StringBuilder dietOptionRow = new StringBuilder();

                for (var i = 0; i < 7; i++)
                {
                    var optColId = dietDivRowId + "-col-" + i.ToString();
                    if (i == 0)
                    {
                        var newDietColumn = "<div id='" + optColId + "' class='col-2'>";
                        dietOptionRow.Append(newDietColumn);
                    }
                    else
                    {
                        var newDietColumn = "<div id='" + optColId + "' class='col-2 mar-lef-10'>";
                        dietOptionRow.Append(newDietColumn);
                    }

                    StringBuilder currentColumn = new StringBuilder();

                    switch (i)
                    {
                    case 0:
                        currentColumn.Append("<label class='diet-title'>Lun</label>");
                        break;

                    case 1:
                        currentColumn.Append("<label class='diet-title'>Mar</label>");
                        break;

                    case 2:
                        currentColumn.Append("<label class='diet-title'>Mie</label>");
                        break;

                    case 3:
                        currentColumn.Append("<label class='diet-title'>Jue</label>");
                        break;

                    case 4:
                        currentColumn.Append("<label class='diet-title'>Vie</label>");
                        break;

                    case 5:
                        currentColumn.Append("<label class='diet-title'>Sab</label>");
                        break;

                    case 6:
                        currentColumn.Append("<label class='diet-title'>Dom</label>");
                        break;

                    default:
                        break;
                    }

                    for (var j = 0; j < 5; j++)
                    {
                        var       currentBoxId = optColId + "-row-" + j.ToString();
                        int       dia          = i + 1;
                        int       opc          = opt + 1;
                        FoodTypes tc           = (FoodTypes)j;
                        DailyDiet existingDiet = clientes_dietas.dieta_diaria.Where(c => c.dia == dia && c.tipo_comida == tc && c.opcion == opc).FirstOrDefault();
                        switch (j)
                        {
                        case 0:

                            if (existingDiet != null)
                            {
                                currentColumn.Append("<div class='model daily-diet'><label>Desayuno</label><textarea id='" + currentBoxId + "'>" + existingDiet.texto + "</textarea></div>");
                                currentColumn.Append("<input type='hidden' id='opt-" + opt + "-col-" + i + "-row-" + j + "-id' value='" + existingDiet.id + "'/>");
                            }
                            else
                            {
                                currentColumn.Append("<div class='model daily-diet'><label>Desayuno</label><textarea id='" + currentBoxId + "'></textarea></div>");
                                currentColumn.Append("<input type='hidden' id='opt-" + opt + "-col-" + i + "-row-" + j + "-id' value='0'/>");
                            }

                            break;

                        case 1:

                            if (existingDiet != null)
                            {
                                currentColumn.Append("<div class='model daily-diet'><label>Media Mañana</label><textarea id='" + currentBoxId + "'>" + existingDiet.texto + "</textarea></div>");
                                currentColumn.Append("<input type='hidden' id='opt-" + opt + "-col-" + i + "-row-" + j + "-id' value='" + existingDiet.id + "'/>");
                            }
                            else
                            {
                                currentColumn.Append("<div class='model daily-diet'><label>Media Mañana</label><textarea id='" + currentBoxId + "'></textarea></div>");
                                currentColumn.Append("<input type='hidden' id='opt-" + opt + "-col-" + i + "-row-" + j + "-id' value='0'/>");
                            }
                            break;

                        case 2:

                            if (existingDiet != null)
                            {
                                currentColumn.Append("<div class='model daily-diet'><label>Almuerzo</label><textarea id='" + currentBoxId + "'>" + existingDiet.texto + "</textarea></div>");
                                currentColumn.Append("<input type='hidden' id='opt-" + opt + "-col-" + i + "-row-" + j + "-id' value='" + existingDiet.id + "'/>");
                            }
                            else
                            {
                                currentColumn.Append("<div class='model daily-diet'><label>Almuerzo</label><textarea id='" + currentBoxId + "'></textarea></div>");
                                currentColumn.Append("<input type='hidden' id='opt-" + opt + "-col-" + i + "-row-" + j + "-id' value='0'/>");
                            }
                            break;

                        case 3:

                            if (existingDiet != null)
                            {
                                currentColumn.Append("<div class='model daily-diet'><label>Media Tarde</label><textarea id='" + currentBoxId + "'>" + existingDiet.texto + "</textarea></div>");
                                currentColumn.Append("<input type='hidden' id='opt-" + opt + "-col-" + i + "-row-" + j + "-id' value='" + existingDiet.id + "'/>");
                            }
                            else
                            {
                                currentColumn.Append("<div class='model daily-diet'><label>Media Tarde</label><textarea id='" + currentBoxId + "'></textarea></div>");
                                currentColumn.Append("<input type='hidden' id='opt-" + opt + "-col-" + i + "-row-" + j + "-id' value='0'/>");
                            }
                            break;

                        case 4:
                            if (existingDiet != null)
                            {
                                currentColumn.Append("<div class='model daily-diet'><label>Cena</label><textarea id='" + currentBoxId + "'>" + existingDiet.texto + "</textarea></div>");
                                currentColumn.Append("<input type='hidden' id='opt-" + opt + "-col-" + i + "-row-" + j + "-id' value='" + existingDiet.id + "'/>");
                            }
                            else
                            {
                                currentColumn.Append("<div class='model daily-diet'><label>Cena</label><textarea id='" + currentBoxId + "'></textarea></div>");
                                currentColumn.Append("<input type='hidden' id='opt-" + opt + "-col-" + i + "-row-" + j + "-id' value='0'/>");
                            }
                            break;

                        default:
                            break;
                        }
                    }

                    currentColumn.Append("</div>");

                    dietOptionRow.Append(currentColumn.ToString());
                }

                dietOptionRow.Append("</div>");

                dietsDiv.Append(dietOptionRow.ToString());
                dietsDiv.Append("</div>");

                diets.Append(dietsDiv.ToString());
            }

            ViewBag.optionsHtml = diets.ToString();

            return(View(clientes_dietas));
        }
        public async Task <ActionResult> Global(int id)
        {
            int daysInMonth = DateTime.DaysInMonth(CurrentDate.getNow().Year, CurrentDate.getNow().Month);

            DateTime today    = CurrentDate.getNow();
            DateTime firstDay = new DateTime(today.Year, today.Month, 1);
            DateTime lastDay  = new DateTime(today.Year, today.Month, daysInMonth);

            // Info General
            clientes client = await db.clientes
                              .Where(m => m.id_alt == id)
                              .Include(m => m.nutricionistas.usuarios)
                              .FirstOrDefaultAsync();

            // Info Programa
            programa_clientes program = await db.programa_clientes
                                        .Where(m => m.cliente_id == client.id_alt && m.fecha_inicio <= today && m.fecha_fin >= today)
                                        .Include(m => m.programa)
                                        .Include(m => m.horario.sala.local)
                                        .OrderBy(m => m.fecha_fin)
                                        .FirstOrDefaultAsync();

            ViewBag.ProgramId = program != null?program.id.ToString() : "";

            ViewBag.ProgramName     = program != null ? program.programa.nombre : "";
            ViewBag.ProgramInitDate = program != null?program.fecha_inicio.ToShortDateString() : "";

            ViewBag.ProgramEndDate = program != null?program.fecha_fin.ToShortDateString() : "";

            ViewBag.ProgramSchedule = program != null?program.horario.hora.ToString() : "";

            ViewBag.Gym = program != null ? program.horario.sala.local.nombre : "";

            // Info Notas del cliente
            List <clientes_notas> notes = await db.clientes_notas.Where(n => n.idCliente == id).OrderByDescending(n => n.created_at).Take(15).ToListAsync();

            ViewBag.ClientNotes = notes;

            //// Info Calendario.
            //List<pesos_medidas> clientPyM = await db.pesos_medidas.Where(m => m.clienteId == id && m.created_at >= firstDay && m.created_at <= lastDay).ToListAsync();
            //List<clientes_asistencia> clientAssistance = await db.clientes_asistencia.Where(m => m.clienteId == id && m.fecha >= firstDay && m.fecha <= lastDay).ToListAsync();
            //List<clientes_congelamientos> clientFreezing = await db.clientes_congelamientos.Where(m => m.clienteId == id && m.fecha_desde >= firstDay).ToListAsync();
            //List<citas> clientConsults = await db.citas.Where(m => m.cliente_id == id && m.fecha >= firstDay && m.fecha <= lastDay).ToListAsync();

            // Info Nutricion.

            ViewBag.AssignedNutritionist = client.nutricionistas.usuarios.nombres + " " + client.nutricionistas.usuarios.apellidos;
            if (program != null)
            {
                // Info Ficha Medica
                fichas_medicas medicalHistory = await db.fichas_medicas.Where(m => m.programa_id == program.id).Include(m => m.cardio).FirstOrDefaultAsync();

                ViewBag.MedicalId = "No ha sido creada.";
                ViewBag.Cardio    = "No se han ingresado datos.";
                if (medicalHistory != null)
                {
                    int clientCurrMedicalHistoryIdCode = 10000000 + medicalHistory.id;
                    ViewBag.MedicalId = clientCurrMedicalHistoryIdCode.ToString("FS#");

                    if (medicalHistory.cardio != null)
                    {
                        CardioInfo lastCardioResults = medicalHistory.cardio.OrderByDescending(m => m.fecha).FirstOrDefault();
                        if (lastCardioResults.cardiologia_aprobacion == CardioSuittable.Apto)
                        {
                            ViewBag.Cardio = CardioSuittable.Apto.ToString();
                        }
                        else
                        {
                            ViewBag.Cardio = CardioSuittable.NoApto.ToString();
                        }
                    }
                }

                // Info Dieta
                clientes_dietas clientDiet = await db.clientes_dietas.Where(m => m.programa_clientes_id == program.id).OrderByDescending(m => m.created_at).FirstOrDefaultAsync();

                if (clientDiet != null)
                {
                    int dietCode = 10000000 + clientDiet.id;
                    ViewBag.DietCode = dietCode.ToString("D#");
                }
            }

            // Info Ventas

            venta_usuarios usrSales = await db.venta_usuarios
                                      .Where(m => m.cliente_id == client.id_alt)
                                      .OrderByDescending(m => m.created_at)
                                      .FirstOrDefaultAsync();

            if (usrSales != null)
            {
                usuarios usr = await db.vendedores.Where(v => v.usuario_id == usrSales.vendedor_id).Include(v => v.usuarios).Select(v => v.usuarios).FirstOrDefaultAsync();

                ViewBag.Seller      = usr.nombres + " " + usr.apellidos;
                ViewBag.LastTicket  = usrSales.numero_boleta;
                ViewBag.LastRenewal = usrSales.fecha_inicio.ToShortDateString();

                semanas_precios weeks = db.semanas_precios.Where(s => s.id == usrSales.semanas_precio_id).FirstOrDefault();

                int boughtWeeks = weeks.cantidad_semanas;
                ViewBag.BoughtWeeks = boughtWeeks.ToString();
                int usedWeeks = await GetUsedWeeks(ClientId : client.id_alt, LastSaleId : usrSales.id);

                ViewBag.UsedWeeks    = usedWeeks;
                ViewBag.PendingWeeks = boughtWeeks - usedWeeks;
            }

            //ViewBag.venta_usuario = db.venta_usuarios.Where(vu => vu.cliente_id == id).FirstOrDefault();
            //ViewBag.programa_cliente = db.programa_clientes.Where(pc => pc.cliente_id == id).FirstOrDefault();

            //ViewBag.calPyM = clientPyM;
            //ViewBag.calAsist = clientAssistance;
            //ViewBag.calFrz = clientFreezing;
            //ViewBag.calCitas = clientConsults;
            //

            //ViewBag.cardioApt = cardioApt;
            //ViewBag.foto = Convert.ToBase64String(cliente.foto);

            return(View(client));
        }