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
=== modified file 'l10n_ve_fiscal_requirements/__openerp__.py'
--- l10n_ve_fiscal_requirements/__openerp__.py 2011-11-03 23:44:56 +0000
+++ l10n_ve_fiscal_requirements/__openerp__.py 2012-01-17 16:15:28 +0000
@@ -73,6 +73,7 @@
73 'wizard/wizard_url_seniat_view.xml',73 'wizard/wizard_url_seniat_view.xml',
74 'wizard/update_info_partner.xml',74 'wizard/update_info_partner.xml',
75 'wizard/account_invoice_debit_view.xml',75 'wizard/account_invoice_debit_view.xml',
76 'wizard/search_info_partner_seniat.xml',
76 'account_invoice_view.xml',77 'account_invoice_view.xml',
77 ],78 ],
78 'demo_xml': [79 'demo_xml': [
7980
=== modified file 'l10n_ve_fiscal_requirements/i18n/es_VE.po'
--- l10n_ve_fiscal_requirements/i18n/es_VE.po 2011-11-03 23:44:56 +0000
+++ l10n_ve_fiscal_requirements/i18n/es_VE.po 2012-01-17 16:15:28 +0000
@@ -41,6 +41,17 @@
41msgstr "Declarar papel dañado"41msgstr "Declarar papel dañado"
4242
43#. module: l10n_ve_fiscal_requirements43#. module: l10n_ve_fiscal_requirements
44#: model:ir.ui.menu,name:l10n_ve_fiscal_requirements.wizard_vat_search_action_menu
45msgid "Search RIF"
46msgstr "Consultar RIF"
47
48#. module: l10n_ve_fiscal_requirements
49#: model:ir.ui.menu,name:l10n_ve_fiscal_requirements.wizard_vat_search_action_pay_menu
50msgid "Search RIF"
51msgstr "Consultar RIF"
52
53
54#. module: l10n_ve_fiscal_requirements
44#: model:ir.module.module,description:l10n_ve_fiscal_requirements.module_meta_information55#: model:ir.module.module,description:l10n_ve_fiscal_requirements.module_meta_information
45msgid "Venezuelan Tax Laws Requirements:\n"56msgid "Venezuelan Tax Laws Requirements:\n"
46" - Invoice Control Number.\n"57" - Invoice Control Number.\n"
4758
=== modified file 'l10n_ve_fiscal_requirements/wizard/__init__.py'
--- l10n_ve_fiscal_requirements/wizard/__init__.py 2011-11-03 20:04:51 +0000
+++ l10n_ve_fiscal_requirements/wizard/__init__.py 2012-01-17 16:15:28 +0000
@@ -29,3 +29,4 @@
29import update_info_partner29import update_info_partner
30import account_invoice_refund30import account_invoice_refund
31import account_invoice_debit31import account_invoice_debit
32import search_info_partner_seniat
3233
=== added file 'l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py'
--- l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py 1970-01-01 00:00:00 +0000
+++ l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py 2012-01-17 16:15:28 +0000
@@ -0,0 +1,148 @@
1#!/usr/bin/python
2# -*- encoding: utf-8 -*-
3##############################################################################
4#
5# OpenERP, Open Source Management Solution
6# Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
7# author.name@company.com
8#
9# This program is free software: you can redistribute it and/or modify
10# it under the terms of the GNU Affero General Public License as published by
11# the Free Software Foundation, either version 3 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17# GNU Affero General Public License for more details.
18#
19# You should have received a copy of the GNU Affero General Public License
20# along with this program. If not, see <http://www.gnu.org/licenses/>.
21#
22##############################################################################
23import wizard
24import pooler
25from osv import osv, fields
26from tools.translate import _
27import urllib
28from xml.dom.minidom import parseString
29import netsvc
30
31class search_info_partner_seniat(osv.osv_memory):
32
33 _name = "search.info.partner.seniat"
34 _columns = {
35 'name':fields.char('Numero de RIF', size=64, help='El RIF debe poseer el formato J1234567890',required=True),
36 'vat_name':fields.char('Empresa / Persona', size=256, help='Nombre de la Empresa'),
37 'vat_agent':fields.boolean('Agente de Retencion', help='Es Agente de Retencion'),
38 'percent':fields.float('Porcentaje de Retencion', help='Porcentaje de Retencion Aplicable'),
39 'vat_apply':fields.boolean('Contribuyente Formal', help='Es Contribuyente'),
40 }
41
42 logger = netsvc.Logger()
43
44 def _load_url(self,retries,url):
45 str_error= '404 Not Found'
46 while retries > 0:
47 try:
48 s = urllib.urlopen(url)
49 r = s.read()
50 ok = not('404 Not Found' in r)
51 if ok:
52 self.logger.notifyChannel("info", netsvc.LOG_INFO,
53 "Url Loaded correctly %s" % url)
54 return r
55 except:
56 self.logger.notifyChannel("warning", netsvc.LOG_WARNING,
57 "Url could not be loaded %s" % str_error)
58 pass
59 retries -= 1
60 return str_error
61
62 def _print_error(self, error, msg):
63 raise osv.except_osv(error,msg)
64
65 def _eval_seniat_data(self,xml_data,context={}):
66
67 if xml_data.find('450')>=0:
68 if not 'all_rif' in context:
69 self._print_error(_('Vat Error !'),_('Invalid VAT!'))
70 else:
71 return True
72
73 if xml_data.find('452')>=0:
74 if not 'all_rif' in context:
75 self._print_error(_('Vat Error !'),_('Unregistered VAT!'))
76 else:
77 return True
78
79 if xml_data.find("404")>=0:
80 self._print_error(_('No Connection !'),_("Could not connect! Check the URL "))
81 return True
82
83 def _parse_dom(self,dom,rif,url_seniat):
84 name = dom.childNodes[0].childNodes[0].firstChild.data
85 vat_agent = dom.childNodes[0].childNodes[1].firstChild.data.upper()=='SI' and True or False
86 vat_apply = dom.childNodes[0].childNodes[2].firstChild.data.upper()=='SI' and True or False
87 self.logger.notifyChannel("info", netsvc.LOG_INFO,
88 "RIF: %s Found" % rif)
89 if name.count('(') > 0:
90 name = name[:name.index('(')].rstrip()
91 return {'vat_name': name,'vat_apply': vat_apply, 'vat_agent':vat_agent}
92
93 def _buscar_porcentaje(self,rif,url):
94 context={}
95 html_data = self._load_url(3,url %rif)
96 html_data = unicode(html_data, 'ISO-8859-1').encode('utf-8')
97 self._eval_seniat_data(html_data,context)
98 search_str='La condición de este contribuyente requiere la retención del '
99 pos = html_data.find(search_str)
100 if pos > 0:
101 pos += len(search_str)
102 pct = html_data[pos:pos+4].replace('%','').replace(' ','')
103 return float(pct)
104 else:
105 return 0.0
106
107 def _dom_giver(self, url1, url2, context, vat):
108 xml_data = self._load_url(3,url1 % vat)
109 if not self._eval_seniat_data(xml_data,context):
110 dom = parseString(xml_data)
111 return self._parse_dom(dom, vat, url2)
112 else:
113 return False
114
115 def search_partner_seniat(self, cr, uid, vat, context=None):
116 pool = self.pool.get('seniat.url')
117 var_vat = self.read(cr,uid,vat,['name'])
118 context.update({'vat':var_vat[0]['name']})
119 if not context['vat']:
120 self._print_error(_('Vat Error !'),_('The field vat is empty'))
121 else:
122 url_obj = pool.browse(cr, uid, pool.search(cr, uid, []))[0]
123 url1 = url_obj.name + '%s'
124 url2 = url_obj.url_seniat + '%s'
125 res = self._dom_giver(url1, url2, context, context['vat'])
126 if res:
127 percent = self._buscar_porcentaje(context['vat'],url2)
128 res.update({'percent':percent, 'name':var_vat[0]['name']})
129 context.update(res)
130 self.write(cr,uid,vat,res)
131 else:
132 return False
133 res_id = self.pool.get('ir.model.data').search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_vat_return')])
134 resource_id = self.pool.get('ir.model.data').read(cr, uid, res_id, fields=['res_id'])[0]['res_id']
135 return {
136 'view_type': 'form',
137 'view_mode': 'form',
138 'res_model': 'search.info.partner.seniat',
139 'views': [(resource_id,'form')], #Comentar en caso de que no funcione
140 'type': 'ir.actions.act_window',
141 'nodestroy': True,
142 'target': 'new',
143 'context': context,
144 #~ 'ref': 'search_info_partner_seniat.view_vat_return', Descomentar en Caso de que no funcione
145 'res_id': vat,
146 }
147
148search_info_partner_seniat()
0149
=== added file 'l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml'
--- l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml 1970-01-01 00:00:00 +0000
+++ l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml 2012-01-17 16:15:28 +0000
@@ -0,0 +1,62 @@
1<?xml version="1.0"?>
2<openerp>
3 <data>
4 <record model="ir.ui.view" id="view_vat_search">
5 <field name="name">search.info.partner.seniat.form</field>
6 <field name="model">search.info.partner.seniat</field>
7 <field name="type">form</field>
8 <field name="arch" type="xml">
9 <form string="Asistente de Busqueda del RIF">
10 <field name="name" />
11 <button name="search_partner_seniat" string="Buscar RIF" type="object" icon="terp-check" />
12 </form>
13 </field>
14 </record>
15
16 <record model="ir.ui.view" id="view_vat_return">
17 <field name="name">search.info.partner.seniat.form.return</field>
18 <field name="model">search.info.partner.seniat</field>
19 <field name="type">form</field>
20 <field name="arch" type="xml">
21 <form string="Asistente de Busqueda del RIF">
22 <group colspan="4">
23 <field name="name" />
24 <button name="search_partner_seniat" string="Buscar RIF" type="object" icon="terp-check" />
25 </group>
26 <separator string="Datos del RIF Consultado" />
27 <field name="vat_name" />
28 <field name="vat_agent" />
29 <field name="percent" />
30 <field name="vat_apply" />
31 </form>
32 </field>
33 </record>
34
35 <record id="wizard_vat_return_action" model="ir.actions.act_window">
36 <field name="name">Wizard Search VAT</field>
37 <field name="res_model">search.info.partner.seniat</field>
38 <field name="src_model">search.info.partner.seniat</field>
39 <field name="view_type">form</field>
40 <field name="view_mode">form</field>
41 <field name="view_id" ref="view_vat_return"/>
42 <field name="target">new</field>
43 </record>
44
45 <record id="wizard_vat_search_action" model="ir.actions.act_window">
46 <field name="name">Wizard Search VAT</field>
47 <field name="res_model">search.info.partner.seniat</field>
48 <field name="view_type">form</field>
49 <field name="view_mode">form</field>
50 <field name="view_id" ref="view_vat_search"/>
51 <field name="target">new</field>
52 </record>
53
54 <menuitem name="Search RIF" id="wizard_vat_search_action_menu"
55 parent="account.menu_finance_receivables" action="wizard_vat_search_action"
56 sequence="400"/>
57
58 <menuitem name="Search RIF" id="wizard_vat_search_action_pay_menu"
59 parent="account.menu_finance_payables" action="wizard_vat_search_action"
60 sequence="400"/>
61 </data>
62</openerp>