mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP]pms_api_rest: added services and datamodels to account payment, folio and partner
This commit is contained in:
@@ -9,6 +9,7 @@ class PmsPaymentInfo(Datamodel):
|
||||
amount = fields.Float(required=False, allow_none=True)
|
||||
journalId = fields.Integer(required=False, allow_none=True)
|
||||
date = fields.String(required=False, allow_none=True)
|
||||
paymentType = fields.String(required=False, allow_none=True)
|
||||
|
||||
|
||||
class PmsAccountPaymentInfo(Datamodel):
|
||||
@@ -17,4 +18,5 @@ class PmsAccountPaymentInfo(Datamodel):
|
||||
date = fields.String(required=False, allow_none=True)
|
||||
journalId = fields.Integer(required=False, allow_none=True)
|
||||
amount = fields.Float(required=False, allow_none=True)
|
||||
partnerName = fields.String(required=False, allow_none=True)
|
||||
partnerId = fields.Integer(required=False, allow_none=True)
|
||||
reservationIds = fields.List(fields.Integer(), required=False)
|
||||
|
||||
@@ -23,6 +23,7 @@ class PmsFolioInfo(Datamodel):
|
||||
amountTotal = fields.Float(required=False, allow_none=True)
|
||||
reservationType = fields.String(required=False, allow_none=True)
|
||||
pendingAmount = fields.Float(required=False, allow_none=True)
|
||||
lastCheckout = fields.String(required=False, allow_none=True)
|
||||
|
||||
|
||||
class PmsFolioShortInfo(Datamodel):
|
||||
|
||||
@@ -2,6 +2,11 @@ from marshmallow import fields
|
||||
|
||||
from odoo.addons.datamodel.core import Datamodel
|
||||
|
||||
class PmsPartnerSearchParam(Datamodel):
|
||||
_name = "pms.partner.search.param"
|
||||
id = fields.Integer(required=False, allow_none=True)
|
||||
vat = fields.String(required=False, allow_none=True)
|
||||
|
||||
|
||||
class PmsPartnerSearchParam(Datamodel):
|
||||
_name = "pms.partner.search.param"
|
||||
@@ -37,6 +42,6 @@ class PmsPartnerInfo(Datamodel):
|
||||
countryId = fields.Integer(required=False, allow_none=True)
|
||||
countryName = fields.String(required=False, allow_none=True)
|
||||
tagIds = fields.List(fields.Integer(required=False, allow_none=True))
|
||||
documentNumbers = fields.List(fields.Integer(required=False, allow_none=True))
|
||||
lastStay = fields.String(required=False, allow_none=True)
|
||||
website = fields.String(required=False, allow_none=True)
|
||||
|
||||
|
||||
@@ -47,6 +47,7 @@ class PmsFolioService(Component):
|
||||
amountTotal=round(folio.amount_total, 2),
|
||||
reservationType=folio.reservation_type,
|
||||
pendingAmount=folio.pending_amount,
|
||||
lastCheckout=str(folio.last_checkout)
|
||||
)
|
||||
else:
|
||||
raise MissingError(_("Folio not found"))
|
||||
@@ -186,41 +187,29 @@ class PmsFolioService(Component):
|
||||
if not folio:
|
||||
pass
|
||||
else:
|
||||
if folio.payment_state == "not_paid":
|
||||
pass
|
||||
# si el folio está sin pagar no tendrá ningún pago o envíar []?
|
||||
else:
|
||||
# if folio.statement_line_ids:
|
||||
# for payment in folio.statement_line_ids:
|
||||
# payments.append(
|
||||
# PmsPaymentInfo(
|
||||
# id=payment.id,
|
||||
# amount=round(payment.amount, 2),
|
||||
# journalId=payment.journal_id.id,
|
||||
# date=datetime.combine(
|
||||
# payment.date, datetime.min.time()
|
||||
# ).isoformat(),
|
||||
# )
|
||||
# )
|
||||
if folio.payment_ids:
|
||||
for payment in folio.payment_ids:
|
||||
payments.append(
|
||||
PmsPaymentInfo(
|
||||
id=payment.id,
|
||||
amount=round(payment.amount, 2),
|
||||
journalId=payment.journal_id.id,
|
||||
date=datetime.combine(
|
||||
payment.date, datetime.min.time()
|
||||
).isoformat(),
|
||||
)
|
||||
# if folio.payment_state == "not_paid":
|
||||
# pass
|
||||
# else:
|
||||
if folio.payment_ids:
|
||||
for payment in folio.payment_ids:
|
||||
payments.append(
|
||||
PmsPaymentInfo(
|
||||
id=payment.id,
|
||||
amount=round(payment.amount, 2),
|
||||
journalId=payment.journal_id.id,
|
||||
date=datetime.combine(
|
||||
payment.date, datetime.min.time()
|
||||
).isoformat(),
|
||||
paymentType=payment.payment_type,
|
||||
)
|
||||
)
|
||||
return payments
|
||||
|
||||
@restapi.method(
|
||||
[
|
||||
(
|
||||
[
|
||||
"/<int:folio_id>/payments",
|
||||
"/<int:folio_id>/charge",
|
||||
],
|
||||
"POST",
|
||||
)
|
||||
@@ -229,31 +218,48 @@ class PmsFolioService(Component):
|
||||
auth="jwt_api_pms",
|
||||
)
|
||||
def create_folio_charge(self, folio_id, pms_account_payment_info):
|
||||
partner = self.env["res.partner"].search(
|
||||
[("name", "=", pms_account_payment_info.partnerName)]
|
||||
)
|
||||
folio = self.env["pms.folio"].browse(folio_id)
|
||||
|
||||
if partner:
|
||||
partner_id = partner
|
||||
elif not partner and pms_account_payment_info.partnerName:
|
||||
partner_id = self.env["res.partner"].create(
|
||||
{"name": pms_account_payment_info.partnerName}
|
||||
)
|
||||
if pms_account_payment_info.partnerId:
|
||||
partner_id = self.env["res.partner"].browse(int(pms_account_payment_info.partnerId))
|
||||
else:
|
||||
partner_id = folio.partner_id
|
||||
charge_date_str = (
|
||||
pms_account_payment_info.date[3:5]
|
||||
+ "/"
|
||||
+ pms_account_payment_info.date[:2]
|
||||
+ "/"
|
||||
+ pms_account_payment_info.date[6:]
|
||||
)
|
||||
charge_date = datetime.strptime(charge_date_str, "%m/%d/%Y")
|
||||
journal_id = self.env["account.journal"].browse(
|
||||
pms_account_payment_info.journalId
|
||||
)
|
||||
self.env["pms.folio"].do_payment(
|
||||
journal_id,
|
||||
journal_id.suspense_account_id,
|
||||
self.env.user,
|
||||
pms_account_payment_info.amount,
|
||||
folio,
|
||||
reservations=pms_account_payment_info.reservationIds,
|
||||
services=False,
|
||||
partner=partner_id,
|
||||
date=datetime.strptime(pms_account_payment_info.date, "%m/%d/%Y"),
|
||||
)
|
||||
|
||||
@restapi.method(
|
||||
[
|
||||
(
|
||||
[
|
||||
"/<int:folio_id>/refund",
|
||||
],
|
||||
"POST",
|
||||
)
|
||||
],
|
||||
input_param=Datamodel("pms.account.payment.short.info", is_list=False),
|
||||
auth="jwt_api_pms",
|
||||
)
|
||||
def create_folio_refund(self, folio_id, pms_account_payment_info):
|
||||
folio = self.env["pms.folio"].browse(folio_id)
|
||||
if pms_account_payment_info.partnerId:
|
||||
partner_id = self.env["res.partner"].browse(pms_account_payment_info.partnerId)
|
||||
else:
|
||||
partner_id = folio.partner_id
|
||||
journal_id = self.env["account.journal"].browse(
|
||||
pms_account_payment_info.journalId
|
||||
)
|
||||
self.env["pms.folio"].do_refund(
|
||||
journal_id,
|
||||
journal_id.suspense_account_id,
|
||||
self.env.user,
|
||||
@@ -262,7 +268,7 @@ class PmsFolioService(Component):
|
||||
reservations=False,
|
||||
services=False,
|
||||
partner=partner_id,
|
||||
date=charge_date,
|
||||
date=datetime.strptime(pms_account_payment_info.date, "%m/%d/%Y"),
|
||||
)
|
||||
|
||||
@restapi.method(
|
||||
|
||||
@@ -79,6 +79,7 @@ class PmsPartnerService(Component):
|
||||
)
|
||||
return result_partners
|
||||
|
||||
# REVIEW: analyze in which service file this method should be
|
||||
@restapi.method(
|
||||
[
|
||||
(
|
||||
|
||||
Reference in New Issue
Block a user