register.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # coding=utf-8
  2. __author__ = 'marcos'
  3. from django.contrib.contenttypes.models import ContentType
  4. from rapid.forms import getDocumentTemplateForm
  5. from rapid.models import DocumentTemplate
  6. from rapid.views import bare_or_main, ListView, ReadView, UpdateView, CreateView, SelectView, DeleteView,\
  7. update_form_class, RenderDocumentView, add_form_class, get_delete_document_template_view
  8. from rapid.registry import Action, MenuEntry, registry
  9. def _rvw(view_class, action_name):
  10. view_class.action_name = action_name
  11. # noinspection PyShadowingNames
  12. def vw(model):
  13. return bare_or_main(view_class.as_view(model=model))
  14. return vw
  15. def _un_none(v):
  16. if v is None:
  17. return []
  18. else:
  19. return [v]
  20. _crud_actions = [
  21. (False, Action("list", "", [], _rvw(ListView, 'list'), "listar", "fa-list")),
  22. (False, Action("view", "(?P<pk>[0-9]+)", ['pk'], _rvw(ReadView, 'view'), "ver", "fa-eye")),
  23. (True, Action("edit", "(?P<pk>[0-9]+)", ['pk'], _rvw(UpdateView, 'edit'), "editar", "fa-pencil")),
  24. (True, Action("add", "", [], _rvw(CreateView, 'add'), "adicionar", "fa-plus")),
  25. (False, Action("select", "", [], _rvw(SelectView, 'select'), "selecionar", "fa-hand-o-up",
  26. visibility=Action.Visibility.hidden)),
  27. ]
  28. # noinspection PyShadowingNames
  29. def crud(model, read_set, write_set, actions=None, url_name=None, can_erase=False):
  30. if actions:
  31. actions = [(edt, a) for edt, a in _crud_actions if a.name in actions]
  32. else:
  33. actions = _crud_actions
  34. ret = []
  35. for edt, a in actions:
  36. if edt:
  37. ret.append(registry.register_action(a, MenuEntry(model, write_set, url_name=url_name)))
  38. else:
  39. ret.append(registry.register_action(a, MenuEntry(model, read_set, url_name=url_name)))
  40. if can_erase:
  41. a = Action("delete", "(?P<pk>[0-9]+)", ['pk'], _rvw(DeleteView, 'delete'), "apagar", "fa-trash-o")
  42. ret.append(registry.register_action(a, MenuEntry(model, write_set, url_name=url_name)))
  43. return [u for u in ret if u]
  44. # noinspection PyShadowingNames
  45. def instance_form(model, action_name, entry_name, form, permission_set,
  46. url_name=None, icon=None, visibility=None):
  47. if not icon:
  48. icon = ''
  49. a = Action(action_name, "(?P<pk>[0-9]+)", ['pk'], _rvw(update_form_class(form), action_name),
  50. entry_name, icon, visibility)
  51. u = registry.register_action(a, MenuEntry(model, permission_set, url_name=url_name))
  52. return _un_none(u)
  53. # noinspection PyShadowingNames
  54. def select(model, visible_fields, permission_set, url_name=None):
  55. class Vw(SelectView):
  56. fields = visible_fields
  57. a = Action("select", "", [], _rvw(Vw, 'select'), "selecionar", "fa-hand-o-up",
  58. visibility=Action.Visibility.hidden)
  59. u = registry.register_action(a, MenuEntry(model, permission_set, url_name=url_name))
  60. return _un_none(u)
  61. # noinspection PyShadowingNames
  62. def custom_action(model, action, permission, url_name=None):
  63. u = registry.register_action(action, MenuEntry(model, permission, url_name))
  64. return _un_none(u)
  65. # noinspection PyShadowingNames
  66. def document_templates(model, templates_permission, render_permission, url_name=None,
  67. render_visibility=Action.Visibility.details):
  68. ct_model = ContentType.objects.get_for_model(model)
  69. template_generator = lambda n: lambda: ((d.name, [(n, d.pk),],) for
  70. d in DocumentTemplate.objects.filter(model=ct_model))
  71. model_class = model # renamimg because of clash with the next function argument
  72. add_act = Action("add-template", "", (), _rvw(add_form_class(getDocumentTemplateForm(model)), 'add-template'),
  73. "Novo Template", "fa-upload")
  74. del_act = Action("del-template", "(?P<pk>[0-9]+)", (),
  75. _rvw(get_delete_document_template_view(model), 'del-template'), "Excluir Template",
  76. 'fa-trash-o', pick_generator=template_generator('pk'))
  77. render_act = Action("render-template", "(?P<pk>[0-9]+)/(?P<template>[0-9]+)", ('pk',),
  78. RenderDocumentView.as_view,
  79. "Gerar Documento", 'fa-file-word-o', render_visibility,
  80. pick_generator=template_generator('template'),
  81. overlay=Action.Overlay.clear_overlays)
  82. add_r = registry.register_action(add_act, MenuEntry(model, templates_permission, url_name=url_name))
  83. del_r = registry.register_action(del_act, MenuEntry(model, templates_permission, url_name=url_name))
  84. render_r = registry.register_action(render_act, MenuEntry(model, render_permission, url_name=url_name))
  85. return _un_none(add_r) + _un_none(del_r) + _un_none(render_r)