DigiOffice Gateway Web Services

<back to all web services

GenerateDocument

Generate custom Document (Don't use from inside VSTO's)

Requires Authentication
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 GenerateDocumentResponse(IGenerateDocumentResponse):
    # @ApiMember(Description="Contains the registration ID of the generated (corporate identity) document", IsRequired=true)
    document_i_d: Optional[str] = None
    """
    Contains the registration ID of the generated (corporate identity) document
    """


@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


# @Api(Description="Generate custom Document (Don't use from inside VSTO's)")
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class GenerateDocument(IGenerateDocument):
    """
    Generate custom Document (Don't use from inside VSTO's)
    """

    # @ApiMember(Description="DigiOffice user")
    user: Optional[UserReference] = None
    """
    DigiOffice user
    """


    # @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.
    """


    # @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.
    """


    # @ApiMember(Description="Should update the document file.")
    should_update_document_file: Optional[bool] = None
    """
    Should update the document file.
    """

Python GenerateDocument DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv

HTTP + JSV

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /jsv/reply/GenerateDocument 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
	},
	SendMail: False,
	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,
	ShouldUpdateDocumentFile: False
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length

{
	
}