← Back to team overview

openerp-l10n-ar-localization team mailing list archive

[Merge] lp:~dariokdg/openerp-l10n-ar-localization/wsfex into lp:openerp-l10n-ar-localization

 

Darío De Giacomo has proposed merging lp:~dariokdg/openerp-l10n-ar-localization/wsfex into lp:openerp-l10n-ar-localization.

Requested reviews:
  OpenERP - Team de Localización Argentina (openerp-l10n-ar-localization)

For more details, see:
https://code.launchpad.net/~dariokdg/openerp-l10n-ar-localization/wsfex/+merge/197217

[l10n-ar-invoice][FIX] 'product' not being considered as a type. added.
[l10n-ar-wsafip-fex][ADD] Functionality of dynamic views (common/FE/FEX) within invoice. Code cleaning. [ADD] List of currencies, countries and UoM. [FIX] Minor bugfixes. [MOD] Domain in field dst_merc so that is impossible to select a country that has not afip_code filled properly. [MOD] Various fixes.
-- 
https://code.launchpad.net/~dariokdg/openerp-l10n-ar-localization/wsfex/+merge/197217
Your team OpenERP - Team de Localización Argentina is requested to review the proposed merge of lp:~dariokdg/openerp-l10n-ar-localization/wsfex into lp:openerp-l10n-ar-localization.
=== modified file 'l10n_ar_account_check_debit_note/AUTHORS' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_debit_note/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_debit_note/__openerp__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_debit_note/i18n/en_AR.mo' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_debit_note/i18n/en_AR.po' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_debit_note/invoice.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_debit_note/invoice_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_debit_note/voucher.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/AUTHORS' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/__openerp__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/account.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/account_check_duo.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/account_check_duo_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/account_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/account_voucher.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/account_voucher_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/partner_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/report/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/report/report_check_issued.odt' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/res_partner_bank.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/security/account_check_security.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/security/ir.model.access.csv' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/wizard_issued/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/wizard_issued/check_issued_hreject.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/wizard_issued/view_issued_check_hreject.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/wizard_third/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/wizard_third/check_deposit.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/wizard_third/check_dreject.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/wizard_third/check_hreject.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/wizard_third/check_sold.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/wizard_third/view_check_deposit.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/wizard_third/view_check_dreject.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/wizard_third/view_check_hreject.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/wizard_third/view_check_sold.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/workflow_issued.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_account_check_duo/workflow_third.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/AUTHORS' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/LICENSE' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/README' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/__openerp__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/data/res_bank.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/i18n/es_AR.po' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/l10n_ar_bank.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/l10n_ar_bank.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/l10n_ar_bank_menu.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/security/groups.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/security/ir.model.access.csv' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/test/l10n_ar_banks_wizard.yml' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/wizard/.directory' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/wizard/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/wizard/banks_def.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/wizard/cache.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/wizard/geosearch.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/wizard/strcmp.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/wizard/wiz_l10n_ar_bank.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_bank/wizard/wiz_l10n_ar_bank.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_base_vat/AUTHORS' (properties changed: +x to -x)
=== modified file 'l10n_ar_base_vat/LICENSE' (properties changed: +x to -x)
=== modified file 'l10n_ar_base_vat/README' (properties changed: +x to -x)
=== modified file 'l10n_ar_base_vat/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_base_vat/__openerp__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_base_vat/base_vat.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_base_vat/test/l10n_ar_base_vat.yml' (properties changed: +x to -x)
=== modified file 'l10n_ar_chart_generic/AUTHORS' (properties changed: +x to -x)
=== modified file 'l10n_ar_chart_generic/LICENSE' (properties changed: +x to -x)
=== modified file 'l10n_ar_chart_generic/README' (properties changed: +x to -x)
=== modified file 'l10n_ar_chart_generic/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_chart_generic/__openerp__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_chart_generic/data/account_types.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_chart_generic/i18n/es_AR.po' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/AUTHORS' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/LICENSE' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/README' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/__openerp__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/account.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/afip.py' (properties changed: +x to -x)
--- l10n_ar_invoice/afip.py	2013-11-04 16:53:48 +0000
+++ l10n_ar_invoice/afip.py	2013-11-29 14:53:16 +0000
@@ -95,14 +95,14 @@
         'active': fields.boolean('Active'),
         'product_types': fields.char('Product types',
                                      help='Only use products with this product types in this journals. '
-                                     'Types must be a subset of adjust, consu and service separated by commas.'),
+                                     'Types must be a subset of adjust, product, consu and service separated by commas.'),
     }
 
     def _check_product_types(self, cr, uid, ids, context=None):
         for jc in self.browse(cr, uid, ids, context=context):
             if jc.product_types:
                 types = set(jc.product_types.split(','))
-                res = types.issubset(['adjust','consu','service'])
+                res = types.issubset(['adjust','consu','service','product'])
             else:
                 res = True
         return res
@@ -132,14 +132,14 @@
         'active': fields.boolean('Active'),
         'product_types': fields.char('Product types',
                                      help='Translate this product types to this AFIP concept. '
-                                     'Types must be a subset of adjust, consu and service separated by commas.',required=True),
+                                     'Types must be a subset of adjust, product, consu and service separated by commas.',required=True),
     }
 
     def _check_product_types(self, cr, uid, ids, context=None):
         for ct in self.browse(cr, uid, ids, context=context):
             if ct.product_types:
                 types = set(ct.product_types.split(','))
-                res = types.issubset(['adjust','consu','service'])
+                res = types.issubset(['adjust','consu','service','product'])
             else:
                 res = True
         return res

=== modified file 'l10n_ar_invoice/config.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/country.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/data/afip.document_type.csv' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/data/afip.journal_template.csv' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/data/country.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/data/document_type.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/data/invoice_workflow.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/data/journal_class.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/data/partner.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/data/reports.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/data/responsability.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/data/responsability_class.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/i18n/es_AR.po' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/partner.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/report/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/report/invoice.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/report/invoice.rml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/security/ir.model.access.csv' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/security/l10n_ar_invoice_security.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/test/bug_1042944.yml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/test/com_ri1.yml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/test/com_ri2.yml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/test/inv_ri2ri.yml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/test/inv_ri2rm.yml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/test/inv_rm2ri.yml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/test/partners.yml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/view/afip_document_type_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/view/afip_journal_class_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/view/afip_menuitem.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/view/afip_responsability_class_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/view/afip_responsability_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/view/country_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/view/invoice_config.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/view/journal_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_invoice/view/partner_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_partner_title/AUTHORS' (properties changed: +x to -x)
=== modified file 'l10n_ar_partner_title/LICENSE' (properties changed: +x to -x)
=== modified file 'l10n_ar_partner_title/README' (properties changed: +x to -x)
=== modified file 'l10n_ar_partner_title/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_partner_title/__openerp__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_partner_title/data/res_partner_title.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_states/AUTHORS' (properties changed: +x to -x)
=== modified file 'l10n_ar_states/LICENSE' (properties changed: +x to -x)
=== modified file 'l10n_ar_states/README' (properties changed: +x to -x)
=== modified file 'l10n_ar_states/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_states/__openerp__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_states/country.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_states/data/res_country_state.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_states/i18n/es_AR.po' (properties changed: +x to -x)
=== modified file 'l10n_ar_vat_reports/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_vat_reports/__openerp__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_vat_reports/report/report_data.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_vat_reports/wizard/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_vat_reports/wizard/report_prompt.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_vat_reports/wizard/report_prompt.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/AUTHORS' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/LICENSE' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/README' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/__openerp__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/config.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/data/wsafip_config.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/data/wsafip_connection_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/data/wsafip_menuitem.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/data/wsafip_sequence.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/data/wsafip_server.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/data/wsafip_server_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/security/ir.model.access.csv' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/security/wsafip_security.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/test/test_key.yml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/test/test_mime_signer.yml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/test/test_wsafip_service.yml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/wsafip_connection.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip/wsafip_server.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/AUTHORS' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/__openerp__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/config.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/data/afip.wsfe_error.csv' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/data/invoice_workflow.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/data/journal_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/data/reports.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/data/wsafip_fe_config.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/data/wsafip_server.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/data/wsfe_error_view.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/invoice.py'
--- l10n_ar_wsafip_fe/invoice.py	2013-11-22 15:25:06 +0000
+++ l10n_ar_wsafip_fe/invoice.py	2013-11-29 14:53:16 +0000
@@ -24,6 +24,10 @@
 import logging
 
 _logger = logging.getLogger(__name__)
+<<<<<<< TREE
+=======
+
+>>>>>>> MERGE-SOURCE
 # Number Filter
 re_number = re.compile(r'\d{8}')
 
@@ -37,13 +41,28 @@
 def _calc_concept(product_types):
     if product_types == set(['consu']):
         concept = '1'
+    elif product_types == set(['product']):
+        concept = '1'
+    elif product_types == set(['consu','product']):
+        concept = '1'
     elif product_types == set(['service']):
         concept = '2'
     elif product_types == set(['consu','service']):
         concept = '3'
+    elif product_types == set(['product','service']):
+        concept = '3'        
+    elif product_types == set(['consu','product','service']):
+        concept = '3'        
     else:
         concept = False
     return concept
+    
+    ####### MOD DARIO DE GIACOMO 18/11/2013 14:45hs.
+    ####### ------------------------------------------------------------------
+    ####### NO FUERON CONSIDERADOS LOS PRODUCTOS STOCKEABLES DE TYPE "product"
+    ####### PARA SER CONSIDERADOS COMO PRODUCTO DE 'afip_concept'
+    ####### FALTA AÑADIRLOS AL WIZARD DE CONFIGURACION PARA QUE SE AÑADAN
+    ####### EN EL 'Concept Type' del menu 'AFIP Configuration' en Settings.
 
 class invoice(osv.osv):
     def _get_concept(self, cr, uid, ids, name, args, context=None):

=== modified file 'l10n_ar_wsafip_fe/journal.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/report/__init__.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/report/invoice.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/report/invoice.rml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/security/ir.model.access.csv' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/security/wsafip_fe_security.xml' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/sslhttps.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fe/wsfe_error.py' (properties changed: +x to -x)
=== modified file 'l10n_ar_wsafip_fex/__openerp__.py'
--- l10n_ar_wsafip_fex/__openerp__.py	2013-11-22 15:25:53 +0000
+++ l10n_ar_wsafip_fex/__openerp__.py	2013-11-29 14:53:16 +0000
@@ -22,11 +22,18 @@
     'author': 'OpenERP - Team de Localizaci\xc3\xb3n Argentina',
     'category': 'Localization/Argentina',
     'demo_xml': [],
-    'depends': ['l10n_ar_wsafip_fe'],
+    'depends': ['l10n_ar_wsafip_fe',
+                'l10n_ar_states'
+                ],
     'description': '\n\nAPI e GUI para acceder a las Web Services de Factura Electr\xc3\xb3nica de Exportaci\xc3\xb3n de la AFIP\n\n',
-    'init_xml': [],
+    'init_xml': [
+                      'data/res_country_afip_code.xml',
+                      'data/res_currency_afip_code.xml',
+                      'data/product_uom_afip_code.xml',
+                      ],
     'installable': True,
     'license': 'AGPL-3',
+<<<<<<< TREE
     'name': 'Argentina - Web Services de Factura Electr\xc3\xb3nica del AFIP',
     'test': [   'test/test_key.yml',
                 'test/partners.yml',
@@ -42,5 +49,18 @@
                       'security/wsafip_fex_security.xml',
                       'security/ir.model.access.csv'],
     'version': '2.7.232',
+=======
+    'name': 'Argentina - Web Services de F.E. de Exportaci\xc3\xb3n del AFIP',
+    'update_xml': [  
+                      'data/wsafip_server.xml', 
+                      'data/invoice_view.xml',
+                      'data/invoice_workflow.xml',
+                      'data/journal_view.xml',
+                      'data/reports.xml',
+                      'data/wsafip_fex_config.xml',
+                      'data/res_config_view.xml',
+                      ],
+    'version': '2.7.223',
+>>>>>>> MERGE-SOURCE
     'website': 'https://launchpad.net/~openerp-l10n-ar-localization'}
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'l10n_ar_wsafip_fex/config.py'
--- l10n_ar_wsafip_fex/config.py	2013-11-14 18:47:14 +0000
+++ l10n_ar_wsafip_fex/config.py	2013-11-29 14:53:16 +0000
@@ -96,7 +96,7 @@
 
             # Asigno el conector al AFIP
             jou_ids = journal_obj.search(cr, uid, [('company_id','=',company.id),
-                                                   ('point_of_sale','=',ws.wsfe_point_of_sale),
+                                                   ('point_of_sale','=',ws.wsfex_point_of_sale),
                                                    ('type','=','sale')])
 
             journal_obj.write(cr, uid, jou_ids, { 'afip_connection_id': conn_id })
@@ -111,9 +111,10 @@
                 else:
                     _logger.info("Journal '%s' cant be used." % journal.name)
 
-            # Actualizo el código de impuestos de la AFIP en los impuestos locale.s
+            # Actualizo datos necesarios (idioma comprobante, incoterms, monedas y UoM) desde AFIP.
             conn = conn_obj.browse(cr, uid, conn_id)
-            conn.server_id.wsfe_update_tax(conn_id)
+            conn.server_id.wsfex_update_languages(conn_id) #######################################
+            conn.server_id.wsfex_update_incoterms(conn_id) #######################################
             
         return True
 
@@ -129,6 +130,6 @@
         'company_id': _default_company,
         'wsfex_for_homologation': False,
     }
-l10n_ar_wsafip_fe_config()
+l10n_ar_wsafip_fex_config()
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'l10n_ar_wsafip_fex/data/invoice_view.xml'
--- l10n_ar_wsafip_fex/data/invoice_view.xml	2013-11-12 18:24:53 +0000
+++ l10n_ar_wsafip_fex/data/invoice_view.xml	2013-11-29 14:53:16 +0000
@@ -23,43 +23,38 @@
             <field name="name">account.invoice.afip.form</field>
             <field name="inherit_id" ref="account.invoice_form" />
             <field name="arch" type="xml">
-                <field name="invoice_line" position="replace">
-                    <field context="{'partner_id': partner_id, 'price_type': context.get('price_type') or False, 'type': type}" name="invoice_line" on_change="onchange_invoice_line(invoice_line)">
-                        <tree string="Invoice lines" editable="bottom">
-                            <field name="product_id"
-                                on_change="product_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/>
-                            <field name="name"/>
-                            <field name="company_id" invisible="1"/>
-                            <field name="account_id" groups="account.group_account_user"
-                                domain="[('company_id', '=', parent.company_id), ('journal_id', '=', parent.journal_id), ('type', '=', 'other')]"
-                                on_change="onchange_account_id(product_id, parent.partner_id, parent.type, parent.fiscal_position,account_id)"/>
-                            <field name="account_analytic_id" groups="analytic.group_analytic_accounting"
-                                domain="[('type','!=','view'), ('company_id', '=', parent.company_id)]"/>
-                            <field name="quantity"/>
-                            <field name="uos_id" groups="product.group_uom"
-                                on_change="uos_id_change(product_id, uos_id, quantity, name, parent.type, parent.partner_id, parent.fiscal_position, price_unit, parent.currency_id, context, parent.company_id)"/>
-                            <field name="price_unit"/>
-                            <field name="discount" groups="sale.group_discount_per_so_line"/>
-                            <field name="invoice_line_tax_id" widget="many2many_tags" context="{'type':parent.type}"
-                                domain="[('parent_id','=',False),('company_id', '=', parent.company_id)]"/>
-                            <field name="price_subtotal"/>
-                        </tree>
-                    </field>
-                </field>
- 
-                <notebook position="before">
-                    <field name='afip_concept' invisible="1"/>
-                    <group col="4" attrs="{'invisible':[('afip_concept','not in',['2','3'])]}">
-                        <field name='afip_service_start' attrs="{'required':[('afip_concept','in',['2','3'])]}"/>
-                        <field name='afip_service_end' attrs="{'required':[('afip_concept','in',['2','3'])]}"/>
-                    </group>
+                <xpath expr="/form/sheet/group/group/field[@name='date_invoice']" position="after"> 
+                    <field name="afip_export_rspn" invisible="1"/>
+                </xpath>
+                <notebook>
+                    <page string="Export Configuration" attrs="{'invisible': [('afip_export_rspn', '!=', 'EXT')]}" >
+                        <group>
+                            <group>
+                                <field name="afip_export_concept" attrs="{'required': [('afip_export_rspn', '==', 'EXT')]}" colspan="2"/>
+                                <field name="afip_export_lang_invoice" attrs="{'required': [('afip_export_rspn', '==', 'EXT')]}" colspan="2"/>
+                            </group>
+                            <group>
+                                <field name="afip_export_incoterm" widget="selection" colspan="2" attrs="{'required':  [('afip_export_rspn', '==', 'EXT'), ('afip_export_concept', '==', '1')]}"/>
+                                <field name="afip_export_exist_perm" attrs="{'readonly':  [('state', '!=', 'draft') ] }" on_change="onchange_permissions(afip_export_exist_perm)"/>
+                            </group>
+                        </group>
+                        <field name="afip_export_permissions" attrs="{'readonly': [('state', '!=', 'draft')], 'required': [('afip_export_rspn', '==', 'EXT'),('afip_export_exist_perm', '==', 'S')], 'invisible': [('afip_export_exist_perm', '!=', 'S')] }">
+                            <tree colors="grey:valid_permission==False; green:valid_permission==True" fonts="bold:valid_permission==True">
+                                <field name="permission_code"/>
+                                <field name="dst_merc"/>
+                                <field name="valid_permission"/>
+                            </tree>
+                            <form>
+                                <field name="permission_code"/>
+                                <field name="dst_merc"/>
+                            </form>
+                        </field>
+                        <button class="oe_highlight" string='Check Permissions' name='button_check_permissions' type='object' attrs="{'invisible': [('afip_export_exist_perm', '!=', 'S') or ('state', '!=', 'draft')]}"/>
+                        <group>
+                            <field name="afip_export_obs_com" class="oe_inline" placeholder="Observations..."/>
+                        </group>
+                    </page>
                 </notebook>
-                <field name="move_id" position="after">
-                    <field name='afip_batch_number' invisible="1" readonly="1"/>
-                    <field name='afip_cae' readonly="1"/>
-                    <field name='afip_cae_due' readonly="1"/>
-                    <field name='afip_error_id' readonly="1"/>
-                </field>
             </field>
         </record>
     </data>

=== added file 'l10n_ar_wsafip_fex/data/invoice_workflow.xml'
--- l10n_ar_wsafip_fex/data/invoice_workflow.xml	1970-01-01 00:00:00 +0000
+++ l10n_ar_wsafip_fex/data/invoice_workflow.xml	2013-11-29 14:53:16 +0000
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C), 2012, OpenERP - Team de Localización Argentina.
+ https://launchpad.net/~openerp-l10n-ar-localization
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+-->
+<openerp>
+    <data>
+        <record id="account.act_open" model="workflow.activity">
+            <field name="wkf_id" ref="account.wkf"/>
+            <field name="name">open</field>
+            <field name="action">afip_validation()
+action_date_assign()
+action_move_create()
+action_number()
+action_retrieve_cae()
+write({'state':'open'})</field>
+            <field name="kind">function</field>
+        </record>
+        <record id="account.t4" model="workflow.transition">
+            <field name="act_from" ref="account.act_draft"/>
+            <field name="act_to" ref="account.act_open"/>
+            <field name="condition">valid_batch()</field>
+        </record>
+    </data>
+</openerp>
+<!-- vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4
+     -->

=== modified file 'l10n_ar_wsafip_fex/data/journal_view.xml'
--- l10n_ar_wsafip_fex/data/journal_view.xml	2013-11-14 18:47:14 +0000
+++ l10n_ar_wsafip_fex/data/journal_view.xml	2013-11-29 14:53:16 +0000
@@ -18,22 +18,20 @@
 -->
 <openerp>
     <data> 
-        <record id="view_account_journal_afip_form" model="ir.ui.view">
+        <record id="view_account_journal_fex_form" model="ir.ui.view">
             <field name="model">account.journal</field>
-            <field name="name">account.journal.afip.form</field>
-            <field name="inherit_id" ref="l10n_ar_invoice.view_account_journal_ar_form" />
+            <field name="name">account.journal.fex.form</field>
+            <field name="inherit_id" ref="l10n_ar_wsafip_fe.view_account_journal_afip_form" />
             <field name="arch" type="xml">
-                <page string="AFIP" position="inside">
-                    <group colspan="2" col="2">
-                        <separator string="Web Services" colspan="4"/>
-                        <field name='afip_connection_id'/>
-                        <field name='afip_state'/>
-                        <field name='afip_items_generated'/>
-                    </group>
-                </page>
+                <xpath expr="/form/notebook/page/group/field[@name='afip_items_generated']" position="replace">
+                    <field name='afip_items_generated'/>
+                </xpath>
+                <xpath expr="/form/notebook/page/group/field[@name='afip_state']" position="replace">
+                    <field name='afip_state'/>
+                </xpath>
             </field>
         </record>
-  </data>
+    </data>
 </openerp>
 <!-- vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4
      -->

=== added file 'l10n_ar_wsafip_fex/data/product_uom_afip_code.xml'
--- l10n_ar_wsafip_fex/data/product_uom_afip_code.xml	1970-01-01 00:00:00 +0000
+++ l10n_ar_wsafip_fex/data/product_uom_afip_code.xml	2013-11-29 14:53:16 +0000
@@ -0,0 +1,388 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+
+
+<!-- CATEGORIAS -->
+
+        <record id="product_uom_categ_vol_cub" model="product.uom.categ">
+            <field name="name">Volumen Cubico</field>
+        </record>
+        <record id="product_uom_categ_rad" model="product.uom.categ">
+            <field name="name">Unidad de Radiactividad</field>
+        </record>
+        <record id="product_uom_categ_other" model="product.uom.categ">
+            <field name="name">Otros (sin clasificacion)</field>
+        </record>
+
+
+
+
+      
+    
+<!-- UNIDAD -->
+        <record id="product.product_uom_unit" model="product.uom"> 
+                <field name="afip_code">7</field>
+        </record> 
+        <record id="product_uom_par" model="product.uom">
+            <field name="category_id" ref="product.product_uom_categ_unit"/>
+            <field name="name">Par(es)</field>
+            <field name="factor_inv" eval="12"/>
+            <field name="uom_type">bigger</field>
+            <field name="afip_code">8</field>
+        </record>
+        <record id="product.product_uom_dozen" model="product.uom">
+                <field name="afip_code">9</field>
+        </record> 
+        
+        
+<!-- DISTANCIA -->
+        
+        <record id="product_uom_mm" model="product.uom">
+            <field name="category_id" ref="product.uom_categ_length"/>
+            <field name="name">Milimetros</field>
+            <field name="factor_inv" eval="0.001"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">15</field>
+        </record>
+        <record id="product.product_uom_cm" model="product.uom">
+                <field name="afip_code">20</field>
+        </record> 
+        <record id="product.product_uom_meter" model="product.uom">
+                <field name="afip_code">2</field>
+        </record> 
+        <record id="product.product_uom_km" model="product.uom">
+                <field name="afip_code">17</field>
+        </record>
+        
+        
+<!-- PESO -->
+
+<!--
+        NO SE PUEDEN INCLUIR PICOGRAMOS POR LA CANTIDAD DE DECIMALES ACEPTADOS.
+        REVISAR EN CASO DE SER NECESARIO.
+        <record id="product_uom_picog" model="product.uom">
+            <field name="category_id" ref="product.product_uom_categ_kgm"/>
+            <field name="name">Picogramos</field>
+            <field name="factor_inv" eval="12"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">15</field>
+        </record>
+-->
+        <record id="product_uom_nanog" model="product.uom">
+            <field name="category_id" ref="product.product_uom_categ_kgm"/>
+            <field name="name">Nanogramo(s)</field>
+            <field name="factor_inv" eval="0.000000000001"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">34</field>
+        </record>
+        <record id="product_uom_microg" model="product.uom">
+            <field name="category_id" ref="product.product_uom_categ_kgm"/>
+            <field name="name">Microgramo(s)</field>
+            <field name="factor_inv" eval="0.000000001"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">33</field>
+        </record>
+        <record id="product_uom_milig" model="product.uom">
+            <field name="category_id" ref="product.product_uom_categ_kgm"/>
+            <field name="name">Miligramo(s)</field>
+            <field name="factor_inv" eval="0.000001"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">41</field>
+        </record>
+        <record id="product.product_uom_gram" model="product.uom">
+                <field name="afip_code">14</field>
+        </record> 
+        <record id="product.product_uom_kgm" model="product.uom">
+                <field name="afip_code">1</field>
+        </record> 
+        <record id="product.product_uom_ton" model="product.uom">
+                <field name="afip_code">29</field>
+        </record>
+
+
+
+<!-- VOLUMEN (litros) -->
+
+        <record id="product_uom_milil" model="product.uom">
+            <field name="category_id" ref="product.product_uom_categ_vol"/>
+            <field name="name">Mililitro(s)</field>
+            <field name="factor_inv" eval="0.001"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">47</field>
+        </record>
+        <record id="product.product_uom_litre" model="product.uom">
+                <field name="afip_code">5</field>
+        </record> 
+        <record id="product_uom_hectol" model="product.uom">
+            <field name="category_id" ref="product.product_uom_categ_vol"/>
+            <field name="name">Hectolitro(s)</field>
+            <field name="factor_inv" eval="100"/>
+            <field name="uom_type">bigger</field>
+            <field name="afip_code">18</field>
+        </record>
+
+
+
+<!-- VOLUMEN (cubico) -->
+
+        <record id="product_uom_mmcub" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_vol_cub"/>
+            <field name="name">Mm Cubico(s)</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="0.001"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">16</field>
+        </record>
+        <record id="product_uom_cmcub" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_vol_cub"/>
+            <field name="name">Cm Cubico(s)</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="0.01"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">27</field>
+        </record>
+        <record id="product_uom_metrocub" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_vol_cub"/>
+            <field name="name">Metro(s) Cubico(s)</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">reference</field>
+            <field name="afip_code">4</field>
+        </record>
+        <record id="product_uom_damcub" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_vol_cub"/>
+            <field name="name">Dam Cubico(s)</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="10"/>
+            <field name="uom_type">bigger</field>
+            <field name="afip_code">30</field>
+        </record>
+        <record id="product_uom_hmcub" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_vol_cub"/>
+            <field name="name">Hm Cubico(s)</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="100"/>
+            <field name="uom_type">bigger</field>
+            <field name="afip_code">31</field>
+        </record>
+        <record id="product_uom_kmcub" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_vol_cub"/>
+            <field name="name">Km Cubico(s)</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1000"/>
+            <field name="uom_type">bigger</field>
+            <field name="afip_code">32</field>
+        </record>
+
+
+
+<!-- RADIACTIVIDAD -->
+
+        <record id="product_uom_microcurie" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_rad"/>
+            <field name="name">Microcurie</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="0.000001"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">50</field>
+        </record>
+        <record id="product_uom_milicurie" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_rad"/>
+            <field name="name">Milicurie</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="0.001"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">49</field>
+        </record>
+        <record id="product_uom_curie" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_rad"/>
+            <field name="name">Curie</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">reference</field>
+            <field name="afip_code">48</field>
+        </record>
+
+
+
+<!-- OTROS (sin clasificacion) -->
+
+        <record id="product_uom_quilates" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Quilates</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">reference</field>
+            <field name="afip_code">10</field>
+        </record>
+        <record id="product_uom_packs" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Packs</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">96</field>
+        </record>
+        <record id="product_uom_hormas" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Hormas</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">97</field>
+        </record>
+        <record id="product_uom_m2" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Metro(s) Cuadrado(s)</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">3</field>
+        </record>
+        <record id="product_uom_kWh" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">1000 kWh</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">6</field>
+        </record>
+        <record id="product_uom_bonif" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Bonificacion</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">98</field>
+        </record>
+        <record id="product_uom_ot_un" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Otras Unidades</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">99</field>
+        </record>
+        <record id="product_uom_naipes" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Paq. Mazo Naipes</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">25</field>
+        </record>
+        <record id="product_uom_millares" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Millaes</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">11</field>
+        </record>
+        <record id="product_uom_uiacthor" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Unidad Internacional Act. Hormonal</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">51</field>
+        </record>
+        <record id="product_uom_muiacthor" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">M. Unidad Internacional Act. Hormonal</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">52</field>
+        </record>
+        <record id="product_uom_kgbase" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">KG Base</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">53</field>
+        </record>
+        <record id="product_uom_gruesa" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Gruesa</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">54</field>
+        </record>
+        <record id="product_uom_kgbruto" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">KG Bruto</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">61</field>
+        </record>
+        <record id="product_uom_uiactant" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Unidad Internacional Act. Antibiotica</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">62</field>
+        </record>
+        <record id="product_uom_muiactant" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">M. Unidad Internacional Act. Antibiotica</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">63</field>
+        </record>
+        <record id="product_uom_uiactig" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Unidad Internacional Act. Inmunologica</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">64</field>
+        </record>
+        <record id="product_uom_muiactig" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">M. Unidad Internacional Act. Inmunologica</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">65</field>
+        </record>
+        <record id="product_uom_kgactivo" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">KG Activo</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">66</field>
+        </record>
+        <record id="product_uom_gactivo" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Gramo Activo</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">67</field>
+        </record>
+        <record id="product_uom_gbase" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">Gramo Base</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">68</field>
+        </record>
+        <record id="product_uom_vacio" model="product.uom">
+            <field name="category_id" ref="product_uom_categ_other"/>
+            <field name="name">No especificado</field>
+            <field name="factor" eval="1"/>
+            <field name="factor_inv" eval="1"/>
+            <field name="uom_type">smaller</field>
+            <field name="afip_code">0</field>
+        </record>
+    </data>
+</openerp>

=== added file 'l10n_ar_wsafip_fex/data/res_country_afip_code.xml'
--- l10n_ar_wsafip_fex/data/res_country_afip_code.xml	1970-01-01 00:00:00 +0000
+++ l10n_ar_wsafip_fex/data/res_country_afip_code.xml	2013-11-29 14:53:16 +0000
@@ -0,0 +1,665 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+    <data>
+        <record model='res.country' id='base.ad'>
+                <field name='afip_code'>404</field>
+        </record> 
+        <record model='res.country' id='base.ae'>
+                <field name='afip_code'>331</field>
+        </record> 
+        <record model='res.country' id='base.af'>
+                <field name='afip_code'>301</field>
+        </record> 
+        <record model='res.country' id='base.ag'>
+                <field name='afip_code'>508</field>
+        </record> 
+<!--
+        <record model='res.country' id='base.ai'>
+                <field name='afip_code'></field>
+        </record> 
+-->
+        <record model='res.country' id='base.al'>
+                <field name='afip_code'>401</field>
+        </record> 
+        <record model='res.country' id='base.am'>
+                <field name='afip_code'>349</field>
+        </record> 
+        <record model='res.country' id='base.ao'>
+                <field name='afip_code'>149</field>
+        </record> 
+        <record model='res.country' id='base.as'>
+                <field name='afip_code'>506</field>
+        </record> 
+        <record model='res.country' id='base.at'>
+                <field name='afip_code'>405</field>
+        </record> 
+        <record model='res.country' id='base.au'>
+                <field name='afip_code'>501</field>
+        </record> 
+<!--
+        <record model='res.country' id='base.aw'>
+                <field name='afip_code'></field>
+        </record> 
+-->
+        <record model='res.country' id='base.az'>
+                <field name='afip_code'>350</field>
+        </record> 
+        <record model='res.country' id='base.ba'>
+                <field name='afip_code'>446</field>
+        </record> 
+        <record model='res.country' id='base.bb'>
+                <field name='afip_code'>201</field>
+        </record> 
+        <record model='res.country' id='base.bd'>
+                <field name='afip_code'>345</field>
+        </record> 
+        <record model='res.country' id='base.be'>
+                <field name='afip_code'>406</field>
+        </record> 
+        <record model='res.country' id='base.bf'>
+                <field name='afip_code'>101</field>
+        </record> 
+        <record model='res.country' id='base.bg'>
+                <field name='afip_code'>407</field>
+        </record> 
+        <record model='res.country' id='base.bh'>
+                <field name='afip_code'>303</field>
+        </record> 
+        <record model='res.country' id='base.bi'>
+                <field name='afip_code'>104</field>
+        </record> 
+        <record model='res.country' id='base.bj'>
+                <field name='afip_code'>112</field>
+        </record> 
+<!--
+        <record model='res.country' id='base.bm'>
+                <field name='afip_code'></field>
+        </record> 
+-->
+        <record model='res.country' id='base.bn'>
+                <field name='afip_code'>346</field>
+        </record> 
+        <record model='res.country' id='base.bo'>
+                <field name='afip_code'>202</field>
+        </record> 
+        <record model='res.country' id='base.br'>
+                <field name='afip_code'>203</field>
+        </record> 
+        <record model='res.country' id='base.bs'>
+                <field name='afip_code'>239</field>
+        </record> 
+        <record model='res.country' id='base.bt'>
+                <field name='afip_code'>305</field>
+        </record> 
+        <record model='res.country' id='base.bw'>
+                <field name='afip_code'>103</field>
+        </record> 
+        <record model='res.country' id='base.by'>
+                <field name='afip_code'>439</field>
+        </record> 
+        <record model='res.country' id='base.bz'>
+                <field name='afip_code'>236</field>
+        </record> 
+        <record model='res.country' id='base.ca'>
+                <field name='afip_code'>204</field>
+        </record> 
+<!--
+        <record model='res.country' id='base.cc'>
+                <field name='afip_code'></field>
+        </record> 
+-->
+        <record model='res.country' id='base.cf'>
+                <field name='afip_code'>107</field>
+        </record> 
+        <record model='res.country' id='base.cg'>
+                <field name='afip_code'>108</field>
+        </record> 
+        <record model='res.country' id='base.ch'>
+                <field name='afip_code'>430</field>
+        </record> 
+        <record model='res.country' id='base.ci'>
+                <field name='afip_code'>110</field>
+        </record> 
+<!--
+        <record model='res.country' id='base.ck'>
+                <field name='afip_code'></field>
+        </record> 
+-->
+        <record model='res.country' id='base.cl'>
+                <field name='afip_code'>208</field>
+        </record> 
+        <record model='res.country' id='base.cm'>
+                <field name='afip_code'>105</field>
+        </record> 
+        <record model='res.country' id='base.cn'>
+                <field name='afip_code'>310</field>
+        </record> 
+        <record model='res.country' id='base.co'>
+                <field name='afip_code'>205</field>
+        </record> 
+        <record model='res.country' id='base.cr'>
+                <field name='afip_code'>206</field>
+        </record> 
+        <record model='res.country' id='base.cu'>
+                <field name='afip_code'>207</field>
+        </record> 
+        <record model='res.country' id='base.cv'>
+                <field name='afip_code'>150</field>
+        </record> 
+        <record model='res.country' id='base.cx'>
+                <field name='afip_code'>507</field>
+        </record> 
+        <record model='res.country' id='base.cy'>
+                <field name='afip_code'>435</field>
+        </record> 
+        <record model='res.country' id='base.cz'>
+                <field name='afip_code'>451</field>
+        </record> 
+        <record model='res.country' id='base.de'>
+                <field name='afip_code'>438</field>
+        </record> 
+        <record model='res.country' id='base.dj'>
+                <field name='afip_code'>153</field>
+        </record> 
+        <record model='res.country' id='base.dk'>
+                <field name='afip_code'>409</field>
+        </record> 
+        <record model='res.country' id='base.dm'>
+                <field name='afip_code'>233</field>
+        </record> 
+        <record model='res.country' id='base.do'>
+                <field name='afip_code'>209</field>
+        </record> 
+<!--
+        <record model='res.country' id='base.dz'>
+                <field name='afip_code'></field>
+        </record> 
+-->
+        <record model='res.country' id='base.ec'>
+                <field name='afip_code'>210</field>
+        </record> 
+        <record model='res.country' id='base.ee'>
+                <field name='afip_code'>440</field>
+        </record> 
+        <record model='res.country' id='base.eg'>
+                <field name='afip_code'>113</field>
+        </record> 
+        <record model='res.country' id='base.er'>
+                <field name='afip_code'>160</field>
+        </record> 
+        <record model='res.country' id='base.es'>
+                <field name='afip_code'>410</field>
+        </record> 
+        <record model='res.country' id='base.et'>
+                <field name='afip_code'>161</field>
+        </record> 
+        <record model='res.country' id='base.fi'>
+                <field name='afip_code'>411</field>
+        </record> 
+        <record model='res.country' id='base.fj'>
+                <field name='afip_code'>512</field>
+        </record> 
+        <record model='res.country' id='base.fm'>
+                <field name='afip_code'>515</field>
+        </record> 
+        <record model='res.country' id='base.fo'>
+                <field name='afip_code'>228</field>
+        </record> 
+        <record model='res.country' id='base.fr'>
+                <field name='afip_code'>412</field>
+        </record> 
+        <record model='res.country' id='base.ga'>
+                <field name='afip_code'>115</field>
+        </record>
+    <record model='res.country' id='base.uk'><!-- gb -->
+                <field name='afip_code'>426</field>
+        </record> 
+        <record model='res.country' id='base.gd'>
+                <field name='afip_code'>240</field>
+        </record> 
+        <record model='res.country' id='base.ge'>
+                <field name='afip_code'>351</field>
+        </record> 
+        <record model='res.country' id='base.gh'>
+                <field name='afip_code'>117</field>
+        </record> 
+        <record model='res.country' id='base.gi'>
+                <field name='afip_code'>508</field>
+        </record> 
+        <record model='res.country' id='base.gl'>
+                <field name='afip_code'>228</field>
+        </record> 
+        <record model='res.country' id='base.gm'>
+                <field name='afip_code'>116</field>
+        </record> 
+        <record model='res.country' id='base.gn'>
+                <field name='afip_code'>118</field>
+        </record> 
+        <record model='res.country' id='base.gq'>
+                <field name='afip_code'>119</field>
+        </record> 
+        <record model='res.country' id='base.gr'>
+                <field name='afip_code'>413</field>
+        </record> 
+        <record model='res.country' id='base.gt'>
+                <field name='afip_code'>213</field>
+        </record> 
+        <record model='res.country' id='base.gu'>
+                <field name='afip_code'>511</field>
+        </record> 
+        <record model='res.country' id='base.gw'>
+                <field name='afip_code'>156</field>
+        </record> 
+        <record model='res.country' id='base.gy'>
+                <field name='afip_code'>214</field>
+        </record> 
+        <record model='res.country' id='base.hk'>
+                <field name='afip_code'>341</field>
+        </record> 
+        <record model='res.country' id='base.hn'>
+                <field name='afip_code'>216</field>
+        </record> 
+        <record model='res.country' id='base.hr'>
+                <field name='afip_code'>447</field>
+        </record> 
+        <record model='res.country' id='base.ht'>
+                <field name='afip_code'>215</field>
+        </record> 
+        <record model='res.country' id='base.hu'>
+                <field name='afip_code'>414</field>
+        </record> 
+        <record model='res.country' id='base.id'>
+                <field name='afip_code'>316</field>
+        </record> 
+        <record model='res.country' id='base.ie'>
+                <field name='afip_code'>415</field>
+        </record> 
+        <record model='res.country' id='base.il'>
+                <field name='afip_code'>319</field>
+        </record> 
+        <!--record model='res.country' id='base.im'>
+                <field name='afip_code'></field>
+        </record--> 
+        <record model='res.country' id='base.in'>
+                <field name='afip_code'>315</field>
+        </record> 
+        <record model='res.country' id='base.ir'>
+                <field name='afip_code'>318</field>
+        </record> 
+        <record model='res.country' id='base.is'>
+                <field name='afip_code'>416</field>
+        </record> 
+        <record model='res.country' id='base.it'>
+                <field name='afip_code'>417</field>
+        </record> 
+        <record model='res.country' id='base.jm'>
+                <field name='afip_code'>217</field>
+        </record> 
+        <record model='res.country' id='base.jo'>
+                <field name='afip_code'>321</field>
+        </record> 
+        <record model='res.country' id='base.jp'>
+                <field name='afip_code'>320</field>
+        </record> 
+        <record model='res.country' id='base.ke'>
+                <field name='afip_code'>120</field>
+        </record> 
+        <record model='res.country' id='base.kg'>
+                <field name='afip_code'>353</field>
+        </record> 
+        <record model='res.country' id='base.kh'>
+                <field name='afip_code'>306</field>
+        </record> 
+        <record model='res.country' id='base.ki'>
+                <field name='afip_code'>514</field>
+        </record> 
+        <record model='res.country' id='base.km'>
+                <field name='afip_code'>155</field>
+        </record> 
+        <record model='res.country' id='base.kn'>
+                <field name='afip_code'>238</field>
+        </record> 
+        <record model='res.country' id='base.kp'>
+                <field name='afip_code'>308</field>
+        </record> 
+        <record model='res.country' id='base.kr'>
+                <field name='afip_code'>309</field>
+        </record> 
+        <record model='res.country' id='base.kw'>
+                <field name='afip_code'>323</field>
+        </record>
+        <record model='res.country' id='base.ky'>
+                <field name='afip_code'>508</field>
+        </record> 
+        <record model='res.country' id='base.kz'>
+                <field name='afip_code'>352</field>
+        </record> 
+        <record model='res.country' id='base.la'>
+                <field name='afip_code'>324</field>
+        </record> 
+        <record model='res.country' id='base.lb'>
+                <field name='afip_code'>325</field>
+        </record> 
+        <record model='res.country' id='base.lc'>
+                <field name='afip_code'>234</field>
+        </record> 
+        <record model='res.country' id='base.li'>
+                <field name='afip_code'>418</field>
+        </record> 
+        <record model='res.country' id='base.lk'>
+                <field name='afip_code'>307</field>
+        </record> 
+        <record model='res.country' id='base.lr'>
+                <field name='afip_code'>122</field>
+        </record> 
+        <record model='res.country' id='base.ls'>
+                <field name='afip_code'>121</field>
+        </record> 
+        <record model='res.country' id='base.lt'>
+                <field name='afip_code'>442</field>
+        </record> 
+        <record model='res.country' id='base.lu'>
+                <field name='afip_code'>419</field>
+        </record> 
+        <record model='res.country' id='base.lv'>
+                <field name='afip_code'>441</field>
+        </record> 
+        <record model='res.country' id='base.ly'>
+                <field name='afip_code'>123</field>
+        </record> 
+        <record model='res.country' id='base.ma'>
+                <field name='afip_code'>127</field>
+        </record> 
+        <record model='res.country' id='base.mc'>
+                <field name='afip_code'>421</field>
+        </record> 
+        <record model='res.country' id='base.md'>
+                <field name='afip_code'>443</field>
+        </record> 
+        <record model='res.country' id='base.mg'>
+                <field name='afip_code'>124</field>
+        </record> 
+        <record model='res.country' id='base.mh'>
+                <field name='afip_code'>520</field>
+        </record> 
+        <record model='res.country' id='base.mk'>
+                <field name='afip_code'>450</field>
+        </record> 
+        <record model='res.country' id='base.ml'>
+                <field name='afip_code'>126</field>
+        </record> 
+        <record model='res.country' id='base.mm'>
+                <field name='afip_code'>304</field>
+        </record> 
+        <record model='res.country' id='base.mn'>
+                <field name='afip_code'>329</field>
+        </record> 
+        <record model='res.country' id='base.mo'>
+                <field name='afip_code'>344</field>
+        </record> 
+        <record model='res.country' id='base.mp'>
+                <field name='afip_code'>521</field>
+        </record> 
+        <record model='res.country' id='base.mr'>
+                <field name='afip_code'>129</field>
+        </record> 
+        <record model='res.country' id='base.ms'>
+                <field name='afip_code'>508</field>
+        </record> 
+        <record model='res.country' id='base.mt'>
+                <field name='afip_code'>420</field>
+        </record> 
+        <record model='res.country' id='base.mu'>
+                <field name='afip_code'>128</field>
+        </record>
+        <record model='res.country' id='base.mv'>
+                <field name='afip_code'>327</field>
+        </record> 
+        <record model='res.country' id='base.mw'>
+                <field name='afip_code'>125</field>
+        </record> 
+        <record model='res.country' id='base.mx'>
+                <field name='afip_code'>218</field>
+        </record> 
+        <record model='res.country' id='base.my'>
+                <field name='afip_code'>326</field>
+        </record> 
+        <record model='res.country' id='base.mz'>
+                <field name='afip_code'>151</field>
+        </record> 
+        <record model='res.country' id='base.na'>
+                <field name='afip_code'>158</field>
+        </record> 
+        <record model='res.country' id='base.ne'>
+                <field name='afip_code'>130</field>
+        </record> 
+        <record model='res.country' id='base.ng'>
+                <field name='afip_code'>131</field>
+        </record> 
+        <record model='res.country' id='base.ni'>
+                <field name='afip_code'>219</field>
+        </record> 
+        <!--record model='res.country' id='base.nk'>
+                <field name='afip_code'></field>
+        </record--> 
+        <record model='res.country' id='base.nl'>
+                <field name='afip_code'>423</field>
+        </record> 
+        <record model='res.country' id='base.no'>
+                <field name='afip_code'>422</field>
+        </record> 
+        <record model='res.country' id='base.np'>
+                <field name='afip_code'>330</field>
+        </record> 
+        <record model='res.country' id='base.nr'>
+                <field name='afip_code'>503</field>
+        </record> 
+<!--
+        <record model='res.country' id='base.nu'>
+                <field name='afip_code'></field>
+        </record> 
+-->
+        <record model='res.country' id='base.nz'>
+                <field name='afip_code'>504</field>
+        </record> 
+        <record model='res.country' id='base.om'>
+                <field name='afip_code'>328</field>
+        </record> 
+        <record model='res.country' id='base.pa'>
+                <field name='afip_code'>220</field>
+        </record> 
+        <record model='res.country' id='base.pe'>
+                <field name='afip_code'>222</field>
+        </record> 
+        <record model='res.country' id='base.pf'>
+                <field name='afip_code'>509</field>
+        </record> ACAS
+        <record model='res.country' id='base.pg'>
+                <field name='afip_code'>513</field>
+        </record> 
+        <record model='res.country' id='base.ph'>
+                <field name='afip_code'>312</field>
+        </record> 
+        <record model='res.country' id='base.pk'>
+                <field name='afip_code'>332</field>
+        </record> 
+        <record model='res.country' id='base.pl'>
+                <field name='afip_code'>424</field>
+        </record> 
+        <record model='res.country' id='base.pn'>
+                <field name='afip_code'>227</field>
+        </record> 
+        <record model='res.country' id='base.pr'>
+                <field name='afip_code'>223</field>
+        </record> 
+        <!--record model='res.country' id='base.ps'>
+                <field name='afip_code'></field>
+        </record--> 
+        <!--record model='res.country' id='base.ps'>
+                <field name='afip_code'></field>
+        </record--> 
+        <record model='res.country' id='base.pt'>
+                <field name='afip_code'>325</field>
+        </record> 
+        <record model='res.country' id='base.pw'>
+                <field name='afip_code'>516</field>
+        </record> 
+        <record model='res.country' id='base.py'>
+                <field name='afip_code'>221</field>
+        </record> 
+        <record model='res.country' id='base.qa'>
+                <field name='afip_code'>322</field>
+        </record> 
+        <record model='res.country' id='base.ro'>
+                <field name='afip_code'>427</field>
+        </record> 
+        <record model='res.country' id='base.ru'>
+                <field name='afip_code'>444</field>
+        </record> 
+        <record model='res.country' id='base.rw'>
+                <field name='afip_code'>133</field>
+        </record> 
+        <record model='res.country' id='base.sa'>
+                <field name='afip_code'>302</field>
+        </record> 
+        <record model='res.country' id='base.sb'>
+                <field name='afip_code'>518</field>
+        </record> 
+        <record model='res.country' id='base.sc'>
+                <field name='afip_code'>152</field>
+        </record> 
+        <record model='res.country' id='base.sd'>
+                <field name='afip_code'>138</field>
+        </record> 
+        <record model='res.country' id='base.se'>
+                <field name='afip_code'>429</field>
+        </record> 
+        <record model='res.country' id='base.sg'>
+                <field name='afip_code'>333</field>
+        </record> 
+        <record model='res.country' id='base.sh'>
+                <field name='afip_code'>227</field>
+        </record> 
+        <record model='res.country' id='base.si'>
+                <field name='afip_code'>449</field>
+        </record> 
+        <record model='res.country' id='base.sl'>
+                <field name='afip_code'>135</field>
+        </record> 
+        <record model='res.country' id='base.sm'>
+                <field name='afip_code'>428</field>
+        </record> 
+        <record model='res.country' id='base.sn'>
+                <field name='afip_code'>134</field>
+        </record> 
+        <record model='res.country' id='base.so'>
+                <field name='afip_code'>136</field>
+        </record> 
+        <record model='res.country' id='base.sr'>
+                <field name='afip_code'>232</field>
+        </record> 
+        <record model='res.country' id='base.st'>
+                <field name='afip_code'>157</field>
+        </record> 
+        <record model='res.country' id='base.sv'>
+                <field name='afip_code'>211</field>
+        </record> 
+        <record model='res.country' id='base.sy'>
+                <field name='afip_code'>334</field>
+        </record> 
+        <record model='res.country' id='base.sz'>
+                <field name='afip_code'>137</field>
+        </record> 
+        <record model='res.country' id='base.tc'>
+                <field name='afip_code'>508</field>
+        </record> 
+        <record model='res.country' id='base.td'>
+                <field name='afip_code'>111</field>
+        </record> 
+        <record model='res.country' id='base.tg'>
+                <field name='afip_code'>140</field>
+        </record> 
+        <record model='res.country' id='base.th'>
+                <field name='afip_code'>335</field>
+        </record> 
+        <record model='res.country' id='base.tj'>
+                <field name='afip_code'>354</field>
+        </record> 
+        <record model='res.country' id='base.tk'>
+                <field name='afip_code'>510</field>
+        </record> 
+        <record model='res.country' id='base.tm'>
+                <field name='afip_code'>355</field>
+        </record> 
+        <record model='res.country' id='base.tn'>
+                <field name='afip_code'>141</field>
+        </record> 
+        <record model='res.country' id='base.to'>
+                <field name='afip_code'>519</field>
+        </record> 
+        <record model='res.country' id='base.tr'>
+                <field name='afip_code'>436</field>
+        </record> 
+        <record model='res.country' id='base.tt'>
+                <field name='afip_code'>224</field>
+        </record> 
+        <record model='res.country' id='base.tv'>
+                <field name='afip_code'>517</field>
+        </record> 
+        <record model='res.country' id='base.tw'>
+                <field name='afip_code'>313</field>
+        </record> 
+        <record model='res.country' id='base.tz'>
+                <field name='afip_code'>139</field>
+        </record> 
+        <record model='res.country' id='base.ua'>
+                <field name='afip_code'>445</field>
+        </record> 
+        <record model='res.country' id='base.ug'>
+                <field name='afip_code'>142</field>
+        </record> 
+        <record model='res.country' id='base.us'>
+                <field name='afip_code'>212</field>
+        </record> 
+        <record model='res.country' id='base.uy'>
+                <field name='afip_code'>225</field>
+        </record> 
+        <record model='res.country' id='base.uz'>
+                <field name='afip_code'>356</field>
+        </record> 
+        <record model='res.country' id='base.va'>
+                <field name='afip_code'>431</field>
+        </record> 
+        <record model='res.country' id='base.vc'>
+                <field name='afip_code'>235</field>
+        </record> 
+        <record model='res.country' id='base.ve'>
+                <field name='afip_code'>226</field>
+        </record> 
+        <record model='res.country' id='base.vg'>
+                <field name='afip_code'>508</field>
+        </record> 
+        <record model='res.country' id='base.vn'>
+                <field name='afip_code'>337</field>
+        </record> 
+        <record model='res.country' id='base.vu'>
+                <field name='afip_code'>505</field>
+        </record> 
+        <record model='res.country' id='base.ws'>
+                <field name='afip_code'>506</field>
+        </record> 
+        <record model='res.country' id='base.ye'>
+                <field name='afip_code'>348</field>
+        </record> 
+        <record model='res.country' id='base.za'>
+                <field name='afip_code'>159</field>
+        </record> 
+        <record model='res.country' id='base.zm'>
+                <field name='afip_code'>144</field>
+        </record> 
+        <record model='res.country' id='base.zw'>
+                <field name='afip_code'>132</field>
+        </record> 
+    </data>
+</openerp>
+        

=== added file 'l10n_ar_wsafip_fex/data/res_currency_afip_code.xml'
--- l10n_ar_wsafip_fex/data/res_currency_afip_code.xml	1970-01-01 00:00:00 +0000
+++ l10n_ar_wsafip_fex/data/res_currency_afip_code.xml	2013-11-29 14:53:16 +0000
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+    
+<!-- UNIDADES DE MAYOR NECESIDAD -->
+
+        <!-- ARGENTINA -->
+        <record id="base.ARS" model="res.currency"> 
+                <field name="afip_code">PES</field>
+        </record> 
+        
+        <!-- EE.UU. -->
+        <record id="base.USD" model="res.currency"> 
+                <field name="afip_code">DOL</field>
+        </record> 
+        
+        <!-- MEXICO -->
+        <record id="base.MXN" model="res.currency"> 
+                <field name="afip_code">010</field>
+        </record> 
+        
+        <!-- URUGUAY -->
+        <record id="base.UYU" model="res.currency"> 
+                <field name="afip_code">011</field>
+        </record> 
+        
+        <!-- PARAGUAY -->
+        <record id="base.PYG" model="res.currency"> 
+                <field name="afip_code">029</field>
+        </record> 
+        
+        <!-- CANADA -->
+        <record id="base.CAD" model="res.currency"> 
+                <field name="afip_code">018</field>
+        </record> 
+        
+        <!-- JAPON -->
+        <record id="base.JPY" model="res.currency"> 
+                <field name="afip_code">019</field>
+        </record> 
+        
+        <!-- VENEZUELA -->
+        <record id="base.VEF" model="res.currency"> 
+                <field name="afip_code">021</field>
+        </record> 
+        
+        <!-- REINO UNIDO -->
+        <record id="base.GBP" model="res.currency"> 
+                <field name="afip_code">023</field>
+        </record> 
+        
+        <!-- AUSTRALIA -->
+        <record id="base.AUD" model="res.currency"> 
+                <field name="afip_code">026</field>
+        </record> 
+        
+        <!-- BOLIVIA -->
+        <record id="base.BOB" model="res.currency"> 
+                <field name="afip_code">031</field>
+        </record> 
+        
+        <!-- COLOMBIA -->
+        <record id="base.COP" model="res.currency"> 
+                <field name="afip_code">032</field>
+        </record> 
+        
+        <!-- CHILE -->
+        <record id="base.CLP" model="res.currency"> 
+                <field name="afip_code">033</field>
+        </record> 
+        
+        <!-- ECUADOR -->
+        <record id="base.ECS" model="res.currency"> 
+                <field name="afip_code">036</field>
+        </record> 
+        
+        <!-- BRASIL -->
+        <record id="base.BRL" model="res.currency"> 
+                <field name="afip_code">012</field>
+        </record> 
+        
+        <!-- PERU -->
+        <record id="base.PEN" model="res.currency"> 
+                <field name="afip_code">035</field>
+        </record>
+        
+        <!-- EURO --> 
+        <record id="base.EUR" model="res.currency"> 
+                <field name="afip_code">060</field>
+        </record> 
+        
+        
+        
+        
+        
+        
+<!-- UNIDADES DE MEDIANA NECESIDAD --> 
+ 
+        
+        <!-- RAND SUDAFRICANO -->
+        <record id="base.ZAR" model="res.currency"> 
+                <field name="afip_code">034</field>
+        </record> 
+        
+        <!-- HONG KONG DOLAR -->
+        <record id="base.HKD" model="res.currency"> 
+                <field name="afip_code">051</field>
+        </record>
+        
+        <!-- ISRAEL SHEKEL --> 
+        <record id="base.ILS" model="res.currency"> 
+                <field name="afip_code">030</field>
+        </record> 
+        
+        
+        
+        
+        
+        
+<!-- UNIDADES DE BAJA NECESIDAD --> 
+ 
+
+        
+        <!-- CORONAS DANESAS -->
+        <record id="base.DKK" model="res.currency"> 
+                <field name="afip_code">014</field>
+        </record>
+        
+        <!-- CORONAS NORUEGAS --> 
+        <record id="base.NOK" model="res.currency"> 
+                <field name="afip_code">015</field>
+        </record> 
+        
+        <!-- CORONAS SUECAS -->
+        <record id="base.SEK" model="res.currency"> 
+                <field name="afip_code">016</field>
+        </record> 
+        
+        <!-- CORONA CHECA -->
+        <record id="base.CZK" model="res.currency"> 
+                <field name="afip_code">024</field>
+        </record>
+        
+        <!-- DINAR YUGOSLAVO --> 
+        <record id="base.YUM" model="res.currency"> 
+                <field name="afip_code">025</field>
+        </record> 
+        
+        <!-- FLORIN (ANTILLAS HOLANDESAS) --> 
+        <record id="base.ANG" model="res.currency"> 
+                <field name="afip_code">028</field>
+        </record> 
+        
+        <!-- DOLAR DE SINGAPUR -->
+        <record id="base.SGD" model="res.currency"> 
+                <field name="afip_code">052</field>
+        </record>
+        
+        <!-- DOLAR DE JAMAICA --> 
+        <record id="base.JMD" model="res.currency"> 
+                <field name="afip_code">053</field>
+        </record> 
+        
+        <!-- DOLAR DE TAIWAN -->
+        <record id="base.TWD" model="res.currency"> 
+                <field name="afip_code">054</field>
+        </record> 
+        
+        <!-- FORINT (Hungría) --> 
+        <record id="base.HUF" model="res.currency"> 
+                <field name="afip_code">056</field>
+        </record> 
+        
+        <!-- BAHT TAILANDÉS -->
+        <record id="base.THB" model="res.currency"> 
+                <field name="afip_code">057</field>
+        </record>
+        
+        <!-- DINAR KUWAITI --> 
+        <record id="base.KWD" model="res.currency"> 
+                <field name="afip_code">059</field>
+        </record> 
+        
+        <!-- LEI RUMANO --> 
+        <record id="base.RON" model="res.currency"> 
+                <field name="afip_code">040</field>
+        </record> 
+        
+        <!-- PESO DOMINICANO -->
+        <record id="base.DOP" model="res.currency"> 
+                <field name="afip_code">042</field>
+        </record> 
+        
+        <!-- BALBOAS PANAMEÑAS -->
+        <record id="base.PAB" model="res.currency"> 
+                <field name="afip_code">043</field>
+        </record>
+        
+        <!-- CORDOBA NICARAGUENSE --> 
+        <record id="base.NIO" model="res.currency"> 
+                <field name="afip_code">044</field>
+        </record> 
+        
+        <!-- DIRHAM MARROQUI -->
+        <record id="base.MAD" model="res.currency"> 
+                <field name="afip_code">045</field>
+        </record>
+        
+        <!-- LIBRA EGIPCIA --> 
+        <record id="base.EGP" model="res.currency"> 
+                <field name="afip_code">046</field>
+        </record> 
+        
+        <!-- RIYAL SAUDITA --> 
+        <record id="base.SAR" model="res.currency"> 
+                <field name="afip_code">047</field>
+        </record> 
+        
+        <!-- ZLOTY POLACO -->
+        <record id="base.PLN" model="res.currency"> 
+                <field name="afip_code">061</field>
+        </record> 
+        
+        <!-- RUPIA HINDU -->
+        <record id="base.INR" model="res.currency"> 
+                <field name="afip_code">062</field>
+        </record>
+        
+        <!-- LEMPIRA HONDUREÑA --> 
+        <record id="base.HNL" model="res.currency"> 
+                <field name="afip_code">063</field>
+        </record> 
+        
+        <!-- YUAN (CHINA) -->
+        <record id="base.CNY" model="res.currency"> 
+                <field name="afip_code">064</field>
+        </record>
+        
+        <!-- FRANCO SUIZO --> 
+        <record id="base.CHF" model="res.currency"> 
+                <field name="afip_code">009</field>
+        </record> 
+
+
+    </data>
+</openerp>

=== added file 'l10n_ar_wsafip_fex/data/wsafip_fex_config.xml'
--- l10n_ar_wsafip_fex/data/wsafip_fex_config.xml	1970-01-01 00:00:00 +0000
+++ l10n_ar_wsafip_fex/data/wsafip_fex_config.xml	2013-11-29 14:53:16 +0000
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C), 2012, OpenERP - Team de Localización Argentina.
+ https://launchpad.net/~openerp-l10n-ar-localization
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+-->
+<openerp>
+    <data>
+
+    <!-- Generate request -->
+
+        <record id="view_wsafip_fex_config" model="ir.ui.view">
+            <field name="name">l10n_ar_wsafip_fex.config.form</field>
+            <field name="model">l10n_ar_wsafip_fex.config</field>
+            <field name="inherit_id" ref="base.res_config_view_base"/>
+            <field name="arch" type="xml">
+              <data>
+                <form position="attributes" version="7.0">
+                    <attribute name="string">AFIP Web service Configuration - Request Generation</attribute>
+                </form>
+                <group string="res_config_contents" position="replace">
+                    <group colspan="8">
+                        <field name="company_id" widget="selection" on_change="update_data(company_id)"/>
+                        <field name="wsfex_certificate_id" widget="selection"/>
+                        <field name="wsfex_for_homologation"/>
+                        <field name="wsfex_point_of_sale"/>
+                    </group>
+                </group>
+              </data>
+            </field>
+        </record>
+
+        <record id="action_wsafip_fex_config" model="ir.actions.act_window">
+            <field name="name">Export Electronic Invoice Configuration</field>
+            <field name="type">ir.actions.act_window</field>
+            <field name="res_model">l10n_ar_wsafip_fex.config</field>
+            <field name="view_id" ref="view_wsafip_fex_config"/>
+            <field name="view_type">form</field>
+            <field name="view_mode">form</field>
+            <field name="target">new</field>
+        </record>
+
+        <record id="wsafip_fex_config_todo" model="ir.actions.todo">
+            <field name="name">AFIP Export Electronic Invoice Web service Configuration - Setting POS</field>
+            <field name="action_id" ref="action_wsafip_fex_config"/>
+            <field name="sequence">40</field>
+            <field name="type">automatic</field>
+        </record>
+
+    </data>
+</openerp>
+<!-- vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+     -->

=== modified file 'l10n_ar_wsafip_fex/data/wsafip_server.xml'
--- l10n_ar_wsafip_fex/data/wsafip_server.xml	2013-11-14 18:47:14 +0000
+++ l10n_ar_wsafip_fex/data/wsafip_server.xml	2013-11-29 14:53:16 +0000
@@ -17,7 +17,7 @@
  along with this program. If not, see <http://www.gnu.org/licenses/>.
 -->
 <openerp>
-    <data>
+    <data noupdate="1">
 
     <record model='wsafip.server' id='wsfex_prod'>
         <field name='name'>Factura Electrónica de Exportación</field>

=== removed directory 'l10n_ar_wsafip_fex/i18n'
=== removed file 'l10n_ar_wsafip_fex/i18n/es_AR.po'
--- l10n_ar_wsafip_fex/i18n/es_AR.po	2013-11-12 18:24:53 +0000
+++ l10n_ar_wsafip_fex/i18n/es_AR.po	1970-01-01 00:00:00 +0000
@@ -1,288 +0,0 @@
-# Translation of OpenERP Server.
-# This file contains the translation of the following modules:
-# 	* l10n_ar_wsafip
-# Cristian S. Rocha <cristian.rocha@xxxxxxxxxxxxxxxxxxxxxxxx>, 2013.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: OpenERP Server 7.0\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-25 13:25+0000\n"
-"PO-Revision-Date: 2013-09-25 10:37-0300\n"
-"Last-Translator: Cristian S. Rocha <cristian.rocha@xxxxxxxxxxxxxxxxxxxxx."
-"ar>\n"
-"Language-Team: Español Argentina <cristian.rocha@xxxxxxxxxxxxxxxxxxxxxxxx>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n!=1);\n"
-"X-Generator: Gtranslator 2.91.6\n"
-
-#. module: l10n_ar_wsafip
-#: field:l10n_ar_wsafip.keygen_config,city:0
-msgid "City"
-msgstr "Ciudad"
-
-#. module: l10n_ar_wsafip
-#: model:res.groups,name:l10n_ar_wsafip.group_wsafip_admin
-msgid "AFIP WebService Manager"
-msgstr "Administrador del WebService"
-
-#. module: l10n_ar_wsafip
-#: model:ir.actions.act_window,name:l10n_ar_wsafip.act_wsafip_auth
-msgid "AFIP Connections"
-msgstr "Conexiones AFIP"
-
-#. module: l10n_ar_wsafip
-#: field:l10n_ar_wsafip.keygen_config,cuit:0
-msgid "CUIT"
-msgstr "CUIT"
-
-#. module: l10n_ar_wsafip
-#: selection:wsafip.connection,state:0
-msgid "Invalid"
-msgstr "Inválido"
-
-#. module: l10n_ar_wsafip
-#: field:l10n_ar_wsafip.keygen_config,state_id:0
-msgid "State"
-msgstr "Estado"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.connection,certificate:0
-msgid "Certificate Signer"
-msgstr "Firmante del Certificado"
-
-#. module: l10n_ar_wsafip
-#: model:ir.actions.act_window,name:l10n_ar_wsafip.action_wsafip_loadcert_config
-#: view:l10n_ar_wsafip.loadcert_config:0
-msgid "AFIP Web service Configuration - Load Certificate"
-msgstr "Configuración del WebService del AFIP - Carga del Certificado"
-
-#. module: l10n_ar_wsafip
-#: field:l10n_ar_wsafip.keygen_config,department:0
-msgid "Department"
-msgstr "Departamento\t"
-
-#. module: l10n_ar_wsafip
-#: model:ir.model,name:l10n_ar_wsafip.model_l10n_ar_wsafip_loadcert_config
-msgid "l10n_ar_wsafip.loadcert_config"
-msgstr "Configuración del WebService del AFIP - Carga del Certificado"
-
-#. module: l10n_ar_wsafip
-#: view:wsafip.connection:0
-msgid "AFIP Authorization"
-msgstr "Autorización del AFIP"
-
-#. module: l10n_ar_wsafip
-#: model:ir.model,name:l10n_ar_wsafip.model_wsafip_server
-msgid "wsafip.server"
-msgstr "Servidor"
-
-#. module: l10n_ar_wsafip
-#: field:l10n_ar_wsafip.keygen_config,name:0 field:wsafip.connection,name:0
-#: field:wsafip.server,name:0
-msgid "Name"
-msgstr "Nombre"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.connection,state:0
-msgid "Status"
-msgstr "Estado"
-
-#. module: l10n_ar_wsafip
-#: model:res.groups,name:l10n_ar_wsafip.group_wsafip_user
-msgid "AFIP WebService User"
-msgstr "Usuario del Webservice del AFIP"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.connection,server_id:0
-msgid "Service Server"
-msgstr "Servidor"
-
-#. module: l10n_ar_wsafip
-#: model:ir.module.category,description:l10n_ar_wsafip.module_category_l10n_ar_wsafip
-msgid "Argentine Web Service Localization"
-msgstr "Localización Argentina de WebService"
-
-#. module: l10n_ar_wsafip
-#: model:ir.ui.menu,name:l10n_ar_wsafip.menu_action_wsafip_auth
-msgid "Sessions"
-msgstr "Sesiones"
-
-#. module: l10n_ar_wsafip
-#: field:l10n_ar_wsafip.loadcert_config,request_string:0
-msgid "Certificate string"
-msgstr "Texto del certificado"
-
-#. module: l10n_ar_wsafip
-#: view:wsafip.server:0
-msgid "AFIP server"
-msgstr "Servidor del AFIP"
-
-#. module: l10n_ar_wsafip
-#: model:ir.model,name:l10n_ar_wsafip.model_wsafip_connection
-msgid "wsafip.connection"
-msgstr "Conexión"
-
-#. module: l10n_ar_wsafip
-#: model:ir.actions.act_window,name:l10n_ar_wsafip.action_wsafip_keygen_config
-#: view:l10n_ar_wsafip.keygen_config:0
-msgid "AFIP Web service Configuration - Request Generation"
-msgstr "Configuración del WebService del AFIP - Generación del Requerimiento"
-
-#. module: l10n_ar_wsafip
-#: view:l10n_ar_wsafip.keygen_config:0 view:l10n_ar_wsafip.loadcert_config:0
-msgid "res_config_contents"
-msgstr "Contenidos"
-
-#. module: l10n_ar_wsafip
-#: selection:wsafip.connection,state:0
-msgid "Connected"
-msgstr "Conectado"
-
-#. module: l10n_ar_wsafip
-#: code:addons/l10n_ar_wsafip/wsafip_connection.py:174
-#, python-format
-msgid "Please check if your VAT is an Argentina one before continue."
-msgstr "Verifique que su CUIT es de Argentina antes de continuar."
-
-#. module: l10n_ar_wsafip
-#: code:addons/l10n_ar_wsafip/wsafip_connection.py:174
-#, python-format
-msgid "Error in VATs"
-msgstr "Error en el CUIT"
-
-#. module: l10n_ar_wsafip
-#: code:addons/l10n_ar_wsafip/wsafip_connection.py:186
-#, python-format
-msgid "Certificate Error"
-msgstr "Error en el Certificado"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.server,class:0
-msgid "Class"
-msgstr "Clase"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.connection,generationtime:0
-msgid "Generation Time"
-msgstr "Fecha de Generación"
-
-#. module: l10n_ar_wsafip
-#: selection:wsafip.connection,state:0
-msgid "Disconnected"
-msgstr "Desconectado"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.server,url:0
-msgid "URL"
-msgstr "URL"
-
-#. module: l10n_ar_wsafip
-#: field:l10n_ar_wsafip.keygen_config,country_id:0
-msgid "Country"
-msgstr "País"
-
-#. module: l10n_ar_wsafip
-#: selection:wsafip.server,class:0
-msgid "Homologation"
-msgstr "Homologación"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.connection,token:0
-msgid "Token"
-msgstr "Token"
-
-#. module: l10n_ar_wsafip
-#: model:ir.model,name:l10n_ar_wsafip.model_l10n_ar_wsafip_keygen_config
-msgid "l10n_ar_wsafip.keygen_config"
-msgstr "Generación de Clave"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.connection,batch_sequence_id:0
-msgid "Batch Sequence"
-msgstr "Secuencia de Lote"
-
-#. module: l10n_ar_wsafip
-#: view:wsafip.connection:0
-msgid "Login"
-msgstr "Login"
-
-#. module: l10n_ar_wsafip
-#: model:ir.module.category,name:l10n_ar_wsafip.module_category_l10n_ar_wsafip
-#: model:ir.ui.menu,name:l10n_ar_wsafip.menu_wsafip
-msgid "AFIP Web Services"
-msgstr "Servicios Web del AFIP"
-
-#. module: l10n_ar_wsafip
-#: code:addons/l10n_ar_wsafip/wsafip_connection.py:190
-#, python-format
-msgid "AFIP Message"
-msgstr "Mensaje del AFIP"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.server,code:0
-msgid "Code"
-msgstr "Código"
-
-#. module: l10n_ar_wsafip
-#: selection:wsafip.connection,state:0
-msgid "Clock shifted"
-msgstr "Reloj desincronizado"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.connection,uniqueid:0
-msgid "Unique ID"
-msgstr "Identificación única"
-
-#. module: l10n_ar_wsafip
-#: model:ir.actions.act_window,name:l10n_ar_wsafip.act_wsafip_server
-#: view:wsafip.connection:0 view:wsafip.server:0
-msgid "AFIP Servers"
-msgstr "Servidores"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.connection,expirationtime:0
-msgid "Expiration Time"
-msgstr "Fecha de Expiración"
-
-#. module: l10n_ar_wsafip
-#: model:ir.ui.menu,name:l10n_ar_wsafip.menu_action_wsafip_server
-msgid "Servers"
-msgstr "Servidores"
-
-#. module: l10n_ar_wsafip
-#: selection:wsafip.server,class:0
-msgid "Production"
-msgstr "Producción"
-
-#. module: l10n_ar_wsafip
-#: field:l10n_ar_wsafip.loadcert_config,request_id:0
-msgid "Certificate Request"
-msgstr "Requerimiento de Certificación"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.connection,sign:0
-msgid "Sign"
-msgstr "Firma"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.connection,partner_id:0
-msgid "Partner"
-msgstr "Razón Social"
-
-#. module: l10n_ar_wsafip
-#: field:wsafip.connection,logging_id:0
-msgid "Authorization Server"
-msgstr "Servidor de Autorización"
-
-#. module: l10n_ar_wsafip
-#: field:l10n_ar_wsafip.keygen_config,company_id:0
-msgid "Company"
-msgstr "Compañia"
-
-#. module: l10n_ar_wsafip
-#: field:l10n_ar_wsafip.loadcert_config,response_string:0
-msgid "Response string"
-msgstr "Texto de respuesta"

=== modified file 'l10n_ar_wsafip_fex/invoice.py'
--- l10n_ar_wsafip_fex/invoice.py	2013-11-14 18:47:14 +0000
+++ l10n_ar_wsafip_fex/invoice.py	2013-11-29 14:53:16 +0000
@@ -28,16 +28,24 @@
 # Number Filter
 re_number = re.compile(r'\d{8}')
 
-def _calc_concept(product_types):
-    if product_types == set(['consu']):
-        concept = '1'
-    elif product_types == set(['service']):
-        concept = '2'
-    elif product_types == set(['consu','service']):
-        concept = '4'
-    else:
-        concept = False
-    return concept
+#~ def _calc_concept(product_types):
+    #~ if product_types == set(['consu']):
+        #~ concept = '1'
+    #~ elif product_types == set(['product']):
+        #~ concept = '1'
+    #~ elif product_types == set(['consu','product']):
+        #~ concept = '1'
+    #~ elif product_types == set(['service']):
+        #~ concept = '2'
+    #~ elif product_types == set(['consu','service']):
+        #~ concept = '4'
+    #~ elif product_types == set(['product','service']):
+        #~ concept = '4'
+    #~ elif product_types == set(['product','consu','service']):
+        #~ concept = '4'
+    #~ else:
+        #~ concept = False
+    #~ return concept
 
 class invoice(osv.osv):
 
@@ -51,15 +59,152 @@
 
     _inherit = "account.invoice"
     _columns = {
+        'afip_export_id': fields.integer('ID', size=15),
+        #~ 'afip_export_concept': fields.function(_get_concept,
+                                               #~ type="selection",
+                                               #~ selection=[('1','Exportacion Definitiva de Bienes'),
+                                                          #~ ('2','Servicios'),
+                                                          #~ ('4','Otros')],
+                                               #~ method=True,
+                                               #~ string="AFIP Export concept",
+                                               #~ readonly=1),
+        'afip_export_concept': fields.selection([('1','Exportacion Definitiva de Bienes'),
+                                                 ('2','Servicios'),
+                                                 ('4','Otros')],
+                                                 'AFIP Export concept', 
+                                                 select=True, 
+                                                 required=True),
+        'afip_export_lang_invoice': fields.selection([('1','Español'),
+                                                      ('2','Ingles'),
+                                                      ('3','Portugues')],
+                                                      'AFIP Invoice Language', 
+                                                      select=True, 
+                                                      required=True),
+        'afip_export_obs_com': fields.text('Trade Observations'),
+        'afip_export_incoterm': fields.many2one('afip.incoterms', 'Incoterm'),
+        'afip_export_exist_perm' : fields.selection([('S','Yes'), 
+                                                     ('N','No')], 
+                                                     'Has export permissions', 
+                                                     select=True, 
+                                                     required=True),
+        'afip_export_permissions': fields.one2many('afip.export.permissions', 'invoice_id', 'Permisos'),
+        'afip_export_rsp': fields.related('partner_id', 'responsability_id', string='Customer Responsability Relation'),
+        'afip_export_rspn': fields.related('afip_export_rsp', 'code', type='char', store=True, string='AFIP Responsability CODE'),
     }
 
     _defaults = {
+        'afip_export_exist_perm': 'N',
     }
     
+    def onchange_partner_id(self, cr, uid, ids, type, partner_id, date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False):
+        result = {}
+        result = super(invoice,self).onchange_partner_id(cr, uid, ids, type, partner_id, date_invoice, payment_term, partner_bank_id, company_id)
+        if partner_id:
+            partner = self.pool.get('res.partner').browse(cr, uid, partner_id)
+            if partner:
+                rsp_code = partner.responsability_id.code
+                if rsp_code:
+                    result['value']['afip_export_rspn'] = rsp_code
+        return result
+
+    def get_item(self, cr, uid, ids, *args):
+        r = {}
+        _ids = [ids] if isinstance(ids, int) else ids
+
+        for inv in self.browse(cr, uid, _ids):
+            r[inv.id] = []
+            ##Pro_codigo --> NOT REQUIRED. CODIGO INTERNO DEL PRODUCTO/SERVICIO.
+            for item in inv.invoice_line:
+                uom = item.uos_id.afip_code
+                if uom in [0, 97, 99]:
+                    r[inv.id].append({
+                        'Pro_codigo': '',
+                        'Pro_ds': item.name,
+                        'Pro_qty': 0,
+                        'Pro_umed': item.uos_id.afip_code,
+                        'Pro_precio_uni': 0,
+                        'Pro_bonificacion': 0,
+                        'Pro_total_item': item.price_subtotal,
+                    })
+                else:
+                    r[inv.id].append({
+                        'Pro_codigo': '',
+                        'Pro_ds': item.name,
+                        'Pro_qty': item.quantity,
+                        'Pro_umed': item.uos_id.afip_code, 
+                        'Pro_precio_uni': item.price_unit,
+                        'Pro_bonificacion': (item.price_unit/100)*item.discount,
+                        'Pro_total_item': item.price_subtotal,
+                    })
+
+        return r[ids] if isinstance(ids, int) else r
+        
+    def get_permiso(self, cr, uid, ids, *args):
+        r = {}
+        _ids = [ids] if isinstance(ids, int) else ids
+
+        for inv in self.browse(cr, uid, _ids):
+            r[inv.id] = []
+            if inv.afip_export_exist_perm == "N":
+                return
+            for item in inv.afip_export_permissions:
+                if not item.valid_permission:
+                    continue
+                r[inv.id].append({
+                    'Id_permiso': item.permission_code,
+                    'Dst_merc': item.dst_merc.afip_code,
+                })
+
+        return r[ids] if isinstance(ids, int) else r
+        
+    def get_existepermiso(self, cr, uid, ids, *args):
+
+        _ids = [ids] if isinstance(ids, int) else ids
+
+        inv = self.browse(cr, uid, _ids)[0]
+        if inv.afip_export_exist_perm == "N":
+            tipo_expo = inv.afip_export_concept
+            comprobante = inv.journal_id.journal_class_id.afip_code
+            if int(tipo_expo) in [2, 4]:
+                return ''
+            elif int(comprobante) in [20, 21]:
+                return ''
+            else:
+                return 'N'
+        elif inv.afip_export_exist_perm == "S":
+            return 'S'
+        else:
+            return ''
+    
+    def get_related_invoices(self, cr, uid, ids, *args):
+        """
+        List related invoice information to fill CbtesAsoc
+        """
+        r = {}
+        _ids = [ids] if isinstance(ids, int) else ids
+
+        for inv in self.browse(cr, uid, _ids):
+            r[inv.id] = []
+            rel_inv_ids = self.search(cr, uid, [('number','=',inv.origin),
+                                                ('state','not in',['draft','proforma','proforma2','cancel'])])
+            for rel_inv in self.browse(cr, uid, rel_inv_ids):
+                journal = rel_inv.journal_id
+                r[inv.id].append({
+                    'Cbte_tipo': journal.journal_class_id.afip_code,
+                    'Cbte_punto_vta': journal.point_of_sale,
+                    'Cbte_nro': rel_inv.invoice_number,
+                    'Cbte_cuit': '', #COMPLETAR
+                })
+
+        return r[ids] if isinstance(ids, int) else r
+    
     def copy(self, cr, uid, id, default=None, context=None):
         default = default or {}
         default.update({
-            'state':'draft',
+            'afip_export_id': False,
+            'afip_export_permissions': False,
+            'afip_export_exist_perm': 'N',
+            'state': 'draft',
             'afip_error_id': False,
             'afip_batch_number': False,
             'afip_cae_due': False,
@@ -69,6 +214,61 @@
             'date_due': default.get('date_due', False)
         })
         return super(invoice, self).copy(cr, uid, id, default, context)
+    
+    def onchange_permissions(self, cr, uid, ids, afip_export_exist_perm, context=None):
+        
+        if ids:
+            if afip_export_exist_perm: 
+                if afip_export_exist_perm == 'S':
+                    return True
+                else:
+                    cr.execute('DELETE FROM afip_export_permissions WHERE invoice_id=%s',(ids))
+                    return {'value': {'afip_export_permissions': False}}
+            else:
+                cr.execute('DELETE FROM afip_export_permissions WHERE invoice_id=%s',(ids))
+                return {'value': {'afip_export_permissions': False}}
+        else:
+            return True
+            
+    def button_check_permissions(self, cr, uid, ids, context=None):
+        
+        result = ""
+        list_of_permissions = self.pool.get('account.invoice').browse(cr, uid, ids)[0].afip_export_permissions
+        for permission in list_of_permissions:
+            if not permission.dst_merc:
+                raise osv.except_osv(_(u'Error!'),
+                                     _(u'Primero debe elegir el pais de destino.'))
+            if not permission.permission_code or len(permission.permission_code) < 16:
+                raise osv.except_osv(_(u'Error!'),
+                                     _(u'El codigo del permiso debe estar completo.')) 
+            inv = self.browse(cr, uid, ids)[0]
+            conn = inv.journal_id.afip_connection_id
+            if not conn:
+                raise osv.except_osv(_(u'Connection Error'),
+                                     _(u'No hay una conexión definida! Cree/seleccione una sesión válida o hable con su administrador del sistema.'))
+                                     
+            if conn and conn.server_id.code == 'wsfex':
+                try:
+                    result = conn.server_id.wsfex_check_permissions(conn.id, permission.permission_code, permission.dst_merc.afip_code, context)
+                    if result.get(conn.server_id.id) != 'OK':
+                        raise osv.except_osv(_(u'Error!'),
+                                             _(u'El permiso "'+permission.permission_code+'" no es valido!'))
+                    else:
+                        permission.write({'valid_permission': True}) 
+                except:
+                    result = False
+                    raise osv.except_osv(_(u'Error!'),
+                                         _(u'No se pudo chequear el permiso.')) 
+                                         
+        if result == "":
+            raise osv.except_osv(_(u'Error!'),
+                                 _(u'Chequee que el diario elegido sea el correcto.'))
+        if result.get(conn.server_id.id) == 'OK': 
+            #~ 
+            return True
+        else:
+            raise osv.except_osv(_(u'Error!'),
+                                 _(u'Uno o más permisos son inválidos. Verifique.')) 
 
     def action_retrieve_cae(self, cr, uid, ids, context=None):
         
@@ -83,7 +283,9 @@
         conn_obj = self.pool.get('wsafip.connection')
         serv_obj = self.pool.get('wsafip.server')
         currency_obj = self.pool.get('res.currency')
+        
 
+        next_id = 0
         Servers = {}
         Requests = {}
         Inv2id = {}
@@ -102,52 +304,64 @@
             # Take the last number of the "number".
             # Could not work if your number have not 8 digits.
             invoice_number = int(re_number.search(inv.number).group())
+            
+            last_id = serv_obj.wsfex_get_last_id(cr, uid, [conn.server_id.id], conn.id)            
+            if not last_id: 
+                raise osv.except_osv(_(u'Error!'),
+                                     _(u'No se pudo obtener el ultimo ID realizado. Verifique la conexion al servidor.')) 
+            next_id = last_id + 1
 
             _f_date = lambda d: d and d.replace('-','')
-
+            
+            if journal.journal_class_id.afip_code not in [19, 20, 21]: 
+                raise osv.except_osv(_(u'Error!'),
+                                     _(u'El comprobante debe estar entre los permitidos por WSFEX'))
+                                     
             # Build request dictionary
             if conn.id not in Requests: Requests[conn.id] = {}
             Requests[conn.id][inv.id]=dict( (k,v) for k,v in {
-                'Id': journal.point_of_sale, ######## EDIT (AVERIGUAR ID)
-                'CbteFch': _f_date(inv.date_invoice),
-                'CbteTipo': journal.journal_class_id.afip_code,
-                'PtoVta': journal.point_of_sale,
-                'CbteNro': journal.point_of_sale, ########## BUSCAR NUMERO (00000103 por ej)
-                'TipoExpo': inv.afip_concept, ############## EDITAR PARA QUE SEA TIPO_EXPO DIFERENTE AL DE LA WSFE
+                'Id': next_id,
+                'Fecha_cbte': _f_date(inv.date_invoice),
+                'Cbte_Tipo': journal.journal_class_id.afip_code,
+                'Punto_vta': journal.point_of_sale,
+                'Cbte_nro': invoice_number,
+                'Tipo_expo': inv.afip_export_concept,
                 
+                'Permiso_existente': self.get_existepermiso(cr, uid, inv.id),
                 'Permisos': { 'Permiso': self.get_permiso(cr, uid, inv.id) },
                 
-                'DstCmp': inv.partner_id.country_id.afip_code,
+                'Dst_cmp': inv.partner_id.country_id.afip_code,
                 'Cliente': inv.partner_id.name,
-                'CuitPaisCliente': inv.partner_id.country_id.cuit_juridica if inv.partner_id.is_company == True else inv.partner_id.country_id.cuit_fisica,
-                'DomicilioCliente': inv.partner_id.street+", "+inv.partner_id.city,
-                'IdImpositivo': ######### AVERIGUAR COMO COMPLETAR ESTE CAMPO
-                
-                'MonId': inv.currency_id.afip_code,
-                'MonCotiz': currency_obj.compute(cr, uid, inv.currency_id.id, inv.company_id.currency_id.id, 1.),
-                
-                'ObsComerciales': inv.comment, ####### NECESARIO HACER UN CAMPO NUEVO LLAMADO OBS COMERCIALES?
-                'ImpTotal': inv.amount_total,
+                'Cuit_pais_cliente': inv.partner_id.country_id.cuit_juridica if inv.partner_id.is_company == True else inv.partner_id.country_id.cuit_fisica,
+                'Domicilio_cliente': inv.partner_id.street+", "+inv.partner_id.city,
+                'Id_impositivo': None, # AVERIGUAR COMO COMPLETAR ESTE CAMPO. AUN NO ES NECESARIO PORQUE YA TENEMOS CuitPaisCliente, NOT REQUIRED
+                
+                'Moneda_Id': inv.currency_id.afip_code,
+                'Moneda_ctz': currency_obj.compute(cr, uid, inv.currency_id.id, inv.company_id.currency_id.id, 1.),
+                
+                'Obs_comerciales': inv.afip_export_obs_com,
+                'Imp_total': inv.amount_total,
                 'Obs': inv.comment,
                 
-                'CbtesAsoc': {'CbteAsoc': self.get_related_invoices(cr, uid, inv.id) },
-                
-                'FormaPago': inv.payment_term,
-                'Incoterms': inv.payment_term, ####### HACER FUNCIONALIDAD DE INCOTERMS
-                'IncotermsDs': inv.payment_term, ####### HACER FUNCIONALIDAD DE INCOTERMS DESCRIPTION (VACIO WHEN Incoterms == None)
-                'IdiomaCbte': inv.payment_term, ####### HACER FUNCIONALIDAD IDIOMAS (son solo 3, necesario hacer una tabla?)
-                
-                'Items': { 'Item': self.get_item(cr, uid, inv.id) }, ####### HACER FUNCIONALIDAD ITEMS
+                'Cmps_asoc': {'Cmp_asoc': self.get_related_invoices(cr, uid, inv.id) },
+                
+                'Forma_pago': inv.payment_term.name,
+                'Incoterms': inv.afip_export_incoterm.afip_export_incoterm_code,
+                'Incoterms_Ds': inv.afip_export_incoterm.afip_export_incoterm_desc if inv.afip_export_incoterm.afip_export_incoterm_code else "", # MODIFICAR A QUE SEA ESCRITO POR EL USUARIO. ESTA TEMPORALMENTE DEFINIDO COMO SU PROPIA DESCRIPCION
+                'Idioma_cbte': inv.afip_export_lang_invoice,
+                
+                'Items': { 'Item': self.get_item(cr, uid, inv.id) },
                 
             }.iteritems() if v is not None)
             Inv2id[invoice_number] = inv.id
 
         for c_id, req in Requests.iteritems():
             conn = conn_obj.browse(cr, uid, c_id)
-            res = serv_obj.wsfex_get_cae(cr, uid, [conn.server_id.id], c_id, req) # TODO:
+            res = serv_obj.wsfex_get_cae(cr, uid, [conn.server_id.id], c_id, req)
             for k, v in res.iteritems():
                 if 'CAE' in v:
                     self.write(cr, uid, Inv2id[k], {
+                        'afip_export_id': next_id,
                         'afip_cae': v['CAE'],
                         'afip_cae_due': v['CAEFchVto'],
                     })
@@ -162,4 +376,53 @@
 
 invoice()
 
+
+
+############## INCOTERMS
+
+class afip_incoterms(osv.osv):
+    
+    _name = "afip.incoterms"
+    _rec_name = 'afip_export_incoterm_code'
+    _columns = {
+        'afip_export_incoterm_code': fields.char('INCOTERM AFIP Code', size=3, required=True),
+        'afip_export_incoterm_desc': fields.char('INCOTERM Description', size=20, required=True),
+    }
+    
+    #wsfex_update_incoterms <-- se actualiza mediante esa funcion en wsafip_server
+
+afip_incoterms()
+
+
+
+############### Units of Measure
+
+class product_uom(osv.osv):
+    
+    _name = 'product.uom'
+    _inherit = "product.uom"
+    _columns = {
+        'afip_code': fields.integer('UoM AFIP Code', size=2, required=True),
+    }
+    
+    #wsfex_update_uom <-- se actualiza mediante esa funcion en wsafip_server
+
+product_uom()
+
+
+
+############### EXPORT PERMISSIONS
+
+class afip_export_permissions(osv.osv):
+    _name = "afip.export.permissions"
+    _columns = {
+        'invoice_id': fields.many2one('account.invoice', 'Invoice ID'),
+        'permission_code': fields.char('Codigo Despacho/Permiso de Embarque', size=16),
+        'dst_merc': fields.many2one('res.country', 'Pais destino de la mercaderia', domain="[('afip_code','!=',None)]"),
+        'valid_permission': fields.boolean('Valid Permission')
+    }
+            
+afip_export_permissions()
+
+
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'l10n_ar_wsafip_fex/journal.py'
--- l10n_ar_wsafip_fex/journal.py	2013-11-14 18:47:14 +0000
+++ l10n_ar_wsafip_fex/journal.py	2013-11-29 14:53:16 +0000
@@ -21,23 +21,72 @@
 from openerp.osv import fields, osv
 from openerp.tools.translate import _
 import logging
+import urllib2
 
 _logger = logging.getLogger(__name__)
+_schema = logging.getLogger(__name__ + '.schema')
 
 class account_journal(osv.osv):
 
 
-    #TODO: aqui deberia estar el _get_afip_items_generated para WSFEX. 
-    def _get_afip_items_generated(self, cr, uid, ids, fields_name, arg, context=None):
-        if context is None:
-            context={}
-        glin = lambda conn, ps, jc: conn.server_id.wsfex_get_last_invoice_number(conn.id, ps, jc)[conn.server_id.id]
+    def _get_fex_afip_state(self, cr, uid, ids, fields_name, arg, context=None):
+
+        if context is None:
+            context={}
+        r={}
+        for journal in self.browse(cr, uid, ids):
+            conn = journal.afip_connection_id
+            if not conn:
+                r[journal.id] = 'not available'
+            elif conn.server_id.code != 'wsfex':
+                r[journal.id] = 'connection_service_error'
+            else:
+                # Try to login just one time.
+                try:
+                    conn.login()
+                    if conn.state not in  [ 'connected', 'clockshifted' ]:
+                        r[journal.id] = 'connection_error'
+                    else:
+                        authserver, appserver, dbserver = conn.server_id.wsfex_get_status(conn.id)[conn.server_id.id]
+                        if authserver == 'OK':
+                            r[journal.id] = 'connected'
+                        else:
+                            if appserver != 'OK':
+                                r[journal.id] = 'connected_but_appserver_error'
+                            elif dbserver != 'OK':
+                                r[journal.id] = 'connected_but_dbserver_error'
+                            else:
+                                r[journal.id] = 'connected_but_servers_error'
+                except urllib2.URLError as e:
+                    if e[0][0] == 101:
+                        r[journal.id] = 'network_down'
+                    if e[0][0] == 104:
+                        r[journal.id] = 'connection_rejected'
+                    elif e[0][0] == -2:
+                        r[journal.id] = 'unknown_service'
+                    else:
+                        r[journal.id] = 'something_wrong'
+                except Exception as e:
+                    r[journal.id] = 'something_wrong'
+                _logger.debug("Connection return: %s" % r[journal.id])
+        return r
+
+    def _get_fex_afip_items_generated(self, cr, uid, ids, fields_name, arg, context=None):
+        if context is None:
+            context={}
+        glinx = lambda conn, ps, jc: conn.server_id.wsfex_get_last_invoice_number(conn.id, ps, jc)[conn.server_id.id]
+        glin = lambda conn, ps, jc: conn.server_id.wsfe_get_last_invoice_number(conn.id, ps, jc)[conn.server_id.id]
         r={}
         for journal in self.browse(cr, uid, ids):
             r[journal.id] = False
             conn = journal.afip_connection_id
             if conn and conn.server_id.code == 'wsfex':
                 try:
+                    r[journal.id] = glinx(conn, journal.point_of_sale, journal.journal_class_id.afip_code)
+                except:
+                    r[journal.id] = False
+            if conn and conn.server_id.code == 'wsfe':
+                try:
                     r[journal.id] = glin(conn, journal.point_of_sale, journal.journal_class_id.afip_code)
                 except:
                     r[journal.id] = False
@@ -46,7 +95,22 @@
     
     _inherit = "account.journal"
     _columns = {
-        'afip_items_generated': fields.function(_get_afip_items_generated, type='integer', string='Number of Invoices Generated',method=True, 
+        'afip_state': fields.function(_get_fex_afip_state, type='selection', string='Connection state',
+                                      method=True, readonly=True,
+                                      selection=[
+                                          ('connected','Connected'),
+                                          ('connection_error','Connection Error'),
+                                          ('connected_but_appserver_error','Application service has troubles'),
+                                          ('connected_but_dbserver_error','Database service is down'),
+                                          ('connected_but_authserver_error','Authentication service is down'),
+                                          ('connected_but_servers_error','Services are down'),
+                                          ('network_down','Network is down'),
+                                          ('unknown_service','Unknown service'),
+                                          ('connection_rejection','Connection reseted by host'),
+                                          ('something_wrong','Not identified error'),
+                                      ],
+                            help="Connect to the AFIP and check service status."),
+        'afip_items_generated': fields.function(_get_fex_afip_items_generated, type='integer', string='Number of Invoices Generated',method=True, 
                             help="Connect to the AFIP and check how many invoices was generated.", readonly=True),
     }
 

=== modified file 'l10n_ar_wsafip_fex/report/invoice.py'
--- l10n_ar_wsafip_fex/report/invoice.py	2013-11-14 18:47:14 +0000
+++ l10n_ar_wsafip_fex/report/invoice.py	2013-11-29 14:53:16 +0000
@@ -36,9 +36,9 @@
         })
 
 report_sxw.report_sxw(
-    'report.account.invoice_fe',
+    'report.account.invoice_fex',
     'account.invoice',
-    'addons/l10n_ar_wsafip_fe/report/invoice.rml',
+    'addons/l10n_ar_wsafip_fex/report/invoice.rml',
     parser=fe_account_invoice,
     header=False
 )

=== removed directory 'l10n_ar_wsafip_fex/security'
=== removed file 'l10n_ar_wsafip_fex/security/ir.model.access.csv'
--- l10n_ar_wsafip_fex/security/ir.model.access.csv	2013-11-14 18:47:14 +0000
+++ l10n_ar_wsafip_fex/security/ir.model.access.csv	1970-01-01 00:00:00 +0000
@@ -1,3 +0,0 @@
-"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
-"access_afip_wsfex_error_manager","afip.wsfex_error.manager","model_afip_wsfex_error","group_wsafip_fex_admin",1,1,1,1
-"access_afip_wsfex_error_user","afip.wsfex_error.user","model_afip_wsfex_error","group_wsafip_fex_user",1,0,0,0

=== removed directory 'l10n_ar_wsafip_fex/test'
=== removed file 'l10n_ar_wsafip_fex/test/com_ri1.yml'
--- l10n_ar_wsafip_fex/test/com_ri1.yml	2013-11-12 18:24:53 +0000
+++ l10n_ar_wsafip_fex/test/com_ri1.yml	1970-01-01 00:00:00 +0000
@@ -1,80 +0,0 @@
-- Setup wizard to select argentine chart
-- !record {model: account.installer, id: acc_wiz_ivari }:
-        company_id: com_ivari
-        charts: l10n_ar_chart_generic
-
-- Execute wizard to create generic chart.
-- !python {model: account.installer }: |
-    self.view_init(cr, uid, [ref("acc_wiz_ivari")], {})
-    self.execute(cr, uid, [ref("acc_wiz_ivari")], {})
-
-- Setup wizard to create generic chart.
-- !record {model: wizard.multi.charts.accounts, id: cha_wiz_ivari }:
-        chart_template_id: l10n_ar_chart_generic.ri_l10nAR_chart_template
-        company_id: com_ivari
-        bank_accounts_id: []
-        code_digits: 8
-        currency_id: 1
-
-- Execute wizard to create generic chart.
-- !python {model: wizard.multi.charts.accounts }: |
-    self.view_init(cr, uid, [ref("acc_wiz_ivari")], {})
-    r = self.onchange_company_id(cr, uid, [ref("cha_wiz_ivari")], ref("com_ivari"))
-    self.write(cr, uid, [ref("cha_wiz_ivari")], r['value'])
-    r = self.onchange_chart_template_id(cr, uid, [ref("cha_wiz_ivari")], ref("l10n_ar_chart_generic.ri_l10nAR_chart_template"))
-    self.write(cr, uid, [ref("cha_wiz_ivari")], r['value'])
-    self.execute(cr, uid, [ref("cha_wiz_ivari")], {})
-
-- Check if chart has been created.
-- !assert {model: wizard.multi.charts.accounts, id: cha_wiz_ivari, string: Select VAT taxes }:
-  - sale_tax.id == ref("l10n_ar_chart_generic.ri_tax_vat_21_ventas")
-  - purchase_tax.id == ref("l10n_ar_chart_generic.ri_tax_vat_21_compras")
-
-- Setup wizard to create journals for responsable inscripto
-- !record {model: l10n_ar_invoice.config, id: inv_wiz_ivari }:
-        company_id: com_ivari
-        cuit: 30712007288
-        iibb: 1248845-03
-        start_date: 2011-09-01
-        responsability_id: !ref {model: afip.responsability, search: "[('name','=','IVA Responsable Inscripto')]"}
-        do_export: False
-        remove_old_journals: True
-        point_of_sale: 1
-
-- Execute Wizard to create journals for responsable inscripto
-- !python {model: l10n_ar_invoice.config }: |
-    self.view_init(cr, uid, [ref("inv_wiz_ivari")], {})
-    self.update_journals(cr, uid, [ref("inv_wiz_ivari")], {})
-    self.execute(cr, uid, [ref("inv_wiz_ivari")], {})
-
-- Check if exists journals associated to this company
-- !python {model: account.journal }: |
-    journal_ids = self.search(cr, uid, [('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')])
-    expected_journals = 3 * 3 * 2 + 2
-    # # tipos de documentos, # Clase de Journals, Ventas y Compras, u'Miscellaneous Journal', u'Opening Entries Journal'
-    if (len(journal_ids)!=expected_journals):
-        print [ a.name for a in self.browse(cr, uid, journal_ids) ]
-        raise AssertionError, 'Error in journals creation for Resp. Insc.. Expected %i, exists %i.' % (expected_journals, len(journal_ids))
-
-- Check if exists periods associated to this company
-- !python {model: account.period }: |
-    period_ids = self.search(cr, uid, [('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')])
-    expected_periods=13
-    if (len(period_ids)!=expected_periods):
-        print [ a.name for a in self.browse(cr, uid, period_ids) ]
-        raise AssertionError, 'Error in period creation for Resp. Insc.. Expected %i, exists %i.' % (expected_periods, len(period_ids))
-
-- Setup Wizard to connect to journals to webservice.
-- !record {model: l10n_ar_wsafip_fe.config, id: inv_wiz_ivari_fe }:
-        company_id: com_ivari
-        wsfe_certificate_id: cert_ar_0
-        wsfe_for_homologation: True
-        wsfe_point_of_sale: '1'
-
-- Execute Wizard to connect to journals to webservice.
-- !python {model: l10n_ar_wsafip_fe.config }: |
-    self.execute(cr, uid, [ref("inv_wiz_ivari_fe")], {})
-
-#
-# El responsable inscripto esta listo para facturar electronicamente !!!
-#

=== removed file 'l10n_ar_wsafip_fex/test/com_ri2.yml'
--- l10n_ar_wsafip_fex/test/com_ri2.yml	2013-11-12 18:24:53 +0000
+++ l10n_ar_wsafip_fex/test/com_ri2.yml	1970-01-01 00:00:00 +0000
@@ -1,85 +0,0 @@
-- Setup wizard to select argentine chart
-- !record {model: account.installer, id: acc_wiz_ivari2 }:
-        company_id: com_ivari2
-        charts: l10n_ar_chart_generic
-
-- Execute wizard to create generic chart.
-- !python {model: account.installer }: |
-    self.view_init(cr, uid, [ref("acc_wiz_ivari2")], {})
-    self.execute(cr, uid, [ref("acc_wiz_ivari2")], {})
-
-- Setup wizard to create generic chart.
-- !record {model: wizard.multi.charts.accounts, id: cha_wiz_ivari2 }:
-        chart_template_id: l10n_ar_chart_generic.ri_l10nAR_chart_template
-        company_id: com_ivari2
-        bank_accounts_id: []
-        code_digits: 8
-        currency_id: 1
-
-- Execute wizard to create generic chart.
-- !python {model: wizard.multi.charts.accounts }: |
-    r = self.onchange_company_id(cr, uid, [ref("cha_wiz_ivari2")], ref("com_ivari2"))
-    self.write(cr, uid, [ref("cha_wiz_ivari2")], r['value'])
-    r = self.onchange_chart_template_id(cr, uid, [ref("cha_wiz_ivari2")], ref("l10n_ar_chart_generic.ri_l10nAR_chart_template"))
-    self.write(cr, uid, [ref("cha_wiz_ivari2")], r['value'])
-    self.execute(cr, uid, [ref("cha_wiz_ivari2")], {})
-
-- Check if chart has been created.
-- !assert {model: wizard.multi.charts.accounts, id: cha_wiz_ivari2, string: Select VAT taxes }:
-  - sale_tax.id == ref("l10n_ar_chart_generic.ri_tax_vat_21_ventas")
-  - purchase_tax.id == ref("l10n_ar_chart_generic.ri_tax_vat_21_compras")
-
-- Setup wizard to create journals for responsable inscripto
-- !record {model: l10n_ar_invoice.config, id: inv_wiz_ivari2 }:
-        company_id: com_ivari2
-        cuit: 30573652084
-        iibb: 1248845-03
-        start_date: 2011-09-01
-        responsability_id: !ref {model: afip.responsability, search: "[('name','=','IVA Responsable Inscripto')]"}
-        do_export: True
-        remove_old_journals: True
-        point_of_sale: 1
-
-- Execute Wizard to create journals for responsable inscripto
-- !python {model: l10n_ar_invoice.config }: |
-    self.view_init(cr, uid, [ref("inv_wiz_ivari2")], {})
-    self.update_journals(cr, uid, [ref("inv_wiz_ivari2")], {})
-    self.execute(cr, uid, [ref("inv_wiz_ivari2")], {})
-
-- Check if exists journals associated to this company
-- !python {model: account.journal }: |
-    journal_ids = self.search(cr, uid, [('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')])
-    expected_journals = 3 * 3 * 2 + 2 # # tipos de documentos, # Clase de Journals, Ventas y Compras, u'Miscellaneous Journal', u'Opening Entries Journal'
-    if (len(journal_ids)!=expected_journals):
-        print [ a.name for a in self.browse(cr, uid, journal_ids) ]
-        raise AssertionError, 'Error in journals creation for Resp. Insc.. Expected %i, exists %i.' % (expected_journals, len(journal_ids))
-
-    journal_ids = self.search(cr, uid, [('company_id.name','=','Cablevision SA.')])
-    expected_journals = 3 * 3 * 2 + 3 + 2 # # tipos de documentos, # Clase de Journals, Ventas y Compras, Ventas de Exportación, u'Miscellaneous Journal', u'Opening Entries Journal'
-    if (len(journal_ids)!=expected_journals):
-        print [ a.name for a in self.browse(cr, uid, journal_ids) ]
-        raise AssertionError, 'Error in journals creation for Resp. Insc.. Expected %i, exists %i.' % (expected_journals, len(journal_ids))
-
-- Check if exists periods associated to this company
-- !python {model: account.period }: |
-    period_ids = self.search(cr, uid, [('company_id.name','=','Cablevision SA.')])
-    expected_periods=13
-    if (len(period_ids)!=expected_periods):
-        print [ a.name for a in self.browse(cr, uid, period_ids) ]
-        raise AssertionError, 'Error in period creation for Resp. Insc.. Expected %i, exists %i.' % (expected_periods, len(period_ids))
-
-#- Setup Wizard to connect to journals to webservice.
-#- !record {model: l10n_ar_wsafip_fe.config, id: inv_wiz_ivari2_fe }:
-#        company_id: com_ivari2
-#        wsfe_certificate_id: cert_ar_0
-#        wsfe_for_homologation: True
-#        wsfe_point_of_sale: '1'
-#
-#- Execute Wizard to connect to journals to webservice.
-#- !python {model: l10n_ar_wsafip_fe.config }: |
-#    self.execute(cr, uid, [ref("inv_wiz_ivari2_fe")], {})
-
-
-#
-# El responsable inscripto esta listo para facturar !!!
-#

=== removed file 'l10n_ar_wsafip_fex/test/com_rm1.yml'
--- l10n_ar_wsafip_fex/test/com_rm1.yml	2013-11-12 18:24:53 +0000
+++ l10n_ar_wsafip_fex/test/com_rm1.yml	1970-01-01 00:00:00 +0000
@@ -1,72 +0,0 @@
-#
-# Wizard que selecciona la contabilidad argentina
-#
-- !record {model: account.installer, id: acc_wiz_rm }:
-        company_id: com_rm
-        charts: l10n_ar_chart_generic
-
-
-- !python {model: account.installer }: |
-    self.view_init(cr, uid, [ref("acc_wiz_rm")], {})
-    self.execute(cr, uid, [ref("acc_wiz_rm")], {})
-
-#
-# Wizard que selecciona el plan contable. NOTAR QUE USO EL DE RESPONSABLE INSCRIPTO PORQUE EL DE MONOTRIBUTO NO FUNCIONA!
-#
-- !record {model: wizard.multi.charts.accounts, id: cha_wiz_rm }:
-        chart_template_id: l10n_ar_chart_generic.ri_l10nAR_chart_template
-        company_id: com_rm
-        bank_accounts_id: []
-        code_digits: 8
-        currency_id: 1
-
-- !python {model: wizard.multi.charts.accounts }: |
-    self.view_init(cr, uid, [ref("acc_wiz_rm")], {})
-    r = self.onchange_company_id(cr, uid, [ref("cha_wiz_rm")], ref("com_rm"))
-    self.write(cr, uid, [ref("cha_wiz_rm")], r['value'])
-    r = self.onchange_chart_template_id(cr, uid, [ref("cha_wiz_rm")], ref("l10n_ar_chart_generic.ri_l10nAR_chart_template"))
-    self.write(cr, uid, [ref("cha_wiz_rm")], r['value'])
-    self.execute(cr, uid, [ref("cha_wiz_rm")], {})
-
-- !assert {model: wizard.multi.charts.accounts, id: cha_wiz_rm, string: Select VAT taxes }:
-  - sale_tax.id == ref("l10n_ar_chart_generic.ri_tax_vat_21_ventas")
-  - purchase_tax.id == ref("l10n_ar_chart_generic.ri_tax_vat_21_compras")
-
-#
-# Wizard que crea los journals para un responsable inscripto
-#
-- !record {model: l10n_ar_invoice.config, id: inv_wiz_rm }:
-        company_id: com_rm
-        cuit: 23250954549
-        iibb: 0-0
-        start_date: 2011-09-01
-        responsability_id: l10n_ar_invoice.res_RM
-        do_export: False
-        remove_old_journals: True
-        point_of_sale: 1
-
-- !python {model: l10n_ar_invoice.config }: |
-    self.view_init(cr, uid, [ref("inv_wiz_rm")], {})
-    self.update_journals(cr, uid, [ref("inv_wiz_rm")], {})
-    self.execute(cr, uid, [ref("inv_wiz_rm")], {})
-
-- Check if exists journals associated to this company
-- !python {model: account.journal }: |
-    journal_ids = self.search(cr, uid, [('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')])
-    expected_journals = 3 * 3 * 2 + 2 # # tipos de documentos, # Clase de Journals, Ventas y Compras, u'Miscellaneous Journal', u'Opening Entries Journal'
-    if (len(journal_ids)!=expected_journals):
-        print [ a.name for a in self.browse(cr, uid, journal_ids) ]
-        raise AssertionError, 'Error in journals creation for Monotributista Expected %i, exists %i.' % (expected_journals, len(journal_ids))
-
-- Check if exists periods associated to this company
-- !python {model: account.period }: |
-    period_ids = self.search(cr, uid, [('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')])
-    expected_periods=13
-    if (len(period_ids)!=expected_periods):
-        print [ a.name for a in self.browse(cr, uid, period_ids) ]
-        raise AssertionError, 'Error in period creation for Resp. Insc.. Expected %i, exists %i.' % (expected_periods, len(period_ids))
-
-#
-# El responsable monotributo esta listo para facturar !!!
-#
-

=== removed file 'l10n_ar_wsafip_fex/test/inv_2iva.yml'
--- l10n_ar_wsafip_fex/test/inv_2iva.yml	2013-11-12 18:24:53 +0000
+++ l10n_ar_wsafip_fex/test/inv_2iva.yml	1970-01-01 00:00:00 +0000
@@ -1,41 +0,0 @@
-#
-#       Create an invoice from Resp Inscr to Resp Inscr.
-#       For two products with different vat
-#
-- Create a simple invoice type A
-- !record {model: account.invoice, id: inv_ri2ri_2iva}:
-    company_id: com_ivari
-    partner_id: par_ivari2
-    journal_id: !ref {model: account.journal, search: "[('code','=','FVA0001'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-    period_id:  !ref {model: account.period, search: "[('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-    account_id: !ref {model: account.account, search: "[('code','=','113010'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-    invoice_line:
-      - account_id: !ref {model: account.account, search: "[('code','=','411000'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-        name: '[PC3] Medium PC'
-        price_unit: 900.0
-        quantity: 10.0
-        product_id: prod_iva21
-        uos_id: product.product_uom_unit
-        invoice_line_tax_id: !ref {model: account.tax, search: "[('name','=','01003004:V'),('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-      - account_id: !ref {model: account.account, search: "[('code','=','411000'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-        name: '[PC4] Big PC'
-        price_unit: 1900.0
-        quantity: 3.0
-        product_id: prod_iva10
-        uos_id: product.product_uom_unit
-        invoice_line_tax_id: !ref {model: account.tax, search: "[('name','=','01003005:V'),('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-
-- Compute amount
-- !python {model: account.invoice}: |
-    inv_id = [ref('inv_ri2ri_2iva')]
-    self.view_init(cr, uid, inv_id, {})
-    self.button_compute(cr, uid, inv_id)
-
-- Validate invoice
-- !workflow {model: account.invoice, action: invoice_open, ref: inv_ri2ri_2iva}
-
-- Check CAE invoice number
-- !assert {model: account.invoice, id: inv_ri2ri_2iva, string: CAE has been assigned}:
-    - afip_cae != ''
-    - afip_cae_due != ''
-

=== removed file 'l10n_ar_wsafip_fex/test/inv_2prod.yml'
--- l10n_ar_wsafip_fex/test/inv_2prod.yml	2013-11-12 18:24:53 +0000
+++ l10n_ar_wsafip_fex/test/inv_2prod.yml	1970-01-01 00:00:00 +0000
@@ -1,41 +0,0 @@
-#
-#       Create an invoice from Resp Inscr to Resp Inscr.
-#       For two products with vat
-#
-- Create a simple invoice type B
-- !record {model: account.invoice, id: inv_ri2rm_2prod}:
-    company_id: com_ivari
-    partner_id: par_rm
-    journal_id: !ref {model: account.journal, search: "[('code','=','FVB0001'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-    period_id:  !ref {model: account.period, search: "[('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-    account_id: !ref {model: account.account, search: "[('code','=','113010'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-    invoice_line:
-      - account_id: !ref {model: account.account, search: "[('code','=','411000'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-        name: '[PC3] Medium PC'
-        price_unit: 900.0
-        quantity: 10.0
-        product_id: prod_iva21
-        uos_id: product.product_uom_unit
-        invoice_line_tax_id: !ref {model: account.tax, search: "[('name','=','01003005:V'),('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-      - account_id: !ref {model: account.account, search: "[('code','=','411000'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-        name: '[PC4] Big PC'
-        price_unit: 1900.0
-        quantity: 3.0
-        product_id: prod_iva21
-        uos_id: product.product_uom_unit
-        invoice_line_tax_id: !ref {model: account.tax, search: "[('name','=','01003005:V'),('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-
-- Compute amount
-- !python {model: account.invoice}: |
-    inv_id = [ref('inv_ri2rm_2prod')]
-    self.view_init(cr, uid, inv_id, {})
-    self.button_compute(cr, uid, inv_id)
-
-- Validate invoice
-- !workflow {model: account.invoice, action: invoice_open, ref: inv_ri2rm_2prod}
-
-- Check CAE invoice number
-- !assert {model: account.invoice, id: inv_ri2rm_2prod, string: CAE has been assigned}:
-    - afip_cae != ''
-    - afip_cae_due != ''
-

=== removed file 'l10n_ar_wsafip_fex/test/invoice.yml'
--- l10n_ar_wsafip_fex/test/invoice.yml	2013-11-12 18:24:53 +0000
+++ l10n_ar_wsafip_fex/test/invoice.yml	1970-01-01 00:00:00 +0000
@@ -1,33 +0,0 @@
-#
-#       Create an invoice from Resp Inscr to Resp Inscr.
-#
-- Create a simple invoice type B
-- !record {model: account.invoice, id: inv_ri2rm}:
-    company_id: com_ivari
-    partner_id: par_rm
-    journal_id: !ref {model: account.journal, search: "[('code','=','FVB0001'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-    period_id:  !ref {model: account.period, search: "[('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-    account_id: !ref {model: account.account, search: "[('code','=','113010'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-    invoice_line:
-      - account_id: !ref {model: account.account, search: "[('code','=','411000'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-        name: '[PC3] Medium PC'
-        price_unit: 900.0
-        quantity: 10.0
-        product_id: prod_iva21
-        uos_id: product.product_uom_unit
-        invoice_line_tax_id: !ref {model: account.tax, search: "[('name','=','01003005:V'),('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]"}
-
-- Compute amount
-- !python {model: account.invoice}: |
-    inv_id = [ref('inv_ri2rm')]
-    self.view_init(cr, uid, inv_id, {})
-    self.button_compute(cr, uid, inv_id)
-
-- Validate invoice
-- !workflow {model: account.invoice, action: invoice_open, ref: inv_ri2rm}
-
-- Check CAE invoice number
-- !assert {model: account.invoice, id: inv_ri2rm, string: CAE has been assigned}:
-    - afip_cae != ''
-    - afip_cae_due != ''
-

=== removed file 'l10n_ar_wsafip_fex/test/journal.yml'
--- l10n_ar_wsafip_fex/test/journal.yml	2013-11-12 18:24:53 +0000
+++ l10n_ar_wsafip_fex/test/journal.yml	1970-01-01 00:00:00 +0000
@@ -1,51 +0,0 @@
-#
-# Preparando Authorización
-#
-- Batch Sequence
-- !record {model: ir.sequence, id: fe_sequence_0}:
-    name: FE Web Service AFIP Sequence
-    code: ws_afip_sequence
-
-- In order to test afip webservices append an FE service instance
-- !record {model: wsafip.connection, id: connection_ar_0}:
-    name: Moldeo Interactive FE
-    partner_id: par_ivari
-    logging_id: l10n_ar_wsafip.wsaa_homo
-    server_id: wsfe_homo
-    certificate: cert_ar_0
-    batch_sequence_id: fe_sequence_0
-
-#
-# Preparando Journal
-#
-- Update journal for Electronic Invoice. Invoice type A.
-- !python {model: account.journal}: |
-    journal_id = self.search(cr, uid, [('code','=','FVA0001'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')])
-    self.write(cr, uid, journal_id, {'afip_connection_id': ref("connection_ar_0")})
-    journal_id = self.search(cr, uid, [('code','=','FVB0001'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')])
-    self.write(cr, uid, journal_id, {'afip_connection_id': ref("connection_ar_0")})
-
-- Check status of connection.
-- !python {model: account.journal}: |
-    journal_id = self.search(cr, uid, [('code','=','FVA0001'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')])
-    data = self.read(cr, uid, journal_id)
-
-- Check status of connection.
-- !assert {model: account.journal, search: "[('code','=','FVA0001'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]", string: Connection must happen}:
-   - afip_state == 'connected' 
-   - afip_items_generated >= 0
-
-- Check status of connection.
-- !python {model: account.journal}: |
-    journal_id = self.search(cr, uid, [('code','=','FVB0001'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')])
-    data = self.read(cr, uid, journal_id)
-
-- Check status of connection.
-- !assert {model: account.journal, search: "[('code','=','FVB0001'), ('company_id.name','=','Coop. Trab. Moldeo Interactive Ltda.')]", string: Connection must happen}:
-   - afip_state == 'connected' 
-   - afip_items_generated >= 0
-
-#- Test
-#- !python {model: account.journal }: |
-#    import pdb; pdb.set_trace()
-

=== removed file 'l10n_ar_wsafip_fex/test/partners.yml'
--- l10n_ar_wsafip_fex/test/partners.yml	2013-11-12 18:24:53 +0000
+++ l10n_ar_wsafip_fex/test/partners.yml	1970-01-01 00:00:00 +0000
@@ -1,247 +0,0 @@
-#
-# Consumidor final mas de 1000 $
-#
-- !record {model: res.partner, id: par_cf_gm }:
-    name: Cristian Sebastian Rocha
-    responsability_id: l10n_ar_invoice.res_CF
-    document_type_id: l10n_ar_invoice.dt_DNI
-    document_number: 25095454
-    street: Av. Rivadavia
-    city: Capital Federal
-    state_id: l10n_ar_states.C
-    country_id: base.ar
-    zip: 1407
-
-#
-# IVA exento
-#
-- Create partner
-- !record {model: res.partner, id: par_ivae }:
-    name: ASOCIACION DOCENTES DE LA UNIVERSIDAD NACIONAL DE BUENOS AIRES
-    responsability_id: l10n_ar_invoice.res_IVAE
-    document_type_id: l10n_ar_invoice.dt_CUIT
-    document_number: 30681521077
-    vat: ar30681521077
-    street: Azcuenaga 770
-    city: Capital Federal
-    state_id: l10n_ar_states.C
-    country_id: base.ar
-    zip: 1029
-
-- Create company
-- !record {model: res.company, id: com_ivae }:
-    name: ASOCIACION DOCENTES DE LA UNIVERSIDAD NACIONAL DE BUENOS AIRES
-    partner_id: par_ivae
-    rml_header1: .
-    rml_header2: Web - Tel -
-    rml_header3: CUIT - 
-    currency_id: base.ARS
-
-#
-# IVA responsable inscripto
-#
-- Create partner
-- !record {model: res.partner, id: par_ivari }:
-    name: Coop. Trab. Moldeo Interactive Ltda.
-    responsability_id: l10n_ar_invoice.res_IVARI 
-    document_type_id: l10n_ar_invoice.dt_CUIT
-    document_number: 30712007288
-    vat: ar30712007288
-    street: Castillo 1336 12A 
-    city: Capital Federal
-    state_id: l10n_ar_states.C
-    country_id: base.ar
-    zip: 1414
-
-- Create company
-- !record {model: res.company, id: com_ivari }:
-    name: Coop. Trab. Moldeo Interactive Ltda.
-    partner_id: par_ivari
-    rml_header1: .
-    rml_header2: Web - Tel -
-    rml_header3: CUIT - 
-    currency_id: base.ARS
-
-- Create account company
-- !record {model: ir.property, id: prop_paec_ivari}:
-    company_id: com_ivari
-    fields_id: account.field_res_partner_property_account_payable
-    name: property_account_expense_categ
-    value_reference: !eval "'account.account,'+str(ref('account.a_expense'))"
-
-- Create partner company
-- !record {model: ir.property, id: prop_paic_ivari}:
-    company_id: com_ivari
-    fields_id: account.field_res_partner_property_account_receivable
-    name: property_account_income_categ
-    value_reference: !eval "'account.account,'+str(ref('account.a_sale'))"
-
-#
-#
-# IVA responsable inscripto
-#
-- Create partner
-- !record {model: res.partner, id: par_ivari2 }:
-    name: Cablevision SA.
-    responsability_id: l10n_ar_invoice.res_IVARI 
-    document_type_id: l10n_ar_invoice.dt_CUIT
-    document_number: 30573652084
-    vat: ar30573652084
-    street: Hornos 690
-    city: Capital Federal
-    state_id: l10n_ar_states.C
-    country_id: base.ar
-    zip: 1414
-
-- Create company
-- !record {model: res.company, id: com_ivari2 }:
-    name: Cablevision SA.
-    partner_id: par_ivari2
-    rml_header1: .
-    rml_header2: Web - Tel -
-    rml_header3: CUIT - 
-    currency_id: base.ARS
-
-- Create account company
-- !record {model: ir.property, id: prop_paec_ivari2}:
-    company_id: com_ivari2
-    fields_id: account.field_res_partner_property_account_payable
-    name: property_account_expense_categ
-    value_reference: !eval "'account.account,'+str(ref('account.a_expense'))"
-
-- Create partner company
-- !record {model: ir.property, id: prop_paic_ivari2}:
-    company_id: com_ivari2
-    fields_id: account.field_res_partner_property_account_receivable
-    name: property_account_income_categ
-    value_reference: !eval "'account.account,'+str(ref('account.a_sale'))"
-
-- Property
-- !record {model: ir.property, id: prop_paec_ivari2}:
-    company_id: com_ivari2
-    fields_id: account.field_res_partner_property_account_payable
-    name: property_account_expense_categ
-    value_reference: !eval "'account.account,'+str(ref('account.a_expense'))"
-
-- Property
-- !record {model: ir.property, id: prop_paic_ivari2}:
-    company_id: com_ivari2
-    fields_id: account.field_res_partner_property_account_receivable
-    name: property_account_income_categ
-    value_reference: !eval "'account.account,'+str(ref('account.a_sale'))"
-
-#
-# IVA responsable no inscripto
-#
-- Create partner
-- !record {model: res.partner, id: par_ivarni }:
-    name: FUNDACION UNIVERSIDAD NACIONAL
-    responsability_id: l10n_ar_invoice.res_IVARNI 
-    document_type_id: l10n_ar_invoice.dt_CUIT
-    document_number: 30642332771
-    vat: ar30642332771
-    street: Roca Julio A. Pte. Av. 733, 5
-    city: Capital Federal
-    state_id: l10n_ar_states.C
-    country_id: base.ar
-    zip: 1067
-
-- Create company
-- !record {model: res.company, id: com_ivarni }:
-    name: FUNDACION UNIVERSIDAD NACIONAL
-    partner_id: par_ivarni
-    rml_header1: .
-    rml_header2: Web - Tel -
-    rml_header3: CUIT - 
-    currency_id: base.ARS
-
-- Set account company properties
-- !record {model: ir.property, id: prop_paec_ivarni}:
-    company_id: com_ivarni
-    fields_id: account.field_res_partner_property_account_payable
-    name: property_account_expense_categ
-    value_reference: !eval "'account.account,'+str(ref('account.a_expense'))"
-
-- !record {model: ir.property, id: prop_paic_ivarni}:
-    company_id: com_ivarni
-    fields_id: account.field_res_partner_property_account_receivable
-    name: property_account_income_categ
-    value_reference: !eval "'account.account,'+str(ref('account.a_sale'))"
-
-#
-# IVA no responsable, no alcanzado
-# 
-- Create partner
-- !record {model: res.partner, id: par_ivanr }:
-    name: CONSORCIO DE PROPIETARIOS EDIFICIO UNIVERSIDAD
-    responsability_id: l10n_ar_invoice.res_IVANR
-    document_type_id: l10n_ar_invoice.dt_CUIT
-    document_number: 33707348629
-    vat: ar33707348629
-    street: Urquiza 494
-    city: Parana
-    state_id: l10n_ar_states.E
-    country_id: base.ar
-    zip: 3100
-
-- Create company
-- !record {model: res.company, id: com_ivanr }:
-    name: CONSORCIO DE PROPIETARIOS EDIFICIO UNIVERSIDAD
-    partner_id: par_ivanr
-    rml_header1: .
-    rml_header2: Web - Tel -
-    rml_header3: CUIT - 
-    currency_id: base.ARS
-
-- Set account company properties
-- !record {model: ir.property, id: prop_paec_ivanr}:
-    company_id: com_ivanr
-    fields_id: account.field_res_partner_property_account_payable
-    name: property_account_expense_categ
-    value_reference: !eval "'account.account,'+str(ref('account.a_expense'))"
-
-- !record {model: ir.property, id: prop_paic_ivanr}:
-    company_id: com_ivanr
-    fields_id: account.field_res_partner_property_account_receivable
-    name: property_account_income_categ
-    value_reference: !eval "'account.account,'+str(ref('account.a_sale'))"
-
-#
-# Responsable monotributo
-#
-- Create partner
-- !record {model: res.partner, id: par_rm }:
-    name: Cristian S. Rocha
-    responsability_id: l10n_ar_invoice.res_RM
-    document_type_id: l10n_ar_invoice.dt_CUIT
-    document_number: 23250954549
-    vat: ar23250954549
-    street: Av. Rivadavia
-    city: Capital Federal
-    state_id: l10n_ar_states.C
-    country_id: base.ar
-    zip: 1407
-
-- Create company
-- !record {model: res.company, id: com_rm }:
-    name: Cristian S. Rocha
-    partner_id: par_rm
-    rml_header1: .
-    rml_header2: Web - Tel -
-    rml_header3: CUIT - 
-    currency_id: base.ARS
-
-- Set account company properties
-- !record {model: ir.property, id: prop_paec_rm}:
-    company_id: com_rm
-    fields_id: account.field_res_partner_property_account_payable
-    name: property_account_expense_categ
-    value_reference: !eval "'account.account,'+str(ref('account.a_expense'))"
-
-- !record {model: ir.property, id: prop_paic_rm}:
-    company_id: com_rm
-    fields_id: account.field_res_partner_property_account_receivable
-    name: property_account_income_categ
-    value_reference: !eval "'account.account,'+str(ref('account.a_sale'))"
-
-

=== removed file 'l10n_ar_wsafip_fex/test/products.yml'
--- l10n_ar_wsafip_fex/test/products.yml	2013-11-12 18:24:53 +0000
+++ l10n_ar_wsafip_fex/test/products.yml	1970-01-01 00:00:00 +0000
@@ -1,46 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Copyright (C) 2012 OpenERP - Team de Localización Argentina.
-# https://launchpad.net/~openerp-l10n-ar-localization
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-##############################################################################
-# 
-# Los siguientes productos son necesarios para calcular correctamente los
-# impuestos en las facturas.
-#
-#-----------------------------------------------------------------------------
-- Create product with IVA 0%
-- !record {model: product.product, id: prod_iva0 }:
-    name: Producto IVA 0%
-    taxes_id: !ref {model: account.tax, search: "[('name','=','01003000:V')]"}
-
-- Create product with IVA 10.5%
-- !record {model: product.product, id: prod_iva10 }:
-    name: Producto IVA 10.5%
-    taxes_id: !ref {model: account.tax, search: "[('name','=','01003004:V')]"}
-
-- Create product with IVA 21%
-- !record {model: product.product, id: prod_iva21 }:
-    name: Producto IVA 21%
-    taxes_id: !ref {model: account.tax, search: "[('name','=','01003005:V')]"}
-
-- Create product with IVA 27%
-- !record {model: product.product, id: prod_iva27 }:
-    name: Producto IVA 27%
-    taxes_id: !ref {model: account.tax, search: "[('name','=','01003006:V')]"}
-
-# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== removed file 'l10n_ar_wsafip_fex/test/test_key.yml'
--- l10n_ar_wsafip_fex/test/test_key.yml	2013-11-12 18:24:53 +0000
+++ l10n_ar_wsafip_fex/test/test_key.yml	1970-01-01 00:00:00 +0000
@@ -1,65 +0,0 @@
--
- # Clave privada y Certificado asignado por AFIP.
- 
- # En este registro hay que cargar la clave de testing de Homologacion
- # recibido desde la AFIP. Ver última sección de:
- 
- # http://www.afip.gob.ar/ws/WSAA/WSAA.ObtenerCertificado.pdf
- 
- # Nota: Para el caso del entorno de Testing, envíelo por e-mail a webservices@xxxxxxxxxxx 
- #      aclarando a qué WS "de negocio" (por ej.: "wsfe", "wsseg", etc.)
- #      pretende acceder usando este certificado. El certificado le será devuelto por e-mail.
- 
- Private key
--
-  !record {model: crypto.pairkey, id: pkey_ar_0}:
-    name: Clave de Homologacion (Testing)
-    state: confirmed
-    key: |
-        -----BEGIN RSA PRIVATE KEY-----
-        MIICWwIBAAKBgQCrJtlRocuiWqRpjpuWXmcmH+nvRDonQb0OvtdLOp01knuzBDK5
-        OT/F7rxyqibP+/ryD1uRDpP+SVCdfbimJuKiLuRwt8xoGvSrf9VEhvMu/iWLLbSh
-        6aj52kPqX4Bvlu84CZQcvGkrIn8M+tCxGGaWvaPTSrIf2ehRsdgFtnuf3QIDAQAB
-        AoGAXoTg5W0mCW5neAgSsrNF4c8kIUgbmYx7fUY1nc0r/ub7u3xpCtOr/YJ/vg9r
-        ydbN2ppSpkRXxMn2ZFOHAvNcmu9j9wwG8uGxL8KEyFhJMtGVnqpu1eFu0pi3Ac9a
-        4kNO6iaeIgWD5rgo6Hv35YNtTqi10U+D5Mfhg540h3anOp0CQQDXFUYFdUFKOmeo
-        dZee486Vxpr+GRSkaq3zvVUVK8Lf9Xa49lAB3UVN0rgW7hpa736Cm93uqtEc9Y4h
-        727nS5x3AkEAy7YVCBFKVRZ1+mkVbwFxEQyY8eInenFizLfsClzsucvq6JiW3mwY
-        VTlWkxBrcVvj+xYIsCt2sGX7kAVLYSi/SwJAOQGAb43mYiAcvT99kjVa2cOr7NEE
-        8Zb8x+9Uj6nrmqRadSeDiRr2dWv2Ms2k2plDdKaPKeTIS96hb0kgodkefQJARDzF
-        BMPN83ynnm8O5/VCq6Rdo0DPWpuardq6Lap8/avKD4n1l6H78KhZUMACTaGrV5NE
-        68ZTZrlysAal/nDIywJAHyl5r0gQOZu6lgkf/O4hTkNzUUXg2hnDGoTggxggzqlD
-        C0hJio5saIsiAa5EQnFns7vxe312lpnh6/Wpke1cMw==
-        -----END RSA PRIVATE KEY-----
-
--
- Certificate
--
-  !record {model: crypto.certificate, id: cert_ar_0}:
-    name: Certificado de Homologacion (Testing)
-    state: confirmed
-    pairkey_id: pkey_ar_0
-    crt: |
-        -----BEGIN CERTIFICATE-----
-        MIIDuDCCAqCgAwIBAgIICZB6jxDNsZowDQYJKoZIhvcNAQEFBQAwQzElMCMGA1UE
-        AwwcQUZJUCBUZXN0aW5nIENvbXB1dGFkb3JlcyBDQTENMAsGA1UECgwEQUZJUDEL
-        MAkGA1UEBhMCQVIwHhcNMTIwMzAxMTM0MTExWhcNMTQxMTI2MTM0MTExWjBWMQ8w
-        DQYDVQQDDAZtb2xkZW8xGTAXBgNVBAUTEENVSVQgMzA3MTIwMDcyODgxGzAZBgNV
-        BAoMEk1vbGRlbyBJbnRlcmFjdGl2ZTELMAkGA1UEBhMCQVIwgZ8wDQYJKoZIhvcN
-        AQEBBQADgY0AMIGJAoGBAKsm2VGhy6JapGmOm5ZeZyYf6e9EOidBvQ6+10s6nTWS
-        e7MEMrk5P8XuvHKqJs/7+vIPW5EOk/5JUJ19uKYm4qIu5HC3zGga9Kt/1USG8y7+
-        JYsttKHpqPnaQ+pfgG+W7zgJlBy8aSsifwz60LEYZpa9o9NKsh/Z6FGx2AW2e5/d
-        AgMBAAGjggEfMIIBGzAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIF4DAdBgNV
-        HQ4EFgQU2XV8B8HtxbDobe/BNlkJ5kAPt1MwHwYDVR0jBBgwFoAURHTutJwm31bh
-        wQ3rVwuQGTY9lgEwgboGA1UdIASBsjCBrzCBrAYOKwYBBAGBu2MBAgECAQEwgZkw
-        gZYGCCsGAQUFBwICMIGJHoGGAEMAZQByAHQAaQBmAGkAYwBhAGQAbwAgAHAAYQBy
-        AGEAIABjAG8AbQBwAHUAdABhAGQAbwByAGUAcwAgAHMAbwBsAG8AIAB2AGEAbABp
-        AGQAbwAgAGUAbgAgAGUAbgB0AG8AcgBuAG8AcwAgAGQAZQAgAGQAZQBzAGEAcgBy
-        AG8AbABsAG8wDQYJKoZIhvcNAQEFBQADggEBAIDXCIVRQy65rts923TgwD/BX6hq
-        jpTc73CeMxD09vJlB135WWX7EhIVOpkl6c3Ag54YLPQnzfyt9CKhwnHfH8loi0EU
-        aq79T4hQOL+rWFpzY6MzeLhOAFuDLQ9z9LSrJIBxwwkFh2aUAC2Awv6sllI6DTya
-        mBYDom4pcCgRfiH++i+bKrcy+On116aAtG/9STTG7XhgeDZ2ceUsrh9h0anpRHMm
-        rrPvtK9VllyaAd6So1mKhhCobZD1EJ6ZqoGCgiKT3Cja1Q6FrEneeM93Uds0Wbvz
-        SxMgzy/J4dB2ypBayBIFKIG4AuoscCIAXgjagsbq5HyFYuDrj9iLOBhDJuI=
-        -----END CERTIFICATE-----
-

=== modified file 'l10n_ar_wsafip_fex/wsafip_server.py'
--- l10n_ar_wsafip_fex/wsafip_server.py	2013-11-14 18:47:14 +0000
+++ l10n_ar_wsafip_fex/wsafip_server.py	2013-11-29 14:53:16 +0000
@@ -25,7 +25,52 @@
 import sys
 from sslhttps import HttpsTransport
 
-# logging.getLogger('suds.transport').setLevel(logging.DEBUG)
+#~ logging.getLogger('suds.transport').setLevel(logging.DEBUG)
+_logger = logging.getLogger(__name__)
+
+def _update_incoterms(pool, cr, uid, model_name, remote_list, can_create=True, domain=[]):
+    #~ import pdb; pdb.set_trace()
+    model_obj = pool.get(model_name) 
+
+    # Build set of AFIP codes
+    rem_afip_code_set = set([ i['afip_export_incoterm_code'] for i in remote_list ])
+
+    # Take exists instances 
+    sto_ids = model_obj.search(cr, uid, domain)
+    sto_list = model_obj.read(cr, uid, sto_ids, ['afip_export_incoterm_code'])
+    sto_afip_code_set = set([ i['afip_export_incoterm_code'] for i in sto_list ])
+
+    # Append new afip_code
+    to_append = rem_afip_code_set - sto_afip_code_set
+    if to_append and can_create:
+        for item in [ i for i in remote_list if i['afip_export_incoterm_code'] in to_append ]:
+            model_obj.create(cr, uid, item)
+    elif to_append and not can_create:
+        _logger.warning('New items of type %s in WS. Wont be created.' % model_name)
+
+    # Update active document types
+    to_update = rem_afip_code_set & sto_afip_code_set
+    update_dict = dict( [ (i['afip_export_incoterm_code'], i['active']) for i in remote_list
+                         if i['afip_export_incoterm_code'] in to_update ])
+    to_active = [ k for k,v in update_dict.items() if v ]
+    if to_active:
+        model_ids = model_obj.search(cr, uid, [('afip_export_incoterm_code','in',to_active),('active','in',['f',False])])
+        model_obj.write(cr, uid, model_ids, {'active':True})
+
+    to_deactive = [ k for k,v in update_dict.items() if not v ]
+    if to_deactive:
+        model_ids = model_obj.search(cr, uid, [('afip_export_incoterm_code','in',to_deactive),('active','in',['t',True])])
+        model_obj.write(cr, uid, model_ids, {'active':False})
+
+    # To disable exists local afip_code but not in remote
+    #~ to_inactive = sto_afip_code_set - rem_afip_code_set 
+    #~ if to_inactive:
+        #~ model_ids = model_obj.search(cr, uid, [('afip_export_incoterm_code','in',list(to_inactive))])
+        #~ model_obj.write(cr, uid, model_ids, {'active':False})
+
+    _logger.info('Updated %s items' % model_name)
+
+    return True
 
 class wsafip_server(osv.osv):
     _name = "wsafip.server"
@@ -132,102 +177,22 @@
 
                 # Take list of available Incoterms
                 incoterms_list = [
-                    {'afip_incoterm_code': res.Inc_Id,
-                     'incoterm_dsc': res.Inc_Ds }
+                    {'afip_export_incoterm_code': res.Inc_Id,
+                     'afip_export_incoterm_desc': res.Inc_Ds }
                     for res in response.FEXResultGet.ClsFEXResponse_Inc ]
             except Exception as e:
                 _logger.error('AFIP Web service error!: (%i) %s' % (e[0], e[1]))
                 raise osv.except_osv(_(u'AFIP Web service error'),
                                      _(u'System return error %i: %s') % (e[0], e[1]))
 
-            _update(self.pool, cr, uid,
-                    'afip.fex_incoterms',
+            _update_incoterms(self.pool, cr, uid,
+                    'afip.incoterms',
                     incoterms_list,
                     can_create=True
                    )
 
         return
 
-    def wsfex_update_currency(self, cr, uid, ids, conn_id, context=None):
-        """
-        Update currency. This function must be called from connection model.
-
-        AFIP Description: Recupera el listado de monedas y su codigo utilizables en servicio de autorizacion (FEXGetPARAM_MON) 
-        """
-        conn_obj = self.pool.get('wsafip.connection')
-
-        for srv in self.browse(cr, uid, ids, context=context):
-            # Ignore servers without code WSFEX.
-            if srv.code != 'wsfex': continue
-
-            # Take the connection, continue if connected or clockshifted
-            conn = conn_obj.browse(cr, uid, conn_id, context=context) 
-            conn.login() # Login if necessary.
-            if conn.state not in  [ 'connected', 'clockshifted' ]: continue
-
-            try:
-                _logger.info('Updating currency from AFIP Web service')
-                srvclient = Client(srv.url+'?WSDL', transport=HttpsTransport())
-                response = srvclient.service.FEXGetPARAM_MON(Auth=conn.get_auth())
-
-                # Take list of currency
-                currency_list = [
-                    { 'afip_code': c.Mon_Id,
-                      'name': c.Mon_Ds }
-                    for c in response.FEXResultGet.ClsFEXResponse_Mon
-                ]
-            except Exception as e:
-                _logger.error('AFIP Web service error!: (%i) %s' % (e[0], e[1]))
-                raise osv.except_osv(_(u'AFIP Web service error'),
-                                     _(u'System return error %i: %s') % (e[0], e[1]))
-
-            _update(self.pool, cr, uid,
-                    'res.currency',
-                    currency_list,
-                    can_create=False
-                   )
-        return True
-        
-    def wsfex_update_uom(self, cr, uid, ids, conn_id, context=None):
-        """
-        Update UoM. This function must be called from connection model.
-
-        AFIP Description: Recupera el listado de las unidades de medida y su codigo utilizables en servicio de autorizacion (FEXGetPARAM_UMed) 
-        """
-        conn_obj = self.pool.get('wsafip.connection')
-
-        for srv in self.browse(cr, uid, ids, context=context):
-            # Ignore servers without code WSFEX.
-            if srv.code != 'wsfex': continue
-
-            # Take the connection, continue if connected or clockshifted
-            conn = conn_obj.browse(cr, uid, conn_id, context=context) 
-            conn.login() # Login if necessary.
-            if conn.state not in  [ 'connected', 'clockshifted' ]: continue
-
-            try:
-                _logger.info('Updating UoM from AFIP Web service')
-                srvclient = Client(srv.url+'?WSDL', transport=HttpsTransport())
-                response = srvclient.service.FEXGetPARAM_UMed(Auth=conn.get_auth())
-
-                # Take list of UoM available
-                uom_list = [
-                    { 'afip_code': c.Umed_Id,
-                      'name': c.Umed_Ds }
-                    for c in response.FEXResultGet.ClsFEXResponse_UMed
-                ]
-            except Exception as e:
-                _logger.error('AFIP Web service error!: (%i) %s' % (e[0], e[1]))
-                raise osv.except_osv(_(u'AFIP Web service error'),
-                                     _(u'System return error %i: %s') % (e[0], e[1]))
-
-            _update(self.pool, cr, uid,
-                    'product.uom',
-                    uom_list,
-                    can_create=True
-                   )
-        return True
-
     def wsfex_get_last_invoice_number(self, cr, uid, ids, conn_id, ptoVta, cbteTipo, context=None):
         """
         Get last invoice number from AFIP
@@ -235,7 +200,7 @@
         AFIP Description: Recupera el ultimo comprobante autorizado (FEXGetLast_CMP)
         """
         conn_obj = self.pool.get('wsafip.connection')
-
+        #~ import pdb; pdb.set_trace()
         r={}
 
         for srv in self.browse(cr, uid, ids, context=context):
@@ -250,9 +215,13 @@
                 continue
 
             try:
+                #~ import pdb; pdb.set_trace()
                 _logger.info('Take last invoice number from AFIP Web service')
                 srvclient = Client(srv.url+'?WSDL', transport=HttpsTransport())
-                response = srvclient.service.FEXGetLast_CMP(Auth=conn.get_auth(), PtoVta=ptoVta, CbteTipo=cbteTipo)
+                auth = conn.get_auth()
+                auth['Cbte_Tipo'] = cbteTipo
+                auth['Pto_venta'] = ptoVta
+                response = srvclient.service.FEXGetLast_CMP(auth)
 
             except Exception as e:
                 _logger.error('AFIP Web service error!: (%i) %s' % (e[0], e[1]))
@@ -261,24 +230,22 @@
                                        u'Pueda que esté intente realizar esta operación'
                                        u'desde el servidor de homologación.'
                                        u'Intente desde el servidor de producción.') % (e[0], e[1]))
-
-            if hasattr(response, 'Errors'):
-                for e in response.Errors.Err:
-                    code = e.Code
-                    _logger.error('AFIP Web service error!: (%i) %s' % (e.Code, e.Msg))
+            if (response.FEXErr.ErrCode != 0):
+                # Existe Error!
+                _logger.error('AFIP Web service error!: (%i) %s' % (response.FEXErr.ErrCode, response.FEXErr.ErrMsg))
                 r[srv.id] = False
             else:
-                r[srv.id] = int(response.FEXGetLast_CMPResult.FEXResult_LastCMP.CbteNro)
+                r[srv.id] = int(response.FEXResult_LastCMP.Cbte_nro)
         return r
         
     def wsfex_get_last_id(self, cr, uid, ids, conn_id, context=None):
         """
         Get Last ID number from AFIP.
 
-        AFIP Description: Recupera el ultimo ID y su fecha (FEXGetLast_ID) 
+        AFIP Description: Recupera el ultimo ID (FEXGetLast_ID) 
         """
         conn_obj = self.pool.get('wsafip.connection')
-
+        #~ import pdb; pdb.set_trace()
         for srv in self.browse(cr, uid, ids, context=context):
             # Ignore servers without code WSFEX.
             if srv.code != 'wsfex': continue
@@ -291,7 +258,7 @@
                 continue
 
             try:
-                _logger.info('Take last invoice number from AFIP Web service')
+                _logger.info('Take last ID number from AFIP Web service')
                 srvclient = Client(srv.url+'?WSDL', transport=HttpsTransport())
                 response = srvclient.service.FEXGetLast_ID(Auth=conn.get_auth())
 
@@ -302,17 +269,16 @@
                                        u'Pueda que esté intente realizar esta operación'
                                        u'desde el servidor de homologación.'
                                        u'Intente desde el servidor de producción.') % (e[0], e[1]))
-
-            if hasattr(response, 'Errors'):
-                for e in response.Errors.Err:
-                    code = e.Code
-                    _logger.error('AFIP Web service error!: (%i) %s' % (e.Code, e.Msg))
-                r[srv.id] = False
+            
+            if (response.FEXErr.ErrCode != 0):
+                # Existe Error!
+                _logger.error('AFIP Web service error!: (%i) %s' % (response.FEXErr.ErrCode, response.FEXErr.ErrMsg))
+                r = False
             else:
-                r[srv.id] = int(response.FEXGetLast_IDResult.FEXResultGet.Id)
+                r = int(response.FEXResultGet.Id)
         return r
     
-    def wsfex_check_permissions(client, token, sign, cuit, id_permiso, dst_merc):
+    def wsfex_check_permissions(self, cr, uid, ids, conn_id, id_permiso, dst_merc, context=None):
         """
         Check shipment/destination country permissions from AFIP
 
@@ -352,7 +318,7 @@
                     _logger.error('AFIP Web service error!: (%i) %s' % (e.Code, e.Msg))
                 r[srv.id] = False
             else:
-                r[srv.id] = str(response.FEXCheck_PermisoResult.FEXResultGet.Status)
+                r[srv.id] = str(response.FEXResultGet.Status)
         return r
         
     def wsfex_get_cae(self, cr, uid, ids, conn_id, invoice_request, context=None):
@@ -378,35 +344,35 @@
             try:
                 srvclient = Client(srv.url+'?WSDL', transport=HttpsTransport())
                 first = invoice_request.keys()[0]
+                #~ import pdb; pdb.set_trace()
                 response = srvclient.service.FEXAuthorize(Auth=conn.get_auth(),
                     Cmp = [dict([(k,v) for k,v in req.iteritems()]) for req in invoice_request.itervalues()]
                 )
-            except WebFault as e:
-                #~ import pdb; pdb.set_trace()
-                _logger.error('WebFault Error!: %s' % (e))
-                raise osv.except_osv(_(u'WebFault Error!'),
-                                     _(u'Error: %s') % (e))
             except Exception as e:
                 _logger.error('AFIP Web service error!: (%i) %s' % (e[0], e[1]))
                 raise osv.except_osv(_(u'AFIP Web service error'),
                                      _(u'System return error %i: %s') % (e[0], e[1]))
 
-            for resp in response.FEXAuthorizeResult.FEXResultAuth:
-                if resp.Resultado == 'R':
-                    # Existe Error!
-                    _logger.error('Rejected invoice: %s' % (resp,))
-                    r[int(resp.Id)]={
-                        'Eventos': [ (o.EventCode, unicode(o.EventMsg)) for o in response.FEXAuthorizeResult.FEXEvents ]
-                                if hasattr(response.FEXAuthorizeResult, 'FEXEvents') else [],
-                        'Errores': [ (e.ErrCode,   unicode(e.ErrMsg))   for e in response.FEXAuthorizeResult.FEXErr ]
-                                if hasattr(response.FEXAuthorizeResult, 'FEXErr')    else [],
-                    }
-                else:
-                    # Todo bien!
-                    r[int(resp.Id)]={
-                        'CAE': resp.Cae,
-                        'CAEFchVto': resp.Fch_venc_Cae,
-                    }
+
+            soapmessage = [dict([(k,v) for k,v in req.iteritems()]) for req in invoice_request.itervalues()]
+            cbte_nro = soapmessage[0].get('Cbte_nro')
+            
+            #~ import pdb; pdb.set_trace()
+            
+            if (response.FEXErr.ErrCode != 0):
+                # Existe Error!
+                _logger.error('Rejected invoice!')
+
+                r[cbte_nro]={
+                    'Eventos': [ (o[0], unicode(o[1])) for o in response.FEXEvents ] if (hasattr(response, 'FEXEvents') and response.FEXEvents.EventCode != 0) else [],
+                    'Errores': [ (e[0], unicode(e[1])) for e in response.FEXErr ]    if (hasattr(response, 'FEXErr')    and response.FEXErr.ErrCode != 0)      else [],
+                }
+            else:
+                # Todo bien!
+                r[cbte_nro]={
+                    'CAE': response.FEXResultAuth.Cae,
+                    'CAEFchVto': response.FEXResultAuth.Fch_venc_Cae,
+                }
         return r