<?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.
-->
<forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/widget-form.xsd">
    <form name="listResourcesTasks" extends="MyTasks" extends-resource="component://scrum/widget/TaskForms.xml" paginate-target="listResourcesTask"
        odd-row-style="alternate-row" header-row-style="header-row-2" default-table-style="basic-table hover-bar">
        <field name="UpdateButton"><ignored/> </field>
        <field name="RemoveButton"><ignored/> </field>
        <field name="taskName"><display description="${taskName} - [${taskId}] "/> </field>
        <field name="planHours"><display description="${taskInfo.planHours}"/> </field>
    </form>
    <form name="AddResourceTaskParty" extends="assignTaskToMe" extends-resource="component://scrum/widget/TaskForms.xml" type="single" target="addTaskPartyAssign"
        header-row-style="header-row" default-table-style="basic-table">
        <field name="partyId"><hidden value="${parameters.partyId}"/></field>
    </form>
    <form name="AddResourceProjectParty" target="addWorkEffortPartyAssign" title="" type="single"
        header-row-style="header-row" default-table-style="basic-table">
        <field name="projectId"><hidden/></field>
        <field name="statusId"><hidden value="PRTYASGN_ASSIGNED"/></field>
        <field name="workEffortId"><hidden value="${workEffortId}"/></field>
        <field name="partyId"><hidden/></field>
        <field use-when="workEffortId==projectId" name="workEffortId" entry-name="test" title="${uiLabelMap.ScrumProjectName}"><!-- project level -->
            <drop-down allow-empty="false">
                <entity-options entity-name="WorkEffort" description="${workEffortName}" key-field-name="workEffortId">
                    <entity-constraint name="workEffortTypeId" value="SCRUM_PROJECT"/>
                    <entity-constraint name="currentStatusId" operator="equals" value="SPJ_ACTIVE"/>
                    <entity-order-by field-name="workEffortName"/>
                </entity-options>
            </drop-down>
        </field>
        <field use-when="project==null" name="currentStatusId"><hidden value="_NA_"/></field>
        <field entry-name="test" name="roleTypeId" title="${uiLabelMap.PartyRoleType}">
            <drop-down>
                <entity-options entity-name="RoleType" description="${description}">
                    <entity-constraint name="parentTypeId" value="SCRUM_MEMBER"/>
                    <entity-order-by field-name="description"/>
                </entity-options>
            </drop-down>
        </field>
        <field entry-name="test" name="fromDate"><date-time type="date"/></field>
        <field entry-name="test" name="thruDate"><date-time type="date"/></field>
        <field name="submitButton" title="${uiLabelMap.CommonAdd}" widget-style="smallSubmit"><submit button-type="button"/></field>
    </form>
    <form name="listResourcesProjects" type="list" list-name="parties" target="deleteProjectPartyAssign"
        odd-row-style="alternate-row" header-row-style="header-row-2" default-table-style="basic-table hover-bar" use-row-submit="true">
        <row-actions>
            <entity-one entity-name="WorkEffort" value-field="project">
                <field-map field-name="workEffortId" from-field="workEffortId"/>
            </entity-one>
            <set field="currentStatusId" from-field="project.currentStatusId"/>
            <set field="priority" from-field="project.priority"/>
            <set field="plannedHours" value="${groovy: if (project.estimatedMilliSeconds != null) return project.estimatedMilliSeconds/3600000}"/>
            <set field="actualHours" value="${groovy: if (project.actualMilliSeconds != null) return project.actualMilliSeconds/3600000}"/>
            <set field="createdStamp" from-field="project.createdStamp" type="Timestamp"/>
            <set field="estimatedStartDate" from-field="project.estimatedStartDate" type="Timestamp"/>
            <set field="estimatedCompletionDate" from-field="rproject.estimatedCompletionDate" type="Timestamp"/>
            <set field="actualStartDate" from-field="project.actualStartDate" type="Timestamp"/>
            <set field="actualCompletionDate" from-field="project.actualCompletionDate" type="Timestamp"/>
        </row-actions>
        <field name="workEffortId" parameter-name="projectId"><hidden/></field>
        <field name="partyId"><hidden value="${parameters.partyId}"/></field>
        <field name="fromDate"><hidden/></field>
        <field entry-name="workEffortName" name="projectName" parameter-name="workEffortName" title="${uiLabelMap.CommonName}" widget-style="buttontext">
            <hyperlink target="viewScrumProject" description="${workEffortName}[${workEffortId}]">
                <parameter param-name="projectId" from-field="workEffortId"/>
            </hyperlink>
        </field>
        <field name="roleTypeId">
            <display-entity entity-name="RoleType" key-field-name="roleTypeId" description="${description}"/>
        </field>
        <field name="currentStatusId" title="${uiLabelMap.CommonStatus}">
            <display-entity entity-name="StatusItem" key-field-name="statusId" description="${description}"/>
        </field>
        <field name="priority" widget-area-style="centered"><display description="${Priority}"/></field>
        <field name="estimatedStartDate" widget-area-style="centered"><display type="date"/></field>
        <field name="estimatedCompletionDate" widget-area-style="centered"><display  type="date"/></field>
        <field name="actualStartDate" ><display type="date"/></field>
        <field name="actualCompletionDate"><display type="date"/></field>
        <field name="plannedHours" widget-area-style="centered"><display/></field>
        <field name="actualHours" widget-area-style="centered"><display/></field>
        <field name="createdStamp" ><display type="date"/></field>
        <field name="removeButton" title="${uiLabelMap.CommonRemove}"><submit/></field>
    </form>
 </forms>