Skip to Content
Menu
Musisz się zarejestrować, aby móc wchodzić w interakcje z tą społecznością.
To pytanie dostało ostrzeżenie
1 Odpowiedz
5985 Widoki

Hi  My  friend,

      i want to create a  function  that when user click the button will  popup  a  form that let the user click the url  to  download the excel  file.  following is my code , it can  create the excel  file  and write to the binary  field,  but the popup  form  doesn't  show up .  what is wrong  with my code?


Thank you !

following is my code:

1.  define the button

<button name="export_excel" type="object" string="Create Reports"/>

2. define view

<record id="excel_download_form" model="ir.ui.view">

     <field name="name">Export Excel</field>

     <field name="model">excel.report</field>

     <field name="arch" type="xml">

        <form create="0" string="Excel Report">

           <group>

               <field name="file_name" invisible="1"/>

               <field name="excel_file" readonly="1" filename="file_name" nolabel="1"/>

           </group>

           <footer>

               <button special="cancel" string="Cancel" type="object" class="btn-default"/>

           </footer>

         </form>

      </field>

  </record>

<record id="excel_form_view" model="ir.actions.act_window">

            <field name="name">Export Report</field>

            <field name="view_id" ref="excel_download_form"/>

            <field name="type">ir.actions.act_window</field>

            <field name="res_model">excel.report</field>

            <field name="view_type">form</field>

            <field name="view_mode">form</field>

            <field name="target">new</field>

        </record>

3.  python  class ( the issue is  when function export_excel finishing executing,  return  doesn't show the popup  form)

class excel_report(models.TransientModel):

    _name = "excel.report"

    excel_file = fields.Binary('Download Excel Report')

    file_name = fields.Char('File Name')

    @api.multi

    def export_excel(self):

        filename= 'report.xls'

        workbook= xlwt.Workbook(encoding="UTF-8")

        worksheet= workbook.add_sheet('Excel Report')

        worksheet.write(0,0,'test  data')

        fp = StringIO.StringIO()

        workbook.save(fp)

        fp.seek(0)

        export_id = self.env['excel.report'].create({'excel_file': base64.encodestring(fp.getvalue()),'file_name': filename})

        fp.close()

        return {

           'view_mode': 'form',

    'res_id': export_id,

    'res_model': 'excel.report',

    'view_type': 'form',

    'type': 'ir.actions.act_window',

    'target': 'new',

       }

Awatar
Odrzuć
Najlepsza odpowiedź

Try this


import xlwt import xlrd import os import win32com.client import base64 from datetime import datetime from odoo import tools from odoo import fields, models, api ADDONS_PATH = tools.config['addons_path'].split(",")[-1]

class CreateReport(models.Model):

    _inherit = "purchase.order"

    @api.multi

    def action_wizard_open(self):

        context = dict(self.env.context or {})

        self.ensure_one()

        context.update({'act_id':self.id})

        return {

                'type': 'ir.actions.act_window',

                'view_type' : 'form',

                'view_mode' : 'form',

                'res_model' : 'report.wizard',

                'target' : 'new',

                'context' : context,

            }

class PaymentWizard(models.TransientModel):

    _name = 'report.wizard'

    _description = 'Report Details'

    attachment = fields.Binary('File', nodrop=True, readonly= True)

    attach_name = fields.Char('Attachment Name')

    @api.multi

    def get_values(self):

        context = dict(self.env.context or {})

        vals = context.get('act_id')

        purchase = {}

        purchase_value = []

        rec = self.env['purchase.order'].search([('id','=',vals)])

        purchase['date_planned'] = rec.date_planned

        purchase['picking_type_id'] = rec.picking_type_id.name

        purchase['invoice_status'] = rec.invoice_status

        purchase['payment_term_id'] = rec.payment_term_id.id

        purchase['details'] = rec.name

        purchase['reference'] = rec.partner_id.name

        for line in rec.order_line:

            order = {}

            order['product_id'] = line.product_id.name

            order['name'] = line.name

            order['date_planned'] = line.date_planned

            order['company_id'] = line.company_id.name

            order['product_qty'] = line.product_qty

            order['qty_received'] = line.qty_received

            order['qty_invoiced'] = line.qty_invoiced

            order['price_unit'] = line.price_unit

            order['taxes_id'] = line.taxes_id.name

            order['price_subtotal'] = line.price_subtotal

            purchase_value.append(order)

        purchase['orders'] = purchase_value

        style0 = xlwt.easyxf('font: name Times New Roman, bold on; pattern: pattern solid, fore_colour white;', num_format_str='#,##0.00')

        style1 = xlwt.easyxf('font: name Times New Roman, bold 1,height 250; pattern: pattern solid, fore_colour aqua;', num_format_str='#,##0.00')

        workbook = xlwt.Workbook()

        sheet = workbook.add_sheet('Purchase Order Report')

        sheet.write_merge(1, 1, 2, 5, 'Purchase No.', style1)

        sheet.write_merge(1, 1, 6, 7, purchase['details'], style1)

        sheet.write(3, 2, 'Vendor Name', style0)

        sheet.write(3, 4, purchase['reference'], style0)

        sheet.write(4, 2, 'Scheduled Date', style0)

        sheet.write(4, 4, purchase['date_planned'], style0)

        sheet.write(5, 2, 'Deliver To', style0)

        sheet.write(5, 4, purchase['picking_type_id'], style0)

        sheet.write(6, 2, 'Bill Status', style0)

        sheet.write(6, 4, purchase['invoice_status'], style0)

        sheet.write(7, 2, 'Payments', style0)

        sheet.write(7, 4, purchase['payment_term_id'], style0)

        sheet.write_merge(9, 9, 1, 2, 'Product', style1)

        sheet.write_merge(9, 9, 3, 4,'Description', style1)

        sheet.write_merge(9, 9, 5, 6,'Date', style1)

        sheet.write_merge(9, 9, 7, 8, 'Company', style1)

        sheet.write_merge(9, 9, 9, 10, 'Quantity', style1)

        sheet.write_merge(9, 9, 11, 12, 'Unit Price', style1)

        n = 10

        for order in purchase['orders']:

            sheet.write_merge(n, n, 1, 2, order['product_id'], style0)

            sheet.write_merge(n, n, 3, 4, order['name'], style0)

            sheet.write_merge(n, n, 5, 6, order['date_planned'], style0)

            sheet.write_merge(n, n, 7, 8, order['company_id'], style0)

            sheet.write_merge(n, n, 9, 10, order['product_qty'], style0)

            sheet.write_merge(n, n, 11, 12, order['price_unit'], style0)

            n += 1

        ams_time = datetime.now()

        date = ams_time.strftime('%m-%d-%Y %H.%M.%S')

        filename = os.path.join(ADDONS_PATH, 'Report'+ '-' + date +'.xls')

        workbook.save(filename)

        fp = open(filename, "rb")

        file_data =fp.read()

        out = base64.encodestring(file_data)

# excel = win32com.client.Dispatch(filename)

# workbook = excel.Workbooks.open(')

# workbook.SaveAs('unencrypted.xls')

        attach_vals = {

                'attach_name': 'Report'+ '-' + date +'.xls',

                'attachment': out,

            }

        fp.close()

        os.remove(filename)

        self.write(attach_vals)

        return {

        'type': 'ir.actions.act_window',

        'name': ('Report'),

        'res_model': 'report.wizard',

           'res_id': self[0].id,

            'view_type': 'form',

            'view_mode': 'form',

            'target': 'new',

            'nodestroy': True,

        }

Awatar
Odrzuć