diff --git a/partner_statement/__manifest__.py b/partner_statement/__manifest__.py
index 41cd1861..5dafa7e1 100644
--- a/partner_statement/__manifest__.py
+++ b/partner_statement/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Partner Statement",
- "version": "13.0.1.2.2",
+ "version": "14.0.1.0.0",
"category": "Accounting & Finance",
"summary": "OCA Financial Reports",
"author": "ForgeFlow, Odoo Community Association (OCA)",
@@ -12,6 +12,7 @@
"depends": ["account"],
"external_dependencies": {"python": ["dateutil"]},
"data": [
+ "security/ir.model.access.csv",
"security/statement_security.xml",
"views/activity_statement.xml",
"views/outstanding_statement.xml",
diff --git a/partner_statement/report/activity_statement.py b/partner_statement/report/activity_statement.py
index a6be08bc..c7c52986 100644
--- a/partner_statement/report/activity_statement.py
+++ b/partner_statement/report/activity_statement.py
@@ -23,13 +23,15 @@ class ActivityStatement(models.AbstractModel):
ELSE sum(l.debit)
END as debit,
CASE WHEN l.currency_id is not null AND l.amount_currency < 0.0
- THEN sum(-l.amount_currency)
+ THEN sum(l.amount_currency * (-1))
ELSE sum(l.credit)
END as credit
FROM account_move_line l
+ JOIN account_account aa ON (aa.id = l.account_id)
+ JOIN account_account_type at ON (at.id = aa.user_type_id)
JOIN account_move m ON (l.move_id = m.id)
WHERE l.partner_id IN %(partners)s
- AND l.account_internal_type = %(account_type)s
+ AND at.type = %(account_type)s
AND l.date < %(date_start)s AND not l.blocked
AND m.state IN ('posted')
GROUP BY l.partner_id, l.currency_id, l.amount_currency, l.company_id
@@ -105,10 +107,12 @@ class ActivityStatement(models.AbstractModel):
ELSE l.date_maturity
END as date_maturity
FROM account_move_line l
+ JOIN account_account aa ON (aa.id = l.account_id)
+ JOIN account_account_type at ON (at.id = aa.user_type_id)
JOIN account_move m ON (l.move_id = m.id)
JOIN account_journal aj ON (l.journal_id = aj.id)
WHERE l.partner_id IN %(partners)s
- AND l.account_internal_type = %(account_type)s
+ AND at.type = %(account_type)s
AND %(date_start)s <= l.date
AND l.date <= %(date_end)s
AND m.state IN ('posted')
diff --git a/partner_statement/report/outstanding_statement.py b/partner_statement/report/outstanding_statement.py
index 7f406340..2cbd7846 100644
--- a/partner_statement/report/outstanding_statement.py
+++ b/partner_statement/report/outstanding_statement.py
@@ -16,76 +16,62 @@ class OutstandingStatement(models.AbstractModel):
return str(
self._cr.mogrify(
"""
- SELECT l.id, m.name AS move_id, l.partner_id, l.date, l.name,
- l.blocked, l.currency_id, l.company_id,
- CASE WHEN l.ref IS NOT NULL THEN l.ref ELSE m.ref END as ref,
+ SELECT l.id, m.name AS move_id, l.partner_id, l.date, l.name,
+ l.blocked, l.currency_id, l.company_id,
+ CASE WHEN l.ref IS NOT NULL
+ THEN l.ref
+ ELSE m.ref
+ END as ref,
CASE WHEN (l.currency_id is not null AND l.amount_currency > 0.0)
THEN avg(l.amount_currency)
ELSE avg(l.debit)
END as debit,
CASE WHEN (l.currency_id is not null AND l.amount_currency < 0.0)
- THEN avg(-l.amount_currency)
+ THEN avg(l.amount_currency * (-1))
ELSE avg(l.credit)
END as credit,
- (abs(COALESCE(l.balance, 0.0)) + sum(
- coalesce(pr.pr_sign, 0.0) * coalesce(pr.amount, 0.0))
- ) * sign(COALESCE(l.balance, 0.0)) AS open_amount,
- (abs(COALESCE(l.amount_currency, 0.0)) + sum(
- coalesce(pr.pr_sign, 0.0) * CASE
- WHEN pr.currency_id IS NOT NULL AND pr.currency_id = l.currency_id
- THEN coalesce(pr.amount_currency, 0.0)
- WHEN cur.id IS NOT NULL AND ROUND(
- abs(COALESCE(l.balance, 0.0)), cur.decimal_places) > 0.0
- THEN ROUND(coalesce(pr.amount, 0.0) *
- COALESCE(l.amount_currency, 0.0) / NULLIF(l.balance, 0.0),
- cur.decimal_places)
- ELSE ROUND(coalesce(pr.amount, 0.0) *
- COALESCE((
- SELECT r.rate FROM res_currency_rate r
- JOIN account_move_line aml
- ON pr.credit_move_id = aml.id
- WHERE r.currency_id = l.currency_id
- AND r.name <= aml.date
- AND (r.company_id IS NULL
- OR r.company_id = l.company_id)
- ORDER BY r.company_id, r.name DESC LIMIT 1), 1.0),
- cur.decimal_places)
- END)
- ) * sign(COALESCE(l.amount_currency, 0.0)) AS open_amount_currency,
+ CASE WHEN l.balance > 0.0
+ THEN l.balance - sum(coalesce(pd.amount, 0.0))
+ ELSE l.balance + sum(coalesce(pc.amount, 0.0))
+ END AS open_amount,
+ CASE WHEN l.balance > 0.0
+ THEN l.amount_currency - sum(coalesce(pd.debit_amount_currency, 0.0))
+ ELSE l.amount_currency + sum(coalesce(pc.credit_amount_currency, 0.0))
+ END AS open_amount_currency,
CASE WHEN l.date_maturity is null
THEN l.date
ELSE l.date_maturity
END as date_maturity
- FROM (
- SELECT l.*, CASE
- WHEN l.debit = 0.0 AND l.credit = 0.0 AND l.currency_id IS NOT NULL
- AND ROUND(COALESCE(l.amount_currency, 0.0),
- cur.decimal_places) > 0.0 THEN 1
- WHEN l.debit = 0.0 AND l.credit = 0.0 AND l.currency_id IS NOT NULL
- AND ROUND(COALESCE(l.amount_currency, 0.0),
- cur.decimal_places) < 0.0 THEN -1
- WHEN l.balance > 0.0 THEN 1 ELSE -1 END as sign
FROM account_move_line l
- LEFT JOIN res_currency cur ON cur.id = l.currency_id
- ) l
- JOIN account_move m ON l.move_id = m.id
- LEFT JOIN res_currency cur ON cur.id = l.currency_id
- LEFT JOIN LATERAL (SELECT pr.*,
- CASE WHEN pr.credit_move_id = l.id THEN l.sign
- ELSE -l.sign END AS pr_sign
- FROM account_partial_reconcile pr
- WHERE pr.max_date <= %(date_end)s AND (
- (pr.debit_move_id = l.id) OR (pr.credit_move_id = l.id))
- ) as pr ON TRUE
- WHERE l.partner_id IN %(partners)s
- AND l.account_internal_type = %(account_type)s
- AND (
- (pr.id IS NOT NULL AND pr.max_date <= %(date_end)s) OR
- (pr.id IS NULL)
- ) AND l.date <= %(date_end)s AND m.state IN ('posted')
- GROUP BY l.id, l.partner_id, m.name, l.date, l.date_maturity, l.name,
- CASE WHEN l.ref IS NOT NULL THEN l.ref ELSE m.ref END,
- l.blocked, l.currency_id, l.balance, l.amount_currency, l.company_id
+ JOIN account_account aa ON (aa.id = l.account_id)
+ JOIN account_account_type at ON (at.id = aa.user_type_id)
+ JOIN account_move m ON (l.move_id = m.id)
+ LEFT JOIN (SELECT pr.*
+ FROM account_partial_reconcile pr
+ INNER JOIN account_move_line l2
+ ON pr.credit_move_id = l2.id
+ WHERE l2.date <= %(date_end)s
+ ) as pd ON pd.debit_move_id = l.id
+ LEFT JOIN (SELECT pr.*
+ FROM account_partial_reconcile pr
+ INNER JOIN account_move_line l2
+ ON pr.debit_move_id = l2.id
+ WHERE l2.date <= %(date_end)s
+ ) as pc ON pc.credit_move_id = l.id
+ WHERE l.partner_id IN %(partners)s AND at.type = %(account_type)s
+ AND (
+ (pd.id IS NOT NULL AND
+ pd.max_date <= %(date_end)s) OR
+ (pc.id IS NOT NULL AND
+ pc.max_date <= %(date_end)s) OR
+ (pd.id IS NULL AND pc.id IS NULL)
+ ) AND l.date <= %(date_end)s AND m.state IN ('posted')
+ GROUP BY l.id, l.partner_id, m.name, l.date, l.date_maturity, l.name,
+ CASE WHEN l.ref IS NOT NULL
+ THEN l.ref
+ ELSE m.ref
+ END,
+ l.blocked, l.currency_id, l.balance, l.amount_currency, l.company_id
""",
locals(),
),
@@ -121,9 +107,7 @@ class OutstandingStatement(models.AbstractModel):
Q2.open_amount
FROM Q2
JOIN res_company c ON (c.id = Q2.company_id)
- JOIN res_currency cur ON cur.id = COALESCE(Q2.currency_id, c.currency_id)
- WHERE c.id = %(company_id)s AND
- round(Q2.open_amount, cur.decimal_places) != 0.0
+ WHERE c.id = %(company_id)s AND Q2.open_amount != 0.0
""",
locals(),
),
diff --git a/partner_statement/report/report_statement_common.py b/partner_statement/report/report_statement_common.py
index fbada72a..e48f83b5 100644
--- a/partner_statement/report/report_statement_common.py
+++ b/partner_statement/report/report_statement_common.py
@@ -38,66 +38,47 @@ class ReportStatementCommon(models.AbstractModel):
return str(
self._cr.mogrify(
"""
- SELECT l.partner_id, l.currency_id, l.company_id, l.move_id,
- (abs(COALESCE(l.balance, 0.0)) + sum(
- coalesce(pr.pr_sign, 0.0) * coalesce(pr.amount, 0.0))
- ) * sign(COALESCE(l.balance, 0.0)) AS open_due,
- (abs(COALESCE(l.amount_currency, 0.0)) + sum(
- coalesce(pr.pr_sign, 0.0) * CASE
- WHEN pr.currency_id IS NOT NULL AND pr.currency_id = l.currency_id
- THEN coalesce(pr.amount_currency, 0.0)
- WHEN cur.id IS NOT NULL AND ROUND(
- abs(COALESCE(l.balance, 0.0)), cur.decimal_places) > 0.0
- THEN ROUND(coalesce(pr.amount, 0.0) *
- COALESCE(l.amount_currency, 0.0) / NULLIF(l.balance, 0.0),
- cur.decimal_places)
- ELSE ROUND(coalesce(pr.amount, 0.0) *
- COALESCE((
- SELECT r.rate FROM res_currency_rate r
- JOIN account_move_line aml
- ON pr.credit_move_id = aml.id
- WHERE r.currency_id = l.currency_id
- AND r.name <= aml.date
- AND (r.company_id IS NULL
- OR r.company_id = l.company_id)
- ORDER BY r.company_id, r.name DESC LIMIT 1), 1.0),
- cur.decimal_places)
- END)
- ) * sign(COALESCE(l.amount_currency, 0.0)) AS open_due_currency,
+ SELECT l.partner_id, l.currency_id, l.company_id, l.move_id,
+ CASE WHEN l.balance > 0.0
+ THEN l.balance - sum(coalesce(pd.amount, 0.0))
+ ELSE l.balance + sum(coalesce(pc.amount, 0.0))
+ END AS open_due,
+ CASE WHEN l.balance > 0.0
+ THEN l.amount_currency - sum(coalesce(pd.debit_amount_currency, 0.0))
+ ELSE l.amount_currency + sum(coalesce(pc.credit_amount_currency, 0.0))
+ END AS open_due_currency,
CASE WHEN l.date_maturity is null
THEN l.date
ELSE l.date_maturity
- END as date_maturity
- FROM (
- SELECT l.*, CASE
- WHEN l.debit = 0.0 AND l.credit = 0.0 AND l.currency_id IS NOT NULL
- AND ROUND(COALESCE(l.amount_currency, 0.0),
- cur.decimal_places) > 0.0 THEN 1
- WHEN l.debit = 0.0 AND l.credit = 0.0 AND l.currency_id IS NOT NULL
- AND ROUND(COALESCE(l.amount_currency, 0.0),
- cur.decimal_places) < 0.0 THEN -1
- WHEN l.balance > 0.0 THEN 1 ELSE -1 END as sign
+ END as date_maturity
FROM account_move_line l
- LEFT JOIN res_currency cur ON cur.id = l.currency_id
- ) l
- JOIN account_move m ON l.move_id = m.id
- LEFT JOIN res_currency cur ON cur.id = l.currency_id
- LEFT JOIN LATERAL (SELECT pr.*,
- CASE WHEN pr.credit_move_id = l.id THEN l.sign
- ELSE -l.sign END AS pr_sign
- FROM account_partial_reconcile pr
- WHERE pr.max_date <= %(date_end)s AND (
- (pr.debit_move_id = l.id) OR (pr.credit_move_id = l.id))
- ) as pr ON TRUE
- WHERE l.partner_id IN %(partners)s
- AND l.account_internal_type = %(account_type)s
- AND (
- (pr.id IS NOT NULL AND pr.max_date <= %(date_end)s) OR
- (pr.id IS NULL)
- ) AND l.date <= %(date_end)s AND not l.blocked
- AND m.state IN ('posted')
- GROUP BY l.partner_id, l.currency_id, l.date, l.date_maturity,
- l.amount_currency, l.balance, l.move_id, l.company_id, l.id
+ JOIN account_move m ON (l.move_id = m.id)
+ JOIN account_account aa ON (aa.id = l.account_id)
+ JOIN account_account_type at ON (at.id = aa.user_type_id)
+ LEFT JOIN (SELECT pr.*
+ FROM account_partial_reconcile pr
+ INNER JOIN account_move_line l2
+ ON pr.credit_move_id = l2.id
+ WHERE l2.date <= %(date_end)s
+ ) as pd ON pd.debit_move_id = l.id
+ LEFT JOIN (SELECT pr.*
+ FROM account_partial_reconcile pr
+ INNER JOIN account_move_line l2
+ ON pr.debit_move_id = l2.id
+ WHERE l2.date <= %(date_end)s
+ ) as pc ON pc.credit_move_id = l.id
+ WHERE l.partner_id IN %(partners)s AND at.type = %(account_type)s
+ AND (
+ (pd.id IS NOT NULL AND
+ pd.max_date <= %(date_end)s) OR
+ (pc.id IS NOT NULL AND
+ pc.max_date <= %(date_end)s) OR
+ (pd.id IS NULL AND pc.id IS NULL)
+ ) AND l.date <= %(date_end)s AND not l.blocked
+ AND m.state IN ('posted')
+ GROUP BY l.partner_id, l.currency_id, l.date, l.date_maturity,
+ l.amount_currency, l.balance, l.move_id,
+ l.company_id, l.id
""",
locals(),
),
@@ -307,8 +288,8 @@ class ReportStatementCommon(models.AbstractModel):
)
@api.model
- # flake8: noqa: C901
def _get_report_values(self, docids, data=None):
+ # flake8: noqa: C901
"""
@return: returns a dict of parameters to pass to qweb report.
the most important pair is {'data': res} which contains all
diff --git a/partner_statement/security/ir.model.access.csv b/partner_statement/security/ir.model.access.csv
new file mode 100644
index 00000000..f3a19dcc
--- /dev/null
+++ b/partner_statement/security/ir.model.access.csv
@@ -0,0 +1,3 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_activity_statement_wizard,access_activity_statement_wizard,model_activity_statement_wizard,account.group_account_invoice,1,1,1,0
+access_outstanding_statement_wizard,access_outstanding_statement_wizard,model_outstanding_statement_wizard,account.group_account_invoice,1,1,1,0
diff --git a/partner_statement/tests/test_res_config_settings.py b/partner_statement/tests/test_res_config_settings.py
index 919cccf7..02683de7 100644
--- a/partner_statement/tests/test_res_config_settings.py
+++ b/partner_statement/tests/test_res_config_settings.py
@@ -32,4 +32,4 @@ class TestResConfigSettings(TransactionCase):
self.user_obj._has_group("partner_statement.group_activity_statement")
)
res = self.env["ir.default"].get("activity.statement.wizard", "aging_type")
- self.assertEquals(res, "months")
+ self.assertEqual(res, "months")
diff --git a/partner_statement/views/activity_statement.xml b/partner_statement/views/activity_statement.xml
index 36563bf5..721b7856 100644
--- a/partner_statement/views/activity_statement.xml
+++ b/partner_statement/views/activity_statement.xml
@@ -161,13 +161,11 @@
-
+
+ Activity Statement
+ res.partner
+ partner_statement.activity_statement
+ qweb-pdf
+ partner_statement.activity_statement
+
diff --git a/partner_statement/views/outstanding_statement.xml b/partner_statement/views/outstanding_statement.xml
index 9752406f..4fca43f4 100644
--- a/partner_statement/views/outstanding_statement.xml
+++ b/partner_statement/views/outstanding_statement.xml
@@ -157,13 +157,11 @@
-
+
+ Outstanding Statement
+ res.partner
+ partner_statement.outstanding_statement
+ qweb-pdf
+ partner_statement.outstanding_statement
+
diff --git a/partner_statement/wizard/statement_common.py b/partner_statement/wizard/statement_common.py
index d1072d52..df055700 100644
--- a/partner_statement/wizard/statement_common.py
+++ b/partner_statement/wizard/statement_common.py
@@ -11,16 +11,10 @@ class StatementCommon(models.AbstractModel):
_name = "statement.common.wizard"
_description = "Statement Reports Common Wizard"
- def _get_company(self):
- return (
- self.env["res.company"].browse(self.env.context.get("force_company"))
- or self.env.company
- )
-
name = fields.Char()
company_id = fields.Many2one(
comodel_name="res.company",
- default=_get_company,
+ default=lambda self: self.env.company,
string="Company",
required=True,
)
diff --git a/partner_statement/wizard/statement_wizard.xml b/partner_statement/wizard/statement_wizard.xml
index 9c3d41c7..84ec2762 100644
--- a/partner_statement/wizard/statement_wizard.xml
+++ b/partner_statement/wizard/statement_wizard.xml
@@ -3,24 +3,28 @@
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
-
-
+
+ Partner Activity Statement
+
+ activity.statement.wizard
+ form
+
+ new
+
+
+ Partner Outstanding Statement
+
+ outstanding.statement.wizard
+ form
+
+ new
+ Statement Common Wizard View
@@ -28,11 +32,11 @@