apidae 1.3.5 → 1.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 33abbdbe85b4e375a90d5e003724039d802e8c9e817865ab3607a44fca342897
4
- data.tar.gz: d2596dfedc91f0306eeef4360c98066cbcebbc2da3587f1c4041a63843ab1948
3
+ metadata.gz: fcb280b4660f8ea2bbcf7ee76a7b618c00bcf9e363423fae013ce626681b2108
4
+ data.tar.gz: 073b41e45931ee6690e4edc8e8c07b3f0ca2ec6479471a2726a6e43033a9e6e2
5
5
  SHA512:
6
- metadata.gz: 3d14fa60b837515f4b0596d49c38d1aa2f5e5136b4a6d5c918bfdad16a56b35c3cfe2c2edf79e2a54876abadd717190aa6b6dfa90dbc2fd14044739c99c5f79c
7
- data.tar.gz: 4cd4ccbfc4132dc763b19b3518117b905b254c34824b501e35a805c75d58ac976a544f7515e9285ed80c0768b1acfca6cd53d9b2242dd971127e45fed5ad02c4
6
+ metadata.gz: a82f16675847e98e2115f06b4185648625eeb2c3d7ebda7967e32cad3e816073a3bccc0549dc6ae4f7eb59465f559459ce32e7d79453b9878ba60527dc54d84e
7
+ data.tar.gz: c80d4e36df23e913c9a52062eb657a86582be9c9911c7c53289ec638ea0cd41d4d1506e189fad859e70475f099fb6c373d3b141ec87322a5d8a93f596ca1f86e
@@ -113,7 +113,7 @@ module Apidae
113
113
  short_desc: node_value(data_hash, :descriptifCourt, *locales),
114
114
  long_desc: node_value(data_hash, :descriptifDetaille, *locales),
115
115
  theme_desc: data_hash[:descriptifsThematises].blank? ? {} : Hash[data_hash[:descriptifsThematises].map {|th| [node_id(th, :theme), node_value(th, :description, *locales)]}],
116
- private_desc: private_data.blank? ? {} : Hash[private_data.map {|d| [d[:nomTechnique], node_value(d, :descriptif, *locales)]}]
116
+ private_desc: private_data.blank? ? {} : Hash[private_data.map {|d| [d[:nomTechnique], (node_value(d, :descriptif, *locales).blank? ? {LOCALE_FR => d[:libelleFr]} : node_value(d, :descriptif, *locales))]}]
117
117
  }
118
118
  end
119
119
  end
@@ -253,6 +253,7 @@ module Apidae
253
253
  methods = rates_hash[:modesPaiement].blank? ? [] : rates_hash[:modesPaiement].map {|p| p[:id]}
254
254
  {
255
255
  rates_desc: desc, rates: values, payment_methods: methods,
256
+ tax_included: rates_hash[:taxeDeSejourIncluse].blank? ? nil : (rates_hash[:taxeDeSejourIncluse] == 'OUI'),
256
257
  rates_desc_mode: rates_hash[:tarifsEnClairGenerationMode] == 'AUTOMATIQUE' ? MODE_AUTO : MODE_MANUAL,
257
258
  includes: node_value(rates_hash, :leTarifComprend, *locales),
258
259
  excludes: node_value(rates_hash, :leTarifNeComprendPas, *locales),
@@ -275,6 +276,8 @@ module Apidae
275
276
  age_min: presta_hash[:ageMin], age_max: presta_hash[:ageMax]} : {}),
276
277
  classification: nodes_ids(data_hash[:classement], data_hash[:classementPrefectoral], data_hash[:classification]) +
277
278
  lists_ids(data_hash[:classementsGuides]) + lists_ids(data_hash[:classements]),
279
+ classification_date: data_hash[:dateClassement],
280
+ classification_ref: data_hash[:numeroClassement],
278
281
  labels: lists_ids(data_hash[:labels], data_hash[:labelsChartesQualite], prestations_hash[:labelsTourismeHandicap]) +
279
282
  (node_id(data_hash, :typeLabel) ? [node_id(data_hash, :typeLabel)] : []),
280
283
  chains: lists_ids(data_hash[:chaines]) + nodes_ids(data_hash[:chaineEtLabel]),
@@ -288,7 +291,10 @@ module Apidae
288
291
  extra: apidae_obj.apidae_type == Obj::SPA ? node_value(data_hash, :formuleHebergement, *locales) : node_value(prestations_hash, :complementAccueil, *locales),
289
292
  duration: apidae_obj.apidae_type == Obj::SPA ? {days: data_hash[:nombreJours], nights: data_hash[:nombreNuits]} : data_hash[:dureeSeance],
290
293
  certifications: data_hash[:agrements].blank? ? [] : data_hash[:agrements].map {|a| {id: a[:type][:id], identifier: a[:numero]}},
291
- business: business_hash
294
+ business: (business_hash || {}).except(:sallesEquipeesPour, :sallesEquipement, :sallesRestauration, :sallesReunion, :sallesHebergement),
295
+ business_equipments: lists_ids((business_hash || {})[:sallesEquipeesPour], (business_hash || {})[:sallesEquipement],
296
+ (business_hash || {})[:sallesRestauration], (business_hash || {})[:sallesHebergement]),
297
+ business_rooms: (business_hash || {})[:sallesReunion]
292
298
  }
293
299
  end
294
300
 
@@ -325,12 +331,14 @@ module Apidae
325
331
  def self.parse_booking(reservation_hash, visits_hash, *locales)
326
332
  booking_hash = {}
327
333
  if reservation_hash
328
- booking_hash[:booking_desc] = node_value(reservation_hash, :complement, *locales),
334
+ booking_hash[:booking_desc] = node_value(reservation_hash, :complement, *locales)
329
335
  booking_hash[:booking_entities] = reservation_hash[:organismes]
330
336
  end
331
337
  if visits_hash
332
338
  booking_hash[:visits_allowed] = visits_hash[:visitable] == true
333
339
  booking_hash[:visits_desc] = node_value(visits_hash, :complementVisite, *locales)
340
+ booking_hash[:visits_duration] = visits_hash[:dureeMoyenneVisiteIndividuelle]
341
+ booking_hash[:visits_services] = lists_ids(visits_hash[:prestationsVisitesGroupees]) + lists_ids(visits_hash[:prestationsVisitesIndividuelles])
334
342
  end
335
343
  booking_hash
336
344
  end
@@ -346,8 +354,14 @@ module Apidae
346
354
 
347
355
  def self.parse_entity_fields(information_hash, type_data_hash, sp_hash)
348
356
  entity_hash = {}
349
- if information_hash && information_hash[:structureGestion]
350
- entity_hash.merge!({entity_id: information_hash[:structureGestion][:id], service_provider_id: node_id(type_data_hash, :prestataireActivites)})
357
+ if information_hash
358
+ if information_hash[:structureGestion]
359
+ entity_hash.merge!({entity_id: information_hash[:structureGestion][:id], service_provider_id: node_id(type_data_hash, :prestataireActivites)})
360
+ end
361
+
362
+ if information_hash[:informationsLegales]
363
+ entity_hash.merge!({legal: information_hash[:informationsLegales]})
364
+ end
351
365
  end
352
366
  if sp_hash && sp_hash[:prestataireActivites]
353
367
  entity_hash[:is_service_provider] = true
@@ -31,7 +31,6 @@ module Apidae
31
31
  logger.info "Completed #{Town.count} towns update"
32
32
  end
33
33
  ordered_files(zfile).each do |file|
34
- puts "processing #{file.name}"
35
34
  if file.file? && file.name.end_with?('.json')
36
35
  logger.info "Processing file : #{file.name}"
37
36
  if file.name.include?(MODIFIED_DIR)
@@ -45,6 +44,7 @@ module Apidae
45
44
  end
46
45
  end
47
46
  end
47
+ project.cleanup_selections
48
48
  create(result.except(:selections)
49
49
  .merge({remote_file: (zip_file.is_a?(File) ? zip_file.path : zip_file), status: STATUS_COMPLETE, apidae_id: project_id}))
50
50
  logger.info "Import results : #{result}"
@@ -170,7 +170,9 @@ module Apidae
170
170
  def self.add_or_update_selections(project, selections_json, result)
171
171
  selections_hashes = JSON.parse(selections_json, symbolize_names: true)
172
172
  deleted_ids = Selection.where(apidae_project_id: project.id).collect {|sel| sel.apidae_id}.uniq - selections_hashes.collect {|sel| sel[:id]}
173
- Selection.where(apidae_id: deleted_ids).delete_all
173
+ apidae_selection_ids = Selection.where(apidae_id: deleted_ids).map {|s| s.id}
174
+ SelectionObject.where(apidae_selection_id: apidae_selection_ids).delete_all
175
+ Selection.where(id: apidae_selection_ids).delete_all
174
176
  selections_hashes.each do |selection_data|
175
177
  logger.info "Updating selection #{selection_data[:id]}"
176
178
  Selection.add_or_update(selection_data, project.id)
@@ -14,16 +14,17 @@ module Apidae
14
14
  store_accessor :description_data, :short_desc, :long_desc, :theme_desc, :private_desc
15
15
  store_accessor :pictures_data, :pictures
16
16
  store_accessor :attachments_data, :attachments
17
- store_accessor :type_data, :categories, :themes, :capacity, :classification, :labels, :chains, :area, :track,
18
- :tricky_sections, :products, :audience, :animals, :animals_desc, :extra, :duration, :certifications, :business
19
- store_accessor :entity_data, :entity_id, :entity_name, :service_provider_id, :is_service_provider
17
+ store_accessor :type_data, :categories, :themes, :capacity, :classification, :classification_date,
18
+ :classification_ref, :labels, :chains, :area, :track, :tricky_sections, :products, :audience, :animals,
19
+ :animals_desc, :extra, :duration, :certifications, :business, :business_equipments, :business_rooms
20
+ store_accessor :entity_data, :entity_id, :entity_name, :service_provider_id, :is_service_provider, :legal
20
21
  store_accessor :contact_data, :telephone, :email, :website, :google, :facebook, :twitter, :yelp, :trip_advisor, :fax,
21
22
  :mobile_website, :shorty_url, :contacts
22
23
  store_accessor :location_data, :address, :place, :latitude, :longitude, :access, :territories, :environments, :altitude, :map_reference
23
24
  store_accessor :openings_data, :openings_desc, :openings_desc_mode, :openings, :time_periods, :openings_extra
24
- store_accessor :rates_data, :rates_desc, :rates_desc_mode, :rates, :payment_methods, :includes, :excludes, :rates_extra
25
+ store_accessor :rates_data, :rates_desc, :rates_desc_mode, :rates, :payment_methods, :includes, :excludes, :rates_extra, :tax_included
25
26
  store_accessor :service_data, :services, :equipments, :comfort, :activities, :challenged, :languages
26
- store_accessor :booking_data, :booking_desc, :booking_entities, :visits_allowed, :visits_desc
27
+ store_accessor :booking_data, :booking_desc, :booking_entities, :visits_allowed, :visits_desc, :visits_duration, :visits_services
27
28
  store_accessor :tags_data, :promo, :internal, :linked
28
29
  store_accessor :version_data, :versioned_fields
29
30
 
@@ -20,5 +20,11 @@ module Apidae
20
20
  def versions=(values)
21
21
  self.versions_data = values.blank? ? nil : values.join('|')
22
22
  end
23
+
24
+ def cleanup_selections
25
+ apidae_selections.reload.each do |s|
26
+ s.cleanup
27
+ end
28
+ end
23
29
  end
24
30
  end
@@ -42,6 +42,20 @@ module Apidae
42
42
  SelectionObject.where(apidae_selection_id: apidae_sel.id, apidae_object_id: removed_ids).delete_all
43
43
  end
44
44
 
45
+ def cleanup
46
+ obsolete_count = apidae_selection_objects
47
+ .joins("LEFT JOIN apidae_objs ON apidae_objs.id = apidae_selection_objects.apidae_object_id")
48
+ .where("apidae_objs.id IS NULL")
49
+ .delete_all
50
+ logger.info "Cleaned up #{obsolete_count} obsolete selection-objects associations for selection #{apidae_id}"
51
+
52
+ dups = apidae_selection_objects.reload.group(:apidae_object_id)
53
+ .select("COUNT(id), apidae_object_id, ARRAY_AGG(id) AS so_ids")
54
+ .having("COUNT(id) > ?", 1).map {|so| so.so_ids}
55
+ dups_count = apidae_selection_objects.where(id: dups.map {|d| d.sort[1..-1]}.flatten).delete_all
56
+ logger.info "Cleaned up #{dups_count} duplicate selection-objects associations for selection #{apidae_id}"
57
+ end
58
+
45
59
  def results(where_clause, offset, size)
46
60
  objects.includes(:town).limit(size).offset(offset).where(where_clause)
47
61
  end
@@ -1,3 +1,3 @@
1
1
  module Apidae
2
- VERSION = "1.3.5"
2
+ VERSION = "1.3.8"
3
3
  end
File without changes
@@ -2,15 +2,15 @@
2
2
  # of editing this file, please use the migrations feature of Active Record to
3
3
  # incrementally modify your database, and then regenerate this schema definition.
4
4
  #
5
- # Note that this schema.rb definition is the authoritative source for your
6
- # database schema. If you need to create the application database on another
7
- # system, you should be using db:schema:load, not running all the migrations
8
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9
- # you'll amass, the slower it'll run and the greater likelihood for issues).
5
+ # This file is the source Rails uses to define your schema when running `bin/rails
6
+ # db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
7
+ # be faster and is potentially less error prone than running all of your
8
+ # migrations from scratch. Old migrations may fail to apply correctly if those
9
+ # migrations use external dependencies or application code.
10
10
  #
11
11
  # It's strongly recommended that you check this file into your version control system.
12
12
 
13
- ActiveRecord::Schema.define(version: 2020_05_22_124205) do
13
+ ActiveRecord::Schema.define(version: 2021_06_07_214647) do
14
14
 
15
15
  # These are extensions that must be enabled in order to support this database
16
16
  enable_extension "plpgsql"
@@ -92,8 +92,10 @@ ActiveRecord::Schema.define(version: 2020_05_22_124205) do
92
92
  t.datetime "created_at", null: false
93
93
  t.datetime "updated_at", null: false
94
94
  t.jsonb "meta_data"
95
+ t.boolean "is_active"
95
96
  t.index ["apidae_id"], name: "index_apidae_references_on_apidae_id"
96
97
  t.index ["apidae_type"], name: "index_apidae_references_on_apidae_type"
98
+ t.index ["is_active"], name: "index_apidae_references_on_is_active"
97
99
  end
98
100
 
99
101
  create_table "apidae_selection_objects", force: :cascade do |t|
@@ -112,6 +114,13 @@ ActiveRecord::Schema.define(version: 2020_05_22_124205) do
112
114
  t.integer "apidae_project_id"
113
115
  end
114
116
 
117
+ create_table "apidae_territories", force: :cascade do |t|
118
+ t.integer "apidae_id"
119
+ t.string "name"
120
+ t.integer "apidae_type"
121
+ t.index ["apidae_id"], name: "index_apidae_territories_on_apidae_id"
122
+ end
123
+
115
124
  create_table "apidae_towns", id: :serial, force: :cascade do |t|
116
125
  t.string "country"
117
126
  t.integer "apidae_id"