예제 #1
0
def create_structure(lims):
    for x in [
        [lims, 'Folder', 'sites', 'Sites', ISites],
        [lims, 'Folder', 'samples', 'Samples', ISamples],
        [lims, 'Folder', 'materials', 'Materials', IMaterials],
        [lims, 'Folder', 'solutions', 'Solutions', ISolutions],
        [lims, 'Folder', 'ichiplots', 'iChip Lots', IiChipLots],
        [lims, 'Folder', 'testruns', 'Test Runs', ITestRuns],
        [lims, 'Folder', 'nce', 'Non Conformance Events', INonConformanceEvents],
        [lims, 'Folder', 'inventory', 'Inventory', IInventory],
        [lims, 'Folder', 'patients', 'Patients', IPatients],
        [lims, 'Folder', 'providers', 'Providers', IProviders],
        [lims, 'Folder', 'ichipassay', 'iChip Assays', IiChipAssays],
        [lims, 'Folder', 'configuration', 'Configuration', IConfiguration],
    ]:
        obj = create(container=x[0], type=x[1], id=x[2], title=x[3])
        obj.setLayout('folder_contents')
        disallow_default_contenttypes(obj)
        alsoProvides(obj, x[4])

    # Create configuration after other stuff, so that it's at the bottom of nav
    configuration = lims.configuration
    for x in [
        [configuration, 'Folder', 'aliquoting', 'Aliquoting'],
        [configuration, 'Folder', 'departments', 'Departments'],
        [configuration, 'Folder', 'contacts', 'Contacts'],
        [configuration, 'Folder', 'samplepoints', 'Sample Points'],
        [configuration, 'Folder', 'sampletypes', 'Sample Types'],
        [configuration, 'Folder', 'analysisservices', 'Analysis Services'],
        [configuration, 'Folder', 'calculations', 'Calculations'],
    ]:
        instance = create(container=x[0], type=x[1], id=x[2], title=x[3])
        instance.setLayout('folder_contents')
        disallow_default_contenttypes(instance)
예제 #2
0
def make_executive(portal):
    if 'executive' in portal:
        return

    ex1 = create(portal, 'Folder', 'executive', 'Executive')
    ex2 = create(ex1, 'Folder', 'reports', 'Reports')

    disallow_default_contenttypes(ex1)
    disallow_default_contenttypes(ex2)

    ex1.setLayout('folder_contents')
    ex2.setLayout('folder_contents')

    ex1.manage_permission(AddLIMSRoot, [], 0)

    ex1.manage_permission(permissions.AddFolder, [], 0)
    ex1.manage_permission(View, ['LabManager', 'Executive'], 0)
    ex1.manage_permission(AccessContentsInformation,
                          ['LabManager', 'Executive'], 0)
    ex1.manage_permission(ListFolderContents, ['LabManager', 'Executive'], 0)
    ex1.manage_permission(ModifyPortalContent, ['LabManager', 'Executive'], 0)

    ex2.manage_permission(AddLIMSRoot, [], 0)
    ex2.manage_permission(permissions.AddFolder, [], 0)
    ex2.manage_permission(View, ['LabManager', 'Executive'], 0)
    ex2.manage_permission(AccessContentsInformation,
                          ['LabManager', 'Executive'], 0)
    ex2.manage_permission(ListFolderContents, ['LabManager', 'Executive'], 0)
    ex2.manage_permission(ModifyPortalContent, ['LabManager', 'Executive'], 0)
예제 #3
0
    def update(self, theme):
        params = {}
        for key, value in self.mapping.items():
            attribute = getattr(theme, value)
            # deal wth more than one attribute, e.g. different languages
            #  in Literals
            if isinstance(attribute.first, rdflib.term.Literal):
                att_data = {}
                for literal in attribute:
                    lang = getattr(literal, 'language', self.default_language)
                    lang = str(lang)
                    if lang in self.available_languages:
                        lang = self.available_languages[lang]
                        att_data[lang] = str(literal)
                if not att_data:
                    att_data = str(attribute.first)
            else:
                if not attribute.first:
                    att_data = None
                else:
                    att_data = str(attribute.first)

            params[key] = att_data

        # Use subject as rdfabout
        att_data = str(getattr(theme, 'subject'))

        params['rdfs_isDefinedBy'] = att_data

        params = self.get_foaf_depiction(params, att_data)

        # Todo : Check for collisions. Probably not by title but by
        # rdfs_isDefinedBy

        if not params['dct_title']:
            params['dct_title'] = params['dc_identifier']

        # create a skos:concept object
        try:
            if isinstance(params['dc_identifier'], dict):
                id = params['dc_identifier'][self.default_language]
            else:
                id = params['dc_identifier']
            if isinstance(params['dct_title'], dict):
                title = params['dct_title'][self.default_language]
            else:
                title = params['dct_title']

            content.create(container=self.context,
                           type=CT_SKOS_CONCEPT,
                           id=id,
                           title=title,
                           **params)
        except Exception as e:  # noqa: B902
            portal.show_message(message=str(e), request=self.request)
            return
        else:
            self.count += 1
예제 #4
0
def make_billing(portal):
    if 'billing' in portal:
        return

    b1 = create(portal, 'Folder', 'billing', 'Billing')
    b2 = create(b1, 'Folder', 'assaybillingrequests', 'Assay Billing Requests')
    b3 = create(b1, 'Folder', 'billingProgram_workflow', 'Billing Programs')

    disallow_default_contenttypes(b1)
    disallow_default_contenttypes(b2)
    disallow_default_contenttypes(b3)

    b1.setLayout('folder_contents')
    b2.setLayout('folder_contents')
    b3.setLayout('folder_contents')

    # @formatter:off
    b1.manage_permission(AddLIMSRoot, [], 0)
    b1.manage_permission(permissions.AddFolder, [], 0)
    b1.manage_permission(View, ['LabManager', 'BillingExec'], 0)
    b1.manage_permission(AccessContentsInformation,
                         ['LabManager', 'BillingExec'], 0)
    b1.manage_permission(ListFolderContents, ['LabManager', 'BillingExec'], 0)
    b1.manage_permission(AddAssayBillingRequest, ['LabManager', 'BillingExec'],
                         0)
    b1.manage_permission(ModifyPortalContent, ['LabManager', 'BillingExec'], 0)
    b1.manage_permission(AddAssayBillingRequest, [], 0)
    b1.manage_permission(AddBillingProgram, [], 0)
    b1.manage_permission(AddAliquotPlate, [], 0)

    b2.manage_permission(AddLIMSRoot, [], 0)
    b2.manage_permission(permissions.AddFolder, [], 0)
    b2.manage_permission(View, ['LabManager', 'BillingExec'], 0)
    b2.manage_permission(AccessContentsInformation,
                         ['LabManager', 'BillingExec'], 0)
    b2.manage_permission(ListFolderContents, ['LabManager', 'BillingExec'], 0)
    b2.manage_permission(ModifyPortalContent, ['LabManager', 'BillingExec'], 0)
    b2.manage_permission(AddAssayBillingRequest, ['LabManager', 'BillingExec'],
                         0)
    b2.manage_permission(AddBillingProgram, [], 0)
    b2.manage_permission(AddAliquotPlate, [], 0)

    b2.manage_permission(AddLIMSRoot, [], 0)
    b3.manage_permission(permissions.AddFolder, [], 0)
    b3.manage_permission(View, ['LabManager', 'BillingExec'], 0)
    b3.manage_permission(AccessContentsInformation,
                         ['LabManager', 'BillingExec'], 0)
    b3.manage_permission(ListFolderContents, ['LabManager', 'BillingExec'], 0)
    b3.manage_permission(AddBillingProgram, ['LabManager', 'BillingExec'], 0)
    b3.manage_permission(ModifyPortalContent, ['LabManager', 'BillingExec'], 0)
    b3.manage_permission(AddAssayBillingRequest, [], 0)
    b3.manage_permission(AddAliquotPlate, [], 0)
예제 #5
0
def make_billing(portal):
    if 'billing' in portal:
        return

    b1 = create(portal, 'Folder', 'billing', 'Billing')
    b2 = create(b1, 'Folder', 'assaybillingrequests', 'Assay Billing Requests')
    b3 = create(b1, 'Folder', 'billingProgram_workflow', 'Billing Programs')

    disallow_default_contenttypes(b1)
    disallow_default_contenttypes(b2)
    disallow_default_contenttypes(b3)

    b1.setLayout('folder_contents')
    b2.setLayout('folder_contents')
    b3.setLayout('folder_contents')


    # @formatter:off
    b1.manage_permission(AddLIMSRoot, [], 0)
    b1.manage_permission(permissions.AddFolder, [], 0)
    b1.manage_permission(View, ['LabManager', 'BillingExec'], 0)
    b1.manage_permission(AccessContentsInformation, ['LabManager', 'BillingExec'], 0)
    b1.manage_permission(ListFolderContents, ['LabManager', 'BillingExec'], 0)
    b1.manage_permission(AddAssayBillingRequest, ['LabManager', 'BillingExec'], 0)
    b1.manage_permission(ModifyPortalContent, ['LabManager', 'BillingExec'], 0)
    b1.manage_permission(AddAssayBillingRequest,[],0)
    b1.manage_permission(AddBillingProgram,[],0)
    b1.manage_permission(AddAliquotPlate,[],0)

    b2.manage_permission(AddLIMSRoot, [], 0)
    b2.manage_permission(permissions.AddFolder, [], 0)
    b2.manage_permission(View, ['LabManager', 'BillingExec'], 0)
    b2.manage_permission(AccessContentsInformation, ['LabManager', 'BillingExec'], 0)
    b2.manage_permission(ListFolderContents, ['LabManager', 'BillingExec'], 0)
    b2.manage_permission(ModifyPortalContent, ['LabManager', 'BillingExec'], 0)
    b2.manage_permission(AddAssayBillingRequest, ['LabManager', 'BillingExec'], 0)
    b2.manage_permission(AddBillingProgram,[],0)
    b2.manage_permission(AddAliquotPlate,[],0)

    b2.manage_permission(AddLIMSRoot, [], 0)
    b3.manage_permission(permissions.AddFolder, [], 0)
    b3.manage_permission(View, ['LabManager', 'BillingExec'], 0)
    b3.manage_permission(AccessContentsInformation, ['LabManager', 'BillingExec'], 0)
    b3.manage_permission(ListFolderContents, ['LabManager', 'BillingExec'], 0)
    b3.manage_permission(AddBillingProgram, ['LabManager', 'BillingExec'], 0)
    b3.manage_permission(ModifyPortalContent, ['LabManager', 'BillingExec'], 0)
    b3.manage_permission(AddAssayBillingRequest, [],0)
    b3.manage_permission(AddAliquotPlate,[],0)
예제 #6
0
 def create_test_participant(self):
     return content.create(
         container=self.portal,
         type=self.participant_name,
         id='sample-participant',
         programName=content.get_uuid(obj=self.program),
     )
예제 #7
0
    def import_objects(self, objects):

        good_count = 0
        ignored_count = 0
        for obj in objects:
            params = self.import_object(obj)

            # take care of harvested dct:Indentifier/adms:Identifier
            params.update(handle_identifiers(obj))

            # Special case of isDefiendBy. If not given use rdfabout URI
            attribute = getattr(obj, 'rdfs_isDefinedBy')
            if attribute:
                att_data = str(attribute.first)
            else:
                att_data = str(getattr(obj, 'subject'))

            params['rdfs_isDefinedBy'] = att_data

            # Get a label for the item
            label = str(getattr(obj, 'dc_identifier'))

            # if there is no title use the dc_identifier
            if not params['dct_title']:
                params['dct_title'] = label

            if isinstance(label, dict):
                id = label[self.default_language]
            elif isinstance(label, list):
                id = label[0]
            else:
                id = label
            id = idnormalizer.normalize(id)

            if isinstance(params['dct_title'], dict):
                title = params['dct_title'][self.default_language]
            elif isinstance(params['dct_title'], list):
                title = params['dct_title'][0]
            else:
                title = params['dct_title']

            try:
                # create a license document object
                new_obj = content.create(container=self.context,
                                         type=self.object_dx_class,
                                         id=id,
                                         title=title,
                                         **params)
            # skip already existing licenses
            except BadRequest:
                ignored_count += 1
                continue
            else:
                good_count += 1

            # set adms_identifier to the local URI of the item
            if new_obj.adms_identifier is None:
                new_obj.adms_identifier = new_obj.absolute_url()

        return good_count, ignored_count
예제 #8
0
def populate_calendar(obj, event):

    if obj.has_key('index'):
        return

    collection = contentapi.create(obj,
                                   'Collection',
                                   id='index',
                                   title=obj.Title())

    collection.setLayout('solgemafullcalendar_view')

    collection.query = [{
        'i': 'portal_type',
        'o': 'plone.app.querystring.operation.selection.is',
        'v': ['Event']
    }, {
        'i': 'path',
        'o': 'plone.app.querystring.operation.string.relativePath',
        'v': '../'
    }]

    obj.setDefaultPage('index')

    collection.reindexObject()
    obj.reindexObject()

    request = getRequest()
    request.response.redirect(collection.absolute_url())
예제 #9
0
    def _setObject(self,
                   id,
                   object,
                   roles=None,
                   user=None,
                   set_owner=1,
                   suppress_events=False):
        nearest_folder = library_utils.get_library_folder(self)
        path_in_library = library_utils.get_path_in_library(self)
        if nearest_folder is not None:
            nearest_folder_path = library_utils.get_path_in_library(
                nearest_folder)
            path_in_folder = path_in_library[len(nearest_folder_path):]
            parent = nearest_folder
        else:
            path_in_folder = path_in_library[1:]
            parent = library_utils.get_library(self)

        for name in path_in_folder:
            brain = parent.get_content(name=name, objects=False)[0]
            parent = content_api.create(
                container=parent,
                type=constants.LIBRARY_FOLDER_PORTAL_TYPE,
                id=name,
                title=brain.Title)
        return parent._setObject(id,
                                 object,
                                 roles=roles,
                                 user=user,
                                 set_owner=set_owner,
                                 suppress_events=suppress_events)
 def process_raw_flipped(self, path):
     """Store flipped images in ichips
     """
     flpath = join(path, 'Raw', 'Flipped')
     log = []
     for fn in os.listdir(flpath):
         if 'jpg' not in fn:
             continue
         splits = fn.lower().split('_')
         ichip_id = splits[1].replace('.', '-') + "_%03d" % int(splits[2])
         brains = find(object_provides=IiChip.__identifier__, id=ichip_id)
         if not brains:
             msg = "%s/%s: Can't find ichip '%s'" % (flpath, fn, ichip_id)
             raise RuntimeError(msg)
         ichip = brains[0].getObject()
         try:
             img = create(container=ichip, type='Image', id=fn, title=fn)
         except BadRequest as e:
             msg = "Run import has already been performed! (%s)" % e.message
             raise BadRequest(msg)
         except Unauthorized:
             msg = "Failed to create %s in ichip %s" % (fn, ichip.title)
             raise Unauthorized(msg)
         ts = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M")
         log.append(u"%s: Added image to ichip %s: %s" % (ts, ichip.id, img))
     return log
예제 #11
0
def populate_calendar(obj, event):

    if obj.has_key('index'):
        return

    collection = contentapi.create(obj, 'Collection', id='index',
                                    title=obj.Title())


    collection.setLayout('solgemafullcalendar_view')

    collection.query = [
        {'i': 'portal_type', 
         'o': 'plone.app.querystring.operation.selection.is', 
         'v': ['Event']}, 
        {'i': 'path', 
         'o': 'plone.app.querystring.operation.string.relativePath',
         'v': '../'}
    ]

    obj.setDefaultPage('index')

    collection.reindexObject()
    obj.reindexObject()

    request = getRequest()
    request.response.redirect(collection.absolute_url())
예제 #12
0
    def setUp(self):
        """Custom shared utility setup for tests."""
        self.portal = self.layer['portal']
        self.workflow = api.portal.get_tool('portal_workflow')

        # in tests we have to manually map content types to workflows
        self.workflow.setChainForPortalTypes(['News Item'],
                                             'simple_publication_workflow')

        # add test item
        content.create(type='News Item',
                       title='Tést item',
                       container=self.portal)
        self.newsitem = self.portal['test-item']

        # publish the item
        content.transition(obj=self.newsitem, transition='publish')
예제 #13
0
 def get_calendar_year_and_uid(self):
     calendar_year = content.create(
         container=self.portal,
         type='OIECalendarYear',
         id='2020',
     )
     uid = content.get_uuid(obj=calendar_year)
     return (calendar_year, uid)
예제 #14
0
    def __call__(self):
        form = self.request.form

        aliquot_type = form.get('aliquot_type', False)
        if not aliquot_type:
            msg = u'You must select the type of aliquot to be created.'
            self.context.plone_utils.addPortalMessage(msg)
            self.request.response.redirect(self.context.absolute_url())

        aliquot_volume = form.get('aliquot_volume', False)
        aliquot_count = form.get('aliquot_count', False)
        if not all([aliquot_type, aliquot_volume, aliquot_count]):
            msg = u'One of Aliquot type, volume or count was not defined!'
            self.context.plone_utils.addPortalMessage(msg)
            self.request.response.redirect(self.context.absolute_url())

        try:
            aliquot_volume = int(aliquot_volume)
            aliquot_count = int(aliquot_count)
        except (ValueError, TypeError):
            msg = u'Aliquot volume and count must both be whole numbers!'
            self.context.plone_utils.addPortalMessage(msg)
            self.request.response.redirect(self.context.absolute_url())

        sequence_start = get_sequence_start(self.context.veracis_id)

        # Discover if it's RandD or QC aliquots that we will be creating.
        sample = _get_parent_sample(self.context)
        if IQCSample.providedBy(sample):
            aliquot_portal_type = 'QCAliquot'
        else:
            aliquot_portal_type = 'RandDAliquot'

        # Create aliquots
        for seq in range(sequence_start, sequence_start + aliquot_count):
            _id = "{self.context.veracis_id}-{seq:03d}".format(**locals())
            _title = "{self.context.veracis_id} - {seq:03d}".format(**locals())
            aliquot = create(self.context,
                             aliquot_portal_type,
                             _id,
                             initial_volume=aliquot_volume,
                             aliquot_type=aliquot_type)
            aliquot.setTitle(_title)

        self.context.remaining_volume -= aliquot_volume * aliquot_count
        self.context.reindexObject(idxs=['remaining_volume'])

        msg = '{} {} aliquots created. Remaining volume on "{}" is {} uL' \
            .format(aliquot_count,
                    aliquot_type.lower(),
                    self.context.title,
                    self.context.remaining_volume)
        self.context.plone_utils.addPortalMessage(msg)
        self.request.response.redirect(self.context.absolute_url())
예제 #15
0
 def create_test_program(self, safe_id=True):
     return content.create(
         container=self.portal,
         type=self.program_name,
         id='sample-program',
         calendar_year=self.calendar_year_uid,
         term='1 Fall Interim',
         college_or_unit='B College of Business',
         countries=['Afghanistan'],
         safe_id=safe_id,
     )
예제 #16
0
def make_customer_service(portal):
    if 'customerservice' in portal:
        return

    cs1 = create(portal, 'Folder', 'customerservice', 'Customer Service')
    cs2 = create(cs1, 'Folder', 'customercalls', 'Customer Calls')
    cs3 = create(cs1, 'Folder', 'providercalls', 'Provider Calls')

    disallow_default_contenttypes(cs1)
    disallow_default_contenttypes(cs2)
    disallow_default_contenttypes(cs3)

    cs1.setLayout('folder_contents')
    cs2.setLayout('folder_contents')
    cs3.setLayout('folder_contents')


    # @formatter:off
    cs1.manage_permission(AddLIMSRoot, [], 0)
    cs1.manage_permission(permissions.AddFolder, [], 0)
    cs1.manage_permission(View, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs1.manage_permission(AccessContentsInformation, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs1.manage_permission(ListFolderContents, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs1.manage_permission(AddAssayBillingRequest, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs1.manage_permission(ModifyPortalContent, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)

    cs2.manage_permission(AddLIMSRoot, [], 0)
    cs2.manage_permission(permissions.AddFolder, [], 0)
    cs2.manage_permission(View, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs2.manage_permission(AccessContentsInformation, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs2.manage_permission(ListFolderContents, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs2.manage_permission(AddCustomerServiceCall, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs2.manage_permission(ModifyPortalContent, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)

    cs3.manage_permission(AddLIMSRoot, [], 0)
    cs3.manage_permission(permissions.AddFolder, [], 0)
    cs3.manage_permission(View, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs3.manage_permission(AccessContentsInformation, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs3.manage_permission(ListFolderContents, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs3.manage_permission(AddBillingProgram, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs3.manage_permission(ModifyPortalContent, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
예제 #17
0
    def setUp(self):
        """Custom shared utility setup for tests."""
        self.portal = self.layer['portal']
        self.workflow = api.portal.get_tool('portal_workflow')

        # in tests we have to manually map content types to workflows
        self.workflow.setChainForPortalTypes(
            ['News Item'],
            'simple_publication_workflow'
        )

        # add test item
        content.create(
            type='News Item',
            title='Tést item',
            container=self.portal
        )
        self.newsitem = self.portal['test-item']

        # publish the item
        content.transition(obj=self.newsitem, transition='publish')
예제 #18
0
def create_file(container, filename):
    current_dir = os.path.abspath(os.path.dirname(__file__))
    file_path = os.path.join(current_dir, "profiles/demo/data/", filename)
    if os.path.isfile(file_path):
        contentType = mimetypes.guess_type(file_path)[0]
        title = os.path.basename(file_path)
        with open(file_path, "rb") as fd:
            file_obj = content.create(container=container,
                                      type="File",
                                      title=title)
            file_obj.file = NamedFile(data=fd,
                                      filename=title,
                                      contentType=contentType)
예제 #19
0
    def create_objects(self, good_count, ignored_count):
        for params in self.data:
            titles = params['dct_title'].copy()
            for key in params['dct_title'].keys():
                if key not in self.all_languages:
                    del titles[key]
            if len(titles) <= 1:
                ignored_count += 1
                continue
            params['dct_title'] = titles

            id = self.get_language_value(params, 'dc_identifier')
            if not id:
                ignored_count += 1
                continue
            id = idnormalizer.normalize(id)

            title = self.get_language_value(params, 'dct_title')

            if not title:
                ignored_count += 1
                continue

            try:
                # create a license document object
                content.create(
                    container=self.context,
                    type=self.object_dx_class,
                    id=id,
                    title=title,
                    **params)
            # skip already existing licenses
            except BadRequest:
                ignored_count += 1
                continue
            else:
                good_count += 1
        return good_count, ignored_count
예제 #20
0
def make_executive(portal):
    if 'executive' in portal:
        return

    ex1 = create(portal, 'Folder', 'executive', 'Executive')
    ex2 = create(ex1, 'Folder', 'reports', 'Reports')

    disallow_default_contenttypes(ex1)
    disallow_default_contenttypes(ex2)

    ex1.setLayout('folder_contents')
    ex2.setLayout('folder_contents')

    ex1.manage_permission(AddLIMSRoot, [], 0)

    ex1.manage_permission(
        permissions.AddFolder, [], 0)
    ex1.manage_permission(
        View, ['LabManager', 'Executive'], 0)
    ex1.manage_permission(
        AccessContentsInformation, ['LabManager', 'Executive'], 0)
    ex1.manage_permission(
        ListFolderContents, ['LabManager', 'Executive'], 0)
    ex1.manage_permission(
        ModifyPortalContent, ['LabManager', 'Executive'], 0)

    ex2.manage_permission(AddLIMSRoot, [], 0)
    ex2.manage_permission(
        permissions.AddFolder, [], 0)
    ex2.manage_permission(
        View, ['LabManager', 'Executive'], 0)
    ex2.manage_permission(
        AccessContentsInformation, ['LabManager', 'Executive'], 0)
    ex2.manage_permission(
        ListFolderContents, ['LabManager', 'Executive'], 0)
    ex2.manage_permission(
        ModifyPortalContent, ['LabManager', 'Executive'], 0)
예제 #21
0
def add_folder(portal_root, folder_name, folder_type):
    """Add a folder for the exclusive addition of certain CTs"""
    folder = portal_root.get(folder_name)
    if not folder:
        types = portal.get_tool('portal_types')
        fti = types.getTypeInfo(folder_type)
        fti.global_allow = True
        folder = content.create(
            container=portal_root,
            type=folder_type,
            id=folder_name,
            title=str(folder_name),
        )
        fti.global_allow = False
        _publish(folder)
예제 #22
0
    def test_marshall(self):
        obj = create(
            container=self.portal,
            type=constants.CT_DCAT_CATALOG,
            id='dcat_catalog_test',
        )

        target = RDFMarshallTarget()
        marshaller = queryMultiAdapter(
            (obj, target),
            interface=IMarshallSource,
        )
        marshaller.marshall()

        result = target._store.reader.graph.serialize()
        self.assertTrue(b'dcat_catalog_test' in result)
예제 #23
0
    def test_get_with_sub_site(self):
        """Using getSite() alone is not enough to get the portal. It
        will return the closest site, which may return a sub site
        instead of the portal.

        Set a different local site manager and test that portal.get()
        still returns the portal.
        """
        a_site = content.create(container=self.portal, type="Folder", title="A Site")
        a_site.setSiteManager(LocalSiteManager(a_site))

        setSite(a_site)

        self.assertEqual(portal.get(), self.portal)

        # cleanup
        setSite(self.portal)
예제 #24
0
    def save_run(self):
        """Create initial run
        """

        values = get_serializeArray_form_values(self.request)

        try:
            assay = find(object_provides=IiChipAssay.__identifier__,
                         Title=values['assay_name'])[0].getObject()
        except IndexError:
            raise InvalidAssaySelected(values['assay_name'])

        plates, ichips, aliquots = self.transmogrify_inputs(values['plates'])
        plates = self.remove_empty_plates(plates)
        plates = self.reorder_plates(plates)

        solutions = [values[x] for x in values if x.startswith('solution-')]

        self.transition_plate_contents(ichips, aliquots, 'queue')
        lab_users = LabUsersUserVocabulary(self).by_value
        planner = lab_users.get(values['run_planner'], '')
        operator = lab_users.get(values['run_planner'], '')

        brain = find(object_provides=ITestRuns.__identifier__)[0]
        folder = brain.getObject()

        try:
            run_number = int(values['run_number'])
        except (ValueError, TypeError):
            raise TypeError("Run number must be a number.")

        run = create(
            folder,
            'TestRun',
            title=values['assay_name'],
            assay_name=assay.title,
            assay_uid=assay.UID(),
            run_number=run_number,
            run_date=values['run_date'],
            run_planner=planner.title if planner else '',
            run_operator=operator.title if operator else '',
            plates=plates,
            solutions=solutions
        )
        return run
예제 #25
0
    def test_get_with_sub_site(self):
        """Using getSite() alone is not enough to get the portal. It
        will return the closest site, which may return a sub site
        instead of the portal.

        Set a different local site manager and test that portal.get()
        still returns the portal.
        """
        a_site = content.create(
            container=self.portal, type="Folder", title="A Site")
        a_site.setSiteManager(LocalSiteManager(a_site))

        setSite(a_site)

        self.assertEqual(portal.get(), self.portal)

        # cleanup
        setSite(self.portal)
예제 #26
0
def iChipLotAdded(instance, event):
    """iChipLot has been added, some configuration and permissions
    to set on the new folder
    """

    # Set default permissions for a new ichiplot
    instance.manage_permission(delete_objects, [], 0)
    instance.manage_permission(AddiChip, ['LabManager', 'LabClerk'], 0)
    disallow_default_contenttypes(instance)

    # I want to create X amount of iChips from form value.
    for x in range(1, instance.nr_ichips + 1):
        ichip = create(container=instance,
                       title="{0}_{1:03d}".format(instance.title, x),
                       type='iChip',
                       ichip_id="{0}_{1:03d}".format(instance.title, x))
        # Configure each ichip to reflect the parent's settings
        ichip.frames = instance.frames
예제 #27
0
def iChipLotAdded(instance, event):
    """iChipLot has been added, some configuration and permissions
    to set on the new folder
    """

    # Set default permissions for a new ichiplot
    instance.manage_permission(delete_objects, [], 0)
    instance.manage_permission(AddiChip, ['LabManager', 'LabClerk'], 0)
    disallow_default_contenttypes(instance)

    # I want to create X amount of iChips from form value.
    for x in range(1, instance.nr_ichips + 1):
        ichip = create(container=instance,
                       title = "{0}_{1:03d}".format(instance.title, x),
                       type='iChip',
                       ichip_id="{0}_{1:03d}".format(instance.title, x))
        # Configure each ichip to reflect the parent's settings
        ichip.frames = instance.frames
예제 #28
0
    def save_run(self):
        """Create initial run
        """

        values = get_serializeArray_form_values(self.request)

        try:
            assay = find(object_provides=IiChipAssay.__identifier__,
                         Title=values['assay_name'])[0].getObject()
        except IndexError:
            raise InvalidAssaySelected(values['assay_name'])

        plates, ichips, aliquots = self.transmogrify_inputs(values['plates'])
        plates = self.remove_empty_plates(plates)
        plates = self.reorder_plates(plates)

        solutions = [values[x] for x in values if x.startswith('solution-')]

        self.transition_plate_contents(ichips, aliquots, 'queue')
        lab_users = LabUsersUserVocabulary(self).by_value
        planner = lab_users.get(values['run_planner'], '')
        operator = lab_users.get(values['run_planner'], '')

        brain = find(object_provides=ITestRuns.__identifier__)[0]
        folder = brain.getObject()

        try:
            run_number = int(values['run_number'])
        except (ValueError, TypeError):
            raise TypeError("Run number must be a number.")

        run = create(folder,
                     'TestRun',
                     title=values['assay_name'],
                     assay_name=assay.title,
                     assay_uid=assay.UID(),
                     run_number=run_number,
                     run_date=values['run_date'],
                     run_planner=planner.title if planner else '',
                     run_operator=operator.title if operator else '',
                     plates=plates,
                     solutions=solutions)
        return run
예제 #29
0
    def test_create_serveitic_folder_structure(self):
        serveitic = create(self.portal,
                           type='serveitic',
                           id='serveitic-1',
                           title='Servei TIC 1')

        self.assert_content_in(serveitic, 'el-servei', 'Folder', 'El servei')
        self.assert_content_in(serveitic['el-servei'], 'descripcio-del-servei',
                               'Document', 'Descripció del servei')
        self.assert_content_in(serveitic['el-servei'], 'normativa', 'Document',
                               'Normativa')
        self.assert_content_in(serveitic['el-servei'], 'procediments',
                               'Document', 'Procediments')
        self.assert_content_in(serveitic['el-servei'], 'evolucio-del-servei',
                               'Document', 'Evolució del servei')
        self.assert_content_in(serveitic['el-servei'], 'errors-coneguts',
                               'Document', 'Errors coneguts')

        self.assert_content_in(serveitic, 'documentacio', 'Folder',
                               'Documentació')
        self.assert_content_in(serveitic['documentacio'], 'manuals', 'Folder',
                               'Manuals')
        self.assert_content_in(serveitic['documentacio']['manuals'], 'manual',
                               'Document', 'Manual')
        self.assert_content_in(serveitic['documentacio'], 'casos-dus',
                               'Document', "Casos d'ús")

        self.assert_content_in(serveitic, 'faq', 'Folder', 'FAQ')
        self.assert_content_in(serveitic['faq'], 'faq-1', 'Document', 'FAQ-1')

        self.assert_content_in(serveitic, 'doc-tecnica', 'Folder',
                               'Doc tècnica')
        self.assert_content_in(serveitic['doc-tecnica'], 'fitxa-tecnica',
                               'Document', 'Fitxa tècnica')
        self.assert_content_in(serveitic['doc-tecnica'],
                               'documentacio-de-referencia', 'Document',
                               "Documentació de referència")
        self.assert_content_in(serveitic['doc-tecnica'], 'enllacos',
                               'Document', "Enllaços")

        self.assert_content_in(serveitic, 'suggeriments', 'Folder',
                               'Suggeriments')
    def process_out_figures(self, path):
        """Store images in samples
        """
        figpath = join(path, 'Out', 'Figures')
        log = []
        for fn in os.listdir(figpath):
            if 'png' not in fn:
                continue

            aliquot = self.get_aliquot_from_fn(fn)

            try:
                img = create(container=aliquot, type='Image', id=fn, title=fn)
            except BadRequest as e:
                msg = "Run import has already been performed! (%s)" % e.message
                raise BadRequest(msg)
            except Unauthorized:
                msg = "Failed to create %s in aliquot %s" % (fn, aliquot.title)
                raise Unauthorized(msg)
            ts = datetime.strftime(datetime.now(), "%Y-%m-%d %H:%M")
            log.append("%s: Added image to aliquot %s: %s" %
                       (ts, aliquot.title, img))
        return log
def add_member_profile(data, customfields=None):
    userid = data.get('user_id', data.get('username'))

    member = user.get(userid=userid)
    site = portal.get()
    mps_dir_id = 'directory'
    mps_dir = hasattr(site, mps_dir_id) and site[mps_dir_id] or None
    if not mps_dir:
        return

    mdata = {}
    fullname = member.getProperty('fullname')
    fullname_parts = fullname.split()
    mdata['nameFirst'] = ' '.join(fullname_parts[:-1])
    mdata['nameLast'] = ' '.join(fullname_parts[-1:])
    mdata['email'] = member.getProperty('email')
    mdata['country'] = member.getProperty('country')
    mdata['countriesOfResidence'] = member.getProperty('country')
    mdata['gender'] = member.getProperty('gender')
    for f in customfields:
        if f in BASE_FIELDS or f in ['country', 'gender']:
            continue
        mdata[f] = member.getProperty(f)
    mp = content.create(
        container=mps_dir,
        type='Member Profile',
        id=userid,
        safe_id=True,
        **mdata)
    site = portal.get()
    site.plone_utils.changeOwnershipOf(mp, userid)
    # mp.changeOwnership(member, recursive=True)
    mp.setCreators([userid])
    mp.reindexObjectSecurity()
    mp.reindexObject()
    return mp
예제 #32
0
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        utils._send_emails = False
        try:

            en_folder = self.context.restrictedTraverse('en')
            if 'organisations' in en_folder:
                org_folder = en_folder.restrictedTraverse('organisations')
            else:
                org_folder = content.create(
                    en_folder,
                    type='osha.hwccontent.organisationfolder',
                    title='Organisations')
            if 'focalpoints' in en_folder:
                fop_folder = en_folder.restrictedTraverse('focalpoints')
            else:
                fop_folder = content.create(
                    en_folder,
                    type='osha.hwccontent.organisationfolder',
                    title='Focalpoints')

            type_mapping = {
                u'Organisation': {
                    'type': 'osha.hwccontent.organisation',
                    'schema': dict(getFieldsInOrder(IOrganisation)),
                    'folder': org_folder,
                    'wf_actions': ('approve_phase_1', ),
                },
                u'Focalpoint': {
                    'type': 'osha.hwccontent.focalpoint',
                    'schema': dict(getFieldsInOrder(IFocalPoint)),
                    'folder': fop_folder,
                    'wf_actions': ('publish', ),
                }
            }

            count = 0
            for data in json.loads(data['json']):

                # Only keep the data that's in the main schema:
                type_info = type_mapping[data['_type']]
                schema = type_info['schema']
                fields = {}

                if data['title'].startswith('MC-'):
                    continue

                for name, field in schema.items():
                    if name in data:
                        value = data[name]
                        if value and INamedImageField.providedBy(field):
                            content_type = data.get('_%s_content_type' % name,
                                                    '')
                            filename = data.get('_%s_filename' % name, None)
                            value = NamedBlobImage(base64.b64decode(value),
                                                   str(content_type), filename)
                        elif value and IRichText.providedBy(field):
                            content_type = data.get('_%s_content_type', None)
                            value = RichTextValue(value, mimeType=content_type)
                        elif name.find("email") >= 0:
                            value = value.strip()

                        fields[name] = value

                new_obj = content.create(container=type_info['folder'],
                                         type=type_info['type'],
                                         id=data['id'],
                                         **fields)
                for transition in type_info['wf_actions']:
                    try:
                        content.transition(new_obj, transition)
                    except Exception:
                        logger.exception(
                            'Could not execute %s transition for %s' %
                            (transition, '/'.join(new_obj.getPhysicalPath())))

                logger.info('Imported %s' % new_obj.getId())
                count += 1

            # Set status on this form page
            self.status = "%s partners imported" % count
        except Exception:
            # Enable emails again:
            utils._send_emails = True
            raise
def populate_calendar(obj, event):

    if obj.has_key('index'):
        return

    index = contentapi.create(obj, 'Document', id='index', title=obj.Title())

    index.setText(index_text)
    index.reindexObject()
    obj.setDefaultPage('index')

    # create container for missions

    mission_container = contentapi.create(obj,
                                          'Folder',
                                          id='missions',
                                          title=u'Missions')

    # create all missions collection
    collection = contentapi.create(obj,
                                   'Collection',
                                   id='all-missions',
                                   title=u'All Missions')

    collection.setLayout('solgemafullcalendar_view')

    collection.query = [{
        'i': 'portal_type',
        'o': 'plone.app.querystring.operation.selection.is',
        'v': ['ploneun.missions.mission']
    }, {
        'i': 'path',
        'o': 'plone.app.querystring.operation.string.relativePath',
        'v': '../missions'
    }]

    collection.reindexObject()

    # create all mission reports collection

    collection = contentapi.create(obj,
                                   'Collection',
                                   id='all-missionreports',
                                   title=u'All Mission Reports')

    collection.query = [{
        'i': 'portal_type',
        'o': 'plone.app.querystring.operation.selection.is',
        'v': ['ploneun.missions.missionreport']
    }, {
        'i': 'path',
        'o': 'plone.app.querystring.operation.string.relativePath',
        'v': '../missions'
    }]

    # create my missions collection
    collection = contentapi.create(obj,
                                   'Collection',
                                   id='my-missions',
                                   title=u'My Missions')
    collection.setLayout('solgemafullcalendar_view')

    collection.query = [{
        'i': 'portal_type',
        'o': 'plone.app.querystring.operation.selection.is',
        'v': ['ploneun.missions.mission']
    }, {
        'i': 'path',
        'o': 'plone.app.querystring.operation.string.relativePath',
        'v': '../missions'
    }, {
        'i':
        'Creator',
        'o':
        'plone.app.querystring.operation.string.currentUser'
    }]

    collection.reindexObject()

    # create my mission reports collection
    collection = contentapi.create(obj,
                                   'Collection',
                                   id='my-missionreports',
                                   title=u'My Mission Reports')

    collection.query = [{
        'i': 'portal_type',
        'o': 'plone.app.querystring.operation.selection.is',
        'v': ['ploneun.missions.mission']
    }, {
        'i': 'path',
        'o': 'plone.app.querystring.operation.string.relativePath',
        'v': '../missions'
    }, {
        'i':
        'Creator',
        'o':
        'plone.app.querystring.operation.string.currentUser'
    }]

    collection.reindexObject()

    # create my mission reports drafts collection

    collection = contentapi.create(obj,
                                   'Collection',
                                   id='my-missionreport-drafts',
                                   title=u'My Mission Report Drafts')

    collection.query = [{
        'i': 'portal_type',
        'o': 'plone.app.querystring.operation.selection.is',
        'v': ['ploneun.missions.missionreport']
    }, {
        'i': 'path',
        'o': 'plone.app.querystring.operation.string.relativePath',
        'v': '../missions'
    }, {
        'i':
        'Creator',
        'o':
        'plone.app.querystring.operation.string.currentUser'
    }, {
        'i': 'review_state',
        'o': 'plone.app.querystring.operation.selection.is',
        'v': ['internal', 'private']
    }]

    collection.reindexObject()

    # create search collection
    collection = contentapi.create(obj,
                                   'Topic',
                                   id='search-missions',
                                   title=u'Search Missions')

    collection = contentapi.create(obj,
                                   'Topic',
                                   id='search-missionreports',
                                   title=u'Search Mission Reports')

    obj.reindexObject()

    request = getRequest()
    request.response.redirect(index.absolute_url())
예제 #34
0
    def handleApply(self, action):
        data, errors = self.extractData()
        if errors:
            self.status = self.formErrorsMessage
            return

        utils._send_emails = False
        try:

            en_folder = self.context.restrictedTraverse('en')
            if 'organisations' in en_folder:
                org_folder = en_folder.restrictedTraverse('organisations')
            else:
                org_folder = content.create(en_folder,
                                            type='osha.hwccontent.organisationfolder',
                                            title='Organisations')
            if 'focalpoints' in en_folder:
                fop_folder = en_folder.restrictedTraverse('focalpoints')
            else:
                fop_folder = content.create(en_folder,
                                            type='osha.hwccontent.organisationfolder',
                                            title='Focalpoints')

            type_mapping = {
                u'Organisation': {
                    'type': 'osha.hwccontent.organisation',
                    'schema': dict(getFieldsInOrder(IOrganisation)),
                    'folder': org_folder,
                    'wf_actions': ('approve_phase_1',),
                },

                u'Focalpoint': {
                    'type': 'osha.hwccontent.focalpoint',
                    'schema': dict(getFieldsInOrder(IFocalPoint)),
                    'folder': fop_folder,
                    'wf_actions': ('publish',),
                }
            }

            count = 0
            for data in json.loads(data['json']):

                # Only keep the data that's in the main schema:
                type_info = type_mapping[data['_type']]
                schema = type_info['schema']
                fields = {}

                if data['title'].startswith('MC-'):
                    continue

                for name, field in schema.items():
                    if name in data:
                        value = data[name]
                        if value and INamedImageField.providedBy(field):
                            content_type = data.get('_%s_content_type' % name, '')
                            filename = data.get('_%s_filename' % name , None)
                            value = NamedBlobImage(base64.b64decode(value), str(content_type), filename)
                        elif value and IRichText.providedBy(field):
                            content_type = data.get('_%s_content_type', None)
                            value = RichTextValue(value, mimeType=content_type)
                        elif name.find("email") >= 0:
                            value = value.strip()

                        fields[name] = value

                new_obj = content.create(container=type_info['folder'],
                                         type= type_info['type'],
                                         id=data['id'],
                                         **fields)
                for transition in type_info['wf_actions']:
                    try:
                        content.transition(new_obj, transition)
                    except Exception:
                        logger.exception('Could not execute %s transition for %s' % (transition, '/'.join(new_obj.getPhysicalPath())))

                logger.info('Imported %s' % new_obj.getId())
                count += 1

            # Set status on this form page
            self.status = "%s partners imported" % count
        except Exception:
            # Enable emails again:
            utils._send_emails = True
            raise
예제 #35
0
def make_customer_service(portal):
    if 'customerservice' in portal:
        return

    cs1 = create(portal, 'Folder', 'customerservice', 'Customer Service')
    cs2 = create(cs1, 'Folder', 'customercalls', 'Customer Calls')
    cs3 = create(cs1, 'Folder', 'providercalls', 'Provider Calls')

    disallow_default_contenttypes(cs1)
    disallow_default_contenttypes(cs2)
    disallow_default_contenttypes(cs3)

    cs1.setLayout('folder_contents')
    cs2.setLayout('folder_contents')
    cs3.setLayout('folder_contents')

    # @formatter:off
    cs1.manage_permission(AddLIMSRoot, [], 0)
    cs1.manage_permission(permissions.AddFolder, [], 0)
    cs1.manage_permission(
        View, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs1.manage_permission(
        AccessContentsInformation,
        ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs1.manage_permission(
        ListFolderContents,
        ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs1.manage_permission(
        AddAssayBillingRequest,
        ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs1.manage_permission(
        ModifyPortalContent,
        ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)

    cs2.manage_permission(AddLIMSRoot, [], 0)
    cs2.manage_permission(permissions.AddFolder, [], 0)
    cs2.manage_permission(
        View, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs2.manage_permission(
        AccessContentsInformation,
        ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs2.manage_permission(
        ListFolderContents,
        ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs2.manage_permission(
        AddCustomerServiceCall,
        ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs2.manage_permission(
        ModifyPortalContent,
        ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)

    cs3.manage_permission(AddLIMSRoot, [], 0)
    cs3.manage_permission(permissions.AddFolder, [], 0)
    cs3.manage_permission(
        View, ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs3.manage_permission(
        AccessContentsInformation,
        ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs3.manage_permission(
        ListFolderContents,
        ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs3.manage_permission(
        AddBillingProgram,
        ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
    cs3.manage_permission(
        ModifyPortalContent,
        ['LabManager', 'LabClerk', 'SalesRep', 'BillingExec'], 0)
        if not fullname:
            logger.error('No fullname found. Skip')
            continue
        fullname = safe_decode(fullname)
        fullname_parts = fullname.split()
        data['nameFirst'] = ' '.join(fullname_parts[:-1])
        data['nameLast'] = ' '.join(fullname_parts[-1:])
        logger.info('FirstName: %s - LastName: %s' %
                    (data['nameFirst'], data['nameLast']))
        location = member.getProperty('location')
        if location:
            cc = get_country_code(location)
            if cc:
                data['country'] = cc
                #                  data['citizenship'] = cc
                data['countriesOfResidence'] = cc
        try:
            newm = content.create(type='Member Profile',
                                  title=fullname,
                                  container=mps_dir,
                                  **data)
        except Exception as e:
            import pdb
            pdb.set_trace()
        logger.info('New member profile created at: %s' % newm.absolute_url())
        done += 1
        if done % 50 == 0:
            transaction.get().commit()
logger.warning('Total found: %s' % len(present))
logger.warning('Total missing: %s' % len(absent))
예제 #37
0
def create_demo_content(context):
    """
    Initializes demo profile with demo content
    :param context:
    """
    portal = api.portal.get()
    current_dir = os.path.abspath(os.path.dirname(__file__))
    json_path = os.path.join(current_dir, "profiles/demo/data/data.json")

    with open(json_path) as json_str:
        data = json.load(json_str)
        api.portal.set_registry_record(
            "plonemeeting.portal.core.global_categories", data["categories"])

        normalizer = getUtility(IIDNormalizer)
        for institution in data["institutions"]:
            institution_id = normalizer.normalize(institution["title"])
            institution_obj = content.create(
                container=portal,
                type="Institution",
                id=institution_id,
                title=institution["title"],
                representatives_mappings=institution[
                    "representatives_mappings"],
                plonemeeting_url=institution["plonemeeting_url"],
                username=institution["username"],
                password=institution["password"],
                meeting_config_id=institution["meeting_config_id"],
                additional_meeting_query_string_for_list=institution[
                    "additional_meeting_query_string_for_list"],
                additional_published_items_query_string=institution[
                    "additional_published_items_query_string"],
                item_decision_formatting_tal=institution[
                    "item_decision_formatting_tal"],
                info_annex_formatting_tal=institution[
                    "info_annex_formatting_tal"],
            )
            content.transition(obj=institution_obj, transition="publish")

            user = api.user.create(
                username="******".format(institution_obj.id),
                email="*****@*****.**",
                password="******",
            )

            group = api.group.get(
                format_institution_managers_group_id(institution_obj))
            group.addMember(user.id)

            for meeting in institution["meetings"]:
                date_time = dateutil.parser.parse(meeting["datetime"])
                meeting_obj = content.create(
                    container=institution_obj,
                    type="Meeting",
                    title=meeting["title"],
                    date_time=date_time,
                    plonemeeting_last_modified=dateutil.parser.parse(
                        meeting["plonemeeting_last_modified"]),
                )
                content.transition(obj=meeting_obj,
                                   transition="send_to_project")
                content.transition(obj=meeting_obj, transition="publish")

                for item in meeting["items"]:
                    decision = RichTextValue(item["decision"], "text/html",
                                             "text/html")
                    item_obj = content.create(
                        container=meeting_obj,
                        type="Item",
                        title=item["title"],
                        sortable_number=item["sortable_number"],
                        number=item["number"],
                        representatives_in_charge=item[
                            "representatives_in_charge"],
                        decision=decision,
                        category=item["category"],
                        plonemeeting_last_modified=dateutil.parser.parse(
                            meeting["plonemeeting_last_modified"]),
                    )

                    if "files" in item:
                        for file in item["files"]:
                            create_file(item_obj, file)
예제 #38
0
    def test_create_serveitic_folder_structure(self):
        serveitic = create(
            self.portal,
            type='serveitic',
            id='serveitic-1',
            title='Servei TIC 1'
            )

        self.assert_content_in(serveitic, 'el-servei', 'Folder', 'El servei')
        self.assert_content_in(
            serveitic['el-servei'],
            'descripcio-del-servei',
            'Document',
            'Descripció del servei')
        self.assert_content_in(
            serveitic['el-servei'],
            'normativa',
            'Document',
            'Normativa')
        self.assert_content_in(
            serveitic['el-servei'],
            'procediments',
            'Document',
            'Procediments')
        self.assert_content_in(
            serveitic['el-servei'],
            'evolucio-del-servei',
            'Document',
            'Evolució del servei')
        self.assert_content_in(
            serveitic['el-servei'],
            'errors-coneguts',
            'Document',
            'Errors coneguts')

        self.assert_content_in(serveitic, 'documentacio', 'Folder',
                               'Documentació')
        self.assert_content_in(
            serveitic['documentacio'],
            'manuals',
            'Folder',
            'Manuals')
        self.assert_content_in(
            serveitic['documentacio'],
            'casos-dus',
            'Document',
            "Casos d'ús")

        self.assert_content_in(serveitic, 'faq', 'Folder', 'FAQ')

        self.assert_content_in(serveitic, 'doc-tecnica', 'Folder',
                               'Doc tècnica')
        self.assert_content_in(
            serveitic['doc-tecnica'],
            'documentacio-tecnica',
            'Document',
            'Documentació tècnica')
        self.assert_content_in(
            serveitic['doc-tecnica'],
            'documentacio-de-referencia',
            'Document',
            "Documentació de referència")
        self.assert_content_in(
            serveitic['doc-tecnica'],
            'enllacos',
            'Document',
            "Enllaços")

        self.assert_content_in(serveitic, 'suggeriments', 'Folder',
                               'Suggeriments')
def populate_calendar(obj, event):

    if obj.has_key('index'):
        return

    index = contentapi.create(obj, 'Document', id='index', title=obj.Title())

    index.setText(index_text)
    index.reindexObject()
    obj.setDefaultPage('index')

    # create container for missions

    mission_container = contentapi.create(obj, 'Folder', id='missions',
            title=u'Missions')

    # create all missions collection
    collection = contentapi.create(obj, 'Collection', id='all-missions',
                                    title=u'All Missions')


    collection.setLayout('solgemafullcalendar_view')

    collection.query = [
        {'i': 'portal_type', 
         'o': 'plone.app.querystring.operation.selection.is', 
         'v': ['ploneun.missions.mission']}, 
        {'i': 'path', 
         'o': 'plone.app.querystring.operation.string.relativePath',
         'v': '../missions'}
    ]

    collection.reindexObject()

    # create all mission reports collection

    collection = contentapi.create(obj, 'Collection', id='all-missionreports',
                                    title=u'All Mission Reports')


    collection.query = [
        {'i': 'portal_type', 
         'o': 'plone.app.querystring.operation.selection.is', 
         'v': ['ploneun.missions.missionreport']}, 
        {'i': 'path', 
         'o': 'plone.app.querystring.operation.string.relativePath',
         'v': '../missions'}
    ]

    # create my missions collection
    collection = contentapi.create(obj, 'Collection', id='my-missions',
            title=u'My Missions')
    collection.setLayout('solgemafullcalendar_view')

    collection.query = [
        {'i': 'portal_type',
         'o': 'plone.app.querystring.operation.selection.is',
         'v': ['ploneun.missions.mission']},
        {'i': 'path',
         'o': 'plone.app.querystring.operation.string.relativePath',
         'v': '../missions'},
        {'i': 'Creator', 
         'o': 'plone.app.querystring.operation.string.currentUser'}
    ]

    collection.reindexObject()

    # create my mission reports collection
    collection = contentapi.create(obj, 'Collection', id='my-missionreports',
            title=u'My Mission Reports')

    collection.query = [
        {'i': 'portal_type',
         'o': 'plone.app.querystring.operation.selection.is',
         'v': ['ploneun.missions.mission']},
        {'i': 'path',
         'o': 'plone.app.querystring.operation.string.relativePath',
         'v': '../missions'},
        {'i': 'Creator', 
         'o': 'plone.app.querystring.operation.string.currentUser'}
    ]

    collection.reindexObject()

    # create my mission reports drafts collection

    collection = contentapi.create(obj, 'Collection',
            id='my-missionreport-drafts',
            title=u'My Mission Report Drafts')

    collection.query = [
        {'i': 'portal_type',
         'o': 'plone.app.querystring.operation.selection.is',
         'v': ['ploneun.missions.missionreport']},
        {'i': 'path',
         'o': 'plone.app.querystring.operation.string.relativePath',
         'v': '../missions'},
        {'i': 'Creator', 
         'o': 'plone.app.querystring.operation.string.currentUser'},
        {'i': 'review_state', 
         'o': 'plone.app.querystring.operation.selection.is', 
         'v': ['internal', 'private']}
    ]

    collection.reindexObject()

    # create search collection
    collection = contentapi.create(obj, 'Topic', id='search-missions',
                                    title=u'Search Missions')

    collection = contentapi.create(obj, 'Topic', id='search-missionreports',
                                    title=u'Search Mission Reports')


    obj.reindexObject()

    request = getRequest()
    request.response.redirect(index.absolute_url())