You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
7.1 KiB
153 lines
7.1 KiB
# -*- coding: utf-8 -*-
|
|
#############################################################################
|
|
#
|
|
# Cybrosys Technologies Pvt. Ltd.
|
|
#
|
|
# Copyright (C) 2023-TODAY Cybrosys Technologies(<https://www.cybrosys.com>).
|
|
# Author: Jumana J(<https://www.cybrosys.com>)
|
|
#
|
|
# You can modify it under the terms of the GNU AFFERO
|
|
# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
|
|
#
|
|
# 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 AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details.
|
|
#
|
|
# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
# (AGPL v3) along with this program.
|
|
# If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
#############################################################################
|
|
"""pos session"""
|
|
from odoo import fields, models, Command, _
|
|
from odoo.tools import float_compare
|
|
|
|
|
|
class PosSession(models.Model):
|
|
"""inherit pos session to add branch field"""
|
|
_inherit = 'pos.session'
|
|
|
|
branch_id = fields.Many2one('res.branch', related='config_id.branch_id',
|
|
string="Branch", help='Allowed Branches',
|
|
readonly=True)
|
|
|
|
def _create_account_move(self, balancing_account=False, amount_to_balance=0,
|
|
bank_payment_method_diffs=None):
|
|
""" Create account.move and account.move.line records for this session.
|
|
|
|
Side-effects include:
|
|
- setting self.move_id to the created account.move record
|
|
- creating and validating account.bank.statement for cash payments
|
|
- reconciling cash receivable lines, invoice receivable lines and
|
|
stock output lines
|
|
"""
|
|
journal = self.config_id.journal_id
|
|
# Passing default_journal_id for the calculation of default currency
|
|
# of account move
|
|
# See _get_default_currency in the account/account_move.py.
|
|
account_move = self.env['account.move'].with_context(
|
|
default_journal_id=journal.id).create({
|
|
'journal_id': journal.id,
|
|
'date': fields.Date.context_today(self),
|
|
'ref': self.name,
|
|
'branch_id': self.branch_id.id
|
|
})
|
|
self.write({'move_id': account_move.id})
|
|
|
|
data = {'bank_payment_method_diffs': bank_payment_method_diffs or {}}
|
|
data = self._accumulate_amounts(data)
|
|
data = self._create_non_reconciliable_move_lines(data)
|
|
data = self._create_bank_payment_moves(data)
|
|
data = self._create_pay_later_receivable_lines(data)
|
|
data = self._create_cash_statement_lines_and_cash_move_lines(data)
|
|
data = self._create_invoice_receivable_lines(data)
|
|
data = self._create_stock_output_lines(data)
|
|
if balancing_account and amount_to_balance:
|
|
data = self._create_balancing_line(data, balancing_account,
|
|
amount_to_balance)
|
|
return data
|
|
|
|
def _create_split_account_payment(self, payment, amounts):
|
|
"""creating split of account payments"""
|
|
payment_method = payment.payment_method_id
|
|
if not payment_method.journal_id:
|
|
return self.env['account.move.line']
|
|
outstanding_account = \
|
|
payment_method.outstanding_account_id or \
|
|
self.company_id.account_journal_payment_debit_account_id
|
|
account_payment = self.env['account.payment'].create({
|
|
'amount': amounts['amount'],
|
|
'partner_id': payment.partner_id.id,
|
|
'journal_id': payment_method.journal_id.id,
|
|
'force_outstanding_account_id': outstanding_account.id,
|
|
'ref': _('%s POS payment of %s in %s') % (payment_method.name,
|
|
payment.partner_id
|
|
.display_name, self.name),
|
|
'pos_payment_method_id': payment_method.id,
|
|
'pos_session_id': self.id,
|
|
'branch_id': self.branch_id.id
|
|
})
|
|
account_payment.action_post()
|
|
return account_payment.move_id.line_ids.filtered(
|
|
lambda line: line.account_id ==
|
|
account_payment.destination_account_id)
|
|
|
|
def _create_combine_account_payment(self, payment_method, amounts,
|
|
diff_amount):
|
|
"""creating combined account payment"""
|
|
outstanding_account = \
|
|
payment_method.outstanding_account_id or \
|
|
self.company_id.account_journal_payment_debit_account_id
|
|
destination_account = self._get_receivable_account(payment_method)
|
|
|
|
if float_compare(amounts['amount'], 0,
|
|
precision_rounding=self.currency_id.rounding) < 0:
|
|
# revert the accounts because account.payment doesn't
|
|
# accept negative amount.
|
|
outstanding_account, destination_account = destination_account, \
|
|
outstanding_account
|
|
|
|
account_payment = self.env['account.payment'].create({
|
|
'amount': abs(amounts['amount']),
|
|
'journal_id': payment_method.journal_id.id,
|
|
'force_outstanding_account_id': outstanding_account.id,
|
|
'destination_account_id': destination_account.id,
|
|
'ref': _('Combine %s POS payments from %s') % (payment_method.name,
|
|
self.name),
|
|
'pos_payment_method_id': payment_method.id,
|
|
'pos_session_id': self.id,
|
|
'branch_id': self.branch_id.id
|
|
})
|
|
diff_amount_compare_to_zero = \
|
|
self.currency_id.compare_amounts(diff_amount, 0)
|
|
if diff_amount_compare_to_zero != 0:
|
|
self._apply_diff_on_account_payment_move(account_payment,
|
|
payment_method,
|
|
diff_amount)
|
|
account_payment.action_post()
|
|
return account_payment.move_id.line_ids\
|
|
.filtered(lambda line: line.account_id == account_payment.
|
|
destination_account_id)
|
|
|
|
def _create_diff_account_move_for_split_payment_method(self,
|
|
payment_method,
|
|
diff_amount):
|
|
""" Creating different account moves for split payment method"""
|
|
self.ensure_one()
|
|
|
|
get_diff_vals_result = self._get_diff_vals(payment_method.id,
|
|
diff_amount)
|
|
if not get_diff_vals_result:
|
|
return
|
|
|
|
source_vals, dest_vals = get_diff_vals_result
|
|
diff_move = self.env['account.move'].create({
|
|
'journal_id': payment_method.journal_id.id,
|
|
'date': fields.Date.context_today(self),
|
|
'ref': self._get_diff_account_move_ref(payment_method),
|
|
'line_ids': [Command.create(source_vals),
|
|
Command.create(dest_vals)],
|
|
'branch_id': self.branch_id.id
|
|
})
|
|
diff_move._post()
|
|
|