|
20 | 20 |
|
21 | 21 | from collections import OrderedDict |
22 | 22 |
|
| 23 | +from bika.lims import api |
23 | 24 | from bika.lims.api import UID_CATALOG |
24 | | -from plone.registry.interfaces import IRegistry |
25 | 25 | from senaite.core.api.workflow import update_workflow |
26 | 26 | from senaite.core.registry import get_registry_record |
27 | 27 | from senaite.core.registry import set_registry_record |
|
37 | 37 | from senaite.referral.config import PRODUCT_NAME |
38 | 38 | from senaite.referral.config import PROFILE_ID |
39 | 39 | from senaite.referral.config import UNINSTALL_ID |
40 | | -from zope.component import getUtility |
41 | 40 |
|
42 | 41 | CATALOGS = ( |
43 | 42 | InboundSampleCatalog, |
|
60 | 59 | ("shipments", "Shipments", "ShipmentFolder"), |
61 | 60 | ] |
62 | 61 |
|
63 | | -NAVTYPES = [ |
64 | | - "ExternalLaboratoryFolder", |
65 | | - "ShipmentFolder", |
66 | | -] |
67 | | - |
68 | 62 | WORKFLOWS_TO_UPDATE = { |
69 | 63 | SAMPLE_WORKFLOW: { |
70 | 64 | "states": { |
@@ -215,9 +209,6 @@ def setup_handler(context): |
215 | 209 | # Portal folders |
216 | 210 | add_portal_folders(portal) |
217 | 211 |
|
218 | | - # Configure visible navigation items |
219 | | - setup_navigation_types(portal) |
220 | | - |
221 | 212 | # Setup worlflows |
222 | 213 | setup_workflows(portal) |
223 | 214 |
|
@@ -278,21 +269,40 @@ def add_portal_folders(portal): |
278 | 269 | logger.info("Adding portal folders ...") |
279 | 270 | for folder_id, folder_name, portal_type in PORTAL_FOLDERS: |
280 | 271 | if portal.get(folder_id) is None: |
281 | | - portal.invokeFactory(portal_type, folder_id, title=folder_name) |
| 272 | + logger.info("Adding folder: {}".format(folder_id)) |
| 273 | + params = dict(id=folder_id, title=folder_name) |
| 274 | + api.create(portal, portal_type, **params) |
| 275 | + |
| 276 | + # make folders visible in the navigation bar |
| 277 | + for folder_id, folder_name, portal_type in PORTAL_FOLDERS: |
| 278 | + obj = portal.get(folder_id) |
| 279 | + if obj is not None: |
| 280 | + display_in_nav(obj) |
282 | 281 |
|
283 | 282 | logger.info("Adding portal folders [DONE]") |
284 | 283 |
|
285 | 284 |
|
286 | | -def setup_navigation_types(portal): |
287 | | - """Add additional types for navigation |
| 285 | +def display_in_nav(obj): |
| 286 | + """Makes an object to be displayed in the navigation bar |
288 | 287 | """ |
289 | | - registry = getUtility(IRegistry) |
290 | | - key = "plone.displayed_types" |
291 | | - display_types = registry.get(key, ()) |
292 | | - |
293 | | - new_display_types = set(display_types) |
294 | | - new_display_types.update(NAVTYPES) |
295 | | - registry[key] = tuple(new_display_types) |
| 288 | + portal_type = api.get_portal_type(obj) |
| 289 | + |
| 290 | + # remove from senaite setup's sidebar_skip_types |
| 291 | + setup = api.get_senaite_setup() |
| 292 | + skip = setup.getSidebarSkipTypes() |
| 293 | + if skip and portal_type in skip: |
| 294 | + skip = tuple(pt for pt in skip if pt != portal_type) |
| 295 | + setup.setSidebarSkipTypes(skip) |
| 296 | + |
| 297 | + # if a root folder, add to senaite setup's sidebar_folders |
| 298 | + setup = api.get_senaite_setup() |
| 299 | + portal = api.get_portal() |
| 300 | + if api.get_parent(obj) == portal: |
| 301 | + obj_id = api.get_id(obj) |
| 302 | + folders = setup.getSidebarFolders() |
| 303 | + if obj_id not in folders: |
| 304 | + folders += (obj_id, ) |
| 305 | + setup.setSidebarFolders(folders) |
296 | 306 |
|
297 | 307 |
|
298 | 308 | def setup_workflows(portal): |
|
0 commit comments