Пример #1
0
 def _setup_button_slave(self):
     self._button_slave = SearchDialogButtonSlave()
     change_button_appearance(self._button_slave.button,
                              Gtk.STOCK_APPLY, _("Receive"))
     self.attach_slave('print_holder', self._button_slave)
     self._button_slave.connect('click', self.on_receive_button_clicked)
     self._button_slave.button.set_sensitive(False)
Пример #2
0
class PaymentReceivingSearch(SearchDialog):
    title = _('Payments to Receive Search')
    size = (775, 450)
    search_spec = InPaymentView

    def __init__(self, store):
        SearchDialog.__init__(self, store)
        self.results.connect('selection-changed', self._on_selection_changed)
        self._setup_button_slave()

    def _setup_button_slave(self):
        self._button_slave = SearchDialogButtonSlave()
        change_button_appearance(self._button_slave.button,
                                 Gtk.STOCK_APPLY, _("Receive"))
        self.attach_slave('print_holder', self._button_slave)
        self._button_slave.connect('click', self.on_receive_button_clicked)
        self._button_slave.button.set_sensitive(False)

    def _receive(self):
        with api.new_store() as store:
            till = Till.get_current(store)
            assert till

            in_payment = self.results.get_selected()
            payment = store.fetch(in_payment.payment)
            assert self._can_receive(payment)

            retval = run_dialog(SalePaymentConfirmSlave, self, store,
                                payments=[payment], show_till_info=False)
            if not retval:
                return

            try:
                TillAddCashEvent.emit(till=till, value=payment.value)
            except (TillError, DeviceError, DriverError) as e:
                warning(str(e))
                return

            till_entry = till.add_credit_entry(payment.value,
                                               _(u'Received payment: %s') % payment.description)

            TillAddTillEntryEvent.emit(till_entry, store)

        if store.committed:
            self.search.refresh()

    def _can_receive(self, payment):
        if not payment:
            return False

        return payment.status == Payment.STATUS_PENDING

    #
    # SearchDialog Hooks
    #

    def create_filters(self):
        self.set_text_field_columns(['description', 'identifier_str'])
        self.search.set_query(self.executer_query)

        # Date
        date_filter = DateSearchFilter(_('Date:'))
        date_filter.select(0)
        columns = [Payment.due_date,
                   Payment.open_date,
                   Payment.paid_date]
        self.add_filter(date_filter, columns=columns)
        self.date_filter = date_filter

    def get_columns(self):
        return [IdentifierColumn('identifier', title=_('Payment #'), sorted=True),
                SearchColumn('description', title=_('Description'),
                             data_type=str, expand=True),
                SearchColumn('drawee', title=_('Drawee'),
                             data_type=str, width=200),
                SearchColumn('due_date', title=_('Due Date'),
                             data_type=datetime.date, width=100),
                SearchColumn('value', title=_('Value'),
                             data_type=currency, width=145), ]

    def executer_query(self, store):
        store_credit_method = PaymentMethod.get_by_name(
            self.store, u'store_credit')
        query = And(Payment.status == Payment.STATUS_PENDING,
                    Payment.method == store_credit_method)
        return store.find(self.search_spec, query)

    #
    # Callbacks
    #

    def _on_selection_changed(self, results, selected):
        can_click = bool(selected)
        self._button_slave.button.set_sensitive(can_click)

    def on_receive_button_clicked(self, button):
        self._receive()