def getNode(self, id, dbsession): AddressBookNode = namedtuple('AddressBookNode', 'name, contact') AddressBookContact = namedtuple('AddressBookContact', 'email, phone_numbers') AddressBookPhone = namedtuple('AddressBookPhone', 'id, phone_type, number') for dbid, intid in self._ids_empresas.items(): if intid == id: id_empresa = dbid empresa = dbsession.query(self.empresas.columns.Empresa).filter(self.empresas.columns.IDEmpresa == id_empresa).one() return AddressBookNode(empresa, None) for dbid, intid in self._ids_contactos.items(): if intid == id: id_empresa = dbid contact = dbsession.query(self.contacts).filter(self.contacts.columns.IDContacto == id_empresa).one() phones = [] for phone in dbsession.query(self.telefonos, self.direcciones.columns.CodCiudad, self.direcciones.columns.CodPais).filter(and_(self.telefonos.columns.IDref2 == id_empresa, self.direcciones.columns.RecID == self.telefonos.columns.IDDireccion)).all(): id_phone = self._phone_ids.get(phone.RecID) if id_phone is None: self._last_id = self._last_id +1 id_phone = self._last_id self._phone_ids[phone.RecID] = self._last_id phones.append(AddressBookPhone(id_phone, phone.Tipo, '%s %s %s' % (phone.CodPais, phone.CodCiudad, phone.numero))) email = '' try: email = dbsession.query(self.emails.columns.Direccion).filter(self.emails.columns.IDref == id_empresa).first()[0] except: pass c = AddressBookContact(email, phones) return AddressBookNode('%s %s'% (contact.Nombre, contact.Apellido), c)
def public(self,dbsession): ''' Return proper addressbook format (json) ''' entries = AddressBookNode(0, 'Public Address Book', []) for empresa in dbsession.query(self.empresas).filter(self.empresas.columns.Calificacion=='DIRECTORIO').order_by(asc(self.empresas.columns.Empresa)).all(): id_empresa = self._ids_empresas.get(empresa.IDEmpresa) if id_empresa is None: self._last_id = self._last_id +1 id_empresa = self._last_id self._ids_empresas[empresa.IDEmpresa] = self._last_id contacts = [] for c in dbsession.query(self.contacts).filter(and_(empresa.IDEmpresa == self.contacts.columns.IDEmpresa, self.contacts.columns.Bloqueado == 0)).all(): print empresa.Empresa, c.Nombre, c.Apellido id_contacto = self._ids_contactos.get(c.IDContacto) if id_contacto is None: self._last_id = self._last_id +1 id_contacto = self._last_id self._ids_contactos[c.IDContacto] = self._last_id phones = [] email = '' try: email = dbsession.query(self.emails.columns.Direccion).filter(self.emails.columns.IDref == c.IDContacto).first()[0] except: pass contactObj = AddressBookContact(id_contacto, '%s %s' % (c.Nombre, c.Apellido), email, phones, id_contacto) for phone in dbsession.query(self.telefonos, self.direcciones.columns.CodCiudad, self.direcciones.columns.CodPais).filter(and_(self.telefonos.columns.IDref2 == c.IDContacto, self.direcciones.columns.RecID == self.telefonos.columns.IDDireccion)).all(): id_phone = self._phone_ids.get(phone.RecID) if id_phone is None: self._last_id = self._last_id +1 id_phone = self._last_id self._phone_ids[phone.RecID] = self._last_id print c.Nombre ,'%s %s %s' % (phone.CodPais, phone.CodCiudad, phone.numero) phones.append(AddressBookPhone(id_phone, phone.Tipo, '%s %s %s' % (phone.CodPais, phone.CodCiudad, phone.numero), contactObj, '%s %s %s' % (phone.CodPais, phone.CodCiudad, phone.numero))) contactObj.phone_numbers = phones contacts.append(contactObj) entries.children.append(AddressBookNode(id_empresa, empresa.Empresa, contacts)) return entries