Beispiel #1
0
   def create(self, **kw):
      ''' Add new fax to DB
      '''
      f = Fax()
      f.type = 0 # 0=Sent, 1=Received
      f.comment = kw['comment']
      f.dest = kw['dest']
      f.filename = kw['file'].filename
      u = DBSession.query(User).filter(User.user_name==request.identity['repoze.who.userid']).one()
      f.user_id = u.user_id
      try:
         f.src = u.phone[0].exten
      except:
         f.src = None

      # Try to insert file in DB: might fail if name already exists
      try:
         DBSession.add(f)
         DBSession.flush()
      except:
         flash(u'Impossible de créer le fax', 'error')
         redirect('/fax/')

      ret, pdf_data = process_file(kw['file'], f.fax_id, kw['dest'], u.email_address)
      
      if ret is not None:
         flash(ret,'error')
         DBSession.delete(f)
         redirect('/fax/')

      f.pdf = pdf_data

      flash(u'"%s" en cours d\'envoi à %s' % (kw['file'].filename, kw['dest']))
      redirect('/fax/')
Beispiel #2
0
   def create(self, **kw):
      ''' Add new pickup to DB
      '''

      if DBSession.query(Pickup).filter(Pickup.name==kw['name']).all():
         flash(u'Ce groupe existe déjà, pas créé', 'error')
         redirect('/pickups/')

      # Find new pickup group (0-63)
      i = 0
      for p in DBSession.query(Pickup).order_by(Pickup.pickup_id):
         if p.pickup_id!=i: break
	 i += 1

      if i>63:
         flash(u'Nombre maximum de groupe d\'interceptions atteint, création impossible',
            'error')

      else:
         p = Pickup()
         p.pickup_id = i
         p.name = kw['name']
         p.comment = kw['comment']
         DBSession.add(p)
         flash(u'Nouveau groupe d\'interception "%s" créé' % (kw['name']))

      redirect('/pickups/')
Beispiel #3
0
   def save(self, name, comment, type, begin, end, file, active=None):

      log.debug('Save "%s"!' % file)

      c = Campaign()
      c.name = name
      c.comment = comment
      c.type = type
      c.active = active
      c.begin = begin
      c.end = end
      DBSession.add(c)
      DBSession.flush()
      log.debug(u'nouvelle campagne %s créée' % c.cmp_id)

      msg = u'Campagne "%s" créée' % name
      if file is not None:
         l, e, m = process_file(file, c.cmp_id)
         if l==0:
            msg += m
         else:
            msg += u', %d lignes intégrées' % l
            if e!=0:
               msg += u', %d erreurs' % e

      flash(msg)
      redirect('/cc_campaign/')
Beispiel #4
0
   def create(self, **kw):
      ''' Add new shortcut to DB
      '''

      if DBSession.query(Shortcut).filter(Shortcut.exten==kw['exten']).all() or \
         DBSession.query(Shortcut).filter(Shortcut.number==kw['number']).all():
         flash(u'Erreur : raccourci %s ou numéro %s existe déjà' % (
            kw['exten'], kw['number']), 'error')
         redirect('/shortcuts/')

      s = Shortcut()
      s.exten = kw['exten']
      s.number = kw['number']
      s.comment = kw['comment']
      s.phone = kw['phone']
      DBSession.add(s)
      flash(u'Nouveau raccourci "%s -> %s" créé' % (s.exten, s.number))

      if p.exten is not None:
         # Create new hint (extensions.conf)
         res = Globals.manager.update_config(
            directory_asterisk  + 'extensions.conf', 
            None, [('Append', 'shortcuts', 'exten', 
               '>%s,1,%s/%s' % \
                  (p.exten, 'SIP' if sip_type=='sip' else 'PJSIP', p.sip_id))])
         log.debug('Update hints extensions.conf returns %s' % res)

      redirect('/shortcuts/')
Beispiel #5
0
   def create(self, pwd1, pwd2, **kw):
      ''' Add new user to DB
      '''
      if DBSession.query(User).filter(User.user_name==kw['user_name']).all():
         flash(u'Ce compte existe déjà, utilisateur pas créé', 'error')
         redirect('/users/')

      log.info('new ' + kw['user_name'])
      u = User()
      u.user_name = kw['user_name']
      u.firstname = kw['firstname']
      u.lastname = kw['lastname']
      u.email_address = kw['email_address']
      u.fax = kw['fax']
      u.voicemail = kw['voicemail']
      u.email_voicemail = kw['email_voicemail']
      u.password = pwd1
      u.display_name = u.lastname + ' ' + u.firstname
      u.ascii_name = asterisk_string(u.display_name)
      over = kw.get('over')
      if over is not None:
         Globals.manager.send_action({'Action': 'DBput',
            'Family': 'over', 'Key': over, 'Val': 'context'})

      if 'groups' in kw:
         u.groups = DBSession.query(Group).\
               filter(Group.group_id.in_(kw['groups'])).all()

      DBSession.add(u)
      flash(u'Nouvel utilisateur "%s" créé' % (kw['user_name']))

      redirect('/users/')
Beispiel #6
0
   def originate(self, exten, cust):
      ''' Originate call
      '''
      uphones = DBSession.query(User).get(request.identity['user'].user_id).phone
      if len(uphones)<1:
         return dict(status=2)

      o = Outcall()
      o.user_id = request.identity['user'].user_id
      o.cust_id = cust
      o.cookie = randint(-2147483648, 2147483647)
      DBSession.add(o)
      DBSession.flush() # needed to get the out_id

      chan = uphones[0].sip_id
      exten = sub(r'\D', '', exten)
      log.debug('originate: outcall %d from extension %s to %s' % (
         o.out_id, chan, exten))
      res = Globals.manager.originate(
            'SIP/' + chan.encode('iso-8859-1'), # Channel
            exten.encode('iso-8859-1'), # Extension
            context=chan.encode('iso-8859-1'),
            priority='1',
            caller_id=default_cid,
            variables= {'OUTCALL': o.out_id,
               'COOKIE': o.cookie},
            async = True   # Seems to be needed else DB is not commited and
                           # call to uniqueid below fails with "inexistant call"
            )
      status = o.out_id if res.headers['Response']==u'Success' else -1
      log.debug('originate: res=%s, outcall=%d, status=%s, cookie=%d' % (
         res, o.out_id, status, o.cookie))
      return dict(status=status)
Beispiel #7
0
def create_phones(base):
   for i in range(0,100):
      p = Phone()
      p.number = '%s%02d' % (base, i)
      p.department_id = -1
      DBSession.add(p)
   DBSession.flush()
   transaction.commit()
Beispiel #8
0
   def record(self, name, channel, queue, custom1=None, custom2=None):
      '''Record a queue member
         Called from call center monitor web page

Action: Monitor
Mix: 1
File: test
Channel: SIP/pEpSNlcv-000001b9
   '''
      log.debug('Record request "%s" (%s) on "%s"' % (name, channel, queue))

      # Check channel exists, else abort
      for cha in Globals.asterisk.channels.keys():
         if cha.startswith(channel):
            unique_id = Globals.asterisk.channels[cha]['Uniqueid']
            break
      else:
         log.warning('No active channel for %s ?' % channel)
         return dict(status=0)

      # XXX Authentification

      # Gather data from database
      user_id = DBSession.query(User).filter(
         User.user_name==request.identity['repoze.who.userid']).one().user_id
      member_id = DBSession.query(Phone).filter(
         Phone.sip_id==channel[-8:]).one().user_id
      queue_id = DBSession.query(Queue).filter(
            Queue.name==queue).one().queue_id

      # Create filename and send record action to Asterisk via manager
      f = 'rec-%s' % unique_id
      res = Globals.manager.send_action(
            {  'Action': 'Monitor',
               'Mix': 1,
               'Channel': cha,
               'File': f})
      log.info('Record request from userid "%s" to channel %s returns "%s"' % ( 
         user_id, cha, res))

      if res.get_header('Response')=='Success':
         status = 0
         # Set "recorded" flag on member
         Globals.asterisk.members[name]['Recorded'] = True
         # Insert record info into database
         r = Record()
         r.uniqueid = unique_id
         r.queue_id = queue_id
         r.member_id = member_id
         r.user_id = user_id
         r.custom1 = custom1
         r.custom2 = custom2
         DBSession.add(r)

      else:
         status = 1

      return dict(status=status)
Beispiel #9
0
 def create(self, **kw):
    ''' Add new group to DB
    '''
    g = Group()
    g.group_name = kw['group_name']
    g.display_name = kw['display_name']
    DBSession.add(g)
    flash(u'Nouveau groupe "%s" créé' % (kw['group_name']))
    redirect('/groups/')
Beispiel #10
0
 def create(self, **kw):
    ''' Add new holiday to DB
    '''
    h = Holiday()
    h.name = kw['name']
    h.day = kw['date'].day
    h.month = kw['date'].month
    DBSession.add(h)
    update_extensions()
    flash(u'Nouveau jour férié "%s" créé' % (kw['name']))
    redirect('/holidays/')
Beispiel #11
0
   def create(self, **kw):
      ''' Add new sound to DB
      '''
      s = Sound()
      s.name = kw['name']
      if kw['type'] == 'moh':
          s.type = 0
      elif kw['type'] == 'ringtone':
          s.type = 2
      else:
          s.type = 1
      s.comment = kw['comment']
      s.language = kw['lang']
      if 'owner_id' in kw.keys():
         s.owner_id = kw['owner_id']
      else:
         s.owner_id = request.identity['user'].user_id

      # Try to insert file in DB: might fail if name already exists
      try:
         DBSession.add(s)
         DBSession.flush()
      except:
         flash(u'Impossible de créer le son (vérifier son nom)', 'error')
         redirect('/moh/')
      
      if kw['record']:
         uphones = DBSession.query(User).get(request.identity['user'].user_id).phone
# XXX     if len(uphones)<1:
#            return dict(status=2)
         chan = uphones[0].sip_id.encode('iso-8859-1')
         filename = '/tmp/record-%s.wav' % chan
         filetype = 'audio/wav'

      else:
         wav = kw['file']
         filetype = wav.type
         filedata = wav.file
         filename = '%s/%d_%s' % (dir_tmp, s.sound_id, wav.filename)
         # Temporarily save uploaded audio file
         out = open(filename, 'w')
         out.write(filedata.read())
         out.close()

      ret = process_file(filename, filetype, s.sound_id, s.type, s.name, kw['lang'])

      if ret:
         flash(ret,'error')
         DBSession.delete(s)
         redirect('/moh/')

      flash(u'"%s" ajouté à votre bibliothèque sonore' % (s.name))
      redirect('/moh/')
Beispiel #12
0
 def setup(self):
     try:
         new_attrs = {}
         new_attrs.update(self.attrs)
         new_attrs.update(self.do_get_dependencies())
         self.obj = self.klass(**new_attrs)
         DBSession.add(self.obj)
         DBSession.flush()
         return self.obj
     except:
         DBSession.rollback()
         raise
Beispiel #13
0
   def create(self, **kw):
      ''' Add new department to DB
      '''
      if DBSession.query(Department).filter(Department.name==kw['name']).all():
         flash(u'Ce service existe déjà, pas créé', 'error')
         redirect('/departments/')

      d = Department()
      d.name = kw['name']
      d.comment = kw['comment']
      DBSession.add(d)
      flash(u'Nouveau service "%s" créé' % (kw['name']))
      redirect('/departments/')
Beispiel #14
0
def process_file(csv, cmp_id):

   # Check file
   filename = csv.filename
   filetype = csv.type
   filedata = csv.file
   log.debug('process_file: <%s> <%s> <%s>' % (filename, filetype, filedata))

   if filetype not in ('text/csv', 'application/csv', 'application/vnd.ms-excel'):
      log.warning('process_file: not CSV : <%s> <%s> <%s>' % (
         filename, filetype, filedata))
      return 0, 0, u'Le fichier doit être de type CSV !'

   # Temporarily save uploaded file
   tmpfn = '/tmp/customer-%d-%d.csv' % (cmp_id, int(time()))
   tmp = open(tmpfn, 'w')
   tmp.write(filedata.read())
   tmp.close()

   # Then read it
   tmp = open(tmpfn, 'U')
   lines = errors = 0
   for l in tmp:
      lines += 1
      if lines==1: continue
      data = line2data(l)
      if len(data)!=10:
         log.warning('process_file: invalid data %s' % data)
         errors += 1
         continue
      c = Customer()
      c.cmp_id = cmp_id
      c.active = True
      c.code = data[0]
      c.gender = data[1]
      c.lastname = data[2]
      c.firstname = data[3]
      c.phone1 = data[4]
      c.phone2 = data[5]
      c.phone3 = data[6]
      c.phone4 = data[7]
      c.phone5 = data[8]
      c.email = data[9]
      c.filename = filename
      DBSession.add(c)
   tmp.close()

   # remove uploaded file
#   unlink(tmp)
   return lines, errors, ''
Beispiel #15
0
    def save_scenario(self, id, **kw):

        if kw.has_key("scenario[]"):
            scenario = kw["scenario[]"]
        else:
            log.error(u"No scenario to save ???")
            scenario = None
            return dict(result=0)  # XXX ?

        positions = {}
        if type(kw["positions[]"]) != type([]):
            kw["positions[]"] = (kw["positions[]"],)
        for p in kw["positions[]"]:
            log.debug(p)
            (context, top, left) = p.split("::")
            positions[context] = (int(float(top)), int(float(left)))

        log.info("save_scenario %s, type %s" % (id, type(scenario)))
        application = DBSession.query(Application).get(int(id))

        # 1. Delete old entries
        DBSession.query(Scenario).filter(Scenario.app_id == int(id)).delete()

        # 2. Create new ones
        if scenario:
            if type(scenario) != type([]):
                scenario = (scenario,)
            for s in scenario:
                sc = Scenario()
                (c, i, e, p, a, m) = s.split("::", 5)
                p = 1 + int(p)
                (sc.comments, sc.app_id, sc.context, sc.extension, sc.step, sc.action, sc.parameters) = (
                    c,
                    id,
                    i,
                    e,
                    p,
                    a,
                    m,
                )
                if p == 1:
                    i = "context_%s" % i
                    log.debug(u"position %s" % i)
                    if i in positions.keys():
                        sc.top = positions[i][0]
                        sc.left = positions[i][1]
                DBSession.add(sc)

        return dict(result=generate_dialplan())
Beispiel #16
0
 def create(self, firstname, lastname, company, phone1, phone2, 
       phone3, email, private=None):
    ''' Add new phonebook entry to DB
    '''
    d = Phonebook()
    d.firstname = firstname
    d.lastname = lastname
    d.company = company
    d.phone1 = phone1
    d.phone2 = phone2
    d.phone3 = phone3
    d.email = email
    d.private = private
    d.user_id = request.identity['user'].user_id
    DBSession.add(d)
    flash(u'Nouveau contact "%s %s" créé' % (firstname, lastname))
    redirect('/phonebook/')
Beispiel #17
0
    def save(self, uid, member, queue, custom1, custom2, send_or_save, subject, customer, number, manager, message, cc):

        if manager != "null":
            m = DBSession.query(Phonebook).filter(Phonebook.code == manager).one()
            to = m.email
            name = m.firstname + " " if m.firstname is not None else u""
            name += m.lastname if m.lastname is not None else u""
            manager = "%s (%s)" % (manager, name)

        else:
            to = name = manager = None

        if send_or_save == "send" and to is not None:
            sender = request.identity["user"].email_address
            email(sender, to, customer, number, name, message, subjects_dict[subject], cc)
            html = u"Message envoyé"

        else:
            html = u"Compte-rendu sauvé"

        r = Report()
        r.user_id = request.identity["user"].user_id
        r.uniqueid = uid
        try:
            u = DBSession.query(User).filter(User.ascii_name == member).first()
            r.member_id = u.user_id
        except:
            log.error('user "%s" not found' % member)
        try:
            r.queue_id = DBSession.query(Queue).filter(Queue.name == queue).one().queue_id
        except:
            log.error('queue "%s" not found' % queue)
        r.custom1 = custom1
        r.custom2 = custom2
        r.subject = subject
        r.customer = customer
        r.manager = manager
        r.message = message
        r.email = to
        r.cc = cc
        r.number = number
        DBSession.add(r)

        return dict(title=html)
Beispiel #18
0
   def auto_record(self, name, channel, queue, uid, custom1, custom2):
      ''' Auto record
      Called from Asterisk dialplan / func_curl
      '''

      log.debug('auto_record: name %s, channel %s, queue %s, uid %s, custom1 %s, custom2 %s' % (
         name, channel, queue, uid, custom1, custom2))
      # Check channel exists, else abort
      for cha in Globals.asterisk.channels.keys():
         if cha.startswith(channel):
            unique_id = Globals.asterisk.channels[cha]['Uniqueid']
            break
      else:
         log.warning('auto_record: no active channel for %s ?' % channel)
         return '1'

      # Poor man's authentification!
      if uid!=unique_id: 
         log.warning('auto_record: unique_id "%s" != "%s"' % (unique_id, uid))
         return '1'

      # Set "recorded" flag on member
      Globals.asterisk.members[name]['Recorded'] = True

      # Insert record info into database
      r = Record()
      r.user_id = -2 # Auto_record pseudo-user!
      r.uniqueid = unique_id
      r.queue_id = DBSession.query(Queue).filter(
            Queue.name==queue).one().queue_id
      try:
         u = DBSession.query(User).filter(User.ascii_name==name).first()
         log.debug(u' * * * %s' % u)
         r.member_id = u.user_id
      except:
         r.member_id = 1
         log.error('user "%s" not found' % name)
      r.custom1 = custom1
      r.custom2 = custom2
      DBSession.add(r)

      return '0'
Beispiel #19
0
   def put(self, name, comment, type, begin, end, file, cmp_id, active=None):

      log.debug('Save "%s"!' % file)

      c = DBSession.query(Campaign).get(cmp_id)
      c.name = name
      c.comment = comment
      c.type = type
      c.active = active
      c.begin = begin
      c.end = end
      DBSession.add(c)
      DBSession.flush()
      log.debug(u'nouvelle campagne %s modifiée' % c.cmp_id)

      if file is not None:
         process_file(file, c.cmp_id)

      flash(u'Campagne "%s" modifiée' % name)
      redirect('/cc_campaign/')
Beispiel #20
0
    def create(self, name, exten, dnis, comment, app_begin=None, app_end=None, active=True, owner_id=None, **kw):
        """ Add new application  and initial dialplan to DB
      """
        a = Application()
        a.name = name
        a.exten = exten
        a.dnis = dnis
        a.active = active
        a.begin = app_begin
        a.end = app_end
        a.comment = comment
        a.created_by = request.identity["user"].user_id
        if owner_id:
            a.owner_id = owner_id
        else:
            a.owner_id = request.identity["user"].user_id

        # Try to insert file in DB: might fail if name already exists
        try:
            DBSession.add(a)
            DBSession.flush()
        except:
            log.error(u"Insert failed %s" % a)
            flash(u"Impossible de créer l'application (vérifier son nom)", "error")
            redirect("/applications/")

        s = Scenario()
        s.app_id = a.app_id
        s.context = "Entrant"
        s.extension = "s"
        s.step = 1
        s.action = 0
        s.parameters = None
        DBSession.add(s)

        flash(u'Nouvelle application "%s" créée' % (name))
        redirect("/applications/")
Beispiel #21
0
def main():
   args = parse_args()
   load_config(args.conf_file)

   if len(DBSession.query(Phone).all())==0:
      create_phones('4643')
      create_phones('4752')

   data = csv.reader(open(args.csv_file,'rb'), delimiter=',')

   try:
      dptm = ''
      for row in data:
   

         uname = unicode(re.sub('\W', '', (row[1][0:2] + row[0]).lower()), 'utf-8')
         dname = unicode(row[0] + ' ' + row[1], 'utf-8')
         num = unicode(row[3].replace(' ',''), 'utf-8')
         fax = unicode(row[4].replace(' ',''), 'utf-8')
         dptm = unicode(row[5], 'utf-8')
         #print ' * * * ', uname, dname, num, dptm

         try:
            p = DBSession.query(Phone).filter(Phone.number==num).one()
         except NoResultFound, e:
            # Nouveau tél ???
            p = Phone()
            p.number = num
            p.department_id = -1
            DBSession.add(p)

         try:
            d = DBSession.query(Department).filter(Department.name==dptm).one()
         except NoResultFound, e:
            # Nouveau département
            d = Department()
            d.name = dptm
            DBSession.add(d)

         u = User()
         u.user_name = uname
         u.display_name = dname
         u.phone = [p]
         u.password = u'n5oBwdpytxdvj~Rz1uum'
         p.department = d
         DBSession.add(u)
         DBSession.add(p)
Beispiel #22
0
   def create(self, **kw):
      ''' Add new queue to DB
      '''
      q = Queue()
      q.name = kw['name']
      q.comment = kw['comment']
      id = int(kw['music'])
      if id!=-1:
         q.music_id = id
      id = int(kw['announce'])
      if id!=-1:
         q.announce_id = id
      q.strategy = kw['strategy']
      q.wrapuptime = int(kw['wrapuptime'])
      q.announce_frequency = int(kw['announce_frequency'])
      q.min_announce_frequency = int(kw['min_announce_frequency'])
      q.announce_holdtime = 1 if kw['announce_holdtime']=='yes' else 0
      q.announce_position = 1 if kw['announce_position']=='yes' else 0
      q.priority = int(kw['priority'])
      q.monitor = True if kw['monitor']=='1' else False
      q.connectdelay = int(kw['connectdelay'])
      q.connecturl = kw['connecturl']
      q.hangupurl = kw['hangupurl']
      q.timeout = kw['timeout']
      DBSession.add(q)

      # Create new group for supervisors
      g = Group()
      g.group_name = u'SV %s' % q.name
      g.display_name = u'Superviseurs groupe d\'appels %s' % q.name
      DBSession.add(g)

      # Create new group for members
      g = Group()
      g.group_name = u'AG %s' % q.name
      g.display_name = u'Agents groupe d\'appels %s' % q.name
      DBSession.add(g)

      # Create Asterisk queue
      asterisk_update_queue(q)
 
      # Add to list of queues
      Globals.asterisk.queues[q.name] = {}
      Globals.manager.send_action({'Action': 'QueueStatus'})

      flash(u'Nouveau groupe d\'appel "%s" créé' % (kw['name']))
      redirect('/queues/')
Beispiel #23
0
   def create(self, **kw):
      ''' Create phone:

      Create provisionning file.
      If an extension is attached to the phone, create exten in Asterisk database.
      If a user is attached to the phone, add callerid to phone; if the user has
      email, add voicemail info to sip.conf and add entry in voicemail.conf
      Create entry in Asterisk sip.conf.
      '''

      # Check exten is not already used
      if kw['exten']:
         log.debug('Check exten ' +  kw['exten'])
         p = DBSession.query(Phone).filter(Phone.exten==kw['exten']).all()
         if len(p):
            return dict(status='bad_exten')
         exten = re.sub(r'\D', '', kw['exten'])

      # Check dnis is not already used
      if kw['dnis']:
         log.debug('Check dnis ' +  kw['dnis'])
         p = DBSession.query(Phone).filter(Phone.dnis==kw['dnis']).all()
         if len(p):
            return dict(status='bad_dnis')
         dnis = re.sub(r'\D', '', kw['dnis'])

      # Generate SIP id and secret
      while True:
         sip_id = ''.join([choice(letters + digits) for i in xrange(8)])
         log.debug('Generate SIP id: ' + sip_id)
         try:
            DBSession.query(Phone).filter(Phone.sip_id==sip_id).one()
         except:
            pwd = ''.join([choice(letters + digits) for i in xrange(8)])
            break

      # Configure phone
      sip_display_name = None
      mwi_subscribe = 0
      need_voicemail_update = False
      sip_server = server_sip
      sip_server2 = server_sip2
      sip_display_name = ''
      mwi_subscribe = 0
      if kw['user_id']!='-9999':
         u = DBSession.query(User).get(kw['user_id'])
         sip_display_name = u.ascii_name
         if u.email_address:
            mwi_subscribe = 1
            need_voicemail_update = True
 
      # Save phone info to database
      log.debug('Save to database ' +  kw['mac'])
      p = Phone()
      p.sip_id = sip_id
      new_phone = None
      if kw['mac']:
         new_phone = session['new_phone']
         p.mac = kw['mac']
         p.vendor = new_phone.vendor
         p.model = new_phone.model
         log.debug('%s %s, session %s', 
                   new_phone.vendor, new_phone.model, new_phone.sid )
      p.password = pwd
      if kw['exten']: p.exten = exten
      if kw['dnis']: p.dnis = dnis
      if kw['dptm_id']!='-9999': p.department_id = kw['dptm_id']
      if kw['user_id']!='-9999': p.user_id = kw['user_id']
      if 'callgroups' in kw:
         p.callgroups = ','.join([str(x) for x in kw['callgroups']])
      if 'pickupgroups' in kw:
         p.pickupgroups = ','.join([str(x) for x in kw['pickupgroups']])
      if 'contexts' in kw:
         p.contexts = ','.join([str(x) for x in kw['contexts']])
      p.hide_from_phonebook = True if kw['hide_from_phonebook']==u'True' else False
      p.fax = True if kw['fax']==u'True' else False
      p.block_cid_in = True if kw['block_cid_in']==u'True' else False
      p.block_cid_out = True if kw['block_cid_out']==u'True' else False
      p.priority = True if kw['priority']==u'True' else False
      p.phonebook_label = kw['phonebook_label'] 
      p.secretary = kw['secretary'] 
      DBSession.add(p)

      asterisk_update_phone(p)

      if new_phone:
         # Create provisionning file if MAC exists

         log.debug('Configure ' +  kw['mac'])
         new_phone.configure( pwd, directory_tftp,
            server_firmware + '/phones/firmware', 
            server_config + '/phones/config', server_ntp,
            server_config, '', '', '',
            sip_server, sip_id, sip_display_name, mwi_subscribe,
            screen_url = server_config, exten=p.exten,
            sip_server2=sip_server2)

         session.save()

      flash(u'Nouveau téléphone "%s" créé' % (kw['exten']))
      return {'status': 'created'}
Beispiel #24
0
   email = uid = None
log.write('uid=%s, email=%s\n' % (uid, email))


f = Fax()
f.type = 1 #  => received fax
f.hyla_id = hyla_id
f.user_id = uid
f.src = src
f.dest = dst
f.filename = pdf
if pdf is not None:
   try:
      fpdf = open('/var/spool/hylafax/astportal/' + pdf)
      f.pdf = fpdf.read()
      fpdf.close
      log.write('PDF imported from file /var/spool/hylafax/astportal/%s\n' % pdf)
   except:
      log.write('ERROR: PDF file /var/spool/hylafax/astportal/%s\n' % pdf)
DBSession.add(f)
DBSession.flush()
transaction.commit() 
log.write('New fax added to database\n')

if email is not None:
   log.write('SENDTO=%s\n' % email)
   print 'SENDTO=%s' % email

log.write('\n' + '<' * 40 + '\n')

Beispiel #25
0
#from astportal2.model import *
from astportal2.model import init_model, DBSession, Phone

config = ConfigParser.ConfigParser({'here': os.getcwd()})
config.read(os.path.join(os.getcwd(), 'development.ini'))
sqlalchemy_url = config.get('app:main', 'sqlalchemy.url')
engine = create_engine(sqlalchemy_url)
init_model(engine)

import csv, sys


numbers = [p.number for p in DBSession.query(Phone.number).all()]

#for i in range(0,400):
#for i in range(500,700):
for i in range(800,900):
    n = '2%03d' % i
    if n not in numbers:
       p = Phone()
       p.number = n
       p.department_id = 28
       try:
          DBSession.add(p)
          DBSession.flush()
       except:
          sys.exit('ERREUR sur poste ' + n)
       print n, 'OK !'
transaction.commit() 
Beispiel #26
0
   c.src = d[3]
   c.dst = d[4]
   c.dcontext = d[5]
   c.channel = d[6]
   c.dstchannel = d[7]
   c.lastapp = d[8]
   c.lastdata = d[9]
   c.duration = d[10]
   c.billsec = d[11]
   c.disposition = d[12]
   c.amaflags = d[13]
   c.accountcode = d[14]
   c.uniqueid = d[15]
   c.userfield = d[16]
   c.ut = d[17]
   c.ht = d[18]
   c.ttc = d[19]
   c.department = d[20]
   c.user= d[21]
   DBSession.add(c)
   try:
      DBSession.flush()
   except:
      err += 1
      print i, d[0], c
      sys.exit(1)

transaction.commit()
print i, 'inserts', err, 'erreurs'