Tincher Concrete Construction, Inc. is a family owned business, in operation since 1979. Their primary trade is slipform paving, but they aren't limited to just that. They also do sidewalks, floors, retaining wall systems, concrete repair and restoration, as well as pavers.
Tincher has been a client of ours for 22 years. When we first hooked up with them in 1992, they were using CYMA accounting software. They had 6-7 people punching on keyboards trying to collect and report on job cost information. This information was typically 7-10 days after the fact. Using BusinessWorks Accounting software, coupled with custom software written in Superbase, we cut that time down to realtime with one person.
My how times have changed, but one thing certainly has not. Personal service and dedication on our part keep Tincher Concrete in the family. Migrating to the cloud will be the 5th generation of software put in place during this 22 year relationship.
2/18/2014
Today was the initial planning day with Austin. He is one of the 3rd generation sons now responsible for overseeing this project. In this meeting we discussed to overall workflow within the business, the project documentation plan and other technical details. We reviewed their commercial estimating program PlanSwift and reviewed and copied their estimating Excel spreadsheets.
2/18/2014
Setup project storage and scan initial documents. Documents are to be kept in a project binder and images of documents will be used in the project flowchart. The first pass of the flowchart is to be a modified version of a UML document altered to support the functionality of Rollbase.
2/19/2014 - 3/12/2014
This is the most important and time consuming portion of the project. During this period, we would meet with the client and review the current draft of the workflow document. Each week we would print out the updated document on a large-format printer and then review and continue to document on a rather large conference table. In all, there were 6 generations of this document. The final document is 19 feet long!
3/13/2014
Continue working with Austin on the flowchart. Today we wrapped up the documentation of all daily activities, including outlining collections department tasks along with the related objects required. Finalize documenting all accounting tasks and objects.
3/14/2014
Now that the entire workflow is document, it is time to loop back to the beginning and flesh out all of the objects. In this pass it becomes apparent that some objects are unnecessary. While to final document will still be a work in progress, it's very close to completion.
3/18/2014
Finalize building out all objects in preparation for a final review. We are very close to actually writing software now!
3/20/2014
As our flow chart is now 19 feet long, printing it has become more difficult. Even though Corel Draw is an exceptional program, we cannot print from it directly to the large format HP printer. It's now a 2 step process in which we export the entire file to a PNG file and then convert the PNG file to a PDF. Adobe Acrobat then allows us to print to the plotter and specify the custom paper size.
3/21/2014
The final draft of the flow chart was printed successfully today and reviewed with management. It is now time to start building software in Rollbase. We will be building all objects and screens associated with opportunities and proposals. Once we get those done, we will spend some time in PlanSwift to prepare for integration between it and Rollbase.
3/24/2014
Before we start building objects, we want to create a System Tab within Rollbase. We will use this location later to store lesser used objects. Start building objects, starting with Company object. As Rollbase allows multiple applications to reside together, and oftentimes there can be conflicting names, we are going to establish a naming prefix (cc) for Concrete Contracting to all of our tables. Thus Company will be ccCompany. Also created the basic roles that will be in use in the system.
3/26/2014
Finish building the Company Object and updating all New/Edit/View screens.
3/27/2014
Build the Customer Object and document how to use shared picklists in Rollbase.
3/28/2014
Finished the New/View/Edit screens for Customers and introduced the HTML Component that can be used on screen designs to help better organize sections. This allowed us to overcome the issue with physical and billing addresses both having identical lables (address 1, city, ...)
3/31/2014
Create contact object, including relationship to Customers. Edit the customer screens to reflect the new relationship. This section covers View screens getting the new relationship automatically, but also how to edit that list. Additionally, this section covers adding a Grid Control to the Edit screen so that we may add contacts from there as well. Also create Customer Contact Phone and learn new functionality of Record Name Template.
4/1/2014
Start working on opportunity object. We will be exploring alternate row colors with this object to reflect the approaching due date of each item. Along this same thought process, we will also explore how to use icons to reflect priority. Additionally, we will be exploring both the Task and Workflow attributes for the first time. Additionally, we will be exploring document templates, as well as triggers with this first complex object. Now that we have migrated the Rollbase concept of "User" to our Project Manager, we will also want to clone the default view to filter it by Project Manager.
4/2/2014
Build the Opportunity Document object and integrate it into the Opportunity New/Edit/View screens.
4/2/2014
Our first use for Javascript enhancements. While the red and yellow banding on the opportunity grids is useful, it is desireable to also have the days remaining until it is due. This is done with a formula field.
4/2/2014
Before we can wrap up the last workflow for an opportunity (converting it into a proposal), we need to actually build the proposal proposal document objects, as they are the ones that will get populated.
4/3/2014
Today we start building a trigger tied to a button to convert an opportunity into a proposal. Even though Rollbase has a concept of conversion maps that can be tied to a workflow action, our trigger is a bit more robust, as we need to move over all associated documents as well.
4/4/2014
Before we can continue working on the trigger from yesterday, we need to create the new Proposal Document object, as we'll be moving documents from the opportunity to the proposal. See the instructions for the Opportunity Document, as the table structure should be the same.
4/14/2014
Continue working on triggers to convert opportunities into proposals. This introduces another technique for debugging triggers using the "Test Query" button.
4/15/2014
Did an about face today on the way in which to tackle the opportunity to proposal conversion. It turns out, even though the triggers all worked perfectly, it created the proposal, attached the documents and deleted the opportunity. Additionally, I consolidated opportunity and proposal documents into one project document object. No need to clone these, as they'll stay with the objects through the entire life cycle. It is anticipated that job documents will be the same. The bottom line on the challenge was that I couldn't properly navigate to the New Proposal screen once everything was created. By utilizing the Data Map option within Rollbase, combined with triggers on the Proposal Object, we are able to accomplish our goals.
4/15/2014
Create trigger in Proposal to grab the oppourtunity documents, and document how. Create the Proposal Task Object
4/16/2014
Start the layout of the proposal new/edit/view screens. Discuss alternate customers and how that works with relationships. I also added the Workflow attribute to the proposal, as it will exhibit similar behaviors as the original opportunity.
4/16/2014
Auto-create the default tasks when an opportunity gets converted into a proposal.
4/16/2014
Create Proposal Email Template and trigger to auto-send email when the opportunity gets converted to a proposal.
4/24/2014 - 4/25/2014
Implement common phrases for proposal notes. Explore using custom buttons and triggers to automatically insert phrase snippets into the notes.
5/1/2014
Demonstrate how to integrate data from an external application into Rollbase utilizing file upload fields, exported CSV data, and triggers.
5/5/2014
Sending email templates to multiple customers using document templates and triggers. The document template discusses in depth how to loop through multiple related tables.
5/8/2014
The buttons we created on 4/24/2014 just weren't working in a consistent fashion. As such, we took a completely different approach by creating relationships to the desired phrases. This tutorial focuses on creating relationships with triggers.
5/18/2014
The rest of the custom buttons created in previous lessons are now gone. All functionality is now done through workflow automation. The attached document goes in depth on how to use this powerful Rollbase feature.
5/29/2014
How to get around the limitation that calculated fields cannot be used in a field mapping.
6/4/2014
When you want to control whether a checkbox is checked or not purely in code, how do you accomplish this when Rollbase does not provide the functionality to make a checkbox read only?
6/9/2014
Using Microsoft Excel for document templates is actually much easier than it is in Word. The layout is much easier to manage. The linked file is an example of how to use one with looped records.
6/9/2014
Started building the Timesheet object. Needed to create an Employee object, which was done via an Excel import from the legacy system. Still need to create the other supporting objects for timesheets; labor, miscellaneous, revenue, and concrete.
6/13/2014
Met with the stakeholders for a progress review. Project is looking good. Need to get the hosting solution for the private cloud nailed down soon.
6/17/2014
Client wanted total project days (days allowed) to be a calculated field, rather than a static field. Calculated fields are simple, and the formula is only two lines:
var daysAllowed = rbv_api.selectValue("SELECT sum(ccProposalLineItemsDays_allowed) as daysAllowed FROM ccProposal_line_item where R100808469 = ?", {!id});
return daysAllowed;
Unfortunately, you cannot reference calculated fields on a document template. As such, the spreadsheet from above has been modified slightly to account for this. Replacing a merge token with a sum function on a column.
6/17/2014
In the meeting with stakeholders, it was discovered that the code for updating the job's required paperwork did not take into account the possibility that a qualifying document was attached at the proposal level. Additionally, if a document gets deleted, it needs to update the check box appropriately. This simply required a trigger "Update Job from attached documents" to be fired on create and on update. The attached image shows a screen shot of the code.
6/19/2014
During data entry of a new record, how to you get values from another record using client-side scripting?
6/19/2014
Today I wrote trigger code for the Create Timesheet action on a job to count the number of sheets. If the count is 0, then we want to update a few fields on the job, mainly the Date Started and the Date Last Worked. Additionally, we fire a change workflow status to make the job active.
6/23/2014 - 6/24/2014
I am currently building out the job supervisor portal. Portals are a great way to expose only the basic functionality that you want to non-traditional Rollbase users. Portal users do not eat into your registered user count. Once I get the portal fully functional, I'll do a document on how to build portals. Created a login prompt to validate the supervisor, created a view for only their assigned timesheets, and then needed to create edit/view pages for all 4 categories; Labor, Revenue, Miscellaneous and Concrete.
6/25/2014
Now that we are doing the timesheets, which need to inherit the profit and overhead rates from the job, we needed to update the job on creation to grab the default rates from the company table. These rates can be overriden at the job level with the correct permissions. I just created a trigger to fire when the job gets created. See the attached image for the code and the explanation. Technically, we don't need the profit rate, but it is at least informational on how the pricing was arrived upon. We do need the overhead rate to go to the timesheet for expression fields, but not the profit, as that's simply a calculation at this point.
6/26/2014
Things are starting to get fun, and usefull. One of the screens that I imagined for Tincher is a budget analysis screen. This is a tab that aggregates all items to be installed and is presented as a script component, so we can get a little fancier with the presentation. At this point, the screen is incomplete, as it will be expanded to include A/R and A/P billing analysis on a job by job basis.
Accomplishing this is pretty straight forward. It is simply a combination if calculation fields that sum up the individual items, and then a script element with the HTML formatting to control the presentation. We are basically summing up individual timesheet detail records based on their type. The sum calculation for costs is the most complex, so I have posted a link to that formula here. Once all of your formula fields are created, you simply put the merge tokens in the proper places in the script element.
I have almost wrapped up the job supervisor portal, but on of the exceptional features that we have just added, which lends itself to the mobile world very well, is photo and file upload fields. On our revenue, miscellaneous and concrete items, we want the supervisor to take photos of receipts, delivery tickets, and job site photos for the current product they are working on. While maintaining this from the portal, on a mobile device, when you click the button to select the file upload, the mobile device allows you to take a picture directly into the file upload field! Very cool. We use this vs. images, because I only want to see the link in a grid view, not the entire picture. See the attached screenshot for awesomness.
7/8/2014
For the last week or so I've been in the process of bringing up my own private cloud out of my office. I've installed the trial version (30 days) and was attempting to migrate my concrete application from my public cloud account with Progress to my private cloud. In doing so, I've encountered an error trying to export my application to an XML. I've seen this issue MANY times since I've been working with Rollbase and I finally figured out why it happens. Please review the attached document on how to overcome this issue. My own private cloud should be live in the next week. I can't wait!