diff --git a/CHANGELOG.md b/CHANGELOG.md index eab0b7b..d792856 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## 0.13.3 | 2024-07-05 +* Fix deserialization for id in CustomFieldAttribute entity. + ## 0.13.2 | 2024-06-26 * Fix deserialization for sales_invoice in `CustomFieldSource` enum. diff --git a/src/Moneybird.Net/Entities/Contacts/Contact.cs b/src/Moneybird.Net/Entities/Contacts/Contact.cs index c5abf83..2980270 100644 --- a/src/Moneybird.Net/Entities/Contacts/Contact.cs +++ b/src/Moneybird.Net/Entities/Contacts/Contact.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text.Json.Serialization; +using Moneybird.Net.Entities.CustomFields; using Moneybird.Net.Entities.Notes; using Moneybird.Net.Misc; @@ -141,7 +142,7 @@ public class Contact : IMoneybirdEntity public List Notes { get; set; } [JsonPropertyName("custom_fields")] - public List CustomFields { get; set; } + public List CustomFields { get; set; } [JsonPropertyName("contact_people")] public List ContactPeople { get; set; } diff --git a/src/Moneybird.Net/Entities/Contacts/ContactCustomFieldsAttribute.cs b/src/Moneybird.Net/Entities/Contacts/ContactCustomFieldsAttribute.cs deleted file mode 100644 index 322ecf8..0000000 --- a/src/Moneybird.Net/Entities/Contacts/ContactCustomFieldsAttribute.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Text.Json.Serialization; - -namespace Moneybird.Net.Entities.Contacts -{ - public class ContactCustomFieldsAttribute - { - [JsonPropertyName("id")] - public int Id { get; set; } - - [JsonPropertyName("value")] - public string Value { get; set; } - } -} \ No newline at end of file diff --git a/src/Moneybird.Net/Entities/CustomFields/CustomFieldAttribute.cs b/src/Moneybird.Net/Entities/CustomFields/CustomFieldAttribute.cs new file mode 100644 index 0000000..c91f94f --- /dev/null +++ b/src/Moneybird.Net/Entities/CustomFields/CustomFieldAttribute.cs @@ -0,0 +1,17 @@ +using System.Text.Json.Serialization; + +namespace Moneybird.Net.Entities.CustomFields +{ + public class CustomFieldAttribute + { + [JsonPropertyName("id")] + public string Id { get; set; } + + [JsonPropertyName("name")] + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] + public string Name { get; set; } + + [JsonPropertyName("value")] + public string Value { get; set; } + } +} \ No newline at end of file diff --git a/src/Moneybird.Net/Entities/ExternalSalesInvoices/ExternalSalesInvoice.cs b/src/Moneybird.Net/Entities/ExternalSalesInvoices/ExternalSalesInvoice.cs index 1da276d..313a4b5 100644 --- a/src/Moneybird.Net/Entities/ExternalSalesInvoices/ExternalSalesInvoice.cs +++ b/src/Moneybird.Net/Entities/ExternalSalesInvoices/ExternalSalesInvoice.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; using Moneybird.Net.Entities.Contacts; +using Moneybird.Net.Entities.CustomFields; using Moneybird.Net.Entities.Payments; using Moneybird.Net.Entities.SalesInvoices; @@ -101,7 +102,7 @@ public class ExternalSalesInvoice : IMoneybirdEntity public string PaymentUrl { get; set; } [JsonPropertyName("custom_fields")] - public List CustomFields { get; set; } + public List CustomFields { get; set; } [JsonPropertyName("tax_totals")] public List TaxTotals { get; set; } diff --git a/src/Moneybird.Net/Entities/ExternalSalesInvoices/ExternalSalesInvoiceCustomField.cs b/src/Moneybird.Net/Entities/ExternalSalesInvoices/ExternalSalesInvoiceCustomField.cs deleted file mode 100644 index b72c5b0..0000000 --- a/src/Moneybird.Net/Entities/ExternalSalesInvoices/ExternalSalesInvoiceCustomField.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Text.Json.Serialization; - -namespace Moneybird.Net.Entities.ExternalSalesInvoices -{ - public class ExternalSalesInvoiceCustomField - { - [JsonPropertyName("id")] - public int Id { get; set; } - - [JsonPropertyName("value")] - public string Value { get; set; } - } -} diff --git a/src/Moneybird.Net/Entities/SalesInvoices/SalesInvoice.cs b/src/Moneybird.Net/Entities/SalesInvoices/SalesInvoice.cs index 4be3b60..330d3a8 100644 --- a/src/Moneybird.Net/Entities/SalesInvoices/SalesInvoice.cs +++ b/src/Moneybird.Net/Entities/SalesInvoices/SalesInvoice.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; using Moneybird.Net.Entities.Contacts; +using Moneybird.Net.Entities.CustomFields; using Moneybird.Net.Entities.Payments; namespace Moneybird.Net.Entities.SalesInvoices @@ -165,7 +166,7 @@ public class SalesInvoice : IMoneybirdEntity public string PaymentUrl { get; set; } [JsonPropertyName("custom_fields")] - public List CustomFields { get; set; } + public List CustomFields { get; set; } [JsonPropertyName("tax_totals")] public List TaxTotals { get; set; } diff --git a/src/Moneybird.Net/Entities/SalesInvoices/SalesInvoiceCustomField.cs b/src/Moneybird.Net/Entities/SalesInvoices/SalesInvoiceCustomField.cs deleted file mode 100644 index a805dd3..0000000 --- a/src/Moneybird.Net/Entities/SalesInvoices/SalesInvoiceCustomField.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Text.Json.Serialization; - -namespace Moneybird.Net.Entities.SalesInvoices -{ - public class SalesInvoiceCustomField - { - [JsonPropertyName("id")] - public int Id { get; set; } - - [JsonPropertyName("value")] - public string Value { get; set; } - } -} diff --git a/src/Moneybird.Net/Models/Contacts/ContactCreateItem.cs b/src/Moneybird.Net/Models/Contacts/ContactCreateItem.cs index bb4688b..2e96171 100644 --- a/src/Moneybird.Net/Models/Contacts/ContactCreateItem.cs +++ b/src/Moneybird.Net/Models/Contacts/ContactCreateItem.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; using Moneybird.Net.Entities.Contacts; +using Moneybird.Net.Entities.CustomFields; using Moneybird.Net.Misc; namespace Moneybird.Net.Models.Contacts @@ -101,7 +102,7 @@ public class ContactCreateItem public bool? DirectDebit { get; set; } [JsonPropertyName("custom_fields_attributes")] - public List CustomFieldsAttributes { get; set; } + public List CustomFieldsAttributes { get; set; } [JsonPropertyName("create_event")] public bool? CreateEvent { get; set; } diff --git a/src/Moneybird.Net/Models/Contacts/ContactUpdateItem.cs b/src/Moneybird.Net/Models/Contacts/ContactUpdateItem.cs index fa59462..540971a 100644 --- a/src/Moneybird.Net/Models/Contacts/ContactUpdateItem.cs +++ b/src/Moneybird.Net/Models/Contacts/ContactUpdateItem.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Text.Json.Serialization; using Moneybird.Net.Entities.Contacts; +using Moneybird.Net.Entities.CustomFields; using Moneybird.Net.Misc; namespace Moneybird.Net.Models.Contacts @@ -101,6 +102,6 @@ public class ContactUpdateItem public bool? DirectDebit { get; set; } [JsonPropertyName("custom_fields_attributes")] - public List CustomFieldsAttributes { get; set; } + public List CustomFieldsAttributes { get; set; } } } \ No newline at end of file diff --git a/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreate.cs b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreate.cs index 3cac54e..f243b71 100644 --- a/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreate.cs +++ b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceCreate.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text.Json.Serialization; +using Moneybird.Net.Entities.CustomFields; using Moneybird.Net.Entities.SalesInvoices; namespace Moneybird.Net.Models.SalesInvoices @@ -70,6 +71,6 @@ public class SalesInvoiceCreate public IReadOnlyList DetailsAttributes { get; set; } [JsonPropertyName("custom_fields_attributes")] - public IReadOnlyList CustomFieldsAttributes { get; set; } + public IReadOnlyList CustomFieldsAttributes { get; set; } } } diff --git a/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdate.cs b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdate.cs index 2929f1b..d796154 100644 --- a/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdate.cs +++ b/src/Moneybird.Net/Models/SalesInvoices/SalesInvoiceUpdate.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Text.Json.Serialization; +using Moneybird.Net.Entities.CustomFields; using Moneybird.Net.Entities.SalesInvoices; namespace Moneybird.Net.Models.SalesInvoices @@ -76,6 +77,6 @@ public class SalesInvoiceUpdate public IReadOnlyList DetailsAttributes { get; set; } [JsonPropertyName("custom_fields_attributes")] - public IReadOnlyList CustomFieldsAttributes { get; set; } + public IReadOnlyList CustomFieldsAttributes { get; set; } } } \ No newline at end of file diff --git a/src/Moneybird.Net/Moneybird.Net.csproj b/src/Moneybird.Net/Moneybird.Net.csproj index 7290580..62f43ef 100644 --- a/src/Moneybird.Net/Moneybird.Net.csproj +++ b/src/Moneybird.Net/Moneybird.Net.csproj @@ -3,7 +3,7 @@ netstandard2.0 9 Moneybird.Net - 0.13.1 + 0.13.3 Vincent Vrijburg A wrapper for the Moneybird API. Copyright © Vincent Vrijburg 2021 @@ -12,7 +12,7 @@ dotnet dotnet-core dotnet-standard client wrapper moneybird MIT false - 0.13.1 + 0.13.3 diff --git a/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs index b47215f..81877f2 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/ContactEndpointTests.cs @@ -6,6 +6,7 @@ using Moneybird.Net.Endpoints; using Moneybird.Net.Endpoints.Abstractions; using Moneybird.Net.Entities.Contacts; +using Moneybird.Net.Entities.CustomFields; using Moneybird.Net.Entities.Notes; using Moneybird.Net.Http; using Moneybird.Net.Misc; @@ -259,7 +260,14 @@ public async void CreateContactAsync_ByAccessToken_Returns_NewContact() SiIdentifierTypeType = null, CreateEvent = true, DirectDebit = false, - CustomFieldsAttributes = null + CustomFieldsAttributes = new List + { + new () + { + Id = "343816698630643114", + Value = "Custom field test value" + } + } } }; @@ -271,6 +279,7 @@ public async void CreateContactAsync_ByAccessToken_Returns_NewContact() var contact = JsonSerializer.Deserialize(contactJson, _config.SerializerOptions); Assert.NotNull(contact); + Assert.NotNull(contact.CustomFields.First().Name); var actualContact = await _contactEndpoint.CreateAsync(AdministrationId, contactCreateOptions, AccessToken); Assert.NotNull(actualContact); @@ -317,11 +326,11 @@ public async void UpdateContactAsync_ByAccessToken_Returns_UpdatedContact() SiIdentifier = "", SiIdentifierTypeType = null, DirectDebit = false, - CustomFieldsAttributes = new List + CustomFieldsAttributes = new List { new () { - Id = 1, + Id = "1", Value = "Custom contact field" } } diff --git a/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs b/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs index 6ecf0b1..7b3890f 100644 --- a/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs +++ b/tests/Moneybird.Net.Tests/Endpoints/SalesInvoiceEndpointTests.cs @@ -5,6 +5,7 @@ using System.Text.Json; using FluentAssertions; using Moneybird.Net.Endpoints; +using Moneybird.Net.Entities.CustomFields; using Moneybird.Net.Entities.SalesInvoices; using Moneybird.Net.Http; using Moneybird.Net.Models.SalesInvoices; @@ -155,9 +156,9 @@ public async void CreateSalesInvoiceAsync_ByAccessToken_Returns_NewSalesInvoice( Discount = 0, CustomFieldsAttributes = new [] { - new SalesInvoiceCustomField + new CustomFieldAttribute { - Id = 1, + Id = "1", Value = "Custom field value" } } @@ -227,14 +228,14 @@ public async void UpdateSalesInvoiceAsync_ByAccessToken_Returns_UpdatedSalesInvo }, CustomFieldsAttributes = new [] { - new SalesInvoiceCustomField + new CustomFieldAttribute() { - Id = 1, + Id = "1", Value = "Custom field value" }, - new SalesInvoiceCustomField + new CustomFieldAttribute { - Id = 2, + Id = "2", Value = "Second custom field value" } } @@ -275,4 +276,4 @@ public async void AddSalesInvoiceAttachmentAsync_ByAccessToken_Returns() var file = new MemoryStream(); await _salesInvoiceEndpoint.AddAttachmentAsync(AdministrationId, SalesInvoiceId, file, AccessToken, "testfile.pdf"); } -} +} \ No newline at end of file diff --git a/tests/Moneybird.Net.Tests/Responses/Endpoints/Contacts/newContact.json b/tests/Moneybird.Net.Tests/Responses/Endpoints/Contacts/newContact.json index 0c515e5..31d4fc0 100644 --- a/tests/Moneybird.Net.Tests/Responses/Endpoints/Contacts/newContact.json +++ b/tests/Moneybird.Net.Tests/Responses/Endpoints/Contacts/newContact.json @@ -43,7 +43,13 @@ "version": 1640619493, "sales_invoices_url": "https://moneybird.com/322056713748350877/sales_invoices/6af2bbb86743f70b85c9371911a7ce22686d04069a3c858d6817c2cc3e5c8c4b/all", "notes": [], - "custom_fields": [], + "custom_fields": [ + { + "id": "343816698630643114", + "name": "Test field", + "value": "Custom field test value" + } + ], "contact_people": [], "events": [] } \ No newline at end of file