You need to sign in to do that
Don't have an account?
Shruthi Narsi
Error: Compile Error: Missing '<EOF>' at 'public' at line 83 column 5
Can anyone help me with the below code to select products from the existing products list. I am getting error ''
Error: Compile Error: Missing '<EOF>' at 'public' at line 83 column 5
Apex Code
global class ProductSearchPopupController {
public String query {get; set;}
public List<PricebookEntry__c> products {get; set;}
public List<wrapProduct> wrapProductList {get; set;}
public List<PricebookEntry__c> selectedProduct{get;set;}
public List<QuoteLineitem__c> quoteLineList{get;set;}
public List<wrapProduct> selectedWrapperList{get;set;}
public Boolean normalList{get;set;}
public Boolean selectedList{get;set;}
public Boolean block{get;set;}
public Boolean block1{get;set;}
public Boolean block2{get;set;}
public String SalesPrice {get; set;}
public integer Discount {get; set;}
public String Quantity {get; set;}
public String ServiceDate {get; set;}
Id recordId;
public ProductSearchPopupController(ApexPages.StandardController controller){
recordId = controller.getId();
SalesPrice='';
Discount=0;
Quantity='';
ServiceDate='';
system.debug('recordId '+recordId);
wrapProductList = new List<wrapProduct>();
selectedWrapperList = new List<wrapProduct>();
normalList = true;
selectedList = false;
block = true;
block1 = false;
block2 = false;
}
public PageReference runQuery(){
if(Test.isRunningTest()){
query='Test';
}
system.debug('this query '+query);
if(query == null || query == ''){
system.debug('query '+query);
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Info,'Please enter the product to be searched'));
return null;
}
List<List<PricebookEntry__c>> searchResults=[FIND :query IN ALL FIELDS RETURNING PricebookEntry__c (id, Name, ProductCode__c, Product2Id__r.Product_Description__c,UnitPrice__c, UseStandardPrice__c)];
system.debug('searchResults '+searchResults[0].size());
System.debug('searchResults result ' + searchResults[0]);
System.debug('oth result ' + SearchResults[0]);
if(searchResults[0]!=null){
for(PricebookEntry__c a: searchResults[0]) {
// As each Account is processed we create a new wrapAccount object and add it to the wrapAccountList
wrapProductList.add(new wrapProduct(a));
block = true; block1 = true; block2 = false;
}
}
return null;
}
public void processSelected() {
selectedProducts = new List<Product2__c>();
for(wrapProducts wrapProductObj : wrapAccountList) {
if(wrapProductObj.selected == true) {
selectedAccounts.add(wrapProductObj.acc);
}
}
}
// This is our wrapper/container class. A container class is a class, a data structure, or an abstract data type whose instances are collections of other objects. In this example a wrapper class contains both the standard salesforce object Account and a Boolean value
public class wrapProducts {
public Product2__c acc {get; set;}
public Boolean selected {get; set;}
//This is the contructor method. When we create a new wrapAccount object we pass a Account that is set to the acc property. We also set the selected value to false
public wrapProduct(Products a) {
acc = a;
selected = false;
}
}
}
public PageReference ProceedWithSelectedToNextPage(){
selectedWrapperList = new List<wrapProduct>();
normalList = false;
selectedList = true;
for(wrapProduct selectedWrapObj: wrapProductList){
system.debug('selectedWrapObj.selected ---------'+selectedWrapObj.selected);
if(selectedWrapObj.selected == true)
selectedWrapperList.add(selectedWrapObj);
}
system.debug('selectedWrapperList size ---------'+selectedWrapperList.size());
PageReference pageRef = new PageReference('/apex/AccountOpportunityTwoPage');
pageRef.setRedirect(false);
return pageRef;
}
public void processSelected() {
selectedProduct = new List<PricebookEntry__c>();
for(wrapProduct wrapProductObj : wrapProductList) {
if(wrapProductObj.selected == true) {
selectedProduct.add(wrapProductObj.acc);
block = false; block1 = false; block2 = true;
}
}
}
public void GoBack() {
block = true;
block1 = true;
block2 = false;
}
global class wrapProduct {
public PricebookEntry__c acc {get;set;}
public Boolean selected {get;set;}
public wrapProduct(PricebookEntry__c p) {
this.acc = p;
this.selected = false;
}
}
public pagereference saveproduct(){
List<QuoteLineitem__c> quoteLineList = new List<QuoteLineitem__c>();
if(Test.isRunningTest()){
insertTestData();
}
if(!selectedProduct.isEmpty()){
for(PricebookEntry__c sp:selectedProduct){
system.debug('sp '+sp);
QuoteLineitem__c qli = new QuoteLineitem__c();
qli.QuotesId__c = recordId;
qli.ListPrice__c = sp.UnitPrice__c;
qli.UnitPrice__c = sp.UnitPrice__c;
qli.Product2Id__c = sp.Product2Id__c;
if(Discount!=0 || Discount!=null){
qli.Discount__c = Discount;
}
quoteLineList.add(qli);
}
if(quoteLineList.size()>0){
insert quoteLineList;
PageReference pageRef = new PageReference('https://proseraa.lightning.force.com/lightning/r/Quotes__c/'+recordId+'/view');
pageRef.setRedirect(true);
return pageRef;
}
}
return null;
}
public void insertTestData(){
Product2__c testProduct = new Product2__c();
testProduct.Name='Test product';
insert testProduct;
PricebookEntry__c testpbe = new PricebookEntry__c();
testpbe.Name='Test PriceBookEntry';
testpbe.UnitPrice__c =123;
testpbe.Product2Id__c=testProduct.Id;
insert testpbe;
selectedProduct.add(testpbe);
}
}
VF Page
<apex:page standardController="Quotes__c" extensions="ProductSearchPopupController" showHeader="false" sidebar="false" lightningStylesheets="true">
<apex:form id="form" >
<apex:pageMessages ></apex:pageMessages>
<apex:messages />
<div style="width 100%">
<apex:pageBlock title="Add Products" id="block" rendered="{!block}">
<centre>
<div align="center" >
<apex:pageBlockSection columns="1" id="section" >
Enter the product to be added and select Go<br/>
<apex:inputText value="{!query}" id="query" style="width: 1200px; height: 40px;"/>
</apex:pageBlockSection>
</div>
</centre>
<right>
<apex:commandButton value="Go" action="{!runQuery}" style="align: right:100px;border-style:solid;
color:white; position:relative;background-color:rgba(13, 112, 165, 1);"/>
<apex:commandButton value="Cancel" action="{!cancel}" style="float: centre:200px ;border-style:solid;
color:rgb(21, 137, 238); background-color:white;" />
</right>
</apex:pageBlock>
<apex:pageBlock id="block1" rendered="{!block1}" >
<apex:pageBlockSection columns="1">
<apex:pageBlockTable value="{!wrapProductList}" var="accWrap">
<apex:column >
<apex:facet name="header">
<apex:inputCheckbox onclick="selectAllCheckboxes(this,'inputId')"/>
</apex:facet>
<apex:inputCheckbox value="{!accWrap.selected}" id="inputId"/>
</apex:column>
<apex:column headerValue="Name">
<apex:outputLink value="#">{!accWrap.acc.Name}</apex:outputLink>
</apex:column>
<apex:column headerValue="Product Code">
<apex:outputText value="{!accWrap.acc.ProductCode__c}" />
</apex:column>
<apex:column headerValue="Product Description">
<apex:outputText value="{!accWrap.acc.Product2Id__r.Product_Description__c}" />
</apex:column>
<apex:column headerValue="Unit Price">
<apex:outputText value="{!accWrap.acc.UnitPrice__c}" />
</apex:column>
<apex:column headerValue="Standard Price">
<apex:outputText value="{!accWrap.acc.UseStandardPrice__c}" />
</apex:column>
</apex:pageBlockTable>
<apex:commandButton value="Next" action="{!processSelected}" style="float: right;border-style:solid;
color:white; background-color:rgba(13, 112, 165, 1);align-items: right;justify-content:right;"/>
</apex:pageBlockSection>
</apex:pageBlock>
</div>
<div>
<apex:pageBlock id="block2" rendered="{!block2}" >
<apex:pageblockSection title="All Products" collapsible="false" columns="3">
<apex:pageBlockTable value="{!selectedProduct}" var="c" id="table2" title="Selected Products">
<apex:column value="{!c.Name}" headerValue="Product Name"/>
<apex:column headerValue="Sales Price">
<apex:inputText value="{!c.UnitPrice__c}" id="UnitPrice" />
</apex:column>
<apex:column headerValue="Discount">
<apex:inputText value="{!discount}" id="discount" />
</apex:column>
<apex:column headerValue="Quantity">
<apex:inputText value="{!quantity}" id="quantity" />
</apex:column>
</apex:pageBlockTable>
</apex:pageblockSection>
<apex:commandButton action="{!GoBack}" value="Back" style="border-style:solid;
color:white; background-color:rgba(13, 112, 165, 1);"/>
<apex:commandButton action="{!saveproduct}" value="Save" style="float: right;border-style:solid;
color:white; background-color:rgba(13, 112, 165, 1);"/>
<apex:commandButton value="Cancel" oncomplete="doRedirect()" style="float: right;border-style:solid;
color:rgb(21, 137, 238); background-color:white;"/>
</apex:pageBlock>
</div>
</apex:form>
</apex:page>
Error: Compile Error: Missing '<EOF>' at 'public' at line 83 column 5
Apex Code
global class ProductSearchPopupController {
public String query {get; set;}
public List<PricebookEntry__c> products {get; set;}
public List<wrapProduct> wrapProductList {get; set;}
public List<PricebookEntry__c> selectedProduct{get;set;}
public List<QuoteLineitem__c> quoteLineList{get;set;}
public List<wrapProduct> selectedWrapperList{get;set;}
public Boolean normalList{get;set;}
public Boolean selectedList{get;set;}
public Boolean block{get;set;}
public Boolean block1{get;set;}
public Boolean block2{get;set;}
public String SalesPrice {get; set;}
public integer Discount {get; set;}
public String Quantity {get; set;}
public String ServiceDate {get; set;}
Id recordId;
public ProductSearchPopupController(ApexPages.StandardController controller){
recordId = controller.getId();
SalesPrice='';
Discount=0;
Quantity='';
ServiceDate='';
system.debug('recordId '+recordId);
wrapProductList = new List<wrapProduct>();
selectedWrapperList = new List<wrapProduct>();
normalList = true;
selectedList = false;
block = true;
block1 = false;
block2 = false;
}
public PageReference runQuery(){
if(Test.isRunningTest()){
query='Test';
}
system.debug('this query '+query);
if(query == null || query == ''){
system.debug('query '+query);
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Info,'Please enter the product to be searched'));
return null;
}
List<List<PricebookEntry__c>> searchResults=[FIND :query IN ALL FIELDS RETURNING PricebookEntry__c (id, Name, ProductCode__c, Product2Id__r.Product_Description__c,UnitPrice__c, UseStandardPrice__c)];
system.debug('searchResults '+searchResults[0].size());
System.debug('searchResults result ' + searchResults[0]);
System.debug('oth result ' + SearchResults[0]);
if(searchResults[0]!=null){
for(PricebookEntry__c a: searchResults[0]) {
// As each Account is processed we create a new wrapAccount object and add it to the wrapAccountList
wrapProductList.add(new wrapProduct(a));
block = true; block1 = true; block2 = false;
}
}
return null;
}
public void processSelected() {
selectedProducts = new List<Product2__c>();
for(wrapProducts wrapProductObj : wrapAccountList) {
if(wrapProductObj.selected == true) {
selectedAccounts.add(wrapProductObj.acc);
}
}
}
// This is our wrapper/container class. A container class is a class, a data structure, or an abstract data type whose instances are collections of other objects. In this example a wrapper class contains both the standard salesforce object Account and a Boolean value
public class wrapProducts {
public Product2__c acc {get; set;}
public Boolean selected {get; set;}
//This is the contructor method. When we create a new wrapAccount object we pass a Account that is set to the acc property. We also set the selected value to false
public wrapProduct(Products a) {
acc = a;
selected = false;
}
}
}
public PageReference ProceedWithSelectedToNextPage(){
selectedWrapperList = new List<wrapProduct>();
normalList = false;
selectedList = true;
for(wrapProduct selectedWrapObj: wrapProductList){
system.debug('selectedWrapObj.selected ---------'+selectedWrapObj.selected);
if(selectedWrapObj.selected == true)
selectedWrapperList.add(selectedWrapObj);
}
system.debug('selectedWrapperList size ---------'+selectedWrapperList.size());
PageReference pageRef = new PageReference('/apex/AccountOpportunityTwoPage');
pageRef.setRedirect(false);
return pageRef;
}
public void processSelected() {
selectedProduct = new List<PricebookEntry__c>();
for(wrapProduct wrapProductObj : wrapProductList) {
if(wrapProductObj.selected == true) {
selectedProduct.add(wrapProductObj.acc);
block = false; block1 = false; block2 = true;
}
}
}
public void GoBack() {
block = true;
block1 = true;
block2 = false;
}
global class wrapProduct {
public PricebookEntry__c acc {get;set;}
public Boolean selected {get;set;}
public wrapProduct(PricebookEntry__c p) {
this.acc = p;
this.selected = false;
}
}
public pagereference saveproduct(){
List<QuoteLineitem__c> quoteLineList = new List<QuoteLineitem__c>();
if(Test.isRunningTest()){
insertTestData();
}
if(!selectedProduct.isEmpty()){
for(PricebookEntry__c sp:selectedProduct){
system.debug('sp '+sp);
QuoteLineitem__c qli = new QuoteLineitem__c();
qli.QuotesId__c = recordId;
qli.ListPrice__c = sp.UnitPrice__c;
qli.UnitPrice__c = sp.UnitPrice__c;
qli.Product2Id__c = sp.Product2Id__c;
if(Discount!=0 || Discount!=null){
qli.Discount__c = Discount;
}
quoteLineList.add(qli);
}
if(quoteLineList.size()>0){
insert quoteLineList;
PageReference pageRef = new PageReference('https://proseraa.lightning.force.com/lightning/r/Quotes__c/'+recordId+'/view');
pageRef.setRedirect(true);
return pageRef;
}
}
return null;
}
public void insertTestData(){
Product2__c testProduct = new Product2__c();
testProduct.Name='Test product';
insert testProduct;
PricebookEntry__c testpbe = new PricebookEntry__c();
testpbe.Name='Test PriceBookEntry';
testpbe.UnitPrice__c =123;
testpbe.Product2Id__c=testProduct.Id;
insert testpbe;
selectedProduct.add(testpbe);
}
}
VF Page
<apex:page standardController="Quotes__c" extensions="ProductSearchPopupController" showHeader="false" sidebar="false" lightningStylesheets="true">
<apex:form id="form" >
<apex:pageMessages ></apex:pageMessages>
<apex:messages />
<div style="width 100%">
<apex:pageBlock title="Add Products" id="block" rendered="{!block}">
<centre>
<div align="center" >
<apex:pageBlockSection columns="1" id="section" >
Enter the product to be added and select Go<br/>
<apex:inputText value="{!query}" id="query" style="width: 1200px; height: 40px;"/>
</apex:pageBlockSection>
</div>
</centre>
<right>
<apex:commandButton value="Go" action="{!runQuery}" style="align: right:100px;border-style:solid;
color:white; position:relative;background-color:rgba(13, 112, 165, 1);"/>
<apex:commandButton value="Cancel" action="{!cancel}" style="float: centre:200px ;border-style:solid;
color:rgb(21, 137, 238); background-color:white;" />
</right>
</apex:pageBlock>
<apex:pageBlock id="block1" rendered="{!block1}" >
<apex:pageBlockSection columns="1">
<apex:pageBlockTable value="{!wrapProductList}" var="accWrap">
<apex:column >
<apex:facet name="header">
<apex:inputCheckbox onclick="selectAllCheckboxes(this,'inputId')"/>
</apex:facet>
<apex:inputCheckbox value="{!accWrap.selected}" id="inputId"/>
</apex:column>
<apex:column headerValue="Name">
<apex:outputLink value="#">{!accWrap.acc.Name}</apex:outputLink>
</apex:column>
<apex:column headerValue="Product Code">
<apex:outputText value="{!accWrap.acc.ProductCode__c}" />
</apex:column>
<apex:column headerValue="Product Description">
<apex:outputText value="{!accWrap.acc.Product2Id__r.Product_Description__c}" />
</apex:column>
<apex:column headerValue="Unit Price">
<apex:outputText value="{!accWrap.acc.UnitPrice__c}" />
</apex:column>
<apex:column headerValue="Standard Price">
<apex:outputText value="{!accWrap.acc.UseStandardPrice__c}" />
</apex:column>
</apex:pageBlockTable>
<apex:commandButton value="Next" action="{!processSelected}" style="float: right;border-style:solid;
color:white; background-color:rgba(13, 112, 165, 1);align-items: right;justify-content:right;"/>
</apex:pageBlockSection>
</apex:pageBlock>
</div>
<div>
<apex:pageBlock id="block2" rendered="{!block2}" >
<apex:pageblockSection title="All Products" collapsible="false" columns="3">
<apex:pageBlockTable value="{!selectedProduct}" var="c" id="table2" title="Selected Products">
<apex:column value="{!c.Name}" headerValue="Product Name"/>
<apex:column headerValue="Sales Price">
<apex:inputText value="{!c.UnitPrice__c}" id="UnitPrice" />
</apex:column>
<apex:column headerValue="Discount">
<apex:inputText value="{!discount}" id="discount" />
</apex:column>
<apex:column headerValue="Quantity">
<apex:inputText value="{!quantity}" id="quantity" />
</apex:column>
</apex:pageBlockTable>
</apex:pageblockSection>
<apex:commandButton action="{!GoBack}" value="Back" style="border-style:solid;
color:white; background-color:rgba(13, 112, 165, 1);"/>
<apex:commandButton action="{!saveproduct}" value="Save" style="float: right;border-style:solid;
color:white; background-color:rgba(13, 112, 165, 1);"/>
<apex:commandButton value="Cancel" oncomplete="doRedirect()" style="float: right;border-style:solid;
color:rgb(21, 137, 238); background-color:white;"/>
</apex:pageBlock>
</div>
</apex:form>
</apex:page>
You have closed the class braces at line 83, please remove them.
Cheers!!!
You are getting this error because you are closing the class with } before it ends . After wrapProducts class ends you are main closing class.Try removing closing brace } at line 82.
try below code
Hope this helps you
If this helps kindly mark it as solved so that it may help others in future.
Thanks and Regards
Now I am getting 'Method already defined: processSelected void ProductSearchPopupController.processSelected() from the type ProductSearchPopupController at line 99 column 17' error
can you correct the entire code. Its a little urgent
Hope this helps you
If this helps kindly mark it as solved so that it may help others in future.
Thanks and Regards
Below is the updated code
global class ProductSearchPopupController {
public String query {get; set;}
public List<PricebookEntry__c> products {get; set;}
public List<wrapProduct> wrapProductList {get; set;}
public List<PricebookEntry__c> selectedProduct{get;set;}
public List<QuoteLineitem__c> quoteLineList{get;set;}
public List<wrapProduct> selectedWrapperList{get;set;}
public Boolean normalList{get;set;}
public Boolean selectedList{get;set;}
public Boolean block{get;set;}
public Boolean block1{get;set;}
public Boolean block2{get;set;}
public String SalesPrice {get; set;}
public integer Discount {get; set;}
public String Quantity {get; set;}
public String ServiceDate {get; set;}
Id recordId;
public ProductSearchPopupController(ApexPages.StandardController controller){
recordId = controller.getId();
SalesPrice='';
Discount=0;
Quantity='';
ServiceDate='';
system.debug('recordId '+recordId);
wrapProductList = new List<wrapProduct>();
selectedWrapperList = new List<wrapProduct>();
normalList = true;
selectedList = false;
block = true;
block1 = false;
block2 = false;
}
public PageReference runQuery(){
if(Test.isRunningTest()){
query='Test';
}
system.debug('this query '+query);
if(query == null || query == ''){
system.debug('query '+query);
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Info,'Please enter the product to be searched'));
return null;
}
List<List<PricebookEntry__c>> searchResults=[FIND :query IN ALL FIELDS RETURNING PricebookEntry__c (id, Name, ProductCode__c, Product2Id__r.Product_Description__c,UnitPrice__c, UseStandardPrice__c)];
system.debug('searchResults '+searchResults[0].size());
System.debug('searchResults result ' + searchResults[0]);
System.debug('oth result ' + SearchResults[0]);
if(searchResults[0]!=null){
for(PricebookEntry__c a: searchResults[0]) {
// As each Account is processed we create a new wrapAccount object and add it to the wrapAccountList
wrapProductList.add(new wrapProduct(a));
block = true; block1 = true; block2 = false;
}
}
return null;
}
public void processSelected() {
selectedProducts = new List<Product2__c>();
for(wrapProducts wrapProductObj : wrapAccountList) {
if(wrapProductObj.selected == true) {
selectedAccounts.add(wrapProductObj.acc);
}
}
}
// This is our wrapper/container class. A container class is a class, a data structure, or an abstract data type whose instances are collections of other objects. In this example a wrapper class contains both the standard salesforce object Account and a Boolean value
public class wrapProducts {
public Product2__c acc {get; set;}
public Boolean selected {get; set;}
//This is the contructor method. When we create a new wrapAccount object we pass a Account that is set to the acc property. We also set the selected value to false
public wrapProduct(Product2__c a) {
acc = a;
selected = false;
}
}
public PageReference ProceedWithSelectedToNextPage(){
selectedWrapperList = new List<wrapProduct>();
normalList = false;
selectedList = true;
for(wrapProduct selectedWrapObj: wrapProductList){
system.debug('selectedWrapObj.selected ---------'+selectedWrapObj.selected);
if(selectedWrapObj.selected == true)
selectedWrapperList.add(selectedWrapObj);
}
system.debug('selectedWrapperList size ---------'+selectedWrapperList.size());
PageReference pageRef = new PageReference('/apex/AccountOpportunityTwoPage');
pageRef.setRedirect(false);
return pageRef;
}
public void SelectProduct() {
selectedProduct = new List<PricebookEntry__c>();
for(wrapProduct wrapProductObj : wrapProductList) {
if(wrapProductObj.selected == true) {
selectedProduct.add(wrapProductObj.acc);
block = false; block1 = false; block2 = true;
}
}
}
public void GoBack() {
block = true;
block1 = true;
block2 = false;
}
global class wrapProduct {
public PricebookEntry__c acc {get;set;}
public Boolean selected {get;set;}
public wrapProduct(PricebookEntry__c p) {
this.acc = p;
this.selected = false;
}
}
public pagereference saveproduct(){
List<QuoteLineitem__c> quoteLineList = new List<QuoteLineitem__c>();
if(Test.isRunningTest()){
insertTestData();
}
if(!selectedProduct.isEmpty()){
for(PricebookEntry__c sp:selectedProduct){
system.debug('sp '+sp);
QuoteLineitem__c qli = new QuoteLineitem__c();
qli.QuotesId__c = recordId;
qli.ListPrice__c = sp.UnitPrice__c;
qli.UnitPrice__c = sp.UnitPrice__c;
qli.Product2Id__c = sp.Product2Id__c;
if(Discount!=0 || Discount!=null){
qli.Discount__c = Discount;
}
quoteLineList.add(qli);
}
if(quoteLineList.size()>0){
insert quoteLineList;
PageReference pageRef = new PageReference('https://proseraa.lightning.force.com/lightning/r/Quotes__c/'+recordId+'/view');
pageRef.setRedirect(true);
return pageRef;
}
}
return null;
}
public void insertTestData(){
Product2__c testProduct = new Product2__c();
testProduct.Name='Test product';
insert testProduct;
PricebookEntry__c testpbe = new PricebookEntry__c();
testpbe.Name='Test PriceBookEntry';
testpbe.UnitPrice__c =123;
testpbe.Product2Id__c=testProduct.Id;
insert testpbe;
selectedProduct.add(testpbe);
}
}
VF Code
<apex:page standardController="Quotes__c" extensions="ProductSearchPopupController" showHeader="false" sidebar="false" lightningStylesheets="true">
<apex:form id="form" >
<apex:pageMessages ></apex:pageMessages>
<apex:messages />
<div style="width 100%">
<apex:pageBlock title="Add Products" id="block" rendered="{!block}">
<centre>
<div align="center" >
<apex:pageBlockSection columns="1" id="section" >
Enter the product to be added and select Go<br/>
<apex:inputText value="{!query}" id="query" style="width: 1200px; height: 40px;"/>
</apex:pageBlockSection>
</div>
</centre>
<right>
<apex:commandButton value="Go" action="{!runQuery}" style="align: right:100px;border-style:solid;
color:white; position:relative;background-color:rgba(13, 112, 165, 1);"/>
<apex:commandButton value="Cancel" action="{!cancel}" style="float: centre:200px ;border-style:solid;
color:rgb(21, 137, 238); background-color:white;" />
</right>
</apex:pageBlock>
<apex:pageBlock id="block1" rendered="{!block1}" >
<apex:pageBlockSection columns="1">
<apex:pageBlockTable value="{!wrapProductList}" var="accWrap">
<apex:column >
<apex:facet name="header">
<apex:inputCheckbox onclick="selectAllCheckboxes(this,'inputId')"/>
</apex:facet>
<apex:inputCheckbox value="{!accWrap.selected}" id="inputId"/>
</apex:column>
<apex:column headerValue="Name">
<apex:outputLink value="#">{!accWrap.acc.Name}</apex:outputLink>
</apex:column>
<apex:column headerValue="Product Code">
<apex:outputText value="{!accWrap.acc.ProductCode__c}" />
</apex:column>
<apex:column headerValue="Product Description">
<apex:outputText value="{!accWrap.acc.Product2Id__r.Product_Description__c}" />
</apex:column>
<apex:column headerValue="Unit Price">
<apex:outputText value="{!accWrap.acc.UnitPrice__c}" />
</apex:column>
<apex:column headerValue="Standard Price">
<apex:outputText value="{!accWrap.acc.UseStandardPrice__c}" />
</apex:column>
</apex:pageBlockTable>
<apex:commandButton value="Next" action="{!processSelected}" style="float: right;border-style:solid;
color:white; background-color:rgba(13, 112, 165, 1);align-items: right;justify-content:right;"/>
</apex:pageBlockSection>
</apex:pageBlock>
</div>
<div>
<apex:pageBlock id="block2" rendered="{!block2}" >
<apex:pageblockSection title="All Products" collapsible="false" columns="3">
<apex:pageBlockTable value="{!selectedProduct}" var="c" id="table2" title="Selected Products">
<apex:column value="{!c.Name}" headerValue="Product Name"/>
<apex:column headerValue="Sales Price">
<apex:inputText value="{!c.UnitPrice__c}" id="UnitPrice" />
</apex:column>
<apex:column headerValue="Discount">
<apex:inputText value="{!discount}" id="discount" />
</apex:column>
<apex:column headerValue="Quantity">
<apex:inputText value="{!quantity}" id="quantity" />
</apex:column>
</apex:pageBlockTable>
</apex:pageblockSection>
<apex:commandButton action="{!GoBack}" value="Back" style="border-style:solid;
color:white; background-color:rgba(13, 112, 165, 1);"/>
<apex:commandButton action="{!saveproduct}" value="Save" style="float: right;border-style:solid;
color:white; background-color:rgba(13, 112, 165, 1);"/>
<apex:commandButton value="Cancel" oncomplete="doRedirect()" style="float: right;border-style:solid;
color:rgb(21, 137, 238); background-color:white;"/>
</apex:pageBlock>
</div>
</apex:form>
</apex:page>
Now I am getting 'Method already defined: processSelected void ProductSearchPopupController.processSelected() from the type ProductSearchPopupController at line 99 column 17' error
can you correct the entire code. Its a little urgent
I am getting above errors. Can you correct them
Below is the updated code
global class ProductSearchPopupController {
public String query {get; set;}
public List<PricebookEntry__c> products {get; set;}
public List<wrapProduct> wrapProductList {get; set;}
public List<PricebookEntry__c> selectedProduct{get;set;}
public List<QuoteLineitem__c> quoteLineList{get;set;}
public List<wrapProduct> selectedWrapperList{get;set;}
public Boolean normalList{get;set;}
public Boolean selectedList{get;set;}
public Boolean block{get;set;}
public Boolean block1{get;set;}
public Boolean block2{get;set;}
public String SalesPrice {get; set;}
public integer Discount {get; set;}
public String Quantity {get; set;}
public String ServiceDate {get; set;}
Id recordId;
public ProductSearchPopupController(ApexPages.StandardController controller){
recordId = controller.getId();
SalesPrice='';
Discount=0;
Quantity='';
ServiceDate='';
system.debug('recordId '+recordId);
wrapProductList = new List<wrapProduct>();
selectedWrapperList = new List<wrapProduct>();
normalList = true;
selectedList = false;
block = true;
block1 = false;
block2 = false;
}
public PageReference runQuery(){
if(Test.isRunningTest()){
query='Test';
}
system.debug('this query '+query);
if(query == null || query == ''){
system.debug('query '+query);
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Info,'Please enter the product to be searched'));
return null;
}
List<List<PricebookEntry__c>> searchResults=[FIND :query IN ALL FIELDS RETURNING PricebookEntry__c (id, Name, ProductCode__c, Product2Id__r.Product_Description__c,UnitPrice__c, UseStandardPrice__c)];
system.debug('searchResults '+searchResults[0].size());
System.debug('searchResults result ' + searchResults[0]);
System.debug('oth result ' + SearchResults[0]);
if(searchResults[0]!=null){
for(PricebookEntry__c a: searchResults[0]) {
// As each Account is processed we create a new wrapAccount object and add it to the wrapAccountList
wrapProductList.add(new wrapProduct(a));
block = true; block1 = true; block2 = false;
}
}
return null;
}
public void processSelected() {
selectedProducts = new List<Product2__c>();
for(wrapProducts wrapProductObj : wrapAccountList) {
if(wrapProductObj.selected == true) {
selectedProducts.add(wrapProductObj.acc);
}
}
}
// This is our wrapper/container class. A container class is a class, a data structure, or an abstract data type whose instances are collections of other objects. In this example a wrapper class contains both the standard salesforce object Account and a Boolean value
public class wrapProducts {
public Product2__c acc {get; set;}
public Boolean selected {get; set;}
//This is the contructor method. When we create a new wrapAccount object we pass a Account that is set to the acc property. We also set the selected value to false
public wrapProducts(Product2__c a) {
acc = a;
selected = false;
}
}
public PageReference ProceedWithSelectedToNextPage(){
selectedWrapperList = new List<wrapProduct>();
normalList = false;
selectedList = true;
for(wrapProduct selectedWrapObj: wrapProductList){
system.debug('selectedWrapObj.selected ---------'+selectedWrapObj.selected);
if(selectedWrapObj.selected == true)
selectedWrapperList.add(selectedWrapObj);
}
system.debug('selectedWrapperList size ---------'+selectedWrapperList.size());
PageReference pageRef = new PageReference('/apex/AccountOpportunityTwoPage');
pageRef.setRedirect(false);
return pageRef;
}
public void SelectProduct() {
selectedProduct = new List<PricebookEntry__c>();
for(wrapProduct wrapProductObj : wrapProductList) {
if(wrapProductObj.selected == true) {
selectedProduct.add(wrapProductObj.acc);
block = false; block1 = false; block2 = true;
}
}
}
public void GoBack() {
block = true;
block1 = true;
block2 = false;
}
global class wrapProduct {
public PricebookEntry__c acc {get;set;}
public Boolean selected {get;set;}
public wrapProduct(PricebookEntry__c p) {
this.acc = p;
this.selected = false;
}
}
public pagereference saveproduct(){
List<QuoteLineitem__c> quoteLineList = new List<QuoteLineitem__c>();
if(Test.isRunningTest()){
insertTestData();
}
if(!selectedProduct.isEmpty()){
for(PricebookEntry__c sp:selectedProduct){
system.debug('sp '+sp);
QuoteLineitem__c qli = new QuoteLineitem__c();
qli.QuotesId__c = recordId;
qli.ListPrice__c = sp.UnitPrice__c;
qli.UnitPrice__c = sp.UnitPrice__c;
qli.Product2Id__c = sp.Product2Id__c;
if(Discount!=0 || Discount!=null){
qli.Discount__c = Discount;
}
quoteLineList.add(qli);
}
if(quoteLineList.size()>0){
insert quoteLineList;
PageReference pageRef = new PageReference('https://proseraa.lightning.force.com/lightning/r/Quotes__c/'+recordId+'/view');
pageRef.setRedirect(true);
return pageRef;
}
}
return null;
}
public void insertTestData(){
Product2__c testProduct = new Product2__c();
testProduct.Name='Test product';
insert testProduct;
PricebookEntry__c testpbe = new PricebookEntry__c();
testpbe.Name='Test PriceBookEntry';
testpbe.UnitPrice__c =123;
testpbe.Product2Id__c=testProduct.Id;
insert testpbe;
selectedProduct.add(testpbe);
}
}
I am getting errors
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_variables.htm
Hope this helps you
If this helps kindly mark it as solved so that it may help others in future.
Thanks and Regards
public String query {get; set;}
public List<PricebookEntry__c> products {get; set;}
public List<wrapProduct> wrapProductList {get; set;}
public List<PricebookEntry__c> selectedProduct{get;set;}
public List<QuoteLineitem__c> quoteLineList{get;set;}
public List<wrapProduct> selectedWrapperList{get;set;}
public List<Product2__c> processSelected{get;set;}
public Boolean normalList{get;set;}
public Boolean selectedList{get;set;}
public Boolean block{get;set;}
public Boolean block1{get;set;}
public Boolean block2{get;set;}
public String SalesPrice {get; set;}
public integer Discount {get; set;}
public String Quantity {get; set;}
public String ServiceDate {get; set;}
Id recordId;
public ProductSearchPopupController(ApexPages.StandardController controller){
recordId = controller.getId();
SalesPrice='';
Discount=0;
Quantity='';
ServiceDate='';
system.debug('recordId '+recordId);
wrapProductList = new List<wrapProduct>();
selectedWrapperList = new List<wrapProduct>();
normalList = true;
selectedList = false;
block = true;
block1 = false;
block2 = false;
}
public PageReference runQuery(){
if(Test.isRunningTest()){
query='Test';
}
system.debug('this query '+query);
if(query == null || query == ''){
system.debug('query '+query);
ApexPages.addmessage(new ApexPages.message(ApexPages.severity.Info,'Please enter the product to be searched'));
return null;
}
List<List<PricebookEntry__c>> searchResults=[FIND :query IN ALL FIELDS RETURNING PricebookEntry__c (id, Name, ProductCode__c, Product2Id__r.Product_Description__c,UnitPrice__c, UseStandardPrice__c)];
system.debug('searchResults '+searchResults[0].size());
System.debug('searchResults result ' + searchResults[0]);
System.debug('oth result ' + SearchResults[0]);
if(searchResults[0]!=null){
for(PricebookEntry__c a: searchResults[0]) {
// As each Account is processed we create a new wrapAccount object and add it to the wrapAccountList
wrapProductList.add(new wrapProduct(a));
block = true; block1 = true; block2 = false;
}
}
return null;
}
public void processSelected() {
List<Product2__c> strList = new List<Product2__c>();
for(wrapProducts wrapProductObj : wrapAccountList) {
if(wrapProductObj.selected == true) {
selectedProducts.add(wrapProductObj.acc);
}
}
}
// This is our wrapper/container class. A container class is a class, a data structure, or an abstract data type whose instances are collections of other objects. In this example a wrapper class contains both the standard salesforce object Account and a Boolean value
public class wrapProducts {
public Product2__c acc {get; set;}
public Boolean selected {get; set;}
//This is the contructor method. When we create a new wrapAccount object we pass a Account that is set to the acc property. We also set the selected value to false
public wrapProducts(Product2__c a) {
acc = a;
selected = false;
}
}
public PageReference ProceedWithSelectedToNextPage(){
selectedWrapperList = new List<wrapProduct>();
normalList = false;
selectedList = true;
for(wrapProduct selectedWrapObj: wrapProductList){
system.debug('selectedWrapObj.selected ---------'+selectedWrapObj.selected);
if(selectedWrapObj.selected == true)
selectedWrapperList.add(selectedWrapObj);
}
system.debug('selectedWrapperList size ---------'+selectedWrapperList.size());
PageReference pageRef = new PageReference('/apex/AccountOpportunityTwoPage');
pageRef.setRedirect(false);
return pageRef;
}
public void SelectProduct() {
selectedProduct = new List<PricebookEntry__c>();
for(wrapProduct wrapProductObj : wrapProductList) {
if(wrapProductObj.selected == true) {
selectedProduct.add(wrapProductObj.acc);
block = false; block1 = false; block2 = true;
}
}
}
public void GoBack() {
block = true;
block1 = true;
block2 = false;
}
global class wrapProduct {
public PricebookEntry__c acc {get;set;}
public Boolean selected {get;set;}
public wrapProduct(PricebookEntry__c p) {
this.acc = p;
this.selected = false;
}
}
public pagereference saveproduct(){
List<QuoteLineitem__c> quoteLineList = new List<QuoteLineitem__c>();
if(Test.isRunningTest()){
insertTestData();
}
if(!selectedProduct.isEmpty()){
for(PricebookEntry__c sp:selectedProduct){
system.debug('sp '+sp);
QuoteLineitem__c qli = new QuoteLineitem__c();
qli.QuotesId__c = recordId;
qli.ListPrice__c = sp.UnitPrice__c;
qli.UnitPrice__c = sp.UnitPrice__c;
qli.Product2Id__c = sp.Product2Id__c;
if(Discount!=0 || Discount!=null){
qli.Discount__c = Discount;
}
quoteLineList.add(qli);
}
if(quoteLineList.size()>0){
insert quoteLineList;
PageReference pageRef = new PageReference('https://proseraa.lightning.force.com/lightning/r/Quotes__c/'+recordId+'/view');
pageRef.setRedirect(true);
return pageRef;
}
}
return null;
}
public void insertTestData(){
Product2__c testProduct = new Product2__c();
testProduct.Name='Test product';
insert testProduct;
PricebookEntry__c testpbe = new PricebookEntry__c();
testpbe.Name='Test PriceBookEntry';
testpbe.UnitPrice__c =123;
testpbe.Product2Id__c=testProduct.Id;
insert testpbe;
selectedProduct.add(testpbe);
}
}
I corrected one error now the rest two can you help me correct its related to a for loop