Improved stock reports
bzr revid: nch@tinyerp.com-20090528131145-27y7z2y5q9xv43ti
This commit is contained in:
@@ -26,8 +26,7 @@ from report import report_sxw
|
||||
class lot_location(report_sxw.rml_parse):
|
||||
def __init__(self, cr, uid, name, context):
|
||||
super(lot_location, self).__init__(cr, uid, name, context)
|
||||
self.quantity_total=0.0
|
||||
self.grand_total=0.0
|
||||
self.grand_total = 0.0
|
||||
|
||||
self.localcontext.update({
|
||||
'time': time,
|
||||
@@ -36,30 +35,11 @@ class lot_location(report_sxw.rml_parse):
|
||||
})
|
||||
|
||||
def process(self,location_id):
|
||||
res = {}
|
||||
location_obj = pooler.get_pool(self.cr.dbname).get('stock.location')
|
||||
product_obj = pooler.get_pool(self.cr.dbname).get('product.product')
|
||||
self.quantity_total=0.0
|
||||
res['location_name'] = pooler.get_pool(self.cr.dbname).get('stock.location').read(self.cr, self.uid, [location_id],['name'])[0]['name']
|
||||
|
||||
prod_info = location_obj._product_get(self.cr, self.uid, location_id)
|
||||
|
||||
res['product'] = []
|
||||
for prod in product_obj.browse(self.cr, self.uid, prod_info.keys()):
|
||||
if prod_info[prod.id]:
|
||||
res['product'].append({'prod_name': prod.name, 'prod_qty': str(prod_info[prod.id])})
|
||||
self.quantity_total+=prod_info[prod.id]
|
||||
self.grand_total+=prod_info[prod.id]
|
||||
if not res['product']:
|
||||
res['product'].append({'prod_name': '', 'prod_qty': ''})
|
||||
location_child = location_obj.read(self.cr, self.uid, [location_id], ['child_ids'])
|
||||
res['total'] = self.quantity_total
|
||||
list=[]
|
||||
list.append(res)
|
||||
|
||||
for child_id in location_child[0]['child_ids']:
|
||||
list.extend(self.process(child_id))
|
||||
return list
|
||||
data = location_obj._product_get_report(self.cr,self.uid, [location_id])
|
||||
data['location_name'] = location_obj.read(self.cr, self.uid, [location_id],['name'])[0]['name']
|
||||
self.grand_total += data['total']
|
||||
return [data]
|
||||
|
||||
def _qty_total(self):
|
||||
return str( self.grand_total)
|
||||
|
||||
@@ -20,21 +20,18 @@
|
||||
<blockTableStyle id="Table4">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#d4d4d4" start="0,0" stop="-1,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#d4d4d4" start="1,1" stop="3,-1"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table2">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="3,0"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table3">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="3,0"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="0,0" stop="3,0"/>
|
||||
</blockTableStyle>
|
||||
<initialize>
|
||||
<paraStyle name="all" alignment="justify"/>
|
||||
@@ -42,6 +39,7 @@
|
||||
<paraStyle name="P1" fontName="Helvetica-BoldOblique" fontSize="6.0" leading="8"/>
|
||||
<paraStyle name="P2" fontName="Times-Roman"/>
|
||||
<paraStyle name="P3" fontName="Helvetica" fontSize="8.0" leading="10" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="P41" fontName="Helvetica-BoldOblique" fontSize="0.0" leading="0" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="P4" fontName="Helvetica-BoldOblique" fontSize="8.0" leading="10" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P5" fontName="Helvetica-Bold" fontSize="8.0" leading="10" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P6" fontName="Helvetica-Bold" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
@@ -49,6 +47,7 @@
|
||||
<paraStyle name="P8" fontName="Helvetica-BoldOblique" fontSize="11.0" leading="14" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P9" fontName="Helvetica-BoldOblique" fontSize="2.0" leading="3" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P10" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P10a" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P11" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P12" fontName="Helvetica" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="Standard" fontName="Times-Roman"/>
|
||||
@@ -61,58 +60,60 @@
|
||||
</stylesheet>
|
||||
<images/>
|
||||
<story>
|
||||
<para style="P4">[[ repeatIn(objects,'o') ]]</para>
|
||||
<para style="Standard"><font color="white"> </font></para>
|
||||
<section>
|
||||
<blockTable colWidths="201.0,235.0,91.0" repeatRows="1" style="Table1">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P6">Location</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P6">Product</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P7">Quantity</para>
|
||||
</td>
|
||||
<td><para style="P6">Location</para></td>
|
||||
<td><para style="P6">Product</para></td>
|
||||
<td><para style="P7">Quantity</para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="P9">[[ repeatIn(process(o.id),'ob') ]]</para>
|
||||
<blockTable colWidths="202.0,234.0,93.0" repeatRows="1" style="Table4">
|
||||
<para style="P41"><font color="white">[[ repeatIn(objects,'o') ]]</font></para>
|
||||
<section>
|
||||
<para style="P41"><font color="white">[[ repeatIn(process(o.id),'ob') ]]</font></para>
|
||||
<blockTable colWidths="202.0,234.0,65.0,25" repeatRows="1" style="Table4">
|
||||
<tr>
|
||||
<td><para style="P5">[[ ob['location_name'] ]]</para></td>
|
||||
<td><para style="Standard"><font color="white"> </font></para></td>
|
||||
<td><para style="Standard"><font color="white"> </font></para></td>
|
||||
<td><para style="Standard"><font color="white"> </font></para></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><para style="P3">[[ repeatIn(ob['product'], 'p') ]] </para></td>
|
||||
<td><para style="P3">[[ p['prod_name'] or 'There is no product in this location' ]]</para></td>
|
||||
<td><para style="P12">[[ p['prod_qty'] or 0.00 ]] </para></td>
|
||||
<td><para style="P3">[[ p['prod_name'] ]]</para></td>
|
||||
<td><para style="P12">[[ p['prod_qty'] ]]</para></td>
|
||||
<td><para style="P12">[[ p['uom'] ]]</para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="P1"><font color="white"> </font></para>
|
||||
<para style="P1"><font color="white"> </font></para>
|
||||
<blockTable colWidths="200.0,235.0,89.0" style="Table2">
|
||||
<blockTable colWidths="200.0,235.0,60.0,25" style="Table2">
|
||||
<tr>
|
||||
<td><para style="P10"><font color="white"> </font></para></td>
|
||||
<td><para style="P10"></para></td>
|
||||
<td><para style="P10">Total : [[ formatLang(ob['total']) ]]</para></td>
|
||||
<td><para style="P10a">Total : </para></td>
|
||||
<td><para style="P10">[[ ob['total'] ]]</para></td>
|
||||
<td><para style="P10">Units</para></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><para><font color="white"> </font></para></td>
|
||||
<td><para><font color="white"> </font></para></td>
|
||||
<td><para><font color="white"> </font></para></td>
|
||||
<td><para style="P10"></para></td>
|
||||
<td><para style="P10"></para></td>
|
||||
<td><para style="P10"></para></td>
|
||||
<td><para style="P10"></para></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><para style="P10"></para></td>
|
||||
<td><para style="P10"></para></td>
|
||||
<td><para style="P10"></para></td>
|
||||
<td><para style="P10"></para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
</section>
|
||||
<section>
|
||||
<blockTable colWidths="200.0,235.0,89.0" style="Table3">
|
||||
</section>
|
||||
<blockTable colWidths="200.0,235.0,60.0,25" style="Table3">
|
||||
<tr>
|
||||
<td><para style="P10"><font color="white"> </font></para></td>
|
||||
<td><para style="P10"><font color="white"> </font></para></td>
|
||||
<td><para style="P10">Grand Total: [[ qty_total() ]]</para></td>
|
||||
<td><para style="P10a">Grand Total:</para></td>
|
||||
<td><para style="P10"></para></td>
|
||||
<td><para style="P10">[[ qty_total() ]]</para></td>
|
||||
<td><para style="P10">Units</para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
</section>
|
||||
</story>
|
||||
</document>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
|
||||
# $Id$
|
||||
#
|
||||
@@ -27,56 +27,28 @@ class lot_overview(report_sxw.rml_parse):
|
||||
def __init__(self, cr, uid, name, context):
|
||||
super(lot_overview, self).__init__(cr, uid, name, context)
|
||||
self.price_total = 0.0
|
||||
self.grand_total = 0.0
|
||||
self.localcontext.update({
|
||||
'time': time,
|
||||
'process':self.process,
|
||||
'price_total': self._price_total,
|
||||
'grand_total_price':self._grand_total,
|
||||
})
|
||||
|
||||
def process(self,location_id):
|
||||
res = {}
|
||||
location_obj = pooler.get_pool(self.cr.dbname).get('stock.location')
|
||||
product_obj = pooler.get_pool(self.cr.dbname).get('product.product')
|
||||
|
||||
product_ids = product_obj.search(self.cr, self.uid, [])
|
||||
data = location_obj._product_get_report(self.cr,self.uid, [location_id])
|
||||
data['location_name'] = location_obj.read(self.cr, self.uid, [location_id],['name'])[0]['name']
|
||||
self.price_total = 0.0
|
||||
self.price_total += data['total_price']
|
||||
self.grand_total += data['total_price']
|
||||
return [data]
|
||||
|
||||
products = product_obj.browse(self.cr,self.uid, product_ids)
|
||||
products_by_uom = {}
|
||||
products_by_id = {}
|
||||
for product in products:
|
||||
products_by_uom.setdefault(product.uom_id.id, [])
|
||||
products_by_uom[product.uom_id.id].append(product)
|
||||
products_by_id.setdefault(product.id, [])
|
||||
products_by_id[product.id] = product
|
||||
|
||||
result = []
|
||||
# res['prod'] = []
|
||||
for id in self.ids:
|
||||
for uom_id in products_by_uom.keys():
|
||||
fnc = location_obj._product_get
|
||||
qty = fnc(self.cr, self.uid, id, [x.id for x in products_by_uom[uom_id]])
|
||||
for product_id in qty.keys():
|
||||
if not qty[product_id]:
|
||||
continue
|
||||
product = products_by_id[product_id]
|
||||
value=(product.standard_price)*(qty[product_id])
|
||||
self.price_total += value
|
||||
result.append({
|
||||
|
||||
'name': product.name,
|
||||
'variants': product.variants or '',
|
||||
'code': product.default_code,
|
||||
'amount': str(qty[product_id]),
|
||||
'uom': product.uom_id.name,
|
||||
'price': str(product.standard_price),
|
||||
'value':str(value),
|
||||
})
|
||||
|
||||
|
||||
return result
|
||||
|
||||
def _price_total(self):
|
||||
return str( self.price_total)
|
||||
return str( self.price_total)
|
||||
|
||||
def _grand_total(self):
|
||||
return str( self.grand_total)
|
||||
|
||||
report_sxw.report_sxw('report.lot.stock.overview', 'stock.location', 'addons/stock/report/lot_overview.rml', parser=lot_overview)
|
||||
|
||||
|
||||
@@ -13,24 +13,29 @@
|
||||
<blockTableStyle id="Table1">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="0,-1" stop="0,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="1,-1" stop="1,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="2,-1" stop="2,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="3,-1" stop="3,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="4,-1" stop="4,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="0,0" stop="-1,-1"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table2">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#d4d4d4" start="0,0" stop="-1,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#d4d4d4" start="1,1" stop="-1,-1"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table3">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="-1,-1"/>
|
||||
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table4">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
|
||||
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="3,0" stop="3,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="4,0" stop="4,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="5,0" stop="5,-1"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="6,0" stop="6,-1"/>
|
||||
</blockTableStyle>
|
||||
<initialize>
|
||||
<paraStyle name="all" alignment="justify"/>
|
||||
@@ -39,12 +44,17 @@
|
||||
<paraStyle name="P2" fontName="Helvetica-BoldOblique" fontSize="11.0" leading="14" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P3" fontName="Helvetica"/>
|
||||
<paraStyle name="P4" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT"/>
|
||||
<paraStyle name="P41" fontName="Helvetica-Bold" fontSize="10.0" leading="13" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P5" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT"/>
|
||||
<paraStyle name="P6" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER"/>
|
||||
<paraStyle name="P7" fontName="Helvetica-BoldOblique" fontSize="6.0" leading="8"/>
|
||||
<paraStyle name="P8" fontName="Helvetica-Bold" fontSize="8.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P8" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P8a" fontName="Helvetica-Bold" fontSize="10.0" leading="10" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P9" fontName="Helvetica-BoldOblique" fontSize="2.0" leading="3" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="P10" fontName="Helvetica-Bold" fontSize="10.0" leading="13" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P10a" fontName="Helvetica-Bold" fontSize="10.0" leading="13" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P10b" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="P10c" fontName="Helvetica-Bold" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="P11" fontName="Helvetica-Bold" fontSize="10.0" leading="13" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P12" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="0.0"/>
|
||||
<paraStyle name="Standard" fontName="Times-Roman"/>
|
||||
@@ -58,78 +68,69 @@
|
||||
</stylesheet>
|
||||
<images/>
|
||||
<story>
|
||||
<para style="P2">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<section>
|
||||
<blockTable colWidths="182.0,64.0,63.0,60.0,84.0,76.0" repeatRows="1" style="Table1">
|
||||
<blockTable colWidths="60.0,180.0,61.0,55.0,59.0,56.0,61.0" repeatRows="1" style="Table1">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P1">Product</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P1">Variants</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P10">Quantity</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P11">UoM</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P10">Unit Price</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P10">Value</para>
|
||||
</td>
|
||||
<td><para style="P1">Location</para></td>
|
||||
<td><para style="P1">Product</para></td>
|
||||
<td><para style="P1">Variants</para></td>
|
||||
<td><para style="P10a">Quantity</para></td>
|
||||
<td><para style="P10a">UoM</para></td>
|
||||
<td><para style="P10c">Unit Price</para></td>
|
||||
<td><para style="P10a">Value</para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="P9">[[ repeatIn(objects,'o') ]]</para>
|
||||
<section>
|
||||
<blockTable colWidths="180.0,64.0,63.0,61.0,82.0,76.0" repeatRows="1" style="Table2">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P12"><font face="Times-Roman">[[ repeatIn(process(o.id),'ob') ]]</font>[[ ob['name'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P4">[[ ob['variants'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P5">[[ ob['amount'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P6">[[ ob['uom'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P5">[[ ob['price'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P5">[[ ob['value'] ]]</para>
|
||||
</td>
|
||||
<para style="P12">[[ repeatIn(process(o.id),'ob') ]]</para>
|
||||
|
||||
<blockTable colWidths="70.0,190.0,56.0,55.0,52.0,56.0,68.0" repeatRows="1" style="Table2">
|
||||
<tr>
|
||||
<td><para style="P41">[[ ob['location_name'] ]]</para></td>
|
||||
<td><para style="Standard"><font color="white"></font></para></td>
|
||||
<td><para style="Standard"><font color="white"></font></para></td>
|
||||
<td><para style="Standard"><font color="white"></font></para></td>
|
||||
<td><para style="Standard"><font color="white"></font></para></td>
|
||||
<td><para style="Standard"><font color="white"></font></para></td>
|
||||
<td><para style="Standard"><font color="white"></font></para></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><para style="P7">[[ repeatIn(ob['product'],'p') ]]</para></td>
|
||||
<td><para style="P12">[[ p['prod_name'] ]]</para></td>
|
||||
<td><para style="P4">[[ p['variants'] ]]</para></td>
|
||||
<td><para style="P10b">[[ p['prod_qty'] ]]</para></td>
|
||||
<td><para style="P10b">[[ p['uom'] ]]</para></td>
|
||||
<td><para style="P10b">[[ p['price'] ]]</para></td>
|
||||
<td><para style="P10b">[[ p['price_value'] ]]</para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="P7">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<blockTable colWidths="369.0,82.0,74.0" style="Table4">
|
||||
<blockTable colWidths="70.0,190.0,56.0,55.0,52.0,56.0,68.0" style="Table4">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P8">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P8">Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P8">[[ price_total() ]]</para>
|
||||
</td>
|
||||
<td><para style="P8"></para></td>
|
||||
<td><para style="P8">Total:</para></td>
|
||||
<td><para style="P8"></para></td>
|
||||
<td><para style="P8"></para></td>
|
||||
<td><para style="P8"></para></td>
|
||||
<td><para style="P8"></para></td>
|
||||
<td><para style="P8a"><u>[[ price_total() ]]</u></para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="P3">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
<para style="P11"><font color="white"> </font></para>
|
||||
<para style="P11"><font color="white"> </font></para>
|
||||
<para style="P11"><font color="white"> </font></para>
|
||||
<para style="P11"><font color="white"> </font></para>
|
||||
</section>
|
||||
</section>
|
||||
<blockTable colWidths="180,60,61.0,55.0,59.0,56.0,68.0" style="Table3">
|
||||
<tr>
|
||||
<td><para style="P8">Grand Total:</para></td>
|
||||
<td><para style="P8"></para></td>
|
||||
<td><para style="P8"></para></td>
|
||||
<td><para style="P8"></para></td>
|
||||
<td><para style="P8"></para></td>
|
||||
<td><para style="P8"></para></td>
|
||||
<td><para style="P8a"><u>[[ grand_total_price() ]]</u></para></td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
</story>
|
||||
</document>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# OpenERP, Open Source Management Solution
|
||||
# OpenERP, Open Source Management Solution
|
||||
# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
|
||||
# $Id$
|
||||
#
|
||||
@@ -27,56 +27,28 @@ class lot_overview_all(report_sxw.rml_parse):
|
||||
def __init__(self, cr, uid, name, context):
|
||||
super(lot_overview_all, self).__init__(cr, uid, name, context)
|
||||
self.price_total = 0.0
|
||||
self.grand_total = 0.0
|
||||
self.localcontext.update({
|
||||
'time': time,
|
||||
'process':self.process,
|
||||
'price_total': self._price_total,
|
||||
'grand_total_price':self._grand_total,
|
||||
})
|
||||
|
||||
def process(self,location_id):
|
||||
res = {}
|
||||
location_obj = pooler.get_pool(self.cr.dbname).get('stock.location')
|
||||
product_obj = pooler.get_pool(self.cr.dbname).get('product.product')
|
||||
|
||||
product_ids = product_obj.search(self.cr, self.uid, [])
|
||||
data = location_obj._product_get_all_report(self.cr,self.uid, [location_id])
|
||||
data['location_name'] = location_obj.read(self.cr, self.uid, [location_id],['name'])[0]['name']
|
||||
self.price_total = 0.0
|
||||
self.price_total += data['total_price']
|
||||
self.grand_total += data['total_price']
|
||||
return [data]
|
||||
|
||||
products = product_obj.browse(self.cr,self.uid, product_ids)
|
||||
products_by_uom = {}
|
||||
products_by_id = {}
|
||||
for product in products:
|
||||
products_by_uom.setdefault(product.uom_id.id, [])
|
||||
products_by_uom[product.uom_id.id].append(product)
|
||||
products_by_id.setdefault(product.id, [])
|
||||
products_by_id[product.id] = product
|
||||
|
||||
result = []
|
||||
# res['prod'] = []
|
||||
for id in self.ids:
|
||||
for uom_id in products_by_uom.keys():
|
||||
fnc = location_obj._product_get
|
||||
qty = fnc(self.cr, self.uid, id, [x.id for x in products_by_uom[uom_id]])
|
||||
for product_id in qty.keys():
|
||||
if not qty[product_id]:
|
||||
continue
|
||||
product = products_by_id[product_id]
|
||||
value=(product.standard_price)*(qty[product_id])
|
||||
self.price_total += value
|
||||
result.append({
|
||||
|
||||
'name': product.name,
|
||||
'variants': product.variants or '',
|
||||
'code': product.default_code,
|
||||
'amount': str(qty[product_id]),
|
||||
'uom': product.uom_id.name,
|
||||
'price': str(product.standard_price),
|
||||
'value':str(value),
|
||||
})
|
||||
|
||||
|
||||
return result
|
||||
|
||||
def _price_total(self):
|
||||
return str( self.price_total)
|
||||
return str( self.price_total)
|
||||
|
||||
def _grand_total(self):
|
||||
return str( self.grand_total)
|
||||
|
||||
report_sxw.report_sxw('report.lot.stock.overview_all', 'stock.location', 'addons/stock/report/lot_overview_all.rml', parser=lot_overview_all)
|
||||
|
||||
|
||||
@@ -21,6 +21,13 @@
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="5,-1" stop="5,-1"/>
|
||||
<lineStyle kind="LINEBELOW" colorName="#000000" start="6,-1" stop="6,-1"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table3">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="0,0" stop="0,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="1,0" stop="1,0"/>
|
||||
<lineStyle kind="LINEABOVE" colorName="#000000" start="2,0" stop="2,0"/>
|
||||
</blockTableStyle>
|
||||
<blockTableStyle id="Table4">
|
||||
<blockAlignment value="LEFT"/>
|
||||
<blockValign value="TOP"/>
|
||||
@@ -46,6 +53,8 @@
|
||||
<paraStyle name="P8" fontName="Helvetica-BoldOblique" fontSize="2.0" leading="3" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P9" fontName="Helvetica"/>
|
||||
<paraStyle name="P10" fontName="Helvetica-BoldOblique" fontSize="6.0" leading="8"/>
|
||||
<paraStyle name="P101" fontName="Helvetica-Bold" fontSize="10.0" leading="13" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P102" fontName="Helvetica-Bold" fontSize="10.0" leading="13" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P11" fontName="Helvetica" fontSize="9.0" leading="11" alignment="LEFT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P12" fontName="Helvetica" fontSize="9.0" leading="11" alignment="RIGHT" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
<paraStyle name="P13" fontName="Helvetica" fontSize="9.0" leading="11" alignment="CENTER" spaceBefore="0.0" spaceAfter="6.0"/>
|
||||
@@ -66,27 +75,59 @@
|
||||
<section>
|
||||
<blockTable colWidths="75.0,158.0,59.0,54.0,51.0,64.0,67.0" repeatRows="1" style="Table1">
|
||||
<tr>
|
||||
<td><para style="P2">Code</para></td>
|
||||
<td><para style="P2">Product</para></td>
|
||||
<td><para style="P2">Variants</para></td>
|
||||
<td><para style="P3">Amount</para></td>
|
||||
<td><para style="P4">UoM</para></td>
|
||||
<td><para style="P3">Unit Price</para></td>
|
||||
<td><para style="P3">Value</para></td>
|
||||
<td>
|
||||
<para style="P2">Code</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P2">Product</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P2">Variants</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P3">Amount</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P4">UoM</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P3">Unit Price</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P3">Value</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="P8">[[repeatIn(objects,'o')]]</para>
|
||||
<section>
|
||||
<para style="P12">[[ repeatIn(process(o.id),'ob') ]]</para>
|
||||
<para style="P102">Location :[[ ob['location_name'] ]]</para>
|
||||
<blockTable colWidths="5.0,69.0,159.0,60.0,54.0,51.0,64.0,67.0" repeatRows="1" style="Table4">
|
||||
<tr>
|
||||
<td><para style="P7"><font color= "white">[[ repeatIn(process(o.id),'ob') ]]</font></para></td>
|
||||
<td><para style="P7">[[ ob['code'] ]]</para></td>
|
||||
<td><para style="P7">[[ ob['name'] ]]</para></td>
|
||||
<td><para style="P11">[[ ob['variants'] ]]</para></td>
|
||||
<td><para style="P12">[[ ob['amount'] ]]</para></td>
|
||||
<td><para style="P13">[[ ob['uom'] ]]</para></td>
|
||||
<td><para style="P12">[[ ob['price'] ]]</para></td>
|
||||
<td><para style="P12">[[ ob['value'] ]]</para></td>
|
||||
<td>
|
||||
<para style="P7">[[ repeatIn(ob['product'],'p') ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P7">[[ p['code'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P7">[[ p['prod_name'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P11">[[ p['variants'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P12">[[ p['prod_qty'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P13">[[ p['uom'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P12">[[ p['price'] ]]</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P12">[[ p['price_value'] ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="P10">
|
||||
@@ -99,8 +140,12 @@
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td><para style="P5">Total :</para></td>
|
||||
<td><para style="P5">[[ price_total() ]]</para></td>
|
||||
<td>
|
||||
<para style="P5">Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P5">[[ price_total() ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
<para style="P9">
|
||||
@@ -108,5 +153,20 @@
|
||||
</para>
|
||||
</section>
|
||||
</section>
|
||||
<blockTable colWidths="200.0,255.0,68.0" style="Table2">
|
||||
<tr>
|
||||
<td>
|
||||
<para style="P11">
|
||||
<font color="white"> </font>
|
||||
</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P101">Grand Total:</para>
|
||||
</td>
|
||||
<td>
|
||||
<para style="P101">[[ grand_total_price() ]]</para>
|
||||
</td>
|
||||
</tr>
|
||||
</blockTable>
|
||||
</story>
|
||||
</document>
|
||||
|
||||
+13
-4
@@ -205,8 +205,11 @@ class stock_location(osv.osv):
|
||||
products_by_id.setdefault(product.id, [])
|
||||
products_by_id[product.id] = product
|
||||
|
||||
result = []
|
||||
result = {}
|
||||
result['product'] = []
|
||||
for id in ids:
|
||||
quantity_total = 0.0
|
||||
total_price = 0.0
|
||||
for uom_id in products_by_uom.keys():
|
||||
fnc = self._product_get
|
||||
if recursive:
|
||||
@@ -219,14 +222,20 @@ class stock_location(osv.osv):
|
||||
if not qty[product_id]:
|
||||
continue
|
||||
product = products_by_id[product_id]
|
||||
result.append({
|
||||
quantity_total += qty[product_id]
|
||||
price = qty[product_id] * product.standard_price
|
||||
total_price += price
|
||||
result['product'].append({
|
||||
'price': product.standard_price,
|
||||
'name': product.name,
|
||||
'prod_name': product.name,
|
||||
'code': product.default_code, # used by lot_overview_all report!
|
||||
'variants': product.variants or '',
|
||||
'uom': product.uom_id.name,
|
||||
'amount': qty[product_id],
|
||||
'prod_qty': qty[product_id],
|
||||
'price_value':price,
|
||||
})
|
||||
result['total'] = quantity_total
|
||||
result['total_price'] = total_price
|
||||
return result
|
||||
|
||||
def _product_get_multi_location(self, cr, uid, ids, product_ids=False, context={}, states=['done'], what=('in', 'out')):
|
||||
|
||||
Reference in New Issue
Block a user