# -*- encoding: utf-8 -*- from openerp import fields, models, api import time from cStringIO import StringIO import base64 import xlsxwriter HEADER = [ 'Num. Coop', 'Nom', 'Email', 'Banque', 'Mobile', 'Adresse', 'Rue', 'Code Postal', 'Ville', 'Pays', 'Nombre de part total', 'Montant total des parts', 'Demande de liberation de capital', 'Communication', 'Nombre de part', 'Montant', 'Reception du paiement', 'Date de la souscription' ] HEADER2 = [ 'Date de la souscription', 'Nom', 'Type', 'Nombre de part', 'Montant', 'Statut', 'Email', 'Mobile', 'Adresse', 'Code Postal', 'Ville', 'Pays', ] class export_global_report(models.TransientModel): _name = 'export.global.report' name = fields.Char('Name') def write_header(self, worksheet, headers): i = 0 for header in headers: worksheet.write(0, i, header) i += 1 return True @api.multi def export_global_report_xlsx(self): partner_obj = self.env['res.partner'] invoice_obj = self.env['account.invoice'] subscription_obj = self.env['subscription.request'] file_data = StringIO() workbook = xlsxwriter.Workbook(file_data) worksheet1 = workbook.add_worksheet() self.write_header(worksheet1, HEADER) cooperators = partner_obj.search([('cooperator', '=', True), ('member', '=', True)]) j = 1 for coop in cooperators: i = 0 worksheet1.write(j, i, coop.cooperator_register_number) i += 1 worksheet1.write(j, i, coop.name) i += 1 worksheet1.write(j, i, coop.email) i += 1 acc_number = "" if coop.bank_ids: acc_number = coop.bank_ids[0].acc_number worksheet1.write(j, i, acc_number) i += 1 worksheet1.write(j, i, coop.phone) i += 1 address = coop.street + ' ' + coop.zip + ' ' \ + coop.city + ' ' + coop.country_id.name worksheet1.write(j, i, address) i += 1 worksheet1.write(j, i, coop.street) i += 1 worksheet1.write(j, i, int(coop.zip)) i += 1 worksheet1.write(j, i, coop.city) i += 1 worksheet1.write(j, i, coop.country_id.name) i += 1 worksheet1.write(j, i, coop.number_of_share) i += 1 worksheet1.write(j, i, coop.total_value) invoice_ids = invoice_obj.search([('release_capital_request', '=', True), ('partner_id', '=', coop.id)]) j += 1 for invoice in invoice_ids: i = 11 worksheet1.write(j, i, invoice.number) i += 1 worksheet1.write(j, i, invoice.state) i += 1 worksheet1.write(j, i, invoice.date_invoice) i += 1 worksheet1.write(j, i, invoice.reference) i += 1 for line in invoice.invoice_line_ids: worksheet1.write(j, i, line.quantity) i += 1 worksheet1.write(j, i, line.price_subtotal) i += 1 if invoice.payment_move_line_ids: worksheet1.write(j, i, invoice.payment_move_line_ids[0].date) i += 1 if invoice.subscription_request: ind = len(invoice.subscription_request)-1 worksheet1.write(j, i, invoice.subscription_request[ind].date) j += 1 sub_requests = subscription_obj.search([('state', 'in', ['draft', 'waiting']), ('partner_id', '=', coop.id) ]) for sub_request in sub_requests: i = 11 worksheet1.write(j, i, dict(subscription_obj._columns['type'].selection).get(sub_request.type,False)) i += 1 worksheet1.write(j, i, sub_request.state) i += 3 quantity = int(sub_request.ordered_parts) worksheet1.write(j, i, quantity) i += 1 amount = quantity * sub_request.share_unit_price worksheet1.write(j, i, amount) i += 2 worksheet1.write(j, i, sub_request.date) j += 1 worksheet1bis = workbook.add_worksheet() self.write_header(worksheet1bis, HEADER) cooperators = partner_obj.search([('cooperator', '=', True), ('member', '=', False)]) j = 1 for coop in cooperators: i = 0 worksheet1bis.write(j, i, coop.cooperator_register_number) i += 1 worksheet1bis.write(j, i, coop.national_register_number) i += 1 worksheet1bis.write(j, i, coop.name) i += 1 worksheet1bis.write(j, i, coop.email) i += 1 worksheet1bis.write(j, i, coop.phone) i += 1 worksheet1bis.write(j, i, coop.street) i += 1 worksheet1bis.write(j, i, int(coop.zip)) i += 1 worksheet1bis.write(j, i, coop.city) i += 1 worksheet1bis.write(j, i, coop.country_id.name) i += 1 worksheet1bis.write(j, i, coop.number_of_share) i += 1 worksheet1bis.write(j, i, coop.total_value) invoice_ids = invoice_obj.search([('release_capital_request', '=', True), ('partner_id', '=', coop.id)]) j += 1 for invoice in invoice_ids: i = 11 worksheet1bis.write(j, i, invoice.number) i += 1 worksheet1bis.write(j, i, invoice.state) i += 1 worksheet1bis.write(j, i, invoice.date_invoice) i += 1 worksheet1bis.write(j, i, invoice.reference) i += 1 for line in invoice.invoice_line_ids: worksheet1bis.write(j, i, line.quantity) i += 1 worksheet1bis.write(j, i, line.price_subtotal) i += 1 if invoice.payment_ids: worksheet1bis.write(j, i, invoice.payment_ids[0].date) i += 1 if invoice.subscription_request: ind = len(invoice.subscription_request)-1 worksheet1bis.write(j, i, invoice.subscription_request[ind].date) j += 1 sub_requests = subscription_obj.search([('state', 'in', ['draft', 'waiting']), ('partner_id', '=', coop.id) ]) for sub_request in sub_requests: i = 11 worksheet1bis.write(j, i, dict(subscription_obj._columns['type'].selection).get(sub_request.type,False)) i += 1 worksheet1bis.write(j, i, sub_request.state) i += 3 quantity = int(sub_request.ordered_parts) worksheet1bis.write(j, i, quantity) i += 1 amount = quantity * sub_request.share_unit_price worksheet1bis.write(j, i, amount) i += 2 worksheet1bis.write(j, i, sub_request.date) j += 1 worksheet2 = workbook.add_worksheet() self.write_header(worksheet2, HEADER2) sub_requests = subscription_obj.search([('state', 'in', ['draft', 'waiting']), ]) j = 1 for sub_request in sub_requests: i = 0 worksheet2.write(j, i, sub_request.date) i += 1 worksheet2.write(j, i, sub_request.name) i += 1 sub_type_sel = subscription_obj._columns['type'].selection worksheet2.write(j, i, dict(sub_type_sel).get(sub_request.type, False)) i += 1 quantity = int(sub_request.ordered_parts) worksheet2.write(j, i, quantity) i += 1 amount = quantity * sub_request.share_unit_price worksheet2.write(j, i, amount) i += 1 worksheet2.write(j, i, sub_request.state) i += 1 worksheet2.write(j, i, sub_request.email) i += 1 worksheet2.write(j, i, sub_request.phone) i += 1 worksheet2.write(j, i, sub_request.address) i += 1 worksheet2.write(j, i, sub_request.city) i += 1 worksheet2.write(j, i, int(sub_request.zip_code)) i += 1 worksheet2.write(j, i, sub_request.country_id.name) j += 1 workbook.close() file_data.seek(0) data = base64.encodestring(file_data.read()) attachment_id = self.env['ir.attachment'].create({ 'name': "Global export" + time.strftime('%Y-%m-%d %H:%M') + ".xlsx", 'datas': data, 'datas_fname': 'Global_export.xlsx', 'res_model': 'export.global.report', },) # Prepare your download URL download_url = '/web/content/' + str(attachment_id.id) + '?download=True' base_url = self.env['ir.config_parameter'].get_param('web.base.url') return { "type": "ir.actions.act_url", "url": str(base_url) + str(download_url), "target": "new", }