Unintended Consequences …

Last night while I was at my daughter’s basketball practice I finished up modifying the Events functionality to account for the new events groups which will allow events to be bundled into logical groups.  As I was testing everything and things seemed good to go, I realized that the Drag-and-Drop event re-ordering won’t work correctly.

The DnD re-ordering assumes there is only one set of events so as the events are rearranged they are renumbered from 1-N.  This isn’t a show stopper but I will have to come up with a new solution.  In the process of playing around with some ideas I have determined that the jQuery plugin I was using has been updated to support touch so I have folded that in and everything which was working still works.

I had hoped to get a new release out this week but that is unlikely to happen at this point.  I am not going to release anything until I have the event reordering fixed unless I get a serious bug report in which case I’ll simply disable Drag-and-Drop reordering until I get it working again.

Preview of Event Groups

This morning I finished up the first phase of Event Groups.  The Event Groups tab will appear on the Management Menu.  The next step is to up date the Event functionality to recognize the new Event Groups.  When I roll this out this update it will require a database update which means deactivating the plugin and re-activating it.

Event Groups

I’ve started on the Event Groups idea I posted about last week. The more I think about this, the more I like it.  In my case, I have three distinct sets of events I have to worry about:  Short Course Yards, Short Course Meters, and our local Invitational which is also Short Course Yards but is a different set of events from what our league normally swims.

By “grouping” a set of events with a label (e.g. Short Course Yards), it will be trivial to assign a set of events to a swim meet.  I have decided to hold off on events import until Events Groups are done so a set of events can be assigned to a group upon import.

Looking at Meet Entries

I have started looking at generating meet entries (SDIF) directly from wp-SwimTeam.  When you factor in events, strokes, registrations, scratches, and relays, the problem of generating meet entries becomes fairly complicated.  I’ve been sitting on the couch watching golf and perusing the SDIF specification and have a pretty good idea of what I want to do, now I just need to decide how to do it.  For the time being, I think I am going to focus on individual events as they are much easier generate than the relay events.  However, I don’t want code myself into a corner and make relay events hard to implement so I can’t decide what to do.  I also need to decide if I approach this from a roster perspective (ie by swimmer) or from the meet perspective (ie by event).  Hmmm …. decisions, decisions!

wp-SwimTeam v1.8.642 now available

Over the past week or so I’ve been working on some new functionality that is finally ready to go.  The opt-in/opt-out module has been based on strokes since the initial implementation and this model worked well for the MacDolphins but some other teams prefer to register (or scratch) swimmers on a per event basis.

Events have been supported for a while but other than adding them to a swim meet, nothing has been done with them.  The existing event functionality is the basis for the results work I hope to complete some day.  Because the Event information is already defined, allowing the Opt-In/Opt-Out module to be based on the actual events was pretty straight forward.  There is a new setting on the Options->Swim Team tab which controls which Opt-In/Opt-Out model wp-SwimTeam uses (Event or Stroke).  By default it will continue to use Stroke since that was the original functionality.

The new functionality had a ripple effect across much of the plugin, causing changes to the Reports module and other places too.  While working on the Reports I decided to expose the Job Assignments and Swimmers Reports for all users however non-admin users will only see their own job assignments or their own swimmers.  This new functionality also came from one of the MacDolphins parents who wanted to be able to see which jobs she had signed up for.  In the same conversation, another parent asked me if I could make it so she could see if she had scratched her swimmers.  These two requests led to exposing some of the Reports in a limited fashion to all users.

The last major feature is the ability to run a report that shows the parents of active swimmers and their status against the volunteer (jobs) commitment set by the team (set it to zero for no commitment).  This is a feature our volunteer coordinator has been after me to implement for some time.  While the Report works fine, it is a little slow, particularly the first time it is run so be patient.

The new version modifies the database tables so PLEASE BACKUP your database before you install it.  I don’t expect any issues and I’ve been running it on the MacDolphins site for the last two days but it is always a good idea to backup your database before upgrading.

There are a few other minor bug fixes and cosmetic changes that I made while working on these improvements.  I ran into one very odd bug that only exposed itself on Chrome – I’ve changed the Load All Events functionality because the Javascript that pulled all of the events from one list box to another didn’t work on Chrome.

There are still some things to improve – I’d like the list of events a swimmer can be registered for be limited to the events for their age group but don’t have good solution for that right now.  I am considering using icons across the action bar instead of the drop down menu.  I had moved away from buttons because they didn’t fit but the dropdown actions are confusing so don’t be surprised to see icons in the near future if I can find some I like!

The WordPress plugin repository has been updated so the plugin should begin to auto-update soon too but in the meantime, you can find the latest release on the download page.

New Opt-In/Opt-Out Event model running

I have completed all of changes to support the opt-in/opt-out event model I described late last week.  I have not released the update yet as I am still doing some testing.  I have it running on the wp-SwimTeam demo site.  You can see an example of what one of the reports would look like when swimmers are registered on an event basis instead of a stroke basis.

While working on this I found some problems with the Events module which I have also fixed.  One was a very odd case which only was exposed in Chrome as it worked fine under IE9 and FireFox 4.  It turned out to be some sort of a Javascript difference between browsers so I have changed the GUI for the Load Events form.

If you switch from the stroke based model to the event based model for opt-in/opt-out, you may see some empty or unknown events for existing records.  These are due to a non-existent event id in the record.  It doesn’t really hurt anything but does look odd on the report so I plan to look into it.

I am looking for someone to do some testing before I release an update, if you want to help, get in touch with me.

More thoughts on the Opt-In/Opt-Out changes

I’ve made a fair amount of progress today on the new Opt-In/Opt-Out Event model.  One of the big benefits of this model is it will facilitate being able to generate a Meet Entries file (SDIF) which could be consumed by Hy-tek Meet Manager or WinSwim.

The meet event information has been in wp-SwimTeam for quite some time but I’ve yet to do anything with it as other things, like the Jobs system, have taken priority.  Knowing which swimmers are registered for which event will make the generation of a Meet Entries file fairly straight forward to implement.

Changes coming for Opt-In/Opt-Out

I’ve had an ongoing dialog with a team in Texas using wp-SwimTeam that has a much different usage model for participating in Swim Meets than the MacDolphins do.  Instead of registering or scratching for a meet, their team has their swimmers register for particular events.  In speaking with a parent of one of our year round swimmers, they do the same type of thing for their year round meets.

Wp-SwimTeam doesn’t currently support this usage model but I can see the need to do so.  The system already allows the definition and assignment of events to a swim meet, it needs to be extended to allow swimmers to register to particular events instead of the global Opt-In/Opt-Out option which is currently available.

I don’t plan to eliminate the current usage model because it works well for our swim team but I plan to extend it by allowing what I am referring to as the Opt-In/Opt-Out usage model which will either be by Stroke (the existing model) or by Event (the new model).

Fortunately the data model I set up when I first implemented Opt-In/Opt-Out will handle this change fairly easily with one exception.  For some odd reason I called the field in the database which stores the stroke code ‘eventcode’.  This was a bad idea and I am going to change it to ‘strokecode’ in the next release of the plugin which will cause a bump in the database version.  This isn’t the first time I’ve changed a database column name so I am not too worried about it but I wanted to be up front about what I am doing and why.

In the current Opt-In/Opt-Out Stroke based usage model a user can start from a swim meet and update all of their swimmers on a per meet basis or they can start from a swimmer and update all of the meets on a per swimmer basis.  This will remain the case.

However, for the Event based usage model all action will have to be initiated from the swimmer, it will not be possible to update multiple swimmers for a single meet.  This change is due to the swimmers being in different age groups so the events have to be relevant to a swimmer which isn’t possible (or easy anyway, I guess anything is possible) for multiple swimmers.

What about swim ups?  I am not sure how I want to handle swim ups right now.  In the first implementation I will allow an Admin user to register a swimmer into any event but a parent/guardian (standard user) will only be allowed to register their swimmer for the events that correspond to the swimmer’s age group.

Feel free to comment on whether or not I have missed anything and I am looking for someone to validate the usage model once I have it up and running on the wp-SwimTeam Demo site.

Documenting the .hyv File Format

Before I spend a lot of time writing code to read Hy-tek files, I thought it would make sense to try and document them first.  I’ve started with the .hyv file format which describes the events that comprise a swim meet.  I’ve documented the fields I’ve been able to figure out in a Google Docs spreadsheet.  If you’re interested in helping me flush this out, let me know and I’ll provide the ability to update the file.

You can see what I have so far here.

Meet event loading is working!

This afternoon I was able to get event loading working for individual swim meets.  The system allows the definition of a standard set of events.  These events can be loaded into a swim meet to seed the swim meet and then tweaked for the needs of the specific meet (e.g. running the 6 & under groups early).

In the process I fixed a couple other broken things, the most important one being the controls on the GUI Data Lists widgets didn’t work on the ones which had a drop down menu.  Now that the events are loaded, I can start working on bringing the results of a swim meet back into the system

Before I do that, I will probably work on the volunteer system as that is something I need for our own swim team soon.