def setupUi(self): UiDlgTemplate.setupUi(self) # настраиваем отображение событий аренды self.model = RentEvent(self) self.tableItems.setModel(self.model) self.tableItems.setSelectionBehavior(QAbstractItemView.SelectRows) header = self.tableItems.horizontalHeader() header.setStretchLastSection(False) header.setResizeMode(QHeaderView.ResizeToContents) header.setResizeMode(0, QHeaderView.Stretch) self.connect(self.toolBegin, SIGNAL('clicked()'), lambda: self.show_calendar(self.dateBegin)) self.connect(self.toolEnd, SIGNAL('clicked()'), lambda: self.show_calendar(self.dateEnd)) self.connect(self.buttonToday, SIGNAL('clicked()'), self.set_date_today) self.connect(self.buttonAdd, SIGNAL('clicked()'), self.add_item) self.connect(self.buttonSave, SIGNAL('clicked()'), self.save_rent) self.connect(self.buttonClose, SIGNAL('clicked()'), self, SLOT('reject()'))
class AssignRent(UiDlgTemplate): """ Класс диалога для добавления аренды. """ ui_file = 'uis/dlg_assign_rent.ui' params = ParamStorage() user_id = None model = None def __init__(self, parent, *args, **kwargs): self.user_id = kwargs.get('renter') UiDlgTemplate.__init__(self, parent) def setupUi(self): UiDlgTemplate.setupUi(self) # настраиваем отображение событий аренды self.model = RentEvent(self) self.tableItems.setModel(self.model) self.tableItems.setSelectionBehavior(QAbstractItemView.SelectRows) header = self.tableItems.horizontalHeader() header.setStretchLastSection(False) header.setResizeMode(QHeaderView.ResizeToContents) header.setResizeMode(0, QHeaderView.Stretch) self.connect(self.toolBegin, SIGNAL('clicked()'), lambda: self.show_calendar(self.dateBegin)) self.connect(self.toolEnd, SIGNAL('clicked()'), lambda: self.show_calendar(self.dateEnd)) self.connect(self.buttonToday, SIGNAL('clicked()'), self.set_date_today) self.connect(self.buttonAdd, SIGNAL('clicked()'), self.add_item) self.connect(self.buttonSave, SIGNAL('clicked()'), self.save_rent) self.connect(self.buttonClose, SIGNAL('clicked()'), self, SLOT('reject()')) def init_data(self, data=dict()): self.rent_id = data.get('uuid') # для новой аренды сразу заполняем даты начала и конца if not self.rent_id: self.set_date_today() # заполняем список зарегистрированных событий аренд self.tableItems.model().init_data( data.get('rent_item_list', []) ) def set_date_today(self): """ Метод для установки сегодняшней даты. """ today = QDate(date.today()) self.dateBegin.setDate(today) self.dateEnd.setDate(today) def show_calendar(self, widget): """ Метод для отображения диалога с календарём. """ # определяем обработчик результатов диалога def handle(selected_date): widget.setDate(selected_date) params = {'title': self.tr('Choose a date')} self.dialog = DlgCalendar(self, **params) self.dialog.setModal(True) self.dialog.setCallback(handle) self.dialog.exec_() def add_item(self): """ Метод для отображения диалога для ввода информации о событии аренды. """ self.dialog = AddItem(self, callback=self.add_item_handle) self.dialog.exec_() def add_item_handle(self, data): """ Метод для обработки данных от диалога назначения события аренды. @type data: dict @param data: Словарь с данными диалога. @rtype: boolean @return: Возможность размещения события на расписании. """ d2s = lambda x: x.date().toPyDate().strftime('%Y-%m-%d') mbox_title = self.tr('Assign rent event') # дополняем переданные данные диапазоном дат, в котором # действуют события params = dict(data, begin_date = d2s(self.dateBegin), end_date = d2s(self.dateEnd)) # делаем проверку через сервер http = self.params.http if not http.request('/api/event/', 'POST', params): QMessageBox.critical(self, mbox_title, self.tr('Unable to save: %1').arg(http.error_msg)) return status, response = http.piston() if status == 'ALL_OK': # добавляем информацию о событии в модель if self.model.insert_new(params): #self.price = self.model.price() return True QMessageBox.warning(self, mbox_title, self.tr('Unable to assign: place already busy.')) elif status == 'DUPLICATE_ENTRY': QMessageBox.warning(self, mbox_title, self.tr('Unable to assign: place already busy.')) else: QMessageBox.warning(self, mbox_title, self.tr('Unknown answer: %1').arg(status)) return False def save_rent(self): """ Метод для получения данных из диалога. Диалог вызывается из user_info.RenterInfo.assign_item.""" dialog_title = self.tr('Rent Save') begin_date = self.dateBegin.date().toPyDate().strftime('%Y-%m-%d') end_date = self.dateEnd.date().toPyDate().strftime('%Y-%m-%d') formset = self.model.formset(initial={ 'begin_date':begin_date, 'end_date':end_date, 'is_active':u'on', }) params = formset + [ ('renter', self.user_id), ('desc', unicode(self.editDesc.toPlainText()).encode('utf-8')), ('is_active', u'on'), ] http = self.params.http if not http.request('/api/rent/', 'POST', params): QMessageBox.critical(self, dialog_title, self.tr('Unable to save: %1').arg(http.error_msg)) return status, response = http.piston() if status == 'CREATED': self.rent_id = response.get('uuid') self.buttonAdd.setDisabled(False) QMessageBox.information(self, dialog_title, self.tr('Information is saved.')) else: QMessageBox.critical(self, dialog_title, self.tr('Unable to save: %1').arg(status))
class AssignRent(UiDlgTemplate): """ Класс диалога для добавления аренды. """ ui_file = 'uis/dlg_assign_rent.ui' params = ParamStorage() user_id = None model = None def __init__(self, parent, *args, **kwargs): self.user_id = kwargs.get('renter') UiDlgTemplate.__init__(self, parent) def setupUi(self): UiDlgTemplate.setupUi(self) # настраиваем отображение событий аренды self.model = RentEvent(self) self.tableItems.setModel(self.model) self.tableItems.setSelectionBehavior(QAbstractItemView.SelectRows) header = self.tableItems.horizontalHeader() header.setStretchLastSection(False) header.setResizeMode(QHeaderView.ResizeToContents) header.setResizeMode(0, QHeaderView.Stretch) self.connect(self.toolBegin, SIGNAL('clicked()'), lambda: self.show_calendar(self.dateBegin)) self.connect(self.toolEnd, SIGNAL('clicked()'), lambda: self.show_calendar(self.dateEnd)) self.connect(self.buttonToday, SIGNAL('clicked()'), self.set_date_today) self.connect(self.buttonAdd, SIGNAL('clicked()'), self.add_item) self.connect(self.buttonSave, SIGNAL('clicked()'), self.save_rent) self.connect(self.buttonClose, SIGNAL('clicked()'), self, SLOT('reject()')) def init_data(self, data=dict()): self.rent_id = data.get('uuid') # для новой аренды сразу заполняем даты начала и конца if not self.rent_id: self.set_date_today() # заполняем список зарегистрированных событий аренд self.tableItems.model().init_data(data.get('rent_item_list', [])) def set_date_today(self): """ Метод для установки сегодняшней даты. """ today = QDate(date.today()) self.dateBegin.setDate(today) self.dateEnd.setDate(today) def show_calendar(self, widget): """ Метод для отображения диалога с календарём. """ # определяем обработчик результатов диалога def handle(selected_date): widget.setDate(selected_date) params = {'title': self.tr('Choose a date')} self.dialog = DlgCalendar(self, **params) self.dialog.setModal(True) self.dialog.setCallback(handle) self.dialog.exec_() def add_item(self): """ Метод для отображения диалога для ввода информации о событии аренды. """ self.dialog = AddItem(self, callback=self.add_item_handle) self.dialog.exec_() def add_item_handle(self, data): """ Метод для обработки данных от диалога назначения события аренды. @type data: dict @param data: Словарь с данными диалога. @rtype: boolean @return: Возможность размещения события на расписании. """ d2s = lambda x: x.date().toPyDate().strftime('%Y-%m-%d') mbox_title = self.tr('Assign rent event') # дополняем переданные данные диапазоном дат, в котором # действуют события params = dict(data, begin_date=d2s(self.dateBegin), end_date=d2s(self.dateEnd)) # делаем проверку через сервер http = self.params.http if not http.request('/api/event/', 'POST', params): QMessageBox.critical( self, mbox_title, self.tr('Unable to save: %1').arg(http.error_msg)) return status, response = http.piston() if status == 'ALL_OK': # добавляем информацию о событии в модель if self.model.insert_new(params): #self.price = self.model.price() return True QMessageBox.warning( self, mbox_title, self.tr('Unable to assign: place already busy.')) elif status == 'DUPLICATE_ENTRY': QMessageBox.warning( self, mbox_title, self.tr('Unable to assign: place already busy.')) else: QMessageBox.warning(self, mbox_title, self.tr('Unknown answer: %1').arg(status)) return False def save_rent(self): """ Метод для получения данных из диалога. Диалог вызывается из user_info.RenterInfo.assign_item.""" dialog_title = self.tr('Rent Save') begin_date = self.dateBegin.date().toPyDate().strftime('%Y-%m-%d') end_date = self.dateEnd.date().toPyDate().strftime('%Y-%m-%d') formset = self.model.formset(initial={ 'begin_date': begin_date, 'end_date': end_date, 'is_active': u'on', }) params = formset + [ ('renter', self.user_id), ('desc', unicode(self.editDesc.toPlainText()).encode('utf-8')), ('is_active', u'on'), ] http = self.params.http if not http.request('/api/rent/', 'POST', params): QMessageBox.critical( self, dialog_title, self.tr('Unable to save: %1').arg(http.error_msg)) return status, response = http.piston() if status == 'CREATED': self.rent_id = response.get('uuid') self.buttonAdd.setDisabled(False) QMessageBox.information(self, dialog_title, self.tr('Information is saved.')) else: QMessageBox.critical(self, dialog_title, self.tr('Unable to save: %1').arg(status))