This commit is contained in:
Nicolas Bally 2021-02-09 17:39:42 +01:00
parent e5b04f41cf
commit 0848b6ef2e
39 changed files with 620 additions and 57 deletions

View File

@ -12,7 +12,7 @@ class Admin::CircuitsController < ApplicationController
def index
@circuits = Circuit.all
@circuits = sort_by_sorting(@circuits, "name DESC")
@circuits = sort_by_sorting(@circuits, "name ASC")
respond_to do |format|
format.html{

View File

@ -43,13 +43,17 @@ class Admin::MOdrFilesController < ApplicationController
if params[:m_odr_file_type_id] == "1"
@m_odr_file.m_odr_file_roulages.build
else
@m_odr_file.m_odr_file_products.build
@m_odr_file.m_odr_file_products.build(:admin_form => true)
end
end
def edit
@m_odr_file = MOdrFile.find(params[:id])
@m_odr_file.m_odr_file_products.each do |mofp|
mofp.admin_form = true
end
end

View File

@ -74,4 +74,20 @@ class Admin::MOdrPlacesController < ApplicationController
@m_odr_place.destroy
end
def autocomplete
search = params[:search]
@m_odr_places = MOdrPlace.where("name LIKE ? or city LIKE ? or cp LIKE ? or enseigne LIKE ?", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%")
@m_odr_places = @m_odr_places.distinct.limit(50)
respond_to do |format|
format.json { render json: @m_odr_places.map{|a| {:id => a.id, :member_label => a.member_label}} }
end
end
end

View File

@ -33,6 +33,71 @@ class Admin::MOdrPrimesController < ApplicationController
@m_odr_primes = @m_odr_primes.page(page).per(per_page)
}
format.csv {
@headers = []
@columns = []
MOdrPrime.qi_table_order.each do |key, value|
if value.instance_of? Hash
name = value[:name]
else
name = value
end
if name != "Actions"
@headers << name.to_s
@columns << key
end
end
xlsx_package = Axlsx::Package.new
wb = xlsx_package.workbook
wb.add_worksheet(name: "import") do |sheet|
sheet.add_row @headers
@m_odr_primes.each do |m_odr_prime|
line = []
@columns.each do |column|
if (m_odr_prime.respond_to?("csv_"+column.to_s))
line << m_odr_prime.send("csv_"+column.to_s)
elsif (m_odr_prime.respond_to?(column))
if m_odr_prime.send(column.to_s).class.to_s == "BigDecimal"
line << m_odr_prime.send(column.to_s).to_s.gsub('.', ',')
else
line << m_odr_prime.send(column.to_s)
end
else
line << column.to_s
end
end
sheet.add_row line, types: line.map{|t| self.cell_type_from_value(t)}
end
end
@final_file = "#{Rails.root}/private_medias/export-primes-#{Time.now.to_s.to_slug}.xlsx"
xlsx_package.serialize(@final_file)
send_file @final_file
}
end
end

View File

@ -13,7 +13,7 @@ class Admin::MOdrRepRibsController < ApplicationController
def index
@m_odr_rep_ribs = MOdrRepRib.all
@m_odr_rep_ribs = sort_by_sorting(@m_odr_rep_ribs, "id DESC")
@m_odr_rep_ribs = sort_by_sorting(@m_odr_rep_ribs, "admin_ok ASC")
respond_to do |format|
format.html{

View File

@ -18,6 +18,11 @@ class Admin::MOdrVirementsController < ApplicationController
@m_odr_virements = @m_odr_virements.where(:m_odr_id => params[:search][:m_odr_id])
end
if params[:search][:name].to_s != ""
@m_odr_virements = @m_odr_virements.joins(:p_customer).where("p_customers.cc_particular_name LIKE ? or p_customers.cc_particular_firstname LIKE ? ", "%#{params[:search][:name]}%", "%#{params[:search][:name]}%")
end
@m_odr_virements = sort_by_sorting(@m_odr_virements, "created_at DESC")

View File

@ -13,7 +13,7 @@ class Admin::OrganisateursController < ApplicationController
def index
@organisateurs = Organisateur.all
@organisateurs = sort_by_sorting(@organisateurs, "name DESC")
@organisateurs = sort_by_sorting(@organisateurs, "name ASC")
respond_to do |format|
format.html{

View File

@ -47,6 +47,99 @@ class Admin::PStatsController < ApplicationController
@finished = @p_customer_sheets.where(:state => ["livrée","facturée"])
params[:search][:per_page] = params[:search][:per_page] || 500000
per_page = params[:search][:per_page]
page = (params[:page] and params[:page] != "") ? params[:page] : 1
@m_odr_primes = MOdrPrime.where("m_odr_primes.created_at >= ? and m_odr_primes.created_at < ?",@start.beginning_of_year, @stop).where(:state => ["Virement envoyé"])
@m_odr_primes = @m_odr_primes.joins(:p_customer)
@m_odr_primes = @m_odr_primes.where("m_odr_primes.created_at >= ?", @start)
@m_odr_primes = sort_by_sorting(@m_odr_primes, "m_odr_primes.created_at DESC")
@m_odr_primes = @m_odr_primes.page(page).per(per_page)
respond_to do |format|
format.html{
params[:per_page] = params[:per_page] || 50
per_page = params[:per_page]
page = (params[:page] and params[:page] != "") ? params[:page] : 1
@m_odr_primes = @m_odr_primes.page(page).per(per_page)
}
format.csv {
@headers = []
@columns = []
MOdrPrime.qi_table_order.each do |key, value|
if value.instance_of? Hash
name = value[:name]
else
name = value
end
if name != "Actions"
@headers << name.to_s
@columns << key
end
end
xlsx_package = Axlsx::Package.new
wb = xlsx_package.workbook
wb.add_worksheet(name: "import") do |sheet|
sheet.add_row @headers
@m_odr_primes.each do |m_odr_prime|
line = []
@columns.each do |column|
if (m_odr_prime.respond_to?("csv_"+column.to_s))
line << m_odr_prime.send("csv_"+column.to_s)
elsif (m_odr_prime.respond_to?(column))
if m_odr_prime.send(column.to_s).class.to_s == "BigDecimal"
line << m_odr_prime.send(column.to_s).to_s.gsub('.', ',')
else
line << m_odr_prime.send(column.to_s)
end
else
line << column.to_s
end
end
sheet.add_row line, types: line.map{|t| self.cell_type_from_value(t)}
end
end
@final_file = "#{Rails.root}/private_medias/export-primes-#{Time.now.to_s.to_slug}.xlsx"
xlsx_package.serialize(@final_file)
send_file @final_file
}
end
end

View File

@ -6,6 +6,8 @@ class Public::MEventsController < ApplicationController
def index
@m_events = MEvent.all
@m_events = @m_events.joins(:organisateur).where(:organisateurs => {:public => true})
params[:search] = params[:search] || []
@m_events = @m_events.where("start_at >= ? or end_at >= ?", Date.today.beginning_of_day, Date.today.beginning_of_day)

View File

@ -4,7 +4,7 @@ class Public::OrganisateursController < ApplicationController
def index
@organisateurs = Organisateur.order(:name).all
@organisateurs = Organisateur.order(:name).where(:public => true).all
@organisateurs_active = true

View File

@ -7,7 +7,10 @@ module DocumentLineHelper
end
def link_to_add_fields(name, f, association, options={})
new_object = f.object.class.reflect_on_association(association).klass.new()
options[:attributes] = options[:attributes] || {}
new_object = f.object.class.reflect_on_association(association).klass.new(options[:attributes])
if association == :product_options

View File

@ -21,6 +21,7 @@ class MOdrFile < ApplicationRecord
validates :file, :presence => true
before_create { generate_token() }
validates :buy_at, :presence => true, :if => :buy_at_needed?
@ -64,13 +65,24 @@ class MOdrFile < ApplicationRecord
self.nbr_primes_not_useds = self.nbr_primes - nbr_primes_useds
elsif self.m_odr_file_type_id == 2
nbr_pneus = 0
self.nbr_pneus = 0
self.m_odr_file_products.each do |mofp|
nbr_pneus += mofp.qte.to_i
self.nbr_pneus += mofp.qte.to_i
end
if self.nbr_pneus > 2
self.nbr_pneus = 2
end
self.nbr_pneus = nbr_pneus
self.nbr_pneus_not_useds = self.nbr_pneus - self.nbr_pneus_useds.to_i
end
end

View File

@ -5,6 +5,26 @@ class MOdrFileProduct < ApplicationRecord
#validates :qte, :presence => true, numericality: { greater_than: 0}
attr_accessor :admin_form
validates :qte, :presence => true, :if => :is_tire_admin_form?
validates :price, :presence => true, :if => :is_tire_admin_form?
validates :m_odr_product_id, :presence => true, :if => :is_tire_admin_form?
def is_tire_admin_form?
if self.m_odr_file and self.m_odr_file.m_odr_file_type_id == 2
if self.admin_form
true
else
false
end
else
false
end
end
before_save do
if self.m_odr_product_size

View File

@ -34,8 +34,8 @@ class MOdrPrime < ApplicationRecord
:p_customer_created_at => {:name => "Inscription", :reorder => true, :sort_name => "p_customers.created_at"},
:particular_name => {:name => "Nom", :reorder => true, :sort_name => "particulars.name"},
:particular_firstname => {:name => "Prénom", :reorder => true, :sort_name => "particulars.firstname"},
:particular_name => {:name => "Nom", :reorder => true, :sort_name => "p_customers.cc_particular_name"},
:particular_firstname => {:name => "Prénom", :reorder => true, :sort_name => "p_customers.cc_particular_firstname"},
:amount => {:name => "Montant", :as => :currency},
:created_at => {:name => "Date"},
@ -45,9 +45,9 @@ class MOdrPrime < ApplicationRecord
#:pneu_tailles => {:name => "Tailles"},
:m_odr_place_name => {:name => "Nom"},
:m_odr_place_cp=> {:name => "CP"},
:m_odr_place_city => {:name => "Nom"},
:m_odr_place_name => {:name => "Revendeur - Nom"},
:m_odr_place_cp=> {:name => "Revendeur - CP"},
:m_odr_place_city => {:name => "Revendeur - Ville"},
:organisateur_name => {:name => "Organisateur"},
@ -137,4 +137,69 @@ class MOdrPrime < ApplicationRecord
end
def csv_particular_name
self.particular.name if self.particular
end
def csv_particular_firstname
self.particular.firstname if self.particular
end
def csv_p_customer_created_at
self.p_customer.created_at if self.p_customer
end
def csv_state
self.state
end
def csv_date_roulage
self.m_odr_file_roulage.date if self.m_odr_file_roulage
end
def csv_pneu_gamme
self.m_odr_products.uniq.map{ |u| (u.name)}.join(" | ")
end
def csv_m_odr_place_name
self.m_odr_places.uniq.map{ |u| u.name}.join(" | ")
end
def csv_m_odr_place_cp
self.m_odr_places.uniq.map{ |u| u.cp}.join(" | ")
end
def csv_m_odr_place_city
self.m_odr_places.uniq.map{ |u| u.city}.join(" | ")
end
def csv_organisateur_name
self.m_odr_file_roulage.m_event.organisateur.name if self.m_odr_file_roulage and self.m_odr_file_roulage.m_event and self.m_odr_file_roulage.m_event.organisateur
end
def csv_date_virement
virement = self.m_odr_virements.where(:refused => 0, :sended => 1).order('id DESC').first
if virement and virement.m_odr_remise
virement.m_odr_remise.created_at
end
end
end

View File

@ -24,6 +24,8 @@ class MOdrRepRib < ApplicationRecord
:admin_ok => {:name => "Décision", :reorder => true},
:reject_reason => {:name => "Raison du rejet", :reorder => true},
:reject_reason_description => {:name => "Raison du rejet : commentaire", :reorder => true},
:updated_at => {:name => "Date de modification", :reorder => true},
:actions => {:name => "Actions", :reorder => true},
}

View File

@ -5,6 +5,7 @@ class MOdrVirement < ApplicationRecord
belongs_to :m_odr_prime
belongs_to :m_odr_remise
has_one :p_customer, :through => :m_odr_prime

View File

@ -75,7 +75,7 @@ class PCustomer < ApplicationRecord
validates :past_id, :uniqueness => true, :if => :imported
acts_as_caching :fields => [:show_name]
acts_as_caching :fields => [:show_name, :particular_name, :particular_firstname]
attr_accessor :refresh_import
@ -274,7 +274,7 @@ class PCustomer < ApplicationRecord
:email => "Email",
:tel => "Téléphone",
:particular_tel => "Téléphone",
:actions => "Actions"
}
@ -505,6 +505,20 @@ class PCustomer < ApplicationRecord
end
end
def ca_particular_name
if self.particular
self.particular.name+" " if self.particular.name?
end
end
def ca_particular_firstname
if self.particular
self.particular.firstname+" " if self.particular.firstname?
end
end
def show_name_extend
if self.particular
@ -618,6 +632,10 @@ class PCustomer < ApplicationRecord
end
def csv_particular_tel
self.particular.tel if self.particular
end
end

View File

@ -1,6 +1,9 @@
%tr.m_odr_file_product_form.field
%td
= form.input :admin_form, :as => :hidden
= form.input :m_odr_product_size_id, :label => "Produit :", :collection => option_groups_from_collection_for_select(MOdrProduct.all, :m_odr_product_sizes, :name, :id, :name, form.object.m_odr_product_size_id), :as => :select, :include_blank => false, :member_label => :member_label, :include_blank => "Choisissez le profil et la dimension"

View File

@ -1,11 +1,11 @@
%tr.m_odr_file_roulage_form.field
%td= form.input :date, :label => "date :" , :as => :date, :input_html => {:id => "roulage_date_input"}
%td.td_roulage_date_input= form.input :date, :label => "date :" , :as => :date, :input_html => {:class => "roulage_date_input"}
-if form.object.date?
%td= form.input :m_event_id, :label => "Journée de roulage :", :as => :date, :collection => MEvent.order("start_at").where("start_at <= ? and end_at >= ?", form.object.date, form.object.date).all, :member_label => :member_label, :as => :select, :input_html => {:id => "select_date_input"}
%td= form.input :m_event_id, :label => "Journée de roulage :", :as => :date, :collection => MEvent.order("start_at").where("start_at <= ? and end_at >= ?", form.object.date, form.object.date).all, :member_label => :member_label, :as => :select, :input_html => {:class => "select_date_input"}
-else
%td= form.input :m_event_id, :label => "Journée de roulage :", :as => :date, :collection => [], :member_label => :member_label, :as => :select, :input_html => {:id => "select_date_input"}
%td= form.input :m_event_id, :label => "Journée de roulage :", :as => :date, :collection => [], :member_label => :member_label, :as => :select, :input_html => {:class => "select_date_input"}
=#%td= form.input :m_event_id, :label => "Journée de roulage :", :as => :date, :collection => MEvent.all, :member_label => :member_label, :as => :select
@ -14,9 +14,10 @@
:coffeescript
$('#roulage_date_input').change ->
$.getJSON "/admin/m_events/autocomplete.json?date="+$(this).val(), (data) ->
$("#select_date_input").html('')
$("body").on "change", ".td_roulage_date_input input", ->
obj = $(this)
$.getJSON "/admin/m_events/autocomplete.json?date="+$(this).val(), (data) ->
obj.closest(".field").find(".select_date_input").html("")
$.each data, ->
$("#select_date_input").append '<option value="' + @id + '">' + @member_label + '</option>'
obj.closest(".field").find(".select_date_input").append '<option value="' + @id + '">' + @member_label + '</option>'

View File

@ -20,11 +20,13 @@
-if f.object.m_odr_file_type_id == 2
%table.m_odr_file_products_form.form-table
= f.input :buy_at, :label => "Date de l'achat", :as => :date
= f.input :m_odr_place, :label => "Revendeur :", :as => :date, :collection => MOdrPlace.order("enseigne ASC, name ASC, city ASC").all, :member_label => :member_label, :as => :select
=render :partial => "qi/autocomplete", :locals => {:form => f, :field => :m_odr_place, :label => "Revendeur :"}
=f.semantic_fields_for :m_odr_file_products do |form|
=render :partial => "admin/m_odr_file_products/form", :locals => {:form => form}
%p= link_to_add_fields ic(:plus)+" Ajouter un produit", f, :m_odr_file_products
%p= link_to_add_fields ic(:plus)+" Ajouter un produit", f, :m_odr_file_products, {:attributes => {:admin_form => true}}
-else

View File

@ -11,8 +11,20 @@
=debug @m_odr_file.nbr_pneus
Historique des factures
-params[:search][:per_page] = params[:search][:per_page] || 50
-per_page = params[:search][:per_page]
-page = (params[:page] and params[:page] != "") ? params[:page] : 1
-@m_odr_files = @m_odr_file.p_customer.m_odr_files.where("id != ?", @m_odr_file.id).where(:m_odr_file_type_id => @m_odr_file.m_odr_file_type_id )
-@m_odr_files = sort_by_sorting(@m_odr_files, "created_at DESC")
-@m_odr_files = @m_odr_files.page(page).per(per_page)
=render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @m_odr_files}
%hr
.left{:style => "float:left;width:30%;"}
.qi_row
@ -125,14 +137,3 @@ Historique des mails envoyés
.clear
%hr
Historique des factures
-params[:search][:per_page] = params[:search][:per_page] || 50
-per_page = params[:search][:per_page]
-page = (params[:page] and params[:page] != "") ? params[:page] : 1
-@m_odr_files = @m_odr_file.p_customer.m_odr_files.where("id != ?", @m_odr_file.id).where(:m_odr_file_type_id => @m_odr_file.m_odr_file_type_id )
-@m_odr_files = sort_by_sorting(@m_odr_files, "created_at DESC")
-@m_odr_files = @m_odr_files.page(page).per(per_page)
=render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @m_odr_files}

View File

@ -9,7 +9,7 @@
.qi_search_row
=form_tag "", :method => "get", :onsubmit => "" do
=render :partial => "qi/qi_ordered_table_search_footer", :locals => {:collection_object => @m_odr_primes}
=render :partial => "qi/qi_ordered_table_search_footer", :locals => {:collection_object => @m_odr_primes, :csv => true}
-params[:search] =params[:search] || {}
%table

View File

@ -12,6 +12,9 @@
-params[:search] =params[:search] || {}
%table
%tr
%td=text_field_tag "search[name]", params[:search][:name],:class => "form-control", :placeholder => "Nom"
%td
Statut :
=select_tag "search[state]", options_for_select([["",""]]+MOdrRep.group(:state).order(:state).all.map{|a| [a.state, a.state]}, params[:search][:state])

View File

@ -18,6 +18,13 @@
= form.input :message
= form.hidden_field :lang_site_id
-if current_admin.id == 1
= form.input :tags
-else
%p
-form.object.tags.split(",").each do |t|
="[#{t}]"
.actions=form.submit "sauvegarder", :class => "btn btn-primary"

View File

@ -3,6 +3,8 @@
.content
=f.inputs do
= f.input :public, :label => "Organisateur référencé ?"
= f.input :logo_id, :label => "Logo :", :as => :qi_image_select
= f.input :image_file_id, :label => "Image :" , :as => :qi_image_select

View File

@ -42,7 +42,7 @@
= form.input :tel, :label => "Tel :"
=# form.input :tel, :label => "Tel :"
= form.input :email, :label => "Email (login) :"
= form.input :generate_mdp, :label => "Forcer la génération d'un nouveau mot de passe ? (un mail sera envoyé au client)", :as => :boolean

View File

@ -24,7 +24,7 @@
=p_customer.mlm_token
-tr[:tel] = capture do
-tr[:particular_tel] = capture do
%td
-if p_customer.particular
=p_customer.particular.tel

View File

@ -49,7 +49,7 @@
%hr
-@m_odr_primes = MOdrPrime.where("created_at >= ? and created_at < ?",@start.beginning_of_year, @stop).where(:state => ["Virement envoyé"])
%table.table.table-stripped
%tr
@ -103,13 +103,9 @@
%br
%br
-params[:search][:per_page] = params[:search][:per_page] || 500000
-per_page = params[:search][:per_page]
-page = (params[:page] and params[:page] != "") ? params[:page] : 1
-@m_odr_primes = @m_odr_primes.where("created_at >= ?", @start)
-@m_odr_primes = sort_by_sorting(@m_odr_primes, "created_at DESC")
-@m_odr_primes = @m_odr_primes.page(page).per(per_page)
=link_to "Export CSV", params.permit!.merge({:format => :csv})
=#debug MailHist.qi_ordered_table_name
=render :partial => "qi/qi_ordered_table", :locals => {:qi_ordered_table_collection => @m_odr_primes}

View File

@ -72,7 +72,7 @@
-if current_admin.has_permission?("primes")
.element
=link_to admin_m_odr_primes_path do
=link_to admin_m_odr_files_path do
.cat#big_cat_payments
=ic :"eur"
Primes

View File

@ -70,6 +70,22 @@
= stylesheet_link_tag 'public', :media => :all
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '603317247079299');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=603317247079299&ev=PageView&noscript=1"/></noscript>
<!-- End Facebook Pixel Code -->
%body

View File

@ -27,7 +27,7 @@
.organisateur_name
Organisé par
%strong=link_to m_event.organisateur.name, public_organisateur_path(m_event.organisateur), :target => "_blank" if m_event.organisateur
%strong=link_to m_event.organisateur.name, public_organisateur_path(:id => m_event.organisateur.slug), :target => "_blank" if m_event.organisateur
-if m_event.description?
%br

View File

@ -13,7 +13,7 @@
.select.inline_large_input=select_tag "search[circuit_id]", options_for_select([["Circuit",""]]+Circuit.order(:name).all.map{|a| [a.name, a.id]}, params[:search][:circuit_id]), :place_holder => ""
.select.inline_large_input=select_tag "search[organisateur_id]", options_for_select([["Organisateur",""]]+Organisateur.order(:name).all.map{|a| [a.name, a.id]}, params[:search][:organisateur_id]), :place_holder => ""
.select.inline_large_input=select_tag "search[organisateur_id]", options_for_select([["Organisateur",""]]+Organisateur.where(:public => true).order(:name).all.map{|a| [a.name, a.id]}, params[:search][:organisateur_id]), :place_holder => ""
.no-mobile.right{:style => "position:relative;top:10px;"}

View File

@ -51,7 +51,7 @@
%span.label-chiffre Circuits
.col-xs-12.col-md-6.col-lg-3
%span.chiffre
=Organisateur.count
=Organisateur.where(:public => true).count
%span.label-chiffre Organisateurs
.avantage

View File

@ -349,7 +349,7 @@ Rails.application.routes.draw do
end
collection do
get :autocomplete
end
end

View File

@ -0,0 +1,5 @@
class AddPublicToOrganisateurs < ActiveRecord::Migration[6.0]
def change
add_column :organisateurs, :public, :boolean, :default => true
end
end

View File

@ -0,0 +1,13 @@
class AddCachesToPCustomers < ActiveRecord::Migration[6.0]
def change
add_column :p_customers, :cc_particular_name, :string
add_column :p_customers, :ac_particular_name, :string
add_column :p_customers, :cc_particular_firstname, :string
add_column :p_customers, :ac_particular_firstname, :string
PCustomer.all.each do |pc|
pc.save
end
end
end

View File

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2020_07_23_090815) do
ActiveRecord::Schema.define(version: 2021_02_09_153303) do
create_table "accounting_zones", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
t.string "name"
@ -195,7 +195,7 @@ ActiveRecord::Schema.define(version: 2020_07_23_090815) do
t.index ["table_row_id"], name: "index_cel_tables_on_table_row_id"
end
create_table "circuit_region_cats", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
create_table "circuit_region_cats", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC", force: :cascade do |t|
t.string "name"
t.integer "position"
t.datetime "created_at", precision: 6, null: false
@ -1392,6 +1392,7 @@ ActiveRecord::Schema.define(version: 2020_07_23_090815) do
t.datetime "updated_at", precision: 6, null: false
t.integer "circuit_region_id"
t.string "slug"
t.boolean "public", default: true
t.index ["admin_id"], name: "index_organisateurs_on_admin_id"
end
@ -1738,6 +1739,10 @@ ActiveRecord::Schema.define(version: 2020_07_23_090815) do
t.string "ac_show_name"
t.boolean "particular_thankable", default: false
t.boolean "particular_mail_sended", default: false
t.string "cc_particular_name"
t.string "ac_particular_name"
t.string "cc_particular_firstname"
t.string "ac_particular_firstname"
t.index ["market_discount_id"], name: "index_p_customers_on_market_discount_id"
t.index ["p_customer_cat_id"], name: "index_p_customers_on_p_customer_cat_id"
t.index ["particular_id"], name: "index_p_customers_on_particular_id"
@ -2265,7 +2270,7 @@ ActiveRecord::Schema.define(version: 2020_07_23_090815) do
t.datetime "updated_at", precision: 6, null: false
end
create_table "particular_hists", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", force: :cascade do |t|
create_table "particular_hists", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC", force: :cascade do |t|
t.bigint "particular_id"
t.bigint "p_customer_id"
t.text "description"

View File

@ -0,0 +1,101 @@
"1","01","Ain","AIN","ain","A500"
"2","02","Aisne","AISNE","aisne","A250"
"3","03","Allier","ALLIER","allier","A460"
"5","05","Hautes-Alpes","HAUTES-ALPES","hautes-alpes","H32412"
"4","04","Alpes-de-Haute-Provence","ALPES-DE-HAUTE-PROVENCE","alpes-de-haute-provence","A412316152"
"6","06","Alpes-Maritimes","ALPES-MARITIMES","alpes-maritimes","A41256352"
"7","07","Ardèche","ARDÈCHE","ardeche","A632"
"8","08","Ardennes","ARDENNES","ardennes","A6352"
"9","09","Ariège","ARIÈGE","ariege","A620"
"10","10","Aube","AUBE","aube","A100"
"11","11","Aude","AUDE","aude","A300"
"12","12","Aveyron","AVEYRON","aveyron","A165"
"13","13","Bouches-du-Rhône","BOUCHES-DU-RHÔNE","bouches-du-rhone","B2365"
"14","14","Calvados","CALVADOS","calvados","C4132"
"15","15","Cantal","CANTAL","cantal","C534"
"16","16","Charente","CHARENTE","charente","C653"
"17","17","Charente-Maritime","CHARENTE-MARITIME","charente-maritime","C6535635"
"18","18","Cher","CHER","cher","C600"
"19","19","Corrèze","CORRÈZE","correze","C620"
"20","2a","Corse-du-sud","CORSE-DU-SUD","corse-du-sud","C62323"
"21","2b","Haute-corse","HAUTE-CORSE","haute-corse","H3262"
"22","21","Côte-d'or","CÔTE-D'OR","cote-dor","C360"
"23","22","Côtes-d'armor","CÔTES-D'ARMOR","cotes-darmor","C323656"
"24","23","Creuse","CREUSE","creuse","C620"
"25","24","Dordogne","DORDOGNE","dordogne","D6325"
"26","25","Doubs","DOUBS","doubs","D120"
"27","26","Drôme","DRÔME","drome","D650"
"28","27","Eure","EURE","eure","E600"
"29","28","Eure-et-Loir","EURE-ET-LOIR","eure-et-loir","E6346"
"30","29","Finistère","FINISTÈRE","finistere","F5236"
"31","30","Gard","GARD","gard","G630"
"32","31","Haute-Garonne","HAUTE-GARONNE","haute-garonne","H3265"
"33","32","Gers","GERS","gers","G620"
"34","33","Gironde","GIRONDE","gironde","G653"
"35","34","Hérault","HÉRAULT","herault","H643"
"36","35","Ile-et-Vilaine","ILE-ET-VILAINE","ile-et-vilaine","I43145"
"37","36","Indre","INDRE","indre","I536"
"38","37","Indre-et-Loire","INDRE-ET-LOIRE","indre-et-loire","I536346"
"39","38","Isère","ISÈRE","isere","I260"
"40","39","Jura","JURA","jura","J600"
"41","40","Landes","LANDES","landes","L532"
"42","41","Loir-et-Cher","LOIR-ET-CHER","loir-et-cher","L6326"
"43","42","Loire","LOIRE","loire","L600"
"44","43","Haute-Loire","HAUTE-LOIRE","haute-loire","H346"
"45","44","Loire-Atlantique","LOIRE-ATLANTIQUE","loire-atlantique","L634532"
"46","45","Loiret","LOIRET","loiret","L630"
"47","46","Lot","LOT","lot","L300"
"48","47","Lot-et-Garonne","LOT-ET-GARONNE","lot-et-garonne","L3265"
"49","48","Lozère","LOZÈRE","lozere","L260"
"50","49","Maine-et-Loire","MAINE-ET-LOIRE","maine-et-loire","M346"
"51","50","Manche","MANCHE","manche","M200"
"52","51","Marne","MARNE","marne","M650"
"53","52","Haute-Marne","HAUTE-MARNE","haute-marne","H3565"
"54","53","Mayenne","MAYENNE","mayenne","M000"
"55","54","Meurthe-et-Moselle","MEURTHE-ET-MOSELLE","meurthe-et-moselle","M63524"
"56","55","Meuse","MEUSE","meuse","M200"
"57","56","Morbihan","MORBIHAN","morbihan","M615"
"58","57","Moselle","MOSELLE","moselle","M240"
"59","58","Nièvre","NIÈVRE","nievre","N160"
"60","59","Nord","NORD","nord","N630"
"61","60","Oise","OISE","oise","O200"
"62","61","Orne","ORNE","orne","O650"
"63","62","Pas-de-Calais","PAS-DE-CALAIS","pas-de-calais","P23242"
"64","63","Puy-de-Dôme","PUY-DE-DÔME","puy-de-dome","P350"
"65","64","Pyrénées-Atlantiques","PYRÉNÉES-ATLANTIQUES","pyrenees-atlantiques","P65234532"
"66","65","Hautes-Pyrénées","HAUTES-PYRÉNÉES","hautes-pyrenees","H321652"
"67","66","Pyrénées-Orientales","PYRÉNÉES-ORIENTALES","pyrenees-orientales","P65265342"
"68","67","Bas-Rhin","BAS-RHIN","bas-rhin","B265"
"69","68","Haut-Rhin","HAUT-RHIN","haut-rhin","H365"
"70","69","Rhône","RHÔNE","rhone","R500"
"71","70","Haute-Saône","HAUTE-SAÔNE","haute-saone","H325"
"72","71","Saône-et-Loire","SAÔNE-ET-LOIRE","saone-et-loire","S5346"
"73","72","Sarthe","SARTHE","sarthe","S630"
"74","73","Savoie","SAVOIE","savoie","S100"
"75","74","Haute-Savoie","HAUTE-SAVOIE","haute-savoie","H321"
"76","75","Paris","PARIS","paris","P620"
"77","76","Seine-Maritime","SEINE-MARITIME","seine-maritime","S5635"
"78","77","Seine-et-Marne","SEINE-ET-MARNE","seine-et-marne","S53565"
"79","78","Yvelines","YVELINES","yvelines","Y1452"
"80","79","Deux-Sèvres","DEUX-SÈVRES","deux-sevres","D2162"
"81","80","Somme","SOMME","somme","S500"
"82","81","Tarn","TARN","tarn","T650"
"83","82","Tarn-et-Garonne","TARN-ET-GARONNE","tarn-et-garonne","T653265"
"84","83","Var","VAR","var","V600"
"85","84","Vaucluse","VAUCLUSE","vaucluse","V242"
"86","85","Vendée","VENDÉE","vendee","V530"
"87","86","Vienne","VIENNE","vienne","V500"
"88","87","Haute-Vienne","HAUTE-VIENNE","haute-vienne","H315"
"89","88","Vosges","VOSGES","vosges","V200"
"90","89","Yonne","YONNE","yonne","Y500"
"91","90","Territoire de Belfort","TERRITOIRE DE BELFORT","territoire-de-belfort","T636314163"
"92","91","Essonne","ESSONNE","essonne","E250"
"93","92","Hauts-de-Seine","HAUTS-DE-SEINE","hauts-de-seine","H32325"
"94","93","Seine-Saint-Denis","SEINE-SAINT-DENIS","seine-saint-denis","S525352"
"95","94","Val-de-Marne","VAL-DE-MARNE","val-de-marne","V43565"
"96","95","Val-d'oise","VAL-D'OISE","val-doise","V432"
"97","976","Mayotte","MAYOTTE","mayotte","M300"
"98","971","Guadeloupe","GUADELOUPE","guadeloupe","G341"
"99","973","Guyane","GUYANE","guyane","G500"
"100","972","Martinique","MARTINIQUE","martinique","M6352"
"101","974","Réunion","RÉUNION","reunion","R500"
1 1 01 Ain AIN ain A500
2 2 02 Aisne AISNE aisne A250
3 3 03 Allier ALLIER allier A460
4 5 05 Hautes-Alpes HAUTES-ALPES hautes-alpes H32412
5 4 04 Alpes-de-Haute-Provence ALPES-DE-HAUTE-PROVENCE alpes-de-haute-provence A412316152
6 6 06 Alpes-Maritimes ALPES-MARITIMES alpes-maritimes A41256352
7 7 07 Ardèche ARDÈCHE ardeche A632
8 8 08 Ardennes ARDENNES ardennes A6352
9 9 09 Ariège ARIÈGE ariege A620
10 10 10 Aube AUBE aube A100
11 11 11 Aude AUDE aude A300
12 12 12 Aveyron AVEYRON aveyron A165
13 13 13 Bouches-du-Rhône BOUCHES-DU-RHÔNE bouches-du-rhone B2365
14 14 14 Calvados CALVADOS calvados C4132
15 15 15 Cantal CANTAL cantal C534
16 16 16 Charente CHARENTE charente C653
17 17 17 Charente-Maritime CHARENTE-MARITIME charente-maritime C6535635
18 18 18 Cher CHER cher C600
19 19 19 Corrèze CORRÈZE correze C620
20 20 2a Corse-du-sud CORSE-DU-SUD corse-du-sud C62323
21 21 2b Haute-corse HAUTE-CORSE haute-corse H3262
22 22 21 Côte-d'or CÔTE-D'OR cote-dor C360
23 23 22 Côtes-d'armor CÔTES-D'ARMOR cotes-darmor C323656
24 24 23 Creuse CREUSE creuse C620
25 25 24 Dordogne DORDOGNE dordogne D6325
26 26 25 Doubs DOUBS doubs D120
27 27 26 Drôme DRÔME drome D650
28 28 27 Eure EURE eure E600
29 29 28 Eure-et-Loir EURE-ET-LOIR eure-et-loir E6346
30 30 29 Finistère FINISTÈRE finistere F5236
31 31 30 Gard GARD gard G630
32 32 31 Haute-Garonne HAUTE-GARONNE haute-garonne H3265
33 33 32 Gers GERS gers G620
34 34 33 Gironde GIRONDE gironde G653
35 35 34 Hérault HÉRAULT herault H643
36 36 35 Ile-et-Vilaine ILE-ET-VILAINE ile-et-vilaine I43145
37 37 36 Indre INDRE indre I536
38 38 37 Indre-et-Loire INDRE-ET-LOIRE indre-et-loire I536346
39 39 38 Isère ISÈRE isere I260
40 40 39 Jura JURA jura J600
41 41 40 Landes LANDES landes L532
42 42 41 Loir-et-Cher LOIR-ET-CHER loir-et-cher L6326
43 43 42 Loire LOIRE loire L600
44 44 43 Haute-Loire HAUTE-LOIRE haute-loire H346
45 45 44 Loire-Atlantique LOIRE-ATLANTIQUE loire-atlantique L634532
46 46 45 Loiret LOIRET loiret L630
47 47 46 Lot LOT lot L300
48 48 47 Lot-et-Garonne LOT-ET-GARONNE lot-et-garonne L3265
49 49 48 Lozère LOZÈRE lozere L260
50 50 49 Maine-et-Loire MAINE-ET-LOIRE maine-et-loire M346
51 51 50 Manche MANCHE manche M200
52 52 51 Marne MARNE marne M650
53 53 52 Haute-Marne HAUTE-MARNE haute-marne H3565
54 54 53 Mayenne MAYENNE mayenne M000
55 55 54 Meurthe-et-Moselle MEURTHE-ET-MOSELLE meurthe-et-moselle M63524
56 56 55 Meuse MEUSE meuse M200
57 57 56 Morbihan MORBIHAN morbihan M615
58 58 57 Moselle MOSELLE moselle M240
59 59 58 Nièvre NIÈVRE nievre N160
60 60 59 Nord NORD nord N630
61 61 60 Oise OISE oise O200
62 62 61 Orne ORNE orne O650
63 63 62 Pas-de-Calais PAS-DE-CALAIS pas-de-calais P23242
64 64 63 Puy-de-Dôme PUY-DE-DÔME puy-de-dome P350
65 65 64 Pyrénées-Atlantiques PYRÉNÉES-ATLANTIQUES pyrenees-atlantiques P65234532
66 66 65 Hautes-Pyrénées HAUTES-PYRÉNÉES hautes-pyrenees H321652
67 67 66 Pyrénées-Orientales PYRÉNÉES-ORIENTALES pyrenees-orientales P65265342
68 68 67 Bas-Rhin BAS-RHIN bas-rhin B265
69 69 68 Haut-Rhin HAUT-RHIN haut-rhin H365
70 70 69 Rhône RHÔNE rhone R500
71 71 70 Haute-Saône HAUTE-SAÔNE haute-saone H325
72 72 71 Saône-et-Loire SAÔNE-ET-LOIRE saone-et-loire S5346
73 73 72 Sarthe SARTHE sarthe S630
74 74 73 Savoie SAVOIE savoie S100
75 75 74 Haute-Savoie HAUTE-SAVOIE haute-savoie H321
76 76 75 Paris PARIS paris P620
77 77 76 Seine-Maritime SEINE-MARITIME seine-maritime S5635
78 78 77 Seine-et-Marne SEINE-ET-MARNE seine-et-marne S53565
79 79 78 Yvelines YVELINES yvelines Y1452
80 80 79 Deux-Sèvres DEUX-SÈVRES deux-sevres D2162
81 81 80 Somme SOMME somme S500
82 82 81 Tarn TARN tarn T650
83 83 82 Tarn-et-Garonne TARN-ET-GARONNE tarn-et-garonne T653265
84 84 83 Var VAR var V600
85 85 84 Vaucluse VAUCLUSE vaucluse V242
86 86 85 Vendée VENDÉE vendee V530
87 87 86 Vienne VIENNE vienne V500
88 88 87 Haute-Vienne HAUTE-VIENNE haute-vienne H315
89 89 88 Vosges VOSGES vosges V200
90 90 89 Yonne YONNE yonne Y500
91 91 90 Territoire de Belfort TERRITOIRE DE BELFORT territoire-de-belfort T636314163
92 92 91 Essonne ESSONNE essonne E250
93 93 92 Hauts-de-Seine HAUTS-DE-SEINE hauts-de-seine H32325
94 94 93 Seine-Saint-Denis SEINE-SAINT-DENIS seine-saint-denis S525352
95 95 94 Val-de-Marne VAL-DE-MARNE val-de-marne V43565
96 96 95 Val-d'oise VAL-D'OISE val-doise V432
97 97 976 Mayotte MAYOTTE mayotte M300
98 98 971 Guadeloupe GUADELOUPE guadeloupe G341
99 99 973 Guyane GUYANE guyane G500
100 100 972 Martinique MARTINIQUE martinique M6352
101 101 974 Réunion RÉUNION reunion R500

View File

@ -0,0 +1,102 @@
num_dep,dep_name,region_name
01,Ain,Auvergne-Rhône-Alpes
02,Aisne,Hauts-de-France
03,Allier,Auvergne-Rhône-Alpes
04,Alpes-de-Haute-Provence,Provence-Alpes-Côte d'Azur
05,Hautes-Alpes,Provence-Alpes-Côte d'Azur
06,Alpes-Maritimes,Provence-Alpes-Côte d'Azur
07,Ardèche,Auvergne-Rhône-Alpes
08,Ardennes,Grand Est
09,Ariège,Occitanie
10,Aube,Grand Est
11,Aude,Occitanie
12,Aveyron,Occitanie
13,Bouches-du-Rhône,Provence-Alpes-Côte d'Azur
14,Calvados,Normandie
15,Cantal,Auvergne-Rhône-Alpes
16,Charente,Nouvelle-Aquitaine
17,Charente-Maritime,Nouvelle-Aquitaine
18,Cher,Centre-Val de Loire
19,Corrèze,Nouvelle-Aquitaine
21,Côte-d'Or,Bourgogne-Franche-Comté
22,Côtes-d'Armor,Bretagne
23,Creuse,Nouvelle-Aquitaine
24,Dordogne,Nouvelle-Aquitaine
25,Doubs,Bourgogne-Franche-Comté
26,Drôme,Auvergne-Rhône-Alpes
27,Eure,Normandie
28,Eure-et-Loir,Centre-Val de Loire
29,Finistère,Bretagne
2A,Corse-du-Sud,Corse
2B,Haute-Corse,Corse
30,Gard,Occitanie
31,Haute-Garonne,Occitanie
32,Gers,Occitanie
33,Gironde,Nouvelle-Aquitaine
34,Hérault,Occitanie
35,Ille-et-Vilaine,Bretagne
36,Indre,Centre-Val de Loire
37,Indre-et-Loire,Centre-Val de Loire
38,Isère,Auvergne-Rhône-Alpes
39,Jura,Bourgogne-Franche-Comté
40,Landes,Nouvelle-Aquitaine
41,Loir-et-Cher,Centre-Val de Loire
42,Loire,Auvergne-Rhône-Alpes
43,Haute-Loire,Auvergne-Rhône-Alpes
44,Loire-Atlantique,Pays de la Loire
45,Loiret,Centre-Val de Loire
46,Lot,Occitanie
47,Lot-et-Garonne,Nouvelle-Aquitaine
48,Lozère,Occitanie
49,Maine-et-Loire,Pays de la Loire
50,Manche,Normandie
51,Marne,Grand Est
52,Haute-Marne,Grand Est
53,Mayenne,Pays de la Loire
54,Meurthe-et-Moselle,Grand Est
55,Meuse,Grand Est
56,Morbihan,Bretagne
57,Moselle,Grand Est
58,Nièvre,Bourgogne-Franche-Comté
59,Nord,Hauts-de-France
60,Oise,Hauts-de-France
61,Orne,Normandie
62,Pas-de-Calais,Hauts-de-France
63,Puy-de-Dôme,Auvergne-Rhône-Alpes
64,Pyrénées-Atlantiques,Nouvelle-Aquitaine
65,Hautes-Pyrénées,Occitanie
66,Pyrénées-Orientales,Occitanie
67,Bas-Rhin,Grand Est
68,Haut-Rhin,Grand Est
69,Rhône,Auvergne-Rhône-Alpes
70,Haute-Saône,Bourgogne-Franche-Comté
71,Saône-et-Loire,Bourgogne-Franche-Comté
72,Sarthe,Pays de la Loire
73,Savoie,Auvergne-Rhône-Alpes
74,Haute-Savoie,Auvergne-Rhône-Alpes
75,Paris,Île-de-France
76,Seine-Maritime,Normandie
77,Seine-et-Marne,Île-de-France
78,Yvelines,Île-de-France
79,Deux-Sèvres,Nouvelle-Aquitaine
80,Somme,Hauts-de-France
81,Tarn,Occitanie
82,Tarn-et-Garonne,Occitanie
83,Var,Provence-Alpes-Côte d'Azur
84,Vaucluse,Provence-Alpes-Côte d'Azur
85,Vendée,Pays de la Loire
86,Vienne,Nouvelle-Aquitaine
87,Haute-Vienne,Nouvelle-Aquitaine
88,Vosges,Grand Est
89,Yonne,Bourgogne-Franche-Comté
90,Territoire de Belfort,Bourgogne-Franche-Comté
91,Essonne,Île-de-France
92,Hauts-de-Seine,Île-de-France
93,Seine-Saint-Denis,Île-de-France
94,Val-de-Marne,Île-de-France
95,Val-d'Oise,Île-de-France
971,Guadeloupe,Guadeloupe
972,Martinique,Martinique
973,Guyane,Guyane
974,La Réunion,La Réunion
976,Mayotte,Mayotte
1 num_dep dep_name region_name
2 01 Ain Auvergne-Rhône-Alpes
3 02 Aisne Hauts-de-France
4 03 Allier Auvergne-Rhône-Alpes
5 04 Alpes-de-Haute-Provence Provence-Alpes-Côte d'Azur
6 05 Hautes-Alpes Provence-Alpes-Côte d'Azur
7 06 Alpes-Maritimes Provence-Alpes-Côte d'Azur
8 07 Ardèche Auvergne-Rhône-Alpes
9 08 Ardennes Grand Est
10 09 Ariège Occitanie
11 10 Aube Grand Est
12 11 Aude Occitanie
13 12 Aveyron Occitanie
14 13 Bouches-du-Rhône Provence-Alpes-Côte d'Azur
15 14 Calvados Normandie
16 15 Cantal Auvergne-Rhône-Alpes
17 16 Charente Nouvelle-Aquitaine
18 17 Charente-Maritime Nouvelle-Aquitaine
19 18 Cher Centre-Val de Loire
20 19 Corrèze Nouvelle-Aquitaine
21 21 Côte-d'Or Bourgogne-Franche-Comté
22 22 Côtes-d'Armor Bretagne
23 23 Creuse Nouvelle-Aquitaine
24 24 Dordogne Nouvelle-Aquitaine
25 25 Doubs Bourgogne-Franche-Comté
26 26 Drôme Auvergne-Rhône-Alpes
27 27 Eure Normandie
28 28 Eure-et-Loir Centre-Val de Loire
29 29 Finistère Bretagne
30 2A Corse-du-Sud Corse
31 2B Haute-Corse Corse
32 30 Gard Occitanie
33 31 Haute-Garonne Occitanie
34 32 Gers Occitanie
35 33 Gironde Nouvelle-Aquitaine
36 34 Hérault Occitanie
37 35 Ille-et-Vilaine Bretagne
38 36 Indre Centre-Val de Loire
39 37 Indre-et-Loire Centre-Val de Loire
40 38 Isère Auvergne-Rhône-Alpes
41 39 Jura Bourgogne-Franche-Comté
42 40 Landes Nouvelle-Aquitaine
43 41 Loir-et-Cher Centre-Val de Loire
44 42 Loire Auvergne-Rhône-Alpes
45 43 Haute-Loire Auvergne-Rhône-Alpes
46 44 Loire-Atlantique Pays de la Loire
47 45 Loiret Centre-Val de Loire
48 46 Lot Occitanie
49 47 Lot-et-Garonne Nouvelle-Aquitaine
50 48 Lozère Occitanie
51 49 Maine-et-Loire Pays de la Loire
52 50 Manche Normandie
53 51 Marne Grand Est
54 52 Haute-Marne Grand Est
55 53 Mayenne Pays de la Loire
56 54 Meurthe-et-Moselle Grand Est
57 55 Meuse Grand Est
58 56 Morbihan Bretagne
59 57 Moselle Grand Est
60 58 Nièvre Bourgogne-Franche-Comté
61 59 Nord Hauts-de-France
62 60 Oise Hauts-de-France
63 61 Orne Normandie
64 62 Pas-de-Calais Hauts-de-France
65 63 Puy-de-Dôme Auvergne-Rhône-Alpes
66 64 Pyrénées-Atlantiques Nouvelle-Aquitaine
67 65 Hautes-Pyrénées Occitanie
68 66 Pyrénées-Orientales Occitanie
69 67 Bas-Rhin Grand Est
70 68 Haut-Rhin Grand Est
71 69 Rhône Auvergne-Rhône-Alpes
72 70 Haute-Saône Bourgogne-Franche-Comté
73 71 Saône-et-Loire Bourgogne-Franche-Comté
74 72 Sarthe Pays de la Loire
75 73 Savoie Auvergne-Rhône-Alpes
76 74 Haute-Savoie Auvergne-Rhône-Alpes
77 75 Paris Île-de-France
78 76 Seine-Maritime Normandie
79 77 Seine-et-Marne Île-de-France
80 78 Yvelines Île-de-France
81 79 Deux-Sèvres Nouvelle-Aquitaine
82 80 Somme Hauts-de-France
83 81 Tarn Occitanie
84 82 Tarn-et-Garonne Occitanie
85 83 Var Provence-Alpes-Côte d'Azur
86 84 Vaucluse Provence-Alpes-Côte d'Azur
87 85 Vendée Pays de la Loire
88 86 Vienne Nouvelle-Aquitaine
89 87 Haute-Vienne Nouvelle-Aquitaine
90 88 Vosges Grand Est
91 89 Yonne Bourgogne-Franche-Comté
92 90 Territoire de Belfort Bourgogne-Franche-Comté
93 91 Essonne Île-de-France
94 92 Hauts-de-Seine Île-de-France
95 93 Seine-Saint-Denis Île-de-France
96 94 Val-de-Marne Île-de-France
97 95 Val-d'Oise Île-de-France
98 971 Guadeloupe Guadeloupe
99 972 Martinique Martinique
100 973 Guyane Guyane
101 974 La Réunion La Réunion
102 976 Mayotte Mayotte