Esempio n. 1
0
def insert_resource_inlines():
    # Clean previous state
    for related in Resource._related:
        modeladmin = get_modeladmin(related)
        modeladmin_class = type(modeladmin)
        for inline in getattr(modeladmin_class, 'inlines', []):
            if inline.__name__ == 'ResourceInline':
                modeladmin_class.inlines.remove(inline)
    resources = Resource.objects.filter(is_active=True)
    for ct, resources in resources.group_by('content_type').items():
        inline = resource_inline_factory(resources)
        model = ct.model_class()
        insertattr(model, 'inlines', inline)
Esempio n. 2
0
def insert_resource_inlines():
    # Clean previous state
    for related in Resource._related:
        modeladmin = get_modeladmin(related)
        modeladmin_class = type(modeladmin)
        for inline in getattr(modeladmin_class, 'inlines', []):
            if inline.__name__ == 'ResourceInline':
                modeladmin_class.inlines.remove(inline)
    resources = Resource.objects.filter(is_active=True)
    for ct, resources in resources.group_by('content_type').items():
        inline = resource_inline_factory(resources)
        model = ct.model_class()
        insertattr(model, 'inlines', inline)
Esempio n. 3
0
admin.site.register(Fee, BillAdmin)
admin.site.register(AmendmentFee, BillAdmin)
admin.site.register(ProForma, BillAdmin)
admin.site.register(BillLine, BillLineAdmin)


class BillContactInline(admin.StackedInline):
    model = BillContact
    fields = ('name', 'address', ('city', 'zipcode'), 'country', 'vat')
    
    def formfield_for_dbfield(self, db_field, **kwargs):
        """ Make value input widget bigger """
        if db_field.name == 'name':
            kwargs['widget'] = forms.TextInput(attrs={'size':'70'})
        if db_field.name == 'address':
            kwargs['widget'] = forms.Textarea(attrs={'cols': 70, 'rows': 2})
        if db_field.name == 'email_usage':
            kwargs['widget'] = paddingCheckboxSelectMultiple(45)
        return super(BillContactInline, self).formfield_for_dbfield(db_field, **kwargs)


def has_bill_contact(account):
    return hasattr(account, 'billcontact')
has_bill_contact.boolean = True
has_bill_contact.admin_order_field = 'billcontact'


insertattr(AccountAdmin, 'inlines', BillContactInline)
insertattr(AccountAdmin, 'list_display', has_bill_contact)
insertattr(AccountAdmin, 'list_filter', HasBillContactListFilter)
Esempio n. 4
0
    extra = 0
    fields = (
        'short_name', 'full_name', 'email', 'email_usage', ('phone', 'phone2'),
        'address', ('city', 'zipcode'), 'country',
    )
    
    def get_extra(self, request, obj=None, **kwargs):
       return 0 if obj and obj.contacts.exists() else 1


def has_invoice(account):
    try:
        account.invoicecontact
    except InvoiceContact.DoesNotExist:
        return False
    return True
has_invoice.boolean = True
has_invoice.admin_order_field = 'invoicecontact'


insertattr(AccountAdmin, 'inlines', ContactInline)
insertattr(AccountAdmin, 'inlines', InvoiceContactInline)
insertattr(AccountAdmin, 'list_display', has_invoice)
insertattr(AccountAdmin, 'list_filter', HasInvoiceContactListFilter)
search_fields = (
    'contacts__short_name', 'contacts__full_name', 'contacts__phone',
    'contacts__phone2', 'contacts__email'
)
for field in search_fields:
    insertattr(AccountAdmin, 'search_fields', field)
Esempio n. 5
0
admin.site.register(ProForma, BillAdmin)
admin.site.register(BillLine, BillLineAdmin)


class BillContactInline(admin.StackedInline):
    model = BillContact
    fields = ('name', 'address', ('city', 'zipcode'), 'country', 'vat')

    def formfield_for_dbfield(self, db_field, **kwargs):
        """ Make value input widget bigger """
        if db_field.name == 'name':
            kwargs['widget'] = forms.TextInput(attrs={'size': '90'})
        if db_field.name == 'address':
            kwargs['widget'] = forms.Textarea(attrs={'cols': 70, 'rows': 2})
        if db_field.name == 'email_usage':
            kwargs['widget'] = paddingCheckboxSelectMultiple(45)
        return super().formfield_for_dbfield(db_field, **kwargs)


def has_bill_contact(account):
    return hasattr(account, 'billcontact')


has_bill_contact.boolean = True
has_bill_contact.admin_order_field = 'billcontact'

insertattr(AccountAdmin, 'inlines', BillContactInline)
insertattr(AccountAdmin, 'list_display', has_bill_contact)
insertattr(AccountAdmin, 'list_filter', HasBillContactListFilter)
insertattr(AccountAdmin, 'list_select_related', 'billcontact')
Esempio n. 6
0
from django.contrib import admin

from orchestra.admin.utils import insertattr

from .models import WebDatabase
from ..models import Web


class WebDatabaseInline(admin.TabularInline):
    model = WebDatabase


insertattr(Web, 'inlines', WebDatabaseInline)
Esempio n. 7
0
        'email_usage',
        ('phone', 'phone2'),
    )

    def get_extra(self, request, obj=None, **kwargs):
        return 0 if obj and obj.contacts.exists() else 1

    def get_view_on_site_url(self, obj=None):
        if obj:
            return change_url(obj)

    def formfield_for_dbfield(self, db_field, **kwargs):
        """ Make value input widget bigger """
        if db_field.name == 'short_name':
            kwargs['widget'] = forms.TextInput(attrs={'size': '15'})
        if db_field.name == 'address':
            kwargs['widget'] = forms.Textarea(attrs={'cols': 70, 'rows': 2})
        if db_field.name == 'email_usage':
            kwargs['widget'] = paddingCheckboxSelectMultiple(45)
        return super(ContactInline,
                     self).formfield_for_dbfield(db_field, **kwargs)


insertattr(AccountAdmin, 'inlines', ContactInline)
search_fields = (
    'contacts__short_name',
    'contacts__full_name',
)
for field in search_fields:
    insertattr(AccountAdmin, 'search_fields', field)
Esempio n. 8
0
    
    def display_forward(self, address):
        values = [ dest for dest in address.forward.split() ]
        return '<br>'.join(values)
    display_forward.short_description = _("Forward")
    display_forward.allow_tags = True
    
    def formfield_for_dbfield(self, db_field, **kwargs):
        if db_field.name == 'forward':
            kwargs['widget'] = forms.TextInput(attrs={'size':'118'})
        if db_field.name == 'mailboxes':
            mailboxes = db_field.rel.to.objects.select_related('user')
            kwargs['queryset'] = mailboxes.filter(user__account=self.account)
        return super(AddressAdmin, self).formfield_for_dbfield(db_field, **kwargs)
    
    def get_queryset(self, request):
        """ Select related for performance """
        qs = super(AddressAdmin, self).get_queryset(request)
        return qs.select_related('domain')


class MailRoleAdmin(RoleAdmin):
    model = Mailbox
    name = 'mailbox'
    url_name = 'mailbox'
    form = MailRoleAdminForm


admin.site.register(Address, AddressAdmin)
insertattr(get_user_model(), 'roles', MailRoleAdmin)
Esempio n. 9
0
    class ResourceInline(generic.GenericTabularInline):
        model = ResourceData
        verbose_name_plural = _("resources")
        form = ResourceForm
        formset = ResourceInlineFormSet
        can_delete = False
        fields = (
            'verbose_name', 'used', 'display_last_update', 'allocated', 'unit'
        )
        readonly_fields = ('used', 'display_last_update')
        
        class Media:
            css = {
                'all': ('orchestra/css/hide-inline-id.css',)
            }
        
        display_last_update = admin_date('last_update', default=_("Never"))
        
        def has_add_permission(self, *args, **kwargs):
            """ Hidde add another """
            return False
    
    return ResourceInline

if not running_syncdb():
    # not run during syncdb
    for ct, resources in Resource.objects.group_by('content_type'):
        inline = resource_inline_factory(resources)
        model = ct.model_class()
        insertattr(model, 'inlines', inline)
Esempio n. 10
0
from orchestra.admin.utils import insertattr
from orchestra.contrib.websites.admin import WebsiteAdmin

from . import actions

insertattr(WebsiteAdmin, 'change_view_actions', actions.letsencrypt)
insertattr(WebsiteAdmin, 'actions', actions.letsencrypt)
Esempio n. 11
0
    change_readonly_fields = ('name',)
    inlines = [RateInline]

    def num_contracts(self, plan):
        num = plan.contracts__count
        url = reverse('admin:plans_contractedplan_changelist')
        url += '?plan__name={}'.format(plan.name)
        return format_html('<a href="{0}">{1}</a>', url, num)
    num_contracts.short_description = _("Contracts")
    num_contracts.admin_order_field = 'contracts__count'

    def get_queryset(self, request):
        qs = super(PlanAdmin, self).get_queryset(request)
        return qs.annotate(models.Count('contracts', distinct=True))


class ContractedPlanAdmin(AccountAdminMixin, admin.ModelAdmin):
    list_display = ('id', 'plan_link', 'account_link')
    list_filter = ('plan__name',)
    list_select_related = ('plan', 'account')
    search_fields = ('account__username', 'plan__name', 'id')
    actions = (list_accounts,)

    plan_link = admin_link('plan')


admin.site.register(Plan, PlanAdmin)
admin.site.register(ContractedPlan, ContractedPlanAdmin)

insertattr(Service, 'inlines', RateInline)
Esempio n. 12
0
    def num_contracts(self, plan):
        num = plan.contracts__count
        url = reverse("admin:plans_contractedplan_changelist")
        url += "?plan__name={}".format(plan.name)
        return '<a href="{0}">{1}</a>'.format(url, num)

    num_contracts.short_description = _("Contracts")
    num_contracts.admin_order_field = "contracts__count"
    num_contracts.allow_tags = True

    def get_queryset(self, request):
        qs = super(PlanAdmin, self).get_queryset(request)
        return qs.annotate(models.Count("contracts", distinct=True))


class ContractedPlanAdmin(AccountAdminMixin, admin.ModelAdmin):
    list_display = ("id", "plan_link", "account_link")
    list_filter = ("plan__name",)
    list_select_related = ("plan", "account")
    search_fields = ("account__username", "plan__name", "id")
    actions = (list_accounts,)

    plan_link = admin_link("plan")


admin.site.register(Plan, PlanAdmin)
admin.site.register(ContractedPlan, ContractedPlanAdmin)

insertattr(Service, "inlines", RateInline)
Esempio n. 13
0
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.utils.translation import ugettext_lazy as _

from orchestra.admin.utils import insertattr
from orchestra.apps.users.roles.admin import RoleAdmin

from .models import Jabber


class JabberRoleAdmin(RoleAdmin):
    model = Jabber
    name = 'jabber'
    url_name = 'jabber'


insertattr(get_user_model(), 'roles', JabberRoleAdmin)
Esempio n. 14
0
from .models import Plan, ContractedPlan, Rate


class RateInline(admin.TabularInline):
    model = Rate
    ordering = ('service', 'plan', 'quantity')


class PlanAdmin(ExtendedModelAdmin):
    list_display = ('name', 'is_default', 'is_combinable', 'allow_multiple', 'is_active')
    list_filter = ('is_default', 'is_combinable', 'allow_multiple', 'is_active')
    fields = ('verbose_name', 'name', 'is_default', 'is_combinable', 'allow_multiple')
    prepopulated_fields = {
        'name': ('verbose_name',)
    }
    change_readonly_fields = ('name',)
    inlines = [RateInline]


class ContractedPlanAdmin(AccountAdminMixin, admin.ModelAdmin):
    list_display = ('plan', 'account_link')
    list_filter = ('plan__name',)
    list_select_related = ('plan', 'account')


admin.site.register(Plan, PlanAdmin)
admin.site.register(ContractedPlan, ContractedPlanAdmin)

insertattr(Service, 'inlines', RateInline)
Esempio n. 15
0
from orchestra.admin.utils import insertattr
from orchestra.contrib.websites.admin import WebsiteAdmin

from .import actions


insertattr(WebsiteAdmin, 'change_view_actions', actions.letsencrypt)
insertattr(WebsiteAdmin, 'actions', actions.letsencrypt)
Esempio n. 16
0
    formset = AtLeastOneRequiredInlineFormSet
    extra = 0
    fields = (
        ('short_name', 'full_name'), 'email', 'email_usage', ('phone', 'phone2'),
    )
    
    def get_extra(self, request, obj=None, **kwargs):
       return 0 if obj and obj.contacts.exists() else 1
    
    def get_view_on_site_url(self, obj=None):
        if obj:
            return change_url(obj)
    
    def formfield_for_dbfield(self, db_field, **kwargs):
        """ Make value input widget bigger """
        if db_field.name == 'short_name':
            kwargs['widget'] = forms.TextInput(attrs={'size':'15'})
        if db_field.name == 'address':
            kwargs['widget'] = forms.Textarea(attrs={'cols': 70, 'rows': 2})
        if db_field.name == 'email_usage':
            kwargs['widget'] = paddingCheckboxSelectMultiple(45)
        return super(ContactInline, self).formfield_for_dbfield(db_field, **kwargs)


insertattr(AccountAdmin, 'inlines', ContactInline)
search_fields = (
    'contacts__short_name', 'contacts__full_name',
)
for field in search_fields:
    insertattr(AccountAdmin, 'search_fields', field)
Esempio n. 17
0
from django.contrib import admin

from orchestra.admin.utils import insertattr

from .models import WebFTPAccount
from ..models import Web


class WebFTPAccountInline(admin.TabularInline):
    model = WebFTPAccount


insertattr(Web, 'inlines', WebFTPAccountInline)