diff --git a/pms_api_rest/datamodels/pms_account_payment.py b/pms_api_rest/datamodels/pms_account_payment.py index 4f0c7b8db..a42f79aff 100644 --- a/pms_api_rest/datamodels/pms_account_payment.py +++ b/pms_api_rest/datamodels/pms_account_payment.py @@ -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) diff --git a/pms_api_rest/datamodels/pms_folio.py b/pms_api_rest/datamodels/pms_folio.py index 6536cdd05..8d20019ad 100644 --- a/pms_api_rest/datamodels/pms_folio.py +++ b/pms_api_rest/datamodels/pms_folio.py @@ -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): diff --git a/pms_api_rest/datamodels/pms_partner.py b/pms_api_rest/datamodels/pms_partner.py index 45bddb047..e220d5529 100644 --- a/pms_api_rest/datamodels/pms_partner.py +++ b/pms_api_rest/datamodels/pms_partner.py @@ -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) + diff --git a/pms_api_rest/services/pms_folio_service.py b/pms_api_rest/services/pms_folio_service.py index 7ebc7ce08..fae0b3fd4 100644 --- a/pms_api_rest/services/pms_folio_service.py +++ b/pms_api_rest/services/pms_folio_service.py @@ -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( [ ( [ - "//payments", + "//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( + [ + ( + [ + "//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( diff --git a/pms_api_rest/services/pms_partner_service.py b/pms_api_rest/services/pms_partner_service.py index f2ed9a7ad..72a4958fe 100644 --- a/pms_api_rest/services/pms_partner_service.py +++ b/pms_api_rest/services/pms_partner_service.py @@ -79,6 +79,7 @@ class PmsPartnerService(Component): ) return result_partners + # REVIEW: analyze in which service file this method should be @restapi.method( [ (