def voucher_prolongate(self, index): """ Метод для пролонгации ваучера. Отображает диалог с календарём, позволяя продлить действие ваучера до двух недель от текущего дня.""" from dlg_calendar import DlgCalendar title = self.tr('Voucher Prolongation') # получаем информацию о ваучере model = index.model() voucher = model.get_voucher_info(index) voucher_id = voucher.get('id') if not voucher_id: raise Exception('Bad voucher id') # определяем обработчик диалога def callback(selected_date): self.selected_date = selected_date # отображаем диалог с календарём params = { 'date_range': (date.today(), date.today() + timedelta(days=14)), 'title': title, 'desc': self.tr('Choose the prolongation date:') } self.dialog = DlgCalendar(self, **params) self.dialog.setModal(True) self.dialog.setCallback(callback) if QDialog.Accepted == self.dialog.exec_(): # выполняем пролонгацию на сервере params = { 'voucher_id': voucher_id, 'prolongate_date': self.selected_date } if not self.http.request('/manager/voucher_prolongate/', params): QMessageBox.critical( self, title, self.tr('Unable to prolongate: %1').arg( self.http.error_msg)) return # проверяем результат default_response = None response = self.http.parse(default_response) if response and 'saved_id' in response: QMessageBox.information( self, title, self.tr('Voucher has been prolongated sucessfully.')) # приводим отображаемую модель к нужному виду if 'end_date' in voucher: voucher['end_date'] = self.selected_date voucher['cancel_datetime'] = None model.update(index) else: QMessageBox.critical( self, title, self.tr('Could not prolongate this voucher!'))
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_()