# 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)