Monolith 99% complete.

Good lord! That order screen was a giant pain in my ass.

Basically, the first revision that I actually showed to my parents and brother has a lot of pop-ups, which while tedious, allowed for a great deal of both control and simplicity. My dad hated the pop-ups, my brother did not seem to register that I was showing him software he might eventually be stuck using.

Anyway, my dad's comment (or at least the one that stuck with me) was that the order entry screen should be a giant single screen and look a hell of a lot like the form he currently enters data into. I don't actually have that form... but I get the idea. For the most part, he would prefer auto-completion and the ability to stay inside a single form. I had to depart from the single form approach for 2 things only. A fact I'm very proud of there. In fact as long as the customer exists and everything is either a service an in stock item, he should never need to leave the one screen.


So here is the monolith...



The very first field is the order number. When you open the control, it will grab the next one from the database. It can be overridden manually if desired.

Next is the customer field. Type in a portion of a customer name and press enter and drop down will populate with options. Should the customer not yet exist, the + button beside it will open a small window (1 of the 2) that will allow you to enter customer information on the fly and then insert it back into the form when done.

After that is the field for the Vehicle. If the customer has been in before, after the customer is selected the combo box will populate with all of the existing cars associated with that customer which can be selected to fill the remainder of the header fields with the exception of the Exemption number. If the customer has no vehicles associated, or this is a different one, there is a blank option that will allow the user to add a new one inline in the form.

All of the remaining header fields are related to the vehicle the work order pertains to except the Exemption Number. If the customer has a native status card the number can be entered here. At the moment I'm not tracking that with the customer data (probably OK that they should demand it every time, but I may eventually track it with the customer and automate it later). If the exemption number is populated it will omit the correct amount of tax from the order cost.

Next is the order lines. The very first field is part of that remaining 1%. You need to click once to activate the grid, once to activate the cell and then again to activate the auto complete box. Utterly irritating. Anyway, once in, typing part of a product or service code will generating a drop down list of the first 10 possible options in each category matching the criteria entered so far. Selecting one from the drop down will automatically populate all of the rest of the fields, though they can be manually overridden as well. It only pulls products in inventory that is in a "Stock Location" and shows how much inventory is available and where.

If the entry is a product and it isn't in inventory or doesn't exist the second of my 2 pop-ups rears its head. A screen for a special order pops up. Basically a light weight version of the Purchase order. It is a single record in the database tied to the order line and permits receipts and payments to be tracked manually, or if not processed when the order is closed, it will be updated at that point automatically, though not done that yet. If the product already exists, any information possible is automatically populated into the Special order screen, things like Vendor and Vendor PO# always need to be manually keyed in. If it is a new product, most details can be filled in from this form and a new Product record is created in the database.

Next, when a line is selected in the grid a child grid appears containing the notes for the order line. This can be edited inline and can contain as many notes as desired.

Then, just above my buttons is a quick little summary screen. This is the other item left untended to. At the moment, the totals don't update on their own. There is a recalculate button that will trigger the event. I would like to fire it off some of the more common events (loading an existing order, changing cost on a line, changing quantity on a line, etc...) so that manually requesting a recalculation should be a rare requirement. But key thing is that at the moment, it works.

Then there are 3 buttons at the bottom. Functionality of the recalculate button in the middle has already been discussed, leaving the save and cancel buttons. The save button commits the order to the database (create or update depending on new or existing order) and then clears the form and requests a new order number for starting again. The cancel button clears the form and grabs the next order number. Screen can be closed from the X at the top. This allows my brother to stay in the screen he will probably use most according to my father.

I can create Customers, Vehicles, Special Orders, Products, Work Orders, Work Order Lines, and Work Order Notes all from this one "main" screen. In addition to those I read from the Vendor table, service table and product type table for certain drop downs and auto complete boxes. So 7 tables it can create and update entities in and 10 in total that are read from. This was both aggravating and fun. The QA is the part I don't look forward too.

So, yes, I have done other things, but this one contained so much than everything else put together it gets its own post. In fact the others are barely worth mentioning by comparison. I probably added 2-3 more management grids and table on main application window which accesses recently altered records. Maybe the history grid will get a place in the spotlight in the next post. Right now it is just an ugly data grid in the middle of the screen awaiting the final touches, but it too works.

Comments

Popular Posts