mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-02-19 13:54:25 +01:00
[Bug #28] Event type disappear when editing the event
This commit is contained in:
parent
54740d13f8
commit
32d239f723
@ -17,6 +17,7 @@
|
||||
- Filter events by category, theme and age range in public view
|
||||
- Statistics will include informations abouts events category, theme and age range
|
||||
- Fix a bug: project drafts are shown on public profiles
|
||||
- Fix a bug: event category disappear when editing the event
|
||||
- [TODO DEPLOY] `rake fablab:es_add_event_filters`
|
||||
- [TODO DEPLOY] `rake db:migrate`
|
||||
|
||||
|
@ -322,7 +322,7 @@ Application.Controllers.controller "NewEventController", ["$scope", "$state", "$
|
||||
end_time: new Date()
|
||||
all_day: 'false'
|
||||
recurrence: 'none'
|
||||
category_ids: []
|
||||
category_id: null
|
||||
|
||||
## Possible types of recurrences for an event
|
||||
$scope.recurrenceTypes = [
|
||||
|
@ -69,7 +69,7 @@
|
||||
|
||||
</div> <!-- ./panel-body -->
|
||||
<div class="panel-footer no-padder">
|
||||
<input type="submit" ng-value="submitName" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="eventForm.$invalid || event.category_ids.length === 0"/>
|
||||
<input type="submit" ng-value="submitName" class="r-b btn-valid btn btn-warning btn-block p-lg btn-lg text-u-c" ng-disabled="eventForm.$invalid || event.category_id === null"/>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@ -83,11 +83,10 @@
|
||||
<h3 translate>{{ 'event_type' }} *</h3>
|
||||
</div>
|
||||
<div class="widget-content no-bg wrapper">
|
||||
<input type="hidden" name="event[category_ids][]" value="" />
|
||||
<ui-select ng-model="event.category_ids" name="event[category_ids][]">
|
||||
<ui-select ng-model="event.category_id" name="event[category_id][]">
|
||||
<ui-select-match>
|
||||
<span ng-bind="$select.selected.name"></span>
|
||||
<input type="hidden" name="event[category_ids][]" value="{{$select.selected.id}}" />
|
||||
<input type="hidden" name="event[category_id]" value="{{$select.selected.id}}" />
|
||||
</ui-select-match>
|
||||
<ui-select-choices repeat="c.id as c in (categories | filter: $select.search)">
|
||||
<span ng-bind-html="c.name | highlight: $select.search"></span>
|
||||
|
@ -50,7 +50,7 @@
|
||||
|
||||
<a class="block bg-white img-full p-sm p-l-m box-h-m event b b-light-dark m-t-sm" ui-sref="app.public.events_show({id: event.id})">
|
||||
<div class="pull-left half-w m-t-n-sm">
|
||||
<h5 class="text-xs">{{event.categories[0].name}}</h5>
|
||||
<h5 class="text-xs">{{event.category.name}}</h5>
|
||||
<h4 class="m-n text-sm clear l-n">{{event.title}}</h4>
|
||||
<h3 class="m-n" ng-show="onSingleDay(event)">{{event.start_date | amDateFormat:'L'}}</h3>
|
||||
<h3 class="m-n" ng-hide="onSingleDay(event)">{{event.start_date | amDateFormat:'L'}} <span class="text-sm font-thin" translate> {{ 'to_date' }} </span> {{event.end_date | amDateFormat:'L'}}</h3>
|
||||
|
@ -10,7 +10,7 @@
|
||||
</div>
|
||||
<div class="col-xs-10 col-sm-10 col-md-8 b-l b-r-md">
|
||||
<section class="heading-title">
|
||||
<h1>{{ event.title }} <span class="v-middle badge text-xs bg-event">{{event.categories[0].name}}</span></h1>
|
||||
<h1>{{ event.title }} <span class="v-middle badge text-xs bg-event">{{event.category.name}}</span></h1>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@ -67,7 +67,7 @@
|
||||
|
||||
<div class="panel-content wrapper">
|
||||
|
||||
<h5>{{event.categories[0].name}}</h5>
|
||||
<h5>{{event.category.name}}</h5>
|
||||
<dl class="text-sm">
|
||||
<dt ng-if="event.event_themes.length > 0"><i class="fa fa-tags" aria-hidden="true"></i> {{event.event_themes[0].name}}</dt>
|
||||
<dt ng-if="event.age_range"><i class="fa fa-users" aria-hidden="true"></i> {{event.age_range.name}}</dt>
|
||||
|
@ -97,7 +97,7 @@
|
||||
<h1 class="m-b">{{event.title}}</h1>
|
||||
</div>
|
||||
<div class="col-xs-3">
|
||||
<span class="v-middle badge text-xs" ng-class="'bg-{{event.categories[0].name | lowercase}}'">{{event.categories[0].name}}</span>
|
||||
<span class="v-middle badge text-xs" ng-class="'bg-{{event.category.name | lowercase}}'">{{event.category.name}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<p>{{event.description | humanize : 500 }}</p>
|
||||
|
@ -18,7 +18,7 @@ class API::EventsController < API::ApiController
|
||||
# GET /events/upcoming/:limit
|
||||
def upcoming
|
||||
limit = params[:limit]
|
||||
@events = Event.includes(:event_image, :event_files, :availability, :categories)
|
||||
@events = Event.includes(:event_image, :event_files, :availability, :category)
|
||||
.where('availabilities.start_at >= ?', Time.now)
|
||||
.order('availabilities.start_at ASC').references(:availabilities).limit(limit)
|
||||
end
|
||||
@ -64,8 +64,8 @@ class API::EventsController < API::ApiController
|
||||
def event_params
|
||||
event_preparams = params.required(:event).permit(:title, :description, :start_date, :start_time, :end_date, :end_time,
|
||||
:amount, :reduced_amount, :nb_total_places, :availability_id,
|
||||
:all_day, :recurrence, :recurrence_end_at, :category_ids, :event_theme_ids,
|
||||
:age_range_id, event_theme_ids: [], category_ids: [],
|
||||
:all_day, :recurrence, :recurrence_end_at, :category_id, :event_theme_ids,
|
||||
:age_range_id, event_theme_ids: [],
|
||||
event_image_attributes: [:attachment], event_files_attributes: [:id, :attachment, :_destroy])
|
||||
start_date = Time.zone.parse(event_preparams[:start_date])
|
||||
end_date = Time.zone.parse(event_preparams[:end_date])
|
||||
|
@ -2,7 +2,7 @@ class Category < ActiveRecord::Base
|
||||
extend FriendlyId
|
||||
friendly_id :name, use: :slugged
|
||||
|
||||
has_and_belongs_to_many :events, join_table: :events_categories, dependent: :destroy
|
||||
has_many :events, dependent: :destroy
|
||||
|
||||
after_create :create_statistic_subtype
|
||||
after_update :update_statistic_subtype, if: :name_changed?
|
||||
|
@ -5,8 +5,8 @@ class Event < ActiveRecord::Base
|
||||
accepts_nested_attributes_for :event_image, allow_destroy: true
|
||||
has_many :event_files, as: :viewable, dependent: :destroy
|
||||
accepts_nested_attributes_for :event_files, allow_destroy: true, reject_if: :all_blank
|
||||
has_and_belongs_to_many :categories, join_table: :events_categories
|
||||
validates :categories, presence: true
|
||||
belongs_to :category
|
||||
validates :category, presence: true
|
||||
has_many :reservations, as: :reservable, dependent: :destroy
|
||||
has_and_belongs_to_many :event_themes, join_table: :events_event_themes, dependent: :destroy
|
||||
|
||||
@ -81,7 +81,7 @@ class Event < ActiveRecord::Base
|
||||
event_files: efs,
|
||||
availability: Availability.new(start_at: start_at, end_at: end_at, available_type: 'event'),
|
||||
availability_id: nil,
|
||||
category_ids: category_ids,
|
||||
category_id: category_id,
|
||||
amount: amount,
|
||||
reduced_amount: reduced_amount,
|
||||
nb_total_places: nb_total_places,
|
||||
|
@ -2,12 +2,12 @@ class EventPolicy < ApplicationPolicy
|
||||
class Scope < Scope
|
||||
def resolve
|
||||
if user.nil? or (user and !user.is_admin?)
|
||||
scope.includes(:event_image, :event_files, :availability, :categories)
|
||||
scope.includes(:event_image, :event_files, :availability, :category)
|
||||
.where('availabilities.start_at >= ?', Time.now)
|
||||
.order('availabilities.start_at ASC')
|
||||
.references(:availabilities)
|
||||
else
|
||||
scope.includes(:event_image, :event_files, :availability, :categories)
|
||||
scope.includes(:event_image, :event_files, :availability, :category)
|
||||
.order('availabilities.start_at DESC')
|
||||
.references(:availabilities)
|
||||
end
|
||||
|
@ -200,7 +200,7 @@ class StatisticService
|
||||
date: options[:start_date].to_date,
|
||||
reservation_id: r.id,
|
||||
event_id: r.reservable.id,
|
||||
event_type: r.reservable.categories.first.name,
|
||||
event_type: r.reservable.category.name,
|
||||
event_name: r.reservable.name,
|
||||
event_date: slot.start_at.to_date,
|
||||
event_theme: (r.reservable.event_themes.first ? r.reservable.event_themes.first.name : ''),
|
||||
|
@ -5,10 +5,10 @@ json.event_files_attributes event.event_files do |f|
|
||||
json.attachment f.attachment_identifier
|
||||
json.attachment_url f.attachment_url
|
||||
end
|
||||
json.category_ids event.category_ids
|
||||
json.categories event.categories do |c|
|
||||
json.id c.id
|
||||
json.name c.name
|
||||
json.category_id event.category_id
|
||||
json.category do
|
||||
json.id event.category.id
|
||||
json.name event.category.name
|
||||
end
|
||||
json.event_theme_ids event.event_theme_ids
|
||||
json.event_themes event.event_themes do |e|
|
||||
|
5
db/migrate/20160725131756_add_category_id_to_event.rb
Normal file
5
db/migrate/20160725131756_add_category_id_to_event.rb
Normal file
@ -0,0 +1,5 @@
|
||||
class AddCategoryIdToEvent < ActiveRecord::Migration
|
||||
def change
|
||||
add_reference :events, :category, index: true, foreign_key: true
|
||||
end
|
||||
end
|
18
db/migrate/20160725131950_singleize_event_categories.rb
Normal file
18
db/migrate/20160725131950_singleize_event_categories.rb
Normal file
@ -0,0 +1,18 @@
|
||||
class SingleizeEventCategories < ActiveRecord::Migration
|
||||
def up
|
||||
execute 'UPDATE events AS e
|
||||
SET category_id = ec.category_id
|
||||
FROM events_categories AS ec
|
||||
WHERE e.id = ec.event_id;'
|
||||
end
|
||||
|
||||
def down
|
||||
execute 'INSERT INTO events_categories
|
||||
(event_id, category_id, created_at, updated_at)
|
||||
SELECT id, category_id, now(), now()
|
||||
FROM events;'
|
||||
|
||||
execute 'UPDATE events
|
||||
SET category_id = NULL;'
|
||||
end
|
||||
end
|
14
db/migrate/20160725135112_drop_events_categories.rb
Normal file
14
db/migrate/20160725135112_drop_events_categories.rb
Normal file
@ -0,0 +1,14 @@
|
||||
class DropEventsCategories < ActiveRecord::Migration
|
||||
def up
|
||||
drop_table :events_categories
|
||||
end
|
||||
|
||||
def down
|
||||
create_table :events_categories do |t|
|
||||
t.belongs_to :event, index: true
|
||||
t.belongs_to :category, index: true
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
15
db/schema.rb
15
db/schema.rb
@ -11,7 +11,7 @@
|
||||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20160720124355) do
|
||||
ActiveRecord::Schema.define(version: 20160725135112) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
@ -147,21 +147,13 @@ ActiveRecord::Schema.define(version: 20160720124355) do
|
||||
t.integer "nb_free_places"
|
||||
t.integer "recurrence_id"
|
||||
t.integer "age_range_id"
|
||||
t.integer "category_id"
|
||||
end
|
||||
|
||||
add_index "events", ["availability_id"], name: "index_events_on_availability_id", using: :btree
|
||||
add_index "events", ["category_id"], name: "index_events_on_category_id", using: :btree
|
||||
add_index "events", ["recurrence_id"], name: "index_events_on_recurrence_id", using: :btree
|
||||
|
||||
create_table "events_categories", force: :cascade do |t|
|
||||
t.integer "event_id"
|
||||
t.integer "category_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
add_index "events_categories", ["category_id"], name: "index_events_categories_on_category_id", using: :btree
|
||||
add_index "events_categories", ["event_id"], name: "index_events_categories_on_event_id", using: :btree
|
||||
|
||||
create_table "events_event_themes", force: :cascade do |t|
|
||||
t.integer "event_id"
|
||||
t.integer "event_theme_id"
|
||||
@ -737,6 +729,7 @@ ActiveRecord::Schema.define(version: 20160720124355) do
|
||||
|
||||
add_foreign_key "availability_tags", "availabilities"
|
||||
add_foreign_key "availability_tags", "tags"
|
||||
add_foreign_key "events", "categories"
|
||||
add_foreign_key "events_event_themes", "event_themes"
|
||||
add_foreign_key "events_event_themes", "events"
|
||||
add_foreign_key "invoices", "wallet_transactions"
|
||||
|
@ -17,7 +17,7 @@ class EventsTest < ActionDispatch::IntegrationTest
|
||||
start_time: 1.week.from_now.utc.change({hour: 16}),
|
||||
end_date: 1.week.from_now.utc,
|
||||
end_time: 1.week.from_now.utc.change({hour: 20}),
|
||||
category_ids: [Category.first.id],
|
||||
category_id: Category.first.id,
|
||||
amount: 0
|
||||
}
|
||||
}.to_json,
|
||||
@ -45,7 +45,7 @@ class EventsTest < ActionDispatch::IntegrationTest
|
||||
start_time: 1.week.from_now.utc.change({hour: 16}),
|
||||
end_date: 1.week.from_now.utc,
|
||||
end_time: 1.week.from_now.utc.change({hour: 20}),
|
||||
category_ids: [Category.first.id],
|
||||
category_id: Category.first.id,
|
||||
amount: 0,
|
||||
nb_total_places: 10
|
||||
}
|
||||
@ -99,7 +99,7 @@ class EventsTest < ActionDispatch::IntegrationTest
|
||||
start_time: 1.week.from_now.utc.change({hour: 16}),
|
||||
end_date: 1.week.from_now.utc,
|
||||
end_time: 1.week.from_now.utc.change({hour: 20}),
|
||||
category_ids: [Category.first.id],
|
||||
category_id: Category.first.id,
|
||||
amount: 0,
|
||||
nb_total_places: 20
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ require 'test_helper'
|
||||
class EventTest < ActiveSupport::TestCase
|
||||
test 'event must have a category' do
|
||||
e = Event.first
|
||||
assert_not_nil e.categories.first
|
||||
assert_not_nil e.category
|
||||
end
|
||||
|
||||
test 'event must have a theme' do
|
||||
|
Loading…
x
Reference in New Issue
Block a user