{"id":30253,"date":"2019-06-24T15:19:41","date_gmt":"2019-06-24T14:19:41","guid":{"rendered":"https:\/\/www.alananna.co.uk\/blog\/?p=30253"},"modified":"2019-06-24T15:19:45","modified_gmt":"2019-06-24T14:19:45","slug":"automating-wave-accounting-mail-and-calendar","status":"publish","type":"post","link":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/","title":{"rendered":"Automating Wave Accounting, Mail and Calendar"},"content":{"rendered":"\n<p>Time for a bit of a technology related, geeky post about how I&#8217;ve recently automated part of my workflow thanks to Mail Rules, Folder Actions, Automator and AppleScript. As you might know from a previous post, I&#8217;m in the process of <a href=\"https:\/\/www.alananna.co.uk\/blog\/2019\/wave-accounting-software\/\">transferring to a new accounting solution called Wave<\/a>.<\/p>\n\n\n\n<p>As part of the transition I thought I&#8217;d try to streamline my workflow a little by automating some of the processes. Afterall, if I can save some time when sending invoices, processing payments and recording receipts then I can spend more time actually working.<\/p>\n\n\n\n<p>My previous workflow was:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Workflow<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">Invoicing<\/h4>\n\n\n\n<ol class=\"wp-block-list\"><li>Create an invoice in my accounting software<\/li><li>Save the invoice as a PDF file<\/li><li>Email the PDF file to my client<\/li><li>Add a Calendar event to say that I&#8217;d sent the PDF<\/li><li>Add alarms to the Calendar Event to remind me that I&#8217;d sent it 30 days later<\/li><\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Payment<\/h4>\n\n\n\n<p>When I received payment I would<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Record the payment in my accounting software<\/li><li>Create a Receipt<\/li><li>Save the Receipt as a PDF file<\/li><li>Email the PDF file to my client<\/li><li>Find the Calendar event<\/li><li>Remove the alarms from the calendar<\/li><\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Late Payment<\/h4>\n\n\n\n<p>If the client hadn&#8217;t paid I would get a Calendar alarm and email 30 days after sending the invoice. At this stage I would<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Create an reminder invoice in my accounting software<\/li><li>Save the reminder invoice as a PDF file<\/li><li>Email the PDF file to my client<\/li><li>Add a Calendar event to say that I&#8217;d sent the PDF<\/li><li>Add alarms to the Calendar Event to remind me that I&#8217;d sent it 15 days later<\/li><\/ol>\n\n\n\n<p>and the process would start again. It was fairly simple, it worked but when doing it over and over again it dod become a little tiresome.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Enter Wave<\/h2>\n\n\n\n<p>Wave itself streamlined this process a little as I could create the invoice and send it directly from within Wave. I could then set an automatic reminder to be sent on the due date. That helped a little but I wasn&#8217;t entirely happy leaving it all to a third part app on the Internet. I wanted some control and I wanted to keep records of invoices and payments locally as well.<\/p>\n\n\n\n<p>I wanted to:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Store the PDF files locally as well as within Wave<\/li><li>Add reminders via calendar alarms so that I could check the status of an invoice before an automatic reminder was sent.<\/li><\/ol>\n\n\n\n<p>With a little bit of integration between Wave, some Mail Rules and some AppleScript I was able to do all of this.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Processing Emails<\/h2>\n\n\n\n<p>The secret to this was processing the emails I get from Wave. When sending an invoice from Wave it&#8217;s possible to attach a pdf of the invoice to the email and also send a copy of that to yourself as well as sending it to the client. This email always comes from the same address and has a similar subject line:<\/p>\n\n\n\n<p> &#8220;Invoice #XX from Company Name&#8221;<\/p>\n\n\n\n<p>where XX is the number of the invoice and Company Name is the name of your company.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mail Rules<\/h2>\n\n\n\n<p>Knowing this information makes it easy to set up a Rule within Apple Mail. You do this by going to Preferences from the menu and selecting the Rules tab. Here you can add a new rule.<\/p>\n\n\n\n<p>I set up a rule that is triggering when certain conditions are met. Now, whenever an email containing an invoice from Wave is received this mail Rule will be triggered. The rule itself performs several actions<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>It Moves the email to a &#8216;Sent Invoices&#8217; mailbox (so that I don&#8217;t even have to see it).<\/li><li>It marks the message as read<\/li><li>It runs an AppleScript that creates a Calendar event for me.<\/li><\/ol>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Rules.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"562\" height=\"380\" src=\"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Rules.jpg\" alt=\"\" class=\"wp-image-30281\" srcset=\"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Rules.jpg 562w, https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Rules-200x135.jpg 200w\" sizes=\"auto, (max-width: 562px) 100vw, 562px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>That was all pretty simple and straight forward. The real automation takes place within the AppleScript.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">AppleScripting Calendar Events from Mail Messages<\/h2>\n\n\n\n<p>This was the fun part. I wanted to build an AppleScript that would extract some information from the email that had triggered it. Add this information to a Calendar Event and create Alarms on the Calendar Event. I was fairly new to AppleScript so it took some trial and error, but I think I have it sorted now.<\/p>\n\n\n\n<p>Here&#8217;s the AppleScript that is triggered by the Mail Rule<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Triggered by Mail rule.\nusing terms from application \"Mail\"\n\ton perform mail action with messages msgs for rule theRule\n\t\ttell application \"Mail\"\n\t\t\trepeat with msg in msgs\n\t\t\t\ttry\n\t\t\t\t\tset msgsubject to subject of msg\n\t\t\t\t\tset msgcontent to content of msg\n\t\t\t\t\tset msgid to message id of msg\n\t\t\t\t\tset {amount, dueon} to my parseMsg(msgcontent)\n\t\t\t\t\tmy createEvent(msgsubject, msgid, amount, dueon)\n\t\t\t\tend try\n\t\t\tend repeat\n\t\tend tell\n\tend perform mail action with messages\nend using terms from<\/code><\/pre>\n\n\n\n<p>It&#8217;s fairly simple. <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>It simply sets the subject, content and id of the message into three sensibly named variables. <\/li><li>It then runs a function called parseMsg to extract some details from the content of the message and sets the &#8216;amount due&#8217; and &#8216;due date&#8217; into two more variables. <\/li><li>Finally it runs another function called createEvent to create a Calendar Event<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Parsing the email with AppleScript<\/h4>\n\n\n\n<p>The parseMsg function was modified from an example script elsewhere.<\/p>\n\n\n\n<p>It simply looks for given strings within the email and extracts the text from between them. It then trims any whitespace from the ends of the string and sets the strings into the variables &#8216;amount&#8217; and &#8216;dueon&#8217;. Here&#8217;s the AppleScript used by this function.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Parse the email content to extract invoice details.\non parseMsg(msgcontent)\n\tset amount to extractBetween(msgcontent, \"\u00a3\", \"pence\")\n\tset dueon to extractBetween(msgcontent, \"Due on:\", \"For questions\")\n\treturn {amount, dueon}\nend parseMsg\n\n-- Extract the substring from between two strings\nto extractBetween(theString, startText, endText)\n\tset tid to AppleScript's text item delimiters\n\tset AppleScript's text item delimiters to startText\n\tset startComps to text items of theString\n\tset AppleScript's text item delimiters to endText\n\tset endComps to text items of second item of startComps\n\tset AppleScript's text item delimiters to tid\n\treturn trim(first item of endComps)\nend extractBetween\n\n-- Trim all whitespace from start and end of a string\non trim(theString)\n\tset theChars to {\" \", tab, character id 10, return, character id 0, character id 8232}\n\trepeat until first character of theString is not in theChars\n\t\tset theString to text 2 thru -1 of theString\n\tend repeat\n\trepeat until last character of theString is not in theChars\n\t\tset theString to text 1 thru -2 of theString\n\tend repeat\n\treturn theString\nend trim<\/code><\/pre>\n\n\n\n<p>With that done, my script now has strings for:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>the message subject<\/li><li>the message id<\/li><li>the amount specified in the invoice<\/li><li>the due date of the invoice<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Creating a Calendar Event with AppleScript<\/h4>\n\n\n\n<p>I could now build a function called createEvent that would create a calendar event based on this data.<\/p>\n\n\n\n<p>Here&#8217;s the AppleScript for this<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Create a calendar event for the specified invoice.\non createEvent(msgsubject, msgid, amount, dueon)\n\tset startdate to (current date) + 28 * days\n\tset sentdate to current date\n\t-- set enddate to startdate\n\ttell application \"Calendar\" to tell calendar \"MyCalendar\"\n\t\tset theEvent to make new event with properties {start date:startdate, summary:\"Check \" &amp; msgsubject, allday event:true}\n\t\tset description of theEvent to amount &amp; return &amp; \"Due on: \" &amp; dueon &amp; return &amp; \"Sent on: \" &amp; sentdate\n\t\tset url of theEvent to \"message:\" &amp; \"%3c\" &amp; msgid &amp; \"%3e\"\n\t\tdelay 5\n\t\ttell theEvent\n\t\t\t-- Add a email alarm\n\t\t\tmake new mail alarm at end of mail alarms with properties {trigger interval:10}\n\t\t\tdelay 5\n\t\t\tmake new sound alarm at end of sound alarms with properties {trigger interval:370, sound name:\"Sosumi\"}\n\t\tend tell\n\tend tell\nend createEvent<\/code><\/pre>\n\n\n\n<p>Again, it&#8217;s fairly simple even if it did take some trial and error to get working properly. This is what is does.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>It sets a &#8216;startdate&#8217; variable which is 28 days after the current date. This is the date that I want the Reminder to be sent to me and therefore the date that I want the Calendar event created on.<\/li><li>It also set a &#8216;sentdate&#8217; variable to the current date.<\/li><li>Next it tells the Calendar app to create a new all day event. This event has various properties set:<ul><li>The date is set using the startdate variable<\/li><li>The title of the event (summary) is set to a string that includes the subject of the email using the msgsubject variable<\/li><li>The event is set to be an all day event<\/li><\/ul><\/li><li>Next, the description of the event is added. This goes into the notes section of a Calendar event and in this case includes the Amount that the invoice was for, the date it is due and the date it was sent. Unfortunately the email from Wave doesn&#8217;t contain the client name which is a shame otherwise I would have added this to the description as well.<\/li><li>Next a URL is added to the Calendar Event. This uses the &#8216;msgid&#8217; variable and provides a link back to the original email that triggered the AppleScript. This allows me to easily find the actual invoice that was sent to a client directly from the Calendar Event.<\/li><li>Finally two alarms are added to the Calendar event, and email alarm and a sound alarm so that I get notified that and invoice hasn&#8217;t been paid just before it becomes overdue.<\/li><\/ul>\n\n\n\n<p>It&#8217;s all fairly simple, but it does mean that I don&#8217;t have to do anything in the invoicing workflow other than send the invoice to a client from within Wave. Once I do that an email is also sent ot me that triggers the mail rule, files the email, marks it as read and then runs the AppleScript to create a Calendar event and set up some Calendar alarms.<\/p>\n\n\n\n<p>With that all in place I&#8217;ll get an email 28 days after sending the invoice reminding me to check on it&#8217;s status. This means that if a client has paid and I hadn&#8217;t recorded the payment I can do so before an automatic reminder is sent out.<\/p>\n\n\n\n<p>That was the invoicing part of my workflow set up and quite a few steps saved. I was enjoying this automation so thought I&#8217;d take it a little further. Next on my list was the Payments part of the workflow.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Payments<\/h2>\n\n\n\n<p>This was actually a fairly similar process, but in reverse. When I recorded that an invoice had been paid within Wave I simply had to click on the &#8216;Send Receipt&#8217; button to send a receipt to my client and a copy of that receipt to myself. I set up a separate Mail Rule that would be triggered when this email was received and it would once again perform actions to file the email, mark it as read and run a different AppleScript. This AppleScript would find the Calendar Event created by the Invoice Script above. It would then remove the alarms from the Calendar event and add the date that the invoice was paid to the description.<\/p>\n\n\n\n<p>The AppleScript itself follows the same format as the one for the Invoice. Here it is in its entirety<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Triggered by Mail rule.\nusing terms from application \"Mail\"\n\ton perform mail action with messages msgs for rule theRule\n\t\ttell application \"Mail\"\n\t\t\trepeat with msg in msgs\n\t\t\t\ttry\n\t\t\t\t\tset msgcontent to content of msg\n\t\t\t\t\tset {invoicenumber} to my parseMsg(msgcontent)\n\t\t\t\t\tmy removeAlarm(invoicenumber)\n\t\t\t\tend try\n\t\t\tend repeat\n\t\tend tell\n\tend perform mail action with messages\nend using terms from\n\n-- Parse the email content to extract invoice details.\non parseMsg(msgcontent)\n\tset invoicenumber to extractBetween(msgcontent, \"Invoice #\", \"for\")\n\treturn {invoicenumber}\nend parseMsg\n\n-- Extract the substring from between two strings\nto extractBetween(theString, startText, endText)\n\tset tid to AppleScript's text item delimiters\n\tset AppleScript's text item delimiters to startText\n\tset startComps to text items of theString\n\tset AppleScript's text item delimiters to endText\n\tset endComps to text items of second item of startComps\n\tset AppleScript's text item delimiters to tid\n\treturn trim(first item of endComps)\nend extractBetween\n\n-- Trim all whitespace from start and end of a string\non trim(theString)\n\tset theChars to {\" \", tab, character id 10, return, character id 0, character id 8232}\n\trepeat until first character of theString is not in theChars\n\t\tset theString to text 2 thru -1 of theString\n\tend repeat\n\trepeat until last character of theString is not in theChars\n\t\tset theString to text 1 thru -2 of theString\n\tend repeat\n\treturn theString\nend trim\n\n\n-- Remove Alarm from specified calendar event.\non removeAlarm(invoicenumber)\n\tset receiptdate to current date\n\ttell application \"Calendar\"\n\t\ttell calendar \"myCalendar\"\n\t\t\tset thisevent to first event where its summary = \"Invoice #\" &amp; invoicenumber\n\t\t\tset description of thisevent to description of thisevent &amp; return &amp; \"Paid: \" &amp; receiptdate\n\t\t\ttell thisevent\n\t\t\t\tdelete mail alarms of thisevent\n\t\t\t\tdelay 10\n\t\t\t\tdelete sound alarms of thisevent\n\t\t\tend tell\n\t\tend tell\n\tend tell\nend removeAlarm<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li>It uses the same parseMsg function to extract the invoice number from the receipt email. <\/li><li>It then uses this invoice number to find the Calendar Event pertaining to that invoice. <\/li><li>Next it updates the description of the Calendar Event to the include the date it was paid<\/li><li>Finally it removes the alarms from the event.<\/li><\/ul>\n\n\n\n<p>I had to add some delay into it as for some reason the script didn&#8217;t always remove both alarms. Once I had it working, my workflow for recording a payment was simply to record the payment and send a receipt.<\/p>\n\n\n\n<p>So far so good. Invoicing had gone:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><a href=\"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Invoicing.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"246\" src=\"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Invoicing.jpg\" alt=\"\" class=\"wp-image-30273\" srcset=\"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Invoicing.jpg 1000w, https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Invoicing-200x49.jpg 200w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/a><\/figure><\/div>\n\n\n\n<p>Recording payments had gone:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Payment.jpg\"><img loading=\"lazy\" decoding=\"async\" width=\"1361\" height=\"453\" src=\"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Payment.jpg\" alt=\"\" class=\"wp-image-30274\" srcset=\"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Payment.jpg 1361w, https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Payment-200x67.jpg 200w\" sizes=\"auto, (max-width: 1361px) 100vw, 1361px\" \/><\/a><\/figure>\n\n\n\n<p>What&#8217;s more, I&#8217;d had some &#8216;fun&#8217; setting it up and learnt some new skills too. Late payments should in theory take care of themselves as Wave should send out reminders itself if an invoice hasn&#8217;t been paid so that has cut that workflow out completely. Although, as I&#8217;ve yet to see what happens when an invoice hasn&#8217;t been paid I might have to re-visit it at some point. I guess ideally I&#8217;ll get a copy of the reminder email as well and will be able to use it to set up a new Calendar Event.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Filing of Receipts with Folder Actions<\/h2>\n\n\n\n<p>You may have noticed that I mentioned Folder Actions and Automator in the first line of this blog post but haven&#8217;t actually used them so far to implement any of this automation. Well, Wave will also allow you to record expenses by uploading receipts. It then processes these receipts and adds the expense to your accounts. As well as manually uploading the receipt to your Wave account, you can send it via email. <\/p>\n\n\n\n<p>I&#8217;ve therefore set up a Folder on my computer with a Folder Action that runs an Automator Workflow. Whenever a new item is added to the folder the automator Workflow is invoked. The Automator Workflow simply creates an email, attaches the new item that was added to the folder to the email and sends it to my Wave account. Once there Wave processes it and adds it to my expenses ready for me to approve. Just an additional little bit of automation to make my life easier.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Time for a bit of a technology related, geeky post about how I&#8217;ve recently automated part of my workflow thanks to Mail Rules, Folder Actions, Automator and AppleScript. As you might know from a previous post, I&#8217;m in the process of transferring to a new accounting solution called Wave. As part of the transition I&#46;&#46;&#46;<\/p>\n","protected":false},"author":1312,"featured_media":30273,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[5],"tags":[1022,820,1503],"class_list":["post-30253","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology","tag-business","tag-osx","tag-technology"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Automating Wave Accounting, Mail and Calendar - A Simple Life of Luxury<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Automating Wave Accounting, Mail and Calendar - A Simple Life of Luxury\" \/>\n<meta property=\"og:description\" content=\"Time for a bit of a technology related, geeky post about how I&#8217;ve recently automated part of my workflow thanks to Mail Rules, Folder Actions, Automator and AppleScript. As you might know from a previous post, I&#8217;m in the process of transferring to a new accounting solution called Wave. As part of the transition I&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/\" \/>\n<meta property=\"og:site_name\" content=\"A Simple Life of Luxury\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/www.facebook.com\/justal\/\" \/>\n<meta property=\"article:author\" content=\"http:\/\/www.facebook.com\/justal\/\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-24T14:19:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-06-24T14:19:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Invoicing.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1000\" \/>\n\t<meta property=\"og:image:height\" content=\"246\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Alan Cole\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@justalcole\" \/>\n<meta name=\"twitter:site\" content=\"@justalcole\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alan Cole\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/\"},\"author\":{\"name\":\"Alan Cole\",\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/45ecde6c89b31a9e21f97fdde4c21372\"},\"headline\":\"Automating Wave Accounting, Mail and Calendar\",\"datePublished\":\"2019-06-24T14:19:41+00:00\",\"dateModified\":\"2019-06-24T14:19:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/\"},\"wordCount\":1848,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/45ecde6c89b31a9e21f97fdde4c21372\"},\"image\":{\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/Invoicing.jpg\",\"keywords\":[\"Business\",\"OSX\",\"Technology\"],\"articleSection\":[\"Technology\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/\",\"url\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/\",\"name\":\"Automating Wave Accounting, Mail and Calendar - A Simple Life of Luxury\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/Invoicing.jpg\",\"datePublished\":\"2019-06-24T14:19:41+00:00\",\"dateModified\":\"2019-06-24T14:19:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/Invoicing.jpg\",\"contentUrl\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2019\\\/06\\\/Invoicing.jpg\",\"width\":1000,\"height\":246},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/2019\\\/06\\\/automating-wave-accounting-mail-and-calendar\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Automating Wave Accounting, Mail and Calendar\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/\",\"name\":\"A Simple Life of Luxury\",\"description\":\"Tales from a down-shifted family - Making the most of modest means in West Wales\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/45ecde6c89b31a9e21f97fdde4c21372\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/45ecde6c89b31a9e21f97fdde4c21372\",\"name\":\"Alan Cole\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/Selfie.jpg\",\"url\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/Selfie.jpg\",\"contentUrl\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/Selfie.jpg\",\"width\":950,\"height\":713,\"caption\":\"Alan Cole\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/Selfie.jpg\"},\"description\":\"Alan is a Freelance Website Designer, Sports &amp; Exercise Science Lab Technician and full time Dad &amp; husband with far too many hobbies: Triathlete, Swimming, Cycling, Running, MTBing, Surfing, Windsurfing, SUPing, Gardening, Photography.... The list goes on.\",\"sameAs\":[\"https:\\\/\\\/www.pixelwave.co.uk\",\"http:\\\/\\\/www.facebook.com\\\/justal\\\/\",\"https:\\\/\\\/x.com\\\/justalcole\"],\"url\":\"https:\\\/\\\/www.alananna.co.uk\\\/blog\\\/author\\\/justal123\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Automating Wave Accounting, Mail and Calendar - A Simple Life of Luxury","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/","og_locale":"en_GB","og_type":"article","og_title":"Automating Wave Accounting, Mail and Calendar - A Simple Life of Luxury","og_description":"Time for a bit of a technology related, geeky post about how I&#8217;ve recently automated part of my workflow thanks to Mail Rules, Folder Actions, Automator and AppleScript. As you might know from a previous post, I&#8217;m in the process of transferring to a new accounting solution called Wave. As part of the transition I&#46;&#46;&#46;","og_url":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/","og_site_name":"A Simple Life of Luxury","article_publisher":"http:\/\/www.facebook.com\/justal\/","article_author":"http:\/\/www.facebook.com\/justal\/","article_published_time":"2019-06-24T14:19:41+00:00","article_modified_time":"2019-06-24T14:19:45+00:00","og_image":[{"width":1000,"height":246,"url":"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Invoicing.jpg","type":"image\/jpeg"}],"author":"Alan Cole","twitter_card":"summary_large_image","twitter_creator":"@justalcole","twitter_site":"@justalcole","twitter_misc":{"Written by":"Alan Cole","Estimated reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/#article","isPartOf":{"@id":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/"},"author":{"name":"Alan Cole","@id":"https:\/\/www.alananna.co.uk\/blog\/#\/schema\/person\/45ecde6c89b31a9e21f97fdde4c21372"},"headline":"Automating Wave Accounting, Mail and Calendar","datePublished":"2019-06-24T14:19:41+00:00","dateModified":"2019-06-24T14:19:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/"},"wordCount":1848,"commentCount":0,"publisher":{"@id":"https:\/\/www.alananna.co.uk\/blog\/#\/schema\/person\/45ecde6c89b31a9e21f97fdde4c21372"},"image":{"@id":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/#primaryimage"},"thumbnailUrl":"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Invoicing.jpg","keywords":["Business","OSX","Technology"],"articleSection":["Technology"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/","url":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/","name":"Automating Wave Accounting, Mail and Calendar - A Simple Life of Luxury","isPartOf":{"@id":"https:\/\/www.alananna.co.uk\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/#primaryimage"},"image":{"@id":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/#primaryimage"},"thumbnailUrl":"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Invoicing.jpg","datePublished":"2019-06-24T14:19:41+00:00","dateModified":"2019-06-24T14:19:45+00:00","breadcrumb":{"@id":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/#primaryimage","url":"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Invoicing.jpg","contentUrl":"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Invoicing.jpg","width":1000,"height":246},{"@type":"BreadcrumbList","@id":"https:\/\/www.alananna.co.uk\/blog\/2019\/06\/automating-wave-accounting-mail-and-calendar\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.alananna.co.uk\/blog\/"},{"@type":"ListItem","position":2,"name":"Automating Wave Accounting, Mail and Calendar"}]},{"@type":"WebSite","@id":"https:\/\/www.alananna.co.uk\/blog\/#website","url":"https:\/\/www.alananna.co.uk\/blog\/","name":"A Simple Life of Luxury","description":"Tales from a down-shifted family - Making the most of modest means in West Wales","publisher":{"@id":"https:\/\/www.alananna.co.uk\/blog\/#\/schema\/person\/45ecde6c89b31a9e21f97fdde4c21372"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.alananna.co.uk\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/www.alananna.co.uk\/blog\/#\/schema\/person\/45ecde6c89b31a9e21f97fdde4c21372","name":"Alan Cole","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2021\/06\/Selfie.jpg","url":"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2021\/06\/Selfie.jpg","contentUrl":"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2021\/06\/Selfie.jpg","width":950,"height":713,"caption":"Alan Cole"},"logo":{"@id":"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2021\/06\/Selfie.jpg"},"description":"Alan is a Freelance Website Designer, Sports &amp; Exercise Science Lab Technician and full time Dad &amp; husband with far too many hobbies: Triathlete, Swimming, Cycling, Running, MTBing, Surfing, Windsurfing, SUPing, Gardening, Photography.... The list goes on.","sameAs":["https:\/\/www.pixelwave.co.uk","http:\/\/www.facebook.com\/justal\/","https:\/\/x.com\/justalcole"],"url":"https:\/\/www.alananna.co.uk\/blog\/author\/justal123\/"}]}},"jetpack_featured_media_url":"https:\/\/www.alananna.co.uk\/blog\/wp-content\/uploads\/2019\/06\/Invoicing.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.alananna.co.uk\/blog\/wp-json\/wp\/v2\/posts\/30253","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.alananna.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.alananna.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.alananna.co.uk\/blog\/wp-json\/wp\/v2\/users\/1312"}],"replies":[{"embeddable":true,"href":"https:\/\/www.alananna.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=30253"}],"version-history":[{"count":0,"href":"https:\/\/www.alananna.co.uk\/blog\/wp-json\/wp\/v2\/posts\/30253\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.alananna.co.uk\/blog\/wp-json\/wp\/v2\/media\/30273"}],"wp:attachment":[{"href":"https:\/\/www.alananna.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=30253"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.alananna.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=30253"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.alananna.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=30253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}