Merge lp:~vauxoo/openerp-venezuela-localization/miguel-Bug917888 into lp:~openerp-venezuela/openerp-venezuela-localization/6.0-trunk

Proposed by Miguel Delgado (Vauxoo)
Status: Superseded
Proposed branch: lp:~vauxoo/openerp-venezuela-localization/miguel-Bug917888
Merge into: lp:~openerp-venezuela/openerp-venezuela-localization/6.0-trunk
Diff against target: 474 lines (+158/-175) (has conflicts)
7 files modified
l10n_ve_fiscal_requirements/installer.py (+2/-1)
l10n_ve_fiscal_requirements/partner.py (+8/-45)
l10n_ve_fiscal_requirements/seniat_url.py (+121/-2)
l10n_ve_fiscal_requirements/view/partner_view.xml (+0/-1)
l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py (+18/-98)
l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml (+7/-27)
l10n_ve_fiscal_requirements/wizard/update_info_partner.py (+2/-1)
Text conflict in l10n_ve_fiscal_requirements/partner.py
To merge this branch: bzr merge lp:~vauxoo/openerp-venezuela-localization/miguel-Bug917888
Reviewer Review Type Date Requested Status
Gabriela Quilarque Needs Fixing
Review via email: mp+89909@code.launchpad.net

This proposal has been superseded by a proposal from 2012-01-26.

Description of the change

To post a comment you must log in.
Revision history for this message
Gabriela Quilarque (gabrielaquilarque97) wrote :

Migue debes corregir el conflicto que se presenta en las líneas 51,59 y 60.

review: Needs Fixing
544. By Miguel Delgado (Vauxoo)

[FIX] solve conflicts in merge

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'l10n_ve_fiscal_requirements/installer.py'
2--- l10n_ve_fiscal_requirements/installer.py 2012-01-05 19:15:59 +0000
3+++ l10n_ve_fiscal_requirements/installer.py 2012-01-24 14:29:45 +0000
4@@ -36,7 +36,8 @@
5
6 def onchange_update_rif(self, cr, uid, ids, vat):
7 context = {'exec_wizard': True, 'vat': vat}
8- partner_info = self.pool.get('res.partner').update_rif(cr, uid, ids, context)
9+
10+ partner_info = self.pool.get('seniat.url').update_rif(cr, uid, ids, context)
11 v = {'name': partner_info.get('name'), 'vat_apply': partner_info.get('vat_apply')}
12 return {'value': v}
13
14
15=== modified file 'l10n_ve_fiscal_requirements/partner.py'
16--- l10n_ve_fiscal_requirements/partner.py 2012-01-19 14:04:28 +0000
17+++ l10n_ve_fiscal_requirements/partner.py 2012-01-24 14:29:45 +0000
18@@ -32,9 +32,6 @@
19
20 from osv import fields, osv
21 from tools.translate import _
22-import urllib
23-from xml.dom.minidom import parseString
24-import netsvc
25
26 class res_partner_address(osv.osv):
27 _inherit='res.partner.address'
28@@ -64,8 +61,7 @@
29
30 class res_partner(osv.osv):
31 _inherit = 'res.partner'
32- logger = netsvc.Logger()
33-
34+
35 _columns = {
36 'vat_apply': fields.boolean('Vat Apply', help="This field indicate if partner is subject to vat apply "),
37 'seniat_updated': fields.boolean('Seniat Updated', help="This field indicates if partner was updated using SENIAT button"),
38@@ -111,6 +107,8 @@
39 return True
40
41 current_vat = current_partner['vat']
42+ if current_vat.strip()=='':
43+ return True
44 duplicates = partner_obj.read(cr, uid, partner_obj.search(cr, uid, [('vat', '=', current_vat)]), ['vat'])
45
46 return not current_vat in [p['vat'] for p in duplicates if p['id'] != current_partner['id']]
47@@ -149,6 +147,7 @@
48 return False
49 return True
50
51+<<<<<<< TREE
52 # Update Partner Information
53
54 def _load_url(self,retries,url):
55@@ -210,48 +209,12 @@
56 def _update_partner(self, cr, uid, id, context=None):
57 self.write(cr, uid, id, {'seniat_updated': True})
58
59+=======
60+>>>>>>> MERGE-SOURCE
61 def update_rif(self, cr, uid, ids, context={}):
62- pool = self.pool.get('seniat.url')
63- url_obj = pool.browse(cr, uid, pool.search(cr, uid, []))[0]
64- url1 = url_obj.name + '%s'
65- url2 = url_obj.url_seniat + '%s'
66- if context.get('exec_wizard'):
67- res = self._dom_giver(url1, url2, context, context['vat'])
68- if res:
69- self._update_partner(cr, uid, ids, context)
70- return res
71- else:
72- return False
73- for partner in self.browse(cr,uid,ids):
74- if partner.vat:
75- vat_country, vat_number = self._split_vat(partner.vat)
76- if vat_country.upper() == 'VE':
77- xml_data = self._load_url(3,url1 %partner.vat[2:])
78- if not self._eval_seniat_data(xml_data,context):
79- dom = parseString(xml_data)
80- res = self.write(cr,uid,partner.id,self._parse_dom(dom,partner.vat[2:],url2))
81- if res:
82- self._update_partner(cr, uid, partner.id, context)
83- else:
84- return False
85- else:
86- if partner.address:
87- invoices_addr_country = [i.country_id and i.country_id.code or False for i in partner.address if i.type == 'invoice']
88- if invoices_addr_country:
89- country = [j for j in invoices_addr_country if j]
90- if country and 'VE' in country and not context.get('all_rif',False):
91- self._print_error(_('Vat Error !'),_('The field vat is empty'))
92- else:
93-
94- pass
95-
96- return True
97-
98- def connect_seniat(self, cr, uid, ids, context={}, all_rif=False):
99+ su_obj = self.pool.get('seniat.url')
100 ctx = context.copy()
101- if all_rif:
102- ctx.update({'all_rif': True})
103- self.update_rif(cr, uid, ids, context=ctx)
104+ su_obj.connect_seniat(cr, uid, ids, context=ctx)
105 return True
106
107 res_partner()
108
109=== modified file 'l10n_ve_fiscal_requirements/seniat_url.py'
110--- l10n_ve_fiscal_requirements/seniat_url.py 2011-10-25 20:33:16 +0000
111+++ l10n_ve_fiscal_requirements/seniat_url.py 2012-01-24 14:29:45 +0000
112@@ -27,16 +27,135 @@
113 import tools
114 from tools.translate import _
115 from tools import config
116+import urllib
117+from xml.dom.minidom import parseString
118+import netsvc
119
120 class seniat_url(osv.osv):
121 """
122 OpenERP Model : seniat_url
123 """
124-
125+ logger = netsvc.Logger()
126 _name = 'seniat.url'
127 _description = __doc__
128 _columns = {
129- 'name':fields.char('URL Seniat for Partner Information',size=64, required=True, readonly=False,help='In this field enter the URL from Seniat for search the fiscal information from partner'),
130+ 'name':fields.char('URL Seniat for Partner Information',size=64, required=True, readonly=False,help='In this field enter the URL from Seniat for search the fiscal information from partner'),
131 'url_seniat':fields.char('URL Seniat for Retention Rate',size=64, required=True, readonly=False,help='In this field enter the URL from Seniat for search the retention rate from partner'),
132 }
133+
134+ # Update Partner Information
135+
136+ def _load_url(self,retries,url):
137+ str_error= '404 Not Found'
138+ while retries > 0:
139+ try:
140+ s = urllib.urlopen(url)
141+ r = s.read()
142+ ok = not('404 Not Found' in r)
143+ if ok:
144+ self.logger.notifyChannel("info", netsvc.LOG_INFO,
145+ "Url Loaded correctly %s" % url)
146+ return r
147+ except:
148+ self.logger.notifyChannel("warning", netsvc.LOG_WARNING,
149+ "Url could not be loaded %s" % str_error)
150+ pass
151+ retries -= 1
152+ return str_error
153+
154+ def _parse_dom(self,dom,rif,url_seniat):
155+ name = dom.childNodes[0].childNodes[0].firstChild.data
156+ vat_subjected = dom.childNodes[0].childNodes[1].firstChild.data.upper()=='SI' and True or False
157+ vat_apply = dom.childNodes[0].childNodes[2].firstChild.data.upper()=='SI' and True or False
158+ self.logger.notifyChannel("info", netsvc.LOG_INFO,
159+ "RIF: %s Found" % rif)
160+ if name.count('(') > 0:
161+ name = name[:name.index('(')].rstrip()
162+ res= {'name': name,'vat_apply': vat_apply,'vat_subjected': vat_subjected }
163+ return res
164+
165+ def _print_error(self, error, msg):
166+ raise osv.except_osv(error,msg)
167+
168+ def _eval_seniat_data(self,xml_data,context={}):
169+ if context is None:
170+ context={}
171+ if not context.get('all_rif'):
172+ if xml_data.find('450')>=0:
173+ if not 'all_rif' in context:
174+ self._print_error(_('Vat Error !'),_('Invalid VAT!'))
175+ else:
176+ return True
177+
178+ if xml_data.find('452')>=0:
179+ if not 'all_rif' in context:
180+ self._print_error(_('Vat Error !'),_('Unregistered VAT!'))
181+ else:
182+ return True
183+
184+ if xml_data.find("404")>=0:
185+ self._print_error(_('No Connection !'),_("Could not connect! Check the URL "))
186+ return True
187+ else:
188+ return True
189+
190+ def _dom_giver(self, url1, url2, context, vat):
191+ xml_data = self._load_url(3,url1 % vat)
192+ if not self._eval_seniat_data(xml_data,context):
193+ dom = parseString(xml_data)
194+ return self._parse_dom(dom, vat, url2)
195+ else:
196+ return False
197+
198+ def _update_partner(self, cr, uid, id, context=None):
199+ rp_obj = self.pool.get('res.partner')
200+ rp_obj.write(cr, uid, id, {'seniat_updated': True})
201+
202+ def update_rif(self, cr, uid, ids, context={}):
203+ aux=0
204+ rp_obj = self.pool.get('res.partner')
205+ url_obj = self.browse(cr, uid, self.search(cr, uid, []))[0]
206+ url1 = url_obj.name + '%s'
207+ url2 = url_obj.url_seniat + '%s'
208+ if context.get('exec_wizard'):
209+ res = self._dom_giver(url1, url2, context, context['vat'])
210+ if res:
211+ self._update_partner(cr, uid, ids, context)
212+ return res
213+ else:
214+ return False
215+ for partner in rp_obj.browse(cr,uid,ids):
216+ aux+=1
217+ if partner.vat:
218+ vat_country, vat_number = rp_obj._split_vat(partner.vat)
219+ if vat_country.upper() == 'VE':
220+ print 'partner.vat[2:]',partner.vat[2:]
221+ if len(partner.vat[2:])==10:
222+ xml_data = self._load_url(3,url1 %partner.vat[2:])
223+ if not self._eval_seniat_data(xml_data,context):
224+ dom = parseString(xml_data)
225+ res = rp_obj.write(cr,uid,partner.id,self._parse_dom(dom,partner.vat[2:],url2))
226+ if res:
227+ self._update_partner(cr, uid, partner.id, context)
228+ else:
229+ if not context.get('all_rif'):
230+ return False
231+ else:
232+ return False
233+ else:
234+ if partner.address:
235+ invoices_addr_country = [i.country_id and i.country_id.code or False for i in partner.address if i.type == 'invoice']
236+ if invoices_addr_country:
237+ country = [j for j in invoices_addr_country if j]
238+ if country and 'VE' in country and not context.get('all_rif',False):
239+ self._print_error(_('Vat Error !'),_('The field vat is empty'))
240+ return True
241+
242+ def connect_seniat(self, cr, uid, ids, context={}, all_rif=False):
243+ ctx = context.copy()
244+ if all_rif:
245+ ctx.update({'all_rif': True})
246+ self.update_rif(cr, uid, ids, context=ctx)
247+ return True
248+
249 seniat_url()
250
251=== modified file 'l10n_ve_fiscal_requirements/view/partner_view.xml'
252--- l10n_ve_fiscal_requirements/view/partner_view.xml 2011-11-03 19:16:11 +0000
253+++ l10n_ve_fiscal_requirements/view/partner_view.xml 2012-01-24 14:29:45 +0000
254@@ -37,6 +37,5 @@
255 </field>
256 </field>
257 </record>
258-
259 </data>
260 </openerp>
261
262=== modified file 'l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py'
263--- l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py 2012-01-18 15:34:02 +0000
264+++ l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.py 2012-01-24 14:29:45 +0000
265@@ -24,77 +24,22 @@
266 import pooler
267 from osv import osv, fields
268 from tools.translate import _
269-import urllib
270-from xml.dom.minidom import parseString
271-import netsvc
272
273 class search_info_partner_seniat(osv.osv_memory):
274
275 _name = "search.info.partner.seniat"
276 _columns = {
277- 'name':fields.char('Numero de RIF', size=64, help='El RIF debe poseer el formato J1234567890',required=True),
278- 'vat_name':fields.char('Empresa / Persona', size=256, help='Nombre de la Empresa'),
279- 'vat_agent':fields.boolean('Agente de Retencion', help='Es Agente de Retencion'),
280+ 'vat':fields.char('Numero de RIF', size=64, help='El RIF debe poseer el formato J1234567890',required=True),
281+ 'name':fields.char('Empresa / Persona', size=256, help='Nombre de la Empresa'),
282+ 'vat_subjected':fields.boolean('Agente de Retencion', help='Es Agente de Retencion'),
283 'percent':fields.float('Porcentaje de Retencion', help='Porcentaje de Retencion Aplicable'),
284 'vat_apply':fields.boolean('Contribuyente Formal', help='Es Contribuyente'),
285 }
286
287- logger = netsvc.Logger()
288-
289- def _load_url(self,retries,url):
290- str_error= '404 Not Found'
291- while retries > 0:
292- try:
293- s = urllib.urlopen(url)
294- r = s.read()
295- ok = not('404 Not Found' in r)
296- if ok:
297- self.logger.notifyChannel("info", netsvc.LOG_INFO,
298- "Url Loaded correctly %s" % url)
299- return r
300- except:
301- self.logger.notifyChannel("warning", netsvc.LOG_WARNING,
302- "Url could not be loaded %s" % str_error)
303- pass
304- retries -= 1
305- return str_error
306-
307- def _print_error(self, error, msg):
308- raise osv.except_osv(error,msg)
309-
310- def _eval_seniat_data(self,xml_data,context={}):
311-
312- if xml_data.find('450')>=0:
313- if not 'all_rif' in context:
314- self._print_error(_('Vat Error !'),_('Invalid VAT!'))
315- else:
316- return True
317-
318- if xml_data.find('452')>=0:
319- if not 'all_rif' in context:
320- self._print_error(_('Vat Error !'),_('Unregistered VAT!'))
321- else:
322- return True
323-
324- if xml_data.find("404")>=0:
325- self._print_error(_('No Connection !'),_("Could not connect! Check the URL "))
326- return True
327-
328- def _parse_dom(self,dom,rif,url_seniat):
329- name = dom.childNodes[0].childNodes[0].firstChild.data
330- vat_agent = dom.childNodes[0].childNodes[1].firstChild.data.upper()=='SI' and True or False
331- vat_apply = dom.childNodes[0].childNodes[2].firstChild.data.upper()=='SI' and True or False
332- self.logger.notifyChannel("info", netsvc.LOG_INFO,
333- "RIF: %s Found" % rif)
334- if name.count('(') > 0:
335- name = name[:name.index('(')].rstrip()
336- return {'vat_name': name,'vat_apply': vat_apply, 'vat_agent':vat_agent}
337-
338 def _buscar_porcentaje(self,rif,url):
339 context={}
340- html_data = self._load_url(3,url %rif)
341+ html_data = self.pool.get('seniat.url')._load_url(3,url %rif)
342 html_data = unicode(html_data, 'ISO-8859-1').encode('utf-8')
343- self._eval_seniat_data(html_data,context)
344 search_str='La condición de este contribuyente requiere la retención del '
345 pos = html_data.find(search_str)
346 if pos > 0:
347@@ -103,47 +48,22 @@
348 return float(pct)
349 else:
350 return 0.0
351-
352- def _dom_giver(self, url1, url2, context, vat):
353- xml_data = self._load_url(3,url1 % vat)
354- if not self._eval_seniat_data(xml_data,context):
355- dom = parseString(xml_data)
356- return self._parse_dom(dom, vat, url2)
357- else:
358- return False
359
360 def search_partner_seniat(self, cr, uid, vat, context=None):
361- pool = self.pool.get('seniat.url')
362- var_vat = self.read(cr,uid,vat,['name'])
363- context.update({'vat':var_vat and var_vat[0] and var_vat[0]['name'] or []})
364- if not context['vat']:
365- self._print_error(_('Vat Error !'),_('The field vat is empty'))
366- else:
367- url_obj = pool.browse(cr, uid, pool.search(cr, uid, []))[0]
368- url1 = url_obj.name + '%s'
369- url2 = url_obj.url_seniat + '%s'
370- res = self._dom_giver(url1, url2, context, context['vat'])
371- if res:
372- percent = self._buscar_porcentaje(context['vat'],url2)
373- res.update({'percent':percent, 'name':var_vat[0]['name']})
374- context.update(res)
375- self.write(cr,uid,vat,res)
376- else:
377- return False
378- res_id = self.pool.get('ir.model.data').search(cr,uid,[('model','=','ir.ui.view'),('name','=','view_vat_return')])
379- resource_id = self.pool.get('ir.model.data').read(cr, uid, res_id, fields=['res_id'])[0]['res_id']
380+ if context is None:
381+ context={}
382+ su_obj = self.pool.get('seniat.url')
383+ rp_obj = self.pool.get('res.partner')
384+ url_obj = su_obj.browse(cr, uid, su_obj.search(cr, uid, []))[0]
385+ url1 = url_obj.name + '%s'
386+ url2 = url_obj.url_seniat + '%s'
387+ var_vat = self.read(cr,uid,vat,['vat'])
388+ if var_vat:
389+ aux = var_vat[0]['vat']
390+ res = su_obj._dom_giver(url1, url2, context, aux)
391+ res.update({'percent':self._buscar_porcentaje(aux,url2)})
392+ self.write(cr,uid,vat,res)
393
394- return {
395- 'view_type': 'form',
396- 'view_mode': 'form',
397- 'res_model': 'search.info.partner.seniat',
398- 'views': [(resource_id,'form')], #Comentar en caso de que no funcione
399- 'type': 'ir.actions.act_window',
400- 'nodestroy': True,
401- 'target': 'new',
402- 'context': context,
403- #~ 'ref': 'search_info_partner_seniat.view_vat_return',
404- 'res_id': vat and vat[0] or [],
405- }
406+ return False
407
408 search_info_partner_seniat()
409
410=== modified file 'l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml'
411--- l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml 2012-01-16 14:51:55 +0000
412+++ l10n_ve_fiscal_requirements/wizard/search_info_partner_seniat.xml 2012-01-24 14:29:45 +0000
413@@ -7,41 +7,21 @@
414 <field name="type">form</field>
415 <field name="arch" type="xml">
416 <form string="Asistente de Busqueda del RIF">
417- <field name="name" />
418- <button name="search_partner_seniat" string="Buscar RIF" type="object" icon="terp-check" />
419- </form>
420- </field>
421- </record>
422-
423- <record model="ir.ui.view" id="view_vat_return">
424- <field name="name">search.info.partner.seniat.form.return</field>
425- <field name="model">search.info.partner.seniat</field>
426- <field name="type">form</field>
427- <field name="arch" type="xml">
428- <form string="Asistente de Busqueda del RIF">
429 <group colspan="4">
430- <field name="name" />
431+ <field name="vat" />
432 <button name="search_partner_seniat" string="Buscar RIF" type="object" icon="terp-check" />
433 </group>
434 <separator string="Datos del RIF Consultado" />
435- <field name="vat_name" />
436- <field name="vat_agent" />
437- <field name="percent" />
438- <field name="vat_apply" />
439+ <group colspan="4" >
440+ <field name="name" readonly='True'/>
441+ <field name="vat_subjected" readonly='True'/>
442+ <field name="percent" readonly='True'/>
443+ <field name="vat_apply" readonly='True'/>
444+ </group>
445 </form>
446 </field>
447 </record>
448
449- <record id="wizard_vat_return_action" model="ir.actions.act_window">
450- <field name="name">Wizard Search VAT</field>
451- <field name="res_model">search.info.partner.seniat</field>
452- <field name="src_model">search.info.partner.seniat</field>
453- <field name="view_type">form</field>
454- <field name="view_mode">form</field>
455- <field name="view_id" ref="view_vat_return"/>
456- <field name="target">new</field>
457- </record>
458-
459 <record id="wizard_vat_search_action" model="ir.actions.act_window">
460 <field name="name">Wizard Search VAT</field>
461 <field name="res_model">search.info.partner.seniat</field>
462
463=== modified file 'l10n_ve_fiscal_requirements/wizard/update_info_partner.py'
464--- l10n_ve_fiscal_requirements/wizard/update_info_partner.py 2011-10-25 20:33:16 +0000
465+++ l10n_ve_fiscal_requirements/wizard/update_info_partner.py 2012-01-24 14:29:45 +0000
466@@ -32,8 +32,9 @@
467
468 def update_info(self, cr, uid, ids, context={}):
469 res_part_obj = self.pool.get('res.partner')
470+ seniat_url_obj = self.pool.get('seniat.url')
471 es_partner_ids= res_part_obj.search(cr, uid, [])
472- res_part_obj.connect_seniat(cr, uid, es_partner_ids, context,True)
473+ seniat_url_obj.connect_seniat(cr, uid, es_partner_ids, context,True)
474 return{}
475
476