Compare commits

...

1027 Commits
0.6.3 ... 0.7.4

Author SHA1 Message Date
Rohan Mitchell
ab9bc7b1dc Output debugging information to help investigate bogus changes to the sells field through the enterprises bulk edit action 2015-03-18 12:50:25 +11:00
Rohan Mitchell
cf4ccc268a Admin may set no tax category on product unless tax category is required 2015-03-18 10:12:32 +11:00
Rohan Mitchell
7af17242f9 EnterpriseFee admin interface allows selecting no fee 2015-03-16 14:05:04 +11:00
Rohan Mitchell
eb5e411a8e Update zeus 2015-03-16 14:00:55 +11:00
Rob Harrington
bdeca54377 Reloading stale enterprise object in test 2015-03-14 16:17:16 +11:00
Rob Harrington
20d59cf5a5 Fixing authentication spec to work with altered user factory 2015-03-14 11:40:21 +11:00
Rob Harrington
8b241f058b Login to consumer section in a way that ensures user is not an admin 2015-03-14 11:02:45 +11:00
Rob Harrington
cb28843af1 Reload manager before ensuring owner is a manager 2015-03-14 10:41:49 +11:00
Rob Harrington
d684a88697 Merge branch 'order-confirmation' into ready-to-merge 2015-03-13 18:11:53 +11:00
summerscope
d0f66a6053 Fixing label for cart popover to make it write name of product variant without page load 2015-03-13 18:10:59 +11:00
summerscope
d2fbf9f14d Fixing logic for instance where collection instructions are not entered 2015-03-13 18:00:36 +11:00
Rohan Mitchell
8d3f25bb39 Fix intermittent 500 error when updating the cart 2015-03-13 17:50:01 +11:00
Rohan Mitchell
abaaf05631 Merge branch 'user-menu' 2015-03-13 17:00:37 +11:00
Rob Harrington
dd8c769ea9 Hiding fee breakdown on cart page for now 2015-03-13 16:50:57 +11:00
summerscope
864c9ec1da This changes the user menu labels to show Account next to user email.
Small tweak to user account page to make it less awful.
2015-03-13 16:49:26 +11:00
Rob Harrington
b0cfa6a17c Shipping method prices displayed next to options in checkout 2015-03-13 16:18:49 +11:00
Rob Harrington
51258b242c Merge remote-tracking branch 'origin/order-confirmation' into order-confirmation 2015-03-13 16:07:17 +11:00
Rohan Mitchell
1a44e74a9d When enterprise user creates an enterprise, make it a hub if they have other hubs 2015-03-13 16:06:42 +11:00
Rohan Mitchell
efbf2c7ffa Display extended variant name in quick cart 2015-03-13 12:58:53 +11:00
Rohan Mitchell
6365434a94 Merge branch 'lin-d-hop-ordercyclemanagementreports2' 2015-03-13 10:53:03 +11:00
Rohan Mitchell
d9f90be38a Fix indentation 2015-03-13 10:52:44 +11:00
Rohan Mitchell
008b43b1fc Merge branch 'ordercyclemanagementreports2' of https://github.com/lin-d-hop/openfoodnetwork into lin-d-hop-ordercyclemanagementreports2 2015-03-13 10:47:49 +11:00
Rohan Mitchell
5609354136 Fix bug: When there are variant overrides not owned by the current user, user is unable to make any changes to VOs 2015-03-13 10:45:38 +11:00
Lynne Davis
d9e8ce2f0e Fix bug in report that selecting multiple payment methods didn't work. Added spec as well 2015-03-12 17:16:51 +11:00
Rob Harrington
cce65aa462 Merge remote-tracking branch 'origin/master' into order-confirmation 2015-03-12 16:20:21 +11:00
Rob Harrington
44511b8b61 Only display shipping description if it exists 2015-03-12 16:18:30 +11:00
Rob Harrington
eb413ccc84 Committing schema changes 2015-03-12 16:18:07 +11:00
Rob Harrington
6cd6b751c8 Merge branch 'master' into order-confirmation 2015-03-12 15:34:49 +11:00
Rohan Mitchell
af95181245 Merge branch 'lin-d-hop-ordercyclemanagementreports2' 2015-03-12 12:30:49 +11:00
Rohan Mitchell
36fa4896ed Syntax 2015-03-12 12:28:35 +11:00
Rohan Mitchell
7c723c04b6 Show yes/no instead of true/false 2015-03-12 12:23:02 +11:00
Rohan Mitchell
c85d5b86eb Fix temperature_controlled migration - NOT NULL requires default value 2015-03-12 12:22:51 +11:00
Rohan Mitchell
1a97df1d21 Fix whitespace issues 2015-03-12 12:17:15 +11:00
Rohan Mitchell
a5716cf2c2 Merge branch 'ordercyclemanagementreports2' of https://github.com/lin-d-hop/openfoodnetwork into lin-d-hop-ordercyclemanagementreports2 2015-03-12 12:15:22 +11:00
Rohan Mitchell
b4e990a081 Merge branch 'reduce-supplier-list-in-order-cycles' 2015-03-12 11:55:46 +11:00
Rohan Mitchell
eccd97fc28 Merge branch 'master' into reduce-supplier-list-in-order-cycles 2015-03-12 11:55:14 +11:00
Rohan Mitchell
c4d4d10873 Reuse supplier/distributor list 2015-03-12 11:53:13 +11:00
Rohan Mitchell
1e5e009735 Spree init works when database has not been created, remove duplicate FK from db/schema.rb 2015-03-12 11:29:01 +11:00
summerscope
ea96759306 Take styling out of template into SASS 2015-03-10 14:59:46 +11:00
summerscope
d967905b83 Tweaking copy styles and removing references to Open Sans which not using. Silly laura mixing up repos 2015-03-10 14:59:26 +11:00
summerscope
f698408d40 Logic for delivery vs collection - making template 2015-03-10 14:58:58 +11:00
summerscope
75b0b290ae More WIP trying to work on the cart template logic with Rohan 2015-03-10 14:12:43 +11:00
summerscope
21b18a8cc5 WIP commit so i can see what i messed up. 2015-03-10 12:31:53 +11:00
summerscope
91bf588bcc Order details page add in mini thumbnail for product image 2015-03-10 12:03:21 +11:00
summerscope
a8de4dc039 WIP checkout page and order confirmation page. Working on making these pages more consistent to each other, to email confirmation, and to shopping experience. 2015-03-10 11:35:53 +11:00
summerscope
c7cf9695bc WIP on cart menu trying to add the master name back in where a product has variante 2015-03-10 11:35:35 +11:00
summerscope
b9a0579397 Add styling for image thumbnail - hide for small, show small thumbnail for big screens. 2015-03-10 11:35:03 +11:00
summerscope
de6abc3464 Turning off z-index this causes problems on shopping cart page. Needs testing to confirm does not break elsewhere. 2015-03-10 11:34:31 +11:00
summerscope
881313edf9 Changing the logic on Shipping accordion on checkout to try to show shipping price against option. Not working. 2015-03-06 16:05:42 +11:00
Rohan Mitchell
381bfd383b Allow enterprise fee with no tax category 2015-03-06 12:12:33 +11:00
Liv Galendez
266d6ef834 Fixed handling of distributors field 2015-03-06 11:55:35 +11:00
Rohan Mitchell
1e18f773f5 Switch context -> describe, clarify test grammar 2015-03-06 11:15:07 +11:00
Rohan Mitchell
41792395aa Record the tax included in per-item EnterpriseFees 2015-03-06 11:13:47 +11:00
Rohan Mitchell
98ff895f5f Record the tax included in per-order EnterpriseFees 2015-03-06 10:38:55 +11:00
summerscope
c3c1573f54 Adding a comment 2015-03-05 23:22:31 +11:00
summerscope
a0af22350d Order conf page WIP 2015-03-05 17:21:25 +11:00
summerscope
e3b660abb9 Shopping cart page update to simplify, improve and expose fees 2015-03-05 17:21:13 +11:00
summerscope
9a86e41942 Adding more helper classes 2015-03-05 17:20:02 +11:00
Rohan Mitchell
b5ce056d06 Fix tax calculations for determining tax included in an amount 2015-03-05 13:03:53 +11:00
summerscope
574a215525 Order Confirmation Page WIP 2015-03-05 11:26:29 +11:00
summerscope
2cdab7af25 More label tweaks and logic tweaks to templates 2015-03-05 11:26:15 +11:00
summerscope
235bb009e8 Tweaking styling for order confirmation page 2015-03-05 11:25:57 +11:00
Rohan Mitchell
dfb855bd14 Record the tax included in shipping. 2015-03-05 10:44:27 +11:00
Rohan Mitchell
9395f6c808 Record the tax included in adjustments. TaxRate adjustments consist of 100% tax. 2015-03-05 10:44:26 +11:00
Rohan Mitchell
53fa71d1f3 Admin can set enterprise fee's tax category 2015-03-05 10:44:25 +11:00
Rohan Mitchell
61c08997a1 EnterpriseFee has a TaxCategory 2015-03-05 10:44:22 +11:00
Rohan Mitchell
dd61034908 Fix fractional cents appearing on sales tax report totals 2015-03-05 10:43:57 +11:00
Rohan Mitchell
ec22f4c09f Sales tax report pulls sales tax from adjustments instead of recalculating it at report-time 2015-03-05 10:43:57 +11:00
Rohan Mitchell
54894fb222 Update spec with correct tax amounts 2015-03-05 10:43:56 +11:00
Rohan Mitchell
11f59c9f59 Add spec for calculating shipping tax. Fix incorrect formula. 2015-03-05 10:43:56 +11:00
Rohan Mitchell
27a730ef6c Add spec for sales tax report totals calcs 2015-03-05 10:43:56 +11:00
Rohan Mitchell
10e5d09416 Use ReportsHelper for currency_symbol 2015-03-05 10:43:56 +11:00
Rohan Mitchell
3b4d73760b Break up sales tax report into methods 2015-03-05 10:43:55 +11:00
Rohan Mitchell
89199ef30a Use map instead of each and var 2015-03-05 10:43:55 +11:00
Rohan Mitchell
67c77cea81 Tidy up haml 2015-03-05 10:43:54 +11:00
Rohan Mitchell
cc7d6cde1d Shorter syntax 2015-03-05 10:43:54 +11:00
Rohan Mitchell
0b636c1d89 Combine spec cases for faster runtime 2015-03-05 10:43:54 +11:00
Rohan Mitchell
2b9fef6aec Convert to Ruby 1.9 hash syntax 2015-03-05 10:43:53 +11:00
Rohan Mitchell
3aa30af199 Remove unneeded objects from spec setup 2015-03-05 10:43:53 +11:00
Rohan Mitchell
0212351d32 Tighten test 2015-03-05 10:43:53 +11:00
Rohan Mitchell
29653a5595 Fix spec infinite recursion issue 2015-03-05 10:43:52 +11:00
Matt-Yorkley
e6368af757 Update reports_spec.rb 2015-03-05 10:43:52 +11:00
Matt-Yorkley
2c80be7e9e Update 2015-03-05 10:43:52 +11:00
Matt-Yorkley
d194e74eda Rohan's suggested changes 2015-03-05 10:43:51 +11:00
Matt-Yorkley
3f61a5412c Spec file attempt... 2015-03-05 10:43:51 +11:00
Matt-Yorkley
0f3723a923 Added currency symbols to sales tax report 2015-03-05 10:43:51 +11:00
Matt-Yorkley
bbca674937 Update reports_spec.rb 2015-03-05 10:43:51 +11:00
Matt-Yorkley
623882a2a1 Config option for tax rate on shipping 2015-03-05 10:43:50 +11:00
Matt-Yorkley
371f966f63 sales tax view 2015-03-05 10:43:50 +11:00
Matt-Yorkley
be55f461d0 Report: sales tax on orders 2015-03-05 10:43:50 +11:00
summerscope
e6591be55c More tweaking for email templates for use case of Collection from hub. Need to tweak logic on Order confiramtion page. 2015-03-04 17:34:24 +11:00
summerscope
5b6bff1691 Removing bad nasty overrides which are confusing and bad. and nasty. 2015-03-04 17:20:05 +11:00
summerscope
db2e5e7558 Add an extra class helper 2015-03-04 17:19:57 +11:00
summerscope
4867f45ee1 Add an extra style 2015-03-04 17:19:37 +11:00
summerscope
47b08269d6 Order confirmation page changes for responsive layout, adding in more content from the checkout page to match the emails. 2015-03-04 17:19:24 +11:00
summerscope
76f234ee4d Order confirmation top page working on header label 2015-03-04 17:18:55 +11:00
summerscope
163035dcad Tweaking email template to be more like order confirmation 2015-03-04 17:18:37 +11:00
Rohan Mitchell
503bd8f5dd Merge pull request #400 from victornava/admin-account-link
Change admin account link to point to account page instead of edit user.
2015-03-04 16:08:26 +11:00
Victor Nava
6e800341c3 Fixes issue #362 Change admin account link to point to account page instead of edit user. 2015-03-04 16:00:46 +11:00
summerscope
b097a62c7a WIP adding variant name logic to the email templates 2015-03-04 12:37:57 +11:00
Lynne Davis
cfa281478a Adding ability to edit ShippingCategory.temperature_controlled from admin interface 2015-03-04 12:02:07 +11:00
summerscope
f64684dc48 Tweak responsive heading columns now that container is a bit smaller 2015-03-04 11:14:29 +11:00
summerscope
397697d17c Tweak layout. Remove unnecessary row which was messing up the responsive layout for left column on checkout. 2015-03-04 11:13:58 +11:00
Liv Galendez
c940a34ec9 Created order_cycle_permitted_in helper 2015-03-03 21:03:01 +11:00
Liv Galendez
fc63d8719c Used order_cycle_permitted_enterprises helper in order cycles row 2015-03-03 20:53:39 +11:00
Liv Galendez
7ba366e2a6 Added select for coordinator since there are 2 now 2015-03-03 20:46:25 +11:00
Lynne Davis
b26c46d7db Removing default false from temp_controlled - shipping categories 2015-03-03 16:39:55 +11:00
Lynne Davis
72a568ffad Adding not null to temp_controlled field of shipping_categories 2015-03-03 16:33:49 +11:00
Lynne Davis
3ea7ff766a Removing additional merge conflicts 2015-03-03 16:29:17 +11:00
Lynne Davis
3d491d7b5e LD: Adding additional functionality for order cycle management reports - adding hub code model, adding temp_controlled bool, adding delivery report
Conflicts:
	app/models/customer.rb
	db/migrate/20150122145607_create_customers.rb
	db/schema.rb
	lib/open_food_network/order_cycle_management_report.rb
2015-03-03 16:21:17 +11:00
Lynne Davis
1710c8726e Fixing conflict on attempting to rebase and pull 2015-03-03 16:13:44 +11:00
Lynne Davis
2a8ba0bf42 Fixing merge conflicts after rebase 2015-03-03 16:12:07 +11:00
Lynne Davis
3279003fd3 Updating logic on temperature_controlled lookup 2015-03-03 16:01:42 +11:00
Lynne Davis
f2a35e219e Updating migration on customers table with extra validation 2015-03-03 16:01:42 +11:00
Lynne Davis
39c5f8febe Updating Customer model with validations 2015-03-03 16:01:42 +11:00
Lynne Davis
87b1ab9a1a LD: Adding additional functionality for order cycle management reports - adding hub code model, adding temp_controlled bool, adding delivery report 2015-03-03 16:01:42 +11:00
Rob Harrington
85b8adb1aa call to order_cycle_hub_enterprises has no arguments 2015-03-01 15:33:16 +11:00
Rob Harrington
e8818c5191 Adding a ship address to order in spec 2015-03-01 12:22:06 +11:00
Rob Harrington
c91699a11e Using @order_cycle.coordinator instead of @coordinator 2015-02-27 17:24:37 +11:00
Rob Harrington
8d6c8791bb Only hubs (sells any) are available for selection as outgoing enterprises 2015-02-27 17:24:36 +11:00
Rob Harrington
31054c7bf4 Split order_cycle_simple_view logic into index and form scopings 2015-02-27 17:24:36 +11:00
Rob Harrington
5563d23beb Rename set_coordinator method to require_coordinator 2015-02-27 17:24:36 +11:00
Rob Harrington
8de6f983a2 User must set the coordinator first when creating an order cycle 2015-02-27 17:24:36 +11:00
Rob Harrington
53594b3a0f Cannot add unconfirmed enterprises to order cycles 2015-02-27 17:24:36 +11:00
summerscope
f8619092bd Merge branch 'order-confirmation' into master.
Global email tweak - light header, black logo.
This updates the order confirmation emails for better content and styling.
2015-02-27 17:16:35 +11:00
summerscope
2c2352cd4e Final tweaks to different layout use cases for these emails. 2015-02-27 17:14:33 +11:00
summerscope
12bfb9301a More updates dealing with pick up instructions. 2015-02-27 17:09:59 +11:00
summerscope
ba0d4c2111 More order confirmation email updates. Making language correct for hub vs user. 2015-02-27 16:55:36 +11:00
summerscope
4eee86a240 Tweak label 2015-02-27 16:09:14 +11:00
summerscope
587e4ae86d WIP getting all the confirmation details right for collection, delivery, etc. 2015-02-27 16:08:20 +11:00
Maikel Linke
60c246f104 fixing side menu ng-show of items 2015-02-27 15:21:23 +11:00
summerscope
87842ecaf5 More WIP confirmation email for customer and shopfront. fixing up the order summary table. overall design improvements. 2015-02-27 14:00:49 +11:00
summerscope
2ba632456f WIP email mailer updates for customer email confirmation etc. 2015-02-27 12:40:13 +11:00
Maikel Linke
3beff77164 Merge remote-tracking branch 'origin/master' into group-pages 2015-02-26 17:22:13 +11:00
Maikel Linke
69fd3f0b60 Fix link to group pages if someone enters "/groups/" instead of "/group" 2015-02-26 16:41:51 +11:00
Maikel Linke
ff4bd449a2 Setting default_country_id by application.yml
The spree default_country_id was set using ENV["DEFAULT_COUNTRY"] for
production environment, but not for tests and development. Since tests
reset the default_country_id in specs/support/seeds.rb, only the
development environment had a fix id set to 12. This is removed now.

This fixes creating enterprises and enterprise groups without sample
data (12 is Australia).
2015-02-26 16:29:46 +11:00
Maikel Linke
379b702b9b spec: testing array of owned groups without order 2015-02-26 16:22:15 +11:00
Rohan Mitchell
fa4741eb65 Update auto-creation of E2E links: more specific and restricted link creation 2015-02-26 13:49:15 +11:00
Maikel Linke
1f7aec0c1d group owner select box in own tab 2015-02-26 13:09:46 +11:00
summerscope
122cf6c065 Groups index page styling for responsive use cases. 2015-02-25 10:22:33 +11:00
summerscope
9daf7e3955 Removing spans on follow icons as these show up as blank spaces when no data to fill. 2015-02-25 09:38:07 +11:00
Lynne Davis
a3df4bf026 LD: Adding additional functionality for order cycle management reports - adding hub code model, adding temp_controlled bool, adding delivery report 2015-02-24 13:43:00 +10:00
Rohan Mitchell
fdde55f631 Add spec for ext_url filter, refactor 2015-02-23 10:06:42 +11:00
Maikel Linke
f8153c07b1 moving email from "web" to "contact" on group edit page 2015-02-22 16:20:11 +11:00
Maikel Linke
eade689070 linkToService directive to generate external links 2015-02-22 16:15:04 +11:00
Maikel Linke
a522242e7a dealing with invalid live data in migration 2015-02-21 18:43:03 +11:00
summerscope
e05d64a0b4 WIP on groups index page. Needs work from Maikel or Rohan. 2015-02-20 16:43:36 +11:00
summerscope
985887334f Tweak the padding between header and tabs. 2015-02-20 16:43:03 +11:00
summerscope
3aa06ee1e4 Tabs styling for groups page - making it pretty. 2015-02-20 16:14:50 +11:00
summerscope
3ab961a7e2 New mixin for gradients 2015-02-20 16:14:40 +11:00
summerscope
60b7a571c5 Tweak styling and markup for contact info in right column. 2015-02-20 15:35:07 +11:00
Rohan Mitchell
f8ca24c5cd Index enterprise_groups address_id 2015-02-20 14:56:16 +11:00
Rohan Mitchell
f58219eb3d Split inputs into separate partials for each fieldset 2015-02-20 11:36:30 +11:00
Rohan Mitchell
4554c0555d Change locking to use postgres syntax, fixes 'must be first statement in transaction' error 2015-02-20 11:31:39 +11:00
Rohan Mitchell
176db78e64 Extract data fetching from views 2015-02-20 11:17:01 +11:00
Maikel Linke
98063dae60 setting default country by id in groups controller 2015-02-19 16:57:19 +11:00
Maikel Linke
c01d45e3af Serialize move_up and move_down methods of groups
There have been race conditions in other projects using the acts_as_list
gem which could be solved by serializing.
2015-02-19 16:51:58 +11:00
Maikel Linke
d5c2abdd7e stripping "undefined" in after_find and after_save callbacks instead of overriding getters 2015-02-19 16:33:43 +11:00
Maikel Linke
a7b723af93 owner index for enterprise groups 2015-02-19 13:23:50 +11:00
Maikel Linke
6a29b830c2 commenting changes in overridden adaptivemenu.js 2015-02-19 11:35:06 +11:00
Maikel Linke
8e83c6679a extended test of owned groups 2015-02-19 11:25:31 +11:00
Maikel Linke
a0f0b3c93b display only activated enterprises to add to groups 2015-02-19 11:14:25 +11:00
Maikel Linke
ecd7b16ef5 revert setting default country by name in enterprise controller 2015-02-19 11:09:43 +11:00
Maikel Linke
718a5911a3 code style and cleanup 2015-02-19 10:48:39 +11:00
Maikel Linke
bbac5aa803 Using pure css for styling odd and even menu items 2015-02-19 10:22:37 +11:00
Maikel Linke
346a4e71d0 side menu partial does not require showItem defined 2015-02-19 10:17:58 +11:00
Rohan Mitchell
f83ceae5d1 Fix feature: Enterprises list is shortened when error in bulk update 2015-02-18 15:32:56 +11:00
Maikel Linke
08afcac1e5 exposing more group attributes to angular 2015-02-18 14:55:42 +11:00
Maikel Linke
9496987da6 Fix display of admin group side menu 2015-02-18 12:04:17 +11:00
Rohan Mitchell
224864a8d8 Merge pull request #385 from openfoodfoundation/empty-cart-typo
Fixed typo in empty cart error message
2015-02-18 10:59:17 +11:00
Liv Galendez
b9248d3e2c Fixed typo in empty cart error message 2015-02-18 10:47:09 +11:00
Maikel Linke
903bd21577 Merge remote-tracking branch 'origin/master' into group-pages-merge
Conflicts:
	README.markdown
	db/schema.rb
2015-02-13 15:42:36 +11:00
Maikel Linke
87686848bc make group contact fields not null 2015-02-13 15:39:44 +11:00
Rohan Mitchell
32a898b6a2 Remove unnecessary db:schema:load db:seed, these are performed by db:setup 2015-02-13 09:26:34 +11:00
Rohan Mitchell
636ed2ad0d Make bi-directional relationships 2015-02-13 09:24:48 +11:00
Rohan Mitchell
1d61e91afd When enterprise created, grant permission to all co-owned enterprises, not just hubs 2015-02-13 09:24:48 +11:00
Maikel Linke
6b5a1255f8 fixing a bunch of tests 2015-02-12 16:36:18 +11:00
Rob Harrington
12dc0b93aa Scoping users correctly for realz this time 2015-02-12 16:20:46 +11:00
Rob Harrington
5503760ce3 Scoping users correctly 2015-02-12 13:45:25 +11:00
Rob Harrington
9fa5a9e766 Fix before_filter load order for enterprises#shop 2015-02-12 11:34:58 +11:00
Rob Harrington
a62f48441d Restrict ability to change managers of enterprises using update action 2015-02-12 11:34:58 +11:00
Rob Harrington
5c09ebf138 Adding manager managment to enterprise edit form 2015-02-12 11:34:58 +11:00
Rob Harrington
ee5ab22501 Moving interface for changing owner to new 'Users' tab 2015-02-12 11:34:58 +11:00
Rob Harrington
ad1f837c44 Admin users can access all users through known_users 2015-02-12 11:34:58 +11:00
Rob Harrington
dcb24cf06c Controller method to allow enterprise users to search for other users which share management of their enterprises 2015-02-12 11:34:58 +11:00
Rob Harrington
b73619d168 Adding known_users method to Spree::User 2015-02-12 11:34:58 +11:00
Rob Harrington
dde1a27d3a Adding ability to search for known users 2015-02-12 11:34:57 +11:00
Maikel Linke
57e838898f Update documentation of database setup
db:setup is doing db:schema and db:seed already
2015-02-12 11:05:21 +11:00
Maikel Linke
773a5480e9 Activate search input for groups again 2015-02-12 10:44:20 +11:00
Maikel Linke
0fdf313424 Fixing img display of producers if no logo present 2015-02-12 10:31:13 +11:00
Rohan Mitchell
46aee6f77c Upgrade Rails to 3.2.21 2015-02-11 14:30:49 +11:00
Rohan Mitchell
ca558a4ecc Fix admin tab to check correct permission 2015-02-11 11:55:48 +11:00
Maikel Linke
edcef02017 link_to_service helper deals with nil 2015-02-07 19:40:59 +11:00
Maikel Linke
211e9c33a7 Fixing link to group website 2015-02-07 19:31:16 +11:00
Maikel Linke
2293623d2c Display default group logo if no logo was uploaded 2015-02-07 19:24:36 +11:00
Maikel Linke
9e51b19f98 right mapping of contributer's names in git 2015-02-07 18:12:34 +11:00
summerscope
90ba1d2198 Updating the groups header to behave better with a square thumbnail logo image.
Intention is for a square image constrained by PaperClip as per enterprise logos (later down the track)
2015-02-06 17:15:40 +11:00
summerscope
78877f591b Fix template so website links work to push to external pages 2015-02-06 13:58:04 +11:00
summerscope
f292be8c92 Making styling of underlines for contact same color as HRs, bit lighter and brigher 2015-02-06 13:50:34 +11:00
summerscope
755adf4287 Index page stop-gap improvements until we get more variables to display in this list. Commented out search field not working 2015-02-06 13:41:58 +11:00
summerscope
9547f91f46 Groups page rejig the layout to make contact column skinnier in most use cases. Obscure email and website with CTA words for fixed width on content. Styling for anchor fix global issue 2015-02-06 13:31:33 +11:00
Maikel Linke
30601b9203 tidy up group contact with helpers 2015-02-05 20:20:28 +11:00
Maikel Linke
504a053693 link_to_ext helper for group pages 2015-02-05 17:21:41 +11:00
summerscope
148333467f Groups styling and markup - finishing up contact info partial etc 2015-02-05 17:14:56 +11:00
Maikel Linke
242fb49276 checking for undefined phone number in model 2015-02-05 16:17:29 +11:00
Maikel Linke
37dbd376e9 fixing indent 2015-02-05 15:54:53 +11:00
Maikel Linke
b641de6ec9 Merge branch 'group-pages' of github.com:openfoodfoundation/openfoodnetwork into group-pages
Conflicts:
	app/views/groups/show.html.haml
2015-02-05 15:52:00 +11:00
Maikel Linke
313843d798 moving contact partial and giving example code 2015-02-05 15:50:33 +11:00
summerscope
1b51ea0e3a Groups logo default image 2015-02-05 15:42:24 +11:00
summerscope
f2e3d298fa More styling for responsive sizes groups header 2015-02-05 15:17:50 +11:00
summerscope
e19aaf6be8 Styling tabs for responsive design, improving groups page layout 2015-02-05 14:53:09 +11:00
summerscope
28b2dd40dd Kill the pad top for Producers tab content too 2015-02-05 12:31:38 +11:00
summerscope
c9bbe80738 Remove padding class to producers tab content 2015-02-05 12:28:24 +11:00
Maikel Linke
0f7b880409 restoring groups hubs tab 2015-02-05 12:23:08 +11:00
Maikel Linke
78a8f8c1bb Merge remote-tracking branch 'origin/group-pages' into group-pages 2015-02-05 12:07:52 +11:00
summerscope
b1b1aa5b1e Groups page WIP with mikael and rob 2015-02-05 12:07:11 +11:00
Maikel Linke
a7c2a73fa8 make groups editable by group owners 2015-02-05 12:05:39 +11:00
Rohan Mitchell
fce7714994 Load correct set of variant override producers, use variant_override_enterprises_per_hub, tighten specs 2015-02-04 11:20:08 +11:00
Rohan Mitchell
7ca9670073 Admin can access variant override only when it can add hub to order cycle and it can create variant overrides for the producer of the variant 2015-02-04 11:09:48 +11:00
Rohan Mitchell
22f6ece83f When fetching products for variant overrides admin, fetch all overridable products 2015-02-04 10:16:34 +11:00
Rohan Mitchell
a7bb04b890 Find all producers for which we can create variant overrides 2015-02-04 10:13:35 +11:00
Rohan Mitchell
4c586d1b7e Fetching enterprises for which hubs can create variant overrides: allow all hubs that we can add to order cycle, find producers via create_variant_overrides permission 2015-02-04 10:04:57 +11:00
Rohan Mitchell
7ea143d19a Provide AR relation instead of array in stub 2015-02-04 09:42:04 +11:00
Rohan Mitchell
25189d190b Shift method 2015-02-04 09:30:01 +11:00
Maikel Linke
91b35d068c Adding owner to groups
Groups have owners and users own groups. The owners are displayed and
changable on the group's page by admin users.
2015-02-02 15:58:34 +11:00
Maikel Linke
8d9f8beff3 creating facebook url 2015-02-02 10:33:13 +11:00
Rohan Mitchell
c0a7d22a50 Add permitted_by scope to EnterpriseRelationship 2015-01-30 16:36:45 +11:00
Rohan Mitchell
fafbfe8735 Simplify, simplify 2015-01-30 15:56:10 +11:00
summerscope
6fddb491db New partial for groups contact 2015-01-30 14:07:55 +11:00
summerscope
5ea3733c8a Groups page styling WIP 2015-01-30 14:07:38 +11:00
Rohan Mitchell
7ac888ae00 Admin can grant create_variant_overrides permission 2015-01-30 11:56:05 +11:00
Rohan Mitchell
ed4d78bca8 Decorators can't be in same file name as original file, otherwise the original file is ignored 2015-01-30 11:23:49 +11:00
summerscope
d99a54accf WIP groups individual page template markup - still needs alot of love. 2015-01-29 17:43:36 +11:00
summerscope
fd363ff6c2 WIP Groups individual page styling 2015-01-29 17:43:10 +11:00
summerscope
fcd9653a79 Add padding to groups homepage 2015-01-29 15:52:40 +11:00
summerscope
8e42f29bde WIP groups page styling and markup updates 2015-01-29 15:52:20 +11:00
Rohan Mitchell
a25bf32156 Show extended variant name/unit info for admin variant overrides 2015-01-29 15:15:28 +11:00
Rohan Mitchell
7a5c56cbca Do not show out of stock lines on order confirmation page 2015-01-29 13:19:04 +11:00
Rob Harrington
cbae7dcc8e Adding visible to user and enterprises report, and sorting by confirmation date 2015-01-29 10:46:44 +11:00
Rob Harrington
9163b0c1ad Adding missing equals sign to test for equality in permalink migration 2015-01-28 11:37:02 +11:00
Rob Harrington
fd9f65f1b6 Merge branch 'shopfront-filters' into shop-url 2015-01-28 10:57:11 +11:00
Rob Harrington
713999c1d8 Merge branch 'master' into shop-url 2015-01-28 10:53:42 +11:00
Rob Harrington
21db56ce6c Rollback angularjs upgrade 2015-01-28 08:41:14 +11:00
Rob Harrington
adbe127e76 Revert "Update bindonce"
This reverts commit 48dc85cfc2.
2015-01-25 14:08:29 +11:00
Lynne Davis
3c4ad4121f LD adding whitespace to get my master version back in line with origin 2015-01-22 14:00:48 +00:00
Lynne Davis
8e8f38e484 app/controllers/spree/admin/reports_controller_decorator.rb 2015-01-22 12:01:20 +00:00
Maikel Linke
d93a8b6428 Enterprise and Group controllers use default country instead of default country id 2015-01-22 16:22:34 +11:00
Maikel Linke
7a48d7fe22 Updating feature spec for groups 2015-01-22 16:04:46 +11:00
Rob Harrington
b429be707c Split out payment and shipping methods from admin enterprises controller as services 2015-01-22 12:19:41 +11:00
Maikel Linke
87b092fdf7 Adding addresses to existing groups and make them changable 2015-01-22 12:10:54 +11:00
Rob Harrington
4829e59663 Fixing checkout controller spec 2015-01-22 10:46:31 +11:00
Rob Harrington
d12fdd23fb Fixing navcheck callback 2015-01-22 10:46:01 +11:00
Rob Harrington
b0a29801b6 Making spec controller product request spec a little bit more robust 2015-01-22 10:20:03 +11:00
Rob Harrington
6ebd58b67d Updating home spec to reflect new shopfront url 2015-01-22 10:19:47 +11:00
Rob Harrington
0791cc3c2a Making sure that we have a .path() in HashNavigation 2015-01-22 10:19:47 +11:00
Rob Harrington
76acbb6159 Empty arrays are no longer considered falsy by angular.js parser (see bdfc9c02d0) 2015-01-22 10:19:47 +11:00
Rob Harrington
d7ea81e821 Prevent default form action from submitting ordercycle forms 2015-01-22 10:19:47 +11:00
Rob Harrington
9245af6a8f Producer properties routes use enterprise permalink 2015-01-22 10:19:47 +11:00
Rob Harrington
36430d3bad Enterprise permalink generator handles blank permalink case 2015-01-22 10:19:46 +11:00
Rob Harrington
7520552fd7 Removing spec for testing empty permalink, since we now force permalink to be created when empty 2015-01-22 10:19:46 +11:00
Rob Harrington
6991e5e6b1 Finally got all callbacks available to all action that need them 2015-01-22 10:19:46 +11:00
Rob Harrington
42d6695264 Fix permalink migration to handle blank auto-generated permalinks and fixed down migration 2015-01-22 10:19:45 +11:00
Rob Harrington
4d26b3d648 Make unused cart_controller happy 2015-01-22 10:19:45 +11:00
Rob Harrington
177181cd75 CurrentUser always returns a factory 2015-01-22 10:19:45 +11:00
Rob Harrington
4baa205cf9 before_filters for enterprise controller are run in the correct order, and put inside the shop action 2015-01-22 10:19:45 +11:00
Rob Harrington
60313f7a6a Replace delete with parameterize 2015-01-22 10:19:45 +11:00
Rob Harrington
3e5ea3fe63 Adding automatic permalink generation on enterprise creation 2015-01-22 10:19:45 +11:00
Rob Harrington
b98c01b280 Updating permalink controller specs 2015-01-22 10:19:44 +11:00
Rob Harrington
ff624e83eb Require distributor in enterprise controller, so that everything actually works 2015-01-22 10:19:44 +11:00
Rob Harrington
48dc85cfc2 Update bindonce 2015-01-22 10:19:44 +11:00
Rob Harrington
a0990c107f Moving navigation check to controller 2015-01-22 10:19:44 +11:00
Rob Harrington
585c061fb0 Upgrade angularjs 2015-01-22 10:19:44 +11:00
Rob Harrington
83726eba63 Refactoring permalink checker to handle multiple requests elegantly 2015-01-22 10:19:43 +11:00
Rob Harrington
7ad9fdf0be Cleaning permalink before checking 2015-01-22 10:19:43 +11:00
Rob Harrington
6b10a4a775 Restoring enterprise permalinks when they cause errors 2015-01-22 10:19:43 +11:00
Rob Harrington
4088bdc236 Clean up permalink checker 2015-01-22 10:19:43 +11:00
Rob Harrington
9b78963d5a Adding a javascript interface for checking permalinks and user input on enterprise console 2015-01-22 10:19:43 +11:00
Rob Harrington
3ec3441cfa Replacing all uses of the old enterprise shop url helper 2015-01-22 10:19:43 +11:00
Rob Harrington
39889390ef Altering shop page routing so that shop url is copy-and-pastable 2015-01-22 10:19:42 +11:00
Rob Harrington
c3659612ed enterprise routes use permalink 2015-01-22 10:19:42 +11:00
Rob Harrington
7a6cd98646 Fixing failing spec, missing permalink 2015-01-22 10:19:42 +11:00
Rob Harrington
9286c82b43 Removing obsolete methods 2015-01-22 10:19:42 +11:00
Rob Harrington
c330e49a7f Moving permalink check action to enterprise controller 2015-01-22 10:19:42 +11:00
Rob Harrington
e2268e53bb Adding action to check uniquness of enterprise permalink against existing routes 2015-01-22 10:19:41 +11:00
Rob Harrington
9f0aeb5adf Adding unique permalink to enterprises 2015-01-22 10:19:41 +11:00
Maikel Linke
0d9a0919e5 show contact a group's contact footer 2015-01-21 16:39:41 +11:00
Maikel Linke
c1aa2f9b33 Display contact information in the front end 2015-01-21 16:12:28 +11:00
Maikel Linke
650e35c13e Adding contact information to groups backend 2015-01-21 16:11:55 +11:00
Maikel Linke
71de15b3e4 Contact address for enterprise group 2015-01-21 12:32:07 +11:00
Rohan Mitchell
41e42c78c4 Update spec link name 2015-01-16 17:25:38 +11:00
summerscope
1753432f36 Adding new loading animation to replace ugly and large gif 2015-01-16 17:06:40 +11:00
summerscope
0f8809abfc Merge branch 'master' into shopfront-filters 2015-01-16 16:12:34 +11:00
Rob Harrington
1d80bee595 Cart item total reflects total number of items in the cart 2015-01-16 16:06:51 +11:00
summerscope
d04e843315 kill unused line 2015-01-16 16:01:17 +11:00
summerscope
c0eb902eef Turn off text shadow for buttons on popover for top nav 2015-01-16 16:00:18 +11:00
Rob Harrington
2c307f09c3 Changing edit cart button to link 2015-01-16 15:47:56 +11:00
summerscope
23fc428d95 Move spinner icon to left of text 2015-01-16 14:57:30 +11:00
summerscope
3bd77c74a5 Improve logic on shopping cart button to add meaningful labels for various states 2015-01-16 14:57:09 +11:00
summerscope
8334ff736b Styling for shopping cart buttons and spinner 2015-01-16 13:27:34 +11:00
summerscope
51687b5c2c Tweak language and styling for the CTA buttons taking users to shopping cart and checkout pages 2015-01-16 13:27:16 +11:00
summerscope
21108b34b6 Add new animation for spinning 2015-01-16 13:26:40 +11:00
summerscope
2a21889216 Remove border on product thumbnail to clean up UI 2015-01-16 13:06:30 +11:00
summerscope
b451b94fd1 Improving styling on large thumbnail view of product images 2015-01-16 13:06:02 +11:00
summerscope
d2d3a577ea Merging master into this branch to make it easy to pull for staging push 2015-01-15 17:38:35 +11:00
Rob Harrington
b3e67fa164 Take two on disabled logic 2015-01-15 17:34:04 +11:00
Rob Harrington
ac34da4f24 Altering logic around disabled state for 'Your Shopping Cart' button 2015-01-15 17:19:48 +11:00
summerscope
d2277999cc Undo change of logic on disabled state on Shopping cart button 2015-01-15 17:13:10 +11:00
summerscope
cdd6c2daf2 Styling product summary row to allow for hiding product thumb at a larger break point 2015-01-15 16:46:55 +11:00
summerscope
4a881a5aa5 Turn off product thumb at a larger break point 2015-01-15 16:46:18 +11:00
summerscope
d5d218c450 Make taxon flag smaller for smallest device breakpoint 2015-01-15 16:45:54 +11:00
summerscope
f8622be21d Adding in new color variable 2015-01-15 16:45:29 +11:00
summerscope
676e7cb4d6 Make taxon flag 2 cols for small devices 2015-01-15 16:45:09 +11:00
summerscope
1dfbc88813 Change logic on disabled class on Your shopping cart button as this was swapped the wrong way around 2015-01-15 16:16:01 +11:00
summerscope
9db1c4c708 Adding in new color variable 2015-01-15 16:15:23 +11:00
Rohan Mitchell
25a734b208 When creating enterprise, establish relationships with the owner's hubs 2015-01-15 16:08:03 +11:00
summerscope
47a8731b8e Styling for price column to distinguish between product added vs null 2015-01-15 16:01:49 +11:00
summerscope
932604bd69 Add in logic to style price column differently if nul vs has value 2015-01-15 16:01:00 +11:00
summerscope
4d7871a0bb New grey color variable 2015-01-15 16:00:21 +11:00
summerscope
51c8891fac Add animation to product title hover 2015-01-15 15:24:01 +11:00
summerscope
9b258e075b Add styling and animation to img thumbnail 2015-01-15 15:23:36 +11:00
summerscope
891a9b06a8 Add expand icon on top of image thumbnail 2015-01-15 15:23:10 +11:00
Maikel Linke
4dc0701213 Side menu for enterprise group page 2015-01-15 15:04:21 +11:00
summerscope
b5879d51ac Merging master into shopfront-filters branch 2015-01-15 14:15:25 +11:00
Rohan Mitchell
dcc04ea538 On enterprise edit page, do not show side menu links we don't have permission to 2015-01-15 13:43:39 +11:00
Rohan Mitchell
83754a01ef Make side menu item visibility declarative 2015-01-15 13:43:39 +11:00
Rohan Mitchell
2d82f76a43 Fix changed var in ability spec 2015-01-15 13:43:39 +11:00
Rohan Mitchell
d5437e1508 edit_profile permission no longer shows links to manage shipping methods, payment methods and enterprise fees for an enterprise 2015-01-15 13:43:39 +11:00
Rohan Mitchell
f0bd9c1065 Fix failing specs due to addition of another enterprise 2015-01-15 13:43:39 +11:00
Rohan Mitchell
642de2f65f Only show delete enterprise link when user has permission 2015-01-15 13:43:39 +11:00
Rohan Mitchell
f6e9c9494c Enterprise user can edit profiles it has permission to 2015-01-15 13:43:39 +11:00
Rohan Mitchell
90ad2e2b7d Allow enterprises with 'edit profile' permission to edit enterprises 2015-01-15 13:43:39 +11:00
Rohan Mitchell
cfb69ae7d2 Add Permissions#editable_enterprises 2015-01-15 13:43:38 +11:00
Rohan Mitchell
a93a824b83 Admin can grant permission for an enterprise to edit the profile of another 2015-01-15 13:43:38 +11:00
Rohan Mitchell
2170c7ede1 Fix broken JS spec 2015-01-15 13:43:38 +11:00
Rob Harrington
06cf914119 Hopefully resolving order populator strangeness related to concurrency by ensuring a fresh list of line items 2015-01-15 12:10:05 +11:00
Maikel Linke
3e5dfda324 Removing old link to enterprise groups from configuration menu 2015-01-15 10:53:11 +11:00
Maikel Linke
13cbbcef40 Admin Tab Menu: converting .rb to .html.haml.deface
Plus a new menu item for enterprise groups.
2015-01-15 10:26:27 +11:00
Maikel Linke
949808e839 Customising AdaptiveMenu for the admin tab panel
The AdaptiveMenu was design for a menu filling the screen width. Our
menu is in a skeleton structure. The new file overwrites the spree
version and takes the container width as reference.
2015-01-14 18:03:08 +11:00
Maikel Linke
02a276b9c9 Producer and hub lists with search
Fixing map display as well.
2015-01-14 15:18:46 +11:00
Maikel Linke
9f1a773a58 MapController: copy default config instead of referencing
Copying makes it possible to have multiple independent maps.
2015-01-14 14:34:31 +11:00
Maikel Linke
0e510998a4 Handling missing options in shipping filter call 2015-01-14 14:33:37 +11:00
Rohan Mitchell
307cc313df Stub scope_to_hub in spec that wasn't expecting it 2015-01-13 11:46:41 +11:00
Rohan Mitchell
0431e0048c Merge branch 'master' into variant-overrides-frontend
Conflicts:
	app/controllers/shop_controller.rb
	app/views/shop/products/_form.html.haml
	spec/controllers/shop_controller_spec.rb
2015-01-12 16:48:51 +11:00
Rohan Mitchell
20bde803c8 Display overridden prices when products are in the cart 2015-01-12 14:58:35 +11:00
Rohan Mitchell
6b43354386 Restructure spec 2015-01-12 14:37:43 +11:00
Rohan Mitchell
494bb1f3b4 Fix auto-reload nerfing scope_xx_to_hub 2015-01-12 14:24:15 +11:00
Rohan Mitchell
d52b6b34e3 Spec: do not subtract stock from overrides that do not override count_on_hand 2015-01-12 11:33:53 +11:00
Rohan Mitchell
4583e29ae3 When order is placed, subtract stock from variant override 2015-01-12 11:23:53 +11:00
Rohan Mitchell
a4d4622521 Add VariantOverride.decrement_stock 2015-01-12 10:39:23 +11:00
Rohan Mitchell
20f650b472 Add VariantOverride.stock_overriden? 2015-01-12 09:32:02 +11:00
Rohan Mitchell
e013e1fe00 Don't show rspec profile by default 2015-01-09 15:30:49 +11:00
Rohan Mitchell
d40ffeef52 Remove old sidebar 2015-01-09 13:10:17 +11:00
Rohan Mitchell
6200390369 Merge branch 'lin-d-hop-add_shipping_category' 2015-01-09 12:49:09 +11:00
Rohan Mitchell
e9f32f5329 Spec that shipping category can be set when creating new products 2015-01-09 12:46:36 +11:00
Rohan Mitchell
27bc845b0b Add correct markup for tax category required asterisk 2015-01-09 12:45:35 +11:00
Rohan Mitchell
22cb8b7a71 Two-space indentation, change 'Shipping categories' to 'Shipping category' 2015-01-09 12:33:26 +11:00
Rohan Mitchell
c6db1d440c Merge branch 'add_shipping_category' of https://github.com/lin-d-hop/openfoodnetwork into lin-d-hop-add_shipping_category
Conflicts:
	app/overrides/spree/admin/products/new/replace_form.html.haml.deface
	app/views/spree/order_mailer/confirm_email.text.haml
2015-01-09 12:30:19 +11:00
Rohan Mitchell
bc448e5156 Merge branch 'lin-d-hop-report_download_namechange' 2015-01-09 11:51:46 +11:00
Rohan Mitchell
6a42f62eb2 Fix filename on order cycle management report csv, add timestamp to it and also users and enterprises report 2015-01-09 11:49:59 +11:00
Rohan Mitchell
8db09d9590 Merge branch 'report_download_namechange' of https://github.com/lin-d-hop/openfoodnetwork into lin-d-hop-report_download_namechange
Conflicts:
	app/controllers/spree/admin/reports_controller_decorator.rb
2015-01-09 11:48:23 +11:00
Rohan Mitchell
7e55262ce9 Extract most everything to private methods - neatly groups concerns together 2015-01-09 11:28:39 +11:00
Rohan Mitchell
bbc887a692 Test the exact value, not the truncated value 2015-01-09 11:26:25 +11:00
Rohan Mitchell
6f36c0463c Separate data preparation from test conditions 2015-01-09 11:26:25 +11:00
Rohan Mitchell
592ac7856a Variable naming 2015-01-09 11:26:25 +11:00
Rohan Mitchell
261dea37e9 Spec formatting 2015-01-09 11:26:25 +11:00
Rohan Mitchell
80c507cc66 Formatting 2015-01-09 11:26:25 +11:00
Lynne Davis
1ad13f0359 Cleanup of git to remove unnecessary commits from pull request 2015-01-09 11:26:24 +11:00
Rohan Mitchell
532041c07b Use Fuubar formatter for rspec - displays fails as they happen 2015-01-08 12:12:15 +11:00
Rohan Mitchell
05bd0c4168 Merge branch 'Matt-Yorkley-reports_2' 2015-01-08 10:50:27 +11:00
Rohan Mitchell
51b0d7e0eb Move private method to helper 2015-01-08 10:48:02 +11:00
Rohan Mitchell
d2e0d4f44a Fix grammar 2015-01-08 10:39:51 +11:00
Rohan Mitchell
ab26902e4e Move money decorator to lib dir, as it's a decorator for a lib class, not a model 2015-01-08 10:39:14 +11:00
Rohan Mitchell
6adb4194c2 Extract date range form to partial 2015-01-08 10:31:51 +11:00
Rohan Mitchell
b6f29c778e Use haml syntax for defining divs 2015-01-08 10:23:37 +11:00
Rohan Mitchell
4839c00d62 Retrieve currency_symbol via private method rather than before_filter + instance var - cleaner syntax 2015-01-08 10:12:32 +11:00
Rohan Mitchell
a438216189 Merge branch 'reports_2' of https://github.com/Matt-Yorkley/openfoodnetwork into Matt-Yorkley-reports_2
Conflicts:
	app/controllers/spree/admin/reports_controller_decorator.rb
2015-01-08 10:08:12 +11:00
Rohan Mitchell
29f9b3bbd7 Merge branch 'Matt-Yorkley-tax_cat_dropdown' 2015-01-08 09:51:27 +11:00
Rohan Mitchell
ac59665e3c Test validations without creating models in database 2015-01-08 09:48:33 +11:00
Rohan Mitchell
e4efda2f96 Move model spec into validations block 2015-01-08 09:37:35 +11:00
Rohan Mitchell
a9b91bc52a Tighten spec: setting tax category should succeed 2015-01-08 09:35:18 +11:00
Rohan Mitchell
f90ee33c89 Use the tax category factory provided by Spree 2015-01-08 09:27:29 +11:00
Rohan Mitchell
087ccb52f9 Merge branch 'tax_cat_dropdown' of https://github.com/Matt-Yorkley/openfoodnetwork into Matt-Yorkley-tax_cat_dropdown 2015-01-08 09:09:20 +11:00
Rohan Mitchell
4bf8716786 Extract complete_checkout to method 2015-01-07 16:29:15 +11:00
Rohan Mitchell
c0030ddb13 use_short_wait can now take a flexible wait time 2015-01-07 16:28:03 +11:00
Rohan Mitchell
370133b875 Fix minor spec issues 2015-01-07 16:06:23 +11:00
Maikel Linke
3b9657eb17 show map of a group's enterprises 2015-01-07 12:00:55 +11:00
Maikel Linke
9956b967f0 Fixing link to group's page 2015-01-07 10:27:08 +11:00
Maikel Linke
9310bc902a first draft of group page, a lot of TODOs 2015-01-06 22:39:15 +11:00
Maikel Linke
9798b05a24 TabsCtrl can show tabs that don't toggle
toggle: tabs show on first click and hide on second click
select: tabs show on every click, one tab is always active
2015-01-06 22:39:15 +11:00
Maikel Linke
586753015b Reducing the groups page to a oneline list of groups 2015-01-06 22:39:15 +11:00
summerscope
6863dd75ef Restyling button for price breakdown to make it more clear that users press again to close the pop over 2014-12-19 17:05:13 +11:00
summerscope
fafdb29fcb Regenerated icon font, smaller file size and updated graph icon 2014-12-19 17:04:26 +11:00
Rohan Mitchell
85882a73ff Merge branch 'lin-d-hop-266reportsbranch' 2014-12-19 16:51:38 +11:00
Rohan Mitchell
2bad590ef4 Order confirmation and order objects use overridden prices 2014-12-19 16:51:11 +11:00
Rohan Mitchell
c3995ee4d5 Checkout shows overridden prices 2014-12-19 16:51:11 +11:00
Rohan Mitchell
94684e9963 Show overridden price in shopping cart 2014-12-19 16:51:11 +11:00
Rohan Mitchell
1e1a070b2b Scope Variant#price_in 2014-12-19 16:51:10 +11:00
Rob Harrington
6f95fa8546 Merge remote-tracking branch 'origin/shopfront-filters' 2014-12-19 15:40:01 +11:00
Rob Harrington
170b14d0f5 Tightening up expectations in shop controller spec 2014-12-19 15:39:13 +11:00
summerscope
d50f8dcd01 Tweak styling shopfront page to allow for new icons and hover state 2014-12-19 14:53:46 +11:00
summerscope
813ef463a2 Tweak markup shopfront page to add icon 2014-12-19 14:53:25 +11:00
Rob Harrington
a810fc88ac Dedicated new enterprise form 2014-12-19 14:05:24 +11:00
Rob Harrington
24cf3dee74 Hiding Shop Preferences in enterprise form 2014-12-19 14:05:24 +11:00
Rob Harrington
21e4f40616 Implementing primary taxon ordering on the shopfront 2014-12-19 14:05:23 +11:00
Rob Harrington
0fa289a443 Changing shopfront message into an alert box 2014-12-19 14:04:02 +11:00
Rob Harrington
fcb14f32d2 Validating user input for shopfront taxon order 2014-12-19 14:04:02 +11:00
Rob Harrington
f145a7ed65 Moving taxons into its own module, adding preferred shopfront taxon order to enterprise 2014-12-19 14:04:02 +11:00
Rob Harrington
a38e27e504 Adapting taxon autocompleter to allow multiple selection of taxons 2014-12-19 14:04:02 +11:00
Rob Harrington
4b353fa27b Ammending comments to make slightly more clear 2014-12-19 14:04:01 +11:00
Rob Harrington
9f086facdb Hiding link to shopfront for non-distributors 2014-12-19 14:04:01 +11:00
Rob Harrington
2efd905227 Fixing specs to work with text-angular 2014-12-19 14:04:01 +11:00
Rob Harrington
c5bf228cb9 Removing hashes from side menu links 2014-12-19 14:04:01 +11:00
Rob Harrington
b18163bfaf Remove separate long description injection, use full enterprise serializer instead 2014-12-19 14:04:01 +11:00
Rob Harrington
3fa1832e7b Adding shop closed message preference 2014-12-19 14:04:01 +11:00
Rob Harrington
d5df73c6a2 Duplicate create basic version of enterprise serializer for lists, make shopfront_message input use textangular 2014-12-19 14:04:01 +11:00
Rob Harrington
5a24f2c0e2 WIP: adding shopfront message to shop 2014-12-19 14:04:00 +11:00
Rob Harrington
435bc177f8 Hiding side menu elements by filtering rather than by making invisible 2014-12-19 14:04:00 +11:00
Rob Harrington
a489aa7ad9 Fixing enterprise feature spec, adding first shop preference 2014-12-19 14:04:00 +11:00
Rob Harrington
88d49148d4 Adding border to text-angular form element 2014-12-19 14:04:00 +11:00
Rob Harrington
33d4f03a99 Adding shop preferences pane, fiddling with icons 2014-12-19 14:04:00 +11:00
Rob Harrington
612c8a95b2 Adding icons to enterprise edit side menu 2014-12-19 14:04:00 +11:00
Rob Harrington
abdcdea1a2 Adding payment methods partial to new enterprirse edit screen 2014-12-19 14:04:00 +11:00
Rob Harrington
412b431f36 Fixing up tbody positions 2014-12-19 14:03:59 +11:00
Rob Harrington
25e608d9fb Adding shipping methods partial to redone enterprise form 2014-12-19 14:03:59 +11:00
Rob Harrington
bc32a053f7 Adding global styling class for aligning text to the right 2014-12-19 14:03:59 +11:00
Rob Harrington
0ea1adfdff Adding a partial for enterprise fees to enterprise form 2014-12-19 14:03:59 +11:00
Rob Harrington
468e83cef7 Adding global centering css class 2014-12-19 14:03:59 +11:00
Rob Harrington
76acd706ea Adding ability to show and hide menu items 2014-12-19 14:03:59 +11:00
Rob Harrington
eb2a6f0ef5 Splitting contact and social into two separate partials 2014-12-19 14:03:59 +11:00
Rob Harrington
b10d623f26 Rearrange columns for action buttons on enterprise form 2014-12-19 14:03:58 +11:00
Rob Harrington
f86d4a1996 Pulling headings out of enterprise form partials, displaying each conditionally 2014-12-19 14:03:24 +11:00
Rob Harrington
d8349bc037 menu refers to SideMenu object 2014-12-19 13:52:02 +11:00
Rob Harrington
39ca0ce3dc WIP: Adding a side_menu to the enterprise form 2014-12-19 13:52:01 +11:00
Rob Harrington
b0c86f83ee Splitting enterprise edit page into partials 2014-12-19 13:52:01 +11:00
summerscope
b944030994 Add some logic for small screen layout 2014-12-19 13:11:35 +11:00
summerscope
e9cb7f9565 Styling for clear filters row 2014-12-19 13:02:17 +11:00
summerscope
f36c881f52 Add clear filters feature to Producers page 2014-12-19 13:02:07 +11:00
summerscope
e8c5af004f Add another class so we can see which row is clear filters 2014-12-19 13:01:49 +11:00
summerscope
b55bced488 Put show hide animation back in for clear button 2014-12-19 12:53:48 +11:00
summerscope
ebe2d99299 Change markup because the boolean variable now works correctly 2014-12-19 12:53:26 +11:00
summerscope
515348a8fb Change the filtersActive variable for this page only 2014-12-19 12:52:57 +11:00
summerscope
08d37b955a Refactoring filter feature for shopfront page - show by default, hide on click. WIP. 2014-12-19 12:22:04 +11:00
Rohan Mitchell
72118f4e2e Fix syntax error, spec for removed column 2014-12-19 10:01:46 +11:00
Rohan Mitchell
e9f04c3c15 Clean up whitespace 2014-12-19 10:01:21 +11:00
Rohan Mitchell
6e0576235d Use create\! instead of build - more concise, raises exception on error 2014-12-19 09:51:32 +11:00
Rohan Mitchell
27d646c0e8 Tweak indentation, remove some blank lines 2014-12-19 09:51:32 +11:00
Rohan Mitchell
0151ecbb32 Add additional rows to payment method selection 2014-12-19 09:51:32 +11:00
Rohan Mitchell
d548515684 Remove unused header column 2014-12-19 09:51:13 +11:00
Rohan Mitchell
343af1f1e0 Rename report_shipping_options to report_shipping_method_options for symmetry with report_payment_method_options 2014-12-19 09:51:07 +11:00
Rohan Mitchell
3b58d99abc Fix spec failure 2014-12-19 09:51:02 +11:00
Rohan Mitchell
4a30f27b3d Merge branch '266reportsbranch' of https://github.com/lin-d-hop/openfoodnetwork into lin-d-hop-266reportsbranch
Conflicts:
	app/controllers/spree/admin/reports_controller_decorator.rb
	spec/models/spree/order_spec.rb
2014-12-19 09:38:02 +11:00
Rohan Mitchell
c4b45bdbbf Fix line items returning prices with fractional cents 2014-12-18 16:24:59 +11:00
Rohan Mitchell
b0f5d0170c Spec that overridden price with fees appears in quick cart 2014-12-18 13:32:28 +11:00
Rohan Mitchell
5fcb2982fa Fees are calculated correctly for items with variant overrides 2014-12-18 11:53:17 +11:00
Rohan Mitchell
ead84aa9ff Add ids to product listing products and variants 2014-12-18 11:00:45 +11:00
Rohan Mitchell
1d3800696e Variant overrides can override stock levels 2014-12-18 10:46:47 +11:00
Rohan Mitchell
f5ee9ba2f3 VariantOverride looks up count_on_hand 2014-12-18 10:21:07 +11:00
Rohan Mitchell
e6eecd3ae2 Replace proxies with modules 2014-12-18 10:20:31 +11:00
Rohan Mitchell
0832a8f63d Viewing products shows overridden prices 2014-12-17 16:00:25 +11:00
Rohan Mitchell
23c7715929 Cosmetic change 2014-12-17 14:03:54 +11:00
Rohan Mitchell
2ea7bdbec6 Move controller spec to serializer spec 2014-12-17 14:01:59 +11:00
Rohan Mitchell
6c300431d2 Move Product#variants_for to Variant.for_distribution scope 2014-12-17 13:42:30 +11:00
Rohan Mitchell
91c500417b Swap param order 2014-12-17 08:55:27 +11:00
Lynne Davis
7e49bd634e Updated the specs with Rohans suggestions 2014-12-12 18:23:43 +00:00
Lynne Davis
eeae72352b Renamed methods and vars to better fit naming conventions 2014-12-12 10:11:33 +00:00
Rob Harrington
66669e66ab Shaving some seconds from BOM spec by using simple order cycles and splitting specs up into more logical contexts 2014-12-12 15:43:05 +11:00
Rohan Mitchell
99dce6e8d6 Merge branch 'enterprise-form-confirmation' 2014-12-12 15:29:59 +11:00
Rohan Mitchell
27b0052e2b Merge branch 'product-category-required' 2014-12-12 15:29:31 +11:00
Rohan Mitchell
0b3dfa7278 Merge branch 'product-reports-without-deleted' 2014-12-12 15:29:03 +11:00
Rohan Mitchell
84b607433c Creating and then updating the new override updates the same override instead of creating a duplicate 2014-12-12 13:33:14 +11:00
Rohan Mitchell
31823f2dbd Setting both values to blank deletes override 2014-12-12 13:33:14 +11:00
Rohan Mitchell
ca1c116a5d Swap param order 2014-12-12 13:33:14 +11:00
Rohan Mitchell
d177f3ff73 Variant overrides table styling 2014-12-12 13:33:14 +11:00
Rohan Mitchell
d83ff4ef33 Remove short wait, show variant overrides tab in admin 2014-12-12 13:33:14 +11:00
Rohan Mitchell
fb980981fb Display variant override errors 2014-12-12 13:33:14 +11:00
Rohan Mitchell
45e709b2cc VariantOverrides require hub and variant 2014-12-12 13:33:14 +11:00
Rohan Mitchell
0393007ba5 Update variant overrides 2014-12-12 13:33:14 +11:00
Rohan Mitchell
c38686c820 Create new variant overrides 2014-12-12 13:33:14 +11:00
Rohan Mitchell
27444c6589 Extract variant overrides to own controller - permissions 2014-12-12 13:33:14 +11:00
Rohan Mitchell
531b35bbc6 WIP: Extract variant overrides to own controller - route, controller, views 2014-12-12 13:33:14 +11:00
Rohan Mitchell
9ee44e9aef WIP: Extract variant overrides to own controller - move views 2014-12-12 13:33:14 +11:00
Rohan Mitchell
91434fe12a Rename override_variants to variant_overrides - JS file names 2014-12-12 13:33:13 +11:00
Rohan Mitchell
a6f116aa09 WIP: Rename override_variants to variant_overrides - JS 2014-12-12 13:33:13 +11:00
Rohan Mitchell
d02511bf1d WIP: Rename override_variants to variant_overrides - file and dir name changes 2014-12-12 13:33:13 +11:00
Rohan Mitchell
51d2805de9 WIP: Rename override_variants to variant_overrides 2014-12-12 13:33:13 +11:00
Rohan Mitchell
a1906a71fa Return promise directly 2014-12-12 13:33:13 +11:00
Rohan Mitchell
47592cdbd8 Submit variant overrides to server 2014-12-12 13:33:13 +11:00
Rohan Mitchell
d67e614947 Remove extracted method 2014-12-12 13:33:13 +11:00
Rohan Mitchell
0a984b9041 Remove duplicate status message on BPE 2014-12-12 13:33:13 +11:00
Rohan Mitchell
c62ce57e0f Display count of dirty variant overrides 2014-12-12 13:33:13 +11:00
Rohan Mitchell
a1fc4dec43 Updating variant overrides stores dirty values 2014-12-12 13:33:13 +11:00
Rohan Mitchell
7255520471 Display success message on save variant overrides (stub) 2014-12-12 13:33:13 +11:00
Rohan Mitchell
9d4b8ae949 Rename div update-status-message to status-message 2014-12-12 13:33:13 +11:00
Rohan Mitchell
0938debafc Extract status message markup into partial 2014-12-12 13:33:13 +11:00
Rohan Mitchell
a8e1265a58 Swap parameter ordering - follows convention Rails.logger.error 'foo' 2014-12-12 13:33:13 +11:00
Rohan Mitchell
9c4c0f87e3 Rename methods to reduce naming duplication 2014-12-12 13:33:13 +11:00
Rohan Mitchell
bcc3815f6b Extract status message to a service 2014-12-12 13:33:13 +11:00
Rohan Mitchell
abf58c0e02 Provide blank values for all variant overrides 2014-12-12 13:33:13 +11:00
Rohan Mitchell
d3e639aa03 Index variant overrides by hub_id x variant_id 2014-12-12 13:33:12 +11:00
Rohan Mitchell
5cf3579b26 Extract variant overrides to service 2014-12-12 13:33:12 +11:00
Rohan Mitchell
5df4f1b7fe Convert text to form fields 2014-12-12 13:33:12 +11:00
Rohan Mitchell
3aedbb6c48 Display variant overrides 2014-12-12 13:33:12 +11:00
Rohan Mitchell
8baed4429c Indexer accepts arbitrary key to index by. Fix bug: Return an object instead of an array. 2014-12-12 13:33:12 +11:00
Rohan Mitchell
47b479c6c9 Show variants in override variants interface, not just products 2014-12-12 13:33:12 +11:00
Rohan Mitchell
42481e9691 Provide hub permissions to specs 2014-12-12 13:33:12 +11:00
Rohan Mitchell
efae9265c1 Inject variant overrides 2014-12-12 13:33:12 +11:00
Rohan Mitchell
ff28da345d Find variant overrides for some hubs 2014-12-12 13:33:12 +11:00
Rohan Mitchell
91b386003a Add VariantOverrideSerializer 2014-12-12 13:33:12 +11:00
Rohan Mitchell
a3a3832c8d Only show products that the chosen hub can add to an order cycle 2014-12-12 13:33:12 +11:00
Rohan Mitchell
500b5ce347 Enterprise managers can access override variants 2014-12-12 13:33:12 +11:00
Rohan Mitchell
b1ba519a73 When finding per hub order cycle enterprises, also return managed producers 2014-12-12 13:33:12 +11:00
Rohan Mitchell
5b82fcaca7 Inject hub permissions - which producers each hub can add to order cycle 2014-12-12 13:33:12 +11:00
Rob Harrington
3a9c4e0826 Adding a price without fees column to the order cycle customer report 2014-12-12 12:00:15 +11:00
Rob Harrington
6a226e4f92 Fixing typos and changing delivery address display in order confirmation email 2014-12-12 12:00:15 +11:00
Rohan Mitchell
086f69ccfb Default payment method server/test_mode to live 2014-12-12 11:35:18 +11:00
Rohan Mitchell
e607c9855f Add Pin Payments gateway 2014-12-12 10:59:23 +11:00
Lynne Davis
079781576b Adding new specs and a couple updates the lib/report 2014-12-11 12:47:56 +00:00
Rob Harrington
b9011d9abe Remove obsolete spree checkout views 2014-12-11 16:17:15 +11:00
Rob Harrington
b7810df346 Revert "Removing obsolete checkout views"
This reverts commit d0e013c1a5.
2014-12-11 16:09:17 +11:00
Rob Harrington
dfb9e5bde5 Order reports now present the price of line items with adjustments included 2014-12-11 15:48:29 +11:00
Rohan Mitchell
eab2e5de2a Use scope 2014-12-11 15:00:44 +11:00
Rob Harrington
3be437485a Redirecting any spree checkout_state redirects to our checkout controller 2014-12-11 14:53:11 +11:00
Rob Harrington
d0e013c1a5 Removing obsolete checkout views 2014-12-11 14:50:29 +11:00
Maikel Linke
440044372b Leave-page-warning only after changing inputs
The enterprise form is now set 'dirty' whenever an input changes. The
navigation callback confirms to leave the page only if the form is
dirty.
2014-12-11 14:27:08 +11:00
Maikel Linke
76739a4746 Unify nav-check and nav-callback attributes in nav-check-callback
The value of nav-check was not used and nav-callback was only important
if nav-check was given. So we need only one attribute, now named
nav-check-callback.
2014-12-11 12:14:51 +11:00
Maikel Linke
11f1261dd3 Navigation Callbacks for WebKit 2014-12-11 12:07:48 +11:00
Maikel Linke
27896534f0 Navigation Callbacks (confirmation to leave) refs
A navigation callback could give only a fixed value at load time. Now it
can act depending on the site's state just before the page is unloaded.
2014-12-11 12:05:59 +11:00
Rob Harrington
2f83d71931 Adding mail/all.css to assets precompile list 2014-12-10 09:56:33 +11:00
Lynne Davis
f878e18037 Update that works better with the specs 2014-12-08 16:25:18 +00:00
Maikel Linke
3cc79d0036 Filter deleted products in products report
BugHerd 484: Remove deleted products from Product / Inventory reports
2014-12-05 15:52:10 +11:00
Maikel Linke
7b41d4c5d4 Denoting the product category as required
Using common style: span.required *
2014-12-05 14:56:32 +11:00
Rohan Mitchell
ec08ab4cc9 Merge pull request #307 from openfoodfoundation/replace-fixtures
Replacing fixtures with minimal seeding
2014-12-04 16:31:30 +11:00
Maikel Linke
5c191bcc7f Moving test seeding into spec/support/seeds.rb 2014-12-04 15:38:59 +11:00
Rohan Mitchell
19667f31fa Add missing translation for welcome_to 2014-12-03 15:19:25 +11:00
Rohan Mitchell
95f8334370 Reinstate style 2014-12-03 12:28:22 +11:00
Rohan Mitchell
50e26ed96f Remove old required partial 2014-12-03 12:22:43 +11:00
Rohan Mitchell
e30021537a Merge branch 'master' into enterprise-form-required-fields
Conflicts:
	app/views/admin/enterprises/_form.html.haml
	app/views/admin/enterprises/_ng_form.html.haml
2014-12-03 12:20:52 +11:00
Rohan Mitchell
bd7253bdda Merge branch 'using-simple-order-cycle' 2014-12-03 12:08:25 +11:00
Rohan Mitchell
fbef139fc5 Merge branch 'master' into using-simple-order-cycle 2014-12-03 11:57:59 +11:00
Lynne Davis
633a8a49e2 updating spec based on the wise advice of Rohan 2014-12-03 00:35:53 +00:00
Rohan Mitchell
3358fb3d73 Name based on meaning instead of context 2014-12-03 09:39:36 +11:00
Paul Mackay
26bca0faf8 Localize more strings on home page. 2014-12-03 09:39:36 +11:00
Paul Mackay
73ece4075c Add rails-i18n gem. 2014-12-03 09:39:35 +11:00
Lynne Davis
a5ae1c490c Fixing typo in report found through testing 2014-12-02 17:48:04 +00:00
Lynne Davis
c2c51a5531 Fixing typo in feature spec 2014-12-02 12:24:34 +00:00
Maikel Linke
8e280919ac Using simple_order_cycle in clone spec
Creating a coordinator fee and two exchanges in the spec instead of
using a full order_cycle. Timing of this single test:

Before: 15.32 seconds
After:   6.26 seconds
2014-11-28 15:36:34 +11:00
Maikel Linke
e240933b29 Using simple_order_cycle in spec
Before: 4 minutes 6.9 seconds
After:  3 minutes 27.4 seconds
2014-11-28 14:45:35 +11:00
Maikel Linke
349b7de11a Using simple_order_cycle
Before: 2 minutes 58.3 seconds
After:  35.04 seconds
2014-11-28 14:02:55 +11:00
Maikel Linke
73b8f37d77 Using simple_order_cycle
Before: 2 minutes 8.7 seconds
After:  16.11 seconds
2014-11-28 13:55:06 +11:00
Maikel Linke
aa2cefb88c Using simple_order_cycle where applicable
Before: 3 minutes 0 seconds
After:  1 minute 21.02 seconds
2014-11-28 13:45:25 +11:00
Maikel Linke
ccd03bfa84 Using simple_order_cycle
Test timings were not accurate. Output:
4 order_cycles: 9.94 seconds
2 order_cycles: 9.87 seconds
0 order_cycles: 9.9 seconds

Felt execution was much higher
2014-11-28 13:20:05 +11:00
Maikel Linke
7f764db4d7 Using simple_order_cycle
order_cycle: 1 minute 56.88 seconds
simple_order_cycle: 1 minute 8.05 seconds
2014-11-28 12:39:05 +11:00
Maikel Linke
082a3cd9ab Creating simple_order_cycle instead of order_cycle
Speedup on my machine:
 1 minute 44.52 seconds
 21.9 seconds
2014-11-28 12:29:47 +11:00
Lynne Davis
35c27bf516 First specs for additional scope to order model. Not liking the repeated code so would appreciate feedback to get rid of it. Thanks! 2014-11-27 20:36:41 +00:00
Rob Harrington
699c9a62a5 Removing pretty_inspect so that bugsnag alert work on production 2014-11-27 16:39:14 +11:00
Maikel Linke
ef0b0a9a94 Replacing fixtures with minimal seeding
Seeding:
 1 country: Australia
 2 states:  Vic, NSW
2014-11-27 16:38:39 +11:00
Rob Harrington
9782a9d3d6 Hopefully fixing Poltergeist Timeout error due to long long time for first admin spec 2014-11-27 14:42:02 +11:00
Rob Harrington
45bcee16ef Pulling out obsolete setup in BOM spec to make it more like BPE spec, see if that helps with intermittent fails 2014-11-27 09:44:13 +11:00
Rob Harrington
5799f09caf Merge branch 'master' into pretty-emails 2014-11-27 00:02:44 +11:00
Rob Harrington
38440dd70a Ammending checkout specs for two emails on placement of order 2014-11-26 23:16:11 +11:00
Rob Harrington
258573f5a6 Remove obsolete text version of user signup_confirmation 2014-11-26 18:58:26 +11:00
Rob Harrington
0cf2df8358 Remove obsolete text version of order confirm_email 2014-11-26 18:54:50 +11:00
Rob Harrington
8a3bffb37d Cart page conforms to convention in rest of checkout, adjusting helpers through checkout 2014-11-26 18:53:29 +11:00
Rob Harrington
8f27c643f1 Move override for cart line item into existing view replacement 2014-11-26 16:08:53 +11:00
Rob Harrington
a8dde3bbb9 Moving shopfront trial progress bar logic into enterprises helper and dealing with expiry 2014-11-26 15:16:53 +11:00
Rob Harrington
f5acf36771 Hiding enterprise shop url in ent welcome email, as that may bot actually make sense 2014-11-26 14:50:19 +11:00
Rob Harrington
17a2e37eda Fixing broken category lookup on BPE 2014-11-26 13:16:29 +11:00
Rob Harrington
f6b0863279 Make cost breakdowns consistent throughout checkout 2014-11-26 13:07:40 +11:00
Rob Harrington
c4961d2502 Whitespace crusader 2014-11-26 11:59:22 +11:00
Matt-Yorkley
e4d1ae7548 Refactored currency symbol display 2014-11-24 18:20:10 +00:00
Matt-Yorkley
4f153714a8 Reports pages improvements and i18n 2014-11-23 17:26:26 +00:00
Matt-Yorkley
451dd3966f form partial 2014-11-23 15:22:56 +00:00
Matt-Yorkley
c3829ae64f Tax category dropdown on create product form 2014-11-23 15:18:16 +00:00
Rob Harrington
9bd3909449 Merge master into pretty-emails 2014-11-21 14:43:01 +11:00
Rob Harrington
2f28312f7e Removing incorrectly placed directive in profile shops skinny view 2014-11-21 14:18:22 +11:00
Rohan Mitchell
49d5cb2f05 Do not show Override Variants tab - hide this until feature is ready 2014-11-21 13:49:09 +11:00
Rohan Mitchell
0b030a85ff Incrementally load products 2014-11-21 13:49:09 +11:00
Rohan Mitchell
001bf999d0 Extract Spree API authorisation to service 2014-11-21 13:49:09 +11:00
Rohan Mitchell
824b00743e Extract fetch-by-page from BPE to service 2014-11-21 13:49:09 +11:00
Rohan Mitchell
58fdc48b9f Display products in table 2014-11-21 13:49:09 +11:00
Rohan Mitchell
7069b30e71 Add indexer service (equivalent of Dereferencer, but named more accurately) 2014-11-21 13:49:09 +11:00
Rohan Mitchell
680ba379c1 User can select a hub 2014-11-21 13:49:09 +11:00
Rohan Mitchell
912c60f720 Do not show producers in hubs list 2014-11-21 13:49:09 +11:00
Rohan Mitchell
4c9aa96b17 have_select2 can test for an exact set of options 2014-11-21 13:49:09 +11:00
Rohan Mitchell
2c74a94e31 Show list of hubs to select for managing variant overrides 2014-11-21 13:49:09 +11:00
Rohan Mitchell
d810388248 Add have_select2 capybara matcher 2014-11-21 13:49:09 +11:00
Rohan Mitchell
bad5d798bf Comment proxy classes 2014-11-21 13:49:09 +11:00
Rohan Mitchell
2b0f6b7865 Add ProductProxy which wraps the product's variants in VariantProxys 2014-11-21 13:49:09 +11:00
Rohan Mitchell
f3fa5edb9d Add simple variant proxy 2014-11-21 13:49:09 +11:00
Rohan Mitchell
f9b4c07219 Add initial VariantOverride model with price lookup 2014-11-21 13:49:09 +11:00
Rob Harrington
5e3f1e4a3b Adding bugsnag notifier to work out what is happening with bug when adding variants to order 2014-11-21 12:37:56 +11:00
Rob Harrington
2c4b8d779c Make application.yml available to travis 2014-11-21 10:17:43 +11:00
Rob Harrington
04b065e28a Orders page doesn't crash when orders have no distributor 2014-11-21 10:15:40 +11:00
Rohan Mitchell
bf6d0a2beb Port remaining specs to BulkProducts service specs 2014-11-21 08:41:41 +11:00
Rohan Mitchell
5eb40261a8 Port clone products specs to BulkProducts service specs 2014-11-21 08:41:41 +11:00
Rohan Mitchell
221e9344fd Port fetch products specs to BulkProducts service specs 2014-11-21 08:41:41 +11:00
Rohan Mitchell
387d25b8f2 WIP: More extracting BulkProducts-specific specs to their own file 2014-11-21 08:41:41 +11:00
Rohan Mitchell
7e2c979c96 WIP: Extracting BulkProducts-specific specs to their own file 2014-11-21 08:41:41 +11:00
Rohan Mitchell
7e4d337773 Extract DisplayProperties to a service
Conflicts:

	app/assets/javascripts/admin/bulk_product_update.js.coffee
2014-11-21 08:41:41 +11:00
Rohan Mitchell
356a03ac4e WIP: Extract bulk product edit product management to BulkProducts service
Conflicts:

	app/assets/javascripts/admin/bulk_product_update.js.coffee
2014-11-21 08:41:41 +11:00
Rohan Mitchell
f117c0cd24 Make spree_current_user available to serializers as 'scope' 2014-11-21 08:41:41 +11:00
Rohan Mitchell
29e49b67cc In BPE, rename producer and category JSON attrs to producer_id and category_id
Conflicts:

	spec/features/admin/bulk_product_update_spec.rb
2014-11-21 08:41:41 +11:00
Rohan Mitchell
021cca4fca Stylistic changes 2014-11-21 08:41:41 +11:00
Rob Harrington
ebaaf2a136 Display line items in confirmation email with fees included in item totals 2014-11-20 20:17:18 +11:00
Rob Harrington
b64b48f26e Removing obsolete MailerHelper reference 2014-11-20 20:16:34 +11:00
Rob Harrington
c310a3bdaa Don't use svg for email header 2014-11-20 20:14:57 +11:00
Rob Harrington
46462a1abb Format fiddling in user signup confirm email 2014-11-20 20:13:54 +11:00
Rohan Mitchell
b941ffabeb Update README for Figaro config, add Maikel to credits 2014-11-20 16:20:07 +11:00
Rohan Mitchell
76c300283b Remove CONTACT_STRING config - Rob has an admin-managable override for this coming soon 2014-11-20 15:59:06 +11:00
Rob Harrington
3d98ec6eef Stripping out inline styles from enterprise email templates 2014-11-20 15:51:28 +11:00
Rob Harrington
4dd5e51ed5 Stripping out inline styles from user signup email template 2014-11-20 15:48:36 +11:00
Rob Harrington
1f42d32151 Remove naughty pry 2014-11-20 15:45:50 +11:00
Rob Harrington
f5a5b93c22 Can use relative paths for assets in emails because roadie 2014-11-20 15:45:12 +11:00
Rob Harrington
15d157abc0 Stripping out inline styles from email templates 2014-11-20 15:42:03 +11:00
Rohan Mitchell
8096ca2519 Merge remote-tracking branch 'origin/config' into config 2014-11-20 15:41:15 +11:00
Rob Harrington
2e84a8f626 Pull layout and roadie style inlining out into spree's base mailer so it applies to all mailers 2014-11-20 15:05:19 +11:00
Rob Harrington
ac6a043f40 Add roadie-rails to help with inlining styles for emails 2014-11-20 14:56:35 +11:00
Rob Harrington
fe0bb49baf WIP: Adding templates for different order confirmation emails 2014-11-20 12:06:53 +11:00
Rob Harrington
20341ecbc1 Send bugsnag notification when order confirmation email fails 2014-11-20 12:04:51 +11:00
Rob Harrington
dd6a5ecd0b Adding helper for assets in mailer views, fixing links in mailer layout 2014-11-19 16:42:31 +11:00
Rob Harrington
c9d0721acd Rewire order confirmation email so that two separate emails are sent, one for customers and one for shop owners 2014-11-19 11:03:00 +11:00
Lynne Davis
b81bf60dc2 267: Cont. Didn't realise commit -a doesn't add a file 2014-11-18 19:30:44 +00:00
Lynne Davis
cc0da142b7 267: Adding to new product form ability to add shipping category to record frozen/chilled 2014-11-18 19:28:49 +00:00
Lynne Davis
03b59eae75 266: Updating with rohans suggestions to tidy up and 'rubify' the code. Thanks for the tips Rohan! 2014-11-14 15:56:07 +00:00
Lynne Davis
e89184de02 286: Last sneaky dollar sign. Updated to use spree_number_to_currency 2014-11-14 14:24:22 +00:00
Rob Harrington
8d1facb7c3 Adding revamp of enterprise welcome email by @summerscope 2014-11-14 18:42:16 +11:00
Rob Harrington
0907e2d886 A few alterations to the enterprise email confirmation email 2014-11-14 18:10:40 +11:00
Rob Harrington
d182bb7bf7 Add signoff partial for mailer templates 2014-11-14 18:09:48 +11:00
Rob Harrington
b320f71771 Adding revamp for signup confirmation by @summerscope 2014-11-14 17:59:56 +11:00
Rob Harrington
27d1886d53 Fix mailto link 2014-11-14 17:58:13 +11:00
Rob Harrington
15559b2388 Merge branch 'master' into pretty-emails 2014-11-14 16:54:50 +11:00
Rob Harrington
ffb915ccc5 Orders page doesn't crash when orders have no distributor 2014-11-14 16:48:33 +11:00
Rob Harrington
d9d6b7bee4 Adding filtering to Users and Enterprises report 2014-11-14 16:36:22 +11:00
Rob Harrington
79a83ee206 Adding users and enterprises report, controller action and template 2014-11-14 16:36:22 +11:00
Rob Harrington
66a3410087 WIP: Adding new report to ability spec 2014-11-14 16:36:22 +11:00
Rob Harrington
65a5960fcc WIP: Add route for User and Enterprise report 2014-11-14 16:36:22 +11:00
Lynne Davis
cc3959467d 285: Report downlaod naming - Updating to the cleaner suggestions of Rohan. Note to self, don't be lazy :-) 2014-11-13 10:30:00 +00:00
Rohan Mitchell
43bac4079f Show hubs that are not ready for checkout so that we can view SEFH - Sample :/ 2014-11-13 15:21:02 +11:00
Lynne Davis
15f29f4c8e 266: Adding ability to search by distribution 2014-11-12 18:52:25 +00:00
Lynne Davis
932d571d2c 266: Updating to incorporate Rohans suggestions. Searching on payment method name rather than id 2014-11-12 11:47:26 +00:00
Rohan Mitchell
43ddac84b0 I like nice code 2014-11-12 16:25:45 +11:00
Rohan Mitchell
2ca2d53273 Do not include perftools gem by default - it breaks Travis 2014-11-12 16:25:45 +11:00
Rohan Mitchell
4e655d7866 Uncouple migrations from models 2014-11-12 16:25:45 +11:00
Rob Harrington
7282c7174f Moving alert box to top of section 2014-11-12 15:55:48 +11:00
Rob Harrington
7a719952fc Adding informative messages about email confirmations to enterprise form 2014-11-12 15:20:52 +11:00
Rob Harrington
2c67066366 Add alert to enterprise edit page to remind user that confirmation email has been sent 2014-11-12 15:20:52 +11:00
Rob Harrington
6b21bbdf74 Reconfirmation email sends to the right address 2014-11-12 15:20:51 +11:00
Rob Harrington
ee2ee5dba7 Adding an enterprise welcome email 2014-11-12 15:20:51 +11:00
Rohan Mitchell
6953449d28 Merge pull request #288 from folklabs/doc-improvements
Small doc tweak to add db:setup command.
2014-11-12 14:40:33 +11:00
Lynne Davis
9a5ee81431 Changing report download titles in include download date 2014-11-11 17:49:08 +00:00
Rohan Mitchell
bb9b244d18 Upgrade paperclip to 3.x, fixes incorrect cropping of EXIF-rotated JPGs 2014-11-10 14:54:49 +11:00
Paul Mackay
1d0dab5cc6 Small doc tweak to add db:setup command. 2014-11-09 12:08:40 +00:00
Rob Harrington
0432fe229b Add bottom margin to loading gif 2014-11-07 16:53:15 +11:00
Rob Harrington
66bbaabf79 Adding loading gif to shop page 2014-11-07 16:50:31 +11:00
summerscope
2addb1c472 Tweak producer register pane styling for lightweight view 2014-11-07 13:56:56 +11:00
summerscope
791cc9b301 Hide pricing table until language is sorted 2014-11-07 13:56:28 +11:00
summerscope
2166fbc8a0 Tweak wording for kirsten 2014-11-07 13:56:07 +11:00
summerscope
9f74e8ff03 Add caret to right on register buttons, kill commented out text 2014-11-07 12:05:35 +11:00
summerscope
4795de5ab0 Adding new partial into homepage 2014-11-07 08:49:09 +11:00
summerscope
039b94aa47 Styling for Producers Register pane and pricing table 2014-11-07 08:48:54 +11:00
summerscope
9a2e510f2c Add Producers register link to footer 2014-11-07 08:48:37 +11:00
summerscope
cd34aedbb9 New partial for producer register pricing table 2014-11-07 08:48:24 +11:00
Rob Harrington
e1823212d6 Reconfirmation email not required when we already know about new email address for enterprise 2014-11-06 21:19:22 +11:00
Rob Harrington
898af0a55e Enterprise confirmation emails can be resent, and sensible things happen if confirmation link is clicked twice 2014-11-06 21:19:21 +11:00
Rob Harrington
e6f5811a60 Only send confirmation instructions to the enterprise email address 2014-11-06 21:19:21 +11:00
Rob Harrington
70c4b7082d Split ent confirmation email out into layout and partial 2014-11-06 21:19:21 +11:00
Rob Harrington
74642c3825 Update checkout helper spec to reflect Rohan's changes 2014-11-06 21:18:20 +11:00
Rohan Mitchell
3e151c40f5 WIP: Smooth scroll to checkout errors 2014-11-06 18:29:49 +11:00
Rohan Mitchell
57e7bc9504 Checkout: When error, open offending accordion section 2014-11-06 18:29:49 +11:00
Rohan Mitchell
4389389d44 Checkout: Display error when shipping or payment method is not selected 2014-11-06 18:29:49 +11:00
Rohan Mitchell
ca9da15ba4 Checkout: Fix shipping and payment method summary display when none selected 2014-11-06 18:29:48 +11:00
Rohan Mitchell
f2c6ee87d3 Extract duplicated checkout accordion heading to partial 2014-11-06 18:29:48 +11:00
Rohan Mitchell
519aea2d9b Extract checkout shipping ship address to partial 2014-11-06 18:29:48 +11:00
Rohan Mitchell
433cf9dd9b Checkout: Use validated_select for shipping address fields 2014-11-06 18:29:48 +11:00
Rohan Mitchell
7a0c291fc1 Checkout: Use validated_select for country 2014-11-06 18:29:48 +11:00
Rohan Mitchell
06a9110e95 Extract checkout select options to helpers 2014-11-06 18:29:48 +11:00
Rohan Mitchell
900a98b4bb Display errors on checkout State field 2014-11-06 18:29:48 +11:00
Rohan Mitchell
e50d2a6a37 Remove unused directive 2014-11-06 18:29:48 +11:00
Rohan Mitchell
cbb968d87f Pass checkout form to controller method 2014-11-06 18:29:48 +11:00
Rohan Mitchell
75b250d3fe When submitting checkout, if field is invalid, show errors 2014-11-06 18:29:48 +11:00
Rohan Mitchell
e8e5f7033c Improve all the syntax 2014-11-06 18:29:48 +11:00
Rob Harrington
51e768e722 Refactor EnterpriseSet to accept a collection as an argument 2014-11-06 16:29:09 +11:00
Rob Harrington
b27a0986b7 Ensure collection is locked down before we start asssigning attributes to model set 2014-11-06 16:28:24 +11:00
Rob Harrington
be042af751 Add explicit select statement to prevent scope being read only 2014-11-06 15:54:59 +11:00
Rob Harrington
93e3d87fcb Errors on bulk update for enterprise index do not allow user to list all enterprises 2014-11-06 11:01:44 +11:00
Rohan Mitchell
1506b10d8f Fix brittle spec 2014-11-05 16:08:45 +11:00
Rohan Mitchell
fdbb274667 Allow browsing products (but not cart/checkout) for hubs that are not ready for checkout 2014-11-05 14:29:36 +11:00
Rohan Mitchell
a2f4732547 Merge branch 'folklabs-i18n' 2014-11-05 12:01:27 +11:00
Rohan Mitchell
98f434dad3 Merge branch 'i18n' of https://github.com/folklabs/openfoodnetwork into folklabs-i18n 2014-11-05 11:54:42 +11:00
Lynne Davis
6f6ae309c6 266 UK: Adding first UK report - Payment Methods Report - to find balances per ordercycle for multiple payment method options. Working, but not complete to spec yet 2014-11-02 11:26:39 +00:00
Rohan Mitchell
8c2adb2a05 Fix specs: feature specs requiring payment and shipping methods, race condition, double flash message issue 2014-11-01 12:11:50 +11:00
Rohan Mitchell
15b05de7f2 Fix specs: Distributors require shipping and payment method 2014-11-01 10:42:38 +11:00
Rohan Mitchell
0cf4e01dde Fix specs: Expect proper query chain 2014-11-01 10:39:29 +11:00
Paul Mackay
543368169f #254: Localisation of home page and welcome email. 2014-10-31 06:59:43 +00:00
Rohan Mitchell
0d05c7163d Use factory shortcut for creating shipping and payment methods 2014-10-31 16:26:13 +11:00
Rohan Mitchell
f5b20b7afc Give distributors a payment and shipping method where required 2014-10-31 16:02:43 +11:00
Rohan Mitchell
e2d88e615b Fix broken spec 2014-10-31 16:00:28 +11:00
Rohan Mitchell
8488b8e469 When user has selected a hub that is not ready for checkout, unselect it 2014-10-31 15:02:58 +11:00
Rohan Mitchell
7aefa05efd Fix specs broken by requirement for valid shipping and payment method 2014-10-31 14:48:08 +11:00
Rohan Mitchell
abeabd5b1c Add Enterprise#ready_for_checkout? 2014-10-31 14:04:43 +11:00
Rohan Mitchell
94d50f220f Display an error message to admin when there are hubs in order cycles that are not ready for checkout 2014-10-31 12:22:02 +11:00
Rohan Mitchell
9f43146e47 Payment methods need to be available, too 2014-10-31 12:22:02 +11:00
Rohan Mitchell
f0d3b987d4 Show hubs as unavailable when they do not have available payment and shipping methods 2014-10-31 12:22:02 +11:00
Rohan Mitchell
1d9a3f33e0 Order cycle distributors must have shipping and payment methods 2014-10-31 12:22:02 +11:00
Rohan Mitchell
fc1c3abb9f Remove duplicate data injection (duplicated in darkswarm layout) 2014-10-31 12:22:02 +11:00
Rohan Mitchell
433806aca8 Remove unused helpers and standardise naming 2014-10-31 12:22:02 +11:00
summerscope
34f47cedae Fix markup for better layout and getting column padding sitting where it should 2014-10-30 17:03:09 +11:00
summerscope
733b249b12 making tabs break down better for responsive and small devices 2014-10-30 17:03:09 +11:00
summerscope
d8933deee0 Styling shopfront tabs make things better and more responsive 2014-10-30 17:03:09 +11:00
summerscope
a27a805478 Tweak styling so the accordion hover colors dont fight the validation colors 2014-10-30 17:03:08 +11:00
summerscope
38e6575781 Move first and last name fields to top of shipping address accordion 2014-10-30 17:03:08 +11:00
summerscope
799c894bd3 Tweak logo embedding to use new version, and use srcset with src as a fallback 2014-10-30 17:03:08 +11:00
summerscope
32daa1745c Tweak logo for high density screens, make pretty and easier to read 2014-10-30 17:03:08 +11:00
summerscope
6329db23d7 Remove styling for capitalisation for shopfront page 2014-10-30 17:03:08 +11:00
Rob Harrington
6596e14e5d Use shared partial for errors on EnterpriseFeeSet 2014-10-30 13:02:16 +11:00
Rob Harrington
65d13e0490 Show error messages on enterprise index page 2014-10-30 13:02:16 +11:00
Rob Harrington
977c508833 Make enterprise limit error messages more specific 2014-10-30 13:02:16 +11:00
summerscope
fd8eecf745 Remove unnecessary partial import 2014-10-30 11:30:21 +11:00
summerscope
64f2d1b34e Remove unnecessary partial import 2014-10-30 11:30:03 +11:00
summerscope
f1e27a3ac3 No need to import typography into this file, add note for future devs 2014-10-30 11:29:42 +11:00
Rafael Schouten
2b0757e96f Merge branch 'master' of https://github.com/openfoodfoundation/openfoodnetwork 2014-10-25 20:23:25 +11:00
Rob Harrington
43d3955627 Change wording of trial option on change_type_form 2014-10-25 19:56:52 +11:00
Rafael Schouten
68073d7239 revome config sidebar from index 2014-10-25 19:03:56 +11:00
Rafael Schouten
095dd28505 Merge branch 'master' of https://github.com/openfoodfoundation/openfoodnetwork 2014-10-25 18:53:46 +11:00
Rafael Schouten
feff4fd46f fix reports taxons and specs 2014-10-25 18:51:03 +11:00
Rafael Schouten
6f1c90ea25 add toxons to prodcut reports 2014-10-25 17:09:23 +11:00
Rafael Schouten
098afacce3 Merge branch 'config' of https://github.com/openfoodfoundation/openfoodnetwork into config 2014-10-25 15:32:16 +11:00
Rafael Schouten
8395dbb3e9 Merge branch 'master' into config
Conflicts:
	.gitignore
	Gemfile
2014-10-25 15:29:53 +11:00
Rafael Schouten
33fc7e0fc9 Merge branch 'master' into checkout 2014-10-25 15:12:24 +11:00
Rob Harrington
6155600cb2 Set environment for payment methods unless admin 2014-10-24 18:15:48 +11:00
Rob Harrington
8385bff55e Make admins get multi enterprise dashboard 2014-10-24 17:59:58 +11:00
summerscope
928e5dc474 Make styling more specific to single enterprise dashboard user only 2014-10-24 16:39:59 +11:00
Rob Harrington
cc0e205f50 Merge master into onbaording 2014-10-24 15:36:59 +11:00
Rob Harrington
80b36992f9 Merge in remote branch 2014-10-24 15:28:40 +11:00
Rob Harrington
a157528974 Adding specs for single ent dash and remove product ability for profiles 2014-10-24 15:27:08 +11:00
Rob Harrington
8b819539e7 Fixing specs 2014-10-24 14:52:59 +11:00
summerscope
2eb152f63e Change class name for big button; change labels for submit buttons 2014-10-24 14:49:09 +11:00
summerscope
c733ca251e Styling for big button 2014-10-24 14:48:46 +11:00
summerscope
d388747a81 Make margine appear for small devices only 2014-10-24 14:48:29 +11:00
Rob Harrington
8ac367675f Adding big button class to CTA 2014-10-24 14:24:55 +11:00
Rob Harrington
96516a8ff3 User can switch between trialling a shopfront and not trialling a shopfront 2014-10-24 14:12:47 +11:00
Rob Harrington
3e002c6f82 Fiddle with text 2014-10-24 13:34:49 +11:00
Rob Harrington
20e2cb4ecc Set visibility to false for enterprises created through registration process 2014-10-24 13:31:20 +11:00
Rob Harrington
b0d8290dab Add alert for visibility to single ent dash 2014-10-24 13:28:25 +11:00
Rob Harrington
8603cf685e Merge remote-tracking branch 'origin/onboarding' into onboarding 2014-10-24 13:03:04 +11:00
Rob Harrington
b182c6afc8 Merge in remote changes 2014-10-24 13:02:26 +11:00
summerscope
0d73d8f043 Fix layout add required class 2014-10-24 13:01:56 +11:00
Rob Harrington
498b51cedb Switching out chevron on Change Type button 2014-10-24 12:54:21 +11:00
summerscope
01cb39a93f Error messages specific to use case 2014-10-24 12:54:06 +11:00
summerscope
b172c4fd4f Search query make empty string rather than undefined 2014-10-24 12:53:04 +11:00
summerscope
b3ac06e46c Fix icon type to match nav bar 2014-10-24 12:42:14 +11:00
summerscope
68cb3efc50 Markup fixes for single enterprise dashboard (first state) 2014-10-24 12:39:25 +11:00
summerscope
e32ab7b4b7 Single enterprise dashboard styling 2014-10-24 12:39:08 +11:00
Rob Harrington
d0c3502f27 Adding trial progress bar 2014-10-24 12:32:05 +11:00
summerscope
631386ced4 Tweaking markup 2014-10-24 11:48:53 +11:00
summerscope
982be3a563 Stylesheet for single enterprise user dashboard components 2014-10-24 11:48:39 +11:00
summerscope
76c6c260d1 Add row containers to make grid nesting work 2014-10-24 11:48:13 +11:00
summerscope
0b3e293b38 Remove whitespace, add alert box 2014-10-24 11:26:58 +11:00
Rob Harrington
f40b4d9d03 Different text for CTA button depending on context 2014-10-24 11:22:57 +11:00
Rob Harrington
900ef4ddcc Change type form is aware of existing state of enterprise 2014-10-24 11:12:54 +11:00
Rob Harrington
911d1e3dc4 Add down chevron to change type button on single ent dash 2014-10-24 11:02:48 +11:00
Rob Harrington
f03c7ba02d Rename sellCtrl to changeTypeFormCtrl 2014-10-24 11:02:16 +11:00
summerscope
49a2b774b0 Tweak language in helper 2014-10-24 10:56:03 +11:00
Rob Harrington
f6b0324456 Add change type form to single enterprise dashboard 2014-10-24 10:43:04 +11:00
Rob Harrington
46ab424655 Moving welcomeCrtl to enterprise module as sellsCtrl 2014-10-24 09:10:45 +11:00
Rob Harrington
d2efd25e8d Pull out type change form into a partial 2014-10-24 08:54:08 +11:00
summerscope
3c839be743 Tweak styling for error message to be consistent with other form error styling in admin 2014-10-23 17:24:56 +11:00
summerscope
cf06cab533 Tweak header to be consistent with other admin pages 2014-10-23 17:23:58 +11:00
Rohan Mitchell
9bc8531850 Add comment 2014-10-23 16:48:16 +11:00
Rohan Mitchell
ee5cd599aa Add basic details for the single enterprise dashboard 2014-10-23 16:44:16 +11:00
Rohan Mitchell
aea8ab4c7f Move #manages_one_enterprise? from User model to Permissions 2014-10-23 16:44:16 +11:00
Rob Harrington
e1cf5ceb57 Can set producer_profile_only using welcome page 2014-10-23 16:42:00 +11:00
Rob Harrington
996b2f2604 Adding 'producer_profile_only' flag to enterprises 2014-10-23 16:42:00 +11:00
Rob Harrington
d94ca0174a Registration process sets sells to 'unspecified' 2014-10-23 16:42:00 +11:00
Rohan Mitchell
f09698be47 Select all works on simple order cycles edit interface 2014-10-23 15:54:52 +11:00
Rohan Mitchell
7faf6e12ea Clean up simple order cycle interface 2014-10-23 15:53:16 +11:00
summerscope
4f2327f05c More styling for Next button and error message 2014-10-23 15:46:56 +11:00
Rob Harrington
d50cd023d4 Adding login nav to header on bare_admin layout 2014-10-23 15:38:06 +11:00
summerscope
ce346d3bca Styling stripes with CSS3, remove the image instead 2014-10-23 15:17:33 +11:00
Rob Harrington
e67f039791 Merging in remote changes 2014-10-23 14:53:21 +11:00
Rob Harrington
e9a6c9d0ce Adding header to welcome page 2014-10-23 14:50:56 +11:00
Rob Harrington
67c82e81de Fixing form on welcome page 2014-10-23 14:41:00 +11:00
summerscope
04af954432 Tweak language 2014-10-23 14:33:19 +11:00
Rob Harrington
bcc8198019 Merge in changes on remote branch 2014-10-23 14:30:56 +11:00
summerscope
d6947b119f Welcome markup make alternative markup consistent 2014-10-23 14:28:53 +11:00
summerscope
204c7d9690 Selected state push 2014-10-23 14:26:52 +11:00
Rob Harrington
77c0e36ed6 Adding input validation to welcome page 2014-10-23 14:23:50 +11:00
summerscope
694724d177 Refactoring and styling Welcome screen dashboard admin WIP 2014-10-23 14:23:35 +11:00
summerscope
bf9cd4a12b Tweak image add gradient blur and slightly less dark 2014-10-23 14:23:23 +11:00
summerscope
f5aae7d214 Pretty stripy background tile 2014-10-23 14:23:04 +11:00
Rohan Mitchell
bf61d12bfa Merge branch 'simple-order-cycles'
Conflicts:
	app/views/admin/order_cycles/_row.html.haml
2014-10-23 12:11:34 +11:00
Rob Harrington
7d9c5f9e2c Adding form elements for submission of sells preferences on welcome page 2014-10-23 11:40:11 +11:00
Rob Harrington
b11c291df1 Add set_sells controller action for enterprises 2014-10-23 11:39:33 +11:00
Rob Harrington
5a837226a4 Route set_sells through put rather than post 2014-10-23 11:38:51 +11:00
Rohan Mitchell
ab76c66b68 Admin can update order cycles with simple interface 2014-10-23 11:38:15 +11:00
Rohan Mitchell
f7c1340f99 Admin can view an order cycle in the simple edit form 2014-10-23 11:08:27 +11:00
summerscope
2f045203ab Styling welcome page WIP 2014-10-23 10:56:40 +11:00
summerscope
842e239893 Make selector containers anchors 2014-10-23 10:56:30 +11:00
Rob Harrington
2e0d5eb829 Adding set_sells action to enterprises 2014-10-23 10:27:53 +11:00
Rohan Mitchell
56ebe688dc Fix file naming 2014-10-23 10:22:03 +11:00
Rohan Mitchell
8b616e7d17 Add unit spec for order cycles simple create controller 2014-10-23 10:21:19 +11:00
Rohan Mitchell
2ad823a79d Fix JS specs 2014-10-23 09:39:23 +11:00
Rohan Mitchell
94e1995469 Merge branch 'master' into simple-order-cycles 2014-10-23 09:36:03 +11:00
Rohan Mitchell
f74ec03cef Rename 2014-10-23 09:26:55 +11:00
Rohan Mitchell
66e13d40f4 Select all works on simple order cycles interface 2014-10-22 19:17:28 +11:00
Rob Harrington
f60a9d7bd5 Fiddling with styling 2014-10-22 19:13:17 +11:00
Rohan Mitchell
d47db903fb Add basic styling to simple order cycle interface 2014-10-22 19:12:51 +11:00
Rob Harrington
262972a911 Adding basic angular to welcome form 2014-10-22 19:02:39 +11:00
Rob Harrington
fef97314cb Adding basic layout of welcome page for new users 2014-10-22 18:26:18 +11:00
Rafael Schouten
069b9ce91d fix email length validation spec 2014-10-22 17:49:44 +11:00
Rohan Mitchell
3e61aa7267 Simple interface remove coordinator fee 2014-10-22 17:26:22 +11:00
Rafael Schouten
69614d6cf1 fix accordion jumps 2014-10-22 17:23:06 +11:00
Rohan Mitchell
28352be729 Save pickup time and instructions 2014-10-22 17:17:05 +11:00
Rohan Mitchell
549ef4b79d When saving an OC from the simple interface, include outgoing variants 2014-10-22 17:08:16 +11:00
Rohan Mitchell
8fb95769bf Fix tested values in spec 2014-10-22 17:07:45 +11:00
Rob Harrington
7113875a45 Adding welcome page to overview controller 2014-10-22 16:49:32 +11:00
Rob Harrington
8120023094 Fixing indentation 2014-10-22 16:33:43 +11:00
Rob Harrington
82d33332ab Adding shop_trial_start_date column to enterprises 2014-10-22 16:11:51 +11:00
Rob Harrington
ecaa2e6a51 Pull out override of 'visible' flag in enterprise serialiser 2014-10-22 15:53:25 +11:00
Rob Harrington
45ed3a4cff Only pushes activated enterprises through to the frontend 2014-10-22 15:39:49 +11:00
Rafael Schouten
2b86647281 Merge branch 'master' into bugfix 2014-10-22 15:35:00 +11:00
Rafael Schouten
96ff387d1f fix navigation check on submission 2014-10-22 15:34:31 +11:00
Rob Harrington
565d6739b3 Add 'activated' scope to enterprises 2014-10-22 15:13:52 +11:00
Rafael Schouten
a53cbb677d fix report typos 2014-10-22 14:55:01 +11:00
Rafael Schouten
afa6119ec1 better coverage for enterprise abilities, hide products from non producers 2014-10-22 14:53:20 +11:00
Rafael Schouten
175e430a2b uss oop for nav check 2014-10-22 14:51:17 +11:00
Rob Harrington
6798d394bb Use unspecified rather than unconfirmed 2014-10-22 14:50:22 +11:00
Rob Harrington
7ff4306991 Adding 'unspecified' option to 'sells' on Enterprise 2014-10-22 13:13:21 +11:00
Rob Harrington
3d938b3450 Shifting dashboard rendering from partials to templates 2014-10-22 12:30:07 +11:00
Rob Harrington
8bf472e970 Split dashboard into single and multiple enterprise views 2014-10-22 12:21:25 +11:00
Rohan Mitchell
b75af8d9ff Fix sells column coming out all 'none' 2014-10-22 10:49:23 +11:00
Rohan Mitchell
4308f7d09c Revert "use sql for migration"
This reverts commit fec8f08966.
2014-10-22 09:43:10 +11:00
Rafael Schouten
89ce4ba632 Merge branch 'master' into bugfix
Conflicts:
	app/models/enterprise.rb
2014-10-21 08:51:23 +11:00
Rafael Schouten
fec8f08966 use sql for migration 2014-10-18 16:17:29 +11:00
Rafael Schouten
78b0e02ffe Merge branch 'master' of https://github.com/openfoodfoundation/openfoodnetwork 2014-10-18 16:03:04 +11:00
Rafael Schouten
9e0f8100d9 only producers have product permissions 2014-10-18 08:28:08 +11:00
Rafael Schouten
08cd273be3 Merge branch 'migrate_ent_types' into bugfix
Conflicts:
	app/models/spree/ability_decorator.rb
2014-10-18 07:37:41 +11:00
Rafael Schouten
2a7dd8b8f1 update ability specs for reports 2014-10-18 06:53:38 +11:00
Rafael Schouten
b71a40ae6d show all permitted enterprises in order cycle summery 2014-10-18 03:26:57 +11:00
Rafael Schouten
87cc1d6217 create db/backup folder if it dosnt exist 2014-10-18 01:43:19 +11:00
Rafael Schouten
577cb06371 make navCallback actually versatile 2014-10-18 01:42:29 +11:00
Rob Harrington
361116a9ec Explicitly set confirmed_at for unconfirmed enterprise 2014-10-17 18:31:35 +11:00
Rob Harrington
cae8d566df Explicit confirmed_at to ensure that confirmation emails are sent 2014-10-17 17:49:18 +11:00
Rob Harrington
f499cc375b Adding confirmed_at to enterprise factory 2014-10-17 17:32:27 +11:00
Rob Harrington
338ba74652 Only show enterprise partial when no enterprises exist 2014-10-17 17:15:49 +11:00
Rob Harrington
5b3ff9160d Fix Registration spec 2014-10-17 17:15:16 +11:00
Rohan Mitchell
deedafde9a WIP: Simple order cycle form loads and displays correct info 2014-10-17 16:55:55 +11:00
Rohan Mitchell
d8b648d531 Extract name and timing form from order cycles 2014-10-17 16:51:03 +11:00
Rohan Mitchell
078d2bac11 Extract factories from order cycles admin angular 2014-10-17 16:50:16 +11:00
Rob Harrington
e24a774d54 Adding schema 2014-10-17 16:16:17 +11:00
Rob Harrington
4d078feea2 Add default scope to devise to stop it from checking other devise enabled models (in this case :enterprise) 2014-10-17 16:12:51 +11:00
Rohan Mitchell
f060da9c8d Rename angular app order_cycle -> admin.order_cycles 2014-10-17 14:13:27 +11:00
Rob Harrington
b2565991e6 Merge branch 'master' into reg_and_ent_types 2014-10-17 12:33:21 +11:00
Rob Harrington
eda0b16a5f Make state abbreviations upper case 2014-10-17 12:29:51 +11:00
Rob Harrington
e9a3f8ce91 Require user to choose producer or not 2014-10-17 12:29:51 +11:00
Rob Harrington
a6bc9e66f6 Only send one enterprise creation confirmation email 2014-10-17 12:29:51 +11:00
summerscope
b671543a95 Style and make pretty the finished step of profile creation 2014-10-17 12:25:04 +11:00
summerscope
4abc59f66d Change styling on the enterprise name because we dont know what type it is yet 2014-10-17 12:02:21 +11:00
summerscope
4aa2aa5aee Tweaking layout, text, styling for registration box 2014-10-17 11:56:25 +11:00
summerscope
2c5208ce6b Change ent type page, simplify! 2014-10-17 11:17:53 +11:00
Rob Harrington
81715aaf5d Remove unrequired store registration action 2014-10-17 11:01:39 +11:00
Rob Harrington
c4d47ccc20 Change enterprise attributes defined in reg controller 2014-10-17 11:01:38 +11:00
Rohan Mitchell
694dd0c329 Enterprise user selling own produce only sees simple order cycle listing 2014-10-17 10:52:36 +11:00
summerscope
4884734ab5 Align Continue buttons right consistently 2014-10-17 10:43:19 +11:00
Rob Harrington
28807d4f4d Merge migrate_ent_types into reg 2014-10-17 10:20:48 +11:00
Rob Harrington
6a6f603754 Correct syntax for update column 2014-10-17 10:03:34 +11:00
Rafael Schouten
2e3cb171a3 don't remove indexes after you remove one of their columns! 2014-10-17 08:22:52 +11:00
Rafael Schouten
b853f908d3 bugfix email dummy 2014-10-17 08:08:10 +11:00
Rafael Schouten
1a40c83a48 update chema with indexes 2014-10-17 07:59:51 +11:00
Rafael Schouten
9536b3e764 add navigation directive default 2014-10-17 07:58:08 +11:00
Rafael Schouten
f1280a31a6 Merge branch 'reports' into bugfix 2014-10-17 07:41:30 +11:00
Rafael Schouten
245c1eb305 use a directive for navigation check to attach it to the page instead of the controller 2014-10-17 07:40:08 +11:00
Rafael Schouten
bda1eafcec add migrating for dummy emails 2014-10-17 06:37:22 +11:00
Rafael Schouten
dd3101f27a remove some bangs 2014-10-17 06:14:39 +11:00
Rafael Schouten
45b0581b7b Merge branch 'master' into bugfix 2014-10-17 05:35:10 +11:00
Rafael Schouten
3234bc328f Merge branch 'master' into reports 2014-10-17 04:02:29 +11:00
Rafael Schouten
4defb38cf4 update karma config 2014-10-17 04:01:36 +11:00
Rafael Schouten
1150e69500 fix visible bug 2014-10-17 03:59:48 +11:00
Rob Harrington
c7145f8dcd Merge branch 'reg' of github.com:openfoodfoundation/openfoodnetwork into reg 2014-10-16 16:53:34 +11:00
Rafael Schouten
6fd9741daf use build instead of create, and reorganise code 2014-10-16 16:51:09 +11:00
Rafael Schouten
a1d74649f3 rename spec and clear todo 2014-10-16 16:50:19 +11:00
Rafael Schouten
f145db46f1 use self.x 2014-10-16 16:49:49 +11:00
Rafael Schouten
1b0000a1de use bangs 2014-10-16 16:48:01 +11:00
summerscope
8d01bb7ebf Pretty responsive email template!!!!!!!! 2014-10-16 16:45:15 +11:00
Rafael Schouten
425105174e return space remover 2014-10-16 16:26:50 +11:00
Rafael Schouten
c5afd8cebf move visible filter to pages, and use category 2014-10-16 16:26:50 +11:00
Rafael Schouten
027189ac3c rename check methods 2014-10-16 16:26:49 +11:00
Rafael Schouten
f0a3296e52 change enterprise category name ans use symbols instead of strings 2014-10-16 16:26:49 +11:00
Rob Harrington
7db68795a4 Redirect to admin root after confirmation 2014-10-16 16:06:54 +11:00
Rafael Schouten
2e8417d9e8 bugfix migration and add indexes 2014-10-16 16:05:07 +11:00
Rohan Mitchell
0e03b5f209 Admin can change the format that Spree::Images are stored/served in 2014-10-16 12:41:11 +11:00
Rohan Mitchell
7e23479f3a Consistency 2014-10-16 12:08:12 +11:00
Rob Harrington
a6480e6831 Merge in enterprise confirmation 2014-10-16 11:52:10 +11:00
Rob Harrington
63e50dc88c Fiddle with alert styling 2014-10-16 11:34:06 +11:00
Rafael Schouten
fd7191f476 add missing orders_and_distributors perm 2014-10-16 05:26:38 +11:00
Rafael Schouten
9343c3608b allow supplier enterprise manager to see bulk coop reports 2014-10-16 04:29:33 +11:00
Rafael Schouten
1577c01a77 add reports abilities specs 2014-10-16 04:29:33 +11:00
Rafael Schouten
46df14c0d9 refator reports controller a little 2014-10-16 04:29:33 +11:00
Rafael Schouten
e44fed2ff0 add authorization to reports listings on index page 2014-10-16 04:29:33 +11:00
Rafael Schouten
0d715ce615 split report permissions 2014-10-16 04:29:16 +11:00
Rob Harrington
96878f5dcb Don't require confirmation for enterprises where the email address has already been confirmed for another enterprise 2014-10-15 17:22:56 +11:00
Rob Harrington
20cb11a298 Update registration spec 2014-10-15 16:28:52 +11:00
Rob Harrington
0940af6b66 Remove bad pry 2014-10-15 16:21:11 +11:00
Rob Harrington
e0e8ba814f Show explanation of confirm process on final page of registration 2014-10-15 16:20:45 +11:00
Rob Harrington
c59662758c Add alerts for unconfirmed enterprises to overview page 2014-10-15 15:46:21 +11:00
Rob Harrington
c76a3815c0 Add unconfirmed scope 2014-10-15 15:45:47 +11:00
Rob Harrington
1bdc55cb33 Adding confirmed scope to enterprises 2014-10-15 13:03:39 +11:00
Rob Harrington
56f4d5af0f Visibility in the front end is contingent upon enterprise being confirmed 2014-10-15 12:27:55 +11:00
Rob Harrington
6e699b2e8b Mailer tests 2014-10-15 11:52:04 +11:00
Rob Harrington
908c242d36 Confirmation email when creating enterprise 2014-10-15 10:48:05 +11:00
Rafael Schouten
5e41865871 add utils angular module and navigation check factory 2014-10-14 00:26:04 +11:00
Rafael Schouten
5dd9879b96 validate description max lenth 2014-10-12 21:57:01 +11:00
Rafael Schouten
01c179856a set maxlength for short description field 2014-10-12 21:19:59 +11:00
Rafael Schouten
9a6958573a Merge branch 'master' into bugfix
Conflicts:
	app/assets/javascripts/admin/enterprises/controllers/enterprise_controller.js.coffee
2014-10-12 21:19:02 +11:00
summerscope
a4e72f6fbc Making the header more semantically meaningful for HTML5. Add in row to make spacing consistent. Steps bar moves to top 2014-10-10 18:20:38 +11:00
summerscope
89a51bf1da Adjustments to layout, responsive logic, simplify column structure 2014-10-10 18:19:42 +11:00
summerscope
d4318263f6 Registration modals styling WIP 2014-10-10 18:18:33 +11:00
Rafael Schouten
3ad7165fd6 add checkout subbmission directive 2014-10-10 17:53:28 +11:00
Rob Harrington
b8b19368df WIP: Making enterprise emails confirmable 2014-10-10 16:54:38 +11:00
Rohan Mitchell
d5ea2a0206 Make Enterprise and EnterpriseGroup promo images jpg format 2014-10-10 15:40:05 +11:00
Rafael Schouten
01aa8cb761 Use serialiser instead of rabl for current order injection 2014-10-10 15:30:53 +11:00
Rafael Schouten
b68754d634 put payment description in panel 2014-10-10 15:22:21 +11:00
Rob Harrington
9b275cc5f0 WIP: Shuffling around order of cards in registration 2014-10-09 17:26:31 +11:00
Rob Harrington
d1e3f74c03 Add loading gif to image uploaders 2014-10-09 15:56:54 +11:00
Rob Harrington
fc3a132c12 Closing auth dialog on pages other than home returns the user to home 2014-10-09 13:46:32 +11:00
Rob Harrington
31c4aad9e1 JS for closing alerts works 2014-10-09 13:21:30 +11:00
Rob Harrington
49c8e2f8cb Remove used styling for inline flash 2014-10-09 13:16:09 +11:00
Rob Harrington
83f9867632 Move registration login into own folder, reinstate ofn-inline-alert 2014-10-09 13:15:19 +11:00
Rob Harrington
65ac9d7226 Merge branch 'master' into reg 2014-10-09 09:26:17 +11:00
Rafael Schouten
e7b847542f bugfix tab selection 2014-10-08 01:59:56 +11:00
Rafael Schouten
20a94b4365 Merge branch 'master' into migrate_ent_types
Conflicts:
	app/serializers/api/admin/enterprise_serializer.rb
2014-10-07 10:52:26 +11:00
Rafael Schouten
9b6db2bff4 simplify tab selection 2014-10-07 10:49:57 +11:00
Rafael Schouten
6fc36a3e6c swap redundant producer modal for general enterprise modal 2014-10-07 10:48:04 +11:00
Rafael Schouten
e476324c60 fix for_order_cycle test 2014-10-07 00:22:45 +11:00
Rafael Schouten
ec6805f573 use shared partial for no results 2014-10-06 23:51:19 +11:00
Rafael Schouten
7805d46743 more angular documentation 2014-10-06 23:20:43 +11:00
Rafael Schouten
881e82e825 add some angular documentation 2014-10-06 22:59:06 +11:00
Rafael Schouten
2ae325455a fix producer taxon filtering bug 2014-10-06 22:58:48 +11:00
Rafael Schouten
922e335e83 add is_hub to model 2014-10-06 15:42:23 +11:00
Rafael Schouten
cc6af82823 move reports abilitiy to can manage products block, producers need to use this too 2014-10-06 15:40:41 +11:00
Rafael Schouten
76e170eb3a move icons into cached, for now 2014-10-06 10:44:49 +11:00
Rafael Schouten
c495e967cb bugfix and extend angular enterprise spec 2014-10-06 01:36:18 +11:00
Rafael Schouten
017d6b1273 move for order cycles permission, for now, but needs review 2014-10-06 01:35:46 +11:00
Rafael Schouten
9eb770aed7 fix sidebar show/hide 2014-10-05 01:44:40 +10:00
Rafael Schouten
2f76a7ba80 add comment for hub sells own case 2014-10-05 01:44:12 +10:00
Rafael Schouten
58c39b340d remove duplicate default value assignment 2014-10-05 01:43:50 +10:00
Rafael Schouten
f0c9e7cd44 fix for tests, remove open in new tab 2014-10-04 13:12:36 +10:00
Rafael Schouten
f3fc70ebf0 Merge branch 'master' into raf_bugfix
Conflicts:
	app/assets/stylesheets/admin/openfoodnetwork.css.scss
2014-10-04 12:51:55 +10:00
Rafael Schouten
884c111240 fix failing tests 2014-10-04 11:56:35 +10:00
Rafael Schouten
698126edb2 specifify visible enterprises in tests 2014-10-04 01:01:04 +10:00
Rafael Schouten
b3482a087b separate enterprises from visible enterprises 2014-10-04 01:00:37 +10:00
Rafael Schouten
a552fb18da style profile check 2014-10-04 01:00:02 +10:00
Rafael Schouten
2670d2b0ad cleanup serializer 2014-10-04 00:59:41 +10:00
Rafael Schouten
01063367c4 clickable show profiles label 2014-10-04 00:59:17 +10:00
Rafael Schouten
a0494b136f test that email is validated 2014-10-03 17:32:04 +10:00
Rafael Schouten
c088c47a49 add email to enterprise params 2014-10-03 17:31:46 +10:00
Rafael Schouten
77e354f9f6 Merge branch 'master' into wys 2014-10-03 16:47:11 +10:00
Rafael Schouten
dee471b1c7 move text angular files 2014-10-03 16:43:56 +10:00
Rafael Schouten
bdd9e19efe specs - add text angular dep and long descrioption provider 2014-10-03 16:42:37 +10:00
Rafael Schouten
34ceb9c226 style text box 2014-10-03 16:06:15 +10:00
Rafael Schouten
bb24e1ce88 sanitize long_description html before injection 2014-10-03 16:06:04 +10:00
Rafael Schouten
e75a964703 Merge branch 'master' into raf_bugfix 2014-10-03 14:26:08 +10:00
Rafael Schouten
8805079faa use attubutes instead of save! 2014-10-03 14:03:34 +10:00
Rafael Schouten
7313aecd19 add route checking, not working yet... 2014-10-03 12:19:58 +10:00
Rafael Schouten
929839cb9f hide configuration on 2014-10-03 11:46:00 +10:00
Rafael Schouten
d707ba1a70 remove nokugiri from gemfile.lock 2014-10-02 19:08:37 +10:00
Rafael Schouten
ff4f8f63af Merge branch 'master' into raf_bugfix
Conflicts:
	app/views/spree/order_mailer/confirm_email.text.haml
2014-10-02 19:06:30 +10:00
Rafael Schouten
b3520c4385 Bugfix for specs 2014-10-02 16:49:32 +10:00
Rafael Schouten
526ab8b80f use is_distributor bool 2014-10-02 16:28:01 +10:00
Rafael Schouten
f29898886d return basic css and js for oldskool login that somehow still exists 2014-10-02 13:24:59 +10:00
Rafael Schouten
1e84e4fa85 own and any instead of single and full for abilities 2014-10-02 13:11:19 +10:00
Rafael Schouten
ce9b132ab5 only show visible enterprises 2014-10-02 13:10:46 +10:00
Rob Harrington
5f4b2a752b Product controller loads correct data for create and update actions 2014-10-02 12:32:26 +10:00
Rafael Schouten
4c1fc5671f Minor fixes 2014-10-02 10:43:17 +10:00
Rafael Schouten
e62e87549a commit this elsewhere 2014-10-02 10:41:43 +10:00
Rafael Schouten
62f7114fa1 Merge branch 'cleanup' into migrate_ent_types
Conflicts:
	app/views/home/_hubs.html.haml
2014-10-02 10:02:08 +10:00
Rafael Schouten
47dc001735 merge has_shopfront and is_distibutor 2014-10-01 20:27:53 +10:00
Rafael Schouten
3877bed62b use enterprise modal 2014-10-01 18:51:49 +10:00
Rafael Schouten
ccdcf16cec rename file 2014-10-01 18:47:50 +10:00
Rafael Schouten
54b138b2cc add transclusion to modal directive by default 2014-10-01 18:47:22 +10:00
Rafael Schouten
412bf8f638 cleanup gemfile 2014-10-01 17:16:09 +10:00
Rafael Schouten
b647f9382f revert included file 2014-10-01 17:11:00 +10:00
Rafael Schouten
56a9658b14 update ability spec 2014-10-01 16:55:41 +10:00
Rafael Schouten
47991f192e tweak migration 2014-10-01 16:49:47 +10:00
Rafael Schouten
4fde0ad2d7 Merge branch 'master' into migrate_ent_types 2014-10-01 16:11:20 +10:00
Rafael Schouten
1ec4f2e456 Merge branch 'ent_types_frontend' into migrate_ent_types
Conflicts:
	app/models/enterprise.rb
2014-10-01 16:10:43 +10:00
Rafael Schouten
3a14a26bc6 refactor wysiwyg 2014-10-01 16:07:10 +10:00
Rafael Schouten
fa41f6dc40 add rollback to migration 2014-10-01 13:02:21 +10:00
Rob Harrington
5497f229e1 Ignoring enterprise ownership before_validations when no owner set 2014-10-01 11:49:46 +10:00
Rafael Schouten
206c8da0ba remove unused css* 2014-09-30 23:53:45 +10:00
Rafael Schouten
a2dff2305f space in order confirm mailer 2014-09-30 19:39:56 +10:00
Rafael Schouten
726340fc86 configure textAngular on enterprise edit page 2014-09-30 18:20:45 +10:00
Rafael Schouten
823923f828 add textAngular javascript 2014-09-30 15:09:43 +10:00
Rafael Schouten
a49991c696 set abilities tests to pending, need to discuss further 2014-09-28 22:55:49 +10:00
Rafael Schouten
dc7c9ea272 commit updated schema 2014-09-28 22:37:26 +10:00
Rafael Schouten
58f13a3e06 update migration 2014-09-28 12:57:27 +10:00
Rafael Schouten
5c0d846643 bugfix sells and is_distributor specs and code 2014-09-28 11:55:46 +10:00
Rafael Schouten
b821107c27 bugfix migration ad specs 2014-09-27 18:14:10 +10:00
Rafael Schouten
beb85e862a get type > sells migration mostly working 2014-09-27 15:21:27 +10:00
Rafael Schouten
dee869a273 move checks and links in sidebars 2014-09-26 17:58:00 +10:00
summerscope
0c99007323 Tweak the modal styling for register modals 2014-09-26 17:45:15 +10:00
summerscope
c91d707806 Merge branch 'master' into ent_types_frontend 2014-09-26 15:07:30 +10:00
summerscope
3adf571c1f Style the modal headers 2014-09-26 14:55:41 +10:00
summerscope
c43b8abcbc Changing the markup to give a class where is a producer 2014-09-26 14:55:41 +10:00
Rafael Schouten
3406f926fc fix enterprsie model logic 2014-09-26 14:48:37 +10:00
Rafael Schouten
e480d3a135 rearrange admin sidebars 2014-09-26 13:06:29 +10:00
summerscope
c1460afaee Tweak language around the long description 2014-09-26 12:07:58 +10:00
summerscope
a73541da71 Change styling for register modals 2014-09-26 12:07:38 +10:00
Rafael Schouten
ceb978783c update missed taxon selector filter 2014-09-26 00:25:19 +10:00
Rafael Schouten
4b576d1590 refactor enterprise specs 2014-09-26 00:15:33 +10:00
Rafael Schouten
04c5dff497 fixup merge 2014-09-25 19:47:00 +10:00
Rafael Schouten
55f4415c0d Merge branch 'master' into cleanup
Conflicts:
	app/assets/javascripts/darkswarm/services/hubs.js.coffee
	app/views/home/_hubs.html.haml
	app/views/producers/_filters.html.haml
	app/views/producers/index.html.haml
2014-09-25 19:42:20 +10:00
Rafael Schouten
6069127733 validate contact email 2014-09-25 15:16:50 +10:00
Rafael Schouten
afd0f76d9e Merge branch 'master' into bugfix 2014-09-25 14:23:46 +10:00
Rafael Schouten
bab9123ca8 delete unused javascript 2014-09-25 14:01:06 +10:00
Rafael Schouten
096324cf5e bugfix filters 2014-09-25 13:46:08 +10:00
Rafael Schouten
0e2774882f dry enterprise angular 2014-09-25 13:06:02 +10:00
Rafael Schouten
3775cd29cb generalise search filter to any enterprise 2014-09-25 11:34:49 +10:00
Rafael Schouten
a058af8211 open products in new tab 2014-09-24 17:00:12 +10:00
Rafael Schouten
139da3ac7a outline inputs with errors 2014-09-24 16:59:57 +10:00
Rafael Schouten
a5680e611e add example yml 2014-09-17 12:05:28 +10:00
Rafael Schouten
15bfe75313 ifnore figaro 2014-09-16 00:21:10 +10:00
Rafael Schouten
9448e1cbe4 add figaro env config 2014-09-16 00:13:43 +10:00
Maikel Linke
ef639b9535 Adjusting columns for 16 column layout.
Removed the 1col spacer column and extended the fieldsets to 12col.
2014-08-28 17:06:26 +10:00
Maikel Linke
a379f88add making asterisk 10% bigger 2014-08-28 16:41:10 +10:00
Maikel Linke
a0d6ec988e make asterisk red 2014-08-28 16:38:44 +10:00
Maikel Linke
8da98ce19c Adding asterisks to required fields.
Addressing BugHerd #454.
2014-08-28 16:26:30 +10:00
625 changed files with 14024 additions and 6274 deletions

4
.gitignore vendored
View File

@@ -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

2
.mailmap Normal file
View File

@@ -0,0 +1,2 @@
Rob Harrington <oeoeaio@gmail.com>
Laura Summers <summerscope@gmail.com>

2
.rspec
View File

@@ -1,2 +1,2 @@
--colour
--profile
--format Fuubar

View File

@@ -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

15
Gemfile
View File

@@ -1,11 +1,13 @@
source 'https://rubygems.org'
ruby "1.9.3"
gem 'rails', '3.2.19'
gem 'rails', '3.2.21'
gem 'rails-i18n', '~> 3.0.0'
gem 'i18n', '~> 0.6.11'
gem 'pg'
gem 'spree', :github => 'openfoodfoundation/spree', :branch => '1-3-stable'
gem 'spree_i18n', :github => 'spree/spree_i18n'
gem 'spree_i18n', :github => 'spree/spree_i18n', :branch => '1-3-stable'
gem 'spree_auth_devise', :github => 'spree/spree_auth_devise', :branch => '1-3-stable'
# Waiting on merge of PR #117
@@ -20,7 +22,7 @@ gem 'comfortable_mexican_sofa'
gem 'simple_form', :github => 'RohanM/simple_form'
gem 'unicorn'
gem 'angularjs-rails'
gem 'angularjs-rails', '1.2.13'
gem 'bugsnag'
gem 'newrelic_rpm'
gem 'haml'
@@ -43,6 +45,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'
@@ -75,6 +79,7 @@ gem 'jquery-rails'
group :test, :development do
# Pretty printed test output
gem 'turn', '~> 0.8.3', :require => false
gem 'fuubar'
gem 'rspec-rails'
gem 'shoulda-matchers'
gem 'factory_girl_rails', :require => false
@@ -91,7 +96,9 @@ end
group :test do
gem 'webmock'
gem 'perftools.rb'
# See spec/spec_helper.rb for instructions
#gem 'perftools.rb'
end
group :development do

View File

@@ -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)
@@ -86,11 +86,13 @@ GIT
GIT
remote: git://github.com/spree/spree_i18n.git
revision: a96bee02340e008e60549295a4f09e047fd2e628
revision: 752eb67204e9c5a4e22b62591a8fd55fe2285e43
branch: 1-3-stable
specs:
spree_i18n (1.0.0)
i18n (~> 0.5)
spree (~> 1.1)
rails-i18n
spree_core (>= 1.1)
GIT
remote: git://github.com/willrjmarshall/foundation_rails_helper.git
@@ -105,12 +107,12 @@ GIT
GEM
remote: https://rubygems.org/
specs:
actionmailer (3.2.19)
actionpack (= 3.2.19)
actionmailer (3.2.21)
actionpack (= 3.2.21)
mail (~> 2.5.4)
actionpack (3.2.19)
activemodel (= 3.2.19)
activesupport (= 3.2.19)
actionpack (3.2.21)
activemodel (= 3.2.21)
activesupport (= 3.2.21)
builder (~> 3.0.0)
erubis (~> 2.7.0)
journey (~> 1.0.4)
@@ -121,29 +123,23 @@ GEM
active_link_to (1.0.0)
active_model_serializers (0.8.1)
activemodel (>= 3.0)
active_utils (2.2.1)
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.46.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)
i18n (>= 0.6.9)
nokogiri (~> 1.4)
activemodel (3.2.19)
activesupport (= 3.2.19)
activemodel (3.2.21)
activesupport (= 3.2.21)
builder (~> 3.0.0)
activerecord (3.2.19)
activemodel (= 3.2.19)
activesupport (= 3.2.19)
activerecord (3.2.21)
activemodel (= 3.2.21)
activesupport (= 3.2.21)
arel (~> 3.0.2)
tzinfo (~> 0.3.29)
activeresource (3.2.19)
activemodel (= 3.2.19)
activesupport (= 3.2.19)
activesupport (3.2.19)
activeresource (3.2.21)
activemodel (= 3.2.21)
activesupport (= 3.2.21)
activesupport (3.2.21)
i18n (~> 0.6, >= 0.6.4)
multi_json (~> 1.0)
acts_as_list (0.1.4)
@@ -185,7 +181,7 @@ GEM
climate_control (0.0.3)
activesupport (>= 3.0)
cliver (0.3.2)
cocaine (0.5.4)
cocaine (0.5.5)
climate_control (>= 0.0.3, < 1.0)
coderay (1.0.9)
coffee-rails (3.2.2)
@@ -195,7 +191,7 @@ GEM
coffee-script-source
execjs
coffee-script-source (1.3.3)
colorize (0.7.3)
colorize (0.7.5)
columnize (0.3.6)
comfortable_mexican_sofa (1.6.24)
active_link_to (~> 1.0.0)
@@ -209,6 +205,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 +242,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)
@@ -264,6 +265,9 @@ GEM
railties (>= 3.1.0)
sass (>= 3.2.0)
fssm (0.2.10)
fuubar (1.3.3)
rspec (>= 2.14.0, < 3.1.0)
ruby-progressbar (~> 1.4)
geocoder (1.1.8)
gmaps4rails (1.5.6)
guard (2.2.4)
@@ -292,7 +296,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)
@@ -300,7 +304,7 @@ GEM
jquery-rails (2.2.2)
railties (>= 3.0, < 5.0)
thor (>= 0.14, < 2.0)
json (1.8.1)
json (1.8.2)
json_spec (1.1.1)
multi_json (~> 1.0)
rspec (~> 2.0)
@@ -321,9 +325,9 @@ GEM
mail (2.5.4)
mime-types (~> 1.16)
treetop (~> 1.4.8)
method_source (0.8.1)
method_source (0.8.2)
mime-types (1.25.1)
mini_portile (0.6.0)
mini_portile (0.6.2)
momentjs-rails (2.5.1)
railties (>= 3.1)
money (5.1.1)
@@ -334,21 +338,20 @@ 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.6.2)
mini_portile (~> 0.6.0)
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)
@@ -375,25 +378,28 @@ GEM
rack
rack-ssl (1.3.4)
rack
rack-test (0.6.2)
rack-test (0.6.3)
rack (>= 1.0)
rails (3.2.19)
actionmailer (= 3.2.19)
actionpack (= 3.2.19)
activerecord (= 3.2.19)
activeresource (= 3.2.19)
activesupport (= 3.2.19)
rails (3.2.21)
actionmailer (= 3.2.21)
actionpack (= 3.2.21)
activerecord (= 3.2.21)
activeresource (= 3.2.21)
activesupport (= 3.2.21)
bundler (~> 1.0)
railties (= 3.2.19)
railties (3.2.19)
actionpack (= 3.2.19)
activesupport (= 3.2.19)
railties (= 3.2.21)
rails-i18n (3.0.1)
i18n (~> 0.5)
rails (>= 3.0.0, < 4.0.0)
railties (3.2.21)
actionpack (= 3.2.21)
activesupport (= 3.2.21)
rack-ssl (~> 1.3.2)
rake (>= 0.8.7)
rdoc (~> 3.4)
thor (>= 0.14.6, < 2.0)
raindrops (0.9.0)
rake (10.3.2)
rake (10.4.2)
ransack (0.7.2)
actionpack (~> 3.0)
activerecord (~> 3.0)
@@ -412,6 +418,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)
@@ -428,6 +440,7 @@ GEM
rspec-expectations (~> 2.14.0)
rspec-mocks (~> 2.14.0)
ruby-hmac (0.4.0)
ruby-progressbar (1.7.1)
safe_yaml (0.9.5)
sass (3.2.19)
sass-rails (3.2.6)
@@ -445,7 +458,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 +481,7 @@ GEM
sprockets (>= 2.0.0)
turn (0.8.3)
ansi
tzinfo (0.3.39)
tzinfo (0.3.43)
uglifier (1.2.4)
execjs (>= 0.3.0)
multi_json (>= 1.0.2)
@@ -479,7 +492,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)
@@ -496,7 +509,7 @@ GEM
xml-simple (1.1.4)
xpath (2.0.0)
nokogiri (~> 1.3)
zeus (0.13.3)
zeus (0.15.4)
method_source (>= 0.6.7)
PLATFORMS
@@ -507,7 +520,7 @@ DEPENDENCIES
andand
angular-rails-templates
angularjs-file-upload-rails (~> 1.1.0)
angularjs-rails
angularjs-rails (= 1.2.13)
awesome_print
aws-sdk
bugsnag
@@ -522,10 +535,12 @@ DEPENDENCIES
debugger-linecache
deface!
factory_girl_rails
figaro
foreigner
foundation-icons-sass-rails
foundation-rails
foundation_rails_helper!
fuubar
geocoder
gmaps4rails
guard
@@ -534,6 +549,7 @@ DEPENDENCIES
guard-rspec
guard-zeus
haml
i18n (~> 0.6.11)
immigrant
jquery-rails
json_spec
@@ -542,15 +558,16 @@ DEPENDENCIES
newrelic_rpm
oj
paperclip
perftools.rb
pg
poltergeist
pry-debugger
rabl
rack-livereload
rack-ssl
rails (= 3.2.19)
rails (= 3.2.21)
rails-i18n (~> 3.0.0)
representative_view
roadie-rails (~> 1.0.3)
rspec-rails
sass (~> 3.2)
sass-rails (~> 3.2.3)

View File

@@ -48,11 +48,16 @@ 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:
rake db:schema:load db:seed
cp config/application.yml.example config/application.yml
edit config/application.yml
Load some default data for your environment
Create the development and test databases, using the settings specified in `config/database.yml`, and populate them with a schema and seed data:
rake db:setup
Load some default data for your environment:
rake openfoodnetwork:dev:load_sample_data
@@ -65,7 +70,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,8 +91,8 @@ 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
Copyright (c) 2012 - 2013 Open Food Foundation, released under the AGPL licence.
Copyright (c) 2012 - 2015 Open Food Foundation, released under the AGPL licence.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View 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">&gt;</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

View File

@@ -0,0 +1,55 @@
<!-- By Sam Herbert (@sherb), for everyone. More @ http://goo.gl/7AJzbL -->
<svg width="58" height="58" viewBox="0 0 58 58" xmlns="http://www.w3.org/2000/svg">
<g fill="none" fill-rule="evenodd">
<g transform="translate(2 1)" stroke="#0096ad" stroke-width="1.5">
<circle cx="42.601" cy="11.462" r="5" fill-opacity="1" fill="#0096ad">
<animate attributeName="fill-opacity"
begin="0s" dur="1.3s"
values="1;0;0;0;0;0;0;0" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="49.063" cy="27.063" r="5" fill-opacity="0" fill="#0096ad">
<animate attributeName="fill-opacity"
begin="0s" dur="1.3s"
values="0;1;0;0;0;0;0;0" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="42.601" cy="42.663" r="5" fill-opacity="0" fill="#0096ad">
<animate attributeName="fill-opacity"
begin="0s" dur="1.3s"
values="0;0;1;0;0;0;0;0" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="27" cy="49.125" r="5" fill-opacity="0" fill="#0096ad">
<animate attributeName="fill-opacity"
begin="0s" dur="1.3s"
values="0;0;0;1;0;0;0;0" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="11.399" cy="42.663" r="5" fill-opacity="0" fill="#0096ad">
<animate attributeName="fill-opacity"
begin="0s" dur="1.3s"
values="0;0;0;0;1;0;0;0" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="4.938" cy="27.063" r="5" fill-opacity="0" fill="#0096ad">
<animate attributeName="fill-opacity"
begin="0s" dur="1.3s"
values="0;0;0;0;0;1;0;0" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="11.399" cy="11.462" r="5" fill-opacity="0" fill="#0096ad">
<animate attributeName="fill-opacity"
begin="0s" dur="1.3s"
values="0;0;0;0;0;0;1;0" calcMode="linear"
repeatCount="indefinite" />
</circle>
<circle cx="27" cy="5" r="5" fill-opacity="0" fill="#0096ad">
<animate attributeName="fill-opacity"
begin="0s" dur="1.3s"
values="0;0;0;0;0;0;0;1" calcMode="linear"
repeatCount="indefinite" />
</circle>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -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, */*"
$httpProvider.defaults.headers.common["Accept"] = "application/json, text/javascript, */*"

View File

@@ -19,9 +19,15 @@
//= require ../shared/ng-infinite-scroll.min.js
//= require ./admin
//= require ./enterprises/enterprises
//= require ./enterprise_groups/enterprise_groups
//= 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
//= require textAngular-sanitize.min.js
//= require_tree .

View File

@@ -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,59 +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
@@ -98,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 = []
@@ -174,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 = ->
@@ -182,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(
@@ -217,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
@@ -256,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) ->
@@ -269,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
@@ -303,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 = []
@@ -385,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
@@ -401,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

View File

@@ -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/overridable?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."

View File

@@ -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()

View File

@@ -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"

View File

@@ -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

View File

@@ -0,0 +1,3 @@
angular.module("admin.enterprise_groups")
.controller "enterpriseGroupCtrl", ($scope, SideMenu) ->
$scope.menu = SideMenu

View File

@@ -0,0 +1,15 @@
angular.module("admin.enterprise_groups")
.controller "sideMenuCtrl", ($scope, SideMenu) ->
$scope.menu = SideMenu
$scope.select = SideMenu.select
$scope.menu.setItems [
{ name: 'Primary Details', icon_class: "icon-user" }
{ name: 'Users', icon_class: "icon-user" }
{ name: 'About', icon_class: "icon-pencil" }
{ name: 'Images', icon_class: "icon-picture" }
{ name: 'Contact', icon_class: "icon-phone" }
{ name: 'Web', icon_class: "icon-globe" }
]
$scope.select(0)

View File

@@ -0,0 +1 @@
angular.module("admin.enterprise_groups", ["admin.side_menu", "admin.users"])

View File

@@ -0,0 +1,12 @@
angular.module("admin.enterprises")
.controller "changeTypeFormCtrl", ($scope, enterprise) ->
$scope.sells = enterprise.sells
$scope.producer_profile_only = enterprise.producer_profile_only
$scope.submitted = false
$scope.valid = (form) ->
$scope.submitted = !form.$valid
form.$valid
$scope.submit = (form) ->
event.preventDefault() unless $scope.valid(form)

View File

@@ -1,35 +1,34 @@
angular.module("admin.enterprises")
.controller "enterpriseCtrl", ($scope, Enterprise, PaymentMethods, ShippingMethods) ->
.controller "enterpriseCtrl", ($scope, NavigationCheck, Enterprise, EnterprisePaymentMethods, EnterpriseShippingMethods, SideMenu) ->
$scope.Enterprise = Enterprise.enterprise
$scope.PaymentMethods = PaymentMethods.paymentMethods
$scope.ShippingMethods = ShippingMethods.shippingMethods
$scope.PaymentMethods = EnterprisePaymentMethods.paymentMethods
$scope.ShippingMethods = EnterpriseShippingMethods.shippingMethods
$scope.navClear = NavigationCheck.clear
$scope.pristineEmail = $scope.Enterprise.email
$scope.menu = SideMenu
$scope.newManager = { id: '', email: 'Add a manager...' }
for payment_method in $scope.PaymentMethods
payment_method.selected = payment_method.id in $scope.Enterprise.payment_method_ids
# 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 .
enterpriseNavCallback = ->
if $scope.Enterprise.$dirty
"Your changes to the enterprise are not saved yet."
$scope.paymentMethodsColor = ->
if $scope.PaymentMethods.length > 0
if $scope.selectedPaymentMethodsCount() > 0 then "blue" else "red"
else
"red"
# Register the NavigationCheck callback
NavigationCheck.register(enterpriseNavCallback)
$scope.selectedPaymentMethodsCount = ->
$scope.PaymentMethods.reduce (count, payment_method) ->
count++ if payment_method.selected
count
, 0
$scope.removeManager = (manager) ->
if manager.id?
for i, user of $scope.Enterprise.users when user.id == manager.id
$scope.Enterprise.users.splice i, 1
for shipping_method in $scope.ShippingMethods
shipping_method.selected = shipping_method.id in $scope.Enterprise.shipping_method_ids
$scope.shippingMethodsColor = ->
if $scope.ShippingMethods.length > 0
if $scope.selectedShippingMethodsCount() > 0 then "blue" else "red"
else
"red"
$scope.selectedShippingMethodsCount = ->
$scope.ShippingMethods.reduce (count, shipping_method) ->
count++ if shipping_method.selected
count
, 0
$scope.addManager = (manager) ->
if manager.id? and manager.email?
manager =
id: manager.id
email: manager.email
if (user for user in $scope.Enterprise.users when user.id == manager.id).length == 0
$scope.Enterprise.users.push manager
else
alert "#{manager.email} is already a manager!"

View File

@@ -0,0 +1,23 @@
angular.module("admin.enterprises")
.controller "permalinkCtrl", ($scope, PermalinkChecker) ->
# locals
initialPermalink = $scope.Enterprise.permalink
pendingRequest = null
# variables on $scope
$scope.availablility = ""
$scope.checking = false
$scope.$watch "Enterprise.permalink", (newValue, oldValue) ->
$scope.checking = true
pendingRequest = PermalinkChecker.check(newValue)
pendingRequest.then (data) ->
if data.permalink == initialPermalink
$scope.availability = ""
else
$scope.availability = data.available
$scope.Enterprise.permalink = data.permalink
$scope.checking = false
, (data) ->
# Do nothing (this is hopefully an aborted request)

View File

@@ -0,0 +1,41 @@
angular.module("admin.enterprises")
.controller "sideMenuCtrl", ($scope, $parse, Enterprise, SideMenu, enterprisePermissions) ->
$scope.Enterprise = Enterprise.enterprise
$scope.menu = SideMenu
$scope.select = SideMenu.select
$scope.menu.setItems [
{ name: 'Primary Details', icon_class: "icon-home" }
{ name: 'Users', 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", show: "showShippingMethods()" }
{ name: "Payment Methods", icon_class: "icon-money", show: "showPaymentMethods()" }
{ name: "Enterprise Fees", icon_class: "icon-tasks", show: "showEnterpriseFees()" }
{ name: "Shop Preferences", icon_class: "icon-shopping-cart", show: "showShopPreferences()" }
]
$scope.select(0)
$scope.showItem = (item) ->
if item.show?
$parse(item.show)($scope)
else
true
$scope.showShippingMethods = ->
enterprisePermissions.can_manage_shipping_methods && $scope.Enterprise.sells != "none"
$scope.showPaymentMethods = ->
enterprisePermissions.can_manage_payment_methods && $scope.Enterprise.sells != "none"
$scope.showEnterpriseFees = ->
enterprisePermissions.can_manage_enterprise_fees && ($scope.Enterprise.sells != "none" || $scope.Enterprise.is_primary_producer)
$scope.showShopPreferences = ->
$scope.Enterprise.sells != "none"

View File

@@ -1 +1 @@
angular.module("admin.enterprises", ["admin.payment_methods", "admin.shipping_methods", "admin.users"])
angular.module("admin.enterprises", [

View File

@@ -1,4 +1,5 @@
angular.module("admin.enterprises")
# Populate Enterprise.enterprise with enterprise json array from the page.
.factory 'Enterprise', (enterprise) ->
new class Enterprise
enterprise: enterprise
enterprise: enterprise

View File

@@ -0,0 +1,20 @@
angular.module("admin.enterprises")
.factory "EnterprisePaymentMethods", (Enterprise, PaymentMethods) ->
new class EnterprisePaymentMethods
paymentMethods: PaymentMethods.paymentMethods
constructor: ->
for payment_method in @paymentMethods
payment_method.selected = payment_method.id in Enterprise.enterprise.payment_method_ids
displayColor: ->
if @paymentMethods.length > 0 && @selectedCount() > 0
"blue"
else
"red"
selectedCount: ->
@paymentMethods.reduce (count, payment_method) ->
count++ if payment_method.selected
count
, 0

View File

@@ -0,0 +1,20 @@
angular.module("admin.enterprises")
.factory "EnterpriseShippingMethods", (Enterprise, ShippingMethods) ->
new class EnterpriseShippingMethods
shippingMethods: ShippingMethods.shippingMethods
constructor: ->
for shipping_method in @shippingMethods
shipping_method.selected = shipping_method.id in Enterprise.enterprise.shipping_method_ids
displayColor: ->
if @shippingMethods.length > 0 && @selectedCount() > 0
"blue"
else
"red"
selectedCount: ->
@shippingMethods.reduce (count, shipping_method) ->
count++ if shipping_method.selected
count
, 0

View File

@@ -0,0 +1,36 @@
angular.module("admin.enterprises").factory 'PermalinkChecker', ($q, $http) ->
new class PermalinkChecker
deferredRequest: null
deferredAbort: null
check: (permalink) =>
@abort(@deferredAbort) if @deferredRequest && @deferredRequest.promise
@deferredRequest = deferredRequest = $q.defer()
@deferredAbort = deferredAbort = $q.defer()
request = $http(
method: "GET"
url: "/enterprises/check_permalink?permalink=#{permalink}"
headers:
Accept: 'application/javascript'
timeout: deferredAbort.promise
)
.success( (data) =>
deferredRequest.resolve
permalink: data
available: "Available"
).error (data,status) =>
if status == 409
deferredRequest.resolve
permalink: data
available: "Unavailable"
else
# Something went wrong or request was aborted
deferredRequest.reject()
deferredRequest.promise.finally ->
request = deferredRequest.promise = null;
deferredRequest.promise
abort: (deferredAbort) ->
deferredAbort.resolve()

View File

@@ -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 )

View File

@@ -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)

View File

@@ -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 )

View File

@@ -1,10 +1,11 @@
angular.module('order_cycle', ['ngResource'])
.controller('AdminCreateOrderCycleCtrl', ['$scope', 'OrderCycle', 'Enterprise', 'EnterpriseFee', ($scope, OrderCycle, Enterprise, EnterpriseFee) ->
angular.module('admin.order_cycles', ['ngResource'])
.controller('AdminCreateOrderCycleCtrl', ['$scope', 'OrderCycle', 'Enterprise', 'EnterpriseFee', 'ocInstance', ($scope, OrderCycle, Enterprise, EnterpriseFee, ocInstance) ->
$scope.enterprises = Enterprise.index()
$scope.supplied_products = Enterprise.supplied_products
$scope.enterprise_fees = EnterpriseFee.index()
$scope.order_cycle = OrderCycle.order_cycle
$scope.order_cycle.coordinator_id = ocInstance.coordinator_id
$scope.loaded = ->
Enterprise.loaded && EnterpriseFee.loaded
@@ -74,7 +75,8 @@ angular.module('order_cycle', ['ngResource'])
$scope.removeDistributionOfVariant = (variant_id) ->
OrderCycle.removeDistributionOfVariant(variant_id)
$scope.submit = ->
$scope.submit = (event) ->
event.preventDefault()
OrderCycle.create()
])
@@ -154,7 +156,8 @@ angular.module('order_cycle', ['ngResource'])
$scope.removeDistributionOfVariant = (variant_id) ->
OrderCycle.removeDistributionOfVariant(variant_id)
$scope.submit = ->
$scope.submit = (event) ->
event.preventDefault()
OrderCycle.update()
])
@@ -162,235 +165,6 @@ angular.module('order_cycle', ['ngResource'])
$httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content')
])
.factory('OrderCycle', ['$resource', '$window', ($resource, $window) ->
OrderCycle = $resource '/admin/order_cycles/:order_cycle_id.json', {}, {
'index': { method: 'GET', isArray: true}
'create': { method: 'POST'}
'update': { method: 'PUT'}}
{
order_cycle:
incoming_exchanges: []
outgoing_exchanges: []
coordinator_fees: []
loaded: false
exchangeSelectedVariants: (exchange) ->
numActiveVariants = 0
numActiveVariants++ for id, active of exchange.variants when active
numActiveVariants
exchangeDirection: (exchange) ->
if this.order_cycle.incoming_exchanges.indexOf(exchange) == -1 then 'outgoing' else 'incoming'
toggleProducts: (exchange) ->
exchange.showProducts = !exchange.showProducts
setExchangeVariants: (exchange, variants, selected) ->
exchange.variants[variant] = selected for variant in variants
addSupplier: (new_supplier_id) ->
this.order_cycle.incoming_exchanges.push({enterprise_id: new_supplier_id, incoming: true, active: true, variants: {}, enterprise_fees: []})
addDistributor: (new_distributor_id) ->
this.order_cycle.outgoing_exchanges.push({enterprise_id: new_distributor_id, incoming: false, active: true, variants: {}, enterprise_fees: []})
removeExchange: (exchange) ->
if exchange.incoming
incoming_index = this.order_cycle.incoming_exchanges.indexOf exchange
this.order_cycle.incoming_exchanges.splice(incoming_index, 1)
this.removeDistributionOfVariant(variant_id) for variant_id, active of exchange.variants when active
else
outgoing_index = this.order_cycle.outgoing_exchanges.indexOf exchange
this.order_cycle.outgoing_exchanges.splice(outgoing_index, 1) if outgoing_index > -1
addCoordinatorFee: ->
this.order_cycle.coordinator_fees.push({})
removeCoordinatorFee: (index) ->
this.order_cycle.coordinator_fees.splice(index, 1)
addExchangeFee: (exchange) ->
exchange.enterprise_fees.push({})
removeExchangeFee: (exchange, index) ->
exchange.enterprise_fees.splice(index, 1)
productSuppliedToOrderCycle: (product) ->
product_variant_ids = (variant.id for variant in product.variants)
variant_ids = [product.master_id].concat(product_variant_ids)
incomingExchangesVariants = this.incomingExchangesVariants()
# TODO: This is an O(n^2) implementation of set intersection and thus is slooow.
# Use a better algorithm if needed.
# Also, incomingExchangesVariants is called every time, when it only needs to be
# called once per change to incoming variants. Some sort of caching?
ids = (variant_id for variant_id in variant_ids when incomingExchangesVariants.indexOf(variant_id) != -1)
ids.length > 0
variantSuppliedToOrderCycle: (variant) ->
this.incomingExchangesVariants().indexOf(variant.id) != -1
incomingExchangesVariants: ->
variant_ids = []
for exchange in this.order_cycle.incoming_exchanges
variant_ids.push(parseInt(id)) for id, active of exchange.variants when active
variant_ids
participatingEnterpriseIds: ->
suppliers = (exchange.enterprise_id for exchange in this.order_cycle.incoming_exchanges)
distributors = (exchange.enterprise_id for exchange in this.order_cycle.outgoing_exchanges)
jQuery.unique(suppliers.concat(distributors)).sort()
removeDistributionOfVariant: (variant_id) ->
for exchange in this.order_cycle.outgoing_exchanges
exchange.variants[variant_id] = false
load: (order_cycle_id) ->
service = this
OrderCycle.get {order_cycle_id: order_cycle_id}, (oc) ->
angular.extend(service.order_cycle, oc)
service.order_cycle.incoming_exchanges = []
service.order_cycle.outgoing_exchanges = []
for exchange in service.order_cycle.exchanges
if exchange.incoming
angular.extend(exchange, {enterprise_id: exchange.sender_id, active: true})
delete(exchange.receiver_id)
service.order_cycle.incoming_exchanges.push(exchange)
else
angular.extend(exchange, {enterprise_id: exchange.receiver_id, active: true})
delete(exchange.sender_id)
service.order_cycle.outgoing_exchanges.push(exchange)
delete(service.order_cycle.exchanges)
service.loaded = true
this.order_cycle
create: ->
oc = new OrderCycle({order_cycle: this.dataForSubmit()})
oc.$create (data) ->
if data['success']
$window.location = '/admin/order_cycles'
else
console.log('Failed to create order cycle')
update: ->
oc = new OrderCycle({order_cycle: this.dataForSubmit()})
oc.$update {order_cycle_id: this.order_cycle.id}, (data) ->
if data['success']
$window.location = '/admin/order_cycles'
else
console.log('Failed to update order cycle')
dataForSubmit: ->
data = this.deepCopy()
data = this.removeInactiveExchanges(data)
data = this.translateCoordinatorFees(data)
data = this.translateExchangeFees(data)
data
deepCopy: ->
data = angular.extend({}, this.order_cycle)
# Copy exchanges
data.incoming_exchanges = (angular.extend {}, exchange for exchange in this.order_cycle.incoming_exchanges) if this.order_cycle.incoming_exchanges?
data.outgoing_exchanges = (angular.extend {}, exchange for exchange in this.order_cycle.outgoing_exchanges) if this.order_cycle.outgoing_exchanges?
# Copy exchange fees
all_exchanges = (data.incoming_exchanges || []) + (data.outgoing_exchanges || [])
for exchange in all_exchanges
if exchange.enterprise_fees?
exchange.enterprise_fees = (angular.extend {}, fee for fee in exchange.enterprise_fees)
data
removeInactiveExchanges: (order_cycle) ->
order_cycle.incoming_exchanges =
(exchange for exchange in order_cycle.incoming_exchanges when exchange.active)
order_cycle.outgoing_exchanges =
(exchange for exchange in order_cycle.outgoing_exchanges when exchange.active)
order_cycle
translateCoordinatorFees: (order_cycle) ->
order_cycle.coordinator_fee_ids = (fee.id for fee in order_cycle.coordinator_fees)
delete order_cycle.coordinator_fees
order_cycle
translateExchangeFees: (order_cycle) ->
for exchange in order_cycle.incoming_exchanges
exchange.enterprise_fee_ids = (fee.id for fee in exchange.enterprise_fees)
delete exchange.enterprise_fees
for exchange in order_cycle.outgoing_exchanges
exchange.enterprise_fee_ids = (fee.id for fee in exchange.enterprise_fees)
delete exchange.enterprise_fees
order_cycle
}])
.factory('Enterprise', ['$resource', ($resource) ->
Enterprise = $resource('/admin/enterprises/for_order_cycle/:enterprise_id.json', {}, {'index': {method: 'GET', isArray: true}})
{
Enterprise: Enterprise
enterprises: {}
supplied_products: []
loaded: false
index: ->
service = this
Enterprise.index (data) ->
for enterprise in data
service.enterprises[enterprise.id] = enterprise
for product in enterprise.supplied_products
service.supplied_products.push(product)
service.loaded = true
this.enterprises
suppliedVariants: (enterprise_id) ->
vs = (this.variantsOf(product) for product in this.enterprises[enterprise_id].supplied_products)
[].concat vs...
variantsOf: (product) ->
if product.variants.length > 0
variant.id for variant in product.variants
else
[product.master_id]
totalVariants: (enterprise) ->
numVariants = 0
if enterprise
counts = for product in enterprise.supplied_products
numVariants += if product.variants.length == 0 then 1 else product.variants.length
numVariants
}])
.factory('EnterpriseFee', ['$resource', ($resource) ->
EnterpriseFee = $resource('/admin/enterprise_fees/:enterprise_fee_id.json', {}, {'index': {method: 'GET', isArray: true}})
{
EnterpriseFee: EnterpriseFee
enterprise_fees: {}
loaded: false
index: ->
service = this
EnterpriseFee.index (data) ->
service.enterprise_fees = data
service.loaded = true
forEnterprise: (enterprise_id) ->
enterprise_fee for enterprise_fee in this.enterprise_fees when enterprise_fee.enterprise_id == enterprise_id
}])
.directive('datetimepicker', ['$parse', ($parse) ->
(scope, element, attrs) ->
# using $parse instead of scope[attrs.datetimepicker] for cases

View File

@@ -0,0 +1,44 @@
angular.module('admin.order_cycles').controller "AdminSimpleCreateOrderCycleCtrl", ($scope, OrderCycle, Enterprise, EnterpriseFee) ->
$scope.enterprises = Enterprise.index (enterprises) =>
$scope.init(enterprises)
$scope.enterprise_fees = EnterpriseFee.index()
$scope.order_cycle = OrderCycle.order_cycle
$scope.init = (enterprises) ->
enterprise = enterprises[Object.keys(enterprises)[0]]
OrderCycle.addSupplier enterprise.id
OrderCycle.addDistributor enterprise.id
$scope.outgoing_exchange = OrderCycle.order_cycle.outgoing_exchanges[0]
# All variants start as checked
OrderCycle.setExchangeVariants(OrderCycle.order_cycle.incoming_exchanges[0],
Enterprise.suppliedVariants(enterprise.id), true)
OrderCycle.order_cycle.coordinator_id = enterprise.id
$scope.loaded = ->
Enterprise.loaded && EnterpriseFee.loaded
$scope.removeDistributionOfVariant = angular.noop
$scope.setExchangeVariants = (exchange, variants, selected) ->
OrderCycle.setExchangeVariants(exchange, variants, selected)
$scope.suppliedVariants = (enterprise_id) ->
Enterprise.suppliedVariants(enterprise_id)
$scope.addCoordinatorFee = ($event) ->
$event.preventDefault()
OrderCycle.addCoordinatorFee()
$scope.removeCoordinatorFee = ($event, index) ->
$event.preventDefault()
OrderCycle.removeCoordinatorFee(index)
$scope.enterpriseFeesForEnterprise = (enterprise_id) ->
EnterpriseFee.forEnterprise(parseInt(enterprise_id))
$scope.submit = (event) ->
event.preventDefault()
OrderCycle.mirrorIncomingToOutgoingProducts()
OrderCycle.create()

View File

@@ -0,0 +1,38 @@
angular.module('admin.order_cycles').controller "AdminSimpleEditOrderCycleCtrl", ($scope, $location, OrderCycle, Enterprise, EnterpriseFee) ->
$scope.orderCycleId = ->
$location.absUrl().match(/\/admin\/order_cycles\/(\d+)/)[1]
$scope.enterprises = Enterprise.index()
$scope.enterprise_fees = EnterpriseFee.index()
$scope.order_cycle = OrderCycle.load $scope.orderCycleId(), (order_cycle) =>
$scope.init()
$scope.loaded = ->
Enterprise.loaded && EnterpriseFee.loaded && OrderCycle.loaded
$scope.init = ->
$scope.outgoing_exchange = OrderCycle.order_cycle.outgoing_exchanges[0]
$scope.enterpriseFeesForEnterprise = (enterprise_id) ->
EnterpriseFee.forEnterprise(parseInt(enterprise_id))
$scope.removeDistributionOfVariant = angular.noop
$scope.setExchangeVariants = (exchange, variants, selected) ->
OrderCycle.setExchangeVariants(exchange, variants, selected)
$scope.suppliedVariants = (enterprise_id) ->
Enterprise.suppliedVariants(enterprise_id)
$scope.addCoordinatorFee = ($event) ->
$event.preventDefault()
OrderCycle.addCoordinatorFee()
$scope.removeCoordinatorFee = ($event, index) ->
$event.preventDefault()
OrderCycle.removeCoordinatorFee(index)
$scope.submit = (event) ->
event.preventDefault()
OrderCycle.mirrorIncomingToOutgoingProducts()
OrderCycle.update()

View File

@@ -0,0 +1,43 @@
angular.module('admin.order_cycles').factory('Enterprise', ($resource) ->
Enterprise = $resource('/admin/enterprises/for_order_cycle/:enterprise_id.json', {}, {'index': {method: 'GET', isArray: true}})
{
Enterprise: Enterprise
enterprises: {}
supplied_products: []
loaded: false
index: (callback=null) ->
service = this
Enterprise.index (data) ->
for enterprise in data
service.enterprises[enterprise.id] = enterprise
for product in enterprise.supplied_products
service.supplied_products.push(product)
service.loaded = true
(callback || angular.noop)(service.enterprises)
this.enterprises
suppliedVariants: (enterprise_id) ->
vs = (this.variantsOf(product) for product in this.enterprises[enterprise_id].supplied_products)
[].concat vs...
variantsOf: (product) ->
if product.variants.length > 0
variant.id for variant in product.variants
else
[product.master_id]
totalVariants: (enterprise) ->
numVariants = 0
if enterprise
counts = for product in enterprise.supplied_products
numVariants += if product.variants.length == 0 then 1 else product.variants.length
numVariants
})

View File

@@ -0,0 +1,18 @@
angular.module('admin.order_cycles').factory('EnterpriseFee', ($resource) ->
EnterpriseFee = $resource('/admin/enterprise_fees/:enterprise_fee_id.json', {}, {'index': {method: 'GET', isArray: true}})
{
EnterpriseFee: EnterpriseFee
enterprise_fees: {}
loaded: false
index: ->
service = this
EnterpriseFee.index (data) ->
service.enterprise_fees = data
service.loaded = true
forEnterprise: (enterprise_id) ->
enterprise_fee for enterprise_fee in this.enterprise_fees when enterprise_fee.enterprise_id == enterprise_id
})

View File

@@ -0,0 +1,180 @@
angular.module('admin.order_cycles').factory('OrderCycle', ($resource, $window) ->
OrderCycle = $resource '/admin/order_cycles/:order_cycle_id.json', {}, {
'index': { method: 'GET', isArray: true}
'create': { method: 'POST'}
'update': { method: 'PUT'}}
{
order_cycle:
incoming_exchanges: []
outgoing_exchanges: []
coordinator_fees: []
loaded: false
exchangeSelectedVariants: (exchange) ->
numActiveVariants = 0
numActiveVariants++ for id, active of exchange.variants when active
numActiveVariants
exchangeDirection: (exchange) ->
if this.order_cycle.incoming_exchanges.indexOf(exchange) == -1 then 'outgoing' else 'incoming'
toggleProducts: (exchange) ->
exchange.showProducts = !exchange.showProducts
setExchangeVariants: (exchange, variants, selected) ->
exchange.variants[variant] = selected for variant in variants
addSupplier: (new_supplier_id) ->
this.order_cycle.incoming_exchanges.push({enterprise_id: new_supplier_id, incoming: true, active: true, variants: {}, enterprise_fees: []})
addDistributor: (new_distributor_id) ->
this.order_cycle.outgoing_exchanges.push({enterprise_id: new_distributor_id, incoming: false, active: true, variants: {}, enterprise_fees: []})
removeExchange: (exchange) ->
if exchange.incoming
incoming_index = this.order_cycle.incoming_exchanges.indexOf exchange
this.order_cycle.incoming_exchanges.splice(incoming_index, 1)
this.removeDistributionOfVariant(variant_id) for variant_id, active of exchange.variants when active
else
outgoing_index = this.order_cycle.outgoing_exchanges.indexOf exchange
this.order_cycle.outgoing_exchanges.splice(outgoing_index, 1) if outgoing_index > -1
addCoordinatorFee: ->
this.order_cycle.coordinator_fees.push({})
removeCoordinatorFee: (index) ->
this.order_cycle.coordinator_fees.splice(index, 1)
addExchangeFee: (exchange) ->
exchange.enterprise_fees.push({})
removeExchangeFee: (exchange, index) ->
exchange.enterprise_fees.splice(index, 1)
productSuppliedToOrderCycle: (product) ->
product_variant_ids = (variant.id for variant in product.variants)
variant_ids = [product.master_id].concat(product_variant_ids)
incomingExchangesVariants = this.incomingExchangesVariants()
# TODO: This is an O(n^2) implementation of set intersection and thus is slooow.
# Use a better algorithm if needed.
# Also, incomingExchangesVariants is called every time, when it only needs to be
# called once per change to incoming variants. Some sort of caching?
ids = (variant_id for variant_id in variant_ids when incomingExchangesVariants.indexOf(variant_id) != -1)
ids.length > 0
variantSuppliedToOrderCycle: (variant) ->
this.incomingExchangesVariants().indexOf(variant.id) != -1
incomingExchangesVariants: ->
variant_ids = []
for exchange in this.order_cycle.incoming_exchanges
variant_ids.push(parseInt(id)) for id, active of exchange.variants when active
variant_ids
participatingEnterpriseIds: ->
suppliers = (exchange.enterprise_id for exchange in this.order_cycle.incoming_exchanges)
distributors = (exchange.enterprise_id for exchange in this.order_cycle.outgoing_exchanges)
jQuery.unique(suppliers.concat(distributors)).sort()
removeDistributionOfVariant: (variant_id) ->
for exchange in this.order_cycle.outgoing_exchanges
exchange.variants[variant_id] = false
load: (order_cycle_id, callback=null) ->
service = this
OrderCycle.get {order_cycle_id: order_cycle_id}, (oc) ->
delete oc.$promise
delete oc.$resolved
angular.extend(service.order_cycle, oc)
service.order_cycle.incoming_exchanges = []
service.order_cycle.outgoing_exchanges = []
for exchange in service.order_cycle.exchanges
if exchange.incoming
angular.extend(exchange, {enterprise_id: exchange.sender_id, active: true})
delete(exchange.receiver_id)
service.order_cycle.incoming_exchanges.push(exchange)
else
angular.extend(exchange, {enterprise_id: exchange.receiver_id, active: true})
delete(exchange.sender_id)
service.order_cycle.outgoing_exchanges.push(exchange)
delete(service.order_cycle.exchanges)
service.loaded = true
(callback || angular.noop)(service.order_cycle)
this.order_cycle
create: ->
oc = new OrderCycle({order_cycle: this.dataForSubmit()})
oc.$create (data) ->
if data['success']
$window.location = '/admin/order_cycles'
else
console.log('Failed to create order cycle')
update: ->
oc = new OrderCycle({order_cycle: this.dataForSubmit()})
oc.$update {order_cycle_id: this.order_cycle.id}, (data) ->
if data['success']
$window.location = '/admin/order_cycles'
else
console.log('Failed to update order cycle')
dataForSubmit: ->
data = this.deepCopy()
data = this.removeInactiveExchanges(data)
data = this.translateCoordinatorFees(data)
data = this.translateExchangeFees(data)
data
deepCopy: ->
data = angular.extend({}, this.order_cycle)
# Copy exchanges
data.incoming_exchanges = (angular.extend {}, exchange for exchange in this.order_cycle.incoming_exchanges) if this.order_cycle.incoming_exchanges?
data.outgoing_exchanges = (angular.extend {}, exchange for exchange in this.order_cycle.outgoing_exchanges) if this.order_cycle.outgoing_exchanges?
# Copy exchange fees
all_exchanges = (data.incoming_exchanges || []) + (data.outgoing_exchanges || [])
for exchange in all_exchanges
if exchange.enterprise_fees?
exchange.enterprise_fees = (angular.extend {}, fee for fee in exchange.enterprise_fees)
data
removeInactiveExchanges: (order_cycle) ->
order_cycle.incoming_exchanges =
(exchange for exchange in order_cycle.incoming_exchanges when exchange.active)
order_cycle.outgoing_exchanges =
(exchange for exchange in order_cycle.outgoing_exchanges when exchange.active)
order_cycle
translateCoordinatorFees: (order_cycle) ->
order_cycle.coordinator_fee_ids = (fee.id for fee in order_cycle.coordinator_fees)
delete order_cycle.coordinator_fees
order_cycle
translateExchangeFees: (order_cycle) ->
for exchange in order_cycle.incoming_exchanges
exchange.enterprise_fee_ids = (fee.id for fee in exchange.enterprise_fees)
delete exchange.enterprise_fees
for exchange in order_cycle.outgoing_exchanges
exchange.enterprise_fee_ids = (fee.id for fee in exchange.enterprise_fees)
delete exchange.enterprise_fees
order_cycle
# In the simple UI, we don't list outgoing products. Instead, all products are considered
# part of both incoming and outgoing enterprises. This method mirrors the former to the
# latter **for order cycles with a single incoming and outgoing exchange only**.
mirrorIncomingToOutgoingProducts: ->
incoming = this.order_cycle.incoming_exchanges[0]
outgoing = this.order_cycle.outgoing_exchanges[0]
for id, active of incoming.variants
outgoing.variants[id] = active
})

View File

@@ -2,7 +2,7 @@ angular.module("admin.payment_methods")
.factory "PaymentMethods", (paymentMethods) ->
new class PaymentMethods
paymentMethods: paymentMethods
findByID: (id) ->
for paymentMethod in @paymentMethods
return paymentMethod if paymentMethod.id is id

View File

@@ -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

View File

@@ -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()

View File

@@ -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}

View File

@@ -4,6 +4,8 @@ angular.module("ofn.admin").factory 'EnterpriseRelationships', ($http, enterpris
all_permissions: [
'add_to_order_cycle'
'manage_products'
'edit_profile'
'create_variant_overrides'
]
constructor: ->
@@ -26,3 +28,5 @@ angular.module("ofn.admin").factory 'EnterpriseRelationships', ($http, enterpris
switch permission
when "add_to_order_cycle" then "to add to order cycle"
when "manage_products" then "to manage products"
when "edit_profile" then "to edit profile"
when "create_variant_overrides" then "to override variant details"

View 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

View File

@@ -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)

View File

@@ -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

View File

@@ -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 = {}

View File

@@ -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)

View File

@@ -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

View File

@@ -2,7 +2,7 @@ angular.module("admin.shipping_methods")
.factory "ShippingMethods", (shippingMethods) ->
new class ShippingMethods
shippingMethods: shippingMethods
findByID: (id) ->
for shippingMethod in @shippingMethods
return shippingMethod if shippingMethod.id is id

View File

@@ -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

View File

@@ -0,0 +1 @@
angular.module("admin.side_menu", [])

View File

@@ -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")

View File

@@ -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(",") when @taxonsByID[taxon_id]
findByTerm: (term) ->
$filter('filter')(@taxons, term)

View File

@@ -0,0 +1 @@
angular.module("admin.taxons", [])

View File

@@ -1,12 +1,15 @@
angular.module("admin.users").directive "ofnUserAutocomplete", ($http) ->
angular.module("admin.users").directive "userSelect", ->
scope:
user: '&userSelect'
model: '=ngModel'
link: (scope,element,attrs) ->
setTimeout ->
element.select2
multiple: false
initSelection: (element, callback) ->
callback { id: element.val(), email: attrs.email }
callback {id: scope.user().id, email: scope.user().email}
ajax:
url: Spree.routes.user_search
url: '/admin/search/known_users'
datatype: 'json'
data:(term, page) ->
{ q: term }
@@ -15,4 +18,6 @@ angular.module("admin.users").directive "ofnUserAutocomplete", ($http) ->
formatResult: (user) ->
user.email
formatSelection: (user) ->
user.email
scope.$apply ->
scope.model = user if scope.model?
user.email

View File

@@ -28,3 +28,10 @@ show_flash_error = function(message) {
}
}
}
$(document).ready(function(){
$('a.close').click(function(event){
event.preventDefault();
$(this).parent().slideUp(250);
});
});

View File

@@ -0,0 +1,47 @@
angular.module("admin.utils")
.factory "NavigationCheck", ($window, $rootScope) ->
new class NavigationCheck
callbacks = []
constructor: ->
if $window.addEventListener
$window.addEventListener "beforeunload", @onBeforeUnloadHandler
else
$window.onbeforeunload = @onBeforeUnloadHandler
$rootScope.$on "$locationChangeStart", @locationChangeStartHandler
# Action for regular browser navigation.
onBeforeUnloadHandler: ($event) =>
message = @getMessage()
if message
# following: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload
($event or $window.event).returnValue = message
message
# Action for angular navigation.
locationChangeStartHandler: ($event) =>
message = @getMessage()
if message and not $window.confirm(message)
$event.stopPropagation() if $event.stopPropagation
$event.preventDefault() if $event.preventDefault
$event.cancelBubble = true
$event.returnValue = false
# Runs callback functions to retreive most recently added non-empty message.
getMessage: ->
message = null
message = callback() ? message for callback in callbacks
message
register: (callback) =>
callbacks.push callback
clear: =>
if $window.addEventListener
$window.removeEventListener "beforeunload", @onBeforeUnloadHandler
else
$window.onbeforeunload = null
$rootScope.$on "$locationChangeStart", null

View File

@@ -0,0 +1 @@
angular.module("admin.utils", [])

View File

@@ -11,10 +11,9 @@ $ ->
# Temporarily handles the cart showing stuff
$(document).ready ->
$('#cart_adjustments').hide()
$('.cart_adjustment').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')
$('td.cart-adjustments a').click ->
$('.cart_adjustment').toggle()
$(this).html('Item Handling Fees (included in item totals)')
false

View File

@@ -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

View File

@@ -1,9 +1,10 @@
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"]
prefix = "order_#{Checkout.order.id}#{CurrentUser?.id}#{CurrentHub.hub.id}"
prefix = "order_#{Checkout.order.id}#{CurrentUser.id or ""}#{CurrentHub.hub.id}"
for field in $scope.fieldsToBind
storage.bind $scope, "Checkout.order.#{field}",
@@ -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.id?
$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

View File

@@ -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

View File

@@ -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

View File

@@ -1,13 +1,14 @@
Darkswarm.controller "HubsCtrl", ($scope, Hubs, Search, $document, $rootScope, HashNavigation, FilterSelectorsService, MapModal) ->
$scope.Hubs = Hubs
$scope.hubs = Hubs.visible
Darkswarm.controller "EnterprisesCtrl", ($scope, Enterprises, Search, $document, $rootScope, HashNavigation, FilterSelectorsService, EnterpriseModal) ->
$scope.Enterprises = Enterprises
$scope.totalActive = FilterSelectorsService.totalActive
$scope.clearAll = FilterSelectorsService.clearAll
$scope.filterText = FilterSelectorsService.filterText
$scope.FilterSelectorsService = FilterSelectorsService
$scope.query = Search.search()
$scope.openModal = EnterpriseModal.open
$scope.activeTaxons = []
$scope.show_profiles = false
$scope.openModal = MapModal.open
$scope.filtersActive = false
$scope.$watch "query", (query)->
Search.search query

View File

@@ -0,0 +1,12 @@
Darkswarm.controller "GroupEnterpriseNodeCtrl", ($scope, CurrentHub) ->
$scope.active = false
$scope.toggle = ->
$scope.active = !$scope.active
$scope.open = ->
$scope.active
$scope.current = ->
$scope.hub.id is CurrentHub.hub.id

View File

@@ -1,14 +1,13 @@
Darkswarm.controller "ProducersCtrl", ($scope, Producers, $filter, FilterSelectorsService, Search, MapModal) ->
$scope.Producers = Producers
Darkswarm.controller "GroupEnterprisesCtrl", ($scope, Enterprises, Search, FilterSelectorsService) ->
$scope.Enterprises = Enterprises
$scope.totalActive = FilterSelectorsService.totalActive
$scope.clearAll = FilterSelectorsService.clearAll
$scope.filterText = FilterSelectorsService.filterText
$scope.FilterSelectorsService = FilterSelectorsService
$scope.filtersActive = false
$scope.activeTaxons = []
$scope.query = Search.search()
$scope.activeTaxons = []
$scope.show_profiles = false
$scope.openModal = MapModal.open
$scope.filtersActive = false
$scope.$watch "query", (query)->
Search.search query

View File

@@ -1,3 +1,3 @@
Darkswarm.controller "MapCtrl", ($scope, MapConfiguration, OfnMap)->
$scope.OfnMap = OfnMap
$scope.map = MapConfiguration.options
$scope.map = angular.copy MapConfiguration.options

View File

@@ -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

View File

@@ -3,7 +3,7 @@ Darkswarm.controller "RegistrationCtrl", ($scope, RegistrationService, Enterpris
$scope.enterprise = EnterpriseRegistrationService.enterprise
$scope.select = RegistrationService.select
$scope.steps = ['details','address','contact','about','images','social']
$scope.steps = ['details','contact','type','about','images','social']
$scope.countries = availableCountries

View File

@@ -1,3 +1,4 @@
Darkswarm.controller "ProducersTabCtrl", ($scope, CurrentHub, Enterprises) ->
# Injecting Enterprises so CurrentHub.producers is dereferenced
Darkswarm.controller "ProducersTabCtrl", ($scope, CurrentHub, Enterprises, EnterpriseModal) ->
# Injecting Enterprises so CurrentHub.producers is dereferenced.
# We should probably dereference here instead and separate out CurrentHub dereferencing from the Enterprise factory.
$scope.CurrentHub = CurrentHub

View File

@@ -1,18 +1,15 @@
Darkswarm.controller "TabsCtrl", ($scope, $rootScope, $location, OrderCycle) ->
Darkswarm.controller "TabsCtrl", ($scope, $rootScope, $location) ->
# Return active if supplied path matches url hash path.
$scope.active = (path)->
if !OrderCycle.selected() and $location.hash() == "" and path == "about"
true
else
$location.hash() == path
$location.hash() == path
# Select tab by setting the url hash path.
$scope.select = (path)->
$location.hash path
$scope.tabs = ["contact", "about", "groups", "producers"]
for tab in $scope.tabs
$scope[tab] =
path: tab
$scope.select = (tab)->
if $scope.active(tab.path)
# Toggle tab selected status by setting the url hash path.
$scope.toggle = (path)->
if $scope.active(path)
$location.hash ""
else
$location.hash tab.path
$location.hash path

View File

@@ -8,6 +8,6 @@ Darkswarm.directive "ofnEmptiesCart", (CurrentHub, Cart, Navigation, storage) ->
if CurrentHub.hub?.id and CurrentHub.hub.id isnt scope.hub.id and !Cart.empty()
elm.bind 'click', (ev)->
ev.preventDefault()
if confirm "Are you sure? This will change your selected Hub and remove any items in you shopping cart."
if confirm "Are you sure? This will change your selected Hub and remove any items in your shopping cart."
storage.clearAll() # One day this will have to be moar GRANULAR
Navigation.go scope.hub.path

View File

@@ -1,4 +1,4 @@
Darkswarm.directive "producerModal", ($modal)->
Darkswarm.directive "enterpriseModal", ($modal)->
restrict: 'E'
replace: true
template: "<a ng-transclude></a>"
@@ -6,5 +6,4 @@ Darkswarm.directive "producerModal", ($modal)->
link: (scope, elem, attrs, ctrl)->
elem.on "click", (ev)=>
ev.stopPropagation()
scope.modalInstance = $modal.open(controller: ctrl, templateUrl: 'producer_modal.html', scope: scope)
scope.modalInstance = $modal.open(controller: ctrl, templateUrl: 'enterprise_modal.html', scope: scope)

View File

@@ -1,8 +0,0 @@
Darkswarm.directive "hubModal", ($modal)->
restrict: 'E'
replace: true
template: "<a>{{enterprise.name}}</a>"
link: (scope, elem, attrs, ctrl)->
elem.on "click", (ev)=>
ev.stopPropagation()
scope.modalInstance = $modal.open(controller: ctrl, templateUrl: 'hub_modal.html', scope: scope)

View File

@@ -0,0 +1,7 @@
Darkswarm.directive "ofnInlineAlert", ->
restrict: 'A'
scope: true
link: (scope, elem, attrs) ->
scope.visible = true
scope.close = ->
scope.visible = false

View File

@@ -1,6 +0,0 @@
Darkswarm.directive "ofnInlineFlash", ->
restrict: 'E'
controller: ($scope) ->
$scope.visible = true
$scope.closeFlash = ->
$scope.visible = false

View File

@@ -0,0 +1,8 @@
Darkswarm.directive "linkToService", ->
restrict: 'E'
replace: true
scope: {
ref: '='
service: '='
}
template: '<a href="{{ref | ext_url: service}}" target="_blank" ng-show="ref"></a>'

View File

@@ -3,7 +3,7 @@ Darkswarm.directive "ofnRegistrationLimitModal", (Navigation, $modal, Loading) -
link: (scope, elem, attr)->
scope.modalInstance = $modal.open
templateUrl: 'registration/limit_reached.html'
windowClass: "login-modal large"
windowClass: "login-modal register-modal xlarge"
backdrop: 'static'
scope.modalInstance.result.then scope.close, scope.close

View File

@@ -1,4 +1,5 @@
Darkswarm.filter "capitalize", ->
# Convert to basic sentence case.
(input, scope) ->
input = input.toLowerCase() if input?
input = input.toLowerCase() if input?
input.substring(0, 1).toUpperCase() + input.substring(1)

View File

@@ -0,0 +1,7 @@
Darkswarm.filter "ext_url", ->
urlPattern = /^https?:\/\//
(url, prefix) ->
if !url || url.match(urlPattern)
url
else
prefix + url

View File

@@ -1,9 +0,0 @@
Darkswarm.filter 'hubs', (Matcher)->
(hubs, text) ->
hubs ||= []
text ?= ""
hubs.filter (hub)=>
Matcher.match [
hub.name, hub.address.zipcode, hub.address.city, hub.address.state
], text

View File

@@ -1,6 +0,0 @@
Darkswarm.filter 'filterProducers', (hubsFilter)->
(producers, text) ->
producers ||= []
text ?= ""
hubsFilter(producers, text)

View File

@@ -1,15 +1,14 @@
# Convert number to string currency using injected currency configuration.
#
# @requires currencyConfig json - /app/serializers/api/currency_config_serializer.rb
# @return: string
Darkswarm.filter "localizeCurrency", (currencyConfig)->
# Convert number to string currency using injected currency configuration.
(amount) ->
# Set country code (eg. "US").
currency_code = if currencyConfig.display_currency then " " + currencyConfig.currency else ""
# Set decimal points, 2 or 0 if hide_cents.
decimals = if currencyConfig.hide_cents == "true" then 0 else 2
# We need to use parseFloat before toFixed as the amount should be a passed in as a string.
# We need to use parseFloat before toFixed as the amount should come in as a string.
amount_fixed = parseFloat(amount).toFixed(decimals)
# Build the final price string.
# Build the final price string. TODO use spree decimal point and spacer character settings.
if currencyConfig.symbol_position == 'before'
currencyConfig.symbol + amount_fixed + currency_code
else

View File

@@ -0,0 +1,10 @@
Darkswarm.filter 'searchEnterprises', (Matcher)->
# Search multiple fields of enterprises for matching text fragment.
(enterprises, text) ->
enterprises ||= []
text ?= ""
enterprises.filter (enterprise)=>
Matcher.match [
enterprise.name, enterprise.address.zipcode, enterprise.address.city, enterprise.address.state
], text

View File

@@ -1,9 +1,10 @@
Darkswarm.filter 'shipping', ()->
Darkswarm.filter 'shipping', ()->
(objects, options)->
objects ||= []
options ?= null
if options.pickup and !options.delivery
if !options
objects
else if options.pickup and !options.delivery
objects.filter (obj)->
obj.pickup
else if options.delivery and !options.pickup

View File

@@ -0,0 +1,8 @@
Darkswarm.filter 'showHubProfiles', ()->
# Filter hub_profile enterprises in or out.
(enterprises, show_profiles) ->
enterprises ||= []
show_profiles ?= false
enterprises.filter (enterprise)=>
show_profiles or enterprise.is_distributor

View File

@@ -1,7 +0,0 @@
Darkswarm.filter 'showProfiles', ()->
(enterprises, show_profiles) ->
enterprises ||= []
show_profiles ?= true
enterprises.filter (enterprise)=>
show_profiles or enterprise.has_shopfront

View File

@@ -1,13 +1,16 @@
Darkswarm.filter 'taxons', (Matcher)->
# Filter anything that responds to object.taxons, and/or object.primary_taxon
Darkswarm.filter 'taxons', ()->
# Filter anything that responds to object.taxons, object.supplied_taxon or object.primary_taxon.
(objects, ids) ->
objects ||= []
ids ?= []
if ids.length == 0
# No taxons selected, pass all objects through.
objects
else
objects.filter (obj)->
taxons = obj.taxons
taxons.concat obj.supplied_taxons if obj.supplied_taxons
# Combine object taxons with supplied taxons, if they exist.
taxons = taxons.concat obj.supplied_taxons if obj.supplied_taxons
# Match primary taxon if it exists, then taxon array.
obj.primary_taxon?.id in ids || taxons.some (taxon)->
taxon.id in ids

View File

@@ -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

View File

@@ -1,4 +1,4 @@
Darkswarm.factory "AuthenticationService", (Navigation, $modal, $location, Redirections)->
Darkswarm.factory "AuthenticationService", (Navigation, $modal, $location, Redirections, Loading)->
new class AuthenticationService
selectedPath: "/login"
@@ -25,4 +25,9 @@ Darkswarm.factory "AuthenticationService", (Navigation, $modal, $location, Redir
active: Navigation.active
close: ->
Navigation.navigate "/"
if location.pathname == "/"
Navigation.navigate "/"
else
Loading.message = "Taking you back to the home page"
location.hash = ""
location.pathname = "/"

View File

@@ -8,6 +8,7 @@ Darkswarm.factory 'Cart', (CurrentOrder, Variants, $timeout, $http)->
for line_item in @line_items
line_item.variant.line_item = line_item
Variants.register line_item.variant
line_item.variant.extended_name = @extendedVariantName(line_item.variant)
orderChanged: =>
@unsaved()
@@ -43,6 +44,11 @@ Darkswarm.factory 'Cart', (CurrentOrder, Variants, $timeout, $http)->
@line_items.filter (li)->
li.quantity > 0
total_item_count: =>
@line_items_present().reduce (sum,li) ->
sum = sum + li.quantity
, 0
empty: =>
@line_items_present().length == 0
@@ -58,8 +64,17 @@ Darkswarm.factory 'Cart', (CurrentOrder, Variants, $timeout, $http)->
@create_line_item(variant) unless exists
create_line_item: (variant)->
variant.extended_name = @extendedVariantName(variant)
variant.line_item =
variant: variant
quantity: null
max_quantity: null
@line_items.push variant.line_item
extendedVariantName: (variant) =>
if variant.product_name == variant.name_to_display
variant.product_name
else
name = "#{variant.product_name} - #{variant.name_to_display}"
name += " (#{variant.options_text})" if variant.options_text
name

View File

@@ -1,3 +1,4 @@
Darkswarm.factory 'CurrentHub', ($location, $filter, currentHub) ->
Darkswarm.factory 'CurrentHub', (currentHub) ->
# Populate CurrentHub.hub from json in page. This is probably redundant now.
new class CurrentHub
hub: currentHub

View File

@@ -1,3 +1,4 @@
Darkswarm.factory 'CurrentOrder', (currentOrder) ->
# Populate Currentorder.order from json in page. This is probably redundant now.
new class CurrentOrder
order: currentOrder

View File

@@ -1,7 +1,4 @@
Darkswarm.factory 'CurrentUser', (user)-> # This is for the current user
if user and !$.isEmptyObject(user)
new class CurrentUser
constructor: ->
@[k] = v for k, v of user
else
undefined
new class CurrentUser
constructor: ->
@[k] = v for k, v of user if user and !$.isEmptyObject(user)

Some files were not shown because too many files have changed in this diff Show More