Skip to Content
เมนู
คุณต้องลงทะเบียนเพื่อโต้ตอบกับคอมมูนิตี้
คำถามนี้ถูกตั้งค่าสถานะ
1 ตอบกลับ
5995 มุมมอง

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',

       }

อวตาร
ละทิ้ง
คำตอบที่ดีที่สุด

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,

        }

อวตาร
ละทิ้ง