From 812c4c3f3221528e5de00d29f29fafc7f8ccb3c8 Mon Sep 17 00:00:00 2001 From: Priec Date: Sun, 6 Sep 2026 19:43:56 +0200 Subject: [PATCH] currency change done automatically from now on --- client-gui2 | 2 +- common/proto/accounting.proto | 5 +++++ common/src/proto/descriptor.bin | Bin 249265 -> 249740 bytes common/src/proto/komp_ac.accounting.rs | 10 +++++++++- komp-app/src/grpc.rs | 8 ++++---- server | 2 +- 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/client-gui2 b/client-gui2 index f40aa6bf..b76f9b43 160000 --- a/client-gui2 +++ b/client-gui2 @@ -1 +1 @@ -Subproject commit f40aa6bfd0f4d0a9096d7f663ec1bce895ae13ce +Subproject commit b76f9b430b6a4f60180e715c71fe1caa99b022ed diff --git a/common/proto/accounting.proto b/common/proto/accounting.proto index e06370a4..55df4b19 100644 --- a/common/proto/accounting.proto +++ b/common/proto/accounting.proto @@ -360,6 +360,7 @@ message ConfigureAccountingPeriodRequest { message CloseAccountingPeriodRequest { int64 period_id = 1; + string revaluation_preview = 2; } message ReopenAccountingPeriodRequest { @@ -409,6 +410,7 @@ message AccountingPeriod { message ListPeriodBalancesRequest { int64 period_id = 1; + bool preview_revaluation = 2; } message PeriodBalance { @@ -440,6 +442,9 @@ message PeriodDenominationBalance { message ListPeriodBalancesResponse { repeated PeriodBalance balances = 1; repeated PeriodDenominationBalance denomination_balances = 2; + // JSON array of proposed valuations for an open period, or the frozen + // evidence for a closed period. Pass the open-period value unchanged to close. + string revaluation_preview = 3; } message GetTrialBalanceRequest { diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index 60f31304fb514b35e4b3a25bdc5ae09d9844f8ff..9f81056d0bafd0a2d2e68f3af6d7790642c4f942 100644 GIT binary patch delta 7658 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 h_q!w0A-utI_U*4}&de4703UjMb% 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 diff --git a/common/src/proto/komp_ac.accounting.rs b/common/src/proto/komp_ac.accounting.rs index 31e247b2..ea5f7d50 100644 --- a/common/src/proto/komp_ac.accounting.rs +++ b/common/src/proto/komp_ac.accounting.rs @@ -368,10 +368,12 @@ pub struct ConfigureAccountingPeriodRequest { pub period_end: ::prost::alloc::string::String, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] +#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] pub struct CloseAccountingPeriodRequest { #[prost(int64, tag = "1")] pub period_id: i64, + #[prost(string, tag = "2")] + pub revaluation_preview: ::prost::alloc::string::String, } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] @@ -450,6 +452,8 @@ pub struct AccountingPeriod { pub struct ListPeriodBalancesRequest { #[prost(int64, tag = "1")] pub period_id: i64, + #[prost(bool, tag = "2")] + pub preview_revaluation: bool, } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] @@ -500,6 +504,10 @@ pub struct ListPeriodBalancesResponse { pub balances: ::prost::alloc::vec::Vec, #[prost(message, repeated, tag = "2")] pub denomination_balances: ::prost::alloc::vec::Vec, + /// JSON array of proposed valuations for an open period, or the frozen + /// evidence for a closed period. Pass the open-period value unchanged to close. + #[prost(string, tag = "3")] + pub revaluation_preview: ::prost::alloc::string::String, } #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] diff --git a/komp-app/src/grpc.rs b/komp-app/src/grpc.rs index 6908fae5..5bfee161 100644 --- a/komp-app/src/grpc.rs +++ b/komp-app/src/grpc.rs @@ -264,8 +264,8 @@ impl GrpcClient { .context("gRPC ConfigureAccountingPeriod call failed")?.into_inner()) } - pub async fn close_accounting_period(&mut self, period_id: i64) -> Result { - let request = self.authenticated_request(CloseAccountingPeriodRequest { period_id })?; + pub async fn close_accounting_period(&mut self, period_id: i64, revaluation_preview: String) -> Result { + let request = self.authenticated_request(CloseAccountingPeriodRequest { period_id, revaluation_preview })?; Ok(self.accounting_client.close_accounting_period(request).await .context("gRPC CloseAccountingPeriod call failed")?.into_inner()) } @@ -297,8 +297,8 @@ impl GrpcClient { .context("gRPC ListAccountingPeriods call failed")?.into_inner()) } - pub async fn list_period_balances(&mut self, period_id: i64) -> Result { - let request = self.authenticated_request(ListPeriodBalancesRequest { period_id })?; + pub async fn list_period_balances(&mut self, period_id: i64, preview_revaluation: bool) -> Result { + let request = self.authenticated_request(ListPeriodBalancesRequest { period_id, preview_revaluation })?; Ok(self.accounting_client.list_period_balances(request).await .context("gRPC ListPeriodBalances call failed")?.into_inner()) } diff --git a/server b/server index 239c2f35..f3ff9392 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit 239c2f3539de6fa11d225da4485f9e025e4abb63 +Subproject commit f3ff9392236ac4c5d232a2ee3d41ef76e9355fcb