TempWorks Time Clock Solution

About two and a half years ago we began an endeavor to solve the problems our customers were having with their time clock systems. Most time clocks in the market space are closed systems. Although most of them do support importing and exporting of data you still need to customize the data. TempWorks for over a decade has supported Kronos’ imports and exports plus various others but that only gets you half way. With so many Kronos systems out there in the wild and different versions I don’t think we have yet been able to use the same import/export data mapping system twice. I won’t mention all the other variations of other time clock systems in the market space. Then once you get the mapping set up you still need to supply man hours for management of the time clock the importing and exporting of data on a daily or weekly basis. We saw that as a problem.

The TempWorks Time Clock solution is the innovative product that was born out of that problem solving endeavor. Instead of having a closed system “talk” to our system we wrote our own time clock software that talks directly and natively to TempWorks. Instead of having a very narrow choice of time clock hardware features, our system can work on any Microsoft Windows hardware platforms.

Integrated System

Since it is our time clock our customers can stay within the TempWorks software they are familiar with. There isn’t a need to learn separate software packages to manage the various points of the system. When an employee clocks-in, their data is sent directly to the TempWorks system to verify they are on assignment. If multiples are found our time clock reports back to the employee that they need to chose which assignment they are clocking-in for. This step can be skipped if our time clock has been preprogrammed with a specific worksite the assignment belongs to. Also cost center routing can be set up so the user has to input which job they are clocking-in for incase the assignment has multiple jobs. This data is stored within TempWorks instantaneously and readily available to all users of the TempWorks software. If set up, the employee could log into TempWorks Web Center and make a punch correction, the employee’s supervisor could log into WebCenter and make the fix, or just have the payroll department correct  it within TempWorks Enterprise right away or later. The solution is completely flexible and configurable to how you want it set up. All data transfer is real-time so if you need reports based on who is and is not clocked-in you don’t need to wait, pull the report up as you need it.

Hardware

A TempWorks Time Clock customer can choose from a variety of off the shelf hardware solutions. Our only requirement is that it runs Microsoft Windows and has a network interface. This includes any machine from desktops, laptops, tablets, to mini all-in-one solutions. Input interfaces can be keyboard with mouse, no keyboard, no mouse, touch screens, bar code scanners, magnetic strip scanners, and biometric scanners. One of the more popular hardware solutions has been the Samsung Q-series touch screen system. It is an all-in-one system that mounts easily and has been very durable.

 

MainScreen Initial screen a user sees when stepping up to the time clock.

 

ClockIn After authentication the user is given options. These can be customized per deployment.

 

timeclock  2 An example installation of a Samsung Q touch screen at a work site. Note how cool we look above the ancient looking Kronos system.

Enterprise Version 14r2 release notes

Updated Task Management

Clicking on the image001 button in the Tasks area will open the view below:

The new Task functionality includes messages, reminders, and distribution lists.

image002

If a Reminder is set, a window like the one pictured to the right will appear at the selected date and time.

Highlight the Reminder and then select the Open Item button to view the Task that the reminder was created from.  Clicking on the Dismiss button will eliminate the Reminder and the box will close.  If there is more than one Reminder, clicking on Dismiss All will eliminate all of the Reminder items.

If you are unable to complete the Task at this time choose the time from the drop down menu and then click Snooze to have the Reminder come up again at a later time.

image003

A Message can be added to the Task so that anyone who is working on it can keep track of their progress and that of others.

Enter information into the open Message field and then click on the image004 button to add it to the Task.

image005

In the Task Distribution section the user can select Branches or Roles that should receive the Task item.  Click on the image001 button to open the form to the left.

Select the Branches and/or Roles that should be included in the distribution and then click on the Save button in the lower right.

image006

image007

The Task Manager has new filter options including: Category, Priority, Task Type, Branch, Completed Between, Security Role, and Show Unassigned.  Select information from the drop down menus or calendars to limit the Tasks that are displayed then click on the Find Tasks button to update your screen.

 

Consolidated Alert Notification

When a new Notification is added, instead of listing every Alert as its own individual pop up box they are now all consolidated into one box as shown below:

The Alerts will flash through and display all in the same box.  Click on the image008 button in the upper right to close this box.

image009

 

Employee Past Jobs Form

The Past Jobs form now includes calendars for From Date and To Date as well as a different view of the tabs at the top as shown below:

image010

 

Employee Education Form

The Education form now includes calendars for Date Started, Date Ended, and Degree Date as pictured.

image011

 

Adding Interest Codes

Adding Interest Codes has changed to the image012  button throughout the system.  Clicking on this button opens the form below where Interest Codes can be selected.

image013

 

New Order Email Functionality

From the Order Visifile two new Email functions have been added.  The first image014 button allows the user to send an Assignment Confirmation Email, the second opens the function to send the Employee a New Hire Package via Email.

image015

Once the first image014 button has been selected, choose the Email Template from the drop down menu.  Click in the box to select this template to Use for Customer Default.  Then click Next to continue.

image017

 

Select the Email recipients from the list by clicking on their name.

Then click the Finish button to close this wizard and open the outgoing Email.

image018

*Note – The Assignment Confirmation is sent to the Customer Contact(s) and the New Hire Package is sent to the Employee(s).  The templates for these Emails can be set up in the Email Template Manager form.

 

Once the second image014 button has been selected, choose the Email Template from the drop down menu.  Click in the box to select this template to Use for Customer Default.  Then click the Finish button to close this wizard and open the outgoing Email.

image020

*Note – Both of these Email functions can be completed from the Assignment Actions drop down menu as well.

 

Updated Calendar

The Calendar has an updated look that includes views for Day, Week, Month, and Timeline.  (The screen shot below displays the Month view).

image021

Double-clicking on the Calendar will bring up a form like the one to the left.

Enter the Subject, Location, set up a recurrence or select a Category.

This can then be exported by clicking on the Export to Outlook button or saved by clicking on Save & Close.

image022

 

Call-Em-All Integration

TempWorks has integrated with Call-Em-All automated calling service to allow your users to save time by sending the selected Employees from an Enterprise Search a recorded message via phone call or voicemail.  This automated calling service functionality requires that your company sets up an account with Call-Em-All.  Please contact TempWorks for more information and/or a demo on this functionality.

clip_image002

WebCenter 14.2.1 release notes

Additions from 14.2.0 to 14.2.1

Application

  • Navigation buttons can now be added to the top of the application.
  • Contact Messages are now created for some of the questions on the personal info page that are not displayed in Enterprise.

WebCenter

  • Updated Telerik controls to the latest version.
  • The "My Settings" and "Logout" buttons have been moved to the top of the pages.
  • The timecard approval page will now save which rows the user has expanded.
  • Email notifications that had been going out to servicereps are now alerts in Enterprise.
  • There is a new reapply washed status and role in webcenter for companies that need their employees to reapply to the application.

Bug Fixes from 14.2.0 to 14.2.1

Application

  • Fixed validation and default dates for date text boxes on the application.
  • Shift availability is now saved to the database.

WebCenter

  • Fix a bug with generating pdf files for W2's.
Fix a bug when viewing timecards by a particular contact id. It will now only pull timecards for the week that was selected on the calendar.

WebCenter 14.2.0 release notes

Additions from 12.8.1 to 14.2.0 (Version number now inline with database version)

WebCenter

  • Add new user config to enable and disable the order candidate reviews.
  • Change order candidate reviews to not show candidates with a ‘WCandidate’ status.

Bug Fixes from 12.8.1 to 14.2.0

Application

  • Updated the education, work experience and skills pages to work with the new 14r table schemas.

WebCenter

  • Updated some of the vendor procedures to work with the new 14r table schemas
  • Fixed some of the error messages to have the appropriate color.
  • Updated the label of the delete timecard button on the time entry page.
  • Updated our W2optin page to work with new tables.

WebCenter 12.8.1 release notes

Additions from 12.8.0 to 12.8.1

WebCenter

  • Added a new Order Request Workflow system for customers that need to have order requests approved by other contacts before the order can be filled.
  • New user configs have been added to work with the new order request workflows.
  • New notifications have been added to work with the new order request workflows.
  • Order request reviewer statuses and order request event history have been added to the Order Details page.
  • Added links to the task page on the customer Order Search and Timecard Dashboard pages to notify contacts if they have any pending reviews.
  • Added functionality to the Candidate Details page that will bring you right to the download manager if the employee only has one resume.

Bug Fixes from 12.8.0 to 12.8.1

Application

  • Fixed the work locations list box so it will not duplicate items in the list.
  • Fixed which notification gets sent out when an applicant is rejected.
  • Fixed a bug when gathering the last four digits of and SSN.
  • Fixed a bug when gathering the question id's of wrong answers on the questionnaire.

WebCenter

  • Fixed a JavaScript bug on the Payroll History page.
  • Fixed a bug in the timecard template config page that was causing the cost code to always show in the preview window once you have viewed a timecard template that had shown the cost code.

Bridging Java to .NET or how to lose several days of your life

I’ve been spending time for the past three weeks on and off trying to figure out how to use old Java code in one of our .NET projects. A goal for a couple of upcoming clients is to better facilitate the generation of tax and various government forms. With the many thousands of forms we need to support we didn’t want to design and maintain these forms in-house. For a solution we turned to our primary dead tree form provider Nelco.

Nelco provides a PDF form package but unfortunately the PDFs are not AcroForm compatible. You have to use their XML/PDF form merging software solution. More unfortunately their solution is a 10 year old Java package SDK with no source code. I have nothing against Java but here at TempWorks we settled on .NET many years ago and I am not a fan of mixing development platforms. For the past 9 years .NET has provided everything I need to get my job done. So here is my problem, how to get this Java package to work with our .NET code without any weird hacks and make it easy for future TempWorks .NET developers to maintain.

I spent a few days trying various packages without much luck. A few worked fine but they were expensive from a royalty perspective or were more cumbersome then just using Java and writing a web service for communication. Finally I came across an open source solution called IKVM.NET. The cool thing with this solution is you can use IKVM to convert compiled Java code (classes or jar files) and convert it to .NET compiled assemblies. After a few days trying to find the magic IKVM’s command line recipe and fighting with Java class paths, success!

Example Java code from Nelco’s SDK

// This code does the merging of an xml file and a pdf file.  The fields 
// are loaded from the Xml document by the FormBean "utility" into the 
// FormFields object named "inputFields".  The fields are merged into an 
// existing pdf file specified by the variable "pdfFile" by the PDFMerge 
// object named "pd".  The resulting pdf object with the merged xml fields 
// is the Pdf object named "pdf".  An new FileOutputStream is created 
// using the output pdf name and then the function writeToStream is called 
// to write the merged pdf document to disk.
public Pdf PdfFileMergeXmlFile(String xmlInputFile, String pdfFile) {
  // The following code just tweaks the necessary file names.
  xmlInputFile = xmlInputFile + ".xml";
  String pdfOutputFile = pdfFile + "_1_OUT.pdf";
  pdfFile = pdfFile + ".pdf";
  // Now create the necessary Pdf and FormFields objects.
  Pdf pdf = null;
  FormFields inputFields = null;
  // The following string and object are used to read the XML and
  // create a FormField object.
  String xmlbuf = null;
  FormBean utility = new FormBean();
  // for purposes of this example, default data is read from a file (xmlInputFile)
  // and merged with the PDF represented by pdfFile.
  try {
    // The following block of code reads the input data/fields from the XML
    // data file stored on disk.
    xmlbuf = utility.getXML(new File(xmlInputFile));
    utility.setInputFieldsXML(xmlbuf);
    inputFields = utility.getFormFieldsInput();
    System.out.println("- Loaded input data from: " + xmlInputFile);
    // We use the PDFMerge object to merge a FormFields object and a Pdf object.
    PDFMerge pd = new PDFMerge();
    // So, here we are making the call to do the merge.
    pdf = pd.merge(pdfFile, inputFields);
    System.out.println("- Data successfully merged with " + pdfFile);
    // Here we are writing the PDF file out to disk.  First, we get a new
    // FileOutputStream with the desired file name.  Next, we call the Pdf's
    // writeToStream method to write out the Pdf.
    FileOutputStream fos = new FileOutputStream(pdfOutputFile);    
    pdf.writeToStream(fos);
    System.out.println("- Wrote new PDF file " + pdfOutputFile + " successfully");
  } catch (Exception ex) {
    ex.printStackTrace();
  }
  return pdf;
}


The resulting .NET assembly generated by IKVM in Reflector.

image



My C# console application using the above Java example code.

using System;
using com.etymon.pj;
using com.nelco.form;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xmlInputFile = @"E:\Temp\Nelco\pdfdemo\79411.xml";
            string pdfFile = @"E:\Temp\Nelco\pdfdemo\79411.pdf";
            string pdfOutputFile = @"e:\temp\79411_OUT.pdf";
            var pdf = PdfFileMergeXmlFile(xmlInputFile, pdfFile, pdfOutputFile);
            Console.ReadLine();
        }
        private static Pdf PdfFileMergeXmlFile(String xmlInputFile, String pdfFile, String pdfOutputFile)
        {
            Pdf pdf = null;
            FormFields inputFields = null;
            string xmlbuf = null;
            FormBean utility = new FormBean();
            xmlbuf = utility.getXML(new java.io.File(xmlInputFile));
            utility.setInputFieldsXML(xmlbuf);
            inputFields = utility.getFormFieldsInput();
            Console.WriteLine("- Loaded input data from: " + xmlInputFile);
            PDFMerge pd = new PDFMerge();
            java.io.FileOutputStream fos = new java.io.FileOutputStream(pdfOutputFile);
            pd.merge(pdfFile, inputFields, fos);
            Console.WriteLine("- Wrote new PDF file = " + pdfOutputFile + " successfully");
            return pdf;
        }
    }
}


WOOT!

image



Kudos to the main guy behind IKVM.NET, you saved me a bunch of work.

Prototyping the next generation mobile web application

For many years TempWorks has been selling our TempWorks Mobile product. It has been very successful with people on the go who want quick access to their TempWorks data. The product has gone thru many versions but never has kept up with the capabilities of today’s mobile phone. With the arrival of the iPhone, HTC handsets, Android, and Palm Pre phones you can do so much more than ever before.

I’ve been wanting for almost a year to revamp TempWorks Mobile and update it for the newer phones. Unfortunately large blocks spare time for development is a luxury I don’t have very often. Although about a month ago I decided to move some of my projects around to start prototyping the next generation of Mobile. A couple of reasons I did this, first I wanted to get it done because honestly I am tired of looking at an user interface that is ancient compared to mobile web-app standards today and I wanted to get my hands dirty with technology I haven't used before.

During the lifetime of Mobile I noticed a lot of people liked to use it on their desktop for quick access. I think that is a great idea because sometimes you need a quick number or bit of info. The only downside to old Mobile is that it didn't adapt to its environment. You saw the exact same web pages on your desktop as you did on your mobile phone. What a waste of real estate. Then on flip side you add more features to use the real estate but then it is overwhelming on the mobile phone. With this dilemma as one of primary development points I went to work. I chose to use ASP.NET MVC because its basic architecture solves one of my primary development points and I haven't used it before.

ASP.NET MVC is based on the MVC (Model-View-Controller) paradigm that was popularized by Ruby on Rails. I took advantage of ASP.NET MVC’s ability to have more than one view for an URL or route. I modified the routing engine to inspect the incoming request and determine if it is a mobile device and what kind of device or a desktop browser and route the request to the appropriate view. Here is where the development time savings comes into play. Even though I have many views, they basically use the same back-end logic to feed data to the views. So for an example when you search for a contact I have written the contact search logic within my controller. I only have one controller for my mobile and desktop views so I only write the logic once and am able to support many different views.

Capture2 In this picture you can see that I have one ContactController and currently eight views using it for logic, four mobile views and four desktop views.

Now on to some glamour shots… Currently in my prototype I am focusing on mobile WebKit based mobile browsers currently used the iPhone, Android, and Palm Pre phones. I plan to create more mobile views for Blackberry and Windows Mobile 6.5 browsers and a fall-back mobile view that will be for everything else.

Capture4 Capture5 Capture6
iPhone Android Palm Pre

On the desktop I am developing for the three major browsers, IE 7 and later, Firefox, and Webkit (Safari and Chrome).

Capture1

For iPhone users you get the ability to use TempWorks Mobile as a full screen application and have the ability to launch from your home screen.

Capture7 Capture3
Mobile icon on the home page Notice no address or status bars

Overall I have been impressed with the technical ability of ASP.NET MVC. It does have one downfall for me; the introduction of spaghetti code back into your HTML pages. You old school ASP folks and PHP developers probably don't mind that but after using WebForms for almost 10 years it takes a bit of getting used to again. Although I will admit it's nice getting back to HTTP bare metal again and not dealing with WebForm's idiosyncrasies.