import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class GenerateDocumentBatchResponse(IGenerateDocumentBatchResponse):
# @ApiMember(Description="ID of the batch", IsRequired=true)
batch_i_d: Optional[str] = None
"""
ID of the batch
"""
# @ApiMember(Description="Document processed count", IsRequired=true)
processed: int = 0
"""
Document processed count
"""
# @ApiMember(Description="Track and Trace url", IsRequired=true)
track_and_trace_url: Optional[str] = None
"""
Track and Trace url
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class UserReference(IEntityReference):
id: Optional[int] = None
login_name: Optional[str] = None
user_principal_name: Optional[str] = None
full_name: Optional[str] = None
email_address: Optional[str] = None
global_i_d: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DocumentgeneratorDocumentReference(IEntityReference):
id: Optional[str] = None
name: Optional[str] = None
global_i_d: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RegistrationProfileReference(IEntityReference):
id: Optional[str] = None
global_i_d: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class DocumentReference(IEntityReference):
id: Optional[str] = None
code: Optional[str] = None
version_code: Optional[str] = None
root_doc_i_d: Optional[str] = None
internal_invoice_code: Optional[str] = None
company_number: Optional[int] = None
document_type_i_d: Optional[str] = None
invoice_type: Optional[int] = None
reg_prof_cat_i_d: Optional[int] = None
global_i_d: Optional[str] = None
external_i_d: Optional[str] = None
extern_nr: Optional[str] = None
intern_nummer: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class MessageQueueReference(IEntityReference):
id: Optional[int] = None
global_i_d: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ConfigurationSource:
documentgenerator_document: Optional[DocumentgeneratorDocumentReference] = None
"""
Document genereren op basis van een DocGenDocument.
"""
registration_profile: Optional[RegistrationProfileReference] = None
"""
Document genereren op basis van een RegistratieProfiel.
"""
registered_document: Optional[DocumentReference] = None
"""
Use existing document registration.
"""
draft_document_registration: Optional[MessageQueueReference] = None
"""
Use draft document registration.
"""
documentgenerator_type: Optional[str] = None
documentgenerator_type_name: Optional[str] = None
"""
DocumentgeneratorType voor bijvoorbeeld Word of Email.
"""
template_extension: Optional[str] = None
output_extension: Optional[str] = None
class VersioningType(str, Enum):
NEW = 'New'
CHANGE = 'Change'
PRIMARY = 'Primary'
SECONDARY = 'Secondary'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CompanyReference(IEntityReference):
id: Optional[int] = None
number: Optional[int] = None
global_i_d: Optional[str] = None
external_i_d: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RelationReference(IEntityReference):
id: Optional[int] = None
creditor_number: Optional[int] = None
debtor_number: Optional[int] = None
global_location_number: Optional[str] = None
global_i_d: Optional[str] = None
external_i_d: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PersonReference(IEntityReference):
id: Optional[int] = None
number: Optional[int] = None
global_i_d: Optional[str] = None
external_i_d: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ProjectReference(IEntityReference):
id: Optional[int] = None
code: Optional[str] = None
type_external_i_d: Optional[str] = None
company_number: Optional[int] = None
global_i_d: Optional[str] = None
external_i_d: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SubProject:
project: Optional[ProjectReference] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ContactPersonReference(IEntityReference):
id: Optional[int] = None
global_i_d: Optional[str] = None
external_i_d: Optional[str] = None
relation_i_d: Optional[int] = None
person_i_d: Optional[int] = None
class SignerType(str, Enum):
MAIN_SIGNER = 'MainSigner'
ADDITIONAL_SIGNER = 'AdditionalSigner'
CONFIRMATION_DECLARANT = 'ConfirmationDeclarant'
ADDITIONAL_CONFIRMATION_DECLARANT = 'AdditionalConfirmationDeclarant'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Signer:
user: Optional[UserReference] = None
person: Optional[PersonReference] = None
relation: Optional[RelationReference] = None
contact_person: Optional[ContactPersonReference] = None
registered_document: Optional[DocumentReference] = None
type: Optional[SignerType] = None
closing_sentence: Optional[str] = None
name: Optional[str] = None
subsidiary: Optional[str] = None
function: Optional[str] = None
department: Optional[str] = None
phone_number: Optional[str] = None
fax_number: Optional[str] = None
mobile_number: Optional[str] = None
email: Optional[str] = None
custom_text: Optional[str] = None
signature: Optional[List[str]] = None
signature_visible: Optional[bool] = None
visible: Optional[bool] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Field:
name: Optional[str] = None
old_value: Optional[str] = None
value: Optional[str] = None
title: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class AttachmentData:
content_type: Optional[str] = None
data: Optional[str] = None
"""
Data base64-encoded zonder padding.
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Attachment:
name: Optional[str] = None
attachment_data: Optional[AttachmentData] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class RegistrationMetaData:
# @ApiMember(Description="Hoe moet het versiebeheer worden toegepast?")
versioning: Optional[VersioningType] = None
"""
Hoe moet het versiebeheer worden toegepast?
"""
# @ApiMember(Description="Previous document will be used for registration of a new version.")
previous_document: Optional[DocumentReference] = None
"""
Previous document will be used for registration of a new version.
"""
# @ApiMember(Description="Company")
company: Optional[CompanyReference] = None
"""
Company
"""
# @ApiMember(Description="Relation")
relation: Optional[RelationReference] = None
"""
Relation
"""
# @ApiMember(Description="Person")
person: Optional[PersonReference] = None
"""
Person
"""
# @ApiMember(Description="Project")
project: Optional[ProjectReference] = None
"""
Project
"""
# @ApiMember(AllowMultiple=true, Description="Sub projects")
sub_projects: Optional[List[SubProject]] = None
"""
Sub projects
"""
# @ApiMember(AllowMultiple=true, Description="Signers")
signers: Optional[List[Signer]] = None
"""
Signers
"""
# @ApiMember(AllowMultiple=true, Description="Bevat velden die gebruikt worden als additionele metadata voor het document, naast de vaste koppelingen zoals gebruiker, project en relatie.")
fields: Optional[List[Field]] = None
"""
Bevat velden die gebruikt worden als additionele metadata voor het document, naast de vaste koppelingen zoals gebruiker, project en relatie.
"""
# @ApiMember(AllowMultiple=true, Description="Attachments die aan de documentregistratie gekoppeld moet worden.")
attachments: Optional[List[Attachment]] = None
"""
Attachments die aan de documentregistratie gekoppeld moet worden.
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CommonEntityBaseReference(IEntityReference):
id: Optional[str] = None
external_i_d: Optional[str] = None
global_i_d: Optional[str] = None
class Direction(IntEnum):
LEFT2_RIGHT = 0
UP_LEFT2_DOWN_RIGHT = 45
UP2_DOWN = 90
UP_RIGHT2_DOWN_LEFT = 135
RIGHT2_LEFT = 180
DOWN_RIGHT2_UP_LEFT = 225
DOWN2_UP = 270
DOWN_LEFT2_UP_RIGHT = 315
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class Watermark:
text: Optional[str] = None
font_family_text: Optional[str] = None
font_family: Optional[FontFamily] = None
direction: Optional[Direction] = None
stroke_color_text: Optional[str] = None
stroke_color: Optional[Color] = None
fill_color_text: Optional[str] = None
fill_color: Optional[Color] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BatchDocument(IDocument):
# @ApiMember(Description="ConfigurationSource: DocumentgeneratorDocument of RegistratieProfiel.", IsRequired=true)
configuration_source: Optional[ConfigurationSource] = None
"""
ConfigurationSource: DocumentgeneratorDocument of RegistratieProfiel.
"""
# @ApiMember(Description="Set references to bind with Registration profile", IsRequired=true)
registration_meta_data: Optional[RegistrationMetaData] = None
"""
Set references to bind with Registration profile
"""
# @ApiMember(Description="Entity instance used as data source parent, if not exists default is Document registration instance.")
data_source_entity: Optional[CommonEntityBaseReference] = None
"""
Entity instance used as data source parent, if not exists default is Document registration instance.
"""
# @ApiMember(Description="Hier kan de (dynamische) data voor het document geplaatst worden, de data kan middels tekstblokken en placeholders worden geplaatst.Het formaat binnen CustomData staat vrij maar vereist een 'root' element.")
custom_data: Optional[str] = None
"""
Hier kan de (dynamische) data voor het document geplaatst worden, de data kan middels tekstblokken en placeholders worden geplaatst.Het formaat binnen CustomData staat vrij maar vereist een 'root' element.
"""
# @ApiMember(Description="Insert a watermark into the document.")
watermark: Optional[Watermark] = None
"""
Insert a watermark into the document.
"""
# @ApiMember(Description="Type van het gegenereerde document, bijvoorbeeld: Doc, Docx, Pdf.")
output_type: Optional[str] = None
"""
Type van het gegenereerde document, bijvoorbeeld: Doc, Docx, Pdf.
"""
# @Api(Description="Queue multiple (corporate identity) document(s) to generate later via the DigiOffice background agent.")
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class GenerateDocumentBatch(IGenerateDocumentBatch):
"""
Queue multiple (corporate identity) document(s) to generate later via the DigiOffice background agent.
"""
# @ApiMember(Description="Owner of the badge (DigiOffice user)")
user: Optional[UserReference] = None
"""
Owner of the badge (DigiOffice user)
"""
# @ApiMember(Description="Description of the badge", IsRequired=true)
description: Optional[str] = None
"""
Description of the badge
"""
# @ApiMember(AllowMultiple=true, Description="Corporate identity document(s) to be generate", IsRequired=true)
documents: Optional[List[BatchDocument]] = None
"""
Corporate identity document(s) to be generate
"""
# @ApiMember(Description="Generated document is not registered in DigiOffice DMS.")
dont_register: Optional[bool] = None
"""
Generated document is not registered in DigiOffice DMS.
"""
# @ApiMember(Description="Send the generated e-mail via the e-mail queue.")
send_mail: Optional[bool] = None
"""
Send the generated e-mail via the e-mail queue.
"""
Python GenerateDocumentBatch DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /jsv/reply/GenerateDocumentBatch HTTP/1.1
Host: digiofficeapigateway.deltares.nl
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
User:
{
ID: 0,
LoginName: String,
UserPrincipalName: String,
FullName: String,
EmailAddress: String,
GlobalID: 00000000-0000-0000-0000-000000000000
},
Description: String,
Documents:
[
{
ConfigurationSource:
{
DocumentgeneratorDocument:
{
ID: 00000000-0000-0000-0000-000000000000,
Name: String
},
RegistrationProfile: {},
RegisteredDocument:
{
ID: 00000000-0000-0000-0000-000000000000,
Code: String,
VersionCode: String,
RootDocID: 00000000-0000-0000-0000-000000000000,
InternalInvoiceCode: String,
CompanyNumber: 0,
DocumentTypeID: String,
InvoiceType: 0,
RegProfCatID: 0,
GlobalID: 00000000-0000-0000-0000-000000000000,
ExternalID: String
},
DraftDocumentRegistration:
{
ID: 0
},
TemplateExtension: String,
OutputExtension: String
},
RegistrationMetaData:
{
Versioning: New,
PreviousDocument:
{
ID: 00000000-0000-0000-0000-000000000000,
Code: String,
VersionCode: String,
RootDocID: 00000000-0000-0000-0000-000000000000,
InternalInvoiceCode: String,
CompanyNumber: 0,
DocumentTypeID: String,
InvoiceType: 0,
RegProfCatID: 0,
GlobalID: 00000000-0000-0000-0000-000000000000,
ExternalID: String
},
Company:
{
ID: 0,
Number: 0,
GlobalID: 00000000-0000-0000-0000-000000000000,
ExternalID: String
},
Relation:
{
ID: 0,
CreditorNumber: 0,
DebtorNumber: 0,
GlobalLocationNumber: String,
GlobalID: 00000000-0000-0000-0000-000000000000,
ExternalID: String
},
Person:
{
ID: 0,
Number: 0,
GlobalID: 00000000-0000-0000-0000-000000000000,
ExternalID: String
},
Project:
{
ID: 0,
Code: String,
TypeExternalID: String,
CompanyNumber: 0,
GlobalID: 00000000-0000-0000-0000-000000000000,
ExternalID: String
},
SubProjects:
[
{
Project:
{
ID: 0,
Code: String,
TypeExternalID: String,
CompanyNumber: 0,
GlobalID: 00000000-0000-0000-0000-000000000000,
ExternalID: String
}
}
],
Signers:
[
{
User:
{
ID: 0,
LoginName: String,
UserPrincipalName: String,
FullName: String,
EmailAddress: String,
GlobalID: 00000000-0000-0000-0000-000000000000
},
Person:
{
ID: 0,
Number: 0,
GlobalID: 00000000-0000-0000-0000-000000000000,
ExternalID: String
},
Relation:
{
ID: 0,
CreditorNumber: 0,
DebtorNumber: 0,
GlobalLocationNumber: String,
GlobalID: 00000000-0000-0000-0000-000000000000,
ExternalID: String
},
ContactPerson:
{
ID: 0,
GlobalID: 00000000-0000-0000-0000-000000000000,
ExternalID: String,
RelationID: 0,
PersonID: 0
},
RegisteredDocument:
{
ID: 00000000-0000-0000-0000-000000000000,
Code: String,
VersionCode: String,
RootDocID: 00000000-0000-0000-0000-000000000000,
InternalInvoiceCode: String,
CompanyNumber: 0,
DocumentTypeID: String,
InvoiceType: 0,
RegProfCatID: 0,
GlobalID: 00000000-0000-0000-0000-000000000000,
ExternalID: String
},
Type: MainSigner,
ClosingSentence: String,
Name: String,
Subsidiary: String,
Function: String,
Department: String,
PhoneNumber: String,
FaxNumber: String,
MobileNumber: String,
Email: String,
CustomText: String,
Signature:
[
String
],
SignatureVisible: False,
Visible: False
}
],
Fields:
[
{
Name: String,
OldValue: String,
Value: String,
Title: String = String -> String
}
],
Attachments:
[
{
Name: String,
AttachmentData:
{
ContentType: String,
Data: String
}
}
]
},
DataSourceEntity:
{
ID: String,
ExternalID: String,
GlobalID: 00000000-0000-0000-0000-000000000000
},
CustomData: String,
Watermark:
{
Text: String,
Direction: Left2Right
},
OutputType: String
}
],
DontRegister: False,
SendMail: False
}
HTTP/1.1 200 OK Content-Type: text/jsv Content-Length: length { Processed: 0, TrackAndTraceUrl: String }