mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP] pms_api_rest: add open and close cash methods
This commit is contained in:
committed by
Darío Lodeiros
parent
f425d24ea2
commit
cf9a55b0c4
@@ -12,4 +12,5 @@ class PmsAccountJournalInfo(Datamodel):
|
|||||||
_name = "pms.account.journal.info"
|
_name = "pms.account.journal.info"
|
||||||
id = fields.Integer(required=False, allow_none=True)
|
id = fields.Integer(required=False, allow_none=True)
|
||||||
name = fields.String(required=False, allow_none=True)
|
name = fields.String(required=False, allow_none=True)
|
||||||
|
type = fields.String(required=False, allow_none=True)
|
||||||
allowedPayments = fields.Boolean(required=False, allow_none=True)
|
allowedPayments = fields.Boolean(required=False, allow_none=True)
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ class PmsPaymentSearchParam(Datamodel):
|
|||||||
class PmsPaymentResults(Datamodel):
|
class PmsPaymentResults(Datamodel):
|
||||||
_name = "pms.payment.results"
|
_name = "pms.payment.results"
|
||||||
payments = fields.List(NestedModel("pms.payment.info"))
|
payments = fields.List(NestedModel("pms.payment.info"))
|
||||||
total = fields.Integer(required=False, allow_none=True)
|
total = fields.Float(required=False, allow_none=True)
|
||||||
totalPayments = fields.Integer(required=False, allow_none=True)
|
totalPayments = fields.Integer(required=False, allow_none=True)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,10 +8,25 @@ class PmsCashRegisterInfo(Datamodel):
|
|||||||
id = fields.Integer(required=False, allow_none=True)
|
id = fields.Integer(required=False, allow_none=True)
|
||||||
state = fields.String(required=False, allow_none=True)
|
state = fields.String(required=False, allow_none=True)
|
||||||
userId = fields.Integer(required=False, allow_none=True)
|
userId = fields.Integer(required=False, allow_none=True)
|
||||||
balance = fields.Integer(required=False, allow_none=True)
|
balance = fields.Float(required=False, allow_none=True)
|
||||||
dateTime = fields.String(required=False, allow_none=True)
|
dateTime = fields.String(required=False, allow_none=True)
|
||||||
|
|
||||||
|
|
||||||
class PmsCashRegisterSearchParam(Datamodel):
|
class PmsCashRegisterSearchParam(Datamodel):
|
||||||
_name = "pms.cash.register.search.param"
|
_name = "pms.cash.register.search.param"
|
||||||
journalId = fields.Integer(required=False, allow_none=True)
|
journalId = fields.Integer(required=False, allow_none=True)
|
||||||
|
|
||||||
|
|
||||||
|
class PmsCashRegisterAction(Datamodel):
|
||||||
|
_name = "pms.cash.register.action"
|
||||||
|
action = fields.String(required=False, allow_none=True)
|
||||||
|
pmsPropertyId = fields.Integer(required=False, allow_none=True)
|
||||||
|
amount = fields.Float(required=False, allow_none=True)
|
||||||
|
journalId = fields.Integer(required=False, allow_none=True)
|
||||||
|
forceAction = fields.Boolean(required=False, allow_none=True)
|
||||||
|
|
||||||
|
|
||||||
|
class PmsCashRegisterResult(Datamodel):
|
||||||
|
_name = "pms.cash.register.result"
|
||||||
|
result = fields.Boolean(required=False, allow_none=False)
|
||||||
|
diff = fields.Float(required=False, allow_none=True)
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ class PmsAccountJournalService(Component):
|
|||||||
PmsAccountJournalInfo(
|
PmsAccountJournalInfo(
|
||||||
id=payment_method.id,
|
id=payment_method.id,
|
||||||
name=payment_method.name,
|
name=payment_method.name,
|
||||||
|
type=payment_method.type,
|
||||||
allowedPayments=payment_method.allowed_pms_payments,
|
allowedPayments=payment_method.allowed_pms_payments,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,4 +1,9 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
from odoo import _
|
||||||
from odoo.odoo import fields
|
from odoo.odoo import fields
|
||||||
|
from odoo.odoo.exceptions import ValidationError
|
||||||
|
from odoo.odoo.tools import get_lang
|
||||||
from odoo.osv import expression
|
from odoo.osv import expression
|
||||||
|
|
||||||
from odoo.addons.base_rest import restapi
|
from odoo.addons.base_rest import restapi
|
||||||
@@ -150,3 +155,115 @@ class PmsAccountPaymentService(Component):
|
|||||||
if isOpen
|
if isOpen
|
||||||
else statement.date_done.strftime("%d/%m/%Y"),
|
else statement.date_done.strftime("%d/%m/%Y"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@restapi.method(
|
||||||
|
[
|
||||||
|
(
|
||||||
|
[
|
||||||
|
"/p/cash-register",
|
||||||
|
],
|
||||||
|
"POST",
|
||||||
|
)
|
||||||
|
],
|
||||||
|
input_param=Datamodel("pms.cash.register.action", is_list=False),
|
||||||
|
output_param=Datamodel("pms.cash.register.result", is_list=False),
|
||||||
|
auth="jwt_api_pms",
|
||||||
|
)
|
||||||
|
def cash_register(self, cash_register_action):
|
||||||
|
PmsCashRegisterResult = self.env.datamodels["pms.cash.register.result"]
|
||||||
|
if cash_register_action.action == "open":
|
||||||
|
dict_result = self._action_open_cash_session(
|
||||||
|
pms_property_id=cash_register_action.pmsPropertyId,
|
||||||
|
amount=cash_register_action.amount,
|
||||||
|
journal_id=cash_register_action.journalId,
|
||||||
|
force=cash_register_action.forceAction,
|
||||||
|
)
|
||||||
|
elif cash_register_action.action == "close":
|
||||||
|
dict_result = self._action_close_cash_session(
|
||||||
|
pms_property_id=cash_register_action.pmsPropertyId,
|
||||||
|
amount=cash_register_action.amount,
|
||||||
|
journal_id=cash_register_action.journalId,
|
||||||
|
force=cash_register_action.forceAction,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
raise ValidationError(
|
||||||
|
_("No action cash register found (only allowed open/close actions")
|
||||||
|
)
|
||||||
|
return PmsCashRegisterResult(
|
||||||
|
result=dict_result["result"],
|
||||||
|
diff=dict_result["diff"],
|
||||||
|
)
|
||||||
|
|
||||||
|
def _action_open_cash_session(self, pms_property_id, amount, journal_id, force):
|
||||||
|
statement = (
|
||||||
|
self.env["account.bank.statement"]
|
||||||
|
.sudo()
|
||||||
|
.search(
|
||||||
|
[
|
||||||
|
("journal_id", "=", journal_id),
|
||||||
|
],
|
||||||
|
limit=1,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if round(statement.balance_end_real, 2) == round(amount, 2) or force:
|
||||||
|
self.env["account.bank.statement"].sudo().create(
|
||||||
|
{
|
||||||
|
"name": datetime.today().strftime(get_lang(self.env).date_format)
|
||||||
|
+ " ("
|
||||||
|
+ self.env.user.login
|
||||||
|
+ ")",
|
||||||
|
"date": datetime.today(),
|
||||||
|
"balance_start": amount,
|
||||||
|
"journal_id": journal_id,
|
||||||
|
"pms_property_id": pms_property_id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
diff = round(amount - statement.balance_end_real, 2)
|
||||||
|
return {"result": True, "diff": diff}
|
||||||
|
else:
|
||||||
|
diff = round(amount - statement.balance_end_real, 2)
|
||||||
|
return {"result": False, "diff": diff}
|
||||||
|
|
||||||
|
def _action_close_cash_session(self, pms_property_id, amount, journal_id, force):
|
||||||
|
statement = (
|
||||||
|
self.env["account.bank.statement"]
|
||||||
|
.sudo()
|
||||||
|
.search(
|
||||||
|
[
|
||||||
|
("journal_id", "=", journal_id),
|
||||||
|
("state", "=", "open"),
|
||||||
|
("pms_property_id", "=", pms_property_id),
|
||||||
|
],
|
||||||
|
limit=1,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
if round(statement.balance_end, 2) == round(amount, 2):
|
||||||
|
statement.sudo().balance_end_real = amount
|
||||||
|
statement.sudo().button_post()
|
||||||
|
return {
|
||||||
|
"result": True,
|
||||||
|
"diff": 0,
|
||||||
|
}
|
||||||
|
elif force:
|
||||||
|
# Not call to button post to avoid create profit/loss line
|
||||||
|
# (_check_balance_end_real_same_as_computed)
|
||||||
|
if not statement.name:
|
||||||
|
statement.sudo()._set_next_sequence()
|
||||||
|
statement.sudo().balance_end_real = amount
|
||||||
|
statement.write({"state": "posted"})
|
||||||
|
lines_of_moves_to_post = statement.line_ids.filtered(
|
||||||
|
lambda line: line.move_id.state != "posted"
|
||||||
|
)
|
||||||
|
if lines_of_moves_to_post:
|
||||||
|
lines_of_moves_to_post.move_id._post(soft=False)
|
||||||
|
diff = round(amount - statement.balance_end, 2)
|
||||||
|
return {
|
||||||
|
"result": True,
|
||||||
|
"diff": diff,
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
diff = round(amount - statement.balance_end, 2)
|
||||||
|
return {
|
||||||
|
"result": False,
|
||||||
|
"diff": diff,
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user