コード例 #1
0
        public JsonResult SearchWishes()
        {
            try
            {
                List <int> userRoles = (List <int>)Session["userRoles"];

                int        current_user_id  = Convert.ToInt32(Session["userID"]);
                int        user_id          = (Request.Form["search_user_id"] == "") ? 0 : Convert.ToInt32(Request.Form["search_user_id"]);
                int        report_type_id   = (Request.Form["search_report_type_id"] == "") ? 0 : Convert.ToInt32(Request.Form["search_report_type_id"]);
                string     report_type_name = (report_type_id != 0) ? db.Report_types.Where(x => x.report_type_id == report_type_id).SingleOrDefault().report_type_name : String.Empty;
                string     status           = Request.Form["search_status"].Trim();
                DateTime?  startdate        = (Request.Form["search_startdate"] != "") ? DateTime.ParseExact(Request.Form["search_startdate"] + " 00:00:00", "yyyy-MM-dd hh:mm:ss", CultureInfo.InvariantCulture) : (DateTime?)null;
                DateTime?  enddate          = (Request.Form["search_enddate"] != "") ? (DateTime.ParseExact(Request.Form["search_enddate"] + " 00:00:00", "yyyy-MM-dd hh:mm:ss", CultureInfo.InvariantCulture)).AddDays(1) : (DateTime?)null;
                List <int> places           = new List <int>(Request.Form["search_places"].Split(',').Select(Int32.Parse).ToList());

                if ((user_id != 0) || (report_type_id != 0) || (!String.IsNullOrEmpty(status)) || (startdate != null) || (enddate != null) || (places[0] != 0))
                {
                    List <int> wish_places = new List <int>();
                    if (places[0] != 0)
                    {
                        wish_places = db.Tasks.Where(x => places.Contains(x.task_place_id)).Select(x => x.task_wish_id).ToList();
                    }

                    List <WishViewModel> WishList = db.Wishes.OrderByDescending(x => x.wish_createdate)
                                                    .Where(x => (user_id != 0) ? (x.wish_user_id == user_id) : (x.wish_user_id == x.wish_user_id))
                                                    .Where(x => (report_type_id != 0) ? (x.wish_report_type_name == report_type_name) : x.wish_report_type_name == x.wish_report_type_name)
                                                    .Where(x => (!String.IsNullOrEmpty(status)) ? (x.wish_status == status) : x.wish_status == x.wish_status)
                                                    .Where(x => (startdate != null) ? (x.wish_createdate >= startdate) : x.wish_createdate == x.wish_createdate)
                                                    .Where(x => (enddate != null) ? (x.wish_createdate <= enddate) : x.wish_createdate == x.wish_createdate)
                                                    .Where(x => (wish_places.Count != 0) ? (wish_places.Contains(x.wish_id)) : x.wish_id == x.wish_id)
                                                    .Select(x => new WishViewModel
                    {
                        Wish_id               = x.wish_id,
                        Wish_createdate       = x.wish_createdate,
                        Wish_report_type_name = x.wish_report_type_name,
                        User_id               = x.wish_user_id,
                        Wish_status           = x.wish_status
                    }).ToList();

                    List <WishViewModel> ResultList = new List <WishViewModel>();

                    //Проверяем доступы
                    foreach (var w in WishList)
                    {
                        //Суперадмин или админ
                        if (userRoles.Contains(1) || userRoles.Contains(2))
                        {
                            ResultList.Add(w);
                        }
                        else
                        {
                            Wish_report_relation wrr = db.Wish_report_relation.Where(x => x.wrr_wish_id == w.Wish_id).SingleOrDefault();

                            if (wrr != null)
                            {
                                switch (wrr.wrr_access_type)
                                {
                                //Задание видно для всех
                                case 0:
                                    ResultList.Add(w);
                                    break;

                                //Для пользователей отчета
                                case 1:
                                    if (db.Report_user_relation.Where(x => x.rur_report_type_id == wrr.wrr_report_type_id && x.rur_user_id == current_user_id).Count() != 0)
                                    {
                                        ResultList.Add(w);
                                    }
                                    break;

                                //Для конкретных пользователей
                                case 2:
                                    if (db.Wish_user_relation.Where(x => x.wur_wish_id == w.Wish_id && x.wur_user_id == current_user_id).Count() != 0)
                                    {
                                        ResultList.Add(w);
                                    }
                                    break;
                                }
                            }
                            else
                            {
                                ResultList.Add(w);
                            }
                        }
                    }

                    foreach (var w in ResultList)
                    {
                        w.User_name = db.Users.Where(x => x.user_id == w.User_id).Select(x => ((x.user_surname ?? "") + " " + (x.user_name ?? "") + " " + (x.user_patronymic ?? "")).Trim()).SingleOrDefault();
                        switch (w.Wish_status)
                        {
                        case "new":
                            w.Wish_status = "новое";
                            break;

                        case "work":
                            w.Wish_status = "в работе";
                            break;

                        case "wait":
                            w.Wish_status = "ожидание";
                            break;

                        case "fail":
                            w.Wish_status = "завершено с ошибкой";
                            break;

                        case "done":
                            w.Wish_status = "завершено";
                            break;

                        default:
                            w.Wish_status = "неизвестно";
                            break;
                        }
                    }

                    return(Json(ResultList, JsonRequestBehavior.AllowGet));
                }

                return(Json(new List <WishViewModel>(), JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #2
0
        public JsonResult RepeatWish()
        {
            var result = -1;

            try
            {
                //Вытаскиваем данные из запроса
                int wish_id     = Convert.ToInt32(Request.Form["wish_id"]);
                int user_id     = Convert.ToInt32(Request.Form["user_id"]);
                int repeat_type = Convert.ToInt32(Request.Form["repeat_type"]);

                DateTime          deadlineValue = DateTime.ParseExact(Request.Form["deadlineValue"].ToString(), "yyyy-MM-ddTHH:mm", System.Globalization.CultureInfo.InvariantCulture);
                int?              attemptsCount = Request.Form["attemptsCount"].ToString() != "null" ? Convert.ToInt32(Request.Form["attemptsCount"].ToString()) : (int?)null;
                List <parameters> ParamList     = JsonConvert.DeserializeObject <List <parameters> >(Request.Form["parameters"].ToString());
                List <places>     PlaceList     = JsonConvert.DeserializeObject <List <places> >(Request.Form["places"].ToString());

                Wishes w = db.Wishes.Where(x => x.wish_id == wish_id).SingleOrDefault();

                int report_type_id = db.Wish_report_relation.Where(x => x.wrr_wish_id == wish_id).SingleOrDefault().wrr_report_type_id;

                //Доступы к просмотру
                int[] Access_users = Array.ConvertAll(Request.Form.GetValues("access_user"), s => int.Parse(s));

                string wish_report_type_xml = w.wish_report_type_xml;

                string new_xml = String.Empty;

                List <ParameterType> ParameterList = new List <ParameterType>();

                if (!String.IsNullOrEmpty(wish_report_type_xml))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(ReportModel));

                    using (TextReader reader = new StringReader(wish_report_type_xml))
                    {
                        ReportModel report = (ReportModel)serializer.Deserialize(reader);

                        foreach (var p in report.Parameters)
                        {
                            ParameterList.Add(new ParameterType
                            {
                                Name  = p.ParameterName,
                                Alias = p.ParameterAlias,
                                Type  = p.ParameterDataType,
                                Value =
                                    (p.ParameterDataType == "startdate") || (p.ParameterDataType == "enddate")
                                    ? DateTime.ParseExact(ParamList.Where(x => x.name == p.ParameterName).SingleOrDefault().value, "yyyy-MM-ddTHH:mm", System.Globalization.CultureInfo.InvariantCulture).ToString("yyyy-MM-dd HH:mm:ss")
                                    : ParamList.Where(x => x.name == p.ParameterName).SingleOrDefault().value
                            });
                        }

                        new_xml  = "<?xml version=\"1.0\" encoding=\"utf-16\"?>";
                        new_xml += "<TableDataSource SelectCommand=\"" + SecurityElement.Escape(report.SelectCommand) + "\">";
                        foreach (var c in report.Columns)
                        {
                            new_xml += "<Column Name=\"" + c.ColumnName + "\" Type=\"" + c.ColumnType + "\" Alias=\"" + c.ColumnAlias + "\" />";
                        }
                        if (ParamList.Count != 0)
                        {
                            foreach (var p in ParameterList)
                            {
                                new_xml += "<CommandParameter Name=\"" + p.Name + "\" Alias=\"" + p.Alias + "\" DataType=\"" + p.Type + "\" Value=\"" + p.Value + "\" />";
                            }
                        }
                        new_xml += "</TableDataSource>";
                    }
                }
                else
                {
                    return(Json(result, JsonRequestBehavior.AllowGet));
                }

                //Обновляем задание
                if (repeat_type == 0)
                {
                    w.wish_createdate     = Convert.ToDateTime(DateTime.Now);
                    w.wish_deadline       = deadlineValue;
                    w.wish_total_attempts = attemptsCount;
                    w.wish_status         = "not_ready";
                    w.wish_user_id        = user_id;
                    db.SaveChanges();

                    //Обновляем задачи
                    foreach (var p in PlaceList)
                    {
                        Tasks Task = db.Tasks.Where(x => x.task_wish_id == wish_id && x.task_place_id == p.id).SingleOrDefault();
                        Task.task_startdate       = DateTime.ParseExact(p.startdate, "yyyy-MM-ddTHH:mm", System.Globalization.CultureInfo.InvariantCulture);
                        Task.task_number_attempts = 0;
                        Task.task_status          = "new";
                        Task.task_last_error_text = null;
                    }
                    db.SaveChanges();

                    //Обновляем доступы
                    Wish_report_relation wrr = db.Wish_report_relation.Where(x => x.wrr_wish_id == wish_id).SingleOrDefault();

                    if (Access_users.Length != 0)
                    {
                        wrr.wrr_access_type = (short)((Access_users[0] == -1) ? 1 : (Access_users[0] == 0) ? 0 : 2);
                        db.SaveChanges();

                        //Конкретные пользователи
                        if (wrr.wrr_access_type == 2)
                        {
                            //Пользователи ДО редактирования
                            List <Wish_user_relation> Wur = new List <Wish_user_relation>();
                            foreach (Wish_user_relation wur in db.Wish_user_relation.Where(x => x.wur_wish_id == wish_id))
                            {
                                Wur.Add(wur);
                            }

                            foreach (Users u in db.Users)
                            {
                                if (Access_users.Contains(u.user_id))
                                {
                                    if (Wur.Find(x => x.wur_user_id == u.user_id) == null)
                                    {
                                        db.Wish_user_relation.Add(new Wish_user_relation()
                                        {
                                            wur_wish_id = (int)wish_id, wur_user_id = u.user_id
                                        });
                                    }
                                }
                                else
                                {
                                    if (Wur.Find(x => x.wur_user_id == u.user_id) != null)
                                    {
                                        db.Wish_user_relation.Remove(Wur.Find(x => x.wur_user_id == u.user_id));
                                    }
                                }
                            }
                            db.SaveChanges();
                        }
                    }
                    //Доступ для всех
                    else
                    {
                        wrr.wrr_access_type = 0;
                        db.SaveChanges();
                    }

                    w.wish_status = "new";
                    db.SaveChanges();

                    result = wish_id;
                }
                else
                {
                    //Создаем задание
                    Wishes Wish = new Wishes();
                    Wish.wish_createdate       = Convert.ToDateTime(DateTime.Now);
                    Wish.wish_deadline         = deadlineValue;
                    Wish.wish_total_attempts   = attemptsCount;
                    Wish.wish_report_type_name = w.wish_report_type_name;
                    Wish.wish_status           = "not_ready";
                    Wish.wish_report_type_xml  = new_xml;
                    Wish.wish_user_id          = user_id;
                    db.Wishes.Add(Wish);
                    db.SaveChanges();

                    //Создаем задачи
                    foreach (var p in PlaceList)
                    {
                        Tasks Task = new Tasks();
                        Task.task_startdate       = DateTime.ParseExact(p.startdate, "yyyy-MM-ddTHH:mm", System.Globalization.CultureInfo.InvariantCulture);;
                        Task.task_wish_id         = Wish.wish_id;
                        Task.task_place_id        = p.id;
                        Task.task_number_attempts = 0;
                        Task.task_status          = "new";
                        Task.task_last_error_text = null;
                        db.Tasks.Add(Task);
                    }

                    //Создаем доступы
                    if (Access_users.Length != 0)
                    {
                        Wish_report_relation wrr = new Wish_report_relation();
                        wrr.wrr_wish_id        = Wish.wish_id;
                        wrr.wrr_report_type_id = report_type_id;
                        wrr.wrr_access_type    = (short)((Access_users[0] == -1) ? 1 : (Access_users[0] == 0) ? 0 : 2);
                        db.Wish_report_relation.Add(wrr);
                        db.SaveChanges();

                        //Конкретные пользователи
                        if (wrr.wrr_access_type == 2)
                        {
                            foreach (int item in Access_users)
                            {
                                Wish_user_relation wur = new Wish_user_relation();
                                wur.wur_wish_id = Wish.wish_id;
                                wur.wur_user_id = item;
                                db.Wish_user_relation.Add(wur);
                            }
                            db.SaveChanges();
                        }
                    }
                    //Доступ для всех
                    else
                    {
                        Wish_report_relation wrr = new Wish_report_relation();
                        wrr.wrr_wish_id        = Wish.wish_id;
                        wrr.wrr_report_type_id = report_type_id;
                        wrr.wrr_access_type    = 0;
                        db.Wish_report_relation.Add(wrr);
                        db.SaveChanges();
                    }

                    Wish.wish_status = "new";
                    db.SaveChanges();
                    result = Wish.wish_id;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
コード例 #3
0
        public JsonResult SetAccess()
        {
            int result = 0;

            try
            {
                //Доступы к просмотру
                int[] Access_users = Array.ConvertAll(Request.Form.GetValues("access_user"), s => int.Parse(s));
                int   wish_id      = Convert.ToInt32(Request.Form["wish_id"]);
                int   access_type  = Convert.ToInt32(Request.Form["access_type"]);

                Wish_report_relation wrr = db.Wish_report_relation.Where(x => x.wrr_wish_id == wish_id).SingleOrDefault();

                if (wrr == null)
                {
                    result = 1;
                    return(Json(result, JsonRequestBehavior.AllowGet));
                }

                wrr.wrr_access_type = (short)access_type;

                //Выбранные пользователи
                if (access_type == 2)
                {
                    List <Wish_user_relation> Wur = new List <Wish_user_relation>();

                    foreach (Wish_user_relation wur in db.Wish_user_relation.Where(x => x.wur_wish_id == wish_id))
                    {
                        Wur.Add(wur);
                    }

                    foreach (Users user in db.Users)
                    {
                        if (Access_users.Contains(user.user_id))
                        {
                            if (Wur.Find(x => x.wur_user_id == user.user_id) == null)
                            {
                                db.Wish_user_relation.Add(new Wish_user_relation()
                                {
                                    wur_user_id = user.user_id, wur_wish_id = wish_id
                                });
                            }
                        }
                        else
                        {
                            if (Wur.Find(x => x.wur_user_id == user.user_id) != null)
                            {
                                db.Wish_user_relation.Remove(Wur.Find(x => x.wur_user_id == user.user_id));
                            }
                        }
                    }
                }
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(Json(result, JsonRequestBehavior.AllowGet));
        }