def test_create_detailview06(self): "Default configuration cannot have a related role" with self.assertRaises(ValueError): BrickDetailviewLocation.create_if_needed( brick_id=PropertiesBrick.id_, order=5, zone=BrickDetailviewLocation.RIGHT, model=None, role='superuser', # <== )
def setUpClass(cls): # super(ImprintViewsTestCase, cls).setUpClass() super().setUpClass() BrickDetailviewLocation.create_if_needed( brick_id=ImprintsBrick.id_, order=1, zone=BrickDetailviewLocation.LEFT, ) # BlockPortalLocation.create_or_update(brick_id=ImprintsBrick.id_, order=1, app_name='creme_core') BrickHomeLocation.objects.create(brick_id=ImprintsBrick.id_, order=1)
def test_create_detailview02(self): "For a ContentType" self.assertFalse(BrickDetailviewLocation.config_exists(FakeContact)) order = 4 zone = BrickDetailviewLocation.LEFT brick_id = PropertiesBrick.id_ loc = BrickDetailviewLocation.create_if_needed(brick_id=brick_id, order=order, zone=zone, model=FakeContact) loc = self.get_object_or_fail(BrickDetailviewLocation, pk=loc.pk) self.assertEqual(FakeContact, loc.content_type.model_class()) self.assertEqual(brick_id, loc.brick_id) self.assertEqual(order, loc.order) self.assertEqual(zone, loc.zone) self.assertTrue(BrickDetailviewLocation.config_exists(FakeContact))
def test_create_4_model_brick02(self): "model = None" loc = BrickDetailviewLocation.create_4_model_brick( order=8, zone=BrickDetailviewLocation.BOTTOM, model=None, ) self.assertEqual(1, BrickDetailviewLocation.objects.count()) self.assertEqual('modelblock', loc.brick_id) self.assertIsNone(loc.content_type)
def test_create_4_model_brick03(self): "With a Role" role = UserRole.objects.create(name='Viewer') loc = BrickDetailviewLocation.create_4_model_brick( model=FakeContact, role=role, order=8, zone=BrickDetailviewLocation.BOTTOM, ) self.assertEqual(1, BrickDetailviewLocation.objects.count()) self.assertEqual('modelblock', loc.brick_id) self.assertEqual(role, loc.role)
def test_brick_orga03(self): "Statistics" self.login() orga = Organisation.objects.create(user=self.user, name='NERV') brick_id = bricks.PersonsStatisticsBrick.id_ BrickDetailviewLocation.create_if_needed( brick_id=brick_id, order=1000, zone=BrickDetailviewLocation.LEFT, model=Organisation, ) response = self.assertGET200(orga.get_absolute_url()) self.assertTemplateUsed(response, 'billing/bricks/persons-statistics.html') tree = self.get_html_tree(response.content) self.get_brick_node(tree, brick_id)
def test_display_custombrick03(self): "With FieldsConfig on sub-fields" user = self.login() hidden_fname = 'zipcode' FieldsConfig.create( FakeAddress, descriptions=[(hidden_fname, { FieldsConfig.HIDDEN: True })], ) build_cell = EntityCellRegularField.build cbc_item = CustomBrickConfigItem.objects.create( id='tests-contacts1', name='Contact info', content_type=ContentType.objects.get_for_model(FakeContact), cells=[ build_cell(FakeContact, 'last_name'), build_cell(FakeContact, 'address__' + hidden_fname), build_cell(FakeContact, 'address__city'), ], ) bdl = BrickDetailviewLocation.create_if_needed( brick_id=cbc_item.generate_id(), order=1000, # Should be the last block model=FakeContact, zone=BrickDetailviewLocation.BOTTOM, ) naru = FakeContact.objects.create( user=user, last_name='Narusegawa', first_name='Naru', phone='1122334455', ) naru.address = FakeAddress.objects.create( value='Hinata Inn', city='Tokyo', zipcode='112233', entity=naru, ) naru.save() content_node = self._get_contact_brick_content(naru, brick_id=bdl.brick_id) self.assertEqual( naru.last_name, self.get_brick_tile(content_node, 'regular_field-last_name').text) self.assertEqual( naru.address.city, self.get_brick_tile(content_node, 'regular_field-address__city').text) self._assertNoBrickTile(content_node, 'regular_field-address__zipcode')
def test_create_4_model_brick01(self): order = 5 zone = BrickDetailviewLocation.RIGHT model = FakeContact loc = BrickDetailviewLocation.create_4_model_brick(order=order, zone=zone, model=model) self.assertEqual(1, BrickDetailviewLocation.objects.count()) loc = self.get_object_or_fail(BrickDetailviewLocation, pk=loc.id) self.assertEqual('modelblock', loc.brick_id) self.assertEqual(model, loc.content_type.model_class()) self.assertEqual(order, loc.order) self.assertEqual(zone, loc.zone)
def populate(self): already_populated = UserMessagePriority.objects.filter( pk=PRIO_IMP_PK).exists() for pk, title in USERMESSAGE_PRIORITIES.items(): create_if_needed(UserMessagePriority, {'pk': pk}, title=str(title), is_custom=False) SettingValue.objects.get_or_create(key_id=todo_reminder_key.id, defaults={'value': 9}) Job.objects.get_or_create( type_id=usermessages_send_type.id, defaults={ 'language': settings.LANGUAGE_CODE, 'status': Job.STATUS_OK, }, ) if not already_populated: RIGHT = BrickDetailviewLocation.RIGHT BrickDetailviewLocation.create_if_needed(brick_id=TodosBrick.id_, order=100, zone=RIGHT) BrickDetailviewLocation.create_if_needed(brick_id=MemosBrick.id_, order=200, zone=RIGHT) BrickDetailviewLocation.create_if_needed(brick_id=AlertsBrick.id_, order=300, zone=RIGHT) BrickDetailviewLocation.create_if_needed( brick_id=UserMessagesBrick.id_, order=400, zone=RIGHT) # BlockPortalLocation.create_or_update(brick_id=MemosBrick.id_, order=100) # BlockPortalLocation.create_or_update(brick_id=AlertsBrick.id_, order=200) # BlockPortalLocation.create_or_update(brick_id=UserMessagesBrick.id_, order=300) # BlockPortalLocation.create_or_update(app_name='creme_core', brick_id=MemosBrick.id_, order=100) # BlockPortalLocation.create_or_update(app_name='creme_core', brick_id=AlertsBrick.id_, order=200) # BlockPortalLocation.create_or_update(app_name='creme_core', brick_id=UserMessagesBrick.id_, order=300) BrickHomeLocation.objects.create(brick_id=MemosBrick.id_, order=100) BrickHomeLocation.objects.create(brick_id=AlertsBrick.id_, order=200) BrickHomeLocation.objects.create(brick_id=UserMessagesBrick.id_, order=300)
def test_create_detailview01(self): # DEPRECATED "Default configuration." order = 25 zone = BrickDetailviewLocation.TOP brick_id = RelationsBrick.id_ loc = BrickDetailviewLocation.create_if_needed(brick_id=brick_id, order=order, zone=zone) self.assertIsInstance(loc, BrickDetailviewLocation) loc = self.get_object_or_fail(BrickDetailviewLocation, pk=loc.pk) self.assertIsNone(loc.content_type) self.assertEqual(brick_id, loc.brick_id) self.assertEqual(order, loc.order) self.assertEqual(zone, loc.zone)
def save(self, *args, **kwargs): cdata = self.cleaned_data hat_brick_id = cdata.get('hat') locations = cdata["locations"] self._save_locations( BrickDetailviewLocation, lambda: BrickDetailviewLocation(content_type=self.ct), bricks_partitions={ BrickDetailviewLocation.HAT: [hat_brick_id] if hat_brick_id else [], BrickDetailviewLocation.TOP: locations['top'], BrickDetailviewLocation.LEFT: locations['left'], BrickDetailviewLocation.RIGHT: locations['right'], BrickDetailviewLocation.BOTTOM: locations['bottom'], }, old_locations=self.locations, role=self.role, superuser=self.superuser, )
def test_display_custombrick02(self): "With FieldsConfig" user = self.login() hidden_fname = 'phone' FieldsConfig.create( FakeContact, descriptions=[(hidden_fname, { FieldsConfig.HIDDEN: True })], ) build_cell = EntityCellRegularField.build cbc_item = CustomBrickConfigItem.objects.create( id='tests-contacts1', name='Contact info', content_type=ContentType.objects.get_for_model(FakeContact), cells=[ build_cell(FakeContact, 'last_name'), build_cell(FakeContact, hidden_fname), ], ) bdl = BrickDetailviewLocation.create_if_needed( brick_id=cbc_item.generate_id(), order=1000, model=FakeContact, zone=BrickDetailviewLocation.BOTTOM, ) naru = FakeContact.objects.create( user=user, last_name='Narusegawa', first_name='Naru', phone='1122334455', ) content_node = self._get_contact_brick_content(naru, brick_id=bdl.brick_id) self.assertEqual( naru.last_name, self.get_brick_tile(content_node, 'regular_field-last_name').text) self._assertNoBrickTile(content_node, 'regular_field-phone')
def test_display_custombrick01(self): user = self.login() fname1 = 'last_name' fname2 = 'phone' build_cell = EntityCellRegularField.build cbc_item = CustomBrickConfigItem.objects.create( id='tests-contacts1', name='Contact info', content_type=ContentType.objects.get_for_model(FakeContact), cells=[ build_cell(FakeContact, fname1), build_cell(FakeContact, fname2), ], ) bdl = BrickDetailviewLocation.create_if_needed( brick_id=cbc_item.generate_id(), order=1000, model=FakeContact, zone=BrickDetailviewLocation.BOTTOM, ) naru = FakeContact.objects.create( user=user, last_name='Narusegawa', first_name='Naru', phone='1122334455', ) content_node = self._get_contact_brick_content(naru, brick_id=bdl.brick_id) self.assertEqual( naru.last_name, self.get_brick_tile(content_node, 'regular_field-last_name').text) self.assertIn( naru.phone, self.get_brick_tile(content_node, 'regular_field-phone').text)
def populate(self): already_populated = RelationType.objects.filter(pk=constants.REL_SUB_SOLD_BY).exists() Act = commercial.get_act_model() ActObjectivePattern = commercial.get_pattern_model() Strategy = commercial.get_strategy_model() Contact = persons.get_contact_model() Organisation = persons.get_organisation_model() RelationType.create((constants.REL_SUB_SOLD_BY, _(u'has sold')), (constants.REL_OBJ_SOLD_BY, _(u'has been sold by'))) RelationType.create((constants.REL_SUB_COMPLETE_GOAL, _(u'completes a goal of the commercial action')), (constants.REL_OBJ_COMPLETE_GOAL, _(u'is completed thanks to'), [Act])) # --------------------------- CremePropertyType.create(constants.PROP_IS_A_SALESMAN, _(u'is a salesman'), [Contact]) # --------------------------- MarketSegment.objects.get_or_create(property_type=None, defaults={'name': _(u'All the organisations')}, ) # --------------------------- for i, title in enumerate([_(u'Phone calls'), _(u'Show'), _(u'Demo')], start=1): create_if_needed(ActType, {'pk': i}, title=title, is_custom=False) # --------------------------- create_hf = HeaderFilter.create create_hf(pk=constants.DEFAULT_HFILTER_ACT, model=Act, name=_(u'Com Action view'), cells_desc=[(EntityCellRegularField, {'name': 'name'}), (EntityCellRegularField, {'name': 'expected_sales'}), (EntityCellRegularField, {'name': 'due_date'}), ], ) create_hf(pk=constants.DEFAULT_HFILTER_STRATEGY, model=Strategy, name=_(u"Strategy view"), cells_desc=[(EntityCellRegularField, {'name': 'name'})], ) create_hf(pk=constants.DEFAULT_HFILTER_PATTERN, model=ActObjectivePattern, name=_(u"Objective pattern view"), cells_desc=[(EntityCellRegularField, {'name': 'name'}), (EntityCellRegularField, {'name': 'segment'}), ] ) # --------------------------- create_searchconf = SearchConfigItem.create_if_needed create_searchconf(Act, ['name', 'expected_sales', 'cost', 'goal']) create_searchconf(Strategy, ['name']) create_searchconf(ActObjectivePattern, [], disabled=True) # --------------------------- SettingValue.objects.get_or_create(key_id=setting_keys.orga_approaches_key.id, defaults={'value': True}) # --------------------------- Job.objects.get_or_create(type_id=creme_jobs.com_approaches_emails_send_type.id, defaults={'language': settings.LANGUAGE_CODE, 'periodicity': date_period_registry.get_period('days', 1), 'status': Job.STATUS_OK, } ) # --------------------------- if not already_populated: ButtonMenuItem.create_if_needed(pk='commercial-complete_goal_button', model=None, button=buttons.CompleteGoalButton, order=60, ) create_bdl = BrickDetailviewLocation.create_if_needed TOP = BrickDetailviewLocation.TOP RIGHT = BrickDetailviewLocation.RIGHT LEFT = BrickDetailviewLocation.LEFT create_bdl(brick_id=bricks.ApproachesBrick.id_, order=10, zone=RIGHT) create_bdl(brick_id=bricks.ApproachesBrick.id_, order=10, zone=RIGHT, model=Contact) create_bdl(brick_id=bricks.ApproachesBrick.id_, order=10, zone=RIGHT, model=Organisation) BrickDetailviewLocation.create_4_model_brick( order=5, zone=LEFT, model=Act) create_bdl(brick_id=bricks.ActObjectivesBrick.id_, order=10, zone=LEFT, model=Act) create_bdl(brick_id=bricks.RelatedOpportunitiesBrick.id_, order=20, zone=LEFT, model=Act) create_bdl(brick_id=core_bricks.CustomFieldsBrick.id_, order=40, zone=LEFT, model=Act) create_bdl(brick_id=core_bricks.PropertiesBrick.id_, order=450, zone=LEFT, model=Act) create_bdl(brick_id=core_bricks.RelationsBrick.id_, order=500, zone=LEFT, model=Act) create_bdl(brick_id=core_bricks.HistoryBrick.id_, order=20, zone=RIGHT, model=Act) create_bdl(brick_id=bricks.PatternComponentsBrick.id_, order=10, zone=TOP, model=ActObjectivePattern) BrickDetailviewLocation.create_4_model_brick( order=5, zone=LEFT, model=ActObjectivePattern) create_bdl(brick_id=core_bricks.CustomFieldsBrick.id_, order=40, zone=LEFT, model=ActObjectivePattern) create_bdl(brick_id=core_bricks.PropertiesBrick.id_, order=450, zone=LEFT, model=ActObjectivePattern) create_bdl(brick_id=core_bricks.RelationsBrick.id_, order=500, zone=LEFT, model=ActObjectivePattern) create_bdl(brick_id=core_bricks.HistoryBrick.id_, order=20, zone=RIGHT, model=ActObjectivePattern) create_bdl(brick_id=bricks.SegmentDescriptionsBrick.id_, order=10, zone=TOP, model=Strategy) BrickDetailviewLocation.create_4_model_brick( order=5, zone=LEFT, model=Strategy) create_bdl(brick_id=core_bricks.CustomFieldsBrick.id_, order=40, zone=LEFT, model=Strategy) create_bdl(brick_id=bricks.EvaluatedOrgasBrick.id_, order=50, zone=LEFT, model=Strategy) create_bdl(brick_id=bricks.AssetsBrick.id_, order=60, zone=LEFT, model=Strategy) create_bdl(brick_id=bricks.CharmsBrick.id_, order=70, zone=LEFT, model=Strategy) create_bdl(brick_id=core_bricks.PropertiesBrick.id_, order=450, zone=LEFT, model=Strategy) create_bdl(brick_id=core_bricks.RelationsBrick.id_, order=500, zone=LEFT, model=Strategy) create_bdl(brick_id=core_bricks.HistoryBrick.id_, order=20, zone=RIGHT, model=Strategy) if apps.is_installed('creme.assistants'): logger.info('Assistants app is installed => we use the assistants blocks on detail views') from creme.assistants import bricks as assistants_bricks for model in (Act, ActObjectivePattern, Strategy): create_bdl(brick_id=assistants_bricks.TodosBrick.id_, order=100, zone=RIGHT, model=model) create_bdl(brick_id=assistants_bricks.MemosBrick.id_, order=200, zone=RIGHT, model=model) create_bdl(brick_id=assistants_bricks.AlertsBrick.id_, order=300, zone=RIGHT, model=model) create_bdl(brick_id=assistants_bricks.UserMessagesBrick.id_, order=400, zone=RIGHT, model=model) if apps.is_installed('creme.documents'): # logger.info("Documents app is installed => we use the documents blocks on Strategy's detail views") from creme.documents.bricks import LinkedDocsBrick for model in (Act, ActObjectivePattern, Strategy): create_bdl(brick_id=LinkedDocsBrick.id_, order=600, zone=RIGHT, model=model)
def populate(self): already_populated = RelationType.objects.filter( pk=constants.REL_SUB_RELATED_2_DOC).exists() Document = get_document_model() Folder = get_folder_model() RelationType.create( (constants.REL_SUB_RELATED_2_DOC, _(u'related to the document')), (constants.REL_OBJ_RELATED_2_DOC, _(u'document related to'), [Document])) # --------------------------- # TODO: pk string (or UUID) (+ move DOCUMENTS_FROM_EMAILS in 'emails' app) ?? entities_cat = create_if_needed( FolderCategory, {'pk': constants.DOCUMENTS_FROM_ENTITIES}, name=str(constants.DOCUMENTS_FROM_ENTITIES_NAME), is_custom=False) create_if_needed(FolderCategory, {'pk': constants.DOCUMENTS_FROM_EMAILS}, name=str(constants.DOCUMENTS_FROM_EMAILS_NAME), is_custom=False) # TODO: created by 'products' & 'persons' app ? create_doc_cat = DocumentCategory.objects.get_or_create create_doc_cat(uuid=constants.UUID_DOC_CAT_IMG_PRODUCT, defaults={ 'name': _(u'Product image'), 'is_custom': False, }) create_doc_cat(uuid=constants.UUID_DOC_CAT_IMG_ORGA, defaults={ 'name': _(u'Organisation logo'), 'is_custom': False, }) create_doc_cat(uuid=constants.UUID_DOC_CAT_IMG_CONTACT, defaults={ 'name': _(u'Contact photograph'), 'is_custom': False, }) # --------------------------- user_qs = get_user_model().objects.order_by('id') user = user_qs.filter(is_superuser=True, is_staff=False).first() or \ user_qs.filter(is_superuser=True).first() or \ user_qs[0] if not folder_model_is_custom(): get_create_folder = Folder.objects.get_or_create get_create_folder( uuid=constants.UUID_FOLDER_RELATED2ENTITIES, defaults={ 'user': user, 'title': 'Creme', 'category': entities_cat, 'description': _(u'Folder containing all the documents related to entities' ), }) get_create_folder(uuid=constants.UUID_FOLDER_IMAGES, defaults={ 'user': user, 'title': _(u'Images'), }) # --------------------------- HeaderFilter.create( pk=constants.DEFAULT_HFILTER_DOCUMENT, model=Document, name=_(u'Document view'), cells_desc=[ (EntityCellRegularField, { 'name': 'title' }), # (EntityCellRegularField, {'name': 'folder__title'}), (EntityCellRegularField, { 'name': 'linked_folder__title' }), (EntityCellRegularField, { 'name': 'mime_type' }), ]) HeaderFilter.create(pk=constants.DEFAULT_HFILTER_FOLDER, model=Folder, name=_(u'Folder view'), cells_desc=[ (EntityCellRegularField, { 'name': 'title' }), (EntityCellRegularField, { 'name': 'description' }), (EntityCellRegularField, { 'name': 'category' }), ]) # --------------------------- EntityFilter.create( constants.EFILTER_IMAGES, name=_(u'Images'), model=Document, is_custom=False, user='******', conditions=[ EntityFilterCondition.build_4_field( model=Document, operator=EntityFilterCondition.STARTSWITH, name='mime_type__name', values=[constants.MIMETYPE_PREFIX_IMG], ), ], ) # --------------------------- create_sci = SearchConfigItem.create_if_needed # create_sci(Document, ['title', 'description', 'folder__title', 'categories__name']) create_sci(Document, [ 'title', 'description', 'linked_folder__title', 'categories__name' ]) create_sci(Folder, ['title', 'description', 'category__name']) # --------------------------- if not already_populated: LEFT = BrickDetailviewLocation.LEFT RIGHT = BrickDetailviewLocation.RIGHT create_bdl = BrickDetailviewLocation.create_if_needed BrickDetailviewLocation.create_4_model_brick(order=5, zone=LEFT, model=Folder) create_bdl(brick_id=core_bricks.CustomFieldsBrick.id_, order=40, zone=LEFT, model=Folder) create_bdl(brick_id=bricks.ChildFoldersBrick.id_, order=50, zone=LEFT, model=Folder) create_bdl(brick_id=bricks.FolderDocsBrick.id_, order=60, zone=LEFT, model=Folder) create_bdl(brick_id=core_bricks.PropertiesBrick.id_, order=450, zone=LEFT, model=Folder) create_bdl(brick_id=core_bricks.RelationsBrick.id_, order=500, zone=LEFT, model=Folder) create_bdl(brick_id=core_bricks.HistoryBrick.id_, order=20, zone=RIGHT, model=Folder) if apps.is_installed('creme.assistants'): logger.info( 'Assistants app is installed => we use the assistants blocks on detail view' ) from creme.assistants import bricks as a_bricks create_bdl(brick_id=a_bricks.TodosBrick.id_, order=100, zone=RIGHT, model=Folder) create_bdl(brick_id=a_bricks.MemosBrick.id_, order=200, zone=RIGHT, model=Folder) create_bdl(brick_id=a_bricks.AlertsBrick.id_, order=300, zone=RIGHT, model=Folder) create_bdl(brick_id=a_bricks.UserMessagesBrick.id_, order=400, zone=RIGHT, model=Folder)
def populate(self): already_populated = RelationType.objects.filter( pk=constants.REL_SUB_MAIL_RECEIVED).exists() EmailCampaign = emails.get_emailcampaign_model() EmailTemplate = emails.get_emailtemplate_model() EntityEmail = emails.get_entityemail_model() MailingList = emails.get_mailinglist_model() Contact = persons.get_contact_model() Organisation = persons.get_organisation_model() # --------------------------- SettingValue.objects.get_or_create(key_id=emailcampaign_sender.id, defaults={'value': ''}) # --------------------------- RelationType.create( (constants.REL_SUB_MAIL_RECEIVED, _(u'(email) received by'), [EntityEmail]), (constants.REL_OBJ_MAIL_RECEIVED, _(u'received the email'), [Organisation, Contact])) RelationType.create((constants.REL_SUB_MAIL_SENDED, _(u'(email) sent by'), [EntityEmail]), (constants.REL_OBJ_MAIL_SENDED, _(u'sent the email'), [Organisation, Contact])) RelationType.create( (constants.REL_SUB_RELATED_TO, _(u'(email) related to'), [EntityEmail]), (constants.REL_OBJ_RELATED_TO, _(u'related to the email'), [])) # --------------------------- create_hf = HeaderFilter.create create_hf( pk=constants.DEFAULT_HFILTER_MAILINGLIST, model=MailingList, name=_(u'Mailing list view'), cells_desc=[(EntityCellRegularField, { 'name': 'name' })], ) create_hf( pk=constants.DEFAULT_HFILTER_CAMPAIGN, model=EmailCampaign, name=_(u'Campaign view'), cells_desc=[(EntityCellRegularField, { 'name': 'name' })], ) create_hf( pk=constants.DEFAULT_HFILTER_TEMPLATE, model=EmailTemplate, name=_(u'Email template view'), cells_desc=[ (EntityCellRegularField, { 'name': 'name' }), (EntityCellRegularField, { 'name': 'subject' }), ], ) create_hf( pk=constants.DEFAULT_HFILTER_EMAIL, model=EntityEmail, name=_(u'Email view'), cells_desc=[ (EntityCellRegularField, { 'name': 'sender' }), (EntityCellRegularField, { 'name': 'recipient' }), (EntityCellRegularField, { 'name': 'subject' }), ], ) # --------------------------- create_searchconf = SearchConfigItem.create_if_needed create_searchconf(EmailCampaign, ['name', 'mailing_lists__name']) create_searchconf(MailingList, [ 'name', 'children__name', 'contacts__first_name', 'contacts__last_name', 'organisations__name' ]) create_searchconf(EmailTemplate, ['name', 'subject', 'body', 'attachments__title']) create_searchconf(EntityEmail, ['sender', 'recipient', 'subject']) # --------------------------- create_job = Job.objects.get_or_create create_job(type_id=entity_emails_send_type.id, defaults={ 'language': settings.LANGUAGE_CODE, 'status': Job.STATUS_OK, }) create_job(type_id=campaign_emails_send_type.id, defaults={ 'language': settings.LANGUAGE_CODE, 'status': Job.STATUS_OK, }) # --------------------------- if not already_populated: get_ct = ContentType.objects.get_for_model create_cbci = CustomBrickConfigItem.objects.create build_cell = EntityCellRegularField.build cbci_email = create_cbci( id='emails-entityemail_info', name=_(u'Email information'), content_type=get_ct(EntityEmail), cells=[ build_cell(EntityEmail, 'user'), build_cell(EntityEmail, 'reads'), build_cell(EntityEmail, 'status'), build_cell(EntityEmail, 'sender'), build_cell(EntityEmail, 'recipient'), build_cell(EntityEmail, 'subject'), build_cell(EntityEmail, 'reception_date'), build_cell(EntityEmail, 'attachments'), build_cell(EntityEmail, 'body'), ], ) cbci_template = create_cbci( id='emails-emailtemplate_info', name=_(u'Email template information'), content_type=get_ct(EmailTemplate), cells=[ build_cell(EmailTemplate, 'created'), build_cell(EmailTemplate, 'modified'), build_cell(EmailTemplate, 'user'), build_cell(EmailTemplate, 'name'), build_cell(EmailTemplate, 'subject'), build_cell(EmailTemplate, 'body'), build_cell(EmailTemplate, 'signature'), ], ) create_bdl = BrickDetailviewLocation.create_if_needed TOP = BrickDetailviewLocation.TOP LEFT = BrickDetailviewLocation.LEFT RIGHT = BrickDetailviewLocation.RIGHT create_bdl(brick_id=cbci_email.generate_id(), order=5, zone=LEFT, model=EntityEmail) create_bdl(brick_id=bricks.EmailHTMLBodyBrick.id_, order=20, zone=LEFT, model=EntityEmail) create_bdl(brick_id=core_bricks.CustomFieldsBrick.id_, order=40, zone=LEFT, model=EntityEmail) create_bdl(brick_id=core_bricks.PropertiesBrick.id_, order=450, zone=LEFT, model=EntityEmail) create_bdl(brick_id=core_bricks.RelationsBrick.id_, order=500, zone=LEFT, model=EntityEmail) create_bdl(brick_id=core_bricks.HistoryBrick.id_, order=20, zone=RIGHT, model=EntityEmail) BrickDetailviewLocation.create_4_model_brick(order=5, zone=LEFT, model=MailingList) create_bdl(brick_id=core_bricks.CustomFieldsBrick.id_, order=40, zone=LEFT, model=MailingList) create_bdl(brick_id=bricks.EmailRecipientsBrick.id_, order=80, zone=LEFT, model=MailingList) create_bdl(brick_id=bricks.ContactsBrick.id_, order=90, zone=LEFT, model=MailingList) create_bdl(brick_id=bricks.OrganisationsBrick.id_, order=95, zone=LEFT, model=MailingList) create_bdl(brick_id=bricks.ChildListsBrick.id_, order=100, zone=LEFT, model=MailingList) create_bdl(brick_id=bricks.ParentListsBrick.id_, order=105, zone=LEFT, model=MailingList) create_bdl(brick_id=core_bricks.PropertiesBrick.id_, order=450, zone=LEFT, model=MailingList) create_bdl(brick_id=core_bricks.RelationsBrick.id_, order=500, zone=LEFT, model=MailingList) create_bdl(brick_id=core_bricks.HistoryBrick.id_, order=20, zone=RIGHT, model=MailingList) create_bdl(brick_id=bricks.SendingsBrick.id_, order=2, zone=TOP, model=EmailCampaign) BrickDetailviewLocation.create_4_model_brick(order=5, zone=LEFT, model=EmailCampaign) create_bdl(brick_id=core_bricks.CustomFieldsBrick.id_, order=40, zone=LEFT, model=EmailCampaign) create_bdl(brick_id=bricks.MailingListsBrick.id_, order=120, zone=LEFT, model=EmailCampaign) create_bdl(brick_id=core_bricks.PropertiesBrick.id_, order=450, zone=LEFT, model=EmailCampaign) create_bdl(brick_id=core_bricks.RelationsBrick.id_, order=500, zone=LEFT, model=EmailCampaign) create_bdl(brick_id=core_bricks.HistoryBrick.id_, order=20, zone=RIGHT, model=EmailCampaign) create_bdl(brick_id=cbci_template.generate_id(), order=5, zone=LEFT, model=EmailTemplate) create_bdl(brick_id=core_bricks.CustomFieldsBrick.id_, order=40, zone=LEFT, model=EmailTemplate) create_bdl(brick_id=bricks.AttachmentsBrick.id_, order=60, zone=LEFT, model=EmailTemplate) create_bdl(brick_id=bricks.TemplateHTMLBodyBrick.id_, order=70, zone=LEFT, model=EmailTemplate) create_bdl(brick_id=core_bricks.PropertiesBrick.id_, order=450, zone=LEFT, model=EmailTemplate) create_bdl(brick_id=core_bricks.RelationsBrick.id_, order=500, zone=LEFT, model=EmailTemplate) create_bdl(brick_id=core_bricks.HistoryBrick.id_, order=20, zone=RIGHT, model=EmailTemplate) # 'persons' app create_bdl(brick_id=bricks.MailsHistoryBrick.id_, order=600, zone=RIGHT, model=Contact) create_bdl(brick_id=bricks.MailsHistoryBrick.id_, order=600, zone=RIGHT, model=Organisation) # BlockPortalLocation.create_or_update(app_name='emails', brick_id=bricks.SignaturesBrick.id_, order=10) # BlockPortalLocation.create_or_update(app_name='emails', brick_id=core_bricks.HistoryBrick.id_, order=30) if apps.is_installed('creme.assistants'): logger.info( 'Assistants app is installed => we use the assistants blocks on detail views' ) from creme.assistants import bricks as a_bricks for model in (MailingList, EmailCampaign, EmailTemplate): create_bdl(brick_id=a_bricks.TodosBrick.id_, order=100, zone=RIGHT, model=model) create_bdl(brick_id=a_bricks.MemosBrick.id_, order=200, zone=RIGHT, model=model) create_bdl(brick_id=a_bricks.AlertsBrick.id_, order=300, zone=RIGHT, model=model) create_bdl(brick_id=a_bricks.UserMessagesBrick.id_, order=400, zone=RIGHT, model=model) # BlockPortalLocation.create_or_update(app_name='emails', brick_id=a_bricks.MemosBrick.id_, order=100) # BlockPortalLocation.create_or_update(app_name='emails', brick_id=a_bricks.AlertsBrick.id_, order=200) # BlockPortalLocation.create_or_update(app_name='emails', brick_id=a_bricks.UserMessagesBrick.id_, order=300) if apps.is_installed('creme.documents'): # logger.info("Documents app is installed => we use the documents block on EmailCampaign's detail view") from creme.documents.bricks import LinkedDocsBrick create_bdl(brick_id=LinkedDocsBrick.id_, order=600, zone=RIGHT, model=EmailCampaign) # --------------------------- ButtonMenuItem.create_if_needed( pk='emails-entity_email_link_button', model=EntityEmail, button=buttons.EntityEmailLinkButton, order=20)
def test_relations_brick03(self): """With A SpecificRelationBrick ; the concerned relationship is minimal_display=True, so the RelationType is excluded. """ user = self.login() rbrick_id = RelationsBrick.id_ rtype1 = RelationType.create( ('test-subject_son', 'is the son of'), ('test-object_father', 'is the father of'), minimal_display=(True, True), )[0] rtype2 = RelationType.create( ('test-subject_brother', 'is the brother of'), ('test-object_sister', 'is the sister of'))[0] rbi = RelationBrickItem.create(rtype1.id) BrickDetailviewLocation.create_4_model_brick( order=1, zone=BrickDetailviewLocation.LEFT, model=FakeContact) create_bdl = partial(BrickDetailviewLocation.create_if_needed, zone=BrickDetailviewLocation.RIGHT, model=FakeContact) create_bdl(brick_id=rbi.brick_id, order=2) create_bdl(brick_id=rbrick_id, order=3) create_contact = partial(FakeContact.objects.create, user=user) atom = create_contact(first_name='Atom', last_name='Tenma') tenma = create_contact(first_name='Dr', last_name='Tenma') uran = create_contact(first_name='Uran', last_name='Ochanomizu') create_rel = partial(Relation.objects.create, subject_entity=atom, user=user) create_rel(type=rtype1, object_entity=tenma) create_rel(type=rtype2, object_entity=uran) response = self.assertGET200(atom.get_absolute_url()) self.assertTemplateUsed(response, 'creme_core/bricks/relations.html') self.assertTemplateUsed(response, 'creme_core/bricks/specific-relations.html') document = self.get_html_tree(response.content) rel_brick_node = self.get_brick_node(document, rbrick_id) self.assertInstanceLink(rel_brick_node, uran) self.assertNoInstanceLink(rel_brick_node, tenma) reloading_info = {'exclude': [rtype1.id]} self.assertEqual( json_dump(reloading_info, separators=(',', ':')), rel_brick_node.attrib.get('data-brick-reloading-info')) # Reloading response = self.assertGET200( reverse('creme_core__reload_detailview_bricks', args=(atom.id, )), data={ 'brick_id': rbrick_id, 'extra_data': json_dump({rbrick_id: reloading_info}), }, ) # load_data = load_json(response.content) load_data = response.json() self.assertEqual(load_data[0][0], rbrick_id) l_document = self.get_html_tree(load_data[0][1]) l_rel_brick_node = self.get_brick_node(l_document, rbrick_id) self.assertNoInstanceLink(l_rel_brick_node, tenma) self.assertInstanceLink(l_rel_brick_node, uran) # Reloading + bad data def assertBadData(data): self.assertGET200( reverse('creme_core__reload_detailview_bricks', args=(atom.id, )), data={ 'brick_id': rbrick_id, 'extra_data': json_dump({rbrick_id: data}), }, ) assertBadData(1) assertBadData({'include': 1}) assertBadData({'exclude': 1}) assertBadData({'include': [[]]}) assertBadData({'exclude': [[]]})
def populate(self): Graph = get_graph_model() HeaderFilter.create( pk=DEFAULT_HFILTER_GRAPH, name=_(u'Graph view'), model=Graph, cells_desc=[(EntityCellRegularField, { 'name': 'name' })], ) SearchConfigItem.create_if_needed(Graph, ['name']) if not BrickDetailviewLocation.config_exists( Graph ): # NB: no straightforward way to test that this populate script has not been already run create_bdl = BrickDetailviewLocation.create_if_needed LEFT = BrickDetailviewLocation.LEFT RIGHT = BrickDetailviewLocation.RIGHT BrickDetailviewLocation.create_4_model_brick(order=5, zone=LEFT, model=Graph) create_bdl(brick_id=core_bricks.CustomFieldsBrick.id_, order=40, zone=LEFT, model=Graph) create_bdl(brick_id=bricks.RootNodesBrick.id_, order=60, zone=LEFT, model=Graph) create_bdl(brick_id=bricks.OrbitalRelationTypesBrick.id_, order=65, zone=LEFT, model=Graph) create_bdl(brick_id=core_bricks.PropertiesBrick.id_, order=450, zone=LEFT, model=Graph) create_bdl(brick_id=core_bricks.RelationsBrick.id_, order=500, zone=LEFT, model=Graph) create_bdl(brick_id=core_bricks.HistoryBrick.id_, order=20, zone=RIGHT, model=Graph) if apps.is_installed('creme.assistants'): logger.info( 'Assistants app is installed => we use the assistants blocks on detail view' ) from creme.assistants import bricks as a_bricks create_bdl(brick_id=a_bricks.TodosBrick.id_, order=100, zone=RIGHT, model=Graph) create_bdl(brick_id=a_bricks.MemosBrick.id_, order=200, zone=RIGHT, model=Graph) create_bdl(brick_id=a_bricks.AlertsBrick.id_, order=300, zone=RIGHT, model=Graph) create_bdl(brick_id=a_bricks.UserMessagesBrick.id_, order=400, zone=RIGHT, model=Graph) if apps.is_installed('creme.documents'): # logger.info('Documents app is installed => we use the documents blocks on detail view') from creme.documents.bricks import LinkedDocsBrick create_bdl(brick_id=LinkedDocsBrick.id_, order=600, zone=RIGHT, model=Graph)
def populate(self): already_populated = RelationType.objects.filter(pk=constants.REL_SUB_IS_INVITED_TO).exists() Event = get_event_model() Contact = get_contact_model() Opportunity = get_opportunity_model() create_rtype = RelationType.create create_rtype((constants.REL_SUB_IS_INVITED_TO, _(u'is invited to the event'), [Contact]), (constants.REL_OBJ_IS_INVITED_TO, _(u'has invited'), [Event]), is_internal=True, ) create_rtype((constants.REL_SUB_ACCEPTED_INVITATION, _(u'accepted the invitation to the event'), [Contact]), (constants.REL_OBJ_ACCEPTED_INVITATION, _(u'prepares to receive'), [Event]), is_internal=True, ) create_rtype((constants.REL_SUB_REFUSED_INVITATION, _(u'refused the invitation to the event'), [Contact]), (constants.REL_OBJ_REFUSED_INVITATION, _(u'do not prepare to receive any more'), [Event]), is_internal=True, ) create_rtype((constants.REL_SUB_CAME_EVENT, _(u'came to the event'), [Contact]), (constants.REL_OBJ_CAME_EVENT, _(u'received'), [Event]), is_internal=True, ) create_rtype((constants.REL_SUB_NOT_CAME_EVENT, _(u'did not come to the event'), [Contact]), (constants.REL_OBJ_NOT_CAME_EVENT, _(u'did not receive'), [Event]), is_internal=True, ) create_rtype((constants.REL_SUB_GEN_BY_EVENT, _(u'generated by the event'), [Opportunity]), (constants.REL_OBJ_GEN_BY_EVENT, _(u'(event) has generated the opportunity'), [Event]), is_internal=True, ) # --------------------------- HeaderFilter.create(pk=constants.DEFAULT_HFILTER_EVENT, name=_(u'Event view'), model=Event, cells_desc=[(EntityCellRegularField, {'name': 'name'}), (EntityCellRegularField, {'name': 'type'}), (EntityCellRegularField, {'name': 'start_date'}), (EntityCellRegularField, {'name': 'end_date'}), ], ) # --------------------------- SearchConfigItem.create_if_needed(Event, ['name', 'description', 'type__name']) # --------------------------- if not already_populated: for i, name in enumerate([_(u'Show'), _(u'Conference'), _(u'Breakfast'), _(u'Brunch')], start=1): create_if_needed(EventType, {'pk': i}, name=name) create_bdl = BrickDetailviewLocation.create_if_needed LEFT = BrickDetailviewLocation.LEFT RIGHT = BrickDetailviewLocation.RIGHT BrickDetailviewLocation.create_4_model_brick( order=5, zone=LEFT, model=Event) create_bdl(brick_id=core_bricks.CustomFieldsBrick.id_, order=40, zone=LEFT, model=Event) create_bdl(brick_id=core_bricks.PropertiesBrick.id_, order=450, zone=LEFT, model=Event) create_bdl(brick_id=core_bricks.RelationsBrick.id_, order=500, zone=LEFT, model=Event) create_bdl(brick_id=bricks.ResutsBrick.id_, order=2, zone=RIGHT, model=Event) create_bdl(brick_id=core_bricks.HistoryBrick.id_, order=20, zone=RIGHT, model=Event) if apps.is_installed('creme.assistants'): logger.info('Assistants app is installed => we use the assistants blocks on detail view') from creme.assistants import bricks as a_bricks create_bdl(brick_id=a_bricks.TodosBrick.id_, order=100, zone=RIGHT, model=Event) create_bdl(brick_id=a_bricks.MemosBrick.id_, order=200, zone=RIGHT, model=Event) create_bdl(brick_id=a_bricks.AlertsBrick.id_, order=300, zone=RIGHT, model=Event) create_bdl(brick_id=a_bricks.UserMessagesBrick.id_, order=400, zone=RIGHT, model=Event) if apps.is_installed('creme.documents'): # logger.info('Documents app is installed => we use the Documents blocks on detail view') from creme.documents.bricks import LinkedDocsBrick create_bdl(brick_id=LinkedDocsBrick.id_, order=600, zone=RIGHT, model=Event)
def populate(self): already_populated = RelationType.objects.filter( pk=constants.REL_SUB_LINKED_2_ACTIVITY).exists() Contact = persons.get_contact_model() Organisation = persons.get_organisation_model() Activity = get_activity_model() # --------------------------- create_rtype = RelationType.create create_rtype( (constants.REL_SUB_LINKED_2_ACTIVITY, _('related to the activity')), (constants.REL_OBJ_LINKED_2_ACTIVITY, _('(activity) related to'), [Activity]), minimal_display=(True, False), ) rt_obj_activity_subject = \ create_rtype((constants.REL_SUB_ACTIVITY_SUBJECT, _('is subject of the activity'), [Contact, Organisation]), (constants.REL_OBJ_ACTIVITY_SUBJECT, _('(activity) is to subject'), [Activity]), minimal_display=(True, False), )[1] rt_obj_part_2_activity = \ create_rtype((constants.REL_SUB_PART_2_ACTIVITY, _('participates to the activity'), [Contact]), (constants.REL_OBJ_PART_2_ACTIVITY, _('(activity) has as participant'), [Activity]), is_internal=True, minimal_display=(True, False), )[1] # --------------------------- create_if_needed(Status, {'pk': constants.STATUS_PLANNED}, name=pgettext('activities-status', 'Planned'), description=pgettext('activities-status', 'Planned'), is_custom=False) create_if_needed(Status, {'pk': constants.STATUS_IN_PROGRESS}, name=pgettext('activities-status', 'In progress'), description=pgettext('activities-status', 'In progress'), is_custom=False) create_if_needed(Status, {'pk': constants.STATUS_DONE}, name=pgettext('activities-status', 'Done'), description=pgettext('activities-status', 'Done'), is_custom=False) create_if_needed(Status, {'pk': constants.STATUS_DELAYED}, name=pgettext('activities-status', 'Delayed'), description=pgettext('activities-status', 'Delayed'), is_custom=False) create_if_needed(Status, {'pk': constants.STATUS_CANCELLED}, name=pgettext('activities-status', 'Cancelled'), description=pgettext('activities-status', 'Cancelled'), is_custom=False) # --------------------------- create_if_needed(ActivityType, {'pk': constants.ACTIVITYTYPE_TASK}, name=_('Task'), default_day_duration=0, default_hour_duration="00:15:00", is_custom=False) meeting_type = \ create_if_needed(ActivityType, {'pk': constants.ACTIVITYTYPE_MEETING}, name=_('Meeting'), default_day_duration=0, default_hour_duration="00:15:00", is_custom=False) phone_call_type = \ create_if_needed(ActivityType, {'pk': constants.ACTIVITYTYPE_PHONECALL}, name=_('Phone call'), default_day_duration=0, default_hour_duration="00:15:00", is_custom=False) create_if_needed(ActivityType, {'pk': constants.ACTIVITYTYPE_GATHERING}, name=_('Gathering'), default_day_duration=0, default_hour_duration="00:15:00", is_custom=False) create_if_needed(ActivityType, {'pk': constants.ACTIVITYTYPE_SHOW}, name=_('Show'), default_day_duration=1, default_hour_duration="00:00:00", is_custom=False) create_if_needed(ActivityType, {'pk': constants.ACTIVITYTYPE_DEMO}, name=_('Demonstration'), default_day_duration=0, default_hour_duration="01:00:00", is_custom=False) create_if_needed(ActivityType, {'pk': constants.ACTIVITYTYPE_INDISPO}, name=_('Unavailability'), default_day_duration=1, default_hour_duration="00:00:00", is_custom=False) create_if_needed(ActivitySubType, {'pk': constants.ACTIVITYSUBTYPE_MEETING_MEETING}, name=_('Meeting'), type=meeting_type, is_custom=False) create_if_needed( ActivitySubType, {'pk': constants.ACTIVITYSUBTYPE_MEETING_QUALIFICATION}, name=_('Qualification'), type=meeting_type, is_custom=False) create_if_needed(ActivitySubType, {'pk': constants.ACTIVITYSUBTYPE_MEETING_REVIVAL}, name=_('Revival'), type=meeting_type, is_custom=False) create_if_needed(ActivitySubType, {'pk': constants.ACTIVITYSUBTYPE_MEETING_NETWORK}, name=_('Network'), type=meeting_type, is_custom=False) create_if_needed(ActivitySubType, {'pk': constants.ACTIVITYSUBTYPE_MEETING_OTHER}, name=pgettext('activities-meeting', 'Other'), type=meeting_type, is_custom=False) create_if_needed(ActivitySubType, {'pk': constants.ACTIVITYSUBTYPE_PHONECALL_INCOMING}, name=_('Incoming'), type=phone_call_type, is_custom=False) create_if_needed(ActivitySubType, {'pk': constants.ACTIVITYSUBTYPE_PHONECALL_OUTGOING}, name=_('Outgoing'), type=phone_call_type, is_custom=False) create_if_needed( ActivitySubType, {'pk': constants.ACTIVITYSUBTYPE_PHONECALL_CONFERENCE}, name=_('Conference'), type=phone_call_type, is_custom=False) create_if_needed(ActivitySubType, {'pk': constants.ACTIVITYSUBTYPE_PHONECALL_FAILED}, name=_('Outgoing - Failed'), type=phone_call_type, is_custom=False) # --------------------------- HeaderFilter.create( pk=constants.DEFAULT_HFILTER_ACTIVITY, name=_('Activity view'), model=Activity, cells_desc=[ (EntityCellRegularField, { 'name': 'start' }), (EntityCellRegularField, { 'name': 'title' }), (EntityCellRegularField, { 'name': 'type' }), EntityCellRelation(model=Activity, rtype=rt_obj_part_2_activity), EntityCellRelation(model=Activity, rtype=rt_obj_activity_subject), (EntityCellRegularField, { 'name': 'user' }), (EntityCellRegularField, { 'name': 'end' }), ], ) # --------------------------- create_efilter = EntityFilter.create for pk, name, atype_id in ( (constants.EFILTER_MEETINGS, _('Meetings'), constants.ACTIVITYTYPE_MEETING), (constants.EFILTER_PHONECALLS, _('Phone calls'), constants.ACTIVITYTYPE_PHONECALL), (constants.EFILTER_TASKS, _('Tasks'), constants.ACTIVITYTYPE_TASK), ): create_efilter( pk, name=name, model=Activity, is_custom=False, user='******', conditions=[ EntityFilterCondition.build_4_field( model=Activity, operator=EntityFilterCondition.EQUALS, name='type', values=[atype_id], ), ], ) create_efilter( constants.EFILTER_PARTICIPATE, name=_('In which I participate'), model=Activity, is_custom=False, user='******', conditions=[ EntityFilterCondition.build_4_relation_subfilter( rtype=rt_obj_part_2_activity, subfilter=EntityFilter.get_latest_version( FILTER_CONTACT_ME)), ], ) # --------------------------- SearchConfigItem.create_if_needed( Activity, ['title', 'description', 'type__name']) # --------------------------- for user in get_user_model().objects.all(): Calendar.get_user_default_calendar(user) # --------------------------- create_svalue = SettingValue.objects.get_or_create create_svalue(key_id=setting_keys.review_key.id, defaults={'value': True}) create_svalue(key_id=setting_keys.auto_subjects_key.id, defaults={'value': True}) create_svalue(key_id=setting_keys.form_user_messages_key.id, defaults={'value': False}) # --------------------------- if not already_populated: LEFT = BrickDetailviewLocation.LEFT RIGHT = BrickDetailviewLocation.RIGHT BrickDetailviewLocation.create_4_model_brick( order=5, zone=BrickDetailviewLocation.LEFT, model=Activity) create_bdl = BrickDetailviewLocation.create_if_needed create_bdl(brick_id=core_bricks.CustomFieldsBrick.id_, order=40, zone=LEFT, model=Activity) create_bdl(brick_id=bricks.RelatedCalendarBrick.id_, order=90, zone=LEFT, model=Activity) create_bdl(brick_id=bricks.ParticipantsBrick.id_, order=100, zone=LEFT, model=Activity) create_bdl(brick_id=bricks.SubjectsBrick.id_, order=120, zone=LEFT, model=Activity) create_bdl(brick_id=core_bricks.PropertiesBrick.id_, order=450, zone=LEFT, model=Activity) create_bdl(brick_id=core_bricks.RelationsBrick.id_, order=500, zone=LEFT, model=Activity) create_bdl(brick_id=core_bricks.HistoryBrick.id_, order=20, zone=RIGHT, model=Activity) if apps.is_installed('creme.assistants'): logger.info( 'Assistants app is installed => we use the assistants blocks on detail views' ) from creme.assistants import bricks as a_bricks create_bdl(brick_id=a_bricks.TodosBrick.id_, order=100, zone=RIGHT, model=Activity) create_bdl(brick_id=a_bricks.MemosBrick.id_, order=200, zone=RIGHT, model=Activity) create_bdl(brick_id=a_bricks.AlertsBrick.id_, order=300, zone=RIGHT, model=Activity) create_bdl(brick_id=a_bricks.UserMessagesBrick.id_, order=400, zone=RIGHT, model=Activity) if apps.is_installed('creme.documents'): # logger.info('Documents app is installed => we use the documents block on detail views') from creme.documents.bricks import LinkedDocsBrick create_bdl(brick_id=LinkedDocsBrick.id_, order=600, zone=RIGHT, model=Activity) future_id = bricks.FutureActivitiesBrick.id_ past_id = bricks.PastActivitiesBrick.id_ create_bdl(brick_id=future_id, order=20, zone=RIGHT, model=Contact) create_bdl(brick_id=past_id, order=21, zone=RIGHT, model=Contact) create_bdl(brick_id=future_id, order=20, zone=RIGHT, model=Organisation) create_bdl(brick_id=past_id, order=21, zone=RIGHT, model=Organisation) # BlockPortalLocation.create_or_update(app_name='persons', brick_id=future_id, order=20) # BlockPortalLocation.create_or_update(app_name='persons', brick_id=past_id, order=21) # BlockPortalLocation.create_or_update(app_name='creme_core', brick_id=future_id, order=20) # BlockPortalLocation.create_or_update(app_name='creme_core', brick_id=past_id, order=21) BrickHomeLocation.objects.create(brick_id=future_id, order=20) BrickHomeLocation.objects.create(brick_id=past_id, order=21) # --------------------------- create_button = ButtonMenuItem.create_if_needed create_button('activities-add_activity_button', model=None, button=buttons.AddRelatedActivityButton, order=10) create_button('activities-add_meeting_button', model=None, button=buttons.AddMeetingButton, order=11) create_button('activities-add_phonecall_button', model=None, button=buttons.AddPhoneCallButton, order=12)