customer_vault 0.0.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/MIT-LICENSE +2 -2
- data/app/assets/images/customer_vault/icons/group-128.png +0 -0
- data/app/assets/images/customer_vault/icons/group-16.png +0 -0
- data/app/assets/images/customer_vault/icons/group-20.png +0 -0
- data/app/assets/images/customer_vault/icons/group-24.png +0 -0
- data/app/assets/images/customer_vault/icons/group-256.png +0 -0
- data/app/assets/images/customer_vault/icons/group-32.png +0 -0
- data/app/assets/images/customer_vault/icons/group-48.png +0 -0
- data/app/assets/images/customer_vault/icons/group-512.png +0 -0
- data/app/assets/images/customer_vault/icons/group-64.png +0 -0
- data/app/assets/stylesheets/customer_vault/{application.css → application.css.scss} +54 -5
- data/app/assets/stylesheets/customer_vault/{people.css → individuals.css} +1 -0
- data/app/assets/stylesheets/customer_vault/links.css +3 -0
- data/app/controllers/customer_vault/corporations_controller.rb +5 -7
- data/app/controllers/customer_vault/individuals_controller.rb +61 -0
- data/app/controllers/customer_vault/links_controller.rb +53 -0
- data/app/controllers/customer_vault/people_controller.rb +5 -54
- data/app/helpers/customer_vault/individuals_helper.rb +4 -0
- data/app/models/customer_vault/corporation.rb +5 -1
- data/app/models/customer_vault/individual.rb +15 -0
- data/app/models/customer_vault/link.rb +6 -0
- data/app/models/customer_vault/person.rb +13 -2
- data/app/views/customer_vault/corporations/_form.html.slim +28 -21
- data/app/views/customer_vault/corporations/_list_details.html.slim +29 -0
- data/app/views/customer_vault/corporations/_show_details.html.slim +36 -0
- data/app/views/customer_vault/corporations/edit.html.slim +22 -7
- data/app/views/customer_vault/corporations/new.html.slim +22 -5
- data/app/views/customer_vault/corporations/show.html.slim +41 -16
- data/app/views/customer_vault/{people → individuals}/_form.html.slim +16 -13
- data/app/views/customer_vault/individuals/_list_details.html.slim +39 -0
- data/app/views/customer_vault/individuals/_show_details.html.slim +52 -0
- data/app/views/customer_vault/individuals/edit.html.slim +23 -0
- data/app/views/customer_vault/individuals/new.html.slim +25 -0
- data/app/views/customer_vault/individuals/show.html.slim +42 -0
- data/app/views/customer_vault/layout/_form_error.html.slim +5 -0
- data/app/views/customer_vault/links/_aside.html.slim +4 -0
- data/app/views/customer_vault/links/_title.html.slim +3 -0
- data/app/views/customer_vault/links/edit.html.slim +30 -0
- data/app/views/customer_vault/links/new.html.slim +32 -0
- data/app/views/customer_vault/people/_select.html.slim +1 -0
- data/app/views/customer_vault/people/index.html.slim +29 -58
- data/config/cucumber.yml +8 -0
- data/config/routes.rb +7 -3
- data/db/migrate/20141016151955_change_people_to_individuals.rb +5 -0
- data/db/migrate/20141017085621_add_link.rb +12 -0
- data/lib/customer_vault/engine.rb +1 -0
- data/lib/customer_vault/version.rb +1 -1
- data/lib/tasks/cucumber.rake +65 -0
- data/spec/controllers/customer_vault/corporations_controller_spec.rb +3 -9
- data/spec/controllers/customer_vault/individuals_controller_spec.rb +156 -0
- data/spec/dummy/config/initializers/inflections.rb +1 -1
- data/spec/dummy/config/routes.rb +1 -1
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20141013153526_create_dorsale_addresses.dorsale.rb +14 -0
- data/spec/dummy/db/migrate/20141014073225_add_polymorphic_fields_to_addresses.dorsale.rb +7 -0
- data/spec/dummy/db/schema.rb +24 -2
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +22059 -0
- data/spec/dummy/log/test.log +35561 -0
- data/spec/dummy/tmp/cache/assets/development/sass/8f425af8af5194cec6da5008411d913407b2b024/application.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/03c4e7aa08d7d8a9e984a1e4eea01566 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/190ff82deecfbbe385c03ee8f8f3d2bf +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/201cb9b3ce55f2f4dea6232ab8220cc3 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/2de61d7dd16d9e661790bc2973cc609a +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/34d14962fde7e4fd6e2671844bcfaa78 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/39c67f2e186cde8355bb4533f16da267 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/47170c4182a8457e8d53507ea76fa76b +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/471d75c3acc9522efc857f3be05b8375 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/49ff98533b89b4c09d5d1ecb9d45f207 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4b15ccd40e1d9deecfe3f523edb32a25 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/4cd6d71a32c5da916328bfcfa972bd6c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/5d0e775359a27eb80c837eee1bdd52cb +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6355dea7c574d08602bd4e7e16a4c0d2 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/6847fabb2f2a2ff6011d957adb14a11e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/78ef508640527d1bb135c1077223fb7c +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/8e1929049a5ed5974d9bbb22b2c1bbc4 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/92220e9fcf5e0717b9dc27169bf512e9 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/a774486cb0f2787691a7e585e008caea +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/aa60fba48cd1c25f138255570918b3db +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ac788eb47a519e5f2837cf9504d74f53 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/ac8cf41eb80a554f4f15e80fa6e1ea58 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/df9e45a4bc905f29f8544c37dc9e9a18 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/e5782a71fc01b88e6ac0c1c963bf7e3e +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/f516186931f15a3e5c86af1b1632d256 +0 -0
- data/spec/dummy/tmp/cache/assets/development/sprockets/faca8abcf70e21e966cebb74604b729f +0 -0
- data/spec/dummy/tmp/cache/assets/test/sass/8f425af8af5194cec6da5008411d913407b2b024/application.css.scssc +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/03c4e7aa08d7d8a9e984a1e4eea01566 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/0e2a9601926844c961e7e97d32e775be +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/183bdc6b3ba504dc16e7b94a0f38fe06 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/190ff82deecfbbe385c03ee8f8f3d2bf +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/1dc5cb7209fcdb172bfcde9c841c19e3 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/201cb9b3ce55f2f4dea6232ab8220cc3 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/2b9d45522b3d1f3105e1c33e325dc6de +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/2df425d43fef5663aadfc1bcc3087066 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/2e7625733abd8050be92fe0ca1487fad +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/31876fc299b61887fae3e657773d7b15 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/338e8df8f4119a2a48b920613a8026a9 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/34d14962fde7e4fd6e2671844bcfaa78 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/36adb34aba0d7825a4c9a4cf09c33572 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/39c67f2e186cde8355bb4533f16da267 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/40dbaa1db791d7be2279ddd67d33a1c4 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/47170c4182a8457e8d53507ea76fa76b +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/471d75c3acc9522efc857f3be05b8375 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/49ff98533b89b4c09d5d1ecb9d45f207 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/4b15ccd40e1d9deecfe3f523edb32a25 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/4cd6d71a32c5da916328bfcfa972bd6c +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/4d0235c7b6e465a89ad270537681be7f +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/52f82b29641b7e97fabca983410c944d +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/5b95ef84d5ea3822d0364f3a6f5fa9ff +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/5bc4ad6e6b955197190847aeff8df8bd +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/5d0e775359a27eb80c837eee1bdd52cb +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/6355dea7c574d08602bd4e7e16a4c0d2 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/67a7734fae2f02d979ee498add75d3eb +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/6847fabb2f2a2ff6011d957adb14a11e +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/78ef508640527d1bb135c1077223fb7c +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/86a049860d05103d78ab689003d6ccb3 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/8e1929049a5ed5974d9bbb22b2c1bbc4 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/92220e9fcf5e0717b9dc27169bf512e9 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/a5c73696137ab9dbdda376c8d7ffa3b9 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/a8e30d24c0bb5789981c4751cd2cdd76 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/ac788eb47a519e5f2837cf9504d74f53 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/ac8cf41eb80a554f4f15e80fa6e1ea58 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/b10f86698e41bfdaafc9fb6bbf5bfbd9 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/c08aad292c2ca4aee63f927a45ba90ef +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/c9db74506cdab0aec9f855c956f47726 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/d04aeffd159aa29e71a9770dc8630259 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/db5f1ec4fd27d454a95b2824fff064d1 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/df9e45a4bc905f29f8544c37dc9e9a18 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/e5782a71fc01b88e6ac0c1c963bf7e3e +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/f516186931f15a3e5c86af1b1632d256 +0 -0
- data/spec/dummy/tmp/cache/assets/test/sprockets/faca8abcf70e21e966cebb74604b729f +0 -0
- data/spec/dummy/tmp/capybara/capybara-201410171416122395182759.html +13 -0
- data/spec/factories/customer_vault_corporations.rb +4 -4
- data/spec/factories/{customer_vault_people.rb → customer_vault_individuals.rb} +1 -1
- data/spec/factories/customer_vault_links.rb +9 -0
- data/spec/helpers/customer_vault/{people_helper_spec.rb → individuals_helper_spec.rb} +3 -3
- data/spec/models/customer_vault/corporation_spec.rb +1 -0
- data/spec/models/customer_vault/individual_spec.rb +15 -0
- data/spec/models/customer_vault/link_spec.rb +13 -0
- data/spec/models/customer_vault/person_spec.rb +28 -6
- data/spec/routing/customer_vault/corporations_routing_spec.rb +22 -4
- data/spec/routing/customer_vault/individual_routing_spec.rb +54 -0
- data/spec/routing/customer_vault/people_routing_spec.rb +1 -26
- data/spec/spec_helper.rb +1 -0
- data/spec/views/customer_vault/individuals/edit.html.slim_spec.rb +47 -0
- data/spec/views/customer_vault/individuals/new.html.slim_spec.rb +47 -0
- data/spec/views/customer_vault/{people → individuals}/show.html.slim_spec.rb +2 -3
- metadata +226 -49
- data/app/assets/images/customer_vault/icons/add_person-128.png +0 -0
- data/app/assets/images/customer_vault/icons/add_person-20.png +0 -0
- data/app/assets/images/customer_vault/icons/add_person-24.png +0 -0
- data/app/assets/images/customer_vault/icons/add_person-256.png +0 -0
- data/app/assets/images/customer_vault/icons/add_person-32.png +0 -0
- data/app/assets/images/customer_vault/icons/add_person-48.png +0 -0
- data/app/assets/images/customer_vault/icons/add_person-512.png +0 -0
- data/app/assets/images/customer_vault/icons/add_person-64.png +0 -0
- data/app/helpers/customer_vault/people_helper.rb +0 -12
- data/app/views/customer_vault/corporations/index.html.slim +0 -27
- data/app/views/customer_vault/people/edit.html.slim +0 -21
- data/app/views/customer_vault/people/new.html.slim +0 -21
- data/app/views/customer_vault/people/show.html.slim +0 -57
- data/spec/controllers/customer_vault/people_controller_spec.rb +0 -163
- data/spec/views/customer_vault/corporations/index.html.slim_spec.rb +0 -29
- data/spec/views/customer_vault/people/edit.html.slim_spec.rb +0 -47
- data/spec/views/customer_vault/people/index.html.slim_spec.rb +0 -43
- data/spec/views/customer_vault/people/new.html.slim_spec.rb +0 -47
- /data/app/assets/images/customer_vault/icons/{people-128.png → individual-128.png} +0 -0
- /data/app/assets/images/customer_vault/icons/{people-16.png → individual-16.png} +0 -0
- /data/app/assets/images/customer_vault/icons/{people-20.png → individual-20.png} +0 -0
- /data/app/assets/images/customer_vault/icons/{people-24.png → individual-24.png} +0 -0
- /data/app/assets/images/customer_vault/icons/{people-256.png → individual-256.png} +0 -0
- /data/app/assets/images/customer_vault/icons/{people-32.png → individual-32.png} +0 -0
- /data/app/assets/images/customer_vault/icons/{people-48.png → individual-48.png} +0 -0
- /data/app/assets/images/customer_vault/icons/{people-512.png → individual-512.png} +0 -0
- /data/app/assets/images/customer_vault/icons/{people-64.png → individual-64.png} +0 -0
- /data/app/assets/javascripts/customer_vault/{people.js → individuals.js} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc3e85456bdc02e187ecc3a94e89513dcb61b97d
|
4
|
+
data.tar.gz: 0b2ba661f65d0e20029915b8713e6249f585cb95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2754aa412120f956fb81ac807b9f268092260c9467f580f53533f11a6c255eca7a0d3fbc1368d0864625b235f9a9e64ed9d829cc5c13fa75816eca267db4750e
|
7
|
+
data.tar.gz: 49428c27c8000292dd99de498a7083d69c7aeccf9896902da7c0cdc5850ecd67680f3e61d3ff637eb9b33e5e64a0ab5aa3e00ae4d65e760bb27df4eda29cec53
|
data/MIT-LICENSE
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
Copyright 2014 YOURNAME
|
2
2
|
|
3
|
-
Permission is hereby granted, free of charge, to any
|
3
|
+
Permission is hereby granted, free of charge, to any individual obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
5
5
|
"Software"), to deal in the Software without restriction, including
|
6
6
|
without limitation the rights to use, copy, modify, merge, publish,
|
7
7
|
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
-
permit
|
8
|
+
permit individuals to whom the Software is furnished to do so, subject to
|
9
9
|
the following conditions:
|
10
10
|
|
11
11
|
The above copyright notice and this permission notice shall be
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -55,13 +55,62 @@
|
|
55
55
|
font-weight:bold;
|
56
56
|
}
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
border:1px solid #D8D8D8;
|
62
|
-
padding:0.5%;
|
58
|
+
ul {
|
59
|
+
list-style:none;
|
60
|
+
padding-left:0;
|
63
61
|
}
|
64
62
|
|
63
|
+
aside.individual, aside.corporation, aside .action, ul li.person{
|
64
|
+
background-color:#F5F5F5;
|
65
|
+
margin-bottom:1%;
|
66
|
+
border:1px solid #D8D8D8;
|
67
|
+
padding:0.5%;
|
68
|
+
}
|
69
|
+
|
70
|
+
.individual .last_name {
|
71
|
+
margin-left: 10px;
|
72
|
+
}
|
73
|
+
|
74
|
+
.individual .last_name {
|
75
|
+
margin-left: 10px;
|
76
|
+
}
|
77
|
+
|
78
|
+
.individual .title, .corporation .title {
|
79
|
+
margin-left: 10px;
|
80
|
+
&:before {
|
81
|
+
content: "/";
|
82
|
+
margin-right: 10px;
|
83
|
+
}
|
84
|
+
}
|
85
|
+
.individual, .corporation{
|
86
|
+
.actions.edit, .actions.delete{
|
87
|
+
margin-left: 10px;
|
88
|
+
}
|
89
|
+
.actions.delete:before{
|
90
|
+
content: "-";
|
91
|
+
margin-right: 10px;
|
92
|
+
}
|
93
|
+
}
|
94
|
+
/*
|
95
|
+
* Tabs
|
96
|
+
*/
|
97
|
+
|
98
|
+
.tab-content {
|
99
|
+
border-left: 1px solid #ddd;
|
100
|
+
border-right: 1px solid #ddd;
|
101
|
+
border-bottom: 1px solid #ddd;
|
102
|
+
padding: 10px;
|
103
|
+
min-height: 300px;
|
104
|
+
}
|
105
|
+
|
106
|
+
.nav-tabs {
|
107
|
+
margin-bottom: 0;
|
108
|
+
}
|
109
|
+
|
110
|
+
|
111
|
+
/*
|
112
|
+
* Pagination
|
113
|
+
*/
|
65
114
|
.pagination a, .pagination span.current, .pagination span.gap {
|
66
115
|
float: left;
|
67
116
|
background-image:linear-gradient(#FAFAFA, #D8D8D8);
|
@@ -4,11 +4,6 @@ module CustomerVault
|
|
4
4
|
class CorporationsController < ApplicationController
|
5
5
|
before_action :set_corporation, only: [:show, :edit, :update, :destroy]
|
6
6
|
|
7
|
-
# GET /corporations
|
8
|
-
def index
|
9
|
-
@corporations = Corporation.all
|
10
|
-
end
|
11
|
-
|
12
7
|
# GET /corporations/1
|
13
8
|
def show
|
14
9
|
end
|
@@ -16,10 +11,12 @@ module CustomerVault
|
|
16
11
|
# GET /corporations/new
|
17
12
|
def new
|
18
13
|
@corporation = Corporation.new
|
14
|
+
@corporation.build_address
|
19
15
|
end
|
20
16
|
|
21
17
|
# GET /corporations/1/edit
|
22
18
|
def edit
|
19
|
+
@corporation.build_address unless @corporation.address
|
23
20
|
end
|
24
21
|
|
25
22
|
# POST /corporations
|
@@ -45,7 +42,7 @@ module CustomerVault
|
|
45
42
|
# DELETE /corporations/1
|
46
43
|
def destroy
|
47
44
|
@corporation.destroy
|
48
|
-
redirect_to
|
45
|
+
redirect_to people_url, notice: 'Corporation was successfully destroyed.'
|
49
46
|
end
|
50
47
|
|
51
48
|
private
|
@@ -56,7 +53,8 @@ module CustomerVault
|
|
56
53
|
|
57
54
|
# Only allow a trusted parameter "white list" through.
|
58
55
|
def corporation_params
|
59
|
-
params.require(:corporation).permit(:name, :email, :phone, :fax
|
56
|
+
params.require(:corporation).permit(:name, :email, :phone, :fax,
|
57
|
+
:address_attributes => [:street, :street_bis, :zip, :city, :country])
|
60
58
|
end
|
61
59
|
end
|
62
60
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require_dependency "customer_vault/application_controller"
|
2
|
+
|
3
|
+
module CustomerVault
|
4
|
+
class IndividualsController < ApplicationController
|
5
|
+
before_action :set_individual, only: [:show, :edit, :update, :destroy]
|
6
|
+
|
7
|
+
# GET /individuals/1
|
8
|
+
def show
|
9
|
+
end
|
10
|
+
|
11
|
+
# GET /individuals/new
|
12
|
+
def new
|
13
|
+
@individual = Individual.new
|
14
|
+
@individual.build_address
|
15
|
+
end
|
16
|
+
|
17
|
+
# GET /individuals/1/edit
|
18
|
+
def edit
|
19
|
+
@individual.build_address unless @individual.address
|
20
|
+
end
|
21
|
+
|
22
|
+
# POST /individuals
|
23
|
+
def create
|
24
|
+
@individual = Individual.new(individual_params)
|
25
|
+
|
26
|
+
if @individual.save
|
27
|
+
redirect_to @individual, notice: 'Individual was successfully created.'
|
28
|
+
else
|
29
|
+
render action: 'new'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# PATCH/PUT /individuals/1
|
34
|
+
def update
|
35
|
+
if @individual.update(individual_params)
|
36
|
+
redirect_to @individual, notice: 'Individual was successfully updated.'
|
37
|
+
else
|
38
|
+
render action: 'edit'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# DELETE /individuals/1
|
43
|
+
def destroy
|
44
|
+
@individual.destroy
|
45
|
+
redirect_to people_url, notice: 'Individual was successfully destroyed.'
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
# Use callbacks to share common setup or constraints between actions.
|
50
|
+
def set_individual
|
51
|
+
@individual = Individual.find(params[:id])
|
52
|
+
end
|
53
|
+
|
54
|
+
# Only allow a trusted parameter "white list" through.
|
55
|
+
def individual_params
|
56
|
+
params.require(:individual).permit(:first_name, :last_name, :email, :title,
|
57
|
+
:twitter, :www, :context, :phone, :fax, :mobile,
|
58
|
+
:address_attributes => [:street, :street_bis, :zip, :city, :country])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_dependency "customer_vault/application_controller"
|
2
|
+
|
3
|
+
module CustomerVault
|
4
|
+
class LinksController < ApplicationController
|
5
|
+
before_action :load_linkable, only: [:new, :edit, :create, :update, :destroy]
|
6
|
+
|
7
|
+
def new
|
8
|
+
@link = Link.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def edit
|
12
|
+
@link = Link.find(params[:id])
|
13
|
+
end
|
14
|
+
|
15
|
+
def create
|
16
|
+
params = link_params
|
17
|
+
bob = params[:bob].split("-")
|
18
|
+
|
19
|
+
@link = Link.new(title: params[:title], alice_id: @person.id, alice_type: @person.class.to_s, bob_id: bob[1], bob_type: bob[0])
|
20
|
+
|
21
|
+
if @link.save
|
22
|
+
redirect_to @person, notice: 'Link was successfully created.'
|
23
|
+
else
|
24
|
+
render action: 'new'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def update
|
29
|
+
@link = Link.find(params[:id])
|
30
|
+
if @link.update(link_params)
|
31
|
+
redirect_to @person, notice: 'Link was successfully updated.'
|
32
|
+
else
|
33
|
+
render action: 'edit'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def destroy
|
38
|
+
Link.find(params[:id]).destroy
|
39
|
+
redirect_to @person, notice: 'Individual was successfully destroyed.'
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
private
|
44
|
+
def load_linkable
|
45
|
+
klass = [Individual, Corporation].detect { |c| params["#{c.name.demodulize.underscore}_id"] }
|
46
|
+
@person = klass.find(params["#{klass.name.demodulize.underscore}_id"])
|
47
|
+
end
|
48
|
+
# Only allow a trusted parameter "white list" through.
|
49
|
+
def link_params
|
50
|
+
params.require(:link).permit(:bob, :title)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -2,61 +2,12 @@ require_dependency "customer_vault/application_controller"
|
|
2
2
|
|
3
3
|
module CustomerVault
|
4
4
|
class PeopleController < ApplicationController
|
5
|
-
before_action :
|
5
|
+
before_action :set_individual, only: [:show, :edit, :update, :destroy]
|
6
6
|
|
7
|
-
# GET /
|
7
|
+
# GET /individuals
|
8
8
|
def index
|
9
|
-
@people = Person.
|
9
|
+
@people = Person.list
|
10
|
+
@people= Kaminari.paginate_array(@people).page(params[:page]).per(8)
|
10
11
|
end
|
11
|
-
|
12
|
-
# GET /people/1
|
13
|
-
def show
|
14
|
-
end
|
15
|
-
|
16
|
-
# GET /people/new
|
17
|
-
def new
|
18
|
-
@person = Person.new
|
19
|
-
end
|
20
|
-
|
21
|
-
# GET /people/1/edit
|
22
|
-
def edit
|
23
|
-
end
|
24
|
-
|
25
|
-
# POST /people
|
26
|
-
def create
|
27
|
-
@person = Person.new(person_params)
|
28
|
-
|
29
|
-
if @person.save
|
30
|
-
redirect_to @person, notice: 'Person was successfully created.'
|
31
|
-
else
|
32
|
-
render action: 'new'
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
# PATCH/PUT /people/1
|
37
|
-
def update
|
38
|
-
if @person.update(person_params)
|
39
|
-
redirect_to @person, notice: 'Person was successfully updated.'
|
40
|
-
else
|
41
|
-
render action: 'edit'
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
# DELETE /people/1
|
46
|
-
def destroy
|
47
|
-
@person.destroy
|
48
|
-
redirect_to people_url, notice: 'Person was successfully destroyed.'
|
49
|
-
end
|
50
|
-
|
51
|
-
private
|
52
|
-
# Use callbacks to share common setup or constraints between actions.
|
53
|
-
def set_person
|
54
|
-
@person = Person.find(params[:id])
|
55
|
-
end
|
56
|
-
|
57
|
-
# Only allow a trusted parameter "white list" through.
|
58
|
-
def person_params
|
59
|
-
params.require(:person).permit(:first_name, :last_name, :email, :title, :twitter, :www, :context, :phone, :fax, :mobile)
|
60
|
-
end
|
61
12
|
end
|
62
|
-
end
|
13
|
+
end
|
@@ -1,5 +1,9 @@
|
|
1
1
|
module CustomerVault
|
2
|
-
class Corporation <
|
2
|
+
class Corporation < Person
|
3
|
+
self.table_name = 'customer_vault_corporations'
|
4
|
+
|
3
5
|
validates_presence_of :name
|
6
|
+
has_one :address, class_name: 'Dorsale::Address', as: :addressable
|
7
|
+
accepts_nested_attributes_for :address, allow_destroy: true
|
4
8
|
end
|
5
9
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module CustomerVault
|
2
|
+
class Individual < Person
|
3
|
+
self.table_name = 'customer_vault_individuals'
|
4
|
+
|
5
|
+
def name
|
6
|
+
[self.first_name, self.last_name].join(' ')
|
7
|
+
end
|
8
|
+
|
9
|
+
validates_presence_of :first_name
|
10
|
+
validates_presence_of :last_name
|
11
|
+
|
12
|
+
has_one :address, class_name: 'Dorsale::Address', as: :addressable
|
13
|
+
accepts_nested_attributes_for :address, allow_destroy: true
|
14
|
+
end
|
15
|
+
end
|
@@ -1,6 +1,17 @@
|
|
1
1
|
module CustomerVault
|
2
2
|
class Person < ActiveRecord::Base
|
3
|
-
|
4
|
-
|
3
|
+
self.abstract_class = true
|
4
|
+
|
5
|
+
def self.list
|
6
|
+
individuals = Individual.all
|
7
|
+
corporations = Corporation.all
|
8
|
+
return (individuals + corporations).sort_by(&:created_at)
|
9
|
+
end
|
10
|
+
|
11
|
+
def links
|
12
|
+
a = Link.where(alice_id: self.id, alice_type: self.class).map {|l| {title: l.title, person: l.bob, origin: l}}
|
13
|
+
b = Link.where(bob_id: self.id, bob_type: self.class).map {|l| {title: l.title, person: l.alice, origin: l}}
|
14
|
+
return a + b
|
15
|
+
end
|
5
16
|
end
|
6
17
|
end
|
@@ -1,21 +1,28 @@
|
|
1
|
-
= form_for [customer_vault, @corporation] do |f|
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
1
|
+
= form_for [customer_vault, @corporation], html: { class: "form-horizontal"} do |f|
|
2
|
+
.form-group
|
3
|
+
=f.label "Name" , class:"control-label col-lg-2"
|
4
|
+
div class="col-lg-10"
|
5
|
+
=f.text_field :name, class:"form-control"
|
6
|
+
|
7
|
+
.form-group
|
8
|
+
=f.label "Email", class:"control-label col-lg-2"
|
9
|
+
div class="col-lg-10"
|
10
|
+
=f.text_field :email, class:"form-control"
|
11
|
+
|
12
|
+
.form-group
|
13
|
+
=f.label "Phone", class:"control-label col-lg-2"
|
14
|
+
div class="col-lg-10"
|
15
|
+
=f.text_field :phone, class:"form-control"
|
16
|
+
|
17
|
+
.form-group
|
18
|
+
=f.label "Fax", class:"control-label col-lg-2"
|
19
|
+
div class="col-lg-10"
|
20
|
+
=f.text_field :fax, class:"form-control"
|
21
|
+
|
22
|
+
= f.fields_for :address do |address_form|
|
23
|
+
= render partial: 'dorsale/addresses/nested_form', :locals => {:f => address_form}
|
24
|
+
|
25
|
+
.actions
|
26
|
+
div class= "cdiv mega-top-buffer"
|
27
|
+
= f.submit 'Valider', :class=>"btn btn-success btn-sm", id: 'submit-corporation'
|
28
|
+
= link_to 'Retour', customer_vault.people_path, :class=>"btn btn-primary btn-sm"
|
@@ -0,0 +1,29 @@
|
|
1
|
+
.row.corporation
|
2
|
+
.col-lg-1
|
3
|
+
=image_tag ('customer_vault/icons/group-48.png')
|
4
|
+
=link_to 'Details', [customer_vault, c] , :class=>"btn btn-success btn-xs"
|
5
|
+
.col-lg-11
|
6
|
+
.row.top-buffer
|
7
|
+
.col-lg-12 id='name'
|
8
|
+
span.bold.name #{c.name}
|
9
|
+
- if defined? link
|
10
|
+
= render partial: 'customer_vault/links/title', locals: {link: link, person: person}
|
11
|
+
.row
|
12
|
+
.col-lg-4 id='email'
|
13
|
+
- if c.email?
|
14
|
+
span class= 'bold text-muted' Email:
|
15
|
+
span class = 'text-muted bold' #{c.email}
|
16
|
+
- else
|
17
|
+
span class = 'bold invisible' CACHEE
|
18
|
+
.col-lg-4 id='phone'
|
19
|
+
- if c.phone?
|
20
|
+
span class= 'bold text-muted' Phone:
|
21
|
+
span #{c.phone}
|
22
|
+
- else
|
23
|
+
span class= 'bold invisible' CACHEE
|
24
|
+
.col-lg-4 id='fax'
|
25
|
+
- if c.fax?
|
26
|
+
span class= 'bold text-muted' Fax:
|
27
|
+
span #{c.fax}
|
28
|
+
- else
|
29
|
+
span class= 'bold invisible' CACHEE
|
@@ -0,0 +1,36 @@
|
|
1
|
+
aside.col-lg-12.corporation
|
2
|
+
.row
|
3
|
+
.col-lg-12.cdiv
|
4
|
+
=image_tag ('customer_vault/icons/group-64.png')
|
5
|
+
.col-lg-12.cdiv
|
6
|
+
span class= "text-muted titre bold" #{corporation.name}
|
7
|
+
.row
|
8
|
+
.col-lg-12.top-buffer
|
9
|
+
- if corporation.name?
|
10
|
+
.col-lg-12.cdiv
|
11
|
+
.bold.text-muted.cdiv Name
|
12
|
+
span #{corporation.name?}
|
13
|
+
.col-lg-12.cdiv
|
14
|
+
- if corporation.email?
|
15
|
+
.bold.text-muted.cdiv Email
|
16
|
+
span #{corporation.email}
|
17
|
+
.col-lg-12.cdiv
|
18
|
+
- if corporation.phone?
|
19
|
+
.bold.text-muted.cdiv Phone
|
20
|
+
span #{corporation.phone}
|
21
|
+
.col-lg-12.cdiv
|
22
|
+
- if corporation.fax?
|
23
|
+
.bold.text-muted.cdiv Fax
|
24
|
+
span #{corporation.fax}
|
25
|
+
.col-lg-12.cdiv
|
26
|
+
- if corporation.address && !corporation.address.one_line.blank?
|
27
|
+
.bold.text-muted.cdiv Address
|
28
|
+
span.address #{corporation.address.one_line}
|
29
|
+
|
30
|
+
.row.mega-top-buffer.bottom-buffer
|
31
|
+
.col-lg-4.cdiv
|
32
|
+
=link_to 'Editer', customer_vault.edit_corporation_path(corporation), :class=>"btn btn-success btn-sm"
|
33
|
+
.col-lg-4.cdiv
|
34
|
+
=link_to 'Effacer', [customer_vault, corporation], data: {:confirm => 'Are you sure?'}, :method => :delete, :class=>"btn btn-danger btn-sm"
|
35
|
+
.col-lg-4.cdiv
|
36
|
+
= link_to 'Retour', customer_vault.people_path, :class=>"btn btn-primary btn-sm"
|
@@ -1,8 +1,23 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
= link_to '
|
6
|
-
|
7
|
-
= link_to '
|
1
|
+
.container-fluid
|
2
|
+
.div class = "col-lg-12"
|
3
|
+
ol.breadcrumb
|
4
|
+
li
|
5
|
+
= link_to 'Home', '/'
|
6
|
+
li
|
7
|
+
= link_to 'People', customer_vault.people_path
|
8
|
+
li.active Edit #{@corporation.name}
|
9
|
+
.col-lg-12
|
10
|
+
.col-lg-4
|
11
|
+
aside.col-lg-12
|
12
|
+
.row
|
13
|
+
.col-lg-12.cdiv
|
14
|
+
=image_tag ('customer_vault/icons/group-64.png')
|
15
|
+
.row
|
16
|
+
.col-lg-12.cdiv
|
17
|
+
h3.text-muted Edit {@corporation.name}
|
18
|
+
- if @corporation.errors.any?
|
19
|
+
= render partial: 'customer_vault/layout/form_error', :locals => {:p => @corporation}
|
20
|
+
.col-lg-8
|
21
|
+
.col-lg-12
|
22
|
+
== render 'form'
|
8
23
|
|
@@ -1,5 +1,22 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
= link_to '
|
1
|
+
.container-fluid
|
2
|
+
.col-lg-12
|
3
|
+
ol.breadcrumb
|
4
|
+
li
|
5
|
+
= link_to 'Home', '/'
|
6
|
+
li
|
7
|
+
= link_to 'People', customer_vault.people_path
|
8
|
+
li.active New Corporation
|
9
|
+
.col-lg-12
|
10
|
+
.col-lg-4
|
11
|
+
.aside.col-lg-12
|
12
|
+
.row
|
13
|
+
.col-lg-12.cdiv
|
14
|
+
=image_tag ('customer_vault/icons/group-64.png')
|
15
|
+
.row
|
16
|
+
.col-lg-12.cdiv
|
17
|
+
h3.text-muted New Corporation
|
18
|
+
- if @corporation.errors.any?
|
19
|
+
= render partial: 'customer_vault/layout/form_error', :locals => {:p => @corporation}
|
20
|
+
.col-lg-8
|
21
|
+
.col-lg-12
|
22
|
+
== render 'form'
|
@@ -1,18 +1,43 @@
|
|
1
|
-
|
1
|
+
.container-fluid
|
2
|
+
.col-lg-12
|
3
|
+
ol class="breadcrumb"
|
4
|
+
li
|
5
|
+
= link_to 'Home', '/'
|
6
|
+
li
|
7
|
+
= link_to 'People', customer_vault.people_path
|
8
|
+
li.active #{@corporation.name}
|
9
|
+
.col-lg-12
|
10
|
+
.col-lg-4
|
11
|
+
= render partial: 'show_details', locals: {corporation: @corporation}
|
12
|
+
|
13
|
+
.col-lg-8
|
14
|
+
.col-lg-12
|
15
|
+
ul.nav.nav-tabs role="tablist"
|
16
|
+
li.active
|
17
|
+
a data-toggle="tab" href="#linkable" role="tab" Links
|
18
|
+
li
|
19
|
+
a data-toggle="tab" href="#history" role="tab" History
|
20
|
+
li
|
21
|
+
a data-toggle="tab" href="#todos" role="tab" Todos
|
22
|
+
|
23
|
+
.tab-content
|
24
|
+
#linkable.tab-pane.active
|
25
|
+
ul.linkable
|
26
|
+
- @corporation.links.each do |link|
|
27
|
+
li.person
|
28
|
+
- target = link[:person]
|
29
|
+
- if target.instance_of? CustomerVault::Individual
|
30
|
+
= render partial: 'customer_vault/individuals/list_details', :locals => {:i => target, person: @corporation, link: link[:origin]}
|
31
|
+
- if target.instance_of? CustomerVault::Corporation
|
32
|
+
= render partial: 'customer_vault/corporations/list_details', :locals => {:c => target, person: @corporation, link: link[:origin]}
|
33
|
+
|
34
|
+
= link_to 'New link', customer_vault.new_corporation_link_path(@corporation.id), :class=>"btn btn-success", id: 'new-link'
|
35
|
+
#history.tab-pane
|
36
|
+
p
|
37
|
+
' History is soon to come
|
38
|
+
#todos.tab-pane
|
39
|
+
p
|
40
|
+
' Todos are soon to come
|
41
|
+
|
2
42
|
|
3
|
-
p
|
4
|
-
strong Name:
|
5
|
-
= @corporation.name
|
6
|
-
p
|
7
|
-
strong Email:
|
8
|
-
= @corporation.email
|
9
|
-
p
|
10
|
-
strong Phone:
|
11
|
-
= @corporation.phone
|
12
|
-
p
|
13
|
-
strong Fax:
|
14
|
-
= @corporation.fax
|
15
43
|
|
16
|
-
= link_to 'Edit', customer_vault.edit_corporation_path(@corporation)
|
17
|
-
'|
|
18
|
-
= link_to 'Back', customer_vault.corporations_path
|