-
ChatterFeed
-
0Best Answers
-
0Likes Received
-
0Likes Given
-
12Questions
-
48Replies
Replace the "Add products" page with visualforce
Hi all,
This is my scenario :
I use all standard objects to do my opportunity (opportunity, opportunity line items, quotes, products ...)
When I create an opportunity, I select my product by click on "Add product" button. When I choose my pricebook I click on "next" and select my products" and after "Select". I arrive in the "Add products" page to enter my sales price.
Here is my problem : I just want to know if it's possible to create a visualforce page or another things to replace this page and display some fields in term of the product type ?
Really thanks in advance
Cheers
Thomas
This is my scenario :
I use all standard objects to do my opportunity (opportunity, opportunity line items, quotes, products ...)
When I create an opportunity, I select my product by click on "Add product" button. When I choose my pricebook I click on "next" and select my products" and after "Select". I arrive in the "Add products" page to enter my sales price.
Here is my problem : I just want to know if it's possible to create a visualforce page or another things to replace this page and display some fields in term of the product type ?
Really thanks in advance
Cheers
Thomas
-
- Thomas Caillet
- September 28, 2018
- Like
- 0
Add opportunity line items with ProductCode in test trigger
Hello everybody,
I try in test class to add an opportunity line item WITH a product who have a product code.
But when I add : system.debug (OLI.PricebookEntry.Product2.ProductCode), I have a null value. Could you tell me why ?
Here is my test class :
Thomas
I try in test class to add an opportunity line item WITH a product who have a product code.
But when I add : system.debug (OLI.PricebookEntry.Product2.ProductCode), I have a null value. Could you tell me why ?
Here is my test class :
@isTest(SeeAllData=true)
private class TestCreateBillingCaseonCase {
@isTest static void TestCreateBillingCaseonCaseWithOpportunity2() {
// Test data setup
// Create an account with an opportunity, and then try to delete it
Opportunity opp = new Opportunity(Name='Opportunity TEST',
StageName='Prospecting',
AccountId='001w000001eDff7',
Starting_date__c=date.Today(),
CurrencyIsoCode='EUR',
CloseDate=System.today().addMonths(1)
);
insert opp;
Quote QUOT = new Quote (Name='TEST',BillingCountry = 'France' ,BillingPostalCode = '75009' ,ContactId='003w000001sI2o5',Unit_price_ex_VAT_per_room_booked__c=2,OpportunityId=opp.Id);
insert QUOT;
opp.SyncedQuoteId=QUOT.Id;
opp.StageName='Closed Won';
update opp;
Pricebook2 pb22 = new Pricebook2(Name='testDIE training');
insert pb22;
Product2 pro = new Product2(Name='Google', isActive=true, ProductCode = '4263E3EC-AB8F-4B3B-B004-F60E1FF15268.2');
insert pro;
Product2 pro2 = new Product2(Name='training', isActive=true, Billing_Type__c='Once');
insert pro2;
Product2 pro3 = new Product2(Name='test', isActive=true, Billing_Type__c='Monthly');
insert pro3;
PricebookEntry pbe =new PricebookEntry(unitprice=0.01,Product2Id=pro.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe;
PricebookEntry pbe2 =new PricebookEntry(unitprice=0.01,Product2Id=pro2.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe2;
PricebookEntry pbe3 =new PricebookEntry(unitprice=0.01,Product2Id=pro3.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe3;
Existing_feature__c exf = new Existing_feature__c (Name='TEST', FeatureId__c='123456', Product__c= pro2.Id);
insert exf;
OpportunityLineItem OLI = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe2.Id,ServiceDate=System.TODAY());
insert OLI;
OpportunityLineItem OLI2 = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe.Id,ServiceDate=System.TODAY());
insert OLI2;
OpportunityLineItem OLI3 = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe3.Id,ServiceDate=System.TODAY());
insert OLI3;
Case ca = new Case(Subject='New hotel : Availpro Registration',AccountId = opp.AccountId, Status ='in progress',Opportunity_Case__c = opp.Id);
insert ca;
// Perform test
Test.startTest();
ca.Status='Closed';
update ca;
Test.stopTest();
}
}
ThanksThomas
-
- Thomas Caillet
- November 30, 2017
- Like
- 0
CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, caused by: System.NullPointerException: Argument cannot be null.
Hello,
I have a probleme with a test class in sandbox.
Salesforce says that my field "Number_Of_Revenue_Installments__c" (line 153 and 193) is NULL but I tried to see this field with System.Debug() and it's not NULL.
Here is my trigger
Thomas
I have a probleme with a test class in sandbox.
Salesforce says that my field "Number_Of_Revenue_Installments__c" (line 153 and 193) is NULL but I tried to see this field with System.Debug() and it's not NULL.
Here is my trigger
trigger CreateBillingCaseAfterRegistration on Case (after update) {
if(trigger.new[0].Status=='closed' && (trigger.old[0].Status<>'closed') && (trigger.new[0].Subject=='New hotel : Availpro Registration') && (trigger.new[0].Opportunity_Case__c != null))
{
List<Features__c> Feat =new List<Features__c>();
List<Existing_feature__c> Existing =new List<Existing_feature__c>();
List<Quote> Quo=new List<Quote>();
List<Case> CaseOpp =new List<Case>();
case c1=new case(
Subject='New hotel : Kick off',
OwnerId='00Gw0000002lubt',
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Alfred_Scope__c = 'Configuration - Hotel',
Subject__c = 'New Hotel',
Type = 'Action Request',
Training_type__c = 'Kick-Off Call',
Kick_off_date__c=trigger.new[0].Kick_off_date__c,
Origin ='Automatic case',
AccountId = trigger.new[0].AccountId,
CurrencyIsoCode = trigger.new[0].CurrencyIsoCode);
CaseOpp.add(c1);
insert CaseOpp;
case c2=new case(
Subject='New hotel : Add / Modify Channel : Start Date Invoicing',
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_Status__c = 'Démarrage facturation',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_first_invoicing_date__c = trigger.new[0].Opportunity_Start_Date__c.addDays(61),
CurrencyIsoCode = trigger.new[0].CurrencyIsoCode);
insert c2;
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, PricebookEntry.Product2.ProductCode, Billing_Type__c, CurrencyIsoCode, UnitPrice,TotalPrice,Number_Of_Revenue_Installments__c, ServiceDate from OpportunityLineItem where opportunityId =: trigger.new[0].Opportunity_Case__c AND (PricebookEntry.Product2.ProductCode =: '4263E3EC-AB8F-4B3B-B004-F60E1FF15268.2' OR PricebookEntry.Product2.ProductCode =: '15EEC0D0-1591-4F29-BE62-039EBE1EE13D.2')])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
case c3=new case(
Subject='Deposit for'+' '+ProductName,
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Deposit Google Ads',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Description = 'Please see this doc to view the process : https://backoffice.availpro.com/search/Help/Index/HLP-258637'+'\n'+'Fee schedule :'+'\n'+'a. – of 25 rooms = 250 '+ trigger.new[0].CurrencyIsoCode +'\n'+'b. 26 to 50 rooms = 400 '+ trigger.new[0].CurrencyIsoCode +'\n'+'c. > of 50 rooms = 600 '+ trigger.new[0].CurrencyIsoCode,
CurrencyIsoCode = OLI.CurrencyIsoCode);
insert c3;
}
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, Billing_Type__c, CurrencyIsoCode, UnitPrice,TotalPrice,Number_Of_Revenue_Installments__c, ServiceDate from OpportunityLineItem where opportunityId =: trigger.new[0].Opportunity_Case__c AND PricebookEntry.Product2.Billing_Type__c <> 'Monthly'])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
case c3=new case(
Subject='New hotel : Invoicing :'+' '+ProductName,
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c=trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Facturation Set-up fees',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = OLI.TotalPrice,
CurrencyIsoCode = OLI.CurrencyIsoCode);
insert c3;
for(Existing_feature__c EXF: [SELECT Name, FeatureId__c, Product__c from Existing_feature__c where Product__c =: OLI.PricebookEntry.Product2Id])
{
String FeatureName= String.ValueOf(EXF.Name);
Features__c f1=new Features__c(
Name = FeatureName,
Feature_Id__c = string.valueof(EXF.FeatureId__c),
To_be_invoiced__c = true,
Date__c = datetime.now(),
Account__c = trigger.new[0].AccountId);
Feat.add(f1);
}
}
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, PricebookEntry.Product2.ProductCode, Billing_Type__c, CurrencyIsoCode, UnitPrice,TotalPrice,Number_Of_Revenue_Installments__c, ServiceDate from OpportunityLineItem where opportunityId =: trigger.new[0].Opportunity_Case__c AND PricebookEntry.Product2.Billing_Type__c =: 'Monthly' AND (PricebookEntry.Product2.ProductCode != '4263E3EC-AB8F-4B3B-B004-F60E1FF15268.2' AND PricebookEntry.Product2.ProductCode != '15EEC0D0-1591-4F29-BE62-039EBE1EE13D.2')])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
case c4=new case(
Subject=ProductName + ' must be activated on '+ OLI.ServiceDate.format(),
Description='This product has been subscribed by the customer and must be activated on the date mentioned in subject. Please update date if necessary',
OwnerId = '00Gw0000002m46x',
AccountId = trigger.new[0].AccountId,
Alfred_Scope__c = 'Configuration - Hotel',
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Subject__c = 'Other',
Type = 'Action Request',
Origin ='Internal action',
CurrencyIsoCode = OLI.CurrencyIsoCode);
insert c4;
}
insert Feat;
}
if(trigger.new[0].Status=='closed' && (trigger.old[0].Status<>'closed') && (trigger.new[0].Subject=='New hotel FastBooking : Availpro Registration') && (trigger.new[0].Opportunity_Case__c != null))
{
List<Case> CaseOpp =new List<Case>();
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, PricebookEntry.Product2.ProductCode, Billing_Type__c, CurrencyIsoCode, UnitPrice,TotalPrice,Number_Of_Revenue_Installments__c, ServiceDate from OpportunityLineItem where opportunityId =: trigger.new[0].Opportunity_Case__c])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
if(OLI.Billing_Type__c=='Monthly' && OLI.PricebookEntry.Product2.ProductCode != 'FAST_PRODUCT'){
case c1=new case(
Subject='FastBooking : Invoicing :'+' '+ProductName,
Description ='Please, invoice FastBooking for this product',
OwnerId='00520000000pXcV',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Démarrage facturation',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = ((OLI.TotalPrice)/OLI.Number_Of_Revenue_Installments__c)*0.6,
CurrencyIsoCode = OLI.CurrencyIsoCode);
CaseOpp.add(c1);
}
if(OLI.Billing_Type__c!='Monthly' && OLI.PricebookEntry.Product2.ProductCode != 'FAST_PRODUCT'){
case c2=new case(
Subject='FastBooking : Invoicing :'+' '+ProductName,
Description ='Please, invoice FastBooking for this product',
OwnerId='00520000000pXcV',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Facturation Set-up fees',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = (OLI.TotalPrice)*0.6,
CurrencyIsoCode = OLI.CurrencyIsoCode);
CaseOpp.add(c2);
}
if(OLI.Billing_Type__c=='Monthly' && OLI.PricebookEntry.Product2.ProductCode == 'FAST_PRODUCT'){
case c3=new case(
Subject='FastBooking : Invoicing :'+' '+ProductName,
Description ='Please, invoice FastBooking for this product',
OwnerId='00520000000pXcV',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Démarrage facturation',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = ((OLI.TotalPrice)/OLI.Number_Of_Revenue_Installments__c)*0.4,
CurrencyIsoCode = OLI.CurrencyIsoCode);
CaseOpp.add(c3);
}
if(OLI.Billing_Type__c!='Monthly' && OLI.PricebookEntry.Product2.ProductCode == 'FAST_PRODUCT'){
case c2=new case(
Subject='FastBooking : Invoicing :'+' '+ProductName,
Description ='Please, invoice FastBooking for this product',
OwnerId='00520000000pXcV',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Facturation Set-up fees',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = (OLI.TotalPrice)*0.4,
CurrencyIsoCode = OLI.CurrencyIsoCode);
CaseOpp.add(c2);
}
}
insert CaseOpp;
}
}
And my test class
@isTest(SeeAllData=true)
private class TestCreateBillingCaseonCase3 {
@isTest static void TestCreateBillingCaseonCaseWithOpportunity3() {
// Test data setup
// Create an account with an opportunity, and then try to delete it
Opportunity opp = new Opportunity(Name='Opportunity TEST',
StageName='Prospecting',
AccountId='0019E00000TDyso',
Starting_date__c=date.Today(),
CloseDate=System.today().addMonths(1)
);
insert opp;
Quote QUOT = new Quote (Name='TEST',BillingCountry = 'France' ,BillingPostalCode = '75009' ,ContactId='0039E00000Mtqhs',Unit_price_ex_VAT_per_room_booked__c=2,OpportunityId=opp.Id);
insert QUOT;
opp.SyncedQuoteId=QUOT.Id;
opp.StageName='Closed Won';
update opp;
Pricebook2 pb22 = new Pricebook2(Name='testDIE training');
insert pb22;
Product2 pro = new Product2(Name='training', isActive=true, Billing_Type__c='Once',CurrencyIsoCode='EUR');
insert pro;
Product2 pro2 = new Product2(Name='training', ProductCode='FAST_PRODUCT', isActive=true, Billing_Type__c='Once',CurrencyIsoCode='EUR');
insert pro2;
Product2 pro3 = new Product2(Name='training', isActive=true, Billing_Type__c='Monthly',CurrencyIsoCode='EUR');
insert pro3;
Product2 pro4 = new Product2(Name='training', ProductCode='FAST_PRODUCT', isActive=true, Billing_Type__c='Monthly',CurrencyIsoCode='EUR');
insert pro4;
PricebookEntry pbe =new PricebookEntry(unitprice=0.01,Product2Id=pro.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe;
PricebookEntry pbe2 =new PricebookEntry(unitprice=0.01,Product2Id=pro2.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe2;
PricebookEntry pbe3 =new PricebookEntry(unitprice=0.01,Product2Id=pro3.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe3;
PricebookEntry pbe4 =new PricebookEntry(unitprice=0.01,Product2Id=pro4.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe4;
OpportunityLineItem OLI = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe.Id,Number_Of_Revenue_Installments__c=12);
insert OLI;
OpportunityLineItem OLI2 = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe2.Id,Number_Of_Revenue_Installments__c=12);
insert OLI2;
OpportunityLineItem OLI3 = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe3.Id,Number_Of_Revenue_Installments__c=12);
insert OLI3;
OpportunityLineItem OLI4 = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe4.Id,Number_Of_Revenue_Installments__c=12);
insert OLI4;
Case ca = new Case(Subject='New hotel FastBooking : Availpro Registration',AccountId = opp.AccountId, Status ='in progress',Opportunity_Case__c = opp.Id);
insert ca;
// Perform test
Test.startTest();
ca.Status='Closed';
update ca;
Test.stopTest();
}
}
Thanks for your helpThomas
-
- Thomas Caillet
- October 23, 2017
- Like
- 0
Number Of Revenue Installments in test trigger
Hi everybody,
I have to create a test code trigger to coverage my case trigger. But When I test it, I have this error : caused by: System.NullPointerException: Argument cannot be null.
In fact I have to fill the Number Of Revenue Installments and I don't know to do that when I create the product in my test.
Here is my test trigger :
Thomas
I have to create a test code trigger to coverage my case trigger. But When I test it, I have this error : caused by: System.NullPointerException: Argument cannot be null.
In fact I have to fill the Number Of Revenue Installments and I don't know to do that when I create the product in my test.
Here is my test trigger :
@isTest
private class TestCreateBillingCaseonCase2 {
@isTest static void TestCreateBillingCaseonCaseWithOpportunity() {
// Test data setup
// Create an account with an opportunity, and then try to delete it
Opportunity opp = new Opportunity(Name='Opportunity TEST',
StageName='Prospecting',
AccountId='0012500000dVUEw',
Starting_date__c=date.Today(),
CloseDate=System.today().addMonths(1)
);
insert opp;
Quote QUOT = new Quote (Name='TEST',BillingCountry = 'France' ,BillingPostalCode = '75009' ,ContactId='0032500000YR74S',Unit_price_ex_VAT_per_room_booked__c=2,OpportunityId=opp.Id);
insert QUOT;
opp.SyncedQuoteId=QUOT.Id;
opp.StageName='Closed Won';
update opp;
Pricebook2 pb22 = new Pricebook2(Name='testDIE training');
insert pb22;
Product2 pro2 = new Product2(Name='training', isActive=true, Billing_Type__c='Monthly');
insert pro2;
PricebookEntry pbe2 =new PricebookEntry(unitprice=0.01,Product2Id=pro2.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe2;
OpportunityLineItem OLI = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe2.Id);
insert OLI;
Case ca = new Case(Subject='New hotel : Kick off',AccountId = opp.AccountId, Status ='in progress',Opportunity_Case__c = opp.Id);
insert ca;
// Perform test
Test.startTest();
ca.Status='Closed';
update ca;
Test.stopTest();
}
}
And here the trigger line where is my error :
Amount__c = (OLI.TotalPrice)/OLI.Number_Of_Revenue_Installments__c,Thanks very much
Thomas
-
- Thomas Caillet
- May 09, 2017
- Like
- 0
Test Trigger Code Coverage
Hello,
I tried to code my test trigger apex class but I have an error with the code coverage.
Here is my trigger :
For information, My pricebookentry contain "Set up fee" in the product name.
Thanks for your help
Thomas
I tried to code my test trigger apex class but I have an error with the code coverage.
Here is my trigger :
trigger CreateBillingCaseAfterRegistration on Case (after update) {
if(trigger.new[0].Status=='closed' && (trigger.old[0].Status<>'closed') && (trigger.new[0].Subject=='New hotel : Availpro Registration') && (trigger.new[0].Opportunity_Case__c != null))
{
List<Features__c> Feat =new List<Features__c>();
List<Existing_feature__c> Existing =new List<Existing_feature__c>();
List<Quote> Quo=new List<Quote>();
List<Case> CaseOpp =new List<Case>();
case c1=new case(
Subject='New hotel : Kick off',
OwnerId='00Gw0000002lubt',
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Alfred_Scope__c = 'Configuration - Hotel',
Subject__c = 'New Hotel',
Type = 'Action Request',
Training_type__c = 'Kick-Off Call',
Kick_off_date__c=trigger.new[0].Kick_off_date__c,
Origin ='Automatic case',
AccountId = trigger.new[0].AccountId,
CurrencyIsoCode = trigger.new[0].CurrencyIsoCode);
CaseOpp.add(c1);
insert CaseOpp;
case c2=new case(
Subject='New hotel : Add / Modify Channel : Start Date Invoicing',
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_Status__c = 'Démarrage facturation',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_first_invoicing_date__c = trigger.new[0].Opportunity_Start_Date__c.addDays(61),
CurrencyIsoCode = trigger.new[0].CurrencyIsoCode);
insert c2;
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, Billing_Type__c, CurrencyIsoCode, UnitPrice,TotalPrice,Number_Of_Revenue_Installments__c, ServiceDate from OpportunityLineItem where opportunityId =: trigger.new[0].Opportunity_Case__c AND ((PricebookEntry.Product2.Name LIKE '%Set Up Fee%') OR (PricebookEntry.Product2.Name LIKE '%training%'))])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
if(OLI.Billing_Type__c=='Monthly'){
case c3=new case(
Subject='New hotel : Invoicing :'+' '+ProductName,
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c=trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Démarrage facturation',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = (OLI.TotalPrice)/OLI.Number_Of_Revenue_Installments__c,
CurrencyIsoCode = OLI.CurrencyIsoCode);
insert c3;
}
else{
case c3=new case(
Subject='New hotel : Invoicing :'+' '+ProductName,
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c=trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Facturation Set-up fees',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = OLI.TotalPrice,
CurrencyIsoCode = OLI.CurrencyIsoCode);
insert c3;
}
for(Existing_feature__c EXF: [SELECT Name, FeatureId__c, Product__c from Existing_feature__c where Product__c =: OLI.PricebookEntry.Product2Id])
{
String FeatureName= String.ValueOf(EXF.Name);
Features__c f1=new Features__c(
Name = FeatureName,
Feature_Id__c = string.valueof(EXF.FeatureId__c),
To_be_invoiced__c = true,
Date__c = datetime.now(),
Account__c = trigger.new[0].AccountId);
Feat.add(f1);
}
}
insert Feat;
}
}
And here my test class:
@isTest
private class TestCreateBillingCaseonCase {
@isTest static void TestCreateBillingCaseonCaseWithOpportunity2() {
// Test data setup
// Create an account with an opportunity, and then try to delete it
Opportunity opp = new Opportunity(Name='Opportunity TEST',
StageName='Prospecting',
AccountId='0012500000e1oU4',
Starting_date__c=date.Today(),
CloseDate=System.today().addMonths(1)
);
insert opp;
OpportunityLineItem OLI = new OpportunityLineItem (UnitPrice=300,opportunityId = opp.Id,Quantity=1,PricebookEntryId='01uw000000rrJ5F');
insert OLI;
Quote QUOT = new Quote (Name='TEST',BillingPostalCode = '75009' ,BillingCountry = 'France' ,ContactId='0032500000ZL882',Unit_price_ex_VAT_per_room_booked__c=2,OpportunityId=opp.Id);
insert QUOT;
opp.SyncedQuoteId=QUOT.Id;
opp.StageName='Closed Won';
update opp;
Case ca = new Case(Subject='New hotel : Availpro Registration',AccountId = opp.AccountId, Status ='in progress',Opportunity_Case__c = opp.Id);
insert ca;
// Perform test
Test.startTest();
ca.Status='Closed';
update ca;
Test.stopTest();
}
}
My test code is okay up to the for loop but I can't enter in for loop.For information, My pricebookentry contain "Set up fee" in the product name.
Thanks for your help
Thomas
-
- Thomas Caillet
- May 04, 2017
- Like
- 0
Button to update child accounts on case
Hello everybody,
I'd like to know if it's possible to create a button on cases that open new window which list all child accounts related to case's account ?
And after to select any accounts, I need to update a field in these accounts.
Thanks for your answers
Thomas
I'd like to know if it's possible to create a button on cases that open new window which list all child accounts related to case's account ?
And after to select any accounts, I need to update a field in these accounts.
Thanks for your answers
Thomas
-
- Thomas Caillet
- January 20, 2017
- Like
- 0
Update account field when opportunity lookup is update
Hello,
I'm trying to create a trigger or a process builder to update an account status field when an opportunity populated on lookup field in account changed.
In fact I have a lookup field to opportunity on my account name's "Main_opportunity__c" and I want to update the account status when this "Main opportunity" is closed won.
Thanks to your answer
Thomas
I'm trying to create a trigger or a process builder to update an account status field when an opportunity populated on lookup field in account changed.
In fact I have a lookup field to opportunity on my account name's "Main_opportunity__c" and I want to update the account status when this "Main opportunity" is closed won.
Thanks to your answer
Thomas
-
- Thomas Caillet
- December 12, 2016
- Like
- 0
Trigger on Lead conversion
Hello community,
I try to code an apex trigger on sandbox based on lead conversion.
I explain to you : I have a lookup field to opportunities on my account page an I would like to put the opportunity converted on this field.
I try to make a process builder (doesn’t work) and a trigger when a lead is converted based on an other post :
trigger trigMapFields on Lead (before update) {
for(Lead lead:System.Trigger.new)
{
if (lead.IsConverted)
{
system.debug('');
Opportunity opp = [SELECT Id FROM Opportunity WHERE Opportunity.Id=:lead.ConvertedOpportunityId];
Account acc = [SELECT Id,Main_Account_Contact__c FROM Account WHERE Account.Id=:lead.ConvertedAccountId];
acc.Main_Opportunity__c = opp.id;
update acc;
system.debug('' + acc.Main_Account_Contact__c );
}
}}
But I think that lead.IsConverted doesn’t work.
I activated Use Apex Lead Convert which upon the conversion of leads, enforces required field settings, field validation rules, workflow actions in Lead settings.
Could you help me please.
Thanks
Thomas
I try to code an apex trigger on sandbox based on lead conversion.
I explain to you : I have a lookup field to opportunities on my account page an I would like to put the opportunity converted on this field.
I try to make a process builder (doesn’t work) and a trigger when a lead is converted based on an other post :
trigger trigMapFields on Lead (before update) {
for(Lead lead:System.Trigger.new)
{
if (lead.IsConverted)
{
system.debug('');
Opportunity opp = [SELECT Id FROM Opportunity WHERE Opportunity.Id=:lead.ConvertedOpportunityId];
Account acc = [SELECT Id,Main_Account_Contact__c FROM Account WHERE Account.Id=:lead.ConvertedAccountId];
acc.Main_Opportunity__c = opp.id;
update acc;
system.debug('' + acc.Main_Account_Contact__c );
}
}}
But I think that lead.IsConverted doesn’t work.
I activated Use Apex Lead Convert which upon the conversion of leads, enforces required field settings, field validation rules, workflow actions in Lead settings.
Could you help me please.
Thanks
Thomas
-
- Thomas Caillet
- November 25, 2016
- Like
- 0
Put Account OwnerId via lookup on Case Trigger
Hello,
I tried to create a case when another is closed. On case, I have an Account lookup field and I want to put the account owner on the new case.
Here is my trigger :
trigger CreatePresentationCallCase on Case (before update) {
if((trigger.new[0].Status=='closed') && (trigger.old[0].Status<>'closed') && (trigger.new[0].Opportunity_Case__c != null) && ((trigger.new[0].Subject=='New hotel : Training') || (trigger.new[0].Subject=='New hotel : Training')))
{
case c1=new case(
Subject='New hotel : Presentation Call To Be Done',
OwnerId = trigger.new[0].Account.OwnerId,
Alfred_Scope__c = 'Other',
Subject__c = 'New Hotel',
Type = 'Action Request',
Origin ='Automatic case',
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
AccountId = trigger.new[0].AccountId,
Description = 'Kick off made on ' + trigger.new[0].Kick_off_date__c + ' by ' + trigger.new[0].Kick_off_person__c + '\n' + 'Training made on ' + trigger.new[0].Training_Date__c + ' by ' + trigger.new[0].Training_Person__c
);
insert c1;
}
}
I can save it but when I try to close my case I've got this error :
Error: Invalid Data.
Review all error messages below to correct your data.
Apex trigger CreatePresentationCallCase caused an unexpected exception, contact your administrator: CreatePresentationCallCase: execution of BeforeUpdate caused by: System.DmlException: Insert failed. First exception on row 0; first error: INVALID_CROSS_REFERENCE_KEY, Owner ID: owner cannot be blank: [OwnerId]: Trigger.CreatePresentationCallCase: line 18, column 1
Could you help me please ?
Thanks
I tried to create a case when another is closed. On case, I have an Account lookup field and I want to put the account owner on the new case.
Here is my trigger :
trigger CreatePresentationCallCase on Case (before update) {
if((trigger.new[0].Status=='closed') && (trigger.old[0].Status<>'closed') && (trigger.new[0].Opportunity_Case__c != null) && ((trigger.new[0].Subject=='New hotel : Training') || (trigger.new[0].Subject=='New hotel : Training')))
{
case c1=new case(
Subject='New hotel : Presentation Call To Be Done',
OwnerId = trigger.new[0].Account.OwnerId,
Alfred_Scope__c = 'Other',
Subject__c = 'New Hotel',
Type = 'Action Request',
Origin ='Automatic case',
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
AccountId = trigger.new[0].AccountId,
Description = 'Kick off made on ' + trigger.new[0].Kick_off_date__c + ' by ' + trigger.new[0].Kick_off_person__c + '\n' + 'Training made on ' + trigger.new[0].Training_Date__c + ' by ' + trigger.new[0].Training_Person__c
);
insert c1;
}
}
I can save it but when I try to close my case I've got this error :
Error: Invalid Data.
Review all error messages below to correct your data.
Apex trigger CreatePresentationCallCase caused an unexpected exception, contact your administrator: CreatePresentationCallCase: execution of BeforeUpdate caused by: System.DmlException: Insert failed. First exception on row 0; first error: INVALID_CROSS_REFERENCE_KEY, Owner ID: owner cannot be blank: [OwnerId]: Trigger.CreatePresentationCallCase: line 18, column 1
Could you help me please ?
Thanks
-
- Thomas Caillet
- July 28, 2016
- Like
- 0
Code Coverage 4% (1/23)
Hello,
I tried to code a test trigger to put my triiger on production. I would like to know what is parenthesis on code coverage (1/23) and how to have 75% of code coverage
Here is my trigger:
trigger CreateBillingCase on Case (after update) {
if(trigger.new[0].Status=='closed' && (trigger.old[0].Status=='closed') && (trigger.new[0].Subject=='New hotel : Kick off') && (trigger.new[0]. Opportunity_Case__c != null))
{
List<Features__c> Feat =new List<Features__c>();
List<Existing_feature__c> Existing =new List<Existing_feature__c>();
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, UnitPrice, ServiceDate from OpportunityLineItem where opportunityId =: trigger.new[0].Opportunity_Case__c])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
case c1=new case(
Subject='Incoiving :'+' '+ProductName,
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Amount__c = OLI.UnitPrice);
for(Existing_feature__c EXF: [SELECT Name, FeatureId__c, Product__c from Existing_feature__c where Product__c =: OLI.PricebookEntry.Product2Id])
{
String FeatureName= String.ValueOf(EXF.Name);
Features__c f1=new Features__c(
Name = FeatureName,
Feature_Id__c = string.valueof(EXF.FeatureId__c),
To_be_invoiced__c = true,
Account__c = trigger.new[0].AccountId);
Feat.add(f1);
}
insert c1;
}
insert Feat;
}
}
and my test :
@isTest
private class TestCreateBillingCaseonCase {
@isTest static void TestCreateBillingCaseonCaseWithOpportunity() {
// Test data setup
// Create an account with an opportunity, and then try to delete it
Test.startTest();
Case ca = new Case(Subject='New hotel : Kick off',Status='In progress');
insert ca;
Opportunity opp = new Opportunity(Name='Opportunity TEST',
StageName='Closed Won',
CloseDate=System.today().addMonths(1),
AccountId=ca.AccountId);
insert opp;
// Perform test
ca.Status='Closed';
ca.Opportunity_Case__c=opp.Id;
update ca;
List<Features__c> Feat =new List<Features__c>();
List<Existing_feature__c> Existing =new List<Existing_feature__c>();
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, UnitPrice, ServiceDate from OpportunityLineItem where opportunityId =: ca.Opportunity_Case__c])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
case c1=new case(
Subject='Incoiving :'+' '+ProductName,
OwnerId='00G20000001HboH',
AccountId = ca.AccountId,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Amount__c = OLI.UnitPrice);
for(Existing_feature__c EXF: [SELECT Name, FeatureId__c, Product__c from Existing_feature__c where Product__c =: OLI.PricebookEntry.Product2Id])
{
String FeatureName= String.ValueOf(EXF.Name);
Features__c f1=new Features__c(
Name = FeatureName,
Feature_Id__c = string.valueof(EXF.FeatureId__c),
To_be_invoiced__c = true,
Account__c = ca.AccountId);
Feat.add(f1);
}
}
Test.stopTest();
}
}
Thanks to you
Thomas
I tried to code a test trigger to put my triiger on production. I would like to know what is parenthesis on code coverage (1/23) and how to have 75% of code coverage
Here is my trigger:
trigger CreateBillingCase on Case (after update) {
if(trigger.new[0].Status=='closed' && (trigger.old[0].Status=='closed') && (trigger.new[0].Subject=='New hotel : Kick off') && (trigger.new[0]. Opportunity_Case__c != null))
{
List<Features__c> Feat =new List<Features__c>();
List<Existing_feature__c> Existing =new List<Existing_feature__c>();
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, UnitPrice, ServiceDate from OpportunityLineItem where opportunityId =: trigger.new[0].Opportunity_Case__c])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
case c1=new case(
Subject='Incoiving :'+' '+ProductName,
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Amount__c = OLI.UnitPrice);
for(Existing_feature__c EXF: [SELECT Name, FeatureId__c, Product__c from Existing_feature__c where Product__c =: OLI.PricebookEntry.Product2Id])
{
String FeatureName= String.ValueOf(EXF.Name);
Features__c f1=new Features__c(
Name = FeatureName,
Feature_Id__c = string.valueof(EXF.FeatureId__c),
To_be_invoiced__c = true,
Account__c = trigger.new[0].AccountId);
Feat.add(f1);
}
insert c1;
}
insert Feat;
}
}
and my test :
@isTest
private class TestCreateBillingCaseonCase {
@isTest static void TestCreateBillingCaseonCaseWithOpportunity() {
// Test data setup
// Create an account with an opportunity, and then try to delete it
Test.startTest();
Case ca = new Case(Subject='New hotel : Kick off',Status='In progress');
insert ca;
Opportunity opp = new Opportunity(Name='Opportunity TEST',
StageName='Closed Won',
CloseDate=System.today().addMonths(1),
AccountId=ca.AccountId);
insert opp;
// Perform test
ca.Status='Closed';
ca.Opportunity_Case__c=opp.Id;
update ca;
List<Features__c> Feat =new List<Features__c>();
List<Existing_feature__c> Existing =new List<Existing_feature__c>();
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, UnitPrice, ServiceDate from OpportunityLineItem where opportunityId =: ca.Opportunity_Case__c])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
case c1=new case(
Subject='Incoiving :'+' '+ProductName,
OwnerId='00G20000001HboH',
AccountId = ca.AccountId,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Amount__c = OLI.UnitPrice);
for(Existing_feature__c EXF: [SELECT Name, FeatureId__c, Product__c from Existing_feature__c where Product__c =: OLI.PricebookEntry.Product2Id])
{
String FeatureName= String.ValueOf(EXF.Name);
Features__c f1=new Features__c(
Name = FeatureName,
Feature_Id__c = string.valueof(EXF.FeatureId__c),
To_be_invoiced__c = true,
Account__c = ca.AccountId);
Feat.add(f1);
}
}
Test.stopTest();
}
}
Thanks to you
Thomas
-
- Thomas Caillet
- July 11, 2016
- Like
- 0
Create multiple case for each opportunity product when opportunity is won (trigger)
Hi everybody,
I'm trying to make a trigger that create one case for each opportunity product when opportunity is won.
I know how to create case but I don't know how to browse all opportunity products.
I'm new on apex so I need your help please.
Thanks to you
I'm trying to make a trigger that create one case for each opportunity product when opportunity is won.
I know how to create case but I don't know how to browse all opportunity products.
I'm new on apex so I need your help please.
Thanks to you
-
- Thomas Caillet
- July 04, 2016
- Like
- 0
My Opportunity trigger doesn't recognize my standard fields on sandbox
Hello,
I need your help about something strange on my sandbox:
I want to write a trigger that create one case for each opportunity line items when my opportunity is "Closed Won".
But I'm a junior developper so I started to write just the case creation when opportunity is "Closed Won". But I've got this error:
Error: Compile Error: Variable does not exist: StageName ...
I think the trigger don't recognize all fields.
Please tell me what I'm doing wrong. Thanks
Here is my "simple" code :
trigger createNewCase on Opportunity (before insert, before update) {
List<Case> listcase = new List<Case>();
for(Opportunity o: Trigger.new)
{
if ( o.StageName == 'Closed Won' )
{
listCase.add(
new Case(
Priority = 'Medium',
Status = 'New'));
}
}
if(listcase.size()>0)
{
insert listcase;
}
}
I need your help about something strange on my sandbox:
I want to write a trigger that create one case for each opportunity line items when my opportunity is "Closed Won".
But I'm a junior developper so I started to write just the case creation when opportunity is "Closed Won". But I've got this error:
Error: Compile Error: Variable does not exist: StageName ...
I think the trigger don't recognize all fields.
Please tell me what I'm doing wrong. Thanks
Here is my "simple" code :
trigger createNewCase on Opportunity (before insert, before update) {
List<Case> listcase = new List<Case>();
for(Opportunity o: Trigger.new)
{
if ( o.StageName == 'Closed Won' )
{
listCase.add(
new Case(
Priority = 'Medium',
Status = 'New'));
}
}
if(listcase.size()>0)
{
insert listcase;
}
}
-
- Thomas Caillet
- July 01, 2016
- Like
- 0
Replace the "Add products" page with visualforce
Hi all,
This is my scenario :
I use all standard objects to do my opportunity (opportunity, opportunity line items, quotes, products ...)
When I create an opportunity, I select my product by click on "Add product" button. When I choose my pricebook I click on "next" and select my products" and after "Select". I arrive in the "Add products" page to enter my sales price.
Here is my problem : I just want to know if it's possible to create a visualforce page or another things to replace this page and display some fields in term of the product type ?
Really thanks in advance
Cheers
Thomas
This is my scenario :
I use all standard objects to do my opportunity (opportunity, opportunity line items, quotes, products ...)
When I create an opportunity, I select my product by click on "Add product" button. When I choose my pricebook I click on "next" and select my products" and after "Select". I arrive in the "Add products" page to enter my sales price.
Here is my problem : I just want to know if it's possible to create a visualforce page or another things to replace this page and display some fields in term of the product type ?
Really thanks in advance
Cheers
Thomas

- Thomas Caillet
- September 28, 2018
- Like
- 0
CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, caused by: System.NullPointerException: Argument cannot be null.
Hello,
I have a probleme with a test class in sandbox.
Salesforce says that my field "Number_Of_Revenue_Installments__c" (line 153 and 193) is NULL but I tried to see this field with System.Debug() and it's not NULL.
Here is my trigger
Thomas
I have a probleme with a test class in sandbox.
Salesforce says that my field "Number_Of_Revenue_Installments__c" (line 153 and 193) is NULL but I tried to see this field with System.Debug() and it's not NULL.
Here is my trigger
trigger CreateBillingCaseAfterRegistration on Case (after update) {
if(trigger.new[0].Status=='closed' && (trigger.old[0].Status<>'closed') && (trigger.new[0].Subject=='New hotel : Availpro Registration') && (trigger.new[0].Opportunity_Case__c != null))
{
List<Features__c> Feat =new List<Features__c>();
List<Existing_feature__c> Existing =new List<Existing_feature__c>();
List<Quote> Quo=new List<Quote>();
List<Case> CaseOpp =new List<Case>();
case c1=new case(
Subject='New hotel : Kick off',
OwnerId='00Gw0000002lubt',
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Alfred_Scope__c = 'Configuration - Hotel',
Subject__c = 'New Hotel',
Type = 'Action Request',
Training_type__c = 'Kick-Off Call',
Kick_off_date__c=trigger.new[0].Kick_off_date__c,
Origin ='Automatic case',
AccountId = trigger.new[0].AccountId,
CurrencyIsoCode = trigger.new[0].CurrencyIsoCode);
CaseOpp.add(c1);
insert CaseOpp;
case c2=new case(
Subject='New hotel : Add / Modify Channel : Start Date Invoicing',
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_Status__c = 'Démarrage facturation',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_first_invoicing_date__c = trigger.new[0].Opportunity_Start_Date__c.addDays(61),
CurrencyIsoCode = trigger.new[0].CurrencyIsoCode);
insert c2;
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, PricebookEntry.Product2.ProductCode, Billing_Type__c, CurrencyIsoCode, UnitPrice,TotalPrice,Number_Of_Revenue_Installments__c, ServiceDate from OpportunityLineItem where opportunityId =: trigger.new[0].Opportunity_Case__c AND (PricebookEntry.Product2.ProductCode =: '4263E3EC-AB8F-4B3B-B004-F60E1FF15268.2' OR PricebookEntry.Product2.ProductCode =: '15EEC0D0-1591-4F29-BE62-039EBE1EE13D.2')])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
case c3=new case(
Subject='Deposit for'+' '+ProductName,
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Deposit Google Ads',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Description = 'Please see this doc to view the process : https://backoffice.availpro.com/search/Help/Index/HLP-258637'+'\n'+'Fee schedule :'+'\n'+'a. – of 25 rooms = 250 '+ trigger.new[0].CurrencyIsoCode +'\n'+'b. 26 to 50 rooms = 400 '+ trigger.new[0].CurrencyIsoCode +'\n'+'c. > of 50 rooms = 600 '+ trigger.new[0].CurrencyIsoCode,
CurrencyIsoCode = OLI.CurrencyIsoCode);
insert c3;
}
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, Billing_Type__c, CurrencyIsoCode, UnitPrice,TotalPrice,Number_Of_Revenue_Installments__c, ServiceDate from OpportunityLineItem where opportunityId =: trigger.new[0].Opportunity_Case__c AND PricebookEntry.Product2.Billing_Type__c <> 'Monthly'])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
case c3=new case(
Subject='New hotel : Invoicing :'+' '+ProductName,
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c=trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Facturation Set-up fees',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = OLI.TotalPrice,
CurrencyIsoCode = OLI.CurrencyIsoCode);
insert c3;
for(Existing_feature__c EXF: [SELECT Name, FeatureId__c, Product__c from Existing_feature__c where Product__c =: OLI.PricebookEntry.Product2Id])
{
String FeatureName= String.ValueOf(EXF.Name);
Features__c f1=new Features__c(
Name = FeatureName,
Feature_Id__c = string.valueof(EXF.FeatureId__c),
To_be_invoiced__c = true,
Date__c = datetime.now(),
Account__c = trigger.new[0].AccountId);
Feat.add(f1);
}
}
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, PricebookEntry.Product2.ProductCode, Billing_Type__c, CurrencyIsoCode, UnitPrice,TotalPrice,Number_Of_Revenue_Installments__c, ServiceDate from OpportunityLineItem where opportunityId =: trigger.new[0].Opportunity_Case__c AND PricebookEntry.Product2.Billing_Type__c =: 'Monthly' AND (PricebookEntry.Product2.ProductCode != '4263E3EC-AB8F-4B3B-B004-F60E1FF15268.2' AND PricebookEntry.Product2.ProductCode != '15EEC0D0-1591-4F29-BE62-039EBE1EE13D.2')])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
case c4=new case(
Subject=ProductName + ' must be activated on '+ OLI.ServiceDate.format(),
Description='This product has been subscribed by the customer and must be activated on the date mentioned in subject. Please update date if necessary',
OwnerId = '00Gw0000002m46x',
AccountId = trigger.new[0].AccountId,
Alfred_Scope__c = 'Configuration - Hotel',
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Subject__c = 'Other',
Type = 'Action Request',
Origin ='Internal action',
CurrencyIsoCode = OLI.CurrencyIsoCode);
insert c4;
}
insert Feat;
}
if(trigger.new[0].Status=='closed' && (trigger.old[0].Status<>'closed') && (trigger.new[0].Subject=='New hotel FastBooking : Availpro Registration') && (trigger.new[0].Opportunity_Case__c != null))
{
List<Case> CaseOpp =new List<Case>();
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, PricebookEntry.Product2.ProductCode, Billing_Type__c, CurrencyIsoCode, UnitPrice,TotalPrice,Number_Of_Revenue_Installments__c, ServiceDate from OpportunityLineItem where opportunityId =: trigger.new[0].Opportunity_Case__c])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
if(OLI.Billing_Type__c=='Monthly' && OLI.PricebookEntry.Product2.ProductCode != 'FAST_PRODUCT'){
case c1=new case(
Subject='FastBooking : Invoicing :'+' '+ProductName,
Description ='Please, invoice FastBooking for this product',
OwnerId='00520000000pXcV',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Démarrage facturation',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = ((OLI.TotalPrice)/OLI.Number_Of_Revenue_Installments__c)*0.6,
CurrencyIsoCode = OLI.CurrencyIsoCode);
CaseOpp.add(c1);
}
if(OLI.Billing_Type__c!='Monthly' && OLI.PricebookEntry.Product2.ProductCode != 'FAST_PRODUCT'){
case c2=new case(
Subject='FastBooking : Invoicing :'+' '+ProductName,
Description ='Please, invoice FastBooking for this product',
OwnerId='00520000000pXcV',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Facturation Set-up fees',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = (OLI.TotalPrice)*0.6,
CurrencyIsoCode = OLI.CurrencyIsoCode);
CaseOpp.add(c2);
}
if(OLI.Billing_Type__c=='Monthly' && OLI.PricebookEntry.Product2.ProductCode == 'FAST_PRODUCT'){
case c3=new case(
Subject='FastBooking : Invoicing :'+' '+ProductName,
Description ='Please, invoice FastBooking for this product',
OwnerId='00520000000pXcV',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Démarrage facturation',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = ((OLI.TotalPrice)/OLI.Number_Of_Revenue_Installments__c)*0.4,
CurrencyIsoCode = OLI.CurrencyIsoCode);
CaseOpp.add(c3);
}
if(OLI.Billing_Type__c!='Monthly' && OLI.PricebookEntry.Product2.ProductCode == 'FAST_PRODUCT'){
case c2=new case(
Subject='FastBooking : Invoicing :'+' '+ProductName,
Description ='Please, invoice FastBooking for this product',
OwnerId='00520000000pXcV',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Facturation Set-up fees',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = (OLI.TotalPrice)*0.4,
CurrencyIsoCode = OLI.CurrencyIsoCode);
CaseOpp.add(c2);
}
}
insert CaseOpp;
}
}
And my test class
@isTest(SeeAllData=true)
private class TestCreateBillingCaseonCase3 {
@isTest static void TestCreateBillingCaseonCaseWithOpportunity3() {
// Test data setup
// Create an account with an opportunity, and then try to delete it
Opportunity opp = new Opportunity(Name='Opportunity TEST',
StageName='Prospecting',
AccountId='0019E00000TDyso',
Starting_date__c=date.Today(),
CloseDate=System.today().addMonths(1)
);
insert opp;
Quote QUOT = new Quote (Name='TEST',BillingCountry = 'France' ,BillingPostalCode = '75009' ,ContactId='0039E00000Mtqhs',Unit_price_ex_VAT_per_room_booked__c=2,OpportunityId=opp.Id);
insert QUOT;
opp.SyncedQuoteId=QUOT.Id;
opp.StageName='Closed Won';
update opp;
Pricebook2 pb22 = new Pricebook2(Name='testDIE training');
insert pb22;
Product2 pro = new Product2(Name='training', isActive=true, Billing_Type__c='Once',CurrencyIsoCode='EUR');
insert pro;
Product2 pro2 = new Product2(Name='training', ProductCode='FAST_PRODUCT', isActive=true, Billing_Type__c='Once',CurrencyIsoCode='EUR');
insert pro2;
Product2 pro3 = new Product2(Name='training', isActive=true, Billing_Type__c='Monthly',CurrencyIsoCode='EUR');
insert pro3;
Product2 pro4 = new Product2(Name='training', ProductCode='FAST_PRODUCT', isActive=true, Billing_Type__c='Monthly',CurrencyIsoCode='EUR');
insert pro4;
PricebookEntry pbe =new PricebookEntry(unitprice=0.01,Product2Id=pro.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe;
PricebookEntry pbe2 =new PricebookEntry(unitprice=0.01,Product2Id=pro2.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe2;
PricebookEntry pbe3 =new PricebookEntry(unitprice=0.01,Product2Id=pro3.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe3;
PricebookEntry pbe4 =new PricebookEntry(unitprice=0.01,Product2Id=pro4.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe4;
OpportunityLineItem OLI = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe.Id,Number_Of_Revenue_Installments__c=12);
insert OLI;
OpportunityLineItem OLI2 = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe2.Id,Number_Of_Revenue_Installments__c=12);
insert OLI2;
OpportunityLineItem OLI3 = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe3.Id,Number_Of_Revenue_Installments__c=12);
insert OLI3;
OpportunityLineItem OLI4 = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe4.Id,Number_Of_Revenue_Installments__c=12);
insert OLI4;
Case ca = new Case(Subject='New hotel FastBooking : Availpro Registration',AccountId = opp.AccountId, Status ='in progress',Opportunity_Case__c = opp.Id);
insert ca;
// Perform test
Test.startTest();
ca.Status='Closed';
update ca;
Test.stopTest();
}
}
Thanks for your helpThomas

- Thomas Caillet
- October 23, 2017
- Like
- 0
Number Of Revenue Installments in test trigger
Hi everybody,
I have to create a test code trigger to coverage my case trigger. But When I test it, I have this error : caused by: System.NullPointerException: Argument cannot be null.
In fact I have to fill the Number Of Revenue Installments and I don't know to do that when I create the product in my test.
Here is my test trigger :
Thomas
I have to create a test code trigger to coverage my case trigger. But When I test it, I have this error : caused by: System.NullPointerException: Argument cannot be null.
In fact I have to fill the Number Of Revenue Installments and I don't know to do that when I create the product in my test.
Here is my test trigger :
@isTest
private class TestCreateBillingCaseonCase2 {
@isTest static void TestCreateBillingCaseonCaseWithOpportunity() {
// Test data setup
// Create an account with an opportunity, and then try to delete it
Opportunity opp = new Opportunity(Name='Opportunity TEST',
StageName='Prospecting',
AccountId='0012500000dVUEw',
Starting_date__c=date.Today(),
CloseDate=System.today().addMonths(1)
);
insert opp;
Quote QUOT = new Quote (Name='TEST',BillingCountry = 'France' ,BillingPostalCode = '75009' ,ContactId='0032500000YR74S',Unit_price_ex_VAT_per_room_booked__c=2,OpportunityId=opp.Id);
insert QUOT;
opp.SyncedQuoteId=QUOT.Id;
opp.StageName='Closed Won';
update opp;
Pricebook2 pb22 = new Pricebook2(Name='testDIE training');
insert pb22;
Product2 pro2 = new Product2(Name='training', isActive=true, Billing_Type__c='Monthly');
insert pro2;
PricebookEntry pbe2 =new PricebookEntry(unitprice=0.01,Product2Id=pro2.Id,Pricebook2Id=Test.getStandardPricebookId(),
isActive=true,UseStandardPrice = false);
insert pbe2;
OpportunityLineItem OLI = new OpportunityLineItem (TotalPrice=240,opportunityId = opp.Id,Quantity=1,PricebookEntryId=pbe2.Id);
insert OLI;
Case ca = new Case(Subject='New hotel : Kick off',AccountId = opp.AccountId, Status ='in progress',Opportunity_Case__c = opp.Id);
insert ca;
// Perform test
Test.startTest();
ca.Status='Closed';
update ca;
Test.stopTest();
}
}
And here the trigger line where is my error :
Amount__c = (OLI.TotalPrice)/OLI.Number_Of_Revenue_Installments__c,Thanks very much
Thomas

- Thomas Caillet
- May 09, 2017
- Like
- 0
Test Trigger Code Coverage
Hello,
I tried to code my test trigger apex class but I have an error with the code coverage.
Here is my trigger :
For information, My pricebookentry contain "Set up fee" in the product name.
Thanks for your help
Thomas
I tried to code my test trigger apex class but I have an error with the code coverage.
Here is my trigger :
trigger CreateBillingCaseAfterRegistration on Case (after update) {
if(trigger.new[0].Status=='closed' && (trigger.old[0].Status<>'closed') && (trigger.new[0].Subject=='New hotel : Availpro Registration') && (trigger.new[0].Opportunity_Case__c != null))
{
List<Features__c> Feat =new List<Features__c>();
List<Existing_feature__c> Existing =new List<Existing_feature__c>();
List<Quote> Quo=new List<Quote>();
List<Case> CaseOpp =new List<Case>();
case c1=new case(
Subject='New hotel : Kick off',
OwnerId='00Gw0000002lubt',
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Alfred_Scope__c = 'Configuration - Hotel',
Subject__c = 'New Hotel',
Type = 'Action Request',
Training_type__c = 'Kick-Off Call',
Kick_off_date__c=trigger.new[0].Kick_off_date__c,
Origin ='Automatic case',
AccountId = trigger.new[0].AccountId,
CurrencyIsoCode = trigger.new[0].CurrencyIsoCode);
CaseOpp.add(c1);
insert CaseOpp;
case c2=new case(
Subject='New hotel : Add / Modify Channel : Start Date Invoicing',
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c = trigger.new[0].Opportunity_Case__c,
Accounting_Status__c = 'Démarrage facturation',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_first_invoicing_date__c = trigger.new[0].Opportunity_Start_Date__c.addDays(61),
CurrencyIsoCode = trigger.new[0].CurrencyIsoCode);
insert c2;
for(OpportunityLineItem OLI : [SELECT PricebookEntry.Product2.Name, Billing_Type__c, CurrencyIsoCode, UnitPrice,TotalPrice,Number_Of_Revenue_Installments__c, ServiceDate from OpportunityLineItem where opportunityId =: trigger.new[0].Opportunity_Case__c AND ((PricebookEntry.Product2.Name LIKE '%Set Up Fee%') OR (PricebookEntry.Product2.Name LIKE '%training%'))])
{
String ProductName= String.ValueOf(OLI.PricebookEntry.Product2.Name);
if(OLI.Billing_Type__c=='Monthly'){
case c3=new case(
Subject='New hotel : Invoicing :'+' '+ProductName,
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c=trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Démarrage facturation',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = (OLI.TotalPrice)/OLI.Number_Of_Revenue_Installments__c,
CurrencyIsoCode = OLI.CurrencyIsoCode);
insert c3;
}
else{
case c3=new case(
Subject='New hotel : Invoicing :'+' '+ProductName,
OwnerId='00G20000001HboH',
AccountId = trigger.new[0].AccountId,
Opportunity_Case__c=trigger.new[0].Opportunity_Case__c,
Accounting_first_invoicing_date__c = OLI.ServiceDate,
Accounting_Status__c = 'Facturation Set-up fees',
Accounting_request_type__c = 'Paramétrage module facturation',
Alfred_Scope__c = 'Billing',
Subject__c = 'Accounting',
Type = 'Action Request',
Origin ='Automatic case',
Accounting_Billing_Type__c = OLI.Billing_Type__c,
Amount__c = OLI.TotalPrice,
CurrencyIsoCode = OLI.CurrencyIsoCode);
insert c3;
}
for(Existing_feature__c EXF: [SELECT Name, FeatureId__c, Product__c from Existing_feature__c where Product__c =: OLI.PricebookEntry.Product2Id])
{
String FeatureName= String.ValueOf(EXF.Name);
Features__c f1=new Features__c(
Name = FeatureName,
Feature_Id__c = string.valueof(EXF.FeatureId__c),
To_be_invoiced__c = true,
Date__c = datetime.now(),
Account__c = trigger.new[0].AccountId);
Feat.add(f1);
}
}
insert Feat;
}
}
And here my test class:
@isTest
private class TestCreateBillingCaseonCase {
@isTest static void TestCreateBillingCaseonCaseWithOpportunity2() {
// Test data setup
// Create an account with an opportunity, and then try to delete it
Opportunity opp = new Opportunity(Name='Opportunity TEST',
StageName='Prospecting',
AccountId='0012500000e1oU4',
Starting_date__c=date.Today(),
CloseDate=System.today().addMonths(1)
);
insert opp;
OpportunityLineItem OLI = new OpportunityLineItem (UnitPrice=300,opportunityId = opp.Id,Quantity=1,PricebookEntryId='01uw000000rrJ5F');
insert OLI;
Quote QUOT = new Quote (Name='TEST',BillingPostalCode = '75009' ,BillingCountry = 'France' ,ContactId='0032500000ZL882',Unit_price_ex_VAT_per_room_booked__c=2,OpportunityId=opp.Id);
insert QUOT;
opp.SyncedQuoteId=QUOT.Id;
opp.StageName='Closed Won';
update opp;
Case ca = new Case(Subject='New hotel : Availpro Registration',AccountId = opp.AccountId, Status ='in progress',Opportunity_Case__c = opp.Id);
insert ca;
// Perform test
Test.startTest();
ca.Status='Closed';
update ca;
Test.stopTest();
}
}
My test code is okay up to the for loop but I can't enter in for loop.For information, My pricebookentry contain "Set up fee" in the product name.
Thanks for your help
Thomas

- Thomas Caillet
- May 04, 2017
- Like
- 0
Button to update child accounts on case
Hello everybody,
I'd like to know if it's possible to create a button on cases that open new window which list all child accounts related to case's account ?
And after to select any accounts, I need to update a field in these accounts.
Thanks for your answers
Thomas
I'd like to know if it's possible to create a button on cases that open new window which list all child accounts related to case's account ?
And after to select any accounts, I need to update a field in these accounts.
Thanks for your answers
Thomas

- Thomas Caillet
- January 20, 2017
- Like
- 0