Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/bika/lims/browser/client/views/analysisspecs.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@

from bika.lims import api
from bika.lims import bikaMessageFactory as _
from bika.lims.controlpanel.bika_analysisspecs import AnalysisSpecsView
from senaite.core.browser.controlpanel.analysisspecs.view import AnalysisSpecsView
from senaite.core.permissions import AddAnalysisSpec


Expand Down
108 changes: 1 addition & 107 deletions src/bika/lims/controlpanel/bika_analysisspecs.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,8 @@
# Copyright 2018-2025 by it's authors.
# Some rights reserved, see README and LICENSE.

import collections

from bika.lims import api
from bika.lims import bikaMessageFactory as _
from senaite.core.browser.controlpanel.listing import ControlPanelListingView
from bika.lims.config import PROJECTNAME
from bika.lims.interfaces import IAnalysisSpecs
from senaite.core.permissions import AddAnalysisSpec
from bika.lims.utils import get_link
from plone.app.folder.folder import ATFolder
from plone.app.folder.folder import ATFolderSchema
from Products.Archetypes import atapi
Expand All @@ -35,108 +28,9 @@
from zope.interface.declarations import implements


# TODO: Separate content and view into own modules!


class AnalysisSpecsView(ControlPanelListingView):

def __init__(self, context, request):
super(AnalysisSpecsView, self).__init__(context, request)

self.catalog = "senaite_catalog_setup"

self.contentFilter = {
"portal_type": "AnalysisSpec",
"sort_on": "sortable_title",
"sort_order": "ascending",
"path": {
"query": api.get_path(context),
"level": 0}
}

self.context_actions = {
_("Add"): {
"url": "createObject?type_name=AnalysisSpec",
"permission": AddAnalysisSpec,
"icon": "++resource++bika.lims.images/add.png"}
}

self.title = self.context.translate(_("Analysis Specifications"))
self.icon = "{}/{}".format(
self.portal_url,
"/++resource++bika.lims.images/analysisspec_big.png"
)

self.show_select_row = False
self.show_select_column = True
self.pagesize = 25

self.columns = collections.OrderedDict((
("Title", {
"title": _("Analysis Specification"),
"index": "sortable_title"}),
("SampleType", {
"title": _("Sample Type"),
"index": "sampletype_title"}),
("DynamicSpec", {
"title": _("Dynamic Specification"),
"sortable": False,
})
))

self.review_states = [
{
"id": "default",
"title": _("Active"),
"contentFilter": {"is_active": True},
"transitions": [{"id": "deactivate"}, ],
"columns": self.columns.keys(),
}, {
"id": "inactive",
"title": _("Inactive"),
"contentFilter": {'is_active': False},
"transitions": [{"id": "activate"}, ],
"columns": self.columns.keys(),
}, {
"id": "all",
"title": _("All"),
"contentFilter": {},
"columns": self.columns.keys(),
},
]

def folderitem(self, obj, item, index):
"""Service triggered each time an item is iterated in folderitems.
The use of this service prevents the extra-loops in child objects.
:obj: the instance of the class to be foldered
:item: dict containing the properties of the object to be used by
the template
:index: current index of the item
"""
obj = api.get_object(obj)
title = obj.Title()
url = obj.absolute_url()

item["replace"]["Title"] = get_link(url, value=title)

sampletype = obj.getSampleType()
if sampletype:
title = sampletype.Title()
url = sampletype.absolute_url()
item["replace"]["SampleType"] = get_link(url, value=title)

dynamic_spec = obj.getDynamicAnalysisSpec()
if dynamic_spec:
title = dynamic_spec.Title()
url = api.get_url(dynamic_spec)
item["replace"]["DynamicSpec"] = get_link(url, value=title)

return item


schema = ATFolderSchema.copy()


# TODO: Migrated to DX - https://github.com/senaite/senaite.core/pull/#2877
class AnalysisSpecs(ATFolder):
implements(IAnalysisSpecs, IHideActionsMenu)
displayContentsTab = False
Expand Down
8 changes: 0 additions & 8 deletions src/bika/lims/controlpanel/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,6 @@
layer="bika.lims.interfaces.IBikaLIMS"
/>

<browser:page
for="bika.lims.interfaces.IAnalysisSpecs"
name="folder_view"
class=".bika_analysisspecs.AnalysisSpecsView"
permission="senaite.core.permissions.ManageBika"
layer="bika.lims.interfaces.IBikaLIMS"
/>

<browser:page
for="bika.lims.interfaces.IInstruments"
name="folder_view"
Expand Down
1 change: 0 additions & 1 deletion src/bika/lims/profiles/default/factorytool.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
<type portal_type="Analysis"/>
<type portal_type="AnalysisRequest"/>
<type portal_type="AnalysisService"/>
<type portal_type="AnalysisSpec"/>
<type portal_type="Attachment"/>
<type portal_type="Batch"/>
<type portal_type="BikaSetup"/>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
auditlog
bika_analysisservices
bika_analysisspecs
bika_artemplates
bika_instruments
bika_labcontacts
Expand Down

This file was deleted.

2 changes: 0 additions & 2 deletions src/bika/lims/profiles/default/types.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@
<object name="AnalysisRequest" meta_type="Factory-based Type Information with dynamic views"/>
<object name="AnalysisService" meta_type="Factory-based Type Information with dynamic views"/>
<object name="AnalysisServices" meta_type="Factory-based Type Information with dynamic views"/>
<object name="AnalysisSpec" meta_type="Factory-based Type Information with dynamic views"/>
<object name="AnalysisSpecs" meta_type="Factory-based Type Information with dynamic views"/>
<object name="Attachment" meta_type="Factory-based Type Information with dynamic views"/>
<object name="Batch" meta_type="Factory-based Type Information with dynamic views"/>
<object name="BatchFolder" meta_type="Factory-based Type Information with dynamic views"/>
Expand Down
48 changes: 0 additions & 48 deletions src/bika/lims/profiles/default/types/AnalysisSpec.xml

This file was deleted.

29 changes: 0 additions & 29 deletions src/bika/lims/profiles/default/types/AnalysisSpecs.xml

This file was deleted.

19 changes: 19 additions & 0 deletions src/senaite/core/browser/controlpanel/analysisspecs/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
#
# This file is part of SENAITE.CORE.
#
# SENAITE.CORE is free software: you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation, version 2.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc., 51
# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Copyright 2018-2025 by it's authors.
# Some rights reserved, see README and LICENSE.
12 changes: 12 additions & 0 deletions src/senaite/core/browser/controlpanel/analysisspecs/configure.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser">

<browser:page
for="senaite.core.interfaces.IAnalysisSpecs"
name="view"
class=".view.AnalysisSpecsView"
permission="senaite.core.permissions.ManageBika"
layer="senaite.core.interfaces.ISenaiteCore"/>

</configure>
Loading
Loading