Skip to content

Commit

Permalink
Merge pull request #63 from VincentVrijburg/feature/financial-statements
Browse files Browse the repository at this point in the history
Add support for financial statements endpoint
  • Loading branch information
VincentVrijburg authored Oct 2, 2023
2 parents cf956d3 + b219583 commit 420750b
Show file tree
Hide file tree
Showing 19 changed files with 668 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/Moneybird.Net/Abstractions/IMoneybirdClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@ public interface IMoneybirdClient : IDisposable
/// </summary>
IFinancialAccountEndpoint FinancialAccount { get; }

/// <summary>
/// The FinancialAccount Endpoint.
/// </summary>
IFinancialStatementEndpoint FinancialStatement { get; }

/// <summary>
/// The LedgerAccount Endpoint.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Moneybird.Net.Endpoints.Abstractions.Common;
using Moneybird.Net.Endpoints.FinancialStatements.Models;
using Moneybird.Net.Entities.FinancialStatements;

namespace Moneybird.Net.Endpoints.Abstractions
{
public interface IFinancialStatementEndpoint :
ICreateEndpoint<FinancialStatement, FinancialStatementCreateOptions>,
IUpdateEndpoint<FinancialStatement, FinancialStatementUpdateOptions>,
IDeleteEndpoint
{
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
using System.Text.Json;
using System.Threading.Tasks;
using Moneybird.Net.Endpoints.Abstractions;
using Moneybird.Net.Endpoints.FinancialStatements.Models;
using Moneybird.Net.Entities.FinancialStatements;
using Moneybird.Net.Http;

namespace Moneybird.Net.Endpoints.FinancialStatements
{
public class FinancialStatementEndpoint : IFinancialStatementEndpoint
{
private const string FinancialStatementsUri = "/{0}/financial_statements.json";
private const string FinancialStatementsIdUri = "/{0}/financial_statements/{1}.json";

private readonly MoneybirdConfig _config;
private readonly IRequester _requester;

public FinancialStatementEndpoint(MoneybirdConfig config, IRequester requester)
{
_config = config;
_requester = requester;
}

public async Task<FinancialStatement> CreateAsync(string administrationId, FinancialStatementCreateOptions options, string accessToken)
{
var relativeUrl = string.Format(FinancialStatementsUri, administrationId);
var body = JsonSerializer.Serialize(options, _config.SerializerOptions);

var response = await _requester
.CreatePostRequestAsync(_config.ApiUri, relativeUrl, accessToken, body)
.ConfigureAwait(false);

return JsonSerializer.Deserialize<FinancialStatement>(response, _config.SerializerOptions);
}

public async Task<FinancialStatement> UpdateByIdAsync(string administrationId, string financialStatementId, FinancialStatementUpdateOptions options, string accessToken)
{
var relativeUrl = string.Format(FinancialStatementsIdUri, administrationId, financialStatementId);
var body = JsonSerializer.Serialize(options, _config.SerializerOptions);
var responseJson = await _requester
.CreatePatchRequestAsync(_config.ApiUri, relativeUrl, accessToken, body)
.ConfigureAwait(false);

return JsonSerializer.Deserialize<FinancialStatement>(responseJson, _config.SerializerOptions);
}

public async Task<bool> DeleteByIdAsync(string administrationId, string financialStatementId, string accessToken)
{
var relativeUrl = string.Format(FinancialStatementsIdUri, administrationId, financialStatementId);
var response = await _requester
.CreateDeleteRequestAsync(_config.ApiUri, relativeUrl, accessToken)
.ConfigureAwait(false);

return response;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using Moneybird.Net.Entities.FinancialMutations;

namespace Moneybird.Net.Endpoints.FinancialStatements.Models
{
public class FinancialStatementCreate
{
[JsonPropertyName("financial_statement")]
public string FinancialAccountId { get; set; }

[JsonPropertyName("reference")]
public string Reference { get; set; }

[JsonPropertyName("official_date")]
public DateTime? OfficialDate { get; set; }

[JsonPropertyName("official_balance")]
[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
public double? OfficialBalance { get; set; }

[JsonPropertyName("importer_service")]
public string ImporterService { get; set; }

[JsonPropertyName("financial_mutations_attributes")]
public IReadOnlyList<FinancialMutationAttribute> FinancialMutationAttributes { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System.Text.Json.Serialization;
using Moneybird.Net.Endpoints.Abstractions.Options;

namespace Moneybird.Net.Endpoints.FinancialStatements.Models
{
public class FinancialStatementCreateOptions : IMoneybirdCreateOptions
{
[JsonPropertyName("financial_statement")]
public FinancialStatementCreate FinancialStatement { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using Moneybird.Net.Entities.FinancialMutations;

namespace Moneybird.Net.Endpoints.FinancialStatements.Models
{
public class FinancialStatementUpdate
{
[JsonPropertyName("financial_statement")]
public string FinancialAccountId { get; set; }

[JsonPropertyName("reference")]
public string Reference { get; set; }

[JsonPropertyName("official_date")]
public DateTime? OfficialDate { get; set; }

[JsonPropertyName("official_balance")]
[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
public double? OfficialBalance { get; set; }

[JsonPropertyName("importer_service")]
public string ImporterService { get; set; }

[JsonPropertyName("financial_mutations_attributes")]
public IReadOnlyList<FinancialMutationAttribute> FinancialMutationAttributes { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
using System.Text.Json.Serialization;
using Moneybird.Net.Endpoints.Abstractions.Options;

namespace Moneybird.Net.Endpoints.FinancialStatements.Models
{
public class FinancialStatementUpdateOptions : IMoneybirdUpdateOptions
{
[JsonPropertyName("financial_statement")]
public FinancialStatementUpdate FinancialStatement { get; set; }
}
}
83 changes: 83 additions & 0 deletions src/Moneybird.Net/Entities/FinancialMutations/FinancialMutation.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using Moneybird.Net.Entities.LedgerAccounts;
using Moneybird.Net.Entities.Payments;

namespace Moneybird.Net.Entities.FinancialMutations
{
public class FinancialMutation : IMoneybirdEntity
{
[JsonPropertyName("id")]
public string Id { get; set; }

[JsonPropertyName("administration_id")]
public string AdministrationId { get; set; }

[JsonPropertyName("amount")]
[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
public double Amount { get; set; }

[JsonPropertyName("code")]
public string Code { get; set; }

[JsonPropertyName("date")]
public DateTime Date { get; set; }

[JsonPropertyName("message")]
public string Message { get; set; }

[JsonPropertyName("contra_account_name")]
public string ContraAccountName { get; set; }

[JsonPropertyName("contra_account_number")]
public string ContraAccountNumber { get; set; }

[JsonPropertyName("state")]
public string State { get; set; }

[JsonPropertyName("amount_open")]
[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
public double AmountOpen { get; set; }

[JsonPropertyName("sepa_fields")]
public Sepa SepaFields { get; set; }

[JsonPropertyName("batch_reference")]
public string BatchReference { get; set; }

[JsonPropertyName("financial_account_id")]
public string FinancialAccountId { get; set; }

[JsonPropertyName("currency")]
public string Currency { get; set; }

[JsonPropertyName("original_amount")]
[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
public double? OriginalAmount { get; set; }

[JsonPropertyName("created_at")]
public DateTime CreatedAt { get; set; }

[JsonPropertyName("updated_at")]
public DateTime UpdatedAt { get; set; }

[JsonPropertyName("version")]
public int Version { get; set; }

[JsonPropertyName("financial_statement_id")]
public string FinancialStatementId { get; set; }

[JsonPropertyName("processed_at")]
public DateTime? ProcessedAt { get; set; }

[JsonPropertyName("account_servicer_transaction_id")]
public string AccountServicerTransactionId { get; set; }

[JsonPropertyName("payments")]
public IReadOnlyList<Payment> Payments { get; set; }

[JsonPropertyName("ledger_account_bookings")]
public IReadOnlyList<LedgerAccountBooking> LedgerAccountBookings { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using System;
using System.Text.Json.Serialization;

namespace Moneybird.Net.Entities.FinancialMutations
{
public class FinancialMutationAttribute
{
[JsonPropertyName("date")]
public DateTime Date { get; set; }

[JsonPropertyName("valutation_date")]
public DateTime ValutationDate { get; set; }

[JsonPropertyName("message")]
public string Message { get; set; }

[JsonPropertyName("amount")]
[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
public double Amount { get; set; }

[JsonPropertyName("code")]
public string Code { get; set; }

[JsonPropertyName("contra_account_name")]
public string ContraAccountName { get; set; }

[JsonPropertyName("contra_account_number")]
public string ContraAccountNumber { get; set; }

[JsonPropertyName("batch_reference")]
public string BatchReference { get; set; }

[JsonPropertyName("offset")]
public int Offset { get; set; }

[JsonPropertyName("account_servicer_transaction_id")]
public string AccountServicerTransactionId { get; set; }

[JsonPropertyName("adyen_payment_instrument_id")]
public int AdyenPaymentInstrumentId { get; set; }

[JsonPropertyName("_destroy")]
public bool Destroy { get; set; }
}
}
25 changes: 25 additions & 0 deletions src/Moneybird.Net/Entities/FinancialMutations/Sepa.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using System.Text.Json.Serialization;

namespace Moneybird.Net.Entities.FinancialMutations
{
public class Sepa
{
[JsonPropertyName("sref")]
public string Sref { get; set; }

[JsonPropertyName("isdt")]
public string Isdt { get; set; }

[JsonPropertyName("ordp")]
public SepaDebtor Ordp { get; set; }

[JsonPropertyName("eref")]
public string Eref { get; set; }

[JsonPropertyName("crdb")]
public string Crdb { get; set; }

[JsonPropertyName("remi")]
public string Remi { get; set; }
}
}
13 changes: 13 additions & 0 deletions src/Moneybird.Net/Entities/FinancialMutations/SepaDebtor.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using System.Text.Json.Serialization;

namespace Moneybird.Net.Entities.FinancialMutations
{
public class SepaDebtor
{
[JsonPropertyName("name")]
public string Name { get; set; }

[JsonPropertyName("id")]
public string Id { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;
using Moneybird.Net.Entities.FinancialMutations;

namespace Moneybird.Net.Entities.FinancialStatements
{
public class FinancialStatement : IMoneybirdEntity
{
[JsonPropertyName("id")]
public string Id { get; set; }

[JsonPropertyName("administration_id")]
public string AdministrationId { get; set; }

[JsonPropertyName("financial_account_id")]
public string FinancialAccountId { get; set; }

[JsonPropertyName("reference")]
public string Reference { get; set; }

[JsonPropertyName("official_date")]
public DateTime? OfficialDate { get; set; }

[JsonPropertyName("official_balance")]
[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
public double? OfficialBalance { get; set; }

[JsonPropertyName("importer_service")]
public string ImporterService { get; set; }

[JsonPropertyName("financial_mutations")]
public IReadOnlyList<FinancialMutation> FinancialMutations { get; set; }
}
}
Loading

0 comments on commit 420750b

Please sign in to comment.