mirror of
https://github.com/OCA/pms.git
synced 2025-01-29 00:17:45 +02:00
[IMP] pms_api_rest: add account payment service with some filters
This commit is contained in:
committed by
Darío Lodeiros
parent
10499b7f1f
commit
7a5ebc04cc
@@ -1,15 +1,52 @@
|
||||
from marshmallow import fields
|
||||
|
||||
from odoo.addons.datamodel.core import Datamodel
|
||||
from odoo.addons.datamodel.fields import NestedModel
|
||||
|
||||
|
||||
class PmsPaymentInfo(Datamodel):
|
||||
_name = "pms.payment.info"
|
||||
id = fields.Integer(required=False, allow_none=True)
|
||||
name = fields.String(required=False, allow_none=True)
|
||||
amount = fields.Float(required=False, allow_none=True)
|
||||
journalId = fields.Integer(required=False, allow_none=True)
|
||||
date = fields.String(required=False, allow_none=True)
|
||||
partnerName = fields.String(required=False, allow_none=True)
|
||||
partnerId = fields.Integer(required=False, allow_none=True)
|
||||
paymentType = fields.String(required=False, allow_none=True)
|
||||
partnerType = fields.String(required=False, allow_none=True)
|
||||
isTransfer = fields.Boolean(required=False, allow_none=True)
|
||||
reference = fields.String(required=False, allow_none=True)
|
||||
createUid = fields.Integer(required=False, allow_none=True)
|
||||
|
||||
|
||||
class PmsPaymentSearchParam(Datamodel):
|
||||
_name = "pms.payment.search.param"
|
||||
_inherit = "pms.rest.metadata"
|
||||
pmsPropertyId = fields.Integer(required=True, allow_none=False)
|
||||
filter = fields.String(required=False, allow_none=True)
|
||||
dateStart = fields.String(required=False, allow_none=True)
|
||||
dateEnd = fields.String(required=False, allow_none=True)
|
||||
paymentMethodId = fields.Integer(required=False, allow_none=True)
|
||||
# TODO: paymentTypes filter
|
||||
paymentTypes = fields.List(fields.Integer(required=False, allow_none=True))
|
||||
paymentType = fields.String(required=False, allow_none=True)
|
||||
partnerType = fields.String(required=False, allow_none=True)
|
||||
isTransfer = fields.Boolean(required=False, allow_none=True)
|
||||
|
||||
|
||||
class PmsPaymentResults(Datamodel):
|
||||
_name = "pms.payment.results"
|
||||
payments = fields.List(NestedModel("pms.payment.info"))
|
||||
total = fields.Integer(required=False, allow_none=True)
|
||||
totalPayments = fields.Integer(required=False, allow_none=True)
|
||||
|
||||
|
||||
class PmsAccountPaymentInfo(Datamodel):
|
||||
_name = "pms.account.payment.short.info"
|
||||
id = fields.Integer(required=False, allow_none=True)
|
||||
date = fields.String(required=False, allow_none=True)
|
||||
journalId = fields.Integer(required=False, allow_none=True)
|
||||
amount = fields.Float(required=False, allow_none=True)
|
||||
partnerId = fields.Integer(required=False, allow_none=True)
|
||||
reservationIds = fields.List(fields.Integer(), required=False)
|
||||
|
||||
@@ -35,6 +35,7 @@ from . import pms_service_line_service
|
||||
from . import pms_room_closure_reason_service
|
||||
|
||||
from . import res_lang_service
|
||||
from . import pms_account_payment_service
|
||||
from . import pms_account_payment_terms_service
|
||||
from . import pms_account_journal_service
|
||||
from . import pms_invoice_service
|
||||
|
||||
101
pms_api_rest/services/pms_account_payment_service.py
Normal file
101
pms_api_rest/services/pms_account_payment_service.py
Normal file
@@ -0,0 +1,101 @@
|
||||
from datetime import datetime
|
||||
from odoo.addons.base_rest import restapi
|
||||
from odoo.addons.base_rest_datamodel.restapi import Datamodel
|
||||
from odoo.addons.component.core import Component
|
||||
from odoo.odoo import fields
|
||||
from odoo.osv import expression
|
||||
|
||||
|
||||
class PmsAccountPaymentService(Component):
|
||||
_inherit = "base.rest.service"
|
||||
_name = "pms.account.payment.service"
|
||||
_usage = "payments"
|
||||
_collection = "pms.services"
|
||||
|
||||
@restapi.method(
|
||||
[
|
||||
(
|
||||
[
|
||||
"/",
|
||||
],
|
||||
"GET",
|
||||
)
|
||||
],
|
||||
input_param=Datamodel("pms.payment.search.param", is_list=False),
|
||||
output_param=Datamodel("pms.payment.results", is_list=False),
|
||||
auth="jwt_api_pms",
|
||||
)
|
||||
def get_payments(self, pms_payments_search_param):
|
||||
result_payments = []
|
||||
domain_fields = []
|
||||
available_journals = ()
|
||||
if pms_payments_search_param.pmsPropertyId:
|
||||
available_journals = self.env["account.journal"].search(
|
||||
[
|
||||
"&",
|
||||
("pms_property_ids", "in", pms_payments_search_param.pmsPropertyId),
|
||||
("pms_property_ids", "!=", False),
|
||||
]
|
||||
)
|
||||
domain_fields.append(("journal_id", "in", available_journals.ids))
|
||||
domain_filter=list()
|
||||
if pms_payments_search_param.filter:
|
||||
# TODO: filter by folio and invoice
|
||||
for search in pms_payments_search_param.filter.split(" "):
|
||||
subdomains = [
|
||||
[("name", "ilike", search)],
|
||||
# [("folio_id.name", "ilike", search)],
|
||||
[("partner_id.display_name", "ilike", search)],
|
||||
]
|
||||
domain_filter.append(expression.OR(subdomains))
|
||||
|
||||
if pms_payments_search_param.dateStart and pms_payments_search_param.dateEnd:
|
||||
date_from = fields.Date.from_string(pms_payments_search_param.dateStart)
|
||||
date_to = fields.Date.from_string(pms_payments_search_param.dateEnd)
|
||||
domain_fields.extend([
|
||||
"&",
|
||||
("date", ">=", date_from),
|
||||
("date", "<", date_to),
|
||||
])
|
||||
if pms_payments_search_param.paymentMethodId:
|
||||
domain_fields.append(("journal_id","=",pms_payments_search_param.paymentMethodId))
|
||||
# TODO: payment tyope filter (partner_type, payment_type, is_transfer)
|
||||
if domain_filter:
|
||||
domain = expression.AND([domain_fields, domain_filter[0]])
|
||||
else:
|
||||
domain = domain_fields
|
||||
|
||||
PmsPaymentResults = self.env.datamodels["pms.payment.results"]
|
||||
PmsPaymentInfo = self.env.datamodels["pms.payment.info"]
|
||||
|
||||
total_payments = self.env["account.payment"].search_count(domain)
|
||||
for payment in self.env["account.payment"].search(
|
||||
domain,
|
||||
order=pms_payments_search_param.orderBy,
|
||||
limit=pms_payments_search_param.limit,
|
||||
offset=pms_payments_search_param.offset,
|
||||
):
|
||||
result_payments.append(
|
||||
PmsPaymentInfo(
|
||||
id=payment.id,
|
||||
name=payment.name if payment.name else None,
|
||||
amount=payment.amount,
|
||||
journalId=payment.journal_id.id
|
||||
if payment.journal_id
|
||||
else None,
|
||||
date=payment.date.strftime("%d/%m/%Y"),
|
||||
partnerId = payment.partner_id.id
|
||||
if payment.partner_id
|
||||
else None,
|
||||
partnerName = payment.partner_id.name
|
||||
if payment.partner_id
|
||||
else None,
|
||||
paymentType=payment.payment_type,
|
||||
partnerType=payment.partner_type,
|
||||
isTransfer=payment.is_internal_transfer,
|
||||
reference=payment.ref if payment.ref else None,
|
||||
createUid=payment.create_uid if payment.create_uid else None,
|
||||
)
|
||||
)
|
||||
|
||||
return PmsPaymentResults(payments=result_payments, total=23333, totalPayments=total_payments)
|
||||
Reference in New Issue
Block a user