Files
zhijie-ERP/selfhelp/admin.py
T

220 lines
8.1 KiB
Python
Raw Normal View History

# coding=utf-8
# coding = utf-8
import datetime
from django.contrib import admin
from django.contrib import messages
from django.http import HttpResponseRedirect
from django.db.models.aggregates import Sum
from django.utils.translation import ugettext_lazy as _
from common import generic
from common import const
from basedata.models import Material,ExtraParam,Employee,Position
from selfhelp.models import WorkOrder,WOExtraValue,WOItem,Reimbursement,ReimbursementItem,Loan,Enroll,Feedback,Activity
class ParamValueInline(admin.TabularInline):
model = WOExtraValue
fields = ('param_name','param_value')
readonly_fields = ['param_name']
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == 'param_name':
app_info = generic.get_app_model_info_from_request(request)
instance = app_info['obj']
if instance:
kwargs['queryset'] = ExtraParam.objects.filter(material=instance.service)
return super(ParamValueInline,self).formfield_for_foreignkey(db_field,request,**kwargs)
def get_extra(self, request, obj=None, **kwargs):
if obj:
return 0
else:
return 1
class ItemInline(admin.TabularInline):
model = WOItem
raw_id_fields = ['material']
def get_extra(self, request, obj=None, **kwargs):
if obj:
return 0
else:
return 1
class WorkOrderAdmin(generic.BOAdmin):
"""
"""
CODE_PREFIX = 'WO'
CODE_NUMBER_WIDTH = 5
list_display = ['code','begin','title','classification','business_domain','status']
list_display_links = ['code','title']
exclude = ['creator','modifier','creation','modification']
search_fields = ['code','title']
list_filter = ['classification','service','status']
fields = (
('begin','end',),
('code','refer',),('classification','business_domain',),
('service','project',),
('title','status',),('description',),('attach',),('detail',)
)
readonly_fields = ['status']
raw_id_fields = ['service','project','refer']
inlines = [ItemInline,ParamValueInline]
date_hierarchy = 'begin'
def save_model(self, request, obj, form, change):
if obj.user is None:
obj.user = request.user
super(WorkOrderAdmin,self).save_model(request,obj,form,change)
def get_changeform_initial_data(self, request):
import datetime
td = datetime.date.today()
end = td + datetime.timedelta(30)
return {'begin':datetime.date.today, 'end':end}
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == 'refer':
app_info = generic.get_app_model_info_from_request(request)
if app_info and app_info['obj']:
kwargs['queryset'] = WorkOrder.objects.exclude(id=app_info['id'])
return super(WorkOrderAdmin,self).formfield_for_foreignkey(db_field,request,**kwargs)
class LoanAdmin(generic.BOAdmin):
CODE_PREFIX = 'JK'
CODE_NUMBER_WIDTH = 5
list_display = ['code','title','project','loan_amount','applier','status']
list_display_links = ['code','title']
readonly_fields = ['status','logout_time','logout_amount']
raw_id_fields = ['project','user']
fields = (
('code',),('title','loan_amount',),('description',),('project'),('user','status'),('logout_time','logout_amount',),
)
extra_buttons = [{'href':'pay','title':_('pay')}]
search_fields = ['code','title','user__username']
date_hierarchy = 'begin'
def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
if object_id:
try:
obj = Loan.objects.get(id=object_id)
if obj and obj.status == 'P':
extra_context = extra_context or {}
extra_context.update(dict(readonly=True))
except Exception,e:
pass
return super(LoanAdmin,self).changeform_view(request,object_id,form_url,extra_context)
def save_model(self, request, obj, form, change):
if obj and obj.user is None:
obj.user = request.user
super(LoanAdmin,self).save_model(request,obj,form,change)
class ReimbursementItemInline(admin.TabularInline):
model = ReimbursementItem
raw_id_fields = ['expense_account']
def get_extra(self, request, obj=None, **kwargs):
if obj:
return 0
else:
return 1
class ReimbursementAdmin(generic.BOAdmin):
CODE_PREFIX = 'BX'
CODE_NUMBER_WIDTH = 5
list_display = ['code','title','project','amount','applier','status']
list_display_links = ['code','title']
inlines = [ReimbursementItemInline]
raw_id_fields = ['project','wo','user','org']
readonly_fields = ['loan_amount','pay_time','status','amount']
fieldsets = [
(None,{'fields':[('code','user'),('title','amount','status',),('description',),('project','wo',)]}),
(_('fico'),{'fields':[('org',),('loan',),('logout_amount','pay_amount',)],'classes': ['collapse']})
]
extra_buttons = [{'href':'pay','title':_('pay')}]
search_fields = ['code','title','project__code','project__name','user__username']
date_hierarchy = 'begin'
def get_changeform_initial_data(self, request):
apps = generic.get_app_model_info_from_request(request)
obj = getattr(apps,'obj',None)
current = request.user
if obj:
current = obj.user
sm = Loan.objects.filter(user=current).aggregate(Sum('loan_amount')).get('loan_amount__sum') or 0.00
return {'loan_amount':sm}
def save_model(self, request, obj, form, change):
if obj and obj.user is None:
obj.user = request.user
super(ReimbursementAdmin,self).save_model(request,obj,form,change)
def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
if db_field.name == 'loan':
apps = generic.get_app_model_info_from_request(request)
current = request.user
if apps:
obj = apps.get('obj')
current = obj.user
if obj.status == 'P':
kwargs['queryset']=Loan.objects.filter(id=obj.loan.id)
else:
kwargs['queryset']=Loan.objects.filter(user=current,is_clear=0)
else:
kwargs['queryset']=Loan.objects.filter(user=current,is_clear=0)
return super(ReimbursementAdmin,self).formfield_for_foreignkey(db_field,request,**kwargs)
def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
if object_id:
try:
obj = Reimbursement.objects.get(id=object_id)
if obj and obj.status == 'P':
extra_context = extra_context or {}
extra_context.update(dict(readonly=True))
except Exception,e:
pass
return super(ReimbursementAdmin,self).changeform_view(request,object_id,form_url,extra_context)
class EnrollInline(admin.TabularInline):
model = Enroll
class FeedbackInline(admin.TabularInline):
model = Feedback
class ActivityAdmin(generic.BOAdmin):
CODE_PREFIX = 'AC'
CODE_NUMBER_WIDTH = 5
list_display = ['code','begin_time','end_time','title','classification','room']
list_display_links = ['code','title']
raw_id_fields = ['room','parent']
fieldsets = [
(None,{'fields':[('begin_time','end_time',),('title','classification',),('description',),
('host','speaker',),('room','location',),('attach',)]}),
(_('other info'),{'fields':[('mail_list',),('parent',),('mail_notice','short_message_notice','weixin_notice',)],'classes': ['collapse']})
]
def get_changeform_initial_data(self, request):
now = datetime.datetime.now()
begin = now + datetime.timedelta(hours=12)
end = begin + datetime.timedelta(hours=6)
return {'begin_time':begin,'end_time':end}
admin.site.register(WorkOrder,WorkOrderAdmin)
admin.site.register(Loan,LoanAdmin)
admin.site.register(Reimbursement,ReimbursementAdmin)
admin.site.register(Activity,ActivityAdmin)