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
Exemple #2
0
 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()
Exemple #3
0
 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,
                             )
Exemple #4
0
 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)
Exemple #5
0
    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