Skip to content

OpenConstructionERP v12.7.0

Choose a tag to compare

@github-actions github-actions released this 27 Jul 19:33

Physical progress percentages are calculated differently and older numbers will not reproduce. A project percentage used to be the highest reading found anywhere in it. It is now rolled up from the individual positions and weighted by design quantity, and a position nobody has measured counts as zero rather than being left out of the average. Where several readings exist for the same position and period the latest one now wins instead of the highest, so recording a correction downward actually lowers the figure instead of being ignored. The period column can show a decrease as well, which it previously flattened to zero while the curve beside it already showed the drop. Nothing is recomputed or rewritten, but the same entries now yield a different and more conservative number, so anything quoting a progress percentage from an earlier report should be regenerated rather than compared.

Work item descriptions in five cost bases are no longer printed twice. The last release stopped a base doubling a name when it shipped the same string in both of its name columns, which is what put the Chinese and Turkish bases right. This release covers the harder case. The Brazilian, Spanish, Vietnamese, Greek and Italian bases hold a translation in both columns, and two translations of one sentence are rarely identical to the letter, so a check for equality could not catch them and every description still appeared twice over in slightly different words. The decision now comes from the type of base rather than from the data, so these bases show a single clean description while the classic base, where the two columns genuinely complement each other, is unchanged. Nothing was removed from the published data and only the display changed, so descriptions will look shorter without any translation having been lost. A national base can also open in its own language now, though on an installation that already holds these bases the language stays as it is until the base is reloaded.

Large models start drawing almost immediately. Progressive loading was not doing anything for most models, because anything between four hundred and twelve hundred parts was built as a single piece and the viewer downloaded the whole thing before showing anything, which covers most of what gets opened on site. Models are now split much further and the pieces are ordered so the most geometry per byte arrives first. On the standard sample model the amount downloaded before the first thing appears drops from about 2.6 MB to about 5 KB. Loading also looks different as well as faster, since it no longer rises from the ground upwards. Previously saved offline copies of a model are stale and are cleared automatically the first time you open the app, so they need saving again.

The bill of quantities gained a control that opens every position and shows its resource breakdown, or hides it again. Showing also expands the sections, since a position inside a folded section renders nothing, while hiding leaves your section grouping alone. The button counts and acts on the positions you can currently see, so filtering first and then showing resources opens only those, and clearing the filter afterwards leaves what you opened open.

Approving a purchase order now checks the order before it commits the money. A purchase order is refused if its own numbers disagree with each other, meaning the lines do not add up to the subtotal, the subtotal plus tax does not match the total, or a line amount does not match quantity times rate, and also if it has no lines, no currency, no vendor, or a retention percentage that cannot be right. The refusal lists every problem at once so the order can be corrected in one pass, both ways of approving are covered, the approve action and a direct status change, and a new check on the purchase order shows the same list before you attempt the approval. If you have been approving a half-built draft, it will now be refused until the missing pieces are filled in.

Committed budget figures also correct themselves. Approving through a direct status change never reported the commitment to finance while reverting always reported the reversal, so a project could end up showing less committed than it actually had. Both routes now report the same way, and a purchase order approved either way is visible to the budget from the moment it is approved.

Subcontracts, submittals and requests for quotation are now checked at the point where they leave your hands. A subcontract going live is checked for the things that make its reports reconcile later, so an agreement with no work packages, a zero contract value, no currency, packages priced above the contract, a period that runs backwards, an impossible retention rate, or a subcontractor whose insurance has already lapsed is flagged as it is activated. A submittal is checked as it is filed, since a submittal with no reviewer sits in nobody's queue and one with no required date can never be reported late, and it also flags a review window shorter than the customary ten working days, a missing specification section, one person holding both the review and the approval, and no link to the scope it belongs to. A request for quotation is checked twice, once against what a vendor needs in order to price it at all and once against what the comparison between the returned bids rests on, so an unpriceable package, a deadline that is missing, unreadable or already past, an empty recipient list, bids priced in another currency, an amount that is not a number, a bid awarded after its own validity expired, and an award resting on fewer than three bids all get named.

Each of the three also gained a check you can run yourself at any time, which returns the same list without changing anything. These checks report rather than refuse for now, so nothing that worked yesterday stops working, and the findings appear in the server log alongside the change that triggered them. Every message is available in English, German, Spanish and Russian.

People who close a shared document now disappear from the collaborator list. When several people were viewing the same position and the room emptied, only one of them was announced as leaving, so the rest stayed on everyone else's screen as if still present. Nothing re-synced the list afterwards, so the phantom colleagues survived until the page was reloaded.

Resource leveling no longer produces a schedule that contradicts its own links. Where a relationship carried a negative lag, leveling could place an activity before the one it depends on and hand back a plan the network diagram beside it showed as impossible. Schedules made only of finish to start links with normal lags come out exactly as before.

Installations upgraded over a long period get protections back that they had quietly lost. Starting the application has always repaired missing columns and indexes, but never the rules that stop bad data being written in the first place, so an installation that was upgraded rather than freshly installed could be missing them without any sign. The one that matters most guards document numbering. Non-conformance reports, safety incidents and observations, quality inspections, requisitions and correspondence all take the next free number, and the only thing stopping two people taking the same number at the same moment is exactly that rule. On an affected installation two documents could end up sharing a number, silently, on paperwork that gets quoted by number in claims. Startup now restores these. Where a database already contains records that break a rule, the rule is skipped rather than forced, the affected table and fields are named in the log so they can be sorted out by hand, and the application starts normally either way.

The built-in database is given enough lock capacity for the platform's own schema. PostgreSQL keeps one shared pool of lock slots for the whole server, and the stock size assumes a far smaller schema than this one. Building or reading the schema takes a lock on every table and index in it, so when several connections did that at the same time the pool ran dry and a statement failed with a message about running out of shared memory, which sounds like the machine is short of RAM and is really a setting that was never raised. The pool is now sized for the schema we actually ship, at a cost of a few megabytes. A fresh installation is given the setting before the database starts for the first time, so a first run gets it rather than waiting for a second one, and an installation that already exists picks it up on the next restart. Nothing changes for an installation pointed at an external PostgreSQL, where the same setting is the administrator's to make.

Updating the desktop application from inside it no longer answers with a page of command line usage text. The button asked the server to run a package upgrade, and on the desktop that server is a self-contained program rather than a Python installation, so the request came straight back into the application's own command line and was turned down as an unknown command. There is nothing inside the desktop build to upgrade with in any case, because a new version arrives as an installer that replaces the whole application and leaves your projects and settings where they are. The button now says exactly that and points at the download. The upgrade command in the terminal refuses the same way instead of printing its own usage, and the update panel no longer offers package commands that cannot work there. Installations run from Python are unaffected and upgrade as before.

Signing in with a link that carries a destination is stricter about where it will send you. A crafted address could put an external site in that destination and land you there straight after login, on a page that looked like part of the app. Both sign-in screens now share one check instead of carrying separate versions of it.

Full Changelog: v12.6.1...v12.7.0