<#--
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.
-->

<script language="JavaScript" type="text/javascript">
<!-- //
    function viewOrder(form) {
        if (form.taskStatus.value == "WF_NOT_STARTED") {
            if (form.delegate.checked) {
                form.action = "<@ofbizUrl>acceptassignment</@ofbizUrl>";
            } else {
                form.action = "<@ofbizUrl>orderview</@ofbizUrl>";
            }
        } else {
            if (form.delegate.checked) {
                form.action = "<@ofbizUrl>delegateassignment</@ofbizUrl>";
            } else {
                form.action = "<@ofbizUrl>orderview</@ofbizUrl>";
            }
        }
        form.submit();
    }
// -->
</script>

<#if security.hasEntityPermission("ORDERMGR", "_VIEW", session)>
<#assign tasksFound = false>
<div class="screenlet">
    <div class="screenlet-title-bar">
        <div class="h3">${uiLabelMap.OrderOrderNeedingAttention}</div>
    </div>
    <div class="screenlet-body">
        <table cellspacing="0" class="basic-table">
            <tr>
              <td width='100%'>
                <#if poList?has_content>
                  <#assign tasksFound = true>
                  <table cellspacing="0" class="basic-table">
                    <tr>
                      <td>
                        <h3>${uiLabelMap.OrderOrderPurchaseToBeScheduled}</h3>
                        <table cellspacing="0" class="basic-table hover-bar">
                          <tr class="header-row">
                            <td>${uiLabelMap.OrderOrderNumber}</td>
                            <td>${uiLabelMap.CommonName}</td>
                            <td>${uiLabelMap.OrderOrderDate}</td>
                            <td>${uiLabelMap.CommonStatus}</td>
                            <td width="1" align="right">${uiLabelMap.OrderOrderItems}</td>
                            <td width="1" align="right">${uiLabelMap.OrderItemTotal}</td>
                            <td width="1">&nbsp;&nbsp;</td>
                            <td width="1">&nbsp;&nbsp;</td>
                          </tr>
                          <#assign alt_row = false>
                          <#list poList as orderHeaderAndRole>
                            <#assign orh = Static["org.ofbiz.order.order.OrderReadHelper"].getHelper(orderHeaderAndRole)>
                            <#assign statusItem = orderHeaderAndRole.getRelatedOne("StatusItem", true)>
                            <#assign placingParty = orh.getPlacingParty()!>
                            <tr valign="middle"<#if alt_row> class="alternate-row"</#if>>
                              <td><a href="<@ofbizUrl>orderview?orderId=${orderHeaderAndRole.orderId}</@ofbizUrl>" class='buttontext'>${orderHeaderAndRole.orderId}</a></td>
                              <td>
                                <div>
                                  <#assign partyId = "_NA_">
                                  <#if placingParty?has_content>
                                    <#assign partyId = placingParty.partyId>
                                    <#if placingParty.getEntityName() == "Person">
                                      <#if placingParty.lastName??>
                                        ${placingParty.lastName}<#if placingParty.firstName??>, ${placingParty.firstName}</#if>
                                      <#else>
                                        ${uiLabelMap.CommonNA}
                                      </#if>
                                    <#else>
                                      <#if placingParty.groupName??>
                                        ${placingParty.groupName}
                                      <#else>
                                        ${uiLabelMap.CommonNA}
                                      </#if>
                                    </#if>
                                  <#else>
                                    ${uiLabelMap.CommonNA}
                                  </#if>
                                </div>
                              </td>
                              <td><span style="white-space: nowrap;">${orderHeaderAndRole.getString("orderDate")}</span></td>
                              <td>${statusItem.get("description",locale)?default(statusItem.statusId?default("N/A"))}</td>
                              <td align="right">${orh.getTotalOrderItemsQuantity()?string.number}</td>
                              <td align="right"><@ofbizCurrency amount=orh.getOrderGrandTotal() isoCode=orderHeaderAndRole.currencyUom!/></td>
                              <td width="1">&nbsp;&nbsp;</td>
                              <td align='right'>
                                <a href="<@ofbizUrl>OrderDeliveryScheduleInfo?orderId=${orderHeaderAndRole.orderId}</@ofbizUrl>" class='buttontext'>Schedule&nbsp;Delivery</a>
                              </td>
                            </tr>
                            <#-- toggle the row color -->
                            <#assign alt_row = !alt_row>
                          </#list>
                        </table>
                      </td>
                    </tr>
                  </table>
                </#if>

                <#if partyTasks?has_content>
                  <#assign tasksFound = true>
                  <table cellspacing="0" class="basic-table hover-bar">
                    <tr>
                      <td>
                        <h3>${uiLabelMap.OrderWorkflow}</h3>
                        <table cellspacing="0" class="basic-table">
                          <tr class="header-row">
                            <td><a href="<@ofbizUrl>tasklist?sort=orderId</@ofbizUrl>">${uiLabelMap.OrderOrderNumber}</a></td>
                            <td><a href="<@ofbizUrl>tasklist?sort=name</@ofbizUrl>">${uiLabelMap.CommonName}</a></td>
                            <td><a href="<@ofbizUrl>tasklist?sort=orderDate</@ofbizUrl>">${uiLabelMap.OrderOrderDate}</a></td>
                            <td width="1" align="right"><a href="<@ofbizUrl>tasklist?sort=grandTotal</@ofbizUrl>">Total</a></td>
                            <td width="1">&nbsp;&nbsp;</td>
                            <td><a href="<@ofbizUrl>tasklist?sort=actualStartDate</@ofbizUrl>">${uiLabelMap.OrderStartDateTime}</a></td>
                            <td><a href="<@ofbizUrl>tasklist?sort=priority</@ofbizUrl>">${uiLabelMap.CommonPriority}</a></td>
                            <td><a href="<@ofbizUrl>tasklist?sort=currentStatusId</@ofbizUrl>">${uiLabelMap.CommonMyStatus}</a></td>
                          </tr>
                          <#assign alt_row = false>
                          <#list partyTasks as task>
                            <tr valign="middle"<#if alt_row> class="alternate-row"</#if>>
                              <td>
                                <#assign orderStr = "orderId=" + task.orderId + "&amp;partyId=" + userLogin.partyId + "&amp;roleTypeId=" + task.roleTypeId + "&amp;workEffortId=" + task.workEffortId + "&amp;fromDate=" + task.get("fromDate").toString()>
                                <a href="<@ofbizUrl>orderview?${orderStr}</@ofbizUrl>" class="buttontext">
                                  ${task.orderId}
                                </a>
                              </td>
                              <td>
                                <div>
                                  <#if task.customerPartyId??>
                                    <a href="${customerDetailLink}${task.customerPartyId}${StringUtil.wrapString(externalKeyParam)}" target="partymgr" class="buttontext">${Static["org.ofbiz.order.task.TaskWorker"].getCustomerName(task)}</a>
                                  <#else>
                                    N/A
                                  </#if>
                                </div>
                              </td>
                              <td>
                                <div>
                                  ${task.get("orderDate").toString()}
                                </div>
                              </td>
                              <td width="1" align="right"><@ofbizCurrency amount=task.grandTotal isoCode=orderCurrencyMap.get(task.orderId)/></td>
                              <td width="1">&nbsp;&nbsp;</td>
                              <td>
                                <#if task.actualStartDate??>
                                  <#assign actualStartDate = task.get("actualStartDate").toString()>
                                <#else>
                                  <#assign actualStartDate = "N/A">
                                </#if>
                                <div>${actualStartDate}</div>
                              </td>
                              <td>${task.priority?default("0")}</td>
                              <td>
                                <a href="/workeffort/control/activity?workEffortId=${task.workEffortId}${StringUtil.wrapString(externalKeyParam)}" target="workeffort" class="buttontext">
                                  ${Static["org.ofbiz.order.task.TaskWorker"].getPrettyStatus(task)}
                                </a>
                              </td>
                            </tr>
                            <#-- toggle the row color -->
                            <#assign alt_row = !alt_row>
                          </#list>
                        </table>
                      </td>
                    </tr>
                  </table>
                </#if>

                <#if roleTasks?has_content>
                  <#assign tasksFound = true>
                  <table cellspacing="0" class="basic-table">
                    <tr>
                      <td>
                        <h3>${uiLabelMap.CommonWorkflowActivityUserRole}</h3>
                        <table cellspacing="0" class="basic-table hover-bar">
                          <tr class="header-row">
                            <td><a href="<@ofbizUrl>tasklist?sort=orderId</@ofbizUrl>">${uiLabelMap.OrderOrderNumber}</a></td>
                            <td><a href="<@ofbizUrl>tasklist?sort=name</@ofbizUrl>">${uiLabelMap.CommonName}</a></td>
                            <td><a href="<@ofbizUrl>tasklist?sort=orderDate</@ofbizUrl>">${uiLabelMap.OrderOrderDate}</a></td>
                            <td width="1" align="right"><a href="<@ofbizUrl>tasklist?sort=grandTotal</@ofbizUrl>">${uiLabelMap.CommonTotal}</a></td>
                            <td width="1">&nbsp;&nbsp;</td>
                            <td><a href="<@ofbizUrl>tasklist?sort=actualStartDate</@ofbizUrl>">${uiLabelMap.CommonStartDateTime}</a></td>
                            <td><a href="<@ofbizUrl>tasklist?sort=wepaPartyId</@ofbizUrl>">${uiLabelMap.PartyParty}</a></td>
                            <td><a href="<@ofbizUrl>tasklist?sort=roleTypeId</@ofbizUrl>">${uiLabelMap.PartyRole}</a></td>
                            <td><a href="<@ofbizUrl>tasklist?sort=priority</@ofbizUrl>">${uiLabelMap.CommonPriority}</a></td>
                            <td><a href="<@ofbizUrl>tasklist?sort=currentStatusId</@ofbizUrl>">${uiLabelMap.CommonStatus}</a></td>
                            <td>&nbsp;</td>
                          </tr>
                          <#assign alt_row = false>
                          <#list roleTasks as task>
                            <form method="get" name="F${task.workEffortId}">
                              <input type="hidden" name="orderId" value="${task.orderId}" />
                              <input type="hidden" name="workEffortId" value="${task.workEffortId}" />
                              <input type="hidden" name="taskStatus" value="${task.currentStatusId}" />
                              <#if task.statusId?? && task.statusId == "CAL_SENT">
                                <input type="hidden" name="partyId" value="${userLogin.partyId}" />
                                <input type="hidden" name="roleTypeId" value="${task.roleTypeId}" />
                                <input type="hidden" name="fromDate" value="${task.get("fromDate").toString()}" />
                              <#else>
                                <input type="hidden" name="partyId" value="${userLogin.partyId}" />
                                <input type="hidden" name="roleTypeId" value="${task.roleTypeId}" />
                                <input type="hidden" name="fromDate" value="${task.get("fromDate").toString()}" />
                                <input type="hidden" name="fromPartyId" value="${task.wepaPartyId}" />
                                <input type="hidden" name="fromRoleTypeId" value="${task.roleTypeId}" />
                                <input type="hidden" name="fromFromDate" value="${task.get("fromDate").toString()}" />
                                <input type="hidden" name="toPartyId" value="${userLogin.partyId}" />
                                <input type="hidden" name="toRoleTypeId" value="${task.roleTypeId}" />
                                <input type="hidden" name="toFromDate" value="${now}" />
                                <input type="hidden" name="startActivity" value="true" />
                              </#if>
                              <tr valign="middle"<#if alt_row> class="alternate-row"</#if>>
                                <td>
                                  <a href="javascript:viewOrder(document.F${task.workEffortId});" class="buttontext">
                                    ${task.orderId}
                                  </a>
                                </td>
                                <td>
                                  <#if task.customerPartyId??>
                                  <a href="${customerDetailLink}${task.customerPartyId}${StringUtil.wrapString(externalKeyParam)}" target="partymgr" class="buttontext">${Static["org.ofbiz.order.task.TaskWorker"].getCustomerName(task)}</a>
                                  <#else>
                                  &nbsp;
                                  </#if>
                                </td>
                                <td>
                                  <div>
                                    ${task.get("orderDate").toString()}
                                  </div>
                                </td>
                                <td width="1" align="right"><@ofbizCurrency amount=task.grandTotal isoCode=orderCurrencyMap.get(task.orderId)/></td>
                                <td width="1">&nbsp;&nbsp;</td>
                                <td>
                                  <#if task.actualStartDate??>
                                    <#assign actualStartDate = task.get("actualStartDate").toString()>
                                  <#else>
                                    <#assign actualStartDate = "N/A">
                                  </#if>
                                  <div>${actualStartDate}</div>
                                </td>
                                <td>
                                  <#if task.wepaPartyId == "_NA_">
                                    <div>N/A</div>
                                  <#else>
                                    <a href="${customerDetailLink}${task.wepaPartyId}${StringUtil.wrapString(externalKeyParam)}" target="partymgr" class="buttontext">${task.wepaPartyId}</a>
                                  </#if>
                                </td>
                                <td>${Static["org.ofbiz.order.task.TaskWorker"].getRoleDescription(task)}</td>
                                <td>${task.priority?default("0")}</td>
                                <td>
                                  <a href="/workeffort/control/activity?workEffortId=${task.workEffortId}" target="workeffort" class="buttontext">
                                    ${Static["org.ofbiz.order.task.TaskWorker"].getPrettyStatus(task)}
                                  </a>
                                </td>
                                <#if task.statusId?? && task.statusId == "CAL_SENT">
                                  <td align="right"><input type="checkbox" name="delegate" value="true" checked="checked" /></td>
                                <#else>
                                  <td align="right"><input type="checkbox" name="delegate" value="true" /></td>
                                </#if>
                              </tr>
                            </form>
                            <#-- toggle the row color -->
                            <#assign alt_row = !alt_row>
                          </#list>
                        </table>
                      </td>
                    </tr>
                  </table>
                </#if>
                <#if !tasksFound>
                  <div>${uiLabelMap.CommonNoTaskAssigned}</div>
                </#if>
              </td>
            </tr>
        </table>
    </div>
</div>
<#else>
  <h3>You do not have permission to view this page. ("ORDERMGR_VIEW" or "ORDERMGR_ADMIN" needed)</h3>
</#if>