snapshot of https://github.com/frappe/crm.git (develop, 2026-09-18; blobs > 131072B omitted)
Some checks failed
Frontend / Unit Tests & Coverage (push) Has been skipped
Regenerate POT file (translatable strings) / Regenerate POT file (develop) (push) Failing after 1m13s
Regenerate POT file (translatable strings) / Regenerate POT file (main-hotfix) (push) Failing after 6s
Server / Tests (frappe ${{ matrix.frappe-branch }}) (push) Has been skipped
Server / Resolve frappe matrix (push) Failing after 1s
Frontend / Lint (push) Failing after 1s
Frontend / Production Build (push) Failing after 1s
Server / Coverage Wrap Up (push) Has been skipped
Frontend / Coverage Wrap Up (push) Has been skipped

This commit is contained in:
upstream-mirror
2026-09-18 01:36:01 +05:00
commit db69de1c11
905 changed files with 102713 additions and 0 deletions

86
crm/demo/notes.py Normal file
View File

@@ -0,0 +1,86 @@
from datetime import datetime, timedelta
import frappe
from crm.demo.utils import backdate, resolve_owners
def create_demo_notes(lead_names, demo_users):
session_user, owner_1, owner_2, _ = resolve_owners(demo_users)
now = datetime.now()
# Two notes per lead — a call summary and a follow-up observation
notes_data = [
{
"title": "Initial Discovery Call",
"content": "<p>Had a productive intro call. They're evaluating solutions for Q3. Key stakeholders include the CTO and VP of Sales. Budget is pre-approved. Follow up with a tailored proposal.</p>",
"reference_doctype": "CRM Lead",
"reference_docname": lead_names[0],
"owner": session_user,
"days_ago": 56,
},
{
"title": "Pain Points Identified",
"content": "<p>Current system lacks reporting and integrations. Team size is growing fast — 40% headcount increase this year. Decision timeline is 6–8 weeks.</p>",
"reference_doctype": "CRM Lead",
"reference_docname": lead_names[0],
"owner": session_user,
"days_ago": 51,
},
{
"title": "Demo Feedback",
"content": "<p>Very positive response to the pipeline view. Asked about custom fields and API access. Needs sign-off from CFO before moving forward.</p>",
"reference_doctype": "CRM Lead",
"reference_docname": lead_names[1],
"owner": owner_1,
"days_ago": 46,
},
{
"title": "Competitor Mentioned",
"content": "<p>Currently trialing a competitor. Our differentiators: better UX, open source, and lower TCO. Send a comparison doc before next call.</p>",
"reference_doctype": "CRM Lead",
"reference_docname": lead_names[1],
"owner": owner_1,
"days_ago": 39,
},
{
"title": "Requirements Gathered",
"content": "<p>Needs CRM + email integration + team collaboration. Currently using spreadsheets. Strong motivation to move to a structured system this quarter.</p>",
"reference_doctype": "CRM Lead",
"reference_docname": lead_names[2],
"owner": owner_2,
"days_ago": 44,
},
{
"title": "Pricing Discussion",
"content": "<p>Walked through pricing tiers. They prefer an annual plan. Requested a 2-week trial extension. Champion is very engaged — internal buy-in looks strong.</p>",
"reference_doctype": "CRM Lead",
"reference_docname": lead_names[3],
"owner": owner_1,
"days_ago": 40,
},
]
created = []
for data in notes_data:
ts = now - timedelta(days=data["days_ago"])
owner = data["owner"]
note = frappe.get_doc(
{
"doctype": "FCRM Note",
"title": data["title"],
"content": data["content"],
"reference_doctype": data["reference_doctype"],
"reference_docname": data["reference_docname"],
}
).insert(ignore_permissions=True)
backdate("FCRM Note", note.name, owner, ts)
created.append(note.name)
return created
def delete_demo_notes(note_names):
for name in note_names:
if frappe.db.exists("FCRM Note", name):
frappe.delete_doc("FCRM Note", name, ignore_permissions=True, force=True)