Improved stock reports

bzr revid: nch@tinyerp.com-20090528131145-27y7z2y5q9xv43ti
This commit is contained in:
Naresh Choksy
2009-05-28 18:41:45 +05:30
parent fd66dda678
commit fd34e7cb2c
7 changed files with 230 additions and 235 deletions
+5 -25
View File
@@ -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)
+37 -36
View File
@@ -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>
+13 -41
View File
@@ -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)
+72 -71
View File
@@ -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>
+13 -41
View File
@@ -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)
+77 -17
View File
@@ -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
View File
@@ -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')):