예제 #1
0
        public int GetFieldIdForCard(CollectedCards card)
        {
            ChancelerryDBDataContext chancDB = new ChancelerryDBDataContext();
            int    valueToreturn             = 0;
            Fields mainFieldInRegister       = (from a in chancDB.Fields
                                                join b in chancDB.FieldsGroups
                                                on a.fk_fieldsGroup equals b.fieldsGroupID
                                                join c in chancDB.RegistersModels
                                                on b.fk_registerModel equals c.registerModelID
                                                join d in chancDB.Registers
                                                on c.registerModelID equals d.fk_registersModel
                                                where d.registerID == card.fk_register &&
                                                (a.type == "autoIncrementReadonly" || a.type == "autoIncrement")
                                                select a).FirstOrDefault();

            if (mainFieldInRegister != null)
            {
                CollectedFieldsValues collectedId = (from a in chancDB.CollectedFieldsValues
                                                     where a.fk_field == mainFieldInRegister.fieldID &&
                                                     a.fk_collectedCard == card.collectedCardID
                                                     select a).OrderByDescending(mc => mc.version).FirstOrDefault();
                if (collectedId != null)
                {
                    Int32.TryParse(collectedId.valueText, out valueToreturn);
                }
            }
            return(valueToreturn);
        }
예제 #2
0
        protected void LogIn(object sender, EventArgs e)
        {
            if (IsValid)
            {
                ChancelerryDBDataContext datacontext = new ChancelerryDBDataContext();


                var user = (from u in datacontext.Users where
                            u.login == Email.Text &&
                            u.password == Password.Text &&
                            u.active == true
                            select u).FirstOrDefault();

                if (user != null)
                {
                    Session["userID"] = user.userID;
                    Response.Redirect("~/Default.aspx");
                }
                else
                {
                    FailureText.Text     = "Неверный адрес электронной почты или пароль.";
                    ErrorMessage.Visible = true;
                }
            }
        }
예제 #3
0
        protected void Page_Load(object sender, EventArgs e)
        {
            var UserSer = Session["userID"];

            if (UserSer == null)
            {
                FormsAuthentication.SignOut();
                Session.Abandon();
                Response.Redirect("~/Account/Login.aspx");
            }

            ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext();
            var user = (from u in dataContext.Users
                        where u.userID == (int)UserSer
                        select u).FirstOrDefault();

            if (user != null)
            {
                Session["pageCntrl"] = 0;
                Directions(user);
            }

            else
            {
                FormsAuthentication.SignOut();
                Session.Abandon();
                Response.Redirect("~/Account/Login.aspx");
            }
        }
예제 #4
0
        protected void Page_Load(object sender, EventArgs e)
        {
            var userID = Session["userID"];

            if (userID == null)
            {
                Response.Redirect("~/Default.aspx");
            }
            /////////////////////////////////////////////////////////////////////
            ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext();
            // Забираем только прикрепленные реестры в  RegUsrMap для данного пользователя и проверяем на активность в Registers.
            var registers = (from rum in dataContext.RegistersUsersMap
                             join reg in dataContext.Registers on rum.fk_register equals reg.registerID
                             where reg.active && rum.active && rum.fk_user == (int)userID
                             select new { reg.registerID, reg.name }).ToList();

            GridViewRegisters.DataSource = registers;

            BoundField boundField = new BoundField();

            boundField.DataField  = "registerID";
            boundField.HeaderText = "ID";
            boundField.Visible    = false;
            GridViewRegisters.Columns.Add(boundField);

            ButtonField coluButtonField = new ButtonField();

            coluButtonField.DataTextField = "name";
            coluButtonField.HeaderText    = "Реестры документов";
            coluButtonField.ButtonType    = ButtonType.Link;
            coluButtonField.CommandName   = "Link";

            GridViewRegisters.Columns.Add(coluButtonField);
            DataBind();
        }
예제 #5
0
        protected void Button1_Click(object sender, EventArgs e)
        {
            int    rowIndex = 0;
            Button button   = (Button)sender;

            using (ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext())
            {
                // Запись в RegisterUserMap для данного пользователя и реестра
                var regUsrMap = (from a in dataContext.RegistersUsersMap
                                 where a.fk_register == (int)Session["registerID"] && a.fk_user == (int)Session["userID"]
                                 select a).FirstOrDefault();

                if (ViewState["Gridview1"] != null)
                {
                    DataTable dataTable = (DataTable)ViewState["Gridview1"];
                    // Проходим по всей таблице
                    if (dataTable.Rows.Count > 0)
                    {
                        for (int i = 1; i <= dataTable.Rows.Count; i++)
                        {
                            // Находим компоненты
                            Label    fieldId     = (Label)GridView1.Rows[rowIndex].FindControl("fieldId");
                            TextBox  fieldName   = (TextBox)GridView1.Rows[rowIndex].FindControl("fieldName");
                            TextBox  fieldWeight = (TextBox)GridView1.Rows[rowIndex].FindControl("fieldWeight");
                            CheckBox fieldIsAdd  = (CheckBox)GridView1.Rows[rowIndex].FindControl("fieldIsAdd");

                            // Запрос на существование записи в ТАБЛИЦЕ(БД) registersView с параметрами из таблицы
                            RegistersView registersView = (from a in dataContext.RegistersView
                                                           where
                                                           a.fk_registersUsersMap == regUsrMap.registersUsersMapID &&
                                                           a.fk_field == Convert.ToInt32(fieldId.Text)
                                                           select a).FirstOrDefault();

                            // Если такая запись в ТАБЛИЦЕ существует, то присваиваем значения active и weight из таблицы(на странице)
                            if (registersView != null)
                            {
                                registersView.active = fieldIsAdd.Checked;
                                registersView.weight = Convert.ToDouble(fieldWeight.Text);
                            }
                            else
                            {
                                // Если нет, то создаем новую запись в таблице RegistersView  с параметрами из таблицы
                                registersView        = new RegistersView();
                                registersView.active = true;
                                registersView.fk_registersUsersMap = regUsrMap.registersUsersMapID;
                                registersView.fk_field             = Convert.ToInt32(fieldId.Text);
                                registersView.weight = Convert.ToDouble(fieldWeight.Text);
                                dataContext.RegistersView.InsertOnSubmit(registersView);
                            }
                            dataContext.SubmitChanges();


                            rowIndex++;
                        }
                    }
                }
            }
            Response.Redirect("RegisterView.aspx");
        }
예제 #6
0
        protected void Button3_Click(object sender, EventArgs e)
        {
            ChancelerryDBDataContext chancDB        = new ChancelerryDBDataContext();
            List <CollectedCards>    collectedCards = (from a in chancDB.CollectedCards select a).ToList();

            foreach (CollectedCards currentCard in collectedCards)
            {
                currentCard.mainFieldId = GetFieldIdForCard(currentCard);
            }
            chancDB.SubmitChanges();
        }
예제 #7
0
        public int addCard(int fkRegister)
        {
            ChancelerryDBDataContext chancDB = new ChancelerryDBDataContext();
            CollectedCards           newCard = new CollectedCards();

            newCard.active      = true;
            newCard.fk_register = fkRegister;
            chancDB.CollectedCards.InsertOnSubmit(newCard);
            chancDB.SubmitChanges();
            return(newCard.collectedCardID);
        }
        public Table CreateTable(int dictionaryId)
        {
            Table tableToReturn = new Table();
            ChancelerryDBDataContext chancDb   = new ChancelerryDBDataContext();
            List <DictionarysValues> allValues = (from a in chancDb.DictionarysValues
                                                  where a.active == true &&
                                                  a.fk_dictionary == dictionaryId
                                                  select a).Distinct().ToList();

            foreach (DictionarysValues currentValue in allValues)
            {
                TableRow currentTableRow = new TableRow();
                {
                    TableCell currentTableCell1 = new TableCell();
                    {
                        currentTableCell1.Width = 600;
                        TextBox valueTextBox = new TextBox();
                        valueTextBox.ID = "dictValue_" + currentValue.dictionaryValueID.ToString();
                        valueTextBox.Attributes.Add("name", valueTextBox.ID);
                        valueTextBox.Width = 600;
                        valueTextBox.Style.Add("max-width", "100%");
                        valueTextBox.Text = currentValue.value;
                        currentTableCell1.Controls.Add(valueTextBox);
                    }
                    TableCell currentTableCell2 = new TableCell();
                    {
                        ImageButton deleteButton = new ImageButton();
                        deleteButton.ImageUrl        = "~/kanz/icons/delButtonIcon.jpg";
                        deleteButton.Height          = 20;
                        deleteButton.Width           = 20;
                        deleteButton.CommandArgument = currentValue.dictionaryValueID.ToString();
                        deleteButton.Click          += DelValueButtonClick;
                        currentTableCell2.Controls.Add(deleteButton);
                    }
                    TableCell currentTableCell3 = new TableCell();
                    {
                        ImageButton saveButton = new ImageButton();
                        saveButton.ImageUrl        = "~/kanz/icons/saveButtonIcon.jpg";
                        saveButton.Height          = 20;
                        saveButton.Width           = 20;
                        saveButton.CommandArgument = currentValue.dictionaryValueID.ToString();
                        saveButton.Click          += SaveValueButtonClick;
                        currentTableCell3.Controls.Add(saveButton);
                    }
                    currentTableRow.Cells.Add(currentTableCell1);
                    currentTableRow.Cells.Add(currentTableCell2);
                    currentTableRow.Cells.Add(currentTableCell3);
                }
                tableToReturn.Rows.Add(currentTableRow);
            }

            return(tableToReturn);
        }
        protected void AddValue_Click(object sender, ImageClickEventArgs e)
        {
            ChancelerryDBDataContext chancDb  = new ChancelerryDBDataContext();
            DictionarysValues        newValue = new DictionarysValues();

            newValue.active        = true;
            newValue.fk_dictionary = Convert.ToInt32(DictionarysList.SelectedValue);
            newValue.value         = " ";
            chancDb.DictionarysValues.InsertOnSubmit(newValue);
            chancDb.SubmitChanges();
            divForTable.Controls.Clear();
            divForTable.Controls.Add(CreateTable(Convert.ToInt32(DictionarysList.SelectedValue)));
        }
예제 #10
0
        public void createFieldValue(int fkCard, int fkField, string value, int instance)
        {
            ChancelerryDBDataContext chancDB  = new ChancelerryDBDataContext();
            CollectedFieldsValues    newValue = new CollectedFieldsValues();

            newValue.active           = true;
            newValue.fk_collectedCard = fkCard;
            newValue.fk_field         = fkField;
            newValue.fk_user          = 1;
            newValue.valueText        = value;
            newValue.createDateTime   = DateTime.Now;
            newValue.isDeleted        = false;
            newValue.version          = 1;
            newValue.instance         = instance;
            chancDB.CollectedFieldsValues.InsertOnSubmit(newValue);
            chancDB.SubmitChanges();
        }
        public void DelValueButtonClick(object sender, EventArgs e)
        {
            ImageButton delButton                  = (ImageButton)sender;
            int         id                         = Convert.ToInt32(delButton.CommandArgument);
            ChancelerryDBDataContext chancDb       = new ChancelerryDBDataContext();
            DictionarysValues        currentValues = (from a in chancDb.DictionarysValues
                                                      where a.dictionaryValueID == id
                                                      select a).FirstOrDefault();

            if (currentValues != null)
            {
                currentValues.active = false;
                chancDb.SubmitChanges();
            }
            divForTable.Controls.Clear();
            divForTable.Controls.Add(CreateTable(Convert.ToInt32(DictionarysList.SelectedValue)));
        }
        public void SaveValueButtonClick(object sender, EventArgs e)
        {
            ImageButton saveButton                 = (ImageButton)sender;
            int         id                         = Convert.ToInt32(saveButton.CommandArgument);
            ChancelerryDBDataContext chancDb       = new ChancelerryDBDataContext();
            DictionarysValues        currentValues = (from a in chancDb.DictionarysValues
                                                      where a.dictionaryValueID == id
                                                      select a).FirstOrDefault();

            if (currentValues != null)
            {
                TextBox myTextBox = (TextBox)divForTable.FindControl("dictValue_" + id);
                currentValues.value = myTextBox.Text;
                chancDb.SubmitChanges();
            }
            divForTable.Controls.Clear();
            divForTable.Controls.Add(CreateTable(Convert.ToInt32(DictionarysList.SelectedValue)));
        }
 protected void Page_Load(object sender, EventArgs e)
 {
     if (!Page.IsPostBack)
     {
         ChancelerryDBDataContext chancDb      = new ChancelerryDBDataContext();
         List <Dictionarys>       dictionaryse = (from a in chancDb.Dictionarys
                                                  where a.active == true
                                                  select a).ToList();
         DictionarysList.Items.Clear();
         foreach (Dictionarys currentDictionary in dictionaryse)
         {
             ListItem tmpListItem = new ListItem();
             tmpListItem.Text  = currentDictionary.name;
             tmpListItem.Value = currentDictionary.dictionaryID.ToString();
             DictionarysList.Items.Add(tmpListItem);
         }
     }
     divForTable.Controls.Clear();
     divForTable.Controls.Add(CreateTable(Convert.ToInt32(DictionarysList.SelectedValue)));
 }
예제 #14
0
        protected void GridViewRegisters_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext();

            switch (e.CommandName)
            {
            case "Link":
            {
                var registers = (from rum in dataContext.RegistersUsersMap
                                 join reg in dataContext.Registers on rum.fk_register equals reg.registerID

                                 where reg.active && rum.active && rum.fk_user == (int)Session["userID"]
                                 select new { reg.registerID, reg.name }).ToList();
                // CommandArgument - номер строки.
                Session["registerID"]  = registers[Convert.ToInt32(e.CommandArgument)].registerID;
                Session["searchList"]  = new List <TableActions.SearchValues>();
                Session["vSearchList"] = null;
                Response.Redirect("RegisterView.aspx");
            }
            break;
            }
        }
예제 #15
0
        private void DeleteCard(object sender, EventArgs e)
        {
            ImageButton thisButton    = (ImageButton)sender;
            int         currentCardId = Convert.ToInt32(thisButton.Attributes["_cardID"]);

            HttpContext.Current.Session["cardID"] = currentCardId;

            ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext();

            var card = (from c in dataContext.CollectedCards
                        where
                        c.fk_register == (int)HttpContext.Current.Session["registerID"] &&
                        c.collectedCardID == currentCardId
                        select c).FirstOrDefault();

            if (card != null)
            {
                card.active = false;
            }

            dataContext.SubmitChanges();

            HttpContext.Current.Response.Redirect("~/kanz/RegisterView.aspx", true);
        }
예제 #16
0
        protected void Page_Load(object sender, EventArgs e)
        {
            var userID = Session["userID"];

            if (userID == null)
            {
                Response.Redirect("~/Default.aspx");
            }
            ///////////////////////////////////////////
            if (!Page.IsPostBack)
            {
                Session["searchList"] = new List <TableActions.SearchValues>();
                DataTable dataTable = new DataTable();
                dataTable.Columns.Add(new DataColumn("fieldId", typeof(int)));
                dataTable.Columns.Add(new DataColumn("fieldName", typeof(string)));
                dataTable.Columns.Add(new DataColumn("fieldWeight", typeof(double)));
                dataTable.Columns.Add(new DataColumn("fieldIsAdd", typeof(bool)));

                using (ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext())
                {
                    //кусок Ваге // создаем для пользователя все связи к выбранному регистру если их нет
                    List <Fields> allFieldsInTable = (from a in dataContext.Fields
                                                      join b in dataContext.FieldsGroups
                                                      on a.fk_fieldsGroup equals b.fieldsGroupID
                                                      join c in dataContext.RegistersModels
                                                      on b.fk_registerModel equals c.registerModelID
                                                      join d in dataContext.Registers
                                                      on c.registerModelID equals d.fk_registersModel
                                                      where a.active == true &&
                                                      b.active == true &&
                                                      c.active == true &&
                                                      d.active == true &&
                                                      d.registerID == (int)Session["registerID"]
                                                      select a).Distinct().ToList();
                    List <Fields> allFieldsWithUser = (from a in dataContext.Fields
                                                       join b in dataContext.RegistersView on a.fieldID equals b.fk_field
                                                       join c in dataContext.RegistersUsersMap on b.fk_registersUsersMap equals c.registersUsersMapID
                                                       where
                                                       a.active == true &&
                                                       c.active == true
                                                       // && b.active == tr
                                                       && c.fk_register == (int)Session["registerID"] &&
                                                       c.fk_user == (int)Session["userID"]
                                                       select a).ToList();
                    RegistersUsersMap registerUserMap = (from a in dataContext.RegistersUsersMap
                                                         where a.active &&
                                                         a.fk_user == (int)Session["userID"] &&
                                                         a.fk_register == (int)Session["registerID"]
                                                         select a).FirstOrDefault();


                    foreach (Fields currentField in allFieldsInTable)
                    {
                        if (allFieldsWithUser.Contains(currentField))
                        {
                            continue;
                        }
                        else
                        {
                            RegistersView registersView = new RegistersView();
                            registersView.active = true;
                            registersView.fk_registersUsersMap = registerUserMap.registersUsersMapID;
                            registersView.fk_field             = currentField.fieldID;
                            registersView.weight = 0;
                            dataContext.RegistersView.InsertOnSubmit(registersView);
                            dataContext.SubmitChanges();
                        }
                    }

                    /*
                     * // Кусок Ваге окончен :)
                     * // Все возможные поля для таблицы в данном реестре
                     * var all = (from a in dataContext.Fields
                     *           join b in dataContext.RegistersView on a.fieldID equals b.fk_field
                     *           join c in dataContext.RegistersUsersMap on b.fk_registersUsersMap equals c.registersUsersMapID
                     *           where c.fk_register == (int)Session["registerID"]
                     *           select new {a.fieldID, a.name, b.weight}).Distinct();
                     *
                     * // Уже прикрученные поля к этому пользователю
                     * var userView = (from a in dataContext.Fields
                     *    join b in dataContext.RegistersView on a.fieldID equals b.fk_field
                     *    join c in dataContext.RegistersUsersMap on b.fk_registersUsersMap equals c.registersUsersMapID
                     *    where c.fk_register == (int)Session["registerID"] && c.fk_user == (int)Session["userID"] && b.active
                     *    select a.fieldID).Distinct().ToList();
                     *
                     * var allCross = new List<ViewFieldData>();
                     *
                     * // Проходим по всем полям
                     * foreach (var qwe in all)
                     * {
                     *    // Если это поле прикручено к таблице этого реестра и этому пользователю в ТАБЛИЦЕ RegisterView, то отмечаем его с галочкой Checked true
                     *    allCross.Add(userView.Contains(qwe.fieldID)
                     *        ? new ViewFieldData()
                     *        {
                     *            id = qwe.fieldID,
                     *            name = qwe.name,
                     *            weight = qwe.weight,
                     *            isAdd = true
                     *        }
                     *        // если нет то с галочкой UnChecked false
                     *        : new ViewFieldData()
                     *        {
                     *            id = qwe.fieldID,
                     *            name = qwe.name,
                     *            weight = qwe.weight,
                     *            isAdd = false
                     *        });
                     * }
                     *
                     * // Проходим по allCross, добавляем дааные из него в таблицу
                     *
                     * foreach (var item in allCross)
                     * {
                     *    DataRow dataRow = dataTable.NewRow();
                     *    dataRow["fieldId"] = item.id;
                     *    dataRow["fieldName"] = item.name;
                     *    dataRow["fieldWeight"] = item.weight;
                     *    dataRow["fieldIsAdd"] = item.isAdd;
                     *    dataTable.Rows.Add(dataRow);
                     * }
                     */

                    foreach (var item in allFieldsWithUser)
                    {
                        DataRow dataRow = dataTable.NewRow();
                        dataRow["fieldId"]     = item.fieldID;
                        dataRow["fieldName"]   = item.name;
                        dataRow["fieldWeight"] = (from a in dataContext.RegistersView
                                                  where
                                                  a.fk_registersUsersMap == registerUserMap.registersUsersMapID &&
                                                  a.fk_field == item.fieldID
                                                  //&& a.active == true
                                                  select a.weight).FirstOrDefault();
                        dataRow["fieldIsAdd"] = (from a in dataContext.RegistersView
                                                 where
                                                 a.fk_registersUsersMap == registerUserMap.registersUsersMapID &&
                                                 a.fk_field == item.fieldID
                                                 //&& a.active == true
                                                 select a.active).FirstOrDefault();
                        dataTable.Rows.Add(dataRow);
                    }

                    GridView1.DataSource   = dataTable;
                    ViewState["Gridview1"] = dataTable;
                    GridView1.DataBind();
                }
            }
        }
예제 #17
0
        protected void Page_Load(object sender, EventArgs e)
        {
            var userID = Session["userID"];

            if (userID == null)
            {
                Response.Redirect("~/Default.aspx");
            }
            else
            {
                ViewState["userID"] = userID;
            }

            /////////////////////////////////////////////////////////////////////

            var regId = Session["registerID"];
            ChancelerryDBDataContext dataContext = new ChancelerryDBDataContext();
            TableActions             ta          = new TableActions();

            var register =
                (from r in dataContext.Registers
                 where r.registerID == Convert.ToInt32(regId)
                 select r).FirstOrDefault();


            if (register != null)
            {
                RegisterNameLabel.Text = register.name;


                if (vVersion)
                {
                    int size = 100;
                    if (Request.QueryString["page"] != null)
                    {
                        Int32.TryParse(Request.QueryString["page"], out page);
                    }

                    Dictionary <int, string> vSearchList         = (Dictionary <int, string>)Session["vSearchList"];
                    CardCommonFunctions      cardCommonFunctions = new CardCommonFunctions();

                    string sum = cardCommonFunctions.FastSearch(vSearchList, register.registerID, Convert.ToInt32(userID), dataTable, page * size, (page + 1) * size);
                    Button5.Visible        = true;
                    Button6.Visible        = true;
                    Button7.Visible        = false;
                    Button8.Visible        = false;
                    BottomButton9.Visible  = false;
                    BottomButton10.Visible = true;
                    BottomButton11.Visible = true;
                    BottomButton12.Visible = false;
                    string page_info = sum;
                    PageNumberLabel.Text       = page_info;
                    BottomPageNumberLabel.Text = page_info;
                }
                else
                {
                    ta.RefreshTable(dataContext, Convert.ToInt32(ViewState["userID"]), register, regId, dataTable, (Dictionary <int, string>)Session["vSearchList"]);
                    TableActions.DTable = dataTable;


                    string page_info = "Cтраница: " + ((int)Session["pageCntrl"] + 1).ToString() + "/" + (int)Session["pageCount"] + ". Всего: " + (int)Session["cardsCount"];
                    PageNumberLabel.Text       = page_info;
                    BottomPageNumberLabel.Text = page_info;
                }
            }
        }
예제 #18
0
        public void RefreshTable(ChancelerryDBDataContext dataContext, object userID, Registers register, object regId, Table dataTable, List <SearchValues> searchList)
        {
            dataTable.Rows.Clear();
            bool addToTable = true;

            // Достаем поля для данного реестра и пользователя на основе RegisterView и прав пользователя RegistersUsersMap c сортировкой по весу
            var fieldsAll = (from regUsrMap in dataContext.RegistersUsersMap
                             join regView in dataContext.RegistersView on regUsrMap.registersUsersMapID equals regView.fk_registersUsersMap
                             join _fields in dataContext.Fields on regView.fk_field equals _fields.fieldID
                             where regUsrMap.fk_user == Convert.ToInt32(userID) && regUsrMap.fk_register == register.registerID
                             select new { _fields.name, _fields.fieldID, regView.weight }).OrderBy(w => w.weight).ToList();

            var fieldsName = (from f in fieldsAll select f.name).ToList();
            var fieldsId   = (from f in fieldsAll select f.fieldID).ToList();


            // Поиск
            dataTable.Rows.Add(AddSearchHeaderRoFromList(fieldsId));

            // Заголовки
            dataTable.Rows.Add(AddHeaderRoFromList(fieldsName));

            // Карточки этого реестра
            var cards = (from card in dataContext.CollectedCards
                         join r in dataContext.Registers on card.fk_register equals r.registerID
                         where r.registerID == Convert.ToInt32(regId)
                         select card.collectedCardID).ToList();


            // по всем карточкам
            foreach (var card in cards)
            {
                List <string> cardRow = new List <string>();

                // GetValue(fieldsId, dataContext, card, cardRow); // функция добавления значения Row для каждой карточки и поля


                foreach (var field in fieldsId) // проходим по каждому полю в карточке card
                {
                    addToTable = true;
                    StringBuilder  fieldInstancesValue = new StringBuilder();
                    List <DataOne> query = new List <DataOne>();

                    // Если в поисковом листе что-то есть
                    if (searchList.Any())
                    {
                        // Получаем объект из поискового листа для данного поля с Id = fieldId
                        var searchObj = (from a in searchList where a.fieldId == field select a).FirstOrDefault();

                        // Если данное поле с Id = fieldId есть в поисковом листе
                        if (searchObj != null)
                        {
                            // Получаем объект данного поля с поисковым фильтром // сотношение поля и  карточки в collected (получаем поле с его инстансами и версией)
                            query = (from a in dataContext.CollectedFieldsValues
                                     where a.fk_field == field && a.fk_collectedCard == card && a.valueText.Contains(searchObj.value)
                                     select new DataOne()
                            {
                                textValue = a.valueText,
                                instance = a.instance,
                                version = a.version,
                                deleted = a.isDeleted
                            }).ToList();

                            // Если объект поля с поисковым фильтром НЕ существует
                            if (!query.Any())
                            {
                                // Определяем флаг добавления этого Row как false, выходим с итерации.
                                addToTable = false;
                                break;
                            }
                        }
                        // Если поля с Id = fieldId НЕТ в поисковом листе,
                        else
                        {
                            // Получаем объект данного поля // сотношение поля и  карточки в collected (получаем поле с его инстансами и версией)
                            query = (from a in dataContext.CollectedFieldsValues
                                     where a.fk_field == field && a.fk_collectedCard == card
                                     select new DataOne()
                            {
                                textValue = a.valueText,
                                instance = a.instance,
                                version = a.version,
                                deleted = a.isDeleted
                            }).ToList();
                        }
                    }
                    // Если поисковой лист отсутствует
                    else
                    {
                        // сотношение поля и  карточки в collected (получаем поле с его инстансами и версией)
                        query = (from a in dataContext.CollectedFieldsValues
                                 where a.fk_field == field && a.fk_collectedCard == card
                                 select new DataOne()
                        {
                            textValue = a.valueText,
                            instance = a.instance,
                            version = a.version,
                            deleted = a.isDeleted
                        }).ToList();
                    }
                    //var instanceFilter = (from f in query where !f.deleted select new DataOne() { instance = f.instance, version = f.version, textValue = f.textValue, deleted = f.deleted }).OrderByDescending(ver => ver.version).ToList();

                    // Список всех удаленных инстансов
                    var delInst = (from ins in query where ins.deleted select ins.instance).ToList();

                    // Получаем список всех инстансов для данного поля исключая удаленные
                    var instances = (from f in query
                                     where !f.deleted
                                     select f.instance).Distinct().ToList().Except(delInst.Distinct()).ToList();

                    var k = 1; // переменная для отображения порядкового номера инстанса

                    foreach (var instance in instances)
                    {
                        // Забираем максимальное значение(версия) textValue каждого инстанса
                        fieldInstancesValue.Append(
                            k.ToString() + ") " +
                            (from vv in query
                             where vv.instance == instance && !vv.deleted
                             select vv).OrderByDescending(v => v.version)
                            .FirstOrDefault()?.textValue + "<br>");            //если не null за писываем в поле
                        k++;
                    }
                    // Добавляем значения в Row каждого поля
                    cardRow.Add(fieldInstancesValue.ToString());
                }

                if (addToTable)
                {
                    dataTable.Rows.Add(AddRowFromList(cardRow, card)); // Добавляем в таблицу Row
                }
            }
        }
예제 #19
0
        public void RefreshTable(ChancelerryDBDataContext dataContext, object userID, Registers register, object regId, Table dataTable, Dictionary <int, string> searchList)
        {
            dataTable.Rows.Clear();
            // Достаем поля для данного реестра и пользователя на основе RegisterView и прав пользователя RegistersUsersMap c сортировкой по весу
            var fieldsAll = (from regUsrMap in dataContext.RegistersUsersMap
                             join regView in dataContext.RegistersView on regUsrMap.registersUsersMapID equals regView.fk_registersUsersMap
                             join _fields in dataContext.Fields.OrderByDescending(n => n.fieldID == 1) on regView.fk_field equals _fields.fieldID
                             where regUsrMap.fk_user == Convert.ToInt32(userID) && regUsrMap.fk_register == register.registerID && regView.active
                             select new { _fields.name, _fields.fieldID, regView.weight }).OrderBy(w => w.weight).ToList();
            var fieldsName = (from f in fieldsAll select f.name).ToList();
            var fieldsId   = (from f in fieldsAll select f.fieldID).ToList();


            // Поиск
            dataTable.Rows.Add(AddSearchHeaderRoFromList(fieldsId));

            // Заголовки
            dataTable.Rows.Add(AddHeaderRoFromList(fieldsName));

            // Карточки этого реестра + номера документов по которым фильтровать
            var cardsAllFull = (from card in dataContext.CollectedCards
                                join collected in dataContext.CollectedFieldsValues on card.collectedCardID equals collected.fk_collectedCard
                                join field in dataContext.Fields on collected.fk_field equals field.fieldID
                                where card.fk_register == (int)HttpContext.Current.Session["registerID"] &&
                                card.active &&
                                field.type == "autoIncrement"
                                select new DataOne()
            {
                id = card.collectedCardID, textValue = collected.valueText
            }).ToList();                                                                                                // LOG !!! {try catch в каком поле ошибка}

            // добавляем в version конвертированное значение номера документа из string в int для дальнейшего фильтра
            foreach (var itm in cardsAllFull)
            {
                int tmp = 0;                            // V
                Int32.TryParse(itm.textValue, out tmp); //V
                itm.version = tmp;
            }

            List <int> cardsToShow = new List <int>(); // сюда будем складывать карточки которые нужно показать

            /*
             * if (searchList != null) //если фильтры есть
             * {
             *  bool isFirst = true;
             *  foreach (int currentKey in searchList.Keys) // проходимся по каждому фильтру
             *  {
             *      int fieldId = currentKey;
             *      string fieldValue = "";
             *      searchList.TryGetValue(fieldId, out fieldValue);  //достаем айдишник нашего филда
             *
             *      List<int> cardsWithValue = (from a in dataContext.CollectedFieldsValues
             *                                  where a.active == true && a.fk_field == fieldId && a.valueText.Contains(fieldValue)
             *                                  join b in dataContext.CollectedCards on a.fk_collectedCard equals b.collectedCardID
             *                                  where b.active == true
             *                                  select a.fk_collectedCard).Distinct().ToList(); // находим все карточки которые соответсвтуют
             *      List<int> tmpList;
             *      if (isFirst)
             *      {
             *          tmpList = cardsWithValue;
             *      }
             *      else
             *      {
             *          tmpList = (from a in cardsWithValue join b in cardsToShow on a equals b select a).Distinct().ToList();
             *      }
             *      isFirst = false;
             *      cardsToShow = tmpList;
             *  }
             * }
             * else // если фильтров нет, показываем все карточки
             * {
             *  // фильтруем по номерам документов и достаем только ID'шники карточек
             *  cardsToShow = (from a in cardsAllFull select a).OrderByDescending(n => n.version).ToList().Select(card => card.id).Distinct().ToList();
             * }
             */


            //ВАГЕКОД НАЧАЛО
            CardCommonFunctions ccf = new CardCommonFunctions();

            cardsToShow = ccf.GetCardsToShow(searchList, (int)HttpContext.Current.Session["registerID"]);
            //ВАГЕКОД КОНЕЦ

            // SIVAS OPTIMIZATION START
            List <CollectedFieldsValues> collectedFiltered = new List <CollectedFieldsValues>();

            foreach (var c in cardsToShow.Skip((int)HttpContext.Current.Session["pageCntrl"] * 10).Take(10))
            {
                collectedFiltered.AddRange(((from a in dataContext.CollectedFieldsValues where a.fk_collectedCard == c select a).ToList()));
            }
            // SIVAS OPTIMIZATION END

            HttpContext.Current.Session["pageCount"]  = (int)Math.Floor((double)cardsToShow.Count / 10) + 1; // количество страниц таблицы
            HttpContext.Current.Session["cardsCount"] = cardsToShow.Count;


            // Отрисовка //

            // по всем карточкам
            foreach (var card in cardsToShow.Skip((int)HttpContext.Current.Session["pageCntrl"] * 10).Take(10).ToList())
            {
                List <string> cardRow = new List <string>();

                foreach (var field in fieldsId)                              // проходим по каждому полю в карточке card
                {
                    StringBuilder fieldInstancesValue = new StringBuilder(); // сюда записываем все инстансы

                    // сотношение поля и  карточки в collected (получаем поле с его инстансами и версией)
                    var query = (from a in collectedFiltered
                                 where a.fk_field == field && a.fk_collectedCard == card
                                 select new DataOne()
                    {
                        textValue = a.valueText,
                        instance = a.instance,
                        version = a.version,
                        deleted = a.isDeleted
                    }).ToList();

                    // Список всех удаленных инстансов
                    var delInst = (from ins in query where ins.deleted select ins.instance).ToList();

                    // Получаем список всех инстансов для данного поля исключая удаленные
                    var instances = (from f in query
                                     where !f.deleted
                                     select f.instance).Distinct().ToList().Except(delInst.Distinct()).ToList();

                    var k = 1; // переменная для отображения порядкового номера инстанса

                    // Если инстанс 1 то отображаем без 1) и br
                    if (instances.Count <= 1)
                    {
                        fieldInstancesValue.Append(
                            (from vv in query
                             where vv.instance == instances[0] && !vv.deleted
                             select vv).OrderByDescending(v => v.version)
                            .FirstOrDefault()?.textValue);
                    }
                    else
                    {
                        foreach (var instance in instances)
                        {
                            // Забираем максимальное значение(версия) textValue каждого инстанса
                            fieldInstancesValue.Append(
                                k.ToString() + ") " +
                                (from vv in query
                                 where vv.instance == instance && !vv.deleted
                                 select vv).OrderByDescending(v => v.version)
                                .FirstOrDefault()?.textValue + "<br>");           //если не null за писываем в поле
                            k++;
                        }
                    }


                    // Добавляем значения в Row каждого поля
                    cardRow.Add(fieldInstancesValue.ToString());
                }

                dataTable.Rows.Add(AddRowFromList(cardRow, card));     // Добавляем в таблицу Row
            }
        }