1.0.0 (In development)
Platform
- Builds on .NET 10 with the latest previews of Orchard Core 4.0, CrestApps Orchard Core 3.0 and CrestApps Core 2.0.
- The repository uses the same layout, build rules, asset pipeline and documentation site as CrestApps Orchard Core.
Features
- Estimator (
CrestApps.OrchardCore.Estimator): the base feature of CrestApps Estimator. - Estimator setup recipe: sets up a new site with the admin dashboard, error pages and the Estimator feature.
Projects and bids
- Projects (Estimator > Projects): a record of each job you bid on, with its number, client, site address, time zone, market sector, construction type, building area, estimate lead and team. The list has search, a status filter and the List and Grid layouts. Project numbers are unique and default to the next number of the year.
- Bids: one bid per general contractor or owner on a project, with its contact, bid type, due time in the project's time zone, status, bid decision, bond and prevailing-wage flags, and result (our bid, winning bid and rank). Status changes follow fixed rules, and a submitted or decided bid needs its due time and amount.
- Bid/no-bid checklist: ten weighted points rated from 1 to 5 on each bid, with a score from 0 to 100 that updates while you rate, and a recommendation (bid, review or do not bid). The bid rows show the score.
- New Bid wizard (Estimator > New bid): adds a project, its first bid and the bid/no-bid checklist in three steps, on the CrestApps Wizard engine. The wizard keeps its steps, so you can stop and come back later.
- Bid calendar (Estimator > Bid calendar): the bids still being prepared, the next one due first, with due-soon and overdue marks. Past-due bids stay for 30 days.
- Permissions: View all projects and bids, Manage own projects and bids (for the projects a user leads or is on the team of) and Manage all projects and bids.
Documents
- Documents (project page > Documents): the bid package of a project in a private file store: drawings, specifications, addenda, bid forms, quotes, spreadsheets and other files, with a type, a title and the date received. Files are uploaded in chunks and an interrupted upload resumes; the same file cannot be added twice; files go through the file event handlers (such as antivirus) before they are kept.
- Sheets (project page > Sheets): drawing sets and addenda in PDF are split into sheets in the background, one per page, with the sheet number, title, discipline, scale and revision suggested from the title block. The sheet index shows which sheets a later addendum replaced, and filters on current sheets and on a document.
- Addenda: numbered per project; an addendum sheet replaces the earlier sheet with the same number.
- Drawing library: the title block reader also returns the scale note as the sheet prints it.
- Drawing library: the title block reader reads titles on several lines and does not take the project name for the title. It reads a scale written under the view titles without the word SCALE, and the revision from the latest dated row of the revision table.
- Split again keeps the sheet of each page, so its takeoff stays.
Takeoff
- Estimator Takeoff (
CrestApps.OrchardCore.Estimator.Takeoff): a new feature, turned on by the Estimator recipe. - Takeoff viewer (sheet row > Takeoff, or project page > Open the viewer): shows a sheet with PDF.js, with zoom, pan, next and previous sheet, and keyboard keys. The Count, Length (with drops) and Area tools add marks, with undo and delete.
- Scale calibration: two points and a real length set the scale of a sheet. A calibrated scale wins over the printed scale; a sheet with no scale or not to scale measures nothing until it is calibrated.
- Sheet location: each sheet has a location, such as Level 2, that breaks the quantities down.
- Takeoff items (project page > Takeoff items): the things taken off, with a kind, a color and notes, and the total of each over every sheet and per location, in EA, LF or SF.
- Deleting a sheet or a project deletes its takeoff.
Catalog and pricing
- Estimator Catalog (
CrestApps.OrchardCore.Estimator.Catalog): a new feature, turned on by the Estimator recipe with Data Pipelines and Media. - Catalog (Estimator > Catalog): the items you estimate with: number, description, unit, price basis (E, C or M), category, kind, manufacturer, catalog number, UPC, MasterFormat section, package size, waste, status and replacement. Search by number, description, manufacturer or catalog number; filter on category and status; List and Grid layouts.
- Labor units: hours in three columns (normal, difficult, very difficult) with their basis and labor category, per labor table.
- Prices (catalog row > Prices): an append-only price history with effective days and sources (manual, price file, vendor, quote). The price in effect today shows in the catalog.
- Price file import: the Save catalog items Data Pipelines step adds and updates items, prices and labor units from CSV or Excel rows. It matches common column names automatically, and the pipeline keeps the mapping.
- Price updates (Estimator > Price updates): each import with its counts and refused rows, and a report that compares its prices with the prices they replaced, the largest increases or decreases first.
- Assemblies (Estimator > Assemblies): reusable bills of items with parameters, quantity formulas and conditions in the Orchard Core expression language, nested assemblies, variants, component waste, and either the labor of the components or the assembly's own labor unit. Saving checks the formulas, the items and nested assemblies, and refuses a change that would make assemblies contain each other; an assembly another one uses cannot be deleted. Each save makes a new version.
- Assembly test panel: calculates an assembly for a quantity, a variant and parameter values, in a labor column and at a labor rate, with each item's installed and purchase quantity, material at today's price and labor hours.
- Recipes: the
EstimatorCatalogandEstimatorAssembliesrecipe steps, and the Estimator sample catalog recipe with 30 fictional electrical items and 5 assemblies. - Permissions: View the catalog and prices, Manage catalog items, Manage prices and price files, Manage labor units and Manage assemblies.
- The item, assembly and rate table editors group their fields in cards, such as Item, Purchasing, Labor and Components.
Labor
- Labor rates (Estimator > Labor rates): rate tables with the wage of each classification, burdens of every classification as a percentage of the wage or an amount per hour, workers' compensation and fringe per classification, the overtime multiplier, a default table and prevailing-wage tables. Each classification shows its loaded rate.
- Crews (Estimator > Crews): crew mixes with their composite rate in each rate table.
- Labor factors (Estimator > Labor factors): the factor library; its questions and choices drive the job conditions wizard. Factors apply to the whole estimate, a breakdown or a labor category.
- Job conditions wizard (project page > Job conditions): the building and site, schedule and working conditions questions, then the rate table, crew and overtime. The project keeps the labor factor, the labor rate and the answers as they were.
- Recipes: the
EstimatorLaborrecipe step; the sample catalog recipe adds two fictional rate tables, three crews and eight questions. - Permission: Manage labor rates, crews and factors.
Estimates
- Estimator Estimates (
CrestApps.OrchardCore.Estimator.Estimates): a new feature, turned on by the Estimator recipe. It depends on Estimator Catalog and Estimator Takeoff. - Estimates (project page > Estimates): the estimates of a project, such as the base bid or an alternate, with their bid, revision, lines and total, in the List and Grid layouts. A new estimate takes the labor rate and factors of the project's job conditions.
- Estimate settings: the pricing date, the labor column and the labor rate of an estimate; saving calculates every line again, and Take the job conditions again takes the rate and factors of the job conditions anew.
- Estimate workspace: the breakdown tree (buildings, levels, areas, systems, phases) with the total of each node and labor factors per node; a grid of every line that draws only the rows on screen, so 100,000 lines stay fast; keyboard entry with catalog search; selection, copy down, move, multiply, duplicate and delete of many lines; item, assembly and manual lines.
- Live recalculation: each saved line is calculated at once with the catalog prices on the pricing date, the labor units of the labor column, the labor rate and the factor stack (estimate, breakdown, labor category and line factors).
- Line panel: the variant and parameters of an assembly line, the line factor with its reason, notes, and how the line is calculated, step by step, from the engine's trace.
- Quantities from the takeoff (workspace > Add from takeoff): lines that take the quantity of a takeoff item over every sheet or per location, in the breakdown node named after the location; Update from takeoff gives them the current quantities.
- The estimates of a deleted project are deleted with it.
Recap and alternates
- Recap (workspace > Recap): the markup waterfall of the base bid with each row's share of the price: material, material sales tax, labor, equipment, direct job expenses, allowances, quotes, subcontracts, prime cost, overhead, profit, contingency, bond, rounding and selling price. The selling price shows in the workspace, the list of estimates and the project page.
- Recap settings: material sales tax, overhead as a share of prime cost and per labor hour, profit as a markup or a margin, markups per cost type, contingency, a bond rate schedule in tiers and rounding.
- Cost types: manual lines can be equipment, direct job expenses or allowances.
- Alternates: add and deduct alternates; their lines are left out of or kept in the base bid, and each alternate is priced as the change it makes to the selling price.
- Price to target: the profit percent that reaches a target selling price, bond included, which you can take for the estimate.
- Engine:
RecapCalculatoradds overhead per labor hour, markups per cost type andSolveProfitRate.
Quotes and subcontracts
- Quote packages (workspace > Quotes): material quotes and subcontracts of an estimate, each with a placeholder, a breakdown node, a cost code and a scope checklist, in the List and Grid layouts. The estimate carries the material quotes and the subcontracts in its totals.
- Vendor quotes: the vendor, the quoted amount, freight, tax, adjustments that add or deduct, what the quote says about each scope item, and a plug for each gap. Add a quick quote takes the vendor and the amount on bid day.
- Leveling: the quotes of a package side by side with their leveled totals, the low quote, how much more each other quote is, and the scope gaps without a plug. Select carries a quote's leveled total into the estimate; Unselect goes back to the placeholder.
- Material in a quote: lines whose material a material quote covers keep their labor and carry no material (the Quote cell, or the Quote list for selected lines).
Estimating engine
-
Labor: loaded rates from burden components (
LaborRateCalculator), overtime blending, and the crew/production mode (ProductionCalculator) with crew members and equipment. -
Assemblies: nested assemblies can have a formula quantity, components can set their own waste, and
ExpandTreelists every assembly of an expansion with its quantity. -
Units (
CrestApps.Estimator.Units): units of measure with exact imperial and metric conversions, quantities, E/C/M quantity bases, waste and purchase rounding. -
Engine (
CrestApps.Estimator.Engine): labor units and factor stacks, crew composite rates, assembly expansion with parameters, formulas, conditions and nesting, line extensions with calculation traces, the recap waterfall with markup or margin, contingency, tiered bonds and rounding, and the estimate calculator. -
Unit, property and golden-estimate tests, with coverage reported in pull request CI.
Estimate line storage
- The Estimator feature stores estimate lines in chunk documents (at most 250 lines per chunk) in the
EstimatorYesSql collection, with a chunk index and a line index, throughIEstimateLineStore. Index amounts are integer minor units, so totals are exact on every database. - Persistence and engine benchmarks (
tests/CrestApps.OrchardCore.Estimator.Benchmarks), and a manualBenchmarksworkflow for SQLite, PostgreSQL and SQL Server.
Drawing analysis
- Drawing (
CrestApps.Estimator.Drawing): PDF page reading with curve flattening and vector or raster classification, title block reading, sheet numbers and disciplines, drawing scales with measurement and calibration, and vector symbol matching at four rotations.