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

ActionField286

Beschrijving: Changes the progress status of a job and/or books hours. If applicable, sets the release condition of an equipment. Custom: Nee

Propertiesbewerken

Property Type Accessor
Job Job Root
AllowedProgressStatusList List[ProgressStatus] Optional
AskForDocumentDescription Boolean Optional
AskForDocumentType Boolean Optional
AskForSite Boolean Optional
BookHours Boolean Optional
BookHoursDurationIntervalInMinutes Int32? Optional
DefaultProgressStatusIdForQualityNotOk UltimoString Optional
DefaultProgressStatusIdForQualityOk UltimoString Optional
DialogTitleLabel String Optional
DocumentContext Context Optional
DocumentFileSystemPath FileSystemPath Optional
DocumentStatus Status Optional
DocumentUserAsManager Boolean Optional
Employee Employee Optional
EmployeeFilter String Optional
EnableDate Boolean Optional
EnableToChangeEquipmentStatusWhenChangingJobStatus Boolean Optional
EquipmentStatusesWithoutReleaseCondition List[Status] Optional
MaxBookHours Int32? Optional
NotifyAboutUnapprovedProductsOnActivate Boolean Optional
ProgressStatusContext Context Optional
ProgressStatusDialogOptions ProgressStatusDialogOptions Optional
ReleaseCondition ReleaseCondition Optional
ShowLinkDocument Boolean Optional
SplitHoursForPreviousDay Boolean Optional
UseReleaseCondition Boolean Optional
WorkDescriptionLabel UltimoString Optional

Gerelateerde workflowsbewerken

Workflow Beschrijving
Job_ActionField286_AddDocuments Upload file and create ObjectDocument for Job.
Job_Actionfield286_BookHours BookHours
Job_Actionfield286_MultijobTemplateLineExist Check MultijobTemplate/ JobSuccessors
Job_Actionfield286_ProcessMultiJobTemplate Process MultiJobTemplate
Job_Actionfield286_ReleaseCondition Validate ReleaseCondition on Job
Job_Actionfield286_SetMultiJobTemplate Set MultiJobTemplate properties on job
Job_Actionfield286_SetUseReleaseCondition Validate ReleaseCondition on Job
Job_Actionfield286_SetValuesAndShowDialog Changes the progress status of a job and/or books hours. If applicable, sets the release condition of an equipment.(AF286).Set values and showDialog Dialog_HourRegistration
Job_Actionfield286_ValidateBookHours Validate BookHours
Job_Actionfield286_ValidateJobMaterial Validate JobMaterial
Job_Actionfield286_ValidateTargetDate Validate Job.TargetDate for MultijobTemplate

XMLbewerken

<Workflow Name="ActionField286" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Changes the progress status of a job and/or books hours. If applicable, sets the release condition of an equipment.</Description>
	<Properties>
		<Property	Name="Job"													Type="Job"							Accessor="Root"		Direction="In" />

		<Property	Name="AllowedProgressStatusList"							Type="List[ProgressStatus]"			Accessor="Optional"	Direction="In"																																															Comment="List of Allowed Progressstatuses" />
		<Property	Name="AskForDocumentDescription"							Type="Boolean"						Accessor="Optional"	Direction="In"		Default="#{Settings.DocumentUpload.AskForDocumentDescription}"																														Comment="Input field documentDescription is displayed in the dialog when this property is set to true" />
		<Property	Name="AskForDocumentType"									Type="Boolean"						Accessor="Optional"	Direction="In"		Default="#{Settings.DocumentUpload.AskForDocumentType}"																																Comment="Input field documentType is displayed in the dialog when this property is set to true" />
		<Property	Name="AskForSite"											Type="Boolean"						Accessor="Optional"	Direction="In"		Default="#{Settings.DocumentUpload.AskForSite}"																																		Comment="Input field site is displayed in the dialog when this property is set to true" />
		<Property	Name="BookHours"											Type="Boolean"						Accessor="Optional"	Direction="In"		Default="=#settingenabled(${Job}, Job.BookHours) ? #getsetting(${Job}, Job.BookHours) : False"																						Comment="True in order to use hour registration." />
		<Property	Name="BookHoursDurationIntervalInMinutes"					Type="Int32?"						Accessor="Optional"	Direction="In"		Default="=#settingenabled(${Job}, Job.BookHoursDurationIntervalInMinutes) ? #getsetting(${Job}, Job.BookHoursDurationIntervalInMinutes) : 15"										Comment="Interval in minutes shown in the dropdown." />
		<Property	Name="DefaultProgressStatusIdForQualityNotOk"				Type="UltimoString"					Accessor="Optional"	Direction="In"																																															Comment="Used for Bulk PM only. Progress status used for the jobs created from the InspectionLines, which are not marked Quality OK" />
		<Property	Name="DefaultProgressStatusIdForQualityOk"					Type="UltimoString"					Accessor="Optional"	Direction="In"																																															Comment="Used for Bulk PM only. Progress status used for the jobs created from the InspectionLines, which are marked Quality OK" />
		<Property	Name="DialogTitleLabel"										Type="String"						Accessor="Optional"	Direction="In"																																															Comment="Label code used for dialog title." />
		<Property	Name="DocumentContext"										Type="Context"						Accessor="Optional"	Direction="In"		Default="DocumentContext.Standard"																																					Comment="Create Document with this context" />
		<Property	Name="DocumentFileSystemPath"								Type="FileSystemPath"				Accessor="Optional"	Direction="In"		Default="001"																																										Comment="Location of the files" />
		<Property	Name="DocumentStatus"										Type="Status"						Accessor="Optional"	Direction="In"		Default="DocumentStatus.Active"																																						Comment="Create Document with this status" />
		<Property	Name="DocumentUserAsManager"								Type="Boolean"						Accessor="Optional"	Direction="In"		Default="False"																																										Comment="Set Document.ManageEmployee to User." />
		<Property	Name="Employee"												Type="Employee"						Accessor="Optional"	Direction="In"		Default="#{User.EmployeeId}"																																						Comment="Employee used as default for hour registration and status transition." />
		<Property	Name="EmployeeFilter"										Type="String"						Accessor="Optional"	Direction="In"		Default="EmpContext = 1 AND EMPCOMPID=N'#{Company.Id}'"																																Comment="Filter used for employees shown in the employee selection dropdown. Format: EmpContext = 1 AND EmpSkcId = TD" />
		<Property	Name="EnableDate"											Type="Boolean"						Accessor="Optional"	Direction="In"		Default="True"																																										Comment="Prevent users can set the date manual" />
		<Property	Name="EnableToChangeEquipmentStatusWhenChangingJobStatus"	Type="Boolean"						Accessor="Optional"	Direction="In"		Default="=#settingenabled(${Job}, Job.EnableToChangeEquipmentStatusWhenChangingJobStatus) ? #getsetting(${Job}, Job.EnableToChangeEquipmentStatusWhenChangingJobStatus) : False"	Comment="In dialog 'Update Progress' allows to change the status of the equipment registered on the job." />
		<Property	Name="EquipmentStatusesWithoutReleaseCondition"				Type="List[Status]"					Accessor="Optional"	Direction="In"		Default="Empty"																																										Comment="Set here the equipment statuses that dont need a releasecondition" />
		<Property	Name="MaxBookHours"											Type="Int32?"						Accessor="Optional"	Direction="In"		Default="=#settingenabled(${Job}, Job.MaxBookHours) ? #getsetting(${Job}, Job.MaxBookHours) : 10"																					Comment="Maximum number of hours to book shown in the dropdown." />
		<Property	Name="NotifyAboutUnapprovedProductsOnActivate"				Type="Boolean"						Accessor="Optional"	Direction="In"		Default="True"																																										Comment="Set to False to suppress notification about open/quoted products" />
		<Property	Name="ProgressStatusContext"								Type="Context"						Accessor="Optional"	Direction="In"																																															Comment="Context for the possible progress status records." />
		<Property	Name="ProgressStatusDialogOptions"							Type="ProgressStatusDialogOptions"	Accessor="Optional"	Direction="In"		Default="TextAndStatus"																																								Comment="Allow user to modify both text and status." />
		<Property	Name="ReleaseCondition"										Type="ReleaseCondition"				Accessor="Optional"	Direction="In"																																															Comment="When given, it will be shown in the dialog." />
		<Property	Name="ShowLinkDocument"										Type="Boolean"						Accessor="Optional"	Direction="In"		Default="=#settingenabled(${Job}, Job.ShowLinkDocument) ? #getsetting(${Job}, Job.ShowLinkDocument) : True"																			Comment="When given, a field to attach documents will be shown in the dialog." />
		<Property	Name="SplitHoursForPreviousDay"								Type="Boolean"						Accessor="Optional"	Direction="In"		Default="=#settingenabled(${Job}, Job.SplitHoursForPreviousDay) ? #getsetting(${Job}, Job.SplitHoursForPreviousDay) : True"															Comment="True when hours worked during previous day should be booked on that day instead of on ActivityDay." />
		<Property	Name="UseReleaseCondition"									Type="Boolean"						Accessor="Optional"	Direction="In"		Default="True"																																										Comment="True to use release condition." />
		<Property	Name="WorkDescriptionLabel"									Type="UltimoString"					Accessor="Optional"	Direction="In"																																															Comment="Label code used for workdescription." />

		<Property	Name="ActivityDate"											Type="DateTime?"					Accessor="Internal" />
		<Property	Name="ChangedStatusDate"									Type="DateTime?"					Accessor="Internal" />
		<Property	Name="ConcessionPolicy"										Type="UltimoString"					Accessor="Internal" />
		<Property	Name="CraftsmanHourCategory"								Type="CraftsmanHourCategory"		Accessor="Internal" />
		<Property	Name="DocumentDescription"									Type="UltimoString"					Accessor="Internal"																																																			Comment="Description of the document typed by the user in the dialog box. This property works together with the property AskForDocumentDescription" />
		<Property	Name="DocumentTargetFile"									Type="UltimoString"					Accessor="Internal" />
		<Property	Name="DocumentType"											Type="DocumentType"					Accessor="Internal"																																																			Comment="Type of document selected by the user in the dialog box. This property works together with the property AskForDocumentType" />
		<Property	Name="DocumentUploadFile"									Type="String"						Accessor="Internal" />
		<Property	Name="EquipmentNewProgressStatus"							Type="ProgressStatus"				Accessor="Internal"																																																			Comment="Optionally, equipment on job can be given a new progress status" />
		<Property	Name="EquipmentRemark"										Type="UltimoString"					Accessor="Internal" />
		<Property	Name="EquipmentRemarkAsEnteredByUser"						Type="UltimoString"					Accessor="Internal" />
		<Property	Name="HourCode"												Type="HourCode"						Accessor="Internal" />
		<Property	Name="HoursWorked"											Type="Decimal?"						Accessor="Internal" />
		<Property	Name="HoursWorkedBetweenMidnightAndBookMoment"				Type="Decimal?"						Accessor="Internal" />
		<Property	Name="HourTariffCategory"									Type="HourTariffCategory"			Accessor="Internal" />
		<Property	Name="MultijobTemplate"										Type="MultijobTemplate"				Accessor="Internal" />
		<Property	Name="NewProgressStatus"									Type="ProgressStatus"				Accessor="Internal" />
		<Property	Name="NonUpdatedEquipmentList"								Type="List[Equipment]"				Accessor="Internal"																																																			Comment="Equipment whose status was not changed because it differs from parent equipment." />
		<Property	Name="Now"													Type="DateTime"						Accessor="Internal"						Default="#{Environment.CurrentDateTime}" />
		<Property	Name="OldProgressStatus"									Type="ProgressStatus"				Accessor="Internal" />
		<Property	Name="OpenAndQuotedProductsCount"							Type="Int64"						Accessor="Internal" />
		<Property	Name="ReleaseDate"											Type="Date?"						Accessor="Internal" />
		<Property	Name="Site"													Type="Site"							Accessor="Internal"						Default="${Job.Site}"																																								Comment="Site selected by the user in the dialog box. This property works together with the property AskForSite" />
		<Property	Name="StatusCreatedReportDate"								Type="DateTime"						Accessor="Internal" />
		<Property	Name="SuccessorItems"										Type="List[SuccessorItem]"			Accessor="Internal" />
		<Property	Name="WorkDescription"										Type="UltimoString"					Accessor="Internal" />
	</Properties>
	<Settings>
		<SettingsGroup Name="Job">
			<Setting	Name="RequestedProgressStatusHoursEmployee"		Type="Employee"		Value="Empty" />
			<Setting	Name="RequestedProgressStatusHoursSpent"		Type="Decimal"		Value="0" />
			<Setting	Name="RequestedProgressStatusId"				Type="String"		Value="Empty" />
			<Setting	Name="RequestedProgressStatusWorkDescription"	Type="UltimoString"	Value="Empty" />
			<Setting	Name="ShowMessageWaitingForMaterial"			Type="Boolean"		Value="False"	Comment="Deprecated, replaced by ShowMessageMaterialInStockIndicator (#1099249, #1094345)" />
			<Setting	Name="WriteReleaseCondition"					Type="Boolean"		Value="False" />
		</SettingsGroup>
		<SettingsGroup Name="EmployeeLabourLine">
			<Setting	Name="SkipUpdateJobWeekLabour"	Type="Boolean"	Value="True" />
		</SettingsGroup>
		<SettingsGroup Name="JobInspectionLine">
			<Setting	Name="JobTextField"						Type="JobTextField"	Value="Text" />
			<Setting	Name="ProgressStatusIdForQualityNotOk"	Type="UltimoString"	Value="Empty" />
			<Setting	Name="ProgressStatusIdForQualityOk"		Type="UltimoString"	Value="Empty" />
		</SettingsGroup>
	</Settings>
	<Execution>
		<UserContent Name="Pre" />

		<When Name="Progress status can be updated via dialog" Condition="${ProgressStatusDialogOptions} == TextAndStatus || ${ProgressStatusDialogOptions} == StatusOnly">
			<WorkflowCall Name="DomainObject_ValidateProgressStatusIsTrashed" WorkflowName="DomainObject_ValidateProgressStatusIsTrashed">
				<Parameter	Name="DomainObject"	Direction="In"		Value="${Job}" />
			</WorkflowCall>
		</When>

		<WorkflowCall Name="Job_Actionfield286_ValidateJobMaterial" WorkflowName="Job_Actionfield286_ValidateJobMaterial">
			<Parameter	Name="Job"	Direction="In"		Value="${Job}" />
		</WorkflowCall>

		<WorkflowCall Name="Job_Actionfield286_SetValuesAndShowDialog" WorkflowName="Job_Actionfield286_SetValuesAndShowDialog">
			<Parameter	Name="AllowedProgressStatusList"							Direction="In"		Value="${AllowedProgressStatusList}" />
			<Parameter	Name="BookHoursDurationIntervalInMinutes"					Direction="In"		Value="${BookHoursDurationIntervalInMinutes}" />
			<Parameter	Name="DefaultProgressStatusIdForQualityNotOk"				Direction="In"		Value="${DefaultProgressStatusIdForQualityNotOk}" />
			<Parameter	Name="DefaultProgressStatusIdForQualityOk"					Direction="In"		Value="${DefaultProgressStatusIdForQualityOk}" />
			<Parameter	Name="DialogTitleLabel"										Direction="In"		Value="${DialogTitleLabel}" />
			<Parameter	Name="EmployeeFilter"										Direction="In"		Value="${EmployeeFilter}" />
			<Parameter	Name="EnableDate"											Direction="In"		Value="${EnableDate}" />
			<Parameter	Name="EnableToChangeEquipmentStatusWhenChangingJobStatus"	Direction="In"		Value="${EnableToChangeEquipmentStatusWhenChangingJobStatus}" />
			<Parameter	Name="EquipmentStatusesWithoutReleaseCondition"				Direction="In"		Value="${EquipmentStatusesWithoutReleaseCondition}" />
			<Parameter	Name="Job"													Direction="In"		Value="${Job}" />
			<Parameter	Name="MaxBookHours"											Direction="In"		Value="${MaxBookHours}" />
			<Parameter	Name="ProgressStatusContext"								Direction="In"		Value="${ProgressStatusContext}" />
			<Parameter	Name="ProgressStatusDialogOptions"							Direction="In"		Value="${ProgressStatusDialogOptions}" />
			<Parameter	Name="ShowLinkDocument"										Direction="In"		Value="${ShowLinkDocument}" />
			<Parameter	Name="UseReleaseCondition"									Direction="In"		Value="${UseReleaseCondition}" />
			<Parameter	Name="WorkDescriptionLabel"									Direction="In"		Value="${WorkDescriptionLabel}" />
			<Parameter	Name="BookHours"											Direction="InOut"	Value="${BookHours}"											OutputProperty="${BookHours}" />
			<Parameter	Name="Employee"												Direction="InOut"	Value="${Employee}"												OutputProperty="${Employee}" />
			<Parameter	Name="ReleaseCondition"										Direction="InOut"	Value="${ReleaseCondition}"										OutputProperty="${ReleaseCondition}" />
			<Parameter	Name="ActivityDate"											Direction="Out"																		OutputProperty="${ActivityDate}" />
			<Parameter	Name="ConcessionPolicy"										Direction="Out"																		OutputProperty="${ConcessionPolicy}" />
			<Parameter	Name="DocumentUploadFile"									Direction="Out"																		OutputProperty="${DocumentUploadFile}" />
			<Parameter	Name="EquipmentNewProgressStatus"							Direction="Out"																		OutputProperty="${EquipmentNewProgressStatus}" />
			<Parameter	Name="EquipmentRemark"										Direction="Out"																		OutputProperty="${EquipmentRemark}" />
			<Parameter	Name="EquipmentRemarkAsEnteredByUser"						Direction="Out"																		OutputProperty="${EquipmentRemarkAsEnteredByUser}" />
			<Parameter	Name="HourCode"												Direction="Out"																		OutputProperty="${HourCode}" />
			<Parameter	Name="HoursWorked"											Direction="Out"																		OutputProperty="${HoursWorked}" />
			<Parameter	Name="HourTariffCategory"									Direction="Out"																		OutputProperty="${HourTariffCategory}" />
			<Parameter	Name="NewProgressStatus"									Direction="Out"																		OutputProperty="${NewProgressStatus}" />
			<Parameter	Name="ReleaseDate"											Direction="Out"																		OutputProperty="${ReleaseDate}" />
			<Parameter	Name="WorkDescription"										Direction="Out"																		OutputProperty="${WorkDescription}" />
		</WorkflowCall>

		<UserContent Name="AfterDialog" />

		<WorkflowCall Name="Get FDA e-signature for Job" WorkflowName="Job_SignElectronically">
			<Parameter	Name="EquipmentNewProgressStatus"	Direction="In"		Value="${EquipmentNewProgressStatus}" />
			<Parameter	Name="EquipmentReason"				Direction="In"		Value="${EquipmentRemarkAsEnteredByUser}" />
			<Parameter	Name="Job"							Direction="In"		Value="${Job}" />
			<Parameter	Name="JobNewProgressStatus"			Direction="In"		Value="${NewProgressStatus}" />
		</WorkflowCall>

		<Validation Name="ActivityState_ummCHOOSEPROGRESSSTATUS" Condition="${ProgressStatusDialogOptions} == None || ${ProgressStatusDialogOptions} == TextOnly || ${Job.ProgressStatus} == Empty || ${NewProgressStatus} != Empty" MessageCode="0689" />

		<When Name="Document selected" Condition="${DocumentUploadFile} != Empty">
			<WorkflowCall Name="Dialog_AskForDocumentDetails" WorkflowName="Dialog_AskForDocumentDetails">
				<Parameter	Name="AskForDocumentDescription"	Direction="In"		Value="${AskForDocumentDescription}" />
				<Parameter	Name="AskForDocumentType"			Direction="In"		Value="${AskForDocumentType}" />
				<Parameter	Name="AskForSite"					Direction="In"		Value="${AskForSite}" />
				<Parameter	Name="DocumentDescription"			Direction="InOut"	Value="${DocumentDescription}"			OutputProperty="${DocumentDescription}" />
				<Parameter	Name="DocumentType"					Direction="InOut"	Value="${DocumentType}"					OutputProperty="${DocumentType}" />
				<Parameter	Name="Site"							Direction="InOut"	Value="${Site}"							OutputProperty="${Site}" />
			</WorkflowCall>
		</When>

		<Assign Name="RequestedProgressStatusId" Property="#{Settings.Job.RequestedProgressStatusId}" Value="${NewProgressStatus.Id?}" Comment="To pass on progress status when job skips statuses. e.g. job status changes from 'Open' to 'Finished'." />
		<Assign Name="RequestedProgressStatusHoursSpent" Property="#{Settings.Job.RequestedProgressStatusHoursSpent}" Value="${HoursWorked}" Comment="To pass on hours when job skips statuses. e.g. job status changes from 'Open' to 'Finished'." />
		<Assign Name="RequestedProgressStatusWorkDescription" Property="#{Settings.Job.RequestedProgressStatusWorkDescription}" Value="${WorkDescription}" Comment="To pass on work description when job skips statuses. e.g. job status changes from 'Open' to 'Finished'." />
		<Assign Name="RequestedProgressStatusHoursEmployee" Property="#{Settings.Job.RequestedProgressStatusHoursEmployee}" Value="${Employee}" Comment="The employee the hours are registered for." />
		<Assign Name="MultijobTemplate" Property="${MultijobTemplate}" Value="${Job.MultijobTemplate}" />
		<Assign Name="SkipQuestion" Property="#{Settings.EquipmentMeasurementPointValue.SkipQuestion}" Value="True" Comment="Skip question in EquipmentMeasurementPoint_ProcessValues to prevent Transaction error" />

		<When Name="if MultijobTemplate has no value, try to squeeze it from the job's ServiceDeskReportType" Condition="${MultijobTemplate} == Empty &amp;&amp; ${Job.Multijob} == Empty &amp;&amp; ${Job.ServiceDeskReportType.MultijobTemplate?} != Empty">
			<Assign Name="Fill MultijobTemplate column" Property="${MultijobTemplate}" Value="${Job.ServiceDeskReportType.MultijobTemplate}" />
		</When>

		<Assign Name="StatusCreatedReportDate" Property="${StatusCreatedReportDate}" Value="${Job.StatusCreatedReportDate}" />

		<WorkflowCall Name="Job_Actionfield286_ValidateTargetDate" WorkflowName="Job_Actionfield286_ValidateTargetDate">
			<Parameter	Name="Job"				Direction="In"		Value="${Job}" />
			<Parameter	Name="MultijobTemplate"	Direction="In"		Value="${MultijobTemplate}" />
		</WorkflowCall>

		<When Name="Edit template lines if there are any and if subsjobs can be generated" Condition="${MultijobTemplate} != Empty">
			<WorkflowCall Name="Job_EditTemplate" WorkflowName="Job_EditTemplate" Comment="call dialog for template line selection">
				<Parameter	Name="Job"						Direction="In"		Value="${Job}" />
				<Parameter	Name="JobStatus"				Direction="In"		Value="${NewProgressStatus.NextStatus}" />
				<Parameter	Name="MultijobTemplate"			Direction="In"		Value="${MultijobTemplate}" />
				<Parameter	Name="StatusCreatedReportDate"	Direction="In"		Value="${StatusCreatedReportDate}" />
				<Parameter	Name="SuccessorItems"			Direction="Out"												OutputProperty="${SuccessorItems}" />
			</WorkflowCall>
		</When>

		<WorkflowCall Name="Job_Actionfield286_MultijobTemplateLineExist" WorkflowName="Job_Actionfield286_MultijobTemplateLineExist">
			<Parameter	Name="Job"					Direction="In"		Value="${Job}" />
			<Parameter	Name="NewProgressStatus"	Direction="In"		Value="${NewProgressStatus}" />
		</WorkflowCall>

		<Transaction>
			<WorkflowCall Name="Job_Actionfield286_SetMultiJobTemplate" WorkflowName="Job_Actionfield286_SetMultiJobTemplate">
				<Parameter	Name="Job"				Direction="In"		Value="${Job}" />
				<Parameter	Name="MultijobTemplate"	Direction="In"		Value="${MultijobTemplate}" />
			</WorkflowCall>

			<WorkflowCall Name="Job_Actionfield286_ValidateBookHours" WorkflowName="Job_Actionfield286_ValidateBookHours">
				<Parameter	Name="BookHours"			Direction="In"		Value="${BookHours}" />
				<Parameter	Name="HourCode"				Direction="In"		Value="${HourCode}" />
				<Parameter	Name="HoursWorked"			Direction="In"		Value="${HoursWorked}" />
				<Parameter	Name="HourTariffCategory"	Direction="In"		Value="${HourTariffCategory}" />
				<Parameter	Name="Job"					Direction="In"		Value="${Job}" />
			</WorkflowCall>

			<WorkflowCall Name="Job_Actionfield286_ReleaseCondition" WorkflowName="Job_Actionfield286_ReleaseCondition">
				<Parameter	Name="ConcessionPolicy"							Direction="In"		Value="${ConcessionPolicy}" />
				<Parameter	Name="EquipmentStatusesWithoutReleaseCondition"	Direction="In"		Value="${EquipmentStatusesWithoutReleaseCondition}" />
				<Parameter	Name="Job"										Direction="In"		Value="${Job}" />
				<Parameter	Name="NewProgressStatus"						Direction="In"		Value="${NewProgressStatus}" />
				<Parameter	Name="ReleaseDate"								Direction="In"		Value="${ReleaseDate}" />
				<Parameter	Name="UseReleaseCondition"						Direction="In"		Value="${UseReleaseCondition}" />
				<Parameter	Name="ReleaseCondition"							Direction="InOut"	Value="${ReleaseCondition}"							OutputProperty="${ReleaseCondition}" />
			</WorkflowCall>

			<Choose Name="WriteHoursToDB">
				<When Name="BookHoursOnJob?" Condition="${BookHours} == True &amp;&amp; ${HoursWorked} != Empty &amp;&amp; ${HoursWorked} != 0">
					<When Name="HourTariffCategory is empty" Condition="${HourTariffCategory} == Empty">
						<Validation Name="Employee has Craftsman" Condition="${Employee.Craftsman} != Empty" MessageCode="0408">
							<Parameter	Name="Employee"	Direction="In"		Value="${Employee}" />
						</Validation>

						<WorkflowCall Name="Craftsman_GetHourCategory" WorkflowName="Craftsman_GetHourCategory">
							<Parameter	Name="Craftsman"				Direction="In"		Value="${Employee.Craftsman}" />
							<Parameter	Name="Job"						Direction="In"		Value="${Job}" />
							<Parameter	Name="CraftsmanHourCategory"	Direction="Out"										OutputProperty="${CraftsmanHourCategory}" />
						</WorkflowCall>

						<Assign Name="HourTariffCategory set by CraftsmanHourCategory" Property="${HourTariffCategory}" Value="${CraftsmanHourCategory.Id.HourTariffCategory}" />
					</When>

					<WorkflowCall Name="Job_Actionfield286_BookHours" WorkflowName="Job_Actionfield286_BookHours">
						<Parameter	Name="ActivityDate"								Direction="In"		Value="${ActivityDate}" />
						<Parameter	Name="Employee"									Direction="In"		Value="${Employee}" />
						<Parameter	Name="HourCode"									Direction="In"		Value="${HourCode}" />
						<Parameter	Name="HoursWorked"								Direction="In"		Value="${HoursWorked}" />
						<Parameter	Name="HoursWorkedBetweenMidnightAndBookMoment"	Direction="In"		Value="${HoursWorkedBetweenMidnightAndBookMoment}" />
						<Parameter	Name="HourTariffCategory"						Direction="In"		Value="${HourTariffCategory}" />
						<Parameter	Name="Job"										Direction="In"		Value="${Job}" />
						<Parameter	Name="Now"										Direction="In"		Value="${Now}" />
						<Parameter	Name="SplitHoursForPreviousDay"					Direction="In"		Value="${SplitHoursForPreviousDay}" />
						<Parameter	Name="WorkDescription"							Direction="In"		Value="${WorkDescription}" />
					</WorkflowCall>

					<When Name="WhenCopyText" Condition="#{UltimoSettings.CopyJobWeekLabourTextToJob} != 0">
						<Command Name="Job_AppendComment" CommandName="Job_AppendComment">
							<Parameter	Name="Date"			Direction="In"		Value="${Now}" />
							<Parameter	Name="Description"	Direction="In"		Value="${WorkDescription}" />
							<Parameter	Name="Employee"		Direction="In"		Value="#{User.EmployeeId}" />
							<Parameter	Name="Job"			Direction="In"		Value="${Job}" />
						</Command>
					</When>
				</When>

				<Otherwise Name="AppendCommentToJob">
					<Command Name="Job_AppendComment" CommandName="Job_AppendComment">
						<Parameter	Name="Date"			Direction="In"		Value="${Now}" />
						<Parameter	Name="Description"	Direction="In"		Value="${WorkDescription}" />
						<Parameter	Name="Employee"		Direction="In"		Value="#{User.EmployeeId}" />
						<Parameter	Name="Job"			Direction="In"		Value="${Job}" />
					</Command>
				</Otherwise>
			</Choose>

			<When Name="Only update ProgressStatus when != TextOnly" Condition="${ProgressStatusDialogOptions} == TextOnly &amp;&amp; ${NewProgressStatus} == Empty">
				<Assign Name="Set NewProgressStatus to original" Property="${NewProgressStatus}" Value="${Job.ProgressStatus}" />
			</When>

			<WorkflowCall Name="Job_ChangeProgressStatus" WorkflowName="Job_ChangeProgressStatus">
				<Parameter	Name="Employee"						Direction="In"		Value="${Employee}" />
				<Parameter	Name="EquipmentNewProgressStatus"	Direction="In"		Value="${EquipmentNewProgressStatus}" />
				<Parameter	Name="EquipmentRemark"				Direction="In"		Value="${EquipmentRemark}" />
				<Parameter	Name="HoursWorked"					Direction="In"		Value="${HoursWorked}" />
				<Parameter	Name="Job"							Direction="In"		Value="${Job}" />
				<Parameter	Name="NewProgressStatus"			Direction="In"		Value="${NewProgressStatus}" />
				<Parameter	Name="Now"							Direction="In"		Value="${Now}" />
				<Parameter	Name="StatusFinishedDateTime"		Direction="In"		Value="${ActivityDate}" />
				<Parameter	Name="WorkDescription"				Direction="In"		Value="${WorkDescription}" />
				<Parameter	Name="OldProgressStatus"			Direction="InOut"	Value="${OldProgressStatus}"			OutputProperty="${OldProgressStatus}" />
				<Parameter	Name="NonUpdatedEquipmentList"		Direction="Out"												OutputProperty="${NonUpdatedEquipmentList}" />
			</WorkflowCall>

			<When Name="WriteReleaseCondition?" Condition="#{Settings.Job.WriteReleaseCondition} == True">
				<Command Name="Job_WriteReleaseCondition" CommandName="Job_WriteReleaseCondition">
					<Parameter	Name="Description"			Direction="In"		Value="${ConcessionPolicy}" />
					<Parameter	Name="Job"					Direction="In"		Value="${Job}" />
					<Parameter	Name="ReleaseCondition"		Direction="In"		Value="${ReleaseCondition}" />
					<Parameter	Name="ReleaseConditionDate"	Direction="In"		Value="${ReleaseDate}" />
				</Command>
			</When>

			<When Name="Document selected" Condition="${DocumentUploadFile} != Empty">
				<WorkflowCall Name="Upload file and create ObjectDocument" WorkflowName="Job_ActionField286_AddDocuments">
					<Parameter	Name="DocumentContext"		Direction="In"		Value="${DocumentContext}" />
					<Parameter	Name="DocumentDescription"	Direction="In"		Value="${DocumentDescription}" />
					<Parameter	Name="DocumentStatus"		Direction="In"		Value="${DocumentStatus}" />
					<Parameter	Name="DocumentType"			Direction="In"		Value="${DocumentType}" />
					<Parameter	Name="DocumentUploadFile"	Direction="In"		Value="${DocumentUploadFile}" />
					<Parameter	Name="FileSystemPath"		Direction="In"		Value="${DocumentFileSystemPath}" />
					<Parameter	Name="Job"					Direction="In"		Value="${Job}" />
					<Parameter	Name="Site"					Direction="In"		Value="${Site}" />
					<Parameter	Name="UserAsManager"		Direction="In"		Value="${DocumentUserAsManager}" />
					<Parameter	Name="DocumentTargetFile"	Direction="Out"											OutputProperty="${DocumentTargetFile}" />
				</WorkflowCall>
			</When>
		</Transaction>

		<When Name="Document selected" Condition="${DocumentUploadFile} != Empty">
			<MoveFile Name="Move to document directory" SourceFile="Upload\${DocumentUploadFile}" TargetFile="${DocumentTargetFile}" />
		</When>

		<When Name="IfMultiTemplateExist" Condition="${Job.MultijobTemplate} != Empty">
			<WorkflowCall Name="Job_Actionfield286_ProcessMultiJobTemplate" WorkflowName="Job_Actionfield286_ProcessMultiJobTemplate">
				<Parameter	Name="Job"				Direction="In"		Value="${Job}" />
				<Parameter	Name="SuccessorItems"	Direction="In"		Value="${SuccessorItems}" />
			</WorkflowCall>
		</When>

		<WorkflowCall Name="Job_UseStockProgressStatus_ShowToastMessageMaterialInStock" WorkflowName="Job_UseStockProgressStatus_ShowToastMessageMaterialInStock">
			<Parameter	Name="Job"	Direction="In"		Value="${Job}" />
		</WorkflowCall>

		<When Name="When job is now active" Condition="${Job.Status} == JobStatus.Active &amp;&amp; ${NotifyAboutUnapprovedProductsOnActivate}">
			<Transaction>
				<GetCount Name="Count open/quoted products for job" Type="JobJobPlan" OutputProperty="${OpenAndQuotedProductsCount}">
					<Filters>
						<PropertyFilter	PropertyName="Job"	Operator="="		PropertyValue="${Job}" />
						<InFilter PropertyName="Status" Values="JobJobPlanStatus.Created, JobJobPlanStatus.Quotation" />
					</Filters>
				</GetCount>
			</Transaction>

			<When Name="When open/quoted products found" Condition="${OpenAndQuotedProductsCount} != 0">
				<Message Name="NotifyUserProductsAwaitingApproval" MessageCode="2677">
					<Parameter	Name="Job"	Direction="In"		Value="${Job}" />
				</Message>
			</When>
		</When>

		<When Name="When status change for underlying equipment was skipped" Condition="${NonUpdatedEquipmentList} != Empty &amp;&amp; ${NonUpdatedEquipmentList.Count} &gt; 0">
			<Message Name="Show underlying equipment whose status was not changed because it differs from parent" MessageCode="3522">
				<Parameter	Name="NewProgressStatusDescription"	Direction="In"		Value="${EquipmentNewProgressStatus.Description}" />
				<Parameter	Name="NonUpdatedEquipmentList"		Direction="In"		Value="${NonUpdatedEquipmentList}" />
			</Message>
		</When>

		<UserContent Name="Post" />
	</Execution>
</Workflow>

Sub-workflow XMLbewerken

Job_ActionField286_AddDocumentsbewerken

Beschrijving: Upload file and create ObjectDocument for Job.

<Workflow Name="Job_ActionField286_AddDocuments" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Upload file and create ObjectDocument for Job.</Description>
	<Properties>
		<Property	Name="Job"					Type="Job"				Accessor="Root"		Direction="In" />

		<Property	Name="DocumentContext"		Type="Context"			Accessor="Optional"	Direction="In"		Default="DocumentContext.Standard"	Comment="Create Document with this context" />
		<Property	Name="DocumentDescription"	Type="UltimoString"		Accessor="Optional"	Direction="In"											Comment="Description of the document typed by the user in the dialog box.This property works together with the property AskForDocumentDescription" />
		<Property	Name="DocumentStatus"		Type="Status"			Accessor="Optional"	Direction="In"		Default="DocumentStatus.Active"		Comment="Create Document with this status" />
		<Property	Name="DocumentType"			Type="DocumentType"		Accessor="Optional"	Direction="In"											Comment="Type of document selected by the user in the dialog box.This property works together with the property AskForDocumentType" />
		<Property	Name="DocumentUploadFile"	Type="String"			Accessor="Optional"	Direction="In" />
		<Property	Name="FileSystemPath"		Type="FileSystemPath"	Accessor="Optional"	Direction="In"											Comment="Location of the files" />
		<Property	Name="Site"					Type="Site"				Accessor="Optional"	Direction="In"											Comment="Site selected by the user in the dialog box.This property works together with the property AskForSite" />
		<Property	Name="UserAsManager"		Type="Boolean"			Accessor="Optional"	Direction="In"		Default="False"						Comment="Set Document.ManageEmployee to User." />

		<Property	Name="DocumentTargetFile"	Type="UltimoString"		Accessor="Optional"	Direction="Out" />

		<Property	Name="Document"				Type="Document"			Accessor="Internal" />
		<Property	Name="RealFileExtension"	Type="String"			Accessor="Internal" />
		<Property	Name="RealFileGuid"			Type="String"			Accessor="Internal" />
		<Property	Name="RealFileName"			Type="String"			Accessor="Internal" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<UnformatText Name="GetFileNameAndExtension" Text="${DocumentUploadFile}" Mask="(.*)_(.*)[\.](.*)" CaseSensitive="True">
			<Parameter	Name="1"	Direction="Out"		OutputProperty="${RealFileName}" />
			<Parameter	Name="2"	Direction="Out"		OutputProperty="${RealFileGuid}" />
			<Parameter	Name="3"	Direction="Out"		OutputProperty="${RealFileExtension}" />
		</UnformatText>

		<Transaction>
			<Insert Name="Create a Document" ObjectType="Document" OutputProperty="${Document}">
				<Parameter	Name="Context"			Direction="In"		Value="${DocumentContext}" />
				<Parameter	Name="Status"			Direction="In"		Value="${DocumentStatus}" />
				<Parameter	Name="Description"		Direction="In"		Value="${DocumentDescription}" />
				<Parameter	Name="DocumentType"		Direction="In"		Value="${DocumentType}" />
				<Parameter	Name="FileSystemPath"	Direction="In"		Value="${FileSystemPath}" />
				<Parameter	Name="ManageEmployee"	Direction="In"		Value="#{User.EmployeeId}" />
				<Parameter	Name="Site"				Direction="In"		Value="${Site}" />
			</Insert>

			<AssignWhenEmpty Name="Set Description with doc id" Property="${Document.Description}" Value="=#concat(${Document.Id}, '-' ,${RealFileName}, '.' , ${RealFileExtension})" />
			<Assign Name="Set FileName with doc id" Property="${Document.FileName}" Value="=#concat(${Document.Id}, '-' ,${RealFileName}, '.' , ${RealFileExtension})" />

			<Command Name="Link the Document to the Job" CommandName="CreateObjectDocument">
				<Parameter	Name="Document"		Direction="In"		Value="${Document}" />
				<Parameter	Name="DomainObject"	Direction="In"		Value="${Job}" />
			</Command>

			<ChangeStatus Name="Change Status" DomainObject="${Document}" NewStatus="${DocumentStatus}" />

			<When Name="User as manager" Condition="${UserAsManager} == True">
				<Assign Name="Assign User" Property="${Document.ManageEmployee}" Value="#{User.EmployeeId}" />
			</When>
		</Transaction>

		<Assign Name="DocumentTargetFile" Property="${DocumentTargetFile}" Value="${FileSystemPath.FileServicePath}\${Document.FileName}" />

		<UserContent Name="Post" />
	</Execution>
</Workflow>

Job_Actionfield286_BookHoursbewerken

Beschrijving: BookHours

<Workflow Name="Job_Actionfield286_BookHours" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>BookHours</Description>
	<Properties>
		<Property	Name="Job"										Type="Job"					Accessor="Root"		Direction="In" />

		<Property	Name="ActivityDate"								Type="DateTime?"			Accessor="Optional"	Direction="In" />
		<Property	Name="Employee"									Type="Employee"				Accessor="Optional"	Direction="In" />
		<Property	Name="HourCode"									Type="HourCode"				Accessor="Optional"	Direction="In" />
		<Property	Name="HoursWorked"								Type="Decimal?"				Accessor="Optional"	Direction="In" />
		<Property	Name="HoursWorkedBetweenMidnightAndBookMoment"	Type="Decimal?"				Accessor="Optional"	Direction="In" />
		<Property	Name="HourTariffCategory"						Type="HourTariffCategory"	Accessor="Optional"	Direction="In" />
		<Property	Name="Now"										Type="DateTime"				Accessor="Optional"	Direction="In" />
		<Property	Name="SplitHoursForPreviousDay"					Type="Boolean"				Accessor="Optional"	Direction="In" />
		<Property	Name="WorkDescription"							Type="UltimoString"			Accessor="Optional"	Direction="In" />

		<Property	Name="StartOfDayActivityDate"					Type="DateTime"				Accessor="Internal"						Comment="Used to compose ActivityDate at 0:00am after dialog" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<Assign Name="Set StartOfDayActivityDate, 0:00am" Property="${StartOfDayActivityDate}" Value="=#setdatetime(${ActivityDate.Date}, 0, 0)" />
		<Assign Name="Hours between StartOfDayActivityDate and ActivityDate" Property="${HoursWorkedBetweenMidnightAndBookMoment}" Value="=#getdatedifference('h', ${StartOfDayActivityDate}, ${ActivityDate}, False)" />

		<When Name="Date to book hours on is before today" Condition="#getdatedifference('d', ${Now}, ${ActivityDate}) &lt; 0">
			<Assign Name="SplitHoursForPreviousDay" Property="${SplitHoursForPreviousDay}" Value="False" />
		</When>

		<Choose Name="Check whether hours should be split between days">
			<When Name="When SplitHoursForPreviousDay is True and HoursWorked greater than HoursWorkedBetweenMidnightAndBookMoment between StartOfDayActivityDate and ActivityDate" Condition="${SplitHoursForPreviousDay} == True &amp;&amp; (${HoursWorked} &gt; ${HoursWorkedBetweenMidnightAndBookMoment})">
				<WorkflowCall Name="book for previous day" WorkflowName="Job_BookHours">
					<Parameter	Name="BookDate"				Direction="In"		Value="=#adddays(${ActivityDate.Date}, -1)" />
					<Parameter	Name="Description"			Direction="In"		Value="${WorkDescription}" />
					<Parameter	Name="Employee"				Direction="In"		Value="${Employee}" />
					<Parameter	Name="HourCode"				Direction="In"		Value="${HourCode}" />
					<Parameter	Name="HoursWorked"			Direction="In"		Value="=${HoursWorked} - ${HoursWorkedBetweenMidnightAndBookMoment}"	Comment="HoursWorkedBetweenMidnightAndBookMoment = time since midnight" />
					<Parameter	Name="HourTariffCategory"	Direction="In"		Value="${HourTariffCategory}" />
					<Parameter	Name="Job"					Direction="In"		Value="${Job}" />
				</WorkflowCall>

				<WorkflowCall Name="book for ActivityDay" WorkflowName="Job_BookHours">
					<Parameter	Name="BookDate"				Direction="In"		Value="${ActivityDate.Date}" />
					<Parameter	Name="Description"			Direction="In"		Value="${WorkDescription}" />
					<Parameter	Name="Employee"				Direction="In"		Value="${Employee}" />
					<Parameter	Name="HourCode"				Direction="In"		Value="${HourCode}" />
					<Parameter	Name="HoursWorked"			Direction="In"		Value="${HoursWorkedBetweenMidnightAndBookMoment}"	Comment="HoursWorkedBetweenMidnightAndBookMoment = time since midnight" />
					<Parameter	Name="HourTariffCategory"	Direction="In"		Value="${HourTariffCategory}" />
					<Parameter	Name="Job"					Direction="In"		Value="${Job}" />
				</WorkflowCall>
			</When>

			<Otherwise Name="Otherwise SplitHoursForPreviousDay is False and/or all HoursWorked during ActivityDate">
				<WorkflowCall Name="Job_BookHours" WorkflowName="Job_BookHours">
					<Parameter	Name="BookDate"				Direction="In"		Value="${ActivityDate.Date}" />
					<Parameter	Name="Description"			Direction="In"		Value="${WorkDescription}" />
					<Parameter	Name="Employee"				Direction="In"		Value="${Employee}" />
					<Parameter	Name="HourCode"				Direction="In"		Value="${HourCode}" />
					<Parameter	Name="HoursWorked"			Direction="In"		Value="${HoursWorked}" />
					<Parameter	Name="HourTariffCategory"	Direction="In"		Value="${HourTariffCategory}" />
					<Parameter	Name="Job"					Direction="In"		Value="${Job}" />
				</WorkflowCall>
			</Otherwise>
		</Choose>

		<UserContent Name="Post" />
	</Execution>
</Workflow>

Job_Actionfield286_MultijobTemplateLineExistbewerken

Beschrijving: Check MultijobTemplate/ JobSuccessors

<Workflow Name="Job_Actionfield286_MultijobTemplateLineExist" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Check MultijobTemplate/ JobSuccessors</Description>
	<Properties>
		<Property	Name="Job"					Type="Job"					Accessor="Root"		Direction="In" />

		<Property	Name="NewProgressStatus"	Type="ProgressStatus"		Accessor="Optional"	Direction="In" />

		<Property	Name="ActivatedJob"			Type="RequestResult"		Accessor="Internal"						Default="Yes" />
		<Property	Name="FinishedJob"			Type="RequestResult"		Accessor="Internal"						Default="Yes" />
		<Property	Name="JobSuccessors"		Type="List[JobSuccessors]"	Accessor="Internal" />
		<Property	Name="MessageString"		Type="String"				Accessor="Internal" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<When Name="IfNextStatusIsFinishAndJobIsSubjob" Condition="${NewProgressStatus} != Empty &amp;&amp; ${NewProgressStatus} != ${Job.ProgressStatus} &amp;&amp; ${NewProgressStatus.NextStatus} == JobStatus.Finished &amp;&amp; ${Job.Multijob} != Empty &amp;&amp; ${Job.Multijob} != ${Job}">
			<Transaction>
				<GetList Name="GetJobSuccessorWithDependencyEndToEnd" Type="JobSuccessors" OutputProperty="${JobSuccessors}" OrderBy="Id" OrderDirection="Ascending" Comment="Check end-to-end dependency with other subjobs of the multi-job">
					<Joins>
						<Join	Name="Id.Job"		Alias="job"			Type="InnerJoin" />
						<Join	Name="job.Multijob"	Alias="multijob"	Type="InnerJoin" />
						<Join	Name="JobLink"		Alias="jobLink"		Type="InnerJoin" />
					</Joins>
					<Filters>
						<PropertyFilter	PropertyName="multijob.Id"	Operator="="		PropertyValue="${Job.Multijob.Id}" />
						<PropertyFilter	PropertyName="job.Id"		Operator="!="		PropertyValue="${Job.Multijob.Id}" />
						<PropertyFilter	PropertyName="Id.LinkJob"	Operator="="		PropertyValue="${Job}" />
						<CombinedFilter FilterOperator="Or">
							<CombinedFilter FilterOperator="And">
								<PropertyFilter	PropertyName="jobLink.JobLinkType"	Operator="="		PropertyValue="StartToEnd"	Comment="StartToEnd" />
								<InFilter PropertyName="job.Status" Values="JobStatus.Requested,JobStatus.Created,JobStatus.Approved" />
							</CombinedFilter>
							<CombinedFilter FilterOperator="And">
								<PropertyFilter	PropertyName="jobLink.JobLinkType"	Operator="="		PropertyValue="EndToEnd"	Comment="EndToEnd" />
								<InFilter PropertyName="job.Status" Values="JobStatus.Requested,JobStatus.Created,JobStatus.Approved,JobStatus.Active" />
							</CombinedFilter>
						</CombinedFilter>
					</Filters>
				</GetList>
			</Transaction>

			<When Name="JobSuccessorsCountIsNotZero" Condition="${JobSuccessors} != Empty">
				<ForEach Name="Loop predecessor jobs" In="${JobSuccessors}" As="JobSuccessor">
					<Assign Name="Fill MessageString" Property="${MessageString}" Value="=#concat(${MessageString}, ${JobSuccessor.Id.Job.Id}, ' ')" />
				</ForEach>

				<Question Name="CheckJobSuccessorWithDependencyEndToEnd" Type="YesNo" MessageCode="1289" Default="No" OutputProperty="${FinishedJob}">
					<Parameter	Name="DependentJobs"	Direction="In"		Value="=#trim(${MessageString})" />
					<Parameter	Name="Description"		Direction="In"		Value="${NewProgressStatus.Description}" />
					<Parameter	Name="Job"				Direction="In"		Value="${Job}" />
				</Question>

				<When Name="AnswerIsNo" Condition="${FinishedJob} == No">
					<Stop Name="Stop" Mode="Abort" />
				</When>
			</When>
		</When>

		<When Name="IfNextStatusIsActiveAndJobIsSubjob" Condition="${NewProgressStatus} != Empty &amp;&amp; ${NewProgressStatus} != ${Job.ProgressStatus} &amp;&amp; (${NewProgressStatus.NextStatus} == JobStatus.Active || ${NewProgressStatus.NextStatus} == JobStatus.Finished) &amp;&amp; ${Job.Multijob} != Empty &amp;&amp; ${Job.Multijob} != ${Job}">
			<Transaction>
				<GetList Name="GetJobSuccessorWithDependencyEndToStart" Type="JobSuccessors" OutputProperty="${JobSuccessors}" OrderBy="Id" OrderDirection="Ascending" Comment="Check end-to-start dependency with other subjobs of the multi-job">
					<Joins>
						<Join	Name="Id.Job"		Alias="job"			Type="InnerJoin" />
						<Join	Name="job.Multijob"	Alias="multijob"	Type="InnerJoin" />
						<Join	Name="JobLink"		Alias="jobLink"		Type="InnerJoin" />
					</Joins>
					<Filters>
						<PropertyFilter	PropertyName="multijob.Id"	Operator="="		PropertyValue="${Job.Multijob.Id}" />
						<PropertyFilter	PropertyName="job.Id"		Operator="!="		PropertyValue="${Job.Multijob.Id}" />
						<PropertyFilter	PropertyName="Id.LinkJob"	Operator="="		PropertyValue="${Job}" />
						<CombinedFilter FilterOperator="Or">
							<CombinedFilter FilterOperator="And">
								<PropertyFilter	PropertyName="jobLink.JobLinkType"	Operator="="		PropertyValue="StartToStart"	Comment="StartToStart" />
								<InFilter PropertyName="job.Status" Values="JobStatus.Requested,JobStatus.Created,JobStatus.Approved" />
							</CombinedFilter>
							<CombinedFilter FilterOperator="And">
								<PropertyFilter	PropertyName="jobLink.JobLinkType"	Operator="="		PropertyValue="EndToStart"	Comment="EndToStart" />
								<InFilter PropertyName="job.Status" Values="JobStatus.Requested,JobStatus.Created,JobStatus.Approved,JobStatus.Active" />
							</CombinedFilter>
						</CombinedFilter>
					</Filters>
				</GetList>
			</Transaction>

			<When Name="JobSuccessorsCountIsNotZero" Condition="${JobSuccessors} != Empty">
				<ForEach Name="Loop predecessor jobs" In="${JobSuccessors}" As="JobSuccessor">
					<Assign Name="Fill MessageString" Property="${MessageString}" Value="=#concat(${MessageString}, ${JobSuccessor.Id.Job.Id})" />
					<Assign Name="Fill MessageString" Property="${MessageString}" Value="=#concat(${MessageString}, ' ')" />
				</ForEach>

				<Question Name="CheckJobSuccessorWithDependencyEndToStart" Type="YesNo" MessageCode="1285" Default="No" OutputProperty="${ActivatedJob}">
					<Parameter	Name="DependentJobs"	Direction="In"		Value="=#trim(${MessageString})" />
					<Parameter	Name="Description"		Direction="In"		Value="${NewProgressStatus.Description}" />
					<Parameter	Name="Job"				Direction="In"		Value="${Job}" />
				</Question>

				<When Name="AnswerIsNo" Condition="${ActivatedJob} == No">
					<Stop Name="Stop" Mode="Abort" />
				</When>
			</When>
		</When>

		<UserContent Name="Post" />
	</Execution>
</Workflow>

Job_Actionfield286_ProcessMultiJobTemplatebewerken

Beschrijving: Process MultiJobTemplate

<Workflow Name="Job_Actionfield286_ProcessMultiJobTemplate" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Process MultiJobTemplate</Description>
	<Properties>
		<Property	Name="Job"						Type="Job"					Accessor="Root"		Direction="In" />

		<Property	Name="SuccessorItems"			Type="List[SuccessorItem]"	Accessor="Optional"	Direction="In"		Comment="List of selected SuccessorItems" />

		<Property	Name="HasReachedApplyStatus"	Type="Boolean"				Accessor="Internal" />
		<Property	Name="SubjobsGenerated"			Type="Int32"				Accessor="Internal" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<Command Name="Job_CheckStatus" CommandName="Job_CheckStatus">
			<Parameter	Name="ApplyStatus"				Direction="In"		Value="${Job.MultijobTemplate.ApplyRecordStatus}" />
			<Parameter	Name="Status"					Direction="In"		Value="${Job.Status}" />
			<Parameter	Name="HasReachedApplyStatus"	Direction="Out"															OutputProperty="${HasReachedApplyStatus}" />
		</Command>

		<When Name="IsApplyStatusEqualToJobStatus" Condition="${HasReachedApplyStatus} == True">
			<WorkflowCall Name="Job_GenerateSubJobs" WorkflowName="Job_GenerateSubJobs">
				<Parameter	Name="Job"				Direction="In"		Value="${Job}" />
				<Parameter	Name="SuccessorItems"	Direction="In"		Value="${SuccessorItems}" />
				<Parameter	Name="SubjobsGenerated"	Direction="Out"									OutputProperty="${SubjobsGenerated}" />
			</WorkflowCall>

			<When Name="Show Message?" Condition="#{Settings.Job.ShowMultijobGenerateSubJobsDialog} == True &amp;&amp; ${SubjobsGenerated} &gt; 0">
				<Message Name="SubjobsGenerated" MessageCode="1398">
					<Parameter	Name="Job"				Direction="In"		Value="${Job}" />
					<Parameter	Name="SubjobsGenerated"	Direction="In"		Value="${SubjobsGenerated}" />
				</Message>

				<WorkflowCall Name="Job_WarnIfScheduledStartDateIsInThePast" WorkflowName="Job_WarnIfScheduledStartDateIsInThePast">
					<Parameter	Name="Job"	Direction="In"		Value="${Job}" />
				</WorkflowCall>
			</When>
		</When>

		<UserContent Name="Post" />
	</Execution>
</Workflow>

Job_Actionfield286_ReleaseConditionbewerken

Beschrijving: Validate ReleaseCondition on Job

<Workflow Name="Job_Actionfield286_ReleaseCondition" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Validate ReleaseCondition on Job</Description>
	<Properties>
		<Property	Name="Job"										Type="Job"				Accessor="Root"		Direction="In" />

		<Property	Name="ConcessionPolicy"							Type="UltimoString"		Accessor="Optional"	Direction="In" />
		<Property	Name="EquipmentStatusesWithoutReleaseCondition"	Type="List[Status]"		Accessor="Optional"	Direction="In"		Default="Empty"	Comment="Set here the equipment statuses that dont need a releasecondition" />
		<Property	Name="NewProgressStatus"						Type="ProgressStatus"	Accessor="Optional"	Direction="In" />
		<Property	Name="ReleaseDate"								Type="Date?"			Accessor="Optional"	Direction="In" />
		<Property	Name="UseReleaseCondition"						Type="Boolean"			Accessor="Optional"	Direction="In"						Comment="True to use release condition." />

		<Property	Name="ReleaseCondition"							Type="ReleaseCondition"	Accessor="Optional"	Direction="InOut"					Comment="When given, it will be shown in the dialog." />

		<Property	Name="CheckDate"								Type="Date?"			Accessor="Internal" />
		<Property	Name="UsePmWorkOrderFrequencyStartDate"			Type="Boolean"			Accessor="Internal" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<WorkflowCall Name="Job_Actionfield286_SetUseReleaseCondition" WorkflowName="Job_Actionfield286_SetUseReleaseCondition">
			<Parameter	Name="EquipmentStatusesWithoutReleaseCondition"	Direction="In"		Value="${EquipmentStatusesWithoutReleaseCondition}" />
			<Parameter	Name="Job"										Direction="In"		Value="${Job}" />
			<Parameter	Name="UseReleaseCondition"						Direction="InOut"	Value="${UseReleaseCondition}"						OutputProperty="${UseReleaseCondition}" />
		</WorkflowCall>

		<When Name="UseReleaseCondition?" Condition="${UseReleaseCondition} == True &amp;&amp; ${NewProgressStatus} != Empty &amp;&amp; (${NewProgressStatus.NextStatus} == JobStatus.Finished || ${NewProgressStatus.NextStatus} == JobStatus.Closed || ${NewProgressStatus.NextStatus} == JobStatus.Completed)">
			<Validation Name="ReleaseCondition must be set" Condition="${ReleaseCondition} != Empty" MessageCode="0692" />

			<When Name="SetReleaseDate?" Condition="${ReleaseCondition.SetReleaseDate} == True">
				<When Name="PmWorkOrder?" Condition="${Job.PmWorkOrder} != Empty">
					<When Name="PmWorkOrder.Dynamic?" Condition="${Job.PmWorkOrder.Dynamic} == True">
						<Assign Name="set active date" Property="${Job.PmWorkOrder.LastMaintenanceDate}" Value="${Job.StatusActiveDate.Date?}" />
					</When>

					<Assign Name="checkDate by PmWorkOrder TimeNextMaintenanceDate" Property="${CheckDate}" Value="${Job.PmWorkOrder.TimeNextMaintenanceDate}" />
					<Assign Name="set UsePmWorkOrderFrequencyStartDate to true" Property="${UsePmWorkOrderFrequencyStartDate}" Value="True" />
				</When>

				<When Name="Equipment present?" Condition="${UsePmWorkOrderFrequencyStartDate} == False &amp;&amp; ${Job.Equipment} != Empty">
					<Assign Name="checkDate by Equipment NextPmMaintenanceDate" Property="${CheckDate}" Value="${Job.Equipment.NextPmMaintenanceDate}" />
				</When>
			</When>

			<Validation Name="ConcessionPolicy and ReleaseDate mandatory check" Condition="(${ReleaseCondition.SetConcessionPolicy} == False || ${ConcessionPolicy} != Empty) &amp;&amp; (${ReleaseCondition.SetReleaseDate} == False || ${ReleaseDate} != Empty)" MessageCode="1644">
				<Parameter	Name="ConcessionPolicyValid"	Direction="In"		Value="=${ReleaseCondition.SetConcessionPolicy} == False || ${ConcessionPolicy} != Empty" />
				<Parameter	Name="ReleaseDateValid"			Direction="In"		Value="=${ReleaseCondition.SetReleaseDate} == False || ${ReleaseDate} != Empty" />
			</Validation>

			<When Name="check releaseDate?" Condition="${ReleaseCondition.SetReleaseDate} == True">
				<Validation Name="ReleaseDate &gt;= System Date" Condition="${ReleaseDate} &gt;= #{Environment.CurrentDate}" MessageCode="0695" />
				<Validation Name="CheckDate validation" Condition="${CheckDate} == Empty || ${ReleaseDate} &lt; ${CheckDate}" MessageCode="0697">
					<Parameter	Name="MaintenanceDate"	Direction="In"		Value="${CheckDate}" />
				</Validation>
			</When>

			<Assign Name="WriteReleaseCondition = true" Property="#{Settings.Job.WriteReleaseCondition}" Value="True" />
		</When>

		<UserContent Name="Post" />
	</Execution>
</Workflow>

Job_Actionfield286_SetMultiJobTemplatebewerken

Beschrijving: Set MultiJobTemplate properties on job

<Workflow Name="Job_Actionfield286_SetMultiJobTemplate" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Set MultiJobTemplate properties on job</Description>
	<Properties>
		<Property	Name="Job"				Type="Job"				Accessor="Root"		Direction="In" />

		<Property	Name="MultijobTemplate"	Type="MultijobTemplate"	Accessor="Optional"	Direction="In"		Comment="Multijobtemplate of the job" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<Assign Name="Set MultijobTemplate" Property="${Job.MultijobTemplate}" Value="${MultijobTemplate}" />

		<When Name="Multijob template value set?" Condition="${MultijobTemplate} != Empty">
			<Assign Name="Copy working days" Property="${Job.UseWorkScheduleForPlanning}" Value="${MultijobTemplate.UseWorkScheduleForPlanning}" />
		</When>

		<UserContent Name="Post" />
	</Execution>
</Workflow>

Job_Actionfield286_SetUseReleaseConditionbewerken

Beschrijving: Validate ReleaseCondition on Job

<Workflow Name="Job_Actionfield286_SetUseReleaseCondition" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Validate ReleaseCondition on Job</Description>
	<Properties>
		<Property	Name="Job"										Type="Job"			Accessor="Root"		Direction="In" />

		<Property	Name="EquipmentStatusesWithoutReleaseCondition"	Type="List[Status]"	Accessor="Optional"	Direction="In"		Default="Empty"	Comment="Set here the equipment statuses that dont need a releasecondition" />

		<Property	Name="UseReleaseCondition"						Type="Boolean"		Accessor="Optional"	Direction="InOut"					Comment="True to use release condition." />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<When Name="Check UseReleaseCondition" Condition="${Job.ReleaseCondition} != Empty" Comment="ReleaseCondition can be set only one time ">
			<Assign Name="UseReleaseCondition" Property="${UseReleaseCondition}" Value="False" />
		</When>

		<When Name="Check UseReleaseCondition" Condition="${Job.Equipment} == Empty" Comment="ReleaseCondition can be set only when job has an equipment">
			<Assign Name="UseReleaseCondition" Property="${UseReleaseCondition}" Value="False" />
		</When>

		<When Name="Name" Condition="${UseReleaseCondition} == True &amp;&amp; ${Job.WorkOrderType} != Empty">
			<Assign Name="UseReleaseCondition" Property="${UseReleaseCondition}" Value="${Job.WorkOrderType.UseReleaseCondition}" />
		</When>

		<When Name="Check UseReleaseCondition" Condition="${EquipmentStatusesWithoutReleaseCondition} != Empty &amp;&amp; ${Job.Equipment} != Empty &amp;&amp; #containselement(${EquipmentStatusesWithoutReleaseCondition}, ${Job.Equipment.Status}, False) == True">
			<Assign Name="UseReleaseCondition" Property="${UseReleaseCondition}" Value="False" />
		</When>

		<UserContent Name="Post" />
	</Execution>
</Workflow>

Job_Actionfield286_SetValuesAndShowDialogbewerken

Beschrijving: Changes the progress status of a job and/or books hours. If applicable, sets the release condition of an equipment.(AF286).Set values and showDialog Dialog_HourRegistration

<Workflow Name="Job_Actionfield286_SetValuesAndShowDialog" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Changes the progress status of a job and/or books hours. If applicable, sets the release condition of an equipment.(AF286).Set values and showDialog Dialog_HourRegistration</Description>
	<Properties>
		<Property	Name="Job"													Type="Job"							Accessor="Root"		Direction="In" />

		<Property	Name="AllowedProgressStatusList"							Type="List[ProgressStatus]"			Accessor="Optional"	Direction="In"		Default="Empty"											Comment="List of Allowed ProgressStatuses" />
		<Property	Name="BookHoursDurationIntervalInMinutes"					Type="Int32?"						Accessor="Optional"	Direction="In"		Default="15"											Comment="Interval in minutes shown in the dropdown." />
		<Property	Name="DefaultProgressStatusIdForQualityNotOk"				Type="UltimoString"					Accessor="Optional"	Direction="In"																Comment="Used for Bulk PM only. Progress status used for the jobs created from the InspectionLines, which are not marked Quality OK" />
		<Property	Name="DefaultProgressStatusIdForQualityOk"					Type="UltimoString"					Accessor="Optional"	Direction="In"																Comment="Used for Bulk PM only. Progress status used for the jobs created from the InspectionLines, which are marked Quality OK" />
		<Property	Name="DialogTitleLabel"										Type="String"						Accessor="Optional"	Direction="In"																Comment="Label code used for dialog title." />
		<Property	Name="EmployeeFilter"										Type="String"						Accessor="Optional"	Direction="In"		Default="EmpContext = 1 AND EMPCOMPID=N'#{Company.Id}'"	Comment="Filter used for employees shown in the employee selection dropdown. Format: EmpContext = 1 AND EmpSkcId = TD" />
		<Property	Name="EnableDate"											Type="Boolean"						Accessor="Optional"	Direction="In"		Default="True"											Comment="Prevent users can set the date manual" />
		<Property	Name="EnableToChangeEquipmentStatusWhenChangingJobStatus"	Type="Boolean"						Accessor="Optional"	Direction="In"		Default="False"											Comment="In dialog 'Update Progress' allows to change the status of the equipment registered on the job." />
		<Property	Name="EquipmentStatusesWithoutReleaseCondition"				Type="List[Status]"					Accessor="Optional"	Direction="In"		Default="Empty"											Comment="Set here the equipment statuses that dont need a releasecondition" />
		<Property	Name="MaxBookHours"											Type="Int32?"						Accessor="Optional"	Direction="In"		Default="10"											Comment="Maximum number of hours to book and shown in the drop-down list." />
		<Property	Name="ProgressStatusContext"								Type="Context"						Accessor="Optional"	Direction="In"																Comment="Context for the possible progress status records." />
		<Property	Name="ProgressStatusDialogOptions"							Type="ProgressStatusDialogOptions"	Accessor="Optional"	Direction="In"		Default="TextAndStatus"									Comment="Allow user to modify both text and status." />
		<Property	Name="ShowLinkDocument"										Type="Boolean"						Accessor="Optional"	Direction="In"		Default="True"											Comment="Set Document.ManageEmployee to User." />
		<Property	Name="UseReleaseCondition"									Type="Boolean"						Accessor="Optional"	Direction="In"		Default="True"											Comment="True to use release condition." />
		<Property	Name="WorkDescriptionLabel"									Type="UltimoString"					Accessor="Optional"	Direction="In"																Comment="Label code used for workdescription." />

		<Property	Name="ActivityDate"											Type="DateTime?"					Accessor="Optional"	Direction="InOut" />
		<Property	Name="BookHours"											Type="Boolean"						Accessor="Optional"	Direction="InOut"	Default="True"											Comment="True in order to use hour registration." />
		<Property	Name="ConcessionPolicy"										Type="UltimoString"					Accessor="Optional"	Direction="InOut" />
		<Property	Name="Employee"												Type="Employee"						Accessor="Optional"	Direction="InOut"	Default="#{User.EmployeeId}"							Comment="Employee used as default for hour registration and status transition." />
		<Property	Name="HourCode"												Type="HourCode"						Accessor="Optional"	Direction="InOut" />
		<Property	Name="HoursWorked"											Type="Decimal?"						Accessor="Optional"	Direction="InOut" />
		<Property	Name="HourTariffCategory"									Type="HourTariffCategory"			Accessor="Optional"	Direction="InOut" />
		<Property	Name="NewProgressStatus"									Type="ProgressStatus"				Accessor="Optional"	Direction="InOut" />
		<Property	Name="ReleaseCondition"										Type="ReleaseCondition"				Accessor="Optional"	Direction="InOut"															Comment="When given, it will be shown in the dialog." />
		<Property	Name="ReleaseDate"											Type="Date?"						Accessor="Optional"	Direction="InOut" />
		<Property	Name="WorkDescription"										Type="UltimoString"					Accessor="Optional"	Direction="InOut" />

		<Property	Name="DocumentUploadFile"									Type="String"						Accessor="Optional"	Direction="Out"																Comment="Job document" />
		<Property	Name="EquipmentNewProgressStatus"							Type="ProgressStatus"				Accessor="Optional"	Direction="Out"																Comment="Optionally, equipment on job can be given a new progress status" />
		<Property	Name="EquipmentRemark"										Type="UltimoString"					Accessor="Optional"	Direction="Out"																Comment="Optional remark for equipment status change" />
		<Property	Name="EquipmentRemarkAsEnteredByUser"						Type="UltimoString"					Accessor="Optional"	Direction="Out"																Comment="Optional remark for equipment status change as entered in the dialog" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<Assign Name="Set ProgressStatusIdForQualityOk for BulkPO" Property="#{Settings.JobInspectionLine.ProgressStatusIdForQualityOk}" Value="${DefaultProgressStatusIdForQualityOk}" />
		<Assign Name="Set ProgressStatusIdForQualityNotOk for BulkPO" Property="#{Settings.JobInspectionLine.ProgressStatusIdForQualityNotOk}" Value="${DefaultProgressStatusIdForQualityNotOk}" />

		<Validation Name="Job Status" Condition="${Job.Status} != JobStatus.Closed" MessageCode="0684" />

		<When Name="Check parameters" Condition="(${ProgressStatusDialogOptions} == None || ${ProgressStatusDialogOptions} == TextOnly) &amp;&amp; ${UseReleaseCondition} == False &amp;&amp; ${BookHours} == False">
			<Message Name="HourRegistrationDialog wrong configuration" MessageCode="1912" />

			<Stop Name="Stop" Mode="Abort" />
		</When>

		<When Name="Book hours only valid is employee is allowed to book hours" Condition="(${BookHours} == True &amp;&amp; #{User.IsSuper} == False &amp;&amp; ${Employee.SelectForBookHours} == False) || #{Company.MatchesCompanyOfCurrentEmployee}==False">
			<Assign Name="Disable book hours" Property="${BookHours}" Value="False" />
		</When>

		<When Name="if bookhours" Condition="${BookHours} == True">
			<Validation Name="Job WorkOrderType" Condition="${Job.WorkOrderType} != Empty" MessageCode="0685">
				<Parameter	Name="Job"	Direction="In"		Value="${Job}" />
			</Validation>
		</When>

		<WorkflowCall Name="Dialog_HourRegistration" WorkflowName="Dialog_HourRegistration">
			<Parameter	Name="AllowedProgressStatusList"							Direction="In"		Value="${AllowedProgressStatusList}" />
			<Parameter	Name="BookHours"											Direction="In"		Value="${BookHours}" />
			<Parameter	Name="BookHoursDurationIntervalInMinutes"					Direction="In"		Value="${BookHoursDurationIntervalInMinutes}" />
			<Parameter	Name="DialogTitleLabel"										Direction="In"		Value="${DialogTitleLabel}" />
			<Parameter	Name="EmployeeFilter"										Direction="In"		Value="${EmployeeFilter}" />
			<Parameter	Name="EnableDate"											Direction="In"		Value="${EnableDate}" />
			<Parameter	Name="EnableToChangeEquipmentStatusWhenChangingJobStatus"	Direction="In"		Value="${EnableToChangeEquipmentStatusWhenChangingJobStatus}" />
			<Parameter	Name="EquipmentStatusesWithoutReleaseCondition"				Direction="In"		Value="${EquipmentStatusesWithoutReleaseCondition}" />
			<Parameter	Name="Job"													Direction="In"		Value="${Job}" />
			<Parameter	Name="MaxBookHours"											Direction="In"		Value="${MaxBookHours}" />
			<Parameter	Name="ProgressStatusContext"								Direction="In"		Value="${ProgressStatusContext}" />
			<Parameter	Name="ProgressStatusDialogOptions"							Direction="In"		Value="${ProgressStatusDialogOptions}" />
			<Parameter	Name="ShowLinkDocument"										Direction="In"		Value="${ShowLinkDocument}" />
			<Parameter	Name="UseReleaseCondition"									Direction="In"		Value="${UseReleaseCondition}" />
			<Parameter	Name="WorkDescriptionLabel"									Direction="In"		Value="${WorkDescriptionLabel}" />
			<Parameter	Name="Employee"												Direction="InOut"	Value="${Employee}"												OutputProperty="${Employee}" />
			<Parameter	Name="ReleaseCondition"										Direction="InOut"	Value="${ReleaseCondition}"										OutputProperty="${ReleaseCondition}" />
			<Parameter	Name="ActivityDate"											Direction="Out"																		OutputProperty="${ActivityDate}" />
			<Parameter	Name="ConcessionPolicy"										Direction="Out"																		OutputProperty="${ConcessionPolicy}" />
			<Parameter	Name="DocumentUploadFile"									Direction="Out"																		OutputProperty="${DocumentUploadFile}" />
			<Parameter	Name="EquipmentNewProgressStatus"							Direction="Out"																		OutputProperty="${EquipmentNewProgressStatus}" />
			<Parameter	Name="EquipmentRemark"										Direction="Out"																		OutputProperty="${EquipmentRemark}" />
			<Parameter	Name="EquipmentRemarkAsEnteredByUser"						Direction="Out"																		OutputProperty="${EquipmentRemarkAsEnteredByUser}" />
			<Parameter	Name="HourCode"												Direction="Out"																		OutputProperty="${HourCode}" />
			<Parameter	Name="HoursWorked"											Direction="Out"																		OutputProperty="${HoursWorked}" />
			<Parameter	Name="HourTariffCategory"									Direction="Out"																		OutputProperty="${HourTariffCategory}" />
			<Parameter	Name="NewProgressStatus"									Direction="Out"																		OutputProperty="${NewProgressStatus}" />
			<Parameter	Name="ReleaseDate"											Direction="Out"																		OutputProperty="${ReleaseDate}" />
			<Parameter	Name="WorkDescription"										Direction="Out"																		OutputProperty="${WorkDescription}" />
		</WorkflowCall>

		<UserContent Name="Post" />
	</Execution>
</Workflow>

Job_Actionfield286_ValidateBookHoursbewerken

Beschrijving: Validate BookHours

<Workflow Name="Job_Actionfield286_ValidateBookHours" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Validate BookHours</Description>
	<Properties>
		<Property	Name="Job"					Type="Job"					Accessor="Root"		Direction="In" />

		<Property	Name="BookHours"			Type="Boolean"				Accessor="Optional"	Direction="In" />
		<Property	Name="HourCode"				Type="HourCode"				Accessor="Optional"	Direction="In" />
		<Property	Name="HoursWorked"			Type="Decimal?"				Accessor="Optional"	Direction="In" />
		<Property	Name="HourTariffCategory"	Type="HourTariffCategory"	Accessor="Optional"	Direction="In" />

		<Property	Name="HourDialogModus"		Type="HourDialogModus"		Accessor="Internal"						Default="#{UltimoSettings.HourDialogModus}" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<When Name="if bookhours" Condition="${BookHours} == True &amp;&amp; ${HoursWorked} != Empty &amp;&amp; ${HoursWorked} != 0">
			<When Name="When HourDialogModus is not set" Condition="${HourDialogModus} == NotSet">
				<Assign Name="Set HourDialogModus to default value" Property="${HourDialogModus}" Value="HourTariffCategory" />
			</When>

			<When Name="HourDialogModus?" Condition="${HourDialogModus} == HourTariffCategory">
				<AssignWhenEmpty Name="HourCode" Property="${HourCode}" Value="${Job.WorkOrderType.HourCode?}" />
			</When>

			<Validation Name="HourCode" Condition="${HourCode} != Empty" MessageCode="0757">
				<Parameter	Name="DialogModus"	Direction="In"		Value="${HourDialogModus}" />
				<Parameter	Name="Job"			Direction="In"		Value="${Job}" />
			</Validation>

			<When Name="HourTariffCategory modus?" Condition="${HourDialogModus} == HourTariffCategory || ${HourDialogModus} == HourCodeAndHourTariffCategory">
				<Validation Name="HourTariffCategory" Condition="${HourTariffCategory} != Empty" MessageCode="0691" />
			</When>
		</When>

		<UserContent Name="Post" />
	</Execution>
</Workflow>

Job_Actionfield286_ValidateJobMaterialbewerken

Beschrijving: Validate JobMaterial

<Workflow Name="Job_Actionfield286_ValidateJobMaterial" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Validate JobMaterial</Description>
	<Properties>
		<Property	Name="Job"			Type="Job"					Accessor="Root"		Direction="In" />

		<Property	Name="JobMaterials"	Type="List[JobMaterial]"	Accessor="Internal" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<When Name="StockLevelPerSite is true" Condition="#{UltimoSettings.StockLevelPerSite} == true">
			<Transaction>
				<GetList Name="Get JobMaterials" Type="JobMaterial" OutputProperty="${JobMaterials}" OrderBy="Id" OrderDirection="Ascending">
					<Filters>
						<CombinedFilter FilterOperator="And">
							<PropertyFilter	PropertyName="Id.Job"	Operator="="		PropertyValue="${Job}" />
							<InFilter PropertyName="Status" Values="JobMaterialStatus.None,JobMaterialStatus.Created" />
						</CombinedFilter>
					</Filters>
				</GetList>
			</Transaction>

			<When Name="There are JobMaterials" Condition="${JobMaterials.Count} &gt; 0">
				<Validation Name="Check job.site is null" Condition="${Job.Site} != Empty" MessageCode="3629">
					<Parameter	Name="Job"	Direction="In"		Value="${Job}" />
				</Validation>

				<ForEach Name="ForEach JobMaterial" In="${JobMaterials}" As="JobMaterial">
					<Validation Name="Check Article" Condition="${JobMaterial.Article} != Empty" MessageCode="0390">
						<Parameter	Name="JobMaterial"	Direction="In"		Value="${JobMaterial}" />
					</Validation>

					<When Name="StockLevelPerSite is true" Condition="#{UltimoSettings.StockLevelPerSite} == true">
						<Validation Name="Check job.site != jobmat.Site" Condition="${Job.Site} == ${JobMaterial.Site}" MessageCode="3630">
							<Parameter	Name="JobMaterial"	Direction="In"		Value="${JobMaterial}" />
						</Validation>
					</When>
				</ForEach>
			</When>
		</When>

		<UserContent Name="Post" />
	</Execution>
</Workflow>

Job_Actionfield286_ValidateTargetDatebewerken

Beschrijving: Validate Job.TargetDate for MultijobTemplate

<Workflow Name="Job_Actionfield286_ValidateTargetDate" Version="2025.07.28" WorkflowType="Standard" xmlns="urn:Ultimo.Framework.Workflow-mapping">
	<Security EditLevel="10" ViewLevel="20" UserContentLevel="30" />
	<Description>Validate Job.TargetDate for MultijobTemplate </Description>
	<Properties>
		<Property	Name="Job"				Type="Job"				Accessor="Root"		Direction="In" />

		<Property	Name="MultijobTemplate"	Type="MultijobTemplate"	Accessor="Optional"	Direction="In" />

		<Property	Name="Result"			Type="Boolean"			Accessor="Internal" />
		<Property	Name="WorkSchedule"		Type="WorkSchedule"		Accessor="Internal" />
	</Properties>
	<Execution>
		<UserContent Name="Pre" />

		<When Name="Type of schedule is duration in working days" Condition="${MultijobTemplate} != Empty &amp;&amp; ${MultijobTemplate.UseWorkScheduleForPlanning} == True">
			<Assign Name="Set working day schedule" Property="${WorkSchedule}" Value="#{UltimoSettings.JobSchedule}" />

			<When Name="Check TargetDate" Condition="${MultijobTemplate.ScheduledStartType} == ScheduledStartBeforeScheduledCompletion">
				<Validation Name="Job has a TargetDate?" Condition="${Job.TargetDate} != Empty" MessageCode="3539">
					<Parameter	Name="Job"				Direction="In"		Value="${Job}" />
					<Parameter	Name="MultijobTemplate"	Direction="In"		Value="${MultijobTemplate}" />
				</Validation>

				<Transaction>
					<Command Name="CheckWhetherTargetDateIsWithinBounds" CommandName="IsDateWithinBoundsOfSchedule">
						<Parameter	Name="Date"			Direction="In"		Value="${Job.TargetDate.Date}" />
						<Parameter	Name="WorkSchedule"	Direction="In"		Value="${WorkSchedule}" />
						<Parameter	Name="Result"		Direction="Out"										OutputProperty="${Result}" />
					</Command>
				</Transaction>

				<Validation Name="IsDateValid" Condition="${Result} == True" MessageCode="1384">
					<Parameter	Name="Job"			Direction="In"		Value="${Job}" />
					<Parameter	Name="TargetDate"	Direction="In"		Value="${Job.TargetDate}" />
				</Validation>
			</When>
		</When>

		<UserContent Name="Post" />
	</Execution>
</Workflow>