# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'd:\xa4a_table1.ui'
#
# Created: Thu Oct 30 16:45:58 2008
# by: PyQt4 UI code generator 4.4.3
#
# WARNING! All changes made in this file will be lost!
import sys
from operator import itemgetter
from PyQt4 import QtCore, QtGui, QtSql
import psycopg2
connection = None
TEST_CLIENT = {
'id': 5,
'name': 'test client',
'person': 'me',
'country': 'ua',
'city': 'kyiv',
'address1': 'a1',
'address2': 'a2',
'phone': '123-456',
'zip': '04053',
'comment': 'comment',
}
def createConnection():
global connection
connection = psycopg2.connect('dbname=university user=xa4a')
db = QtSql.QSqlDatabase.addDatabase("QPSQL")
db.setHostName("localhost")
db.setDatabaseName("university")
db.setUserName("xa4a")
db.setPassword("")
if not db.open():
QtGui.QMessageBox.critical(0, QtGui.qApp.tr("Cannot open database"),
QtGui.qApp.tr("Unable to establish a database connection.\n"
"This example needs SQLite support. Please read "
"the Qt SQL driver documentation for information "
"how to build it.\n\nClick Cancel to exit."),
QtGui.QMessageBox.Cancel, QtGui.QMessageBox.NoButton)
return False
else:
return True
class ClientTasksWindowClass (object):
def __init__(self, parent, client):
self.client = client
self.parent = parent
self.draw_interface()
def draw_interface(self):
self.client_tasks_window = w = QtGui.QDialog(self.parent)
#self.client_tasks_window = w = QtGui.QDialog()
w.setWindowTitle("Client - %s")
top_layout = w.top_layout = QtGui.QVBoxLayout(w)
w.task_table = QtGui.QTableView(w)
top_layout.addWidget(w.task_table)
w.button_layout = QtGui.QHBoxLayout()
btn_layout = w.button_layout
top_layout.addLayout(btn_layout)
w.add_task = QtGui.QToolButton(w)
btn_layout.addWidget(w.add_task)
w.add_task.setText("Add task")
w.save_btn = QtGui.QToolButton(w)
btn_layout.addWidget(w.save_btn)
w.save_btn.setText("Save")
w.delete_task = QtGui.QToolButton(w)
btn_layout.addWidget(w.delete_task)
w.delete_task.setText("Delete task")
#w.search_client = QtGui.QToolButton(w)
#btn_layout.addWidget(w.search_client)
#w.search_client.setText("Search")
w.refresh_task = QtGui.QToolButton(w)
btn_layout.addWidget(w.refresh_task)
w.refresh_task.setText("Refresh")
#wi.setCentralWidget(w)
QtCore.QObject.connect(w.add_task, QtCore.SIGNAL("clicked()"),self.click_add_task)
QtCore.QObject.connect(w.save_btn, QtCore.SIGNAL("clicked()"),self.click_save)
QtCore.QObject.connect(w.delete_task, QtCore.SIGNAL("clicked()"),self.click_delete_task)
#QtCore.QObject.connect(w.search_task, QtCore.SIGNAL("clicked()"),self.click_search_task)
QtCore.QObject.connect(w.refresh_task, QtCore.SIGNAL("clicked()"),self.refresh)
# QtCore.QMetaObject.connectSlotsByName(w)
self.refresh()
#w.show()
w.exec_()
def click_add_task(self):
print "Add task button been pressed"
view = self.client_tasks_window.task_table
model = view.model()
row_num = model.rowCount()
model.insertRow(row_num)
def click_save(self):
print "save client clicked"
view = self.client_tasks_window.task_table
model = view.model()
model.submitAll()
model.select()
def click_delete_task(self):
print "Delete task button been pressed"
dialog = self.client_tasks_window.delete_client_sure = QtGui.QDialog(self.client_tasks_window)
dialog.setWindowTitle("Delete task?")
layout = QtGui.QGridLayout(dialog)
dialog.yes_button = QtGui.QPushButton(dialog)
dialog.yes_button.setText("Yes")
layout.addWidget(dialog.yes_button, 1, 0)
dialog.no_button = QtGui.QPushButton()
dialog.no_button.setText("No")
layout.addWidget(dialog.no_button, 1, 1)
dialog.label = QtGui.QLabel(dialog)
dialog.label.setText(u"Are you sure you want to delete task %%s?")
layout.addWidget(dialog.label, 0,0,1,2)
dialog.show()
QtCore.QObject.connect(dialog.yes_button, QtCore.SIGNAL("clicked()"),self.delete_task_sure_yes_pressed)
QtCore.QObject.connect(dialog.no_button, QtCore.SIGNAL("clicked()"),self.delete_task_sure_no_pressed)
QtCore.QMetaObject.connectSlotsByName(self.client_tasks_window)
def delete_task_sure_yes_pressed (self):
print "'Yes delete task are you sure' button been pressed"
self.client_tasks_window.delete_client_sure.hide()
view = self.client_tasks_window.task_table
model = view.model()
sel_m = view.selectionModel()
selection = sel_m.selection()
if selection.isEmpty():
return None
indexes = selection.indexes()
query = QtSql.QSqlQuery()
for i in indexes:
row_num = i.row()
model.removeRows(row_num, 1, QtCore.QModelIndex())
model.submitAll()
#model.select()
def delete_task_sure_no_pressed (self):
print "'No delete task are yot sure' button been pressed"
self.client_tasks_window.delete_client_sure.hide()
def refresh(self):
print "Refresh task list has been clicked"
model = QtSql.QSqlRelationalTableModel()
client = self.client
id_pos = client.indexOf('id')
client_id = int(client.field(id_pos).value().toString())
model.setTable('address')
# model.setFilter('task.client_id=%d' % (client_id))
model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
model.select()
view = self.client_tasks_window.task_table
view.setModel(model)
print view.model()
#view.setItemDelegate(QtSql.QSqlRelationalDelegate(view))
# hide id column
#columns_to_hide = ['id']
#for col in columns_to_hide:
# id_col_index = model.fieldIndex(col)
# view.hideColumn(id_col_index)
print view.model().rowCount(), view.model().columnCount()
view.show()
class ClientWindowClass(object):
def draw_interface(self, workspace):
self.client_window = QtGui.QMainWindow()
self.client_window.setWindowTitle("Clients")
self.client_window.tabWidget = QtGui.QTabWidget(self.client_window)
self.client_window.tab = QtGui.QWidget()
top_layout = self.client_window.top_layout = QtGui.QVBoxLayout(self.client_window.tab)
self.client_window.client_table = QtGui.QTableView(self.client_window.tab)
top_layout.addWidget(self.client_window.client_table)
self.client_window.button_layout = QtGui.QHBoxLayout()
btn_layout = self.client_window.button_layout
top_layout.addLayout(btn_layout)
self.client_window.tab.add_client = QtGui.QToolButton(self.client_window.tab)
btn_layout.addWidget(self.client_window.tab.add_client)
self.client_window.tab.add_client.setText("Add client")
self.client_window.tab.edit_client = QtGui.QToolButton(self.client_window.tab)
btn_layout.addWidget(self.client_window.tab.edit_client)
self.client_window.tab.edit_client.setText("Client details")
self.client_window.tab.save_btn = QtGui.QToolButton(self.client_window.tab)
btn_layout.addWidget(self.client_window.tab.save_btn)
self.client_window.tab.save_btn.setText("Save")
self.client_window.tab.delete_client = QtGui.QToolButton(self.client_window.tab)
btn_layout.addWidget(self.client_window.tab.delete_client)
self.client_window.tab.delete_client.setText("Delete client")
self.client_window.tab.search_client = QtGui.QToolButton(self.client_window.tab)
btn_layout.addWidget(self.client_window.tab.search_client)
self.client_window.tab.search_client.setText("Search")
self.client_window.tab.refresh_client = QtGui.QToolButton(self.client_window.tab)
btn_layout.addWidget(self.client_window.tab.refresh_client)
self.client_window.tab.refresh_client.setText("Refresh")
self.client_window.tabWidget.addTab(self.client_window.tab, "Clients")
self.client_window.setCentralWidget(self.client_window.tabWidget)
QtCore.QObject.connect(self.client_window.tab.add_client, QtCore.SIGNAL("clicked()"),self.click_add_client)
QtCore.QObject.connect(self.client_window.tab.edit_client, QtCore.SIGNAL("clicked()"),self.click_edit_client)
QtCore.QObject.connect(self.client_window.tab.save_btn, QtCore.SIGNAL("clicked()"),self.click_save)
QtCore.QObject.connect(self.client_window.tab.delete_client, QtCore.SIGNAL("clicked()"),self.click_delete_client)
QtCore.QObject.connect(self.client_window.tab.search_client, QtCore.SIGNAL("clicked()"),self.click_search_client)
QtCore.QObject.connect(self.client_window.tab.refresh_client, QtCore.SIGNAL("clicked()"),self.refresh)
QtCore.QMetaObject.connectSlotsByName(workspace)
self.client_window.show()
self.refresh()
def click_add_client (self):
print "Add client button been pressed"
view = self.client_window.client_table
model = view.model()
row_num = model.rowCount()
model.insertRow(row_num)
#add_edit_client(self.client_window, self.edit_client_ok, self.edit_client_cancel)
def click_edit_client (self):
print "Edit client button been pressed"
view = self.client_window.client_table
model = view.model()
sel_m = view.selectionModel()
selection = sel_m.selection()
if selection.isEmpty():
return None
indexes = selection.indexes()
ClientTasksWindowClass(self.client_window, model.record(indexes[0].row()))
def click_save(self):
print "save client clicked"
view = self.client_window.client_table
model = view.model()
model.submitAll()
model.select()
def click_delete_client (self):
print "Delete client button been pressed"
dialog = self.client_window.delete_client_sure = QtGui.QDialog(self.client_window)
dialog.setWindowTitle("Delete client")
layout = QtGui.QGridLayout(dialog)
dialog.yes_button = QtGui.QPushButton(self.client_window.delete_client_sure)
dialog.yes_button.setText("Yes")
layout.addWidget(dialog.yes_button, 1, 0)
dialog.no_button = QtGui.QPushButton(self.client_window.delete_client_sure)
dialog.no_button.setText("No")
layout.addWidget(dialog.no_button, 1, 1)
dialog.label = QtGui.QLabel(self.client_window.delete_client_sure)
dialog.label.setText(u"Are you sure you want to delete client %%s?")
layout.addWidget(dialog.label, 0,0,1,2)
self.client_window.delete_client_sure.show()
QtCore.QObject.connect(self.client_window.delete_client_sure.yes_button, QtCore.SIGNAL("clicked()"),self.delete_client_sure_yes_pressed)
QtCore.QObject.connect(self.client_window.delete_client_sure.no_button, QtCore.SIGNAL("clicked()"),self.delete_client_sure_no_pressed)
QtCore.QMetaObject.connectSlotsByName(self.client_window)
def delete_client_sure_yes_pressed (self):
print "'Yes delete client are you sure' button been pressed"
self.client_window.delete_client_sure.hide()
view = self.client_window.client_table
model = view.model()
sel_m = view.selectionModel()
selection = sel_m.selection()
if selection.isEmpty():
return None
indexes = selection.indexes()
query = QtSql.QSqlQuery()
for i in indexes:
row_num = i.row()
model.removeRows(row_num, 1, QtCore.QModelIndex())
model.submitAll()
#model.select()
def delete_client_sure_no_pressed (self):
print "'No delete client are yot sure' button been pressed"
self.client_window.delete_client_sure.hide()
def click_search_client (self):
print "Search client button been pressed"
def edit_client_ok(self):
print "Ok add client button been pressed"
client = get_client(self.client_window.dialog)
save_client(client)
self.client_window.dialog.hide()
def edit_client_cancel(self):
print "Cancel add client button been pressed"
self.client_window.dialog.hide()
def refresh(self):
model = self._client_model = QtSql.QSqlRelationalTableModel()
model.setTable('client_full')
model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
model.select()
view = self.client_window.client_table
view.setModel(model)
view.setItemDelegate(QtSql.QSqlRelationalDelegate(view))
# hide id column
columns_to_hide = ['id', 'address_id']
for col in columns_to_hide:
id_col_index = model.fieldIndex(col)
view.hideColumn(id_col_index)
view.show()
def main():
app = QtGui.QApplication(sys.argv)
app.setStyle('Cleanlooks')
createConnection()
my_form = ClientWindowClass()
my_form.draw_interface(app)
app.exec_()
if __name__=="__main__":
main()