def _send_selected_items_to_supplier(self): orders = self.results.get_selected_rows() valid_order_views = [ order for order in orders if order.status == PurchaseOrder.ORDER_PENDING ] if not valid_order_views: warning(_("There are no pending orders selected.")) return msg = stoqlib_ngettext( _("The selected order will be marked as sent."), _("The %d selected orders will be marked as sent.") % len(valid_order_views), len(valid_order_views)) confirm_label = stoqlib_ngettext(_("Confirm order"), _("Confirm orders"), len(valid_order_views)) if not yesno(msg, gtk.RESPONSE_YES, confirm_label, _("Don't confirm")): return with api.trans() as store: for order_view in valid_order_views: order = store.fetch(order_view.purchase) order.confirm() self.refresh() self.select_result(orders)
def _clear(self): objs = self.get_selection() qty = len(objs) if qty < 1: raise SelectionError('There are no objects selected') msg = stoqlib_ngettext( _('Delete this item?'), _('Delete these %d items?') % qty, qty) delete_label = stoqlib_ngettext( _("Delete item"), _("Delete items"), qty) keep_label = stoqlib_ngettext( _("Keep it"), _("Keep them"), qty) if not yesno(msg, gtk.RESPONSE_NO, delete_label, keep_label): return self.emit('before-delete-items', objs) if qty == len(self.klist): self.klist.clear() else: for obj in objs: self.klist.remove(obj) self.klist.unselect_all() self._update_sensitivity() self.emit('after-delete-items')
def _send_selected_items_to_supplier(self): orders = self.results.get_selected_rows() valid_order_views = [ order for order in orders if order.status == PurchaseOrder.ORDER_PENDING] if not valid_order_views: warning(_("There are no pending orders selected.")) return msg = stoqlib_ngettext( _("The selected order will be marked as sent."), _("The %d selected orders will be marked as sent.") % len(valid_order_views), len(valid_order_views)) confirm_label = stoqlib_ngettext(_("Confirm order"), _("Confirm orders"), len(valid_order_views)) if not yesno(msg, gtk.RESPONSE_YES, confirm_label, _("Don't confirm")): return with api.new_store() as store: for order_view in valid_order_views: order = store.fetch(order_view.purchase) order.confirm() self.refresh() self.select_result(orders)
def _check_client_birthdays(self): if not api.sysparam.get_bool('BIRTHDAY_NOTIFICATION'): return # Display the info bar once per day date = api.user_settings.get('last-birthday-check') last_check = date and datetime.datetime.strptime(date, '%Y-%m-%d').date() if last_check and last_check >= datetime.date.today(): return # Only display the infobar if the user has access to calendar (because # clicking on the button will open it) and to sales (because it # requires that permission to be able to check client details) user = api.get_current_user(self.store) if not all([user.profile.check_app_permission(u'calendar'), user.profile.check_app_permission(u'sales')]): return branch = api.get_current_branch(self.store) clients_count = ClientWithSalesView.find_by_birth_date( self.store, datetime.datetime.today(), branch=branch).count() if clients_count: msg = stoqlib_ngettext( _("There is %s client doing birthday today!"), _("There are %s clients doing birthday today!"), clients_count) % (clients_count, ) button = gtk.Button(_("Check the calendar")) button.connect('clicked', self._on_check_calendar__clicked) self._birthdays_bar = self.add_info_bar( gtk.MESSAGE_INFO, "<b>%s</b>" % (glib.markup_escape_text(msg), ), action_widget=button)
def get_summary_row(self): total_sales = len(self._sales) if self._total_amount > 0: total_percentage = self._total_value * 100 / self._total_payment average_sale = self._total_amount / total_sales else: total_percentage = 0 average_sale = 0 sales_label = stoqlib_ngettext('%d sale', '%d sales', total_sales) % total_sales # TODO: Create a better way to add more lines to the summary row total_sales_label = get_formatted_price(self._total_amount) if self._sales_person: total_sales_label += ' (' + _("%s/sale") % ( get_formatted_price(average_sale, )) + ')' summary_row = [sales_label, total_sales_label, get_formatted_price(self._total_payment), get_formatted_percentage(total_percentage), get_formatted_price(self._total_value), format_quantity(self._total_sold)] if not self._sales_person: summary_row.insert(1, '') return summary_row
def get_summary_row(self): total_sales = len(self._sales) if self._total_amount > 0: total_percentage = self._total_value * 100 / self._total_payment average_sale = self._total_amount / total_sales else: total_percentage = 0 average_sale = 0 sales_label = stoqlib_ngettext('%d sale', '%d sales', total_sales) % total_sales # TODO: Create a better way to add more lines to the summary row total_sales_label = get_formatted_price(self._total_amount) if self._sales_person: total_sales_label += ' (' + _("%s/sale") % (get_formatted_price( average_sale, )) + ')' summary_row = [ sales_label, total_sales_label, get_formatted_price(self._total_payment), get_formatted_percentage(total_percentage), get_formatted_price(self._total_value), format_quantity(self._total_sold) ] if not self._sales_person: summary_row.insert(1, '') return summary_row
def _cancel_order(self): order_views = self.results.get_selected_rows() assert all(ov.purchase.can_cancel() for ov in order_views) cancel_label = stoqlib_ngettext(_("Cancel order"), _("Cancel orders"), len(order_views)) select_label = stoqlib_ngettext( _('The selected order will be cancelled.'), _('The selected orders will be cancelled.'), len(order_views)) if not yesno(select_label, gtk.RESPONSE_YES, cancel_label, _("Don't cancel")): return with api.trans() as store: for order_view in order_views: order = store.fetch(order_view.purchase) order.cancel() self._update_totals() self.refresh() self.select_result(order_views)
def _cancel_order(self): order_views = self.results.get_selected_rows() assert all(ov.purchase.can_cancel() for ov in order_views) cancel_label = stoqlib_ngettext(_("Cancel order"), _("Cancel orders"), len(order_views)) select_label = stoqlib_ngettext(_('The selected order will be cancelled.'), _('The selected orders will be cancelled.'), len(order_views)) if not yesno(select_label, gtk.RESPONSE_YES, cancel_label, _("Don't cancel")): return with api.new_store() as store: for order_view in order_views: order = store.fetch(order_view.purchase) order.cancel() self._update_totals() self.refresh() self.select_result(order_views)
def _create_pending_returned_sale_message(self): branch = api.get_current_branch(self.store) n_returned = ReturnedSale.get_pending_returned_sales(self.store, branch).count() if not n_returned: return None msg = stoqlib_ngettext(_(u"You have %s returned sale to receive"), _(u"You have %s returned sales to receive"), n_returned) % n_returned info_returned_bar = self.window.add_info_bar(Gtk.MessageType.QUESTION, msg) button = info_returned_bar.add_button(_(u"Returned sale"), Gtk.ResponseType.OK) button.connect('clicked', self._on_info_returned_sales__clicked) return info_returned_bar
def _create_pending_info_message(self): branch = api.get_current_branch(self.store) n_transfers = TransferOrder.get_pending_transfers(self.store, branch).count() if not n_transfers: return None msg = stoqlib_ngettext(_(u"You have %s incoming transfer"), _(u"You have %s incoming transfers"), n_transfers) % n_transfers info_bar = self.window.add_info_bar(Gtk.MessageType.QUESTION, msg) button = info_bar.add_button(_(u"Receive"), Gtk.ResponseType.OK) button.connect('clicked', self._on_info_transfers__clicked) return info_bar
def _create_pending_info_message(self): branch = api.get_current_branch(self.store) n_transfers = TransferOrder.get_pending_transfers(self.store, branch).count() if not n_transfers: return None msg = stoqlib_ngettext(_(u"You have %s incoming transfer"), _(u"You have %s incoming transfers"), n_transfers) % n_transfers info_bar = self.window.add_info_bar(gtk.MESSAGE_QUESTION, msg) button = info_bar.add_button(_(u"Receive"), gtk.RESPONSE_OK) button.connect('clicked', self._on_info_transfers__clicked) return info_bar
def _search_transfers(self): branch = api.get_current_branch(self.store) self.run_dialog(TransferOrderSearch, self.store) if self.transfers_bar: n_transfers = TransferOrder.get_pending_transfers(self.store, branch).count() if n_transfers > 0: msg = stoqlib_ngettext(_(u"You have %s incoming transfer"), _(u"You have %s incoming transfers"), n_transfers) % n_transfers self.transfers_bar.set_message(msg) else: self.transfers_bar.hide() self.refresh()
def _create_pending_returned_sale_message(self): branch = api.get_current_branch(self.store) n_returned = ReturnedSale.get_pending_returned_sales(self.store, branch).count() if not n_returned: return None msg = stoqlib_ngettext(_(u"You have %s returned sale to receive"), _(u"You have %s returned sales to receive"), n_returned) % n_returned info_returned_bar = self.window.add_info_bar(gtk.MESSAGE_QUESTION, msg) button = info_returned_bar.add_button(_(u"Returned sale"), gtk.RESPONSE_OK) button.connect('clicked', self._on_info_returned_sales__clicked) return info_returned_bar
def _search_transfers(self): branch = api.get_current_branch(self.store) self.run_dialog(TransferOrderSearch, self.store) # After the search is closed we may want to update , or even hide the # message, if there is no pending transfer to receive if self.transfers_bar: n_transfers = TransferOrder.get_pending_transfers(self.store, branch).count() if n_transfers > 0: msg = stoqlib_ngettext(_(u"You have %s incoming transfer"), _(u"You have %s incoming transfers"), n_transfers) % n_transfers self.transfers_bar.set_message(msg) else: self.transfers_bar.hide() self.refresh()
def _search_pending_returned_sales(self): with api.new_store() as store: self.run_dialog(PendingReturnedSaleSearch, store) branch = api.get_current_branch(self.store) # After the search is closed we may want to update , or even hide the # message, if there is no pending returned sale to receive if self.returned_bar: n_returned = ReturnedSale.get_pending_returned_sales(self.store, branch).count() if n_returned > 0: msg = stoqlib_ngettext(_(u"You have %s returned sale to receive"), _(u"You have %s returned sales to receive"), n_returned) % n_returned self.returned_bar.set_message(msg) else: self.returned_bar.hide() self.refresh()
def _setup_details(self): """ This method build the report title based on the arguments sent by SearchBar to its class constructor. """ rows = len(self.data) total_rows = rows + self.blocked_records item = stoqlib_ngettext(self.main_object_name[0], self.main_object_name[1], total_rows) self.subtitle = self.subtitle_template.format(rows=rows, total_rows=total_rows, item=item) base_note = "" if self.filter_format_string and self.status_name: base_note += self.filter_format_string % self.status_name.lower() notes = [] for filter_string in self.filter_strings: if base_note: notes.append("%s %s" % (base_note, filter_string)) elif filter_string: notes.append(filter_string) self.notes = notes
def _setup_details(self): """ This method build the report title based on the arguments sent by SearchBar to its class constructor. """ rows = len(self.data) total_rows = rows + self.blocked_records item = stoqlib_ngettext(self.main_object_name[0], self.main_object_name[1], total_rows) self.subtitle = self.subtitle_template.format(rows=rows, total_rows=total_rows, item=item) base_note = "" if self.filter_format_string and self.status_name: base_note += self.filter_format_string % self.status_name.lower() notes = [] for filter_string in self.filter_strings: if base_note: notes.append('%s %s' % (base_note, filter_string)) elif filter_string: notes.append(filter_string) self.notes = notes
def get_lead_time_str(self): return u"%d %s" % ( self.lead_time, stoqlib_ngettext(_(u"Day"), _(u"Days"), self.lead_time))
def _create_summary_events(self, date, events): in_payment_events = events['receivable'] out_payment_events = events['payable'] purchase_events = events['purchases'] client_calls = events['client_calls'] client_birthdays = events['client_birthdays'] work_orders = events['work_orders'] events = [] def add_event(title, url, date, class_name, show_late=True): if show_late and date < datetime.date.today(): class_name += " late" events.append(dict(title=title, url=url, start=str(date), className=class_name)) if client_calls: if len(client_calls) == 1: events.append(client_calls[0]) else: title_format = stoqlib_ngettext(_("%d client call"), _("%d client calls"), len(client_calls)) title = title_format % len(client_calls) class_name = "client_call" url = "stoq://show/client-calls-by-date?date=%s" % (date,) add_event(title, url, date, class_name, False) if client_birthdays: if len(client_birthdays) == 1: events.append(client_birthdays[0]) else: title_format = stoqlib_ngettext(_("%d client birthday"), _("%d client birthdays"), len(client_birthdays)) title = title_format % len(client_birthdays) class_name = "client_birthday" url = "stoq://show/client-birthdays-by-date?date=%s" % (date,) add_event(title, url, date, class_name, False) if work_orders: if len(work_orders) == 1: events.append(work_orders[0]) else: title_format = stoqlib_ngettext(_("%d work order"), _("%d work orders"), len(work_orders)) title = title_format % len(work_orders) class_name = "work_order" url = "stoq://show/work-orders-by-date?date=%s" % (date,) add_event(title, url, date, class_name, False) if in_payment_events: if len(in_payment_events) == 1: events.append(in_payment_events[0]) else: title_format = stoqlib_ngettext(_("%d account receivable"), _("%d accounts receivable"), len(in_payment_events)) title = title_format % len(in_payment_events) class_name = "receivable" url = "stoq://show/in-payments-by-date?date=%s" % (date, ) add_event(title, url, date, class_name) if out_payment_events: if len(out_payment_events) == 1: events.append(out_payment_events[0]) else: title_format = stoqlib_ngettext(_("%d account payable"), _("%d accounts payable"), len(out_payment_events)) title = title_format % len(out_payment_events) class_name = "payable" url = "stoq://show/out-payments-by-date?date=%s" % (date, ) add_event(title, url, date, class_name) if purchase_events: if len(purchase_events) == 1: events.append(purchase_events[0]) else: title_format = stoqlib_ngettext(_("%d purchase"), _("%d purchases"), len(purchase_events)) title = title_format % len(purchase_events) url = "stoq://show/purchases-by-date?date=%s" % (date, ) class_name = 'purchase' add_event(title, url, date, class_name) return events
def _create_summary_events(self, date, events): in_payment_events = events['receivable'] out_payment_events = events['payable'] purchase_events = events['purchases'] client_calls = events['client_calls'] client_birthdays = events['client_birthdays'] work_orders = events['work_orders'] events = [] def add_event(title, url, date, class_name, show_late=True): if show_late and date < datetime.date.today(): class_name += " late" events.append( dict(title=title, url=url, start=str(date), className=class_name)) if client_calls: if len(client_calls) == 1: events.append(client_calls[0]) else: title_format = stoqlib_ngettext(_("%d client call"), _("%d client calls"), len(client_calls)) title = title_format % len(client_calls) class_name = "client_call" url = "stoq://show/client-calls-by-date?date=%s" % (date, ) add_event(title, url, date, class_name, False) if client_birthdays: if len(client_birthdays) == 1: events.append(client_birthdays[0]) else: title_format = stoqlib_ngettext(_("%d client birthday"), _("%d client birthdays"), len(client_birthdays)) title = title_format % len(client_birthdays) class_name = "client_birthday" url = "stoq://show/client-birthdays-by-date?date=%s" % (date, ) add_event(title, url, date, class_name, False) if work_orders: if len(work_orders) == 1: events.append(work_orders[0]) else: title_format = stoqlib_ngettext(_("%d work order"), _("%d work orders"), len(work_orders)) title = title_format % len(work_orders) class_name = "work_order" url = "stoq://show/work-orders-by-date?date=%s" % (date, ) add_event(title, url, date, class_name, False) if in_payment_events: if len(in_payment_events) == 1: events.append(in_payment_events[0]) else: title_format = stoqlib_ngettext(_("%d account receivable"), _("%d accounts receivable"), len(in_payment_events)) title = title_format % len(in_payment_events) class_name = "receivable" url = "stoq://show/in-payments-by-date?date=%s" % (date, ) add_event(title, url, date, class_name) if out_payment_events: if len(out_payment_events) == 1: events.append(out_payment_events[0]) else: title_format = stoqlib_ngettext(_("%d account payable"), _("%d accounts payable"), len(out_payment_events)) title = title_format % len(out_payment_events) class_name = "payable" url = "stoq://show/out-payments-by-date?date=%s" % (date, ) add_event(title, url, date, class_name) if purchase_events: if len(purchase_events) == 1: events.append(purchase_events[0]) else: title_format = stoqlib_ngettext(_("%d purchase"), _("%d purchases"), len(purchase_events)) title = title_format % len(purchase_events) url = "stoq://show/purchases-by-date?date=%s" % (date, ) class_name = 'purchase' add_event(title, url, date, class_name) return events