# -*- encoding: utf-8 -*- from openerp import fields, models, api import time from cStringIO import StringIO import base64 import xlsxwriter HEADER = [ 'Num. Coop', 'Numero de registre national', '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', 'Numero de registre national', '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.national_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_ids: worksheet1.write(j, i, invoice.payment_ids[0].payment_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.no_registre) 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", }