Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var MARKET_REPORT_TEMPLATE_FILE_NAME = "M Template";
- var FRONT_DESK_EMAIL_ADDRESS = "posteremail@gmail.cm";
- var NEWSLETTER_REACH = "810,000";
- var INIT_DATA_COL = 3;
- var FONT_FAMILY = "trebuchet ms";
- var TRP_RED = "#dd2329";
- var TRP_BLUE = "#002b55";
- var GREEN = "#7c9e13";
- var ORANGE = "orange";
- var GREY = "#B2B2B2";
- var FONT_FORMAT = "style='font-family:" + FONT_FAMILY + "';";
- var REPORT_INDENT_FORMAT = "style='padding-left:50px;'";
- var TITLE_FORMAT = "style='font-size:24px;font-weight:bold;' cellpadding='0', cellspacing='0'";
- var TITLE_SUB_FORMAT_BLUE = "style='color:" + TRP_BLUE + "';";
- var TITLE_SUB_FORMAT_RED = "style='color:" + TRP_RED + "';";
- var SUB_TITLE_FORMAT = "style='color:" + GREEN + ";font-size:14px;';";
- var SECTION_TITLE_FORMAT = "style='color:" + TRP_BLUE + ";font-size:20px;';";
- var BULLET_HEADER_FORMAT = "style='color:" + GREEN + ";font-size:12px;font-style:italic;';";
- var BULLET_FORMAT = "style='color:" + TRP_BLUE + ";font-size:16px;';";
- var BULLET_APOINTMENT_FORMAT = "style='color:" + TRP_RED + ";font-size:25px;';";
- var DASHED_LINE_FORMAT = "style='border-top-style:dashed; border-top-color:" + ORANGE + "; border-top-width:1px; width:400px;'";
- var FEEDBACK_LINE_FORMAT = "style='border-left-style:solid; border-left-color:" + GREY + "; border-left-width:1px; color:" + TRP_BLUE + ";font-size:16px; padding-left:4px;'";
- var FEEDBACK_TIMESTAMP_FORMAT = BULLET_HEADER_FORMAT;
- var FEEDBACK_DISCLAIMER_FORMAT = "style='font-size:12px;font-style:italic;';";
- var LINK_LARGE_FORMAT = BULLET_FORMAT;
- var LINK_SMALL_FORMAT = "style='color:" + TRP_BLUE + ";font-size:12px;';";
- var AGENT_NAME_ROW = 2;
- var AGENT_EMAIL_ADDRESS_ROW = 3;
- var SELLERS_ADDRESS_ROW = 4;
- var SELLERS_NAME_ROW = 5;
- var SELLERS_EMAIL_ADDRESS_1_ROW = 6;
- var SELLERS_EMAIL_ADDRESS_2_ROW = 7;
- var SELLERS_EMAIL_ADDRESS_3_ROW = 8;
- var SELLERS_EMAIL_ADDRESS_4_ROW = 9;
- var DO_SOCIAL_ROW = 10;
- var FB_FREQ_ROW = 11;
- var FB_REACH_ROW = 12;
- var FB_LINK_ROW = 13;
- var TWITTER_FREQ_ROW = 14;
- var TWITTER_REACH_ROW = 15;
- var TWITTER_LINK_ROW = 16;
- var BLOG_VIEWS_ROW = 17;
- var BLOG_LINK_ROW = 18;
- var NEWSLETTER_MENTIONS_ROW = 19;
- var NEWSLETTER_LINK_ROW = 20;
- var CRAIGSLIST_FREQ_ROW = 21;
- var CRAIGSLIST_LINK_ROW = 22;
- var KIJIJI_FREQ_ROW = 23;
- var KIJIJI_VIEWS_ROW = 24;
- var KIJIJI_LINK_ROW = 25;
- var YOUTUBE_VIEWS_ROW = 26;
- var YOUTUBE_LINK_ROW = 27;
- var NUM_APPOINTMENTS_ROW = 28;
- var NUM_CANCELLED_ROW = 29;
- var NUM_UPCOMING_ROW = 30;
- var MLS_COMPARABLES_LINK_ROW = 31;
- var FEEDBACK_ROW = 32;
- var TWITTER_LINK = "https://twitter.com/thetwitteraccounthere";
- function MAIN_createBatchMarketReports () {
- var marketReportDataSheet = getdataSheet(MARKET_REPORT_TEMPLATE_FILE_NAME);
- var currentDataColumn = INIT_DATA_COL;
- //ERROR OCCURS HERE: Method Range.getValue is heavily used by the script. File: Code Line: 69
- while (marketReportDataSheet.getRange(AGENT_NAME_ROW, currentDataColumn).getValue() != "") {
- createMarketReport(marketReportDataSheet, currentDataColumn);
- currentDataColumn += 1;
- }
- }
- function createMarketReport (dataSheet, dataColumn) {
- var htmlBody = "<div " + FONT_FORMAT + ">";
- if (dataSheet != null) {
- // introduction
- htmlBody += "Hello " + dataSheet.getRange(SELLERS_NAME_ROW, dataColumn).getValue() + ",<br><br>";
- htmlBody += "Here's your <b>weekly</b> metric with , " + dataSheet.getRange(AGENT_NAME_ROW, dataColumn).getValue() + ".<br><br><br>";
- htmlBody += "<div " + REPORT_INDENT_FORMAT + ">";
- // title
- htmlBody += "<table " + TITLE_FORMAT + "><tr>"
- + "<td " + TITLE_SUB_FORMAT_BLUE + ">B</td>"
- + "<td " + TITLE_SUB_FORMAT_RED + ">4</td>"
- + "<td " + TITLE_SUB_FORMAT_BLUE + ">5 UPDATES</td>"
- + "</tr></table>";
- // address
- htmlBody += "<div " + SUB_TITLE_FORMAT + ">"
- + "<b>" + dataSheet.getRange(SELLERS_ADDRESS_ROW, dataColumn).getValue() + "</b>"
- + "</div>";
- htmlBody += "<br><br>";
- // social media ad metrics
- if (dataSheet.getRange(DO_SOCIAL_ROW, dataColumn).getValue().toLowerCase() == "yes"
- || dataSheet.getRange(DO_SOCIAL_ROW, dataColumn).getValue().toLowerCase() == "y") {
- htmlBody += getSocialHTML(dataSheet, dataColumn);
- }
- // property viewing metrics
- htmlBody += getPropertyViewingHTML(dataSheet, dataColumn);
- // close the 2 "main" divs created at beginning of fuciton
- htmlBody += "</div></div>";
- // for debugging purposes
- // Logger.log(htmlBody);
- MailApp.sendEmail( {
- to: getSellersEmailAddresses(dataSheet, dataColumn),
- subject: "TheRedPin CHECK-UP",
- htmlBody: htmlBody,
- cc: dataSheet.getRange(AGENT_EMAIL_ADDRESS_ROW, dataColumn).getValue(),
- bcc: FRONT_DESK_EMAIL_ADDRESS
- } );
- } else {
- htmlBody += "There was an error retrieving the Market Report Data Sheet";
- htmlBody += "</div>";
- }
- }
- function getSellersEmailAddresses(dataSheet, dataColumn) {
- var sellersEmail1 = dataSheet.getRange(SELLERS_EMAIL_ADDRESS_1_ROW, dataColumn).getValue();
- var sellersEmail2 = dataSheet.getRange(SELLERS_EMAIL_ADDRESS_2_ROW, dataColumn).getValue();
- var sellersEmail3 = dataSheet.getRange(SELLERS_EMAIL_ADDRESS_3_ROW, dataColumn).getValue();
- var sellersEmail4 = dataSheet.getRange(SELLERS_EMAIL_ADDRESS_4_ROW, dataColumn).getValue();
- return sellersEmail1 + ", " + sellersEmail2 + ", " + sellersEmail3 + ", " + sellersEmail4;
- }
- function getdataSheet(filename) {
- var files = DriveApp.getFilesByType(MimeType.GOOGLE_SHEETS);
- var file = null;
- var spreadsheet = null;
- var sheet = null;
- while (files.hasNext()) {
- file = files.next();
- if (file.getName() == filename) {
- spreadsheet = SpreadsheetApp.openById(file.getId());
- sheet = spreadsheet.getActiveSheet();
- return sheet;
- }
- }
- return null;
- }
- function getPropertyViewingHTML (dataSheet, dataColumn) {
- var htmlBody = "";
- // section title
- htmlBody += "<div " + SECTION_TITLE_FORMAT + ">Metrics: </div><br>";
- // total appointments
- htmlBody += "<div " + BULLET_HEADER_FORMAT + ">Total Number oa's" + "</div>";
- htmlBody += "<div " + BULLET_APOINTMENT_FORMAT + ">"
- + addLeadingZero(dataSheet.getRange(NUM_APPOINTMENTS_ROW, dataColumn).getValue())
- + "</div><br>";
- // number cancelled appointments
- htmlBody += "<div " + BULLET_HEADER_FORMAT + ">Number of Cancelled" + "</div>";
- htmlBody += "<div " + BULLET_APOINTMENT_FORMAT + ">"
- + addLeadingZero(dataSheet.getRange(NUM_CANCELLED_ROW, dataColumn).getValue())
- + "</div><br>";
- // upcoming appointments
- htmlBody += "<div " + BULLET_HEADER_FORMAT + ">Total Number of Upcoming " + "</div>";
- htmlBody += "<div " + BULLET_APOINTMENT_FORMAT + ">"
- + addLeadingZero(dataSheet.getRange(NUM_UPCOMING_ROW, dataColumn).getValue())
- + "</div><br>";
- // MLS comparables link
- htmlBody += "<div " + BULLET_HEADER_FORMAT + ">MLS Comparables" + "</div>";
- htmlBody += "<div " + BULLET_FORMAT + ">"
- + "<a href='" + dataSheet.getRange(MLS_COMPARABLES_LINK_ROW, dataColumn).getValue() + "'>Click this link to view properties in your neighbourhood</a>"
- + "</div><br><br>";
- // Feedback
- htmlBody += getFeedbackHTML(dataSheet, dataColumn, FEEDBACK_ROW);
- // dashed line
- htmlBody += "<br><div " + DASHED_LINE_FORMAT + "></div><br><br>";
- return htmlBody;
- }
- function getSocialHTML (dataSheet, dataColumn) {
- var htmlBody = "";
- // section title
- htmlBody += "<div " + SECTION_TITLE_FORMAT + ">Social Media Metrics:</div><br>";
- // facebook
- htmlBody += getFacebookHTML(dataSheet, dataColumn);
- // twitter frequency
- htmlBody += getTwitterHTML(dataSheet, dataColumn);
- // blog views
- htmlBody += getBlogHTML(dataSheet, dataColumn);
- // newsletter mentions
- htmlBody += getNewsletterMentionsHTML(dataSheet, dataColumn);
- // kijiji ad frerquency
- htmlBody += getKiijiHTML(dataSheet, dataColumn);
- // craigslist ad frerquency
- htmlBody += getCraigslistHTML(dataSheet, dataColumn);
- // youtube views
- htmlBody += getYouTubeHTML(dataSheet, dataColumn);
- // dashed line
- htmlBody += "<br><div " + DASHED_LINE_FORMAT + "></div><br><br>";
- return htmlBody;
- }
- function getNewsletterMentionsHTML (dataSheet, dataColumn) {
- var newsletterMentions = dataSheet.getRange(NEWSLETTER_MENTIONS_ROW, dataColumn).getValue();
- var linkToAd = dataSheet.getRange(NEWSLETTER_LINK_ROW, dataColumn).getValue();
- var newsletterMentionsText = "";
- var htmlBody = "";
- if (newsletterMentions > 0) {
- if (newsletterMentions == 1) {
- newsletterMentionsText = "appearance";
- } else if (newsletterMentions > 1) {
- newsletterMentionsText = "appearances";
- }
- htmlBody += "<div " + BULLET_HEADER_FORMAT + ">Newsletter Mentions</div>";
- htmlBody += "<div " + BULLET_FORMAT + ">"
- + "<b>" + newsletterMentions + "</b>"
- + " newsletter " + newsletterMentionsText + " sent out to <b>" + NEWSLETTER_REACH + "</b> subscribers";
- if (linkToAd != "") {
- htmlBody += " - "
- + "<span " + LINK_SMALL_FORMAT + ">"
- + "<a href='" + linkToAd + "'>View newsletter</a>"
- + "</span>";
- }
- htmlBody += "</div><br>";
- }
- return htmlBody;
- }
- function getKiijiHTML (dataSheet, dataColumn) {
- var kijijiFreq = dataSheet.getRange(KIJIJI_FREQ_ROW, dataColumn).getValue();
- var linkToAd = dataSheet.getRange(KIJIJI_LINK_ROW, dataColumn).getValue();
- var numKijijiViewed = dataSheet.getRange(KIJIJI_VIEWS_ROW, dataColumn).getValue();
- var kijijiFreqText = "";
- var htmlBody = "";
- if (kijijiFreq > 0) {
- if (kijijiFreq == 1) {
- kijijiFreqText = "ad";
- } else if (kijijiFreq > 1) {
- kijijiFreqText = "ads";
- }
- htmlBody += "<div " + BULLET_HEADER_FORMAT + ">Kijiji Views</div>";
- htmlBody += "<div " + BULLET_FORMAT + ">"
- + "Produced "
- + "<b>" + kijijiFreq + "</b>"
- + " " + kijijiFreqText + " with paid promotion";
- if (numKijijiViewed > 1) {
- htmlBody += " viewed "
- + "<b>" + numKijijiViewed + "</b>"
- + " times"
- }
- if (linkToAd != "") {
- htmlBody += " - "
- + "<span " + LINK_SMALL_FORMAT + ">"
- + "<a href='" + linkToAd + "'>View ad</a>"
- + "</span>";
- }
- htmlBody += "</div><br>";
- }
- return htmlBody;
- }
- function getCraigslistHTML (dataSheet, dataColumn) {
- var CraigslistFreq = dataSheet.getRange(CRAIGSLIST_FREQ_ROW, dataColumn).getValue();
- var linkToAd = dataSheet.getRange(CRAIGSLIST_LINK_ROW, dataColumn).getValue();
- var CraigslistFreqText = "";
- var htmlBody = "";
- if (CraigslistFreq > 0) {
- if (CraigslistFreq == 1) {
- CraigslistFreqText = "ad";
- } else if (CraigslistFreq > 1) {
- CraigslistFreqText = "ads";
- }
- htmlBody +="<div " + BULLET_HEADER_FORMAT + ">Craigslist Ads Frequency</div>";
- htmlBody += "<div " + BULLET_FORMAT + ">"
- + "Produced "
- + "<b>" + CraigslistFreq + "</b>"
- + " " + CraigslistFreqText;
- if (linkToAd != "") {
- htmlBody += " - "
- + "<span " + LINK_SMALL_FORMAT + ">"
- + "<a href='" + linkToAd + "'>View ad</a>"
- + "</span>";
- }
- htmlBody += "</div><br>";
- }
- return htmlBody;
- }
- function getYouTubeHTML (dataSheet, dataColumn) {
- var numYoutubeViewed = dataSheet.getRange(YOUTUBE_VIEWS_ROW, dataColumn).getValue();
- var linkToAd = TWITTER_LINK;
- var htmlBody = "";
- var numYoutubeViewed = dataSheet.getRange(YOUTUBE_VIEWS_ROW, dataColumn).getValue();
- if (numYoutubeViewed > 1) {
- htmlBody += "<div " + BULLET_HEADER_FORMAT + ">YouTube Views</div>";
- htmlBody += "<div " + BULLET_FORMAT + ">"
- + "<b>" + numYoutubeViewed + "</b>"
- + " video views";
- if (linkToAd != "") {
- htmlBody += " - "
- + "<span " + LINK_SMALL_FORMAT + ">"
- + "<a href='" + linkToAd + "'>View video</a>"
- + "</span>";
- }
- htmlBody += "</div><br>";
- }
- return htmlBody;
- }
- function getFacebookHTML (dataSheet, dataColumn) {
- var numRreached = dataSheet.getRange(FB_REACH_ROW, dataColumn).getValue();
- var numAds = dataSheet.getRange(FB_FREQ_ROW, dataColumn).getValue();
- var linkToAd = dataSheet.getRange(FB_LINK_ROW, dataColumn).getValue();
- var fbText = "";
- var htmlBody = "";
- if (numAds > 0) {
- if (numAds == 1) {
- fbText = "post";
- } else {
- fbText = "posts";
- }
- htmlBody += "<div " + BULLET_HEADER_FORMAT + ">Facebook Reach</div>";
- htmlBody += "<div " + BULLET_FORMAT + ">"
- + "Created "
- + "<b>" + numAds + "</b>"
- + " " + fbText;
- if (numRreached > 1) {
- htmlBody += " viewed by "
- + "<b>" + addThousandsComma(numRreached) + "</b>"
- + " unique people";
- }
- if (linkToAd != "") {
- htmlBody += " - "
- + "<span " + LINK_SMALL_FORMAT + ">"
- + "<a href='" + linkToAd + "'>View post</a>"
- + "</span>";
- }
- htmlBody += "</div><br>";
- }
- return htmlBody;
- }
- function getTwitterHTML (dataSheet, dataColumn) {
- var twitterFreq = dataSheet.getRange(TWITTER_FREQ_ROW, dataColumn).getValue();
- var numTwitterReached = dataSheet.getRange(TWITTER_REACH_ROW, dataColumn).getValue();
- var twitterLink = dataSheet.getRange(TWITTER_LINK_ROW, dataColumn).getValue();
- var tweetsText = "";
- var htmlBody = "";
- if (twitterFreq > 0) {
- if (twitterFreq == 1) {
- tweetsText = "tweet";
- } else {
- tweetsText = "tweets";
- }
- htmlBody += "<div " + BULLET_HEADER_FORMAT + ">Twitter Reach</div>";
- htmlBody += "<div " + BULLET_FORMAT + ">"
- + "Generated "
- + "<b>" + twitterFreq + "</b>"
- + " " + tweetsText
- if (numTwitterReached > 1) {
- htmlBody += " viewed by "
- + "<b>" + addThousandsComma(numTwitterReached) + "</b>"
- + " unique people";
- }
- if (twitterLink != "") {
- htmlBody += " - "
- + "<span " + LINK_SMALL_FORMAT + ">"
- + "<a href='" + twitterLink + "'>View " + tweetsText + "</a>"
- + "</span>";
- }
- htmlBody += "</div><br>";
- }
- return htmlBody;
- }
- function getFeedbackHTML(dataSheet, dataColumn, firstDataRow) {
- var htmlBody = "<div " + BULLET_HEADER_FORMAT + ">Feedback from BA :" + "</div><br>";
- var feedbackItem = dataSheet.getRange(firstDataRow, dataColumn).getValue();
- if (feedbackItem == "") {
- htmlBody += "<div " + BULLET_FORMAT + ">"
- + "There is no new feedback this week."
- + "</div><br>";
- } else {
- while (feedbackItem != "") {
- var dateIndex = feedbackItem.indexOf("^^^");
- if (dateIndex > 0) {
- htmlBody += "<div " + FEEDBACK_LINE_FORMAT + ">"
- + "'" + feedbackItem.substring(0, dateIndex) + "'"
- + "<span " + FEEDBACK_TIMESTAMP_FORMAT + ">"
- + " - " + feedbackItem.substring(dateIndex + 3, feedbackItem.length)
- + "</span>"
- + "</div>"
- + "<br>";
- } else {
- htmlBody += "<div " + FEEDBACK_LINE_FORMAT + ">"
- + "'" + feedbackItem + "'"
- + "</div><br>";
- }
- firstDataRow += 1;
- feedbackItem = dataSheet.getRange(firstDataRow, dataColumn).getValue();
- }
- }
- htmlBody += "<br>";
- htmlBody += "<div " + FEEDBACK_DISCLAIMER_FORMAT + ">*Feedback is provided on a voluntary basis.</div>";
- return htmlBody;
- }
- function getBlogHTML (dataSheet, dataColumn) {
- var numBlogViewed = dataSheet.getRange(BLOG_VIEWS_ROW, dataColumn).getValue();
- var blogLink = dataSheet.getRange(BLOG_LINK_ROW, dataColumn).getValue();
- var htmlBody = "";
- if (numBlogViewed > 1) {
- htmlBody += "<div " + BULLET_HEADER_FORMAT + ">Blog Views</div>";
- htmlBody += "<div " + BULLET_FORMAT + ">"
- + "<b>" + numBlogViewed + "</b>"
- + " page views";
- if (blogLink != "") {
- htmlBody += " - "
- + "<span " + LINK_SMALL_FORMAT + ">"
- + "<a href='" + blogLink + "'>View blog</a>"
- + "</span>";
- }
- htmlBody += "</div><br>";
- }
- return htmlBody;
- }
- function addLeadingZero (number) {
- if (number < 10) {
- return "0" + number;
- }
- return number;
- }
- function addThousandsComma (number) {
- number += "";
- var length = number.length;
- var leadingDigits = number.length % 3;
- var numberWithCommas = number.substring(0, leadingDigits);
- var index = leadingDigits;
- while (index < length) {
- if (leadingDigits == 0
- && index == 0) {
- numberWithCommas += number.substring(index, index + 3 );
- } else {
- numberWithCommas += "," + number.substring(index, index + 3 );
- }
- index += 3;
- }
- return numberWithCommas;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement