If no opportunity has yet been created (there is no sf_opportunity_id):
Button on project page: "Create new opportunity"
List of Record Types displayed, user chooses
Page with fields for new Oppty is displayed
When submitted, new oppty in SF is created
That returns sf_opportunity_id, which is stored in hypha project model
If sf_opportunity_id exists when project is displayed, button with "See opportunity" with link to salesforce is displayed.
Requires: Project, Opportunity and RecordType models
Project Model
Revision: Add field sf_opportunity_id: sf_opportunity_id = models.CharField(max_length=20, null=True, blank=True)
RecordType and Opportunity Models
(See specific model definitions at bottom of Notion document relating to the specific Reset project)
Page:
Path: /apply/projects/
Location: Under "Actions to Take"
Condition:
If SALESFORCE_INTEGRATION: if no sf_opportunity_id in project, show "add opportunity button", otherwise, show button that says "Show opportunity in Salesforce" linking to the Salesforce Record.
Link is generated from HOST database variable, plus: 'lightning/r/Opportunity/sf_opportunity_id/view':
url =DATABASES['salesforce']['HOST'] + '/r/Opportunity/' + sf_opportunity_id + '/view'
Actions:
Add opportunity button leads to a pop-up form, giving user a choice of record types
Feature Name: "Add Opportunity Button"
Basic Workflow:
Requires: Project, Opportunity and RecordType models
Project Model
sf_opportunity_id = models.CharField(max_length=20, null=True, blank=True)
RecordType and Opportunity Models
(See specific model definitions at bottom of Notion document relating to the specific Reset project)
Page:
Condition:
url =DATABASES['salesforce']['HOST'] + '/r/Opportunity/' + sf_opportunity_id + '/view'
Actions:
class OpportunityForm(ModelForm): class Meta: model = Opportunity fields = ['name', 'description', 'stage_name', 'org_name', 'amount', 'op_type', 'close_date'] widgets = { 'project_id': forms.HiddenInput(), 'record_type': forms.HiddenInput() }
View
def new_oppty(request): if request.method == 'POST': form = OpportunityForm(request.POST) oppty = form.save() print(f"Oppty: {oppty.id}") project = get_object_or_404(Project, pk=request.POST.get('project_id')) context = { 'project': project, 'message': "Opportunity Saved!", 'oppty': oppty } return render(request, 'projects/detail.html', context) else: context = { 'form': OpportunityForm, 'project_id': request.GET.get('project_id'), 'record_type': request.GET.get('rt_id') } return render(request, 'opportunity/new_oppty.html', context)