diff --git a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py index e43dbfecf2b..75162b37b82 100644 --- a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py +++ b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.py @@ -23,11 +23,35 @@ # along with this program. If not, see . # ############################################################################## + import time import base64 from tools.translate import _ from osv import fields, osv +class vat_listing_clients(osv.osv_memory): + _name = 'vat.listing.clients' + _columns = { + 'name': fields.char('Client Name', size=32), + 'vat': fields.char('VAT', size=64), + 'country': fields.char('Country', size=16), + 'amount': fields.float('Amount'), + 'turnover': fields.float('Turnover'), + } + + def name_get(self, cr, uid, ids, context=None): + res = self.read(cr, uid, ids, ['name', 'vat'], context=context, load='_classic_write') + return [(r['id'], '%s - %s' % (r['name'] or '', r['vat'] or '')) for r in res] + + def name_search(self, cr, uid, name, args=None, operator='ilike', context=None, limit=100): + args.append(['id', 'in', context['partner_ids']]) + client_ids = self.search(cr, uid, [('vat', '=', name)] + args, limit=limit, context=context) + if not client_ids: + client_ids = self.search(cr, uid, [('name', 'ilike', name)] + args, limit=limit, context=context) + return self.name_get(cr, uid, client_ids, context=context) + +vat_listing_clients() + class partner_vat_13(osv.osv_memory): """ Vat Listing """ _name = "partner.vat_13" @@ -98,39 +122,42 @@ class partner_vat_13(osv.osv_memory): 'context': context, 'type': 'ir.actions.act_window', 'target': 'new', - } + } _columns = { 'year': fields.char('Year', size=4, required=True), 'limit_amount': fields.integer('Limit Amount', required=True), - } - + } + _defaults={ 'year': lambda *a: str(int(time.strftime('%Y'))-1), 'limit_amount': 250, - } - + } + partner_vat_13() class partner_vat_list_13(osv.osv_memory): - """ Partner Vat Listing """ _name = "partner.vat.list_13" _columns = { # TODO the referenced model has been deleted at revno 4672.1.2. - #'partner_ids': fields.many2many('vat.listing.clients', 'vat_partner_rel', 'vat_id', 'partner_id', 'Clients', required=False, help='You can remove clients/partners which you do not want to show in xml file'), + 'partner_ids': fields.many2many('vat.listing.clients', 'vat_partner_rel', 'vat_id', 'partner_id', 'Clients', help='You can remove clients/partners which you do not want to show in xml file'), 'name': fields.char('File Name', size=32), 'msg': fields.text('File created', size=64, readonly=True), 'file_save' : fields.binary('Save File', readonly=True), - } + 'identification_type': fields.selection([('tin','TIN'), ('nvat','NVAT'), ('other','Other')], 'Identification Type', required=True), + 'other': fields.char('Other Qlf', size=16, help="Description of a Identification Type"), + 'comments': fields.text('Comments'), + } def _get_partners(self, cursor, user, context=None): return context.get('partner_ids', []) _defaults={ # TODO the referenced model has been deleted at revno 4672.1.2. - # 'partner_ids': _get_partners - } + 'partner_ids': _get_partners, + 'identification_type' : 'tin', + } def create_xml(self, cursor, user, ids, context=None): datas = [] @@ -151,35 +178,83 @@ class partner_vat_list_13(osv.osv_memory): company_vat = company_vat.replace(' ','').upper() SenderId = company_vat[2:] + issued_by = company_vat[:2] cref = SenderId + seq_controlref dnum = cref + seq_declarantnum #obj_year= obj_fyear.browse(cursor, user, context['fyear'], context=context) - street = zip_city = country = '' + street = city = country = '' addr = obj_partner.address_get(cursor, user, [obj_cmpny.partner_id.id], ['invoice']) if addr.get('invoice',False): ads = obj_addr.browse(cursor, user, [addr['invoice']], context=context)[0] + phone = ads.phone or '' + email = ads.email or '' + name = ads.name or '' - zip_city = obj_addr.get_city(cursor, user, ads.id) - if not zip_city: - zip_city = '' + city = obj_addr.get_city(cursor, user, ads.id) + zip = obj_addr.browse(cursor, user, ads.id, context=context).zip or '' + if not city: + city = '' if ads.street: - street = ads.street + street = ads.street + ' ' if ads.street2: street += ads.street2 if ads.country_id: country = ads.country_id.code + data = self.read(cursor, user, ids)[0] + other = data['other'] or '' sender_date = time.strftime('%Y-%m-%d') comp_name = obj_cmpny.name - data_file = '\n\n\t\t'+ comp_name +'\n\t\t'+ street +'\n\t\t'+ zip_city +'' - data_file += '\n\t\t'+ country +'\n\t\n' - data_comp = '\n\n\t'+SenderId+'\n\t'+ comp_name +'\n\t'+ street +'\n\t'+ zip_city +'\n\t'+ country +'\n' - data_period = '\n' + context['year'] +'' + + annual_listing_data = { + 'identificationType': data['identification_type'].upper(), + 'issued_by': issued_by, + 'other': other, + 'company_vat': company_vat, + 'comp_name': comp_name, + 'street': street, + 'zip': zip, + 'city': city, + 'country': country, + 'email': email, + 'phone': phone, + 'SenderId': SenderId, + 'period': context['year'], + 'comments': data['comments'] or '' + } + + data_file = """ + + + %(company_vat)s + %(comp_name)s + %(street)s + %(zip)s + %(city)s + %(country)s + %(email)s + %(phone)s + + +""" % annual_listing_data + + data_comp = """ + + + %(SenderId)s + %(comp_name)s + %(street)s + %(zip)s + %(city)s + %(country)s + %(email)s + %(phone)s + + %(period)s + """ % annual_listing_data + error_message = [] - data = self.read(cursor, user, ids)[0] + for partner in data['partner_ids']: if isinstance(partner, list) and partner: datas.append(partner[2]) @@ -187,12 +262,23 @@ class partner_vat_list_13(osv.osv_memory): client_data = obj_vat_lclient.read(cursor, user, partner, context=context) datas.append(client_data) seq = 0 - data_clientinfo = '' + data_client_info = '' sum_tax = 0.00 sum_turnover = 0.00 if len(error_message): return 'Exception : \n' +'-'*50+'\n'+ '\n'.join(error_message) + amount_data = { + 'seq': str(seq), + 'dnum': dnum, + 'sum_tax': str(0), + 'sum_turnover': str(0), + } for line in datas: + vat_issued = line['vat'][:2] + if vat_issued == 'BE': + vat_issued = '' + else: + vat_issued = vat_issued if not line: continue if line['turnover'] < context['limit_amount']: @@ -200,38 +286,67 @@ class partner_vat_list_13(osv.osv_memory): seq += 1 sum_tax += line['amount'] sum_turnover += line['turnover'] - data_clientinfo += '\n\n\t\n\t\t'+line['vat'].replace(' ','').upper()[2:] +'\n\t\t' + line['country'] +'\n\t\n\t'+str(int(round(line['amount'] * 100))) +'\n\t'+str(int(round(line['turnover'] * 100))) +'\n' + + amount_data.update({ + 'seq': str(seq), + 'vat_issued': vat_issued, + 'only_vat': line['vat'].replace(' ','').upper()[2:], + 'turnover': str(int(round(line['turnover'] * 100))), + 'vat_amount': str(int(round(line['amount'] * 100))), + 'sum_tax': str(int(round(sum_tax * 100))), + 'sum_turnover': str(int(round(sum_turnover * 100))), + }) + # Turnover and Farmer tags are not included + data_client_info += """ + + %(only_vat)s + %(turnover)s + %(vat_amount)s + """ % amount_data - data_decl ='\n' - data_file += data_decl + data_comp + str(data_period) + data_clientinfo + '\n\n' + data_begin = """ + +""" % amount_data + + data_end = """ + + %(comments)s + + +""" % annual_listing_data + + data_file += data_begin + data_comp + data_client_info + data_end msg = 'Save the File with '".xml"' extension.' file_save = base64.encodestring(data_file.encode('utf8')) self.write(cursor, user, ids, {'file_save':file_save, 'msg':msg, 'name':'vat_list.xml'}, context=context) return True - - def print_vatlist(self, cursor, user, ids, context=None): - if context is None: - context = {} - obj_vat_lclient = self.pool.get('vat.listing.clients') - client_datas = [] - data = self.read(cursor, user, ids)[0] - for partner in data['partner_ids']: - if isinstance(partner, list) and partner: - client_datas.append(partner[2]) - else: - client_data = obj_vat_lclient.read(cursor, user, partner, context=context) - client_datas.append(client_data) - - datas = {'ids': []} - datas['model'] = 'res.company' - datas['year'] = context['year'] - datas['limit_amount'] = context['limit_amount'] - datas['client_datas'] = client_datas - return { - 'type': 'ir.actions.report.xml', - 'report_name': 'partner.vat.listing.print', - 'datas': datas, - } + +# Not fully implemented + +# def print_vatlist(self, cursor, user, ids, context=None): +# if context is None: +# context = {} +# obj_vat_lclient = self.pool.get('vat.listing.clients') +# client_datas = [] +# data = self.read(cursor, user, ids)[0] +# for partner in data['partner_ids']: +# if isinstance(partner, list) and partner: +# client_datas.append(partner[2]) +# else: +# client_data = obj_vat_lclient.read(cursor, user, partner, context=context) +# client_datas.append(client_data) +# +# datas = {'ids': []} +# datas['model'] = 'res.company' +# datas['year'] = context['year'] +# datas['limit_amount'] = context['limit_amount'] +# datas['client_datas'] = client_datas +# return { +# 'type': 'ir.actions.report.xml', +# 'report_name': 'partner.vat.listing.print', +# 'datas': datas, +# } partner_vat_list_13() diff --git a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml index ff05e5ecefb..205de040a7f 100644 --- a/addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml +++ b/addons/l10n_be/wizard/l10n_be_partner_vat_listing.xml @@ -1,63 +1,71 @@ + + Partner VAT Listing + partner.vat_13 + form + +
+