diff --git a/contributing.md b/CONTRIBUTING.md similarity index 100% rename from contributing.md rename to CONTRIBUTING.md diff --git a/README.md b/README.md index 7b3896022f0..c400772c2ba 100644 --- a/README.md +++ b/README.md @@ -1,73 +1,52 @@ -About Odoo -========== +Odoo +---- -Odoo is a suite of open source Business apps. More info at http://www.odoo.com +Odoo is a suite of web based open source business apps. More info at http://www.odoo.com -Installation -============ - -[Setup/migration guide for employees](https://github.com/odoo/odoo/blob/master/doc/git.rst) +The easiest way to play with it is the Odoo free trial, email registration is NOT required, use the "skip this step" link on the registration page to skip it. -Migration from bazaar -===================== +Getting started with Odoo developement +-------------------------------------- -If you have existing bazaar branches and want to move them to a git repository, -there are several options: +If you are a developer type the following command at your terminal [1]: -* download http://nightly.openerp.com/move-branch.zip and run it with - `python move-branch.zip -h` (for the help). It should be able to convert - simple-enough branches for you (even if they have merge commits &al) -* Extract the branch contents as patches and use `git apply` or `git am` to - rebuild a branch from them -* Replay the branch by hand + wget -O- https://raw.githubusercontent.com/odoo/odoo/master/odoo.py | python + +Then follow the developer tutorial + +[1] You may want to check the content of the odoo.py file before executing it. -System Requirements -------------------- +Packages, tarballs and installers +--------------------------------- -The dependencies are listed in setup.py +* Debian packages + + Add this apt repository to your /etc/apt/sources.list file + + deb http://nightly.openerp.com/8.0/deb/ ./ + + Then type: + + $ sudo apt-get update + $ sudo apt-get install odoo + +* Source tarballs + +* Windows installer + +* RPM package -Debian/Ubuntu -------------- +For Odoo employees +------------------ -Add the apt repository +To add the odoo-dev remote use this command: - deb http://nightly.openerp.com/7.0/deb/ ./ + $ ./odoo.py setup_git_dev -in your source.list and type: +To fetch odoo merge pull requests refs use this command: - $ sudo apt-get update - $ sudo apt-get install openerp - -Or download the deb file and type: - - $ sudo dpkg -i - $ sudo apt-get install -f - -RedHat, Fedora, CentOS ----------------------- - -Install the required dependencies: - - $ yum install python - $ easy_install pip - $ pip install ..... - -Install the openerp rpm - - $ rpm -i openerp-VERSION.rpm - -Windows -------- - -Check the notes in setup.py - - -Setting up your database ------------------------- - -Point your browser to http://localhost:8069/ and click "Manage Databases", the -default master password is "admin". + $ ./odoo.py setup_git_review diff --git a/addons/crm_partner_assign/crm_partner_assign.py b/addons/crm_partner_assign/crm_partner_assign.py index 046babccf73..31a042d8685 100644 --- a/addons/crm_partner_assign/crm_partner_assign.py +++ b/addons/crm_partner_assign/crm_partner_assign.py @@ -65,7 +65,7 @@ class res_partner(osv.osv): 'date_review_next' : fields.date('Next Partner Review'), # customer implementation 'assigned_partner_id': fields.many2one( - 'res.partner', 'Implementedy by', + 'res.partner', 'Implemented by', ), 'implemented_partner_ids': fields.one2many( 'res.partner', 'assigned_partner_id', diff --git a/addons/event_sale/__openerp__.py b/addons/event_sale/__openerp__.py index 88e27fd9a3d..35d2f51aacc 100644 --- a/addons/event_sale/__openerp__.py +++ b/addons/event_sale/__openerp__.py @@ -42,6 +42,7 @@ this event. 'data': [ 'event_sale_view.xml', 'event_sale_data.xml', + 'security/ir.model.access.csv', ], 'demo': ['event_demo.xml'], 'test': ['test/confirm.yml'], diff --git a/addons/event_sale/security/ir.model.access.csv b/addons/event_sale/security/ir.model.access.csv new file mode 100644 index 00000000000..410458d4b0f --- /dev/null +++ b/addons/event_sale/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_event_event_ticket_user,event.event.ticket.user,event_sale.model_event_event_ticket,event.group_event_user,1,0,0,0 +access_event_event_ticket_admin,event.event.ticket.admin,event_sale.model_event_event_ticket,event.group_event_manager,1,1,1,1 \ No newline at end of file diff --git a/addons/payment_paypal/models/paypal.py b/addons/payment_paypal/models/paypal.py index d71e3d0620b..5dcbd975a4a 100644 --- a/addons/payment_paypal/models/paypal.py +++ b/addons/payment_paypal/models/paypal.py @@ -95,9 +95,12 @@ class AcquirerPaypal(osv.Model): return 0.0 country = self.pool['res.country'].browse(cr, uid, country_id, context=context) if country and acquirer.company_id.country_id.id == country.id: - fees = amount * (1 + acquirer.fees_dom_var / 100.0) + acquirer.fees_dom_fixed - amount + percentage = acquirer.fees_dom_var + fixed = acquirer.fees_dom_fixed else: - fees = amount * (1 + acquirer.fees_int_var / 100.0) + acquirer.fees_int_fixed - amount + percentage = acquirer.fees_int_var + fixed = acquirer.fees_int_fixed + fees = (percentage / 100.0 * amount + fixed ) / (1 - percentage / 100.0) return fees def paypal_form_generate_values(self, cr, uid, id, partner_values, tx_values, context=None): diff --git a/addons/payment_paypal/tests/test_paypal.py b/addons/payment_paypal/tests/test_paypal.py index ccac9b6fdef..a66b90cf0fb 100644 --- a/addons/payment_paypal/tests/test_paypal.py +++ b/addons/payment_paypal/tests/test_paypal.py @@ -148,7 +148,7 @@ class PaypalForm(PaypalCommon): for form_input in tree.input: if form_input.get('name') in ['handling']: handling_found = True - self.assertEqual(form_input.get('value'), '1.56', 'paypal: wrong computed fees') + self.assertEqual(form_input.get('value'), '1.57', 'paypal: wrong computed fees') self.assertTrue(handling_found, 'paypal: fees_active did not add handling input in rendered form') @mute_logger('openerp.addons.payment_paypal.models.paypal', 'ValidationError') diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 9601b31f5e8..ba63318e52e 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -437,16 +437,6 @@ instance.web.ActionManager = instance.web.Widget.extend({ ir_actions_act_window: function (action, options) { var self = this; - if (action.target === 'current'){ - action.context['active_model'] = action.res_model; - if (action.res_id){ - action.context['active_id'] = action.res_id; - action.context['active_ids'] = [action.res_id]; - } else{ - delete action.context['active_id']; - delete action.context['active_ids']; - } - } return this.ir_actions_common({ widget: function () { return new instance.web.ViewManagerAction(self, action); }, action: action, @@ -898,7 +888,20 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({ this._super(parent, null, action.views, flags); this.session = parent.session; this.action = action; - var dataset = new instance.web.DataSetSearch(this, action.res_model, action.context, action.domain); + var context = action.context; + if (action.target === 'current'){ + var active_context = { + active_model: action.res_model, + }; + context = new instance.web.CompoundContext(context, active_context).eval(); + delete context['active_id']; + delete context['active_ids']; + if (action.res_id){ + context['active_id'] = action.res_id; + context['active_ids'] = [action.res_id]; + } + } + var dataset = new instance.web.DataSetSearch(this, action.res_model, context, action.domain); if (action.res_id) { dataset.ids.push(action.res_id); dataset.index = 0; diff --git a/addons/website_blog/static/src/css/website_blog.css b/addons/website_blog/static/src/css/website_blog.css index 9097e3af31f..9317ba32321 100644 --- a/addons/website_blog/static/src/css/website_blog.css +++ b/addons/website_blog/static/src/css/website_blog.css @@ -150,3 +150,7 @@ div#blog_angle_down a:hover { mark + .popover { cursor: pointer; } + +.discussion_scroll_post { + overflow-x: auto; +} diff --git a/addons/website_blog/static/src/css/website_blog.sass b/addons/website_blog/static/src/css/website_blog.sass index 6342c6b99a2..f1fd0e59a5a 100644 --- a/addons/website_blog/static/src/css/website_blog.sass +++ b/addons/website_blog/static/src/css/website_blog.sass @@ -134,3 +134,6 @@ div#blog_angle_down mark + .popover cursor: pointer + +.discussion_scroll_post + overflow-x: auto diff --git a/addons/website_blog/static/src/xml/website_blog.inline.discussion.xml b/addons/website_blog/static/src/xml/website_blog.inline.discussion.xml index 8c1cda26265..1acf085f147 100644 --- a/addons/website_blog/static/src/xml/website_blog.inline.discussion.xml +++ b/addons/website_blog/static/src/xml/website_blog.inline.discussion.xml @@ -9,7 +9,7 @@ -
+
by diff --git a/addons/website_blog/views/website_blog_templates.xml b/addons/website_blog/views/website_blog_templates.xml index e6f93dc8779..3a42abc644d 100644 --- a/addons/website_blog/views/website_blog_templates.xml +++ b/addons/website_blog/views/website_blog_templates.xml @@ -236,7 +236,7 @@ "fields": ["name"] }'/> on -
+
diff --git a/addons/website_crm_partner_assign/__openerp__.py b/addons/website_crm_partner_assign/__openerp__.py index 06b6dc9410e..649537ffb2e 100644 --- a/addons/website_crm_partner_assign/__openerp__.py +++ b/addons/website_crm_partner_assign/__openerp__.py @@ -13,6 +13,9 @@ Publish and Assign Partner 'views/partner_grade.xml', 'views/website_crm_partner_assign.xml', ], + 'demo': [ + 'data/res_partner_grade_demo.xml', + ], 'qweb': ['static/src/xml/*.xml'], 'installable': True, } diff --git a/addons/website_crm_partner_assign/data/res_partner_grade_demo.xml b/addons/website_crm_partner_assign/data/res_partner_grade_demo.xml new file mode 100644 index 00000000000..19c48c2d93d --- /dev/null +++ b/addons/website_crm_partner_assign/data/res_partner_grade_demo.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index 2e7d56eb546..16a6bd24edf 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -19,23 +19,22 @@ # ############################################################################## -from openerp import SUPERUSER_ID -from openerp.addons.web import http -from openerp.addons.web.http import request -from openerp.tools.translate import _ -from openerp.addons.website.controllers.main import Website as controllers -controllers = controllers() - import logging -_logger = logging.getLogger(__name__) - -from datetime import datetime, timedelta import time +from datetime import datetime, timedelta from dateutil.relativedelta import relativedelta -from openerp import tools + import werkzeug.urls + +from openerp import SUPERUSER_ID +from openerp import http +from openerp import tools +from openerp.http import request +from openerp.tools.translate import _ from openerp.addons.website.models.website import slug +_logger = logging.getLogger(__name__) + try: import GeoIP except ImportError: diff --git a/addons/website_event_sale/security/ir.model.access.csv b/addons/website_event_sale/security/ir.model.access.csv index 0538dbe8cc3..ec5ea43cd7d 100644 --- a/addons/website_event_sale/security/ir.model.access.csv +++ b/addons/website_event_sale/security/ir.model.access.csv @@ -1,5 +1,4 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_event_event_ticket_public,event.event.ticket.public,event_sale.model_event_event_ticket,,1,0,0,0 -access_event_event_ticket_admin,event.event.ticket.admin,event_sale.model_event_event_ticket,event.group_event_manager,1,1,1,1 access_event_product_product_public,event.product.product.public,product.model_product_product,base.group_public,1,0,0,0 access_event_product_template_public,event.product.template.public,product.model_product_template,base.group_public,1,0,0,0 \ No newline at end of file diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py index de69fba490a..c0592000208 100644 --- a/addons/website_mail/controllers/main.py +++ b/addons/website_mail/controllers/main.py @@ -81,6 +81,7 @@ class WebsiteMail(http.Controller): 'is_user': uid != public_id, 'email': email, 'is_follower': False, + 'alias_name': False, } if not obj: @@ -95,8 +96,5 @@ class WebsiteMail(http.Controller): ('res_id', '=', obj_ids[0]), ('partner_id', '=', partner_id.id) ], context=context)) == 1 - if post.get('fields'): - record = obj.read(cr, SUPERUSER_ID, obj_ids[0], fields=post.get('fields'), context=context) - values.update(record) return values diff --git a/addons/website_mail/views/snippets.xml b/addons/website_mail/views/snippets.xml index 987ccaa672e..ebbcf6d4a70 100644 --- a/addons/website_mail/views/snippets.xml +++ b/addons/website_mail/views/snippets.xml @@ -493,53 +493,5 @@ - - - diff --git a/addons/website_mail/views/website_mail.xml b/addons/website_mail/views/website_mail.xml index 5d384f5c0b0..2b2bbea7e5f 100644 --- a/addons/website_mail/views/website_mail.xml +++ b/addons/website_mail/views/website_mail.xml @@ -21,15 +21,9 @@ - diff --git a/addons/website_mail_group/__openerp__.py b/addons/website_mail_group/__openerp__.py index f83fc38ce7c..768e7f27156 100644 --- a/addons/website_mail_group/__openerp__.py +++ b/addons/website_mail_group/__openerp__.py @@ -11,7 +11,8 @@ OpenERP Mail Group : Mailing List Archives 'author': 'OpenERP SA', 'depends': ['website_mail'], 'data': [ - 'views/website_mail_group.xml' + 'views/website_mail_group.xml', + 'views/snippets.xml', ], 'qweb': [], 'installable': True, diff --git a/addons/website_mail_group/controllers/main.py b/addons/website_mail_group/controllers/main.py index 7320ebc6548..a28b808d9f2 100644 --- a/addons/website_mail_group/controllers/main.py +++ b/addons/website_mail_group/controllers/main.py @@ -129,3 +129,9 @@ class MailGroup(http.Controller): 'replies_per_page': self._replies_per_page, } return request.registry['ir.ui.view'].render(request.cr, request.uid, 'website_mail_group.messages_short', values, engine='ir.qweb', context=request.context) + + @http.route("/groups//get_alias_info", type='json', auth='public', website=True) + def get_alias_info(self, group, **post): + return { + 'alias_name': group.alias_id and group.alias_id.alias_name and group.alias_id.alias_domain and '%s@%s' % (group.alias_id.alias_name, group.alias_id.alias_domain) or False + } diff --git a/addons/website_mail_group/static/src/img/blocks/button_group_subscribe.png b/addons/website_mail_group/static/src/img/blocks/button_group_subscribe.png new file mode 100644 index 00000000000..204239a8e0c Binary files /dev/null and b/addons/website_mail_group/static/src/img/blocks/button_group_subscribe.png differ diff --git a/addons/website_mail/static/src/js/website_mail.editor.js b/addons/website_mail_group/static/src/js/website_mail_group.editor.js similarity index 100% rename from addons/website_mail/static/src/js/website_mail.editor.js rename to addons/website_mail_group/static/src/js/website_mail_group.editor.js diff --git a/addons/website_mail/static/src/js/website_mail.js b/addons/website_mail_group/static/src/js/website_mail_group.snippet.js similarity index 67% rename from addons/website_mail/static/src/js/website_mail.js rename to addons/website_mail_group/static/src/js/website_mail_group.snippet.js index d069f88ea45..fc0e2bb864f 100644 --- a/addons/website_mail/static/src/js/website_mail.js +++ b/addons/website_mail_group/static/src/js/website_mail_group.snippet.js @@ -12,15 +12,12 @@ openerp.jsonRpc('/website_mail/is_follower', 'call', { model: this.$target.data('object'), id: this.$target.data('id'), - fields: ['name', 'alias_id'], + get_alias_info: true, }).always(function (data) { self.is_user = data.is_user; - self.$target.find('.js_mg_email').attr('href', 'mailto:' + data.alias_id[1]); - self.$target.find('.js_mg_link').attr('href', '/groups/' + data.id); - self.toggle_subscription(data.is_follower); - self.$target.find('input.js_follow_email') - .val(data.email ? data.email : "") - .attr("disabled", data.is_follower || (data.email.length && self.is_user) ? "disabled" : false); + self.email = data.email; + self.$target.find('.js_mg_link').attr('href', '/groups/' + self.$target.data('id')); + self.toggle_subscription(data.is_follower, data.email); self.$target.removeClass("hidden"); }); @@ -36,6 +33,7 @@ return; }, on_click: function () { + event.preventDefault(); var self = this; var $email = this.$target.find(".js_follow_email"); @@ -51,10 +49,11 @@ 'message_is_follower': this.$target.attr("data-follow") || "off", 'email': $email.length ? $email.val() : false, }).then(function (follow) { - self.toggle_subscription(follow); + self.toggle_subscription(follow, self.email); }); }, - toggle_subscription: function(follow) { + toggle_subscription: function(follow, email) { + var alias_done = this.get_alias_info(); if (follow) { this.$target.find(".js_mg_follow_form").addClass("hidden"); this.$target.find(".js_mg_details").removeClass("hidden"); @@ -63,9 +62,27 @@ this.$target.find(".js_mg_follow_form").removeClass("hidden"); this.$target.find(".js_mg_details").addClass("hidden"); } - this.$target.find('input.js_follow_email').attr("disabled", follow || this.is_user ? "disabled" : false); + this.$target.find('input.js_follow_email') + .val(email ? email : "") + .attr("disabled", follow || (email.length && this.is_user) ? "disabled" : false); this.$target.attr("data-follow", follow ? 'on' : 'off'); + return $.when(alias_done); }, + get_alias_info: function() { + var self = this; + if (! this.$target.data('id')) { + return $.Deferred().resolve(); + } + return openerp.jsonRpc('/groups/' + this.$target.data('id') + '/get_alias_info', 'call', {}).then(function (data) { + if (data.alias_name) { + self.$target.find('.js_mg_email').attr('href', 'mailto:' + data.alias_name); + self.$target.find('.js_mg_email').removeClass('hidden'); + } + else { + self.$target.find('.js_mg_email').addClass('hidden'); + } + }); + } }); $(document).ready(function () { diff --git a/addons/website_mail_group/views/snippets.xml b/addons/website_mail_group/views/snippets.xml new file mode 100644 index 00000000000..452f59f4902 --- /dev/null +++ b/addons/website_mail_group/views/snippets.xml @@ -0,0 +1,53 @@ + + + + + + + + \ No newline at end of file diff --git a/addons/website_mail_group/views/website_mail_group.xml b/addons/website_mail_group/views/website_mail_group.xml index 76edd524753..d52c34513b8 100644 --- a/addons/website_mail_group/views/website_mail_group.xml +++ b/addons/website_mail_group/views/website_mail_group.xml @@ -8,6 +8,18 @@ + + + +