From fb3f7aa747d4d196abd3963ef1cbdfae910551a5 Mon Sep 17 00:00:00 2001 From: Numerigraphe - Lionel Sausin Date: Tue, 10 Jan 2012 13:35:59 +0100 Subject: [PATCH 001/662] [IMP] delivery: move picking's net weight to extended view bzr revid: ls@numerigraphe.fr-20120110123559-1llywc42k606hryj --- addons/delivery/delivery_view.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/delivery/delivery_view.xml b/addons/delivery/delivery_view.xml index c46253777d2..47ed9d6d274 100644 --- a/addons/delivery/delivery_view.xml +++ b/addons/delivery/delivery_view.xml @@ -194,7 +194,7 @@ - + - + - + @@ -245,7 +245,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -271,7 +271,7 @@ - + From 32781b0268a8b3583869cd14809e466568ee2a7f Mon Sep 17 00:00:00 2001 From: Numerigraphe - Lionel Sausin Date: Mon, 16 Jan 2012 11:34:06 +0100 Subject: [PATCH 002/662] [FIX] typo in XML file bzr revid: ls@numerigraphe.fr-20120116103406-gwx3w8zlnrnvlyyr --- addons/delivery/delivery_view.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/delivery/delivery_view.xml b/addons/delivery/delivery_view.xml index 47ed9d6d274..6c9e8c85cdb 100644 --- a/addons/delivery/delivery_view.xml +++ b/addons/delivery/delivery_view.xml @@ -194,7 +194,7 @@ - @@ -207,7 +207,7 @@ - From 438cde1f2f9b6204a0cb71338eacc7dfa1fab4e9 Mon Sep 17 00:00:00 2001 From: "nicolas.bessi@camptocamp.com" <> Date: Wed, 8 Feb 2012 11:37:15 +0100 Subject: [PATCH 003/662] [FIX] l10n_ch bvr report to follow last patches of report_webkit addons bzr revid: nicolas.bessi@camptocamp.com-20120208103715-gk6upkf3b47av9h1 --- addons/l10n_ch/report/report_webkit_html.py | 154 +++++++------------- 1 file changed, 51 insertions(+), 103 deletions(-) diff --git a/addons/l10n_ch/report/report_webkit_html.py b/addons/l10n_ch/report/report_webkit_html.py index e6f7239c4e4..72158361da7 100644 --- a/addons/l10n_ch/report/report_webkit_html.py +++ b/addons/l10n_ch/report/report_webkit_html.py @@ -20,22 +20,31 @@ ############################################################################## import time -from report import report_sxw -from report_webkit import webkit_report -from report_webkit import report_helper -from osv import osv -from tools import mod10r import sys import os import re + +from mako.template import Template +from mako.lookup import TemplateLookup +from mako import exceptions + + +from report import report_sxw +from report_webkit import webkit_report +from report_webkit import report_helper + +from osv import osv +from osv.osv import except_osv + +from tools import mod10r +from tools.translate import _ +from tools.config import config + import wizard import addons import pooler -from tools.config import config -from mako.template import Template -from mako import exceptions -from tools.translate import _ -from osv.osv import except_osv + + class l10n_ch_report_webkit_html(report_sxw.rml_parse): @@ -143,53 +152,26 @@ class l10n_ch_report_webkit_html(report_sxw.rml_parse): 'digits!\nPlease check your company ' 'information for the invoice:\n%s') %(invoice_name))) return '' + +def mako_template(text): + """Build a Mako template. + + This template uses UTF-8 encoding + """ + tmp_lookup = TemplateLookup() #we need it in order to allow inclusion and inheritance + return Template(text, input_encoding='utf-8', output_encoding='utf-8', lookup=tmp_lookup) class BVRWebKitParser(webkit_report.WebKitParser): - def setLang(self, lang): - if not lang: - lang = 'en_US' - self.localcontext['lang'] = lang - - def formatLang(self, value, digits=None, date=False, date_time=False, grouping=True, monetary=False): - """format using the know cursor, language from localcontext""" - if digits is None: - digits = self.parser_instance.get_digits(value) - if isinstance(value, (str, unicode)) and not value: - return '' - pool_lang = self.pool.get('res.lang') - lang = self.localcontext['lang'] - - lang_ids = pool_lang.search(self.parser_instance.cr, self.parser_instance.uid, [('code','=',lang)])[0] - lang_obj = pool_lang.browse(self.parser_instance.cr, self.parser_instance.uid, lang_ids) - - if date or date_time: - if not str(value): - return '' - - date_format = lang_obj.date_format - parse_format = '%Y-%m-%d' - if date_time: - value=value.split('.')[0] - date_format = date_format + " " + lang_obj.time_format - parse_format = '%Y-%m-%d %H:%M:%S' - if not isinstance(value, time.struct_time): - return time.strftime(date_format, time.strptime(value, parse_format)) - - else: - date = datetime(*value.timetuple()[:6]) - return date.strftime(date_format) - - return lang_obj.format('%.' + str(digits) + 'f', value, grouping=grouping, monetary=monetary) - def create_single_pdf(self, cursor, uid, ids, data, report_xml, context=None): """generate the PDF""" - self.parser_instance = self.parser( - cursor, + context = context or {} + if report_xml.report_type != 'webkit': + return super(WebKitParser,self).create_single_pdf(cursor, uid, ids, data, report_xml, context=context) + self.parser_instance = self.parser(cursor, uid, self.name2, - context=context - ) + context=context) self.pool = pooler.get_pool(cursor.dbname) objs = self.getObjects(cursor, uid, ids, context) self.parser_instance.set_context(objs, data, ids, report_xml.report_type) @@ -201,7 +183,7 @@ class BVRWebKitParser(webkit_report.WebKitParser): if not template and report_xml.report_webkit_data : template = report_xml.report_webkit_data if not template : - raise except_osv(_('Webkit Report template not found !'), _('')) + raise except_osv(_('Error'),_('Webkit Report template not found !')) header = report_xml.webkit_header.html footer = report_xml.webkit_header.footer_html if not header and report_xml.header: @@ -210,43 +192,19 @@ class BVRWebKitParser(webkit_report.WebKitParser): _('Please set a header in company settings') ) if not report_xml.header : - #I know it could be cleaner ... - header = u""" - - - - - - - -""" - self.parser_instance.localcontext.update({'setLang':self.setLang}) - self.parser_instance.localcontext.update({'formatLang':self.formatLang}) + header = '' + default_head = addons.get_module_resource('report_webkit', 'default_header.html') + with open(default_head,'r') as f: + header = f.read() css = report_xml.webkit_header.css if not css : css = '' user = self.pool.get('res.users').browse(cursor, uid, uid) company = user.company_id - parse_template = template - #default_filters=['unicode', 'entity'] can be used to set global filter - body_mako_tpl = Template(parse_template ,input_encoding='utf-8', output_encoding='utf-8') + body_mako_tpl = mako_template(template) #BVR specific bvr_path = addons.get_module_resource(os.path.join('l10n_ch','report','bvr.mako')) - body_bvr_tpl = Template(file(bvr_path).read(), input_encoding='utf-8', output_encoding='utf-8') - + body_bvr_tpl = mako_template(file(bvr_path).read()) helper = report_helper.WebKitHelper(cursor, uid, report_xml.id, context) ##BVR Specific htmls = [] @@ -254,58 +212,48 @@ class BVRWebKitParser(webkit_report.WebKitParser): self.parser_instance.localcontext['objects'] = [obj] if not company.bvr_only: try: - html = body_mako_tpl.render( - helper=helper, + html = body_mako_tpl.render(helper=helper, css=css, _=self.translate_call, - **self.parser_instance.localcontext - ) + **self.parser_instance.localcontext) except Exception, e: raise Exception(exceptions.text_error_template().render()) htmls.append(html) if not company.invoice_only: try: - bvr = body_bvr_tpl.render( - helper=helper, - css=css, - _=self.translate_call, - **self.parser_instance.localcontext - ) + bvr = body_bvr_tpl.render(helper=helper, + css=css, + _=self.translate_call, + **self.parser_instance.localcontext) except Exception, e: raise Exception(exceptions.text_error_template().render()) htmls.append(bvr) head_mako_tpl = Template(header, input_encoding='utf-8', output_encoding='utf-8') try: - head = head_mako_tpl.render( - helper=helper, + head = head_mako_tpl.render(helper=helper, css=css, _debug=False, _=self.translate_call, - **self.parser_instance.localcontext - ) + **self.parser_instance.localcontext) except Exception, e: raise Exception(exceptions.text_error_template().render()) foot = False if footer and company.invoice_only : foot_mako_tpl = Template(footer, input_encoding='utf-8', output_encoding='utf-8') try: - foot = foot_mako_tpl.render( - helper=helper, + foot = foot_mako_tpl.render(helper=helper, css=css, _=self.translate_call, - **self.parser_instance.localcontext - ) + **self.parser_instance.localcontext) except Exception, e: raise Exception(exceptions.text_error_template().render()) if report_xml.webkit_debug : try: - deb = head_mako_tpl.render( - helper=helper, + deb = head_mako_tpl.render(helper=helper, css=css, _debug=html, _=self.translate_call, - **self.parser_instance.localcontext - ) + **self.parser_instance.localcontext) except Exception, e: raise Exception(exceptions.text_error_template().render()) return (deb, 'html') From 02b41a75ceb5df2ca4227de5839ebd46da0e5462 Mon Sep 17 00:00:00 2001 From: Yury Tello Date: Sun, 19 Feb 2012 14:10:02 -0500 Subject: [PATCH 004/662] [ADD] l10n_cl bzr revid: ytello@cubicerp.com-20120219191002-6yid2f812r4ypg05 --- addons/l10n_cl/__init__.py | 32 ++++ addons/l10n_cl/__openerp__.py | 51 ++++++ addons/l10n_cl/account_tax.xml | 34 ++++ addons/l10n_cl/account_tax_code.xml | 94 ++++++++++ addons/l10n_cl/i18n/es.po | 72 ++++++++ addons/l10n_cl/i18n/es_CL.po | 53 ++++++ addons/l10n_cl/i18n/l10n_cl.pot | 35 ++++ addons/l10n_cl/l10n_cl_chart.xml | 256 ++++++++++++++++++++++++++++ addons/l10n_cl/l10n_cl_wizard.xml | 15 ++ 9 files changed, 642 insertions(+) create mode 100644 addons/l10n_cl/__init__.py create mode 100644 addons/l10n_cl/__openerp__.py create mode 100644 addons/l10n_cl/account_tax.xml create mode 100644 addons/l10n_cl/account_tax_code.xml create mode 100644 addons/l10n_cl/i18n/es.po create mode 100644 addons/l10n_cl/i18n/es_CL.po create mode 100644 addons/l10n_cl/i18n/l10n_cl.pot create mode 100644 addons/l10n_cl/l10n_cl_chart.xml create mode 100644 addons/l10n_cl/l10n_cl_wizard.xml diff --git a/addons/l10n_cl/__init__.py b/addons/l10n_cl/__init__.py new file mode 100644 index 00000000000..92da5dbf966 --- /dev/null +++ b/addons/l10n_cl/__init__.py @@ -0,0 +1,32 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (c) 2011 Cubic ERP - Teradata SAC. (http://cubicerp.com). +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# 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 2 +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_cl/__openerp__.py b/addons/l10n_cl/__openerp__.py new file mode 100644 index 00000000000..249bdb3ae48 --- /dev/null +++ b/addons/l10n_cl/__openerp__.py @@ -0,0 +1,51 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2011 Cubic ERP - Teradata SAC (). +# +# 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 . +# +############################################################################## +{ + "name": "Argentina Localization Chart Account", + "version": "1.0", + "description": """ +Chilean accounting chart and tax localization. + +Plan contable chileno e impuestos de acuerdo a disposiciones vigentes + + """, + "author": "Cubic ERP", + "website": "http://cubicERP.com", + "category": "Localization/Account Charts", + "depends": [ + "account_chart", + ], + "data":[ + "account_tax_code.xml", + "l10n_cl_chart.xml", + "account_tax.xml", + "l10n_cl_wizard.xml", + ], + "demo_xml": [ + ], + "update_xml": [ + ], + "active": False, + "installable": True, + "certificate" : "", + 'images': ['images/config_chart_l10n_cl.jpeg','images/l10n_cl_chart.jpeg'], +} +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/l10n_cl/account_tax.xml b/addons/l10n_cl/account_tax.xml new file mode 100644 index 00000000000..1db0d2637f4 --- /dev/null +++ b/addons/l10n_cl/account_tax.xml @@ -0,0 +1,34 @@ + + + + + + + IVA 19% Venta + 0.190000 + percent + sale + + + + + + + + + + + IVA 19% Compra + 0.190000 + percent + purchase + + + + + + + + + + diff --git a/addons/l10n_cl/account_tax_code.xml b/addons/l10n_cl/account_tax_code.xml new file mode 100644 index 00000000000..95c91b60d78 --- /dev/null +++ b/addons/l10n_cl/account_tax_code.xml @@ -0,0 +1,94 @@ + + + + + + Chile Impuestos + + + Base Imponible + + + + Base Imponible - Ventas + + + + Ventas Gravadas con IVA + + + + Ventas NO Gravadas (Exoneradas) + + + + Ventas Gravadas Fuera de Ámbito + + + + Base Imponible - Compras + + + + Compras Gravadas con IVA + + + + Compras NO Gravadas (Exoneradas) + + + + Compras Gravadas Fuera de Ámbito + + + + + Impuesto General a las Ventas (IVA) Total a Pagar + + + + Impuesto Pagado + + + + Impuesto Pagado IVA + + -1 + + + Impuesto Pagado de Exonerados al IVA + + -1 + + + Impuesto Pagado Fuera de Ámbito + + -1 + + + Impuesto Cobrado + + + + Impuesto Cobrado IVA + + + + Impuesto Cobrado de Exonerados al IVA + + + + Impuesto Cobrado Fuera de Ámbito + + + + + Impuestos Directos a Pagar + + + + Impuesto a la Renta Primera Categoría a Pagar + + + + diff --git a/addons/l10n_cl/i18n/es.po b/addons/l10n_cl/i18n/es.po new file mode 100644 index 00000000000..f8b17197008 --- /dev/null +++ b/addons/l10n_cl/i18n/es.po @@ -0,0 +1,72 @@ +# Spanish translation for openobject-addons +# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-01-10 13:46+0000\n" +"Last-Translator: Yury Tello \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-01-15 05:56+0000\n" +"X-Generator: Launchpad (build 12177)\n" + +#. module: l10n_cl +#: model:ir.module.module,description:l10n_cl.module_meta_information +msgid "" +"\n" +" Chilean Accounting : chart of Account\n" +" " +msgstr "" +"\n" +" Contabilidad Peruana : Plan de cuentas\n" +" " + +#. module: l10n_cl +#: model:ir.module.module,shortdesc:l10n_cl.module_meta_information +msgid "Chilean Chart of Account" +msgstr "Plan de cuentas de Chile" + +#. module: l10n_cl +#: model:ir.actions.todo,note:l10n_cl.config_call_account_template_in_minimal +msgid "" +"Generate Chart of Accounts from a Chart Template. You will be asked to pass " +"the name of the company, the chart template to follow, the no. of digits to " +"generate the code for your accounts and Bank account, currency to create " +"Journals. Thus,the pure copy of chart Template is generated.\n" +"\tThis is the same wizard that runs from Financial " +"Management/Configuration/Financial Accounting/Financial Accounts/Generate " +"Chart of Accounts from a Chart Template." +msgstr "" +"Generar el plan contable a partir de una plantilla de plan contable. Se le " +"pedirá el nombre de la compañia, la plantilla de plan contable a utilizar, " +"el número de dígitos para generar el código de las cuentas y de la cuenta " +"bancaria, la moneda para crear los diarios. Así pues, se genere una copia " +"exacta de la plantilla de plan contable.\n" +"\tEste es el mismo asistente que se ejecuta desde Contabilidad y finanzas / " +"Configuración / Contabilidad financiera / Cuentas financieras / Generar el " +"plan contable a partir de una plantilla de plan contable." + +#~ msgid "Liability" +#~ msgstr "Pasivo" + +#~ msgid "Asset" +#~ msgstr "Activo" + +#~ msgid "Closed" +#~ msgstr "Cerrado" + +#~ msgid "Income" +#~ msgstr "Ingreso" + +#~ msgid "Expense" +#~ msgstr "Gasto" + +#~ msgid "View" +#~ msgstr "Vista" diff --git a/addons/l10n_cl/i18n/es_CL.po b/addons/l10n_cl/i18n/es_CL.po new file mode 100644 index 00000000000..cd0a9f9c43e --- /dev/null +++ b/addons/l10n_cl/i18n/es_CL.po @@ -0,0 +1,53 @@ +# Spanish (Paraguay) translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-01-11 11:15+0000\n" +"PO-Revision-Date: 2011-03-21 16:23+0000\n" +"Last-Translator: FULL NAME \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-03-22 04:36+0000\n" +"X-Generator: Launchpad (build 12559)\n" + +#. module: l10n_cl +#: model:ir.module.module,description:l10n_cl.module_meta_information +msgid "" +"\n" +" Chilean Accounting : chart of Account\n" +" " +msgstr "" +"\n" +" Contabilidad Chile : Plan de cuentas\n" +" " + +#. module: l10n_cl +#: model:ir.module.module,shortdesc:l10n_cl.module_meta_information +msgid "Chilean Chart of Account" +msgstr "Plan de cuentas de la Chile" + +#. module: l10n_cl +#: model:ir.actions.todo,note:l10n_cl.config_call_account_template_in_minimal +msgid "" +"Generate Chart of Accounts from a Chart Template. You will be asked to pass " +"the name of the company, the chart template to follow, the no. of digits to " +"generate the code for your accounts and Bank account, currency to create " +"Journals. Thus,the pure copy of chart Template is generated.\n" +"\tThis is the same wizard that runs from Financial " +"Management/Configuration/Financial Accounting/Financial Accounts/Generate " +"Chart of Accounts from a Chart Template." +msgstr "" +"Generar el plan contable a partir de una plantilla de plan contable. Se le " +"pedirá el nombre de la compañía, la plantilla de plan contable a utilizar, " +"el número de dígitos para generar el código de las cuentas y de la cuenta " +"bancaria, la moneda para crear los diarios. Así pues, se genere una copia " +"exacta de la plantilla de plan contable.\n" +"\tEste es el mismo asistente que se ejecuta desde Contabilidad y finanzas / " +"Configuración / Contabilidad financiera / Cuentas financieras / Generar el " +"plan contable a partir de una plantilla de plan contable." diff --git a/addons/l10n_cl/i18n/l10n_cl.pot b/addons/l10n_cl/i18n/l10n_cl.pot new file mode 100644 index 00000000000..9b3704b75e1 --- /dev/null +++ b/addons/l10n_cl/i18n/l10n_cl.pot @@ -0,0 +1,35 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * l10n_cl +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.1.0-rc1\n" +"Report-Msgid-Bugs-To: soporte@cubicerp.com\n" +"POT-Creation-Date: 2011-01-11 11:15:31+0000\n" +"PO-Revision-Date: 2011-01-11 11:15:31+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: l10n_cl +#: model:ir.module.module,description:l10n_cl.module_meta_information +msgid "\n" +" Chilean Accounting : chart of Account\n" +" " +msgstr "" + +#. module: l10n_cl +#: model:ir.module.module,shortdesc:l10n_cl.module_meta_information +msgid "Chilean Chart of Account" +msgstr "" + +#. module: l10n_cl +#: model:ir.actions.todo,note:l10n_cl.config_call_account_template_in_minimal +msgid "Generate Chart of Accounts from a Chart Template. You will be asked to pass the name of the company, the chart template to follow, the no. of digits to generate the code for your accounts and Bank account, currency to create Journals. Thus,the pure copy of chart Template is generated.\n" +" This is the same wizard that runs from Financial Management/Configuration/Financial Accounting/Financial Accounts/Generate Chart of Accounts from a Chart Template." +msgstr "" + diff --git a/addons/l10n_cl/l10n_cl_chart.xml b/addons/l10n_cl/l10n_cl_chart.xml new file mode 100644 index 00000000000..5b146eb067d --- /dev/null +++ b/addons/l10n_cl/l10n_cl_chart.xml @@ -0,0 +1,256 @@ + + + + + + + noneviewVistanone + + balanceBG_ACC_10Efectivo y Equivalentes al Efectivoasset + detailBG_ACC_20Otros Activos Financieros Corrientesasset + unreconciledBG_ACC_30Deudores Comercialesasset + unreconciledBG_ACC_50Otras Cuentas por Cobrarasset + balanceBG_ACC_60Inventariosasset + + detailBG_ACN_10Derechos por Cobrar No Corrienteasset + detailBG_ACN_40Otros Activos No Financierosasset + balanceBG_ACN_50Propiedades, Planta y Equipoasset + + unreconciledBG_PAC_10Otros Pasivos Financierosliability + unreconciledBG_PAC_20Cuentas por Pagar Comercialesliability + unreconciledBG_PAC_35Otras Cuentas por Pagarliability + unreconciledBG_PAC_40Otras Provisiones Corrientesliability + unreconciledBG_PAC_45Pasivos por Impuestos Corrientesliability + + unreconciledBG_PAN_10Otros Pasivos Financieros No Corrientesliability + unreconciledBG_PAN_20Otros Cuentas por Pagar No Corrientesliability + unreconciledBG_PAN_40Otras Provisiones No Corrientesliability + + balanceBG_PTN_10Patrimonio Netoliability + + noneEGP_FU_010Ingresos por Actividades Ordinariasincome + noneEGP_FU_030Costo de Ventasexpense + noneEGP_FU_040Gastos de Administraciónexpense + noneEGP_FU_050Costos por Distribuciónexpense + unreconciledEGP_FU_060Ingresos Financierosincome + noneEGP_FU_070Costos Financierosexpense + noneEGP_FU_080Otros Ingresosincome + noneEGP_FU_090Otros Gastosexpense + noneEGP_FU_120Gasto Impuesto a las Rentaexpense + noneEGP_FU_160Ganancia (Pérdida)income + + noneEGP_NA_010Compras de Activo Fijonone + + noneORDCuentas de Ordennone + + noneNCLASIFICADOCuentas No Clasificadasnone + + + + + Argentina + pcge + + view + + + inventario del Balance General + .1.BG + + + view + + + ACTIVOS1view + Activo Circulante11view + Activo Circulante - Caja111view + Activo Circulante - Caja / efectivo CLP111.001liquidity + Activo Circulante - Moneda Extranjera112view + Activo Circulante - Caja / efectivo USD112.001liquidity + Activo Circulante - Fondos fijos113view + Activo Circulante - Fondos fijos / caja chica 01 CLP113.001liquidity + Activo Circulante - Bancos114view + Activo Circulante.../ BCO. CTA CTE CLP114.001liquidity + Activo Circulante - Valores a Depositar 115other + Activo Circulante - Recaudaciones a Depositar 116other + Documentos por Cobrar12view + Documentos por Cobrar / Deudores por Ventas121receivable1 + Documentos por Cobrar / Deudores Morosos122receivable1 + Documentos por Cobrar / Deudores en Gestión Judicial123receivable + Documentos por Cobrar / Deudores Varios124receivable + Documentos por Cobrar / (-) Previsión para Incobrables125receivable1 + Cuentas por Cobrar13view + Cuentas por Cobrar / Préstamos otorgados131receivable + Cuentas por Cobrar / Anticipos a Proveedores132receivable + Cuentas por Cobrar / Anticipo de Impuestos133receivable + Cuentas por Cobrar / Anticipo al Personal134receivable + Cuentas por Cobrar / Alquileres Pagados por Adelantado135receivable + Cuentas por Cobrar / Intereses Pagados por Adelantado136receivable + Cuentas por Cobrar / Accionistas137receivable + Cuentas por Cobrar / (-) Previsión para Descuentos138receivable + Cuentas por Cobrar / (-) Intereses (+) a Devengar139receivable + Inversiones Financieras14view + Inversiones / Acciones Transitorias141other + Inversiones / Acciones Permanentes142other + Inversiones / Títulos Públicos143other + Inversiones / (-) Previsión para Devalorización de Acciones144other + Existencias15view + Existencias - Mercaderías151view + Existencias - Mercaderías / Categoria de productos 01151.01other + Existencias - Mercaderías en Tránsito152other + Materias primas153other + Productos en Curso de Elaboración154other + Productos Elaborados155other + Materiales Varios 156other + (-) Previsión para Desvalorización de Existencias157other + Activo Fijo16view + Activo Fijo / Inmuebles161other + Activo Fijo / Maquinaria162other + Activo Fijo / Equipos163other + Activo Fijo / Material Rodante Motorizado164other + Activo Fijo / (-) Depreciación Acumulada165other + Activo Intangible17view + Activo Intangible / Derecho de Llaves171other + Activo Intangible / Concesiones y Franquicias172other + Activo Intangible / Marcas y Patentes de Invención173other + Activo Intangible / (-) Amortización Acumulada174other + PASIVOS2view + Cuentas por Pagar21view + Cuentas por Pagar / Proveedores211payable1 + Cuentas por Pagar / Anticipos de Clientes212payable1 + Cuentas por Pagar / (-) Intereses a Devengar por Compras al Crédito213payable1 + Pasivo Circulante22view + Pasivo Circulante / Adelantos en Cuenta Corriente221payable + Pasivo Circulante / Prestamos222payable + Pasivo Circulante / Obligaciones a Pagar223payable + Pasivo Circulante / Intereses a Pagar224payable + Pasivo Circulante / Debentures Emitidos225payable + Impuestos por Pagar23view + Impuestos por Pagar / IVA a Pagar231other + Impuestos por Pagar / Impuesto a la Renta a Pagar232other + Remuneraciones por Pagar24view + Remuneraciones por Pagar / Sueldos a Pagar241payable + Remuneraciones por Pagar / Cargas Sociales a Pagar242payable + Remuneraciones por Pagar / Provisión para Sueldo Anual Complementario243payable + Remuneraciones por Pagar / Retenciones a Depositar244payable + Otras Cuentas por Pagar25view + Otras Cuentas por Pagar / Acreedores Varios251payable + Otras Cuentas por Pagar / Dividendos a Pagar252payable + Otras Cuentas por Pagar / Cobros por Adelantado253payable + Otras Cuentas por Pagar / Honorarios Directores y Síndicos a Pagar254payable + Provisiones26view + Provisiones / Previsión Indemnización por Despidos261payable + Provisiones / Previsión para juicios Pendientes262payable + Provisiones / Previsión para Garantías por Service263payable + PATRIMONIO3view + Capital31view + Capital / Capital Propio311other + Capital / Acciones en Circulación312other + Capital / Dividendos a Distribuir en Acciones313other + Capital / (-) Descuento de Emisión de Acciones314other + Aportes No Capitalizados32view + Aportes No Capitalizados / Primas de Emsión321other + Aportes No Capitalizados / Aportes Irrevocables Futura Suscripción de Acciones322other + Ajustes al Patrimonio33view + Ajustes al Patrimonio / Revaluo Técnico de Activo Fijo331other + Futuras Eventualidades34view + Reserva Legal341other + Reserva Estatutaria342other + Reserva Facultativa343other + Reserva para Renovación de Activo Fijo344other + Resultados No Asignados35view + Resultados Acumulados351other + Resultados Acumulados del Ejercicio Anterior352other + Utilidades y Pérdidas del Ejercicio353other + Resultado del Ejercicio354other + + + Cuentas de Resultado + .2.GP + + + view + + + RESULTADO GANANCIA4view + Ingresos de Explotación41view + Ventas411view + Ventas - Categoria de productos 01411.01other + Intereses gananados, obtenidos, percibidos412other + Alquileres gananados, obtenidos, percibidos413other + Comisiones gananados, obtenidos, percibidos414other + Descuentos gananados, obtenidos, percibidos415other + Interese sobre Inversiones416other + Honorarios gananados, obtenidos, percibidos417other + Ganancia Venta de Acciones418other + Ingresos Fuera de Explotación42view + Recupero de Rezagos421other + Recupero de Deudores Incobrables422other + Ganancia Venta de Activo Fijo423other + Donaciones obtenidas, ganandas, percibidas424other + Ganancia Venta Inversiones Permanentes425other + RESULTADO PÉRDIDA5view + Egresos de Explotación51view + Costo de Mercaderías Vendidas511view + Costo de Mercaderías Vendidas - Categoria de productos 01511.01other + Gastos en Depreciación de Activo Fijo512other + Gastos en Amortización513other + Gastos en Sueldos y Jornales514other + Gastos en Cargas Sociales515other + Gastos en Impuestos516other + Gastos Bancarios517other + Gastos en Servicios Públicos518other + Gastos de Publicidad y Propaganda519other + Egresos Fuera de Explotación52view + Gastos en Siniestros521other + Donaciones Cedidas, Otorgadas522other + Pérdida Venta Activo Fijo523other + + + Cuentas de Movimiento + .3.CC + + + view + + + Compras61view + Compras - Categoria de productos 0161.01other + Costos de Producción62other + Gastos de Administración63other + Gastos de Comercialización64other + + + Cuentas de Orden + .4.CO + + + view + + + CUENTAS DE ORDEN DEUDORAS71view + Mercaderias Recibidas en Consignación711other + Depósito de Valores Recibos en Garantía712other + Garantias Otorgadas713other + Documentos Descontados714other + Documentos Endosados715other + CUENTAS DE ORDEN ACREEDORAS72view + Comitente por Mercaderias Recibidas en Consignación721other + Acreedor por Garantías Otorgadas722other + Acreedor por Documentos Descontados723other + + + Chile - Plan de Cuentas + + + + + + + + + + + + + diff --git a/addons/l10n_cl/l10n_cl_wizard.xml b/addons/l10n_cl/l10n_cl_wizard.xml new file mode 100644 index 00000000000..191230c5010 --- /dev/null +++ b/addons/l10n_cl/l10n_cl_wizard.xml @@ -0,0 +1,15 @@ + + + + + + Generate Chart of Accounts from a Chart Template + Generate Chart of Accounts from a Chart Template. You will be asked to pass the name of the company, the chart template to follow, the no. of digits to generate the code for your accounts and Bank account, currency to create Journals. Thus,the pure copy of chart Template is generated. + This is the same wizard that runs from Financial Management/Configuration/Financial Accounting/Financial Accounts/Generate Chart of Accounts from a Chart Template. + + + automatic + + + + From 4c54457489044ad7c7e4f8c54241e32dba6d4a10 Mon Sep 17 00:00:00 2001 From: "Mayur Maheshwari (OpenERP)" Date: Mon, 20 Feb 2012 15:00:37 +0530 Subject: [PATCH 005/662] [FIX]purchase: added domain of supplier in the partner_id field lp bug: https://launchpad.net/bugs/936385 fixed bzr revid: mma@tinyerp.com-20120220093037-uh5ubja5jtnqy8om --- addons/purchase/purchase_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 1c936055aff..e358bfc2ced 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -172,7 +172,7 @@ - + From 44fec74adfbf53e4e9a02461b45b8e1b0525441d Mon Sep 17 00:00:00 2001 From: Yury Tello Date: Tue, 21 Feb 2012 15:53:28 -0500 Subject: [PATCH 006/662] [MOD] Ajust title bzr revid: ytello@cubicerp.com-20120221205328-s5y8iz1hjnlkj4hp --- addons/l10n_cl/__openerp__.py | 2 +- addons/l10n_cl/l10n_cl_chart.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/l10n_cl/__openerp__.py b/addons/l10n_cl/__openerp__.py index 249bdb3ae48..8c1e1e45b50 100644 --- a/addons/l10n_cl/__openerp__.py +++ b/addons/l10n_cl/__openerp__.py @@ -19,7 +19,7 @@ # ############################################################################## { - "name": "Argentina Localization Chart Account", + "name": "Chile Localization Chart Account", "version": "1.0", "description": """ Chilean accounting chart and tax localization. diff --git a/addons/l10n_cl/l10n_cl_chart.xml b/addons/l10n_cl/l10n_cl_chart.xml index 5b146eb067d..8bc4272c2eb 100644 --- a/addons/l10n_cl/l10n_cl_chart.xml +++ b/addons/l10n_cl/l10n_cl_chart.xml @@ -48,7 +48,7 @@ - Argentina + Chile pcge view From 1bf3b3b515737f6fd929250cf7f7c0d1e03a1ddf Mon Sep 17 00:00:00 2001 From: Date: Thu, 1 Mar 2012 13:21:24 +0100 Subject: [PATCH 007/662] [FIX] use a local variable row instead of res bzr revid: guewen.baconnier@camptocamp.com-20120301122124-0izdqntr76ruqtde --- addons/account/account.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index c1a30967aea..49ecf61ee51 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -315,8 +315,8 @@ class account_account(osv.osv): self.logger.notifyChannel('addons.'+self._name, netsvc.LOG_DEBUG, 'Status: %s'%cr.statusmessage) - for res in cr.dictfetchall(): - accounts[res['id']] = res + for row in cr.dictfetchall(): + accounts[row['id']] = row # consolidate accounts with direct children children_and_consolidated.reverse() From 7e43c5e13529c34224b510b4114e3943f89da902 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Wed, 18 Apr 2012 11:59:43 +0530 Subject: [PATCH 008/662] q bzr revid: tta@openerp.com-20120418062943-rtvpby15skwqmywx --- addons/base_contact/i18n/cs.po | 501 -------------------------- addons/base_contact/i18n/ja.po | 264 -------------- addons/fetchmail_crm_claim/i18n/ja.po | 34 ++ 3 files changed, 34 insertions(+), 765 deletions(-) delete mode 100644 addons/base_contact/i18n/cs.po delete mode 100644 addons/base_contact/i18n/ja.po create mode 100644 addons/fetchmail_crm_claim/i18n/ja.po diff --git a/addons/base_contact/i18n/cs.po b/addons/base_contact/i18n/cs.po deleted file mode 100644 index e48443f7681..00000000000 --- a/addons/base_contact/i18n/cs.po +++ /dev/null @@ -1,501 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * base_contact -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-02-08 00:36+0000\n" -"PO-Revision-Date: 2012-04-15 15:01+0000\n" -"Last-Translator: Jiří Hajda \n" -"Language-Team: Czech \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-04-16 04:40+0000\n" -"X-Generator: Launchpad (build 15099)\n" -"X-Poedit-Language: Czech\n" - -#. module: base_contact -#: field:res.partner.location,city:0 -msgid "City" -msgstr "Město" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "First/Lastname" -msgstr "Křestní jméno/Příjmení" - -#. module: base_contact -#: model:ir.actions.act_window,name:base_contact.action_partner_contact_form -#: model:ir.ui.menu,name:base_contact.menu_partner_contact_form -#: model:ir.ui.menu,name:base_contact.menu_purchases_partner_contact_form -#: model:process.node,name:base_contact.process_node_contacts0 -#: field:res.partner.location,job_ids:0 -msgid "Contacts" -msgstr "Kontakty" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Professional Info" -msgstr "Povolání" - -#. module: base_contact -#: field:res.partner.contact,first_name:0 -msgid "First Name" -msgstr "Křestní jméno" - -#. module: base_contact -#: field:res.partner.address,location_id:0 -msgid "Location" -msgstr "Umístění" - -#. module: base_contact -#: model:process.transition,name:base_contact.process_transition_partnertoaddress0 -msgid "Partner to address" -msgstr "Partner na adresu" - -#. module: base_contact -#: help:res.partner.contact,active:0 -msgid "" -"If the active field is set to False, it will allow you to " -"hide the partner contact without removing it." -msgstr "" -"Pokud je aktivní pole nastaveno na Nepravda, umožní vám to " -"skrýt kontakt partnera bez jeho odstranění." - -#. module: base_contact -#: field:res.partner.contact,website:0 -msgid "Website" -msgstr "Webová stránka" - -#. module: base_contact -#: field:res.partner.location,zip:0 -msgid "Zip" -msgstr "PSČ" - -#. module: base_contact -#: field:res.partner.location,state_id:0 -msgid "Fed. State" -msgstr "Fed. stát" - -#. module: base_contact -#: field:res.partner.location,company_id:0 -msgid "Company" -msgstr "Společnost" - -#. module: base_contact -#: field:res.partner.contact,title:0 -msgid "Title" -msgstr "Název" - -#. module: base_contact -#: field:res.partner.location,partner_id:0 -msgid "Main Partner" -msgstr "Hlavní partner" - -#. module: base_contact -#: model:process.process,name:base_contact.process_process_basecontactprocess0 -msgid "Base Contact" -msgstr "Základní kontakt" - -#. module: base_contact -#: field:res.partner.contact,email:0 -msgid "E-Mail" -msgstr "E-mail" - -#. module: base_contact -#: field:res.partner.contact,active:0 -msgid "Active" -msgstr "Aktivní" - -#. module: base_contact -#: field:res.partner.contact,country_id:0 -msgid "Nationality" -msgstr "Národnost" - -#. module: base_contact -#: view:res.partner:0 -#: view:res.partner.address:0 -msgid "Postal Address" -msgstr "Poštovní adresa" - -#. module: base_contact -#: field:res.partner.contact,function:0 -msgid "Main Function" -msgstr "Hlavní funkce" - -#. module: base_contact -#: model:process.transition,note:base_contact.process_transition_partnertoaddress0 -msgid "Define partners and their addresses." -msgstr "Určuje partnery a jejich adresy." - -#. module: base_contact -#: field:res.partner.contact,name:0 -msgid "Name" -msgstr "Jméno" - -#. module: base_contact -#: field:res.partner.contact,lang_id:0 -msgid "Language" -msgstr "Jazyk" - -#. module: base_contact -#: field:res.partner.contact,mobile:0 -msgid "Mobile" -msgstr "Mobil" - -#. module: base_contact -#: field:res.partner.location,country_id:0 -msgid "Country" -msgstr "Země" - -#. module: base_contact -#: view:res.partner.contact:0 -#: field:res.partner.contact,comment:0 -msgid "Notes" -msgstr "Poznámky" - -#. module: base_contact -#: model:process.node,note:base_contact.process_node_contacts0 -msgid "People you work with." -msgstr "Lidé, s kterými pracujete." - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Extra Information" -msgstr "Speciální informace" - -#. module: base_contact -#: view:res.partner.contact:0 -#: field:res.partner.contact,job_ids:0 -msgid "Functions and Addresses" -msgstr "Funkce a adresy" - -#. module: base_contact -#: model:ir.model,name:base_contact.model_res_partner_contact -#: field:res.partner.address,contact_id:0 -msgid "Contact" -msgstr "Kontakt" - -#. module: base_contact -#: model:ir.model,name:base_contact.model_res_partner_location -msgid "res.partner.location" -msgstr "res.partner.location" - -#. module: base_contact -#: model:process.node,note:base_contact.process_node_partners0 -msgid "Companies you work with." -msgstr "Společnosti, se kterými pracujete." - -#. module: base_contact -#: field:res.partner.contact,partner_id:0 -msgid "Main Employer" -msgstr "Hlavní zaměstnavatel" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Partner Contact" -msgstr "Kontakt partnera" - -#. module: base_contact -#: model:process.node,name:base_contact.process_node_addresses0 -msgid "Addresses" -msgstr "Adresy" - -#. module: base_contact -#: model:process.node,note:base_contact.process_node_addresses0 -msgid "Working and private addresses." -msgstr "Pracovní a soukromé adresy." - -#. module: base_contact -#: field:res.partner.contact,last_name:0 -msgid "Last Name" -msgstr "Příjmení" - -#. module: base_contact -#: view:res.partner.contact:0 -#: field:res.partner.contact,photo:0 -msgid "Photo" -msgstr "Fotka" - -#. module: base_contact -#: view:res.partner.location:0 -msgid "Locations" -msgstr "Umístění" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "General" -msgstr "Obecný" - -#. module: base_contact -#: field:res.partner.location,street:0 -msgid "Street" -msgstr "Ulice" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Partner" -msgstr "Partner" - -#. module: base_contact -#: model:process.node,name:base_contact.process_node_partners0 -msgid "Partners" -msgstr "Partneři" - -#. module: base_contact -#: model:ir.model,name:base_contact.model_res_partner_address -msgid "Partner Addresses" -msgstr "Adresy partnerů" - -#. module: base_contact -#: field:res.partner.location,street2:0 -msgid "Street2" -msgstr "Ulice 2" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Personal Information" -msgstr "Osobní informace" - -#. module: base_contact -#: field:res.partner.contact,birthdate:0 -msgid "Birth Date" -msgstr "Datum narození" - -#~ msgid "Categories" -#~ msgstr "Kategorie" - -#~ msgid "Current" -#~ msgstr "Stávající" - -#~ msgid "Fax" -#~ msgstr "Fax" - -#~ msgid "Address" -#~ msgstr "Adresa" - -#~ msgid "Invalid XML for View Architecture!" -#~ msgstr "Invalidní XML pro zobrazení architektury!" - -#~ msgid "" -#~ "The Object name must start with x_ and not contain any special character !" -#~ msgstr "" -#~ "Jméno objektu musí začínat znakem x_ a nesmí obsahovat žádný speciální znak!" - -#~ msgid "Invalid model name in the action definition." -#~ msgstr "Špatný název modelu v definici akce" - -#~ msgid "Contact Functions" -#~ msgstr "Kontaktní funkce" - -#~ msgid "Phone" -#~ msgstr "Telefon" - -#~ msgid "Function" -#~ msgstr "Funkce" - -#~ msgid "# of Contacts" -#~ msgstr "# z kontaktů" - -#~ msgid "title" -#~ msgstr "nadpis" - -#~ msgid "Start date of job(Joining Date)" -#~ msgstr "Datum zahájení práce (datum připojení)" - -#~ msgid "Select the Option for Addresses Migration" -#~ msgstr "Vyberte volbu pro přesun adres" - -#~ msgid "Function of this contact with this partner" -#~ msgstr "Funkce tohoto kontaktu s tímto partnerem" - -#~ msgid "Status of Address" -#~ msgstr "Stav adresy" - -#~ msgid "" -#~ "You may enter Address first,Partner will be linked " -#~ "automatically if any." -#~ msgstr "" -#~ "Můžete zadat nejdříve adresu. Pokud je nějaký partner, " -#~ "bude napojen automaticky." - -#~ msgid "Job FAX no." -#~ msgstr "Číslo FAXu do práce" - -#~ msgid "Define functions and address." -#~ msgstr "Určit funkce a adresu." - -#~ msgid "Last date of job" -#~ msgstr "Poslední datum práce" - -#~ msgid "Migrate" -#~ msgstr "Přesunout" - -#~ msgid "Jobs at a same partner address." -#~ msgstr "Pracovní pozice u stejné adresy partnera." - -#~ msgid "State" -#~ msgstr "Stav" - -#~ msgid "" -#~ "\n" -#~ " This module allows you to manage your contacts entirely.\n" -#~ "\n" -#~ " It lets you define\n" -#~ " *contacts unrelated to a partner,\n" -#~ " *contacts working at several addresses (possibly for different " -#~ "partners),\n" -#~ " *contacts with possibly different functions for each of its job's " -#~ "addresses\n" -#~ "\n" -#~ " It also adds new menu items located in\n" -#~ " Partners \\ Contacts\n" -#~ " Partners \\ Functions\n" -#~ "\n" -#~ " Pay attention that this module converts the existing addresses into " -#~ "\"addresses + contacts\". It means that some fields of the addresses will be " -#~ "missing (like the contact name), since these are supposed to be defined in " -#~ "an other object.\n" -#~ " " -#~ msgstr "" -#~ "\n" -#~ " Tento modul umožňuje úplně spravovat vaše kontakty.\n" -#~ "\n" -#~ " Nechá vás určit\n" -#~ " *kontakty nevztažené k partnerovi,\n" -#~ " *kontakty pracující na několika adresách (případně i pro různé " -#~ "partnery),\n" -#~ " *kontakty s možnými různými funkcemi pro každou jeho pracovní " -#~ "adresu\n" -#~ "\n" -#~ " Také přidává nové položky nabídky umístěné v\n" -#~ " Partneři \\ Kontakty\n" -#~ " Partneři \\ Funkce\n" -#~ "\n" -#~ " Berte na vědomí, že tento modul převádí existující adresy na \"adresy + " -#~ "kontakty\". To znamená, že některé pole adres budou chybět (jako jméno " -#~ "kontaktu), protože ty jsou definovány v jiném objektu.\n" -#~ " " - -#~ msgid "Date Stop" -#~ msgstr "Datum zastavení" - -#~ msgid "Contact's Jobs" -#~ msgstr "Pozice kontaktu" - -#~ msgid "" -#~ "Order of importance of this job title in the list of job " -#~ "title of the linked partner" -#~ msgstr "" -#~ "Pořadí důležitosti této pracovní pozice v seznamu titulů " -#~ "pozic napojeného partnera" - -#~ msgid "Extension" -#~ msgstr "Rozšíření" - -#~ msgid "Internal/External extension phone number" -#~ msgstr "Vnitřní/vnější telefoní číslo klapky" - -#~ msgid "Job Phone no." -#~ msgstr "Telefoní číslo do práce." - -#~ msgid "Job E-Mail" -#~ msgstr "Pracovní E-Mail" - -#~ msgid "Partner Seq." -#~ msgstr "Poř. parnera" - -#~ msgid "Function to address" -#~ msgstr "Funkce na adresu" - -#~ msgid "Configuration Progress" -#~ msgstr "Průběh nastavení" - -#~ msgid "Communication" -#~ msgstr "Komunikace" - -#~ msgid "Image" -#~ msgstr "Obrázek" - -#~ msgid "Past" -#~ msgstr "Minulý" - -#~ msgid "Address's Migration to Contacts" -#~ msgstr "Stěhování adresy na kontakty" - -#~ msgid "Contact Seq." -#~ msgstr "Poř. kontaktu" - -#~ msgid "Search Contact" -#~ msgstr "Hledat kontakt" - -#~ msgid "" -#~ "Due to changes in Address and Partner's relation, some of the details from " -#~ "address are needed to be migrated into contact information." -#~ msgstr "" -#~ "Kvůli změnám v adrese a vztahu partnera, některé podrobnosti adresy jsou " -#~ "potřebné, aby byly přesunuty do informací účtu." - -#~ msgid "Address which is linked to the Partner" -#~ msgstr "Adresa, která je napojena na partnera" - -#~ msgid "Partner Function" -#~ msgstr "Funkce partnera" - -#~ msgid "Additional phone field" -#~ msgstr "Doplňující pole telefonu" - -#~ msgid "Otherwise these details will not be visible from address/contact." -#~ msgstr "Jinak tyto podrobnosti nebudou viditelné z adresy/kontaktu." - -#~ msgid "Configure" -#~ msgstr "Nastavit" - -#~ msgid "base.contact.installer" -#~ msgstr "base.contact.installer" - -#~ msgid "Do you want to migrate your Address data in Contact Data?" -#~ msgstr "Chcete stěhovat vaše data adresy v datech kontaktu?" - -#~ msgid "Seq." -#~ msgstr "Poř." - -#~ msgid "If you select this, all addresses will be migrated." -#~ msgstr "Pokud toto vyberete, všechny adresy budou přesunuty." - -#~ msgid "Contact Partner Function" -#~ msgstr "Kontakt funkce partnera" - -#~ msgid "Other" -#~ msgstr "Jiné" - -#~ msgid "Main Job" -#~ msgstr "Hlavní práce" - -#~ msgid "Defines contacts and functions." -#~ msgstr "Určuje kontakty a funkce." - -#~ msgid "Contact to function" -#~ msgstr "Kontakt na funkci" - -#~ msgid "Open Jobs" -#~ msgstr "Otevřené pozice" - -#~ msgid "You can migrate Partner's current addresses to the contact." -#~ msgstr "Můžete stěhovat partnerovu aktuální adresu do kontaktu." - -#~ msgid "Address Migration" -#~ msgstr "Stěhování adresy" - -#~ msgid "Date Start" -#~ msgstr "Počáteční datum" - -#~ msgid "" -#~ "Order of importance of this address in the list of " -#~ "addresses of the linked contact" -#~ msgstr "" -#~ "Pořadí podle důležitosti této adresy v seznamu adres napojeného " -#~ "kontaktu" diff --git a/addons/base_contact/i18n/ja.po b/addons/base_contact/i18n/ja.po deleted file mode 100644 index 89af47fb6ac..00000000000 --- a/addons/base_contact/i18n/ja.po +++ /dev/null @@ -1,264 +0,0 @@ -# Japanese translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-02-08 00:36+0000\n" -"PO-Revision-Date: 2012-04-14 00:01+0000\n" -"Last-Translator: Tomomi Mengelberg \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2012-04-15 04:42+0000\n" -"X-Generator: Launchpad (build 15070)\n" - -#. module: base_contact -#: field:res.partner.location,city:0 -msgid "City" -msgstr "市区町村" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "First/Lastname" -msgstr "名/姓" - -#. module: base_contact -#: model:ir.actions.act_window,name:base_contact.action_partner_contact_form -#: model:ir.ui.menu,name:base_contact.menu_partner_contact_form -#: model:ir.ui.menu,name:base_contact.menu_purchases_partner_contact_form -#: model:process.node,name:base_contact.process_node_contacts0 -#: field:res.partner.location,job_ids:0 -msgid "Contacts" -msgstr "連絡先" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Professional Info" -msgstr "" - -#. module: base_contact -#: field:res.partner.contact,first_name:0 -msgid "First Name" -msgstr "姓" - -#. module: base_contact -#: field:res.partner.address,location_id:0 -msgid "Location" -msgstr "場所" - -#. module: base_contact -#: model:process.transition,name:base_contact.process_transition_partnertoaddress0 -msgid "Partner to address" -msgstr "" - -#. module: base_contact -#: help:res.partner.contact,active:0 -msgid "" -"If the active field is set to False, it will allow you to " -"hide the partner contact without removing it." -msgstr "" - -#. module: base_contact -#: field:res.partner.contact,website:0 -msgid "Website" -msgstr "ウェブサイト" - -#. module: base_contact -#: field:res.partner.location,zip:0 -msgid "Zip" -msgstr "郵便番号" - -#. module: base_contact -#: field:res.partner.location,state_id:0 -msgid "Fed. State" -msgstr "" - -#. module: base_contact -#: field:res.partner.location,company_id:0 -msgid "Company" -msgstr "会社" - -#. module: base_contact -#: field:res.partner.contact,title:0 -msgid "Title" -msgstr "役職" - -#. module: base_contact -#: field:res.partner.location,partner_id:0 -msgid "Main Partner" -msgstr "主なパートナ" - -#. module: base_contact -#: model:process.process,name:base_contact.process_process_basecontactprocess0 -msgid "Base Contact" -msgstr "" - -#. module: base_contact -#: field:res.partner.contact,email:0 -msgid "E-Mail" -msgstr "メール" - -#. module: base_contact -#: field:res.partner.contact,active:0 -msgid "Active" -msgstr "有効" - -#. module: base_contact -#: field:res.partner.contact,country_id:0 -msgid "Nationality" -msgstr "国籍" - -#. module: base_contact -#: view:res.partner:0 -#: view:res.partner.address:0 -msgid "Postal Address" -msgstr "住所" - -#. module: base_contact -#: field:res.partner.contact,function:0 -msgid "Main Function" -msgstr "主な役割" - -#. module: base_contact -#: model:process.transition,note:base_contact.process_transition_partnertoaddress0 -msgid "Define partners and their addresses." -msgstr "" - -#. module: base_contact -#: field:res.partner.contact,name:0 -msgid "Name" -msgstr "名前" - -#. module: base_contact -#: field:res.partner.contact,lang_id:0 -msgid "Language" -msgstr "言語" - -#. module: base_contact -#: field:res.partner.contact,mobile:0 -msgid "Mobile" -msgstr "携帯電話" - -#. module: base_contact -#: field:res.partner.location,country_id:0 -msgid "Country" -msgstr "国名" - -#. module: base_contact -#: view:res.partner.contact:0 -#: field:res.partner.contact,comment:0 -msgid "Notes" -msgstr "備考" - -#. module: base_contact -#: model:process.node,note:base_contact.process_node_contacts0 -msgid "People you work with." -msgstr "同僚" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Extra Information" -msgstr "その他の情報" - -#. module: base_contact -#: view:res.partner.contact:0 -#: field:res.partner.contact,job_ids:0 -msgid "Functions and Addresses" -msgstr "" - -#. module: base_contact -#: model:ir.model,name:base_contact.model_res_partner_contact -#: field:res.partner.address,contact_id:0 -msgid "Contact" -msgstr "連絡先" - -#. module: base_contact -#: model:ir.model,name:base_contact.model_res_partner_location -msgid "res.partner.location" -msgstr "" - -#. module: base_contact -#: model:process.node,note:base_contact.process_node_partners0 -msgid "Companies you work with." -msgstr "同僚" - -#. module: base_contact -#: field:res.partner.contact,partner_id:0 -msgid "Main Employer" -msgstr "" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Partner Contact" -msgstr "パートナー連絡先" - -#. module: base_contact -#: model:process.node,name:base_contact.process_node_addresses0 -msgid "Addresses" -msgstr "住所" - -#. module: base_contact -#: model:process.node,note:base_contact.process_node_addresses0 -msgid "Working and private addresses." -msgstr "勤め先住所と自宅住所" - -#. module: base_contact -#: field:res.partner.contact,last_name:0 -msgid "Last Name" -msgstr "姓" - -#. module: base_contact -#: view:res.partner.contact:0 -#: field:res.partner.contact,photo:0 -msgid "Photo" -msgstr "写真" - -#. module: base_contact -#: view:res.partner.location:0 -msgid "Locations" -msgstr "場所" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "General" -msgstr "" - -#. module: base_contact -#: field:res.partner.location,street:0 -msgid "Street" -msgstr "番地" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Partner" -msgstr "パートナ" - -#. module: base_contact -#: model:process.node,name:base_contact.process_node_partners0 -msgid "Partners" -msgstr "取引先" - -#. module: base_contact -#: model:ir.model,name:base_contact.model_res_partner_address -msgid "Partner Addresses" -msgstr "パートナの住所" - -#. module: base_contact -#: field:res.partner.location,street2:0 -msgid "Street2" -msgstr "番地" - -#. module: base_contact -#: view:res.partner.contact:0 -msgid "Personal Information" -msgstr "個人情報" - -#. module: base_contact -#: field:res.partner.contact,birthdate:0 -msgid "Birth Date" -msgstr "生年月日" diff --git a/addons/fetchmail_crm_claim/i18n/ja.po b/addons/fetchmail_crm_claim/i18n/ja.po new file mode 100644 index 00000000000..a1f6db4a764 --- /dev/null +++ b/addons/fetchmail_crm_claim/i18n/ja.po @@ -0,0 +1,34 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2012-02-08 00:36+0000\n" +"PO-Revision-Date: 2012-04-08 05:43+0000\n" +"Last-Translator: Masaki Yamaya \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-04-09 04:56+0000\n" +"X-Generator: Launchpad (build 15060)\n" + +#. module: fetchmail_crm_claim +#: model:ir.actions.act_window,help:fetchmail_crm_claim.action_create_crm_claims_from_email_account +msgid "" +"You can connect your email account with claims in OpenERP. A new email sent " +"to this account (example: support@mycompany.com) will automatically create a " +"claim for the followup in OpenERP. The whole communication by email will be " +"attached to the claim automatically to keep track of the history." +msgstr "" +"あなたのEメールアカウントをOpenERPのクレームに関連づけることはできません。このアカウントに送られた新しいEメールはOpenERPのフォローアップの" +"ためのクレームを自動的に作成します。Eメールによる全てのコミュニケーションは、履歴を記録するために、自動的にクレームに関連づけられます。" + +#. module: fetchmail_crm_claim +#: model:ir.actions.act_window,name:fetchmail_crm_claim.action_create_crm_claims_from_email_account +msgid "Create Claims from Email Account" +msgstr "Eメールアカウントからクレームを作成" From 2c780efd12a47d440e7b9a4ecae7da0cf9565390 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 19 Apr 2012 18:59:16 +0530 Subject: [PATCH 009/662] Web Etherpad Integration bzr revid: tta@openerp.com-20120419132916-yzrdnz2y8gus2wlw --- addons/web_etherpad/__init__.py | 2 + addons/web_etherpad/__openerp__.py | 16 +++ addons/web_etherpad/res_company.py | 15 +++ addons/web_etherpad/res_company.xml | 16 +++ .../static/src/js/web_etherpad.js | 125 ++++++++++++++++++ .../web_etherpad/static/src/xml/etherpad.xml | 21 +++ 6 files changed, 195 insertions(+) create mode 100644 addons/web_etherpad/__init__.py create mode 100755 addons/web_etherpad/__openerp__.py create mode 100644 addons/web_etherpad/res_company.py create mode 100644 addons/web_etherpad/res_company.xml create mode 100755 addons/web_etherpad/static/src/js/web_etherpad.js create mode 100755 addons/web_etherpad/static/src/xml/etherpad.xml diff --git a/addons/web_etherpad/__init__.py b/addons/web_etherpad/__init__.py new file mode 100644 index 00000000000..df35bc32106 --- /dev/null +++ b/addons/web_etherpad/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +import res_company diff --git a/addons/web_etherpad/__openerp__.py b/addons/web_etherpad/__openerp__.py new file mode 100755 index 00000000000..829081e8c65 --- /dev/null +++ b/addons/web_etherpad/__openerp__.py @@ -0,0 +1,16 @@ +{ + "name": "web_etherpad", + "category" : "Hidden", + "description":'Openerp web Etherpad Widget', + "version": "2.0", + 'author': 'OpenERP SA', + 'website': 'http://openerp.com', + 'data': [ + 'res_company.xml' + ], + "depends": ['base','web'], + 'qweb' : ['static/src/xml/etherpad.xml'], + "css": [], + "js": ['static/src/js/web_etherpad.js'], + "auto_install": False, +} diff --git a/addons/web_etherpad/res_company.py b/addons/web_etherpad/res_company.py new file mode 100644 index 00000000000..0c1dc7c4929 --- /dev/null +++ b/addons/web_etherpad/res_company.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +from osv import fields, osv + +class company_pad(osv.osv): + _inherit = 'res.company' + _columns = { + 'pad_url_template': fields.char('Pad URL Template', size=128, required=True, + help="Template used to generate pad URL."), + } + _defaults = { + 'pad_url_template': 'http://ietherpad.com/%(db)s-%(model)s-%(id)d-%(salt)s-%(name)s' + } + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/web_etherpad/res_company.xml b/addons/web_etherpad/res_company.xml new file mode 100644 index 00000000000..20b6f52d853 --- /dev/null +++ b/addons/web_etherpad/res_company.xml @@ -0,0 +1,16 @@ + + + + res.company.form.pad + res.company + form + + + + + + + + + + diff --git a/addons/web_etherpad/static/src/js/web_etherpad.js b/addons/web_etherpad/static/src/js/web_etherpad.js new file mode 100755 index 00000000000..d19fb2b9512 --- /dev/null +++ b/addons/web_etherpad/static/src/js/web_etherpad.js @@ -0,0 +1,125 @@ +openerp.web_etherpad = function (instance) { + + instance.web.form.FieldEtherpad = instance.web.form.AbstractField.extend(_.extend({}, instance.web.form.ReinitializeFieldMixin, { + template: 'FieldEtherpad', + initialize_content: function() { + this.$textarea = undefined; + if (!this.get("effective_readonly")) { + this.$textarea = this.$element.find('textarea'); + //this.$textarea.hide(); + this.$textarea.change(_.bind(function() { + this.set({'value': instance.web.parse_value(this.$textarea.val(), this)}); + }, this)); + this.resized = false; + } + }, + set_value: function(value_) { + var self = this ; + var company_id = (self.view.datarecord.hasOwnProperty('id')) ?self.view.datarecord.company_id[0]: self.view.datarecord.company_id ; + /* getting etherpad url and set pad to field. */ + self.rpc('/web/dataset/get',{ + 'model':'res.company', + 'ids':[company_id], + 'fields':['pad_url_template'], + 'context':{} + },function(companies){ + var pad_template = companies[0].pad_url_template.replace('-%(salt)s-%(name)s','').replace(/\s/g,''); + + var patt_url = (_.str.sprintf(pad_template.replace('-%(id)d',''), { + db : self.session.db, + model : self.view.model, + })).replace(/\s/g,'') ; + //alert("match or not >?"+value_.search(patt_url)); + if(value_ == false) + self.add_pad(self,pad_template,value_); + else if(value_.search(patt_url) != 0) + self.add_pad(self,pad_template,value_); + else + self.show_pad_value(self,value_); + }); + }, + show_pad_value: function(self,value_) + { + self._inhibit_on_change = true; + self.set({'value': value_ }); + self._inhibit_on_change = false; + self.invalid = false; + self.update_dom(); + self.render_value(); + }, + add_pad: function(self,pad_template,value_){ + var url = (_.str.sprintf(pad_template, { + db : self.session.db, + model : self.view.model, + id : Math.round(new Date().getTime()/100.0), + })).replace(/\s/g,''); + var show_value = instance.web.format_value(value_, this, ''); + self.show_pad_value(self,url + '\n'+ show_value); + this.dirty = true; + }, + render_value: function() { + var show_value = instance.web.format_value(this.get('value'), this, ''); + if (!this.get("effective_readonly")) { + this.$textarea.val(show_value); + this.$element.find('div').html(''); + if (!this.resized && this.view.options.resize_textareas) { + this.do_resize(this.view.options.resize_textareas); + this.resized = true; + } + } else { + this.$element.text(show_value); + if(this.get('value') != false) + { + var self = this; + $.get(show_value.split('\n')[0]+'/export/html', function(data) { + console.log(data); + self.$element.html(data); + }); + } + } + }, + validate: function() { + this.invalid = false; + if (!this.get("effective_readonly")) { + try { + var value_ = instance.web.parse_value(this.$textarea.val(), this, ''); + this.invalid = this.get("required") && value_ === ''; + } catch(e) { + this.invalid = true; + } + } + }, + focus: function($element) { + this._super($element || this.$textarea); + }, + do_resize: function(max_height) { + max_height = parseInt(max_height, 10); + var $input = this.$textarea, + $div = $('
').width($input.width()), + new_height; + $div.text($input.val()); + _.each('font-family,font-size,white-space'.split(','), function(style) { + $div.css(style, $input.css(style)); + }); + $div.appendTo($('body')); + new_height = $div.height(); + if (new_height < 90) { + new_height = 90; + } + if (!isNaN(max_height) && new_height > max_height) { + new_height = max_height; + } + $div.remove(); + $input.height(new_height); + }, + reset: function() { + this.resized = false; + } + })); + + instance.web.form.widgets = instance.web.form.widgets.extend({ + 'etherpad': 'instance.web.form.FieldEtherpad', + }); + + +} diff --git a/addons/web_etherpad/static/src/xml/etherpad.xml b/addons/web_etherpad/static/src/xml/etherpad.xml new file mode 100755 index 00000000000..64c2e2dc6a0 --- /dev/null +++ b/addons/web_etherpad/static/src/xml/etherpad.xml @@ -0,0 +1,21 @@ + + + + + + + +
+ +
+
+
+
+ +
From 4cb57e25230fb289d4e61dd2acb31953ebe7e2a2 Mon Sep 17 00:00:00 2001 From: Tejas Tank Date: Thu, 19 Apr 2012 19:05:22 +0530 Subject: [PATCH 010/662] Not show textarea bzr revid: tta@openerp.com-20120419133522-lk286h44c2y06j6g --- addons/web_etherpad/static/src/js/web_etherpad.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web_etherpad/static/src/js/web_etherpad.js b/addons/web_etherpad/static/src/js/web_etherpad.js index d19fb2b9512..28afe60133d 100755 --- a/addons/web_etherpad/static/src/js/web_etherpad.js +++ b/addons/web_etherpad/static/src/js/web_etherpad.js @@ -6,7 +6,7 @@ openerp.web_etherpad = function (instance) { this.$textarea = undefined; if (!this.get("effective_readonly")) { this.$textarea = this.$element.find('textarea'); - //this.$textarea.hide(); + this.$textarea.hide(); this.$textarea.change(_.bind(function() { this.set({'value': instance.web.parse_value(this.$textarea.val(), this)}); }, this)); From 4a9e3512c58627b42fc82f4f2283e2ba0064637f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 19 Apr 2012 17:26:44 +0200 Subject: [PATCH 011/662] [ADD] mail: added mail.subscription.hide model. This will holds the hiden notification subtypes. bzr revid: tde@openerp.com-20120419152644-u3t5y18s0w7r5ton --- addons/mail/mail_subscription.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/addons/mail/mail_subscription.py b/addons/mail/mail_subscription.py index fc82af879a9..2b6a8dd5342 100644 --- a/addons/mail/mail_subscription.py +++ b/addons/mail/mail_subscription.py @@ -44,6 +44,25 @@ class mail_subscription(osv.osv): ondelete='cascade', required=True, select=1), } +class mail_subscription_hide(osv.osv): + """ + mail_subscription_hide holds the data to store the hiden notifications + on the Wall. Hide choices are related to a subscription, not a model + or a user. + :param: subscription_id: the related subscription + :param: subtype: the message subtype hiden + """ + _name = 'mail.subscription.hide' + _rec_name = 'id' + _order = 'id desc' + _description = 'Hidden subscription' + _columns = { + 'subscription_id': fields.many2one('mail.subscription', string='Subscription', + ondelete='cascade', required=True, select=1), + 'subtype': fields.char('Message subtype', size=64, + required=True, help='Message subtype is a string that depends on the related model.'), + } + class mail_notification(osv.osv): """ mail_notification is a relational table modeling messages pushed to users. From 491e8ad9f6192278ee386d6a721f8c810009d581 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 19 Apr 2012 17:38:25 +0200 Subject: [PATCH 012/662] [ADD] mail.subscription.hide: added views and menu entry. bzr revid: tde@openerp.com-20120419153825-xodlfiotdgdmco30 --- addons/mail/mail_subscription_view.xml | 36 +++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/addons/mail/mail_subscription_view.xml b/addons/mail/mail_subscription_view.xml index 52b72127b78..827c23b25d2 100644 --- a/addons/mail/mail_subscription_view.xml +++ b/addons/mail/mail_subscription_view.xml @@ -20,6 +20,23 @@ + + + + mail.subscription.hide.tree + mail.subscription.hide + tree + 10 + + + + + + + + @@ -45,6 +62,13 @@ tree,form + + Hidden subscriptions + mail.subscription.hide + form + tree,form + + Pushed notif mail.notification @@ -52,11 +76,15 @@ tree,form - - + + + - - + + From ae0dbd21455e8a6ef2d358b8999fba49674fd497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 19 Apr 2012 17:53:39 +0200 Subject: [PATCH 013/662] [ADD] mail.group: added a 'models' field, to link groups to models. Purpose: group will be able to aggregate messages, and users following the group will receive notifications. Example: being able to follow all leads. bzr revid: tde@openerp.com-20120419155339-etlzmi5jo5d8iwgf --- addons/mail/mail_group.py | 2 ++ addons/mail/mail_group_view.xml | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/addons/mail/mail_group.py b/addons/mail/mail_group.py index 0a8677d7862..83d0705c4e0 100644 --- a/addons/mail/mail_group.py +++ b/addons/mail/mail_group.py @@ -119,6 +119,8 @@ class mail_group(osv.osv): ondelete='set null', required=True, select=1, help="Responsible of the group that has all rights on the record."), 'public': fields.boolean('Public', help='This group is visible by non members. Invisible groups can add members through the invite button.'), + 'models': fields.many2many('ir.model', rel='mail_group_models_rel', id1='mail_group_id', id2='model_id', + string='Linked models', help='Linked models'), 'photo_big': fields.binary('Full-size photo', help='Field holding the full-sized PIL-supported and base64 encoded version of the group image. The photo field is used as an interface for this field.'), 'photo': fields.function(_get_photo, fnct_inv=_set_photo, string='Photo', type="binary", store = { diff --git a/addons/mail/mail_group_view.xml b/addons/mail/mail_group_view.xml index ea0dede377d..d911b4a7deb 100644 --- a/addons/mail/mail_group_view.xml +++ b/addons/mail/mail_group_view.xml @@ -58,6 +58,11 @@ + + + + + From caba5db34bb9d6a4f91127c063293aae3be13780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 19 Apr 2012 18:20:50 +0200 Subject: [PATCH 014/662] [ADD] mail.message: added a message_subtype field, that will contain more precise data about the type of content. Example: create, cancel, ... Purpose: being able to filter (hide) a given content type. bzr revid: tde@openerp.com-20120419162050-6uq495s94i4etnbp --- addons/mail/mail_message.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 5d5d599be0e..9228861b139 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -206,6 +206,12 @@ class mail_message(osv.osv): ('comment', 'Comment'), ('notification', 'System notification'), ], 'Type', help="Message type: e-mail for e-mail message, notification for system message, comment for other messages such as user replies"), + 'message_subtype': fields.selection([ + ('email', 'e-mail'), + ('comment', 'Comment'), + ('create', 'Create'), + ('cancel', 'Cancel'), + ], 'Type', help="Message subtype, such as create or cancel. May be overriden by addons."), 'partner_id': fields.many2one('res.partner', 'Related partner'), 'user_id': fields.many2one('res.users', 'Related user', readonly=1), 'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', 'message_id', 'attachment_id', 'Attachments'), @@ -224,6 +230,7 @@ class mail_message(osv.osv): _defaults = { 'type': 'email', + 'message_subtype': 'email', 'state': 'received', } From 7a4ca1338c43b63c4d7976519ffe7a374d922fc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 20 Apr 2012 10:42:41 +0200 Subject: [PATCH 015/662] [ADD] Chatter widget: added links to hide a thread or a subtype. Only links, not functional currently, because logic is not implemented. bzr revid: tde@openerp.com-20120420084241-02l4tfifzxjd88go --- addons/mail/static/src/css/mail.css | 31 ++++++++++++++++++++++++++++ addons/mail/static/src/js/mail.js | 32 +++++++++++++++++++++++++++++ addons/mail/static/src/xml/mail.xml | 6 ++++++ 3 files changed, 69 insertions(+) diff --git a/addons/mail/static/src/css/mail.css b/addons/mail/static/src/css/mail.css index 7f0cc6f222c..5bae0d5e73b 100644 --- a/addons/mail/static/src/css/mail.css +++ b/addons/mail/static/src/css/mail.css @@ -167,6 +167,7 @@ } .openerp .oe_mail_msg_notification, .openerp .oe_mail_msg_comment, .openerp .oe_mail_msg_email { + position: relative; padding: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; @@ -229,6 +230,36 @@ color: #4E43E7; } +.openerp img.oe_mail_msg_menu_icon { + float: right; + cursor: pointer; +} + +.openerp ul.oe_mail_msg_menu { +/* + display: none; +*/ + display: block; + position: absolute; + top: 1em; + right: 1em; + overflow-x: hidden; + z-index: 900; + background: white; + padding: 4px; + border: 1px solid #AFAFB6; + width: 150px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + -o-border-radius: 3px; + -ms-border-radius: 3px; + border-radius: 3px; + -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + -o-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); + -box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3); +} + /* ------------------------------ */ /* Styling (should be openerp) */ /* ------------------------------ */ diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index d99674f98a7..160a1dc33fd 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -174,6 +174,34 @@ openerp.mail = function(session) { } return false; }); + // event: click on 'hide notification' in wheel_menu + this.$element.find('div.oe_mail_thread_display').delegate('a.oe_mail_msg_hide_thread', 'click', function (event) { + console.log('hiding notification'); + if (! confirm(_t("Do you really want to hide this thread ?"))) { return false; } + var msg_id = event.srcElement.dataset.id; + if (! msg_id) return false; + console.log(msg_id); + //var call_defer = self.ds.call('message_remove_pushed_notifications', [[self.params.res_id], [parseInt(msg_id)], true]); + $(event.srcElement).parents('li.oe_mail_thread_msg').eq(0).hide(); + if (self.params.thread_level > 0) { + $(event.srcElement).parents('ul.oe_mail_thread').eq(0).hide(); + } + return false; + }); + // event: click on 'hide this type' in wheel_menu + this.$element.find('div.oe_mail_thread_display').delegate('a.oe_mail_msg_hide_type', 'click', function (event) { + console.log('hiding type'); + if (! confirm(_t("Do you really want to hide this thread ?"))) { return false; } + var msg_id = event.srcElement.dataset.id; + if (! msg_id) return false; + console.log(msg_id); + //var call_defer = self.ds.call('message_remove_pushed_notifications', [[self.params.res_id], [parseInt(msg_id)], true]); + $(event.srcElement).parents('li.oe_mail_thread_msg').eq(0).hide(); + if (self.params.thread_level > 0) { + $(event.srcElement).parents('ul.oe_mail_thread').eq(0).hide(); + } + return false; + }); // event: click on an internal link this.$element.find('div.oe_mail_thread_display').delegate('a.intlink', 'click', function (event) { // lazy implementation: fetch data and try to redirect @@ -193,6 +221,10 @@ openerp.mail = function(session) { } else self.do_action({ type: 'ir.actions.act_window', res_model: res_model, res_id: parseInt(res_id), views: [[false, 'form']]}); }); + // event: click on the wheel menu in messages + this.$element.find('div.oe_mail_thread_display').delegate('img.oe_mail_msg_menu_icon', 'click', function (event) { + self.$element.find('ul.oe_mail_msg_menu').toggle(); + }); }, destroy: function () { diff --git a/addons/mail/static/src/xml/mail.xml b/addons/mail/static/src/xml/mail.xml index f034b04311d..7fe1d39a661 100644 --- a/addons/mail/static/src/xml/mail.xml +++ b/addons/mail/static/src/xml/mail.xml @@ -58,6 +58,12 @@
  • + menu +
    From 318ef517ab037bafba43c2e5d85301f0f88432c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Fri, 20 Apr 2012 11:36:45 +0200 Subject: [PATCH 016/662] [REF] mail.message.common model: renamed subtype to content_subtype. Purpose: make a distinction between content and message model. Type and subtype will be used to distinguish messages, content_subtype to distinguish the content itself. bzr revid: tde@openerp.com-20120420093645-tt78zzrmq2nxomvb --- addons/base_calendar/base_calendar.py | 2 +- addons/crm/wizard/mail_compose_message.py | 2 +- addons/email_template/email_template.py | 4 +- addons/mail/mail_message.py | 78 ++++++++++++---------- addons/mail/mail_message_view.xml | 4 +- addons/mail/mail_thread.py | 22 +++--- addons/mail/wizard/mail_compose_message.py | 12 ++-- 7 files changed, 65 insertions(+), 59 deletions(-) diff --git a/addons/base_calendar/base_calendar.py b/addons/base_calendar/base_calendar.py index 4dffd8bcbf8..09033bffa84 100644 --- a/addons/base_calendar/base_calendar.py +++ b/addons/base_calendar/base_calendar.py @@ -515,7 +515,7 @@ property or property parameter."), sub, body, attachments=attach and {'invitation.ics': attach} or None, - subtype='html', + content_subtype='html', reply_to=email_from, context=context ) diff --git a/addons/crm/wizard/mail_compose_message.py b/addons/crm/wizard/mail_compose_message.py index b82c3083f3a..11d340b2f76 100644 --- a/addons/crm/wizard/mail_compose_message.py +++ b/addons/crm/wizard/mail_compose_message.py @@ -54,7 +54,7 @@ class mail_compose_message(osv.osv_memory): 'email_cc' : tools.ustr(data.email_cc or ''), 'model': model, 'res_id': res_id, - 'subtype': 'plain', + 'content_subtype': 'plain', }) if hasattr(data, 'section_id'): result.update({'reply_to' : data.section_id and data.section_id.reply_to or False}) diff --git a/addons/email_template/email_template.py b/addons/email_template/email_template.py index 86f136ca5b9..31bf9a76441 100644 --- a/addons/email_template/email_template.py +++ b/addons/email_template/email_template.py @@ -310,7 +310,7 @@ class email_template(osv.osv): 'attachment_ids': False, 'message_id': False, 'state': 'outgoing', - 'subtype': 'plain', + 'content_subtype': 'plain', } if not template_id: return values @@ -326,7 +326,7 @@ class email_template(osv.osv): or False if values['body_html']: - values.update(subtype='html') + values.update(content_subtype='html') if template.user_signature: signature = self.pool.get('res.users').browse(cr, uid, uid, context).signature diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 9228861b139..1595fbae077 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -63,18 +63,21 @@ def to_email(text): if not text: return [] return re.findall(r'([^ ,<@]+@[^> ,]+)', text) -class mail_message_common(osv.osv_memory): +class mail_message_common(osv.TransientModel): """Common abstract class for holding the main attributes of a message object. It could be reused as parent model for any database model or wizard screen that needs to hold a kind of - message""" + message. + All internal logic should be in a database-based model. For example, + a wizard for writing emails should inherit from this class and not + from mail.message.""" def get_body(self, cr, uid, ids, name, arg, context=None): if context is None: context = {} result = dict.fromkeys(ids, '') for message in self.browse(cr, uid, ids, context=context): - if message.subtype == 'html': + if message.content_subtype == 'html': result[message.id] = message.body_html else: result[message.id] = message.body_text @@ -85,7 +88,7 @@ class mail_message_common(osv.osv_memory): - obj: mail.message object - name: 'body' - args: [('body', 'ilike', 'blah')]""" - return ['|', '&', ('subtype', '=', 'html'), ('body_html', args[0][1], args[0][2]), ('body_text', args[0][1], args[0][2])] + return ['|', '&', ('content_subtype', '=', 'html'), ('body_html', args[0][1], args[0][2]), ('body_text', args[0][1], args[0][2])] def get_record_name(self, cr, uid, ids, name, arg, context=None): if context is None: @@ -115,19 +118,20 @@ class mail_message_common(osv.osv_memory): help="Full message headers, e.g. SMTP session headers (usually available on inbound messages only)"), 'message_id': fields.char('Message-Id', size=256, help='Message unique identifier', select=1, readonly=1), 'references': fields.text('References', help='Message references, such as identifiers of previous messages', readonly=1), - 'subtype': fields.char('Message type', size=32, help="Type of message, usually 'html' or 'plain', used to " - "select plaintext or rich text contents accordingly", readonly=1), + 'content_subtype': fields.char('Message content subtype', size=32, + help="Type of message, usually 'html' or 'plain', used to " + "select plain-text or rich-text contents accordingly", readonly=1), 'body_text': fields.text('Text contents', help="Plain-text version of the message"), 'body_html': fields.text('Rich-text contents', help="Rich-text/HTML version of the message"), 'body': fields.function(get_body, fnct_search = search_body, string='Message content', type='text', - help="Content of the message. This content equals the body_text field for plain-test messages, and body_html for rich-text/HTML messages. This allows having one field if we want to access the content matching the message subtype."), + help="Content of the message. This content equals the body_text field for plain-test messages, and body_html for rich-text/HTML messages. This allows having one field if we want to access the content matching the message content_subtype."), 'parent_id': fields.many2one('mail.message', 'Parent message', help="Parent message, used for displaying as threads with hierarchy", select=True, ondelete='set null',), 'child_ids': fields.one2many('mail.message', 'parent_id', 'Child messages'), } _defaults = { - 'subtype': 'plain', + 'content_subtype': 'plain', 'date': (lambda *a: fields.datetime.now()), } @@ -206,12 +210,12 @@ class mail_message(osv.osv): ('comment', 'Comment'), ('notification', 'System notification'), ], 'Type', help="Message type: e-mail for e-mail message, notification for system message, comment for other messages such as user replies"), - 'message_subtype': fields.selection([ + 'message_tmptype': fields.selection([ ('email', 'e-mail'), ('comment', 'Comment'), ('create', 'Create'), ('cancel', 'Cancel'), - ], 'Type', help="Message subtype, such as create or cancel. May be overriden by addons."), + ], 'Type', help="Message temptype, such as create or cancel. May be overriden by addons."), 'partner_id': fields.many2one('res.partner', 'Related partner'), 'user_id': fields.many2one('res.users', 'Related user', readonly=1), 'attachment_ids': fields.many2many('ir.attachment', 'message_attachment_rel', 'message_id', 'attachment_id', 'Attachments'), @@ -230,7 +234,7 @@ class mail_message(osv.osv): _defaults = { 'type': 'email', - 'message_subtype': 'email', + 'message_tmptype': 'email', 'state': 'received', } @@ -250,18 +254,18 @@ class mail_message(osv.osv): default.update(message_id=False,original=False,headers=False) return super(mail_message,self).copy(cr, uid, id, default=default, context=context) - def schedule_with_attach(self, cr, uid, email_from, email_to, subject, body, model=False, email_cc=None, - email_bcc=None, reply_to=False, attachments=None, message_id=False, references=False, - res_id=False, subtype='plain', headers=None, mail_server_id=False, auto_delete=False, - context=None): + def schedule_with_attach(self, cr, uid, email_from, email_to, subject, body, model=False, + email_cc=None, email_bcc=None, reply_to=False, attachments=None, + message_id=False, references=False, res_id=False, content_subtype='plain', + headers=None, mail_server_id=False, auto_delete=False, context=None): """Schedule sending a new email message, to be sent the next time the mail scheduler runs, or the next time :meth:`process_email_queue` is called explicitly. :param string email_from: sender email address :param list email_to: list of recipient addresses (to be joined with commas) :param string subject: email subject (no pre-encoding/quoting necessary) - :param string body: email body, according to the ``subtype`` (by default, plaintext). - If html subtype is used, the message will be automatically converted + :param string body: email body, according to the ``content_subtype`` + (by default, plaintext). If html content_subtype is used, the message will be automatically converted to plaintext and wrapped in multipart/alternative. :param list email_cc: optional list of string values for CC header (to be joined with commas) :param list email_bcc: optional list of string values for BCC header (to be joined with commas) @@ -272,9 +276,9 @@ class mail_message(osv.osv): be used to generate a tracking id, used to match any response related to the same document) :param string reply_to: optional value of Reply-To header - :param string subtype: optional mime subtype for the text body (usually 'plain' or 'html'), - must match the format of the ``body`` parameter. Default is 'plain', - making the content part of the mail "text/plain". + :param string content_subtype: optional mime content_subtype for the text body (usually 'plain' or 'html'), + must match the format of the ``body`` parameter. Default is 'plain', + making the content part of the mail "text/plain". :param dict attachments: map of filename to filecontents, where filecontents is a string containing the bytes of the attachment :param dict headers: optional map of headers to set on the outgoing mail (may override the @@ -299,8 +303,8 @@ class mail_message(osv.osv): 'model': model, 'res_id': res_id, 'type': 'email', - 'body_text': body if subtype != 'html' else False, - 'body_html': body if subtype == 'html' else False, + 'body_text': body if content_subtype != 'html' else False, + 'body_html': body if content_subtype == 'html' else False, 'email_from': email_from, 'email_to': email_to and ','.join(email_to) or '', 'email_cc': email_cc and ','.join(email_cc) or '', @@ -308,7 +312,7 @@ class mail_message(osv.osv): 'reply_to': reply_to, 'message_id': message_id, 'references': references, - 'subtype': subtype, + 'content_subtype': content_subtype, 'headers': headers, # serialize the dict on the fly 'mail_server_id': mail_server_id, 'state': 'outgoing', @@ -388,7 +392,7 @@ class mail_message(osv.osv): 'headers' : { 'X-Mailer': mailer, #.. all X- headers... }, - 'subtype': msg_mime_subtype, + 'content_subtype': msg_mime_subtype, 'body_text': plaintext_body 'body_html': html_body, 'attachments': [('file1', 'bytes'), @@ -464,7 +468,7 @@ class mail_message(osv.osv): msg['in-reply-to'] = msg_txt.get('In-Reply-To') msg['headers'] = {} - msg['subtype'] = 'plain' + msg['content_subtype'] = 'plain' for item in msg_txt.items(): if item[0].startswith('X-'): msg['headers'].update({item[0]: item[1]}) @@ -473,7 +477,7 @@ class mail_message(osv.osv): body = msg_txt.get_payload(decode=True) if 'text/html' in msg.get('content-type', ''): msg['body_html'] = body - msg['subtype'] = 'html' + msg['content_subtype'] = 'html' if body: body = tools.html2plaintext(body) msg['body_text'] = tools.ustr(body, encoding) @@ -482,9 +486,9 @@ class mail_message(osv.osv): if msg_txt.is_multipart() or 'multipart/alternative' in msg.get('content-type', ''): body = "" if 'multipart/alternative' in msg.get('content-type', ''): - msg['subtype'] = 'alternative' + msg['content_subtype'] = 'alternative' else: - msg['subtype'] = 'mixed' + msg['content_subtype'] = 'mixed' for part in msg_txt.walk(): if part.get_content_maintype() == 'multipart': continue @@ -498,7 +502,7 @@ class mail_message(osv.osv): content = tools.ustr(content, encoding) if part.get_content_subtype() == 'html': msg['body_html'] = content - msg['subtype'] = 'html' # html version prevails + msg['content_subtype'] = 'html' # html version prevails body = tools.ustr(tools.html2plaintext(content)) body = body.replace(' ', '') elif part.get_content_subtype() == 'plain': @@ -515,7 +519,7 @@ class mail_message(osv.osv): # for backwards compatibility: msg['body'] = msg['body_text'] - msg['sub_type'] = msg['subtype'] or 'plain' + msg['sub_type'] = msg['content_subtype'] or 'plain' return msg def _postprocess_sent_message(self, cr, uid, message, context=None): @@ -561,15 +565,17 @@ class mail_message(osv.osv): for attach in message.attachment_ids: attachments.append((attach.datas_fname, base64.b64decode(attach.datas))) - body = message.body_html if message.subtype == 'html' else message.body_text + body = message.body_html if message.content_subtype == 'html' else message.body_text body_alternative = None - subtype_alternative = None - if message.subtype == 'html' and message.body_text: + content_subtype_alternative = None + if message.content_subtype == 'html' and message.body_text: # we have a plain text alternative prepared, pass it to # build_message instead of letting it build one body_alternative = message.body_text - subtype_alternative = 'plain' + content_subtype_alternative = 'plain' + # build an RFC2822 email.message.Message object adn send it + # without queuing msg = ir_mail_server.build_email( email_from=message.email_from, email_to=to_email(message.email_to), @@ -582,8 +588,8 @@ class mail_message(osv.osv): attachments=attachments, message_id=message.message_id, references = message.references, object_id=message.res_id and ('%s-%s' % (message.res_id,message.model)), - subtype=message.subtype, - subtype_alternative=subtype_alternative, + subtype=message.content_subtype, + subtype_alternative=content_subtype_alternative, headers=message.headers and ast.literal_eval(message.headers)) res = ir_mail_server.send_email(cr, uid, msg, mail_server_id=message.mail_server_id.id, diff --git a/addons/mail/mail_message_view.xml b/addons/mail/mail_message_view.xml index ecd106e05e5..1a7d511de3b 100644 --- a/addons/mail/mail_message_view.xml +++ b/addons/mail/mail_message_view.xml @@ -103,7 +103,7 @@ - + @@ -113,7 +113,7 @@ - +
    -
    + Checklist From f19e5ff9bcc8cbee1d8e389c5a59d5e75591730a Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 18 Jul 2012 15:37:12 +0200 Subject: [PATCH 426/662] [IMP] don't collapse newlines in list cells bzr revid: xmo@openerp.com-20120718133712-0pbdahv62rf0nslc --- addons/web/static/src/css/base.css | 1 + addons/web/static/src/css/base.sass | 1 + addons/web/static/src/xml/base.xml | 5 ++--- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 97d2fcf57a7..f92d5cbf1c2 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -2256,6 +2256,7 @@ } .openerp .oe_list_content > tbody > tr > td.oe_list_field_cell { padding: 3px 6px; + white-space: pre-line; } .openerp .oe_list_content > tbody > tr > td, .openerp .oe_list_content > tbody > tr > th { line-height: 18px; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index c5197743acd..2ad33c8ca62 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -1784,6 +1784,7 @@ $sheet-max-width: 860px border-top: 1px solid #ddd > td.oe_list_field_cell padding: 3px 6px + white-space: pre-line > td, > th line-height: 18px > button diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index a9c8e15bcd7..6d0d4a9ea7d 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -657,9 +657,8 @@ - - + t-att-data-field="column.id" + > From 9096f2c45c3c9c12486eed2dd273aeb03441cb68 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 18 Jul 2012 15:46:07 +0200 Subject: [PATCH 427/662] [ADD] reimplement o2m's cancel-on-blur when no alteration has been done by the user to the row being edited (new or not) bzr revid: xmo@openerp.com-20120718134607-bukj6c5lysmqeer3 --- addons/web/static/src/js/view_form.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 948b3a73913..92faa3d7d15 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3331,13 +3331,20 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({ /** * Handles blurring of the nested form (saves the currently edited row), * unless the flag to ignore the event is set to ``true`` + * + * Makes the internal form go away */ _on_form_blur: function () { if (this.__ignore_blur) { this.__ignore_blur = false; return; } - this.save_edition(); + // FIXME: why isn't there an API for this? + if (this.editor.form.$element.hasClass('oe_form_dirty')) { + this.save_edition(); + return; + } + this.cancel_edition(); }, keyup_ENTER: function () { // blurring caused by hitting the [Return] key, should skip the From 03dd20254e2c62b8290f9b329bde256e92fcc3cd Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Wed, 18 Jul 2012 16:01:31 +0200 Subject: [PATCH 428/662] [IMP] use 'Save' as label of the button to save an editable list row bzr revid: xmo@openerp.com-20120718140131-eop88n524hwvrguw --- addons/web/static/src/xml/base.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 6d0d4a9ea7d..94b76c170ea 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -668,7 +668,7 @@ + type="button">Save discard From e72f791b1321fb6d4496488ccf062ff92f710010 Mon Sep 17 00:00:00 2001 From: Minh Tran Date: Wed, 18 Jul 2012 16:27:08 +0200 Subject: [PATCH 429/662] improved style of kanban vignette dropdown menu bzr revid: mit@openerp.com-20120718142708-5okzuclspou6khot --- addons/web/static/src/css/base.css | 2 +- addons/web/static/src/css/base.sass | 2 +- addons/web_kanban/static/src/css/kanban.css | 19 +++++++------------ addons/web_kanban/static/src/css/kanban.sass | 19 ++++++++----------- 4 files changed, 17 insertions(+), 25 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 0a3d24d41f4..8ee9bad823c 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -599,6 +599,7 @@ float: none; display: block; position: relative; + padding: 2px 12px; } .openerp .oe_dropdown_menu > li:hover { background-color: #f0f0fa; @@ -615,7 +616,6 @@ .openerp .oe_dropdown_menu > li > a { white-space: nowrap; display: block; - padding: 4px 15px; color: #4c4c4c; text-decoration: none; } diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index fb67945a02d..fe1e8cfe8d2 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -483,10 +483,10 @@ $sheet-max-width: 860px float: none display: block position: relative + padding: 2px 12px > a white-space: nowrap display: block - padding: 4px 15px color: #4c4c4c text-decoration: none &:hover diff --git a/addons/web_kanban/static/src/css/kanban.css b/addons/web_kanban/static/src/css/kanban.css index 5a7c1b84067..51cdc568a1e 100644 --- a/addons/web_kanban/static/src/css/kanban.css +++ b/addons/web_kanban/static/src/css/kanban.css @@ -359,6 +359,9 @@ .openerp .oe_kanban_view .oe_kanban_card .oe_dropdown_kanban { margin-top: 4px; } +.openerp .oe_kanban_view .oe_kanban_card .oe_dropdown_kanban .oe_kanban_project_times li { + float: left; +} .openerp .oe_kanban_view .oe_kanban_star { float: left; position: inline-block; @@ -401,9 +404,6 @@ position: relative; top: 2px; } -.openerp .oe_kanban_view .oe_kanban_project_times li { - float: left; -} .openerp .oe_kanban_view .oe_kanban_status { position: relative; top: 4px; @@ -471,30 +471,25 @@ visibility: hidden; } .openerp .oe_kanban_view .oe_kanban_colorpicker { - padding: 3px 6px; white-space: nowrap; } .openerp .oe_kanban_view .oe_kanban_colorpicker li { float: left; + margin: 0; + padding: 0; } .openerp .oe_kanban_view .oe_kanban_colorpicker li a { display: inline-block; - width: 18px; - height: 18px; + width: 16px; + height: 16px; border: 1px solid white; } .openerp .oe_kanban_view .oe_kanban_colorpicker li a:hover { border: 1px solid gray !important; } .openerp .oe_kanban_view .oe_kanban_colorpicker li:first-child a { - margin-top: 1px; - height: 16px; border: 1px solid #cccccc; } -.openerp .oe_kanban_view .oe_kanban_colorpicker li:first-child a:hover { - margin-top: 0px; - height: 18px; -} .openerp .oe_kanban_view .oe_kanban_color_0 { background-color: white; } diff --git a/addons/web_kanban/static/src/css/kanban.sass b/addons/web_kanban/static/src/css/kanban.sass index cea95f2ce53..6478ea5b213 100644 --- a/addons/web_kanban/static/src/css/kanban.sass +++ b/addons/web_kanban/static/src/css/kanban.sass @@ -307,6 +307,10 @@ text-decoration: none .oe_dropdown_kanban margin-top: 4px + .oe_kanban_project_times + li + float: left + .oe_kanban_star float: left position: inline-block @@ -337,9 +341,6 @@ position: relative top: 2px - .oe_kanban_project_times li - float: left - .oe_kanban_status position: relative top: 4px @@ -387,24 +388,20 @@ // }}} // KanbanColorPicker {{{ .oe_kanban_colorpicker - padding: 3px 6px white-space: nowrap .oe_kanban_colorpicker li float: left + margin: 0 + padding: 0 a display: inline-block - width: 18px - height: 18px + width: 16px + height: 16px border: 1px solid white a:hover border: 1px solid gray !important .oe_kanban_colorpicker li:first-child a - margin-top: 1px - height: 16px border: 1px solid #ccc - &:hover - margin-top: 0px - height: 18px // }}} // KanbanColors {{{ .oe_kanban_color_0 From 8632675b82ed1b4cc50a3a48b02fb40dd316d3d6 Mon Sep 17 00:00:00 2001 From: Minh Tran Date: Wed, 18 Jul 2012 16:35:39 +0200 Subject: [PATCH 430/662] re alignment of dropdown menu bzr revid: mit@openerp.com-20120718143539-0b1abwzq24f66s50 --- addons/web/static/src/css/base.css | 4 ++-- addons/web/static/src/css/base.sass | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 8ee9bad823c..e96bb2666f5 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -584,7 +584,7 @@ z-index: 1; border: 1px solid #afafb6; background: white; - padding: 6px 0; + padding: 4px 0; min-width: 140px; text-align: left; -moz-border-radius: 3px; @@ -599,7 +599,7 @@ float: none; display: block; position: relative; - padding: 2px 12px; + padding: 2px 8px; } .openerp .oe_dropdown_menu > li:hover { background-color: #f0f0fa; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index fe1e8cfe8d2..d860fc69189 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -470,7 +470,7 @@ $sheet-max-width: 860px z-index: 1 border: 1px solid #afafb6 background: white - padding: 6px 0 + padding: 4px 0 min-width: 140px text-align: left @include radius(3px) @@ -483,7 +483,7 @@ $sheet-max-width: 860px float: none display: block position: relative - padding: 2px 12px + padding: 2px 8px > a white-space: nowrap display: block From e068ed26636212575245fad882ea549e3a505d91 Mon Sep 17 00:00:00 2001 From: "Rajesh Prajapati (OpenERP)" Date: Thu, 19 Jul 2012 11:08:03 +0530 Subject: [PATCH 431/662] [IMP]vat to tax : changed the label Vat as its abbreviation bzr revid: rpr@tinyerp.com-20120719053803-r4p9dhh28h2bysmm --- addons/account/account.py | 26 +++++++++---------- addons/account/account_move_line.py | 4 +-- .../data/configurable_account_chart.xml | 6 ++--- addons/account/demo/account_minimal.xml | 4 +-- .../report/account_journal_sale_purchase.rml | 6 ++--- .../account/report/account_print_invoice.rml | 2 +- .../account/report/account_print_overdue.rml | 2 +- addons/account/wizard/account_vat_view.xml | 4 +-- .../account_coda/account_coda_comm_type.xml | 2 +- .../account_coda_trans_category.xml | 2 +- .../account_coda/account_coda_trans_code.xml | 4 +-- .../report/account_followup_print.rml | 2 +- addons/l10n_th/account_data.xml | 20 +++++++------- addons/l10n_us/account_tax_template.xml | 2 +- addons/mrp_repair/report/order.rml | 4 +-- addons/point_of_sale/report/pos_lines.rml | 2 +- addons/report_intrastat/report/invoice.rml | 2 +- addons/sale/report/sale_order.rml | 4 +-- 18 files changed, 49 insertions(+), 49 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index 78d0a192237..3675e89c06d 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -1788,7 +1788,7 @@ class account_tax_code(osv.osv): 'line_ids': fields.one2many('account.move.line', 'tax_code_id', 'Lines'), 'company_id': fields.many2one('res.company', 'Company', required=True), 'sign': fields.float('Coefficent for parent', required=True, help='You can specify here the coefficient that will be used when consolidating the amount of this case into its parent. For example, set 1/-1 if you want to add/substract it.'), - 'notprintable':fields.boolean("Not Printable in Invoice", help="Check this box if you don't want any TAX related to this Tax Code to appear on invoices"), + 'notprintable':fields.boolean("Not Printable in Invoice", help="Check this box if you don't want any Tax related to this Tax Code to appear on invoices"), 'sequence': fields.integer('Sequence', help="Determine the display order in the report 'Accounting \ Reporting \ Generic Reporting \ Taxes \ Taxes Report'"), } @@ -1880,17 +1880,17 @@ class account_tax(osv.osv): 'python_applicable':fields.text('Python Code'), # - # Fields used for the TAX declaration + # Fields used for the Tax declaration # - 'base_code_id': fields.many2one('account.tax.code', 'Account Base Code', help="Use this code for the TAX declaration."), - 'tax_code_id': fields.many2one('account.tax.code', 'Account Tax Code', help="Use this code for the TAX declaration."), + 'base_code_id': fields.many2one('account.tax.code', 'Account Base Code', help="Use this code for the Tax declaration."), + 'tax_code_id': fields.many2one('account.tax.code', 'Account Tax Code', help="Use this code for the Tax declaration."), 'base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."), 'tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."), # Same fields for refund invoices - 'ref_base_code_id': fields.many2one('account.tax.code', 'Refund Base Code', help="Use this code for the TAX declaration."), - 'ref_tax_code_id': fields.many2one('account.tax.code', 'Refund Tax Code', help="Use this code for the TAX declaration."), + 'ref_base_code_id': fields.many2one('account.tax.code', 'Refund Base Code', help="Use this code for the Tax declaration."), + 'ref_tax_code_id': fields.many2one('account.tax.code', 'Refund Tax Code', help="Use this code for the Tax declaration."), 'ref_base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."), 'ref_tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."), 'include_base_amount': fields.boolean('Included in base amount', help="Indicates if the amount of tax must be included in the base amount for the computation of the next taxes"), @@ -2217,7 +2217,7 @@ class account_tax(osv.osv): def compute_inv(self, cr, uid, taxes, price_unit, quantity, product=None, partner=None, precision=None): """ Compute tax values for given PRICE_UNIT, QUANTITY and a buyer/seller ADDRESS_ID. - Price Unit is a TAX included price + Price Unit is a Tax included price RETURN: [ tax ] @@ -2673,7 +2673,7 @@ class account_tax_code_template(osv.osv): 'parent_id': fields.many2one('account.tax.code.template', 'Parent Code', select=True), 'child_ids': fields.one2many('account.tax.code.template', 'parent_id', 'Child Codes'), 'sign': fields.float('Sign For Parent', required=True), - 'notprintable':fields.boolean("Not Printable in Invoice", help="Check this box if you don't want any TAX related to this Tax Code to appear on invoices"), + 'notprintable':fields.boolean("Not Printable in Invoice", help="Check this box if you don't want any Tax related to this Tax Code to appear on invoices"), } _defaults = { @@ -2788,17 +2788,17 @@ class account_tax_template(osv.osv): 'python_applicable':fields.text('Python Code'), # - # Fields used for the TAX declaration + # Fields used for the Tax declaration # - 'base_code_id': fields.many2one('account.tax.code.template', 'Base Code', help="Use this code for the TAX declaration."), - 'tax_code_id': fields.many2one('account.tax.code.template', 'Tax Code', help="Use this code for the TAX declaration."), + 'base_code_id': fields.many2one('account.tax.code.template', 'Base Code', help="Use this code for the Tax declaration."), + 'tax_code_id': fields.many2one('account.tax.code.template', 'Tax Code', help="Use this code for the Tax declaration."), 'base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."), 'tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."), # Same fields for refund invoices - 'ref_base_code_id': fields.many2one('account.tax.code.template', 'Refund Base Code', help="Use this code for the TAX declaration."), - 'ref_tax_code_id': fields.many2one('account.tax.code.template', 'Refund Tax Code', help="Use this code for the TAX declaration."), + 'ref_base_code_id': fields.many2one('account.tax.code.template', 'Refund Base Code', help="Use this code for the Tax declaration."), + 'ref_tax_code_id': fields.many2one('account.tax.code.template', 'Refund Tax Code', help="Use this code for the Tax declaration."), 'ref_base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."), 'ref_tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."), 'include_base_amount': fields.boolean('Include in Base Amount', help="Set if the amount of tax must be included in the base amount before computing the next taxes."), diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index e9f3459ad2c..5eb56bfa645 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -327,7 +327,7 @@ class account_move_line(osv.osv): if account and ((not fields) or ('debit' in fields) or ('credit' in fields)): data['account_id'] = account.id - # Propose the price TAX excluded, the TAX will be added when confirming line + # Propose the price Tax excluded, the Tax will be added when confirming line if account.tax_ids: taxes = fiscal_pos_obj.map_tax(cr, uid, part and part.property_account_position or False, account.tax_ids) tax = tax_obj.browse(cr, uid, taxes) @@ -1347,7 +1347,7 @@ class account_move_line(osv.osv): } if data['tax_code_id']: self.create(cr, uid, data, context) - #create the TAX movement + #create the Tax movement data = { 'move_id': vals['move_id'], 'name': tools.ustr(vals['name'] or '') + ' ' + tools.ustr(tax['name'] or ''), diff --git a/addons/account/data/configurable_account_chart.xml b/addons/account/data/configurable_account_chart.xml index 345202de899..21a58fb2a6d 100644 --- a/addons/account/data/configurable_account_chart.xml +++ b/addons/account/data/configurable_account_chart.xml @@ -385,8 +385,8 @@ - - + + @@ -444,7 +444,7 @@ purchase - + diff --git a/addons/account/demo/account_minimal.xml b/addons/account/demo/account_minimal.xml index 3592c82d6f8..b13af6a735c 100644 --- a/addons/account/demo/account_minimal.xml +++ b/addons/account/demo/account_minimal.xml @@ -94,7 +94,7 @@ X11003 - Output TAX - (test) + Output Tax - (test) other @@ -152,7 +152,7 @@ X1112 - Input TAX - (test) + Input Tax - (test) other diff --git a/addons/account/report/account_journal_sale_purchase.rml b/addons/account/report/account_journal_sale_purchase.rml index 69f26ce1ff8..236879669f9 100644 --- a/addons/account/report/account_journal_sale_purchase.rml +++ b/addons/account/report/account_journal_sale_purchase.rml @@ -219,7 +219,7 @@ Account Partner Label - TAX + Tax Debit Credit @@ -271,7 +271,7 @@ Account Partner Label - TAX + Tax Debit Credit @@ -330,7 +330,7 @@ - TAX Declaration + Tax Declaration diff --git a/addons/account/report/account_print_invoice.rml b/addons/account/report/account_print_invoice.rml index 12192f8472b..4ffa7a33f9d 100644 --- a/addons/account/report/account_print_invoice.rml +++ b/addons/account/report/account_print_invoice.rml @@ -168,7 +168,7 @@ Tel. : [[ (o.partner_id.phone) or removeParentNode('para') ]] Fax : [[ (o.partner_id.fax) or removeParentNode('para') ]] - TAX : [[ (o.partner_id.vat) or removeParentNode('para') ]] + VAT : [[ (o.partner_id.vat) or removeParentNode('para') ]] diff --git a/addons/account/report/account_print_overdue.rml b/addons/account/report/account_print_overdue.rml index 6b4253d99f9..2d4238823da 100644 --- a/addons/account/report/account_print_overdue.rml +++ b/addons/account/report/account_print_overdue.rml @@ -138,7 +138,7 @@ - TAX: [[ o.vat or removeParentNode('para') ]] + VAT: [[ o.vat or removeParentNode('para') ]] diff --git a/addons/account/wizard/account_vat_view.xml b/addons/account/wizard/account_vat_view.xml index 44dae7ec5ac..6e5dc09b816 100644 --- a/addons/account/wizard/account_vat_view.xml +++ b/addons/account/wizard/account_vat_view.xml @@ -8,7 +8,7 @@ form - 106 - Method of calculation (TAX, withholding tax on income, commission, etc.) + Method of calculation (Tax, withholding tax on income, commission, etc.) 107 diff --git a/addons/account_coda/account_coda_trans_category.xml b/addons/account_coda/account_coda_trans_category.xml index e2d46e017b4..d96282bb422 100644 --- a/addons/account_coda/account_coda_trans_category.xml +++ b/addons/account_coda/account_coda_trans_category.xml @@ -49,7 +49,7 @@ 011 - TAX + Tax 012 diff --git a/addons/account_coda/account_coda_trans_code.xml b/addons/account_coda/account_coda_trans_code.xml index 4f4e0d9f3cf..4ab9650d59a 100644 --- a/addons/account_coda/account_coda_trans_code.xml +++ b/addons/account_coda/account_coda_trans_code.xml @@ -382,7 +382,7 @@ code Reimbursement of cheque-related costs - Overall amount, TAX included + Overall amount, Tax included 99 @@ -1850,7 +1850,7 @@ code Miscellaneous fees and commissions - Costs not specified otherwise, often with a manual communication (e.g. for collecting, ordering funds). TAX excluded = type 0 TAX included = type 3 (at least 3 articles) + Costs not specified otherwise, often with a manual communication (e.g. for collecting, ordering funds). Tax excluded = type 0 Tax included = type 3 (at least 3 articles) 35 diff --git a/addons/account_followup/report/account_followup_print.rml b/addons/account_followup/report/account_followup_print.rml index 83fcfe0f24c..3d096ecf3ac 100644 --- a/addons/account_followup/report/account_followup_print.rml +++ b/addons/account_followup/report/account_followup_print.rml @@ -141,7 +141,7 @@ - TAX: [[ o.partner_id.vat or removeParentNode('para') ]] + VAT: [[ o.partner_id.vat or removeParentNode('para') ]] diff --git a/addons/l10n_th/account_data.xml b/addons/l10n_th/account_data.xml index 53af51f40d4..84ccb182792 100644 --- a/addons/l10n_th/account_data.xml +++ b/addons/l10n_th/account_data.xml @@ -125,7 +125,7 @@ 1510 - Input TAX + Input Tax other @@ -187,7 +187,7 @@ 2310 - Output TAX + Output Tax other @@ -333,7 +333,7 @@ - + Value Added Tax @@ -341,13 +341,13 @@ - Output TAX + Output Tax PP30_4 - Input TAX + Input Tax PP30_6 @@ -397,7 +397,7 @@ - + Taxes to be paid @@ -410,13 +410,13 @@ - Output TAX + Output Tax PP30_5 - Input TAX + Input Tax PP30_7 @@ -485,7 +485,7 @@ - Input TAX + Input Tax percent @@ -497,7 +497,7 @@ - Output TAX + Output Tax percent diff --git a/addons/l10n_us/account_tax_template.xml b/addons/l10n_us/account_tax_template.xml index 292872a7b6e..6e70700a9f3 100644 --- a/addons/l10n_us/account_tax_template.xml +++ b/addons/l10n_us/account_tax_template.xml @@ -27,7 +27,7 @@ purchase - + diff --git a/addons/mrp_repair/report/order.rml b/addons/mrp_repair/report/order.rml index 794aa13e2b9..be5737d4b85 100644 --- a/addons/mrp_repair/report/order.rml +++ b/addons/mrp_repair/report/order.rml @@ -169,7 +169,7 @@ Description - TAX + Tax Quantity @@ -278,7 +278,7 @@ Description - TAX + Tax Quantity diff --git a/addons/point_of_sale/report/pos_lines.rml b/addons/point_of_sale/report/pos_lines.rml index 6ec3e728653..be394ed4f16 100644 --- a/addons/point_of_sale/report/pos_lines.rml +++ b/addons/point_of_sale/report/pos_lines.rml @@ -150,7 +150,7 @@ Description - TAX + Tax Quantity diff --git a/addons/report_intrastat/report/invoice.rml b/addons/report_intrastat/report/invoice.rml index e76e3a00196..c07bd06f402 100644 --- a/addons/report_intrastat/report/invoice.rml +++ b/addons/report_intrastat/report/invoice.rml @@ -148,7 +148,7 @@ Tel. : [[ (o.partner_id.phone) or removeParentNode('para') ]] Fax : [[ (o.partner_id.fax) or removeParentNode('para') ]] - TAX : [[ (o.partner_id.vat) or removeParentNode('para') ]] + VAT : [[ (o.partner_id.vat) or removeParentNode('para') ]] diff --git a/addons/sale/report/sale_order.rml b/addons/sale/report/sale_order.rml index 2a0b4b1955a..8fecc17e62c 100644 --- a/addons/sale/report/sale_order.rml +++ b/addons/sale/report/sale_order.rml @@ -134,7 +134,7 @@ Description - TAX + Tax Quantity @@ -236,7 +236,7 @@ Description - TAX + Tax Quantity From 06104ba553702b16878d52c5b8ab089355216a5e Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 19 Jul 2012 10:23:52 +0200 Subject: [PATCH 432/662] [FIX] shitty undoc flag so saving a form doesn't forget/miss a row being edited bzr revid: xmo@openerp.com-20120719082352-pqq02u03fo09rcwe --- addons/web/static/src/js/view_form.js | 1 + 1 file changed, 1 insertion(+) diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index 92faa3d7d15..9e3db4f1b05 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -3236,6 +3236,7 @@ instance.web.form.One2ManyListView = instance.web.ListView.extend({ if (!form.$element.is('.oe_form_dirty')) { return true; } + this.o2m._dirty_flag = true; // Otherwise validate internal form return _(form.fields).chain() From 50267e2995be46f81ece3a4dafffec7d7f7dfcf3 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 19 Jul 2012 11:03:00 +0200 Subject: [PATCH 433/662] [IMP] in partner form view, allow to quick create titles (shortcut not required) bzr revid: rco@openerp.com-20120719090300-suhzk3s6a1zaqico --- openerp/addons/base/res/res_partner.py | 7 +++++-- openerp/addons/base/res/res_partner_view.xml | 1 - 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/openerp/addons/base/res/res_partner.py b/openerp/addons/base/res/res_partner.py index 2165c8ad16d..bef82825723 100644 --- a/openerp/addons/base/res/res_partner.py +++ b/openerp/addons/base/res/res_partner.py @@ -103,12 +103,15 @@ class res_partner_category(osv.osv): class res_partner_title(osv.osv): _name = 'res.partner.title' + _order = 'name' _columns = { 'name': fields.char('Title', required=True, size=46, translate=True), - 'shortcut': fields.char('Abbreviation', required=True, size=16, translate=True), + 'shortcut': fields.char('Abbreviation', size=16, translate=True), 'domain': fields.selection([('partner','Partner'),('contact','Contact')], 'Domain', required=True, size=24) } - _order = 'name' + _defaults = { + 'domain': 'contact', + } def _lang_get(self, cr, uid, context=None): lang_pool = self.pool.get('res.lang') diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml index 5d6ed868911..da89d6fd0d6 100644 --- a/openerp/addons/base/res/res_partner_view.xml +++ b/openerp/addons/base/res/res_partner_view.xml @@ -31,7 +31,6 @@ - From 48dfecb59f2c5fc0177bd2244d118f2164632e80 Mon Sep 17 00:00:00 2001 From: Raphael Collet Date: Thu, 19 Jul 2012 11:11:46 +0200 Subject: [PATCH 434/662] [IMP] in partner form, make the tab 'Contacts' visible only for companies bzr revid: rco@openerp.com-20120719091146-4m4kzmbzh1g6pjgb --- openerp/addons/base/res/res_partner_view.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openerp/addons/base/res/res_partner_view.xml b/openerp/addons/base/res/res_partner_view.xml index da89d6fd0d6..e64fcb3d0dd 100644 --- a/openerp/addons/base/res/res_partner_view.xml +++ b/openerp/addons/base/res/res_partner_view.xml @@ -154,7 +154,7 @@ - + From 50164cdb7e3894b21094641bd234576d386f8264 Mon Sep 17 00:00:00 2001 From: "Rucha (Open ERP)" Date: Thu, 19 Jul 2012 14:57:38 +0530 Subject: [PATCH 435/662] [IMP]: Added images for products in some modules like membership, hr_expense... bzr revid: rpa@tinyerp.com-20120719092738-jlnadpulm88kc032 --- addons/delivery/delivery_demo.xml | 1 + addons/hr_expense/hr_expense_demo.xml | 3 +++ addons/membership/membership_demo.xml | 3 +++ addons/mrp/mrp_demo.xml | 1 + addons/product_expiry/product_expiry_demo.xml | 4 ++++ addons/sale/sale_demo.xml | 1 + 6 files changed, 13 insertions(+) diff --git a/addons/delivery/delivery_demo.xml b/addons/delivery/delivery_demo.xml index a0a587cfeff..8adcbb649f0 100644 --- a/addons/delivery/delivery_demo.xml +++ b/addons/delivery/delivery_demo.xml @@ -25,6 +25,7 @@ make_to_order 10.0 10.0 + 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 diff --git a/addons/hr_expense/hr_expense_demo.xml b/addons/hr_expense/hr_expense_demo.xml index 50d8bee7708..54154e01f41 100644 --- a/addons/hr_expense/hr_expense_demo.xml +++ b/addons/hr_expense/hr_expense_demo.xml @@ -13,6 +13,7 @@ CarTRA + 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 @@ -22,6 +23,7 @@ AT + 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 @@ -31,6 +33,7 @@ HA0 + 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 Expenses diff --git a/addons/membership/membership_demo.xml b/addons/membership/membership_demo.xml index 0fd28701cf9..29825c7524b 100644 --- a/addons/membership/membership_demo.xml +++ b/addons/membership/membership_demo.xml @@ -11,6 +11,7 @@ 180 service + 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 True @@ -20,6 +21,7 @@ 80 service + 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 True @@ -29,6 +31,7 @@ 40 service + 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 diff --git a/addons/mrp/mrp_demo.xml b/addons/mrp/mrp_demo.xml index 0d971739201..1fcbe379cc1 100644 --- a/addons/mrp/mrp_demo.xml +++ b/addons/mrp/mrp_demo.xml @@ -30,6 +30,7 @@ service Assembly Service Cost + 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 diff --git a/addons/product_expiry/product_expiry_demo.xml b/addons/product_expiry/product_expiry_demo.xml index 519c3f303e4..be2971763b6 100644 --- a/addons/product_expiry/product_expiry_demo.xml +++ b/addons/product_expiry/product_expiry_demo.xml @@ -26,6 +26,7 @@ JKB 3307630302014 + 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 box of 10 @@ -55,6 +56,7 @@ FKS 3307631101876 + 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 Box of 5 @@ -84,6 +86,7 @@ PKB 3307631102323 + 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 Bag of 2 @@ -113,6 +116,7 @@ LEX 3307630302045 + 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 Boxes of 1 liter diff --git a/addons/sale/sale_demo.xml b/addons/sale/sale_demo.xml index aaf326690a1..491148997b2 100644 --- a/addons/sale/sale_demo.xml +++ b/addons/sale/sale_demo.xml @@ -314,6 +314,7 @@ + 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 From ac5dc58367d9bed5a576baaa7b803a67b5d00d07 Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 19 Jul 2012 11:57:42 +0200 Subject: [PATCH 436/662] [IMP] focus the clicked field when starting a row edition by clicking on a cell bzr revid: xmo@openerp.com-20120719095742-lps9xjsrvhn5fnlh --- .../web/static/src/js/view_list_editable.js | 54 +++++++++++++------ doc/list-view.rst | 22 +++++++- 2 files changed, 58 insertions(+), 18 deletions(-) diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index 052a471f0f3..56df125c98b 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -165,9 +165,11 @@ openerp.web.list_editable = function (instance) { * Set up the edition of a record of the list view "inline" * * @param {instance.web.list.Record} [record] record to edit, leave empty to create a new record + * @param {Object} [options] + * @param {String} [options.focus_field] field to focus at start of edition * @return {jQuery.Deferred} */ - start_edition: function (record) { + start_edition: function (record, options) { var self = this; var item = false; if (record) { @@ -194,14 +196,14 @@ openerp.web.list_editable = function (instance) { return self.editor.edit(item, function (field_name, field) { var cell = cells[field_name]; if (!cell || field.get('effective_readonly')) { - // Readonly fields can just remain the list's, form's - // usually don't have backgrounds &al + // Readonly fields can just remain the list's, + // form's usually don't have backgrounds &al field.set({invisible: true}); return; } self.fields_for_resize.push({field: field, cell: cell}); - }).pipe(function () { + }, options).pipe(function () { $recordRow.addClass('oe_edition'); self.resize_fields(); return record.attributes; @@ -558,7 +560,33 @@ openerp.web.list_editable = function (instance) { throw new Error("is_editing's state filter must be either `new` or" + " `edit` if provided"); }, - edit: function (record, configureField) { + _focus_setup: function (focus_field) { + var form = this.form; + + var field; + // If a field to focus was specified + if (focus_field + // Is actually in the form + && (field = form.fields[focus_field]) + // And is visible + && field.$element.is(':visible')) { + // focus it + field.focus(); + return; + } + + _(form.fields_order).detect(function (name) { + // look for first visible field in fields_order, focus it + var field = form.fields[name]; + if (!field.$element.is(':visible')) { + return false; + } + field.focus(); + // Stop as soon as a field got focused + return true; + }); + }, + edit: function (record, configureField, options) { // TODO: specify sequence of edit calls var self = this; var form = self.form; @@ -573,16 +601,7 @@ openerp.web.list_editable = function (instance) { _(form.fields).each(function (field, name) { configureField(name, field); }); - // TODO: actually focus clicked field (if editable) - _(form.fields_order).detect(function (name) { - // look for first visible field in fields_order, focus it - var field = form.fields[name]; - if (!field.$element.is(':visible')) { - return false; - } - field.focus(); - return true; - }); + self._focus_setup(options && options.focus_field); return form; }); }, @@ -627,7 +646,10 @@ openerp.web.list_editable = function (instance) { return this._super.apply(this, arguments); } var record_id = $(event.currentTarget).data('id'); - this.view.start_edition(record_id ? this.records.get(record_id) : null); + this.view.start_edition( + record_id ? this.records.get(record_id) : null, { + focus_field: $(event.target).data('field') + }); }, /** * If a row mapping to the record (@data-id matching the record's id or diff --git a/doc/list-view.rst b/doc/list-view.rst index ebb5f0ffe4d..0d67c27f963 100644 --- a/doc/list-view.rst +++ b/doc/list-view.rst @@ -131,7 +131,7 @@ Interaction Methods rejected if a pending edition could not be saved (e.g. validation failure) -.. js:function:: openerp.web.ListView.start_edition([record]) +.. js:function:: openerp.web.ListView.start_edition([record][, options]) Starts editing the provided record inline, through an overlay form view of editable fields in the record. @@ -142,7 +142,9 @@ Interaction Methods This method resolves any pending edition when invoked, before starting a new edition. + :param record: record to edit, or null to create a new record :type record: :js:class:`~openerp.web.list.Record` + :param EditOptions options: :returns: delegate to the form used for the edition .. js:function:: openerp.web.ListView.save_edition @@ -303,7 +305,7 @@ formview, delegating instead to its :type record_state: String :rtype: Boolean - .. js:function:: openerp.web.list.Editor.edit(record, configureField) + .. js:function:: openerp.web.list.Editor.edit(record, configureField[, options]) Loads the provided record into the internal form view and displays the form view. @@ -320,6 +322,7 @@ formview, delegating instead to its method do some last-minute configuration of form fields. :type configureField: Function + :param EditOptions options: :returns: jQuery delegate to the form object .. js:function:: openerp.web.list.Editor.save @@ -391,6 +394,21 @@ formview, delegating instead to its dataset (instead of appended) :rtype: Boolean + +.. js:class:: EditOptions + + Options object optionally passed into a method starting an edition + to configure its setup and behavior + + .. js:attribute:: focus_field + + Name of the field to set focus on after setting up the edition + of the record. + + If this option is not provided, or the requested field can not + be focused (invisible, readonly or not in the view), the first + visible non-readonly field is focused. + Changes from 6.1 ---------------- From 9e0be9ffd17bf4f2293ef746274527ef5d8e8ea0 Mon Sep 17 00:00:00 2001 From: "Rajesh Prajapati (OpenERP)" Date: Thu, 19 Jul 2012 16:41:15 +0530 Subject: [PATCH 437/662] [IMP]vat to tax : changed the label tax in lowercase bzr revid: rpr@tinyerp.com-20120719111115-ap37b1bo2o7w1w1k --- addons/account/account.py | 20 ++++++++++---------- addons/account/wizard/account_vat_view.xml | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/addons/account/account.py b/addons/account/account.py index ce6cba3edff..c95dbe253ad 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -1788,7 +1788,7 @@ class account_tax_code(osv.osv): 'line_ids': fields.one2many('account.move.line', 'tax_code_id', 'Lines'), 'company_id': fields.many2one('res.company', 'Company', required=True), 'sign': fields.float('Coefficent for parent', required=True, help='You can specify here the coefficient that will be used when consolidating the amount of this case into its parent. For example, set 1/-1 if you want to add/substract it.'), - 'notprintable':fields.boolean("Not Printable in Invoice", help="Check this box if you don't want any Tax related to this Tax Code to appear on invoices"), + 'notprintable':fields.boolean("Not Printable in Invoice", help="Check this box if you don't want any tax related to this tax Code to appear on invoices"), 'sequence': fields.integer('Sequence', help="Determine the display order in the report 'Accounting \ Reporting \ Generic Reporting \ Taxes \ Taxes Report'"), } @@ -1882,15 +1882,15 @@ class account_tax(osv.osv): # # Fields used for the Tax declaration # - 'base_code_id': fields.many2one('account.tax.code', 'Account Base Code', help="Use this code for the Tax declaration."), - 'tax_code_id': fields.many2one('account.tax.code', 'Account Tax Code', help="Use this code for the Tax declaration."), + 'base_code_id': fields.many2one('account.tax.code', 'Account Base Code', help="Use this code for the tax declaration."), + 'tax_code_id': fields.many2one('account.tax.code', 'Account Tax Code', help="Use this code for the tax declaration."), 'base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."), 'tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."), # Same fields for refund invoices - 'ref_base_code_id': fields.many2one('account.tax.code', 'Refund Base Code', help="Use this code for the Tax declaration."), - 'ref_tax_code_id': fields.many2one('account.tax.code', 'Refund Tax Code', help="Use this code for the Tax declaration."), + 'ref_base_code_id': fields.many2one('account.tax.code', 'Refund Base Code', help="Use this code for the tax declaration."), + 'ref_tax_code_id': fields.many2one('account.tax.code', 'Refund Tax Code', help="Use this code for the tax declaration."), 'ref_base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."), 'ref_tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."), 'include_base_amount': fields.boolean('Included in base amount', help="Indicates if the amount of tax must be included in the base amount for the computation of the next taxes"), @@ -2673,7 +2673,7 @@ class account_tax_code_template(osv.osv): 'parent_id': fields.many2one('account.tax.code.template', 'Parent Code', select=True), 'child_ids': fields.one2many('account.tax.code.template', 'parent_id', 'Child Codes'), 'sign': fields.float('Sign For Parent', required=True), - 'notprintable':fields.boolean("Not Printable in Invoice", help="Check this box if you don't want any Tax related to this Tax Code to appear on invoices"), + 'notprintable':fields.boolean("Not Printable in Invoice", help="Check this box if you don't want any tax related to this tax Code to appear on invoices"), } _defaults = { @@ -2790,15 +2790,15 @@ class account_tax_template(osv.osv): # # Fields used for the Tax declaration # - 'base_code_id': fields.many2one('account.tax.code.template', 'Base Code', help="Use this code for the Tax declaration."), - 'tax_code_id': fields.many2one('account.tax.code.template', 'Tax Code', help="Use this code for the Tax declaration."), + 'base_code_id': fields.many2one('account.tax.code.template', 'Base Code', help="Use this code for the tax declaration."), + 'tax_code_id': fields.many2one('account.tax.code.template', 'Tax Code', help="Use this code for the tax declaration."), 'base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."), 'tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."), # Same fields for refund invoices - 'ref_base_code_id': fields.many2one('account.tax.code.template', 'Refund Base Code', help="Use this code for the Tax declaration."), - 'ref_tax_code_id': fields.many2one('account.tax.code.template', 'Refund Tax Code', help="Use this code for the Tax declaration."), + 'ref_base_code_id': fields.many2one('account.tax.code.template', 'Refund Base Code', help="Use this code for the tax declaration."), + 'ref_tax_code_id': fields.many2one('account.tax.code.template', 'Refund Tax Code', help="Use this code for the tax declaration."), 'ref_base_sign': fields.float('Base Code Sign', help="Usually 1 or -1."), 'ref_tax_sign': fields.float('Tax Code Sign', help="Usually 1 or -1."), 'include_base_amount': fields.boolean('Include in Base Amount', help="Set if the amount of tax must be included in the base amount before computing the next taxes."), diff --git a/addons/account/wizard/account_vat_view.xml b/addons/account/wizard/account_vat_view.xml index 6e5dc09b816..e1a5ea3b140 100644 --- a/addons/account/wizard/account_vat_view.xml +++ b/addons/account/wizard/account_vat_view.xml @@ -8,7 +8,7 @@ form
    -
  • -->
  • Reply by email
  • Details
  • -
  • Debug data
  • @@ -147,27 +146,12 @@
    -
      -
    • document: (,)
    • -
    • id:
    • -
    • type:
    • -
    • content_subtype:
    • -
    • state:
    • -
    • parent_id:
    • -
    • email_from:
    • -
    • email_to:
    • -
    • email_cc:
    • -
    • email_bcc:
    • -
    • reply_to:
    • -
    • partner_ids:
    • -
    • message_id:
    • -
    • references:
    • -
    +