← Back to team overview

savoirfairelinux-openerp team mailing list archive

[Merge] lp:~savoirfairelinux-openerp/openerp-sage-50/7.0-exportsage50 into lp:openerp-sage-50

 

eh.dem has proposed merging lp:~savoirfairelinux-openerp/openerp-sage-50/7.0-exportsage50 into lp:openerp-sage-50.

Requested reviews:
  Savoir-faire Linux' OpenERP (savoirfairelinux-openerp)

For more details, see:
https://code.launchpad.net/~savoirfairelinux-openerp/openerp-sage-50/7.0-exportsage50/+merge/191893

[UPG] Upgrade to version 7.0
-- 
https://code.launchpad.net/~savoirfairelinux-openerp/openerp-sage-50/7.0-exportsage50/+merge/191893
Your team Savoir-faire Linux' OpenERP is requested to review the proposed merge of lp:~savoirfairelinux-openerp/openerp-sage-50/7.0-exportsage50 into lp:openerp-sage-50.
=== added file '__init__.py'
--- __init__.py	1970-01-01 00:00:00 +0000
+++ __init__.py	2013-10-18 21:47:02 +0000
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero 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 Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+
+import wizard
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== added file '__openerp__.py'
--- __openerp__.py	1970-01-01 00:00:00 +0000
+++ __openerp__.py	2013-10-18 21:47:02 +0000
@@ -0,0 +1,131 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero 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 Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+{
+    'name': 'Export to Sage50',
+    'version': '1.0',
+    "category": 'Accounting & Finance',
+    'complexity': "easy",
+    'description': """
+French version below
+
+Export accounting data from OpenErp to Sage50.
+====================================
+ Export accounting data from OpenErp to Sage50. The exportation generates the imp file to import in Sage50.
+
+
+Documentation : layout of the import file (.IMP)
+====================================
+A PDF document (in the /doc repository) gives more details about the .IMP file layout that can be imported
+into Sage 50.This document is part of the Sage 50 SDK (Software Development Kit) available for download at
+the following address : http://na.sage.com/sage-simply-accounting/lp/partners/sdk/?isnow=ssa.
+
+
+
+Sage 50: After creating .IMP file
+====================================
+Solution:
+Importing purchase invoices, purchase quotes, sales invoices and sales orders into Sage 50
+How to import purchase invoices, purchase quotes, sales invoices and sales orders?
+You can import purchase invoices, purchase quotes, sales invoices and sales orders into Sage 50.
+The transaction(s) details should be in a text file with extension .IMP.
+
+
+After you have created the .IMP file, you can import the transaction(s) into Sage 50 by following these steps:
+(Account information is not included in the .IMP format because when importing the file, you will receive
+a pop-up screen to ask you "Select an Account to match".)
+
+From the Home Window, go to File, Import/Export
+Click on Import Transactions (the Import Transactions Wizard appears)
+Select on 'Import purchase invoices, purchase quotes, sales invoices, sales orders or time slips' and click Next
+You can now create a backup of your file
+Click Next
+Click on Browse and select the .IMP file previously created
+If the customer (or vendor) in the transaction(s) you are trying to import does not exist in the Sage 50 company,
+you will get a new window asking you if you want to add this customer (or vendor), or if you want to select
+another customer (or vendor) from the existing ones
+You will also get a similar window if the import file uses an inventory item which does not exist in Sage 50.
+You will see a summary of the imported transactions, click OK and then Finish.
+If you got any errors importing the data, open the .IMP file in Notepad and use the attached .PDF document
+to verify the file format. Once the errors have been corrected, you can try the import again.
+Note: View KB25664 for information about some possible errors when importing .IMP file.
+Sage Business Care plan does NOT include support for SDK. Please, contact one of our partners website
+for further assistance.
+
+Possible errors when importing purchase invoices, purchase quotes, sales invoices and/or sales orders
+====================================
+Questions and Answers
+Import started... Errors occurred while importing.
+Line x does not contain compatible tax information.
+Invalid date. The date must be between <date1> and <date2>.
+
+
+A: These are the possible reasons for getting any of these error messages when importing transactions
+into Simply Accounting:
+
+- The import file (extension .IMP) you are using does not have the proper format.
+  Refer to the KB article 25659 for more information about the format of the import file.
+
+- The transaction type is not enabled in the Simply Accounting company. To enable the feature, from the Home Window
+in Simply Accounting, go to Setup, Settings, Company, Features, make sure the type of transaction you want to import
+is checked
+
+- The dates in the import file do not match the fiscal year dates in Simply Accounting.
+  Open the import file in Notepad and make the necessary changes
+
+
+Exportation des données comptables de OpenERP vers Sage50.
+==============================================
+Ce module exporte des données comptables de OpenERP vers Sage50. Le module génére un fichier imp file qui peut
+être importé dans Sage50.
+
+Documentation : Format du fichier à importer (.IMP)
+====================================
+Un document .PDF (dans le répertoire /doc) donne plus de détails sur le format du fichier .IMP qui peut être
+importé dans Sage 50. Ce document fait parti du Kit de développement - SDK de Sage 50  qui peut-être téléchargé
+à l'adresse suivante : http://na.sage.com/sage-simply-accounting/lp/partners/sdk/?isnow=ssa.
+
+Guide d'utilisation export Sage 50
+========================================
+Comment exporter les données comptables à partir d'OpenERP?
+Un manuel d'utilisation est disponible dans le répertoire /doc du module.
+Il peut être également téléchargé sur le site de Gestion-Ressources à l'adresse suivante :
+http://gestion-ressources.com/contributions
+
+    """,
+    'author': 'EL HADJI DEM @ SavoirFaireLinux',
+    'website': 'http://www.savoirfairelinux.com',
+    'images': [],
+    'depends': ['account'],
+    'data': [
+        'security/ir.model.access.csv',
+    ],
+    'init_xml': [],
+    'update_xml': [
+        'wizard/exportsage50_view.xml'
+    ],
+    'demo_xml': [],
+    'test':[],
+    'installable': True,
+    'auto_install': False,
+    'certificate': '',
+    'application': True,
+}
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== added directory 'docs'
=== added file 'docs/Guide_Export_Sage_50_OpenERP_FR.pdf'
Binary files docs/Guide_Export_Sage_50_OpenERP_FR.pdf	1970-01-01 00:00:00 +0000 and docs/Guide_Export_Sage_50_OpenERP_FR.pdf	2013-10-18 21:47:02 +0000 differ
=== added file 'docs/dev-import.pdf'
Binary files docs/dev-import.pdf	1970-01-01 00:00:00 +0000 and docs/dev-import.pdf	2013-10-18 21:47:02 +0000 differ
=== added directory 'i18n'
=== added file 'i18n/fr.po'
--- i18n/fr.po	1970-01-01 00:00:00 +0000
+++ i18n/fr.po	2013-10-18 21:47:02 +0000
@@ -0,0 +1,116 @@
+# Translation of OpenERP Server.
+# This file contains the translation of the following modules:
+#	* gr_exportsage50
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OpenERP Server 6.1-1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-02-25 15:57+0000\n"
+"PO-Revision-Date: 2013-02-25 15:57+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: gr_exportsage50
+#: field:exportsage,formats:0
+msgid "File Format"
+msgstr "Format de fichier"
+
+#. module: gr_exportsage50
+#: help:exportsage,invoice_ids:0
+msgid "This is the list of invoices that have been generated for this sales order. The same sales order may have been invoiced in several times (by line for example)."
+msgstr "Il s'agit de la liste des factures qui ont été générées pour les bons de commande. Les mêmes bons de commandes peuvent être facturés en plusieurs fois (par ligne, par exemple)."
+
+#. module: gr_exportsage50
+#: view:exportsage:0
+msgid "Export done"
+msgstr "Export terminé"
+
+#. module: gr_exportsage50
+#: selection:exportsage,state:0
+msgid "get"
+msgstr "obtenir"
+
+#. module: gr_exportsage50
+#: view:exportsage:0
+#: field:exportsage,invoice_ids:0
+msgid "Invoices"
+msgstr "Factures"
+
+#. module: gr_exportsage50
+#: field:exportsage,state:0
+msgid "unknown"
+msgstr "inconnu"
+
+#. module: gr_exportsage50
+#: view:exportsage:0
+msgid "Create"
+msgstr "Créer"
+
+#. module: gr_exportsage50
+#: view:exportsage:0
+msgid "This action allows you to export accounting data from OpenErp to Simply account.You should have the same configuration about the tax information"
+msgstr "Cette action vous permet d'exporter les données comptables de OpenErp vers Sage50.Vous devrez avoir la même configuration sur les taxes."
+
+#. module: gr_exportsage50
+#: field:exportsage,name:0
+msgid "Filename"
+msgstr "Nom du fichier"
+
+#. module: gr_exportsage50
+#: view:exportsage:0
+#: model:ir.ui.menu,name:gr_exportsage50.menu_report
+msgid "Export to Sage50"
+msgstr "Exporter vers Sage50"
+
+#. module: gr_exportsage50
+#: code:addons/gr_exportsage50/wizard/exportsage50.py:72
+#, python-format
+msgid "You have to select at least 1 Invoice. And try again"
+msgstr "Vous devez sélectionner au moins 1 facture. Essayez à nouveau"
+
+#. module: gr_exportsage50
+#: model:ir.model,name:gr_exportsage50.model_exportsage
+msgid "Create imp file  to export  in sage50"
+msgstr "Créer un fichier .imp pour l'export vers sage50"
+
+#. module: gr_exportsage50
+#: selection:exportsage,state:0
+msgid "choose"
+msgstr "Choisir"
+
+#. module: gr_exportsage50
+#: field:exportsage,data:0
+msgid "File"
+msgstr "Fichier"
+
+#. module: gr_exportsage50
+#: code:addons/gr_exportsage50/wizard/exportsage50.py:72
+#, python-format
+msgid "Error"
+msgstr "Erreur"
+
+#. module: gr_exportsage50
+#: view:exportsage:0
+msgid "Cancel"
+msgstr "Annuler"
+
+#. module: gr_exportsage50
+#: view:exportsage:0
+msgid "_Close"
+msgstr "_Fermer"
+
+#. module: gr_exportsage50
+#: field:exportsage,config_logo:0
+msgid "Image"
+msgstr "Image"
+
+#. module: gr_exportsage50
+#: model:ir.actions.act_window,name:gr_exportsage50.action_account_invoice_generate_export
+msgid "Export accounting data to Sage50"
+msgstr "Exporter les données comptables vers Sage50"
+

=== added directory 'security'
=== added file 'security/ir.model.access.csv'
--- security/ir.model.access.csv	1970-01-01 00:00:00 +0000
+++ security/ir.model.access.csv	2013-10-18 21:47:02 +0000
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_exportsage,exportsage,model_exportsage,account.group_account_user,1,0,0,0

=== added directory 'static'
=== added directory 'static/src'
=== added directory 'static/src/img'
=== added file 'static/src/img/icon.png'
Binary files static/src/img/icon.png	1970-01-01 00:00:00 +0000 and static/src/img/icon.png	2013-10-18 21:47:02 +0000 differ
=== added directory 'wizard'
=== added file 'wizard/__init__.py'
--- wizard/__init__.py	1970-01-01 00:00:00 +0000
+++ wizard/__init__.py	2013-10-18 21:47:02 +0000
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero 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 Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import exportsage50
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
+
+

=== added file 'wizard/exportsage50.py'
--- wizard/exportsage50.py	1970-01-01 00:00:00 +0000
+++ wizard/exportsage50.py	2013-10-18 21:47:02 +0000
@@ -0,0 +1,208 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2010 Tiny SPRL (<http://tiny.be>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero 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 Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+from openerp.osv import fields, osv
+import web
+import base64
+import openerp.tools
+from openerp.tools.translate import _
+from openerp.tools.misc import get_iso_codes
+import pooler
+from datetime import datetime
+import openerp.addons.decimal_precision as dp
+
+
+class exportsage(osv.osv):
+    """
+    Wizard 
+    """
+    _name = "exportsage"
+    _description = "Create imp file  to export  in sage50"
+    #_inherit = "ir.wizard.screen"
+    _columns = {
+        'data': fields.binary('File', readonly=True),
+        'name': fields.char('Filename', 20, readonly=True),
+        'format': fields.char('File Format', 10),
+        'state': fields.selection([('choose', 'choose'), # choose date
+                                   ('get', 'get')]),
+        'invoice_ids': fields.many2many('account.invoice', 'sale_order_invoice_export_rel', 'order_id', 'invoice_id',
+                                        'Invoices', required=True,
+                                        help="This is the list of invoices that have been generated for this sales order. The same sales order may have been invoiced in several times (by line for example)."),
+    }
+
+    _defaults = {
+        'state': lambda *a: 'choose',
+    }
+
+    def act_cancel(self, cr, uid, ids, context=None):
+        #self.unlink(cr, uid, ids, context)
+        return {'type': 'ir.actions.act_window_close'}
+
+
+    def act_destroy(self, *args):
+        return {'type': 'ir.actions.act_window_close'}
+
+    def create_report(self, cr, uid, ids, context=None):
+        if context == None:
+            context = {}
+        this = self.browse(cr, uid, ids)[0]
+        data = self.read(cr, uid, ids, [], context=context)[0]
+
+        if not data['invoice_ids']:
+            raise osv.except_osv(_('Error'), _('You have to select at least 1 Invoice. And try again'))
+
+        output = '<Version>''\n' + '"12001"' + ',' + '"1"''\n' + '</Version>\n\n'
+        #Faire le traitement des autres lignes dans les lignes de factures
+        pool = pooler.get_pool(cr.dbname)
+        line_obj = pool.get('account.invoice')
+
+        for line in line_obj.browse(cr, uid, data['invoice_ids'], context):
+            # tag de debut pour les lignes de factures
+            output += '<SalInvoice>''\n'
+            #informations sur le client
+            costumer_name = line.partner_id.name
+            oneTimefield = ""
+            contact_name = line.partner_id.name or ""
+            street1 = line.partner_id.street or ""
+            street2 = line.partner_id.street2 or ""
+            city = line.partner_id.city or ""
+            province_state = line.partner_id.state_id.name or ""
+            zip_code = line.partner_id.zip or ""
+            country = line.partner_id.country_id.name or ""
+            phone1 = line.partner_id.phone or ""
+            mobile = line.partner_id.mobile or ""
+            fax = line.partner_id.fax or ""
+            email = line.partner_id.email or ""
+            # ligne de client
+            fields = [costumer_name, oneTimefield, contact_name, street1, street2,
+                      city, province_state, zip_code, country, phone1, mobile, fax, email
+                      ]
+            costumer = ','.join(['"%s"' % field for field in fields])
+            #print costumer
+            #exit(0)
+            output += costumer.encode('UTF-8') + '\n'
+            #informations sur la facture
+            no_of_details = str(len(line.invoice_line))
+            order_no = ""
+            # Invoice number (Max 20 chars)
+            invoice_no = str(line.number)
+            # date de la facture
+            if line.date_invoice:
+                entry_date = datetime.strptime(line.date_invoice, "%Y-%m-%d").strftime('%m-%d-%Y')  # date format : mm-dd-yyyy
+            else:
+                entry_date = ""
+            # Informations sur le type de paiement (between 0 and 3)
+            # 0 = pay later , 1 = cash , 2 = cheque , 3 = credit card
+            # Selectionner le dernier paiement
+            list_id = []
+            # Paid by source (20 Chars) : Blank- pay later and cash Cheque number or credit card
+            paid_by_source = ""
+            if line.payment_ids:
+                for oneId in line.payment_ids:
+                    list_id.append(oneId.id)
+                lastId = max(list_id)
+                # acceder à partir du dernier paiement à l'objet account_move_line
+                account_move_line_obj = self.pool.get('account.move.line')
+                account_move_line = account_move_line_obj.browse(cr, uid, lastId, context=context)
+                paiement_type = account_move_line.journal_id.type
+                if paiement_type == 'cash':
+                    paid_by_type = str(1)
+                    paid_by_source = account_move_line.ref
+                elif paiement_type == 'bank':
+                    paid_by_type = str(2)
+                else:
+                    paid_by_type = str(0) # default value 0 = pay later
+
+            else:
+                paid_by_type = str(0) # default value 0 = pay later
+            total_amount = str(line.amount_total) or ""
+            freight_amount = "0.0"
+            fields_sale_invoice = [no_of_details, order_no, invoice_no, entry_date, paid_by_type,
+                                  paid_by_source, total_amount, freight_amount,
+                                  ]
+            sale_invoice = ','.join(['"%s"' % field_sale_invoice for field_sale_invoice in fields_sale_invoice])
+            #sale_invoice = '"' + no_of_details + '"' + ',"' + order_no + '"' + ',"' + invoice_no + '"' + ',"' + entry_date + '"' + ',"' + paid_by_type + '"' + ',"' + paid_by_source + '"' + ',"' + total_amount + '"' + ',"' + freight_amount + '"'
+            output += sale_invoice.encode('UTF-8') + '\n'
+            product_line_invoice_with_taxe = ""
+            #Sale invoice detail lines
+            account_invoice_line_obj =self.pool.get('account.invoice.line')
+            product_ids = account_invoice_line_obj.search(cr, uid, [('invoice_id','=',line.id)])
+
+            if product_ids:
+                for product in account_invoice_line_obj.browse(cr, uid, product_ids):
+                    item_number = str(product.name)
+                    quantity = str(product.quantity)
+                    price = str(product.price_unit)
+                    amount = product.quantity * product.price_unit
+                    amount = str(round(amount, self.pool.get('decimal.precision').precision_get(cr, uid, 'Account')))
+                    fields_one_product_invoice = [item_number, quantity, price, amount]
+                    one_product_invoice = ','.join(['"%s"' % field_one_product_invoice for field_one_product_invoice in fields_one_product_invoice])
+                    #one_product_invoice = '"' + item_number + '"' + ',"' + quantity + '"' + ',"' + price + '"' + ',"' + amount + '"'
+                    one_product_invoice = one_product_invoice.encode('UTF-8')
+                    tax_product_line = ""
+                    # tax information pour chaque produit
+                    if product.invoice_line_tax_id:
+                        for one_taxe in product.invoice_line_tax_id:
+                            tax_name = one_taxe.description # or one_taxe.description or one_taxe.name
+                            if one_taxe.price_include:
+                                tax_included = str(1) # 1=yes,0=No
+                            else:
+                                tax_included = str(0) # 1=yes,0=No
+                            tax_refundable = str(1) # 1=yes,0=No
+                            tax_rate = str(one_taxe.amount)
+                            tax_amount = str(one_taxe.amount)
+                            fields_tax_product_line = [tax_name, tax_included, tax_refundable, tax_rate, tax_amount,
+                                                       ]
+                            tax_product_line = ',' + ','.join(['"%s"' % field_tax_product_line for field_tax_product_line in fields_tax_product_line])
+                            #tax_product_line += ',"' + tax_name + '"' + ',"' + tax_included + '"' + ',"' + tax_refundable + '"' + ',"' + tax_rate + '"' + ',"' + tax_amount + '"'
+
+                        #tax_product_line = tax_product_line[:-1]
+                        tax_product_line = tax_product_line.encode('UTF-8')
+                    product_line_invoice_with_taxe += one_product_invoice + tax_product_line + '\n'
+                #print product_line_invoice_with_taxe , exit(0)
+
+                output += product_line_invoice_with_taxe
+            # tag de fin  pour les lignes de factures
+            #output += '</SalInvoice>\n'
+            output += '</SalInvoice>\n\n\n'
+        #output += '\n' + this.start_date + ',' + this.end_date
+        this.format = 'imp'
+        filename = 'export_to_sage50'
+        this.name = "%s.%s" % (filename, this.format)
+        out = base64.encodestring(output)
+        self.write(cr, uid, ids, {'state':'get', 'data':out, 'name':this.name, 'format' : this.format}, context=context)
+
+        return {
+            'type': 'ir.actions.act_window',
+            'res_model': 'exportsage',
+            'view_mode': 'form',
+            'view_type': 'form',
+            'res_id': this.id,
+            'views': [(False, 'form')],
+            'target': 'new',
+        }
+
+
+
+exportsage()
+
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== added file 'wizard/exportsage50_view.xml'
--- wizard/exportsage50_view.xml	1970-01-01 00:00:00 +0000
+++ wizard/exportsage50_view.xml	2013-10-18 21:47:02 +0000
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+    <data>
+        <record id="account_invoice_generate_export_view" model="ir.ui.view">
+            <field name="name">Export to Sage50</field>
+            <field name="model">exportsage</field>
+            <field name="arch" type="xml">
+                <form string="Export to Sage50" version="7.0">
+                    <field invisible="1" name="state"/>
+                    <field invisible="1" name="format"/>
+                    <label string="This action allows you to export accounting data from OpenErp to Simply account.You should have the same configuration about the tax information"/>
+                    <group states="choose" string="Export Settings">
+                        <field name="invoice_ids" colspan="4" nolabel="1"/>
+                    </group>
+                    <div states="get">
+                        <h2>Export Complete</h2>
+                        <p>Here is the exported  file: <field name="data" readonly="1" filename="name"/></p>
+                        <p>This file was generated using the universal <strong>Unicode/UTF-8</strong> file encoding, please be sure to view and edit
+                           using the same encoding.</p>
+                    </div>
+                    <footer states="choose">
+                        <button name="create_report" string="Export" type="object" class="oe_highlight"/> or
+                        <button special="cancel" string="Cancel" type="object" class="oe_link"/>
+                    </footer>
+                    <footer states="get">
+                        <button special="cancel" string="Close" type="object"/>
+                    </footer>
+                </form>
+            </field>
+        </record>
+
+        <record id="action_account_invoice_generate_export_view" model="ir.actions.act_window">
+            <field name="name">Export accounting data to Sage50</field>
+            <field name="type">ir.actions.act_window</field>
+            <field name="res_model">exportsage</field>
+            <field name="view_type">form</field>
+            <field name="view_mode">form</field>
+
+            <field name="target">new</field>
+        </record>
+        <menuitem action="action_account_invoice_generate_export_view" id="menu_account_invoice_generate_export_view" parent="account.menu_finance_legal_statement"/>
+    </data>
+</openerp>


Follow ups