egov_utils 0.2.13 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/egov_utils/eGovUtilities.coffee.erb +10 -0
- data/app/attributes/egov_utils/legal_form_attribute.rb +13 -0
- data/app/models/egov_utils/abstract_person.rb +7 -0
- data/app/models/egov_utils/legal_person.rb +15 -0
- data/app/models/egov_utils/natural_person.rb +18 -0
- data/app/models/egov_utils/person.rb +16 -6
- data/app/resources/egov_utils/legal_form.rb +9 -0
- data/app/resources/egov_utils/love.rb +18 -0
- data/app/schemas/egov_utils/abstract_person_schema.rb +5 -0
- data/app/schemas/egov_utils/legal_person_schema.rb +14 -0
- data/app/schemas/egov_utils/natural_person_schema.rb +15 -0
- data/app/schemas/egov_utils/person_schema.rb +1 -1
- data/app/views/egov_utils/people/_form.html.haml +18 -8
- data/app/views/egov_utils/users/show.html.haml +2 -1
- data/app/views/layouts/egov_utils/mailer.html.erb +7 -1
- data/app/views/layouts/egov_utils/mailer.text.erb +4 -0
- data/config/locales/cs.yml +11 -1
- data/db/migrate/20180403132853_rename_people_to_natural_people.rb +9 -0
- data/db/migrate/20180403133155_create_egov_utils_people_base.rb +9 -0
- data/db/migrate/20180403141531_join_people_tables.rb +23 -0
- data/db/migrate/20180403150556_create_egov_utils_legal_people.rb +10 -0
- data/lib/egov_utils.rb +1 -0
- data/lib/egov_utils/model_permissions.rb +52 -0
- data/lib/egov_utils/user_utils/application_controller_patch.rb +8 -0
- data/lib/egov_utils/version.rb +1 -1
- metadata +17 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: db8d02864512bcde337488cdcff4446ab6603d612ff7fe85aebcae592abad8a5
|
4
|
+
data.tar.gz: 887cb22e5ead25efd16576a9c9481336a5e669a57f485d18933b6be05462f495
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 621e9e7fbcf99247224f07289dad00275d4f06251e17e4f9cf7e482bed13692cca82690fe880b81d83df56684ff6be65a7c987c6e934621b67821d65dab2f42a
|
7
|
+
data.tar.gz: b8b6df91a246ad9216f149bf5eea8fbad81947830ae553763a49aa8906ddffbd7807b12163f5dbe0c6086307a9bf4aeadff72cd7397a15a071631538b7980203
|
@@ -30,6 +30,7 @@ window.eGovUtilities =
|
|
30
30
|
eGovUtilities.initDatepickers($container)
|
31
31
|
eGovUtilities.initSelect2($container)
|
32
32
|
eGovUtilities.initFileFields($container)
|
33
|
+
eGovUtilities.initPeople($container)
|
33
34
|
|
34
35
|
clearBeforeCache: ($container)->
|
35
36
|
$container ||= $(document)
|
@@ -53,6 +54,15 @@ window.eGovUtilities =
|
|
53
54
|
pickers = $('[type="datetime-local"][data-provide="datepicker"]', $container)
|
54
55
|
pickers.parent().datetimepicker()
|
55
56
|
|
57
|
+
initPeople: ($container)->
|
58
|
+
$container ||= $(document)
|
59
|
+
$('.person-form .person-type-toggle', $container).on('change', (evt)->
|
60
|
+
val = $(this).val();
|
61
|
+
$form = $(this).closest('.person-form');
|
62
|
+
$form.find('.natural_person').toggle( val == 'natural').find(':input').prop('disabled', val != 'natural');
|
63
|
+
$form.find('.legal_person').toggle( val == 'legal').find(':input').prop('disabled', val != 'legal');
|
64
|
+
).change()
|
65
|
+
|
56
66
|
initSelect2: ($container)->
|
57
67
|
$container ||= $(document)
|
58
68
|
$('[data-provide="select2"]', $container).select2()
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module EgovUtils
|
2
|
+
class LegalFormAttribute < AzaharaSchema::Attribute
|
3
|
+
|
4
|
+
def initialize(model, name)
|
5
|
+
super(model, name, 'love')
|
6
|
+
end
|
7
|
+
|
8
|
+
def available_values
|
9
|
+
@available_values ||= EgovUtils::LegalForm.all.collect{|lf| [lf.name, lf.key] }
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module EgovUtils
|
2
|
+
class NaturalPerson < AbstractPerson
|
3
|
+
|
4
|
+
belongs_to :person, class_name: 'EgovUtils::Person'
|
5
|
+
|
6
|
+
validates :firstname, :lastname, :birth_date, presence: true
|
7
|
+
validates :birth_date, uniqueness: { scope: [:firstname, :lastname] }, birthday: true
|
8
|
+
|
9
|
+
def fullname
|
10
|
+
firstname.to_s + ' ' + lastname.to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
"#{fullname} (#{I18n.t(:text_born_on_at, place: birth_place, date: I18n.l(birth_date.to_date))})"
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -2,18 +2,28 @@ module EgovUtils
|
|
2
2
|
class Person < ApplicationRecord
|
3
3
|
|
4
4
|
belongs_to :residence, class_name: 'EgovUtils::Address', optional: true
|
5
|
+
has_one :natural_person
|
6
|
+
has_one :legal_person
|
5
7
|
|
6
|
-
|
7
|
-
validates :birth_date, uniqueness: { scope: [:firstname, :lastname] }, birthday: true
|
8
|
+
enum person_type: { natural: 1, legal: 16 }
|
8
9
|
|
9
|
-
|
10
|
+
validates :person_entity, presence: true
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
accepts_nested_attributes_for :residence, :natural_person, :legal_person
|
13
|
+
|
14
|
+
delegate :fullname, :fullname=, to: :person_entity
|
15
|
+
|
16
|
+
def person_entity
|
17
|
+
case person_type
|
18
|
+
when 'natural'
|
19
|
+
natural_person
|
20
|
+
when 'legal'
|
21
|
+
legal_person
|
22
|
+
end
|
13
23
|
end
|
14
24
|
|
15
25
|
def to_s
|
16
|
-
|
26
|
+
person_entity.to_s
|
17
27
|
end
|
18
28
|
|
19
29
|
end
|
@@ -1,5 +1,21 @@
|
|
1
1
|
require 'activeresource'
|
2
2
|
|
3
|
+
|
4
|
+
module EgovUtils
|
5
|
+
module AzaharaJsonResourceFormat
|
6
|
+
include ActiveResource::Formats::JsonFormat
|
7
|
+
extend self
|
8
|
+
|
9
|
+
def decode(json)
|
10
|
+
resources = super(json)
|
11
|
+
(resources.is_a?(Hash) && resources.key?('entities')) ? resources['entities'] : resources
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
|
3
19
|
module EgovUtils
|
4
20
|
class Love < ::ActiveResource::Base
|
5
21
|
|
@@ -9,6 +25,8 @@ module EgovUtils
|
|
9
25
|
end
|
10
26
|
|
11
27
|
self.site = "#{config['love_url'] || Rails.configuration.try(:love_url)}/api/v1/"
|
28
|
+
self.format = EgovUtils::AzaharaJsonResourceFormat
|
29
|
+
|
12
30
|
|
13
31
|
def self.where(clauses = {})
|
14
32
|
raise ArgumentError, "expected a clauses Hash, got #{clauses.inspect}" unless clauses.is_a? Hash
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module EgovUtils
|
2
|
+
class LegalPersonSchema < AzaharaSchema::ModelSchema
|
3
|
+
|
4
|
+
def self.attribute(model, attr_name, attr_type=nil)
|
5
|
+
case attr_name
|
6
|
+
when 'legal_form'
|
7
|
+
LegalFormAttribute.new(model, attr_name)
|
8
|
+
else
|
9
|
+
super
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module EgovUtils
|
2
|
+
class NaturalPersonSchema < AzaharaSchema::ModelSchema
|
3
|
+
|
4
|
+
def main_attribute_name
|
5
|
+
'fullname'
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize_available_attributes
|
9
|
+
@available_attributes ||= []
|
10
|
+
@available_attributes << AzaharaSchema::DerivedAttribute.new(model, 'fullname', :concat, 'firstname', 'lastname', schema: self)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -7,7 +7,7 @@ module EgovUtils
|
|
7
7
|
|
8
8
|
def initialize_available_attributes
|
9
9
|
@available_attributes ||= []
|
10
|
-
@available_attributes << AzaharaSchema::DerivedAttribute.new(model, 'fullname', :concat, '
|
10
|
+
@available_attributes << AzaharaSchema::DerivedAttribute.new(model, 'fullname', :concat, 'natural_person-fullname', 'legal_person-name', schema: self)
|
11
11
|
super
|
12
12
|
end
|
13
13
|
|
@@ -1,8 +1,18 @@
|
|
1
|
-
.
|
2
|
-
.
|
3
|
-
|
4
|
-
.
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
=
|
1
|
+
.person-form
|
2
|
+
.row
|
3
|
+
.col-12= form.select :person_type, enum_values_for_select(person.class, :person_type), {}, class: 'person-type-toggle'
|
4
|
+
.natural_person.row
|
5
|
+
= form.fields_for(:natural_person, person.natural_person || EgovUtils::NaturalPerson.new) do |fields|
|
6
|
+
.col-12.col-sm-6= fields.text_field(:firstname)
|
7
|
+
.col-12.col-sm-6= fields.text_field(:lastname)
|
8
|
+
.col-12.col-sm-6= fields.date_field(:birth_date, data: {'date-view-mode' => 'decades', 'date-min-date' => Date.new(1920, 1, 1).to_s, 'date-max-date' => Date.today.to_s, 'date-use-current' => false, 'date-view-date' => Date.new(1950, 1, 1).to_s })
|
9
|
+
.col-12.col-sm-6= fields.text_field(:birth_place)
|
10
|
+
.legal_person.row
|
11
|
+
= form.fields_for(:legal_person, person.legal_person || EgovUtils::LegalPerson.new) do |fields|
|
12
|
+
.col-12= fields.text_field(:name)
|
13
|
+
.col-12.col-sm-6= fields.text_field(:ico)
|
14
|
+
.col-12.col-sm-6= fields.select2 :legal_form, list_values_for_select(azahara_attribute_for(EgovUtils::LegalPerson, 'legal_form'))
|
15
|
+
.row
|
16
|
+
.col-12
|
17
|
+
= form.fields_for(:residence, person.residence || EgovUtils::Address.new) do |fields|
|
18
|
+
= render 'egov_utils/addresses/form', form: fields, address: fields.object
|
@@ -1 +1,2 @@
|
|
1
|
-
= current_user.fullname
|
1
|
+
%h3= current_user.fullname
|
2
|
+
= current_user.mail || current_user.login
|
data/config/locales/cs.yml
CHANGED
@@ -46,6 +46,7 @@ cs:
|
|
46
46
|
label_new: Nový
|
47
47
|
label_edit: Upravit
|
48
48
|
label_profile: Profil
|
49
|
+
label_change_password: Změnit heslo
|
49
50
|
label_login: Přihlásit
|
50
51
|
label_logout: Odhlásit
|
51
52
|
label_signup: Registrovat
|
@@ -104,13 +105,22 @@ cs:
|
|
104
105
|
region: Kraj
|
105
106
|
country: Země
|
106
107
|
egov_utils/person:
|
108
|
+
person_type: Typ osoby
|
109
|
+
person_types:
|
110
|
+
natural: Fyzická
|
111
|
+
legal: Právnická
|
112
|
+
egov_utils/abstract_person:
|
107
113
|
fullname: Celé jméno
|
114
|
+
egov_utils/natural_person:
|
108
115
|
firstname: Jméno
|
109
116
|
lastname: Příjmení
|
110
117
|
birth_date: Datum narození
|
111
118
|
birth_place: Místo narození
|
112
119
|
residence: Bydliště
|
113
|
-
|
120
|
+
egov_utils/legal_person:
|
121
|
+
name: Název
|
122
|
+
ico: IČO
|
123
|
+
legal_form: Právní forma
|
114
124
|
|
115
125
|
models_errors: &my_model_errors
|
116
126
|
profile:
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class JoinPeopleTables < ActiveRecord::Migration[5.1]
|
2
|
+
def up
|
3
|
+
add_reference :egov_utils_natural_people, :person, foreign_key: { to_table: :egov_utils_people }
|
4
|
+
select_rows("SELECT id, residence_id FROM egov_utils_natural_people").each do |row|
|
5
|
+
if row.second
|
6
|
+
value = exec_insert("INSERT INTO egov_utils_people (person_type, residence_id) VALUES (1, #{row.second})", "person create")
|
7
|
+
else
|
8
|
+
value = exec_insert("INSERT INTO egov_utils_people (person_type) VALUES (1)", "person create")
|
9
|
+
end
|
10
|
+
id_value = ActiveRecord::Base.connection.send(:last_inserted_id, value)
|
11
|
+
execute("UPDATE egov_utils_natural_people SET person_id = #{id_value} WHERE id = #{row.first}")
|
12
|
+
end
|
13
|
+
# remove_reference :egov_utils_natural_people, :residence
|
14
|
+
end
|
15
|
+
|
16
|
+
def down
|
17
|
+
add_reference :egov_utils_natural_people, :residence, foreign_key: { to_table: :egov_utils_addresses }
|
18
|
+
EgovUtils::NaturalPerson.preload(:person).all.each do |np|
|
19
|
+
np.update_column(:residence_id, np.person.residence_id)
|
20
|
+
end
|
21
|
+
remove_reference :egov_utils_natural_people, :person, foreign_key: { to_table: :egov_utils_people }
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class CreateEgovUtilsLegalPeople < ActiveRecord::Migration[5.1]
|
2
|
+
def change
|
3
|
+
create_table :egov_utils_legal_people do |t|
|
4
|
+
t.references :person, foreign_key: { to_table: :egov_utils_people }
|
5
|
+
t.string :name
|
6
|
+
t.string :ico
|
7
|
+
t.integer :legal_form
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
data/lib/egov_utils.rb
CHANGED
@@ -0,0 +1,52 @@
|
|
1
|
+
module EgovUtils
|
2
|
+
class ModelPermissions
|
3
|
+
|
4
|
+
def self.build(model, user)
|
5
|
+
klass = model
|
6
|
+
klasses = [klass]
|
7
|
+
while klass != klass.base_class
|
8
|
+
klass = klass.superclass
|
9
|
+
klasses << klass
|
10
|
+
end
|
11
|
+
klasses.each do |kls|
|
12
|
+
perm_class = "#{kls.name}Permissions".safe_constantize
|
13
|
+
return perm_class.new(user) if perm_class
|
14
|
+
end
|
15
|
+
EgovUtils::ModelPermissions.new(model, user)
|
16
|
+
end
|
17
|
+
|
18
|
+
attr_reader :model, :user
|
19
|
+
|
20
|
+
def initialize(model, user)
|
21
|
+
@model, @user = model, user
|
22
|
+
end
|
23
|
+
|
24
|
+
def readable_attributes(action=:show)
|
25
|
+
model.column_names
|
26
|
+
end
|
27
|
+
|
28
|
+
def basic_editable_attributes(action=:update)
|
29
|
+
model.column_names - ['id', 'updated_at', 'created_at']
|
30
|
+
end
|
31
|
+
|
32
|
+
def basic_editable_attributes_for(entity, action=:update)
|
33
|
+
basic_editable_attributes(action)
|
34
|
+
end
|
35
|
+
|
36
|
+
def editable_attributes(action=:update)
|
37
|
+
attributes = basic_editable_attributes(action)
|
38
|
+
assocs = model.reflect_on_all_associations.select{|assoc| model.method_defined?("#{assoc.name}_attributes=".to_sym) }
|
39
|
+
attributes << assocs.each_with_object({}) {|assoc, obj| obj["#{assoc.name}_attributes"] = self.class.build(assoc.klass, user).editable_attributes(action) }
|
40
|
+
attributes
|
41
|
+
end
|
42
|
+
|
43
|
+
#TODO nested attributes should take entity as well - what to do with has_many?
|
44
|
+
def editable_attributes_for(entity, action=:update)
|
45
|
+
attributes = basic_editable_attributes(action)
|
46
|
+
assocs = model.reflect_on_all_associations.select{|assoc| model.method_defined?("#{assoc.name}_attributes=".to_sym) }
|
47
|
+
attributes << assocs.each_with_object({}) {|assoc, obj| obj["#{assoc.name}_attributes"] = self.class.build(assoc.klass, user).editable_attributes_for(action) }
|
48
|
+
attributes
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
@@ -59,6 +59,14 @@ module EgovUtils
|
|
59
59
|
return false
|
60
60
|
end
|
61
61
|
|
62
|
+
def editable_attributes(model, action=:update)
|
63
|
+
EgovUtils::ModelPermissions.build(model, current_user).editable_attributes(action)
|
64
|
+
end
|
65
|
+
|
66
|
+
def editable_attributes_for(entity, action=:update)
|
67
|
+
EgovUtils::ModelPermissions.build(entity.type, current_user).editable_attributes_for(entity, action)
|
68
|
+
end
|
69
|
+
|
62
70
|
protected
|
63
71
|
def find_current_user
|
64
72
|
# existing session
|
data/lib/egov_utils/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: egov_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ondřej Ezr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -310,14 +310,14 @@ dependencies:
|
|
310
310
|
requirements:
|
311
311
|
- - "~>"
|
312
312
|
- !ruby/object:Gem::Version
|
313
|
-
version: '0.
|
313
|
+
version: '0.3'
|
314
314
|
type: :runtime
|
315
315
|
prerelease: false
|
316
316
|
version_requirements: !ruby/object:Gem::Requirement
|
317
317
|
requirements:
|
318
318
|
- - "~>"
|
319
319
|
- !ruby/object:Gem::Version
|
320
|
-
version: '0.
|
320
|
+
version: '0.3'
|
321
321
|
- !ruby/object:Gem::Dependency
|
322
322
|
name: egon_gate
|
323
323
|
requirement: !ruby/object:Gem::Requirement
|
@@ -388,6 +388,7 @@ files:
|
|
388
388
|
- app/attributes/egov_utils/all_role_names.rb
|
389
389
|
- app/attributes/egov_utils/district.rb
|
390
390
|
- app/attributes/egov_utils/full_address.rb
|
391
|
+
- app/attributes/egov_utils/legal_form_attribute.rb
|
391
392
|
- app/attributes/egov_utils/region.rb
|
392
393
|
- app/controllers/egov_utils/addresses_controller.rb
|
393
394
|
- app/controllers/egov_utils/application_controller.rb
|
@@ -409,17 +410,24 @@ files:
|
|
409
410
|
- app/mailers/egov_utils/application_mailer.rb
|
410
411
|
- app/mailers/egov_utils/user_mailer.rb
|
411
412
|
- app/models/ability.rb
|
413
|
+
- app/models/egov_utils/abstract_person.rb
|
412
414
|
- app/models/egov_utils/address.rb
|
413
415
|
- app/models/egov_utils/application_record.rb
|
414
416
|
- app/models/egov_utils/audit_detail.rb_bac
|
415
417
|
- app/models/egov_utils/audit_record.rb_bac
|
416
418
|
- app/models/egov_utils/group.rb
|
419
|
+
- app/models/egov_utils/legal_person.rb
|
420
|
+
- app/models/egov_utils/natural_person.rb
|
417
421
|
- app/models/egov_utils/person.rb
|
418
422
|
- app/models/egov_utils/principal.rb
|
419
423
|
- app/models/egov_utils/user.rb
|
424
|
+
- app/resources/egov_utils/legal_form.rb
|
420
425
|
- app/resources/egov_utils/love.rb
|
421
426
|
- app/resources/egov_utils/organization.rb
|
427
|
+
- app/schemas/egov_utils/abstract_person_schema.rb
|
422
428
|
- app/schemas/egov_utils/address_schema.rb
|
429
|
+
- app/schemas/egov_utils/legal_person_schema.rb
|
430
|
+
- app/schemas/egov_utils/natural_person_schema.rb
|
423
431
|
- app/schemas/egov_utils/person_schema.rb
|
424
432
|
- app/schemas/egov_utils/user_schema.rb
|
425
433
|
- app/validators/birthday_validator.rb
|
@@ -481,6 +489,10 @@ files:
|
|
481
489
|
- db/migrate/20171115142450_add_confirmation_code_to_users.rb
|
482
490
|
- db/migrate/20180125133500_add_password_generation_to_egov_utils_users.rb
|
483
491
|
- db/migrate/20180126131416_create_egov_utils_groups_users.rb
|
492
|
+
- db/migrate/20180403132853_rename_people_to_natural_people.rb
|
493
|
+
- db/migrate/20180403133155_create_egov_utils_people_base.rb
|
494
|
+
- db/migrate/20180403141531_join_people_tables.rb
|
495
|
+
- db/migrate/20180403150556_create_egov_utils_legal_people.rb
|
484
496
|
- lib/bootstrap_form/check_box_patch.rb
|
485
497
|
- lib/bootstrap_form/custom_file_field.rb
|
486
498
|
- lib/bootstrap_form/datetimepicker.rb
|
@@ -495,6 +507,7 @@ files:
|
|
495
507
|
- lib/egov_utils/helpers/form_helper.rb
|
496
508
|
- lib/egov_utils/helpers/tags/datetime_field_patch.rb
|
497
509
|
- lib/egov_utils/helpers/tags/fileuid_field.rb
|
510
|
+
- lib/egov_utils/model_permissions.rb
|
498
511
|
- lib/egov_utils/redmine/issue.rb
|
499
512
|
- lib/egov_utils/routes/admin_constraint.rb
|
500
513
|
- lib/egov_utils/settings.rb
|