houssine
6 years ago
5 changed files with 373 additions and 0 deletions
-
2easy_my_coop_export_xlsx/__init__.py
-
45easy_my_coop_export_xlsx/__openerp__.py
-
2easy_my_coop_export_xlsx/wizard/__init__.py
-
291easy_my_coop_export_xlsx/wizard/export_global_wizard.py
-
33easy_my_coop_export_xlsx/wizard/export_global_wizard.xml
@ -0,0 +1,2 @@ |
|||
# -*- coding: utf8 -*- |
|||
from . import wizard |
@ -0,0 +1,45 @@ |
|||
# -*- coding: utf-8 -*- |
|||
|
|||
# Copyright (C) 2018- Coop IT Easy SCRLfs. |
|||
# |
|||
# This program is free software: you can redistribute it and/or modify |
|||
# it under the terms of the GNU Affero General Public License as |
|||
# published by the Free Software Foundation, either version 3 of the |
|||
# License, or (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU Affero General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU Affero General Public License |
|||
# along with this program. |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
############################################################################## |
|||
|
|||
|
|||
{ |
|||
'name': 'Easy My Coop Export XLSX', |
|||
|
|||
'summary': """ |
|||
Generate a xlsx file with information on current state of subscription |
|||
request, cooperators and capital release request. |
|||
""", |
|||
'author': 'Houssine BAKKALI, <houssine@coopiteasy.be>', |
|||
'license': 'AGPL-3', |
|||
'version': '9.0.1.0', |
|||
'website': "www.coopiteasy.be", |
|||
|
|||
'category': 'Cooperative Management', |
|||
|
|||
'depends': [ |
|||
'easy_my_coop', |
|||
], |
|||
'external_dependencies': { |
|||
'python': ['xlsxwriter'], |
|||
}, |
|||
'data': [ |
|||
# 'security/ir.model.access.csv', |
|||
'wizard/export_global_wizard.xml', |
|||
] |
|||
} |
@ -0,0 +1,2 @@ |
|||
# -*- coding: utf8 -*- |
|||
from . import export_global_wizard |
@ -0,0 +1,291 @@ |
|||
# -*- 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 * 250 |
|||
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 * 250 |
|||
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 * 250 |
|||
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", |
|||
} |
@ -0,0 +1,33 @@ |
|||
<?xml version="1.0" ?> |
|||
<openerp> |
|||
<data> |
|||
|
|||
<record id="view_export_global_report_wizard" model="ir.ui.view"> |
|||
<field name="name">export.global.report.wizard.form</field> |
|||
<field name="model">export.global.report</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Reporting" version="7.0"> |
|||
<separator string="Global report export"/> |
|||
<footer> |
|||
<button name="export_global_report_xlsx" string="Export" type="object" default_focus="1" class="oe_highlight"/> |
|||
or |
|||
<button string="Cancel" class="oe_link" special="cancel" /> |
|||
</footer> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_export_global_report_wizard" model="ir.actions.act_window"> |
|||
<field name="name">Export gloabal report</field> |
|||
<field name="type">ir.actions.act_window</field> |
|||
<field name="res_model">export.global.report</field> |
|||
<field name="view_type">form</field> |
|||
<field name="view_mode">form</field> |
|||
<field name="view_id" ref="view_export_global_report_wizard"/> |
|||
<field name="target">new</field> |
|||
<field name="multi">True</field> |
|||
</record> |
|||
|
|||
<menuitem id="menu_export_global_report_wizard" name="Global report export" parent="easy_my_coop.menu_easy_my_coop_main_reporting" action="action_export_global_report_wizard" sequence="10"/> |
|||
</data> |
|||
</openerp> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue