Необходимо создать список продуктов с несколькими возможностями для записи о нескольких лицензиях, нажав кнопку «Создать лицензию» на странице сведений о возможностях. - PullRequest
0 голосов
/ 19 февраля 2019

Мне нужно создать лицензионную запись с именем лицензии, которое представляет собой автонумерацию, дату начала, дату окончания, связанную с объектом возможности.в случае возможности у меня есть дата начала лицензии и срок подписки (в месяцах), поэтому, когда я заполнил оба эти поля и возможность, имеющая список продуктов.На странице сведений о возможностях я создал кнопку «Создать лицензию», чтобы при нажатии на нее автоматически делались все возможные вычисления и генерировалась запись лицензии.Запомните лицензию, которую я пытаюсь создать не более чем на 1 год, поэтому, если возможность составляет 24 месяца, будут созданы две лицензии, а если она будет 18 месяцев, то также две лицензии.

Мой вопрос: как я могу получитьсписок возможностей продукт список возможностей на каждой странице сведений о лицензии, когда мы нажимаем кнопку «Создать лицензию»

Код Apex:

public class GetLicense {
private final Opportunity o;
public GetLicense(ApexPages.StandardController con){
    this.o = (Opportunity)con.getRecord();        
}    
public static boolean Recursion=true;
public PageReference  Licensedetail(){
    Id theId = ApexPages.currentPage().getParameters().get('id');
    System.debug('@@'+theId);       
    List<License__c> lics=new List<License__c>();
    List<License_Line__c> llclist =new List<License_Line__c>();
    List<Opportunity> oplist=[Select Id,Name,License_Start_Date__c,Subscription_Term_inmonths__c from Opportunity where Id =:theId];        
    List<OpportunityLineItem> olIlist=[SELECT Product2.Name FROM OpportunityLineItem WHERE OpportunityId =:theId];
    for(Opportunity o:oplist){  
        //n is number of Licenses
        Integer n=Math.ceil(o.Subscription_Term_inmonths__c/12).intValue();            
        Date date1=o.License_Start_Date__c;         
        for(Integer i=1;i<=n;i++){
        if(theId != null   && date1!=null ){                    
            License__c li = new License__c();    
            License_Line__c llc =new License_Line__c();           
            li.Opportunity__c=o.Id;
            li.Start_Date__c=date1; 
            //date1=date1-1;
           li.End_Date__c= date1.addmonths(12)-1;                
            if(i==n){
                 li.End_Date__c=date1.addMonths(Math.ceil(o.Subscription_Term_inmonths__c-((n-1)*12)).intValue())-1;                   
            }
             date1=li.End_Date__c+1;               
            lics.add(li);

            //
            //ll.Product__c=o.Pricebook2Id;
          //llclist.add(ll);
        }
        }


    }          
    insert lics;
    for(OpportunityLineItem objQ : olIlist){
              License_Line__c ll =new License_Line__c();
        License__c li = new License__c();
        ll.License__c=li.Id;
                ll.Product__c=objQ.Product2Id ;
        llclist.add(ll);
            }
    if(!llclist.isEmpty()){
            insert llclist;
        }
  //  insert llclist;
    Recursion = false;
    // Redirect the user back to the original page
    PageReference pageRef = new PageReference('/' + theId);
    pageRef.setRedirect(true);
    return pageRef;
}
}

Страница Visualforce:

 <apex:page standardController="Opportunity" extensions="GetLicense" action="{!Licensedetail}" >
<apex:sectionHeader title="Auto-Running Apex Code"/>
<apex:outputPanel >
    You tried calling Apex Code from a button.  If you see this page, 
    something went wrong.  You should have 
    been redirected back to the record you clicked the button from.
</apex:outputPanel>
</apex:page>
...