diff --git a/addons/purchase/__init__.py b/addons/purchase/__init__.py index 2609681a938..5905766d867 100644 --- a/addons/purchase/__init__.py +++ b/addons/purchase/__init__.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. +from . import controllers from . import models from . import report diff --git a/addons/purchase/__manifest__.py b/addons/purchase/__manifest__.py index ac28acc6a60..689729b62a6 100644 --- a/addons/purchase/__manifest__.py +++ b/addons/purchase/__manifest__.py @@ -26,6 +26,7 @@ 'data/mail_template_data.xml', 'views/purchase_config_settings_views.xml', 'views/account_config_settings_views.xml', + 'views/portal_templates.xml', 'report/purchase_order_templates.xml', 'report/purchase_quotation_templates.xml', ], diff --git a/addons/website_portal_purchase/models/__init__.py b/addons/purchase/controllers/__init__.py similarity index 81% rename from addons/website_portal_purchase/models/__init__.py rename to addons/purchase/controllers/__init__.py index 41d97a90eb4..903b755e71e 100644 --- a/addons/website_portal_purchase/models/__init__.py +++ b/addons/purchase/controllers/__init__.py @@ -1,4 +1,4 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. -from . import purchase +from . import portal diff --git a/addons/website_portal_purchase/controllers/website_portal.py b/addons/purchase/controllers/portal.py similarity index 91% rename from addons/website_portal_purchase/controllers/website_portal.py rename to addons/purchase/controllers/portal.py index 4694cc541c3..2e8c77bbfa3 100644 --- a/addons/website_portal_purchase/controllers/website_portal.py +++ b/addons/purchase/controllers/portal.py @@ -8,13 +8,13 @@ from odoo.exceptions import AccessError from odoo.http import request from odoo.tools import pycompat from odoo.tools.translate import _ -from odoo.addons.portal.controllers.portal import get_records_pager, CustomerPortal +from odoo.addons.portal.controllers.portal import get_records_pager, pager as portal_pager, CustomerPortal -class WebsitePortal(CustomerPortal): +class CustomerPortal(CustomerPortal): def _prepare_portal_layout_values(self): - values = super(WebsitePortal, self)._prepare_portal_layout_values() + values = super(CustomerPortal, self)._prepare_portal_layout_values() partner = request.env.user.partner_id values['purchase_count'] = request.env['purchase.order'].search_count([ '|', @@ -64,7 +64,7 @@ class WebsitePortal(CustomerPortal): # count for pager purchase_count = PurchaseOrder.search_count(domain) # make pager - pager = request.website.pager( + pager = portal_pager( url="/my/purchase", url_args={'date_begin': date_begin, 'date_end': date_end}, total=purchase_count, @@ -92,7 +92,7 @@ class WebsitePortal(CustomerPortal): 'filterby': filterby, 'default_url': '/my/purchase', }) - return request.render("website_portal_purchase.portal_my_purchase_orders", values) + return request.render("purchase.portal_my_purchase_orders", values) @http.route(['/my/purchase/'], type='http', auth="user", website=True) def portal_my_purchase_order(self, order_id=None, **kw): @@ -101,10 +101,10 @@ class WebsitePortal(CustomerPortal): order.check_access_rights('read') order.check_access_rule('read') except AccessError: - return request.render("website.403") + return request.redirect('/my') history = request.session.get('my_purchases_history', []) values = { 'order': order.sudo(), } values.update(get_records_pager(history, order)) - return request.render("website_portal_purchase.portal_my_purchase_order", values) + return request.render("purchase.portal_my_purchase_order", values) diff --git a/addons/purchase/models/purchase.py b/addons/purchase/models/purchase.py index 9c8c9b00f57..6334dfc6b5c 100644 --- a/addons/purchase/models/purchase.py +++ b/addons/purchase/models/purchase.py @@ -163,6 +163,14 @@ class PurchaseOrder(models.Model): group_id = fields.Many2one('procurement.group', string="Procurement Group", copy=False) is_shipped = fields.Boolean(compute="_compute_is_shipped") + website_url = fields.Char( + 'Website URL', compute='_website_url', + help='The full URL to access the document through the website.') + + def _website_url(self): + for order in self: + order.website_url = '/my/purchase/%s' % (order.id) + @api.model def name_search(self, name, args=None, operator='ilike', limit=100): args = args or [] @@ -595,6 +603,9 @@ class PurchaseOrderLine(models.Model): taxes_id = fields.Many2many('account.tax', string='Taxes', domain=['|', ('active', '=', False), ('active', '=', True)]) product_uom = fields.Many2one('product.uom', string='Product Unit of Measure', required=True) product_id = fields.Many2one('product.product', string='Product', domain=[('purchase_ok', '=', True)], change_default=True, required=True) + product_image = fields.Binary( + 'Product Image', related="product_id.image", + help="Non-stored related field to allow portal user to see the image of the product he has ordered") move_ids = fields.One2many('stock.move', 'purchase_line_id', string='Reservation', readonly=True, ondelete='set null', copy=False) price_unit = fields.Float(string='Unit Price', required=True, digits=dp.get_precision('Product Price')) diff --git a/addons/purchase/security/ir.model.access.csv b/addons/purchase/security/ir.model.access.csv index 713e10ca488..8a1bb0e2943 100644 --- a/addons/purchase/security/ir.model.access.csv +++ b/addons/purchase/security/ir.model.access.csv @@ -3,10 +3,12 @@ access_purchase_order,purchase.order,model_purchase_order,group_purchase_user,1, access_purchase_order_manager,purchase.order,model_purchase_order,group_purchase_manager,1,1,1,1 access_purchase_order_stock_worker,purchase.order,model_purchase_order,stock.group_stock_user,1,0,0,0 access_purchase_order_invoicing_payments,purchase.order,model_purchase_order,account.group_account_invoice,1,1,0,0 +access_purchase_order_portal,purchase.order.portal,purchase.model_purchase_order,base.group_portal,1,0,0,0 access_purchase_order_line,purchase.order.line user,model_purchase_order_line,group_purchase_user,1,1,1,1 access_purchase_order_line_manager,purchase.order.line,model_purchase_order_line,group_purchase_manager,1,1,1,1 access_purchase_order_line_stock_worker,purchase.order.line,model_purchase_order_line,stock.group_stock_user,1,0,0,0 access_purchase_order_line_invoicing_payments,purchase.order.line,model_purchase_order_line,account.group_account_invoice,1,1,0,0 +access_purchase_order_line_portal,purchase.order.line.portal,purchase.model_purchase_order_line,base.group_portal,1,0,0,0 access_stock_location_purchase_user,stock.location,stock.model_stock_location,group_purchase_user,1,0,0,0 access_stock_warehouse_purchase_user,stock.warehouse,stock.model_stock_warehouse,group_purchase_user,1,0,0,0 access_stock_picking_purchase_user,stock.picking,stock.model_stock_picking,group_purchase_user,1,1,1,1 diff --git a/addons/purchase/security/purchase_security.xml b/addons/purchase/security/purchase_security.xml index 1416745a8bb..4e87a129066 100644 --- a/addons/purchase/security/purchase_security.xml +++ b/addons/purchase/security/purchase_security.xml @@ -51,5 +51,22 @@ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])] + + Portal Purchase Orders + + [('message_partner_ids','child_of',[user.commercial_partner_id.id])] + + + + + + + + + Portal Purhcase Orders Line + + [('order_id.message_partner_ids','child_of',[user.commercial_partner_id.id])] + + diff --git a/addons/website_portal_purchase/views/website_portal_purchase_templates.xml b/addons/purchase/views/portal_templates.xml similarity index 99% rename from addons/website_portal_purchase/views/website_portal_purchase_templates.xml rename to addons/purchase/views/portal_templates.xml index 9c6f6acb9e6..4040abefd90 100644 --- a/addons/website_portal_purchase/views/website_portal_purchase_templates.xml +++ b/addons/purchase/views/portal_templates.xml @@ -54,7 +54,7 @@
- +
diff --git a/addons/website_portal_purchase/__init__.py b/addons/website_portal_purchase/__init__.py index 7d34c7c054a..67dee8c60db 100644 --- a/addons/website_portal_purchase/__init__.py +++ b/addons/website_portal_purchase/__init__.py @@ -1,5 +1,2 @@ # -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. - -from . import controllers -from . import models diff --git a/addons/website_portal_purchase/__manifest__.py b/addons/website_portal_purchase/__manifest__.py index 5e99ea91d51..18a73b54960 100644 --- a/addons/website_portal_purchase/__manifest__.py +++ b/addons/website_portal_purchase/__manifest__.py @@ -15,9 +15,6 @@ Display purchase orders on your website. Customers will be able to access their 'portal', ], 'data': [ - 'views/website_portal_purchase_templates.xml', - 'security/ir.model.access.csv', - 'security/website_portal_purchase_security.xml', ], 'installable': True, } diff --git a/addons/website_portal_purchase/controllers/__init__.py b/addons/website_portal_purchase/controllers/__init__.py deleted file mode 100644 index 4554440ea0b..00000000000 --- a/addons/website_portal_purchase/controllers/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from . import website_portal diff --git a/addons/website_portal_purchase/models/purchase.py b/addons/website_portal_purchase/models/purchase.py deleted file mode 100644 index 10e55775c21..00000000000 --- a/addons/website_portal_purchase/models/purchase.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from odoo import fields, models - - -class PurchaseOrder(models.Model): - - _inherit = 'purchase.order' - - website_url = fields.Char('Website URL', compute='_website_url', help='The full URL to access the document through the website.') - - def _website_url(self): - for order in self: - order.website_url = '/my/purchase/%s' % (order.id) - - -class PurchaseOrderLine(models.Model): - - _inherit = 'purchase.order.line' - - # Non-stored related field to allow portal user to see the image of the product he has ordered - product_image = fields.Binary('Product Image', related="product_id.image") diff --git a/addons/website_portal_purchase/security/ir.model.access.csv b/addons/website_portal_purchase/security/ir.model.access.csv deleted file mode 100644 index 1405075a7a6..00000000000 --- a/addons/website_portal_purchase/security/ir.model.access.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_purchase_order_portal,purchase.order.portal,purchase.model_purchase_order,base.group_portal,1,0,0,0 -access_purchase_order_line_portal,purchase.order.line.portal,purchase.model_purchase_order_line,base.group_portal,1,0,0,0 diff --git a/addons/website_portal_purchase/security/website_portal_purchase_security.xml b/addons/website_portal_purchase/security/website_portal_purchase_security.xml deleted file mode 100644 index d689d887377..00000000000 --- a/addons/website_portal_purchase/security/website_portal_purchase_security.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - Portal Purchase Orders - - [('message_partner_ids','child_of',[user.commercial_partner_id.id])] - - - - - - - - - Portal Purhcase Orders Line - - [('order_id.message_partner_ids','child_of',[user.commercial_partner_id.id])] - - - - -