Roadmap – 16.08 (Release Intentions)

While there will also be many other issues and requests that we work on, below outlines the main areas that we hope to focus on for this release.


  • Our main objective for the August 2016 release is a big push forward with the Leads module. This part of the software is used for tracking sales leads and allows you to create a Project from the Lead information when it becomes useful to do so. There are many improvements scheduled, including:
    • Manually attach a Lead to a Project [7063]
    • Add Event Queue triggers to all key methods [1562]
    • Deliver improved UI [5214]
    • Complete ability to link Resources, Users and Contacts – allowing History to come from all aspects
    • Notification and alerts for issues relating to Leads (eg. No contact for n days etc) [6265]
    • Export to CSV from Leads search / dashboard [6779]
    • Improvements to Leads search / dashboard – filters / search capability changes [6836]
    • Add ability to use attachments via the API [7175]
    • Add win/loss information [6860]
    • Add % probability [6860]
    • Add option to ‘tag select’ stages so more than one option can be selected [6860]
    • Transfer all Lead information to the Project when it is created, including the Team list [5496]

Data Integrity

  • For the last few releases, we have been adding more and more locks into the system to ensure our data is as accurate as possible. While this has meant a few issues with not being able to revert Invoices, overall we now have a system in which the data is always in good shape for reporting purposes. We intend on continuing with this process and making sure that more loopholes are closed.

UTF Encoding

  • There are still some areas within the iCFM system where non-British letters and special characters are encoded incorrectly, resulting in unusual text appearing for no obvious reason. We are working through all areas to make sure that any value is permitted and that it loads and saves correctly.


16.05 – Despatch Service “Costs” Matrix

When you add a service to a despatch note, the “Cost to us” field was often left blank. This would cause issue with P&L reporting to the degree that we’ve made it a mandatory field.

When adding a service, you have the ability to enter a price it costs you as a company. There is a new matrix of what happens if you do not fill this value in

Virtual Cost
If the ratecard service is a virtual cost, you must enter a “Cost to us” value. Due to the nature of virtual costs, iCFM cannot estimate the figure for you. You cannot save the despatch note if you do not enter a cost manually.

Normal Ratecard
Normal ratecard items (i.e no virtual costs) can be filled in by yourself or left blank. If you enter a price yourself, that is the price that will be used. If you do not, then:

If you are using staff costs, then the staff cost for this item will be used.

(If you are using the 3 tier’ed system for staff costs, then the tier that is used will be the “defaultstafftieronquotes” field in the allocation table for the project type. Your iCFM administrator should be able to tell you this information)

If you are not using staff costs, or the staff cost is zero, then the ratecard price will be used.

16.05 – Release Notes


  • Billing:
    • In the Billing tab of the Project there is a method to show all “uncosted” Jobs. This displays a list of the Jobs that have not got to the billing stage. There is now a new button to “bring these jobs up-to-date” and this will effectively cost all the jobs in the past on this list. This will actualise the jobs (using the booked time) and cost them up for you. And finally change the Job status to Costed. Hold on. I’m not sure that by reading this you have really figured out what this means. It means that you no longer have to open each Job, click Re-Cost, and then change the Status to Costed. You can just open the Project and say “Hey – make all those Jobs in the past Costed”. Which is quite frankly, ground-breaking. You’re very welcome. [6770]
    • We have added a new button that allows for the creation of a single negative CREDIT interim row. This can be used to create partial credits for INTERIMS. This means that if you want to raise a credit note for an Interim – you can. You no longer have to reverse out the entire Invoice and create a new one. [6871]
  • Dashboard:
    • Added a new home page to the Dashboard for Producers. They now get to see a button to add new projects, a list of their currently active Projects, and any Jobs for their Projects in the prior or upcoming 7 days. [6500]
  • DMG:
    • Added a feature to import services from Quote sections into DMG Instructions – see ‘Import Quote Section’ menu option. This makes creating DMG jobs much simpler, where the services have been previously quoted for. Prior to this update, the quotes services would need to be manually added one-by-one to the job. [5521]
  • Projects:
    • Added ability to display, load and save custom fields, as per Quote screen. – Requires new settings.json setting – “custom_fields_project”. This is exactly the same in operation as the existing “custom_fields_quote” setting. [6637]
    • Added log of the date that project is first Confirmed. This may be useful for custom reporting, where the date projects are *first* Confirmed is important. Note that as Projects may be reverted, and re-Confirmed, there could be a big difference between the ‘first confirmed’ date and the ‘confirmed date’ (which is the latest). – See datedata table. datedata.sourceID = projectID, datedata.sourcetype = ‘project’, datedata.operationnotes = ‘Project first Confirmed’ [6428]
    • Added option for project #’s generated to mirror projectID. The projectID is a unique MySQL ID, so using this as the Project # will avoid the potential issue of duplicate identical Project #’s, which can be caused by database replication problems at multi-server installs.- Requires new settings.json setting – “project_number_generation_method”. Possible values = “allocation” (default) or “projectID” (enables new feature). [6711]
    • Added ‘Margins by Quote’ tab, which is essentially the same as ‘Margins’ with the added ability to filter by quote. [6004]
  • Milestones:
    • Adding a new Project will automatically add a Milestone for the full duration of the Project. Milestones allow you to see a schedule of bigger, longer term events within the software – by Producer. For more information click here. [6399]
  • Quotes:
    • Added the ability to create a team for a specific quote, via a new option in the quote menu. Team members added here will automatically be added to the Team tab on a Project. [3070]


  • Admin
    • Improved and redesigned the view editor to make it a little bit more user friendly [6828]
  • Artist iCal Subscription
    • Added the ability to hide ‘shifts’ from the subscription URL that artists use to see their jobs in a calendar. If you have no idea what this is – iCFM provides a method that allows Artists to view their CETA Jobs and holiday via an iCal subscription. They can set this up on their phones or other calendaring application. [6905]
  • Company and Contact
    • Added the ability to specify custom mandatory fields on the Contact page. If you need to make sure you get a Fax number for every contact – now you can do that. [5287]
  • Contacts
    • Revamped the resources and contacts link to make more of a connection. Resources that are people, i.e. artists, freelancers, etc are now related to a certain contact. This gives us more control over actioning what to do with resource styled events [5488]
  • Day Schedule
    • Added Equipment (resource category) items to output of days work scheduled by suite, along with People/Staff. [5536]
  • Despatch
    • We’ve improved the way costs are calculated on a despatch note. More info. [1806]
  • DMG
    • We deprecated a setting so that ALL lines on a DMG job will now be costed unless their QTY is zero. [6630]
    • When adding a new DMG line, it comes complete with blank INPUT and OUTPUT fields ready for user input (saving a couple of clicks each time!) [6888]
  • Jobs
    • It is no longer possible to apply actual times to a Job which has a start date later than the current date (only when using start and end time-based actuals). [3610]
  • Projects
    • Added the ability to set mandatory fields as “soft” – this means you will be warned that they should be filled in, but it won’t stop you saving it. [6024]
    • Added new column to the Margins and Bid vs Actual Project tabs to show the number of No Charged units. Requires new setting in order to appear. $SHOW_NO_CHARGED_UNITS_COLUMN_ON_SERVICE_MARGINS [5553]
    • Milestone dates will be updated whenever changes to a Project’s dates are made. [6399]
  • Purchase Orders
    • Added a date range for delivery date in the Purchase Order search. [5189]
    • Added a feature to allow the system to create a PO job immediately when a PO is saved. Historically a job was created at the point of the PO being authorised [5966]
  • Quotes
    • You can no longer confirm a Quote if it has ratecard items on it that are marked as HIDDEN [6697]
    • When setting a line item on a Bid to be non-discountable, the rate for that item is no longer reset to the ratecard value. [6250]
    • Added additional text for some risk assessment emails (eg. if custom fields are used on the bid page, we can now allow them to be included in the risk assessment subject) [6308]
    • You can now press the ENTER key on the quote discount box to apply a new quote discount, rather than use the mouse to click the icon [6250]
  • Ratecard
    • We have stopped users from being able to change the service code or the unit type of a ratecard item once its been used on a job or costing [6667]
    • We have stopped users from creating a duplicate service code, even if the other has been marked as DELETED. All service codes MUST be unique. [6693]
  • Reporting
    • Added columns showing production company and director (as well as M+ if relevant) to ‘Mels Report’ [6277]

Bug Fixes

  • Admin
    • Fixed the caption in Combo Box Options when adding new resource categories and sub-categories. [6422]
  • All
    • Fixed some issues created by a Firefox update that messed with the z-order of objects on the page, meaning items that should be at the front were displayed at the back – and vice-versa. [6466], [6425], [6331], [6741]
  • Billing
    • Fixed an issue where an accounts transaction opened from the Find menu item would not display correctly. [6539]
  • DMG
    • Fixed a bug which played the “new dmg job” alert sound when you first opened the DMG control – it no longer does this [6405]
  • General
    • Fixed and removed many PHP errors and warnings which were adding numerous entries to log files. [6406]
  • Invoicing
    • Fixed a loophole which meant a user could create an external invoice in a different depot to the project [6687]
  • Message Queue
    • Fixed a problem with the event queue which meant that Job ID might be inserted in to the notes field of the JSON packet. [5916]
  • Projects
    • Fixed a bug which meant the financial ribbon A (on the project screen) would show you costs rather than revenue [n/a]
    • Clicking the refresh button in Bid vs Actual would reload the full Margins page. This now refreshes correctly. [6398]
  • Purchase Orders
    • Purchase orders created in a non-project currency now always convert to the Project currency for reporting and billing purposes. This does not affect how the order prints or looks on screen. [6727]
    • Fixed a loophole that meant users could assign a PO to a jobID belonging to a completely different project [6753]
  • Quotes
    • Fixed a small cosmetic issue where the discount would appear to be incorrect after a quote discount was applied [6250]
  • Reporting
    • The drop down list of Our Contacts in Management Reports would sometimes not populate correctly. [6367]
    • Fixed a bug which stopped the Suite Utilisation report from being exported [6966]
  • Resources
    • Fixed issue where setting the tier on a staff resource would result in the staff cost rate being zeroed if the resource did not have a ratecard set. [6340]
  • Schedule
    • Fixed an issue where splitting a job would not pick up the latest rates for Staff Costs [6319]
    • Fixed an issue where splitting a job might not calculate the duration correctly. [6429]
    • Fixed a bug which meant you could change the booked hours of a job from within the job screen and no conflicts would be displayed [6710]


16.02 – Project Milestones

iCFM now contains the ability to schedule Project “Milestones”. Milestones are phases or tasks within a Project, and are assigned to a Producer.

Milestones create bars in the Schedule just like regular bookings, but they are not shown within the same space. They are kept out of the main Schedule and will only be visible when you open a View that contains the word “Milestones”.

Usually, this View would contain the Producers from a specific Depot – so you can see how busy each Producer is likely to be in that date range.

Milestones render on the Schedule page in stacks – so when a Producer has more than one Milestone happening at once, they will appear vertically stacked up.

This allows you to gauge how busy a Producer is by glancing at how many rows are used for a Producer at any one time.

Milestones do not have to be assigned to the same Producer as the main Project, and each Milestone can have its own information, including:

  • Producer Name
  • Type (Bidding, Production, Shoot, Approvals etc)
  • Title / Description
  • Start / End Date
  • Estimated Days Required
  • Percentage Complete
  • Status (New, Active, Complete, Cancelled etc)

This is still a work-in-progress, but it is already so useful right now that we thought we would release it early.

The next feature we will be adding to Milestones is the ability for Producers to log time against them – which can become billable to the Project if required.

16.02 – New tab layouts

The Project page was becoming overloaded with controls. The tabs across the middle of the page could scroll off to almost twice the width of a standard Macbook display, so we decided to do something about it.

As part of our UI overhaul, we have built a new system that allows us to build configurable tabs and menus from JSON text.


Example JSON code for the Project Tabs

In this release, we with have applied this to the Project page. Changes to other areas (Jobs, Dashboard etc) will come very soon.


The Project page Tabs

In an upcoming release, your CETA Administrator will be able to completely redefine what items show in the tabs, and will even be able to add links to their own content.

Until then, each tab has an ID – which means that if you want to hide any of them it is still easily done using the user.css file.

16.02 – Gekko Engine

Thanks to our new Gekko Engine – iCFM is about to get a whole lot faster!

In iCFM we monitor and report on all sorts of utilisation and financial data. There are many types of service to keep track of within the application, from Scheduled Resources and Purchase Orders to Delivery Notes, Food and Taxis. We need to keep track of it all, and we need to be able to report on it quickly. Sometimes this can be millions of rows of information and it changes by the second.

This reporting feature is called “Gekko” – named after the fictional trader, “Gordon Gekko” from the ‘Wall Street’ movies.

The way we have kept track of all this reporting information up until now, was that any time a user changed something in iCFM, we processed that change and updated all related values in the “Gekko” table in real-time.

The Gekko table records things such as:

  • Project Number
  • Producer / Client / Product
  • Service Code (ratecard)
  • Date
  • Booked / Actual / Billed Quantity
  • Booked Revenue / Cost
  • Actual Revenue / Cost
  • Billed Revenue / Cost

Having all this information in one table makes reporting much easier – but keeping it in sync takes some serious CPU. It often means the user experience is slowed down while waiting for background reporting data to rebuild. Something as simple as saving a Job, adding a Food cost or applying Actuals would always need to check what effects any changes would have on the entire Project.

Since revenue is usually fixed for a whole Project, no matter how many Jobs are booked – we would also need to recalculate how much revenue is allocated to every aspect of that Project – every time any change is made to anything, ever.

While we have never had any complaints about this part of the software being slow – it is the actually number one reason that anything in iCFM takes any time at all.

In this latest update we have moved all of the Gekko calculation code out to another program known as the Gekko Engine – which is always running behind the scenes. We have massively improved the efficiency of how this data is updated, and the number of read/writes to the database has been drastically reduced because of it.

This means that the user no longer has to wait for Gekko calculations to complete before they are returned to a usable system. Saving a Job now simply saves the Job and tells the Gekko Engine to rebuild the reporting data as soon as it can.

The result is fewer hourglasses, and a much faster user experience.

16.02 – Release Notes

Welcome to the release notes for the first 2016 release of iCFM!

There are quite a few new features, including lots that should really improve the responsiveness of the application – as well as some important new additions like “Milestones”. Please see the detailed notes below for more information. If you have any questions about a specific feature or change, please contact us and mention the number in square brackets after the comment.

New Features

  • Gekko:
    • We have moved the reporting engine out of iCFM and in to its own application. This means we no longer have to wait for reporting data to be built with each process – making the user experience a lot, lot faster! This affects almost every part of the software, so your users will definitely notice this one. Read more. [5729]
  • Milestones:
    • Added the ability to create Milestones against a Project. These are phases or tasks – with a Producer, Start and End times and Status that live within a single Project. This allows Producers to mock up a basic schedule of their plan for a Project. Read More. [6032]
    • Added the ability to view Milestones as a Schedule. A new view should be created that includes the word “Milestones” – which contains the Producers who will have Milestones assigned to them. [6032]
  • Projects:
    • Rebuilt the Project tab system – using a new format that will eventually allow our customers to build their own menu systems. Read More. [6271]
    • Added an iCal subscription URL for Producers to see their Projects by start / end dates in the calendar app of their choice. [5903]
  • Contacts:
    • Added a script that can run through the iCFM data and clear up and merge duplicate contacts. [5953]
  • Leads:
    • The Leads information page has changed. It now has more information available to the user without having to open additional tabs. You can now see the history of any Contact you select, and the Comments are much more dynamic. [5214]
    • It is now possible to add custom lists and data to a Lead. Ask us for more information. [5214]
    • Added the ability to insert Budgets and Regions. [5552]
  • Media / Shipping:
    • Added a new feature where the scheduled Artist / Operator can be automatically set as the Allocated To person on a DMG Job. [5970]
    • Added the ability to add a custom tab with custom fields / controls to the Library page. [6241]
  • Products:
    • Added the ability to add a custom tab to the Product page, on to which you can add custom form fields and tables. [5519]
  • Quotes:
    • When saving a quote, if the Project it is attached to has been awarded a new Project Number, the Quote will refresh with the new Project Number. [5786]
    • Added the ability to specify a custom Risk Assessment pop-up – which can be shown before a user is allowed to Confirm a Quote. Please note: This requires some development if you wish to make use of this. [4898]


  • Companies and Contacts:
    • Changes to a Company name will now propagate to linked records. [6080]
    • Added Email Address and Job Title back on to the Contact list. [6133]
  • Leads:
    • Project Type is now a mandatory field. [5522]
    • Check-box selections in Leads Search are remembered for each user. [5522]
    • Added ability to create a new Lead from within the Company page. A new menu item is now available. [5998]
  • Quotes:
    • Changed the way that quote detail lines are redrawn after an edit or insert. We no longer refresh the entire page every time which results in a much faster editing experience. This also fixes an issue where the quote might ‘jump’ in the scroll bar after an edit. [6124]
  • Billing:
    • Changed the way that allocation works so as to prevent any changes to Invoices or prepared/exported Accounts Transactions what-so-ever. [6127]
    • It is no longer possible to revert the status of a Costed Job if there are billing lines allocated to an Invoice. [6196]
  • Holidays and Shifts:
    • Added back in the created date and user – to the list of existing holiday and shift records. [5838]
    • Clicking on a Holiday or Shift in the Schedule now automatically Checks the appropriate item in the list when the holiday page pops up. [5895]
    • Changing the description of a Holiday in the Combo Box Options page will now propagate changes to existing holiday records. [5961]
  • Projects:
    • When returning to the Project page, we now do a quick check to make sure that the Project number has not changed and update it if it has. [5741]
    • Added a column for “No Charged Units” to the Margins and Bid vs Actual pages on a Project. Note. Requires enabling by CETA if you wish to use this. [5553]
  • Ratecard:
    • It is no longer possible to add a ratecard service that contains an apostrophe. Many methods of exporting / importing ratecard data to other systems complained about it, so we have simply removed the ability to include them. [5686]
    • The ratecard editor now allows you to edit almost all fields without using the pop-up. You can edit all descriptions, GL codes, prices and costs in-line. This should make updating your rates a much smaller task. [4647]
  • Reporting:
    • Improved the SQL queries on the “Todays Jobs” pages – so that they require fewer system resources.
    • The “Bad Boys” list now shows all Producers, no matter how the /Producer code was added to their resource’s categorycode. [6164]
  • Resource List:
    • The boxes for Department, Category, Subcategory and Subcategory 2 are now drop-down boxes to help keep data tidy. Free-typing is no longer allowed. [5951] [5990]
  • Schedule:
    • Using the Lasso to edit the Project / Product will now always display an error message if it fails. Previously it would sometimes fail with no obvious reason as to why. [5973]
    • Cancelling rows from within the Copy To Another Date tool would previously open the cancelled Job. This seemed pointless and annoying so we no longer do it. [6166]
  • Security:
    • When attempting to reset your iCFM password, you will now be emailed and prompted to reset it from a link within that email. Previously it was possible for a malicious user to reset someone else’s password to something random if they knew their email. The malicious user would not be able to see or use the new password, as it would still only be emailed to the real users address – but it could still be annoying for the real user to then have to reset things. [5540]
    • Adding a user now forces a strong password, if not using Active Directory. [6210]
  • System:
    • Changed the way that the “Find” tool works in the main menu. Now all find methods work in the same way. If the resulting item can not be found, you will be told about it via an alert – rather than a blank page opening. [5829]

Bug Fixes

  • Leads
    • Fixed an issue that would sometimes hide the list of Leads on the Dashboard if the status of one was changed from within that table. [6007]
  • Quotes:
    • The modified date in the header no longer defaults to UTC. [4820]
    • Fixed an issue where the “Extras %” might be calculated incorrectly in the Quote header. [5840]
    • When applying markup to a Bid, it would refresh the whole page and forget the “Summarise” checkbox’s value. This is no longer the case. [5930]
    • Fixed problem where text colour of Bid section comments would be white on a white background – and hence not visible. [6063]
  • Reporting:
    • Gekko Trend data now only includes revenue from Confirmed Quotes. Previously it was also including revenue from New Quotes. [5155]
    • Fixed a problem in the “Quotes By Created Date” report which was actually searching by the quote’s end-date which meant unexpected results. [5392]
    • Fixed issue with some custom reports that might make holiday appear incorrectly. We now check the $HOLIDAY_HOURS_IN_DAY setting to make sure we calculate things correctly. [5730]
    • Fixed an issue with Gekko where rows may not have been correctly deleted when their source record was updated. This made reporting incorrect until Gekko data was rebuilt manually. [5807]
    • Added a check to prevent Gekko data being created twice for no good reason, which was taking up extra CPU cycles. [5807]
    • Fixed an issue where the “Absense Report” was using the artist’s name, rather than ID. This meant there could be confusion when there were two more more artists with identical names as information from both would be shown. [5839]
    • Fixed issue that would incorrectly convert the value of items added to the Media tab of a Job. We now assume that the currency of any item is that of the Media item’s Depot. [5579]
  • Media:
    • Fixed some problems with the page load – which was stopping QAR from loading correctly.
  • DMG Control:
    • Fixed issue in the Job List that would cause a never-ending ‘Please wait…’ message to appear. [5904]
  • Jobs:
    • Fixed an issue where the Job’s tab would not refresh when returning to the Job from another page. [5854]
    • Fixed an issue with the Actual Times tab which would prevent artist / editor names displaying crrectly if they contained an apostrophe. [5870]
    • Fixed another issue in Actual Times where the ‘Set to current time’ button would not work if the time was less than 10 minutes past the hour. [5870]
  • Products:
    • Fixed an issue that prevented the table formatting from loading correctly, on the list of Projects associated with a Product – on the Product page. [5921]
  • Schedule:
    • You can no longer apply changes from the Lasso unless there are actually some selected Jobs. [5732]
    • Stretching and sliding a Job would sometimes not update the Modified By user. Now it does. [5796]
    • If a Resource was set up to use the Include Resources feature, it would sometimes not include them correctly. Now they are always booked and always in the correct sequence. [5161]
    • Fixed an issue where Gekko data was unnecessarily rebuilt for Jobs, even if the Job did not change – when using the Lasso tool.
    • Splitting off the first day of a scheduled Job would sometimes reset the prices to ratecard. Now the rates are retained from the original Job. [5853]
    • Reinstated the tooltip that used to appear when you hovered over a Shift in the schedule. [5863]
    • Fixed a problem with the “Split Job in to Weeks” feature which would sometimes add an unwanted additional day for the first Friday in the date range. [5896]
    • Fixed problem that caused no Jobs to appear if the Dynamic Search was used on the schedule and a Product name containing an apostrophe was included in the search. [5892]
    • Resolved an issue where if the user was viewing two months or more, it would sometimes prevent them from sliding a Job to the first day visible. [5401]
    • Fixed an issue which would sometimes create two bookings for the first date when using the Copy To Another Date (repeat) booking tool. [6166]
  • Ratecard:
    • Fixed an issue where the staff cost fields would not load/save correctly for some ratecard columns. [5872]
  • Billing:
    • Fixed an issue where a reversal might have VAT added to it, even if it was created for a location that did not use VAT. [5762]
    • Fixed a bug in the “Uncosted” items list – which was sometimes incorrectly reporting the number of items outstanding. [5818]
    • Fixed an issue where the “Runner Fee” might not be added to Misc Costs, even if it had been configured to do so. [5840]
    • Found and fixed a problem that would prevent a Job with more than one DMG service from advancing to Costed status. [5884]
  • Purchase Orders:
    • Fixed an issue which would sometimes prevent a user from cancelling a Purchase Order. [6038]
  • System:
    • We now trim any white-space from the start and end of all entries being saved. This should result in fewer issues with company and contact names mis-matching due to invisible characters. [5914]
    • Changed all display pages to encode in UTF-8 in preparation for full compliance with foreign characters. [4673]
    • Changed all calls to our database to prefer UTF-8 encoding. [4673]
    • Fixed lots of PHP warnings as part of a concerted clean up. We will be doing much more of this in an effort to keep the log sizes down on your servers. [6042]