Timesheets-Server
Timesheets server
Načítám...
Vyhledávám...
Nebylo nic nalezeno
Dokumentace třídy Db::Plugins::DatabasePluginPostgres
Diagram dědičnosti pro třídu Db::Plugins::DatabasePluginPostgres:
Db::Plugins::DatabasePlugin

Veřejné metody

 DatabasePluginPostgres (QObject *)
void setDatabaseName (const QString &x) Q_DECL_OVERRIDE
void setHostname (const QString &x) Q_DECL_OVERRIDE
void setPort (int x) Q_DECL_OVERRIDE
void setUserName (const QString &x) Q_DECL_OVERRIDE
void setPassword (const QString &x) Q_DECL_OVERRIDE
void changePassword (const QString &login, const QString &oldpassword, const QString &newpassword) Q_DECL_OVERRIDE
QList< Dbt::Usersauthenticate (const QString &login, const QString &password) Q_DECL_OVERRIDE
QList< Dbt::Usersusers (int id) Q_DECL_OVERRIDE
QList< Dbt::UsersCategoriesusersCategories (int id, int user, const QString &category) Q_DECL_OVERRIDE
QList< Dbt::Categoriescategories (const QString &id) Q_DECL_OVERRIDE
QList< Dbt::CategoriescategoriesToRoot (const QString &id) Q_DECL_OVERRIDE
QList< Dbt::Categoriessubcategories (const QString &id) Q_DECL_OVERRIDE
QList< Dbt::Categoriessiblingcategories (const QString &id) Q_DECL_OVERRIDE
QList< Dbt::CategoriesOverviewcategoriesOverview (const QStringList &statuses) Q_DECL_OVERRIDE
QList< Dbt::StatusOrderstatusOrder (const QString &id) Q_DECL_OVERRIDE
QList< Dbt::Statusesstatuses (const QString &) Q_DECL_OVERRIDE
QList< Dbt::Statusesstatuses (const QString &, const QString &) Q_DECL_OVERRIDE
QList< Dbt::StatusTemplatesstatusTemplates (int id) Q_DECL_OVERRIDE
QList< Dbt::Ticketstickets (bool all) Q_DECL_OVERRIDE
QList< Dbt::Ticketstickets (int ticket, bool all) Q_DECL_OVERRIDE
QList< Dbt::Ticketstickets (const Dbt::Categories &, bool all) Q_DECL_OVERRIDE
QList< Dbt::TicketsVwticketsVw (bool all) Q_DECL_OVERRIDE
QList< Dbt::TicketsVwticketsVw (int ticket, bool all) Q_DECL_OVERRIDE
QList< Dbt::TicketsVwticketsVw (const Dbt::Categories &, bool all) Q_DECL_OVERRIDE
QList< Dbt::TicketStatusticketStatus (int id) Q_DECL_OVERRIDE
QList< Dbt::TicketStatusticketStatus (int ticket, bool all) Q_DECL_OVERRIDE
QList< Dbt::TicketStatusticketStatus (bool all) Q_DECL_OVERRIDE
QList< Dbt::TicketValuesticketValues (int id) Q_DECL_OVERRIDE
QList< Dbt::TicketValuesticketValues (int ticket, bool all) Q_DECL_OVERRIDE
QList< Dbt::TicketValuesticketValues (bool all) Q_DECL_OVERRIDE
QList< Dbt::TicketFilesticketFiles (int id) Q_DECL_OVERRIDE
QList< Dbt::TicketFilesticketFiles (int ticket, bool all) Q_DECL_OVERRIDE
QList< Dbt::TicketFilesticketFiles (bool all) Q_DECL_OVERRIDE
QList< Dbt::TicketTimesheetsticketTimesheets (int id) Q_DECL_OVERRIDE
QList< Dbt::TicketTimesheetsticketTimesheets (int ticket, bool all) Q_DECL_OVERRIDE
QList< Dbt::TicketTimesheetsticketTimesheets (bool all) Q_DECL_OVERRIDE
QList< Dbt::TicketTimesheetsrunningTimesheets (int ticket) Q_DECL_OVERRIDE
QList< Dbt::TicketTimesheetsstartTimesheet (int ticket) Q_DECL_OVERRIDE
QList< Dbt::TicketTimesheetsstopTimesheet (int ticket) Q_DECL_OVERRIDE
QList< Dbt::TicketTimesheetstoggleTimesheet (int ticket) Q_DECL_OVERRIDE
QList< Dbt::ClientSettingsclientSettings () Q_DECL_OVERRIDE
QList< Dbt::Overviewoverview (const QString &category, const QStringList &statuses) Q_DECL_OVERRIDE
QList< Dbt::Overviewoverview (const QString &overviewId) Q_DECL_OVERRIDE
QList< Dbt::OverviewListoverviewList () Q_DECL_OVERRIDE
QList< Dbt::ServerInfoserverInfo () Q_DECL_OVERRIDE
template<typename T>
void save (const QList< T > &list)
void remove (const Dbt::Users &data) Q_DECL_OVERRIDE
void remove (const Dbt::Categories &data) Q_DECL_OVERRIDE
void remove (const Dbt::StatusOrder &data) Q_DECL_OVERRIDE
void remove (const Dbt::Statuses &data) Q_DECL_OVERRIDE
void remove (const Dbt::Tickets &data) Q_DECL_OVERRIDE
void remove (const Dbt::TicketStatus &data) Q_DECL_OVERRIDE
void remove (const Dbt::TicketValues &data) Q_DECL_OVERRIDE
void remove (const Dbt::TicketFiles &data) Q_DECL_OVERRIDE
void remove (const Dbt::TicketTimesheets &data) Q_DECL_OVERRIDE
void remove (const Dbt::OverviewList &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::Users &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::Categories &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::StatusOrder &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::Statuses &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::Tickets &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::TicketsVw &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::TicketStatus &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::TicketValues &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::TicketFiles &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::TicketTimesheets &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::ServerInfo &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::AppendStatuses &data) Q_DECL_OVERRIDE
QList< Dbt::Departmentsdepartments (int department) Q_DECL_OVERRIDE
QList< Dbt::Doorsdoors (int door) Q_DECL_OVERRIDE
QList< Dbt::Employeesemployees (int employee) Q_DECL_OVERRIDE
QList< Dbt::EventTypeseventTypes (const QString &eventType) Q_DECL_OVERRIDE
QList< Dbt::Eventsevents (int event, int employee=-1, const QDate &month=QDate(), int limit=-1, int offset=-1) Q_DECL_OVERRIDE
QList< Dbt::DepartmentHasManagerdepartmentHasManager (const Dbt::DepartmentHasManager &) Q_DECL_OVERRIDE
QList< Dbt::DepartmentHasMemberdepartmentHasMember (const Dbt::DepartmentHasMember &) Q_DECL_OVERRIDE
QList< Dbt::EmployeeCanOpenDooremployeeCanOpenDoor (const Dbt::EmployeeCanOpenDoor &) Q_DECL_OVERRIDE
QList< Dbt::EmployeeHasRfidemployeeHasRfid (const Dbt::EmployeeHasRfid &) Q_DECL_OVERRIDE
QList< Dbt::Rfidsrfids (int rfid) Q_DECL_OVERRIDE
QList< Dbt::RfidsrfidsById (const QString &rfidId) Q_DECL_OVERRIDE
QList< Dbt::Holidaysholidays (const QDate &date) Q_DECL_OVERRIDE
QList< Dbt::WorkCalendarworkCalendar (const QDate &period) Q_DECL_OVERRIDE
void generateWorkCalendar (int year) Q_DECL_OVERRIDE
void copyHolidays (int fromYear, int toYear) Q_DECL_OVERRIDE
QList< Dbt::EmployeesattendanceChecklist (const QDate &month) Q_DECL_OVERRIDE
QList< Dbt::AttendanceChecklistattendanceChecklist (int employee, const QDate &month) Q_DECL_OVERRIDE
QList< Dbt::AttendanceSummaryattendanceSummary (int employee, const QDate &month) Q_DECL_OVERRIDE
QList< Dbt::AttendancePresentattendancePresent () Q_DECL_OVERRIDE
QList< Dbt::AttendanceRecentattendanceRecent (int employee) Q_DECL_OVERRIDE
Dbt::UserEmployeeAccess canAccessAttendance (int employee) Q_DECL_OVERRIDE
virtual void remove (const Dbt::Departments &data) Q_DECL_OVERRIDE
virtual void remove (const Dbt::Doors &data) Q_DECL_OVERRIDE
virtual void remove (const Dbt::Employees &data) Q_DECL_OVERRIDE
virtual void remove (const Dbt::EventTypes &data) Q_DECL_OVERRIDE
virtual void remove (const Dbt::Events &data) Q_DECL_OVERRIDE
virtual void remove (const Dbt::DepartmentHasManager &data) Q_DECL_OVERRIDE
virtual void remove (const Dbt::DepartmentHasMember &data) Q_DECL_OVERRIDE
virtual void remove (const Dbt::EmployeeCanOpenDoor &data) Q_DECL_OVERRIDE
virtual void remove (const Dbt::EmployeeHasRfid &data) Q_DECL_OVERRIDE
virtual void remove (const Dbt::Rfids &data) Q_DECL_OVERRIDE
virtual void remove (const Dbt::Holidays &data) Q_DECL_OVERRIDE
virtual void remove (const Dbt::WorkCalendar &data) Q_DECL_OVERRIDE
virtual void remove (const Dbt::AttendanceSummary &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::Departments &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::Employees &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::Doors &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::EventTypes &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::Events &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::Rfids &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::Holidays &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::WorkCalendar &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::DepartmentHasManager &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::EmployeeCanOpenDoor &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::DepartmentHasMember &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::EmployeeHasRfid &data) Q_DECL_OVERRIDE
QVariant save (const Dbt::AttendanceSummary &data) Q_DECL_OVERRIDE
void upgrade ()
bool open () Q_DECL_OVERRIDE
bool close () Q_DECL_OVERRIDE
void begin () Q_DECL_OVERRIDE
void commit () Q_DECL_OVERRIDE
Veřejné metody dědí se z Db::Plugins::DatabasePlugin
 DatabasePlugin (QObject *)
void setAuthenticatedUser (const AuthenticatedUser *x)
virtual QString connectionName () const
virtual QList< Dbt::Statusesstatuses (const QString &category, const QStringList &prevstatuses)
virtual void remove (const Dbt::UsersCategories &data)
virtual QVariant save (const Dbt::UsersCategories &data)

Chráněné metody

void createTemporaryTableTickets (int ticket, bool all=false)
QVariant currval (const QString &sequence)
void removeTicketsDetails (int ticket)
Chráněné metody dědí se z Db::Plugins::DatabasePlugin
int userId () const
bool userAuthenticated () const
QString userLogin () const
QString userLang () const

Privátní atributy

QString m_databasename
QString m_hostname
QString m_username
QString m_password
int m_port
bool m_temporaryTableTicketsCreated

Statické privátní atributy

static bool m_upgraded = false

Další zděděné členy

Veřejné atributy dědí se z Db::Plugins::DatabasePlugin
const AuthenticatedUserm_authenticatedUser = nullptr
Chráněné atributy dědí se z Db::Plugins::DatabasePlugin
QSqlDatabase m_db

Detailní popis

Definice je uvedena na řádku 19 v souboru database_plugin_postgres.h.

Dokumentace konstruktoru a destruktoru

◆ DatabasePluginPostgres()

DatabasePluginPostgres::DatabasePluginPostgres ( QObject * parent)

Definice je uvedena na řádku 34 v souboru database_plugin_postgres.cpp.

34 : Db::Plugins::DatabasePlugin(parent) {
35 Q_ASSERT(parent != NULL);
36 setObjectName("DatabasePluginPostgres");
37 m_temporaryTableTicketsCreated = false;
38}

◆ ~DatabasePluginPostgres()

DatabasePluginPostgres::~DatabasePluginPostgres ( )

Definice je uvedena na řádku 29 v souboru database_plugin_postgres.cpp.

29 {
30 close();
31}

Dokumentace členských funkcí

◆ attendanceChecklist() [1/2]

QList< Dbt::Employees > DatabasePluginPostgres::attendanceChecklist ( const QDate & month)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2601 v souboru database_plugin_postgres.cpp.

2602 :key1 or :key2 = '')X");
2603 q.bindValue(":key1", ((eventType.isNull()) ? QString("") : eventType));
2604 q.bindValue(":key2", ((eventType.isNull()) ? QString("") : eventType));
2605 q.exec();
2606 while (q.next()) {
2607 Dbt::EventTypes x;
2608 int i=0;
2609 x.event_type = q.value(i++).toString();
2610 x.description = q.value(i++).toString();
2611 x.end_state = q.value(i++).toBool();
2612 x.passage = q.value(i++).toBool();
2613 x.arrival = q.value(i++).toBool();
2614 x.vacation = q.value(i++).toBool();
2615 x.sick_leave = q.value(i++).toBool();
2616 x.compensatory_leave = q.value(i++).toBool();
2617 x.business_trip = q.value(i++).toBool();
2618 x.break_time = q.value(i++).toBool();
2619 x.unpaid_leave = q.value(i++).toBool();
2620 x.sick_care = q.value(i++).toBool();
2621 x.doctor = q.value(i++).toBool();
2622 x.paid_obstacle = q.value(i++).toBool();
2623 list << x;
2624 }
2625 return list;
2626}

◆ attendanceChecklist() [2/2]

QList< Dbt::AttendanceChecklist > DatabasePluginPostgres::attendanceChecklist ( int employee,
const QDate & month )
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2629 v souboru database_plugin_postgres.cpp.

2645 :key1 or :key2 <= 0)
2646 and (:employee <= 0 or employee = :employee))X");
2647 if (month.isValid()) {
2648 sql += QStringLiteral(" and date >= :date_from and date < :date_to");
2649 }
2650 sql += QStringLiteral(" order by date");
2651 if (limit > 0) { sql += QStringLiteral(" limit :limit"); }
2652 if (offset > 0) { sql += QStringLiteral(" offset :offset"); }
2653 sql += QStringLiteral(";");
2654
2655 q.prepare(sql);
2656 q.bindValue(":key1", event);
2657 q.bindValue(":key2", event);
2658 q.bindValue(":employee", employee);
2659 if (month.isValid()) {
2660 QDateTime from(QDate(month.year(), month.month(), 1), QTime(0,0,0));
2661 QDateTime to = from.addMonths(1);
2662 q.bindValue(":date_from", from);
2663 q.bindValue(":date_to", to);
2664 }
2665 if (limit > 0) q.bindValue(":limit", limit);
2666 if (offset > 0) q.bindValue(":offset", offset);
2667 q.exec();
2668 while (q.next()) {
2669 Dbt::Events x;
2670 int i=0;
2671 x.event = q.value(i++).toInt();
2672 x.date = q.value(i++).toDateTime();
2673 x.event_type = q.value(i++).toString();
2674 x.event_description = q.value(i++).toString();
2675 x.employee = q.value(i++).toInt();
2676 x.firstname = q.value(i++).toString();
2677 x.surname = q.value(i++).toString();
2678 x.valid = q.value(i++).toBool();
2679 x.user_edited = q.value(i++).toInt();
2680 x.user_edited_name = q.value(i++).toString();
2681 x.error = q.value(i++).toString();
2682 x.note = q.value(i++).toString();
2683 list << x;
2684 }
2685 return list;
2686}
2687
2688QList<Dbt::DepartmentHasManager> DatabasePluginPostgres::departmentHasManager(const Dbt::DepartmentHasManager& p) {
2689 MSqlQuery q(m_db);
2690 QList<Dbt::DepartmentHasManager> list;
2691 q.prepare(R"'(select department, "user" from attendance.department_has_manager
2692 where (department = :key11 or :key12 <= 0)
2693 and ("user" = :key21 or :key22 <= 0);
2694 )'");
2695 q.bindValue(":key11", p.department);
2696 q.bindValue(":key12", p.department);
2697 q.bindValue(":key21", p.user);
2698 q.bindValue(":key22", p.user);
2699 q.exec();
2700 while (q.next()) {
2701 Dbt::DepartmentHasManager x;
2702 int i=0;
2703 x.department = q.value(i++).toInt();
2704 x.user = q.value(i++).toInt();
2705 list << x;
2706 }
2707 return list;
2708}
2709
2710QList<Dbt::DepartmentHasMember> DatabasePluginPostgres::departmentHasMember(const Dbt::DepartmentHasMember& p) {
2711 MSqlQuery q(m_db);
2712 QList<Dbt::DepartmentHasMember> list;

◆ attendancePresent()

QList< Dbt::AttendancePresent > DatabasePluginPostgres::attendancePresent ( )
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2800 v souboru database_plugin_postgres.cpp.

2807 {
2808 MSqlQuery q(m_db);
2809 QList<Dbt::Rfids> list;
2810 q.prepare(R"'(
2811 select r.rfid, r.rfid_id, r.valid, r.note,
2812 coalesce(ehr.employee, 0) as employee,
2813 coalesce(e.firstname, '') as firstname,
2814 coalesce(e.surname, '') as surname
2815 from attendance.rfids r
2816 left join attendance.employee_has_rfid ehr using (rfid)
2817 left join attendance.employees e on (e.employee = ehr.employee)
2818 where r.rfid_id = :rfid_id;
2819 )'");
2820 q.bindValue(":rfid_id", rfidId);
2821 q.exec();
2822 while (q.next()) {
2823 Dbt::Rfids x;
2824 int i=0;
2825 x.rfid = q.value(i++).toInt();
2826 x.rfid_id = q.value(i++).toString();

◆ attendanceRecent()

QList< Dbt::AttendanceRecent > DatabasePluginPostgres::attendanceRecent ( int employee)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2828 v souboru database_plugin_postgres.cpp.

2837 {
2838 MSqlQuery q(m_db);
2839 QList<Dbt::Holidays> list;
2840 if (date.isValid()) {
2841 q.prepare(R"'(select date, description from attendance.holidays where date = :d;)'");
2842 q.bindValue(":d", date);
2843 } else {
2844 q.prepare(R"'(select date, description from attendance.holidays order by date desc;)'");
2845 }
2846 q.exec();
2847 while (q.next()) {
2848 Dbt::Holidays x;
2849 int i=0;
2850 x.date = q.value(i++).toDate();
2851 x.description = q.value(i++).toString();
2852 list << x;
2853 }
2854 return list;
2855}
2856

◆ attendanceSummary()

QList< Dbt::AttendanceSummary > DatabasePluginPostgres::attendanceSummary ( int employee,
const QDate & month )
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2716 v souboru database_plugin_postgres.cpp.

2717 :key11", p.department);
2718 q.bindValue(":key12", p.department);
2719 q.bindValue(":key21", p.employee);
2720 q.bindValue(":key22", p.employee);
2721 q.exec();
2722 while (q.next()) {
2723 Dbt::DepartmentHasMember x;
2724 int i=0;
2725 x.department = q.value(i++).toInt();
2726 x.employee = q.value(i++).toInt();
2727 list << x;
2728 }
2729 return list;
2730}
2731
2732QList<Dbt::EmployeeCanOpenDoor> DatabasePluginPostgres::employeeCanOpenDoor(const Dbt::EmployeeCanOpenDoor& p) {
2733 MSqlQuery q(m_db);
2734 QList<Dbt::EmployeeCanOpenDoor> list;
2735 q.prepare(R"'(select door, employee from attendance.employee_can_open_door
2736 where (door = :key11 or :key12 <= 0)
2737 and (employee = :key21 or :key22 <= 0);
2738 )'");
2739 q.bindValue(":key11", p.door);
2740 q.bindValue(":key12", p.door);
2741 q.bindValue(":key21", p.employee);
2742 q.bindValue(":key22", p.employee);
2743 q.exec();
2744 while (q.next()) {
2745 Dbt::EmployeeCanOpenDoor x;
2746 int i=0;
2747 x.door = q.value(i++).toInt();
2748 x.employee = q.value(i++).toInt();
2749 list << x;
2750 }
2751 return list;
2752}
2753
2754QList<Dbt::EmployeeHasRfid> DatabasePluginPostgres::employeeHasRfid(const Dbt::EmployeeHasRfid& p) {
2755 MSqlQuery q(m_db);
2756 QList<Dbt::EmployeeHasRfid> list;
2757 q.prepare(R"'(select employee, rfid from attendance.employee_has_rfid
2758 where (employee = :key11 or :key12 <= 0)
2759 and (rfid = :key21 or :key22 <= 0);
2760 )'");
2761 q.bindValue(":key11", p.employee);
2762 q.bindValue(":key12", p.employee);

◆ authenticate()

QList< Dbt::Users > DatabasePluginPostgres::authenticate ( const QString & login,
const QString & password )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 158 v souboru database_plugin_postgres.cpp.

158 {
159 QString md5 = QString::fromUtf8(QCryptographicHash::hash(password.toUtf8(), QCryptographicHash::Md5).toHex());
160 QList<Dbt::Users> list;
161 MSqlQuery q(m_db);
162 q.prepare("select \"user\", login, name, lang, enabled, admin from users where login = :login and password = :password and enabled;");
163 q.bindValue(":login", login);
164 q.bindValue(":password", md5);
165 q.exec();
166 while (q.next()) {
167 int i=0;
168 Dbt::Users x;
169 x.user = q.value(i++).toInt();
170 x.login = q.value(i++).toString();
171 x.name = q.value(i++).toString();
172 x.lang = q.value(i++).toString();
173 x.enabled = q.value(i++).toBool();
174 x.admin = q.value(i++).toBool();
175 list << x;
176 }
177
178 return list;
179}

◆ begin()

void DatabasePluginPostgres::begin ( )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 117 v souboru database_plugin_postgres.cpp.

117 {
118 MSqlQuery q(m_db);
119 q.exec("begin;");
120}

◆ canAccessAttendance()

Dbt::UserEmployeeAccess DatabasePluginPostgres::canAccessAttendance ( int employee)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2584 v souboru database_plugin_postgres.cpp.

2596 {
2597 MSqlQuery q(m_db);
2598 QList<Dbt::EventTypes> list;

◆ categories()

QList< Dbt::Categories > DatabasePluginPostgres::categories ( const QString & id)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 398 v souboru database_plugin_postgres.cpp.

399 :department, :user)
400 )'");
401 q.bindValue(":department", data.department);
402 q.bindValue(":user", data.user);
403 q.exec();
404 return QVariant();
405}
406
407QVariant DatabasePluginPostgres::save(const Dbt::DepartmentHasMember& data) {
408 MSqlQuery q(m_db);
409 q.prepare(R"'(
410 insert into attendance.department_has_member (department, employee)
411 values (:department, :employee)
412 )'");
413 q.bindValue(":department", data.department);
414 q.bindValue(":employee", data.employee);
415 q.exec();
416 return QVariant();
417}
418
419QVariant DatabasePluginPostgres::save(const Dbt::EmployeeHasRfid& data) {
420 MSqlQuery q(m_db);

◆ categoriesOverview()

QList< Dbt::CategoriesOverview > DatabasePluginPostgres::categoriesOverview ( const QStringList & statuses)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1685 v souboru database_plugin_postgres.cpp.

1685 :id", data.id);
1686 q.bindValue(":ticket", data.ticket);
1687 q.bindValue(":user", data.user);
1688 q.bindValue(":date", data.date);
1689 q.bindValue(":name", data.name);
1690 // q.bindValue(":value", JSON::json(data.value));
1691 q.exec();
1692 return QVariant(data.id);
1693 }
1694
1695 if (data.created || !found) {
1696 q.prepare(QString(R"'(
1697 insert into ticket_values (ticket, "user", date, name, value)
1698 select :ticket, :user, :date, :name, '%1'
1699 where not exists (select 1 from ticket_values where id = :id);
1700 )'").arg(QString::fromUtf8(JSON::json(data.value))));
1701 q.bindValue(":id", data.id);
1702 q.bindValue(":ticket", data.ticket);
1703 q.bindValue(":user", data.user);
1704 q.bindValue(":date", data.date);
1705 q.bindValue(":name", data.name);
1706 // q.bindValue(":value", JSON::json(data.value));
1707 q.exec();
1708
1709 return currval("ticket_values_id_seq");
1710 }
1711
1712 Q_UNREACHABLE();
1713 qFatal("Should not happen");
1714 return QVariant();
1715}

◆ categoriesToRoot()

QList< Dbt::Categories > DatabasePluginPostgres::categoriesToRoot ( const QString & id)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 423 v souboru database_plugin_postgres.cpp.

423 :rfid, :employee)
424 on conflict (rfid) do update set employee = excluded.employee
425 )'");
426 q.bindValue(":rfid", data.rfid);
427 q.bindValue(":employee", data.employee);
428 q.exec();
429 return QVariant();
430}
431
432
433QVariantList pgArrayToVariantList(const QVariant& input) {
434 QStringList x = input.toString().replace("{", "").replace("}", "").split(",");
435 QVariantList list;
436 for (int i=0; i<x.size(); i++) {
437 list << x[i];
438 }
439 return list;
440}
441
442
443QList<Dbt::Categories> DatabasePluginPostgres::categories(const QString& id) {
444 QList<Dbt::Categories> list;
445 MSqlQuery q(m_db);
446
447 q.prepare(R"'(
448 select c.category, c.parent_category, c.description, c.price, ux.users, categories_tree_description(c.category) as description_tree
449 from categories c, users u

◆ changePassword()

void DatabasePluginPostgres::changePassword ( const QString & login,
const QString & oldpassword,
const QString & newpassword )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 129 v souboru database_plugin_postgres.cpp.

129 {
130 PDEBUG;
131 QString md5new = QString::fromUtf8(QCryptographicHash::hash(newpassword.toUtf8(), QCryptographicHash::Md5).toHex());
132 QString md5old = QString::fromUtf8(QCryptographicHash::hash(oldpassword.toUtf8(), QCryptographicHash::Md5).toHex());
133 QList<Dbt::Users> list;
134 MSqlQuery q(m_db);
135 q.prepare(R"'(select true from users where "user" = :userid and admin)'");
136 q.bindValue(":userid", userId());
137 q.exec();
138 bool admin = q.next();
139
140 if (admin) {
141 // admin can change password for other users
142 PDEBUG << "admin";
143 q.prepare("update users set password = :newpassword where login = :login;");
144 } else {
145 // non-privileged user can change it's own password only, must know the old password
146 PDEBUG << "not admin";
147 q.prepare("update users set password = :newpassword where login = :login and password = :oldpassword and enabled;");
148 }
149 q.bindValue(":userid", userId());
150 q.bindValue(":login", login);
151 q.bindValue(":newpassword", md5new);
152 q.bindValue(":oldpassword", md5old);
153 q.exec();
154 return;
155}

◆ clientSettings()

QList< Dbt::ClientSettings > DatabasePluginPostgres::clientSettings ( )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 301 v souboru database_plugin_postgres.cpp.

301 {
302 q.prepare(R"'(delete from users_categories where category = ?;)'");
303 q.bindValue(0, category);
304 q.exec();
305 }
306
307 for (int i=0; i<data.users.size(); i++) {
308 q.prepare(R"string(
309 insert into users_categories ("user", category) values (?, ?) on conflict do nothing;
310 )string");
311 q.bindValue(0, data.users[i].toInt());
312 q.bindValue(1, category);
313 q.exec();
314 }
315
316 q.commit();
317
318 return category;
319}
320
321

◆ close()

bool DatabasePluginPostgres::close ( )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 111 v souboru database_plugin_postgres.cpp.

111 {
112 m_db.close();
113 return true;
114}

◆ commit()

void DatabasePluginPostgres::commit ( )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 123 v souboru database_plugin_postgres.cpp.

123 {
124 MSqlQuery q(m_db);
125 q.exec("commit;");
126}

◆ copyHolidays()

void DatabasePluginPostgres::copyHolidays ( int fromYear,
int toYear )
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2192 v souboru database_plugin_postgres.cpp.

2194 :userid", userId());
2195 q.exec();
2196 q.prepare(R"'(
2197 select 'DETAIL' as type, x.depth, x.category, x.description, x.price, x.time, x.tickets_count, x.ordering
2198 from xxx x

◆ createTemporaryTableTickets()

void DatabasePluginPostgres::createTemporaryTableTickets ( int ticket,
bool all = false )
protected

Definice je uvedena na řádku 618 v souboru database_plugin_postgres.cpp.

619 :id1", data.user);
620 q.bindValue(":login", data.login);
621 q.bindValue(":name", data.name);
622 q.bindValue(":lang", data.lang);
623 q.bindValue(":enabled", data.enabled);
624 q.bindValue(":admin", data.admin);
625 q.exec();
626 return QVariant(data.user);
627 } else {
628
629 q.prepare(R"'(
630 insert into users (login, name, lang, enabled, admin)
631 select :login, :name, :lang, :enabled, :admin
632 where not exists (select 1 from users where "user" = :id1);
633 )'");
634 q.bindValue(":id1", data.user);
635 q.bindValue(":login", data.login);
636 q.bindValue(":name", data.name);
637 q.bindValue(":lang", data.lang);
638 q.bindValue(":enabled", data.enabled);
639 q.bindValue(":admin", data.admin);
640 q.exec();

◆ currval()

QVariant DatabasePluginPostgres::currval ( const QString & sequence)
protected

Definice je uvedena na řádku 213 v souboru database_plugin_postgres.cpp.

217 {
218 MSqlQuery q(m_db);
219 QVariant cv;
220 q.prepare(R"'(select currval(:sequence);)'");
221 q.bindValue(":sequence", sequence);
222 q.exec();
223 if (q.next()) {

◆ departmentHasManager()

QList< Dbt::DepartmentHasManager > DatabasePluginPostgres::departmentHasManager ( const Dbt::DepartmentHasManager & p)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2023 v souboru database_plugin_postgres.cpp.

2026 {
2027 q.prepare(R"'(
2028 update ticket_files set
2029 ticket = :ticket,
2030 date = :date,
2031 "user" = :user,
2032 name = :name,
2033 type = :type,
2034 content = :content
2035 where id = :id
2036 )'");
2037 q.bindValue(":id", data.id);
2038 q.bindValue(":ticket", data.ticket);
2039 q.bindValue(":user", data.user);
2040 q.bindValue(":date", data.date);

◆ departmentHasMember()

QList< Dbt::DepartmentHasMember > DatabasePluginPostgres::departmentHasMember ( const Dbt::DepartmentHasMember & p)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2042 v souboru database_plugin_postgres.cpp.

2042 :type", data.type);
2043 q.bindValue(":content", data.content);
2044 q.exec();
2045 return QVariant(data.id);
2046 }
2047
2048 if (data.created || !found) {
2049 q.prepare(R"'(
2050 insert into ticket_files (ticket, "user", date, name, type, content)
2051 values (:ticket, :user, :date, :name, :type, :content);
2052 )'");
2053 q.bindValue(":id", data.id);
2054 q.bindValue(":ticket", data.ticket);
2055 q.bindValue(":user", data.user);
2056 q.bindValue(":date", data.date);
2057 q.bindValue(":name", data.name);
2058 q.bindValue(":type", data.type);
2059 q.bindValue(":content", data.content);

◆ departments()

QList< Dbt::Departments > DatabasePluginPostgres::departments ( int department)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1886 v souboru database_plugin_postgres.cpp.

1886 :abbreviation,
1887 color = :color,
1888 closed = :closed,
1889 can_be_run = :can_be_run,
1890 ignored = :ignored
1891 where status = :status
1892 )'");
1893 q.bindValue(":description", data.description);
1894 q.bindValue(":abbreviation", data.abbreviation);
1895 q.bindValue(":color", data.color);
1896 q.bindValue(":closed", data.closed);
1897 q.bindValue(":can_be_run", data.can_be_run);
1898 q.bindValue(":ignored", data.ignored);
1899 q.bindValue(":status", data.status);
1900 q.exec();
1901
1902 q.prepare(R"'(

◆ doors()

QList< Dbt::Doors > DatabasePluginPostgres::doors ( int door)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1905 v souboru database_plugin_postgres.cpp.

1905 :status2);
1906 )'");
1907 q.bindValue(":status1", data.status);
1908 q.bindValue(":description", data.description);
1909 q.bindValue(":abbreviation", data.abbreviation);
1910 q.bindValue(":color", data.color);
1911 q.bindValue(":closed", data.closed);
1912 q.bindValue(":can_be_run", data.can_be_run);
1913 q.bindValue(":ignored", data.ignored);
1914 q.bindValue(":status2", data.status);
1915 q.exec();
1916
1917 q.prepare(R"'(
1918 delete from status_order
1919 where previous_status = :status
1920 )'");

◆ employeeCanOpenDoor()

QList< Dbt::EmployeeCanOpenDoor > DatabasePluginPostgres::employeeCanOpenDoor ( const Dbt::EmployeeCanOpenDoor & p)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2061 v souboru database_plugin_postgres.cpp.

2069 {
2070 MSqlQuery q(m_db);
2071 q.prepare(R"'(delete from ticket_files where id = :id;)'");
2072 q.bindValue(":id", id.id);
2073 q.exec();
2074}
2075
2076
2077QList<Dbt::UsersCategories> DatabasePluginPostgres::usersCategories(int id, int user, const QString& category) {
2078 QList<Dbt::UsersCategories> list;

◆ employeeHasRfid()

QList< Dbt::EmployeeHasRfid > DatabasePluginPostgres::employeeHasRfid ( const Dbt::EmployeeHasRfid & p)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2080 v souboru database_plugin_postgres.cpp.

2080 {
2081 q.exec();
2082 while (q.next()) {
2083 int i=0;
2084 Dbt::UsersCategories x;
2085 x.id = q.value(i++).toInt();
2086 x.user = q.value(i++).toInt();
2087 x.category = q.value(i++).toString();
2088 list << x;
2089 }
2090 return list;
2091 };
2092
2093 if (id > 0) {
2094 q.prepare(R"'(select id, "user", category from users_categories where id = :id)'");
2095 q.bindValue(":id", id);
2096 return retvals();
2097 }

◆ employees()

QList< Dbt::Employees > DatabasePluginPostgres::employees ( int employee)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1922 v souboru database_plugin_postgres.cpp.

1924 {
1925 q.prepare(R"'(
1926 insert into status_order (previous_status, next_status)
1927 values (:previous_status, :next_status);
1928 )'");
1929 q.bindValue(":previous_status", data.status);
1930 q.bindValue(":next_status", data.next[i].status);
1931 q.exec();
1932 }
1933
1934 commit();
1935
1936 return QVariant(data.status);
1937}
1938
1939
1940QList<Dbt::StatusTemplates> DatabasePluginPostgres::statusTemplates(int id) {
1941 Q_UNUSED(id);
1942 MSqlQuery q(m_db);
1943 QList<Dbt::StatusTemplates> list;
1944 return list;
1945}
1946
1947

◆ events()

QList< Dbt::Events > DatabasePluginPostgres::events ( int event,
int employee = -1,
const QDate & month = QDate(),
int limit = -1,
int offset = -1 )
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1978 v souboru database_plugin_postgres.cpp.

1984 :id
1985 and t.ticket = f.ticket
1986 and t.category = uc.category
1987 and u."user" = f."user"
1988 ;
1989 )'");
1990 q.bindValue(":id", id);
1991 q.bindValue(":user", userId());
1992 q.exec();
1993 while (q.next()) {
1994 int i=0;
1995 Dbt::TicketFiles x;
1996 x.id = q.value(i++).toInt();
1997 x.user = q.value(i++).toInt();
1998 x.date = q.value(i++).toDateTime();
1999 x.ticket = q.value(i++).toInt();
2000 x.name = q.value(i++).toString();
2001 x.type = q.value(i++).toString();
2002 x.content = q.value(i++).toByteArray();
2003 list << x;
2004 }
2005
2006 return list;
2007}
2008
2009
2010QList<Dbt::TicketFiles> DatabasePluginPostgres::ticketFiles(bool all) {
2011 return ticketFiles(-1, all);
2012}
2013
2014
2015QVariant DatabasePluginPostgres::save(const Dbt::TicketFiles& data) {
2016 MSqlQuery q(m_db);
2017
2018 bool found = false;
2019 if (!data.created) {
2020 q.prepare(R"'(select 1 from ticket_files where id = :id;)'");
2021 q.bindValue(":id", data.id);

◆ eventTypes()

QList< Dbt::EventTypes > DatabasePluginPostgres::eventTypes ( const QString & eventType)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1949 v souboru database_plugin_postgres.cpp.

1960 {
1961 int i=0;
1962 Dbt::TicketFiles x;
1963 x.id = q.value(i++).toInt();
1964 x.user = q.value(i++).toInt();
1965 x.date = q.value(i++).toDateTime();
1966 x.ticket = q.value(i++).toInt();
1967 x.name = q.value(i++).toString();
1968 x.type = q.value(i++).toString();
1969 x.content = q.value(i++).toByteArray();
1970 list << x;
1971 }
1972
1973 return list;
1974}
1975
1976

◆ generateWorkCalendar()

void DatabasePluginPostgres::generateWorkCalendar ( int year)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2185 v souboru database_plugin_postgres.cpp.

◆ holidays()

QList< Dbt::Holidays > DatabasePluginPostgres::holidays ( const QDate & date)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2142 v souboru database_plugin_postgres.cpp.

2152 :userid
2153 ),
2154 x_statuses as (
2155 select *
2156 from statuses
2157 where status in (%1)
2158 and not ignored
2159 ),
2160 x_tickets as (

◆ open()

bool DatabasePluginPostgres::open ( )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 41 v souboru database_plugin_postgres.cpp.

41 {
42 m_db = QSqlDatabase::addDatabase("QPSQL", QUuid::createUuid().toString().toUtf8());
43
44 m_db.setDatabaseName ( m_databasename );
45 m_db.setHostName ( m_hostname );
46 m_db.setPort ( m_port );
47 m_db.setUserName ( m_username );
48 m_db.setPassword ( m_password );
49
50 if (!m_db.open()) {
51 PDEBUG << "Cannot connect to database Postgres";
52 PDEBUG << m_db.lastError().text();
53 return false;
54 }
55
56 upgrade();
57
58 return true;
59}

◆ overview() [1/2]

QList< Dbt::Overview > DatabasePluginPostgres::overview ( const QString & category,
const QStringList & statuses )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1718 v souboru database_plugin_postgres.cpp.

1718 {
1719 MSqlQuery q(m_db);
1720 q.prepare(R"'(delete from ticket_values where id = :id;)'");
1721 q.bindValue(":id", id.id);
1722 q.exec();
1723}
1724
1725
1726QList<Dbt::Statuses> DatabasePluginPostgres::statuses(const QString& id) {
1727 QList<Dbt::Statuses> list;
1728 MSqlQuery q(m_db);
1729 if (id.isEmpty() || id == "") {
1730 q.prepare(R"'(
1731 select s.status, s.description, s.abbreviation, s.color, s.closed, s.can_be_run, s.ignored,
1732 n.status, n.description, n.abbreviation, n.color, n.closed, n.can_be_run, n.ignored
1733 from statuses s
1734 left join status_order o on (s.status = o.previous_status)
1735 left join statuses n on (o.next_status = n.status)
1736 order by s.status, n.status
1737 )'");
1738 } else {
1739 q.prepare(R"'(
1740 select s.status, s.description, s.abbreviation, s.color, s.closed, s.can_be_run, s.ignored,
1741 n.status, n.description, n.abbreviation, n.color, n.closed, n.can_be_run, n.ignored
1742 from statuses s
1743 left join status_order o on (s.status = o.previous_status)
1744 left join statuses n on (o.next_status = n.status)
1745 where (:id = s.status)
1746 order by s.status, n.status

◆ overview() [2/2]

QList< Dbt::Overview > DatabasePluginPostgres::overview ( const QString & overviewId)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1749 v souboru database_plugin_postgres.cpp.

1749 :id", id);
1750 q.exec();
1751 Dbt::Statuses x;
1752 while (q.next()) {
1753 int i=0;
1754 if (!x.status.isEmpty() && x.status != q.value(0).toString()) {
1755 list << x;
1756 x.clear();
1757 }
1758 x.status = q.value(i++).toString();
1759 x.description = q.value(i++).toString();
1760 x.abbreviation = q.value(i++).toString();
1761 x.color = q.value(i++).toString();
1762 x.closed = q.value(i++).toBool();
1763 x.can_be_run = q.value(i++).toBool();
1764 x.ignored = q.value(i++).toBool();
1765 x.can_have_next = true;
1766 if (!q.value(i).isNull()) {
1767 Dbt::Statuses n;
1768 n.status = q.value(i++).toString();
1769 n.description = q.value(i++).toString();
1770 n.abbreviation = q.value(i++).toString();
1771 n.color = q.value(i++).toString();
1772 n.closed = q.value(i++).toBool();
1773 n.can_be_run = q.value(i++).toBool();
1774 n.ignored = q.value(i++).toBool();
1775 x.next << n;
1776 }
1777 }
1778 if (!x.status.isEmpty()) {
1779 list << x;
1780 }
1781 return list;
1782}
1783
1784
1785QList<Dbt::Statuses> DatabasePluginPostgres::statuses(const QString& category, const QString& previousStatus) {
1786 if ((category.isEmpty() || category == "") &&
1787 (previousStatus.isEmpty() || previousStatus == "")) { return statuses(QString()); }
1788 int categoryi = category.toInt();
1789 MSqlQuery q(m_db);
1790 QString ps = (previousStatus.isEmpty()) ? "0" : previousStatus;
1791 auto results = [&q]() {
1792 QList<Dbt::Statuses> list;
1793 q.exec();
1794 while (q.next()) {
1795 Dbt::Statuses x;
1796 int i=0;
1797 x.status = q.value(i++).toString();
1798 x.description = q.value(i++).toString();
1799 x.abbreviation = q.value(i++).toString();
1800 x.color = q.value(i++).toString();
1801 x.closed = q.value(i++).toBool();
1802 x.can_be_run = q.value(i++).toBool();
1803 x.ignored = q.value(i++).toBool();
1804 list << x;
1805 }
1806 return list;
1807 };
1808
1809 bool findNullCategory = (category.isEmpty() || category == "");
1810 if (!findNullCategory) {
1811 q.prepare(R"'(select 1 from status_order where category = :category;)'");
1812 q.bindValue(":category", categoryi);
1813 q.exec();
1814 findNullCategory = !q.next();
1815 }
1816
1817 if (findNullCategory && (previousStatus.isEmpty() || previousStatus == "")) {
1818 q.prepare(R"'(
1819 select s.status, s.description, s.abbreviation, s.color, s.closed, s.can_be_run, s.ignored
1820 from statuses s, status_order o
1821 where s.status = o.next_status
1822 and (o.previous_status is null or o.previous_status = '')
1823 and (o.category is null);
1824 )'");
1825 return results();
1826 }
1827
1828 if (findNullCategory) {
1829 q.prepare(R"'(
1830 select s.status, s.description, s.abbreviation, s.color, s.closed, s.can_be_run, s.ignored
1831 from statuses s, status_order o
1832 where s.status = o.next_status
1833 and o.previous_status = :previous_status
1834 and (o.category is null);
1835 )'");
1836 q.bindValue(":previous_status", ps);
1837 return results();
1838 }
1839
1840 if (!findNullCategory && (previousStatus.isEmpty() || previousStatus == "")) {

◆ overviewList()

QList< Dbt::OverviewList > DatabasePluginPostgres::overviewList ( )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1843 v souboru database_plugin_postgres.cpp.

1846 :category;
1847 )'");
1848 q.bindValue(":category", categoryi);
1849 return results();
1850 }
1851
1852
1853 if (!findNullCategory) {
1854 q.prepare(R"'(
1855 select s.status, s.description, s.abbreviation, s.color, s.closed, s.can_be_run, s.ignored
1856 from statuses s, status_order o
1857 where s.status = o.next_status
1858 and o.previous_status = :previous_status
1859 and o.category = :category;
1860 )'");
1861 q.bindValue(":previous_status", ps);
1862 q.bindValue(":category", categoryi);
1863 return results();
1864 }
1865
1866 return QList<Dbt::Statuses>();
1867
1868}
1869
1870
1871void DatabasePluginPostgres::remove(const Dbt::Statuses& id) {
1872 MSqlQuery q(m_db);
1873 q.prepare(R"'(delete from statuses where status = :id;)'");
1874 q.bindValue(":id", id.status);
1875 q.exec();
1876}

◆ remove() [1/23]

void DatabasePluginPostgres::remove ( const Dbt::AttendanceSummary & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2289 v souboru database_plugin_postgres.cpp.

◆ remove() [2/23]

void DatabasePluginPostgres::remove ( const Dbt::Categories & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 205 v souboru database_plugin_postgres.cpp.

209 {
210 MSqlQuery q(m_db);

◆ remove() [3/23]

void DatabasePluginPostgres::remove ( const Dbt::DepartmentHasManager & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2236 v souboru database_plugin_postgres.cpp.

2236 :category
2237 and statuses = )'" + statusesX );
2238 q.bindValue(":category", category);
2239 q.exec();
2240 if (q.next()) {
2241 list = overview(q.value(0).toString());
2242 return list;

◆ remove() [4/23]

void DatabasePluginPostgres::remove ( const Dbt::DepartmentHasMember & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2244 v souboru database_plugin_postgres.cpp.

2247 :key, :category, " + statusesX + ");");
2248 q.bindValue(":key", rnds);
2249 q.bindValue(":category", category);
2250 q.exec();

◆ remove() [5/23]

void DatabasePluginPostgres::remove ( const Dbt::Departments & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2200 v souboru database_plugin_postgres.cpp.

2205 {
2206 int i=0;

◆ remove() [6/23]

void DatabasePluginPostgres::remove ( const Dbt::Doors & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2208 v souboru database_plugin_postgres.cpp.

◆ remove() [7/23]

void DatabasePluginPostgres::remove ( const Dbt::EmployeeCanOpenDoor & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2252 v souboru database_plugin_postgres.cpp.

2257 {
2258 QList<Dbt::Overview> list;

◆ remove() [8/23]

void DatabasePluginPostgres::remove ( const Dbt::EmployeeHasRfid & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2260 v souboru database_plugin_postgres.cpp.

◆ remove() [9/23]

void DatabasePluginPostgres::remove ( const Dbt::Employees & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2215 v souboru database_plugin_postgres.cpp.

◆ remove() [10/23]

void DatabasePluginPostgres::remove ( const Dbt::Events & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2229 v souboru database_plugin_postgres.cpp.

◆ remove() [11/23]

void DatabasePluginPostgres::remove ( const Dbt::EventTypes & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2222 v souboru database_plugin_postgres.cpp.

2222 {
2223 QString statusesX;
2224 QStringList statusesL;
2225 for (int i=0; i<statuses.size(); i++) {
2226 statusesL << "'" + statuses[i] + "'";
2227 }

◆ remove() [12/23]

void DatabasePluginPostgres::remove ( const Dbt::Holidays & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2275 v souboru database_plugin_postgres.cpp.

◆ remove() [13/23]

void DatabasePluginPostgres::remove ( const Dbt::OverviewList & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1878 v souboru database_plugin_postgres.cpp.

1879 {
1880 MSqlQuery q(m_db);
1881
1882 begin();
1883 q.prepare(R"'(

◆ remove() [14/23]

void DatabasePluginPostgres::remove ( const Dbt::Rfids & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2268 v souboru database_plugin_postgres.cpp.

2269 :key", overviewId.toUpper());
2270 q.exec();
2271 if (!q.next()) { return list; }
2272 overview.category.category = q.value(0).toString();
2273 overview.category.parent_category = null(q.value(1).toString());

◆ remove() [15/23]

void DatabasePluginPostgres::remove ( const Dbt::Statuses & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1472 v souboru database_plugin_postgres.cpp.

◆ remove() [16/23]

void DatabasePluginPostgres::remove ( const Dbt::StatusOrder & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 579 v souboru database_plugin_postgres.cpp.

583 {
584 MSqlQuery q(m_db);

◆ remove() [17/23]

void DatabasePluginPostgres::remove ( const Dbt::TicketFiles & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1626 v souboru database_plugin_postgres.cpp.

1629 {
1630 QList<Dbt::TicketValues> list;
1631 MSqlQuery q(m_db);

◆ remove() [18/23]

void DatabasePluginPostgres::remove ( const Dbt::Tickets & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 733 v souboru database_plugin_postgres.cpp.

◆ remove() [19/23]

void DatabasePluginPostgres::remove ( const Dbt::TicketStatus & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 882 v souboru database_plugin_postgres.cpp.

◆ remove() [20/23]

void DatabasePluginPostgres::remove ( const Dbt::TicketTimesheets & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1260 v souboru database_plugin_postgres.cpp.

◆ remove() [21/23]

void DatabasePluginPostgres::remove ( const Dbt::TicketValues & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1358 v souboru database_plugin_postgres.cpp.

1360 {
1361 QList<Dbt::TicketTimesheets> list;
1362 MSqlQuery q(m_db);
1363

◆ remove() [22/23]

void DatabasePluginPostgres::remove ( const Dbt::Users & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 501 v souboru database_plugin_postgres.cpp.

511 {
512 QList<Dbt::Categories> list;

◆ remove() [23/23]

void DatabasePluginPostgres::remove ( const Dbt::WorkCalendar & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2282 v souboru database_plugin_postgres.cpp.

2286 :key)
2287

◆ removeTicketsDetails()

void DatabasePluginPostgres::removeTicketsDetails ( int ticket)
protected

Definice je uvedena na řádku 811 v souboru database_plugin_postgres.cpp.

◆ rfids()

QList< Dbt::Rfids > DatabasePluginPostgres::rfids ( int rfid)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2099 v souboru database_plugin_postgres.cpp.

2099 {
2100 q.prepare(R"'(select id, "user", category from users_categories where "user" = :user)'");
2101 q.bindValue(":user", user);
2102 return retvals();
2103 }
2104
2105 if (id <= 0 && category.isEmpty() && user <= 0) {
2106 q.prepare(R"'(select id, "user", category from users_categories)'");
2107 return retvals();
2108 }
2109
2110 if (id <= 0 && !category.isEmpty() && user > 0) {
2111 q.prepare(R"'(select id, "user", category from users_categories where "user" = :user and category = :category)'");
2112 q.bindValue(":user", user);
2113 q.bindValue(":category", category);
2114 return retvals();
2115 }
2116
2117 if (id <= 0 && !category.isEmpty() && user <= 0) {
2118 q.prepare(R"'(select id, "user", category from users_categories where category = :category)'");
2119 q.bindValue(":category", category);

◆ rfidsById()

QList< Dbt::Rfids > DatabasePluginPostgres::rfidsById ( const QString & rfidId)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2121 v souboru database_plugin_postgres.cpp.

2128 {
2129 QString statusesX;
2130 QStringList statusesL;
2131 for (int i=0; i<statuses.size(); i++) {
2132 statusesL << "'" + statuses[i] + "'";
2133 }
2134 statusesL.sort();
2135 statusesX = statusesL.join(",");
2136
2137 QList<Dbt::CategoriesOverview> list;
2138 MSqlQuery q(m_db);
2139 q.prepare(QString(R"'(
2140 with recursive tree as (

◆ runningTimesheets()

QList< Dbt::TicketTimesheets > DatabasePluginPostgres::runningTimesheets ( int ticket)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1010 v souboru database_plugin_postgres.cpp.

1020 {
1021 return ticketStatus(-1, all);
1022}
1023
1024
1025QList<Dbt::TicketStatus> DatabasePluginPostgres::ticketStatus(int id) {
1026 QList<Dbt::TicketStatus> list;
1027 MSqlQuery q(m_db);
1028
1029 q.prepare(R"'(

◆ save() [1/26]

QVariant DatabasePluginPostgres::save ( const Dbt::AppendStatuses & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 931 v souboru database_plugin_postgres.cpp.

932 :category", data.category);
933 q.bindValue(":date", data.date);
934 q.bindValue(":price", data.price);
935 q.bindValue(":description", data.description);
936 q.bindValue(":user", data.user);
937 q.exec();
938 return currval("tickets_ticket_seq");
939 }
940
941 Q_UNREACHABLE();
942 qFatal("Should not happen");
943 return QVariant();
944
945}
946
947
948template<typename T>
949QList<T> remapTicket(const QList<T>& input, int ticket) {
950 QList<T> list;
951 QListIterator<T> iterator(input);
952 while (iterator.hasNext()) {
953 T x = iterator.next();
954 x.ticket = ticket;
955 if (ticket <= 0) { x.id = 0; }
956 list << x;
957 }
958 return list;
959}
960

◆ save() [2/26]

QVariant DatabasePluginPostgres::save ( const Dbt::AttendanceSummary & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2764 v souboru database_plugin_postgres.cpp.

2764 :key22", p.rfid);
2765 q.exec();
2766 while (q.next()) {
2767 Dbt::EmployeeHasRfid x;
2768 int i=0;
2769 x.employee = q.value(i++).toInt();
2770 x.rfid = q.value(i++).toInt();
2771 list << x;
2772 }
2773 return list;
2774}
2775
2776QList<Dbt::Rfids> DatabasePluginPostgres::rfids(int rfid) {
2777 MSqlQuery q(m_db);
2778 QList<Dbt::Rfids> list;
2779 q.prepare(R"'(
2780 select r.rfid, r.rfid_id, r.valid, r.note,
2781 coalesce(ehr.employee, 0) as employee,
2782 coalesce(e.firstname, '') as firstname,
2783 coalesce(e.surname, '') as surname
2784 from attendance.rfids r
2785 left join attendance.employee_has_rfid ehr using (rfid)
2786 left join attendance.employees e on (e.employee = ehr.employee)
2787 where r.rfid = :key1 or :key2 <= 0;
2788 )'");
2789 q.bindValue(":key1", rfid);
2790 q.bindValue(":key2", rfid);
2791 q.exec();
2792 while (q.next()) {
2793 Dbt::Rfids x;
2794 int i=0;
2795 x.rfid = q.value(i++).toInt();
2796 x.rfid_id = q.value(i++).toString();
2797 x.valid = q.value(i++).toBool();
2798 x.note = q.value(i++).toString();

◆ save() [3/26]

QVariant DatabasePluginPostgres::save ( const Dbt::Categories & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 226 v souboru database_plugin_postgres.cpp.

230 {
231 MSqlQuery q(m_db);
232
233 QVariant parent_category = (data.parent_category.toInt() > 0)
234 ? data.parent_category.toInt()
235 : QVariant();
236
237 QVariant category = (data.category.toInt() > 0)
238 ? data.category.toInt()
239 : QVariant(QVariant::Int);
240
241 if (parent_category.toInt() == category.toInt()) {
242 parent_category = QVariant();
243 }
244
245 // TODO: Kontrola, aby nešlo založit novou kategorii v nadřízené kategorii bez přístupu
246
247 q.begin();
248
249 q.prepare(R"'(select 1 from categories where category = :category;)'");
250 q.bindValue(":category", data.category.toInt());
251 q.exec();
252 bool exists = q.next();
253 if (exists && ! parent_category.isNull()) {
254 q.prepare(R"'(
255 update categories set
256 parent_category = ?,
257 description = ?,
258 price = ?
259 where category = ?
260 )'");
261 q.bindValue(0, parent_category);
262 q.bindValue(1, data.description);
263 q.bindValue(2, data.price);
264 q.bindValue(3, category.toInt());
265 q.exec();
266 }
267
268 if (exists && parent_category.isNull()) {
269 q.prepare(R"'(
270 update categories set
271 description = ?,
272 price = ?
273 where category = ?
274 )'");
275 q.bindValue(0, data.description);
276 q.bindValue(1, data.price);
277 q.bindValue(2, category.toInt());
278 q.exec();
279 }
280
281 if (!exists) {
282 q.prepare(R"string(
283 insert into categories (parent_category, description, price) values (?, ?, ?);
284 )string");
285 q.bindValue(0, parent_category);
286 q.bindValue(1, data.description);
287 q.bindValue(2, data.price);
288 q.exec();
289 category = currval("categories_category_seq");
290 // insert permission for creator
291 q.prepare(R"string(
292 insert into users_categories ("user", category) values (?, ?) on conflict do nothing;
293 )string");
294 q.bindValue(0, userId());
295 q.bindValue(1, category);
296 q.exec();
297 }
298

◆ save() [4/26]

QVariant DatabasePluginPostgres::save ( const Dbt::DepartmentHasManager & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 360 v souboru database_plugin_postgres.cpp.

367 {

◆ save() [5/26]

QVariant DatabasePluginPostgres::save ( const Dbt::DepartmentHasMember & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 369 v souboru database_plugin_postgres.cpp.

372 :name,
373 description = :description
374 ;
375 )'");
376 q.bindValue(":name", data.name);

◆ save() [6/26]

QVariant DatabasePluginPostgres::save ( const Dbt::Departments & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2298 v souboru database_plugin_postgres.cpp.

2302 :key", overviewId.toUpper());
2303 q.exec();
2304
2305 q.prepare(R"'(insert into overview_statuses_tmp select unnest(statuses) from overview_params where key = :key;)'");
2306 q.bindValue(":key", overviewId.toUpper());
2307 q.exec();
2308
2309 q.exec(R"'(
2310 with
2311 ticket_last_status as not materialized (
2312 select t.ticket, tl.status, st.description
2313 from tickets t
2314 left join lateral (select tn.ticket, tn.status
2315 from ticket_status tn, statuses s
2316 where tn.ticket = t.ticket
2317 and tn.status = s.status
2318 and not s.ignored
2319 order by ticket, date desc
2320 limit 1
2321 ) tl using (ticket)
2322 left join statuses st on (st.status = tl.status)
2323 ),

◆ save() [7/26]

QVariant DatabasePluginPostgres::save ( const Dbt::Doors & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2370 v souboru database_plugin_postgres.cpp.

2377 {
2378 if (q.value(2).toInt() == -1) {
2379 Dbt::Overview::TicketsSum s;
2380 s.ticket = q.value(0).toInt();
2381 s.description = q.value(1).toString();
2382 s.duration = q.value(5).toDouble();
2383 s.price = q.value(6).toDouble();
2384 s.status = q.value(7).toString();
2385 overview.ticketsSum << s;
2386 continue;
2387 }
2388 if (q.value(2).toInt() == -2) {
2389 Dbt::Overview::StatusSum s;
2390 s.duration = q.value(5).toDouble();
2391 s.price = q.value(6).toDouble();
2392 s.status = q.value(7).toString();
2393 overview.statusSum << s;

◆ save() [8/26]

QVariant DatabasePluginPostgres::save ( const Dbt::EmployeeCanOpenDoor & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 351 v souboru database_plugin_postgres.cpp.

356 {
357 Dbt::ServerInfo x;
358 int i = 0;

◆ save() [9/26]

QVariant DatabasePluginPostgres::save ( const Dbt::EmployeeHasRfid & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 378 v souboru database_plugin_postgres.cpp.

383 {
384 MSqlQuery q(m_db);
385 q.prepare(R"'(

◆ save() [10/26]

QVariant DatabasePluginPostgres::save ( const Dbt::Employees & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2326 v souboru database_plugin_postgres.cpp.

◆ save() [11/26]

QVariant DatabasePluginPostgres::save ( const Dbt::Events & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2449 v souboru database_plugin_postgres.cpp.

2457 {
2458 if (q.value(2).toInt() == -1) {
2459 overview.sum.duration = q.value(6).toDouble();
2460 overview.sum.price = q.value(7).toDouble();
2461 continue;
2462 }
2463 int i = 0;
2464 Dbt::Overview::Days t;
2465 t.ticket = q.value(i++).toInt();
2466 t.description = q.value(i++).toString();
2467 t.user = q.value(i++).toInt();
2468 t.user_name = q.value(i++).toString();
2469 t.hour_price = q.value(i++).toDouble();
2470 t.date = q.value(i++).toDateTime();
2471 t.duration = q.value(i++).toDouble();
2472 t.price = q.value(i++).toDouble();
2473 overview.days << t;
2474 }
2475
2476 list << overview;
2477 return list;
2478}
2479
2480
2481QList<Dbt::OverviewList> DatabasePluginPostgres::overviewList() {
2482 MSqlQuery q(m_db);
2483 QList<Dbt::OverviewList> list;
2484
2485 QList<Dbt::Statuses> statusesList = statuses(QString());
2486 QHash<QString, Dbt::Statuses> statusesHash;
2487 for (int i=0; i<statusesList.size(); i++) {
2488 const Dbt::Statuses& item = statusesList[i];
2489 statusesHash[item.status] = item;
2490 }
2491
2492 q.exec(R"'(
2493 select o.key, o.statuses, c.category, c.parent_category, c.description, c.price
2494 from overview_params o
2495 left join categories c using (category)

◆ save() [12/26]

QVariant DatabasePluginPostgres::save ( const Dbt::EventTypes & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2396 v souboru database_plugin_postgres.cpp.

2396 {
2397 Dbt::Overview::UserSum s;
2398 s.user_name = q.value(3).toString();
2399 s.duration = q.value(5).toDouble();
2400 s.price = q.value(6).toDouble();
2401 overview.userSum << s;
2402 continue;
2403 }
2404
2405 int i = 0;
2406 Dbt::Overview::Tickets t;
2407 t.ticket = q.value(i++).toInt();
2408 t.description = q.value(i++).toString();
2409 t.user = q.value(i++).toInt();
2410 t.user_name = q.value(i++).toString();
2411 t.hour_price = q.value(i++).toDouble();
2412 t.duration = q.value(i++).toDouble();
2413 t.price = q.value(i++).toDouble();
2414 t.status = q.value(i++).toString();
2415 overview.tickets << t;
2416 }
2417
2418 q.exec(R"'(
2419 with
2420 ticket_last_status as not materialized (
2421 select t.ticket, tl.status
2422 from tickets t
2423 left join lateral (select tn.ticket, tn.status
2424 from ticket_status tn, statuses s
2425 where tn.ticket = t.ticket
2426 and tn.status = s.status
2427 and not s.ignored
2428 order by ticket, date desc
2429 limit 1
2430 ) tl using (ticket)
2431 ),
2432 ticket_timesheets_sum as not materialized (
2433 select ticket, "user", date_to::date as date, sum(date_to - date_from) as duration
2434 from ticket_timesheets
2435 group by ticket, "user", date_to::date
2436 )
2437
2438 select t.ticket, t.description, t."user", u.name, t.price as hour_price, ts.date, to_hours(ts.duration), round(to_hours(ts.duration) * t.price)
2439 from tickets t
2440 left join users u using ("user")
2441 left join ticket_last_status ls using (ticket)
2442 left join ticket_timesheets_sum ts using (ticket, "user")
2443 left join categories c using (category)
2444 where ls.status in (select status from overview_statuses_tmp)
2445 and category in (select category from overview_categories_tmp)

◆ save() [13/26]

QVariant DatabasePluginPostgres::save ( const Dbt::Holidays & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2547 v souboru database_plugin_postgres.cpp.

2547 {
2548 MSqlQuery q(m_db);
2549 QList<Dbt::Doors> list;
2550 q.prepare(R"'(select door, description from attendance.doors where door = :key1 or :key2 <= 0;)'");
2551 q.bindValue(":key1", door);
2552 q.bindValue(":key2", door);
2553 q.exec();
2554 while (q.next()) {
2555 Dbt::Doors x;
2556 int i=0;
2557 x.door = q.value(i++).toInt();
2558 x.description = q.value(i++).toString();
2559 list << x;
2560 }
2561 return list;

◆ save() [14/26]

QVariant DatabasePluginPostgres::save ( const Dbt::Rfids & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2497 v souboru database_plugin_postgres.cpp.

2497 {
2498 int i=0;
2499 Dbt::OverviewList x;
2500 x.key = q.value(i++).toString();
2501
2502 QStringList statuses = q.value(i++).toString().replace("{","").replace("}","").split(",");
2503 for (int i=0; i<statuses.size(); i++) {
2504 x.statuses << statusesHash[statuses[i]];
2505 }
2506
2507 Dbt::Categories c;
2508 c.category = q.value(i++).toString();
2509 c.parent_category = q.value(i++).toString();
2510 c.description = q.value(i++).toString();
2511 c.price = q.value(i++).toDouble();
2512 x.category = c;
2513
2514 list << x;
2515 }
2516
2517 return list;
2518}
2519
2520void DatabasePluginPostgres::remove(const Dbt::OverviewList& x) {
2521 MSqlQuery q(m_db);
2522 q.prepare(R"'(delete from overview_params where key = :key;)'");
2523 q.bindValue(":key", x.key);
2524 q.exec();
2525}
2526
2527
2528QList<Dbt::Departments> DatabasePluginPostgres::departments(int department) {
2529 MSqlQuery q(m_db);
2530 QList<Dbt::Departments> list;
2531 q.prepare(R"'(select department, abbr, description from attendance.departments where department = :key1 or :key2 <= 0;)'");
2532 q.bindValue(":key1", department);
2533 q.bindValue(":key2", department);
2534 q.exec();
2535 while (q.next()) {
2536 Dbt::Departments x;
2537 int i=0;
2538 x.department = q.value(i++).toInt();
2539 x.abbr = q.value(i++).toString();
2540 x.description = q.value(i++).toString();
2541 list << x;
2542 }
2543 return list;
2544}

◆ save() [15/26]

QVariant DatabasePluginPostgres::save ( const Dbt::ServerInfo & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 340 v souboru database_plugin_postgres.cpp.

349 {

◆ save() [16/26]

QVariant DatabasePluginPostgres::save ( const Dbt::Statuses & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1480 v souboru database_plugin_postgres.cpp.

1488 :user
1489 and :ticket = t.ticket
1490 ;
1491 )'");
1492 q.bindValue(":user", userId());
1493 q.bindValue(":ticket", ticket);
1494 q.exec();
1495 if (!q.next()) {
1496 return list;
1497 }
1498
1499 // Zkontroluj, jestli je ticket dostupný pro uživatele a je běžící
1500 q.prepare(R"'(
1501 select tt.id
1502 from ticket_timesheets tt, tickets t, users_categories uc
1503 where t.ticket = tt.ticket
1504 and t.category = uc.category
1505 and uc."user" = :user
1506 and :ticket = tt.ticket
1507 and tt.date_to is null
1508 ;
1509 )'");
1510 q.bindValue(":user", userId());
1511 q.bindValue(":ticket", ticket);
1512 q.setForwardOnly(false);
1513 q.exec();
1514 bool found = (q.size() == 1);
1515 int id = (found) ? q.next(), q.value(0).toInt() : 0;
1516
1517 if (!found) {
1518 // Vložit timesheet
1519 q.prepare(R"'(

◆ save() [17/26]

QVariant DatabasePluginPostgres::save ( const Dbt::StatusOrder & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 587 v souboru database_plugin_postgres.cpp.

587 :id", userId());
588 q.exec();
589 if (!q.next()) { return; }
590
591 q.prepare(R"'(delete from users where "user" = :id;)'");
592 q.bindValue(":id", id.user);
593 q.exec();
594}
595
596
597QVariant DatabasePluginPostgres::save(const Dbt::Users& data) {
598 MSqlQuery q(m_db);
599
600 q.prepare(R"'(select 1 from users where "user" = :id and admin and enabled;)'");
601 q.bindValue(":id", userId());
602 q.exec();
603 if (!q.next()) { return QVariant(); }
604
605
606 q.prepare(R"'(select 1 from users where "user" = :id;)'");
607 q.bindValue(":id", data.user);
608 q.exec();
609 if (q.next()) {
610 q.prepare(R"'(
611 update users set
612 login = :login,
613 name = :name,
614 lang = :lang,
615 enabled = :enabled,

◆ save() [18/26]

QVariant DatabasePluginPostgres::save ( const Dbt::TicketFiles & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1584 v souboru database_plugin_postgres.cpp.

1584 :date_to", data.date_to);
1585 q.exec();
1586
1587 return currval("ticket_timesheets_id_seq");
1588 }
1589
1590 Q_UNREACHABLE();
1591 return QVariant();
1592}
1593
1594
1595void DatabasePluginPostgres::remove(const Dbt::TicketTimesheets& id) {
1596 MSqlQuery q(m_db);
1597 q.prepare(R"'(delete from ticket_timesheets where id = :id;)'");
1598 q.bindValue(":id", id.id);
1599 q.exec();
1600}
1601
1602
1603QList<Dbt::TicketValues> DatabasePluginPostgres::ticketValues(int ticket, bool all) {
1604 createTemporaryTableTickets(ticket, all);
1605 QList<Dbt::TicketValues> list;
1606 MSqlQuery q(m_db);
1607 q.prepare(R"'(
1608 select tv.id, tt.ticket, tv.name, tv.value, tv."user", tv.date
1609 from temporary_tickets tt, ticket_values tv
1610 where tt.ticket = tv.ticket
1611 ;
1612 )'");
1613 q.exec();
1614 while (q.next()) {
1615 int i=0;
1616 Dbt::TicketValues x;
1617 x.id = q.value(i++).toInt();
1618 x.ticket = q.value(i++).toInt();
1619 x.name = q.value(i++).toString();
1620 x.value = JSON::data(q.value(i++).toByteArray());
1621 x.user = q.value(i++).toInt();
1622 x.date = q.value(i++).toDateTime();
1623 list << x;

◆ save() [19/26]

QVariant DatabasePluginPostgres::save ( const Dbt::Tickets & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 741 v souboru database_plugin_postgres.cpp.

746 :user
747 and (:ticket1 <= 0 or :ticket2 = t.ticket)
748 ;
749 )'");
750 } else {
751 PDEBUG << "Vybiram pouze otevrene" << ticket;
752 q.prepare(R"'(
753 with
754 ending_status as (
755 select status from statuses where closed
756 ),
757 ticket_last_status as (
758 select t.ticket, tl.status
759 from tickets t
760 left join lateral (select tn.ticket, tn.status from ticket_status tn where tn.ticket = t.ticket order by ticket, date desc limit 1) tl using (ticket)
761 ),
762 closed_tickets as (
763 select distinct ts.ticket from ticket_last_status ts, ending_status es where ts.status = es.status
764 ),
765 active_tickets as (
766 select t1.ticket from tickets t1 where t1.ticket not in (select ticket from closed_tickets)
767 )
768
769 insert into temporary_tickets (ticket, category, date, price, description, "user")
770 select t.ticket, t.category, t.date, t.price, t.description, t."user"
771 from tickets t, users_categories uc
772 where t.ticket in (select ticket from active_tickets)
773 and uc."user" = :user
774 and t.category = uc.category
775 and (:ticket1 <= 0 or :ticket2 = t.ticket)
776 ;
777 )'");
778 }
779 q.bindValue(":user", userId());

◆ save() [20/26]

QVariant DatabasePluginPostgres::save ( const Dbt::TicketStatus & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 890 v souboru database_plugin_postgres.cpp.

890 :id;)'");
891 q.bindValue(":id", id.ticket);
892 q.exec();
893}
894
895
896QVariant DatabasePluginPostgres::save(const Dbt::Tickets& data) {
897 MSqlQuery q(m_db);
898
899 bool found = false;
900 if (!data.created) {
901 q.prepare(R"'(select 1 from tickets where ticket = :ticket;)'");
902 q.bindValue(":ticket", data.ticket);
903 q.exec();
904 found = q.next();
905 }
906
907 if (!data.created && found) {
908 q.prepare(R"'(
909 update tickets set
910 category = :category,
911 date = :date,
912 price = :price,
913 description = :description,
914 "user" = :user
915 where ticket = :ticket
916 )'");
917 q.bindValue(":category", data.category);
918 q.bindValue(":date", data.date);
919 q.bindValue(":price", data.price);
920 q.bindValue(":description", data.description);
921 q.bindValue(":user", data.user);
922 q.bindValue(":ticket", data.ticket);
923 q.exec();
924 return QVariant(data.ticket);
925 }
926
927 if (data.created || !found) {
928 q.prepare(R"'(

◆ save() [21/26]

QVariant DatabasePluginPostgres::save ( const Dbt::TicketsVw & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 796 v souboru database_plugin_postgres.cpp.

796 {
797 createTemporaryTableTickets(ticket, all);
798 QList<Dbt::Tickets> list;
799 MSqlQuery q(m_db);
800
801 q.prepare(R"'(
802 select ticket, category, date, price, description, "user"
803 from temporary_tickets ;
804 )'");
805 q.exec();
806 while (q.next()) {
807 Dbt::Tickets x;
808 int i=0;

◆ save() [22/26]

QVariant DatabasePluginPostgres::save ( const Dbt::TicketTimesheets & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1222 v souboru database_plugin_postgres.cpp.

1222 :ticket", ticket);
1223 q.exec();
1224 while (q.next()) {
1225 int i=0;
1226 Dbt::TicketTimesheets x;
1227 x.id = q.value(i++).toInt();
1228 x.ticket = q.value(i++).toInt();
1229 x.user = q.value(i++).toInt();
1230 x.date_from = q.value(i++).toDateTime();
1231 x.date_to = q.value(i++).toDateTime();
1232 list << x;
1233 }
1234 return list;
1235}
1236
1237
1238QList<Dbt::TicketTimesheets> DatabasePluginPostgres::ticketTimesheets(int id) {
1239 QList<Dbt::TicketTimesheets> list;
1240 MSqlQuery q(m_db);
1241 q.prepare(R"'(
1242 select tt.id, tt.ticket, tt."user", tt.date_from, tt.date_to
1243 from ticket_timesheets tt, tickets t, users_categories uc
1244 where t.ticket = tt.ticket
1245 and t.category = uc.category
1246 and uc."user" = :user
1247 and :id = tt.id
1248 order by tt.date_from
1249 ;
1250 )'");
1251 q.bindValue(":user", userId());
1252 q.bindValue(":id", id);
1253 q.exec();
1254 while (q.next()) {
1255 int i=0;
1256 Dbt::TicketTimesheets x;
1257 x.id = q.value(i++).toInt();

◆ save() [23/26]

QVariant DatabasePluginPostgres::save ( const Dbt::TicketValues & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1316 v souboru database_plugin_postgres.cpp.

1319 :user", userId());
1320 q.bindValue(":ticket", ticket);
1321 q.exec();
1322 if (q.next()) {
1323 return list;
1324 }
1325
1326 // Zkontroluj, jestli je ticket dostupný pro uživatele a existující
1327 q.prepare(R"'(
1328 select 1
1329 from tickets t, users_categories uc
1330 where t.category = uc.category
1331 and uc."user" = :user
1332 and :ticket = t.ticket
1333 ;
1334 )'");
1335 q.bindValue(":user", userId());
1336 q.bindValue(":ticket", ticket);
1337 q.exec();
1338 if (!q.next()) {
1339 return list;
1340 }
1341
1342 // Vložit timesheet
1343 q.prepare(R"'(
1344 insert into ticket_timesheets (ticket, "user", date_from)
1345 values (:ticket, :user, now())
1346 )'");
1347 q.bindValue(":user", userId());
1348 q.bindValue(":ticket", ticket);
1349 q.exec();
1350 QVariant id = currval("ticket_timesheets_id_seq").toInt();
1351 if (id.isNull() || !id.isValid()) {
1352 return list;
1353 }
1354
1355 list = ticketTimesheets(id.toInt());

◆ save() [24/26]

QVariant DatabasePluginPostgres::save ( const Dbt::Users & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 515 v souboru database_plugin_postgres.cpp.

519 :id1 <= 0 and c.parent_category is null) or :id2 = c.parent_category)
520 and u."user" = :user and (u.admin or u."user" in (select "user" from users_categories uc where uc.category = c.category))
521 ;
522 )'");
523 q.bindValue(":user", userId());
524 q.bindValue(":id1", id.toInt());
525 q.bindValue(":id2", id.toInt());
526 q.exec();
527 while (q.next()) {
528 int i=0;
529 Dbt::Categories x;
530 x.category = q.value(i++).toString();
531 x.parent_category = null(q.value(i++).toString());
532 x.description = q.value(i++).toString();
533 x.price = q.value(i++).toDouble();
534 x.users = pgArrayToVariantList(q.value(i++));
535 x.description_tree = q.value(i++).toString();
536 list << x;
537 }
538
539 return list;
540}
541
542
543QList<Dbt::Categories> DatabasePluginPostgres::siblingcategories(const QString& id) {
544 QList<Dbt::Categories> list;
545 MSqlQuery q(m_db);
546
547 q.prepare(R"'(
548 with recursive tree as (
549 select category, parent_category
550 from categories where category = :id
551 union all
552 select c.category, c.parent_category
553 from tree t, categories c

◆ save() [25/26]

QVariant DatabasePluginPostgres::save ( const Dbt::WorkCalendar & data)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2564 v souboru database_plugin_postgres.cpp.

2564 {
2565 MSqlQuery q(m_db);
2566 QList<Dbt::Employees> list;
2567 q.prepare(R"'(select e.employee, e.firstname, e.surname, e.active, e."user", coalesce(u.login, '') as login,
2568 e.work_hours_mode, e.rounding_interval,
2569 e.saturdays_paid, e.sundays_paid, e.auto_breaks, e.overtime_paid
2570 from attendance.employees e
2571 left join users u on (u."user" = e."user")
2572 where e.employee = :key1 or :key2 <= 0;)'");
2573 q.bindValue(":key1", employee);
2574 q.bindValue(":key2", employee);
2575 q.exec();
2576 while (q.next()) {
2577 Dbt::Employees x;
2578 int i=0;
2579 x.employee = q.value(i++).toInt();
2580 x.firstname = q.value(i++).toString();
2581 x.surname = q.value(i++).toString();

◆ save() [26/26]

template<typename T>
void Db::Plugins::DatabasePluginPostgres::save ( const QList< T > & list)
inline

Definice je uvedena na řádku 78 v souboru database_plugin_postgres.h.

78 {
79 QListIterator<T> iterator(list);
80 while (iterator.hasNext()) {
81 save(iterator.next());
82 }
83 }

◆ serverInfo()

QList< Dbt::ServerInfo > DatabasePluginPostgres::serverInfo ( )
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 324 v souboru database_plugin_postgres.cpp.

332 {
333 Dbt::ClientSettings x;
334 int i = 0;
335 x.multiple_timesheets = q.value(i++).toBool();
336 x.show_price = q.value(i++).toBool();
337 x.can_change_category = q.value(i++).toBool();

◆ setDatabaseName()

void Db::Plugins::DatabasePluginPostgres::setDatabaseName ( const QString & x)
inlinevirtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 25 v souboru database_plugin_postgres.h.

25{ m_databasename = x; }

◆ setHostname()

void Db::Plugins::DatabasePluginPostgres::setHostname ( const QString & x)
inlinevirtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 26 v souboru database_plugin_postgres.h.

26{ m_hostname = x; }

◆ setPassword()

void Db::Plugins::DatabasePluginPostgres::setPassword ( const QString & x)
inlinevirtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 29 v souboru database_plugin_postgres.h.

29{ m_password = x; }

◆ setPort()

void Db::Plugins::DatabasePluginPostgres::setPort ( int x)
inlinevirtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 27 v souboru database_plugin_postgres.h.

27{ m_port = x; }

◆ setUserName()

void Db::Plugins::DatabasePluginPostgres::setUserName ( const QString & x)
inlinevirtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 28 v souboru database_plugin_postgres.h.

28{ m_username = x; }

◆ siblingcategories()

QList< Dbt::Categories > DatabasePluginPostgres::siblingcategories ( const QString & id)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 477 v souboru database_plugin_postgres.cpp.

484 :id = c.category
485 and u."user" = :user and (u.admin or u."user" in (select "user" from users_categories uc where uc.category = c.category))
486 ;
487 )'");
488 for (;;) {
489 q.bindValue(":user", userId());
490 q.bindValue(":id", xid);
491 q.exec();
492 bool found = q.next();
493 PDEBUG << xid << found;
494 if (!found) { return list; }
495 int i=0;
496 Dbt::Categories x;
497 x.category = q.value(i++).toString();
498 x.parent_category = null(q.value(i++).toString());

◆ startTimesheet()

QList< Dbt::TicketTimesheets > DatabasePluginPostgres::startTimesheet ( int ticket)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1032 v souboru database_plugin_postgres.cpp.

1032 :id
1033 and t.ticket = ts.ticket
1034 and t.category = uc.category
1035 and u."user" = ts."user"
1036 and ts.status = s.status
1037 )'");
1038 q.bindValue(":id", id);
1039 q.bindValue(":user", userId());
1040 q.exec();
1041 while (q.next()) {
1042 Dbt::TicketStatus x;
1043 int i=0;
1044 x.id = q.value(i++).toInt();
1045 x.ticket = q.value(i++).toInt();
1046 x.user = q.value(i++).toInt();
1047 x.date = q.value(i++).toDateTime();
1048 x.description = q.value(i++).toString();
1049 x.status = q.value(i++).toString();
1050 x.status_color = q.value(i++).toString();
1051 x.status_description = q.value(i++).toString();
1052 x.status_closed = q.value(i++).toBool();
1053 x.status_can_be_run = q.value(i++).toBool();
1054 x.status_ignored = q.value(i++).toBool();
1055 list << x;
1056 }
1057 return list;
1058}
1059
1060
1061
1062void DatabasePluginPostgres::remove(const Dbt::TicketStatus& id) {
1063 MSqlQuery q(m_db);
1064 q.prepare(R"'(delete from ticket_status where id = :id;)'");
1065 q.bindValue(":id", id.id);
1066 q.exec();

◆ statuses() [1/2]

QList< Dbt::Statuses > DatabasePluginPostgres::statuses ( const QString & id)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1366 v souboru database_plugin_postgres.cpp.

1371 :user
1372 and :ticket = tt.ticket
1373 and tt.date_to is null
1374 ;
1375 )'");
1376 q.bindValue(":user", userId());
1377 q.bindValue(":ticket", ticket);
1378 q.setForwardOnly(false);
1379 q.exec();
1380 if (q.size() != 1) {
1381 q.commit();
1382 return list;
1383 }
1384 q.next();
1385 int id = q.value(0).toInt();
1386
1387 // Ukončit timesheet
1388 q.prepare(R"'(
1389 update ticket_timesheets set date_to = now() where id = :id;
1390 )'");
1391 q.bindValue(":id", id);
1392 q.exec();
1393
1394 list = ticketTimesheets(ticket, true);
1395
1396 int remove_secs = 10;
1397 int round2_mins = 5;
1398 int round5_mins = 5;
1399 int join_mins = 5;
1400 int remove_singles_mins = 3;
1401
1402 // step 1 - remove timesheets shorter than ...
1403 for (int i=list.size()-1; i>=0; i--) {
1404 Dbt::TicketTimesheets& x = list[i];
1405 if (x.date_from.secsTo(x.date_to) > remove_secs) { continue; }
1406 list.removeAt(i);
1407 }

◆ statuses() [2/2]

QList< Dbt::Statuses > DatabasePluginPostgres::statuses ( const QString & category,
const QString & previousStatus )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1410 v souboru database_plugin_postgres.cpp.

1410 {
1411 Dbt::TicketTimesheets& x = list[i];
1412 int secs;
1413 secs = x.date_from.secsTo(x.date_to);
1414 secs = secs / (round2_mins * 60) + ( (secs % (round2_mins*60)) ? 1 : 0);
1415 secs = secs * (round2_mins * 60);
1416 x.date_to = x.date_from.addSecs(secs);
1417 }
1418
1419 // step3 - join overlapinng records
1420 for (int i=list.size()-1; i>=1; i--) {
1421 Dbt::TicketTimesheets& x0 = list[i-1];
1422 Dbt::TicketTimesheets& x1 = list[i];
1423
1424 if (x0.date_to < x1.date_from) { continue; }
1425 x0.date_to = x1.date_to;
1426 list.removeAt(i);
1427 }
1428
1429 // step4 - join near records
1430 for (int i=list.size()-1; i>=1; i--) {
1431 Dbt::TicketTimesheets& x0 = list[i-1];
1432 Dbt::TicketTimesheets& x1 = list[i];
1433 if (x0.date_to.addSecs(join_mins*60) < x1.date_from) { continue; }
1434 x0.date_to = x1.date_to;
1435 list.removeAt(i);
1436 }
1437
1438 // step5 - round timetracks to ...
1439 for (int i=list.size()-1; i>=0; i--) {
1440 Dbt::TicketTimesheets& x = list[i];
1441 int secs;
1442 secs = x.date_from.secsTo(x.date_to);
1443 secs = secs + (round5_mins * 60) -1;
1444 secs = secs / (round5_mins * 60);
1445 secs = secs * (round5_mins * 60);
1446 x.date_to = x.date_from.addSecs(secs);
1447 }
1448
1449 // step6 - remove short single records
1450 for (int i=list.size()-1; i>=0; i--) {
1451 Dbt::TicketTimesheets& x = list[i];
1452 int secs = x.date_from.secsTo(x.date_to);
1453 if (secs <= 0) { continue; }
1454 if (secs >= remove_singles_mins * 60) { continue; }
1455 list.removeAt(i);
1456 }
1457
1458 q.prepare(R"'(delete from ticket_timesheets where ticket = :ticket;)'");
1459 q.bindValue(":ticket", ticket);
1460 q.exec();
1461
1462 q.prepare(R"'(insert into ticket_timesheets (ticket, "user", date_from, date_to)
1463 values (:ticket, :user, :date_from, :date_to);
1464 )'");
1465 for (int i=0; i<list.size(); i++) {
1466 Dbt::TicketTimesheets& x = list[i];
1467 q.bindValue(":ticket", ticket);
1468 q.bindValue(":user", userId());
1469 q.bindValue(":date_from", x.date_from);

◆ statusOrder()

QList< Dbt::StatusOrder > DatabasePluginPostgres::statusOrder ( const QString & id)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 556 v souboru database_plugin_postgres.cpp.

560 :user and (u.admin or u."user" in (select "user" from users_categories uc where uc.category = c.category))
561 and c.category not in (select category from tree)
562 ;
563 )'");
564 q.bindValue(":user", userId());
565 q.bindValue(":id", id.toInt());
566 q.exec();
567 while (q.next()) {
568 int i=0;
569 Dbt::Categories x;
570 x.category = q.value(i++).toString();
571 x.parent_category = null(q.value(i++).toString());
572 x.description = q.value(i++).toString();
573 x.price = q.value(i++).toDouble();
574 x.users = pgArrayToVariantList(q.value(i++));
575 x.description_tree = q.value(i++).toString();
576 list << x;

◆ statusTemplates()

QList< Dbt::StatusTemplates > DatabasePluginPostgres::statusTemplates ( int id)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1522 v souboru database_plugin_postgres.cpp.

1523 :user", userId());
1524 q.bindValue(":ticket", ticket);
1525 q.exec();
1526 QVariant newid = currval("ticket_timesheets_id_seq");
1527 if (newid.isNull() || !newid.isValid()) {

◆ stopTimesheet()

QList< Dbt::TicketTimesheets > DatabasePluginPostgres::stopTimesheet ( int ticket)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1069 v souboru database_plugin_postgres.cpp.

1070 {
1071 MSqlQuery q(m_db);
1072
1073 bool found = false;
1074 if (!data.created) {
1075 q.prepare(R"'(select 1 from ticket_status where id = :id;)'");
1076 q.bindValue(":id", data.id);
1077 q.exec();
1078 found = q.next();
1079 }
1080
1081 if (!data.created && found) {
1082 q.prepare(R"'(
1083 update ticket_status set
1084 ticket = :ticket,
1085 "user" = :user,
1086 date = :date,
1087 description = :description,
1088 status = :status
1089 where id = :id
1090 )'");
1091 q.bindValue(":id", data.id);
1092 q.bindValue(":user", data.user);
1093 q.bindValue(":ticket", data.ticket);
1094 q.bindValue(":date", data.date);
1095 q.bindValue(":description", data.description);
1096 q.bindValue(":status", data.status);
1097 q.exec();
1098 return QVariant(data.id);
1099 }
1100
1101 if (data.created || !found) {
1102 q.prepare(R"'(
1103 insert into ticket_status (ticket, "user", date, description, status)
1104 values (:ticket, :user, :date, :description, :status)
1105 )'");
1106 q.bindValue(":user", data.user);
1107 q.bindValue(":ticket", data.ticket);
1108 q.bindValue(":date", data.date);
1109 q.bindValue(":description", data.description);
1110 q.bindValue(":status", data.status);
1111 q.exec();
1112
1113 return currval("ticket_status_id_seq");
1114 }
1115
1116 Q_UNREACHABLE();
1117 qFatal("Should not happen");
1118 return QVariant();
1119}
1120
1121
1122QVariant DatabasePluginPostgres::save(const Dbt::AppendStatuses& data) {
1123 PDEBUG << data.toMap();
1124
1125 QString statusesX;
1126 QStringList statusesL;
1127 for (int i=0; i<data.recent_status.size(); i++) {
1128 statusesL << "'" + data.recent_status[i].toString() + "'";
1129 }
1130 statusesL.sort();
1131 statusesX = statusesL.join(",");
1132
1133 QString categoriesX;
1134 QStringList categoriesL;
1135 for (int i=0; i<data.categories.size(); i++) {
1136 categoriesL << "'" + data.categories[i].toString() + "'";
1137 }
1138 categoriesL.sort();
1139 categoriesX = categoriesL.join(",");
1140
1141 MSqlQuery q(m_db);
1142 q.prepare(QString(R"'(
1143 with
1144
1145 -- select statuses
1146 x_statuses as (
1147 select * from statuses
1148 where status in (%1)
1149 and not ignored
1150 ),
1151
1152 -- select new status, if possible
1153 x_newstatuses as (
1154 select distinct s.*
1155 from statuses s, status_order o
1156 where status = :status
1157 and s.status = o.next_status
1158 and o.previous_status in (select status from x_statuses)
1159 ),
1160
1161 -- select current user
1162 x_users as (
1163 select *
1164 from users
1165 where "user" = :userid
1166 ),
1167
1168 -- select valid categories
1169 x_categories as (
1170 select c.*
1171 from categories c, x_users u
1172 where c.category in (%2)
QVariantList categories
categories which are appended with new statuse
Definition dbt.h:363
QVariantList recent_status
recent statuses
Definition dbt.h:364

◆ subcategories()

QList< Dbt::Categories > DatabasePluginPostgres::subcategories ( const QString & id)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 452 v souboru database_plugin_postgres.cpp.

452 :user and (u.admin or u."user" in (select "user" from users_categories uc where uc.category = c.category))
453 ;
454 )'");
455 q.bindValue(":user", userId());
456 q.bindValue(":id1", id.toInt());
457 q.bindValue(":id2", id.toInt());
458 q.exec();
459 while (q.next()) {
460 int i=0;
461 Dbt::Categories x;
462 x.category = q.value(i++).toString();
463 x.parent_category = null(q.value(i++).toString());
464 x.description = q.value(i++).toString();
465 x.price = q.value(i++).toDouble();
466 x.users = pgArrayToVariantList(q.value(i++));
467 x.description_tree = q.value(i++).toString();
468 list << x;
469 }
470
471 return list;
472}
473
474

◆ ticketFiles() [1/3]

QList< Dbt::TicketFiles > DatabasePluginPostgres::ticketFiles ( bool all)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1579 v souboru database_plugin_postgres.cpp.

1579 :ticket, :user, :date_from, :date_to)
1580 )'");
1581 q.bindValue(":user", data.user);

◆ ticketFiles() [2/3]

QList< Dbt::TicketFiles > DatabasePluginPostgres::ticketFiles ( int id)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1554 v souboru database_plugin_postgres.cpp.

1558 {
1559 q.prepare(R"'(
1560 update ticket_timesheets set
1561 ticket = :ticket,
1562 "user" = :user,
1563 date_from = :date_from,
1564 date_to = :date_to
1565 where id = :id
1566 )'");
1567 q.bindValue(":id", data.id);
1568 q.bindValue(":user", data.user);
1569 q.bindValue(":ticket", data.ticket);
1570 q.bindValue(":date_from", data.date_from);
1571 q.bindValue(":date_to", data.date_to);
1572 q.exec();
1573 return QVariant(data.id);
1574 }
1575
1576 if (data.created || !found) {

◆ ticketFiles() [3/3]

QList< Dbt::TicketFiles > DatabasePluginPostgres::ticketFiles ( int ticket,
bool all )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1530 v souboru database_plugin_postgres.cpp.

1533 {
1534 // Ukončit timesheet
1535 q.prepare(R"'(
1536 update ticket_timesheets set date_to = now() where id = :id;
1537 )'");
1538 q.bindValue(":id", id);
1539 q.exec();
1540 }
1541
1542 list = ticketTimesheets(id);
1543 return list;
1544}
1545
1546
1547QVariant DatabasePluginPostgres::save(const Dbt::TicketTimesheets& data) {
1548 MSqlQuery q(m_db);
1549
1550 bool found = false;
1551 if (!data.created) {

◆ tickets() [1/3]

QList< Dbt::Tickets > DatabasePluginPostgres::tickets ( bool all)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 643 v souboru database_plugin_postgres.cpp.

◆ tickets() [2/3]

QList< Dbt::Tickets > DatabasePluginPostgres::tickets ( const Dbt::Categories & category,
bool all )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 670 v souboru database_plugin_postgres.cpp.

676 {
677 MSqlQuery q(m_db);
678 q.prepare(R"'(delete from status_order where id = :id;)'");
679 q.bindValue(":id", id.id);
680 q.exec();
681}
682
683
684QVariant DatabasePluginPostgres::save(const Dbt::StatusOrder& data) {
685 MSqlQuery q(m_db);
686
687 q.prepare(R"'(select 1 from status_order where id = :id;)'");
688 q.bindValue(":id", data.id);
689 q.exec();
690 if (q.next()) {

◆ tickets() [3/3]

QList< Dbt::Tickets > DatabasePluginPostgres::tickets ( int ticket,
bool all )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 648 v souboru database_plugin_postgres.cpp.

650 {
651 QList<Dbt::StatusOrder> list;
652 MSqlQuery q(m_db);
653
654 q.prepare(R"'(
655 select id, category, previous_status, next_status from status_order
656 where (:id1 <= 0 or :id2 = id);
657 )'");
658 q.bindValue(":id1", id.toInt());
659 q.bindValue(":id2", id.toInt());
660 q.exec();
661 while (q.next()) {
662 int i = 0;
663 Dbt::StatusOrder x;
664 x.id = q.value(i++).toInt();
665 x.category = q.value(i++);
666 x.previous_status = q.value(i++);
667 x.next_status = q.value(i++);

◆ ticketStatus() [1/3]

QList< Dbt::TicketStatus > DatabasePluginPostgres::ticketStatus ( bool all)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 848 v souboru database_plugin_postgres.cpp.

849 {
850 return ticketsVw(-1, all);

◆ ticketStatus() [2/3]

QList< Dbt::TicketStatus > DatabasePluginPostgres::ticketStatus ( int id)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 853 v souboru database_plugin_postgres.cpp.

854 {
855 QList<Dbt::Tickets> list1 = tickets(ticket,all);
856 QList<Dbt::TicketsVw> list;
857 MSqlQuery q(m_db);
858 for (int i=0; i<list1.size(); i++) {
859 Dbt::TicketsVw x = list1[i];
860 x.timesheets = ticketTimesheets(list1[i].ticket.toInt(), all);
861 x.statuses = ticketStatus(list1[i].ticket.toInt(), all);
862 x.values = ticketValues(list1[i].ticket.toInt(), all);
863 x.files = ticketFiles(list1[i].ticket.toInt(), all);
864 list << x;
865 }
866
867 return list;
868}
869
870
871QList<Dbt::TicketsVw> DatabasePluginPostgres::ticketsVw(const Dbt::Categories& category, bool all) {
872 QList<Dbt::Tickets> list1 = tickets(category, all);
873 QList<Dbt::TicketsVw> list;
874 MSqlQuery q(m_db);
875 for (int i=0; i<list1.size(); i++) {
876 Dbt::TicketsVw x = list1[i];
877 x.timesheets = ticketTimesheets(list1[i].ticket.toInt(), true);
878 x.statuses = ticketStatus(list1[i].ticket.toInt(), true);

◆ ticketStatus() [3/3]

QList< Dbt::TicketStatus > DatabasePluginPostgres::ticketStatus ( int ticket,
bool all )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 820 v souboru database_plugin_postgres.cpp.

821 {
822 createTemporaryTableTickets(-1, all);
823 QList<Dbt::Tickets> list;
824 MSqlQuery q(m_db);
825
826 q.prepare(R"'(
827 select ticket, category, date, price, description, "user"
828 from temporary_tickets
829 where category = :category;
830 )'");
831 q.bindValue(":category", category.category);
832 q.exec();
833 while (q.next()) {
834 Dbt::Tickets x;
835 int i=0;
836 x.ticket = q.value(i++);
837 x.category = q.value(i++);
838 x.date = q.value(i++).toDateTime();
839 x.price = q.value(i++).toDouble();
840 x.description = q.value(i++).toString();
841 x.user = q.value(i++).toInt();
842 list << x;
843 }
844 return list;
845}

◆ ticketsVw() [1/3]

QList< Dbt::TicketsVw > DatabasePluginPostgres::ticketsVw ( bool all)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 694 v souboru database_plugin_postgres.cpp.

694 :previous_status,
695 next_status = :next_status
696 where id = :id

◆ ticketsVw() [2/3]

QList< Dbt::TicketsVw > DatabasePluginPostgres::ticketsVw ( const Dbt::Categories & category,
bool all )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 716 v souboru database_plugin_postgres.cpp.

724 {
725 if (m_temporaryTableTicketsCreated) { return; }
726 m_temporaryTableTicketsCreated = true;
727 MSqlQuery q(m_db);
728 q.exec(R"'(
729 create temporary table temporary_tickets (
730 ticket int,

◆ ticketsVw() [3/3]

QList< Dbt::TicketsVw > DatabasePluginPostgres::ticketsVw ( int ticket,
bool all )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 699 v souboru database_plugin_postgres.cpp.

699 :previous_status", data.previous_status);
700 q.bindValue(":next_status", data.next_status);
701 q.bindValue(":id", data.id);
702 q.exec();
703 return QVariant(data.id);
704
705 } else {
706
707 q.prepare(R"'(
708 insert into status_order (category, previous_status, next_status)
709 select :category, :previous_status, :next_status
710 )'");
711 q.bindValue(":category", data.category);
712 q.bindValue(":previous_status", data.previous_status);
713 q.bindValue(":next_status", data.next_status);

◆ ticketTimesheets() [1/3]

QList< Dbt::TicketTimesheets > DatabasePluginPostgres::ticketTimesheets ( bool all)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1005 v souboru database_plugin_postgres.cpp.

◆ ticketTimesheets() [2/3]

QList< Dbt::TicketTimesheets > DatabasePluginPostgres::ticketTimesheets ( int id)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 984 v souboru database_plugin_postgres.cpp.

986 {
987 createTemporaryTableTickets(ticket, all);
988 QList<Dbt::TicketStatus> list;
989 MSqlQuery q(m_db);
990
991 q.prepare(R"'(
992 select ts.id, ts.ticket, ts."user", ts.date, ts.description, ts.status, s.color, s.description, s.closed, s.can_be_run, s.ignored
993 from temporary_tickets t, ticket_status ts, statuses s
994 where t.ticket = ts.ticket
995 and ts.status = s.status
996 and t.ticket = :ticket
997 )'");
998 q.bindValue(":ticket", ticket);
999 q.exec();
1000 while (q.next()) {
1001 Dbt::TicketStatus x;
1002 int i=0;

◆ ticketTimesheets() [3/3]

QList< Dbt::TicketTimesheets > DatabasePluginPostgres::ticketTimesheets ( int ticket,
bool all )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 963 v souboru database_plugin_postgres.cpp.

977 {
978 MSqlQuery q(m_db);
979 q.exec(QString(R"'(delete from ticket_timesheets where ticket = %1;)'").arg(ticket));
980 q.exec(QString(R"'(delete from ticket_status where ticket = %1;)'").arg(ticket));
981 q.exec(QString(R"'(delete from ticket_values where ticket = %1;)'").arg(ticket));

◆ ticketValues() [1/3]

QList< Dbt::TicketValues > DatabasePluginPostgres::ticketValues ( bool all)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1311 v souboru database_plugin_postgres.cpp.

◆ ticketValues() [2/3]

QList< Dbt::TicketValues > DatabasePluginPostgres::ticketValues ( int id)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1289 v souboru database_plugin_postgres.cpp.

1290 {
1291 int i=0;
1292 Dbt::TicketTimesheets x;
1293 x.id = q.value(i++).toInt();
1294 x.ticket = q.value(i++).toInt();
1295 x.user = q.value(i++).toInt();
1296 x.date_from = q.value(i++).toDateTime();
1297 x.date_to = q.value(i++).toDateTime();
1298 list << x;
1299 }
1300 return list;
1301}
1302
1303
1304QList<Dbt::TicketTimesheets> DatabasePluginPostgres::startTimesheet(int ticket) {
1305 QList<Dbt::TicketTimesheets> list;
1306 MSqlQuery q(m_db);
1307
1308 // Zkontroluj, jestli je ticket dostupný pro uživatele a je zastavený

◆ ticketValues() [3/3]

QList< Dbt::TicketValues > DatabasePluginPostgres::ticketValues ( int ticket,
bool all )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1268 v souboru database_plugin_postgres.cpp.

1268 {
1269 return ticketTimesheets(-1, all);
1270}
1271
1272
1273QList<Dbt::TicketTimesheets> DatabasePluginPostgres::runningTimesheets(int ticket) {
1274 QList<Dbt::TicketTimesheets> list;
1275 MSqlQuery q(m_db);
1276 q.prepare(R"'(
1277 select tt.id, tt.ticket, tt."user", tt.date_from, tt.date_to
1278 from ticket_timesheets tt, tickets t, users_categories uc
1279 where t.ticket = tt.ticket
1280 and t.category = uc.category
1281 and uc."user" = :user
1282 and tt.date_to is null
1283 and (:ticket1 = tt.ticket or :ticket2 <= 0)
1284 ;
1285 )'");
1286 q.bindValue(":user", userId());

◆ toggleTimesheet()

QList< Dbt::TicketTimesheets > DatabasePluginPostgres::toggleTimesheet ( int ticket)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1175 v souboru database_plugin_postgres.cpp.

1195 :description, n.status
1196 from x_tickets t, x_users u, x_newstatuses n
1197
1198 )'").arg(statusesX).arg(categoriesX));
1199 q.bindValue(":user", data.status);
1200 q.bindValue(":status", data.status);
1201 q.bindValue(":description", data.description);
1202 q.bindValue(":userid", userId());
1203 PDEBUG << q.lastBoundQuery();
1204 q.exec();
1205
1206 return QVariant();
1207}
1208
1209
1210QList<Dbt::TicketTimesheets> DatabasePluginPostgres::ticketTimesheets(int ticket, bool all) {
1211 createTemporaryTableTickets(ticket, all);
1212 QList<Dbt::TicketTimesheets> list;
1213 MSqlQuery q(m_db);
1214 q.prepare(R"'(
1215 select tt.id, tt.ticket, tt."user", tt.date_from, tt.date_to
1216 from temporary_tickets t, ticket_timesheets tt
1217 where t.ticket = tt.ticket
1218 and t.ticket = :ticket
1219 order by tt.date_from -- must be sorted!

◆ upgrade()

void DatabasePluginPostgres::upgrade ( )

Definice je uvedena na řádku 62 v souboru database_plugin_postgres.cpp.

62 {
63 if (m_upgraded) { return; }
64 PDEBUG;
65 m_upgraded = true;
66 MSqlQuery q(m_db);
67 for (int version=0; version < 1000; version++) {
68 MSqlQuery qx(m_db);
69 qx.prepare("select * from version where version = :version");
70 qx.bindValue(":version", version);
71 qx.exec();
72 if (qx.next()) {
73 continue;
74 }
75
76 QString patchname = QString(":/postgres/patch.%1.sql").arg(version, 3, 10, QChar('0'));
77 QFile file(patchname);
78 if (!file.open(QIODevice::ReadOnly)) {
79 continue;
80 }
81
82 PDEBUG << "aplying db patch " << patchname;
83
84 while (!file.atEnd()) {
85 QByteArray command;
86 QByteArray line;
87 do {
88 line = file.readLine();
89 command += line;
90 } while (!line.contains(";") && !file.atEnd());
91 command = command.trimmed();
92 if (command.isEmpty()) { continue; }
93 MSqlQuery q(m_db);
94 if (!q.exec(QString::fromUtf8(command))) {
95 QSqlError e = q.lastError();
96 if (e.type() != QSqlError::NoError) {
97 PDEBUG << q.lastQuery();
98 PDEBUG << e.databaseText();
99 PDEBUG << e.driverText();
100 return;
101 }
102 }
103 }
104
105 }
106
107 return;
108}

◆ users()

QList< Dbt::Users > DatabasePluginPostgres::users ( int id)
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 182 v souboru database_plugin_postgres.cpp.

182 {
183 QList<Dbt::Users> list;
184 MSqlQuery q(m_db);
185 q.prepare(R"'(
186 select "user", login, name, lang, enabled, admin
187 from users
188 where (:id1 <= 0 or :id2 = "user");
189 )'");
190 q.bindValue(":id1", id);
191 q.bindValue(":id2", id);
192 q.exec();
193 while (q.next()) {
194 int i=0;
195 Dbt::Users x;
196 x.user = q.value(i++).toInt();
197 x.login = q.value(i++).toString();
198 x.name = q.value(i++).toString();
199 x.lang = q.value(i++).toString();
200 x.enabled = q.value(i++).toBool();
201 x.admin = q.value(i++).toBool();
202 list << x;

◆ usersCategories()

QList< Dbt::UsersCategories > DatabasePluginPostgres::usersCategories ( int id,
int user,
const QString & category )
virtual

Implementuje Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 1634 v souboru database_plugin_postgres.cpp.

1637 :user
1638 and :id = tv.id
1639 ;
1640 )'");
1641 q.bindValue(":id", id);
1642 q.bindValue(":user", userId());
1643 q.exec();
1644 while (q.next()) {
1645 int i=0;
1646 Dbt::TicketValues x;
1647 x.id = q.value(i++).toInt();
1648 x.ticket = q.value(i++).toInt();
1649 x.date = q.value(i++).toDateTime();
1650 x.name = q.value(i++).toString();
1651 x.value = JSON::data(q.value(i++).toByteArray());
1652 x.user = q.value(i++).toInt();
1653 list << x;
1654 }
1655 return list;
1656}
1657
1658
1659QList<Dbt::TicketValues> DatabasePluginPostgres::ticketValues(bool all) {
1660 return ticketValues(-1, all);
1661}
1662
1663
1664QVariant DatabasePluginPostgres::save(const Dbt::TicketValues& data) {
1665 MSqlQuery q(m_db);
1666
1667 bool found = false;
1668 if (!data.created) {
1669 q.prepare(R"'(select 1 from ticket_values where id = :id;)'");
1670 q.bindValue(":id", data.id);
1671 q.exec();
1672 found = q.next();
1673 }
1674
1675 if (!data.created && found) {
1676 q.prepare(QString(R"'(
1677 update ticket_values set
1678 ticket = :ticket,
1679 "user" = :user,
1680 date = :date,
1681 name = :name,

◆ workCalendar()

QList< Dbt::WorkCalendar > DatabasePluginPostgres::workCalendar ( const QDate & period)
virtual

Reimplementuje stejnojmenný prvek z Db::Plugins::DatabasePlugin.

Definice je uvedena na řádku 2162 v souboru database_plugin_postgres.cpp.

Dokumentace datových členů

◆ m_databasename

QString Db::Plugins::DatabasePluginPostgres::m_databasename
private

Definice je uvedena na řádku 178 v souboru database_plugin_postgres.h.

◆ m_hostname

QString Db::Plugins::DatabasePluginPostgres::m_hostname
private

Definice je uvedena na řádku 179 v souboru database_plugin_postgres.h.

◆ m_password

QString Db::Plugins::DatabasePluginPostgres::m_password
private

Definice je uvedena na řádku 181 v souboru database_plugin_postgres.h.

◆ m_port

int Db::Plugins::DatabasePluginPostgres::m_port
private

Definice je uvedena na řádku 182 v souboru database_plugin_postgres.h.

◆ m_temporaryTableTicketsCreated

bool Db::Plugins::DatabasePluginPostgres::m_temporaryTableTicketsCreated
private

Definice je uvedena na řádku 185 v souboru database_plugin_postgres.h.

◆ m_upgraded

bool DatabasePluginPostgres::m_upgraded = false
staticprivate

Definice je uvedena na řádku 184 v souboru database_plugin_postgres.h.

◆ m_username

QString Db::Plugins::DatabasePluginPostgres::m_username
private

Definice je uvedena na řádku 180 v souboru database_plugin_postgres.h.


Dokumentace pro tuto třídu byla vygenerována z následujících souborů: