##parameters=type_name, datamodel
# $Id: waeup_document_create_do.py 1366 2007-01-27 15:40:19Z joachim $
"""
Create an empty object in the context according to the datamodel.

Datamodel may be examined to create a suitable id.

Returns the created object (usually a proxy).
"""
from Products.CMFCore.utils import getToolByName
request = context.REQUEST
if type_name in ("StudyLevel","StudentStudyLevel"):
    id = datamodel.get('code')
else:
    id = datamodel.get('code').upper()
    datamodel.set('code',id)
##if not id:
##    id = 'my ' + type_name
##id = context.computeId(compute_from=id) # XXX shouldn't use a skin
##
language = datamodel.get('Language')
if not language:
    ts = getToolByName(context, 'translation_service')
    language = ts.getSelectedLanguage()

ttool = getToolByName(context, 'portal_types')
ti = ttool[type_name]
allow_discussion = ti.allowDiscussion()

# Datamodel is passed so that flexti can initialize the object.
new_id = context.invokeFactory(type_name, id, datamodel=datamodel,
                               language=language,
                               allow_discussion=allow_discussion)
if new_id is not None:
    id = new_id
if type_name == "Course":
    d = {}
    ptl = request.get('PATH_TRANSLATED').split('/')
    ai = ptl.index('academics')
    d['faculty'] = ptl[ai+1]
    d['department'] = ptl[ai+2]
    from_dm = ('code','title','semester','credits',)
    for f in from_dm:
        d[f] = datamodel.get(f)
    context.courses_catalog.addRecord(**d)
ob = getattr(context, id)
ob.getContent().edit(mapping=datamodel)

context.notifyCPSDocumentCreation(ob=ob) # BBB obsolete in CPS 3.5.0

return ob
