| Availability | 
                            
                             Odoo Online
                              Odoo.sh  On Premise | 
| Technical Name | 
                    download_file_widget | 
| Versions | 10.0 13.0 14.0 | 
Custom Download File Widget
Widget to download a custom file from a form's view...
 
            How to use
In your model, for example:
# -*- coding: utf-8 -*-
from StringIO import StringIO
from docx import Document
from odoo import api, models
class TestDownloadCustomFile(models.Model):
    _name = 'download_file_widget.test_custom_download'
    _description = 'Testing custom file download'
    @api.model
    def get_filename(self):
        return 'word_document.docx'
    @api.model
    def get_file(self):
        """ Method to create your .docx file... """
        document = Document()
        p_name = document.add_paragraph('')
        p_name.add_run('You must create your document...').bold = True
        target_stream = StringIO()
        document.save(target_stream)
        return target_stream.getvalue()
    @api.model
    def get_content_type(self):
        return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8;'
                
            
        Or if you need an excel document, for example:
# -*- coding: utf-8 -*-
import cStringIO
import xlwt
from odoo import api, models
class TestDownloadCustomFile(models.Model):
    _name = 'download_file_widget.test_custom_download'
    _description = 'Testing custom file download'
    @api.model
    def get_filename(self):
        return 'excel_document.xls'
    @api.model
    def get_file(self):
        """ Method to create your .xls file... """
        workbook = xlwt.Workbook()
        worksheet = workbook.add_sheet('Page1')
        worksheet.write(0, 0, 'You must create your document...')
        output = cStringIO.StringIO()
        workbook.save(output)
        output.seek(0)
        data = output.read()
        output.close()
        return data
    @api.model
    def get_content_type(self):
        return 'application/vnd.ms-excel'
                
            
            In the xml definition you should write something like that:
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <data>
        <record id="download_file_widget_test_form_view" model="ir.ui.view">
            <field name="name">download_file_widget_test_form_view</field>
            <field name="model">download_file_widget.test_custom_download</field>
            <field name="arch" type="xml">
                <form>
                    <sheet>
                        <widget string="Download Custom Document..."
                                model="download_file_widget.test_custom_download"
                                type="download_file"
                        />
                    </sheet>
                </form>
            </field>
        </record>
        <record id="download_file_widget_test_action" model="ir.actions.act_window">
            <field name="name">Custom Download File</field>
            <field name="res_model">download_file_widget.test_custom_download</field>
            <field name="view_type">form</field>
            <field name="view_mode">form</field>
        </record>
        <menuitem name="Custom Download File"
                  id="download_file_widget_test_menu_item"
                  action="download_file_widget_test_action"
                  sequence="1"/>
    </data>
</odoo>
                
            
        Alejandro Cora Gonzalez
        alek.cora.glez@gmail.com
    
Please log in to comment on this module