tag:blogger.com,1999:blog-80667825768638896522024-02-19T17:23:16.810-08:00crawl apex and visualforceelpaso750http://www.blogger.com/profile/12877895860975876954noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-8066782576863889652.post-46875600383452916972012-09-05T00:31:00.001-07:002013-01-17T01:23:16.066-08:00Salesforce Opportunity Product extension<span style="font-family: Verdana, sans-serif; font-size: x-small;">Hi,</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"> I'm adding this post, to share some of the development we done to fit the Salesforce Opportunity Product into our needs.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">First of all please allow me to thank </span><span style="font-family: Verdana, sans-serif;"><span style="background-color: white; color: #222222; font-size: 13px; font-weight: bold; white-space: nowrap;">michaelforce (</span><span style="font-size: x-small;"><span style="white-space: nowrap;"><span style="color: blue;">h</span></span></span><span style="color: blue; font-size: x-small;"><span style="white-space: nowrap;">ttp://www.michaelforce.org/</span></span><span style="color: #222222; font-size: x-small; font-weight: bold; white-space: nowrap;">)</span><span style="color: #222222; font-size: x-small; white-space: nowrap;"> for his great help, most of the code </span></span><br />
<span style="font-family: Verdana, sans-serif;"><span style="color: #222222; font-size: x-small; white-space: nowrap;">comes from him.</span></span><br />
<span style="font-family: Verdana, sans-serif;"><span style="color: #222222; font-size: x-small; white-space: nowrap;">I've just customized it, added a second search/filter method, a 'Select All'</span></span><br />
<span style="color: #222222; font-family: arial, sans-serif; font-size: x-small; white-space: nowrap;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">We do not actually 'sell' products, but provide 'services' as a configuration, therefore we do not really use prices / quantities / amounts, but these can be added, and need to :</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">1. Keep track of the configurations</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">2. Send out configuration orders to other departments</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">We had the need to create at least one Visual force page (actually we created more, since we use a number of Opportunity record types)</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">The page includes a javascript to help with the search.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">and actually is made of two parts :</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">- upper, we named it 'shopping cart'</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">- lower, the 'product basket'</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">in the middle we have the search bar, which allows two different type of search, and eventually allows to add in one go all the searched results.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixGAPyO6hkwSILtCATpi9ZD7O0a3XFQVJCICKGRzqYNyXqp1u1gPSVdmg1M_gZi2QwHuisuj6RASdFrIGGiYmlF0Eo-9M3JtArb0krCNzEzkJ97PVxGKQe49_GrlNj_xrz4Hb-van8HcPx/s1600/Opportunity+products.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="412" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixGAPyO6hkwSILtCATpi9ZD7O0a3XFQVJCICKGRzqYNyXqp1u1gPSVdmg1M_gZi2QwHuisuj6RASdFrIGGiYmlF0Eo-9M3JtArb0krCNzEzkJ97PVxGKQe49_GrlNj_xrz4Hb-van8HcPx/s640/Opportunity+products.JPG" width="640" /></a></div>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">here's the code for the page :</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><apex:page standardController="Opportunity" extensions="opportunityProductEntryExtension" sidebar="false" action="{!priceBookCheck}" ></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:sectionHeader Title="Manage {!$ObjectType.Product2.LabelPlural}" subtitle="{!opportunity.Name}"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:messages style="color:red"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><apex:outputText value="{!opportunity.RecordType.Name}"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <style> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> .search{</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> font-size:14pt;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> margin-right: 20px; </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> .fyi{</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> color:red;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> font-style:italic;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> .label{ </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> margin-right:10px;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> font-weight:bold;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </style></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <script type='text/javascript'></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // This script assists the search bar functionality</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // It will execute a search only after the user has stopped typing for more than 1 second</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // To raise the time between when the user stops typing and the search, edit the following variable:</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> var waitTime = 1;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> var countDown = waitTime+1;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> var started = false;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> function resetTimer(){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> countDown=waitTime+1;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(started==false){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> started=true;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> runCountDown();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> function runCountDown(){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> countDown--;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(countDown<=0){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> fetchResults();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> started=false;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> else{</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> window.setTimeout(runCountDown,1000);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </script></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:form ></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:outputPanel id="mainBody"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:outputLabel styleClass="label">PriceBook: </apex:outputLabel></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:outputText value="{!theBook.Name}"/>&nbsp;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- apex:commandLink action="{!changePricebook}" value="change" immediate="true"/--></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <br/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- not everyone is using multi-currency, so this section may or may not show --></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:outputPanel rendered="{!multipleCurrencies}"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:outputLabel styleClass="label">Currency: </apex:outputLabel></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:outputText value="{!chosenCurrency}"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <br/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:outputPanel></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <br/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><!-- this is the upper table... a.k.a. the "Shopping Cart"--></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- notice we use a lot of $ObjectType merge fields... I did that because if you have changed the labels of fields or objects it will reflect your own lingo --></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:pageBlock title="Selected {!$ObjectType.Product2.LabelPlural}" id="selected"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:pageblockTable value="{!shoppingCart}" var="s"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:column ></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:commandLink value="Remove" action="{!removeFromShoppingCart}" reRender="selected,searchResults" immediate="true"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- this param is how we send an argument to the controller, so it knows which row we clicked 'remove' on --></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:param value="{!s.PriceBookEntryId}" assignTo="{!toUnselect}" name="toUnselect"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:commandLink></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:column></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- apex:column width="25px"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:inputcheckbox value="{!checked}"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:column--></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:column headerValue="{!$ObjectType.Product2.LabelPlural}" value="{!s.PriceBookEntry.Product2.Name}"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:column headerValue="{!$ObjectType.OpportunityLineItem.Fields.Profile__c.Label}" rendered="{!opportunity.Market__c != 'MTS DATA'}"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:inputField value="{!s.Profile_CAT__c}" style="width:110px" required="true" onkeyup="refreshTotals();" rendered="{!opportunity.Market__c = 'MTS Cash Markets'}" /></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- apex:inputField value="{!s.Profile_CAT__c}" style="width:110px" required="true" onkeyup="refreshTotals();" rendered="{!opportunity.Market__c = 'MTS Live'}" /--></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:inputField value="{!s.Profile_MMF__c}" style="width:110px" required="true" onkeyup="refreshTotals();" rendered="{!opportunity.Market__c = 'MTS Repo Markets'}" /></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:inputField value="{!s.Profile_BV__c}" style="width:110px" required="true" onkeyup="refreshTotals();" rendered="{!opportunity.Market__c = 'MTS Bondvision'}" /> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:inputField value="{!s.Profile_ACM__c}" style="width:110px" required="true" onkeyup="refreshTotals();" rendered="{!opportunity.Market__c = 'MTS ACM'}" /> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:column></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:column headerValue="{!$ObjectType.OpportunityLineItem.Fields.Quantity.Label}" rendered="{!opportunity.Market__c = 'MTS DATA'}"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:inputField value="{!s.Quantity}" style="width:70px" required="true" onkeyup="refreshTotals();" /></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:column></span></span><br />
<br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:column headerValue="{!$ObjectType.OpportunityLineItem.Fields.UnitPrice.Label}" rendered="{!opportunity.Market__c = 'MTS DATA'}"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:inputField value="{!s.UnitPrice}" style="width:70px" required="true" onkeyup="refreshTotals();" /></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:column></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:column headerValue="{!$ObjectType.OpportunityLineItem.Fields.Description.Label}"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:inputField value="{!s.Description}" required="false"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:column></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:pageblockTable></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:pageBlockButtons ></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:commandButton action="{!onSave}" value="Save"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:commandButton action="{!onCancel}" value="Cancel" immediate="true"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- apex:commandButton action="{!onadd}" value="Add Selected"/--></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:pageBlockButtons></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:pageBlock> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><!-- this is the lower table: search bar and search results --></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:pageBlock ></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:outputPanel styleClass="search"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> Search for {!$ObjectType.Product2.LabelPlural} </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:outputPanel></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:actionRegion renderRegionOnly="false" immediate="true"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:actionFunction name="fetchResults" action="{!updateAvailableList}" reRender="searchResults" status="searchStatus"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- here we invoke the scripting to get out fancy 'no button' search bar to work --></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:inputText value="{!searchString}" onkeydown="if(event.keyCode==13){this.blur();}else{resetTimer();}" style="width:300px" rendered="{!OR(opportunity.Market__c = 'MTS Cash Markets', opportunity.Market__c ='MTS DATA', opportunity.Market__c ='MTS Repo Markets')}"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:actionFunction name="fetchResults1" action="{!updateAvailableList}" reRender="searchResults" status="searchStatus"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:outputPanel styleClass="search" rendered="{!opportunity.Market__c != 'MTS DATA'}"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> Sections </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:outputPanel></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- apex:outputlabel value="Sections" for="values" /--></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:selectList value="{!Sections}" size="1" id="values" rendered="{!opportunity.Market__c != 'MTS DATA'}" ></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:actionSupport event="onchange" action="{!updateAvailableList}" reRender="searchResults" /></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:selectOptions value="{!Sectionnames}"/> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:selectList></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:outputPanel styleClass="search"></span></span><br />
<br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:outputPanel></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:commandButton action="{!addAllToShoppingCart}" value="Add All Selected" reRender="selected,searchResults" immediate="true"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> &nbsp;&nbsp;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <i></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- actionStatus component makes it easy to let the user know when a search is underway --></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:actionStatus id="searchStatus" startText="searching..." stopText=" "/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </i></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:actionRegion></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <br/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:outputPanel id="searchResults"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:pageBlockTable value="{!AvailableProducts}" var="a"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- apex:column width="25px"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:inputcheckbox value="{!checked}"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:column--></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:column headerValue="{!$ObjectType.Product2.Fields.Name.Label}" value="{!a.Product2.Name}" /></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:column headerValue="{!$ObjectType.Product2.Fields.Family.Label}" value="{!a.Product2.Family}"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:column headerValue="{!$ObjectType.Product2.Fields.Description.Label}" value="{!a.Product2.Description}"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:column ></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- command button in a column... neato --></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:commandButton value="Select" action="{!addToShoppingCart}" reRender="selected,searchResults" immediate="true"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- again we use apex:param to be able to tell the controller which row we are working with --></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:param value="{!a.Id}" assignTo="{!toSelect}" name="toSelect"/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:commandButton></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:column></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:pageBlockTable></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <!-- We put up a warning if results exceed 100 rows --></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <apex:outputPanel styleClass="fyi" rendered="{!overLimit}"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <br/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> Your search returned over 100 results, use a more specific search string if you do not see the desired {!$ObjectType.Product2.Label}.</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> <br/></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:outputPanel></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:outputPanel></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:pageBlock></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:outputPanel></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </apex:form></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"></apex:page></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">FYI - Sectionames is a way we use to select product baskets, to make search/organization easier. you can actually remove this if it does not fit your needs.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">and here is the apex code :</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;">public with sharing class opportunityProductEntryExtension {</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public Opportunity theOpp {get;set;}</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public String searchString {get;set;}</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public String searchstring2 {get;set;} </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public opportunityLineItem[] shoppingCart {get;set;}</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public priceBookEntry[] AvailableProducts {get;set;}</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public Pricebook2 theBook {get;set;} </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public string recordtypeidname {get;set;}</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public boolean checked {get;set;}</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public String Sections{get; set;}</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public String toSelect {get; set;}</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public String toUnselect {get; set;}</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public Decimal Total {get;set;}</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public Boolean overLimit {get;set;}</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public Boolean multipleCurrencies {get; set;}</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> private Boolean forcePricebookSelection = false;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> private opportunityLineItem[] forDeletion = new opportunityLineItem[]{};</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public opportunityProductEntryExtension(ApexPages.StandardController controller) {</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // Need to know if org has multiple currencies enabled</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> multipleCurrencies = UserInfo.isMultiCurrencyOrganization();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // Get information about the Opportunity being worked on</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(multipleCurrencies)</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> theOpp = database.query('select Id, Pricebook2Id, Pricebook2.Name, CurrencyIsoCode from Opportunity where Id = \'' + controller.getRecord().Id + '\' limit 1');</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> else</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> theOpp = [select Id, Pricebook2Id, PriceBook2.Name, Market__c, Main_Profile__c, RecordType.Id, RecordType.name from Opportunity where Id = :controller.getRecord().Id limit 1];</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> //assegna il valore del recordtype alla variabile</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> recordtypeidname = theOpp.RecordType.name;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // If products were previously selected need to put them in the "selected products" section to start with</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> shoppingCart = [select Id, Product_Family__c, quantity, unitprice, discount, Profile_MMF__c, Profile_ACM__c, Profile_CAT__c, Profile_BV__c, Profile_IC__c, Description, PriceBookEntryId, PriceBookEntry.Name, PriceBookEntry.IsActive, PriceBookEntry.Product2Id, PriceBookEntry.Product2.Name, PriceBookEntry.PriceBook2Id from opportunityLineItem where (OpportunityId=:theOpp.Id) AND (Product_Family__c=:theOpp.Market__c)];</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if (theOpp.Market__c=='MTS Live'){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> shoppingCart = [select Id, Product_Family__c, quantity, unitprice, discount, Profile_MMF__c, Profile_ACM__c, Profile_CAT__c, Profile_BV__c, Profile_IC__c, Description, PriceBookEntryId, PriceBookEntry.Name, PriceBookEntry.IsActive, PriceBookEntry.Product2Id, PriceBookEntry.Product2.Name, PriceBookEntry.PriceBook2Id from opportunityLineItem where (OpportunityId=:theOpp.Id)];</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // Check if Opp has a pricebook associated yet</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(theOpp.Pricebook2Id == null){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> Pricebook2[] activepbs = [select Id, Name from Pricebook2 where isActive = true limit 2];</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(activepbs.size() == 2){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> forcePricebookSelection = true;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> theBook = new Pricebook2();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> else{</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> theBook = activepbs[0];</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> else{</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> theBook = theOpp.Pricebook2;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(!forcePricebookSelection)</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> updateAvailableList();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // this is the 'action' method on the page</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public PageReference priceBookCheck(){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // if the user needs to select a pricebook before we proceed we send them to standard pricebook selection screen</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(forcePricebookSelection){ </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> return changePricebook();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> else{</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> //if there is only one active pricebook we go with it and save the opp</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(theOpp.pricebook2Id != theBook.Id){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> try{</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> theOpp.Pricebook2Id = theBook.Id;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> update(theOpp);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> catch(Exception e){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> ApexPages.addMessages(e);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> return null;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public String getChosenCurrency(){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(multipleCurrencies)</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> return (String)theOpp.get('CurrencyIsoCode');</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> else</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> return '';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public void updateAvailableList() {</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // We dynamically build a query string and exclude items already in the shopping cart</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> String qString = 'select Id, Pricebook2Id, IsActive, Product2.Name, Product2.Profile__c, Product2.Family, Product2.IsActive, Product2.Description, UnitPrice from PricebookEntry where IsActive=true and Pricebook2Id = \'' + theBook.Id + '\'';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> String searchstring3 = Sections;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(multipleCurrencies)</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> qstring += ' and CurrencyIsoCode = \'' + theOpp.get('currencyIsoCode') + '\'';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(recordtypeidname!=null){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if (theOpp.Market__c=='MTS Live'){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> qString+= 'and (Product2.Family = \'' + 'MTS Cash Markets' + '\')' ;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> qString+= 'and (Product2.MTS_Live_Enabled__c = TRUE)' ;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }else{</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> qString+= 'and (Product2.Family = \'' + theOpp.Market__c + '\')' ;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // note that we are looking for the search string entered by the user in the name OR description</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // modify this to search other fields if desired</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(searchString!=null){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> qString+= ' and (Product2.Name like \'%' + searchString + '%\' or Product2.Description like \'%' + searchString + '%\')';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(searchString3!=null) if (searchString3!='All'){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> qString+= ' and (Product2.Name like \'%' + searchString3 + '%\' or Product2.Description like \'%' + searchString3 + '%\')';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> Set<Id> selectedEntries = new Set<Id>();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> for(opportunityLineItem d:shoppingCart){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> selectedEntries.add(d.PricebookEntryId);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(selectedEntries.size()>0){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> String tempFilter = ' and Id not in (';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> for(Id i : selectedEntries){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> tempFilter+= '\'' + (String)i + '\',';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> String extraFilter = tempFilter.substring(0,tempFilter.length()-1);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> extraFilter+= ')';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> qString+= extraFilter;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> qString+= ' order by Product2.Name';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> qString+= ' limit 101';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> system.debug('qString:' +qString); </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> AvailableProducts = database.query(qString);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // We only display up to 100 results... if there are more than we let the user know (see vf page)</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(AvailableProducts.size()==101){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> AvailableProducts.remove(100);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> overLimit = true;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> else{</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> overLimit=false;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public void addToShoppingCart(){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // This function runs when a user hits "select" button next to a product</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> for(PricebookEntry d : AvailableProducts){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if((String)d.Id==toSelect){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> shoppingCart.add(new opportunityLineItem(OpportunityId=theOpp.Id, PriceBookEntry=d, unitprice=d.unitprice, Product_Family__c=d.Product2.family, Profile_ACM__c=theOpp.Main_Profile__c, Profile_CAT__c=theOpp.Main_Profile__c, Profile_BV__c=theOpp.Main_Profile__c, Profile_MMF__c=theOpp.Main_Profile__c, PriceBookEntryId=d.Id));</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> break;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> updateAvailableList(); </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public void addAllToShoppingCart(){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // This function runs when a user hits "select" button next to a product</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> for(PricebookEntry d : AvailableProducts){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> shoppingCart.add(new opportunityLineItem(OpportunityId=theOpp.Id, PriceBookEntry=d, Profile_ACM__c=theOpp.Main_Profile__c, Profile_CAT__c=theOpp.Main_Profile__c, Product_Family__c=d.Product2.family, Profile_BV__c=theOpp.Main_Profile__c, Profile_MMF__c=theOpp.Main_Profile__c, PriceBookEntryId=d.Id));</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> updateAvailableList(); </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public PageReference removeFromShoppingCart(){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // This function runs when a user hits "remove" on an item in the "Selected Products" section</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> Integer count = 0;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> for(opportunityLineItem d : shoppingCart){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if((String)d.PriceBookEntryId==toUnselect){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(d.Id!=null)</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> forDeletion.add(d);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> shoppingCart.remove(count);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> break;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> count++;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> updateAvailableList();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> return null;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public PageReference onSave(){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> theOpp.ChangedLineItems__c=true;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // If previously selected products are now removed, we need to delete them</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(forDeletion.size()>0)</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> delete(forDeletion);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> upsert(theOpp);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // Previously selected products may have new quantities and amounts, and we may have new products listed, so we use upsert here</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> try{</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(shoppingCart.size()>0)</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> upsert(shoppingCart);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> upsert(theOpp);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> catch(Exception e){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> ApexPages.addMessages(e);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> return null;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> } </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // After save return the user to the Opportunity</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> return new PageReference('/' + ApexPages.currentPage().getParameters().get('Id'));</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public PageReference onCancel(){</span></span><br />
<br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // If user hits cancel we commit no changes and return them to the Opportunity </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> return new PageReference('/' + ApexPages.currentPage().getParameters().get('Id'));</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public PageReference changePricebook(){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // This simply returns a PageReference to the standard Pricebook selection screen</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // Note that is uses retURL parameter to make sure the user is sent back after they choose</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> PageReference ref = new PageReference('/oppitm/choosepricebook.jsp');</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> ref.getParameters().put('id',theOpp.Id);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> ref.getParameters().put('retURL','/apex/opportunityProductEntry?id=' + theOpp.Id);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> return ref;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public List<SelectOption> getsectionnames(){ </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> List<SelectOption> options = new List<SelectOption>();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> List<Sections_Picklist__c> Sectionlist = new List<Sections_Picklist__c>(); </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> Sectionlist = [Select Id, PicklistValue__c FROM Sections_Picklist__c WHERE family__c =: theOpp.Market__c ORDER BY name];</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> for (Integer j=0;j<sectionlist.size();j++) { </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> options.add(new SelectOption(sectionlist[j].PicklistValue__c,sectionlist[j].PicklistValue__c)); </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> return options;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;">}</span></span><br />
<br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">further to this you'll need a redirect page when pressing the add product button on the opportunity page :</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><apex:page standardController="opportunityLineItem" extensions="opportunityProductRedirectExtension" action="{!redirect}"></span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"></apex:page></span></span><br />
<br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">and the relative apexcode for the redirect :</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;">public with sharing class opportunityProductRedirectExtension {</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> Id oppId;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // we are extending the OpportunityLineItem controller, so we query to get the parent OpportunityId</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public opportunityProductRedirectExtension(ApexPages.StandardController controller) {</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oppId = [select Id, OpportunityId from OpportunityLineItem where Id = :controller.getRecord().Id limit 1].OpportunityId;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // then we redirect to our desired page with the Opportunity Id in the URL</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> public pageReference redirect(){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> return new PageReference('/apex/opportunityProductEntry?id=' + oppId);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;">}</span></span><br />
<br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Finally, as requested by Salesforce, you'll need a testclass for the two apex classes (I've made a single apex test class to test both :</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;">@istest</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;">private class opportunityProductEntryTests {</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> static testMethod void theTests(){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> TestUtilities tu = TestUtilities.generateTest();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;">// this is an external class that will generate a number of records I will query below.</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;">// I suggest creating a TestUtility class to be called by your test class instead of creating the </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;">// records in each test class.</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;">// This to save time, code and providing a clear code organization.</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> OpportunityLineItem oli = [select Id, PricebookEntryId, PricebookEntry.Pricebook2Id, PricebookEntry.Name, PriceBookEntry.Product2Id, OpportunityId, Opportunity.AccountId from OpportunityLineItem where Description='This is a test' limit 1];</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> system.debug('value dell id :' + oli.id); </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> ////////////////////////////////////////</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // test opportunityProductEntry</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> ////////////////////////////////////////</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // load the page </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> PageReference pageRef = Page.opportunityProductEntry;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> pageRef.getParameters().put('Id',oli.OpportunityId);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> Test.setCurrentPageReference(pageRef);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // load the extension</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> opportunityProductEntryExtension oPEE = new opportunityProductEntryExtension(new ApexPages.StandardController(oli.Opportunity));</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // test 'getChosenCurrency' method</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> if(UserInfo.isMultiCurrencyOrganization())</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> System.assert(oPEE.getChosenCurrency()!='');</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> else</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> System.assertEquals(oPEE.getChosenCurrency(),'');</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // we know that there is at least one line item, so we confirm</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> Integer startCount = oPEE.ShoppingCart.size();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> system.assert(startCount>0);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> //test search functionality without finding anything</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.searchString = 'michaelforce is a hip cat';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.updateAvailableList();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> system.assert(oPEE.AvailableProducts.size()==0);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> //test remove from shopping cart</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.toUnselect = oli.PricebookEntryId;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.removeFromShoppingCart();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> system.assert(oPEE.shoppingCart.size()==startCount-1);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> //test save and reload extension</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.onSave();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE = new opportunityProductEntryExtension(new ApexPages.StandardController(oli.Opportunity));</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> system.assert(oPEE.shoppingCart.size()==startCount-1);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // test search again, this time we will find something</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.searchString = oli.PricebookEntry.Name;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.updateAvailableList();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> system.assert(oPEE.AvailableProducts.size()>0);</span></span><br />
<br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // test add to Shopping Cart function</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.toSelect = oPEE.AvailableProducts[0].Id;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.addToShoppingCart();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> system.assert(oPEE.shoppingCart.size()==startCount);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // add required info and try save again</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> for(OpportunityLineItem o : oPEE.ShoppingCart){</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> o.quantity = 5;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> o.unitprice = 300;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.onSave();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // query line items to confirm that the save worked</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> opportunityLineItem[] oli2 = [select Id from opportunityLineItem where OpportunityId = :oli.OpportunityId];</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> system.assert(oli2.size()==startCount);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // test search Sections BELGIUM</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.searchString = '';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.updateAvailableList();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.Sections = 'MTS BELGIUM';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.updateAvailableList();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> system.assert(oPEE.AvailableProducts.size()>0);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // test here the add all function</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.addAllToShoppingCart();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> system.assert(oPEE.shoppingCart.size()> 0);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // ******************** </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // test search Sections BELGIUM</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.Sections = 'All';</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.updateAvailableList();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> system.assert(oPEE.AvailableProducts.size()>0);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // load the section names</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.getsectionnames();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // test on new Opp (no pricebook selected) to make sure redirect is happening</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> Opportunity newOpp = new Opportunity(Name='New Opp',stageName='Pipeline',Amount=10,Type='Enable - Expanding business', Market__c='MTS Repo Markets',closeDate=System.Today()+30,AccountId=oli.Opportunity.AccountId);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> insert(newOpp);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE = new opportunityProductEntryExtension(new ApexPages.StandardController(newOpp));</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> oPEE.priceBookCheck();</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> //System.assert(oPEE.priceBookCheck()!=null);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // final quick check of cancel button</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> System.assert(oPEE.onCancel()!=null);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> ////////////////////////////////////////</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // test redirect page</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> ////////////////////////////////////////</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // load the page</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> pageRef = Page.opportunityProductRedirect;</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> pageRef.getParameters().put('Id',oli2[0].Id);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> Test.setCurrentPageReference(pageRef);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"><br /></span></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> // load the extension and confirm that redirect function returns something</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> opportunityProductRedirectExtension oPRE = new opportunityProductRedirectExtension(new ApexPages.StandardController(oli2[0]));</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> System.assert(oPRE.redirect()!=null);</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> </span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;"> }</span></span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><span style="color: blue;">}</span></span><br />
<br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Hope this can be of help.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">If anything not clear, and I'm afraid I'm not a good teacher. Please feel free to ask.</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;"><br /></span>
<span style="font-family: Verdana, sans-serif; font-size: x-small;">ciaociao,</span><br />
<span style="font-family: Verdana, sans-serif; font-size: x-small;">Alex</span>elpaso750http://www.blogger.com/profile/12877895860975876954noreply@blogger.com4tag:blogger.com,1999:blog-8066782576863889652.post-85911776555210518922011-10-04T05:19:00.000-07:002011-10-04T05:19:44.157-07:00Just released the new Software testing functionalityThis is just a basic T&Q (Test and Quality Dept) application to keep track of new features/bug fixes to a software being released. will post the code asapelpaso750http://www.blogger.com/profile/12877895860975876954noreply@blogger.com0tag:blogger.com,1999:blog-8066782576863889652.post-17627017941832354592011-04-15T21:33:00.000-07:002011-04-15T21:33:19.721-07:00welcomeHi, this is my first post.<br />
<br />
Here I'd like to share some of my first experience with Apex and Visualforce.<br />
<br />
We all know sometimes it's just annoying reading a 700 pages developer guide, so my suggestion is to read them anyway but in the meantime surf the blogs and get some Real code and some Real applications into real life.<br />
<br />
Hope my blog here would be able to provide this.<br />
<br />
ciao<br />
<br />
Alexelpaso750http://www.blogger.com/profile/12877895860975876954noreply@blogger.com0