Source code for stoqlib.reporting.purchase
# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4
##
## Copyright (C) 2006-2009 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>
##
##
""" Purchase report implementation """
from stoqlib.lib.formatters import get_formatted_price
from stoqlib.lib.translation import stoqlib_gettext
from stoqlib.reporting.report import ObjectListReport, HTMLReport
from stoqlib.domain.purchase import PurchaseOrder
from stoqlib.domain.receiving import ReceivingOrder
_ = stoqlib_gettext
[docs]class PurchaseReport(ObjectListReport):
title = _("Purchase Order Report")
main_object_name = (_("order"), _("orders"))
filter_format_string = _("with status <u>%s</u>")
summary = ['total', 'ordered_quantity', 'received_quantity']
[docs]class PurchasedItemsReport(ObjectListReport):
title = _("Purchases Items Report")
main_object_name = (_("items"), _("items"))
summary = ['purchased', 'received', 'stocked']
[docs]class PurchaseOrderReport(HTMLReport):
template_filename = 'purchase/purchase.html'
title = _("Purchase Order")
complete_header = False
def __init__(self, filename, order):
self.order = order
self.receiving_orders = list(order.get_receiving_orders())
HTMLReport.__init__(self, filename)
[docs] def get_agreed_freight(self):
freight_names = PurchaseOrder.freight_types
freight_value = get_formatted_price(self.order.expected_freight)
return _(u"%s (%s)") % (freight_names[self.order.freight_type],
freight_value)
[docs] def get_received_freight(self):
if not self.receiving_orders:
return None
freight_names = PurchaseOrder.freight_types
freight_type_map = {
ReceivingOrder.FREIGHT_FOB_PAYMENT: PurchaseOrder.FREIGHT_FOB,
ReceivingOrder.FREIGHT_FOB_INSTALLMENTS: PurchaseOrder.FREIGHT_FOB,
ReceivingOrder.FREIGHT_CIF_UNKNOWN: PurchaseOrder.FREIGHT_CIF,
ReceivingOrder.FREIGHT_CIF_INVOICE: PurchaseOrder.FREIGHT_CIF
}
freight_types = []
freight = 0
for order in self.receiving_orders:
freight += order.freight_total
# If first time used, append to the list of used types
if freight_type_map[order.freight_type] not in freight_types:
freight_types.append(freight_type_map[order.freight_type])
freight_value = get_formatted_price(freight)
if len(freight_types) == 1:
received_freight = _(u"%s (%s)") % (freight_names[freight_types[0]],
freight_value)
else:
received_freight = _(u'Mixed (%s)') % freight_value
return received_freight
[docs] def get_subtitle(self):
return _("Purchase Order #%s") % self.order.identifier
[docs]class PurchaseQuoteReport(HTMLReport):
"""A quote report to be sent to suppliers
"""
title = _(u'Quote Request')
template_filename = 'quote/quote.html'
complete_header = False
def __init__(self, filename, order):
self.order = order
HTMLReport.__init__(self, filename)
[docs] def get_subtitle(self):
return _("Number #%s") % self.order.identifier