Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/snowfakery recipe #109

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion cumulusci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,14 @@ tasks:
robot_testdoc:
options:
path: robot/Membership-Management/tests
output: robot/Membership-Management/doc/Membership-Management_tests.html
output: robot/Membership-Management/doc/Membership-Management_tests.html


flows:
dev_org:
steps:
3:
task: assign_permission_sets
options:
api_names: Manage_Memberships

151 changes: 151 additions & 0 deletions datasets/MembershipDemo.recipe
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
- var: __membership
fields:
type:
random_choice:
- Individual
- Household
- Corporate
date:
date_between:
start_date: -3y
end_date: today

- var: Person
value:
- object: __person
fields:
FirstName:
fake: FirstName
LastName:
fake: LastName
MembershipType:
${{ __membership.type}}
Email:
fake: Email
AccountName:
if:
- choice:
when: ${{ __membership.type== 'Corporate'}}
pick: ${{fake.company}}
- choice:
pick: ${{FirstName}} ${{LastName}} Household
- object: Account

fields:
Name:
${{__person.AccountName}}
friends:
- object: Contact
count:
if:
- choice:
when: ${{ __membership.type == 'Corporate'}}
pick:
random_number:
min: 1
max: 10
- choice:
pick:
random_number:
min: 1
max: 3
fields:
# MembershipSchemaAndBenefits custom fields -- expected to be handled by Apex
Last_Membership_Start_Date__c: ${{Opportunity.CloseDate}}
First_Membership_Start_Date__c: ${{Opportunity.CloseDate}}
Membership_End_Date__c: ${{date(Opportunity.CloseDate)+relativedelta(months=12)}}
Membership_Status__c:
random_choice:
- Former
- Lapsed # in grace period (CMDT that doesn't exist yet --> 30 days)
- Renewal # needs to renew (last 30 days before end date)
- Current
Membership_Type__c:
random_choice:
- Individual
- Household
- Corporate
FirstName: ${{__person.firstname}}
LastName: ${{__person.lastname}}
Email: ${{__person.email}}

- object: Opportunity # this is only for opps with products - no plain opps
count: 1
fields:
Type: Membership
CloseDate: ${{__membership.Date}}
Description:
fake.text:
max_nb_chars: 100

StageName: Closed Won
# Contact

- object: __pricebookentry_from_salesforce
fields:
__pbe:
SOQLDataset.shuffle:
fields: Id, UnitPrice, Product2Id, Pricebook2Id, Product2.name
from: PricebookEntry
where: Product2.name like '${{Contact.Membership_Type__c}} membership'
UnitPrice: ${{__pbe.UnitPrice}}
Product2Id: ${{__pbe.Product2Id}}
Pricebook2Id: ${{__pbe.Pricebook2Id}}

- object: OpportunityLineItem
count: 1
fields:
Quantity: 1
Description:
fake.text:
max_nb_chars: 30

OpportunityId:
reference: Opportunity
Membership__c:
- object: Membership__c
fields:
Product__c: ${{__pricebookentry_ccifrom_salesforce.Product2Id}}
name: ${{Account.Name}}-${{__pricebookentry_from_salesforce.Product2.name}}
Origin__c:
random_choice:
- New
- Renewed
- Reacquired
Primary__c: true

Type__c: ${{ __membership.type}}
Does_Not_Expire__c:
random_choice:
- true: 4
- false: 1
Start_Date__c: ${{Opportunity.CloseDate}}
End_Date__c: ${{date(Start_Date__c)+relativedelta(months=12)}}
Status__c:
if:
- choice:
when: ${{date(End_Date__c) < today}}
pick:
random_choice:
- Former
- Lapsed
- choice:
pick:
random_choice:
- Current
- Renewal
Account__c:
reference: Account

# Apex automated
# - object: Membership_Contact_Role__c
# fields:
# Name: STRING
# Start_Date__c: DATE
# End_Date__c: DATE
# Role__c: PICKLIST

# Is_Primary__c: BOOLEAN

# Membership__c: REFERENCE
# Contact__c: REFERENCE
197 changes: 197 additions & 0 deletions datasets/MembershipSchemaAndBenefits.recipe.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
### ------------- [ ORDER OF INSERT ]------------ ###
# 1-0. Account (1)
# 1-1. Contact - (2) Household Members
# 1-2. Pricebook2 (Query)
# 1-3. Product2 (Query)
# 1-4. PricebookEntry (Query)
# 1-7. Opportunity (1)
# 1-8. OpportunityLineItem (1)
# 1-5. Membership__c (1)
# 1-6. Membership_Contact_Role__c (automatically handled by Apex)


### ----------- [ MembershipSchemaAndBenefits_basic.recipe.yml Summary ]---------- ###
# Household Account with two contacts
# Query Standard Price Book, PricebookEntry, Product2
# Pick one out of [3] products called "Individual Membership", "Household Membership", "Corporate Membership"
# Membership record is specific to a related account and opportunity records.
# Membership Contact role differenciates the membership details on each household member.
# There is an apex trigger handler that creates a membership contact role for primary contact.
# https://github.com/SFDO-Community-Sprints/MembershipSchemaAndBenefits
#
#
### ----------- [ CLI RUN ]---------- ###
# Use this command to run this recipe in a Salesforce scratch org called "dev":
# cci task run snowfakery --recipe snowfakery_samples/OSC/MembershipSchemaAndBenefits.recipe.yml --org dev
#
# Use this command to run this recipe locally and output to a JSON file called output.json
# snowfakery snowfakery_samples/OSC/MembershipSchemaAndBenefits.recipe.yml --output-format=json --output-file=snowfakery_samples/temp/foo.json --plugin-option org_name dev
#
### ----------- [ Recipe Starts ]---------- ###

- plugin: snowfakery.standard_plugins.Salesforce.SOQLDataset

- object: Opportunity
count: 1
fields:
Type: Membership
CloseDate:
date_between:
start_date: -3y
end_date: today
Description:
fake.text:
max_nb_chars: 100

StageName: Closed Won
# Contact

ContactId:
- object: Contact
fields:
# MembershipSchemaAndBenefits custom fields -- expected to be handled by Apex
Last_Membership_Start_Date__c: ${{Opportunity.CloseDate}}
First_Membership_Start_Date__c: ${{Opportunity.CloseDate}}
Membership_End_Date__c: ${{date(Opportunity.CloseDate)+relativedelta(months=12)}}
Membership_Status__c:
random_choice:
- Former
- Lapsed
- Renewal
- Current
Membership_Type__c:
random_choice:
- Individual
- Household
- Corporate
FirstName: ${{fake.firstname}}
LastName: ${{fake.lastname}}
Email: ${{fake.email}}
AccountId:
- object: Account
fields:
Name:
if:
- choice:
when: ${{Contact.Membership_Type__c == 'Individual'}}
pick: ${{Contact.FirstName}} ${{Contact.LastName}} Household
- choice:
when: ${{Contact.Membership_Type__c == 'Household'}}
pick: ${{Contact.FirstName}} ${{Contact.LastName}} Household
- choice:
when: ${{Contact.Membership_Type__c == 'Corporate'}}
pick: ${{fake.company}}

# MembershipSchemaAndBenefits custom fields -- expected to be handled by Apex
First_Membership_Start_Date__c: ${{Opportunity.CloseDate}}
Membership_End_Date__c: ${{Opportunity.CloseDate+relativedelta(months=12)}}
Membership_Status__c: ${{Contact.Membership_Status__c}}
Membership_Type__c: ${{Contact.Membership_Type__c}}

# Primary_Membership__c: # Apex automated
# reference: Membership__c

Name: ${{Account.Name}}-${{Type}}-${{(CloseDate).year}}
AccountId:
reference: Account

# NPSP fields
# npe01__Membership_Start_Date__c: ${{CloseDate}}
# npe01__Membership_End_Date__c: ${{date(CloseDate)+relativedelta(months=12)}}
# npe01__Membership_Origin__c:
# random_choice:
# - New
# - Renewal
# - Reacquire

__pricebookentry_from_salesforce:
SOQLDataset.shuffle:
fields: UnitPrice
from: PricebookEntry
where: Product2.Name = '${{Contact.Membership_Type__c}} Membership'
Amount: ${{__pricebookentry_from_salesforce.UnitPrice}}

__pricebook_from_salesforce:
SOQLDataset.shuffle:
fields: Id
from: Pricebook2
Pricebook2Id: ${{__pricebook_from_salesforce.Id}}

- object: OpportunityLineItem
fields:
Quantity: 1
Description:
fake.text:
max_nb_chars: 30

OpportunityId:
reference: Opportunity

__pricebookentry_from_salesforce:
SOQLDataset.shuffle:
fields: Id, UnitPrice, Product2Id
from: PricebookEntry
where: Product2.name like '${{Contact.Membership_Type__c}} membership'
UnitPrice: ${{__pricebookentry_from_salesforce.UnitPrice}}

Product2Id: ${{__pricebookentry_from_salesforce.Product2Id}}
# Membership__c:
Membership__c:
- object: Membership__c
fields:
__product_from_salesforce:
SOQLDataset.shuffle:
fields: Id, Name
from: Product2
where: name like '${{Contact.Membership_Type__c}} membership'
name: ${{Account.Name}}-${{__product_from_salesforce.Name}}
Origin__c:
random_choice:
- New
- Renewed
- Reacquired
Primary__c: true

Type__c:
if:
- choice:
when: ${{__product_from_salesforce.Name == 'Individual Membership'}}
pick: Individual
- choice:
when: ${{__product_from_salesforce.Name == 'Household Membership'}}
pick: Household
- choice:
when: ${{__product_from_salesforce.Name == 'Corporate Membership'}}
pick: Corporate

Does_Not_Expire__c: false
Start_Date__c: ${{Opportunity.CloseDate}}
End_Date__c: ${{date(Start_Date__c)+relativedelta(months=12)}}
Status__c:
if:
- choice:
when: ${{date(End_Date__c) < today}}
pick:
random_choice:
- Former
- Lapsed
- choice:
pick:
random_choice:
- Current
- Renewal
Account__c:
reference: Account

# Apex automated
# - object: Membership_Contact_Role__c
# fields:
# Name: STRING
# Start_Date__c: DATE
# End_Date__c: DATE
# Role__c: PICKLIST

# Is_Primary__c: BOOLEAN

# Membership__c: REFERENCE
# Contact__c: REFERENCE
Loading