Linkedin, Twitter Integration

This commit is contained in:
Anupam K 2020-04-18 01:57:51 +05:30
commit 4e2256f2e3
6 changed files with 45 additions and 27 deletions

View File

@ -5,7 +5,7 @@ frappe.ui.form.on('LinkedIn Settings', {
onload: function(frm){ onload: function(frm){
if(frm.doc.session_status == 'Expired' && frm.doc.consumer_key && frm.doc.consumer_secret){ if(frm.doc.session_status == 'Expired' && frm.doc.consumer_key && frm.doc.consumer_secret){
frappe.confirm( frappe.confirm(
'Session not valid, Do you want to login?', __('Session not valid, Do you want to login?'),
function(){ function(){
frm.trigger("login"); frm.trigger("login");
}, },
@ -20,7 +20,7 @@ frappe.ui.form.on('LinkedIn Settings', {
frm.dashboard.set_headline_alert( frm.dashboard.set_headline_alert(
'<div class="row">' + '<div class="row">' +
'<div class="col-xs-12">' + '<div class="col-xs-12">' +
'<span class="indicator whitespace-nowrap red'+ '' +'"><span class="hidden-xs">Session Not Active. Save doc to login.</span></span> ' + '<span class="indicator whitespace-nowrap red"><span class="hidden-xs">'+ __("Session Not Active. Save doc to login.") +'</span></span> ' +
'</div>' + '</div>' +
'</div>' '</div>'
); );
@ -33,11 +33,11 @@ frappe.ui.form.on('LinkedIn Settings', {
days = Math.floor(days/(1000 * 3600 * 24)); days = Math.floor(days/(1000 * 3600 * 24));
let msg,color; let msg,color;
if(days>0){ if(days>0){
msg = "Your Session will be expire in " + days + " days."; msg = __("Your Session will be expire in ") + days + __(" days.");
color = "green"; color = "green";
} }
else{ else{
msg = "Session is expired. Save doc to login."; msg = __("Session is expired. Save doc to login.");
color = "red"; color = "red";
} }
frm.dashboard.set_headline_alert( frm.dashboard.set_headline_alert(

View File

@ -2,7 +2,17 @@
// For license information, please see license.txt // For license information, please see license.txt
frappe.ui.form.on('Social Media Post', { frappe.ui.form.on('Social Media Post', {
validate: function(frm){ validate: function(frm){
if(frm.doc.text.length > 280){ if(frm.doc.twitter==0 && frm.doc.linkedin==0){
frappe.throw(__("Select atleast one Social Media from Share on."))
}
if(frm.doc.scheduled_time) {
let scheduled_time = new Date(frm.doc.scheduled_time);
let date_time = new Date();
if(scheduled_time.getTime() < date_time.getTime()){
frappe.throw(__("Invalid Scheduled Time"));
}
}
if(frm.doc.text?.length > 280){
frappe.throw(__("Length Must be less than 280.")) frappe.throw(__("Length Must be less than 280."))
} }
}, },

View File

@ -7,7 +7,7 @@
"engine": "InnoDB", "engine": "InnoDB",
"field_order": [ "field_order": [
"campaign_name", "campaign_name",
"sheduled_time", "scheduled_time",
"post_status", "post_status",
"column_break_6", "column_break_6",
"twitter", "twitter",
@ -58,12 +58,6 @@
"print_hide": 1, "print_hide": 1,
"read_only": 1 "read_only": 1
}, },
{
"allow_on_submit": 1,
"fieldname": "sheduled_time",
"fieldtype": "Datetime",
"label": "Scheduled Time"
},
{ {
"depends_on": "eval:doc.twitter ==1", "depends_on": "eval:doc.twitter ==1",
"fieldname": "content", "fieldname": "content",
@ -136,11 +130,18 @@
{ {
"fieldname": "column_break_15", "fieldname": "column_break_15",
"fieldtype": "Column Break" "fieldtype": "Column Break"
},
{
"allow_on_submit": 1,
"fieldname": "scheduled_time",
"fieldtype": "Datetime",
"label": "Scheduled Time",
"read_only_depends_on": "eval:doc.post_status == \"Posted\""
} }
], ],
"is_submittable": 1, "is_submittable": 1,
"links": [], "links": [],
"modified": "2020-04-18 01:28:35.995490", "modified": "2020-04-21 15:10:04.953713",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "CRM", "module": "CRM",
"name": "Social Media Post", "name": "Social Media Post",

View File

@ -6,10 +6,18 @@ from __future__ import unicode_literals
import frappe import frappe
from frappe.model.document import Document from frappe.model.document import Document
from frappe import _ from frappe import _
import datetime
class SocialMediaPost(Document): class SocialMediaPost(Document):
def validate(self):
if self.scheduled_time:
current_time = frappe.utils.now_datetime()
scheduled_time = frappe.utils.get_datetime(self.scheduled_time)
if scheduled_time < current_time:
frappe.throw(_("Invalid Scheduled Time"))
def submit(self): def submit(self):
if self.sheduled_time: if self.scheduled_time:
self.post_status = "Scheduled" self.post_status = "Scheduled"
super(SocialMediaPost, self).submit() super(SocialMediaPost, self).submit()
@ -32,15 +40,14 @@ class SocialMediaPost(Document):
frappe.log_error(message=traceback , title=title) frappe.log_error(message=traceback , title=title)
def process_scheduled_social_media_posts(): def process_scheduled_social_media_posts():
import datetime posts = frappe.get_list("Social Media Post", filters={"post_status": "Scheduled", "docstatus":1}, fields= ["name", "scheduled_time","post_status"])
posts = frappe.get_list("Social Media Post", filters={"status": "Scheduled"}, fields= ["name", "sheduled_time"])
start = frappe.utils.now_datetime() start = frappe.utils.now_datetime()
end = start + datetime.timedelta(minutes=59) end = start + datetime.timedelta(minutes=10)
for post in posts: for post in posts:
post_time = frappe.utils.get_datetime(post.scheduled_time) if post.scheduled_time:
if post_time > start and post_time <= end: post_time = frappe.utils.get_datetime(post.scheduled_time)
post = frappe.get_doc('Social Media Post',post['name']) if post_time > start and post_time <= end:
post.post() publish('Social Media Post', post.name)
@frappe.whitelist() @frappe.whitelist()
def publish(doctype, name): def publish(doctype, name):

View File

@ -5,7 +5,7 @@ frappe.ui.form.on('Twitter Settings', {
onload: function(frm){ onload: function(frm){
if(frm.doc.session_status == 'Expired' && frm.doc.consumer_key && frm.doc.consumer_secret){ if(frm.doc.session_status == 'Expired' && frm.doc.consumer_key && frm.doc.consumer_secret){
frappe.confirm( frappe.confirm(
'Session not valid, Do you want to login?', __('Session not valid, Do you want to login?'),
function(){ function(){
frm.trigger("login"); frm.trigger("login");
}, },
@ -20,7 +20,7 @@ frappe.ui.form.on('Twitter Settings', {
frm.dashboard.set_headline_alert( frm.dashboard.set_headline_alert(
'<div class="row">' + '<div class="row">' +
'<div class="col-xs-12">' + '<div class="col-xs-12">' +
'<span class="indicator whitespace-nowrap green'+ '' +'"><span class="hidden-xs">Session Active</span></span> ' + '<span class="indicator whitespace-nowrap green"><span class="hidden-xs">'+ __("Session Active") +'</span></span> ' +
'</div>' + '</div>' +
'</div>' '</div>'
); );
@ -29,7 +29,7 @@ frappe.ui.form.on('Twitter Settings', {
frm.dashboard.set_headline_alert( frm.dashboard.set_headline_alert(
'<div class="row">' + '<div class="row">' +
'<div class="col-xs-12">' + '<div class="col-xs-12">' +
'<span class="indicator whitespace-nowrap red'+ '' +'"><span class="hidden-xs">Session Not Active. Save doc to login.</span></span> ' + '<span class="indicator whitespace-nowrap red"><span class="hidden-xs">'+ __("Session Not Active. Save doc to login.") +'</span></span> ' +
'</div>' + '</div>' +
'</div>' '</div>'
); );

View File

@ -31,14 +31,14 @@
"fieldname": "consumer_key", "fieldname": "consumer_key",
"fieldtype": "Data", "fieldtype": "Data",
"in_list_view": 1, "in_list_view": 1,
"label": "Consumer Key", "label": "API Key",
"reqd": 1 "reqd": 1
}, },
{ {
"fieldname": "consumer_secret", "fieldname": "consumer_secret",
"fieldtype": "Password", "fieldtype": "Password",
"in_list_view": 1, "in_list_view": 1,
"label": "Consumer Secret Key", "label": "API Secret Key",
"reqd": 1 "reqd": 1
}, },
{ {
@ -77,7 +77,7 @@
"image_field": "profile_pic", "image_field": "profile_pic",
"issingle": 1, "issingle": 1,
"links": [], "links": [],
"modified": "2020-04-08 23:56:20.621246", "modified": "2020-04-21 22:06:43.726798",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "CRM", "module": "CRM",
"name": "Twitter Settings", "name": "Twitter Settings",