Initial commit
This commit is contained in:
@@ -0,0 +1 @@
|
||||
__author__ = 'Administrator'
|
||||
@@ -0,0 +1,39 @@
|
||||
# coding=utf-8
|
||||
from django.db import connection
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
__author__ = 'zhugl'
|
||||
|
||||
DB_CHAR_CODE_2 = 2
|
||||
DB_CHAR_CODE_4 = 4
|
||||
DB_CHAR_CODE_6 = 6
|
||||
DB_CHAR_CODE_8 = 8
|
||||
DB_CHAR_CODE_10 = 10
|
||||
|
||||
DB_CHAR_NAME_20 = 20
|
||||
DB_CHAR_NAME_40 = 40
|
||||
DB_CHAR_NAME_60 = 60
|
||||
DB_CHAR_NAME_80 = 80
|
||||
DB_CHAR_NAME_120 = 120
|
||||
DB_CHAR_NAME_200 = 200
|
||||
|
||||
|
||||
STATUS_ON_OFF = (
|
||||
(0,_('OFF')),
|
||||
(0,_('ON')),
|
||||
)
|
||||
|
||||
|
||||
def get_value_list(group):
|
||||
"""
|
||||
获取值列表信息
|
||||
"""
|
||||
if group:
|
||||
try:
|
||||
cursor = connection.cursor()
|
||||
cursor.execute('SELECT code,name FROM basedata_valuelistitem WHERE group_code=%s AND status=1',[group])
|
||||
rows = cursor.fetchall()
|
||||
return tuple([(code,name) for code,name in rows])
|
||||
except Exception,e:
|
||||
return None
|
||||
else:
|
||||
return None
|
||||
@@ -0,0 +1,312 @@
|
||||
# coding=utf-8
|
||||
__author__ = 'zhugl'
|
||||
# created at 15-4-21
|
||||
import datetime
|
||||
import xlwt
|
||||
import re
|
||||
from django.db import models
|
||||
from django.db import connection,transaction
|
||||
from django.db.models import fields
|
||||
from django.db.models.fields import related
|
||||
from django.contrib import admin
|
||||
from django.http import HttpRequest,HttpResponseRedirect,HttpResponse
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.utils.text import force_text
|
||||
from django.utils.encoding import smart_str
|
||||
from django.utils.http import urlquote
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from common import const
|
||||
from midware import cuser
|
||||
|
||||
|
||||
def update(sql, params=None):
|
||||
"""
|
||||
:param sql:
|
||||
:param params:
|
||||
:return:
|
||||
"""
|
||||
cursor = connection.cursor()
|
||||
with transaction.atomic():
|
||||
try:
|
||||
if params:
|
||||
cursor.execute(sql,params)
|
||||
else:
|
||||
cursor.execute(sql)
|
||||
except Exception,e:
|
||||
print e
|
||||
|
||||
def get_app_model_info_from_request(request):
|
||||
"""
|
||||
|
||||
"""
|
||||
if request and isinstance(request,HttpRequest):
|
||||
import re
|
||||
pattern = re.compile(r"/(admin)/(\w+)/(\w+)/(\d+)")
|
||||
match = pattern.match(request.path)
|
||||
|
||||
if match and match.group():
|
||||
app = match.group(2)
|
||||
model = match.group(3)
|
||||
oid = match.group(4)
|
||||
ct = ContentType.objects.get(app_label=app,model=model)
|
||||
obj = ct.get_object_for_this_type(id=oid)
|
||||
return {'app':app,'model':model,'id':oid,'obj':obj}
|
||||
return None
|
||||
|
||||
|
||||
class MineBOManager(models.Manager):
|
||||
"""
|
||||
get the objects created by current login user
|
||||
"""
|
||||
def get_query_set(self):
|
||||
return super(MineBOManager,self).get_query_set().filter(creator=cuser.getuser())
|
||||
|
||||
|
||||
class BOManager(models.Manager):
|
||||
"""
|
||||
"""
|
||||
def get_query_set(self):
|
||||
return super(BOManager,self).get_query_set()
|
||||
|
||||
|
||||
class BO(models.Model):
|
||||
"""
|
||||
All business object derive from this class
|
||||
"""
|
||||
begin = models.DateField(_('begin date'),blank=True,null=True)
|
||||
end = models.DateField(_('end date'),blank=True,null=True)
|
||||
creator = models.CharField(_("creator"),blank=True,null=True,max_length=const.DB_CHAR_NAME_20)
|
||||
modifier = models.CharField(_("modifier"),blank=True,null=True,max_length=const.DB_CHAR_NAME_20)
|
||||
creation = models.DateTimeField(_('creation'),auto_now_add=True,blank=True,null=True)
|
||||
modification = models.DateTimeField(_('modification'),auto_now=True,blank=True,null=True)
|
||||
# mine = MineBOManager()
|
||||
objects = models.Manager()
|
||||
|
||||
def __unicode__(self):
|
||||
display = getattr(self,'name',None) or getattr(self,'title',None) or getattr(self,'description',None)
|
||||
if not display:
|
||||
display = ' '
|
||||
return u'%s' % display
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
class BOAdmin(admin.ModelAdmin):
|
||||
"""
|
||||
All business object admin derive from this class
|
||||
"""
|
||||
CODE_NUMBER_WIDTH = 4
|
||||
CODE_PREFIX = '9'
|
||||
extra_buttons = []
|
||||
|
||||
exclude = ['creator','modifier','creation','modification','begin','end']
|
||||
list_per_page = 18
|
||||
actions = ['export_selected_data']
|
||||
|
||||
def changeform_view(self, request, object_id=None, form_url='', extra_context=None):
|
||||
"""
|
||||
|
||||
:param request:
|
||||
:param object_id:
|
||||
:param form_url:
|
||||
:param extra_context:
|
||||
:return:
|
||||
"""
|
||||
app_info = get_app_model_info_from_request(request)
|
||||
workflow_modal = None
|
||||
workflow_instance = None
|
||||
has_workflow_modal = False
|
||||
has_workflow_instance = False
|
||||
show_workflow_line = False
|
||||
show_submit_button = False
|
||||
can_restart = False
|
||||
can_edit = False
|
||||
# print app_info
|
||||
if app_info:
|
||||
try:
|
||||
modal = ContentType.objects.get(app_label='workflow',model='modal')
|
||||
workflow_modal = modal.get_object_for_this_type(app_name=app_info['app'],model_name=app_info['model'])
|
||||
has_workflow_modal = True
|
||||
# print workflow_modal.code
|
||||
instance = ContentType.objects.get(app_label='workflow',model='instance')
|
||||
workflow_instance = instance.get_object_for_this_type(modal=workflow_modal,object_id=app_info['id'])
|
||||
has_workflow_instance = True
|
||||
todo = ContentType.objects.get(app_label='workflow',model='todolist')
|
||||
todo_list = todo.model_class().objects.filter(inst=workflow_instance,status=0,user=request.user)
|
||||
x = todo_list.all()
|
||||
|
||||
if x and len(x)>0:
|
||||
can_edit = x[0].node.can_edit
|
||||
if todo_list.count() > 0:
|
||||
# print 'we fount it'
|
||||
unread = todo_list.filter(is_read=0)
|
||||
show_workflow_line = True
|
||||
if unread.count() > 0:
|
||||
unread.update(is_read=1,read_time=datetime.datetime.now())
|
||||
if workflow_instance.status == 3 and request.user == workflow_instance.starter:
|
||||
can_restart = True
|
||||
show_workflow_line = True
|
||||
|
||||
except Exception,e:
|
||||
print Exception,e
|
||||
|
||||
if workflow_modal and not workflow_instance:
|
||||
show_submit_button = True
|
||||
extra_context = extra_context or {}
|
||||
ctx = dict(
|
||||
has_workflow_instance = has_workflow_instance,
|
||||
has_workflow_modal = has_workflow_modal,
|
||||
workflow_modal = workflow_modal,
|
||||
workflow_instance = workflow_instance,
|
||||
show_workflow_line = show_workflow_line,
|
||||
can_restart = can_restart,
|
||||
can_edit = can_edit,
|
||||
show_submit_button = show_submit_button,
|
||||
)
|
||||
if len(self.extra_buttons) > 0:
|
||||
buttons = dict(
|
||||
extra_buttons = self.extra_buttons
|
||||
)
|
||||
ctx.update(buttons)
|
||||
extra_context.update(ctx)
|
||||
# print extra_context
|
||||
return super(BOAdmin,self).changeform_view(request,object_id,form_url,extra_context)
|
||||
|
||||
def history_view(self, request, object_id, extra_context=None):
|
||||
"""
|
||||
|
||||
:param request:
|
||||
:param object_id:
|
||||
:param extra_context:
|
||||
:return:
|
||||
"""
|
||||
app_info = get_app_model_info_from_request(request)
|
||||
# print app_info
|
||||
if app_info:
|
||||
try:
|
||||
modal = ContentType.objects.get(app_label='workflow',model='modal')
|
||||
workflow_modal = modal.get_object_for_this_type(app_name=app_info['app'],model_name=app_info['model'])
|
||||
has_workflow_modal = True
|
||||
instance = ContentType.objects.get(app_label='workflow',model='instance')
|
||||
workflow_instance = instance.get_object_for_this_type(modal=workflow_modal,object_id=app_info['id'])
|
||||
has_workflow_instance = True
|
||||
history = ContentType.objects.get(app_label='workflow',model='history')
|
||||
history_list = history.model_class().objects.filter(inst=workflow_instance)
|
||||
has_history = True
|
||||
todo = ContentType.objects.get(app_label='workflow',model='todolist')
|
||||
todo_list = todo.model_class().objects.filter(inst=workflow_instance,status=0).exclude(node=None)
|
||||
|
||||
extra_context = extra_context or {}
|
||||
ctx = dict(
|
||||
has_workflow_instance = has_workflow_instance,
|
||||
has_workflow_modal = has_workflow_modal,
|
||||
workflow_modal = workflow_modal,
|
||||
workflow_instance = workflow_instance,
|
||||
history_list = history_list,
|
||||
has_history = has_history,
|
||||
todo_list = todo_list,
|
||||
)
|
||||
# print history_list
|
||||
extra_context.update(ctx)
|
||||
except Exception,e:
|
||||
print Exception,e
|
||||
pass
|
||||
return super(BOAdmin,self).history_view(request,object_id,extra_context)
|
||||
|
||||
def get_changeform_initial_data(self, request):
|
||||
import datetime
|
||||
return {'begin':datetime.date.today,'end':datetime.date(9999,12,31)}
|
||||
|
||||
def save_model(self, request, obj, form, change):
|
||||
|
||||
if change:
|
||||
setattr(obj,'modifier',request.user.username)
|
||||
else:
|
||||
setattr(obj,'creator',request.user.username)
|
||||
setattr(obj,'begin',datetime.date.today())
|
||||
setattr(obj,'end',datetime.date(9999,12,31))
|
||||
try:
|
||||
setattr(obj,'user',request.user)
|
||||
except Exception,e:
|
||||
pass
|
||||
|
||||
super(BOAdmin,self).save_model(request,obj,form,change)
|
||||
# print '=========it is here========='
|
||||
try:
|
||||
code = getattr(obj,'code')
|
||||
# print code
|
||||
if code is None or len(code) == 0:
|
||||
fmt = '%s%0'+str(self.CODE_NUMBER_WIDTH)+'d'
|
||||
code = fmt % (self.CODE_PREFIX,obj.id)
|
||||
table = obj._meta.db_table
|
||||
sql = 'update %s set code = \'%s\' where id=%s' % (table,code,obj.id)
|
||||
print sql
|
||||
update(sql)
|
||||
except Exception,e:
|
||||
print e
|
||||
|
||||
# def response_change(self, request, obj):
|
||||
# return HttpResponseRedirect('')
|
||||
|
||||
def export_selected_data(self,request,queryset):
|
||||
ops = self.model._meta
|
||||
workbook = xlwt.Workbook(encoding='utf-8')
|
||||
dd = datetime.date.today().strftime('%Y%m%d')
|
||||
file_name = force_text(ops.verbose_name+dd)
|
||||
sheet = workbook.add_sheet(force_text(ops.verbose_name))
|
||||
obj_fields = getattr(self,'export_fields',None) or self.list_display or self.fields
|
||||
|
||||
head_col_index = 0
|
||||
for field in obj_fields:
|
||||
col_name = field
|
||||
try:
|
||||
f = ops.get_field(field)
|
||||
col_name = f.verbose_name
|
||||
except Exception,e:
|
||||
f = getattr(self.model,field)
|
||||
if hasattr(f,'short_description'):
|
||||
col_name = f.short_description
|
||||
sheet.write(0,head_col_index,force_text(col_name))
|
||||
head_col_index+=1
|
||||
row_index = 1
|
||||
for obj in queryset:
|
||||
col_index = 0
|
||||
for field in obj_fields:
|
||||
f = field
|
||||
try:
|
||||
f = ops.get_field(field)
|
||||
except Exception,e:
|
||||
pass
|
||||
v = getattr(obj,field,'')
|
||||
if hasattr(v,'__call__') or callable(v):
|
||||
v = v()
|
||||
elif type(f) == fields.DateField:
|
||||
v = v.strftime('%Y-%m-%d')
|
||||
elif type(f) == fields.DateTimeField:
|
||||
v = v.strftime('%Y-%m-%d %H:%M')
|
||||
elif type(f) == fields.CharField and f.choices:
|
||||
fc = 'get_'+field+'_display'
|
||||
v = getattr(obj,fc)()
|
||||
elif type(f) == related.ForeignKey:
|
||||
v = str(v)
|
||||
sheet.write(row_index,col_index,v)
|
||||
col_index += 1
|
||||
row_index += 1
|
||||
response = HttpResponse(content_type='application/vnd.ms-excel')
|
||||
agent = request.META.get('HTTP_USER_AGENT')
|
||||
nn = smart_str(file_name)
|
||||
if agent and re.search('MSIE',agent):
|
||||
nn = urlquote(file_name)
|
||||
response['Content-Disposition'] = 'attachment; filename=%s.xls'%nn
|
||||
workbook.save(response)
|
||||
return response
|
||||
#self.message_user(request,'SUCCESS')
|
||||
export_selected_data.short_description = _("export selected %(verbose_name_plural)s")
|
||||
|
||||
class Meta:
|
||||
ordering = ['-creation']
|
||||
|
||||
class Media:
|
||||
css = {'all':('css/maximus.css',)}
|
||||
js = ('js/maximus.js',)
|
||||
Reference in New Issue
Block a user