mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-18 19:36:48 +00:00
Compare commits
297 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6f95fa8546 | ||
|
|
170b14d0f5 | ||
|
|
a810fc88ac | ||
|
|
24cf3dee74 | ||
|
|
21e4f40616 | ||
|
|
0fa289a443 | ||
|
|
fcb14f32d2 | ||
|
|
f145a7ed65 | ||
|
|
a38e27e504 | ||
|
|
4b353fa27b | ||
|
|
9f086facdb | ||
|
|
2efd905227 | ||
|
|
c5bf228cb9 | ||
|
|
b18163bfaf | ||
|
|
3fa1832e7b | ||
|
|
d5df73c6a2 | ||
|
|
5a24f2c0e2 | ||
|
|
435bc177f8 | ||
|
|
a489aa7ad9 | ||
|
|
88d49148d4 | ||
|
|
33d4f03a99 | ||
|
|
612c8a95b2 | ||
|
|
abdcdea1a2 | ||
|
|
412b431f36 | ||
|
|
25e608d9fb | ||
|
|
bc32a053f7 | ||
|
|
0ea1adfdff | ||
|
|
468e83cef7 | ||
|
|
76acd706ea | ||
|
|
eb2a6f0ef5 | ||
|
|
b10d623f26 | ||
|
|
f86d4a1996 | ||
|
|
d8349bc037 | ||
|
|
39ca0ce3dc | ||
|
|
b0c86f83ee | ||
|
|
b944030994 | ||
|
|
e9cb7f9565 | ||
|
|
f36c881f52 | ||
|
|
e8c5af004f | ||
|
|
b55bced488 | ||
|
|
ebe2d99299 | ||
|
|
515348a8fb | ||
|
|
08d37b955a | ||
|
|
66669e66ab | ||
|
|
99dce6e8d6 | ||
|
|
27b0052e2b | ||
|
|
0b3dfa7278 | ||
|
|
84b607433c | ||
|
|
31823f2dbd | ||
|
|
ca1c116a5d | ||
|
|
d177f3ff73 | ||
|
|
d83ff4ef33 | ||
|
|
fb980981fb | ||
|
|
45e709b2cc | ||
|
|
0393007ba5 | ||
|
|
c38686c820 | ||
|
|
27444c6589 | ||
|
|
531b35bbc6 | ||
|
|
9ee44e9aef | ||
|
|
91434fe12a | ||
|
|
a6f116aa09 | ||
|
|
d02511bf1d | ||
|
|
51d2805de9 | ||
|
|
a1906a71fa | ||
|
|
47592cdbd8 | ||
|
|
d67e614947 | ||
|
|
0a984b9041 | ||
|
|
c62ce57e0f | ||
|
|
a1fc4dec43 | ||
|
|
7255520471 | ||
|
|
9d4b8ae949 | ||
|
|
0938debafc | ||
|
|
a8e1265a58 | ||
|
|
9c4c0f87e3 | ||
|
|
bcc3815f6b | ||
|
|
abf58c0e02 | ||
|
|
d3e639aa03 | ||
|
|
5cf3579b26 | ||
|
|
5df4f1b7fe | ||
|
|
3aedbb6c48 | ||
|
|
8baed4429c | ||
|
|
47b479c6c9 | ||
|
|
42481e9691 | ||
|
|
efae9265c1 | ||
|
|
ff28da345d | ||
|
|
91b386003a | ||
|
|
a3a3832c8d | ||
|
|
500b5ce347 | ||
|
|
b1ba519a73 | ||
|
|
5b82fcaca7 | ||
|
|
3a9c4e0826 | ||
|
|
6a226e4f92 | ||
|
|
086f69ccfb | ||
|
|
e607c9855f | ||
|
|
b9011d9abe | ||
|
|
b7810df346 | ||
|
|
dfb9e5bde5 | ||
|
|
eab2e5de2a | ||
|
|
3be437485a | ||
|
|
d0e013c1a5 | ||
|
|
440044372b | ||
|
|
76739a4746 | ||
|
|
11f1261dd3 | ||
|
|
27896534f0 | ||
|
|
2f83d71931 | ||
|
|
3cc79d0036 | ||
|
|
7b41d4c5d4 | ||
|
|
ec08ab4cc9 | ||
|
|
5c191bcc7f | ||
|
|
19667f31fa | ||
|
|
95f8334370 | ||
|
|
50e26ed96f | ||
|
|
e30021537a | ||
|
|
bd7253bdda | ||
|
|
fbef139fc5 | ||
|
|
3358fb3d73 | ||
|
|
26bca0faf8 | ||
|
|
73ece4075c | ||
|
|
8e280919ac | ||
|
|
e240933b29 | ||
|
|
349b7de11a | ||
|
|
73b8f37d77 | ||
|
|
aa2cefb88c | ||
|
|
ccd03bfa84 | ||
|
|
7f764db4d7 | ||
|
|
082a3cd9ab | ||
|
|
699c9a62a5 | ||
|
|
ef0b0a9a94 | ||
|
|
9782a9d3d6 | ||
|
|
45bcee16ef | ||
|
|
5799f09caf | ||
|
|
38440dd70a | ||
|
|
258573f5a6 | ||
|
|
0cf2df8358 | ||
|
|
8a3bffb37d | ||
|
|
8f27c643f1 | ||
|
|
a8dde3bbb9 | ||
|
|
f5acf36771 | ||
|
|
17a2e37eda | ||
|
|
f6b0863279 | ||
|
|
c4961d2502 | ||
|
|
9bd3909449 | ||
|
|
2f28312f7e | ||
|
|
49d5cb2f05 | ||
|
|
0b030a85ff | ||
|
|
001bf999d0 | ||
|
|
824b00743e | ||
|
|
58fdc48b9f | ||
|
|
7069b30e71 | ||
|
|
680ba379c1 | ||
|
|
912c60f720 | ||
|
|
4c9aa96b17 | ||
|
|
2c74a94e31 | ||
|
|
d810388248 | ||
|
|
bad5d798bf | ||
|
|
2b0f6b7865 | ||
|
|
f3fa5edb9d | ||
|
|
f9b4c07219 | ||
|
|
5e3f1e4a3b | ||
|
|
2c4b8d779c | ||
|
|
04b065e28a | ||
|
|
bf6d0a2beb | ||
|
|
5eb40261a8 | ||
|
|
221e9344fd | ||
|
|
387d25b8f2 | ||
|
|
7e2c979c96 | ||
|
|
7e4d337773 | ||
|
|
356a03ac4e | ||
|
|
f117c0cd24 | ||
|
|
29e49b67cc | ||
|
|
021cca4fca | ||
|
|
ebaaf2a136 | ||
|
|
b64b48f26e | ||
|
|
c310a3bdaa | ||
|
|
46462a1abb | ||
|
|
b941ffabeb | ||
|
|
76c300283b | ||
|
|
3d98ec6eef | ||
|
|
4dd5e51ed5 | ||
|
|
1f42d32151 | ||
|
|
f5a5b93c22 | ||
|
|
15d157abc0 | ||
|
|
8096ca2519 | ||
|
|
2e84a8f626 | ||
|
|
ac6a043f40 | ||
|
|
fe0bb49baf | ||
|
|
20341ecbc1 | ||
|
|
dd6a5ecd0b | ||
|
|
c9d0721acd | ||
|
|
8d1facb7c3 | ||
|
|
0907e2d886 | ||
|
|
d182bb7bf7 | ||
|
|
b320f71771 | ||
|
|
27d1886d53 | ||
|
|
15559b2388 | ||
|
|
ffb915ccc5 | ||
|
|
d9d6b7bee4 | ||
|
|
79a83ee206 | ||
|
|
66a3410087 | ||
|
|
65a5960fcc | ||
|
|
43bac4079f | ||
|
|
43ddac84b0 | ||
|
|
2ca2d53273 | ||
|
|
4e655d7866 | ||
|
|
7282c7174f | ||
|
|
7a719952fc | ||
|
|
2c67066366 | ||
|
|
6b21bbdf74 | ||
|
|
ee2ee5dba7 | ||
|
|
6953449d28 | ||
|
|
bb9b244d18 | ||
|
|
1d0dab5cc6 | ||
|
|
0432fe229b | ||
|
|
66bbaabf79 | ||
|
|
2addb1c472 | ||
|
|
791cc9b301 | ||
|
|
2166fbc8a0 | ||
|
|
9f74e8ff03 | ||
|
|
4795de5ab0 | ||
|
|
039b94aa47 | ||
|
|
9a2e510f2c | ||
|
|
cd34aedbb9 | ||
|
|
e1823212d6 | ||
|
|
898af0a55e | ||
|
|
e6f5811a60 | ||
|
|
70c4b7082d | ||
|
|
74642c3825 | ||
|
|
3e151c40f5 | ||
|
|
57e7bc9504 | ||
|
|
4389389d44 | ||
|
|
ca9da15ba4 | ||
|
|
f2c6ee87d3 | ||
|
|
519aea2d9b | ||
|
|
433cf9dd9b | ||
|
|
7a0c291fc1 | ||
|
|
06a9110e95 | ||
|
|
900a98b4bb | ||
|
|
e50d2a6a37 | ||
|
|
cbb968d87f | ||
|
|
75b250d3fe | ||
|
|
e8e5f7033c | ||
|
|
51e768e722 | ||
|
|
b27a0986b7 | ||
|
|
be042af751 | ||
|
|
93e3d87fcb | ||
|
|
1506b10d8f | ||
|
|
fdbb274667 | ||
|
|
a2f4732547 | ||
|
|
98f434dad3 | ||
|
|
8c2adb2a05 | ||
|
|
15b05de7f2 | ||
|
|
0cf4e01dde | ||
|
|
543368169f | ||
|
|
0d05c7163d | ||
|
|
f5b20b7afc | ||
|
|
e2d88e615b | ||
|
|
8488b8e469 | ||
|
|
7aefa05efd | ||
|
|
abeabd5b1c | ||
|
|
94d50f220f | ||
|
|
9f43146e47 | ||
|
|
f0d3b987d4 | ||
|
|
1d9a3f33e0 | ||
|
|
fc1c3abb9f | ||
|
|
433806aca8 | ||
|
|
34f47cedae | ||
|
|
733b249b12 | ||
|
|
d8933deee0 | ||
|
|
a27a805478 | ||
|
|
38e6575781 | ||
|
|
799c894bd3 | ||
|
|
32daa1745c | ||
|
|
6329db23d7 | ||
|
|
6596e14e5d | ||
|
|
65d13e0490 | ||
|
|
977c508833 | ||
|
|
fd8eecf745 | ||
|
|
64f2d1b34e | ||
|
|
f1e27a3ac3 | ||
|
|
2b0757e96f | ||
|
|
68073d7239 | ||
|
|
095dd28505 | ||
|
|
feff4fd46f | ||
|
|
6f1c90ea25 | ||
|
|
098afacce3 | ||
|
|
8395dbb3e9 | ||
|
|
33fc7e0fc9 | ||
|
|
3ad7165fd6 | ||
|
|
01aa8cb761 | ||
|
|
b68754d634 | ||
|
|
a5680e611e | ||
|
|
15bfe75313 | ||
|
|
9448e1cbe4 | ||
|
|
ef639b9535 | ||
|
|
a379f88add | ||
|
|
a0d6ec988e | ||
|
|
8da98ce19c |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -15,6 +15,7 @@ tmp/
|
||||
.#*
|
||||
*~
|
||||
*.~lock.*
|
||||
tags
|
||||
.emacs.desktop
|
||||
.DS_Store
|
||||
*.sublime-project*
|
||||
@@ -36,5 +37,4 @@ config/initializers/feature_toggle.rb
|
||||
NERD_tree*
|
||||
coverage
|
||||
libpeerconnection.log
|
||||
tags
|
||||
app/assets/javascripts/tags
|
||||
/config/application.yml
|
||||
|
||||
@@ -7,6 +7,7 @@ before_install:
|
||||
before_script:
|
||||
- cp config/database.travis.yml config/database.yml
|
||||
- psql -c 'create database open_food_network_test;' -U postgres
|
||||
- cp config/application.yml.example config/application.yml
|
||||
script:
|
||||
- RAILS_ENV=test bundle exec rake db:migrate --trace
|
||||
- bundle exec rake spec
|
||||
|
||||
7
Gemfile
7
Gemfile
@@ -2,6 +2,7 @@ source 'https://rubygems.org'
|
||||
ruby "1.9.3"
|
||||
|
||||
gem 'rails', '3.2.19'
|
||||
gem 'rails-i18n', '~> 3.0.0'
|
||||
|
||||
gem 'pg'
|
||||
gem 'spree', :github => 'openfoodfoundation/spree', :branch => '1-3-stable'
|
||||
@@ -43,6 +44,8 @@ gem 'spinjs-rails'
|
||||
gem 'rack-ssl', :require => 'rack/ssl'
|
||||
gem 'custom_error_message', :github => 'jeremydurham/custom-err-msg'
|
||||
gem 'angularjs-file-upload-rails', '~> 1.1.0'
|
||||
gem 'roadie-rails', '~> 1.0.3'
|
||||
gem 'figaro'
|
||||
|
||||
gem 'foreigner'
|
||||
gem 'immigrant'
|
||||
@@ -91,7 +94,9 @@ end
|
||||
|
||||
group :test do
|
||||
gem 'webmock'
|
||||
gem 'perftools.rb'
|
||||
|
||||
# See spec/spec_helper.rb for instructions
|
||||
#gem 'perftools.rb'
|
||||
end
|
||||
|
||||
group :development do
|
||||
|
||||
65
Gemfile.lock
65
Gemfile.lock
@@ -23,7 +23,7 @@ GIT
|
||||
|
||||
GIT
|
||||
remote: git://github.com/openfoodfoundation/spree.git
|
||||
revision: bbe5e779bcb883a1726ad4006d7c06b06c3f5372
|
||||
revision: 4e0075b07acb56864aca89eee3d9670136176c23
|
||||
branch: 1-3-stable
|
||||
specs:
|
||||
spree (1.3.6.beta)
|
||||
@@ -50,7 +50,7 @@ GIT
|
||||
json (>= 1.5.5)
|
||||
kaminari (= 0.14.1)
|
||||
money (= 5.1.1)
|
||||
paperclip (~> 2.8)
|
||||
paperclip (~> 3.0)
|
||||
rabl (= 0.7.2)
|
||||
rails (~> 3.2.16)
|
||||
ransack (= 0.7.2)
|
||||
@@ -121,17 +121,17 @@ GEM
|
||||
active_link_to (1.0.0)
|
||||
active_model_serializers (0.8.1)
|
||||
activemodel (>= 3.0)
|
||||
active_utils (2.2.1)
|
||||
active_utils (2.2.3)
|
||||
activesupport (>= 2.3.11)
|
||||
i18n
|
||||
activemerchant (1.43.1)
|
||||
active_utils (~> 2.0, >= 2.0.1)
|
||||
activesupport (>= 2.3.14, < 5.0.0)
|
||||
activemerchant (1.44.1)
|
||||
active_utils (~> 2.2.0)
|
||||
activesupport (>= 3.2.14, < 5.0.0)
|
||||
builder (>= 2.1.2, < 4.0.0)
|
||||
i18n (~> 0.5)
|
||||
i18n (>= 0.6.9)
|
||||
json (~> 1.7)
|
||||
money (< 7.0.0)
|
||||
nokogiri (~> 1.4)
|
||||
offsite_payments (~> 2.0.0)
|
||||
activemodel (3.2.19)
|
||||
activesupport (= 3.2.19)
|
||||
builder (~> 3.0.0)
|
||||
@@ -209,6 +209,8 @@ GEM
|
||||
compass (>= 0.12.2, < 0.14)
|
||||
crack (0.4.1)
|
||||
safe_yaml (~> 0.9.0)
|
||||
css_parser (1.3.5)
|
||||
addressable
|
||||
dalli (2.7.2)
|
||||
database_cleaner (0.7.1)
|
||||
db2fog (0.8.0)
|
||||
@@ -244,6 +246,9 @@ GEM
|
||||
railties (>= 3.0.0)
|
||||
ffaker (1.15.0)
|
||||
ffi (1.9.3)
|
||||
figaro (0.7.0)
|
||||
bundler (~> 1.0)
|
||||
rails (>= 3, < 5)
|
||||
fog (1.14.0)
|
||||
builder
|
||||
excon (~> 0.25.0)
|
||||
@@ -292,7 +297,7 @@ GEM
|
||||
httparty (0.13.1)
|
||||
json (~> 1.8)
|
||||
multi_xml (>= 0.5.2)
|
||||
i18n (0.6.9)
|
||||
i18n (0.6.11)
|
||||
immigrant (0.1.6)
|
||||
activerecord (>= 3.0)
|
||||
foreigner (>= 1.2.1)
|
||||
@@ -323,7 +328,7 @@ GEM
|
||||
treetop (~> 1.4.8)
|
||||
method_source (0.8.1)
|
||||
mime-types (1.25.1)
|
||||
mini_portile (0.6.0)
|
||||
mini_portile (0.6.1)
|
||||
momentjs-rails (2.5.1)
|
||||
railties (>= 3.1)
|
||||
money (5.1.1)
|
||||
@@ -334,21 +339,28 @@ GEM
|
||||
net-ssh (>= 2.6.5)
|
||||
net-ssh (2.6.8)
|
||||
newrelic_rpm (3.6.7.152)
|
||||
nokogiri (1.6.2.1)
|
||||
mini_portile (= 0.6.0)
|
||||
nokogiri (1.6.4.1)
|
||||
mini_portile (~> 0.6.0)
|
||||
offsite_payments (2.0.1)
|
||||
active_utils (~> 2.2.0)
|
||||
activesupport (>= 3.2.14, < 5.0.0)
|
||||
builder (>= 2.1.2, < 4.0.0)
|
||||
i18n (~> 0.5)
|
||||
json (~> 1.7)
|
||||
money (< 7.0.0)
|
||||
nokogiri (~> 1.4)
|
||||
oj (2.1.2)
|
||||
orm_adapter (0.5.0)
|
||||
paperclip (2.8.0)
|
||||
activerecord (>= 2.3.0)
|
||||
activesupport (>= 2.3.2)
|
||||
cocaine (>= 0.0.2)
|
||||
paperclip (3.5.4)
|
||||
activemodel (>= 3.0.0)
|
||||
activesupport (>= 3.0.0)
|
||||
cocaine (~> 0.5.3)
|
||||
mime-types
|
||||
paypal-sdk-core (0.2.10)
|
||||
multi_json (~> 1.0)
|
||||
xml-simple
|
||||
paypal-sdk-merchant (1.106.1)
|
||||
paypal-sdk-core (~> 0.2.3)
|
||||
perftools.rb (2.0.1)
|
||||
pg (0.13.2)
|
||||
poltergeist (1.5.0)
|
||||
capybara (~> 2.1)
|
||||
@@ -385,6 +397,9 @@ GEM
|
||||
activesupport (= 3.2.19)
|
||||
bundler (~> 1.0)
|
||||
railties (= 3.2.19)
|
||||
rails-i18n (3.0.1)
|
||||
i18n (~> 0.5)
|
||||
rails (>= 3.0.0, < 4.0.0)
|
||||
railties (3.2.19)
|
||||
actionpack (= 3.2.19)
|
||||
activesupport (= 3.2.19)
|
||||
@@ -412,6 +427,12 @@ GEM
|
||||
representative_view (1.2.2)
|
||||
actionpack (> 2.3.0, < 4.0.0)
|
||||
representative (~> 1.0.2)
|
||||
roadie (3.0.1)
|
||||
css_parser (~> 1.3.4)
|
||||
nokogiri (~> 1.6.0)
|
||||
roadie-rails (1.0.3)
|
||||
rails (>= 3.0, < 4.2)
|
||||
roadie (~> 3.0)
|
||||
rspec (2.14.1)
|
||||
rspec-core (~> 2.14.0)
|
||||
rspec-expectations (~> 2.14.0)
|
||||
@@ -445,7 +466,7 @@ GEM
|
||||
slop (3.4.5)
|
||||
spinjs-rails (1.3)
|
||||
rails (>= 3.1)
|
||||
sprockets (2.2.2)
|
||||
sprockets (2.2.3)
|
||||
hike (~> 1.2)
|
||||
multi_json (~> 1.0)
|
||||
rack (~> 1.0)
|
||||
@@ -468,7 +489,7 @@ GEM
|
||||
sprockets (>= 2.0.0)
|
||||
turn (0.8.3)
|
||||
ansi
|
||||
tzinfo (0.3.39)
|
||||
tzinfo (0.3.42)
|
||||
uglifier (1.2.4)
|
||||
execjs (>= 0.3.0)
|
||||
multi_json (>= 1.0.2)
|
||||
@@ -479,7 +500,7 @@ GEM
|
||||
unicorn-rails (1.1.0)
|
||||
rack
|
||||
unicorn
|
||||
uuidtools (2.1.4)
|
||||
uuidtools (2.1.5)
|
||||
versioncake (0.4.0)
|
||||
actionpack (>= 3.0)
|
||||
activesupport (>= 3.0)
|
||||
@@ -522,6 +543,7 @@ DEPENDENCIES
|
||||
debugger-linecache
|
||||
deface!
|
||||
factory_girl_rails
|
||||
figaro
|
||||
foreigner
|
||||
foundation-icons-sass-rails
|
||||
foundation-rails
|
||||
@@ -542,7 +564,6 @@ DEPENDENCIES
|
||||
newrelic_rpm
|
||||
oj
|
||||
paperclip
|
||||
perftools.rb
|
||||
pg
|
||||
poltergeist
|
||||
pry-debugger
|
||||
@@ -550,7 +571,9 @@ DEPENDENCIES
|
||||
rack-livereload
|
||||
rack-ssl
|
||||
rails (= 3.2.19)
|
||||
rails-i18n (~> 3.0.0)
|
||||
representative_view
|
||||
roadie-rails (~> 1.0.3)
|
||||
rspec-rails
|
||||
sass (~> 3.2)
|
||||
sass-rails (~> 3.2.3)
|
||||
|
||||
@@ -48,11 +48,20 @@ Install the project's gem dependencies:
|
||||
|
||||
bundle install
|
||||
|
||||
Create the development and test databases, using the settings specified in `config/database.yml`. You can then load the schema and some seed data with the following command:
|
||||
Configure the site:
|
||||
|
||||
cp config/application.yml.example config/application.yml
|
||||
edit config/application.yml
|
||||
|
||||
Create the development and test databases, using the settings specified in `config/database.yml`:
|
||||
|
||||
rake db:setup
|
||||
|
||||
Then load the schema and some seed data with the following command:
|
||||
|
||||
rake db:schema:load db:seed
|
||||
|
||||
Load some default data for your environment
|
||||
Load some default data for your environment:
|
||||
|
||||
rake openfoodnetwork:dev:load_sample_data
|
||||
|
||||
@@ -65,7 +74,7 @@ At long last, your dreams of spinning up a development server can be realised:
|
||||
|
||||
Tests, both unit and integration, are based on RSpec. To run the test suite, first prepare the test database:
|
||||
|
||||
bundle exec rake db:test:load
|
||||
bundle exec rake db:test:prepare
|
||||
|
||||
Then the tests can be run with:
|
||||
|
||||
@@ -86,7 +95,7 @@ usage instructions.
|
||||
* David Cook (http://github.com/dacook)
|
||||
* Will Marshall (http://soundcloud.com/willmarshall)
|
||||
* Laura Summers (https://github.com/summerscope)
|
||||
|
||||
* Maikel Linke (https://github.com/mkllnk)
|
||||
|
||||
## Licence
|
||||
|
||||
|
||||
BIN
app/assets/images/open-food-network-beta.png
Normal file
BIN
app/assets/images/open-food-network-beta.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
840
app/assets/images/open-food-network-beta.svg
Normal file
840
app/assets/images/open-food-network-beta.svg
Normal file
@@ -0,0 +1,840 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="265 892.8 550 134.3" enable-background="new 265 892.8 550 134.3" xml:space="preserve">
|
||||
<g id="Layer_1_1_" display="none">
|
||||
<g display="inline">
|
||||
|
||||
<text transform="matrix(0.9994 3.560383e-02 -3.560383e-02 0.9994 1023.0334 999.8911)" font-family="'LondrinaSketch-Regular'" font-size="32.2299" letter-spacing="1">BETA</text>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#444345" d="M156.5,1047.3v-20.9c0-2.3-2.1-4-4.4-4h-33.4c-2.4,0-4.6,1.6-4.6,4v20.9c0,2.3,2.4,4.2,4.6,4.2h33.4
|
||||
C154.4,1051.4,156.5,1049.6,156.5,1047.3z M118.8,1026.3h33.8v21.3h-33.8V1026.3z"/>
|
||||
<path fill="#444345" d="M197.5,895.5c-8.4,16.7-11.9,18.9-11.9,25.8c0,6.6,5.6,12.2,12.3,12.2c6.6,0,12.3-5.4,12.3-12.2
|
||||
c0-7-3.1-10.9-11.9-25.8C198,895.1,197.7,895.1,197.5,895.5z M194.2,921.1c0,2.2-1.3,3-2.5,3c-1.5,0-2.5-1.1-2.5-2.6
|
||||
c0-4.8,2.4-8,4.4-10.8c0.7-0.9,1.3-1.7,1.7-2.5C195.4,907.9,194.2,917.1,194.2,921.1z"/>
|
||||
<path fill="#444345" d="M92.5,1032.2c-2.5-1.6-7.5-4.6-7.5-4.6s0,0,0,6.3c0,6.3,10.6,8.6,10.6,8.6
|
||||
C95.4,1039.5,95.1,1033.8,92.5,1032.2z"/>
|
||||
<path fill="#444345" d="M92.5,1043.5c-2.5-1.6-7.5-4.6-7.5-4.6s0,0,0,6.3c0,6.3,10.6,8.6,10.6,8.6
|
||||
C95.4,1050.9,95.1,1045.2,92.5,1043.5z"/>
|
||||
<path fill="#444345" d="M95.5,1065.2c-0.2-3-0.4-8.6-2.9-10.3c-2.5-1.6-7.7-4.6-7.7-4.6s0,0,0,6.3
|
||||
C85,1062.9,95.5,1065.2,95.5,1065.2z"/>
|
||||
<path fill="#444345" d="M99.1,1042.5c0,0,11-2.4,11-8.6c0-6.3,0-6.3,0-6.3s-6.2,3-8.7,4.6C98.8,1033.8,99.3,1039.5,99.1,1042.5z
|
||||
"/>
|
||||
<path fill="#444345" d="M99.1,1053.8c0,0,11-2.3,11-8.6c0-6.2,0-6.3,0-6.3s-6.2,3-8.7,4.6C98.8,1045.2,99.3,1050.9,99.1,1053.8z
|
||||
"/>
|
||||
<path fill="#444345" d="M110.1,1056.6c0-6.3,0-6.3,0-6.3s-6.1,2.9-8.6,4.6c-2.5,1.6-2.4,7.3-2.5,10.3
|
||||
C99,1065.2,110.1,1062.9,110.1,1056.6z"/>
|
||||
<path fill="#444345" d="M101.1,1025.9c0-2.9-0.7-6.6-4-10.3c0,0-3.9,4.8-3.9,9.5c0,3.1,1.7,5.7,3.9,8.4
|
||||
C97.1,1033.7,101.1,1029,101.1,1025.9z"/>
|
||||
<path fill="#444345" d="M84.3,851.2c0.8,0,1.5-0.1,2.2-0.4c1.6,1.5,3.7,2.2,5.8,2.2c2.1,0,4.2-0.8,5.8-2.2
|
||||
c0.7,0.3,1.5,0.4,2.2,0.4c3.5,0,6.3-2.8,6.3-6.3s-2.8-6.3-6.3-6.3c-0.3,0-0.6,0-0.9,0.1c-1.6-2.4-4.2-3.7-7.1-3.7
|
||||
c-2.9,0-5.5,1.3-7.1,3.7c-0.3,0-0.6-0.1-0.9-0.1c-3.5,0-6.3,2.8-6.3,6.3C78.2,848.4,81,851.2,84.3,851.2z"/>
|
||||
<path fill="#444345" d="M94,862c0,0.9,0.8,1.7,1.8,1.7c0.9,0,1.7-0.8,1.7-1.7s-1.7-3.6-1.7-3.6S94,860.9,94,862z"/>
|
||||
<path fill="#444345" d="M99.1,858.3c0.9,0,1.8-0.8,1.8-1.7s-1.8-3.6-1.8-3.6s-1.7,2.6-1.7,3.6C97.3,857.5,98.2,858.3,99.1,858.3
|
||||
z"/>
|
||||
<path fill="#444345" d="M92,859.2c0-0.9-1.7-3.6-1.7-3.6s-1.8,2.6-1.8,3.6s0.8,1.7,1.8,1.7C91.2,861,92,860.2,92,859.2z"/>
|
||||
<path fill="#444345" d="M8.8,1010.5c0,6.4,5.2,11.7,11.7,11.7s11.7-5.2,11.7-11.7s-5.2-11.7-11.7-11.7S8.8,1004,8.8,1010.5z
|
||||
M29.1,1010.5c0,4.8-4,8.8-8.7,8.8c-4.8,0-8.8-4-8.8-8.8c0-4.8,4-8.8,8.8-8.8S29.1,1005.7,29.1,1010.5z"/>
|
||||
<polygon fill="#444345" points="16,1014.9 22,1012 24.8,1006.1 19,1009.1 "/>
|
||||
<path fill="#444345" d="M113.9,866.3c0-0.1-0.1-0.2-0.1-0.3L113.9,866.3L113.9,866.3z"/>
|
||||
<path fill="#444345" d="M110.6,876.1c7.1-2,14.4,3.1,15.4,10.5c0,0.3,0.1,0.6,0.1,0.9c0.3,0,0.6,0.1,0.9,0.1
|
||||
c6-0.2,12.1-0.2,18.1-0.5c-2.5,0.7-4.4,3-4.4,5.7c0,3.3,2.7,6,6,6s6-2.7,6-6c0-3-2.2-5.4-5-5.9c4.4-0.3,3.6-0.2,4.4-4.2
|
||||
c0.4-1.9,0.6-3.9,0.8-5.8c0.2-1.8-0.3-2.2-2.1-2.4c-2.7-0.1-5.1-0.2-7.9-0.3c-0.1,0-0.2-0.1-0.2-0.2c0-2,0.5-6.8,0.5-6.8
|
||||
s-0.9-0.8-1.9-0.1c0,2.4,0,4.6,0,7.1c0,0-3.6-0.1-8.2-0.2c-0.2,0-0.9-0.4-1.3-1.1c-0.7-1.9-2.4-5.6-4.4-11.4
|
||||
c0,0-1.1-2.4-3.8-2.4c-2.1,0-13.4,0-13.4,0v14.2c0,0-0.8,0.4-1.5,0.5C108.2,876.1,108.7,876.5,110.6,876.1z M149.8,892.9
|
||||
c0,1.7-1.5,3.1-3.1,3.1c-1.7,0-3.1-1.5-3.1-3.1c0-1.7,1.5-3.1,3.1-3.1C148.4,889.8,149.8,891.1,149.8,892.9z M113.8,866v-2.7h11
|
||||
l3.5,10.5l0.1,0.1c-4.7-0.1-10.1,0-14.6,0.2V866z"/>
|
||||
<path fill="#444345" d="M113.3,877.3c-6,0-10.8,4.8-10.8,10.8c0,6,4.8,10.8,10.8,10.8c5.9,0,10.8-4.8,10.8-10.8
|
||||
C124.1,882.1,119.3,877.3,113.3,877.3z M113.3,894.1c-3.3,0-6-2.7-6-6c0-3.3,2.7-6,6-6s6,2.7,6,6
|
||||
C119.3,891.4,116.6,894.1,113.3,894.1z"/>
|
||||
<path fill="#444345" d="M87.2,1074.3l-7.9-4.2c0.5-1.7,0.5-3.7,0-5.6c-1.6-5.5-7.9-8.9-13.4-7.3c-5.6,1.6-8.8,7.3-7.1,12.8
|
||||
c1.6,5.5,7.9,8.9,13.4,7.3c1.8-0.6,3.5-1.5,4.6-2.8l7.9,4.4c0.8,0.4,1.7,0.1,2.2-0.7l1.1-1.9C88.4,1075.5,88,1074.8,87.2,1074.3
|
||||
z M70.8,1073.2c-3.2,0.9-7-1.1-7.9-4.2c-0.9-3.2,0.9-6.6,4.2-7.5c3.2-0.9,7,1.1,7.9,4.2C75.9,1069,74.1,1072.3,70.8,1073.2z"/>
|
||||
<path fill="#444345" d="M42.4,987.3c6-6.8,2.7-11.7,1.7-13.6c-0.9-1.9-1.3-4.7-1.3-4.7l0.2-0.9l0.2-1.1
|
||||
c-1.3-0.4-2.7,0.3-2.7,0.3c0.3,2.1-0.3,4.4-0.6,5.3c-0.4,0.9-1.6,2.8-2.2,4c-0.6,1.1-2.1,4.7-9.9,8.1
|
||||
c-7.9,3.4-18.3,0.3-18.3,0.3c-2.7-0.7-4.9,0.4-4.9,0.4L4,986.3l0.1,0.8l-0.3,0.5l0.1,0.6c7.7,11.9,23.6,7.9,23.6,7.9
|
||||
S36.4,994,42.4,987.3z"/>
|
||||
<path fill="#444345" d="M215.2,1059.3c3.5-0.1,6.8-0.7,10.1-2c1.1-0.5,1.5-1.3,1.6-2.5c0.1-0.7,0.1-1.3,0.1-1.9
|
||||
c0-0.1,0-0.1,0-0.2c0-0.1-0.3-0.4-0.7-0.4c-1.6-0.1-1.9-0.5-2.4-2c-0.4-1.1-0.7-2.1-1.1-3.1c3.9-0.9,3.4-3.7,2-7.3
|
||||
c-1.1,1.6-0.3,2.1-2.1,2.5c-1.7,0.4-3,1.3-3.8,3c-0.1,0.3-0.3,0.7-0.5,1.1c-0.2-2,0.7-3.2,2.4-4.7c-0.8-0.8-4-0.4-4.8-0.9
|
||||
c-3.1-2.2-17.5-4.8-26.5,2c-0.5-0.5-0.9-0.9-1.5-1.3c2.1-0.9,2.9-2,2.5-3.7c-0.3-1.3-1.3-2-2.4-1.9c-1.9,0.1-2.6,0.9-2.9,4.2
|
||||
c-0.7-0.7-1.1-1.1-1.9-1.9c0,0.6-0.2,1.1-0.1,1.5c0.3,0.9,1.1,1.5,1.9,1.8c0.7,0.1,1.1,0.5,1.3,1.1c0.2,0.4,0.4,0.9,0.8,1.1
|
||||
c0.9,0.9,1.1,2.1,1.1,3.5c0,3,0.1,6,0.5,9c0.4,3.2,1.1,6.3,2.6,9.2c0.5,0.9,1.1,0.9,1.9,0.8c0.3-0.1,0.6-0.8,0.6-1.1
|
||||
c0.2-2.4,1.3-4.4,2.4-6.4c4.2,1.3,8.3,1.5,12.5,1.3c0.2,0,0.6,0.4,0.8,0.7c0.8,1.5,1.5,3.2,2.2,4.8c0.4,0.9,1.3,0.9,2,0.8
|
||||
c0.2-0.1,0.3-0.9,0.3-1.3c0-1.7,0-3.6,0-5.3c0.2-0.1,0.3-0.1,0.3-0.2C214.7,1059.3,215.1,1059.3,215.2,1059.3z M187.2,1039.8
|
||||
c-0.5-1.1-0.2-1.9,0.6-2c0.5-0.1,1.1-0.1,1.1,0.6C189.1,1039.2,188.5,1039.7,187.2,1039.8z"/>
|
||||
<path fill="#444345" d="M33.5,924.2c6.6-0.6,8.9-3.9,10.8-10.3c1.1-3.9,1.3-7.7,1.5-11.8c-0.3-3.3-0.3-6.6-0.7-9.9
|
||||
c-0.7-4.6-1.8-9.3-4-13.4c-1.7-3.3-2.2-5.3-5.9-5.9c-4-0.5-8.4,1-10.1,5.6c-0.5,1.3-1.1,2.4-1.3,3.7c-0.7,2.8-2.4,5-4.4,7
|
||||
c-5.8,5.3-7.7,12.1-6.4,19.6C14.5,918.6,23.5,925.1,33.5,924.2z M21.2,893.3c3.5-3.3,6-6.8,7.1-11.5c0.2-0.9,0.7-1.8,1.1-2.6
|
||||
c1.3-2.3,4.2-2.7,6.1-0.8c0.8,0.9,1.3,1.9,1.7,2.9c2.8,6.6,4,13.7,4,19.9c0,4.7-0.3,8.4-1.5,11.9c-1.7,5-5.3,7.5-10.1,7
|
||||
c-4-0.4-7.3-2.4-9.9-5.5C15.2,908.4,15.4,898.6,21.2,893.3z"/>
|
||||
<path fill="#444345" d="M29.5,917.1c3.2,0.3,5.6-0.7,7.1-3.6c2.8-5.6,3-11.3,1.1-17.2c-0.4-1.3-1.3-2.2-2.5-2.7
|
||||
c-3.5-1.5-7.1-1.5-10.5-0.1c-1.6,0.8-3.2,1.8-3.9,3.6c-0.4,0.9-0.3,1.6,0.7,2.1c1.5,0.8,3,1.5,4.6,2.4c0.5,0.3,0.9,0.7,1.3,0.9
|
||||
c0,0.1-0.1,0.3-0.2,0.4c-0.4-0.1-0.8-0.1-1.1-0.2c-1.7-0.5-3.5-1.1-5.2-1.5c-0.9-0.3-1.5,0.1-1.7,0.9c-0.1,0.4-0.2,0.8-0.2,1.1
|
||||
C17.9,910,22.8,916.4,29.5,917.1z"/>
|
||||
<path fill="#444345" d="M30.6,889c0.9,0.3,1.9,0.5,2.9,0.7c1.9-0.1,2.7-0.6,2.7-2.5c0-1.3-0.3-2.8-0.7-4.2c-0.3-1.1-1.1-2-2.4-2
|
||||
c-1.3-0.1-2.5,0.5-3,1.7c-0.5,1.1-0.9,2.4-1.1,3.8C28.7,887.8,29.1,888.5,30.6,889z"/>
|
||||
<path fill="#444345" d="M56.9,983.4c-0.4,0.1-0.9-0.1-0.9-0.5c0,0-0.5-1.3-2-2.9c-0.4-0.4-0.8-0.7-1.1-0.9
|
||||
c-0.6-0.5-1.3-0.9-1.8-1.6c0.9,8.1,4.4,14,8.3,14c4.7,0,8.6-8.4,8.6-18.9s-4-18.9-8.7-18.9c-3.1,0-5.8,3.7-7.3,9.1
|
||||
c0.6,0.9,1.1,1.3,1.9,1.8c0.4,0.3,0.9,0.7,1.3,1.1c1.9,1.8,2.4,3.5,2.4,3.6s0,0.1,0,0.2c0,0.3-0.2,0.6-0.6,0.7s-0.9-0.1-0.9-0.5
|
||||
c0,0-0.5-1.3-2-2.9c-0.4-0.4-0.8-0.7-1.1-0.9c-0.5-0.3-0.9-0.7-1.3-1.1c-0.2,0.9-0.4,1.8-0.5,2.8c0.7,2.4,1.6,3.1,2.8,4
|
||||
c0.4,0.3,0.9,0.7,1.3,1.1c1.9,1.8,2.4,3.5,2.4,3.6s0,0.1,0,0.2c0,0.3-0.2,0.6-0.6,0.7s-0.9-0.1-0.9-0.5c0,0-0.5-1.3-2-2.9
|
||||
c-0.4-0.4-0.8-0.7-1.1-0.9c-0.7-0.5-1.5-1.1-2-1.9c0,0.6,0,1.1,0,1.7c0.7,3.5,1.7,4.4,3.1,5.3c0.4,0.3,0.9,0.7,1.3,1.1
|
||||
c1.9,1.8,2.4,3.5,2.4,3.6c0,0.1,0,0.1,0,0.2C57.5,983,57.3,983.3,56.9,983.4z"/>
|
||||
<path fill="#444345" d="M196.9,877c1.6,1.8,3.6,3.6,6,3.8c1.7,0.3,3.9-0.9,5.2-0.9c2.8,0,2.2,0.7,5.2,0.7c2.9,0,8.5-7,9.9-14.2
|
||||
c0.3-1.8,0-4.9-1.3-7.9c-1.6-3.5-6.4-4.8-9.5-4.2c-0.8,0.1-2.5,0.5-3.9,0.7c0.3-0.9,0.9-2.6,2.6-3.5c0.5-0.3,0.7-0.9,0.4-1.3
|
||||
c-0.3-0.5-0.9-0.7-1.3-0.4c-2.7,1.5-3.6,4.2-3.8,5.4c-1.3-0.3-4.4-0.8-5.8-0.8c-1.7,0.1-3.4,0.6-4.9,1.7c-1.3,1.1-2,2.5-2.6,4
|
||||
c-0.8,2.2-1.1,4.4-0.8,6.8C192.8,870.8,194.4,874.1,196.9,877z M202.8,858.9c1.5,0,2.7,1.1,2.7,2.5c0,1.8-1.3,3.3-2.8,3.3
|
||||
c-1.1,0-2.1-1.5-2.1-3.2C200.8,860,201.5,858.9,202.8,858.9z"/>
|
||||
<path fill="#444345" d="M204.7,852.3c1.1,0.1,2.4,0.2,2.9-0.9c0.6-1.1-0.3-2.2-1.1-3.1c-1.8-1.9-4.6-2.3-7.7-0.9
|
||||
c0.4,0.7,0.8,1.3,1.1,1.8C200.9,851,202.6,852,204.7,852.3z"/>
|
||||
<path fill="#444345" d="M133.7,858.3c1.9-4,4.6-7.1,4.6-7.1c4,1.5,10.8,3.2,15.6-0.2c6.4-4.6,5.8-14.6,15-19.5
|
||||
c2.1-1.1-18.1-5.9-28.7,0.2c-7.9,4.5-7.3,12-7.1,14.6c10.1-12,25.2-11.4,25.2-11.4s-21.4,7.4-27.7,22.2
|
||||
C130.2,858.1,133.1,859.6,133.7,858.3z"/>
|
||||
<path fill="#444345" d="M212,1007c4.8-9.9-0.6-17-2.7-19.6c-2.1,18.9-17.9,28.5-17.9,28.5s16.7-21.8,13.2-41
|
||||
c-0.3-1.5-4.2-1.1-3.9,0.7c0.8,5.4,0.2,10.3,0.2,10.3c-5,1.1-13,4-15.8,10.7c-3.5,8.9,4,18.7-2,29.9
|
||||
C181.8,1029.2,205.5,1020.4,212,1007z"/>
|
||||
<path fill="#444345" d="M37.2,932.9c-2,1.5-1.6,5.4-0.1,7.5c1.5,1.9,5.3,3.4,7.3,1.8c0.4-0.3,1.6-1.1,1.6-1.1
|
||||
c2.2,1.7,3.6,0,4.6,1.3c1.1,1.5,3.8,4.7,4.6,5.8c0.9,1.1,2.4,1.9,3.2,1.3c0.8-0.6,3.5-2.5,4.6-3.3c1.1-0.8,1.1-1.8,0.5-2.6
|
||||
c-0.6-0.8-2.2-0.6-3-1.5c-0.8-0.9-3.1-3.8-3.8-4.7c-0.9-1.3-0.1-2.7,1.6-3.4c11.8-4.6,16,2.3,19.7-0.5
|
||||
c2.8-2.1-0.3-11.2-6.6-19.3s-14.6-13.4-17.4-11.1C49.5,906.8,61,914.9,37.2,932.9z M57.2,907.8c0.7-0.5,6.4,2.8,11.5,9.1
|
||||
c4.9,6.3,6.3,12.1,5.6,12.6c-0.7,0.5-6.4-2-11.4-8.3C57.9,914.9,56.6,908.3,57.2,907.8z"/>
|
||||
<path fill="#444345" d="M15,980.9c8.2,0,15-3.9,15-5.9c0,0,0-0.6,0-6.2c0-5.7-10.3-10.3-10.3-14.4c0-4,10.3-8.7,10.3-14.4
|
||||
c0-5.7,0-6.2,0-6.2c0-2.1-6.8-5.9-15-5.9s-15,3.8-15,5.8c0,0,0,0.6,0,6.2c0,5.7,10.3,10.3,10.3,14.4c0,4-10.3,8.7-10.3,14.4
|
||||
c0,5.7,0,6.2,0,6.2C0,977.1,6.8,980.9,15,980.9z M3.5,934.1c1.8-1.1,5.3-2.9,10.9-2.9s10.6,2.9,10.6,2.9
|
||||
c0.4,0.2,1.8,1.1,0.9,1.6c-2.2,1.3-6.6,2.7-11.6,2.7s-9.3-1.5-11.5-2.8C1.8,935,3.5,934.1,3.5,934.1z M2.9,968.8
|
||||
c0-1.7,2.7-4.4,4.7-6.4c2.8-2.7,5.4-4.7,5.4-7.9c0-3.2-2.7-5.2-5.5-7.9c-2-2-4.8-4.7-4.8-6.4l-0.1-2.6c2.7,1.5,7.1,2.9,11.7,2.9
|
||||
c4.7,0,9.1-1.3,11.8-2.9l-0.1,2.6c0,1.7-2.8,4.4-4.8,6.4c-2.8,2.7-5.4,4.7-5.4,7.9c0,3.2,2.2,5.2,5,7.9c2,2,4.4,4.7,4.4,6.4v3.5
|
||||
c-1.9-1.3-9.5-2-9.5-5.9c0-1.9-2.7-1.9-2.7,0c0,3.9-8.1,4.6-10.1,5.9v-3.5H2.9z"/>
|
||||
<path fill="#444345" d="M210.9,900.8c0,11,8.9,19.9,19.9,19.9c11,0,19.9-8.9,19.9-19.9c0-10.9-8.9-19.9-19.9-19.9
|
||||
C219.8,880.9,210.9,889.8,210.9,900.8z M236.2,884.7c6.7,2.2,11.5,8.6,11.5,16c0,3.9-1.3,7.5-3.5,10.3c-0.6-0.5-1.3-1.8-0.7-3.2
|
||||
c0.6-1.3,0.8-4.6,0.7-5.8c-0.1-1.3-0.8-4.2-2.5-4.2c-1.7,0-2.9-0.6-4-2.7c-2.1-4.2,4-5.1,1.8-7.5c-0.6-0.7-3.7,2.7-4.2-1.8
|
||||
C235.5,885.7,235.8,885.1,236.2,884.7z M240.2,914.9c-2.7,1.7-5.9,2.8-9.4,2.8c-1.8,0-3.7-0.3-5.3-0.9c0.9-0.6,1.1-1.3,2-1.3
|
||||
c1.1,0,1.9-0.4,3.1-0.7c1.1-0.2,3-1.3,4.6-1.5C236.7,913.3,239.4,913.5,240.2,914.9z M228.4,884c-0.4,0.8-1.5,1.1-2.1,1.7
|
||||
c-1.5,1.3-2,1.1-2.8,2.3c-0.8,1.3-3.3,3-3.3,3.9s1.3,1.9,1.8,1.7c0.7-0.2,2.4-0.2,3.3,0.2c0.9,0.4,8.1,0.7,5.8,6.8
|
||||
c-0.7,1.9-3.9,1.5-4.7,4.7c-0.1,0.5-0.6,2.4-0.6,3.1c-0.1,0.9,0.7,4.8-0.3,4.8s-3.6-3.4-3.6-4c0-0.6-0.7-2.8-0.7-4.6
|
||||
s-3.2-1.8-3.2-4.2c0-2.2,1.7-3.3,1.3-4.4c-0.4-1.1-3.4-1.1-4.6-1.3C217.1,889,222.2,884.9,228.4,884z"/>
|
||||
<path fill="#444345" d="M135.7,1029.6c-4,0-7.3,3.3-7.3,7.3s3.3,7.3,7.3,7.3c4,0,7.3-3.3,7.3-7.3
|
||||
C142.9,1032.9,139.7,1029.6,135.7,1029.6z M132.5,1040c0-0.2-0.3-0.9-0.3-1.6c0-0.7-1.1-0.7-1.1-1.5c0-0.8,0.7-1.3,0.5-1.6
|
||||
c-0.1-0.4-1.3-0.4-1.6-0.5c0.8-2,2.7-3.6,4.9-4c-0.2,0.3-0.6,0.4-0.8,0.6c-0.5,0.5-0.8,0.4-1.1,0.9s-1.1,1.1-1.1,1.5
|
||||
c0,0.3,0.5,0.7,0.7,0.7c0.2-0.1,0.9-0.1,1.1,0.1c0.4,0.1,3,0.3,2.1,2.4c-0.3,0.7-1.5,0.6-1.7,1.7c-0.1,0.2-0.2,0.9-0.2,1.1
|
||||
c0,0.4,0.3,1.7-0.1,1.7C133.5,1041.4,132.5,1040.2,132.5,1040z M135.7,1043.1c-0.7,0-1.3-0.1-1.9-0.3c0.4-0.2,0.4-0.5,0.8-0.5
|
||||
s0.7-0.2,1.1-0.3c0.4-0.1,1.1-0.5,1.6-0.5c0.5,0,1.5,0,1.8,0.5C138.1,1042.7,137,1043.1,135.7,1043.1z M140.7,1040.6
|
||||
c-0.2-0.2-0.5-0.7-0.2-1.1c0.2-0.5,0.3-1.6,0.2-2.1c-0.1-0.5-0.3-1.5-0.9-1.5s-1.1-0.2-1.5-0.9c-0.8-1.5,1.5-1.8,0.7-2.7
|
||||
c-0.2-0.3-1.3,0.9-1.5-0.7c0-0.1,0.1-0.3,0.3-0.5c2.4,0.9,4.2,3.2,4.2,5.9C141.9,1038.4,141.4,1039.6,140.7,1040.6z"/>
|
||||
<path fill="#444345" d="M44.9,1061.1c0,0.3,0,0.5,0,0.8c0.1,1.7,1.5,3.2,3.4,3.2c1.7,0,3.2-1.3,3.4-3c0.1-0.3,0.1-0.6,0.1-0.9
|
||||
c0-0.9,0.4-1.3,1.1-1.5c6.4-1.5,11.4-6.6,12.4-13c0.1-0.8,0.1-1.5,0.4-2.1c0.6-0.5,1.5-0.9,1.7-1.5c0.2-0.5-0.4-1.3-0.6-2.1
|
||||
c1.1-1.1,1.1-1.6-0.2-2.9c1.3-1.3,1.3-1.9-0.1-3.2c0.9-0.4,1.3-1.1,0.9-2c-0.3-0.6-1.1-0.9-1.6-1.3c-0.1,0.1-0.1,0.2-0.2,0.2
|
||||
c-0.1-0.6-0.1-1.1-0.4-1.5c-0.4-0.5-0.9-1.1-1.5-1.1c-0.3-0.1-0.9,0.6-1.1,0.9c-0.7,1.3-1.1,2.8-1.7,4.2s-1.3,2.7-2.2,3.9
|
||||
c-2.7,3.4-6.3,4.4-10.4,3.6c-4-0.9-6.8-3.3-7.9-7.3c-0.2-0.8-0.2-1.5-0.4-2.3c0.9-0.6,2.1-0.9,1.6-2.2c-0.2-0.7-1.1-1.1-2-1.7
|
||||
c0-0.5,0.2-1.5-0.9-1.9c-0.9-0.4-1.6,0.2-2.2,1.1c-0.7-0.8-1.3-1.6-2.4-1.1c-0.6,0.4-0.9,1.3-1.5,2.2c-0.7,0-1.8-0.1-2,1.3
|
||||
c-0.1,0.9,0.6,1.5,2.4,2c-1.1,1.3-3,1.3-4.2,2.4c1.1,0.6,2,1.1,3.1,1.7c0.6,0.3,0.8,0.7,0.7,1.3c-0.2,2.1-0.3,4.4-0.5,6.4
|
||||
c-0.8,9.2,5.5,14.3,11.5,15.9C44.7,1059.8,45,1060,44.9,1061.1z M35.7,1034.1c-0.3,0-0.7-0.4-1.3-0.8c0.7-0.4,0.9-0.9,1.3-0.9
|
||||
c0.3,0,0.9,0.6,0.8,0.8C36.3,1033.6,35.9,1034.1,35.7,1034.1z"/>
|
||||
<path fill="#444345" d="M211.6,940.4h-6.4c-1.1,0-2.7,0.7-3.4,1.6l-8.5,10.9c-0.7,0.9-0.3,0.9,0.9,0.9h34.6c1.1,0,1.6,0,0.9-0.9
|
||||
l-7.4-11c-0.7-0.9-2.1-1.5-3.3-1.5h-1.6v-3.9h-5.8V940.4z"/>
|
||||
<path fill="#444345" d="M219.2,930.1l0.5-0.1c1.1-0.2,2-1.1,2.7-2.2c0.7-1.1,0.8-3.6,0.6-4.9c-0.7,2-2.1,2.7-3.7,3.4
|
||||
c-0.4,0.2-0.9,0.4-1.3,0.5c-0.5,0.2-0.9,0.4-1.5,0.6c-1.5,0.8-2.1,2-2.4,4c-0.2,0.8-0.3,1.6-0.3,2.8c0.8-2,1.6-3,3.3-3.6
|
||||
C217.8,930.5,218.5,930.3,219.2,930.1z"/>
|
||||
<path fill="#444345" d="M227,969.3h0.9v-11.9c0-1.1,0-1.6,0-1.6H227h-1.3h-15h-1.3h-11h-4v2.2v11.3h4h2.7v-8
|
||||
c0,0,0.2,0.3,1.1,0.3h5.2c0,0,0.5-1.1,0.5-0.2v7.9h1.5h1.3h15L227,969.3L227,969.3z M222.2,965.5c0,0.2,0.7,0.9,0.5,0.9h-5.7
|
||||
c-0.2,0-0.6-0.8-0.6-0.9v-5.7c0-0.2,0.4-0.1,0.6-0.1h5.7c0.2,0-0.5-0.1-0.5,0.1V965.5z"/>
|
||||
<path fill="#444345" d="M143.1,1056.3c0-0.6-0.5-0.9-1.1-0.9h-13.4c-0.6,0-1.1,0.4-1.1,0.9c0,0.6,0.5,0.9,1.1,0.9h13.4
|
||||
C142.7,1057.3,143.1,1056.9,143.1,1056.3z"/>
|
||||
<rect x="131.4" y="1052.5" fill="#444345" width="9.7" height="2.9"/>
|
||||
<path fill="#444345" d="M117.8,828.2c-4.6,0.8-7.9,4.6-8.2,9.1l8.7-0.5L117.8,828.2z"/>
|
||||
<path fill="#444345" d="M119.7,839.3l-9.9,0.5c0.9,4.8,5.2,8.4,10.3,8.1c5.5-0.3,9.7-4.9,9.4-10.4c-0.3-5-4.2-9-9.1-9.4l0.5,9.9
|
||||
C120.9,838.7,120.3,839.2,119.7,839.3z"/>
|
||||
<path fill="#444345" d="M78.2,866c0.4,0,0.9-0.6,1.3-0.7s0.9-0.6,1.1-0.8l5.5-3.9c0.3-0.2,0.5-0.6,0.5-0.9
|
||||
c0-0.3-0.2-0.6-0.5-0.8l-5.5-3.8c-0.3-0.2-0.8-0.9-1.1-1.1c-0.5-0.1-0.9-0.7-1.3-0.7H62.5l1.8,12.6H78.2L78.2,866z"/>
|
||||
<path fill="#444345" d="M41,865.1l5.5,3.8c0.3,0.2,0.8,0.5,1.1,0.7c0.5,0.1,0.9,0.4,1.3,0.4h8.1V890c0,0.5,0.6,0.2,1.1,0.2h2
|
||||
c0.5,0,0.7,0.3,0.7-0.2v-39.7c0-0.5-0.2-1.6-0.7-1.6h-2c-0.5,0-1.1,1.1-1.1,1.6v9h-8c-0.4,0-0.9,0-1.3,0.1s-0.9,0.3-1.1,0.5
|
||||
l-5.5,3.8c-0.3,0.2-0.5,0.5-0.5,0.8C40.6,864.7,40.8,864.9,41,865.1z"/>
|
||||
<path fill="#444345" d="M72.4,874.2v31.6c0,2.2,2.4,4.6,4.6,4.6h15.4c2.2,0,4.2-2.4,4.2-4.6v-31.6c0-2.2-2-3.4-4.2-3.4H77
|
||||
C74.8,870.8,72.4,872,72.4,874.2z M84.7,908.2c-1.5,0-2.8-0.9-2.8-2s1.3-2,2.8-2s2.8,0.9,2.8,2
|
||||
C87.5,907.2,86.3,908.2,84.7,908.2z M93.7,875.7v26.1H76.3v-26.1H93.7z"/>
|
||||
<path fill="#444345" d="M162,850.1c0,13.2,13.8,30.4,13.8,30.4s13.8-17.2,13.8-30.4c0-7.7-6.2-13.8-13.8-13.8
|
||||
C168.2,836.1,162,842.3,162,850.1z M175.8,842.7c4.2,0,7.5,3.4,7.5,7.5c0,4.2-3.4,7.5-7.5,7.5c-4.2,0-7.5-3.4-7.5-7.5
|
||||
C168.3,846.1,171.8,842.7,175.8,842.7z"/>
|
||||
<path fill="#444345" d="M88.9,887.4c0-2.4-1.8-4.2-4.2-4.2s-4.2,1.8-4.2,4.2c0,4,4.2,9.1,4.2,9.1S88.9,891.4,88.9,887.4z
|
||||
M82.4,887.6c0-1.3,0.9-2.2,2.2-2.2c1.3,0,2.2,0.9,2.2,2.2c0,1.3-0.9,2.2-2.2,2.2C83.5,889.8,82.4,888.8,82.4,887.6z"/>
|
||||
<path fill="#444345" d="M177.1,885.5l-2.4,2.1l-2.4-2.1c-3.4-3.1-9-3.1-12.4,0c-3.9,3.6-3.9,9.3,0,12.8l14.7,13.5l14.7-13.5
|
||||
c3.9-3.6,3.9-9.3,0-12.8C186.1,882.4,180.4,882.4,177.1,885.5z"/>
|
||||
<path fill="#444345" d="M237.1,987.3l-3.3,2.8c-0.3,0.2-0.3,0.7-0.1,0.9l18.9,21.4c0.4,0.5,1.1,0.6,1.7,0.1l2.2-1.8
|
||||
c0.5-0.5,0.6-1.3,0.1-1.7l-18.7-21.6C237.8,986.9,237.4,986.9,237.1,987.3z"/>
|
||||
<path fill="#444345" d="M236.1,973.1c-2.9,0.3-6.6,3-8.4,4.2c-2.4,1.6-3.3,2.6-3.5,2.7c-0.7,0.6-0.1,1.9-1.3,3.1
|
||||
c-1.3,1.1-2.1,0.3-2.9,0.9c-0.4,0.3-1.5,1.1-1.7,1.3c-0.3,0.3-0.4,0.7-0.1,1.1c0,0,2.9,3.2,3.1,3.5c0.2,0.3,0.9,0.5,1.3,0.2
|
||||
c0.4-0.4,1.5-1.3,1.6-1.5c0.2-0.2-0.1-1.9,0.8-2.7c2.1-1.6,3.9-0.5,6.2,2.2c0.3,0.3,0.7-0.1,0.9-0.2c0.2-0.2,3.3-3,3.5-3.1
|
||||
c0.2-0.1,0.3-0.4,0.1-0.7c-0.2-0.3-1.1-1.5-1.6-2.1c-4.2-5.4,11.2-9,8.9-9.1C241.6,973,236.7,973,236.1,973.1z"/>
|
||||
<path fill="#444345" d="M224.1,1010.9l2.1,2.1c0.5,0.5,1.3,0.3,1.7-0.2l11.1-10.9l-3.4-3.9l-11.6,11.2
|
||||
C223.7,1009.6,223.7,1010.4,224.1,1010.9z"/>
|
||||
<path fill="#444345" d="M247.9,985.9c-0.2,0.3-0.4,0.6-0.7,0.9l-3.1,3.2l3.1,3.6l3.8-3.6c0.2-0.2,0.6-0.5,0.9-0.7
|
||||
c0.1,0,0.1,0,0.2-0.1c0.3-0.1,0.6,0,0.9,0.2c0.7,0.5,1.3,0.9,1.9,1.5c0.5,0.4,0.9,0.4,1.3-0.1c0.6-0.7,1.1-1.3,1.7-1.9
|
||||
c0.9-1.1,1.9-2.1,2.9-3.2c1.6-1.7,2.4-3.7,2.4-5.8c0-0.8,0-1.5-0.2-2.4c-0.3-2-1.3-3-3.3-3.3c-0.5-0.1-1.1-0.2-1.5-0.1
|
||||
c-0.6,0-1.3,0-1.8,0.1c-1.5,0.1-3,0.5-4.2,1.6c-0.9,0.9-1.9,1.8-2.9,2.7c-1.1,1.1-2.2,2-3.3,3.1c-0.3,0.3-0.4,0.6,0,0.9
|
||||
c0.7,0.7,1.3,1.5,1.9,2.1c0.3,0.3,0.4,0.5,0.2,0.9C248,985.6,247.9,985.6,247.9,985.9z M250.3,985.4l4.7-4.4
|
||||
c0.1-0.1,0.4-0.1,0.5,0c0.1,0.1,0.1,0.3,0,0.5l-4.2,5c-0.1,0.1-0.2-0.7-0.3,0.3l0,0c-0.1,0-0.2-0.2-0.2-0.2l-0.6-0.6
|
||||
c-0.1-0.1-0.1-0.2-0.1-0.3C250.2,985.6,250.3,985.4,250.3,985.4z"/>
|
||||
<path fill="#444345" d="M237.6,934c0,0.8-0.1,1.5,0.6,1.5h10.1v2.5c0,0.6-0.4,0.4,0.2,0.4h4c0.6,0,0.7,0.2,0.7-0.4v-2.5h9.5
|
||||
c0.8,0,1.1-0.9,1.1-1.5v-5.2h-26.1L237.6,934L237.6,934z"/>
|
||||
<path fill="#444345" d="M251.2,948.8V947c0-0.3-0.2-0.6-0.5-0.6s-0.5,0.3-0.5,0.6v1.7c-2.9,0.3-4.8,2.5-4.8,5.1
|
||||
c0,2.9,2.2,5.2,5.1,5.2c2.9,0,5.2-2.4,5.2-5.2C255.7,951.3,254.1,949.1,251.2,948.8z"/>
|
||||
<path fill="#444345" d="M261.5,939.4h-22c-1.1,0-2,1.1-2.2,2.2l-2.6,22.8c-0.1,0.6,0.1,1.5,0.6,2c0.4,0.5,1.1,0.9,1.6,0.9h27.3
|
||||
c0.7,0,1.3-0.5,1.6-0.9c0.4-0.5,0.6-1.1,0.6-1.8l-2.6-23C263.5,940.6,262.5,939.4,261.5,939.4z M250.4,963c-5,0-9.1-4-9.1-9.1
|
||||
s4-9.1,9.1-9.1c5,0,9.1,4,9.1,9.1S255.4,963,250.4,963z"/>
|
||||
<path fill="#444345" d="M155,1069.4v0.4h11.3c0.6,0,1.1-0.9,1.1-1.5c0-0.6-0.5-1.5-1.1-1.5H155h-1.3h-2.4c-3,0-5.4,1.9-6.2,4.8
|
||||
h-7.9v2.9h7.9c0.8,2.9,3.2,5.8,6.2,5.8h2.4l0,0h12.6c0.6,0,1.1-0.9,1.1-1.5s-0.5-1.5-1.1-1.5H155c-0.4,0-0.7-0.1-0.7-0.5
|
||||
c0-0.4,0.3-0.5,0.7-0.5h11.3c0.6,0,1.1-0.4,1.1-0.9c0-0.6-0.5-0.9-1.1-0.9H155l0,0c-0.4,0-0.7-0.6-0.7-0.9
|
||||
c0-0.4,0.3-0.9,0.7-0.9h11.3c0.6,0,1.1-0.4,1.1-0.9c0-0.6-0.5-0.9-1.1-0.9h-10.7v-0.4c-0.9,0-0.9-0.1-0.9-0.5
|
||||
C154.6,1069.5,154.6,1069.4,155,1069.4z"/>
|
||||
<path fill="#444345" d="M105.5,1076.6h27.3c1.3,0,3.3-0.7,3.3-1.6v-3.3c0-0.9-2.1-1.8-3.3-1.8h-27.3c-1.8,0-3.3,1.5-3.3,3.4
|
||||
C102.4,1075,103.9,1076.6,105.5,1076.6z"/>
|
||||
<path fill="#444345" d="M165.8,1086.7c0-1.8-1.5-3.4-3.4-3.4h-28.2c-1.3,0-1.9,0.6-2.9,1.6v3.4c0.9,0.9,1.6,1.7,2.9,1.7h28.2
|
||||
C164.3,1090.1,165.8,1088.6,165.8,1086.7z"/>
|
||||
<path fill="#444345" d="M131.4,1088.2v-2.9h-4h-5.8H96.6c0,0-2.5,1.1,1.3,2.8c5.7,2.4,10.3,2.8,14.7,3.4
|
||||
c1.5,0.2,6.6,1.3,9.9-1.5c1.1-1.1,2.4-1.8,3.4-1.8H131.4z"/>
|
||||
<path fill="#444345" d="M169.3,1059.4l8.2-0.8c-0.1-0.9-0.3-1.8-0.3-2.7c-0.1-2.3-0.2-4.6-0.3-7c-0.1-1.7,0-3.5,0-5.2
|
||||
c0.1-2,0.2-4.2,0.3-6.2c0.1-1.6,0.2-3.4,0.4-5c0.2-2,0.5-4,0.8-6c0.2-1.5,0.5-3.2,0.7-4.7c0.1-0.5-0.2-0.9-0.7-0.9
|
||||
c-0.3-0.1-0.6-0.1-0.9-0.1c-4.2,0-8.5,0-12.4,0c0,0,0,0,0,0.1c-0.9,0-1.9,0-2.9,0c-0.6,0-0.7,0-0.7,0.6
|
||||
c-0.1,0.8-0.2,1.5-0.2,2.2c0,1.5,0,3.1,0.1,4.6c0,1.5,0.1,3.1,0.2,4.6c0.1,1.5,0.2,3.1,0.3,4.6c0.1,1.5,0.2,2.8,0.3,4.2
|
||||
c0.1,1.9,0.3,3.9,0.5,5.8c0.1,1.6,0.3,3.2,0.4,4.8c0.2,1.5,0.3,3.2,0.5,4.8c0.1,0.8,0.2,1.5,0.3,2.2c0,0.2,0.1,0.4,0.4,0.4
|
||||
c0.5,0,0.9-0.1,1.5-0.1c0.8-0.1,1.6-0.1,2.4-0.2C168.6,1059.5,168.9,1059.4,169.3,1059.4z M174.8,1023.7c0.7,0,1.1,0.4,1.1,1.1
|
||||
c0,0.6-0.5,1.1-1.1,1.1c-0.6,0-1.1-0.5-1.1-1.1C173.7,1024.1,174.2,1023.7,174.8,1023.7z"/>
|
||||
<path fill="#444345" d="M175.7,1082.3c-0.5,1.5,0.9,3.3,2.6,3.3c1.3,0,2.5-0.9,2.9-2.4c0.3-1.3,0.3-2.5,0.1-3.8
|
||||
c-0.5-2.6-1.1-5.2-1.5-7.7c-0.4-2-0.9-4-1.3-6.1c-0.3-1.5-0.6-3.1-0.7-4.6v-0.1l-5.2,0.5c0.2,0.9,0.4,2,0.6,3
|
||||
c0.6,3.2,1.1,6.3,1.8,9.4c0.5,1.9,0.9,4,1.3,5.9c0.1,0.4,0,0.9-0.1,1.3C176,1081.3,175.8,1081.8,175.7,1082.3z"/>
|
||||
<path fill="#444345" d="M85.5,1019.1c1.3,0.1,2.6-0.1,4-0.2c0.1,0,0.1-0.1,0.1-0.2c0.6-1.1-0.1-2.9-1.3-3.4c0-1.1,0.2-2.4,0-3.6
|
||||
c-0.2-1.5-0.2-3.5-1.1-4.6c-2-2.9-5-6.3-7.5-8.9c-1.7-1.9-3.6-2.2-6.2-2.2c-10.1-0.1-20.1-0.2-30.1-0.3c-3.2,0-4.4,1.3-4.4,4.4
|
||||
c-0.1,4.9-0.1,9.9-0.2,15c-1.1-0.1-1.3,0.5-1.3,1.3c0,0.4,0,0.8,0,1.3c0,0.7,0.3,1.1,0.9,1.1c0.9,0,1.7,0,2.7,0
|
||||
c0.9,0.1,1.3-0.3,1.5-1.1c0.9-2.8,3.1-4.4,6-4.4c2.9,0,5.1,1.6,6,4.6c0.3,0.9,0.8,1.1,1.6,1.1c4.8,0,9.7,0.1,14.6,0.2
|
||||
c0.9,0,1.5-0.4,1.7-1.3c0.9-2.7,3.2-4.4,6-4.4c2.8,0,4.9,1.6,5.9,4.4C84.6,1018.3,85.1,1019.1,85.5,1019.1z M82.8,1007
|
||||
L82.8,1007l-9.5,0.4c-0.7,0-1.3-0.4-1.3-1.1l0.1-6.8c0-0.7,0.6-1.3,1.3-1.3l3,0.1c0.1,0,0.3,0,0.4,0.1c0.4,0.1,0.6,0.2,6.8,7.3
|
||||
c0.2,0.2,0.4,0.1,0.4,0.5C84.1,1006.9,83.5,1007,82.8,1007z"/>
|
||||
<path fill="#444345" d="M48.8,1014.1c-3,0-5.5,2.4-5.5,5.4s2.4,5.5,5.4,5.5s5.5-2.4,5.5-5.4
|
||||
C54.2,1016.6,51.8,1014.2,48.8,1014.1z"/>
|
||||
<path fill="#444345" d="M78.6,1014.5c-3,0-5.5,2.4-5.5,5.4c0,3,2.4,5.5,5.4,5.5s5.5-2.4,5.5-5.4
|
||||
C84.1,1017,81.6,1014.5,78.6,1014.5z"/>
|
||||
<path fill="#444345" d="M247.8,1026.3c0-0.9-2.4-1.7-10.3-0.7c0,0,1.9-1.6,2.7-1.9c0.8-0.3,4.2-2.4,3.6-5.1
|
||||
c-0.6-2.7-1.6-1.1-2.9,1.1c-1.1,2.1-2.7,4-4.9,5.3c0,0-0.7-4.2-3.1-4.4c-0.8,0-4,0-7.7,0.4l-0.7,0.1c-0.4,0-0.9,0.1-1.3,0.2
|
||||
c0,0.1-0.2,0.1-0.2,0.2v4.6c0,0.4-0.1,0.7-0.5,0.7s-0.5-0.3-0.5-0.7v-4.6l0,0c-0.9,0.1-1.3,0.2-1.8,0.3c0,0-7.1,1.1-11.8,2.5
|
||||
h-0.1c-0.1,0-0.2,0.1-0.3,0.1c-0.3,0.1-0.6,0.2-0.9,0.3c-0.2,0.1-0.4,0.1-0.6,0.2c-0.1,0-0.1,0.1-0.2,0.1
|
||||
c-0.1,0-0.2,0.1-0.3,0.1l0,0c-0.9,0.4-1.6,0.6-2.4,1.1c0,0-0.8,0.4-0.3,1.5c0.3,0.7,4.2,2.4,12,3.6v-3.5c0-0.4,0.1-0.7,0.5-0.7
|
||||
s0.5,0.3,0.5,0.7v3.7c0.9,0.1,1.3,0.1,1.7,0.2l0.9,0.1c2.6,0.3,5.1,0.5,9.9,0.6v-2.9c0-0.4,0.1-0.7,0.5-0.7s0.5,0.3,0.5,0.7v2.9
|
||||
h0.8c1.1,0,1.6,0,2.6-0.1c0,0,2.5,0.2,2.7-4.4c0,0,4.4-0.8,4,4.2c-0.2,3.7,3,3.8,3,1.1c0-2.5-0.7-5.4-5.5-6.4c0,0,3.9,0.5,7,1.1
|
||||
C247.5,1028.4,247.8,1027.3,247.8,1026.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<polygon fill="#444345" points="678.1,1020.6 677.4,1020.6 650.5,985.8 642.4,985.8 642.4,1038 654,1038 654,1003.2
|
||||
653.4,1003.2 680.4,1038 687.7,1038 687.7,987.7 678.1,987.7 "/>
|
||||
<polygon fill="#444345" points="706.1,1038 731.3,1038 731.3,1028.3 714.8,1028.3 714.8,1015.7 731.3,1015.7 731.3,1007
|
||||
714.8,1007 714.8,994.4 731.3,994.4 731.3,987.7 706.1,987.7 "/>
|
||||
<polygon fill="#444345" points="744.8,994.4 755.4,994.4 755.4,1038 764.1,1038 764.1,994.4 776.6,994.4 776.6,987.7
|
||||
744.8,987.7 "/>
|
||||
<polygon fill="#444345" points="832.4,1022.5 832.3,1022.5 821.6,985.8 815.8,985.8 805.5,1022.5 805.5,1022.5 795.1,987.7
|
||||
784.6,987.7 800.9,1038 808.2,1038 817.9,1007 818.1,1007 828.2,1038 835.6,1038 853,987.7 842.4,987.7 "/>
|
||||
<path fill="#444345" d="M888.7,985.4c-15.2,0-25.3,11.7-25.3,26.9c0,15,9.7,27.1,25.3,27.1c15.6,0,25.3-12,25.3-27.1
|
||||
C914.1,997.1,904,985.4,888.7,985.4z M888.7,1029.6c-11.1,0-15-9.7-15-17.6c0-8.3,5.6-16.6,15-16.6c9.5,0,15,8.4,15,16.6
|
||||
C903.7,1019.8,899.8,1029.6,888.7,1029.6z"/>
|
||||
<path fill="#444345" d="M959.8,1002.7c0-10.9-7.1-15-17.1-15h-14.4v50.2h11.6v-20.3h-0.7l12.5,20.3h12.1l-14.5-21.4
|
||||
C956.3,1015.5,959.8,1009.1,959.8,1002.7z M940.4,1010.9h-0.5v-16.5h0.6c5.3,0,9.3,1.7,9.3,8
|
||||
C949.9,1008.7,945.9,1010.9,940.4,1010.9z"/>
|
||||
<polygon fill="#444345" points="1015.5,987.7 1003.2,987.7 987.4,1008 987.2,1008 987.2,987.7 976.6,987.7 976.6,1038
|
||||
987.2,1038 987.2,1013.8 987.4,1013.8 1003.7,1038 1016.6,1038 996.1,1010.9 "/>
|
||||
<path fill="#444345" d="M360.6,873.3c-25,0-41.6,19.1-41.6,44c0,24.7,15.9,44.3,41.6,44.3c25.6,0,41.6-19.6,41.6-44.3
|
||||
C402.1,892.4,385.6,873.3,360.6,873.3z M360.6,945.5c-18.1,0-24.6-15.9-24.6-28.8c0-13.6,9.2-27.3,24.6-27.3
|
||||
s24.6,13.7,24.6,27.3C385.2,929.6,378.8,945.5,360.6,945.5z"/>
|
||||
<path fill="#444345" d="M443.5,876.6h-22.4v83.1h15.4v-31.9h9.3c17.2,0,26.9-8,26.9-25.8C472.6,883,461.1,876.6,443.5,876.6z
|
||||
M441,915.3h-4.4v-26.1h4c9.2,0,15.4,1.9,15.4,12.8C456,912.9,450.7,915.3,441,915.3z"/>
|
||||
<polygon fill="#444345" points="491.7,959.7 535.1,959.7 535.1,945.2 508.1,945.2 508.1,923 533.3,923 533.3,908.5 508.1,908.5
|
||||
508.1,889.2 535.1,889.2 535.1,876.6 491.7,876.6 "/>
|
||||
<polygon fill="#444345" points="612.4,932.7 612.7,932.7 568.6,872.8 556.4,872.8 556.4,959.7 573.8,959.7 573.8,901.7
|
||||
573.3,901.7 617.6,961.6 629.8,961.6 629.8,876.6 612.4,876.6 "/>
|
||||
<polygon fill="#444345" points="695.5,959.7 711.9,959.7 711.9,923 736.1,923 736.1,908.5 711.9,908.5 711.9,889.2 738,889.2
|
||||
738,876.6 695.5,876.6 "/>
|
||||
<path fill="#444345" d="M795.8,961.6c25.6,0,41.6-19.6,41.6-44.3c0-24.9-16.5-44-41.6-44s-41.6,19.1-41.6,44
|
||||
C754.4,942,770.3,961.6,795.8,961.6z M795.8,889.4c15.4,0,24.6,13.7,24.6,27.3c0,13-6.4,28.8-24.6,28.8
|
||||
c-18.1,0-24.6-15.9-24.6-28.8C771.3,903.1,780.4,889.4,795.8,889.4z"/>
|
||||
<path fill="#444345" d="M894.1,873.3c-25,0-41.6,19.1-41.6,44c0,24.7,15.9,44.3,41.6,44.3c25.6,0,41.6-19.6,41.6-44.3
|
||||
C935.6,892.4,919.3,873.3,894.1,873.3z M894.1,945.5c-18.1,0-24.6-15.9-24.6-28.8c0-13.6,9.2-27.3,24.6-27.3
|
||||
c15.4,0,24.6,13.7,24.6,27.3C918.7,929.6,912.3,945.5,894.1,945.5z"/>
|
||||
<path fill="#444345" d="M1018.7,918.2c0-24-16.2-41.6-40.6-41.6h-21.8v83.1h21.8C1002,959.7,1018.7,941.8,1018.7,918.2z
|
||||
M971.8,945.2v-56.1h2.1c18.5,0,27.9,9.7,27.9,28c0,16.6-7.9,28-27.9,28L971.8,945.2L971.8,945.2z"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<path d="M1039.4,1045.1h-1.2c-0.1-0.4-0.2-0.6-0.3-0.7l-0.5-0.5l-0.2-0.3l-0.1-0.3c-0.1,0-0.2-0.1-0.3-0.3h-0.1l-0.3-0.5
|
||||
l-0.3-0.3l-0.3-0.3c-0.6-0.5-1.3-1.1-2.1-2c-0.7-0.9-1.1-1.3-1.1-1.3l-0.3-0.3h-0.7l0.1-0.1l-0.3,0.3l0.1-0.1
|
||||
c-0.1,0.1-0.3,0.3-0.5,0.5l-1.3,1.3v-0.1l-1.3,1.3l-0.9,0.9l0,0c-1.2,1.2-1.9,1.9-2.2,2.1v0.1c0,0.1-0.1,0.3-0.5,0.7l-0.6-0.3
|
||||
l-0.4-0.1c0-0.3-0.1-0.4-0.1-0.5l-0.2-0.1c-0.1-0.3-0.3-0.5-0.4-0.5l-1.7-1.7c0,0,0.1,0.1,0.1,0.1s0,0.1,0,0.1s-0.1,0.1-0.3,0.1
|
||||
l0.1-1.1l0.9-0.9c0.3-0.2,0.7-0.5,1.1-0.9l0.7-0.7c0.2-0.1,0.4-0.3,0.7-0.7l1.7-1.7v0.1l0.1-0.1h-0.1c0.8-0.7,1.2-1.1,1.3-1.1
|
||||
l1.7-1.7c0.4-0.4,0.9-0.9,1.5-1.3l0.5-0.7l0.5-0.5l0.5,0.2c0.1,0.1,0.2,0.1,0.2,0.1l1,0.9c0.2,0.1,0.5,0.4,0.8,0.8
|
||||
c0.3,0.3,0.5,0.6,0.6,0.7l0.7,0.7v0.1l5.8,6c0.3,0.3,0.5,0.5,0.7,0.7c0.2,0.2,0.5,0.4,0.7,0.7l-0.3,0.5l-0.5,0.5h0.1
|
||||
c-0.4,0.1-0.6,0.3-0.7,0.7l-1.1,1.1c-0.1,0.1-0.3,0.3-0.3,0.3L1039.4,1045.1L1039.4,1045.1
|
||||
C1039.4,1044.9,1039.4,1044.9,1039.4,1045.1z M1021.5,1041l-0.3,0.3v0.3h0.1c0.1,0,0.1,0.1,0.2,0.1l0.7,0.7
|
||||
c0.1,0.1,0.3,0.3,0.7,0.6c0.7,0.6,0.9,0.9,0.9,1.1l0.1,0.3l0.1-0.1c0.1,0.1,0.1,0.1,0.2,0.3l0.1-0.1v0.1l0.1-0.1h-0.1l0.1-0.1
|
||||
c0,0-0.1,0-0.1-0.1c0-0.1,0-0.1-0.1-0.1l1.1-1.1l0.1,0.1l2.2-2.1l0.1,0.1l2.7-2.7l0.1,0.1c0.3-0.2,0.7-0.6,1.1-1.1h0.1l0.1-0.1
|
||||
c1.3,1.4,2.6,2.8,3.8,4c0.5,0.4,0.8,0.7,0.9,0.9l0.7,0.6l0.1,0.1c0.3,0.3,0.5,0.6,0.8,0.8l0.5,0.5l-0.1,0.1
|
||||
c0.1,0.1,0.1,0.1,0.1,0.3v0.1h0.3l0.9-0.9c0.8-0.9,1.5-1.5,1.9-1.7c0-0.1,0.1-0.2,0.3-0.3l-0.1-0.1l-0.1,0.1c0,0,0-0.1-0.1-0.1
|
||||
s-0.1,0-0.1,0.1l-1.1-1.1l0.1-0.1l-0.3-0.3c0,0-0.1,0-0.1-0.1l0.1-0.1l-1.9-1.9c-0.5-0.5-0.9-1-1.5-1.5c-0.5-0.5-0.9-0.9-1.1-1.2
|
||||
l-0.7-0.7h0.1l-1.1-1.1c-0.1-0.1-0.3-0.3-0.5-0.5l-1.7-1.6c-0.1,0-0.1,0-0.1,0.1c-0.1-0.1-0.1-0.1-0.3-0.1l-0.2,0.1h0.1l-2.1,1.9
|
||||
h0.1l-1.9,1.9c-0.4,0.3-0.8,0.7-1.3,1.1l-1.5,1.4l-0.2,0.1l-1.1,1.1l-0.3,0.3c-0.3,0.2-0.5,0.5-0.7,0.7s-0.5,0.5-0.9,0.9
|
||||
L1021.5,1041z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="OFN_beta__x28_new_x29_" display="none">
|
||||
<g display="inline">
|
||||
|
||||
<text transform="matrix(0.9994 3.560383e-02 -3.560383e-02 0.9994 1024.377 998.5481)" fill="#444345" font-family="'BubblegumSans-Regular'" font-size="26.8582">BETA</text>
|
||||
|
||||
<text transform="matrix(3.560383e-02 -0.9994 0.9994 3.560383e-02 1038.5093 1045.8531)" fill="#444345" font-family="'BubblegumSans-Regular'" font-size="29.5441">></text>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#444345" d="M156.5,1047.3v-20.9c0-2.3-2.1-4-4.4-4h-33.4c-2.4,0-4.6,1.6-4.6,4v20.9c0,2.3,2.4,4.2,4.6,4.2h33.4
|
||||
C154.4,1051.4,156.5,1049.6,156.5,1047.3z M118.8,1026.3h33.8v21.3h-33.8V1026.3z"/>
|
||||
<path fill="#444345" d="M197.5,895.5c-8.4,16.7-11.9,18.9-11.9,25.8c0,6.6,5.6,12.2,12.3,12.2c6.6,0,12.3-5.4,12.3-12.2
|
||||
c0-7-3.1-10.9-11.9-25.8C198,895.1,197.7,895.1,197.5,895.5z M194.2,921.1c0,2.2-1.3,3-2.5,3c-1.5,0-2.5-1.1-2.5-2.6
|
||||
c0-4.8,2.4-8,4.4-10.8c0.7-0.9,1.3-1.7,1.7-2.5C195.4,907.9,194.2,917.1,194.2,921.1z"/>
|
||||
<path fill="#444345" d="M92.5,1032.2c-2.5-1.6-7.5-4.6-7.5-4.6s0,0,0,6.3c0,6.3,10.6,8.6,10.6,8.6
|
||||
C95.4,1039.5,95.1,1033.8,92.5,1032.2z"/>
|
||||
<path fill="#444345" d="M92.5,1043.5c-2.5-1.6-7.5-4.6-7.5-4.6s0,0,0,6.3c0,6.3,10.6,8.6,10.6,8.6
|
||||
C95.4,1050.9,95.1,1045.2,92.5,1043.5z"/>
|
||||
<path fill="#444345" d="M95.5,1065.2c-0.2-3-0.4-8.6-2.9-10.3c-2.5-1.6-7.7-4.6-7.7-4.6s0,0,0,6.3
|
||||
C85,1062.9,95.5,1065.2,95.5,1065.2z"/>
|
||||
<path fill="#444345" d="M99.1,1042.5c0,0,11-2.4,11-8.6c0-6.3,0-6.3,0-6.3s-6.2,3-8.7,4.6C98.8,1033.8,99.3,1039.5,99.1,1042.5z
|
||||
"/>
|
||||
<path fill="#444345" d="M99.1,1053.8c0,0,11-2.3,11-8.6c0-6.2,0-6.3,0-6.3s-6.2,3-8.7,4.6C98.8,1045.2,99.3,1050.9,99.1,1053.8z
|
||||
"/>
|
||||
<path fill="#444345" d="M110.1,1056.6c0-6.3,0-6.3,0-6.3s-6.1,2.9-8.6,4.6c-2.5,1.6-2.4,7.3-2.5,10.3
|
||||
C99,1065.2,110.1,1062.9,110.1,1056.6z"/>
|
||||
<path fill="#444345" d="M101.1,1025.9c0-2.9-0.7-6.6-4-10.3c0,0-3.9,4.8-3.9,9.5c0,3.1,1.7,5.7,3.9,8.4
|
||||
C97.1,1033.7,101.1,1029,101.1,1025.9z"/>
|
||||
<path fill="#444345" d="M84.3,851.2c0.8,0,1.5-0.1,2.2-0.4c1.6,1.5,3.7,2.2,5.8,2.2c2.1,0,4.2-0.8,5.8-2.2
|
||||
c0.7,0.3,1.5,0.4,2.2,0.4c3.5,0,6.3-2.8,6.3-6.3s-2.8-6.3-6.3-6.3c-0.3,0-0.6,0-0.9,0.1c-1.6-2.4-4.2-3.7-7.1-3.7
|
||||
c-2.9,0-5.5,1.3-7.1,3.7c-0.3,0-0.6-0.1-0.9-0.1c-3.5,0-6.3,2.8-6.3,6.3C78.2,848.4,81,851.2,84.3,851.2z"/>
|
||||
<path fill="#444345" d="M94,862c0,0.9,0.8,1.7,1.8,1.7c0.9,0,1.7-0.8,1.7-1.7s-1.7-3.6-1.7-3.6S94,860.9,94,862z"/>
|
||||
<path fill="#444345" d="M99.1,858.3c0.9,0,1.8-0.8,1.8-1.7s-1.8-3.6-1.8-3.6s-1.7,2.6-1.7,3.6C97.3,857.5,98.2,858.3,99.1,858.3
|
||||
z"/>
|
||||
<path fill="#444345" d="M92,859.2c0-0.9-1.7-3.6-1.7-3.6s-1.8,2.6-1.8,3.6s0.8,1.7,1.8,1.7C91.2,861,92,860.2,92,859.2z"/>
|
||||
<path fill="#444345" d="M8.8,1010.5c0,6.4,5.2,11.7,11.7,11.7s11.7-5.2,11.7-11.7s-5.2-11.7-11.7-11.7S8.8,1004,8.8,1010.5z
|
||||
M29.1,1010.5c0,4.8-4,8.8-8.7,8.8c-4.8,0-8.8-4-8.8-8.8c0-4.8,4-8.8,8.8-8.8S29.1,1005.7,29.1,1010.5z"/>
|
||||
<polygon fill="#444345" points="16,1014.9 22,1012 24.8,1006.1 19,1009.1 "/>
|
||||
<path fill="#444345" d="M113.9,866.3c0-0.1-0.1-0.2-0.1-0.3L113.9,866.3L113.9,866.3z"/>
|
||||
<path fill="#444345" d="M110.6,876.1c7.1-2,14.4,3.1,15.4,10.5c0,0.3,0.1,0.6,0.1,0.9c0.3,0,0.6,0.1,0.9,0.1
|
||||
c6-0.2,12.1-0.2,18.1-0.5c-2.5,0.7-4.4,3-4.4,5.7c0,3.3,2.7,6,6,6s6-2.7,6-6c0-3-2.2-5.4-5-5.9c4.4-0.3,3.6-0.2,4.4-4.2
|
||||
c0.4-1.9,0.6-3.9,0.8-5.8c0.2-1.8-0.3-2.2-2.1-2.4c-2.7-0.1-5.1-0.2-7.9-0.3c-0.1,0-0.2-0.1-0.2-0.2c0-2,0.5-6.8,0.5-6.8
|
||||
s-0.9-0.8-1.9-0.1c0,2.4,0,4.6,0,7.1c0,0-3.6-0.1-8.2-0.2c-0.2,0-0.9-0.4-1.3-1.1c-0.7-1.9-2.4-5.6-4.4-11.4
|
||||
c0,0-1.1-2.4-3.8-2.4c-2.1,0-13.4,0-13.4,0v14.2c0,0-0.8,0.4-1.5,0.5C108.2,876.1,108.7,876.5,110.6,876.1z M149.8,892.9
|
||||
c0,1.7-1.5,3.1-3.1,3.1c-1.7,0-3.1-1.5-3.1-3.1c0-1.7,1.5-3.1,3.1-3.1C148.4,889.8,149.8,891.1,149.8,892.9z M113.8,866v-2.7h11
|
||||
l3.5,10.5l0.1,0.1c-4.7-0.1-10.1,0-14.6,0.2V866z"/>
|
||||
<path fill="#444345" d="M113.3,877.3c-6,0-10.8,4.8-10.8,10.8c0,6,4.8,10.8,10.8,10.8c5.9,0,10.8-4.8,10.8-10.8
|
||||
C124.1,882.1,119.3,877.3,113.3,877.3z M113.3,894.1c-3.3,0-6-2.7-6-6c0-3.3,2.7-6,6-6s6,2.7,6,6
|
||||
C119.3,891.4,116.6,894.1,113.3,894.1z"/>
|
||||
<path fill="#444345" d="M87.2,1074.3l-7.9-4.2c0.5-1.7,0.5-3.7,0-5.6c-1.6-5.5-7.9-8.9-13.4-7.3c-5.6,1.6-8.8,7.3-7.1,12.8
|
||||
c1.6,5.5,7.9,8.9,13.4,7.3c1.8-0.6,3.5-1.5,4.6-2.8l7.9,4.4c0.8,0.4,1.7,0.1,2.2-0.7l1.1-1.9C88.4,1075.5,88,1074.8,87.2,1074.3
|
||||
z M70.8,1073.2c-3.2,0.9-7-1.1-7.9-4.2c-0.9-3.2,0.9-6.6,4.2-7.5c3.2-0.9,7,1.1,7.9,4.2C75.9,1069,74.1,1072.3,70.8,1073.2z"/>
|
||||
<path fill="#444345" d="M42.4,987.3c6-6.8,2.7-11.7,1.7-13.6c-0.9-1.9-1.3-4.7-1.3-4.7l0.2-0.9l0.2-1.1
|
||||
c-1.3-0.4-2.7,0.3-2.7,0.3c0.3,2.1-0.3,4.4-0.6,5.3c-0.4,0.9-1.6,2.8-2.2,4c-0.6,1.1-2.1,4.7-9.9,8.1
|
||||
c-7.9,3.4-18.3,0.3-18.3,0.3c-2.7-0.7-4.9,0.4-4.9,0.4L4,986.3l0.1,0.8l-0.3,0.5l0.1,0.6c7.7,11.9,23.6,7.9,23.6,7.9
|
||||
S36.4,994,42.4,987.3z"/>
|
||||
<path fill="#444345" d="M215.2,1059.3c3.5-0.1,6.8-0.7,10.1-2c1.1-0.5,1.5-1.3,1.6-2.5c0.1-0.7,0.1-1.3,0.1-1.9
|
||||
c0-0.1,0-0.1,0-0.2c0-0.1-0.3-0.4-0.7-0.4c-1.6-0.1-1.9-0.5-2.4-2c-0.4-1.1-0.7-2.1-1.1-3.1c3.9-0.9,3.4-3.7,2-7.3
|
||||
c-1.1,1.6-0.3,2.1-2.1,2.5c-1.7,0.4-3,1.3-3.8,3c-0.1,0.3-0.3,0.7-0.5,1.1c-0.2-2,0.7-3.2,2.4-4.7c-0.8-0.8-4-0.4-4.8-0.9
|
||||
c-3.1-2.2-17.5-4.8-26.5,2c-0.5-0.5-0.9-0.9-1.5-1.3c2.1-0.9,2.9-2,2.5-3.7c-0.3-1.3-1.3-2-2.4-1.9c-1.9,0.1-2.6,0.9-2.9,4.2
|
||||
c-0.7-0.7-1.1-1.1-1.9-1.9c0,0.6-0.2,1.1-0.1,1.5c0.3,0.9,1.1,1.5,1.9,1.8c0.7,0.1,1.1,0.5,1.3,1.1c0.2,0.4,0.4,0.9,0.8,1.1
|
||||
c0.9,0.9,1.1,2.1,1.1,3.5c0,3,0.1,6,0.5,9c0.4,3.2,1.1,6.3,2.6,9.2c0.5,0.9,1.1,0.9,1.9,0.8c0.3-0.1,0.6-0.8,0.6-1.1
|
||||
c0.2-2.4,1.3-4.4,2.4-6.4c4.2,1.3,8.3,1.5,12.5,1.3c0.2,0,0.6,0.4,0.8,0.7c0.8,1.5,1.5,3.2,2.2,4.8c0.4,0.9,1.3,0.9,2,0.8
|
||||
c0.2-0.1,0.3-0.9,0.3-1.3c0-1.7,0-3.6,0-5.3c0.2-0.1,0.3-0.1,0.3-0.2C214.7,1059.3,215.1,1059.3,215.2,1059.3z M187.2,1039.8
|
||||
c-0.5-1.1-0.2-1.9,0.6-2c0.5-0.1,1.1-0.1,1.1,0.6C189.1,1039.2,188.5,1039.7,187.2,1039.8z"/>
|
||||
<path fill="#444345" d="M33.5,924.2c6.6-0.6,8.9-3.9,10.8-10.3c1.1-3.9,1.3-7.7,1.5-11.8c-0.3-3.3-0.3-6.6-0.7-9.9
|
||||
c-0.7-4.6-1.8-9.3-4-13.4c-1.7-3.3-2.2-5.3-5.9-5.9c-4-0.5-8.4,1-10.1,5.6c-0.5,1.3-1.1,2.4-1.3,3.7c-0.7,2.8-2.4,5-4.4,7
|
||||
c-5.8,5.3-7.7,12.1-6.4,19.6C14.5,918.6,23.5,925.1,33.5,924.2z M21.2,893.3c3.5-3.3,6-6.8,7.1-11.5c0.2-0.9,0.7-1.8,1.1-2.6
|
||||
c1.3-2.3,4.2-2.7,6.1-0.8c0.8,0.9,1.3,1.9,1.7,2.9c2.8,6.6,4,13.7,4,19.9c0,4.7-0.3,8.4-1.5,11.9c-1.7,5-5.3,7.5-10.1,7
|
||||
c-4-0.4-7.3-2.4-9.9-5.5C15.2,908.4,15.4,898.6,21.2,893.3z"/>
|
||||
<path fill="#444345" d="M29.5,917.1c3.2,0.3,5.6-0.7,7.1-3.6c2.8-5.6,3-11.3,1.1-17.2c-0.4-1.3-1.3-2.2-2.5-2.7
|
||||
c-3.5-1.5-7.1-1.5-10.5-0.1c-1.6,0.8-3.2,1.8-3.9,3.6c-0.4,0.9-0.3,1.6,0.7,2.1c1.5,0.8,3,1.5,4.6,2.4c0.5,0.3,0.9,0.7,1.3,0.9
|
||||
c0,0.1-0.1,0.3-0.2,0.4c-0.4-0.1-0.8-0.1-1.1-0.2c-1.7-0.5-3.5-1.1-5.2-1.5c-0.9-0.3-1.5,0.1-1.7,0.9c-0.1,0.4-0.2,0.8-0.2,1.1
|
||||
C17.9,910,22.8,916.4,29.5,917.1z"/>
|
||||
<path fill="#444345" d="M30.6,889c0.9,0.3,1.9,0.5,2.9,0.7c1.9-0.1,2.7-0.6,2.7-2.5c0-1.3-0.3-2.8-0.7-4.2c-0.3-1.1-1.1-2-2.4-2
|
||||
c-1.3-0.1-2.5,0.5-3,1.7c-0.5,1.1-0.9,2.4-1.1,3.8C28.7,887.8,29.1,888.5,30.6,889z"/>
|
||||
<path fill="#444345" d="M56.9,983.4c-0.4,0.1-0.9-0.1-0.9-0.5c0,0-0.5-1.3-2-2.9c-0.4-0.4-0.8-0.7-1.1-0.9
|
||||
c-0.6-0.5-1.3-0.9-1.8-1.6c0.9,8.1,4.4,14,8.3,14c4.7,0,8.6-8.4,8.6-18.9s-4-18.9-8.7-18.9c-3.1,0-5.8,3.7-7.3,9.1
|
||||
c0.6,0.9,1.1,1.3,1.9,1.8c0.4,0.3,0.9,0.7,1.3,1.1c1.9,1.8,2.4,3.5,2.4,3.6s0,0.1,0,0.2c0,0.3-0.2,0.6-0.6,0.7s-0.9-0.1-0.9-0.5
|
||||
c0,0-0.5-1.3-2-2.9c-0.4-0.4-0.8-0.7-1.1-0.9c-0.5-0.3-0.9-0.7-1.3-1.1c-0.2,0.9-0.4,1.8-0.5,2.8c0.7,2.4,1.6,3.1,2.8,4
|
||||
c0.4,0.3,0.9,0.7,1.3,1.1c1.9,1.8,2.4,3.5,2.4,3.6s0,0.1,0,0.2c0,0.3-0.2,0.6-0.6,0.7s-0.9-0.1-0.9-0.5c0,0-0.5-1.3-2-2.9
|
||||
c-0.4-0.4-0.8-0.7-1.1-0.9c-0.7-0.5-1.5-1.1-2-1.9c0,0.6,0,1.1,0,1.7c0.7,3.5,1.7,4.4,3.1,5.3c0.4,0.3,0.9,0.7,1.3,1.1
|
||||
c1.9,1.8,2.4,3.5,2.4,3.6c0,0.1,0,0.1,0,0.2C57.5,983,57.3,983.3,56.9,983.4z"/>
|
||||
<path fill="#444345" d="M196.9,877c1.6,1.8,3.6,3.6,6,3.8c1.7,0.3,3.9-0.9,5.2-0.9c2.8,0,2.2,0.7,5.2,0.7c2.9,0,8.5-7,9.9-14.2
|
||||
c0.3-1.8,0-4.9-1.3-7.9c-1.6-3.5-6.4-4.8-9.5-4.2c-0.8,0.1-2.5,0.5-3.9,0.7c0.3-0.9,0.9-2.6,2.6-3.5c0.5-0.3,0.7-0.9,0.4-1.3
|
||||
c-0.3-0.5-0.9-0.7-1.3-0.4c-2.7,1.5-3.6,4.2-3.8,5.4c-1.3-0.3-4.4-0.8-5.8-0.8c-1.7,0.1-3.4,0.6-4.9,1.7c-1.3,1.1-2,2.5-2.6,4
|
||||
c-0.8,2.2-1.1,4.4-0.8,6.8C192.8,870.8,194.4,874.1,196.9,877z M202.8,858.9c1.5,0,2.7,1.1,2.7,2.5c0,1.8-1.3,3.3-2.8,3.3
|
||||
c-1.1,0-2.1-1.5-2.1-3.2C200.8,860,201.5,858.9,202.8,858.9z"/>
|
||||
<path fill="#444345" d="M204.7,852.3c1.1,0.1,2.4,0.2,2.9-0.9c0.6-1.1-0.3-2.2-1.1-3.1c-1.8-1.9-4.6-2.3-7.7-0.9
|
||||
c0.4,0.7,0.8,1.3,1.1,1.8C200.9,851,202.6,852,204.7,852.3z"/>
|
||||
<path fill="#444345" d="M133.7,858.3c1.9-4,4.6-7.1,4.6-7.1c4,1.5,10.8,3.2,15.6-0.2c6.4-4.6,5.8-14.6,15-19.5
|
||||
c2.1-1.1-18.1-5.9-28.7,0.2c-7.9,4.5-7.3,12-7.1,14.6c10.1-12,25.2-11.4,25.2-11.4s-21.4,7.4-27.7,22.2
|
||||
C130.2,858.1,133.1,859.6,133.7,858.3z"/>
|
||||
<path fill="#444345" d="M212,1007c4.8-9.9-0.6-17-2.7-19.6c-2.1,18.9-17.9,28.5-17.9,28.5s16.7-21.8,13.2-41
|
||||
c-0.3-1.5-4.2-1.1-3.9,0.7c0.8,5.4,0.2,10.3,0.2,10.3c-5,1.1-13,4-15.8,10.7c-3.5,8.9,4,18.7-2,29.9
|
||||
C181.8,1029.2,205.5,1020.4,212,1007z"/>
|
||||
<path fill="#444345" d="M37.2,932.9c-2,1.5-1.6,5.4-0.1,7.5c1.5,1.9,5.3,3.4,7.3,1.8c0.4-0.3,1.6-1.1,1.6-1.1
|
||||
c2.2,1.7,3.6,0,4.6,1.3c1.1,1.5,3.8,4.7,4.6,5.8c0.9,1.1,2.4,1.9,3.2,1.3c0.8-0.6,3.5-2.5,4.6-3.3c1.1-0.8,1.1-1.8,0.5-2.6
|
||||
c-0.6-0.8-2.2-0.6-3-1.5c-0.8-0.9-3.1-3.8-3.8-4.7c-0.9-1.3-0.1-2.7,1.6-3.4c11.8-4.6,16,2.3,19.7-0.5
|
||||
c2.8-2.1-0.3-11.2-6.6-19.3s-14.6-13.4-17.4-11.1C49.5,906.8,61,914.9,37.2,932.9z M57.2,907.8c0.7-0.5,6.4,2.8,11.5,9.1
|
||||
c4.9,6.3,6.3,12.1,5.6,12.6c-0.7,0.5-6.4-2-11.4-8.3C57.9,914.9,56.6,908.3,57.2,907.8z"/>
|
||||
<path fill="#444345" d="M15,980.9c8.2,0,15-3.9,15-5.9c0,0,0-0.6,0-6.2c0-5.7-10.3-10.3-10.3-14.4c0-4,10.3-8.7,10.3-14.4
|
||||
c0-5.7,0-6.2,0-6.2c0-2.1-6.8-5.9-15-5.9s-15,3.8-15,5.8c0,0,0,0.6,0,6.2c0,5.7,10.3,10.3,10.3,14.4c0,4-10.3,8.7-10.3,14.4
|
||||
c0,5.7,0,6.2,0,6.2C0,977.1,6.8,980.9,15,980.9z M3.5,934.1c1.8-1.1,5.3-2.9,10.9-2.9s10.6,2.9,10.6,2.9
|
||||
c0.4,0.2,1.8,1.1,0.9,1.6c-2.2,1.3-6.6,2.7-11.6,2.7s-9.3-1.5-11.5-2.8C1.8,935,3.5,934.1,3.5,934.1z M2.9,968.8
|
||||
c0-1.7,2.7-4.4,4.7-6.4c2.8-2.7,5.4-4.7,5.4-7.9c0-3.2-2.7-5.2-5.5-7.9c-2-2-4.8-4.7-4.8-6.4l-0.1-2.6c2.7,1.5,7.1,2.9,11.7,2.9
|
||||
c4.7,0,9.1-1.3,11.8-2.9l-0.1,2.6c0,1.7-2.8,4.4-4.8,6.4c-2.8,2.7-5.4,4.7-5.4,7.9c0,3.2,2.2,5.2,5,7.9c2,2,4.4,4.7,4.4,6.4v3.5
|
||||
c-1.9-1.3-9.5-2-9.5-5.9c0-1.9-2.7-1.9-2.7,0c0,3.9-8.1,4.6-10.1,5.9v-3.5H2.9z"/>
|
||||
<path fill="#444345" d="M210.9,900.8c0,11,8.9,19.9,19.9,19.9c11,0,19.9-8.9,19.9-19.9c0-10.9-8.9-19.9-19.9-19.9
|
||||
C219.8,880.9,210.9,889.8,210.9,900.8z M236.2,884.7c6.7,2.2,11.5,8.6,11.5,16c0,3.9-1.3,7.5-3.5,10.3c-0.6-0.5-1.3-1.8-0.7-3.2
|
||||
c0.6-1.3,0.8-4.6,0.7-5.8c-0.1-1.3-0.8-4.2-2.5-4.2c-1.7,0-2.9-0.6-4-2.7c-2.1-4.2,4-5.1,1.8-7.5c-0.6-0.7-3.7,2.7-4.2-1.8
|
||||
C235.5,885.7,235.8,885.1,236.2,884.7z M240.2,914.9c-2.7,1.7-5.9,2.8-9.4,2.8c-1.8,0-3.7-0.3-5.3-0.9c0.9-0.6,1.1-1.3,2-1.3
|
||||
c1.1,0,1.9-0.4,3.1-0.7c1.1-0.2,3-1.3,4.6-1.5C236.7,913.3,239.4,913.5,240.2,914.9z M228.4,884c-0.4,0.8-1.5,1.1-2.1,1.7
|
||||
c-1.5,1.3-2,1.1-2.8,2.3c-0.8,1.3-3.3,3-3.3,3.9s1.3,1.9,1.8,1.7c0.7-0.2,2.4-0.2,3.3,0.2c0.9,0.4,8.1,0.7,5.8,6.8
|
||||
c-0.7,1.9-3.9,1.5-4.7,4.7c-0.1,0.5-0.6,2.4-0.6,3.1c-0.1,0.9,0.7,4.8-0.3,4.8s-3.6-3.4-3.6-4c0-0.6-0.7-2.8-0.7-4.6
|
||||
s-3.2-1.8-3.2-4.2c0-2.2,1.7-3.3,1.3-4.4c-0.4-1.1-3.4-1.1-4.6-1.3C217.1,889,222.2,884.9,228.4,884z"/>
|
||||
<path fill="#444345" d="M135.7,1029.6c-4,0-7.3,3.3-7.3,7.3s3.3,7.3,7.3,7.3c4,0,7.3-3.3,7.3-7.3
|
||||
C142.9,1032.9,139.7,1029.6,135.7,1029.6z M132.5,1040c0-0.2-0.3-0.9-0.3-1.6c0-0.7-1.1-0.7-1.1-1.5c0-0.8,0.7-1.3,0.5-1.6
|
||||
c-0.1-0.4-1.3-0.4-1.6-0.5c0.8-2,2.7-3.6,4.9-4c-0.2,0.3-0.6,0.4-0.8,0.6c-0.5,0.5-0.8,0.4-1.1,0.9s-1.1,1.1-1.1,1.5
|
||||
c0,0.3,0.5,0.7,0.7,0.7c0.2-0.1,0.9-0.1,1.1,0.1c0.4,0.1,3,0.3,2.1,2.4c-0.3,0.7-1.5,0.6-1.7,1.7c-0.1,0.2-0.2,0.9-0.2,1.1
|
||||
c0,0.4,0.3,1.7-0.1,1.7C133.5,1041.4,132.5,1040.2,132.5,1040z M135.7,1043.1c-0.7,0-1.3-0.1-1.9-0.3c0.4-0.2,0.4-0.5,0.8-0.5
|
||||
s0.7-0.2,1.1-0.3c0.4-0.1,1.1-0.5,1.6-0.5c0.5,0,1.5,0,1.8,0.5C138.1,1042.7,137,1043.1,135.7,1043.1z M140.7,1040.6
|
||||
c-0.2-0.2-0.5-0.7-0.2-1.1c0.2-0.5,0.3-1.6,0.2-2.1c-0.1-0.5-0.3-1.5-0.9-1.5s-1.1-0.2-1.5-0.9c-0.8-1.5,1.5-1.8,0.7-2.7
|
||||
c-0.2-0.3-1.3,0.9-1.5-0.7c0-0.1,0.1-0.3,0.3-0.5c2.4,0.9,4.2,3.2,4.2,5.9C141.9,1038.4,141.4,1039.6,140.7,1040.6z"/>
|
||||
<path fill="#444345" d="M44.9,1061.1c0,0.3,0,0.5,0,0.8c0.1,1.7,1.5,3.2,3.4,3.2c1.7,0,3.2-1.3,3.4-3c0.1-0.3,0.1-0.6,0.1-0.9
|
||||
c0-0.9,0.4-1.3,1.1-1.5c6.4-1.5,11.4-6.6,12.4-13c0.1-0.8,0.1-1.5,0.4-2.1c0.6-0.5,1.5-0.9,1.7-1.5c0.2-0.5-0.4-1.3-0.6-2.1
|
||||
c1.1-1.1,1.1-1.6-0.2-2.9c1.3-1.3,1.3-1.9-0.1-3.2c0.9-0.4,1.3-1.1,0.9-2c-0.3-0.6-1.1-0.9-1.6-1.3c-0.1,0.1-0.1,0.2-0.2,0.2
|
||||
c-0.1-0.6-0.1-1.1-0.4-1.5c-0.4-0.5-0.9-1.1-1.5-1.1c-0.3-0.1-0.9,0.6-1.1,0.9c-0.7,1.3-1.1,2.8-1.7,4.2s-1.3,2.7-2.2,3.9
|
||||
c-2.7,3.4-6.3,4.4-10.4,3.6c-4-0.9-6.8-3.3-7.9-7.3c-0.2-0.8-0.2-1.5-0.4-2.3c0.9-0.6,2.1-0.9,1.6-2.2c-0.2-0.7-1.1-1.1-2-1.7
|
||||
c0-0.5,0.2-1.5-0.9-1.9c-0.9-0.4-1.6,0.2-2.2,1.1c-0.7-0.8-1.3-1.6-2.4-1.1c-0.6,0.4-0.9,1.3-1.5,2.2c-0.7,0-1.8-0.1-2,1.3
|
||||
c-0.1,0.9,0.6,1.5,2.4,2c-1.1,1.3-3,1.3-4.2,2.4c1.1,0.6,2,1.1,3.1,1.7c0.6,0.3,0.8,0.7,0.7,1.3c-0.2,2.1-0.3,4.4-0.5,6.4
|
||||
c-0.8,9.2,5.5,14.3,11.5,15.9C44.7,1059.8,45,1060,44.9,1061.1z M35.7,1034.1c-0.3,0-0.7-0.4-1.3-0.8c0.7-0.4,0.9-0.9,1.3-0.9
|
||||
c0.3,0,0.9,0.6,0.8,0.8C36.3,1033.6,35.9,1034.1,35.7,1034.1z"/>
|
||||
<path fill="#444345" d="M211.6,940.4h-6.4c-1.1,0-2.7,0.7-3.4,1.6l-8.5,10.9c-0.7,0.9-0.3,0.9,0.9,0.9h34.6c1.1,0,1.6,0,0.9-0.9
|
||||
l-7.4-11c-0.7-0.9-2.1-1.5-3.3-1.5h-1.6v-3.9h-5.8V940.4z"/>
|
||||
<path fill="#444345" d="M219.2,930.1l0.5-0.1c1.1-0.2,2-1.1,2.7-2.2c0.7-1.1,0.8-3.6,0.6-4.9c-0.7,2-2.1,2.7-3.7,3.4
|
||||
c-0.4,0.2-0.9,0.4-1.3,0.5c-0.5,0.2-0.9,0.4-1.5,0.6c-1.5,0.8-2.1,2-2.4,4c-0.2,0.8-0.3,1.6-0.3,2.8c0.8-2,1.6-3,3.3-3.6
|
||||
C217.8,930.5,218.5,930.3,219.2,930.1z"/>
|
||||
<path fill="#444345" d="M227,969.3h0.9v-11.9c0-1.1,0-1.6,0-1.6H227h-1.3h-15h-1.3h-11h-4v2.2v11.3h4h2.7v-8
|
||||
c0,0,0.2,0.3,1.1,0.3h5.2c0,0,0.5-1.1,0.5-0.2v7.9h1.5h1.3h15L227,969.3L227,969.3z M222.2,965.5c0,0.2,0.7,0.9,0.5,0.9h-5.7
|
||||
c-0.2,0-0.6-0.8-0.6-0.9v-5.7c0-0.2,0.4-0.1,0.6-0.1h5.7c0.2,0-0.5-0.1-0.5,0.1V965.5z"/>
|
||||
<path fill="#444345" d="M143.1,1056.3c0-0.6-0.5-0.9-1.1-0.9h-13.4c-0.6,0-1.1,0.4-1.1,0.9c0,0.6,0.5,0.9,1.1,0.9h13.4
|
||||
C142.7,1057.3,143.1,1056.9,143.1,1056.3z"/>
|
||||
<rect x="131.4" y="1052.5" fill="#444345" width="9.7" height="2.9"/>
|
||||
<path fill="#444345" d="M117.8,828.2c-4.6,0.8-7.9,4.6-8.2,9.1l8.7-0.5L117.8,828.2z"/>
|
||||
<path fill="#444345" d="M119.7,839.3l-9.9,0.5c0.9,4.8,5.2,8.4,10.3,8.1c5.5-0.3,9.7-4.9,9.4-10.4c-0.3-5-4.2-9-9.1-9.4l0.5,9.9
|
||||
C120.9,838.7,120.3,839.2,119.7,839.3z"/>
|
||||
<path fill="#444345" d="M78.2,866c0.4,0,0.9-0.6,1.3-0.7s0.9-0.6,1.1-0.8l5.5-3.9c0.3-0.2,0.5-0.6,0.5-0.9
|
||||
c0-0.3-0.2-0.6-0.5-0.8l-5.5-3.8c-0.3-0.2-0.8-0.9-1.1-1.1c-0.5-0.1-0.9-0.7-1.3-0.7H62.5l1.8,12.6H78.2L78.2,866z"/>
|
||||
<path fill="#444345" d="M41,865.1l5.5,3.8c0.3,0.2,0.8,0.5,1.1,0.7c0.5,0.1,0.9,0.4,1.3,0.4h8.1V890c0,0.5,0.6,0.2,1.1,0.2h2
|
||||
c0.5,0,0.7,0.3,0.7-0.2v-39.7c0-0.5-0.2-1.6-0.7-1.6h-2c-0.5,0-1.1,1.1-1.1,1.6v9h-8c-0.4,0-0.9,0-1.3,0.1s-0.9,0.3-1.1,0.5
|
||||
l-5.5,3.8c-0.3,0.2-0.5,0.5-0.5,0.8C40.6,864.7,40.8,864.9,41,865.1z"/>
|
||||
<path fill="#444345" d="M72.4,874.2v31.6c0,2.2,2.4,4.6,4.6,4.6h15.4c2.2,0,4.2-2.4,4.2-4.6v-31.6c0-2.2-2-3.4-4.2-3.4H77
|
||||
C74.8,870.8,72.4,872,72.4,874.2z M84.7,908.2c-1.5,0-2.8-0.9-2.8-2s1.3-2,2.8-2s2.8,0.9,2.8,2
|
||||
C87.5,907.2,86.3,908.2,84.7,908.2z M93.7,875.7v26.1H76.3v-26.1H93.7z"/>
|
||||
<path fill="#444345" d="M162,850.1c0,13.2,13.8,30.4,13.8,30.4s13.8-17.2,13.8-30.4c0-7.7-6.2-13.8-13.8-13.8
|
||||
C168.2,836.1,162,842.3,162,850.1z M175.8,842.7c4.2,0,7.5,3.4,7.5,7.5c0,4.2-3.4,7.5-7.5,7.5c-4.2,0-7.5-3.4-7.5-7.5
|
||||
C168.3,846.1,171.8,842.7,175.8,842.7z"/>
|
||||
<path fill="#444345" d="M88.9,887.4c0-2.4-1.8-4.2-4.2-4.2s-4.2,1.8-4.2,4.2c0,4,4.2,9.1,4.2,9.1S88.9,891.4,88.9,887.4z
|
||||
M82.4,887.6c0-1.3,0.9-2.2,2.2-2.2c1.3,0,2.2,0.9,2.2,2.2c0,1.3-0.9,2.2-2.2,2.2C83.5,889.8,82.4,888.8,82.4,887.6z"/>
|
||||
<path fill="#444345" d="M177.1,885.5l-2.4,2.1l-2.4-2.1c-3.4-3.1-9-3.1-12.4,0c-3.9,3.6-3.9,9.3,0,12.8l14.7,13.5l14.7-13.5
|
||||
c3.9-3.6,3.9-9.3,0-12.8C186.1,882.4,180.4,882.4,177.1,885.5z"/>
|
||||
<path fill="#444345" d="M237.1,987.3l-3.3,2.8c-0.3,0.2-0.3,0.7-0.1,0.9l18.9,21.4c0.4,0.5,1.1,0.6,1.7,0.1l2.2-1.8
|
||||
c0.5-0.5,0.6-1.3,0.1-1.7l-18.7-21.6C237.8,986.9,237.4,986.9,237.1,987.3z"/>
|
||||
<path fill="#444345" d="M236.1,973.1c-2.9,0.3-6.6,3-8.4,4.2c-2.4,1.6-3.3,2.6-3.5,2.7c-0.7,0.6-0.1,1.9-1.3,3.1
|
||||
c-1.3,1.1-2.1,0.3-2.9,0.9c-0.4,0.3-1.5,1.1-1.7,1.3c-0.3,0.3-0.4,0.7-0.1,1.1c0,0,2.9,3.2,3.1,3.5c0.2,0.3,0.9,0.5,1.3,0.2
|
||||
c0.4-0.4,1.5-1.3,1.6-1.5c0.2-0.2-0.1-1.9,0.8-2.7c2.1-1.6,3.9-0.5,6.2,2.2c0.3,0.3,0.7-0.1,0.9-0.2c0.2-0.2,3.3-3,3.5-3.1
|
||||
c0.2-0.1,0.3-0.4,0.1-0.7c-0.2-0.3-1.1-1.5-1.6-2.1c-4.2-5.4,11.2-9,8.9-9.1C241.6,973,236.7,973,236.1,973.1z"/>
|
||||
<path fill="#444345" d="M224.1,1010.9l2.1,2.1c0.5,0.5,1.3,0.3,1.7-0.2l11.1-10.9l-3.4-3.9l-11.6,11.2
|
||||
C223.7,1009.6,223.7,1010.4,224.1,1010.9z"/>
|
||||
<path fill="#444345" d="M247.9,985.9c-0.2,0.3-0.4,0.6-0.7,0.9l-3.1,3.2l3.1,3.6l3.8-3.6c0.2-0.2,0.6-0.5,0.9-0.7
|
||||
c0.1,0,0.1,0,0.2-0.1c0.3-0.1,0.6,0,0.9,0.2c0.7,0.5,1.3,0.9,1.9,1.5c0.5,0.4,0.9,0.4,1.3-0.1c0.6-0.7,1.1-1.3,1.7-1.9
|
||||
c0.9-1.1,1.9-2.1,2.9-3.2c1.6-1.7,2.4-3.7,2.4-5.8c0-0.8,0-1.5-0.2-2.4c-0.3-2-1.3-3-3.3-3.3c-0.5-0.1-1.1-0.2-1.5-0.1
|
||||
c-0.6,0-1.3,0-1.8,0.1c-1.5,0.1-3,0.5-4.2,1.6c-0.9,0.9-1.9,1.8-2.9,2.7c-1.1,1.1-2.2,2-3.3,3.1c-0.3,0.3-0.4,0.6,0,0.9
|
||||
c0.7,0.7,1.3,1.5,1.9,2.1c0.3,0.3,0.4,0.5,0.2,0.9C248,985.6,247.9,985.6,247.9,985.9z M250.3,985.4l4.7-4.4
|
||||
c0.1-0.1,0.4-0.1,0.5,0c0.1,0.1,0.1,0.3,0,0.5l-4.2,5c-0.1,0.1-0.2-0.7-0.3,0.3l0,0c-0.1,0-0.2-0.2-0.2-0.2l-0.6-0.6
|
||||
c-0.1-0.1-0.1-0.2-0.1-0.3C250.2,985.6,250.3,985.4,250.3,985.4z"/>
|
||||
<path fill="#444345" d="M237.6,934c0,0.8-0.1,1.5,0.6,1.5h10.1v2.5c0,0.6-0.4,0.4,0.2,0.4h4c0.6,0,0.7,0.2,0.7-0.4v-2.5h9.5
|
||||
c0.8,0,1.1-0.9,1.1-1.5v-5.2h-26.1L237.6,934L237.6,934z"/>
|
||||
<path fill="#444345" d="M251.2,948.8V947c0-0.3-0.2-0.6-0.5-0.6s-0.5,0.3-0.5,0.6v1.7c-2.9,0.3-4.8,2.5-4.8,5.1
|
||||
c0,2.9,2.2,5.2,5.1,5.2c2.9,0,5.2-2.4,5.2-5.2C255.7,951.3,254.1,949.1,251.2,948.8z"/>
|
||||
<path fill="#444345" d="M261.5,939.4h-22c-1.1,0-2,1.1-2.2,2.2l-2.6,22.8c-0.1,0.6,0.1,1.5,0.6,2c0.4,0.5,1.1,0.9,1.6,0.9h27.3
|
||||
c0.7,0,1.3-0.5,1.6-0.9c0.4-0.5,0.6-1.1,0.6-1.8l-2.6-23C263.5,940.6,262.5,939.4,261.5,939.4z M250.4,963c-5,0-9.1-4-9.1-9.1
|
||||
s4-9.1,9.1-9.1c5,0,9.1,4,9.1,9.1S255.4,963,250.4,963z"/>
|
||||
<path fill="#444345" d="M155,1069.4v0.4h11.3c0.6,0,1.1-0.9,1.1-1.5c0-0.6-0.5-1.5-1.1-1.5H155h-1.3h-2.4c-3,0-5.4,1.9-6.2,4.8
|
||||
h-7.9v2.9h7.9c0.8,2.9,3.2,5.8,6.2,5.8h2.4l0,0h12.6c0.6,0,1.1-0.9,1.1-1.5s-0.5-1.5-1.1-1.5H155c-0.4,0-0.7-0.1-0.7-0.5
|
||||
c0-0.4,0.3-0.5,0.7-0.5h11.3c0.6,0,1.1-0.4,1.1-0.9c0-0.6-0.5-0.9-1.1-0.9H155l0,0c-0.4,0-0.7-0.6-0.7-0.9
|
||||
c0-0.4,0.3-0.9,0.7-0.9h11.3c0.6,0,1.1-0.4,1.1-0.9c0-0.6-0.5-0.9-1.1-0.9h-10.7v-0.4c-0.9,0-0.9-0.1-0.9-0.5
|
||||
C154.6,1069.5,154.6,1069.4,155,1069.4z"/>
|
||||
<path fill="#444345" d="M105.5,1076.6h27.3c1.3,0,3.3-0.7,3.3-1.6v-3.3c0-0.9-2.1-1.8-3.3-1.8h-27.3c-1.8,0-3.3,1.5-3.3,3.4
|
||||
C102.4,1075,103.9,1076.6,105.5,1076.6z"/>
|
||||
<path fill="#444345" d="M165.8,1086.7c0-1.8-1.5-3.4-3.4-3.4h-28.2c-1.3,0-1.9,0.6-2.9,1.6v3.4c0.9,0.9,1.6,1.7,2.9,1.7h28.2
|
||||
C164.3,1090.1,165.8,1088.6,165.8,1086.7z"/>
|
||||
<path fill="#444345" d="M131.4,1088.2v-2.9h-4h-5.8H96.6c0,0-2.5,1.1,1.3,2.8c5.7,2.4,10.3,2.8,14.7,3.4
|
||||
c1.5,0.2,6.6,1.3,9.9-1.5c1.1-1.1,2.4-1.8,3.4-1.8H131.4z"/>
|
||||
<path fill="#444345" d="M169.3,1059.4l8.2-0.8c-0.1-0.9-0.3-1.8-0.3-2.7c-0.1-2.3-0.2-4.6-0.3-7c-0.1-1.7,0-3.5,0-5.2
|
||||
c0.1-2,0.2-4.2,0.3-6.2c0.1-1.6,0.2-3.4,0.4-5c0.2-2,0.5-4,0.8-6c0.2-1.5,0.5-3.2,0.7-4.7c0.1-0.5-0.2-0.9-0.7-0.9
|
||||
c-0.3-0.1-0.6-0.1-0.9-0.1c-4.2,0-8.5,0-12.4,0c0,0,0,0,0,0.1c-0.9,0-1.9,0-2.9,0c-0.6,0-0.7,0-0.7,0.6
|
||||
c-0.1,0.8-0.2,1.5-0.2,2.2c0,1.5,0,3.1,0.1,4.6c0,1.5,0.1,3.1,0.2,4.6c0.1,1.5,0.2,3.1,0.3,4.6c0.1,1.5,0.2,2.8,0.3,4.2
|
||||
c0.1,1.9,0.3,3.9,0.5,5.8c0.1,1.6,0.3,3.2,0.4,4.8c0.2,1.5,0.3,3.2,0.5,4.8c0.1,0.8,0.2,1.5,0.3,2.2c0,0.2,0.1,0.4,0.4,0.4
|
||||
c0.5,0,0.9-0.1,1.5-0.1c0.8-0.1,1.6-0.1,2.4-0.2C168.6,1059.5,168.9,1059.4,169.3,1059.4z M174.8,1023.7c0.7,0,1.1,0.4,1.1,1.1
|
||||
c0,0.6-0.5,1.1-1.1,1.1c-0.6,0-1.1-0.5-1.1-1.1C173.7,1024.1,174.2,1023.7,174.8,1023.7z"/>
|
||||
<path fill="#444345" d="M175.7,1082.3c-0.5,1.5,0.9,3.3,2.6,3.3c1.3,0,2.5-0.9,2.9-2.4c0.3-1.3,0.3-2.5,0.1-3.8
|
||||
c-0.5-2.6-1.1-5.2-1.5-7.7c-0.4-2-0.9-4-1.3-6.1c-0.3-1.5-0.6-3.1-0.7-4.6v-0.1l-5.2,0.5c0.2,0.9,0.4,2,0.6,3
|
||||
c0.6,3.2,1.1,6.3,1.8,9.4c0.5,1.9,0.9,4,1.3,5.9c0.1,0.4,0,0.9-0.1,1.3C176,1081.3,175.8,1081.8,175.7,1082.3z"/>
|
||||
<path fill="#444345" d="M85.5,1019.1c1.3,0.1,2.6-0.1,4-0.2c0.1,0,0.1-0.1,0.1-0.2c0.6-1.1-0.1-2.9-1.3-3.4c0-1.1,0.2-2.4,0-3.6
|
||||
c-0.2-1.5-0.2-3.5-1.1-4.6c-2-2.9-5-6.3-7.5-8.9c-1.7-1.9-3.6-2.2-6.2-2.2c-10.1-0.1-20.1-0.2-30.1-0.3c-3.2,0-4.4,1.3-4.4,4.4
|
||||
c-0.1,4.9-0.1,9.9-0.2,15c-1.1-0.1-1.3,0.5-1.3,1.3c0,0.4,0,0.8,0,1.3c0,0.7,0.3,1.1,0.9,1.1c0.9,0,1.7,0,2.7,0
|
||||
c0.9,0.1,1.3-0.3,1.5-1.1c0.9-2.8,3.1-4.4,6-4.4c2.9,0,5.1,1.6,6,4.6c0.3,0.9,0.8,1.1,1.6,1.1c4.8,0,9.7,0.1,14.6,0.2
|
||||
c0.9,0,1.5-0.4,1.7-1.3c0.9-2.7,3.2-4.4,6-4.4c2.8,0,4.9,1.6,5.9,4.4C84.6,1018.3,85.1,1019.1,85.5,1019.1z M82.8,1007
|
||||
L82.8,1007l-9.5,0.4c-0.7,0-1.3-0.4-1.3-1.1l0.1-6.8c0-0.7,0.6-1.3,1.3-1.3l3,0.1c0.1,0,0.3,0,0.4,0.1c0.4,0.1,0.6,0.2,6.8,7.3
|
||||
c0.2,0.2,0.4,0.1,0.4,0.5C84.1,1006.9,83.5,1007,82.8,1007z"/>
|
||||
<path fill="#444345" d="M48.8,1014.1c-3,0-5.5,2.4-5.5,5.4s2.4,5.5,5.4,5.5s5.5-2.4,5.5-5.4
|
||||
C54.2,1016.6,51.8,1014.2,48.8,1014.1z"/>
|
||||
<path fill="#444345" d="M78.6,1014.5c-3,0-5.5,2.4-5.5,5.4c0,3,2.4,5.5,5.4,5.5s5.5-2.4,5.5-5.4
|
||||
C84.1,1017,81.6,1014.5,78.6,1014.5z"/>
|
||||
<path fill="#444345" d="M247.8,1026.3c0-0.9-2.4-1.7-10.3-0.7c0,0,1.9-1.6,2.7-1.9c0.8-0.3,4.2-2.4,3.6-5.1
|
||||
c-0.6-2.7-1.6-1.1-2.9,1.1c-1.1,2.1-2.7,4-4.9,5.3c0,0-0.7-4.2-3.1-4.4c-0.8,0-4,0-7.7,0.4l-0.7,0.1c-0.4,0-0.9,0.1-1.3,0.2
|
||||
c0,0.1-0.2,0.1-0.2,0.2v4.6c0,0.4-0.1,0.7-0.5,0.7s-0.5-0.3-0.5-0.7v-4.6l0,0c-0.9,0.1-1.3,0.2-1.8,0.3c0,0-7.1,1.1-11.8,2.5
|
||||
h-0.1c-0.1,0-0.2,0.1-0.3,0.1c-0.3,0.1-0.6,0.2-0.9,0.3c-0.2,0.1-0.4,0.1-0.6,0.2c-0.1,0-0.1,0.1-0.2,0.1
|
||||
c-0.1,0-0.2,0.1-0.3,0.1l0,0c-0.9,0.4-1.6,0.6-2.4,1.1c0,0-0.8,0.4-0.3,1.5c0.3,0.7,4.2,2.4,12,3.6v-3.5c0-0.4,0.1-0.7,0.5-0.7
|
||||
s0.5,0.3,0.5,0.7v3.7c0.9,0.1,1.3,0.1,1.7,0.2l0.9,0.1c2.6,0.3,5.1,0.5,9.9,0.6v-2.9c0-0.4,0.1-0.7,0.5-0.7s0.5,0.3,0.5,0.7v2.9
|
||||
h0.8c1.1,0,1.6,0,2.6-0.1c0,0,2.5,0.2,2.7-4.4c0,0,4.4-0.8,4,4.2c-0.2,3.7,3,3.8,3,1.1c0-2.5-0.7-5.4-5.5-6.4c0,0,3.9,0.5,7,1.1
|
||||
C247.5,1028.4,247.8,1027.3,247.8,1026.3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<polygon fill="#444345" points="678.1,1020.6 677.4,1020.6 650.5,985.8 642.4,985.8 642.4,1038 654,1038 654,1003.2
|
||||
653.4,1003.2 680.4,1038 687.7,1038 687.7,987.7 678.1,987.7 "/>
|
||||
<polygon fill="#444345" points="706.1,1038 731.3,1038 731.3,1028.3 714.8,1028.3 714.8,1015.7 731.3,1015.7 731.3,1007
|
||||
714.8,1007 714.8,994.4 731.3,994.4 731.3,987.7 706.1,987.7 "/>
|
||||
<polygon fill="#444345" points="744.8,994.4 755.4,994.4 755.4,1038 764.1,1038 764.1,994.4 776.6,994.4 776.6,987.7
|
||||
744.8,987.7 "/>
|
||||
<polygon fill="#444345" points="832.4,1022.5 832.3,1022.5 821.6,985.8 815.8,985.8 805.5,1022.5 805.5,1022.5 795.1,987.7
|
||||
784.6,987.7 800.9,1038 808.2,1038 817.9,1007 818.1,1007 828.2,1038 835.6,1038 853,987.7 842.4,987.7 "/>
|
||||
<path fill="#444345" d="M888.7,985.4c-15.2,0-25.3,11.7-25.3,26.9c0,15,9.7,27.1,25.3,27.1c15.6,0,25.3-12,25.3-27.1
|
||||
C914.1,997.1,904,985.4,888.7,985.4z M888.7,1029.6c-11.1,0-15-9.7-15-17.6c0-8.3,5.6-16.6,15-16.6c9.5,0,15,8.4,15,16.6
|
||||
C903.7,1019.8,899.8,1029.6,888.7,1029.6z"/>
|
||||
<path fill="#444345" d="M959.8,1002.7c0-10.9-7.1-15-17.1-15h-14.4v50.2h11.6v-20.3h-0.7l12.5,20.3h12.1l-14.5-21.4
|
||||
C956.3,1015.5,959.8,1009.1,959.8,1002.7z M940.4,1010.9h-0.5v-16.5h0.6c5.3,0,9.3,1.7,9.3,8
|
||||
C949.9,1008.7,945.9,1010.9,940.4,1010.9z"/>
|
||||
<polygon fill="#444345" points="1015.5,987.7 1003.2,987.7 987.4,1008 987.2,1008 987.2,987.7 976.6,987.7 976.6,1038
|
||||
987.2,1038 987.2,1013.8 987.4,1013.8 1003.7,1038 1016.6,1038 996.1,1010.9 "/>
|
||||
<path fill="#444345" d="M360.6,873.3c-25,0-41.6,19.1-41.6,44c0,24.7,15.9,44.3,41.6,44.3c25.6,0,41.6-19.6,41.6-44.3
|
||||
C402.1,892.4,385.6,873.3,360.6,873.3z M360.6,945.5c-18.1,0-24.6-15.9-24.6-28.8c0-13.6,9.2-27.3,24.6-27.3
|
||||
s24.6,13.7,24.6,27.3C385.2,929.6,378.8,945.5,360.6,945.5z"/>
|
||||
<path fill="#444345" d="M443.5,876.6h-22.4v83.1h15.4v-31.9h9.3c17.2,0,26.9-8,26.9-25.8C472.6,883,461.1,876.6,443.5,876.6z
|
||||
M441,915.3h-4.4v-26.1h4c9.2,0,15.4,1.9,15.4,12.8C456,912.9,450.7,915.3,441,915.3z"/>
|
||||
<polygon fill="#444345" points="491.7,959.7 535.1,959.7 535.1,945.2 508.1,945.2 508.1,923 533.3,923 533.3,908.5 508.1,908.5
|
||||
508.1,889.2 535.1,889.2 535.1,876.6 491.7,876.6 "/>
|
||||
<polygon fill="#444345" points="612.4,932.7 612.7,932.7 568.6,872.8 556.4,872.8 556.4,959.7 573.8,959.7 573.8,901.7
|
||||
573.3,901.7 617.6,961.6 629.8,961.6 629.8,876.6 612.4,876.6 "/>
|
||||
<polygon fill="#444345" points="695.5,959.7 711.9,959.7 711.9,923 736.1,923 736.1,908.5 711.9,908.5 711.9,889.2 738,889.2
|
||||
738,876.6 695.5,876.6 "/>
|
||||
<path fill="#444345" d="M795.8,961.6c25.6,0,41.6-19.6,41.6-44.3c0-24.9-16.5-44-41.6-44s-41.6,19.1-41.6,44
|
||||
C754.4,942,770.3,961.6,795.8,961.6z M795.8,889.4c15.4,0,24.6,13.7,24.6,27.3c0,13-6.4,28.8-24.6,28.8
|
||||
c-18.1,0-24.6-15.9-24.6-28.8C771.3,903.1,780.4,889.4,795.8,889.4z"/>
|
||||
<path fill="#444345" d="M894.1,873.3c-25,0-41.6,19.1-41.6,44c0,24.7,15.9,44.3,41.6,44.3c25.6,0,41.6-19.6,41.6-44.3
|
||||
C935.6,892.4,919.3,873.3,894.1,873.3z M894.1,945.5c-18.1,0-24.6-15.9-24.6-28.8c0-13.6,9.2-27.3,24.6-27.3
|
||||
c15.4,0,24.6,13.7,24.6,27.3C918.7,929.6,912.3,945.5,894.1,945.5z"/>
|
||||
<path fill="#444345" d="M1018.7,918.2c0-24-16.2-41.6-40.6-41.6h-21.8v83.1h21.8C1002,959.7,1018.7,941.8,1018.7,918.2z
|
||||
M971.8,945.2v-56.1h2.1c18.5,0,27.9,9.7,27.9,28c0,16.6-7.9,28-27.9,28L971.8,945.2L971.8,945.2z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="OFN_beta__x28_outlined_x29_">
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M787.9,977.7l0.2-5.2c0-0.4,0-0.5,0-0.6c-0.1-0.1-0.2-0.3-0.4-0.7c-0.1-0.3-0.2-0.6-0.2-0.7v0
|
||||
c0.1,0,0.3-0.1,0.9-0.1c0.5,0,1.1,0,1.6,0c0.5,0,1,0.1,1.4,0.1c0.4,0.1,0.9,0.2,1.2,0.3c0.4,0.1,0.7,0.4,1,0.6
|
||||
c0.2,0.3,0.3,0.6,0.3,0.9s-0.1,0.6-0.2,0.9c-0.1,0.3-0.3,0.5-0.5,0.6c-0.3,0.3-0.6,0.4-1,0.6c0,0,0,0,0,0s0.1,0,0.2,0.1
|
||||
s0.2,0.1,0.3,0.1c0.1,0,0.2,0.1,0.4,0.2c0.2,0.1,0.3,0.2,0.4,0.3s0.2,0.2,0.4,0.4c0.2,0.3,0.4,0.8,0.3,1.3c0,0.5-0.2,1-0.5,1.5
|
||||
c-0.3,0.4-0.8,0.8-1.4,1.1c-1.1,0.5-2.4,0.7-3.8,0.6l-0.7-0.1c0,0,0-0.4,0-1C787.9,978.6,787.9,978.2,787.9,977.7z M789.8,978.8
|
||||
c0.6,0,1.2-0.1,1.7-0.5c0.5-0.3,0.9-0.8,0.9-1.2c0-0.3-0.1-0.6-0.4-0.9c-0.4-0.4-1.1-0.6-1.9-0.6c-0.2,0-0.3,0-0.3,0
|
||||
s0,0.4-0.1,1.3C789.6,977.7,789.6,978.3,789.8,978.8C789.7,978.8,789.7,978.8,789.8,978.8z M791,973.9c0.2-0.1,0.4-0.2,0.6-0.4
|
||||
c0.2-0.2,0.3-0.4,0.3-0.6c0-0.2,0-0.4-0.2-0.5s-0.3-0.2-0.5-0.3c-0.2-0.1-0.4-0.1-0.5-0.2c-0.2,0-0.3-0.1-0.5-0.1s-0.2,0-0.3,0
|
||||
c0,0,0,0.4-0.1,1.1c0,0.7-0.1,1.1-0.1,1.2c0,0,0.1,0,0.1,0c0.1,0,0.2,0,0.4-0.1C790.5,974.1,790.8,974.1,791,973.9z"/>
|
||||
<path fill="#FFFFFF" d="M796.1,974.6l0.1-1.5c0-0.4,0-0.6,0-0.6c-0.1-0.1-0.2-0.3-0.4-0.8c-0.1-0.4-0.2-0.6-0.2-0.8
|
||||
c0.1-0.1,1.7-0.1,4.8,0c0.8,0,1.2,0.1,1.2,0.1c0,0.2-0.1,0.4-0.1,0.6c-0.1,0.2-0.2,0.4-0.3,0.5s-0.2,0.2-0.2,0.2c0,0-0.2,0-0.5,0
|
||||
c-0.3,0-0.8,0-1.4,0c-0.6,0-0.9,0.1-1,0.1c-0.1,0.1-0.1,0.5-0.1,1.5v0.6c0.4,0,0.9,0,1.6,0c0.7,0,1.1,0.1,1.1,0.1
|
||||
c0,0.3-0.1,0.7-0.4,1.1c-0.1,0.1-0.1,0.2-0.2,0.2c-0.2,0-0.6,0-1.2,0c-0.6,0-0.9,0.1-1,0.1c0,0,0,0.4-0.1,1.2c0,0.8,0,1.2,0,1.2
|
||||
c0.1,0.1,0.9,0.2,2.4,0.3c0.6,0,1,0,1.2,0s0.3,0,0.3,0c0,0.2-0.1,0.5-0.2,0.8c-0.2,0.3-0.3,0.5-0.5,0.7c-0.1,0.1-0.9,0.1-2.5,0
|
||||
c-1.5-0.1-2.4-0.1-2.4-0.2c-0.1,0-0.1-0.5,0-1.3c0-0.9,0.1-1.7,0.1-2.6c-0.2-0.1-0.3-0.4-0.4-0.7s-0.2-0.6-0.2-0.8
|
||||
C795.3,974.6,795.6,974.6,796.1,974.6z"/>
|
||||
<path fill="#FFFFFF" d="M803.8,979.1l0.3-5.7c0-0.5,0-0.7,0-0.7c0,0-0.1,0-0.2,0c-0.3,0-0.8,0-1.5,0.1l-0.4,0l0-0.3
|
||||
c0-0.4,0.1-0.8,0.3-1.1l0.1-0.2c0.7,0,1.5,0,2.4,0c0.9,0,1.7,0,2.4,0c0.7,0,1.1,0.1,1.1,0.1c0,0.3,0,0.6-0.1,1
|
||||
c-0.1,0.4-0.1,0.6-0.2,0.6c-0.2-0.1-0.6-0.1-1.2-0.1c-0.6,0-0.9,0-0.9,0c-0.1,0.1-0.1,1.3-0.2,3.6c-0.1,2.3,0,3.7,0.3,4.2l0,0
|
||||
c0,0.1-0.2,0.1-0.5,0.2c-0.3,0.1-0.6,0.1-0.9,0.1c-0.3,0-0.5-0.1-0.7-0.1C803.8,980.6,803.8,980.1,803.8,979.1z"/>
|
||||
<path fill="#FFFFFF" d="M812.2,977.5c-0.1,0-0.5,0-1.2-0.1c-0.6,0-1,0-1.2,0c-0.5,1.6-0.9,2.7-1,3.4c0,0-0.1,0-0.3,0
|
||||
c-0.2,0-0.4,0-0.7-0.1c-0.5-0.1-0.8-0.2-0.8-0.2c0-0.4,0.4-1.4,1.1-3.1c-0.1-0.1-0.2-0.3-0.4-0.6c-0.1-0.3-0.2-0.6-0.2-0.8
|
||||
c0,0,0.4,0,1.1,0c0.8-2.2,1.3-3.3,1.4-3.4c0,0,0.2-0.1,0.5-0.1s0.5-0.1,0.5-0.1l0-0.2c0-0.1,0-0.3,0-0.4c0-0.1,0-0.2,0-0.3
|
||||
c0,0,0.1-0.1,0.2-0.2c0.4-0.2,0.9-0.3,1.4-0.3c0.1,0.5,0.2,1.2,0.3,2.1c0.1,0.9,0.4,2.1,0.8,3.9c0.4,1.7,0.8,2.9,1.1,3.6l0.1,0.2
|
||||
c0,0-0.1,0.1-0.3,0.2c-0.2,0.1-0.4,0.2-0.7,0.3c-0.3,0.1-0.5,0.1-0.8,0.1c-0.1,0-0.3-0.5-0.5-1.6S812.2,978,812.2,977.5z
|
||||
M811.9,976.1c-0.3-1.3-0.4-2.1-0.4-2.2c0-0.2,0-0.2-0.1-0.2s0,0-0.1,0.1c-0.1,0.1-0.2,0.5-0.5,1.1c-0.2,0.6-0.4,1-0.5,1.2
|
||||
C811.3,976,811.9,976,811.9,976.1z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M791.1,1003.2c-0.1-0.1-0.5-1.3-1.3-3.4l-0.4-1.1c0,0,0-0.1,0-0.1c-0.1,0.1-0.5,0.9-1.2,2.1
|
||||
c-0.6,1.3-1,2-1.1,2.1c-0.7,0-1.1-0.1-1.2-0.4c0.1-0.3,0.4-1,0.9-1.9c0.5-0.9,1-1.8,1.4-2.5l0.7-1.2c0.1-0.1,0.3-0.1,0.6-0.2h0.1
|
||||
l0.5,0.1c1,3.1,1.7,5.1,2,6.1C791.9,1003,791.5,1003.2,791.1,1003.2L791.1,1003.2z"/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<path fill="#FFFFFF" d="M344.7,1004.5v-10.6c0-1.2-1.1-2-2.2-2h-17c-1.2,0-2.4,0.8-2.4,2v10.6c0,1.2,1.2,2.1,2.4,2.1h17
|
||||
C343.6,1006.6,344.7,1005.6,344.7,1004.5z M325.5,993.8h17.2v10.8h-17.2V993.8z"/>
|
||||
<path fill="#FFFFFF" d="M365.6,927.2c-4.3,8.5-6.1,9.6-6.1,13.1c0,3.4,2.8,6.2,6.3,6.2c3.4,0,6.3-2.8,6.3-6.2
|
||||
c0-3.6-1.6-5.6-6.1-13.1C365.8,927,365.7,927,365.6,927.2z M363.9,940.2c0,1.1-0.7,1.5-1.3,1.5c-0.8,0-1.3-0.6-1.3-1.3
|
||||
c0-2.5,1.2-4.1,2.3-5.5c0.3-0.4,0.6-0.9,0.9-1.3C364.5,933.5,363.9,938.1,363.9,940.2z"/>
|
||||
<path fill="#FFFFFF" d="M312.1,996.8c-1.3-0.8-3.8-2.4-3.8-2.4s0,0,0,3.2s5.4,4.4,5.4,4.4C313.6,1000.5,313.5,997.6,312.1,996.8
|
||||
z"/>
|
||||
<path fill="#FFFFFF" d="M312.1,1002.5c-1.3-0.8-3.8-2.4-3.8-2.4s0,0,0,3.2s5.4,4.4,5.4,4.4
|
||||
C313.6,1006.3,313.5,1003.4,312.1,1002.5z"/>
|
||||
<path fill="#FFFFFF" d="M313.7,1013.6c-0.1-1.5-0.2-4.4-1.5-5.3c-1.3-0.8-3.9-2.4-3.9-2.4s0,0,0,3.2S313.7,1013.6,313.7,1013.6z
|
||||
"/>
|
||||
<path fill="#FFFFFF" d="M315.5,1002c0,0,5.6-1.2,5.6-4.4c0-3.2,0-3.2,0-3.2s-3.1,1.5-4.4,2.4
|
||||
C315.3,997.6,315.6,1000.5,315.5,1002z"/>
|
||||
<path fill="#FFFFFF" d="M315.5,1007.8c0,0,5.6-1.2,5.6-4.4c0-3.2,0-3.2,0-3.2s-3.1,1.5-4.4,2.4
|
||||
C315.3,1003.4,315.6,1006.3,315.5,1007.8z"/>
|
||||
<path fill="#FFFFFF" d="M321.1,1009.2c0-3.2,0-3.2,0-3.2s-3.1,1.5-4.4,2.4c-1.3,0.8-1.2,3.7-1.3,5.3
|
||||
C315.4,1013.6,321.1,1012.4,321.1,1009.2z"/>
|
||||
<path fill="#FFFFFF" d="M316.5,993.6c0-1.5-0.3-3.4-2.1-5.2c0,0-2,2.5-2,4.9c0,1.6,0.9,2.9,2,4.3
|
||||
C314.4,997.5,316.5,995.1,316.5,993.6z"/>
|
||||
<path fill="#FFFFFF" d="M307.9,904.6c0.4,0,0.8,0,1.1-0.2c0.8,0.8,1.9,1.1,2.9,1.1c1.1,0,2.2-0.4,2.9-1.1
|
||||
c0.3,0.1,0.8,0.2,1.1,0.2c1.8,0,3.2-1.4,3.2-3.2s-1.4-3.2-3.2-3.2c-0.1,0-0.3,0-0.4,0c-0.8-1.2-2.2-1.9-3.6-1.9
|
||||
c-1.5,0-2.8,0.7-3.6,1.9c-0.1,0-0.3,0-0.4,0c-1.8,0-3.2,1.4-3.2,3.2C304.8,903.2,306.2,904.6,307.9,904.6z"/>
|
||||
<path fill="#FFFFFF" d="M312.9,910.1c0,0.5,0.4,0.9,0.9,0.9c0.5,0,0.9-0.4,0.9-0.9s-0.9-1.8-0.9-1.8S312.9,909.5,312.9,910.1z"
|
||||
/>
|
||||
<path fill="#FFFFFF" d="M315.5,908.2c0.5,0,0.9-0.4,0.9-0.9s-0.9-1.8-0.9-1.8s-0.9,1.3-0.9,1.8
|
||||
C314.5,907.8,315,908.2,315.5,908.2z"/>
|
||||
<path fill="#FFFFFF" d="M311.8,908.7c0-0.5-0.9-1.8-0.9-1.8s-0.9,1.3-0.9,1.8c0,0.5,0.4,0.9,0.9,0.9
|
||||
C311.4,909.6,311.8,909.2,311.8,908.7z"/>
|
||||
<path fill="#FFFFFF" d="M269.5,985.7c0,3.3,2.7,5.9,5.9,5.9c3.3,0,5.9-2.7,5.9-5.9c0-3.3-2.7-5.9-5.9-5.9
|
||||
S269.5,982.4,269.5,985.7z M279.8,985.7c0,2.5-2,4.5-4.4,4.5c-2.5,0-4.5-2-4.5-4.5s2-4.5,4.5-4.5
|
||||
C277.9,981.2,279.8,983.3,279.8,985.7z"/>
|
||||
<polygon fill="#FFFFFF" points="273.2,987.9 276.2,986.5 277.7,983.5 274.7,985 "/>
|
||||
<path fill="#FFFFFF" d="M323,912.3c0,0,0-0.1,0-0.1L323,912.3L323,912.3z"/>
|
||||
<path fill="#FFFFFF" d="M321.3,917.3c3.6-1,7.3,1.6,7.8,5.4c0,0.1,0,0.3,0,0.5c0.1,0,0.3,0,0.4,0c3-0.1,6.2-0.1,9.2-0.2
|
||||
c-1.3,0.3-2.2,1.5-2.2,2.9c0,1.7,1.4,3,3,3s3-1.4,3-3c0-1.5-1.1-2.8-2.6-3c2.3-0.1,1.8-0.1,2.2-2.1c0.2-1,0.3-2,0.4-2.9
|
||||
c0.1-0.9-0.1-1.1-1.1-1.2c-1.4,0-2.6-0.1-4-0.1c0,0-0.1,0-0.1-0.1c0-1,0.2-3.5,0.2-3.5s-0.5-0.4-1,0c0,1.2,0,2.3,0,3.6
|
||||
c0,0-1.8,0-4.2-0.1c-0.1,0-0.5-0.2-0.6-0.5c-0.3-1-1.2-2.8-2.2-5.8c0,0-0.6-1.2-1.9-1.2c-1.1,0-6.8,0-6.8,0v7.2
|
||||
c0,0-0.4,0.2-0.8,0.2C320.1,917.3,320.4,917.5,321.3,917.3z M341.3,925.8c0,0.9-0.8,1.6-1.6,1.6c-0.9,0-1.6-0.8-1.6-1.6
|
||||
c0-0.9,0.8-1.6,1.6-1.6C340.6,924.2,341.3,924.9,341.3,925.8z M323,912.1v-1.4h5.6l1.8,5.4l0,0c-2.4,0-5.2,0-7.4,0.1V912.1z"/>
|
||||
<path fill="#FFFFFF" d="M322.7,917.9c-3,0-5.5,2.5-5.5,5.5s2.5,5.5,5.5,5.5c3,0,5.5-2.5,5.5-5.5S325.8,917.9,322.7,917.9z
|
||||
M322.7,926.5c-1.7,0-3-1.4-3-3s1.4-3,3-3c1.7,0,3,1.4,3,3S324.4,926.5,322.7,926.5z"/>
|
||||
<path fill="#FFFFFF" d="M309.4,1018.2l-4-2.2c0.2-0.9,0.2-1.9,0-2.8c-0.8-2.8-4-4.5-6.8-3.7c-2.8,0.8-4.5,3.7-3.6,6.5
|
||||
c0.8,2.8,4,4.5,6.8,3.7c0.9-0.3,1.8-0.8,2.4-1.4l4,2.2c0.4,0.2,0.9,0,1.1-0.3l0.5-1C310,1018.8,309.8,1018.5,309.4,1018.2z
|
||||
M301.1,1017.6c-1.6,0.5-3.6-0.5-4-2.2c-0.5-1.6,0.5-3.4,2.1-3.8c1.6-0.5,3.6,0.5,4,2.2C303.7,1015.5,302.7,1017.2,301.1,1017.6
|
||||
z"/>
|
||||
<path fill="#FFFFFF" d="M286.6,973.9c3-3.5,1.4-5.9,0.9-6.9c-0.5-1-0.6-2.4-0.6-2.4l0.1-0.5l0.1-0.5c-0.7-0.2-1.4,0.1-1.4,0.1
|
||||
c0.1,1.1-0.1,2.3-0.3,2.7c-0.2,0.5-0.8,1.4-1.1,2s-1.1,2.4-5.1,4.1c-4,1.7-9.3,0.1-9.3,0.1c-1.4-0.3-2.5,0.2-2.5,0.2l-0.3,0.5
|
||||
l0,0.4l-0.1,0.2l0,0.3c3.9,6.1,12,4,12,4S283.5,977.3,286.6,973.9z"/>
|
||||
<path fill="#FFFFFF" d="M374.6,1010.6c1.8,0,3.5-0.3,5.1-1c0.6-0.2,0.8-0.6,0.8-1.3c0-0.3,0-0.7,0-1c0,0,0,0,0-0.1
|
||||
c0,0-0.1-0.2-0.3-0.2c-0.8,0-1-0.2-1.2-1c-0.2-0.5-0.3-1.1-0.6-1.6c2-0.5,1.7-1.9,1-3.7c-0.6,0.8-0.1,1.1-1.1,1.3
|
||||
c-0.9,0.2-1.5,0.7-1.9,1.5c0,0.1-0.1,0.3-0.2,0.6c-0.1-1,0.3-1.6,1.2-2.4c-0.4-0.4-2-0.2-2.5-0.5c-1.6-1.1-8.9-2.5-13.5,1
|
||||
c-0.2-0.2-0.5-0.4-0.8-0.6c1.1-0.4,1.5-1,1.3-1.9c-0.1-0.6-0.6-1-1.2-1c-1,0-1.3,0.5-1.5,2.1c-0.3-0.3-0.6-0.6-1-1
|
||||
c0,0.3-0.1,0.5,0,0.8c0.1,0.5,0.5,0.8,1,0.9c0.3,0,0.5,0.2,0.7,0.5c0.1,0.2,0.2,0.4,0.4,0.6c0.5,0.5,0.5,1.1,0.5,1.8
|
||||
c0,1.5,0,3,0.2,4.6c0.2,1.6,0.6,3.2,1.3,4.7c0.2,0.5,0.6,0.5,1,0.4c0.1,0,0.3-0.4,0.3-0.6c0.1-1.2,0.6-2.2,1.2-3.2
|
||||
c2.1,0.6,4.2,0.8,6.4,0.6c0.1,0,0.3,0.2,0.4,0.3c0.4,0.8,0.8,1.6,1.1,2.5c0.2,0.5,0.6,0.5,1,0.4c0.1,0,0.1-0.4,0.1-0.7
|
||||
c0-0.9,0-1.8,0-2.7c0.1,0,0.1,0,0.1-0.1C374.4,1010.6,374.5,1010.6,374.6,1010.6z M360.3,1000.6c-0.2-0.6-0.1-1,0.3-1
|
||||
c0.2,0,0.5,0,0.6,0.3C361.3,1000.3,361,1000.6,360.3,1000.6z"/>
|
||||
<path fill="#FFFFFF" d="M282.1,941.8c3.4-0.3,4.5-2,5.5-5.3c0.6-2,0.7-3.9,0.8-6c-0.1-1.7-0.1-3.4-0.3-5.1
|
||||
c-0.3-2.4-0.9-4.7-2.1-6.8c-0.9-1.7-1.1-2.7-3-3c-2-0.3-4.3,0.5-5.2,2.8c-0.2,0.6-0.5,1.2-0.7,1.9c-0.3,1.4-1.2,2.6-2.3,3.6
|
||||
c-2.9,2.7-3.9,6.2-3.2,10C272.4,938.9,277,942.2,282.1,941.8z M275.8,926c1.8-1.7,3-3.5,3.6-5.8c0.1-0.5,0.3-0.9,0.6-1.3
|
||||
c0.7-1.2,2.2-1.4,3.1-0.4c0.4,0.4,0.7,1,0.9,1.5c1.4,3.4,2,7,2.1,10.1c0,2.4-0.1,4.3-0.8,6.1c-0.9,2.6-2.7,3.8-5.1,3.6
|
||||
c-2.1-0.2-3.7-1.2-5-2.8C272.7,933.7,272.9,928.7,275.8,926z"/>
|
||||
<path fill="#FFFFFF" d="M280,938.1c1.6,0.1,2.8-0.3,3.6-1.8c1.4-2.8,1.5-5.7,0.5-8.8c-0.2-0.6-0.7-1.1-1.3-1.4
|
||||
c-1.8-0.8-3.6-0.8-5.4,0c-0.8,0.4-1.6,0.9-2,1.8c-0.2,0.5-0.1,0.8,0.3,1.1c0.8,0.4,1.5,0.8,2.3,1.2c0.2,0.1,0.4,0.3,0.7,0.5
|
||||
c0,0,0,0.1-0.1,0.2c-0.2,0-0.4,0-0.6-0.1c-0.9-0.2-1.8-0.5-2.7-0.8c-0.5-0.1-0.8,0-0.9,0.5c0,0.2-0.1,0.4-0.1,0.6
|
||||
C274.1,934.6,276.6,937.8,280,938.1z"/>
|
||||
<path fill="#FFFFFF" d="M280.6,923.8c0.5,0.1,1,0.2,1.5,0.3c1,0,1.4-0.3,1.4-1.3c0-0.7-0.1-1.4-0.3-2.1c-0.1-0.6-0.5-1-1.2-1
|
||||
c-0.7,0-1.3,0.2-1.5,0.9c-0.2,0.6-0.4,1.2-0.6,1.9C279.6,923.2,279.8,923.6,280.6,923.8z"/>
|
||||
<path fill="#FFFFFF" d="M294,971.9c-0.2,0-0.4,0-0.5-0.2c0,0-0.2-0.7-1-1.5c-0.2-0.2-0.4-0.3-0.6-0.5c-0.3-0.2-0.6-0.5-0.9-0.8
|
||||
c0.5,4.1,2.2,7.1,4.2,7.1c2.4,0,4.4-4.3,4.4-9.6s-2-9.6-4.4-9.6c-1.6,0-2.9,1.9-3.7,4.6c0.3,0.4,0.6,0.7,1,0.9
|
||||
c0.2,0.1,0.4,0.3,0.6,0.5c1,0.9,1.2,1.8,1.2,1.8c0,0,0,0,0,0.1c0,0.1-0.1,0.3-0.3,0.3c-0.2,0-0.4,0-0.5-0.2c0,0-0.2-0.7-1-1.5
|
||||
c-0.2-0.2-0.4-0.3-0.6-0.5c-0.2-0.1-0.4-0.3-0.7-0.5c-0.1,0.4-0.2,0.9-0.2,1.4c0.3,1.2,0.8,1.6,1.4,2c0.2,0.1,0.4,0.3,0.6,0.5
|
||||
c1,0.9,1.2,1.8,1.2,1.8c0,0,0,0,0,0.1c0,0.1-0.1,0.3-0.3,0.3c-0.2,0-0.4,0-0.5-0.2c0,0-0.2-0.7-1-1.5c-0.2-0.2-0.4-0.3-0.6-0.5
|
||||
c-0.3-0.2-0.8-0.5-1-1c0,0.3,0,0.6,0,0.9c0.3,1.8,0.9,2.2,1.6,2.7c0.2,0.1,0.4,0.3,0.6,0.5c1,0.9,1.2,1.8,1.2,1.8c0,0,0,0,0,0.1
|
||||
C294.3,971.7,294.2,971.9,294,971.9z"/>
|
||||
<path fill="#FFFFFF" d="M365.3,917.7c0.8,0.9,1.8,1.8,3,1.9c0.9,0.1,2-0.4,2.7-0.4c1.4,0,1.1,0.3,2.7,0.3c1.5,0,4.3-3.6,5-7.2
|
||||
c0.1-0.9,0-2.5-0.7-4c-0.8-1.8-3.3-2.5-4.8-2.2c-0.4,0-1.3,0.2-2,0.3c0.1-0.5,0.5-1.3,1.3-1.8c0.2-0.1,0.3-0.4,0.2-0.7
|
||||
c-0.1-0.2-0.4-0.3-0.7-0.2c-1.4,0.8-1.8,2.2-1.9,2.8c-0.6-0.1-2.3-0.4-2.9-0.4c-0.9,0-1.7,0.3-2.5,0.9c-0.7,0.5-1,1.3-1.3,2.1
|
||||
c-0.4,1.1-0.5,2.3-0.4,3.5C363.2,914.6,364,916.3,365.3,917.7z M368.3,908.5c0.8,0,1.4,0.6,1.4,1.3c0,0.9-0.6,1.7-1.4,1.7
|
||||
c-0.6,0-1.1-0.8-1.1-1.6C367.2,909.1,367.6,908.5,368.3,908.5z"/>
|
||||
<path fill="#FFFFFF" d="M369.3,905.2c0.5,0,1.2,0.1,1.5-0.5c0.3-0.6-0.1-1.1-0.5-1.6c-0.9-1-2.4-1.2-3.9-0.5
|
||||
c0.2,0.3,0.4,0.6,0.5,0.9C367.3,904.5,368.2,905,369.3,905.2z"/>
|
||||
<path fill="#FFFFFF" d="M333.1,908.2c1-2.1,2.4-3.6,2.4-3.6c2,0.8,5.5,1.6,8-0.1c3.3-2.3,2.9-7.4,7.6-10c1.1-0.6-9.2-3-14.6,0.1
|
||||
c-4,2.3-3.7,6.1-3.6,7.5c5.2-6.1,12.8-5.8,12.8-5.8s-10.9,3.8-14.1,11.3C331.3,908.1,332.8,908.9,333.1,908.2z"/>
|
||||
<path fill="#FFFFFF" d="M373,983.9c2.5-5-0.3-8.7-1.4-10c-1.1,9.6-9.1,14.5-9.1,14.5s8.5-11.1,6.7-20.9c-0.1-0.8-2.1-0.6-2,0.3
|
||||
c0.4,2.8,0.1,5.3,0.1,5.3c-2.6,0.6-6.6,2.1-8,5.5c-1.8,4.5,2,9.5-1,15.2C357.6,995.2,369.6,990.7,373,983.9z"/>
|
||||
<path fill="#FFFFFF" d="M283.9,946.2c-1,0.8-0.8,2.8,0,3.8c0.8,1,2.7,1.7,3.7,0.9c0.2-0.1,0.8-0.6,0.8-0.6
|
||||
c1.1,0.9,1.8,0,2.3,0.6c0.6,0.8,1.9,2.4,2.4,2.9c0.4,0.5,1.2,1,1.6,0.7c0.4-0.3,1.8-1.3,2.3-1.7c0.5-0.4,0.5-0.9,0.2-1.3
|
||||
s-1.1-0.3-1.5-0.8c-0.4-0.4-1.6-1.9-1.9-2.4c-0.5-0.6,0-1.4,0.8-1.7c6-2.3,8.2,1.2,10-0.2c1.4-1.1-0.1-5.7-3.4-9.8
|
||||
c-3.2-4.1-7.4-6.8-8.9-5.6C290.2,932.9,296,937.1,283.9,946.2z M294.1,933.4c0.3-0.2,3.3,1.4,5.8,4.6c2.5,3.2,3.2,6.2,2.8,6.4
|
||||
c-0.4,0.2-3.2-1-5.8-4.2C294.5,937,293.8,933.7,294.1,933.4z"/>
|
||||
<path fill="#FFFFFF" d="M272.6,970.7c4.2,0,7.6-2,7.6-3c0,0,0-0.3,0-3.1c0-2.9-5.2-5.3-5.2-7.3c0-2.1,5.2-4.4,5.2-7.3
|
||||
s0-3.1,0-3.1c0-1.1-3.5-3-7.6-3c-4.2,0-7.6,1.9-7.6,3c0,0,0,0.3,0,3.1c0,2.9,5.2,5.3,5.2,7.3c0,2.1-5.2,4.4-5.2,7.3s0,3.1,0,3.1
|
||||
C265,968.7,268.5,970.7,272.6,970.7z M266.8,946.8c0.9-0.6,2.7-1.5,5.6-1.5c2.9,0,5.4,1.5,5.4,1.5c0.2,0.1,0.9,0.5,0.4,0.8
|
||||
c-1.1,0.7-3.4,1.4-5.9,1.4c-2.6,0-4.7-0.8-5.8-1.4C265.9,947.2,266.8,946.8,266.8,946.8z M266.5,964.5c0-0.9,1.4-2.3,2.4-3.3
|
||||
c1.4-1.4,2.8-2.4,2.8-4c0-1.6-1.4-2.7-2.8-4c-1-1-2.5-2.4-2.5-3.3l0-1.3c1.4,0.8,3.6,1.5,5.9,1.5c2.4,0,4.6-0.7,6-1.5l0,1.3
|
||||
c0,0.9-1.4,2.3-2.5,3.3c-1.4,1.4-2.8,2.4-2.8,4c0,1.6,1.1,2.7,2.6,4c1,1,2.3,2.4,2.3,3.3v1.8c-1-0.6-4.8-1-4.8-3
|
||||
c0-1-1.4-1-1.4,0c0,2-4.1,2.3-5.1,3L266.5,964.5L266.5,964.5z"/>
|
||||
<path fill="#FFFFFF" d="M372.4,929.8c0,5.6,4.5,10.1,10.1,10.1c5.6,0,10.1-4.5,10.1-10.1c0-5.6-4.5-10.1-10.1-10.1
|
||||
C376.9,919.7,372.4,924.2,372.4,929.8z M385.3,921.6c3.4,1.1,5.9,4.4,5.9,8.1c0,2-0.7,3.8-1.8,5.3c-0.3-0.2-0.6-0.9-0.3-1.6
|
||||
c0.3-0.7,0.4-2.3,0.3-2.9c0-0.6-0.4-2.1-1.3-2.2c-0.9,0-1.5-0.3-2-1.4c-1.1-2.2,2.1-2.6,0.9-3.8c-0.3-0.3-1.9,1.4-2.1-0.9
|
||||
C385,922.1,385.1,921.9,385.3,921.6z M387.3,937c-1.4,0.9-3,1.4-4.8,1.4c-0.9,0-1.9-0.1-2.7-0.4c0.5-0.3,0.6-0.6,1-0.6
|
||||
c0.5,0,1-0.2,1.6-0.3c0.5-0.1,1.5-0.6,2.4-0.8C385.5,936.2,386.9,936.3,387.3,937z M381.3,921.3c-0.2,0.4-0.8,0.6-1.1,0.9
|
||||
c-0.8,0.6-1,0.5-1.4,1.2c-0.4,0.6-1.7,1.5-1.7,2s0.6,1,0.9,0.9c0.3-0.1,1.2-0.1,1.7,0.1c0.5,0.2,4.1,0.3,2.9,3.5
|
||||
c-0.3,1-2,0.8-2.4,2.4c0,0.2-0.3,1.2-0.3,1.6c0,0.5,0.3,2.5-0.1,2.5c-0.5,0-1.8-1.7-1.8-2.1c0-0.3-0.3-1.4-0.3-2.4
|
||||
s-1.6-0.9-1.6-2.2c0-1.1,0.9-1.7,0.7-2.2c-0.2-0.5-1.7-0.5-2.4-0.6C375.6,923.8,378.2,921.7,381.3,921.3z"/>
|
||||
<path fill="#FFFFFF" d="M334.1,995.5c-2,0-3.7,1.7-3.7,3.7s1.7,3.7,3.7,3.7c2,0,3.7-1.7,3.7-3.7
|
||||
C337.8,997.1,336.1,995.5,334.1,995.5z M332.5,1000.7c0-0.1-0.1-0.5-0.1-0.8s-0.6-0.3-0.6-0.8c0-0.4,0.3-0.6,0.2-0.8
|
||||
c0-0.2-0.6-0.2-0.8-0.2c0.4-1,1.4-1.8,2.5-2c-0.1,0.1-0.3,0.2-0.4,0.3c-0.2,0.2-0.4,0.2-0.5,0.4c-0.1,0.2-0.6,0.5-0.6,0.8
|
||||
c0,0.1,0.2,0.3,0.3,0.3c0.1,0,0.4,0,0.6,0c0.2,0,1.5,0.1,1.1,1.2c-0.1,0.3-0.8,0.3-0.9,0.9c0,0.1-0.1,0.4-0.1,0.6
|
||||
c0,0.2,0.1,0.9,0,0.9C333,1001.5,332.5,1000.8,332.5,1000.7z M334.1,1002.3c-0.3,0-0.7,0-1-0.1c0.2-0.1,0.2-0.2,0.4-0.2
|
||||
c0.2,0,0.3-0.1,0.6-0.1c0.2,0,0.5-0.2,0.8-0.2c0.2,0,0.8,0,0.9,0.2C335.3,1002.1,334.8,1002.3,334.1,1002.3z M336.6,1001.1
|
||||
c-0.1-0.1-0.2-0.3-0.1-0.6c0.1-0.2,0.1-0.8,0.1-1.1c0-0.2-0.1-0.8-0.5-0.8c-0.3,0-0.5-0.1-0.8-0.5c-0.4-0.8,0.8-0.9,0.3-1.4
|
||||
c-0.1-0.1-0.7,0.5-0.8-0.3c0,0,0-0.1,0.1-0.2c1.2,0.4,2.2,1.6,2.2,3C337.3,999.9,337,1000.5,336.6,1001.1z"/>
|
||||
<path fill="#FFFFFF" d="M287.9,1011.5c0,0.1,0,0.2,0,0.4c0,0.9,0.8,1.6,1.7,1.6c0.9,0,1.6-0.6,1.7-1.5c0-0.1,0-0.3,0-0.4
|
||||
c0-0.5,0.2-0.6,0.6-0.8c3.3-0.8,5.8-3.4,6.3-6.6c0-0.4,0-0.8,0.2-1.1c0.3-0.2,0.8-0.4,0.9-0.8c0.1-0.2-0.2-0.7-0.3-1.1
|
||||
c0.5-0.5,0.5-0.8-0.1-1.5c0.7-0.6,0.7-1,0-1.6c0.4-0.2,0.7-0.6,0.5-1c-0.1-0.3-0.5-0.5-0.8-0.7c0,0,0,0.1-0.1,0.1
|
||||
c0-0.3,0-0.6-0.2-0.8c-0.2-0.2-0.5-0.5-0.8-0.6c-0.1,0-0.5,0.3-0.6,0.5c-0.3,0.7-0.5,1.4-0.9,2.1c-0.3,0.7-0.7,1.4-1.1,2
|
||||
c-1.4,1.7-3.2,2.3-5.3,1.8c-2.1-0.4-3.5-1.7-4-3.7c-0.1-0.4-0.1-0.8-0.2-1.2c0.4-0.3,1.1-0.5,0.8-1.1c-0.1-0.3-0.6-0.5-1-0.9
|
||||
c0-0.2,0.1-0.8-0.4-1c-0.5-0.2-0.8,0.1-1.1,0.6c-0.3-0.4-0.7-0.8-1.2-0.5c-0.3,0.2-0.4,0.7-0.8,1.1c-0.3,0-0.9,0-1,0.6
|
||||
c0,0.4,0.3,0.8,1.2,1c-0.6,0.7-1.5,0.6-2.2,1.2c0.5,0.3,1,0.6,1.6,0.9c0.3,0.1,0.4,0.3,0.3,0.6c-0.1,1.1-0.1,2.2-0.2,3.3
|
||||
c-0.4,4.7,2.8,7.3,5.8,8.1C287.7,1010.8,287.9,1010.9,287.9,1011.5z M283.2,997.7c-0.1,0-0.3-0.2-0.7-0.4
|
||||
c0.3-0.2,0.5-0.4,0.7-0.4c0.1,0,0.4,0.3,0.4,0.4C283.5,997.5,283.3,997.7,283.2,997.7z"/>
|
||||
<path fill="#FFFFFF" d="M372.7,950h-3.3c-0.6,0-1.4,0.3-1.7,0.8l-4.3,5.6c-0.3,0.5-0.1,0.5,0.4,0.5h17.6c0.6,0,0.8,0,0.5-0.5
|
||||
l-3.8-5.6c-0.3-0.5-1.1-0.8-1.7-0.8h-0.8v-2h-2.9V950z"/>
|
||||
<path fill="#FFFFFF" d="M376.6,944.8l0.2,0c0.5-0.1,1-0.5,1.4-1.1c0.3-0.6,0.4-1.8,0.3-2.5c-0.3,1-1.1,1.4-1.9,1.7
|
||||
c-0.2,0.1-0.4,0.2-0.6,0.2c-0.2,0.1-0.5,0.2-0.8,0.3c-0.8,0.4-1.1,1-1.2,2c-0.1,0.4-0.1,0.8-0.1,1.4c0.4-1,0.8-1.5,1.7-1.8
|
||||
C375.9,945,376.3,944.9,376.6,944.8z"/>
|
||||
<path fill="#FFFFFF" d="M380.6,964.8h0.5v-6.1c0-0.6,0-0.8,0-0.8h-0.5h-0.7h-7.7h-0.7H366h-2.1v1.1v5.7h2.1h1.4v-4.1
|
||||
c0,0,0.1,0.1,0.5,0.1h2.7c0,0,0.2-0.5,0.2-0.1v4h0.8h0.7h7.7H380.6L380.6,964.8z M378.1,962.8c0,0.1,0.3,0.5,0.2,0.5h-2.9
|
||||
c-0.1,0-0.3-0.4-0.3-0.5v-2.9c0-0.1,0.2,0,0.3,0h2.9c0.1,0-0.2,0-0.2,0V962.8z"/>
|
||||
<path fill="#FFFFFF" d="M337.9,1009c0-0.3-0.2-0.5-0.5-0.5h-6.8c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5h6.8
|
||||
C337.7,1009.5,337.9,1009.3,337.9,1009z"/>
|
||||
<rect x="331.9" y="1007.1" fill="#FFFFFF" width="4.9" height="1.5"/>
|
||||
<path fill="#FFFFFF" d="M325,892.9c-2.3,0.4-4,2.3-4.2,4.6l4.4-0.2L325,892.9z"/>
|
||||
<path fill="#FFFFFF" d="M326,898.6l-5.1,0.2c0.4,2.5,2.7,4.3,5.2,4.1c2.8-0.1,4.9-2.5,4.8-5.3c-0.1-2.6-2.2-4.6-4.6-4.8l0.2,5.1
|
||||
C326.5,898.2,326.2,898.5,326,898.6z"/>
|
||||
<path fill="#FFFFFF" d="M304.8,912.1c0.2,0,0.4-0.3,0.7-0.3c0.2,0,0.4-0.3,0.6-0.4l2.8-2c0.1-0.1,0.2-0.3,0.2-0.4
|
||||
c0-0.1-0.1-0.3-0.2-0.4l-2.8-1.9c-0.1-0.1-0.4-0.4-0.6-0.5c-0.2,0-0.5-0.3-0.7-0.3h-8l0.9,6.4H304.8L304.8,912.1z"/>
|
||||
<path fill="#FFFFFF" d="M285.9,911.7l2.8,1.9c0.1,0.1,0.4,0.2,0.6,0.3c0.2,0,0.5,0.2,0.7,0.2h4.1v10.2c0,0.2,0.3,0.1,0.5,0.1h1
|
||||
c0.2,0,0.3,0.1,0.3-0.1v-20.2c0-0.2-0.1-0.8-0.3-0.8h-1c-0.2,0-0.5,0.6-0.5,0.8v4.6H290c-0.2,0-0.4,0-0.7,0s-0.4,0.1-0.6,0.2
|
||||
l-2.8,1.9c-0.1,0.1-0.2,0.2-0.2,0.4C285.7,911.4,285.8,911.5,285.9,911.7z"/>
|
||||
<path fill="#FFFFFF" d="M301.9,916.3v16.1c0,1.1,1.2,2.4,2.3,2.4h7.8c1.1,0,2.2-1.2,2.2-2.4v-16.1c0-1.1-1-1.7-2.2-1.7h-7.8
|
||||
C303.1,914.6,301.9,915.2,301.9,916.3z M308.2,933.6c-0.8,0-1.4-0.4-1.4-1c0-0.6,0.6-1,1.4-1s1.4,0.4,1.4,1
|
||||
C309.6,933.1,308.9,933.6,308.2,933.6z M312.7,917.1v13.3h-8.9v-13.3H312.7z"/>
|
||||
<path fill="#FFFFFF" d="M347.5,904c0,6.7,7,15.5,7,15.5s7-8.8,7-15.5c0-3.9-3.1-7-7-7C350.7,896.9,347.5,900.1,347.5,904z
|
||||
M354.5,900.3c2.1,0,3.8,1.7,3.8,3.8c0,2.1-1.7,3.8-3.8,3.8c-2.1,0-3.8-1.7-3.8-3.8C350.7,902,352.5,900.3,354.5,900.3z"/>
|
||||
<path fill="#FFFFFF" d="M310.3,923c0-1.2-0.9-2.1-2.1-2.1s-2.1,0.9-2.1,2.1c0,2,2.1,4.6,2.1,4.6S310.3,925.1,310.3,923z
|
||||
M307,923.1c0-0.6,0.5-1.1,1.1-1.1s1.1,0.5,1.1,1.1s-0.5,1.1-1.1,1.1C307.5,924.2,307,923.7,307,923.1z"/>
|
||||
<path fill="#FFFFFF" d="M355.2,922.1l-1.2,1.1l-1.2-1.1c-1.7-1.6-4.6-1.6-6.3,0c-2,1.8-2,4.7,0,6.5l7.5,6.9l7.5-6.9
|
||||
c2-1.8,2-4.7,0-6.5C359.7,920.5,356.9,920.5,355.2,922.1z"/>
|
||||
<path fill="#FFFFFF" d="M385.7,973.9l-1.7,1.4c-0.1,0.1-0.1,0.3,0,0.4l9.6,10.9c0.2,0.2,0.6,0.3,0.9,0l1.1-0.9
|
||||
c0.2-0.2,0.3-0.6,0-0.9l-9.5-11C386.1,973.7,385.9,973.7,385.7,973.9z"/>
|
||||
<path fill="#FFFFFF" d="M385.2,966.7c-1.5,0.1-3.4,1.5-4.3,2.2c-1.2,0.8-1.7,1.3-1.8,1.4c-0.3,0.3,0,1-0.7,1.6
|
||||
c-0.6,0.6-1.1,0.1-1.5,0.5c-0.2,0.1-0.8,0.6-0.9,0.7c-0.1,0.1-0.2,0.3,0,0.5c0,0,1.5,1.6,1.6,1.8c0.1,0.1,0.4,0.2,0.6,0.1
|
||||
c0.2-0.2,0.8-0.6,0.8-0.8c0.1-0.1,0-1,0.4-1.4c1.1-0.8,2-0.2,3.1,1.1c0.1,0.1,0.3,0,0.4-0.1c0.1-0.1,1.7-1.5,1.8-1.6
|
||||
c0.1,0,0.1-0.2,0-0.3c-0.1-0.1-0.6-0.8-0.8-1.1c-2.1-2.8,5.7-4.6,4.5-4.6C388,966.6,385.6,966.6,385.2,966.7z"/>
|
||||
<path fill="#FFFFFF" d="M379.1,985.9l1.1,1.1c0.2,0.2,0.6,0.1,0.9-0.1l5.6-5.6l-1.7-2l-5.9,5.7
|
||||
C378.9,985.3,378.9,985.7,379.1,985.9z"/>
|
||||
<path fill="#FFFFFF" d="M391.2,973.2c-0.1,0.1-0.2,0.3-0.3,0.4l-1.6,1.6l1.6,1.8l1.9-1.8c0.1-0.1,0.3-0.2,0.4-0.3c0,0,0,0,0.1,0
|
||||
c0.1,0,0.3,0,0.4,0.1c0.3,0.2,0.7,0.5,1,0.8c0.2,0.2,0.4,0.2,0.7,0c0.3-0.3,0.6-0.6,0.9-1c0.5-0.5,1-1.1,1.5-1.6
|
||||
c0.8-0.9,1.2-1.9,1.2-2.9c0-0.4,0-0.8-0.1-1.2c-0.1-1-0.6-1.5-1.7-1.7c-0.2,0-0.5-0.1-0.8,0c-0.3,0-0.6,0-0.9,0
|
||||
c-0.8,0-1.5,0.2-2.2,0.8c-0.5,0.4-1,0.9-1.5,1.4c-0.5,0.5-1.1,1-1.7,1.6c-0.1,0.1-0.2,0.3,0,0.4c0.3,0.3,0.6,0.8,1,1.1
|
||||
c0.1,0.1,0.2,0.2,0.1,0.4C391.3,973,391.2,973.1,391.2,973.2z M392.5,972.9l2.4-2.2c0,0,0.2,0,0.2,0c0,0,0,0.1,0,0.2l-2.1,2.6
|
||||
c0,0-0.1-0.3-0.1,0.1l0,0c0,0-0.1-0.1-0.1-0.1l-0.3-0.3c0,0,0-0.1,0-0.1C392.4,973,392.5,972.9,392.5,972.9z"/>
|
||||
<path fill="#FFFFFF" d="M386,946.8c0,0.4,0,0.8,0.3,0.8h5.1v1.3c0,0.3-0.2,0.2,0.1,0.2h2c0.3,0,0.3,0.1,0.3-0.2v-1.3h4.9
|
||||
c0.4,0,0.5-0.4,0.5-0.8v-2.7H386L386,946.8L386,946.8z"/>
|
||||
<path fill="#FFFFFF" d="M392.9,954.3v-0.9c0-0.1-0.1-0.3-0.2-0.3s-0.2,0.1-0.2,0.3v0.9c-1.5,0.1-2.5,1.3-2.5,2.6
|
||||
c0,1.5,1.1,2.7,2.6,2.7c1.5,0,2.7-1.2,2.7-2.7C395.2,955.6,394.4,954.4,392.9,954.3z"/>
|
||||
<path fill="#FFFFFF" d="M398.2,949.5H387c-0.6,0-1,0.5-1.1,1.1l-1.3,11.6c0,0.3,0,0.8,0.3,1c0.2,0.2,0.5,0.5,0.8,0.5h13.9
|
||||
c0.3,0,0.6-0.2,0.8-0.5c0.2-0.2,0.3-0.6,0.3-0.9l-1.3-11.7C399.2,950.1,398.7,949.5,398.2,949.5z M392.5,961.5
|
||||
c-2.6,0-4.6-2.1-4.6-4.6s2.1-4.6,4.6-4.6c2.6,0,4.6,2.1,4.6,4.6S395.1,961.5,392.5,961.5z"/>
|
||||
<path fill="#FFFFFF" d="M343.9,1015.7v0.2h5.7c0.3,0,0.5-0.4,0.5-0.8s-0.2-0.8-0.5-0.8h-5.7h-0.7H342c-1.5,0-2.8,1-3.1,2.5h-4
|
||||
v1.5h4c0.4,1.5,1.6,2.9,3.1,2.9h1.2l0,0h6.4c0.3,0,0.5-0.4,0.5-0.8s-0.2-0.8-0.5-0.8h-5.7c-0.2,0-0.3,0-0.3-0.2
|
||||
c0-0.2,0.1-0.2,0.3-0.2h5.7c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.2-0.5-0.5-0.5h-5.7l0,0c-0.2,0-0.3-0.3-0.3-0.5
|
||||
c0-0.2,0.1-0.5,0.3-0.5h5.7c0.3,0,0.5-0.2,0.5-0.5c0-0.3-0.2-0.5-0.5-0.5h-5.5v-0.2c-0.5,0-0.5,0-0.5-0.2
|
||||
C343.7,1015.8,343.7,1015.7,343.9,1015.7z"/>
|
||||
<path fill="#FFFFFF" d="M318.8,1019.4h13.9c0.6,0,1.7-0.3,1.7-0.8v-1.7c0-0.5-1.1-0.9-1.7-0.9h-13.9c-0.9,0-1.7,0.8-1.7,1.7
|
||||
C317.1,1018.6,317.9,1019.4,318.8,1019.4z"/>
|
||||
<path fill="#FFFFFF" d="M349.5,1024.5c0-0.9-0.8-1.7-1.7-1.7h-14.4c-0.6,0-1,0.3-1.5,0.8v1.7c0.5,0.5,0.8,0.9,1.5,0.9h14.4
|
||||
C348.7,1026.3,349.5,1025.5,349.5,1024.5z"/>
|
||||
<path fill="#FFFFFF" d="M331.9,1025.3v-1.5h-2H327h-12.8c0,0-1.3,0.6,0.6,1.4c2.9,1.2,5.2,1.4,7.5,1.7c0.8,0.1,3.4,0.7,5-0.8
|
||||
c0.6-0.5,1.2-0.9,1.7-0.9H331.9z"/>
|
||||
<path fill="#FFFFFF" d="M351.2,1010.6l4.2-0.4c0-0.4-0.1-0.9-0.1-1.4c0-1.2-0.1-2.4-0.1-3.6c0-0.9,0-1.8,0-2.7
|
||||
c0-1,0.1-2.1,0.1-3.1c0-0.8,0.1-1.7,0.2-2.6c0.1-1,0.2-2,0.4-3c0.1-0.8,0.2-1.6,0.3-2.4c0-0.2-0.1-0.4-0.3-0.5
|
||||
c-0.1,0-0.3,0-0.4,0c-2.1,0-4.3,0-6.3,0c0,0,0,0,0,0c-0.5,0-1,0-1.5,0c-0.3,0-0.3,0-0.3,0.3c0,0.4-0.1,0.8-0.1,1.1
|
||||
c0,0.8,0,1.6,0,2.4c0,0.8,0,1.6,0.1,2.4c0,0.8,0.1,1.6,0.1,2.4c0,0.8,0.1,1.4,0.1,2.2c0,1,0.1,2,0.2,2.9c0,0.8,0.1,1.6,0.2,2.5
|
||||
c0.1,0.8,0.1,1.6,0.2,2.5c0,0.4,0.1,0.8,0.1,1.1c0,0.1,0,0.2,0.2,0.2c0.2,0,0.5,0,0.8,0c0.4,0,0.8,0,1.2-0.1
|
||||
C350.9,1010.7,351,1010.6,351.2,1010.6z M354,992.4c0.3,0,0.6,0.2,0.6,0.5c0,0.3-0.2,0.5-0.5,0.5c-0.3,0-0.5-0.2-0.6-0.6
|
||||
C353.5,992.6,353.7,992.4,354,992.4z"/>
|
||||
<path fill="#FFFFFF" d="M354.5,1022.3c-0.2,0.8,0.5,1.7,1.3,1.7c0.7,0,1.3-0.5,1.5-1.2c0.1-0.6,0.1-1.3,0-1.9
|
||||
c-0.2-1.3-0.5-2.7-0.8-3.9c-0.2-1-0.4-2.1-0.6-3.1c-0.1-0.8-0.3-1.6-0.3-2.4v0l-2.7,0.2c0.1,0.5,0.2,1,0.3,1.5
|
||||
c0.3,1.6,0.5,3.2,0.9,4.8c0.2,1,0.4,2,0.7,3c0,0.2,0,0.4,0,0.6C354.6,1021.8,354.5,1022,354.5,1022.3z"/>
|
||||
<path fill="#FFFFFF" d="M308.5,990.1c0.7,0,1.3,0,2-0.1c0,0,0,0,0-0.1c0.3-0.6,0-1.5-0.7-1.7c0-0.6,0.1-1.2,0-1.8
|
||||
c-0.1-0.8-0.1-1.8-0.5-2.4c-1-1.5-2.6-3.2-3.8-4.5c-0.9-1-1.8-1.1-3.1-1.1c-5.1,0-10.2-0.1-15.4-0.1c-1.6,0-2.3,0.6-2.3,2.2
|
||||
c0,2.5,0,5-0.1,7.7c-0.5,0-0.7,0.2-0.6,0.7c0,0.2,0,0.4,0,0.6c0,0.3,0.1,0.5,0.5,0.5c0.4,0,0.9,0,1.4,0c0.4,0,0.6-0.1,0.8-0.5
|
||||
c0.4-1.4,1.6-2.3,3-2.3c1.5,0,2.6,0.8,3,2.3c0.1,0.5,0.4,0.6,0.8,0.6c2.5,0,5,0,7.4,0.1c0.5,0,0.8-0.2,0.9-0.6
|
||||
c0.4-1.4,1.6-2.2,3-2.2c1.4,0,2.5,0.8,3,2.2C308.1,989.7,308.3,990.1,308.5,990.1z M307.2,983.9L307.2,983.9l-4.8,0.2
|
||||
c-0.3,0-0.6-0.2-0.6-0.5l0-3.5c0-0.3,0.3-0.6,0.7-0.6l1.5,0c0,0,0.1,0,0.2,0c0.2,0,0.3,0.1,3.5,3.7c0.1,0.1,0.2,0,0.2,0.2
|
||||
C307.8,983.9,307.5,983.9,307.2,983.9z"/>
|
||||
<path fill="#FFFFFF" d="M289.9,987.5c-1.5,0-2.8,1.2-2.8,2.8s1.2,2.8,2.8,2.8s2.8-1.2,2.8-2.8
|
||||
C292.6,988.8,291.4,987.6,289.9,987.5z"/>
|
||||
<path fill="#FFFFFF" d="M305,987.7c-1.5,0-2.8,1.2-2.8,2.8s1.2,2.8,2.8,2.8s2.8-1.2,2.8-2.8C307.8,989,306.6,987.7,305,987.7z"
|
||||
/>
|
||||
<path fill="#FFFFFF" d="M391.2,993.8c0-0.4-1.2-0.9-5.2-0.3c0,0,1-0.8,1.4-1c0.4-0.1,2.2-1.2,1.8-2.6c-0.3-1.4-0.8-0.5-1.5,0.5
|
||||
c-0.6,1.1-1.4,2.1-2.5,2.7c0,0-0.3-2.2-1.6-2.2c-0.4,0-2.1,0-3.9,0.2l-0.3,0c-0.2,0-0.5,0-0.7,0.1c0,0-0.1,0-0.1,0.1v2.3
|
||||
c0,0.2,0,0.3-0.2,0.3c-0.2,0-0.2-0.1-0.2-0.3v-2.3l0,0c-0.5,0-0.6,0.1-0.9,0.1c0,0-3.6,0.5-6,1.3h0c0,0-0.1,0-0.1,0
|
||||
c-0.1,0-0.3,0.1-0.4,0.1c-0.1,0-0.2,0-0.3,0.1c0,0,0,0-0.1,0c0,0-0.1,0-0.1,0l0,0c-0.4,0.2-0.8,0.3-1.2,0.5c0,0-0.4,0.2-0.1,0.8
|
||||
c0.1,0.3,2.2,1.2,6.1,1.8v-1.8c0-0.2,0-0.3,0.2-0.3c0.2,0,0.2,0.1,0.2,0.3v1.9c0.5,0,0.6,0,0.9,0.1l0.4,0
|
||||
c1.3,0.1,2.6,0.2,5.1,0.3v-1.5c0-0.2,0-0.3,0.2-0.3c0.2,0,0.2,0.1,0.2,0.3v1.5h0.4c0.5,0,0.8,0,1.3,0c0,0,1.3,0.1,1.4-2.3
|
||||
c0,0,2.2-0.4,2.1,2.2c-0.1,1.9,1.5,1.9,1.5,0.6c0-1.3-0.3-2.8-2.8-3.3c0,0,2,0.2,3.6,0.5C391,994.8,391.2,994.3,391.2,993.8z"/>
|
||||
</g>
|
||||
<g>
|
||||
<polygon fill="#FFFFFF" points="610.4,990.8 610,990.8 596.3,973.1 592.1,973.1 592.1,999.7 598,999.7 598,982 597.7,982
|
||||
611.5,999.7 615.2,999.7 615.2,974.1 610.4,974.1 "/>
|
||||
<polygon fill="#FFFFFF" points="624.6,999.7 637.4,999.7 637.4,994.8 629,994.8 629,988.4 637.4,988.4 637.4,983.9 629,983.9
|
||||
629,977.5 637.4,977.5 637.4,974.1 624.6,974.1 "/>
|
||||
<polygon fill="#FFFFFF" points="644.3,977.5 649.7,977.5 649.7,999.7 654.1,999.7 654.1,977.5 660.5,977.5 660.5,974.1
|
||||
644.3,974.1 "/>
|
||||
<polygon fill="#FFFFFF" points="688.9,991.8 688.9,991.8 683.4,973.1 680.4,973.1 675.2,991.8 675.2,991.8 669.9,974.1
|
||||
664.5,974.1 672.9,999.7 676.6,999.7 681.5,983.9 681.6,983.9 686.8,999.7 690.5,999.7 699.4,974.1 694,974.1 "/>
|
||||
<path fill="#FFFFFF" d="M717.6,972.9c-7.8,0-12.9,5.9-12.9,13.7c0,7.7,5,13.8,12.9,13.8c8,0,12.9-6.1,12.9-13.8
|
||||
C730.5,978.9,725.3,972.9,717.6,972.9z M717.6,995.4c-5.6,0-7.6-5-7.6-9c0-4.2,2.8-8.4,7.6-8.4c4.8,0,7.6,4.3,7.6,8.4
|
||||
C725.2,990.4,723.2,995.4,717.6,995.4z"/>
|
||||
<path fill="#FFFFFF" d="M753.8,981.7c0-5.6-3.6-7.6-8.7-7.6h-7.3v25.6h5.9v-10.3h-0.3l6.4,10.3h6.2l-7.4-10.9
|
||||
C752,988.2,753.8,985,753.8,981.7z M743.9,985.9h-0.2v-8.4h0.3c2.7,0,4.7,0.9,4.7,4.1C748.7,984.8,746.7,985.9,743.9,985.9z"/>
|
||||
<polygon fill="#FFFFFF" points="782.2,974.1 775.9,974.1 767.8,984.4 767.7,984.4 767.7,974.1 762.3,974.1 762.3,999.7
|
||||
767.7,999.7 767.7,987.4 767.8,987.4 776.2,999.7 782.7,999.7 772.3,985.9 "/>
|
||||
<path fill="#FFFFFF" d="M448.7,915.8c-12.8,0-21.2,9.7-21.2,22.4c0,12.6,8.1,22.6,21.2,22.6c13.1,0,21.2-10,21.2-22.6
|
||||
C469.8,925.6,461.4,915.8,448.7,915.8z M448.7,952.6c-9.2,0-12.5-8.1-12.5-14.7c0-6.9,4.7-13.9,12.5-13.9s12.5,7,12.5,13.9
|
||||
C461.2,944.5,457.9,952.6,448.7,952.6z"/>
|
||||
<path fill="#FFFFFF" d="M490.9,917.5h-11.4v42.3h7.9v-16.2h4.7c8.8,0,13.7-4.1,13.7-13.1C505.7,920.8,499.8,917.5,490.9,917.5z
|
||||
M489.6,937.2h-2.2v-13.3h2c4.7,0,7.8,1,7.8,6.5C497.2,936,494.5,937.2,489.6,937.2z"/>
|
||||
<polygon fill="#FFFFFF" points="515.4,959.8 537.5,959.8 537.5,952.5 523.7,952.5 523.7,941.2 536.6,941.2 536.6,933.8
|
||||
523.7,933.8 523.7,923.9 537.5,923.9 537.5,917.5 515.4,917.5 "/>
|
||||
<polygon fill="#FFFFFF" points="576.9,946.1 577,946.1 554.5,915.6 548.4,915.6 548.4,959.8 557.2,959.8 557.2,930.3 557,930.3
|
||||
579.5,960.8 585.7,960.8 585.7,917.5 576.9,917.5 "/>
|
||||
<polygon fill="#FFFFFF" points="619.2,959.8 627.6,959.8 627.6,941.2 639.9,941.2 639.9,933.8 627.6,933.8 627.6,923.9
|
||||
640.9,923.9 640.9,917.5 619.2,917.5 "/>
|
||||
<path fill="#FFFFFF" d="M670.3,960.8c13,0,21.2-10,21.2-22.6c0-12.7-8.4-22.4-21.2-22.4c-12.8,0-21.2,9.7-21.2,22.4
|
||||
C649.2,950.8,657.3,960.8,670.3,960.8z M670.3,924c7.9,0,12.5,7,12.5,13.9c0,6.6-3.3,14.7-12.5,14.7c-9.2,0-12.5-8.1-12.5-14.7
|
||||
C657.8,931,662.4,924,670.3,924z"/>
|
||||
<path fill="#FFFFFF" d="M720.3,915.8c-12.8,0-21.2,9.7-21.2,22.4c0,12.6,8.1,22.6,21.2,22.6s21.2-10,21.2-22.6
|
||||
C741.5,925.6,733.1,915.8,720.3,915.8z M720.3,952.6c-9.2,0-12.5-8.1-12.5-14.7c0-6.9,4.7-13.9,12.5-13.9
|
||||
c7.9,0,12.5,7,12.5,13.9C732.9,944.5,729.6,952.6,720.3,952.6z"/>
|
||||
<path fill="#FFFFFF" d="M783.8,938.7c0-12.2-8.3-21.2-20.7-21.2H752v42.3h11.1C775.3,959.8,783.8,950.7,783.8,938.7z
|
||||
M759.9,952.5v-28.6h1.1c9.4,0,14.2,5,14.2,14.3c0,8.4-4,14.3-14.2,14.3L759.9,952.5L759.9,952.5z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 82 KiB |
@@ -1,3 +1,3 @@
|
||||
angular.module("ofn.admin", ["ngResource", "ngAnimate", "ofn.dropdown", "admin.products", "infinite-scroll"]).config ($httpProvider) ->
|
||||
angular.module("ofn.admin", ["ngResource", "ngAnimate", "ofn.dropdown", "admin.products", "admin.taxons", "infinite-scroll"]).config ($httpProvider) ->
|
||||
$httpProvider.defaults.headers.common["X-CSRF-Token"] = $("meta[name=csrf-token]").attr("content")
|
||||
$httpProvider.defaults.headers.common["Accept"] = "application/json, text/javascript, */*"
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
//= require ./payment_methods/payment_methods
|
||||
//= require ./products/products
|
||||
//= require ./shipping_methods/shipping_methods
|
||||
//= require ./side_menu/side_menu
|
||||
//= require ./taxons/taxons
|
||||
//= require ./utils/utils
|
||||
//= require ./users/users
|
||||
//= require textAngular.min.js
|
||||
|
||||
@@ -1,11 +1,7 @@
|
||||
angular.module("ofn.admin").controller "AdminProductEditCtrl", [
|
||||
"$scope", "$timeout", "$http", "dataFetcher", "DirtyProducts", "VariantUnitManager", "producers", "Taxons", "SpreeApiKey",
|
||||
($scope, $timeout, $http, dataFetcher, DirtyProducts, VariantUnitManager, producers, Taxons, SpreeApiKey) ->
|
||||
angular.module("ofn.admin").controller "AdminProductEditCtrl", ($scope, $timeout, $http, BulkProducts, DisplayProperties, dataFetcher, DirtyProducts, VariantUnitManager, StatusMessage, producers, Taxons, SpreeApiAuth) ->
|
||||
$scope.loading = true
|
||||
|
||||
$scope.updateStatusMessage =
|
||||
text: ""
|
||||
style: {}
|
||||
$scope.StatusMessage = StatusMessage
|
||||
|
||||
$scope.columns =
|
||||
producer: {name: "Producer", visible: true}
|
||||
@@ -38,60 +34,35 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [
|
||||
$scope.filterTaxons = [{id: "0", name: ""}].concat $scope.taxons
|
||||
$scope.producerFilter = "0"
|
||||
$scope.categoryFilter = "0"
|
||||
$scope.products = []
|
||||
$scope.products = BulkProducts.products
|
||||
$scope.filteredProducts = []
|
||||
$scope.currentFilters = []
|
||||
$scope.limit = 15
|
||||
$scope.productsWithUnsavedVariants = []
|
||||
$scope.query = ""
|
||||
$scope.DisplayProperties = DisplayProperties
|
||||
|
||||
$scope.initialise = ->
|
||||
authorise_api_reponse = ""
|
||||
dataFetcher("/api/users/authorise_api?token=" + SpreeApiKey).then (data) ->
|
||||
authorise_api_reponse = data
|
||||
$scope.spree_api_key_ok = data.hasOwnProperty("success") and data["success"] == "Use of API Authorised"
|
||||
if $scope.spree_api_key_ok
|
||||
$http.defaults.headers.common["X-Spree-Token"] = SpreeApiKey
|
||||
$scope.fetchProducts()
|
||||
else if authorise_api_reponse.hasOwnProperty("error")
|
||||
$scope.api_error_msg = authorise_api_reponse("error")
|
||||
else
|
||||
api_error_msg = "You don't have an API key yet. An attempt was made to generate one, but you are currently not authorised, please contact your site administrator for access."
|
||||
SpreeApiAuth.authorise()
|
||||
.then ->
|
||||
$scope.spree_api_key_ok = true
|
||||
$scope.fetchProducts()
|
||||
.catch (message) ->
|
||||
$scope.api_error_msg = message
|
||||
|
||||
$scope.$watchCollection '[query, producerFilter, categoryFilter]', ->
|
||||
$scope.limit = 15 # Reset limit whenever searching
|
||||
|
||||
$scope.fetchProducts = -> # WARNING: returns a promise
|
||||
$scope.fetchProducts = ->
|
||||
$scope.loading = true
|
||||
queryString = $scope.currentFilters.reduce (qs,f) ->
|
||||
return qs + "q[#{f.property.db_column}_#{f.predicate.predicate}]=#{f.value};"
|
||||
, ""
|
||||
return dataFetcher("/api/products/bulk_products?page=1;per_page=20;#{queryString}").then (data) ->
|
||||
$scope.resetProducts data.products
|
||||
BulkProducts.fetch($scope.currentFilters).then ->
|
||||
$scope.resetProducts()
|
||||
$scope.loading = false
|
||||
if data.pages > 1
|
||||
for page in [2..data.pages]
|
||||
dataFetcher("/api/products/bulk_products?page=#{page};per_page=20;#{queryString}").then (data) ->
|
||||
for product in data.products
|
||||
$scope.unpackProduct product
|
||||
$scope.products.push product
|
||||
|
||||
|
||||
$scope.resetProducts = (data) ->
|
||||
$scope.products = data
|
||||
$scope.resetProducts = ->
|
||||
DirtyProducts.clear()
|
||||
$scope.setMessage $scope.updateStatusMessage, "", {}, false
|
||||
$scope.displayProperties ||= {}
|
||||
angular.forEach $scope.products, (product) ->
|
||||
$scope.unpackProduct product
|
||||
|
||||
|
||||
$scope.unpackProduct = (product) ->
|
||||
$scope.displayProperties ||= {}
|
||||
$scope.displayProperties[product.id] ||= showVariants: false
|
||||
#$scope.matchProducer product
|
||||
$scope.loadVariantUnit product
|
||||
|
||||
StatusMessage.clear()
|
||||
|
||||
# $scope.matchProducer = (product) ->
|
||||
# for producer in $scope.producers
|
||||
@@ -99,37 +70,6 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [
|
||||
# product.producer = producer
|
||||
# break
|
||||
|
||||
$scope.loadVariantUnit = (product) ->
|
||||
product.variant_unit_with_scale =
|
||||
if product.variant_unit && product.variant_unit_scale && product.variant_unit != 'items'
|
||||
"#{product.variant_unit}_#{product.variant_unit_scale}"
|
||||
else if product.variant_unit
|
||||
product.variant_unit
|
||||
else
|
||||
null
|
||||
|
||||
$scope.loadVariantUnitValues product if product.variants
|
||||
$scope.loadVariantUnitValue product, product.master if product.master
|
||||
|
||||
$scope.loadVariantUnitValues = (product) ->
|
||||
for variant in product.variants
|
||||
$scope.loadVariantUnitValue product, variant
|
||||
|
||||
$scope.loadVariantUnitValue = (product, variant) ->
|
||||
unit_value = $scope.variantUnitValue product, variant
|
||||
unit_value = if unit_value? then unit_value else ''
|
||||
variant.unit_value_with_description = "#{unit_value} #{variant.unit_description || ''}".trim()
|
||||
|
||||
|
||||
$scope.variantUnitValue = (product, variant) ->
|
||||
if variant.unit_value?
|
||||
if product.variant_unit_scale
|
||||
variant.unit_value / product.variant_unit_scale
|
||||
else
|
||||
variant.unit_value
|
||||
else
|
||||
null
|
||||
|
||||
|
||||
$scope.updateOnHand = (product) ->
|
||||
on_demand_variants = []
|
||||
@@ -175,7 +115,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [
|
||||
on_hand: null
|
||||
price: null
|
||||
$scope.productsWithUnsavedVariants.push product
|
||||
$scope.displayProperties[product.id].showVariants = true
|
||||
DisplayProperties.setShowVariants product.id, true
|
||||
|
||||
|
||||
$scope.nextVariantId = ->
|
||||
@@ -183,12 +123,6 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [
|
||||
$scope.variantIdCounter -= 1
|
||||
$scope.variantIdCounter
|
||||
|
||||
$scope.updateVariantLists = (server_products) ->
|
||||
for product in $scope.productsWithUnsavedVariants
|
||||
server_product = $scope.findProduct(product.id, server_products)
|
||||
product.variants = server_product.variants
|
||||
$scope.loadVariantUnitValues product
|
||||
|
||||
$scope.deleteProduct = (product) ->
|
||||
if confirm("Are you sure?")
|
||||
$http(
|
||||
@@ -218,18 +152,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [
|
||||
|
||||
|
||||
$scope.cloneProduct = (product) ->
|
||||
dataFetcher("/admin/products/" + product.permalink_live + "/clone.json").then (data) ->
|
||||
# Ideally we would use Spree's built in respond_override helper here to redirect the
|
||||
# user after a successful clone with .json in the accept headers
|
||||
# However, at the time of writing there appears to be an issue which causes the
|
||||
# respond_with block in the destroy action of Spree::Admin::Product to break
|
||||
# when a respond_overrride for the clone action is used.
|
||||
id = data.product.id
|
||||
dataFetcher("/api/products/" + id + "?template=bulk_show").then (data) ->
|
||||
newProduct = data
|
||||
$scope.unpackProduct newProduct
|
||||
$scope.products.push newProduct
|
||||
|
||||
BulkProducts.cloneProduct product
|
||||
|
||||
$scope.hasVariants = (product) ->
|
||||
product.variants.length > 0
|
||||
@@ -257,7 +180,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [
|
||||
if productsToSubmit.length > 0
|
||||
$scope.updateProducts productsToSubmit # Don't submit an empty list
|
||||
else
|
||||
$scope.setMessage $scope.updateStatusMessage, "No changes to save.", color: "grey", 3000
|
||||
StatusMessage.display 'alert', 'No changes to save.'
|
||||
|
||||
|
||||
$scope.updateProducts = (productsToSubmit) ->
|
||||
@@ -270,7 +193,7 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [
|
||||
filters: $scope.currentFilters
|
||||
).success((data) ->
|
||||
DirtyProducts.clear()
|
||||
$scope.updateVariantLists(data.products)
|
||||
BulkProducts.updateVariantLists(data.products, $scope.productsWithUnsavedVariants)
|
||||
$timeout -> $scope.displaySuccess()
|
||||
).error (data, status) ->
|
||||
if status == 400 && data.errors? && data.errors.length > 0
|
||||
@@ -304,57 +227,36 @@ angular.module("ofn.admin").controller "AdminProductEditCtrl", [
|
||||
if variant.hasOwnProperty("unit_value_with_description")
|
||||
match = variant.unit_value_with_description.match(/^([\d\.]+(?= |$)|)( |)(.*)$/)
|
||||
if match
|
||||
product = $scope.findProduct(product.id, $scope.products)
|
||||
product = BulkProducts.find product.id
|
||||
variant.unit_value = parseFloat(match[1])
|
||||
variant.unit_value = null if isNaN(variant.unit_value)
|
||||
variant.unit_value *= product.variant_unit_scale if variant.unit_value && product.variant_unit_scale
|
||||
variant.unit_description = match[3]
|
||||
|
||||
$scope.findProduct = (id, product_list) ->
|
||||
products = (product for product in product_list when product.id == id)
|
||||
if products.length == 0 then null else products[0]
|
||||
|
||||
$scope.incrementLimit = ->
|
||||
if $scope.limit < $scope.products.length
|
||||
$scope.limit = $scope.limit + 5
|
||||
|
||||
$scope.setMessage = (model, text, style, timeout) ->
|
||||
model.text = text
|
||||
model.style = style
|
||||
$timeout.cancel model.timeout if model.timeout
|
||||
if timeout
|
||||
model.timeout = $timeout(->
|
||||
$scope.setMessage model, "", {}, false
|
||||
, timeout, true)
|
||||
|
||||
|
||||
$scope.displayUpdating = ->
|
||||
$scope.setMessage $scope.updateStatusMessage, "Saving...",
|
||||
color: "#FF9906"
|
||||
, false
|
||||
StatusMessage.display 'progress', 'Saving...'
|
||||
|
||||
|
||||
$scope.displaySuccess = ->
|
||||
$scope.setMessage $scope.updateStatusMessage, "Changes saved.",
|
||||
color: "#9fc820"
|
||||
, 3000
|
||||
StatusMessage.display 'success', 'Changes saved.'
|
||||
|
||||
|
||||
$scope.displayFailure = (failMessage) ->
|
||||
$scope.setMessage $scope.updateStatusMessage, "Saving failed. " + failMessage,
|
||||
color: "#DA5354"
|
||||
, false
|
||||
StatusMessage.display 'failure', "Saving failed. #{failMessage}"
|
||||
|
||||
|
||||
$scope.displayDirtyProducts = ->
|
||||
if DirtyProducts.count() > 0
|
||||
message = if DirtyProducts.count() == 1 then "one product" else DirtyProducts.count() + " products"
|
||||
$scope.setMessage $scope.updateStatusMessage, "Changes to " + message + " remain unsaved.",
|
||||
color: "gray"
|
||||
, false
|
||||
StatusMessage.display 'notice', "Changes to #{message} remain unsaved."
|
||||
else
|
||||
$scope.setMessage $scope.updateStatusMessage, "", {}, false
|
||||
]
|
||||
StatusMessage.clear()
|
||||
|
||||
|
||||
filterSubmitProducts = (productsToFilter) ->
|
||||
filteredProducts = []
|
||||
@@ -386,8 +288,8 @@ filterSubmitProducts = (productsToFilter) ->
|
||||
if product.hasOwnProperty("name")
|
||||
filteredProduct.name = product.name
|
||||
hasUpdatableProperty = true
|
||||
if product.hasOwnProperty("producer")
|
||||
filteredProduct.supplier_id = product.producer
|
||||
if product.hasOwnProperty("producer_id")
|
||||
filteredProduct.supplier_id = product.producer_id
|
||||
hasUpdatableProperty = true
|
||||
if product.hasOwnProperty("price")
|
||||
filteredProduct.price = product.price
|
||||
@@ -402,8 +304,8 @@ filterSubmitProducts = (productsToFilter) ->
|
||||
if product.hasOwnProperty("on_hand") and filteredVariants.length == 0 #only update if no variants present
|
||||
filteredProduct.on_hand = product.on_hand
|
||||
hasUpdatableProperty = true
|
||||
if product.hasOwnProperty("category")
|
||||
filteredProduct.primary_taxon_id = product.category
|
||||
if product.hasOwnProperty("category_id")
|
||||
filteredProduct.primary_taxon_id = product.category_id
|
||||
hasUpdatableProperty = true
|
||||
if product.hasOwnProperty("available_on")
|
||||
filteredProduct.available_on = product.available_on
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
angular.module("ofn.admin").controller "AdminVariantOverridesCtrl", ($scope, $timeout, Indexer, SpreeApiAuth, PagedFetcher, StatusMessage, hubs, producers, hubPermissions, VariantOverrides, DirtyVariantOverrides) ->
|
||||
$scope.hubs = hubs
|
||||
$scope.hub = null
|
||||
$scope.products = []
|
||||
$scope.producers = Indexer.index producers
|
||||
$scope.hubPermissions = hubPermissions
|
||||
$scope.variantOverrides = VariantOverrides.variantOverrides
|
||||
$scope.StatusMessage = StatusMessage
|
||||
|
||||
$scope.initialise = ->
|
||||
SpreeApiAuth.authorise()
|
||||
.then ->
|
||||
$scope.spree_api_key_ok = true
|
||||
$scope.fetchProducts()
|
||||
.catch (message) ->
|
||||
$scope.api_error_msg = message
|
||||
|
||||
|
||||
$scope.fetchProducts = ->
|
||||
url = "/api/products/distributable?page=::page::;per_page=100"
|
||||
PagedFetcher.fetch url, (data) => $scope.addProducts data.products
|
||||
|
||||
|
||||
$scope.addProducts = (products) ->
|
||||
$scope.products = $scope.products.concat products
|
||||
VariantOverrides.ensureDataFor hubs, products
|
||||
|
||||
|
||||
$scope.selectHub = ->
|
||||
$scope.hub = (hub for hub in hubs when hub.id == $scope.hub_id)[0]
|
||||
|
||||
|
||||
$scope.displayDirty = ->
|
||||
if DirtyVariantOverrides.count() > 0
|
||||
num = if DirtyVariantOverrides.count() == 1 then "one override" else "#{DirtyVariantOverrides.count()} overrides"
|
||||
StatusMessage.display 'notice', "Changes to #{num} remain unsaved."
|
||||
else
|
||||
StatusMessage.clear()
|
||||
|
||||
|
||||
$scope.update = ->
|
||||
if DirtyVariantOverrides.count() == 0
|
||||
StatusMessage.display 'alert', 'No changes to save.'
|
||||
else
|
||||
StatusMessage.display 'progress', 'Saving...'
|
||||
DirtyVariantOverrides.save()
|
||||
.success (updatedVos) ->
|
||||
DirtyVariantOverrides.clear()
|
||||
VariantOverrides.updateIds updatedVos
|
||||
$timeout -> StatusMessage.display 'success', 'Changes saved.'
|
||||
.error (data, status) ->
|
||||
$timeout -> StatusMessage.display 'failure', $scope.updateError(data, status)
|
||||
|
||||
|
||||
$scope.updateError = (data, status) ->
|
||||
if status == 401
|
||||
"I couldn't get authorisation to save those changes, so they remain unsaved."
|
||||
|
||||
else if status == 400 && data.errors?
|
||||
errors = []
|
||||
for field, field_errors of data.errors
|
||||
errors = errors.concat field_errors
|
||||
errors = errors.join ', '
|
||||
"I had some trouble saving: #{errors}"
|
||||
|
||||
else
|
||||
"Oh no! I was unable to save your changes."
|
||||
@@ -1,19 +0,0 @@
|
||||
angular.module("ofn.admin").directive "ofnTaxonAutocomplete", (Taxons) ->
|
||||
# Adapted from Spree's existing taxon autocompletion
|
||||
require: "ngModel"
|
||||
link: (scope,element,attrs,ngModel) ->
|
||||
setTimeout ->
|
||||
element.select2
|
||||
placeholder: "Category"
|
||||
multiple: false
|
||||
initSelection: (element, callback) ->
|
||||
callback Taxons.findByID(scope.product.category)
|
||||
query: (query) ->
|
||||
query.callback { results: Taxons.findByTerm(query.term) }
|
||||
formatResult: (taxon) ->
|
||||
taxon.name
|
||||
formatSelection: (taxon) ->
|
||||
taxon.name
|
||||
element.on "change", ->
|
||||
scope.$apply ->
|
||||
ngModel.$setViewValue element.val()
|
||||
@@ -1,18 +1,19 @@
|
||||
angular.module("ofn.admin").directive "ofnToggleVariants", ->
|
||||
angular.module("ofn.admin").directive "ofnToggleVariants", (DisplayProperties) ->
|
||||
link: (scope, element, attrs) ->
|
||||
if scope.displayProperties[scope.product.id].showVariants
|
||||
if DisplayProperties.showVariants scope.product.id
|
||||
element.removeClass "icon-chevron-right"
|
||||
element.addClass "icon-chevron-down"
|
||||
else
|
||||
element.removeClass "icon-chevron-down"
|
||||
element.addClass "icon-chevron-right"
|
||||
|
||||
element.on "click", ->
|
||||
scope.$apply ->
|
||||
if scope.displayProperties[scope.product.id].showVariants
|
||||
scope.displayProperties[scope.product.id].showVariants = false
|
||||
if DisplayProperties.showVariants scope.product.id
|
||||
DisplayProperties.setShowVariants scope.product.id, false
|
||||
element.removeClass "icon-chevron-down"
|
||||
element.addClass "icon-chevron-right"
|
||||
else
|
||||
scope.displayProperties[scope.product.id].showVariants = true
|
||||
DisplayProperties.setShowVariants scope.product.id, true
|
||||
element.removeClass "icon-chevron-right"
|
||||
element.addClass "icon-chevron-down"
|
||||
@@ -0,0 +1,9 @@
|
||||
angular.module("ofn.admin").directive "ofnTrackVariantOverride", (DirtyVariantOverrides) ->
|
||||
require: "ngModel"
|
||||
link: (scope, element, attrs, ngModel) ->
|
||||
ngModel.$parsers.push (viewValue) ->
|
||||
if ngModel.$dirty
|
||||
variantOverride = scope.variantOverrides[scope.hub.id][scope.variant.id]
|
||||
DirtyVariantOverrides.add variantOverride
|
||||
scope.displayDirty()
|
||||
viewValue
|
||||
@@ -1,17 +1,19 @@
|
||||
angular.module("admin.enterprises")
|
||||
.controller "enterpriseCtrl", ($scope, longDescription, NavigationCheck, Enterprise, PaymentMethods, ShippingMethods) ->
|
||||
.controller "enterpriseCtrl", ($scope, NavigationCheck, Enterprise, PaymentMethods, ShippingMethods, SideMenu) ->
|
||||
$scope.Enterprise = Enterprise.enterprise
|
||||
$scope.PaymentMethods = PaymentMethods.paymentMethods
|
||||
$scope.ShippingMethods = ShippingMethods.shippingMethods
|
||||
$scope.navClear = NavigationCheck.clear
|
||||
# htmlVariable is used by textAngular wysiwyg for the long descrtiption.
|
||||
$scope.htmlVariable = longDescription
|
||||
$scope.pristineEmail = $scope.Enterprise.email
|
||||
$scope.menu = SideMenu
|
||||
|
||||
# Provide a callback for generating warning messages displayed before leaving the page. This is passed in
|
||||
# from a directive "nav-check" in the page - if we pass it here it will be called in the test suite,
|
||||
# and on all new uses of this contoller, and we might not want that .
|
||||
$scope.enterpriseNavCallback = ->
|
||||
"You are editing an enterprise!"
|
||||
if $scope.enterprise.$dirty
|
||||
"Your changes to the enterprise are not saved yet."
|
||||
|
||||
for payment_method in $scope.PaymentMethods
|
||||
payment_method.selected = payment_method.id in $scope.Enterprise.payment_method_ids
|
||||
@@ -42,3 +44,25 @@ angular.module("admin.enterprises")
|
||||
count++ if shipping_method.selected
|
||||
count
|
||||
, 0
|
||||
|
||||
$scope.$watch "Enterprise.is_primary_producer", (newValue, oldValue) ->
|
||||
if !newValue && $scope.Enterprise.sells == "none"
|
||||
$scope.menu.hide_item_by_name('Enterprise Fees')
|
||||
else
|
||||
$scope.menu.show_item_by_name('Enterprise Fees')
|
||||
|
||||
|
||||
$scope.$watch "Enterprise.sells", (newValue, oldValue) ->
|
||||
if newValue == "none"
|
||||
$scope.menu.hide_item_by_name('Shipping Methods')
|
||||
$scope.menu.hide_item_by_name('Payment Methods')
|
||||
$scope.menu.hide_item_by_name('Shop Preferences')
|
||||
if $scope.Enterprise.is_primary_producer
|
||||
$scope.menu.show_item_by_name('Enterprise Fees')
|
||||
else
|
||||
$scope.menu.hide_item_by_name('Enterprise Fees')
|
||||
else
|
||||
$scope.menu.show_item_by_name('Shipping Methods')
|
||||
$scope.menu.show_item_by_name('Payment Methods')
|
||||
$scope.menu.show_item_by_name('Shop Preferences')
|
||||
$scope.menu.show_item_by_name('Enterprise Fees')
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
angular.module("admin.enterprises")
|
||||
.controller "sideMenuCtrl", ($scope, Enterprise, SideMenu) ->
|
||||
$scope.Enterprise = Enterprise.enterprise
|
||||
$scope.menu = SideMenu
|
||||
$scope.select = SideMenu.select
|
||||
|
||||
$scope.menu.setItems [
|
||||
{ name: 'Primary Details', icon_class: "icon-user" }
|
||||
{ name: 'Address', icon_class: "icon-map-marker" }
|
||||
{ name: 'Contact', icon_class: "icon-phone" }
|
||||
{ name: 'Social', icon_class: "icon-twitter" }
|
||||
{ name: 'About', icon_class: "icon-pencil" }
|
||||
{ name: 'Business Details', icon_class: "icon-briefcase" }
|
||||
{ name: 'Images', icon_class: "icon-picture" }
|
||||
{ name: "Shipping Methods", icon_class: "icon-truck" }
|
||||
{ name: "Payment Methods", icon_class: "icon-money" }
|
||||
{ name: "Enterprise Fees", icon_class: "icon-tasks" }
|
||||
{ name: "Shop Preferences", icon_class: "icon-shopping-cart" }
|
||||
]
|
||||
|
||||
$scope.select(0)
|
||||
@@ -1 +1 @@
|
||||
angular.module("admin.enterprises", ["admin.payment_methods", "admin.utils", "admin.shipping_methods", "admin.users", "textAngular"])
|
||||
angular.module("admin.enterprises", [
|
||||
@@ -1,4 +1,4 @@
|
||||
angular.module("ofn.admin").filter "category", ($filter) ->
|
||||
return (products, taxonID) ->
|
||||
return products if taxonID == "0"
|
||||
return $filter('filter')( products, { category: taxonID }, true )
|
||||
return $filter('filter')( products, { category_id: taxonID }, true )
|
||||
@@ -0,0 +1,4 @@
|
||||
angular.module("ofn.admin").filter "hubPermissions", ($filter) ->
|
||||
return (products, hubPermissions, hub_id) ->
|
||||
return [] if !hub_id
|
||||
return $filter('filter')(products, ((product) -> hubPermissions[hub_id].indexOf(product.producer_id) > -1), true)
|
||||
@@ -1,4 +1,4 @@
|
||||
angular.module("ofn.admin").filter "producer", ($filter) ->
|
||||
return (products, producerID) ->
|
||||
return products if producerID == "0"
|
||||
$filter('filter')( products, { producer: producerID }, true )
|
||||
$filter('filter')( products, { producer_id: producerID }, true )
|
||||
@@ -0,0 +1,74 @@
|
||||
angular.module("ofn.admin").factory "BulkProducts", (PagedFetcher, dataFetcher) ->
|
||||
new class BulkProducts
|
||||
products: []
|
||||
|
||||
fetch: (filters, onComplete) ->
|
||||
queryString = filters.reduce (qs,f) ->
|
||||
return qs + "q[#{f.property.db_column}_#{f.predicate.predicate}]=#{f.value};"
|
||||
, ""
|
||||
|
||||
url = "/api/products/bulk_products?page=::page::;per_page=20;#{queryString}"
|
||||
PagedFetcher.fetch url, (data) => @addProducts data.products
|
||||
|
||||
cloneProduct: (product) ->
|
||||
dataFetcher("/admin/products/" + product.permalink_live + "/clone.json").then (data) =>
|
||||
# Ideally we would use Spree's built in respond_override helper here to redirect the
|
||||
# user after a successful clone with .json in the accept headers
|
||||
# However, at the time of writing there appears to be an issue which causes the
|
||||
# respond_with block in the destroy action of Spree::Admin::Product to break
|
||||
# when a respond_overrride for the clone action is used.
|
||||
id = data.product.id
|
||||
dataFetcher("/api/products/" + id + "?template=bulk_show").then (newProduct) =>
|
||||
@addProducts [newProduct]
|
||||
|
||||
updateVariantLists: (serverProducts, productsWithUnsavedVariants) ->
|
||||
for product in productsWithUnsavedVariants
|
||||
server_product = @findProductInList(product.id, serverProducts)
|
||||
product.variants = server_product.variants
|
||||
@loadVariantUnitValues product
|
||||
|
||||
find: (id) ->
|
||||
@findProductInList id, @products
|
||||
|
||||
findProductInList: (id, product_list) ->
|
||||
products = (product for product in product_list when product.id == id)
|
||||
if products.length == 0 then null else products[0]
|
||||
|
||||
addProducts: (products) ->
|
||||
for product in products
|
||||
@unpackProduct product
|
||||
@products.push product
|
||||
|
||||
unpackProduct: (product) ->
|
||||
#$scope.matchProducer product
|
||||
@loadVariantUnit product
|
||||
|
||||
loadVariantUnit: (product) ->
|
||||
product.variant_unit_with_scale =
|
||||
if product.variant_unit && product.variant_unit_scale && product.variant_unit != 'items'
|
||||
"#{product.variant_unit}_#{product.variant_unit_scale}"
|
||||
else if product.variant_unit
|
||||
product.variant_unit
|
||||
else
|
||||
null
|
||||
|
||||
@loadVariantUnitValues product if product.variants
|
||||
@loadVariantUnitValue product, product.master if product.master
|
||||
|
||||
loadVariantUnitValues: (product) ->
|
||||
for variant in product.variants
|
||||
@loadVariantUnitValue product, variant
|
||||
|
||||
loadVariantUnitValue: (product, variant) ->
|
||||
unit_value = @variantUnitValue product, variant
|
||||
unit_value = if unit_value? then unit_value else ''
|
||||
variant.unit_value_with_description = "#{unit_value} #{variant.unit_description || ''}".trim()
|
||||
|
||||
variantUnitValue: (product, variant) ->
|
||||
if variant.unit_value?
|
||||
if product.variant_unit_scale
|
||||
variant.unit_value / product.variant_unit_scale
|
||||
else
|
||||
variant.unit_value
|
||||
else
|
||||
null
|
||||
@@ -0,0 +1,29 @@
|
||||
angular.module("ofn.admin").factory "DirtyVariantOverrides", ($http) ->
|
||||
new class DirtyVariantOverrides
|
||||
dirtyVariantOverrides: {}
|
||||
|
||||
add: (vo) ->
|
||||
@dirtyVariantOverrides[vo.hub_id] ||= {}
|
||||
@dirtyVariantOverrides[vo.hub_id][vo.variant_id] = vo
|
||||
|
||||
count: ->
|
||||
count = 0
|
||||
for hub_id, vos of @dirtyVariantOverrides
|
||||
count += Object.keys(vos).length
|
||||
count
|
||||
|
||||
clear: ->
|
||||
@dirtyVariantOverrides = {}
|
||||
|
||||
all: ->
|
||||
all_vos = []
|
||||
for hub_id, vos of @dirtyVariantOverrides
|
||||
all_vos.push vo for variant_id, vo of vos
|
||||
all_vos
|
||||
|
||||
save: ->
|
||||
$http
|
||||
method: "POST"
|
||||
url: "/admin/variant_overrides/bulk_update"
|
||||
data:
|
||||
variant_overrides: @all()
|
||||
@@ -0,0 +1,14 @@
|
||||
angular.module("ofn.admin").factory "DisplayProperties", ->
|
||||
new class DisplayProperties
|
||||
displayProperties: {}
|
||||
|
||||
showVariants: (product_id) ->
|
||||
@initProduct product_id
|
||||
@displayProperties[product_id].showVariants
|
||||
|
||||
setShowVariants: (product_id, showVariants) ->
|
||||
@initProduct product_id
|
||||
@displayProperties[product_id].showVariants = showVariants
|
||||
|
||||
initProduct: (product_id) ->
|
||||
@displayProperties[product_id] ||= {showVariants: false}
|
||||
13
app/assets/javascripts/admin/services/indexer.js.coffee
Normal file
13
app/assets/javascripts/admin/services/indexer.js.coffee
Normal file
@@ -0,0 +1,13 @@
|
||||
# Convert an array of objects into a hash, indexed by the objects' ids
|
||||
#
|
||||
# producers = [{id: 1, name: 'one'}, {id: 2, name: 'two'}]
|
||||
# Indexer.index producers
|
||||
# -> {1: {id: 1, name: 'one'}, 2: {id: 2, name: 'two'}}
|
||||
|
||||
angular.module("ofn.admin").factory 'Indexer', ->
|
||||
new class Indexer
|
||||
index: (data, key='id') ->
|
||||
index = {}
|
||||
for e in data
|
||||
index[e[key]] = e
|
||||
index
|
||||
@@ -0,0 +1,16 @@
|
||||
angular.module("ofn.admin").factory "PagedFetcher", (dataFetcher) ->
|
||||
new class PagedFetcher
|
||||
# Given a URL like http://example.com/foo?page=::page::&per_page=20
|
||||
# And the response includes an attribute pages with the number of pages to fetch
|
||||
# Fetch each page async, and call the processData callback with the resulting data
|
||||
fetch: (url, processData) ->
|
||||
dataFetcher(@urlForPage(url, 1)).then (data) =>
|
||||
processData data
|
||||
|
||||
if data.pages > 1
|
||||
for page in [2..data.pages]
|
||||
dataFetcher(@urlForPage(url, page)).then (data) ->
|
||||
processData data
|
||||
|
||||
urlForPage: (url, page) ->
|
||||
url.replace("::page::", page)
|
||||
@@ -0,0 +1,16 @@
|
||||
angular.module("ofn.admin").factory "SpreeApiAuth", ($q, $http, SpreeApiKey) ->
|
||||
new class SpreeApiAuth
|
||||
authorise: ->
|
||||
deferred = $q.defer()
|
||||
|
||||
$http.get("/api/users/authorise_api?token=" + SpreeApiKey)
|
||||
.success (response) ->
|
||||
if response?.success == "Use of API Authorised"
|
||||
$http.defaults.headers.common["X-Spree-Token"] = SpreeApiKey
|
||||
deferred.resolve()
|
||||
|
||||
.error (response) ->
|
||||
error = response?.error || "You are unauthorised to access this page."
|
||||
deferred.reject(error)
|
||||
|
||||
deferred.promise
|
||||
@@ -0,0 +1,26 @@
|
||||
angular.module("ofn.admin").factory "StatusMessage", ($timeout) ->
|
||||
new class StatusMessage
|
||||
types:
|
||||
progress: {timeout: false, style: {color: '#ff9906'}}
|
||||
alert: {timeout: 5000, style: {color: 'grey'}}
|
||||
notice: {timeout: false, style: {color: 'grey'}}
|
||||
success: {timeout: 5000, style: {color: '#9fc820'}}
|
||||
failure: {timeout: false, style: {color: '#da5354'}}
|
||||
|
||||
statusMessage:
|
||||
text: ""
|
||||
style: {}
|
||||
|
||||
display: (type, text) ->
|
||||
@statusMessage.text = text
|
||||
@statusMessage.style = @types[type].style
|
||||
$timeout.cancel @statusMessage.timeout if @statusMessage.timeout
|
||||
timeout = @types[type].timeout
|
||||
if timeout
|
||||
@statusMessage.timeout = $timeout =>
|
||||
@clear()
|
||||
, timeout, true
|
||||
|
||||
clear: ->
|
||||
@statusMessage.text = ''
|
||||
@statusMessage.style = {}
|
||||
@@ -1,15 +0,0 @@
|
||||
angular.module("ofn.admin").factory "Taxons", (taxons, $filter) ->
|
||||
new class Taxons
|
||||
constructor: ->
|
||||
@taxons = taxons
|
||||
|
||||
# For finding a single Taxon
|
||||
findByID: (id) ->
|
||||
$filter('filter')(@taxons, {id: id}, true)[0]
|
||||
|
||||
# For finding multiple Taxons represented by comma delimited string
|
||||
findByIDs: (ids) ->
|
||||
taxon for taxon in @taxons when taxon.id.toString() in ids.split(",")
|
||||
|
||||
findByTerm: (term) ->
|
||||
$filter('filter')(@taxons, term)
|
||||
@@ -0,0 +1,23 @@
|
||||
angular.module("ofn.admin").factory "VariantOverrides", (variantOverrides, Indexer) ->
|
||||
new class VariantOverrides
|
||||
variantOverrides: {}
|
||||
|
||||
constructor: ->
|
||||
for vo in variantOverrides
|
||||
@variantOverrides[vo.hub_id] ||= {}
|
||||
@variantOverrides[vo.hub_id][vo.variant_id] = vo
|
||||
|
||||
ensureDataFor: (hubs, products) ->
|
||||
for hub in hubs
|
||||
@variantOverrides[hub.id] ||= {}
|
||||
for product in products
|
||||
for variant in product.variants
|
||||
@variantOverrides[hub.id][variant.id] ||=
|
||||
variant_id: variant.id
|
||||
hub_id: hub.id
|
||||
price: ''
|
||||
count_on_hand: ''
|
||||
|
||||
updateIds: (updatedVos) ->
|
||||
for vo in updatedVos
|
||||
@variantOverrides[vo.hub_id][vo.variant_id].id = vo.id
|
||||
@@ -0,0 +1,28 @@
|
||||
angular.module("admin.side_menu")
|
||||
.factory "SideMenu", ->
|
||||
new class SideMenu
|
||||
items: []
|
||||
selected: null
|
||||
|
||||
setItems: (items) =>
|
||||
@items = items
|
||||
item.visible = true for item in @items
|
||||
|
||||
select: (index) =>
|
||||
if index < @items.length
|
||||
@selected.selected = false if @selected
|
||||
@selected = @items[index]
|
||||
@selected.selected = true
|
||||
|
||||
find_by_name: (name) =>
|
||||
for item in @items when item.name is name
|
||||
return item
|
||||
null
|
||||
|
||||
hide_item_by_name: (name) =>
|
||||
item = @find_by_name(name)
|
||||
item.visible = false if item
|
||||
|
||||
show_item_by_name: (name) =>
|
||||
item = @find_by_name(name)
|
||||
item.visible = true if item
|
||||
@@ -0,0 +1 @@
|
||||
angular.module("admin.side_menu", [])
|
||||
@@ -0,0 +1,30 @@
|
||||
angular.module("admin.taxons").directive "ofnTaxonAutocomplete", (Taxons) ->
|
||||
# Adapted from Spree's existing taxon autocompletion
|
||||
scope: true
|
||||
link: (scope,element,attrs) ->
|
||||
multiple = scope.$eval attrs.multipleSelection
|
||||
placeholder = attrs.placeholder
|
||||
initalSelection = scope.$eval attrs.ngModel
|
||||
|
||||
setTimeout ->
|
||||
element.select2
|
||||
placeholder: placeholder
|
||||
multiple: multiple
|
||||
initSelection: (element, callback) ->
|
||||
if multiple
|
||||
callback Taxons.findByIDs(initalSelection)
|
||||
else
|
||||
callback Taxons.findByID(initalSelection)
|
||||
query: (query) ->
|
||||
query.callback { results: Taxons.findByTerm(query.term) }
|
||||
formatResult: (taxon) ->
|
||||
taxon.name
|
||||
formatSelection: (taxon) ->
|
||||
taxon.name
|
||||
|
||||
#Allows drag and drop
|
||||
if multiple
|
||||
element.select2("container").find("ul.select2-choices").sortable
|
||||
containment: 'parent'
|
||||
start: -> element.select2("onSortStart")
|
||||
update: -> element.select2("onSortEnd")
|
||||
@@ -0,0 +1,19 @@
|
||||
angular.module("admin.taxons").factory "Taxons", (taxons, $filter) ->
|
||||
new class Taxons
|
||||
taxons: taxons
|
||||
taxonsByID: {}
|
||||
|
||||
constructor: ->
|
||||
for taxon in @taxons
|
||||
@taxonsByID[taxon.id] = taxon
|
||||
|
||||
# For finding a single Taxon
|
||||
findByID: (id) ->
|
||||
@taxonsByID[id]
|
||||
|
||||
# For finding multiple Taxons represented by comma delimited string
|
||||
findByIDs: (ids) ->
|
||||
@taxonsByID[taxon_id] for taxon_id in ids.split(",")
|
||||
|
||||
findByTerm: (term) ->
|
||||
$filter('filter')(@taxons, term)
|
||||
1
app/assets/javascripts/admin/taxons/taxons.js.coffee
Normal file
1
app/assets/javascripts/admin/taxons/taxons.js.coffee
Normal file
@@ -0,0 +1 @@
|
||||
angular.module("admin.taxons", [])
|
||||
@@ -28,3 +28,10 @@ show_flash_error = function(message) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
$('a.close').click(function(event){
|
||||
event.preventDefault();
|
||||
$(this).parent().slideUp(250);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
angular.module("admin.utils").directive "navCheck", (NavigationCheck)->
|
||||
angular.module("admin.utils").directive "navCheckCallback", (NavigationCheck)->
|
||||
restrict: 'A'
|
||||
scope:
|
||||
navCallback: '&'
|
||||
navCheckCallback: '&'
|
||||
link: (scope,element,attributes) ->
|
||||
# Define navigationCallback on a controller in scope, otherwise this default will be used:
|
||||
scope.navCallback ||= ->
|
||||
# Provide a callback, otherwise this default will be used:
|
||||
callback = scope.navCheckCallback()
|
||||
callback ||= ->
|
||||
"You will lose any unsaved work!"
|
||||
NavigationCheck.register(scope.navCallback)
|
||||
NavigationCheck.register(callback)
|
||||
|
||||
@@ -15,7 +15,8 @@ angular.module("admin.utils")
|
||||
onBeforeUnloadHandler: ($event) =>
|
||||
message = @getMessage()
|
||||
if message
|
||||
($event or $window.event).preventDefault()
|
||||
# following: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload
|
||||
($event or $window.event).returnValue = message
|
||||
message
|
||||
|
||||
# Action for angular navigation.
|
||||
|
||||
@@ -13,8 +13,7 @@ $ ->
|
||||
$(document).ready ->
|
||||
$('#cart_adjustments').hide()
|
||||
|
||||
$('th.cart-adjustment-header').html('<a href="#">Distribution...</a>')
|
||||
$('th.cart-adjustment-header a').click ->
|
||||
$('#cart_adjustments').toggle()
|
||||
$('th.cart-adjustment-header a').html('Distribution')
|
||||
$(this).html('Item Handling Fees (included in item totals)')
|
||||
false
|
||||
|
||||
@@ -1,11 +1,28 @@
|
||||
Darkswarm.controller "AccordionCtrl", ($scope, storage, $timeout, CurrentHub) ->
|
||||
Darkswarm.controller "AccordionCtrl", ($scope, storage, $timeout, $document, CurrentHub) ->
|
||||
$scope.accordion =
|
||||
details: true
|
||||
billing: false
|
||||
shipping: false
|
||||
payment: false
|
||||
billing: false
|
||||
$scope.accordionSections = ["details", "billing", "shipping", "payment"]
|
||||
storage.bind $scope, "accordion", {storeName: "accordion_#{$scope.order.id}#{CurrentHub.hub.id}#{$scope.order.user_id}"}
|
||||
|
||||
$scope.show = (name)->
|
||||
$scope.accordion[name] = true
|
||||
$scope.show = (section)->
|
||||
$scope.accordion[section] = true
|
||||
|
||||
$scope.$on 'purchaseFormInvalid', (event, form) ->
|
||||
# Scroll to first invalid section
|
||||
for section in $scope.accordionSections
|
||||
if not form[section].$valid
|
||||
$scope.show section
|
||||
|
||||
# If we call scrollTo() directly after show(), when one of the accordions above the
|
||||
# scroll location is closed by show(), scrollTo() will scroll to the old location of
|
||||
# the element. Putting this in a zero-length timeout is enough delay for the DOM to
|
||||
# have updated.
|
||||
$timeout ->
|
||||
# Scrolling is confused by our position:fixed top bar - add an offset to scroll
|
||||
# to the correct location, plus 5px buffer
|
||||
offset_height = $("nav.top-bar").height() + 5
|
||||
$document.scrollTo $("##{section}"), offset_height, 500
|
||||
break
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
Darkswarm.controller "CheckoutCtrl", ($scope, storage, Checkout, CurrentUser, CurrentHub) ->
|
||||
$scope.Checkout = Checkout
|
||||
$scope.submitted = false
|
||||
|
||||
# Bind to local storage
|
||||
$scope.fieldsToBind = ["bill_address", "email", "payment_method_id", "shipping_method_id", "ship_address"]
|
||||
@@ -15,8 +16,12 @@ Darkswarm.controller "CheckoutCtrl", ($scope, storage, Checkout, CurrentUser, Cu
|
||||
$scope.order = Checkout.order # Ordering is important
|
||||
$scope.secrets = Checkout.secrets
|
||||
|
||||
$scope.enabled = if CurrentUser then true else false
|
||||
$scope.enabled = !!CurrentUser
|
||||
|
||||
$scope.purchase = (event)->
|
||||
$scope.purchase = (event, form) ->
|
||||
event.preventDefault()
|
||||
$scope.Checkout.submit()
|
||||
$scope.submitted = true
|
||||
if form.$valid
|
||||
$scope.Checkout.submit()
|
||||
else
|
||||
$scope.$broadcast 'purchaseFormInvalid', form
|
||||
|
||||
@@ -20,4 +20,8 @@ Darkswarm.controller "PaymentCtrl", ($scope, $timeout) ->
|
||||
$scope.years = [moment().year()..(moment().year()+15)]
|
||||
$scope.secrets.card_month = "1"
|
||||
$scope.secrets.card_year = moment().year()
|
||||
|
||||
$scope.summary = ->
|
||||
[$scope.Checkout.paymentMethod()?.name]
|
||||
|
||||
$timeout $scope.onTimeout
|
||||
|
||||
@@ -3,5 +3,8 @@ Darkswarm.controller "ShippingCtrl", ($scope, $timeout, ShippingMethods) ->
|
||||
$scope.ShippingMethods = ShippingMethods
|
||||
$scope.name = "shipping"
|
||||
$scope.nextPanel = "payment"
|
||||
|
||||
$scope.summary = ->
|
||||
[$scope.Checkout.shippingMethod()?.name]
|
||||
|
||||
$timeout $scope.onTimeout
|
||||
|
||||
@@ -5,14 +5,13 @@ Darkswarm.controller "ProductsCtrl", ($scope, $rootScope, Products, OrderCycle,
|
||||
$scope.clearAll = FilterSelectorsService.clearAll
|
||||
$scope.filterText = FilterSelectorsService.filterText
|
||||
$scope.FilterSelectorsService = FilterSelectorsService
|
||||
$scope.filtersActive = true
|
||||
$scope.limit = 3
|
||||
$scope.ordering =
|
||||
order: "primary_taxon.name"
|
||||
$scope.order_cycle = OrderCycle.order_cycle
|
||||
|
||||
$scope.incrementLimit = ->
|
||||
if $scope.limit < Products.products.length
|
||||
$scope.limit = $scope.limit + 1
|
||||
$scope.limit = $scope.limit + 1
|
||||
|
||||
$scope.searchKeypress = (e)->
|
||||
code = e.keyCode || e.which
|
||||
|
||||
@@ -20,7 +20,7 @@ window.FieldsetMixin = ($scope)->
|
||||
not ($scope.dirty(path) and $scope.invalid(path))
|
||||
|
||||
$scope.dirty = (name)->
|
||||
$scope.field(name).$dirty
|
||||
$scope.field(name).$dirty || $scope.submitted
|
||||
|
||||
$scope.invalid = (name)->
|
||||
$scope.field(name).$invalid
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
@import ../darkswarm/branding
|
||||
@import ../darkswarm/mixins
|
||||
|
||||
|
||||
.alert-box
|
||||
display: block
|
||||
position: relative
|
||||
display: block
|
||||
background-color: #eff5dc
|
||||
border: 1px solid #9fc820
|
||||
color: #666
|
||||
@@ -13,7 +12,10 @@
|
||||
transition: opacity 300ms ease-out
|
||||
padding: 0.77778em 1.33333em 0.77778em 0.77778em
|
||||
a.close
|
||||
float: right
|
||||
position: absolute
|
||||
right: 5px
|
||||
top: 0px
|
||||
font-size: 1.5em
|
||||
|
||||
|
||||
.dashboard_item.single-ent
|
||||
@@ -22,7 +24,7 @@
|
||||
height: auto !important
|
||||
.list
|
||||
.button.bottom
|
||||
width: 100%
|
||||
width: 100%
|
||||
|
||||
.button.big
|
||||
width: 100%
|
||||
|
||||
@@ -1,8 +1,21 @@
|
||||
.text-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.text-right{
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
table .blank-action {
|
||||
display: inline-block;
|
||||
width: 29px;
|
||||
}
|
||||
|
||||
text-angular .ta-editor {
|
||||
border: 1px solid #cee1f4;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
#header #logo {
|
||||
top: 10px;
|
||||
}
|
||||
@@ -231,3 +244,8 @@ text-angular {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
span.required {
|
||||
color: red;
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ th.left-actions, td.left-actions {
|
||||
border-right: 1px solid #cee1f4 !important;
|
||||
}
|
||||
|
||||
#update-status-message {
|
||||
#status-message {
|
||||
margin: 4px 0px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
18
app/assets/stylesheets/admin/side_menu.css.sass
Normal file
18
app/assets/stylesheets/admin/side_menu.css.sass
Normal file
@@ -0,0 +1,18 @@
|
||||
.side_menu
|
||||
border-right: 2px solid #f6f6f6
|
||||
border-top: 2px solid #f6f6f6
|
||||
.menu_item
|
||||
display: block
|
||||
padding: 8px 15px
|
||||
font-size: 120%
|
||||
cursor: pointer
|
||||
text-transform: uppercase
|
||||
&.odd
|
||||
background-color: #ebf3fb
|
||||
&.even
|
||||
background-color: #ffffff
|
||||
&:hover
|
||||
background-color: #eaf0f5
|
||||
&.selected
|
||||
background-color: #5498da
|
||||
color: #ffffff
|
||||
@@ -1,4 +1,3 @@
|
||||
@import ../darkswarm/branding
|
||||
@import ../darkswarm/mixins
|
||||
|
||||
#welcome_page
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
|
||||
// Variant name
|
||||
.variant-name
|
||||
text-transform: capitalize
|
||||
padding-left: 7.9375rem
|
||||
@media all and (max-width: 768px)
|
||||
padding-left: 4.9375rem
|
||||
@@ -94,7 +93,6 @@
|
||||
padding-bottom: 0.65rem
|
||||
|
||||
.summary-header
|
||||
text-transform: capitalize
|
||||
padding-left: 7.9375rem
|
||||
@media all and (max-width: 768px)
|
||||
padding-left: 4.9375rem
|
||||
|
||||
@@ -3,31 +3,36 @@
|
||||
@import big-input
|
||||
@import animations
|
||||
|
||||
// OVERRIDES
|
||||
// Filter-box
|
||||
.row .row.filter-box
|
||||
margin-left: 0
|
||||
margin-right: 0
|
||||
|
||||
.row.filter-box:first-child
|
||||
.row.filter-box:first-child, .row.filter-box.filter-box-shopfront
|
||||
border: 1px solid $clr-blue-light
|
||||
@include border-radius(0.25em)
|
||||
margin-top: 2px
|
||||
@media all and (max-width: 640px)
|
||||
margin-bottom: 1em
|
||||
|
||||
.row.filter-box:last-child
|
||||
.row.filter-box.clear-filters
|
||||
background: transparent
|
||||
margin-top: 1em
|
||||
|
||||
.row.filter-box.filter-box-shopfront
|
||||
margin-top: 0
|
||||
|
||||
products .filter-box
|
||||
background: #f7f7f7
|
||||
|
||||
|
||||
.filter-box
|
||||
background: rgba(245,245,245,0.6)
|
||||
|
||||
.tdhead
|
||||
padding: 0.25rem 0.5rem
|
||||
margin-top: 0.9rem
|
||||
color: $clr-blue
|
||||
border-bottom: 1px solid $clr-blue-light
|
||||
border-bottom: 1px solid $clr-blue-light
|
||||
|
||||
// OVERRIDES
|
||||
[class*="block-grid-"]
|
||||
@@ -89,7 +94,6 @@ products .filter-box
|
||||
svg
|
||||
path
|
||||
fill: $clr-brick
|
||||
|
||||
|
||||
render-svg
|
||||
display: block
|
||||
@@ -103,6 +107,16 @@ products .filter-box
|
||||
path
|
||||
fill: #666
|
||||
|
||||
.filter-box.filter-box-shopfront
|
||||
.tdhead
|
||||
margin-top: 0rem
|
||||
margin-bottom: 0.75rem
|
||||
padding: 0.5rem 0
|
||||
h5
|
||||
color: $clr-blue
|
||||
.button.tiny
|
||||
margin-bottom: 0rem
|
||||
|
||||
.button.filterbtn
|
||||
margin-bottom: 0 !important
|
||||
min-width: 160px
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
@import mixins
|
||||
@import branding
|
||||
@import animations
|
||||
|
||||
checkout
|
||||
display: block
|
||||
@@ -56,9 +57,13 @@ checkout
|
||||
// Logic to swap out up / down accordion icons
|
||||
|
||||
//Foundation overrides
|
||||
dd > a
|
||||
@include csstrans
|
||||
background: $disabled-light !important
|
||||
|
||||
dd > a:hover
|
||||
background: $clr-brick-ultra-light !important
|
||||
color: $clr-brick
|
||||
background: $disabled-v-dark !important
|
||||
color: white
|
||||
|
||||
dd
|
||||
span.accordion-up
|
||||
|
||||
@@ -32,11 +32,23 @@
|
||||
|
||||
#producers.pane
|
||||
@include turqbg
|
||||
@include panepadding
|
||||
background-image: url("/assets/home/producers-bg.svg")
|
||||
background-repeat: no-repeat
|
||||
background-position: center center
|
||||
background-size: 80% 80%
|
||||
|
||||
@media all and (max-width: 768px)
|
||||
background-position: center top
|
||||
background-size: 100% 100%
|
||||
.row
|
||||
@include panepadding
|
||||
background-image: url("/assets/home/producers-bg.svg")
|
||||
background-repeat: no-repeat
|
||||
background-position: right center
|
||||
.pricing-table
|
||||
.title
|
||||
color: $clr-turquoise-light
|
||||
.price
|
||||
background-color: rgba(240, 240, 240, 0.6)
|
||||
.description, .bullet-item, .cta-button
|
||||
background-color: rgba(255, 255, 255, 0.8)
|
||||
|
||||
// Responsive
|
||||
@media all and (max-width: 768px)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
@import typography
|
||||
// Note this mixin file is used in ADMIN and FRONTEND
|
||||
|
||||
@import branding
|
||||
|
||||
|
||||
|
||||
@@ -10,17 +10,14 @@
|
||||
@import shop-taxon-flag
|
||||
@import shop-popovers
|
||||
|
||||
|
||||
|
||||
.darkswarm
|
||||
|
||||
products
|
||||
display: block
|
||||
padding-top: 2.3em
|
||||
|
||||
@media all and (max-width: 768px)
|
||||
padding-top: 1em
|
||||
|
||||
|
||||
input.button.right
|
||||
float: left
|
||||
|
||||
@@ -28,7 +25,6 @@
|
||||
.add_to_cart
|
||||
margin-top: 2rem
|
||||
|
||||
|
||||
product
|
||||
@include csstrans
|
||||
border-bottom: 1px solid #e5e5e5
|
||||
@@ -55,12 +51,15 @@
|
||||
.inline
|
||||
display: inline
|
||||
|
||||
|
||||
.spinner
|
||||
width: 100px
|
||||
margin-bottom: 20px
|
||||
|
||||
// ICONS
|
||||
i
|
||||
font-size: 0.75em
|
||||
padding-right: 0.9375rem
|
||||
@media all and (max-width: 640px)
|
||||
@media all and (max-width: 640px)
|
||||
padding-right: 0.25rem
|
||||
|
||||
i.ofn-i_056-bulk, i.ofn-i_036-producers
|
||||
@@ -70,19 +69,13 @@
|
||||
i.ofn-i_036-producers
|
||||
padding-left: 0.5rem
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.shopfront_message, .shopfront_closed_message
|
||||
padding: 15px
|
||||
border-radius: 5px
|
||||
border: 2px solid #eb4c46
|
||||
|
||||
.shopfront_message
|
||||
margin-top: 2em
|
||||
|
||||
.shopfront_closed_message
|
||||
margin: 2em 0em
|
||||
|
||||
@@ -30,34 +30,42 @@
|
||||
border-color: $clr-brick-bright
|
||||
background-color: rgba(255, 255, 255, 0)
|
||||
|
||||
dl dd a
|
||||
@include avenir
|
||||
background: transparent
|
||||
text-transform: uppercase
|
||||
line-height: 50px
|
||||
font-size: 0.875em
|
||||
text-shadow: 0 -1px 1px #ffffff
|
||||
&:hover, &:focus, &:active
|
||||
color: $clr-brick-bright
|
||||
@media all and (max-width: 768px)
|
||||
line-height: 30px !important
|
||||
border: none
|
||||
&, &:hover
|
||||
background: none
|
||||
padding: 0px 2.2em
|
||||
@media all and (max-width: 768px)
|
||||
line-height: inherit !important
|
||||
dl dd
|
||||
|
||||
text-align: center
|
||||
@media all and (max-width: 640px)
|
||||
text-align: left
|
||||
|
||||
a
|
||||
@include avenir
|
||||
background: transparent
|
||||
text-transform: uppercase
|
||||
line-height: 1
|
||||
font-size: 0.875em
|
||||
text-shadow: 0 -1px 1px #ffffff
|
||||
padding: 1em
|
||||
border: none
|
||||
&:hover, &:focus, &:active
|
||||
color: $clr-brick-bright
|
||||
&, &:hover
|
||||
background: none
|
||||
|
||||
@media all and (max-width: 640px)
|
||||
padding: 0.35em 0 0.65em 0
|
||||
text-shadow: none
|
||||
|
||||
// inactive nav link
|
||||
|
||||
dl
|
||||
dd
|
||||
border-top: 4px solid transparent
|
||||
|
||||
a:after
|
||||
padding-left: 8px
|
||||
content: "\e634"
|
||||
content: "\e633"
|
||||
visibility: hidden
|
||||
@include icon-font
|
||||
@media all and (max-width: 640px)
|
||||
content: "\e633"
|
||||
dd:hover
|
||||
a:after
|
||||
visibility: visible
|
||||
@@ -67,12 +75,19 @@
|
||||
dl
|
||||
dd.active
|
||||
border-top: 4px solid $clr-brick
|
||||
@media all and (max-width: 640px)
|
||||
border-top: 4px solid transparent
|
||||
background-color: $clr-brick
|
||||
a
|
||||
color: $clr-brick
|
||||
@media all and (max-width: 640px)
|
||||
color: white
|
||||
a:after
|
||||
content: "\e633"
|
||||
content: "\e634"
|
||||
visibility: visible
|
||||
@include icon-font
|
||||
@media all and (max-width: 640px)
|
||||
content: "\e633"
|
||||
|
||||
// content revealed in accordion
|
||||
|
||||
|
||||
11
app/assets/stylesheets/mail/all.css
Normal file
11
app/assets/stylesheets/mail/all.css
Normal file
@@ -0,0 +1,11 @@
|
||||
/* This file MUST be plain css, as roadie does not seem to be able to handle other file types */
|
||||
|
||||
/*
|
||||
* This is a manifest file that'll automatically include all the stylesheets available in this directory
|
||||
* and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
|
||||
* the top of the compiled file, but it's generally better to create a new file per style scope.
|
||||
*
|
||||
|
||||
*= require_self
|
||||
*= require_tree .
|
||||
*/
|
||||
284
app/assets/stylesheets/mail/email.css.sass
Normal file
284
app/assets/stylesheets/mail/email.css.sass
Normal file
@@ -0,0 +1,284 @@
|
||||
/* -------------------------------------
|
||||
* GLOBAL
|
||||
*-------------------------------------
|
||||
|
||||
*
|
||||
margin: 0
|
||||
padding: 0
|
||||
font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif
|
||||
|
||||
img
|
||||
max-width: 100%
|
||||
|
||||
.collapse
|
||||
margin: 0
|
||||
padding: 0
|
||||
|
||||
body
|
||||
-webkit-font-smoothing: antialiased
|
||||
-webkit-text-size-adjust: none
|
||||
width: 100%!important
|
||||
height: 100%
|
||||
|
||||
/* -------------------------------------
|
||||
* ELEMENTS
|
||||
*-------------------------------------
|
||||
|
||||
a
|
||||
color: #0096ad
|
||||
|
||||
.btn
|
||||
text-decoration: none
|
||||
color: #FFF
|
||||
background-color: #666
|
||||
padding: 10px 16px
|
||||
font-weight: bold
|
||||
margin-right: 10px
|
||||
text-align: center
|
||||
cursor: pointer
|
||||
display: inline-block
|
||||
|
||||
p.callout
|
||||
padding: 15px
|
||||
background-color: #e1f0f5
|
||||
margin-bottom: 15px
|
||||
|
||||
.callout a
|
||||
font-weight: bold
|
||||
color: #0096ad
|
||||
|
||||
table.social
|
||||
background-color: #ebebeb
|
||||
&.white-bg
|
||||
background-color: white!important
|
||||
border: 1px solid #ebebeb
|
||||
|
||||
table.order-summary
|
||||
border-collapse: separate
|
||||
border-spacing: 0px 10px
|
||||
|
||||
.social .soc-btn
|
||||
padding: 3px 7px
|
||||
font-size: 12px
|
||||
margin-bottom: 10px
|
||||
text-decoration: none
|
||||
color: #FFF
|
||||
font-weight: bold
|
||||
display: block
|
||||
text-align: center
|
||||
|
||||
a
|
||||
&.fb
|
||||
background-color: #3B5998!important
|
||||
&.tw
|
||||
background-color: #1daced!important
|
||||
&.gp
|
||||
background-color: #DB4A39!important
|
||||
&.li
|
||||
background-color: #0073b2!important
|
||||
&.ms
|
||||
background-color: #000!important
|
||||
|
||||
.sidebar .soc-btn
|
||||
display: block
|
||||
width: 100%
|
||||
|
||||
img.float-right
|
||||
float: right
|
||||
display: block
|
||||
|
||||
/* -------------------------------------
|
||||
* HEADER
|
||||
*-------------------------------------
|
||||
|
||||
table.head-wrap
|
||||
width: 100%
|
||||
|
||||
.header.container table td
|
||||
&.logo
|
||||
padding: 15px
|
||||
&.label
|
||||
padding: 15px
|
||||
padding-left: 0px
|
||||
|
||||
/* -------------------------------------
|
||||
* BODY
|
||||
*-------------------------------------
|
||||
|
||||
table
|
||||
&.body-wrap
|
||||
width: 100%
|
||||
&.footer-wrap
|
||||
width: 100%
|
||||
clear: both!important
|
||||
|
||||
/* -------------------------------------
|
||||
* FOOTER
|
||||
*-------------------------------------
|
||||
|
||||
.footer-wrap .container td.content p
|
||||
border-top: 1px solid rgb(215, 215, 215)
|
||||
padding-top: 15px
|
||||
font-size: 10px
|
||||
font-weight: bold
|
||||
|
||||
/* -------------------------------------
|
||||
* TYPOGRAPHY
|
||||
*-------------------------------------
|
||||
|
||||
h1, h2, h3, h4, h5, h6
|
||||
font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif
|
||||
line-height: 1.1
|
||||
margin-bottom: 15px
|
||||
color: #000
|
||||
|
||||
h1 small, h2 small, h3 small, h4 small, h5 small, h6 small
|
||||
font-size: 60%
|
||||
color: #6f6f6f
|
||||
line-height: 0
|
||||
text-transform: none
|
||||
|
||||
h1
|
||||
font-weight: 200
|
||||
font-size: 44px
|
||||
|
||||
h2
|
||||
font-weight: 200
|
||||
font-size: 37px
|
||||
|
||||
h3
|
||||
font-weight: 500
|
||||
font-size: 27px
|
||||
|
||||
h4
|
||||
font-weight: 500
|
||||
font-size: 23px
|
||||
|
||||
h5
|
||||
font-weight: 900
|
||||
font-size: 17px
|
||||
|
||||
h6
|
||||
font-weight: 900
|
||||
font-size: 14px
|
||||
text-transform: uppercase
|
||||
color: #999
|
||||
|
||||
.collapse
|
||||
margin: 0!important
|
||||
|
||||
p, ul
|
||||
margin-bottom: 10px
|
||||
font-weight: normal
|
||||
font-size: 14px
|
||||
line-height: 1.6
|
||||
|
||||
p
|
||||
&.lead
|
||||
font-size: 17px
|
||||
&.last
|
||||
margin-bottom: 0px
|
||||
|
||||
ul
|
||||
li
|
||||
margin-left: 5px
|
||||
list-style-position: inside
|
||||
&.sidebar
|
||||
background: #ebebeb
|
||||
display: block
|
||||
list-style-type: none
|
||||
li
|
||||
display: block
|
||||
margin: 0
|
||||
a
|
||||
text-decoration: none
|
||||
color: #666
|
||||
padding: 10px 16px
|
||||
/* font-weight:bold;
|
||||
margin-right: 10px
|
||||
/* text-align:center;
|
||||
cursor: pointer
|
||||
border-bottom: 1px solid #777777
|
||||
border-top: 1px solid #FFFFFF
|
||||
display: block
|
||||
margin: 0
|
||||
&.last
|
||||
border-bottom-width: 0px
|
||||
h1, h2, h3, h4, h5, h6, p
|
||||
margin-bottom: 0!important
|
||||
|
||||
/* -------------------------------------
|
||||
* SIDEBAR
|
||||
*-------------------------------------
|
||||
|
||||
/* ---------------------------------------------------
|
||||
* RESPONSIVENESS
|
||||
* Nuke it from orbit. It's the only way to be sure.
|
||||
*------------------------------------------------------
|
||||
|
||||
/* Set a max-width, and make it display as block so it will automatically stretch to that width, but will also shrink down on a phone or something
|
||||
|
||||
.container
|
||||
display: block!important
|
||||
max-width: 600px!important
|
||||
margin: 0 auto!important
|
||||
/* makes it centered
|
||||
clear: both!important
|
||||
|
||||
/* This should also be a block element, so that it will fill 100% of the .container
|
||||
|
||||
.content
|
||||
padding: 15px
|
||||
max-width: 600px
|
||||
margin: 0 auto
|
||||
display: block
|
||||
table
|
||||
width: 100%
|
||||
|
||||
/* Let's make sure tables in the content area are 100% wide
|
||||
|
||||
/* Odds and ends
|
||||
|
||||
.column
|
||||
width: 300px
|
||||
float: left
|
||||
tr td
|
||||
padding: 15px
|
||||
|
||||
.column-wrap
|
||||
padding: 0!important
|
||||
margin: 0 auto
|
||||
max-width: 600px!important
|
||||
|
||||
.column table
|
||||
width: 100%
|
||||
|
||||
.social .column
|
||||
width: 280px
|
||||
min-width: 279px
|
||||
float: left
|
||||
|
||||
/* Be sure to place a .clear element after each set of columns, just to be safe
|
||||
|
||||
.clear
|
||||
display: block
|
||||
clear: both
|
||||
|
||||
/* -------------------------------------------
|
||||
* PHONE
|
||||
* For clients that support media queries.
|
||||
* Nothing fancy.
|
||||
*--------------------------------------------
|
||||
@media only screen and (max-width: 600px)
|
||||
a[class="btn"]
|
||||
display: block!important
|
||||
margin-bottom: 10px!important
|
||||
background-image: none!important
|
||||
margin-right: 0!important
|
||||
div[class="column"]
|
||||
width: auto!important
|
||||
float: none!important
|
||||
table.social div[class="column"]
|
||||
width: auto!important
|
||||
img.float-right
|
||||
float: none!important
|
||||
@@ -3,6 +3,7 @@ module Admin
|
||||
before_filter :load_enterprise_set, :only => :index
|
||||
before_filter :load_countries, :except => :index
|
||||
before_filter :load_methods_and_fees, :only => [:new, :edit, :update, :create]
|
||||
before_filter :load_taxons, :only => [:new, :edit, :update, :create]
|
||||
before_filter :check_can_change_sells, only: :update
|
||||
before_filter :check_can_change_bulk_sells, only: :bulk_update
|
||||
before_filter :override_owner, only: :create
|
||||
@@ -42,11 +43,12 @@ module Admin
|
||||
end
|
||||
|
||||
def bulk_update
|
||||
@enterprise_set = EnterpriseSet.new(params[:enterprise_set])
|
||||
@enterprise_set = EnterpriseSet.new(collection, params[:enterprise_set])
|
||||
if @enterprise_set.save
|
||||
flash[:success] = 'Enterprises updated successfully'
|
||||
redirect_to main_app.admin_enterprises_path
|
||||
else
|
||||
flash[:error] = 'Update failed'
|
||||
render :index
|
||||
end
|
||||
end
|
||||
@@ -66,7 +68,7 @@ module Admin
|
||||
private
|
||||
|
||||
def load_enterprise_set
|
||||
@enterprise_set = EnterpriseSet.new :collection => collection
|
||||
@enterprise_set = EnterpriseSet.new collection
|
||||
end
|
||||
|
||||
def load_countries
|
||||
@@ -88,6 +90,10 @@ module Admin
|
||||
@enterprise_fees = EnterpriseFee.managed_by(spree_current_user).for_enterprise(@enterprise).order(:fee_type, :name).all
|
||||
end
|
||||
|
||||
def load_taxons
|
||||
@taxons = Spree::Taxon.order(:name)
|
||||
end
|
||||
|
||||
def check_can_change_bulk_sells
|
||||
unless spree_current_user.admin?
|
||||
params[:enterprise_set][:collection_attributes].each do |i, enterprise_params|
|
||||
|
||||
41
app/controllers/admin/variant_overrides_controller.rb
Normal file
41
app/controllers/admin/variant_overrides_controller.rb
Normal file
@@ -0,0 +1,41 @@
|
||||
require 'open_food_network/spree_api_key_loader'
|
||||
|
||||
module Admin
|
||||
class VariantOverridesController < ResourceController
|
||||
include OpenFoodNetwork::SpreeApiKeyLoader
|
||||
include OrderCyclesHelper
|
||||
before_filter :load_spree_api_key, only: :index
|
||||
|
||||
def index
|
||||
@hubs = order_cycle_hub_enterprises(without_validation: true)
|
||||
@producers = order_cycle_producer_enterprises
|
||||
@hub_permissions = OpenFoodNetwork::Permissions.new(spree_current_user).
|
||||
order_cycle_enterprises_per_hub
|
||||
@variant_overrides = VariantOverride.for_hubs(@hubs)
|
||||
end
|
||||
|
||||
|
||||
def bulk_update
|
||||
collection_hash = Hash[params[:variant_overrides].each_with_index.map { |vo, i| [i, vo] }]
|
||||
vo_set = VariantOverrideSet.new collection_attributes: collection_hash
|
||||
|
||||
# Ensure we're authorised to update all variant overrides
|
||||
vo_set.collection.each { |vo| authorize! :update, vo }
|
||||
|
||||
if vo_set.save
|
||||
# Return saved VOs with IDs
|
||||
render json: vo_set.collection, each_serializer: Api::Admin::VariantOverrideSerializer
|
||||
else
|
||||
if vo_set.errors.present?
|
||||
render json: { errors: vo_set.errors }, status: 400
|
||||
else
|
||||
render nothing: true, status: 500
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def collection
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -32,6 +32,20 @@ class ApplicationController < ActionController::Base
|
||||
end
|
||||
end
|
||||
|
||||
def check_hub_ready_for_checkout
|
||||
# This condition is more rigourous than required by development to avoid coupling this
|
||||
# condition to every controller spec
|
||||
if current_distributor && current_order &&
|
||||
current_distributor.respond_to?(:ready_for_checkout?) &&
|
||||
!current_distributor.ready_for_checkout?
|
||||
|
||||
current_order.empty!
|
||||
current_order.set_distribution! nil, nil
|
||||
flash[:info] = "The hub you have selected is temporarily closed for orders. Please try again later."
|
||||
redirect_to root_url
|
||||
end
|
||||
end
|
||||
|
||||
def check_order_cycle_expiry
|
||||
if current_order_cycle.andand.closed?
|
||||
session[:expired_order_cycle_id] = current_order_cycle.id
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
class CheckoutController < Spree::CheckoutController
|
||||
layout 'darkswarm'
|
||||
|
||||
prepend_before_filter :check_hub_ready_for_checkout
|
||||
prepend_before_filter :check_order_cycle_expiry
|
||||
prepend_before_filter :require_order_cycle
|
||||
prepend_before_filter :require_distributor_chosen
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
Devise::ConfirmationsController.class_eval do
|
||||
protected
|
||||
# Override of devise method in Devise::ConfirmationsController
|
||||
def after_confirmation_path_for(resource_name, resource)
|
||||
spree.admin_path
|
||||
end
|
||||
end
|
||||
37
app/controllers/enterprise_confirmations_controller.rb
Normal file
37
app/controllers/enterprise_confirmations_controller.rb
Normal file
@@ -0,0 +1,37 @@
|
||||
class EnterpriseConfirmationsController < DeviseController
|
||||
include Spree::Core::ControllerHelpers::Auth # Needed for access to current_ability, so we can authorize! actions
|
||||
|
||||
# GET /resource/confirmation/new
|
||||
def new
|
||||
build_resource({})
|
||||
end
|
||||
|
||||
# POST /resource/confirmation
|
||||
def create
|
||||
self.resource = resource_class.find_by_unconfirmed_email_with_errors(resource_params)
|
||||
authorize! :resend_confirmation, resource
|
||||
|
||||
self.resource = resource_class.send_confirmation_instructions(resource_params)
|
||||
|
||||
if successfully_sent?(resource)
|
||||
set_flash_message(:success, :confirmation_sent) if is_navigational_format?
|
||||
else
|
||||
set_flash_message(:error, :confirmation_not_sent) if is_navigational_format?
|
||||
end
|
||||
|
||||
respond_with_navigational(resource){ redirect_to spree.admin_path }
|
||||
end
|
||||
|
||||
# GET /resource/confirmation?confirmation_token=abcdef
|
||||
def show
|
||||
self.resource = resource_class.confirm_by_token(params[:confirmation_token])
|
||||
|
||||
if resource.errors.empty?
|
||||
set_flash_message(:success, :confirmed) if is_navigational_format?
|
||||
else
|
||||
set_flash_message(:error, :not_confirmed) if is_navigational_format?
|
||||
end
|
||||
|
||||
respond_with_navigational(resource){ redirect_to spree.admin_path }
|
||||
end
|
||||
end
|
||||
@@ -6,17 +6,14 @@ class ShopController < BaseController
|
||||
|
||||
def show
|
||||
end
|
||||
|
||||
|
||||
def products
|
||||
# Can we make this query less slow?
|
||||
#
|
||||
if @products = current_order_cycle.andand
|
||||
.valid_products_distributed_by(current_distributor).andand
|
||||
.select { |p| !p.deleted? && p.has_stock_for_distribution?(current_order_cycle, current_distributor) }.andand
|
||||
.sort_by {|p| p.name }
|
||||
if @products = products_for_shop
|
||||
render status: 200,
|
||||
json: ActiveModel::ArraySerializer.new(@products, each_serializer: Api::ProductSerializer,
|
||||
current_order_cycle: current_order_cycle, current_distributor: current_distributor).to_json
|
||||
json: ActiveModel::ArraySerializer.new(@products, each_serializer: Api::ProductSerializer,
|
||||
current_order_cycle: current_order_cycle, current_distributor: current_distributor).to_json
|
||||
else
|
||||
render json: "", status: 404
|
||||
end
|
||||
@@ -39,10 +36,28 @@ class ShopController < BaseController
|
||||
|
||||
def set_order_cycles
|
||||
@order_cycles = OrderCycle.with_distributor(@distributor).active
|
||||
|
||||
|
||||
# And default to the only order cycle if there's only the one
|
||||
if @order_cycles.count == 1
|
||||
current_order(true).set_order_cycle! @order_cycles.first
|
||||
end
|
||||
end
|
||||
|
||||
def products_for_shop
|
||||
current_order_cycle.andand
|
||||
.valid_products_distributed_by(current_distributor).andand
|
||||
.order(taxon_order).andand
|
||||
.select { |p| !p.deleted? && p.has_stock_for_distribution?(current_order_cycle, current_distributor) }
|
||||
end
|
||||
|
||||
def taxon_order
|
||||
if current_distributor.preferred_shopfront_taxon_order.present?
|
||||
current_distributor
|
||||
.preferred_shopfront_taxon_order
|
||||
.split(",").map { |id| "primary_taxon_id=#{id} DESC" }
|
||||
.join(",") + ", name ASC"
|
||||
else
|
||||
"name ASC"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,4 +1,16 @@
|
||||
Spree::Admin::BaseController.class_eval do
|
||||
before_filter :warn_invalid_order_cycles
|
||||
|
||||
# Warn the user when they have an active order cycle with hubs that are not ready
|
||||
# for checkout (ie. does not have valid shipping and payment methods).
|
||||
def warn_invalid_order_cycles
|
||||
distributors = active_distributors_not_ready_for_checkout
|
||||
|
||||
if distributors.any? && flash[:notice].nil?
|
||||
flash[:notice] = active_distributors_not_ready_for_checkout_message(distributors)
|
||||
end
|
||||
end
|
||||
|
||||
# Override Spree method
|
||||
# It's a shame Spree doesn't just let CanCan handle this in it's own way
|
||||
def authorize_admin
|
||||
@@ -23,4 +35,27 @@ Spree::Admin::BaseController.class_eval do
|
||||
redirect_to root_path(anchor: "login?after_login=#{request.env['PATH_INFO']}")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
def active_distributors_not_ready_for_checkout
|
||||
ocs = OrderCycle.managed_by(spree_current_user).active
|
||||
distributors = ocs.map(&:distributors).flatten.uniq
|
||||
Enterprise.where('id IN (?)', distributors).not_ready_for_checkout
|
||||
end
|
||||
|
||||
def active_distributors_not_ready_for_checkout_message(distributors)
|
||||
distributor_names = distributors.map(&:name).join ', '
|
||||
|
||||
if distributors.count > 1
|
||||
"The hubs #{distributor_names} are listed in an active order cycle, " +
|
||||
"but do not have valid shipping and payment methods. " +
|
||||
"Until you set these up, customers will not be able to shop at these hubs."
|
||||
else
|
||||
"The hub #{distributor_names} is listed in an active order cycle, " +
|
||||
"but does not have valid shipping and payment methods. " +
|
||||
"Until you set these up, customers will not be able to shop at this hub."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2,8 +2,9 @@ require 'open_food_network/spree_api_key_loader'
|
||||
|
||||
Spree::Admin::ProductsController.class_eval do
|
||||
include OpenFoodNetwork::SpreeApiKeyLoader
|
||||
include OrderCyclesHelper
|
||||
before_filter :load_form_data, :only => [:bulk_edit, :new, :create, :edit, :update]
|
||||
before_filter :load_spree_api_key, :only => :bulk_edit
|
||||
before_filter :load_spree_api_key, :only => [:bulk_edit, :variant_overrides]
|
||||
|
||||
alias_method :location_after_save_original, :location_after_save
|
||||
|
||||
@@ -48,6 +49,7 @@ Spree::Admin::ProductsController.class_eval do
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
protected
|
||||
def location_after_save
|
||||
if URI(request.referer).path == '/admin/products/bulk_edit'
|
||||
|
||||
@@ -4,6 +4,7 @@ require 'open_food_network/products_and_inventory_report'
|
||||
require 'open_food_network/group_buy_report'
|
||||
require 'open_food_network/order_grouper'
|
||||
require 'open_food_network/customers_report'
|
||||
require 'open_food_network/users_and_enterprises_report'
|
||||
|
||||
Spree::Admin::ReportsController.class_eval do
|
||||
|
||||
@@ -392,8 +393,8 @@ Spree::Admin::ReportsController.class_eval do
|
||||
proc { |line_items| line_items.first.variant.full_name },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity } },
|
||||
proc { |line_items| total_units(line_items) },
|
||||
proc { |line_items| line_items.first.variant.price },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity * li.price } },
|
||||
proc { |line_items| line_items.first.price },
|
||||
proc { |line_items| line_items.sum { |li| li.amount } },
|
||||
proc { |line_items| "" },
|
||||
proc { |line_items| "incoming transport" } ]
|
||||
|
||||
@@ -415,8 +416,8 @@ Spree::Admin::ReportsController.class_eval do
|
||||
proc { |line_items| line_items.first.variant.full_name },
|
||||
proc { |line_items| line_items.first.order.distributor.name },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity } },
|
||||
proc { |line_items| line_items.first.variant.price },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity * li.price } },
|
||||
proc { |line_items| line_items.first.price },
|
||||
proc { |line_items| line_items.sum { |li| li.amount } },
|
||||
proc { |line_items| "shipping method" } ]
|
||||
|
||||
rules = [ { group_by: proc { |line_item| line_item.variant.product.supplier },
|
||||
@@ -431,7 +432,7 @@ Spree::Admin::ReportsController.class_eval do
|
||||
proc { |line_items| "TOTAL" },
|
||||
proc { |line_items| "" },
|
||||
proc { |line_items| "" },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity * li.price } },
|
||||
proc { |line_items| line_items.sum { |li| li.amount } },
|
||||
proc { |line_items| "" } ] },
|
||||
{ group_by: proc { |line_item| line_item.order.distributor },
|
||||
sort_by: proc { |distributor| distributor.name } } ]
|
||||
@@ -447,8 +448,8 @@ Spree::Admin::ReportsController.class_eval do
|
||||
proc { |line_items| line_items.first.variant.product.name },
|
||||
proc { |line_items| line_items.first.variant.full_name },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity } },
|
||||
proc { |line_items| line_items.first.variant.price },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity * li.price } },
|
||||
proc { |line_items| line_items.first.price },
|
||||
proc { |line_items| line_items.sum { |li| li.amount } },
|
||||
proc { |line_items| "" },
|
||||
proc { |line_items| "shipping method" } ]
|
||||
|
||||
@@ -460,7 +461,7 @@ Spree::Admin::ReportsController.class_eval do
|
||||
proc { |line_items| "" },
|
||||
proc { |line_items| "" },
|
||||
proc { |line_items| "" },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity * li.price } },
|
||||
proc { |line_items| line_items.sum { |li| li.amount } },
|
||||
proc { |line_items| line_items.map { |li| li.order }.uniq.sum { |o| o.ship_total } },
|
||||
proc { |line_items| "" } ] },
|
||||
{ group_by: proc { |line_item| line_item.variant.product.supplier },
|
||||
@@ -474,7 +475,7 @@ Spree::Admin::ReportsController.class_eval do
|
||||
table_items = @line_items
|
||||
@include_blank = 'All'
|
||||
|
||||
header = ["Hub", "Customer", "Email", "Phone", "Producer", "Product", "Variant", "Amount", "Item ($)", "Dist ($)", "Ship ($)", "Total ($)", "Paid?",
|
||||
header = ["Hub", "Customer", "Email", "Phone", "Producer", "Product", "Variant", "Amount", "Item ($)", "Item + Fees ($)", "Dist ($)", "Ship ($)", "Total ($)", "Paid?",
|
||||
"Shipping", "Delivery?", "Ship street", "Ship street 2", "Ship city", "Ship postcode", "Ship state", "Order notes"]
|
||||
|
||||
rsa = proc { |line_items| line_items.first.order.shipping_method.andand.require_ship_address }
|
||||
@@ -487,7 +488,8 @@ Spree::Admin::ReportsController.class_eval do
|
||||
proc { |line_items| line_items.first.variant.product.name },
|
||||
proc { |line_items| line_items.first.variant.full_name },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity } },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity * li.price } },
|
||||
proc { |line_items| line_items.sum { |li| li.amount } },
|
||||
proc { |line_items| line_items.sum { |li| li.amount_with_adjustments } },
|
||||
proc { |line_items| "" },
|
||||
proc { |line_items| "" },
|
||||
proc { |line_items| "" },
|
||||
@@ -515,8 +517,9 @@ Spree::Admin::ReportsController.class_eval do
|
||||
proc { |line_items| "TOTAL" },
|
||||
proc { |line_items| "" },
|
||||
proc { |line_items| "" },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity * li.price } },
|
||||
proc { |line_items| line_items.map { |li| li.order }.uniq.sum { |o| o.distribution_total } },
|
||||
proc { |line_items| line_items.sum { |li| li.amount } },
|
||||
proc { |line_items| line_items.sum { |li| li.amount_with_adjustments } },
|
||||
proc { |line_items| line_items.map { |li| li.order }.uniq.sum { |o| o.admin_and_handling_total } },
|
||||
proc { |line_items| line_items.map { |li| li.order }.uniq.sum { |o| o.ship_total } },
|
||||
proc { |line_items| line_items.map { |li| li.order }.uniq.sum { |o| o.total } },
|
||||
proc { |line_items| line_items.all? { |li| li.order.paid? } ? "Yes" : "No" },
|
||||
@@ -546,7 +549,7 @@ Spree::Admin::ReportsController.class_eval do
|
||||
proc { |line_items| line_items.first.variant.product.name },
|
||||
proc { |line_items| line_items.first.variant.full_name },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity } },
|
||||
proc { |line_items| line_items.first.variant.price },
|
||||
proc { |line_items| line_items.first.price },
|
||||
proc { |line_items| line_items.sum { |li| li.quantity * li.price } },
|
||||
proc { |line_items| "" },
|
||||
proc { |line_items| "incoming transport" } ]
|
||||
@@ -572,13 +575,16 @@ Spree::Admin::ReportsController.class_eval do
|
||||
|
||||
def products_and_inventory
|
||||
@report_types = REPORT_TYPES[:products_and_inventory]
|
||||
|
||||
@report = OpenFoodNetwork::ProductsAndInventoryReport.new spree_current_user, params
|
||||
#@table = @report.table
|
||||
#@header = @report.header
|
||||
render_report(@report.header, @report.table, params[:csv], "products_and_inventory.csv")
|
||||
end
|
||||
|
||||
def users_and_enterprises
|
||||
# @report_types = REPORT_TYPES[:users_and_enterprises]
|
||||
@report = OpenFoodNetwork::UsersAndEnterprisesReport.new params
|
||||
render_report(@report.header, @report.table, params[:csv], "users_and_enterprises.csv")
|
||||
end
|
||||
|
||||
def render_report (header, table, create_csv, csv_file_name)
|
||||
unless create_csv
|
||||
render :html => table
|
||||
@@ -613,7 +619,8 @@ Spree::Admin::ReportsController.class_eval do
|
||||
:orders_and_fulfillment => {:name => "Orders & Fulfillment Reports", :description => ''},
|
||||
:customers => {:name => "Customers", :description => 'Customer details'},
|
||||
:products_and_inventory => {:name => "Products & Inventory", :description => ''},
|
||||
:sales_total => { :name => "Sales Total", :description => "Sales Total For All Orders" }
|
||||
:sales_total => { :name => "Sales Total", :description => "Sales Total For All Orders" },
|
||||
:users_and_enterprises => { :name => "Users & Enterprises", :description => "Enterprise Ownership & Status" }
|
||||
}
|
||||
# Return only reports the user is authorized to view.
|
||||
reports.select { |action| can? action, :report }
|
||||
|
||||
@@ -9,6 +9,7 @@ Spree::Api::ProductsController.class_eval do
|
||||
respond_with(@products, default_template: :index)
|
||||
end
|
||||
|
||||
# TODO: This should be named 'managed'. Is the action above used? Maybe we should remove it.
|
||||
def bulk_products
|
||||
@products = OpenFoodNetwork::Permissions.new(current_api_user).managed_products.
|
||||
merge(product_scope).
|
||||
@@ -19,6 +20,20 @@ Spree::Api::ProductsController.class_eval do
|
||||
render text: { products: ActiveModel::ArraySerializer.new(@products, each_serializer: Spree::Api::ProductSerializer), pages: @products.num_pages }.to_json
|
||||
end
|
||||
|
||||
def distributable
|
||||
producers = OpenFoodNetwork::Permissions.new(current_api_user).
|
||||
order_cycle_enterprises.is_primary_producer.by_name
|
||||
|
||||
@products = Spree::Product.scoped.
|
||||
merge(product_scope).
|
||||
where(supplier_id: producers).
|
||||
by_producer.by_name.
|
||||
ransack(params[:q]).result.
|
||||
page(params[:page]).per(params[:per_page])
|
||||
|
||||
render text: { products: ActiveModel::ArraySerializer.new(@products, each_serializer: Spree::Api::ProductSerializer), pages: @products.num_pages }.to_json
|
||||
end
|
||||
|
||||
def soft_delete
|
||||
authorize! :delete, Spree::Product
|
||||
@product = find_product(params[:product_id])
|
||||
|
||||
@@ -2,6 +2,11 @@ Spree::CheckoutController.class_eval do
|
||||
|
||||
include CheckoutHelper
|
||||
|
||||
def edit
|
||||
flash.keep
|
||||
redirect_to main_app.checkout_path
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def before_payment
|
||||
@@ -18,7 +23,7 @@ Spree::CheckoutController.class_eval do
|
||||
preferred_bill_address, preferred_ship_address = spree_current_user.bill_address, spree_current_user.ship_address if spree_current_user.respond_to?(:bill_address) && spree_current_user.respond_to?(:ship_address)
|
||||
|
||||
@order.bill_address ||= preferred_bill_address || last_used_bill_address || Spree::Address.default
|
||||
@order.ship_address ||= preferred_ship_address || last_used_ship_address || nil
|
||||
@order.ship_address ||= preferred_ship_address || last_used_ship_address || nil
|
||||
end
|
||||
|
||||
def after_complete
|
||||
|
||||
@@ -5,8 +5,9 @@ Spree::OrdersController.class_eval do
|
||||
before_filter :update_distribution, :only => :update
|
||||
before_filter :filter_order_params, :only => :update
|
||||
|
||||
prepend_before_filter :require_order_cycle, only: [:edit]
|
||||
prepend_before_filter :require_distributor_chosen, only: [:edit]
|
||||
prepend_before_filter :require_order_cycle, only: :edit
|
||||
prepend_before_filter :require_distributor_chosen, only: :edit
|
||||
before_filter :check_hub_ready_for_checkout, only: :edit
|
||||
|
||||
include OrderCyclesHelper
|
||||
layout 'darkswarm'
|
||||
|
||||
@@ -5,8 +5,8 @@ module Admin
|
||||
end
|
||||
|
||||
def admin_inject_enterprises
|
||||
admin_inject_json_ams_array("ofn.admin", "my_enterprises", @my_enterprises, Api::Admin::EnterpriseSerializer) +
|
||||
admin_inject_json_ams_array("ofn.admin", "all_enterprises", @all_enterprises, Api::Admin::EnterpriseSerializer)
|
||||
admin_inject_json_ams_array("ofn.admin", "my_enterprises", @my_enterprises, Api::Admin::BasicEnterpriseSerializer) +
|
||||
admin_inject_json_ams_array("ofn.admin", "all_enterprises", @all_enterprises, Api::Admin::BasicEnterpriseSerializer)
|
||||
end
|
||||
|
||||
def admin_inject_enterprise_relationships
|
||||
@@ -25,36 +25,45 @@ module Admin
|
||||
admin_inject_json_ams_array "admin.shipping_methods", "shippingMethods", @shipping_methods, Api::Admin::IdNameSerializer
|
||||
end
|
||||
|
||||
def admin_inject_hubs
|
||||
admin_inject_json_ams_array "ofn.admin", "hubs", @hubs, Api::Admin::IdNameSerializer
|
||||
end
|
||||
|
||||
def admin_inject_producers
|
||||
admin_inject_json_ams_array "ofn.admin", "producers", @producers, Api::Admin::IdNameSerializer
|
||||
end
|
||||
|
||||
def admin_inject_hub_permissions
|
||||
render partial: "admin/json/injection_ams", locals: {ngModule: "ofn.admin", name: "hubPermissions", json: @hub_permissions.to_json}
|
||||
end
|
||||
|
||||
def admin_inject_products
|
||||
admin_inject_json_ams_array "ofn.admin", "products", @products, Spree::Api::ProductSerializer
|
||||
end
|
||||
|
||||
def admin_inject_taxons
|
||||
admin_inject_json_ams_array "ofn.admin", "taxons", @taxons, Api::Admin::TaxonSerializer
|
||||
admin_inject_json_ams_array "admin.taxons", "taxons", @taxons, Api::Admin::TaxonSerializer
|
||||
end
|
||||
|
||||
def admin_inject_users
|
||||
admin_inject_json_ams_array "ofn.admin", "users", @users, Api::Admin::UserSerializer
|
||||
end
|
||||
|
||||
def admin_inject_variant_overrides
|
||||
admin_inject_json_ams_array "ofn.admin", "variantOverrides", @variant_overrides, Api::Admin::VariantOverrideSerializer
|
||||
end
|
||||
|
||||
def admin_inject_spree_api_key
|
||||
render partial: "admin/json/injection_ams", locals: {ngModule: 'ofn.admin', name: 'SpreeApiKey', json: "'#{@spree_api_key.to_s}'"}
|
||||
end
|
||||
|
||||
def admin_inject_enterprise_long_description
|
||||
# Clean line breaks and quotes.
|
||||
long_description = @enterprise.long_description.blank? ? "" : @enterprise.long_description.gsub("\r\n", "<br />").gsub("\"", """).gsub("'","'")
|
||||
render partial: "admin/json/injection_ams", locals: {ngModule: 'admin.enterprises', name: 'longDescription', json: "'#{long_description}'"}
|
||||
end
|
||||
|
||||
|
||||
def admin_inject_json_ams(ngModule, name, data, serializer, opts = {})
|
||||
json = serializer.new(data).to_json
|
||||
json = serializer.new(data, scope: spree_current_user).to_json
|
||||
render partial: "admin/json/injection_ams", locals: {ngModule: ngModule, name: name, json: json}
|
||||
end
|
||||
|
||||
def admin_inject_json_ams_array(ngModule, name, data, serializer, opts = {})
|
||||
json = ActiveModel::ArraySerializer.new(data, {each_serializer: serializer}.merge(opts)).to_json
|
||||
json = ActiveModel::ArraySerializer.new(data, {each_serializer: serializer, scope: spree_current_user}.merge(opts)).to_json
|
||||
render partial: "admin/json/injection_ams", locals: {ngModule: ngModule, name: name, json: json}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,28 +1,51 @@
|
||||
module CheckoutHelper
|
||||
def checkout_adjustments_for_summary(order, opts={})
|
||||
def checkout_adjustments_for(order, opts={})
|
||||
adjustments = order.adjustments.eligible
|
||||
exclude = opts[:exclude] || {}
|
||||
|
||||
# Remove empty tax adjustments and (optionally) shipping fees
|
||||
adjustments.reject! { |a| a.originator_type == 'Spree::TaxRate' && a.amount == 0 }
|
||||
adjustments.reject! { |a| a.originator_type == 'Spree::ShippingMethod' } if exclude.include? :shipping
|
||||
adjustments.reject! { |a| a.source_type == 'Spree::LineItem' } if exclude.include? :line_item
|
||||
|
||||
enterprise_fee_adjustments = adjustments.select { |a| a.originator_type == 'EnterpriseFee' }
|
||||
adjustments.reject! { |a| a.originator_type == 'EnterpriseFee' }
|
||||
unless exclude.include? :distribution
|
||||
adjustments << Spree::Adjustment.new(label: 'Distribution', amount: enterprise_fee_adjustments.sum(&:amount))
|
||||
enterprise_fee_adjustments = adjustments.select { |a| a.originator_type == 'EnterpriseFee' && a.source_type != 'Spree::LineItem' }
|
||||
adjustments.reject! { |a| a.originator_type == 'EnterpriseFee' && a.source_type != 'Spree::LineItem' }
|
||||
unless exclude.include? :admin_and_handling
|
||||
adjustments << Spree::Adjustment.new(label: 'Admin & Handling', amount: enterprise_fee_adjustments.sum(&:amount))
|
||||
end
|
||||
|
||||
adjustments
|
||||
end
|
||||
|
||||
def checkout_adjustments_total(order)
|
||||
adjustments = checkout_adjustments_for_summary(order, exclude: [:shipping])
|
||||
adjustments.sum &:display_amount
|
||||
def display_checkout_admin_and_handling_adjustments_total_for(order)
|
||||
adjustments = order.adjustments.eligible.where('originator_type = ? AND source_type != ? ', 'EnterpriseFee', 'Spree::LineItem' )
|
||||
Spree::Money.new( adjustments.sum( &:amount ) , { :currency => order.currency })
|
||||
end
|
||||
|
||||
def checkout_cart_total_with_adjustments(order)
|
||||
order.display_item_total.money.to_f + checkout_adjustments_total(order).money.to_f
|
||||
def checkout_line_item_adjustments(order)
|
||||
order.adjustments.eligible.where( source_type: "Spree::LineItem")
|
||||
end
|
||||
|
||||
def checkout_subtotal(order)
|
||||
order.item_total + checkout_line_item_adjustments(order).sum( &:amount )
|
||||
end
|
||||
|
||||
def display_checkout_subtotal(order)
|
||||
Spree::Money.new( checkout_subtotal(order) , { :currency => order.currency })
|
||||
end
|
||||
|
||||
def checkout_state_options(source_address)
|
||||
if source_address == :billing
|
||||
address = @order.billing_address
|
||||
elsif source_address == :shipping
|
||||
address = @order.shipping_address
|
||||
end
|
||||
|
||||
[[]] + address.country.states.map { |c| [c.name, c.id] }
|
||||
end
|
||||
|
||||
def checkout_country_options
|
||||
available_countries.map { |c| [c.name, c.id] }
|
||||
end
|
||||
|
||||
|
||||
@@ -33,10 +56,21 @@ module CheckoutHelper
|
||||
name: path,
|
||||
id: path,
|
||||
"ng-model" => path,
|
||||
"ng-class" => "{error: !fieldValid('#{path}')}"
|
||||
"ng-class" => "{error: !fieldValid('#{path}')}"
|
||||
}.merge args
|
||||
|
||||
render partial: "shared/validated_input", locals: {name: name, path: path, attributes: attributes}
|
||||
|
||||
render "shared/validated_input", name: name, path: path, attributes: attributes
|
||||
end
|
||||
|
||||
def validated_select(name, path, options, args = {})
|
||||
attributes = {
|
||||
required: true,
|
||||
id: path,
|
||||
"ng-model" => path,
|
||||
"ng-class" => "{error: !fieldValid('#{path}')}"
|
||||
}.merge args
|
||||
|
||||
render "shared/validated_select", name: name, path: path, options: options, attributes: attributes
|
||||
end
|
||||
|
||||
def reset_order
|
||||
|
||||
@@ -45,4 +45,20 @@ module EnterprisesHelper
|
||||
options[:data] = { :action => 'remove', :confirm => enterprise_confirm_delete_message(enterprise) }
|
||||
link_to_with_icon 'icon-trash', name, url, options
|
||||
end
|
||||
|
||||
def shop_trial_in_progress?(enterprise)
|
||||
!!enterprise.shop_trial_start_date &&
|
||||
(enterprise.shop_trial_start_date + Enterprise::SHOP_TRIAL_LENGTH.days > Time.now) &&
|
||||
%w(own any).include?(enterprise.sells)
|
||||
end
|
||||
|
||||
def shop_trial_expired?(enterprise)
|
||||
!!enterprise.shop_trial_start_date &&
|
||||
(enterprise.shop_trial_start_date + Enterprise::SHOP_TRIAL_LENGTH.days <= Time.now) &&
|
||||
%w(own any).include?(enterprise.sells)
|
||||
end
|
||||
|
||||
def remaining_trial_days(enterprise)
|
||||
distance_of_time_in_words(Time.now, enterprise.shop_trial_start_date + Enterprise::SHOP_TRIAL_LENGTH.days)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -11,21 +11,32 @@ module OrderCyclesHelper
|
||||
order_cycle_permitted_enterprises.is_primary_producer.by_name
|
||||
end
|
||||
|
||||
def coordinating_enterprises
|
||||
order_cycle_hub_enterprises
|
||||
end
|
||||
|
||||
def order_cycle_hub_enterprises
|
||||
def order_cycle_coordinating_enterprises
|
||||
order_cycle_permitted_enterprises.is_distributor.by_name
|
||||
end
|
||||
|
||||
def order_cycle_local_remote_class(distributor, order_cycle)
|
||||
if distributor.nil? || order_cycle.nil?
|
||||
''
|
||||
elsif order_cycle.distributors.include? distributor
|
||||
' local'
|
||||
def order_cycle_hub_enterprises(options={})
|
||||
enterprises = order_cycle_permitted_enterprises.is_distributor.by_name
|
||||
|
||||
if options[:without_validation]
|
||||
enterprises
|
||||
else
|
||||
' remote'
|
||||
enterprises.map do |e|
|
||||
disabled_message = nil
|
||||
if e.shipping_methods.empty? && e.payment_methods.available.empty?
|
||||
disabled_message = 'no shipping or payment methods'
|
||||
elsif e.shipping_methods.empty?
|
||||
disabled_message = 'no shipping methods'
|
||||
elsif e.payment_methods.available.empty?
|
||||
disabled_message = 'no payment methods'
|
||||
end
|
||||
|
||||
if disabled_message
|
||||
["#{e.name} (#{disabled_message})", e.id, {disabled: true}]
|
||||
else
|
||||
[e.name, e.id]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -42,11 +53,6 @@ module OrderCyclesHelper
|
||||
end
|
||||
|
||||
|
||||
def distributor_options(distributors, current_distributor, order_cycle)
|
||||
options = distributors.map { |d| [d.name, d.id, {:class => order_cycle_local_remote_class(d, order_cycle).strip}] }
|
||||
options_for_select(options, current_distributor)
|
||||
end
|
||||
|
||||
def order_cycle_options
|
||||
@order_cycles.
|
||||
with_distributor(current_distributor).
|
||||
|
||||
@@ -5,12 +5,6 @@ module Spree
|
||||
order.nil? || order.line_items.empty?
|
||||
end
|
||||
|
||||
def order_distribution_subtotal(order, options={})
|
||||
options.reverse_merge! :format_as_currency => true
|
||||
amount = order.adjustments.enterprise_fee.sum &:amount
|
||||
options.delete(:format_as_currency) ? spree_number_to_currency(amount) : amount
|
||||
end
|
||||
|
||||
def alternative_available_distributors(order)
|
||||
DistributionChangeValidator.new(order).available_distributors(Enterprise.all) - [order.distributor]
|
||||
end
|
||||
|
||||
@@ -2,12 +2,18 @@ require 'devise/mailers/helpers'
|
||||
class EnterpriseMailer < Spree::BaseMailer
|
||||
include Devise::Mailers::Helpers
|
||||
|
||||
def welcome(enterprise)
|
||||
@enterprise = enterprise
|
||||
mail(:to => enterprise.email, :from => from_address,
|
||||
:subject => "#{enterprise.name} is now on #{Spree::Config[:site_name]}")
|
||||
end
|
||||
|
||||
def confirmation_instructions(record, token, opts={})
|
||||
@token = token
|
||||
find_enterprise(record)
|
||||
opts = {
|
||||
subject: "Please confirm your email for #{@enterprise.name}",
|
||||
to: [ @enterprise.owner.email, @enterprise.email ].uniq,
|
||||
to: ( @enterprise.unconfirmed_email || @enterprise.email ),
|
||||
from: from_address,
|
||||
}
|
||||
devise_mail(record, :confirmation_instructions, opts)
|
||||
|
||||
13
app/mailers/spree/base_mailer_decorator.rb
Normal file
13
app/mailers/spree/base_mailer_decorator.rb
Normal file
@@ -0,0 +1,13 @@
|
||||
Spree::BaseMailer.class_eval do
|
||||
# Inline stylesheets
|
||||
include Roadie::Rails::Automatic
|
||||
|
||||
# Define layout
|
||||
layout 'mailer'
|
||||
|
||||
protected
|
||||
def roadie_options
|
||||
# This lets us specify assets using relative paths in email templates
|
||||
super.merge(url_options: {host: URI(spree.root_url).host })
|
||||
end
|
||||
end
|
||||
@@ -2,14 +2,23 @@ Spree::OrderMailer.class_eval do
|
||||
helper HtmlHelper
|
||||
helper CheckoutHelper
|
||||
helper SpreeCurrencyHelper
|
||||
def confirm_email(order, resend = false)
|
||||
find_order(order)
|
||||
|
||||
def confirm_email_for_customer(order, resend = false)
|
||||
find_order(order) # Finds an order instance from an id
|
||||
subject = (resend ? "[#{t(:resend).upcase}] " : '')
|
||||
subject += "#{Spree::Config[:site_name]} #{t('order_mailer.confirm_email.subject')} ##{@order.number}"
|
||||
mail(:to => @order.email,
|
||||
:from => from_address,
|
||||
mail(:to => @order.email,
|
||||
:from => from_address,
|
||||
:subject => subject,
|
||||
:reply_to => @order.distributor.email,
|
||||
:cc => @order.distributor.email)
|
||||
:reply_to => @order.distributor.email)
|
||||
end
|
||||
|
||||
def confirm_email_for_shop(order, resend = false)
|
||||
find_order(order) # Finds an order instance from an id
|
||||
subject = (resend ? "[#{t(:resend).upcase}] " : '')
|
||||
subject += "#{Spree::Config[:site_name]} #{t('order_mailer.confirm_email.subject')} ##{@order.number}"
|
||||
mail(:to => @order.distributor.email,
|
||||
:from => from_address,
|
||||
:subject => subject)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
Spree::UserMailer.class_eval do
|
||||
|
||||
def signup_confirmation(user)
|
||||
@user = user
|
||||
mail(:to => user.email, :from => from_address,
|
||||
:subject => 'Welcome to ' + Spree::Config[:site_name])
|
||||
:subject => t(:welcome_to) + Spree::Config[:site_name])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -3,14 +3,16 @@ class Enterprise < ActiveRecord::Base
|
||||
SHOP_TRIAL_LENGTH = 30
|
||||
ENTERPRISE_SEARCH_RADIUS = 100
|
||||
|
||||
devise :confirmable, reconfirmable: true
|
||||
preference :shopfront_message, :text, default: ""
|
||||
preference :shopfront_closed_message, :text, default: ""
|
||||
preference :shopfront_taxon_order, :string, default: ""
|
||||
|
||||
devise :confirmable, reconfirmable: true, confirmation_keys: [ :id, :email ]
|
||||
|
||||
self.inheritance_column = nil
|
||||
|
||||
acts_as_gmappable :process_geocoding => false
|
||||
|
||||
before_create :check_email
|
||||
|
||||
has_and_belongs_to_many :groups, class_name: 'EnterpriseGroup'
|
||||
has_many :producer_properties, foreign_key: 'producer_id'
|
||||
has_many :supplied_products, :class_name => 'Spree::Product', :foreign_key => 'supplier_id', :dependent => :destroy
|
||||
@@ -54,18 +56,41 @@ class Enterprise < ActiveRecord::Base
|
||||
validates :address, presence: true, associated: true
|
||||
validates :email, presence: true
|
||||
validates_presence_of :owner
|
||||
validate :shopfront_taxons
|
||||
validate :enforce_ownership_limit, if: lambda { owner_id_changed? && !owner_id.nil? }
|
||||
validates_length_of :description, :maximum => 255
|
||||
|
||||
before_save :confirmation_check, if: lambda{ email_changed? }
|
||||
|
||||
before_validation :ensure_owner_is_manager, if: lambda { owner_id_changed? && !owner_id.nil? }
|
||||
before_validation :set_unused_address_fields
|
||||
after_validation :geocode_address
|
||||
|
||||
# TODO: Later versions of devise have a dedicated after_confirmation callback, so use that
|
||||
after_update :welcome_after_confirm, if: lambda { confirmation_token_changed? && confirmation_token.nil? }
|
||||
after_create :send_welcome_email, if: lambda { email_is_known? }
|
||||
|
||||
scope :by_name, order('name')
|
||||
scope :visible, where(:visible => true)
|
||||
scope :confirmed, where('confirmed_at IS NOT NULL')
|
||||
scope :unconfirmed, where('confirmed_at IS NULL')
|
||||
scope :activated, where('confirmed_at IS NOT NULL AND sells <> \'unspecified\'')
|
||||
scope :activated, where("confirmed_at IS NOT NULL AND sells != 'unspecified'")
|
||||
scope :ready_for_checkout, lambda {
|
||||
joins(:shipping_methods).
|
||||
joins(:payment_methods).
|
||||
merge(Spree::PaymentMethod.available).
|
||||
select('DISTINCT enterprises.*')
|
||||
}
|
||||
scope :not_ready_for_checkout, lambda {
|
||||
# When ready_for_checkout is empty, ActiveRecord generates the SQL:
|
||||
# id NOT IN (NULL)
|
||||
# I would have expected this to return all rows, but instead it returns none. To
|
||||
# work around this, we use the "OR ?=0" clause to return all rows when there are
|
||||
# no enterprises ready for checkout.
|
||||
where('id NOT IN (?) OR ?=0',
|
||||
Enterprise.ready_for_checkout,
|
||||
Enterprise.ready_for_checkout.count)
|
||||
}
|
||||
scope :is_primary_producer, where(:is_primary_producer => true)
|
||||
scope :is_distributor, where('sells != ?', 'none')
|
||||
scope :supplying_variant_in, lambda { |variants| joins(:supplied_products => :variants_including_master).where('spree_variants.id IN (?)', variants).select('DISTINCT enterprises.*') }
|
||||
@@ -121,7 +146,7 @@ class Enterprise < ActiveRecord::Base
|
||||
if user.has_spree_role?('admin')
|
||||
scoped
|
||||
else
|
||||
joins(:enterprise_roles).where('enterprise_roles.user_id = ?', user.id)
|
||||
joins(:enterprise_roles).where('enterprise_roles.user_id = ?', user.id).select("DISTINCT enterprises.*")
|
||||
end
|
||||
}
|
||||
|
||||
@@ -261,14 +286,8 @@ class Enterprise < ActiveRecord::Base
|
||||
select('DISTINCT spree_taxons.*')
|
||||
end
|
||||
|
||||
def shop_trial_in_progress?
|
||||
!!shop_trial_start_date &&
|
||||
(shop_trial_start_date + SHOP_TRIAL_LENGTH.days > Time.now) &&
|
||||
%w(own any).include?(sells)
|
||||
end
|
||||
|
||||
def remaining_trial_days
|
||||
distance_of_time_in_words(Time.now, shop_trial_start_date + SHOP_TRIAL_LENGTH.days)
|
||||
def ready_for_checkout?
|
||||
shipping_methods.any? && payment_methods.available.any?
|
||||
end
|
||||
|
||||
protected
|
||||
@@ -279,8 +298,27 @@ class Enterprise < ActiveRecord::Base
|
||||
|
||||
private
|
||||
|
||||
def check_email
|
||||
skip_confirmation! if owner.enterprises.confirmed.map(&:email).include?(email)
|
||||
def email_is_known?
|
||||
owner.enterprises.confirmed.map(&:email).include?(email)
|
||||
end
|
||||
|
||||
def confirmation_check
|
||||
# Skip confirmation/reconfirmation if the new email has already been confirmed
|
||||
if email_is_known?
|
||||
new_record? ? skip_confirmation! : skip_reconfirmation!
|
||||
end
|
||||
end
|
||||
|
||||
def welcome_after_confirm
|
||||
# Send welcome email if we are confirming a newly created enterprise
|
||||
# Note: this callback only runs on email confirmation
|
||||
if confirmed? && unconfirmed_email.nil? && !unconfirmed_email_changed?
|
||||
send_welcome_email
|
||||
end
|
||||
end
|
||||
|
||||
def send_welcome_email
|
||||
EnterpriseMailer.welcome(self).deliver
|
||||
end
|
||||
|
||||
def strip_url(url)
|
||||
@@ -301,7 +339,13 @@ class Enterprise < ActiveRecord::Base
|
||||
|
||||
def enforce_ownership_limit
|
||||
unless owner.can_own_more_enterprises?
|
||||
errors.add(:owner, "^You are not permitted to own own any more enterprises (limit is #{owner.enterprise_limit}).")
|
||||
errors.add(:owner, "^#{owner.email} is not permitted to own any more enterprises (limit is #{owner.enterprise_limit}).")
|
||||
end
|
||||
end
|
||||
|
||||
def shopfront_taxons
|
||||
unless preferred_shopfront_taxon_order =~ /\A((\d+,)*\d+)?\z/
|
||||
errors.add(:shopfront_category_ordering, "must contain a list of taxons.")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
class EnterpriseFeeSet < ModelSet
|
||||
def initialize(attributes={})
|
||||
super(EnterpriseFee, EnterpriseFee.all,
|
||||
proc { |attrs| attrs[:name].blank? },
|
||||
attributes)
|
||||
attributes,
|
||||
proc { |attrs| attrs[:name].blank? })
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class EnterpriseSet < ModelSet
|
||||
def initialize(attributes={})
|
||||
super(Enterprise, Enterprise.all, nil, attributes)
|
||||
def initialize(collection, attributes={})
|
||||
super(Enterprise, collection, attributes)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -5,8 +5,11 @@ class ModelSet
|
||||
|
||||
attr_accessor :collection
|
||||
|
||||
def initialize(klass, collection, reject_if=nil, attributes={})
|
||||
@klass, @collection, @reject_if = klass, collection, reject_if
|
||||
def initialize(klass, collection, attributes={}, reject_if=nil, delete_if=nil)
|
||||
@klass, @collection, @reject_if, @delete_if = klass, collection, reject_if, delete_if
|
||||
|
||||
# Set here first, to ensure that we apply collection_attributes to the right collection
|
||||
@collection = attributes[:collection] if attributes[:collection]
|
||||
|
||||
attributes.each do |name, value|
|
||||
send("#{name}=", value)
|
||||
@@ -26,11 +29,23 @@ class ModelSet
|
||||
end
|
||||
|
||||
def errors
|
||||
@collection.map { |ef| ef.errors.full_messages }.flatten
|
||||
errors = ActiveModel::Errors.new self
|
||||
full_messages = @collection.map { |ef| ef.errors.full_messages }.flatten
|
||||
full_messages.each { |fm| errors.add(:base, fm) }
|
||||
errors
|
||||
end
|
||||
|
||||
def save
|
||||
collection.all?(&:save)
|
||||
collection_to_delete.each &:destroy
|
||||
collection_to_keep.all? &:save
|
||||
end
|
||||
|
||||
def collection_to_delete
|
||||
collection.select { |e| @delete_if.andand.call(e.attributes) }
|
||||
end
|
||||
|
||||
def collection_to_keep
|
||||
collection.reject { |e| @delete_if.andand.call(e.attributes) }
|
||||
end
|
||||
|
||||
def persisted?
|
||||
|
||||
@@ -113,13 +113,14 @@ class OrderCycle < ActiveRecord::Base
|
||||
end
|
||||
|
||||
# If a product without variants is added to an order cycle, and then some variants are added
|
||||
# to that product, then the master variant is still part of the order cycle, but customers
|
||||
# should not be able to purchase it.
|
||||
# to that product, but not the order cycle, then the master variant should not available for customers
|
||||
# to purchase.
|
||||
# This method filters out such products so that the customer cannot purchase them.
|
||||
def valid_products_distributed_by(distributor)
|
||||
variants = variants_distributed_by(distributor)
|
||||
products = variants.map(&:product).uniq
|
||||
products.reject { |p| product_has_only_obsolete_master_in_distribution?(p, variants) }
|
||||
product_ids = products.reject{ |p| product_has_only_obsolete_master_in_distribution?(p, variants) }.map(&:id)
|
||||
Spree::Product.where(id: product_ids)
|
||||
end
|
||||
|
||||
def products
|
||||
@@ -175,8 +176,8 @@ class OrderCycle < ActiveRecord::Base
|
||||
private
|
||||
|
||||
# If a product without variants is added to an order cycle, and then some variants are added
|
||||
# to that product, then the master variant is still part of the order cycle, but customers
|
||||
# should not be able to purchase it.
|
||||
# to that product, but not the order cycle, then the master variant should not available for customers
|
||||
# to purchase.
|
||||
# This method is used by #valid_products_distributed_by to filter out such products so that
|
||||
# the customer cannot purchase them.
|
||||
def product_has_only_obsolete_master_in_distribution?(product, distributed_variants)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class OrderCycleSet < ModelSet
|
||||
def initialize(attributes={})
|
||||
super(OrderCycle, OrderCycle.all, nil, attributes)
|
||||
super(OrderCycle, OrderCycle.all, attributes)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -51,7 +51,7 @@ class AbilityDecorator
|
||||
can [:admin, :index, :read, :create, :edit, :update_positions, :destroy], ProducerProperty
|
||||
|
||||
can [:admin, :index, :create], Enterprise
|
||||
can [:read, :edit, :update, :bulk_update, :set_sells], Enterprise do |enterprise|
|
||||
can [:read, :edit, :update, :bulk_update, :set_sells, :resend_confirmation], Enterprise do |enterprise|
|
||||
user.enterprises.include? enterprise
|
||||
end
|
||||
|
||||
@@ -74,6 +74,12 @@ class AbilityDecorator
|
||||
OpenFoodNetwork::Permissions.new(user).managed_product_enterprises.include? variant.product.supplier
|
||||
end
|
||||
|
||||
can [:admin, :index, :read, :update, :bulk_update], VariantOverride do |vo|
|
||||
OpenFoodNetwork::Permissions.new(user).
|
||||
order_cycle_enterprises.is_distributor.
|
||||
include? vo.hub
|
||||
end
|
||||
|
||||
can [:admin, :index, :read, :create, :edit, :update_positions, :destroy], Spree::ProductProperty
|
||||
can [:admin, :index, :read, :create, :edit, :update, :destroy], Spree::Image
|
||||
|
||||
|
||||
@@ -4,16 +4,21 @@ Spree::Address.class_eval do
|
||||
|
||||
after_save :touch_enterprise
|
||||
|
||||
geocoded_by :full_address
|
||||
geocoded_by :geocode_address
|
||||
|
||||
delegate :name, :to => :state, :prefix => true, :allow_nil => true
|
||||
|
||||
def full_address
|
||||
full_address = [address1, address2, zipcode, city, country.andand.name, state.andand.name]
|
||||
filtered_address = full_address.select{ |field| !field.nil? && field != '' }
|
||||
def geocode_address
|
||||
geocode_address = [address1, address2, zipcode, city, country.andand.name, state.andand.name]
|
||||
filtered_address = geocode_address.select{ |field| !field.nil? && field != '' }
|
||||
filtered_address.compact.join(', ')
|
||||
end
|
||||
|
||||
def full_address
|
||||
full_address = [address1, address2, city, zipcode, state.andand.name]
|
||||
filtered_address = full_address.select{ |field| !field.nil? && field != '' }
|
||||
filtered_address.compact.join(', ')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
|
||||
18
app/models/spree/gateway/pin.rb
Normal file
18
app/models/spree/gateway/pin.rb
Normal file
@@ -0,0 +1,18 @@
|
||||
module Spree
|
||||
class Gateway::Pin < Gateway
|
||||
preference :api_key, :string
|
||||
|
||||
attr_accessible :preferred_api_key
|
||||
|
||||
|
||||
def provider_class
|
||||
ActiveMerchant::Billing::PinGateway
|
||||
end
|
||||
|
||||
def options_with_test_preference
|
||||
options_without_test_preference.merge(:test => self.preferred_test_mode)
|
||||
end
|
||||
|
||||
alias_method_chain :options, :test_preference
|
||||
end
|
||||
end
|
||||
@@ -7,4 +7,9 @@ Spree::Gateway.class_eval do
|
||||
# To avoid that, we redefine this association here.
|
||||
|
||||
has_and_belongs_to_many :distributors, join_table: 'distributors_payment_methods', :class_name => 'Enterprise', foreign_key: 'payment_method_id', association_foreign_key: 'distributor_id'
|
||||
|
||||
|
||||
# Default to live
|
||||
preference :server, :string, :default => 'live'
|
||||
preference :test_mode, :boolean, :default => false
|
||||
end
|
||||
|
||||
@@ -22,4 +22,24 @@ Spree::LineItem.class_eval do
|
||||
joins(:product).
|
||||
where('spree_products.supplier_id IN (?)', enterprises)
|
||||
}
|
||||
|
||||
def price_with_adjustments
|
||||
# EnterpriseFee#create_locked_adjustment applies adjustments on line items to their parent order,
|
||||
# so line_item.adjustments returns an empty array
|
||||
price + order.adjustments.where(source_id: id).sum(&:amount) / quantity
|
||||
end
|
||||
|
||||
def single_display_amount_with_adjustments
|
||||
Spree::Money.new(price_with_adjustments, { :currency => currency })
|
||||
end
|
||||
|
||||
def amount_with_adjustments
|
||||
# EnterpriseFee#create_locked_adjustment applies adjustments on line items to their parent order,
|
||||
# so line_item.adjustments returns an empty array
|
||||
amount + order.adjustments.where(source_id: id).sum(&:amount)
|
||||
end
|
||||
|
||||
def display_amount_with_adjustments
|
||||
Spree::Money.new(amount_with_adjustments, { :currency => currency })
|
||||
end
|
||||
end
|
||||
|
||||
@@ -21,7 +21,7 @@ Spree::Order.class_eval do
|
||||
go_to_state :delivery
|
||||
go_to_state :payment, :if => lambda { |order|
|
||||
# Fix for #2191
|
||||
if order.shipping_method.andand.require_ship_address and
|
||||
if order.shipping_method.andand.require_ship_address and
|
||||
if order.ship_address.andand.valid?
|
||||
order.create_shipment!
|
||||
order.update_totals
|
||||
@@ -76,10 +76,10 @@ Spree::Order.class_eval do
|
||||
errors.add(:distributor_id, "cannot supply the products in your cart") unless DistributionChangeValidator.new(self).can_change_to_distributor?(distributor)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def empty_with_clear_shipping_and_payments!
|
||||
empty_without_clear_shipping_and_payments!
|
||||
payments.clear
|
||||
payments.clear
|
||||
update_attributes(shipping_method_id: nil)
|
||||
end
|
||||
alias_method_chain :empty!, :clear_shipping_and_payments
|
||||
@@ -97,8 +97,20 @@ Spree::Order.class_eval do
|
||||
def add_variant(variant, quantity = 1, max_quantity = nil, currency = nil)
|
||||
current_item = find_line_item_by_variant(variant)
|
||||
if current_item
|
||||
current_item.quantity += quantity
|
||||
current_item.max_quantity += max_quantity.to_i
|
||||
Bugsnag.notify(RuntimeError.new("Order populator weirdness"), {
|
||||
current_item: current_item.as_json,
|
||||
line_items: line_items.map(&:id),
|
||||
reloaded: line_items(:reload).map(&:id),
|
||||
variant: variant.as_json
|
||||
})
|
||||
current_item.quantity = quantity
|
||||
current_item.max_quantity = max_quantity
|
||||
|
||||
# This is the original behaviour, behaviour above is so that we can resolve the order populator bug
|
||||
# current_item.quantity ||= 0
|
||||
# current_item.max_quantity ||= 0
|
||||
# current_item.quantity += quantity.to_i
|
||||
# current_item.max_quantity += max_quantity.to_i
|
||||
current_item.currency = currency unless currency.nil?
|
||||
current_item.save
|
||||
else
|
||||
@@ -164,13 +176,13 @@ Spree::Order.class_eval do
|
||||
line_items.map(&:variant)
|
||||
end
|
||||
|
||||
def distribution_total
|
||||
adjustments.eligible.where(originator_type: 'EnterpriseFee').sum(&:amount)
|
||||
def admin_and_handling_total
|
||||
adjustments.eligible.where("originator_type = ? AND source_type != ?", 'EnterpriseFee', 'Spree::LineItem').sum(&:amount)
|
||||
end
|
||||
|
||||
# Show payment methods for this distributor
|
||||
def available_payment_methods
|
||||
@available_payment_methods ||= Spree::PaymentMethod.available(:front_end).select do |pm|
|
||||
@available_payment_methods ||= Spree::PaymentMethod.available(:front_end).select do |pm|
|
||||
(self.distributor && (pm.distributors.include? self.distributor))
|
||||
end
|
||||
end
|
||||
@@ -179,6 +191,18 @@ Spree::Order.class_eval do
|
||||
Spree::ShippingMethod.all_available(self, display_on)
|
||||
end
|
||||
|
||||
# Overrride of Spree method, that allows us to send separate confirmation emails to user and shop owners
|
||||
def deliver_order_confirmation_email
|
||||
begin
|
||||
Spree::OrderMailer.confirm_email_for_customer(self.id).deliver
|
||||
Spree::OrderMailer.confirm_email_for_shop(self.id).deliver
|
||||
rescue Exception => e
|
||||
Bugsnag.notify(e)
|
||||
logger.error("#{e.class.name}: #{e.message}")
|
||||
logger.error(e.backtrace * "\n")
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
|
||||
@@ -24,6 +24,13 @@ Spree::PaymentMethod.class_eval do
|
||||
|
||||
scope :by_name, order('spree_payment_methods.name ASC')
|
||||
|
||||
# Rewrite Spree's ruby-land class method as a scope
|
||||
scope :available, lambda { |display_on='both'|
|
||||
where(active: true).
|
||||
where('spree_payment_methods.display_on=? OR spree_payment_methods.display_on=? OR spree_payment_methods.display_on IS NULL', display_on, '').
|
||||
where('spree_payment_methods.environment=? OR spree_payment_methods.environment=? OR spree_payment_methods.environment IS NULL', Rails.env, '')
|
||||
}
|
||||
|
||||
def has_distributor?(distributor)
|
||||
self.distributors.include?(distributor)
|
||||
end
|
||||
@@ -39,6 +46,8 @@ Spree::Gateway.providers.each do |p|
|
||||
"Cash/EFT/etc. (payments for which automatic validation is not required)"
|
||||
when "Spree::Gateway::Migs"
|
||||
"MasterCard Internet Gateway Service (MIGS)"
|
||||
when "Spree::Gateway::Pin"
|
||||
"Pin Payments"
|
||||
when "Spree::Gateway::PayPalExpress"
|
||||
"PayPal Express"
|
||||
else
|
||||
|
||||
@@ -87,6 +87,9 @@ Spree::Product.class_eval do
|
||||
merge(Exchange.outgoing).
|
||||
where('order_cycles.id IS NOT NULL') }
|
||||
|
||||
scope :by_producer, joins(:supplier).order('enterprises.name')
|
||||
scope :by_name, order('name')
|
||||
|
||||
scope :managed_by, lambda { |user|
|
||||
if user.has_spree_role?('admin')
|
||||
scoped
|
||||
@@ -185,7 +188,7 @@ Spree::Product.class_eval do
|
||||
if variant_unit_changed?
|
||||
option_types.delete self.class.all_variant_unit_option_types
|
||||
option_types << variant_unit_option_type if variant_unit.present?
|
||||
variants_including_master.each { |v| v.update_units }
|
||||
variants_including_master.each &:update_units
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class Spree::ProductSet < ModelSet
|
||||
def initialize(attributes={})
|
||||
super(Spree::Product, [], proc { |attrs| attrs[:product_id].blank? }, attributes)
|
||||
super(Spree::Product, [], attributes, proc { |attrs| attrs[:product_id].blank? })
|
||||
end
|
||||
|
||||
# A separate method of updating products was required due to an issue with the way Rails' assign_attributes and updates_attributes behave when delegated attributes of a nested
|
||||
|
||||
@@ -31,7 +31,7 @@ Spree.user_class.class_eval do
|
||||
|
||||
def limit_owned_enterprises
|
||||
if owned_enterprises.size > enterprise_limit
|
||||
errors.add(:owned_enterprises, "^The nominated user is not permitted to own own any more enterprises (limit is #{enterprise_limit}).")
|
||||
errors.add(:owned_enterprises, "^#{email} is not permitted to own any more enterprises (limit is #{enterprise_limit}).")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
14
app/models/variant_override.rb
Normal file
14
app/models/variant_override.rb
Normal file
@@ -0,0 +1,14 @@
|
||||
class VariantOverride < ActiveRecord::Base
|
||||
belongs_to :hub, class_name: 'Enterprise'
|
||||
belongs_to :variant, class_name: 'Spree::Variant'
|
||||
|
||||
validates_presence_of :hub_id, :variant_id
|
||||
|
||||
scope :for_hubs, lambda { |hubs|
|
||||
where(hub_id: hubs)
|
||||
}
|
||||
|
||||
def self.price_for(variant, hub)
|
||||
VariantOverride.where(variant_id: variant, hub_id: hub).first.andand.price
|
||||
end
|
||||
end
|
||||
6
app/models/variant_override_set.rb
Normal file
6
app/models/variant_override_set.rb
Normal file
@@ -0,0 +1,6 @@
|
||||
class VariantOverrideSet < ModelSet
|
||||
def initialize(attributes={})
|
||||
super(VariantOverride, VariantOverride.all, attributes, nil,
|
||||
proc { |attrs| attrs['price'].blank? && attrs['count_on_hand'].blank? } )
|
||||
end
|
||||
end
|
||||
@@ -1,5 +0,0 @@
|
||||
Deface::Override.new(:virtual_path => "spree/orders/_line_item",
|
||||
:replace => "[data-hook='cart_item_description']",
|
||||
:partial => "spree/orders/cart_item_description",
|
||||
:name => "cart_item_description",
|
||||
:original => 'ce2b7ddab2a6a13b25159ea18f6ab50991409d3e')
|
||||
@@ -1,4 +1,4 @@
|
||||
/ insert_top "[data-hook='admin_orders_index_rows']"
|
||||
|
||||
%td.align-center
|
||||
= order.distributor.name
|
||||
= order.distributor.andand.name
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user