You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
291 lines
11 KiB
291 lines
11 KiB
# -*- 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',
|
|
# 'Numero de demande',
|
|
# 'Statut',
|
|
'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].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.sync_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",
|
|
}
|