﻿<?xml version="1.0" encoding="utf-8"?>
<configset name="CreditorApproval" author="VGR">
  <comment>2026-10-01, VGR: v1</comment>
  <requirements>
    <version-requirement>6.8.0.20</version-requirement>
    <ocl-requirement message="The module Purchases is mandatory to use this config set.">Timsession.allinstances.login-&gt;first.checkFeature('fcAuslagen')</ocl-requirement>
    <ocl-requirement message="The config set custom class 30 is already in use. To import the config set, please make sure that the config set custom class 30 is not used in any other context.">ClassSettings.allInstances-&gt;select(class.containsType(ConfigSetCustomClass30))-&gt;reject(entryid='ClassSettingsConfigsetcustomclass30CreditorApprovalStatus')-&gt;size=0</ocl-requirement>
  </requirements>
  <update />
  <references>
    <entryid-reference class="StandardUserGroup" alias="StandardUserGroup0" entryid="UserGroupStandard" />
    <entryid-reference class="SettingsFolder" alias="SettingsFolder0" entryid="FolderPurchases" />
    <entryid-reference class="SettingsFolder" alias="SettingsFolder1" entryid="FolderSettings" />
    <entryid-reference class="SuperGroup" alias="SuperGroup0" entryid="UserGroupSuper" />
  </references>
  <objects>
    <object class="CustomField" alias="ZusatzfeldKlasse5">
      <member name="entryID">CustomFieldCreditorApprovalLog</member>
      <member name="remarks">In this field the changes on an creditor regarding approval are recorded. This field should only be write-accessibe for the system administrator.</member>
      <member name="classes">Creditor</member>
      <member name="fieldName">creditorApprovalLog</member>
      <member name="designation">
        <mltext language="NV">Approval log</mltext>
      </member>
      <member name="fieldType">UnicodeText</member>
      <member name="hidden">true</member>
      <member name="orderIdx">110</member>
      <member name="selectionType">None</member>
    </object>
    <object class="CustomField" alias="ZusatzfeldKlasse4">
      <member name="entryID">AdditionalFieldCreditorApprovalStatus</member>
      <member name="expression">ConfigSetCustomClass30.allinstances-&gt;orderby(customfieldint('sortOrder'))</member>
      <member name="classes">Creditor</member>
      <member name="fieldName">creditorApprovalStatus</member>
      <member name="designation">
        <mltext language="NV">Approval status</mltext>
      </member>
      <member name="fieldType">Object</member>
      <member name="hidden">true</member>
      <member name="orderIdx">100</member>
      <member name="selectionType">Object</member>
    </object>
    <object class="CustomField" alias="ZusatzfeldKlasse1">
      <member name="entryID">AdditionalFieldCreditorApprovalStatus</member>
      <member name="remarks">How the status should appear on the creditor.</member>
      <member name="classes">ConfigSetCustomClass30</member>
      <member name="fieldName">creditorApprovalStatusName</member>
      <member name="designation">
        <mltext language="NV">Approval status</mltext>
      </member>
      <member name="fieldType">String</member>
      <member name="hidden">false</member>
      <member name="orderIdx">510</member>
      <member name="selectionType">None</member>
    </object>
    <object class="CustomField" alias="ZusatzfeldKlasse3">
      <member name="entryID">CustomFieldCreditorApprovalToBeNotifiedUser</member>
      <member name="remarks">A single user who should receive the notification

</member>
      <member name="expression">Projektbearbeiter.allinstances-&gt;orderby(name)</member>
      <member name="classes">ConfigSetCustomClass30</member>
      <member name="fieldName">recipient</member>
      <member name="designation">
        <mltext language="NV">To be notified (user)</mltext>
      </member>
      <member name="fieldType">Object</member>
      <member name="hidden">false</member>
      <member name="orderIdx">530</member>
      <member name="selectionType">Object</member>
    </object>
    <object class="CustomField" alias="ZusatzfeldKlasse2">
      <member name="entryID">CustomFieldCreditorApprovalToBeNotifiedOcl</member>
      <member name="remarks">Defines who should be notifed when the status is set. must be defined in OCL
Note: No notification is sent on creation of the creditor</member>
      <member name="classes">ConfigSetCustomClass30</member>
      <member name="fieldName">recipientInOCL</member>
      <member name="designation">
        <mltext language="NV">User to be notified (by OCL expression)</mltext>
      </member>
      <member name="fieldType">String</member>
      <member name="hidden">true</member>
      <member name="orderIdx">520</member>
      <member name="selectionType">None</member>
    </object>
    <object class="CustomField" alias="ZusatzfeldKlasse0">
      <member name="entryID">CustomFieldCreditorApprovalSortingOrder</member>
      <member name="remarks">Defines the order in which the Creditor approval status should be listed (ascending).
Note: The status with the lowest sortOrder will be set when the creditor is created.
</member>
      <member name="classes">ConfigSetCustomClass30</member>
      <member name="fieldName">sortOrder</member>
      <member name="designation">
        <mltext language="NV">Sorting order</mltext>
      </member>
      <member name="fieldType">Integer</member>
      <member name="hidden">false</member>
      <member name="orderIdx">500</member>
      <member name="selectionType">None</member>
    </object>
    <object class="UserGroup" alias="UserGroup_Folderaccessprocurement36">
      <member name="entryID">UserGroupFolderAccessPurchasing</member>
      <member name="persRootFolders">
        <reference-object alias="Folder_Procurement35" />
      </member>
      <member name="designation">Folder access purchasing</member>
    </object>
    <object class="UserGroup" alias="UserGroup_Procurement37">
      <member name="entryID">UserGroupPurchasing</member>
      <member name="rights">
        <reference-object alias="ClassRight_Project.verrechneteAuslagen,All,Grant40" />
        <reference-object alias="ClassRight_Creditor,All,Grant42" />
        <reference-object alias="ClassRight_Outlay,All,Grant38" />
        <reference-object alias="ClassRight_Postcreditors,Grant39" />
        <reference-object alias="ClassRight_Project.planAuslagenWert,Read,Grant41" />
      </member>
      <member name="designation">Purchasing</member>
    </object>
    <object class="ClassRight" alias="ClassRecht_Rechnung.approvalLog,Schreiben,Verweigern42">
      <member name="entryID">AuthorizationRechnungapprovalLogWriteDeny</member>
      <member name="remarks">Explicitly do not allow writing (change) on the member approval log on creditor</member>
      <member name="grantDeny">false</member>
      <member name="orderIdx">18</member>
      <member name="memberName">approvalLog</member>
      <member name="userGroup">
        <reference-object alias="StandardUserGroup0" />
      </member>
      <member name="rightType">
        <reference-object alias="RightType_Write" />
      </member>
      <member name="classes">Creditor</member>
    </object>
    <object class="ClassRight" alias="ClassRight_Project.verrechneteAuslagen,All,Grant40">
      <member name="entryID">UserRichtPurchasingAllowAllChargedPurchasesOnProjects</member>
      <member name="grantDeny">true</member>
      <member name="orderIdx">1</member>
      <member name="memberName">verrechneteAuslagen</member>
      <member name="userGroup">
        <reference-object alias="UserGroup_Procurement37" />
      </member>
      <member name="rightType">
        <reference-object alias="RightType_All" />
      </member>
      <member name="classes">Project</member>
    </object>
    <object class="ClassRight" alias="ClassRight_Creditor,All,Grant42">
      <member name="entryID">UserRichtPurchasingAllowAllCreditors</member>
      <member name="grantDeny">true</member>
      <member name="orderIdx">3</member>
      <member name="userGroup">
        <reference-object alias="UserGroup_Procurement37" />
      </member>
      <member name="rightType">
        <reference-object alias="RightType_All" />
      </member>
      <member name="classes">Creditor</member>
    </object>
    <object class="ClassRight" alias="ClassRight_Outlay,All,Grant38">
      <member name="entryID">UserRichtPurchasingAllowAllPurchases</member>
      <member name="grantDeny">true</member>
      <member name="orderIdx">0</member>
      <member name="userGroup">
        <reference-object alias="UserGroup_Procurement37" />
      </member>
      <member name="rightType">
        <reference-object alias="RightType_All" />
      </member>
      <member name="classes">Outlay</member>
    </object>
    <object class="ClassRight" alias="ClassRight_Postcreditors,Grant39">
      <member name="entryID">UserRichtPurchasingAllowChargeCreditors</member>
      <member name="grantDeny">true</member>
      <member name="orderIdx">1</member>
      <member name="userGroup">
        <reference-object alias="UserGroup_Procurement37" />
      </member>
      <member name="rightType">
        <reference-object alias="RightType_KrediBuchen" />
      </member>
    </object>
    <object class="ClassRight" alias="ClassRight_Project.planAuslagenWert,Read,Grant41">
      <member name="entryID">UserRichtPurchasingAllowReadBudgetPurchasesOnProjects</member>
      <member name="grantDeny">true</member>
      <member name="orderIdx">2</member>
      <member name="memberName">planAuslagenWert</member>
      <member name="userGroup">
        <reference-object alias="UserGroup_Procurement37" />
      </member>
      <member name="rightType">
        <reference-object alias="RightType_Read" />
      </member>
      <member name="classes">Project</member>
    </object>
    <object class="ClassSettings" alias="ClassSettings_PluginCustomClass3029">
      <member name="entryID">ClassSettingsConfigsetcustomclass30CreditorApprovalStatus</member>
      <member name="classIconIndex">21</member>
      <member name="customPages">&lt;Page Override="AdditionalClassBase"&gt;
    &lt;AdditionalFieldGroup Override="AdditionalFieldGroup" Visible="False" /&gt;
    
    &lt;TextBox Name="OrderTextBox" Label="{Translate 'Order'}" 
      ValueExpression="customfieldint('sortOrder')" /&gt;  

    &lt;TextBox Name="DescriptionTextBox" Label="{Translate 'Description'}"  
      ValueExpression="customfield('creditorApprovalStatusName')" /&gt;  
      
     &lt;Group Name="UserToBeNotifiedGroup" Header="{Translate 'User to be notified'}" 
       Orientation="Vertical"&gt;

          &lt;OclTextBox Name="UserNotifiedOCLOclTextBox" Label="{Translate 'Defined in OCL'}"
           BaseType="Creditor"
           ValueExpression="customfield('RecipientInOCL')" /&gt;  

          &lt;UserComboBox Name="UserNotifiedUserComboBox" ShowRemoveButton="True" ShowNavLinkButton="True"
           Label="{Translate 'User'}"
           ValueExpression="customfieldobj('Recipient')" /&gt;  
     &lt;/Group&gt;
      
    
&lt;/Page&gt;</member>
      <member name="classStringrepExpression">customfield('creditorApprovalStatusName').translate</member>
      <member name="class">ConfigSetCustomClass30</member>
      <member name="classnameExpression">'Creditor approval status'</member>
      <member name="sortExpression">self-&gt;orderby(customfieldint('sortOrder'))</member>
    </object>
    <object class="ClassSettings" alias="ClassSettings_Creditor32">
      <member name="entryID">ClasssettingsCreditor</member>
      <member name="customPages">&lt;Page Override="FurtherInfo"&gt;
    &lt;Group Name="CreditorApprovalFurtherInfoGroup" PlaceAfter="AdditionalFieldGroup" Header="{Translate 'Approval'}" 
        Orientation="Vertical"  Separator="Never"&gt;
        &lt;Group Name="CreditorApprovalInteractiveGroup" Orientation="Horizontal"&gt;
        &lt;AdditionalFieldComboBox Name="CAStatusAdditionalFieldComboBox"
            ValueExpression="customfieldobj('creditorApprovalStatus')" 
            FlexWidth="60"
            /&gt;
            &lt;!-- Comments are only possible till the final approval status is set. 
            A spacer ensures, that the fields do no jump, when the Button is set to
            invisible. The Spacer has a hight larger than the buttons height. --&gt;
            &lt;Spacer Name="CASpacer" Height="28"/&gt; 
            &lt;ScriptButton Name="AddCommentScriptButton" Text="{Translate 'Add comment'}"
            FlexWidth="45" HorizontalAlignment="Right" ScriptName="Add_creditor_approval_comment" 
            VisibleExpression="customfieldobj('creditorApprovalStatus').oclAsType(ConfigSetCustomClass30)
            .customfieldint('sortOrder')&amp;lt;&amp;gt;ConfigSetCustomClass30.allinstances
            -&amp;gt;orderby(customfieldint('sortOrder'))-&amp;gt;last.customfieldint('sortOrder')"
            /&gt;     
            &lt;TextBlock Name="NoCommentPossibleTextBlock" Label="No comment possible" ShowLabel="False" Text="{Translate 'Creditor approved'}" 
            FlexWidth="45" HorizontalAlignment="Right"
            VisibleExpression="customfieldobj('creditorApprovalStatus').oclAsType(ConfigSetCustomClass30)
            .customfieldint('sortOrder') = ConfigSetCustomClass30.allinstances
            -&amp;gt;orderby(customfieldint('sortOrder'))-&amp;gt;last.customfieldint('sortOrder')"
            /&gt;
        &lt;/Group&gt;
        &lt;TextArea Name="CreditorApprovalLog" Label="{Translate 'Approval log'}" 
        ValueExpression="customfieldasstring('creditorApprovalLog')" Lines="10" 
        /&gt; 
    &lt;/Group&gt;
&lt;/Page&gt; </member>
      <member name="class">Creditor</member>
    </object>
    <object class="ExpressionFolder" alias="ExpressionFolder_Kreditorfreigabe46">
      <member name="entryID">ExpressionFolderCreditorApproval</member>
      <member name="designation">Creditor approval</member>
      <member name="persistentIcon">21</member>
      <member name="idx">20</member>
      <member name="tabsPerClass">false</member>
      <member name="isExpandable">true</member>
      <member name="openInNavigationView">CurrentView</member>
      <member name="parentfolder">
        <reference-object alias="SettingsFolder0" />
      </member>
      <member name="gridDefs">
        <object class="GridDef" alias="GridDef0">
          <member name="rowHeight">17</member>
          <member name="ghostrow">false</member>
          <member name="editing">true</member>
          <member name="gridcols">
            <object class="GridColDef" alias="GridColDef0">
              <member name="alignment">0</member>
              <member name="orderIdx">0</member>
              <member name="totals">false</member>
              <member name="expression">customfieldint('sortOrder')</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">1</member>
              <member name="title">
                <mltext language="NV">Order</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">80</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef0" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef1">
              <member name="alignment">0</member>
              <member name="orderIdx">1</member>
              <member name="rendererName">dbmMultilizer.rndTranslate</member>
              <member name="totals">false</member>
              <member name="expression">customfield('creditorApprovalStatusName')</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Description</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">98</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef0" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef2">
              <member name="alignment">0</member>
              <member name="orderIdx">4</member>
              <member name="totals">false</member>
              <member name="controlDefinition">&lt;OclTextBox ValueExpression="customfield('RecipientInOCL')" BaseType="Creditor"/&gt;</member>
              <member name="expression">customfield('RecipientInOCL')</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">User to be notified, defined in OCL</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">235</member>
              <member name="isFixed">false</member>
              <member name="remarks">Must be a OCL expression or empty, starting from creditor</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef0" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef3">
              <member name="alignment">0</member>
              <member name="orderIdx">5</member>
              <member name="totals">false</member>
              <member name="controlDefinition">&lt;UserComboBox ShowRemoveButton="True" ShowNavLinkButton="True" /&gt;</member>
              <member name="expression">customfieldobj('Recipient')</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">User to be notified</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">241</member>
              <member name="isFixed">false</member>
              <member name="remarks">cmbUser</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef0" />
              </member>
            </object>
          </member>
          <member name="folder">
            <reference-object alias="ExpressionFolder_Kreditorfreigabe46" />
          </member>
        </object>
      </member>
      <member name="creatorClasses">ConfigSetCustomClass30</member>
      <member name="expression">ConfigSetCustomClass30.allInstances</member>
    </object>
    <object class="SettingsFolder" alias="OrdnerEinstellungen_Projekte37">
      <member name="entryID">FolderProjects</member>
      <member name="designation">Projects</member>
      <member name="persistentIcon">5</member>
      <member name="idx">200</member>
      <member name="tabsPerClass">false</member>
      <member name="isExpandable">true</member>
      <member name="openInNavigationView">CurrentView</member>
      <member name="parentfolder">
        <reference-object alias="SettingsFolder1" />
      </member>
      <member name="canHaveSubFolders">true</member>
      <member name="inclusive">false</member>
      <member name="keyword">false</member>
      <member name="keywordActive">true</member>
      <member name="exclusive">false</member>
    </object>
    <object class="Folder" alias="Ordner_Creditorapproval34">
      <member name="entryID">FolderCreditorApproval</member>
      <member name="designation">Creditor approval</member>
      <member name="persistentIcon">46</member>
      <member name="idx">215</member>
      <member name="tabsPerClass">false</member>
      <member name="isExpandable">true</member>
      <member name="openInNavigationView">CurrentView</member>
      <member name="parentfolder">
        <reference-object alias="Folder_Procurement35" />
      </member>
      <member name="canHaveSubFolders">true</member>
      <member name="inclusive">false</member>
      <member name="keyword">false</member>
      <member name="keywordActive">true</member>
      <member name="exclusive">false</member>
    </object>
    <object class="Folder" alias="Folder_Procurement35">
      <member name="entryID">FolderPurchasing</member>
      <member name="userGroupsAsRootFolder">
        <reference-object alias="UserGroup_Folderaccessprocurement36" />
        <reference-object alias="SuperGroup0" />
      </member>
      <member name="designation">Purchasing</member>
      <member name="persistentIcon">48</member>
      <member name="idx">0</member>
      <member name="tabsPerClass">false</member>
      <member name="isExpandable">true</member>
      <member name="openInNavigationView">CurrentView</member>
      <member name="canHaveSubFolders">true</member>
      <member name="inclusive">false</member>
      <member name="keyword">false</member>
      <member name="keywordActive">true</member>
      <member name="exclusive">false</member>
    </object>
    <object class="ConfigSetCustomClass30" alias="PluginCustomClass30_Approved28">
      <member name="entryID">CreditorApprovalStatusApproved</member>
      <field name="sortOrder">30</field>
      <field name="creditorApprovalStatusName">Approved</field>
    </object>
    <object class="ConfigSetCustomClass30" alias="PluginCustomClass30_Tobeapproved27">
      <member name="entryID">CreditorApprovalStatusInProgress</member>
      <field name="sortOrder">10</field>
      <field name="creditorApprovalStatusName">In progress</field>
      <field name="recipientInOCL">outlays.getproject.projectmanager</field>
    </object>
    <object class="ConfigSetCustomClass30" alias="PluginCustomClass30_Inprogress26">
      <member name="entryID">CreditorApprovalStatusToBeApproved</member>
      <field name="sortOrder">20</field>
      <field name="creditorApprovalStatusName">To be approved</field>
      <field name="recipientInOCL">outlays.getproject.keyUser</field>
    </object>
    <object class="Script" alias="ScriptEintrag_Add_creditor_approval_comment33">
      <member name="entryID">ScriptEntryAddCreditorApprovalComment</member>
      <member name="designation">add_creditor_approval_comment</member>
      <member name="containerScript">false</member>
      <member name="scriptText"># coding: windows-1252
#
# Designation: add_creditor_approval_comment
# Classes: -
# CondExpression: -
# ObjectScript: -
# ContainerScript: N
# EventType: N
# EventClass: -
# EventMembers: -
# ExtendedRights: Y

# Adds a comment to the approval status of a creditor
# Systemcontext is needed as the comment-field is read onyl

# 2026-10-01, VGR: Script created


from datetime import datetime


def add_to_approvallog(creditor, logtext):
    """
    Add text with timestamp and current user to the log-field
    """
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    user = vtcapp.currentlogin().abbreviation

    if not logtext:
        # logtext is none, initialize
        logtext = ''

    if not creditor.creditorApprovalLog:
        # log is not yet initialized/set.
        with vtcapp.SystemContext():
            # systemcontext is needed here, as nobody should 
            # have write access to the member approvalLog
            creditor.creditorApprovalLog = ''

    # add approval log, catch case if it's the first entry (log = None)
    with vtcapp.SystemContext():
        # systemcontext is needed here, as nobody should 
        # have write access to the member creditorApprovalLog
        new_comment = f"{timestamp} ({user}) {logtext}\n"
        prev_log = creditor.creditorApprovalLog
        creditor.creditorApprovalLog = new_comment + prev_log
    return

    
if __name__ == "__main__":
    # stuff only to run when not called via 'import' here
    creditor = argobject
    # ask for comment to log
    comment = vtcapp.translate('Comment') 
    commenttext = vtcapp.inputbox(str(creditor.creditorApprovalStatus), comment)
    if commenttext:
        # comment entered, log it
        add_to_approvallog(creditor, f"{comment}: {commenttext}")

</member>
      <member name="eventType">None</member>
      <member name="objectScript">false</member>
      <member name="extendedRights">true</member>
      <member name="selectedObjectsScript">false</member>
      <member name="platform">Python3</member>
    </object>
    <object class="Script" alias="ScriptEintrag_Event:Creditorstatuschanged1">
      <member name="entryID">ScriptEntryEventCreditorStatusChanged</member>
      <member name="designation">event_creditor_status_changed</member>
      <member name="eventMembers">creditorApprovalStatus, posted</member>
      <member name="eventClass">Creditor</member>
      <member name="containerScript">false</member>
      <member name="scriptText"># coding: windows-1252
#
# Designation: event_creditor_status_changed
# Classes: Creditor
# CondExpression: -
# ObjectScript: -
# ContainerScript: N
# EventType: Changed
# EventClass: Creditor
# EventMembers: creditorApprovalStatus, posted
# ExtendedRights: Y

# Part of the config set "Creditor approval"
# Updated the approval log when creditor status is changed

# 2026-10-01, VGR: Script created

from vtcmodel import gettypeinfo
from add_creditor_approval_comment import add_to_approvallog

# Notification category that is used
NOTIFICATION_CATEGORY = "Creditor approval"

def do_approval_status_change(creditor):
    """
    This functions handles what has to be done when the
    approval status of an creditor has changed (notification,
    log, charge)
    """
    # log new status and current creditor amount    
    new_status = creditor.creditorApprovalStatus.creditorApprovalStatusName
    total_creditor_amount = f"{creditor.currency} {creditor.totalgross}"
    status_update = f"{vtcapp.translate(new_status)} | {vtcapp.translate('Total gross amount')} "
    add_to_approvallog(creditor, f"{status_update}{total_creditor_amount}")

    
    
    # As we do not know, which (OCL-) configurations the client uses,
    # we can not assume, that all corresponding user rights are set correctly
    # Therefore we need here "systemcontext".
    # delete all existing notifications if status changes
    for notification in list(creditor.linkedNotifications):
            # Systmcontext is needed here as we have to delete notifications.
            with vtcapp.SystemContext():
                notification.delete() 

    # send notification defined in OCL?
    if creditor.creditorApprovalStatus.RecipientInOCL:
        
        #initialize
        recipient_list = []
        
        # If there is an Exception during the OCL excecution, we do not catch the error, 
        # but an exception is raised.
        # With -&gt;asSet always have a list to continue     
        recipient_list = creditor.evalocl(f"{creditor.creditorApprovalStatus.RecipientInOCL}-&gt;asSet")
        
        # Check if in the recipient-list are only User
        # if the list is empty don't cause an exception
        if not all(recipient_list.evalocl("self-&gt;oclIsTypeOf(User)")):  
        
            # catch only the case in which the OCL 
            # is misconfigured and returns one or more non-users
            if recipient_list.evalocl("self-&gt;size() &gt; 0"):
                raise Exception(
                            f"One or more recipients were not of type User in status: "
                            f"'{vtcapp.translate(new_status)}'\n"
                            )
        else:
            for recipient in recipient_list:
                # Systmcontext is needed here as we have to create notifications.
                with vtcapp.SystemContext():
                    send_notification(recipient,
                                    creditor, 
                                    vtcapp.translate(new_status), creditor)
    
    
    # Check if a recipient is defined on the other member and send notification
    recipient = creditor.creditorApprovalStatus.Recipient
    if recipient:
        # Systmcontext is needed here as we have to create notifications.
        with vtcapp.SystemContext():
            send_notification(recipient, creditor, vtcapp.translate(new_status), creditor)
            
    return


def send_notification(user, title, text, object):
    """
    This function sends a notification to the user in a defined format.
    """
    user.setnotification(vtcapp.translate(NOTIFICATION_CATEGORY), 
                         f"{title} : {text}"
                         , object)
    # add notified entry to log
    add_to_approvallog(object, f"{user.abbreviation} {vtcapp.translate("notified")}")

    return


def main():
    """
    Event handler for the defined events on creditor
    """

    creditor = argobject
    class_type = gettypeinfo(creditor)

    # if the eventmember is a customfield it may not be evaluated with 
    # class_type.memberbyname(args.eventmember).defaultname
    if args.eventmember == "creditorApprovalStatus":
        # Approval status has changed
        do_approval_status_change(creditor)

    # The model language can be English or German (legacy), 
    # so we need to retrieve the default name of the eventmember first.
    elif class_type.memberbyname(args.eventmember).defaultname == 'posted':
        # Event on posted
        is_posted = creditor.posted
        if is_posted:
            total_creditor_amount = f"{creditor.currency} {creditor.totalgross}"
            status_update = f"{vtcapp.translate('Posted')} | {vtcapp.translate('Total gross amount')} "
            add_to_approvallog(creditor, f"{status_update}{total_creditor_amount}")
        else:  
            total_creditor_amount = f"{creditor.currency} {creditor.totalgross}"
            status_update = f"{vtcapp.translate('Cancel_t')} | {vtcapp.translate('Total gross amount')} "
            add_to_approvallog(creditor, f"{status_update}{total_creditor_amount}")
    
    return


main()
</member>
      <member name="eventType">Changed</member>
      <member name="objectScript">false</member>
      <member name="extendedRights">true</member>
      <member name="selectedObjectsScript">false</member>
      <member name="platform">Python3</member>
    </object>
    <object class="Script" alias="ScriptEintrag_Event:Newcreditor0">
      <member name="entryID">ScriptEntryEventNewCreditor</member>
      <member name="designation">event_new_creditor</member>
      <member name="eventClass">Creditor</member>
      <member name="containerScript">false</member>
      <member name="scriptText"># coding: windows-1252
#
# Designation: event_new_creditor
# Classes: Creditor
# CondExpression: -
# ObjectScript: -
# ContainerScript: N
# EventType: New
# EventClass: Creditor 
# EventMembers: -
# ExtendedRights: Y

# Part of the config set "Creditor aproval"
# Sets the default approval status without event

# 2026-10-01, VGR: Script created


# default aproval status
DEFAULT_STATUS = vtcapp.evalocl("ConfigSetCustomClass30.allinstances-&gt;orderby(customfieldint('sortOrder'))-&gt;first")

def set_default_aproval_status(creditor):
    """
    An event in an other script is triggered which 
    handels aproval status of new creditor
    """
    
    # when the creditor is created, 
    # do not trigger the creditor approval status event
    with vtcapp.DisabledEvents():
        creditor.creditorApprovalStatus = DEFAULT_STATUS
    return


def main():
    new_creditor =  argobject
    set_default_aproval_status(new_creditor)
    return


main()
</member>
      <member name="eventType">Create</member>
      <member name="objectScript">false</member>
      <member name="extendedRights">true</member>
      <member name="selectedObjectsScript">false</member>
      <member name="platform">Python3</member>
    </object>
    <object class="SqlFolder" alias="SqlFolder_Approved42">
      <member name="entryID">sqlFolderApprovedCreditors</member>
      <member name="designation">Approved</member>
      <member name="persistentIcon">50</member>
      <member name="idx">30</member>
      <member name="tabsPerClass">false</member>
      <member name="isExpandable">true</member>
      <member name="openInNavigationView">CurrentView</member>
      <member name="parentfolder">
        <reference-object alias="Ordner_Creditorapproval34" />
      </member>
      <member name="gridDefs">
        <object class="GridDef" alias="GridDef1">
          <member name="rowHeight">17</member>
          <member name="ghostrow">false</member>
          <member name="editing">false</member>
          <member name="gridcols">
            <object class="GridColDef" alias="GridColDef4">
              <member name="alignment">0</member>
              <member name="orderIdx">0</member>
              <member name="totals">false</member>
              <member name="expression">entryDate</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Date</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">80</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef1" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef5">
              <member name="alignment">0</member>
              <member name="orderIdx">1</member>
              <member name="totals">false</member>
              <member name="expression">supplier</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">1</member>
              <member name="title">
                <mltext language="NV">Supplier</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">140</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef1" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef6">
              <member name="alignment">0</member>
              <member name="orderIdx">2</member>
              <member name="totals">false</member>
              <member name="expression">consistencyMsg</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Problem report</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">140</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef1" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef7">
              <member name="alignment">2</member>
              <member name="orderIdx">3</member>
              <member name="rendererName">rndBoolean</member>
              <member name="totals">false</member>
              <member name="expression">posted</member>
              <member name="readOnly">true</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Booked</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">100</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef1" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef8">
              <member name="alignment">2</member>
              <member name="orderIdx">4</member>
              <member name="rendererName">rndBoolean</member>
              <member name="totals">false</member>
              <member name="expression">forwarded</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Forwarded</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">100</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef1" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef9">
              <member name="alignment">1</member>
              <member name="orderIdx">5</member>
              <member name="totals">false</member>
              <member name="expression">totalGross</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Total gross amount</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">110</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef1" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef10">
              <member name="alignment">0</member>
              <member name="orderIdx">6</member>
              <member name="totals">false</member>
              <member name="expression">currency.asString</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Currency</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">75</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef1" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef11">
              <member name="alignment">0</member>
              <member name="orderIdx">7</member>
              <member name="color">clGreen</member>
              <member name="totals">false</member>
              <member name="expression">''</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="tabstop">true</member>
              <member name="width">3</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef1" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef12">
              <member name="alignment">0</member>
              <member name="orderIdx">8</member>
              <member name="totals">false</member>
              <member name="expression">customfieldobj('creditorApprovalStatus').asString</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Approval status</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">110</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef1" />
              </member>
            </object>
          </member>
          <member name="folder">
            <reference-object alias="SqlFolder_Approved42" />
          </member>
        </object>
      </member>
      <member name="classname">Creditor</member>
      <member name="searchConfiguration">{"IsInstantSearch":false,"DisableShowInactive":false,"SearchDefinitions":[{"Name":"New query","Template":"entryDate &gt;= '\\1' AND entryDate &lt;= '\\2'\r\n\r\nAND posted = '\\3'\r\n\r\nAND bold_id in\r\n\r\n/* find creditor object in  */\r\n(SELECT entry FROM CustomFieldItem WHERE objectValue IN\r\n\r\n  /* find creditor approval status by sortOrderNumber  */\r\n  (SELECT entry FROM CustomFieldItem WHERE integerValue = 30\r\n\r\n  AND entry IN\r\n    --/* list of all approval status */\r\n    (SELECT bold_id FROM AbstractCustomClass WHERE entryId LIKE 'CreditorApprovalStatus%')\r\n   )\r\n)","SearchFields":[{"Name":"From date","Type":2,"Default":"date.incMonth(-1).firstofmonth"},{"Name":"To date","Type":2,"Default":"date.lastofmonth"},{"Name":"Booked","Type":3,"Default":"0"}]}]}</member>
      <member name="allowShowAll">false</member>
      <member name="showDialog">true</member>
    </object>
    <object class="SqlFolder" alias="SqlFolder_Inprogress43">
      <member name="entryID">sqlFolderInProgressCreditors</member>
      <member name="designation">In progress</member>
      <member name="persistentIcon">50</member>
      <member name="idx">10</member>
      <member name="tabsPerClass">false</member>
      <member name="isExpandable">true</member>
      <member name="openInNavigationView">CurrentView</member>
      <member name="parentfolder">
        <reference-object alias="Ordner_Creditorapproval34" />
      </member>
      <member name="gridDefs">
        <object class="GridDef" alias="GridDef2">
          <member name="rowHeight">17</member>
          <member name="ghostrow">false</member>
          <member name="editing">false</member>
          <member name="gridcols">
            <object class="GridColDef" alias="GridColDef13">
              <member name="alignment">0</member>
              <member name="orderIdx">0</member>
              <member name="totals">false</member>
              <member name="expression">entryDate</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Date</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">80</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef2" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef14">
              <member name="alignment">0</member>
              <member name="orderIdx">1</member>
              <member name="totals">false</member>
              <member name="expression">supplier</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">1</member>
              <member name="title">
                <mltext language="NV">Supplier</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">140</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef2" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef15">
              <member name="alignment">0</member>
              <member name="orderIdx">2</member>
              <member name="totals">false</member>
              <member name="expression">consistencyMsg</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Problem report</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">140</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef2" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef16">
              <member name="alignment">2</member>
              <member name="orderIdx">3</member>
              <member name="rendererName">rndBoolean</member>
              <member name="totals">false</member>
              <member name="expression">posted</member>
              <member name="readOnly">true</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Booked</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">100</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef2" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef17">
              <member name="alignment">2</member>
              <member name="orderIdx">4</member>
              <member name="rendererName">rndBoolean</member>
              <member name="totals">false</member>
              <member name="expression">forwarded</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Forwarded</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">100</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef2" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef18">
              <member name="alignment">1</member>
              <member name="orderIdx">5</member>
              <member name="totals">false</member>
              <member name="expression">totalGross</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Total gross amount</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">110</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef2" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef19">
              <member name="alignment">0</member>
              <member name="orderIdx">6</member>
              <member name="totals">false</member>
              <member name="expression">currency.asString</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Currency</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">75</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef2" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef20">
              <member name="alignment">0</member>
              <member name="orderIdx">7</member>
              <member name="color">clGreen</member>
              <member name="totals">false</member>
              <member name="expression">''</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="tabstop">true</member>
              <member name="width">3</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef2" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef21">
              <member name="alignment">0</member>
              <member name="orderIdx">8</member>
              <member name="totals">false</member>
              <member name="expression">customfieldobj('creditorApprovalStatus').asString</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Approval status</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">110</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef2" />
              </member>
            </object>
          </member>
          <member name="folder">
            <reference-object alias="SqlFolder_Inprogress43" />
          </member>
        </object>
      </member>
      <member name="classname">Creditor</member>
      <member name="searchConfiguration">{"IsInstantSearch":false,"DisableShowInactive":false,"SearchDefinitions":[{"Name":"New query","Template":"entryDate &gt;= '\\1' AND entryDate &lt;= '\\2' \r\n\r\nAND bold_id in\r\n\r\n/* find creditor object in  */\r\n(SELECT entry FROM CustomFieldItem WHERE objectValue IN\r\n\r\n  /* find creditor approval status by sortOrderNumber  */\r\n  (SELECT entry FROM CustomFieldItem WHERE integerValue = 10\r\n\r\n  AND entry IN\r\n    --/* list of all approval status */\r\n    (SELECT bold_id FROM AbstractCustomClass WHERE entryId LIKE 'CreditorApprovalStatus%')\r\n   )\r\n)","SearchFields":[{"Name":"From date","Type":2,"Default":"date.incMonth(-1).firstofmonth"},{"Name":"To date","Type":2,"Default":"date.lastofmonth"}]}]}</member>
      <member name="allowShowAll">false</member>
      <member name="showDialog">true</member>
    </object>
    <object class="SqlFolder" alias="SqlFolder_Tobeapproved44">
      <member name="entryID">sqlFolderToBeApprovedCreditors</member>
      <member name="designation">To be approved</member>
      <member name="persistentIcon">50</member>
      <member name="idx">20</member>
      <member name="tabsPerClass">false</member>
      <member name="isExpandable">true</member>
      <member name="openInNavigationView">CurrentView</member>
      <member name="parentfolder">
        <reference-object alias="Ordner_Creditorapproval34" />
      </member>
      <member name="gridDefs">
        <object class="GridDef" alias="GridDef3">
          <member name="rowHeight">17</member>
          <member name="ghostrow">false</member>
          <member name="editing">false</member>
          <member name="gridcols">
            <object class="GridColDef" alias="GridColDef22">
              <member name="alignment">0</member>
              <member name="orderIdx">0</member>
              <member name="totals">false</member>
              <member name="expression">entryDate</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Date</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">80</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef3" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef23">
              <member name="alignment">0</member>
              <member name="orderIdx">1</member>
              <member name="totals">false</member>
              <member name="expression">supplier</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">1</member>
              <member name="title">
                <mltext language="NV">Supplier</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">140</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef3" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef24">
              <member name="alignment">0</member>
              <member name="orderIdx">2</member>
              <member name="totals">false</member>
              <member name="expression">consistencyMsg</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Problem report</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">140</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef3" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef25">
              <member name="alignment">2</member>
              <member name="orderIdx">3</member>
              <member name="rendererName">rndBoolean</member>
              <member name="totals">false</member>
              <member name="expression">posted</member>
              <member name="readOnly">true</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Booked</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">100</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef3" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef26">
              <member name="alignment">2</member>
              <member name="orderIdx">4</member>
              <member name="rendererName">rndBoolean</member>
              <member name="totals">false</member>
              <member name="expression">forwarded</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Forwarded</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">100</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef3" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef27">
              <member name="alignment">1</member>
              <member name="orderIdx">5</member>
              <member name="totals">false</member>
              <member name="expression">totalGross</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Total gross amount</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">110</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef3" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef28">
              <member name="alignment">0</member>
              <member name="orderIdx">6</member>
              <member name="totals">false</member>
              <member name="expression">currency.asString</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Currency</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">75</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef3" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef29">
              <member name="alignment">0</member>
              <member name="orderIdx">7</member>
              <member name="color">clGreen</member>
              <member name="totals">false</member>
              <member name="expression">''</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="tabstop">true</member>
              <member name="width">3</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef3" />
              </member>
            </object>
            <object class="GridColDef" alias="GridColDef30">
              <member name="alignment">0</member>
              <member name="orderIdx">8</member>
              <member name="totals">false</member>
              <member name="expression">customfieldobj('creditorApprovalStatus').asString</member>
              <member name="readOnly">false</member>
              <member name="sortOrder">0</member>
              <member name="title">
                <mltext language="NV">Approval status</mltext>
              </member>
              <member name="tabstop">true</member>
              <member name="width">110</member>
              <member name="isFixed">false</member>
              <member name="isDynamic">false</member>
              <member name="enableSpellCheck">false</member>
              <member name="griddef">
                <reference-object alias="GridDef3" />
              </member>
            </object>
          </member>
          <member name="folder">
            <reference-object alias="SqlFolder_Tobeapproved44" />
          </member>
        </object>
      </member>
      <member name="classname">Creditor</member>
      <member name="searchConfiguration">{"IsInstantSearch":false,"DisableShowInactive":false,"SearchDefinitions":[{"Name":"New query","Template":"entryDate &gt;= '\\1' AND entryDate &lt;= '\\2' \r\n\r\nAND bold_id in\r\n\r\n/* find creditor object in  */\r\n(SELECT entry FROM CustomFieldItem WHERE objectValue IN\r\n\r\n  /* find creditor approval status by sortOrderNumber  */\r\n  (SELECT entry FROM CustomFieldItem WHERE integerValue = 20\r\n\r\n  AND entry IN\r\n    --/* list of all approval status */\r\n    (SELECT bold_id FROM AbstractCustomClass WHERE entryId LIKE 'CreditorApprovalStatus%')\r\n   )\r\n)","SearchFields":[{"Name":"From date","Type":2,"Default":"date.incMonth(-1).firstofmonth"},{"Name":"To date","Type":2,"Default":"date.lastofmonth"}]}]}</member>
      <member name="allowShowAll">false</member>
      <member name="showDialog">true</member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:Addcomment31">
      <member name="entryID">TranslationAddComment</member>
      <member name="text">
        <mltext language="DE">Kommentar hinzufügen</mltext>
        <mltext language="EN">Add comment</mltext>
        <mltext language="FR">Ajouter un commentaire</mltext>
        <mltext language="IT">Aggiungere un commento</mltext>
        <mltext language="DD">Kommentar hinzufügen</mltext>
        <mltext language="NL">Commentaar toevoegen</mltext>
        <mltext language="NV">Add comment</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:Approvallog24">
      <member name="entryID">TranslationApprovalLog</member>
      <member name="text">
        <mltext language="DE">Freigabeprotokoll</mltext>
        <mltext language="EN">Approval log</mltext>
        <mltext language="FR">Protocole de validation</mltext>
        <mltext language="IT">Registro di omologazione</mltext>
        <mltext language="DD">Freigabeprotokoll</mltext>
        <mltext language="NL">Goedkeuringslogboek</mltext>
        <mltext language="NV">Approval log</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:Approvalstatus23">
      <member name="entryID">TranslationApprovalStatus</member>
      <member name="text">
        <mltext language="DE">Freigabestatus</mltext>
        <mltext language="EN">Approval status</mltext>
        <mltext language="FR">Statut de validation</mltext>
        <mltext language="IT">Stato di approvazione</mltext>
        <mltext language="DD">Freigabestatus</mltext>
        <mltext language="NL">Goedkeuringsstatus</mltext>
        <mltext language="NV">Approval status</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:Approved22">
      <member name="entryID">TranslationApproved</member>
      <member name="text">
        <mltext language="DE">Freigegeben</mltext>
        <mltext language="EN">Approved</mltext>
        <mltext language="FR">Approuvé</mltext>
        <mltext language="IT">Approvato</mltext>
        <mltext language="DD">Freigegeben</mltext>
        <mltext language="NL">Goedgekeurd</mltext>
        <mltext language="NV">Approved</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:Creditorapproval29">
      <member name="entryID">TranslationCreditorApprovalProjects</member>
      <member name="text">
        <mltext language="DE">Kreditorfreigabe</mltext>
        <mltext language="EN">Creditor approval</mltext>
        <mltext language="FR">Approbation du créancier</mltext>
        <mltext language="IT">Approvazione del creditore</mltext>
        <mltext language="DD">Kreditorfreigabe</mltext>
        <mltext language="NL">Crediteur goedkeuring</mltext>
        <mltext language="NV">Creditor approval</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:CreditorApprovalStatus38">
      <member name="entryID">TranslationCreditorapprovalstatus</member>
      <member name="text">
        <mltext language="DE">Kreditorfreigabe-Status</mltext>
        <mltext language="EN">Creditor aproval status</mltext>
        <mltext language="FR">Statut d'approbation Créancier</mltext>
        <mltext language="IT">Stato approvazione creditore</mltext>
        <mltext language="DD">Kreditorfreigabe-Status</mltext>
        <mltext language="NL">Status van de crediteurgoedkeuring</mltext>
        <mltext language="NV">Creditor approval status</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:Creditorapproved32">
      <member name="entryID">TranslationCreditorApproved</member>
      <member name="text">
        <mltext language="DE">Kreditor freigegeben</mltext>
        <mltext language="EN">Creditor approved</mltext>
        <mltext language="FR">Créancier approuvée</mltext>
        <mltext language="IT">Creditore approvato</mltext>
        <mltext language="DD">Kreditor freigegeben</mltext>
        <mltext language="NL">Crediteur goedgekeurd</mltext>
        <mltext language="NV">Creditor approved</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:DefinedinOCL45">
      <member name="entryID">TranslationDefinedInOcl</member>
      <member name="text">
        <mltext language="DE">In OCL definiert</mltext>
        <mltext language="EN">Defined in OCL</mltext>
        <mltext language="FR">Défini en OCL</mltext>
        <mltext language="IT">Definito in OCL</mltext>
        <mltext language="DD">In OCL definiert</mltext>
        <mltext language="NL">Gedefinieerd in OCL</mltext>
        <mltext language="NV">Defined in OCL</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:Inprogress33">
      <member name="entryID">TranslationInProgress</member>
      <member name="text">
        <mltext language="DE">In Bearbeitung</mltext>
        <mltext language="EN">In progress</mltext>
        <mltext language="FR">En cours</mltext>
        <mltext language="IT">In corso</mltext>
        <mltext language="DD">In Bearbeitung</mltext>
        <mltext language="NL">In bewerking</mltext>
        <mltext language="NV">In progress</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:notified36">
      <member name="entryID">TranslationNotified</member>
      <member name="text">
        <mltext language="DE">benachrichtigt</mltext>
        <mltext language="EN">notified</mltext>
        <mltext language="FR">notifié</mltext>
        <mltext language="IT">notificato</mltext>
        <mltext language="DD">benachrichtigt</mltext>
        <mltext language="NL">genotificeerd</mltext>
        <mltext language="NV">notified</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:Posted44">
      <member name="entryID">TranslationPosted</member>
      <member name="text">
        <mltext language="DE">Gebucht</mltext>
        <mltext language="EN">Posted</mltext>
        <mltext language="FR">Comptabilisé</mltext>
        <mltext language="IT">Contabilizzato</mltext>
        <mltext language="DD">Gebucht</mltext>
        <mltext language="NL">Geboekt</mltext>
        <mltext language="NV">Posted</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:Tobeapproved21">
      <member name="entryID">TranslationToBeApproved</member>
      <member name="text">
        <mltext language="DE">Zur Freigabe</mltext>
        <mltext language="EN">To be approved</mltext>
        <mltext language="FR">À approuver</mltext>
        <mltext language="IT">Da approvare</mltext>
        <mltext language="DD">Zur Freigabe</mltext>
        <mltext language="NL">Ter goedkeuring</mltext>
        <mltext language="NV">To be approved</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Translation:Totalgrossamount46">
      <member name="entryID">TranslationTotalGrossAmount</member>
      <member name="text">
        <mltext language="DE">Total Betrag brutto</mltext>
        <mltext language="EN">Total gross amount</mltext>
        <mltext language="FR">Somme montant brut</mltext>
        <mltext language="IT">Totale importo lordo</mltext>
        <mltext language="DD">Total Betrag brutto</mltext>
        <mltext language="NL">Totaal brutobedrag</mltext>
        <mltext language="NV">Total gross amount</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:Tobenotified26">
      <member name="entryID">TranslationUserToBeNotified</member>
      <member name="text">
        <mltext language="DE">Zu benachrichtigender Bearbeiter</mltext>
        <mltext language="EN">User to be notified</mltext>
        <mltext language="FR">Utilisateur à notifier</mltext>
        <mltext language="IT">Utente da notificare</mltext>
        <mltext language="DD">Zu benachrichtigender Bearbeiter</mltext>
        <mltext language="NL">Te notificeren gebruiker</mltext>
        <mltext language="NV">User to be notified</mltext>
      </member>
    </object>
    <object class="TranslationItem" alias="TranslationItem_Übersetzung:Tobenotified(OCL)25">
      <member name="entryID">TranslationUserToBeNotifiedDefinedInOcl</member>
      <member name="text">
        <mltext language="DE">Zu benachrichtigender Bearbeiter, in OCL definiert</mltext>
        <mltext language="EN">User to be notified, defined in OCL</mltext>
        <mltext language="FR">Utilisateur à notifier, défini en OCL</mltext>
        <mltext language="IT">Utente da notificare, definito in OCL</mltext>
        <mltext language="DD">Zu benachrichtigender Bearbeiter, in OCL definiert</mltext>
        <mltext language="NL">Te notificeren gebruiker, gedefinieerd in OCL</mltext>
        <mltext language="NV">User to be notified, defined in OCL</mltext>
      </member>
    </object>
  </objects>
  <settings />
</configset>