1
0
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:
Sylvain 2016-07-25 16:16:25 +02:00
parent 54740d13f8
commit 32d239f723
18 changed files with 68 additions and 38 deletions

View File

@ -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`

View File

@ -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 = [

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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])

View File

@ -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?

View File

@ -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,

View File

@ -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

View File

@ -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 : ''),

View File

@ -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|

View File

@ -0,0 +1,5 @@
class AddCategoryIdToEvent < ActiveRecord::Migration
def change
add_reference :events, :category, index: true, foreign_key: true
end
end

View 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

View 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

View File

@ -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"

View File

@ -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
}

View File

@ -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