aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
authorLuc Donnet2017-09-13 16:56:23 +0200
committerLuc Donnet2017-09-13 16:56:23 +0200
commit3b7bbba3ce2f0a532ac7a8e7d1116e563526f112 (patch)
treeb49075ec37573ca7174794e3db6b7da12d92d583 /app
parent5ee3a180de710d23ceb7660b1bcc454701b42d87 (diff)
parent4804a4886c5267c1be1c367caaf35c17c681d179 (diff)
downloadchouette-core-3b7bbba3ce2f0a532ac7a8e7d1116e563526f112.tar.bz2
Merge branch 'master' of github.com:AF83/stif-boiv
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js2
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js2
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js5
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js4
-rw-r--r--app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js7
-rw-r--r--app/assets/javascripts/filters/import.js2
-rw-r--r--app/controllers/application_controller.rb2
-rw-r--r--app/controllers/imports_controller.rb47
-rw-r--r--app/controllers/referential_lines_controller.rb2
-rw-r--r--app/controllers/referentials_controller.rb35
-rw-r--r--app/controllers/routes_controller.rb10
-rw-r--r--app/controllers/workbenches_controller.rb2
-rw-r--r--app/decorators/referential_decorator.rb2
-rw-r--r--app/decorators/route_decorator.rb12
-rw-r--r--app/models/chouette/journey_pattern.rb2
-rw-r--r--app/models/chouette/netex_object_id.rb4
-rw-r--r--app/models/chouette/object_id.rb4
-rw-r--r--app/models/chouette/route.rb29
-rw-r--r--app/models/chouette/routing_constraint_zone.rb2
-rw-r--r--app/models/chouette/stif_netex_objectid.rb4
-rw-r--r--app/models/chouette/stop_point.rb15
-rw-r--r--app/models/chouette/vehicle_journey.rb2
-rw-r--r--app/models/compliance_check.rb8
-rw-r--r--app/models/compliance_check_block.rb3
-rw-r--r--app/models/compliance_check_resource.rb5
-rw-r--r--app/models/compliance_check_result.rb5
-rw-r--r--app/models/compliance_check_set.rb10
-rw-r--r--app/models/compliance_control.rb9
-rw-r--r--app/models/compliance_control_block.rb3
-rw-r--r--app/models/compliance_control_set.rb3
-rw-r--r--app/models/import.rb8
-rw-r--r--app/models/import_message.rb2
-rw-r--r--app/models/referential.rb18
-rw-r--r--app/models/referential_metadata.rb1
-rw-r--r--app/models/stop_area_copy.rb2
-rw-r--r--app/policies/route_policy.rb4
-rw-r--r--app/views/imports/_filters.html.slim6
-rw-r--r--app/views/referential_lines/show.html.slim2
-rw-r--r--app/views/routes/show.html.slim4
-rw-r--r--app/views/time_tables/index.html.slim4
-rw-r--r--app/views/workbenches/index.html.slim2
-rw-r--r--app/views/workbenches/show.html.slim2
42 files changed, 210 insertions, 87 deletions
diff --git a/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js b/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
index 34689070d..825e7bb7d 100644
--- a/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/journey_patterns/actions/index.js
@@ -90,7 +90,7 @@ const actions = {
resetValidation: (target) => {
$(target).parent().removeClass('has-error').children('.help-block').remove()
},
- humanOID : (oid) => oid.split(':')[2],
+ humanOID : (oid) => oid.split(':')[2].split("-").pop(),
validateFields : (fields) => {
const test = []
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
index de87c14af..2e2e06514 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/actions/index.js
@@ -269,7 +269,7 @@ const actions = {
type: 'RECEIVE_TOTAL_COUNT',
total
}),
- humanOID: (oid) => oid.split(':')[2],
+ humanOID: (oid) => oid.split(':')[2].split("-").pop(),
fetchVehicleJourneys : (dispatch, currentPage, nextPage, queryString) => {
if(currentPage == undefined){
currentPage = 1
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js
index 922a1e5ee..2f49e9980 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/MissionSelect2.js
@@ -2,6 +2,7 @@ var _ = require('lodash')
var React = require('react')
var PropTypes = require('react').PropTypes
var Select2 = require('react-select2')
+var humanOID = require('../../../actions').humanOID
// get JSON full path
var origin = window.location.origin
@@ -34,7 +35,7 @@ class BSelect4 extends React.Component{
delay: '500',
data: function(params) {
return {
- q: {published_name_cont_or_short_id_or_registration_number_cont: params.term},
+ q: {published_name_or_objectid_or_registration_number_cont: params.term},
};
},
processResults: function(data, params) {
@@ -43,7 +44,7 @@ class BSelect4 extends React.Component{
item => _.assign(
{},
item,
- { text: "<strong>" + item.published_name + " - " + item.short_id + "</strong><br/><small>" + item.registration_number + "</small>" }
+ { text: "<strong>" + item.published_name + " - " + humanOID(item.object_id) + "</strong><br/><small>" + item.registration_number + "</small>" }
)
)
};
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
index 5157300ba..2248175ab 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/TimetableSelect2.js
@@ -2,7 +2,7 @@ var _ = require('lodash')
var React = require('react')
var PropTypes = require('react').PropTypes
var Select2 = require('react-select2')
-var actions = require('../../../actions')
+var humanOID = require('../../../actions').humanOID
// get JSON full path
var origin = window.location.origin
@@ -48,7 +48,7 @@ class BSelect4 extends React.Component{
item => _.assign(
{},
item,
- {text: '<strong>' + "<span class='fa fa-circle' style='color:" + (item.color ? item.color : '#4B4B4B') + "'></span> " + item.comment + ' - ' + item.short_id + '</strong><br/><small>' + (item.day_types ? item.day_types.match(/[A-Z]?[a-z]+/g).join(', ') : "") + '</small>'}
+ {text: '<strong>' + "<span class='fa fa-circle' style='color:" + (item.color ? item.color : '#4B4B4B') + "'></span> " + item.comment + ' - ' + humanOID(item.objectid) + '</strong><br/><small>' + (item.day_types ? item.day_types.match(/[A-Z]?[a-z]+/g).join(', ') : "") + '</small>'}
)
)
};
diff --git a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js
index cc2ee4b9e..b9678ea9a 100644
--- a/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js
+++ b/app/assets/javascripts/es6_browserified/vehicle_journeys/components/tools/select2s/VJSelect2.js
@@ -2,6 +2,7 @@ var _ = require('lodash')
var React = require('react')
var PropTypes = require('react').PropTypes
var Select2 = require('react-select2')
+var humanOID = require('../../../actions').humanOID
// get JSON full path
var origin = window.location.origin
@@ -12,10 +13,6 @@ class BSelect4b extends React.Component{
constructor(props) {
super(props)
}
- humanOID(oid) {
- var a = oid.split(':')
- return a[a.length - 1]
- }
render() {
return (
@@ -46,7 +43,7 @@ class BSelect4b extends React.Component{
item => _.assign(
{},
item,
- { id: item.objectid, text: _.last(_.split(item.objectid, ':')) }
+ { id: item.objectid, text: humanOID(item.objectid) }
)
)
};
diff --git a/app/assets/javascripts/filters/import.js b/app/assets/javascripts/filters/import.js
index d0b96da10..bb665d5ad 100644
--- a/app/assets/javascripts/filters/import.js
+++ b/app/assets/javascripts/filters/import.js
@@ -1,6 +1,6 @@
const DateFilter = require('../helpers/date_filters')
$(document).ready(function(){
- const importDF = new DateFilter("#import_filter_btn", "Tous les champs du filtre de date doivent ĂȘtre remplis", "#q_started_on_date_NUMi")
+ const importDF = new DateFilter("#import_filter_btn", "Tous les champs du filtre de date doivent ĂȘtre remplis", "#q_started_at_begin_NUMi", "#q_started_at_end_NUMi")
importDF()
})
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 8cb5726c4..853c2f715 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -34,7 +34,7 @@ class ApplicationController < ActionController::Base
helper_method :current_organisation
def current_offer_workbench
- current_organisation.workbenches.where(name: "Gestion de l'offre")
+ current_organisation.workbenches.find_by_name("Gestion de l'offre")
end
helper_method :current_offer_workbench
diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb
index 97a8f91aa..fa8919f20 100644
--- a/app/controllers/imports_controller.rb
+++ b/app/controllers/imports_controller.rb
@@ -1,7 +1,8 @@
class ImportsController < BreadcrumbController
skip_before_action :authenticate_user!, only: [:download]
defaults resource_class: Import, collection_name: 'imports', instance_name: 'import'
- before_action :ransack_started_on_date, only: [:index]
+ before_action :ransack_started_at_params, only: [:index]
+ before_action :ransack_status_params, only: [:index]
respond_to :html
belongs_to :workbench
@@ -45,7 +46,10 @@ class ImportsController < BreadcrumbController
protected
def collection
- @q = parent.imports.where(type: "WorkbenchImport").search(params[:q])
+ scope = parent.imports.where(type: "WorkbenchImport")
+ scope = ransack_period scope
+
+ @q = scope.search(params[:q])
if sort_column && sort_direction
@imports ||= @q.result(distinct: true).order(sort_column + ' ' + sort_direction).paginate(page: params[:page], per_page: 10)
@@ -56,14 +60,39 @@ class ImportsController < BreadcrumbController
private
- def ransack_started_on_date
- date =[]
- if params[:q] && !params[:q]['started_on_date(1i)'].empty?
- ['started_on_date(1i)', 'started_on_date(2i)', 'started_on_date(3i)'].each do |key|
- date << params[:q][key].to_i
- params[:q].delete(key)
+ def ransack_started_at_params
+ start_date = []
+ end_date = []
+
+ if params[:q] && params[:q][:started_at] && !params[:q][:started_at].has_value?(nil) && !params[:q][:started_at].has_value?("")
+ [1, 2, 3].each do |key|
+ start_date << params[:q][:started_at]["begin(#{key}i)"].to_i
+ end_date << params[:q][:started_at]["end(#{key}i)"].to_i
end
- params[:q]['started_on_date'] = DateTime.new(*date) rescue nil
+ params[:q].delete([:started_at])
+ @begin_range = DateTime.new(*start_date,0,0,0) rescue nil
+ @end_range = DateTime.new(*end_date,23,59,59) rescue nil
+ end
+ end
+
+ # Fake ransack filter
+ def ransack_period scope
+ return scope unless !!@begin_range && !!@end_range
+
+ if @begin_range > @end_range
+ flash.now[:error] = t('imports.filters.error_period_filter')
+ else
+ scope = scope.where_started_at_between(@begin_range, @end_range)
+ end
+ scope
+ end
+
+ def ransack_status_params
+ if params[:q]
+ binding.pry
+ return params[:q].delete(:status_eq_any) if params[:q][:status_eq_any].empty? || ( (Import.status.values & params[:q][:status_eq_any]).length >= 4 )
+ params[:q][:status_eq_any].push("new", "running") if params[:q][:status_eq_any].include?("pending")
+ params[:q][:status_eq_any].push("aborted", "canceled") if params[:q][:status_eq_any].include?("failed")
end
end
diff --git a/app/controllers/referential_lines_controller.rb b/app/controllers/referential_lines_controller.rb
index 1da64991d..ec0bbbb18 100644
--- a/app/controllers/referential_lines_controller.rb
+++ b/app/controllers/referential_lines_controller.rb
@@ -11,7 +11,7 @@ class ReferentialLinesController < ChouetteController
belongs_to :referential
def show
- @routes = resource.routes
+ @routes = resource.routes.order(:objectid)
case sort_route_column
when "stop_points", "journey_patterns"
diff --git a/app/controllers/referentials_controller.rb b/app/controllers/referentials_controller.rb
index bd0544a74..c8984076a 100644
--- a/app/controllers/referentials_controller.rb
+++ b/app/controllers/referentials_controller.rb
@@ -7,17 +7,19 @@ class ReferentialsController < BreadcrumbController
respond_to :js, :only => :show
def new
- if params[:from]
- source_referential = Referential.find(params[:from])
- @referential = Referential.new_from(source_referential, current_functional_scope)
+ new! do
+ build_referenial
end
+ end
- new! do
- @referential.data_format = current_organisation.data_format
- @referential.workbench_id ||= params[:workbench_id]
+ def create
+ create! do |format|
+ build_referenial
- if @referential.in_workbench?
- @referential.init_metadatas default_date_range: Range.new(Date.today, Date.today.advance(months: 1))
+ if !!@referential.created_from_id
+ format.html { redirect_to workbench_path(@referential.workbench) }
+ else
+ build_breadcrumb :new
end
end
end
@@ -25,7 +27,7 @@ class ReferentialsController < BreadcrumbController
def show
resource.switch
show! do |format|
- @referential = @referential.decorate(context: { workbench_id: params[:workbench_id] } )
+ @referential = @referential.decorate(context: { current_workbench_id: params[:current_workbench_id] } )
@reflines = lines_collection.paginate(page: params[:page], per_page: 10)
@reflines = ModelDecorator.decorate(
@reflines,
@@ -123,6 +125,21 @@ class ReferentialsController < BreadcrumbController
super
end
+ def build_referenial
+ if params[:from]
+ source_referential = Referential.find(params[:from])
+ @referential = Referential.new_from(source_referential, current_functional_scope)
+ @referential.workbench_id = params[:current_workbench_id]
+ end
+
+ @referential.data_format = current_organisation.data_format
+ @referential.workbench_id ||= params[:workbench_id]
+
+ if @referential.in_workbench?
+ @referential.init_metadatas default_date_range: Range.new(Date.today, Date.today.advance(months: 1))
+ end
+ end
+
private
def sort_column
sortable_columns = Chouette::Line.column_names + ['networks.name', 'companies.name']
diff --git a/app/controllers/routes_controller.rb b/app/controllers/routes_controller.rb
index 7ba2c1a58..04f63c112 100644
--- a/app/controllers/routes_controller.rb
+++ b/app/controllers/routes_controller.rb
@@ -69,11 +69,11 @@ class RoutesController < ChouetteController
end
end
- # def update
- # update! do |success, failure|
- # success.html { redirect_to referential_line_path(@referential,@line) }
- # end
- # end
+ def duplicate
+ route = Chouette::Route.find(params[:id]).duplicate
+ redirect_to edit_referential_line_route_path(@referential, route.line, route)
+ end
+
protected
alias_method :route, :resource
diff --git a/app/controllers/workbenches_controller.rb b/app/controllers/workbenches_controller.rb
index bae3fcff2..54ddb8be1 100644
--- a/app/controllers/workbenches_controller.rb
+++ b/app/controllers/workbenches_controller.rb
@@ -24,7 +24,7 @@ class WorkbenchesController < BreadcrumbController
@wbench_refs,
with: ReferentialDecorator,
context: {
- workbench_id: params[:id]
+ current_workbench_id: params[:id]
}
)
show! do
diff --git a/app/decorators/referential_decorator.rb b/app/decorators/referential_decorator.rb
index 4e9c242fd..dccf0052c 100644
--- a/app/decorators/referential_decorator.rb
+++ b/app/decorators/referential_decorator.rb
@@ -13,7 +13,7 @@ class ReferentialDecorator < Draper::Decorator
if policy.clone?
links << Link.new(
content: h.t('actions.clone'),
- href: h.new_referential_path(from: object.id, workbench_id: context[:workbench_id])
+ href: h.new_referential_path(from: object.id, current_workbench_id: context[:current_workbench_id])
)
end
if policy.archive?
diff --git a/app/decorators/route_decorator.rb b/app/decorators/route_decorator.rb
index 484c3db04..510c941a3 100644
--- a/app/decorators/route_decorator.rb
+++ b/app/decorators/route_decorator.rb
@@ -45,6 +45,18 @@ class RouteDecorator < Draper::Decorator
)
)
+ if h.policy(object).duplicate?
+ links << Link.new(
+ content: h.t('routes.duplicate.title'),
+ href: h.duplicate_referential_line_route_path(
+ context[:referential],
+ context[:line],
+ object
+ ),
+ method: :post
+ )
+ end
+
if h.policy(object).destroy?
links << Link.new(
content: h.destroy_link_content,
diff --git a/app/models/chouette/journey_pattern.rb b/app/models/chouette/journey_pattern.rb
index 2b62d5c7f..fa2a9c8bb 100644
--- a/app/models/chouette/journey_pattern.rb
+++ b/app/models/chouette/journey_pattern.rb
@@ -23,7 +23,7 @@ class Chouette::JourneyPattern < Chouette::TridentActiveRecord
def local_id
- "IBOO-#{self.try(:route).try(:line).try(:objectid).try(:local_id)}-#{self.referential.id}-#{self.id}"
+ "IBOO-#{self.referential.id}-#{self.try(:route).try(:line).try(:objectid).try(:local_id)}-#{self.id}"
end
def checksum_attributes
diff --git a/app/models/chouette/netex_object_id.rb b/app/models/chouette/netex_object_id.rb
index 07d862992..441004c1e 100644
--- a/app/models/chouette/netex_object_id.rb
+++ b/app/models/chouette/netex_object_id.rb
@@ -5,7 +5,7 @@ class Chouette::NetexObjectId < String
end
alias_method :objectid?, :valid?
- @@format = /^([A-Za-z_]+):([0-9A-Za-z_]+):([A-Za-z]+):([0-9A-Za-z_-]+)$/
+ @@format = /^([A-Za-z_]+):([0-9A-Za-z_]+):([A-Za-z]+):([0-9A-Za-z_-]+)$/
cattr_reader :format
def parts
@@ -27,7 +27,7 @@ class Chouette::NetexObjectId < String
def local_id
parts.try(:fourth)
end
-
+
def self.create(provider_id, system_id, object_type, local_id)
new [provider_id, system_id, object_type, local_id].join(":")
end
diff --git a/app/models/chouette/object_id.rb b/app/models/chouette/object_id.rb
index 4f58048e1..0b122c91b 100644
--- a/app/models/chouette/object_id.rb
+++ b/app/models/chouette/object_id.rb
@@ -5,7 +5,7 @@ class Chouette::ObjectId < String
end
alias_method :objectid?, :valid?
- @@format = /^([0-9A-Za-z_]+):([A-Za-z]+):([0-9A-Za-z_-]+)$/
+ @@format = /^([0-9A-Za-z_]+):([A-Za-z]+):([0-9A-Za-z_-]+)$/
cattr_reader :format
def parts
@@ -23,7 +23,7 @@ class Chouette::ObjectId < String
def local_id
parts.try(:third)
end
-
+
def self.create(system_id, object_type, local_id)
new [system_id, object_type, local_id].join(":")
end
diff --git a/app/models/chouette/route.rb b/app/models/chouette/route.rb
index 5b89fbbe8..49493d5b5 100644
--- a/app/models/chouette/route.rb
+++ b/app/models/chouette/route.rb
@@ -16,6 +16,7 @@ class Chouette::Route < Chouette::TridentActiveRecord
end
belongs_to :line
+ belongs_to :opposite_route, :class_name => 'Chouette::Route', :foreign_key => :opposite_route_id
has_many :routing_constraint_zones
has_many :journey_patterns, :dependent => :destroy
@@ -30,7 +31,6 @@ class Chouette::Route < Chouette::TridentActiveRecord
Chouette::Route.vehicle_journeys_timeless(proxy_association.owner.journey_patterns.pluck( :departure_stop_point_id))
end
end
- belongs_to :opposite_route, :class_name => 'Chouette::Route', :foreign_key => :opposite_route_id
has_many :stop_points, -> { order("position") }, :dependent => :destroy do
def find_by_stop_area(stop_area)
stop_area_ids = Integer === stop_area ? [stop_area] : (stop_area.children_in_depth + [stop_area]).map(&:id)
@@ -56,12 +56,13 @@ class Chouette::Route < Chouette::TridentActiveRecord
end
has_many :stop_areas, -> { order('stop_points.position ASC') }, :through => :stop_points do
def between(departure, arrival)
- departure, arrival = [departure, arrival].collect do |endpoint|
+ departure, arrival = [departure, arrival].map do |endpoint|
String === endpoint ? Chouette::StopArea.find_by_objectid(endpoint) : endpoint
end
proxy_owner.stop_points.between(departure, arrival).includes(:stop_area).collect(&:stop_area)
end
end
+
accepts_nested_attributes_for :stop_points, :allow_destroy => :true
validates_presence_of :name
@@ -75,8 +76,30 @@ class Chouette::Route < Chouette::TridentActiveRecord
after_commit :journey_patterns_control_route_sections
+ def duplicate
+ overrides = {
+ 'opposite_route_id' => nil
+ }
+ keys_for_create = attributes.keys - %w{id objectid created_at updated_at}
+ atts_for_create = attributes
+ .slice(*keys_for_create)
+ .merge(overrides)
+ new_route = self.class.create!(atts_for_create)
+ duplicate_stop_points(for_route: new_route)
+ new_route
+ end
+
+ def duplicate_stop_points(for_route:)
+ stop_points.each(&duplicate_stop_point(for_route: for_route))
+ end
+ def duplicate_stop_point(for_route:)
+ -> stop_point do
+ stop_point.duplicate(for_route: for_route)
+ end
+ end
+
def local_id
- "IBOO-#{self.line.objectid.local_id}-#{self.referential.id}-#{self.id}"
+ "IBOO-#{self.referential.id}-#{self.line.objectid.local_id}-#{self.id}"
end
def geometry_presenter
diff --git a/app/models/chouette/routing_constraint_zone.rb b/app/models/chouette/routing_constraint_zone.rb
index 21efa2539..efe1b7237 100644
--- a/app/models/chouette/routing_constraint_zone.rb
+++ b/app/models/chouette/routing_constraint_zone.rb
@@ -9,7 +9,7 @@ class Chouette::RoutingConstraintZone < Chouette::TridentActiveRecord
validate :stop_points_belong_to_route, :not_all_stop_points_selected
def local_id
- "IBOO-#{self.route.line.objectid.local_id}-#{self.route.objectid.local_id}-#{self.referential.id}-#{self.id}"
+ "IBOO-#{self.referential.id}-#{self.route.line.objectid.local_id}-#{self.route.objectid.local_id}-#{self.id}"
end
scope :order_by_stop_points_count, ->(direction) do
diff --git a/app/models/chouette/stif_netex_objectid.rb b/app/models/chouette/stif_netex_objectid.rb
index 3b11691d9..a0a91668a 100644
--- a/app/models/chouette/stif_netex_objectid.rb
+++ b/app/models/chouette/stif_netex_objectid.rb
@@ -26,6 +26,10 @@ class Chouette::StifNetexObjectid < String
parts.try(:fourth)
end
+ def short_id
+ local_id.try(:split, "-").try(:[], -1)
+ end
+
def self.create(provider_id, object_type, local_id, boiv_id)
new [provider_id, object_type, local_id, boiv_id].join(":")
end
diff --git a/app/models/chouette/stop_point.rb b/app/models/chouette/stop_point.rb
index 8fe79dc0c..89c492b91 100644
--- a/app/models/chouette/stop_point.rb
+++ b/app/models/chouette/stop_point.rb
@@ -20,6 +20,11 @@ module Chouette
validates_presence_of :stop_area
validate :stop_area_id_validation
+ def stop_area_id_validation
+ if stop_area_id.nil?
+ errors.add(:stop_area_id, I18n.t("stop_areas.errors.empty"))
+ end
+ end
scope :default_order, -> { order("position") }
@@ -34,10 +39,12 @@ module Chouette
end
end
- def stop_area_id_validation
- if stop_area_id.nil?
- errors.add(:stop_area_id, I18n.t("stop_areas.errors.empty"))
- end
+ def duplicate(for_route:)
+ keys_for_create = attributes.keys - %w{id objectid created_at updated_at}
+ atts_for_create = attributes
+ .slice(*keys_for_create)
+ .merge('route_id' => for_route.id)
+ self.class.create!(atts_for_create)
end
def self.area_candidates
diff --git a/app/models/chouette/vehicle_journey.rb b/app/models/chouette/vehicle_journey.rb
index e60afef6e..f574afc93 100644
--- a/app/models/chouette/vehicle_journey.rb
+++ b/app/models/chouette/vehicle_journey.rb
@@ -57,7 +57,7 @@ module Chouette
end
def local_id
- "IBOO-#{self.route.line.objectid.local_id}-#{self.referential.id}-#{self.id}"
+ "IBOO-#{self.referential.id}-#{self.route.line.objectid.local_id}-#{self.id}"
end
def checksum_attributes
diff --git a/app/models/compliance_check.rb b/app/models/compliance_check.rb
index a9dbc4211..85cf5e37e 100644
--- a/app/models/compliance_check.rb
+++ b/app/models/compliance_check.rb
@@ -1,3 +1,9 @@
-class ComplianceCheck
+class ComplianceCheck < ActiveRecord::Base
+ belongs_to :compliance_check_set
+ belongs_to :compliance_check_block
+ enum criticity: [:info, :warning, :error]
+ validates :criticity, presence: true
+ validates :name, presence: true
+ validates :code, presence: true
end
diff --git a/app/models/compliance_check_block.rb b/app/models/compliance_check_block.rb
new file mode 100644
index 000000000..035c03ed9
--- /dev/null
+++ b/app/models/compliance_check_block.rb
@@ -0,0 +1,3 @@
+class ComplianceCheckBlock < ActiveRecord::Base
+ belongs_to :compliance_check_set
+end
diff --git a/app/models/compliance_check_resource.rb b/app/models/compliance_check_resource.rb
new file mode 100644
index 000000000..7826f00c3
--- /dev/null
+++ b/app/models/compliance_check_resource.rb
@@ -0,0 +1,5 @@
+class ComplianceCheckResource < ActiveRecord::Base
+ extend Enumerize
+
+ enumerize :status, in: %w[new successful warning failed]
+end
diff --git a/app/models/compliance_check_result.rb b/app/models/compliance_check_result.rb
index 06f8649f5..161e45189 100644
--- a/app/models/compliance_check_result.rb
+++ b/app/models/compliance_check_result.rb
@@ -1,3 +1,4 @@
-class ComplianceCheckResult
-
+class ComplianceCheckResult < ActiveRecord::Base
+ belongs_to :compliance_check
+ belongs_to :compliance_check_resource
end
diff --git a/app/models/compliance_check_set.rb b/app/models/compliance_check_set.rb
new file mode 100644
index 000000000..7b6400a21
--- /dev/null
+++ b/app/models/compliance_check_set.rb
@@ -0,0 +1,10 @@
+class ComplianceCheckSet < ActiveRecord::Base
+ extend Enumerize
+
+ belongs_to :referential
+ belongs_to :compliance_control_set
+ belongs_to :workbench
+ belongs_to :parent, polymorphic: true
+
+ enumerize :status, in: %w[new pending successful warning failed running aborted canceled]
+end
diff --git a/app/models/compliance_control.rb b/app/models/compliance_control.rb
new file mode 100644
index 000000000..64556b524
--- /dev/null
+++ b/app/models/compliance_control.rb
@@ -0,0 +1,9 @@
+class ComplianceControl < ActiveRecord::Base
+ belongs_to :compliance_control_set
+ belongs_to :compliance_control_block
+
+ enum criticity: [:info, :warning, :error]
+ validates :criticity, presence: true
+ validates :name, presence: true
+ validates :code, presence: true
+end
diff --git a/app/models/compliance_control_block.rb b/app/models/compliance_control_block.rb
new file mode 100644
index 000000000..cf5a9d72b
--- /dev/null
+++ b/app/models/compliance_control_block.rb
@@ -0,0 +1,3 @@
+class ComplianceControlBlock < ActiveRecord::Base
+ belongs_to :compliance_control_set
+end
diff --git a/app/models/compliance_control_set.rb b/app/models/compliance_control_set.rb
new file mode 100644
index 000000000..7801eb612
--- /dev/null
+++ b/app/models/compliance_control_set.rb
@@ -0,0 +1,3 @@
+class ComplianceControlSet < ActiveRecord::Base
+ belongs_to :organisation
+end
diff --git a/app/models/import.rb b/app/models/import.rb
index 55d74c13c..74f7ef10c 100644
--- a/app/models/import.rb
+++ b/app/models/import.rb
@@ -9,7 +9,9 @@ class Import < ActiveRecord::Base
has_many :resources, class_name: "ImportResource", dependent: :destroy
has_many :children, foreign_key: :parent_id, class_name: "Import", dependent: :destroy
- scope :started_on_date, ->(date) { where('started_at BETWEEN ? AND ?', date.beginning_of_day, date.end_of_day) }
+ scope :where_started_at_between, ->(start_date, end_date) do
+ where('started_at BETWEEN ? AND ?', start_date, end_date)
+ end
extend Enumerize
enumerize :status, in: %i(new pending successful warning failed running aborted canceled), scope: true, default: :new
@@ -19,10 +21,6 @@ class Import < ActiveRecord::Base
before_create :initialize_fields
- def self.ransackable_scopes(auth_object = nil)
- [:started_on_date]
- end
-
def self.model_name
ActiveModel::Name.new Import, Import, "Import"
end
diff --git a/app/models/import_message.rb b/app/models/import_message.rb
index 913f6fd41..5d0f5c862 100644
--- a/app/models/import_message.rb
+++ b/app/models/import_message.rb
@@ -1,6 +1,6 @@
class ImportMessage < ActiveRecord::Base
belongs_to :import
- belongs_to :resource, class_name: ImportResource, dependent: :destroy
+ belongs_to :resource, class_name: ImportResource
enum criticity: [:info, :warning, :error]
validates :criticity, presence: true
diff --git a/app/models/referential.rb b/app/models/referential.rb
index b508e2f33..af08aa868 100644
--- a/app/models/referential.rb
+++ b/app/models/referential.rb
@@ -11,6 +11,9 @@ class Referential < ActiveRecord::Base
# validates_presence_of :lower_corner
validates_uniqueness_of :slug
+
+ validates_presence_of :line_referential
+ validates_presence_of :stop_area_referential
validates_format_of :slug, :with => %r{\A[a-z][0-9a-z_]+\Z}
validates_format_of :prefix, :with => %r{\A[0-9a-zA-Z_]+\Z}
validates_format_of :upper_corner, :with => %r{\A-?[0-9]+\.?[0-9]*\,-?[0-9]+\.?[0-9]*\Z}
@@ -180,8 +183,7 @@ class Referential < ActiveRecord::Base
projection_type || ""
end
- before_validation :assign_line_and_stop_area_referential, :on => :create, if: :workbench, unless: :created_from
- before_validation :clone_associations, :on => :create, if: :created_from
+ before_validation :assign_line_and_stop_area_referential, :on => :create, if: :workbench
before_validation :assign_slug, :on => :create
before_validation :assign_prefix, :on => :create
before_create :create_schema
@@ -202,18 +204,6 @@ class Referential < ActiveRecord::Base
end
end
- def clone_associations
- self.line_referential = created_from.line_referential
- self.stop_area_referential = created_from.stop_area_referential
- self.workbench = created_from.workbench
- end
-
- def clone_metadatas
- created_from.metadatas.each do |meta|
- self.metadatas << ReferentialMetadata.new_from(meta)
- end
- end
-
def metadatas_period
query = "select min(lower), max(upper) from (select lower(unnest(periodes)) as lower, upper(unnest(periodes)) as upper from public.referential_metadata where public.referential_metadata.referential_id = #{id}) bounds;"
diff --git a/app/models/referential_metadata.rb b/app/models/referential_metadata.rb
index 839a937f4..393dc70d3 100644
--- a/app/models/referential_metadata.rb
+++ b/app/models/referential_metadata.rb
@@ -157,6 +157,7 @@ class ReferentialMetadata < ActiveRecord::Base
def self.new_from(from, functional_scope)
from.dup.tap do |metadata|
+ metadata.referential_source_id = from.referential_id
metadata.line_ids = from.referential.lines.where(id: metadata.line_ids, objectid: functional_scope).collect(&:id)
metadata.referential_id = nil
end
diff --git a/app/models/stop_area_copy.rb b/app/models/stop_area_copy.rb
index 0fa56ff68..d3eb78557 100644
--- a/app/models/stop_area_copy.rb
+++ b/app/models/stop_area_copy.rb
@@ -1,5 +1,3 @@
-# -*- coding: utf-8 -*-
-
class StopAreaCopy
include ActiveModel::Validations
include ActiveModel::Conversion
diff --git a/app/policies/route_policy.rb b/app/policies/route_policy.rb
index 786b0acf4..7e9fe251a 100644
--- a/app/policies/route_policy.rb
+++ b/app/policies/route_policy.rb
@@ -16,4 +16,8 @@ class RoutePolicy < ApplicationPolicy
def update?
!archived? && organisation_match? && user.has_permission?('routes.update')
end
+
+ def duplicate?
+ create?
+ end
end
diff --git a/app/views/imports/_filters.html.slim b/app/views/imports/_filters.html.slim
index a216019b6..85099b99a 100644
--- a/app/views/imports/_filters.html.slim
+++ b/app/views/imports/_filters.html.slim
@@ -9,12 +9,14 @@
.ffg-row
.form-group.togglable
= f.label Import.human_attribute_name(:status), required: false, class: 'control-label'
- = f.input :status_eq_any, collection: @imports.map(&:status).uniq.compact, as: :check_boxes, label: false, label_method: lambda{|l| ("<span>" + import_status(l) + "</span>").html_safe}, required: false, wrapper_html: { class: 'checkbox_list'}, input_html: { checked: true}
+ = f.input :status_eq_any, collection: %w(pending successful warning failed), as: :check_boxes, label: false, label_method: lambda{|l| ("<span>" + import_status(l) + "</span>").html_safe}, required: false, wrapper_html: { class: "checkbox_list"}
.form-group.togglable
= f.label Import.human_attribute_name(:started_at), required: false, class: 'control-label'
.filter_menu
- = f.input :started_on_date, as: :date, label: false, wrapper_html: { class: 'date smart_date filter_menu-item' }, include_blank: true
+ = f.simple_fields_for :started_at do |p|
+ = p.input :begin, as: :date, label: false, wrapper_html: { class: 'date smart_date filter_menu-item' }, default: @begin_range, include_blank: @begin_range ? false : true
+ = p.input :end, as: :date, label: false, wrapper_html: { class: 'date smart_date filter_menu-item' }, default: @end_range, include_blank: @end_range ? false : true
.actions
= link_to t('actions.erase'), workbench_imports_path(@workbench), class: 'btn btn-link'
diff --git a/app/views/referential_lines/show.html.slim b/app/views/referential_lines/show.html.slim
index cbce7a7d5..6e59d83b3 100644
--- a/app/views/referential_lines/show.html.slim
+++ b/app/views/referential_lines/show.html.slim
@@ -46,7 +46,7 @@
[ \
TableBuilderHelper::Column.new( \
name: 'ID', \
- attribute: Proc.new { |n| n.objectid.local_id }, \
+ attribute: Proc.new { |n| n.objectid.short_id }, \
sortable: false \
), \
TableBuilderHelper::Column.new( \
diff --git a/app/views/routes/show.html.slim b/app/views/routes/show.html.slim
index a21b5ec8a..e2681d215 100644
--- a/app/views/routes/show.html.slim
+++ b/app/views/routes/show.html.slim
@@ -21,7 +21,7 @@
.row
.col-lg-6.col-md-6.col-sm-12.col-xs-12
= definition_list t('metadatas'),
- { t('id_codif') => @route.try(:objectid).try(:local_id),
+ { t('objectid') => @route.objectid.short_id,
t('activerecord.attributes.route.published_name') => (@route.published_name ? @route.published_name : '-'),
@route.human_attribute_name(:wayback) => (@route.wayback ? @route.wayback_text : '-' ),
@route.human_attribute_name(:opposite_route) => (@route.opposite_route ? @route.opposite_route.name : '-') }
@@ -29,7 +29,7 @@
- if @route_sp.any?
.col-lg-6.col-md-6.col-sm-12.col-xs-12
#route_map.map.mb-lg
-
+
.row
.col-lg-12
- if @route_sp.any?
diff --git a/app/views/time_tables/index.html.slim b/app/views/time_tables/index.html.slim
index a1b9c4e09..b984f95c8 100644
--- a/app/views/time_tables/index.html.slim
+++ b/app/views/time_tables/index.html.slim
@@ -18,7 +18,7 @@
[ \
TableBuilderHelper::Column.new( \
name: 'ID', \
- attribute: Proc.new { |n| n.objectid.local_id }, \
+ attribute: Proc.new { |n| n.objectid.short_id}, \
sortable: false \
), \
TableBuilderHelper::Column.new( \
@@ -69,4 +69,4 @@
= javascript_tag do
| window.I18n = #{(I18n.backend.send(:translations).to_json).html_safe};
-= javascript_include_tag 'filters/timetable.js'
+= javascript_include_tag 'filters/time_table.js'
diff --git a/app/views/workbenches/index.html.slim b/app/views/workbenches/index.html.slim
index 2ea1f0fe4..d35ed8121 100644
--- a/app/views/workbenches/index.html.slim
+++ b/app/views/workbenches/index.html.slim
@@ -61,7 +61,7 @@
- if @referentials.any?
.list-group
- @referentials.each_with_index do |referential, i|
- = link_to referential.name, referential_path(referential, workbench_id: referential.workbench_id), class: 'list-group-item' if i < 6
+ = link_to referential.name, referential_path(referential, workbench_id: referential.workbench_id, current_workbench_id: @workbench.id), class: 'list-group-item' if i < 6
- else
.panel-body
diff --git a/app/views/workbenches/show.html.slim b/app/views/workbenches/show.html.slim
index 50c719d12..fd72979ea 100644
--- a/app/views/workbenches/show.html.slim
+++ b/app/views/workbenches/show.html.slim
@@ -29,7 +29,7 @@
key: :name, \
attribute: 'name', \
link_to: lambda do |referential| \
- referential_path(referential, workbench_id: referential.workbench_id) \
+ referential_path(referential, current_workbench_id: params[:id]) \
end \
), \
TableBuilderHelper::Column.new( \