Exemple #1
0
class OrderAdmin(object):
    def cad_codes(self, instance):
        cad_codes_content = ''
        for product_item in instance.product_items.all():
            cad_codes_content += product_item.product.cad_code
            if product_item.product.norm_code:
                cad_codes_content += '|' + product_item.product.norm_code + ' ; '
            else:
                cad_codes_content += ' ; '
        return cad_codes_content
    cad_codes.short_description = _("cad_code")
    cad_codes.allow_tags = True
    cad_codes.is_column = True

    model_icon = 'cog'
    hidden_menu = False
    active_menu="marketing"
    list_display_links = ('contract_code',)
    list_display_links_details = True
    list_display = ('contract_code', 'customer', 'cad_codes', 'order_time', 'status')

    list_filter = ['contract_code', 'customer', 'order_time', 'status']
    search_fields = ['contract_code']

    Inline(ProductItem)
    inlines = [ProductItemInline]

    actions = [BatchBarcodeAction]
class CustomerAdmin(object):
    list_display = ('name', 'host_lever', 'short_name', 'code',
                    'relation_rating', 'customer_from', 'area', 'tel')
    search_fields = ['name']
    form_layout = (Container(TabHolder(
        Tab('基本信息',
            Fieldset('热度设置',
                     'name',
                     Row('is_host', 'host_lever'),
                     Row('host_category', 'host_memo'),
                     description="客户的热度设置"),
            Fieldset('基本设置', Row('short_name', 'code'),
                     Row('value_rating', 'credit_rating'),
                     Row('customer_type', 'relation_rating'), 'customer_from',
                     'customer_info'),
            css_id="tab_baseinfo"),
        Tab(
            '联系方式',
            Fieldset('联系信息', Row('city', 'area'), Row('zipcode', 'address'),
                     'tel', 'website', 'remarks'),
            Inline(Contact),
            css_id="tab_contact",
        ),
    ),
                             css_class='form-horizontal'))
    inlines = [ContactInline]
    reversion_enable = True
Exemple #3
0
class CountryAdmin(object):
    search_fields = ('name', 'code')
    list_display = ('name', 'code', 'continent', 'independence_day')
    list_filter = ('continent',)

    inlines = (CityInline,)
    model_icon = 'fa fa-bell'

    form_layout = (
        TabHolder(
            Tab('General',
                Fieldset(None,
                         'name', 'continent', 'code', 'independence_day',
                         css_class='unsort no_title'
                         ),
                Fieldset('Statistics',
                         'area', 'population',
                         description="EnclosedInput widget examples"
                         ),
                Fieldset('Autosized textarea',
                         'description',
                         description='AutosizedTextarea widget example - adapts height '
                         'based on user input'
                         ),
                ),
            Tab('Cities',
                Fieldset('Architecture',
                         'architecture',
                         description="Tabs can contain any fieldsets and inlines"
                         ),
                Inline(City),
                ),
        ),
    )
Exemple #4
0
class CommunityAdmin(object):
    hidden_menu = True

    list_display = ("community_name", "group", "responsibility",
                    "date_created")

    form_layout = (Main(
        Tab(
            "用户组",
            Inline(GroupInline),
            Fieldset(
                "用户权限组",
                "group",
                description="针对操作管线的用户管理组进行责任划分。",
            ),
        ), ),
                   Side(
                       Tab(
                           "责任",
                           Fieldset(
                               "责任管理",
                               "community_name",
                               "responsibility",
                               description="针对系统部件创建策略, 设置生效与否",
                           ),
                       ), ))
Exemple #5
0
class HostAdmin(object):
    def open_web(self, instance):
        return "<a href='http://%s' target='_blank'>Open</a>" % instance.ip

    open_web.short_description = "Acts"
    open_web.allow_tags = True
    open_web.is_column = True

    list_display = ('name', 'idc', 'guarantee_date', 'service_type', 'status',
                    'open_web', 'description')
    list_display_links = ('name', )

    raw_id_fields = ('idc', )
    style_fields = {'system': "radio-inline"}

    search_fields = ['name', 'ip', 'description']
    list_filter = [
        'idc', 'guarantee_date', 'status', 'brand', 'model', 'cpu', 'core_num',
        'hard_disk', 'memory', 'service_type'
    ]

    list_bookmarks = [{
        'title': "Need Guarantee",
        'query': {
            'status__exact': 2
        },
        'order': ('-guarantee_date', ),
        'cols': ('brand', 'guarantee_date', 'service_type')
    }]

    show_detail_fields = ('idc', )
    list_editable = ('name', 'idc', 'guarantee_date', 'service_type',
                     'description')
    save_as = True

    aggregate_fields = {"guarantee_date": "min"}

    form_layout = (Main(
        TabHolder(
            Tab(
                'Comm Fiels',
                Fieldset('Company data',
                         'name',
                         'idc',
                         description="some comm fields, required"),
                Inline(MaintainLog),
            ),
            Tab(
                'Extend Fiedls',
                Fieldset(
                    'Contact details', 'service_type', Row('brand', 'model'),
                    Row('cpu', 'core_num'),
                    Row(AppendedText('hard_disk', 'G'),
                        AppendedText('memory', "G")), 'guarantee_date'),
            ),
        ), ), Side(Fieldset('Status data', 'status', 'ssh_port', 'ip'), ))
    inlines = [MaintainInline]
    reversion_enable = True
Exemple #6
0
class OperationAdmin(object):
    list_display = ('order', 'name', 'description', 'operation_group',
                    'period', 'operation_type')
    list_display_links = ('name', 'description')
    list_display_links_details = True
    active_menu = "technology"
    search_fields = ['name']
    list_filter = ['name', 'operation_group', 'period']
    exclude = ['state', 'product', 'tools', 'need_attribute']
    #reversion_enable = True

    Inline(OperationAttribute)
    inlines = [OperationAttributeInline]
Exemple #7
0
class CustomerAdmin(object):
    model_icon = 'cog'
    hidden_menu = False
    list_display = ('name', 'code', 'description', 'address', 'state', 'city',
                    'telephone', 'mail', 'zip_code', 'importance')
    list_display_links = ('name', )
    list_display_links_details = True
    search_fields = ['name']
    list_filter = ['name', 'address', 'state', 'city', 'importance']

    Inline(Contactor)
    inlines = [ContactorInline]
    actions = [BatchBarcodeAction]
Exemple #8
0
class ManufacturePlanAdmin(object):

    #manufactureplan workflow
    def manufactureplan_workflow(self, instance):
        if not instance.manufactureplan_workflow_status:
            return "<a href='/manufactureplan/manufactureplan_start_workflow/%d/?next=/xadmin/manufactureplan/manufactureplan/'>发起审核流程</a>" % instance.id
        else:
            return "<a href='/manufactureplan/manufactureplan_workflow/%d/?next=/xadmin/manufactureplan/manufactureplan/'>查看审核流程</a>" % instance.id
    manufactureplan_workflow.short_description = _("manufactureplan_workflow")
    manufactureplan_workflow.allow_tags = True
    manufactureplan_workflow.is_column = True

    #create productionlines
    def productionlines(self, instance):
        if instance.manufactureplan_workflow_status == 2:
            if instance.technology_ok:
                if instance.productionlines:
                    return "<a href='/xadmin/manufactureplan/manufactureitemgroup/?_p_manufactureplan__id__exact=%d'>查看生产任务</a>" % instance.id
                else:
                    return "<a href='/manufactureplan/create_productionlines/%d/?next=/xadmin/manufactureplan/manufactureplan/'>创建生产任务</a>" % instance.id
            else:
                return "工艺未就绪"
        else:
            return "审核完可创建"
    productionlines.short_description = _("productionline")
    productionlines.allow_tags = True
    productionlines.is_column = True

    def manufactureplan(self, instance):
        return instance
    manufactureplan.short_description = _("name")
    manufactureplan.allow_tags = True
    manufactureplan.is_column = True

    model_icon = 'cog'
    hidden_menu = False
    active_menu="marketing"
    list_display_links = ('manufactureplan',)
    list_display_links_details = True
    list_display = ('manufactureplan', 'order', 'start_time', 'manufactureplan_workflow', 'productionlines', 'status')

    list_filter = ['order', 'start_time', 'status']
    search_fields = ['order']

    exclude = ['code','name']

    Inline(ManufactureItemGroup)
    inlines = [ManufactureItemGroupInline]
Exemple #9
0
class ProductAdmin(object):
    model_icon = 'cog'
    hidden_menu = False
    show_bookmarks = False
    list_display_links = ('name', )
    list_display_links_details = True
    list_display = (
        'name',
        'cad_code',
        'symbol',
        'norm_code',
        'category',
        'short_desc',
        'long_desc',
        'ext_code',
        'groups',
        'created_at',
        'updated_at',
        'is_published',
    )

    list_filter = [
        'cad_code',
        'category',
        'name',
        'short_desc',
        'long_desc',
        'is_published',
        'ext_code',
        'type',
        'groups',
        'attributes',
        'created_at',
        'updated_at',
    ]
    search_fields = [
        'cad_code',
    ]

    exclude = [
        'is_published', 'ext_code', 'type', 'custom1', 'custom2', 'custom3',
        'custom4', 'groups'
    ]

    Inline(ProductAttribute)
    inlines = [ProductAttributeInline]

    actions = [BatchBarcodeAction]
Exemple #10
0
class PorteurAdmin(object):

    list_display = ('nom', 'prenom', 'statut')
    search_fields = ('nom', )
    list_filter = ('statut', )
    model_icon = 'fa fa-user'

    inlines = (SouscriptionSvcInLine, )

    form_layout = (TabHolder(
        Tab(
            'Général',
            Fieldset('Généralités', 'nom', 'prenom', 'date_de_naissance',
                     'statut'),
            Inline(SouscriptionSvc),
        ), ), )
class SaleAdmin(object):
    list_display = ('code', 'identify_date', 'sale_type', 'sale_status',
                    'customer', 'invoice_no', 'amount', 'gross_margin',
                    'pay_mode', 'delivery_date', 'deliver_address')
    search_fields = ['code']
    form_layout = (Container(TabHolder(
        Tab('销售信息',
            Fieldset('基本信息', Row('code', 'customer'),
                     Row('sale_type', 'sale_status'), Row('contactor', 'tel'),
                     'identify_date'),
            Fieldset(
                '收款信息',
                'pay_mode',
                Row('amount', 'gross_margin'),
                Row('Receive', 'Arrears'),
                'ReceiveDate',
                collapsed=True,
                description="(【总金额】,【毛利】会根据销售明细自动算出)",
            ),
            Fieldset(
                '交货信息',
                Row('deliver_type', 'deliver_address'),
                'delivery_date',
                collapsed=True,
            ),
            Fieldset(
                '其它信息',
                'note',
                collapsed=True,
            ),
            css_id="tab_baseinfo"),
        Tab('产品明细', Inline(SaleDetail), css_id="tab_productinfo")),
                             css_class='form-horizontal'))
    inlines = [SaleDetailInline]
    reversion_enable = True

    def media(self):
        media = forms.Media()  #+ self.vendor('saledetail.js')
        media.add_js([self.static('xadmin/vendor/saledetail/saledetail.js')])
        return self.get_media() + media
Exemple #12
0
class TransportListAdmin(object):
    def execute(self, instance):
        if instance.state == 1:
            return "<a href='/warehouse/do_transport/%d/?next=/xadmin/warehouse/transportlist/'>执行</a>" % instance.id
        elif instance.state == 2:
            return "已出库"
        elif instance.state == 5:
            return "已入库"

    execute.short_description = _("execute")
    execute.allow_tags = True
    execute.is_column = True

    def detail_values(self, instance):
        return instance.detail_values

    detail_values.short_description = _("detail_values")
    detail_values.allow_tags = True
    detail_values.is_column = True

    model_icon = 'cog'
    hidden_menu = False
    active_menu = "storage"
    show_bookmarks = False
    list_display = ('list_category', 'transport_category', 'detail_values',
                    'execute')
    list_display_links = ('list_category', 'transport_category')
    list_display_links_details = True

    list_filter = ['list_category', 'transport_category']
    search_fields = [
        'internal_code', 'list_category', 'transport_category', 'state',
        'created_at', 'productionline', 'updated_by'
    ]

    exclude = ['state', 'created_at', 'productionline']

    Inline(TransportListDetail)
    inlines = [TransportListDetailInline]
Exemple #13
0
class IVRAdmin(ReXmlAdmin):
    app_label = 'funcs'
    menu_group = 'exten_group'
    order = 7

    inlines = [IVRKeymappingInline]

    form_layout = [
        layout.Fieldset(
            '基础信息', 'name',
            layout.Row('registry_max_failures', 'extension_digits')),
        layout.Fieldset('提示音',
                        layout.Row('greet_long_type', 'greet_long_content')),
        layout.Fieldset('短提示音',
                        layout.Row('greet_short_type', 'greet_short_content')),
        layout.Fieldset(
            '按键无效提示音', layout.Row('invalid_sound_type',
                                  'invalid_sound_content')),
        layout.Fieldset('退出IVR提示音',
                        layout.Row('exit_sound_type', 'exit_sound_content')),
        Inline(models.IVRKeymapping),
    ]

    def get_field_attrs(self, db_field, **kwargs):
        attrs = super(IVRAdmin, self).get_field_attrs(db_field, **kwargs)
        if db_field.name == 'greet_long_content':
            fkwidget = widgets.ForeignKeyPopupWidget(self,
                                                     base_models.MediaFile,
                                                     'true_path')
            charwidget = widgets.AdminTextInputWidget()
            attrs['widget'] = widgets.SelectRelation(
                self, 'greet_long_type', {
                    'audio': fkwidget,
                    'tts': charwidget,
                    'number': charwidget,
                    'count': charwidget,
                    'tts_var': charwidget,
                    'number_var': charwidget,
                    'count_var': charwidget,
                })
        if db_field.name == 'greet_short_content':
            fkwidget = widgets.ForeignKeyPopupWidget(self,
                                                     base_models.MediaFile,
                                                     'true_path')
            charwidget = widgets.AdminTextInputWidget()
            attrs['widget'] = widgets.SelectRelation(
                self, 'greet_short_type', {
                    'audio': fkwidget,
                    'tts': charwidget,
                    'number': charwidget,
                    'count': charwidget,
                    'tts_var': charwidget,
                    'number_var': charwidget,
                    'count_var': charwidget,
                })
        if db_field.name == 'invalid_sound_content':
            fkwidget = widgets.ForeignKeyPopupWidget(self,
                                                     base_models.MediaFile,
                                                     'true_path')
            charwidget = widgets.AdminTextInputWidget()
            attrs['widget'] = widgets.SelectRelation(
                self, 'invalid_sound_type', {
                    'audio': fkwidget,
                    'tts': charwidget,
                    'number': charwidget,
                    'count': charwidget,
                    'tts_var': charwidget,
                    'number_var': charwidget,
                    'count_var': charwidget,
                })
        if db_field.name == 'exit_sound_content':
            fkwidget = widgets.ForeignKeyPopupWidget(self,
                                                     base_models.MediaFile,
                                                     'true_path')
            charwidget = widgets.AdminTextInputWidget()
            attrs['widget'] = widgets.SelectRelation(
                self, 'exit_sound_type', {
                    'audio': fkwidget,
                    'tts': charwidget,
                    'number': charwidget,
                    'count': charwidget,
                    'tts_var': charwidget,
                    'number_var': charwidget,
                    'count_var': charwidget,
                })
        return attrs
Exemple #14
0
class HostAdmin(object):
    def open_web(self, instance):
        return """<a href="http://%s" target="_blank">Open</a>""" % instance.ip

    open_web.short_description = "Acts"
    open_web.allow_tags = True
    open_web.is_column = True

    list_display = (
        "name",
        "idc",
        "guarantee_date",
        "service_type",
        "status",
        "open_web",
        "description",
        "ip",
    )
    list_display_links = ("name", )

    raw_id_fields = ("idc", )
    style_fields = {"system": "radio-inline"}

    search_fields = ["name", "ip", "description", "idc__name"]
    list_filter = [
        "idc",
        "guarantee_date",
        "status",
        "brand",
        "model",
        "cpu",
        "core_num",
        "hard_disk",
        "memory",
        (
            "service_type",
            xadmin.filters.MultiSelectFieldListFilter,
        ),
    ]

    list_quick_filter = ["service_type", {"field": "idc__name", "limit": 10}]
    # list_quick_filter = ["idc_id"]
    list_bookmarks = [{
        "title": "Need Guarantee",
        "query": {
            "status__exact": 2
        },
        "order": ("-guarantee_date", ),
        "cols": ("brand", "guarantee_date", "service_type"),
    }]

    show_detail_fields = ("idc", )
    list_editable = ("name", "idc", "guarantee_date", "service_type",
                     "description", "ip")
    save_as = True

    aggregate_fields = {"guarantee_date": "min"}
    grid_layouts = ("table", "thumbnails")

    form_layout = (Main(
        TabHolder(
            Tab(
                "Comm Fields",
                Fieldset(
                    "Company data",
                    "name",
                    "idc",
                    description="some comm fields, required",
                ),
                Inline(MaintainLog),
            ),
            Tab(
                "Extend Fields",
                Fieldset(
                    "Contact details", "service_type", Row("brand", "model"),
                    Row("cpu", "core_num"),
                    Row(AppendedText("hard_disk", "G"),
                        AppendedText("memory", "G")), "guarantee_date"),
            ),
        ), ), Side(Fieldset("Status data", "status", "ssh_port", "ip"), ))
    inlines = [MaintainInline]
    reversion_enable = True

    data_charts = {
        "host_service_type_counts": {
            'title': u"Host service type count",
            "x-field": "service_type",
            "y-field": ("service_type", ),
            "option": {
                "series": {
                    "bars": {
                        "align": "center",
                        "barWidth": 0.8,
                        'show': True
                    }
                },
                "xaxis": {
                    "aggregate": "count",
                    "mode": "categories"
                },
            },
        },
    }
Exemple #15
0
class HostAdmin(object):
    model_icon = 'fa fa-cog'

    def open_web(self, instance):
        return "<a href='http://%s' target='_blank'>Open</a>" % instance.ip

    open_web.short_description = "Acts"
    open_web.allow_tags = True
    open_web.is_column = True

    def thumbnail_img(self, obj):
        return "<img src='http://js.wiyun.com/site_media/images/wallpaper/eac1bce7-90d5-40a7-a7e2-ae02acca2e86_jpg_152x102_crop_upscale_q85.jpg'/>"

    thumbnail_img.short_description = "TImg"
    thumbnail_img.allow_tags = True
    thumbnail_img.is_column = True
    thumbnail_img.thumbnail_img = True

    list_display = ('thumbnail_img', 'name', 'idc', 'guarantee_date',
                    'service_type', 'status', 'open_web', 'description')
    list_display_links = ('name', )
    grid_layouts = ['thumbnails', 'table']

    raw_id_fields = ('idc', )
    style_fields = {'system': "radio-inline"}

    search_fields = ['name', 'ip', 'description']
    list_filter = [
        'idc', 'guarantee_date', 'status', 'brand', 'model', 'cpu', 'core_num',
        'hard_disk', 'memory', 'service_type'
    ]

    list_bookmarks = [{
        'title': "Need Guarantee",
        'query': {
            'status__exact': 2
        },
        'order': ('-guarantee_date', ),
        'cols': ('brand', 'guarantee_date', 'service_type')
    }]

    show_detail_fields = ('idc', )
    list_editable = ('name', 'idc', 'guarantee_date', 'service_type',
                     'description')
    save_as = True

    #aggregate_fields = {"guarantee_date": "min"}

    actions = [
        BatchChangeAction,
    ]
    batch_fields = ('name', 'idc', 'guarantee_date', 'service_type', 'status',
                    'description', 'system')

    form_layout = (Main(
        TabHolder(
            Tab(
                'Comm Fiels',
                Fieldset('Company data',
                         'name',
                         'idc',
                         description="some comm fields, required"),
                Inline(MaintainLog),
            ),
            Tab(
                'Extend Fiedls',
                Fieldset(
                    'Contact details', 'service_type', Row('brand', 'model'),
                    Row('cpu', 'core_num'),
                    Row(AppendedText('hard_disk', 'G'),
                        AppendedText('memory', "G")), 'guarantee_date'),
            ),
            Tab(
                'Comments',
                Inline(Comment),
            ),
        ), ), Side(Fieldset('Status data', 'status', 'ssh_port', 'ip'), ))
    inlines = [MaintainInline, CommentInline]
    reversion_enable = True
Exemple #16
0
class HostAdmin(object):
    def open_web(self, instance):
        return "<a href='http://%s' target='_blank'>Open</a>" % instance.ip

    open_web.short_description = "Acts"
    open_web.allow_tags = True
    open_web.is_column = True

    list_display = ('name', 'idc', 'guarantee_date', 'service_type', 'status',
                    'open_web', 'description')
    list_display_links = ('name', )

    raw_id_fields = ('idc', )
    style_fields = {'system': "radio-inline"}

    search_fields = ['name', 'ip', 'description']
    list_filter = [
        'idc', 'guarantee_date', 'status', 'brand', 'model', 'cpu', 'core_num',
        'hard_disk', 'memory',
        ('service_type', xadmin.filters.MultiSelectFieldListFilter)
    ]

    list_quick_filter = ['service_type', {'field': 'idc__name', 'limit': 10}]
    list_bookmarks = [{
        'title': "Need Guarantee",
        'query': {
            'status__exact': 2
        },
        'order': ('-guarantee_date', ),
        'cols': ('brand', 'guarantee_date', 'service_type')
    }]

    show_detail_fields = ('idc', )
    list_editable = ('name', 'idc', 'guarantee_date', 'service_type',
                     'description')
    save_as = True

    aggregate_fields = {"guarantee_date": "min"}
    grid_layouts = ('table', 'thumbnails')

    form_layout = (Main(
        TabHolder(
            Tab(
                'Comm Fields',
                Fieldset('Company data',
                         'name',
                         'idc',
                         description="some comm fields, required"),
                Inline(MaintainLog),
            ),
            Tab(
                'Extend Fields',
                Fieldset(
                    'Contact details', 'service_type', Row('brand', 'model'),
                    Row('cpu', 'core_num'),
                    Row(AppendedText('hard_disk', 'G'),
                        AppendedText('memory', "G")), 'guarantee_date'),
            ),
        ), ), Side(Fieldset('Status data', 'status', 'ssh_port', 'ip'), ))
    inlines = [MaintainInline]
    reversion_enable = True

    data_charts = {
        "host_service_type_counts": {
            'title': u"Host service type count",
            "x-field": "service_type",
            "y-field": ("service_type", ),
            "option": {
                "series": {
                    "bars": {
                        "align": "center",
                        "barWidth": 0.8,
                        'show': True
                    }
                },
                "xaxis": {
                    "aggregate": "count",
                    "mode": "categories"
                },
            },
        },
    }
Exemple #17
0
class WorkspaceAdmin(object):
    def queryset(self):
        qs = super(WorkspaceAdmin, self).queryset()
        if self.request.user.username in PREVILEGED_USER_SETS:
            return qs
        else:
            return qs.filter(user=self.request.user)

    # readonly_fields = ('user', )
    def uniq_name(self, instance):
        return instance.name + "_" + instance.user.username

    uniq_name.short_description = "唯一ID"
    uniq_name.allow_tags = True
    uniq_name.is_column = True

    list_editable = ['name', 'summary']
    list_display = (
        'name',
        "user",
        'uniq_name',
        'summary',
        'date_updated',
    )

    fieldsets = [
        ("工作组名称", {
            'fields': ['name']
        }),
        ('用户', {
            'fields': ['user'],
            'classes': ['collapse']
        }),
    ]

    # form_layout = (
    #     Fieldset("名称", 'name', 'summary'),
    #     Fieldset(None, 'user', 'desc', 'id', **{"style": "display:None"}),
    # )

    inlines = [
        ScanTaskInline,
    ]

    actions = None
    # aggregate_fields = {"user_count": "sum", "view_count": "sum"}
    # refresh_times = (3, 5, 10)

    form_layout = (Main(TabHolder(Tab(
        "创建扫描任务",
        'name',
        Inline(ScanTask),
    ), ), ),
                   Side(
                       Fieldset("名称", 'summary'),
                       Fieldset(None, 'user', 'desc', 'id',
                                **{"style": "display:None"}),
                   ))

    def save_models(self):
        instance = self.new_obj
        request = self.request

        instance.user = request.user
        instance.save()
Exemple #18
0
class KnifeAdmin(object):
    def display_unicode(self, instance):
        return instance.__unicode__()

    display_unicode.short_description = _("code")
    display_unicode.allow_tags = True
    display_unicode.is_column = True

    def attributes_values(self, instance):
        return instance.attributes_values

    attributes_values.short_description = _("attribute")
    attributes_values.allow_tags = True
    attributes_values.is_column = True

    def product_format():
        knife_attributes = KnifeAttribute.objects.values('attribute').annotate(
            attribute_count=Count('attribute')).order_by('attribute__ext_code')
        attribute_ids = [
            attribute['attribute'] for attribute in knife_attributes
        ]

        attribute_functions = []
        for attribute_id in attribute_ids:
            function_name = "attribute_%d_function" % (attribute_id)
            generate_function_string = '''
def attribute_%d_function(self, instance):
    attribute_value = instance.knife_attributes.get(attribute_id=%d).value
    return attribute_value
''' % (attribute_id, attribute_id)
            attribute_functions.append(
                [function_name, generate_function_string, attribute_id])

        return attribute_functions

    list_display = ('name', 'desigen_lifetime')
    list_display = list(list_display)
    attribute_functions = product_format()
    product_catalog_attribute = Attribute.objects.all()

    for i, function in enumerate(attribute_functions):
        function_name = function[0]
        generate_function_string = function[1]
        function_attribute_id = function[2]
        attribute_name = product_catalog_attribute.get(
            id=function_attribute_id)

        short_description_string = "%s.short_description = '%s'" % (
            function_name, attribute_name)
        exec(function[1])
        exec(short_description_string)
        list_display.insert(i + 1, function[0])

    list_display = tuple(list_display)

    model_icon = 'cog'
    hidden_menu = False

    list_display_links = ('name', )
    list_display_links_details = True

    list_filter = ['name', 'prefix', 'desigen_lifetime']
    search_fields = ['name', 'prefix', 'desigen_lifetime']

    Inline(KnifeAttribute)
    inlines = [KnifeAttributeInline]
    actions = [BatchBarcodeAction]
class MyUserAdmin(object):
    # add_form = UserCreationForm
    # form = CustomUserCreationForm

    list_display = ('username', 'email', 'is_admin', 'block',
                    'get_approved_tag', 'login_count', 'bet_count',
                    'deposit_count', 'withdraw_count', 'bet_count',
                    'user_action_link', 'user_deposit_channel',
                    'user_withdraw_channel', 'time_of_registration',
                    'ftd_time', 'verfication_time', 'modified_time',
                    'last_login_time', 'last_login_ip')
    list_filter = (
        'is_admin',
        'user_tag',
        'useraction__created_time',
    )

    # fieldsets = (
    #     (None, {'fields': ('username','email','password', 'first_name', 'last_name', 'phone', 'country', 'date_of_birth', 'street_address_1', 'street_address_2', 'city', 'state', 'zipcode', 'block', 'referral_id', 'referred_by', 'reward_points', 'balance', 'active', 'activation_code')}),
    #     ('Permissions', {'fields': ('is_admin', 'is_staff')})
    # )

    search_fields = ('username', 'email', 'user_tag__name')
    ordering = (
        'username',
        'email',
    )
    # list_editable = 'username'
    # readonly_fields = ('username',)

    filter_horizontal = ()
    model_icon = 'fa fa-user fa-fw'
    inlines = (UserWithTagInline, )
    list_per_page = 20
    # refresh_times = [3,5]

    form_layout = (Main(
        TabHolder(
            Tab(
                'User Info',
                Fieldset(
                    'General Info',
                    'username',
                    'member_status',
                    'user_attribute',
                    Row('email', 'phone'),
                    description="User Detail",
                ),
                Fieldset(
                    'Balance',
                    'main_wallet',
                    'other_game_wallet',
                ),
                Inline(UserWithTag),
            ),
            Tab(
                'User Detail',
                Fieldset(
                    'Last',
                    'first_name',
                    'last_name',
                ),
            ),
        )), )

    def get_model_form(self, **kwargs):
        if self.org_obj is None:
            self.form = UserCreationForm
        else:
            self.form = CustomUserChangeForm
        return super(MyUserAdmin, self).get_model_form(**kwargs)

    def get_approved_tag(self, obj):
        user_with_tags = UserWithTag.objects.filter(user=obj, status=1)
        tag_names = []
        for user_with_tag in user_with_tags:
            tag_names.append(user_with_tag.tag.name)
        return ', '.join(tag_names)

    get_approved_tag.short_description = _('User Tag')
    get_approved_tag.admin_order_field = 'UserWithTag__user'

    def login_count(self, obj):
        qs = UserAction.objects.filter(user=obj, event_type=0)
        return qs.count()

    login_count.short_description = _("Login")

    def deposit_count(self, obj):
        qs = UserAction.objects.filter(user=obj, event_type=3)
        return qs.count()

    deposit_count.short_description = _("Deposit")

    def withdraw_count(self, obj):
        qs = UserAction.objects.filter(user=obj, event_type=4)
        return qs.count()

    withdraw_count.short_description = _("Withdraw")

    def bet_count(self, obj):
        qs = UserAction.objects.filter(user=obj, event_type=6)
        return qs.count()

    bet_count.short_description = _("Bet")

    def user_action_link(self, obj):
        msg = _("More actions for this user")
        return ('<a href="%s">' + str(msg) + '</a>') % (
            DOMAIN + 'xadmin/users/useraction/?_p_user__id__exact=' +
            str(obj.id))

    user_action_link.allow_tags = True
    user_action_link.short_description = _("User action link")

    def last_login_ip(self, obj):
        qs = UserAction.objects.filter(user=obj,
                                       event_type=0).order_by('-created_time')
        if qs.count() == 0:
            return None
        return qs[0].ip_addr

    def save_models(self):
        obj = self.new_obj
        super().save_models()
Exemple #20
0
class ChargingPileAdmin(object):
    """
    充电桩管理
    """
    list_display = ['name', 'pile_sn', 'pile_type', 'station', 'pile_mode', 'business_mode',
                    'get_work_status']
    list_display_links = ('name',)
    search_fields = ['pile_sn', 'name', 'pile_type', 'station']
    exclude = ["qrcode", 'group']
    list_filter = ['pile_type', 'station', 'pile_mode', 'business_mode']
    readonly_fields = ['user']

    model_icon = 'fa fa-sitemap'
    show_all_rel_details = False
    # list_editable = ['pile_type', 'pile_sn']
    refresh_times = [3, 5]  # 计时刷新
    save_as = True
    style_fields = {
        "low_restrict": "radio-inline", "low_offset": "radio-inline",
        "subscribe_status": "radio-inline",
        "occupy_status": "radio-inline",
        'sub_status': "radio-inline",
        'charg_mode': "radio-inline",
    }

    form_layout = (
        Main(
            TabHolder(
                Tab(
                    '基础信息设置',
                    Fieldset(
                        '基础信息',
                        Row('name', 'pile_type'),
                        Row('pile_sn', 'power'),
                        Row('station', 'pile_mode'),
                        Row('business_mode', 'fireware'),
                        Row('symbol_4g', 'symbol_eth'),
                        'charg_mode',
                        'sub_time',
                        Row('is_subsidy', 'faults'),
                    ),
                    Inline(ChargingGun),
                    css_id="base_info",
                ),
                Tab(
                    '其他设置',
                    Fieldset(
                        "预约及占位设置",
                        'charg_policy',
                        Row('subscribe_status', AppendedText('subscribe_fee', '元')),
                        Row('occupy_status', AppendedText('occupy_fee', '元')),
                    ),
                    Fieldset(
                        "小电流设置参数",
                        Row('low_restrict', AppendedText('low_cur_value', '毫安')),
                        Row('low_offset', AppendedText('low_offset_value', '元')),
                    ),
                    Fieldset(
                        "单枪参数",
                        Row(AppendedText('gun_max_voltage', '伏'), AppendedText('gun_min_voltage', '伏')),
                        Row(AppendedText('gun_max_current', '安'), AppendedText('gun_min_current', '安')),
                    ),
                    css_id="other_set",
                ),
            ),
        ),
        Side(
            Fieldset("其他信息", 'sub_status',  'user', 'max_gun', 'restart_nums'),
        )
    )

    inlines = [ChargingGunInline]

    def queryset(self):
        queryset = super(ChargingPileAdmin, self).queryset()
        if self.request.user.station:
            return queryset.filter(station=self.request.user.station)
        elif self.request.user.seller:
            return queryset.filter(station__seller=self.request.user.seller)
        else:
            return queryset

    def formfield_for_dbfield(self, db_field,  **kwargs):
        if db_field.name == 'station':
            if not self.request.user.is_superuser:
                kwargs['queryset'] = Station.objects.filter(seller=self.request.user.seller)
        return super(ChargingPileAdmin, self).formfield_for_dbfield(db_field,  **kwargs)

    def save_models(self):
        obj = self.new_obj
        request = self.request
        obj.user = request.user
        obj.group = request.user.groups.first()

        super(ChargingPileAdmin, self).save_models()

    def save_related(self):
        obj = self.new_obj
        super(ChargingPileAdmin, self).save_related()
        for inst in obj.charginggun_set.all():
            self.save_image(inst)

    def save_image(self, instance):
        upload_path = instance.qrcode.field.upload_to
        dirs = os.path.join(settings.MEDIA_ROOT, upload_path)
        if not os.path.exists(dirs):
            os.makedirs(dirs)

        domain_url = settings.ROOT_URL if settings.ROOT_URL else "http://" + self.request.get_host()
        # domain_url = "http://" + self.request.get_host()
        path = reverse('order-prepay', kwargs={'pile_sn': instance.charg_pile.pile_sn, "gun_num": instance.gun_num})
        qrcode_content = '{0}{1}'.format(domain_url, path)
        image = create_qrcode(qrcode_content)
        image_url = '{0}_{1}.png'.format(instance.charg_pile.pile_sn, instance.gun_num)
        image.save(os.path.join(dirs, image_url), quality=100)
        instance.qrcode = '{0}{1}'.format(upload_path, image_url)
        instance.save()

    def station_choices(self, field, request, params, model, model_admin, field_path):
        if self.request.user.station:
            stations = Station.objects.filter(id=self.request.user.station.id).values("id", "name")
        elif self.request.user.seller:
            stations = Station.objects.filter(seller_id=self.request.user.seller.id).values("id", "name")
        else:
            return field.get_choices(include_blank=False)

        return list(((station.get('id'), station.get('name')) for station in stations))