diff --git a/addons/account_accountant/i18n/es_AR.po b/addons/account_accountant/i18n/es_AR.po
new file mode 100644
index 00000000000..0e2684b0431
--- /dev/null
+++ b/addons/account_accountant/i18n/es_AR.po
@@ -0,0 +1,23 @@
+# Spanish (Argentina) translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:04+0000\n"
+"PO-Revision-Date: 2013-10-07 21:16+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Spanish (Argentina) \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-10-08 05:42+0000\n"
+"X-Generator: Launchpad (build 16799)\n"
+
+#. module: account_accountant
+#: model:ir.actions.client,name:account_accountant.action_client_account_menu
+msgid "Open Accounting Menu"
+msgstr ""
diff --git a/addons/account_cancel/i18n/et.po b/addons/account_cancel/i18n/et.po
new file mode 100644
index 00000000000..440850791a7
--- /dev/null
+++ b/addons/account_cancel/i18n/et.po
@@ -0,0 +1,23 @@
+# Estonian translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-10-09 14:39+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Estonian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-10-10 04:41+0000\n"
+"X-Generator: Launchpad (build 16799)\n"
+
+#. module: account_cancel
+#: view:account.invoice:0
+msgid "Cancel"
+msgstr ""
diff --git a/addons/auth_crypt/i18n/et.po b/addons/auth_crypt/i18n/et.po
index a634e17faa5..cbe529a053d 100644
--- a/addons/auth_crypt/i18n/et.po
+++ b/addons/auth_crypt/i18n/et.po
@@ -1,30 +1,28 @@
# Estonian translation for openobject-addons
-# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
# This file is distributed under the same license as the openobject-addons package.
-# FIRST AUTHOR , 2011.
+# FIRST AUTHOR , 2013.
#
msgid ""
msgstr ""
"Project-Id-Version: openobject-addons\n"
"Report-Msgid-Bugs-To: FULL NAME \n"
-"POT-Creation-Date: 2012-12-03 16:03+0000\n"
-"PO-Revision-Date: 2011-10-10 19:33+0000\n"
-"Last-Translator: Aare Vesi \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-10-09 14:40+0000\n"
+"Last-Translator: FULL NAME \n"
"Language-Team: Estonian \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2012-12-04 05:53+0000\n"
-"X-Generator: Launchpad (build 16335)\n"
+"X-Launchpad-Export-Date: 2013-10-10 04:41+0000\n"
+"X-Generator: Launchpad (build 16799)\n"
-#. module: base_crypt
-#: model:ir.model,name:base_crypt.model_res_users
+#. module: auth_crypt
+#: field:res.users,password_crypt:0
+msgid "Encrypted Password"
+msgstr "Krüpteeritud Parool"
+
+#. module: auth_crypt
+#: model:ir.model,name:auth_crypt.model_res_users
msgid "Users"
-msgstr ""
-
-#, python-format
-#~ msgid "Error"
-#~ msgstr "Viga"
-
-#~ msgid "res.users"
-#~ msgstr "res.users"
+msgstr "Kasutajad"
diff --git a/addons/auth_oauth_signup/i18n/et.po b/addons/auth_oauth_signup/i18n/et.po
new file mode 100644
index 00000000000..2d159250cff
--- /dev/null
+++ b/addons/auth_oauth_signup/i18n/et.po
@@ -0,0 +1,23 @@
+# Estonian translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-10-09 14:34+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Estonian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-10-10 04:41+0000\n"
+"X-Generator: Launchpad (build 16799)\n"
+
+#. module: auth_oauth_signup
+#: model:ir.model,name:auth_oauth_signup.model_res_users
+msgid "Users"
+msgstr "Kasutajad"
diff --git a/addons/base_geolocalize/__init__.py b/addons/base_geolocalize/__init__.py
new file mode 100644
index 00000000000..9afb820ae15
--- /dev/null
+++ b/addons/base_geolocalize/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2013_Today OpenERP SA ().
+#
+# 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 .
+#
+##############################################################################
+
+import models
diff --git a/addons/base_geolocalize/__openerp__.py b/addons/base_geolocalize/__openerp__.py
new file mode 100644
index 00000000000..c5e08c08e98
--- /dev/null
+++ b/addons/base_geolocalize/__openerp__.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2013_Today OpenERP SA ().
+#
+# 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': 'Partners Geo-Localization',
+ 'version': '1.0',
+ 'category': 'Customer Relationship Management',
+ 'description': """
+Partners geolocalization
+========================
+ """,
+ 'author': 'OpenERP SA',
+ 'depends': ['crm'],
+ 'demo': [
+ # 'res_partner_demo.xml',
+ ],
+ 'data': [
+ 'views/res_partner_view.xml',
+ ],
+ 'test': [],
+ 'installable': True,
+ 'auto_install': False,
+ 'images': [],
+}
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/base_geolocalize/models/__init__.py b/addons/base_geolocalize/models/__init__.py
new file mode 100644
index 00000000000..4e5bc1614d1
--- /dev/null
+++ b/addons/base_geolocalize/models/__init__.py
@@ -0,0 +1 @@
+import res_partner
diff --git a/addons/base_geolocalize/models/res_partner.py b/addons/base_geolocalize/models/res_partner.py
new file mode 100644
index 00000000000..af43b990526
--- /dev/null
+++ b/addons/base_geolocalize/models/res_partner.py
@@ -0,0 +1,88 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2013_Today OpenERP SA ().
+#
+# 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 .
+#
+##############################################################################
+
+try:
+ import simplejson as json
+except ImportError:
+ import json # noqa
+import urllib
+
+from openerp.osv import osv, fields
+from openerp import tools
+from openerp.tools.translate import _
+
+
+def geo_find(addr):
+ url = 'https://maps.googleapis.com/maps/api/geocode/json?sensor=false&address='
+ url += urllib.quote(addr.encode('utf8'))
+
+ try:
+ result = json.load(urllib.urlopen(url))
+ except Exception, e:
+ raise osv.except_osv(_('Network error'),
+ _('Cannot contact geolocation servers. Please make sure that your internet connection is up and running (%s).') % e)
+ if result['status'] != 'OK':
+ return None
+
+ try:
+ geo = result['results'][0]['geometry']['location']
+ return float(geo['lat']), float(geo['lng'])
+ except (KeyError, ValueError):
+ return None
+
+
+def geo_query_address(street=None, zip=None, city=None, state=None, country=None):
+ if country and ',' in country and (country.endswith(' of') or country.endswith(' of the')):
+ # put country qualifier in front, otherwise GMap gives wrong results,
+ # e.g. 'Congo, Democratic Republic of the' => 'Democratic Republic of the Congo'
+ country = '{1} {0}'.format(*country.split(',', 1))
+ return tools.ustr(', '.join(filter(None, [street,
+ ("%s %s" % (zip or '', city or '')).strip(),
+ state,
+ country])))
+
+
+class res_partner(osv.osv):
+ _inherit = "res.partner"
+
+ _columns = {
+ 'partner_latitude': fields.float('Geo Latitude'),
+ 'partner_longitude': fields.float('Geo Longitude'),
+ 'date_localization': fields.date('Geo Localization Date'),
+ }
+
+ def geo_localize(self, cr, uid, ids, context=None):
+ # Don't pass context to browse()! We need country names in english below
+ for partner in self.browse(cr, uid, ids):
+ if not partner:
+ continue
+ result = geo_find(geo_query_address(street=partner.street,
+ zip=partner.zip,
+ city=partner.city,
+ state=partner.state_id.name,
+ country=partner.country_id.name))
+ if result:
+ self.write(cr, uid, [partner.id], {
+ 'partner_latitude': result[0],
+ 'partner_longitude': result[1],
+ 'date_localization': fields.date.context_today(self, cr, uid, context=context)
+ }, context=context)
+ return True
diff --git a/addons/base_geolocalize/views/res_partner_view.xml b/addons/base_geolocalize/views/res_partner_view.xml
new file mode 100644
index 00000000000..24cc8d2d21d
--- /dev/null
+++ b/addons/base_geolocalize/views/res_partner_view.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+ res.partner.geo.inherit
+ res.partner
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/addons/base_report_designer/i18n/hi.po b/addons/base_report_designer/i18n/hi.po
new file mode 100644
index 00000000000..660f5e3d429
--- /dev/null
+++ b/addons/base_report_designer/i18n/hi.po
@@ -0,0 +1,185 @@
+# Hindi translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-10-09 05:55+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Hindi \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-10-10 04:41+0000\n"
+"X-Generator: Launchpad (build 16799)\n"
+
+#. module: base_report_designer
+#: model:ir.model,name:base_report_designer.model_base_report_sxw
+msgid "base.report.sxw"
+msgstr "base.report.sxw"
+
+#. module: base_report_designer
+#: view:base_report_designer.installer:0
+msgid "OpenERP Report Designer Configuration"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base_report_designer.installer:0
+msgid ""
+"This plug-in allows you to create/modify OpenERP Reports into OpenOffice "
+"Writer."
+msgstr ""
+
+#. module: base_report_designer
+#: view:base.report.sxw:0
+msgid "Upload the modified report"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base.report.file.sxw:0
+msgid "The .SXW report"
+msgstr ""
+
+#. module: base_report_designer
+#: model:ir.model,name:base_report_designer.model_base_report_designer_installer
+msgid "base_report_designer.installer"
+msgstr ""
+
+#. module: base_report_designer
+#: model:ir.model,name:base_report_designer.model_base_report_rml_save
+msgid "base.report.rml.save"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base_report_designer.installer:0
+msgid "Configure"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base_report_designer.installer:0
+msgid "title"
+msgstr ""
+
+#. module: base_report_designer
+#: field:base.report.file.sxw,report_id:0
+#: field:base.report.sxw,report_id:0
+msgid "Report"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base.report.rml.save:0
+msgid "The RML Report"
+msgstr ""
+
+#. module: base_report_designer
+#: model:ir.ui.menu,name:base_report_designer.menu_action_report_designer_wizard
+msgid "Report Designer"
+msgstr ""
+
+#. module: base_report_designer
+#: field:base_report_designer.installer,name:0
+msgid "File name"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base.report.file.sxw:0
+#: view:base.report.sxw:0
+msgid "Get a report"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base_report_designer.installer:0
+#: model:ir.actions.act_window,name:base_report_designer.action_report_designer_wizard
+msgid "OpenERP Report Designer"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base.report.sxw:0
+msgid "Continue"
+msgstr ""
+
+#. module: base_report_designer
+#: field:base.report.rml.save,file_rml:0
+msgid "Save As"
+msgstr ""
+
+#. module: base_report_designer
+#: help:base_report_designer.installer,plugin_file:0
+msgid ""
+"OpenObject Report Designer plug-in file. Save as this file and install this "
+"plug-in in OpenOffice."
+msgstr ""
+
+#. module: base_report_designer
+#: view:base.report.rml.save:0
+msgid "Save RML FIle"
+msgstr ""
+
+#. module: base_report_designer
+#: field:base.report.file.sxw,file_sxw:0
+#: field:base.report.file.sxw,file_sxw_upload:0
+msgid "Your .SXW file"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base_report_designer.installer:0
+msgid "Installation and Configuration Steps"
+msgstr ""
+
+#. module: base_report_designer
+#: field:base_report_designer.installer,description:0
+msgid "Description"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base.report.file.sxw:0
+msgid ""
+"This is the template of your requested report.\n"
+"Save it as a .SXW file and open it with OpenOffice.\n"
+"Don't forget to install the OpenERP SA OpenOffice package to modify it.\n"
+"Once it is modified, re-upload it in OpenERP using this wizard."
+msgstr ""
+
+#. module: base_report_designer
+#: model:ir.actions.act_window,name:base_report_designer.action_view_base_report_sxw
+msgid "Base Report sxw"
+msgstr ""
+
+#. module: base_report_designer
+#: model:ir.model,name:base_report_designer.model_base_report_file_sxw
+msgid "base.report.file.sxw"
+msgstr ""
+
+#. module: base_report_designer
+#: field:base_report_designer.installer,plugin_file:0
+msgid "OpenObject Report Designer Plug-in"
+msgstr ""
+
+#. module: base_report_designer
+#: model:ir.actions.act_window,name:base_report_designer.action_report_designer_installer
+msgid "OpenERP Report Designer Installation"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base.report.sxw:0
+msgid "Cancel"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base.report.sxw:0
+msgid "or"
+msgstr ""
+
+#. module: base_report_designer
+#: model:ir.model,name:base_report_designer.model_ir_actions_report_xml
+msgid "ir.actions.report.xml"
+msgstr ""
+
+#. module: base_report_designer
+#: view:base.report.sxw:0
+msgid "Select your report"
+msgstr ""
diff --git a/addons/claim_from_delivery/i18n/et.po b/addons/claim_from_delivery/i18n/et.po
new file mode 100644
index 00000000000..312e096ffde
--- /dev/null
+++ b/addons/claim_from_delivery/i18n/et.po
@@ -0,0 +1,33 @@
+# Estonian translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-10-09 14:42+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Estonian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-10-10 04:41+0000\n"
+"X-Generator: Launchpad (build 16799)\n"
+
+#. module: claim_from_delivery
+#: view:stock.picking.out:0
+msgid "Claims"
+msgstr "Nõuded"
+
+#. module: claim_from_delivery
+#: model:res.request.link,name:claim_from_delivery.request_link_claim_from_delivery
+msgid "Delivery Order"
+msgstr "Tarnetellimus"
+
+#. module: claim_from_delivery
+#: model:ir.actions.act_window,name:claim_from_delivery.action_claim_from_delivery
+msgid "Claim From Delivery"
+msgstr ""
diff --git a/addons/crm_partner_assign/__openerp__.py b/addons/crm_partner_assign/__openerp__.py
index e0f1d78558a..7f6e725422b 100644
--- a/addons/crm_partner_assign/__openerp__.py
+++ b/addons/crm_partner_assign/__openerp__.py
@@ -21,7 +21,7 @@
{
- 'name': 'Partners Geo-Localization',
+ 'name': 'Partner Assignation',
'version': '1.0',
'category': 'Customer Relationship Management',
'description': """
@@ -37,8 +37,11 @@ The most appropriate partner can be assigned.
You can also use the geolocalization without using the GPS coordinates.
""",
'author': 'OpenERP SA',
- 'depends': ['crm', 'account', 'portal'],
- 'demo': ['res_partner_demo.xml', 'crm_lead_demo.xml'],
+ 'depends': ['base_geolocalize', 'crm', 'account', 'portal'],
+ 'demo': [
+ # 'res_partner_demo.xml',
+ 'crm_lead_demo.xml'
+ ],
'data': [
'security/ir.model.access.csv',
'res_partner_view.xml',
@@ -50,6 +53,7 @@ You can also use the geolocalization without using the GPS coordinates.
'portal_data.xml',
'report/crm_lead_report_view.xml',
'report/crm_partner_report_view.xml',
+ 'res_partner_demo.xml',
],
'js': [
'static/src/js/next.js',
diff --git a/addons/crm_partner_assign/crm_partner_assign.py b/addons/crm_partner_assign/crm_partner_assign.py
index daf3d844fe6..e43e090103a 100644
--- a/addons/crm_partner_assign/crm_partner_assign.py
+++ b/addons/crm_partner_assign/crm_partner_assign.py
@@ -19,46 +19,12 @@
#
##############################################################################
-import urllib
import random
-try:
- import simplejson as json
-except ImportError:
- import json # noqa
-
+from openerp.addons.base_geolocalize.models.res_partner import geo_find, geo_query_address
from openerp.osv import osv
from openerp.osv import fields
-from openerp.tools.translate import _
-from openerp import tools
-def geo_find(addr):
- url = 'https://maps.googleapis.com/maps/api/geocode/json?sensor=false&address='
- url += urllib.quote(addr.encode('utf8'))
-
- try:
- result = json.load(urllib.urlopen(url))
- except Exception, e:
- raise osv.except_osv(_('Network error'),
- _('Cannot contact geolocation servers. Please make sure that your internet connection is up and running (%s).') % e)
- if result['status'] != 'OK':
- return None
-
- try:
- geo = result['results'][0]['geometry']['location']
- return float(geo['lat']), float(geo['lng'])
- except (KeyError, ValueError):
- return None
-
-def geo_query_address(street=None, zip=None, city=None, state=None, country=None):
- if country and ',' in country and (country.endswith(' of') or country.endswith(' of the')):
- # put country qualifier in front, otherwise GMap gives wrong results,
- # e.g. 'Congo, Democratic Republic of the' => 'Democratic Republic of the Congo'
- country = '{1} {0}'.format(*country.split(',',1))
- return tools.ustr(', '.join(filter(None, [street,
- ("%s %s" % (zip or '', city or '')).strip(),
- state,
- country])))
class res_partner_grade(osv.osv):
_order = 'sequence'
@@ -88,9 +54,6 @@ class res_partner_activation(osv.osv):
class res_partner(osv.osv):
_inherit = "res.partner"
_columns = {
- 'partner_latitude': fields.float('Geo Latitude'),
- 'partner_longitude': fields.float('Geo Longitude'),
- 'date_localization': fields.date('Geo Localization Date'),
'partner_weight': fields.integer('Grade Weight',
help="Gives the probability to assign a lead to this partner. (0 means no assignation.)"),
'opportunity_assigned_ids': fields.one2many('crm.lead', 'partner_assigned_id',\
@@ -100,6 +63,14 @@ class res_partner(osv.osv):
'date_partnership' : fields.date('Partnership Date'),
'date_review' : fields.date('Latest Partner Review'),
'date_review_next' : fields.date('Next Partner Review'),
+ # customer implementation
+ 'assigned_partner_id': fields.many2one(
+ 'res.partner', 'Implementedy by',
+ ),
+ 'implemented_partner_ids': fields.one2many(
+ 'res.partner', 'assigned_partner_id',
+ string='Implementation References',
+ ),
}
_defaults = {
'partner_weight': lambda *args: 0
@@ -111,23 +82,7 @@ class res_partner(osv.osv):
partner_grade = self.pool.get('res.partner.grade').browse(cr, uid, grade_id)
res['value']['partner_weight'] = partner_grade.partner_weight
return res
- def geo_localize(self, cr, uid, ids, context=None):
- # Don't pass context to browse()! We need country names in english below
- for partner in self.browse(cr, uid, ids):
- if not partner:
- continue
- result = geo_find(geo_query_address(street=partner.street,
- zip=partner.zip,
- city=partner.city,
- state=partner.state_id.name,
- country=partner.country_id.name))
- if result:
- self.write(cr, uid, [partner.id], {
- 'partner_latitude': result[0],
- 'partner_longitude': result[1],
- 'date_localization': fields.date.context_today(self,cr,uid,context=context)
- }, context=context)
- return True
+
class crm_lead(osv.osv):
_inherit = "crm.lead"
diff --git a/addons/crm_partner_assign/portal_data.xml b/addons/crm_partner_assign/portal_data.xml
index 0d4a5b30abd..da0660c3446 100644
--- a/addons/crm_partner_assign/portal_data.xml
+++ b/addons/crm_partner_assign/portal_data.xml
@@ -3,25 +3,10 @@
-
- openerp.portal.res.partner
-
-
-
-
-
-
-
-
- openerp.portal.res.partner
-
-
- [('id','child_of',user.commercial_partner_id.id)]
- openerp.portal.res.partner.grade
-
+
@@ -32,13 +17,13 @@
openerp.portal.crm.lead
-
+ [('partner_assigned_id','child_of',user.commercial_partner_id.id)]openerp.portal.crm.lead
-
+
diff --git a/addons/crm_partner_assign/res_partner_demo.xml b/addons/crm_partner_assign/res_partner_demo.xml
index 8e9088165d1..633a5094722 100644
--- a/addons/crm_partner_assign/res_partner_demo.xml
+++ b/addons/crm_partner_assign/res_partner_demo.xml
@@ -9,5 +9,9 @@
10
+
+
+
+
diff --git a/addons/crm_partner_assign/res_partner_view.xml b/addons/crm_partner_assign/res_partner_view.xml
index 6823c262f02..59ca4c51da3 100644
--- a/addons/crm_partner_assign/res_partner_view.xml
+++ b/addons/crm_partner_assign/res_partner_view.xml
@@ -98,13 +98,14 @@
-
- res.partner.geo.inherit
+
+ res.partner.assign.inheritres.partner
-
+
-
-
+
+
+
diff --git a/addons/crm_partner_assign/security/ir.model.access.csv b/addons/crm_partner_assign/security/ir.model.access.csv
index 81d74bf43e3..6a26c574a1c 100644
--- a/addons/crm_partner_assign/security/ir.model.access.csv
+++ b/addons/crm_partner_assign/security/ir.model.access.csv
@@ -5,4 +5,4 @@ access_crm_partner_report,crm.partner.report.assign.all,model_crm_partner_report
access_res_partner_grade,res.partner.grade,model_res_partner_grade,base.group_sale_salesman,1,1,1,0
access_res_partner_grade_manager,res.partner.grade.manager,model_res_partner_grade,base.group_sale_manager,1,1,1,1
"access_partner_activation_manager","res.partner.activation.manager","model_res_partner_activation","base.group_partner_manager",1,1,1,1
-partner_access_crm_lead,crm.lead,model_crm_lead,portal.group_portal,1,1,0,0
\ No newline at end of file
+partner_access_crm_lead,crm.lead,model_crm_lead,base.group_portal,1,1,0,0
\ No newline at end of file
diff --git a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py
index 80fa2f28b04..ba2ffd68c53 100644
--- a/addons/crm_partner_assign/wizard/crm_forward_to_partner.py
+++ b/addons/crm_partner_assign/wizard/crm_forward_to_partner.py
@@ -87,7 +87,7 @@ class crm_lead_forward_to_partner(osv.TransientModel):
raise osv.except_osv(_('Email Template Error'),
_('The Forward Email Template is not in the database'))
try:
- portal_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'portal', 'group_portal')[1]
+ portal_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'base', 'group_portal')[1]
except ValueError:
raise osv.except_osv(_('Portal Group Error'),
_('The Portal group cannot be found'))
diff --git a/addons/crm_todo/i18n/et.po b/addons/crm_todo/i18n/et.po
new file mode 100644
index 00000000000..4e08132360c
--- /dev/null
+++ b/addons/crm_todo/i18n/et.po
@@ -0,0 +1,85 @@
+# Estonian translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:05+0000\n"
+"PO-Revision-Date: 2013-10-09 15:39+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Estonian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-10-10 04:41+0000\n"
+"X-Generator: Launchpad (build 16799)\n"
+
+#. module: crm_todo
+#: model:ir.model,name:crm_todo.model_project_task
+msgid "Task"
+msgstr "Ülesanne"
+
+#. module: crm_todo
+#: view:crm.lead:0
+msgid "Timebox"
+msgstr "Ajalahter"
+
+#. module: crm_todo
+#: view:crm.lead:0
+msgid "Lead"
+msgstr ""
+
+#. module: crm_todo
+#: view:crm.lead:0
+msgid "For cancelling the task"
+msgstr "Ülesande katkestamiseks"
+
+#. module: crm_todo
+#: view:crm.lead:0
+msgid "Next"
+msgstr "Järgmine"
+
+#. module: crm_todo
+#: model:ir.actions.act_window,name:crm_todo.crm_todo_action
+#: model:ir.ui.menu,name:crm_todo.menu_crm_todo
+msgid "My Tasks"
+msgstr "Minu ülesanded"
+
+#. module: crm_todo
+#: view:crm.lead:0
+#: field:crm.lead,task_ids:0
+msgid "Tasks"
+msgstr "Ülesanded"
+
+#. module: crm_todo
+#: view:crm.lead:0
+msgid "Done"
+msgstr "Valmis"
+
+#. module: crm_todo
+#: view:crm.lead:0
+msgid "Cancel"
+msgstr "Katkesta"
+
+#. module: crm_todo
+#: model:ir.model,name:crm_todo.model_crm_lead
+msgid "Lead/Opportunity"
+msgstr ""
+
+#. module: crm_todo
+#: field:project.task,lead_id:0
+msgid "Lead / Opportunity"
+msgstr ""
+
+#. module: crm_todo
+#: view:crm.lead:0
+msgid "For changing to done state"
+msgstr ""
+
+#. module: crm_todo
+#: view:crm.lead:0
+msgid "Previous"
+msgstr "Eelmine"
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index 01994694e43..e1ea6e95af9 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -227,7 +227,7 @@
-
+
diff --git a/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py b/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py
index 87425b9cb3f..3b73920cf7d 100644
--- a/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py
+++ b/addons/hr_timesheet/wizard/hr_timesheet_sign_in_out.py
@@ -133,7 +133,7 @@ class hr_si_project(osv.osv_memory):
def check_state(self, cr, uid, ids, context=None):
obj_model = self.pool.get('ir.model.data')
- emp_id = self.default_get(cr, uid, context)['emp_id']
+ emp_id = self.default_get(cr, uid, ['emp_id'], context)['emp_id']
# get the latest action (sign_in or out) for this employee
cr.execute('select action from hr_attendance where employee_id=%s and action in (\'sign_in\',\'sign_out\') order by name desc limit 1', (emp_id,))
res = (cr.fetchone() or ('sign_out',))[0]
diff --git a/addons/im_livechat/security/ir.model.access.csv b/addons/im_livechat/security/ir.model.access.csv
index 05469673eca..6e501ee09f4 100644
--- a/addons/im_livechat/security/ir.model.access.csv
+++ b/addons/im_livechat/security/ir.model.access.csv
@@ -2,7 +2,7 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_ls_chann1,im_livechat.channel,model_im_livechat_channel,,1,0,0,0
access_ls_chann2,im_livechat.channel,model_im_livechat_channel,group_im_livechat,1,1,1,0
access_ls_chann3,im_livechat.channel,model_im_livechat_channel,group_im_livechat_manager,1,1,1,1
-access_ls_message_portal,im_livechat.im.message.portal,im.model_im_message,portal.group_portal,0,0,0,0
-access_im_user_portal,im_livechat.im.user.portal,im.model_im_user,portal.group_portal,1,0,0,0
+access_ls_message_portal,im_livechat.im.message.portal,im.model_im_message,base.group_portal,0,0,0,0
+access_im_user_portal,im_livechat.im.user.portal,im.model_im_user,base.group_portal,1,0,0,0
access_ls_message,im_livechat.im.message,im.model_im_message,base.group_public,0,0,0,0
access_im_user,im_livechat.im.user,im.model_im_user,base.group_public,1,0,0,0
\ No newline at end of file
diff --git a/addons/membership/membership_demo.xml b/addons/membership/membership_demo.xml
index 49863bb1f4c..852a9dbf2e0 100644
--- a/addons/membership/membership_demo.xml
+++ b/addons/membership/membership_demo.xml
@@ -34,15 +34,23 @@
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
-
+
+
+
+
-
-
+
+
+
+
+
+
+ True
-
+
diff --git a/addons/point_of_sale/static/src/js/widgets.js b/addons/point_of_sale/static/src/js/widgets.js
index bcd8aa7f7f2..d279093b36e 100644
--- a/addons/point_of_sale/static/src/js/widgets.js
+++ b/addons/point_of_sale/static/src/js/widgets.js
@@ -143,7 +143,7 @@ function openerp_pos_widgets(instance, module){ //module is instance.point_of_sa
var self = this;
this._super();
this.$el.click(function(){
- self.order.selectLine(this.model);
+ self.order.selectLine(self.model);
self.trigger('order_line_selected');
});
if(this.model.is_selected()){
diff --git a/addons/portal/__openerp__.py b/addons/portal/__openerp__.py
index e2bdde949f9..c747409207a 100644
--- a/addons/portal/__openerp__.py
+++ b/addons/portal/__openerp__.py
@@ -49,7 +49,6 @@ very handy when used in combination with the module 'share'.
'wizard/share_wizard_view.xml',
'acquirer_view.xml',
'security/ir.model.access.csv',
- 'security/portal_security.xml',
],
'demo': ['portal_demo.xml'],
'css': ['static/src/css/portal.css'],
diff --git a/addons/portal/portal_data.xml b/addons/portal/portal_data.xml
index 633a3fc0fbd..3fec4d7e1ee 100644
--- a/addons/portal/portal_data.xml
+++ b/addons/portal/portal_data.xml
@@ -3,7 +3,7 @@
-
+ PortalPortal members have specific access rights (such as record rules and restricted menus).
They usually do not belong to the usual OpenERP groups.
diff --git a/addons/portal/portal_demo.xml b/addons/portal/portal_demo.xml
index 2f61c997e08..81118b52c73 100644
--- a/addons/portal/portal_demo.xml
+++ b/addons/portal/portal_demo.xml
@@ -22,7 +22,7 @@ Mr Demo Portal
-
+
diff --git a/addons/portal/portal_view.xml b/addons/portal/portal_view.xml
index 1c6c18bca08..bd2b6a251b2 100644
--- a/addons/portal/portal_view.xml
+++ b/addons/portal/portal_view.xml
@@ -5,10 +5,10 @@
-
+
Inbox
@@ -99,9 +99,9 @@
+ action="action_mail_inbox_feeds_portal" sequence="10" groups="base.group_portal"/>
+ action="action_mail_archives_feeds_portal" sequence="30" groups="base.group_portal"/>
-
+
@@ -19,7 +19,7 @@ their documents through the portal.
Portal Personal Quotations/Sales Orders[('message_follower_ids','in',[user.partner_id.id])]
-
+
@@ -30,7 +30,7 @@ their documents through the portal.
Portal Personal Account Invoices[('message_follower_ids','in',[user.partner_id.id])]
-
+
@@ -38,7 +38,7 @@ their documents through the portal.
[('message_follower_ids','in',[user.partner_id.id])]
-
+
diff --git a/addons/portal_stock/security/ir.model.access.csv b/addons/portal_stock/security/ir.model.access.csv
index 2cf3f3f13b7..d365f0c6544 100644
--- a/addons/portal_stock/security/ir.model.access.csv
+++ b/addons/portal_stock/security/ir.model.access.csv
@@ -1,5 +1,5 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_stock_picking,stock.picking,stock.model_stock_picking,portal.group_portal,1,0,0,0
-access_stock_picking.out,stock.picking.out,stock.model_stock_picking_out,portal.group_portal,1,0,0,0
-access_stock_move,stock.move,stock.model_stock_move,portal.group_portal,1,0,0,0
-access_stock_warehouse_orderpoint,stock.warehouse.orderpoint,procurement.model_stock_warehouse_orderpoint,portal.group_portal,1,0,0,0
+access_stock_picking,stock.picking,stock.model_stock_picking,base.group_portal,1,0,0,0
+access_stock_picking.out,stock.picking.out,stock.model_stock_picking_out,base.group_portal,1,0,0,0
+access_stock_move,stock.move,stock.model_stock_move,base.group_portal,1,0,0,0
+access_stock_warehouse_orderpoint,stock.warehouse.orderpoint,procurement.model_stock_warehouse_orderpoint,base.group_portal,1,0,0,0
diff --git a/addons/portal_stock/security/portal_security.xml b/addons/portal_stock/security/portal_security.xml
index c5587453e40..162fecbd39d 100644
--- a/addons/portal_stock/security/portal_security.xml
+++ b/addons/portal_stock/security/portal_security.xml
@@ -7,14 +7,14 @@
Portal Personal Pickings[('message_follower_ids','in',[user.partner_id.id])]
-
+ Portal Personal Out Pickings[('message_follower_ids','in',[user.partner_id.id])]
-
+
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index 4d025d15cb4..d86f635d749 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -93,8 +93,7 @@
-
+
diff --git a/addons/sale/i18n/hi.po b/addons/sale/i18n/hi.po
new file mode 100644
index 00000000000..075835fe5ac
--- /dev/null
+++ b/addons/sale/i18n/hi.po
@@ -0,0 +1,2132 @@
+# Hindi translation for openobject-addons
+# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2013.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2012-12-21 17:04+0000\n"
+"PO-Revision-Date: 2013-10-10 09:57+0000\n"
+"Last-Translator: FULL NAME \n"
+"Language-Team: Hindi \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2013-10-11 04:49+0000\n"
+"X-Generator: Launchpad (build 16799)\n"
+
+#. module: sale
+#: model:res.groups,name:sale.group_analytic_accounting
+msgid "Analytic Accounting for Sales"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,name:sale.process_transition_confirmquotation0
+msgid "Confirm Quotation"
+msgstr ""
+
+#. module: sale
+#: view:board.board:0
+msgid "Sales Dashboard"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:92
+#, python-format
+msgid "There is no income account defined as global property."
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_line_tree2
+#: model:ir.ui.menu,name:sale.menu_invoicing_sales_order_lines
+msgid "Order Lines to Invoice"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,date_confirm:0
+msgid "Confirmation Date"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: view:sale.order.line:0
+#: view:sale.report:0
+msgid "Group By..."
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,address_allotment_id:0
+msgid "Allotment Partner"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_view_sale_advance_payment_inv
+msgid "Invoice Order"
+msgstr ""
+
+#. module: sale
+#: view:sale.config.settings:0
+msgid "Product Features"
+msgstr ""
+
+#. module: sale
+#: help:sale.config.settings,module_account_analytic_analysis:0
+msgid ""
+"Allows to define your customer contracts conditions: invoicing\n"
+" method (fixed price, on timesheet, advance invoice), the exact "
+"pricing\n"
+" (650€/day for a developer), the duration (one year support "
+"contract).\n"
+" You will be able to follow the progress of the contract and "
+"invoice automatically.\n"
+" It installs the account_analytic_analysis module."
+msgstr ""
+
+#. module: sale
+#: model:email.template,report_name:sale.email_template_edi_sale
+msgid ""
+"${(object.name or '').replace('/','_')}_${object.state == 'draft' and "
+"'draft' or ''}"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+#: field:sale.report,product_uom:0
+msgid "Unit of Measure"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,type:0
+msgid "Procurement Method"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,date_confirm:0
+msgid "Date on which sales order is confirmed."
+msgstr ""
+
+#. module: sale
+#: field:account.config.settings,module_sale_analytic_plans:0
+msgid "Use multiple analytic accounts on sales"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "March"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:565
+#, python-format
+msgid "First cancel all invoices attached to this sales order."
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Quotation Number"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: field:sale.order,message_unread:0
+msgid "Unread Messages"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,company_id:0
+#: field:sale.order.line,company_id:0
+#: view:sale.report:0
+#: field:sale.report,company_id:0
+#: field:sale.shop,company_id:0
+msgid "Company"
+msgstr ""
+
+#. module: sale
+#: field:sale.make.invoice,invoice_date:0
+msgid "Invoice Date"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_line_tree3
+msgid "Uninvoiced and Delivered Lines"
+msgstr ""
+
+#. module: sale
+#: model:mail.message.subtype,description:sale.mt_order_confirmed
+msgid "Quotation confirmed"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,state:0
+#: selection:sale.report,state:0
+msgid "Invoice Exception"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Quotation "
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,state:0
+msgid "Draft Quotation"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,partner_shipping_id:0
+msgid "Delivery Address"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,analytic_account_id:0
+#: field:sale.shop,project_id:0
+msgid "Analytic Account"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,module_sale_journal:0
+msgid "Allow batch invoicing of delivery orders through journals"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,price_subtotal:0
+msgid "Subtotal"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,day:0
+msgid "Day"
+msgstr ""
+
+#. module: sale
+#: model:process.transition.action,name:sale.process_transition_action_cancelorder0
+#: view:sale.order:0
+msgid "Cancel Order"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,th_weight:0
+msgid "Weight"
+msgstr ""
+
+#. module: sale
+#: view:sale.config.settings:0
+msgid "Warehouse Features"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,time_unit:0
+msgid "The default working time unit for services is"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,product_uom:0
+msgid "Unit of Measure "
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:101
+#, python-format
+msgid "Incorrect Data"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:102
+#, python-format
+msgid "The value of Advance Amount must be positive."
+msgstr ""
+
+#. module: sale
+#: help:sale.config.settings,group_discount_per_so_line:0
+msgid "Allows you to apply some discount per sales order line."
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Sales Order Lines that are in 'done' state"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order.line,type:0
+msgid "on order"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,message_ids:0
+msgid "Messages"
+msgstr ""
+
+#. module: sale
+#: field:sale.report,state:0
+msgid "Order Status"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,amount_tax:0
+#: field:sale.order.line,tax_id:0
+msgid "Taxes"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,amount_untaxed:0
+msgid "Untaxed Amount"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,module_project:0
+msgid "Project"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:185
+#: code:addons/sale/sale.py:363
+#: code:addons/sale/sale.py:504
+#: code:addons/sale/sale.py:598
+#: code:addons/sale/sale.py:763
+#: code:addons/sale/sale.py:780
+#, python-format
+msgid "Error!"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Net Total :"
+msgstr ""
+
+#. module: sale
+#: help:sale.order.line,type:0
+msgid ""
+"From stock: When needed, the product is taken from the stock or we wait for "
+"replenishment.\n"
+"On order: When needed, the product is purchased or produced."
+msgstr ""
+
+#. module: sale
+#: help:sale.config.settings,module_analytic_user_function:0
+msgid ""
+"Allows you to define what is the default function of a specific user on a "
+"given account.\n"
+" This is mostly used when a user encodes his timesheet. The "
+"values are retrieved and the fields are auto-filled.\n"
+" But the possibility to change these values is still "
+"available.\n"
+" This installs the module analytic_user_function."
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,state:0
+#: selection:sale.order.line,state:0
+#: selection:sale.report,state:0
+msgid "Cancelled"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Sales Order Lines related to a Sales Order of mine"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,state:0
+msgid "Quotation Sent"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_mail_compose_message
+msgid "Email composition wizard"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,message_unread:0
+msgid "If checked new messages require your attention."
+msgstr "sale"
+
+#. module: sale
+#: selection:sale.order,state:0
+#: selection:sale.report,state:0
+msgid "Shipping Exception"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,product_uos_qty:0
+msgid "Quantity (UoS)"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_shop_form
+#: field:sale.order,shop_id:0
+#: view:sale.report:0
+#: field:sale.report,shop_id:0
+msgid "Shop"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_orders_exception
+msgid "Sales in Exception"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,partner_invoice_id:0
+msgid "Invoice Address"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,create_date:0
+msgid "Date on which sales order is created."
+msgstr ""
+
+#. module: sale
+#: view:res.partner:0
+msgid "False"
+msgstr ""
+
+#. module: sale
+#: help:sale.advance.payment.inv,advance_payment_method:0
+msgid ""
+"Use All to create the final invoice.\n"
+" Use Percentage to invoice a percentage of the total amount.\n"
+" Use Fixed Price to invoice a specific amound in advance.\n"
+" Use Some Order Lines to invoice a selection of the sales "
+"order lines."
+msgstr ""
+
+#. module: sale
+#: view:sale.make.invoice:0
+#: view:sale.order.line.make.invoice:0
+msgid "Create Invoices"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Tax"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:277
+#: code:addons/sale/sale.py:820
+#: code:addons/sale/sale.py:983
+#, python-format
+msgid "Invalid Action!"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,state:0
+msgid ""
+"Gives the status of the quotation or sales order. \n"
+"The exception status is automatically set when a cancel operation occurs "
+" in the invoice validation (Invoice Exception) or in the picking "
+"list process (Shipping Exception).\n"
+"The 'Waiting Schedule' status is set when the invoice is confirmed "
+" but waiting for the scheduler to run on the order date."
+msgstr ""
+
+#. module: sale
+#: field:sale.report,date_confirm:0
+msgid "Date Confirm"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,nbr:0
+msgid "# of Lines"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,message_summary:0
+msgid ""
+"Holds the Chatter summary (number of messages, ...). This summary is "
+"directly in html format in order to be inserted in kanban views."
+msgstr ""
+
+#. module: sale
+#: help:sale.order.line,sequence:0
+msgid "Gives the sequence order when displaying a list of sales order lines."
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,product_uom_qty:0
+msgid "# of Qty"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Fax :"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:277
+#, python-format
+msgid ""
+"In order to delete a confirmed sales order, you must cancel it before !"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "(update)"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_res_partner
+#: view:sale.report:0
+#: field:sale.report,partner_id:0
+msgid "Partner"
+msgstr ""
+
+#. module: sale
+#: view:sale.config.settings:0
+msgid "Contract Features"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:287
+#: code:addons/sale/sale.py:584
+#: model:ir.model,name:sale.model_sale_order
+#: model:process.node,name:sale.process_node_order0
+#: model:process.node,name:sale.process_node_saleorder0
+#: field:res.partner,sale_order_ids:0
+#: model:res.request.link,name:sale.req_link_sale_order
+#: view:sale.order:0
+#: selection:sale.order,state:0
+#, python-format
+msgid "Sales Order"
+msgstr ""
+
+#. module: sale
+#: model:res.groups,name:sale.group_invoice_so_lines
+msgid "Enable Invoicing Sales order lines"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_order_line
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: sale
+#: field:sale.advance.payment.inv,amount:0
+msgid "Advance Amount"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,invoice_exists:0
+msgid "It indicates that sales order has at least one invoice."
+msgstr ""
+
+#. module: sale
+#: help:sale.config.settings,group_sale_pricelist:0
+msgid ""
+"Allows to manage different prices based on rules per category of customers.\n"
+"Example: 10% for retailers, promotion of 5 EUR on this product, etc."
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,module_analytic_user_function:0
+msgid "One employee can have different roles per contract"
+msgstr ""
+
+#. module: sale
+#: selection:sale.advance.payment.inv,advance_payment_method:0
+msgid "Invoice the whole sales order"
+msgstr ""
+
+#. module: sale
+#: field:sale.shop,payment_default_id:0
+msgid "Default Payment Term"
+msgstr ""
+
+#. module: sale
+#: model:process.transition.action,name:sale.process_transition_action_confirm0
+msgid "Confirm"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,timesheet:0
+msgid "Prepare invoices based on timesheets"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:820
+#, python-format
+msgid "You cannot cancel a sales order line that has already been invoiced."
+msgstr ""
+
+#. module: sale
+#: view:account.invoice.report:0
+#: view:board.board:0
+#: model:ir.actions.act_window,name:sale.action_turnover_by_month
+msgid "Monthly Turnover"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,invoice_quantity:0
+msgid "Shipped Quantities"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,year:0
+msgid "Year"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,group_uom:0
+msgid "Allow using different units of measures"
+msgstr ""
+
+#. module: sale
+#: model:mail.message.subtype,name:sale.mt_order_confirmed
+msgid "Sales Order Confirmed"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Sales Order that haven't yet been confirmed"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Print"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Order N°"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: field:sale.order,order_line:0
+msgid "Order Lines"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Disc.(%)"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:764
+#, python-format
+msgid "Please define income account for this product: \"%s\" (id:%d)."
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,invoice_lines:0
+msgid "Invoice Lines"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,price_total:0
+msgid "Total Price"
+msgstr ""
+
+#. module: sale
+#: help:account.config.settings,group_analytic_account_for_sales:0
+msgid "Allows you to specify an analytic account on sales orders."
+msgstr ""
+
+#. module: sale
+#: help:sale.config.settings,module_sale_journal:0
+msgid ""
+"Allows you to categorize your sales and deliveries (picking lists) between "
+"different journals,\n"
+" and perform batch operations on journals.\n"
+" This installs the module sale_journal."
+msgstr ""
+
+#. module: sale
+#: help:sale.make.invoice,grouped:0
+msgid "Check the box to group the invoices for the same customers"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_sale_order_make_invoice
+#: model:ir.actions.act_window,name:sale.action_view_sale_order_line_make_invoice
+msgid "Make Invoices"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/res_config.py:97
+#, python-format
+msgid "Hour"
+msgstr ""
+
+#. module: sale
+#: field:res.partner,sale_order_count:0
+msgid "# of Sales Order"
+msgstr ""
+
+#. module: sale
+#: help:sale.config.settings,timesheet:0
+msgid ""
+"For modifying account analytic view to show important data to project "
+"manager of services companies.\n"
+" You can also view the report of account analytic summary "
+"user-wise as well as month wise.\n"
+" This installs the module account_analytic_analysis."
+msgstr ""
+
+#. module: sale
+#: field:sale.order,create_date:0
+msgid "Creation Date"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: view:sale.order.line:0
+msgid "To Invoice"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,partner_invoice_id:0
+msgid "Invoice address for current sales order."
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,invoice_quantity:0
+msgid "Ordered Quantities"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid "Ordered Year of the sales order"
+msgstr ""
+
+#. module: sale
+#: model:res.groups,name:sale.group_delivery_invoice_address
+msgid "Addresses in Sales Orders"
+msgstr ""
+
+#. module: sale
+#: field:sale.advance.payment.inv,qtty:0
+#: report:sale.order:0
+#: field:sale.order.line,product_uom_qty:0
+msgid "Quantity"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Total :"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Sales Order Lines ready to be invoiced"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid "My Sales"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,name:0
+#: field:sale.order.line,order_id:0
+msgid "Order Reference"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,fiscal_position:0
+msgid "Fiscal Position"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "July"
+msgstr ""
+
+#. module: sale
+#: help:sale.order.line,state:0
+msgid ""
+"* The 'Draft' status is set when the related sales order in draft status. "
+" \n"
+"* The 'Confirmed' status is set when the related sales order is confirmed. "
+" \n"
+"* The 'Exception' status is set when the related sales order is set as "
+"exception. \n"
+"* The 'Done' status is set when the sales order line has been picked. "
+" \n"
+"* The 'Cancelled' status is set when a user cancel the sales order related."
+msgstr ""
+
+#. module: sale
+#: view:sale.config.settings:0
+msgid "Default Options"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:960
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:91
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:95
+#, python-format
+msgid "Configuration Error!"
+msgstr ""
+
+#. module: sale
+#: field:account.config.settings,group_analytic_account_for_sales:0
+msgid "Analytic accounting for sales"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: field:sale.order,state:0
+#: view:sale.order.line:0
+#: field:sale.order.line,state:0
+#: view:sale.report:0
+msgid "Status"
+msgstr ""
+
+#. module: sale
+#: view:sale.advance.payment.inv:0
+msgid ""
+"After clicking 'Show Lines to Invoice', select lines to invoice and create "
+"the invoice from the 'More' dropdown menu."
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Send by Email"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/edi/sale_order.py:140
+#, python-format
+msgid "EDI Pricelist (%s)"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,order_policy:0
+msgid "On Delivery Order"
+msgstr ""
+
+#. module: sale
+#: view:sale.config.settings:0
+msgid "Invoicing Process"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Order Date"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Sales Order done"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:364
+#, python-format
+msgid "Please define sales journal for this company: \"%s\" (id:%d)."
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.act_res_partner_2_sale_order
+#: view:res.partner:0
+msgid "Quotations and Sales"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,invoiced:0
+msgid "Paid"
+msgstr ""
+
+#. module: sale
+#: help:sale.config.settings,group_uom:0
+msgid ""
+"Allows you to select and maintain different units of measure for products."
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid "Reference Unit of Measure"
+msgstr ""
+
+#. module: sale
+#: view:sale.advance.payment.inv:0
+msgid "Create and View Invoice"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Sales order lines done"
+msgstr ""
+
+#. module: sale
+#: field:sale.make.invoice,grouped:0
+msgid "Group the invoices"
+msgstr ""
+
+#. module: sale
+#: help:sale.advance.payment.inv,amount:0
+msgid "The amount to be invoiced in advance."
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_make_invoice
+msgid "Sales Make Invoice"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:307
+#, python-format
+msgid "Pricelist Warning!"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,discount:0
+msgid "Discount (%)"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_line_invoice.py:107
+#, python-format
+msgid ""
+"Invoice cannot be created for this Sales Order Line due to one of the "
+"following reasons:\n"
+"1.The state of this sales order line is either \"draft\" or \"cancel\"!\n"
+"2.The Sales Order Line is Invoiced!"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line.make.invoice:0
+msgid "Create & View Invoice"
+msgstr ""
+
+#. module: sale
+#: view:board.board:0
+#: model:ir.actions.act_window,name:sale.action_quotation_for_sale
+msgid "My Quotations"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,invoice_ids:0
+msgid "Invoices"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "December"
+msgstr ""
+
+#. module: sale
+#: view:sale.config.settings:0
+msgid "Contracts Management"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Shipped"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,month:0
+msgid "Month"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,currency_id:0
+msgid "Currency"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Uninvoiced"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,categ_id:0
+msgid "Category of Product"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:564
+#, python-format
+msgid "Cannot cancel this sales order!"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Recreate Invoice"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,module_warning:0
+msgid "Allow configuring alerts by customer or products"
+msgstr ""
+
+#. module: sale
+#: field:sale.shop,name:0
+msgid "Shop Name"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "My Sales Orders"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Taxes :"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,invoice_exists:0
+#: field:sale.order.line,invoiced:0
+msgid "Invoiced"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:202
+#, python-format
+msgid "Advance Invoice"
+msgstr ""
+
+#. module: sale
+#: help:sale.config.settings,group_invoice_so_lines:0
+msgid ""
+"To allow your salesman to make invoices for sales order lines using the menu "
+"'Lines to Invoice'."
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.client,name:sale.action_client_sale_menu
+msgid "Open Sale Menu"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:598
+#, python-format
+msgid "You cannot confirm a sales order which has no line."
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,state:0
+msgid "In Progress"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:865
+#, python-format
+msgid "No Customer Defined !"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,module_sale_stock:0
+msgid "Trigger delivery orders automatically from sales orders"
+msgstr ""
+
+#. module: sale
+#: view:sale.make.invoice:0
+#: view:sale.order.line.make.invoice:0
+msgid "Create invoices"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order.line,state:0
+msgid "Confirmed"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:106
+#, python-format
+msgid "Advance of %s %%"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_order_line_make_invoice
+msgid "Sale OrderLine Make_invoice"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order.line,state:0
+msgid "Draft"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_email_templates
+msgid "Email Templates"
+msgstr ""
+
+#. module: sale
+#: help:sale.order.line,address_allotment_id:0
+msgid "A partner to whom the particular product needs to be allotted."
+msgstr ""
+
+#. module: sale
+#: field:sale.order,project_id:0
+msgid "Contract / Analytic"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,state:0
+#: selection:sale.report,state:0
+msgid "Waiting Schedule"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,note:0
+msgid "Terms and conditions"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_orders
+#: model:ir.ui.menu,name:sale.menu_sale_order
+#: view:sale.order:0
+msgid "Sales Orders"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,amount_tax:0
+msgid "The tax amount."
+msgstr ""
+
+#. module: sale
+#: field:sale.order,invoiced_rate:0
+msgid "Invoiced Ratio"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,order_policy:0
+msgid "On Demand"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "August"
+msgstr ""
+
+#. module: sale
+#: model:process.node,note:sale.process_node_saleorder0
+msgid "Drives procurement and invoicing"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "To Do"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "June"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,help:sale.action_shop_form
+msgid ""
+"
\n"
+" Click to define a new sale shop.\n"
+"
\n"
+" Each quotation or sales order must be linked to a shop. The\n"
+" shop also defines the warehouse from which the products will "
+"be\n"
+" delivered for each particular sales.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Order"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_report_all
+#: model:ir.ui.menu,name:sale.menu_report_product_all
+#: view:sale.report:0
+msgid "Sales Analysis"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,message_is_follower:0
+msgid "Is a Follower"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid ""
+"Sales Order Lines that are confirmed, done or in exception state and haven't "
+"yet been invoiced"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_report
+msgid "Sales Orders Statistics"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,date_order:0
+msgid "Date"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+#: view:sale.order:0
+#: field:sale.order,user_id:0
+#: view:sale.order.line:0
+#: field:sale.order.line,salesman_id:0
+#: view:sale.report:0
+#: field:sale.report,user_id:0
+msgid "Salesperson"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "November"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid "Extended Filters..."
+msgstr ""
+
+#. module: sale
+#: model:process.node,name:sale.process_node_quotation0
+#: view:sale.order:0
+#: selection:sale.report,state:0
+msgid "Quotation"
+msgstr ""
+
+#. module: sale
+#: field:sale.advance.payment.inv,product_id:0
+msgid "Advance Product"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order.line,state:0
+msgid "Exception"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "October"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,note:sale.process_transition_invoice0
+msgid ""
+"The Salesman creates an invoice manually, if the sales order shipping policy "
+"is 'Shipping and Manual in Progress'. The invoice is created automatically "
+"if the shipping policy is 'Payment before Delivery'."
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_shop
+#: view:sale.shop:0
+msgid "Sales Shop"
+msgstr ""
+
+#. module: sale
+#: help:sale.config.settings,module_sale_stock:0
+msgid ""
+"Allows you to Make Quotation, Sale Order using different Order policy and "
+"Manage Related Stock.\n"
+" This installs the module sale_stock."
+msgstr ""
+
+#. module: sale
+#: help:sale.advance.payment.inv,product_id:0
+msgid ""
+"Select a product of type service which is called 'Advance Product'.\n"
+" You may have to create it and set it as a default value on "
+"this field."
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "January"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,group_discount_per_so_line:0
+msgid "Allow setting a discount on the sales order lines"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_orders_in_progress
+msgid "Sales Order in Progress"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line.make.invoice:0
+msgid ""
+"All items in these order lines will be invoiced. You can also invoice a "
+"percentage of the sales order\n"
+" or a fixed price (for advances) directly from the sales "
+"order form if you prefer."
+msgstr ""
+
+#. module: sale
+#: help:sale.config.settings,module_warning:0
+msgid ""
+"Allow to configure notification on products and trigger them when a user "
+"wants to sale a given product or a given customer.\n"
+"Example: Product: this product is deprecated, do not purchase more than 5.\n"
+" Supplier: don't forget to ask for an express delivery."
+msgstr ""
+
+#. module: sale
+#: field:sale.order,paypal_url:0
+msgid "Paypal Url"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,project_id:0
+msgid "The analytic account related to a sales order."
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "View Invoice"
+msgstr ""
+
+#. module: sale
+#: field:sale.advance.payment.inv,advance_payment_method:0
+msgid "What do you want to invoice?"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,group_sale_pricelist:0
+msgid "Use pricelists to adapt your price per customers"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,note:sale.process_transition_confirmquotation0
+msgid ""
+"The salesman confirms the quotation. The state of the sales order becomes "
+"'In progress' or 'Manual in progress'."
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:942
+#, python-format
+msgid ""
+"You have to select a pricelist or a customer in the sales form !\n"
+"Please set one before choosing a product."
+msgstr ""
+
+#. module: sale
+#: help:sale.order,origin:0
+msgid "Reference of the document that generated this sales order request."
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:955
+#, python-format
+msgid "No valid pricelist line found ! :"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:113
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:115
+#, python-format
+msgid "Advance of %s %s"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+#: field:sale.report,delay:0
+msgid "Commitment Delay"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_quotations
+#: model:ir.ui.menu,name:sale.menu_sale_quotations
+#: view:sale.order:0
+#: view:sale.report:0
+msgid "Quotations"
+msgstr ""
+
+#. module: sale
+#: help:account.config.settings,module_sale_analytic_plans:0
+msgid "This allows install module sale_analytic_plans."
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Ignore Exception"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,partner_shipping_id:0
+msgid "Delivery address for current sales order."
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,module_sale_margin:0
+msgid "Display margins on sales orders"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,invoice_ids:0
+msgid ""
+"This is the list of invoices that have been generated for this sales order. "
+"The same sales order may have been invoiced in several times (by line for "
+"example)."
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Your Reference"
+msgstr ""
+
+#. module: sale
+#: view:sale.advance.payment.inv:0
+msgid "Show Lines to Invoice"
+msgstr ""
+
+#. module: sale
+#: field:sale.report,date:0
+msgid "Date Order"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,pricelist_id:0
+#: field:sale.report,pricelist_id:0
+#: field:sale.shop,pricelist_id:0
+msgid "Pricelist"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "TVA :"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:444
+#, python-format
+msgid "Customer Invoices"
+msgstr ""
+
+#. module: sale
+#: model:process.node,note:sale.process_node_order0
+msgid "Confirmed sales order to invoice."
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,sequence:0
+msgid "Sequence"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.open_board_sales
+#: model:ir.ui.menu,name:sale.menu_dashboard_sales
+#: model:process.process,name:sale.process_process_salesprocess0
+#: view:res.partner:0
+#: view:sale.order:0
+#: view:sale.report:0
+msgid "Sales"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:308
+#, python-format
+msgid ""
+"If you change the pricelist of this order (and eventually the currency), "
+"prices of existing order lines will not be updated."
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Qty"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order.line,type:0
+msgid "from stock"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Quotation Date"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,amount_total:0
+#: view:sale.order.line:0
+msgid "Total"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: selection:sale.order,state:0
+#: view:sale.order.line:0
+#: selection:sale.order.line,state:0
+#: selection:sale.report,state:0
+msgid "Done"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Invoice address :"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_line_invoice.py:121
+#: model:ir.model,name:sale.model_account_invoice
+#: model:process.node,name:sale.process_node_invoice0
+#: view:sale.order:0
+#, python-format
+msgid "Invoice"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "My Sales Order Lines"
+msgstr ""
+
+#. module: sale
+#: model:process.transition.action,name:sale.process_transition_action_cancel0
+#: view:sale.advance.payment.inv:0
+#: view:sale.make.invoice:0
+#: view:sale.order.line.make.invoice:0
+msgid "Cancel"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,message_follower_ids:0
+msgid "Followers"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:944
+#, python-format
+msgid "No Pricelist ! : "
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Sales Order "
+msgstr ""
+
+#. module: sale
+#: model:mail.message.subtype,description:sale.mt_order_sent
+#: model:mail.message.subtype,name:sale.mt_order_sent
+msgid "Quotation send"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Search Uninvoiced Lines"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_account_config_settings
+msgid "account.config.settings"
+msgstr ""
+
+#. module: sale
+#: sql_constraint:sale.order:0
+msgid "Order Reference must be unique per Company!"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,help:sale.action_order_line_tree2
+msgid ""
+"
\n"
+" Here is a list of each sales order line to be invoiced. You "
+"can\n"
+" invoice sales orders partially, by lines of sales order. You "
+"do\n"
+" not need this list if you invoice from the delivery orders "
+"or\n"
+" if you invoice sales totally.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Shipping address :"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:505
+#, python-format
+msgid ""
+"You cannot group sales having different currencies for the same partner."
+msgstr ""
+
+#. module: sale
+#: view:sale.advance.payment.inv:0
+msgid "Invoice Sales Order"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,invoice_quantity:0
+msgid ""
+"The sales order will automatically create the invoice proposition (draft "
+"invoice). You have to choose "
+"if you want your invoice based on ordered "
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,module_account_analytic_analysis:0
+msgid "Use contracts management"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:952
+#, python-format
+msgid ""
+"Cannot find a pricelist line matching this product and quantity.\n"
+"You have to change either the product, the quantity or the pricelist."
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_advance_payment_inv
+msgid "Sales Advance Payment Invoice"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,name:sale.process_transition_invoice0
+#: model:process.transition.action,name:sale.process_transition_action_createinvoice0
+#: view:sale.advance.payment.inv:0
+#: view:sale.order:0
+#: field:sale.order,order_policy:0
+#: view:sale.order.line:0
+msgid "Create Invoice"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,amount_untaxed:0
+msgid "The amount without tax."
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Order reference"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,invoiced:0
+msgid "It indicates that an invoice has been paid."
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+#: field:sale.order.line,price_unit:0
+msgid "Unit Price"
+msgstr ""
+
+#. module: sale
+#: selection:sale.advance.payment.inv,advance_payment_method:0
+msgid "Percentage"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Other Information"
+msgstr ""
+
+#. module: sale
+#: model:email.template,body_html:sale.email_template_edi_sale
+msgid ""
+"\n"
+"
\n"
+"\n"
+"
Hello ${object.partner_id.name},
\n"
+" \n"
+"
Here is your ${object.state in ('draft', 'sent') and 'quotation' or "
+"'order confirmation'} from ${object.company_id.name}:
\n"
+"\n"
+"
\n"
+" REFERENCES \n"
+" Order number: ${object.name} \n"
+" Order total: ${object.amount_total} "
+"${object.pricelist_id.currency_id.name} \n"
+" Order date: ${object.date_order} \n"
+" % if object.origin:\n"
+" Order reference: ${object.origin} \n"
+" % endif\n"
+" % if object.client_order_ref:\n"
+" Your reference: ${object.client_order_ref} \n"
+" % endif\n"
+" % if object.user_id:\n"
+" Your contact: ${object.user_id.name}\n"
+" % endif\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+#: field:sale.order.line,product_id:0
+#: view:sale.report:0
+#: field:sale.report,product_id:0
+msgid "Product"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,amount_total:0
+msgid "The total amount."
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Confirm Sale"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_make_invoice_advance.py:96
+#, python-format
+msgid "There is no income account defined for this product: \"%s\" (id:%d)."
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "May"
+msgstr ""
+
+#. module: sale
+#: model:email.template,subject:sale.email_template_edi_sale
+msgid ""
+"${object.company_id.name} ${object.state in ('draft', 'sent') and "
+"'Quotation' or 'Order'} (Ref ${object.name or 'n/a' })"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Price"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,order_policy:0
+msgid ""
+"On demand: A draft invoice can be created from the sales order when needed. "
+"\n"
+"On delivery order: A draft invoice can be created from the delivery order "
+"when the products have been delivered. \n"
+"Before delivery: A draft invoice is created from the sales order and must be "
+"paid before the products can be delivered."
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,help:sale.action_order_report_all
+msgid ""
+"This report performs analysis on your quotations and sales orders. Analysis "
+"check your sales revenues and sort it by different group criteria (salesman, "
+"partner, product, etc.) Use this report to perform analysis on sales not "
+"having invoiced yet. If you want to analyse your turnover, you should use "
+"the Invoice Analysis report in the Accounting application."
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.report.xml,name:sale.report_sale_order
+msgid "Quotation / Order"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Tel. :"
+msgstr ""
+
+#. module: sale
+#: view:sale.make.invoice:0
+msgid "Do you really want to create the invoice(s)?"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,help:sale.action_quotations
+msgid ""
+"
\n"
+" Click to create a quotation, the first step of a new sale.\n"
+"
\n"
+" OpenERP will help you handle efficiently the complete sale "
+"flow:\n"
+" from the quotation to the sales order, the\n"
+" delivery, the invoicing and the payment collection.\n"
+"
\n"
+" The social feature helps you organize discussions on each "
+"sales\n"
+" order, and allow your customers to keep track of the "
+"evolution\n"
+" of the sales order.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: sale
+#: view:res.partner:0
+msgid "sale.group_delivery_invoice_address"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:781
+#, python-format
+msgid ""
+"There is no Fiscal Position defined or Income category account defined for "
+"default properties of Product categories."
+msgstr ""
+
+#. module: sale
+#: model:process.node,note:sale.process_node_invoice0
+msgid "To be reviewed by the accountant."
+msgstr ""
+
+#. module: sale
+#: model:res.groups,name:sale.group_mrp_properties
+msgid "Properties on lines"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,state:0
+msgid "Sale to Invoice"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Order Number"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: field:sale.order,partner_id:0
+#: field:sale.order.line,order_partner_id:0
+msgid "Customer"
+msgstr ""
+
+#. module: sale
+#: model:product.template,name:sale.advance_product_0_product_template
+msgid "Advance"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "February"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,help:sale.action_orders
+msgid ""
+"
\n"
+" Click to create a quotation that can be converted into a "
+"sales\n"
+" order.\n"
+"
\n"
+" OpenERP will help you efficiently handle the complete sales "
+"flow:\n"
+" quotation, sales order, delivery, invoicing and payment.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: sale
+#: field:sale.order,invoice_quantity:0
+msgid "Invoice on"
+msgstr ""
+
+#. module: sale
+#: selection:sale.advance.payment.inv,advance_payment_method:0
+msgid "Fixed price (deposit)"
+msgstr ""
+
+#. module: sale
+#: model:ir.model,name:sale.model_sale_config_settings
+msgid "sale.config.settings"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "September"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Date Ordered"
+msgstr ""
+
+#. module: sale
+#: selection:sale.order,order_policy:0
+msgid "Before Delivery"
+msgstr ""
+
+#. module: sale
+#: field:sale.order.line,product_uos:0
+msgid "Product UoS"
+msgstr ""
+
+#. module: sale
+#: model:process.node,note:sale.process_node_quotation0
+msgid "Draft state of sales order"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,origin:0
+msgid "Source Document"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,month:0
+msgid "April"
+msgstr ""
+
+#. module: sale
+#: selection:sale.report,state:0
+msgid "Manual In Progress"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/wizard/sale_line_invoice.py:107
+#: code:addons/sale/wizard/sale_make_invoice.py:42
+#: code:addons/sale/wizard/sale_make_invoice.py:55
+#, python-format
+msgid "Warning!"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_tree
+msgid "Old Quotations"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,help:sale.act_res_partner_2_sale_order
+msgid ""
+"
\n"
+" Click to create a quotation or sales order for this "
+"customer.\n"
+"
\n"
+" OpenERP will help you efficiently handle the complete sale "
+"flow:\n"
+" quotation, sales order, delivery, invoicing and\n"
+" payment.\n"
+"
\n"
+" The social feature helps you organize discussions on each "
+"sales\n"
+" order, and allow your customer to keep track of the "
+"evolution\n"
+" of the sales order.\n"
+"
\n"
+" "
+msgstr ""
+
+#. module: sale
+#: field:sale.order,message_summary:0
+msgid "Summary"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,message_ids:0
+msgid "Messages and communication history"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+#: view:sale.order.line:0
+msgid "Search Sales Order"
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+#: field:sale.order.line,name:0
+msgid "Description"
+msgstr ""
+
+#. module: sale
+#: view:sale.config.settings:0
+msgid ""
+"Use contract to be able to manage your services with\n"
+" multiple invoicing as part of the same contract "
+"with\n"
+" your customer."
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid "Ordered month of the sales order"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,name:sale.process_transition_saleinvoice0
+msgid "From a sales order"
+msgstr ""
+
+#. module: sale
+#: view:sale.order.line:0
+msgid "Confirmed sales order lines, not yet delivered"
+msgstr ""
+
+#. module: sale
+#: model:process.transition,note:sale.process_transition_saleinvoice0
+msgid ""
+"Depending on the Invoicing control of the sales order, the invoice can be "
+"based on delivered or on ordered quantities. Thus, a sales order can "
+"generates an invoice or a delivery order as soon as it is confirmed by the "
+"salesman."
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "UoS"
+msgstr ""
+
+#. module: sale
+#: selection:sale.advance.payment.inv,advance_payment_method:0
+msgid "Some order lines"
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:983
+#, python-format
+msgid "Cannot delete a sales order line which is in state '%s'."
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+#: field:sale.order,payment_term:0
+msgid "Payment Term"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Sales Order ready to be invoiced"
+msgstr ""
+
+#. module: sale
+#: field:sale.config.settings,group_invoice_so_lines:0
+msgid "Generate invoices based on the sales order lines"
+msgstr ""
+
+#. module: sale
+#: view:sale.advance.payment.inv:0
+#: view:sale.make.invoice:0
+#: view:sale.order.line.make.invoice:0
+msgid "or"
+msgstr ""
+
+#. module: sale
+#: model:ir.actions.act_window,name:sale.action_order_line_product_tree
+#: view:sale.order:0
+#: view:sale.order.line:0
+msgid "Sales Order Lines"
+msgstr ""
+
+#. module: sale
+#: help:sale.order,pricelist_id:0
+msgid "Pricelist for current sales order."
+msgstr ""
+
+#. module: sale
+#: report:sale.order:0
+msgid "Quotation N°"
+msgstr ""
+
+#. module: sale
+#: model:res.groups,name:sale.group_discount_per_so_line
+msgid "Discount on lines"
+msgstr ""
+
+#. module: sale
+#: field:sale.order,client_order_ref:0
+msgid "Customer Reference"
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid "Picked"
+msgstr ""
+
+#. module: sale
+#: help:sale.config.settings,module_sale_margin:0
+msgid ""
+"This adds the 'Margin' on sales order.\n"
+" This gives the profitability by calculating the difference "
+"between the Unit Price and Cost Price.\n"
+" This installs the module sale_margin."
+msgstr ""
+
+#. module: sale
+#: code:addons/sale/sale.py:865
+#, python-format
+msgid ""
+"Before choosing a product,\n"
+" select a customer in the sales form."
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "Total Tax Included"
+msgstr ""
+
+#. module: sale
+#: view:sale.order:0
+msgid "New Copy of Quotation"
+msgstr ""
+
+#. module: sale
+#: view:sale.advance.payment.inv:0
+msgid ""
+"Select how you want to invoice this order. This\n"
+" will create a draft invoice that can be modified\n"
+" before validation."
+msgstr ""
+
+#. module: sale
+#: view:sale.report:0
+msgid "Ordered date of the sales order"
+msgstr ""
diff --git a/addons/website/__openerp__.py b/addons/website/__openerp__.py
index 50ccff88c73..d421357e996 100644
--- a/addons/website/__openerp__.py
+++ b/addons/website/__openerp__.py
@@ -12,14 +12,14 @@ OpenERP Website CMS
'depends': ['web', 'share'],
'installable': True,
'data': [
- 'views/views.xml',
+ 'data/website_data.xml',
+ 'security/ir.model.access.csv',
+ 'views/website_templates.xml',
+ 'views/website_views.xml',
'views/snippets.xml',
'views/themes.xml',
- 'website_data.xml',
- 'website_view.xml',
- 'security/ir.model.access.csv',
],
'demo': [
- 'website_demo.xml',
+ 'data/website_demo.xml',
]
}
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py
index 70a7e75afa4..baa6b6c780b 100644
--- a/addons/website/controllers/main.py
+++ b/addons/website/controllers/main.py
@@ -7,6 +7,7 @@ import json
import logging
import os
import datetime
+import re
from sys import maxint
@@ -17,7 +18,16 @@ import werkzeug.utils
import werkzeug.wrappers
from PIL import Image
+try:
+ from slugify import slugify
+except ImportError:
+ def slugify(s, max_length=None):
+ spaceless = re.sub(r'\s+', '-', s)
+ specialless = re.sub(r'[^-_a-z0-9]', '', spaceless)
+ return specialless[:max_length]
+
import openerp
+from openerp.osv import fields
from openerp.addons.website.models import website
from openerp.addons.web import http
from openerp.addons.web.http import request
@@ -48,12 +58,9 @@ class Website(openerp.addons.web.controllers.main.Home):
# FIXME: auth, if /pagenew known anybody can create new empty page
@website.route('/pagenew/', type='http', auth="admin")
def pagenew(self, path, noredirect=NOPE):
- if '.' in path:
- module, idname = path.split('.', 1)
- else:
- module = 'website'
- idname = path
- xid = "%s.%s" % (module, idname)
+ module = 'website'
+ # completely arbitrary max_length
+ idname = slugify(path, max_length=50)
request.cr.execute('SAVEPOINT pagenew')
imd = request.registry['ir.model.data']
@@ -65,8 +72,9 @@ class Website(openerp.addons.web.controllers.main.Home):
newview = view.browse(
request.cr, request.uid, newview_id, context=request.context)
newview.write({
- 'arch': newview.arch.replace("website.default_page", xid),
- 'name': "page/%s" % path,
+ 'arch': newview.arch.replace("website.default_page",
+ "%s.%s" % (module, idname)),
+ 'name': path,
'page': True,
})
# Fuck it, we're doing it live
@@ -79,10 +87,13 @@ class Website(openerp.addons.web.controllers.main.Home):
'noupdate': True
}, context=request.context)
except psycopg2.IntegrityError:
+ logger.exception('Unable to create ir_model_data for page %s', path)
request.cr.execute('ROLLBACK TO SAVEPOINT pagenew')
+ return werkzeug.exceptions.InternalServerError()
else:
request.cr.execute('RELEASE SAVEPOINT pagenew')
- url = "/page/%s" % path
+
+ url = "/page/%s" % idname
if noredirect is not NOPE:
return werkzeug.wrappers.Response(url, mimetype='text/plain')
return werkzeug.utils.redirect(url)
@@ -240,11 +251,16 @@ class Website(openerp.addons.web.controllers.main.Home):
def publish(self, id, object):
_id = int(id)
_object = request.registry[object]
-
obj = _object.browse(request.cr, request.uid, _id)
+
+ values = {}
+ if 'website_published' in _object._all_columns:
+ values['website_published'] = not obj.website_published
+ if 'website_published_datetime' in _object._all_columns and values.get('website_published'):
+ values['website_published_datetime'] = fields.datetime.now()
_object.write(request.cr, request.uid, [_id],
- {'website_published': not obj.website_published},
- context=request.context)
+ values, context=request.context)
+
obj = _object.browse(request.cr, request.uid, _id)
return obj.website_published and True or False
diff --git a/addons/website/website_data.xml b/addons/website/data/website_data.xml
similarity index 97%
rename from addons/website/website_data.xml
rename to addons/website/data/website_data.xml
index c53bb43cbe4..58891dfa323 100644
--- a/addons/website/website_data.xml
+++ b/addons/website/data/website_data.xml
@@ -39,14 +39,19 @@
/self
+
+ Website With Tutorial
+ /?tutorial=true
+ self
+
+
Website
-
-
+ open
diff --git a/addons/website/website_demo.xml b/addons/website/data/website_demo.xml
similarity index 100%
rename from addons/website/website_demo.xml
rename to addons/website/data/website_demo.xml
diff --git a/addons/website/models/__init__.py b/addons/website/models/__init__.py
index af592ba012c..23f91ffe9f6 100644
--- a/addons/website/models/__init__.py
+++ b/addons/website/models/__init__.py
@@ -1,7 +1,9 @@
# -*- coding: utf-8 -*-
-import view
+import ir_fields
+import ir_ui_view
import website
+import ir_rule
import ir_qweb
import test_models
diff --git a/addons/website/models/ir_rule.py b/addons/website/models/ir_rule.py
new file mode 100644
index 00000000000..dcb56795173
--- /dev/null
+++ b/addons/website/models/ir_rule.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+
+from openerp.osv import osv
+from openerp.addons.web.http import request
+from openerp.tools.misc import unquote as unquote
+
+
+class ir_rule(osv.osv):
+ _inherit = 'ir.rule'
+
+ def _eval_context_for_combinations(self):
+ """Returns a dictionary to use as evaluation context for
+ ir.rule domains, when the goal is to obtain python lists
+ that are easier to parse and combine, but not to
+ actually execute them."""
+ res = super(ir_rule, self)._eval_context_for_combinations()
+ res.update(session=unquote('session'))
+ return res
+
+ def _eval_context(self, cr, uid):
+ """Returns a dictionary to use as evaluation context for
+ ir.rule domains."""
+ res = super(ir_rule, self)._eval_context(cr, uid)
+ res.update(session=request and request.httprequest and request.httprequest.session)
+ return res
diff --git a/addons/website/models/view.py b/addons/website/models/ir_ui_view.py
similarity index 100%
rename from addons/website/models/view.py
rename to addons/website/models/ir_ui_view.py
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index c36ed829699..16d490019ce 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -66,10 +66,12 @@ def url_for(path, lang=None):
def urlplus(url, params):
if not params:
return url
- url += "?"
- for k,v in params.items():
- url += "%s=%s&" % (k, urllib.quote_plus(str(v)))
- return url
+
+ # can't use urlencode because it encodes to (ascii, replace) in p2
+ return "%s?%s" % (url, '&'.join(
+ k + '=' + urllib.quote_plus(v.encode('utf-8') if isinstance(v, unicode) else str(v))
+ for k, v in params.iteritems()
+ ))
class website(osv.osv):
_name = "website" # Avoid website.website convention for conciseness (for new api). Got a special authorization from xmo and rco
@@ -118,6 +120,7 @@ class website(osv.osv):
is_master_lang = lang == request.website.default_lang_id.code
request.context.update({
'lang': lang,
+ 'lang_selected': [lg for lg in request.website.language_ids if lg.code == lang],
'langs': [lg.code for lg in request.website.language_ids],
'multilang': request.multilang,
'is_public_user': is_public_user,
@@ -141,13 +144,12 @@ class website(osv.osv):
qweb_context.update(values)
qweb_context.update(
- request=request,
- registry=request.registry,
+ request=request, # TODO maybe rename to _request to mark this attribute as unsafe
json=simplejson,
website=request.website,
url_for=url_for,
res_company=request.website.company_id,
- user_id=user.browse(cr, openerp.SUPERUSER_ID, uid),
+ user_id=user.browse(cr, uid, uid),
)
context = request.context.copy()
@@ -347,3 +349,28 @@ class res_partner(osv.osv):
'q': '%s, %s %s, %s' % (partner.street, partner.city, partner.zip, partner.country_id and partner.country_id.name_get()[0][1] or ''),
}
return urlplus('https://maps.google.be/maps' , params)
+
+class base_language_install(osv.osv):
+ _inherit = "base.language.install"
+ _columns = {
+ 'website_ids': fields.many2many('website', string='Websites to translate'),
+ }
+
+ def lang_install(self, cr, uid, ids, context=None):
+ if context is None:
+ context = {}
+ action = super(base_language_install, self).lang_install(cr, uid, ids, context)
+ language_obj = self.browse(cr, uid, ids)[0]
+ website_ids = [website.id for website in language_obj['website_ids']]
+ lang_id = self.pool['res.lang'].search(cr, uid, [('code', '=', language_obj['lang'])])
+ if website_ids and lang_id:
+ data = {'language_ids': [(4, lang_id[0])]}
+ self.pool['website'].write(cr, uid, website_ids, data)
+ params = context.get('params', {})
+ if 'url_return' in params:
+ return {
+ 'url': params['url_return'].replace('[lang]', language_obj['lang']),
+ 'type': 'ir.actions.act_url',
+ 'target': 'self'
+ }
+ return action
diff --git a/addons/website/static/lib/bootstrap-tour/bootstrap-tour.css b/addons/website/static/lib/bootstrap-tour/bootstrap-tour.css
new file mode 100755
index 00000000000..72c6e8cbab7
--- /dev/null
+++ b/addons/website/static/lib/bootstrap-tour/bootstrap-tour.css
@@ -0,0 +1,43 @@
+.tour-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1009;
+ background-color: #000;
+ opacity: 0.8;
+}
+.tour-step-backdrop {
+ position: relative;
+ z-index: 1011;
+}
+.tour-step-background {
+ position: absolute;
+ z-index: 1010;
+ background: #fff;
+ border-radius: 6px;
+}
+.popover[class*="tour-"] .popover-navigation {
+ padding: 9px 14px;
+}
+.popover[class*="tour-"] .popover-navigation *[data-role=end] {
+ float: right;
+}
+.popover[class*="tour-"] .popover-navigation *[data-role=prev],
+.popover[class*="tour-"] .popover-navigation *[data-role=next],
+.popover[class*="tour-"] .popover-navigation *[data-role=end] {
+ cursor: pointer;
+}
+.popover[class*="tour-"] .popover-navigation *[data-role=prev].disabled,
+.popover[class*="tour-"] .popover-navigation *[data-role=next].disabled,
+.popover[class*="tour-"] .popover-navigation *[data-role=end].disabled {
+ cursor: default;
+}
+.popover[class*="tour-"].orphan {
+ position: fixed;
+ margin-top: 0;
+}
+.popover[class*="tour-"].orphan .arrow {
+ display: none;
+}
diff --git a/addons/website/static/lib/bootstrap-tour/bootstrap-tour.js b/addons/website/static/lib/bootstrap-tour/bootstrap-tour.js
new file mode 100755
index 00000000000..8b45d6da9ee
--- /dev/null
+++ b/addons/website/static/lib/bootstrap-tour/bootstrap-tour.js
@@ -0,0 +1,559 @@
+/* ===========================================================
+# bootstrap-tour - v0.6.1
+# http://bootstraptour.com
+# ==============================================================
+# Copyright 2012-2013 Ulrich Sossou
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+*/
+(function() {
+ (function($, window) {
+ var Tour, document;
+ document = window.document;
+ Tour = (function() {
+ function Tour(options) {
+ this._options = $.extend({
+ name: "tour",
+ container: "body",
+ keyboard: true,
+ storage: window.localStorage,
+ debug: false,
+ backdrop: false,
+ redirect: true,
+ orphan: false,
+ basePath: "",
+ template: "
-
-
+
+
+ Jobs
+ Job Announces
+
diff --git a/addons/website_blog/website_blog_demo.xml b/addons/website_blog/data/website_blog_demo.xml
similarity index 91%
rename from addons/website_blog/website_blog_demo.xml
rename to addons/website_blog/data/website_blog_demo.xml
index 3ddea7b6fd6..6c8a9620ce3 100644
--- a/addons/website_blog/website_blog_demo.xml
+++ b/addons/website_blog/data/website_blog_demo.xml
@@ -8,6 +8,12 @@
functional
+ technical
+
+
+ website
+
+ pos
@@ -16,6 +22,7 @@
OpenERP v8 New Features
+
@@ -264,6 +271,7 @@ Think of it as an out-of-the-box solution to boost your business' productivity.
Announcig a New Partnership
+
@@ -291,7 +299,7 @@ Think of it as an out-of-the-box solution to boost your business' productivity.
- Linked with Project Management
+ OpenERP Project Management
Infinitely flexible. Incredibly easy to use.
@@ -313,33 +321,6 @@ Think of it as an out-of-the-box solution to boost your business' productivity.
-
-
-
-
-
Work with the hardware you already have...
-
-
-
-
-
-
- No installation required
-
-
- OpenERP's Point of Sale introduces a super clean
- interface with no installation required that runs
- online and offline on modern hardware. Laptops,
- tablets, industrial POS, it runs on everything.
-
-
+
diff --git a/addons/website_customer/__init__.py b/addons/website_customer/__init__.py
new file mode 100644
index 00000000000..3a37b9285ec
--- /dev/null
+++ b/addons/website_customer/__init__.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2013-Today OpenERP S.A. ().
+#
+# 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 .
+#
+##############################################################################
+
+import controllers
diff --git a/addons/website_customer/__openerp__.py b/addons/website_customer/__openerp__.py
new file mode 100644
index 00000000000..934cfb775ab
--- /dev/null
+++ b/addons/website_customer/__openerp__.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2013-Today OpenERP S.A. ().
+#
+# 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': 'Public Customer References',
+ 'category': 'Website',
+ 'summary': 'Publish Customer References on your Website',
+ 'version': '1.0',
+ 'description': """
+OpenERP Customer References
+===========================
+""",
+ 'author': 'OpenERP SA',
+ 'depends': [
+ 'website_partner',
+ 'website_google_map'
+ ],
+ 'data': [
+ 'views/website_customer.xml',
+ ],
+ 'qweb': [],
+ 'installable': True,
+}
diff --git a/addons/website_contract/controllers/__init__.py b/addons/website_customer/controllers/__init__.py
similarity index 100%
rename from addons/website_contract/controllers/__init__.py
rename to addons/website_customer/controllers/__init__.py
diff --git a/addons/website_customer/controllers/main.py b/addons/website_customer/controllers/main.py
new file mode 100644
index 00000000000..1539c9587d9
--- /dev/null
+++ b/addons/website_customer/controllers/main.py
@@ -0,0 +1,98 @@
+# -*- coding: utf-8 -*-
+
+import openerp
+from openerp.addons.web import http
+from openerp.tools.translate import _
+from openerp.addons.web.http import request
+from openerp.addons.website.models import website
+import urllib
+
+
+class WebsiteCustomer(http.Controller):
+ _references_per_page = 20
+
+ @website.route([
+ '/customers/', '/customers/page//',
+ '/customers/country/', '/customers/country//page//'
+ ], type='http', auth="public")
+ def customers(self, country_id=None, page=0, **post):
+ cr, uid, context = request.cr, request.uid, request.context
+ partner_obj = request.registry['res.partner']
+ partner_name = post.get('search', '')
+
+ base_domain = [('customer', '=', True), ('is_company', '=', True)]
+ domain = list(base_domain)
+ if partner_name:
+ domain += [
+ '|',
+ ('name', 'ilike', "%%%s%%" % post.get("search")),
+ ('website_description', 'ilike', "%%%s%%" % post.get("search"))
+ ]
+ if country_id:
+ domain += [('country_id', '=', country_id)]
+
+ # group by country, based on all customers (base domain)
+ countries = partner_obj.read_group(
+ cr, uid, base_domain, ["id", "country_id"],
+ groupby="country_id", orderby="country_id", context=request.context)
+ country_count = partner_obj.search(
+ cr, uid, base_domain, count=True, context=request.context)
+ countries.insert(0, {
+ 'country_id_count': country_count,
+ 'country_id': (0, _("All Countries"))
+ })
+
+ # search customers to display
+ partner_ids = partner_obj.search(cr, uid, domain, context=request.context)
+ google_map_partner_ids = ",".join([str(p) for p in partner_ids])
+
+ # pager
+ pager = request.website.pager(
+ url="/customers/", total=len(partner_ids), page=page, step=self._references_per_page,
+ scope=7, url_args=post
+ )
+
+ # browse page of customers to display
+ partner_ids = partner_obj.search(
+ cr, uid, domain,
+ limit=self._references_per_page, offset=pager['offset'], context=context)
+ partners = partner_obj.browse(request.cr, openerp.SUPERUSER_ID,
+ partner_ids, request.context)
+
+ values = {
+ 'countries': countries,
+ 'current_country_id': country_id,
+ 'partner_ids': partners,
+ 'google_map_partner_ids': google_map_partner_ids,
+ 'pager': pager,
+ 'post': post,
+ 'search_path': "?%s" % urllib.urlencode(post),
+ }
+ return request.website.render("website_customer.index", values)
+
+ @website.route(['/customers//'], type='http', auth="public")
+ def customer(self, partner_id=None, **post):
+ """ Route for displaying a single partner / customer.
+
+ :param integer partner_id: partner to display. If not set or not valid
+ call basic references method.
+ """
+ partner_obj = request.registry['res.partner']
+ if request.context['is_public_user']:
+ partner_ids = partner_obj.search(
+ request.cr, openerp.SUPERUSER_ID, [
+ ('website_published', '=', True),
+ ('id', '=', partner_id)
+ ], context=request.context)
+ partner_id = partner_ids and partner_ids[0] or None
+
+ if not partner_id:
+ return self.references(post=post)
+
+ values = {
+ 'partner_id': partner_obj.browse(
+ request.cr, openerp.SUPERUSER_ID, partner_id,
+ dict(request.context, show_address=True)),
+ }
+
+ return request.website.render("website_customer.details", values)
diff --git a/addons/website_contract/views/website_contract.xml b/addons/website_customer/views/website_customer.xml
similarity index 52%
rename from addons/website_contract/views/website_contract.xml
rename to addons/website_customer/views/website_customer.xml
index 5038ce26e59..efc31d6f2a5 100644
--- a/addons/website_contract/views/website_contract.xml
+++ b/addons/website_customer/views/website_customer.xml
@@ -2,25 +2,22 @@
-
-
-
diff --git a/addons/website_customer_crm_partner_assign/__init__.py b/addons/website_customer_crm_partner_assign/__init__.py
new file mode 100644
index 00000000000..eecb359a225
--- /dev/null
+++ b/addons/website_customer_crm_partner_assign/__init__.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2013-Today OpenERP S.A. ().
+#
+# 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 .
+#
+##############################################################################
diff --git a/addons/website_customer_crm_partner_assign/__openerp__.py b/addons/website_customer_crm_partner_assign/__openerp__.py
new file mode 100644
index 00000000000..4dcddd5ea90
--- /dev/null
+++ b/addons/website_customer_crm_partner_assign/__openerp__.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+# OpenERP, Open Source Management Solution
+# Copyright (C) 2013-Today OpenERP S.A. ().
+#
+# 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': 'Public Customer References + Partner Assign',
+ 'category': 'Website',
+ 'summary': 'Add Partner Assignment Info to your Customer References',
+ 'version': '1.0',
+ 'description': """
+OpenERP Customer References + Partner Assign
+============================================
+""",
+ 'author': 'OpenERP SA',
+ 'depends': [
+ 'crm_partner_assign',
+ 'website_customer'
+ ],
+ 'data': [
+ 'views/website_customer.xml',
+ ],
+ 'qweb': [],
+ 'installable': True,
+ 'auto_install': True,
+}
diff --git a/addons/website_customer_crm_partner_assign/views/website_customer.xml b/addons/website_customer_crm_partner_assign/views/website_customer.xml
new file mode 100644
index 00000000000..b1949f5ccbc
--- /dev/null
+++ b/addons/website_customer_crm_partner_assign/views/website_customer.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+ Implemented by
+
+
+
+
+
+
+
+
+ references
+
+
+
+
+
+
+
+
+
The Bose® SoundLink® mini is Bose's smallest portable Bluetooth speaker. Its ultra-compact size fits in the
palm of your hand, yet gives you full, natural sound wirelessly from your iPhone, iPad, or iPod. Grab it and go
full-featured. It can do just about everything and
experience music just about anywhere.
+
+
+
+
Characteristics
+
+
+
+
Sleek, compact design
+
Efficient, high-quality audio
+
Remote control for power, volume, track seek
+
Auxiliary input for portable devices
+
Universal iPod docking station fits most iPod/iPhone models
+
Charges iPod/iPhone
+
Volume control on main system
+
+
+
+
-
+
@@ -82,7 +100,7 @@
-
+
Plays where you play
The SoundLink® Mini speaker is small and light enough
@@ -94,13 +112,13 @@
The rechargeable lithium-ion battery delivers up to seven hours of playtime.
And at home, you can listen even longer—the charging cradle lets
- you listen while it charges. An empty battery usually fully recharges in three hours.
+ you listen while it charges.
-
+
-
+
Bluetooth connectivity
The speaker has a range of about 30 feet, so you can enjoy
@@ -116,26 +134,26 @@
-
-
+
+
-
+
More features.
- Charging cradle recharges the battery and serves as a convenient
- home base for your speaker, and it lets you play while it charges
+ Charging cradle recharges the battery and serves as a convenient
+ home base for your speaker, and it lets you play while it charges.
- Wall charger can be plugged into the cradle or directly into the speaker
+ Wall charger can be plugged into the cradle or directly into the speaker
- Auxiliary port lets you connect other audio sources, like an MP3 player
+ Auxiliary port lets you connect other audio sources, like an MP3 player
- USB port allows for software update to ensure ongoing Bluetooth device compatibility
+ USB port allows for software update to ensure ongoing Bluetooth device compatibility
- Soft covers are available separately in blue, green or orange. Pick a color to match your style.
+ Soft covers are available separately in blue, green or orange. Pick a color to match your style.
@@ -176,13 +194,13 @@ iOS7
-
+
-
+
Beautiful 7.9‑inch display.
A screen worthy of iPad.
@@ -195,20 +213,20 @@ iOS7
-
+
-
+
Over 375,000 apps.
If it's made for iPad, it's made for iPad mini.
- Right from the start, apps made for iPad also work with iPad mini.
- They’re immersive, full-screen apps that let you do almost anything
- you can imagine. And with automatic updates,
- you're always getting the best experience possible.
+ Right from the start, apps made for iPad also work with iPad mini.
+ They’re immersive, full-screen apps that let you do almost anything
+ you can imagine. And with automatic updates,
+ you're always getting the best experience possible.
-
+
@@ -260,79 +278,54 @@ iOS7
- Technical Specifications:
-
-Frequency response: 5Hz to 21kHz
-Impedance (at 100Hz): 23 ohms
-Sensitivity (at 100Hz): 109 dB SPL/mW
-Drivers: Custom two-way balanced armature (woofer and tweeter in each earpiece)
-
-Length and weight:
-
-Cable length: 1065 mm from audio jack to splitter; 330 mm to earpiece
-Weight: 0.4 ounce (10.2 grams)
-
-Connector:
-
-Four-conductor 3.5-mm audio jack
+ Frequency: 5Hz to 21kHz
+Impedance: 23 ohms
+Sensitivity: 109 dB SPL/mW
+Drivers: two-way balanced armature
+Cable length: 1065 mm
+Weight: 0.4 ounce
-
+
-
-
Apple In-Ear Headphones
+
+
Two is better than one.
+
+ Unlike many small headphones, each earpiece of the Apple In-Ear Headphones
+ contains two separate high-performance drivers — a woofer to handle bass and
+ mid-range sounds and a tweeter for high-frequency audio. These dedicated
+ drivers help ensure accurate, detailed sound across the entire sonic spectrum.
+ The result: you’re immersed in the music and hear details you never knew existed.
+ Even when listening to an old favorite, you may feel like you’re hearing it for the first time.
+
-
-
-
Turns out you haven’t heard everything.
-
- The Apple In-Ear Headphones with Remote and Mic are engineered
- for superior acoustic accuracy, balance, and clarity. So you hear details
- you’ve been missing with other, lesser headphones.
- And the biggest breakthrough? They’re just $79.
-
-
-
-
Two is better than one.
-
- Unlike many small headphones, each earpiece of the Apple In-Ear Headphones
- contains two separate high-performance drivers — a woofer to handle bass and
- mid-range sounds and a tweeter for high-frequency audio. These dedicated
- drivers help ensure accurate, detailed sound across the entire sonic spectrum.
- The result: you’re immersed in the music and hear details you never knew existed.
- Even when listening to an old favorite, you may feel like you’re hearing it for the first time.
-
-
-
-
-
-
-
-
Hear, hear.
-
- The Apple In-Ear Headphones deliver a truly immersive sound experience by drastically
- reducing unwanted outside noises. The soft, silicone ear tips fit snugly and comfortably
- in your ear, creating a seal that isolates your music from your surroundings.
- Three different sizes of ear tips are included so you can find a perfect fit for each ear.
- Also included are a convenient carrying case for the ear tips and a cable-control case
- for the headphones themselves.
-
-
-
-
-
-
Keep it clean.
-
- Inside each earpiece is a stainless steel mesh cap that protects the precision acoustic
- components from dust and debris. You can remove the caps for cleaning or replace
- them with an extra set that’s included in the box.
-
-
-
-
-
-
+
+
+
+
+
+
Hear, hear.
+
+ The Apple In-Ear Headphones deliver a truly immersive sound experience by drastically
+ reducing unwanted outside noises. The soft, silicone ear tips fit snugly and comfortably
+ in your ear, creating a seal that isolates your music from your surroundings.
+ Three different sizes of ear tips are included so you can find a perfect fit for each ear.
+ Also included are a convenient carrying case for the ear tips and a cable-control case
+ for the headphones themselves.
+
+
+
+
Keep it clean.
+
+ Inside each earpiece is a stainless steel mesh cap that protects the precision acoustic
+ components from dust and debris. You can remove the caps for cleaning or replace
+ them with an extra set that’s included in the box.
+
+
+
+
+
@@ -342,41 +335,40 @@ Four-conductor 3.5-mm audio jack
-
- 2.7GHz quad-core Intel Core i5
+ 2.7GHz quad-core Intel Core i5
Turbo Boost up to 3.2GHz
8GB (two 4GB) memory
1TB hard drive1
Intel Iris Pro graphics
-
+
Ultrathin design
The desktop. In its most advanced form ever
- Creating such a stunningly thin design took some equally stunning feats of technological innovation. We refined,re-imagined,or re-engineered everything about iMac from the inside out. The result is an advanced, elegant all-in-one computer that’s as much a work of art as it is state of the art.
+ Creating such a stunningly thin design took some equally stunning feats of technological innovation. We refined,re-imagined,or re-engineered everything about iMac from the inside out. The result is an advanced, elegant all-in-one computer that’s as much a work of art as it is state of the art.
-
+
-
+
-
-
Beautiful widescreen display.
+
+
Beautiful widescreen display.
Brilliance onscreen. And behind it.
How did we make an already gorgeous widescreen display even better? By making it 75 percent less reflective. And by re-architecting the LCD and moving it right up against the cover glass. So you see your photos, games, movies, and everything else in vivid, lifelike detail.
-
+
@@ -385,9 +377,11 @@ Four-conductor 3.5-mm audio jack
-
-
- Powered by fourth-generation Intel Core processors, this iMac is the fastest yet. Every model in the lineup comes standard with a quad-core Intel Core i5 processor, starting at 2.7GHz and topping out at 3.4GHz. And at the Apple Online Store, you can configure your iMac with an even more powerful Intel Core i7 processor, up to 3.5GHz.
+
+
+ Powered by fourth-generation Intel Core processors, this iMac is the fastest yet. Every model in the lineup comes standard with a quad-core Intel Core i5 processor, starting at 2.7GHz and topping out at 3.4GHz.
+
+ And at the Apple Online Store, you can configure your iMac with an even more powerful Intel Core i7 processor, up to 3.5GHz.
@@ -419,14 +413,15 @@ Four-conductor 3.5-mm audio jack
The sleek aluminium Apple Wireless Keyboard.
-
+
+
-
+
-
-
Apple Wireless Keyboard
+
+
A great Keyboard. Cordless.
The incredibly thin Apple Wireless Keyboard uses Bluetooth technology,
which makes it compatible with iPad. And you’re free to type wherever
@@ -441,18 +436,15 @@ Four-conductor 3.5-mm audio jack
- Capacity: 16 GB
-Height: 3.01 inches (76.5 mm)
-Width: 1.56 inches (39.6 mm)
-Depth: 0.21 inch (5.4 mm)
-Weight: 1.1 ounces (31 grams)1
-True volume: 0.95 cu. inch (15,537 cu. mm)
-
+ Height: 3.01 inches
+Width: 1.56 inches
+Depth: 0.21 inch
+Weight: 1.1 ounces
- About the size of a credit card — and just 5.4 mm thin — iPod nano is the thinnest iPod ever made.
- The 2.5-inch Multi-Touch display is nearly twice as big as the display on the previous iPod nano,
- so you can see more of the music, photos, and videos you love.
- Buttons let you quickly play, pause, change songs, or adjust the volume.
- The smooth anodized aluminum design makes iPod nano feel as good as it sounds.
- And iPod nano wouldn’t be iPod nano without gorgeous, hard-to-choose-from color.
+ About the size of a credit card — and just 5.4 mm thin — iPod nano is the thinnest iPod ever made.
+ The 2.5-inch Multi-Touch display is nearly twice as big as the display on the previous iPod nano,
+ so you can see more of the music, photos, and videos you love.
+
+ Buttons let you quickly play, pause, change songs, or adjust the volume.
+ The smooth anodized aluminum design makes iPod nano feel as good as it sounds.
+ And iPod nano wouldn’t be iPod nano without gorgeous, hard-to-choose-from color.
iTunes on your Mac or PC makes it easy to load up
your iPod. Just choose the playlists, audiobooks,
podcasts, and other audio files you want, then sync.
+
When one playlist isn’t enough.
You probably have multiple playlists in iTunes on your computer.
@@ -532,6 +523,7 @@ True volume: 0.95 cu. inch (15,537 cu. mm)
mood strikes you. VoiceOver tells you the name of each playlist,
so it’s easy to switch between them and find the one you want without looking.
+
Have Genius call the tunes.
There’s another way to get a good mix of music on iPod: Let Genius do the work.