70 lines
3.6 KiB
Diff
70 lines
3.6 KiB
Diff
diff --git a/addons/point_of_sale/models/pos_session.py b/addons/point_of_sale/models/pos_session.py
|
|
index 828d0bcf0f4..fd4a9e464f5 100644
|
|
--- a/addons/point_of_sale/models/pos_session.py
|
|
+++ b/addons/point_of_sale/models/pos_session.py
|
|
@@ -332,14 +332,16 @@ class PosSession(models.Model):
|
|
self._create_picking_at_end_of_session()
|
|
# Users without any accounting rights won't be able to create the journal entry. If this
|
|
# case, switch to sudo for creation and posting.
|
|
- try:
|
|
- with self.env.cr.savepoint():
|
|
- self.with_company(self.company_id)._create_account_move()
|
|
- except AccessError as e:
|
|
- if sudo:
|
|
- self.sudo().with_company(self.company_id)._create_account_move()
|
|
- else:
|
|
- raise e
|
|
+ # AKRETION HACK 20/10/2023 disable savepoint() because I get some
|
|
+ # crash upon pos session closing
|
|
+ #try:
|
|
+ # with self.env.cr.savepoint():
|
|
+ # self.with_company(self.company_id)._create_account_move()
|
|
+ #except AccessError as e:
|
|
+ # if sudo:
|
|
+ self.sudo().with_company(self.company_id)._create_account_move()
|
|
+ # else:
|
|
+ # raise e
|
|
if self.move_id.line_ids:
|
|
# Set the uninvoiced orders' state to 'done'
|
|
self.env['pos.order'].search([('session_id', '=', self.id), ('state', '=', 'paid')]).write({'state': 'done'})
|
|
@@ -506,6 +508,7 @@ class PosSession(models.Model):
|
|
sale_key = (
|
|
# account
|
|
line['income_account_id'],
|
|
+ line['income_analytic_account_id'],
|
|
# sign
|
|
-1 if line['amount'] < 0 else 1,
|
|
# for taxes
|
|
@@ -810,9 +813,14 @@ class PosSession(models.Model):
|
|
tax['account_id'] = tax_rep.account_id.id
|
|
date_order = order_line.order_id.date_order
|
|
taxes = [{'date_order': date_order, **tax} for tax in taxes]
|
|
+ # _get_product_analytic_accounts() is a method of the OCA module product_analytic
|
|
+ # from https://github.com/OCA/account-analytic
|
|
+ income_analytic_account = order_line.product_id.product_tmpl_id.with_company(
|
|
+ order_line.company_id)._get_product_analytic_accounts()['income']
|
|
return {
|
|
'date_order': order_line.order_id.date_order,
|
|
'income_account_id': get_income_account(order_line).id,
|
|
+ 'income_analytic_account_id': income_analytic_account and income_analytic_account.id or False,
|
|
'amount': order_line.price_subtotal,
|
|
'taxes': taxes,
|
|
'base_tags': tuple(tax_data['base_tags']),
|
|
@@ -860,7 +868,7 @@ class PosSession(models.Model):
|
|
return self._credit_amounts(partial_vals, amount, amount_converted)
|
|
|
|
def _get_sale_vals(self, key, amount, amount_converted):
|
|
- account_id, sign, tax_keys, base_tag_ids = key
|
|
+ account_id, analytic_account_id, sign, tax_keys, base_tag_ids = key
|
|
tax_ids = set(tax[0] for tax in tax_keys)
|
|
applied_taxes = self.env['account.tax'].browse(tax_ids)
|
|
title = 'Sales' if sign == 1 else 'Refund'
|
|
@@ -870,6 +878,7 @@ class PosSession(models.Model):
|
|
partial_vals = {
|
|
'name': name,
|
|
'account_id': account_id,
|
|
+ 'analytic_account_id': analytic_account_id,
|
|
'move_id': self.move_id.id,
|
|
'tax_ids': [(6, 0, tax_ids)],
|
|
'tax_tag_ids': [(6, 0, base_tag_ids)],
|