Consulting: billing clients effectively

I’m going to stray real quick from my typical posting topic of web development and let you in on a great site I’ve found for all my consulting and freelance work. It’s called Freshbooks.

FreshBooks

I store all my clients and projects on the site, and am able to quickly produce, send, and track an invoice for a project (or part of a project). It makes accounting a lot easier, because you know in one click how many invoices have been paid, how many have been partially paid, and how many are still at 0% fulfilled. One of the nice things for me too is that each invoice can be tailored to match the currency. So whether I’m billing in $ or 元, my client sees what they need.

Another part of the beauty of Freshbooks is that clients can (if they wish) pay online, and even login to see all of their current and past invoices.

All in all, it’s a great service. And you should sign up today!

(Not) using PHP’s substr with Chinese characters

As you may have figured out over the last few hours of searching the internet for this issue, the PHP function substr doesn’t work with Chinese characters (UTF-8). You get the infamous black diamond box with a white question mark inside when the string cuts off. It took me a couple of hours of looking up stuff before I stumbled across Joe Pahl’s solution. Hats off to Joe, thanks for the solution, and hopefully if you’ve found this post or his, it saved you some time.

Specifically for a WordPress loop, here’s what the basic code structure looks like in functions.php


function chinese_excerpt($count) {

$content = get_the_content();

$excerpt  = strip_tags($content);

$excerpt = mb_strcut($content, 0, $count, 'UTF-8');

}

You could do some other stuff like use strip_tags($excerpt) to strip out images and other html. Then in your template, page, whatever, just output this where the character count is in parentheses:


<?php echo get_excerpt(120); ?>

Thanks again Joe!

Two interesting SharePoint 2013 Features

This shouldn’t count as a post, but just digging around SharePoint 2013 preview to see what’s new.

Rating settings now includes Likes as well as Star Ratings

Advanced settings now allows the ability to Reindex list

Changes changes. Interesting.

LeafCompass: Manage your landscaping business online

Are you a landscaper? Know a landscaper? Starting a landscaping business? The most recent development collaboration between Strive, myself, and Brad Maryott is the (in my humble opinion) best landscaping app on the market, LeafCompass.

Some of the things this app does:

  • Contracts &  Estimates
  • Billing & Invoicing
  • Scheduling & Crews
  • Lead Generation

Contracts & Estimates

The app is built on top of a sophisticated, yet simple-to-use algorithm that calculates everything about a landscaping project: man hours, material costs, holidays, equipment rentals, discounts, you name it.

The beauty of the algorithm is that at the end of the form it produces a rock-solid estimate, a great looking contract (of which you can edit the contract terms), and a material list to take to your material supplier.

Contract terms, grace periods, installment rates and more can be edited and included as part of the contract. A contract stays pending until you and the client have agreed, at which point you mark a contract “complete” and your project is ready to go.

Billing & Invoicing

Because everything has been pre-estimated, it makes billing and invoicing extremely easy. Invoices can be split into pre- and post-work payments, installments after delivery, and much more. All invoices are tracked and of course, everything is exportable to PDF for your (and your clients!) printing and viewing pleasure.

Scheduling & Crews

The scheduling algorithms of LeafCompass allow you to book your entire season of landscaping work without worrying about overlaps. The system knows when you’re about to overlap, and will either let you put projects on hold, or push back projects so you don’t wind up in an awkward situation with a client. And of course, all projects can be manually managed, allowing you to overlap to your heart’s content!

Also, manage crews, job titles, employees, and when each individual member of the crew works, when they take holidays, and their hourly rate.

Lead Generation

On the front-end, LeafCompass is the best place to find landscapers for you projects. The homeowners feature allows the user to search for landscapers in their area, with featured landscapers showing at the top of the list (those landscapers who are using LeafCompass). Once a homeowner fills in the form, the lead is automatically generated for the account of the landscapers, enabling a much faster lead-to-client rollover.

Last but not least…

And finally, the whole site should work quite well on your iPhone or iPad, but stay tuned, as we have further development in the wings that will allow you to do even more amazing stuff while you’re on-the-go.

Signup today at leafcompass.com!

“Send” emails to a SharePoint Task List

A colleague and I were looking to have a quick way to manage tasks between the two of us. We had previously just used email. But since most of our workload is using SharePoint, we figured we’d drink our own medicine and see if we could improve the workflow.

Things we wanted to accomplish:

  1. a running history of all of our tasks in SharePoint
  2. quick access (no filling out forms online)
  3. be able to assign tasks to each other
  4. save emails as attachments of tasks, to track requests as they come in

Setting up a task list in SharePoint is quite straightforward, but making it easy and fast to manage took a little bit of thinking. Luckily, everything can be done out of the box, and I’ll show you how here.

Step 1 – Setup the task list

Go to Site Actions > More Options and create a Tasks list.

I created a few views of my tasks and put them on my dashboard so we can see all our active tasks, and the tasks we’ve recently completed.

Step 2 – Connect to Outlook

Go to your task list and click Connect to Outlook in the ribbon. You’ll be prompted (most likely) with several alerts asking you to confirm the connection. After that, if you go to Tasks in Outlook you’ll see your connected SharePoint task list right beneath your local task list. You can create tasks just like you would normally do in Outlook, and they should sync with the SharePoint list.

But that only got us halfway there. All of our requests come by email, so we wanted to avoid re-typing each task. We wanted a way to “send” the email into the task list.

 

Step 3 – Copy emails to the task list

Problem solved! Right click on the email you want to use to originate a task and click on Move > Copy to Folder

A window will come up with all of the options of where you can copy the email. If you scroll to the bottom of the list you should see a folder called SharePoint Lists. Expand that folder and you’ll see your SharePoint task list that has been connected to Outlook.

Click OK and a new task window will pop up with the body of the email in the task description. You can assign the task to yourself or anyone else that has access to the SharePoint list. Also, just to confirm you are assigning that task to the shared list, look in the footer of the window and you should see something to the effect of: In Shared Folder: SharePoint Tasks.

BONUS: If you want to save an email that has an attachment, first double-click the email message to open it in a new window. From there, if you follow the above steps of moving it to the task list folder, it will save the email message as an attachment to the task, including all attachments in the email itself.

How to import Data into SharePoint 2010 using Lightning Tools Data Masher

This post will cover how to import data into SharePoint 2010 from your database using Lightning Tools Data Masher.

Step 1 – Activate Feature

Make sure the Data Masher Menu Items feature is activated in your site features.

Step 2 – Create a new import

Next, click on Site Settings > Create Data Masher Import

Step 3 – Settings

Now for the fun part!
Input the connection string to your database and click Connect to Data Source. At this point, more options will appear below. Choose your table from the database (in my case it’s a community directory SQL view).
Next, give the import a title and description (both are required).
Then choose whether to create a new list from this import (easiest way) or to import the data into an existing list (more tricky, as you have to map each column). If you choose to create a  new list, your list will have the name of the database table you are importing. Choose the columns you would like to import by CTRL + clicking each column name.
Finally, choose how frequently you would like your list updated and click Save.

Step 4 – Results

If everything was successful you should be presented with a list (after the job runs the first time…which may not be immediate) that has all of your freshly imported data.

SharePoint Question: Global Navigation

Ok, this is less of a “how-to” and more of  ”how-to?”

I have a requirement to create a global navigation with each parent item also being the first child in its drop-down menu.

Here’s the site structure:

  • Grade 1 Team Blog
    • Homeroom 1-1 Blog
    • Homeroom 1-2 Blog
  • Grade 2 Team Blog
    • Homeroom 2-1 Blog
    • Homeroom 2-2 Blog

And I want the menus to look like this (bit of a strange requirement, but the claim is that people will not know the parent item is an actual blog):

  • Grade 1 (links to Grade 1 Team blog)
    • Grade 1 Team (also links to Grade 1 Team blog)
    • Homeroom 1-1
    • Homeroom 2-2

Any thoughts?