Repository navigation
OpenConstructionERP v17.0.0
Every screen that opens a PDF now goes through one binding, and that binding ships the decoders a scanned drawing needs. Five viewers configured the PDF library independently: the markup annotator, the drawing comparison, the plan room, the punch pin board and the takeoff viewer. Since version 5 the library fetches WebAssembly decoders for JBIG2 and JPEG 2000 images and an ICC profile for CMYK colour from paths the host has to supply, and a viewer that does not supply them draws a blank page for exactly the scanned drawings a takeoff receives most often. Five separate configurations meant five chances to get that wrong and no way to fix it once. There is now a single place that names the library, the decoders are published under a path carrying the library's version, and the version in that path is load bearing: those files keep their names between releases and everything under assets is served as immutable for a year, so without it a future upgrade would pair a new worker with a decoder cached from the old one. The binding takes the conservative build on purpose, because the default one expects browser features that a desktop WebView on an older macOS and a browser in a site office do not have. Two library functions that no longer exist are handled rather than guarded around, so no viewer can go on calling a method that was removed while leaking the parsed document for the life of the tab.
The case hub opens on the reader's own market. The shelf used to be ordered by country code, which in a German interface read Australien, Brasilien, Kanada, China, Deutschland and put the reader's own market fifth and unmarked, in an order that is alphabetical in no language. It now opens with that market, says so on a badge, and ranks the rest by how many cases they hold, using the total rather than the count under the current filters so that choosing a company type never reshuffles the tiles under the cursor. The chosen market is carried in the address, which answers the reader who is sent a link rather than only the reader who comes back: a filtered hub used to read as the bare catalogue address, so a colleague pasting a link, or a regional pack's own onboarding, handed the receiver their own stored market or none at all. Each tile also says where its regional pack stands, applied, present but switched off, or absent from this build, and says nothing at all while the pack list is still in flight, because no pack is the wrong answer for every market that has one and would flip a moment later. Search now matches a market's name in the reader's language as well as its English name and its country code, since typing the country you work in is the most natural question this page can be asked and it used to answer that nothing matched.
The guided cases are now written in Russian and Chinese. Six hundred and twenty six keys covering the step by step pages, what you put in, what comes out, what a step is for and why it matters, for work like issuing a compliant XRechnung, running the VOB payment clock and closing a month against a KS-2 act. Both languages were reading those pages in English. German document names are deliberately left in German where they name a document rather than describe one, because a Russian reader working a German payment case needs to recognise Abschlagsrechnung and GAEB X84 Hauptangebot on the paperwork in front of them, and translating those would make the page harder to use rather than easier. A further two hundred and eighty two keys were filled across German, Spanish, French, Portuguese, Russian and Chinese, covering property development, advanced health and safety, management of change, risk, meetings, approval routes and the BIM rule screens.
Czech and Romanian have their accents back across a wide stretch of the interface, and two new checks make sure they stay. Words were shipping stripped of their diacritics in files that spell those same words correctly everywhere else, which makes them different words rather than untidy ones. Each was written out by hand in the spelling its own file already uses in quantity, never restored by a pass over the file that adds marks by rule, because that pass is what once turned the German locale into non words. One Romanian repair shows why the distinction matters. A single commit rewrote three strings, and the five letters baza occur in two of them with opposite verdicts: moneda de baza had to gain its mark and became moneda de bază, while pe baza a ce s-a cheltuit was left exactly as it stood, because there the same letters are the definite form and already correct. The second of those sits inside a string that same commit was editing anyway, for three other words in it, so a pass adding marks by rule would have had its hands on the correct word too. A word list is not enough on its own either, and one candidate word was dropped from a list of eighteen after reading all twenty one of its occurrences and finding every one of them an English abbreviation, a loanword compound or a data exchange code rather than the Romanian preposition it looks like. The two checks that now guard this are worth describing, because repairing this class of defect creates work rather than finishing it: fixing a bare word removes the cover that was hiding other bare words, so the detector reports more the moment a repair lands, and that is the repair working rather than a regression.
A bug report can no longer be filed with no description. The report used to accept an empty body and send it, which produces a ticket nobody can act on and a reporter who believes they have been heard.
Full Changelog: v16.9.0...v17.0.0