236 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			236 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| erpnext.utils.CRMActivities = class CRMActivities {
 | |
| 	constructor(opts) {
 | |
| 		$.extend(this, opts);
 | |
| 	}
 | |
| 
 | |
| 	refresh() {
 | |
| 		var me = this;
 | |
| 		$(this.open_activities_wrapper).empty();
 | |
| 		let cur_form_footer = this.form_wrapper.find('.form-footer');
 | |
| 
 | |
| 		// all activities
 | |
| 		if (!$(this.all_activities_wrapper).find('.form-footer').length) {
 | |
| 			this.all_activities_wrapper.empty();
 | |
| 			$(cur_form_footer).appendTo(this.all_activities_wrapper);
 | |
| 
 | |
| 			// remove frappe-control class to avoid absolute position for action-btn
 | |
| 			$(this.all_activities_wrapper).removeClass('frappe-control');
 | |
| 			// hide new event button
 | |
| 			$('.timeline-actions').find('.btn-default').hide();
 | |
| 			// hide new comment box
 | |
| 			$(".comment-box").hide();
 | |
| 			// show only communications by default
 | |
| 			$($('.timeline-content').find('.nav-link')[0]).tab('show');
 | |
| 		}
 | |
| 
 | |
| 		// open activities
 | |
| 		frappe.call({
 | |
| 			method: "erpnext.crm.utils.get_open_activities",
 | |
| 			args: {
 | |
| 				ref_doctype: this.frm.doc.doctype,
 | |
| 				ref_docname: this.frm.doc.name
 | |
| 			},
 | |
| 			callback: (r) => {
 | |
| 				if (!r.exc) {
 | |
| 					var activities_html = frappe.render_template('crm_activities', {
 | |
| 						tasks: r.message.tasks,
 | |
| 						events: r.message.events
 | |
| 					});
 | |
| 
 | |
| 					$(activities_html).appendTo(me.open_activities_wrapper);
 | |
| 
 | |
| 					$(".open-tasks").find(".completion-checkbox").on("click", function() {
 | |
| 						me.update_status(this, "ToDo");
 | |
| 					});
 | |
| 
 | |
| 					$(".open-events").find(".completion-checkbox").on("click", function() {
 | |
| 						me.update_status(this, "Event");
 | |
| 					});
 | |
| 
 | |
| 					me.create_task();
 | |
| 					me.create_event();
 | |
| 				}
 | |
| 			}
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	create_task () {
 | |
| 		let me = this;
 | |
| 		let _create_task = () => {
 | |
| 			const args = {
 | |
| 				doc: me.frm.doc,
 | |
| 				frm: me.frm,
 | |
| 				title: __("New Task")
 | |
| 			};
 | |
| 			let composer = new frappe.views.InteractionComposer(args);
 | |
| 			composer.dialog.get_field('interaction_type').set_value("ToDo");
 | |
| 			// hide column having interaction type field
 | |
| 			$(composer.dialog.get_field('interaction_type').wrapper).closest('.form-column').hide();
 | |
| 			// hide summary field
 | |
| 			$(composer.dialog.get_field('summary').wrapper).closest('.form-section').hide();
 | |
| 		};
 | |
| 		$(".new-task-btn").click(_create_task);
 | |
| 	}
 | |
| 
 | |
| 	create_event () {
 | |
| 		let me = this;
 | |
| 		let _create_event = () => {
 | |
| 			const args = {
 | |
| 				doc: me.frm.doc,
 | |
| 				frm: me.frm,
 | |
| 				title: __("New Event")
 | |
| 			};
 | |
| 			let composer = new frappe.views.InteractionComposer(args);
 | |
| 			composer.dialog.get_field('interaction_type').set_value("Event");
 | |
| 			$(composer.dialog.get_field('interaction_type').wrapper).hide();
 | |
| 		};
 | |
| 		$(".new-event-btn").click(_create_event);
 | |
| 	}
 | |
| 
 | |
| 	async update_status (input_field, doctype) {
 | |
| 		let completed = $(input_field).prop("checked") ? 1 : 0;
 | |
| 		let docname = $(input_field).attr("name");
 | |
| 		if (completed) {
 | |
| 			await frappe.db.set_value(doctype, docname, "status", "Closed");
 | |
| 			this.refresh();
 | |
| 		}
 | |
| 	}
 | |
| };
 | |
| 
 | |
| erpnext.utils.CRMNotes = class CRMNotes {
 | |
| 	constructor(opts) {
 | |
| 		$.extend(this, opts);
 | |
| 	}
 | |
| 
 | |
| 	refresh() {
 | |
| 		var me = this;
 | |
| 		this.notes_wrapper.find('.notes-section').remove();
 | |
| 
 | |
| 		let notes = this.frm.doc.notes || [];
 | |
| 		notes.sort(
 | |
| 			function(a, b) {
 | |
| 				return new Date(b.added_on) - new Date(a.added_on);
 | |
| 			}
 | |
| 		);
 | |
| 
 | |
| 		let notes_html = frappe.render_template(
 | |
| 			'crm_notes',
 | |
| 			{
 | |
| 				notes: notes
 | |
| 			}
 | |
| 		);
 | |
| 		$(notes_html).appendTo(this.notes_wrapper);
 | |
| 
 | |
| 		this.add_note();
 | |
| 
 | |
| 		$(".notes-section").find(".edit-note-btn").on("click", function() {
 | |
| 			me.edit_note(this);
 | |
| 		});
 | |
| 
 | |
| 		$(".notes-section").find(".delete-note-btn").on("click", function() {
 | |
| 			me.delete_note(this);
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	add_note () {
 | |
| 		let me = this;
 | |
| 		let _add_note = () => {
 | |
| 			var d = new frappe.ui.Dialog({
 | |
| 				title: __('Add a Note'),
 | |
| 				fields: [
 | |
| 					{
 | |
| 						"label": "Note",
 | |
| 						"fieldname": "note",
 | |
| 						"fieldtype": "Text Editor",
 | |
| 						"reqd": 1,
 | |
| 						"enable_mentions": true,
 | |
| 					}
 | |
| 				],
 | |
| 				primary_action: function() {
 | |
| 					var data = d.get_values();
 | |
| 					frappe.call({
 | |
| 						method: "add_note",
 | |
| 						doc: me.frm.doc,
 | |
| 						args: {
 | |
| 							note: data.note
 | |
| 						},
 | |
| 						freeze: true,
 | |
| 						callback: function(r) {
 | |
| 							if (!r.exc) {
 | |
| 								me.frm.refresh_field("notes");
 | |
| 								me.refresh();
 | |
| 							}
 | |
| 							d.hide();
 | |
| 						}
 | |
| 					});
 | |
| 				},
 | |
| 				primary_action_label: __('Add')
 | |
| 			});
 | |
| 			d.show();
 | |
| 		};
 | |
| 		$(".new-note-btn").click(_add_note);
 | |
| 	}
 | |
| 
 | |
| 	edit_note (edit_btn) {
 | |
| 		var me = this;
 | |
| 		let row = $(edit_btn).closest('.comment-content');
 | |
| 		let row_id = row.attr("name");
 | |
| 		let row_content = $(row).find(".content").html();
 | |
| 		if (row_content) {
 | |
| 			var d = new frappe.ui.Dialog({
 | |
| 				title: __('Edit Note'),
 | |
| 				fields: [
 | |
| 					{
 | |
| 						"label": "Note",
 | |
| 						"fieldname": "note",
 | |
| 						"fieldtype": "Text Editor",
 | |
| 						"default": row_content
 | |
| 					}
 | |
| 				],
 | |
| 				primary_action: function() {
 | |
| 					var data = d.get_values();
 | |
| 					frappe.call({
 | |
| 						method: "edit_note",
 | |
| 						doc: me.frm.doc,
 | |
| 						args: {
 | |
| 							note: data.note,
 | |
| 							row_id: row_id
 | |
| 						},
 | |
| 						freeze: true,
 | |
| 						callback: function(r) {
 | |
| 							if (!r.exc) {
 | |
| 								me.frm.refresh_field("notes");
 | |
| 								me.refresh();
 | |
| 								d.hide();
 | |
| 							}
 | |
| 
 | |
| 						}
 | |
| 					});
 | |
| 				},
 | |
| 				primary_action_label: __('Done')
 | |
| 			});
 | |
| 			d.show();
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	delete_note (delete_btn) {
 | |
| 		var me = this;
 | |
| 		let row_id = $(delete_btn).closest('.comment-content').attr("name");
 | |
| 		frappe.call({
 | |
| 			method: "delete_note",
 | |
| 			doc: me.frm.doc,
 | |
| 			args: {
 | |
| 				row_id: row_id
 | |
| 			},
 | |
| 			freeze: true,
 | |
| 			callback: function(r) {
 | |
| 				if (!r.exc) {
 | |
| 					me.frm.refresh_field("notes");
 | |
| 					me.refresh();
 | |
| 				}
 | |
| 			}
 | |
| 		});
 | |
| 	}
 | |
| };
 |