mirror of
https://github.com/LaCasemate/fab-manager.git
synced 2025-02-26 20:54:21 +01:00
(bug) filter statistics by slot date
This commit is contained in:
parent
40eb4c3bd3
commit
193407e0da
@ -1,6 +1,7 @@
|
|||||||
# Changelog Fab-manager
|
# Changelog Fab-manager
|
||||||
|
|
||||||
- Updated shakapaker to 6.5.5
|
- Updated shakapaker to 6.5.5
|
||||||
|
- Fix a bug: unable to filter statistics by slot date
|
||||||
- Fix a bug: unable to create a recurrent event
|
- Fix a bug: unable to create a recurrent event
|
||||||
- Fix a bug: unable to create a non-rolling plan
|
- Fix a bug: unable to create a non-rolling plan
|
||||||
- Fix a bug: invalid duration for machine/spaces reservations in statistics, when using slots of not 1 hour
|
- Fix a bug: invalid duration for machine/spaces reservations in statistics, when using slots of not 1 hour
|
||||||
@ -8,6 +9,8 @@
|
|||||||
- Fix a bug: do not show theme and age-range fields in event form if no options were set
|
- Fix a bug: do not show theme and age-range fields in event form if no options were set
|
||||||
- Fix a bug: do not show catgory select in plan form if no options were set
|
- Fix a bug: do not show catgory select in plan form if no options were set
|
||||||
- Fix a bug: new setups doesn't log
|
- Fix a bug: new setups doesn't log
|
||||||
|
- [TODO DEPLOY] `rails db:seed`
|
||||||
|
- [TODO DEPLOY] `rails fablab:es:build_stats` THEN `rails fablab:maintenance:regenerate_statistics[2014,1]`
|
||||||
|
|
||||||
## v5.6.8 2023 January 26
|
## v5.6.8 2023 January 26
|
||||||
|
|
||||||
|
@ -233,6 +233,14 @@ Application.Controllers.controller('StatisticsController', ['$scope', '$state',
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return unique elements from the given array
|
||||||
|
* @param elements {Array<any>}
|
||||||
|
*/
|
||||||
|
$scope.uniq = function (elements) {
|
||||||
|
return [...new Set(elements)];
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the label for the given subtype in the current type
|
* Retrieve the label for the given subtype in the current type
|
||||||
* @param key {string} statistic subtype key
|
* @param key {string} statistic subtype key
|
||||||
|
@ -254,7 +254,8 @@
|
|||||||
<table class="table">
|
<table class="table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th translate>{{ 'app.admin.statistics.date' }}</th>
|
<th ng-if="['booking', 'hour'].includes(type.active.key)" translate>{{ 'app.admin.statistics.reservation_date' }}</th>
|
||||||
|
<th ng-if="!['booking', 'hour'].includes(type.active.key)" translate>{{ 'app.admin.statistics.date' }}</th>
|
||||||
<th translate>{{ 'app.admin.statistics.user' }}</th>
|
<th translate>{{ 'app.admin.statistics.user' }}</th>
|
||||||
<th translate>{{ 'app.admin.statistics.gender' }}</th>
|
<th translate>{{ 'app.admin.statistics.gender' }}</th>
|
||||||
<th translate>{{ 'app.admin.statistics.age' }}</th>
|
<th translate>{{ 'app.admin.statistics.age' }}</th>
|
||||||
@ -290,7 +291,7 @@
|
|||||||
<ng-switch on="field.data_type">
|
<ng-switch on="field.data_type">
|
||||||
<span ng-switch-when="date">{{formatDate(datum._source[field.key])}}</span>
|
<span ng-switch-when="date">{{formatDate(datum._source[field.key])}}</span>
|
||||||
<ul ng-switch-when="list">
|
<ul ng-switch-when="list">
|
||||||
<li ng-repeat="elem in datum._source[field.key]">{{elem.name}}</li>
|
<li ng-repeat="elem in uniq(datum._source[field.key])">{{elem.name}}</li>
|
||||||
</ul>
|
</ul>
|
||||||
<span ng-switch-default>{{datum._source[field.key]}}</span>
|
<span ng-switch-default>{{datum._source[field.key]}}</span>
|
||||||
</ng-switch>
|
</ng-switch>
|
||||||
|
@ -169,7 +169,7 @@ class Setting < ApplicationRecord
|
|||||||
# WARNING: when adding a new key, you may also want to add it in:
|
# WARNING: when adding a new key, you may also want to add it in:
|
||||||
# - config/locales/en.yml#settings
|
# - config/locales/en.yml#settings
|
||||||
# - app/frontend/src/javascript/models/setting.ts#SettingName
|
# - app/frontend/src/javascript/models/setting.ts#SettingName
|
||||||
# - db/seeds.rb (to set the default value)
|
# - db/seeds/settings.rb (to set the default value)
|
||||||
# - app/policies/setting_policy.rb#public_whitelist (if the setting can be read by anyone)
|
# - app/policies/setting_policy.rb#public_whitelist (if the setting can be read by anyone)
|
||||||
# - test/fixtures/settings.yml (for backend testing)
|
# - test/fixtures/settings.yml (for backend testing)
|
||||||
# - test/fixtures/history_values.yml (example value for backend testing)
|
# - test/fixtures/history_values.yml (example value for backend testing)
|
||||||
|
@ -56,7 +56,7 @@ class Statistics::Builders::ReservationsBuilderService
|
|||||||
def add_machine_attributes(category, stat, reservation_data)
|
def add_machine_attributes(category, stat, reservation_data)
|
||||||
return stat unless category == 'machine'
|
return stat unless category == 'machine'
|
||||||
|
|
||||||
stat[:machineDates] = reservation_data[:slot_dates]
|
stat[:machineDates] = reservation_data[:slot_dates].map { |date| { name: date } }
|
||||||
|
|
||||||
stat
|
stat
|
||||||
end
|
end
|
||||||
@ -64,7 +64,7 @@ class Statistics::Builders::ReservationsBuilderService
|
|||||||
def add_space_attributes(category, stat, reservation_data)
|
def add_space_attributes(category, stat, reservation_data)
|
||||||
return stat unless category == 'space'
|
return stat unless category == 'space'
|
||||||
|
|
||||||
stat[:spaceDates] = reservation_data[:slot_dates]
|
stat[:spaceDates] = reservation_data[:slot_dates].map { |date| { name: date } }
|
||||||
|
|
||||||
stat
|
stat
|
||||||
end
|
end
|
||||||
|
@ -9,19 +9,21 @@ class Statistics::CleanerService
|
|||||||
client = Elasticsearch::Model.client
|
client = Elasticsearch::Model.client
|
||||||
%w[Account Event Machine Project Subscription Training User Space Order].each do |o|
|
%w[Account Event Machine Project Subscription Training User Space Order].each do |o|
|
||||||
model = "Stats::#{o}".constantize
|
model = "Stats::#{o}".constantize
|
||||||
client.delete_by_query(
|
dates = (to_date(options[:start_date]).to_date..to_date(options[:end_date]).to_date).to_a
|
||||||
index: model.index_name,
|
# elasticsearch does not support more than 1024 query arguments
|
||||||
type: model.document_type,
|
dates.each_slice(1024) do |slice_dates|
|
||||||
body: {
|
client.delete_by_query(
|
||||||
query: {
|
index: model.index_name,
|
||||||
terms: {
|
type: model.document_type,
|
||||||
date: (to_date(options[:start_date]).to_date..to_date(options[:end_date]).to_date)
|
body: {
|
||||||
.to_a
|
query: {
|
||||||
.map { |d| format_date(d) }
|
terms: {
|
||||||
|
date: slice_dates.map { |d| format_date(d) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
)
|
||||||
)
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -1377,6 +1377,7 @@ en:
|
|||||||
available_hours: "Hours available for booking:"
|
available_hours: "Hours available for booking:"
|
||||||
available_tickets: "Tickets available for booking:"
|
available_tickets: "Tickets available for booking:"
|
||||||
date: "Date"
|
date: "Date"
|
||||||
|
reservation_date: "Reservation date"
|
||||||
user: "User"
|
user: "User"
|
||||||
gender: "Gender"
|
gender: "Gender"
|
||||||
age: "Age"
|
age: "Age"
|
||||||
|
@ -455,6 +455,7 @@ en:
|
|||||||
components: "Components"
|
components: "Components"
|
||||||
machines: "Machines"
|
machines: "Machines"
|
||||||
user_id: "User ID"
|
user_id: "User ID"
|
||||||
|
group: "Group"
|
||||||
bookings: "Bookings"
|
bookings: "Bookings"
|
||||||
hours_number: "Hours number"
|
hours_number: "Hours number"
|
||||||
tickets_number: "Tickets number"
|
tickets_number: "Tickets number"
|
||||||
|
151
db/schema.rb
151
db/schema.rb
@ -150,6 +150,110 @@ ActiveRecord::Schema.define(version: 2023_01_31_104958) do
|
|||||||
t.index ["tag_id"], name: "index_availability_tags_on_tag_id"
|
t.index ["tag_id"], name: "index_availability_tags_on_tag_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "cart_item_coupons", force: :cascade do |t|
|
||||||
|
t.bigint "coupon_id"
|
||||||
|
t.bigint "customer_profile_id"
|
||||||
|
t.bigint "operator_profile_id"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.index ["coupon_id"], name: "index_cart_item_coupons_on_coupon_id"
|
||||||
|
t.index ["customer_profile_id"], name: "index_cart_item_coupons_on_customer_profile_id"
|
||||||
|
t.index ["operator_profile_id"], name: "index_cart_item_coupons_on_operator_profile_id"
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table "cart_item_event_reservation_tickets", force: :cascade do |t|
|
||||||
|
t.integer "booked"
|
||||||
|
t.bigint "event_price_category_id"
|
||||||
|
t.bigint "cart_item_event_reservation_id"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.index ["cart_item_event_reservation_id"], name: "index_cart_item_tickets_on_cart_item_event_reservation"
|
||||||
|
t.index ["event_price_category_id"], name: "index_cart_item_tickets_on_event_price_category"
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table "cart_item_event_reservations", force: :cascade do |t|
|
||||||
|
t.integer "normal_tickets"
|
||||||
|
t.bigint "event_id"
|
||||||
|
t.bigint "operator_profile_id"
|
||||||
|
t.bigint "customer_profile_id"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.index ["customer_profile_id"], name: "index_cart_item_event_reservations_on_customer_profile_id"
|
||||||
|
t.index ["event_id"], name: "index_cart_item_event_reservations_on_event_id"
|
||||||
|
t.index ["operator_profile_id"], name: "index_cart_item_event_reservations_on_operator_profile_id"
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table "cart_item_free_extensions", force: :cascade do |t|
|
||||||
|
t.bigint "subscription_id"
|
||||||
|
t.datetime "new_expiration_date"
|
||||||
|
t.bigint "customer_profile_id"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.index ["customer_profile_id"], name: "index_cart_item_free_extensions_on_customer_profile_id"
|
||||||
|
t.index ["subscription_id"], name: "index_cart_item_free_extensions_on_subscription_id"
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table "cart_item_payment_schedules", force: :cascade do |t|
|
||||||
|
t.bigint "plan_id"
|
||||||
|
t.bigint "coupon_id"
|
||||||
|
t.boolean "requested"
|
||||||
|
t.datetime "start_at"
|
||||||
|
t.bigint "customer_profile_id"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.index ["coupon_id"], name: "index_cart_item_payment_schedules_on_coupon_id"
|
||||||
|
t.index ["customer_profile_id"], name: "index_cart_item_payment_schedules_on_customer_profile_id"
|
||||||
|
t.index ["plan_id"], name: "index_cart_item_payment_schedules_on_plan_id"
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table "cart_item_prepaid_packs", force: :cascade do |t|
|
||||||
|
t.bigint "prepaid_pack_id"
|
||||||
|
t.bigint "customer_profile_id"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.index ["customer_profile_id"], name: "index_cart_item_prepaid_packs_on_customer_profile_id"
|
||||||
|
t.index ["prepaid_pack_id"], name: "index_cart_item_prepaid_packs_on_prepaid_pack_id"
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table "cart_item_reservation_slots", force: :cascade do |t|
|
||||||
|
t.string "cart_item_type"
|
||||||
|
t.bigint "cart_item_id"
|
||||||
|
t.bigint "slot_id"
|
||||||
|
t.bigint "slots_reservation_id"
|
||||||
|
t.boolean "offered", default: false
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.index ["cart_item_type", "cart_item_id"], name: "index_cart_item_slots_on_cart_item"
|
||||||
|
t.index ["slot_id"], name: "index_cart_item_reservation_slots_on_slot_id"
|
||||||
|
t.index ["slots_reservation_id"], name: "index_cart_item_reservation_slots_on_slots_reservation_id"
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table "cart_item_reservations", force: :cascade do |t|
|
||||||
|
t.string "reservable_type"
|
||||||
|
t.bigint "reservable_id"
|
||||||
|
t.bigint "plan_id"
|
||||||
|
t.boolean "new_subscription"
|
||||||
|
t.bigint "customer_profile_id"
|
||||||
|
t.bigint "operator_profile_id"
|
||||||
|
t.string "type"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.index ["customer_profile_id"], name: "index_cart_item_reservations_on_customer_profile_id"
|
||||||
|
t.index ["operator_profile_id"], name: "index_cart_item_reservations_on_operator_profile_id"
|
||||||
|
t.index ["plan_id"], name: "index_cart_item_reservations_on_plan_id"
|
||||||
|
t.index ["reservable_type", "reservable_id"], name: "index_cart_item_reservations_on_reservable"
|
||||||
|
end
|
||||||
|
|
||||||
|
create_table "cart_item_subscriptions", force: :cascade do |t|
|
||||||
|
t.bigint "plan_id"
|
||||||
|
t.datetime "start_at"
|
||||||
|
t.bigint "customer_profile_id"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
t.index ["customer_profile_id"], name: "index_cart_item_subscriptions_on_customer_profile_id"
|
||||||
|
t.index ["plan_id"], name: "index_cart_item_subscriptions_on_plan_id"
|
||||||
|
end
|
||||||
|
|
||||||
create_table "categories", id: :serial, force: :cascade do |t|
|
create_table "categories", id: :serial, force: :cascade do |t|
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
@ -173,6 +277,7 @@ ActiveRecord::Schema.define(version: 2023_01_31_104958) do
|
|||||||
t.datetime "updated_at", null: false
|
t.datetime "updated_at", null: false
|
||||||
t.string "validity_per_user"
|
t.string "validity_per_user"
|
||||||
t.integer "amount_off"
|
t.integer "amount_off"
|
||||||
|
t.index ["code"], name: "index_coupons_on_code", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "credits", id: :serial, force: :cascade do |t|
|
create_table "credits", id: :serial, force: :cascade do |t|
|
||||||
@ -793,8 +898,10 @@ ActiveRecord::Schema.define(version: 2023_01_31_104958) do
|
|||||||
t.datetime "published_at"
|
t.datetime "published_at"
|
||||||
t.integer "author_statistic_profile_id"
|
t.integer "author_statistic_profile_id"
|
||||||
t.tsvector "search_vector"
|
t.tsvector "search_vector"
|
||||||
|
t.bigint "status_id"
|
||||||
t.index ["search_vector"], name: "projects_search_vector_idx", using: :gin
|
t.index ["search_vector"], name: "projects_search_vector_idx", using: :gin
|
||||||
t.index ["slug"], name: "index_projects_on_slug", unique: true
|
t.index ["slug"], name: "index_projects_on_slug", unique: true
|
||||||
|
t.index ["status_id"], name: "index_projects_on_status_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "projects_components", id: :serial, force: :cascade do |t|
|
create_table "projects_components", id: :serial, force: :cascade do |t|
|
||||||
@ -899,13 +1006,15 @@ ActiveRecord::Schema.define(version: 2023_01_31_104958) do
|
|||||||
t.datetime "end_at"
|
t.datetime "end_at"
|
||||||
t.datetime "created_at"
|
t.datetime "created_at"
|
||||||
t.datetime "updated_at"
|
t.datetime "updated_at"
|
||||||
t.integer "availability_id"
|
t.integer "availability_id", null: false
|
||||||
|
t.jsonb "places", default: [], null: false
|
||||||
t.index ["availability_id"], name: "index_slots_on_availability_id"
|
t.index ["availability_id"], name: "index_slots_on_availability_id"
|
||||||
|
t.index ["places"], name: "index_slots_on_places", using: :gin
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "slots_reservations", id: :serial, force: :cascade do |t|
|
create_table "slots_reservations", id: :serial, force: :cascade do |t|
|
||||||
t.integer "slot_id"
|
t.integer "slot_id", null: false
|
||||||
t.integer "reservation_id"
|
t.integer "reservation_id", null: false
|
||||||
t.datetime "ex_start_at"
|
t.datetime "ex_start_at"
|
||||||
t.datetime "ex_end_at"
|
t.datetime "ex_end_at"
|
||||||
t.datetime "canceled_at"
|
t.datetime "canceled_at"
|
||||||
@ -1035,6 +1144,12 @@ ActiveRecord::Schema.define(version: 2023_01_31_104958) do
|
|||||||
t.index ["statistic_index_id"], name: "index_statistic_types_on_statistic_index_id"
|
t.index ["statistic_index_id"], name: "index_statistic_types_on_statistic_index_id"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
create_table "statuses", force: :cascade do |t|
|
||||||
|
t.string "name"
|
||||||
|
t.datetime "created_at", null: false
|
||||||
|
t.datetime "updated_at", null: false
|
||||||
|
end
|
||||||
|
|
||||||
create_table "stylesheets", id: :serial, force: :cascade do |t|
|
create_table "stylesheets", id: :serial, force: :cascade do |t|
|
||||||
t.text "contents"
|
t.text "contents"
|
||||||
t.datetime "created_at", null: false
|
t.datetime "created_at", null: false
|
||||||
@ -1084,6 +1199,13 @@ ActiveRecord::Schema.define(version: 2023_01_31_104958) do
|
|||||||
t.text "description"
|
t.text "description"
|
||||||
t.boolean "public_page", default: true
|
t.boolean "public_page", default: true
|
||||||
t.boolean "disabled"
|
t.boolean "disabled"
|
||||||
|
t.boolean "auto_cancel"
|
||||||
|
t.integer "auto_cancel_threshold"
|
||||||
|
t.integer "auto_cancel_deadline"
|
||||||
|
t.boolean "authorization"
|
||||||
|
t.integer "authorization_period"
|
||||||
|
t.boolean "invalidation"
|
||||||
|
t.integer "invalidation_period"
|
||||||
t.index ["slug"], name: "index_trainings_on_slug", unique: true
|
t.index ["slug"], name: "index_trainings_on_slug", unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -1217,6 +1339,28 @@ ActiveRecord::Schema.define(version: 2023_01_31_104958) do
|
|||||||
add_foreign_key "auth_provider_mappings", "auth_providers"
|
add_foreign_key "auth_provider_mappings", "auth_providers"
|
||||||
add_foreign_key "availability_tags", "availabilities"
|
add_foreign_key "availability_tags", "availabilities"
|
||||||
add_foreign_key "availability_tags", "tags"
|
add_foreign_key "availability_tags", "tags"
|
||||||
|
add_foreign_key "cart_item_coupons", "coupons"
|
||||||
|
add_foreign_key "cart_item_coupons", "invoicing_profiles", column: "customer_profile_id"
|
||||||
|
add_foreign_key "cart_item_coupons", "invoicing_profiles", column: "operator_profile_id"
|
||||||
|
add_foreign_key "cart_item_event_reservation_tickets", "cart_item_event_reservations"
|
||||||
|
add_foreign_key "cart_item_event_reservation_tickets", "event_price_categories"
|
||||||
|
add_foreign_key "cart_item_event_reservations", "events"
|
||||||
|
add_foreign_key "cart_item_event_reservations", "invoicing_profiles", column: "customer_profile_id"
|
||||||
|
add_foreign_key "cart_item_event_reservations", "invoicing_profiles", column: "operator_profile_id"
|
||||||
|
add_foreign_key "cart_item_free_extensions", "invoicing_profiles", column: "customer_profile_id"
|
||||||
|
add_foreign_key "cart_item_free_extensions", "subscriptions"
|
||||||
|
add_foreign_key "cart_item_payment_schedules", "coupons"
|
||||||
|
add_foreign_key "cart_item_payment_schedules", "invoicing_profiles", column: "customer_profile_id"
|
||||||
|
add_foreign_key "cart_item_payment_schedules", "plans"
|
||||||
|
add_foreign_key "cart_item_prepaid_packs", "invoicing_profiles", column: "customer_profile_id"
|
||||||
|
add_foreign_key "cart_item_prepaid_packs", "prepaid_packs"
|
||||||
|
add_foreign_key "cart_item_reservation_slots", "slots"
|
||||||
|
add_foreign_key "cart_item_reservation_slots", "slots_reservations"
|
||||||
|
add_foreign_key "cart_item_reservations", "invoicing_profiles", column: "customer_profile_id"
|
||||||
|
add_foreign_key "cart_item_reservations", "invoicing_profiles", column: "operator_profile_id"
|
||||||
|
add_foreign_key "cart_item_reservations", "plans"
|
||||||
|
add_foreign_key "cart_item_subscriptions", "invoicing_profiles", column: "customer_profile_id"
|
||||||
|
add_foreign_key "cart_item_subscriptions", "plans"
|
||||||
add_foreign_key "event_price_categories", "events"
|
add_foreign_key "event_price_categories", "events"
|
||||||
add_foreign_key "event_price_categories", "price_categories"
|
add_foreign_key "event_price_categories", "price_categories"
|
||||||
add_foreign_key "events", "categories"
|
add_foreign_key "events", "categories"
|
||||||
@ -1260,6 +1404,7 @@ ActiveRecord::Schema.define(version: 2023_01_31_104958) do
|
|||||||
add_foreign_key "project_users", "projects"
|
add_foreign_key "project_users", "projects"
|
||||||
add_foreign_key "project_users", "users"
|
add_foreign_key "project_users", "users"
|
||||||
add_foreign_key "projects", "statistic_profiles", column: "author_statistic_profile_id"
|
add_foreign_key "projects", "statistic_profiles", column: "author_statistic_profile_id"
|
||||||
|
add_foreign_key "projects", "statuses"
|
||||||
add_foreign_key "projects_components", "components"
|
add_foreign_key "projects_components", "components"
|
||||||
add_foreign_key "projects_components", "projects"
|
add_foreign_key "projects_components", "projects"
|
||||||
add_foreign_key "projects_machines", "machines"
|
add_foreign_key "projects_machines", "machines"
|
||||||
|
722
db/seeds.rb
722
db/seeds.rb
@ -4,7 +4,7 @@
|
|||||||
# Some of them are just some placeholders to prevent having an empty palce when starting fab-manager first.
|
# Some of them are just some placeholders to prevent having an empty palce when starting fab-manager first.
|
||||||
# Other data are required default values, for various settings.
|
# Other data are required default values, for various settings.
|
||||||
|
|
||||||
Dir[Rails.root.join('db', 'seeds/*', '*.rb')].sort.each do |seed|
|
Dir[Rails.root.join('db/seeds/**/*.rb')].sort.each do |seed|
|
||||||
load seed
|
load seed
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -226,418 +226,9 @@ if Category.count.zero?
|
|||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
unless Setting.find_by(name: 'about_body').try(:value)
|
|
||||||
setting = Setting.find_or_initialize_by(name: 'about_body')
|
|
||||||
setting.value = <<~HTML
|
|
||||||
<p>
|
|
||||||
<a href="http://fab-manager.com" target="_blank">Fab-manager</a> est outil de gestion des atelier de fabrication
|
|
||||||
numérique, permettant de réserver des machines de découpe, des imprimantes 3D, etc. tout en gérant simplement
|
|
||||||
les aspect financier, comptable et statistiques de votre espace.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<a href="http://fab-manager.com" target="_blank">Fab-manager</a> est un projet libre : ouvert à tous, il offre la
|
|
||||||
possibilité de contribuer soi-même au code, de télécharger le logiciel, de l'étudier et de le redistribuer. Vous
|
|
||||||
n'êtes pas technicien ? Vous pouvez quand même participer à <a href="https://translate.fab-manager.com/">traduire
|
|
||||||
Fab-manager dans votre langue</a>.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Fab-manager favorise le partage de connaissances grâce au réseau OpenLab : les projets que vous documentez sont
|
|
||||||
partagés avec l'ensemble du réseau des Fab-managers.
|
|
||||||
</p>
|
|
||||||
HTML
|
|
||||||
setting.save
|
|
||||||
end
|
|
||||||
|
|
||||||
Setting.set('about_title', 'Imaginer, Fabriquer, <br>Partager avec Fab-manager') unless Setting.find_by(name: 'about_title').try(:value)
|
|
||||||
|
|
||||||
unless Setting.find_by(name: 'about_contacts').try(:value)
|
|
||||||
setting = Setting.find_or_initialize_by(name: 'about_contacts')
|
|
||||||
setting.value = <<~HTML
|
|
||||||
<dl>
|
|
||||||
<dt>Support technique :</dt>
|
|
||||||
<dd><a href="https://forum.fab-manager.com">Forum</a></dd>
|
|
||||||
<dd><a href="https://feedback.fab-manager.com">Feedback</a></dd>
|
|
||||||
<dd><a href="https://github.com/sleede/fab-manager/">GitHub</a></dd>
|
|
||||||
</dl>
|
|
||||||
<br><br>
|
|
||||||
<p><a href='http://fab-manager.com'>Visitez le site de Fab-manager</a></p>
|
|
||||||
HTML
|
|
||||||
setting.save
|
|
||||||
end
|
|
||||||
|
|
||||||
Setting.set('twitter_name', 'Fab_Manager') unless Setting.find_by(name: 'twitter_name').try(:value)
|
|
||||||
|
|
||||||
unless Setting.find_by(name: 'machine_explications_alert').try(:value)
|
|
||||||
setting = Setting.find_or_initialize_by(name: 'machine_explications_alert')
|
|
||||||
setting.value = 'Tout achat de créneau machine est définitif. Aucune ' \
|
|
||||||
'annulation ne pourra être effectuée, néanmoins au plus tard 24h avant le créneau fixé, vous pouvez en ' \
|
|
||||||
"modifier la date et l'horaire à votre convenance et en fonction du calendrier proposé. Passé ce délais, " \
|
|
||||||
'aucun changement ne pourra être effectué.'
|
|
||||||
setting.save
|
|
||||||
end
|
|
||||||
|
|
||||||
unless Setting.find_by(name: 'training_explications_alert').try(:value)
|
|
||||||
setting = Setting.find_or_initialize_by(name: 'training_explications_alert')
|
|
||||||
setting.value = 'Toute réservation de formation est définitive. ' \
|
|
||||||
'Aucune annulation ne pourra être effectuée, néanmoins au plus tard 24h avant le créneau fixé, vous pouvez ' \
|
|
||||||
"en modifier la date et l'horaire à votre convenance et en fonction du calendrier proposé. Passé ce délais, " \
|
|
||||||
'aucun changement ne pourra être effectué.'
|
|
||||||
setting.save
|
|
||||||
end
|
|
||||||
|
|
||||||
unless Setting.find_by(name: 'subscription_explications_alert').try(:value)
|
|
||||||
setting = Setting.find_or_initialize_by(name: 'subscription_explications_alert')
|
|
||||||
setting.value = <<~HTML
|
|
||||||
<p><b>Règle sur la date de début des abonnements</b></p>
|
|
||||||
<ul>
|
|
||||||
<li><span style=\"font-size: 1.6rem; line-height: 2.4rem;\">Si vous êtes un nouvel utilisateur - i.e aucune
|
|
||||||
formation d'enregistrée sur le site - votre abonnement débutera à la date de réservation de votre première
|
|
||||||
formation.</span></li>
|
|
||||||
<li><span style="font-size: 1.6rem; line-height: 2.4rem;">Si vous avez déjà une formation ou plus de validée,
|
|
||||||
votre abonnement débutera à la date de votre achat d'abonnement.</span></li>
|
|
||||||
</ul>
|
|
||||||
<p>Merci de bien prendre ses informations en compte, et merci de votre compréhension. L'équipe du Fab Lab.<br>
|
|
||||||
</p>
|
|
||||||
HTML
|
|
||||||
setting.save
|
|
||||||
end
|
|
||||||
|
|
||||||
unless Setting.find_by(name: 'invoice_logo').try(:value)
|
|
||||||
setting = Setting.find_or_initialize_by(name: 'invoice_logo')
|
|
||||||
setting.value = <<~BASE64
|
|
||||||
iVBORw0KGgoAAAANSUhEUgAAAG0AAABZCAYAAAA0E6rtAAAACXBIWXMAAAsTAAALEwEAmpwYAAA57WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94
|
|
||||||
cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIg
|
|
||||||
eDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4
|
|
||||||
bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91
|
|
||||||
dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8v
|
|
||||||
cHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8x
|
|
||||||
LjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9
|
|
||||||
Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFk
|
|
||||||
b2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHht
|
|
||||||
cDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVE
|
|
||||||
YXRlPjIwMTctMDEtMDNUMTE6MTg6MTgrMDE6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNy0wNi0wNlQxNTo1
|
|
||||||
NjoxMiswMjowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTctMDYtMDZUMTU6NTY6MTIrMDI6MDA8L3htcDpN
|
|
||||||
ZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8
|
|
||||||
L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6MmYwMTE5MTMtODI5NS0zOTQ0LWJmZjYtMTY5ZTNh
|
|
||||||
ZTQ5OThlPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6ZGU3ZGE1MmYtNGFi
|
|
||||||
Zi0xMWU3LTljODAtYWJjY2ZlM2JkNzdmPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6
|
|
||||||
YTE5NTAzOTAtOGQwOS0zMzQ3LWFkNGQtMzkyNDQ2YjRiNWJiPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5
|
|
||||||
PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAg
|
|
||||||
ICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmEx
|
|
||||||
OTUwMzkwLThkMDktMzM0Ny1hZDRkLTM5MjQ0NmI0YjViYjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAx
|
|
||||||
Ny0wMS0wM1QxMToxODoxOCswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9z
|
|
||||||
aG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJk
|
|
||||||
ZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAg
|
|
||||||
ICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDoyZjAxMTkxMy04Mjk1LTM5NDQtYmZmNi0xNjllM2FlNDk5OGU8L3N0RXZ0Omlu
|
|
||||||
c3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTctMDYtMDZUMTU6NTY6MTIrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAg
|
|
||||||
ICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4K
|
|
||||||
ICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAg
|
|
||||||
IDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgog
|
|
||||||
ICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcy
|
|
||||||
MDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAg
|
|
||||||
ICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTA5PC9leGlm
|
|
||||||
OlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjg5PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6
|
|
||||||
RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
|
||||||
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
|
|
||||||
BASE64
|
|
||||||
setting.save
|
|
||||||
end
|
|
||||||
|
|
||||||
Setting.set('invoice_reference', 'YYMMmmmX[/VL]R[/A]S[/E]') unless Setting.find_by(name: 'invoice_reference').try(:value)
|
|
||||||
|
|
||||||
Setting.set('invoice_code-active', true) unless Setting.find_by(name: 'invoice_code-active').try(:value)
|
|
||||||
|
|
||||||
Setting.set('invoice_code-value', 'FABMGRFABLAB') unless Setting.find_by(name: 'invoice_code-value').try(:value)
|
|
||||||
|
|
||||||
Setting.set('invoice_order-nb', 'nnnnnn-MM-YY') unless Setting.find_by(name: 'invoice_order-nb').try(:value)
|
|
||||||
|
|
||||||
Setting.set('invoice_VAT-active', false) unless Setting.find_by(name: 'invoice_VAT-active').try(:value)
|
|
||||||
|
|
||||||
Setting.set('invoice_VAT-rate', 20.0) unless Setting.find_by(name: 'invoice_VAT-rate').try(:value)
|
|
||||||
|
|
||||||
Setting.set('invoice_text', I18n.t('invoices.invoice_text_example')) unless Setting.find_by(name: 'invoice_text').try(:value)
|
|
||||||
|
|
||||||
unless Setting.find_by(name: 'invoice_legals').try(:value)
|
|
||||||
setting = Setting.find_or_initialize_by(name: 'invoice_legals')
|
|
||||||
setting.value = 'Fab-manager<br/>' \
|
|
||||||
'41 rue du Colonel Moutarde, 21000 DIJON France<br/>' \
|
|
||||||
'Tél. : +33 1 23 45 67 98<br/>' \
|
|
||||||
'Fax. : +33 1 23 45 67 98<br/>' \
|
|
||||||
'SIRET : 237 082 474 00006 - APE 913 E'
|
|
||||||
setting.save
|
|
||||||
end
|
|
||||||
|
|
||||||
Setting.set('booking_window_start', '1970-01-01 08:00:00') unless Setting.find_by(name: 'booking_window_start').try(:value)
|
|
||||||
|
|
||||||
Setting.set('booking_window_end', '1970-01-01 23:59:59') unless Setting.find_by(name: 'booking_window_end').try(:value)
|
|
||||||
|
|
||||||
Setting.set('booking_move_enable', true) unless Setting.find_by(name: 'booking_move_enable').try(:value)
|
|
||||||
|
|
||||||
Setting.set('booking_move_delay', 24) unless Setting.find_by(name: 'booking_move_delay').try(:value)
|
|
||||||
|
|
||||||
Setting.set('booking_cancel_enable', false) unless Setting.find_by(name: 'booking_cancel_enable').try(:value)
|
|
||||||
|
|
||||||
Setting.set('booking_cancel_delay', 24) unless Setting.find_by(name: 'booking_cancel_delay').try(:value)
|
|
||||||
|
|
||||||
Setting.set('main_color', '#cb1117') unless Setting.find_by(name: 'main_color').try(:value)
|
|
||||||
|
|
||||||
Setting.set('secondary_color', '#ffdd00') unless Setting.find_by(name: 'secondary_color').try(:value)
|
|
||||||
|
|
||||||
Stylesheet.build_theme!
|
Stylesheet.build_theme!
|
||||||
Stylesheet.build_home!
|
Stylesheet.build_home!
|
||||||
|
|
||||||
unless Setting.find_by(name: 'training_information_message').try(:value)
|
|
||||||
setting = Setting.find_or_initialize_by(name: 'training_information_message')
|
|
||||||
setting.value = "Avant de réserver une formation, nous vous conseillons de consulter nos offres d'abonnement qui " \
|
|
||||||
'proposent des conditions avantageuses sur le prix des formations et les créneaux machines.'
|
|
||||||
setting.save
|
|
||||||
end
|
|
||||||
|
|
||||||
Setting.set('fablab_name', 'Fab-manager') unless Setting.find_by(name: 'fablab_name').try(:value)
|
|
||||||
|
|
||||||
Setting.set('name_genre', 'male') unless Setting.find_by(name: 'name_genre').try(:value)
|
|
||||||
|
|
||||||
unless DatabaseProvider.count.positive?
|
unless DatabaseProvider.count.positive?
|
||||||
db_provider = DatabaseProvider.new
|
db_provider = DatabaseProvider.new
|
||||||
db_provider.save
|
db_provider.save
|
||||||
@ -651,317 +242,6 @@ unless DatabaseProvider.count.positive?
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Setting.set('reminder_enable', true) unless Setting.find_by(name: 'reminder_enable').try(:value)
|
|
||||||
|
|
||||||
Setting.set('reminder_delay', 24) unless Setting.find_by(name: 'reminder_delay').try(:value)
|
|
||||||
|
|
||||||
Setting.set('visibility_yearly', 3) unless Setting.find_by(name: 'visibility_yearly').try(:value)
|
|
||||||
|
|
||||||
Setting.set('visibility_others', 1) unless Setting.find_by(name: 'visibility_others').try(:value)
|
|
||||||
|
|
||||||
Setting.set('reservation_deadline', 0) unless Setting.find_by(name: 'reservation_deadline').try(:value)
|
|
||||||
|
|
||||||
Setting.set('display_name_enable', false) unless Setting.find_by(name: 'display_name_enable').try(:value)
|
|
||||||
|
|
||||||
Setting.set('machines_sort_by', 'default') unless Setting.find_by(name: 'machines_sort_by').try(:value)
|
|
||||||
|
|
||||||
unless Setting.find_by(name: 'privacy_draft').try(:value)
|
|
||||||
setting = Setting.find_or_initialize_by(name: 'privacy_draft')
|
|
||||||
setting.value = <<~HTML
|
|
||||||
<p>La présente politique de confidentialité définit et vous informe de la manière dont _________ utilise et protège les
|
|
||||||
informations que vous nous transmettez, le cas échéant, lorsque vous utilisez le présent site accessible à partir de l’URL suivante :
|
|
||||||
_________ (ci-après le « Site »).</p><p>Veuillez noter que cette politique de confidentialité est susceptible d’être modifiée ou
|
|
||||||
complétée à tout moment par _________, notamment en vue de se conformer à toute évolution législative, réglementaire, jurisprudentielle
|
|
||||||
ou technologique. Dans un tel cas, la date de sa mise à jour sera clairement identifiée en tête de la présente politique et l'Utilisateur
|
|
||||||
sera informé par courriel. Ces modifications engagent l’Utilisateur dès leur mise en ligne. Il convient par conséquent que l’Utilisateur
|
|
||||||
consulte régulièrement la présente politique de confidentialité et d’utilisation des cookies afin de prendre connaissance de ses
|
|
||||||
éventuelles modifications.</p><h3>I. DONNÉES PERSONNELLES</h3><p>D’une manière générale, il vous est possible de visiter le site de
|
|
||||||
_________ sans communiquer aucune information personnelle vous concernant. En toute hypothèse, vous n’êtes en aucune manière obligé de
|
|
||||||
transmettre ces informations à _________.</p><p>Néanmoins, en cas de refus, il se peut que vous ne puissiez pas bénéficier de
|
|
||||||
certaines informations ou services que vous avez demandés. À ce titre en effet, _________ peut être amené dans certains cas à vous
|
|
||||||
demander de renseigner votre nom, prénom, pseudonyme, sexe, adresse mail, numéro de téléphone, entreprise et date de naissance (ci-après
|
|
||||||
vos « Informations Personnelles »). En fournissant ces informations, vous acceptez expressément qu’elles soient traitées par
|
|
||||||
_________, aux fins indiquées au point 2 ci-dessous.</p><p>Conformément au Règlement Général sur la Protection des Données (General
|
|
||||||
Data Protection Regulation) adopté par le Parlement européen le 14 avril 2016, et à la Loi Informatique et Libertés du 6 janvier 1978
|
|
||||||
modifiée, _________ vous informe des points suivants :</p><h4>1. Identité du responsable du traitement</h4><p>Le responsable du
|
|
||||||
traitement est (la société/l'association) _________ – (adresse) _________, (code postal) _________ (ville) _________ – (Pays)
|
|
||||||
_________ .</p><h4>2. Finalités du traitement</h4><p>_________ est susceptible de traiter vos Informations Personnelles :</p><p>(a)
|
|
||||||
aux fins de vous fournir les informations ou les services que vous avez demandés (notamment : l'envoi de notifications relatives à
|
|
||||||
vos activités sur le Site, l’envoi de la Newsletter, la correspondance par email, l’envoi d’informations commerciales, livres
|
|
||||||
blancs ou encore l’évaluation de votre niveau de satisfaction quant aux services proposés) ;</p><p>(b) aux fins de recueillir des
|
|
||||||
informations nous permettant d’améliorer notre Site, nos produits et services (notamment par le biais de cookies) ;</p><p>(c)
|
|
||||||
aux fins de pouvoir vous contacter à propos de différents événements relatifs à _________, incluant notamment la mise à jour des
|
|
||||||
produits et le support client.</p><h4>3. Destinataires</h4><p>Seul _________ est destinataire de vos Informations Personnelles.
|
|
||||||
Celles-ci, que ce soit sous forme individuelle ou agrégée, ne sont jamais transmises à un tiers, nonobstant les sous-traitants
|
|
||||||
auxquels _________ fait appel (vous trouverez de plus amples informations à leur sujet au point 7 ci-dessous). Ni _________,
|
|
||||||
ni l’un quelconque de ses sous-traitants, ne procèdent à la commercialisation des données personnelles des visiteurs et Utilisateurs de
|
|
||||||
son Site.</p><h4>4. Durée de conservation</h4><p>Vos Informations Personnelles sont conservées par _________ uniquement pour le temps
|
|
||||||
correspondant à la finalité de la collecte tel qu’indiqué en 2 ci-dessus qui ne saurait en tout état de cause excéder 36 mois.</p><h4>5.
|
|
||||||
Droits Informatique et Libertés</h4><p>Vous disposez des droits suivants concernant vos Informations Personnelles, que vous pouvez exercer
|
|
||||||
en nous écrivant à l’adresse postale mentionnée au point 1 ou en contactant le délégué à la protection des données, dont l'adresse est
|
|
||||||
mentionnée ci-contre.</p><p><b>o Droit d’accès et de communication des données</b></p><p>Vous avez la faculté d’accéder aux Informations
|
|
||||||
Personnelles qui vous concernent.</p><p>Cependant, en raison de l’obligation de sécurité et de confidentialité dans le traitement des
|
|
||||||
données à caractère personnel qui incombe à _________, vous êtes informé que votre demande sera traitée sous réserve que vous apportiez la
|
|
||||||
preuve de votre identité, notamment par la production d’un scan de votre titre d’identité valide (en cas de demande par voie électronique)
|
|
||||||
ou d’une photocopie signée de votre titre d’identité valide (en cas de demande adressée par écrit).</p><p>_________ vous informe qu’il
|
|
||||||
sera en droit, le cas échéant, de s’opposer aux demandes manifestement abusives (de par leur nombre, leur caractère répétitif ou
|
|
||||||
systématique).</p><p>Pour vous aider dans votre démarche, notamment si vous désirez exercer votre droit d’accès par le biais d’une
|
|
||||||
demande écrite à l’adresse postale mentionnée au point 1, vous trouverez en cliquant sur le <a
|
|
||||||
href="https://www.cnil.fr/fr/modele/courrier/exercer-son-droit-dacces">lien</a> suivant un modèle de courrier élaboré par la Commission
|
|
||||||
Nationale de l’Informatique et des Libertés (la « CNIL »).</p><p><b>o Droit de rectification des données</b></p><p>Au titre de ce droit,
|
|
||||||
la législation vous habilite à demander la rectification, la mise à jour, le verrouillage ou encore l’effacement des données vous
|
|
||||||
concernant qui peuvent s’avérer le cas échéant inexactes, erronées, incomplètes ou obsolètes.</p><p>Egalement, vous pouvez définir des
|
|
||||||
directives générales et particulières relatives au sort des données à caractère personnel après votre décès. Le cas échéant, les héritiers
|
|
||||||
d’une personne décédée peuvent exiger de prendre en considération le décès de leur proche et/ou de procéder aux mises à jour nécessaires.
|
|
||||||
</p><p>Pour vous aider dans votre démarche, notamment si vous désirez exercer, pour votre propre compte ou pour le compte de l’un de vos
|
|
||||||
proches défunt, votre droit de rectification par le biais d’une demande écrite à l’adresse postale mentionnée au point 1, vous trouverez
|
|
||||||
en cliquant sur le <a href="https://www.cnil.fr/fr/modele/courrier/rectifier-des-donnees-inexactes-obsoletes-ou-perimees">lien</a>
|
|
||||||
suivant un modèle de courrier élaboré par la CNIL.</p><p><b>o Droit d’opposition</b></p><p>L’exercice de ce droit n’est possible que dans
|
|
||||||
l’une des deux situations suivantes :</p><p>Lorsque l’exercice de ce droit est fondé sur des motifs légitimes ; ou</p><p>Lorsque
|
|
||||||
l’exercice de ce droit vise à faire obstacle à ce que les données recueillies soient utilisées à des fins de prospection commerciale.</p>
|
|
||||||
<p>Pour vous aider dans votre démarche, notamment si vous désirez exercer votre droit d’opposition par le biais d’une demande écrite
|
|
||||||
adressée à l’adresse postale indiquée au point 1, vous trouverez en cliquant sur le <a
|
|
||||||
href="https://www.cnil.fr/fr/modele/courrier/supprimer-des-informations-vous-concernant-dun-site-internet">lien</a> suivant un modèle de
|
|
||||||
courrier élaboré par la CNIL.</p><h4>6. Délais de réponse</h4><p> _________ s’engage à répondre à votre demande d’accès, de rectification
|
|
||||||
ou d’opposition ou toute autre demande complémentaire d’informations dans un délai raisonnable qui ne saurait dépasser 1 mois à compter
|
|
||||||
de la réception de votre demande.</p><h4>7. Prestataires habilités et transfert vers un pays tiers de l’Union Européenne</h4><p>_________
|
|
||||||
vous informe qu’il a recours à ses prestataires habilités pour faciliter le recueil et le traitement des données que vous nous avez
|
|
||||||
communiquées. Ces prestataires peuvent être situés en dehors de l’Union Européenne et ont communication des données recueillies par le
|
|
||||||
biais des divers formulaires présents sur le Site.</p><p>_________ s’est préalablement assuré de la mise en œuvre par ses prestataires de
|
|
||||||
garanties adéquates et du respect de conditions strictes en matière de confidentialité, d’usage et de protection des données. Tout
|
|
||||||
particulièrement, la vigilance s’est portée sur l’existence d’un fondement légal pour effectuer un quelconque transfert de données vers un
|
|
||||||
pays tiers. A ce titre, l’un de nos prestataires est soumis à (nom de la règle) _________ approuvées par la (nom de l'autorité) _________
|
|
||||||
en (année d'approbation) _________.</p><h4>8. Plainte auprès de l’autorité compétente</h4><p>Si vous considérez que _________ ne
|
|
||||||
respecte pas ses obligations au regard de vos Informations Personnelles, vous pouvez adresser une plainte ou une demande auprès de
|
|
||||||
l’autorité compétente. En France, l’autorité compétente est la CNIL à laquelle vous pouvez adresser une demande par voie électronique en
|
|
||||||
cliquant sur le lien suivant : <a href="https://www.cnil.fr/fr/plaintes/internet">https://www.cnil.fr/fr/plaintes/internet</a>.</p>
|
|
||||||
<h3>II. POLITIQUE RELATIVE AUX COOKIES</h3><p>Lors de votre première connexion sur le site web de _________, vous êtes avertis par un
|
|
||||||
bandeau en bas de votre écran que des informations relatives à votre navigation sont susceptibles d’être enregistrées dans des fichiers
|
|
||||||
dénommés « cookies ». Notre politique d’utilisation des cookies vous permet de mieux comprendre les dispositions que nous mettons en œuvre
|
|
||||||
en matière de navigation sur notre site web. Elle vous informe notamment sur l’ensemble des cookies présents sur notre site web, leur
|
|
||||||
finalité (partie I.) et vous donne la marche à suivre pour les paramétrer (partie II.)</p><h4>1. Informations générales sur les cookies
|
|
||||||
présents sur le site de _________</h4><p>_________, en tant qu’éditeur du présent site web, pourra procéder à l’implantation d’un cookie
|
|
||||||
sur le disque dur de votre terminal (ordinateur, tablette, mobile etc.) afin de vous garantir une navigation fluide et optimale sur notre
|
|
||||||
site Internet.</p><p>Les « cookies » (ou témoins de connexion) sont des petits fichiers texte de taille limitée qui nous permettent de
|
|
||||||
reconnaître votre ordinateur, votre tablette ou votre mobile aux fins de personnaliser les services que nous vous proposons.</p><p>Les
|
|
||||||
informations recueillies par le biais des cookies ne permettent en aucune manière de vous identifier nominativement. Elles sont utilisées
|
|
||||||
exclusivement pour nos besoins propres afin d’améliorer l’interactivité et la performance de notre site web et de vous adresser des
|
|
||||||
contenus adaptés à vos centres d’intérêts. Aucune de ces informations ne fait l’objet d’une communication auprès de tiers sauf lorsque
|
|
||||||
_________ a obtenu au préalable votre consentement ou bien lorsque la divulgation de ces informations est requise par la loi, sur ordre
|
|
||||||
d’un tribunal ou toute autorité administrative ou judiciaire habilitée à en connaître.</p><p>Pour mieux vous éclairer sur les informations
|
|
||||||
que les cookies identifient, vous trouverez ci-dessous un tableau listant les différents types de cookies susceptibles d’être utilisés sur
|
|
||||||
le site web de _________, leur nom, leur finalité ainsi que leur durée de conservation.</p><h4>2. Configuration de vos préférences sur les
|
|
||||||
cookies</h4><p>Vous pouvez accepter ou refuser le dépôt de cookies à tout moment.</p><p>Lors de votre première connexion sur le site web
|
|
||||||
de _________, une bannière présentant brièvement des informations relatives au dépôt de cookies et de technologies similaires apparaît en
|
|
||||||
bas de votre écran. Cette bannière vous demande de choisir explicitement d'accepter ou non le dépôt de cookies sur votre terminal.
|
|
||||||
</p><p>Après avoir fait votre choix, vous pouvez le modifier ultérieurement en vous connectant à votre compte utilisateur puis en
|
|
||||||
naviguant dans la section intitulée « mes paramètres », accessible via un clic sur votre nom, en haut à droite de l'écran.</p>
|
|
||||||
<p>Selon le type de cookie en cause, le recueil de votre consentement au dépôt et à la lecture de cookies sur votre terminal peut être
|
|
||||||
impératif.</p><h4>a. Les cookies exemptés de consentement</h4><p>Conformément aux recommandations de la Commission Nationale de
|
|
||||||
l’Informatique et des Libertés (CNIL), certains cookies sont dispensés du recueil préalable de votre consentement dans la mesure où ils
|
|
||||||
sont strictement nécessaires au fonctionnement du site internet ou ont pour finalité exclusive de permettre ou faciliter la communication
|
|
||||||
par voie électronique. Il s’agit des cookies suivants :</p><p><b>o Identifiant de session</b> et <b>d'authentification</b> sur l'API de
|
|
||||||
Fab-manager.</p><p><b>o Identifiant de panier d'achat</b></b>, permettant de sauvegarder le contenu de votre panier d'achat, même lorsque
|
|
||||||
vous n'êtes pas connecté.</p>
|
|
||||||
<p><em>Les cookies ci-dessus sont intégralement soumis à la présente politique dans la mesure où ils sont émis et gérés par _________.</em></p>
|
|
||||||
<p><b>o Stripe</b>, permettant de gérer les paiements par carte bancaire et dont la politique de confidentialité est accessible sur ce
|
|
||||||
<a href="https://stripe.com/fr/privacy">lien</a>.</p><p><b>o Disqus</b>, permettant de poster des commentaires sur les fiches projet et
|
|
||||||
dont la politique de confidentialité est accessible sur ce <a href="https://help.disqus.com/articles/1717103-disqus-privacy-policy">lien
|
|
||||||
</a>.</p><h4>b. Les cookies nécessitant le recueil préalable de votre consentement</h4><p>Cette
|
|
||||||
exigence concerne les cookies émis par des tiers et qui sont qualifiés de « persistants » dans la mesure où ils demeurent dans votre
|
|
||||||
terminal jusqu’à leur effacement ou leur date d’expiration.</p><p>De tels cookies étant émis par des tiers, leur utilisation et leur dépôt
|
|
||||||
sont soumis à leurs propres politiques de confidentialité dont vous trouverez un lien ci-dessous. Cette famille de cookie comprend les
|
|
||||||
cookies de mesure d’audience (Google Analytics).</p><p>Les cookies de mesure d’audience établissent des statistiques concernant la
|
|
||||||
fréquentation et l’utilisation de divers éléments du site web (comme les contenus/pages que vous avez visité).
|
|
||||||
Ces données participent à l’amélioration de l’ergonomie du site web de _________. Un outil de mesure d’audience est utilisé sur le
|
|
||||||
présent site internet :</p><p><b>o Google Analytics</b> pour gérer les statistiques de visites dont la politique de
|
|
||||||
confidentialité est disponible (uniquement en anglais) à partir du <a href="https://policies.google.com/privacy?hl=fr&gl=ZZ">lien
|
|
||||||
</a> suivant. </p><h4>c. Vous disposez de divers outils de paramétrage des cookies</h4><p>La plupart
|
|
||||||
des navigateurs Internet sont configurés par défaut de façon à ce que le dépôt de cookies soit autorisé. Votre navigateur vous offre
|
|
||||||
l’opportunité de modifier ces paramètres standards de manière que l’ensemble des cookies soit rejeté systématiquement ou bien à ce
|
|
||||||
qu’une partie seulement des cookies soit acceptée ou refusée en fonction de leur émetteur.</p><p><b>ATTENTION</b> : Nous attirons votre
|
|
||||||
attention sur le fait que le refus du dépôt de cookies sur votre terminal est néanmoins susceptible d’altérer votre expérience
|
|
||||||
d’utilisateur ainsi que votre accès à certains services ou fonctionnalités du présent site web. Le cas échéant, _________ décline toute
|
|
||||||
responsabilité concernant les conséquences liées à la dégradation de vos conditions de navigation qui interviennent en raison de votre
|
|
||||||
choix de refuser, supprimer ou bloquer les cookies nécessaires au fonctionnement du site.
|
|
||||||
Ces conséquences ne sauraient constituer un dommage et vous ne pourrez prétendre à aucune indemnité de ce fait.</p>
|
|
||||||
<p>Votre navigateur vous permet également de supprimer les cookies existants sur votre
|
|
||||||
terminal ou encore de vous signaler lorsque de nouveaux cookies sont susceptibles d’être déposés sur votre terminal. Ces paramètres n’ont
|
|
||||||
pas d’incidence sur votre navigation, mais vous font perdre tout le bénéfice apporté par le cookie.</p><p>Veuillez ci-dessous prendre
|
|
||||||
connaissance des multiples outils mis à votre disposition afin que vous puissiez paramétrer les cookies déposés sur votre terminal.</p>
|
|
||||||
<h4>d. Le paramétrage de votre navigateur Internet</h4><p>Chaque navigateur Internet propose ses propres paramètres de gestion des
|
|
||||||
cookies. Pour savoir de quelle manière modifier vos préférences en matière de cookies, vous trouverez ci-dessous les liens vers l’aide
|
|
||||||
nécessaire pour accéder au menu de votre navigateur prévu à cet effet :</p>
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://support.google.com/chrome/answer/95647?hl=fr">Chrome</a></li>
|
|
||||||
<li><a href="https://mzl.la/3BX2oBb">Firefox</a></li>
|
|
||||||
<li><a href="https://support.microsoft.com/fr-fr/microsoft-edge/supprimer-les-cookies-dans-microsoft-edge-63947406-40ac-c3b8-57b9-2a946a29ae09">
|
|
||||||
Microsoft Edge</a></li>
|
|
||||||
<li><a href="https://help.opera.com/en/latest/web-preferences/#cookies">Opera</a></li>
|
|
||||||
<li><a href="https://support.apple.com/fr-fr/HT201265">Safari</a></li>
|
|
||||||
</ul>
|
|
||||||
<p>Pour de plus amples informations concernant les outils de maîtrise des cookies, vous pouvez consulter le
|
|
||||||
<a href="https://www.cnil.fr/fr/cookies-et-autres-traceurs/comment-se-proteger/maitriser-votre-navigateur">site internet</a> de la CNIL.</p>
|
|
||||||
HTML
|
|
||||||
setting.save
|
|
||||||
end
|
|
||||||
|
|
||||||
Setting.set('fab_analytics', true) unless Setting.find_by(name: 'fab_analytics').try(:value)
|
|
||||||
|
|
||||||
unless Setting.find_by(name: 'link_name').try(:value)
|
|
||||||
include ApplicationHelper # rubocop:disable Style/MixinUsage
|
|
||||||
|
|
||||||
name = Setting.get('fablab_name')
|
|
||||||
gender = Setting.get('name_genre')
|
|
||||||
setting = Setting.find_or_initialize_by(name: 'link_name')
|
|
||||||
setting.value = _t('app.public.common.about_the_fablab', NAME: name, GENDER: gender)
|
|
||||||
setting.save
|
|
||||||
end
|
|
||||||
|
|
||||||
unless Setting.find_by(name: 'home_content').try(:value)
|
|
||||||
setting = Setting.find_or_initialize_by(name: 'home_content')
|
|
||||||
setting.value = <<~HTML
|
|
||||||
<div>
|
|
||||||
<div class="m-sm">
|
|
||||||
<div id="news">#{I18n.t('app.admin.settings.item_news')}</div>
|
|
||||||
</div>
|
|
||||||
<div class="row wrapper">
|
|
||||||
<div class="col-lg-8">
|
|
||||||
<div id="projects">#{I18n.t('app.admin.settings.item_projects')}</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-4 m-t-lg">
|
|
||||||
<div id="twitter">#{I18n.t('app.admin.settings.item_twitter')}</div>
|
|
||||||
<div id="members">#{I18n.t('app.admin.settings.item_members')}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="row wrapper m-t-sm">
|
|
||||||
<div class="col-lg-12">
|
|
||||||
<div id="events">#{I18n.t('app.admin.settings.item_events')}</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
HTML
|
|
||||||
setting.save
|
|
||||||
end
|
|
||||||
|
|
||||||
Setting.set('slot_duration', 60) unless Setting.find_by(name: 'slot_duration').try(:value)
|
|
||||||
|
|
||||||
Setting.set('spaces_module', false) unless Setting.find_by(name: 'spaces_module').try(:value)
|
|
||||||
|
|
||||||
Setting.set('plans_module', true) unless Setting.find_by(name: 'plans_module').try(:value)
|
|
||||||
|
|
||||||
Setting.set('invoicing_module', true) unless Setting.find_by(name: 'invoicing_module').try(:value)
|
|
||||||
|
|
||||||
Setting.set('feature_tour_display', 'once') unless Setting.find_by(name: 'feature_tour_display').try(:value)
|
|
||||||
|
|
||||||
Setting.set('email_from', 'noreply@fab-manager.com') unless Setting.find_by(name: 'email_from').try(:value)
|
|
||||||
|
|
||||||
Setting.set('online_payment_module', false) unless Setting.find_by(name: 'online_payment_module').try(:value)
|
|
||||||
|
|
||||||
Setting.set('openlab_default', true) unless Setting.find_by(name: 'openlab_default').try(:value)
|
|
||||||
|
|
||||||
unless Setting.find_by(name: 'allowed_cad_extensions').try(:value)
|
|
||||||
Setting.set(
|
|
||||||
'allowed_cad_extensions',
|
|
||||||
'pdf ai eps cad math svg stl dxf dwg obj step iges igs 3dm 3dmf doc docx png ino scad fcad skp sldprt sldasm slddrw' \
|
|
||||||
'slddrt tex latex ps fcstd fcstd1'
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
unless Setting.find_by(name: 'allowed_cad_mime_types').try(:value)
|
|
||||||
Setting.set(
|
|
||||||
'allowed_cad_mime_types',
|
|
||||||
'application/pdf application/postscript application/illustrator image/x-eps image/svg+xml application/sla application/dxf ' \
|
|
||||||
'application/acad application/dwg application/octet-stream application/step application/iges model/iges x-world/x-3dmf ' \
|
|
||||||
'application/vnd.openxmlformats-officedocument.wordprocessingml.document image/png text/x-arduino text/plain application/scad ' \
|
|
||||||
'application/vnd.sketchup.skp application/x-koan application/vnd-koan koan/x-skm application/vnd.koan application/x-tex ' \
|
|
||||||
'application/x-latex application/x-extension-fcstd'
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
Setting.set('stripe_currency', 'EUR') unless Setting.find_by(name: 'stripe_currency').try(:value)
|
|
||||||
|
|
||||||
Setting.set('invoice_prefix', 'FabManager_invoice') unless Setting.find_by(name: 'invoice_prefix').try(:value)
|
|
||||||
|
|
||||||
Setting.set('payment_schedule_prefix', 'FabManager_paymentSchedule') unless Setting.find_by(name: 'payment_schedule_prefix').try(:value)
|
|
||||||
|
|
||||||
Setting.set('confirmation_required', false) unless Setting.find_by(name: 'confirmation_required').try(:value)
|
|
||||||
|
|
||||||
Setting.set('user_validation_required', false) unless Setting.find_by(name: 'user_validation_required').try(:value)
|
|
||||||
|
|
||||||
Setting.set('user_validation_required_list', '') unless Setting.find_by(name: 'user_validation_required_list').try(:value)
|
|
||||||
|
|
||||||
Setting.set('wallet_module', true) unless Setting.find_by(name: 'wallet_module').try(:value)
|
|
||||||
|
|
||||||
Setting.set('statistics_module', true) unless Setting.find_by(name: 'statistics_module').try(:value)
|
|
||||||
|
|
||||||
Setting.set('machines_module', true) unless Setting.find_by(name: 'machines_module').try(:value)
|
|
||||||
|
|
||||||
Setting.set('upcoming_events_shown', 'until_start') unless Setting.find_by(name: 'upcoming_events_shown').try(:value)
|
|
||||||
|
|
||||||
Setting.set('trainings_module', true) unless Setting.find_by(name: 'trainings_module').try(:value)
|
|
||||||
|
|
||||||
Setting.set('public_agenda_module', true) unless Setting.find_by(name: 'public_agenda_module').try(:value)
|
|
||||||
|
|
||||||
Setting.set('renew_pack_threshold', 0.2) unless Setting.find_by(name: 'renew_pack_threshold').try(:value)
|
|
||||||
|
|
||||||
Setting.set('pack_only_for_subscription', true) unless Setting.find_by(name: 'pack_only_for_subscription').try(:value)
|
|
||||||
|
|
||||||
Setting.set('public_registrations', true) unless Setting.find_by(name: 'public_registrations').try(:value)
|
|
||||||
|
|
||||||
Setting.set('user_change_group', true) unless Setting.find_by(name: 'user_change_group').try(:value)
|
|
||||||
|
|
||||||
Setting.set('invoice_VAT-name', I18n.t('invoices.VAT')) unless Setting.find_by(name: 'invoice_VAT-name').try(:value)
|
|
||||||
|
|
||||||
unless Setting.find_by(name: 'overlapping_categories').try(:value)
|
|
||||||
Setting.set('overlapping_categories', 'training_reservations,machine_reservations,space_reservations,events_reservations')
|
|
||||||
end
|
|
||||||
|
|
||||||
Setting.set('extended_prices_in_same_day', false) unless Setting.find_by(name: 'extended_prices_in_same_day').try(:value)
|
|
||||||
|
|
||||||
Setting.set('show_username_in_admin_list', false) unless Setting.find_by(name: 'show_username_in_admin_list').try(:value)
|
|
||||||
|
|
||||||
Setting.set('store_module', false) unless Setting.find_by(name: 'store_module').try(:value)
|
|
||||||
|
|
||||||
Setting.set('store_hidden', true) unless Setting.find_by(name: 'store_hidden').try(:value)
|
|
||||||
|
|
||||||
Setting.set('advanced_accounting', false) unless Setting.find_by(name: 'advanced_accounting').try(:value)
|
|
||||||
|
|
||||||
Setting.set('accounting_sales_journal_code', 'SALES') unless Setting.find_by(name: 'accounting_sales_journal_code').try(:value)
|
|
||||||
Setting.set('accounting_payment_card_code', '5801') unless Setting.find_by(name: 'accounting_payment_card_code').try(:value)
|
|
||||||
Setting.set('accounting_payment_card_label', 'Cards payments') unless Setting.find_by(name: 'accounting_payment_card_label').try(:value)
|
|
||||||
Setting.set('accounting_payment_card_journal_code', 'CA01') unless Setting.find_by(name: 'accounting_payment_card_journal_code').try(:value)
|
|
||||||
Setting.set('accounting_payment_wallet_code', '5802') unless Setting.find_by(name: 'accounting_payment_wallet_code').try(:value)
|
|
||||||
Setting.set('accounting_payment_wallet_label', 'Wallet payments') unless Setting.find_by(name: 'accounting_payment_wallet_label').try(:value)
|
|
||||||
Setting.set('accounting_payment_wallet_journal_code', 'WA01') unless Setting.find_by(name: 'accounting_payment_wallet_journal_code').try(:value)
|
|
||||||
Setting.set('accounting_payment_other_code', '5803') unless Setting.find_by(name: 'accounting_payment_other_code').try(:value)
|
|
||||||
Setting.set('accounting_payment_other_label', 'Payments on site') unless Setting.find_by(name: 'accounting_payment_other_label').try(:value)
|
|
||||||
Setting.set('accounting_payment_other_journal_code', 'SI01') unless Setting.find_by(name: 'accounting_payment_other_journal_code').try(:value)
|
|
||||||
Setting.set('accounting_wallet_code', '4191') unless Setting.find_by(name: 'accounting_wallet_code').try(:value)
|
|
||||||
Setting.set('accounting_wallet_label', 'Wallet credit') unless Setting.find_by(name: 'accounting_wallet_label').try(:value)
|
|
||||||
Setting.set('accounting_wallet_journal_code', 'WC01') unless Setting.find_by(name: 'accounting_wallet_journal_code').try(:value)
|
|
||||||
Setting.set('accounting_VAT_code', '4457') unless Setting.find_by(name: 'accounting_VAT_code').try(:value)
|
|
||||||
Setting.set('accounting_VAT_label', 'Collected VAT') unless Setting.find_by(name: 'accounting_VAT_label').try(:value)
|
|
||||||
Setting.set('accounting_VAT_journal_code', 'VAT1') unless Setting.find_by(name: 'accounting_VAT_journal_code').try(:value)
|
|
||||||
Setting.set('accounting_subscription_code', '7061') unless Setting.find_by(name: 'accounting_subscription_code').try(:value)
|
|
||||||
Setting.set('accounting_subscription_label', 'Subscriptions') unless Setting.find_by(name: 'accounting_subscription_label').try(:value)
|
|
||||||
Setting.set('accounting_Machine_code', '7602') unless Setting.find_by(name: 'accounting_Machine_code').try(:value)
|
|
||||||
Setting.set('accounting_Machine_label', 'Machines reservations') unless Setting.find_by(name: 'accounting_Machine_label').try(:value)
|
|
||||||
Setting.set('accounting_Training_code', '7063') unless Setting.find_by(name: 'accounting_Training_code').try(:value)
|
|
||||||
Setting.set('accounting_Training_label', 'Trainings reservations') unless Setting.find_by(name: 'accounting_Training_label').try(:value)
|
|
||||||
Setting.set('accounting_Event_code', '7064') unless Setting.find_by(name: 'accounting_Event_code').try(:value)
|
|
||||||
Setting.set('accounting_Event_label', 'Events reservations') unless Setting.find_by(name: 'accounting_Event_label').try(:value)
|
|
||||||
Setting.set('accounting_Space_code', '7065') unless Setting.find_by(name: 'accounting_Space_code').try(:value)
|
|
||||||
Setting.set('accounting_Space_label', 'Spaces reservations') unless Setting.find_by(name: 'accounting_Space_label').try(:value)
|
|
||||||
Setting.set('accounting_Pack_code', '7066') unless Setting.find_by(name: 'accounting_Pack_code').try(:value)
|
|
||||||
Setting.set('accounting_Pack_label', 'Prepaid-packs selling') unless Setting.find_by(name: 'accounting_Pack_label').try(:value)
|
|
||||||
Setting.set('accounting_Product_code', '7071') unless Setting.find_by(name: 'accounting_Product_code').try(:value)
|
|
||||||
Setting.set('accounting_Product_label', 'Merchandise selling') unless Setting.find_by(name: 'accounting_Product_label').try(:value)
|
|
||||||
Setting.set('accounting_Error_code', 'ERROR') unless Setting.find_by(name: 'accounting_Error_code').try(:value)
|
|
||||||
Setting.set('accounting_Error_label', 'Erroneous invoices to refund') unless Setting.find_by(name: 'accounting_Error_label').try(:value)
|
|
||||||
|
|
||||||
Setting.set('external_id', false) unless Setting.find_by(name: 'external_id').try(:value)
|
|
||||||
|
|
||||||
ProfileCustomField.find_or_create_by(label: 'N° SIRET')
|
ProfileCustomField.find_or_create_by(label: 'N° SIRET')
|
||||||
ProfileCustomField.find_or_create_by(label: 'Code NAF')
|
ProfileCustomField.find_or_create_by(label: 'Code NAF')
|
||||||
ProfileCustomField.find_or_create_by(label: 'N° TVA intracommunautaire')
|
ProfileCustomField.find_or_create_by(label: 'N° TVA intracommunautaire')
|
||||||
|
722
db/seeds/settings.rb
Normal file
722
db/seeds/settings.rb
Normal file
@ -0,0 +1,722 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
# default values for settings
|
||||||
|
unless Setting.find_by(name: 'about_body').try(:value)
|
||||||
|
setting = Setting.find_or_initialize_by(name: 'about_body')
|
||||||
|
setting.value = <<~HTML
|
||||||
|
<p>
|
||||||
|
<a href="http://fab-manager.com" target="_blank">Fab-manager</a> est outil de gestion des atelier de fabrication
|
||||||
|
numérique, permettant de réserver des machines de découpe, des imprimantes 3D, etc. tout en gérant simplement
|
||||||
|
les aspect financier, comptable et statistiques de votre espace.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<a href="http://fab-manager.com" target="_blank">Fab-manager</a> est un projet libre : ouvert à tous, il offre la
|
||||||
|
possibilité de contribuer soi-même au code, de télécharger le logiciel, de l'étudier et de le redistribuer. Vous
|
||||||
|
n'êtes pas technicien ? Vous pouvez quand même participer à <a href="https://translate.fab-manager.com/">traduire
|
||||||
|
Fab-manager dans votre langue</a>.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Fab-manager favorise le partage de connaissances grâce au réseau OpenLab : les projets que vous documentez sont
|
||||||
|
partagés avec l'ensemble du réseau des Fab-managers.
|
||||||
|
</p>
|
||||||
|
HTML
|
||||||
|
setting.save
|
||||||
|
end
|
||||||
|
|
||||||
|
Setting.set('about_title', 'Imaginer, Fabriquer, <br>Partager avec Fab-manager') unless Setting.find_by(name: 'about_title').try(:value)
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'about_contacts').try(:value)
|
||||||
|
setting = Setting.find_or_initialize_by(name: 'about_contacts')
|
||||||
|
setting.value = <<~HTML
|
||||||
|
<dl>
|
||||||
|
<dt>Support technique :</dt>
|
||||||
|
<dd><a href="https://forum.fab-manager.com">Forum</a></dd>
|
||||||
|
<dd><a href="https://feedback.fab-manager.com">Feedback</a></dd>
|
||||||
|
<dd><a href="https://github.com/sleede/fab-manager/">GitHub</a></dd>
|
||||||
|
</dl>
|
||||||
|
<br><br>
|
||||||
|
<p><a href='http://fab-manager.com'>Visitez le site de Fab-manager</a></p>
|
||||||
|
HTML
|
||||||
|
setting.save
|
||||||
|
end
|
||||||
|
|
||||||
|
Setting.set('twitter_name', 'Fab_Manager') unless Setting.find_by(name: 'twitter_name').try(:value)
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'machine_explications_alert').try(:value)
|
||||||
|
setting = Setting.find_or_initialize_by(name: 'machine_explications_alert')
|
||||||
|
setting.value = 'Tout achat de créneau machine est définitif. Aucune ' \
|
||||||
|
'annulation ne pourra être effectuée, néanmoins au plus tard 24h avant le créneau fixé, vous pouvez en ' \
|
||||||
|
"modifier la date et l'horaire à votre convenance et en fonction du calendrier proposé. Passé ce délais, " \
|
||||||
|
'aucun changement ne pourra être effectué.'
|
||||||
|
setting.save
|
||||||
|
end
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'training_explications_alert').try(:value)
|
||||||
|
setting = Setting.find_or_initialize_by(name: 'training_explications_alert')
|
||||||
|
setting.value = 'Toute réservation de formation est définitive. ' \
|
||||||
|
'Aucune annulation ne pourra être effectuée, néanmoins au plus tard 24h avant le créneau fixé, vous pouvez ' \
|
||||||
|
"en modifier la date et l'horaire à votre convenance et en fonction du calendrier proposé. Passé ce délais, " \
|
||||||
|
'aucun changement ne pourra être effectué.'
|
||||||
|
setting.save
|
||||||
|
end
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'subscription_explications_alert').try(:value)
|
||||||
|
setting = Setting.find_or_initialize_by(name: 'subscription_explications_alert')
|
||||||
|
setting.value = <<~HTML
|
||||||
|
<p><b>Règle sur la date de début des abonnements</b></p>
|
||||||
|
<ul>
|
||||||
|
<li><span style=\"font-size: 1.6rem; line-height: 2.4rem;\">Si vous êtes un nouvel utilisateur - i.e aucune
|
||||||
|
formation d'enregistrée sur le site - votre abonnement débutera à la date de réservation de votre première
|
||||||
|
formation.</span></li>
|
||||||
|
<li><span style="font-size: 1.6rem; line-height: 2.4rem;">Si vous avez déjà une formation ou plus de validée,
|
||||||
|
votre abonnement débutera à la date de votre achat d'abonnement.</span></li>
|
||||||
|
</ul>
|
||||||
|
<p>Merci de bien prendre ses informations en compte, et merci de votre compréhension. L'équipe du Fab Lab.<br>
|
||||||
|
</p>
|
||||||
|
HTML
|
||||||
|
setting.save
|
||||||
|
end
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'invoice_logo').try(:value)
|
||||||
|
setting = Setting.find_or_initialize_by(name: 'invoice_logo')
|
||||||
|
setting.value = <<~BASE64
|
||||||
|
iVBORw0KGgoAAAANSUhEUgAAAG0AAABZCAYAAAA0E6rtAAAACXBIWXMAAAsTAAALEwEAmpwYAAA57WlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94
|
||||||
|
cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIg
|
||||||
|
eDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogICA8cmRmOlJERiB4
|
||||||
|
bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91
|
||||||
|
dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8v
|
||||||
|
cHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8x
|
||||||
|
LjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9
|
||||||
|
Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFk
|
||||||
|
b2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHht
|
||||||
|
cDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNyAoV2luZG93cyk8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgICAgPHhtcDpDcmVhdGVE
|
||||||
|
YXRlPjIwMTctMDEtMDNUMTE6MTg6MTgrMDE6MDA8L3htcDpDcmVhdGVEYXRlPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNy0wNi0wNlQxNTo1
|
||||||
|
NjoxMiswMjowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMTctMDYtMDZUMTU6NTY6MTIrMDI6MDA8L3htcDpN
|
||||||
|
ZXRhZGF0YURhdGU+CiAgICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2UvcG5nPC9kYzpmb3JtYXQ+CiAgICAgICAgIDxwaG90b3Nob3A6Q29sb3JNb2RlPjM8
|
||||||
|
L3Bob3Rvc2hvcDpDb2xvck1vZGU+CiAgICAgICAgIDx4bXBNTTpJbnN0YW5jZUlEPnhtcC5paWQ6MmYwMTE5MTMtODI5NS0zOTQ0LWJmZjYtMTY5ZTNh
|
||||||
|
ZTQ5OThlPC94bXBNTTpJbnN0YW5jZUlEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6ZGU3ZGE1MmYtNGFi
|
||||||
|
Zi0xMWU3LTljODAtYWJjY2ZlM2JkNzdmPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6
|
||||||
|
YTE5NTAzOTAtOGQwOS0zMzQ3LWFkNGQtMzkyNDQ2YjRiNWJiPC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5
|
||||||
|
PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAg
|
||||||
|
ICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOmEx
|
||||||
|
OTUwMzkwLThkMDktMzM0Ny1hZDRkLTM5MjQ0NmI0YjViYjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAx
|
||||||
|
Ny0wMS0wM1QxMToxODoxOCswMTowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9z
|
||||||
|
aG9wIENDIDIwMTcgKFdpbmRvd3MpPC9zdEV2dDpzb2Z0d2FyZUFnZW50PgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJk
|
||||||
|
ZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAg
|
||||||
|
ICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDoyZjAxMTkxMy04Mjk1LTM5NDQtYmZmNi0xNjllM2FlNDk5OGU8L3N0RXZ0Omlu
|
||||||
|
c3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDp3aGVuPjIwMTctMDYtMDZUMTU6NTY6MTIrMDI6MDA8L3N0RXZ0OndoZW4+CiAgICAgICAg
|
||||||
|
ICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE3IChXaW5kb3dzKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4K
|
||||||
|
ICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAg
|
||||||
|
IDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgog
|
||||||
|
ICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcy
|
||||||
|
MDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAg
|
||||||
|
ICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MTA5PC9leGlm
|
||||||
|
OlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjg5PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6
|
||||||
|
RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAog
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
|
||||||
|
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
|
||||||
|
BASE64
|
||||||
|
setting.save
|
||||||
|
end
|
||||||
|
|
||||||
|
Setting.set('invoice_reference', 'YYMMmmmX[/VL]R[/A]S[/E]') unless Setting.find_by(name: 'invoice_reference').try(:value)
|
||||||
|
|
||||||
|
Setting.set('invoice_code-active', true) unless Setting.find_by(name: 'invoice_code-active').try(:value)
|
||||||
|
|
||||||
|
Setting.set('invoice_code-value', 'FABMGRFABLAB') unless Setting.find_by(name: 'invoice_code-value').try(:value)
|
||||||
|
|
||||||
|
Setting.set('invoice_order-nb', 'nnnnnn-MM-YY') unless Setting.find_by(name: 'invoice_order-nb').try(:value)
|
||||||
|
|
||||||
|
Setting.set('invoice_VAT-active', false) unless Setting.find_by(name: 'invoice_VAT-active').try(:value)
|
||||||
|
|
||||||
|
Setting.set('invoice_VAT-rate', 20.0) unless Setting.find_by(name: 'invoice_VAT-rate').try(:value)
|
||||||
|
|
||||||
|
Setting.set('invoice_text', I18n.t('invoices.invoice_text_example')) unless Setting.find_by(name: 'invoice_text').try(:value)
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'invoice_legals').try(:value)
|
||||||
|
setting = Setting.find_or_initialize_by(name: 'invoice_legals')
|
||||||
|
setting.value = 'Fab-manager<br/>' \
|
||||||
|
'41 rue du Colonel Moutarde, 21000 DIJON France<br/>' \
|
||||||
|
'Tél. : +33 1 23 45 67 98<br/>' \
|
||||||
|
'Fax. : +33 1 23 45 67 98<br/>' \
|
||||||
|
'SIRET : 237 082 474 00006 - APE 913 E'
|
||||||
|
setting.save
|
||||||
|
end
|
||||||
|
|
||||||
|
Setting.set('booking_window_start', '1970-01-01 08:00:00') unless Setting.find_by(name: 'booking_window_start').try(:value)
|
||||||
|
|
||||||
|
Setting.set('booking_window_end', '1970-01-01 23:59:59') unless Setting.find_by(name: 'booking_window_end').try(:value)
|
||||||
|
|
||||||
|
Setting.set('booking_move_enable', true) unless Setting.find_by(name: 'booking_move_enable').try(:value)
|
||||||
|
|
||||||
|
Setting.set('booking_move_delay', 24) unless Setting.find_by(name: 'booking_move_delay').try(:value)
|
||||||
|
|
||||||
|
Setting.set('booking_cancel_enable', false) unless Setting.find_by(name: 'booking_cancel_enable').try(:value)
|
||||||
|
|
||||||
|
Setting.set('booking_cancel_delay', 24) unless Setting.find_by(name: 'booking_cancel_delay').try(:value)
|
||||||
|
|
||||||
|
Setting.set('main_color', '#cb1117') unless Setting.find_by(name: 'main_color').try(:value)
|
||||||
|
|
||||||
|
Setting.set('secondary_color', '#ffdd00') unless Setting.find_by(name: 'secondary_color').try(:value)
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'training_information_message').try(:value)
|
||||||
|
setting = Setting.find_or_initialize_by(name: 'training_information_message')
|
||||||
|
setting.value = "Avant de réserver une formation, nous vous conseillons de consulter nos offres d'abonnement qui " \
|
||||||
|
'proposent des conditions avantageuses sur le prix des formations et les créneaux machines.'
|
||||||
|
setting.save
|
||||||
|
end
|
||||||
|
|
||||||
|
Setting.set('fablab_name', 'Fab-manager') unless Setting.find_by(name: 'fablab_name').try(:value)
|
||||||
|
|
||||||
|
Setting.set('name_genre', 'male') unless Setting.find_by(name: 'name_genre').try(:value)
|
||||||
|
|
||||||
|
Setting.set('reminder_enable', true) unless Setting.find_by(name: 'reminder_enable').try(:value)
|
||||||
|
|
||||||
|
Setting.set('reminder_delay', 24) unless Setting.find_by(name: 'reminder_delay').try(:value)
|
||||||
|
|
||||||
|
Setting.set('visibility_yearly', 3) unless Setting.find_by(name: 'visibility_yearly').try(:value)
|
||||||
|
|
||||||
|
Setting.set('visibility_others', 1) unless Setting.find_by(name: 'visibility_others').try(:value)
|
||||||
|
|
||||||
|
Setting.set('reservation_deadline', 0) unless Setting.find_by(name: 'reservation_deadline').try(:value)
|
||||||
|
|
||||||
|
Setting.set('display_name_enable', false) unless Setting.find_by(name: 'display_name_enable').try(:value)
|
||||||
|
|
||||||
|
Setting.set('machines_sort_by', 'default') unless Setting.find_by(name: 'machines_sort_by').try(:value)
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'privacy_draft').try(:value)
|
||||||
|
setting = Setting.find_or_initialize_by(name: 'privacy_draft')
|
||||||
|
setting.value = <<~HTML
|
||||||
|
<p>La présente politique de confidentialité définit et vous informe de la manière dont _________ utilise et protège les
|
||||||
|
informations que vous nous transmettez, le cas échéant, lorsque vous utilisez le présent site accessible à partir de l’URL suivante :
|
||||||
|
_________ (ci-après le « Site »).</p><p>Veuillez noter que cette politique de confidentialité est susceptible d’être modifiée ou
|
||||||
|
complétée à tout moment par _________, notamment en vue de se conformer à toute évolution législative, réglementaire, jurisprudentielle
|
||||||
|
ou technologique. Dans un tel cas, la date de sa mise à jour sera clairement identifiée en tête de la présente politique et l'Utilisateur
|
||||||
|
sera informé par courriel. Ces modifications engagent l’Utilisateur dès leur mise en ligne. Il convient par conséquent que l’Utilisateur
|
||||||
|
consulte régulièrement la présente politique de confidentialité et d’utilisation des cookies afin de prendre connaissance de ses
|
||||||
|
éventuelles modifications.</p><h3>I. DONNÉES PERSONNELLES</h3><p>D’une manière générale, il vous est possible de visiter le site de
|
||||||
|
_________ sans communiquer aucune information personnelle vous concernant. En toute hypothèse, vous n’êtes en aucune manière obligé de
|
||||||
|
transmettre ces informations à _________.</p><p>Néanmoins, en cas de refus, il se peut que vous ne puissiez pas bénéficier de
|
||||||
|
certaines informations ou services que vous avez demandés. À ce titre en effet, _________ peut être amené dans certains cas à vous
|
||||||
|
demander de renseigner votre nom, prénom, pseudonyme, sexe, adresse mail, numéro de téléphone, entreprise et date de naissance (ci-après
|
||||||
|
vos « Informations Personnelles »). En fournissant ces informations, vous acceptez expressément qu’elles soient traitées par
|
||||||
|
_________, aux fins indiquées au point 2 ci-dessous.</p><p>Conformément au Règlement Général sur la Protection des Données (General
|
||||||
|
Data Protection Regulation) adopté par le Parlement européen le 14 avril 2016, et à la Loi Informatique et Libertés du 6 janvier 1978
|
||||||
|
modifiée, _________ vous informe des points suivants :</p><h4>1. Identité du responsable du traitement</h4><p>Le responsable du
|
||||||
|
traitement est (la société/l'association) _________ – (adresse) _________, (code postal) _________ (ville) _________ – (Pays)
|
||||||
|
_________ .</p><h4>2. Finalités du traitement</h4><p>_________ est susceptible de traiter vos Informations Personnelles :</p><p>(a)
|
||||||
|
aux fins de vous fournir les informations ou les services que vous avez demandés (notamment : l'envoi de notifications relatives à
|
||||||
|
vos activités sur le Site, l’envoi de la Newsletter, la correspondance par email, l’envoi d’informations commerciales, livres
|
||||||
|
blancs ou encore l’évaluation de votre niveau de satisfaction quant aux services proposés) ;</p><p>(b) aux fins de recueillir des
|
||||||
|
informations nous permettant d’améliorer notre Site, nos produits et services (notamment par le biais de cookies) ;</p><p>(c)
|
||||||
|
aux fins de pouvoir vous contacter à propos de différents événements relatifs à _________, incluant notamment la mise à jour des
|
||||||
|
produits et le support client.</p><h4>3. Destinataires</h4><p>Seul _________ est destinataire de vos Informations Personnelles.
|
||||||
|
Celles-ci, que ce soit sous forme individuelle ou agrégée, ne sont jamais transmises à un tiers, nonobstant les sous-traitants
|
||||||
|
auxquels _________ fait appel (vous trouverez de plus amples informations à leur sujet au point 7 ci-dessous). Ni _________,
|
||||||
|
ni l’un quelconque de ses sous-traitants, ne procèdent à la commercialisation des données personnelles des visiteurs et Utilisateurs de
|
||||||
|
son Site.</p><h4>4. Durée de conservation</h4><p>Vos Informations Personnelles sont conservées par _________ uniquement pour le temps
|
||||||
|
correspondant à la finalité de la collecte tel qu’indiqué en 2 ci-dessus qui ne saurait en tout état de cause excéder 36 mois.</p><h4>5.
|
||||||
|
Droits Informatique et Libertés</h4><p>Vous disposez des droits suivants concernant vos Informations Personnelles, que vous pouvez exercer
|
||||||
|
en nous écrivant à l’adresse postale mentionnée au point 1 ou en contactant le délégué à la protection des données, dont l'adresse est
|
||||||
|
mentionnée ci-contre.</p><p><b>o Droit d’accès et de communication des données</b></p><p>Vous avez la faculté d’accéder aux Informations
|
||||||
|
Personnelles qui vous concernent.</p><p>Cependant, en raison de l’obligation de sécurité et de confidentialité dans le traitement des
|
||||||
|
données à caractère personnel qui incombe à _________, vous êtes informé que votre demande sera traitée sous réserve que vous apportiez la
|
||||||
|
preuve de votre identité, notamment par la production d’un scan de votre titre d’identité valide (en cas de demande par voie électronique)
|
||||||
|
ou d’une photocopie signée de votre titre d’identité valide (en cas de demande adressée par écrit).</p><p>_________ vous informe qu’il
|
||||||
|
sera en droit, le cas échéant, de s’opposer aux demandes manifestement abusives (de par leur nombre, leur caractère répétitif ou
|
||||||
|
systématique).</p><p>Pour vous aider dans votre démarche, notamment si vous désirez exercer votre droit d’accès par le biais d’une
|
||||||
|
demande écrite à l’adresse postale mentionnée au point 1, vous trouverez en cliquant sur le <a
|
||||||
|
href="https://www.cnil.fr/fr/modele/courrier/exercer-son-droit-dacces">lien</a> suivant un modèle de courrier élaboré par la Commission
|
||||||
|
Nationale de l’Informatique et des Libertés (la « CNIL »).</p><p><b>o Droit de rectification des données</b></p><p>Au titre de ce droit,
|
||||||
|
la législation vous habilite à demander la rectification, la mise à jour, le verrouillage ou encore l’effacement des données vous
|
||||||
|
concernant qui peuvent s’avérer le cas échéant inexactes, erronées, incomplètes ou obsolètes.</p><p>Egalement, vous pouvez définir des
|
||||||
|
directives générales et particulières relatives au sort des données à caractère personnel après votre décès. Le cas échéant, les héritiers
|
||||||
|
d’une personne décédée peuvent exiger de prendre en considération le décès de leur proche et/ou de procéder aux mises à jour nécessaires.
|
||||||
|
</p><p>Pour vous aider dans votre démarche, notamment si vous désirez exercer, pour votre propre compte ou pour le compte de l’un de vos
|
||||||
|
proches défunt, votre droit de rectification par le biais d’une demande écrite à l’adresse postale mentionnée au point 1, vous trouverez
|
||||||
|
en cliquant sur le <a href="https://www.cnil.fr/fr/modele/courrier/rectifier-des-donnees-inexactes-obsoletes-ou-perimees">lien</a>
|
||||||
|
suivant un modèle de courrier élaboré par la CNIL.</p><p><b>o Droit d’opposition</b></p><p>L’exercice de ce droit n’est possible que dans
|
||||||
|
l’une des deux situations suivantes :</p><p>Lorsque l’exercice de ce droit est fondé sur des motifs légitimes ; ou</p><p>Lorsque
|
||||||
|
l’exercice de ce droit vise à faire obstacle à ce que les données recueillies soient utilisées à des fins de prospection commerciale.</p>
|
||||||
|
<p>Pour vous aider dans votre démarche, notamment si vous désirez exercer votre droit d’opposition par le biais d’une demande écrite
|
||||||
|
adressée à l’adresse postale indiquée au point 1, vous trouverez en cliquant sur le <a
|
||||||
|
href="https://www.cnil.fr/fr/modele/courrier/supprimer-des-informations-vous-concernant-dun-site-internet">lien</a> suivant un modèle de
|
||||||
|
courrier élaboré par la CNIL.</p><h4>6. Délais de réponse</h4><p> _________ s’engage à répondre à votre demande d’accès, de rectification
|
||||||
|
ou d’opposition ou toute autre demande complémentaire d’informations dans un délai raisonnable qui ne saurait dépasser 1 mois à compter
|
||||||
|
de la réception de votre demande.</p><h4>7. Prestataires habilités et transfert vers un pays tiers de l’Union Européenne</h4><p>_________
|
||||||
|
vous informe qu’il a recours à ses prestataires habilités pour faciliter le recueil et le traitement des données que vous nous avez
|
||||||
|
communiquées. Ces prestataires peuvent être situés en dehors de l’Union Européenne et ont communication des données recueillies par le
|
||||||
|
biais des divers formulaires présents sur le Site.</p><p>_________ s’est préalablement assuré de la mise en œuvre par ses prestataires de
|
||||||
|
garanties adéquates et du respect de conditions strictes en matière de confidentialité, d’usage et de protection des données. Tout
|
||||||
|
particulièrement, la vigilance s’est portée sur l’existence d’un fondement légal pour effectuer un quelconque transfert de données vers un
|
||||||
|
pays tiers. A ce titre, l’un de nos prestataires est soumis à (nom de la règle) _________ approuvées par la (nom de l'autorité) _________
|
||||||
|
en (année d'approbation) _________.</p><h4>8. Plainte auprès de l’autorité compétente</h4><p>Si vous considérez que _________ ne
|
||||||
|
respecte pas ses obligations au regard de vos Informations Personnelles, vous pouvez adresser une plainte ou une demande auprès de
|
||||||
|
l’autorité compétente. En France, l’autorité compétente est la CNIL à laquelle vous pouvez adresser une demande par voie électronique en
|
||||||
|
cliquant sur le lien suivant : <a href="https://www.cnil.fr/fr/plaintes/internet">https://www.cnil.fr/fr/plaintes/internet</a>.</p>
|
||||||
|
<h3>II. POLITIQUE RELATIVE AUX COOKIES</h3><p>Lors de votre première connexion sur le site web de _________, vous êtes avertis par un
|
||||||
|
bandeau en bas de votre écran que des informations relatives à votre navigation sont susceptibles d’être enregistrées dans des fichiers
|
||||||
|
dénommés « cookies ». Notre politique d’utilisation des cookies vous permet de mieux comprendre les dispositions que nous mettons en œuvre
|
||||||
|
en matière de navigation sur notre site web. Elle vous informe notamment sur l’ensemble des cookies présents sur notre site web, leur
|
||||||
|
finalité (partie I.) et vous donne la marche à suivre pour les paramétrer (partie II.)</p><h4>1. Informations générales sur les cookies
|
||||||
|
présents sur le site de _________</h4><p>_________, en tant qu’éditeur du présent site web, pourra procéder à l’implantation d’un cookie
|
||||||
|
sur le disque dur de votre terminal (ordinateur, tablette, mobile etc.) afin de vous garantir une navigation fluide et optimale sur notre
|
||||||
|
site Internet.</p><p>Les « cookies » (ou témoins de connexion) sont des petits fichiers texte de taille limitée qui nous permettent de
|
||||||
|
reconnaître votre ordinateur, votre tablette ou votre mobile aux fins de personnaliser les services que nous vous proposons.</p><p>Les
|
||||||
|
informations recueillies par le biais des cookies ne permettent en aucune manière de vous identifier nominativement. Elles sont utilisées
|
||||||
|
exclusivement pour nos besoins propres afin d’améliorer l’interactivité et la performance de notre site web et de vous adresser des
|
||||||
|
contenus adaptés à vos centres d’intérêts. Aucune de ces informations ne fait l’objet d’une communication auprès de tiers sauf lorsque
|
||||||
|
_________ a obtenu au préalable votre consentement ou bien lorsque la divulgation de ces informations est requise par la loi, sur ordre
|
||||||
|
d’un tribunal ou toute autorité administrative ou judiciaire habilitée à en connaître.</p><p>Pour mieux vous éclairer sur les informations
|
||||||
|
que les cookies identifient, vous trouverez ci-dessous un tableau listant les différents types de cookies susceptibles d’être utilisés sur
|
||||||
|
le site web de _________, leur nom, leur finalité ainsi que leur durée de conservation.</p><h4>2. Configuration de vos préférences sur les
|
||||||
|
cookies</h4><p>Vous pouvez accepter ou refuser le dépôt de cookies à tout moment.</p><p>Lors de votre première connexion sur le site web
|
||||||
|
de _________, une bannière présentant brièvement des informations relatives au dépôt de cookies et de technologies similaires apparaît en
|
||||||
|
bas de votre écran. Cette bannière vous demande de choisir explicitement d'accepter ou non le dépôt de cookies sur votre terminal.
|
||||||
|
</p><p>Après avoir fait votre choix, vous pouvez le modifier ultérieurement en vous connectant à votre compte utilisateur puis en
|
||||||
|
naviguant dans la section intitulée « mes paramètres », accessible via un clic sur votre nom, en haut à droite de l'écran.</p>
|
||||||
|
<p>Selon le type de cookie en cause, le recueil de votre consentement au dépôt et à la lecture de cookies sur votre terminal peut être
|
||||||
|
impératif.</p><h4>a. Les cookies exemptés de consentement</h4><p>Conformément aux recommandations de la Commission Nationale de
|
||||||
|
l’Informatique et des Libertés (CNIL), certains cookies sont dispensés du recueil préalable de votre consentement dans la mesure où ils
|
||||||
|
sont strictement nécessaires au fonctionnement du site internet ou ont pour finalité exclusive de permettre ou faciliter la communication
|
||||||
|
par voie électronique. Il s’agit des cookies suivants :</p><p><b>o Identifiant de session</b> et <b>d'authentification</b> sur l'API de
|
||||||
|
Fab-manager.</p><p><b>o Identifiant de panier d'achat</b></b>, permettant de sauvegarder le contenu de votre panier d'achat, même lorsque
|
||||||
|
vous n'êtes pas connecté.</p>
|
||||||
|
<p><em>Les cookies ci-dessus sont intégralement soumis à la présente politique dans la mesure où ils sont émis et gérés par _________.</em></p>
|
||||||
|
<p><b>o Stripe</b>, permettant de gérer les paiements par carte bancaire et dont la politique de confidentialité est accessible sur ce
|
||||||
|
<a href="https://stripe.com/fr/privacy">lien</a>.</p><p><b>o Disqus</b>, permettant de poster des commentaires sur les fiches projet et
|
||||||
|
dont la politique de confidentialité est accessible sur ce <a href="https://help.disqus.com/articles/1717103-disqus-privacy-policy">lien
|
||||||
|
</a>.</p><h4>b. Les cookies nécessitant le recueil préalable de votre consentement</h4><p>Cette
|
||||||
|
exigence concerne les cookies émis par des tiers et qui sont qualifiés de « persistants » dans la mesure où ils demeurent dans votre
|
||||||
|
terminal jusqu’à leur effacement ou leur date d’expiration.</p><p>De tels cookies étant émis par des tiers, leur utilisation et leur dépôt
|
||||||
|
sont soumis à leurs propres politiques de confidentialité dont vous trouverez un lien ci-dessous. Cette famille de cookie comprend les
|
||||||
|
cookies de mesure d’audience (Google Analytics).</p><p>Les cookies de mesure d’audience établissent des statistiques concernant la
|
||||||
|
fréquentation et l’utilisation de divers éléments du site web (comme les contenus/pages que vous avez visité).
|
||||||
|
Ces données participent à l’amélioration de l’ergonomie du site web de _________. Un outil de mesure d’audience est utilisé sur le
|
||||||
|
présent site internet :</p><p><b>o Google Analytics</b> pour gérer les statistiques de visites dont la politique de
|
||||||
|
confidentialité est disponible (uniquement en anglais) à partir du <a href="https://policies.google.com/privacy?hl=fr&gl=ZZ">lien
|
||||||
|
</a> suivant. </p><h4>c. Vous disposez de divers outils de paramétrage des cookies</h4><p>La plupart
|
||||||
|
des navigateurs Internet sont configurés par défaut de façon à ce que le dépôt de cookies soit autorisé. Votre navigateur vous offre
|
||||||
|
l’opportunité de modifier ces paramètres standards de manière que l’ensemble des cookies soit rejeté systématiquement ou bien à ce
|
||||||
|
qu’une partie seulement des cookies soit acceptée ou refusée en fonction de leur émetteur.</p><p><b>ATTENTION</b> : Nous attirons votre
|
||||||
|
attention sur le fait que le refus du dépôt de cookies sur votre terminal est néanmoins susceptible d’altérer votre expérience
|
||||||
|
d’utilisateur ainsi que votre accès à certains services ou fonctionnalités du présent site web. Le cas échéant, _________ décline toute
|
||||||
|
responsabilité concernant les conséquences liées à la dégradation de vos conditions de navigation qui interviennent en raison de votre
|
||||||
|
choix de refuser, supprimer ou bloquer les cookies nécessaires au fonctionnement du site.
|
||||||
|
Ces conséquences ne sauraient constituer un dommage et vous ne pourrez prétendre à aucune indemnité de ce fait.</p>
|
||||||
|
<p>Votre navigateur vous permet également de supprimer les cookies existants sur votre
|
||||||
|
terminal ou encore de vous signaler lorsque de nouveaux cookies sont susceptibles d’être déposés sur votre terminal. Ces paramètres n’ont
|
||||||
|
pas d’incidence sur votre navigation, mais vous font perdre tout le bénéfice apporté par le cookie.</p><p>Veuillez ci-dessous prendre
|
||||||
|
connaissance des multiples outils mis à votre disposition afin que vous puissiez paramétrer les cookies déposés sur votre terminal.</p>
|
||||||
|
<h4>d. Le paramétrage de votre navigateur Internet</h4><p>Chaque navigateur Internet propose ses propres paramètres de gestion des
|
||||||
|
cookies. Pour savoir de quelle manière modifier vos préférences en matière de cookies, vous trouverez ci-dessous les liens vers l’aide
|
||||||
|
nécessaire pour accéder au menu de votre navigateur prévu à cet effet :</p>
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://support.google.com/chrome/answer/95647?hl=fr">Chrome</a></li>
|
||||||
|
<li><a href="https://mzl.la/3BX2oBb">Firefox</a></li>
|
||||||
|
<li><a href="https://support.microsoft.com/fr-fr/microsoft-edge/supprimer-les-cookies-dans-microsoft-edge-63947406-40ac-c3b8-57b9-2a946a29ae09">
|
||||||
|
Microsoft Edge</a></li>
|
||||||
|
<li><a href="https://help.opera.com/en/latest/web-preferences/#cookies">Opera</a></li>
|
||||||
|
<li><a href="https://support.apple.com/fr-fr/HT201265">Safari</a></li>
|
||||||
|
</ul>
|
||||||
|
<p>Pour de plus amples informations concernant les outils de maîtrise des cookies, vous pouvez consulter le
|
||||||
|
<a href="https://www.cnil.fr/fr/cookies-et-autres-traceurs/comment-se-proteger/maitriser-votre-navigateur">site internet</a> de la CNIL.</p>
|
||||||
|
HTML
|
||||||
|
setting.save
|
||||||
|
end
|
||||||
|
|
||||||
|
Setting.set('fab_analytics', true) unless Setting.find_by(name: 'fab_analytics').try(:value)
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'link_name').try(:value)
|
||||||
|
include ApplicationHelper # rubocop:disable Style/MixinUsage
|
||||||
|
|
||||||
|
name = Setting.get('fablab_name')
|
||||||
|
gender = Setting.get('name_genre')
|
||||||
|
setting = Setting.find_or_initialize_by(name: 'link_name')
|
||||||
|
setting.value = _t('app.public.common.about_the_fablab', NAME: name, GENDER: gender)
|
||||||
|
setting.save
|
||||||
|
end
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'home_content').try(:value)
|
||||||
|
setting = Setting.find_or_initialize_by(name: 'home_content')
|
||||||
|
setting.value = <<~HTML
|
||||||
|
<div>
|
||||||
|
<div class="m-sm">
|
||||||
|
<div id="news">#{I18n.t('app.admin.settings.item_news')}</div>
|
||||||
|
</div>
|
||||||
|
<div class="row wrapper">
|
||||||
|
<div class="col-lg-8">
|
||||||
|
<div id="projects">#{I18n.t('app.admin.settings.item_projects')}</div>
|
||||||
|
</div>
|
||||||
|
<div class="col-lg-4 m-t-lg">
|
||||||
|
<div id="twitter">#{I18n.t('app.admin.settings.item_twitter')}</div>
|
||||||
|
<div id="members">#{I18n.t('app.admin.settings.item_members')}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row wrapper m-t-sm">
|
||||||
|
<div class="col-lg-12">
|
||||||
|
<div id="events">#{I18n.t('app.admin.settings.item_events')}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
HTML
|
||||||
|
setting.save
|
||||||
|
end
|
||||||
|
|
||||||
|
Setting.set('slot_duration', 60) unless Setting.find_by(name: 'slot_duration').try(:value)
|
||||||
|
|
||||||
|
Setting.set('spaces_module', false) unless Setting.find_by(name: 'spaces_module').try(:value)
|
||||||
|
|
||||||
|
Setting.set('plans_module', true) unless Setting.find_by(name: 'plans_module').try(:value)
|
||||||
|
|
||||||
|
Setting.set('invoicing_module', true) unless Setting.find_by(name: 'invoicing_module').try(:value)
|
||||||
|
|
||||||
|
Setting.set('feature_tour_display', 'once') unless Setting.find_by(name: 'feature_tour_display').try(:value)
|
||||||
|
|
||||||
|
Setting.set('email_from', 'noreply@fab-manager.com') unless Setting.find_by(name: 'email_from').try(:value)
|
||||||
|
|
||||||
|
Setting.set('online_payment_module', false) unless Setting.find_by(name: 'online_payment_module').try(:value)
|
||||||
|
|
||||||
|
Setting.set('openlab_default', true) unless Setting.find_by(name: 'openlab_default').try(:value)
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'allowed_cad_extensions').try(:value)
|
||||||
|
Setting.set(
|
||||||
|
'allowed_cad_extensions',
|
||||||
|
'pdf ai eps cad math svg stl dxf dwg obj step iges igs 3dm 3dmf doc docx png ino scad fcad skp sldprt sldasm slddrw' \
|
||||||
|
'slddrt tex latex ps fcstd fcstd1'
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'allowed_cad_mime_types').try(:value)
|
||||||
|
Setting.set(
|
||||||
|
'allowed_cad_mime_types',
|
||||||
|
'application/pdf application/postscript application/illustrator image/x-eps image/svg+xml application/sla application/dxf ' \
|
||||||
|
'application/acad application/dwg application/octet-stream application/step application/iges model/iges x-world/x-3dmf ' \
|
||||||
|
'application/vnd.openxmlformats-officedocument.wordprocessingml.document image/png text/x-arduino text/plain application/scad ' \
|
||||||
|
'application/vnd.sketchup.skp application/x-koan application/vnd-koan koan/x-skm application/vnd.koan application/x-tex ' \
|
||||||
|
'application/x-latex application/x-extension-fcstd'
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
Setting.set('stripe_currency', 'EUR') unless Setting.find_by(name: 'stripe_currency').try(:value)
|
||||||
|
|
||||||
|
Setting.set('invoice_prefix', 'FabManager_invoice') unless Setting.find_by(name: 'invoice_prefix').try(:value)
|
||||||
|
|
||||||
|
Setting.set('payment_schedule_prefix', 'FabManager_paymentSchedule') unless Setting.find_by(name: 'payment_schedule_prefix').try(:value)
|
||||||
|
|
||||||
|
Setting.set('confirmation_required', false) unless Setting.find_by(name: 'confirmation_required').try(:value)
|
||||||
|
|
||||||
|
Setting.set('user_validation_required', false) unless Setting.find_by(name: 'user_validation_required').try(:value)
|
||||||
|
|
||||||
|
Setting.set('user_validation_required_list', '') unless Setting.find_by(name: 'user_validation_required_list').try(:value)
|
||||||
|
|
||||||
|
Setting.set('wallet_module', true) unless Setting.find_by(name: 'wallet_module').try(:value)
|
||||||
|
|
||||||
|
Setting.set('statistics_module', true) unless Setting.find_by(name: 'statistics_module').try(:value)
|
||||||
|
|
||||||
|
Setting.set('machines_module', true) unless Setting.find_by(name: 'machines_module').try(:value)
|
||||||
|
|
||||||
|
Setting.set('upcoming_events_shown', 'until_start') unless Setting.find_by(name: 'upcoming_events_shown').try(:value)
|
||||||
|
|
||||||
|
Setting.set('trainings_module', true) unless Setting.find_by(name: 'trainings_module').try(:value)
|
||||||
|
|
||||||
|
Setting.set('public_agenda_module', true) unless Setting.find_by(name: 'public_agenda_module').try(:value)
|
||||||
|
|
||||||
|
Setting.set('renew_pack_threshold', 0.2) unless Setting.find_by(name: 'renew_pack_threshold').try(:value)
|
||||||
|
|
||||||
|
Setting.set('pack_only_for_subscription', true) unless Setting.find_by(name: 'pack_only_for_subscription').try(:value)
|
||||||
|
|
||||||
|
Setting.set('public_registrations', true) unless Setting.find_by(name: 'public_registrations').try(:value)
|
||||||
|
|
||||||
|
Setting.set('user_change_group', true) unless Setting.find_by(name: 'user_change_group').try(:value)
|
||||||
|
|
||||||
|
Setting.set('invoice_VAT-name', I18n.t('invoices.VAT')) unless Setting.find_by(name: 'invoice_VAT-name').try(:value)
|
||||||
|
|
||||||
|
unless Setting.find_by(name: 'overlapping_categories').try(:value)
|
||||||
|
Setting.set('overlapping_categories', 'training_reservations,machine_reservations,space_reservations,events_reservations')
|
||||||
|
end
|
||||||
|
|
||||||
|
Setting.set('extended_prices_in_same_day', false) unless Setting.find_by(name: 'extended_prices_in_same_day').try(:value)
|
||||||
|
|
||||||
|
Setting.set('show_username_in_admin_list', false) unless Setting.find_by(name: 'show_username_in_admin_list').try(:value)
|
||||||
|
|
||||||
|
Setting.set('store_module', false) unless Setting.find_by(name: 'store_module').try(:value)
|
||||||
|
|
||||||
|
Setting.set('store_hidden', true) unless Setting.find_by(name: 'store_hidden').try(:value)
|
||||||
|
|
||||||
|
Setting.set('advanced_accounting', false) unless Setting.find_by(name: 'advanced_accounting').try(:value)
|
||||||
|
|
||||||
|
Setting.set('accounting_sales_journal_code', 'SALES') unless Setting.find_by(name: 'accounting_sales_journal_code').try(:value)
|
||||||
|
Setting.set('accounting_payment_card_code', '5801') unless Setting.find_by(name: 'accounting_payment_card_code').try(:value)
|
||||||
|
Setting.set('accounting_payment_card_label', 'Cards payments') unless Setting.find_by(name: 'accounting_payment_card_label').try(:value)
|
||||||
|
Setting.set('accounting_payment_card_journal_code', 'CA01') unless Setting.find_by(name: 'accounting_payment_card_journal_code').try(:value)
|
||||||
|
Setting.set('accounting_payment_wallet_code', '5802') unless Setting.find_by(name: 'accounting_payment_wallet_code').try(:value)
|
||||||
|
Setting.set('accounting_payment_wallet_label', 'Wallet payments') unless Setting.find_by(name: 'accounting_payment_wallet_label').try(:value)
|
||||||
|
Setting.set('accounting_payment_wallet_journal_code', 'WA01') unless Setting.find_by(name: 'accounting_payment_wallet_journal_code').try(:value)
|
||||||
|
Setting.set('accounting_payment_other_code', '5803') unless Setting.find_by(name: 'accounting_payment_other_code').try(:value)
|
||||||
|
Setting.set('accounting_payment_other_label', 'Payments on site') unless Setting.find_by(name: 'accounting_payment_other_label').try(:value)
|
||||||
|
Setting.set('accounting_payment_other_journal_code', 'SI01') unless Setting.find_by(name: 'accounting_payment_other_journal_code').try(:value)
|
||||||
|
Setting.set('accounting_wallet_code', '4191') unless Setting.find_by(name: 'accounting_wallet_code').try(:value)
|
||||||
|
Setting.set('accounting_wallet_label', 'Wallet credit') unless Setting.find_by(name: 'accounting_wallet_label').try(:value)
|
||||||
|
Setting.set('accounting_wallet_journal_code', 'WC01') unless Setting.find_by(name: 'accounting_wallet_journal_code').try(:value)
|
||||||
|
Setting.set('accounting_VAT_code', '4457') unless Setting.find_by(name: 'accounting_VAT_code').try(:value)
|
||||||
|
Setting.set('accounting_VAT_label', 'Collected VAT') unless Setting.find_by(name: 'accounting_VAT_label').try(:value)
|
||||||
|
Setting.set('accounting_VAT_journal_code', 'VAT1') unless Setting.find_by(name: 'accounting_VAT_journal_code').try(:value)
|
||||||
|
Setting.set('accounting_subscription_code', '7061') unless Setting.find_by(name: 'accounting_subscription_code').try(:value)
|
||||||
|
Setting.set('accounting_subscription_label', 'Subscriptions') unless Setting.find_by(name: 'accounting_subscription_label').try(:value)
|
||||||
|
Setting.set('accounting_Machine_code', '7602') unless Setting.find_by(name: 'accounting_Machine_code').try(:value)
|
||||||
|
Setting.set('accounting_Machine_label', 'Machines reservations') unless Setting.find_by(name: 'accounting_Machine_label').try(:value)
|
||||||
|
Setting.set('accounting_Training_code', '7063') unless Setting.find_by(name: 'accounting_Training_code').try(:value)
|
||||||
|
Setting.set('accounting_Training_label', 'Trainings reservations') unless Setting.find_by(name: 'accounting_Training_label').try(:value)
|
||||||
|
Setting.set('accounting_Event_code', '7064') unless Setting.find_by(name: 'accounting_Event_code').try(:value)
|
||||||
|
Setting.set('accounting_Event_label', 'Events reservations') unless Setting.find_by(name: 'accounting_Event_label').try(:value)
|
||||||
|
Setting.set('accounting_Space_code', '7065') unless Setting.find_by(name: 'accounting_Space_code').try(:value)
|
||||||
|
Setting.set('accounting_Space_label', 'Spaces reservations') unless Setting.find_by(name: 'accounting_Space_label').try(:value)
|
||||||
|
Setting.set('accounting_Pack_code', '7066') unless Setting.find_by(name: 'accounting_Pack_code').try(:value)
|
||||||
|
Setting.set('accounting_Pack_label', 'Prepaid-packs selling') unless Setting.find_by(name: 'accounting_Pack_label').try(:value)
|
||||||
|
Setting.set('accounting_Product_code', '7071') unless Setting.find_by(name: 'accounting_Product_code').try(:value)
|
||||||
|
Setting.set('accounting_Product_label', 'Merchandise selling') unless Setting.find_by(name: 'accounting_Product_label').try(:value)
|
||||||
|
Setting.set('accounting_Error_code', 'ERROR') unless Setting.find_by(name: 'accounting_Error_code').try(:value)
|
||||||
|
Setting.set('accounting_Error_label', 'Erroneous invoices to refund') unless Setting.find_by(name: 'accounting_Error_label').try(:value)
|
||||||
|
|
||||||
|
Setting.set('external_id', false) unless Setting.find_by(name: 'external_id').try(:value)
|
@ -2,86 +2,173 @@
|
|||||||
|
|
||||||
require_relative '../../lib/database/sequence'
|
require_relative '../../lib/database/sequence'
|
||||||
|
|
||||||
StatisticIndex.create!({ id: 1, es_type_key: 'subscription', label: I18n.t('statistics.subscriptions') }) unless StatisticIndex.find_by(es_type_key: 'subscription')
|
# statistic_indices
|
||||||
StatisticIndex.create!({ id: 2, es_type_key: 'machine', label: I18n.t('statistics.machines_hours') }) unless StatisticIndex.find_by(es_type_key: 'machine')
|
unless StatisticIndex.find_by(es_type_key: 'subscription')
|
||||||
StatisticIndex.create!({ id: 3, es_type_key: 'training', label: I18n.t('statistics.trainings') }) unless StatisticIndex.find_by(es_type_key: 'training')
|
StatisticIndex.create!({ id: 1, es_type_key: 'subscription', label: I18n.t('statistics.subscriptions') })
|
||||||
|
end
|
||||||
|
unless StatisticIndex.find_by(es_type_key: 'machine')
|
||||||
|
StatisticIndex.create!({ id: 2, es_type_key: 'machine', label: I18n.t('statistics.machines_hours') })
|
||||||
|
end
|
||||||
|
unless StatisticIndex.find_by(es_type_key: 'training')
|
||||||
|
StatisticIndex.create!({ id: 3, es_type_key: 'training', label: I18n.t('statistics.trainings') })
|
||||||
|
end
|
||||||
StatisticIndex.create!({ id: 4, es_type_key: 'event', label: I18n.t('statistics.events') }) unless StatisticIndex.find_by(es_type_key: 'event')
|
StatisticIndex.create!({ id: 4, es_type_key: 'event', label: I18n.t('statistics.events') }) unless StatisticIndex.find_by(es_type_key: 'event')
|
||||||
StatisticIndex.create!({ id: 5, es_type_key: 'account', label: I18n.t('statistics.registrations'), ca: false }) unless StatisticIndex.find_by(es_type_key: 'account')
|
unless StatisticIndex.find_by(es_type_key: 'account')
|
||||||
StatisticIndex.create!({ id: 6, es_type_key: 'project', label: I18n.t('statistics.projects'), ca: false }) unless StatisticIndex.find_by(es_type_key: 'project')
|
StatisticIndex.create!({ id: 5, es_type_key: 'account', label: I18n.t('statistics.registrations'), ca: false })
|
||||||
StatisticIndex.create!({ id: 7, es_type_key: 'user', label: I18n.t('statistics.users'), table: false, ca: false }) unless StatisticIndex.find_by(es_type_key: 'user')
|
end
|
||||||
StatisticIndex.create!({ id: 8, es_type_key: 'space', label: I18n.t('statistics.spaces') }) unless StatisticIndex.find_by(es_type_key: 'space')
|
unless StatisticIndex.find_by(es_type_key: 'project')
|
||||||
StatisticIndex.create!({ id: 9, es_type_key: 'order', label: I18n.t('statistics.orders') }) unless StatisticIndex.find_by(es_type_key: 'order')
|
StatisticIndex.create!({ id: 6, es_type_key: 'project', label: I18n.t('statistics.projects'), ca: false })
|
||||||
|
end
|
||||||
|
unless StatisticIndex.find_by(es_type_key: 'user')
|
||||||
|
StatisticIndex.create!({ id: 7, es_type_key: 'user', label: I18n.t('statistics.users'), table: false, ca: false })
|
||||||
|
end
|
||||||
Database::Sequence.update_id_seq(StatisticIndex.table_name)
|
Database::Sequence.update_id_seq(StatisticIndex.table_name)
|
||||||
|
StatisticIndex.create!({ es_type_key: 'space', label: I18n.t('statistics.spaces') }) unless StatisticIndex.find_by(es_type_key: 'space')
|
||||||
|
StatisticIndex.create!({ es_type_key: 'order', label: I18n.t('statistics.orders') }) unless StatisticIndex.find_by(es_type_key: 'order')
|
||||||
|
|
||||||
|
statistic_index_space = StatisticIndex.find_by(es_type_key: 'space')
|
||||||
|
statistic_index_order = StatisticIndex.find_by(es_type_key: 'order')
|
||||||
|
|
||||||
StatisticField.create!({ key: 'spaceDates', label: I18n.t('statistics.space_dates'), statistic_index_id: index.id, data_type: 'list' })
|
# statistic_fields
|
||||||
if StatisticField.count.zero?
|
unless StatisticField.find_by(key: 'spaceDates')
|
||||||
StatisticField.create!([
|
StatisticField.create!({ key: 'spaceDates', label: I18n.t('statistics.space_dates'),
|
||||||
# available data_types : index, number, date, text, list
|
statistic_index_id: statistic_index_space.id, data_type: 'list' })
|
||||||
{ key: 'machineDates', label: I18n.t('statistics.machine_dates'), statistic_index_id: 2, data_type: 'list' },
|
end
|
||||||
{ key: 'trainingId', label: I18n.t('statistics.training_id'), statistic_index_id: 3, data_type: 'index' },
|
unless StatisticField.find_by(key: 'machineDates')
|
||||||
{ key: 'trainingDate', label: I18n.t('statistics.training_date'), statistic_index_id: 3, data_type: 'date' },
|
StatisticField.create!({ key: 'machineDates', label: I18n.t('statistics.machine_dates'), statistic_index_id: 2, data_type: 'list' })
|
||||||
{ key: 'eventId', label: I18n.t('statistics.event_id'), statistic_index_id: 4, data_type: 'index' },
|
end
|
||||||
{ key: 'eventDate', label: I18n.t('statistics.event_date'), statistic_index_id: 4, data_type: 'date' },
|
unless StatisticField.find_by(key: 'trainingId')
|
||||||
{ key: 'themes', label: I18n.t('statistics.themes'), statistic_index_id: 6, data_type: 'list' },
|
StatisticField.create!({ key: 'trainingId', label: I18n.t('statistics.training_id'), statistic_index_id: 3, data_type: 'index' })
|
||||||
{ key: 'components', label: I18n.t('statistics.components'), statistic_index_id: 6, data_type: 'list' },
|
end
|
||||||
{ key: 'machines', label: I18n.t('statistics.machines'), statistic_index_id: 6, data_type: 'list' },
|
unless StatisticField.find_by(key: 'trainingDate')
|
||||||
{ key: 'name', label: I18n.t('statistics.event_name'), statistic_index_id: 4, data_type: 'text' },
|
StatisticField.create!({ key: 'trainingDate', label: I18n.t('statistics.training_date'), statistic_index_id: 3, data_type: 'date' })
|
||||||
{ key: 'userId', label: I18n.t('statistics.user_id'), statistic_index_id: 7, data_type: 'index' },
|
end
|
||||||
{ key: 'eventTheme', label: I18n.t('statistics.event_theme'), statistic_index_id: 4, data_type: 'text' },
|
unless StatisticField.find_by(key: 'eventId')
|
||||||
{ key: 'ageRange', label: I18n.t('statistics.age_range'), statistic_index_id: 4, data_type: 'text' }
|
StatisticField.create!({ key: 'eventId', label: I18n.t('statistics.event_id'), statistic_index_id: 4, data_type: 'index' })
|
||||||
])
|
end
|
||||||
|
unless StatisticField.find_by(key: 'eventDate')
|
||||||
|
StatisticField.create!({ key: 'eventDate', label: I18n.t('statistics.event_date'), statistic_index_id: 4, data_type: 'date' })
|
||||||
|
end
|
||||||
|
unless StatisticField.find_by(key: 'themes')
|
||||||
|
StatisticField.create!({ key: 'themes', label: I18n.t('statistics.themes'), statistic_index_id: 6, data_type: 'list' })
|
||||||
|
end
|
||||||
|
unless StatisticField.find_by(key: 'components')
|
||||||
|
StatisticField.create!({ key: 'components', label: I18n.t('statistics.components'), statistic_index_id: 6, data_type: 'list' })
|
||||||
|
end
|
||||||
|
unless StatisticField.find_by(key: 'machines')
|
||||||
|
StatisticField.create!({ key: 'machines', label: I18n.t('statistics.machines'), statistic_index_id: 6, data_type: 'list' })
|
||||||
|
end
|
||||||
|
unless StatisticField.find_by(key: 'name')
|
||||||
|
StatisticField.create!({ key: 'name', label: I18n.t('statistics.event_name'), statistic_index_id: 4, data_type: 'text' })
|
||||||
|
end
|
||||||
|
unless StatisticField.find_by(key: 'userId')
|
||||||
|
StatisticField.create!({ key: 'userId', label: I18n.t('statistics.user_id'), statistic_index_id: 7, data_type: 'index' })
|
||||||
|
end
|
||||||
|
unless StatisticField.find_by(key: 'eventTheme')
|
||||||
|
StatisticField.create!({ key: 'eventTheme', label: I18n.t('statistics.event_theme'), statistic_index_id: 4, data_type: 'text' })
|
||||||
|
end
|
||||||
|
unless StatisticField.find_by(key: 'ageRange')
|
||||||
|
StatisticField.create!({ key: 'ageRange', label: I18n.t('statistics.age_range'), statistic_index_id: 4, data_type: 'text' })
|
||||||
|
end
|
||||||
|
unless StatisticField.find_by(key: 'groupName')
|
||||||
|
StatisticField.create!({ key: 'groupName', label: I18n.t('statistics.group'), statistic_index_id: 1, data_type: 'text' })
|
||||||
end
|
end
|
||||||
|
|
||||||
unless StatisticField.find_by(key: 'groupName').try(:label)
|
# statistic_types
|
||||||
field = StatisticField.find_or_initialize_by(key: 'groupName')
|
unless StatisticType.find_by(key: 'booking', statistic_index_id: 2)
|
||||||
field.label = 'Groupe'
|
StatisticType.create!({ statistic_index_id: 2, key: 'booking', label: I18n.t('statistics.bookings'), graph: true, simple: true })
|
||||||
field.statistic_index_id = 1
|
end
|
||||||
field.data_type = 'text'
|
unless StatisticType.find_by(key: 'hour', statistic_index_id: 2)
|
||||||
field.save!
|
StatisticType.create!({ statistic_index_id: 2, key: 'hour', label: I18n.t('statistics.hours_number'), graph: true, simple: false })
|
||||||
|
end
|
||||||
|
unless StatisticType.find_by(key: 'booking', statistic_index_id: 3)
|
||||||
|
StatisticType.create!({ statistic_index_id: 3, key: 'booking', label: I18n.t('statistics.bookings'), graph: false, simple: true })
|
||||||
|
end
|
||||||
|
unless StatisticType.find_by(key: 'hour', statistic_index_id: 3)
|
||||||
|
StatisticType.create!({ statistic_index_id: 3, key: 'hour', label: I18n.t('statistics.hours_number'), graph: false, simple: false })
|
||||||
|
end
|
||||||
|
unless StatisticType.find_by(key: 'booking', statistic_index_id: 4)
|
||||||
|
StatisticType.create!({ statistic_index_id: 4, key: 'booking', label: I18n.t('statistics.tickets_number'), graph: false, simple: false })
|
||||||
|
end
|
||||||
|
unless StatisticType.find_by(key: 'hour', statistic_index_id: 4)
|
||||||
|
StatisticType.create!({ statistic_index_id: 4, key: 'hour', label: I18n.t('statistics.hours_number'), graph: false, simple: false })
|
||||||
|
end
|
||||||
|
unless StatisticType.find_by(key: 'member', statistic_index_id: 5)
|
||||||
|
StatisticType.create!({ statistic_index_id: 5, key: 'member', label: I18n.t('statistics.users'), graph: true, simple: true })
|
||||||
|
end
|
||||||
|
unless StatisticType.find_by(key: 'project', statistic_index_id: 6)
|
||||||
|
StatisticType.create!({ statistic_index_id: 6, key: 'project', label: I18n.t('statistics.projects'), graph: false, simple: true })
|
||||||
|
end
|
||||||
|
unless StatisticType.find_by(key: 'revenue', statistic_index_id: 7)
|
||||||
|
StatisticType.create!({ statistic_index_id: 7, key: 'revenue', label: I18n.t('statistics.revenue'), graph: false, simple: false })
|
||||||
|
end
|
||||||
|
unless StatisticType.find_by(key: 'booking', statistic_index_id: statistic_index_space.id)
|
||||||
|
StatisticType.create!({ statistic_index_id: statistic_index_space.id, key: 'booking', label: I18n.t('statistics.bookings'),
|
||||||
|
graph: true, simple: true })
|
||||||
|
end
|
||||||
|
unless StatisticType.find_by(key: 'hour', statistic_index_id: statistic_index_space.id)
|
||||||
|
StatisticType.create!({ statistic_index_id: statistic_index_space.id, key: 'hour', label: I18n.t('statistics.hours_number'),
|
||||||
|
graph: true, simple: false })
|
||||||
|
end
|
||||||
|
unless StatisticType.find_by(key: 'store', statistic_index_id: statistic_index_order.id)
|
||||||
|
StatisticType.create!({ statistic_index_id: statistic_index_order.id, key: 'store', label: I18n.t('statistics.store'),
|
||||||
|
graph: true, simple: true })
|
||||||
|
end
|
||||||
|
Plan.find_each do |plan|
|
||||||
|
if plan.find_statistic_type.nil?
|
||||||
|
StatisticType.create!(
|
||||||
|
statistic_index_id: 1,
|
||||||
|
key: plan.duration.to_i,
|
||||||
|
label: "#{I18n.t('statistics.duration')} : #{plan.human_readable_duration}",
|
||||||
|
graph: true,
|
||||||
|
simple: true
|
||||||
|
)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if StatisticType.count.zero?
|
# statistic_sub_types
|
||||||
StatisticType.create!([
|
unless StatisticSubType.find_by(key: 'created')
|
||||||
{ statistic_index_id: 2, key: 'booking', label: I18n.t('statistics.bookings'), graph: true, simple: true },
|
StatisticSubType.create!({ key: 'created', label: I18n.t('statistics.account_creation'),
|
||||||
{ statistic_index_id: 2, key: 'hour', label: I18n.t('statistics.hours_number'), graph: true, simple: false },
|
statistic_types: StatisticIndex.find_by(es_type_key: 'account').statistic_types })
|
||||||
{ statistic_index_id: 3, key: 'booking', label: I18n.t('statistics.bookings'), graph: false, simple: true },
|
end
|
||||||
{ statistic_index_id: 3, key: 'hour', label: I18n.t('statistics.hours_number'), graph: false, simple: false },
|
unless StatisticSubType.find_by(key: 'published')
|
||||||
{ statistic_index_id: 4, key: 'booking', label: I18n.t('statistics.tickets_number'), graph: false,
|
StatisticSubType.create!({ key: 'published', label: I18n.t('statistics.project_publication'),
|
||||||
simple: false },
|
statistic_types: StatisticIndex.find_by(es_type_key: 'project').statistic_types })
|
||||||
{ statistic_index_id: 4, key: 'hour', label: I18n.t('statistics.hours_number'), graph: false, simple: false },
|
end
|
||||||
{ statistic_index_id: 5, key: 'member', label: I18n.t('statistics.users'), graph: true, simple: true },
|
unless StatisticSubType.find_by(key: 'paid-processed')
|
||||||
{ statistic_index_id: 6, key: 'project', label: I18n.t('statistics.projects'), graph: false, simple: true },
|
StatisticSubType.create!({ key: 'paid-processed', label: I18n.t('statistics.paid-processed'),
|
||||||
{ statistic_index_id: 7, key: 'revenue', label: I18n.t('statistics.revenue'), graph: false, simple: false }
|
statistic_types: statistic_index_order.statistic_types })
|
||||||
])
|
end
|
||||||
|
unless StatisticSubType.find_by(key: 'aborted')
|
||||||
|
StatisticSubType.create!({ key: 'aborted', label: I18n.t('statistics.aborted'), statistic_types: statistic_index_order.statistic_types })
|
||||||
|
end
|
||||||
|
Plan.find_each do |plan|
|
||||||
|
type = plan.find_statistic_type
|
||||||
|
subtype = if StatisticSubType.find_by(key: plan.slug).nil?
|
||||||
|
plan.create_statistic_subtype
|
||||||
|
else
|
||||||
|
StatisticSubType.find_by(key: plan.slug)
|
||||||
|
end
|
||||||
|
|
||||||
|
if StatisticTypeSubType.find_by(statistic_type: type, statistic_sub_type: subtype).nil?
|
||||||
|
StatisticTypeSubType.create!(statistic_type: type, statistic_sub_type: subtype)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if StatisticSubType.count.zero?
|
# statistic_graphs
|
||||||
StatisticSubType.create!([
|
StatisticGraph.create!({ statistic_index_id: 1, chart_type: 'stackedAreaChart', limit: 0 }) unless StatisticGraph.find_by(statistic_index_id: 1)
|
||||||
{ key: 'created', label: I18n.t('statistics.account_creation'),
|
StatisticGraph.create!({ statistic_index_id: 2, chart_type: 'stackedAreaChart', limit: 0 }) unless StatisticGraph.find_by(statistic_index_id: 2)
|
||||||
statistic_types: StatisticIndex.find_by(es_type_key: 'account').statistic_types },
|
StatisticGraph.create!({ statistic_index_id: 3, chart_type: 'discreteBarChart', limit: 10 }) unless StatisticGraph.find_by(statistic_index_id: 3)
|
||||||
{ key: 'published', label: I18n.t('statistics.project_publication'),
|
StatisticGraph.create!({ statistic_index_id: 4, chart_type: 'discreteBarChart', limit: 10 }) unless StatisticGraph.find_by(statistic_index_id: 4)
|
||||||
statistic_types: StatisticIndex.find_by(es_type_key: 'project').statistic_types }
|
StatisticGraph.create!({ statistic_index_id: 5, chart_type: 'lineChart', limit: 0 }) unless StatisticGraph.find_by(statistic_index_id: 5)
|
||||||
])
|
StatisticGraph.create!({ statistic_index_id: 7, chart_type: 'discreteBarChart', limit: 10 }) unless StatisticGraph.find_by(statistic_index_id: 7)
|
||||||
end
|
|
||||||
|
|
||||||
if StatisticGraph.count.zero?
|
# statistic_custom_aggregations
|
||||||
StatisticGraph.create!([
|
unless StatisticCustomAggregation.find_by(es_type: 'availabilities', field: 'available_hours')
|
||||||
{ statistic_index_id: 1, chart_type: 'stackedAreaChart', limit: 0 },
|
|
||||||
{ statistic_index_id: 2, chart_type: 'stackedAreaChart', limit: 0 },
|
|
||||||
{ statistic_index_id: 3, chart_type: 'discreteBarChart', limit: 10 },
|
|
||||||
{ statistic_index_id: 4, chart_type: 'discreteBarChart', limit: 10 },
|
|
||||||
{ statistic_index_id: 5, chart_type: 'lineChart', limit: 0 },
|
|
||||||
{ statistic_index_id: 7, chart_type: 'discreteBarChart', limit: 10 }
|
|
||||||
])
|
|
||||||
end
|
|
||||||
|
|
||||||
if StatisticCustomAggregation.count.zero?
|
|
||||||
# available reservations hours for machines
|
# available reservations hours for machines
|
||||||
machine_hours = StatisticType.find_by(key: 'hour', statistic_index_id: 2)
|
machine_hours = StatisticType.find_by(key: 'hour', statistic_index_id: 2)
|
||||||
|
|
||||||
available_hours = StatisticCustomAggregation.new(
|
StatisticCustomAggregation.create!(
|
||||||
statistic_type_id: machine_hours.id,
|
statistic_type_id: machine_hours.id,
|
||||||
es_index: 'fablab',
|
es_index: 'fablab',
|
||||||
es_type: 'availabilities',
|
es_type: 'availabilities',
|
||||||
@ -89,12 +176,12 @@ if StatisticCustomAggregation.count.zero?
|
|||||||
query: '{"size":0, "aggregations":{"%<aggs_name>s":{"sum":{"field":"bookable_hours"}}}, "query":{"bool":{"must":[{"range":' \
|
query: '{"size":0, "aggregations":{"%<aggs_name>s":{"sum":{"field":"bookable_hours"}}}, "query":{"bool":{"must":[{"range":' \
|
||||||
'{"start_at":{"gte":"%<start_date>s", "lte":"%<end_date>s"}}}, {"match":{"available_type":"machines"}}]}}}'
|
'{"start_at":{"gte":"%<start_date>s", "lte":"%<end_date>s"}}}, {"match":{"available_type":"machines"}}]}}}'
|
||||||
)
|
)
|
||||||
available_hours.save!
|
end
|
||||||
|
unless StatisticCustomAggregation.find_by(es_type: 'availabilities', field: 'available_tickets')
|
||||||
# available training tickets
|
# available training tickets
|
||||||
training_bookings = StatisticType.find_by(key: 'booking', statistic_index_id: 3)
|
training_bookings = StatisticType.find_by(key: 'booking', statistic_index_id: 3)
|
||||||
|
|
||||||
available_tickets = StatisticCustomAggregation.new(
|
StatisticCustomAggregation.create!(
|
||||||
statistic_type_id: training_bookings.id,
|
statistic_type_id: training_bookings.id,
|
||||||
es_index: 'fablab',
|
es_index: 'fablab',
|
||||||
es_type: 'availabilities',
|
es_type: 'availabilities',
|
||||||
@ -102,30 +189,13 @@ if StatisticCustomAggregation.count.zero?
|
|||||||
query: '{"size":0, "aggregations":{"%<aggs_name>s":{"sum":{"field":"nb_total_places"}}}, "query":{"bool":{"must":[{"range":' \
|
query: '{"size":0, "aggregations":{"%<aggs_name>s":{"sum":{"field":"nb_total_places"}}}, "query":{"bool":{"must":[{"range":' \
|
||||||
'{"start_at":{"gte":"%<start_date>s", "lte":"%<end_date>s"}}}, {"match":{"available_type":"training"}}]}}}'
|
'{"start_at":{"gte":"%<start_date>s", "lte":"%<end_date>s"}}}, {"match":{"available_type":"training"}}]}}}'
|
||||||
)
|
)
|
||||||
available_tickets.save!
|
|
||||||
end
|
end
|
||||||
|
unless StatisticCustomAggregation.find_by(es_type: 'order', field: 'average_cart')
|
||||||
unless StatisticIndex.find_by(es_type_key: 'space')
|
# available training tickets
|
||||||
index = StatisticIndex.create!(es_type_key: 'space', label: I18n.t('statistics.spaces'))
|
order_store = StatisticType.find_by(key: 'store', statistic_index_id: statistic_index_order.id)
|
||||||
StatisticType.create!([
|
|
||||||
{ statistic_index_id: index.id, key: 'booking', label: I18n.t('statistics.bookings'),
|
|
||||||
graph: true, simple: true },
|
|
||||||
{ statistic_index_id: index.id, key: 'hour', label: I18n.t('statistics.hours_number'),
|
|
||||||
graph: true, simple: false }
|
|
||||||
])
|
|
||||||
end
|
|
||||||
|
|
||||||
unless StatisticIndex.find_by(es_type_key: 'order')
|
|
||||||
index = StatisticIndex.create!(es_type_key: 'order', label: I18n.t('statistics.orders'))
|
|
||||||
type = StatisticType.create!({ statistic_index_id: index.id, key: 'store', label: I18n.t('statistics.store'), graph: true, simple: true })
|
|
||||||
StatisticSubType.create!([
|
|
||||||
{ key: 'paid-processed', label: I18n.t('statistics.paid-processed'), statistic_types: [type] },
|
|
||||||
{ key: 'aborted', label: I18n.t('statistics.aborted'), statistic_types: [type] }
|
|
||||||
])
|
|
||||||
|
|
||||||
# average cart price for orders
|
# average cart price for orders
|
||||||
average_cart = StatisticCustomAggregation.new(
|
StatisticCustomAggregation.create!(
|
||||||
statistic_type_id: type.id,
|
statistic_type_id: order_store.id,
|
||||||
es_index: 'stats',
|
es_index: 'stats',
|
||||||
es_type: 'order',
|
es_type: 'order',
|
||||||
field: 'average_cart',
|
field: 'average_cart',
|
||||||
@ -133,5 +203,4 @@ unless StatisticIndex.find_by(es_type_key: 'order')
|
|||||||
'"script":"BigDecimal.valueOf(_value).setScale(1, RoundingMode.HALF_UP)", "missing": 0}}}, ' \
|
'"script":"BigDecimal.valueOf(_value).setScale(1, RoundingMode.HALF_UP)", "missing": 0}}}, ' \
|
||||||
'"query":{"bool":{"must":[{"range": {"date":{"gte":"%<start_date>s", "lte":"%<end_date>s"}}}]}}}'
|
'"query":{"bool":{"must":[{"range": {"date":{"gte":"%<start_date>s", "lte":"%<end_date>s"}}}]}}}'
|
||||||
)
|
)
|
||||||
average_cart.save!
|
|
||||||
end
|
end
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
|
||||||
# Database helpers
|
# Database helpers
|
||||||
module Database; end
|
module Database; end
|
||||||
|
|
||||||
@ -10,9 +9,9 @@ class Database::Sequence
|
|||||||
# update the ID sequence for the given table
|
# update the ID sequence for the given table
|
||||||
# @param table_name [String]
|
# @param table_name [String]
|
||||||
def update_id_seq(table_name)
|
def update_id_seq(table_name)
|
||||||
return unless @connection.instance_values['config'][:adapter] == 'postgresql'
|
return unless ActiveRecord::Base.connection.instance_values['config'][:adapter] == 'postgresql'
|
||||||
|
|
||||||
@connection.execute <<~SQL.squish
|
ActiveRecord::Base.connection.execute <<~SQL.squish
|
||||||
WITH max_id AS (
|
WITH max_id AS (
|
||||||
SELECT max(id) as max FROM #{table_name}
|
SELECT max(id) as max FROM #{table_name}
|
||||||
)
|
)
|
||||||
|
@ -9,16 +9,18 @@ namespace :fablab do
|
|||||||
create_stats_index
|
create_stats_index
|
||||||
create_stats_mappings
|
create_stats_mappings
|
||||||
add_event_filters
|
add_event_filters
|
||||||
|
add_machine_filters
|
||||||
|
add_space_filters
|
||||||
end
|
end
|
||||||
|
|
||||||
def delete_stats_index
|
def delete_stats_index
|
||||||
puts 'DELETE stats'
|
puts 'DELETE stats'
|
||||||
`curl -XDELETE http://#{ENV['ELASTICSEARCH_HOST']}:9200/stats`
|
`curl -XDELETE http://#{ENV.fetch('ELASTICSEARCH_HOST')}:9200/stats`
|
||||||
end
|
end
|
||||||
|
|
||||||
def create_stats_index
|
def create_stats_index
|
||||||
puts 'PUT index stats'
|
puts 'PUT index stats'
|
||||||
`curl -XPUT http://#{ENV['ELASTICSEARCH_HOST']}:9200/stats -d'
|
`curl -XPUT http://#{ENV.fetch('ELASTICSEARCH_HOST')}:9200/stats -d'
|
||||||
{
|
{
|
||||||
"settings" : {
|
"settings" : {
|
||||||
"index" : {
|
"index" : {
|
||||||
@ -32,7 +34,7 @@ namespace :fablab do
|
|||||||
def create_stats_mappings
|
def create_stats_mappings
|
||||||
%w[account event machine project subscription training user space].each do |stat|
|
%w[account event machine project subscription training user space].each do |stat|
|
||||||
puts "PUT Mapping stats/#{stat}"
|
puts "PUT Mapping stats/#{stat}"
|
||||||
`curl -XPUT http://#{ENV['ELASTICSEARCH_HOST']}:9200/stats/#{stat}/_mapping -d '
|
`curl -XPUT http://#{ENV.fetch('ELASTICSEARCH_HOST')}:9200/stats/#{stat}/_mapping -d '
|
||||||
{
|
{
|
||||||
"properties": {
|
"properties": {
|
||||||
"type": {
|
"type": {
|
||||||
@ -61,7 +63,7 @@ namespace :fablab do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def add_event_filters
|
def add_event_filters
|
||||||
`curl -XPUT http://#{ENV['ELASTICSEARCH_HOST']}:9200/stats/event/_mapping -d '
|
`curl -XPUT http://#{ENV.fetch('ELASTICSEARCH_HOST')}:9200/stats/event/_mapping -d '
|
||||||
{
|
{
|
||||||
"properties": {
|
"properties": {
|
||||||
"ageRange": {
|
"ageRange": {
|
||||||
@ -76,10 +78,35 @@ namespace :fablab do
|
|||||||
}';`
|
}';`
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def add_machine_filters
|
||||||
|
`curl -XPUT http://#{ENV.fetch('ELASTICSEARCH_HOST')}:9200/stats/machine/_mapping -d '
|
||||||
|
{
|
||||||
|
"properties": {
|
||||||
|
"machineDates": {
|
||||||
|
"properties": {
|
||||||
|
"type": "date",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}';`
|
||||||
|
end
|
||||||
|
|
||||||
|
def add_space_filters
|
||||||
|
`curl -XPUT http://#{ENV.fetch('ELASTICSEARCH_HOST')}:9200/stats/space/_mapping -d '
|
||||||
|
{
|
||||||
|
"properties": {
|
||||||
|
"spaceDates": {
|
||||||
|
"properties": {
|
||||||
|
"type": "date",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}';`
|
||||||
|
end
|
||||||
|
|
||||||
desc 'add spaces reservations to statistics'
|
desc 'add spaces reservations to statistics'
|
||||||
task add_spaces: :environment do
|
task add_spaces: :environment do
|
||||||
`curl -XPUT http://#{ENV['ELASTICSEARCH_HOST']}:9200/stats/space/_mapping -d '
|
`curl -XPUT http://#{ENV.fetch('ELASTICSEARCH_HOST')}:9200/stats/space/_mapping -d '
|
||||||
{
|
{
|
||||||
"properties": {
|
"properties": {
|
||||||
"type": {
|
"type": {
|
||||||
@ -129,19 +156,18 @@ namespace :fablab do
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
puts "[ElasticSearch] An error occurred while creating #{Availability.index_name}/#{Availability.document_type}. " \
|
puts "[ElasticSearch] An error occurred while creating #{Availability.index_name}/#{Availability.document_type}. " \
|
||||||
'Please check your ElasticSearch configuration.'
|
'Please check your ElasticSearch configuration.'
|
||||||
puts "\nCancelling..."
|
puts "\nCancelling..."
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
desc '(re)generate statistics in ElasticSearch for the past period. Use 0 to generate for today'
|
desc '(re)generate statistics in ElasticSearch for the past period. Use 0 to generate for today'
|
||||||
task :generate_stats, [:period] => :environment do |_task, args|
|
task :generate_stats, [:period] => :environment do |_task, args|
|
||||||
raise 'FATAL ERROR: You must pass a number of days (=> past period) OR a date to generate statistics' unless args.period
|
raise 'FATAL ERROR: You must pass a number of days (=> past period) OR a date to generate statistics' unless args.period
|
||||||
|
|
||||||
unless Setting.get('statistics_module')
|
unless Setting.get('statistics_module')
|
||||||
print 'Statistics are disabled. Do you still want to generate? (y/N) '
|
print 'Statistics are disabled. Do you still want to generate? (y/N) '
|
||||||
confirm = STDIN.gets.chomp
|
confirm = $stdin.gets.chomp
|
||||||
raise 'Interrupted by user' unless confirm == 'y'
|
raise 'Interrupted by user' unless confirm == 'y'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user