diff --git a/.gitignore b/.gitignore index 6148a29a95d..4b38dc02ac7 100644 --- a/.gitignore +++ b/.gitignore @@ -25,4 +25,4 @@ install/win32/meta.py /lib/ /man/ /share/ -/src/ +/src/ \ No newline at end of file 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/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml index 61c397364b9..fe701a85661 100644 --- a/addons/account/account_invoice_view.xml +++ b/addons/account/account_invoice_view.xml @@ -60,7 +60,7 @@ - + diff --git a/addons/account/product_view.xml b/addons/account/product_view.xml index 73b31bbb02a..9c1b0ee39b7 100644 --- a/addons/account/product_view.xml +++ b/addons/account/product_view.xml @@ -1,57 +1,52 @@ - - product.normal.form.inherit - product.product + + product.template.form.inherit + product.template 5 - + - + + + + attrs="{'readonly': [('is_product_variant', '=', True)]}"/> + attrs="{'readonly':[ '|', ('sale_ok','=',0), ('is_product_variant', '=', True)]}"/> + attrs="{'readonly': [('is_product_variant', '=', True)]}"/> + attrs="{'readonly': [('is_product_variant', '=', True)]}"/> - + - - product.template.product.form.inherit + + product.template.search product.template - + primary + - - - - - - - - - - - - - - - + + + + + + + - - product.category.property.form.inherit product.category diff --git a/addons/account/report/account_aged_partner_balance.py b/addons/account/report/account_aged_partner_balance.py index 3fd83c19207..2e3c9b7c374 100644 --- a/addons/account/report/account_aged_partner_balance.py +++ b/addons/account/report/account_aged_partner_balance.py @@ -161,7 +161,7 @@ class aged_trial_report(report_sxw.rml_parse, common_report_header): dates_query += ' < %s)' args_list += (form[str(i)]['stop'],) args_list += (self.date_from,) - self.cr.execute('''SELECT l.partner_id, SUM(l.debit-l.credit) + self.cr.execute('''SELECT l.partner_id, SUM(l.debit-l.credit), l.reconcile_partial_id FROM account_move_line AS l, account_account, account_move am WHERE (l.account_id = account_account.id) AND (l.move_id=am.id) AND (am.state IN %s) @@ -173,12 +173,24 @@ class aged_trial_report(report_sxw.rml_parse, common_report_header): AND account_account.active AND ''' + dates_query + ''' AND (l.date <= %s) - GROUP BY l.partner_id''', args_list) - t = self.cr.fetchall() - d = {} - for i in t: - d[i[0]] = i[1] - history.append(d) + GROUP BY l.partner_id, l.reconcile_partial_id''', args_list) + partners_partial = self.cr.fetchall() + partners_amount = dict((i[0],0) for i in partners_partial) + for partner_info in partners_partial: + if partner_info[2]: + # in case of partial reconciliation, we want to keep the left amount in the oldest period + self.cr.execute('''SELECT MIN(COALESCE(date_maturity,date)) FROM account_move_line WHERE reconcile_partial_id = %s''', (partner_info[2],)) + date = self.cr.fetchall() + if date and args_list[-3] <= date[0][0] <= args_list[-2]: + # partial reconcilation + self.cr.execute('''SELECT SUM(l.debit-l.credit) + FROM account_move_line AS l + WHERE l.reconcile_partial_id = %s''', (partner_info[2],)) + unreconciled_amount = self.cr.fetchall() + partners_amount[partner_info[0]] += unreconciled_amount[0][0] + else: + partners_amount[partner_info[0]] += partner_info[1] + history.append(partners_amount) for partner in partners: values = {} diff --git a/addons/account/views/report_invoice.xml b/addons/account/views/report_invoice.xml index 6c4b701c6cf..a250eb9ebf7 100644 --- a/addons/account/views/report_invoice.xml +++ b/addons/account/views/report_invoice.xml @@ -5,7 +5,7 @@
-
+
diff --git a/addons/account/views/report_overdue.xml b/addons/account/views/report_overdue.xml index bc522aa8b9d..df3934ff0de 100644 --- a/addons/account/views/report_overdue.xml +++ b/addons/account/views/report_overdue.xml @@ -5,7 +5,7 @@
-
+

diff --git a/addons/account_analytic_analysis/account_analytic_analysis.py b/addons/account_analytic_analysis/account_analytic_analysis.py index 8d470f45637..4b2352bc880 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis.py +++ b/addons/account_analytic_analysis/account_analytic_analysis.py @@ -69,7 +69,7 @@ class account_analytic_invoice_line(osv.osv): if partner_id: part = self.pool.get('res.partner').browse(cr, uid, partner_id, context=local_context) if part.lang: - context.update({'lang': part.lang}) + local_context.update({'lang': part.lang}) result = {} res = self.pool.get('product.product').browse(cr, uid, product, context=local_context) @@ -79,7 +79,12 @@ class account_analytic_invoice_line(osv.osv): price = res.price else: price = res.list_price - result.update({'name': name or res.description or False,'uom_id': uom_id or res.uom_id.id or False, 'price_unit': price}) + if not name: + name = self.pool.get('product.product').name_get(cr, uid, [res.id], context=local_context)[0][1] + if res.description_sale: + name += '\n'+res.description_sale + + result.update({'name': name or False,'uom_id': uom_id or res.uom_id.id or False, 'price_unit': price}) res_final = {'value':result} if result['uom_id'] != res.uom_id.id: diff --git a/addons/account_analytic_analysis/account_analytic_analysis_view.xml b/addons/account_analytic_analysis/account_analytic_analysis_view.xml index 97fb15e9290..af6eb47ffa4 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_view.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_view.xml @@ -169,7 +169,7 @@
- + diff --git a/addons/account_anglo_saxon/product_view.xml b/addons/account_anglo_saxon/product_view.xml index c06decf2c92..5a589131218 100644 --- a/addons/account_anglo_saxon/product_view.xml +++ b/addons/account_anglo_saxon/product_view.xml @@ -1,29 +1,18 @@ - - product.normal.form.inherit.stock - product.product - - - - - - - product.template.product.form.inherit + product.normal.form.inherit.stock product.template + diff --git a/addons/account_budget/account_budget.py b/addons/account_budget/account_budget.py index 753a5df79f4..78e85716bbd 100644 --- a/addons/account_budget/account_budget.py +++ b/addons/account_budget/account_budget.py @@ -22,6 +22,7 @@ import datetime from openerp.osv import fields, osv +from openerp.tools import ustr from openerp.tools.translate import _ import openerp.addons.decimal_precision as dp @@ -114,7 +115,7 @@ class crossovered_budget_lines(osv.osv): for line in self.browse(cr, uid, ids, context=context): acc_ids = [x.id for x in line.general_budget_id.account_ids] if not acc_ids: - raise osv.except_osv(_('Error!'),_("The Budget '%s' has no accounts!") % str(line.general_budget_id.name)) + raise osv.except_osv(_('Error!'),_("The Budget '%s' has no accounts!") % ustr(line.general_budget_id.name)) date_to = line.date_to date_from = line.date_from if context.has_key('wizard_date_from'): diff --git a/addons/account_followup/views/report_followup.xml b/addons/account_followup/views/report_followup.xml index 6c79fe4cc55..c0d98e7bb28 100644 --- a/addons/account_followup/views/report_followup.xml +++ b/addons/account_followup/views/report_followup.xml @@ -7,7 +7,7 @@
-
+
diff --git a/addons/base_gengo/doc/changelog.rst b/addons/base_gengo/doc/changelog.rst index fe343069a38..19f93bfa5a8 100644 --- a/addons/base_gengo/doc/changelog.rst +++ b/addons/base_gengo/doc/changelog.rst @@ -3,7 +3,7 @@ ======================== ****** -saas-5 +saas-4 ****** - - Library update: ``mygengo`` (https://pypi.python.org/pypi/mygengo/1.3.3) was outdated and has been replaced by ``gengo`` (https://pypi.python.org/pypi/gengo). +- Library update: ``mygengo`` (https://pypi.python.org/pypi/mygengo/1.3.3) was outdated and has been replaced by ``gengo`` (https://pypi.python.org/pypi/gengo). 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/crm_partner_assign/security/ir.model.access.csv b/addons/crm_partner_assign/security/ir.model.access.csv index 6a26c574a1c..d5324ba6c53 100644 --- a/addons/crm_partner_assign/security/ir.model.access.csv +++ b/addons/crm_partner_assign/security/ir.model.access.csv @@ -3,6 +3,7 @@ access_ crm_lead_report_assign,crm.lead.report.assign,model_crm_lead_report_assi access_ crm_lead_report_assign_all,crm.lead.report.assign.all,model_crm_lead_report_assign,base.group_user,1,0,0,0 access_crm_partner_report,crm.partner.report.assign.all,model_crm_partner_report_assign,base.group_sale_salesman,1,0,0,0 access_res_partner_grade,res.partner.grade,model_res_partner_grade,base.group_sale_salesman,1,1,1,0 +access_res_partner_grade_public,res.partner.grade,model_res_partner_grade,base.group_public,1,0,0,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,base.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 diff --git a/addons/delivery/delivery.py b/addons/delivery/delivery.py index 46d76180d08..873b7e60662 100644 --- a/addons/delivery/delivery.py +++ b/addons/delivery/delivery.py @@ -192,15 +192,16 @@ class delivery_grid(osv.osv): weight = 0 volume = 0 quantity = 0 + product_uom_obj = self.pool.get('product.uom') for line in order.order_line: if not line.product_id or line.is_delivery: continue - weight += (line.product_id.weight or 0.0) * line.product_uom_qty - volume += (line.product_id.volume or 0.0) * line.product_uom_qty - quantity += line.product_uom_qty + q = product_uom_obj._compute_qty(cr, uid, line.product_uom.id, line.product_uos_qty, line.product_id.uom_id.id) + weight += (line.product_id.weight or 0.0) * q + volume += (line.product_id.volume or 0.0) * q + quantity += q total = order.amount_total or 0.0 - return self.get_price_from_picking(cr, uid, id, total,weight, volume, quantity, context=context) def get_price_from_picking(self, cr, uid, id, total, weight, volume, quantity, context=None): 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/event_sale_view.xml b/addons/event_sale/event_sale_view.xml index 8987354acdd..a049565074a 100644 --- a/addons/event_sale/event_sale_view.xml +++ b/addons/event_sale/event_sale_view.xml @@ -1,18 +1,19 @@ - - product.product - + + + product.template + -
- -