Пример #1
0
    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()'))
Пример #2
0
    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()'))
Пример #3
0
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))
Пример #4
0
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))