Skip to Content
Menu
This question has been flagged
2 Replies
666 Views

Hi good day everyone!,


Hoping you are fine. I just want to ask on how can I add an edit button or how an odoo 10 report can be editable in print preview.


Thank you very much in advance.


Sincerely yours,

Avatar
Discard
Author Best Answer

Thank you very much for your answer.

Avatar
Discard
Best Answer

In Odoo 10, adding an "Edit" button to a QWeb report's print preview requires custom development because Odoo's QWeb reports are inherently designed to generate static PDF documents for printing or exporting. However, you can implement a solution by either embedding the "Edit" functionality into the report view or redirecting users to the form view of the record from which the report is generated.

Here’s how you can achieve this:

Option 1: Add an "Edit" Button to the HTML Web Preview

Odoo’s print preview before downloading or printing a PDF is rendered as HTML. You can inject an "Edit" button that redirects users back to the edit form of the record.

Steps:

  1. Locate the QWeb Template:
    • Find the report template in the custom module or Odoo's built-in addons. Typically, it is located in the views folder of the module and defined in an XML file.
    • For example, if your report is named "sale_order.report_saleorder_document," locate this template.
  2. Add the "Edit" Button in the QWeb Report: Add an "Edit" button at the top or desired location within the QWeb template.
    <t t-call="web.html_container">
        <t t-foreach="docs" t-as="doc">
            <div>
                <!-- Edit Button -->
                <button 
                    type="button" 
                    class="btn btn-primary" 
                    onclick="window.location.href='/web#id=%d&view_type=form&model=sale.order'" t-esc="doc.id">
                    Edit
                </button>
            </div>
        </t>
    </t>
    

    Explanation:

    • The button uses JavaScript to redirect the user back to the form view of the record.
    • Replace sale.order with the model name of the record the report is generated for.
  3. Add Logic to Make Button Conditional (Optional): If you want the "Edit" button to appear only for users with specific access rights:
    <t t-if="user.has_group('base.group_user')">
        <button type="button" class="btn btn-primary" onclick="...">Edit</button>
    </t>
    
  4. Reload the Report:
    • Restart your Odoo server.
    • Open the report and confirm the "Edit" button appears as expected.

Option 2: Make the Report Directly Editable

If you want to allow inline editing of certain fields directly in the report view, you can:

  1. Use JavaScript and CSS to render editable fields.
  2. Submit the edited data to the backend when saved.

Example Implementation:

  1. Add Editable Fields in QWeb:
    <div contenteditable="true" data-field="customer_name" data-id="t-esc="doc.id">
        <t t-esc="doc.partner_id.name"/>
    </div>
    
  2. Save Changes via JavaScript: Add a button to save the changes and send them to the server:
    <button onclick="saveChanges()">Save</button>
    <script>
        function saveChanges() {
            var data = document.querySelector('[data-field="customer_name"]').innerText;
            var recordId = document.querySelector('[data-field="customer_name"]').dataset.id;
            fetch('/save/field', {
                method: 'POST',
                body: JSON.stringify({ id: recordId, field: 'partner_id', value: data }),
                headers: { 'Content-Type': 'application/json' },
            }).then(response => {
                if (response.ok) alert('Saved successfully!');
            });
        }
    </script>
    
  3. Implement Backend Logic: Create a controller in Odoo to handle the data submission.
    from odoo import http
    from odoo.http import request
    
    class ReportController(http.Controller):
        @http.route('/save/field', type='json', auth='user')
        def save_field(self, **kwargs):
            record = request.env['sale.order'].browse(kwargs.get('id'))
            if record.exists():
                record.write({kwargs.get('field'): kwargs.get('value')})
            return {'status': 'success'}
    

Option 3: Redirect Users from the Report Action

Add an "Edit" button outside the report preview (e.g., in the action menu).

Steps:

  1. Create a new server action to redirect users back to the record's form view.
  2. Use Python code to trigger this action.

Considerations

  1. Security:
    • Ensure that only authorized users can edit records.
    • Validate inputs on the server-side to prevent malicious data submissions.
  2. User Experience:
    • If you’re embedding editable fields directly in the report, ensure they are intuitive and responsive.
  3. Customization Limitation:
    • For heavily customized reports, consider building a custom widget for in-place editing.

By following these methods, you can add an "Edit" button or make the report preview editable in Odoo 10. Let me know if you need further guidance or specific implementation details!

Avatar
Discard
Related Posts Replies Views Activity
0
Feb 25
516
0
Jul 24
722
0
Aug 23
1121
0
May 23
2391
2
Oct 22
1708