Пример #1
0
 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")
Пример #2
0
 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))
Пример #3
0
 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
Пример #4
0
 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")
Пример #5
0
 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")
Пример #6
0
 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")
Пример #7
0
 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 
Пример #8
0
 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)