Beispiel #1
0
class History(CremeModel):
    entity = ForeignKey(CremeEntity,
                        verbose_name=_('Entity'),
                        blank=False,
                        null=False,
                        on_delete=CASCADE)
    created = fields.CreationDateTimeField(_('Creation date'))
    action = CharField(_('Action'),
                       max_length=100)  # Action (i.e: create, update...)
    source = CharField(
        _('Source'), max_length=100
    )  # Source (i.e: email raw, email from infopath, sms raw...)
    description = TextField(_('Description'), blank=True, null=True)
    user = fields.CremeUserForeignKey(
        verbose_name=_('Owner'), blank=True, null=True,
        default=None)  # Case of sandboxes are by user

    class Meta:
        app_label = 'crudity'
        verbose_name = _('History')
        verbose_name_plural = _('History')

    def get_entity(self):
        entity = self.entity

        if entity:
            entity = entity.get_real_entity()

        return entity

    def __str__(self):
        e = self.get_entity()
        return 'History of "{}"'.format(e) if e else 'History'
Beispiel #2
0
class Memo(creme_models.CremeModel):
    content       = models.TextField(_('Content'))
    on_homepage   = models.BooleanField(_('Displayed on homepage'), blank=True, default=False)
    creation_date = creme_fields.CreationDateTimeField(_('Creation date'), editable=False)
    user          = creme_fields.CremeUserForeignKey(verbose_name=_('Owner user'))

    entity_content_type = creme_fields.EntityCTypeForeignKey(related_name='+', editable=False)
    entity = models.ForeignKey(
        creme_models.CremeEntity,  related_name='assistants_memos',
        editable=False, on_delete=models.CASCADE,
    ).set_tags(viewable=False)
    creme_entity = creme_fields.RealEntityForeignKey(
        ct_field='entity_content_type', fk_field='entity',
    )

    objects = MemoManager()

    creation_label = _('Create a memo')
    save_label     = _('Save the memo')

    class Meta:
        app_label = 'assistants'
        verbose_name = _('Memo')
        verbose_name_plural = _('Memos')

    def __str__(self):
        # NB: translate for unicode can not take 2 arguments...
        return ellipsis(self.content.strip().replace('\n', ''), 25)

    def get_edit_absolute_url(self):
        return reverse('assistants__edit_memo', args=(self.id,))

    def get_related_entity(self):  # For generic views
        return self.creme_entity
class CommercialApproach(creme_models.CremeModel):
    title = models.CharField(_('Title'), max_length=200)
    # ok_or_in_futur = models.BooleanField(_('Done?'), editable=False, default=False)
    description = models.TextField(_('Description'), blank=True)
    creation_date = creme_fields.CreationDateTimeField(_('Creation date'),
                                                       editable=False)

    related_activity = models.ForeignKey(
        settings.ACTIVITIES_ACTIVITY_MODEL,
        null=True,
        editable=False,
        on_delete=models.CASCADE,
    )

    # entity_content_type = models.ForeignKey(ContentType, related_name="comapp_entity_set", editable=False, on_delete=models.CASCADE)
    # entity_id           = models.PositiveIntegerField(editable=False)  # .set_tags(viewable=False) uncomment if it becomes an auxiliary (get_related_entity())
    # creme_entity        = GenericForeignKey(ct_field="entity_content_type", fk_field="entity_id")
    entity_content_type = creme_fields.EntityCTypeForeignKey(related_name='+',
                                                             editable=False)
    entity = models.ForeignKey(
        creme_models.CremeEntity,
        related_name='commercial_approaches',
        editable=False,
        on_delete=models.CASCADE,
    )  # .set_tags(viewable=False) uncomment if it becomes an auxiliary (get_related_entity())
    creme_entity = creme_fields.RealEntityForeignKey(
        ct_field='entity_content_type', fk_field='entity')

    creation_label = _('Create a commercial approach')
    save_label = _('Save the commercial approach')

    class Meta:
        app_label = 'commercial'
        verbose_name = _('Commercial approach')
        verbose_name_plural = _('Commercial approaches')

    def __str__(self):
        return self.title

    @staticmethod
    def get_approaches(entity_pk=None):
        # queryset = CommercialApproach.objects.filter(ok_or_in_futur=False) \
        #                                      .select_related('related_activity')
        queryset = CommercialApproach.objects.select_related(
            'related_activity')

        return queryset.filter(entity_id=entity_pk) if entity_pk else \
               queryset.exclude(entity__is_deleted=True)

    @staticmethod
    def get_approaches_for_ctypes(ct_ids):
        warnings.warn(
            'CommercialApproach.get_approaches_for_ctypes() is deprecated.',
            DeprecationWarning)
        # return CommercialApproach.objects.filter(entity_content_type__in=ct_ids, ok_or_in_futur=False) \
        return CommercialApproach.objects.filter(entity_content_type__in=ct_ids) \
                                 .select_related('related_activity')
Beispiel #4
0
class Action(creme_models.CremeModel):
    title = models.CharField(_('Title'), max_length=200)
    is_ok = models.BooleanField(
        _('Expected reaction has been done'),
        editable=False,
        default=False,
    )
    description = models.TextField(_('Source action'), blank=True)

    creation_date = creme_fields.CreationDateTimeField(_('Creation date'),
                                                       editable=False)
    expected_reaction = models.TextField(_('Target action'), blank=True)
    deadline = models.DateTimeField(_('Deadline'))
    validation_date = models.DateTimeField(
        _('Validation date'),
        blank=True,
        null=True,
        editable=False,
    )

    user = creme_fields.CremeUserForeignKey(verbose_name=_('Owner user'))

    entity_content_type = creme_fields.EntityCTypeForeignKey(related_name='+',
                                                             editable=False)
    entity = models.ForeignKey(
        creme_models.CremeEntity,
        related_name='assistants_actions',
        editable=False,
        on_delete=models.CASCADE,
    ).set_tags(viewable=False)
    creme_entity = creme_fields.RealEntityForeignKey(
        ct_field='entity_content_type',
        fk_field='entity',
    )

    objects = ActionManager()

    creation_label = _('Create an action')
    save_label = _('Save the action')

    class Meta:
        app_label = 'assistants'
        verbose_name = _('Action')
        verbose_name_plural = _('Actions')

    def __str__(self):
        return self.title

    def get_edit_absolute_url(self):
        return reverse('assistants__edit_action', args=(self.id, ))

    def get_related_entity(self):  # For generic views
        return self.creme_entity
Beispiel #5
0
class Memo(creme_models.CremeModel):
    content       = models.TextField(_('Content'))
    on_homepage   = models.BooleanField(_('Displayed on homepage'), blank=True, default=False)
    creation_date = creme_fields.CreationDateTimeField(_('Creation date'), editable=False)
    user          = creme_fields.CremeUserForeignKey(verbose_name=_('Owner user'))

    entity_content_type = creme_fields.EntityCTypeForeignKey(related_name='+', editable=False)
    entity              = models.ForeignKey(creme_models.CremeEntity,  related_name='assistants_memos',
                                            editable=False, on_delete=models.CASCADE,
                                           ).set_tags(viewable=False)
    creme_entity        = creme_fields.RealEntityForeignKey(ct_field='entity_content_type', fk_field='entity')

    objects = MemoManager()

    creation_label = _('Create a memo')
    save_label     = _('Save the memo')

    class Meta:
        app_label = 'assistants'
        verbose_name = _('Memo')
        verbose_name_plural = _('Memos')

    def __str__(self):
        # NB: translate for unicode can not take 2 arguments...
        return ellipsis(self.content.strip().replace('\n', ''), 25)

    def get_edit_absolute_url(self):
        return reverse('assistants__edit_memo', args=(self.id,))

    # @staticmethod
    # def get_memos(entity):
    #     warnings.warn('Memo.get_memos() is deprecated.', DeprecationWarning)
    #     return Memo.objects.filter(entity_id=entity.id).select_related('user')

    # @staticmethod
    # def get_memos_for_home(user):
    #     warnings.warn('Memo.get_memos_for_home() is deprecated.', DeprecationWarning)
    #     return Memo.objects.filter(on_homepage=True,
    #                                user__in=[user] + user.teams,
    #                               ) \
    #                       .select_related('user')

    # @staticmethod
    # def get_memos_for_ctypes(ct_ids, user):
    #     warnings.warn('Memo.get_memos_for_ctypes() is deprecated.', DeprecationWarning)
    #     return Memo.objects.filter(entity_content_type__in=ct_ids, user__in=[user] + user.teams) \
    #                        .select_related('user')

    def get_related_entity(self):  # For generic views
        return self.creme_entity
Beispiel #6
0
class ToDo(CremeModel):
    title = models.CharField(_('Title'), max_length=200)
    is_ok = models.BooleanField(_('Done?'), editable=False, default=False)

    # Needed by creme_core.core.reminder
    reminded = models.BooleanField(_('Notification sent'), editable=False, default=False)

    description = models.TextField(_('Description'), blank=True)
    creation_date = creme_fields.CreationDateTimeField(_('Creation date'), editable=False)
    deadline = models.DateTimeField(_('Deadline'), blank=True, null=True)
    user = creme_fields.CremeUserForeignKey(verbose_name=_('Owner user'))

    entity_content_type = creme_fields.EntityCTypeForeignKey(related_name='+', editable=False)
    entity = models.ForeignKey(
        CremeEntity, related_name='assistants_todos',
        editable=False, on_delete=models.CASCADE,
    ).set_tags(viewable=False)
    creme_entity = creme_fields.RealEntityForeignKey(
        ct_field='entity_content_type', fk_field='entity',
    )

    objects = ToDoManager()

    creation_label = _('Create a todo')
    save_label     = _('Save the todo')

    class Meta:
        app_label = 'assistants'
        verbose_name = _('Todo')
        verbose_name_plural = _('Todos')

    def __str__(self):
        return self.title

    def get_edit_absolute_url(self):
        return reverse('assistants__edit_todo', args=(self.id,))

    def get_related_entity(self):  # For generic views
        return self.creme_entity

    @property
    def to_be_reminded(self):
        return self.deadline and not self.is_ok and not self.reminded
class CommercialApproach(creme_models.CremeModel):
    title = models.CharField(_('Title'), max_length=200)
    description = models.TextField(_('Description'), blank=True)
    creation_date = creme_fields.CreationDateTimeField(_('Creation date'),
                                                       editable=False)

    related_activity = models.ForeignKey(
        settings.ACTIVITIES_ACTIVITY_MODEL,
        null=True,
        editable=False,
        on_delete=models.CASCADE,
    )

    entity_content_type = creme_fields.EntityCTypeForeignKey(related_name='+',
                                                             editable=False)
    entity = models.ForeignKey(
        creme_models.CremeEntity,
        related_name='commercial_approaches',
        editable=False,
        on_delete=models.CASCADE,
    )  # .set_tags(viewable=False) uncomment if it becomes an auxiliary (get_related_entity())
    creme_entity = creme_fields.RealEntityForeignKey(
        ct_field='entity_content_type', fk_field='entity')

    creation_label = _('Create a commercial approach')
    save_label = _('Save the commercial approach')

    class Meta:
        app_label = 'commercial'
        verbose_name = _('Commercial approach')
        verbose_name_plural = _('Commercial approaches')

    def __str__(self):
        return self.title

    @staticmethod
    def get_approaches(entity_pk=None):
        queryset = CommercialApproach.objects.select_related(
            'related_activity')

        return queryset.filter(entity_id=entity_pk) if entity_pk else \
               queryset.exclude(entity__is_deleted=True)
class Migration(migrations.Migration):
    # replaces = [
    #     ('commercial', '0001_initial'),
    #     ('commercial', '0009_v2_0__real_entity_fks_1'),
    #     ('commercial', '0010_v2_0__real_entity_fks_2'),
    #     ('commercial', '0011_v2_0__real_entity_fks_3'),
    #     ('commercial', '0012_v2_0__rm_commapp_ok_or_in_futur'),
    # ]

    initial = True
    dependencies = [
        ('contenttypes', '0001_initial'),
        ('creme_core', '0001_initial'),
        migrations.swappable_dependency(settings.PERSONS_ORGANISATION_MODEL),
        migrations.swappable_dependency(settings.ACTIVITIES_ACTIVITY_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='MarketSegment',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('name', models.CharField(max_length=100,
                                          verbose_name='Name')),
                ('property_type',
                 models.ForeignKey(editable=False,
                                   to='creme_core.CremePropertyType',
                                   null=True,
                                   on_delete=CASCADE)),
            ],
            options={
                'verbose_name': 'Market segment',
                'verbose_name_plural': 'Market segments',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='ActType',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('title', models.CharField(max_length=75,
                                           verbose_name='Title')),
                ('is_custom', models.BooleanField(default=True)),
            ],
            options={
                'ordering': ('title', ),
                'verbose_name': 'Type of commercial action',
                'verbose_name_plural': 'Types of commercial actions',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='Act',
            fields=[
                ('cremeentity_ptr',
                 models.OneToOneField(
                     parent_link=True,
                     auto_created=True,
                     primary_key=True,
                     serialize=False,
                     to='creme_core.CremeEntity',
                     on_delete=CASCADE,
                 )),
                ('name',
                 models.CharField(
                     max_length=100,
                     verbose_name='Name of the commercial action')),
                ('expected_sales',
                 models.PositiveIntegerField(verbose_name='Expected sales')),
                ('cost',
                 models.PositiveIntegerField(
                     null=True,
                     verbose_name='Cost of the commercial action',
                     blank=True)),
                ('goal',
                 models.TextField(verbose_name='Goal of the action',
                                  blank=True)),
                ('start', models.DateField(verbose_name='Start')),
                ('due_date', models.DateField(verbose_name='Due date')),
                ('segment',
                 models.ForeignKey(on_delete=PROTECT,
                                   verbose_name='Related segment',
                                   to='commercial.MarketSegment')),
                ('act_type',
                 models.ForeignKey(on_delete=PROTECT,
                                   verbose_name='Type',
                                   to='commercial.ActType')),
            ],
            options={
                'swappable': 'COMMERCIAL_ACT_MODEL',
                'ordering': ('name', ),
                'verbose_name': 'Commercial action',
                'verbose_name_plural': 'Commercial actions',
            },
            bases=('creme_core.cremeentity', ),
        ),
        migrations.CreateModel(
            name='ActObjective',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('name', models.CharField(max_length=100,
                                          verbose_name='Name')),
                ('counter',
                 models.PositiveIntegerField(default=0,
                                             verbose_name='Counter',
                                             editable=False)),
                ('counter_goal',
                 models.PositiveIntegerField(default=1,
                                             verbose_name='Value to reach')),
                ('act',
                 models.ForeignKey(related_name='objectives',
                                   editable=False,
                                   to=settings.COMMERCIAL_ACT_MODEL,
                                   on_delete=CASCADE)),
                ('ctype',
                 creme_fields.CTypeForeignKey(
                     blank=True,
                     editable=False,
                     to='contenttypes.ContentType',
                     null=True,
                     verbose_name='Counted type',
                 )),
                ('filter',
                 models.ForeignKey(
                     on_delete=PROTECT,
                     blank=True,
                     editable=False,
                     to='creme_core.EntityFilter',
                     null=True,
                     verbose_name='Filter on counted entities',
                 )),
            ],
            options={
                'verbose_name': 'Commercial Objective',
                'verbose_name_plural': 'Commercial Objectives',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='ActObjectivePattern',
            fields=[
                ('cremeentity_ptr',
                 models.OneToOneField(
                     parent_link=True,
                     auto_created=True,
                     primary_key=True,
                     serialize=False,
                     to='creme_core.CremeEntity',
                     on_delete=CASCADE,
                 )),
                ('name', models.CharField(max_length=100,
                                          verbose_name='Name')),
                ('average_sales',
                 models.PositiveIntegerField(verbose_name='Average sales')),
                ('segment',
                 models.ForeignKey(verbose_name='Related segment',
                                   to='commercial.MarketSegment',
                                   on_delete=CASCADE)),
            ],
            options={
                'swappable': 'COMMERCIAL_PATTERN_MODEL',
                'ordering': ('name', ),
                'verbose_name': 'Objective pattern',
                'verbose_name_plural': 'Objective patterns',
            },
            bases=('creme_core.cremeentity', ),
        ),
        migrations.CreateModel(
            name='ActObjectivePatternComponent',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('name', models.CharField(max_length=100,
                                          verbose_name='Name')),
                ('success_rate',
                 models.PositiveIntegerField(verbose_name='Success rate')),
                ('ctype',
                 creme_fields.CTypeForeignKey(blank=True,
                                              editable=False,
                                              to='contenttypes.ContentType',
                                              null=True,
                                              verbose_name='Counted type')),
                ('filter',
                 models.ForeignKey(
                     on_delete=PROTECT,
                     blank=True,
                     editable=False,
                     to='creme_core.EntityFilter',
                     null=True,
                     verbose_name='Filter on counted entities',
                 )),
                ('parent',
                 models.ForeignKey(
                     related_name='children',
                     editable=False,
                     to='commercial.ActObjectivePatternComponent',
                     null=True,
                     on_delete=CASCADE,
                 )),
                ('pattern',
                 models.ForeignKey(related_name='components',
                                   editable=False,
                                   to=settings.COMMERCIAL_PATTERN_MODEL,
                                   on_delete=CASCADE)),
            ],
            options={},
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='CommercialApproach',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('title', models.CharField(max_length=200,
                                           verbose_name='Title')),
                # ('ok_or_in_futur', models.BooleanField(default=False, verbose_name='Done?', editable=False)),
                ('description',
                 models.TextField(verbose_name='Description', blank=True)),
                ('creation_date',
                 creme_fields.CreationDateTimeField(
                     default=now,
                     verbose_name='Creation date',
                     editable=False,
                     blank=True)),
                # ('entity_id', models.PositiveIntegerField(editable=False)),
                ('entity',
                 models.ForeignKey(
                     editable=False,
                     on_delete=CASCADE,
                     to='creme_core.CremeEntity',
                     related_name='commercial_approaches',
                 )),
                # ('entity_content_type', models.ForeignKey(related_name='comapp_entity_set', editable=False, to='contenttypes.ContentType', on_delete=CASCADE)),
                ('entity_content_type',
                 creme_fields.EntityCTypeForeignKey(
                     editable=False,
                     on_delete=CASCADE,
                     related_name='+',
                     to='contenttypes.ContentType',
                 )),
                ('related_activity',
                 models.ForeignKey(editable=False,
                                   to=settings.ACTIVITIES_ACTIVITY_MODEL,
                                   null=True,
                                   on_delete=CASCADE)),
            ],
            options={
                'verbose_name': 'Commercial approach',
                'verbose_name_plural': 'Commercial approaches',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='Strategy',
            fields=[
                ('cremeentity_ptr',
                 models.OneToOneField(
                     parent_link=True,
                     auto_created=True,
                     primary_key=True,
                     serialize=False,
                     to='creme_core.CremeEntity',
                     on_delete=CASCADE,
                 )),
                ('name', models.CharField(max_length=100,
                                          verbose_name='Name')),
                ('evaluated_orgas',
                 models.ManyToManyField(
                     verbose_name='Evaluated organisation(s)',
                     editable=False,
                     to=settings.PERSONS_ORGANISATION_MODEL,
                 )),
            ],
            options={
                'swappable': 'COMMERCIAL_STRATEGY_MODEL',
                'ordering': ('name', ),
                'verbose_name': 'Commercial strategy',
                'verbose_name_plural': 'Commercial strategies',
            },
            bases=('creme_core.cremeentity', ),
        ),
        migrations.CreateModel(
            name='MarketSegmentDescription',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('product', models.TextField(verbose_name='Product',
                                             blank=True)),
                ('place', models.TextField(verbose_name='Place', blank=True)),
                ('price', models.TextField(verbose_name='Price', blank=True)),
                ('promotion',
                 models.TextField(verbose_name='Promotion', blank=True)),
                ('segment',
                 models.ForeignKey(to='commercial.MarketSegment',
                                   on_delete=CASCADE)),
                ('strategy',
                 models.ForeignKey(
                     related_name='segment_info',
                     editable=False,
                     to=settings.COMMERCIAL_STRATEGY_MODEL,
                     on_delete=CASCADE,
                 )),
            ],
            options={
                'verbose_name': 'Market segment description',
                'verbose_name_plural': 'Market segment descriptions',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='CommercialAsset',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('name', models.CharField(max_length=100,
                                          verbose_name='Name')),
                ('strategy',
                 models.ForeignKey(related_name='assets',
                                   editable=False,
                                   to=settings.COMMERCIAL_STRATEGY_MODEL,
                                   on_delete=CASCADE)),
            ],
            options={
                'verbose_name': 'Commercial asset',
                'verbose_name_plural': 'Commercial assets',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='CommercialAssetScore',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('score', models.PositiveSmallIntegerField()),
                ('asset',
                 models.ForeignKey(to='commercial.CommercialAsset',
                                   on_delete=CASCADE)),
                ('organisation',
                 models.ForeignKey(to=settings.PERSONS_ORGANISATION_MODEL,
                                   on_delete=CASCADE)),
                ('segment_desc',
                 models.ForeignKey(to='commercial.MarketSegmentDescription',
                                   on_delete=CASCADE)),
            ],
            options={},
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='MarketSegmentCategory',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('category', models.PositiveSmallIntegerField()),
                ('organisation',
                 models.ForeignKey(to=settings.PERSONS_ORGANISATION_MODEL,
                                   on_delete=CASCADE)),
                ('strategy',
                 models.ForeignKey(to=settings.COMMERCIAL_STRATEGY_MODEL,
                                   on_delete=CASCADE)),
                ('segment_desc',
                 models.ForeignKey(to='commercial.MarketSegmentDescription',
                                   on_delete=CASCADE)),
            ],
            options={},
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='MarketSegmentCharm',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('name', models.CharField(max_length=100,
                                          verbose_name='Name')),
                ('strategy',
                 models.ForeignKey(related_name='charms',
                                   editable=False,
                                   to=settings.COMMERCIAL_STRATEGY_MODEL,
                                   on_delete=CASCADE)),
            ],
            options={
                'verbose_name': 'Segment charm',
                'verbose_name_plural': 'Segment charms',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='MarketSegmentCharmScore',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('score', models.PositiveSmallIntegerField()),
                ('charm',
                 models.ForeignKey(to='commercial.MarketSegmentCharm',
                                   on_delete=CASCADE)),
                ('organisation',
                 models.ForeignKey(to=settings.PERSONS_ORGANISATION_MODEL,
                                   on_delete=CASCADE)),
                ('segment_desc',
                 models.ForeignKey(to='commercial.MarketSegmentDescription',
                                   on_delete=CASCADE)),
            ],
            options={},
            bases=(models.Model, ),
        ),
    ]
class Migration(migrations.Migration):
    # replaces = [
    #     ('crudity', '0001_initial'),
    #     ('crudity', '0003_v1_7__sync_job_user'),
    # ]

    initial = True
    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('contenttypes', '0001_initial'),
        ('auth', '0001_initial'),
        ('creme_core', '0001_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='History',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('created',
                 creme_fields.CreationDateTimeField(
                     default=now,
                     verbose_name='Creation date',
                     editable=False,
                     blank=True)),
                ('action',
                 models.CharField(max_length=100, verbose_name='Action')),
                ('source',
                 models.CharField(max_length=100, verbose_name='Source')),
                ('description',
                 models.TextField(null=True,
                                  verbose_name='Description',
                                  blank=True)),
                ('entity',
                 models.ForeignKey(verbose_name='Entity',
                                   to='creme_core.CremeEntity',
                                   on_delete=CASCADE)),
                ('user',
                 creme_fields.CremeUserForeignKey(default=None,
                                                  blank=True,
                                                  to=settings.AUTH_USER_MODEL,
                                                  null=True,
                                                  verbose_name='Owner')),
            ],
            options={
                'verbose_name': 'History',
                'verbose_name_plural': 'History',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='WaitingAction',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('action',
                 models.CharField(max_length=100, verbose_name='Action')),
                ('source',
                 models.CharField(max_length=100, verbose_name='Source')),
                ('data', models.TextField(null=True, blank=True)),
                ('subject',
                 models.CharField(max_length=100, verbose_name='Subject')),
                ('ct',
                 creme_fields.CTypeForeignKey(verbose_name="Ressource's type",
                                              to='contenttypes.ContentType')),
                ('user',
                 creme_fields.CremeUserForeignKey(default=None,
                                                  blank=True,
                                                  to=settings.AUTH_USER_MODEL,
                                                  null=True,
                                                  verbose_name='Owner')),
            ],
            options={
                'verbose_name': 'Waiting action',
                'verbose_name_plural': 'Waiting actions',
            },
            bases=(models.Model, ),
        ),
    ]
class Migration(migrations.Migration):
    # replaces = [
    #     ('assistants', '0001_initial'),
    #     ('assistants', '0006_v2_0__real_entity_fks_1'),
    #     ('assistants', '0007_v2_0__real_entity_fks_2'),
    #     ('assistants', '0008_v2_0__real_entity_fks_3'),
    # ]

    initial = True
    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('auth', '0001_initial'),
        ('contenttypes', '0001_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='Action',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('title', models.CharField(max_length=200,
                                           verbose_name='Title')),
                ('is_ok',
                 models.BooleanField(
                     default=False,
                     verbose_name='Expected reaction has been done',
                     editable=False)),
                ('description',
                 models.TextField(verbose_name='Source action', blank=True)),
                ('creation_date',
                 creme_fields.CreationDateTimeField(
                     default=now,
                     verbose_name='Creation date',
                     editable=False,
                     blank=True)),
                ('expected_reaction',
                 models.TextField(verbose_name='Target action', blank=True)),
                ('deadline', models.DateTimeField(verbose_name='Deadline')),
                ('validation_date',
                 models.DateTimeField(verbose_name='Validation date',
                                      null=True,
                                      editable=False,
                                      blank=True)),
                # ('entity_id', models.PositiveIntegerField(editable=False)),
                ('entity',
                 models.ForeignKey(
                     editable=False,
                     on_delete=CASCADE,
                     to='creme_core.CremeEntity',
                     related_name='assistants_actions',
                 )),
                # ('entity_content_type', models.ForeignKey(related_name='action_entity_set', editable=False, to='contenttypes.ContentType', on_delete=CASCADE)),
                ('entity_content_type',
                 creme_fields.EntityCTypeForeignKey(
                     editable=False,
                     on_delete=CASCADE,
                     related_name='+',
                     to='contenttypes.ContentType',
                 )),
                ('user',
                 creme_fields.CremeUserForeignKey(
                     verbose_name='Owner user', to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'Action',
                'verbose_name_plural': 'Actions',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='Alert',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('title', models.CharField(max_length=200,
                                           verbose_name='Title')),
                ('description',
                 models.TextField(verbose_name='Description', blank=True)),
                ('is_validated',
                 models.BooleanField(default=False,
                                     verbose_name='Validated',
                                     editable=False)),
                ('reminded',
                 models.BooleanField(default=False,
                                     editable=False,
                                     verbose_name='Notification sent')),
                ('trigger_date',
                 models.DateTimeField(verbose_name='Trigger date')),
                # ('entity_id', models.PositiveIntegerField(editable=False)),
                ('entity',
                 models.ForeignKey(
                     editable=False,
                     on_delete=CASCADE,
                     to='creme_core.CremeEntity',
                     related_name='assistants_alerts',
                 )),
                # ('entity_content_type', models.ForeignKey(related_name='alert_entity_set', editable=False, to='contenttypes.ContentType', on_delete=CASCADE)),
                ('entity_content_type',
                 creme_fields.EntityCTypeForeignKey(
                     editable=False,
                     on_delete=CASCADE,
                     related_name='+',
                     to='contenttypes.ContentType',
                 )),
                ('user',
                 creme_fields.CremeUserForeignKey(
                     verbose_name='Owner user', to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'Alert',
                'verbose_name_plural': 'Alerts',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='Memo',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('content', models.TextField(verbose_name='Content')),
                ('on_homepage',
                 models.BooleanField(default=False,
                                     blank=True,
                                     verbose_name='Displayed on homepage')),
                ('creation_date',
                 creme_fields.CreationDateTimeField(
                     default=now,
                     verbose_name='Creation date',
                     editable=False,
                     blank=True)),
                # ('entity_id', models.PositiveIntegerField(editable=False)),
                ('entity',
                 models.ForeignKey(
                     editable=False,
                     on_delete=CASCADE,
                     to='creme_core.CremeEntity',
                     related_name='assistants_memos',
                 )),
                # ('entity_content_type', models.ForeignKey(related_name='memo_entity_set', editable=False, to='contenttypes.ContentType', on_delete=CASCADE)),
                ('entity_content_type',
                 creme_fields.EntityCTypeForeignKey(
                     editable=False,
                     on_delete=CASCADE,
                     related_name='+',
                     to='contenttypes.ContentType',
                 )),
                ('user',
                 creme_fields.CremeUserForeignKey(
                     verbose_name='Owner user', to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'Memo',
                'verbose_name_plural': 'Memos',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='ToDo',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('title', models.CharField(max_length=200,
                                           verbose_name='Title')),
                ('is_ok',
                 models.BooleanField(default=False,
                                     verbose_name='Done ?',
                                     editable=False)),
                ('reminded',
                 models.BooleanField(default=False,
                                     editable=False,
                                     verbose_name='Notification sent')),
                ('description',
                 models.TextField(verbose_name='Description', blank=True)),
                ('creation_date',
                 creme_fields.CreationDateTimeField(
                     default=now,
                     verbose_name='Creation date',
                     editable=False,
                     blank=True)),
                ('deadline',
                 models.DateTimeField(null=True,
                                      verbose_name='Deadline',
                                      blank=True)),
                # ('entity_id', models.PositiveIntegerField(editable=False)),
                ('entity',
                 models.ForeignKey(
                     editable=False,
                     on_delete=CASCADE,
                     to='creme_core.CremeEntity',
                     related_name='assistants_todos',
                 )),
                # ('entity_content_type', models.ForeignKey(related_name='todo_entity_set', editable=False, to='contenttypes.ContentType', on_delete=CASCADE)),
                ('entity_content_type',
                 creme_fields.EntityCTypeForeignKey(
                     editable=False,
                     on_delete=CASCADE,
                     related_name='+',
                     to='contenttypes.ContentType',
                 )),
                ('user',
                 creme_fields.CremeUserForeignKey(
                     verbose_name='Owner user', to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'verbose_name': 'Todo',
                'verbose_name_plural': 'Todos',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='UserMessagePriority',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('title', models.CharField(max_length=200,
                                           verbose_name='Title')),
                ('is_custom', models.BooleanField(default=True)),
            ],
            options={
                'ordering': ('title', ),
                'verbose_name': 'Priority of user message',
                'verbose_name_plural': 'Priorities of user message',
            },
            bases=(models.Model, ),
        ),
        migrations.CreateModel(
            name='UserMessage',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  serialize=False,
                                  auto_created=True,
                                  primary_key=True)),
                ('title', models.CharField(max_length=200,
                                           verbose_name='Title')),
                ('body', models.TextField(verbose_name='Message body')),
                ('creation_date',
                 models.DateTimeField(verbose_name='Creation date')),
                ('email_sent', models.BooleanField(default=False)),
                # ('entity_id', models.PositiveIntegerField(null=True)),
                ('entity',
                 models.ForeignKey(
                     editable=False,
                     on_delete=CASCADE,
                     to='creme_core.CremeEntity',
                     related_name='assistants_messages',
                     null=True,
                 )),
                # ('entity_content_type', models.ForeignKey(to='contenttypes.ContentType', null=True, on_delete=CASCADE)),
                ('entity_content_type',
                 creme_fields.EntityCTypeForeignKey(
                     editable=False,
                     on_delete=CASCADE,
                     related_name='+',
                     to='contenttypes.ContentType',
                     null=True,
                 )),
                ('priority',
                 models.ForeignKey(on_delete=PROTECT,
                                   verbose_name='Priority',
                                   to='assistants.UserMessagePriority')),
                ('recipient',
                 creme_fields.CremeUserForeignKey(
                     to=settings.AUTH_USER_MODEL,
                     verbose_name='Recipient',
                     related_name='received_assistants_messages_set',
                 )),
                ('sender',
                 creme_fields.CremeUserForeignKey(
                     to=settings.AUTH_USER_MODEL,
                     verbose_name='Sender',
                     related_name='sent_assistants_messages_set',
                 )),
            ],
            options={
                'verbose_name': 'User message',
                'verbose_name_plural': 'User messages',
            },
            bases=(models.Model, ),
        ),
    ]
Beispiel #11
0
class ToDo(CremeModel):
    title = models.CharField(_('Title'), max_length=200)
    is_ok = models.BooleanField(_('Done ?'), editable=False, default=False)
    reminded = models.BooleanField(
        _('Notification sent'), editable=False,
        default=False)  # Needed by creme_core.core.reminder
    description = models.TextField(_('Description'), blank=True)
    creation_date = creme_fields.CreationDateTimeField(_('Creation date'),
                                                       editable=False)
    deadline = models.DateTimeField(_('Deadline'), blank=True, null=True)
    user = creme_fields.CremeUserForeignKey(verbose_name=_('Owner user'))

    entity_content_type = creme_fields.EntityCTypeForeignKey(related_name='+',
                                                             editable=False)
    entity = models.ForeignKey(
        CremeEntity,
        related_name='assistants_todos',
        editable=False,
        on_delete=models.CASCADE,
    ).set_tags(viewable=False)
    creme_entity = creme_fields.RealEntityForeignKey(
        ct_field='entity_content_type', fk_field='entity')

    objects = ToDoManager()

    creation_label = _('Create a todo')
    save_label = _('Save the todo')

    class Meta:
        app_label = 'assistants'
        verbose_name = _('Todo')
        verbose_name_plural = _('Todos')

    def __str__(self):
        return self.title

    def get_edit_absolute_url(self):
        return reverse('assistants__edit_todo', args=(self.id, ))

    # @staticmethod
    # def get_todos(entity):
    #     warnings.warn('ToDo.get_todos() is deprecated.', DeprecationWarning)
    #     return ToDo.objects.filter(entity_id=entity.id).select_related('user')

    # @staticmethod
    # def get_todos_for_home(user):
    #     warnings.warn('ToDo.get_todos_for_home() is deprecated ; '
    #                   'use ToDo.objects.filter_by_user() instead.',
    #                   DeprecationWarning
    #                  )
    #     return ToDo.objects.filter(user__in=[user] + user.teams)\
    #                        .select_related('user')

    # @staticmethod
    # def get_todos_for_ctypes(ct_ids, user):
    #     warnings.warn('ToDo.get_todos_for_ctypes() is deprecated.', DeprecationWarning)
    #     return ToDo.objects.filter(entity_content_type__in=ct_ids,
    #                                user__in=[user] + user.teams
    #                               ).select_related('user')

    def get_related_entity(self):  # For generic views
        return self.creme_entity

    @property
    def to_be_reminded(self):
        return self.deadline and not self.is_ok and not self.reminded