Welcome to the SENAITE Community – where the open source LIMS professionals meet. Subscribe to the SENAITE Users List at https://www.senaite.com
This is what we have for it so far in our addon:
In our browser/configure.zcml
we added:
<!-- Override BatchFolder View Class -->
<browser:page
name="BatchFolder"
class=".batchfolder.CustomBatchFolderContentsView"
permission="cmf.ListFolderContents"
for="bika.lims.interfaces.IBatchFolder"
layer="nal.lims.interfaces.INalLimsLayer"
/>
And then in our browser/batchfolder.py
we added:
from bika.lims.browser.batchfolder import BatchFolderContentsView
#Some other imports
class CustomBatchFolderContentsView(BatchFolderContentsView):
#Our customized BatchFolder view class
If we navigate to localhost:8080/oursenaitesite/.../@@BatchFolder
we successfully see our custom view. We would like this to be the Default
However, with the name field set to name='base_edit'
which is the name senaite aliases the (Default) view as, we don't get our custom view and ONLY get the Senaite default.
@mikejmets Thank you for that information! We have tried overriding the other package, but now cannot even get a new view.
Thus far we have added an overrides.zcml
file to our root that includes the browser directory:
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="nal.lims">
<include package=".browser" />
</configure>
We then included this file in our main configure.zcml
file with:
<include file="overrides.zcml" />
We then added a browser/overrides.zcml
with the new browser:page registration according to the documentation linked about.
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="nal.lims">
<!-- Override BatchFolder View Class -->
<configure package="bika.lims.browser.batchfolder">
<browser:page
for="bika.lims.interfaces.IBatchFolder"
class="nal.lims.browser.batchfolder.CustomBatchFolderContentsView"
name="base_edit"
layer="nal.lims.interfaces.INalLimsLayer"
permission="cmf.ListFolderContents"
/>
</configure>
</configure>
Nevermind, we figured it out!
It worked following the official Overriding a View Class documentation, but with the exception that we needed some Senaite interfaces to get everything working correctly.
The solution was using these interfaces instead of the IDefaultPloneLayer
for our root level interface layer.
from senaite.impress.interfaces import ILayer as ISenaiteImpressLayer
from senaite.lims.interfaces import ISenaiteLIMS
from bika.lims.interfaces import IBikaLIMS
#Layer our custom views bind to
class INalLimsLayer(ISenaiteImpressLayer, ISenaiteLIMS, IBikaLIMS):
"""Marker interface that defines a browser layer."""
Does anyone know how to get the Navigation to re-load the name for a folder?
During install, my addon changes both the Factory Type title
field, as well as the top level folder from "Methods" to "SOPs". The folder title field is changed using the API:
def post_install(context):
"""Post install script"""
# Do something at the end of the installation of this package.
site = api.get_portal()
#Change 'Methods' folder title to 'SOPs'
site.methods.title = "SOPs"
and the FTI is changed using a purging property:
<?xml version="1.0"?>
<object name="Methods"
meta_type="Factory-based Type Information with dynamic views"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
i18n:domain="my.addon">
<property name="title" purge="True">SOPs</property>
</object>
but the Navigation portlet doesn't register the change unless I create an entirely new folder. It looks correct in the ZMI, in the navigation control panel at: http://localhost:8080/senaite/@@navigation-controlpanel
, and in the Breadcrumbs, but not in the Navigation portlet itself.
Is it possible to retract/modify results in a worksheet after they have been verified? We made a mistake in data entry and did not realize it until the publish stage. Need to revise that result in the worksheet but its stuck in "verified" state. Thanks
I believe by default, samples must be invalidated and retested if they've made it all the way the the Verified state. They cannot be 'unverified' since that sort of implies they were not truly verified in the first place. A workflow for that could be added via an add-on though.
Hi, we have more than one lab and are trying to find out how to to limit what is visible/accessible to the separate lab managers to only what they create.Is this possible?
For example, LabManagerA can only see clients and interact with samples they create. LabManagerB is unable see/edit any of LabManagerA's clients/samples etc
Is there a straightforward way to change the Toolbar Logo in Senaite v2.x? It seems to function much differently than v1.3
If anyone is interested, Ramonski gave and answer to this question, and we have verified it works! We did notice that Mr. Developer automatically creates a renamed location for the static resources though, so we needed to use ++plone++our.addon.images/logo.png
default_method
to a AT Adapter? We have adapters that modify AnalysisRequests, but every time we try a default method we get a OUR_CUSTOM_FIELD.default_method is neither a method of <class 'bika.lims.content.analysisrequest.AnalysisRequest'> nor a callable
error
@NEWAGE-Labs Thanks for reply on Verified state. I'll need to program capability to downgrade the state because as we are less than 100% prefect in verification. This particular batch of samples had >500 analysis results and one was incorrect. Due to inability to downgrade verification, had to start over at the beginning and re-enter all of them with new AR identifications etc. Huge chore and now the AR IDs don't match our bench sheets. That's a big problem.
@Jeff-DFWEnv Did you try the Invalidate
workflow? It should at least give you a new sample ID that matches with an addition -R1 added to indicate it is a retest. While it does not match the bench sheets exactly, there is an auditable trail inside Senaite linking the original sample to the retested sample. I believe the original results get moved over by default as well, but in an earlier state.
Hi All,
New to gitter, you could have guessed :)
I'm currently collecting information about communication between a LIS and instruments. I've seen that a few years ago you drafted a project called FROID that was based on OpenHIM and FHIR. Can you share why this kind of approach was not used (as far as I can tell) in Senaite ?
@phb95 Not sure if this is actually the answer you were looking for, but This post may be of interest to you.
Hello everyone, I am a new user of SENAITE I am trying to modify the design of the report issued by software so I am trying to connect crystal report to the datasource of software but I couldnt find it so is there any information how to find it or if there are better idea for report design modification I will appreciate your help
Senaite Impress is what most senaite users use for reporting. There is documentation on the Github Page. It converts HTML TAL/TALES templates to render the image, and then converts it to a PDF.
Question to anyone with knowledge about JavaScript and modifying Senaite with custom add-ons and GenericSetup profiles.
In our custom Add-On, we wanted to renamed the type 'Sample Point' to 'Sample Location'. We did this by adding the SamplePoint factory type to our GenericSetup profile types.xml file, and changing only the title in SamplePoint.xml like so:
<?xml version="1.0"?>
<object name="SamplePoint"
meta_type="Factory-based Type Information with dynamic views"
xmlns:i18n="http://xml.zop.org/namespaces/i18n"
i18n:domain="nal.lims">
<property name="title" i18n:translate="">Sample Location</property>
</object>
However, we are now having an issue where the SamplePoint will not save during the AR Add screen. It saves perfectly fine on the AR Edit screen, but will not survive a refresh nor submit on the Add screen. However, when inspecting the JavaScript of the SamplePoint element, we cannot determine why this is failing. We did not change anything that affects the referentiability of the widget, yet it fails to load the object from the add template into the javascript that temporarily holds it.
@elirabalison You can with a Multi-Report like we did in one of ours.
Pretty much wrap the pages you want the header in inside a tal:repeat
TAL tag, and then iterate over the collection passed to the multi-report. Note The name of the report needs to begin or end with the word 'multi'. Not 100% where the code is that controls that, but I believe it is currently built in.
collection
variable is defined at the top of the report. You can find a similar example in the main senaite.impress repo's multi-reports
@NEWAGE-Labs thank you. I tried what you sait but it doesn't work. It only appear on the first page. :( I need to make the logo appear in all page on single and multi report.
How is your report set up?
For a Single report it should be straightforward if you are manually outlining each page in HTML anyway, so you just need to throw the header onto each page.
For the multi-report, you should have at least one tal:repeat
tag or attribute in the report. Everything inside of that tag is being repeated which is what creates the seperate pages. If you add your header HTML immediately inside of that element, it will be repeated as well.
When I try to add senaite.lims at eggs in buildout.cfg and run buildout, I get the following error:
usrlcl@RoADN-Test:~/Plone/zinstance$ PYTHONHTTPSVERIFY=0 bin/buildout
Uninstalling zopepy.
Uninstalling instance.
Installing instance.
Couldn't find index page for 'senaite.lims' (maybe misspelled?)
Getting distribution for 'senaite.lims'.
Couldn't find index page for 'senaite.lims' (maybe misspelled?)
While:
Installing instance.
Getting distribution for 'senaite.lims'.
Error: Couldn't find a distribution for 'senaite.lims'.
Please advice. Thank you.
Hello everyone, has anybody validated SENAITE in a GMP/GLP environment? If you have I'd like to hear about what worked and what didn't, how much effort it took ans so on. If you guys send me comments in private I can summarize your responses and post it here for everyone's benefit, otherwise just comment inline. Thank you very much.
We are an ISO:17025 2017 (and therefore ISO:9001 as well) accredited laboratory which tends to supercede the general GLPs. We use Senaite for the majority of our Quality Control system. However, we have added our own Plone Add-On in order to supplement certain functionality, and will likely continue to do so to meet the needs of our specific analyses.
With some simple HTML/CSS skills, you can accomplish a lot by simply creating custom Senaite Impress templates, and with some basic Python skills you could add callable methods to do pretty much anything in the Reports.
If you would like to use Senaite as a framework to expand into a more robust and customized LIMS for your specific laboratory, then you will likely need at least 1 senior Python developer who understands software development and working with Plone as a Framework. A larger DevOps team would increase the speed and magnitude of customizations you could make. Alternatively, the companies that support the core Senaite project offer customization consultation if you're looking for a vendor to manage your customized LIMS.
Hi,can anyone explain to me how to connect my instance to a remote database via IP/port (hosting the DB on a server while running the application locally) instead of local ZEO (DB)
@laitheyad There does not appear to be an official 'Plone' way to do this that is well documented. There is a thread about it, but the poster did not seem to have success. You could also dig around the zope documentation as there are likely multiple ways to move the zeoserver, filestorage, and blobstorage to different drives and get them to interact.
Generally, it seems you would need to change your buildout.cfg
file to use new var=
and blobstorage=
directories. However, we haven't actually done this before, so I'm not sure if IP:Port combos work by default or if you would need a webserver on the Database side to handle the request. I think your question may get a better answer in the Plone Community Forums though since this is more of a Zope/Plone question and there will be more users to help there.
Hello all! I was trying to create a Plone site within an already running Zope Instance. I followed the steps given here: (http://web.archive.org/web/20080611061803/http://plone.org/documentation/how-to/multiple-plone-sites-per-zope-instance-using-separate-data-fs-files-for-each-one). I was able to add group1 mount point given in 2nd step but when I create a Plone site as given in 3rd step, I face this error:
Error Type: APIError
Error Value: No tool named 'auditlog_catalog' found.
Will appreciate your help!