<?xml version="1.0" encoding="UTF-8" ?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://ofbiz.apache.org/Simple-Method" xsi:schemaLocation="http://ofbiz.apache.org/Simple-Method http://ofbiz.apache.org/dtds/simple-methods.xsd">

    <simple-method method-name="migrateSalaryStep" short-description="Migrate data from OldSalaryStep to SalaryStep">
        <entity-condition entity-name="OldSalaryStep" list="oldSalarySteps"/>
        <now field="fromDate"/>
        <entity-one entity-name="UserLogin" value-field="systemUserLogin">
            <field-map field-name="userLoginId" value="system"/>
        </entity-one>
        <iterate list="oldSalarySteps" entry="oldSalaryStep">
            <make-value entity-name="SalaryStep" value-field="SalaryStep"/>
            <set field="SalaryStep.salaryStepSeqId" from-field="oldSalaryStep.salaryStepSeqId"/>
            <set field="SalaryStep.payGradeId" from-field="oldSalaryStep.payGradeId"/>
            <set field="SalaryStep.dateModified" from-field="oldSalaryStep.dateModified"/>
            <set field="SalaryStep.amount" from-field="oldSalaryStep.amount"/>
            <set field="SalaryStep.createdByUserLogin" from-field="systemUserLogin.userLoginId"/>
            <set field="SalaryStep.lastModifiedByUserLogin" from-field="systemUserLogin.userLoginId"/>
            <set field="SalaryStep.fromDate" from-field="fromDate"/>
            <create-value value-field="SalaryStep"/>
        </iterate>
    </simple-method>
    
</simple-methods>
