diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2023-08-03 15:12:47 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2023-08-03 15:12:47 +0700 |
| commit | ea655e339f1096fdc3c1aa23ba36d0109e9df760 (patch) | |
| tree | ce76fdf2585d222b2a8eb32c16b57e41fc4fc24c /indoteknik_custom/models/account_report_general_ledger.py | |
| parent | 091d3159526442a41cc1026a7d54fbf5c2f951f8 (diff) | |
ledger
Diffstat (limited to 'indoteknik_custom/models/account_report_general_ledger.py')
| -rw-r--r-- | indoteknik_custom/models/account_report_general_ledger.py | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/indoteknik_custom/models/account_report_general_ledger.py b/indoteknik_custom/models/account_report_general_ledger.py new file mode 100644 index 00000000..6457b914 --- /dev/null +++ b/indoteknik_custom/models/account_report_general_ledger.py @@ -0,0 +1,208 @@ +from datetime import datetime +from dateutil.relativedelta import relativedelta +from odoo.exceptions import UserError +import json +from datetime import timedelta, date +import datetime +import io +from odoo import api, fields, models, _ +from odoo.tools.float_utils import float_round +from odoo.tools import date_utils +try: + from odoo.tools.misc import xlsxwriter +except ImportError: + import xlsxwriter + +class AccountReportGeneralLedger(models.TransientModel): + _inherit = "account.report.general.ledger.xlsx" + + journal_ids = fields.Many2many('account.journal', string=_('Journals'), required=True,default=lambda self: self.env['account.journal'].search([('id', '=', 10)])) + + def _build_contexts(self, data): + result = {} + result['journal_ids'] = 'journal_ids' in data['form'] and data['form']['journal_ids'] or False + result['state'] = 'target_move' in data['form'] and data['form']['target_move'] or '' + date_from = data['form']['date_from'] or False + + if date_from: + date_from = fields.Date.from_string(date_from) + + date_from -= relativedelta(days=1) + + result['date_from'] = fields.Date.to_string(date_from) + else: + result['date_from'] = False + + result['date_to'] = data['form']['date_to'] or False + result['strict_range'] = True if result['date_from'] else False + return result + + def check_report_ledger(self): + self.ensure_one() + data = {} + data['ids'] = self.env.context.get('active_ids', []) + data['model'] = self.env.context.get('active_model', 'ir.ui.menu') + data['form'] = self.read(['date_from', 'date_to', 'journal_ids', 'target_move'])[0] + used_context = self._build_contexts(data) + data['form']['used_context'] = dict(used_context, lang=self.env.context.get('lang') or 'en_US') + return { + 'type': 'ir.actions.report', + 'data': {'model': 'account.report.general.ledger.xlsx', + 'options': json.dumps(data, default=date_utils.json_default), + 'output_format': 'xlsx', + 'report_name': 'general ledger report', + }, + 'report_type': 'xlsx' + } + + def get_xlsx_report(self, options, response): + output = io.BytesIO() + workbook = xlsxwriter.Workbook(output, {'in_memory': True}) + data = {} + vals = self.search([('id', '=', options['form']['id'])]) + data['form'] = vals.read([])[0] + data['model'] = 'ir.ui.menu' + data['ids'] = [] + data['form']['used_context'] = { + 'date_to': options['form'].get('date_to', False), + 'date_from': options['form'].get('date_from', False), + 'strict_range': True, + 'state': options['form']['target_move'], + 'journal_ids': options['form']['journal_ids'], + } + + env_obj = vals.env['report.account.report_generalledger'] + sortby = data['form'].get('sortby', 'sort_date') + display_account = data['form']['display_account'] + codes = [] + if data['form'].get('journal_ids', False): + codes = [journal.code for journal in self.env['account.journal'].search([('id', 'in', data['form']['journal_ids'])])] + # accounts = vals.active_account if vals.active_account else self.env['account.account'].search([]) + accounts = self.env['account.account'].browse(options['ids']) or self.env['account.account'].search([]) + init_balance = vals['initial_balance'] + date_from = options['form'].get('date_from', False) + date_to = options['form'].get('date_to', False) + report_obj = env_obj.with_context(data['form'].get('used_context', {}))._get_account_move_entry_posted_custom( + accounts, init_balance, sortby, display_account) + sheet = workbook.add_worksheet() + format1 = workbook.add_format({'font_size': 16, 'align': 'center', 'bg_color': '#D3D3D3', 'bold': True}) + format1.set_font_color('#000080') + format2 = workbook.add_format({'font_size': 12, 'bold': True, 'bg_color': '#D3D3D3'}) + format3 = workbook.add_format({'font_size': 10, 'bold': True}) + format4 = workbook.add_format({'font_size': 10}) + format6 = workbook.add_format({'font_size': 10, 'bold': True}) + format7 = workbook.add_format({'font_size': 10, 'align': 'center'}) + format5 = workbook.add_format({'font_size': 10, 'align': 'right'}) + format1.set_align('center') + format2.set_align('center') + format3.set_align('right') + format4.set_align('left') + codes = [] + if data['form'].get('journal_ids', False): + codes = [journal.code for journal in + self.env['account.journal'].search([('id', 'in', data['form']['journal_ids'])])] + logged_users = self.env['res.company']._company_default_get('account.account') + report_date = datetime.datetime.now().strftime("%Y-%m-%d") + sheet.merge_range('M8:N8', _("Report Date"), format3) + sheet.merge_range('M9:N9', report_date, format4) + sheet.merge_range(1, 0, 1, 14, logged_users.name, format4) + sheet.merge_range(3, 0, 4, 14, _("General Ledger Report"), format1) + sheet.merge_range('A6:B6', _("Journals :"), format6) + + row = 6 + col = 0 + i = 0 + for values in codes: + sheet.write(row, col + i, values, format7) + i += 1 + if data['form']['display_account'] == 'all': + display_account = _('All accounts') + elif data['form']['display_account'] == 'movement': + display_account = _('With movements') + else: + display_account = _('With balance not equal to zero') + + if data['form']['target_move'] == 'all': + target_moves = _('All entries') + else: + target_moves = _('All posted entries') + + if data['form']['sortby'] == 'sort_date': + sortby = 'Date' + else: + sortby = 'Journal and partners' + if data['form']['date_from']: + date_start = datetime.datetime.strptime(str(data['form']['used_context']['date_from']), '%Y-%m-%d') + date_start = date_start.strftime('%Y-%m-%d') + else: + date_start = "" + if data['form']['date_to']: + date_end = datetime.datetime.strptime(str(data['form']['used_context']['date_to']), '%Y-%m-%d') + date_end = date_end.strftime('%Y-%m-%d') + else: + date_end = "" + if sortby == 'Date': + sheet.write('G8', _("Start Date"), format3) + sheet.write('G9', date_start, format4) + sheet.write('J8', _("End Date"), format3) + sheet.write('J9', date_end, format4) + sheet.merge_range('C8:D8', _("Sorted By"), format3) + sheet.merge_range('C9:D9', sortby, format4) + sheet.merge_range('A8:B8', _("Display Account"), format6) + sheet.merge_range('A9:B9', display_account, format7) + sheet.merge_range('E8:F8', _("Target Moves"), format6) + sheet.merge_range('E9:F9', target_moves, format7) + sheet.write('A11', "Date ", format2) + sheet.write('B11', "JRNL", format2) + sheet.merge_range('C11:D11', _("Partner"), format2) + sheet.merge_range('E11:F11', _("Ref"), format2) + sheet.merge_range('G11:H11', _("Move"), format2) + sheet.merge_range('I11:L11', _("Entry Label"), format2) + sheet.write('M11', _("Debit"), format2) + sheet.write('N11', _("Credit"), format2) + sheet.write('O11', _("Balance"), format2) + sheet.write('P11', _("Debit Sum"), format2) + accounts = self.env['account.account'].search([]) + row_number = 11 + col_number = 0 + for account in accounts: + for values in report_obj: + + if account['name'] == values['name'] and account['company_id'].id == values['company_id']: + sheet.write(row_number, col_number, account['code'], format3) + sheet.merge_range(row_number, col_number + 1, row_number, col_number + 11, account['name'], format6) + sheet.write(row_number, col_number + 12, + logged_users.currency_id.symbol + ' ' + "{:,.2f}".format(values['debit']), format3) + sheet.write(row_number, col_number + 13, + logged_users.currency_id.symbol + ' ' + "{:,.2f}".format(values['credit']), format3) + sheet.write(row_number, col_number + 14, + logged_users.currency_id.symbol + ' ' + "{:,.2f}".format(values['balance']), format3) + row_number += 1 + for lines in values['move_lines']: + if lines['ldate']: + formatted_date = datetime.datetime.strptime(str(lines['ldate']), '%Y-%m-%d') + formatted_date = formatted_date.strftime('%Y-%m-%d') + else: + formatted_date = "" + + sheet.write(row_number, col_number, formatted_date, format4) + sheet.write(row_number, col_number + 1, lines['lcode'], format4) + sheet.merge_range(row_number, col_number + 2, row_number, col_number + 3, lines['partner_name'], + format4) + sheet.merge_range(row_number, col_number + 4, row_number, col_number + 5, lines['lref'], + format4) + sheet.merge_range(row_number, col_number + 6, row_number, col_number + 7, lines['move_name'], + format4) + sheet.merge_range(row_number, col_number + 8, row_number, col_number + 11, lines['lname'], + format4) + sheet.write(row_number, col_number + 12, "{:,.2f}".format(lines['debit']), format5) + sheet.write(row_number, col_number + 13, "{:,.2f}".format(lines['credit']), format5) + sheet.write(row_number, col_number + 14, "{:,.2f}".format(lines['balance']), format5) + + row_number += 1 + + workbook.close() + output.seek(0) + response.stream.write(output.read()) + output.close() + |
