diff --git a/CHANGES.rst b/CHANGES.rst index 9ae1bc4d6e..b9c6068cd0 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -7,6 +7,7 @@ Changelog **Added** +- #1498 Moved all viewlets from senaite.lims to senaite.core - #1505 Display partition link in analyses listing - #1491 Enable Audit-logging for Dexterity Contents - #1489 Support Multiple Catalogs for Dexterity Contents diff --git a/bika/lims/browser/viewlets/__init__.py b/bika/lims/browser/viewlets/__init__.py index 6914da2f2f..ed905a536c 100644 --- a/bika/lims/browser/viewlets/__init__.py +++ b/bika/lims/browser/viewlets/__init__.py @@ -18,9 +18,17 @@ # Copyright 2018-2019 by it's authors. # Some rights reserved, see README and LICENSE. +from analysisrequest import * # noqa from attachments import AttachmentsViewlet # noqa from attachments import WorksheetAttachmentsViewlet # noqa -from document_actions import DocumentActionsViewlet # noqa -from path_bar import PathBarViewlet # noqa from authenticator import AuthenticatorViewlet # noqa +from colophon import ColophonViewlet # noqa +from content_views import ContentViewsViewlet # noqa +from document_actions import DocumentActionsViewlet # noqa +from footer import FooterViewlet # noqa from instruments import InstrumentQCFailuresViewlet # noqa +from logo import LogoViewlet # noqa +from path_bar import PathBarViewlet # noqa +from personal_bar import PersonalBarViewlet # noqa +from sections import GlobalSectionsDropdownViewlet # noqa +from site_actions import SiteActionsViewlet # noqa diff --git a/bika/lims/browser/viewlets/colophon.py b/bika/lims/browser/viewlets/colophon.py new file mode 100644 index 0000000000..e6e5571805 --- /dev/null +++ b/bika/lims/browser/viewlets/colophon.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- + +from plone.app.layout.viewlets.common import ViewletBase +from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile + + +class ColophonViewlet(ViewletBase): + index = ViewPageTemplateFile( + "templates/plone.app.layout.viewlets.colophon.pt") diff --git a/bika/lims/browser/viewlets/configure.zcml b/bika/lims/browser/viewlets/configure.zcml index 180908b0c5..c39054797e 100644 --- a/bika/lims/browser/viewlets/configure.zcml +++ b/bika/lims/browser/viewlets/configure.zcml @@ -2,6 +2,43 @@ xmlns:browser="http://namespaces.zope.org/browser" i18n_domain="senaite.core"> + + + + + + + + + + + + - + + + + + + + + + - + - + - + + + - + + + + + + - - - + for="bika.lims.interfaces.IAnalysisRequest" + name="bika.lims.invalid_ar_viewlet" + class=".analysisrequest.InvalidAnalysisRequestViewlet" + manager="plone.app.layout.viewlets.interfaces.IAboveContent" + template="templates/invalid_ar_viewlet.pt" + permission="zope2.View" + layer="bika.lims.interfaces.IBikaLIMS" + /> + for="bika.lims.interfaces.IAnalysisRequest" + name="bika.lims.retest_ar_viewlet" + class=".analysisrequest.RetestAnalysisRequestViewlet" + manager="plone.app.layout.viewlets.interfaces.IAboveContent" + template="templates/retest_ar_viewlet.pt" + permission="zope2.View" + layer="bika.lims.interfaces.IBikaLIMS" + /> + for="bika.lims.interfaces.IAnalysisRequest" + name="bika.lims.primary_ar_viewlet" + class=".analysisrequest.PrimaryAnalysisRequestViewlet" + manager="plone.app.layout.viewlets.interfaces.IAboveContent" + template="templates/primary_ar_viewlet.pt" + permission="zope2.View" + layer="bika.lims.interfaces.IBikaLIMS" + /> - - - + for="bika.lims.interfaces.IAnalysisRequest" + name="bika.lims.partition_ar_viewlet" + class=".analysisrequest.PartitionAnalysisRequestViewlet" + manager="plone.app.layout.viewlets.interfaces.IAboveContent" + template="templates/partition_ar_viewlet.pt" + permission="zope2.View" + layer="bika.lims.interfaces.IBikaLIMS" + /> + + + + for="bika.lims.interfaces.IAnalysisRequestSecondary" + name="bika.lims.secondary_ar_viewlet" + class=".analysisrequest.SecondaryAnalysisRequestViewlet" + manager="plone.app.layout.viewlets.interfaces.IAboveContent" + template="templates/secondary_ar_viewlet.pt" + permission="zope2.View" + layer="bika.lims.interfaces.IBikaLIMS" + /> + for="bika.lims.interfaces.IAnalysisRequest" + name="bika.lims.rejected_ar_viewlet" + class=".analysisrequest.RejectedAnalysisRequestViewlet" + manager="plone.app.layout.viewlets.interfaces.IAboveContent" + template="templates/rejected_ar_viewlet.pt" + permission="zope2.View" + layer="bika.lims.interfaces.IBikaLIMS" + /> + diff --git a/bika/lims/browser/viewlets/content_views.py b/bika/lims/browser/viewlets/content_views.py new file mode 100644 index 0000000000..61945cb089 --- /dev/null +++ b/bika/lims/browser/viewlets/content_views.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- + +from plone.app.layout.viewlets.common import ContentViewsViewlet as Base +from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile + + +class ContentViewsViewlet(Base): + index = ViewPageTemplateFile( + "templates/plone.app.layout.viewlets.contentviews.pt") diff --git a/bika/lims/browser/viewlets/document_actions.py b/bika/lims/browser/viewlets/document_actions.py index 2d94907af2..38f18cc385 100644 --- a/bika/lims/browser/viewlets/document_actions.py +++ b/bika/lims/browser/viewlets/document_actions.py @@ -18,25 +18,10 @@ # Copyright 2018-2019 by it's authors. # Some rights reserved, see README and LICENSE. -from Products.CMFCore.utils import getToolByName +from plone.app.layout.viewlets.content import DocumentActionsViewlet as Base from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile -from plone.app.layout.viewlets.common import ViewletBase -class DocumentActionsViewlet(ViewletBase): - """Overload the default to print pretty icons - """ - - index = ViewPageTemplateFile("templates/document_actions.pt") - - def render(self): - portal_factory = getToolByName(self.context, 'portal_factory') - if portal_factory.isTemporary(self.context): - return self.index() - self.actions = [] - portal_actions = getToolByName(self.context, 'portal_actions') - actions = portal_actions.listFilteredActionsFor(self.context) - if 'document_actions' in actions: - for action in actions['document_actions']: - self.actions.append(action) - return self.index() +class DocumentActionsViewlet(Base): + index = ViewPageTemplateFile( + "templates/plone.app.layout.viewlets.documentactions.pt") diff --git a/bika/lims/browser/viewlets/footer.py b/bika/lims/browser/viewlets/footer.py new file mode 100644 index 0000000000..3babd0e731 --- /dev/null +++ b/bika/lims/browser/viewlets/footer.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- + +from plone.app.layout.viewlets.common import FooterViewlet as Base +from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile + + +class FooterViewlet(Base): + index = ViewPageTemplateFile( + "templates/plone.app.layout.viewlets.footer.pt") diff --git a/bika/lims/browser/viewlets/logo.py b/bika/lims/browser/viewlets/logo.py new file mode 100644 index 0000000000..09cbdc2f53 --- /dev/null +++ b/bika/lims/browser/viewlets/logo.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- + +from plone.app.layout.viewlets.common import LogoViewlet as Base +from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile + + +class LogoViewlet(Base): + index = ViewPageTemplateFile( + "templates/plone.app.layout.viewlets.logo.pt") + + def update(self): + super(Base, self).update() + + portal = self.portal_state.portal() + bprops = portal.restrictedTraverse("base_properties", None) + if bprops is not None: + logoName = bprops.logoName + else: + logoName = "logo.jpg" + + logoTitle = self.portal_state.portal_title() + self.logo_tag = portal.restrictedTraverse(logoName).tag( + title=logoTitle, alt=logoTitle, scale=0.5) + self.navigation_root_title = self.portal_state.navigation_root_title() diff --git a/bika/lims/browser/viewlets/path_bar.py b/bika/lims/browser/viewlets/path_bar.py index 3ae550a2a0..9cad7ae451 100644 --- a/bika/lims/browser/viewlets/path_bar.py +++ b/bika/lims/browser/viewlets/path_bar.py @@ -18,19 +18,10 @@ # Copyright 2018-2019 by it's authors. # Some rights reserved, see README and LICENSE. +from plone.app.layout.viewlets.common import PathBarViewlet as Base from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile -from plone.app.layout.viewlets.common import ViewletBase -from zope.component import getMultiAdapter -class PathBarViewlet(ViewletBase): - index = ViewPageTemplateFile('templates/path_bar.pt') - - def update(self): - super(PathBarViewlet, self).update() - - self.is_rtl = self.portal_state.is_rtl() - - breadcrumbs_view = getMultiAdapter((self.context, self.request), - name='breadcrumbs_view') - self.breadcrumbs = breadcrumbs_view.breadcrumbs() +class PathBarViewlet(Base): + index = ViewPageTemplateFile( + "templates/plone.app.layout.viewlets.path_bar.pt") diff --git a/bika/lims/browser/viewlets/personal_bar.py b/bika/lims/browser/viewlets/personal_bar.py new file mode 100644 index 0000000000..9216c4dffa --- /dev/null +++ b/bika/lims/browser/viewlets/personal_bar.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- + +from plone.app.layout.viewlets.common import PersonalBarViewlet as Base +from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile + + +class PersonalBarViewlet(Base): + index = ViewPageTemplateFile( + "templates/plone.app.layout.viewlets.personal_bar.pt") diff --git a/bika/lims/browser/viewlets/sections.py b/bika/lims/browser/viewlets/sections.py new file mode 100644 index 0000000000..2e37b3b05c --- /dev/null +++ b/bika/lims/browser/viewlets/sections.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- + +from cgi import escape + +from plone.app.layout.viewlets.common import GlobalSectionsViewlet as Base +from Products.CMFPlone.utils import safe_unicode +from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile +from zope.component import getMultiAdapter + + +class GlobalSectionsDropdownViewlet(Base): + index = ViewPageTemplateFile("templates/sections_dropdown.pt") + + def update(self): + super(GlobalSectionsDropdownViewlet, self).update() + portal_state = getMultiAdapter((self.context, self.request), + name=u"plone_portal_state") + self.navigation_root_url = portal_state.navigation_root_url() + self.portal_title = escape( + safe_unicode(portal_state.navigation_root_title())) + + +class GlobalSectionsViewlet(Base): + index = ViewPageTemplateFile( + "templates/plone.app.layout.viewlets.sections.pt") + + def update(self): + super(GlobalSectionsViewlet, self).update() + portal_state = getMultiAdapter((self.context, self.request), + name=u"plone_portal_state") + self.navigation_root_url = portal_state.navigation_root_url() + self.portal_title = escape( + safe_unicode(portal_state.navigation_root_title())) diff --git a/bika/lims/browser/viewlets/site_actions.py b/bika/lims/browser/viewlets/site_actions.py new file mode 100644 index 0000000000..84c9ce1aec --- /dev/null +++ b/bika/lims/browser/viewlets/site_actions.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- + +from plone.app.layout.viewlets.common import SiteActionsViewlet as Base +from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile + + +class SiteActionsViewlet(Base): + index = ViewPageTemplateFile( + "templates/plone.app.layout.viewlets.site_actions.pt") diff --git a/bika/lims/browser/viewlets/templates/attachments.pt b/bika/lims/browser/viewlets/templates/attachments.pt index 48c2d10657..95ae66237a 100644 --- a/bika/lims/browser/viewlets/templates/attachments.pt +++ b/bika/lims/browser/viewlets/templates/attachments.pt @@ -1,43 +1,50 @@ -
- +

+ +

- - -
-
- - Attachments -
+
+ + + + -
+ +
+ class="ar_attachments_list" + tal:define="attachments attachments_view/get_sorted_attachments">
Keywords Report Option + :records converter will somehow offset the True/False value of + the checkbox by -1 (the record before will be deleted) --> Delete @@ -72,12 +79,10 @@ - + name + tal:attributes="href string:${attachment/absolute_url}/at_download/AttachmentFile" + tal:content="attachment/name">name + @@ -112,13 +117,14 @@ + tal:attributes="name string:attachments.AttachmentKeys:records; + value attachment/keywords;"/> @@ -157,13 +163,13 @@
+ This will send the values to the `attachmetns_view` endpoint. --> + id="updateButton" + type="submit" + name="updateARAttachment" + value="Update Attachments" + i18n:attributes="value"/> @@ -171,7 +177,7 @@
+ class="ar_attachments_list">
+ id="AttachmentFile_file" + name="AttachmentFile_file" + onchange="string:document.getElementById('addARButton').disabled=false"/> @@ -230,7 +236,7 @@ tal:condition="attachments_view/global_ar_attachments_allowed" tal:attributes="value python:None"> Attach to Sample + i18n:translate="">Attach to Analysis Request - +
- -
-
- +
+ diff --git a/bika/lims/browser/viewlets/templates/colophon.pt b/bika/lims/browser/viewlets/templates/colophon.pt deleted file mode 100644 index 9800271226..0000000000 --- a/bika/lims/browser/viewlets/templates/colophon.pt +++ /dev/null @@ -1,11 +0,0 @@ -
- -
-
-
-
-
-
- -
diff --git a/bika/lims/browser/viewlets/templates/document_actions.pt b/bika/lims/browser/viewlets/templates/document_actions.pt deleted file mode 100644 index 07ac4f296c..0000000000 --- a/bika/lims/browser/viewlets/templates/document_actions.pt +++ /dev/null @@ -1,35 +0,0 @@ -
- -
- -
- - - -
- Document Actions -
- -

- - - - - - -

- -
- -
-
diff --git a/bika/lims/browser/viewlets/templates/footer.pt b/bika/lims/browser/viewlets/templates/footer.pt deleted file mode 100644 index 12778969e1..0000000000 --- a/bika/lims/browser/viewlets/templates/footer.pt +++ /dev/null @@ -1,26 +0,0 @@ -
- -
-
-
-
- - © - 2017- - - SENAITE - - -
-
-

Join our - Gitter Chatroom to get in direct contact with the Community. -

-
-
-
-
- -
diff --git a/bika/lims/browser/viewlets/templates/instrument_qc_failures_viewlet.pt b/bika/lims/browser/viewlets/templates/instrument_qc_failures_viewlet.pt index d881fda86f..ba7a090ab8 100644 --- a/bika/lims/browser/viewlets/templates/instrument_qc_failures_viewlet.pt +++ b/bika/lims/browser/viewlets/templates/instrument_qc_failures_viewlet.pt @@ -2,87 +2,101 @@ tal:condition="python:view.nr_failed > 0" i18n:domain="senaite.core"> -
+
-
-
-

- - Instrument's calibration certificate expired: -

-

- - Instruments' calibration certificates expired: -

-

-

+
+
+ +

+ + Instrument's calibration certificate expired: +

+

+ + Instruments' calibration certificates expired: +

+

+
-
-
-

- - Instrument disabled until successful calibration: -

-

- - Instruments disabled until successful calibration: -

-

-

+
+
+ +

+ + Instrument disabled until successful calibration: +

+

+ + Instruments disabled until successful calibration: +

+

+
-
-
-

- - Instrument disposed until new calibration tests being done: -

-

- - Instruments disposed until new calibration tests being done: -

-

-

+
+
+ +

+ + Instrument disposed until new calibration tests being done: +

+

+ + Instruments disposed until new calibration tests being done: +

+

+
-
-
-

- - Instrument in validation progress: -

-

- - Instruments in validation progress: -

-

-

+
+
+ +

+ + Instrument in validation progress: +

+

+ + Instruments in validation progress: +

+

+
-
-
-

- - Instrument in calibration progress: -

-

- - Instruments in calibration progress: -

-

-

+
+
+ +

+ + Instrument in calibration progress: +

+

+ + Instruments in calibration progress: +

+

- +
diff --git a/bika/lims/browser/viewlets/templates/path_bar.pt b/bika/lims/browser/viewlets/templates/path_bar.pt deleted file mode 100644 index e720351fb9..0000000000 --- a/bika/lims/browser/viewlets/templates/path_bar.pt +++ /dev/null @@ -1,41 +0,0 @@ -
- - You -are here: - - Home - - - - - - - - - crumb - - - - - - crumb - - - -
diff --git a/bika/lims/browser/viewlets/templates/plone.app.i18n.locales.browser.languageselector.pt b/bika/lims/browser/viewlets/templates/plone.app.i18n.locales.browser.languageselector.pt new file mode 100644 index 0000000000..be728d4f89 --- /dev/null +++ b/bika/lims/browser/viewlets/templates/plone.app.i18n.locales.browser.languageselector.pt @@ -0,0 +1,44 @@ + + + diff --git a/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.colophon.pt b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.colophon.pt new file mode 100644 index 0000000000..c844715a94 --- /dev/null +++ b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.colophon.pt @@ -0,0 +1,27 @@ +
+ +
+
+
+ +
+ +
+ +
+
+
+ +
diff --git a/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.contentviews.pt b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.contentviews.pt new file mode 100755 index 0000000000..39448379af --- /dev/null +++ b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.contentviews.pt @@ -0,0 +1,32 @@ +
+ + + + + + +
+
diff --git a/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.documentactions.pt b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.documentactions.pt new file mode 100644 index 0000000000..0221eb1f77 --- /dev/null +++ b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.documentactions.pt @@ -0,0 +1,35 @@ +
+ +
+ +
+ + +

+ Document Actions +

+ + +
+ +
+ +
+
diff --git a/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.footer.pt b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.footer.pt new file mode 100644 index 0000000000..1801aa90be --- /dev/null +++ b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.footer.pt @@ -0,0 +1,32 @@ +
+ +
+
+
+
+
+ + © + 2017- + + SENAITE LIMS + + +
+
+ +
+
+
+
+ +
diff --git a/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.logo.pt b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.logo.pt new file mode 100755 index 0000000000..929fa37b5f --- /dev/null +++ b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.logo.pt @@ -0,0 +1,12 @@ + diff --git a/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.path_bar.pt b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.path_bar.pt new file mode 100755 index 0000000000..3402bd30cb --- /dev/null +++ b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.path_bar.pt @@ -0,0 +1,29 @@ + \ No newline at end of file diff --git a/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.personal_bar.pt b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.personal_bar.pt new file mode 100755 index 0000000000..4d1fb9f55c --- /dev/null +++ b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.personal_bar.pt @@ -0,0 +1,68 @@ + diff --git a/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.sections.pt b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.sections.pt new file mode 100644 index 0000000000..ee8a24adaa --- /dev/null +++ b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.sections.pt @@ -0,0 +1,64 @@ +
+ + + + + + diff --git a/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.site_actions.pt b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.site_actions.pt new file mode 100644 index 0000000000..e6776fdb55 --- /dev/null +++ b/bika/lims/browser/viewlets/templates/plone.app.layout.viewlets.site_actions.pt @@ -0,0 +1,35 @@ + diff --git a/bika/lims/browser/viewlets/templates/sections_dropdown.pt b/bika/lims/browser/viewlets/templates/sections_dropdown.pt new file mode 100644 index 0000000000..e2e036e739 --- /dev/null +++ b/bika/lims/browser/viewlets/templates/sections_dropdown.pt @@ -0,0 +1,41 @@ + + + + diff --git a/bika/lims/browser/viewlets/templates/worksheet_attachments.pt b/bika/lims/browser/viewlets/templates/worksheet_attachments.pt index 6c71f2b3b8..14f4518edc 100644 --- a/bika/lims/browser/viewlets/templates/worksheet_attachments.pt +++ b/bika/lims/browser/viewlets/templates/worksheet_attachments.pt @@ -1,17 +1,23 @@ -
- -
-
- +

+

+ +

-
+
+ + +
@@ -90,10 +96,8 @@ name="addWSAttachment" value="Add" i18n:attributes="value"/> - +
- -
-
- +
+
diff --git a/bika/lims/profiles/default/viewlets.xml b/bika/lims/profiles/default/viewlets.xml index 0268bbee4a..f013d42d95 100644 --- a/bika/lims/profiles/default/viewlets.xml +++ b/bika/lims/profiles/default/viewlets.xml @@ -1,12 +1,35 @@ - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bika/lims/upgrade/v01_03_003.py b/bika/lims/upgrade/v01_03_003.py index 03bd53b29b..4823fb0f3c 100644 --- a/bika/lims/upgrade/v01_03_003.py +++ b/bika/lims/upgrade/v01_03_003.py @@ -243,10 +243,14 @@ def upgrade(tool): # -------- ADD YOUR STUFF BELOW -------- + # Moved all Viewlets from senaite.lims to senaite.core + setup.runImportStepFromProfile(profile, "viewlets") + # https://github.com/senaite/senaite.core/issues/1504 remove_cascaded_analyses_of_root_samples(portal) # Add additional JavaScripts to registry + # https://github.com/senaite/senaite.core/pull/1502 setup.runImportStepFromProfile(profile, "jsregistry") # Fix Site Properties Generic Setup Export Step @@ -446,6 +450,7 @@ def reindex_client_fields(portal): logger.info("Reindexing client fields ... [DONE]") + def cleanup_indexes_and_metadata(portal): # Remove stale indexes and metadata remove_stale_indexes(portal)