Merge lp:~inddiana/openerp-venezuela-localization/jose_consultar_rif_openerp into lp:~openerp-venezuela/openerp-venezuela-localization/6.0-trunk

Proposed by Jose Moreno
Status: Merged
Merged at revision: 540
Proposed branch: lp:~inddiana/openerp-venezuela-localization/jose_consultar_rif_openerp
Merge into: lp:~openerp-venezuela/openerp-venezuela-localization/6.0-trunk
Diff against target: 262 lines (+223/-0)
5 files modified
l10n_ve_fiscal_requirements/__openerp__.py (+1/-0)
l10n_ve_fiscal_requirements/i18n/es_VE.po (+11/-0)
l10n_ve_fiscal_requirements/wizard/__init__.py (+1/-0)
l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py (+148/-0)
l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml (+62/-0)
To merge this branch: bzr merge lp:~inddiana/openerp-venezuela-localization/jose_consultar_rif_openerp
Reviewer Review Type Date Requested Status
Jose Moreno (community) Approve
Aristóbulo Meneses Pending
Nhomar - Vauxoo Pending
Review via email: mp+88883@code.launchpad.net

This proposal supersedes a proposal from 2012-01-16.

Description of the change

Se creo un wizard para la consulta del RIF desde los menú de contabilidad, Clientes y Proveedores, se agregaron los siguientes archivos:

-l10n_ve_fiscal_requeriments/wizard/search_info_partner_seniat.py
-l10n_ve_fiscal_requeriments/wizard/search_info_partner_seniat.xml

Se modificaron:

-l10n_ve_fiscal_requeriments/wizard/__init__.py
-l10n_ve_fiscal_requeriments/__openerp__.py

To post a comment you must log in.
Revision history for this message
Jose Moreno (jmoreno-8) : Posted in a previous version of this proposal
review: Approve
Revision history for this message
Jose Moreno (jmoreno-8) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'l10n_ve_fiscal_requirements/__openerp__.py'
2--- l10n_ve_fiscal_requirements/__openerp__.py 2011-11-03 23:44:56 +0000
3+++ l10n_ve_fiscal_requirements/__openerp__.py 2012-01-17 16:15:28 +0000
4@@ -73,6 +73,7 @@
5 'wizard/wizard_url_seniat_view.xml',
6 'wizard/update_info_partner.xml',
7 'wizard/account_invoice_debit_view.xml',
8+ 'wizard/search_info_partner_seniat.xml',
9 'account_invoice_view.xml',
10 ],
11 'demo_xml': [
12
13=== modified file 'l10n_ve_fiscal_requirements/i18n/es_VE.po'
14--- l10n_ve_fiscal_requirements/i18n/es_VE.po 2011-11-03 23:44:56 +0000
15+++ l10n_ve_fiscal_requirements/i18n/es_VE.po 2012-01-17 16:15:28 +0000
16@@ -41,6 +41,17 @@
17 msgstr "Declarar papel dañado"
18
19 #. module: l10n_ve_fiscal_requirements
20+#: model:ir.ui.menu,name:l10n_ve_fiscal_requirements.wizard_vat_search_action_menu
21+msgid "Search RIF"
22+msgstr "Consultar RIF"
23+
24+#. module: l10n_ve_fiscal_requirements
25+#: model:ir.ui.menu,name:l10n_ve_fiscal_requirements.wizard_vat_search_action_pay_menu
26+msgid "Search RIF"
27+msgstr "Consultar RIF"
28+
29+
30+#. module: l10n_ve_fiscal_requirements
31 #: model:ir.module.module,description:l10n_ve_fiscal_requirements.module_meta_information
32 msgid "Venezuelan Tax Laws Requirements:\n"
33 " - Invoice Control Number.\n"
34
35=== modified file 'l10n_ve_fiscal_requirements/wizard/__init__.py'
36--- l10n_ve_fiscal_requirements/wizard/__init__.py 2011-11-03 20:04:51 +0000
37+++ l10n_ve_fiscal_requirements/wizard/__init__.py 2012-01-17 16:15:28 +0000
38@@ -29,3 +29,4 @@
39 import update_info_partner
40 import account_invoice_refund
41 import account_invoice_debit
42+import search_info_partner_seniat
43
44=== added file 'l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py'
45--- l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py 1970-01-01 00:00:00 +0000
46+++ l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py 2012-01-17 16:15:28 +0000
47@@ -0,0 +1,148 @@
48+#!/usr/bin/python
49+# -*- encoding: utf-8 -*-
50+##############################################################################
51+#
52+# OpenERP, Open Source Management Solution
53+# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
54+# author.name@company.com
55+#
56+# This program is free software: you can redistribute it and/or modify
57+# it under the terms of the GNU Affero General Public License as published by
58+# the Free Software Foundation, either version 3 of the License, or
59+# (at your option) any later version.
60+#
61+# This program is distributed in the hope that it will be useful,
62+# but WITHOUT ANY WARRANTY; without even the implied warranty of
63+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
64+# GNU Affero General Public License for more details.
65+#
66+# You should have received a copy of the GNU Affero General Public License
67+# along with this program. If not, see <http://www.gnu.org/licenses/>.
68+#
69+##############################################################################
70+import wizard
71+import pooler
72+from osv import osv, fields
73+from tools.translate import _
74+import urllib
75+from xml.dom.minidom import parseString
76+import netsvc
77+
78+class search_info_partner_seniat(osv.osv_memory):
79+
80+ _name = "search.info.partner.seniat"
81+ _columns = {
82+ 'name':fields.char('Numero de RIF', size=64, help='El RIF debe poseer el formato J1234567890',required=True),
83+ 'vat_name':fields.char('Empresa / Persona', size=256, help='Nombre de la Empresa'),
84+ 'vat_agent':fields.boolean('Agente de Retencion', help='Es Agente de Retencion'),
85+ 'percent':fields.float('Porcentaje de Retencion', help='Porcentaje de Retencion Aplicable'),
86+ 'vat_apply':fields.boolean('Contribuyente Formal', help='Es Contribuyente'),
87+ }
88+
89+ logger = netsvc.Logger()
90+
91+ def _load_url(self,retries,url):
92+ str_error= '404 Not Found'
93+ while retries > 0:
94+ try:
95+ s = urllib.urlopen(url)
96+ r = s.read()
97+ ok = not('404 Not Found' in r)
98+ if ok:
99+ self.logger.notifyChannel("info", netsvc.LOG_INFO,
100+ "Url Loaded correctly %s" % url)
101+ return r
102+ except:
103+ self.logger.notifyChannel("warning", netsvc.LOG_WARNING,
104+ "Url could not be loaded %s" % str_error)
105+ pass
106+ retries -= 1
107+ return str_error
108+
109+ def _print_error(self, error, msg):
110+ raise osv.except_osv(error,msg)
111+
112+ def _eval_seniat_data(self,xml_data,context={}):
113+
114+ if xml_data.find('450')>=0:
115+ if not 'all_rif' in context:
116+ self._print_error(_('Vat Error !'),_('Invalid VAT!'))
117+ else:
118+ return True
119+
120+ if xml_data.find('452')>=0:
121+ if not 'all_rif' in context:
122+ self._print_error(_('Vat Error !'),_('Unregistered VAT!'))
123+ else:
124+ return True
125+
126+ if xml_data.find("404")>=0:
127+ self._print_error(_('No Connection !'),_("Could not connect! Check the URL "))
128+ return True
129+
130+ def _parse_dom(self,dom,rif,url_seniat):
131+ name = dom.childNodes[0].childNodes[0].firstChild.data
132+ vat_agent = dom.childNodes[0].childNodes[1].firstChild.data.upper()=='SI' and True or False
133+ vat_apply = dom.childNodes[0].childNodes[2].firstChild.data.upper()=='SI' and True or False
134+ self.logger.notifyChannel("info", netsvc.LOG_INFO,
135+ "RIF: %s Found" % rif)
136+ if name.count('(') > 0:
137+ name = name[:name.index('(')].rstrip()
138+ return {'vat_name': name,'vat_apply': vat_apply, 'vat_agent':vat_agent}
139+
140+ def _buscar_porcentaje(self,rif,url):
141+ context={}
142+ html_data = self._load_url(3,url %rif)
143+ html_data = unicode(html_data, 'ISO-8859-1').encode('utf-8')
144+ self._eval_seniat_data(html_data,context)
145+ search_str='La condición de este contribuyente requiere la retención del '
146+ pos = html_data.find(search_str)
147+ if pos > 0:
148+ pos += len(search_str)
149+ pct = html_data[pos:pos+4].replace('%','').replace(' ','')
150+ return float(pct)
151+ else:
152+ return 0.0
153+
154+ def _dom_giver(self, url1, url2, context, vat):
155+ xml_data = self._load_url(3,url1 % vat)
156+ if not self._eval_seniat_data(xml_data,context):
157+ dom = parseString(xml_data)
158+ return self._parse_dom(dom, vat, url2)
159+ else:
160+ return False
161+
162+ def search_partner_seniat(self, cr, uid, vat, context=None):
163+ pool = self.pool.get('seniat.url')
164+ var_vat = self.read(cr,uid,vat,['name'])
165+ context.update({'vat':var_vat[0]['name']})
166+ if not context['vat']:
167+ self._print_error(_('Vat Error !'),_('The field vat is empty'))
168+ else:
169+ url_obj = pool.browse(cr, uid, pool.search(cr, uid, []))[0]
170+ url1 = url_obj.name + '%s'
171+ url2 = url_obj.url_seniat + '%s'
172+ res = self._dom_giver(url1, url2, context, context['vat'])
173+ if res:
174+ percent = self._buscar_porcentaje(context['vat'],url2)
175+ res.update({'percent':percent, 'name':var_vat[0]['name']})
176+ context.update(res)
177+ self.write(cr,uid,vat,res)
178+ else:
179+ return False
180+ res_id = self.pool.get('ir.model.data').search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_vat_return')])
181+ resource_id = self.pool.get('ir.model.data').read(cr, uid, res_id, fields=['res_id'])[0]['res_id']
182+ return {
183+ 'view_type': 'form',
184+ 'view_mode': 'form',
185+ 'res_model': 'search.info.partner.seniat',
186+ 'views': [(resource_id,'form')], #Comentar en caso de que no funcione
187+ 'type': 'ir.actions.act_window',
188+ 'nodestroy': True,
189+ 'target': 'new',
190+ 'context': context,
191+ #~ 'ref': 'search_info_partner_seniat.view_vat_return', Descomentar en Caso de que no funcione
192+ 'res_id': vat,
193+ }
194+
195+search_info_partner_seniat()
196
197=== added file 'l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml'
198--- l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml 1970-01-01 00:00:00 +0000
199+++ l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml 2012-01-17 16:15:28 +0000
200@@ -0,0 +1,62 @@
201+<?xml version="1.0"?>
202+<openerp>
203+ <data>
204+ <record model="ir.ui.view" id="view_vat_search">
205+ <field name="name">search.info.partner.seniat.form</field>
206+ <field name="model">search.info.partner.seniat</field>
207+ <field name="type">form</field>
208+ <field name="arch" type="xml">
209+ <form string="Asistente de Busqueda del RIF">
210+ <field name="name" />
211+ <button name="search_partner_seniat" string="Buscar RIF" type="object" icon="terp-check" />
212+ </form>
213+ </field>
214+ </record>
215+
216+ <record model="ir.ui.view" id="view_vat_return">
217+ <field name="name">search.info.partner.seniat.form.return</field>
218+ <field name="model">search.info.partner.seniat</field>
219+ <field name="type">form</field>
220+ <field name="arch" type="xml">
221+ <form string="Asistente de Busqueda del RIF">
222+ <group colspan="4">
223+ <field name="name" />
224+ <button name="search_partner_seniat" string="Buscar RIF" type="object" icon="terp-check" />
225+ </group>
226+ <separator string="Datos del RIF Consultado" />
227+ <field name="vat_name" />
228+ <field name="vat_agent" />
229+ <field name="percent" />
230+ <field name="vat_apply" />
231+ </form>
232+ </field>
233+ </record>
234+
235+ <record id="wizard_vat_return_action" model="ir.actions.act_window">
236+ <field name="name">Wizard Search VAT</field>
237+ <field name="res_model">search.info.partner.seniat</field>
238+ <field name="src_model">search.info.partner.seniat</field>
239+ <field name="view_type">form</field>
240+ <field name="view_mode">form</field>
241+ <field name="view_id" ref="view_vat_return"/>
242+ <field name="target">new</field>
243+ </record>
244+
245+ <record id="wizard_vat_search_action" model="ir.actions.act_window">
246+ <field name="name">Wizard Search VAT</field>
247+ <field name="res_model">search.info.partner.seniat</field>
248+ <field name="view_type">form</field>
249+ <field name="view_mode">form</field>
250+ <field name="view_id" ref="view_vat_search"/>
251+ <field name="target">new</field>
252+ </record>
253+
254+ <menuitem name="Search RIF" id="wizard_vat_search_action_menu"
255+ parent="account.menu_finance_receivables" action="wizard_vat_search_action"
256+ sequence="400"/>
257+
258+ <menuitem name="Search RIF" id="wizard_vat_search_action_pay_menu"
259+ parent="account.menu_finance_payables" action="wizard_vat_search_action"
260+ sequence="400"/>
261+ </data>
262+</openerp>