Categorie: reference Bijgewerkt: 2026-04-08 actionfield workflow actionfield136

ActionField136

Beschrijving: Create InvoiceLines for Purchase or Receipt (depending on property PurchaseAddType). Custom: Nee

Propertiesbewerken

Property Type Accessor
Invoice Invoice Root
Contexts List[Context] Optional
PurchaseAddType PurchaseAddType Optional
Statuses List[Status] Optional

XMLbewerken

<Workflow Name="ActionField136" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Create InvoiceLines for Purchase or Receipt (depending on property PurchaseAddType).</Description>
	<Properties>
		<Property	Name="Invoice"					Type="Invoice"				Accessor="Root"		Direction="In" />

		<Property	Name="Contexts"					Type="List[Context]"		Accessor="Optional"	Direction="In"		Default="PurchaseContext.Purchase"														Comment="Only select Purchases with these contexts" />
		<Property	Name="PurchaseAddType"			Type="PurchaseAddType"		Accessor="Optional"	Direction="In"		Default="None"																			Comment="Add InvoiceLines from None/Purchase/Receipt" />

		<Property	Name="Statuses"					Type="List[Status]"			Accessor="Optional"	Direction="InOut"	Default="PurchaseStatus.Active, PurchaseStatus.PartReceived, PurchaseStatus.Received"	Comment="Statuses other than those in default are ignored, subset is allowed" />

		<Property	Name="InvoiceLineCount"			Type="Int64"				Accessor="Internal" />
		<Property	Name="NegativePurchaseLines"	Type="Boolean"				Accessor="Internal" />
		<Property	Name="Purchase"					Type="Purchase"				Accessor="Internal" />
		<Property	Name="Purchases"				Type="List[Purchase]"		Accessor="Internal" />
		<Property	Name="PurchaseSqlWhereClause"	Type="String"				Accessor="Internal" />
		<Property	Name="ReceiptChosen"			Type="Receipt"				Accessor="Internal" />
		<Property	Name="ReceiptLines"				Type="List[ReceiptLine]"	Accessor="Internal" />
		<Property	Name="Receipts"					Type="List[Receipt]"		Accessor="Internal" />
		<Property	Name="ReceiptSqlWhereClause"	Type="String"				Accessor="Internal" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<Transaction>
			<When Name="When only one purchase allowed per invoice" Condition="#{UltimoSettings.InvoiceMorePurchaseAllowed} == False">
				<GetCount Name="Get a count of the number of invoice lines for this invoice" Type="InvoiceLine" OutputProperty="${InvoiceLineCount}">
					<Filters>
						<PropertyFilter	PropertyName="Id.Invoice"	Operator="="		PropertyValue="${Invoice}" />
					</Filters>
				</GetCount>

				<Validation Name="ValidateNoLinesOnInvoiceYet" Condition="${InvoiceLineCount} == 0" MessageCode="0820" />
			</When>

			<Validation Name="InvoiceStatus OK?" Condition="${Invoice.Status} == InvoiceStatus.Created" MessageCode="0681">
				<Parameter	Name="Invoice"	Direction="In"		Value="${Invoice}" />
			</Validation>

			<When Name="PurchaseAddType is not none" Condition="${PurchaseAddType} != None">
				<GetCount Name="Get invoicelinecount with purchaseline" Type="InvoiceLine" OutputProperty="${InvoiceLineCount}">
					<Joins>
						<Join	Name="Id.Invoice"	Alias="invoice"	Type="InnerJoin" />
					</Joins>
					<Filters>
						<PropertyFilter	PropertyName="Id.Invoice"				Operator="="		PropertyValue="${Invoice}" />
						<PropertyFilter	PropertyName="invoice.PurchaseAddType"	Operator="!="		PropertyValue="${PurchaseAddType}" />
					</Filters>
				</GetCount>

				<Validation Name="Check if invoice is based on purchase/receipt" Condition="${InvoiceLineCount} == 0" MessageCode="2341">
					<Parameter	Name="Invoice"	Direction="In"		Value="${Invoice}" />
				</Validation>
			</When>
		</Transaction>

		<Choose Name="Check PurchaseAddType">
			<When Name="PurchaseAddType is Purchase" Condition="${PurchaseAddType} == Purchase">
				<Transaction>
					<GetList Name="Get purchases on invoice" Type="Purchase" OutputProperty="${Purchases}" OrderBy="Id" OrderDirection="Ascending">
						<Joins>
							<Join	Name="PurchaseLines"	Alias="purchaseLine"	Type="InnerJoin" />
							<Join	Name="InvoiceLines"		Alias="invoiceLine"		Type="InnerJoin" />
						</Joins>
						<Filters>
							<PropertyFilter	PropertyName="invoiceLine.Id.Invoice"	Operator="="		PropertyValue="${Invoice}" />
						</Filters>
					</GetList>

					<ForEach Name="Validate Statuses against those allowed" In="${Statuses}" As="Status">
						<When Name="When status is not allowed" Condition="${Status} != PurchaseStatus.Active &amp;&amp; ${Status} != PurchaseStatus.PartReceived &amp;&amp; ${Status} != PurchaseStatus.Received">
							<RemoveFromList Name="Remove status from list" List="${Statuses}" Item="${Status}" />
						</When>
					</ForEach>

					<Command Name="Create whereclause for purchaseselection" CommandName="Purchase_CreateWhereClauseWithVendorAndCurrency">
						<Parameter	Name="Contexts"					Direction="In"		Value="${Contexts}" />
						<Parameter	Name="Currency"					Direction="In"		Value="${Invoice.Currency}" />
						<Parameter	Name="CurrencyConversionFactor"	Direction="In"		Value="${Invoice.CurrencyConversionFactor}" />
						<Parameter	Name="Purchases"				Direction="In"		Value="${Purchases}" />
						<Parameter	Name="Statuses"					Direction="In"		Value="${Statuses}" />
						<Parameter	Name="Vendor"					Direction="In"		Value="${Invoice.Vendor}" />
						<Parameter	Name="WhereClause"				Direction="Out"													OutputProperty="${PurchaseSqlWhereClause}" />
					</Command>
				</Transaction>

				<SystemDialog Name="SelectDomainObject" DialogName="SelectDomainObject">
					<Parameter	Name="EntityName"					Direction="In"		Value="Purchase" />
					<Parameter	Name="SelectionListConfiguration"	Direction="In"		Value="Default" />
					<Parameter	Name="SqlWhereClause"				Direction="In"		Value="${PurchaseSqlWhereClause}" />
					<Parameter	Name="DomainObject"					Direction="Out"											OutputProperty="${Purchase}" />
				</SystemDialog>

				<Transaction>
					<WorkflowCall Name="Create invoicelines from purchaselines" WorkflowName="Purchase_CreateInvoiceLines">
						<Parameter	Name="Invoice"					Direction="In"		Value="${Invoice}" />
						<Parameter	Name="Purchase"					Direction="In"		Value="${Purchase}" />
						<Parameter	Name="NegativePurchaseLines"	Direction="Out"							OutputProperty="${NegativePurchaseLines}" />
					</WorkflowCall>
				</Transaction>
			</When>


			<When Name="PurchaseAddType is Receipt" Condition="${PurchaseAddType} == Receipt">
				<Transaction>
					<GetList Name="Get Receipts on invoice" Type="Receipt" OutputProperty="${Receipts}" OrderBy="Id" OrderDirection="Ascending">
						<Joins>
							<Join	Name="InvoiceLines"	Alias="invoiceLine"	Type="InnerJoin" />
						</Joins>
						<Filters>
							<PropertyFilter	PropertyName="invoiceLine.Id.Invoice"	Operator="="		PropertyValue="${Invoice}" />
						</Filters>
					</GetList>
				</Transaction>

				<Command Name="Create whereclause for Receiptselection" CommandName="Receipt_CreateWhereClauseWithVendorAndCurrency">
					<Parameter	Name="Contexts"					Direction="In"		Value="ReceiptContext.Standard" />
					<Parameter	Name="Currency"					Direction="In"		Value="${Invoice.Currency}" />
					<Parameter	Name="CurrencyConversionFactor"	Direction="In"		Value="${Invoice.CurrencyConversionFactor}" />
					<Parameter	Name="Receipts"					Direction="In"		Value="${Receipts}" />
					<Parameter	Name="Statuses"					Direction="In"		Value="ReceiptStatus.Approved" />
					<Parameter	Name="Vendor"					Direction="In"		Value="${Invoice.Vendor}" />
					<Parameter	Name="WhereClause"				Direction="Out"													OutputProperty="${ReceiptSqlWhereClause}" />
				</Command>

				<SystemDialog Name="SelectDomainObject" DialogName="SelectDomainObject">
					<Parameter	Name="EntityName"					Direction="In"		Value="Receipt" />
					<Parameter	Name="SelectionListConfiguration"	Direction="In"		Value="Default" />
					<Parameter	Name="SqlWhereClause"				Direction="In"		Value="${ReceiptSqlWhereClause}" />
					<Parameter	Name="DomainObject"					Direction="Out"											OutputProperty="${ReceiptChosen}" />
				</SystemDialog>

				<Transaction>
					<GetList Name="Get ReceiptLines " Type="ReceiptLine" OutputProperty="${ReceiptLines}" OrderBy="Id" OrderDirection="Ascending">
						<Joins>
							<Join	Name="PurchaseLine"	Alias="purchaseLine"	Type="InnerJoin" />
						</Joins>
						<Filters>
							<PropertyFilter	PropertyName="Id.Receipt"						Operator="="		PropertyValue="${ReceiptChosen}" />
							<PropertyFilter	PropertyName="purchaseLine.ReceivedQuantity"	Operator="&gt;"		PropertyValue="0" />
						</Filters>
					</GetList>

					<When Name="ReceiptLines are created" Condition="${ReceiptLines.Count} &gt; 0">
						<Choose Name="Check Purchase.UseFixedExchangeRate">
							<When Name="Purchase.UseFixedExchangeRate is true" Condition="${ReceiptChosen.Purchase.UseFixedExchangeRate?} == True">
								<Assign Name="Set Invoice.CurrencyConversionFactor" Property="${Invoice.CurrencyConversionFactor}" Value="${ReceiptChosen.Purchase.CurrencyConversionFactor}" />
								<Assign Name="Set Invoice.CurrencyRate" Property="${Invoice.CurrencyRate}" Value="${ReceiptChosen.Purchase.CurrencyRate}" />
							</When>

							<Otherwise Name="Get new ExchangeRate">
								<Command Name="FindExchangeRate" CommandName="FindExchangeRate">
									<Parameter	Name="CounterCurrency"	Direction="In"		Value="${ReceiptChosen.Currency?}" />
									<Parameter	Name="Date"				Direction="In"		Value="#{Environment.CurrentDateTime}" />
									<Parameter	Name="ConversionFactor"	Direction="Out"												OutputProperty="${Invoice.CurrencyConversionFactor}" />
									<Parameter	Name="Rate"				Direction="Out"												OutputProperty="${Invoice.CurrencyRate}" />
								</Command>
							</Otherwise>
						</Choose>

						<Assign Name="Set Invoice.Currency" Property="${Invoice.Currency}" Value="${ReceiptChosen.Currency?}" />
						<Assign Name="Set Invoice.PurchaseAddType" Property="${Invoice.PurchaseAddType}" Value="Receipt" />
						<Assign Name="Set Invoice.Vendor" Property="${Invoice.Vendor}" Value="${ReceiptChosen.Vendor}" />
					</When>

					<ForEach Name="For each ReceiptLine" In="${ReceiptLines}" As="ReceiptLine">
						<Command Name="Create invoiceline from receiptline" CommandName="PurchaseLine_CreateInvoiceLine">
							<Parameter	Name="Invoice"		Direction="In"		Value="${Invoice}" />
							<Parameter	Name="PurchaseLine"	Direction="In"		Value="${ReceiptLine.PurchaseLine}" />
							<Parameter	Name="ReceiptLine"	Direction="In"		Value="${ReceiptLine}" />
						</Command>
					</ForEach>
				</Transaction>
			</When>
		</Choose>

		<UserContent Name="Post" />

		<When Name="Negative purchaselines encountered » Yes" Condition="${NegativePurchaseLines} == True">
			<Message Name="ummPURCHCONTNEG" MessageCode="0587" />
		</When>
	</Execution>
</Workflow>