mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
257 lines
10 KiB
Python
257 lines
10 KiB
Python
# -*- coding: utf-8 -*-
|
|
##############################################################################
|
|
#
|
|
# OpenERP, Open Source Management Solution
|
|
# Copyright (C) 2018 Alexandre Díaz <dev@redneboa.es>
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU 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 General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
##############################################################################
|
|
from io import BytesIO
|
|
import xlsxwriter
|
|
import base64
|
|
from odoo import api, fields, models, _
|
|
|
|
|
|
class GlassofExporterWizard(models.TransientModel):
|
|
FILENAME = 'invoices_glasof.xls'
|
|
_name = 'glasof.exporter.wizard'
|
|
|
|
date_start = fields.Date("Start Date")
|
|
date_end = fields.Date("End Date")
|
|
export_journals = fields.Boolean("Export Account Movements?", default=True)
|
|
export_invoices = fields.Boolean("Export Invoices?", default=True)
|
|
seat_num = fields.Integer("Seat Number Start", default=1)
|
|
xls_journals_filename = fields.Char()
|
|
xls_journals_binary = fields.Binary()
|
|
xls_invoices_filename = fields.Char()
|
|
xls_invoices_binary = fields.Binary()
|
|
|
|
@api.model
|
|
def _export_journals(self):
|
|
file_data = BytesIO()
|
|
workbook = xlsxwriter.Workbook(file_data, {
|
|
'strings_to_numbers': True,
|
|
'default_date_format': 'dd/mm/yyyy'
|
|
})
|
|
|
|
company_id = self.env.user.company_id
|
|
workbook.set_properties({
|
|
'title': 'Exported data from ' + company_id.name,
|
|
'subject': 'PMS Data from Odoo of ' + company_id.name,
|
|
'author': 'Odoo ALDA PMS',
|
|
'manager': 'Jose Luis Algara',
|
|
'company': company_id.name,
|
|
'category': 'Hoja de Calculo',
|
|
'keywords': 'pms, odoo, alda, data, ' + company_id.name,
|
|
'comments': 'Created with Python in Odoo and XlsxWriter'})
|
|
workbook.use_zip64()
|
|
|
|
xls_cell_format_seat = workbook.add_format({'num_format': '#'})
|
|
xls_cell_format_date = workbook.add_format({
|
|
'num_format': 'dd/mm/yyyy'
|
|
})
|
|
xls_cell_format_saccount = workbook.add_format({
|
|
'num_format': '000000'
|
|
})
|
|
xls_cell_format_money = workbook.add_format({
|
|
'num_format': '#,##0.00'
|
|
})
|
|
xls_cell_format_header = workbook.add_format({
|
|
'bg_color': '#CCCCCC'
|
|
})
|
|
|
|
worksheet = workbook.add_worksheet('Simples-1')
|
|
|
|
worksheet.write('A1', _('Seat'), xls_cell_format_header)
|
|
worksheet.write('B1', _('Date'), xls_cell_format_header)
|
|
worksheet.write('C1', _('SubAccount'), xls_cell_format_header)
|
|
worksheet.write('D1', _('Description'), xls_cell_format_header)
|
|
worksheet.write('E1', _('Concept'), xls_cell_format_header)
|
|
worksheet.write('F1', _('Debit'), xls_cell_format_header)
|
|
worksheet.write('G1', _('Credit'), xls_cell_format_header)
|
|
worksheet.write('H1', _('Seat Type'), xls_cell_format_header)
|
|
|
|
worksheet.set_column('B:B', 11)
|
|
worksheet.set_column('E:E', 50)
|
|
|
|
account_move_obj = self.env['account.move']
|
|
account_moves = account_move_obj.search([
|
|
('date', '>=', self.date_start),
|
|
('date', '<=', self.date_end),
|
|
])
|
|
start_seat = self.seat_num
|
|
nrow = 1
|
|
for move in account_moves:
|
|
nmove = True
|
|
for line in move.line_ids:
|
|
if line.journal_id.type in ('cash', 'bank'):
|
|
worksheet.write(nrow, 0, nmove and start_seat or '',
|
|
xls_cell_format_seat)
|
|
worksheet.write(nrow, 1, nmove and line.date or '',
|
|
xls_cell_format_date)
|
|
worksheet.write(nrow, 2, line.account_id.code,
|
|
xls_cell_format_saccount)
|
|
worksheet.write(nrow, 3, '')
|
|
worksheet.write(nrow, 4, line.ref and line.ref[:50] or '')
|
|
worksheet.write(nrow, 5, line.debit, xls_cell_format_money)
|
|
worksheet.write(nrow, 6, line.credit,
|
|
xls_cell_format_money)
|
|
worksheet.write(nrow, 7, '')
|
|
nmove = False
|
|
nrow += 1
|
|
start_seat += 1
|
|
|
|
workbook.close()
|
|
file_data.seek(0)
|
|
tnow = fields.Datetime.now().replace(' ', '_')
|
|
return {
|
|
'xls_journals_filename': 'journals_glasof_%s.xlsx' % tnow,
|
|
'xls_journals_binary': base64.encodestring(file_data.read()),
|
|
}
|
|
|
|
@api.model
|
|
def _export_invoices(self):
|
|
file_data = BytesIO()
|
|
workbook = xlsxwriter.Workbook(file_data, {
|
|
'strings_to_numbers': True,
|
|
'default_date_format': 'dd/mm/yyyy'
|
|
})
|
|
|
|
company_id = self.env.user.company_id
|
|
workbook.set_properties({
|
|
'title': 'Exported data from ' + company_id.name,
|
|
'subject': 'PMS Data from Odoo of ' + company_id.name,
|
|
'author': 'Odoo ALDA PMS',
|
|
'manager': 'Jose Luis Algara',
|
|
'company': company_id.name,
|
|
'category': 'Hoja de Calculo',
|
|
'keywords': 'pms, odoo, alda, data, ' + company_id.name,
|
|
'comments': 'Created with Python in Odoo and XlsxWriter'})
|
|
workbook.use_zip64()
|
|
|
|
xls_cell_format_seat = workbook.add_format({'num_format': '#'})
|
|
xls_cell_format_date = workbook.add_format({
|
|
'num_format': 'dd/mm/yyyy'
|
|
})
|
|
xls_cell_format_saccount = workbook.add_format({
|
|
'num_format': '000000'
|
|
})
|
|
xls_cell_format_money = workbook.add_format({
|
|
'num_format': '#,##0.00'
|
|
})
|
|
xls_cell_format_odec = workbook.add_format({
|
|
'num_format': '#,#0.0'
|
|
})
|
|
xls_cell_format_header = workbook.add_format({
|
|
'bg_color': '#CCCCCC'
|
|
})
|
|
|
|
worksheet = workbook.add_worksheet('ventas')
|
|
|
|
account_inv_obj = self.env['account.invoice']
|
|
account_invs = account_inv_obj.search([
|
|
('date', '>=', self.date_start),
|
|
('date', '<=', self.date_end),
|
|
])
|
|
|
|
nrow = 1
|
|
for inv in account_invs:
|
|
if inv.partner_id.parent_id:
|
|
firstname = inv.partner_id.parent_id.firstname or ''
|
|
lastname = inv.partner_id.parent_id.lastname or ''
|
|
else:
|
|
firstname = inv.partner_id.firstname or ''
|
|
lastname = inv.partner_id.lastname or ''
|
|
|
|
worksheet.write(nrow, 0, inv.number)
|
|
worksheet.write(nrow, 1, inv.date_invoice, xls_cell_format_date)
|
|
worksheet.write(nrow, 2, '')
|
|
worksheet.write(nrow, 3, inv.partner_id.vat and
|
|
inv.partner_id.vat[:2] or '')
|
|
worksheet.write(nrow, 4, inv.partner_id.vat and
|
|
inv.partner_id.vat[2:] or '')
|
|
worksheet.write(nrow, 5, lastname)
|
|
worksheet.write(nrow, 6, '')
|
|
worksheet.write(nrow, 7, firstname)
|
|
worksheet.write(nrow, 8, 705.0, xls_cell_format_odec)
|
|
worksheet.write(nrow, 9, inv.amount_untaxed, xls_cell_format_money)
|
|
if any(inv.tax_line_ids):
|
|
worksheet.write(nrow,
|
|
10,
|
|
inv.tax_line_ids[0].tax_id.amount,
|
|
xls_cell_format_money)
|
|
else:
|
|
worksheet.write(nrow, 10, '')
|
|
worksheet.write(nrow, 11, inv.tax_line_ids and
|
|
inv.tax_line_ids[0].amount or '',
|
|
xls_cell_format_money)
|
|
worksheet.write(nrow, 12, '')
|
|
worksheet.write(nrow, 13, '')
|
|
worksheet.write(nrow, 14, '')
|
|
worksheet.write(nrow, 15, '')
|
|
worksheet.write(nrow, 16, '')
|
|
worksheet.write(nrow, 17, '')
|
|
worksheet.write(nrow, 18, '')
|
|
worksheet.write(nrow, 19, '')
|
|
worksheet.write(nrow, 20, '')
|
|
worksheet.write(nrow, 21, 'S')
|
|
worksheet.write(nrow, 22, '')
|
|
if inv.type == 'out_refund':
|
|
worksheet.write(nrow, 23, inv.invoice_origin)
|
|
else:
|
|
worksheet.write(nrow, 23, '')
|
|
worksheet.write(nrow, 24, '')
|
|
worksheet.write(nrow, 25, '')
|
|
worksheet.write(nrow, 27, '')
|
|
worksheet.write(nrow, 28, '')
|
|
worksheet.write(nrow, 29, '')
|
|
worksheet.write(nrow, 30, '')
|
|
worksheet.write(nrow, 31, '')
|
|
worksheet.write(nrow, 32, '')
|
|
worksheet.write(nrow, 33, '')
|
|
worksheet.write(nrow, 34, '')
|
|
worksheet.write(nrow, 35, '')
|
|
worksheet.write(nrow, 36, '')
|
|
worksheet.write(nrow, 37, '')
|
|
worksheet.write(nrow, 38, '')
|
|
worksheet.write(nrow, 39, '')
|
|
worksheet.write(nrow, 40, '')
|
|
worksheet.write(nrow, 41, '')
|
|
worksheet.write(nrow, 42, '')
|
|
worksheet.write(nrow, 43, '430')
|
|
nrow += 1
|
|
|
|
workbook.add_worksheet('compras')
|
|
workbook.close()
|
|
file_data.seek(0)
|
|
tnow = fields.Datetime.now().replace(' ', '_')
|
|
return {
|
|
'xls_invoices_filename': 'invoices_glasof_%s.xlsx' % tnow,
|
|
'xls_invoices_binary': base64.encodestring(file_data.read()),
|
|
}
|
|
|
|
|
|
def export(self):
|
|
towrite = {}
|
|
if self.export_journals:
|
|
towrite.update(self._export_journals())
|
|
if self.export_invoices:
|
|
towrite.update(self._export_invoices())
|
|
if any(towrite):
|
|
self.write(towrite)
|
|
return {
|
|
"type": "ir.actions.do_nothing",
|
|
}
|