Skip to content
Snippets Groups Projects

Feature/contract catalog pack pagination

Merged Borja Gimeno requested to merge feature/contract-catalog-pack-pagination into master
All threads resolved!
Files
7
from odoo_somconnexio_python_client.client import Client
from odoo_somconnexio_python_client.resources.odoo_paging import Paging
from ..exceptions import ResourceNotFound
from ..exceptions import (
InvalidSortOrder,
NotNumericLimit,
NotNumericOffset,
ResourceNotFound,
)
class PagingContracts:
# TODO: Add all the needed fields in the future...
def __init__(self, contracts, paging):
self.contracts = contracts
self.paging = paging
@@ -65,14 +71,35 @@ class Contract:
self.address = AddressContract(**kwargs.get("address", {}))
@classmethod
def paginated_search_by_customer_ref(cls, customer_ref, limit, offset):
def paginated_search_by_customer_ref(
cls, customer_ref, limit=None, offset=None, sortBy=None, sortOrder=None
):
"""
Search Contracts in Odoo by partner's ref and control paging params.
:return: Contracts object if exists and controls params to pagination
"""
params = {
"customer_ref": customer_ref,
}
if not type(limit) == int:
raise NotNumericLimit(limit=limit)
params["limit"] = limit
if not type(offset) == int:
raise NotNumericOffset(offset=offset)
params["offset"] = offset
if sortBy:
params["sortBy"] = sortBy
if sortOrder:
if sortOrder not in ["DESCENDING", "ASCENDING"]:
raise InvalidSortOrder
params["sortOrder"] = sortOrder
return cls._get(
params={"customer_ref": customer_ref, "limit": limit, "offset": offset},
params=params,
is_paginated=True,
)
@@ -142,14 +169,15 @@ class Contract:
if not response_data:
raise ResourceNotFound(resource=cls.__name__, filter=params)
contracts = []
for contract_found in response_data.get("contracts", response_data):
contracts.append(cls(**contract_found))
contracts = [
cls(**contract_found) for contract_found in response_data["contracts"]
]
response = contracts
if not is_paginated:
return contracts
if is_paginated:
response = PagingContracts(
contracts,
Paging(**response_data.get("paging", {})),
)
return PagingContracts(
contracts,
Paging(**response_data.get("paging", {})),
)
return response
Loading