style: format js files

This commit is contained in:
Ankush Menat
2024-03-11 10:58:48 +05:30
parent c46be27e9e
commit 4c629d31c6
605 changed files with 27454 additions and 18952 deletions

View File

@@ -1,26 +1,26 @@
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Appointment', {
refresh: function(frm) {
if(frm.doc.lead){
frm.add_custom_button(frm.doc.lead,()=>{
frappe.ui.form.on("Appointment", {
refresh: function (frm) {
if (frm.doc.lead) {
frm.add_custom_button(frm.doc.lead, () => {
frappe.set_route("Form", "Lead", frm.doc.lead);
});
}
if(frm.doc.calendar_event){
frm.add_custom_button(__(frm.doc.calendar_event),()=>{
if (frm.doc.calendar_event) {
frm.add_custom_button(__(frm.doc.calendar_event), () => {
frappe.set_route("Form", "Event", frm.doc.calendar_event);
});
}
},
onload: function(frm){
frm.set_query("appointment_with", function(){
onload: function (frm) {
frm.set_query("appointment_with", function () {
return {
filters : {
"name": ["in", ["Customer", "Lead"]]
}
filters: {
name: ["in", ["Customer", "Lead"]],
},
};
});
}
},
});

View File

@@ -1,10 +1,14 @@
frappe.ui.form.on('Appointment Booking Settings', 'validate',check_times);
frappe.ui.form.on("Appointment Booking Settings", "validate", check_times);
function check_times(frm) {
$.each(frm.doc.availability_of_slots || [], function (i, d) {
let from_time = Date.parse('01/01/2019 ' + d.from_time);
let to_time = Date.parse('01/01/2019 ' + d.to_time);
let from_time = Date.parse("01/01/2019 " + d.from_time);
let to_time = Date.parse("01/01/2019 " + d.to_time);
if (from_time > to_time) {
frappe.throw(__('In row {0} of Appointment Booking Slots: "To Time" must be later than "From Time".', [i + 1]));
frappe.throw(
__('In row {0} of Appointment Booking Slots: "To Time" must be later than "From Time".', [
i + 1,
])
);
}
});
}

View File

@@ -1,17 +1,25 @@
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Campaign', {
refresh: function(frm) {
frappe.ui.form.on("Campaign", {
refresh: function (frm) {
erpnext.toggle_naming_series();
if (frm.is_new()) {
frm.toggle_display("naming_series", frappe.boot.sysdefaults.campaign_naming_by=="Naming Series");
frm.toggle_display(
"naming_series",
frappe.boot.sysdefaults.campaign_naming_by == "Naming Series"
);
} else {
cur_frm.add_custom_button(__("View Leads"), function() {
frappe.route_options = {"source": "Campaign", "campaign_name": frm.doc.name};
frappe.set_route("List", "Lead");
}, "fa fa-list", true);
cur_frm.add_custom_button(
__("View Leads"),
function () {
frappe.route_options = { source: "Campaign", campaign_name: frm.doc.name };
frappe.set_route("List", "Lead");
},
"fa fa-list",
true
);
}
}
},
});

View File

@@ -1,8 +1,7 @@
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Competitor', {
frappe.ui.form.on("Competitor", {
// refresh: function(frm) {
// }
});

View File

@@ -5,12 +5,12 @@ frappe.ui.form.on("Contract", {
contract_template: function (frm) {
if (frm.doc.contract_template) {
frappe.call({
method: 'erpnext.crm.doctype.contract_template.contract_template.get_contract_template',
method: "erpnext.crm.doctype.contract_template.contract_template.get_contract_template",
args: {
template_name: frm.doc.contract_template,
doc: frm.doc
doc: frm.doc,
},
callback: function(r) {
callback: function (r) {
if (r && r.message) {
let contract_template = r.message.contract_template;
frm.set_value("contract_terms", r.message.contract_terms);
@@ -18,15 +18,15 @@ frappe.ui.form.on("Contract", {
if (frm.doc.requires_fulfilment) {
// Populate the fulfilment terms table from a contract template, if any
r.message.contract_template.fulfilment_terms.forEach(element => {
r.message.contract_template.fulfilment_terms.forEach((element) => {
let d = frm.add_child("fulfilment_terms");
d.requirement = element.requirement;
});
frm.refresh_field("fulfilment_terms");
}
}
}
},
});
}
}
},
});

View File

@@ -1,4 +1,4 @@
frappe.listview_settings['Contract'] = {
frappe.listview_settings["Contract"] = {
add_fields: ["status"],
get_indicator: function (doc) {
if (doc.status == "Unsigned") {

View File

@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Contract Fulfilment Checklist', {
refresh: function(frm) {
}
frappe.ui.form.on("Contract Fulfilment Checklist", {
refresh: function (frm) {},
});

View File

@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Contract Template', {
refresh: function(frm) {
}
frappe.ui.form.on("Contract Template", {
refresh: function (frm) {},
});

View File

@@ -1,8 +1,7 @@
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('CRM Settings', {
frappe.ui.form.on("CRM Settings", {
// refresh: function(frm) {
// }
});

View File

@@ -1,8 +1,8 @@
// Copyright (c) 2019, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Email Campaign', {
email_campaign_for: function(frm) {
frm.set_value('recipient', '');
}
frappe.ui.form.on("Email Campaign", {
email_campaign_for: function (frm) {
frm.set_value("recipient", "");
},
});

View File

@@ -1,11 +1,11 @@
frappe.listview_settings['Email Campaign'] = {
get_indicator: function(doc) {
frappe.listview_settings["Email Campaign"] = {
get_indicator: function (doc) {
var colors = {
"Unsubscribed": "red",
"Scheduled": "blue",
Unsubscribed: "red",
Scheduled: "blue",
"In Progress": "orange",
"Completed": "green"
Completed: "green",
};
return [__(doc.status), colors[doc.status], "status,=," + doc.status];
}
},
};

View File

@@ -5,46 +5,50 @@ frappe.provide("erpnext");
cur_frm.email_field = "email_id";
erpnext.LeadController = class LeadController extends frappe.ui.form.Controller {
setup () {
setup() {
this.frm.make_methods = {
'Customer': this.make_customer,
'Quotation': this.make_quotation,
'Opportunity': this.make_opportunity
Customer: this.make_customer,
Quotation: this.make_quotation,
Opportunity: this.make_opportunity,
};
// For avoiding integration issues.
this.frm.set_df_property('first_name', 'reqd', true);
this.frm.set_df_property("first_name", "reqd", true);
}
onload () {
onload() {
this.frm.set_query("customer", function (doc, cdt, cdn) {
return { query: "erpnext.controllers.queries.customer_query" }
return { query: "erpnext.controllers.queries.customer_query" };
});
this.frm.set_query("lead_owner", function (doc, cdt, cdn) {
return { query: "frappe.core.doctype.user.user.user_query" }
return { query: "frappe.core.doctype.user.user.user_query" };
});
}
refresh () {
refresh() {
var me = this;
let doc = this.frm.doc;
erpnext.toggle_naming_series();
frappe.dynamic_link = {
doc: doc,
fieldname: 'name',
doctype: 'Lead'
fieldname: "name",
doctype: "Lead",
};
if (!this.frm.is_new() && doc.__onload && !doc.__onload.is_customer) {
this.frm.add_custom_button(__("Customer"), this.make_customer, __("Create"));
this.frm.add_custom_button(__("Opportunity"), function() {
me.frm.trigger("make_opportunity");
}, __("Create"));
this.frm.add_custom_button(
__("Opportunity"),
function () {
me.frm.trigger("make_opportunity");
},
__("Create")
);
this.frm.add_custom_button(__("Quotation"), this.make_quotation, __("Create"));
if (!doc.__onload.linked_prospects.length) {
this.frm.add_custom_button(__("Prospect"), this.make_prospect, __("Create"));
this.frm.add_custom_button(__('Add to Prospect'), this.add_lead_to_prospect, __('Action'));
this.frm.add_custom_button(__("Add to Prospect"), this.add_lead_to_prospect, __("Action"));
}
}
@@ -58,50 +62,54 @@ erpnext.LeadController = class LeadController extends frappe.ui.form.Controller
this.show_activities();
}
add_lead_to_prospect () {
frappe.prompt([
{
fieldname: 'prospect',
label: __('Prospect'),
fieldtype: 'Link',
options: 'Prospect',
reqd: 1
}
],
function(data) {
frappe.call({
method: 'erpnext.crm.doctype.lead.lead.add_lead_to_prospect',
args: {
'lead': cur_frm.doc.name,
'prospect': data.prospect
add_lead_to_prospect() {
frappe.prompt(
[
{
fieldname: "prospect",
label: __("Prospect"),
fieldtype: "Link",
options: "Prospect",
reqd: 1,
},
callback: function(r) {
if (!r.exc) {
frm.reload_doc();
}
},
freeze: true,
freeze_message: __('Adding Lead to Prospect...')
});
}, __('Add Lead to Prospect'), __('Add'));
],
function (data) {
frappe.call({
method: "erpnext.crm.doctype.lead.lead.add_lead_to_prospect",
args: {
lead: cur_frm.doc.name,
prospect: data.prospect,
},
callback: function (r) {
if (!r.exc) {
frm.reload_doc();
}
},
freeze: true,
freeze_message: __("Adding Lead to Prospect..."),
});
},
__("Add Lead to Prospect"),
__("Add")
);
}
make_customer () {
make_customer() {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.lead.lead.make_customer",
frm: cur_frm
})
frm: cur_frm,
});
}
make_quotation () {
make_quotation() {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.lead.lead.make_quotation",
frm: cur_frm
})
frm: cur_frm,
});
}
make_prospect () {
frappe.model.with_doctype("Prospect", function() {
make_prospect() {
frappe.model.with_doctype("Prospect", function () {
let prospect = frappe.model.get_new_doc("Prospect");
prospect.company_name = cur_frm.doc.company_name;
prospect.no_of_employees = cur_frm.doc.no_of_employees;
@@ -113,14 +121,14 @@ erpnext.LeadController = class LeadController extends frappe.ui.form.Controller
prospect.prospect_owner = cur_frm.doc.lead_owner;
prospect.notes = cur_frm.doc.notes;
let leads_row = frappe.model.add_child(prospect, 'leads');
let leads_row = frappe.model.add_child(prospect, "leads");
leads_row.lead = cur_frm.doc.name;
frappe.set_route("Form", "Prospect", prospect.name);
});
}
company_name () {
company_name() {
if (!this.frm.doc.lead_name) {
this.frm.set_value("lead_name", this.frm.doc.company_name);
}
@@ -149,86 +157,91 @@ erpnext.LeadController = class LeadController extends frappe.ui.form.Controller
}
};
extend_cscript(cur_frm.cscript, new erpnext.LeadController({ frm: cur_frm }));
frappe.ui.form.on("Lead", {
make_opportunity: async function(frm) {
let existing_prospect = (await frappe.db.get_value("Prospect Lead",
{
"lead": frm.doc.name
},
"name", null, "Prospect"
)).message.name;
make_opportunity: async function (frm) {
let existing_prospect = (
await frappe.db.get_value(
"Prospect Lead",
{
lead: frm.doc.name,
},
"name",
null,
"Prospect"
)
).message.name;
if (!existing_prospect) {
var fields = [
{
"label": "Create Prospect",
"fieldname": "create_prospect",
"fieldtype": "Check",
"default": 1
label: "Create Prospect",
fieldname: "create_prospect",
fieldtype: "Check",
default: 1,
},
{
"label": "Prospect Name",
"fieldname": "prospect_name",
"fieldtype": "Data",
"default": frm.doc.company_name,
"depends_on": "create_prospect"
}
label: "Prospect Name",
fieldname: "prospect_name",
fieldtype: "Data",
default: frm.doc.company_name,
depends_on: "create_prospect",
},
];
}
let existing_contact = (await frappe.db.get_value("Contact",
{
"first_name": frm.doc.first_name || frm.doc.lead_name,
"last_name": frm.doc.last_name
},
"name"
)).message.name;
let existing_contact = (
await frappe.db.get_value(
"Contact",
{
first_name: frm.doc.first_name || frm.doc.lead_name,
last_name: frm.doc.last_name,
},
"name"
)
).message.name;
if (!existing_contact) {
fields.push(
{
"label": "Create Contact",
"fieldname": "create_contact",
"fieldtype": "Check",
"default": "1"
}
);
fields.push({
label: "Create Contact",
fieldname: "create_contact",
fieldtype: "Check",
default: "1",
});
}
if (fields) {
var d = new frappe.ui.Dialog({
title: __('Create Opportunity'),
title: __("Create Opportunity"),
fields: fields,
primary_action: function() {
primary_action: function () {
var data = d.get_values();
frappe.call({
method: 'create_prospect_and_contact',
method: "create_prospect_and_contact",
doc: frm.doc,
args: {
data: data,
},
freeze: true,
callback: function(r) {
callback: function (r) {
if (!r.exc) {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.lead.lead.make_opportunity",
frm: frm
frm: frm,
});
}
d.hide();
}
},
});
},
primary_action_label: __('Create')
primary_action_label: __("Create"),
});
d.show();
} else {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.lead.lead.make_opportunity",
frm: frm
frm: frm,
});
}
}
});
},
});

View File

@@ -1,28 +1,42 @@
frappe.listview_settings['Lead'] = {
onload: function(listview) {
frappe.listview_settings["Lead"] = {
onload: function (listview) {
if (frappe.boot.user.can_create.includes("Prospect")) {
listview.page.add_action_item(__("Create Prospect"), function() {
frappe.model.with_doctype("Prospect", function() {
listview.page.add_action_item(__("Create Prospect"), function () {
frappe.model.with_doctype("Prospect", function () {
let prospect = frappe.model.get_new_doc("Prospect");
let leads = listview.get_checked_items();
frappe.db.get_value("Lead", leads[0].name, ["company_name", "no_of_employees", "industry", "market_segment", "territory", "fax", "website", "lead_owner"], (r) => {
prospect.company_name = r.company_name;
prospect.no_of_employees = r.no_of_employees;
prospect.industry = r.industry;
prospect.market_segment = r.market_segment;
prospect.territory = r.territory;
prospect.fax = r.fax;
prospect.website = r.website;
prospect.prospect_owner = r.lead_owner;
frappe.db.get_value(
"Lead",
leads[0].name,
[
"company_name",
"no_of_employees",
"industry",
"market_segment",
"territory",
"fax",
"website",
"lead_owner",
],
(r) => {
prospect.company_name = r.company_name;
prospect.no_of_employees = r.no_of_employees;
prospect.industry = r.industry;
prospect.market_segment = r.market_segment;
prospect.territory = r.territory;
prospect.fax = r.fax;
prospect.website = r.website;
prospect.prospect_owner = r.lead_owner;
leads.forEach(function(lead) {
let lead_prospect_row = frappe.model.add_child(prospect, 'leads');
lead_prospect_row.lead = lead.name;
});
frappe.set_route("Form", "Prospect", prospect.name);
});
leads.forEach(function (lead) {
let lead_prospect_row = frappe.model.add_child(prospect, "leads");
lead_prospect_row.lead = lead.name;
});
frappe.set_route("Form", "Prospect", prospect.name);
}
);
});
});
}
}
},
};

View File

@@ -1,8 +1,7 @@
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Lead Source', {
frappe.ui.form.on("Lead Source", {
// refresh: function(frm) {
// }
});

View File

@@ -1,23 +1,29 @@
// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('LinkedIn Settings', {
onload: function(frm) {
if (frm.doc.session_status == 'Expired' && frm.doc.consumer_key && frm.doc.consumer_secret) {
frappe.ui.form.on("LinkedIn Settings", {
onload: function (frm) {
if (frm.doc.session_status == "Expired" && frm.doc.consumer_key && frm.doc.consumer_secret) {
frappe.confirm(
__('Session not valid. Do you want to login?'),
function(){
__("Session not valid. Do you want to login?"),
function () {
frm.trigger("login");
},
function(){
function () {
window.close();
}
);
}
frm.dashboard.set_headline(__("For more information, {0}.", [`<a target='_blank' href='https://docs.erpnext.com/docs/user/manual/en/CRM/linkedin-settings'>${__('click here')}</a>`]));
frm.dashboard.set_headline(
__("For more information, {0}.", [
`<a target='_blank' href='https://docs.erpnext.com/docs/user/manual/en/CRM/linkedin-settings'>${__(
"click here"
)}</a>`,
])
);
},
refresh: function(frm) {
if (frm.doc.session_status=="Expired"){
refresh: function (frm) {
if (frm.doc.session_status == "Expired") {
let msg = __("Session not active. Save document to login.");
frm.dashboard.set_headline_alert(
`<div class="row">
@@ -28,19 +34,18 @@ frappe.ui.form.on('LinkedIn Settings', {
);
}
if (frm.doc.session_status=="Active"){
if (frm.doc.session_status == "Active") {
let d = new Date(frm.doc.modified);
d.setDate(d.getDate()+60);
d.setDate(d.getDate() + 60);
let dn = new Date();
let days = d.getTime() - dn.getTime();
days = Math.floor(days/(1000 * 3600 * 24));
let msg,color;
days = Math.floor(days / (1000 * 3600 * 24));
let msg, color;
if (days>0){
if (days > 0) {
msg = __("Your session will be expire in {0} days.", [days]);
color = "green";
}
else {
} else {
msg = __("Session is expired. Save doc to login.");
color = "red";
}
@@ -54,21 +59,23 @@ frappe.ui.form.on('LinkedIn Settings', {
);
}
},
login: function(frm) {
if (frm.doc.consumer_key && frm.doc.consumer_secret){
login: function (frm) {
if (frm.doc.consumer_key && frm.doc.consumer_secret) {
frappe.dom.freeze();
frappe.call({
doc: frm.doc,
method: "get_authorization_url",
callback : function(r) {
window.location.href = r.message;
}
}).fail(function() {
frappe.dom.unfreeze();
});
frappe
.call({
doc: frm.doc,
method: "get_authorization_url",
callback: function (r) {
window.location.href = r.message;
},
})
.fail(function () {
frappe.dom.unfreeze();
});
}
},
after_save: function(frm) {
after_save: function (frm) {
frm.trigger("login");
}
},
});

View File

@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Lost Reason Detail', {
refresh: function() {
}
frappe.ui.form.on("Lost Reason Detail", {
refresh: function () {},
});

View File

@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Market Segment', {
refresh: function(frm) {
}
frappe.ui.form.on("Market Segment", {
refresh: function (frm) {},
});

View File

@@ -1,31 +1,31 @@
frappe.listview_settings['Opportunity'] = {
frappe.listview_settings["Opportunity"] = {
add_fields: ["customer_name", "opportunity_type", "opportunity_from", "status"],
get_indicator: function(doc) {
get_indicator: function (doc) {
var indicator = [__(doc.status), frappe.utils.guess_colour(doc.status), "status,=," + doc.status];
if(doc.status=="Quotation") {
if (doc.status == "Quotation") {
indicator[1] = "green";
}
return indicator;
},
onload: function(listview) {
onload: function (listview) {
var method = "erpnext.crm.doctype.opportunity.opportunity.set_multiple_status";
listview.page.add_menu_item(__("Set as Open"), function() {
listview.call_for_selected_items(method, {"status": "Open"});
listview.page.add_menu_item(__("Set as Open"), function () {
listview.call_for_selected_items(method, { status: "Open" });
});
listview.page.add_menu_item(__("Set as Closed"), function() {
listview.call_for_selected_items(method, {"status": "Closed"});
listview.page.add_menu_item(__("Set as Closed"), function () {
listview.call_for_selected_items(method, { status: "Closed" });
});
if(listview.page.fields_dict.opportunity_from) {
listview.page.fields_dict.opportunity_from.get_query = function() {
if (listview.page.fields_dict.opportunity_from) {
listview.page.fields_dict.opportunity_from.get_query = function () {
return {
"filters": {
"name": ["in", ["Customer", "Lead"]],
}
filters: {
name: ["in", ["Customer", "Lead"]],
},
};
};
}
}
},
};

View File

@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Opportunity Lost Reason', {
refresh: function() {
}
frappe.ui.form.on("Opportunity Lost Reason", {
refresh: function () {},
});

View File

@@ -1,8 +1,6 @@
// Copyright (c) 2017, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Opportunity Type', {
refresh: function(frm) {
}
frappe.ui.form.on("Opportunity Type", {
refresh: function (frm) {},
});

View File

@@ -1,25 +1,33 @@
// Copyright (c) 2021, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Prospect', {
refresh (frm) {
frappe.ui.form.on("Prospect", {
refresh(frm) {
frappe.dynamic_link = { doc: frm.doc, fieldname: "name", doctype: frm.doctype };
if (!frm.is_new() && frappe.boot.user.can_create.includes("Customer")) {
frm.add_custom_button(__("Customer"), function() {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.prospect.prospect.make_customer",
frm: frm
});
}, __("Create"));
frm.add_custom_button(
__("Customer"),
function () {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.prospect.prospect.make_customer",
frm: frm,
});
},
__("Create")
);
}
if (!frm.is_new() && frappe.boot.user.can_create.includes("Opportunity")) {
frm.add_custom_button(__("Opportunity"), function() {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.prospect.prospect.make_opportunity",
frm: frm
});
}, __("Create"));
frm.add_custom_button(
__("Opportunity"),
function () {
frappe.model.open_mapped_doc({
method: "erpnext.crm.doctype.prospect.prospect.make_opportunity",
frm: frm,
});
},
__("Create")
);
}
if (!frm.is_new()) {
@@ -31,7 +39,7 @@ frappe.ui.form.on('Prospect', {
frm.trigger("show_activities");
},
show_notes (frm) {
show_notes(frm) {
const crm_notes = new erpnext.utils.CRMNotes({
frm: frm,
notes_wrapper: $(frm.fields_dict.notes_html.wrapper),
@@ -39,7 +47,7 @@ frappe.ui.form.on('Prospect', {
crm_notes.refresh();
},
show_activities (frm) {
show_activities(frm) {
const crm_activities = new erpnext.utils.CRMActivities({
frm: frm,
open_activities_wrapper: $(frm.fields_dict.open_activities_html.wrapper),
@@ -47,6 +55,5 @@ frappe.ui.form.on('Prospect', {
form_wrapper: $(frm.wrapper),
});
crm_activities.refresh();
}
},
});

View File

@@ -1,8 +1,6 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Sales Stage', {
refresh: function(frm) {
}
frappe.ui.form.on("Sales Stage", {
refresh: function (frm) {},
});

View File

@@ -1,7 +1,7 @@
// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Social Media Post', {
validate: function(frm) {
frappe.ui.form.on("Social Media Post", {
validate: function (frm) {
if (frm.doc.twitter === 0 && frm.doc.linkedin === 0) {
frappe.throw(__("Select atleast one Social Media Platform to Share on."));
}
@@ -12,111 +12,116 @@ frappe.ui.form.on('Social Media Post', {
frappe.throw(__("Scheduled Time must be a future time."));
}
}
frm.trigger('validate_tweet_length');
frm.trigger("validate_tweet_length");
},
text: function(frm) {
text: function (frm) {
if (frm.doc.text) {
frm.set_df_property('text', 'description', `${frm.doc.text.length}/280`);
frm.refresh_field('text');
frm.trigger('validate_tweet_length');
frm.set_df_property("text", "description", `${frm.doc.text.length}/280`);
frm.refresh_field("text");
frm.trigger("validate_tweet_length");
}
},
validate_tweet_length: function(frm) {
validate_tweet_length: function (frm) {
if (frm.doc.text && frm.doc.text.length > 280) {
frappe.throw(__("Tweet length Must be less than 280."));
}
},
onload: function(frm) {
frm.trigger('make_dashboard');
onload: function (frm) {
frm.trigger("make_dashboard");
},
make_dashboard: function(frm) {
make_dashboard: function (frm) {
if (frm.doc.post_status == "Posted") {
frappe.call({
doc: frm.doc,
method: 'get_post',
method: "get_post",
freeze: true,
callback: (r) => {
if (!r.message) {
return;
}
let datasets = [], colors = [];
let datasets = [],
colors = [];
if (r.message && r.message.twitter) {
colors.push('#1DA1F2');
colors.push("#1DA1F2");
datasets.push({
name: 'Twitter',
values: [r.message.twitter.favorite_count, r.message.twitter.retweet_count]
name: "Twitter",
values: [r.message.twitter.favorite_count, r.message.twitter.retweet_count],
});
}
if (r.message && r.message.linkedin) {
colors.push('#0077b5');
colors.push("#0077b5");
datasets.push({
name: 'LinkedIn',
values: [r.message.linkedin.totalShareStatistics.likeCount, r.message.linkedin.totalShareStatistics.shareCount]
name: "LinkedIn",
values: [
r.message.linkedin.totalShareStatistics.likeCount,
r.message.linkedin.totalShareStatistics.shareCount,
],
});
}
if (datasets.length) {
frm.dashboard.render_graph({
data: {
labels: ['Likes', 'Retweets/Shares'],
datasets: datasets
labels: ["Likes", "Retweets/Shares"],
datasets: datasets,
},
title: __("Post Metrics"),
type: 'bar',
type: "bar",
height: 300,
colors: colors
colors: colors,
});
}
}
},
});
}
},
refresh: function(frm) {
frm.trigger('text');
refresh: function (frm) {
frm.trigger("text");
if (frm.doc.docstatus === 1) {
if (!['Posted', 'Deleted'].includes(frm.doc.post_status)) {
frm.trigger('add_post_btn');
if (!["Posted", "Deleted"].includes(frm.doc.post_status)) {
frm.trigger("add_post_btn");
}
if (frm.doc.post_status !='Deleted') {
frm.add_custom_button(__('Delete Post'), function() {
frappe.confirm(__('Are you sure want to delete the Post from Social Media platforms?'),
function() {
if (frm.doc.post_status != "Deleted") {
frm.add_custom_button(__("Delete Post"), function () {
frappe.confirm(
__("Are you sure want to delete the Post from Social Media platforms?"),
function () {
frappe.call({
doc: frm.doc,
method: 'delete_post',
method: "delete_post",
freeze: true,
callback: () => {
frm.reload_doc();
}
},
});
}
);
});
}
if (frm.doc.post_status !='Deleted') {
let html='';
if (frm.doc.post_status != "Deleted") {
let html = "";
if (frm.doc.twitter) {
let color = frm.doc.twitter_post_id ? "green" : "red";
let status = frm.doc.twitter_post_id ? "Posted" : "Not Posted";
html += `<div class="col-xs-6">
<span class="indicator whitespace-nowrap ${color}"><span>Twitter : ${status} </span></span>
</div>` ;
</div>`;
}
if (frm.doc.linkedin) {
let color = frm.doc.linkedin_post_id ? "green" : "red";
let status = frm.doc.linkedin_post_id ? "Posted" : "Not Posted";
html += `<div class="col-xs-6">
<span class="indicator whitespace-nowrap ${color}"><span>LinkedIn : ${status} </span></span>
</div>` ;
</div>`;
}
html = `<div class="row">${html}</div>`;
frm.dashboard.set_headline_alert(html);
@@ -124,16 +129,16 @@ frappe.ui.form.on('Social Media Post', {
}
},
add_post_btn: function(frm) {
frm.add_custom_button(__('Post Now'), function() {
add_post_btn: function (frm) {
frm.add_custom_button(__("Post Now"), function () {
frappe.call({
doc: frm.doc,
method: 'post',
method: "post",
freeze: true,
callback: function() {
callback: function () {
frm.reload_doc();
}
},
});
});
}
},
});

View File

@@ -1,11 +1,14 @@
frappe.listview_settings['Social Media Post'] = {
frappe.listview_settings["Social Media Post"] = {
add_fields: ["status", "post_status"],
get_indicator: function(doc) {
return [__(doc.post_status), {
"Scheduled": "orange",
"Posted": "green",
"Error": "red",
"Deleted": "red"
}[doc.post_status]];
}
}
get_indicator: function (doc) {
return [
__(doc.post_status),
{
Scheduled: "orange",
Posted: "green",
Error: "red",
Deleted: "red",
}[doc.post_status],
];
},
};

View File

@@ -1,31 +1,38 @@
// Copyright (c) 2020, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.ui.form.on('Twitter Settings', {
onload: function(frm) {
if (frm.doc.session_status == 'Expired' && frm.doc.consumer_key && frm.doc.consumer_secret){
frappe.ui.form.on("Twitter Settings", {
onload: function (frm) {
if (frm.doc.session_status == "Expired" && frm.doc.consumer_key && frm.doc.consumer_secret) {
frappe.confirm(
__('Session not valid, Do you want to login?'),
function(){
__("Session not valid, Do you want to login?"),
function () {
frm.trigger("login");
},
function(){
function () {
window.close();
}
);
}
frm.dashboard.set_headline(__("For more information, {0}.", [`<a target='_blank' href='https://docs.erpnext.com/docs/user/manual/en/CRM/twitter-settings'>${__('click here')}</a>`]));
frm.dashboard.set_headline(
__("For more information, {0}.", [
`<a target='_blank' href='https://docs.erpnext.com/docs/user/manual/en/CRM/twitter-settings'>${__(
"click here"
)}</a>`,
])
);
},
refresh: function(frm) {
let msg, color, flag=false;
refresh: function (frm) {
let msg,
color,
flag = false;
if (frm.doc.session_status == "Active") {
msg = __("Session Active");
color = 'green';
color = "green";
flag = true;
}
else if(frm.doc.consumer_key && frm.doc.consumer_secret) {
} else if (frm.doc.consumer_key && frm.doc.consumer_secret) {
msg = __("Session Not Active. Save doc to login.");
color = 'red';
color = "red";
flag = true;
}
@@ -39,21 +46,23 @@ frappe.ui.form.on('Twitter Settings', {
);
}
},
login: function(frm) {
if (frm.doc.consumer_key && frm.doc.consumer_secret){
login: function (frm) {
if (frm.doc.consumer_key && frm.doc.consumer_secret) {
frappe.dom.freeze();
frappe.call({
doc: frm.doc,
method: "get_authorize_url",
callback : function(r) {
window.location.href = r.message;
}
}).fail(function() {
frappe.dom.unfreeze();
});
frappe
.call({
doc: frm.doc,
method: "get_authorize_url",
callback: function (r) {
window.location.href = r.message;
},
})
.fail(function () {
frappe.dom.unfreeze();
});
}
},
after_save: function(frm) {
after_save: function (frm) {
frm.trigger("login");
}
},
});

View File

@@ -1,18 +1,18 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.query_reports["Campaign Efficiency"] = {
"filters": [
filters: [
{
"fieldname": "from_date",
"label": __("From Date"),
"fieldtype": "Date",
"default": frappe.defaults.get_user_default("year_start_date"),
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
default: frappe.defaults.get_user_default("year_start_date"),
},
{
"fieldname": "to_date",
"label": __("To Date"),
"fieldtype": "Date",
"default": frappe.defaults.get_user_default("year_end_date"),
}
]
fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
default: frappe.defaults.get_user_default("year_end_date"),
},
],
};

View File

@@ -3,41 +3,43 @@
/* eslint-disable */
frappe.query_reports["First Response Time for Opportunity"] = {
"filters": [
filters: [
{
"fieldname": "from_date",
"label": __("From Date"),
"fieldtype": "Date",
"reqd": 1,
"default": frappe.datetime.add_days(frappe.datetime.nowdate(), -30)
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
reqd: 1,
default: frappe.datetime.add_days(frappe.datetime.nowdate(), -30),
},
{
"fieldname": "to_date",
"label": __("To Date"),
"fieldtype": "Date",
"reqd": 1,
"default": frappe.datetime.nowdate()
fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
reqd: 1,
default: frappe.datetime.nowdate(),
},
],
get_chart_data: function (_columns, result) {
return {
data: {
labels: result.map(d => d.creation_date),
datasets: [{
name: "First Response Time",
values: result.map(d => d.first_response_time)
}]
labels: result.map((d) => d.creation_date),
datasets: [
{
name: "First Response Time",
values: result.map((d) => d.first_response_time),
},
],
},
type: "line",
tooltipOptions: {
formatTooltipY: d => {
formatTooltipY: (d) => {
let duration_options = {
hide_days: 0,
hide_seconds: 0
hide_seconds: 0,
};
return frappe.utils.get_formatted_duration(d, duration_options);
}
}
}
}
},
},
};
},
};

View File

@@ -3,20 +3,20 @@
/* eslint-disable */
frappe.query_reports["Lead Conversion Time"] = {
"filters": [
filters: [
{
"fieldname":"from_date",
"label": __("From Date"),
"fieldtype": "Date",
'reqd': 1,
"default": frappe.datetime.add_days(frappe.datetime.nowdate(), -30)
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
reqd: 1,
default: frappe.datetime.add_days(frappe.datetime.nowdate(), -30),
},
{
"fieldname":"to_date",
"label": __("To Date"),
"fieldtype": "Date",
'reqd': 1,
"default":frappe.datetime.nowdate()
fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
reqd: 1,
default: frappe.datetime.nowdate(),
},
]
],
};

View File

@@ -3,50 +3,50 @@
/* eslint-disable */
frappe.query_reports["Lead Details"] = {
"filters": [
filters: [
{
"fieldname":"company",
"label": __("Company"),
"fieldtype": "Link",
"options": "Company",
"default": frappe.defaults.get_user_default("Company"),
"reqd": 1
fieldname: "company",
label: __("Company"),
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company"),
reqd: 1,
},
{
"fieldname":"from_date",
"label": __("From Date"),
"fieldtype": "Date",
"default": frappe.datetime.add_months(frappe.datetime.get_today(), -12),
"reqd": 1
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
default: frappe.datetime.add_months(frappe.datetime.get_today(), -12),
reqd: 1,
},
{
"fieldname":"to_date",
"label": __("To Date"),
"fieldtype": "Date",
"default": frappe.datetime.get_today(),
"reqd": 1
fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
default: frappe.datetime.get_today(),
reqd: 1,
},
{
"fieldname":"status",
"label": __("Status"),
"fieldtype": "Select",
fieldname: "status",
label: __("Status"),
fieldtype: "Select",
options: [
{ "value": "Lead", "label": __("Lead") },
{ "value": "Open", "label": __("Open") },
{ "value": "Replied", "label": __("Replied") },
{ "value": "Opportunity", "label": __("Opportunity") },
{ "value": "Quotation", "label": __("Quotation") },
{ "value": "Lost Quotation", "label": __("Lost Quotation") },
{ "value": "Interested", "label": __("Interested") },
{ "value": "Converted", "label": __("Converted") },
{ "value": "Do Not Contact", "label": __("Do Not Contact") },
{ value: "Lead", label: __("Lead") },
{ value: "Open", label: __("Open") },
{ value: "Replied", label: __("Replied") },
{ value: "Opportunity", label: __("Opportunity") },
{ value: "Quotation", label: __("Quotation") },
{ value: "Lost Quotation", label: __("Lost Quotation") },
{ value: "Interested", label: __("Interested") },
{ value: "Converted", label: __("Converted") },
{ value: "Do Not Contact", label: __("Do Not Contact") },
],
},
{
"fieldname":"territory",
"label": __("Territory"),
"fieldtype": "Link",
"options": "Territory",
}
]
fieldname: "territory",
label: __("Territory"),
fieldtype: "Link",
options: "Territory",
},
],
};

View File

@@ -1,17 +1,18 @@
// Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt
frappe.query_reports["Lead Owner Efficiency"] = {
"filters": [
{
"fieldname": "from_date",
"label": __("From Date"),
"fieldtype": "Date",
"default": frappe.defaults.get_user_default("year_start_date"),
},
{
"fieldname": "to_date",
"label": __("To Date"),
"fieldtype": "Date",
"default": frappe.defaults.get_user_default("year_end_date"),
}
]};
frappe.query_reports["Lead Owner Efficiency"] = {
filters: [
{
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
default: frappe.defaults.get_user_default("year_start_date"),
},
{
fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
default: frappe.defaults.get_user_default("year_end_date"),
},
],
};

View File

@@ -3,59 +3,59 @@
/* eslint-disable */
frappe.query_reports["Lost Opportunity"] = {
"filters": [
filters: [
{
"fieldname":"company",
"label": __("Company"),
"fieldtype": "Link",
"options": "Company",
"default": frappe.defaults.get_user_default("Company"),
"reqd": 1
fieldname: "company",
label: __("Company"),
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company"),
reqd: 1,
},
{
"fieldname":"from_date",
"label": __("From Date"),
"fieldtype": "Date",
"default": frappe.datetime.add_months(frappe.datetime.get_today(), -12),
"reqd": 1
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
default: frappe.datetime.add_months(frappe.datetime.get_today(), -12),
reqd: 1,
},
{
"fieldname":"to_date",
"label": __("To Date"),
"fieldtype": "Date",
"default": frappe.datetime.get_today(),
"reqd": 1
fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date",
default: frappe.datetime.get_today(),
reqd: 1,
},
{
"fieldname":"lost_reason",
"label": __("Lost Reason"),
"fieldtype": "Link",
"options": "Opportunity Lost Reason"
fieldname: "lost_reason",
label: __("Lost Reason"),
fieldtype: "Link",
options: "Opportunity Lost Reason",
},
{
"fieldname":"territory",
"label": __("Territory"),
"fieldtype": "Link",
"options": "Territory"
fieldname: "territory",
label: __("Territory"),
fieldtype: "Link",
options: "Territory",
},
{
"fieldname":"opportunity_from",
"label": __("Opportunity From"),
"fieldtype": "Link",
"options": "DocType",
"get_query": function() {
fieldname: "opportunity_from",
label: __("Opportunity From"),
fieldtype: "Link",
options: "DocType",
get_query: function () {
return {
"filters": {
"name": ["in", ["Customer", "Lead"]],
}
}
}
filters: {
name: ["in", ["Customer", "Lead"]],
},
};
},
},
{
"fieldname":"party_name",
"label": __("Party"),
"fieldtype": "Dynamic Link",
"options": "opportunity_from"
fieldname: "party_name",
label: __("Party"),
fieldtype: "Dynamic Link",
options: "opportunity_from",
},
]
],
};

View File

@@ -3,26 +3,25 @@
/* eslint-disable */
frappe.query_reports["Opportunity Summary by Sales Stage"] = {
"filters": [
filters: [
{
fieldname: "based_on",
label: __("Based On"),
fieldtype: "Select",
options: "Opportunity Owner\nSource\nOpportunity Type",
default: "Opportunity Owner"
default: "Opportunity Owner",
},
{
fieldname: "data_based_on",
label: __("Data Based On"),
fieldtype: "Select",
options: "Number\nAmount",
default: "Number"
default: "Number",
},
{
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date",
},
{
fieldname: "to_date",
@@ -33,14 +32,14 @@ frappe.query_reports["Opportunity Summary by Sales Stage"] = {
fieldname: "status",
label: __("Status"),
fieldtype: "MultiSelectList",
get_data: function() {
get_data: function () {
return [
{value: "Open", description: "Status"},
{value: "Converted", description: "Status"},
{value: "Quotation", description: "Status"},
{value: "Replied", description: "Status"}
]
}
{ value: "Open", description: "Status" },
{ value: "Converted", description: "Status" },
{ value: "Quotation", description: "Status" },
{ value: "Replied", description: "Status" },
];
},
},
{
fieldname: "opportunity_source",
@@ -59,7 +58,7 @@ frappe.query_reports["Opportunity Summary by Sales Stage"] = {
label: __("Company"),
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company")
}
]
default: frappe.defaults.get_user_default("Company"),
},
],
};

View File

@@ -2,24 +2,24 @@
// For license information, please see license.txt
frappe.query_reports["Prospects Engaged But Not Converted"] = {
"filters": [
filters: [
{
"fieldname": "lead",
"label": __("Lead"),
"fieldtype": "Link",
"options": "Lead"
fieldname: "lead",
label: __("Lead"),
fieldtype: "Link",
options: "Lead",
},
{
"fieldname": "no_of_interaction",
"label": __("Number of Interaction"),
"fieldtype": "Int",
"default": 1
fieldname: "no_of_interaction",
label: __("Number of Interaction"),
fieldtype: "Int",
default: 1,
},
{
"fieldname": "lead_age",
"label": __("Minimum Lead Age (Days)"),
"fieldtype": "Int",
"default": 60
fieldname: "lead_age",
label: __("Minimum Lead Age (Days)"),
fieldtype: "Int",
default: 60,
},
]
}
],
};

View File

@@ -3,68 +3,68 @@
/* eslint-disable */
frappe.query_reports["Sales Pipeline Analytics"] = {
"filters": [
filters: [
{
fieldname: "pipeline_by",
label: __("Pipeline By"),
fieldtype: "Select",
options: "Owner\nSales Stage",
default: "Owner"
default: "Owner",
},
{
fieldname: "from_date",
label: __("From Date"),
fieldtype: "Date"
fieldtype: "Date",
},
{
fieldname: "to_date",
label: __("To Date"),
fieldtype: "Date"
fieldtype: "Date",
},
{
fieldname: "range",
label: __("Range"),
fieldtype: "Select",
options: "Monthly\nQuarterly",
default: "Monthly"
default: "Monthly",
},
{
fieldname: "assigned_to",
label: __("Assigned To"),
fieldtype: "Link",
options: "User"
options: "User",
},
{
fieldname: "status",
label: __("Status"),
fieldtype: "Select",
options: "Open\nQuotation\nConverted\nReplied"
options: "Open\nQuotation\nConverted\nReplied",
},
{
fieldname: "based_on",
label: __("Based On"),
fieldtype: "Select",
options: "Number\nAmount",
default: "Number"
default: "Number",
},
{
fieldname: "company",
label: __("Company"),
fieldtype: "Link",
options: "Company",
default: frappe.defaults.get_user_default("Company")
default: frappe.defaults.get_user_default("Company"),
},
{
fieldname: "opportunity_source",
label: __("Opportunity Source"),
fieldtype: "Link",
options: "Lead Source"
options: "Lead Source",
},
{
fieldname: "opportunity_type",
label: __("Opportunity Type"),
fieldtype: "Link",
options: "Opportunity Type"
options: "Opportunity Type",
},
]
],
};