void Browse_Organization::UpdateFunc()
{
    QSqlQuery Query(Global.DataBase);
    QString SearchString = QuoteString(FilterBy->text().trimmed());
    QString Where = "";
    QString QueryString;
    QStringList SearchList;

    Where = SearchPrepare(
                "  POSITION (LOWER(?) IN LOWER(o.\"Name\")) > 0 OR "
                "  POSITION (LOWER(?) IN LOWER(o.\"Phone\")) > 0 OR "
                "  POSITION (LOWER(?) IN LOWER(o.\"Contact\")) > 0 ",
                &SearchList, SearchString);

    QueryString =
                "SELECT * "
                "FROM public.\"Organization\" AS o " +
                Where+
                OrderBy;
    Query.prepare(QueryString);
    SearchBind(SearchList,&Query,3);
    if (!Query.exec()) { GuiSqlError("Ошибка при работе с БД!"); return; }
    Model->setQuery(Query);
    Model->setHeaderData(1,Qt::Horizontal,tr("Наименование"));
    Model->setHeaderData(2,Qt::Horizontal,tr("Телефон"));
    Model->setHeaderData(4,Qt::Horizontal,tr("Контактное лицо"));
    Table->setModel(Model);
    Table->setColumnHidden(0,true);
    Table->setColumnHidden(3,true);
    Table->setColumnHidden(5,true);
    TuneTable(Table);
    Table->resizeColumnsToContents();
    Table->horizontalHeader()->setSectionResizeMode(1,QHeaderView::Stretch);
    Table->setSortingEnabled(true);
    Table->horizontalHeader()->setSortIndicator(SortColumn, SortOrder);
    connect(Table->selectionModel(),SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),this,SLOT(SlotCurChanged(QModelIndex,QModelIndex)));
    int SelRow = FindRow((QSqlQueryModel*)(Table->model()),Cur);
    Table->selectRow(SelRow);
}
Exemple #2
0
void Browse_User::UpdateFunc()
{
    QSqlQuery Query(Global.DataBase);
    QString SearchString = QuoteString(FilterBy->text().trimmed());
    QString Where = "";
    QString QueryString;
    QStringList SearchList;

    if (Mode == buWidget) {
        Where = SearchPrepare(
                    "  POSITION (LOWER(?) IN LOWER(f.\"Name\")) > 0 OR "
                    "  POSITION (LOWER(?) IN LOWER(f.\"Role\")) > 0 OR  "
                    "  POSITION (LOWER(?) IN LOWER(to_char(f.\"StartDate\"::date ,'DD.MM.YYYY' ))) > 0 OR  "
                    "  POSITION (LOWER(?) IN LOWER(f.\"StopDate\")) > 0 OR  "
                    "  POSITION (LOWER(?) IN LOWER(f.\"Position\")) > 0 ",
                &SearchList, SearchString);

        QString QueryString =
                "SELECT * FROM ("
                " SELECT "
                "  u.\"Id\" AS \"Id\", "
                "  u.\"Name\" AS \"Name\", "
                "  COALESCE(r.\"Name\",'-') AS \"Role\", "
                "  u.\"StartDate\" AS \"StartDate\", "
                "  CASE WHEN (u.\"StopDate\" = to_date('1980-01-01', 'YYYY-MM-DD')) THEN 'в штате' ELSE to_char(u.\"StopDate\",'DD-MM-YYYY') END AS \"StopDate\", "
                "  COALESCE(d.\"Name\",'-') AS \"Position\", "
                "  u.\"LongName\" AS \"LongName\" "
                " FROM public.\"Users\" as u "
                " LEFT OUTER JOIN public.\"Rubricator\" AS r ON (r.\"GroupId\" = 1 AND r.\"Id\" = u.\"Role\") "
                " LEFT OUTER JOIN public.\"Rubricator\" AS d ON (d.\"GroupId\" = 2 AND d.\"Id\" = u.\"Position\") "
                " GROUP BY u.\"Id\", r.\"Name\", d.\"Name\" "
                ") AS f "
                +Where
                +OrderBy;
        Query.prepare(QueryString);
        SearchBind(SearchList,&Query,5);
        if (!Query.exec()) { GuiSqlError("Ошибка при работе с БД!"); return; }
        Model->setQuery(Query);
        Model->setHeaderData(0,Qt::Horizontal,tr("Ид"));
        Model->setHeaderData(1,Qt::Horizontal,tr("ФИО"));
        Model->setHeaderData(2,Qt::Horizontal,tr("Права"));
        Model->setHeaderData(3,Qt::Horizontal,tr("Прием"));
        Model->setHeaderData(4,Qt::Horizontal,tr("Увольнение"));
        Model->setHeaderData(5,Qt::Horizontal,tr("Подразделение"));
        Model->setHeaderData(6,Qt::Horizontal,tr("ФИО(полностью)"));

        Table->setModel(Model);
        Table->setItemDelegate(new NotEditableDelegate());
        Table->setColumnHidden(0,true);
        Table->setColumnHidden(6,true);
        TuneTable(Table);
        Table->setSortingEnabled(true);
        Table->horizontalHeader()->setSortIndicator(SortColumn, SortOrder);
        Table->resizeColumnsToContents();
        Table->horizontalHeader()->setSectionResizeMode(1,QHeaderView::Stretch);
    }
    if (Mode == buService) {
        Where = SearchPrepare(
                    " POSITION (LOWER(?) IN LOWER(f.\"Name\")) > 0",
                &SearchList, SearchString);

        QueryString =
                "SELECT * FROM ( "
                "  SELECT u.\"Id\" AS \"Id\", "
                "  u.\"Name\" AS \"Name\" "
                "  FROM public.\"Users\" AS u, public.\"Service2Users\" AS s "
                "  WHERE u.\"Id\" = s.\"User\" AND s.\"Service\" ="+(*Ref)["Id"].toString()+" "
                ") AS f "
                +Where
                +OrderBy;
        Query.prepare(QueryString);
        SearchBind(SearchList,&Query,1);
        if (!Query.exec()) { GuiSqlError("Ошибка при работе с БД!"); return; }
        Model->setQuery(Query);
        Model->setHeaderData(0,Qt::Horizontal,tr("Ид"));
        Model->setHeaderData(1,Qt::Horizontal,tr("ФИО"));
        Table->setModel(Model);
        Table->setColumnHidden(0,true);
        TuneTable(Table);
        Table->setSortingEnabled(true);
        Table->horizontalHeader()->setSortIndicator(SortColumn, SortOrder);
        Table->resizeColumnsToContents();
        Table->horizontalHeader()->setSectionResizeMode(1,QHeaderView::Stretch);
    }
    if (Mode == buSelect) {
        Where = SearchPrepare(
                    " POSITION (LOWER(?) IN LOWER(f.\"Name\")) > 0",
                &SearchList, SearchString);


        QueryString =
                " SELECT * FROM ( "
                " SELECT u.\"Id\", u.\"Name\" FROM public.\"Users\" AS u "
                " WHERE u.\"Id\" NOT IN ( "
                "   SELECT u1.\"Id\" FROM public.\"Users\" AS u1, public.\"Service2Users\" AS s "
                "   WHERE s.\"Service\" = 1 AND s.\"User\" = u1.\"Id\" "
                " )) AS f "
                +Where
                +OrderBy;
        Query.prepare(QueryString);
        SearchBind(SearchList,&Query,1);
        if (!Query.exec()) { GuiSqlError("Ошибка при работе с БД!"); return; }
        Model->setQuery(Query);
        Model->setHeaderData(0,Qt::Horizontal,tr("Ид"));
        Model->setHeaderData(1,Qt::Horizontal,tr("ФИО"));
        Table->setModel(Model);
        Table->setColumnHidden(0,true);
        TuneTable(Table);
        Table->setSortingEnabled(true);
        Table->horizontalHeader()->setSortIndicator(SortColumn, SortOrder);
        Table->resizeColumnsToContents();
        Table->horizontalHeader()->setSectionResizeMode(1,QHeaderView::Stretch);
    }

    connect(Table->selectionModel(),SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),this,SLOT(SlotCurChanged(QModelIndex,QModelIndex)));
    int SelRow = FindRow((QSqlQueryModel*)(Table->model()),Cur);
    Table->selectRow(SelRow);
}
static void Filter(const wchar_t *sFilter, bool bCaseSensitive)
{
	if (sFilter!=NULL) {
		size_t nFilter = wcslen(sFilter);
		if (nFilter>0xFFFF) nFilter = 0xFFFF;
		wchar_t *sFilterLower=NULL;
		EditorUndoRedo eur = {sizeof(EditorUndoRedo)};
		EditorSetPosition es = {sizeof(EditorSetPosition)};
		char *Lines; //маска удалённых строк

		Lines = MakeLineMask();
		StackPush(Lines);

		if (nFilter<=MAX_PATTERN_LEN) {
			SearchPrepare(ctx, sFilter, bCaseSensitive);
		}
		else {
			SearchHPrepare(ctx, sFilter, (WORD)nFilter, bCaseSensitive);
			if (!bCaseSensitive) {
				SetLength(&sFilterLower, (int)nFilter);
				wcscpy(sFilterLower, sFilter);
				CharLower(sFilterLower);
			}
		}
		//непустой фильтр - создаём блок Undo и меняем текст внутри него
		eur.Command=EUR_BEGIN;
		Info.EditorControl(-1, ECTL_UNDOREDO, 0, &eur);

		//ищем текст из диалога в каждой строке
		EditorInfo einfo = {sizeof(EditorInfo)};
		Info.EditorControl(-1, ECTL_GETINFO, 0, &einfo);
		intptr_t nLines = einfo.TotalLines;
		intptr_t line = nLines;
		es.CurPos = 0;
		es.CurTabPos = es.LeftPos = es.Overtype = es.TopScreenLine = -1;
		while (--line>=0) {
			es.CurLine = line;
			Info.EditorControl(-1, ECTL_SETPOSITION, 0, &es);

			EditorGetString egs = {sizeof(EditorGetString), -1};
			Info.EditorControl(-1, ECTL_GETSTRING, 0, &egs);
			const wchar_t *found;
			if (nFilter <= MAX_PATTERN_LEN)
				found = Search(ctx, egs.StringText);
			else
				found = SearchH(ctx,
					bCaseSensitive ? sFilter : sFilterLower,
					(WORD)nFilter,
					egs.StringText,
					egs.StringLength,
					bCaseSensitive);
			if (found==NULL) {
				Info.EditorControl(-1, ECTL_DELETESTRING, 0, NULL);
				MarkDeletedLine(Lines, line);
			}
		}

		es.CurLine = 0;
		es.CurPos = 0;
		es.TopScreenLine = 0;
		es.CurTabPos = es.LeftPos = es.Overtype = -1;
		Info.EditorControl(-1, ECTL_SETPOSITION, 0, &es);

		RemoveHighlight();

		eur.Command=EUR_END;
		Info.EditorControl(-1, ECTL_UNDOREDO, 0, &eur);

		nChanges++;
		if (nFilter<=MAX_PATTERN_LEN) {
			SearchUnprepare(ctx,sFilter,bCaseSensitive);
		}
		else {
			if (!bCaseSensitive)
				SetLength(&sFilterLower, 0);
		}
	}
}