def choose (self, id=None): c.order = h.checkorder(id) # Теперь - проверка прав доступа (ответственный подразделения, выполняющего заявки) if not (h.have_role('admin') or ((h.have_role("appointer")) and session.has_key('division') and c.order.perf_id == session['division'])): abort(403) actionquery = meta.Session.query(model.Action) #if actionquery.filter_by(div_id=c.order.perf_id).all() is None: # lastaction = None #else: # lastaction = actionquery.filter_by(div_id=c.order.perf_id).order_by(model.sql.desc(model.Action.created)).first() lastaction = actionquery.filter_by(order_id=id).filter_by(div_id=c.order.perf_id).filter(model.Action.status_id != 16).order_by(model.sql.desc(model.Action.created)).first() c.actions = actionquery.filter_by(order_id=id).order_by(model.Action.created).all() # Статусы statuses = meta.Session.query(model.Status).order_by(model.Status.gui_priority) if h.have_role('admin'): excluded_statuses = [1, 4, 6, 11, 12, 14] else: excluded_statuses = [1, 2, 4, 6, 11, 12, 14] c.statuses = [["", u" -- выберите -- "]] + [[status.id, status.title] for status in statuses if status.id not in excluded_statuses] # Люди-исполнители performers = meta.Session.query(model.Person).filter_by(deleted=False).filter_by(performer=True).order_by(model.Person.surname, model.Person.name, model.Person.name) if h.have_role('admin') and lastaction is not None: performers = performers.filter_by(div_id=lastaction.div_id) else: performers = performers.filter_by(div_id=session['division']) c.performers = [[user.id, h.name(user)] for user in performers] if lastaction is not None: c.curperfs = [x.id for x in c.order.performers] c.curdiv = lastaction.div_id if h.have_role("admin"): divlist = [x.div_id for x in meta.Session.query(model.Person.div_id).filter_by(performer=True).all()] c.divisions = [[x.id, x.title] for x in meta.Session.query(model.Division).filter_by(deleted=False).filter(model.Division.id.in_(divlist)).all()] return render("/actions/choose.html")
def take(self, id=None): order = h.checkorder(id) # Теперь - проверка прав доступа (ответственный подразделения, могущего выполнять заявки) if not (h.have_role("appointer") and order.status_id == 1): abort(403) elif h.have_role("guest"): abort(401) act = model.Action() act.order_id = order.id act.status = meta.Session.query(model.Status).get(2) act.div_id = session["division"] # Заполним исполнителей заявки for pid in self.form_result["performers"]: perf = meta.Session.query(model.Person).get(pid) act.performers.append(perf) order.order_performers.append(model.OrderPerformer(person=perf, current=True)) order.status = meta.Session.query(model.Status).get(2) order.perf_id = session["division"] meta.Session.add(act) # Готово! meta.Session.commit() h.flashmsg( u"Вы взяли заявку № " + h.strong(order.id) + u" для выполнения себе. Исполнители: %s" % (u", ".join([h.name(x) for x in act.performers])) ) redirect_to(h.url_for(controller="order", action="view", id=order.id))
def getperformers (self, id=None): '''Отдаёт JSON со списком пользователей-исполнителей''' if id is None: return '' div = meta.Session.query(model.Division).get(id) if div is None: return '' result = [{"id": x.id, "name": h.name(x)} for x in div.people if x.performer == True] return result
def add(self): h.requirerights("admin") users = meta.Session.query(model.Person).all() c.users = [] for i in users: c.users.append([i.id, h.name(i)]) return render ("/divisions/add.html")
def takerequest (self, id=None): c.order = h.checkorder(id) # Теперь - проверка прав доступа if not (h.have_role('appointer') and c.order.status_id==1): abort(401) c.division = meta.Session.query(model.Division).get(int(session['division'])) performers = meta.Session.query(model.Person).filter_by(deleted=False)\ .filter_by(div_id=session['division']).filter_by(performer=True).order_by(model.Person.surname).all() c.performers = [] for user in performers: c.performers.append([user.id, h.name(user)]) return render ("/orders/take.html")
def switch (self, id=None): h.requirerights("operator") userdivs =meta.Session.query(model.Person, model.Division).join(model.Division)\ .filter(and_(model.Person.deleted==False, model.Person.creator==True))\ .filter(or_(model.Person.chief==True, model.Person.responsible==True))\ .order_by(model.Division.title).order_by(model.Person.surname).all() #users = meta.Session.query(model.Person)\ # .filter_by(deleted=False).filter_by(creator=True).order_by(model.Person.login).order_by(model.Person.surname).all() #users.sort(key=lambda x:(x.division.title, x.surname)); #c.users = [[unicode(x.id), x.division.title + h.literal(" — ") + (h.name(x))] for x in users] c.users = [[unicode(x[0].id), x[1].title + h.literal(" — ") + (h.name(x[0]))] for x in userdivs] c.selected = id return render ("/users/switch.html")
def orderstat (self, ctype="text/html"): response.content_type = 'text/plain' result = "" orders = meta.Session.query(model.Order).filter_by(deleted=False).order_by(model.Order.created).options(eagerload('actions')) for order in orders: applied = order.actions.filter(model.Action.status_id==2).order_by(model.Action.created).options(eagerload('performers')).first() markdone = order.actions.filter(model.Action.status_id==3).order_by(model.sql.desc(model.Action.created)).options(eagerload('performers')).first() #applied = meta.Session.query(model.Action).filter_by(order_id=order.id).\ # filter(model.Action.status_id==2).order_by(model.Action.created).first() #markdone = meta.Session.query(model.Action).filter_by(order_id=order.id).\ # filter(model.Action.status_id==3).order_by(model.sql.desc(model.Action.created)).options(eagerload('performers')).first() #for act in order.actions: # if act.status_id == 2: # applied = act # break # else: # applied = None #for act in reversed(order.actions): # if act.status_id == 3: # markdone = act # break # else: # markdone = None result += unicode(order.id) +" "+ unicode(calendar.timegm(order.created.timetuple())) + " " for act in [applied, markdone]: try: result += unicode(calendar.timegm(act.created.timetuple())) + " " except AttributeError: result += "None " if markdone is not None: result += "\"" + u", ".join([h.name(person) for person in markdone.performers]) + "\"" + "\n" elif applied is not None: result += "\"" + u", ".join([h.name(person) for person in applied.performers]) + "\"" + "\n" else: result += "\"None\"\n" return result
def edit(self, id=None): h.requirelogin() div = h.checkdiv(id) if not (h.have_role('admin') or (session.get('division')==div.id and (session.get('chief') or session.get('responsible')))): abort(403) users = meta.Session.query(model.Person).all() c.users = [] for i in users: c.users.append([i.id, h.name(i)]) #qmembers = meta.Session.query(model.Person).filter_by(division=div.id).all() members = [] for i in div.people: members.append(i.id) values = { 'title': div.title, 'address': div.address, 'description': div.description, 'email': div.email, 'phone': div.phone, 'users': members, } return htmlfill.render(render("/divisions/edit.html"), values)