def _query_non_grouped_heb(self, session): if self.geocodedLocation: point = 'POINT(%s %s)' % (self.geocodedLocation.coordinates[1], self.geocodedLocation.coordinates[0]) point = geoalchemy.base.WKTSpatialElement(point, srid=3447) query = session.query( Hebergement.heb_nom.label('heb_nom'), HebergementApp.heb_app_sort_order.label('heb_app_sort_order'), Hebergement.heb_location.distance_sphere(point).label('distance'), Hebergement.heb_cgt_nbre_chmbre.label('heb_cgt_nbre_chmbre'), Hebergement.heb_cgt_cap_min.label('heb_cgt_cap_min'), Hebergement.heb_cgt_cap_max.label('heb_cgt_cap_max'), TypeHebergement.type_heb_id.label('heb_type'), TypeHebergement.type_heb_type.label('heb_type_type'), TypeHebergement.type_heb_code.label('heb_type_code'), Hebergement.heb_code_gdw.label('heb_code_gdw'), Hebergement.heb_pk.label('heb_pk'), LinkHebergementEpis.heb_nombre_epis.label('heb_nombre_epis'), Hebergement.heb_localite.label('heb_localite'), Hebergement.heb_gps_long.label('heb_gps_long'), Hebergement.heb_gps_lat.label('heb_gps_lat'), Hebergement.heb_groupement_pk.label('heb_groupement_pk'), Hebergement.heb_peb_icone.label('heb_peb_icone'), HebergementApp.heb_app_groupement_line_length.label('heb_app_groupement_line_length'), HebergementApp.heb_app_groupement_angle_start.label('heb_app_groupement_angle_start'), ) else: query = session.query( Hebergement.heb_nom.label('heb_nom'), HebergementApp.heb_app_sort_order.label('heb_app_sort_order'), Hebergement.heb_cgt_nbre_chmbre.label('heb_cgt_nbre_chmbre'), Hebergement.heb_cgt_cap_min.label('heb_cgt_cap_min'), Hebergement.heb_cgt_cap_max.label('heb_cgt_cap_max'), TypeHebergement.type_heb_id.label('heb_type'), TypeHebergement.type_heb_type.label('heb_type_type'), TypeHebergement.type_heb_code.label('heb_type_code'), Hebergement.heb_code_gdw.label('heb_code_gdw'), Hebergement.heb_pk.label('heb_pk'), LinkHebergementEpis.heb_nombre_epis.label('heb_nombre_epis'), Hebergement.heb_localite.label('heb_localite'), Hebergement.heb_gps_long.label('heb_gps_long'), Hebergement.heb_gps_lat.label('heb_gps_lat'), Hebergement.heb_groupement_pk.label('heb_groupement_pk'), Hebergement.heb_peb_icone.label('heb_peb_icone'), HebergementApp.heb_app_groupement_line_length.label('heb_app_groupement_line_length'), HebergementApp.heb_app_groupement_angle_start.label('heb_app_groupement_angle_start'), ) query = query.join('proprio').outerjoin('epis').join('type').join('app') query = self.apply_filters(query) return query
def _get_metadata(self, metadata_id): from gites.db import session from gites.db.content.hebergement.linkhebergementmetadata import LinkHebergementMetadata session = session() query = session.query(LinkHebergementMetadata.link_met_value) query = query.options(FromCache('gdw')) query = query.join('hebergement').join('metadata_info') query = query.filter(Hebergement.heb_pk == self.context.heb_pk) return query.filter(Metadata.met_id == metadata_id).scalar()
def __str__(self): if isinstance(self.context, tuple): if hasattr(self.context, 'heb_pk'): context = Hebergement.first(heb_pk=self.context.heb_pk) else: return '' else: context = aq_inner(self.context) portal = api.portal.get() container = portal.hebergement from gites.db import session session = session() commune = session.query(Commune.com_id).options(FromCache('gdw')).filter_by(com_pk=context.heb_com_fk).first() language = self.request.get('LANGUAGE', 'en') typeHeb = session.query(TypeHebergement).options(FromCache('gdw')).filter_by(type_heb_pk=context.heb_typeheb_fk).first() hebId = context.heb_id return "%s/%s/%s/%s" % (container.absolute_url(), #self.getHebType(self.context.heb_typeheb_fk, language), typeHeb.getId(language), commune.com_id, hebId, )
def getHebType(self, typeheb, language): from gites.db import session session = session() typeHeb = session.query(TypeHebergement).filter_by(type_heb_pk=typeheb).first() return typeHeb.getId(language)
def _query_grouped_heb(self, session): if self.geocodedLocation: point = 'POINT(%s %s)' % (self.geocodedLocation.coordinates[1], self.geocodedLocation.coordinates[0]) point = geoalchemy.base.WKTSpatialElement(point, srid=3447) query = session.query( sa.func.min(Hebergement.heb_nom).label('heb_nom'), sa.func.min(HebergementApp.heb_app_sort_order).label('heb_app_sort_order'), sa.func.avg(Hebergement.heb_location.distance_sphere(point)).label('distance'), sa.func.sum(Hebergement.heb_cgt_nbre_chmbre).label('heb_cgt_nbre_chmbre'), sa.func.sum(Hebergement.heb_cgt_cap_min).label('heb_cgt_cap_min'), sa.func.sum(Hebergement.heb_cgt_cap_max).label('heb_cgt_cap_max'), sa.literal_column("'gite-groupes'").label('heb_type'), sa.func.min(TypeHebergement.type_heb_type).label('heb_type_type'), sa.func.min(TypeHebergement.type_heb_code).label('heb_type_code'), sa.func.min(Hebergement.heb_code_gdw).label('heb_code_gdw'), sa.func.min(Hebergement.heb_pk).label('heb_pk'), sa.func.max(LinkHebergementEpis.heb_nombre_epis).label('heb_nombre_epis'), sa.func.min(Hebergement.heb_localite).label('heb_localite'), sa.func.min(Hebergement.heb_gps_long).label('heb_gps_long'), sa.func.min(Hebergement.heb_gps_lat).label('heb_gps_lat'), sa.func.min(Hebergement.heb_groupement_pk).label('heb_groupement_pk'), sa.func.min(HebergementApp.heb_app_groupement_line_length).label('heb_app_groupement_line_length'), sa.func.min(HebergementApp.heb_app_groupement_angle_start).label('heb_app_groupement_angle_start'), ) else: query = session.query( sa.func.min(Hebergement.heb_nom).label('heb_nom'), sa.func.min(HebergementApp.heb_app_sort_order).label('heb_app_sort_order'), sa.func.sum(Hebergement.heb_cgt_nbre_chmbre).label('heb_cgt_nbre_chmbre'), sa.func.sum(Hebergement.heb_cgt_cap_min).label('heb_cgt_cap_min'), sa.func.sum(Hebergement.heb_cgt_cap_max).label('heb_cgt_cap_max'), sa.literal_column("'gite-groupes'").label('heb_type'), sa.func.min(TypeHebergement.type_heb_type).label('heb_type_type'), sa.func.min(TypeHebergement.type_heb_code).label('heb_type_code'), sa.func.min(Hebergement.heb_code_gdw).label('heb_code_gdw'), sa.func.min(Hebergement.heb_pk).label('heb_pk'), sa.func.max(LinkHebergementEpis.heb_nombre_epis).label('heb_nombre_epis'), sa.func.min(Hebergement.heb_localite).label('heb_localite'), sa.func.min(Hebergement.heb_gps_long).label('heb_gps_long'), sa.func.min(Hebergement.heb_gps_lat).label('heb_gps_lat'), sa.func.min(Hebergement.heb_groupement_pk).label('heb_groupement_pk'), sa.func.min(HebergementApp.heb_app_groupement_line_length).label('heb_app_groupement_line_length'), sa.func.min(HebergementApp.heb_app_groupement_angle_start).label('heb_app_groupement_angle_start'), ) query = query.join('proprio').outerjoin('epis').join('type').join('app') query = query.filter(Hebergement.heb_groupement_pk != None) query = self.apply_filters(query, group=True) #XXX query = query.group_by(Hebergement.heb_groupement_pk) capacity = self.data.get('capacityMin') capacity_filters = self.filter_capacity_in_group(capacity, query) if capacity_filters: query = query.having(sa.and_(capacity_filters, sa.func.count() > 1)) else: query = query.having(sa.func.count() > 1) return query