diff --git a/paperless/api_mappers/quotes.py b/paperless/api_mappers/quotes.py index 81c6e41..be0d49a 100644 --- a/paperless/api_mappers/quotes.py +++ b/paperless/api_mappers/quotes.py @@ -191,10 +191,18 @@ def map(cls, resource): 'customer', 'erp_code', 'send_from_facility', - 'rfq_number' + 'rfq_number', + 'uuid', + 'order_numbers', + 'metadata' ] for key in field_keys: mapped_result[key] = resource.get(key, None) + + # Handle special default values for new fields + if mapped_result.get('order_numbers') is None: + mapped_result['order_numbers'] = [] + bool_keys = ['export_controlled', 'is_unviewed_drafted_rfq'] for key in bool_keys: mapped_result[key] = resource.get(key, False) diff --git a/paperless/objects/quotes.py b/paperless/objects/quotes.py index ed75a45..dacd34a 100644 --- a/paperless/objects/quotes.py +++ b/paperless/objects/quotes.py @@ -522,6 +522,18 @@ class Quote( attr.validators.instance_of((int, float, object)) ), ) + uuid: Optional[str] = attr.ib( + validator=attr.validators.optional(attr.validators.instance_of(str)), + default=None + ) + order_numbers: List[str] = attr.ib( + converter=lambda x: x if x is not None else [], + default=attr.Factory(list) + ) + metadata: Optional[Dict[str, Union[str, int, float, bool]]] = attr.ib( + validator=attr.validators.optional(attr.validators.instance_of(dict)), + default=None + ) @classmethod def construct_get_url(cls): diff --git a/tests/unit/mock_data/quote.json b/tests/unit/mock_data/quote.json index b28967f..2ea59b0 100644 --- a/tests/unit/mock_data/quote.json +++ b/tests/unit/mock_data/quote.json @@ -11199,9 +11199,15 @@ "authenticated_pdf_quote_url": null, "is_unviewed_drafted_rfq": false, "created": "2020-12-08T14:54:54+00:00", + "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "order_numbers": [ 179 ], + "metadata": { + "source": "test", + "priority_level": 1, + "is_expedited": false + }, "revision_number": null, "send_from_facility": { "id": 1, diff --git a/tests/unit/test_quotes.py b/tests/unit/test_quotes.py index c303b58..9bb767f 100644 --- a/tests/unit/test_quotes.py +++ b/tests/unit/test_quotes.py @@ -20,6 +20,13 @@ def test_get_quote(self): self.assertEqual(q.number, 339) self.assertEqual(q.tax_rate, 0.0) self.assertFalse(q.is_unviewed_drafted_rfq) + # test new fields + self.assertEqual(q.uuid, 'a1b2c3d4-e5f6-7890-abcd-ef1234567890') + self.assertEqual(q.order_numbers, [179]) + self.assertIsNotNone(q.metadata) + self.assertEqual(q.metadata['source'], 'test') + self.assertEqual(q.metadata['priority_level'], 1) + self.assertFalse(q.metadata['is_expedited']) # test customer customer = q.customer self.assertIsNone(customer.id)