קבלת התראות על הנחות

רמת תכנות: מתחיל
משך: 5 דקות
סוג פרויקט: אוטומציה עם טריגר מבוסס-זמן

מטרות

  • הבנה מה הפתרון עושה.
  • להבין מה שירותי Apps Script עושים במסגרת הפתרון.
  • מגדירים את הסקריפט.
  • מריצים את הסקריפט.

מידע על הפתרון הזה

אם קניתם מניה מסוימת והיא יורדת, תוכלו למכור אותה, לרכוש מניה אחרת ולהגיש בקשה לניכוי מס. פעולה כזו נקראת 'קצירת הפסדים'. לרשום את המניות שלכם בגיליון אלקטרוני ב-Google Sheets ולקבל התראות באימייל אם מחיר המניה ירד מתחת למחיר הרכישה.

צילום מסך של גיליון אלקטרוני ב-Google Sheets עם מחירי מניות והתראה באימייל ב-Gmail.

איך זה עובד

בגיליון האלקטרוני נעשה שימוש בפונקציה המובנית של Google Finance ב-Sheets כדי להציג את מחירי המניות העדכניים. הסקריפט משווה את מחיר הרכישה של כל מניה ברשימה למחיר הנוכחי שלה. ואז הוא שולח לכם באימייל רשימה של מניות שנמוכות ממחיר הרכישה. אתם יכולים להגדיר את הסקריפט כך שיפעל באיזו תדירות שתרצו.

שירותי Apps Script

הפתרון הזה משתמש בשירותים הבאים:

  • שירות גיליון אלקטרוני – הלוך וחזור על כל מניה רשומה והשוואה בין מחיר המניה למחיר הרכישה.
  • שירות Gmail – שירות ששולח ושולח אימייל של המניות שירדו מתחת למחיר הרכישה.

דרישות מוקדמות

כדי להשתמש בדוגמה הזו, נדרשות הדרישות המוקדמות הבאות:

  • חשבון Google (יכול להיות שיהיה צורך באישור אדמין).
  • דפדפן אינטרנט עם גישה לאינטרנט.

הגדרת הסקריפט

  1. בלחיצה על הלחצן הבא תוכלו ליצור עותק של הגיליון האלקטרוני לדוגמה מהתראות לגבי קציר של הפסד מס. פרויקט Apps Script לפתרון הזה מצורף לגיליון האלקטרוני.
    יצירת עותק
  2. בגיליון האלקטרוני שהעתקתם, עדכנו את הגיליון בפרטי המאגר שלכם או השתמשו בנתוני הבדיקה שסופקו.

מריצים את הסקריפט

  1. בגיליון האלקטרוני שהעתקת, לחץ על תוספים > Apps Script.
  2. בתפריט הנפתח של הפונקציות, בוחרים checkLosses.
  3. לוחצים על Run.
  4. כשתוצג בקשה, מאשרים את הסקריפט. אם במסך ההסכמה של OAuth מוצגת האזהרה האפליקציה הזו לא מאומתת, אפשר להמשיך בלחיצה על אפשרויות מתקדמות > מעבר אל {Project Name} (לא בטוח).

  5. כדאי לחפש באימייל רשימה של מניות שירדו מתחת למחיר הרכישה. אם לא קיבלתם אימייל, בדקו אם מחירי המניות ברשימה נמוכים ממחיר הרכישה.

יצירת טריגר מבוסס-זמן

  1. חוזרים לפרויקט הסקריפט.
  2. בצד ימין, לוחצים על Triggers (טריגרים) .
  3. בפינה השמאלית התחתונה, לוחצים על הוספת טריגר.
  4. בשדה בחירת הפונקציה שתופעל, מוודאים שהאפשרות checkLosses מסומנת.
  5. בקטע בחירת מקור האירוע, בוחרים באפשרות מבוסס-זמן.
  6. מגדירים את תדירות ההרצה של הסקריפט ולוחצים על שמירה.

בדיקת הקוד

כדי לבדוק את קוד Apps Script של הפתרון הזה, לוחצים על הצגת קוד המקור למטה:

הצגת קוד המקור

Code.gs

solutions/automations/tax-loss-harvest-alerts/Code.js
// To learn how to use this script, refer to the documentation:
// https://developers.google.com/apps-script/samples/automations/tax-loss-harvest-alerts

/*
Copyright 2022 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

/** 
* Checks for losses in the sheet.
*/
function checkLosses() {
  // Pulls data from the spreadsheet
  let sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(
    "Calculations"
  );
  let source = sheet.getRange("A:G");
  let data = source.getValues();

  //Prepares the email alert content
  let message = "Stocks: <br><br>";

  let send_message = false;

  console.log("starting loop");

  //Loops through the cells in the spreadsheet to find cells where the stock fell below purchase price
  let n = 0;
  for (let i in data) {
    //Skips the first row
    if (n++ == 0) continue;

    //Loads the current row
    let row = data[i];

    console.log(row[1]);
    console.log(row[6]);

    //Once at the end of the list, exits the loop
    if (row[1] == "") break;

    //If value is below purchase price, adds stock ticker and difference to list of tax loss opportunities
    if (row[6] < 0) {
      message +=
        row[1] +
        ": " +
        (parseFloat(row[6].toString()) * 100).toFixed(2).toString() +
        "%<br>";
      send_message = true;
    }
  }
  if (!send_message) return;

  MailApp.sendEmail({
    to: SpreadsheetApp.getActiveSpreadsheet().getOwner().getEmail(),
    subject: "Tax-loss harvest",
    htmlBody: message,

  });
}

תורמים

הדוגמה הזו נוצרה על ידי ג'רמי גלסנברג, יועץ ניהול מוצר ואסטרטגיית פלטפורמה. מוצאים את ג'רמי בטוויטר @jglassenברג.

הדוגמה הזו מנוהלת על ידי Google בעזרת מומחי המפתחים של Google.

השלבים הבאים