# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4
##
## Copyright (C) 2013 Async Open Source <http://www.async.com.br>
## All rights reserved
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU Lesser General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., or visit: http://www.gnu.org/.
##
## Author(s): Stoq Team <stoq-devel@async.com.br>
##
##
"""A details dialog for a |costcenter| object"""
import datetime
from decimal import Decimal
import gtk
from kiwi.currency import currency
from kiwi.ui.objectlist import Column, SummaryLabel
from stoqlib.api import api
from stoqlib.lib.translation import stoqlib_gettext
from stoqlib.gui.editors.baseeditor import BaseEditor
from stoqlib.gui.search.searchcolumns import IdentifierColumn
from stoqlib.domain.costcenter import CostCenter
from stoqlib.domain.sale import SaleView
from stoqlib.domain.stockdecrease import StockDecrease
from stoqlib.domain.views import CostCenterEntryStockView, StockDecreaseView
_ = stoqlib_gettext
[docs]class CostCenterDialog(BaseEditor):
gladefile = "CostCenterDialog"
model_name = _(u'Cost Center')
size = (750, 450)
model_type = CostCenter
proxy_widgets = ('name_lbl',
'budget_lbl',
'description_lbl')
def _get_stock_transactions_columns(self):
return [Column('date', _('Date'), data_type=datetime.date,
sorted=True),
Column('responsible_name', _('Responsible'),
visible=False, data_type=str),
Column('product_description', _('Product'), data_type=str,
expand=True),
Column('stock_transaction.description', _('Description'), data_type=str,
width=140),
Column('stock_cost', _('Stock cost'), data_type=currency),
Column('quantity', _('Qty'), data_type=Decimal, format_func=abs),
Column('total', _('Total'), data_type=currency)]
def _get_payments_columns(self):
return [IdentifierColumn('identifier', title=_('Payment #'), sorted=True),
Column('method.description', _("Method"),
data_type=str, width=60),
Column('description', _("Description"), data_type=str,
expand=True),
Column('due_date', _("Due date"), visible=False,
data_type=datetime.date, width=90,
justify=gtk.JUSTIFY_RIGHT),
Column('paid_date', _("Paid date"),
data_type=datetime.date, width=90),
Column('status_str', _("Status"), data_type=str, width=80),
Column('value', _("Value"), data_type=currency,
justify=gtk.JUSTIFY_RIGHT, visible=False),
Column('paid_value', _("Paid value"), data_type=currency,
justify=gtk.JUSTIFY_RIGHT)]
def _get_sales_columns(self):
return [IdentifierColumn('identifier', title=_('Sale #'), sorted=True),
Column('client_name', title=_('Client'),
data_type=unicode, expand=True),
Column('branch_name', title=_('Branch'),
data_type=unicode, visible=False),
Column('open_date', title=_('Open date'), width=120,
data_type=datetime.date, justify=gtk.JUSTIFY_RIGHT,
visible=False),
Column('confirm_date', title=_('Confirm date'),
data_type=datetime.date, justify=gtk.JUSTIFY_RIGHT,
width=120),
Column('total', title=_('Total'), data_type=currency,
width=120)]
def _get_stock_decrease_columns(self):
return [IdentifierColumn('identifier', title=('Decrease #'), sorted=True),
Column('confirm_date', _('Date'),
data_type=datetime.date, width=100),
Column('branch_name', _('Branch'),
data_type=unicode, expand=True),
Column('removed_by_name', _('Removed By'),
data_type=unicode, width=120)]
def _setup_columns(self):
self.payments_list.set_columns(self._get_payments_columns())
self.stock_transactions_list.set_columns(
self._get_stock_transactions_columns())
self.sales_list.set_columns(self._get_sales_columns())
self.stock_decreases_list.set_columns(self._get_stock_decrease_columns())
def _setup_summary_labels(self):
value_format = "<b>%s</b>"
total_label = "<b>%s</b>" % api.escape(_("Total:"))
total_summary_label = SummaryLabel(klist=self.payments_list,
column='value',
label=total_label,
value_format=value_format)
total_summary_label.show()
self.payments_vbox.pack_start(total_summary_label, False)
total_label = "<b>%s</b>" % api.escape(_("Total paid:"))
total_paid_summary_label = SummaryLabel(klist=self.payments_list,
column='paid_value',
label=total_label,
value_format=value_format)
total_paid_summary_label.show()
self.payments_vbox.pack_start(total_paid_summary_label, False)
total_label = "<b>%s</b>" % api.escape(_("Total:"))
transaction_summary_label = SummaryLabel(
klist=self.stock_transactions_list,
column='total',
label=total_label,
value_format=value_format)
transaction_summary_label.show()
self.stock_transactions_vbox.pack_start(transaction_summary_label, False)
total_label = "<b>%s</b>" % api.escape(_("Total:"))
sale_summary_label = SummaryLabel(klist=self.sales_list,
column='total',
label=total_label,
value_format=value_format)
sale_summary_label.show()
self.sales_vbox.pack_start(sale_summary_label, False)
def _setup_widgets(self):
self._setup_columns()
# stock transactions
items = self.store.find(CostCenterEntryStockView,
CostCenterEntryStockView.cost_center_id == self.model.id)
self.stock_transactions_list.add_list(list(items))
# payments
self.payments_list.add_list(list(self.model.get_payments()))
# sales
sales = self.store.find(SaleView, SaleView.sale.cost_center == self.model)
self.sales_list.add_list(list(sales))
# stock decreases
items = self.store.find(StockDecreaseView,
StockDecrease.cost_center == self.model)
self.stock_decreases_list.add_list(list(items))
self._setup_summary_labels()
#
# BaseEditor Hooks
#
[docs] def setup_proxies(self):
self._setup_widgets()
self.add_proxy(self.model, self.proxy_widgets)
[docs]def test(): # pragma: no cover
from stoqlib.gui.base.dialogs import run_dialog
ec = api.prepare_test()
model = ec.store.find(CostCenter).any()
run_dialog(CostCenterDialog, None, ec.store, model)
if __name__ == '__main__':
test()