vrijdag 20 september 2019

Integration with Google Calendar

On request of customer I am working on integrating Project Hours with Google Calendar. Work has been progressing nicely and a fully functional demo is available on the project hours test site: Google Calendar in Project Hours. What it does is that every time hours are saved in Project Hours via  the web interface or mobile app, an entry is created in a specified Google Calender. Only one (company) calendar per organisation can be specified.

In this way, a dashboard with work items is created that can be used for planning for example.

I am thinking of adding a feature where users can specify their own Google calendar for a per user overview.  Or an integration the other way around: use Google Calendar to register hour entries in Project Hours. I have investigated this and it looks like the only way to do this is to create a Chrome plug-in that adds Project Hours menu items to the Google Calendar web page. But first we are going to do some testing and release this to the Project Hours production environment. To be continued..

vrijdag 1 februari 2019

New Project Hours UI banner and landing page design live!

Today I published the new Project Hours look and feel to the live site
For a while I had felt that the design of the web site had become somewhat stale, no colours, only white and gray. To change that, the company banner on every page has been brought in line with the design of the landing pages (see image below). Thanks to Vanessa Lappenschaar-Berg for design tips!
I hope that the new design will lead to a higher conversion rate on the Google Ads.

There are no functional changes in this release. I did make a change to the way caching of data is handled, there has been a case of session data mix-up between two users of different organisations (very scary, should never happen again!)

For those interested: I added the setting 'OutputCacheLocation.None' to the MVC outputcache attribute on every MVC controller to make sure no pages are cached server-side that could cause data mix-up between users:
  [OutputCache(NoStore = true, Duration = 0, Location = System.Web.UI.OutputCacheLocation.None, VaryByParam = "*")]

The NoStore = true and Duration is 0 settings were already there, but apparently that was not enough.
More background info : StackOverflow Sessions Mixed ASP.NET and MVC Output cache set to None

Planned for the next release: add an auditing function to all changes to time entries so it is always possible to see what the entire history of a time entry has been. (Currently this must be done by restoring database backups, a lot of hassle).

That's all for now,

zondag 9 december 2018

Moved to Let's Encrypt certificates

Panic. Google Chrome gave certificate errors on https:projecthours.net Turns out Chrome is not accepting certain ssl certificates any longer. See: https://knowledge.digicert.com/alerts/ALERT2562.html

So I updated the Project Hours web site  to use a free Let's Encrypt certificate. Turns out it was quite easy to configure on Azure following this tutorial: https://www.tecklyfe.com/how-to-setup-lets-encrypt-ssl-certificates-for-an-azure-web-app/. And it there is an automated proces to renew the certificate every 90 days, which is great.

zondag 26 augustus 2018

Started on a new project: StudentSign

Last year, my son spent a year abroad on a highschool in Canada. We had to sign many documents that were emailed to us, especially because he was 16 at the time he went to Canada, so his parents' consent was needed often, for instance for a weekend trip around Canada, or a school canoeing trip.

Signing documents was a tedious process: print the document, sign on paper, scan the signed document and send an email back. It must be very time-consuming for student exchange organisations in this way, having to deal with all the emails with documents from students, parents and schools. It occured to me that there must be an easier way: digital signatures on documents stored in the cloud!

After a little bit of investigation I decided to build a platform on top of an existing digital signature platform. In this way, it is easier to get started and I can focus on the use case for signing documents for exchange students instead of reinventing the wheel by developing a new digital signature platform.

Current state of the project is that a sandbox experimental environment exists and that I am going to conduct interviews with organisations to validate the idea and find out if organisations really need this solution.  We can use the sandbox to experiment with documents, work flow and signatures.

A landing page with an overview of the project has been created:  https://studentsign.net

dinsdag 13 maart 2018

Added project costs tracking

On request of a client I added project costs tracking to https://projecthours.net. Administrators can add hourly rates to users. In reports, totals costs per project or activity are displayed, based on hourly rates.  I hope that with this new and easy-to-use feature, Project Hours will be useful to even more companies..

zondag 4 februari 2018

Marketing is important, created improved landing pages

Project Hours has been online for a few years and we have a group of loyal costumers. To attract more customers I realized we must improve our presence on the web. So I created landing pages with an attractive design, a Dutch version and an English version. The Project Hours Google ads will link to the new pages from now on.

Next is to work on a request from a customer: add hourly rates to users so users can calculate project costs. That's it for now, Bert-Jan.

zaterdag 28 oktober 2017

SQL temporal tables to collect invoice data for customers

Projcct Hours Time Tracking has been online now for over a year and it is time to send out the first invoices to customers. I realized that in order to correctly calculate the amounts to charge for users I will need historical data, i.e. when did users start or when where they set to inactive.

To record historical data I decided to use SQL temporal tables. I could have used database triggers to record table changes but after reading up on SQL temporal tables I decided to give it a try. Here is a good link to learn about this feature: SQL Server Temporal Tables Recipes .

One thing I like very much about temporal tables is that there are special queries that make querying on time intervals much easier, for instance you can do a query like

SELECT email, SysStartTime, SysEndTime FROM AspNetusers
WHERE Active = 1 

This will retrieve all records with changes in a certain time period. Writing this yourself in SQL is more complicated. A good article explaining how to query temporal tables: How to query data on versioned temporal tables in SQL

This is what tables with history look like in SQL Server Management Studio:

That's it for now,