class WorkOrderTable(tables.DataTable): # hidestatus = tables.Column("hidestatus", verbose_name=u"隐藏状态") orderid = tables.Column("id", verbose_name=u"工单ID") confirmuser = tables.Column( lambda obj: WorkOrderManager.get_handlinguser(obj), verbose_name=u'处理人') userid = tables.Column(lambda obj: UserManager.get(id=obj.userid).username if obj.userid else '', verbose_name=u'提交人') # cc = tables.Column(lambda obj:' | '.join([ UserManager.get(id=i).username for i in json.loads(obj.ordertemp.cc)]) if json.loads(obj.ordertemp.cc) else '',verbose_name=u'抄送') # sendTo = tables.Column(lambda obj: ' | '.join([ UserManager.get(id=i).username for i in json.loads(obj.ordertemp.default_send)]) if json.loads(obj.ordertemp.default_send) else '',verbose_name=u'发送') name = tables.Column(lambda obj: obj.ordertemp.name, verbose_name=u'工单模板') typename = tables.Column(lambda obj: obj.ordertemp.typeid.name, verbose_name=u'工单类型') # ordernum = tables.Column("ordernum", verbose_name=u"工单编号") status = tables.Column(lambda obj: WorkOrderManager.get_status(obj.status), verbose_name=u'工单状态') # priority = tables.Column(lambda obj:WorkOrderManager.get_priority(obj.priority),verbose_name=u'优先级') addedtime = tables.Column('addedtime', verbose_name=u'提交时间') confirmtime = tables.Column('confirmtime', verbose_name=u'确认时间') dealtime = tables.Column( lambda obj: omg_func.formate_second_date(int(obj.dealtime)) if obj.dealtime else '', verbose_name=u'处理时间') # dealtime = tables.Column(lambda obj:omg_func.formate_second_date(int(obj.dealtime)) if obj.dealtime else '',verbose_name=u'处理时间') class Meta(object): name = "workorder" verbose_name = u'工单' pagination_param = "page" prev_pagination_param = "page" multi_select = False table_actions = ( OrderFilterAction, WorkOrderEfficiency, WorkOrderField, WorkOrderTemp, ListTemp, ) row_actions = ( ListOrder, EditOrder, DeleteOrder, )
def post(self, request, *args, **kwargs): data = json.loads(request.body) orderId = data.get('orderId',None) data = {} objects = WorkOrderManager.delete(orderId) if objects: data = {'result':1,'msg':u'工单删除成功'} else: data = {'result':2,'msg':u'工单删除失败'} return HttpResponse(json.dumps(data), content_type='application/json')
def get_data(self): search_opts = {} filter = self.get_server_filter_info(self.request) if filter['value'] and filter['field']: search_opts = {filter['field']: filter['value']} marker = self.request.GET.get(WorkOrderTable._meta.pagination_param, None) args = { 'marker': marker, 'paginate': True, 'filters': '', 'sort_dir': 'desc' } objs = WorkOrderManager.filter(self.request, search_opts=search_opts) objects, self._prev, self._more = utils.paginate( self.request, objs, **args) self._totalcount = len(objs) return objects
def delete(self, request, obj_id): WorkOrderManager.delete(obj_id)
def allowed(self, request, datum): if WorkOrderManager.get(request, id=datum.id).ordertemp.is_audit: return True else: return False
def allowed(self, request, datum): if WorkOrderManager.list(request, ordertemp=datum.id): return False else: return True
def get_context_data(self, **kwargs): orderid = kwargs['id'] context = super(ListOrderView, self).get_context_data(**kwargs) order_obj = WorkOrderManager.get(self.request, id=orderid) userid = self.request.user.id user_obj = UserManager.get(id=self.request.user.id) if order_obj and user_obj: message_obj = WorkOrderMessageManager.get( self.request, orderid=WorkOrderManager.get(self.request, id=orderid)) mesg_obj = [] if message_obj: for item in message_obj: if item.attachment: mesg_obj.append({ 'avatar': UserManager.get(id=item.userid).avatar, 'username': UserManager.get(id=item.userid).username, 'message': item.message, 'attachment': json.loads(item.attachment), 'addedtime': item.addedtime }) else: mesg_obj.append({ 'avatar': UserManager.get(id=item.userid).avatar, 'username': UserManager.get(id=item.userid).username, 'message': item.message, 'addedtime': item.addedtime }) context['mesg_obj'] = mesg_obj self.page_title = u"工单详情" context['field_obj'] = json.loads(order_obj.orderfield) if order_obj.attachment: context['order_attachment'] = json.loads(order_obj.attachment) context['order_obj'] = order_obj context['status'] = WorkOrderManager.get_status(order_obj.status) send_cc = [] send_user = [] if order_obj.ordertemp.ccusers: for user in order_obj.ordertemp.ccusers.all(): send_cc.append(int(user.id)) send_user.append(user.userId) if order_obj.ccusers: for user in order_obj.ccusers.all(): send_cc.append(int(user.id)) send_user.append(user.userId) if order_obj.auditusers: for user in order_obj.auditusers.all(): send_cc.append(int(user.id)) send_user.append(user.userId) context['send_handle_user'] = json.dumps(send_user) if UserManager.get(id=order_obj.userid).userId: context['send_order_user'] = json.dumps( [str(UserManager.get(id=order_obj.userid).userId)]) else: context['send_order_user'] = json.dumps([]) context['userid'] = user_obj.id context['username'] = UserManager.get( id=int(order_obj.userid)).username context['orderUserId'] = order_obj.userid if order_obj.ordertemp.is_audit is True: self.template_name = "sysadmin/workorder/list_audit_order.html" if int(order_obj.status) == 0: context['openstatus'] = 'active' if int(order_obj.status) == 1: context['confirmstatus'] = 'active' if int(order_obj.status) == 2: context['closestatus'] = 'active' if int(order_obj.status) == 4: context['auditstatus'] = 'active' if int(order_obj.status) == 5: context['repulsestatus'] = 'active' if int(order_obj.status) == 0 and user_obj.id in [ int(user.id) for user in order_obj.auditusers.all() ]: context['auditpassed'] = True context['repulse'] = True if user_obj.id in [ int(user.id) for user in order_obj.ordertemp.ccusers.all() ] and int(order_obj.status) == 4: context['confirm'] = True context['repulse'] = True if user_obj.id == order_obj.userid and int( order_obj.status) == 1: context['close'] = True if int(order_obj.status) == 2 or int(order_obj.status) == 0: context['disabled'] = 'none' elif user_obj.id == order_obj.userid: context['disabled'] = '' if int(order_obj.status ) == 0 and order_obj.userid == user_obj.id: context['disabled'] = '' if int(order_obj.status ) == 5 and order_obj.userid == user_obj.id: context['disabled'] = 'none' elif order_obj.ordertemp.is_confirm is True: self.template_name = "sysadmin/workorder/list_audit_order.html" if int(order_obj.status) == 0: context['openstatus'] = 'active' if int(order_obj.status) == 1: context['confirmstatus'] = 'active' if int(order_obj.status) == 2: context['closestatus'] = 'active' if int(order_obj.status) == 4: context['auditstatus'] = 'active' if int(order_obj.status) == 5: context['repulsestatus'] = 'active' if int(order_obj.status) == 0 and user_obj.id in [ int(user.id) for user in order_obj.ordertemp.tousers.all() ]: context['auditpassed'] = True context['repulse'] = True if user_obj.id in [ int(user.id) for user in order_obj.ordertemp.ccusers.all() ] and int(order_obj.status) == 4: context['confirm'] = True context['repulse'] = True if user_obj.id == order_obj.userid and int( order_obj.status) == 1: context['close'] = True if int(order_obj.status) == 2 or int(order_obj.status) == 0: context['disabled'] = 'none' elif user_obj.id == order_obj.userid: context['disabled'] = '' if int(order_obj.status ) == 0 and order_obj.userid == user_obj.id: context['disabled'] = '' if int(order_obj.status ) == 5 and order_obj.userid == user_obj.id: context['disabled'] = 'none' else: if order_obj.status: if int(order_obj.status) == 0: context['openstatus'] = 'active' if int(order_obj.status) == 1: context['confirmstatus'] = 'active' if int(order_obj.status) == 2: context['closestatus'] = 'active' if user_obj.id in [ int(user.id) for user in order_obj.ordertemp.ccusers.all() ] and int(order_obj.status ) == 0 and order_obj.ordertemp.is_audit is False: context['confirm'] = True if user_obj.id == order_obj.userid and int( order_obj.status) == 1: context['close'] = True if user_obj.id == order_obj.userid and int( order_obj.status) == 2: context['reopen'] = True if int(order_obj.status) == 2 or int(order_obj.status) == 0: context['disabled'] = 'none' elif user_obj.id == order_obj.userid: context['disabled'] = '' if int(order_obj.status ) == 0 and order_obj.userid == user_obj.id: context['disabled'] = '' else: self.template_name = 'sysadmin/workorder/list_temp.html' self.page_title = u"提交工单" temp_type_obj = [] for i in WorkOrderTypeManager.list(self.request): temp_obj = [] temp = WorkOrderTempManager.filter(self.request, typeid=i.id) if temp: for s in temp: temp_obj.append({'name': s.name, 'id': s.id}) temp_type_obj.append({ 'isExist': True, 'name': i.name, 'id': i.id, 'temp_obj': temp_obj }) else: temp_type_obj.append({ 'name': i.name, 'id': i.id, 'isExist': False }) context['temp_type_obj'] = temp_type_obj return context
def get_object(self): id = self.kwargs.get('id', None) return WorkOrderManager.get('', id=id)
def get(self,request,*arg,**kwargs): begintime = request.GET.get('begintime', None) endtime = request.GET.get('endtime', None) if begintime is None: begintime = (datetime.now() + timedelta(days=-7)).strftime('%Y-%m-%d %H:%M:%S') if endtime is None: endtime = (datetime.now() + timedelta(days=0)).strftime('%Y-%m-%d %H:%M:%S') users = [] weekUsers = [] orderDealTime = [] effObject = [] weekDealTime = [] orders = WorkOrderManager.count(delete=False) openOrders = WorkOrderManager.count(status=0) ordObjects = WorkOrderManager.list(request).exclude(status=0)\ .filter(addedtime__gte=begintime,addedtime__lte=endtime) effObjects = WorkOrderEffManager.list() weekOrderObjects = WorkOrderManager.list('',addedtime__gte=begintime,addedtime__lte=endtime)\ .exclude(status=0).exclude(status=3).values('confirmuser').annotate(count=Count('confirmuser')) for obj in weekOrderObjects: if obj['confirmuser']: try: weekUsers.append({ 'username':UserManager.get(id=obj['confirmuser']).username, 'count':obj['count'], } ) except Exception: pass weekOrderObjects = WorkOrderManager.list('',addedtime__gte=begintime,addedtime__lte=endtime)\ .exclude(status=0).exclude(status=3).values('confirmuser').annotate(sum=Sum('dealtime')) for obj in weekOrderObjects: if obj['confirmuser']: try: weekDealTime.append({ 'username':UserManager.get(id=obj['confirmuser']).username, 'sum':obj['sum'], }) except Exception: pass if effObjects: for obj in effObjects: effObject.append({'time':obj.addedtime.strftime('%Y-%m-%d %H:%M:%S'),'value':obj.value}) if ordObjects: for obj in ordObjects: orderDealTime.append({'time':obj.dealtime,'id':obj.id}) userObj = WorkOrderManager.group('confirmuser') for obj in userObj: if obj['confirmuser']: try: users.append({ 'username':UserManager.get(id=obj['confirmuser']).username, 'count':obj['count'], }) except Exception: pass objects = { 'effObject':effObject, 'users':users, 'weekUsers':weekUsers, 'orders':orders, 'openorders':openOrders, 'orderDealTime':orderDealTime, 'weekDealTime':weekDealTime, } return HttpResponse(json.dumps(objects), content_type='application/json')
def get(self,request,*arg,**kwargs): data = json.loads(request.body) tempTypeId = data.get('id',None) objects = WorkOrderManager.list(ordertemp=tempTypeId) return HttpResponse(json.dumps(objects), content_type='application/json')
def post(self, request, *args, **kwargs): data = request.POST order_name = data.get('order_name',None) order_desc = data.get('order_desc',None) field_obj = json.loads(data.get('field_obj',None)) temp_id = data.get('temp_id',None) send_cc = json.loads(data.get('order_cc',None)) userid = data.get('userid',None) files = request.FILES.getlist('files') tempobj = WorkOrderTempManager.get('',id=temp_id) time_now = strftime("%Y-%m-%d %H:%M") attachment = [] send_user_id = [] data = {} try: groups = UserManager.get(id=int(userid)) except Exception: pass order_group = [int(o.id) for o in tempobj.auditgroup.all()] user_group = [int(o.id) for o in groups.groupname.all()] result = list(set(user_group).intersection(set(order_group))) user_obj = UserManager.filter(groupname__in=result,is_headman=True) if len(user_obj) == 0: data = {'result':False,'msg':u'请联系管理员把你加入某个组里面'} if files: UPLOAD_PATH = getattr(settings, 'UPLOAD_PATH') key_path = fucApi.joinpath(UPLOAD_PATH,str('workorder'),str(userid)) key_path = fucApi.mkdir(key_path) for file in files: attachment.append({'name':file.name,'path':key_path}) destfile = open(key_path + '/' + file.name,'w') for chunk in file.chunks(): destfile.write(chunk) kwargs = { 'userid':userid, 'hidestatus':1, 'name':order_name, 'description':order_desc, 'ordertemp':tempobj, 'orderfield':json.dumps(field_obj), 'attachment':json.dumps(attachment), } try: objects = WorkOrderManager.add(request,**kwargs) data = {'result':True,'msg':u'创建工单成功','id':objects.id} if tempobj and tempobj.is_audit: message = '待审核工单:[ {0} ]'.format(tempobj.name) else: message = '待处理工单 [ {0} ] '.format(tempobj.name) obj_msg = WorkOrderMessageManager.insert(orderid=objects,message=message,userid=userid) obj_msg.save() for user in send_cc: try: userobj = UserManager.get(id=user) send_user_id.append(userobj.userId) objects.ccusers.add(userobj) except Exception: pass for user in tempobj.ccusers.all(): try: send_user_id.append(user.userId) except Exception: pass for user in user_obj: try: send_user_id.append(user.userId) objects.auditusers.add(user) except Exception: pass if send_user_id: body = {} body['user'] = set(send_user_id) request_url = "http://{0}/sysadmin/workorder/{1}/list".format(request.get_host(),objects.id) body['msg'] = '工单编号:{0}\n主题:{1}\n描述:{2}\n来自:{3}\n时间:{4}\n访问地址:{5}\n'.format( objects.id,tempobj.name,tempobj.description, UserManager.get(id=userid).username, time_now,request_url) api = DingApi() try: api.senddingText(body['user'],body['msg']) except Exception: pass except Exception: pass return HttpResponse(json.dumps(data), content_type='application/json')