Files
free-crm/Presentation/ASPNET/FrontEnd/Pages/Leads/LeadList.cshtml.js
T
2026-07-21 15:36:49 +07:00

1525 lines
70 KiB
JavaScript
Vendored

const App = {
setup() {
const state = Vue.reactive({
mainData: [],
deleteMode: false,
salesTeamListLookupData: [],
campaignListLookupData: [],
pipelineStageListLookupData: [],
closingStatusListLookupData: [],
contactData: [],
activityData: [],
mainTitle: null,
manageContactTitle: 'Manage Contact',
manageActivityTitle: 'Manage Activity',
id: '',
number: '',
salesTeamId: null,
title: '',
description: '',
companyName: '',
companyDescription: '',
companyAddressStreet: '',
companyAddressCity: '',
companyAddressState: '',
companyAddressZipCode: '',
companyAddressCountry: '',
companyPhoneNumber: '',
companyFaxNumber: '',
companyEmail: '',
companyWebsite: '',
companyWhatsApp: '',
companyLinkedIn: '',
companyFacebook: '',
companyInstagram: '',
companyTwitter: '',
dateProspecting: null,
dateClosingEstimation: null,
dateClosingActual: null,
amountTargeted: null,
amountClosed: null,
budgetScore: null,
authorityScore: null,
needScore: null,
timelineScore: null,
pipelineStage: null,
closingStatus: null,
closingNote: '',
campaignId: null,
errors: {
salesTeamId: '',
title: '',
companyName: '',
companyAddressStreet: '',
companyAddressCity: '',
companyAddressState: '',
companyPhoneNumber: '',
companyEmail: '',
dateProspecting: '',
dateClosingEstimation: '',
amountTargeted: '',
amountClosed: '',
budgetScore: '',
authorityScore: '',
needScore: '',
timelineScore: '',
pipelineStage: '',
campaignId: ''
},
isSubmitting: false
});
const mainGridRef = Vue.ref(null);
const mainModalRef = Vue.ref(null);
const manageContactModalRef = Vue.ref(null);
const manageActivityModalRef = Vue.ref(null);
const contactsGridRef = Vue.ref(null);
const activitiesGridRef = Vue.ref(null);
const titleRef = Vue.ref(null);
const numberRef = Vue.ref(null);
const companyNameRef = Vue.ref(null);
const companyAddressStreetRef = Vue.ref(null);
const companyAddressCityRef = Vue.ref(null);
const companyAddressStateRef = Vue.ref(null);
const companyAddressZipCodeRef = Vue.ref(null);
const companyAddressCountryRef = Vue.ref(null);
const companyPhoneNumberRef = Vue.ref(null);
const companyFaxNumberRef = Vue.ref(null);
const companyEmailRef = Vue.ref(null);
const companyWebsiteRef = Vue.ref(null);
const companyWhatsAppRef = Vue.ref(null);
const companyLinkedInRef = Vue.ref(null);
const companyFacebookRef = Vue.ref(null);
const companyInstagramRef = Vue.ref(null);
const companyTwitterRef = Vue.ref(null);
const dateProspectingRef = Vue.ref(null);
const dateClosingEstimationRef = Vue.ref(null);
const dateClosingActualRef = Vue.ref(null);
const amountTargetedRef = Vue.ref(null);
const amountClosedRef = Vue.ref(null);
const budgetScoreRef = Vue.ref(null);
const authorityScoreRef = Vue.ref(null);
const needScoreRef = Vue.ref(null);
const timelineScoreRef = Vue.ref(null);
const pipelineStageRef = Vue.ref(null);
const closingStatusRef = Vue.ref(null);
const campaignIdRef = Vue.ref(null);
const salesTeamIdRef = Vue.ref(null);
const services = {
getMainData: async () => {
const response = await AxiosManager.get('/Lead/GetLeadList', {});
return response;
},
createMainData: async (salesTeamId, title, description, companyName, companyDescription, companyAddressStreet, companyAddressCity, companyAddressState, companyAddressZipCode, companyAddressCountry, companyPhoneNumber, companyFaxNumber, companyEmail, companyWebsite, companyWhatsApp, companyLinkedIn, companyFacebook, companyInstagram, companyTwitter, dateProspecting, dateClosingEstimation, dateClosingActual, amountTargeted, amountClosed, budgetScore, authorityScore, needScore, timelineScore, pipelineStage, closingStatus, closingNote, campaignId, createdById) => {
const response = await AxiosManager.post('/Lead/CreateLead', {
salesTeamId, title, description, companyName, companyDescription, companyAddressStreet, companyAddressCity, companyAddressState, companyAddressZipCode, companyAddressCountry, companyPhoneNumber, companyFaxNumber, companyEmail, companyWebsite, companyWhatsApp, companyLinkedIn, companyFacebook, companyInstagram, companyTwitter, dateProspecting, dateClosingEstimation, dateClosingActual, amountTargeted, amountClosed, budgetScore, authorityScore, needScore, timelineScore, pipelineStage, closingStatus, closingNote, campaignId, createdById
});
return response;
},
updateMainData: async (id, salesTeamId, title, description, companyName, companyDescription, companyAddressStreet, companyAddressCity, companyAddressState, companyAddressZipCode, companyAddressCountry, companyPhoneNumber, companyFaxNumber, companyEmail, companyWebsite, companyWhatsApp, companyLinkedIn, companyFacebook, companyInstagram, companyTwitter, dateProspecting, dateClosingEstimation, dateClosingActual, amountTargeted, amountClosed, budgetScore, authorityScore, needScore, timelineScore, pipelineStage, closingStatus, closingNote, campaignId, updatedById) => {
const response = await AxiosManager.post('/Lead/UpdateLead', {
id, salesTeamId, title, description, companyName, companyDescription, companyAddressStreet, companyAddressCity, companyAddressState, companyAddressZipCode, companyAddressCountry, companyPhoneNumber, companyFaxNumber, companyEmail, companyWebsite, companyWhatsApp, companyLinkedIn, companyFacebook, companyInstagram, companyTwitter, dateProspecting, dateClosingEstimation, dateClosingActual, amountTargeted, amountClosed, budgetScore, authorityScore, needScore, timelineScore, pipelineStage, closingStatus, closingNote, campaignId, updatedById
});
return response;
},
deleteMainData: async (id, deletedById) => {
const response = await AxiosManager.post('/Lead/DeleteLead', {
id, deletedById
});
return response;
},
getSalesTeamListLookupData: async () => {
try {
const response = await AxiosManager.get('/SalesTeam/GetSalesTeamList', {});
return response;
} catch (error) {
throw error;
}
},
getCampaignListLookupData: async () => {
const response = await AxiosManager.get('/Campaign/GetCampaignList', {});
return response;
},
getPipelineStageListLookupData: async () => {
const response = await AxiosManager.get('/Lead/GetPipelineStageList', {});
return response;
},
getClosingStatusListLookupData: async () => {
const response = await AxiosManager.get('/Lead/GetClosingStatusList', {});
return response;
},
getLeadContacts: async (leadId) => {
const response = await AxiosManager.get(`/LeadContact/GetLeadContactByLeadIdList?leadId=${leadId}`, {});
return response;
},
getLeadActivities: async (leadId) => {
const response = await AxiosManager.get(`/LeadActivity/GetLeadActivityByLeadIdList?leadId=${leadId}`, {});
return response;
},
};
const methods = {
populateSalesTeamListLookupData: async () => {
const response = await services.getSalesTeamListLookupData();
state.salesTeamListLookupData = response?.data?.content?.data;
},
populateCampaignListLookupData: async () => {
const response = await services.getCampaignListLookupData();
state.campaignListLookupData = response?.data?.content?.data;
},
populatePipelineStageListLookupData: async () => {
const response = await services.getPipelineStageListLookupData();
state.pipelineStageListLookupData = response?.data?.content?.data;
},
populateClosingStatusListLookupData: async () => {
const response = await services.getClosingStatusListLookupData();
state.closingStatusListLookupData = response?.data?.content?.data;
},
populateMainData: async () => {
const response = await services.getMainData();
state.mainData = response?.data?.content?.data.map(item => ({
...item,
dateProspecting: item.dateProspecting ? new Date(item.dateProspecting) : null,
dateClosingEstimation: item.dateClosingEstimation ? new Date(item.dateClosingEstimation) : null,
dateClosingActual: item.dateClosingActual ? new Date(item.dateClosingActual) : null,
createdAtUtc: new Date(item.createdAtUtc)
}));
},
populateLeadContacts: async (leadId) => {
const response = await services.getLeadContacts(leadId);
state.contactData = response?.data?.content?.data.map(item => ({
...item,
createdAtUtc: new Date(item.createdAtUtc)
}));
},
populateLeadActivities: async (leadId) => {
const response = await services.getLeadActivities(leadId);
state.activityData = response?.data?.content?.data.map(item => ({
...item,
fromDate: new Date(item.fromDate),
toDate: new Date(item.toDate),
createdAtUtc: new Date(item.createdAtUtc)
}));
}
};
const campaignListLookup = {
obj: null,
create: () => {
if (state.campaignListLookupData && Array.isArray(state.campaignListLookupData)) {
campaignListLookup.obj = new ej.dropdowns.DropDownList({
dataSource: state.campaignListLookupData,
fields: { value: 'id', text: 'title' },
placeholder: 'Select a Campaign',
change: (e) => {
state.campaignId = e.value;
}
});
campaignListLookup.obj.appendTo(campaignIdRef.value);
}
},
refresh: () => {
if (campaignListLookup.obj) {
campaignListLookup.obj.value = state.campaignId;
}
}
};
const pipelineStageListLookup = {
obj: null,
create: () => {
if (state.pipelineStageListLookupData && Array.isArray(state.pipelineStageListLookupData)) {
pipelineStageListLookup.obj = new ej.dropdowns.DropDownList({
dataSource: state.pipelineStageListLookupData,
fields: { value: 'id', text: 'name' },
placeholder: 'Select a Pipeline Stage',
change: (e) => {
state.pipelineStage = e.value;
}
});
pipelineStageListLookup.obj.appendTo(pipelineStageRef.value);
}
},
refresh: () => {
if (pipelineStageListLookup.obj) {
pipelineStageListLookup.obj.value = state.pipelineStage;
}
}
};
const closingStatusListLookup = {
obj: null,
create: () => {
if (state.closingStatusListLookupData && Array.isArray(state.closingStatusListLookupData)) {
closingStatusListLookup.obj = new ej.dropdowns.DropDownList({
dataSource: state.closingStatusListLookupData,
fields: { value: 'id', text: 'name' },
placeholder: 'Select a Closing Status',
change: (e) => {
state.closingStatus = e.value;
}
});
closingStatusListLookup.obj.appendTo(closingStatusRef.value);
}
},
refresh: () => {
if (closingStatusListLookup.obj) {
closingStatusListLookup.obj.value = state.closingStatus;
}
}
};
const titleText = {
obj: null,
create: () => {
titleText.obj = new ej.inputs.TextBox({
placeholder: 'Enter Title'
});
titleText.obj.appendTo(titleRef.value);
}
};
const numberText = {
obj: null,
create: () => {
numberText.obj = new ej.inputs.TextBox({
placeholder: '[auto]',
readonly: true
});
numberText.obj.appendTo(numberRef.value);
}
};
const companyNameText = {
obj: null,
create: () => {
companyNameText.obj = new ej.inputs.TextBox({
placeholder: 'Enter Company Name'
});
companyNameText.obj.appendTo(companyNameRef.value);
}
};
const companyAddressStreetText = {
obj: null,
create: () => {
companyAddressStreetText.obj = new ej.inputs.TextBox({
placeholder: 'Enter Street'
});
companyAddressStreetText.obj.appendTo(companyAddressStreetRef.value);
}
};
const companyAddressCityText = {
obj: null,
create: () => {
companyAddressCityText.obj = new ej.inputs.TextBox({
placeholder: 'Enter City'
});
companyAddressCityText.obj.appendTo(companyAddressCityRef.value);
}
};
const companyAddressStateText = {
obj: null,
create: () => {
companyAddressStateText.obj = new ej.inputs.TextBox({
placeholder: 'Enter State'
});
companyAddressStateText.obj.appendTo(companyAddressStateRef.value);
}
};
const companyAddressZipCodeText = {
obj: null,
create: () => {
companyAddressZipCodeText.obj = new ej.inputs.TextBox({
placeholder: 'Enter Zip Code'
});
companyAddressZipCodeText.obj.appendTo(companyAddressZipCodeRef.value);
}
};
const companyAddressCountryText = {
obj: null,
create: () => {
companyAddressCountryText.obj = new ej.inputs.TextBox({
placeholder: 'Enter Country'
});
companyAddressCountryText.obj.appendTo(companyAddressCountryRef.value);
}
};
const companyPhoneNumberText = {
obj: null,
create: () => {
companyPhoneNumberText.obj = new ej.inputs.TextBox({
placeholder: 'Enter Phone Number'
});
companyPhoneNumberText.obj.appendTo(companyPhoneNumberRef.value);
}
};
const companyFaxNumberText = {
obj: null,
create: () => {
companyFaxNumberText.obj = new ej.inputs.TextBox({
placeholder: 'Enter Fax Number'
});
companyFaxNumberText.obj.appendTo(companyFaxNumberRef.value);
}
};
const companyEmailText = {
obj: null,
create: () => {
companyEmailText.obj = new ej.inputs.TextBox({
placeholder: 'Enter Email'
});
companyEmailText.obj.appendTo(companyEmailRef.value);
}
};
const companyWebsiteText = {
obj: null,
create: () => {
companyWebsiteText.obj = new ej.inputs.TextBox({
placeholder: 'Enter Website'
});
companyWebsiteText.obj.appendTo(companyWebsiteRef.value);
}
};
const companyWhatsAppText = {
obj: null,
create: () => {
companyWhatsAppText.obj = new ej.inputs.TextBox({
placeholder: 'Enter WhatsApp'
});
companyWhatsAppText.obj.appendTo(companyWhatsAppRef.value);
}
};
const companyLinkedInText = {
obj: null,
create: () => {
companyLinkedInText.obj = new ej.inputs.TextBox({
placeholder: 'Enter LinkedIn'
});
companyLinkedInText.obj.appendTo(companyLinkedInRef.value);
}
};
const companyFacebookText = {
obj: null,
create: () => {
companyFacebookText.obj = new ej.inputs.TextBox({
placeholder: 'Enter Facebook'
});
companyFacebookText.obj.appendTo(companyFacebookRef.value);
}
};
const companyInstagramText = {
obj: null,
create: () => {
companyInstagramText.obj = new ej.inputs.TextBox({
placeholder: 'Enter Instagram'
});
companyInstagramText.obj.appendTo(companyInstagramRef.value);
}
};
const companyTwitterText = {
obj: null,
create: () => {
companyTwitterText.obj = new ej.inputs.TextBox({
placeholder: 'Enter Twitter'
});
companyTwitterText.obj.appendTo(companyTwitterRef.value);
}
};
const dateProspectingDatePicker = {
obj: null,
create: () => {
dateProspectingDatePicker.obj = new ej.calendars.DatePicker({
format: 'yyyy-MM-dd',
value: state.dateProspecting,
change: (e) => {
state.dateProspecting = DateFormatManager.preserveClientDate(e.value);
}
});
dateProspectingDatePicker.obj.appendTo(dateProspectingRef.value);
},
refresh: () => {
if (dateProspectingDatePicker.obj) {
dateProspectingDatePicker.obj.value = state.dateProspecting ? new Date(state.dateProspecting) : null;
}
}
};
const dateClosingEstimationDatePicker = {
obj: null,
create: () => {
dateClosingEstimationDatePicker.obj = new ej.calendars.DatePicker({
format: 'yyyy-MM-dd',
value: state.dateClosingEstimation,
change: (e) => {
state.dateClosingEstimation = DateFormatManager.preserveClientDate(e.value);
}
});
dateClosingEstimationDatePicker.obj.appendTo(dateClosingEstimationRef.value);
},
refresh: () => {
if (dateClosingEstimationDatePicker.obj) {
dateClosingEstimationDatePicker.obj.value = state.dateClosingEstimation ? new Date(state.dateClosingEstimation) : null;
}
}
};
const dateClosingActualDatePicker = {
obj: null,
create: () => {
dateClosingActualDatePicker.obj = new ej.calendars.DatePicker({
format: 'yyyy-MM-dd',
value: state.dateClosingActual,
change: (e) => {
state.dateClosingActual = DateFormatManager.preserveClientDate(e.value);
}
});
dateClosingActualDatePicker.obj.appendTo(dateClosingActualRef.value);
},
refresh: () => {
if (dateClosingActualDatePicker.obj) {
dateClosingActualDatePicker.obj.value = state.dateClosingActual ? new Date(state.dateClosingActual) : null;
}
}
};
const amountTargetedNumeric = {
obj: null,
create: () => {
amountTargetedNumeric.obj = new ej.inputs.NumericTextBox({
placeholder: 'Enter Target Amount',
format: 'n2',
min: 0,
});
amountTargetedNumeric.obj.appendTo(amountTargetedRef.value);
},
refresh: () => {
if (amountTargetedNumeric.obj) {
amountTargetedNumeric.obj.value = parseFloat(state.amountTargeted) || 0;
}
}
};
const amountClosedNumeric = {
obj: null,
create: () => {
amountClosedNumeric.obj = new ej.inputs.NumericTextBox({
placeholder: 'Enter Closed Amount',
format: 'n2',
min: 0,
});
amountClosedNumeric.obj.appendTo(amountClosedRef.value);
},
refresh: () => {
if (amountClosedNumeric.obj) {
amountClosedNumeric.obj.value = parseFloat(state.amountClosed) || 0;
}
}
};
const budgetScoreNumeric = {
obj: null,
create: () => {
budgetScoreNumeric.obj = new ej.inputs.NumericTextBox({
placeholder: 'Budget Score',
format: 'n2',
min: 0,
max: 100,
step: 0.01,
});
budgetScoreNumeric.obj.appendTo(budgetScoreRef.value);
},
refresh: () => {
if (budgetScoreNumeric.obj) {
budgetScoreNumeric.obj.value = parseFloat(state.budgetScore);
}
}
};
const authorityScoreNumeric = {
obj: null,
create: () => {
authorityScoreNumeric.obj = new ej.inputs.NumericTextBox({
placeholder: 'Authority Score',
format: 'n2',
min: 0,
max: 100,
step: 0.01,
});
authorityScoreNumeric.obj.appendTo(authorityScoreRef.value);
},
refresh: () => {
if (authorityScoreNumeric.obj) {
authorityScoreNumeric.obj.value = parseFloat(state.authorityScore);
}
}
};
const needScoreNumeric = {
obj: null,
create: () => {
needScoreNumeric.obj = new ej.inputs.NumericTextBox({
placeholder: 'Need Score',
format: 'n2',
min: 0,
max: 100,
step: 0.01,
});
needScoreNumeric.obj.appendTo(needScoreRef.value);
},
refresh: () => {
if (needScoreNumeric.obj) {
needScoreNumeric.obj.value = parseFloat(state.needScore);
}
}
};
const timelineScoreNumeric = {
obj: null,
create: () => {
timelineScoreNumeric.obj = new ej.inputs.NumericTextBox({
placeholder: 'Timeline Score',
format: 'n2',
min: 0,
max: 100,
step: 0.01,
});
timelineScoreNumeric.obj.appendTo(timelineScoreRef.value);
},
refresh: () => {
if (timelineScoreNumeric.obj) {
timelineScoreNumeric.obj.value = parseFloat(state.timelineScore);
}
}
};
const salesTeamListLookup = {
obj: null,
create: () => {
if (state.salesTeamListLookupData && Array.isArray(state.salesTeamListLookupData)) {
salesTeamListLookup.obj = new ej.dropdowns.DropDownList({
dataSource: state.salesTeamListLookupData,
fields: { value: 'id', text: 'name' },
placeholder: 'Select a Sales Team',
change: (e) => {
state.salesTeamId = e.value;
}
});
salesTeamListLookup.obj.appendTo(salesTeamIdRef.value);
} else {
console.error('Sales Team list lookup data is not available or invalid.');
}
},
refresh: () => {
if (salesTeamListLookup.obj) {
salesTeamListLookup.obj.value = state.salesTeamId;
}
},
};
Vue.watch(
() => state.salesTeamId,
(newVal, oldVal) => {
salesTeamListLookup.refresh();
state.errors.salesTeamId = '';
}
);
Vue.watch(
() => state.title,
(newVal, oldVal) => {
state.errors.title = '';
}
);
Vue.watch(
() => state.companyName,
(newVal, oldVal) => {
state.errors.companyName = '';
}
);
Vue.watch(
() => state.companyAddressStreet,
(newVal, oldVal) => {
state.errors.companyAddressStreet = '';
}
);
Vue.watch(
() => state.companyAddressCity,
(newVal, oldVal) => {
state.errors.companyAddressCity = '';
}
);
Vue.watch(
() => state.companyAddressState,
(newVal, oldVal) => {
state.errors.companyAddressState = '';
}
);
Vue.watch(
() => state.companyPhoneNumber,
(newVal, oldVal) => {
state.errors.companyPhoneNumber = '';
}
);
Vue.watch(
() => state.companyEmail,
(newVal, oldVal) => {
state.errors.companyEmail = '';
}
);
Vue.watch(
() => state.dateProspecting,
(newVal, oldVal) => {
dateProspectingDatePicker.refresh();
state.errors.dateProspecting = '';
}
);
Vue.watch(
() => state.dateClosingEstimation,
(newVal, oldVal) => {
dateClosingEstimationDatePicker.refresh();
state.errors.dateClosingEstimation = '';
}
);
Vue.watch(
() => state.dateClosingActual,
(newVal, oldVal) => {
dateClosingActualDatePicker.refresh();
}
);
Vue.watch(
() => state.amountTargeted,
(newVal, oldVal) => {
amountTargetedNumeric.refresh();
state.errors.amountTargeted = '';
}
);
Vue.watch(
() => state.amountClosed,
(newVal, oldVal) => {
amountClosedNumeric.refresh();
state.errors.amountClosed = '';
}
);
Vue.watch(
() => state.budgetScore,
(newVal, oldVal) => {
budgetScoreNumeric.refresh();
state.errors.budgetScore = '';
}
);
Vue.watch(
() => state.authorityScore,
(newVal, oldVal) => {
authorityScoreNumeric.refresh();
state.errors.authorityScore = '';
}
);
Vue.watch(
() => state.needScore,
(newVal, oldVal) => {
needScoreNumeric.refresh();
state.errors.needScore = '';
}
);
Vue.watch(
() => state.timelineScore,
(newVal, oldVal) => {
timelineScoreNumeric.refresh();
state.errors.timelineScore = '';
}
);
Vue.watch(
() => state.pipelineStage,
(newVal, oldVal) => {
pipelineStageListLookup.refresh();
state.errors.pipelineStage = '';
}
);
Vue.watch(
() => state.closingStatus,
(newVal, oldVal) => {
closingStatusListLookup.refresh();
state.errors.closingStatus = '';
}
);
Vue.watch(
() => state.campaignId,
(newVal, oldVal) => {
campaignListLookup.refresh();
state.errors.campaignId = '';
}
);
const resetFormState = () => {
state.id = '';
state.number = '';
state.title = '';
state.salesTeamId = null;
state.description = '';
state.companyName = '';
state.companyDescription = '';
state.companyAddressStreet = '';
state.companyAddressCity = '';
state.companyAddressState = '';
state.companyAddressZipCode = '';
state.companyAddressCountry = '';
state.companyPhoneNumber = '';
state.companyFaxNumber = '';
state.companyEmail = '';
state.companyWebsite = '';
state.companyWhatsApp = '';
state.companyLinkedIn = '';
state.companyFacebook = '';
state.companyInstagram = '';
state.companyTwitter = '';
state.dateProspecting = null;
state.dateClosingEstimation = null;
state.dateClosingActual = null;
state.amountTargeted = null;
state.amountClosed = null;
state.budgetScore = null;
state.authorityScore = null;
state.needScore = null;
state.timelineScore = null;
state.pipelineStage = null;
state.closingStatus = null;
state.closingNote = '';
state.campaignId = null;
state.errors = {
title: '',
salesTeamId: '',
companyName: '',
companyAddressStreet: '',
companyAddressCity: '',
companyAddressState: '',
companyPhoneNumber: '',
companyEmail: '',
dateProspecting: '',
dateClosingEstimation: '',
amountTargeted: '',
amountClosed: '',
budgetScore: '',
authorityScore: '',
needScore: '',
timelineScore: '',
pipelineStage: '',
campaignId: ''
};
};
const validateForm = function () {
state.errors.title = '';
state.errors.salesTeamId = '';
state.errors.companyName = '';
state.errors.companyAddressStreet = '';
state.errors.companyAddressCity = '';
state.errors.companyAddressState = '';
state.errors.companyPhoneNumber = '';
state.errors.companyEmail = '';
state.errors.dateProspecting = '';
state.errors.dateClosingEstimation = '';
state.errors.amountTargeted = '';
state.errors.amountClosed = '';
state.errors.budgetScore = '';
state.errors.authorityScore = '';
state.errors.needScore = '';
state.errors.timelineScore = '';
state.errors.pipelineStage = '';
state.errors.campaignId = '';
let isValid = true;
if (!state.title) {
state.errors.title = 'Title is required.';
isValid = false;
}
if (!state.companyName) {
state.errors.companyName = 'Company Name is required.';
isValid = false;
}
if (!state.companyAddressStreet) {
state.errors.companyAddressStreet = 'Street is required.';
isValid = false;
}
if (!state.companyAddressCity) {
state.errors.companyAddressCity = 'City is required.';
isValid = false;
}
if (!state.companyAddressState) {
state.errors.companyAddressState = 'State is required.';
isValid = false;
}
if (!state.companyPhoneNumber) {
state.errors.companyPhoneNumber = 'Phone Number is required.';
isValid = false;
}
if (!state.companyEmail) {
state.errors.companyEmail = 'Email is required.';
isValid = false;
}
if (!state.dateProspecting) {
state.errors.dateProspecting = 'Prospecting Date is required.';
isValid = false;
}
if (!state.dateClosingEstimation) {
state.errors.dateClosingEstimation = 'Estimated Closing Date is required.';
isValid = false;
}
if (state.amountTargeted === null || state.amountTargeted === '' || isNaN(state.amountTargeted)) {
state.errors.amountTargeted = 'Targeted Amount is required.';
isValid = false;
}
if (state.amountClosed === null || state.amountClosed === '' || isNaN(state.amountClosed)) {
state.errors.amountClosed = 'Closed Amount is required.';
isValid = false;
}
if (state.budgetScore === null || state.budgetScore === '' || isNaN(state.budgetScore)) {
state.errors.budgetScore = 'Budget Score is required.';
isValid = false;
}
if (state.authorityScore === null || state.authorityScore === '' || isNaN(state.authorityScore)) {
state.errors.authorityScore = 'Authority Score is required.';
isValid = false;
}
if (state.needScore === null || state.needScore === '' || isNaN(state.needScore)) {
state.errors.needScore = 'Need Score is required.';
isValid = false;
}
if (state.timelineScore === null || state.timelineScore === '' || isNaN(state.timelineScore)) {
state.errors.timelineScore = 'Timeline Score is required.';
isValid = false;
}
if (!state.pipelineStage) {
state.errors.pipelineStage = 'Pipeline Stage is required.';
isValid = false;
}
if (!state.campaignId) {
state.errors.campaignId = 'Campaign is required.';
isValid = false;
}
if (!state.salesTeamId) {
state.errors.salesTeamId = 'Sales team is required.';
isValid = false;
}
return isValid;
};
const handler = {
handleSubmit: async () => {
try {
state.isSubmitting = true;
await new Promise(resolve => setTimeout(resolve, 200));
if (!validateForm()) {
return;
}
const response = state.id === ''
? await services.createMainData(state.salesTeamId, state.title, state.description, state.companyName, state.companyDescription, state.companyAddressStreet, state.companyAddressCity, state.companyAddressState, state.companyAddressZipCode, state.companyAddressCountry, state.companyPhoneNumber, state.companyFaxNumber, state.companyEmail, state.companyWebsite, state.companyWhatsApp, state.companyLinkedIn, state.companyFacebook, state.companyInstagram, state.companyTwitter, state.dateProspecting, state.dateClosingEstimation, state.dateClosingActual, state.amountTargeted, state.amountClosed, state.budgetScore, state.authorityScore, state.needScore, state.timelineScore, state.pipelineStage, state.closingStatus, state.closingNote, state.campaignId, StorageManager.getUserId())
: state.deleteMode
? await services.deleteMainData(state.id, StorageManager.getUserId())
: await services.updateMainData(state.id, state.salesTeamId, state.title, state.description, state.companyName, state.companyDescription, state.companyAddressStreet, state.companyAddressCity, state.companyAddressState, state.companyAddressZipCode, state.companyAddressCountry, state.companyPhoneNumber, state.companyFaxNumber, state.companyEmail, state.companyWebsite, state.companyWhatsApp, state.companyLinkedIn, state.companyFacebook, state.companyInstagram, state.companyTwitter, state.dateProspecting, state.dateClosingEstimation, state.dateClosingActual, state.amountTargeted, state.amountClosed, state.budgetScore, state.authorityScore, state.needScore, state.timelineScore, state.pipelineStage, state.closingStatus, state.closingNote, state.campaignId, StorageManager.getUserId());
if (response.data.code === 200) {
await methods.populateMainData();
mainGrid.refresh();
if (!state.deleteMode) {
state.mainTitle = 'Edit Lead';
state.id = response?.data?.content?.data.id ?? '';
state.number = response?.data?.content?.data.number ?? '';
state.title = response?.data?.content?.data.title ?? '';
state.description = response?.data?.content?.data.description ?? '';
state.companyName = response?.data?.content?.data.companyName ?? '';
state.companyDescription = response?.data?.content?.data.companyDescription ?? '';
state.companyAddressStreet = response?.data?.content?.data.companyAddressStreet ?? '';
state.companyAddressCity = response?.data?.content?.data.companyAddressCity ?? '';
state.companyAddressState = response?.data?.content?.data.companyAddressState ?? '';
state.companyAddressZipCode = response?.data?.content?.data.companyAddressZipCode ?? '';
state.companyAddressCountry = response?.data?.content?.data.companyAddressCountry ?? '';
state.companyPhoneNumber = response?.data?.content?.data.companyPhoneNumber ?? '';
state.companyFaxNumber = response?.data?.content?.data.companyFaxNumber ?? '';
state.companyEmail = response?.data?.content?.data.companyEmail ?? '';
state.companyWebsite = response?.data?.content?.data.companyWebsite ?? '';
state.companyWhatsApp = response?.data?.content?.data.companyWhatsApp ?? '';
state.companyLinkedIn = response?.data?.content?.data.companyLinkedIn ?? '';
state.companyFacebook = response?.data?.content?.data.companyFacebook ?? '';
state.companyInstagram = response?.data?.content?.data.companyInstagram ?? '';
state.companyTwitter = response?.data?.content?.data.companyTwitter ?? '';
state.dateProspecting = response?.data?.content?.data.dateProspecting ? new Date(response.data.content.data.dateProspecting) : null;
state.dateClosingEstimation = response?.data?.content?.data.dateClosingEstimation ? new Date(response.data.content.data.dateClosingEstimation) : null;
state.dateClosingActual = response?.data?.content?.data.dateClosingActual ? new Date(response.data.content.data.dateClosingActual) : null;
state.amountTargeted = response?.data?.content?.data.amountTargeted ?? '';
state.amountClosed = response?.data?.content?.data.amountClosed ?? '';
state.budgetScore = response?.data?.content?.data.budgetScore ?? '';
state.authorityScore = response?.data?.content?.data.authorityScore ?? '';
state.needScore = response?.data?.content?.data.needScore ?? '';
state.timelineScore = response?.data?.content?.data.timelineScore ?? '';
state.pipelineStage = String(response?.data?.content?.data.pipelineStage ?? '');
state.closingStatus = String(response?.data?.content?.data.closingStatus ?? '');
state.closingNote = response?.data?.content?.data.closingNote ?? '';
state.campaignId = response?.data?.content?.data.campaignId ?? '';
state.salesTeamId = response?.data?.content?.data.salesTeamId ?? null;
Swal.fire({
icon: 'success',
title: 'Save Successful',
timer: 1000,
showConfirmButton: false
});
} else {
Swal.fire({
icon: 'success',
title: 'Delete Successful',
text: 'Form will be closed...',
timer: 2000,
showConfirmButton: false
});
setTimeout(() => {
mainModal.obj.hide();
resetFormState();
}, 2000);
}
} else {
Swal.fire({
icon: 'error',
title: state.deleteMode ? 'Delete Failed' : 'Save Failed',
text: response.data.message ?? 'Please check your data.',
confirmButtonText: 'Try Again'
});
}
} catch (error) {
Swal.fire({
icon: 'error',
title: 'An Error Occurred',
text: error.response?.data?.message ?? 'Please try again.',
confirmButtonText: 'OK'
});
} finally {
state.isSubmitting = false;
}
}
};
const mainGrid = {
obj: null,
create: async (dataSource) => {
mainGrid.obj = new ej.grids.Grid({
height: '240px',
dataSource: dataSource,
allowFiltering: true,
allowSorting: true,
allowSelection: true,
allowGrouping: true,
groupSettings: { columns: ['campaign.number'] },
allowTextWrap: true,
allowResizing: true,
allowPaging: true,
allowExcelExport: true,
filterSettings: { type: 'CheckBox' },
sortSettings: { columns: [{ field: 'createdAtUtc', direction: 'Descending' }] },
pageSettings: { currentPage: 1, pageSize: 50, pageSizes: ["10", "20", "50", "100", "200", "All"] },
selectionSettings: { persistSelection: true, type: 'Single' },
autoFit: true,
showColumnMenu: true,
gridLines: 'Horizontal',
columns: [
{ type: 'checkbox', width: 60 },
{
field: 'id', isPrimaryKey: true, headerText: 'Id', visible: false
},
{ field: 'number', headerText: 'Number', width: 150 },
{ field: 'title', headerText: 'Title', width: 200 },
{ field: 'salesTeamName', headerText: 'Sales Team', width: 200 },
{ field: 'companyName', headerText: 'Company Name', width: 200 },
{ field: 'companyAddressStreet', headerText: 'Street', width: 200 },
{ field: 'companyAddressCity', headerText: 'City', width: 150 },
{ field: 'companyAddressState', headerText: 'State', width: 150 },
{ field: 'companyPhoneNumber', headerText: 'Phone', width: 150 },
{ field: 'companyEmail', headerText: 'Email', width: 200 },
{ field: 'dateProspecting', headerText: 'Prospecting Date', width: 150, format: 'yyyy-MM-dd' },
{ field: 'dateClosingEstimation', headerText: 'Estimated Closing', width: 150, format: 'yyyy-MM-dd' },
{ field: 'amountTargeted', headerText: 'Targeted Amount', width: 150, format: 'N2' },
{ field: 'amountClosed', headerText: 'Closed Amount', width: 150, format: 'N2' },
{ field: 'pipelineStageName', headerText: 'Pipeline Stage', width: 150 },
{ field: 'closingStatusName', headerText: 'Closing Status', width: 150 },
{ field: 'campaign.number', headerText: 'Campaign', width: 200 },
{ field: 'createdAtUtc', headerText: 'Created At UTC', width: 150, format: 'yyyy-MM-dd HH:mm' }
],
toolbar: [
'ExcelExport', 'Search',
{ type: 'Separator' },
{ text: 'Add', tooltipText: 'Add', prefixIcon: 'e-add', id: 'AddCustom' },
{ text: 'Edit', tooltipText: 'Edit', prefixIcon: 'e-edit', id: 'EditCustom' },
{ text: 'Delete', tooltipText: 'Delete', prefixIcon: 'e-delete', id: 'DeleteCustom' },
{ type: 'Separator' },
{ text: 'Contact', tooltipText: ' Contact', id: 'ManageContactCustom' },
{ text: 'Activity', tooltipText: 'Manage Activity', id: 'ManageActivityCustom' }
],
beforeDataBound: () => { },
dataBound: function () {
mainGrid.obj.toolbarModule.enableItems(['EditCustom', 'DeleteCustom', 'ManageContactCustom', 'ManageActivityCustom'], false);
mainGrid.obj.autoFitColumns(['number', 'title', 'salesTeamName', 'companyName', 'companyAddressStreet', 'companyAddressCity', 'companyAddressState', 'companyPhoneNumber', 'companyEmail', 'dateProspecting', 'dateClosingEstimation', 'amountTargeted', 'amountClosed', 'pipelineStageName', 'campaign.number', 'createdAtUtc']);
},
excelExportComplete: () => { },
rowSelected: () => {
if (mainGrid.obj.getSelectedRecords().length == 1) {
mainGrid.obj.toolbarModule.enableItems(['EditCustom', 'DeleteCustom', 'ManageContactCustom', 'ManageActivityCustom'], true);
} else {
mainGrid.obj.toolbarModule.enableItems(['EditCustom', 'DeleteCustom', 'ManageContactCustom', 'ManageActivityCustom'], false);
}
},
rowDeselected: () => {
if (mainGrid.obj.getSelectedRecords().length == 1) {
mainGrid.obj.toolbarModule.enableItems(['EditCustom', 'DeleteCustom', 'ManageContactCustom', 'ManageActivityCustom'], true);
} else {
mainGrid.obj.toolbarModule.enableItems(['EditCustom', 'DeleteCustom', 'ManageContactCustom', 'ManageActivityCustom'], false);
}
},
rowSelecting: () => {
if (mainGrid.obj.getSelectedRecords().length) {
mainGrid.obj.clearSelection();
}
},
toolbarClick: async (args) => {
if (args.item.id === 'MainGrid_excelexport') {
mainGrid.obj.excelExport();
}
if (args.item.id === 'AddCustom') {
state.deleteMode = false;
state.mainTitle = 'Add Lead';
resetFormState();
mainModal.obj.show();
}
if (args.item.id === 'EditCustom') {
state.deleteMode = false;
if (mainGrid.obj.getSelectedRecords().length) {
const selectedRecord = mainGrid.obj.getSelectedRecords()[0];
state.mainTitle = 'Edit Lead';
state.id = selectedRecord.id ?? '';
state.number = selectedRecord.number ?? '';
state.title = selectedRecord.title ?? '';
state.description = selectedRecord.description ?? '';
state.companyName = selectedRecord.companyName ?? '';
state.companyDescription = selectedRecord.companyDescription ?? '';
state.companyAddressStreet = selectedRecord.companyAddressStreet ?? '';
state.companyAddressCity = selectedRecord.companyAddressCity ?? '';
state.companyAddressState = selectedRecord.companyAddressState ?? '';
state.companyAddressZipCode = selectedRecord.companyAddressZipCode ?? '';
state.companyAddressCountry = selectedRecord.companyAddressCountry ?? '';
state.companyPhoneNumber = selectedRecord.companyPhoneNumber ?? '';
state.companyFaxNumber = selectedRecord.companyFaxNumber ?? '';
state.companyEmail = selectedRecord.companyEmail ?? '';
state.companyWebsite = selectedRecord.companyWebsite ?? '';
state.companyWhatsApp = selectedRecord.companyWhatsApp ?? '';
state.companyLinkedIn = selectedRecord.companyLinkedIn ?? '';
state.companyFacebook = selectedRecord.companyFacebook ?? '';
state.companyInstagram = selectedRecord.companyInstagram ?? '';
state.companyTwitter = selectedRecord.companyTwitter ?? '';
state.dateProspecting = selectedRecord.dateProspecting ? new Date(selectedRecord.dateProspecting) : null;
state.dateClosingEstimation = selectedRecord.dateClosingEstimation ? new Date(selectedRecord.dateClosingEstimation) : null;
state.dateClosingActual = selectedRecord.dateClosingActual ? new Date(selectedRecord.dateClosingActual) : null;
state.amountTargeted = selectedRecord.amountTargeted ?? '';
state.amountClosed = selectedRecord.amountClosed ?? '';
state.budgetScore = selectedRecord.budgetScore ?? '';
state.authorityScore = selectedRecord.authorityScore ?? '';
state.needScore = selectedRecord.needScore ?? '';
state.timelineScore = selectedRecord.timelineScore ?? '';
state.pipelineStage = String(selectedRecord.pipelineStage ?? '');
state.closingStatus = String(selectedRecord.closingStatus ?? '');
state.closingNote = selectedRecord.closingNote ?? '';
state.campaignId = selectedRecord.campaignId ?? '';
state.salesTeamId = selectedRecord.salesTeamId ?? '';
mainModal.obj.show();
}
}
if (args.item.id === 'DeleteCustom') {
state.deleteMode = true;
if (mainGrid.obj.getSelectedRecords().length) {
const selectedRecord = mainGrid.obj.getSelectedRecords()[0];
state.mainTitle = 'Delete Lead?';
state.id = selectedRecord.id ?? '';
state.number = selectedRecord.number ?? '';
state.title = selectedRecord.title ?? '';
state.description = selectedRecord.description ?? '';
state.companyName = selectedRecord.companyName ?? '';
state.companyDescription = selectedRecord.companyDescription ?? '';
state.companyAddressStreet = selectedRecord.companyAddressStreet ?? '';
state.companyAddressCity = selectedRecord.companyAddressCity ?? '';
state.companyAddressState = selectedRecord.companyAddressState ?? '';
state.companyAddressZipCode = selectedRecord.companyAddressZipCode ?? '';
state.companyAddressCountry = selectedRecord.companyAddressCountry ?? '';
state.companyPhoneNumber = selectedRecord.companyPhoneNumber ?? '';
state.companyFaxNumber = selectedRecord.companyFaxNumber ?? '';
state.companyEmail = selectedRecord.companyEmail ?? '';
state.companyWebsite = selectedRecord.companyWebsite ?? '';
state.companyWhatsApp = selectedRecord.companyWhatsApp ?? '';
state.companyLinkedIn = selectedRecord.companyLinkedIn ?? '';
state.companyFacebook = selectedRecord.companyFacebook ?? '';
state.companyInstagram = selectedRecord.companyInstagram ?? '';
state.companyTwitter = selectedRecord.companyTwitter ?? '';
state.dateProspecting = selectedRecord.dateProspecting ? new Date(selectedRecord.dateProspecting) : null;
state.dateClosingEstimation = selectedRecord.dateClosingEstimation ? new Date(selectedRecord.dateClosingEstimation) : null;
state.dateClosingActual = selectedRecord.dateClosingActual ? new Date(selectedRecord.dateClosingActual) : null;
state.amountTargeted = selectedRecord.amountTargeted ?? '';
state.amountClosed = selectedRecord.amountClosed ?? '';
state.budgetScore = selectedRecord.budgetScore ?? '';
state.authorityScore = selectedRecord.authorityScore ?? '';
state.needScore = selectedRecord.needScore ?? '';
state.timelineScore = selectedRecord.timelineScore ?? '';
state.pipelineStage = String(selectedRecord.pipelineStage ?? '');
state.closingStatus = String(selectedRecord.closingStatus ?? '');
state.closingNote = selectedRecord.closingNote ?? '';
state.campaignId = selectedRecord.campaignId ?? '';
state.salesTeamId = selectedRecord.salesTeamId ?? '';
mainModal.obj.show();
}
}
if (args.item.id === 'ManageContactCustom') {
if (mainGrid.obj.getSelectedRecords().length) {
const selectedRecord = mainGrid.obj.getSelectedRecords()[0];
state.id = selectedRecord.id ?? '';
state.manageContactTitle = 'Contact';
await methods.populateLeadContacts(state.id);
contactsGrid.refresh();
manageContactModal.obj.show();
}
}
if (args.item.id === 'ManageActivityCustom') {
if (mainGrid.obj.getSelectedRecords().length) {
const selectedRecord = mainGrid.obj.getSelectedRecords()[0];
state.id = selectedRecord.id ?? '';
state.manageActivityTitle = 'Activity';
await methods.populateLeadActivities(state.id);
activitiesGrid.refresh();
manageActivityModal.obj.show();
}
}
}
});
mainGrid.obj.appendTo(mainGridRef.value);
},
refresh: () => {
mainGrid.obj.setProperties({ dataSource: state.mainData });
}
};
const mainModal = {
obj: null,
create: () => {
mainModal.obj = new bootstrap.Modal(mainModalRef.value, {
backdrop: 'static',
keyboard: false
});
}
};
const manageContactModal = {
obj: null,
create: () => {
manageContactModal.obj = new bootstrap.Modal(manageContactModalRef.value, {
backdrop: 'static',
keyboard: false
});
}
};
const manageActivityModal = {
obj: null,
create: () => {
manageActivityModal.obj = new bootstrap.Modal(manageActivityModalRef.value, {
backdrop: 'static',
keyboard: false
});
}
};
const contactsGrid = {
obj: null,
create: async (dataSource) => {
contactsGrid.obj = new ej.grids.Grid({
height: 200,
dataSource: dataSource,
allowFiltering: false,
allowSorting: true,
allowSelection: true,
allowGrouping: false,
allowTextWrap: true,
allowResizing: true,
allowPaging: true,
allowExcelExport: true,
editSettings: { allowEditing: false, allowAdding: false, allowDeleting: false, showDeleteConfirmDialog: true, mode: 'Normal', allowEditOnDblClick: true },
filterSettings: { type: 'CheckBox' },
sortSettings: { columns: [{ field: 'fullName', direction: 'Descending' }] },
pageSettings: { currentPage: 1, pageSize: 50, pageSizes: ["10", "20", "50", "100", "200", "All"] },
selectionSettings: { persistSelection: true, type: 'Single' },
autoFit: true,
showColumnMenu: true,
gridLines: 'Horizontal',
columns: [
{ type: 'checkbox', width: 60 },
{
field: 'id', isPrimaryKey: true, headerText: 'Id', visible: false
},
{ field: 'fullName', headerText: 'Full Name', width: 200, minWidth: 200, validationRules: { required: true } },
{ field: 'addressStreet', headerText: 'Street', width: 200, minWidth: 200, validationRules: { required: true } },
{ field: 'addressCity', headerText: 'City', width: 200, minWidth: 200, validationRules: { required: true } },
{ field: 'addressState', headerText: 'State', width: 200, minWidth: 200, validationRules: { required: true } },
{ field: 'mobileNumber', headerText: 'Mobile#', width: 200, minWidth: 200, validationRules: { required: true } },
{ field: 'email', headerText: 'Email', width: 200, minWidth: 200, validationRules: { required: true } }
],
toolbar: [
'ExcelExport'
],
beforeDataBound: () => { },
dataBound: function () {
contactsGrid.obj.toolbarModule.enableItems(['Edit', 'Delete'], false);
contactsGrid.obj.autoFitColumns(['fullName', 'addressStreet', 'addressCity', 'addressState', 'mobileNumber', 'email']);
},
excelExportComplete: () => { },
rowSelected: () => {
if (contactsGrid.obj.getSelectedRecords().length == 1) {
contactsGrid.obj.toolbarModule.enableItems(['Edit', 'Delete'], true);
} else {
contactsGrid.obj.toolbarModule.enableItems(['Edit', 'Delete'], false);
}
},
rowDeselected: () => {
if (contactsGrid.obj.getSelectedRecords().length == 1) {
contactsGrid.obj.toolbarModule.enableItems(['Edit', 'Delete'], true);
} else {
contactsGrid.obj.toolbarModule.enableItems(['Edit', 'Delete'], false);
}
},
rowSelecting: () => {
if (contactsGrid.obj.getSelectedRecords().length) {
contactsGrid.obj.clearSelection();
}
},
actionComplete: async (args) => {
}
});
contactsGrid.obj.appendTo(contactsGridRef.value);
},
refresh: () => {
contactsGrid.obj.setProperties({ dataSource: state.contactData });
}
};
const activitiesGrid = {
obj: null,
create: async (dataSource) => {
activitiesGrid.obj = new ej.grids.Grid({
height: 200,
dataSource: dataSource,
allowFiltering: false,
allowSorting: true,
allowSelection: true,
allowGrouping: false,
allowTextWrap: true,
allowResizing: true,
allowPaging: true,
allowExcelExport: true,
editSettings: { allowEditing: false, allowAdding: false, allowDeleting: false, showDeleteConfirmDialog: true, mode: 'Normal', allowEditOnDblClick: true },
filterSettings: { type: 'CheckBox' },
sortSettings: { columns: [{ field: 'fromDate', direction: 'Descending' }] },
pageSettings: { currentPage: 1, pageSize: 50, pageSizes: ["10", "20", "50", "100", "200", "All"] },
selectionSettings: { persistSelection: true, type: 'Single' },
autoFit: true,
showColumnMenu: true,
gridLines: 'Horizontal',
columns: [
{ type: 'checkbox', width: 60 },
{
field: 'id', isPrimaryKey: true, headerText: 'Id', visible: false
},
{ field: 'typeName', headerText: 'Activity', width: 200, minWidth: 200, validationRules: { required: true } },
{ field: 'number', headerText: 'Number', width: 200, minWidth: 200, validationRules: { required: true } },
{ field: 'fromDate', headerText: 'From', width: 150, format: 'yyyy-MM-dd' },
{ field: 'toDate', headerText: 'To', width: 150, format: 'yyyy-MM-dd' },
{ field: 'summary', headerText: 'Summary', width: 300, minWidth: 300, validationRules: { required: true } },
],
toolbar: [
'ExcelExport'
],
beforeDataBound: () => { },
dataBound: function () {
activitiesGrid.obj.toolbarModule.enableItems(['Edit', 'Delete'], false);
activitiesGrid.obj.autoFitColumns(['typeName', 'number', 'fromDate', 'toDate', 'summary']);
},
excelExportComplete: () => { },
rowSelected: () => {
if (activitiesGrid.obj.getSelectedRecords().length == 1) {
activitiesGrid.obj.toolbarModule.enableItems(['Edit', 'Delete'], true);
} else {
activitiesGrid.obj.toolbarModule.enableItems(['Edit', 'Delete'], false);
}
},
rowDeselected: () => {
if (activitiesGrid.obj.getSelectedRecords().length == 1) {
activitiesGrid.obj.toolbarModule.enableItems(['Edit', 'Delete'], true);
} else {
activitiesGrid.obj.toolbarModule.enableItems(['Edit', 'Delete'], false);
}
},
rowSelecting: () => {
if (activitiesGrid.obj.getSelectedRecords().length) {
activitiesGrid.obj.clearSelection();
}
},
actionComplete: async (args) => {
}
});
activitiesGrid.obj.appendTo(activitiesGridRef.value);
},
refresh: () => {
activitiesGrid.obj.setProperties({ dataSource: state.activityData });
}
};
Vue.onMounted(async () => {
try {
await SecurityManager.authorizePage(['Leads']);
await SecurityManager.validateToken();
await methods.populateMainData();
await mainGrid.create(state.mainData);
await methods.populateCampaignListLookupData();
campaignListLookup.create();
await methods.populateSalesTeamListLookupData();
salesTeamListLookup.create();
await methods.populatePipelineStageListLookupData();
pipelineStageListLookup.create();
await methods.populateClosingStatusListLookupData();
closingStatusListLookup.create();
titleText.create();
numberText.create();
companyNameText.create();
companyAddressStreetText.create();
companyAddressCityText.create();
companyAddressStateText.create();
companyAddressZipCodeText.create();
companyAddressCountryText.create();
companyPhoneNumberText.create();
companyFaxNumberText.create();
companyEmailText.create();
companyWebsiteText.create();
companyWhatsAppText.create();
companyLinkedInText.create();
companyFacebookText.create();
companyInstagramText.create();
companyTwitterText.create();
dateProspectingDatePicker.create();
dateClosingEstimationDatePicker.create();
dateClosingActualDatePicker.create();
amountTargetedNumeric.create();
amountClosedNumeric.create();
budgetScoreNumeric.create();
authorityScoreNumeric.create();
needScoreNumeric.create();
timelineScoreNumeric.create();
mainModal.create();
manageContactModal.create();
manageActivityModal.create();
contactsGrid.create([]);
activitiesGrid.create([]);
} catch (e) {
console.error('page init error:', e);
} finally {
hideSpinnerAndShowContent();
}
});
return {
mainGridRef,
mainModalRef,
manageContactModalRef,
manageActivityModalRef,
contactsGridRef,
activitiesGridRef,
titleRef,
salesTeamIdRef,
numberRef,
companyNameRef,
companyAddressStreetRef,
companyAddressCityRef,
companyAddressStateRef,
companyAddressZipCodeRef,
companyAddressCountryRef,
companyPhoneNumberRef,
companyFaxNumberRef,
companyEmailRef,
companyWebsiteRef,
companyWhatsAppRef,
companyLinkedInRef,
companyFacebookRef,
companyInstagramRef,
companyTwitterRef,
dateProspectingRef,
dateClosingEstimationRef,
dateClosingActualRef,
amountTargetedRef,
amountClosedRef,
budgetScoreRef,
authorityScoreRef,
needScoreRef,
timelineScoreRef,
pipelineStageRef,
closingStatusRef,
campaignIdRef,
state,
handler
};
}
};
Vue.createApp(App).mount('#app');