Thanks Yaw for the prompt reply.
Any tool build on ODK that serves this purpose that u could suggest?
Commcare or Smap or any other that may have task or form assignment/ allocation?
Hi @RishikeshMishra, you might consider SurveyCTO, which is an ODK-based platform. We've recently introduced enterprise features which provide highly customisable form and data access permissions which govern what users can see and do on Collect and on the server. See the overview video on the enterprise edition on YouTube for a more detailed overview.
For full disclosure, I work for Dobility, the social enterprise that develop and maintain SurveyCTO.
I think CommCare, ELMO, Ona, and Smap all have something similar to what you'd like Rishikesh. Check out their websites and try them out. I've also invited those invited some of those folks to participate in this discussion.
Thanks for the invite yaw. Hi @RishikeshMishra, Yes I think this is a pretty common feature on odk compatible servers. Smap allows you to put forms into projects and then give access to users to projects. So you could have one project for nurses and another for doctors.
Smap does support assignment of tasks to individual users. Hence you could assign a task to the doctors to complete a md form. You can then assign a task to the nurses to complete a nursing form. What the user will then see on their device is that task rather than a form. By default once completed a task is removed, however you can specify that tasks are "repeating" in which case they can be completed many times like a form.
A task is actually an instance which in your example will probably be empty. The forms also need to be on the device in order to complete a task however for a project you can specify that the forms are hidden so that the doctors won't see the forms that the nurses are using to complete their tasks.
Tasks would require you to use a fork of ODK collect on your devices (fieldTask). You would also need to use Smap as your server.
In case it's useful - my fork of Collect appends a deviceID to the formList querystring, and each device gets a customised form list in the response - but I use a custom PHP/MySQL server to send the form lists and forms, I don't use Aggregate. If you're looking to do this in Aggregate I can't help - but if you're building your own back-end server, I can give you some pointers.
NB there are some issues with identifying a device uniquely, and Google seem to be forcing development to identify users rather than device hardware:
For now, my modification to Collect's DownloadFormListTask.java obtains a deviceid from PropertyManager. If the device is a phone, this returns the IMEI - if not, it returns the wifi MAC address as a fallback. Either can be stored on the server, so that the requesting device can be identified by appending this ID to the formList URL.
But if future versions of Android prevent apps from identifying hardware, as Google seem to intend, it will be necessary to switch to some kind of user authentication.
This feature isn't implemented in ODK Aggregate. At this time, major features aren't being added to Aggregate (see this topic for more information). However, this feature was recently implemented in ODK Central. Central lets you use Projects to partition Forms and users, and also allows you to manage Form access within a Project.
Hi @Unijoegrace! If you want to learn more about ODK Central and how to use it to manage form access, check out the introduction to Central. Follow the instructions there to try it out on the sandbox or your own machine.