220 lines
8.1 KiB
Python
220 lines
8.1 KiB
Python
# 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)
|