1

Can any one help me out on this.How to create a Table in visualforce page which is in PDF format.Based on the years the the product name should get dentified in a quarters and get added.Any suggestion plz.

I get the Table Created as :

ProductName   Q1     Q2     Q3     Q4    Total 
     BXCD     100    200   300    400     1000
     BCRX      50    150   250    350      800
     VERO     200    300   400    500     1400
SubTotal       
GrandTotal

But the table should get displayed as :

ProductName   Year     Q1     Q2     Q3     Q4    Total 
        BXCD   2014    100    200   300    400     1000
               2015    100    200                  300
        BCRX   2014     50    150   250    350      800
               2015                 300             300
        VERO   2014    200    300   400    500     1400
    SubTotal           350    650    950    1250    3200 
    GrandTotal         350    650    950    1250    3200

Visual force code :

<h3>OpportunityForecast Details</h3>

<table class="bordered">
        <thead>
            <tr>
                <td class="header-table-heading" bgcolor="#C0C0C0" colspan="3"  ></td>
                <td class="header-table-heading" bgcolor="#C0C0C0" colspan="5" >FORECAST DATE</td>
               </tr>
               <tr>              
                <td class="header-table-heading" bgcolor="#C0C0C0">Opportunity Name</td>
                <td class="header-table-heading" bgcolor="#C0C0C0">PartNumbers</td>
                <td class="header-table-heading" bgcolor="#C0C0C0"></td>
                <td class="header-table-heading" bgcolor="#C0C0C0">Q1 2014 </td>
                <td class="header-table-heading" bgcolor="#C0C0C0">Q2 2014 </td>
                <td class="header-table-heading" bgcolor="#C0C0C0">Q3 2014 </td>
                <td class="header-table-heading" bgcolor="#C0C0C0">Q4 2014 </td>
                <!--<td class="header-table-heading" bgcolor="#C0C0C0">Quantity</td>
                <td class="header-table-heading" bgcolor="#C0C0C0">Price</td>
                <td class="header-table-heading" bgcolor="#C0C0C0">Amount</td>
                <td class="header-table-heading" bgcolor="#C0C0C0">Quarter</td>
                <td class="header-table-heading" bgcolor="#C0C0C0">Month</td>
                <td class="header-table-heading" bgcolor="#C0C0C0">Actual Price</td>-->
                <td class="header-table-heading" bgcolor="#C0C0C0">Year</td>
                <!--<td class="header-table-heading" bgcolor="#C0C0C0">Date</td>-->
               <!-- <td class="header-table-heading" bgcolor="#C0C0C0">MonthText</td>-->
                <!--<td class="header-table-heading" bgcolor="#C0C0C0">ForecastDate</td>
                <td class="header-table-heading" bgcolor="#C0C0C0">ForecastName</td>-->
                <td rowspan="0" class="header-table-heading">Grand<br/>Total </td> 
              </tr>
         </thead>
        <tbody>
           <apex:repeat value="{!disp_list}" var="opf">
            <tr>

                <td class="header-table-data"><apex:outputText value="{!opf.gmod_Opportunity}"/></td>
                <td class="header-table-data"><apex:outputText value="{!opf.gmod_Product}"/></td>
                <td class="header-table-data" >Forecast Qty<br/>ForecastAmt<br/></td>
                <td class="header-table-data"><apex:outputText value="{!Quarter1[opf.gmod_Product]}"/>,<br/>$<apex:outputText value="{!Amount1[opf.gmod_Product]}"/>,<br/></td>
                <td class="header-table-data"><apex:outputText value="{!Quarter2[opf.gmod_Product]}"/>,<br/>$<apex:outputText value="{!Amount2[opf.gmod_Product]}"/>,<br/></td>
                <td class="header-table-data"><apex:outputText value="{!Quarter3[opf.gmod_Product]}"/>,<br/>$<apex:outputText value="{!Amount3[opf.gmod_Product]}"/>,<br/></td>
                <td class="header-table-data"><apex:outputText value="{!Quarter4[opf.gmod_Product]}"/>,<br/>$<apex:outputText value="{!Amount4[opf.gmod_Product]}"/>,<br/></td>
                <!--<td class="header-table-data"><apex:outputText value="{!opf.gmod_Quantity }"/></td>
                <td class="header-table-data"><apex:outputText value="{!opf.gmod_Price }"/></td>
                <td class="header-table-data"><apex:outputText value="{!opf.gmod_Amount }"/></td>
                <td class="header-table-data"><apex:outputText value="{!opf.gmod_Quarter }"/></td>
                <td class="header-table-data"><apex:outputText value="{!opf.gmod_Month }"/></td>
                <td class="header-table-data"><apex:outputText value="{!opf.Actual_Price }"/></td>-->
                <td class="header-table-data"><apex:outputText value="{!opf.gmod_Year }"/></td>
                <!--<td class="header-table-data"><apex:outputText value="{!opf.gmod_date }"/></td> -->
               <!-- <td class="header-table-data"><apex:outputText value="{!opf.gmod_Month_Text }"/></td> -->
                <!--<td class="header-table-data"><apex:outputText value="{!opf.Forecast_Date }"/></td>
                <td class="header-table-data"><apex:outputText value="{!opf.Name }"/></td>-->
               <!-- <td rowspan="1" style="text-align:left" align="right" class="header-table-heading"> {!subtotalofquantity }<br/>

                     {!subtotalofAmount}<br/></td>-->
                <td class="header-table-data"><apex:outputText value="{!Quarter1[opf.gmod_Product]+Quarter2[opf.gmod_Product]+Quarter3[opf.gmod_Product]+Quarter4[opf.gmod_Product]}"/>,<br/>$<apex:outputText value="{!Amount1[opf.gmod_Product]+Amount2[opf.gmod_Product]+Amount3[opf.gmod_Product]+Amount4[opf.gmod_Product]}"/>,<br/></td>



             </tr>
           </apex:repeat> 
       </tbody>
       <tfoot>
                   <tr class="foot">

                        <tr>

                     <td colspan="2" style="text-align:left" align="right" class="header-table-data" >SubTotal :</td>
                     <td colspan="0"  class="header-table-data"  >Forecast Qty<br/>ForecastAmt<br/> </td>
                     <td colspan="1"  class="header-table-data"><!--<apex:outputText value="{!Quarter1[opf.gmod_Product]+Quarter1[opf.gmod_Product]+Quarter1[opf.gmod_Product]}"/>-->{!subtotalofQuantity},<br/>

                     ${!subtotalofAmount },<br/></td>


                    <!--<td colspan="1" style="text-align:left" align="right" class="header-table-data"> <apex:outputText value="{!Quarter1[opf.gmod_Product]}"/><br/>

                     <apex:outputText value="{!Amount1[opf.gmod_Product]}"/><br/></td>-->
                    <!-- <td class="header-table-data"  colspan="1" ><apex:outputText value="{!Quarter1[opf.gmod_Product]+Quarter2[opf.gmod_Product]+Quarter3[opf.gmod_Product]+Quarter4[opf.gmod_Product]}"/><br/><apex:outputText value="{!Amount1[opf.gmod_Product]+Amount2[opf.gmod_Product]+Amount3[opf.gmod_Product]+Amount4[opf.gmod_Product]}"/><br/></td>-->

                    <td colspan="1"  class="header-table-data"> {!subtotalofquantity },<br/>

                     ${!subtotalofAmount },<br/></td>
                     <td colspan="1"  class="header-table-data"> {!subtotalofquantity },<br/>

                     ${!subtotalofAmount },<br/></td>
                     <td colspan="1"  class="header-table-data"> {!subtotalofquantity },<br/>

                     ${!subtotalofAmount },<br/></td>
                     <td colspan="1"  class="header-table-data"> {!subtotalofquantity },<br/>

                     ${!subtotalofAmount},<br/></td>

                     </tr> 
                         <tr>

                       <td colspan="2" style="text-align:left"  align="right" class="header-table-heading">GrandTotal</td>
                       <td colspan="0"  class="header-table-heading"  >Forecast Qty<br/>ForecastAmt<br/> </td>
                       <td colspan="1"   class="header-table-heading"> {!subtotalofquantity },<br/>

                     ${!subtotalofAmount},<br/></td>
                      <td colspan="1"  class="header-table-heading"> {!subtotalofquantity },<br/>

                     ${!subtotalofAmount},<br/></td>
                     <td colspan="1"  class="header-table-heading"> {!subtotalofquantity },<br/>

                    $ {!subtotalofAmount},<br/></td>
                     <td colspan="1"  class="header-table-heading"> {!subtotalofquantity },<br/>

                     ${!subtotalofAmount},<br/></td>

                      <td colspan="1"  class="header-table-heading"> {!subtotalofquantity },<br/>

                     ${!subtotalofAmount},<br/></td>

                       </tr> 

                   </tr>

               </tfoot> 


                  </table> 

APEX CODE

    public with sharing class QuoteContentController {

          public Map<String,Decimal> PartMap{get;set;}

         //   public Map<String,Decimal> PartMapQuantity{get;set;}

           public Map<string,Decimal> Quarter1{get;set;}

           public Map<string,Decimal> Quarter2{get;set;}

           public Map<string,Decimal> Quarter3{get;set;}

           public Map<string,Decimal> Quarter4{get;set;}

           public Map<string,Decimal> Amount1{get;set;}

           public Map<string,Decimal> Amount2{get;set;}

           public Map<string,Decimal> Amount3{get;set;}

           public Map<string,Decimal> Amount4{get;set;}

           public Competitor__c com{get;set;}

           public gmod__Opportunity_Forecast__c opflist{get;set;}

           public Id qId {get;set;}

           Public string all{get;set;}

    //Declare a wrapper class  

           public class Wrapperclass{

     //custom wrapper datatype  

           Public string Name{get;set;}  
           Public string AccountType{get;set;}  
           Public date todaysDate{get;set;}  
           Public date Expected_Order_Date{get;set;}
           Public string Probability{get;set;}  
           Public string Internal_Comment{get;set;}  
           Public string External_Comment{get;set;}  

           Public string Segment{get;set;}  
           Public string Application{get;set;}  
           Public string Persona{get;set;}  
           Public string Geogrpahy{get;set;}  

           Public string PartNumbers{get;set;}  
           Public Decimal  Price{get;set;}  
           Public Decimal End_Customer_Price{get;set;}  
           Public Decimal Quantity {get;set;}  
           Public Decimal Total{get;set;}  

           Public string RFQ_justification{get;set;}  
           Public string Main_Customer_of_Account{get;set;}  
           Public string Bridgelux_competition_at_account{get;set;}
           Public string Geographic_regions_serviced{get;set;}  
           Public string Annual_lighting_revenue{get;set;}  
           Public string Annual_LED_revenue_or_percent{get;set;}  
           Public string Annual_purchases_of_LED_light_sources{get;set;}
           Public string Percent_of_LED_purchases_that_are_COB{get;set;}  
           Public string Other_information{get;set;}  

           Public string Product_Series{get;set;}  
           Public string Volume{get;set;} 
           Public string Date_Price_is_Valid{get;set;} 

           Public string gmod_Opportunity{get;set;}
           Public string gmod_Product{get;set;}
           Public Decimal gmod_Quantity{get;set;}
           Public Decimal gmod_Price{get;set;}
           Public Decimal gmod_Quarter{get;set;}
           Public Decimal gmod_Month{get;set;}
           Public Decimal gmod_Amount{get;set;}
           Public Decimal Actual_Price{get;set;}
           Public Decimal  gmod_Year{get;set;}
           Public Date gmod_date{get;set;}
           Public string gmod_Month_Text{get;set;}
           Public Date  Forecast_Date{get;set;}
          Public wrapperClass(){} 

      }
        Public QuoteContentController(){}
       Public QuoteContentController(ApexPages.StandardController controller) {
     qId=Apexpages.currentPage().getparameters().get('Id');
     }
     Public Integer subtotalofquantity{get;set;}
     Public Integer subtotalofamount{get;set;}
     Public List<wrapperClass> disp_list {get;set;}{
     subtotalofquantity=0;
     subtotalofamount=0;
  //define constructor to instantiate the wrapper data type 
    disp_list=new list<wrapperclass>();
    //Query all the list 
    list<Quote> q =[select id ,Name ,QuoteNumber,Effective_Date__c ,Comments__c ,Quote.Opportunity.id,Quote.Opportunity.Probability,Quote.Opportunity.AccSegment__c,Quote.Opportunity.AccApplication__c,Quote.Opportunity.Persona__c,Quote.Opportunity.Region__c from Quote whereid=:apexpages.currentpage().getparameters().get('id')];
 Opportunity opp =[select id , Name, (select id, Quantity, product2id from OpportunityLineItems), probability, AccSegment__c from Opportunity where opportunity.Id =:q[0].opportunity.id];
 list<gmod__Opportunity_Forecast__c>  opflist = [Select id ,Name ,gmod__opportunity__r.id,gmod__Product__c,gmod__Quantity__c,gmod__Price__c , gmod__Month__c,    gmod__date__c,  gmod__Quarter__c ,gmod__Amount__c ,Actual_Price__c ,gmod__Year__c ,gmod__Month_Text__c ,Forecast_Date__c,gmod__Product__r.Name ,gmod__opportunity__r.name from gmod__Opportunity_Forecast__c WHERE gmod__Product__c!=null and gmod__opportunity__r.id =:opp.id  order by gmod__Month__c asc ]; 

//Iterate through each list to extract the values and add it to the custom wrapper data type  
            PartMap = new Map<String,Decimal>();

          //  PartMapQuantity = new Map<String,Decimal>();

            Quarter1 = new Map<String,Decimal>();

            Quarter2 = new Map<String,Decimal>();

            Quarter3 = new Map<String,Decimal>();

            Quarter4 = new Map<String,Decimal>();

            Amount1 = new Map<String,Decimal>();

            Amount2= new Map<String,Decimal>();

            Amount3 = new Map<String,Decimal>();

            Amount4 = new Map<String,Decimal>();

            for(gmod__Opportunity_Forecast__c oppforecast : opflist)
            {
           if(oppforecast .gmod__Month_Text__c=='Jan' || oppforecast .gmod__Month_Text__c=='Feb'|| oppforecast.gmod__Month_Text__c=='Mar')
                       {
   if(Quarter1.containskey(oppforecast.gmod__Product__r.Name ))
                                 {
                                      Quarter1.put(oppforecast.gmod__Product__r.Name,Quarter1.get(oppforecast.gmod__Product__r.Name) + oppforecast.gmod__Quantity__c);             
                                 Amount1.put(oppforecast.gmod__Product__r.Name,Amount1.get(oppforecast.gmod__Product__r.Name) + oppforecast.gmod__Amount__c);

                                  }
                            else
                                  {
 Quarter1.put(oppforecast.gmod__Product__r.Name, oppforecast.gmod__Quantity__c);
            Amount1.put(oppforecast.gmod__Product__r.Name,oppforecast.gmod__Amount__c);
 wrapperclass w = new wrapperclass();
 w.gmod_Opportunity = oppforecast.gmod__Opportunity__r.Name;
 w.gmod_Product = oppforecast.gmod__Product__r.Name;
 w.gmod_Quantity =oppforecast.gmod__Quantity__c;
 w.gmod_Price=oppforecast.gmod__Price__c;
 w.Name =oppforecast.Name;
 w.gmod_Quarter=oppforecast.gmod__Quarter__c;
 w.gmod_Month=oppforecast.gmod__Month__c;
 w.gmod_Amount=oppforecast.gmod__Amount__c;
 w.Actual_Price=oppforecast.Actual_Price__c;
 w.gmod_Year=oppforecast.gmod__Year__c;
 w.gmod_date=oppforecast.gmod__date__c;
 w.gmod_Month_Text=oppforecast.gmod__Month_Text__c;
 w.Forecast_Date=oppforecast.Forecast_Date__c;
 disp_list.add(w);
                                } 
                             }
 if(oppforecast.gmod__Month_Text__c=='Apr'||oppforecast.gmod__Month_Text__c=='May'|| oppforecast.gmod__Month_Text__c=='June')
                                      {
    if(Quarter2.containskey(oppforecast.gmod__Product__r.Name))
                                           {
               Quarter2.put(oppforecast.gmod__Product__r.Name,Quarter2.get(oppforecast.gmod__Product__r.Name) + oppforecast.gmod__Quantity__c);             
                                               Amount2.put(oppforecast.gmod__Product__r.Name,Amount2.get(oppforecast.gmod__Product__r.Name) + oppforecast.gmod__Amount__c);
                                            }
                                  else
                                             {

                                                Quarter2.put(oppforecast.gmod__Product__r.Name, oppforecast.gmod__Quantity__c);
                                                Amount2.put(oppforecast.gmod__Product__r.Name,oppforecast.gmod__Amount__c);

                                              /* wrapperclass w = new wrapperclass();

                                                w.gmod_Opportunity = oppforecast.gmod__Opportunity__r.Name;

                                                w.gmod_Product = oppforecast.gmod__Product__r.Name;

                                                w.gmod_Quantity =oppforecast.gmod__Quantity__c;

                                                w.gmod_Price=oppforecast.gmod__Price__c;

                                                w.Name =oppforecast.Name;

                                                w.gmod_Quarter=oppforecast.gmod__Quarter__c;

                                                w.gmod_Month=oppforecast.gmod__Month__c;

                                                w.gmod_Amount=oppforecast.gmod__Amount__c;

                                                w.Actual_Price=oppforecast.Actual_Price__c;

                                                w.gmod_Year=oppforecast.gmod__Year__c;

                                                w.gmod_date=oppforecast.gmod__date__c;

                                                w.gmod_Month_Text=oppforecast.gmod__Month_Text__c;

                                                w.Forecast_Date=oppforecast.Forecast_Date__c;

                                                disp_list.add(w);*/

                                            }
                               }
                     if(oppforecast.gmod__Month_Text__c=='Jul' || oppforecast.gmod__Month_Text__c=='Aug'|| oppforecast.gmod__Month_Text__c=='Sept')

                            {

                                  if(Quarter3.containskey(oppforecast.gmod__Product__r.Name))
                                          {
                                              Quarter3.put(oppforecast.gmod__Product__r.Name,Quarter3.get(oppforecast.gmod__Product__r.Name) + oppforecast.gmod__Quantity__c);             
                                              Amount3.put(oppforecast.gmod__Product__r.Name,Amount3.get(oppforecast.gmod__Product__r.Name) + oppforecast.gmod__Amount__c);
                                           }
                                 else
                                           {

                                              Quarter3.put(oppforecast.gmod__Product__r.Name, oppforecast.gmod__Quantity__c);
                                              Amount3.put(oppforecast.gmod__Product__r.Name,oppforecast.gmod__Amount__c);

                                             /* wrapperclass w = new wrapperclass();

                                              w.gmod_Opportunity = oppforecast.gmod__Opportunity__r.Name;

                                              w.gmod_Product = oppforecast.gmod__Product__r.Name;

                                              w.gmod_Quantity =oppforecast.gmod__Quantity__c;

                                              w.gmod_Price=oppforecast.gmod__Price__c;

                                              w.Name =oppforecast.Name;

                                              w.gmod_Quarter=oppforecast.gmod__Quarter__c;

                                              w.gmod_Month=oppforecast.gmod__Month__c;

                                              w.gmod_Amount=oppforecast.gmod__Amount__c;

                                              w.Actual_Price=oppforecast.Actual_Price__c;

                                              w.gmod_Year=oppforecast.gmod__Year__c;

                                              w.gmod_date=oppforecast.gmod__date__c;

                                              w.gmod_Month_Text=oppforecast.gmod__Month_Text__c;

                                              w.Forecast_Date=oppforecast.Forecast_Date__c;

                                              disp_list.add(w);*/

                                        }
                                }
                  if(oppforecast.gmod__Month_Text__c=='Oct' || oppforecast.gmod__Month_Text__c=='Nov'|| oppforecast.gmod__Month_Text__c=='Dec')
                          {
                              if(Quarter4.containskey(oppforecast.gmod__Product__r.Name))
                                 {
                                          Quarter4.put(oppforecast.gmod__Product__r.Name,Quarter4.get(oppforecast.gmod__Product__r.Name) + oppforecast.gmod__Quantity__c);             
                                          Amount4.put(oppforecast.gmod__Product__r.Name,Amount4.get(oppforecast.gmod__Product__r.Name) + oppforecast.gmod__Amount__c);
                                 }
                         else
                                 {

                                          Quarter4.put(oppforecast.gmod__Product__r.Name, oppforecast.gmod__Quantity__c);
                                          Amount4.put(oppforecast.gmod__Product__r.Name,oppforecast.gmod__Amount__c);

                                         /* wrapperclass w = new wrapperclass();

                                          w.gmod_Opportunity = oppforecast.gmod__Opportunity__r.Name;

                                          w.gmod_Product = oppforecast.gmod__Product__r.Name;

                                          w.gmod_Quantity =oppforecast.gmod__Quantity__c;

                                          w.gmod_Price=oppforecast.gmod__Price__c;

                                          w.Name =oppforecast.Name;

                                          w.gmod_Quarter=oppforecast.gmod__Quarter__c;

                                          w.gmod_Month=oppforecast.gmod__Month__c;

                                          w.gmod_Amount=oppforecast.gmod__Amount__c;

                                          w.Actual_Price=oppforecast.Actual_Price__c;

                                          w.gmod_Year=oppforecast.gmod__Year__c;

                                          w.gmod_date=oppforecast.gmod__date__c;

                                          w.gmod_Month_Text=oppforecast.gmod__Month_Text__c;

                                          w.Forecast_Date=oppforecast.Forecast_Date__c;

                                         disp_list.add(w);*/
                                }

                       }


            for (Quote qt :q){
                 System.debug('Quote Size ++ '+q.size());
                 System.debug('opp forcast ++ ' +opflist.size());



                for(integer i=0;i<opflist.size();i++){

      subtotalofquantity+= integer.valueOf(opflist[i].gmod__Quantity__c);
      subtotalofamount+= integer.valueOf(opflist[i]. gmod__Amount__c);
      //Instantiating the wrapper SObject 
    wrapperclass w = new wrapperclass();
  //Assigning the wrapper variables from the SObject Fields in the database. 

                     w.gmod_Opportunity = opflist[i].gmod__Opportunity__r.Name;

                     w.gmod_Product = opflist[i].gmod__Product__r.Name;

                     w.gmod_Quantity =opflist[i].gmod__Quantity__c;

                     w.gmod_Price=opflist[i].gmod__Price__c;

                     w.Name =opflist[i].Name;

                     w.gmod_Quarter=opflist[i].gmod__Quarter__c;

                     w.gmod_Month=opflist[i].gmod__Month__c;

                     w.gmod_Amount=opflist[i]. gmod__Amount__c;

                     w.Actual_Price=opflist[i].Actual_Price__c;

                     w.gmod_Year=opflist[i].gmod__Year__c;

                     w.gmod_date=opflist[i].gmod__date__c;

                     w.gmod_Month_Text=opflist[i].gmod__Month_Text__c;

                     w.Forecast_Date=opflist[i].Forecast_Date__c; 


                                  //Adding everthing to the List  


                                // w.name =qt.name;

                               //   disp_list.add(w);

                                  // return disp_list;  
    }

    }
                  }       
                  }
             } //End of Class
1
  • 1
    It's always a good idea to post your code when creating a question. I don't know what would help you without knowing what you have already done. Mar 8, 2015 at 3:08

1 Answer 1

1

You can use wrapper class to hold product information along with year. create a wrapper variable for product year. and get this wrapper list sorted by either product id or name.

3
  • :Can u explain me with an example.I have used the wrapper class .When i create a forecast data for the current year and quater (i.e. Q1 2015) the value gets added into the previous year (i.e.Q1 2014).Any help is very much appreciated.
    – nikkey
    Mar 8, 2015 at 16:27
  • please post your visualforce page and controller class.
    – Anup
    Mar 9, 2015 at 8:15
  • :I have updated the visual force page and controller class.
    – nikkey
    Mar 9, 2015 at 8:45

Not the answer you're looking for? Browse other questions tagged .