1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-02-19 13:54:25 +01:00

basic interface structure for space management

This commit is contained in:
Sylvain 2017-02-13 17:00:27 +01:00
parent c254cad8e5
commit 40952600e7
8 changed files with 163 additions and 0 deletions

View File

@ -28,6 +28,11 @@ Application.Controllers.controller "MainNavController", ["$scope", "$location",
linkText: 'events_registrations'
linkIcon: 'tags'
}
{
state: 'app.public.spaces_list'
linkText: 'reserve_a_space'
linkIcon: 'rocket'
}
{
state: 'app.public.calendar'
linkText: 'public_calendar'
@ -86,6 +91,11 @@ Application.Controllers.controller "MainNavController", ["$scope", "$location",
linkText: 'manage_the_machines'
linkIcon: 'cogs'
}
{
state: 'app.public.spaces_list'
linkText: 'manage_the_spaces'
linkIcon: 'rocket'
}
{
state: 'app.admin.project_elements'
linkText: 'manage_the_projects_elements'

View File

@ -0,0 +1,45 @@
##
# Manages the transition when a user clicks on the reservation button.
# According to the status of user currently logged into the system, redirect him to the reservation page,
# or display a modal window asking him to login or to create an account.
# @param space {{id:number}} An object containg the id of the space to book,
# the object will be completed before the fonction returns.
# @param e {Object} see https://docs.angularjs.org/guide/expression#-event-
##
_reserveSpace = (space, e) ->
_this = this
e.preventDefault()
e.stopPropagation()
# if a user is authenticated ...
if _this.$scope.isAuthenticated()
_this.$state.go('app.logged.space_reserve', { id: space.id })
# if the user is not logged, open the login modal window
else
_this.$scope.login()
##
# Controller used in the public listing page, allowing everyone to see the list of spaces
##
Application.Controllers.controller "SpacesController", ["$scope", "$state", 'spacesPromise', ($scope, $state, spacesPromise) ->
## Retrieve the list of machines
$scope.spaces = spacesPromise
##
# Redirect the user to the space details page
##
$scope.showSpace = (space) ->
$state.go('app.public.space_show', { id: space.slug })
##
# Callback to book a reservation for the current machine
##
$scope.reserveSpace = _reserveSpace.bind
$scope: $scope
$state: $state
]

View File

@ -388,6 +388,26 @@ angular.module('application.router', ['ui.router']).
translations: [ 'Translations', (Translations) ->
Translations.query(['app.admin.machines_edit', 'app.shared.machine']).$promise
]
# spaces
.state 'app.public.spaces_list',
url: '/spaces'
views:
'main@':
templateUrl: '<%= asset_path "spaces/index.html.erb" %>'
controller: 'SpacesController'
resolve:
spacesPromise: ['Space', (Space)->
Space.query().$promise
]
translations: [ 'Translations', (Translations) ->
Translations.query(['app.public.spaces_list']).$promise
]
.state 'app.logged.space_reserve',
url: '/spaces/:id/reserve'
.state 'app.admin.space_new',
url: '/spaces/new'
# trainings
.state 'app.public.trainings_list',
url: '/trainings'

View File

@ -0,0 +1,8 @@
'use strict'
Application.Services.factory 'Space', ["$resource", ($resource)->
$resource "/api/spaces/:id",
{id: "@id"},
update:
method: 'PUT'
]

View File

@ -0,0 +1,63 @@
<section class="heading b-b">
<div class="row no-gutter">
<div class="col-xs-2 col-sm-2 col-md-1">
<section class="heading-btn">
<a href="#" ng-click="backPrevLocation($event)"><i class="fa fa-long-arrow-left "></i></a>
</section>
</div>
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
<section class="heading-title">
<h1 translate>{{ 'the_spaces' }}</h1>
</section>
</div>
<div class="col-xs-12 col-sm-12 col-md-3 b-t hide-b-md" ng-if="isAuthorized('admin')">
<section class="heading-actions wrapper">
<a class="btn btn-lg btn-warning bg-white b-2x rounded m-t-xs" ui-sref="app.admin.space_new" role="button" translate>{{ 'add_a_space' }}</a>
</section>
</div>
</div>
</section>
<section class="m-lg">
<div class="row" ng-repeat="space in (spaces.length/3 | array)">
<div class="col-xs-12 col-sm-6 col-md-4" ng-repeat="space in spaces.slice(3*$index, 3*$index + 3)">
<div class="widget panel panel-default">
<div class="panel-heading picture" ng-if="!space.space_image" ng-click="showMachine(space)">
<img src="data:image/png;base64," data-src="holder.js/100%x100%/text:&#xf03e;/font:FontAwesome/icon" bs-holder class="img-responsive">
</div>
<div class="panel-heading picture" style="background-image:url({{space.space_image}})" ng-if="space.space_image" ng-click="showMachine(space)">
</div>
<div class="panel-body">
<h1 class="text-center m-b">{{space.name}}</h1>
</div>
<div class="panel-footer no-padder">
<div class="text-center clearfix">
<div class="col-sm-6 b-r no-padder">
<div class="btn btn-default btn-block no-b padder-v red" ng-click="reserveSpace(space, $event)">
<i class="fa fa-bookmark"></i> {{ 'book' | translate }}
</div>
</div>
<div class="col-sm-6 no-padder">
<div class="btn btn-default btn-block padder-v no-b red" ng-click="showSpace(space)">
<i class="fa fa-eye"></i> {{ 'consult' | translate }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>

View File

@ -31,6 +31,7 @@ en:
reserve_a_machine: "Reserve a Machine"
trainings_registrations: "Trainings registrations"
events_registrations: "Events registrations"
reserve_a_space: "Reserve a Space"
projects_gallery: "Projects gallery"
subscriptions: "Subscriptions"
public_calendar: "Calendar"
@ -44,6 +45,7 @@ en:
subscriptions_and_prices: "Subscriptions and Prices"
manage_the_events: "Manage the events"
manage_the_machines: "Manage the Machines"
manage_the_spaces: "Manage the Spaces"
manage_the_projects_elements: "Manage the Projects Elements"
statistics: "Statistics"
customization: "Customization"
@ -246,6 +248,12 @@ en:
you_can_shift_this_reservation_on_the_following_slots: "You can shift this reservation on the following slots:"
calendar:
# public calendar
calendar: "Calendar"
show_no_disponible: "Show the slots no disponibles"
filter-calendar: "Filter calendar"
spaces_list:
# list of spaces
the_spaces: "The spaces"
add_a_space: "Add a space"

View File

@ -31,6 +31,7 @@ fr:
reserve_a_machine: "Réserver une machine"
trainings_registrations: "Inscriptions formations"
events_registrations: "Inscriptions aux évènements"
reserve_a_space: "Réserver un espace"
projects_gallery: "Galerie de projets"
subscriptions: "Abonnements"
public_calendar: "Calendrier"
@ -44,6 +45,7 @@ fr:
subscriptions_and_prices: "Abonnements & Tarifs"
manage_the_events: "Gérer les évènements"
manage_the_machines: "Gérer les machines"
manage_the_spaces: "Gérer les espaces"
manage_the_projects_elements: "Gérer les éléments projets"
statistics: "Statistiques"
customization: "Personnalisation"
@ -248,6 +250,12 @@ fr:
you_can_shift_this_reservation_on_the_following_slots: "Vous pouvez déplacer cette réservation sur les créneaux suivants :"
calendar:
# calendrier publique
calendar: "Calendrier"
show_no_disponible: "Afficher les crénaux non disponibles"
filter-calendar: "Filtrer le calendrier"
spaces_list:
# liste des espaces
the_spaces: "Les espaces"
add_a_space: "Ajouter un espace"

View File

@ -123,6 +123,7 @@ Rails.application.routes.draw do
patch :reset_token, on: :member
end
resources :price_categories
resources :spaces
# i18n
get 'translations/:locale/:state' => 'translations#show', :constraints => { :state => /[^\/]+/ } # allow dots in URL for 'state'