@dangl/angular-ava 1.2.2-beta0004 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dangl-angular-ava.mjs","sources":["../../../projects/angular-ava/src/lib/ava-tree/model/ava-models.ts","../../../projects/angular-ava/src/lib/ava-tree/model/tree-mode.model.ts","../../../projects/angular-ava/src/lib/version.ts","../../../projects/angular-ava/src/lib/ava-tree/constants/defaultTextWords.ts","../../../projects/angular-ava/src/lib/ava-tree/services/configuration-tree.service.ts","../../../projects/angular-ava/src/lib/ava-tree/services/expand-parent-group.service.ts","../../../projects/angular-ava/src/lib/ava-tree/constants/defaultFilters.ts","../../../projects/angular-ava/src/lib/ava-tree/constants/defaults.ts","../../../projects/angular-ava/src/lib/ava-tree/services/flat-elements.service.ts","../../../projects/angular-ava/src/lib/ava-tree/services/select-element.service.ts","../../../projects/angular-ava/src/lib/ava-tree/services/keyboard-operation.service.ts","../../../projects/angular-ava/src/lib/ava-tree/services/tree-node-selection.service.ts","../../../projects/angular-ava/src/lib/ava-tree/services/tree-hover-tooltip.service.ts","../../../projects/angular-ava/src/lib/ava-tree/directives/hover-effect.directive.ts","../../../projects/angular-ava/src/lib/ava-tree/directives/save-changing-view.directive.ts","../../../projects/angular-ava/src/lib/ava-tree/pipes/element-icon-name.pipe.ts","../../../projects/angular-ava/src/lib/ava-tree/pipes/element-item-number.pipe.ts","../../../projects/angular-ava/src/lib/ava-tree/pipes/element-text.pipe.ts","../../../projects/angular-ava/src/lib/ava-tree/components/tree-item/tree-item.component.ts","../../../projects/angular-ava/src/lib/ava-tree/components/tree-item/tree-item.component.html","../../../projects/angular-ava/src/lib/ava-tree/components/list-structure/list-structure.component.ts","../../../projects/angular-ava/src/lib/ava-tree/components/list-structure/list-structure.component.html","../../../projects/angular-ava/src/lib/ava-tree/components/table-structure/table-structure.component.ts","../../../projects/angular-ava/src/lib/ava-tree/components/table-structure/table-structure.component.html","../../../projects/angular-ava/src/lib/ava-tree/pipes/group-child-elements.pipe.ts","../../../projects/angular-ava/src/lib/ava-tree/components/tree-node/tree-node.component.ts","../../../projects/angular-ava/src/lib/ava-tree/components/tree-node/tree-node.component.html","../../../projects/angular-ava/src/lib/ava-tree/components/tree-structure/tree-structure.component.ts","../../../projects/angular-ava/src/lib/ava-tree/components/tree-structure/tree-structure.component.html","../../../projects/angular-ava/src/lib/ava-tree/components/ava-tree/ava-tree.component.ts","../../../projects/angular-ava/src/lib/ava-tree/components/ava-tree/ava-tree.component.html","../../../projects/angular-ava/src/lib/invoice/constants/defaultTextWordInvoice.ts","../../../projects/angular-ava/src/lib/invoice/services/configuration-invoice.service.ts","../../../projects/angular-ava/src/lib/invoice/model/invoice-models.ts","../../../projects/angular-ava/src/lib/invoice/pipes/invoice-attachment-mime-type.pipe.ts","../../../projects/angular-ava/src/lib/invoice/components/invoice-documents/invoice-documents.component.ts","../../../projects/angular-ava/src/lib/invoice/components/invoice-documents/invoice-documents.component.html","../../../projects/angular-ava/src/lib/invoice/components/invoice-display/invoice-display.component.ts","../../../projects/angular-ava/src/lib/invoice/components/invoice-display/invoice-display.component.html","../../../projects/angular-ava/src/public-api.ts","../../../projects/angular-ava/src/dangl-angular-ava.ts"],"sourcesContent":["//----------------------\n// <auto-generated>\n// Generated using the NSwag toolchain v14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\n// </auto-generated>\n//----------------------\n\n/* tslint:disable */\n/* eslint-disable */\n// ReSharper disable InconsistentNaming\n\n/** This enum configures rounding modes for price calculations in projects */\nexport enum PriceRoundingModeDto {\n Normal = 'Normal',\n Floor = 'Floor',\n Ceiling = 'Ceiling'\n}\n\n/** General information about a Project. */\nexport interface ProjectInformationDto {\n /** Information about the buyer. */\n buyer?: PartyInformationDto | undefined;\n /** Description for the project. */\n description?: string | undefined;\n /** Short description for the project. */\n descriptionShort?: string | undefined;\n /** Name of the project. */\n name?: string | undefined;\n /** Information about the site. */\n site?: PartyInformationDto | undefined;\n /** The ItemNumberSchema used in the project. */\n itemNumberSchema?: ItemNumberSchemaDto | undefined;\n /** Short label for the currency used. */\n currencyShort?: string | undefined;\n /** Full label of the currency used. */\n currencyLong?: string | undefined;\n /** Label for the labour time part of prices used in the project. */\n labourTimeLabel?: string | undefined;\n /** Labels for the price components used in the project. Caution: Removal of a price component will trigger to have dependent price informations be deleted in IElements that use this property. If this property is changed or altered after the project has already been used, it is strongly advised to do operations step by step, e.g. if renaming and reordering multiple price components, this should be done one by one. Otherwise, a combination of rename and reordering will not be correctly propagated downwards to child objects in this Project. */\n priceComponents?: string[] | undefined;\n /** This dictionary specifies actual types used for the PriceComponents. For example, a single price component might have the name 'Material' as a string, ans this dictionary would then have a key 'Material' and a value of Materials. You can not add keys here that are not also present in the PriceComponents property, and removing price components will also remove them from this dictionary here. */\n readonly priceComponentTypes?: { [key: string]: PriceComponentTypeDto } | undefined;\n /** This bool indicates if this project allows the bidder to add bidder comments. Bidder comments are a way to attach clarifying information when submitting an offer. */\n bidderCommentAllowed?: boolean | undefined;\n /** This property indicates if the project should allow side offers from contractors. In GAEB, a side offer would typically be in exchange phase 85. */\n sideOffersAllowed?: boolean | undefined;\n /** This enumeration describes the type of the award / procurement process. If this is used in a GAEB context, more information about award types can be found in the German VOB/A rules and the GAEB standard */\n awardType?: AwardTypeDto | undefined;\n /** This enumeration describes awards for project that are not just a regular procurement. For example, it can be used to describe recurring maintenance or an outline contract (German: Rahmenvertrag) which just specifies services and prices but may be requested on demand when necessary */\n specialAwardKind?: SpecialAwardKindDto | undefined;\n /** Requesters in a construction project, in German also called 'Bedarfsträger', are parties connected to the building process, e.g. architects or planners. */\n requesters?: PartyInformationDto[] | undefined;\n /** Notification sites are addresses that are used for delivering messages in the context of construction projects. */\n notificationSites?: PartyInformationDto[] | undefined;\n}\n\n/** Represents information about a party (a site or an organization). */\nexport interface PartyInformationDto {\n /** Elements GUID identifier. */\n id: string;\n /** This party's name. */\n name?: string | undefined;\n /** This party's street. */\n street?: string | undefined;\n /** This party's ZipCode. */\n zipCode?: string | undefined;\n /** This party's City. */\n city?: string | undefined;\n /** This party's Country. */\n country?: string | undefined;\n /** This party's Identifier. */\n identifier?: string | undefined;\n /** Remarks for this party. */\n remarks?: string | undefined;\n /** An email address for this party. */\n email?: string | undefined;\n /** A phone number for this party. */\n phone?: string | undefined;\n /** The name of a contact person. */\n contactPersonName?: string | undefined;\n /** This is an identifier related to this PartyInformation and their internal reference of the tender (or award). This might be used to assign an identifier (German \"Vergabenummer\") for the current project. This is typically only used in Buyer and Bidder representations and should map to the concept of \"Vergabenummer\" or \"AwardNo\" in GAEB. */\n awardIdentifier?: string | undefined;\n /** This property indicates if the party is registered within the European Economic Area. */\n isInEuropeanEconomicArea?: boolean | undefined;\n /** If this is within the European Economic Area (see IsInEuropeanEconomicArea, then as a business entity it likely has an EU VAT Id. */\n vatId?: string | undefined;\n /** The fax number for this party. */\n fax?: string | undefined;\n /** The two letter ISO country code, e.g. DE for Germany. */\n countryCode?: string | undefined;\n /** Depending on which party this class represents, it might have either a 'creditor' or 'debtor' number. This is often used in internal accounting systems. */\n creditorOrDebtorIdentifier?: string | undefined;\n /** The Global Location Number (GLN) is issued by GS1 and is intended to be a unique identifier for the physical address of a party, e.g. a business office. */\n globalLocationNumber?: string | undefined;\n /** This list contains information about bank accounts associated with this PartyInformation. It's typically used for buyers and bidders. */\n bankingInformation?: BankingInformationDto[] | undefined;\n /** This can be used to specify a registration number for this party, e.g. a company registration number. It is usually used in GAEB XML commerce exchanges for bidders to supply their WEEE registration number, which is used to identify them as a registered WEEE company. */\n registrationNumber?: string | undefined;\n /** This can be used to specify a tax id for this party. It is different from the VatId and the RegistrationNumber. For example, in Germany this would be the \"Steuernummer\". This is usually not mapped to any AVA exchanges, but it's used e.g. in the XRechnung electronic invoices. */\n taxId?: string | undefined;\n}\n\n/** This is a class that represents the information about a bank connection. It is usually used within a PartyInformation. */\nexport interface BankingInformationDto {\n /** Elements GUID identifier. */\n id: string;\n /** The name of the bank. */\n name?: string | undefined;\n /** The international identifier for the bank account. */\n iban?: string | undefined;\n /** The account number. Typically no longer used since the introduction of IBAN within the SEPA area. */\n accountNumber?: string | undefined;\n /** The international bank identifier. */\n bic?: string | undefined;\n /** The routing number for the bank. Typically no longer used since the introduction of IBAN within the SEPA area. */\n routingNumber?: string | undefined;\n}\n\n/** The schema for ItemNumber's in a Project. */\nexport interface ItemNumberSchemaDto {\n /** The count of tiers in the ItemNumberSchema */\n readonly totalLength?: number | undefined;\n /** The collection of tiers for this ItemNumberSchema. */\n tiers?: ItemNumberSchemaTierDto[] | undefined;\n /** The separator to use for separiting the different levels in an ItemNumber. Defaults to DEFAULT_SEPARATOR, which is a point '.'. Setting this to a space or other whitespaces is discouraged, as this might not work correct in all situations and item numbers could be displayed not as intended. This can not be set to an empty or null string, trying that will default to the DEFAULT_SEPARATOR. If a value is set that has a different length than one '1', the DEFAULT_SEPARATOR will be used instead. You should also not use values for the separator that are also valid for the item numbers themselves, as that might also lead to incorrect results */\n separator?: string | undefined;\n /** This string is used to fill (left-pad) item numbers. For example, if a tier has a length of '4' but the given item number is '12', with a Filler of '0', then the final item number will be represented as '0'. This must be a single character string, if a value is given where the Length property does not evaluate to '1', the DEFAULT_FILLER '0' is used. A space is fine to use. You should ensure that you use a value different than Separator, as that might produce unexpected results. No attempt is done by the code to recover from such ambiguous configurations. */\n filler?: string | undefined;\n /** This is just a string property that can optionally be used to store additional data for this ItemNumberSchema, e.g. an identification or a type. It does not have any influence over how item numbers are generated, and is not supported in most exchange formats. However, it is used to store ÖNorm service specification structure types. */\n identifier?: string | undefined;\n /** This property indicates if ItemNumbers using this ItemNumberSchema should skip empty group levels. This is commonly only used in GAEB files, where there might be gaps in the hierarchy of elements and position identifiers should be placed at the end of the string representation. */\n skipNonExistingLevelsInPositionItemNumbers?: boolean | undefined;\n /** This string is used only when the property SkipNonExistingLevelsInPositionItemNumbers in this ItemNumberSchema is also set to true. It defaults to DEFAULT_SKIPPED_TIERS_FILLER, but can be set to any string with a lenght of one. Null values or values with a longer length will lead to this property reverting back to the default value. This is used to fill skipped tiers in item numbers where a position is placed in a higher hierarchy level than what would be defined in the Tiers. For example, it could produce an item number like '01.__.02', which would indicate a skipped second level. This should be using different values than Filler and Separator, since that could cause ambiguities in the code that generates the actual item numbers. No attempt is done by the code to recover from such ambiguous configurations. */\n skippedTiersFiller?: string | undefined;\n /** This is a read-only property that indicates if this schema has a valid structure. It internally just returns the result from IsCorrectlyDefined. This will return if the ItemNumberSchema is correctly defined. For it to be correctly defined, the following conditions must be true: There may only be one lot group, if there is one, it must be at the top. Following lot levels, there may be at least one group level. After the group levels, there must be one position level. After the position level, there may be one index level. If no tiers are defined at all, this will also return false. */\n readonly schemaIsCorrectlyDefined?: boolean | undefined;\n /** Defaults to false. If this is disabled, all letters in the ItemNumber string representations will be transformed to their lowercase representation. */\n allowUpperCaseLettering?: boolean | undefined;\n /** If this is set to true, single identifiers in an item number will not be left padded to fill the length of the tier. This is useful for allowing custom formats in item numbers, without following the GAEB standard. Defaults to false. */\n disableLeftPaddingTiersWithFiller?: boolean | undefined;\n}\n\n/** Represents information about a single Tier in an ItemNumber. */\nexport interface ItemNumberSchemaTierDto {\n /** The (maximum) length for this tier. Will not accept a length less than 1. Defaults to 1 if length less than one is specified. */\n length?: number | undefined;\n /** This ItemNumberSchemaTier's type. */\n type?: ItemNumberTypeDto | undefined;\n /** This enum represents the alignment value for a tier in an ItemNumberSchema. It is not used anywhere for computations at the moment, and is mostly an informational value. */\n alignment?: ItemNumberSchemaTierAlignmentDto | undefined;\n /** This specifies which ItemNumberSchemaTierType this tier represents. This can be, for example, a group tier / level, a position level or a lot level. */\n tierType?: ItemNumberSchemaTierTypeDto | undefined;\n /** Indicates if this tier represents a lot. See the documentation for more information about lots. */\n readonly isLot?: boolean | undefined;\n /** This value is the increment, or step size, that should be used for new item numbers. It defaults to DEFAULT_INCREMENT, but can be changed to any other positive number greater than zero. Invalid values make this be set to one '1' */\n increment?: number | undefined;\n /** This is an optional name for the given tier */\n tierName?: string | undefined;\n}\n\n/** Determines the type of an ItemNumberSchema */\nexport enum ItemNumberTypeDto {\n Numeric = 'Numeric',\n Alphanumeric = 'Alphanumeric'\n}\n\n/** This enum represents the alignment value for a tier in an ItemNumberSchema. It is not used anywhere for computations at the moment, and is mostly an informational value. */\nexport enum ItemNumberSchemaTierAlignmentDto {\n Undefined = 'Undefined',\n Left = 'Left',\n Right = 'Right'\n}\n\n/** Specifies the type an ItemNumberSchemaTier represents. For example, a tier may indicate to be used for positions or for groups. */\nexport enum ItemNumberSchemaTierTypeDto {\n Undefined = 'Undefined',\n Index = 'Index',\n Position = 'Position',\n Group = 'Group',\n Lot = 'Lot'\n}\n\n/** This enumeration models types of price components for better classification. */\nexport enum PriceComponentTypeDto {\n Unknown = 'Unknown',\n Wages = 'Wages',\n Materials = 'Materials',\n Plant = 'Plant',\n Miscellaneous = 'Miscellaneous'\n}\n\n/** This enumeration describes the type of the award / procurement process. If this is used in a GAEB context, more information about award types can be found in the German VOB/A rules and the GAEB standard */\nexport enum AwardTypeDto {\n Unspecified = 'Unspecified',\n OpenProcurement = 'OpenProcurement',\n ClosedProducrement = 'ClosedProducrement',\n NegotiationProcurementWithoutPublicAnnouncement = 'NegotiationProcurementWithoutPublicAnnouncement',\n NegotiationProcurement = 'NegotiationProcurement',\n OpenCall = 'OpenCall',\n SelectedCallWithoutPublicCompetition = 'SelectedCallWithoutPublicCompetition',\n SelectedCall = 'SelectedCall',\n DirectAward = 'DirectAward',\n InternationalNATOProcurement = 'InternationalNATOProcurement',\n CompetitiveDialog = 'CompetitiveDialog'\n}\n\n/** This enumeration describes awards for project that are not just a regular procurement. For example, it can be used to describe recurring maintenance or an outline contract (German: Rahmenvertrag) which just specifies services and prices but may be requested on demand when necessary */\nexport enum SpecialAwardKindDto {\n Unspecified = 'Unspecified',\n MaintenanceContract = 'MaintenanceContract',\n OutlineContract = 'OutlineContract',\n OutlineForMaintenanceContract = 'OutlineForMaintenanceContract'\n}\n\n/** This is the base class that holds information about a whole service specification. */\nexport interface ServiceSpecificationDto {\n /** Elements GUID identifier. */\n id: string;\n /** The hourly wage that is used within this ElementContainerBase. Will be propagated to child elements. */\n readonly projectHourlyWage?: number | undefined;\n /** The tax rate that is used within this ElementContainerBase. Will be propagated to child elements. */\n projectTaxRate?: number | undefined;\n /** The price components that are used within this project. They are ignored during Json deserialization because they will be set from the parent project. */\n projectPriceComponents?: string[] | undefined;\n /** The ItemNumberSchema that is used within this project. */\n projectItemNumberSchema?: ItemNumberSchemaDto | undefined;\n /** The IElements within this ElementContainerBase. */\n elements?: IElementDto[] | undefined;\n /** The label used in the parent Project to mark labour time, e.g. \"Hours\" or \"Stunden\". */\n readonly projectLabourTimeLabel?: string | undefined;\n /** Indicates if there are child IElements that have conflicting, duplicated ItemNumbers or if any child ElementContainerBase elements themselves contain duplicate ItemNumber s. Will always indicate false when told to ignore duplicate item numbers. */\n readonly containsDuplicateItemNumbers?: boolean | undefined;\n /** Indicates if there are child IElements that have conflicting, duplicated Ids or if any child ElementContainerBase elements themselves contain duplicate Id s. Will always indicate false when told to ignore duplicate item numbers. */\n readonly containsDuplicateElementIds?: boolean | undefined;\n /** Indicate if duplicated ItemNumbers within child elements are to be ignored. Will not perform checks for duplicates if yes. */\n ignoreDuplicateItemNumbers?: boolean | undefined;\n /** If this is set to true, the ProjectCatalogues property will not be propagated to child elements. This is useful in mapping scenarios, where you want to disable propagation for multiple changes, and only enable it once you have mapped all properties */\n ignoreProjectCataloguePropagation?: boolean | undefined;\n /** Indicate if duplicated Ids within child elements are to be ignored. Will not perform checks for duplicates if yes. */\n ignoreDuplicateElementIds?: boolean | undefined;\n /** Price composition by tax rate. */\n totalPriceGrossByTaxRate?: GrossPriceComponentDto[] | undefined;\n /** Internally used to indicate that a propagation is currently done, this is done to not recalculate every single result from a lot of changes when it is sufficient to calculate the total price at once. */\n ignoreChildPriceUpdates?: boolean | undefined;\n /** Net price after applied deductions. */\n readonly deductedPrice?: number | undefined;\n /** Factor of applied deductions to the total price. For example, \"0.03\" means that a 3% deduction is to be applied. */\n deductionFactor?: number | undefined;\n /** The exact amount of the discount as an absolute value. For backwards compatibility reasons, setting this value will also set a calculated value to DeductionFactor, which will also be updated in case the total price is changed to reflect a relative value of the absolute discount sum. */\n absoluteDeduction?: number | undefined;\n /** Will return this ElementContainerBase's total price. */\n readonly totalPrice?: number | undefined;\n /** The total gross price for this ElementContainerBase including all child elements. */\n readonly totalPriceGross?: number | undefined;\n /** Total gross price after applied deductions. */\n readonly totalPriceGrossDeducted?: number | undefined;\n /** Indicates the PriceType of this ElementContainerBase, whether it should factor into total costs or not. */\n priceType?: PriceTypeDto | undefined;\n /** Information about the bidder. */\n bidder?: PartyInformationDto | undefined;\n /** This discriminator is used to identify different bidders in a project. It is different from the Identifier property in the Bidder in that the BidderDiscriminator is intended to be a numerical identifier within a project, while the Identifier does uniquely identify a bidder in the system independent of a specific project. This property should map to \"Bieternummer\" or \"BidderNo\" in GAEB. */\n bidderDiscriminator?: string | undefined;\n /** This is used to store the GAEB XML Id within this ServiceSpecification. This data is not used for any calculations or evaluations but only for GAEB serialization and deserialization. */\n gaebXmlId?: string | undefined;\n /** The ProjectInformation used within the Project in which this ElementContainerBase is contained. This is reference equal to the ProjectInformation used in the parent project. */\n readonly projectInformation?: ProjectInformationDto | undefined;\n /** This service specifications exchange phase, i.e. the current status in the project it is intended to be used (such as request for offer, offer, awarding...). */\n exchangePhase?: ExchangePhaseDto | undefined;\n /** This indicates where the service specification originates, i.e. from an exchange file format or self created. If applicable, additional information is present in the OriginDetail property. */\n origin?: OriginDto | undefined;\n /** This property complements the Origin property. Some formats, e.g. GaebXml might have additional information attached, e.g. GAEB XML V3.2 oder GAEB XML V3.1. This string property is used to hold such data. The Dangl.AVA module does not have a list of possible values, since this is defined in the native format assemblies, e.g. Dangl.GAEB or Dangl.Oenorm. */\n originDetail?: string | undefined;\n /** Creation date of this ServiceSpecification. */\n creationDate?: Date | undefined;\n /** Date indicating until when an offer has to be submitted. In German, this is often called the \"Eröffnungstermin\" */\n offerByDate?: Date | undefined;\n /** Date indicating by when the buyer will select a contractor. */\n decisionDate?: Date | undefined;\n /** Date of when the offer / bid was created */\n bidDate?: Date | undefined;\n /** If a construction project requires a warranty bond, this property indicates the amount as a percentage, e.g. '0.15m' means 15% of the construction total amount as a warranty bond. */\n warrantyBondPercentage?: number | undefined;\n /** If a construction project requires an execution guarantty, this property indicates the amount as a percentage, e.g. '0.15m' means 15% of the construction total amount as an execution guarantee. In practice, this percentage is usually deducted from intermediate invoices and only billed in the final invoice. */\n executionGuaranteePercentage?: number | undefined;\n /** String indicating where the physical submission of the offer is taking place. */\n submissionLocation?: string | undefined;\n /** Description of this ServiceSpecification. */\n description?: string | undefined;\n /** The name of this ServiceSpecification. */\n name?: string | undefined;\n /** This PriceInformation contains global data for the ServiceSpecification. When inside a Project, do not set this property manually. */\n priceInformation?: PriceInformationDto | undefined;\n /** These are Catalogue that are used within this ElementContainerBase. Catalogue references are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. */\n projectCatalogues?: CatalogueDto[] | undefined;\n /** Referenced catalogues for this ElementContainerBase. */\n catalogueReferences?: CatalogueReferenceDto[] | undefined;\n /** The date when the execution of the services is scheduled to start */\n plannedExecutionStart?: Date | undefined;\n /** The date then the execution of the services is scheduled to be finished */\n plannedExecutionEnd?: Date | undefined;\n /** The date on which the contract has been awarded. This matches \"Auftragsdatum\" in GAEB */\n contractDate?: Date | undefined;\n /** This value can be used to indicate the number or identifier of the contract. It matches \"Auftragsnummer\" in GAEB */\n contractIdentifier?: string | undefined;\n /** This indicates how long the warranty period is for this ServiceSpecification */\n warrantyDuration?: WarrantyDurationDto | undefined;\n /** The date on which the warranty period ends */\n warrantyEnd?: Date | undefined;\n /** The date on which the services rendered by the bidder are scheduled to be approved by the buyer */\n approvalDate?: Date | undefined;\n /** This should specify how the approval is performed by the buyer. This matches \"AcceptType\" in GAEB */\n typeOfApproval?: string | undefined;\n /** This optional string property is shared by all IElements, and indicates if the element is part of an addendum, a 'Nachtrag' in German. */\n addendumNumber?: string | undefined;\n /** This indicates, if this element is part of an addendum an, if yes, with what status. */\n addendumStatus?: AddendumStatusDto | undefined;\n /** This property holds additional information that's only valid in commerce exchange phases. */\n commerceProperties?: ServiceSpecificationCommercePropertiesDto | undefined;\n}\n\n/** Base interface definition for elements within an ElementContainerBase. */\nexport interface IElementDto {\n elementType?: string | undefined;\n /** Elements GUID identifier. */\n id: string;\n /** This is used to store the GAEB XML Id within this IElement. This data is not used for any calculations or evaluations but only for GAEB serialization and deserialization. */\n gaebXmlId?: string | undefined;\n /** This optional string property is shared by all IElements, and indicates if the element is part of an addendum, a 'Nachtrag' in German. */\n addendumNumber?: string | undefined;\n projectCatalogues?: CatalogueDto[] | undefined;\n catalogueReferences?: CatalogueReferenceDto[] | undefined;\n elementTypeDiscriminator: string;\n}\n\n/** This class describes an external catalogue. Catalogues, or collections, hold information to categorize and describe items. For example, the German DIN 276 cost group standards describe different types of costs for building projects. When referencing the DIN 276 catalogue and providing an item key or identifier, it is possible to reference data in this catalogue. */\nexport interface CatalogueDto {\n /** Elements GUID identifier. */\n id: string;\n /** This is used to store the GAEB XML Id within this Catalogue. This data is not used for any calculations or evaluations but only for GAEB serialization and deserialization. */\n gaebXmlId?: string | undefined;\n /** The name that is given for this catalogue. */\n name?: string | undefined;\n /** Additional information about this catalogue. */\n description?: string | undefined;\n /** If given, this gives a classification for the contents of the catalogue */\n catalogueType?: CatalogueTypeDto | undefined;\n /** This property may hold additional information about the catalogue type. It is currently only used in GAEB XML exchange to carry detailed information about a catalogue type, but it's otherwise just a free text field. */\n catalogueTypeDetail?: string | undefined;\n}\n\n/** This enumeration describes the type of a catalogue. Catalogues, or collections, hold information to categorize and describe items. For example, the German DIN 276 cost group standards describe different types of costs for building projects. When referencing the DIN 276 catalogue and providing an item key or identifier, it is possible to reference data in this catalogue. */\nexport enum CatalogueTypeDto {\n Unknown = 'Unknown',\n Location = 'Location',\n DIN276 = 'DIN276',\n CostUnit = 'CostUnit',\n WorkCategory = 'WorkCategory',\n OenormB1801CostGroup = 'OenormB1801CostGroup',\n BIM = 'BIM',\n Attachment = 'Attachment'\n}\n\n/** This class is used to link data between catalogues and objects. */\nexport interface CatalogueReferenceDto {\n /** Elements GUID identifier. */\n id: string;\n /** This points to the item in the catalogue itself. This means that, for example when this quantity assignment references a \"DIN 276\" catalogue, this property indicates the number / identifier / key in DIN 276 that is referenced. */\n catalogueReferenceKey?: string | undefined;\n /** The Id of the CatalogueReference that is targeted by this item. Set this property to set the referenced catalogue. */\n catalogueReferenceId?: string | undefined;\n /** These are CatalogueReference that are used within this ServiceSpecification. Catalogue references are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. */\n projectCatalogues?: CatalogueDto[] | undefined;\n /** This returns the referenced catalogue. Will return null if there is no reference or the catalogue is not present in the ProjectCatalogues. */\n readonly catalogue?: CatalogueDto | undefined;\n}\n\n/** A Position is the main item type in a ServiceSpecification, holding information about tasks to be done, their prices, description, amounts etc. */\nexport interface PositionDto extends IElementDto {\n /** Will return the price per unit, rounded according to the project settings or the default value of three decimal places */\n readonly unitPrice?: number | undefined;\n /** You can use this property to directly set the unit price for this position. This will override any given PriceComponents */\n unitPriceOverride?: number | undefined;\n /** Will return this Position's total quantity, rounded to three decimal places. */\n readonly quantity?: number | undefined;\n /** You can use this property to directly set the quantity for this position. This will override any given QuantityComponents */\n quantityOverride?: number | undefined;\n /** This indicates true if this specific position is specified as a complementing position for any base position. */\n isComplementingPosition?: boolean | undefined;\n /** If IsComplementingPosition is set to true, this will indicate which base positions are targeted by this complementing position. */\n complementsPositions?: string[] | undefined;\n /** You can use this property to directly specify the total price of this position as a percentage of the sum of the total prices of base positions that this position complements. It will essentially set the total price for this position to the sum of all total prices of the positions specified in ComplementsPositions multiplied by the percentage here. If present, this has precedence over UnitPriceOverride as well as QuantityOverride. */\n complementingPricePercentageOverride?: number | undefined;\n /** This is a read only property showing the total price of this positions as a percentage of the sum of the total prices of all base positions, in case this position is a complementing positions. If this position is not a complementing position, this will be null. Also, if no prices are present, this will also be null. */\n complementingPricePercentage?: number | undefined;\n /** The tag of the unit used for this positions quantity. */\n unitTag?: string | undefined;\n /** The components for labour time in this Position. */\n labourComponents?: LabourPriceComponentDto | undefined;\n /** The single price components in this Position. Price components should not be handled directly on a per-position basis but set globally in the parent Projects ProjectInformation. */\n priceComponents?: PriceComponentDto[] | undefined;\n /** The quantity components of this Position. */\n quantityComponents?: CalculationDto[] | undefined;\n /** Further structuring of this Position. */\n subDescriptions?: SubDescriptionDto[] | undefined;\n /** Indicates the status of this Position's comission. */\n comissionStatus?: ComissionStatusDto | undefined;\n /** A list of positions that complement this Position. The positions are referenced by their GUIDs. It might be used together with ComplementedByQuantities in case that only a given quantity is complemented by positions. */\n complementedBy?: string[] | undefined;\n /** Will indicate if this Position is complemented in this ServiceSpecification by other Positions. It can not be set to false when there are entries in the ComplementedBy property. */\n complemented?: boolean | undefined;\n /** Indicates that the amount for this Position is to be set by the bidder. */\n amountToBeEnteredByBidder?: boolean | undefined;\n /** Indicates if the bidder demands for prices to be broken up into their price components. */\n priceCompositionRequired?: boolean | undefined;\n /** Indicates if this Position should use a different TaxRate than what is the default for the Project. */\n useDifferentTaxRate?: boolean | undefined;\n /** Will return either the parent ServiceSpecification's TaxRate or it's own if it has a different value. (For example, in Germany Water has a different TaxRate than regular Positions) */\n taxRate?: number | undefined;\n /** The ItemNumber for this Position. */\n itemNumber?: ItemNumberDto | undefined;\n /** The rate of deductions, i.e. 0.12m means 12% price deduction. */\n deductionFactor?: number | undefined;\n /** Returns the product of UnitPrice times Quantity. */\n readonly totalPrice?: number | undefined;\n /** The total gross price for this Position. */\n readonly totalPriceGross?: number | undefined;\n /** Total gross price after applied deductions. */\n readonly totalPriceGrossDeducted?: number | undefined;\n /** Net price after applied deductions. Please be aware that this is the total price, from TotalPrice, not the unit price of the position. */\n readonly deductedPrice?: number | undefined;\n /** This indicates the type of a position. If this is an alternative position, its AlternativeTo property should be set to the id of the position it can replace. */\n positionType?: PositionTypeDto | undefined;\n /** Indicates the PriceType of this Position. */\n priceType?: PriceTypeDto | undefined;\n /** This indicates if this position is regular or describing a labour / hourly paid work service */\n serviceType?: ServiceTypeDto | undefined;\n /** This property describes additional information about a product being used within this Position. For example, a pipe position, per length unit, could be composed of different pipe segments, fitting and other accessory articles. */\n productData?: ProductDataDto | undefined;\n /** Short description for this DescriptionBase element. */\n shortText?: string | undefined;\n /** Detailed description for this DescriptionBase element. When the HtmlLongText is set, this is automatically overwritten and filled with the appropriate plain text representation of the Html text. Vice versa, setting this property overrides the HtmlLongText. */\n longText?: string | undefined;\n /** This contains the Html representation of the Longtext. When the LongText is set, this is automatically overwritten and filled with the appropriate Html representation of the plaintext. Vice versa, setting this property overrides the LongText. GAEB 90 and GAEB 2000 exports do not support any image functionality. In GAEB XML, only images that use an embedded Base64 data uri are exported, regular url references are cleared before written out. */\n htmlLongText?: string | undefined;\n /** Indicates if this DescriptionBase element contains Buyer or Bidder additions to the text. */\n additionType?: AdditionTypeDto | undefined;\n elementType?: string | undefined;\n /** Quantity assignments are, in contrast to SubDescriptions, used to categorize parts of this Position. For example, it could be categorized by cost group - e.g. a Position describing concrete walls could follow the German DIN 276 Cost Groups Standard and specify that of the total 1.000m² wall, 500m² are classified as exterior walls and 500m² are classified as interior walls. They would then have different cost groups associated, e.g. for accounting purposes. */\n quantityAssignments?: QuantityAssignmentDto[] | undefined;\n /** The CommerceProperties support specialized information that is only useful in GAEB XML 9x data exchange phases. It is intended to provide article information. */\n commerceProperties?: CommercePropertiesDto | undefined;\n /** If this position is an Alternative, then this property should point to the id of the position in this service specification that it can replace. If this is set to a value, you can optionally also specify an identifier via AlternativeIdentifier to specifiy multiple positions that must be used together to be an alternative to a single base position. */\n alternativeTo?: string | undefined;\n /** This is an optional property that can be used together with AlternativeTo. If this is set, you can indicate which alternative group a specific position is assigned to. That way, if you specifiy multiple alternative Positions with the same AlternativeIdentifier, you can indicate that to replace a single base Position, multiple alternative Positions should be used. This property is not checked or managed automatically, so it is possible for this property to become invalid, by for example setting this property but not setting a base position via AlternativeTo. */\n alternativeIdentifier?: number | undefined;\n /** This is an optional property that can be used together with AlternativeTo and AlternativeGroupIdentifier. If this is set, you can indicate which alternative group a specific position is assigned to. That way, you can specify the id (in integer format) for the alternative group this position belongs to. It's different to AlternativeIdentifier in that the other property describes the id of the group, while this property here describes the group itself. If a position only has set AlternativeGroupIdentifier but not AlternativeIdentifier, then it likely is a base position for a specific group. This was introduced in version v2.9.0 to be able to model both position and group ids for alternative group combinations. This property is not checked or managed automatically, so it is possible for this property to become invalid, by for example setting this property but not setting a base position via AlternativeTo. */\n alternativeGroupIdentifier?: number | undefined;\n /** If this is true, it indicates that the position is intended to be a lump sum, \"Pauschal\" in German. This means the position total price that is being invoiced should not depend on the actual quantity. In practice, partial invoices are still often used for partial services rendered. This property does not affect the price calculation for this position. Typically, the Quantity should be set to 1.0 when this flag is used. */\n isLumpSum?: boolean | undefined;\n /** This identifier can be used to point to the Id of a position in the same ServiceSpecification that acts as a base position. It matches \"Bezugsposition\" in GAEB. This can be used for positions that repeat partially or are linked together */\n repetitionTo?: string | undefined;\n v1CompatibilityPriceType?: string | undefined;\n /** This represents a standardized description. This means that instead of solely relying on texts to describe a service, external standards and definitions are referenced for a common understanding. */\n standardizedDescription?: StandardizedDescriptionDto | undefined;\n /** This list contains references to positions that complement this one, additionally also specifying a quantity for which the addition is intended. This does not replace the ComplementedBy property and there are no automatic checks being done between these two properties, so it's up to the user code to ensure deletions (and additions, if desired) are performed for both properties. When copying withing keeping Ids, this list will not be part of the copy process, since it would only contain quantities without actual position references. Containers, however, will rebuild the list with updated position references when copying positions that contain entries here. */\n complementedByQuantities?: ComplementedByQuantityDto[] | undefined;\n /** This identifier can be used to point to the Id of an ExecutionDescription in the same ServiceSpecification. ExecutionDescriptions act as a way to centrally describe how positions should be executed in practice. Often, the position itself still has text of its own to highlight deviations from that or add more details. */\n executionDescriptionReference?: string | undefined;\n /** This indicates if a position has not been offered. This is typically only expected to be true when the exchange phase of the parent ServiceSpecification is Offer, and it means that the position has not been offered at all. */\n notOffered?: boolean | undefined;\n /** This class models special properties that only apply to some exchange scenarios where ÖNorm is used. It is special for Positions and extends the OenormProperties base class. */\n oenormPositionProperties?: OenormPositionPropertiesDto | undefined;\n /** This is an identifier specific for this description. Some exchange formats, like GAEB XML, use it to identify descriptions. It's different to an elements identifier in that it should only apply to the description component, meaning the text itself. */\n descriptionId?: string | undefined;\n /** This is a zero based hierarchy level. It's set automatically when used in the context of a Project, and can be used to identify the hierarchy level of the current element. */\n hierarchyLevel?: number | undefined;\n /** This indicates, if this element is part of an addendum an, if yes, with what status. */\n addendumStatus?: AddendumStatusDto | undefined;\n readonly hasBidderCommentInHtmlLongText?: boolean | undefined;\n /** This property can optionally be used in GAEB exchange scenarios. It is only meaningful if this position itself is a complementing position, meaning if this position is marked in other positions in their ComplementedBy list. Then, it specifies how the complementing should be expressed in GAEB. By default, positions are always explicitly referenced, but other options are possible. Please also note that the Dangl.AVA.Converter package, which is used for GAEB exports, will check if the given type is valid in the current project configuration. If not, directly referenced positions will be used as fallback. */\n gaebComplementingType?: PositionComplementingTypeDto | undefined;\n /** HoldOut properties describe services that are to be provided and maintained for a specific time, e.g. fences on a construction site. */\n holdOutProperties?: PositionHoldOutPropertiesDto | undefined;\n /** This is an informational property, which directly holds a numerical value for an estimated quantity. It is not used for any price calculations. */\n estimatedQuantity?: number | undefined;\n /** This is an optional property that holds price catalogue data. These are prices that may represent an estimate, and they typically come from a price catalogue. */\n priceCatalogueData?: PriceCatalogueDataDto | undefined;\n /** If this is set to true, the ProjectCatalogues property will not be propagated to child elements. This is useful in mapping scenarios, where you want to disable propagation for multiple changes, and only enable it once you have mapped all properties. */\n ignoreProjectCataloguePropagation?: boolean | undefined;\n}\n\n/** Based on the PriceComponent, this class is responsible for labour time components. */\nexport interface LabourPriceComponentDto {\n /** The label associated with this price component. Will be taken from the parent Projects ProjectInformation. */\n label?: string | undefined;\n /** The total, calculated price of this component. Will multiply the calculated amount of hours with the ServiceSpecifications hourly wage rate. */\n readonly price?: number | undefined;\n /** The cost per hour of manual labor. */\n hourlyWage?: number | undefined;\n /** The single Calculation elements this price component is composed of. */\n values?: CalculationDto[] | undefined;\n /** Indicates if the ServiceSpecification's standard HourlyWage is to be used or a custom value. */\n useOwnHourlyWage?: boolean | undefined;\n /** The total, calculated time of this component. Will return the result rounded to three decimal places. */\n readonly totalTime?: number | undefined;\n /** These are Catalogues that are used within this PriceComponent. Catalogues are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. They are propagate to all child elements, e.g. other containers and QuantityAssignments. In the context of a ServiceSpecification, all elements share the same instance of the collection. */\n projectCatalogues?: CatalogueDto[] | undefined;\n}\n\n/** This class holds means to calculate mathematical expressions from given strings. */\nexport interface CalculationDto {\n /** Descriptive text for this calculation. */\n description?: string | undefined;\n /** This Calculation's mathematical expression. Please note that thousands separators are not supported. Both comma and point will be treated as decimal separators. */\n formula?: string | undefined;\n /** The calculated result from the formula, 0 if invalid. */\n readonly result?: number | undefined;\n /** Whether the Formula is a valid expression. */\n readonly valid?: boolean | undefined;\n /** Will be -1 if the Formula is correct, else it will show the position in the formula where an error was encountered. This is a zero based index. */\n readonly errorPositionInLine?: number | undefined;\n /** These are Catalogues that are used within this Calculation. Catalogues are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. They are propagate to all child elements, e.g. other containers and QuantityAssignments. In the context of a ServiceSpecification, all elements share the same instance of the collection. */\n projectCatalogues?: CatalogueDto[] | undefined;\n /** Referenced catalogues for this Calculation. */\n catalogueReferences?: CatalogueReferenceDto[] | undefined;\n}\n\n/** This class provides means to store information about a price and it's composition. Note that this is referencing to a single price component, so for example a Position would have a list of PriceComponents, one for Material, one for Labour etc. */\nexport interface PriceComponentDto {\n /** The total, calculated price of this component. */\n readonly price?: number | undefined;\n /** The label associated with this price component. Will be taken from the parent Projects ProjectInformation. */\n label?: string | undefined;\n /** The single Calculation elements this price component is composed of. */\n values?: CalculationDto[] | undefined;\n /** These are Catalogues that are used within this PriceComponent. Catalogues are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. They are propagate to all child elements, e.g. other containers and QuantityAssignments. In the context of a ServiceSpecification, all elements share the same instance of the collection. */\n projectCatalogues?: CatalogueDto[] | undefined;\n}\n\n/** This is appended to a Position and is used to separate the complete Position into smaller amounts to be described separately, for example concrete walls could be attached to different building storeys. */\nexport interface SubDescriptionDto {\n /** Elements GUID identifier. */\n id: string;\n /** Returns the total calculated sum of all quantity assignments. Will return the result rounded to three decimal places. */\n readonly quantity?: number | undefined;\n /** You can use this property to directly set the quantity for this sub description. This will override any given QuantityComponents */\n quantityOverride?: number | undefined;\n /** Holds quantity information for this sub description. Quantity is listening to changes here and is reporting the total sum of all quantity components. */\n quantityComponents?: CalculationDto[] | undefined;\n /** Indicates if the bidder is asked to specify an amount. */\n amountToBeEnteredByBidder?: boolean | undefined;\n /** Identifier for this SubDescription. */\n identifier?: string | undefined;\n /** Short description for this DescriptionBase element. */\n shortText?: string | undefined;\n /** Detailed description for this DescriptionBase element. When the HtmlLongText is set, this is automatically overwritten and filled with the appropriate plain text representation of the Html text. Vice versa, setting this property overrides the HtmlLongText. */\n longText?: string | undefined;\n /** If this is given, then the sub description has a different unit tag than the parent position. */\n unitTag?: string | undefined;\n /** This contains the Html representation of the Longtext. When the LongText is set, this is automatically overwritten and filled with the appropriate Html representation of the plaintext. Vice versa, setting this property overrides the LongText. GAEB 90 and GAEB 2000 exports do not support any image functionality. In GAEB XML, only images that use an embedded Base64 data uri are exported, regular url references are cleared before written out. */\n htmlLongText?: string | undefined;\n /** Indicates if this DescriptionBase element contains Buyer or Bidder additions to the text. */\n additionType?: AdditionTypeDto | undefined;\n /** This represents a standardized description. This means that instead of solely relying on texts to describe a service, external standards and definitions are referenced for a common understanding. */\n standardizedDescription?: StandardizedDescriptionDto | undefined;\n /** This identifier can be used to point to the Id of an ExecutionDescription in the same ServiceSpecification. ExecutionDescriptions act as a way to centrally describe how positions (or sub descriptions) should be executed in practice. Often, the position (or sub description) itself still has text of its own to highlight deviations from that or add more details. When working with import and export features, this property is only supported in GAEB 90 data exchange. */\n executionDescriptionReference?: string | undefined;\n /** These are Catalogues that are used within this Calculation. Catalogues are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. They are propagate to all child elements, e.g. other containers and QuantityAssignments. In the context of a ServiceSpecification, all elements share the same instance of the collection. */\n projectCatalogues?: CatalogueDto[] | undefined;\n /** This is an identifier specific for this description. Some exchange formats, like GAEB XML, use it to identify descriptions. It's different to an elements identifier in that it should only apply to the description component, meaning the text itself. */\n descriptionId?: string | undefined;\n readonly hasBidderCommentInHtmlLongText?: boolean | undefined;\n elementType?: string | undefined;\n elementTypeDiscriminator?: string | undefined;\n}\n\n/** Indicates the origin of an element. */\nexport enum AdditionTypeDto {\n None = 'None',\n ByBuyer = 'ByBuyer',\n ByBidder = 'ByBidder'\n}\n\n/** This class represents a standardized description. This means that instead of solely relying on texts to describe a service, external standards and definitions are referenced for a common understanding. */\nexport interface StandardizedDescriptionDto {\n /** This enumeration identifies a pre-known standard used for referencing standardized descriptions. */\n standardReferenceType?: StandardReferenceTypeDto | undefined;\n /** This string property is the identifier to map to the references standard. Its type is given in the StandardReferenceType */\n standardReference?: string | undefined;\n /** This is a special reference to the German STLB \"Standardleistungsbuch Bau\" reference. If this is used, the StandardReference property should not be set. */\n stlbReference?: STLBReferenceDto | undefined;\n}\n\n/** This enumeration identifies a pre-known standard used for referencing standardized descriptions. */\nexport enum StandardReferenceTypeDto {\n Unknown = 'Unknown',\n StLB = 'StLB',\n StLK = 'StLK',\n STLBBauZ = 'STLBBauZ'\n}\n\n/** This class represents a specialized reference to the German STLB \"Standardleistungsbuch Bau\". The STLB is a commercial offering and describes common services in the construction sector. When this is used, this describes the exact type of a service via a reference to this standard */\nexport interface STLBReferenceDto {\n /** The date of the STLB version. Typically, only the Year and Month are used */\n versionDate?: Date | undefined;\n /** The name of the catalogue within the STLB */\n catalogueName?: string | undefined;\n /** The name of the group in STLB */\n group?: string | undefined;\n /** The cost group this service is associated with */\n costGroup?: string | undefined;\n /** The service area (or type) in the STLB */\n serviceArea?: string | undefined;\n /** These keys may optionally be used to further reference multiple, specific items within the STLB */\n keys?: STLBKeyDto[] | undefined;\n}\n\n/** This class represents a single key reference within the German STLB \"Standardleistungsbuch Bau\" */\nexport interface STLBKeyDto {\n /** This identifier is required and uniquely describes a single reference within the STLB standard. It maps to \"ArtChrIdent\" in GAEB XML */\n artIdentifier?: number | undefined;\n /** This optional index property further categorizes a single reference within the STLB standard. It maps to \"ArtChIdx\" in GAEB XML */\n artIndex?: number | undefined;\n /** This optional identifier further specifies the execution kind of the reference in the STLB standard. It maps to \"ChVIdent\" in GAEB XML */\n kindIdentifier?: number | undefined;\n}\n\n/** Indicates if this service specification item is commissioned (and therefore should be executed), postponed for later or undefined. */\nexport enum ComissionStatusDto {\n Undefined = 'Undefined',\n Commissioned = 'Commissioned',\n Postponed = 'Postponed',\n Removed = 'Removed'\n}\n\n/** This class represents as identifier of a certain service specification's element and is uniquely within the service specification. */\nexport interface ItemNumberDto {\n /** Elements GUID identifier. */\n id: string;\n /** Will return this ItemNumber as point delimited string. Will not distinguish between upper- and lowercase and return an all-lowercase representation. Will consider first numbers, then characters, e.g. 1a is considered preceding aa. Transformation to all lowercase can be configured in the ItemNumberSchema property. */\n stringRepresentation?: string | undefined;\n /** Indicates if the characters and the length of the Identifiers match the current ItemNumberSchema. */\n readonly isSchemaCompliant?: boolean | undefined;\n /** Used for representing and validating this ItemNumber. */\n itemNumberSchema?: ItemNumberSchemaDto | undefined;\n /** Collection of the single identifiers in this ItemNumber. P.e., \"02.03.004\" will have three elements \"02\", \"03\", and \"004\". Since ReadOnlyObservableCollection`1 does have the event set to protected, it can be accessed like this: (itemNumber.Identifiers as INotifyCollectionChanged).CollectionChanged */\n identifiers?: string[] | undefined;\n /** This indicates if this item number is at the lot level. Find out more about lots in the documentation. */\n readonly isLot?: boolean | undefined;\n /** This is a zero based hierarchy level. It's set automatically when used in the context of a Project, and can be used to identify the hierarchy level of the current element. */\n hierarchyLevel?: number | undefined;\n /** This property indicates if this ItemNumber is attached to an object of the Position type. */\n readonly isAttachedToPosition?: boolean | undefined;\n itemNumberSchemaBeforeMapping?: ItemNumberSchemaDto | undefined;\n}\n\n/** This is a classification for Position elements. */\nexport enum PositionTypeDto {\n Regular = 'Regular',\n Optional = 'Optional',\n Alternative = 'Alternative'\n}\n\n/** This indicates the price type of a IPricedElement. */\nexport enum PriceTypeDto {\n WithTotal = 'WithTotal',\n WithoutTotal = 'WithoutTotal'\n}\n\n/** The service type describes the type of service a Position represents. */\nexport enum ServiceTypeDto {\n Regular = 'Regular',\n HourlyPaidWork = 'HourlyPaidWork'\n}\n\n/** This class represents data about products and their vendor */\nexport interface ProductDataDto {\n /** Elements GUID identifier. */\n id: string;\n /** This PartyInformation is used to describe details about the vendor of this ProductData. */\n vendor?: PartyInformationDto | undefined;\n /** The collection of ArticleData that describe this product, e.g. a pipe product could be composed out of multiple pipe segments and fittings. */\n articles?: ArticleDataDto[] | undefined;\n /** Short description for this ITextElement element. */\n shortText?: string | undefined;\n /** Detailed description for this ITextElement element. When the HtmlLongText is set, this is automatically overwritten and filled with the appropriate plain text representation of the Html text. Vice versa, setting this property overrides the HtmlLongText. */\n longText?: string | undefined;\n /** This contains the Html representation of the Longtext. When the LongText is set, this is automatically overwritten and filled with the appropriate Html representation of the plaintext. Vice versa, setting this property overrides the LongText. GAEB 90 and GAEB 2000 exports do not support any image functionality. In GAEB XML, only images that use an embedded Base64 data uri are exported, regular url references are cleared before written out. */\n htmlLongText?: string | undefined;\n}\n\n/** This class represents a single article, usually used within ProductData */\nexport interface ArticleDataDto {\n /** Elements GUID identifier. */\n id: string;\n /** The name (or brand name) for this article, usually given by the supplier or vendor. */\n name?: string | undefined;\n /** An article number that describes it, useful when integrating other systems. */\n articleNumber?: string | undefined;\n /** Quantity for this article. If this is used within a Position, the quantity here should be the quantity required for the full quantity of the position, not for a single unit. */\n quantity?: number | undefined;\n /** The unit tag for this single ArticleData. */\n unitTag?: string | undefined;\n /** This is an optional text element that can be used to further describe the ArticleData. */\n description?: string | undefined;\n /** Short description for this ITextElement element. */\n shortText?: string | undefined;\n /** Detailed description for this ITextElement element. When the HtmlLongText is set, this is automatically overwritten and filled with the appropriate plain text representation of the Html text. Vice versa, setting this property overrides the HtmlLongText. */\n longText?: string | undefined;\n /** This contains the Html representation of the Longtext. When the LongText is set, this is automatically overwritten and filled with the appropriate Html representation of the plaintext. Vice versa, setting this property overrides the LongText. GAEB 90 and GAEB 2000 exports do not support any image functionality. In GAEB XML, only images that use an embedded Base64 data uri are exported, regular url references are cleared before written out. */\n htmlLongText?: string | undefined;\n}\n\n/** Quantity assignments are, in contrast to SubDescriptions, used to categorize parts of their parent Position. For example, it could be categorized by cost group - e.g. a Position describing concrete walls could follow the German DIN 276 Cost Groups Standard and specify that of the total 1.000m² wall, 500m² are classified as exterior walls and 500m² are classified as interior walls. They would then have different cost groups associated, e.g. for accounting purposes. */\nexport interface QuantityAssignmentDto {\n /** Elements GUID identifier. */\n id: string;\n /** The total quantity in this quantity assignment */\n quantity?: number | undefined;\n /** These are Catalogue that are used within this ServiceSpecification. Catalogue references are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. */\n projectCatalogues?: CatalogueDto[] | undefined;\n /** Referenced catalogues for this QuantityAssignment. */\n catalogueReferences?: CatalogueReferenceDto[] | undefined;\n}\n\n/** This class holds specialized information that is relevant to trade or commerce based data exchange scenarios, e.g. between customers, vendors, suppliers and distributors. It is used when exporting to GAEB XML 9x exchange phases. */\nexport interface CommercePropertiesDto {\n /** This maps to ArtNo in GAEB XML and represents an article number given by the supplier. */\n articleNumber?: string | undefined;\n /** This maps to EAN in GAEB XML and represents an GTIN (formerly EAN) article number. */\n eanGtinArticleNumber?: string | undefined;\n /** This maps to ArtNoID in GAEB XML and represents an ILN article number. */\n ilnArticleNumber?: string | undefined;\n /** This maps to CatalogNo in GAEB XML and represents an identifier of a specific catalogue. The referenced catalogue is usually a customer specific one, not related to CatalogueReferences. */\n catalogueNumber?: string | undefined;\n /** This maps to CatalogArtNo in GAEB XML and represents a key that maps to an entry in a specific catalogue. The referenced catalogue is usually a customer specific one, not related to CatalogueReferences. */\n catalogueArticleNumber?: string | undefined;\n /** This optional property can be used to indicate the basis for prices for a single position. Price basis means that the price is given per unit of the basis, e.g. per a pack of five when this property is set to '5'. */\n priceBasis?: number | undefined;\n /** This optional property can be used to indicate a sub position identifier specific for the commerce exchange */\n subPositionIdentifier?: string | undefined;\n /** In a commerce exchange, this property is usually used to reference the base item number of an underlying phase 83 exchange file */\n customerBaseItemNumber?: string | undefined;\n}\n\n/** This class represents the linking to a complementary position with a specific quantity set. For example, Position 'A' could be complementing Position 'B' with a total quantity of 20 units */\nexport interface ComplementedByQuantityDto {\n /** The quantity that is complemented. E.g., if the base position has a quantity of 100 m² of a brick wall, a complementing position might be for 'walls that exceed 3 m height' and for a total quantity of 10 m². */\n quantity?: number | undefined;\n /** This is the reference to the Id of the Position that is complementing. This means it does NOT reference the base position but the one that contains the actual addition. */\n complementingPositionId?: string | undefined;\n}\n\n/** This class models special properties that only apply to some exchange scenarios where ÖNorm is used. It is special for Positions and extends the OenormProperties base class. */\nexport interface OenormPositionPropertiesDto {\n /** This indicates where the content of this element originates, if set. It corresponds to 'herkunftskennzeichen' in ÖNorm */\n originCode?: OenormOriginCodeDto | undefined;\n /** This marks if the opening texts within this element are considered free text. It corresponds to 'vorbemerkungskennzeichen' in ÖNorm. */\n openingTextIsFreeText?: boolean | undefined;\n /** This indicates if the ÖNorm 'wesentliche position' mark is set */\n isMainPosition?: boolean | undefined;\n /** This indicates if the ÖNorm position was a 'ungeteilteposition' (undivided position). This will only be taken into account when the position is also the sole element inside it's parent group */\n isUndividedPosition?: boolean | undefined;\n /** In some ÖNorm formats, the short text can have it's own addition, so the text is split up in OenormShortText and OenormShortTextAddition To serialize this, either the ShortText property of the parent position needs to be null, or OenormShortText ' ' OenormShortTextAddition needs to match the ShortText. */\n oenormShortText?: string | undefined;\n /** In some ÖNorm formats, the short text can have it's own addition, so the text is split up in OenormShortText and OenormShortTextAddition To serialize this, either the ShortText property of the parent position needs to be null, or OenormShortText ' ' OenormShortTextAddition needs to match the ShortText. */\n oenormShortTextAddition?: string | undefined;\n}\n\n/** This indicates where the content of this element originates, if set. It corresponds to 'herkunftskennzeichen' in ÖNorm */\nexport enum OenormOriginCodeDto {\n Unknown = 'Unknown',\n FreeText = 'FreeText',\n AdditionDescription = 'AdditionDescription'\n}\n\n/** This enumeration represents the status of an addendum, 'Nachtrag' in German */\nexport enum AddendumStatusDto {\n Unknown = 'Unknown',\n Recognized = 'Recognized',\n Filed = 'Filed',\n Offered = 'Offered',\n Withdrawn = 'Withdrawn',\n Rejected = 'Rejected',\n RejectionObjected = 'RejectionObjected',\n FormallyAcknowledged = 'FormallyAcknowledged',\n Approved = 'Approved'\n}\n\n/** This enum represents the different ways in which a complementing position type can be specified. It is typically only used in GAEB exports, since in Dangl.AVA, complementing positions are always explicitly referenced. */\nexport enum PositionComplementingTypeDto {\n Undefined = 'Undefined',\n AllPreviousMarkedPositions = 'AllPreviousMarkedPositions',\n AllPreviousPositions = 'AllPreviousPositions',\n ReferencedPositions = 'ReferencedPositions'\n}\n\n/** This class holds properties that describe retention types in position. Retention / hold out usually means that a service is provided and kept available for a specific amount of time, e.g. fences on a construction site */\nexport interface PositionHoldOutPropertiesDto {\n /** Elements GUID identifier. */\n id: string;\n /** The actual type */\n holdOutType?: HoldOutTypeDto | undefined;\n /** The duration of the period */\n holdOutDuration?: number | undefined;\n /** The time unit of the period */\n holdOutDurationUnit?: HoldOutDurationUnitDto | undefined;\n /** References to base positions */\n basePositionReferences?: string[] | undefined;\n}\n\n/** Types of retentions to be used in positions */\nexport enum HoldOutTypeDto {\n Unknown = 'Unknown',\n Base = 'Base',\n Extension = 'Extension',\n Rent = 'Rent'\n}\n\n/** Duration used in retention positions */\nexport enum HoldOutDurationUnitDto {\n Unknown = 'Unknown',\n Minutes = 'Minutes',\n Hours = 'Hours',\n Days = 'Days',\n Weeks = 'Weeks',\n Months = 'Months'\n}\n\n/** Price catalogue data represents assumed or estimated prices from a catalogue source */\nexport interface PriceCatalogueDataDto {\n /** Elements GUID identifier. */\n id: string;\n /** The lower bound of the unit price */\n unitPriceFrom?: number | undefined;\n /** The upper bound of the unit price */\n unitPriceTo?: number | undefined;\n /** The average unit price */\n unitPriceAverage?: number | undefined;\n /** The lower bound of the wage price */\n wagePriceFrom?: number | undefined;\n /** The upper bound of the wage price */\n wagePriceTo?: number | undefined;\n /** The average wage price */\n wagePriceAverage?: number | undefined;\n}\n\n/** An ExecutionDescription is used to give more details for certain items, especially on how they are meant to be executed. */\nexport interface ExecutionDescriptionDto extends IElementDto {\n /** Blocks within an ExecutionDescription contain the actual information. */\n blocks?: NoteTextDto[] | undefined;\n /** Labels this ExecutionDescription. */\n label?: string | undefined;\n /** Uniquely identifies this ExecutionDescription. */\n identifier?: string | undefined;\n elementType?: string | undefined;\n}\n\n/** Represents an element that holds text information. */\nexport interface NoteTextDto extends IElementDto {\n /** If this is set to true, this text is meant to not be seen as part of the regular elements hierarchy but as a special opening text at the beginning of the project. For example, in GAEB XML, this would map to the GAEB.Award.AddText. Typically, such texts describe project-wide contractual definitions. If this is set to true, this NoteText should be placed at the top of the elements hierarchy directly in the ServiceSpecification.Elements group, otherwise it will likely not be treated correctly when exporting to GAEB. You can only set IsOpeningText or IsClosingText to true. */\n isOpeningText?: boolean | undefined;\n /** If this is set to true, this text is meant to not be seen as part of the regular elements hierarchy but as a special closing text at the end of the project. For Example, in GAEB XML, this would map to the GAEB.AddText. Typically, such texts are used to describe project wide finishing descriptions. If this is set to true, this NoteText should be placed at the top of the elements hierarchy directly in the ServiceSpecification.Elements group, otherwise it will likely not be treated correctly when exporting to GAEB. You can only set IsOpeningText or IsClosingText to true. */\n isClosingText?: boolean | undefined;\n /** Short description for this DescriptionBase element. */\n shortText?: string | undefined;\n /** Indicates if this DescriptionBase element contains Buyer or Bidder additions to the text. */\n additionType?: AdditionTypeDto | undefined;\n /** Detailed description for this DescriptionBase element. When the HtmlLongText is set, this is automatically overwritten and filled with the appropriate plain text representation of the Html text. Vice versa, setting this property overrides the HtmlLongText. */\n longText?: string | undefined;\n /** This contains the Html representation of the Longtext. When the LongText is set, this is automatically overwritten and filled with the appropriate Html representation of the plaintext. Vice versa, setting this property overrides the LongText. GAEB 90 and GAEB 2000 exports do not support any image functionality. In GAEB XML, only images that use an embedded Base64 data uri are exported, regular url references are cleared before written out. */\n htmlLongText?: string | undefined;\n /** This is an optional internal identifier that may be used to add additional information to this NoteText. It is not supported in GAEB import or export. */\n identifier?: string | undefined;\n /** This represents a standardized description. This means that instead of solely relying on texts to describe a service, external standards and definitions are referenced for a common understanding. */\n standardizedDescription?: StandardizedDescriptionDto | undefined;\n elementType?: string | undefined;\n /** This is an identifier specific for this description. Some exchange formats, like GAEB XML, use it to identify descriptions. It's different to an elements identifier in that it should only apply to the description component, meaning the text itself. */\n descriptionId?: string | undefined;\n /** This class models special properties that only apply to some exchange scenarios where ÖNorm is used. It is special for NoteTexts. */\n oenormNoteTextProperties?: OenormNoteTextPropertiesDto | undefined;\n readonly hasBidderCommentInHtmlLongText?: boolean | undefined;\n}\n\n/** This class models special properties that only apply to some exchange scenarios where ÖNorm is used. It is special for NoteTexts. */\nexport interface OenormNoteTextPropertiesDto {\n /** This indicates where the content of this element originates, if set. It corresponds to 'herkunftskennzeichen' in ÖNorm */\n originCode?: OenormOriginCodeDto | undefined;\n}\n\n/** This is a grouping IElement that holds other IElements within. */\nexport interface ServiceSpecificationGroupDto extends IElementDto {\n /** The hourly wage that is used within this ElementContainerBase. Will be propagated to child elements. */\n readonly projectHourlyWage?: number | undefined;\n /** The tax rate that is used within this ElementContainerBase. Will be propagated to child elements. */\n projectTaxRate?: number | undefined;\n /** The price components that are used within this project. They are ignored during Json deserialization because they will be set from the parent project. */\n projectPriceComponents?: string[] | undefined;\n /** The ItemNumberSchema that is used within this project. */\n projectItemNumberSchema?: ItemNumberSchemaDto | undefined;\n /** The IElements within this ElementContainerBase. */\n elements?: IElementDto[] | undefined;\n /** The label used in the parent Project to mark labour time, e.g. \"Hours\" or \"Stunden\". */\n readonly projectLabourTimeLabel?: string | undefined;\n /** Indicates if there are child IElements that have conflicting, duplicated ItemNumbers or if any child ElementContainerBase elements themselves contain duplicate ItemNumber s. Will always indicate false when told to ignore duplicate item numbers. */\n readonly containsDuplicateItemNumbers?: boolean | undefined;\n /** Indicates if there are child IElements that have conflicting, duplicated Ids or if any child ElementContainerBase elements themselves contain duplicate Id s. Will always indicate false when told to ignore duplicate item numbers. */\n readonly containsDuplicateElementIds?: boolean | undefined;\n /** Indicate if duplicated ItemNumbers within child elements are to be ignored. Will not perform checks for duplicates if yes. */\n ignoreDuplicateItemNumbers?: boolean | undefined;\n /** If this is set to true, the ProjectCatalogues property will not be propagated to child elements. This is useful in mapping scenarios, where you want to disable propagation for multiple changes, and only enable it once you have mapped all properties */\n ignoreProjectCataloguePropagation?: boolean | undefined;\n /** Indicate if duplicated Ids within child elements are to be ignored. Will not perform checks for duplicates if yes. */\n ignoreDuplicateElementIds?: boolean | undefined;\n /** Price composition by tax rate. */\n totalPriceGrossByTaxRate?: GrossPriceComponentDto[] | undefined;\n /** Internally used to indicate that a propagation is currently done, this is done to not recalculate every single result from a lot of changes when it is sufficient to calculate the total price at once. */\n ignoreChildPriceUpdates?: boolean | undefined;\n /** Net price after applied deductions. */\n readonly deductedPrice?: number | undefined;\n /** Factor of applied deductions to the total price. For example, \"0.03\" means that a 3% deduction is to be applied. */\n deductionFactor?: number | undefined;\n /** The exact amount of the discount as an absolute value. For backwards compatibility reasons, setting this value will also set a calculated value to DeductionFactor, which will also be updated in case the total price is changed to reflect a relative value of the absolute discount sum. */\n absoluteDeduction?: number | undefined;\n /** Will return this ElementContainerBase's total price. */\n readonly totalPrice?: number | undefined;\n /** The total gross price for this ElementContainerBase including all child elements. */\n readonly totalPriceGross?: number | undefined;\n /** Total gross price after applied deductions. */\n readonly totalPriceGrossDeducted?: number | undefined;\n /** Indicates the PriceType of this ElementContainerBase, whether it should factor into total costs or not. */\n priceType?: PriceTypeDto | undefined;\n /** Description for this ServiceSpecificationGroup. */\n shortText?: string | undefined;\n /** Indicates if this service specification group is commissioned (and therefore should be executed), postponed for later or undefined. */\n comissionStatus?: ComissionStatusDto | undefined;\n /** The ItemNumber for this INumberedElement interface. */\n itemNumber?: ItemNumberDto | undefined;\n elementType?: string | undefined;\n /** This indicates if this group is the parent of a lot. See the documentation for more information about working with lots. */\n readonly isLot?: boolean | undefined;\n /** If this group is an alternative for a base group, then this property should point to the id of the group in this service specification that it can replace. If this is an alternative group to a base group, the PriceType should typically be set to \"WithoutTotal\" so this group does not factor into total costs. The PriceType is not changed when this property is set */\n alternativeTo?: string | undefined;\n /** This class models special properties that only apply to some exchange scenarios where ÖNorm is used. */\n oenormProperties?: OenormPropertiesDto | undefined;\n /** This is a zero based hierarchy level. It's set automatically when used in the context of a Project, and can be used to identify the hierarchy level of the current element. */\n hierarchyLevel?: number | undefined;\n /** This indicates, if this element is part of an addendum an, if yes, with what status. */\n addendumStatus?: AddendumStatusDto | undefined;\n /** This is an optional property that can be used together with AlternativeTo. If this is set, you can indicate which alternative group a specific group is assigned to. That way, if you specifiy multiple alternative ServiceSpecificationGroups with the same AlternativeIdentifier, you can indicate that to replace a single base ServiceSpecificationGroup, multiple alternative ServiceSpecificationGroups should be used. This property is not checked or managed automatically, so it is possible for this property to become invalid, by for example setting this property but not setting a base group via AlternativeTo. */\n alternativeIdentifier?: number | undefined;\n /** This is an optional property that can be used together with AlternativeTo and AlternativeGroupIdentifier. If this is set, you can indicate which alternative group a specific group is assigned to. That way, you can specify the id (in integer format) for the alternative group this group belongs to. It's different to AlternativeIdentifier in that the other property describes the id of the group, while this property here describes the group itself. If a group only has set AlternativeGroupIdentifier but not AlternativeIdentifier, then it likely is a base group for a specific group. This property is not checked or managed automatically, so it is possible for this property to become invalid, by for example setting this property but not setting a base group via AlternativeTo. */\n alternativeGroupIdentifier?: number | undefined;\n}\n\n/** This is used in an ElementContainerBase to hold the price composition. */\nexport interface GrossPriceComponentDto {\n /** This components tax rate. */\n taxRate?: number | undefined;\n /** This is the factor of applied deductions for this component */\n deductionFactor?: number | undefined;\n /** The total net price for all components of a given tax rate. */\n totalNet?: number | undefined;\n /** The resulting price component after applied deductions */\n readonly totalDeducted?: number | undefined;\n /** The total tax amount for all components of a given tax rate. */\n readonly totalTax?: number | undefined;\n /** The total gross price for all components of a given tax rate. */\n readonly totalGross?: number | undefined;\n /** The total gross price for all components of a given tax rate, after applied deductions. */\n readonly totalGrossDeducted?: number | undefined;\n /** The total tax amount for all components of a given tax rate, after applied deductions. */\n readonly totalTaxDeducted?: number | undefined;\n}\n\n/** This class models special properties that only apply to some exchange scenarios where ÖNorm is used. */\nexport interface OenormPropertiesDto {\n /** This indicates where the content of this element originates, if set. It corresponds to 'herkunftskennzeichen' in ÖNorm */\n originCode?: OenormOriginCodeDto | undefined;\n /** This marks if the opening texts within this element are considered free text. It corresponds to 'vorbemerkungskennzeichen' in ÖNorm. */\n openingTextIsFreeText?: boolean | undefined;\n}\n\n/** Indicates a ServiceSpecification's exchange phase, based on the GAEB exchange phases. */\nexport enum ExchangePhaseDto {\n Undefined = 'Undefined',\n Base = 'Base',\n CostEstimate = 'CostEstimate',\n OfferRequest = 'OfferRequest',\n Offer = 'Offer',\n SideOffer = 'SideOffer',\n Grant = 'Grant'\n}\n\n/** Indicates where a service specification was originally created. */\nexport enum OriginDto {\n Self = 'Self',\n Gaeb90 = 'Gaeb90',\n Gaeb2000 = 'Gaeb2000',\n GaebXml = 'GaebXml',\n Oenorm = 'Oenorm',\n Reb = 'Reb',\n Sia = 'Sia'\n}\n\n/** Holds global price information for a ServiceSpecification */\nexport interface PriceInformationDto {\n /** Elements GUID identifier. */\n id: string;\n /** The amount of currency per one hour of manual labour work in this project. */\n hourlyWage?: number | undefined;\n /** The final, total price will be deducted by this rate. */\n deductionFactor?: number | undefined;\n /** This is given when there is only one flat price for the whole service specification. */\n flatSum?: number | undefined;\n /** Global tax rate for the project. Note that certain elements may have a different, specific tax rate. */\n taxRate?: number | undefined;\n /** This property indicates if the TaxRate property is actually zero (0) or if it's just unset. The TaxRate is a non-nullable property, so it can't be null and therefore a distinction between unset and zero relies on this additional property. When exporting to GAEB, this can be used e.g. to decide whether or not the tax rate should be serialized. This property is automtically set to false when the TaxRate is set to any value, even zero. If the TaxRate is not set to zero, this property will always return false and can not be set to true. */\n hasUnsetTaxRate?: boolean | undefined;\n /** Trade discounts for offered in this ServiceSpecification. */\n tradeDiscounts?: TradeDiscountDto[] | undefined;\n}\n\n/** This class holds information about offered trade discounts (Skonto in German) */\nexport interface TradeDiscountDto {\n /** Elements GUID identifier. */\n id: string;\n /** The amount of days for how long a declared trade discount applies. Must be a positive number, negative values will be ignored and not set. */\n deadline?: number | undefined;\n /** The rate of the trade discount. */\n rate?: number | undefined;\n}\n\n/** This class does not represent a typical `TimeSpan` but has a scalar value int Duration and a DurationUnit Unit to represent durations as typically used in contracts, e.g. 5 Months */\nexport interface WarrantyDurationDto {\n /** The scalar value of the duration. This value must be equal to or bigger than zero (>= 0). Negative values can not be set and will be ignored. */\n duration?: number | undefined;\n /** The unit of the duration */\n unit?: DurationUnitDto | undefined;\n}\n\n/** This enumeration represents the unit of a duration */\nexport enum DurationUnitDto {\n Months = 'Months',\n Years = 'Years'\n}\n\n/** This class represents properties used in commerce exchange scenarios */\nexport interface ServiceSpecificationCommercePropertiesDto {\n /** The date until the price is valid or fixed. */\n fixedPriceDate?: Date | undefined;\n /** The date of the delivery voucher note. */\n deliveryVoucherDate?: Date | undefined;\n /** The actual date of delivery. */\n deliveryDate?: Date | undefined;\n /** The number of the inquiry, usually in a context of offer requests. */\n inquiryNumber?: string | undefined;\n /** The number of the offer, usually in a context of an offer. */\n offerNumber?: string | undefined;\n /** The order number, usually in the context of a grant or contract. */\n orderNumber?: string | undefined;\n /** The order confirmation number */\n orderConfirmationNumber?: string | undefined;\n /** The number of the delivery, e.g. on the delivery note voucher. */\n deliveryNumber?: string | undefined;\n /** The reference number of the customer / buyer. */\n customerReferenceNumber?: string | undefined;\n /** The reference number of the supplier / bidder. */\n supplierReferenceNumber?: string | undefined;\n /** The type of shippment. */\n shippingType?: string | undefined;\n /** The type of the price inquiry. */\n inquiryType?: CommerceInquiryTypeDto | undefined;\n}\n\n/** This enum represents types of price inquiries */\nexport enum CommerceInquiryTypeDto {\n Unknown = 'Unknown',\n Project = 'Project',\n Immediate = 'Immediate',\n Exhibition = 'Exhibition'\n}\n\n/** A Project contains all relevant information for a construction project. */\nexport interface ProjectDto {\n /** Elements GUID identifier. */\n id: string;\n /** This property controls the accuracy of all price properties, meaning how many decimal places are preserved in calculations. It defaults to DEFAULT_PRICE_ACCURACY. Please see the Dangl.AVA documentation for further information about decimal precision. If UnitPriceAccuracy is set, then this property is ignored for unit prices. */\n priceAccuracy?: number | undefined;\n /** This property controls the accuracy of position unit price properties, meaning how many decimal places are preserved in calculations. Please see the Dangl.AVA documentation for further information about decimal precision. This can be separately set from PriceAccuracy, and it only controls the accuracy of the unit price of positions, not the total price. It defaults to null, which means the standard PriceAccuracy is used for unit prices. */\n unitPriceAccuracy?: number | undefined;\n /** This forces total prices to be the strict product of quantities times unit price in positions. It is enabled by default. If this is disabled, both the unit price and the total price of positions is calculated from the non-rounded values. Please see the documentation for a more detailed explanation of this setting. */\n forceStrictTotals?: boolean | undefined;\n /** This property controls the rounding mode of all price properties, meaning how rounding of decimal places is performed in price calculations. It defaults to DEFAULT_ROUNDING_MODE. Please see the Dangl.AVA documentation for further information about decimal precision. */\n priceRoundingMode?: PriceRoundingModeDto | undefined;\n /** The ProjectInformation contains information that describes the project and its structure. */\n projectInformation?: ProjectInformationDto | undefined;\n /** The ServiceSpecifications in this Project. */\n serviceSpecifications?: ServiceSpecificationDto[] | undefined;\n /** This is used to store the GAEB XML Id within this Project. This data is not used for any calculations or evaluations but only for GAEB serialization and deserialization. */\n gaebXmlId?: string | undefined;\n}\n","export enum ModeViewType {\n Tree = 'Tree',\n List = 'List',\n Table = 'Table'\n}\n","// This file is automatically generated as part of the build process\n\nexport const version = {\n version: \"1.2.2-beta0004\",\n commitInfo: \"Branch.develop.Sha.43b2a397bdd337adf478e89e156a4020c85dc7cc\",\n commitDate: \"2025-01-16\",\n commitHash: \"43b2a397bdd337adf478e89e156a4020c85dc7cc\",\n informationalVersion: \"1.2.2-beta.4+Branch.develop.Sha.43b2a397bdd337adf478e89e156a4020c85dc7cc\",\n buildDateUtc: new Date(Date.UTC(2025, 0, 16, 15, 27, 48))\n}\n","export interface ITextWords {\n textSearch: string;\n textNothing: string;\n textNothingFiltered: string;\n textAll: string;\n tooltipAllOpen: string;\n tooltipAllClose: string;\n tooltipAllAdd: string;\n tooltipAllRemove: string;\n defaultNameNoteText: string;\n defaultNameDescription: string;\n defaultNameGroup: string;\n defaultNamePosition: string;\n}\n\nexport const DEFAULT_TEXT_WORDS: ITextWords = {\n textSearch: 'Search',\n textNothing: 'Nothing',\n textNothingFiltered: 'No Filter',\n textAll: 'All',\n tooltipAllOpen: 'Expand all',\n tooltipAllClose: 'Collapse all',\n tooltipAllAdd: 'Add all',\n tooltipAllRemove: 'Remove all',\n defaultNameNoteText: 'Note Text',\n defaultNameDescription: 'Description',\n defaultNameGroup: 'Group',\n defaultNamePosition: 'Position'\n};\n\nexport const germanTextsAva: ITextWords = {\n textSearch: 'Suche',\n textNothing: 'Nichts',\n textNothingFiltered: 'Kein Filter',\n textAll: 'Alle',\n tooltipAllOpen: 'Alle aufklappen',\n tooltipAllClose: 'Alle zuklappen',\n tooltipAllAdd: 'Alle hinzufügen',\n tooltipAllRemove: 'Alle entfernen',\n defaultNameNoteText: 'Hinweis',\n defaultNameDescription: 'Beschreibung',\n defaultNameGroup: 'Gruppe',\n defaultNamePosition: 'Position'\n};\n","import { BehaviorSubject, Observable, distinctUntilChanged, map } from 'rxjs';\n\nimport { ITextWords, germanTextsAva, DEFAULT_TEXT_WORDS } from '../constants/defaultTextWords';\nimport { FilterFunction, IConfigurationTree } from '../model/config-tree.model';\nimport { IFunctionViewLine } from '../model/function-view-line.model';\nimport { SelectedElement } from '../model/selecting.model';\nimport { TableColumnType } from '../model/tableColumnType';\nimport { IKeyboardOperationConfig } from '../services/keyboard-operation.service';\n\nexport class ConfigurationTreeService {\n private _textWords = { ...DEFAULT_TEXT_WORDS };\n private _indent = '20px';\n private _functionView: IFunctionViewLine[] = [];\n private _selectedColor: string = '';\n private _allowDblClick = true;\n private _mouseAwareKeyboardControl = true;\n private _addTableColumns: TableColumnType[] = [];\n private _isSelectionMode = false;\n private _initiallySelectedElements: SelectedElement[] = [];\n private _customKeyboardOperationConfig: IKeyboardOperationConfig | null = null;\n private _listFilterFunc: FilterFunction[] = [];\n\n private treeConfigSource = new BehaviorSubject<IConfigurationTree>(this.getDefaultConfiguration());\n public treeConfig$: Observable<IConfigurationTree> = this.treeConfigSource.asObservable();\n constructor() {}\n\n public setTreeConfig(value: IConfigurationTree): void {\n this.treeConfigSource.next(value);\n }\n\n public getCurrentTreeConfig(): IConfigurationTree | null {\n return this.treeConfigSource.getValue();\n }\n\n public getTextWordsFromConfig(): Observable<ITextWords | null> {\n return this.treeConfig$.pipe(\n map((config) => {\n const configTextWords =\n config?.textWords === 'en' ? DEFAULT_TEXT_WORDS : config?.textWords === 'de' ? germanTextsAva : config?.textWords;\n\n return { ...this._textWords, ...configTextWords };\n }),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getIndentFromConfig(): Observable<string> {\n return this.treeConfig$.pipe(\n map((config) => config?.indent || ''),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getFunctionViewFromConfig(): Observable<IFunctionViewLine[]> {\n return this.treeConfig$.pipe(\n map((config) => config?.functionView || []),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getSelectedColorFromConfig(): Observable<string> {\n return this.treeConfig$.pipe(\n map((config) => config?.selectedColor || ''),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getAllowDblClickFromConfig(): Observable<boolean> {\n return this.treeConfig$.pipe(\n map((config) => config?.allowDblClick || false),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getAddTableColumnsFromConfig(): Observable<TableColumnType[]> {\n return this.treeConfig$.pipe(\n map((config) => config?.addTableColumns || []),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getIsSelectionModeFromConfig(): Observable<boolean> {\n return this.treeConfig$.pipe(\n map((config) => config?.isSelectionMode || false),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getInitiallySelectedElementsViewFromConfig(): Observable<SelectedElement[]> {\n return this.treeConfig$.pipe(\n map((config) => config?.initiallySelectedElements || []),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getMouseAwareKeyboardControlFromConfig(): Observable<boolean> {\n return this.treeConfig$.pipe(\n map((config) => config?.mouseAwareKeyboardControl || false),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getCustomKeyboardOperationConfigFromConfig(): Observable<IKeyboardOperationConfig | null> {\n return this.treeConfig$.pipe(\n map((config) => config?.customKeyboardOperationConfig || null),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getListFilterFuncFromConfig(): Observable<FilterFunction[]> {\n return this.treeConfig$.pipe(\n map((config) => config?.listFilterFunc || []),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n private getDefaultConfiguration(): IConfigurationTree {\n return {\n textWords: this._textWords,\n indent: this._indent,\n functionView: this._functionView,\n selectedColor: this._selectedColor,\n allowDblClick: this._allowDblClick,\n addTableColumns: this._addTableColumns,\n isSelectionMode: this._isSelectionMode,\n initiallySelectedElements: this._initiallySelectedElements,\n mouseAwareKeyboardControl: this._mouseAwareKeyboardControl,\n customKeyboardOperationConfig: this._customKeyboardOperationConfig,\n listFilterFunc: this._listFilterFunc\n };\n }\n}\n","import { IElementDto, ServiceSpecificationGroupDto } from '../model/ava-models';\n\nexport class ExpandParentGroupService {\n constructor() {}\n\n expandParentGroups(element: IElementDto, flatElements: IElementDto[] | null, expansionState: { [id: string]: boolean }): void {\n if (!flatElements?.length) {\n return;\n }\n\n const listGroup: ServiceSpecificationGroupDto[] = flatElements.filter(\n (item) => (item as ServiceSpecificationGroupDto).elements?.length\n );\n\n if (!listGroup.length) {\n return;\n }\n\n const findAndExpandParent = (currentElement: IElementDto): ServiceSpecificationGroupDto | null => {\n for (const itemGroup of listGroup) {\n if (expansionState[itemGroup.id]) {\n continue;\n }\n\n if (itemGroup.elements?.find((item) => currentElement.id === item.id)) {\n expansionState[itemGroup.id] = true;\n return itemGroup;\n }\n }\n return null;\n };\n\n const expandRecursive = (innerElement: IElementDto): void => {\n const parentGroup = findAndExpandParent(innerElement);\n if (parentGroup) {\n expandRecursive(parentGroup);\n }\n };\n\n expandRecursive(element);\n }\n}\n","import { ExecutionDescriptionDto, IElementDto, NoteTextDto, PositionDto, ServiceSpecificationGroupDto } from '../model';\n\nexport const DEFAULT_FILTERS: ((element: IElementDto, filter: string) => boolean | undefined)[] = [\n (element: IElementDto, filter: string) => {\n if (\n element.elementType === 'PositionDto' ||\n element.elementType === 'ServiceSpecificationGroupDto' ||\n element.elementType === 'NoteTextDto'\n ) {\n return (element as PositionDto | ServiceSpecificationGroupDto | NoteTextDto).shortText?.trim().toLocaleLowerCase().includes(filter);\n }\n\n return false;\n },\n (element: IElementDto, filter: string) => {\n if (element.elementType === 'ExecutionDescriptionDto') {\n return (element as ExecutionDescriptionDto).label?.trim().toLocaleLowerCase().includes(filter);\n }\n\n return false;\n },\n (element: IElementDto, filter: string) => {\n if (element.elementType === 'PositionDto' || element.elementType === 'ServiceSpecificationGroupDto') {\n return (element as PositionDto | ServiceSpecificationGroupDto).itemNumber?.stringRepresentation?.includes(filter);\n }\n\n return false;\n }\n];\n","export const defaults = {\n doubleClickTimeoutInMilliseconds: 300\n};\n","import { Injectable } from '@angular/core';\n\nimport { Observable, ReplaySubject, of } from 'rxjs';\n\nimport { DEFAULT_FILTERS } from '../constants';\nimport { IElementDto, ServiceSpecificationDto, ServiceSpecificationGroupDto } from '../model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FlatElementsService {\n private _flatElementsDto: IElementDto[] = [];\n private flatElementsDtoSource = new ReplaySubject<IElementDto[]>(1);\n flatElementsDto = this.flatElementsDtoSource.asObservable();\n\n private objectElementsDto!: { [id: string]: IElementDto };\n\n listFilterFunc = DEFAULT_FILTERS;\n\n constructor() {}\n\n setElementsDto(elementsDto: ServiceSpecificationDto): void {\n this._flatElementsDto = FlatElementsService.getFlatElements(elementsDto);\n this.objectElementsDto = FlatElementsService.getObjectElements(this._flatElementsDto);\n this.flatElementsDtoSource.next(this._flatElementsDto);\n }\n\n public static getFlatElements(container: { elements?: IElementDto[] | null }): IElementDto[] {\n const flatElements: IElementDto[] = [];\n\n if (container.elements) {\n container.elements.forEach((e) => {\n flatElements.push(e);\n if (e.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n const group = e as ServiceSpecificationGroupDto;\n flatElements.push(...this.getFlatElements(group));\n }\n });\n }\n\n return flatElements;\n }\n\n public static getObjectElements(elements: IElementDto[]): { [id: string]: IElementDto } {\n const objectElements: { [id: string]: IElementDto } = {};\n if (elements?.length) {\n elements.forEach((e) => {\n if (e?.id) {\n objectElements[e.id] = e;\n }\n });\n }\n return objectElements;\n }\n\n getOneElementById(id: string | null): Observable<IElementDto | null> {\n return of(id ? this.objectElementsDto?.[id] || null : null);\n }\n\n checkFilterValue(element: IElementDto, filterValue: string): boolean {\n const cleanFilter = filterValue.trim().toLocaleLowerCase();\n for (const func of this.listFilterFunc) {\n if (func(element, cleanFilter)) {\n return true;\n }\n }\n return false;\n }\n\n jumpNextNode(delta: number, currentElement: IElementDto | null, conditionFunc?: (e: IElementDto) => boolean): IElementDto | null {\n if (!this._flatElementsDto.length || (conditionFunc && !this._flatElementsDto.find((item) => conditionFunc(item)))) {\n return null;\n }\n const startElement = currentElement || this._flatElementsDto[0];\n let nextIndex = this._flatElementsDto.findIndex((item) => startElement.id === item.id);\n if (currentElement) {\n nextIndex = this.getNextIndex(this._flatElementsDto.length, nextIndex, delta);\n }\n while (conditionFunc && !conditionFunc(this._flatElementsDto[nextIndex])) {\n nextIndex = this.getNextIndex(this._flatElementsDto.length, nextIndex, delta);\n }\n return this._flatElementsDto[nextIndex];\n }\n\n private getNextIndex(length: number, index: number, delta: number): number {\n let nextIndex = index + delta;\n nextIndex = nextIndex < 0 ? length - 1 : nextIndex;\n nextIndex = nextIndex > length - 1 ? 0 : nextIndex;\n return nextIndex;\n }\n\n public getObjectElementsDto(): { [id: string]: IElementDto } {\n return this.objectElementsDto;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ReplaySubject } from 'rxjs';\n\nimport { IElementDto } from '../model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SelectElementService {\n private preselectedElementSource = new ReplaySubject<IElementDto | null>(1);\n private preselectedElementWasNull = false;\n preselectedElement = this.preselectedElementSource.asObservable();\n\n private selectClickElementSource = new ReplaySubject<IElementDto | null>(1);\n selectClickElement = this.selectClickElementSource.asObservable();\n\n private selectDblClickElementSource = new ReplaySubject<IElementDto>(1);\n selectDblClickElement = this.selectDblClickElementSource.asObservable();\n\n private selectContextMenuElementSource = new ReplaySubject<{ position: { x: string; y: string }; node: IElementDto }>(1);\n selectContextMenuElement = this.selectContextMenuElementSource.asObservable();\n\n setPreselectedElement(element: IElementDto | null): void {\n this.preselectedElementSource.next(element);\n this.preselectedElementWasNull = element == null;\n }\n\n setClickElement(element: IElementDto | null): void {\n this.selectClickElementSource.next(element);\n if (!this.preselectedElementWasNull) {\n this.preselectedElementSource.next(null);\n }\n }\n\n setDblClickElement(element: IElementDto): void {\n this.selectDblClickElementSource.next(element);\n }\n\n setContextMenuElement(data: { position: { x: string; y: string }; node: IElementDto }): void {\n this.selectContextMenuElementSource.next(data);\n }\n}\n","import { inject } from '@angular/core';\n\nimport { FlatElementsService } from './flat-elements.service';\nimport { SelectElementService } from './select-element.service';\n\nimport { IElementDto } from '../model/ava-models';\n\nexport interface IKeyboardOperationConfig {\n operations: IKeyboardOperations;\n}\n\nexport enum KeyboardOperationType {\n MoveSelectedPositionUp = 'moveSelectedPositionUp',\n MoveSelectedPositionDown = 'moveSelectedPositionDown',\n MoveChosenPositionDown = 'moveChosenPositionDown',\n MoveChosenPositionUp = 'moveChosenPositionUp',\n ClearChosenPosition = 'clearChosenPosition',\n SelectChosenPosition = 'selectChosenPosition'\n}\n\nexport type IKeyboardOperations = {\n [key in KeyboardOperationType]?: IKeyboardOperation;\n};\n\nexport interface IKeyboardOperation {\n disabled?: boolean;\n keyEvent?: string;\n}\n\nexport class KeyboardOperationService {\n private defaultKeyboardOperationConfig: IKeyboardOperationConfig = {\n operations: {\n moveSelectedPositionUp: { disabled: false, keyEvent: 'F11' },\n moveSelectedPositionDown: { disabled: false, keyEvent: 'F12' },\n moveChosenPositionDown: { disabled: false, keyEvent: 'ArrowDown' },\n moveChosenPositionUp: { disabled: false, keyEvent: 'ArrowUp' },\n clearChosenPosition: { disabled: false, keyEvent: 'Escape' },\n selectChosenPosition: { disabled: false, keyEvent: 'Enter' }\n }\n };\n\n private flatElementsService = inject(FlatElementsService);\n private selectElementService = inject(SelectElementService);\n\n private currentConfig = { ...this.defaultKeyboardOperationConfig };\n\n constructor() {}\n\n getConfig() {\n return this.currentConfig;\n }\n\n mergeConfigOperation(config: IKeyboardOperationConfig) {\n this.currentConfig = this.deepMerge(this.currentConfig, config);\n }\n\n private deepMerge<T>(obj1: T, obj2: T): T {\n const mergedConfig: T = { ...obj1 };\n\n for (const key in obj2) {\n if (Object.prototype.hasOwnProperty.call(obj2, key)) {\n if (\n Object.prototype.hasOwnProperty.call(mergedConfig, key) &&\n typeof mergedConfig[key] === 'object' &&\n mergedConfig[key] !== null &&\n typeof obj2[key] === 'object' &&\n obj2[key] !== null\n ) {\n mergedConfig[key] = this.deepMerge(mergedConfig[key], obj2[key]);\n } else {\n mergedConfig[key] = obj2[key];\n }\n }\n }\n\n return mergedConfig;\n }\n\n handleKeyboardEvent(\n keyEvent: KeyboardEvent,\n element: IElementDto | null\n ): {\n operation: KeyboardOperationType;\n nextElement: IElementDto | null;\n } | null {\n let nextElement;\n\n if (\n this.currentConfig.operations.moveSelectedPositionUp?.keyEvent === keyEvent.key &&\n !this.currentConfig.operations.moveSelectedPositionUp?.disabled\n ) {\n keyEvent.preventDefault();\n nextElement = this.flatElementsService.jumpNextNode(-1, element);\n this.selectElementService.setClickElement(nextElement);\n return {\n operation: KeyboardOperationType.MoveSelectedPositionUp,\n nextElement: nextElement\n };\n }\n\n if (\n this.currentConfig.operations.moveSelectedPositionDown?.keyEvent === keyEvent.key &&\n !this.currentConfig.operations.moveSelectedPositionDown?.disabled\n ) {\n keyEvent.preventDefault();\n nextElement = this.flatElementsService.jumpNextNode(1, element);\n this.selectElementService.setClickElement(nextElement);\n return {\n operation: KeyboardOperationType.MoveSelectedPositionDown,\n nextElement: nextElement\n };\n }\n\n if (\n this.currentConfig.operations.moveChosenPositionDown?.keyEvent === keyEvent.key &&\n !this.currentConfig.operations.moveChosenPositionDown?.disabled\n ) {\n keyEvent.preventDefault();\n nextElement = this.flatElementsService.jumpNextNode(1, element);\n this.selectElementService.setPreselectedElement(nextElement?.id === element?.id ? null : nextElement);\n return {\n operation: KeyboardOperationType.MoveChosenPositionDown,\n nextElement: nextElement\n };\n }\n\n if (\n this.currentConfig.operations.moveChosenPositionUp?.keyEvent === keyEvent.key &&\n !this.currentConfig.operations.moveChosenPositionUp?.disabled\n ) {\n keyEvent.preventDefault();\n nextElement = this.flatElementsService.jumpNextNode(-1, element);\n this.selectElementService.setPreselectedElement(nextElement?.id === element?.id ? null : nextElement);\n return {\n operation: KeyboardOperationType.MoveChosenPositionUp,\n nextElement: nextElement\n };\n }\n\n if (\n this.currentConfig.operations.selectChosenPosition?.keyEvent === keyEvent.key &&\n !this.currentConfig.operations.selectChosenPosition?.disabled\n ) {\n keyEvent.preventDefault();\n this.selectElementService.setClickElement(element);\n return {\n operation: KeyboardOperationType.SelectChosenPosition,\n nextElement: null\n };\n }\n\n if (\n this.currentConfig.operations.clearChosenPosition?.keyEvent === keyEvent.key &&\n !this.currentConfig.operations.clearChosenPosition?.disabled\n ) {\n keyEvent.preventDefault();\n this.selectElementService.setPreselectedElement(null);\n return {\n operation: KeyboardOperationType.ClearChosenPosition,\n nextElement: null\n };\n }\n\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\n\nimport { IElementDto, ServiceSpecificationGroupDto } from '../model/ava-models';\nimport { SelectedElement, SelectingElementsType } from '../model/selecting.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TreeNodeSelectionService {\n private treeNodeSelectingSource = new BehaviorSubject<{ [elementId: string]: SelectingElementsType }>({});\n treeNodeSelecting = this.treeNodeSelectingSource.asObservable();\n private _selectingElementsTreeData: SelectingElementsType[] | null = null;\n\n private selectingChangedSource = new ReplaySubject<SelectingElementsType[]>(1);\n selectingChanged = this.selectingChangedSource.asObservable();\n\n flatSelectedListId: string[] = [];\n\n constructor() {}\n\n setSelectingChanged(selectingChanged: SelectingElementsType[]): void {\n this.selectingChangedSource.next(selectingChanged);\n }\n\n loadSelectingElements(\n elements: IElementDto[] | null | undefined,\n parent: SelectingElementsType | null | undefined = null\n ): SelectingElementsType[] {\n const list: SelectingElementsType[] = [];\n if (elements && elements.length) {\n elements.forEach((element: IElementDto) => {\n const obj = {\n parent,\n elementId: element.id,\n checked: false\n } as SelectingElementsType;\n if (element.elementType === 'ServiceSpecificationGroupDto') {\n obj.indeterminate = false;\n obj.children = this.loadSelectingElements((<ServiceSpecificationGroupDto>element).elements, obj);\n }\n list.push(obj);\n this.treeNodeSelectingSource.value[element.id] = obj;\n });\n this._selectingElementsTreeData = list;\n }\n return list;\n }\n\n getTreeData() {\n return this._selectingElementsTreeData;\n }\n\n private changeAllChild(children: SelectingElementsType[], value: boolean): void {\n children.forEach((item: SelectingElementsType) => {\n item.checked = value;\n if (item.children) {\n item.indeterminate = false;\n this.changeAllChild(item.children, value);\n }\n });\n }\n\n private changeAllParent(parent: SelectingElementsType, value: boolean): void {\n parent.checked = value;\n if (parent.parent) {\n this.changeAllParent(parent.parent, value);\n }\n }\n\n changeSelecting(value: boolean, id: string, isUserChanged = true): void {\n const selectingNode = this.treeNodeSelectingSource.value[id];\n if (!selectingNode) {\n return;\n }\n\n selectingNode.checked = value;\n if (selectingNode.children) {\n selectingNode.indeterminate = false;\n if (isUserChanged) {\n this.changeAllChild(selectingNode.children, value);\n }\n }\n if (selectingNode.parent) {\n this.changeAllParent(selectingNode.parent, value);\n }\n this.getIndeterminate(selectingNode?.parent || null);\n if (isUserChanged) {\n this.treeNodeSelectingSource.next(this.treeNodeSelectingSource.value);\n }\n }\n\n private getIndeterminate(parentNode: SelectingElementsType | null | undefined): void {\n if (!parentNode) {\n return;\n }\n\n if (!parentNode.children || !parentNode.children.length) {\n return;\n }\n\n let resultIndeterminateSome = false;\n let resultIndeterminateAll = false;\n parentNode.children.forEach((item: SelectingElementsType) => {\n if (item.checked || item.indeterminate) {\n resultIndeterminateSome = true;\n }\n if (!item.checked) {\n resultIndeterminateAll = true;\n }\n });\n if (!resultIndeterminateSome) {\n parentNode.indeterminate = false;\n parentNode.checked = false;\n } else if (resultIndeterminateAll) {\n parentNode.indeterminate = true;\n parentNode.checked = false;\n } else {\n parentNode.indeterminate = false;\n parentNode.checked = true;\n }\n this.getIndeterminate(parentNode.parent);\n }\n\n changeAll(value: boolean): void {\n Object.values(this.treeNodeSelectingSource.value).forEach((e) => {\n this.changeSelecting(value, e.elementId, false);\n });\n this.treeNodeSelectingSource.next(this.treeNodeSelectingSource.value);\n }\n\n getFlatSelectedListId(selectedElements: SelectedElement[]): void {\n selectedElements.forEach((el) => {\n if (el.children) {\n this.getFlatSelectedListId(el.children);\n } else {\n this.flatSelectedListId.push(el.elementId);\n }\n });\n }\n\n getTreeRoot(treeRoot: SelectingElementsType[]): SelectingElementsType[] {\n const list: SelectingElementsType[] = [];\n treeRoot.forEach((item: SelectingElementsType) => {\n if (item.checked || item.indeterminate) {\n const obj: SelectingElementsType = { elementId: item.elementId };\n if (item.children) {\n obj.children = this.getTreeRoot(item.children);\n }\n list.push(obj);\n }\n });\n return list;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TreeHoverTooltipService {\n showElementOver(text: HTMLElement | null): void {\n if (!text) return;\n const rect = text.getBoundingClientRect();\n text.style.position = 'fixed';\n text.style.top = `${rect.top}px`;\n text.style.left = `${rect.left}px`;\n text.style.zIndex = '2000';\n }\n\n hideElementOver(text: HTMLElement | null): void {\n if (!text) return;\n text.style.position = 'static';\n text.style.top = ``;\n text.style.left = ``;\n text.style.zIndex = '';\n }\n}\n","import { Directive, HostListener, inject, Input } from '@angular/core';\n\nimport { TreeItemComponent } from '../components/tree-item/tree-item.component';\nimport { TreeHoverTooltipService } from '../services/tree-hover-tooltip.service';\n\ntype TimeoutType = ReturnType<typeof setTimeout>;\n\n@Directive({\n selector: '[avaHoverEffect]',\n standalone: true\n})\nexport class HoverEffectDirective {\n @Input('avaHoverEffect') itemText!: TreeItemComponent;\n private allowShow: TimeoutType | null = null;\n private treeHoverTooltipService = inject(TreeHoverTooltipService);\n\n @HostListener('mouseenter') onMouseEnter() {\n this.treeHoverTooltipService.showElementOver(this.itemText.textElement.nativeElement);\n }\n @HostListener('mouseup') onMouseUp() {\n this.allowShow = setTimeout(() => {\n this.hide();\n this.treeHoverTooltipService.showElementOver(this.itemText.textElement.nativeElement);\n }, 400);\n }\n\n @HostListener('wheel') onWheel() {\n this.hide();\n }\n @HostListener('scroll') onScroll() {\n this.hide();\n }\n @HostListener('mouseleave') onMouseLeave() {\n this.hide();\n }\n @HostListener('keydown') onKeyDown() {\n this.hide();\n }\n @HostListener('mouseout') onMouseOut() {\n this.hide();\n }\n\n @HostListener('mousemove', ['$event']) onMouseMove(event: MouseEvent) {\n const element = event.currentTarget as HTMLElement;\n const parent = element.closest('.ava-tree-wrapper');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n if (event.x > rect.right) {\n this.onMouseLeave();\n }\n }\n }\n\n private hide(): void {\n if (this.allowShow) {\n clearTimeout(this.allowShow);\n this.allowShow = null;\n }\n this.treeHoverTooltipService.hideElementOver(this.itemText.textElement.nativeElement);\n }\n}\n","import { AfterViewInit, Directive, ElementRef, Input, OnDestroy, Renderer2 } from '@angular/core';\n\nimport { Subject, takeUntil } from 'rxjs';\n\nimport { IFunctionViewLine, IViewLine } from '../model';\nimport { ConfigurationTreeService } from '../services/configuration-tree.service';\nimport { FlatElementsService } from '../services/flat-elements.service';\n\n@Directive({\n selector: '[saveChangingView]'\n})\nexport class SaveChangingViewDirective implements AfterViewInit, OnDestroy {\n @Input() saveChangingView = 'text';\n private $destroy = new Subject<boolean>();\n constructor(\n private el: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n private flatElementsService: FlatElementsService,\n private configurationTreeService: ConfigurationTreeService\n ) {}\n\n ngOnDestroy(): void {\n this.$destroy.next(true);\n this.$destroy.complete();\n }\n\n ngAfterViewInit(): void {\n this.updateElementStles();\n }\n\n private updateElementStles(): void {\n if (!this.el) {\n return;\n }\n const el = this.el.nativeElement;\n const id = el.id;\n\n if (!id) {\n return;\n }\n\n if (!this.renderer) {\n return;\n }\n this.configurationTreeService\n .getFunctionViewFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((functionView) => {\n const view: IViewLine | null = this.getChangedView(id, functionView);\n if (!view) {\n return;\n }\n\n switch (this.saveChangingView) {\n case 'icon':\n if (view.iconName) {\n el.textContent = view.iconName;\n }\n if (view.iconColor) {\n this.renderer.setStyle(el, 'color', view.iconColor);\n }\n break;\n case 'text':\n if (view.textBold) {\n this.renderer.setStyle(el, 'font-weight', view.textBold);\n }\n if (view.textColor) {\n this.renderer.setStyle(el, 'color', view.textColor);\n }\n break;\n }\n });\n }\n\n private getChangedView(id: string, functionView: IFunctionViewLine[]): IViewLine | null {\n const objectElementsDto = this.flatElementsService.getObjectElementsDto();\n if (objectElementsDto) {\n const element = objectElementsDto[id];\n if (element && functionView?.length) {\n for (const objectView of functionView) {\n if (objectView.func(element)) {\n return objectView.view;\n }\n }\n }\n }\n\n return null;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { IElementDto } from '../model';\n\n@Pipe({\n name: 'elementIconName'\n})\nexport class ElementIconNamePipe implements PipeTransform {\n transform(element: IElementDto): string {\n switch (element.elementTypeDiscriminator) {\n case 'NoteTextDto':\n return 'subject';\n case 'ExecutionDescriptionDto':\n return 'event';\n case 'ServiceSpecificationGroupDto':\n return 'folder_open';\n case 'PositionDto':\n return 'add';\n default:\n return '';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { IElementDto, PositionDto, ServiceSpecificationGroupDto } from '../model';\n\n@Pipe({\n name: 'elementItemNumber'\n})\nexport class ElementItemNumberPipe implements PipeTransform {\n transform(element: IElementDto): string {\n switch (element.elementTypeDiscriminator) {\n case 'ServiceSpecificationGroupDto':\n return (element as ServiceSpecificationGroupDto).itemNumber?.stringRepresentation || '';\n case 'PositionDto':\n return (element as PositionDto).itemNumber?.stringRepresentation || '';\n default:\n return '';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { ITextWords } from '../constants/defaultTextWords';\nimport { ExecutionDescriptionDto, IElementDto, NoteTextDto, PositionDto, ServiceSpecificationGroupDto } from '../model';\n\n@Pipe({\n name: 'elementText'\n})\nexport class ElementTextPipe implements PipeTransform {\n transform(element: IElementDto, treeWords: ITextWords): string {\n if (!element || !treeWords) {\n return '';\n }\n\n switch (element.elementTypeDiscriminator) {\n case 'NoteTextDto':\n return (element as NoteTextDto).shortText || treeWords.defaultNameNoteText || '';\n case 'ExecutionDescriptionDto':\n return `${(element as ExecutionDescriptionDto).identifier ? (element as ExecutionDescriptionDto).identifier + ' - ' : ''}${\n (element as ExecutionDescriptionDto).label || treeWords.defaultNameDescription || ''\n }`;\n case 'ServiceSpecificationGroupDto':\n return (element as ServiceSpecificationGroupDto).shortText || treeWords.defaultNameGroup || '';\n case 'PositionDto':\n return (element as PositionDto).shortText || treeWords.defaultNamePosition || '';\n default:\n return '';\n }\n }\n}\n","import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectorRef, Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { combineLatestWith, Observable, Subject, take, takeUntil } from 'rxjs';\n\nimport { defaults } from '../../constants';\nimport { ITextWords } from '../../constants/defaultTextWords';\nimport { SaveChangingViewDirective } from '../../directives/save-changing-view.directive';\nimport { IElementDto } from '../../model';\nimport { SelectingElementsType } from '../../model/selecting.model';\nimport { ElementIconNamePipe } from '../../pipes/element-icon-name.pipe';\nimport { ElementItemNumberPipe } from '../../pipes/element-item-number.pipe';\nimport { ElementTextPipe } from '../../pipes/element-text.pipe';\nimport { ConfigurationTreeService } from '../../services/configuration-tree.service';\nimport { SelectElementService } from '../../services/select-element.service';\nimport { TreeNodeSelectionService } from '../../services/tree-node-selection.service';\n\n@Component({\n selector: 'ava-tree-item',\n templateUrl: './tree-item.component.html',\n styleUrls: ['./tree-item.component.scss'],\n imports: [\n SaveChangingViewDirective,\n AsyncPipe,\n ElementItemNumberPipe,\n ElementTextPipe,\n ElementIconNamePipe,\n NgTemplateOutlet,\n MatCheckboxModule,\n FormsModule,\n MatIconModule\n ]\n})\nexport class TreeItemComponent implements OnInit, OnDestroy {\n @Input() element: IElementDto = {} as IElementDto;\n @Input() expansionState: { [id: string]: boolean } = {};\n @Input() isSelect = false;\n @Input() backgroundColor: string | null = '';\n @ViewChild('textItem') textElement!: ElementRef<HTMLElement>;\n selectedElement: IElementDto | null = null;\n preselectedElement: IElementDto | null = null;\n private isAllowOneClick = true;\n private timerStop: ReturnType<typeof setTimeout> | null = null;\n private $destroy = new Subject<boolean>();\n\n readonly textWords$: Observable<ITextWords | null> = this.configurationTreeService.getTextWordsFromConfig();\n isSelectionMode = false;\n\n checkedElements: {\n [elementId: string]: SelectingElementsType;\n } = {};\n\n constructor(\n public selectElementService: SelectElementService,\n private treeNodeSelectionService: TreeNodeSelectionService,\n private cdr: ChangeDetectorRef,\n private configurationTreeService: ConfigurationTreeService\n ) {}\n\n ngOnInit(): void {\n this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((element) => (this.selectedElement = element));\n this.selectElementService.preselectedElement.pipe(takeUntil(this.$destroy)).subscribe((element) => (this.preselectedElement = element));\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((isSelectionMode) => {\n this.isSelectionMode = isSelectionMode;\n });\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(combineLatestWith(this.treeNodeSelectionService.treeNodeSelecting), takeUntil(this.$destroy))\n .subscribe(([isSelectionMode, treeNodeSelecting]) => {\n if (isSelectionMode) {\n this.checkedElements = treeNodeSelecting;\n this.cdr.detectChanges();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.timerStop && clearTimeout(this.timerStop);\n this.$destroy.next(true);\n this.$destroy.complete();\n }\n\n private expand(): void {\n if (this.element) {\n this.expansionState[this.element.id] = true;\n }\n }\n\n select(): void {\n const clickElement = () => {\n this.selectElementService.setClickElement(this.selectedElement?.id === this.element.id ? null : this.element);\n if (this.element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n this.expand();\n }\n };\n this.configurationTreeService\n .getAllowDblClickFromConfig()\n .pipe(take(1))\n .subscribe((allowDblClick) => {\n if (!allowDblClick) {\n clickElement();\n } else if (this.isAllowOneClick) {\n this.isAllowOneClick = false;\n this.timerStop = setTimeout(() => {\n clickElement();\n this.isAllowOneClick = true;\n }, defaults.doubleClickTimeoutInMilliseconds);\n }\n });\n }\n\n dblSelect(): void {\n this.configurationTreeService\n .getAllowDblClickFromConfig()\n .pipe(take(1))\n .subscribe((allowDblClick) => {\n if (!allowDblClick) {\n return;\n }\n\n this.timerStop && clearTimeout(this.timerStop);\n\n this.selectElementService.setDblClickElement(this.element);\n if (this.element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n this.expand();\n }\n this.isAllowOneClick = true;\n });\n }\n\n openContextMenu(event: MouseEvent): void {\n event.preventDefault();\n this.selectElementService.setContextMenuElement({ position: { x: `${event.x}px`, y: `${event.y}px` }, node: this.element });\n }\n\n changeSelecting(element: IElementDto, isSelected: boolean): void {\n this.treeNodeSelectionService.changeSelecting(isSelected, element.id);\n }\n}\n","@if (element) {\n <div\n (click)=\"select()\"\n (dblclick)=\"dblSelect()\"\n (contextmenu)=\"openContextMenu($event)\"\n class=\"ava-tree-item\"\n [id]=\"element.id\"\n >\n <mat-icon\n class=\"ava-tree-item__icon\"\n saveChangingView=\"icon\"\n [id]=\"element.id\"\n >{{ element | elementIconName }}</mat-icon\n >\n @if (!isSelectionMode) {\n <div\n #textItem\n class=\"ava-tree-item__text\"\n [class.choose]=\"!isSelectionMode && element.id === preselectedElement?.id\"\n [id]=\"element.id\"\n saveChangingView=\"text\"\n [class.select]=\"isSelect\"\n [style.backgroundColor]=\"backgroundColor\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n }\n @if (isSelectionMode) {\n <mat-checkbox\n class=\"ava-tree-item__checkbox\"\n color=\"primary\"\n [indeterminate]=\"checkedElements[element.id].indeterminate\"\n [(ngModel)]=\"checkedElements[element.id].checked\"\n (ngModelChange)=\"changeSelecting(element, $event)\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"ava-tree-item__text\"\n saveChangingView=\"text\"\n [id]=\"element.id\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n </mat-checkbox>\n }\n </div>\n}\n\n<ng-template #text>\n @if (textWords$ | async; as textWords) {\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' || element.elementTypeDiscriminator === 'PositionDto') {\n <ng-container> {{ element | elementItemNumber }} - {{ element | elementText: textWords }} </ng-container>\n } @else {\n <ng-container>{{ element | elementText: textWords }}</ng-container>\n }\n }\n</ng-template>\n","import { AsyncPipe } from '@angular/common';\nimport { Component, ElementRef, Input, OnDestroy, OnInit, QueryList, ViewChildren } from '@angular/core';\n\nimport { Observable, Subject, takeUntil } from 'rxjs';\n\nimport { HoverEffectDirective } from '../../directives/hover-effect.directive';\nimport { IElementDto } from '../../model';\nimport { ConfigurationTreeService } from '../../services/configuration-tree.service';\nimport { SelectElementService } from '../../services/select-element.service';\n\nimport { TreeItemComponent } from '../tree-item/tree-item.component';\n\n@Component({\n selector: 'ava-list-structure',\n templateUrl: './list-structure.component.html',\n styleUrls: ['./list-structure.component.scss'],\n imports: [TreeItemComponent, AsyncPipe, HoverEffectDirective]\n})\nexport class ListStructureComponent implements OnDestroy, OnInit {\n @Input() filteredElementList: IElementDto[] = [];\n @ViewChildren('hoverTooltipElement') templates!: QueryList<ElementRef<HTMLElement>>;\n\n selectedElement: IElementDto | null = null;\n private $destroy = new Subject<boolean>();\n\n readonly selectedColor$: Observable<string> = this.configurationTreeService.getSelectedColorFromConfig();\n isSelectionMode = false;\n\n constructor(\n public selectElementService: SelectElementService,\n private configurationTreeService: ConfigurationTreeService\n ) {}\n\n ngOnInit(): void {\n this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((element) => {\n this.selectedElement = element;\n });\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((isSelectionMode) => {\n this.isSelectionMode = isSelectionMode;\n });\n }\n\n ngOnDestroy(): void {\n this.$destroy.next(true);\n this.$destroy.complete();\n }\n}\n","@for (element of filteredElementList; track element.id) {\n <ng-container>\n <div\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [style.backgroundColor]=\"!isSelectionMode && element.id === selectedElement?.id ? (selectedColor$ | async) : ''\"\n [id]=\"'hover-element-id-' + element.id\"\n [avaHoverEffect]=\"avaItem\"\n >\n <ava-tree-item\n #avaItem\n [element]=\"element\"\n [isSelect]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [backgroundColor]=\"!isSelectionMode && element.id === selectedElement?.id ? (selectedColor$ | async) : ''\"\n ></ava-tree-item>\n </div>\n </ng-container>\n}\n","import { AsyncPipe, DecimalPipe, NgClass } from '@angular/common';\nimport { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTableModule } from '@angular/material/table';\n\nimport { combineLatestWith, map, Observable, of, Subject, switchMap, take, takeUntil } from 'rxjs';\n\nimport { defaults } from '../../constants';\nimport { ITextWords } from '../../constants/defaultTextWords';\nimport { SaveChangingViewDirective } from '../../directives/save-changing-view.directive';\nimport { IElementDto, TableColumnType } from '../../model';\nimport { SelectingElementsObjectType } from '../../model/selecting.model';\nimport { ElementIconNamePipe } from '../../pipes/element-icon-name.pipe';\nimport { ElementItemNumberPipe } from '../../pipes/element-item-number.pipe';\nimport { ElementTextPipe } from '../../pipes/element-text.pipe';\nimport { ConfigurationTreeService } from '../../services/configuration-tree.service';\nimport { SelectElementService } from '../../services/select-element.service';\nimport { TreeNodeSelectionService } from '../../services/tree-node-selection.service';\n\n@Component({\n selector: 'ava-table-structure',\n templateUrl: './table-structure.component.html',\n styleUrls: ['./table-structure.component.scss'],\n imports: [\n NgClass,\n AsyncPipe,\n ElementTextPipe,\n ElementItemNumberPipe,\n ElementIconNamePipe,\n DecimalPipe,\n MatTableModule,\n MatIconModule,\n MatCheckboxModule,\n FormsModule,\n SaveChangingViewDirective\n ]\n})\nexport class TableStructureComponent implements OnInit, OnDestroy {\n @Input() filteredElementList: IElementDto[] = [];\n\n displayedColumns: string[] = [];\n private isAllowOneClick = true;\n selectedElement: IElementDto | null = null;\n preselectedElement: IElementDto | null = null;\n private timerStop: ReturnType<typeof setTimeout> | null = null;\n checkedElements: SelectingElementsObjectType = {};\n\n private $destroy = new Subject<boolean>();\n readonly textWords$: Observable<ITextWords | null> = this.configurationTreeService.getTextWordsFromConfig();\n readonly selectedColor$: Observable<string> = this.configurationTreeService.getSelectedColorFromConfig();\n readonly addTableColumns$: Observable<TableColumnType[]> = this.configurationTreeService.getAddTableColumnsFromConfig();\n isSelectionMode = false;\n\n constructor(\n public selectElementService: SelectElementService,\n private treeNodeSelectionService: TreeNodeSelectionService,\n private cdr: ChangeDetectorRef,\n private configurationTreeService: ConfigurationTreeService\n ) {}\n\n ngOnInit(): void {\n this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((element) => {\n this.selectedElement = element;\n });\n this.selectElementService.preselectedElement.pipe(takeUntil(this.$destroy)).subscribe((element) => {\n this.preselectedElement = element;\n });\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((isSelectionMode) => {\n this.isSelectionMode = isSelectionMode;\n });\n\n this.configureTableColumns();\n\n this.treeNodeSelectionService.treeNodeSelecting.pipe(takeUntil(this.$destroy)).subscribe((treeNodeSelecting) => {\n this.checkedElements = treeNodeSelecting;\n this.cdr.detectChanges();\n });\n }\n\n ngOnDestroy(): void {\n this.timerStop && clearTimeout(this.timerStop);\n\n this.$destroy.next(true);\n this.$destroy.complete();\n }\n\n select(row: IElementDto): void {\n if (this.isSelectionMode) {\n return;\n }\n\n const clickElement = () => {\n this.selectElementService.setClickElement(this.selectedElement?.id === row.id ? null : row);\n };\n this.configurationTreeService\n .getAllowDblClickFromConfig()\n .pipe(take(1))\n .subscribe((allowDblClick) => {\n if (!allowDblClick) {\n clickElement();\n } else if (this.isAllowOneClick) {\n this.isAllowOneClick = false;\n this.timerStop = setTimeout(() => {\n clickElement();\n this.isAllowOneClick = true;\n }, defaults.doubleClickTimeoutInMilliseconds);\n }\n });\n }\n\n dblSelect(row: IElementDto): void {\n this.configurationTreeService\n .getAllowDblClickFromConfig()\n .pipe(take(1))\n .subscribe((allowDblClick) => {\n if (!allowDblClick) {\n return;\n }\n\n if (this.isSelectionMode) {\n return;\n }\n\n this.timerStop && clearTimeout(this.timerStop);\n\n this.selectElementService.setDblClickElement(row);\n this.isAllowOneClick = true;\n });\n }\n\n openContextMenu(event: MouseEvent, row: IElementDto): void {\n event.preventDefault();\n this.selectElementService.setContextMenuElement({ position: { x: `${event.x}px`, y: `${event.y}px` }, node: row });\n }\n\n changeSelecting(element: IElementDto, event: boolean): void {\n this.treeNodeSelectionService.changeSelecting(event, element.id);\n }\n\n configureTableColumns(): void {\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(\n combineLatestWith(this.addTableColumns$.pipe(map((c) => c.map((item) => item.name)))),\n switchMap(([isSelectionMode, addColumns]) => {\n if (isSelectionMode) {\n return of(['icon', 'checkbox', 'itemNumber', 'text', ...addColumns]);\n } else {\n return of(['icon', 'itemNumber', 'text', ...addColumns]);\n }\n }),\n takeUntil(this.$destroy)\n )\n .subscribe((columns) => {\n this.displayedColumns = [...columns];\n });\n }\n}\n","<table\n mat-table\n [dataSource]=\"filteredElementList\"\n>\n <ng-container matColumnDef=\"icon\">\n <th\n mat-header-cell\n *matHeaderCellDef\n ></th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"table-cell-small-width\"\n >\n <mat-icon\n class=\"icon-element\"\n saveChangingView=\"icon\"\n [id]=\"row.id\"\n >\n {{ row | elementIconName }}\n </mat-icon>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"checkbox\">\n <th\n mat-header-cell\n *matHeaderCellDef\n ></th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"table-cell-small-width\"\n >\n <mat-checkbox\n class=\"checkbox\"\n color=\"primary\"\n [indeterminate]=\"checkedElements[element.id].indeterminate\"\n [(ngModel)]=\"checkedElements[element.id].checked\"\n (ngModelChange)=\"changeSelecting(element, $event)\"\n (click)=\"$event.stopPropagation()\"\n >\n </mat-checkbox>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"itemNumber\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n OZ\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n [style.width.ch]=\"row?.itemNumber?.stringRepresentation.length\"\n >\n <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementItemNumber }}\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"text\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n Text\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"table-text\"\n >\n @if (textWords$ | async; as textWords) {\n <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementText: textWords }}\n </div>\n }\n </td>\n </ng-container>\n @for (oneColumn of addTableColumns$ | async; track oneColumn.name) {\n <ng-container>\n <ng-container matColumnDef=\"{{ oneColumn.name }}\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n {{ oneColumn.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n >\n <div\n [style.textAlign]=\"oneColumn.align\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ !oneColumn.numberFormat ? row[oneColumn.name] : (row[oneColumn.name] | number: oneColumn.numberFormat) }}\n </div>\n </td>\n </ng-container>\n </ng-container>\n }\n\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns; sticky: true\"\n class=\"mat-header-row\"\n ></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n (click)=\"select(row)\"\n (dblclick)=\"dblSelect(row)\"\n (contextmenu)=\"openContextMenu($event, row)\"\n [ngClass]=\"{\n choose: !isSelectionMode && row.id === preselectedElement?.id,\n select: !isSelectionMode && row.id === selectedElement?.id,\n }\"\n [style.background]=\"!isSelectionMode && row.id === selectedElement?.id ? (selectedColor$ | async) : ''\"\n [id]=\"row.id\"\n ></tr>\n</table>\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { IElementDto, ServiceSpecificationGroupDto } from '../model';\n\n@Pipe({\n name: 'groupChildElements',\n pure: true\n})\nexport class GroupChildElementsPipe implements PipeTransform {\n transform(element: IElementDto): IElementDto[] | null {\n if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n return (element as ServiceSpecificationGroupDto)?.elements || null;\n }\n\n return null;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { Observable, Subject, takeUntil } from 'rxjs';\n\nimport { HoverEffectDirective } from '../../directives/hover-effect.directive';\nimport { IElementDto } from '../../model';\nimport { GroupChildElementsPipe } from '../../pipes/group-child-elements.pipe';\nimport { ConfigurationTreeService } from '../../services/configuration-tree.service';\nimport { SelectElementService } from '../../services/select-element.service';\n\nimport { TreeItemComponent } from '../tree-item/tree-item.component';\n\n@Component({\n selector: 'ava-tree-node',\n templateUrl: './tree-node.component.html',\n styleUrls: ['./tree-node.component.scss'],\n imports: [TreeItemComponent, GroupChildElementsPipe, MatIconModule, AsyncPipe, HoverEffectDirective]\n})\nexport class TreeNodeComponent implements OnDestroy, OnInit {\n @Input() elementList?: IElementDto[] | null = [];\n @Input() expansionState: { [id: string]: boolean } = {};\n\n selectedElement: IElementDto | null = null;\n private $destroy = new Subject<boolean>();\n\n readonly indent$: Observable<string> = this.configurationTreeService.getIndentFromConfig();\n readonly selectedColor$: Observable<string> = this.configurationTreeService.getSelectedColorFromConfig();\n isSelectionMode = false;\n\n constructor(\n public selectElementService: SelectElementService,\n private configurationTreeService: ConfigurationTreeService\n ) {}\n\n ngOnInit(): void {\n this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((element) => {\n this.selectedElement = element;\n });\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((isSelectionMode) => {\n this.isSelectionMode = isSelectionMode;\n });\n }\n\n ngOnDestroy(): void {\n this.$destroy.next(true);\n this.$destroy.complete();\n }\n\n expand(element: IElementDto): void {\n this.expansionState[element.id] = !this.expansionState[element.id];\n }\n}\n","@for (element of elementList; track element.id) {\n <ng-container>\n <div\n [id]=\"'hover-element-id-' + element.id\"\n class=\"tree-node-wrapper\"\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [style.backgroundColor]=\"!isSelectionMode && element.id === selectedElement?.id ? (selectedColor$ | async) : ''\"\n [avaHoverEffect]=\"avaItem\"\n >\n <div class=\"tree-node-wrapper__content\">\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n <mat-icon\n matRipple\n (click)=\"expand(element)\"\n class=\"tree-node__icon\"\n >\n {{ expansionState[element.id] ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n } @else {\n <mat-icon></mat-icon>\n }\n\n <ava-tree-item\n #avaItem\n [element]=\"element\"\n [expansionState]=\"expansionState\"\n [isSelect]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [backgroundColor]=\"!isSelectionMode && element.id === selectedElement?.id ? (selectedColor$ | async) : ''\"\n ></ava-tree-item>\n </div>\n </div>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' && expansionState[element.id]) {\n <div [style.paddingLeft]=\"indent$ | async\">\n <ava-tree-node\n [elementList]=\"element | groupChildElements\"\n [expansionState]=\"expansionState\"\n ></ava-tree-node>\n </div>\n }\n </ng-container>\n}\n","import { Component, Input } from '@angular/core';\n\nimport { ServiceSpecificationDto } from '../../model';\n\nimport { TreeNodeComponent } from '../tree-node/tree-node.component';\n\n@Component({\n selector: 'ava-tree-structure',\n templateUrl: './tree-structure.component.html',\n styleUrls: ['./tree-structure.component.scss'],\n imports: [TreeNodeComponent]\n})\nexport class TreeStructureComponent {\n @Input() serviceSpecification: ServiceSpecificationDto | null = null;\n @Input() expansionState: { [id: string]: boolean } = {};\n}\n","@if (serviceSpecification?.elements) {\n <ava-tree-node\n [elementList]=\"serviceSpecification?.elements\"\n [expansionState]=\"expansionState\"\n >\n </ava-tree-node>\n}\n","import { AsyncPipe } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n inject,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Self,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { Observable, ReplaySubject, Subject, debounceTime, filter, fromEvent, map, take, takeUntil, tap } from 'rxjs';\n\nimport { ITextWords } from '../../constants/defaultTextWords';\nimport {\n ContextMenuDataType,\n IConfigurationTree,\n IElementDto,\n ModeViewType,\n ProjectDto,\n SelectedElement,\n ServiceSpecificationDto\n} from '../../model';\nimport { SelectingElementsType } from '../../model/selecting.model';\nimport { ConfigurationTreeService } from '../../services/configuration-tree.service';\nimport { ExpandParentGroupService } from '../../services/expand-parent-group.service';\nimport { FlatElementsService } from '../../services/flat-elements.service';\nimport { IKeyboardOperationConfig, KeyboardOperationService, KeyboardOperationType } from '../../services/keyboard-operation.service';\nimport { SelectElementService } from '../../services/select-element.service';\nimport { TreeNodeSelectionService } from '../../services/tree-node-selection.service';\n\nimport { ListStructureComponent } from '../list-structure/list-structure.component';\nimport { TableStructureComponent } from '../table-structure/table-structure.component';\nimport { TreeStructureComponent } from '../tree-structure/tree-structure.component';\n\n@Component({\n selector: 'ava-tree',\n templateUrl: './ava-tree.component.html',\n styleUrls: ['./ava-tree.component.scss'],\n imports: [\n TreeStructureComponent,\n ListStructureComponent,\n TableStructureComponent,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatTooltipModule,\n FormsModule,\n MatInputModule,\n AsyncPipe\n ],\n providers: [\n FlatElementsService,\n SelectElementService,\n TreeNodeSelectionService,\n ExpandParentGroupService,\n KeyboardOperationService,\n ConfigurationTreeService\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AvaTreeComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n /**\n * This is the main data element for the tree structure. You should supply a ProjectDto with\n * exactly one service specification in it.\n */\n @Input() project: ProjectDto | null = null;\n\n /**\n * Optionally, you can supply a map of expansion states for the tree. The keys should be the\n * id properties of the elements in the tree, and the values should be true if the element is\n * expanded, and false if it is collapsed.\n */\n @Input() expansionState: { [id: string]: boolean } = {};\n\n /**\n * Optionally, you can supply the id of the node that should be selected in the tree initially.\n */\n @Input() set selectedNodeId(id: string | null) {\n this._selectedNodeId = id;\n this.flatElementsService.getOneElementById(this._selectedNodeId).subscribe((e) => {\n if (e) {\n this.selectElementService.setClickElement(e);\n }\n });\n }\n private _selectedNodeId: string | null = null;\n /**\n * Optional, defaults to 20px. If this is set, then the tree will be indented by the given value each level.\n * This can be any valid CSS value for the padding-left property, such as 20px, 1em, or 5%.\n *\n */\n\n /**\n * Optional, you can supply a color to be used as the background color for the selected line. Defaults to the primary\n * color from the Material theme, which is #00acc1.\n */\n\n /**\n * You can specify which view type to use for the tree. The default is ModeViewType.Tree, but you can also use\n * ModeViewType.List or ModeViewType.Table.\n */\n @Input() modeView: ModeViewType = ModeViewType.Tree;\n\n /** Optional, defaults to true. If this is disabled, then the double click event for elements is not raised,\n * and clicking on an elemt sends an immediate result since the component has not to wait and check if a double click event\n * is fired.\n */\n\n /**\n * If this is set to true, then the tree will be in selection mode, and the user can select elements\n * by clicking on them. The selected elements will be emitted in the selectedElementsChanged event.\n */\n\n /**\n * You can optionally supply a list of elements that should be selected initially. This is only used if\n * isSelectionMode is true.\n */\n private initiallySelectedElements: SelectedElement[] | null = null;\n\n /**\n * You can supply a map of strings to be used for the text in the tree. This allows you to translate\n * the text in the tree to other languages.\n * {\n * textSearch: string,\n * textNothing: string,\n * textNothingFiltered: string,\n * textAll: string,\n * tooltipAllOpen: string,\n * tooltipAllClose: string,\n * tooltipAllAdd:string,\n * tooltipAllRemove: string,\n * }\n */\n\n readonly textWords$: Observable<ITextWords | null> = this.configurationTreeService.getTextWordsFromConfig();\n readonly isSelectionMode$: Observable<boolean> = this.configurationTreeService.getIsSelectionModeFromConfig();\n private isSelectionMode = false;\n /**\n * Defaults to true. If this is enabled, then navigating in the tree with the keyboard only works\n * if the mouse is over the tree area. This limitation is useful if you have multiple trees or other components\n * that might be using keyboard input.\n */\n private mouseAwareKeyboardControl = true;\n\n /**\n * With this parameter, you can configure which keys will be listenend to switch the tree elements,\n * and also to disable the functionality of the keys */\n private set customKeyboardOperationConfig(config: IKeyboardOperationConfig) {\n this.keyboardOperationService.mergeConfigOperation(config);\n }\n\n /**\n * You can supply custom filters that are processed when the filter input is changed. Default filters are used\n * that check for short text and item number matches, and you can either add custom filters or replace the default ones.\n */\n\n /**\n * Optional. For table views, this allows you to add custom columns to the table.\n * addTableColumns: Array of objects\n * {\n * name: string, // name of column\n * title: string, // showed title of column\n * align?: string, // optional alight: left(default) / center / right\n * numberFormat?: string // optional format of number value, example: '1.2-2'\n * }\n */\n\n /**\n * This allows you to supply a list of functions that can be used to change the appearance of elements.\n * They objects contain a predicate function that is evaluated, along with an option to configure the\n * appearance of the element.\n * functionView: Array of objects\n * {\n * name: string, // name of view part: you can add/remove it when it need\n * func: (element: any, result?: any) => boolean, // this filter function calculate condition to change view\n * view: {\n * iconName?: string, // changed name of icon\n * iconColor?: string, // changed color of icon\n * textBold?: string, // changed weight of text\n * textColor?: string // changed color of text\n * }\n * }\n */\n @Input() set config(configObject: IConfigurationTree) {\n const config = { ...this.configurationTreeService.getCurrentTreeConfig(), ...configObject };\n this.configurationTreeService.setTreeConfig(config);\n }\n\n /**\n * This is emitted when an element is selected by clicking on it. The selected element is emitted as the event value.\n */\n @Output() selectClick = new EventEmitter<IElementDto | null>();\n\n /**\n * This is emitted when an element is selected by double clicking on it. The selected element is emitted as the event value.\n */\n @Output() selectDblClick = new EventEmitter<IElementDto>();\n\n /**\n * This is emitted when an element is selected by right clicking on it. The selected element is emitted as the event value.\n */\n @Output() contextMenuEvent = new EventEmitter<ContextMenuDataType>();\n\n /**\n * This is emitted when the selected elements in the tree are changed. The selected elements are emitted as the event value.\n * Selected elements are elements whose checkboxes are checked, and are different than elements that are in an active selection state.\n * Typcial use cases for this include e.g. selecting multiple elements within a service specification without\n * actually focussing them, e.g. for further processing.\n */\n @Output() selectedElementsChanged = new EventEmitter<SelectedElement[]>();\n\n @ViewChild('avaTreeWrapper') avaTreeWrapper!: ElementRef<HTMLDivElement>;\n @ViewChild('avaMainWrapper') avaMainWrapper!: ElementRef<HTMLDivElement>;\n @ViewChild('avaTreeFilterInput') avaTreeFilterInput!: ElementRef<HTMLInputElement>;\n selectedElement: IElementDto | null = null;\n serviceSpecification!: ServiceSpecificationDto;\n isListenKeyboard = false;\n private isEmiteSelectedElements = false;\n private selectingElementsTreeData: SelectingElementsType[] = [];\n flatElements: IElementDto[] | null = null;\n preselectedElement: IElementDto | null = null;\n filterInput = '';\n listModeViewType = ModeViewType;\n private filter = '';\n private $filter = new ReplaySubject<string>(1);\n filteredElementList: IElementDto[] = [];\n private $destroy = new Subject<boolean>();\n private cdr = inject(ChangeDetectorRef);\n\n constructor(\n @Self() private flatElementsService: FlatElementsService,\n @Self() private selectElementService: SelectElementService,\n @Self() private treeNodeSelectionService: TreeNodeSelectionService,\n @Self() private expandParentGroupService: ExpandParentGroupService,\n @Self() private keyboardOperationService: KeyboardOperationService,\n private ngZone: NgZone,\n private configurationTreeService: ConfigurationTreeService\n ) {}\n\n ngOnInit(): void {\n this.selectElementService.preselectedElement.pipe(takeUntil(this.$destroy)).subscribe((e) => (this.preselectedElement = e));\n this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((e) => {\n this.selectedElement = e;\n this.selectClick.emit(e);\n });\n this.selectElementService.selectDblClickElement.pipe(takeUntil(this.$destroy)).subscribe((e) => this.selectDblClick.emit(e));\n this.selectElementService.selectContextMenuElement.pipe(takeUntil(this.$destroy)).subscribe((e) => this.contextMenuEvent.emit(e));\n this.flatElementsService.flatElementsDto.pipe(takeUntil(this.$destroy)).subscribe((e) => {\n this.flatElements = e;\n this.getFilteredList();\n });\n\n this.$filter.pipe(takeUntil(this.$destroy), debounceTime(250)).subscribe((filter) => {\n this.filter = filter;\n this.getFilteredList();\n });\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((isSelectionMode) => {\n this.isSelectionMode = isSelectionMode;\n });\n\n this.configurationTreeService\n .getMouseAwareKeyboardControlFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((mouseAwareKeyboardControl) => {\n this.mouseAwareKeyboardControl = mouseAwareKeyboardControl;\n });\n\n this.configurationTreeService\n .getListFilterFuncFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((listFilterFunc) => {\n this.flatElementsService.listFilterFunc = listFilterFunc;\n });\n\n this.configurationTreeService\n .getCustomKeyboardOperationConfigFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((config) => {\n if (config) {\n this.customKeyboardOperationConfig = config;\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.initializeEventListeners();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n //TODO should be refactored later OnChanges method\n if (changes['project'] && this.project?.serviceSpecifications?.[0]) {\n this.serviceSpecification = this.project.serviceSpecifications[0];\n this.flatElementsService.setElementsDto(this.serviceSpecification);\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(take(1))\n .subscribe((isSelectionMode) => {\n if (isSelectionMode) {\n this.selectingElementsTreeData = this.treeNodeSelectionService.loadSelectingElements(this.serviceSpecification.elements);\n this.treeNodeSelectionService.treeNodeSelecting.pipe(takeUntil(this.$destroy)).subscribe(() => {\n if (this.isEmiteSelectedElements) {\n setTimeout(() => {\n const selectingTree = this.treeNodeSelectionService.getTreeRoot(this.selectingElementsTreeData);\n this.selectedElementsChanged.emit(selectingTree);\n }, 0);\n }\n });\n }\n });\n }\n\n if (changes['project'] && this._selectedNodeId) {\n this.flatElementsService.getOneElementById(this._selectedNodeId).subscribe((e) => {\n if (e) {\n this.selectElementService.setClickElement(e);\n }\n });\n }\n\n if (changes['project']) {\n this.configurationTreeService.treeConfig$\n .pipe(\n take(1),\n map(({ isSelectionMode, initiallySelectedElements }) => ({\n isSelectionMode,\n initiallySelectedElements\n })),\n filter(({ isSelectionMode }) => !!isSelectionMode),\n tap(({ initiallySelectedElements }) => {\n if (initiallySelectedElements?.length) {\n this.initiallySelectedElements = initiallySelectedElements;\n }\n })\n )\n .subscribe(() => {\n this.formSelectingList();\n });\n }\n }\n\n ngOnDestroy(): void {\n this.$destroy.next(true);\n this.$destroy.complete();\n }\n\n private mouseOver(): void {\n if (!this.isListenKeyboard) {\n this.isListenKeyboard = true;\n this.avaTreeFilterInput?.nativeElement.focus();\n }\n }\n\n private mouseOut(): void {\n this.isListenKeyboard = false;\n }\n\n private handleGlobalKeyboardEvent(event: Event): void {\n this.ngZone.run(() => {\n const keyEvent = event as KeyboardEvent;\n if (!this.mouseAwareKeyboardControl || this.isListenKeyboard) {\n const element = this.preselectedElement || this.selectedElement;\n\n const { operation, nextElement } = this.keyboardOperationService.handleKeyboardEvent(keyEvent, element) || { nextElement: null };\n switch (operation) {\n case KeyboardOperationType.MoveSelectedPositionUp:\n this.showElement(nextElement, '.select');\n break;\n case KeyboardOperationType.MoveSelectedPositionDown:\n this.showElement(nextElement, '.select');\n break;\n case KeyboardOperationType.MoveChosenPositionDown:\n this.showElement(nextElement, nextElement?.id === this.selectedElement?.id ? '.select' : '.choose');\n break;\n case KeyboardOperationType.MoveChosenPositionUp:\n this.showElement(nextElement, nextElement?.id === this.selectedElement?.id ? '.select' : '.choose');\n break;\n default:\n break;\n }\n }\n });\n }\n\n private showElement(element: IElementDto | null, nameQuery: string): void {\n if (element) {\n if (this.modeView === ModeViewType.Tree) {\n this.expandParentGroups(element);\n }\n setTimeout(() => this.scrollLine(nameQuery), 0);\n }\n }\n\n private scrollLine(nameQuery: string): void {\n const parentRect = this.avaTreeWrapper?.nativeElement.getBoundingClientRect();\n const showedElement = this.avaTreeWrapper?.nativeElement.querySelector(nameQuery) as HTMLElement;\n\n if (!showedElement) {\n return;\n }\n\n const childRect = showedElement.getBoundingClientRect();\n if (\n childRect.bottom > parentRect.bottom ||\n childRect.top < parentRect.top ||\n (this.modeView === ModeViewType.Table && childRect.top < parentRect.top + 24)\n ) {\n showedElement?.scrollIntoView();\n this.avaTreeWrapper?.nativeElement.scrollTo({ left: 0 });\n if (this.modeView === ModeViewType.Table) {\n setTimeout(() => this.correctScrollTableLine(showedElement, parentRect), 0);\n }\n }\n }\n\n private correctScrollTableLine(showedElement: HTMLElement, parentRect: DOMRect): void {\n const childRect = showedElement.getBoundingClientRect();\n if (childRect.top < parentRect.top + 24) {\n this.avaTreeWrapper.nativeElement.scrollTop -= 24;\n }\n }\n\n expandParentGroups(element: IElementDto): void {\n this.expandParentGroupService.expandParentGroups(element, this.flatElements, this.expansionState);\n }\n\n onFilter(value: string): void {\n this.$filter.next(value);\n }\n\n changeAllElementsExpansionStatus(isExpanded: boolean): void {\n if (!isExpanded) {\n Object.keys(this.expansionState).forEach((id: string) => delete this.expansionState[id]);\n } else {\n this.flatElements?.forEach((item) => {\n if (item.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n this.expansionState[item.id] = true;\n }\n });\n }\n }\n\n private formSelectingList(): void {\n this.isEmiteSelectedElements = false;\n if (!this.initiallySelectedElements) {\n this.isEmiteSelectedElements = true;\n return;\n }\n\n this.treeNodeSelectionService.getFlatSelectedListId(this.initiallySelectedElements);\n this.treeNodeSelectionService.flatSelectedListId.forEach((id, index) => {\n this.treeNodeSelectionService.changeSelecting(true, id);\n if (index === this.treeNodeSelectionService.flatSelectedListId.length - 1) {\n this.isEmiteSelectedElements = true;\n }\n });\n }\n\n selectOrDeselectAll(value: boolean): void {\n this.treeNodeSelectionService.changeAll(value);\n }\n\n private getFilteredList(): void {\n if (this.flatElements?.length) {\n if (!this.filter) {\n this.filteredElementList = this.flatElements;\n } else {\n this.filteredElementList = this.flatElements.filter((item) => this.flatElementsService.checkFilterValue(item, this.filter));\n }\n }\n this.cdr.detectChanges();\n }\n\n private initializeEventListeners(): void {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.avaMainWrapper.nativeElement, 'mouseleave')\n .pipe(takeUntil(this.$destroy))\n .subscribe(() => {\n this.mouseOut();\n });\n\n fromEvent(this.avaMainWrapper.nativeElement, 'mouseenter')\n .pipe(takeUntil(this.$destroy))\n .subscribe(() => {\n this.mouseOver();\n });\n\n if (!this.isSelectionMode) {\n fromEvent(document, 'keydown')\n .pipe(\n takeUntil(this.$destroy),\n filter(() => !this.mouseAwareKeyboardControl || this.isListenKeyboard)\n )\n .subscribe((event: Event) => {\n this.handleGlobalKeyboardEvent(event);\n this.cdr.detectChanges();\n });\n }\n });\n }\n}\n","@if (textWords$ | async; as textWords) {\n <div\n class=\"main-wrapper\"\n #avaMainWrapper\n >\n <div\n class=\"control\"\n #control\n >\n <mat-form-field class=\"control-filter\">\n <mat-label>{{ textWords.textSearch }}</mat-label>\n <input\n matInput\n [ngModel]=\"filterInput\"\n (ngModelChange)=\"onFilter($event)\"\n #avaTreeFilterInput\n />\n </mat-form-field>\n @if (modeView === listModeViewType.Tree) {\n <ng-container>\n <button\n class=\"control-icon\"\n mat-icon-button\n color=\"primary\"\n (click)=\"changeAllElementsExpansionStatus(true)\"\n [matTooltip]=\"textWords.tooltipAllOpen || ''\"\n >\n <mat-icon class=\"layer-background\">layers</mat-icon>\n <mat-icon class=\"layer-icon\">add</mat-icon>\n </button>\n <button\n class=\"control-icon\"\n mat-icon-button\n color=\"primary\"\n (click)=\"changeAllElementsExpansionStatus(false)\"\n [matTooltip]=\"textWords.tooltipAllClose || ''\"\n >\n <mat-icon class=\"layer-background\">layers</mat-icon>\n <mat-icon class=\"layer-icon\">remove</mat-icon>\n </button>\n </ng-container>\n }\n @if (isSelectionMode$ | async) {\n <ng-container>\n <button\n mat-raised-button\n (click)=\"selectOrDeselectAll(true)\"\n [matTooltip]=\"textWords.tooltipAllAdd || ''\"\n class=\"control-button ava-tree-selection-all-btn\"\n >\n <mat-icon>add</mat-icon>\n <span>{{ textWords.textAll }}</span>\n </button>\n <button\n mat-raised-button\n (click)=\"selectOrDeselectAll(false)\"\n [matTooltip]=\"textWords.tooltipAllRemove || ''\"\n class=\"control-button ava-tree-selection-all-btn\"\n >\n <mat-icon>remove</mat-icon>\n <span>{{ textWords.textAll }}</span>\n </button>\n </ng-container>\n }\n </div>\n <div\n [style.height]=\"'calc(100% - ' + control.offsetHeight + 'px)'\"\n class=\"ava-tree-wrapper\"\n #avaTreeWrapper\n >\n @if (flatElements?.length) {\n <ng-container>\n @if (filteredElementList.length) {\n <ng-container>\n @if (modeView === listModeViewType.Tree && !avaTreeFilterInput.value) {\n <ava-tree-structure\n [serviceSpecification]=\"serviceSpecification\"\n [expansionState]=\"expansionState\"\n >\n </ava-tree-structure>\n }\n\n @if (modeView === listModeViewType.List || (modeView === listModeViewType.Tree && avaTreeFilterInput.value)) {\n <ava-list-structure [filteredElementList]=\"filteredElementList\"> </ava-list-structure>\n }\n @if (modeView === listModeViewType.Table) {\n <ava-table-structure [filteredElementList]=\"filteredElementList\"> </ava-table-structure>\n }\n </ng-container>\n } @else {\n <ng-container> {{ textWords.textNothingFiltered }}</ng-container>\n }\n </ng-container>\n } @else {\n <ng-container>\n {{ textWords.textNothing }}\n </ng-container>\n }\n </div>\n </div>\n}\n","import { ITextWordInvoice } from '../model';\n\nexport const DEFAULT_TEXT_WORD_INVOICE: ITextWordInvoice = {\n invoiceTitle: 'Invoice',\n invoiceBuyerTitle: 'Receiver',\n invoiceSellerTitle: 'Sender',\n vatId: 'VAT ID',\n detailsInvoiceNumber: 'Invoice Number',\n detailsInvoiceDate: 'Invoice Date',\n detailsPaymentDueDate: 'Due Date',\n detailsCurrencyCode: 'Currency',\n detailsPaymentTerms: 'Payment Terms',\n referencesTopic: 'References',\n referencesBuyerReference: 'Buyer Reference',\n referencesProjectReference: 'Project Reference',\n referencesContractReference: 'Contract Reference',\n referencesPurchaseOrderReference: 'Purchase Order Reference',\n referencesSalesOrderReference: 'Sales Order Reference',\n referencesReceivingAdviceReference: 'Receiving Advice Reference',\n referencesDispatchAdviceReference: 'Dispatch Advice Reference',\n referencesTenderOrLotReference: 'Tender or Lot Reference',\n referencesInvoicedObjectIdentifier: 'Invoiced Object Identifier',\n tableHeadDescription: 'Description',\n tableHeadQuantity: 'Quantity',\n tableHeadUnit: 'Unit',\n tableHeadNetPrice: 'Net Price',\n tableHeadNetAmount: 'Net Amount',\n totalsTopic: 'Totals',\n totalsTotalNet: 'Total Net',\n totalsTotalAllowances: 'Total Allowances',\n totalsTotalCharges: 'Total Charges',\n totalsTotalAfterDeductions: 'Total After Deductions',\n totalsTotalVatAmount: 'Total VAT Amount',\n totalsTotalGross: 'Total Gross',\n totalsAlreadyPaidTotal: 'Already Paid Total',\n totalsTotalToBePaid: 'Total to be Paid',\n instructionsTopic: 'Payment Instructions',\n instructionsAccountIdentifier: 'Account Identifier',\n instructionsAccountName: 'Account Name',\n instructionsServiceProviderIdentifier: 'Service Provider Identifier',\n notesTopic: 'Notes',\n attachmentsHeading: 'Attachments',\n attachmentsName: 'Name',\n attachmentsDescription: 'Description',\n attachmentsUrl: 'Url',\n attachmentsDataSize: 'Size',\n attachmentsMimeType: 'Mime Type',\n attachmentsFileName: 'File Name',\n attachmentsDownloadButton: 'Download',\n contactPersonName: 'Contact Person Name',\n contactPersonEmail: 'Contact Person Email',\n contactPersonPhone: 'Contact Person Phone',\n vat: 'VAT',\n taxRate: 'Tax Rate',\n deliveryInformationTitle: 'Delivery Information',\n deliverToName: 'Name',\n deliverToLocationIdentifier: 'Location Identifier',\n deliveryDate: 'Date',\n deliveryAddress: 'Address',\n taxesHeading: 'Taxes'\n};\n\nexport const germanTextsInvoice: ITextWordInvoice = {\n invoiceTitle: 'Rechnung',\n invoiceBuyerTitle: 'Empfänger',\n invoiceSellerTitle: 'Rechnungssteller',\n vatId: 'USt.-ID',\n detailsInvoiceNumber: 'Rechnungsnummer',\n detailsInvoiceDate: 'Rechnungsdatum',\n detailsPaymentDueDate: 'Fälligkeitsdatum',\n detailsCurrencyCode: 'Währung',\n detailsPaymentTerms: 'Zahlungsbedingungen',\n referencesTopic: 'Referenzen',\n referencesBuyerReference: 'Käuferreferenz',\n referencesProjectReference: 'Projektreferenz',\n referencesContractReference: 'Vertragsreferenz',\n referencesPurchaseOrderReference: 'Bestellreferenz',\n referencesSalesOrderReference: 'Auftragsreferenz',\n referencesReceivingAdviceReference: 'Empfangsbestätigungsreferenz',\n referencesDispatchAdviceReference: 'Lieferreferenz',\n referencesTenderOrLotReference: 'Ausschreibungs- oder Losreferenz',\n referencesInvoicedObjectIdentifier: 'Objektreferenz',\n tableHeadDescription: 'Beschreibung',\n tableHeadQuantity: 'Menge',\n tableHeadUnit: 'Einheit',\n tableHeadNetPrice: 'Nettopreis',\n tableHeadNetAmount: 'Nettomenge',\n totalsTopic: 'Gesamt',\n totalsTotalNet: 'Gesamt Netto',\n totalsTotalAllowances: 'Gesamt Rabatt',\n totalsTotalCharges: 'Gesamt Zuschlag',\n totalsTotalAfterDeductions: 'Summe nach Rabatten',\n totalsTotalVatAmount: 'Summe Umsatzsteuer',\n totalsTotalGross: 'Gesamt Brutto',\n totalsAlreadyPaidTotal: 'Bereits bezahlt',\n totalsTotalToBePaid: 'Gesamt zu zahlen',\n instructionsTopic: 'Zahlungsanweisungen',\n instructionsAccountIdentifier: 'Kontonummer',\n instructionsAccountName: 'Kontoname',\n instructionsServiceProviderIdentifier: 'Bank',\n notesTopic: 'Hinweise',\n attachmentsHeading: 'Anhänge',\n attachmentsName: 'Name',\n attachmentsDescription: 'Beschreibung',\n attachmentsUrl: 'Url',\n attachmentsDataSize: 'Größe',\n attachmentsMimeType: 'Typ',\n attachmentsFileName: 'Dateiname',\n attachmentsDownloadButton: 'Download',\n contactPersonName: 'Name der Kontaktperson',\n contactPersonEmail: 'E-Mail der Kontaktperson',\n contactPersonPhone: 'Kontaktperson Telefon',\n vat: 'MwSt.',\n taxRate: 'Steuersatz',\n deliveryInformationTitle: 'Lieferinformationen',\n deliverToName: 'Liefername',\n deliverToLocationIdentifier: 'Lieferort',\n deliveryDate: 'Lieferdatum',\n deliveryAddress: 'Lieferadresse',\n taxesHeading: 'Steuer'\n};\n","import { BehaviorSubject, Observable, distinctUntilChanged, map, skip, take } from 'rxjs';\n\nimport { DEFAULT_TEXT_WORD_INVOICE, germanTextsInvoice } from '../constants/defaultTextWordInvoice';\nimport { IConfigurationInvoice } from '../model/configInvoice.model';\nimport { ITextWordInvoice } from '../model/invoice-words.model';\n\nexport class ConfigurationInvoiceService {\n private _textWords: ITextWordInvoice | null = null;\n private _pdfViewEnabled = false;\n private _language: 'en' | 'de' = 'en';\n\n private invoiceConfigSource = new BehaviorSubject<IConfigurationInvoice>(this.getDefaultInvoiceConfiguration());\n public invoiceConfig$: Observable<IConfigurationInvoice> = this.invoiceConfigSource.asObservable();\n\n constructor() {\n this.getLanguageFromConfig()\n .pipe(skip(1), take(1))\n .subscribe((language) => {\n this._textWords = this.getDefaulTextWords(language);\n this.setInvoiceConfig({ textWords: this._textWords, ...this.getCurrentInvoiceConfig() });\n });\n }\n\n public setInvoiceConfig(value: IConfigurationInvoice): void {\n this.invoiceConfigSource.next(value);\n }\n\n public getCurrentInvoiceConfig(): IConfigurationInvoice {\n return this.invoiceConfigSource.getValue();\n }\n\n public getTextWordsFromConfig(): Observable<ITextWordInvoice | null> {\n return this.invoiceConfig$.pipe(\n map((config) => config?.textWords || null),\n map((textWords) => (textWords === null ? this._textWords : { ...this._textWords, ...textWords })),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getPdfViewEnabledFromConfig(): Observable<boolean> {\n return this.invoiceConfig$.pipe(\n map((config) => (config === null ? false : config.pdfViewEnabled || false)),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getLanguageFromConfig(): Observable<'en' | 'de'> {\n return this.invoiceConfig$.pipe(map((c) => c.language || 'en'));\n }\n\n private getDefaultInvoiceConfiguration(): IConfigurationInvoice {\n return {\n textWords: null,\n pdfViewEnabled: this._pdfViewEnabled,\n language: this._language\n };\n }\n\n getDefaulTextWords(language: 'en' | 'de'): ITextWordInvoice {\n return language === 'en' ? { ...DEFAULT_TEXT_WORD_INVOICE } : { ...germanTextsInvoice };\n }\n}\n","import { ProjectDto } from '../../ava-tree/model';\n\n//----------------------\n// <auto-generated>\n// Generated using the NSwag toolchain v14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\n// </auto-generated>\n//----------------------\n\n/* tslint:disable */\n/* eslint-disable */\n// ReSharper disable InconsistentNaming\n\n/** This class represents an invoice */\nexport interface Invoice {\n /** The number of the invoice */\n invoiceNumber?: string | undefined;\n /** The date of the invoice */\n invoiceDate?: Date | undefined;\n /** The type of the invoice */\n invoiceType?: InvoiceType | undefined;\n /** The three letter ISO currency code */\n currencyCode?: string | undefined;\n /** Until when the payment is due */\n paymentDueDate?: Date | undefined;\n /** An object holding reference used in this invoice */\n references?: References | undefined;\n /** A text description of payment terms, e.g. cash discounts or payment conditions */\n paymentTerms?: string | undefined;\n /** In case of partial or final invoices, it's possible to reference the previous invoice numbers */\n previousInvoices?: PreviousInvoice[] | undefined;\n /** Information about the buyer */\n buyer?: Organization | undefined;\n /** Information about the seller */\n seller?: Organization | undefined;\n /** A payee is someone who receives the payment that is different from the seller */\n payee?: Payee | undefined;\n /** If present, this is an unstructured text that can be used to give additional information\nabout the invoice. */\n invoiceNotes?: InvoiceNote[] | undefined;\n /** The period during which the services or goods were delivered */\n invoicePeriod?: InvoicePeriod | undefined;\n /** Information about the delivery\nBG-13 in XRechnung */\n deliveryInformation?: DeliveryInformation | undefined;\n /** Totals for the invoice */\n totals?: InvoiceTotals | undefined;\n /** Instructions how to perform the payment */\n paymentInstructions?: PaymentInstructions | undefined;\n /** Attached documents to the invoice */\n documents?: SupportingDocument[] | undefined;\n /** This is used to list VAT by category, e.g. for invoices where parts are in different VAT categories */\n vatBreakdown?: VatBreakdown[] | undefined;\n /** Allowances / deductions on the invoice */\n allowances?: InvoiceAllowance[] | undefined;\n /** Charges / additional costs on the invoice */\n charges?: InvoiceCharge[] | undefined;\n /** Single line items in the invoice */\n lineItems?: InvoiceLineItem[] | undefined;\n /** The source type from which the invoice was created */\n sourceType?: SourceType | undefined;\n}\n\n/** Type of the invoice */\nexport enum InvoiceType {\n PartialInvoice = 326,\n CommercialInvoice = 380,\n CreditNote = 381,\n CorrectedInvoice = 384,\n SelfBilledInvoice = 389,\n PartialConstructionInvoice = 875,\n PartialFinalConstructionInvoice = 876,\n FinalConstructionInvoice = 877\n}\n\n/** This class holds typical references used in an invoice */\nexport interface References {\n /** An internal reference used by the buyer, this can also be used as the\n'Leitweg-ID' in Germany\nBT-10 in XRechnung. */\n buyerReference?: string | undefined;\n /** Reference to a project\nBT-11 in XRechnung. */\n projectReference?: string | undefined;\n /** Reference to a contract\nBT-12 in XRechnung. */\n contractReference?: string | undefined;\n /** Reference to a purchase order created by the buyer\nBT-13 in XRechnung. */\n purchaseOrderReference?: string | undefined;\n /** Reference to a sales order created by the seller\nBT-14 in XRechnung. */\n salesOrderReference?: string | undefined;\n /** Reference to a delivery note\nBT-15 in XRechnung. */\n receivingAdviceReference?: string | undefined;\n /** Reference to a dispatch advice\nBT-16 in XRechnung. */\n dispatchAdviceReference?: string | undefined;\n /** Reference to a tender or lot\nBT-17 in XRechnung. */\n tenderOrLotReference?: string | undefined;\n /** Reference to a custom item, e.g. a phone number, person,\ncontract or anything that would identify the invoice in the buyer's system\nBT-18 in XRechnung. */\n invoicedObjectIdentifier?: string | undefined;\n /** This is a reference for accounting, like a cost center or similar. In German,\nthis would be a \"Kostenstelle\".\nBT-19 in XRechnung. */\n accountingReference?: string | undefined;\n}\n\n/** References to previous invoices */\nexport interface PreviousInvoice {\n /** The date of the previous invoice */\n invoiceDate?: Date | undefined;\n /** The number of the previous invoice */\n invoiceNumber?: string | undefined;\n}\n\n/** Represents an organization, e.g. a buyer or a seller */\nexport interface Organization {\n /** The identifier of the organization */\n identifier?: string | undefined;\n /** The name of the organization */\n name?: string | undefined;\n /** A registration number, e.g. a Handelsregisternummer in Germany */\n registrationNumber?: string | undefined;\n /** The VAT ID for the organization */\n vatId?: string | undefined;\n /** The tax ID for the organization */\n taxId?: string | undefined;\n /** An email address for the organization */\n email?: string | undefined;\n /** The name of a contact person */\n contactPersonName?: string | undefined;\n /** The phone of a contact person */\n contactPersonPhone?: string | undefined;\n /** The email of a contact person */\n contactPersonEmail?: string | undefined;\n /** The address of the organization */\n address?: string | undefined;\n /** The city of the organization */\n city?: string | undefined;\n /** The zip code of the organization */\n zipCode?: string | undefined;\n /** The ISO 3166-1 2 letter country code */\n countryCode?: string | undefined;\n /** The state of the organization, e.g. a federal state in Germany */\n state?: string | undefined;\n /** This provides some additional legal information.\nBT-33 in XRechnung, and this is only used for the seller. */\n additionalLegalInformation?: string | undefined;\n}\n\n/** Represents a payee, meaning someone that receives the payment */\nexport interface Payee {\n /** The name of the payee */\n name?: string | undefined;\n /** The identifier of the payee */\n identifier?: string | undefined;\n /** A registered identifier for the payee, e.g. a VAT ID\nor Tax ID */\n legalRegistrationIdentifier?: string | undefined;\n}\n\n/** Represents a note / text in an invoice */\nexport interface InvoiceNote {\n /** Short summary / heading. Should be a text code from this list:\nhttps://unece.org/fileadmin/DAM/trade/untdid/d16b/tred/tred4451.htm */\n shortText?: string | undefined;\n /** Explanation of this note */\n longText?: string | undefined;\n}\n\n/** Represents an invoice period with start and end dates */\nexport interface InvoicePeriod {\n /** The start date */\n start?: Date | undefined;\n /** The end date */\n end?: Date | undefined;\n}\n\n/** Information about the delivery */\nexport interface DeliveryInformation {\n /** BT-70 in XRechnung */\n deliverToName?: string | undefined;\n /** BT-71 in XRechnung */\n deliverToLocationIdentifier?: string | undefined;\n /** BT-72 in XRechnung */\n deliveryDate?: Date | undefined;\n /** BG-15 in XRechnung */\n deliveryAddress?: DeliveryAddress | undefined;\n}\n\n/** Address for deliveries */\nexport interface DeliveryAddress {\n /** The address. BT-75, BT-76 and BT-165 in XRechnung. */\n address?: string | undefined;\n /** The city. BT-77 in XRechnung. */\n city?: string | undefined;\n /** The zip code. BT-78 in XRechnung. */\n zipCode?: string | undefined;\n /** The ISO 3166-1 2 letter country code. BT-80 in XRechnung. */\n countryCode?: string | undefined;\n}\n\n/** Totals for the invoice */\nexport interface InvoiceTotals {\n /** Sum of all invoice items in net.\nBT-106 in XRechnung. */\n totalNet?: number | undefined;\n /** This is the sum of all allowances (e.g. deductions or withheld tax) in the invoice\nBT-107 in XRechnung. */\n totalAllowances?: number | undefined;\n /** This is the sum of all charges in the invoice, except VAT. For example, late\nfees or surcharges.\nBT-108 in XRechnung. */\n totalCharges?: number | undefined;\n /** This is the total net value of the invoice after applied allowances and charges,\nmeaning the actual net sum to be paid.\nBT-109 in XRechnung. */\n totalAfterDeductions?: number | undefined;\n /** The total amount of VAT in the invoice.\nBT-110 in XRechnung. */\n totalVatAmount?: number | undefined;\n /** The total gross amount of the invoice, including all taxes and deductions.\nBT-112 in XRechnung. */\n totalGross?: number | undefined;\n /** The total amount that has already been paid for this invoice, e.g. used when\nprevious invoice sums are included here that have already been paid.\nBT-113 in XRechnung. */\n alreadyPaidTotal?: number | undefined;\n /** If this is given, this specifies if any rounding amount is applied to the invoice,\nbefore calculating the TotalToBePaid value.\nBT-114 in XRechnung. */\n payableRoundingAmount?: number | undefined;\n /** The sum that needs to be paid for this invoice. This is the total gross amount\nminus the already paid amount.\nBT-115 in XRechnung. */\n totalToBePaid?: number | undefined;\n}\n\n/** Instructions how payment for an invoice should be provided. */\nexport interface PaymentInstructions {\n /** Additional text to describe the payment instructions. */\n description?: string | undefined;\n /** This should be a code according to UN/ECE 4461\nto identify the type of payment. For example, code \"58\" means SEPA Credit Transfer,\nand code \"30\" means non-SEPA Credit Transfer.\nSee this list: https://unece.org/fileadmin/DAM/trade/edifact/code/4461cl.htm */\n paymentTypeCode?: string | undefined;\n /** If a SEPA direct debit payment mean is used, then this reference should be provided.\nIt's the creditor identifier in SEPA, in German \"Gläubiger-Identifikationsnummer\".\nField BT-90 in XRechnung. */\n paymentCreditorIdentifier?: string | undefined;\n /** A list of payment means that can be used to pay the invoice. */\n paymentMeans?: PaymentMeans[] | undefined;\n}\n\n/** Represents a payment means for an invoice */\nexport interface PaymentMeans {\n /** This is typically the IBAN or account number\nBT-84 in XRechnung. */\n accountIdentifier?: string | undefined;\n /** The name for the account, typically the name of the owner for\na bank account.\nBT-85 in XRechnung. */\n accountName?: string | undefined;\n /** This can be the BIC\nBT-86 in XRechnung. */\n serviceProviderIdentifier?: string | undefined;\n /** If used, this is the mandate id for direct debit under which\nthe direct debit will be performed\nBT-89 in XRechnung. */\n directDebitMandateId?: string | undefined;\n /** If used, this is the IBAN for direct debit\nBT-91 in XRechnung. */\n directDebitIban?: string | undefined;\n /** The payment id, e.g. a reference number for the payment. In German,\nthis would be called \"Verwendungszweck\".\nBT-83 in XRechnung. */\n paymentId?: string | undefined;\n}\n\n/** Represents a document / attachment that is included with the invoice */\nexport interface SupportingDocument {\n /** This is typically an id or a name */\n documentReference?: string | undefined;\n /** A description of the document */\n description?: string | undefined;\n /** A link to the document in case this is an external reference */\n externalDocumentUrl?: string | undefined;\n /** The document in base64 encoded form as binary data */\n documentBase64?: string | undefined;\n /** This should be present if DocumentBase64 is set. */\n fileName?: string | undefined;\n /** The type of the document */\n documentMimeType?: AttachmentMimeType | undefined;\n}\n\n/** Describes a mime type of a document */\nexport enum AttachmentMimeType {\n Unknown = 0,\n Pdf = 1,\n Png = 2,\n Jpeg = 3,\n Csv = 4,\n Excel = 5,\n OpenOfficeSpreadsheet = 6\n}\n\n/** Describes the VAT breakdown for an invoice in a single VAT category */\nexport interface VatBreakdown {\n /** The total net amount of this VAT category */\n netTaxableAmount?: number | undefined;\n /** The total VAT */\n vatAmount?: number | undefined;\n /** The category of the VAT */\n vatCategory?: VatCategory | undefined;\n /** The actual tax rate as a decimal value,\ne.g. 19% would be 0.19 */\n taxRate?: number | undefined;\n /** If the VAT is exempt, there should be a description here.\nFor example, in reverse charge scenarios, this text\nshould contain a reference to \"Reverse charge according to ...\". */\n vatExemptionReasonText?: string | undefined;\n /** A code from the VAT exemption reason code list(VATEX)“ */\n vatExemptionReasonCode?: string | undefined;\n}\n\n/** The category used in a VatBreakdown\"/> */\nexport enum VatCategory {\n Unknown = 0,\n StandardRate = 1,\n ZeroRatedGoods = 2,\n ExemptFromTax = 3,\n VatReverseCharge = 4,\n VatExemptReverseCharge = 5,\n FreeExportItem = 6,\n ServicesOutsideScopeOfTaxation = 7,\n CanaryIslandsGeneralIndirectTax = 8,\n TaxInCeutaAndMelilla = 9\n}\n\n/** This describes an allowance in an invoice, which is a deduction from the total amount */\nexport interface InvoiceAllowance {\n /** The net amount of the allowance */\n netAmount?: number | undefined;\n /** If this is a relative / percentage allowance, this should be set\nand give the base amount that is being used for the calculation */\n relativeAllowanceBaseAmount?: number | undefined;\n /** If this is a relative / percentage allowance, this should be set\nand be given in decimal representation, meaning 19% would be 0.19 */\n relativeAllowancePercentage?: number | undefined;\n /** The VAT category for the allowance */\n vatCategory?: VatCategory | undefined;\n /** The actual tax rate as a decimal value,\nmeaning 19% would be 0.19 */\n vatRate?: number | undefined;\n /** A description of the allowance. This should not be set it ReasonCode\nis provided, otherwise this one takes precedence. */\n reason?: string | undefined;\n /** A reason code for the allowance according to UNTDID 5189.\nSee this list: https://unece.org/fileadmin/DAM/trade/untdid/d16b/tred/tred5189.htm */\n reasonCode?: string | undefined;\n}\n\n/** This describes an charge in an invoice, which is a surcharge to the total amount */\nexport interface InvoiceCharge {\n /** The net amount of the charge */\n netAmount?: number | undefined;\n /** If this is a relative / percentage charge, this should be set\nand give the base amount that is being used for the calculation */\n relativeChargeBaseAmount?: number | undefined;\n /** If this is a relative / percentage charge, this should be set\nand be given in decimal representation, meaning 19% would be 0.19 */\n relativeChargePercentage?: number | undefined;\n /** The VAT category for the charge */\n vatCategory?: VatCategory | undefined;\n /** The actual tax rate as a decimal value,\nmeaning 19% would be 0.19 */\n vatRate?: number | undefined;\n /** A description of the charge. This should not be set it ReasonCode\nis provided, otherwise this one takes precedence. */\n reason?: string | undefined;\n /** A reason code for the charge according to UNTDID 7161.\nSee this list: https://unece.org/fileadmin/DAM/trade/untdid/d16b/tred/tred5189.htm */\n reasonCode?: string | undefined;\n}\n\n/** Represents a single invoice line item */\nexport interface InvoiceLineItem {\n /** An unique identifier for the line item */\n identifier?: string | undefined;\n /** An unstructured note to classify line items */\n note?: string | undefined;\n /** A seller-defined object identifier for this line item,\nmeaning an identifier for the actual line. This could be\na numbering sequence or a reference to a product. */\n objectIdentifier?: string | undefined;\n /** The actual invoiced quantity of the line item */\n quantity?: number | undefined;\n /** A code for the unit of the quantity. This should be a code as defined\nin UN/ECE Recommendation No. 20 „Codes for Units of Measure Used in \nInternational Trade“ und UN/ECE Recommendation No 21 „Codes for Passengers,\nTypes of Cargo, Packages and Packaging Materials(with Complementary Codes for Package Names) */\n unitCode?: string | undefined;\n /** The net amount for this line item. This is the total price for positions */\n netAmount?: number | undefined;\n /** A reference to an item in the buyers purachase order */\n purchaseOrderReference?: string | undefined;\n /** Information about the invoice period for this line item. */\n lineItemPeriod?: InvoicePeriod | undefined;\n /** Allowances specific to this line item */\n allowances?: LineItemAllowance[] | undefined;\n /** charges specific to this line item */\n charges?: LineItemCharge[] | undefined;\n /** Price details for this line item. */\n priceDetails?: LineItemPriceDetail | undefined;\n /** VAT information for this line item */\n vatInformation?: LineItemVatInformation[] | undefined;\n /** Information about this line item */\n itemInformation?: LineItemInformation | undefined;\n /** Line items can be nested, in which case this property holds the sub items */\n subItems?: InvoiceLineItem[] | undefined;\n}\n\n/** Allowance for a single line item */\nexport interface LineItemAllowance {\n /** The net amount of the allowance */\n netAmount?: number | undefined;\n /** If this is a relative / percentage allowance, this should be set\nand give the base amount that is being used for the calculation */\n relativeAllowanceBaseAmount?: number | undefined;\n /** If this is a relative / percentage allowance, this should be set\nand be given in decimal representation, meaning 19% would be 0.19 */\n relativeAllowancePercentage?: number | undefined;\n /** A description of the allowance. */\n reason?: string | undefined;\n /** A reason code for the allowance according to UNTDID 5189. */\n reasonCode?: string | undefined;\n}\n\n/** Charge for a single line item */\nexport interface LineItemCharge {\n /** The net amount of the charge */\n netAmount?: number | undefined;\n /** If this is a relative / percentage charge, this should be set\nand give the base amount that is being used for the calculation */\n relativeChargeBaseAmount?: number | undefined;\n /** If this is a relative / percentage charge, this should be set\nand be given in decimal representation, meaning 19% would be 0.19 */\n relativeChargePercentage?: number | undefined;\n /** A description of the charge. */\n reason?: string | undefined;\n /** A reason code for the charge according to UNTDID 7161. */\n reasonCode?: string | undefined;\n}\n\n/** Price details about a line item */\nexport interface LineItemPriceDetail {\n /** The net price of this line item. This is the unit price */\n netPrice?: number | undefined;\n /** A discount for this line item, given as an absolute value. It is essentially the difference between NetPrice (or the list price)\nand the actual invoiced price GrossPrice. */\n absoluteDiscountPerItem?: number | undefined;\n /** The gross price of this line item, meaning the price without taxes\nthat will be invoiced */\n grossPrice?: number | undefined;\n /** The quantity for which this price is valid. In combination with the NetPrice,\nyou basically specify the denominator of the unit price for a line item. */\n baseQuantity?: number | undefined;\n /** A code representing the unit for the base quantity */\n baseQuantityUnitCode?: string | undefined;\n}\n\n/** VAT information for a single line item */\nexport interface LineItemVatInformation {\n /** The VAT category for the charge */\n vatCategory?: VatCategory | undefined;\n /** The actual tax rate as a decimal value,\nmeaning 19% would be 0.19 */\n vatRate?: number | undefined;\n}\n\n/** Information about a single line item */\nexport interface LineItemInformation {\n /** A name for the line item */\n name?: string | undefined;\n /** A description for the line item */\n description?: string | undefined;\n /** An identifier assigned by the seller, e.g. an internal article number */\n sellerIdentifier?: string | undefined;\n /** An identifier assigned by the buyer, e.g. an internal article number */\n buyerIdentifier?: string | undefined;\n /** A standard identifier for the line item, e.g. an EAN or a GTIN */\n standardIdentifier?: string | undefined;\n /** If used together with StandardIdentifier, this is the scheme identifier\nfor which standard is used. */\n standardSchemeId?: string | undefined;\n /** A list of classification identifiers for the line item */\n classificationIdentifiers?: string[] | undefined;\n /** The origin country code according to ISO 3166-1 in 2 letter format */\n countryOfOrigin?: string | undefined;\n /** Optional additional attributes for this line item */\n attributes?: LineItemAttribute[] | undefined;\n}\n\n/** A key-value pair for additional information */\nexport interface LineItemAttribute {\n /** The key / name of the attribute */\n name?: string | undefined;\n /** The value of the attribute */\n value?: string | undefined;\n}\n\n/** This enum represents the source of an invoice, e.g. from which format it was imported */\nexport enum SourceType {\n Self = 0,\n Ubl = 1,\n Cii = 2\n}\n\n/** This is a wrapper class that maps Dangl.AVA projects along with additional required information to create invoices */\nexport interface AvaProjectWrapper {\n /** The Dangl.AVA.Project from which to convert */\n project?: ProjectDto | undefined;\n /** The number of the invoice */\n invoiceNumber?: string | undefined;\n /** Attached documents to the invoice */\n documents?: SupportingDocument[] | undefined;\n /** The period during which the services or goods were delivered */\n invoicePeriod?: InvoicePeriod | undefined;\n /** Instructions how to perform the payment */\n paymentInstructions?: PaymentInstructions | undefined;\n /** The type of the invoice */\n invoiceType?: InvoiceType | undefined;\n /** If this is set to true, the invoice will be marked as a reverse charge invoice\nin all VAT rates. You still need to ensure that the actual tax rates are set\nto zero in all elements */\n isEuReverseChargeInvoice?: boolean | undefined;\n /** Until when the payment is due */\n paymentDueDate?: Date | undefined;\n /** A text description of payment terms, e.g. cash discounts or payment conditions */\n paymentTerms?: string | undefined;\n /** In case of partial of final invoices, it's possible to reference the previous invoice numbers */\n previousInvoices?: PreviousInvoice[] | undefined;\n /** If parts of this invoice (or of previous invoices) have already been paid,\nthen this property can be used to specify that some parts of the invoice\nare already paid and this will be deducted from the to be paid amount. */\n alreadyPaidTotalGross?: number | undefined;\n /** An object holding reference used in this invoice */\n references?: References | undefined;\n /** Optional document level allowances. For example, those can be used to supply\nglobal discounts e.g. for security deposits. When using this property, please\npay attention that a deduction factor on the exported ServiceSpecification\nwill also be exported as an allowance, in this case the total price of the\ninvoice might be different from the total price of the ServiceSpecification. */\n allowances?: InvoiceAllowance[] | undefined;\n /** Optional document level charges, e.g. for shipping or handling. When using this property,\nplease pay attention that the charges given here will be applied to the already calculated\ntotal price of the ServiceSpecification, in this case the total price of the invoice\nmight be different from the total price of the ServiceSpecification. */\n charges?: InvoiceCharge[] | undefined;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { AttachmentMimeType } from '../model';\n\n@Pipe({\n name: 'invoiceAttachmentMimeType',\n standalone: true\n})\nexport class InvoiceAttachmentMimeTypePipe implements PipeTransform {\n transform(attachmentMimeType: AttachmentMimeType): string {\n switch (attachmentMimeType) {\n case AttachmentMimeType.Pdf:\n return 'PDF';\n case AttachmentMimeType.Png:\n return 'PNG';\n case AttachmentMimeType.Jpeg:\n return 'JPEG';\n case AttachmentMimeType.Csv:\n return 'CSV';\n case AttachmentMimeType.Excel:\n return 'Excel';\n case AttachmentMimeType.OpenOfficeSpreadsheet:\n return 'Open Office Spreadsheet';\n\n case AttachmentMimeType.Unknown:\n default:\n return 'Unknown';\n }\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, DestroyRef, Input, OnInit, ViewChild, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule, MatExpansionPanel } from '@angular/material/expansion';\n\nimport { Observable } from 'rxjs';\n\nimport { SupportingDocument } from '../../model/invoice-models';\nimport { ITextWordInvoice } from '../../model/invoice-words.model';\nimport { InvoiceAttachmentMimeTypePipe } from '../../pipes/invoice-attachment-mime-type.pipe';\nimport { ConfigurationInvoiceService } from '../../services/configuration-invoice.service';\n\n@Component({\n selector: 'ava-invoice-documents',\n imports: [MatExpansionModule, MatButtonModule, InvoiceAttachmentMimeTypePipe, AsyncPipe],\n templateUrl: './invoice-documents.component.html',\n styleUrl: './invoice-documents.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class InvoiceDocumentsComponent implements OnInit, AfterViewInit {\n @Input() documents: SupportingDocument[] = [];\n\n @ViewChild('documentsPanel') documentsPanel: MatExpansionPanel | null = null;\n\n private destroyRef = inject(DestroyRef);\n\n readonly textWords$: Observable<ITextWordInvoice | null> = this.configurationInvoiceService.getTextWordsFromConfig();\n public pdfViewEnabled = false;\n\n constructor(private configurationInvoiceService: ConfigurationInvoiceService) {}\n\n ngOnInit(): void {\n this.configurationInvoiceService\n .getPdfViewEnabledFromConfig()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((pdfViewEnabled) => {\n this.pdfViewEnabled = pdfViewEnabled;\n });\n }\n\n ngAfterViewInit(): void {\n if (this.documentsPanel && this.pdfViewEnabled) {\n // In a static PDF view, we always want to open the documents panel\n this.documentsPanel.open();\n }\n }\n\n public download(documentValue: SupportingDocument): void {\n if (documentValue.documentBase64) {\n this.downloadAny(documentValue);\n } else {\n this.downloadLink(documentValue);\n }\n }\n\n private downloadAny(documentValue: SupportingDocument): void {\n if (documentValue.documentBase64) {\n const byteCharacters = atob(documentValue.documentBase64);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: 'application/octet-stream' });\n this.saveAs(blob, documentValue.fileName as string);\n }\n }\n\n private async downloadLink(documentValue: SupportingDocument): Promise<void> {\n try {\n const response = await fetch(documentValue.externalDocumentUrl as string);\n const blob = await response.blob();\n this.saveAs(blob, documentValue.fileName as string);\n } catch (error) {\n console.error(error);\n }\n }\n\n private saveAs(blob: Blob, fileName: string): void {\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n }\n}\n","@if (textWords$ | async; as textWords) {\n <mat-accordion>\n <mat-expansion-panel\n [hideToggle]=\"pdfViewEnabled\"\n #documentsPanel\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{ textWords.attachmentsHeading }}\n </mat-panel-title>\n </mat-expansion-panel-header>\n @for (document of documents; track document.documentReference) {\n <div class=\"document\">\n @if (document.documentReference) {\n <div>\n <strong>{{ textWords.attachmentsName }}: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>{{ textWords.attachmentsDescription }}: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>{{ textWords.attachmentsUrl }}: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>{{ textWords.attachmentsDataSize }}: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>{{ textWords.attachmentsMimeType }}: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>{{ textWords.attachmentsFileName }}: </strong>\n <span>{{ document.fileName }}</span>\n </div>\n }\n @if (!pdfViewEnabled) {\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"download(document)\"\n [disabled]=\"!document.externalDocumentUrl && !document.documentBase64\"\n >\n {{ textWords.attachmentsDownloadButton }}\n </button>\n }\n </div>\n }\n </mat-expansion-panel>\n </mat-accordion>\n}\n","import { AsyncPipe, CurrencyPipe, DatePipe, PercentPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, input } from '@angular/core';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { Observable } from 'rxjs';\n\nimport { IConfigurationInvoice, ITextWordInvoice } from '../../model';\nimport { Invoice } from '../../model';\nimport { ConfigurationInvoiceService } from '../../services/configuration-invoice.service';\n\nimport { InvoiceDocumentsComponent } from '../invoice-documents/invoice-documents.component';\n\n@Component({\n selector: 'ava-invoice-display',\n imports: [CurrencyPipe, DatePipe, PercentPipe, AsyncPipe, MatDividerModule, InvoiceDocumentsComponent],\n templateUrl: './invoice-display.component.html',\n styleUrl: './invoice-display.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationInvoiceService]\n})\nexport class InvoiceDisplayComponent {\n // TODO remove type any after TODO under will be resolved\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n invoice: any = input.required<Invoice>();\n\n readonly textWords$: Observable<ITextWordInvoice | null> = this.configurationInvoiceService.getTextWordsFromConfig();\n\n /**\n * You can supply a map of strings to be used for the text in the tree. This allows you to translate\n * the text in the tree to other languages.\n * {\n * invoiceTitle: string;\n * vatId: string;\n * detailsInvoiceNumber: string;\n * detailsInvoiceDate: string;\n * detailsPaymentDueDate: string;\n * detailsCurrencyCode: string;\n * detailsPaymentTerms: string;\n * referencesTopic: string;\n * referencesBuyerReference: string;\n * referencesProjectReference: string;\n * referencesContractReference: string;\n * referencesPurchaseOrderReference: string;\n * referencesSalesOrderReference: string;\n * referencesReceivingAdviceReference: string;\n * referencesDispatchAdviceReference: string;\n * referencesTenderOrLotReference: string;\n * referencesInvoicedObjectIdentifier: string;\n * tableHeadDescription: string;\n * tableHeadQuantity: string;\n * tableHeadUnit: string;\n * tableHeadNetPrice: string;\n * tableHeadNetAmount: string;\n * totalsTopic: string;\n * totalsTotalNet: string;\n * totalsTotalAllowances: string;\n * totalsTotalCharges: string;\n * totalsTotalAfterDeductions: string;\n * totalsTotalVatAmount: string;\n * totalsTotalGross: string;\n * totalsAlreadyPaidTotal: string;\n * totalsTotalToBePaid: string;\n * instructionsTopic: string;\n * instructionsAccountIdentifier: string;\n * instructionsAccountName: string;\n * instructionsServiceProviderIdentifier: string;\n * notesTopic: string;\n * attachmentsHeading: string;\n * attachmentsName: string;\n * attachmentsDescription: string;\n * attachmentsUrl: string;\n * attachmentsDataSize: string;\n * attachmentsMimeType: string;\n * attachmentsFileName: string;\n * attachmentsDownloadButton: string;\n *\n * }\n */\n\n @Input() set config(configObject: IConfigurationInvoice) {\n if (this.configurationInvoiceService.getCurrentInvoiceConfig()) {\n const config = { ...this.configurationInvoiceService.getCurrentInvoiceConfig(), ...configObject };\n this.configurationInvoiceService.setInvoiceConfig(config);\n }\n }\n\n constructor(private configurationInvoiceService: ConfigurationInvoiceService) {\n /**TODO: For setting invoice instead:\n * <ava-invoice-display id=\"invoice\"></ava-invoice-display>\n * invoice = document.getElementById('invoice');\n * invoice.invoice = INVOICE;\n * we should pass value to global window variable\n * window['InvoiceGlobalVariable'] = INVOICE;\n * Temporary solution until the problem of setting the value for InputSignal is solved. See this PR https://github.com/angular/angular/pull/55067\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((window as any)['InvoiceGlobalVariable']) {\n this.invoice = () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (window as any)['InvoiceGlobalVariable'];\n };\n }\n }\n}\n","@if (textWords$ | async; as textWords) {\n <div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\n <header class=\"invoice-header\">\n <div class=\"buyer-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceBuyerTitle }}</h2>\n <p>\n <strong>{{ invoice().buyer?.name }}</strong>\n </p>\n <p>{{ invoice().buyer?.address }}</p>\n <p>{{ invoice().buyer?.city }}, {{ invoice().buyer?.zipCode }}</p>\n <p>{{ invoice().buyer?.countryCode }}</p>\n @if (invoice().buyer?.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <span>{{ invoice().buyer?.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (invoice().buyer?.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <span>{{ invoice().buyer?.contactPersonName }}</span>\n </p>\n }\n @if (invoice().buyer?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <span>{{ invoice().buyer?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice().buyer?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <span>{{ invoice().buyer?.contactPersonEmail }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n <h2 [class.header]=\"textWords.invoiceBuyerTitle.trim() || textWords.invoiceSellerTitle.trim()\"></h2>\n @if (invoice().invoiceNumber) {\n <p>\n <strong>{{ textWords.detailsInvoiceNumber }}: </strong>\n <span>{{ invoice().invoiceNumber }}</span>\n </p>\n }\n @if (invoice().invoiceDate) {\n <p>\n <strong>{{ textWords.detailsInvoiceDate }}: </strong>\n <span>{{ invoice().invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().paymentDueDate) {\n <p>\n <strong>{{ textWords.detailsPaymentDueDate }}: </strong>\n <span>{{ invoice().paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().currencyCode) {\n <p>\n <strong>{{ textWords.detailsCurrencyCode }}: </strong>\n <span>{{ invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().paymentTerms) {\n <p>\n <strong>{{ textWords.detailsPaymentTerms }}: </strong>\n <span>{{ invoice().paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"seller-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceSellerTitle }}</h2>\n <p>\n <strong>{{ invoice().seller?.name }}</strong>\n </p>\n <p>{{ invoice().seller?.address }}</p>\n <p>{{ invoice().seller?.city }}, {{ invoice().seller?.zipCode }}</p>\n <p>{{ invoice().seller?.countryCode }}</p>\n @if (invoice().seller?.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <span>{{ invoice().seller?.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (invoice().seller?.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <span>{{ invoice().seller?.contactPersonName }}</span>\n </p>\n }\n @if (invoice().seller?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <span>{{ invoice().seller?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice().seller?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <span>{{ invoice().seller?.contactPersonEmail }}</span>\n </p>\n }\n </div>\n </header>\n <mat-divider></mat-divider>\n <div class=\"invoice-info\">\n <section class=\"invoice-references\">\n @if (textWords.referencesTopic) {\n <h2 class=\"info-title\">{{ textWords.referencesTopic }}</h2>\n }\n @if (invoice().references?.buyerReference) {\n <p>\n <strong>{{ textWords.referencesBuyerReference }}: </strong>\n <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords.referencesProjectReference }}: </strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords.referencesContractReference }}: </strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords.referencesPurchaseOrderReference }}: </strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords.referencesSalesOrderReference }}: </strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords.referencesReceivingAdviceReference }}: </strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords.referencesDispatchAdviceReference }}: </strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords.referencesTenderOrLotReference }}: </strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords.referencesInvoicedObjectIdentifier }}: </strong>\n <span>{{ invoice().references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n @if (invoice().deliveryInformation) {\n <section class=\"invoice-delivery\">\n <h2 class=\"info-title\">{{ textWords.deliveryInformationTitle }}</h2>\n\n @if (invoice().deliveryInformation?.deliverToName) {\n <p>\n <strong>{{ textWords.deliverToName }}: </strong>\n <span>{{ invoice().deliveryInformation?.deliverToName }}</span>\n </p>\n }\n @if (invoice().deliveryInformation?.deliverToLocationIdentifier) {\n <p>\n <strong>{{ textWords.deliverToLocationIdentifier }}: </strong>\n <span>{{ invoice().deliveryInformation?.deliverToLocationIdentifier }}</span>\n </p>\n }\n @if (invoice().deliveryInformation?.deliveryDate) {\n <p>\n <strong>{{ textWords.deliveryDate }}: </strong>\n <span>{{ invoice().deliveryInformation?.deliveryDate | date: 'shortDate' }}</span>\n </p>\n }\n @if (invoice().deliveryInformation?.deliveryAddress) {\n <p>\n <strong>{{ textWords.deliveryAddress }}: </strong>\n <span>\n @if (invoice().deliveryInformation?.deliveryAddress?.address) {\n <p>{{ invoice().deliveryInformation?.deliveryAddress?.address }}</p>\n }\n @if (invoice().deliveryInformation?.deliveryAddress?.city) {\n <span>{{ invoice().deliveryInformation?.deliveryAddress?.city }},</span>\n }\n @if (invoice().deliveryInformation?.deliveryAddress?.zipCode) {\n <span>{{ invoice().deliveryInformation?.deliveryAddress?.zipCode }}</span>\n }\n @if (invoice().deliveryInformation?.deliveryAddress?.countryCode) {\n <p>{{ invoice().deliveryInformation?.deliveryAddress?.countryCode }}</p>\n }\n </span>\n </p>\n }\n </section>\n }\n </div>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords.tableHeadDescription }}</th>\n <th>{{ textWords.tableHeadQuantity }}</th>\n <th>{{ textWords.tableHeadUnit }}</th>\n <th>{{ textWords.tableHeadNetPrice }}</th>\n <th>{{ textWords.tableHeadNetAmount }}</th>\n <th>{{ textWords.vat }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice().lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td class=\"currency-table-cell\">{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td class=\"currency-table-cell\">{{ item.netAmount | currency: invoice().currencyCode }}</td>\n <td class=\"currency-table-cell\">{{ item.vatInformation[0]?.vatRate | percent: '1.0-2' }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"invoice-totals\">\n <h2 class=\"info-title\">{{ textWords.totalsTopic }}</h2>\n\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\n <span>{{ invoice().totals?.totalNet | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAllowances) {\n <p>\n <strong>{{ textWords.totalsTotalAllowances }}: </strong>\n <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\n <span> {{ invoice().totals?.totalCharges | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords.totalsTotalAfterDeductions }}: </strong>\n <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\n <span>{{ invoice().totals?.totalVatAmount | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalGross) {\n <p>\n <strong>{{ textWords.totalsTotalGross }}: </strong>\n <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\n <span>{{ invoice().totals?.alreadyPaidTotal | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords.totalsTotalToBePaid }}: </strong>\n <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\n <section class=\"taxes\">\n <h2 class=\"info-title\">{{ textWords.taxesHeading }}</h2>\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th>{{ textWords.vat }}</th>\n <th>{{ textWords.totalsTotalNet }}</th>\n <th>{{ textWords.totalsTotalVatAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (tax of invoice().vatBreakdown; track tax.taxRate) {\n <tr>\n <td class=\"currency-table-cell\">\n @if (tax.taxRate) {\n <span>{{ tax.taxRate | percent: '1.0-2' }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.netTaxableAmount) {\n <span>{{ tax.netTaxableAmount | currency: invoice().currencyCode }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.vatAmount) {\n <span>{{ tax.vatAmount | currency: invoice().currencyCode }}</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </section>\n\n <section class=\"payment-instructions\">\n <h2 class=\"info-title\">{{ textWords.instructionsTopic }}</h2>\n @if (invoice().paymentInstructions?.description) {\n <p>{{ invoice().paymentInstructions?.description }}</p>\n }\n @for (means of invoice().paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords.instructionsAccountIdentifier }}: </strong>\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n <h2>{{ textWords.notesTopic }}</h2>\n @for (note of invoice().invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n @if (invoice().documents?.length) {\n <section class=\"invoice-attachments\">\n <ava-invoice-documents [documents]=\"invoice().documents\"></ava-invoice-documents>\n </section>\n }\n </div>\n}\n","/*\n * Public API Surface of angular-ava\n */\n\nexport * from './lib/ava-tree/model';\nexport * from './lib/version';\nexport * from './lib/ava-tree/components/ava-tree/ava-tree.component';\nexport * from './lib/ava-tree/constants';\nexport * from './lib/invoice/components/invoice-display/invoice-display.component';\nexport * from './lib/invoice/constants';\nexport * from './lib/invoice/model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FlatElementsService","i2.ConfigurationTreeService","i1.SelectElementService","i2.TreeNodeSelectionService","i3.ConfigurationTreeService","i4","i6","i7","i3","i2.SelectElementService","i3.TreeNodeSelectionService","i4.ExpandParentGroupService","i5.KeyboardOperationService","i6.ConfigurationTreeService","i1.ConfigurationInvoiceService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dangl-angular-ava.mjs","sources":["../../../projects/angular-ava/src/lib/ava-tree/model/ava-models.ts","../../../projects/angular-ava/src/lib/ava-tree/model/tree-mode.model.ts","../../../projects/angular-ava/src/lib/version.ts","../../../projects/angular-ava/src/lib/ava-tree/constants/defaultTextWords.ts","../../../projects/angular-ava/src/lib/ava-tree/services/configuration-tree.service.ts","../../../projects/angular-ava/src/lib/ava-tree/services/expand-parent-group.service.ts","../../../projects/angular-ava/src/lib/ava-tree/constants/defaultFilters.ts","../../../projects/angular-ava/src/lib/ava-tree/constants/defaults.ts","../../../projects/angular-ava/src/lib/ava-tree/services/flat-elements.service.ts","../../../projects/angular-ava/src/lib/ava-tree/services/select-element.service.ts","../../../projects/angular-ava/src/lib/ava-tree/services/keyboard-operation.service.ts","../../../projects/angular-ava/src/lib/ava-tree/services/tree-node-selection.service.ts","../../../projects/angular-ava/src/lib/ava-tree/services/tree-hover-tooltip.service.ts","../../../projects/angular-ava/src/lib/ava-tree/directives/hover-effect.directive.ts","../../../projects/angular-ava/src/lib/ava-tree/directives/save-changing-view.directive.ts","../../../projects/angular-ava/src/lib/ava-tree/pipes/element-icon-name.pipe.ts","../../../projects/angular-ava/src/lib/ava-tree/pipes/element-item-number.pipe.ts","../../../projects/angular-ava/src/lib/ava-tree/pipes/element-text.pipe.ts","../../../projects/angular-ava/src/lib/ava-tree/components/tree-item/tree-item.component.ts","../../../projects/angular-ava/src/lib/ava-tree/components/tree-item/tree-item.component.html","../../../projects/angular-ava/src/lib/ava-tree/components/list-structure/list-structure.component.ts","../../../projects/angular-ava/src/lib/ava-tree/components/list-structure/list-structure.component.html","../../../projects/angular-ava/src/lib/ava-tree/components/table-structure/table-structure.component.ts","../../../projects/angular-ava/src/lib/ava-tree/components/table-structure/table-structure.component.html","../../../projects/angular-ava/src/lib/ava-tree/pipes/group-child-elements.pipe.ts","../../../projects/angular-ava/src/lib/ava-tree/components/tree-node/tree-node.component.ts","../../../projects/angular-ava/src/lib/ava-tree/components/tree-node/tree-node.component.html","../../../projects/angular-ava/src/lib/ava-tree/components/tree-structure/tree-structure.component.ts","../../../projects/angular-ava/src/lib/ava-tree/components/tree-structure/tree-structure.component.html","../../../projects/angular-ava/src/lib/ava-tree/components/ava-tree/ava-tree.component.ts","../../../projects/angular-ava/src/lib/ava-tree/components/ava-tree/ava-tree.component.html","../../../projects/angular-ava/src/lib/invoice/constants/defaultTextWordInvoice.ts","../../../projects/angular-ava/src/lib/invoice/services/configuration-invoice.service.ts","../../../projects/angular-ava/src/lib/invoice/model/invoice-models.ts","../../../projects/angular-ava/src/lib/invoice/pipes/invoice-attachment-mime-type.pipe.ts","../../../projects/angular-ava/src/lib/invoice/components/invoice-documents/invoice-documents.component.ts","../../../projects/angular-ava/src/lib/invoice/components/invoice-documents/invoice-documents.component.html","../../../projects/angular-ava/src/lib/invoice/components/invoice-display/invoice-display.component.ts","../../../projects/angular-ava/src/lib/invoice/components/invoice-display/invoice-display.component.html","../../../projects/angular-ava/src/public-api.ts","../../../projects/angular-ava/src/dangl-angular-ava.ts"],"sourcesContent":["//----------------------\n// <auto-generated>\n// Generated using the NSwag toolchain v14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\n// </auto-generated>\n//----------------------\n\n/* tslint:disable */\n/* eslint-disable */\n// ReSharper disable InconsistentNaming\n\n/** This enum configures rounding modes for price calculations in projects */\nexport enum PriceRoundingModeDto {\n Normal = 'Normal',\n Floor = 'Floor',\n Ceiling = 'Ceiling'\n}\n\n/** General information about a Project. */\nexport interface ProjectInformationDto {\n /** Information about the buyer. */\n buyer?: PartyInformationDto | undefined;\n /** Description for the project. */\n description?: string | undefined;\n /** Short description for the project. */\n descriptionShort?: string | undefined;\n /** Name of the project. */\n name?: string | undefined;\n /** Information about the site. */\n site?: PartyInformationDto | undefined;\n /** The ItemNumberSchema used in the project. */\n itemNumberSchema?: ItemNumberSchemaDto | undefined;\n /** Short label for the currency used. */\n currencyShort?: string | undefined;\n /** Full label of the currency used. */\n currencyLong?: string | undefined;\n /** Label for the labour time part of prices used in the project. */\n labourTimeLabel?: string | undefined;\n /** Labels for the price components used in the project. Caution: Removal of a price component will trigger to have dependent price informations be deleted in IElements that use this property. If this property is changed or altered after the project has already been used, it is strongly advised to do operations step by step, e.g. if renaming and reordering multiple price components, this should be done one by one. Otherwise, a combination of rename and reordering will not be correctly propagated downwards to child objects in this Project. */\n priceComponents?: string[] | undefined;\n /** This dictionary specifies actual types used for the PriceComponents. For example, a single price component might have the name 'Material' as a string, ans this dictionary would then have a key 'Material' and a value of Materials. You can not add keys here that are not also present in the PriceComponents property, and removing price components will also remove them from this dictionary here. */\n readonly priceComponentTypes?: { [key: string]: PriceComponentTypeDto } | undefined;\n /** This bool indicates if this project allows the bidder to add bidder comments. Bidder comments are a way to attach clarifying information when submitting an offer. */\n bidderCommentAllowed?: boolean | undefined;\n /** This property indicates if the project should allow side offers from contractors. In GAEB, a side offer would typically be in exchange phase 85. */\n sideOffersAllowed?: boolean | undefined;\n /** This enumeration describes the type of the award / procurement process. If this is used in a GAEB context, more information about award types can be found in the German VOB/A rules and the GAEB standard */\n awardType?: AwardTypeDto | undefined;\n /** This enumeration describes awards for project that are not just a regular procurement. For example, it can be used to describe recurring maintenance or an outline contract (German: Rahmenvertrag) which just specifies services and prices but may be requested on demand when necessary */\n specialAwardKind?: SpecialAwardKindDto | undefined;\n /** Requesters in a construction project, in German also called 'Bedarfsträger', are parties connected to the building process, e.g. architects or planners. */\n requesters?: PartyInformationDto[] | undefined;\n /** Notification sites are addresses that are used for delivering messages in the context of construction projects. */\n notificationSites?: PartyInformationDto[] | undefined;\n}\n\n/** Represents information about a party (a site or an organization). */\nexport interface PartyInformationDto {\n /** Elements GUID identifier. */\n id: string;\n /** This party's name. */\n name?: string | undefined;\n /** This party's street. */\n street?: string | undefined;\n /** This party's ZipCode. */\n zipCode?: string | undefined;\n /** This party's City. */\n city?: string | undefined;\n /** This party's Country. */\n country?: string | undefined;\n /** This party's Identifier. */\n identifier?: string | undefined;\n /** Remarks for this party. */\n remarks?: string | undefined;\n /** An email address for this party. */\n email?: string | undefined;\n /** A phone number for this party. */\n phone?: string | undefined;\n /** The name of a contact person. */\n contactPersonName?: string | undefined;\n /** This is an identifier related to this PartyInformation and their internal reference of the tender (or award). This might be used to assign an identifier (German \"Vergabenummer\") for the current project. This is typically only used in Buyer and Bidder representations and should map to the concept of \"Vergabenummer\" or \"AwardNo\" in GAEB. */\n awardIdentifier?: string | undefined;\n /** This property indicates if the party is registered within the European Economic Area. */\n isInEuropeanEconomicArea?: boolean | undefined;\n /** If this is within the European Economic Area (see IsInEuropeanEconomicArea, then as a business entity it likely has an EU VAT Id. */\n vatId?: string | undefined;\n /** The fax number for this party. */\n fax?: string | undefined;\n /** The two letter ISO country code, e.g. DE for Germany. */\n countryCode?: string | undefined;\n /** Depending on which party this class represents, it might have either a 'creditor' or 'debtor' number. This is often used in internal accounting systems. */\n creditorOrDebtorIdentifier?: string | undefined;\n /** The Global Location Number (GLN) is issued by GS1 and is intended to be a unique identifier for the physical address of a party, e.g. a business office. */\n globalLocationNumber?: string | undefined;\n /** This list contains information about bank accounts associated with this PartyInformation. It's typically used for buyers and bidders. */\n bankingInformation?: BankingInformationDto[] | undefined;\n /** This can be used to specify a registration number for this party, e.g. a company registration number. It is usually used in GAEB XML commerce exchanges for bidders to supply their WEEE registration number, which is used to identify them as a registered WEEE company. */\n registrationNumber?: string | undefined;\n /** This can be used to specify a tax id for this party. It is different from the VatId and the RegistrationNumber. For example, in Germany this would be the \"Steuernummer\". This is usually not mapped to any AVA exchanges, but it's used e.g. in the XRechnung electronic invoices. */\n taxId?: string | undefined;\n}\n\n/** This is a class that represents the information about a bank connection. It is usually used within a PartyInformation. */\nexport interface BankingInformationDto {\n /** Elements GUID identifier. */\n id: string;\n /** The name of the bank. */\n name?: string | undefined;\n /** The international identifier for the bank account. */\n iban?: string | undefined;\n /** The account number. Typically no longer used since the introduction of IBAN within the SEPA area. */\n accountNumber?: string | undefined;\n /** The international bank identifier. */\n bic?: string | undefined;\n /** The routing number for the bank. Typically no longer used since the introduction of IBAN within the SEPA area. */\n routingNumber?: string | undefined;\n}\n\n/** The schema for ItemNumber's in a Project. */\nexport interface ItemNumberSchemaDto {\n /** The count of tiers in the ItemNumberSchema */\n readonly totalLength?: number | undefined;\n /** The collection of tiers for this ItemNumberSchema. */\n tiers?: ItemNumberSchemaTierDto[] | undefined;\n /** The separator to use for separiting the different levels in an ItemNumber. Defaults to DEFAULT_SEPARATOR, which is a point '.'. Setting this to a space or other whitespaces is discouraged, as this might not work correct in all situations and item numbers could be displayed not as intended. This can not be set to an empty or null string, trying that will default to the DEFAULT_SEPARATOR. If a value is set that has a different length than one '1', the DEFAULT_SEPARATOR will be used instead. You should also not use values for the separator that are also valid for the item numbers themselves, as that might also lead to incorrect results */\n separator?: string | undefined;\n /** This string is used to fill (left-pad) item numbers. For example, if a tier has a length of '4' but the given item number is '12', with a Filler of '0', then the final item number will be represented as '0'. This must be a single character string, if a value is given where the Length property does not evaluate to '1', the DEFAULT_FILLER '0' is used. A space is fine to use. You should ensure that you use a value different than Separator, as that might produce unexpected results. No attempt is done by the code to recover from such ambiguous configurations. */\n filler?: string | undefined;\n /** This is just a string property that can optionally be used to store additional data for this ItemNumberSchema, e.g. an identification or a type. It does not have any influence over how item numbers are generated, and is not supported in most exchange formats. However, it is used to store ÖNorm service specification structure types. */\n identifier?: string | undefined;\n /** This property indicates if ItemNumbers using this ItemNumberSchema should skip empty group levels. This is commonly only used in GAEB files, where there might be gaps in the hierarchy of elements and position identifiers should be placed at the end of the string representation. */\n skipNonExistingLevelsInPositionItemNumbers?: boolean | undefined;\n /** This string is used only when the property SkipNonExistingLevelsInPositionItemNumbers in this ItemNumberSchema is also set to true. It defaults to DEFAULT_SKIPPED_TIERS_FILLER, but can be set to any string with a lenght of one. Null values or values with a longer length will lead to this property reverting back to the default value. This is used to fill skipped tiers in item numbers where a position is placed in a higher hierarchy level than what would be defined in the Tiers. For example, it could produce an item number like '01.__.02', which would indicate a skipped second level. This should be using different values than Filler and Separator, since that could cause ambiguities in the code that generates the actual item numbers. No attempt is done by the code to recover from such ambiguous configurations. */\n skippedTiersFiller?: string | undefined;\n /** This is a read-only property that indicates if this schema has a valid structure. It internally just returns the result from IsCorrectlyDefined. This will return if the ItemNumberSchema is correctly defined. For it to be correctly defined, the following conditions must be true: There may only be one lot group, if there is one, it must be at the top. Following lot levels, there may be at least one group level. After the group levels, there must be one position level. After the position level, there may be one index level. If no tiers are defined at all, this will also return false. */\n readonly schemaIsCorrectlyDefined?: boolean | undefined;\n /** Defaults to false. If this is disabled, all letters in the ItemNumber string representations will be transformed to their lowercase representation. */\n allowUpperCaseLettering?: boolean | undefined;\n /** If this is set to true, single identifiers in an item number will not be left padded to fill the length of the tier. This is useful for allowing custom formats in item numbers, without following the GAEB standard. Defaults to false. */\n disableLeftPaddingTiersWithFiller?: boolean | undefined;\n}\n\n/** Represents information about a single Tier in an ItemNumber. */\nexport interface ItemNumberSchemaTierDto {\n /** The (maximum) length for this tier. Will not accept a length less than 1. Defaults to 1 if length less than one is specified. */\n length?: number | undefined;\n /** This ItemNumberSchemaTier's type. */\n type?: ItemNumberTypeDto | undefined;\n /** This enum represents the alignment value for a tier in an ItemNumberSchema. It is not used anywhere for computations at the moment, and is mostly an informational value. */\n alignment?: ItemNumberSchemaTierAlignmentDto | undefined;\n /** This specifies which ItemNumberSchemaTierType this tier represents. This can be, for example, a group tier / level, a position level or a lot level. */\n tierType?: ItemNumberSchemaTierTypeDto | undefined;\n /** Indicates if this tier represents a lot. See the documentation for more information about lots. */\n readonly isLot?: boolean | undefined;\n /** This value is the increment, or step size, that should be used for new item numbers. It defaults to DEFAULT_INCREMENT, but can be changed to any other positive number greater than zero. Invalid values make this be set to one '1' */\n increment?: number | undefined;\n /** This is an optional name for the given tier */\n tierName?: string | undefined;\n}\n\n/** Determines the type of an ItemNumberSchema */\nexport enum ItemNumberTypeDto {\n Numeric = 'Numeric',\n Alphanumeric = 'Alphanumeric'\n}\n\n/** This enum represents the alignment value for a tier in an ItemNumberSchema. It is not used anywhere for computations at the moment, and is mostly an informational value. */\nexport enum ItemNumberSchemaTierAlignmentDto {\n Undefined = 'Undefined',\n Left = 'Left',\n Right = 'Right'\n}\n\n/** Specifies the type an ItemNumberSchemaTier represents. For example, a tier may indicate to be used for positions or for groups. */\nexport enum ItemNumberSchemaTierTypeDto {\n Undefined = 'Undefined',\n Index = 'Index',\n Position = 'Position',\n Group = 'Group',\n Lot = 'Lot'\n}\n\n/** This enumeration models types of price components for better classification. */\nexport enum PriceComponentTypeDto {\n Unknown = 'Unknown',\n Wages = 'Wages',\n Materials = 'Materials',\n Plant = 'Plant',\n Miscellaneous = 'Miscellaneous'\n}\n\n/** This enumeration describes the type of the award / procurement process. If this is used in a GAEB context, more information about award types can be found in the German VOB/A rules and the GAEB standard */\nexport enum AwardTypeDto {\n Unspecified = 'Unspecified',\n OpenProcurement = 'OpenProcurement',\n ClosedProducrement = 'ClosedProducrement',\n NegotiationProcurementWithoutPublicAnnouncement = 'NegotiationProcurementWithoutPublicAnnouncement',\n NegotiationProcurement = 'NegotiationProcurement',\n OpenCall = 'OpenCall',\n SelectedCallWithoutPublicCompetition = 'SelectedCallWithoutPublicCompetition',\n SelectedCall = 'SelectedCall',\n DirectAward = 'DirectAward',\n InternationalNATOProcurement = 'InternationalNATOProcurement',\n CompetitiveDialog = 'CompetitiveDialog'\n}\n\n/** This enumeration describes awards for project that are not just a regular procurement. For example, it can be used to describe recurring maintenance or an outline contract (German: Rahmenvertrag) which just specifies services and prices but may be requested on demand when necessary */\nexport enum SpecialAwardKindDto {\n Unspecified = 'Unspecified',\n MaintenanceContract = 'MaintenanceContract',\n OutlineContract = 'OutlineContract',\n OutlineForMaintenanceContract = 'OutlineForMaintenanceContract'\n}\n\n/** This is the base class that holds information about a whole service specification. */\nexport interface ServiceSpecificationDto {\n /** Elements GUID identifier. */\n id: string;\n /** The hourly wage that is used within this ElementContainerBase. Will be propagated to child elements. */\n readonly projectHourlyWage?: number | undefined;\n /** The tax rate that is used within this ElementContainerBase. Will be propagated to child elements. */\n projectTaxRate?: number | undefined;\n /** The price components that are used within this project. They are ignored during Json deserialization because they will be set from the parent project. */\n projectPriceComponents?: string[] | undefined;\n /** The ItemNumberSchema that is used within this project. */\n projectItemNumberSchema?: ItemNumberSchemaDto | undefined;\n /** The IElements within this ElementContainerBase. */\n elements?: IElementDto[] | undefined;\n /** The label used in the parent Project to mark labour time, e.g. \"Hours\" or \"Stunden\". */\n readonly projectLabourTimeLabel?: string | undefined;\n /** Indicates if there are child IElements that have conflicting, duplicated ItemNumbers or if any child ElementContainerBase elements themselves contain duplicate ItemNumber s. Will always indicate false when told to ignore duplicate item numbers. */\n readonly containsDuplicateItemNumbers?: boolean | undefined;\n /** Indicates if there are child IElements that have conflicting, duplicated Ids or if any child ElementContainerBase elements themselves contain duplicate Id s. Will always indicate false when told to ignore duplicate item numbers. */\n readonly containsDuplicateElementIds?: boolean | undefined;\n /** Indicate if duplicated ItemNumbers within child elements are to be ignored. Will not perform checks for duplicates if yes. */\n ignoreDuplicateItemNumbers?: boolean | undefined;\n /** If this is set to true, the ProjectCatalogues property will not be propagated to child elements. This is useful in mapping scenarios, where you want to disable propagation for multiple changes, and only enable it once you have mapped all properties */\n ignoreProjectCataloguePropagation?: boolean | undefined;\n /** Indicate if duplicated Ids within child elements are to be ignored. Will not perform checks for duplicates if yes. */\n ignoreDuplicateElementIds?: boolean | undefined;\n /** Price composition by tax rate. */\n totalPriceGrossByTaxRate?: GrossPriceComponentDto[] | undefined;\n /** Internally used to indicate that a propagation is currently done, this is done to not recalculate every single result from a lot of changes when it is sufficient to calculate the total price at once. */\n ignoreChildPriceUpdates?: boolean | undefined;\n /** Net price after applied deductions. */\n readonly deductedPrice?: number | undefined;\n /** Factor of applied deductions to the total price. For example, \"0.03\" means that a 3% deduction is to be applied. */\n deductionFactor?: number | undefined;\n /** The exact amount of the discount as an absolute value. For backwards compatibility reasons, setting this value will also set a calculated value to DeductionFactor, which will also be updated in case the total price is changed to reflect a relative value of the absolute discount sum. */\n absoluteDeduction?: number | undefined;\n /** Will return this ElementContainerBase's total price. */\n readonly totalPrice?: number | undefined;\n /** The total gross price for this ElementContainerBase including all child elements. */\n readonly totalPriceGross?: number | undefined;\n /** Total gross price after applied deductions. */\n readonly totalPriceGrossDeducted?: number | undefined;\n /** Indicates the PriceType of this ElementContainerBase, whether it should factor into total costs or not. */\n priceType?: PriceTypeDto | undefined;\n /** Information about the bidder. */\n bidder?: PartyInformationDto | undefined;\n /** This discriminator is used to identify different bidders in a project. It is different from the Identifier property in the Bidder in that the BidderDiscriminator is intended to be a numerical identifier within a project, while the Identifier does uniquely identify a bidder in the system independent of a specific project. This property should map to \"Bieternummer\" or \"BidderNo\" in GAEB. */\n bidderDiscriminator?: string | undefined;\n /** This is used to store the GAEB XML Id within this ServiceSpecification. This data is not used for any calculations or evaluations but only for GAEB serialization and deserialization. */\n gaebXmlId?: string | undefined;\n /** The ProjectInformation used within the Project in which this ElementContainerBase is contained. This is reference equal to the ProjectInformation used in the parent project. */\n readonly projectInformation?: ProjectInformationDto | undefined;\n /** This service specifications exchange phase, i.e. the current status in the project it is intended to be used (such as request for offer, offer, awarding...). */\n exchangePhase?: ExchangePhaseDto | undefined;\n /** This indicates where the service specification originates, i.e. from an exchange file format or self created. If applicable, additional information is present in the OriginDetail property. */\n origin?: OriginDto | undefined;\n /** This property complements the Origin property. Some formats, e.g. GaebXml might have additional information attached, e.g. GAEB XML V3.2 oder GAEB XML V3.1. This string property is used to hold such data. The Dangl.AVA module does not have a list of possible values, since this is defined in the native format assemblies, e.g. Dangl.GAEB or Dangl.Oenorm. */\n originDetail?: string | undefined;\n /** Creation date of this ServiceSpecification. */\n creationDate?: Date | undefined;\n /** Date indicating until when an offer has to be submitted. In German, this is often called the \"Eröffnungstermin\" */\n offerByDate?: Date | undefined;\n /** Date indicating by when the buyer will select a contractor. */\n decisionDate?: Date | undefined;\n /** Date of when the offer / bid was created */\n bidDate?: Date | undefined;\n /** If a construction project requires a warranty bond, this property indicates the amount as a percentage, e.g. '0.15m' means 15% of the construction total amount as a warranty bond. */\n warrantyBondPercentage?: number | undefined;\n /** If a construction project requires an execution guarantty, this property indicates the amount as a percentage, e.g. '0.15m' means 15% of the construction total amount as an execution guarantee. In practice, this percentage is usually deducted from intermediate invoices and only billed in the final invoice. */\n executionGuaranteePercentage?: number | undefined;\n /** String indicating where the physical submission of the offer is taking place. */\n submissionLocation?: string | undefined;\n /** Description of this ServiceSpecification. */\n description?: string | undefined;\n /** The name of this ServiceSpecification. */\n name?: string | undefined;\n /** This PriceInformation contains global data for the ServiceSpecification. When inside a Project, do not set this property manually. */\n priceInformation?: PriceInformationDto | undefined;\n /** These are Catalogue that are used within this ElementContainerBase. Catalogue references are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. */\n projectCatalogues?: CatalogueDto[] | undefined;\n /** Referenced catalogues for this ElementContainerBase. */\n catalogueReferences?: CatalogueReferenceDto[] | undefined;\n /** The date when the execution of the services is scheduled to start */\n plannedExecutionStart?: Date | undefined;\n /** The date then the execution of the services is scheduled to be finished */\n plannedExecutionEnd?: Date | undefined;\n /** The date on which the contract has been awarded. This matches \"Auftragsdatum\" in GAEB */\n contractDate?: Date | undefined;\n /** This value can be used to indicate the number or identifier of the contract. It matches \"Auftragsnummer\" in GAEB */\n contractIdentifier?: string | undefined;\n /** This indicates how long the warranty period is for this ServiceSpecification */\n warrantyDuration?: WarrantyDurationDto | undefined;\n /** The date on which the warranty period ends */\n warrantyEnd?: Date | undefined;\n /** The date on which the services rendered by the bidder are scheduled to be approved by the buyer */\n approvalDate?: Date | undefined;\n /** This should specify how the approval is performed by the buyer. This matches \"AcceptType\" in GAEB */\n typeOfApproval?: string | undefined;\n /** This optional string property is shared by all IElements, and indicates if the element is part of an addendum, a 'Nachtrag' in German. */\n addendumNumber?: string | undefined;\n /** This indicates, if this element is part of an addendum an, if yes, with what status. */\n addendumStatus?: AddendumStatusDto | undefined;\n /** This property holds additional information that's only valid in commerce exchange phases. */\n commerceProperties?: ServiceSpecificationCommercePropertiesDto | undefined;\n}\n\n/** Base interface definition for elements within an ElementContainerBase. */\nexport interface IElementDto {\n elementType?: string | undefined;\n /** Elements GUID identifier. */\n id: string;\n /** This is used to store the GAEB XML Id within this IElement. This data is not used for any calculations or evaluations but only for GAEB serialization and deserialization. */\n gaebXmlId?: string | undefined;\n /** This optional string property is shared by all IElements, and indicates if the element is part of an addendum, a 'Nachtrag' in German. */\n addendumNumber?: string | undefined;\n projectCatalogues?: CatalogueDto[] | undefined;\n catalogueReferences?: CatalogueReferenceDto[] | undefined;\n elementTypeDiscriminator: string;\n}\n\n/** This class describes an external catalogue. Catalogues, or collections, hold information to categorize and describe items. For example, the German DIN 276 cost group standards describe different types of costs for building projects. When referencing the DIN 276 catalogue and providing an item key or identifier, it is possible to reference data in this catalogue. */\nexport interface CatalogueDto {\n /** Elements GUID identifier. */\n id: string;\n /** This is used to store the GAEB XML Id within this Catalogue. This data is not used for any calculations or evaluations but only for GAEB serialization and deserialization. */\n gaebXmlId?: string | undefined;\n /** The name that is given for this catalogue. */\n name?: string | undefined;\n /** Additional information about this catalogue. */\n description?: string | undefined;\n /** If given, this gives a classification for the contents of the catalogue */\n catalogueType?: CatalogueTypeDto | undefined;\n /** This property may hold additional information about the catalogue type. It is currently only used in GAEB XML exchange to carry detailed information about a catalogue type, but it's otherwise just a free text field. */\n catalogueTypeDetail?: string | undefined;\n}\n\n/** This enumeration describes the type of a catalogue. Catalogues, or collections, hold information to categorize and describe items. For example, the German DIN 276 cost group standards describe different types of costs for building projects. When referencing the DIN 276 catalogue and providing an item key or identifier, it is possible to reference data in this catalogue. */\nexport enum CatalogueTypeDto {\n Unknown = 'Unknown',\n Location = 'Location',\n DIN276 = 'DIN276',\n CostUnit = 'CostUnit',\n WorkCategory = 'WorkCategory',\n OenormB1801CostGroup = 'OenormB1801CostGroup',\n BIM = 'BIM',\n Attachment = 'Attachment'\n}\n\n/** This class is used to link data between catalogues and objects. */\nexport interface CatalogueReferenceDto {\n /** Elements GUID identifier. */\n id: string;\n /** This points to the item in the catalogue itself. This means that, for example when this quantity assignment references a \"DIN 276\" catalogue, this property indicates the number / identifier / key in DIN 276 that is referenced. */\n catalogueReferenceKey?: string | undefined;\n /** The Id of the CatalogueReference that is targeted by this item. Set this property to set the referenced catalogue. */\n catalogueReferenceId?: string | undefined;\n /** These are CatalogueReference that are used within this ServiceSpecification. Catalogue references are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. */\n projectCatalogues?: CatalogueDto[] | undefined;\n /** This returns the referenced catalogue. Will return null if there is no reference or the catalogue is not present in the ProjectCatalogues. */\n readonly catalogue?: CatalogueDto | undefined;\n}\n\n/** A Position is the main item type in a ServiceSpecification, holding information about tasks to be done, their prices, description, amounts etc. */\nexport interface PositionDto extends IElementDto {\n /** Will return the price per unit, rounded according to the project settings or the default value of three decimal places */\n readonly unitPrice?: number | undefined;\n /** You can use this property to directly set the unit price for this position. This will override any given PriceComponents */\n unitPriceOverride?: number | undefined;\n /** Will return this Position's total quantity, rounded to three decimal places. */\n readonly quantity?: number | undefined;\n /** You can use this property to directly set the quantity for this position. This will override any given QuantityComponents */\n quantityOverride?: number | undefined;\n /** This indicates true if this specific position is specified as a complementing position for any base position. */\n isComplementingPosition?: boolean | undefined;\n /** If IsComplementingPosition is set to true, this will indicate which base positions are targeted by this complementing position. */\n complementsPositions?: string[] | undefined;\n /** You can use this property to directly specify the total price of this position as a percentage of the sum of the total prices of base positions that this position complements. It will essentially set the total price for this position to the sum of all total prices of the positions specified in ComplementsPositions multiplied by the percentage here. If present, this has precedence over UnitPriceOverride as well as QuantityOverride. */\n complementingPricePercentageOverride?: number | undefined;\n /** This is a read only property showing the total price of this positions as a percentage of the sum of the total prices of all base positions, in case this position is a complementing positions. If this position is not a complementing position, this will be null. Also, if no prices are present, this will also be null. */\n complementingPricePercentage?: number | undefined;\n /** The tag of the unit used for this positions quantity. */\n unitTag?: string | undefined;\n /** The components for labour time in this Position. */\n labourComponents?: LabourPriceComponentDto | undefined;\n /** The single price components in this Position. Price components should not be handled directly on a per-position basis but set globally in the parent Projects ProjectInformation. */\n priceComponents?: PriceComponentDto[] | undefined;\n /** The quantity components of this Position. */\n quantityComponents?: CalculationDto[] | undefined;\n /** Further structuring of this Position. */\n subDescriptions?: SubDescriptionDto[] | undefined;\n /** Indicates the status of this Position's comission. */\n comissionStatus?: ComissionStatusDto | undefined;\n /** A list of positions that complement this Position. The positions are referenced by their GUIDs. It might be used together with ComplementedByQuantities in case that only a given quantity is complemented by positions. */\n complementedBy?: string[] | undefined;\n /** Will indicate if this Position is complemented in this ServiceSpecification by other Positions. It can not be set to false when there are entries in the ComplementedBy property. */\n complemented?: boolean | undefined;\n /** Indicates that the amount for this Position is to be set by the bidder. */\n amountToBeEnteredByBidder?: boolean | undefined;\n /** Indicates if the bidder demands for prices to be broken up into their price components. */\n priceCompositionRequired?: boolean | undefined;\n /** Indicates if this Position should use a different TaxRate than what is the default for the Project. */\n useDifferentTaxRate?: boolean | undefined;\n /** Will return either the parent ServiceSpecification's TaxRate or it's own if it has a different value. (For example, in Germany Water has a different TaxRate than regular Positions) */\n taxRate?: number | undefined;\n /** The ItemNumber for this Position. */\n itemNumber?: ItemNumberDto | undefined;\n /** The rate of deductions, i.e. 0.12m means 12% price deduction. */\n deductionFactor?: number | undefined;\n /** Returns the product of UnitPrice times Quantity. */\n readonly totalPrice?: number | undefined;\n /** The total gross price for this Position. */\n readonly totalPriceGross?: number | undefined;\n /** Total gross price after applied deductions. */\n readonly totalPriceGrossDeducted?: number | undefined;\n /** Net price after applied deductions. Please be aware that this is the total price, from TotalPrice, not the unit price of the position. */\n readonly deductedPrice?: number | undefined;\n /** This indicates the type of a position. If this is an alternative position, its AlternativeTo property should be set to the id of the position it can replace. */\n positionType?: PositionTypeDto | undefined;\n /** Indicates the PriceType of this Position. */\n priceType?: PriceTypeDto | undefined;\n /** This indicates if this position is regular or describing a labour / hourly paid work service */\n serviceType?: ServiceTypeDto | undefined;\n /** This property describes additional information about a product being used within this Position. For example, a pipe position, per length unit, could be composed of different pipe segments, fitting and other accessory articles. */\n productData?: ProductDataDto | undefined;\n /** Short description for this DescriptionBase element. */\n shortText?: string | undefined;\n /** Detailed description for this DescriptionBase element. When the HtmlLongText is set, this is automatically overwritten and filled with the appropriate plain text representation of the Html text. Vice versa, setting this property overrides the HtmlLongText. */\n longText?: string | undefined;\n /** This contains the Html representation of the Longtext. When the LongText is set, this is automatically overwritten and filled with the appropriate Html representation of the plaintext. Vice versa, setting this property overrides the LongText. GAEB 90 and GAEB 2000 exports do not support any image functionality. In GAEB XML, only images that use an embedded Base64 data uri are exported, regular url references are cleared before written out. */\n htmlLongText?: string | undefined;\n /** Indicates if this DescriptionBase element contains Buyer or Bidder additions to the text. */\n additionType?: AdditionTypeDto | undefined;\n elementType?: string | undefined;\n /** Quantity assignments are, in contrast to SubDescriptions, used to categorize parts of this Position. For example, it could be categorized by cost group - e.g. a Position describing concrete walls could follow the German DIN 276 Cost Groups Standard and specify that of the total 1.000m² wall, 500m² are classified as exterior walls and 500m² are classified as interior walls. They would then have different cost groups associated, e.g. for accounting purposes. */\n quantityAssignments?: QuantityAssignmentDto[] | undefined;\n /** The CommerceProperties support specialized information that is only useful in GAEB XML 9x data exchange phases. It is intended to provide article information. */\n commerceProperties?: CommercePropertiesDto | undefined;\n /** If this position is an Alternative, then this property should point to the id of the position in this service specification that it can replace. If this is set to a value, you can optionally also specify an identifier via AlternativeIdentifier to specifiy multiple positions that must be used together to be an alternative to a single base position. */\n alternativeTo?: string | undefined;\n /** This is an optional property that can be used together with AlternativeTo. If this is set, you can indicate which alternative group a specific position is assigned to. That way, if you specifiy multiple alternative Positions with the same AlternativeIdentifier, you can indicate that to replace a single base Position, multiple alternative Positions should be used. This property is not checked or managed automatically, so it is possible for this property to become invalid, by for example setting this property but not setting a base position via AlternativeTo. */\n alternativeIdentifier?: number | undefined;\n /** This is an optional property that can be used together with AlternativeTo and AlternativeGroupIdentifier. If this is set, you can indicate which alternative group a specific position is assigned to. That way, you can specify the id (in integer format) for the alternative group this position belongs to. It's different to AlternativeIdentifier in that the other property describes the id of the group, while this property here describes the group itself. If a position only has set AlternativeGroupIdentifier but not AlternativeIdentifier, then it likely is a base position for a specific group. This was introduced in version v2.9.0 to be able to model both position and group ids for alternative group combinations. This property is not checked or managed automatically, so it is possible for this property to become invalid, by for example setting this property but not setting a base position via AlternativeTo. */\n alternativeGroupIdentifier?: number | undefined;\n /** If this is true, it indicates that the position is intended to be a lump sum, \"Pauschal\" in German. This means the position total price that is being invoiced should not depend on the actual quantity. In practice, partial invoices are still often used for partial services rendered. This property does not affect the price calculation for this position. Typically, the Quantity should be set to 1.0 when this flag is used. */\n isLumpSum?: boolean | undefined;\n /** This identifier can be used to point to the Id of a position in the same ServiceSpecification that acts as a base position. It matches \"Bezugsposition\" in GAEB. This can be used for positions that repeat partially or are linked together */\n repetitionTo?: string | undefined;\n v1CompatibilityPriceType?: string | undefined;\n /** This represents a standardized description. This means that instead of solely relying on texts to describe a service, external standards and definitions are referenced for a common understanding. */\n standardizedDescription?: StandardizedDescriptionDto | undefined;\n /** This list contains references to positions that complement this one, additionally also specifying a quantity for which the addition is intended. This does not replace the ComplementedBy property and there are no automatic checks being done between these two properties, so it's up to the user code to ensure deletions (and additions, if desired) are performed for both properties. When copying withing keeping Ids, this list will not be part of the copy process, since it would only contain quantities without actual position references. Containers, however, will rebuild the list with updated position references when copying positions that contain entries here. */\n complementedByQuantities?: ComplementedByQuantityDto[] | undefined;\n /** This identifier can be used to point to the Id of an ExecutionDescription in the same ServiceSpecification. ExecutionDescriptions act as a way to centrally describe how positions should be executed in practice. Often, the position itself still has text of its own to highlight deviations from that or add more details. */\n executionDescriptionReference?: string | undefined;\n /** This indicates if a position has not been offered. This is typically only expected to be true when the exchange phase of the parent ServiceSpecification is Offer, and it means that the position has not been offered at all. */\n notOffered?: boolean | undefined;\n /** This class models special properties that only apply to some exchange scenarios where ÖNorm is used. It is special for Positions and extends the OenormProperties base class. */\n oenormPositionProperties?: OenormPositionPropertiesDto | undefined;\n /** This is an identifier specific for this description. Some exchange formats, like GAEB XML, use it to identify descriptions. It's different to an elements identifier in that it should only apply to the description component, meaning the text itself. */\n descriptionId?: string | undefined;\n /** This is a zero based hierarchy level. It's set automatically when used in the context of a Project, and can be used to identify the hierarchy level of the current element. */\n hierarchyLevel?: number | undefined;\n /** This indicates, if this element is part of an addendum an, if yes, with what status. */\n addendumStatus?: AddendumStatusDto | undefined;\n readonly hasBidderCommentInHtmlLongText?: boolean | undefined;\n /** This property can optionally be used in GAEB exchange scenarios. It is only meaningful if this position itself is a complementing position, meaning if this position is marked in other positions in their ComplementedBy list. Then, it specifies how the complementing should be expressed in GAEB. By default, positions are always explicitly referenced, but other options are possible. Please also note that the Dangl.AVA.Converter package, which is used for GAEB exports, will check if the given type is valid in the current project configuration. If not, directly referenced positions will be used as fallback. */\n gaebComplementingType?: PositionComplementingTypeDto | undefined;\n /** HoldOut properties describe services that are to be provided and maintained for a specific time, e.g. fences on a construction site. */\n holdOutProperties?: PositionHoldOutPropertiesDto | undefined;\n /** This is an informational property, which directly holds a numerical value for an estimated quantity. It is not used for any price calculations. */\n estimatedQuantity?: number | undefined;\n /** This is an optional property that holds price catalogue data. These are prices that may represent an estimate, and they typically come from a price catalogue. */\n priceCatalogueData?: PriceCatalogueDataDto | undefined;\n /** If this is set to true, the ProjectCatalogues property will not be propagated to child elements. This is useful in mapping scenarios, where you want to disable propagation for multiple changes, and only enable it once you have mapped all properties. */\n ignoreProjectCataloguePropagation?: boolean | undefined;\n}\n\n/** Based on the PriceComponent, this class is responsible for labour time components. */\nexport interface LabourPriceComponentDto {\n /** The label associated with this price component. Will be taken from the parent Projects ProjectInformation. */\n label?: string | undefined;\n /** The total, calculated price of this component. Will multiply the calculated amount of hours with the ServiceSpecifications hourly wage rate. */\n readonly price?: number | undefined;\n /** The cost per hour of manual labor. */\n hourlyWage?: number | undefined;\n /** The single Calculation elements this price component is composed of. */\n values?: CalculationDto[] | undefined;\n /** Indicates if the ServiceSpecification's standard HourlyWage is to be used or a custom value. */\n useOwnHourlyWage?: boolean | undefined;\n /** The total, calculated time of this component. Will return the result rounded to three decimal places. */\n readonly totalTime?: number | undefined;\n /** These are Catalogues that are used within this PriceComponent. Catalogues are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. They are propagate to all child elements, e.g. other containers and QuantityAssignments. In the context of a ServiceSpecification, all elements share the same instance of the collection. */\n projectCatalogues?: CatalogueDto[] | undefined;\n}\n\n/** This class holds means to calculate mathematical expressions from given strings. */\nexport interface CalculationDto {\n /** Descriptive text for this calculation. */\n description?: string | undefined;\n /** This Calculation's mathematical expression. Please note that thousands separators are not supported. Both comma and point will be treated as decimal separators. */\n formula?: string | undefined;\n /** The calculated result from the formula, 0 if invalid. */\n readonly result?: number | undefined;\n /** Whether the Formula is a valid expression. */\n readonly valid?: boolean | undefined;\n /** Will be -1 if the Formula is correct, else it will show the position in the formula where an error was encountered. This is a zero based index. */\n readonly errorPositionInLine?: number | undefined;\n /** These are Catalogues that are used within this Calculation. Catalogues are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. They are propagate to all child elements, e.g. other containers and QuantityAssignments. In the context of a ServiceSpecification, all elements share the same instance of the collection. */\n projectCatalogues?: CatalogueDto[] | undefined;\n /** Referenced catalogues for this Calculation. */\n catalogueReferences?: CatalogueReferenceDto[] | undefined;\n}\n\n/** This class provides means to store information about a price and it's composition. Note that this is referencing to a single price component, so for example a Position would have a list of PriceComponents, one for Material, one for Labour etc. */\nexport interface PriceComponentDto {\n /** The total, calculated price of this component. */\n readonly price?: number | undefined;\n /** The label associated with this price component. Will be taken from the parent Projects ProjectInformation. */\n label?: string | undefined;\n /** The single Calculation elements this price component is composed of. */\n values?: CalculationDto[] | undefined;\n /** These are Catalogues that are used within this PriceComponent. Catalogues are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. They are propagate to all child elements, e.g. other containers and QuantityAssignments. In the context of a ServiceSpecification, all elements share the same instance of the collection. */\n projectCatalogues?: CatalogueDto[] | undefined;\n}\n\n/** This is appended to a Position and is used to separate the complete Position into smaller amounts to be described separately, for example concrete walls could be attached to different building storeys. */\nexport interface SubDescriptionDto {\n /** Elements GUID identifier. */\n id: string;\n /** Returns the total calculated sum of all quantity assignments. Will return the result rounded to three decimal places. */\n readonly quantity?: number | undefined;\n /** You can use this property to directly set the quantity for this sub description. This will override any given QuantityComponents */\n quantityOverride?: number | undefined;\n /** Holds quantity information for this sub description. Quantity is listening to changes here and is reporting the total sum of all quantity components. */\n quantityComponents?: CalculationDto[] | undefined;\n /** Indicates if the bidder is asked to specify an amount. */\n amountToBeEnteredByBidder?: boolean | undefined;\n /** Identifier for this SubDescription. */\n identifier?: string | undefined;\n /** Short description for this DescriptionBase element. */\n shortText?: string | undefined;\n /** Detailed description for this DescriptionBase element. When the HtmlLongText is set, this is automatically overwritten and filled with the appropriate plain text representation of the Html text. Vice versa, setting this property overrides the HtmlLongText. */\n longText?: string | undefined;\n /** If this is given, then the sub description has a different unit tag than the parent position. */\n unitTag?: string | undefined;\n /** This contains the Html representation of the Longtext. When the LongText is set, this is automatically overwritten and filled with the appropriate Html representation of the plaintext. Vice versa, setting this property overrides the LongText. GAEB 90 and GAEB 2000 exports do not support any image functionality. In GAEB XML, only images that use an embedded Base64 data uri are exported, regular url references are cleared before written out. */\n htmlLongText?: string | undefined;\n /** Indicates if this DescriptionBase element contains Buyer or Bidder additions to the text. */\n additionType?: AdditionTypeDto | undefined;\n /** This represents a standardized description. This means that instead of solely relying on texts to describe a service, external standards and definitions are referenced for a common understanding. */\n standardizedDescription?: StandardizedDescriptionDto | undefined;\n /** This identifier can be used to point to the Id of an ExecutionDescription in the same ServiceSpecification. ExecutionDescriptions act as a way to centrally describe how positions (or sub descriptions) should be executed in practice. Often, the position (or sub description) itself still has text of its own to highlight deviations from that or add more details. When working with import and export features, this property is only supported in GAEB 90 data exchange. */\n executionDescriptionReference?: string | undefined;\n /** These are Catalogues that are used within this Calculation. Catalogues are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. They are propagate to all child elements, e.g. other containers and QuantityAssignments. In the context of a ServiceSpecification, all elements share the same instance of the collection. */\n projectCatalogues?: CatalogueDto[] | undefined;\n /** This is an identifier specific for this description. Some exchange formats, like GAEB XML, use it to identify descriptions. It's different to an elements identifier in that it should only apply to the description component, meaning the text itself. */\n descriptionId?: string | undefined;\n readonly hasBidderCommentInHtmlLongText?: boolean | undefined;\n elementType?: string | undefined;\n elementTypeDiscriminator?: string | undefined;\n}\n\n/** Indicates the origin of an element. */\nexport enum AdditionTypeDto {\n None = 'None',\n ByBuyer = 'ByBuyer',\n ByBidder = 'ByBidder'\n}\n\n/** This class represents a standardized description. This means that instead of solely relying on texts to describe a service, external standards and definitions are referenced for a common understanding. */\nexport interface StandardizedDescriptionDto {\n /** This enumeration identifies a pre-known standard used for referencing standardized descriptions. */\n standardReferenceType?: StandardReferenceTypeDto | undefined;\n /** This string property is the identifier to map to the references standard. Its type is given in the StandardReferenceType */\n standardReference?: string | undefined;\n /** This is a special reference to the German STLB \"Standardleistungsbuch Bau\" reference. If this is used, the StandardReference property should not be set. */\n stlbReference?: STLBReferenceDto | undefined;\n}\n\n/** This enumeration identifies a pre-known standard used for referencing standardized descriptions. */\nexport enum StandardReferenceTypeDto {\n Unknown = 'Unknown',\n StLB = 'StLB',\n StLK = 'StLK',\n STLBBauZ = 'STLBBauZ'\n}\n\n/** This class represents a specialized reference to the German STLB \"Standardleistungsbuch Bau\". The STLB is a commercial offering and describes common services in the construction sector. When this is used, this describes the exact type of a service via a reference to this standard */\nexport interface STLBReferenceDto {\n /** The date of the STLB version. Typically, only the Year and Month are used */\n versionDate?: Date | undefined;\n /** The name of the catalogue within the STLB */\n catalogueName?: string | undefined;\n /** The name of the group in STLB */\n group?: string | undefined;\n /** The cost group this service is associated with */\n costGroup?: string | undefined;\n /** The service area (or type) in the STLB */\n serviceArea?: string | undefined;\n /** These keys may optionally be used to further reference multiple, specific items within the STLB */\n keys?: STLBKeyDto[] | undefined;\n}\n\n/** This class represents a single key reference within the German STLB \"Standardleistungsbuch Bau\" */\nexport interface STLBKeyDto {\n /** This identifier is required and uniquely describes a single reference within the STLB standard. It maps to \"ArtChrIdent\" in GAEB XML */\n artIdentifier?: number | undefined;\n /** This optional index property further categorizes a single reference within the STLB standard. It maps to \"ArtChIdx\" in GAEB XML */\n artIndex?: number | undefined;\n /** This optional identifier further specifies the execution kind of the reference in the STLB standard. It maps to \"ChVIdent\" in GAEB XML */\n kindIdentifier?: number | undefined;\n}\n\n/** Indicates if this service specification item is commissioned (and therefore should be executed), postponed for later or undefined. */\nexport enum ComissionStatusDto {\n Undefined = 'Undefined',\n Commissioned = 'Commissioned',\n Postponed = 'Postponed',\n Removed = 'Removed'\n}\n\n/** This class represents as identifier of a certain service specification's element and is uniquely within the service specification. */\nexport interface ItemNumberDto {\n /** Elements GUID identifier. */\n id: string;\n /** Will return this ItemNumber as point delimited string. Will not distinguish between upper- and lowercase and return an all-lowercase representation. Will consider first numbers, then characters, e.g. 1a is considered preceding aa. Transformation to all lowercase can be configured in the ItemNumberSchema property. */\n stringRepresentation?: string | undefined;\n /** Indicates if the characters and the length of the Identifiers match the current ItemNumberSchema. */\n readonly isSchemaCompliant?: boolean | undefined;\n /** Used for representing and validating this ItemNumber. */\n itemNumberSchema?: ItemNumberSchemaDto | undefined;\n /** Collection of the single identifiers in this ItemNumber. P.e., \"02.03.004\" will have three elements \"02\", \"03\", and \"004\". Since ReadOnlyObservableCollection`1 does have the event set to protected, it can be accessed like this: (itemNumber.Identifiers as INotifyCollectionChanged).CollectionChanged */\n identifiers?: string[] | undefined;\n /** This indicates if this item number is at the lot level. Find out more about lots in the documentation. */\n readonly isLot?: boolean | undefined;\n /** This is a zero based hierarchy level. It's set automatically when used in the context of a Project, and can be used to identify the hierarchy level of the current element. */\n hierarchyLevel?: number | undefined;\n /** This property indicates if this ItemNumber is attached to an object of the Position type. */\n readonly isAttachedToPosition?: boolean | undefined;\n itemNumberSchemaBeforeMapping?: ItemNumberSchemaDto | undefined;\n}\n\n/** This is a classification for Position elements. */\nexport enum PositionTypeDto {\n Regular = 'Regular',\n Optional = 'Optional',\n Alternative = 'Alternative'\n}\n\n/** This indicates the price type of a IPricedElement. */\nexport enum PriceTypeDto {\n WithTotal = 'WithTotal',\n WithoutTotal = 'WithoutTotal'\n}\n\n/** The service type describes the type of service a Position represents. */\nexport enum ServiceTypeDto {\n Regular = 'Regular',\n HourlyPaidWork = 'HourlyPaidWork'\n}\n\n/** This class represents data about products and their vendor */\nexport interface ProductDataDto {\n /** Elements GUID identifier. */\n id: string;\n /** This PartyInformation is used to describe details about the vendor of this ProductData. */\n vendor?: PartyInformationDto | undefined;\n /** The collection of ArticleData that describe this product, e.g. a pipe product could be composed out of multiple pipe segments and fittings. */\n articles?: ArticleDataDto[] | undefined;\n /** Short description for this ITextElement element. */\n shortText?: string | undefined;\n /** Detailed description for this ITextElement element. When the HtmlLongText is set, this is automatically overwritten and filled with the appropriate plain text representation of the Html text. Vice versa, setting this property overrides the HtmlLongText. */\n longText?: string | undefined;\n /** This contains the Html representation of the Longtext. When the LongText is set, this is automatically overwritten and filled with the appropriate Html representation of the plaintext. Vice versa, setting this property overrides the LongText. GAEB 90 and GAEB 2000 exports do not support any image functionality. In GAEB XML, only images that use an embedded Base64 data uri are exported, regular url references are cleared before written out. */\n htmlLongText?: string | undefined;\n}\n\n/** This class represents a single article, usually used within ProductData */\nexport interface ArticleDataDto {\n /** Elements GUID identifier. */\n id: string;\n /** The name (or brand name) for this article, usually given by the supplier or vendor. */\n name?: string | undefined;\n /** An article number that describes it, useful when integrating other systems. */\n articleNumber?: string | undefined;\n /** Quantity for this article. If this is used within a Position, the quantity here should be the quantity required for the full quantity of the position, not for a single unit. */\n quantity?: number | undefined;\n /** The unit tag for this single ArticleData. */\n unitTag?: string | undefined;\n /** This is an optional text element that can be used to further describe the ArticleData. */\n description?: string | undefined;\n /** Short description for this ITextElement element. */\n shortText?: string | undefined;\n /** Detailed description for this ITextElement element. When the HtmlLongText is set, this is automatically overwritten and filled with the appropriate plain text representation of the Html text. Vice versa, setting this property overrides the HtmlLongText. */\n longText?: string | undefined;\n /** This contains the Html representation of the Longtext. When the LongText is set, this is automatically overwritten and filled with the appropriate Html representation of the plaintext. Vice versa, setting this property overrides the LongText. GAEB 90 and GAEB 2000 exports do not support any image functionality. In GAEB XML, only images that use an embedded Base64 data uri are exported, regular url references are cleared before written out. */\n htmlLongText?: string | undefined;\n}\n\n/** Quantity assignments are, in contrast to SubDescriptions, used to categorize parts of their parent Position. For example, it could be categorized by cost group - e.g. a Position describing concrete walls could follow the German DIN 276 Cost Groups Standard and specify that of the total 1.000m² wall, 500m² are classified as exterior walls and 500m² are classified as interior walls. They would then have different cost groups associated, e.g. for accounting purposes. */\nexport interface QuantityAssignmentDto {\n /** Elements GUID identifier. */\n id: string;\n /** The total quantity in this quantity assignment */\n quantity?: number | undefined;\n /** These are Catalogue that are used within this ServiceSpecification. Catalogue references are used to describe catalogues, or collections, that can be used to describe elements with commonly known properties. For example, QuantityAssignments use these to categorize themselves. */\n projectCatalogues?: CatalogueDto[] | undefined;\n /** Referenced catalogues for this QuantityAssignment. */\n catalogueReferences?: CatalogueReferenceDto[] | undefined;\n}\n\n/** This class holds specialized information that is relevant to trade or commerce based data exchange scenarios, e.g. between customers, vendors, suppliers and distributors. It is used when exporting to GAEB XML 9x exchange phases. */\nexport interface CommercePropertiesDto {\n /** This maps to ArtNo in GAEB XML and represents an article number given by the supplier. */\n articleNumber?: string | undefined;\n /** This maps to EAN in GAEB XML and represents an GTIN (formerly EAN) article number. */\n eanGtinArticleNumber?: string | undefined;\n /** This maps to ArtNoID in GAEB XML and represents an ILN article number. */\n ilnArticleNumber?: string | undefined;\n /** This maps to CatalogNo in GAEB XML and represents an identifier of a specific catalogue. The referenced catalogue is usually a customer specific one, not related to CatalogueReferences. */\n catalogueNumber?: string | undefined;\n /** This maps to CatalogArtNo in GAEB XML and represents a key that maps to an entry in a specific catalogue. The referenced catalogue is usually a customer specific one, not related to CatalogueReferences. */\n catalogueArticleNumber?: string | undefined;\n /** This optional property can be used to indicate the basis for prices for a single position. Price basis means that the price is given per unit of the basis, e.g. per a pack of five when this property is set to '5'. */\n priceBasis?: number | undefined;\n /** This optional property can be used to indicate a sub position identifier specific for the commerce exchange */\n subPositionIdentifier?: string | undefined;\n /** In a commerce exchange, this property is usually used to reference the base item number of an underlying phase 83 exchange file */\n customerBaseItemNumber?: string | undefined;\n}\n\n/** This class represents the linking to a complementary position with a specific quantity set. For example, Position 'A' could be complementing Position 'B' with a total quantity of 20 units */\nexport interface ComplementedByQuantityDto {\n /** The quantity that is complemented. E.g., if the base position has a quantity of 100 m² of a brick wall, a complementing position might be for 'walls that exceed 3 m height' and for a total quantity of 10 m². */\n quantity?: number | undefined;\n /** This is the reference to the Id of the Position that is complementing. This means it does NOT reference the base position but the one that contains the actual addition. */\n complementingPositionId?: string | undefined;\n}\n\n/** This class models special properties that only apply to some exchange scenarios where ÖNorm is used. It is special for Positions and extends the OenormProperties base class. */\nexport interface OenormPositionPropertiesDto {\n /** This indicates where the content of this element originates, if set. It corresponds to 'herkunftskennzeichen' in ÖNorm */\n originCode?: OenormOriginCodeDto | undefined;\n /** This marks if the opening texts within this element are considered free text. It corresponds to 'vorbemerkungskennzeichen' in ÖNorm. */\n openingTextIsFreeText?: boolean | undefined;\n /** This indicates if the ÖNorm 'wesentliche position' mark is set */\n isMainPosition?: boolean | undefined;\n /** This indicates if the ÖNorm position was a 'ungeteilteposition' (undivided position). This will only be taken into account when the position is also the sole element inside it's parent group */\n isUndividedPosition?: boolean | undefined;\n /** In some ÖNorm formats, the short text can have it's own addition, so the text is split up in OenormShortText and OenormShortTextAddition To serialize this, either the ShortText property of the parent position needs to be null, or OenormShortText ' ' OenormShortTextAddition needs to match the ShortText. */\n oenormShortText?: string | undefined;\n /** In some ÖNorm formats, the short text can have it's own addition, so the text is split up in OenormShortText and OenormShortTextAddition To serialize this, either the ShortText property of the parent position needs to be null, or OenormShortText ' ' OenormShortTextAddition needs to match the ShortText. */\n oenormShortTextAddition?: string | undefined;\n}\n\n/** This indicates where the content of this element originates, if set. It corresponds to 'herkunftskennzeichen' in ÖNorm */\nexport enum OenormOriginCodeDto {\n Unknown = 'Unknown',\n FreeText = 'FreeText',\n AdditionDescription = 'AdditionDescription'\n}\n\n/** This enumeration represents the status of an addendum, 'Nachtrag' in German */\nexport enum AddendumStatusDto {\n Unknown = 'Unknown',\n Recognized = 'Recognized',\n Filed = 'Filed',\n Offered = 'Offered',\n Withdrawn = 'Withdrawn',\n Rejected = 'Rejected',\n RejectionObjected = 'RejectionObjected',\n FormallyAcknowledged = 'FormallyAcknowledged',\n Approved = 'Approved'\n}\n\n/** This enum represents the different ways in which a complementing position type can be specified. It is typically only used in GAEB exports, since in Dangl.AVA, complementing positions are always explicitly referenced. */\nexport enum PositionComplementingTypeDto {\n Undefined = 'Undefined',\n AllPreviousMarkedPositions = 'AllPreviousMarkedPositions',\n AllPreviousPositions = 'AllPreviousPositions',\n ReferencedPositions = 'ReferencedPositions'\n}\n\n/** This class holds properties that describe retention types in position. Retention / hold out usually means that a service is provided and kept available for a specific amount of time, e.g. fences on a construction site */\nexport interface PositionHoldOutPropertiesDto {\n /** Elements GUID identifier. */\n id: string;\n /** The actual type */\n holdOutType?: HoldOutTypeDto | undefined;\n /** The duration of the period */\n holdOutDuration?: number | undefined;\n /** The time unit of the period */\n holdOutDurationUnit?: HoldOutDurationUnitDto | undefined;\n /** References to base positions */\n basePositionReferences?: string[] | undefined;\n}\n\n/** Types of retentions to be used in positions */\nexport enum HoldOutTypeDto {\n Unknown = 'Unknown',\n Base = 'Base',\n Extension = 'Extension',\n Rent = 'Rent'\n}\n\n/** Duration used in retention positions */\nexport enum HoldOutDurationUnitDto {\n Unknown = 'Unknown',\n Minutes = 'Minutes',\n Hours = 'Hours',\n Days = 'Days',\n Weeks = 'Weeks',\n Months = 'Months'\n}\n\n/** Price catalogue data represents assumed or estimated prices from a catalogue source */\nexport interface PriceCatalogueDataDto {\n /** Elements GUID identifier. */\n id: string;\n /** The lower bound of the unit price */\n unitPriceFrom?: number | undefined;\n /** The upper bound of the unit price */\n unitPriceTo?: number | undefined;\n /** The average unit price */\n unitPriceAverage?: number | undefined;\n /** The lower bound of the wage price */\n wagePriceFrom?: number | undefined;\n /** The upper bound of the wage price */\n wagePriceTo?: number | undefined;\n /** The average wage price */\n wagePriceAverage?: number | undefined;\n}\n\n/** An ExecutionDescription is used to give more details for certain items, especially on how they are meant to be executed. */\nexport interface ExecutionDescriptionDto extends IElementDto {\n /** Blocks within an ExecutionDescription contain the actual information. */\n blocks?: NoteTextDto[] | undefined;\n /** Labels this ExecutionDescription. */\n label?: string | undefined;\n /** Uniquely identifies this ExecutionDescription. */\n identifier?: string | undefined;\n elementType?: string | undefined;\n}\n\n/** Represents an element that holds text information. */\nexport interface NoteTextDto extends IElementDto {\n /** If this is set to true, this text is meant to not be seen as part of the regular elements hierarchy but as a special opening text at the beginning of the project. For example, in GAEB XML, this would map to the GAEB.Award.AddText. Typically, such texts describe project-wide contractual definitions. If this is set to true, this NoteText should be placed at the top of the elements hierarchy directly in the ServiceSpecification.Elements group, otherwise it will likely not be treated correctly when exporting to GAEB. You can only set IsOpeningText or IsClosingText to true. */\n isOpeningText?: boolean | undefined;\n /** If this is set to true, this text is meant to not be seen as part of the regular elements hierarchy but as a special closing text at the end of the project. For Example, in GAEB XML, this would map to the GAEB.AddText. Typically, such texts are used to describe project wide finishing descriptions. If this is set to true, this NoteText should be placed at the top of the elements hierarchy directly in the ServiceSpecification.Elements group, otherwise it will likely not be treated correctly when exporting to GAEB. You can only set IsOpeningText or IsClosingText to true. */\n isClosingText?: boolean | undefined;\n /** Short description for this DescriptionBase element. */\n shortText?: string | undefined;\n /** Indicates if this DescriptionBase element contains Buyer or Bidder additions to the text. */\n additionType?: AdditionTypeDto | undefined;\n /** Detailed description for this DescriptionBase element. When the HtmlLongText is set, this is automatically overwritten and filled with the appropriate plain text representation of the Html text. Vice versa, setting this property overrides the HtmlLongText. */\n longText?: string | undefined;\n /** This contains the Html representation of the Longtext. When the LongText is set, this is automatically overwritten and filled with the appropriate Html representation of the plaintext. Vice versa, setting this property overrides the LongText. GAEB 90 and GAEB 2000 exports do not support any image functionality. In GAEB XML, only images that use an embedded Base64 data uri are exported, regular url references are cleared before written out. */\n htmlLongText?: string | undefined;\n /** This is an optional internal identifier that may be used to add additional information to this NoteText. It is not supported in GAEB import or export. */\n identifier?: string | undefined;\n /** This represents a standardized description. This means that instead of solely relying on texts to describe a service, external standards and definitions are referenced for a common understanding. */\n standardizedDescription?: StandardizedDescriptionDto | undefined;\n elementType?: string | undefined;\n /** This is an identifier specific for this description. Some exchange formats, like GAEB XML, use it to identify descriptions. It's different to an elements identifier in that it should only apply to the description component, meaning the text itself. */\n descriptionId?: string | undefined;\n /** This class models special properties that only apply to some exchange scenarios where ÖNorm is used. It is special for NoteTexts. */\n oenormNoteTextProperties?: OenormNoteTextPropertiesDto | undefined;\n readonly hasBidderCommentInHtmlLongText?: boolean | undefined;\n}\n\n/** This class models special properties that only apply to some exchange scenarios where ÖNorm is used. It is special for NoteTexts. */\nexport interface OenormNoteTextPropertiesDto {\n /** This indicates where the content of this element originates, if set. It corresponds to 'herkunftskennzeichen' in ÖNorm */\n originCode?: OenormOriginCodeDto | undefined;\n}\n\n/** This is a grouping IElement that holds other IElements within. */\nexport interface ServiceSpecificationGroupDto extends IElementDto {\n /** The hourly wage that is used within this ElementContainerBase. Will be propagated to child elements. */\n readonly projectHourlyWage?: number | undefined;\n /** The tax rate that is used within this ElementContainerBase. Will be propagated to child elements. */\n projectTaxRate?: number | undefined;\n /** The price components that are used within this project. They are ignored during Json deserialization because they will be set from the parent project. */\n projectPriceComponents?: string[] | undefined;\n /** The ItemNumberSchema that is used within this project. */\n projectItemNumberSchema?: ItemNumberSchemaDto | undefined;\n /** The IElements within this ElementContainerBase. */\n elements?: IElementDto[] | undefined;\n /** The label used in the parent Project to mark labour time, e.g. \"Hours\" or \"Stunden\". */\n readonly projectLabourTimeLabel?: string | undefined;\n /** Indicates if there are child IElements that have conflicting, duplicated ItemNumbers or if any child ElementContainerBase elements themselves contain duplicate ItemNumber s. Will always indicate false when told to ignore duplicate item numbers. */\n readonly containsDuplicateItemNumbers?: boolean | undefined;\n /** Indicates if there are child IElements that have conflicting, duplicated Ids or if any child ElementContainerBase elements themselves contain duplicate Id s. Will always indicate false when told to ignore duplicate item numbers. */\n readonly containsDuplicateElementIds?: boolean | undefined;\n /** Indicate if duplicated ItemNumbers within child elements are to be ignored. Will not perform checks for duplicates if yes. */\n ignoreDuplicateItemNumbers?: boolean | undefined;\n /** If this is set to true, the ProjectCatalogues property will not be propagated to child elements. This is useful in mapping scenarios, where you want to disable propagation for multiple changes, and only enable it once you have mapped all properties */\n ignoreProjectCataloguePropagation?: boolean | undefined;\n /** Indicate if duplicated Ids within child elements are to be ignored. Will not perform checks for duplicates if yes. */\n ignoreDuplicateElementIds?: boolean | undefined;\n /** Price composition by tax rate. */\n totalPriceGrossByTaxRate?: GrossPriceComponentDto[] | undefined;\n /** Internally used to indicate that a propagation is currently done, this is done to not recalculate every single result from a lot of changes when it is sufficient to calculate the total price at once. */\n ignoreChildPriceUpdates?: boolean | undefined;\n /** Net price after applied deductions. */\n readonly deductedPrice?: number | undefined;\n /** Factor of applied deductions to the total price. For example, \"0.03\" means that a 3% deduction is to be applied. */\n deductionFactor?: number | undefined;\n /** The exact amount of the discount as an absolute value. For backwards compatibility reasons, setting this value will also set a calculated value to DeductionFactor, which will also be updated in case the total price is changed to reflect a relative value of the absolute discount sum. */\n absoluteDeduction?: number | undefined;\n /** Will return this ElementContainerBase's total price. */\n readonly totalPrice?: number | undefined;\n /** The total gross price for this ElementContainerBase including all child elements. */\n readonly totalPriceGross?: number | undefined;\n /** Total gross price after applied deductions. */\n readonly totalPriceGrossDeducted?: number | undefined;\n /** Indicates the PriceType of this ElementContainerBase, whether it should factor into total costs or not. */\n priceType?: PriceTypeDto | undefined;\n /** Description for this ServiceSpecificationGroup. */\n shortText?: string | undefined;\n /** Indicates if this service specification group is commissioned (and therefore should be executed), postponed for later or undefined. */\n comissionStatus?: ComissionStatusDto | undefined;\n /** The ItemNumber for this INumberedElement interface. */\n itemNumber?: ItemNumberDto | undefined;\n elementType?: string | undefined;\n /** This indicates if this group is the parent of a lot. See the documentation for more information about working with lots. */\n readonly isLot?: boolean | undefined;\n /** If this group is an alternative for a base group, then this property should point to the id of the group in this service specification that it can replace. If this is an alternative group to a base group, the PriceType should typically be set to \"WithoutTotal\" so this group does not factor into total costs. The PriceType is not changed when this property is set */\n alternativeTo?: string | undefined;\n /** This class models special properties that only apply to some exchange scenarios where ÖNorm is used. */\n oenormProperties?: OenormPropertiesDto | undefined;\n /** This is a zero based hierarchy level. It's set automatically when used in the context of a Project, and can be used to identify the hierarchy level of the current element. */\n hierarchyLevel?: number | undefined;\n /** This indicates, if this element is part of an addendum an, if yes, with what status. */\n addendumStatus?: AddendumStatusDto | undefined;\n /** This is an optional property that can be used together with AlternativeTo. If this is set, you can indicate which alternative group a specific group is assigned to. That way, if you specifiy multiple alternative ServiceSpecificationGroups with the same AlternativeIdentifier, you can indicate that to replace a single base ServiceSpecificationGroup, multiple alternative ServiceSpecificationGroups should be used. This property is not checked or managed automatically, so it is possible for this property to become invalid, by for example setting this property but not setting a base group via AlternativeTo. */\n alternativeIdentifier?: number | undefined;\n /** This is an optional property that can be used together with AlternativeTo and AlternativeGroupIdentifier. If this is set, you can indicate which alternative group a specific group is assigned to. That way, you can specify the id (in integer format) for the alternative group this group belongs to. It's different to AlternativeIdentifier in that the other property describes the id of the group, while this property here describes the group itself. If a group only has set AlternativeGroupIdentifier but not AlternativeIdentifier, then it likely is a base group for a specific group. This property is not checked or managed automatically, so it is possible for this property to become invalid, by for example setting this property but not setting a base group via AlternativeTo. */\n alternativeGroupIdentifier?: number | undefined;\n}\n\n/** This is used in an ElementContainerBase to hold the price composition. */\nexport interface GrossPriceComponentDto {\n /** This components tax rate. */\n taxRate?: number | undefined;\n /** This is the factor of applied deductions for this component */\n deductionFactor?: number | undefined;\n /** The total net price for all components of a given tax rate. */\n totalNet?: number | undefined;\n /** The resulting price component after applied deductions */\n readonly totalDeducted?: number | undefined;\n /** The total tax amount for all components of a given tax rate. */\n readonly totalTax?: number | undefined;\n /** The total gross price for all components of a given tax rate. */\n readonly totalGross?: number | undefined;\n /** The total gross price for all components of a given tax rate, after applied deductions. */\n readonly totalGrossDeducted?: number | undefined;\n /** The total tax amount for all components of a given tax rate, after applied deductions. */\n readonly totalTaxDeducted?: number | undefined;\n}\n\n/** This class models special properties that only apply to some exchange scenarios where ÖNorm is used. */\nexport interface OenormPropertiesDto {\n /** This indicates where the content of this element originates, if set. It corresponds to 'herkunftskennzeichen' in ÖNorm */\n originCode?: OenormOriginCodeDto | undefined;\n /** This marks if the opening texts within this element are considered free text. It corresponds to 'vorbemerkungskennzeichen' in ÖNorm. */\n openingTextIsFreeText?: boolean | undefined;\n}\n\n/** Indicates a ServiceSpecification's exchange phase, based on the GAEB exchange phases. */\nexport enum ExchangePhaseDto {\n Undefined = 'Undefined',\n Base = 'Base',\n CostEstimate = 'CostEstimate',\n OfferRequest = 'OfferRequest',\n Offer = 'Offer',\n SideOffer = 'SideOffer',\n Grant = 'Grant'\n}\n\n/** Indicates where a service specification was originally created. */\nexport enum OriginDto {\n Self = 'Self',\n Gaeb90 = 'Gaeb90',\n Gaeb2000 = 'Gaeb2000',\n GaebXml = 'GaebXml',\n Oenorm = 'Oenorm',\n Reb = 'Reb',\n Sia = 'Sia'\n}\n\n/** Holds global price information for a ServiceSpecification */\nexport interface PriceInformationDto {\n /** Elements GUID identifier. */\n id: string;\n /** The amount of currency per one hour of manual labour work in this project. */\n hourlyWage?: number | undefined;\n /** The final, total price will be deducted by this rate. */\n deductionFactor?: number | undefined;\n /** This is given when there is only one flat price for the whole service specification. */\n flatSum?: number | undefined;\n /** Global tax rate for the project. Note that certain elements may have a different, specific tax rate. */\n taxRate?: number | undefined;\n /** This property indicates if the TaxRate property is actually zero (0) or if it's just unset. The TaxRate is a non-nullable property, so it can't be null and therefore a distinction between unset and zero relies on this additional property. When exporting to GAEB, this can be used e.g. to decide whether or not the tax rate should be serialized. This property is automtically set to false when the TaxRate is set to any value, even zero. If the TaxRate is not set to zero, this property will always return false and can not be set to true. */\n hasUnsetTaxRate?: boolean | undefined;\n /** Trade discounts for offered in this ServiceSpecification. */\n tradeDiscounts?: TradeDiscountDto[] | undefined;\n}\n\n/** This class holds information about offered trade discounts (Skonto in German) */\nexport interface TradeDiscountDto {\n /** Elements GUID identifier. */\n id: string;\n /** The amount of days for how long a declared trade discount applies. Must be a positive number, negative values will be ignored and not set. */\n deadline?: number | undefined;\n /** The rate of the trade discount. */\n rate?: number | undefined;\n}\n\n/** This class does not represent a typical `TimeSpan` but has a scalar value int Duration and a DurationUnit Unit to represent durations as typically used in contracts, e.g. 5 Months */\nexport interface WarrantyDurationDto {\n /** The scalar value of the duration. This value must be equal to or bigger than zero (>= 0). Negative values can not be set and will be ignored. */\n duration?: number | undefined;\n /** The unit of the duration */\n unit?: DurationUnitDto | undefined;\n}\n\n/** This enumeration represents the unit of a duration */\nexport enum DurationUnitDto {\n Months = 'Months',\n Years = 'Years'\n}\n\n/** This class represents properties used in commerce exchange scenarios */\nexport interface ServiceSpecificationCommercePropertiesDto {\n /** The date until the price is valid or fixed. */\n fixedPriceDate?: Date | undefined;\n /** The date of the delivery voucher note. */\n deliveryVoucherDate?: Date | undefined;\n /** The actual date of delivery. */\n deliveryDate?: Date | undefined;\n /** The number of the inquiry, usually in a context of offer requests. */\n inquiryNumber?: string | undefined;\n /** The number of the offer, usually in a context of an offer. */\n offerNumber?: string | undefined;\n /** The order number, usually in the context of a grant or contract. */\n orderNumber?: string | undefined;\n /** The order confirmation number */\n orderConfirmationNumber?: string | undefined;\n /** The number of the delivery, e.g. on the delivery note voucher. */\n deliveryNumber?: string | undefined;\n /** The reference number of the customer / buyer. */\n customerReferenceNumber?: string | undefined;\n /** The reference number of the supplier / bidder. */\n supplierReferenceNumber?: string | undefined;\n /** The type of shippment. */\n shippingType?: string | undefined;\n /** The type of the price inquiry. */\n inquiryType?: CommerceInquiryTypeDto | undefined;\n}\n\n/** This enum represents types of price inquiries */\nexport enum CommerceInquiryTypeDto {\n Unknown = 'Unknown',\n Project = 'Project',\n Immediate = 'Immediate',\n Exhibition = 'Exhibition'\n}\n\n/** A Project contains all relevant information for a construction project. */\nexport interface ProjectDto {\n /** Elements GUID identifier. */\n id: string;\n /** This property controls the accuracy of all price properties, meaning how many decimal places are preserved in calculations. It defaults to DEFAULT_PRICE_ACCURACY. Please see the Dangl.AVA documentation for further information about decimal precision. If UnitPriceAccuracy is set, then this property is ignored for unit prices. */\n priceAccuracy?: number | undefined;\n /** This property controls the accuracy of position unit price properties, meaning how many decimal places are preserved in calculations. Please see the Dangl.AVA documentation for further information about decimal precision. This can be separately set from PriceAccuracy, and it only controls the accuracy of the unit price of positions, not the total price. It defaults to null, which means the standard PriceAccuracy is used for unit prices. */\n unitPriceAccuracy?: number | undefined;\n /** This forces total prices to be the strict product of quantities times unit price in positions. It is enabled by default. If this is disabled, both the unit price and the total price of positions is calculated from the non-rounded values. Please see the documentation for a more detailed explanation of this setting. */\n forceStrictTotals?: boolean | undefined;\n /** This property controls the rounding mode of all price properties, meaning how rounding of decimal places is performed in price calculations. It defaults to DEFAULT_ROUNDING_MODE. Please see the Dangl.AVA documentation for further information about decimal precision. */\n priceRoundingMode?: PriceRoundingModeDto | undefined;\n /** The ProjectInformation contains information that describes the project and its structure. */\n projectInformation?: ProjectInformationDto | undefined;\n /** The ServiceSpecifications in this Project. */\n serviceSpecifications?: ServiceSpecificationDto[] | undefined;\n /** This is used to store the GAEB XML Id within this Project. This data is not used for any calculations or evaluations but only for GAEB serialization and deserialization. */\n gaebXmlId?: string | undefined;\n}\n","export enum ModeViewType {\n Tree = 'Tree',\n List = 'List',\n Table = 'Table'\n}\n","// This file is automatically generated as part of the build process\n\nexport const version = {\n version: \"1.2.2\",\n commitInfo: \"Branch.main.Sha.d4ae6befb47289c2725648990b5c1945880fd102\",\n commitDate: \"2025-01-16\",\n commitHash: \"d4ae6befb47289c2725648990b5c1945880fd102\",\n informationalVersion: \"1.2.2+Branch.main.Sha.d4ae6befb47289c2725648990b5c1945880fd102\",\n buildDateUtc: new Date(Date.UTC(2025, 0, 16, 15, 30, 4))\n}\n","export interface ITextWords {\n textSearch: string;\n textNothing: string;\n textNothingFiltered: string;\n textAll: string;\n tooltipAllOpen: string;\n tooltipAllClose: string;\n tooltipAllAdd: string;\n tooltipAllRemove: string;\n defaultNameNoteText: string;\n defaultNameDescription: string;\n defaultNameGroup: string;\n defaultNamePosition: string;\n}\n\nexport const DEFAULT_TEXT_WORDS: ITextWords = {\n textSearch: 'Search',\n textNothing: 'Nothing',\n textNothingFiltered: 'No Filter',\n textAll: 'All',\n tooltipAllOpen: 'Expand all',\n tooltipAllClose: 'Collapse all',\n tooltipAllAdd: 'Add all',\n tooltipAllRemove: 'Remove all',\n defaultNameNoteText: 'Note Text',\n defaultNameDescription: 'Description',\n defaultNameGroup: 'Group',\n defaultNamePosition: 'Position'\n};\n\nexport const germanTextsAva: ITextWords = {\n textSearch: 'Suche',\n textNothing: 'Nichts',\n textNothingFiltered: 'Kein Filter',\n textAll: 'Alle',\n tooltipAllOpen: 'Alle aufklappen',\n tooltipAllClose: 'Alle zuklappen',\n tooltipAllAdd: 'Alle hinzufügen',\n tooltipAllRemove: 'Alle entfernen',\n defaultNameNoteText: 'Hinweis',\n defaultNameDescription: 'Beschreibung',\n defaultNameGroup: 'Gruppe',\n defaultNamePosition: 'Position'\n};\n","import { BehaviorSubject, Observable, distinctUntilChanged, map } from 'rxjs';\n\nimport { ITextWords, germanTextsAva, DEFAULT_TEXT_WORDS } from '../constants/defaultTextWords';\nimport { FilterFunction, IConfigurationTree } from '../model/config-tree.model';\nimport { IFunctionViewLine } from '../model/function-view-line.model';\nimport { SelectedElement } from '../model/selecting.model';\nimport { TableColumnType } from '../model/tableColumnType';\nimport { IKeyboardOperationConfig } from '../services/keyboard-operation.service';\n\nexport class ConfigurationTreeService {\n private _textWords = { ...DEFAULT_TEXT_WORDS };\n private _indent = '20px';\n private _functionView: IFunctionViewLine[] = [];\n private _selectedColor: string = '';\n private _allowDblClick = true;\n private _mouseAwareKeyboardControl = true;\n private _addTableColumns: TableColumnType[] = [];\n private _isSelectionMode = false;\n private _initiallySelectedElements: SelectedElement[] = [];\n private _customKeyboardOperationConfig: IKeyboardOperationConfig | null = null;\n private _listFilterFunc: FilterFunction[] = [];\n\n private treeConfigSource = new BehaviorSubject<IConfigurationTree>(this.getDefaultConfiguration());\n public treeConfig$: Observable<IConfigurationTree> = this.treeConfigSource.asObservable();\n constructor() {}\n\n public setTreeConfig(value: IConfigurationTree): void {\n this.treeConfigSource.next(value);\n }\n\n public getCurrentTreeConfig(): IConfigurationTree | null {\n return this.treeConfigSource.getValue();\n }\n\n public getTextWordsFromConfig(): Observable<ITextWords | null> {\n return this.treeConfig$.pipe(\n map((config) => {\n const configTextWords =\n config?.textWords === 'en' ? DEFAULT_TEXT_WORDS : config?.textWords === 'de' ? germanTextsAva : config?.textWords;\n\n return { ...this._textWords, ...configTextWords };\n }),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getIndentFromConfig(): Observable<string> {\n return this.treeConfig$.pipe(\n map((config) => config?.indent || ''),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getFunctionViewFromConfig(): Observable<IFunctionViewLine[]> {\n return this.treeConfig$.pipe(\n map((config) => config?.functionView || []),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getSelectedColorFromConfig(): Observable<string> {\n return this.treeConfig$.pipe(\n map((config) => config?.selectedColor || ''),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getAllowDblClickFromConfig(): Observable<boolean> {\n return this.treeConfig$.pipe(\n map((config) => config?.allowDblClick || false),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getAddTableColumnsFromConfig(): Observable<TableColumnType[]> {\n return this.treeConfig$.pipe(\n map((config) => config?.addTableColumns || []),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getIsSelectionModeFromConfig(): Observable<boolean> {\n return this.treeConfig$.pipe(\n map((config) => config?.isSelectionMode || false),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getInitiallySelectedElementsViewFromConfig(): Observable<SelectedElement[]> {\n return this.treeConfig$.pipe(\n map((config) => config?.initiallySelectedElements || []),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getMouseAwareKeyboardControlFromConfig(): Observable<boolean> {\n return this.treeConfig$.pipe(\n map((config) => config?.mouseAwareKeyboardControl || false),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getCustomKeyboardOperationConfigFromConfig(): Observable<IKeyboardOperationConfig | null> {\n return this.treeConfig$.pipe(\n map((config) => config?.customKeyboardOperationConfig || null),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getListFilterFuncFromConfig(): Observable<FilterFunction[]> {\n return this.treeConfig$.pipe(\n map((config) => config?.listFilterFunc || []),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n private getDefaultConfiguration(): IConfigurationTree {\n return {\n textWords: this._textWords,\n indent: this._indent,\n functionView: this._functionView,\n selectedColor: this._selectedColor,\n allowDblClick: this._allowDblClick,\n addTableColumns: this._addTableColumns,\n isSelectionMode: this._isSelectionMode,\n initiallySelectedElements: this._initiallySelectedElements,\n mouseAwareKeyboardControl: this._mouseAwareKeyboardControl,\n customKeyboardOperationConfig: this._customKeyboardOperationConfig,\n listFilterFunc: this._listFilterFunc\n };\n }\n}\n","import { IElementDto, ServiceSpecificationGroupDto } from '../model/ava-models';\n\nexport class ExpandParentGroupService {\n constructor() {}\n\n expandParentGroups(element: IElementDto, flatElements: IElementDto[] | null, expansionState: { [id: string]: boolean }): void {\n if (!flatElements?.length) {\n return;\n }\n\n const listGroup: ServiceSpecificationGroupDto[] = flatElements.filter(\n (item) => (item as ServiceSpecificationGroupDto).elements?.length\n );\n\n if (!listGroup.length) {\n return;\n }\n\n const findAndExpandParent = (currentElement: IElementDto): ServiceSpecificationGroupDto | null => {\n for (const itemGroup of listGroup) {\n if (expansionState[itemGroup.id]) {\n continue;\n }\n\n if (itemGroup.elements?.find((item) => currentElement.id === item.id)) {\n expansionState[itemGroup.id] = true;\n return itemGroup;\n }\n }\n return null;\n };\n\n const expandRecursive = (innerElement: IElementDto): void => {\n const parentGroup = findAndExpandParent(innerElement);\n if (parentGroup) {\n expandRecursive(parentGroup);\n }\n };\n\n expandRecursive(element);\n }\n}\n","import { ExecutionDescriptionDto, IElementDto, NoteTextDto, PositionDto, ServiceSpecificationGroupDto } from '../model';\n\nexport const DEFAULT_FILTERS: ((element: IElementDto, filter: string) => boolean | undefined)[] = [\n (element: IElementDto, filter: string) => {\n if (\n element.elementType === 'PositionDto' ||\n element.elementType === 'ServiceSpecificationGroupDto' ||\n element.elementType === 'NoteTextDto'\n ) {\n return (element as PositionDto | ServiceSpecificationGroupDto | NoteTextDto).shortText?.trim().toLocaleLowerCase().includes(filter);\n }\n\n return false;\n },\n (element: IElementDto, filter: string) => {\n if (element.elementType === 'ExecutionDescriptionDto') {\n return (element as ExecutionDescriptionDto).label?.trim().toLocaleLowerCase().includes(filter);\n }\n\n return false;\n },\n (element: IElementDto, filter: string) => {\n if (element.elementType === 'PositionDto' || element.elementType === 'ServiceSpecificationGroupDto') {\n return (element as PositionDto | ServiceSpecificationGroupDto).itemNumber?.stringRepresentation?.includes(filter);\n }\n\n return false;\n }\n];\n","export const defaults = {\n doubleClickTimeoutInMilliseconds: 300\n};\n","import { Injectable } from '@angular/core';\n\nimport { Observable, ReplaySubject, of } from 'rxjs';\n\nimport { DEFAULT_FILTERS } from '../constants';\nimport { IElementDto, ServiceSpecificationDto, ServiceSpecificationGroupDto } from '../model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FlatElementsService {\n private _flatElementsDto: IElementDto[] = [];\n private flatElementsDtoSource = new ReplaySubject<IElementDto[]>(1);\n flatElementsDto = this.flatElementsDtoSource.asObservable();\n\n private objectElementsDto!: { [id: string]: IElementDto };\n\n listFilterFunc = DEFAULT_FILTERS;\n\n constructor() {}\n\n setElementsDto(elementsDto: ServiceSpecificationDto): void {\n this._flatElementsDto = FlatElementsService.getFlatElements(elementsDto);\n this.objectElementsDto = FlatElementsService.getObjectElements(this._flatElementsDto);\n this.flatElementsDtoSource.next(this._flatElementsDto);\n }\n\n public static getFlatElements(container: { elements?: IElementDto[] | null }): IElementDto[] {\n const flatElements: IElementDto[] = [];\n\n if (container.elements) {\n container.elements.forEach((e) => {\n flatElements.push(e);\n if (e.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n const group = e as ServiceSpecificationGroupDto;\n flatElements.push(...this.getFlatElements(group));\n }\n });\n }\n\n return flatElements;\n }\n\n public static getObjectElements(elements: IElementDto[]): { [id: string]: IElementDto } {\n const objectElements: { [id: string]: IElementDto } = {};\n if (elements?.length) {\n elements.forEach((e) => {\n if (e?.id) {\n objectElements[e.id] = e;\n }\n });\n }\n return objectElements;\n }\n\n getOneElementById(id: string | null): Observable<IElementDto | null> {\n return of(id ? this.objectElementsDto?.[id] || null : null);\n }\n\n checkFilterValue(element: IElementDto, filterValue: string): boolean {\n const cleanFilter = filterValue.trim().toLocaleLowerCase();\n for (const func of this.listFilterFunc) {\n if (func(element, cleanFilter)) {\n return true;\n }\n }\n return false;\n }\n\n jumpNextNode(delta: number, currentElement: IElementDto | null, conditionFunc?: (e: IElementDto) => boolean): IElementDto | null {\n if (!this._flatElementsDto.length || (conditionFunc && !this._flatElementsDto.find((item) => conditionFunc(item)))) {\n return null;\n }\n const startElement = currentElement || this._flatElementsDto[0];\n let nextIndex = this._flatElementsDto.findIndex((item) => startElement.id === item.id);\n if (currentElement) {\n nextIndex = this.getNextIndex(this._flatElementsDto.length, nextIndex, delta);\n }\n while (conditionFunc && !conditionFunc(this._flatElementsDto[nextIndex])) {\n nextIndex = this.getNextIndex(this._flatElementsDto.length, nextIndex, delta);\n }\n return this._flatElementsDto[nextIndex];\n }\n\n private getNextIndex(length: number, index: number, delta: number): number {\n let nextIndex = index + delta;\n nextIndex = nextIndex < 0 ? length - 1 : nextIndex;\n nextIndex = nextIndex > length - 1 ? 0 : nextIndex;\n return nextIndex;\n }\n\n public getObjectElementsDto(): { [id: string]: IElementDto } {\n return this.objectElementsDto;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { ReplaySubject } from 'rxjs';\n\nimport { IElementDto } from '../model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SelectElementService {\n private preselectedElementSource = new ReplaySubject<IElementDto | null>(1);\n private preselectedElementWasNull = false;\n preselectedElement = this.preselectedElementSource.asObservable();\n\n private selectClickElementSource = new ReplaySubject<IElementDto | null>(1);\n selectClickElement = this.selectClickElementSource.asObservable();\n\n private selectDblClickElementSource = new ReplaySubject<IElementDto>(1);\n selectDblClickElement = this.selectDblClickElementSource.asObservable();\n\n private selectContextMenuElementSource = new ReplaySubject<{ position: { x: string; y: string }; node: IElementDto }>(1);\n selectContextMenuElement = this.selectContextMenuElementSource.asObservable();\n\n setPreselectedElement(element: IElementDto | null): void {\n this.preselectedElementSource.next(element);\n this.preselectedElementWasNull = element == null;\n }\n\n setClickElement(element: IElementDto | null): void {\n this.selectClickElementSource.next(element);\n if (!this.preselectedElementWasNull) {\n this.preselectedElementSource.next(null);\n }\n }\n\n setDblClickElement(element: IElementDto): void {\n this.selectDblClickElementSource.next(element);\n }\n\n setContextMenuElement(data: { position: { x: string; y: string }; node: IElementDto }): void {\n this.selectContextMenuElementSource.next(data);\n }\n}\n","import { inject } from '@angular/core';\n\nimport { FlatElementsService } from './flat-elements.service';\nimport { SelectElementService } from './select-element.service';\n\nimport { IElementDto } from '../model/ava-models';\n\nexport interface IKeyboardOperationConfig {\n operations: IKeyboardOperations;\n}\n\nexport enum KeyboardOperationType {\n MoveSelectedPositionUp = 'moveSelectedPositionUp',\n MoveSelectedPositionDown = 'moveSelectedPositionDown',\n MoveChosenPositionDown = 'moveChosenPositionDown',\n MoveChosenPositionUp = 'moveChosenPositionUp',\n ClearChosenPosition = 'clearChosenPosition',\n SelectChosenPosition = 'selectChosenPosition'\n}\n\nexport type IKeyboardOperations = {\n [key in KeyboardOperationType]?: IKeyboardOperation;\n};\n\nexport interface IKeyboardOperation {\n disabled?: boolean;\n keyEvent?: string;\n}\n\nexport class KeyboardOperationService {\n private defaultKeyboardOperationConfig: IKeyboardOperationConfig = {\n operations: {\n moveSelectedPositionUp: { disabled: false, keyEvent: 'F11' },\n moveSelectedPositionDown: { disabled: false, keyEvent: 'F12' },\n moveChosenPositionDown: { disabled: false, keyEvent: 'ArrowDown' },\n moveChosenPositionUp: { disabled: false, keyEvent: 'ArrowUp' },\n clearChosenPosition: { disabled: false, keyEvent: 'Escape' },\n selectChosenPosition: { disabled: false, keyEvent: 'Enter' }\n }\n };\n\n private flatElementsService = inject(FlatElementsService);\n private selectElementService = inject(SelectElementService);\n\n private currentConfig = { ...this.defaultKeyboardOperationConfig };\n\n constructor() {}\n\n getConfig() {\n return this.currentConfig;\n }\n\n mergeConfigOperation(config: IKeyboardOperationConfig) {\n this.currentConfig = this.deepMerge(this.currentConfig, config);\n }\n\n private deepMerge<T>(obj1: T, obj2: T): T {\n const mergedConfig: T = { ...obj1 };\n\n for (const key in obj2) {\n if (Object.prototype.hasOwnProperty.call(obj2, key)) {\n if (\n Object.prototype.hasOwnProperty.call(mergedConfig, key) &&\n typeof mergedConfig[key] === 'object' &&\n mergedConfig[key] !== null &&\n typeof obj2[key] === 'object' &&\n obj2[key] !== null\n ) {\n mergedConfig[key] = this.deepMerge(mergedConfig[key], obj2[key]);\n } else {\n mergedConfig[key] = obj2[key];\n }\n }\n }\n\n return mergedConfig;\n }\n\n handleKeyboardEvent(\n keyEvent: KeyboardEvent,\n element: IElementDto | null\n ): {\n operation: KeyboardOperationType;\n nextElement: IElementDto | null;\n } | null {\n let nextElement;\n\n if (\n this.currentConfig.operations.moveSelectedPositionUp?.keyEvent === keyEvent.key &&\n !this.currentConfig.operations.moveSelectedPositionUp?.disabled\n ) {\n keyEvent.preventDefault();\n nextElement = this.flatElementsService.jumpNextNode(-1, element);\n this.selectElementService.setClickElement(nextElement);\n return {\n operation: KeyboardOperationType.MoveSelectedPositionUp,\n nextElement: nextElement\n };\n }\n\n if (\n this.currentConfig.operations.moveSelectedPositionDown?.keyEvent === keyEvent.key &&\n !this.currentConfig.operations.moveSelectedPositionDown?.disabled\n ) {\n keyEvent.preventDefault();\n nextElement = this.flatElementsService.jumpNextNode(1, element);\n this.selectElementService.setClickElement(nextElement);\n return {\n operation: KeyboardOperationType.MoveSelectedPositionDown,\n nextElement: nextElement\n };\n }\n\n if (\n this.currentConfig.operations.moveChosenPositionDown?.keyEvent === keyEvent.key &&\n !this.currentConfig.operations.moveChosenPositionDown?.disabled\n ) {\n keyEvent.preventDefault();\n nextElement = this.flatElementsService.jumpNextNode(1, element);\n this.selectElementService.setPreselectedElement(nextElement?.id === element?.id ? null : nextElement);\n return {\n operation: KeyboardOperationType.MoveChosenPositionDown,\n nextElement: nextElement\n };\n }\n\n if (\n this.currentConfig.operations.moveChosenPositionUp?.keyEvent === keyEvent.key &&\n !this.currentConfig.operations.moveChosenPositionUp?.disabled\n ) {\n keyEvent.preventDefault();\n nextElement = this.flatElementsService.jumpNextNode(-1, element);\n this.selectElementService.setPreselectedElement(nextElement?.id === element?.id ? null : nextElement);\n return {\n operation: KeyboardOperationType.MoveChosenPositionUp,\n nextElement: nextElement\n };\n }\n\n if (\n this.currentConfig.operations.selectChosenPosition?.keyEvent === keyEvent.key &&\n !this.currentConfig.operations.selectChosenPosition?.disabled\n ) {\n keyEvent.preventDefault();\n this.selectElementService.setClickElement(element);\n return {\n operation: KeyboardOperationType.SelectChosenPosition,\n nextElement: null\n };\n }\n\n if (\n this.currentConfig.operations.clearChosenPosition?.keyEvent === keyEvent.key &&\n !this.currentConfig.operations.clearChosenPosition?.disabled\n ) {\n keyEvent.preventDefault();\n this.selectElementService.setPreselectedElement(null);\n return {\n operation: KeyboardOperationType.ClearChosenPosition,\n nextElement: null\n };\n }\n\n return null;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { BehaviorSubject, ReplaySubject } from 'rxjs';\n\nimport { IElementDto, ServiceSpecificationGroupDto } from '../model/ava-models';\nimport { SelectedElement, SelectingElementsType } from '../model/selecting.model';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TreeNodeSelectionService {\n private treeNodeSelectingSource = new BehaviorSubject<{ [elementId: string]: SelectingElementsType }>({});\n treeNodeSelecting = this.treeNodeSelectingSource.asObservable();\n private _selectingElementsTreeData: SelectingElementsType[] | null = null;\n\n private selectingChangedSource = new ReplaySubject<SelectingElementsType[]>(1);\n selectingChanged = this.selectingChangedSource.asObservable();\n\n flatSelectedListId: string[] = [];\n\n constructor() {}\n\n setSelectingChanged(selectingChanged: SelectingElementsType[]): void {\n this.selectingChangedSource.next(selectingChanged);\n }\n\n loadSelectingElements(\n elements: IElementDto[] | null | undefined,\n parent: SelectingElementsType | null | undefined = null\n ): SelectingElementsType[] {\n const list: SelectingElementsType[] = [];\n if (elements && elements.length) {\n elements.forEach((element: IElementDto) => {\n const obj = {\n parent,\n elementId: element.id,\n checked: false\n } as SelectingElementsType;\n if (element.elementType === 'ServiceSpecificationGroupDto') {\n obj.indeterminate = false;\n obj.children = this.loadSelectingElements((<ServiceSpecificationGroupDto>element).elements, obj);\n }\n list.push(obj);\n this.treeNodeSelectingSource.value[element.id] = obj;\n });\n this._selectingElementsTreeData = list;\n }\n return list;\n }\n\n getTreeData() {\n return this._selectingElementsTreeData;\n }\n\n private changeAllChild(children: SelectingElementsType[], value: boolean): void {\n children.forEach((item: SelectingElementsType) => {\n item.checked = value;\n if (item.children) {\n item.indeterminate = false;\n this.changeAllChild(item.children, value);\n }\n });\n }\n\n private changeAllParent(parent: SelectingElementsType, value: boolean): void {\n parent.checked = value;\n if (parent.parent) {\n this.changeAllParent(parent.parent, value);\n }\n }\n\n changeSelecting(value: boolean, id: string, isUserChanged = true): void {\n const selectingNode = this.treeNodeSelectingSource.value[id];\n if (!selectingNode) {\n return;\n }\n\n selectingNode.checked = value;\n if (selectingNode.children) {\n selectingNode.indeterminate = false;\n if (isUserChanged) {\n this.changeAllChild(selectingNode.children, value);\n }\n }\n if (selectingNode.parent) {\n this.changeAllParent(selectingNode.parent, value);\n }\n this.getIndeterminate(selectingNode?.parent || null);\n if (isUserChanged) {\n this.treeNodeSelectingSource.next(this.treeNodeSelectingSource.value);\n }\n }\n\n private getIndeterminate(parentNode: SelectingElementsType | null | undefined): void {\n if (!parentNode) {\n return;\n }\n\n if (!parentNode.children || !parentNode.children.length) {\n return;\n }\n\n let resultIndeterminateSome = false;\n let resultIndeterminateAll = false;\n parentNode.children.forEach((item: SelectingElementsType) => {\n if (item.checked || item.indeterminate) {\n resultIndeterminateSome = true;\n }\n if (!item.checked) {\n resultIndeterminateAll = true;\n }\n });\n if (!resultIndeterminateSome) {\n parentNode.indeterminate = false;\n parentNode.checked = false;\n } else if (resultIndeterminateAll) {\n parentNode.indeterminate = true;\n parentNode.checked = false;\n } else {\n parentNode.indeterminate = false;\n parentNode.checked = true;\n }\n this.getIndeterminate(parentNode.parent);\n }\n\n changeAll(value: boolean): void {\n Object.values(this.treeNodeSelectingSource.value).forEach((e) => {\n this.changeSelecting(value, e.elementId, false);\n });\n this.treeNodeSelectingSource.next(this.treeNodeSelectingSource.value);\n }\n\n getFlatSelectedListId(selectedElements: SelectedElement[]): void {\n selectedElements.forEach((el) => {\n if (el.children) {\n this.getFlatSelectedListId(el.children);\n } else {\n this.flatSelectedListId.push(el.elementId);\n }\n });\n }\n\n getTreeRoot(treeRoot: SelectingElementsType[]): SelectingElementsType[] {\n const list: SelectingElementsType[] = [];\n treeRoot.forEach((item: SelectingElementsType) => {\n if (item.checked || item.indeterminate) {\n const obj: SelectingElementsType = { elementId: item.elementId };\n if (item.children) {\n obj.children = this.getTreeRoot(item.children);\n }\n list.push(obj);\n }\n });\n return list;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TreeHoverTooltipService {\n showElementOver(text: HTMLElement | null): void {\n if (!text) return;\n const rect = text.getBoundingClientRect();\n text.style.position = 'fixed';\n text.style.top = `${rect.top}px`;\n text.style.left = `${rect.left}px`;\n text.style.zIndex = '2000';\n }\n\n hideElementOver(text: HTMLElement | null): void {\n if (!text) return;\n text.style.position = 'static';\n text.style.top = ``;\n text.style.left = ``;\n text.style.zIndex = '';\n }\n}\n","import { Directive, HostListener, inject, Input } from '@angular/core';\n\nimport { TreeItemComponent } from '../components/tree-item/tree-item.component';\nimport { TreeHoverTooltipService } from '../services/tree-hover-tooltip.service';\n\ntype TimeoutType = ReturnType<typeof setTimeout>;\n\n@Directive({\n selector: '[avaHoverEffect]',\n standalone: true\n})\nexport class HoverEffectDirective {\n @Input('avaHoverEffect') itemText!: TreeItemComponent;\n private allowShow: TimeoutType | null = null;\n private treeHoverTooltipService = inject(TreeHoverTooltipService);\n\n @HostListener('mouseenter') onMouseEnter() {\n this.treeHoverTooltipService.showElementOver(this.itemText.textElement.nativeElement);\n }\n @HostListener('mouseup') onMouseUp() {\n this.allowShow = setTimeout(() => {\n this.hide();\n this.treeHoverTooltipService.showElementOver(this.itemText.textElement.nativeElement);\n }, 400);\n }\n\n @HostListener('wheel') onWheel() {\n this.hide();\n }\n @HostListener('scroll') onScroll() {\n this.hide();\n }\n @HostListener('mouseleave') onMouseLeave() {\n this.hide();\n }\n @HostListener('keydown') onKeyDown() {\n this.hide();\n }\n @HostListener('mouseout') onMouseOut() {\n this.hide();\n }\n\n @HostListener('mousemove', ['$event']) onMouseMove(event: MouseEvent) {\n const element = event.currentTarget as HTMLElement;\n const parent = element.closest('.ava-tree-wrapper');\n if (parent) {\n const rect = parent.getBoundingClientRect();\n if (event.x > rect.right) {\n this.onMouseLeave();\n }\n }\n }\n\n private hide(): void {\n if (this.allowShow) {\n clearTimeout(this.allowShow);\n this.allowShow = null;\n }\n this.treeHoverTooltipService.hideElementOver(this.itemText.textElement.nativeElement);\n }\n}\n","import { AfterViewInit, Directive, ElementRef, Input, OnDestroy, Renderer2 } from '@angular/core';\n\nimport { Subject, takeUntil } from 'rxjs';\n\nimport { IFunctionViewLine, IViewLine } from '../model';\nimport { ConfigurationTreeService } from '../services/configuration-tree.service';\nimport { FlatElementsService } from '../services/flat-elements.service';\n\n@Directive({\n selector: '[saveChangingView]'\n})\nexport class SaveChangingViewDirective implements AfterViewInit, OnDestroy {\n @Input() saveChangingView = 'text';\n private $destroy = new Subject<boolean>();\n constructor(\n private el: ElementRef<HTMLElement>,\n private renderer: Renderer2,\n private flatElementsService: FlatElementsService,\n private configurationTreeService: ConfigurationTreeService\n ) {}\n\n ngOnDestroy(): void {\n this.$destroy.next(true);\n this.$destroy.complete();\n }\n\n ngAfterViewInit(): void {\n this.updateElementStles();\n }\n\n private updateElementStles(): void {\n if (!this.el) {\n return;\n }\n const el = this.el.nativeElement;\n const id = el.id;\n\n if (!id) {\n return;\n }\n\n if (!this.renderer) {\n return;\n }\n this.configurationTreeService\n .getFunctionViewFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((functionView) => {\n const view: IViewLine | null = this.getChangedView(id, functionView);\n if (!view) {\n return;\n }\n\n switch (this.saveChangingView) {\n case 'icon':\n if (view.iconName) {\n el.textContent = view.iconName;\n }\n if (view.iconColor) {\n this.renderer.setStyle(el, 'color', view.iconColor);\n }\n break;\n case 'text':\n if (view.textBold) {\n this.renderer.setStyle(el, 'font-weight', view.textBold);\n }\n if (view.textColor) {\n this.renderer.setStyle(el, 'color', view.textColor);\n }\n break;\n }\n });\n }\n\n private getChangedView(id: string, functionView: IFunctionViewLine[]): IViewLine | null {\n const objectElementsDto = this.flatElementsService.getObjectElementsDto();\n if (objectElementsDto) {\n const element = objectElementsDto[id];\n if (element && functionView?.length) {\n for (const objectView of functionView) {\n if (objectView.func(element)) {\n return objectView.view;\n }\n }\n }\n }\n\n return null;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { IElementDto } from '../model';\n\n@Pipe({\n name: 'elementIconName'\n})\nexport class ElementIconNamePipe implements PipeTransform {\n transform(element: IElementDto): string {\n switch (element.elementTypeDiscriminator) {\n case 'NoteTextDto':\n return 'subject';\n case 'ExecutionDescriptionDto':\n return 'event';\n case 'ServiceSpecificationGroupDto':\n return 'folder_open';\n case 'PositionDto':\n return 'add';\n default:\n return '';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { IElementDto, PositionDto, ServiceSpecificationGroupDto } from '../model';\n\n@Pipe({\n name: 'elementItemNumber'\n})\nexport class ElementItemNumberPipe implements PipeTransform {\n transform(element: IElementDto): string {\n switch (element.elementTypeDiscriminator) {\n case 'ServiceSpecificationGroupDto':\n return (element as ServiceSpecificationGroupDto).itemNumber?.stringRepresentation || '';\n case 'PositionDto':\n return (element as PositionDto).itemNumber?.stringRepresentation || '';\n default:\n return '';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { ITextWords } from '../constants/defaultTextWords';\nimport { ExecutionDescriptionDto, IElementDto, NoteTextDto, PositionDto, ServiceSpecificationGroupDto } from '../model';\n\n@Pipe({\n name: 'elementText'\n})\nexport class ElementTextPipe implements PipeTransform {\n transform(element: IElementDto, treeWords: ITextWords): string {\n if (!element || !treeWords) {\n return '';\n }\n\n switch (element.elementTypeDiscriminator) {\n case 'NoteTextDto':\n return (element as NoteTextDto).shortText || treeWords.defaultNameNoteText || '';\n case 'ExecutionDescriptionDto':\n return `${(element as ExecutionDescriptionDto).identifier ? (element as ExecutionDescriptionDto).identifier + ' - ' : ''}${\n (element as ExecutionDescriptionDto).label || treeWords.defaultNameDescription || ''\n }`;\n case 'ServiceSpecificationGroupDto':\n return (element as ServiceSpecificationGroupDto).shortText || treeWords.defaultNameGroup || '';\n case 'PositionDto':\n return (element as PositionDto).shortText || treeWords.defaultNamePosition || '';\n default:\n return '';\n }\n }\n}\n","import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectorRef, Component, ElementRef, Input, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { combineLatestWith, Observable, Subject, take, takeUntil } from 'rxjs';\n\nimport { defaults } from '../../constants';\nimport { ITextWords } from '../../constants/defaultTextWords';\nimport { SaveChangingViewDirective } from '../../directives/save-changing-view.directive';\nimport { IElementDto } from '../../model';\nimport { SelectingElementsType } from '../../model/selecting.model';\nimport { ElementIconNamePipe } from '../../pipes/element-icon-name.pipe';\nimport { ElementItemNumberPipe } from '../../pipes/element-item-number.pipe';\nimport { ElementTextPipe } from '../../pipes/element-text.pipe';\nimport { ConfigurationTreeService } from '../../services/configuration-tree.service';\nimport { SelectElementService } from '../../services/select-element.service';\nimport { TreeNodeSelectionService } from '../../services/tree-node-selection.service';\n\n@Component({\n selector: 'ava-tree-item',\n templateUrl: './tree-item.component.html',\n styleUrls: ['./tree-item.component.scss'],\n imports: [\n SaveChangingViewDirective,\n AsyncPipe,\n ElementItemNumberPipe,\n ElementTextPipe,\n ElementIconNamePipe,\n NgTemplateOutlet,\n MatCheckboxModule,\n FormsModule,\n MatIconModule\n ]\n})\nexport class TreeItemComponent implements OnInit, OnDestroy {\n @Input() element: IElementDto = {} as IElementDto;\n @Input() expansionState: { [id: string]: boolean } = {};\n @Input() isSelect = false;\n @Input() backgroundColor: string | null = '';\n @ViewChild('textItem') textElement!: ElementRef<HTMLElement>;\n selectedElement: IElementDto | null = null;\n preselectedElement: IElementDto | null = null;\n private isAllowOneClick = true;\n private timerStop: ReturnType<typeof setTimeout> | null = null;\n private $destroy = new Subject<boolean>();\n\n readonly textWords$: Observable<ITextWords | null> = this.configurationTreeService.getTextWordsFromConfig();\n isSelectionMode = false;\n\n checkedElements: {\n [elementId: string]: SelectingElementsType;\n } = {};\n\n constructor(\n public selectElementService: SelectElementService,\n private treeNodeSelectionService: TreeNodeSelectionService,\n private cdr: ChangeDetectorRef,\n private configurationTreeService: ConfigurationTreeService\n ) {}\n\n ngOnInit(): void {\n this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((element) => (this.selectedElement = element));\n this.selectElementService.preselectedElement.pipe(takeUntil(this.$destroy)).subscribe((element) => (this.preselectedElement = element));\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((isSelectionMode) => {\n this.isSelectionMode = isSelectionMode;\n });\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(combineLatestWith(this.treeNodeSelectionService.treeNodeSelecting), takeUntil(this.$destroy))\n .subscribe(([isSelectionMode, treeNodeSelecting]) => {\n if (isSelectionMode) {\n this.checkedElements = treeNodeSelecting;\n this.cdr.detectChanges();\n }\n });\n }\n\n ngOnDestroy(): void {\n this.timerStop && clearTimeout(this.timerStop);\n this.$destroy.next(true);\n this.$destroy.complete();\n }\n\n private expand(): void {\n if (this.element) {\n this.expansionState[this.element.id] = true;\n }\n }\n\n select(): void {\n const clickElement = () => {\n this.selectElementService.setClickElement(this.selectedElement?.id === this.element.id ? null : this.element);\n if (this.element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n this.expand();\n }\n };\n this.configurationTreeService\n .getAllowDblClickFromConfig()\n .pipe(take(1))\n .subscribe((allowDblClick) => {\n if (!allowDblClick) {\n clickElement();\n } else if (this.isAllowOneClick) {\n this.isAllowOneClick = false;\n this.timerStop = setTimeout(() => {\n clickElement();\n this.isAllowOneClick = true;\n }, defaults.doubleClickTimeoutInMilliseconds);\n }\n });\n }\n\n dblSelect(): void {\n this.configurationTreeService\n .getAllowDblClickFromConfig()\n .pipe(take(1))\n .subscribe((allowDblClick) => {\n if (!allowDblClick) {\n return;\n }\n\n this.timerStop && clearTimeout(this.timerStop);\n\n this.selectElementService.setDblClickElement(this.element);\n if (this.element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n this.expand();\n }\n this.isAllowOneClick = true;\n });\n }\n\n openContextMenu(event: MouseEvent): void {\n event.preventDefault();\n this.selectElementService.setContextMenuElement({ position: { x: `${event.x}px`, y: `${event.y}px` }, node: this.element });\n }\n\n changeSelecting(element: IElementDto, isSelected: boolean): void {\n this.treeNodeSelectionService.changeSelecting(isSelected, element.id);\n }\n}\n","@if (element) {\n <div\n (click)=\"select()\"\n (dblclick)=\"dblSelect()\"\n (contextmenu)=\"openContextMenu($event)\"\n class=\"ava-tree-item\"\n [id]=\"element.id\"\n >\n <mat-icon\n class=\"ava-tree-item__icon\"\n saveChangingView=\"icon\"\n [id]=\"element.id\"\n >{{ element | elementIconName }}</mat-icon\n >\n @if (!isSelectionMode) {\n <div\n #textItem\n class=\"ava-tree-item__text\"\n [class.choose]=\"!isSelectionMode && element.id === preselectedElement?.id\"\n [id]=\"element.id\"\n saveChangingView=\"text\"\n [class.select]=\"isSelect\"\n [style.backgroundColor]=\"backgroundColor\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n }\n @if (isSelectionMode) {\n <mat-checkbox\n class=\"ava-tree-item__checkbox\"\n color=\"primary\"\n [indeterminate]=\"checkedElements[element.id].indeterminate\"\n [(ngModel)]=\"checkedElements[element.id].checked\"\n (ngModelChange)=\"changeSelecting(element, $event)\"\n (click)=\"$event.stopPropagation()\"\n >\n <div\n class=\"ava-tree-item__text\"\n saveChangingView=\"text\"\n [id]=\"element.id\"\n >\n <ng-container [ngTemplateOutlet]=\"text\"></ng-container>\n </div>\n </mat-checkbox>\n }\n </div>\n}\n\n<ng-template #text>\n @if (textWords$ | async; as textWords) {\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' || element.elementTypeDiscriminator === 'PositionDto') {\n <ng-container> {{ element | elementItemNumber }} - {{ element | elementText: textWords }} </ng-container>\n } @else {\n <ng-container>{{ element | elementText: textWords }}</ng-container>\n }\n }\n</ng-template>\n","import { AsyncPipe } from '@angular/common';\nimport { Component, ElementRef, Input, OnDestroy, OnInit, QueryList, ViewChildren } from '@angular/core';\n\nimport { Observable, Subject, takeUntil } from 'rxjs';\n\nimport { HoverEffectDirective } from '../../directives/hover-effect.directive';\nimport { IElementDto } from '../../model';\nimport { ConfigurationTreeService } from '../../services/configuration-tree.service';\nimport { SelectElementService } from '../../services/select-element.service';\n\nimport { TreeItemComponent } from '../tree-item/tree-item.component';\n\n@Component({\n selector: 'ava-list-structure',\n templateUrl: './list-structure.component.html',\n styleUrls: ['./list-structure.component.scss'],\n imports: [TreeItemComponent, AsyncPipe, HoverEffectDirective]\n})\nexport class ListStructureComponent implements OnDestroy, OnInit {\n @Input() filteredElementList: IElementDto[] = [];\n @ViewChildren('hoverTooltipElement') templates!: QueryList<ElementRef<HTMLElement>>;\n\n selectedElement: IElementDto | null = null;\n private $destroy = new Subject<boolean>();\n\n readonly selectedColor$: Observable<string> = this.configurationTreeService.getSelectedColorFromConfig();\n isSelectionMode = false;\n\n constructor(\n public selectElementService: SelectElementService,\n private configurationTreeService: ConfigurationTreeService\n ) {}\n\n ngOnInit(): void {\n this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((element) => {\n this.selectedElement = element;\n });\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((isSelectionMode) => {\n this.isSelectionMode = isSelectionMode;\n });\n }\n\n ngOnDestroy(): void {\n this.$destroy.next(true);\n this.$destroy.complete();\n }\n}\n","@for (element of filteredElementList; track element.id) {\n <ng-container>\n <div\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [style.backgroundColor]=\"!isSelectionMode && element.id === selectedElement?.id ? (selectedColor$ | async) : ''\"\n [id]=\"'hover-element-id-' + element.id\"\n [avaHoverEffect]=\"avaItem\"\n >\n <ava-tree-item\n #avaItem\n [element]=\"element\"\n [isSelect]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [backgroundColor]=\"!isSelectionMode && element.id === selectedElement?.id ? (selectedColor$ | async) : ''\"\n ></ava-tree-item>\n </div>\n </ng-container>\n}\n","import { AsyncPipe, DecimalPipe, NgClass } from '@angular/common';\nimport { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTableModule } from '@angular/material/table';\n\nimport { combineLatestWith, map, Observable, of, Subject, switchMap, take, takeUntil } from 'rxjs';\n\nimport { defaults } from '../../constants';\nimport { ITextWords } from '../../constants/defaultTextWords';\nimport { SaveChangingViewDirective } from '../../directives/save-changing-view.directive';\nimport { IElementDto, TableColumnType } from '../../model';\nimport { SelectingElementsObjectType } from '../../model/selecting.model';\nimport { ElementIconNamePipe } from '../../pipes/element-icon-name.pipe';\nimport { ElementItemNumberPipe } from '../../pipes/element-item-number.pipe';\nimport { ElementTextPipe } from '../../pipes/element-text.pipe';\nimport { ConfigurationTreeService } from '../../services/configuration-tree.service';\nimport { SelectElementService } from '../../services/select-element.service';\nimport { TreeNodeSelectionService } from '../../services/tree-node-selection.service';\n\n@Component({\n selector: 'ava-table-structure',\n templateUrl: './table-structure.component.html',\n styleUrls: ['./table-structure.component.scss'],\n imports: [\n NgClass,\n AsyncPipe,\n ElementTextPipe,\n ElementItemNumberPipe,\n ElementIconNamePipe,\n DecimalPipe,\n MatTableModule,\n MatIconModule,\n MatCheckboxModule,\n FormsModule,\n SaveChangingViewDirective\n ]\n})\nexport class TableStructureComponent implements OnInit, OnDestroy {\n @Input() filteredElementList: IElementDto[] = [];\n\n displayedColumns: string[] = [];\n private isAllowOneClick = true;\n selectedElement: IElementDto | null = null;\n preselectedElement: IElementDto | null = null;\n private timerStop: ReturnType<typeof setTimeout> | null = null;\n checkedElements: SelectingElementsObjectType = {};\n\n private $destroy = new Subject<boolean>();\n readonly textWords$: Observable<ITextWords | null> = this.configurationTreeService.getTextWordsFromConfig();\n readonly selectedColor$: Observable<string> = this.configurationTreeService.getSelectedColorFromConfig();\n readonly addTableColumns$: Observable<TableColumnType[]> = this.configurationTreeService.getAddTableColumnsFromConfig();\n isSelectionMode = false;\n\n constructor(\n public selectElementService: SelectElementService,\n private treeNodeSelectionService: TreeNodeSelectionService,\n private cdr: ChangeDetectorRef,\n private configurationTreeService: ConfigurationTreeService\n ) {}\n\n ngOnInit(): void {\n this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((element) => {\n this.selectedElement = element;\n });\n this.selectElementService.preselectedElement.pipe(takeUntil(this.$destroy)).subscribe((element) => {\n this.preselectedElement = element;\n });\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((isSelectionMode) => {\n this.isSelectionMode = isSelectionMode;\n });\n\n this.configureTableColumns();\n\n this.treeNodeSelectionService.treeNodeSelecting.pipe(takeUntil(this.$destroy)).subscribe((treeNodeSelecting) => {\n this.checkedElements = treeNodeSelecting;\n this.cdr.detectChanges();\n });\n }\n\n ngOnDestroy(): void {\n this.timerStop && clearTimeout(this.timerStop);\n\n this.$destroy.next(true);\n this.$destroy.complete();\n }\n\n select(row: IElementDto): void {\n if (this.isSelectionMode) {\n return;\n }\n\n const clickElement = () => {\n this.selectElementService.setClickElement(this.selectedElement?.id === row.id ? null : row);\n };\n this.configurationTreeService\n .getAllowDblClickFromConfig()\n .pipe(take(1))\n .subscribe((allowDblClick) => {\n if (!allowDblClick) {\n clickElement();\n } else if (this.isAllowOneClick) {\n this.isAllowOneClick = false;\n this.timerStop = setTimeout(() => {\n clickElement();\n this.isAllowOneClick = true;\n }, defaults.doubleClickTimeoutInMilliseconds);\n }\n });\n }\n\n dblSelect(row: IElementDto): void {\n this.configurationTreeService\n .getAllowDblClickFromConfig()\n .pipe(take(1))\n .subscribe((allowDblClick) => {\n if (!allowDblClick) {\n return;\n }\n\n if (this.isSelectionMode) {\n return;\n }\n\n this.timerStop && clearTimeout(this.timerStop);\n\n this.selectElementService.setDblClickElement(row);\n this.isAllowOneClick = true;\n });\n }\n\n openContextMenu(event: MouseEvent, row: IElementDto): void {\n event.preventDefault();\n this.selectElementService.setContextMenuElement({ position: { x: `${event.x}px`, y: `${event.y}px` }, node: row });\n }\n\n changeSelecting(element: IElementDto, event: boolean): void {\n this.treeNodeSelectionService.changeSelecting(event, element.id);\n }\n\n configureTableColumns(): void {\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(\n combineLatestWith(this.addTableColumns$.pipe(map((c) => c.map((item) => item.name)))),\n switchMap(([isSelectionMode, addColumns]) => {\n if (isSelectionMode) {\n return of(['icon', 'checkbox', 'itemNumber', 'text', ...addColumns]);\n } else {\n return of(['icon', 'itemNumber', 'text', ...addColumns]);\n }\n }),\n takeUntil(this.$destroy)\n )\n .subscribe((columns) => {\n this.displayedColumns = [...columns];\n });\n }\n}\n","<table\n mat-table\n [dataSource]=\"filteredElementList\"\n>\n <ng-container matColumnDef=\"icon\">\n <th\n mat-header-cell\n *matHeaderCellDef\n ></th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"table-cell-small-width\"\n >\n <mat-icon\n class=\"icon-element\"\n saveChangingView=\"icon\"\n [id]=\"row.id\"\n >\n {{ row | elementIconName }}\n </mat-icon>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"checkbox\">\n <th\n mat-header-cell\n *matHeaderCellDef\n ></th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"table-cell-small-width\"\n >\n <mat-checkbox\n class=\"checkbox\"\n color=\"primary\"\n [indeterminate]=\"checkedElements[element.id].indeterminate\"\n [(ngModel)]=\"checkedElements[element.id].checked\"\n (ngModelChange)=\"changeSelecting(element, $event)\"\n (click)=\"$event.stopPropagation()\"\n >\n </mat-checkbox>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"itemNumber\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n OZ\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n [style.width.ch]=\"row?.itemNumber?.stringRepresentation.length\"\n >\n <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementItemNumber }}\n </div>\n </td>\n </ng-container>\n\n <ng-container matColumnDef=\"text\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n Text\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n class=\"table-text\"\n >\n @if (textWords$ | async; as textWords) {\n <div\n class=\"text-element\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ row | elementText: textWords }}\n </div>\n }\n </td>\n </ng-container>\n @for (oneColumn of addTableColumns$ | async; track oneColumn.name) {\n <ng-container>\n <ng-container matColumnDef=\"{{ oneColumn.name }}\">\n <th\n mat-header-cell\n *matHeaderCellDef\n >\n {{ oneColumn.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n >\n <div\n [style.textAlign]=\"oneColumn.align\"\n saveChangingView=\"text\"\n [id]=\"row.id\"\n >\n {{ !oneColumn.numberFormat ? row[oneColumn.name] : (row[oneColumn.name] | number: oneColumn.numberFormat) }}\n </div>\n </td>\n </ng-container>\n </ng-container>\n }\n\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns; sticky: true\"\n class=\"mat-header-row\"\n ></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n (click)=\"select(row)\"\n (dblclick)=\"dblSelect(row)\"\n (contextmenu)=\"openContextMenu($event, row)\"\n [ngClass]=\"{\n choose: !isSelectionMode && row.id === preselectedElement?.id,\n select: !isSelectionMode && row.id === selectedElement?.id,\n }\"\n [style.background]=\"!isSelectionMode && row.id === selectedElement?.id ? (selectedColor$ | async) : ''\"\n [id]=\"row.id\"\n ></tr>\n</table>\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { IElementDto, ServiceSpecificationGroupDto } from '../model';\n\n@Pipe({\n name: 'groupChildElements',\n pure: true\n})\nexport class GroupChildElementsPipe implements PipeTransform {\n transform(element: IElementDto): IElementDto[] | null {\n if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n return (element as ServiceSpecificationGroupDto)?.elements || null;\n }\n\n return null;\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\n\nimport { Observable, Subject, takeUntil } from 'rxjs';\n\nimport { HoverEffectDirective } from '../../directives/hover-effect.directive';\nimport { IElementDto } from '../../model';\nimport { GroupChildElementsPipe } from '../../pipes/group-child-elements.pipe';\nimport { ConfigurationTreeService } from '../../services/configuration-tree.service';\nimport { SelectElementService } from '../../services/select-element.service';\n\nimport { TreeItemComponent } from '../tree-item/tree-item.component';\n\n@Component({\n selector: 'ava-tree-node',\n templateUrl: './tree-node.component.html',\n styleUrls: ['./tree-node.component.scss'],\n imports: [TreeItemComponent, GroupChildElementsPipe, MatIconModule, AsyncPipe, HoverEffectDirective]\n})\nexport class TreeNodeComponent implements OnDestroy, OnInit {\n @Input() elementList?: IElementDto[] | null = [];\n @Input() expansionState: { [id: string]: boolean } = {};\n\n selectedElement: IElementDto | null = null;\n private $destroy = new Subject<boolean>();\n\n readonly indent$: Observable<string> = this.configurationTreeService.getIndentFromConfig();\n readonly selectedColor$: Observable<string> = this.configurationTreeService.getSelectedColorFromConfig();\n isSelectionMode = false;\n\n constructor(\n public selectElementService: SelectElementService,\n private configurationTreeService: ConfigurationTreeService\n ) {}\n\n ngOnInit(): void {\n this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((element) => {\n this.selectedElement = element;\n });\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((isSelectionMode) => {\n this.isSelectionMode = isSelectionMode;\n });\n }\n\n ngOnDestroy(): void {\n this.$destroy.next(true);\n this.$destroy.complete();\n }\n\n expand(element: IElementDto): void {\n this.expansionState[element.id] = !this.expansionState[element.id];\n }\n}\n","@for (element of elementList; track element.id) {\n <ng-container>\n <div\n [id]=\"'hover-element-id-' + element.id\"\n class=\"tree-node-wrapper\"\n [class.select]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [style.backgroundColor]=\"!isSelectionMode && element.id === selectedElement?.id ? (selectedColor$ | async) : ''\"\n [avaHoverEffect]=\"avaItem\"\n >\n <div class=\"tree-node-wrapper__content\">\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n <mat-icon\n matRipple\n (click)=\"expand(element)\"\n class=\"tree-node__icon\"\n >\n {{ expansionState[element.id] ? 'expand_more' : 'chevron_right' }}\n </mat-icon>\n } @else {\n <mat-icon></mat-icon>\n }\n\n <ava-tree-item\n #avaItem\n [element]=\"element\"\n [expansionState]=\"expansionState\"\n [isSelect]=\"!isSelectionMode && element.id === selectedElement?.id\"\n [backgroundColor]=\"!isSelectionMode && element.id === selectedElement?.id ? (selectedColor$ | async) : ''\"\n ></ava-tree-item>\n </div>\n </div>\n @if (element.elementTypeDiscriminator === 'ServiceSpecificationGroupDto' && expansionState[element.id]) {\n <div [style.paddingLeft]=\"indent$ | async\">\n <ava-tree-node\n [elementList]=\"element | groupChildElements\"\n [expansionState]=\"expansionState\"\n ></ava-tree-node>\n </div>\n }\n </ng-container>\n}\n","import { Component, Input } from '@angular/core';\n\nimport { ServiceSpecificationDto } from '../../model';\n\nimport { TreeNodeComponent } from '../tree-node/tree-node.component';\n\n@Component({\n selector: 'ava-tree-structure',\n templateUrl: './tree-structure.component.html',\n styleUrls: ['./tree-structure.component.scss'],\n imports: [TreeNodeComponent]\n})\nexport class TreeStructureComponent {\n @Input() serviceSpecification: ServiceSpecificationDto | null = null;\n @Input() expansionState: { [id: string]: boolean } = {};\n}\n","@if (serviceSpecification?.elements) {\n <ava-tree-node\n [elementList]=\"serviceSpecification?.elements\"\n [expansionState]=\"expansionState\"\n >\n </ava-tree-node>\n}\n","import { AsyncPipe } from '@angular/common';\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n inject,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n Self,\n SimpleChanges,\n ViewChild,\n ViewEncapsulation,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\nimport { Observable, ReplaySubject, Subject, debounceTime, filter, fromEvent, map, take, takeUntil, tap } from 'rxjs';\n\nimport { ITextWords } from '../../constants/defaultTextWords';\nimport {\n ContextMenuDataType,\n IConfigurationTree,\n IElementDto,\n ModeViewType,\n ProjectDto,\n SelectedElement,\n ServiceSpecificationDto\n} from '../../model';\nimport { SelectingElementsType } from '../../model/selecting.model';\nimport { ConfigurationTreeService } from '../../services/configuration-tree.service';\nimport { ExpandParentGroupService } from '../../services/expand-parent-group.service';\nimport { FlatElementsService } from '../../services/flat-elements.service';\nimport { IKeyboardOperationConfig, KeyboardOperationService, KeyboardOperationType } from '../../services/keyboard-operation.service';\nimport { SelectElementService } from '../../services/select-element.service';\nimport { TreeNodeSelectionService } from '../../services/tree-node-selection.service';\n\nimport { ListStructureComponent } from '../list-structure/list-structure.component';\nimport { TableStructureComponent } from '../table-structure/table-structure.component';\nimport { TreeStructureComponent } from '../tree-structure/tree-structure.component';\n\n@Component({\n selector: 'ava-tree',\n templateUrl: './ava-tree.component.html',\n styleUrls: ['./ava-tree.component.scss'],\n imports: [\n TreeStructureComponent,\n ListStructureComponent,\n TableStructureComponent,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatTooltipModule,\n FormsModule,\n MatInputModule,\n AsyncPipe\n ],\n providers: [\n FlatElementsService,\n SelectElementService,\n TreeNodeSelectionService,\n ExpandParentGroupService,\n KeyboardOperationService,\n ConfigurationTreeService\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class AvaTreeComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n /**\n * This is the main data element for the tree structure. You should supply a ProjectDto with\n * exactly one service specification in it.\n */\n @Input() project: ProjectDto | null = null;\n\n /**\n * Optionally, you can supply a map of expansion states for the tree. The keys should be the\n * id properties of the elements in the tree, and the values should be true if the element is\n * expanded, and false if it is collapsed.\n */\n @Input() expansionState: { [id: string]: boolean } = {};\n\n /**\n * Optionally, you can supply the id of the node that should be selected in the tree initially.\n */\n @Input() set selectedNodeId(id: string | null) {\n this._selectedNodeId = id;\n this.flatElementsService.getOneElementById(this._selectedNodeId).subscribe((e) => {\n if (e) {\n this.selectElementService.setClickElement(e);\n }\n });\n }\n private _selectedNodeId: string | null = null;\n /**\n * Optional, defaults to 20px. If this is set, then the tree will be indented by the given value each level.\n * This can be any valid CSS value for the padding-left property, such as 20px, 1em, or 5%.\n *\n */\n\n /**\n * Optional, you can supply a color to be used as the background color for the selected line. Defaults to the primary\n * color from the Material theme, which is #00acc1.\n */\n\n /**\n * You can specify which view type to use for the tree. The default is ModeViewType.Tree, but you can also use\n * ModeViewType.List or ModeViewType.Table.\n */\n @Input() modeView: ModeViewType = ModeViewType.Tree;\n\n /** Optional, defaults to true. If this is disabled, then the double click event for elements is not raised,\n * and clicking on an elemt sends an immediate result since the component has not to wait and check if a double click event\n * is fired.\n */\n\n /**\n * If this is set to true, then the tree will be in selection mode, and the user can select elements\n * by clicking on them. The selected elements will be emitted in the selectedElementsChanged event.\n */\n\n /**\n * You can optionally supply a list of elements that should be selected initially. This is only used if\n * isSelectionMode is true.\n */\n private initiallySelectedElements: SelectedElement[] | null = null;\n\n /**\n * You can supply a map of strings to be used for the text in the tree. This allows you to translate\n * the text in the tree to other languages.\n * {\n * textSearch: string,\n * textNothing: string,\n * textNothingFiltered: string,\n * textAll: string,\n * tooltipAllOpen: string,\n * tooltipAllClose: string,\n * tooltipAllAdd:string,\n * tooltipAllRemove: string,\n * }\n */\n\n readonly textWords$: Observable<ITextWords | null> = this.configurationTreeService.getTextWordsFromConfig();\n readonly isSelectionMode$: Observable<boolean> = this.configurationTreeService.getIsSelectionModeFromConfig();\n private isSelectionMode = false;\n /**\n * Defaults to true. If this is enabled, then navigating in the tree with the keyboard only works\n * if the mouse is over the tree area. This limitation is useful if you have multiple trees or other components\n * that might be using keyboard input.\n */\n private mouseAwareKeyboardControl = true;\n\n /**\n * With this parameter, you can configure which keys will be listenend to switch the tree elements,\n * and also to disable the functionality of the keys */\n private set customKeyboardOperationConfig(config: IKeyboardOperationConfig) {\n this.keyboardOperationService.mergeConfigOperation(config);\n }\n\n /**\n * You can supply custom filters that are processed when the filter input is changed. Default filters are used\n * that check for short text and item number matches, and you can either add custom filters or replace the default ones.\n */\n\n /**\n * Optional. For table views, this allows you to add custom columns to the table.\n * addTableColumns: Array of objects\n * {\n * name: string, // name of column\n * title: string, // showed title of column\n * align?: string, // optional alight: left(default) / center / right\n * numberFormat?: string // optional format of number value, example: '1.2-2'\n * }\n */\n\n /**\n * This allows you to supply a list of functions that can be used to change the appearance of elements.\n * They objects contain a predicate function that is evaluated, along with an option to configure the\n * appearance of the element.\n * functionView: Array of objects\n * {\n * name: string, // name of view part: you can add/remove it when it need\n * func: (element: any, result?: any) => boolean, // this filter function calculate condition to change view\n * view: {\n * iconName?: string, // changed name of icon\n * iconColor?: string, // changed color of icon\n * textBold?: string, // changed weight of text\n * textColor?: string // changed color of text\n * }\n * }\n */\n @Input() set config(configObject: IConfigurationTree) {\n const config = { ...this.configurationTreeService.getCurrentTreeConfig(), ...configObject };\n this.configurationTreeService.setTreeConfig(config);\n }\n\n /**\n * This is emitted when an element is selected by clicking on it. The selected element is emitted as the event value.\n */\n @Output() selectClick = new EventEmitter<IElementDto | null>();\n\n /**\n * This is emitted when an element is selected by double clicking on it. The selected element is emitted as the event value.\n */\n @Output() selectDblClick = new EventEmitter<IElementDto>();\n\n /**\n * This is emitted when an element is selected by right clicking on it. The selected element is emitted as the event value.\n */\n @Output() contextMenuEvent = new EventEmitter<ContextMenuDataType>();\n\n /**\n * This is emitted when the selected elements in the tree are changed. The selected elements are emitted as the event value.\n * Selected elements are elements whose checkboxes are checked, and are different than elements that are in an active selection state.\n * Typcial use cases for this include e.g. selecting multiple elements within a service specification without\n * actually focussing them, e.g. for further processing.\n */\n @Output() selectedElementsChanged = new EventEmitter<SelectedElement[]>();\n\n @ViewChild('avaTreeWrapper') avaTreeWrapper!: ElementRef<HTMLDivElement>;\n @ViewChild('avaMainWrapper') avaMainWrapper!: ElementRef<HTMLDivElement>;\n @ViewChild('avaTreeFilterInput') avaTreeFilterInput!: ElementRef<HTMLInputElement>;\n selectedElement: IElementDto | null = null;\n serviceSpecification!: ServiceSpecificationDto;\n isListenKeyboard = false;\n private isEmiteSelectedElements = false;\n private selectingElementsTreeData: SelectingElementsType[] = [];\n flatElements: IElementDto[] | null = null;\n preselectedElement: IElementDto | null = null;\n filterInput = '';\n listModeViewType = ModeViewType;\n private filter = '';\n private $filter = new ReplaySubject<string>(1);\n filteredElementList: IElementDto[] = [];\n private $destroy = new Subject<boolean>();\n private cdr = inject(ChangeDetectorRef);\n\n constructor(\n @Self() private flatElementsService: FlatElementsService,\n @Self() private selectElementService: SelectElementService,\n @Self() private treeNodeSelectionService: TreeNodeSelectionService,\n @Self() private expandParentGroupService: ExpandParentGroupService,\n @Self() private keyboardOperationService: KeyboardOperationService,\n private ngZone: NgZone,\n private configurationTreeService: ConfigurationTreeService\n ) {}\n\n ngOnInit(): void {\n this.selectElementService.preselectedElement.pipe(takeUntil(this.$destroy)).subscribe((e) => (this.preselectedElement = e));\n this.selectElementService.selectClickElement.pipe(takeUntil(this.$destroy)).subscribe((e) => {\n this.selectedElement = e;\n this.selectClick.emit(e);\n });\n this.selectElementService.selectDblClickElement.pipe(takeUntil(this.$destroy)).subscribe((e) => this.selectDblClick.emit(e));\n this.selectElementService.selectContextMenuElement.pipe(takeUntil(this.$destroy)).subscribe((e) => this.contextMenuEvent.emit(e));\n this.flatElementsService.flatElementsDto.pipe(takeUntil(this.$destroy)).subscribe((e) => {\n this.flatElements = e;\n this.getFilteredList();\n });\n\n this.$filter.pipe(takeUntil(this.$destroy), debounceTime(250)).subscribe((filter) => {\n this.filter = filter;\n this.getFilteredList();\n });\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((isSelectionMode) => {\n this.isSelectionMode = isSelectionMode;\n });\n\n this.configurationTreeService\n .getMouseAwareKeyboardControlFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((mouseAwareKeyboardControl) => {\n this.mouseAwareKeyboardControl = mouseAwareKeyboardControl;\n });\n\n this.configurationTreeService\n .getListFilterFuncFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((listFilterFunc) => {\n this.flatElementsService.listFilterFunc = listFilterFunc;\n });\n\n this.configurationTreeService\n .getCustomKeyboardOperationConfigFromConfig()\n .pipe(takeUntil(this.$destroy))\n .subscribe((config) => {\n if (config) {\n this.customKeyboardOperationConfig = config;\n }\n });\n }\n\n ngAfterViewInit(): void {\n this.initializeEventListeners();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n //TODO should be refactored later OnChanges method\n if (changes['project'] && this.project?.serviceSpecifications?.[0]) {\n this.serviceSpecification = this.project.serviceSpecifications[0];\n this.flatElementsService.setElementsDto(this.serviceSpecification);\n\n this.configurationTreeService\n .getIsSelectionModeFromConfig()\n .pipe(take(1))\n .subscribe((isSelectionMode) => {\n if (isSelectionMode) {\n this.selectingElementsTreeData = this.treeNodeSelectionService.loadSelectingElements(this.serviceSpecification.elements);\n this.treeNodeSelectionService.treeNodeSelecting.pipe(takeUntil(this.$destroy)).subscribe(() => {\n if (this.isEmiteSelectedElements) {\n setTimeout(() => {\n const selectingTree = this.treeNodeSelectionService.getTreeRoot(this.selectingElementsTreeData);\n this.selectedElementsChanged.emit(selectingTree);\n }, 0);\n }\n });\n }\n });\n }\n\n if (changes['project'] && this._selectedNodeId) {\n this.flatElementsService.getOneElementById(this._selectedNodeId).subscribe((e) => {\n if (e) {\n this.selectElementService.setClickElement(e);\n }\n });\n }\n\n if (changes['project']) {\n this.configurationTreeService.treeConfig$\n .pipe(\n take(1),\n map(({ isSelectionMode, initiallySelectedElements }) => ({\n isSelectionMode,\n initiallySelectedElements\n })),\n filter(({ isSelectionMode }) => !!isSelectionMode),\n tap(({ initiallySelectedElements }) => {\n if (initiallySelectedElements?.length) {\n this.initiallySelectedElements = initiallySelectedElements;\n }\n })\n )\n .subscribe(() => {\n this.formSelectingList();\n });\n }\n }\n\n ngOnDestroy(): void {\n this.$destroy.next(true);\n this.$destroy.complete();\n }\n\n private mouseOver(): void {\n if (!this.isListenKeyboard) {\n this.isListenKeyboard = true;\n this.avaTreeFilterInput?.nativeElement.focus();\n }\n }\n\n private mouseOut(): void {\n this.isListenKeyboard = false;\n }\n\n private handleGlobalKeyboardEvent(event: Event): void {\n this.ngZone.run(() => {\n const keyEvent = event as KeyboardEvent;\n if (!this.mouseAwareKeyboardControl || this.isListenKeyboard) {\n const element = this.preselectedElement || this.selectedElement;\n\n const { operation, nextElement } = this.keyboardOperationService.handleKeyboardEvent(keyEvent, element) || { nextElement: null };\n switch (operation) {\n case KeyboardOperationType.MoveSelectedPositionUp:\n this.showElement(nextElement, '.select');\n break;\n case KeyboardOperationType.MoveSelectedPositionDown:\n this.showElement(nextElement, '.select');\n break;\n case KeyboardOperationType.MoveChosenPositionDown:\n this.showElement(nextElement, nextElement?.id === this.selectedElement?.id ? '.select' : '.choose');\n break;\n case KeyboardOperationType.MoveChosenPositionUp:\n this.showElement(nextElement, nextElement?.id === this.selectedElement?.id ? '.select' : '.choose');\n break;\n default:\n break;\n }\n }\n });\n }\n\n private showElement(element: IElementDto | null, nameQuery: string): void {\n if (element) {\n if (this.modeView === ModeViewType.Tree) {\n this.expandParentGroups(element);\n }\n setTimeout(() => this.scrollLine(nameQuery), 0);\n }\n }\n\n private scrollLine(nameQuery: string): void {\n const parentRect = this.avaTreeWrapper?.nativeElement.getBoundingClientRect();\n const showedElement = this.avaTreeWrapper?.nativeElement.querySelector(nameQuery) as HTMLElement;\n\n if (!showedElement) {\n return;\n }\n\n const childRect = showedElement.getBoundingClientRect();\n if (\n childRect.bottom > parentRect.bottom ||\n childRect.top < parentRect.top ||\n (this.modeView === ModeViewType.Table && childRect.top < parentRect.top + 24)\n ) {\n showedElement?.scrollIntoView();\n this.avaTreeWrapper?.nativeElement.scrollTo({ left: 0 });\n if (this.modeView === ModeViewType.Table) {\n setTimeout(() => this.correctScrollTableLine(showedElement, parentRect), 0);\n }\n }\n }\n\n private correctScrollTableLine(showedElement: HTMLElement, parentRect: DOMRect): void {\n const childRect = showedElement.getBoundingClientRect();\n if (childRect.top < parentRect.top + 24) {\n this.avaTreeWrapper.nativeElement.scrollTop -= 24;\n }\n }\n\n expandParentGroups(element: IElementDto): void {\n this.expandParentGroupService.expandParentGroups(element, this.flatElements, this.expansionState);\n }\n\n onFilter(value: string): void {\n this.$filter.next(value);\n }\n\n changeAllElementsExpansionStatus(isExpanded: boolean): void {\n if (!isExpanded) {\n Object.keys(this.expansionState).forEach((id: string) => delete this.expansionState[id]);\n } else {\n this.flatElements?.forEach((item) => {\n if (item.elementTypeDiscriminator === 'ServiceSpecificationGroupDto') {\n this.expansionState[item.id] = true;\n }\n });\n }\n }\n\n private formSelectingList(): void {\n this.isEmiteSelectedElements = false;\n if (!this.initiallySelectedElements) {\n this.isEmiteSelectedElements = true;\n return;\n }\n\n this.treeNodeSelectionService.getFlatSelectedListId(this.initiallySelectedElements);\n this.treeNodeSelectionService.flatSelectedListId.forEach((id, index) => {\n this.treeNodeSelectionService.changeSelecting(true, id);\n if (index === this.treeNodeSelectionService.flatSelectedListId.length - 1) {\n this.isEmiteSelectedElements = true;\n }\n });\n }\n\n selectOrDeselectAll(value: boolean): void {\n this.treeNodeSelectionService.changeAll(value);\n }\n\n private getFilteredList(): void {\n if (this.flatElements?.length) {\n if (!this.filter) {\n this.filteredElementList = this.flatElements;\n } else {\n this.filteredElementList = this.flatElements.filter((item) => this.flatElementsService.checkFilterValue(item, this.filter));\n }\n }\n this.cdr.detectChanges();\n }\n\n private initializeEventListeners(): void {\n this.ngZone.runOutsideAngular(() => {\n fromEvent(this.avaMainWrapper.nativeElement, 'mouseleave')\n .pipe(takeUntil(this.$destroy))\n .subscribe(() => {\n this.mouseOut();\n });\n\n fromEvent(this.avaMainWrapper.nativeElement, 'mouseenter')\n .pipe(takeUntil(this.$destroy))\n .subscribe(() => {\n this.mouseOver();\n });\n\n if (!this.isSelectionMode) {\n fromEvent(document, 'keydown')\n .pipe(\n takeUntil(this.$destroy),\n filter(() => !this.mouseAwareKeyboardControl || this.isListenKeyboard)\n )\n .subscribe((event: Event) => {\n this.handleGlobalKeyboardEvent(event);\n this.cdr.detectChanges();\n });\n }\n });\n }\n}\n","@if (textWords$ | async; as textWords) {\n <div\n class=\"main-wrapper\"\n #avaMainWrapper\n >\n <div\n class=\"control\"\n #control\n >\n <mat-form-field class=\"control-filter\">\n <mat-label>{{ textWords.textSearch }}</mat-label>\n <input\n matInput\n [ngModel]=\"filterInput\"\n (ngModelChange)=\"onFilter($event)\"\n #avaTreeFilterInput\n />\n </mat-form-field>\n @if (modeView === listModeViewType.Tree) {\n <ng-container>\n <button\n class=\"control-icon\"\n mat-icon-button\n color=\"primary\"\n (click)=\"changeAllElementsExpansionStatus(true)\"\n [matTooltip]=\"textWords.tooltipAllOpen || ''\"\n >\n <mat-icon class=\"layer-background\">layers</mat-icon>\n <mat-icon class=\"layer-icon\">add</mat-icon>\n </button>\n <button\n class=\"control-icon\"\n mat-icon-button\n color=\"primary\"\n (click)=\"changeAllElementsExpansionStatus(false)\"\n [matTooltip]=\"textWords.tooltipAllClose || ''\"\n >\n <mat-icon class=\"layer-background\">layers</mat-icon>\n <mat-icon class=\"layer-icon\">remove</mat-icon>\n </button>\n </ng-container>\n }\n @if (isSelectionMode$ | async) {\n <ng-container>\n <button\n mat-raised-button\n (click)=\"selectOrDeselectAll(true)\"\n [matTooltip]=\"textWords.tooltipAllAdd || ''\"\n class=\"control-button ava-tree-selection-all-btn\"\n >\n <mat-icon>add</mat-icon>\n <span>{{ textWords.textAll }}</span>\n </button>\n <button\n mat-raised-button\n (click)=\"selectOrDeselectAll(false)\"\n [matTooltip]=\"textWords.tooltipAllRemove || ''\"\n class=\"control-button ava-tree-selection-all-btn\"\n >\n <mat-icon>remove</mat-icon>\n <span>{{ textWords.textAll }}</span>\n </button>\n </ng-container>\n }\n </div>\n <div\n [style.height]=\"'calc(100% - ' + control.offsetHeight + 'px)'\"\n class=\"ava-tree-wrapper\"\n #avaTreeWrapper\n >\n @if (flatElements?.length) {\n <ng-container>\n @if (filteredElementList.length) {\n <ng-container>\n @if (modeView === listModeViewType.Tree && !avaTreeFilterInput.value) {\n <ava-tree-structure\n [serviceSpecification]=\"serviceSpecification\"\n [expansionState]=\"expansionState\"\n >\n </ava-tree-structure>\n }\n\n @if (modeView === listModeViewType.List || (modeView === listModeViewType.Tree && avaTreeFilterInput.value)) {\n <ava-list-structure [filteredElementList]=\"filteredElementList\"> </ava-list-structure>\n }\n @if (modeView === listModeViewType.Table) {\n <ava-table-structure [filteredElementList]=\"filteredElementList\"> </ava-table-structure>\n }\n </ng-container>\n } @else {\n <ng-container> {{ textWords.textNothingFiltered }}</ng-container>\n }\n </ng-container>\n } @else {\n <ng-container>\n {{ textWords.textNothing }}\n </ng-container>\n }\n </div>\n </div>\n}\n","import { ITextWordInvoice } from '../model';\n\nexport const DEFAULT_TEXT_WORD_INVOICE: ITextWordInvoice = {\n invoiceTitle: 'Invoice',\n invoiceBuyerTitle: 'Receiver',\n invoiceSellerTitle: 'Sender',\n vatId: 'VAT ID',\n detailsInvoiceNumber: 'Invoice Number',\n detailsInvoiceDate: 'Invoice Date',\n detailsPaymentDueDate: 'Due Date',\n detailsCurrencyCode: 'Currency',\n detailsPaymentTerms: 'Payment Terms',\n referencesTopic: 'References',\n referencesBuyerReference: 'Buyer Reference',\n referencesProjectReference: 'Project Reference',\n referencesContractReference: 'Contract Reference',\n referencesPurchaseOrderReference: 'Purchase Order Reference',\n referencesSalesOrderReference: 'Sales Order Reference',\n referencesReceivingAdviceReference: 'Receiving Advice Reference',\n referencesDispatchAdviceReference: 'Dispatch Advice Reference',\n referencesTenderOrLotReference: 'Tender or Lot Reference',\n referencesInvoicedObjectIdentifier: 'Invoiced Object Identifier',\n tableHeadDescription: 'Description',\n tableHeadQuantity: 'Quantity',\n tableHeadUnit: 'Unit',\n tableHeadNetPrice: 'Net Price',\n tableHeadNetAmount: 'Net Amount',\n totalsTopic: 'Totals',\n totalsTotalNet: 'Total Net',\n totalsTotalAllowances: 'Total Allowances',\n totalsTotalCharges: 'Total Charges',\n totalsTotalAfterDeductions: 'Total After Deductions',\n totalsTotalVatAmount: 'Total VAT Amount',\n totalsTotalGross: 'Total Gross',\n totalsAlreadyPaidTotal: 'Already Paid Total',\n totalsTotalToBePaid: 'Total to be Paid',\n instructionsTopic: 'Payment Instructions',\n instructionsAccountIdentifier: 'Account Identifier',\n instructionsAccountName: 'Account Name',\n instructionsServiceProviderIdentifier: 'Service Provider Identifier',\n notesTopic: 'Notes',\n attachmentsHeading: 'Attachments',\n attachmentsName: 'Name',\n attachmentsDescription: 'Description',\n attachmentsUrl: 'Url',\n attachmentsDataSize: 'Size',\n attachmentsMimeType: 'Mime Type',\n attachmentsFileName: 'File Name',\n attachmentsDownloadButton: 'Download',\n contactPersonName: 'Contact Person Name',\n contactPersonEmail: 'Contact Person Email',\n contactPersonPhone: 'Contact Person Phone',\n vat: 'VAT',\n taxRate: 'Tax Rate',\n deliveryInformationTitle: 'Delivery Information',\n deliverToName: 'Name',\n deliverToLocationIdentifier: 'Location Identifier',\n deliveryDate: 'Date',\n deliveryAddress: 'Address',\n taxesHeading: 'Taxes'\n};\n\nexport const germanTextsInvoice: ITextWordInvoice = {\n invoiceTitle: 'Rechnung',\n invoiceBuyerTitle: 'Empfänger',\n invoiceSellerTitle: 'Rechnungssteller',\n vatId: 'USt.-ID',\n detailsInvoiceNumber: 'Rechnungsnummer',\n detailsInvoiceDate: 'Rechnungsdatum',\n detailsPaymentDueDate: 'Fälligkeitsdatum',\n detailsCurrencyCode: 'Währung',\n detailsPaymentTerms: 'Zahlungsbedingungen',\n referencesTopic: 'Referenzen',\n referencesBuyerReference: 'Käuferreferenz',\n referencesProjectReference: 'Projektreferenz',\n referencesContractReference: 'Vertragsreferenz',\n referencesPurchaseOrderReference: 'Bestellreferenz',\n referencesSalesOrderReference: 'Auftragsreferenz',\n referencesReceivingAdviceReference: 'Empfangsbestätigungsreferenz',\n referencesDispatchAdviceReference: 'Lieferreferenz',\n referencesTenderOrLotReference: 'Ausschreibungs- oder Losreferenz',\n referencesInvoicedObjectIdentifier: 'Objektreferenz',\n tableHeadDescription: 'Beschreibung',\n tableHeadQuantity: 'Menge',\n tableHeadUnit: 'Einheit',\n tableHeadNetPrice: 'Nettopreis',\n tableHeadNetAmount: 'Nettomenge',\n totalsTopic: 'Gesamt',\n totalsTotalNet: 'Gesamt Netto',\n totalsTotalAllowances: 'Gesamt Rabatt',\n totalsTotalCharges: 'Gesamt Zuschlag',\n totalsTotalAfterDeductions: 'Summe nach Rabatten',\n totalsTotalVatAmount: 'Summe Umsatzsteuer',\n totalsTotalGross: 'Gesamt Brutto',\n totalsAlreadyPaidTotal: 'Bereits bezahlt',\n totalsTotalToBePaid: 'Gesamt zu zahlen',\n instructionsTopic: 'Zahlungsanweisungen',\n instructionsAccountIdentifier: 'Kontonummer',\n instructionsAccountName: 'Kontoname',\n instructionsServiceProviderIdentifier: 'Bank',\n notesTopic: 'Hinweise',\n attachmentsHeading: 'Anhänge',\n attachmentsName: 'Name',\n attachmentsDescription: 'Beschreibung',\n attachmentsUrl: 'Url',\n attachmentsDataSize: 'Größe',\n attachmentsMimeType: 'Typ',\n attachmentsFileName: 'Dateiname',\n attachmentsDownloadButton: 'Download',\n contactPersonName: 'Name der Kontaktperson',\n contactPersonEmail: 'E-Mail der Kontaktperson',\n contactPersonPhone: 'Kontaktperson Telefon',\n vat: 'MwSt.',\n taxRate: 'Steuersatz',\n deliveryInformationTitle: 'Lieferinformationen',\n deliverToName: 'Liefername',\n deliverToLocationIdentifier: 'Lieferort',\n deliveryDate: 'Lieferdatum',\n deliveryAddress: 'Lieferadresse',\n taxesHeading: 'Steuer'\n};\n","import { BehaviorSubject, Observable, distinctUntilChanged, map, skip, take } from 'rxjs';\n\nimport { DEFAULT_TEXT_WORD_INVOICE, germanTextsInvoice } from '../constants/defaultTextWordInvoice';\nimport { IConfigurationInvoice } from '../model/configInvoice.model';\nimport { ITextWordInvoice } from '../model/invoice-words.model';\n\nexport class ConfigurationInvoiceService {\n private _textWords: ITextWordInvoice | null = null;\n private _pdfViewEnabled = false;\n private _language: 'en' | 'de' = 'en';\n\n private invoiceConfigSource = new BehaviorSubject<IConfigurationInvoice>(this.getDefaultInvoiceConfiguration());\n public invoiceConfig$: Observable<IConfigurationInvoice> = this.invoiceConfigSource.asObservable();\n\n constructor() {\n this.getLanguageFromConfig()\n .pipe(skip(1), take(1))\n .subscribe((language) => {\n this._textWords = this.getDefaulTextWords(language);\n this.setInvoiceConfig({ textWords: this._textWords, ...this.getCurrentInvoiceConfig() });\n });\n }\n\n public setInvoiceConfig(value: IConfigurationInvoice): void {\n this.invoiceConfigSource.next(value);\n }\n\n public getCurrentInvoiceConfig(): IConfigurationInvoice {\n return this.invoiceConfigSource.getValue();\n }\n\n public getTextWordsFromConfig(): Observable<ITextWordInvoice | null> {\n return this.invoiceConfig$.pipe(\n map((config) => config?.textWords || null),\n map((textWords) => (textWords === null ? this._textWords : { ...this._textWords, ...textWords })),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getPdfViewEnabledFromConfig(): Observable<boolean> {\n return this.invoiceConfig$.pipe(\n map((config) => (config === null ? false : config.pdfViewEnabled || false)),\n distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))\n );\n }\n\n public getLanguageFromConfig(): Observable<'en' | 'de'> {\n return this.invoiceConfig$.pipe(map((c) => c.language || 'en'));\n }\n\n private getDefaultInvoiceConfiguration(): IConfigurationInvoice {\n return {\n textWords: null,\n pdfViewEnabled: this._pdfViewEnabled,\n language: this._language\n };\n }\n\n getDefaulTextWords(language: 'en' | 'de'): ITextWordInvoice {\n return language === 'en' ? { ...DEFAULT_TEXT_WORD_INVOICE } : { ...germanTextsInvoice };\n }\n}\n","import { ProjectDto } from '../../ava-tree/model';\n\n//----------------------\n// <auto-generated>\n// Generated using the NSwag toolchain v14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org)\n// </auto-generated>\n//----------------------\n\n/* tslint:disable */\n/* eslint-disable */\n// ReSharper disable InconsistentNaming\n\n/** This class represents an invoice */\nexport interface Invoice {\n /** The number of the invoice */\n invoiceNumber?: string | undefined;\n /** The date of the invoice */\n invoiceDate?: Date | undefined;\n /** The type of the invoice */\n invoiceType?: InvoiceType | undefined;\n /** The three letter ISO currency code */\n currencyCode?: string | undefined;\n /** Until when the payment is due */\n paymentDueDate?: Date | undefined;\n /** An object holding reference used in this invoice */\n references?: References | undefined;\n /** A text description of payment terms, e.g. cash discounts or payment conditions */\n paymentTerms?: string | undefined;\n /** In case of partial or final invoices, it's possible to reference the previous invoice numbers */\n previousInvoices?: PreviousInvoice[] | undefined;\n /** Information about the buyer */\n buyer?: Organization | undefined;\n /** Information about the seller */\n seller?: Organization | undefined;\n /** A payee is someone who receives the payment that is different from the seller */\n payee?: Payee | undefined;\n /** If present, this is an unstructured text that can be used to give additional information\nabout the invoice. */\n invoiceNotes?: InvoiceNote[] | undefined;\n /** The period during which the services or goods were delivered */\n invoicePeriod?: InvoicePeriod | undefined;\n /** Information about the delivery\nBG-13 in XRechnung */\n deliveryInformation?: DeliveryInformation | undefined;\n /** Totals for the invoice */\n totals?: InvoiceTotals | undefined;\n /** Instructions how to perform the payment */\n paymentInstructions?: PaymentInstructions | undefined;\n /** Attached documents to the invoice */\n documents?: SupportingDocument[] | undefined;\n /** This is used to list VAT by category, e.g. for invoices where parts are in different VAT categories */\n vatBreakdown?: VatBreakdown[] | undefined;\n /** Allowances / deductions on the invoice */\n allowances?: InvoiceAllowance[] | undefined;\n /** Charges / additional costs on the invoice */\n charges?: InvoiceCharge[] | undefined;\n /** Single line items in the invoice */\n lineItems?: InvoiceLineItem[] | undefined;\n /** The source type from which the invoice was created */\n sourceType?: SourceType | undefined;\n}\n\n/** Type of the invoice */\nexport enum InvoiceType {\n PartialInvoice = 326,\n CommercialInvoice = 380,\n CreditNote = 381,\n CorrectedInvoice = 384,\n SelfBilledInvoice = 389,\n PartialConstructionInvoice = 875,\n PartialFinalConstructionInvoice = 876,\n FinalConstructionInvoice = 877\n}\n\n/** This class holds typical references used in an invoice */\nexport interface References {\n /** An internal reference used by the buyer, this can also be used as the\n'Leitweg-ID' in Germany\nBT-10 in XRechnung. */\n buyerReference?: string | undefined;\n /** Reference to a project\nBT-11 in XRechnung. */\n projectReference?: string | undefined;\n /** Reference to a contract\nBT-12 in XRechnung. */\n contractReference?: string | undefined;\n /** Reference to a purchase order created by the buyer\nBT-13 in XRechnung. */\n purchaseOrderReference?: string | undefined;\n /** Reference to a sales order created by the seller\nBT-14 in XRechnung. */\n salesOrderReference?: string | undefined;\n /** Reference to a delivery note\nBT-15 in XRechnung. */\n receivingAdviceReference?: string | undefined;\n /** Reference to a dispatch advice\nBT-16 in XRechnung. */\n dispatchAdviceReference?: string | undefined;\n /** Reference to a tender or lot\nBT-17 in XRechnung. */\n tenderOrLotReference?: string | undefined;\n /** Reference to a custom item, e.g. a phone number, person,\ncontract or anything that would identify the invoice in the buyer's system\nBT-18 in XRechnung. */\n invoicedObjectIdentifier?: string | undefined;\n /** This is a reference for accounting, like a cost center or similar. In German,\nthis would be a \"Kostenstelle\".\nBT-19 in XRechnung. */\n accountingReference?: string | undefined;\n}\n\n/** References to previous invoices */\nexport interface PreviousInvoice {\n /** The date of the previous invoice */\n invoiceDate?: Date | undefined;\n /** The number of the previous invoice */\n invoiceNumber?: string | undefined;\n}\n\n/** Represents an organization, e.g. a buyer or a seller */\nexport interface Organization {\n /** The identifier of the organization */\n identifier?: string | undefined;\n /** The name of the organization */\n name?: string | undefined;\n /** A registration number, e.g. a Handelsregisternummer in Germany */\n registrationNumber?: string | undefined;\n /** The VAT ID for the organization */\n vatId?: string | undefined;\n /** The tax ID for the organization */\n taxId?: string | undefined;\n /** An email address for the organization */\n email?: string | undefined;\n /** The name of a contact person */\n contactPersonName?: string | undefined;\n /** The phone of a contact person */\n contactPersonPhone?: string | undefined;\n /** The email of a contact person */\n contactPersonEmail?: string | undefined;\n /** The address of the organization */\n address?: string | undefined;\n /** The city of the organization */\n city?: string | undefined;\n /** The zip code of the organization */\n zipCode?: string | undefined;\n /** The ISO 3166-1 2 letter country code */\n countryCode?: string | undefined;\n /** The state of the organization, e.g. a federal state in Germany */\n state?: string | undefined;\n /** This provides some additional legal information.\nBT-33 in XRechnung, and this is only used for the seller. */\n additionalLegalInformation?: string | undefined;\n}\n\n/** Represents a payee, meaning someone that receives the payment */\nexport interface Payee {\n /** The name of the payee */\n name?: string | undefined;\n /** The identifier of the payee */\n identifier?: string | undefined;\n /** A registered identifier for the payee, e.g. a VAT ID\nor Tax ID */\n legalRegistrationIdentifier?: string | undefined;\n}\n\n/** Represents a note / text in an invoice */\nexport interface InvoiceNote {\n /** Short summary / heading. Should be a text code from this list:\nhttps://unece.org/fileadmin/DAM/trade/untdid/d16b/tred/tred4451.htm */\n shortText?: string | undefined;\n /** Explanation of this note */\n longText?: string | undefined;\n}\n\n/** Represents an invoice period with start and end dates */\nexport interface InvoicePeriod {\n /** The start date */\n start?: Date | undefined;\n /** The end date */\n end?: Date | undefined;\n}\n\n/** Information about the delivery */\nexport interface DeliveryInformation {\n /** BT-70 in XRechnung */\n deliverToName?: string | undefined;\n /** BT-71 in XRechnung */\n deliverToLocationIdentifier?: string | undefined;\n /** BT-72 in XRechnung */\n deliveryDate?: Date | undefined;\n /** BG-15 in XRechnung */\n deliveryAddress?: DeliveryAddress | undefined;\n}\n\n/** Address for deliveries */\nexport interface DeliveryAddress {\n /** The address. BT-75, BT-76 and BT-165 in XRechnung. */\n address?: string | undefined;\n /** The city. BT-77 in XRechnung. */\n city?: string | undefined;\n /** The zip code. BT-78 in XRechnung. */\n zipCode?: string | undefined;\n /** The ISO 3166-1 2 letter country code. BT-80 in XRechnung. */\n countryCode?: string | undefined;\n}\n\n/** Totals for the invoice */\nexport interface InvoiceTotals {\n /** Sum of all invoice items in net.\nBT-106 in XRechnung. */\n totalNet?: number | undefined;\n /** This is the sum of all allowances (e.g. deductions or withheld tax) in the invoice\nBT-107 in XRechnung. */\n totalAllowances?: number | undefined;\n /** This is the sum of all charges in the invoice, except VAT. For example, late\nfees or surcharges.\nBT-108 in XRechnung. */\n totalCharges?: number | undefined;\n /** This is the total net value of the invoice after applied allowances and charges,\nmeaning the actual net sum to be paid.\nBT-109 in XRechnung. */\n totalAfterDeductions?: number | undefined;\n /** The total amount of VAT in the invoice.\nBT-110 in XRechnung. */\n totalVatAmount?: number | undefined;\n /** The total gross amount of the invoice, including all taxes and deductions.\nBT-112 in XRechnung. */\n totalGross?: number | undefined;\n /** The total amount that has already been paid for this invoice, e.g. used when\nprevious invoice sums are included here that have already been paid.\nBT-113 in XRechnung. */\n alreadyPaidTotal?: number | undefined;\n /** If this is given, this specifies if any rounding amount is applied to the invoice,\nbefore calculating the TotalToBePaid value.\nBT-114 in XRechnung. */\n payableRoundingAmount?: number | undefined;\n /** The sum that needs to be paid for this invoice. This is the total gross amount\nminus the already paid amount.\nBT-115 in XRechnung. */\n totalToBePaid?: number | undefined;\n}\n\n/** Instructions how payment for an invoice should be provided. */\nexport interface PaymentInstructions {\n /** Additional text to describe the payment instructions. */\n description?: string | undefined;\n /** This should be a code according to UN/ECE 4461\nto identify the type of payment. For example, code \"58\" means SEPA Credit Transfer,\nand code \"30\" means non-SEPA Credit Transfer.\nSee this list: https://unece.org/fileadmin/DAM/trade/edifact/code/4461cl.htm */\n paymentTypeCode?: string | undefined;\n /** If a SEPA direct debit payment mean is used, then this reference should be provided.\nIt's the creditor identifier in SEPA, in German \"Gläubiger-Identifikationsnummer\".\nField BT-90 in XRechnung. */\n paymentCreditorIdentifier?: string | undefined;\n /** A list of payment means that can be used to pay the invoice. */\n paymentMeans?: PaymentMeans[] | undefined;\n}\n\n/** Represents a payment means for an invoice */\nexport interface PaymentMeans {\n /** This is typically the IBAN or account number\nBT-84 in XRechnung. */\n accountIdentifier?: string | undefined;\n /** The name for the account, typically the name of the owner for\na bank account.\nBT-85 in XRechnung. */\n accountName?: string | undefined;\n /** This can be the BIC\nBT-86 in XRechnung. */\n serviceProviderIdentifier?: string | undefined;\n /** If used, this is the mandate id for direct debit under which\nthe direct debit will be performed\nBT-89 in XRechnung. */\n directDebitMandateId?: string | undefined;\n /** If used, this is the IBAN for direct debit\nBT-91 in XRechnung. */\n directDebitIban?: string | undefined;\n /** The payment id, e.g. a reference number for the payment. In German,\nthis would be called \"Verwendungszweck\".\nBT-83 in XRechnung. */\n paymentId?: string | undefined;\n}\n\n/** Represents a document / attachment that is included with the invoice */\nexport interface SupportingDocument {\n /** This is typically an id or a name */\n documentReference?: string | undefined;\n /** A description of the document */\n description?: string | undefined;\n /** A link to the document in case this is an external reference */\n externalDocumentUrl?: string | undefined;\n /** The document in base64 encoded form as binary data */\n documentBase64?: string | undefined;\n /** This should be present if DocumentBase64 is set. */\n fileName?: string | undefined;\n /** The type of the document */\n documentMimeType?: AttachmentMimeType | undefined;\n}\n\n/** Describes a mime type of a document */\nexport enum AttachmentMimeType {\n Unknown = 0,\n Pdf = 1,\n Png = 2,\n Jpeg = 3,\n Csv = 4,\n Excel = 5,\n OpenOfficeSpreadsheet = 6\n}\n\n/** Describes the VAT breakdown for an invoice in a single VAT category */\nexport interface VatBreakdown {\n /** The total net amount of this VAT category */\n netTaxableAmount?: number | undefined;\n /** The total VAT */\n vatAmount?: number | undefined;\n /** The category of the VAT */\n vatCategory?: VatCategory | undefined;\n /** The actual tax rate as a decimal value,\ne.g. 19% would be 0.19 */\n taxRate?: number | undefined;\n /** If the VAT is exempt, there should be a description here.\nFor example, in reverse charge scenarios, this text\nshould contain a reference to \"Reverse charge according to ...\". */\n vatExemptionReasonText?: string | undefined;\n /** A code from the VAT exemption reason code list(VATEX)“ */\n vatExemptionReasonCode?: string | undefined;\n}\n\n/** The category used in a VatBreakdown\"/> */\nexport enum VatCategory {\n Unknown = 0,\n StandardRate = 1,\n ZeroRatedGoods = 2,\n ExemptFromTax = 3,\n VatReverseCharge = 4,\n VatExemptReverseCharge = 5,\n FreeExportItem = 6,\n ServicesOutsideScopeOfTaxation = 7,\n CanaryIslandsGeneralIndirectTax = 8,\n TaxInCeutaAndMelilla = 9\n}\n\n/** This describes an allowance in an invoice, which is a deduction from the total amount */\nexport interface InvoiceAllowance {\n /** The net amount of the allowance */\n netAmount?: number | undefined;\n /** If this is a relative / percentage allowance, this should be set\nand give the base amount that is being used for the calculation */\n relativeAllowanceBaseAmount?: number | undefined;\n /** If this is a relative / percentage allowance, this should be set\nand be given in decimal representation, meaning 19% would be 0.19 */\n relativeAllowancePercentage?: number | undefined;\n /** The VAT category for the allowance */\n vatCategory?: VatCategory | undefined;\n /** The actual tax rate as a decimal value,\nmeaning 19% would be 0.19 */\n vatRate?: number | undefined;\n /** A description of the allowance. This should not be set it ReasonCode\nis provided, otherwise this one takes precedence. */\n reason?: string | undefined;\n /** A reason code for the allowance according to UNTDID 5189.\nSee this list: https://unece.org/fileadmin/DAM/trade/untdid/d16b/tred/tred5189.htm */\n reasonCode?: string | undefined;\n}\n\n/** This describes an charge in an invoice, which is a surcharge to the total amount */\nexport interface InvoiceCharge {\n /** The net amount of the charge */\n netAmount?: number | undefined;\n /** If this is a relative / percentage charge, this should be set\nand give the base amount that is being used for the calculation */\n relativeChargeBaseAmount?: number | undefined;\n /** If this is a relative / percentage charge, this should be set\nand be given in decimal representation, meaning 19% would be 0.19 */\n relativeChargePercentage?: number | undefined;\n /** The VAT category for the charge */\n vatCategory?: VatCategory | undefined;\n /** The actual tax rate as a decimal value,\nmeaning 19% would be 0.19 */\n vatRate?: number | undefined;\n /** A description of the charge. This should not be set it ReasonCode\nis provided, otherwise this one takes precedence. */\n reason?: string | undefined;\n /** A reason code for the charge according to UNTDID 7161.\nSee this list: https://unece.org/fileadmin/DAM/trade/untdid/d16b/tred/tred5189.htm */\n reasonCode?: string | undefined;\n}\n\n/** Represents a single invoice line item */\nexport interface InvoiceLineItem {\n /** An unique identifier for the line item */\n identifier?: string | undefined;\n /** An unstructured note to classify line items */\n note?: string | undefined;\n /** A seller-defined object identifier for this line item,\nmeaning an identifier for the actual line. This could be\na numbering sequence or a reference to a product. */\n objectIdentifier?: string | undefined;\n /** The actual invoiced quantity of the line item */\n quantity?: number | undefined;\n /** A code for the unit of the quantity. This should be a code as defined\nin UN/ECE Recommendation No. 20 „Codes for Units of Measure Used in \nInternational Trade“ und UN/ECE Recommendation No 21 „Codes for Passengers,\nTypes of Cargo, Packages and Packaging Materials(with Complementary Codes for Package Names) */\n unitCode?: string | undefined;\n /** The net amount for this line item. This is the total price for positions */\n netAmount?: number | undefined;\n /** A reference to an item in the buyers purachase order */\n purchaseOrderReference?: string | undefined;\n /** Information about the invoice period for this line item. */\n lineItemPeriod?: InvoicePeriod | undefined;\n /** Allowances specific to this line item */\n allowances?: LineItemAllowance[] | undefined;\n /** charges specific to this line item */\n charges?: LineItemCharge[] | undefined;\n /** Price details for this line item. */\n priceDetails?: LineItemPriceDetail | undefined;\n /** VAT information for this line item */\n vatInformation?: LineItemVatInformation[] | undefined;\n /** Information about this line item */\n itemInformation?: LineItemInformation | undefined;\n /** Line items can be nested, in which case this property holds the sub items */\n subItems?: InvoiceLineItem[] | undefined;\n}\n\n/** Allowance for a single line item */\nexport interface LineItemAllowance {\n /** The net amount of the allowance */\n netAmount?: number | undefined;\n /** If this is a relative / percentage allowance, this should be set\nand give the base amount that is being used for the calculation */\n relativeAllowanceBaseAmount?: number | undefined;\n /** If this is a relative / percentage allowance, this should be set\nand be given in decimal representation, meaning 19% would be 0.19 */\n relativeAllowancePercentage?: number | undefined;\n /** A description of the allowance. */\n reason?: string | undefined;\n /** A reason code for the allowance according to UNTDID 5189. */\n reasonCode?: string | undefined;\n}\n\n/** Charge for a single line item */\nexport interface LineItemCharge {\n /** The net amount of the charge */\n netAmount?: number | undefined;\n /** If this is a relative / percentage charge, this should be set\nand give the base amount that is being used for the calculation */\n relativeChargeBaseAmount?: number | undefined;\n /** If this is a relative / percentage charge, this should be set\nand be given in decimal representation, meaning 19% would be 0.19 */\n relativeChargePercentage?: number | undefined;\n /** A description of the charge. */\n reason?: string | undefined;\n /** A reason code for the charge according to UNTDID 7161. */\n reasonCode?: string | undefined;\n}\n\n/** Price details about a line item */\nexport interface LineItemPriceDetail {\n /** The net price of this line item. This is the unit price */\n netPrice?: number | undefined;\n /** A discount for this line item, given as an absolute value. It is essentially the difference between NetPrice (or the list price)\nand the actual invoiced price GrossPrice. */\n absoluteDiscountPerItem?: number | undefined;\n /** The gross price of this line item, meaning the price without taxes\nthat will be invoiced */\n grossPrice?: number | undefined;\n /** The quantity for which this price is valid. In combination with the NetPrice,\nyou basically specify the denominator of the unit price for a line item. */\n baseQuantity?: number | undefined;\n /** A code representing the unit for the base quantity */\n baseQuantityUnitCode?: string | undefined;\n}\n\n/** VAT information for a single line item */\nexport interface LineItemVatInformation {\n /** The VAT category for the charge */\n vatCategory?: VatCategory | undefined;\n /** The actual tax rate as a decimal value,\nmeaning 19% would be 0.19 */\n vatRate?: number | undefined;\n}\n\n/** Information about a single line item */\nexport interface LineItemInformation {\n /** A name for the line item */\n name?: string | undefined;\n /** A description for the line item */\n description?: string | undefined;\n /** An identifier assigned by the seller, e.g. an internal article number */\n sellerIdentifier?: string | undefined;\n /** An identifier assigned by the buyer, e.g. an internal article number */\n buyerIdentifier?: string | undefined;\n /** A standard identifier for the line item, e.g. an EAN or a GTIN */\n standardIdentifier?: string | undefined;\n /** If used together with StandardIdentifier, this is the scheme identifier\nfor which standard is used. */\n standardSchemeId?: string | undefined;\n /** A list of classification identifiers for the line item */\n classificationIdentifiers?: string[] | undefined;\n /** The origin country code according to ISO 3166-1 in 2 letter format */\n countryOfOrigin?: string | undefined;\n /** Optional additional attributes for this line item */\n attributes?: LineItemAttribute[] | undefined;\n}\n\n/** A key-value pair for additional information */\nexport interface LineItemAttribute {\n /** The key / name of the attribute */\n name?: string | undefined;\n /** The value of the attribute */\n value?: string | undefined;\n}\n\n/** This enum represents the source of an invoice, e.g. from which format it was imported */\nexport enum SourceType {\n Self = 0,\n Ubl = 1,\n Cii = 2\n}\n\n/** This is a wrapper class that maps Dangl.AVA projects along with additional required information to create invoices */\nexport interface AvaProjectWrapper {\n /** The Dangl.AVA.Project from which to convert */\n project?: ProjectDto | undefined;\n /** The number of the invoice */\n invoiceNumber?: string | undefined;\n /** Attached documents to the invoice */\n documents?: SupportingDocument[] | undefined;\n /** The period during which the services or goods were delivered */\n invoicePeriod?: InvoicePeriod | undefined;\n /** Instructions how to perform the payment */\n paymentInstructions?: PaymentInstructions | undefined;\n /** The type of the invoice */\n invoiceType?: InvoiceType | undefined;\n /** If this is set to true, the invoice will be marked as a reverse charge invoice\nin all VAT rates. You still need to ensure that the actual tax rates are set\nto zero in all elements */\n isEuReverseChargeInvoice?: boolean | undefined;\n /** Until when the payment is due */\n paymentDueDate?: Date | undefined;\n /** A text description of payment terms, e.g. cash discounts or payment conditions */\n paymentTerms?: string | undefined;\n /** In case of partial of final invoices, it's possible to reference the previous invoice numbers */\n previousInvoices?: PreviousInvoice[] | undefined;\n /** If parts of this invoice (or of previous invoices) have already been paid,\nthen this property can be used to specify that some parts of the invoice\nare already paid and this will be deducted from the to be paid amount. */\n alreadyPaidTotalGross?: number | undefined;\n /** An object holding reference used in this invoice */\n references?: References | undefined;\n /** Optional document level allowances. For example, those can be used to supply\nglobal discounts e.g. for security deposits. When using this property, please\npay attention that a deduction factor on the exported ServiceSpecification\nwill also be exported as an allowance, in this case the total price of the\ninvoice might be different from the total price of the ServiceSpecification. */\n allowances?: InvoiceAllowance[] | undefined;\n /** Optional document level charges, e.g. for shipping or handling. When using this property,\nplease pay attention that the charges given here will be applied to the already calculated\ntotal price of the ServiceSpecification, in this case the total price of the invoice\nmight be different from the total price of the ServiceSpecification. */\n charges?: InvoiceCharge[] | undefined;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { AttachmentMimeType } from '../model';\n\n@Pipe({\n name: 'invoiceAttachmentMimeType',\n standalone: true\n})\nexport class InvoiceAttachmentMimeTypePipe implements PipeTransform {\n transform(attachmentMimeType: AttachmentMimeType): string {\n switch (attachmentMimeType) {\n case AttachmentMimeType.Pdf:\n return 'PDF';\n case AttachmentMimeType.Png:\n return 'PNG';\n case AttachmentMimeType.Jpeg:\n return 'JPEG';\n case AttachmentMimeType.Csv:\n return 'CSV';\n case AttachmentMimeType.Excel:\n return 'Excel';\n case AttachmentMimeType.OpenOfficeSpreadsheet:\n return 'Open Office Spreadsheet';\n\n case AttachmentMimeType.Unknown:\n default:\n return 'Unknown';\n }\n }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { AfterViewInit, ChangeDetectionStrategy, Component, DestroyRef, Input, OnInit, ViewChild, inject } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatExpansionModule, MatExpansionPanel } from '@angular/material/expansion';\n\nimport { Observable } from 'rxjs';\n\nimport { SupportingDocument } from '../../model/invoice-models';\nimport { ITextWordInvoice } from '../../model/invoice-words.model';\nimport { InvoiceAttachmentMimeTypePipe } from '../../pipes/invoice-attachment-mime-type.pipe';\nimport { ConfigurationInvoiceService } from '../../services/configuration-invoice.service';\n\n@Component({\n selector: 'ava-invoice-documents',\n imports: [MatExpansionModule, MatButtonModule, InvoiceAttachmentMimeTypePipe, AsyncPipe],\n templateUrl: './invoice-documents.component.html',\n styleUrl: './invoice-documents.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class InvoiceDocumentsComponent implements OnInit, AfterViewInit {\n @Input() documents: SupportingDocument[] = [];\n\n @ViewChild('documentsPanel') documentsPanel: MatExpansionPanel | null = null;\n\n private destroyRef = inject(DestroyRef);\n\n readonly textWords$: Observable<ITextWordInvoice | null> = this.configurationInvoiceService.getTextWordsFromConfig();\n public pdfViewEnabled = false;\n\n constructor(private configurationInvoiceService: ConfigurationInvoiceService) {}\n\n ngOnInit(): void {\n this.configurationInvoiceService\n .getPdfViewEnabledFromConfig()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((pdfViewEnabled) => {\n this.pdfViewEnabled = pdfViewEnabled;\n });\n }\n\n ngAfterViewInit(): void {\n if (this.documentsPanel && this.pdfViewEnabled) {\n // In a static PDF view, we always want to open the documents panel\n this.documentsPanel.open();\n }\n }\n\n public download(documentValue: SupportingDocument): void {\n if (documentValue.documentBase64) {\n this.downloadAny(documentValue);\n } else {\n this.downloadLink(documentValue);\n }\n }\n\n private downloadAny(documentValue: SupportingDocument): void {\n if (documentValue.documentBase64) {\n const byteCharacters = atob(documentValue.documentBase64);\n const byteNumbers = new Array(byteCharacters.length);\n for (let i = 0; i < byteCharacters.length; i++) {\n byteNumbers[i] = byteCharacters.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n const blob = new Blob([byteArray], { type: 'application/octet-stream' });\n this.saveAs(blob, documentValue.fileName as string);\n }\n }\n\n private async downloadLink(documentValue: SupportingDocument): Promise<void> {\n try {\n const response = await fetch(documentValue.externalDocumentUrl as string);\n const blob = await response.blob();\n this.saveAs(blob, documentValue.fileName as string);\n } catch (error) {\n console.error(error);\n }\n }\n\n private saveAs(blob: Blob, fileName: string): void {\n const link = document.createElement('a');\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n }\n}\n","@if (textWords$ | async; as textWords) {\n <mat-accordion>\n <mat-expansion-panel\n [hideToggle]=\"pdfViewEnabled\"\n #documentsPanel\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{ textWords.attachmentsHeading }}\n </mat-panel-title>\n </mat-expansion-panel-header>\n @for (document of documents; track document.documentReference) {\n <div class=\"document\">\n @if (document.documentReference) {\n <div>\n <strong>{{ textWords.attachmentsName }}: </strong>\n <span>{{ document.documentReference }}</span>\n </div>\n }\n @if (document.description) {\n <div>\n <strong>{{ textWords.attachmentsDescription }}: </strong>\n <span>{{ document.description }}</span>\n </div>\n }\n @if (document.externalDocumentUrl) {\n <div>\n <strong>{{ textWords.attachmentsUrl }}: </strong>\n <span>{{ document.externalDocumentUrl }}</span>\n </div>\n } @else if (document.documentBase64) {\n <div>\n <strong>{{ textWords.attachmentsDataSize }}: </strong>\n <span>{{ document.documentBase64.length }}</span>\n </div>\n\n @if (document.documentMimeType) {\n <div>\n <strong>{{ textWords.attachmentsMimeType }}: </strong>\n <span>{{ document.documentMimeType | invoiceAttachmentMimeType }}</span>\n </div>\n }\n }\n @if (document.fileName) {\n <div>\n <strong>{{ textWords.attachmentsFileName }}: </strong>\n <span>{{ document.fileName }}</span>\n </div>\n }\n @if (!pdfViewEnabled) {\n <button\n mat-raised-button\n color=\"primary\"\n (click)=\"download(document)\"\n [disabled]=\"!document.externalDocumentUrl && !document.documentBase64\"\n >\n {{ textWords.attachmentsDownloadButton }}\n </button>\n }\n </div>\n }\n </mat-expansion-panel>\n </mat-accordion>\n}\n","import { AsyncPipe, CurrencyPipe, DatePipe, PercentPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, input } from '@angular/core';\nimport { MatDividerModule } from '@angular/material/divider';\n\nimport { Observable } from 'rxjs';\n\nimport { IConfigurationInvoice, ITextWordInvoice } from '../../model';\nimport { Invoice } from '../../model';\nimport { ConfigurationInvoiceService } from '../../services/configuration-invoice.service';\n\nimport { InvoiceDocumentsComponent } from '../invoice-documents/invoice-documents.component';\n\n@Component({\n selector: 'ava-invoice-display',\n imports: [CurrencyPipe, DatePipe, PercentPipe, AsyncPipe, MatDividerModule, InvoiceDocumentsComponent],\n templateUrl: './invoice-display.component.html',\n styleUrl: './invoice-display.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [ConfigurationInvoiceService]\n})\nexport class InvoiceDisplayComponent {\n // TODO remove type any after TODO under will be resolved\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n invoice: any = input.required<Invoice>();\n\n readonly textWords$: Observable<ITextWordInvoice | null> = this.configurationInvoiceService.getTextWordsFromConfig();\n\n /**\n * You can supply a map of strings to be used for the text in the tree. This allows you to translate\n * the text in the tree to other languages.\n * {\n * invoiceTitle: string;\n * vatId: string;\n * detailsInvoiceNumber: string;\n * detailsInvoiceDate: string;\n * detailsPaymentDueDate: string;\n * detailsCurrencyCode: string;\n * detailsPaymentTerms: string;\n * referencesTopic: string;\n * referencesBuyerReference: string;\n * referencesProjectReference: string;\n * referencesContractReference: string;\n * referencesPurchaseOrderReference: string;\n * referencesSalesOrderReference: string;\n * referencesReceivingAdviceReference: string;\n * referencesDispatchAdviceReference: string;\n * referencesTenderOrLotReference: string;\n * referencesInvoicedObjectIdentifier: string;\n * tableHeadDescription: string;\n * tableHeadQuantity: string;\n * tableHeadUnit: string;\n * tableHeadNetPrice: string;\n * tableHeadNetAmount: string;\n * totalsTopic: string;\n * totalsTotalNet: string;\n * totalsTotalAllowances: string;\n * totalsTotalCharges: string;\n * totalsTotalAfterDeductions: string;\n * totalsTotalVatAmount: string;\n * totalsTotalGross: string;\n * totalsAlreadyPaidTotal: string;\n * totalsTotalToBePaid: string;\n * instructionsTopic: string;\n * instructionsAccountIdentifier: string;\n * instructionsAccountName: string;\n * instructionsServiceProviderIdentifier: string;\n * notesTopic: string;\n * attachmentsHeading: string;\n * attachmentsName: string;\n * attachmentsDescription: string;\n * attachmentsUrl: string;\n * attachmentsDataSize: string;\n * attachmentsMimeType: string;\n * attachmentsFileName: string;\n * attachmentsDownloadButton: string;\n *\n * }\n */\n\n @Input() set config(configObject: IConfigurationInvoice) {\n if (this.configurationInvoiceService.getCurrentInvoiceConfig()) {\n const config = { ...this.configurationInvoiceService.getCurrentInvoiceConfig(), ...configObject };\n this.configurationInvoiceService.setInvoiceConfig(config);\n }\n }\n\n constructor(private configurationInvoiceService: ConfigurationInvoiceService) {\n /**TODO: For setting invoice instead:\n * <ava-invoice-display id=\"invoice\"></ava-invoice-display>\n * invoice = document.getElementById('invoice');\n * invoice.invoice = INVOICE;\n * we should pass value to global window variable\n * window['InvoiceGlobalVariable'] = INVOICE;\n * Temporary solution until the problem of setting the value for InputSignal is solved. See this PR https://github.com/angular/angular/pull/55067\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((window as any)['InvoiceGlobalVariable']) {\n this.invoice = () => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (window as any)['InvoiceGlobalVariable'];\n };\n }\n }\n}\n","@if (textWords$ | async; as textWords) {\n <div class=\"invoice-container\">\n <!-- Seller and Buyer Information -->\n <h1 class=\"invoice-title\">{{ textWords.invoiceTitle }}</h1>\n <header class=\"invoice-header\">\n <div class=\"buyer-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceBuyerTitle }}</h2>\n <p>\n <strong>{{ invoice().buyer?.name }}</strong>\n </p>\n <p>{{ invoice().buyer?.address }}</p>\n <p>{{ invoice().buyer?.city }}, {{ invoice().buyer?.zipCode }}</p>\n <p>{{ invoice().buyer?.countryCode }}</p>\n @if (invoice().buyer?.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <span>{{ invoice().buyer?.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (invoice().buyer?.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <span>{{ invoice().buyer?.contactPersonName }}</span>\n </p>\n }\n @if (invoice().buyer?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <span>{{ invoice().buyer?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice().buyer?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <span>{{ invoice().buyer?.contactPersonEmail }}</span>\n </p>\n }\n </div>\n <div class=\"invoice-details\">\n <h2 [class.header]=\"textWords.invoiceBuyerTitle.trim() || textWords.invoiceSellerTitle.trim()\"></h2>\n @if (invoice().invoiceNumber) {\n <p>\n <strong>{{ textWords.detailsInvoiceNumber }}: </strong>\n <span>{{ invoice().invoiceNumber }}</span>\n </p>\n }\n @if (invoice().invoiceDate) {\n <p>\n <strong>{{ textWords.detailsInvoiceDate }}: </strong>\n <span>{{ invoice().invoiceDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().paymentDueDate) {\n <p>\n <strong>{{ textWords.detailsPaymentDueDate }}: </strong>\n <span>{{ invoice().paymentDueDate | date: 'dd.MM.yyyy' }}</span>\n </p>\n }\n @if (invoice().currencyCode) {\n <p>\n <strong>{{ textWords.detailsCurrencyCode }}: </strong>\n <span>{{ invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().paymentTerms) {\n <p>\n <strong>{{ textWords.detailsPaymentTerms }}: </strong>\n <span>{{ invoice().paymentTerms }}</span>\n </p>\n }\n </div>\n <div class=\"seller-info\">\n <h2 class=\"header-title\">{{ textWords.invoiceSellerTitle }}</h2>\n <p>\n <strong>{{ invoice().seller?.name }}</strong>\n </p>\n <p>{{ invoice().seller?.address }}</p>\n <p>{{ invoice().seller?.city }}, {{ invoice().seller?.zipCode }}</p>\n <p>{{ invoice().seller?.countryCode }}</p>\n @if (invoice().seller?.vatId) {\n <p>\n <strong>{{ textWords.vatId }}: </strong>\n <span>{{ invoice().seller?.vatId }}</span>\n </p>\n }\n <mat-divider></mat-divider>\n @if (invoice().seller?.contactPersonName) {\n <p>\n <strong>{{ textWords.contactPersonName }}: </strong>\n <span>{{ invoice().seller?.contactPersonName }}</span>\n </p>\n }\n @if (invoice().seller?.contactPersonPhone) {\n <p>\n <strong>{{ textWords.contactPersonPhone }}: </strong>\n <span>{{ invoice().seller?.contactPersonPhone }}</span>\n </p>\n }\n @if (invoice().seller?.contactPersonEmail) {\n <p>\n <strong>{{ textWords.contactPersonEmail }}: </strong>\n <span>{{ invoice().seller?.contactPersonEmail }}</span>\n </p>\n }\n </div>\n </header>\n <mat-divider></mat-divider>\n <div class=\"invoice-info\">\n <section class=\"invoice-references\">\n @if (textWords.referencesTopic) {\n <h2 class=\"info-title\">{{ textWords.referencesTopic }}</h2>\n }\n @if (invoice().references?.buyerReference) {\n <p>\n <strong>{{ textWords.referencesBuyerReference }}: </strong>\n <span>{{ invoice().references?.buyerReference }}</span>\n </p>\n }\n @if (invoice().references?.projectReference) {\n <p>\n <strong>{{ textWords.referencesProjectReference }}: </strong>\n <span>{{ invoice().references?.projectReference }}</span>\n </p>\n }\n @if (invoice().references?.contractReference) {\n <p>\n <strong>{{ textWords.referencesContractReference }}: </strong>\n <span>{{ invoice().references?.contractReference }}</span>\n </p>\n }\n @if (invoice().references?.purchaseOrderReference) {\n <p>\n <strong>{{ textWords.referencesPurchaseOrderReference }}: </strong>\n <span>{{ invoice().references?.purchaseOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.salesOrderReference) {\n <p>\n <strong>{{ textWords.referencesSalesOrderReference }}: </strong>\n <span>{{ invoice().references?.salesOrderReference }}</span>\n </p>\n }\n @if (invoice().references?.receivingAdviceReference) {\n <p>\n <strong>{{ textWords.referencesReceivingAdviceReference }}: </strong>\n <span>{{ invoice().references?.receivingAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.dispatchAdviceReference) {\n <p>\n <strong>{{ textWords.referencesDispatchAdviceReference }}: </strong>\n <span> {{ invoice().references?.dispatchAdviceReference }}</span>\n </p>\n }\n @if (invoice().references?.tenderOrLotReference) {\n <p>\n <strong>{{ textWords.referencesTenderOrLotReference }}: </strong>\n <span>{{ invoice().references?.tenderOrLotReference }}</span>\n </p>\n }\n @if (invoice().references?.invoicedObjectIdentifier) {\n <p>\n <strong>{{ textWords.referencesInvoicedObjectIdentifier }}: </strong>\n <span>{{ invoice().references?.invoicedObjectIdentifier }}</span>\n </p>\n }\n </section>\n @if (invoice().deliveryInformation) {\n <section class=\"invoice-delivery\">\n <h2 class=\"info-title\">{{ textWords.deliveryInformationTitle }}</h2>\n\n @if (invoice().deliveryInformation?.deliverToName) {\n <p>\n <strong>{{ textWords.deliverToName }}: </strong>\n <span>{{ invoice().deliveryInformation?.deliverToName }}</span>\n </p>\n }\n @if (invoice().deliveryInformation?.deliverToLocationIdentifier) {\n <p>\n <strong>{{ textWords.deliverToLocationIdentifier }}: </strong>\n <span>{{ invoice().deliveryInformation?.deliverToLocationIdentifier }}</span>\n </p>\n }\n @if (invoice().deliveryInformation?.deliveryDate) {\n <p>\n <strong>{{ textWords.deliveryDate }}: </strong>\n <span>{{ invoice().deliveryInformation?.deliveryDate | date: 'shortDate' }}</span>\n </p>\n }\n @if (invoice().deliveryInformation?.deliveryAddress) {\n <p>\n <strong>{{ textWords.deliveryAddress }}: </strong>\n <span>\n @if (invoice().deliveryInformation?.deliveryAddress?.address) {\n <p>{{ invoice().deliveryInformation?.deliveryAddress?.address }}</p>\n }\n @if (invoice().deliveryInformation?.deliveryAddress?.city) {\n <span>{{ invoice().deliveryInformation?.deliveryAddress?.city }},</span>\n }\n @if (invoice().deliveryInformation?.deliveryAddress?.zipCode) {\n <span>{{ invoice().deliveryInformation?.deliveryAddress?.zipCode }}</span>\n }\n @if (invoice().deliveryInformation?.deliveryAddress?.countryCode) {\n <p>{{ invoice().deliveryInformation?.deliveryAddress?.countryCode }}</p>\n }\n </span>\n </p>\n }\n </section>\n }\n </div>\n\n <table class=\"invoice-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>{{ textWords.tableHeadDescription }}</th>\n <th>{{ textWords.tableHeadQuantity }}</th>\n <th>{{ textWords.tableHeadUnit }}</th>\n <th>{{ textWords.tableHeadNetPrice }}</th>\n <th>{{ textWords.tableHeadNetAmount }}</th>\n <th>{{ textWords.vat }}</th>\n </tr>\n </thead>\n <tbody>\n @for (item of invoice().lineItems; track item; let i = $index) {\n <tr>\n <td>{{ i + 1 }}</td>\n <td>{{ item.itemInformation?.description }}</td>\n <td>{{ item.quantity }}</td>\n <td>{{ item.unitCode }}</td>\n <td class=\"currency-table-cell\">{{ item.priceDetails?.netPrice | currency: invoice().currencyCode }}</td>\n <td class=\"currency-table-cell\">{{ item.netAmount | currency: invoice().currencyCode }}</td>\n <td class=\"currency-table-cell\">{{ item.vatInformation[0]?.vatRate | percent: '1.0-2' }}</td>\n </tr>\n }\n </tbody>\n </table>\n\n <div class=\"addition-info\">\n <section class=\"invoice-totals\">\n <h2 class=\"info-title\">{{ textWords.totalsTopic }}</h2>\n\n @if (invoice().totals?.totalNet) {\n <p>\n <strong>{{ textWords.totalsTotalNet }}: </strong>\n <span>{{ invoice().totals?.totalNet | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAllowances) {\n <p>\n <strong>{{ textWords.totalsTotalAllowances }}: </strong>\n <span> {{ invoice().totals?.totalAllowances | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalCharges) {\n <p>\n <strong>{{ textWords.totalsTotalCharges }}: </strong>\n <span> {{ invoice().totals?.totalCharges | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalAfterDeductions) {\n <p>\n <strong>{{ textWords.totalsTotalAfterDeductions }}: </strong>\n <span>{{ invoice().totals?.totalAfterDeductions | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalVatAmount) {\n <p>\n <strong>{{ textWords.totalsTotalVatAmount }}: </strong>\n <span>{{ invoice().totals?.totalVatAmount | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalGross) {\n <p>\n <strong>{{ textWords.totalsTotalGross }}: </strong>\n <span> {{ invoice().totals?.totalGross | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.alreadyPaidTotal) {\n <p>\n <strong>{{ textWords.totalsAlreadyPaidTotal }}: </strong>\n <span>{{ invoice().totals?.alreadyPaidTotal | currency: invoice().currencyCode }}</span>\n </p>\n }\n @if (invoice().totals?.totalToBePaid) {\n <p class=\"total\">\n <strong>{{ textWords.totalsTotalToBePaid }}: </strong>\n <strong> {{ invoice().totals?.totalToBePaid | currency: invoice().currencyCode }}</strong>\n </p>\n }\n </section>\n <section class=\"taxes\">\n <h2 class=\"info-title\">{{ textWords.taxesHeading }}</h2>\n <table class=\"tax-report-table\">\n <thead>\n <tr>\n <th>{{ textWords.vat }}</th>\n <th>{{ textWords.totalsTotalNet }}</th>\n <th>{{ textWords.totalsTotalVatAmount }}</th>\n </tr>\n </thead>\n <tbody>\n @for (tax of invoice().vatBreakdown; track tax.taxRate) {\n <tr>\n <td class=\"currency-table-cell\">\n @if (tax.taxRate) {\n <span>{{ tax.taxRate | percent: '1.0-2' }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.netTaxableAmount) {\n <span>{{ tax.netTaxableAmount | currency: invoice().currencyCode }}</span>\n }\n </td>\n <td class=\"currency-table-cell\">\n @if (tax.vatAmount) {\n <span>{{ tax.vatAmount | currency: invoice().currencyCode }}</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </section>\n\n <section class=\"payment-instructions\">\n <h2 class=\"info-title\">{{ textWords.instructionsTopic }}</h2>\n @if (invoice().paymentInstructions?.description) {\n <p>{{ invoice().paymentInstructions?.description }}</p>\n }\n @for (means of invoice().paymentInstructions?.paymentMeans; track means) {\n <div>\n @if (means.accountIdentifier) {\n <p>\n <strong>{{ textWords.instructionsAccountIdentifier }}: </strong>\n <span>{{ means.accountIdentifier }}</span>\n </p>\n }\n @if (means.accountName) {\n <p>\n <strong>{{ textWords.instructionsAccountName }}: </strong>\n <span>{{ means.accountName }}</span>\n </p>\n }\n @if (means.serviceProviderIdentifier) {\n <p>\n <strong>{{ textWords.instructionsServiceProviderIdentifier }}: </strong>\n <span>{{ means.serviceProviderIdentifier }}</span>\n </p>\n }\n </div>\n }\n </section>\n </div>\n\n <section class=\"invoice-notes\">\n <h2>{{ textWords.notesTopic }}</h2>\n @for (note of invoice().invoiceNotes; track note) {\n <div>\n @if (note?.shortText) {\n <p>\n <strong>{{ note?.shortText }}</strong>\n </p>\n }\n @if (note?.longText) {\n <p>{{ note?.longText }}</p>\n }\n </div>\n }\n </section>\n @if (invoice().documents?.length) {\n <section class=\"invoice-attachments\">\n <ava-invoice-documents [documents]=\"invoice().documents\"></ava-invoice-documents>\n </section>\n }\n </div>\n}\n","/*\n * Public API Surface of angular-ava\n */\n\nexport * from './lib/ava-tree/model';\nexport * from './lib/version';\nexport * from './lib/ava-tree/components/ava-tree/ava-tree.component';\nexport * from './lib/ava-tree/constants';\nexport * from './lib/invoice/components/invoice-display/invoice-display.component';\nexport * from './lib/invoice/constants';\nexport * from './lib/invoice/model';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.FlatElementsService","i2.ConfigurationTreeService","i1.SelectElementService","i2.TreeNodeSelectionService","i3.ConfigurationTreeService","i4","i6","i7","i3","i2.SelectElementService","i3.TreeNodeSelectionService","i4.ExpandParentGroupService","i5.KeyboardOperationService","i6.ConfigurationTreeService","i1.ConfigurationInvoiceService"],"mappings":"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"}
|