From b50b4f02a680daa3ceeafbfe2397535ba477b95e Mon Sep 17 00:00:00 2001 From: ced <> Date: Thu, 18 Jan 2007 15:11:04 +0000 Subject: [PATCH] REPORT_INTRASTAT: new module bzr revid: ced-f1486bd96027b4314ee821f415892f81299e9290 --- addons/report_intrastat/__init__.py | 30 +++++ addons/report_intrastat/__terp__.py | 14 +++ addons/report_intrastat/report_intrastat.py | 106 ++++++++++++++++++ .../report_intrastat_data.xml | 77 +++++++++++++ .../report_intrastat_view.xml | 75 +++++++++++++ 5 files changed, 302 insertions(+) create mode 100644 addons/report_intrastat/__init__.py create mode 100644 addons/report_intrastat/__terp__.py create mode 100644 addons/report_intrastat/report_intrastat.py create mode 100644 addons/report_intrastat/report_intrastat_data.xml create mode 100644 addons/report_intrastat/report_intrastat_view.xml diff --git a/addons/report_intrastat/__init__.py b/addons/report_intrastat/__init__.py new file mode 100644 index 00000000000..e8a30304562 --- /dev/null +++ b/addons/report_intrastat/__init__.py @@ -0,0 +1,30 @@ +############################################################################## +# +# Copyright (c) 2004-2007 TINY SPRL. (http://tiny.be) All Rights Reserved. +# +# $Id: __init__.py 1005 2005-07-25 08:41:42Z nicoe $ +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +import report_intrastat diff --git a/addons/report_intrastat/__terp__.py b/addons/report_intrastat/__terp__.py new file mode 100644 index 00000000000..16464437e6e --- /dev/null +++ b/addons/report_intrastat/__terp__.py @@ -0,0 +1,14 @@ +{ + "name" : "Intrastat Reporting - Reporting", + "version" : "1.0", + "author" : "Tiny", + "website" : "http://tinyerp.com", + "depends" : ["base", "product", "stock", "sale", "purchase"], + "category" : "Generic Modules/Inventory Control", + "description": "A module that adds intrastat reports.", + "init_xml" : ["report_intrastat_data.xml",], + "demo_xml" : [], + "update_xml" : ["report_intrastat_view.xml",], + "active": False, + "installable": True +} diff --git a/addons/report_intrastat/report_intrastat.py b/addons/report_intrastat/report_intrastat.py new file mode 100644 index 00000000000..079cddd35f8 --- /dev/null +++ b/addons/report_intrastat/report_intrastat.py @@ -0,0 +1,106 @@ +############################################################################## +# +# Copyright (c) 2004-2007 TINY SPRL. (http://tiny.be) All Rights Reserved. +# +# $Id: __init__.py 1005 2005-07-25 08:41:42Z nicoe $ +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +from osv import osv, fields + +class res_country(osv.osv): + _name = 'res.country' + _inherit = 'res.country' + _columns = { + 'intrastat': fields.boolean('Intrastat member'), + } + _defaults = { + 'intrastat': lambda *a: False, + } +res_country() + +class product_template(osv.osv): + _name = "product.template" + _inherit = "product.template" + _columns = { + 'intrastat': fields.char('Intrastat code', size=16), + } +product_template() + +class report_intrastat(osv.osv): + _name = "report.intrastat" + _description = "Intrastat report" + _auto = False + _columns = { + 'name': fields.date('Month', readonly=True), + 'code': fields.char('Country code', size="2", readonly=True), + 'intrastat': fields.char('Intratstat number', size=16, readonly=True), + 'weight': fields.float('Weight', readonly=True), + 'value': fields.float('Value', readonly=True), + 'type': fields.selection([('import', 'Import'), ('export', 'Export')], 'Type') + } + def init(self, cr): + cr.execute(""" + create or replace view report_intrastat as ( + select + substring(m.create_date for 7)||'-01' as name, + min(m.id) as id, + pt.intrastat as intrastat, + case when l.usage in ('supplier', 'customer') then pc.code else c.code end as code, + sum(case when pol.price_unit is not null + then pol.price_unit * m.product_qty + else + case when sol.price_unit is not null + then sol.price_unit * m.product_qty + else pt.standard_price * m.product_qty + end + end) as value, + sum(pt.weight_net * m.product_qty) as weight, + case when l.usage in ('supplier', 'customer') then 'import' else 'export' end as type + from + stock_move m + left join (product_template pt + left join product_product pp on (pp.product_tmpl_id = pt.id)) + on (m.product_id = pt.id) + left join (res_partner_address a + left join res_country c on (c.id = a.country_id)) + on (a.id = m.address_id) + left join (stock_picking sp + left join (res_partner_address pa + left join res_country pc on (pc.id = pa.country_id)) + on (pa.id = sp.address_id)) + on (sp.id = m.picking_id) + left join stock_location l on (l.id = m.location_id) + left join stock_location dl on (dl.id = m.location_dest_id) + left join purchase_order_line pol on (pol.id = m.purchase_line_id) + left join sale_order_line sol on (sol.id = m.sale_line_id) + where + m.state != 'draft' + and ((l.usage in ('supplier', 'customer') and dl.usage not in ('supplier', 'customer')) + or (dl.usage in ('supplier', 'customer') and l.usage not in ('supplier', 'customer'))) + and (c.intrastat is not null or pc.intrastat is not null) + group by substring(m.create_date for 7), pt.intrastat, c.code, pc.code, l.usage, dl.usage + )""") +report_intrastat() + diff --git a/addons/report_intrastat/report_intrastat_data.xml b/addons/report_intrastat/report_intrastat_data.xml new file mode 100644 index 00000000000..3622c361b4f --- /dev/null +++ b/addons/report_intrastat/report_intrastat_data.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/report_intrastat/report_intrastat_view.xml b/addons/report_intrastat/report_intrastat_view.xml new file mode 100644 index 00000000000..13942e192ec --- /dev/null +++ b/addons/report_intrastat/report_intrastat_view.xml @@ -0,0 +1,75 @@ + + + + + + res.country.tree + res.country + + + + + + + + + + res.country.form + res.country + + + + + + + + + + product.normal.form + product.product + + + + + + + + + + report.intrastat.view + report.intrastat + tree + + + + + + + + + + + + + + report.intrastat + ir.actions.act_window + report.intrastat + form + tree + [('name','=',time.strftime('%Y-%m-01'))] + + + + + + report.intrastat + ir.actions.act_window + report.intrastat + form + tree + + + + +