Author: apatel
Date: Sun Nov  1 07:22:50 2009
New Revision: 831648

URL: http://svn.apache.org/viewvc?rev=831648&view=rev
Log:
Added bulk action for updating invoice status. Also cleaned up javascript code 
to take advantage of prototype library. Still remains to move javascript in 
separate file and also css trick to show button disabled when it is. 

Modified:
    
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml
    ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
    ofbiz/trunk/applications/accounting/webapp/ap/WEB-INF/controller.xml
    ofbiz/trunk/applications/accounting/webapp/ap/invoices/PurchaseInvoices.ftl

Modified: 
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml?rev=831648&r1=831647&r2=831648&view=diff
==============================================================================
--- 
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml
 (original)
+++ 
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml
 Sun Nov  1 07:22:50 2009
@@ -674,4 +674,13 @@
             <log level="info" message="Removed invoiceItemAssoc: 
${invoiceItemAssoc}"/>
         </iterate>
     </simple-method>
+
+    <simple-method method-name="massChangeInvoiceStatus" 
short-description="Service set status of Invoices in bulk.">
+        <iterate list="parameters.invoiceIds" entry="invoiceId">
+            <set field="setInvoiceStatusMap.invoiceId" from-field="invoiceId"/>
+            <set field="setInvoiceStatusMap.statusId" 
from-field="parameters.statusId"/>
+            <call-service service-name="setInvoiceStatus" 
in-map-name="setInvoiceStatusMap"/>
+            <clear-field field="setInvoiceStatusMap"/>
+        </iterate>
+    </simple-method>
 </simple-methods>

Modified: ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml?rev=831648&r1=831647&r2=831648&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml 
(original)
+++ ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml Sun Nov 
 1 07:22:50 2009
@@ -342,4 +342,13 @@
         <description>Remove invoiceItemAssoc record on cancel 
invoice</description>
         <attribute name="invoiceId" type="String" mode="IN" optional="false"/>
     </service>
+
+    <service name="massChangeInvoiceStatus" engine="simple"
+            
location="component://accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml"
 invoke="massChangeInvoiceStatus" auth="true">
+        <description>Set status of invoices in bulk.</description>
+        <attribute name="invoiceIds" type="List" mode="IN" optional="false"/>
+        <attribute name="statusId" type="String" mode="IN" optional="false"/>
+        <attribute name="errorMessage" type="String" optional="true" 
mode="OUT"/>
+    </service>
+    
 </services>

Modified: ofbiz/trunk/applications/accounting/webapp/ap/WEB-INF/controller.xml
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/ap/WEB-INF/controller.xml?rev=831648&r1=831647&r2=831648&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/webapp/ap/WEB-INF/controller.xml 
(original)
+++ ofbiz/trunk/applications/accounting/webapp/ap/WEB-INF/controller.xml Sun 
Nov  1 07:22:50 2009
@@ -99,6 +99,11 @@
         <security https="true" auth="true"/>
         <response name="success" type="view" value="FindApPaymentGroups"/>
     </request-map>
+    <request-map uri="massChangeInvoiceStatus">
+        <security https="true" auth="true"/>
+        <event type="service" invoke="massChangeInvoiceStatus"/>
+        <response name="success" type="view" value="FindPurchaseInvoices"/>
+    </request-map>
 
     <!-- ================ Vendor requests ================ -->
     <request-map uri="findVendors">

Modified: 
ofbiz/trunk/applications/accounting/webapp/ap/invoices/PurchaseInvoices.ftl
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/webapp/ap/invoices/PurchaseInvoices.ftl?rev=831648&r1=831647&r2=831648&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/webapp/ap/invoices/PurchaseInvoices.ftl 
(original)
+++ ofbiz/trunk/applications/accounting/webapp/ap/invoices/PurchaseInvoices.ftl 
Sun Nov  1 07:22:50 2009
@@ -19,46 +19,34 @@
 <script language="JavaScript" type="text/javascript">
 <!--
 function toggleInvoiceId(master) {
-    var form = document.listPurchaseInvoices;
-    var invoices = form.elements.length;
-    for (var i = 0; i < invoices; i++) {
-        var element = form.elements[i];
-        if (element.name == "invoiceIds") {
-            element.checked = master.checked;
-        }
-    }
+    var invoices = 
$('listPurchaseInvoices').getInputs('checkbox','invoiceIds');
+    invoices.each(function(invoice){
+        invoice.checked = master.checked;
+    });
     getInvoiceRunningTotal();
 }
 
 function getInvoiceRunningTotal() {
-    var form = document.listPurchaseInvoices;
-    var invoices = form.elements.length;
-    var isSingle = true;
-    var isAllSelected = true;
-    for (var i = 0; i < invoices; i++) {
-        var element = form.elements[i];
-        if (element.name == "invoiceIds") {
-            if (element.checked) {
-                isSingle = false;
-            } else {
-                isAllSelected = false;
-            }
-        }
-    }
-    if (isAllSelected) {
+    var invoices = 
$('listPurchaseInvoices').getInputs('checkbox','invoiceIds');
+    if(invoices.pluck('checked').all()) {
         $('checkAllInvoices').checked = true;
     } else {
         $('checkAllInvoices').checked = false;
     }
-    if (!isSingle) {
+    if(invoices.pluck('checked').any()) {
         new Ajax.Request('getInvoiceRunningTotal', {
             asynchronous: false,
             onSuccess: function(transport) {
                 var data = transport.responseText.evalJSON(true);
                 $('showInvoiceRunningTotal').update(data.invoiceRunningTotal);
-            }, parameters: $('listPurchaseInvoices').serialize(), 
requestHeaders: {Accept: 'application/json'}
+            }, 
+            parameters: $('listPurchaseInvoices').serialize(), 
+            requestHeaders: {Accept: 'application/json'}
         });
-        $('submitButton').disabled = false;
+        if($F('serviceName') != "") {
+            $('submitButton').disabled = false;
+        }
+        
     } else {
         $('submitButton').disabled = true;
         $('showInvoiceRunningTotal').update("");
@@ -66,31 +54,40 @@
 }
 
 function setServiceName(selection) {
-    document.listPurchaseInvoices.action = 
'<@ofbizUrl>'+selection.value+'</@ofbizUrl>';
-    showIssueChecks(selection);
-    $('submitButton').disabled = true;
-    getInvoiceRunningTotal();
+    if ( selection.value == 'massInvoicesToApprove' || selection.value == 
'massInvoicesToReceive' || selection.value == 'massInvoicesToReady' || 
selection.value == 'massInvoicesToPaid' || selection.value == 
'massInvoicesToWriteoff' || selection.value == 'massInvoicesToCancel') {
+        document.listPurchaseInvoices.action = $('invoiceStatusChange').value;
+    }
+    else {
+        document.listPurchaseInvoices.action = selection.value;
+    }
+    if (selection.value == 'massInvoicesToApprove') {
+        $('statusId').value = "INVOICE_APPROVED";
+    } else if (selection.value == 'massInvoicesToReceive') {
+        $('statusId').value = "INVOICE_RECEIVED";
+    }else if (selection.value == 'massInvoicesToReady') {
+        $('statusId').value = "INVOICE_READY";
+    }else if (selection.value == 'massInvoicesToPaid') {
+        $('statusId').value = "INVOICE_PAID";
+    }else if (selection.value == 'massInvoicesToWriteoff') {
+        $('statusId').value = "INVOICE_WRITEOFF";
+    }else if (selection.value == 'massInvoicesToCancel') {
+        $('statusId').value = "INVOICE_CANCELLED";
+    }
+    if ($('processMassCheckRun').selected) {
+        Effect.BlindDown('issueChecks');
+    } else {
+        Effect.BlindUp('issueChecks');
+    }
+    
if($('listPurchaseInvoices').getInputs('checkbox','invoiceIds').pluck('checked').any()
 && ($F('serviceName') != "")) {
+            $('submitButton').disabled = false;
+    }
+
 }
 
 function runAction() {
-    var form = document.listPurchaseInvoices;
-    var invoices = form.elements.length;
-    for (var i = 0; i < invoices; i++) {
-        var element = form.elements[i];
-        if (element.name == "invoiceIds") {
-            element.disabled = false;
-        }
-    }
-    form.submit();
+    $('listPurchaseInvoices').submit();
 }
 
-function showIssueChecks(selection) {
-    if (selection.value == 'processMassCheckRun') {
-        Effect.BlindDown('issueChecks',{duration: 0.0});
-    } else {
-        Effect.BlindUp('issueChecks',{duration: 0.0});
-    }
-}
 -->
 </script>
 
@@ -103,14 +100,21 @@
     <div align="right">
       <!-- May add some more options in future like cancel selected invoices-->
       <select name="serviceName" id="serviceName" 
onchange="javascript:setServiceName(this);">
-        <option value="">${uiLabelMap.AccountingSelectAction}</options>
-        <option 
value="processMassCheckRun">${uiLabelMap.AccountingIssueCheck}</option>
+        <option value="">${uiLabelMap.AccountingSelectAction}</option>
+        <option value="<@ofbizUrl>processMassCheckRun</@ofbizUrl>" 
id="processMassCheckRun">${uiLabelMap.AccountingIssueCheck}</option>
+        <option 
value="massInvoicesToApprove">${uiLabelMap.AccountingInvoiceStatusToApproved}</option>
+        <option 
value="massInvoicesToReceive">${uiLabelMap.AccountingInvoiceStatusToReceived}</option>
+        <option 
value="massInvoicesToReady">${uiLabelMap.AccountingInvoiceStatusToReady}</option>
+        <option 
value="massInvoicesToPaid">${uiLabelMap.AccountingInvoiceStatusToPaid}</option>
+        <option 
value="massInvoicesToWriteoff">${uiLabelMap.AccountingInvoiceStatusToWriteoff}</option>
+        <option 
value="massInvoicesToCancel">${uiLabelMap.AccountingInvoiceStatusToCancelled}</option>
       </select>
       <input id="submitButton" type="button" onclick="javascript:runAction();" 
value="${uiLabelMap.OrderRunAction}" disabled/>
     </div>
+    <input type="hidden" name="invoiceStatusChange" id="invoiceStatusChange" 
value="<@ofbizUrl>massChangeInvoiceStatus</@ofbizUrl>"/>
     <input type="hidden" name="organizationPartyId" 
value="${organizationPartyId}"/>
     <input type="hidden" name="partyIdFrom" 
value="${parameters.partyIdFrom?if_exists}"/>
-    <input type="hidden" name="statusId" 
value="${parameters.statusId?if_exists}"/>
+    <input type="hidden" name="statusId" id="statusId" 
value="${parameters.statusId?if_exists}"/>
     <input type="hidden" name="fromInvoiceDate" 
value="${parameters.fromInvoiceDate?if_exists}"/>
     <input type="hidden" name="thruInvoiceDate" 
value="${parameters.thruInvoiceDate?if_exists}"/>
     <input type="hidden" name="fromDueDate" 
value="${parameters.fromDueDate?if_exists}"/>
@@ -165,5 +169,5 @@
     </table>
   </form>
 <#else>
-  <td colspan='4'><h3>${uiLabelMap.AccountingNoInvoicesFound}</h3></td>
+  <h3>${uiLabelMap.AccountingNoInvoicesFound}</h3>
 </#if>


Reply via email to