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