diff --git a/addons/l10n_be/l10n_be_wizard.xml b/addons/l10n_be/l10n_be_wizard.xml
index 7d91db74a6e..b170bc93f4d 100644
--- a/addons/l10n_be/l10n_be_wizard.xml
+++ b/addons/l10n_be/l10n_be_wizard.xml
@@ -55,5 +55,40 @@ This is the same wizard that runs from Financial Management/Configuration/Financ
+
+
+ step.vat.listing
+ vat.listing.clients
+ form
+
+
+
+
+
+
+ step.vat.listing
+ vat.listing.clients
+ tree
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/l10n_be/wizard/partner_vat_listing.py b/addons/l10n_be/wizard/partner_vat_listing.py
index c4b8758ae0e..4e9fed80300 100644
--- a/addons/l10n_be/wizard/partner_vat_listing.py
+++ b/addons/l10n_be/wizard/partner_vat_listing.py
@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
##############################################################################
-#
+#
# OpenERP, Open Source Management Solution
# Copyright (C) 2004-2009 Tiny SPRL ().
#
@@ -15,16 +15,30 @@
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
+# along with this program. If not, see .
#
##############################################################################
-import wizard
import time
import datetime
-import pooler
import base64
+
+import wizard
+import pooler
from tools.translate import _
import tools
+from osv import fields, osv
+
+class vat_listing_clients(osv.osv_memory):
+ _name = 'vat.listing.clients'
+ _columns = {
+ 'name': fields.char('Cleint Name', size=64),
+ 'vat': fields.char('VAT', size=64),
+ 'country': fields.char('Country', size=64),
+ 'amount': fields.float('Amount'),
+ 'turnover': fields.float('Turnover'),
+ }
+
+vat_listing_clients()
form = """
"""
+
+client_fields = {
+ 'partners': {'string': 'Cleints', 'type': 'many2many', 'relation': 'vat.listing.clients', 'required': False, 'help': 'You can remove clients/partners which you do not want to show in xml file'},
+ }
+
msg_form = """
"""
msg_fields = {
+ 'name': {'string': 'File name', 'type':'char', 'size':'32'},
'msg': {'string':'File created', 'type':'text', 'size':'100','readonly':True},
'file_save':{'string': 'Save File',
'type': 'binary',
@@ -61,32 +90,89 @@ msg_fields = {
class wizard_vat(wizard.interface):
+ def _get_partner(self, cr, uid, data, context):
+ pool = pooler.get_pool(cr.dbname)
+ period_ids = pool.get('account.period').search(cr, uid, [('fiscalyear_id', '=', data['form']['fyear'])])
+ period = "("+','.join(map(lambda x: str(x), period_ids)) +")"
+
+ p_id_list = pool.get('res.partner').search(cr,uid,[('vat_subjected','!=',False)])
+ if not p_id_list:
+ raise wizard.except_wizard(_('Data Insufficient!'),_('No partner has a VAT Number asociated with him.'))
+ partners = []
+ records = []
+ for obj_partner in pool.get('res.partner').browse(cr, uid, p_id_list):
+ record = {} # this holds record per partner
+
+ #This listing is only for customers located in belgium, that's the
+ #reason why we skip all the partners that haven't their
+ #(or one of their) default address(es) located in Belgium.
+ go_ahead = False
+ for ads in obj_partner.address:
+ if ads.type == 'default' and (ads.country_id and ads.country_id.code == 'BE'):
+ go_ahead = True
+ break
+ if not go_ahead:
+ continue
+ query = 'select b.code,sum(credit)-sum(debit) from account_move_line l left join account_account a on (l.account_id=a.id) left join account_account_type b on (a.user_type=b.id) where b.code in ('"'produit'"','"'tax'"') and l.partner_id='+str(obj_partner.id)+' and l.period_id in '+period+' group by b.code'
+ cr.execute(query)
+ line_info = cr.fetchall()
+ if not line_info:
+ continue
+
+ record['vat'] = obj_partner.vat
+
+ #it seems that this listing is only for belgian customers
+ record['country'] = 'BE'
+ #...deprecated...
+ #~addr = pool.get('res.partner').address_get(cr, uid, [obj_partner.id], ['invoice'])
+
+ #~ if addr.get('invoice',False):
+ #~ads=pool.get('res.partner.address').browse(cr,uid,[addr['invoice']])[0]
+
+ #~ if ads.country_id:
+ #~ record.append(ads.country_id.code)
+ #~ else:
+ #~ error_message.append('Data Insufficient! : '+ 'The Partner "'+obj_partner.name + '"'' has no country associated with its Invoice address!')
+
+ #~ if len(record)<2:
+ #~ record.append('')
+ #~ error_message.append('Data Insufficient! : '+ 'The Partner "'+obj_partner.name + '"'' has no Invoice address!')
+
+ record['amount'] = 0
+ record['turnover'] = 0
+ record['name'] = obj_partner.name
+
+ for item in line_info:
+ if item[0]=='produit':
+ record['turnover'] += item[1]
+ else:
+ record['amount'] += item[1]
+ id_client = pool.get('vat.listing.clients').create(cr, uid, record)
+ partners.append(id_client)
+ records.append(record)
+
+ return {'partners':partners}
+
def _create_xml(self, cr, uid, data, context):
datas=[]
- seq_controlref = pooler.get_pool(cr.dbname).get('ir.sequence').get(cr, uid,'controlref')
- seq_declarantnum = pooler.get_pool(cr.dbname).get('ir.sequence').get(cr, uid,'declarantnum')
- obj_cmpny = pooler.get_pool(cr.dbname).get('res.users').browse(cr, uid, uid).company_id
+ pool = pooler.get_pool(cr.dbname)
+ seq_controlref = pool.get('ir.sequence').get(cr, uid,'controlref')
+ seq_declarantnum = pool.get('ir.sequence').get(cr, uid,'declarantnum')
+ obj_cmpny = pool.get('res.users').browse(cr, uid, uid).company_id
company_vat = obj_cmpny.partner_id.vat
- if not company_vat:
+ if not company_vat:
raise wizard.except_wizard(_('Data Insufficient'),_('No VAT Number Associated with Main Company!'))
cref = company_vat + seq_controlref
dnum = cref + seq_declarantnum
- p_id_list = pooler.get_pool(cr.dbname).get('res.partner').search(cr,uid,[('vat_subjected','!=',False)])
-
- if not p_id_list:
- raise wizard.except_wizard(_('Data Insufficient!'),_('No partner has a VAT Number asociated with him.'))
- obj_year=pooler.get_pool(cr.dbname).get('account.fiscalyear').browse(cr,uid,data['form']['fyear'])
- period_ids = pooler.get_pool(cr.dbname).get('account.period').search(cr, uid, [('fiscalyear_id', '=', data['form']['fyear'])])
- period = "("+','.join(map(lambda x: str(x), period_ids)) +")"
-
+ obj_year=pool.get('account.fiscalyear').browse(cr,uid,data['form']['fyear'])
street = zip_city = country = ''
- addr = pooler.get_pool(cr.dbname).get('res.partner').address_get(cr, uid, [obj_cmpny.partner_id.id], ['invoice'])
+ addr = pool.get('res.partner').address_get(cr, uid, [obj_cmpny.partner_id.id], ['invoice'])
if addr.get('invoice',False):
- ads=pooler.get_pool(cr.dbname).get('res.partner.address').browse(cr,uid,[addr['invoice']])[0]
-
- zip_city = pooler.get_pool(cr.dbname).get('res.partner.address').get_city(cr,uid,ads.id)
+ ads=pool.get('res.partner.address').browse(cr,uid,[addr['invoice']])[0]
+
+ zip_city = pool.get('res.partner.address').get_city(cr,uid,ads.id)
if not zip_city:
zip_city = ''
if ads.street:
@@ -97,7 +183,7 @@ class wizard_vat(wizard.interface):
country = ads.country_id.code
sender_date = time.strftime('%Y-%m-%d')
-
+
data_file = '\n'
error_message = []
- for p_id in p_id_list:
- record = {} # this holds record per partner
- obj_partner = pooler.get_pool(cr.dbname).get('res.partner').browse(cr,uid,p_id)
-
- #This listing is only for customers located in belgium, that's the
- #reason why we skip all the partners that haven't their
- #(or one of their) default address(es) located in Belgium.
- go_ahead = False
- for ads in obj_partner.address:
- if ads.type == 'default' and (ads.country_id and ads.country_id.code == 'BE'):
- go_ahead = True
- break
- if not go_ahead:
- continue
- query = 'select b.code,sum(credit)-sum(debit) from account_move_line l left join account_account a on (l.account_id=a.id) left join account_account_type b on (a.user_type=b.id) where b.code in ('"'produit'"','"'tax'"') and l.partner_id='+str(p_id)+' and l.period_id in '+period+' group by b.code'
- cr.execute(query)
- line_info = cr.fetchall()
- if not line_info:
- continue
-
- record['vat'] = obj_partner.vat
-
- #it seems that this listing is only for belgian customers
- record['country'] = 'BE'
-
- #...deprecated...
- #~addr = pooler.get_pool(cr.dbname).get('res.partner').address_get(cr, uid, [obj_partner.id], ['invoice'])
-
- #~ if addr.get('invoice',False):
- #~ads=pooler.get_pool(cr.dbname).get('res.partner.address').browse(cr,uid,[addr['invoice']])[0]
-
- #~ if ads.country_id:
- #~ record.append(ads.country_id.code)
- #~ else:
- #~ error_message.append('Data Insufficient! : '+ 'The Partner "'+obj_partner.name + '"'' has no country associated with its Invoice address!')
-
- #~ if len(record)<2:
- #~ record.append('')
- #~ error_message.append('Data Insufficient! : '+ 'The Partner "'+obj_partner.name + '"'' has no Invoice address!')
-
- record['amount'] = 0
- record['turnover'] = 0
-
- for item in line_info:
- if item[0]=='produit':
- record['turnover'] += item[1]
- else:
- record['amount'] += item[1]
- datas.append(record)
+ for partner in data['form']['partners']:
+ if isinstance(partner, list) and partner:
+ datas.append(partner[2])
+ else:
+ client_data = pool.get('vat.listing.clients').read(cr, uid, partner, context=context)
+ datas.append(client_data)
seq=0
data_clientinfo=''
@@ -167,6 +210,8 @@ class wizard_vat(wizard.interface):
data['form']['msg']='Exception : \n' +'-'*50+'\n'+ '\n'.join(error_message)
return data['form']
for line in datas:
+ if not line:
+ continue
if line['turnover'] < data['form']['limit_amount']:
continue
seq +=1
@@ -179,12 +224,17 @@ class wizard_vat(wizard.interface):
data['form']['msg'] = 'Save the File with '".xml"' extension.'
data['form']['file_save'] = base64.encodestring(data_file.encode('utf8'))
+ data['form']['name'] = 'vat_list.xml'
return data['form']
states = {
'init': {
'actions': [],
- 'result': {'type':'form', 'arch':form, 'fields':fields, 'state':[('end','Cancel'),('go','Create XML')]},
+ 'result': {'type':'form', 'arch':form, 'fields':fields, 'state':[('end','Cancel'),('go_step','View Clients')]},
+ },
+ 'go_step': {
+ 'actions': [_get_partner],
+ 'result': {'type':'form', 'arch':client_form, 'fields':client_fields, 'state':[('end','Cancel'),('go','Create XML')]},
},
'go': {
'actions': [_create_xml],
@@ -194,4 +244,5 @@ class wizard_vat(wizard.interface):
}
wizard_vat('list.vat.detail')
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
\ No newline at end of file