test/l10n_ru_act_rev/wizard/general_ledger_wizard.py
2025-01-17 20:46:49 +03:00

899 lines
35 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import logging
import time
from ast import literal_eval
from odoo import _, api, fields, models
from odoo.tools import date_utils,pycompat
from pytils import dt,numeral
from datetime import datetime, date
import re
import urllib
from odoo.exceptions import UserError
class GeneralLedgerReportWizard(models.TransientModel):
"""General ledger report wizard."""
_name = "general.ledger.act_revise.wizard"
_description = "General Ledger Report Wizard"
_inherit = "act_revise.abstract_wizard"
# date_range_id = fields.Many2one(comodel_name="date.range", string="Date range")
date_from = fields.Date(string="Начало даты", required=True, default=lambda self: self._init_date_from())
date_to = fields.Date(string="Конец даты", required=True, default=fields.Date.context_today)
fy_start_date = fields.Date(compute="_compute_fy_start_date")
target_move = fields.Selection(
[("posted", "Все проведенные проводки"), ("all", "Все проводки")],
string="Цель операции",
required=True,
default="posted",
)
account_ids = fields.Many2many(
comodel_name="account.account", string=_("Filter accounts")
)
centralize = fields.Boolean(string=_("Activate centralization"), default=True)
hide_account_at_0 = fields.Boolean(
string=_("Hide account ending balance at 0"),
help=_("Use this filter to hide an account or a partner "
"with an ending balance at 0. "
"If partners are filtered, "
"debits and credits totals will not match the trial balance."),
)
receivable_accounts_only = fields.Boolean()
payable_accounts_only = fields.Boolean()
partner_ids = fields.Many2many(
comodel_name="res.partner",
string=_("Filter partners"),
default=lambda self: self._default_partners(),
)
account_journal_ids = fields.Many2many(
comodel_name="account.journal", string=_("Filter journals")
)
cost_center_ids = fields.Many2many(
comodel_name="account.analytic.account", string=_("Filter cost centers")
)
not_only_one_unaffected_earnings_account = fields.Boolean(readonly=True)
foreign_currency = fields.Boolean(
string=_("Show foreign currency"),
help=_("Display foreign currency for move lines, unless "
"account currency is not setup through chart of accounts "
"will display initial and final balance in that currency."),
default=lambda self: self._default_foreign_currency(),
)
account_code_from = fields.Many2one(
comodel_name="account.account",
help="Starting account in a range",
)
account_code_to = fields.Many2one(
comodel_name="account.account",
help="Ending account in a range",
)
grouped_by = fields.Selection(
selection=[("", "None"), ("partners", "Partners"), ("taxes", "Taxes")],
default="partners",
)
show_cost_center = fields.Boolean(
string="Show Analytic Account",
default=True,
)
domain = fields.Char(
string="Journal Items Domain",
default=[],
help="This domain will be used to select specific domain for Journal " "Items",
)
# def _print_report(self, report_type):
# self.ensure_one()
# data = self._prepare_report_general_ledger()
# report = self.env["ir.actions.report"].search(
# [("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)], limit=1, )
# if self.partner_ids[0].parent_id:
# partner = int(self.partner_ids[0].parent_id.id)
# else:
# partner = int(self.partner_ids[0].id)
# return {
# 'type': 'ir.actions.act_url',
# 'url': '/my/act_revise_contact/%s?date_to=%s&date_from=%s&target_move=%s&company=%s&partner=%s' % (
# urllib.parse.quote(self.get_report_filename()), self.date_to, self.date_from, self.target_move,
# self.company_id.id, partner),
# 'target': 'new',
# }
def _get_account_move_lines_domain(self):
domain = literal_eval(self.domain) if self.domain else []
return domain
@api.onchange("account_code_from", "account_code_to")
def on_change_account_range(self):
if (
self.account_code_from
and self.account_code_from.code.isdigit()
and self.account_code_to
and self.account_code_to.code.isdigit()
):
start_range = self.account_code_from.code
end_range = self.account_code_to.code
self.account_ids = self.env["account.account"].search(
[("code", ">=", start_range), ("code", "<=", end_range)]
)
if self.company_id:
self.account_ids = self.account_ids.filtered(
lambda a: a.company_id == self.company_id
)
def _init_date_from(self):
"""set start date to begin of current year if fiscal year running"""
today = fields.Date.context_today(self)
company = self.company_id or self.env.company
last_fsc_month = company.fiscalyear_last_month
last_fsc_day = company.fiscalyear_last_day
if (
today.month < int(last_fsc_month)
or today.month == int(last_fsc_month)
and today.day <= last_fsc_day
):
return time.strftime("%Y-01-01")
else:
return False
def _default_foreign_currency(self):
return self.env.user.has_group("base.group_multi_currency")
@api.depends("date_from")
def _compute_fy_start_date(self):
for wiz in self:
if wiz.date_from:
date_from, date_to = date_utils.get_fiscal_year(
wiz.date_from,
day=self.company_id.fiscalyear_last_day,
month=int(self.company_id.fiscalyear_last_month),
)
wiz.fy_start_date = date_from
else:
wiz.fy_start_date = False
@api.onchange("company_id")
def onchange_company_id(self):
"""Handle company change."""
count = self.env["account.account"].search_count(
[
("account_type", "=", "equity_unaffected"),
("company_id", "=", self.company_id.id),
]
)
self.not_only_one_unaffected_earnings_account = count != 1
# if (
# self.company_id
# and self.date_range_id.company_id
# and self.date_range_id.company_id != self.company_id
# ):
# self.date_range_id = False
if self.company_id and self.account_journal_ids:
self.account_journal_ids = self.account_journal_ids.filtered(
lambda p: p.company_id == self.company_id or not p.company_id
)
if self.company_id and self.partner_ids:
self.partner_ids = self.partner_ids.filtered(
lambda p: p.company_id == self.company_id or not p.company_id
)
if self.company_id and self.account_ids:
if self.receivable_accounts_only or self.payable_accounts_only:
self.onchange_type_accounts_only()
else:
self.account_ids = self.account_ids.filtered(
lambda a: a.company_id == self.company_id
)
if self.company_id and self.cost_center_ids:
self.cost_center_ids = self.cost_center_ids.filtered(
lambda c: c.company_id == self.company_id
)
res = {
"domain": {
"account_ids": [],
"partner_ids": [],
"account_journal_ids": [],
"cost_center_ids": [],
# "date_range_id": [],
}
}
if not self.company_id:
return res
else:
res["domain"]["account_ids"] += [("company_id", "=", self.company_id.id)]
res["domain"]["account_journal_ids"] += [
("company_id", "=", self.company_id.id)
]
res["domain"]["partner_ids"] += self._get_partner_ids_domain()
res["domain"]["cost_center_ids"] += [
("company_id", "=", self.company_id.id)
]
# res["domain"]["date_range_id"] += [
# "|",
# ("company_id", "=", self.company_id.id),
# ("company_id", "=", False),
# ]
return res
# @api.onchange("date_range_id")
# def onchange_date_range_id(self):
# """Handle date range change."""
# if self.date_range_id:
# self.date_from = self.date_range_id.date_start
# self.date_to = self.date_range_id.date_end
# @api.constrains("company_id", "date_range_id")
# def _check_company_id_date_range_id(self):
# for rec in self.sudo():
# if (
# rec.company_id
# and rec.date_range_id.company_id
# and rec.company_id != rec.date_range_id.company_id
# ):
# raise ValidationError(
# _(
# "The Company in the General Ledger Report Wizard and in "
# "Date Range must be the same."
# )
# )
@api.onchange("receivable_accounts_only", "payable_accounts_only")
def onchange_type_accounts_only(self):
"""Handle receivable/payable accounts only change."""
if self.receivable_accounts_only or self.payable_accounts_only:
domain = [("company_id", "=", self.company_id.id)]
if self.receivable_accounts_only and self.payable_accounts_only:
domain += [
("account_type", "in", ("asset_receivable", "liability_payable"))
]
elif self.receivable_accounts_only:
domain += [("account_type", "=", "asset_receivable")]
elif self.payable_accounts_only:
domain += [("account_type", "=", "liability_payable")]
self.account_ids = self.env["account.account"].search(domain)
else:
self.account_ids = None
@api.onchange("partner_ids")
def onchange_partner_ids(self):
"""Handle partners change."""
if self.partner_ids:
self.receivable_accounts_only = self.payable_accounts_only = True
else:
self.receivable_accounts_only = self.payable_accounts_only = False
@api.depends("company_id")
def _compute_unaffected_earnings_account(self):
for record in self:
record.unaffected_earnings_account = self.env["account.account"].search(
[
("account_type", "=", "equity_unaffected"),
("company_id", "=", record.company_id.id),
]
)
unaffected_earnings_account = fields.Many2one(
comodel_name="account.account",
compute="_compute_unaffected_earnings_account",
store=True,
)
# def _print_report(self, report_type):
# self.ensure_one()
# data = self._prepare_report_general_ledger()
# report_name = "act_revise.general_ledger"
# return (
# self.env["ir.actions.report"]
# .search(
# [("report_name", "=", report_name), ("report_type", "=", report_type)],
# limit=1,
# )
# .report_action(self, data=data)
# )
def _print_report(self, report_type):
self.ensure_one()
data = self._prepare_report_general_ledger()
report = self.env["ir.actions.report"].search(
[("report_name", "=", "l10n_ru_act_rev.general_ledger"), ("report_type", "=", report_type)], limit=1, )
if self.partner_ids[0].parent_id:
partner = int(self.partner_ids[0].parent_id.id)
else:
partner = int(self.partner_ids[0].id)
account_data = self.env['account.move.line'].sudo().search([
('partner_id', '=', partner),
('account_id.account_type', 'in', ('liability_payable', 'asset_receivable')),
('account_id.non_trade', '=', False),
('date', '<=', self.date_to),
('date', '>=', self.date_from)
])
logging.warning(f'account_data {account_data}')
if self.target_move == 'posted' and not account_data.filtered(lambda p: p.parent_state == 'posted') or not account_data:
raise UserError(f'Проводок для формирования акта по введенным условиям не найдено.')
return {
'type': 'ir.actions.act_url',
'url': '/my/act_revise_contact/%s?date_to=%s&date_from=%s&target_move=%s&company=%s&partner=%s' % (
urllib.parse.quote(self.get_report_filename()), self.date_to, self.date_from, self.target_move,
self.company_id.id, partner),
'target': 'new',
}
def _prepare_report_general_ledger(self):
self.ensure_one()
return {
"wizard_id": self.id,
"date_from": self.date_from,
"date_to": self.date_to,
"only_posted_moves": self.target_move == "posted",
"hide_account_at_0": self.hide_account_at_0,
"foreign_currency": self.foreign_currency,
"company_id": self.company_id.id,
"account_ids": self.account_ids.ids,
"partner_ids": self.partner_ids.ids,
"grouped_by": self.grouped_by,
"cost_center_ids": self.cost_center_ids.ids,
"show_cost_center": self.show_cost_center,
"journal_ids": self.account_journal_ids.ids,
"centralize": self.centralize,
"fy_start_date": self.fy_start_date,
"unaffected_earnings_account": self.unaffected_earnings_account.id,
"account_financial_report_lang": self.env.lang,
"domain": self._get_account_move_lines_domain(),
}
def _export(self, report_type):
"""Default export is PDF."""
return self._print_report(report_type)
def _get_atr_from_dict(self, obj_id, data, key):
try:
return data[obj_id][key]
except KeyError:
return data[str(obj_id)][key]
def numer(self, name):
if name:
numeration = re.findall('\d+$', name)
if numeration: return numeration[0]
return name
def get_data_format(self, date):
if date and date != 'False':
return dt.ru_strftime(u'%d.%m.%Y г.', date=datetime.strptime(str(date), "%Y-%m-%d"), inflected=True)
return ''
def initials(self, fio):
if fio:
return (fio.split()[0] + ' ' + ''.join([fio[0:1] + '.' for fio in fio.split()[1:]])).strip()
return ''
def rubles(self, sum):
"Transform sum number in rubles to text"
text_rubles = numeral.rubles(int(sum))
copeck = round((sum - int(sum)) * 100)
text_copeck = numeral.choose_plural(int(copeck), (u"копейка", u"копейки", u"копеек"))
return ("%s %02d %s") % (text_rubles, copeck, text_copeck)
def img(self, img, type='png', width=0, height=0):
if width:
width = "width='%spx'" % (width)
else:
width = " "
if height:
height = "height='%spx'" % (height)
else:
height = " "
toreturn = "<img %s %s src='data:image/%s;base64,%s' />" % (
width,
height,
type,
str(pycompat.to_text(img)))
return toreturn
def get_contract(self):
partner = int(self.partner_ids[0].id)
contract = self.env['partner.contract.customer'].search(
[('partner_id', '=', partner), ('state', '=', 'signed')], limit=1)
if contract:
return contract
def get_function_partner(self, partner):
director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1)
if director:
if director.function:
return director.function or 'отсутствует'
def get_name_partner(self, partner):
director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1)
if director:
return director.name or 'отсутствует'
def get_report_filename(self):
today = date.today()
d1 = today.strftime("%d-%m-%Y")
if self.partner_ids[0].parent_id:
p = ''.join(self.partner_ids[0].parent_id.name)
else:
p = ''.join(self.partner_ids[0].name)
# return 'Акт Сверки '+ d1 + ' ' + self.company_id.name+'_'+p
return str(self.company_id.id) + ' - ' + ' ' + d1
def sorted_lines(self, list):
list = sorted(list, key=lambda k: k.get('date'), reverse=False)
return list
#
# import time
# from ast import literal_eval
# from odoo import _, api, fields, models
# from odoo.tools import date_utils,pycompat
# from pytils import dt,numeral
# from datetime import datetime, date
# import re
# import urllib
#
# class GeneralLedgerReportWizard(models.TransientModel):
# """General ledger report wizard."""
#
# _name = "general.ledger.act_revise.wizard"
# _description = "General Ledger Report Wizard"
# _inherit = "act_revise.abstract_wizard"
#
# # date_range_id = fields.Many2one(comodel_name="date.range", string="Date range")
# date_from = fields.Date(string="Начало даты", required=True, default=lambda self: self._init_date_from())
# date_to = fields.Date(string="Конец даты", required=True, default=fields.Date.context_today)
# fy_start_date = fields.Date(compute="_compute_fy_start_date")
# target_move = fields.Selection(
# [("posted", "Все проведенные проводки"), ("all", "Все проводки")],
# string="Цель операции",
# required=True,
# default="posted",
# )
# account_ids = fields.Many2many(
# comodel_name="account.account", string=_("Filter accounts")
# )
# centralize = fields.Boolean(string=_("Activate centralization"), default=True)
# hide_account_at_0 = fields.Boolean(
# string=_("Hide account ending balance at 0"),
# help=_("Use this filter to hide an account or a partner "
# "with an ending balance at 0. "
# "If partners are filtered, "
# "debits and credits totals will not match the trial balance."),
# )
# receivable_accounts_only = fields.Boolean()
# payable_accounts_only = fields.Boolean()
# partner_ids = fields.Many2many(
# comodel_name="res.partner",
# string=_("Filter partners"),
# default=lambda self: self._default_partners(),
# )
# account_journal_ids = fields.Many2many(
# comodel_name="account.journal", string=_("Filter journals")
# )
# cost_center_ids = fields.Many2many(
# comodel_name="account.analytic.account", string=_("Filter cost centers")
# )
#
# not_only_one_unaffected_earnings_account = fields.Boolean(readonly=True)
# foreign_currency = fields.Boolean(
# string=_("Show foreign currency"),
# help=_("Display foreign currency for move lines, unless "
# "account currency is not setup through chart of accounts "
# "will display initial and final balance in that currency."),
# default=lambda self: self._default_foreign_currency(),
# )
# account_code_from = fields.Many2one(
# comodel_name="account.account",
# help="Starting account in a range",
# )
# account_code_to = fields.Many2one(
# comodel_name="account.account",
# help="Ending account in a range",
# )
# grouped_by = fields.Selection(
# selection=[("", "None"), ("partners", "Partners"), ("taxes", "Taxes")],
# default="partners",
# )
# show_cost_center = fields.Boolean(
# string="Show Analytic Account",
# default=True,
# )
# domain = fields.Char(
# string="Journal Items Domain",
# default=[],
# help="This domain will be used to select specific domain for Journal " "Items",
# )
#
# # def _print_report(self, report_type):
# # self.ensure_one()
# # data = self._prepare_report_general_ledger()
# # report = self.env["ir.actions.report"].search(
# # [("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)], limit=1, )
# # if self.partner_ids[0].parent_id:
# # partner = int(self.partner_ids[0].parent_id.id)
# # else:
# # partner = int(self.partner_ids[0].id)
# # return {
# # 'type': 'ir.actions.act_url',
# # 'url': '/my/act_revise_contact/%s?date_to=%s&date_from=%s&target_move=%s&company=%s&partner=%s' % (
# # urllib.parse.quote(self.get_report_filename()), self.date_to, self.date_from, self.target_move,
# # self.company_id.id, partner),
# # 'target': 'new',
# # }
#
# def _get_account_move_lines_domain(self):
# domain = literal_eval(self.domain) if self.domain else []
# return domain
#
# @api.onchange("account_code_from", "account_code_to")
# def on_change_account_range(self):
# if (
# self.account_code_from
# and self.account_code_from.code.isdigit()
# and self.account_code_to
# and self.account_code_to.code.isdigit()
# ):
# start_range = self.account_code_from.code
# end_range = self.account_code_to.code
# self.account_ids = self.env["account.account"].search(
# [("code", ">=", start_range), ("code", "<=", end_range)]
# )
# if self.company_id:
# self.account_ids = self.account_ids.filtered(
# lambda a: a.company_id == self.company_id
# )
#
# def _init_date_from(self):
# """set start date to begin of current year if fiscal year running"""
# today = fields.Date.context_today(self)
# company = self.company_id or self.env.company
# last_fsc_month = company.fiscalyear_last_month
# last_fsc_day = company.fiscalyear_last_day
#
# if (
# today.month < int(last_fsc_month)
# or today.month == int(last_fsc_month)
# and today.day <= last_fsc_day
# ):
# return time.strftime("%Y-01-01")
# else:
# return False
#
# def _default_foreign_currency(self):
# return self.env.user.has_group("base.group_multi_currency")
#
# @api.depends("date_from")
# def _compute_fy_start_date(self):
# for wiz in self:
# if wiz.date_from:
# date_from, date_to = date_utils.get_fiscal_year(
# wiz.date_from,
# day=self.company_id.fiscalyear_last_day,
# month=int(self.company_id.fiscalyear_last_month),
# )
# wiz.fy_start_date = date_from
# else:
# wiz.fy_start_date = False
#
# @api.onchange("company_id")
# def onchange_company_id(self):
# """Handle company change."""
# count = self.env["account.account"].search_count(
# [
# ("account_type", "=", "equity_unaffected"),
# ("company_id", "=", self.company_id.id),
# ]
# )
# self.not_only_one_unaffected_earnings_account = count != 1
# # if (
# # self.company_id
# # and self.date_range_id.company_id
# # and self.date_range_id.company_id != self.company_id
# # ):
# # self.date_range_id = False
# if self.company_id and self.account_journal_ids:
# self.account_journal_ids = self.account_journal_ids.filtered(
# lambda p: p.company_id == self.company_id or not p.company_id
# )
# if self.company_id and self.partner_ids:
# self.partner_ids = self.partner_ids.filtered(
# lambda p: p.company_id == self.company_id or not p.company_id
# )
# if self.company_id and self.account_ids:
# if self.receivable_accounts_only or self.payable_accounts_only:
# self.onchange_type_accounts_only()
# else:
# self.account_ids = self.account_ids.filtered(
# lambda a: a.company_id == self.company_id
# )
# if self.company_id and self.cost_center_ids:
# self.cost_center_ids = self.cost_center_ids.filtered(
# lambda c: c.company_id == self.company_id
# )
# res = {
# "domain": {
# "account_ids": [],
# "partner_ids": [],
# "account_journal_ids": [],
# "cost_center_ids": [],
# # "date_range_id": [],
# }
# }
# if not self.company_id:
# return res
# else:
# res["domain"]["account_ids"] += [("company_id", "=", self.company_id.id)]
# res["domain"]["account_journal_ids"] += [
# ("company_id", "=", self.company_id.id)
# ]
# res["domain"]["partner_ids"] += self._get_partner_ids_domain()
# res["domain"]["cost_center_ids"] += [
# ("company_id", "=", self.company_id.id)
# ]
# # res["domain"]["date_range_id"] += [
# # "|",
# # ("company_id", "=", self.company_id.id),
# # ("company_id", "=", False),
# # ]
# return res
#
# # @api.onchange("date_range_id")
# # def onchange_date_range_id(self):
# # """Handle date range change."""
# # if self.date_range_id:
# # self.date_from = self.date_range_id.date_start
# # self.date_to = self.date_range_id.date_end
#
# # @api.constrains("company_id", "date_range_id")
# # def _check_company_id_date_range_id(self):
# # for rec in self.sudo():
# # if (
# # rec.company_id
# # and rec.date_range_id.company_id
# # and rec.company_id != rec.date_range_id.company_id
# # ):
# # raise ValidationError(
# # _(
# # "The Company in the General Ledger Report Wizard and in "
# # "Date Range must be the same."
# # )
# # )
#
# @api.onchange("receivable_accounts_only", "payable_accounts_only")
# def onchange_type_accounts_only(self):
# """Handle receivable/payable accounts only change."""
# if self.receivable_accounts_only or self.payable_accounts_only:
# domain = [("company_id", "=", self.company_id.id)]
# if self.receivable_accounts_only and self.payable_accounts_only:
# domain += [
# ("account_type", "in", ("asset_receivable", "liability_payable"))
# ]
# elif self.receivable_accounts_only:
# domain += [("account_type", "=", "asset_receivable")]
# elif self.payable_accounts_only:
# domain += [("account_type", "=", "liability_payable")]
# self.account_ids = self.env["account.account"].search(domain)
# else:
# self.account_ids = None
#
# @api.onchange("partner_ids")
# def onchange_partner_ids(self):
# """Handle partners change."""
# if self.partner_ids:
# self.receivable_accounts_only = self.payable_accounts_only = True
# else:
# self.receivable_accounts_only = self.payable_accounts_only = False
#
# @api.depends("company_id")
# def _compute_unaffected_earnings_account(self):
# for record in self:
# record.unaffected_earnings_account = self.env["account.account"].search(
# [
# ("account_type", "=", "equity_unaffected"),
# ("company_id", "=", record.company_id.id),
# ]
# )
#
# unaffected_earnings_account = fields.Many2one(
# comodel_name="account.account",
# compute="_compute_unaffected_earnings_account",
# store=True,
# )
#
# # def _print_report(self, report_type):
# # self.ensure_one()
# # data = self._prepare_report_general_ledger()
# # report_name = "act_revise.general_ledger"
# # return (
# # self.env["ir.actions.report"]
# # .search(
# # [("report_name", "=", report_name), ("report_type", "=", report_type)],
# # limit=1,
# # )
# # .report_action(self, data=data)
# # )
# def _print_report(self, report_type):
# self.ensure_one()
# data = self._prepare_report_general_ledger()
# report = self.env["ir.actions.report"].search(
# [("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)], limit=1, )
# # report.report_name='Test'
# # report.headers.add('Content-Disposition', 'attachment; filename="Test.pdf";')
# # pdf, _ = request.env.ref('act_revise.action_print_report_general_ledger_qweb').sudo().render_qweb_pdf(self,data=data)
# # pdfhttpheaders = [('Content-Type', 'application/pdf'), ('Content-Length', len(pdf)),('Content-Disposition', 'attachment; filename="%s";' % report_name),]
# # return request.make_response(pdf, headers=pdfhttpheaders)
# # return (
# # self.env["ir.actions.report"]
# # .search(
# # [("report_name", "=", "act_revise.general_ledger"), ("report_type", "=", report_type)],
# # limit=1,
# # )
# # report.report_action(self, data=data)
# # )
# # name='Test'
# if self.partner_ids[0].parent_id:
# partner = int(self.partner_ids[0].parent_id.id)
# else:
# partner = int(self.partner_ids[0].id)
# account_data = self.env['account.move.line'].sudo().search([
# ('partner_id', '=', partner.id),
# ('account_id.account_type', 'in', ('liability_payable', 'asset_receivable')),
# ('account_id.non_trade', '=', False),
# ('date', '<=', self.date_to),
# ('date', '>=', self.date_from)
# ])
# if not account_data:
# raise UserError(f'Проводок для формирования акта по введенным условиям не найдено.')
# return {
# 'type': 'ir.actions.act_url',
# 'url': '/my/act_revise_contact/%s?date_to=%s&date_from=%s&target_move=%s&company=%s&partner=%s' % (
# urllib.parse.quote(self.get_report_filename()), self.date_to, self.date_from, self.target_move,
# self.company_id.id, partner),
# 'target': 'new',
# }
#
# def _prepare_report_general_ledger(self):
# self.ensure_one()
# return {
# "wizard_id": self.id,
# "date_from": self.date_from,
# "date_to": self.date_to,
# "only_posted_moves": self.target_move == "posted",
# "hide_account_at_0": self.hide_account_at_0,
# "foreign_currency": self.foreign_currency,
# "company_id": self.company_id.id,
# "account_ids": self.account_ids.ids,
# "partner_ids": self.partner_ids.ids,
# "grouped_by": self.grouped_by,
# "cost_center_ids": self.cost_center_ids.ids,
# "show_cost_center": self.show_cost_center,
# "journal_ids": self.account_journal_ids.ids,
# "centralize": self.centralize,
# "fy_start_date": self.fy_start_date,
# "unaffected_earnings_account": self.unaffected_earnings_account.id,
# "account_financial_report_lang": self.env.lang,
# "domain": self._get_account_move_lines_domain(),
# }
#
# def _export(self, report_type):
# """Default export is PDF."""
# return self._print_report(report_type)
#
# def _get_atr_from_dict(self, obj_id, data, key):
# try:
# return data[obj_id][key]
# except KeyError:
# return data[str(obj_id)][key]
#
# def numer(self, name):
# if name:
# numeration = re.findall('\d+$', name)
# if numeration: return numeration[0]
# return name
#
# def get_data_format(self, date):
# if date and date != 'False':
# return dt.ru_strftime(u'%d.%m.%Y Рі.', date=datetime.strptime(str(date), "%Y-%m-%d"), inflected=True)
# return ''
#
# def initials(self, fio):
# if fio:
# return (fio.split()[0] + ' ' + ''.join([fio[0:1] + '.' for fio in fio.split()[1:]])).strip()
# return ''
#
# def rubles(self, sum):
# "Transform sum number in rubles to text"
# text_rubles = numeral.rubles(int(sum))
# copeck = round((sum - int(sum)) * 100)
# text_copeck = numeral.choose_plural(int(copeck), (u"копейка", u"копейки", u"копеек"))
# return ("%s %02d %s") % (text_rubles, copeck, text_copeck)
#
# def img(self, img, type='png', width=0, height=0):
# if width:
# width = "width='%spx'" % (width)
# else:
# width = " "
# if height:
# height = "height='%spx'" % (height)
# else:
# height = " "
# toreturn = "<img %s %s src='data:image/%s;base64,%s' />" % (
# width,
# height,
# type,
# str(pycompat.to_text(img)))
# return toreturn
#
# def get_contract(self):
# partner = int(self.partner_ids[0].id)
# contract = self.env['partner.contract.customer'].search(
# [('partner_id', '=', partner), ('state', '=', 'signed')], limit=1)
# if contract:
# return contract
#
# def get_function_partner(self, partner):
# director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1)
# if director:
# if director.function:
# return director.function or 'отсутствует'
#
# def get_name_partner(self, partner):
# director = self.env['res.partner'].search([('parent_id', '=', partner), ('type', '=', 'director')], limit=1)
# if director:
# return director.name or 'отсутствует'
#
# def get_report_filename(self):
# today = date.today()
# d1 = today.strftime("%d-%m-%Y")
# if self.partner_ids[0].parent_id:
# p = ''.join(self.partner_ids[0].parent_id.name)
# else:
# p = ''.join(self.partner_ids[0].name)
# # return 'Акт Сверки '+ d1 + ' ' + self.company_id.name+'_'+p
# return str(self.company_id.id) + ' - ' + ' ' + d1
#
# def sorted_lines(self, list):
# list = sorted(list, key=lambda k: k.get('date'), reverse=False)
# return list