コード例 #1
0
ファイル: phonecalls.py プロジェクト: umeboshi2/mslemon
class PhoneCallManager(object):
    def __init__(self, session):
        self.session = session
        self.tickets = TicketManager(self.session)
        
    def query(self):
        q = self.session.query(PhoneCall, TicketCurrentStatus)
        q = q.filter(PhoneCall.ticket_id == TicketCurrentStatus.ticket_id)
        return q
    
    def get(self, id):
        return self.session.query(PhoneCall).get(id)

    def get_status(self, id):
        q = self.query().filter(PhoneCall.id == id)
        return q.one()
    

    
    def new_call(self, received, caller, number,
                 callee_id, received_by_id, title, description):
        with transaction.manager:
            now = datetime.now()
            # the ticket is opened by the receiver
            # and then handled by the callee
            ticket = self.tickets.open(received_by_id,
                                       title, description, callee_id)
            pc = PhoneCall()
            pc.received = received
            pc.caller = caller
            pc.number = number
            pc.callee_id = callee_id
            pc.received_by_id = received_by_id
            pc.ticket_id = ticket.id
            self.session.add(pc)
        return self.session.merge(pc)

    def _received_range_filter(self, query, start, end):
        query = query.filter(PhoneCall.received >= start)
        query = query.filter(PhoneCall.received <= end)
        return query

    def _lastchange_range_filter(self, query, start, end):
        query = query.filter(TicketCurrentStatus.last_change >= start)
        query = query.filter(TicketCurrentStatus.last_change <= end)
        return query
    
    def get_taken_calls(self, user_id, start=None,
                        end=None, timestamps=False):
        q = self.query()
        q = q.filter(PhoneCall.received_by_id == user_id)
        if start is not None:
            if timestamps:
                start, end = convert_range_to_datetime(start, end)
            q = self._received_range_filter(q, start, end)
        q = q.filter(TicketCurrentStatus.status != 'closed')
        return q.all()

    def get_received_calls(self, user_id, start=None,
                           end=None, timestamps=False):
        q = self.query()
        q = q.filter(PhoneCall.callee_id == user_id)
        if start is not None:
            if timestamps:
                start, end = convert_range_to_datetime(start, end)
            q = self._received_range_filter(q, start, end)
        q = q.filter(TicketCurrentStatus.status != 'closed')
        return q.all()

    def get_assigned_calls(self, user_id, start=None,
                           end=None, timestamps=False):
        q = self.query()
        q = q.filter(TicketCurrentStatus.handler_id == user_id)
        if start is not None:
            if timestamps:
                start, end = convert_range_to_datetime(start, end)
            q = self._received_range_filter(q, start, end)
        q = q.filter(TicketCurrentStatus.status != 'closed')
        return q.all()

    def get_unread_calls(self, user_id, start=None,
                           end=None, timestamps=False):
        q = self.query()
        q = q.filter(TicketCurrentStatus.handler_id == user_id)
        if start is not None:
            if timestamps:
                start, end = convert_range_to_datetime(start, end)
            q = self._received_range_filter(q, start, end)
        q = q.filter(TicketCurrentStatus.status == 'opened')
        return q.all()

    def get_pending_calls(self, user_id, start=None,
                           end=None, timestamps=False):
        q = self.query()
        q = q.filter(TicketCurrentStatus.handler_id == user_id)
        if start is not None:
            if timestamps:
                start, end = convert_range_to_datetime(start, end)
            q = self._received_range_filter(q, start, end)
        q = q.filter(TicketCurrentStatus.status == 'pending')
        return q.all()
    
    def get_closed_calls(self, user_id, start=None,
                           end=None, timestamps=False):
        q = self.query()
        q = q.filter(TicketCurrentStatus.handler_id == user_id)
        if start is not None:
            if timestamps:
                start, end = convert_range_to_datetime(start, end)
            q = self._received_range_filter(q, start, end)
        q = q.filter(TicketCurrentStatus.status == 'closed')
        return q.all()
    

    def get_delegated_calls(self, user_id, start=None,
                           end=None, timestamps=False):
        q = self.query()
        q = q.filter(PhoneCall.callee_id == user_id)
        if start is not None:
            if timestamps:
                start, end = convert_range_to_datetime(start, end)
            q = self._received_range_filter(q, start, end)
        q = q.filter(TicketCurrentStatus.status == 'pending')
        q = q.filter(TicketCurrentStatus.changed_by_id != user_id)
        return q.all()
コード例 #2
0
ファイル: phonecalls.py プロジェクト: umeboshi2/mslemon
 def __init__(self, session):
     self.session = session
     self.tickets = TicketManager(self.session)
コード例 #3
0
ファイル: documents.py プロジェクト: umeboshi2/mslemon
 def assign_to_ticket(self, doc_id, ticket_id, user_id):
     tickets = TicketManager(self.session)
     doc = tickets.attach_document(ticket_id, doc_id, user_id)
     self._tidy_assignments(doc_id)
     return doc