Merge lp:~vauxoo/openerp-venezuela-localization/miguel-fiscal-requirements-imp into lp:~openerp-venezuela/openerp-venezuela-localization/6.0-trunk

Proposed by Miguel Delgado (Vauxoo)
Status: Merged
Merged at revision: 618
Proposed branch: lp:~vauxoo/openerp-venezuela-localization/miguel-fiscal-requirements-imp
Merge into: lp:~openerp-venezuela/openerp-venezuela-localization/6.0-trunk
Diff against target: 296 lines (+38/-116)
9 files modified
l10n_ve_fiscal_requirements/installer.py (+3/-3)
l10n_ve_fiscal_requirements/installer_view.xml (+1/-1)
l10n_ve_fiscal_requirements/partner.py (+4/-66)
l10n_ve_fiscal_requirements/seniat_url.py (+2/-3)
l10n_ve_fiscal_requirements/view/partner_view.xml (+0/-1)
l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py (+4/-17)
l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml (+7/-2)
l10n_ve_withholding_islr/partner.py (+0/-4)
l10n_ve_withholding_iva/model/partner.py (+17/-19)
To merge this branch: bzr merge lp:~vauxoo/openerp-venezuela-localization/miguel-fiscal-requirements-imp
Reviewer Review Type Date Requested Status
Gabriela Quilarque Pending
Review via email: mp+93232@code.launchpad.net
To post a comment you must log in.
619. By Miguel Delgado (Vauxoo)

[FIX] placing the wizard to consult the rif of the partners in the right place for ergonomic use

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'l10n_ve_fiscal_requirements/installer.py'
--- l10n_ve_fiscal_requirements/installer.py 2012-01-19 02:07:57 +0000
+++ l10n_ve_fiscal_requirements/installer.py 2012-02-16 19:56:39 +0000
@@ -38,7 +38,7 @@
38 context = {'exec_wizard': True, 'vat': vat}38 context = {'exec_wizard': True, 'vat': vat}
39 39
40 partner_info = self.pool.get('seniat.url').update_rif(cr, uid, ids, context)40 partner_info = self.pool.get('seniat.url').update_rif(cr, uid, ids, context)
41 v = {'name': partner_info.get('name'), 'vat_apply': partner_info.get('vat_apply')}41 v = {'name': partner_info.get('name'), 'vat_subjected': partner_info.get('vat_subjected')}
42 return {'value': v}42 return {'value': v}
4343
44 def execute(self, cr, uid, ids, context=None):44 def execute(self, cr, uid, ids, context=None):
@@ -63,13 +63,13 @@
63 'street':wiz_data.add,63 'street':wiz_data.add,
64 'country_id':self.pool.get("res.country").search(cr,uid,[('code','=','VE')])[0]})64 'country_id':self.pool.get("res.country").search(cr,uid,[('code','=','VE')])[0]})
65 #Data on res.partner65 #Data on res.partner
66 data = {'name': wiz_data.name, 'vat': "VE%s" % wiz_data.vat.upper(), 'vat_apply': wiz_data.vat_apply,}66 data = {'name': wiz_data.name, 'vat': "VE%s" % wiz_data.vat.upper(), 'vat_subjected': wiz_data.vat_subjected,}
67 self.pool.get('res.partner').write(cr, uid, [partner.id], data)67 self.pool.get('res.partner').write(cr, uid, [partner.id], data)
6868
69 _columns = {69 _columns = {
70 'vat': fields.char('VAT', 16, required=True, help='Partner\'s VAT to update the other fields'),70 'vat': fields.char('VAT', 16, required=True, help='Partner\'s VAT to update the other fields'),
71 'name': fields.char('Name', 64, help="The commercial name of the company"),71 'name': fields.char('Name', 64, help="The commercial name of the company"),
72 'add':fields.char('Invoice Address',64,help='Put Here the address declared on your VAT information on SENIAT',required=True),72 'add':fields.char('Invoice Address',64,help='Put Here the address declared on your VAT information on SENIAT',required=True),
73 'vat_apply': fields.boolean("Apply VAT?"),73 'vat_subjected': fields.boolean("Apply VAT?"),
74 }74 }
75fiscal_requirements_config()75fiscal_requirements_config()
7676
=== modified file 'l10n_ve_fiscal_requirements/installer_view.xml'
--- l10n_ve_fiscal_requirements/installer_view.xml 2011-10-25 20:33:16 +0000
+++ l10n_ve_fiscal_requirements/installer_view.xml 2012-02-16 19:56:39 +0000
@@ -31,7 +31,7 @@
31 <newline/>31 <newline/>
32 <field name="name" groups="base.group_extended"/>32 <field name="name" groups="base.group_extended"/>
33 <newline/>33 <newline/>
34 <field name="vat_apply" groups="base.group_extended" />34 <field name="vat_subjected" groups="base.group_extended" />
35 <newline/>35 <newline/>
36 <field name="add" groups="base.group_extended" widget="text"/>36 <field name="add" groups="base.group_extended" widget="text"/>
37 </group>37 </group>
3838
=== modified file 'l10n_ve_fiscal_requirements/partner.py'
--- l10n_ve_fiscal_requirements/partner.py 2012-01-27 15:30:52 +0000
+++ l10n_ve_fiscal_requirements/partner.py 2012-02-16 19:56:39 +0000
@@ -63,7 +63,6 @@
63 _inherit = 'res.partner'63 _inherit = 'res.partner'
64 64
65 _columns = {65 _columns = {
66 'vat_apply': fields.boolean('Vat Apply', help="This field indicate if partner is subject to vat apply "),
67 'seniat_updated': fields.boolean('Seniat Updated', help="This field indicates if partner was updated using SENIAT button"),66 'seniat_updated': fields.boolean('Seniat Updated', help="This field indicates if partner was updated using SENIAT button"),
68 }67 }
6968
@@ -150,72 +149,11 @@
150 return False149 return False
151 return True150 return True
152 151
153# Update Partner Information 152 def update_rif(self, cr, uid, ids, context=None):
154153 if context is None:
155 def _load_url(self,retries,url):154 context = {}
156 str_error= '404 Not Found'
157 while retries > 0:
158 try:
159 s = urllib.urlopen(url)
160 r = s.read()
161 ok = not('404 Not Found' in r)
162 if ok:
163 self.logger.notifyChannel("info", netsvc.LOG_INFO,
164 "Url Loaded correctly %s" % url)
165 return r
166 except:
167 self.logger.notifyChannel("warning", netsvc.LOG_WARNING,
168 "Url could not be loaded %s" % str_error)
169 pass
170 retries -= 1
171 return str_error
172
173 def _parse_dom(self,dom,rif,url_seniat):
174 name = dom.childNodes[0].childNodes[0].firstChild.data
175 vat_apply = dom.childNodes[0].childNodes[2].firstChild.data.upper()=='SI' and True or False
176 self.logger.notifyChannel("info", netsvc.LOG_INFO,
177 "RIF: %s Found" % rif)
178 if name.count('(') > 0:
179 name = name[:name.index('(')].rstrip()
180 return {'name': name,'vat_apply': vat_apply}
181
182 def _print_error(self, error, msg):
183 raise osv.except_osv(error,msg)
184
185 def _eval_seniat_data(self,xml_data,context={}):
186
187 if xml_data.find('450')>=0:
188 if not 'all_rif' in context:
189 self._print_error(_('Vat Error !'),_('Invalid VAT!'))
190 else:
191 return True
192
193 if xml_data.find('452')>=0:
194 if not 'all_rif' in context:
195 self._print_error(_('Vat Error !'),_('Unregistered VAT!'))
196 else:
197 return True
198
199 if xml_data.find("404")>=0:
200 self._print_error(_('No Connection !'),_("Could not connect! Check the URL "))
201 return True
202
203 def _dom_giver(self, url1, url2, context, vat):
204 xml_data = self._load_url(3,url1 % vat)
205 if not self._eval_seniat_data(xml_data,context):
206 dom = parseString(xml_data)
207 return self._parse_dom(dom, vat, url2)
208 else:
209 return False
210
211 def _update_partner(self, cr, uid, id, context=None):
212 self.write(cr, uid, id, {'seniat_updated': True})
213
214 def update_rif(self, cr, uid, ids, context={}):
215 su_obj = self.pool.get('seniat.url')155 su_obj = self.pool.get('seniat.url')
216 ctx = context.copy()156 return su_obj.update_rif(cr, uid, ids, context=context)
217 su_obj.connect_seniat(cr, uid, ids, context=ctx)
218 return True
219157
220res_partner()158res_partner()
221# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:159# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
222160
=== modified file 'l10n_ve_fiscal_requirements/seniat_url.py'
--- l10n_ve_fiscal_requirements/seniat_url.py 2012-02-14 14:33:22 +0000
+++ l10n_ve_fiscal_requirements/seniat_url.py 2012-02-16 19:56:39 +0000
@@ -78,13 +78,12 @@
78 78
79 def _parse_dom(self,dom,rif,url_seniat):79 def _parse_dom(self,dom,rif,url_seniat):
80 name = dom.childNodes[0].childNodes[0].firstChild.data 80 name = dom.childNodes[0].childNodes[0].firstChild.data
81 wh_iva_agent = dom.childNodes[0].childNodes[1].firstChild.data.upper()=='SI' and True or False81 vat_subjected = dom.childNodes[0].childNodes[2].firstChild.data.upper()=='SI' and True or False
82 vat_apply = dom.childNodes[0].childNodes[2].firstChild.data.upper()=='SI' and True or False
83 self.logger.notifyChannel("info", netsvc.LOG_INFO,82 self.logger.notifyChannel("info", netsvc.LOG_INFO,
84 "RIF: %s Found" % rif)83 "RIF: %s Found" % rif)
85 if name.count('(') > 0:84 if name.count('(') > 0:
86 name = name[:name.index('(')].rstrip()85 name = name[:name.index('(')].rstrip()
87 res= {'name': name,'vat_apply': vat_apply,'wh_iva_agent': wh_iva_agent,'wh_iva_rate':self._buscar_porcentaje(rif,url_seniat)} 86 res= {'name': name,'vat_subjected': vat_subjected,}
88 return res87 return res
8988
90 def _print_error(self, error, msg):89 def _print_error(self, error, msg):
9190
=== modified file 'l10n_ve_fiscal_requirements/view/partner_view.xml'
--- l10n_ve_fiscal_requirements/view/partner_view.xml 2012-01-19 01:37:26 +0000
+++ l10n_ve_fiscal_requirements/view/partner_view.xml 2012-02-16 19:56:39 +0000
@@ -8,7 +8,6 @@
8 <field name="inherit_id" ref="base_vat.view_partner_form"/>8 <field name="inherit_id" ref="base_vat.view_partner_form"/>
9 <field name="arch" type="xml">9 <field name="arch" type="xml">
10 <field name="vat" position="replace">10 <field name="vat" position="replace">
11 <field name="vat_apply"/>
12 </field>11 </field>
13 </field>12 </field>
14 </record>13 </record>
1514
=== modified file 'l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py'
--- l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py 2012-02-13 21:02:05 +0000
+++ l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py 2012-02-16 19:56:39 +0000
@@ -31,24 +31,11 @@
31 _columns = {31 _columns = {
32 'vat':fields.char('Numero de RIF', size=64, help='El RIF debe poseer el formato J1234567890',required=True),32 'vat':fields.char('Numero de RIF', size=64, help='El RIF debe poseer el formato J1234567890',required=True),
33 'name':fields.char('Empresa / Persona', size=256, help='Nombre de la Empresa'),33 'name':fields.char('Empresa / Persona', size=256, help='Nombre de la Empresa'),
34# 'vat_subjected':fields.boolean('Agente de Retencion', help='Es Agente de Retencion'),34 'wh_iva_agent':fields.boolean('Agente de Retencion', help='Es Agente de Retencion'),
35 'wh_iva_rate':fields.float('Porcentaje de Retencion', help='Porcentaje de Retencion Aplicable'),35 'wh_iva_rate':fields.float('Porcentaje de Retencion', help='Porcentaje de Retencion Aplicable'),
36 'vat_apply':fields.boolean('Contribuyente Formal', help='Es Contribuyente'),36 'vat_subjected':fields.boolean('Contribuyente Formal', help='Es Contribuyente'),
37 }37 }
38 38
39 def _buscar_porcentaje(self,rif,url):
40 context={}
41 html_data = self.pool.get('seniat.url')._load_url(3,url %rif)
42 html_data = unicode(html_data, 'ISO-8859-1').encode('utf-8')
43 search_str='La condición de este contribuyente requiere la retención del '
44 pos = html_data.find(search_str)
45 if pos > 0:
46 pos += len(search_str)
47 pct = html_data[pos:pos+4].replace('%','').replace(' ','')
48 return float(pct)
49 else:
50 return 0.0
51
52 def search_partner_seniat(self, cr, uid, vat, context=None):39 def search_partner_seniat(self, cr, uid, vat, context=None):
53 if context is None:40 if context is None:
54 context={}41 context={}
@@ -61,7 +48,7 @@
61 if var_vat:48 if var_vat:
62 aux = var_vat[0]['vat']49 aux = var_vat[0]['vat']
63 res = su_obj._dom_giver(url1, url2, context, aux)50 res = su_obj._dom_giver(url1, url2, context, aux)
64 res.update({'wh_iva_rate':self._buscar_porcentaje(aux,url2)})51 res.update({'wh_iva_rate':su_obj._buscar_porcentaje(aux,url2)})
65 self.write(cr,uid,vat,res)52 self.write(cr,uid,vat,res)
66 53
67 return False54 return False
6855
=== modified file 'l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml'
--- l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml 2012-02-13 21:02:05 +0000
+++ l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml 2012-02-16 19:56:39 +0000
@@ -16,7 +16,7 @@
16 <field name="name" readonly='True'/>16 <field name="name" readonly='True'/>
17 <field name="wh_iva_agent" readonly='True'/>17 <field name="wh_iva_agent" readonly='True'/>
18 <field name="wh_iva_rate" readonly='True'/>18 <field name="wh_iva_rate" readonly='True'/>
19 <field name="vat_apply" readonly='True'/>19 <field name="vat_subjected" readonly='True'/>
20 </group>20 </group>
21 </form>21 </form>
22 </field>22 </field>
@@ -31,8 +31,13 @@
31 <field name="target">new</field>31 <field name="target">new</field>
32 </record>32 </record>
33 33
34
34 <menuitem name="Search RIF" id="wizard_vat_search_action_menu" 35 <menuitem name="Search RIF" id="wizard_vat_search_action_menu"
35 parent="l10n_ve_fiscal_requirements.menu_finance_partner_fiscal_information" action="wizard_vat_search_action"36 parent="account.menu_finance_receivables" action="wizard_vat_search_action"
37 sequence="400"/>
38
39 <menuitem name="Search RIF" id="wizard_vat_search_action_pay_menu"
40 parent="account.menu_finance_payables" action="wizard_vat_search_action"
36 sequence="400"/>41 sequence="400"/>
3742
38 </data>43 </data>
3944
=== modified file 'l10n_ve_withholding_islr/partner.py'
--- l10n_ve_withholding_islr/partner.py 2011-11-28 15:07:46 +0000
+++ l10n_ve_withholding_islr/partner.py 2012-02-16 19:56:39 +0000
@@ -40,10 +40,6 @@
40 'islr_withholding_agent': fields.boolean('Withholding Income Agent?',help="Check if the partner is an agent for withholding income"),40 'islr_withholding_agent': fields.boolean('Withholding Income Agent?',help="Check if the partner is an agent for withholding income"),
41 }41 }
42 42
43 _defaults = {
44 'islr_withholding_agent': 1,
45 }
46
47res_partner()43res_partner()
4844
4945
5046
=== modified file 'l10n_ve_withholding_iva/model/partner.py'
--- l10n_ve_withholding_iva/model/partner.py 2012-01-25 16:56:12 +0000
+++ l10n_ve_withholding_iva/model/partner.py 2012-02-16 19:56:39 +0000
@@ -39,28 +39,26 @@
39 _defaults = {39 _defaults = {
40 'wh_iva_rate': lambda *a: 0,40 'wh_iva_rate': lambda *a: 0,
41 }41 }
4242
4343 def update_rif(self, cr, uid, ids, context=None):
44 def _buscar_porcentaje(self,rif,url):44 if context is None:
45 context={}45 context = {}
46 html_data = self._load_url(3,url %rif)46 su_obj = self.pool.get('seniat.url')
47 html_data = unicode(html_data, 'ISO-8859-1').encode('utf-8')47 return su_obj.update_rif(cr, uid, ids, context=context)
48 self._eval_seniat_data(html_data,context)48
49 search_str='La condición de este contribuyente requiere la retención del '49res_partner()
50 pos = html_data.find(search_str)50
51 if pos > 0:51class seniat_url(osv.osv):
52 pos += len(search_str)52
53 pct = html_data[pos:pos+4].replace('%','').replace(' ','')53 _inherit = 'seniat.url'
54 return float(pct)54
55 else:
56 return 0.0
57
58 def _parse_dom(self,dom,rif,url_seniat):55 def _parse_dom(self,dom,rif,url_seniat):
56 su_obj = self.pool.get('seniat.url')
59 wh_agent = dom.childNodes[0].childNodes[1].firstChild.data.upper()=='SI' and True or False57 wh_agent = dom.childNodes[0].childNodes[1].firstChild.data.upper()=='SI' and True or False
60 wh_rate = self._buscar_porcentaje(rif,url_seniat)58 wh_rate = su_obj._buscar_porcentaje(rif,url_seniat)
61 self.logger.notifyChannel("info", netsvc.LOG_INFO,59 self.logger.notifyChannel("info", netsvc.LOG_INFO,
62 "RIF: %s Found" % rif)60 "RIF: %s Found" % rif)
63 data = {'wh_iva_agent':wh_agent,'wh_iva_rate':wh_rate}61 data = {'wh_iva_agent':wh_agent,'wh_iva_rate':wh_rate}
64 return dict(data.items() + super(res_partner,self)._parse_dom(dom,rif,url_seniat).items())62 return dict(data.items() + super(seniat_url,self)._parse_dom(dom,rif,url_seniat).items())
65 63
66res_partner()64seniat_url()