Add support for Notes tab in profile view
This commit is contained in:
parent
105dab7a3d
commit
d77de76c97
2 changed files with 357 additions and 32 deletions
|
@ -60,7 +60,6 @@ class PersonView(MasterView):
|
|||
has_versions = True
|
||||
bulk_deletable = True
|
||||
is_contact = True
|
||||
manage_notes_from_profile_view = False
|
||||
supports_autocomplete = True
|
||||
configurable = True
|
||||
|
||||
|
@ -460,6 +459,8 @@ class PersonView(MasterView):
|
|||
'employee_view_url': self.request.route_url('employees.view', uuid=employee.uuid) if employee else None,
|
||||
'employee_history': employee.get_current_history() if employee else None,
|
||||
'employee_history_data': self.get_context_employee_history(employee),
|
||||
'notes_data': self.get_context_notes(person),
|
||||
'note_type_options': self.get_note_type_options(),
|
||||
'users_data': self.get_context_users(person),
|
||||
'dynamic_content_title': self.get_context_content_title(person),
|
||||
}
|
||||
|
@ -752,6 +753,29 @@ class PersonView(MasterView):
|
|||
})
|
||||
return data
|
||||
|
||||
def get_context_notes(self, person):
|
||||
data = []
|
||||
notes = sorted(person.notes, key=lambda n: n.created, reverse=True)
|
||||
for note in notes:
|
||||
data.append(self.get_context_note(note))
|
||||
return data
|
||||
|
||||
def get_context_note(self, note):
|
||||
app = self.get_rattail_app()
|
||||
return {
|
||||
'uuid': note.uuid,
|
||||
'note_type': note.type,
|
||||
'note_type_display': self.enum.PERSON_NOTE_TYPE.get(note.type, note.type),
|
||||
'subject': note.subject,
|
||||
'text': note.text,
|
||||
'created_display': raw_datetime(self.rattail_config, note.created),
|
||||
'created_by_display': str(note.created_by),
|
||||
}
|
||||
|
||||
def get_note_type_options(self):
|
||||
return [{'value': k, 'label': v}
|
||||
for k, v in self.enum.PERSON_NOTE_TYPE.items()]
|
||||
|
||||
def get_context_users(self, person):
|
||||
data = []
|
||||
users = person.users
|
||||
|
@ -1385,6 +1409,8 @@ class PersonView(MasterView):
|
|||
if mode == 'create':
|
||||
del schema['uuid']
|
||||
form = forms.Form(schema=schema, request=self.request)
|
||||
if mode != 'delete':
|
||||
form.set_validator('note_type', colander.OneOf(self.enum.PERSON_NOTE_TYPE))
|
||||
return form
|
||||
|
||||
def profile_add_note(self):
|
||||
|
@ -1406,11 +1432,15 @@ class PersonView(MasterView):
|
|||
person.notes.append(note)
|
||||
return note
|
||||
|
||||
def profile_add_note_success(self, note):
|
||||
return self.redirect(self.get_action_url('view_profile', person))
|
||||
def profile_add_note_success(self, note, person=None):
|
||||
return {
|
||||
'notes': self.get_context_notes(person or note.person),
|
||||
}
|
||||
|
||||
def profile_add_note_failure(self, person, form):
|
||||
return self.redirect(self.get_action_url('view_profile', person))
|
||||
return {
|
||||
'error': str(form.make_deform_form().error),
|
||||
}
|
||||
|
||||
def profile_edit_note(self):
|
||||
person = self.get_instance()
|
||||
|
@ -1429,10 +1459,10 @@ class PersonView(MasterView):
|
|||
return note
|
||||
|
||||
def profile_edit_note_success(self, note):
|
||||
return self.redirect(self.get_action_url('view_profile', person))
|
||||
return self.profile_add_note_success(note)
|
||||
|
||||
def profile_edit_note_failure(self, person, form):
|
||||
return self.redirect(self.get_action_url('view_profile', person))
|
||||
return self.profile_add_note_failure(person, form)
|
||||
|
||||
def profile_delete_note(self):
|
||||
person = self.get_instance()
|
||||
|
@ -1449,10 +1479,10 @@ class PersonView(MasterView):
|
|||
self.Session.delete(note)
|
||||
|
||||
def profile_delete_note_success(self, person):
|
||||
return self.redirect(self.get_action_url('view_profile', person))
|
||||
return self.profile_add_note_success(None, person=person)
|
||||
|
||||
def profile_delete_note_failure(self, person, form):
|
||||
return self.redirect(self.get_action_url('view_profile', person))
|
||||
return self.profile_add_note_failure(person, form)
|
||||
|
||||
def make_user(self):
|
||||
uuid = self.request.POST['person_uuid']
|
||||
|
@ -1657,32 +1687,41 @@ class PersonView(MasterView):
|
|||
permission='people_profile.view_versions',
|
||||
renderer='json')
|
||||
|
||||
# manage notes from profile view
|
||||
if cls.manage_notes_from_profile_view:
|
||||
# profile - add note
|
||||
config.add_tailbone_permission('people_profile',
|
||||
'people_profile.add_note',
|
||||
"Add new Note records")
|
||||
config.add_route(f'{route_prefix}.profile_add_note',
|
||||
f'{instance_url_prefix}/profile/new-note',
|
||||
request_method='POST')
|
||||
config.add_view(cls, attr='profile_add_note',
|
||||
route_name=f'{route_prefix}.profile_add_note',
|
||||
permission='people_profile.add_note',
|
||||
renderer='json')
|
||||
|
||||
# add note
|
||||
config.add_tailbone_permission('people_profile', 'people_profile.add_note',
|
||||
"Add new {} Note records".format(model_title))
|
||||
config.add_route('{}.profile_add_note'.format(route_prefix), '{}/{{{}}}/profile/new-note'.format(url_prefix, model_key),
|
||||
request_method='POST')
|
||||
config.add_view(cls, attr='profile_add_note', route_name='{}.profile_add_note'.format(route_prefix),
|
||||
permission='people_profile.add_note')
|
||||
# profile - edit note
|
||||
config.add_tailbone_permission('people_profile',
|
||||
'people_profile.edit_note',
|
||||
"Edit Note records")
|
||||
config.add_route(f'{route_prefix}.profile_edit_note',
|
||||
f'{instance_url_prefix}/profile/edit-note',
|
||||
request_method='POST')
|
||||
config.add_view(cls, attr='profile_edit_note',
|
||||
route_name=f'{route_prefix}.profile_edit_note',
|
||||
permission='people_profile.edit_note',
|
||||
renderer='json')
|
||||
|
||||
# edit note
|
||||
config.add_tailbone_permission('people_profile', 'people_profile.edit_note',
|
||||
"Edit {} Note records".format(model_title))
|
||||
config.add_route('{}.profile_edit_note'.format(route_prefix), '{}/{{{}}}/profile/edit-note'.format(url_prefix, model_key),
|
||||
request_method='POST')
|
||||
config.add_view(cls, attr='profile_edit_note', route_name='{}.profile_edit_note'.format(route_prefix),
|
||||
permission='people_profile.edit_note')
|
||||
|
||||
# delete note
|
||||
config.add_tailbone_permission('people_profile', 'people_profile.delete_note',
|
||||
"Delete {} Note records".format(model_title))
|
||||
config.add_route('{}.profile_delete_note'.format(route_prefix), '{}/{{{}}}/profile/delete-note'.format(url_prefix, model_key),
|
||||
request_method='POST')
|
||||
config.add_view(cls, attr='profile_delete_note', route_name='{}.profile_delete_note'.format(route_prefix),
|
||||
permission='people_profile.delete_note')
|
||||
# profile - delete note
|
||||
config.add_tailbone_permission('people_profile',
|
||||
'people_profile.delete_note',
|
||||
"Delete Note records")
|
||||
config.add_route(f'{route_prefix}.profile_delete_note',
|
||||
f'{instance_url_prefix}/profile/delete-note',
|
||||
request_method='POST')
|
||||
config.add_view(cls, attr='profile_delete_note',
|
||||
route_name=f'{route_prefix}.profile_delete_note',
|
||||
permission='people_profile.delete_note',
|
||||
renderer='json')
|
||||
|
||||
# make user for person
|
||||
config.add_route('{}.make_user'.format(route_prefix), '{}/make-user'.format(url_prefix),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue