public Respuesta update([FromBody] Tarea tarea_actualizada,
                                [FromUri] int id, [FromUri] int tarea_id)
        {
            Respuesta respuesta = new Respuesta(); respuesta.resultado = 0;

            respuesta.mensaje = Tools.VerifyToken(tarea_actualizada.sesion, Tools.crm_rol_id);
            if (respuesta.mensaje != "1")
            {
                return(respuesta);
            }

            try
            {
                using (MacEntities db = new MacEntities())
                {
                    var id_contacto = (from c in db.tbl_contactos
                                       where c.id == id
                                       select c.id).FirstOrDefault();

                    if (id_contacto == 0)
                    {
                        respuesta.mensaje = "Error, contacto no encontrado."; return(respuesta);
                    }

                    tbl_contactos_tareas tarea = db.tbl_contactos_tareas.Find(tarea_id);
                    if (tarea == null)
                    {
                        respuesta.mensaje = "Error, tarea no encontrada."; return(respuesta);
                    }
                    var estatus = false;

                    if (tarea_actualizada.solo_estado != null && tarea_actualizada.solo_estado == "1")
                    {
                        var primer_seguimiento_id = (from s in db.tbl_tareas_seguimientos
                                                     where s.id_tarea == tarea_id
                                                     select s.id_seguimiento).FirstOrDefault();
                        if (primer_seguimiento_id == 0)
                        {
                            respuesta.mensaje = "Error, seguimiento no encontrado."; return(respuesta);
                        }

                        tbl_contactos_seguimientos primer_seguimiento = db.tbl_contactos_seguimientos.Find(primer_seguimiento_id);
                        if (primer_seguimiento == null)
                        {
                            respuesta.mensaje = "Error, datos de seguimiento no encontrados."; return(respuesta);
                        }

                        var tipo_resultado1 = (from r1 in db.tbl_resultados
                                               where r1.nombre == "Finalizada"
                                               select r1.id).FirstOrDefault();

                        if (tipo_resultado1 == 0)
                        {
                            respuesta.mensaje = "Error, tipo de resultado de primer seguimiento no encontrado."; return(respuesta);
                        }
                        tarea.estatus = true;

                        primer_seguimiento.id_resultado = tipo_resultado1;

                        db.Entry(primer_seguimiento).State = System.Data.Entity.EntityState.Modified;

                        if (db.SaveChanges() < 1)
                        {
                            respuesta.mensaje = "Hubo un error con la actualizacion del primer seguimiento de la tarea.";
                            return(respuesta);
                        }

                        //seguimiento
                        var tipo_seguimiento = (from s in db.tbl_seguimientos
                                                where s.id == tarea_actualizada.seguimiento
                                                select s).FirstOrDefault();
                        if (tipo_seguimiento == null)
                        {
                            respuesta.mensaje = "Error, tipo de seguimiento no encontrado."; return(respuesta);
                        }


                        tbl_contactos_seguimientos seguimiento = new tbl_contactos_seguimientos();
                        var tipo_resultado = (from r in db.tbl_resultados
                                              where r.id == tarea_actualizada.resultado.id
                                              select r).FirstOrDefault();
                        if (tipo_resultado == null)
                        {
                            respuesta.mensaje = "Error, tipo de resulado no encontrado."; return(respuesta);
                        }

                        seguimiento.id_contacto    = id_contacto;
                        seguimiento.id_seguimiento = tarea_actualizada.seguimiento;
                        seguimiento.id_resultado   = tarea_actualizada.resultado.id;
                        seguimiento.fecha_registro = DateTime.Now;
                        seguimiento.fecha          = tarea.fecha_agenda;
                        seguimiento.fecha_fin      = tarea.fecha_fin;
                        seguimiento.observaciones  = tarea_actualizada.observaciones_seguimiento;

                        db.tbl_contactos_seguimientos.Add(seguimiento);
                        if (db.SaveChanges() < 1)
                        {
                            respuesta.mensaje = "Hubo un error con el registro del seguimiento.";
                            return(respuesta);
                        }

                        //Tarea seguimiento
                        tbl_tareas_seguimientos tarea_seguimiento = new tbl_tareas_seguimientos();
                        tarea_seguimiento.id_tarea       = tarea.id;
                        tarea_seguimiento.id_seguimiento = seguimiento.id;

                        db.tbl_tareas_seguimientos.Add(tarea_seguimiento);
                        if (db.SaveChanges() < 1)
                        {
                            respuesta.mensaje = "Hubo un error con el registro del seguimiento y la tarea.";
                            return(respuesta);
                        }
                    }
                    else
                    {
                        tarea.tarea          = tarea_actualizada.tarea;
                        tarea.fecha_agenda   = Tools.GetFullDateTimeObject(tarea_actualizada.fecha_agenda);
                        tarea.fecha_fin      = Tools.GetFullDateTimeObject(tarea_actualizada.fecha_fin);
                        tarea.id_seguimiento = tarea_actualizada.seguimiento.ToString();
                        estatus = false;
                        if (tarea_actualizada.estatus == "Completada")
                        {
                            estatus = true;
                            //seguimiento
                            var tipo_seguimiento = (from s in db.tbl_seguimientos
                                                    where s.id == tarea_actualizada.seguimiento
                                                    select s).FirstOrDefault();
                            if (tipo_seguimiento == null)
                            {
                                respuesta.mensaje = "Error, tipo de seguimiento no encontrado."; return(respuesta);
                            }
                            tbl_contactos_seguimientos seguimiento = new tbl_contactos_seguimientos();
                            var tipo_resultado = (from r in db.tbl_resultados
                                                  where r.id == tarea_actualizada.resultado.id
                                                  select r).FirstOrDefault();
                            if (tipo_resultado == null)
                            {
                                respuesta.mensaje = "Error, tipo de resulado no encontrado."; return(respuesta);
                            }
                            seguimiento.id_contacto    = id_contacto;
                            seguimiento.id_seguimiento = tarea_actualizada.seguimiento;
                            seguimiento.id_resultado   = tarea_actualizada.resultado.id;
                            seguimiento.fecha_registro = DateTime.Now;
                            seguimiento.fecha          = tarea.fecha_agenda;
                            seguimiento.fecha_fin      = tarea.fecha_fin;
                            seguimiento.observaciones  = "Se completo la tarea de " + tipo_seguimiento.nombre +
                                                         ", pautada para la fecha " + tarea.fecha_agenda.ToString() + ", teniendo como resultado: " + tipo_resultado.nombre;
                            db.tbl_contactos_seguimientos.Add(seguimiento);
                            if (db.SaveChanges() < 1)
                            {
                                respuesta.mensaje = "Hubo un error con el registro del seguimiento.";
                                return(respuesta);
                            }
                        }
                        tarea.estatus = estatus;
                    }
                    db.Entry(tarea).State = System.Data.Entity.EntityState.Modified;

                    if (db.SaveChanges() < 1)
                    {
                        respuesta.mensaje = "Hubo un error con la actualizacion de la tarea.";
                        return(respuesta);
                    }

                    var tareas = (from t in db.tbl_contactos_tareas
                                  where t.estatus == false && t.id_contacto == id_contacto
                                  select t).ToList();
                    Tarea cantidad_tarea = new Tarea();
                    cantidad_tarea.cantidad = tareas.Count + "";
                    respuesta.data          = cantidad_tarea;

                    respuesta.mensaje = "Tarea actualizada exitosamente."; respuesta.resultado = 1;
                } //using
            }     //try
            catch (DbEntityValidationException ex)
            {
                respuesta.mensaje = "Errores econtrados.";
                List <Error> error_list = new List <Error>();
                foreach (var errors in ex.EntityValidationErrors)
                {
                    foreach (var error in errors.ValidationErrors)
                    {
                        // get the error message
                        error_list.Add(new Error(error.ErrorMessage));
                    } //inner foreach
                }     //foreach
                respuesta.data = error_list;
            }         //DbEntityValidationException ex
            catch (Exception e) { respuesta.mensaje = "Error, intente mas tarde."; respuesta.data = e; }

            return(respuesta);
        }//update
        public Respuesta Store([FromBody] Tarea nueva_tarea, [FromUri] int id)
        {
            Respuesta respuesta = new Respuesta(); respuesta.resultado = 0;

            respuesta.mensaje = Tools.VerifyToken(nueva_tarea.sesion, Tools.crm_rol_id);
            if (respuesta.mensaje != "1")
            {
                return(respuesta);
            }

            try
            {
                using (MacEntities db = new MacEntities())
                {
                    var contacto = (from c in db.tbl_contactos
                                    where c.id == id
                                    select c).FirstOrDefault();

                    if (contacto == null)
                    {
                        respuesta.mensaje = "Error, contacto no encontrado."; return(respuesta);
                    }

                    var seguimiento_db = (from s in db.tbl_seguimientos
                                          where s.id == nueva_tarea.seguimiento
                                          select s).FirstOrDefault();

                    if (seguimiento_db == null)
                    {
                        respuesta.mensaje = "Error, seguimiento no encontrado."; return(respuesta);
                    }

                    var id_resultado = (from r in db.tbl_resultados
                                        where r.nombre == "En espera"
                                        select r.id).FirstOrDefault();

                    if (id_resultado == 0)
                    {
                        respuesta.mensaje = "Error, resultado no encontrado."; return(respuesta);
                    }

                    tbl_contactos_tareas tarea = new tbl_contactos_tareas();
                    tarea.id_contacto = contacto.id;
                    tarea.tarea       = nueva_tarea.tarea;
                    tarea.estatus     = false;
                    //if (Tools.EsAntesDeFechaActual(nueva_tarea.fecha_agenda)) {

                    //    respuesta.mensaje = "La fecha debe ser mayor a la del día de hoy (" + Tools.GetFormatedStringDateTime(DateTime.Now) +").";
                    //    return respuesta;
                    //}

                    if (Tools.EsAntesDeDias(nueva_tarea.fecha_agenda, 7) == false)
                    {
                        respuesta.mensaje = "La fecha de la tarea debe ser antes de " + Tools.GetFormatedStringDateTime(DateTime.Now.AddDays(7)) + " .";
                        respuesta.data    = Tools.GetFullDateTimeObject(nueva_tarea.fecha_agenda).ToString();
                        return(respuesta);
                    }
                    tarea.fecha_agenda   = Tools.GetFullDateTimeObject(nueva_tarea.fecha_agenda);
                    tarea.fecha_fin      = Tools.GetFullDateTimeObject(nueva_tarea.fecha_fin);
                    tarea.fecha_registro = DateTime.Now;
                    tarea.id_seguimiento = seguimiento_db.id + "";
                    tarea.evento_link    = nueva_tarea.evento_link;
                    tarea.id_evento      = nueva_tarea.id_evento;

                    db.tbl_contactos_tareas.Add(tarea);
                    if (db.SaveChanges() < 1)
                    {
                        respuesta.mensaje = "Hubo un error con el registro de la tarea.";
                        return(respuesta);
                    }


                    tbl_contactos_seguimientos seguimiento = new tbl_contactos_seguimientos();
                    seguimiento.id_contacto    = contacto.id;
                    seguimiento.id_resultado   = id_resultado;
                    seguimiento.id_seguimiento = seguimiento_db.id;
                    seguimiento.fecha_fin      = tarea.fecha_fin;
                    seguimiento.fecha_registro = DateTime.Now;
                    seguimiento.fecha          = tarea.fecha_agenda;
                    seguimiento.observaciones  = "Se registro tarea de tipo " + seguimiento_db.nombre +
                                                 " para el contacto " + contacto.nombre + " " + contacto.apellido + ".";

                    db.tbl_contactos_seguimientos.Add(seguimiento);
                    if (db.SaveChanges() < 1)
                    {
                        respuesta.mensaje = "Hubo un error con el registro del seguimiento de la tarea.";
                        return(respuesta);
                    }

                    tbl_tareas_seguimientos tarea_seguimiento = new tbl_tareas_seguimientos();
                    tarea_seguimiento.id_tarea       = tarea.id;
                    tarea_seguimiento.id_seguimiento = seguimiento.id;

                    db.tbl_tareas_seguimientos.Add(tarea_seguimiento);
                    if (db.SaveChanges() < 1)
                    {
                        respuesta.mensaje = "Hubo un error con el registro del seguimiento y la tarea.";
                        return(respuesta);
                    }

                    respuesta.mensaje = "Nueva tarea registrada exitosamente."; respuesta.resultado = 1;
                } //using
            }     //try
            catch (DbEntityValidationException ex)
            {
                respuesta.mensaje = "Errores econtrados.";
                List <Error> error_list = new List <Error>();
                foreach (var errors in ex.EntityValidationErrors)
                {
                    foreach (var error in errors.ValidationErrors)
                    {
                        // get the error message
                        error_list.Add(new Error(error.ErrorMessage));
                    } //inner foreach
                }     //foreach
                respuesta.data = error_list;
            }         //DbEntityValidationException ex
            catch (Exception e) { respuesta.mensaje = "Error, intente mas tarde."; respuesta.data = e; }

            return(respuesta);
        }//store