def __init__(self, parent=None, clientId=None): QtGui.QDialog.__init__(self, parent) self.ui = AddUserForm() self.ui.setupUi(self) self.clientId = clientId self.ui.btnOk.clicked.connect(self.save) self.ui.btnClose.clicked.connect(self.closeDialog) if self.clientId: query = QtSql.QSqlQuery() query.prepare( '''SELECT ID, Deleted, Surname, Name, MidName, BirthDate, Sex, SNILS, Growth, Weight, birthPlace, notes, deleted FROM Client WHERE ID = :client_Id;''') query.bindValue(":client_id", self.clientId) query.exec_() while query.next(): self.ui.leSurname.setText(query.record().value('Surname').toString()) self.ui.leName.setText(query.record().value('Name').toString()) self.ui.leMidName.setText(query.record().value('MidName').toString()) self.ui.leBirthDate.setText(query.record().value('BirthDate').toString()) self.ui.cmbSex.setCurrentIndex(int(query.record().value('Sex').toString())) self.ui.leSNILS.setText(query.record().value('SNILS').toString()) self.ui.leGrowth.setText(query.record().value('Growth').toString()) self.ui.leWeight.setText(query.record().value('Weight').toString()) self.ui.leBirthPlace.setText(query.record().value('birthPlace').toString()) self.ui.leNotes.setText(query.record().value('notes').toString()) if int(query.record().value('deleted').toString()) == 1: self.ui.cbDeleted.setChecked(True) queryModel = CServiceModel(self) queryModel.loadData(self.clientId) self.ui.tableView.setModel(queryModel) else: queryModel = CServiceModel(self) queryModel.loadEmpty() self.ui.tableView.setModel(queryModel) valuesModel = MyServiceModel(self) valuesModel.loadAllData() self.ui.tableView.setItemDelegateForColumn(0, CComboBoxDelegate(self, valuesModel)) self.ui.tableView.setContextMenuPolicy(Qt.CustomContextMenu) self.ui.tableView.customContextMenuRequested.connect(self.popup)
class CAddUserForm(QtGui.QDialog): def __init__(self, parent=None, clientId=None): QtGui.QDialog.__init__(self, parent) self.ui = AddUserForm() self.ui.setupUi(self) self.clientId = clientId self.ui.btnOk.clicked.connect(self.save) self.ui.btnClose.clicked.connect(self.closeDialog) if self.clientId: query = QtSql.QSqlQuery() query.prepare( '''SELECT ID, Deleted, Surname, Name, MidName, BirthDate, Sex, SNILS, Growth, Weight, birthPlace, notes, deleted FROM Client WHERE ID = :client_Id;''') query.bindValue(":client_id", self.clientId) query.exec_() while query.next(): self.ui.leSurname.setText(query.record().value('Surname').toString()) self.ui.leName.setText(query.record().value('Name').toString()) self.ui.leMidName.setText(query.record().value('MidName').toString()) self.ui.leBirthDate.setText(query.record().value('BirthDate').toString()) self.ui.cmbSex.setCurrentIndex(int(query.record().value('Sex').toString())) self.ui.leSNILS.setText(query.record().value('SNILS').toString()) self.ui.leGrowth.setText(query.record().value('Growth').toString()) self.ui.leWeight.setText(query.record().value('Weight').toString()) self.ui.leBirthPlace.setText(query.record().value('birthPlace').toString()) self.ui.leNotes.setText(query.record().value('notes').toString()) if int(query.record().value('deleted').toString()) == 1: self.ui.cbDeleted.setChecked(True) queryModel = CServiceModel(self) queryModel.loadData(self.clientId) self.ui.tableView.setModel(queryModel) else: queryModel = CServiceModel(self) queryModel.loadEmpty() self.ui.tableView.setModel(queryModel) valuesModel = MyServiceModel(self) valuesModel.loadAllData() self.ui.tableView.setItemDelegateForColumn(0, CComboBoxDelegate(self, valuesModel)) self.ui.tableView.setContextMenuPolicy(Qt.CustomContextMenu) self.ui.tableView.customContextMenuRequested.connect(self.popup) def popup(self, pos): menu = QtGui.QMenu() delete = menu.addAction(u"Удалить") action = menu.exec_(self.mapToGlobal(QPoint(pos.x()+self.ui.leName.width()+self.ui.label.width(), pos.y()))) if action == delete: self.deleteLine() def deleteLine(self): self.ui.tableView.model().deleteRow(self.ui.tableView.currentIndex().row()) def save(self): def saveClient(): query = QtSql.QSqlQuery() if self.clientId: query.prepare( u'''UPDATE client SET Surname=:surname, Name=:name, MidName=:midname, BirthDate=:birthdate, Sex=:sex, SNILS=:snils, Growth=:growth, Weight=:weight, birthPlace=:birthplace, notes=:notes, deleted=:deleted WHERE ID=:client_id;''') query.bindValue(":client_id", self.clientId) else: query.prepare(u'''INSERT INTO client (Surname, Name, MidName, BirthDate, Sex, SNILS, Growth, Weight, birthPlace, notes, deleted) VALUES(:surname, :name, :midname, :birthdate, :sex, :snils, :growth, :weight, :birthplace, :notes, :deleted)''') query.bindValue(":surname", self.ui.leSurname.text()) query.bindValue(":name", self.ui.leName.text()) query.bindValue(":midname", self.ui.leMidName.text()) query.bindValue(":birthdate", str( format(QDate.fromString(self.ui.leBirthDate.text(), 'dd.MM.yyyy').toString('yyyy-MM-dd')))) query.bindValue(":sex", self.ui.cmbSex.currentIndex()) query.bindValue(":snils", fromSNILS(self.ui.leSNILS.text())) query.bindValue(":growth", self.ui.leGrowth.text()) query.bindValue(":weight", self.ui.leWeight.text()) query.bindValue(":birthplace", self.ui.leBirthPlace.text()) query.bindValue(":notes", self.ui.leNotes.text()) query.bindValue(":deleted", 1 if self.ui.cbDeleted.isChecked() else 0) query.exec_() if not self.clientId: query.prepare('''SELECT `AUTO_INCREMENT` val FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'homework' AND TABLE_NAME = 'client';''') query.exec_() while query.next(): self.clientId = int(query.record().value('val').toString()) - 1 def findServiceId(code): if not code: return None query = QtSql.QSqlQuery() query.prepare("SELECT ID FROM Services WHERE code = '%s'" % code) query.exec_() while query.next(): return int(query.record().value('ID').toString()) def saveService(): model = self.ui.tableView.model() items = set() for row in xrange(model.rowCount()): item = findServiceId(toString(model.index(row, 0).data())[:toString(model.index(row, 0).data()).find(":")]) if item: items.add(item) services = set() query = QtSql.QSqlQuery() query.prepare('''select services_id from cure where client_id = %s;''' % self.clientId) query.exec_() while query.next(): services.add(toInt(query.record().value('services_id').toString())) delete = services - items append = items - services if delete: query.prepare(''' DELETE from cure where client_id = :client_id and services_id in (%s)''' % ', '.join([str(a) for a in delete])) query.bindValue(":client_id", self.clientId) query.exec_() if append: for i in append: query.prepare("INSERT INTO Cure (client_id, Services_id) " "VALUES (:client_id, :Services_id)") query.bindValue(":client_id", self.clientId) query.bindValue(":Services_id", i) query.exec_() saveClient() saveService() def closeDialog(self): self.close()