From 8acc8867ace49d834e0971e233654ed8c96535e4 Mon Sep 17 00:00:00 2001 From: Priec Date: Wed, 2 Sep 2026 12:03:12 +0200 Subject: [PATCH] invoice + some table name thing --- client-gui2 | 2 +- common/proto/document_data.proto | 10 +++++++++ common/proto/table_definition.proto | 5 +++++ common/src/proto/descriptor.bin | Bin 229209 -> 230348 bytes common/src/proto/komp_ac.document_data.rs | 21 +++++++++++++++++-- common/src/proto/komp_ac.table_definition.rs | 6 ++++++ server | 2 +- 7 files changed, 42 insertions(+), 4 deletions(-) diff --git a/client-gui2 b/client-gui2 index a71fe2f5..5442370d 160000 --- a/client-gui2 +++ b/client-gui2 @@ -1 +1 @@ -Subproject commit a71fe2f543433ec4a58e02006211b3d114089d6b +Subproject commit 5442370d145fcac5210bc11b77e17f4e644cfe4d diff --git a/common/proto/document_data.proto b/common/proto/document_data.proto index d841fbac..5f6ee18b 100644 --- a/common/proto/document_data.proto +++ b/common/proto/document_data.proto @@ -129,6 +129,16 @@ message TypstTemplateVersion { string created_at = 8; string input_table_name = 9; repeated string field_paths = 10; + repeated TypstTemplateFieldBinding field_bindings = 11; +} + +// One profile-specific source mapping for an enabled template version. +message TypstTemplateFieldBinding { + string field_path = 1; + string collection_path = 2; + string column_name = 3; + string source_table_name = 4; + string source_column_name = 5; } message GetTypstTemplateVersionResponse { diff --git a/common/proto/table_definition.proto b/common/proto/table_definition.proto index deaa4bf7..7ce10b52 100644 --- a/common/proto/table_definition.proto +++ b/common/proto/table_definition.proto @@ -216,6 +216,11 @@ message InvoiceTemplateFieldBinding { string collection_path = 2; string column_name = 3; InvoiceTemplateAccountingRole accounting_role = 4; + + // Optional source reached through column_name when that column is a LINK. + // Both names are empty for a value stored directly on the invoice table. + string source_table_name = 5; + string source_column_name = 6; } // One physical dynamic table created for an invoice template scope. The root diff --git a/common/src/proto/descriptor.bin b/common/src/proto/descriptor.bin index 4c934c98a370bbcc55773e369f5a0e131e6f1250..124ca415120836142f44ccc0c042ec8bf28a5dba 100644 GIT binary patch delta 12074 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 diff --git a/common/src/proto/komp_ac.document_data.rs b/common/src/proto/komp_ac.document_data.rs index e922f808..100ddfce 100644 --- a/common/src/proto/komp_ac.document_data.rs +++ b/common/src/proto/komp_ac.document_data.rs @@ -36,7 +36,7 @@ pub struct RegisterTypstTemplateRequest { pub typst_compiler_version: ::prost::alloc::string::String, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct RegisterTypstTemplateResponse { #[prost(message, optional, tag = "1")] pub template_version: ::core::option::Option, @@ -174,7 +174,7 @@ pub struct GetTypstTemplateVersionRequest { pub document_id: i64, } #[derive(serde::Serialize, serde::Deserialize)] -#[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct TypstTemplateVersion { #[prost(int64, tag = "1")] pub id: i64, @@ -196,9 +196,26 @@ pub struct TypstTemplateVersion { pub input_table_name: ::prost::alloc::string::String, #[prost(string, repeated, tag = "10")] pub field_paths: ::prost::alloc::vec::Vec<::prost::alloc::string::String>, + #[prost(message, repeated, tag = "11")] + pub field_bindings: ::prost::alloc::vec::Vec, } +/// One profile-specific source mapping for an enabled template version. #[derive(serde::Serialize, serde::Deserialize)] #[derive(Clone, PartialEq, Eq, Hash, ::prost::Message)] +pub struct TypstTemplateFieldBinding { + #[prost(string, tag = "1")] + pub field_path: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + pub collection_path: ::prost::alloc::string::String, + #[prost(string, tag = "3")] + pub column_name: ::prost::alloc::string::String, + #[prost(string, tag = "4")] + pub source_table_name: ::prost::alloc::string::String, + #[prost(string, tag = "5")] + pub source_column_name: ::prost::alloc::string::String, +} +#[derive(serde::Serialize, serde::Deserialize)] +#[derive(Clone, PartialEq, ::prost::Message)] pub struct GetTypstTemplateVersionResponse { #[prost(message, optional, tag = "1")] pub template_version: ::core::option::Option, diff --git a/common/src/proto/komp_ac.table_definition.rs b/common/src/proto/komp_ac.table_definition.rs index 3f61f075..58adeb9c 100644 --- a/common/src/proto/komp_ac.table_definition.rs +++ b/common/src/proto/komp_ac.table_definition.rs @@ -157,6 +157,12 @@ pub struct InvoiceTemplateFieldBinding { pub column_name: ::prost::alloc::string::String, #[prost(enumeration = "InvoiceTemplateAccountingRole", tag = "4")] pub accounting_role: i32, + /// Optional source reached through column_name when that column is a LINK. + /// Both names are empty for a value stored directly on the invoice table. + #[prost(string, tag = "5")] + pub source_table_name: ::prost::alloc::string::String, + #[prost(string, tag = "6")] + pub source_column_name: ::prost::alloc::string::String, } /// One physical dynamic table created for an invoice template scope. The root /// has an empty collection_path and parent_table_name. Each \[\] scope names its diff --git a/server b/server index c37f2f90..b9e560b1 160000 --- a/server +++ b/server @@ -1 +1 @@ -Subproject commit c37f2f902c77651c55891374d40ea7be6f8a69cb +Subproject commit b9e560b185df7b73a2f66ef82521cbfd132d532c