From 51d072db444bfd2dcad18122b502a4d3a98627f4 Mon Sep 17 00:00:00 2001 From: Goffin Simon Date: Mon, 26 Jun 2017 10:38:04 +0200 Subject: [PATCH 1/6] [FIX] stock_account: Invalid product price history breaks stock valuation Steps to reproduce: 1. Create a new Stockable Product 2. Set cost price to 2.00 3. Adjust stock to 10 pcs 4. Enable developer mode 5. Go to Inventory > Reports > Inventory at Date 6. Select current time and retrieve the inventory value Bug: The stock valuation for the product was 0.0. Reason: When creating a stockable product, Odoo creates two price history entries with the same datetime but different cost. The stock valuation report only takes one of them into account. Fixes #14889 opw:747857 --- addons/stock_account/report/stock_history.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/stock_account/report/stock_history.py b/addons/stock_account/report/stock_history.py index ccf150954dc..4d5d4045dfb 100644 --- a/addons/stock_account/report/stock_history.py +++ b/addons/stock_account/report/stock_history.py @@ -41,7 +41,7 @@ class StockHistory(models.Model): self._cr.execute("""SELECT DISTINCT ON (product_id, company_id) product_id, company_id, cost FROM product_price_history WHERE product_id in %s AND datetime <= %s - ORDER BY product_id, company_id, datetime DESC""", (tuple(not_real_cost_method_products.ids), date)) + ORDER BY product_id, company_id, datetime DESC, id DESC""", (tuple(not_real_cost_method_products.ids), date)) for history in self._cr.dictfetchall(): histories_dict[(history['product_id'], history['company_id'])] = history['cost'] From d86f134abd70c4742c3234c14f0f8ab08a9fb39b Mon Sep 17 00:00:00 2001 From: Pieczynski Marcin Date: Sun, 25 Jun 2017 13:49:35 +0200 Subject: [PATCH 2/6] [CLA] signature for piemar1 Done at #17817 --- doc/cla/individual/piemar1.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 doc/cla/individual/piemar1.md diff --git a/doc/cla/individual/piemar1.md b/doc/cla/individual/piemar1.md new file mode 100644 index 00000000000..06c857427ca --- /dev/null +++ b/doc/cla/individual/piemar1.md @@ -0,0 +1,9 @@ +Poland, 2017-06-25 + +I hereby agree to the terms of the Odoo Individual Contributor License Agreement v1.0. + +I declare that I am authorized and able to make this agreement and sign this declaration. + +Signed, + +Marcin PieczyƄski marcin-pieczynski@wp.pl https://github.com/piemar1 From 831744684c3a23c1024714b380438b30a1c92099 Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Mon, 26 Jun 2017 14:02:46 +0200 Subject: [PATCH 3/6] [FIX] stock: empty state - Update view with external_id=stock.view_move_picking_tree and remove editable attribute on the tree view. - Create a new picking - Add a line (form view will open) and click on "Save and close" => A traceback show up since 'scrapped' was not in the form view. - The picking location fields become readonly, and the status bar disappears - Save the picking => Error: "creation/update: a mandatory field is not correctly set : [object with reference: location_id - location.id]" Courtesy of @benwillig Closes #17738 opw-748353 --- addons/stock/models/stock_picking.py | 4 ++-- addons/stock/views/stock_move_views.xml | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py index 40121b2aae5..401258e5aed 100644 --- a/addons/stock/models/stock_picking.py +++ b/addons/stock/models/stock_picking.py @@ -325,11 +325,11 @@ class Picking(models.Model): .filtered(lambda move: move.state not in ['cancel', 'done'])\ .sorted(key=lambda move: (move.state == 'assigned' and 2) or (move.state == 'waiting' and 1) or 0) if self.move_type == 'one': - self.state = moves_todo[0].state + self.state = moves_todo[0].state or 'draft' elif moves_todo[0].state != 'assigned' and any(x.partially_available or x.state == 'assigned' for x in moves_todo): self.state = 'partially_available' else: - self.state = moves_todo[-1].state + self.state = moves_todo[-1].state or 'draft' @api.one @api.depends('move_lines.priority') diff --git a/addons/stock/views/stock_move_views.xml b/addons/stock/views/stock_move_views.xml index a49dc87dd7c..3d92f99a3b4 100644 --- a/addons/stock/views/stock_move_views.xml +++ b/addons/stock/views/stock_move_views.xml @@ -157,6 +157,7 @@
+ From d6909f42ad23840ba7a670aad7195c5df06401c9 Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Mon, 26 Jun 2017 12:55:38 +0200 Subject: [PATCH 4/6] [FIX] stock: incorrect ordered quantity - Create a stockable product, get 61 units in stock - Create a SO of 75 units, validate - In the picking, transfer only 50 units, validate and create a backorder - Print the Delivery Slip of the picking: it shows 61 units ordered - Print the Delivery Slip of the backorder: it shows 61 units ordered - Receive the 14 missing units, recheck availability on the backorder: it shows 25 units ordered The quantity ordered should be recomputed from the stock moves when a partial transfer is done. opw-747983 --- addons/stock/models/stock_picking.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py index 401258e5aed..65aa42b69a5 100644 --- a/addons/stock/models/stock_picking.py +++ b/addons/stock/models/stock_picking.py @@ -612,9 +612,13 @@ class Picking(models.Model): forced_qties[move.product_id] = forced_qty for vals in picking._prepare_pack_ops(picking_quants, forced_qties): vals['fresh_record'] = False - PackOperation.create(vals) + PackOperation |= PackOperation.create(vals) # recompute the remaining quantities all at once self.do_recompute_remaining_quantities() + for pack in PackOperation: + pack.ordered_qty = sum( + pack.mapped('linked_move_operation_ids').mapped('move_id').filtered(lambda r: r.state != 'cancel').mapped('ordered_qty') + ) self.write({'recompute_pack_op': False}) @api.multi From b1a3bb7d9adff664554d7ba63c1513c318057160 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Mon, 26 Jun 2017 16:30:55 +0200 Subject: [PATCH 5/6] [IMP] doc: warn gantt view is not available in community version May be confusing for new users Closes #17817 --- doc/howtos/backend.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/howtos/backend.rst b/doc/howtos/backend.rst index 5a47eb2603c..63ca41e0818 100644 --- a/doc/howtos/backend.rst +++ b/doc/howtos/backend.rst @@ -1120,6 +1120,11 @@ default and behave as booleans (they can only be enabled by default). Gantt ----- +.. warning:: + + The gantt view requires the web_gantt module which is present in + :ref:`the enterprise edition ` version. + Horizontal bar charts typically used to show project planning and advancement, their root element is ````. From 4c66eae308a96c3bff07e095a1e229ec991720f9 Mon Sep 17 00:00:00 2001 From: Martin Trigaux Date: Mon, 26 Jun 2017 17:04:47 +0200 Subject: [PATCH 6/6] [FIX] website_sale,website_crm: untranslated term opw-748880 --- addons/website_crm/controllers/main.py | 12 +++--- addons/website_crm/i18n/website_crm.pot | 37 +++++++++++++++-- addons/website_sale/controllers/backend.py | 4 +- addons/website_sale/i18n/website_sale.pot | 48 ++++++++++++++++------ 4 files changed, 77 insertions(+), 24 deletions(-) diff --git a/addons/website_crm/controllers/main.py b/addons/website_crm/controllers/main.py index 0782c760a62..308f857ab0c 100644 --- a/addons/website_crm/controllers/main.py +++ b/addons/website_crm/controllers/main.py @@ -50,19 +50,19 @@ class WebsiteCrmBackend(WebsiteBackend): 'graph': [ { 'values': leads_graph, - 'key': 'Leads', + 'key': _('Leads'), }, { 'values': previous_leads_graph, - 'key': 'Previous Leads', + 'key': _('Previous Leads'), }, ], 'leads': leads, 'lead_fields': { - 'create_date': 'Create Date', - 'campaign_id': 'Campaign', - 'medium_id': 'Medium', - 'source_id': 'Source', + 'create_date': _('Create Date'), + 'campaign_id': _('Campaign'), + 'medium_id': _('Medium'), + 'source_id': _('Source'), }, } diff --git a/addons/website_crm/i18n/website_crm.pot b/addons/website_crm/i18n/website_crm.pot index 4be58bba563..12985a67b4f 100644 --- a/addons/website_crm/i18n/website_crm.pot +++ b/addons/website_crm/i18n/website_crm.pot @@ -4,10 +4,10 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 10.0c\n" +"Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-09-07 08:57+0000\n" -"PO-Revision-Date: 2016-09-07 08:57+0000\n" +"POT-Creation-Date: 2017-06-26 14:46+0000\n" +"PO-Revision-Date: 2017-06-26 14:46+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -33,6 +33,18 @@ msgid "Send\n" " " msgstr "" +#. module: website_crm +#: code:addons/website_crm/controllers/main.py:63 +#, python-format +msgid "Campaign" +msgstr "" + +#. module: website_crm +#: code:addons/website_crm/controllers/main.py:62 +#, python-format +msgid "Create Date" +msgstr "" + #. module: website_crm #: model:ir.ui.view,arch_db:website_crm.contactus_form msgid "Email" @@ -50,6 +62,7 @@ msgstr "" #. module: website_crm #. openerp-web +#: code:addons/website_crm/controllers/main.py:53 #: code:addons/website_crm/static/src/xml/website_crm_dashboard.xml:34 #, python-format msgid "Leads" @@ -69,11 +82,29 @@ msgstr "" msgid "Leads Analysis" msgstr "" +#. module: website_crm +#: code:addons/website_crm/controllers/main.py:64 +#, python-format +msgid "Medium" +msgstr "" + #. module: website_crm #: model:ir.ui.view,arch_db:website_crm.contactus_form msgid "Phone Number" msgstr "" +#. module: website_crm +#: code:addons/website_crm/controllers/main.py:57 +#, python-format +msgid "Previous Leads" +msgstr "" + +#. module: website_crm +#: code:addons/website_crm/controllers/main.py:65 +#, python-format +msgid "Source" +msgstr "" + #. module: website_crm #: model:ir.ui.view,arch_db:website_crm.contactus_form msgid "Subject" diff --git a/addons/website_sale/controllers/backend.py b/addons/website_sale/controllers/backend.py index 53bd7054e97..8da7686b417 100644 --- a/addons/website_sale/controllers/backend.py +++ b/addons/website_sale/controllers/backend.py @@ -58,11 +58,11 @@ class WebsiteSaleBackend(WebsiteBackend): 'graph': [ { 'values': sales_graph, - 'key': 'Sales', + 'key': _('Sales'), }, { 'values': previous_sales_graph, - 'key': 'Previous Sales', + 'key': _('Previous Sales'), }, ], 'best_sellers': best_sellers, diff --git a/addons/website_sale/i18n/website_sale.pot b/addons/website_sale/i18n/website_sale.pot index 6c8a8a82837..0a294b0d447 100644 --- a/addons/website_sale/i18n/website_sale.pot +++ b/addons/website_sale/i18n/website_sale.pot @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 10.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-12-09 13:04+0000\n" -"PO-Revision-Date: 2016-12-09 13:04+0000\n" +"POT-Creation-Date: 2017-06-26 14:46+0000\n" +"PO-Revision-Date: 2017-06-26 14:46+0000\n" "Last-Translator: <>\n" "Language-Team: \n" "MIME-Version: 1.0\n" @@ -559,6 +559,7 @@ msgid "Abandonned eCommerce Orders" msgstr "" #. module: website_sale +#: model:ir.model.fields,help:website_sale.field_delivery_carrier_accessory_product_ids #: model:ir.model.fields,help:website_sale.field_product_product_accessory_product_ids #: model:ir.model.fields,help:website_sale.field_product_template_accessory_product_ids msgid "Accessories show up when the customer reviews the cart before paying (cross-sell strategy, e.g. for computers: mouse, keyboard, etc.). An algorithm figures out a list of accessories based on all the products added to cart." @@ -570,6 +571,7 @@ msgid "Accessories: screen, mouse" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_accessory_product_ids #: model:ir.model.fields,field_description:website_sale.field_product_product_accessory_product_ids #: model:ir.model.fields,field_description:website_sale.field_product_template_accessory_product_ids msgid "Accessory Products" @@ -606,6 +608,7 @@ msgid "Address" msgstr "" #. module: website_sale +#: model:ir.model.fields,help:website_sale.field_delivery_carrier_availability #: model:ir.model.fields,help:website_sale.field_product_product_availability #: model:ir.model.fields,help:website_sale.field_product_template_availability msgid "Adds an availability status on the web product page." @@ -639,6 +642,7 @@ msgid "Allows to manage different prices based on rules per category of customer msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_alternative_product_ids #: model:ir.model.fields,field_description:website_sale.field_product_product_alternative_product_ids #: model:ir.model.fields,field_description:website_sale.field_product_template_alternative_product_ids msgid "Alternative Products" @@ -667,12 +671,14 @@ msgid "Apply multi-currencies" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_availability #: model:ir.model.fields,field_description:website_sale.field_product_product_availability #: model:ir.model.fields,field_description:website_sale.field_product_template_availability msgid "Availability" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_availability_warning #: model:ir.model.fields,field_description:website_sale.field_product_product_availability_warning #: model:ir.model.fields,field_description:website_sale.field_product_template_availability_warning msgid "Availability Warning" @@ -732,6 +738,7 @@ msgid "Categories are used to browse your products through the\n" msgstr "" #. module: website_sale +#: model:ir.model.fields,help:website_sale.field_delivery_carrier_public_categ_ids #: model:ir.model.fields,help:website_sale.field_product_product_public_categ_ids #: model:ir.model.fields,help:website_sale.field_product_template_public_categ_ids msgid "Categories can be published on the Shop page (online catalog grid) to help customers find all the items within a category. To publish them, go to the Shop page, hit Customize and turn *Product Categories* on. A product can belong to several categories." @@ -983,12 +990,7 @@ msgid "Depending on your state or country, you are required to collect sales tax msgstr "" #. module: website_sale -#: model:ir.model.fields,field_description:website_sale.field_product_product_website_description -#: model:ir.model.fields,field_description:website_sale.field_product_template_website_description -msgid "Description for the website" -msgstr "" - -#. module: website_sale +#: model:ir.model.fields,help:website_sale.field_delivery_carrier_website_sequence #: model:ir.model.fields,help:website_sale.field_product_product_website_sequence #: model:ir.model.fields,help:website_sale.field_product_template_website_sequence msgid "Determine the display order in the Website E-commerce" @@ -1214,6 +1216,7 @@ msgid "Image Name" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_product_image_ids #: model:ir.model.fields,field_description:website_sale.field_product_product_product_image_ids #: model:ir.model.fields,field_description:website_sale.field_product_template_product_image_ids #: model:ir.ui.view,arch_db:website_sale.product_template_form_view @@ -1297,6 +1300,7 @@ msgstr "" #. module: website_sale #: model:ir.model.fields,field_description:website_sale.field_res_partner_last_website_so_id +#: model:ir.model.fields,field_description:website_sale.field_res_users_last_website_so_id msgid "Last Online Sale Order" msgstr "" @@ -1619,6 +1623,12 @@ msgstr "" msgid "Prefered by some customers" msgstr "" +#. module: website_sale +#: code:addons/website_sale/controllers/backend.py:65 +#, python-format +msgid "Previous Sales" +msgstr "" + #. module: website_sale #: model:ir.ui.view,arch_db:website_sale.cart_lines #: model:ir.ui.view,arch_db:website_sale.payment @@ -1814,25 +1824,23 @@ msgstr "" #. module: website_sale #: model:ir.model,name:website_sale.model_rating_rating +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_rating_ids #: model:ir.model.fields,field_description:website_sale.field_product_product_rating_ids msgid "Rating" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_rating_last_value #: model:ir.model.fields,field_description:website_sale.field_product_product_rating_last_value msgid "Rating Last Value" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_rating_count #: model:ir.model.fields,field_description:website_sale.field_product_product_rating_count msgid "Rating count" msgstr "" -#. module: website_sale -#: model:ir.model.fields,help:website_sale.field_product_product_rating_last_value -msgid "Rating value: 0=Unhappy, 10=Happy" -msgstr "" - #. module: website_sale #: model:ir.model.fields,field_description:website_sale.field_product_image_product_tmpl_id msgid "Related Product" @@ -1858,6 +1866,12 @@ msgstr "" msgid "Sale" msgstr "" +#. module: website_sale +#: code:addons/website_sale/controllers/backend.py:61 +#, python-format +msgid "Sales" +msgstr "" + #. module: website_sale #. openerp-web #: code:addons/website_sale/static/src/xml/website_sale_dashboard.xml:9 @@ -2104,12 +2118,14 @@ msgid "Size" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_website_size_x #: model:ir.model.fields,field_description:website_sale.field_product_product_website_size_x #: model:ir.model.fields,field_description:website_sale.field_product_template_website_size_x msgid "Size X" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_website_size_y #: model:ir.model.fields,field_description:website_sale.field_product_product_website_size_y #: model:ir.model.fields,field_description:website_sale.field_product_template_website_size_y msgid "Size Y" @@ -2193,6 +2209,7 @@ msgid "Style Name" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_website_style_ids #: model:ir.model.fields,field_description:website_sale.field_product_product_website_style_ids #: model:ir.model.fields,field_description:website_sale.field_product_template_website_style_ids #: model:ir.ui.view,arch_db:website_sale.website_sale @@ -2210,6 +2227,7 @@ msgid "Subtotal:" msgstr "" #. module: website_sale +#: model:ir.model.fields,help:website_sale.field_delivery_carrier_alternative_product_ids #: model:ir.model.fields,help:website_sale.field_product_product_alternative_product_ids #: model:ir.model.fields,help:website_sale.field_product_template_alternative_product_ids msgid "Suggest more expensive alternatives to your customers (upsell strategy). Those products show up on the product page." @@ -2291,6 +2309,7 @@ msgid "The first step is to set up your company's information. This is used in s msgstr "" #. module: website_sale +#: model:ir.model.fields,help:website_sale.field_delivery_carrier_website_url #: model:ir.model.fields,help:website_sale.field_product_product_website_url msgid "The full URL to access the document through the website." msgstr "" @@ -2409,6 +2428,7 @@ msgid "View Cart (" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_website_published #: model:ir.model.fields,field_description:website_sale.field_product_product_website_published msgid "Visible in Website" msgstr "" @@ -2435,6 +2455,7 @@ msgid "Website Categories" msgstr "" #. module: website_sale +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_website_message_ids #: model:ir.model.fields,field_description:website_sale.field_product_product_website_message_ids #: model:ir.model.fields,field_description:website_sale.field_product_template_website_message_ids msgid "Website Comments" @@ -2448,6 +2469,7 @@ msgstr "" #. module: website_sale #: model:ir.model,name:website_sale.model_product_public_category +#: model:ir.model.fields,field_description:website_sale.field_delivery_carrier_public_categ_ids #: model:ir.model.fields,field_description:website_sale.field_product_product_public_categ_ids #: model:ir.model.fields,field_description:website_sale.field_product_template_public_categ_ids msgid "Website Product Category"