Skip to content
Snippets Groups Projects
Commit a8c9ce39 authored by Allen Gilliland's avatar Allen Gilliland
Browse files

EOL the Reserve custom list & detail pages.

parent 077159f4
No related branches found
No related tags found
No related merge requests found
......@@ -22,7 +22,6 @@ var Corvus = angular.module('corvus', [
'corvus.dashboard',
'corvus.explore',
'corvus.home',
'corvus.reserve', // this is a short term hack
'corvus.user',
'corvus.setup',
'corvusadmin.databases',
......
<div class="col col-md-9">
<div class="row">
<div class="clearfix full-width">
<div class="p4 float-left">
<img class="EntityImage EntityImage--large" ng-src="{{user.profileImage.secureBaseUrl}}" ng-if="user.profileImage.secureBaseUrl">
<img src="" ng-if="!user.profileImage.secureBaseUrl" />
</div>
<div class="mt3 float-left">
<h2>
<a class="link" href="/reserve/user/{{user.id}}">{{user.firstName}} {{user.lastName}}</a>
</h2>
<div class="inline-block">{{user.role}}</div>
<div class="inline-block ml2">Member since: {{user.createdAt | date : 'MMMM d, y'}}</div>
</div>
<div class="float-right m4">
<a class="Button mt1" href="mailto:data@expa.com?subject=User%20{{user.firstName}}%20{{user.lastName}}">Share</a>
</div>
</div>
</div>
<div class="row">
<div class="mt3 px3">
<h4>Bookings</h4>
</div>
<div class="EntityTableWrapper">
<table class="EntityTable Table">
<thead>
<tr>
<th ng-click="orderByField='venue'; reverseSort = !reverseSort" ng-class="{'ColumnSelected' : orderByField == 'venue'}">Venue:
<span ng-if="orderByField == 'venue'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='guests'; reverseSort = !reverseSort" ng-class="{'ColumnSelected' : orderByField == 'guests'}">Guests:
<span ng-if="orderByField == 'guests'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='overage'; reverseSort = !reverseSort" ng-class="{'ColumnSelected' : orderByField == 'overage'}">Overage:
<span ng-if="orderByField == 'overage'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='rating'; reverseSort = !reverseSort" ng-class="{'ColumnSelected' : orderByField == 'rating'}">Rating:
<span ng-if="orderByField == 'rating'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='createdAt'; reverseSort = !reverseSort" ng-class="{'ColumnSelected' : orderByField == 'createdAt'}">Created:
<span ng-if="orderByField == 'createdAt'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='updatedAt'; reverseSort = !reverseSort" ng-class="{'ColumnSelected' : orderByField == 'updatedAt'}">Updated:
<span ng-if="orderByField == 'updatedAt'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th></th>
</tr>
</thead>
<tfoot>
</tfoot>
<tbody>
<tr ng-repeat="booking in bookings | orderBy:orderByField:reverseSort">
<td><a href="/reserve/venue/{{booking.id}}">{{booking.name}}</a></td>
<td>{{booking.guests}}</td>
<td>{{booking.overage}}</td>
<td>{{booking.rating}}</td>
<td>{{booking.createdAt | date : 'MMM d, y, hh:mm a'}}</td>
<td>{{booking.updatedAt | date : 'MMM d, y, hh:mm a'}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="col col-md-3">
<div class="row">
<div class="p3">
<h3 class="mt2">{{user.firstName}} {{user.lastName}}'s Metrics</h3>
</div>
<ol class="px2 py2">
<li class="Metric mb2 shadowed">
<div class="px3 py1">
<div class="Metric-value">{{user.rating}}</div>
<div class="Metric-title mb2">Rating</div>
</div>
</li>
<li class="Metric mb2 shadowed">
<div class="px3 py1">
<div class="Metric-value">{{user.avg_num_bookings_per_week}}</div>
<div class="Metric-title mb2">Average bookings per week</div>
</div>
</li>
<li class="Metric mb2 shadowed">
<div class="px3 py1">
<div class="Metric-value">{{user.total_bookings}}</div>
<div class="Metric-title mb2">Total Bookings</div>
</div>
</li>
<li class="Metric mb2 shadowed">
<div class="px3 py1">
<div class="Metric-value">{{user.percent_cancelled}}</div>
<div class="Metric-title mb2">Percent Cancelled</div>
</div>
</li>
<li class="Metric mb2 shadowed">
<div class="px3 py1">
<div class="Metric-value">{{user.avg_time_to_booking_min}}</div>
<div class="Metric-title mb2">Avg. Time to Booking (min)</div>
</div>
</li>
</ol>
</div>
</div>
<div class="col col-md-9">
<div class="row">
<div class="p3 border-bottom">
<div class="float-right">
<input class="input" type="text" ng-model="searchFilter" placeholder="Search users ...">
</div>
<h3 class="text-brand">Users</h2>
</div>
<div ng-if="!users">
<h3>Loading ...</h3>
</div>
<div class="EntityTableWrapper">
<table class="EntityTable Table">
<thead>
<tr>
<th ng-click="orderByField='firstName'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'firstName'}">Name
<span ng-if="orderByField == 'firstName'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='avg_num_bookings_per_week'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'avg_num_bookings_per_week'}">Avg. Num Bookings / wk
<span ng-if="orderByField == 'avg_num_bookings_per_week'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='total_bookings'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'total_bookings'}">Total Bookings
<span ng-if="orderByField == 'total_bookings'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='percent_cancelled'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'percent_cancelled'}">Percent Cancelled
<span ng-if="orderByField == 'percent_cancelled'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='avg_time_to_booking_min'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'avg_time_to_booking_min'}">Avg. Time to Booking (min)
<span ng-if="orderByField == 'avg_time_to_booking_min'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='avg_num_days_advanced_booking'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'avg_num_days_advanced_booking'}">Avg. Days to Booking
<span ng-if="orderByField == 'avg_num_days_advanced_booking'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='pct_containers_accepted'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'pct_containers_accepted'}">% Containers Accepted
<span ng-if="orderByField == 'pct_containers_accepted'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='rating'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'rating'}">Rating
<span ng-if="orderByField == 'rating'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='createdAt'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'createdAt'}">Created
<span ng-if="orderByField == 'createdAt'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
</tr>
</thead>
<tfoot></tfoot>
<tbody>
<tr ng-repeat="user in users | orderBy:orderByField:reverseSort | filter:searchFilter">
<td class="clearfix">
<img class="EntityImage EntityImage--small float-left hide lg-show" src="{{user.profileImage.secureBaseUrl}}">
<a class="EntityName float-left ml1 link" href="/reserve/user/{{user.user_id}}">{{user.firstName}} {{user.lastName}}</a>
</td>
<td>{{user.avg_num_bookings_per_week}}</td>
<td>{{user.total_bookings}}</td>
<td>{{user.percent_cancelled}}</td>
<td>{{user.avg_time_to_booking_min}}</td>
<td>{{user.avg_num_days_advanced_booking}}</td>
<td>{{user.pct_containers_accepted}}</td>
<td>{{user.rating}}</td>
<td>{{user.createdAt | date : 'MMMM d, y '}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="col col-md-3">
<div class="row">
<div class="p3 border-bottom">
<h3>User metrics</h3>
</div>
<ol class="px2 py2">
<li class="Metric mb2 shadowed">
<div class="px3 py1">
<div class="Metric-value">25</div>
<div class="Metric-title mb2">Average bookings per week</div>
</div>
</li>
<li class="Metric mb2 shadowed">
<div class="px3 py1">
<div class="Metric-value">3.75</div>
<div class="Metric-title mb2">Average rating</div>
</div>
</li>
</ol>
</div>
</div>
<div class="col col-md-9">
<div class="row">
<div class="clearfix full-width">
<div class="p4 float-left">
<img class="EntityImage EntityImage--large" ng-src="{{venue.avatar}}" ng-if="venue.avatar">
<img src="" ng-if="!venue.avatar" />
</div>
<div class="mt3 float-left">
<h2>
<a class="link" href="/reserve/venue/{{venue.id}}">{{venue.name}}</a> <span ng-if="venue.is_test_account">[test account]</span>
</h2>
<div class="inline-block">{{venue.locality}}</div>
<div class="inline-block ml2">Member since: {{venue.createdAt | date : 'MMMM d, y'}}</div>
</div>
<div class="float-right m4">
<a class="Button mt1" href="mailto:data@expa.com?subject=Venue%20{{venue.name}}">Share</a>
</div>
</div>
</div>
<div class="row">
<div class="mt3 px3">
<h4>Bookings</h4>
</div>
<div class="EntityTableWrapper">
<table class="EntityTable Table">
<thead>
<tr>
<th ng-click="orderByField='name'; reverseSort = !reverseSort" ng-class="{'ColumnSelected' : orderByField == 'name'}">By:
<span ng-if="orderByField == 'name'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='guests'; reverseSort = !reverseSort" ng-class="{'ColumnSelected' : orderByField == 'guests'}">Guests:
<span ng-if="orderByField == 'guests'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='overage'; reverseSort = !reverseSort" ng-class="{'ColumnSelected' : orderByField == 'overage'}">Overage:
<span ng-if="orderByField == 'overage'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='rating'; reverseSort = !reverseSort" ng-class="{'ColumnSelected' : orderByField == 'rating'}">Rating:
<span ng-if="orderByField == 'rating'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='createdAt'; reverseSort = !reverseSort" ng-class="{'ColumnSelected' : orderByField == 'createdAt'}">Created:
<span ng-if="orderByField == 'createdAt'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='updatedAt'; reverseSort = !reverseSort" ng-class="{'ColumnSelected' : orderByField == 'updatedAt'}">Updated:
<span ng-if="orderByField == 'updatedAt'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th></th>
</tr>
</thead>
<tfoot>
</tfoot>
<tbody>
<tr ng-repeat="booking in bookings | orderBy:orderByField:reverseSort">
<td>
<span class="EntityName"><a href="/reserve/user/{{booking.user_id}}">{{booking.firstName}} {{booking.lastName}}</a></span>
</td>
<td>{{booking.guests}}</td>
<td>{{booking.overage}}</td>
<td>{{booking.rating}}</td>
<td>{{booking.createdAt | date : 'MMM d, y, hh:mm a'}}</td>
<td>{{booking.updatedAt | date : 'MMM d, y, hh:mm a'}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="col col-md-3">
<div class="row">
<div class="p3">
<h3 class="mt2">{{venue.name}}'s Metrics</h3>
</div>
<ol class="px2 py2">
<li class="Metric mb2 shadowed">
<div class="px3 py1">
<div class="Metric-value">{{venue.rating}}</div>
<div class="Metric-title mb2">Rating</div>
</div>
</li>
<li class="Metric mb2 shadowed">
<div class="px3 py1">
<div class="Metric-value">{{venue.avg_num_bookings_per_week}}</div>
<div class="Metric-title mb2">Average bookings per week</div>
</div>
</li>
<li class="Metric mb2 shadowed">
<div class="px3 py1">
<div class="Metric-value">{{venue.total_bookings}}</div>
<div class="Metric-title mb2">Total Bookings</div>
</div>
</li>
</ol>
</div>
</div>
<div class="col col-md-9">
<div class="row">
<div class="p3 border-bottom">
<div class="float-right">
<input class="input" type="text" ng-model="searchFilter" placeholder="Search venues ...">
</div>
<h3 class="text-brand">Venues</h2>
</div>
<div ng-if="!venues">
<h3>Loading ...</h3>
</div>
<div class="EntityTableWrapper">
<table class="EntityTable Table">
<thead>
<tr>
<th ng-click="orderByField='name'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'name'}">Name
<span ng-if="orderByField == 'name'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='locality'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'locality'}">City
<span ng-if="orderByField == 'locality'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='avg_num_bookings_per_week'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'avg_num_bookings_per_week'}">Avg. Bookings Per Week
<span ng-if="orderByField == 'avg_num_bookings_per_week'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='total_bookings'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'total_bookings'}">Total Bookings
<span ng-if="orderByField == 'total_bookings'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='percent_cancelled'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'percent_cancelled'}">Percent Cancelled
<span ng-if="orderByField == 'percent_cancelled'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='rating'; reverseSort = !reverseSort" ng-class="{'EntityTable--columnSelected': orderByField == 'rating'}">Rating
<span ng-if="orderByField == 'rating'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
<th ng-click="orderByField='createdAt'; reverseSort = !reverseSort" >Created:
<span ng-if="orderByField == 'createdAt'">
<span ng-show="!reverseSort">^</span>
<span ng-show="reverseSort">v</span>
</span>
</th>
</tr>
</thead>
<tfoot></tfoot>
<tbody>
<tr ng-repeat="venue in venues | orderBy:orderByField:reverseSort | filter:searchFilter">
<td class="clearfix">
<img class="EntityImage EntityImage--small float-left hide lg-show" src="">
<a class="EntityName float-left ml1 link" href="/reserve/venue/{{venue.id}}">{{venue.name}}</a>
</td>
<td>{{venue.locality}}</td>
<td>{{venue.avg_num_bookings_per_week}}</td>
<td>{{venue.total_bookings}}</td>
<td>{{venue.percent_cancelled}}</td>
<td>{{venue.rating}}</td>
<td>{{venue.createdAt | date : 'MMMM d, y '}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="col col-md-3">
<div class="row">
<div class="p3 border-bottom">
<h3>Venue metrics</h3>
</div>
<ol class="px2 py2">
<li class="Metric mb2 shadowed">
<div class="px3 py1">
<div class="Metric-value">25</div>
<div class="Metric-title mb2">Average bookings per week</div>
</div>
</li>
<li class="Metric mb2 shadowed">
<div class="px3 py1">
<div class="Metric-value">3.75</div>
<div class="Metric-title mb2">Average rating</div>
</div>
</li>
</ol>
</div>
</div>
'use strict';
var ReserveControllers = angular.module('corvus.reserve.controllers', []);
ReserveControllers.controller('VenueList', ['$scope', 'Metabase', 'Reserve',
function($scope, Metabase, Reserve){
$scope.orderByField = "name";
$scope.reverseSort = false;
Reserve.queryInfo().then(function(queryInfo){
$scope.search = function(){
Metabase.dataset({
'database': queryInfo.database,
'type': 'query',
'query': {
'source_table': queryInfo.venue_table,
'aggregation': ['rows'],
'breakout': [null],
'filter': [null, null],
'limit': null
}
}, function(queryResponse){
$scope.venues = Reserve.convertToObjects(queryResponse.data);
}, function(error){
console.log(error);
});
};
$scope.search();
});
}
]);
ReserveControllers.controller('VenueDetail', ['$scope', '$routeParams', 'Metabase', 'Reserve',
function($scope, $routeParams, Metabase, Reserve) {
$scope.orderByField = "user";
$scope.reverseSort = false;
Reserve.queryInfo().then(function(queryInfo){
Metabase.dataset({
'database': queryInfo.database,
'type': 'query',
'query': {
'source_table': queryInfo.venue_table,
'aggregation': ['rows'],
'breakout': [null],
'filter': ['=', queryInfo.venue_id_field, $routeParams.venueId]
}
}, function(venueResponse){
$scope.venue = Reserve.convertToObjects(venueResponse.data)[0];
var dataset_query = {
'database': queryInfo.database,
'type': 'query',
'query': {
'fields':[
queryInfo.user_firstName_field,
queryInfo.user_lastName_field,
queryInfo.user_id_field,
queryInfo.booking_guests_field,
queryInfo.booking_overage_field,
queryInfo.booking_rating_field,
queryInfo.booking_createdAt_field,
queryInfo.booking_updatedAt_field
],
'from':[{
'table': queryInfo.user_table
}, {
'table': queryInfo.booking_table,
'join_type': 'inner',
'conditions':[
{
'src_field': queryInfo.user_id_field,
'dest_field': queryInfo.booking_user_fk
}
]
}],
'aggregation': ['rows'],
'breakout': [null],
'filter': ['=', queryInfo.booking_venue_fk, $routeParams.venueId]
}
};
Metabase.dataset(dataset_query,
function(bookingsResponse){
$scope.bookings = Reserve.convertToObjects(bookingsResponse.data);
}, function(error){
console.log(error);
});
}, function(error){
console.log(error);
});
});
}
]);
ReserveControllers.controller('UserList', ['$scope', 'Metabase', 'Reserve',
function($scope, Metabase, Reserve){
$scope.orderByField = "firstName";
$scope.reverseSort = false;
Reserve.queryInfo().then(function(queryInfo){
$scope.search = function(){
Metabase.dataset({
'database': queryInfo.database,
'type': 'query',
'query': {
'source_table': queryInfo.user_table,
'aggregation': ['rows'],
'breakout': [null],
'filter': [null, null],
'limit': null
}
}, function(queryResponse){
$scope.users = Reserve.convertToObjects(queryResponse.data);
}, function(error){
console.log(error);
});
};
$scope.search();
});
}
]);
ReserveControllers.controller('UserDetail', ['$scope', '$routeParams', 'Metabase', 'Reserve',
function($scope, $routeParams, Metabase, Reserve) {
$scope.orderByField = "user";
$scope.reverseSort = false;
Reserve.queryInfo().then(function(queryInfo){
Metabase.dataset({
'database': queryInfo.database,
'type': 'query',
'query': {
'source_table': queryInfo.user_table,
'aggregation': ['rows'],
'breakout': [null],
'filter': ['=', queryInfo.user_id_field, $routeParams.userId]
}
}, function(userResponse){
$scope.user = Reserve.convertToObjects(userResponse.data)[0];
Metabase.dataset({
'database': queryInfo.database,
'type': 'query',
'query': {
'fields':[
queryInfo.venue_name_field,
queryInfo.venue_id_field,
queryInfo.booking_guests_field,
queryInfo.booking_overage_field,
queryInfo.booking_rating_field,
queryInfo.booking_createdAt_field,
queryInfo.booking_updatedAt_field
],
'from':[{
'table': queryInfo.venue_table
}, {
'table': queryInfo.booking_table,
'join_type': 'inner',
'conditions':[
{
'src_field': queryInfo.venue_id_field,
'dest_field': queryInfo.booking_venue_fk
}
]
}],
'aggregation': ['rows'],
'breakout': [null],
'filter': ['=', queryInfo.booking_user_fk, $routeParams.userId]
}
}, function(bookingsResponse){
$scope.bookings = Reserve.convertToObjects(bookingsResponse.data);
}, function(error){
console.log(error);
});
}, function(error){
console.log(error);
});
});
}
]);
'use strict';
var Reserve = angular.module('corvus.reserve', [
'ngRoute',
'ngCookies',
'corvus.filters',
'corvus.directives',
'corvus.services',
'corvus.metabase.services',
'corvus.reserve.controllers',
'corvus.reserve.services'
]);
Reserve.config(['$routeProvider', function ($routeProvider) {
$routeProvider.when('/reserve/venue/', {templateUrl: '/app/reserve/partials/venue_list.html', controller: 'VenueList'});
$routeProvider.when('/reserve/venue/:venueId', {templateUrl: '/app/reserve/partials/venue_detail.html', controller: 'VenueDetail'});
$routeProvider.when('/reserve/user/', {templateUrl: '/app/reserve/partials/user_list.html', controller: 'UserList'});
$routeProvider.when('/reserve/user/:userId', {templateUrl: '/app/reserve/partials/user_detail.html', controller: 'UserDetail'});
}]);
'use strict';
/*jslint browser:true */
/*global _*/
/* Services */
var ReserveServices = angular.module('corvus.reserve.services', []);
ReserveServices.service('Reserve', ['$resource', '$q', 'Metabase',
function($resource, $q, Metabase) {
var RESERVE_DB_NAME = "reserve";
var VENUE_TABLE_NAME = "rh_reserve_venue_entity";
var VENUE_ID_FIELD_NAME = "id";
var VENUE_NAME_FIELD_NAME = "name";
var BOOKING_TABLE_NAME = "booking";
var BOOKING_ID_FIELD_NAME = "id";
var BOOKING_VENUE_FK_NAME = "venue";
var BOOKING_USER_FK_NAME = "user";
var BOOKING_GUESTS_FIELD_NAME = "guests";
var BOOKING_OVERAGE_FIELD_NAME = "overage";
var BOOKING_RATING_FIELD_NAME = "rating";
var BOOKING_CREATED_AT_FIELD_NAME = "createdAt";
var BOOKING_UPDATED_AT_FIELD_NAME = "updatedAt";
var USER_TABLE_NAME = "rh_reserve_user_entity";
var USER_ID_FIELD_NAME = "user_id";
var USER_FIRST_NAME_FIELD_NAME = "firstName";
var USER_LAST_NAME_FIELD_NAME = "lastName";
this.queryInfo = function() {
var deferred = $q.defer();
var queryInfo = {};
Metabase.db_list(function(dbs){
dbs.forEach(function(db){
if(db.name == RESERVE_DB_NAME){
queryInfo.database = db.id;
Metabase.db_tables({
dbId:db.id
}, function(tables){
tables.forEach(function(table){
if(table.name == VENUE_TABLE_NAME){
queryInfo.venue_table = table.id;
}else if(table.name == BOOKING_TABLE_NAME){
queryInfo.booking_table = table.id;
}else if(table.name == USER_TABLE_NAME){
queryInfo.user_table = table.id;
}
});
Metabase.table_fields({
tableId: queryInfo.venue_table
}, function(venueTableFields){
venueTableFields.forEach(function(field){
if(field.name == VENUE_ID_FIELD_NAME){
queryInfo.venue_id_field = field.id;
}else if(field.name == VENUE_NAME_FIELD_NAME){
queryInfo.venue_name_field = field.id;
}
});
Metabase.table_fields({
tableId: queryInfo.booking_table
}, function(bookingTableFields){
bookingTableFields.forEach(function(field){
if(field.name == BOOKING_ID_FIELD_NAME){
queryInfo.booking_id_field = field.id;
}else if(field.name == BOOKING_VENUE_FK_NAME){
queryInfo.booking_venue_fk = field.id;
}else if(field.name == BOOKING_USER_FK_NAME){
queryInfo.booking_user_fk = field.id;
}else if(field.name == BOOKING_GUESTS_FIELD_NAME){
queryInfo.booking_guests_field = field.id;
}else if(field.name == BOOKING_OVERAGE_FIELD_NAME){
queryInfo.booking_overage_field = field.id;
}else if(field.name == BOOKING_RATING_FIELD_NAME){
queryInfo.booking_rating_field = field.id;
}else if(field.name == BOOKING_CREATED_AT_FIELD_NAME){
queryInfo.booking_createdAt_field = field.id;
}else if(field.name == BOOKING_UPDATED_AT_FIELD_NAME){
queryInfo.booking_updatedAt_field = field.id;
}
});
Metabase.table_fields({
tableId: queryInfo.user_table
}, function(userTableFields){
userTableFields.forEach(function(field){
if(field.name == USER_ID_FIELD_NAME){
queryInfo.user_id_field = field.id;
deferred.resolve(queryInfo);
}else if(field.name == USER_FIRST_NAME_FIELD_NAME){
queryInfo.user_firstName_field = field.id;
}else if(field.name == USER_LAST_NAME_FIELD_NAME){
queryInfo.user_lastName_field = field.id;
}
});
});
});
});
});
}
});
});
return deferred.promise;
};
this.convertToObjects = function (data) {
var rows = [];
for (var i = 0; i < data.rows.length; i++) {
var row = {};
for (var j = 0; j < data.cols.length; j++) {
var coldef = data.cols[j];
row[coldef.name] = data.rows[i][j];
}
rows.push(row);
}
return rows;
};
}
]);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment