mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-01 21:47:16 +00:00
Merge remote-tracking branch 'origin/master' into transifex
Conflicts: config/locales/fr.yml
This commit is contained in:
1
Gemfile
1
Gemfile
@@ -90,6 +90,7 @@ gem 'jquery-rails'
|
||||
gem 'jquery-migrate-rails'
|
||||
gem 'css_splitter'
|
||||
|
||||
gem 'ofn-qz', github: 'openfoodfoundation/ofn-qz'
|
||||
|
||||
group :test, :development do
|
||||
# Pretty printed test output
|
||||
|
||||
10
Gemfile.lock
10
Gemfile.lock
@@ -21,6 +21,13 @@ GIT
|
||||
paypal-sdk-merchant (= 1.106.1)
|
||||
spree_core (~> 1.3.4)
|
||||
|
||||
GIT
|
||||
remote: git://github.com/openfoodfoundation/ofn-qz.git
|
||||
revision: 024680ccea429b2e5428d7b964fa67c52add34ec
|
||||
specs:
|
||||
ofn-qz (0.1.0)
|
||||
railties (~> 3.1)
|
||||
|
||||
GIT
|
||||
remote: git://github.com/openfoodfoundation/spree.git
|
||||
revision: a4c439570b77afa50f9e36299811f293232bd281
|
||||
@@ -694,6 +701,7 @@ DEPENDENCIES
|
||||
momentjs-rails
|
||||
newrelic_rpm
|
||||
nokogiri (>= 1.6.7.1)
|
||||
ofn-qz!
|
||||
oj
|
||||
paper_trail (~> 3.0.8)
|
||||
paperclip
|
||||
@@ -737,4 +745,4 @@ RUBY VERSION
|
||||
ruby 2.1.5p273
|
||||
|
||||
BUNDLED WITH
|
||||
1.13.6
|
||||
1.14.3
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
.ofn-drop-down
|
||||
%span
|
||||
%i.icon-check
|
||||
Actions
|
||||
= t('admin.actions')
|
||||
%i{ 'ng-class' => "expanded && 'icon-caret-up' || !expanded && 'icon-caret-down'" }
|
||||
%div.menu{ 'ng-show' => "expanded" }
|
||||
%a.menu_item{ 'ng-repeat' => "link in links", href: '{{link.url}}', target: "{{link.target || '_self'}}", data: { method: "{{ link.method || 'get' }}", confirm: "{{link.confirm}}" } }
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
#tag-rule-help
|
||||
.margin-bottom-30.text-center
|
||||
.text-big Tag Rules
|
||||
.text-big
|
||||
= t('js.admin.modals.tag_rule_help.title')
|
||||
|
||||
.margin-bottom-30
|
||||
.text-normal Overview
|
||||
%p Tag rules provide a way to describe which items are visible or otherwise to which customers. Items can be Shipping Methods, Payment Methods, Products and Order Cycles.
|
||||
.text-normal= t('js.admin.modals.tag_rule_help.overview')
|
||||
%p= t('js.admin.modals.tag_rule_help.overview_text')
|
||||
|
||||
.margin-bottom-30
|
||||
.text-normal 'By Default...' Rules
|
||||
%p Default rules allow you to hide items so that they are not visible by default. This behaviour can then be overriden by non-default rules for customers with particular tags.
|
||||
.text-normal= t('js.admin.modals.tag_rule_help.by_default_rules')
|
||||
%p= t('js.admin.modals.tag_rule_help.by_default_rules_text')
|
||||
|
||||
.margin-bottom-30
|
||||
.text-normal 'Customers Tagged...' Rules
|
||||
%p By creating rules related to a specific customer tag, you can override the default behaviour (whether it be to show or to hide items) for customers with the specified tag.
|
||||
.text-normal= t('js.admin.modals.tag_rule_help.customer_tagged_rules')
|
||||
%p= t('js.admin.modals.tag_rule_help.customer_tagged_rules_text')
|
||||
|
||||
.text-center
|
||||
%input.button.red.icon-plus{ type: 'button', value: 'Got it', ng: { click: 'close()' } }
|
||||
%input.button.red.icon-plus{ type: 'button', value: t('js.admin.modals.got_it'), ng: { click: 'close()' } }
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#new-tag-rule-dialog
|
||||
.text-normal.margin-bottom-30.text-center
|
||||
Select a rule type:
|
||||
= t('js.admin.new_tag_rule_dialog.select_rule_type')
|
||||
|
||||
.text-center.margin-bottom-30
|
||||
-# %select.fullwidth{ 'select2-min-search' => 5, 'ng-model' => 'newRuleType', 'ng-options' => 'ruleType.id as ruleType.name for ruleType in availableRuleTypes' }
|
||||
|
||||
@@ -2,130 +2,128 @@
|
||||
.alpha.eight.columns
|
||||
%div{ ng: { if: "!enterprise.is_primary_producer", switch: "enterprise.sells" } }
|
||||
.info{ ng: { switch: { when: "none" } } }
|
||||
%h3 Hub Profile
|
||||
%h3= t('js.admin.panels.enterprise_package.hub_profile')
|
||||
|
||||
%p
|
||||
%strong COST: ALWAYS FREE
|
||||
%strong= t('js.admin.panels.enterprise_package.hub_profile_cost')
|
||||
|
||||
%p People can find and contact you on the Open Food Network. Your enterprise will be visible on the map, and will be searchable in listings.
|
||||
%p= t('js.admin.panels.enterprise_package.hub_profile_text1')
|
||||
|
||||
%p Having a profile, and making connections within your local food system through the Open Food Network will always be free.
|
||||
%p= t('js.admin.panels.enterprise_package.hub_profile_text2')
|
||||
|
||||
.info{ ng: { switch: { when: "any" } } }
|
||||
%h3 Hub Shop
|
||||
%h3= t('js.admin.panels.enterprise_package.hub_shop')
|
||||
|
||||
%p
|
||||
%strong
|
||||
%monthly-pricing-description{ joiner: "comma" }
|
||||
|
||||
%p Your enterprise is the backbone of your local food system. You aggregate produce from other enterprises and can sell it through your shop on the Open Food Network.
|
||||
%p= t('js.admin.panels.enterprise_package.hub_shop_text1')
|
||||
|
||||
%p Hubs can take many forms, whether they be a food co-op, a buying group, a veggie-box program, or a local grocery store.
|
||||
%p= t('js.admin.panels.enterprise_package.hub_shop_text2')
|
||||
|
||||
%p If you also want to sell your own products, you will need to switch this enterprise to be a producer.
|
||||
%p= t('js.admin.panels.enterprise_package.hub_shop_text3')
|
||||
|
||||
.info{ ng: { switch: { default: true } } }
|
||||
%h3
|
||||
Please Choose a Package
|
||||
= t('js.admin.panels.enterprise_package.choose_package')
|
||||
%i.icon-arrow-right
|
||||
|
||||
%p
|
||||
%strong Your enterprise will not be fully activated until a package is selected from the options on the left.
|
||||
%strong= t('js.admin.panels.enterprise_package.choose_package_text1')
|
||||
|
||||
%p
|
||||
Click on an option to see more detailed information about each package, and hit the red SAVE button when you are done!
|
||||
|
||||
|
||||
= t('js.admin.panels.enterprise_package.choose_package_text2')
|
||||
|
||||
%div{ ng: { if: "enterprise.is_primary_producer", switch: "enterprise.sells" } }
|
||||
.info{ ng: { switch: { when: "none" } } }
|
||||
%h3 Profile Only
|
||||
%h3= t('js.admin.panels.enterprise_package.profile_only')
|
||||
|
||||
%p
|
||||
%strong COST: ALWAYS FREE
|
||||
%strong= t('js.admin.panels.enterprise_package.profile_only_cost')
|
||||
|
||||
%p A profile makes you visible and contactable to others and is a way to share your story.
|
||||
%p= t('js.admin.panels.enterprise_package.profile_only_text1')
|
||||
|
||||
%p If you prefer to focus on producing food, and want to leave the work of selling it to someone else, you won't require a shop on the Open Food Network.
|
||||
%p= t('js.admin.panels.enterprise_package.profile_only_text2')
|
||||
|
||||
%p Add your products to Open Food Network, allowing hubs to stock your products in their stores.
|
||||
%p= t('js.admin.panels.enterprise_package.profile_only_text3')
|
||||
|
||||
.info{ ng: { switch: { when: "own" } } }
|
||||
%h3 Producer Shop
|
||||
%h3= t('js.admin.panels.enterprise_package.producer_shop')
|
||||
|
||||
%p
|
||||
%strong
|
||||
%monthly-pricing-description{ joiner: "comma" }
|
||||
|
||||
%p Sell your products directly to customers through your very own Open Food Network shopfront.
|
||||
%p= t('js.admin.panels.enterprise_package.producer_shop_text1')
|
||||
|
||||
%p A Producer Shop is for your produce only, if you want to sell produce grown/produced off site, please select 'Producer Hub'.
|
||||
%p= t('js.admin.panels.enterprise_package.producer_shop_text2')
|
||||
|
||||
.info{ ng: { switch: { when: "any" } } }
|
||||
%h3 Producer Hub
|
||||
%h3= t('js.admin.panels.enterprise_package.producer_hub')
|
||||
|
||||
%p
|
||||
%strong
|
||||
%monthly-pricing-description{ joiner: "comma" }
|
||||
|
||||
%p Your enterprise is the backbone of your local food system. You can sell your own produce as well as produce aggregated from other enterprises through your shopfront on the Open Food Network.
|
||||
%p= t('js.admin.panels.enterprise_package.producer_hub_text1')
|
||||
|
||||
%p Producer Hubs can take many forms, whether they be a CSA, a veggie-box program, or a food co-op with a rooftop garden.
|
||||
%p= t('js.admin.panels.enterprise_package.producer_hub_text2')
|
||||
|
||||
%p The Open Food Network aims to support as many hub models as possible, so no matter your situation, we want to provide the tools you need to run your organisation or local food business.
|
||||
%p= t('js.admin.panels.enterprise_package.producer_hub_text3')
|
||||
|
||||
.info{ ng: { switch: { default: true } } }
|
||||
%h3
|
||||
Please Choose a Package
|
||||
= t('js.admin.panels.enterprise_package.choose_package')
|
||||
%i.icon-arrow-right
|
||||
|
||||
%p
|
||||
%strong Your producer enterprise will not be fully activated until a package is selected from the options on the left.
|
||||
%strong= t('js.admin.panels.enterprise_package.choose_package_text1')
|
||||
|
||||
%p
|
||||
Click on an option to see more detailed information about each package, and hit the red SAVE button when you are done!
|
||||
= t('js.admin.panels.enterprise_package.choose_package_text2')
|
||||
|
||||
.omega.eight.columns{ ng: { switch: "enterprise.is_primary_producer" } }
|
||||
%div{ ng: { switch: { when: "false" } } }
|
||||
%a.button.selector.hub-profile{ ng: { click: "enterprise.owned && (enterprise.sells='none')", class: "{selected: enterprise.sells=='none', disabled: !enterprise.owned}" } }
|
||||
.top
|
||||
%h3 Profile Only
|
||||
%p Get a listing
|
||||
.bottom ALWAYS FREE
|
||||
%h3= t('js.admin.panels.enterprise_package.profile_only')
|
||||
%p= t('js.admin.panels.enterprise_package.get_listing')
|
||||
.bottom= t('js.admin.panels.enterprise_package.always_free')
|
||||
%a.button.selector.hub{ ng: { click: "enterprise.owned && (enterprise.sells='any')", class: "{selected: enterprise.sells=='any', disabled: !enterprise.owned}" } }
|
||||
.top
|
||||
%h3 Hub Shop
|
||||
%p Sell produce from others
|
||||
%h3= t('js.admin.panels.enterprise_package.hub_shop')
|
||||
%p= t('js.admin.panels.enterprise_package.sell_produce_others')
|
||||
.bottom
|
||||
%monthly-pricing-description{ joiner: "newline" }
|
||||
|
||||
%div{ ng: { switch: { when: "true" } } }
|
||||
%a.button.selector.producer-profile{ ng: { click: "enterprise.owned && (enterprise.sells='none')", class: "{selected: enterprise.sells=='none', disabled: !enterprise.owned}" } }
|
||||
.top
|
||||
%h3 Profile Only
|
||||
%p Get a listing
|
||||
.bottom ALWAYS FREE
|
||||
%h3= t('js.admin.panels.enterprise_package.profile_only')
|
||||
%p= t('js.admin.panels.enterprise_package.get_listing')
|
||||
.bottom= t('js.admin.panels.enterprise_package.always_free')
|
||||
%a.button.selector.producer-shop{ ng: { click: "enterprise.owned && (enterprise.sells='own')", class: "{selected: enterprise.sells=='own', disabled: !enterprise.owned}" } }
|
||||
.top
|
||||
%h3 Producer Shop
|
||||
%p Sell your own produce
|
||||
%h3= t('js.admin.panels.enterprise_package.producer_shop')
|
||||
%p= t('js.admin.panels.enterprise_package.sell_own_produce')
|
||||
.bottom
|
||||
%monthly-pricing-description{ joiner: "newline" }
|
||||
|
||||
%a.button.selector.producer-hub{ ng: { click: "enterprise.owned && (enterprise.sells='any')", class: "{selected: enterprise.sells=='any', disabled: !enterprise.owned}" } }
|
||||
.top
|
||||
%h3 Producer Hub
|
||||
%p Sell produce from self and others
|
||||
%h3= t('js.admin.panels.enterprise_package.producer_hub')
|
||||
%p= t('js.admin.panels.enterprise_package.sell_both')
|
||||
.bottom
|
||||
%monthly-pricing-description{ joiner: "newline" }
|
||||
|
||||
%a.button.update.fullwidth{ ng: { show: "enterprise.owned", class: "{disabled: saved() && !saving, saving: saving}", click: "save()" } }
|
||||
%span{ ng: {hide: "saved() || saving" } }
|
||||
SAVE
|
||||
= t('js.admin.panels.save')
|
||||
%i.icon-save
|
||||
%span{ ng: {show: "saved() && !saving" } }
|
||||
SAVED
|
||||
= t('js.admin.panels.saved')
|
||||
%i.icon-ok-sign
|
||||
%span{ ng: {show: "saving" } }
|
||||
SAVING
|
||||
= t('js.admin.panels.saving')
|
||||
%i.icon-refresh
|
||||
|
||||
@@ -1,39 +1,37 @@
|
||||
.row.enterprise_producer_panel{ ng: { controller: 'indexProducerPanelCtrl' } }
|
||||
|
||||
.alpha.eight.columns
|
||||
.info{ ng: { show: "enterprise.is_primary_producer==true" } }
|
||||
%h3 Producer
|
||||
%p Producers make yummy things to eat &/or drink. You're a producer if you grow it, raise it, brew it, bake it, ferment it, milk it or mould it.
|
||||
|
||||
%p Producers can also perform other functions, such as aggregating food from other enterprises and selling it through a shop on the Open Food Network.
|
||||
%h3= t('js.admin.panels.enterprise_producer.producer')
|
||||
%p= t('js.admin.panels.enterprise_producer.producer_text1')
|
||||
|
||||
%p= t('js.admin.panels.enterprise_producer.producer_text2')
|
||||
|
||||
.info{ ng: { show: "enterprise.is_primary_producer==false" } }
|
||||
%h3 Non-Producer
|
||||
%p Non-producers do not produce any food themselves, meaning that they cannot create their own products for sale through the Open Food Network.
|
||||
%h3= t('js.admin.panels.enterprise_producer.non_producer')
|
||||
%p= t('js.admin.panels.enterprise_producer.non_producer_text1')
|
||||
|
||||
%p Instead, non-producers specialise in linking producers to the end eater, whether it be by aggregating, grading, packing, selling or delivering food.
|
||||
%p= t('js.admin.panels.enterprise_producer.non_producer_text2')
|
||||
|
||||
.omega.eight.columns
|
||||
%a.button.selector.producer{ ng: { click: 'enterprise.owned && changeToProducer()', class: "{selected: enterprise.is_primary_producer==true, disabled: !enterprise.owned}" } }
|
||||
.top
|
||||
%h3 PRODUCER
|
||||
%p Producers of food
|
||||
.bottom eg. GROWERS, BAKERS, BREWERS, MAKERS
|
||||
%h3= t('js.admin.panels.enterprise_producer.producer')
|
||||
%p= t('js.admin.panels.enterprise_producer.producer_desc')
|
||||
.bottom= t('js.admin.panels.enterprise_producer.producer_example')
|
||||
|
||||
%a.button.selector.non-producer{ ng: { click: 'enterprise.owned && changeToNonProducer()', class: "{selected: enterprise.is_primary_producer==false, disabled: !enterprise.owned}" } }
|
||||
.top
|
||||
%h3 Non-Producer
|
||||
%p All other food enterprises
|
||||
.bottom eg. Grocery stores, Food co-ops, Buying groups
|
||||
%h3= t('js.admin.panels.enterprise_producer.non_producer')
|
||||
%p= t('js.admin.panels.enterprise_producer.non_producer_desc')
|
||||
.bottom= t('js.admin.panels.enterprise_producer.non_producer_example')
|
||||
|
||||
%a.button.update.fullwidth{ ng: { show: "enterprise.owned", class: "{disabled: saved() && !saving, saving: saving}", click: "save()" } }
|
||||
%span{ ng: {hide: "saved() || saving" } }
|
||||
SAVE
|
||||
= t('js.admin.panels.save')
|
||||
%i.icon-save
|
||||
%span{ ng: {show: "saved() && !saving" } }
|
||||
SAVED
|
||||
= t('js.admin.panels.saved')
|
||||
%i.icon-ok-sign
|
||||
%span{ ng: {show: "saving" } }
|
||||
SAVING
|
||||
= t('js.admin.panels.saving')
|
||||
%i.icon-refresh
|
||||
|
||||
@@ -1,18 +1,17 @@
|
||||
.row.enterprise_status_panel{ ng: { controller: 'indexStatusPanelCtrl' } }
|
||||
.alpha.omega.sixteen.columns
|
||||
|
||||
%h4.status-ok.text-center{ ng: { show: "issues.length == 0 && warnings.length == 0" } }
|
||||
%i.icon-ok-sign
|
||||
{{ object.name }} is set up and ready to go!
|
||||
= t('js.admin.panels.enterprise_status.status_title', name: '{{ object.name }}')
|
||||
|
||||
%table{ ng: { show: "issues.length > 0 || warnings.length > 0" } }
|
||||
%thead
|
||||
%th.severity
|
||||
Severity
|
||||
= t('js.admin.panels.enterprise_status.severity')
|
||||
%th.description
|
||||
Description
|
||||
= t('js.admin.panels.enterprise_status.description')
|
||||
%th.resolve
|
||||
Resolve
|
||||
= t('js.admin.panels.enterprise_status.resolve')
|
||||
%tr{ ng: { repeat: "issue in issues"} }
|
||||
%td.severity
|
||||
%i.icon-warning-sign.issue
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
%div{ ng: { show: "data.length > limit" } }
|
||||
%input{ type: 'button', value: 'Show More', ng: { click: 'limit = limit + increment' } }
|
||||
%input{ type: 'button', value: t(:show_more), ng: { click: 'limit = limit + increment' } }
|
||||
or
|
||||
%input{ type: 'button', value: "Show All ({{ data.length - limit }} More)", ng: { click: 'limit = data.length' } }
|
||||
%input{ type: 'button', value: t(:show_more_with_more, num: '{{ data.length - limit }}'), ng: { click: 'limit = data.length' } }
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
{{$getDisplayText()}}
|
||||
%span.tag-with-rules{ ng: { if: "data.rules == 1" } }
|
||||
—
|
||||
= t 'admin.has_one_rule'
|
||||
= t('admin.has_one_rule')
|
||||
%span.tag-with-rules{ ng: { if: "data.rules > 1" } }
|
||||
—
|
||||
= t 'admin.has_n_rules', { num: '{{data.rules}}' }
|
||||
= t('admin.has_n_rules', { num: '{{data.rules}}' })
|
||||
%span{ ng: { if: "!data.rules" } }
|
||||
{{$getDisplayText()}}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
%a.close-reveal-modal{"ng-click" => "$close()"}
|
||||
%i.ofn-i_009-close
|
||||
|
||||
%h3 Reduced stock available
|
||||
%h3= t('js.out_of_stock.reduced_stock_available')
|
||||
|
||||
%p While you've been shopping, the stock levels for one or more of the products in your cart have reduced. Here's what's changed:
|
||||
%p= t('js.out_of_stock.out_of_stock_text')
|
||||
|
||||
%p{'ng-repeat' => "v in variants"}
|
||||
%em {{ v.name_to_display }} - {{ v.unit_to_display }}
|
||||
%span{'ng-if' => "v.count_on_hand == 0"}
|
||||
is now out of stock.
|
||||
= t('js.out_of_stock.now_out_of_stock')
|
||||
%span{'ng-if' => "v.count_on_hand > 0"}
|
||||
now only has {{ v.count_on_hand }} remaining.
|
||||
= t('js.out_of_stock.only_n_remainging', num: '{{ v.count_on_hand }}')
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
%div#registration-modal{"ng-controller" => "RegistrationCtrl"}
|
||||
%div{ ng: { show: "currentStep() == 'introduction'" } }
|
||||
%ng-include{ src: "'registration/introduction.html'" }
|
||||
%div{ ng: { repeat: 'step in steps', show: "currentStep() == step" } }
|
||||
%ng-include{ src: "'registration/'+ step + '.html'" }
|
||||
%div{ ng: { show: "currentStep() == 'finished'" } }
|
||||
%ng-include{ src: "'registration/finished.html'" }
|
||||
|
||||
%a.close-reveal-modal{"ng-click" => "$close()"}
|
||||
%i.ofn-i_009-close
|
||||
@@ -1,57 +0,0 @@
|
||||
.container#registration-about
|
||||
%ng-include{ src: "'registration/steps.html'" }
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'enterprise_about_headline' | t}}
|
||||
%h5
|
||||
{{'enterprise_about_message' | t}}
|
||||
%span{ ng: { class: "{brick: !enterprise.is_primary_producer, turquoise: enterprise.is_primary_producer}" } }
|
||||
{{ enterprise.name }}
|
||||
|
||||
%form{ name: 'about', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "update('images',about)" } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.alert-box.info{ "ofn-inline-alert" => true, ng: { show: "visible" } }
|
||||
%h6{ "ng-bind" => "'enterprise_success' | t:{enterprise: enterprise.name}" }
|
||||
%span {{'enterprise_registration_exit_message' | t}}
|
||||
%a.close{ ng: { click: "close()" } } ×
|
||||
|
||||
.small-12.large-8.columns
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_description' } {{'enterprise_description' | t}}:
|
||||
%input.chunky{ id: 'enterprise_description', placeholder: "{{'enterprise_description_placeholder' | t}}", ng: { model: 'enterprise.description' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_long_desc' } {{'enterprise_long_desc' | t}}:
|
||||
%textarea.chunky{ id: 'enterprise_long_desc', rows: 6, placeholder: "{{'enterprise_long_desc_placeholder' | t}}", ng: { model: 'enterprise.long_description' } }
|
||||
%small{ "ng-bind" => "'enterprise_long_desc_length' | t:{num: enterprise.long_description.length}" }
|
||||
.small-12.large-4.columns
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_abn' } {{'enterprise_abn' | t}}:
|
||||
%input.chunky{ id: 'enterprise_abn', placeholder: "{{'enterprise_abn_placeholder' | t}}", ng: { model: 'enterprise.abn' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_acn' } {{'enterprise_acn' | t}}:
|
||||
%input.chunky{ id: 'enterprise_acn', placeholder: "{{'enterprise_acn_placeholder' | t}}", ng: { model: 'enterprise.acn' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_charges_sales_tax' }= t(:charges_sales_tax)
|
||||
%input{ id: 'enterprise_charges_sales_tax_true', type: 'radio', name: 'charges_sales_tax', value: 'true', required: true, ng: { model: 'enterprise.charges_sales_tax' } }
|
||||
%label{ for: 'enterprise_charges_sales_tax_true' } {{'say_yes' | t}}
|
||||
%input{ id: 'enterprise_charges_sales_tax_false', type: 'radio', name: 'charges_sales_tax', value: 'false', required: true, ng: { model: 'enterprise.charges_sales_tax' } }
|
||||
%label{ for: 'enterprise_charges_sales_tax_false' } {{'say_no' | t}}
|
||||
%span.error.small-12.columns{ ng: { show: "about.charges_sales_tax.$error.required && submitted" } }
|
||||
{{'enterprise_tax_required' | t}}
|
||||
|
||||
.row.buttons.pad-top
|
||||
.small-12.columns
|
||||
%input.button.primary.right{ type: "submit", value: "{{'continue' | t}}" }
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
.container#registration-contact
|
||||
%ng-include{ src: "'registration/steps.html'" }
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'registration_greeting' | t}}
|
||||
%h5{ "ng-bind" => "'who_is_managing_enterprise' | t:{enterprise: enterprise.name}" }
|
||||
|
||||
%form{ name: 'contact', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "selectIfValid('type',contact)" } }
|
||||
.row.content
|
||||
.small-12.medium-12.large-7.columns
|
||||
.row
|
||||
.small-12.columns.field
|
||||
%label{ for: 'enterprise_contact' } {{'enterprise_contact' | t}}:
|
||||
%input.chunky.small-12.columns{ id: 'enterprise_contact', name: 'contact', required: true, placeholder: "Contact Name", ng: { model: 'enterprise.contact' } }
|
||||
%span.error.small-12.columns{ ng: { show: "contact.contact.$error.required && submitted" } }
|
||||
{{'enterprise_contact_required' | t}}
|
||||
.row
|
||||
.small-12.columns.field
|
||||
%label{ for: 'enterprise_email_address' } {{'enterprise_email_address' | t}}:
|
||||
%input.chunky.small-12.columns{ id: 'enterprise_email_address', name: 'email_address', type: 'email', placeholder: "eg. charlie@thefarm.com", ng: { model: 'enterprise.email_address' } }
|
||||
.row
|
||||
.small-12.columns.field
|
||||
%label{ for: 'enterprise_phone' } {{'enterprise_phone' | t}}:
|
||||
%input.chunky.small-12.columns{ id: 'enterprise_phone', name: 'phone', placeholder: "eg. (03) 1234 5678", ng: { model: 'enterprise.phone' } }
|
||||
.small-12.medium-12.large-5.hide-for-small-only
|
||||
|
||||
.row.buttons
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "{{'back' | t}}", ng: { click: "select('details')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "{{'continue' | t}}" }
|
||||
@@ -1,64 +0,0 @@
|
||||
.container#registration-details
|
||||
%ng-include{ src: "'registration/steps.html'" }
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'registration_detail_headline' | t}}
|
||||
%h5{ ng: { if: "::enterprise.type != 'own'" } } {{'registration_detail_enterprise' | t}}
|
||||
%h5{ ng: { if: "::enterprise.type == 'own'" } } {{'registration_detail_producer' | t}}
|
||||
|
||||
%form{ name: 'details', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "selectIfValid('contact',details)" } }
|
||||
|
||||
.row
|
||||
.small-12.medium-9.large-12.columns.end
|
||||
.field
|
||||
%label{ for: 'enterprise_name', ng: { if: "::enterprise.type != 'own'" } } {{'registration_detail_name_enterprise' | t}}
|
||||
%label{ for: 'enterprise_name', ng: { if: "::enterprise.type == 'own'" } } {{'registration_detail_name_producer' | t}}
|
||||
%input.chunky{ id: 'enterprise_name', name: 'name', placeholder: "{{'registration_detail_name_placeholder' | t}}", required: true, ng: { model: 'enterprise.name' } }
|
||||
%span.error{ ng: { show: "details.name.$error.required && submitted" } }
|
||||
{{'registration_detail_name_error' | t}}
|
||||
|
||||
.row
|
||||
.small-12.medium-9.large-6.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_address' } {{'registration_detail_address1' | t}}
|
||||
%input.chunky{ id: 'enterprise_address', name: 'address1', required: true, placeholder: "{{'registration_detail_address1_placeholder' | t}}", required: true, ng: { model: 'enterprise.address.address1' } }
|
||||
%span.error{ ng: { show: "details.address1.$error.required && submitted" } }
|
||||
{{'registration_detail_address1_error' | t}}
|
||||
.field
|
||||
%label{ for: 'enterprise_address2' } {{'registration_detail_address2' | t}}
|
||||
%input.chunky{ id: 'enterprise_address2', name: 'address2', required: false, placeholder: "", required: false, ng: { model: 'enterprise.address.address2' } }
|
||||
|
||||
.small-12.medium-9.large-6.columns.end
|
||||
.row
|
||||
.small-12.medium-8.large-8.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_city' } {{'registration_detail_suburb' | t}}
|
||||
%input.chunky{ id: 'enterprise_city', name: 'city', required: true, placeholder: "{{'registration_detail_suburb_placeholder' | t}}", ng: { model: 'enterprise.address.city' } }
|
||||
%span.error{ ng: { show: "details.city.$error.required && submitted" } }
|
||||
{{'registration_detail_suburb_error' | t}}
|
||||
.small-12.medium-4.large-4.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_zipcode' } {{'registration_detail_postcode' | t}}
|
||||
%input.chunky{ id: 'enterprise_zipcode', name: 'zipcode', required: true, placeholder: "{{'registration_detail_postcode_placeholder' | t}}", ng: { model: 'enterprise.address.zipcode' } }
|
||||
%span.error{ ng: { show: "details.zipcode.$error.required && submitted" } }
|
||||
{{'registration_detail_postcode_error' | t}}
|
||||
.row
|
||||
.small-12.medium-4.large-4.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_state' } {{'registration_detail_state' | t}}
|
||||
%select.chunky{ id: 'enterprise_state', name: 'state', ng: { model: 'enterprise.address.state_id', options: 's.id as s.abbr for s in enterprise.country.states', show: 'countryHasStates()', required: 'countryHasStates()' } }
|
||||
%span.error{ ng: { show: "details.state.$error.required && submitted" } }
|
||||
{{'registration_detail_state_error' | t}}
|
||||
.small-12.medium-8.large-8.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_country' } {{'registration_detail_country' | t}}
|
||||
%select.chunky{ id: 'enterprise_country', name: 'country', required: true, ng: { model: 'enterprise.country', options: 'c as c.name for c in countries' } }
|
||||
%span.error{ ng: { show: "details.country.$error.required && submitted" } }
|
||||
{{'registration_detail_country_error' | t}}
|
||||
|
||||
|
||||
.row.buttons
|
||||
.small-12.columns
|
||||
%hr
|
||||
%input.button.primary.right{ type: "submit", value: "{{'continue' | t}}" }
|
||||
@@ -1,15 +0,0 @@
|
||||
.container#registration-finished
|
||||
.row
|
||||
.small-12.columns.pad-top
|
||||
%header
|
||||
%h2 {{'registration_finished_headline' | t}}
|
||||
.panel.callout
|
||||
%p{ "ng-bind" => "'registration_finished_thanks' | t:{enterprise: enterprise.name}" }
|
||||
%p {{'registration_finished_login' | t}}
|
||||
.row
|
||||
.small-12.columns.text-center
|
||||
%h4{ "ng-bind" => "'registration_finished_activate' | t:{enterprise: enterprise.name}" }
|
||||
|
||||
%p{ "ng-bind-html" => "'registration_finished_activate_instruction_html' | t:{email: enterprise.email}"}
|
||||
|
||||
%a.button.primary{ type: "button", href: "/" } {{'registration_finished_action' | t}} >
|
||||
@@ -1,22 +0,0 @@
|
||||
.container#registration-images{ 'nv-file-drop' => true, uploader: "imageUploader", options:"{ alias: imageStep }", ng: { controller: "EnterpriseImageCtrl" } }
|
||||
%ng-include{ src: "'registration/steps.html'" }
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'registration_images_headline' | t}}
|
||||
%h5 {{'registration_images_description' | t}}
|
||||
|
||||
%form{ name: 'images', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "select('social')" } }
|
||||
.row{ ng: { repeat: 'image_step in imageSteps', show: "imageStep == image_step" } }
|
||||
%ng-include{ src: "'registration/images/'+ image_step + '.html'" }
|
||||
|
||||
.row.buttons.pad-top{ ng: { if: "imageStep == 'logo'" } }
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "Back", ng: { click: "select('about')" } }
|
||||
|
||||
%input.button.primary.right{ type: "button", value: "Continue", ng: { click: "imageSelect('promo')" } }
|
||||
|
||||
.row.buttons.pad-top{ ng: { if: "imageStep == 'promo'" } }
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "{{'back' | t}}", ng: { click: "imageSelect('logo')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "{{'continue' | t}}" }
|
||||
@@ -1,45 +0,0 @@
|
||||
.small-12.medium-12.large-6.columns
|
||||
.row
|
||||
.small-12.columns.center
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%h4
|
||||
{{'select_logo' | t}}
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%span.small
|
||||
{{'logo_tip' | t}}
|
||||
.row.pad-top
|
||||
.small-12.columns
|
||||
.image-select.small-12.columns
|
||||
%label.small-12.columns.button{ for: 'image-select' } {{'logo_label' | t}}
|
||||
%input#image-select{ type: 'file', hidden: true, 'nv-file-select' => true, uploader: "imageUploader", options: '{ alias: imageStep }' }
|
||||
.row.show-for-large-up
|
||||
.large-12.columns
|
||||
%span#or.large-12.columns
|
||||
{{'action_or' | t}}
|
||||
.row.show-for-large-up
|
||||
.large-12.columns
|
||||
#image-over{ 'nv-file-over' => true, uploader: "imageUploader" }
|
||||
{{'logo_drag' | t}}
|
||||
.small-12.medium-12.large-6.columns
|
||||
.row
|
||||
.small-12.columns.center
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%h4
|
||||
{{'review_logo' | t}}
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%span.small
|
||||
{{'review_logo_tip' | t}}
|
||||
.row.pad-top
|
||||
.small-12.columns.center
|
||||
#image-placeholder.logo
|
||||
%img{ ng: { show: "imageSrc() && !imageUploader.isUploading", src: '{{ imageSrc() }}' } }
|
||||
.message{ ng: { hide: "imageSrc() || imageUploader.isUploading" } }
|
||||
{{'logo_placeholder' | t}}
|
||||
.loading{ ng: { hide: "!imageUploader.isUploading" } }
|
||||
%img.spinner{ src: "/assets/spinning-circles.svg" }
|
||||
%br/
|
||||
{{'uploading' | t}}
|
||||
@@ -1,43 +0,0 @@
|
||||
.small-12.medium-12.large-12.columns
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%h4
|
||||
{{'select_promo_image' | t}}
|
||||
.row
|
||||
.small-12.medium-12.large-5.columns.center
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%span.small
|
||||
{{'promo_image_tip' | t}}
|
||||
.row.pad-top
|
||||
.small-12.columns
|
||||
.image-select.small-12.columns
|
||||
%label.small-12.columns.button{ for: 'image-select' } {{'promo_image_label' | t}}
|
||||
%input#image-select{ type: 'file', hidden: true, 'nv-file-select' => true, uploader: "imageUploader", options: '{ alias: imageStep }' }
|
||||
.large-2.columns
|
||||
%span#or.horizontal.large-12.columns
|
||||
{{'action_or' | t}}
|
||||
.large-5.columns
|
||||
#image-over{ 'nv-file-over' => true, uploader: "imageUploader" }
|
||||
{{'promo_image_drag' | t}}
|
||||
.small-12.medium-12.large-12.columns.pad-top
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%h4
|
||||
{{'review_promo_image' | t}}
|
||||
.row
|
||||
.small-12.columns.center
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%span.small
|
||||
{{'review_promo_image_tip' | t}}
|
||||
.row.pad-top
|
||||
.small-12.columns.center
|
||||
#image-placeholder.promo
|
||||
%img{ ng: { show: "imageSrc() && !imageUploader.isUploading", src: '{{ imageSrc() }}' } }
|
||||
.message{ ng: { hide: "imageSrc() || imageUploader.isUploading" } }
|
||||
{{'promo_image_placeholder' | t}}
|
||||
.loading{ ng: { hide: "!imageUploader.isUploading" } }
|
||||
%img.spinner{ src: "/assets/spinning-circles.svg" }
|
||||
%br/
|
||||
{{'uploading' | t}}
|
||||
@@ -1,41 +0,0 @@
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'registration_greeting' | t}}
|
||||
%h4
|
||||
%small
|
||||
%i.ofn-i_040-hub
|
||||
{{'registration_intro' | t}}
|
||||
.hide-for-large-up
|
||||
%hr
|
||||
%input.button.small.primary{ type: "button", value: "{{'registration_action' | t}}", ng: { click: "select('details')" } }
|
||||
%hr
|
||||
|
||||
.row{ 'data-equalizer' => true }
|
||||
.small-12.medium-12.large-6.columns.pad-top{ 'data-equalizer-watch' => true }
|
||||
%h5 {{'registration_checklist' | t}}:
|
||||
%ul.check-list
|
||||
%li
|
||||
{{'registration_time' | t}}
|
||||
%li
|
||||
{{'registration_enterprise_address' | t}}
|
||||
%li
|
||||
{{'registration_contact_details' | t}}
|
||||
%li
|
||||
{{'registration_logo' | t}}
|
||||
%li
|
||||
{{'registration_promo_image' | t}}
|
||||
%li
|
||||
{{'registration_about_us' | t}}
|
||||
|
||||
.small-9.medium-8.large-5.columns.pad-top.end{ 'data-equalizer-watch' => true}
|
||||
%h5
|
||||
{{'registration_outcome_headline' | t}}
|
||||
%p{ "ng-bind-html" => "t('registration_outcome1_html')" }
|
||||
%p {{'registration_outcome2' | t}}
|
||||
%p {{'registration_outcome3' | t}}
|
||||
|
||||
.row.show-for-large-up
|
||||
.small-12.columns
|
||||
%hr
|
||||
%input.button.primary.right{ type: "button", value: "{{'registration_action' | t}}", ng: { click: "select('details')" } }
|
||||
@@ -1,16 +0,0 @@
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'limit_reached_headline' | t}}
|
||||
%h4 {{'limit_reached_message' | t}}
|
||||
.row
|
||||
.small-12.medium-3.large-2.columns.text-right.hide-for-small-only
|
||||
%img{:src => "/assets/potatoes.png"}
|
||||
.small-12.medium-9.large-10.columns
|
||||
%p
|
||||
{{'limit_reached_text' | t}}
|
||||
%strong Open Food Network.
|
||||
.row
|
||||
.small-12.columns
|
||||
%hr
|
||||
%input.button.primary{ type: "button", value: "{{'limit_reached_action' | t}}", ng: { click: "close()" } }
|
||||
@@ -1,45 +0,0 @@
|
||||
.container#registration-social
|
||||
%ng-include{ src: "'registration/steps.html'" }
|
||||
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'enterprise_final_step' | t}}
|
||||
%h5{ "ng-bind" => "'enterprise_social_text' | t:{enterprise: enterprise.name}" }
|
||||
|
||||
%form{ name: 'social', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "update('finished',social)" } }
|
||||
.row.content
|
||||
.small-12.large-7.columns
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_website' } {{'website' | t}}:
|
||||
%input.chunky{ id: 'enterprise_website', placeholder: "{{'website_placeholder' | t}}", ng: { model: 'enterprise.website' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_facebook' } {{'facebook' | t}}:
|
||||
%input.chunky{ id: 'enterprise_facebook', placeholder: "{{'facebook_placeholder' | t}}", ng: { model: 'enterprise.facebook' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_linkedin' } {{'linkedin' | t}}:
|
||||
%input.chunky{ id: 'enterprise_linkedin', placeholder: "{{'linkedin_placeholder' | t}}", ng: { model: 'enterprise.linkedin' } }
|
||||
.small-12.large-5.columns
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_twitter' } {{'twitter' | t}}:
|
||||
%input.chunky{ id: 'enterprise_twitter', placeholder: "{{'twitter_placeholder' | t}}", ng: { model: 'enterprise.twitter' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_instagram' } {{'instagram' | t}}:
|
||||
%input.chunky{ id: 'enterprise_instagram', placeholder: "{{'instagram_placeholder' | t}}", ng: { model: 'enterprise.instagram' } }
|
||||
|
||||
.row.buttons
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "{{'back' | t}}", ng: { click: "select('images')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "{{'continue' | t}}" }
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
.row#progress-bar
|
||||
.small-12.medium-2.columns.item{ ng: { repeat: 'step in steps', class: "{active: (currentStep() == step),'show-for-medium-up': (currentStep() != step)}" } }
|
||||
{{ $index+1 + ". " + step }}
|
||||
@@ -1,47 +0,0 @@
|
||||
.container#registration-type
|
||||
|
||||
%ng-include{ src: "'registration/steps.html'" }
|
||||
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2{ "ng-bind" => "'registration_type_headline' | t:{enterprise: enterprise.name}" }
|
||||
%h4
|
||||
{{'registration_type_question' | t}}
|
||||
|
||||
%form{ name: 'type', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "create(type)" } }
|
||||
.row#enterprise-types{ 'data-equalizer' => true, ng: { if: "::enterprise.type != 'own'" } }
|
||||
.small-12.columns.field
|
||||
.row
|
||||
.small-12.medium-6.large-6.columns{ 'data-equalizer-watch' => true }
|
||||
%a.btnpanel#producer-panel{ href: "#", ng: { click: "enterprise.is_primary_producer = true", class: "{selected: enterprise.is_primary_producer}" } }
|
||||
%i.ofn-i_059-producer
|
||||
%h4 {{'registration_type_producer' | t}}
|
||||
|
||||
.small-12.medium-6.large-6.columns{ 'data-equalizer-watch' => true }
|
||||
%a.btnpanel#hub-panel{ href: "#", ng: { click: "enterprise.is_primary_producer = false", class: "{selected: enterprise.is_primary_producer == false}" } }
|
||||
%i.ofn-i_063-hub
|
||||
%h4 {{'registration_type_no_producer' | t}}
|
||||
|
||||
.row
|
||||
.small-12.columns
|
||||
%input.chunky{ id: 'enterprise_is_primary_producer', name: 'is_primary_producer', hidden: true, required: true, ng: { model: 'enterprise.is_primary_producer' } }
|
||||
%span.error{ ng: { show: "type.is_primary_producer.$error.required && submitted" } }
|
||||
{{'registration_type_error' | t}}
|
||||
.row
|
||||
.small-12.columns
|
||||
.panel.callout
|
||||
.left
|
||||
%i.ofn-i_013-help
|
||||
|
||||
%p {{'registration_type_producer_help' | t}}
|
||||
.panel.callout
|
||||
.left
|
||||
%i.ofn-i_013-help
|
||||
|
||||
%p {{'registration_type_no_producer_help' | t}}
|
||||
|
||||
.row.buttons
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "{{'back' | t}}", ng: { click: "select('contact')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "{{'create_profile' | t}}" }
|
||||
@@ -6,7 +6,8 @@ class Admin::BusinessModelConfigurationController < Spree::Admin::BaseController
|
||||
|
||||
def update
|
||||
Spree::Config.set(params[:settings])
|
||||
flash[:success] = t(:successfully_updated, :resource => t(:business_model_configuration))
|
||||
flash[:success] = t(:successfully_updated,
|
||||
resource: t('admin.business_model_configuration.edit.business_model_configuration'))
|
||||
redirect_to_edit
|
||||
end
|
||||
|
||||
|
||||
13
app/controllers/admin/invoice_settings_controller.rb
Normal file
13
app/controllers/admin/invoice_settings_controller.rb
Normal file
@@ -0,0 +1,13 @@
|
||||
class Admin::InvoiceSettingsController < Spree::Admin::BaseController
|
||||
|
||||
def update
|
||||
Spree::Config.set(params[:preferences])
|
||||
|
||||
respond_to do |format|
|
||||
format.html {
|
||||
redirect_to main_app.edit_admin_invoice_settings_path
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
@@ -77,7 +77,8 @@ Spree::Admin::OrdersController.class_eval do
|
||||
end
|
||||
|
||||
def invoice
|
||||
pdf = render_to_string pdf: "invoice-#{@order.number}.pdf", template: "spree/admin/orders/invoice", formats: [:html], encoding: "UTF-8"
|
||||
template = if Spree::Config.invoice_style2? then "spree/admin/orders/invoice2" else "spree/admin/orders/invoice" end
|
||||
pdf = render_to_string pdf: "invoice-#{@order.number}.pdf", template: template, formats: [:html], encoding: "UTF-8"
|
||||
Spree::OrderMailer.invoice_email(@order.id, pdf).deliver
|
||||
flash[:success] = t(:invoice_email_sent)
|
||||
|
||||
@@ -85,7 +86,12 @@ Spree::Admin::OrdersController.class_eval do
|
||||
end
|
||||
|
||||
def print
|
||||
render pdf: "invoice-#{@order.number}", template: "spree/admin/orders/invoice", encoding: "UTF-8"
|
||||
template = if Spree::Config.invoice_style2? then "spree/admin/orders/invoice2" else "spree/admin/orders/invoice" end
|
||||
render pdf: "invoice-#{@order.number}", template: template, encoding: "UTF-8"
|
||||
end
|
||||
|
||||
def print_ticket
|
||||
render template: "spree/admin/orders/ticket", layout: false
|
||||
end
|
||||
|
||||
def update_distribution_charge
|
||||
|
||||
@@ -38,6 +38,10 @@ Spree::Admin::ReportsController.class_eval do
|
||||
["Payment Methods Report", :payment_methods],
|
||||
["Delivery Report", :delivery]
|
||||
],
|
||||
sales_tax: [
|
||||
["Tax Types", :tax_types],
|
||||
["Tax Rates", :tax_rates]
|
||||
],
|
||||
packing: [
|
||||
["Pack By Customer", :pack_by_customer],
|
||||
["Pack By Supplier", :pack_by_supplier]
|
||||
@@ -59,6 +63,8 @@ Spree::Admin::ReportsController.class_eval do
|
||||
render_to_string(partial: 'order_cycle_management_description', layout: false, locals: {report_types: REPORT_TYPES[:order_cycle_management]}).html_safe
|
||||
@reports[:packing][:description] =
|
||||
render_to_string(partial: 'packing_description', layout: false, locals: {report_types: REPORT_TYPES[:packing]}).html_safe
|
||||
@reports[:sales_tax][:description] =
|
||||
render_to_string(partial: 'sales_tax_description', layout: false, locals: {report_types: REPORT_TYPES[:sales_tax]}).html_safe
|
||||
} } }
|
||||
|
||||
|
||||
@@ -159,6 +165,7 @@ Spree::Admin::ReportsController.class_eval do
|
||||
def sales_tax
|
||||
prepare_date_params params
|
||||
@distributors = Enterprise.is_distributor.managed_by(spree_current_user)
|
||||
@report_type = params[:report_type]
|
||||
|
||||
@report = OpenFoodNetwork::SalesTaxReport.new spree_current_user, params
|
||||
|
||||
@@ -320,8 +327,7 @@ Spree::Admin::ReportsController.class_eval do
|
||||
:order_cycle_management => {:name => "Order Cycle Management", :description => ''},
|
||||
:sales_tax => { :name => "Sales Tax", :description => "Sales Tax For Orders" },
|
||||
:xero_invoices => { :name => "Xero Invoices", :description => 'Invoices for import into Xero' },
|
||||
:packing => { :name => "Packing Reports", :description => '' },
|
||||
:sales_tax => { :name => "Sales Tax", :description => "Sales Tax For Orders" }
|
||||
:packing => { :name => "Packing Reports", :description => '' }
|
||||
}
|
||||
# Return only reports the user is authorized to view.
|
||||
reports.select { |action| can? action, :report }
|
||||
|
||||
@@ -43,6 +43,29 @@ module CheckoutHelper
|
||||
Spree::Money.new order.total_tax, currency: order.currency
|
||||
end
|
||||
|
||||
def display_checkout_taxes_hash(order)
|
||||
order.tax_adjustment_totals.each_with_object(Hash.new) do |(tax_rate, tax_amount), hash|
|
||||
hash[number_to_percentage(tax_rate * 100, :precision => 1)] = Spree::Money.new tax_amount, currency: order.currency
|
||||
end
|
||||
end
|
||||
|
||||
def display_line_item_tax_rates(line_item)
|
||||
line_item.tax_rates.map { |tr| number_to_percentage(tr.amount * 100, :precision => 1) }.join(", ")
|
||||
end
|
||||
|
||||
def display_adjustment_tax_rates(adjustment)
|
||||
tax_rate = (adjustment.included_tax / (adjustment.amount - adjustment.included_tax)).round(2)
|
||||
if tax_rate == 0 || tax_rate.infinite?
|
||||
""
|
||||
else
|
||||
number_to_percentage(tax_rate * 100, :precision => 1)
|
||||
end
|
||||
end
|
||||
|
||||
def display_adjustment_amount(adjustment)
|
||||
Spree::Money.new(adjustment.amount, { :currency => adjustment.currency })
|
||||
end
|
||||
|
||||
def display_checkout_total_less_tax(order)
|
||||
Spree::Money.new order.total - order.total_tax, currency: order.currency
|
||||
end
|
||||
|
||||
@@ -13,6 +13,10 @@ module Spree
|
||||
links << { name: t(:send_invoice), url: "#", icon: 'icon-email', confirm: t(:must_have_valid_business_number, enterprise_name: order.distributor.name) }
|
||||
end
|
||||
links << { name: t(:print_invoice), url: print_admin_order_path(order), icon: 'icon-print', target: "_blank" }
|
||||
if Spree::Config.enable_receipt_printing?
|
||||
links << { name: t(:print_ticket), url: print_ticket_admin_order_path(order), icon: 'icon-print', target: "_blank" }
|
||||
links << { name: t(:select_ticket_printer), url: "#{print_ticket_admin_order_path(order)}#select-printer", icon: 'icon-print', target: "_blank" }
|
||||
end
|
||||
end
|
||||
if @order.ready_to_ship?
|
||||
links << { name: t(:ship_order), url: fire_admin_order_path(@order, :e => 'ship'), method: 'put', icon: 'icon-truck', confirm: t(:are_you_sure) }
|
||||
|
||||
@@ -20,6 +20,18 @@ Spree::Address.class_eval do
|
||||
filtered_address.compact.join(', ')
|
||||
end
|
||||
|
||||
def address_part1
|
||||
address_part1 = [address1, address2]
|
||||
filtered_address = address_part1.select{ |field| !field.nil? && field != '' }
|
||||
filtered_address.compact.join(', ')
|
||||
end
|
||||
|
||||
def address_part2
|
||||
address_part2= [city, zipcode, state.andand.name]
|
||||
filtered_address = address_part2.select{ |field| !field.nil? && field != '' }
|
||||
filtered_address.compact.join(', ')
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def touch_enterprise
|
||||
|
||||
@@ -4,6 +4,7 @@ module Spree
|
||||
# So we don't need the option `dependent: :destroy` as long as
|
||||
# AdjustmentMetadata has no destroy logic itself.
|
||||
has_one :metadata, class_name: 'AdjustmentMetadata'
|
||||
belongs_to :tax_rate, foreign_key: 'originator_id', conditions: "spree_adjustments.originator_type = 'Spree::TaxRate'"
|
||||
|
||||
scope :enterprise_fee, where(originator_type: 'EnterpriseFee')
|
||||
scope :billable_period, where(source_type: 'BillablePeriod')
|
||||
|
||||
@@ -4,6 +4,10 @@ Spree::AppConfiguration.class_eval do
|
||||
# we can allow to be modified in the UI by adding appropriate form
|
||||
# elements to existing or new configuration pages.
|
||||
|
||||
# Terms of Service Preferences
|
||||
preference :enterprises_require_tos, :boolean, default: false
|
||||
preference :enterprise_tos_link, :string, default: "/Terms-of-service.pdf"
|
||||
|
||||
# Tax Preferences
|
||||
preference :products_require_tax_category, :boolean, default: false
|
||||
preference :shipping_tax_rate, :decimal, default: 0
|
||||
@@ -28,4 +32,8 @@ Spree::AppConfiguration.class_eval do
|
||||
|
||||
# External services
|
||||
preference :bugherd_api_key, :string, default: nil
|
||||
|
||||
# Invoices & Receipts
|
||||
preference :invoice_style2?, :boolean, default: false
|
||||
preference :enable_receipt_printing?, :boolean, default: false
|
||||
end
|
||||
|
||||
@@ -56,6 +56,10 @@ Spree::LineItem.class_eval do
|
||||
adjustments.included_tax.sum(&:included_tax)
|
||||
end
|
||||
|
||||
def tax_rates
|
||||
product.tax_category.andand.tax_rates || []
|
||||
end
|
||||
|
||||
def price_with_adjustments
|
||||
# EnterpriseFee#create_locked_adjustment applies adjustments on line items to their parent order,
|
||||
# so line_item.adjustments returns an empty array
|
||||
|
||||
@@ -227,6 +227,26 @@ Spree::Order.class_eval do
|
||||
(adjustments + price_adjustments).sum &:included_tax
|
||||
end
|
||||
|
||||
def tax_adjustments
|
||||
adjustments.with_tax +
|
||||
line_items.includes(:adjustments).map {|li| li.adjustments.with_tax }.flatten
|
||||
end
|
||||
|
||||
def tax_adjustment_totals
|
||||
tax_adjustments.each_with_object(Hash.new) do |adjustment, hash|
|
||||
if adjustment.originator_type == "Spree::TaxRate"
|
||||
tax_rate = adjustment.originator.amount
|
||||
else
|
||||
tax_rate = (adjustment.included_tax / (adjustment.amount - adjustment.included_tax)).round(2)
|
||||
end
|
||||
hash.update({tax_rate => adjustment.included_tax}) { |_tax_rate, amount1, amount2| amount1 + amount2 }
|
||||
end
|
||||
end
|
||||
|
||||
def has_taxes_included
|
||||
not line_items.with_tax.empty?
|
||||
end
|
||||
|
||||
def account_invoice?
|
||||
distributor_id == Spree::Config.accounts_distributor_id
|
||||
end
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
/ insert_after "fieldset.security"
|
||||
|
||||
%fieldset.enterprise_toc.no-border-bottom
|
||||
%legend{:align => "center"}= t(:enterprise_terms_of_service)
|
||||
- [:enterprise_tos_link, :enterprises_require_tos].each do |pref|
|
||||
- type = Spree::Config.preference_type(pref)
|
||||
.field
|
||||
= label_tag(pref, t(pref) + ': ') + tag(:br) if type != :boolean
|
||||
= preference_field_tag(pref, Spree::Config[pref], :type => type)
|
||||
= label_tag(pref, t(pref)) + tag(:br) if type == :boolean
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/ insert_top "[data-hook='admin_orders_index_headers']"
|
||||
|
||||
%th
|
||||
Distributor
|
||||
= t(:products_distributor)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/ insert_after "[data-hook='admin_payment_methods_index_headers'] th:first-child"
|
||||
|
||||
%th
|
||||
Distributors
|
||||
= t(:products_distributor)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// insert_bottom "[data-hook='admin_configurations_sidebar_menu']"
|
||||
|
||||
%li
|
||||
= link_to t(:accounts_and_billing), main_app.edit_admin_accounts_and_billing_settings_path
|
||||
= link_to t('admin.accounts_and_billing_settings.edit.accounts_and_billing'), main_app.edit_admin_accounts_and_billing_settings_path
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// insert_bottom "[data-hook='admin_configurations_sidebar_menu']"
|
||||
|
||||
%li
|
||||
= link_to 'Business Model', main_app.edit_admin_business_model_configuration_path
|
||||
= link_to t('admin.business_model_configuration.edit.business_model_configuration'), main_app.edit_admin_business_model_configuration_path
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/ insert_bottom "[data-hook='admin_configurations_sidebar_menu']"
|
||||
|
||||
%li
|
||||
= link_to 'Caching', main_app.admin_cache_settings_path
|
||||
= link_to t('admin.cache_settings.show.title'), main_app.admin_cache_settings_path
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
/ insert_bottom "[data-hook='admin_configurations_sidebar_menu']"
|
||||
|
||||
%li= link_to 'Content', main_app.edit_admin_content_path
|
||||
%li= link_to t('admin.contents.edit.title'), main_app.edit_admin_content_path
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
// insert_bottom "[data-hook='admin_configurations_sidebar_menu']"
|
||||
|
||||
%li
|
||||
= link_to t('admin.invoice_settings.edit.invoice_settings'), main_app.edit_admin_invoice_settings_path
|
||||
@@ -1,4 +1,4 @@
|
||||
/ insert_after "[data-hook='categories_header'] th:first-child"
|
||||
|
||||
%th
|
||||
Temperature Controlled
|
||||
= t(:temperature_controlled)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/ insert_after "[data-hook='admin_shipping_methods_index_headers'] th:first-child"
|
||||
|
||||
%th
|
||||
Distributors
|
||||
= t(:products_distributor)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
.row
|
||||
.six.columns.alpha
|
||||
.field
|
||||
= label :settings, :default_accounts_payment_method_id, t(:default_accounts_payment_method)
|
||||
= label :settings, :default_accounts_payment_method_id, t('.default_accounts_payment_method')
|
||||
= collection_select(:settings, :default_accounts_payment_method_id, @payment_methods, :id, :name, { include_blank: true, selected: Spree::Config.default_accounts_payment_method_id}, { class: "select2 fullwidth" })
|
||||
|
||||
.six.columns.omega
|
||||
.field
|
||||
= label :settings, :default_accounts_shipping_method_id, t(:default_accounts_shipping_method)
|
||||
= label :settings, :default_accounts_shipping_method_id, t('.default_accounts_shipping_method')
|
||||
= collection_select(:settings, :default_accounts_shipping_method_id, @shipping_methods, :id, :name, { include_blank: true, selected: Spree::Config.default_accounts_shipping_method_id}, { class: "select2 fullwidth" })
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
= render :partial => 'spree/admin/shared/configuration_menu'
|
||||
|
||||
- content_for :page_title do
|
||||
= t(:accounts_and_billing)
|
||||
= t('.accounts_and_billing')
|
||||
|
||||
= render 'spree/shared/error_messages', target: @settings
|
||||
|
||||
@@ -9,12 +9,12 @@
|
||||
|
||||
%fieldset.no-border-bottom
|
||||
%legend
|
||||
= t(:admin_settings)
|
||||
= t('.admin_settings')
|
||||
= form_for @settings, as: :settings, url: main_app.admin_accounts_and_billing_settings_path, :method => :put do |f|
|
||||
.row{ ng: { app: 'admin.accounts_and_billing_settings' } }
|
||||
.twelve.columns.alpha.omega
|
||||
.field
|
||||
= f.label :accounts_distributor_id, t(:accounts_administration_distributor)
|
||||
= f.label :accounts_distributor_id, t('.accounts_administration_distributor')
|
||||
= f.collection_select(:accounts_distributor_id, @distributors, :id, :name, { include_blank: true }, { class: "select2 fullwidth", 'watch-value-as' => "enterprise_id"})
|
||||
|
||||
= f.hidden_field :default_accounts_payment_method_id, value: ''
|
||||
@@ -25,18 +25,16 @@
|
||||
.six.columns.alpha
|
||||
%fieldset.no-border-bottom
|
||||
%legend
|
||||
=t :update_invoice
|
||||
= t('.update_invoice')
|
||||
= f.check_box :auto_update_invoices
|
||||
= f.label :auto_update_invoices,
|
||||
t(:auto_update_invoices)
|
||||
= f.label :auto_update_invoices, t('.auto_update_invoices')
|
||||
|
||||
.six.columns.omega
|
||||
%fieldset.no-border-bottom
|
||||
%legend
|
||||
=t :finalise_invoice
|
||||
= t('.finalise_invoice')
|
||||
= f.check_box :auto_finalize_invoices
|
||||
= f.label :auto_finalize_invoices,
|
||||
t(:auto_finalise_invoices)
|
||||
= f.label :auto_finalize_invoices, t('.auto_finalise_invoices')
|
||||
|
||||
.row
|
||||
.twelve.columns.alpha.omega.form-buttons{"data-hook" => "buttons"}
|
||||
@@ -44,36 +42,35 @@
|
||||
|
||||
%fieldset.no-border-bottom
|
||||
%legend
|
||||
=t :manually_run_task
|
||||
=t('.manually_run_task')
|
||||
.row
|
||||
.six.columns.alpha.step.text-center
|
||||
.form-buttons{"data-hook" => "buttons"}
|
||||
=link_to_with_icon "icon-undo",
|
||||
t(:update_user_invoices) ,
|
||||
main_app.start_job_admin_accounts_and_billing_settings_path(job: { name: "update_account_invoices" }),
|
||||
class: "button fullwidth"
|
||||
= link_to_with_icon "icon-undo", t('.update_user_invoices'),
|
||||
main_app.start_job_admin_accounts_and_billing_settings_path(job: { name: "update_account_invoices" }),
|
||||
class: "button fullwidth"
|
||||
|
||||
%br
|
||||
|
||||
- if @update_account_invoices_job
|
||||
%p.text-center
|
||||
- if @update_account_invoices_job.run_at < Time.zone.now
|
||||
=t :in_progress
|
||||
= t(:in_progress)
|
||||
%br
|
||||
=t :started_at
|
||||
= t(:started_at)
|
||||
- else
|
||||
%strong
|
||||
=t :queued
|
||||
= t(:queued)
|
||||
%br
|
||||
=t :Scheduled_for
|
||||
= t(:scheduled_for)
|
||||
= @update_account_invoices_job.run_at
|
||||
- else
|
||||
%p.explanation
|
||||
=t :update_user_invoice_explained
|
||||
= t('.update_user_invoice_explained')
|
||||
|
||||
.six.columns.omega.step.text-center
|
||||
.form-buttons{"data-hook" => "buttons"}
|
||||
=link_to_with_icon "icon-ok-sign", t(:finalise_user_invoices ),
|
||||
=link_to_with_icon "icon-ok-sign", t('.finalise_user_invoices'),
|
||||
main_app.start_job_admin_accounts_and_billing_settings_path(job: { name: "finalize_account_invoices" }),
|
||||
class: "button fullwidth"
|
||||
|
||||
@@ -83,15 +80,15 @@
|
||||
%p.text-center
|
||||
- if @finalize_account_invoices_job.run_at < Time.zone.now
|
||||
%strong
|
||||
=t :in_progress
|
||||
= t(:in_progress)
|
||||
%br
|
||||
=t :started_at
|
||||
= t(:started_at)
|
||||
- else
|
||||
%strong
|
||||
=t :queued
|
||||
= t(:queued)
|
||||
%br
|
||||
=t :scheduled_for
|
||||
= t(:scheduled_for)
|
||||
= @finalize_account_invoices_job.run_at
|
||||
- else
|
||||
%p.explanation
|
||||
=t :finalise_user_invoice_explained
|
||||
= t('.finalise_user_invoice_explained')
|
||||
|
||||
@@ -4,57 +4,58 @@
|
||||
= "ng-app='admin.businessModelConfiguration'"
|
||||
|
||||
- content_for :page_title do
|
||||
%h1.page-title= t(:business_model_configuration)
|
||||
%a{ 'ofn-with-tip' => "Configure the rate at which shops will be charged each month for use of the Open Food Network." } What's this?
|
||||
%h1.page-title= t('.business_model_configuration')
|
||||
%a{ 'ofn-with-tip' => t('.business_model_configuration_tip') }
|
||||
= t('admin.whats_this')
|
||||
|
||||
= render 'spree/shared/error_messages', target: @settings
|
||||
|
||||
.row{ ng: { controller: "BusinessModelConfigCtrl" } }
|
||||
.five.columns.omega
|
||||
%fieldset.no-border-bottom
|
||||
%legend=t(:bill_calculation_settings)
|
||||
%legend=t('.bill_calculation_settings')
|
||||
%p
|
||||
Adjust the amount that enterprises will be billed each month for use of the OFN.
|
||||
= t('.bill_calculation_settings_tip')
|
||||
%br
|
||||
= form_for @settings, as: :settings, url: main_app.admin_business_model_configuration_path, :method => :put do |f|
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= f.label :shop_trial_length_days, t(:shop_trial_length)
|
||||
%span.icon-question-sign{'ofn-with-tip' => "The length of time (in days) that enterprises who are set up as shops can run as a trial period."}
|
||||
= f.label :shop_trial_length_days, t('.shop_trial_length')
|
||||
%span.icon-question-sign{'ofn-with-tip' => t('.shop_trial_length_tip')}
|
||||
.two.columns.omega
|
||||
= f.number_field :shop_trial_length_days, min: 0.0, step: 1.0, class: "fullwidth"
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= f.label :account_invoices_monthly_fixed, t(:fixed_monthly_charge)
|
||||
%span.icon-question-sign{'ofn-with-tip' => "A fixed monthly charge for all enterprises who are set up as a shop and have exceeded the minimum billable turnover (if set)."}
|
||||
= f.label :account_invoices_monthly_fixed, t('.fixed_monthly_charge')
|
||||
%span.icon-question-sign{'ofn-with-tip' => t('.fixed_monthly_charge_tip')}
|
||||
.two.columns.omega
|
||||
.input-symbol.before
|
||||
%span= Spree::Money.currency_symbol
|
||||
= f.number_field :account_invoices_monthly_fixed, min: 0.0, class: "fullwidth", 'watch-value-as' => 'fixed'
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= f.label :account_invoices_monthly_rate, t(:percentage_of_turnover)
|
||||
%span.icon-question-sign{'ofn-with-tip' => "When greater than zero, this rate (0.0 - 1.0) will be applied to the total turnover of each shop and added to any fixed charges (to the left) to calculate the monthly bill."}
|
||||
= f.label :account_invoices_monthly_rate, t('.percentage_of_turnover')
|
||||
%span.icon-question-sign{'ofn-with-tip' => t('.percentage_of_turnover_tip')}
|
||||
.two.columns.omega
|
||||
= f.number_field :account_invoices_monthly_rate, min: 0.0, max: 1.0, step: 0.01, class: "fullwidth", 'watch-value-as' => 'rate'
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= f.label :account_invoices_monthly_cap, t(:monthly_cap_excl_tax)
|
||||
%span.icon-question-sign{'ofn-with-tip' => "When greater than zero, this value will be used as a cap on the amount that shops will be charged each month."}
|
||||
= f.label :account_invoices_monthly_cap, t('.monthly_cap_excl_tax')
|
||||
%span.icon-question-sign{'ofn-with-tip' => t('.monthly_cap_excl_tax_tip')}
|
||||
.two.columns.omega
|
||||
.input-symbol.before
|
||||
%span= Spree::Money.currency_symbol
|
||||
= f.number_field :account_invoices_monthly_cap, min: 0.0, class: "fullwidth", 'watch-value-as' => 'cap'
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= f.label :account_invoices_tax_rate, t(:tax_rate)
|
||||
%span.icon-question-sign{'ofn-with-tip' => "Tax rate that applies to the the monthly bill that enterprises are charged for using the system."}
|
||||
= f.label :account_invoices_tax_rate, t('.tax_rate')
|
||||
%span.icon-question-sign{'ofn-with-tip' => t('.tax_rate_tip')}
|
||||
.two.columns.omega
|
||||
= f.number_field :account_invoices_tax_rate, min: 0.0, max: 1.0, step: 0.01, class: "fullwidth", 'watch-value-as' => 'taxRate'
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= f.label :minimum_billable_turnover, t(:minimum_monthly_billable_turnover)
|
||||
%span.icon-question-sign{'ofn-with-tip' => "Minimum monthly turnover before a shopfront will be charged for using OFN. Enterprises turning over less than this amount in a month will not be charged, either as a percentage or fixed rate."}
|
||||
= f.label :minimum_billable_turnover, t('.minimum_monthly_billable_turnover')
|
||||
%span.icon-question-sign{'ofn-with-tip' => t('.minimum_monthly_billable_turnover_tip')}
|
||||
.two.columns.omega
|
||||
.input-symbol.before
|
||||
%span= Spree::Money.currency_symbol
|
||||
@@ -69,35 +70,35 @@
|
||||
|
||||
.five.columns.alpha
|
||||
%fieldset.no-border-bottom
|
||||
%legend=t(:example_bill_calculator)
|
||||
%legend= t('.example_bill_calculator')
|
||||
%p
|
||||
Alter the example turnover to visualise the effect of the settings to the left.
|
||||
= t('.example_bill_calculator_legend')
|
||||
%br
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= label_tag :turnover, t(:example_monthly_turnover)
|
||||
%span.icon-question-sign{'ofn-with-tip' => "An example monthly turnover for an enterprise which will be used to generate calculate an example monthly bill below."}
|
||||
= label_tag :turnover, t('.example_monthly_turnover')
|
||||
%span.icon-question-sign{'ofn-with-tip' => t('.example_monthly_turnover_tip')}
|
||||
.two.columns.omega
|
||||
.input-symbol.before
|
||||
%span= Spree::Money.currency_symbol
|
||||
%input.fullwidth{ id: 'turnover', type: "number", ng: { model: 'turnover' } }
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= label_tag :cap_reached, t(:cap_reached?)
|
||||
%span.icon-question-sign{'ofn-with-tip' => "Whether the cap (specified to the left) has been reached, given the settings and the turnover provided."}
|
||||
= label_tag :cap_reached, t('.cap_reached?')
|
||||
%span.icon-question-sign{'ofn-with-tip' => t('.cap_reached?_tip')}
|
||||
.two.columns.omega
|
||||
%input.fullwidth{ id: 'cap_reached', type: "text", readonly: true, ng: { value: 'capReached()' } }
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= label_tag :included_tax, t(:included_tax)
|
||||
%span.icon-question-sign{'ofn-with-tip' => "The total tax included in the example monthly bill, given the settings and the turnover provided."}
|
||||
= label_tag :included_tax, t('.included_tax')
|
||||
%span.icon-question-sign{'ofn-with-tip' => t('.included_tax_tip')}
|
||||
.two.columns.omega
|
||||
%span= Spree::Money.currency_symbol
|
||||
%input.fullwidth{ id: 'included_tax', type: "text", readonly: true, ng: { value: 'includedTax()' } }
|
||||
.row
|
||||
.three.columns.alpha
|
||||
= label_tag :total_incl_tax, t(:total_monthly_bill_incl_tax)
|
||||
%span.icon-question-sign{'ofn-with-tip' => "The example total monthly bill with tax included, given the settings and the turnover provided."}
|
||||
= label_tag :total_incl_tax, t('.total_monthly_bill_incl_tax')
|
||||
%span.icon-question-sign{'ofn-with-tip' => t('.total_monthly_bill_incl_tax_tip')}
|
||||
.two.columns.omega
|
||||
%span= Spree::Money.currency_symbol
|
||||
%input.fullwidth{ id: 'total_incl_tax', type: "text", readonly: true, ng: { value: 'total()' } }
|
||||
|
||||
@@ -10,10 +10,9 @@
|
||||
.row{ 'ng-if' => '!loaded' }
|
||||
.sixteen.columns.alpha#loading
|
||||
%img.spinner{ src: "/assets/spinning-circles.svg" }
|
||||
%h1 LOADING ENTERPRISES
|
||||
%h1= t('.loading_enterprises')
|
||||
.row{ :class => "sixteen columns alpha", 'ng-show' => 'loaded && filteredEnterprises.length == 0'}
|
||||
%h1#no_results No enterprises found.
|
||||
|
||||
%h1#no_results= t('.no_enterprises_found')
|
||||
|
||||
.row{ ng: { show: "loaded && filteredEnterprises.length > 0" } }
|
||||
%table.index#enterprises
|
||||
|
||||
@@ -14,4 +14,4 @@
|
||||
-# ['html', 'insertImage', 'insertLink', 'insertVideo']
|
||||
%text-angular{'ng-model' => 'Enterprise.long_description', 'id' => 'enterprise_long_description', 'name' => 'enterprise[long_description]', 'class' => 'text-angular',
|
||||
'ta-toolbar' => "[['h1','h2','h3','h4','p'],['bold','italics','underline','clear'],['insertLink']]",
|
||||
'placeholder' => t('.desc_long_placeholder')}
|
||||
'placeholder' => t('.desc_long_placeholder')}
|
||||
|
||||
@@ -21,3 +21,13 @@
|
||||
= f.radio_button :charges_sales_tax, false
|
||||
|
||||
= f.label :charges_sales_tax, t(:say_no), value: 'false'
|
||||
.row
|
||||
.alpha.three.columns
|
||||
= f.label :display_invoice_logo, 'Display logo in invoices'
|
||||
.omega.eight.columns
|
||||
= f.check_box :display_invoice_logo
|
||||
.row
|
||||
.alpha.three.columns
|
||||
= f.label :invoice_text, 'Add customized text at the end of invoices'
|
||||
.omega.eight.columns
|
||||
= f.text_area :invoice_text, style: "width: 100%; height: 100px;"
|
||||
|
||||
19
app/views/admin/invoice_settings/edit.html.haml
Normal file
19
app/views/admin/invoice_settings/edit.html.haml
Normal file
@@ -0,0 +1,19 @@
|
||||
= render :partial => 'spree/admin/shared/configuration_menu'
|
||||
|
||||
- content_for :page_title do
|
||||
= t('.title')
|
||||
|
||||
= form_tag main_app.admin_invoice_settings_path, :method => :put do
|
||||
|
||||
.field.align-center
|
||||
= hidden_field_tag 'preferences[invoice_style2?]', '0'
|
||||
= check_box_tag 'preferences[invoice_style2?]', '1', Spree::Config[:invoice_style2?]
|
||||
= label_tag nil, t('.invoice_style2?')
|
||||
|
||||
.field.align-center
|
||||
= hidden_field_tag 'preferences[enable_receipt_printing?]', '0'
|
||||
= check_box_tag 'preferences[enable_receipt_printing?]', '1', Spree::Config[:enable_receipt_printing?]
|
||||
= label_tag nil, t('.enable_receipt_printing?')
|
||||
|
||||
.form-buttons{"data-hook" => "buttons"}
|
||||
= button t(:update), 'icon-refresh'
|
||||
@@ -3,26 +3,26 @@
|
||||
%div.visible{"ng-if" => "!Checkout.ship_address_same_as_billing"}
|
||||
.row
|
||||
.small-6.columns
|
||||
= validated_input "First Name", "order.ship_address.firstname", "ofn-focus" => "accordion['shipping']"
|
||||
= validated_input t(:first_name), "order.ship_address.firstname", "ofn-focus" => "accordion['shipping']"
|
||||
.small-6.columns
|
||||
= validated_input "Last Name", "order.ship_address.lastname"
|
||||
= validated_input t(:last_name), "order.ship_address.lastname"
|
||||
.row
|
||||
.small-12.columns
|
||||
= validated_input "Address", "order.ship_address.address1"
|
||||
= validated_input t(:address), "order.ship_address.address1"
|
||||
.row
|
||||
.small-12.columns
|
||||
= validated_input "Address (contd.)", "order.ship_address.address2", required: false
|
||||
= validated_input t(:address2), "order.ship_address.address2", required: false
|
||||
.row
|
||||
.small-6.columns
|
||||
= validated_input "City", "order.ship_address.city"
|
||||
= validated_input t(:city), "order.ship_address.city"
|
||||
.small-6.columns
|
||||
= validated_select "State", "order.ship_address.state_id", checkout_state_options(:shipping)
|
||||
= validated_select t(:state), "order.ship_address.state_id", checkout_state_options(:shipping)
|
||||
.row
|
||||
.small-6.columns
|
||||
= validated_input "Postcode", "order.ship_address.zipcode"
|
||||
= validated_input t(:postcode), "order.ship_address.zipcode"
|
||||
.small-6.columns.right
|
||||
= validated_select "Country", "order.ship_address.country_id", checkout_country_options
|
||||
= validated_select t(:country), "order.ship_address.country_id", checkout_country_options
|
||||
|
||||
.row
|
||||
.small-6.columns
|
||||
= validated_input "Phone", "order.ship_address.phone"
|
||||
= validated_input t(:phone), "order.ship_address.phone"
|
||||
|
||||
11
app/views/registration/_modal.html.haml
Normal file
11
app/views/registration/_modal.html.haml
Normal file
@@ -0,0 +1,11 @@
|
||||
%script{ type: "text/ng-template", id: "registration.html" }
|
||||
%div#registration-modal{"ng-controller" => "RegistrationCtrl"}
|
||||
%div{ ng: { show: "currentStep() == 'introduction'" } }
|
||||
%ng-include{ src: "'registration/introduction.html'" }
|
||||
%div{ ng: { repeat: 'step in steps', show: "currentStep() == step" } }
|
||||
%ng-include{ src: "'registration/'+ step + '.html'" }
|
||||
%div{ ng: { show: "currentStep() == 'finished'" } }
|
||||
%ng-include{ src: "'registration/finished.html'" }
|
||||
|
||||
%a.close-reveal-modal{"ng-click" => "$close()"}
|
||||
%i.ofn-i_009-close
|
||||
@@ -5,4 +5,10 @@
|
||||
= inject_available_countries
|
||||
= inject_enterprise_attributes
|
||||
|
||||
- steps = %w{about contact details finished images introduction}
|
||||
- steps += %w{limit_reached logo promo social steps type}
|
||||
- steps.each do |step|
|
||||
= render partial: "registration/steps/#{step}"
|
||||
= render "modal"
|
||||
|
||||
%div{ "ng-controller" => "RegistrationCtrl" }
|
||||
|
||||
57
app/views/registration/steps/_about.html.haml
Normal file
57
app/views/registration/steps/_about.html.haml
Normal file
@@ -0,0 +1,57 @@
|
||||
%script{ type: "text/ng-template", id: "registration/about.html" }
|
||||
.container#registration-about
|
||||
%ng-include{ src: "'registration/steps.html'" }
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'enterprise_about_headline' | t}}
|
||||
%h5
|
||||
{{'enterprise_about_message' | t}}
|
||||
%span{ ng: { class: "{brick: !enterprise.is_primary_producer, turquoise: enterprise.is_primary_producer}" } }
|
||||
{{ enterprise.name }}
|
||||
|
||||
%form{ name: 'about', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "update('images',about)" } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.alert-box.info{ "ofn-inline-alert" => true, ng: { show: "visible" } }
|
||||
%h6{ "ng-bind" => "'enterprise_success' | t:{enterprise: enterprise.name}" }
|
||||
%span {{'enterprise_registration_exit_message' | t}}
|
||||
%a.close{ ng: { click: "close()" } } ×
|
||||
|
||||
.small-12.large-8.columns
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_description' } {{'enterprise_description' | t}}:
|
||||
%input.chunky{ id: 'enterprise_description', placeholder: "{{'enterprise_description_placeholder' | t}}", ng: { model: 'enterprise.description' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_long_desc' } {{'enterprise_long_desc' | t}}:
|
||||
%textarea.chunky{ id: 'enterprise_long_desc', rows: 6, placeholder: "{{'enterprise_long_desc_placeholder' | t}}", ng: { model: 'enterprise.long_description' } }
|
||||
%small{ "ng-bind" => "'enterprise_long_desc_length' | t:{num: enterprise.long_description.length}" }
|
||||
.small-12.large-4.columns
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_abn' } {{'enterprise_abn' | t}}:
|
||||
%input.chunky{ id: 'enterprise_abn', placeholder: "{{'enterprise_abn_placeholder' | t}}", ng: { model: 'enterprise.abn' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_acn' } {{'enterprise_acn' | t}}:
|
||||
%input.chunky{ id: 'enterprise_acn', placeholder: "{{'enterprise_acn_placeholder' | t}}", ng: { model: 'enterprise.acn' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_charges_sales_tax' }= t(:charges_sales_tax)
|
||||
%input{ id: 'enterprise_charges_sales_tax_true', type: 'radio', name: 'charges_sales_tax', value: 'true', required: true, ng: { model: 'enterprise.charges_sales_tax' } }
|
||||
%label{ for: 'enterprise_charges_sales_tax_true' } {{'say_yes' | t}}
|
||||
%input{ id: 'enterprise_charges_sales_tax_false', type: 'radio', name: 'charges_sales_tax', value: 'false', required: true, ng: { model: 'enterprise.charges_sales_tax' } }
|
||||
%label{ for: 'enterprise_charges_sales_tax_false' } {{'say_no' | t}}
|
||||
%span.error.small-12.columns{ ng: { show: "about.charges_sales_tax.$error.required && submitted" } }
|
||||
{{'enterprise_tax_required' | t}}
|
||||
|
||||
.row.buttons.pad-top
|
||||
.small-12.columns
|
||||
%input.button.primary.right{ type: "submit", value: "{{'continue' | t}}" }
|
||||
32
app/views/registration/steps/_contact.html.haml
Normal file
32
app/views/registration/steps/_contact.html.haml
Normal file
@@ -0,0 +1,32 @@
|
||||
%script{ type: "text/ng-template", id: "registration/contact.html" }
|
||||
.container#registration-contact
|
||||
%ng-include{ src: "'registration/steps.html'" }
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'registration_greeting' | t}}
|
||||
%h5{ "ng-bind" => "'who_is_managing_enterprise' | t:{enterprise: enterprise.name}" }
|
||||
|
||||
%form{ name: 'contact', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "selectIfValid('type',contact)" } }
|
||||
.row.content
|
||||
.small-12.medium-12.large-7.columns
|
||||
.row
|
||||
.small-12.columns.field
|
||||
%label{ for: 'enterprise_contact' } {{'enterprise_contact' | t}}:
|
||||
%input.chunky.small-12.columns{ id: 'enterprise_contact', name: 'contact', required: true, placeholder: "Contact Name", ng: { model: 'enterprise.contact' } }
|
||||
%span.error.small-12.columns{ ng: { show: "contact.contact.$error.required && submitted" } }
|
||||
{{'enterprise_contact_required' | t}}
|
||||
.row
|
||||
.small-12.columns.field
|
||||
%label{ for: 'enterprise_email_address' } {{'enterprise_email_address' | t}}:
|
||||
%input.chunky.small-12.columns{ id: 'enterprise_email_address', name: 'email_address', type: 'email', placeholder: "eg. charlie@thefarm.com", ng: { model: 'enterprise.email_address' } }
|
||||
.row
|
||||
.small-12.columns.field
|
||||
%label{ for: 'enterprise_phone' } {{'enterprise_phone' | t}}:
|
||||
%input.chunky.small-12.columns{ id: 'enterprise_phone', name: 'phone', placeholder: "eg. (03) 1234 5678", ng: { model: 'enterprise.phone' } }
|
||||
.small-12.medium-12.large-5.hide-for-small-only
|
||||
|
||||
.row.buttons
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "{{'back' | t}}", ng: { click: "select('details')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "{{'continue' | t}}" }
|
||||
65
app/views/registration/steps/_details.html.haml
Normal file
65
app/views/registration/steps/_details.html.haml
Normal file
@@ -0,0 +1,65 @@
|
||||
%script{ type: "text/ng-template", id: "registration/details.html" }
|
||||
.container#registration-details
|
||||
%ng-include{ src: "'registration/steps.html'" }
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'registration_detail_headline' | t}}
|
||||
%h5{ ng: { if: "::enterprise.type != 'own'" } } {{'registration_detail_enterprise' | t}}
|
||||
%h5{ ng: { if: "::enterprise.type == 'own'" } } {{'registration_detail_producer' | t}}
|
||||
|
||||
%form{ name: 'details', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "selectIfValid('contact',details)" } }
|
||||
|
||||
.row
|
||||
.small-12.medium-9.large-12.columns.end
|
||||
.field
|
||||
%label{ for: 'enterprise_name', ng: { if: "::enterprise.type != 'own'" } } {{'registration_detail_name_enterprise' | t}}
|
||||
%label{ for: 'enterprise_name', ng: { if: "::enterprise.type == 'own'" } } {{'registration_detail_name_producer' | t}}
|
||||
%input.chunky{ id: 'enterprise_name', name: 'name', placeholder: "{{'registration_detail_name_placeholder' | t}}", required: true, ng: { model: 'enterprise.name' } }
|
||||
%span.error{ ng: { show: "details.name.$error.required && submitted" } }
|
||||
{{'registration_detail_name_error' | t}}
|
||||
|
||||
.row
|
||||
.small-12.medium-9.large-6.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_address' } {{'registration_detail_address1' | t}}
|
||||
%input.chunky{ id: 'enterprise_address', name: 'address1', required: true, placeholder: "{{'registration_detail_address1_placeholder' | t}}", required: true, ng: { model: 'enterprise.address.address1' } }
|
||||
%span.error{ ng: { show: "details.address1.$error.required && submitted" } }
|
||||
{{'registration_detail_address1_error' | t}}
|
||||
.field
|
||||
%label{ for: 'enterprise_address2' } {{'registration_detail_address2' | t}}
|
||||
%input.chunky{ id: 'enterprise_address2', name: 'address2', required: false, placeholder: "", required: false, ng: { model: 'enterprise.address.address2' } }
|
||||
|
||||
.small-12.medium-9.large-6.columns.end
|
||||
.row
|
||||
.small-12.medium-8.large-8.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_city' } {{'registration_detail_suburb' | t}}
|
||||
%input.chunky{ id: 'enterprise_city', name: 'city', required: true, placeholder: "{{'registration_detail_suburb_placeholder' | t}}", ng: { model: 'enterprise.address.city' } }
|
||||
%span.error{ ng: { show: "details.city.$error.required && submitted" } }
|
||||
{{'registration_detail_suburb_error' | t}}
|
||||
.small-12.medium-4.large-4.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_zipcode' } {{'registration_detail_postcode' | t}}
|
||||
%input.chunky{ id: 'enterprise_zipcode', name: 'zipcode', required: true, placeholder: "{{'registration_detail_postcode_placeholder' | t}}", ng: { model: 'enterprise.address.zipcode' } }
|
||||
%span.error{ ng: { show: "details.zipcode.$error.required && submitted" } }
|
||||
{{'registration_detail_postcode_error' | t}}
|
||||
.row
|
||||
.small-12.medium-4.large-4.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_state' } {{'registration_detail_state' | t}}
|
||||
%select.chunky{ id: 'enterprise_state', name: 'state', ng: { model: 'enterprise.address.state_id', options: 's.id as s.abbr for s in enterprise.country.states', show: 'countryHasStates()', required: 'countryHasStates()' } }
|
||||
%span.error{ ng: { show: "details.state.$error.required && submitted" } }
|
||||
{{'registration_detail_state_error' | t}}
|
||||
.small-12.medium-8.large-8.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_country' } {{'registration_detail_country' | t}}
|
||||
%select.chunky{ id: 'enterprise_country', name: 'country', required: true, ng: { model: 'enterprise.country', options: 'c as c.name for c in countries' } }
|
||||
%span.error{ ng: { show: "details.country.$error.required && submitted" } }
|
||||
{{'registration_detail_country_error' | t}}
|
||||
|
||||
|
||||
.row.buttons
|
||||
.small-12.columns
|
||||
%hr
|
||||
%input.button.primary.right{ type: "submit", value: "{{'continue' | t}}" }
|
||||
16
app/views/registration/steps/_finished.html.haml
Normal file
16
app/views/registration/steps/_finished.html.haml
Normal file
@@ -0,0 +1,16 @@
|
||||
%script{ type: "text/ng-template", id: "registration/finished.html" }
|
||||
.container#registration-finished
|
||||
.row
|
||||
.small-12.columns.pad-top
|
||||
%header
|
||||
%h2 {{'registration_finished_headline' | t}}
|
||||
.panel.callout
|
||||
%p{ "ng-bind" => "'registration_finished_thanks' | t:{enterprise: enterprise.name}" }
|
||||
%p {{'registration_finished_login' | t}}
|
||||
.row
|
||||
.small-12.columns.text-center
|
||||
%h4{ "ng-bind" => "'registration_finished_activate' | t:{enterprise: enterprise.name}" }
|
||||
|
||||
%p{ "ng-bind-html" => "'registration_finished_activate_instruction_html' | t:{email: enterprise.email}"}
|
||||
|
||||
%a.button.primary{ type: "button", href: "/" } {{'registration_finished_action' | t}} >
|
||||
23
app/views/registration/steps/_images.html.haml
Normal file
23
app/views/registration/steps/_images.html.haml
Normal file
@@ -0,0 +1,23 @@
|
||||
%script{ type: "text/ng-template", id: "registration/images.html" }
|
||||
.container#registration-images{ 'nv-file-drop' => true, uploader: "imageUploader", options:"{ alias: imageStep }", ng: { controller: "EnterpriseImageCtrl" } }
|
||||
%ng-include{ src: "'registration/steps.html'" }
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'registration_images_headline' | t}}
|
||||
%h5 {{'registration_images_description' | t}}
|
||||
|
||||
%form{ name: 'images', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "select('social')" } }
|
||||
.row{ ng: { repeat: 'image_step in imageSteps', show: "imageStep == image_step" } }
|
||||
%ng-include{ src: "'registration/'+ image_step + '.html'" }
|
||||
|
||||
.row.buttons.pad-top{ ng: { if: "imageStep == 'logo'" } }
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "Back", ng: { click: "select('about')" } }
|
||||
|
||||
%input.button.primary.right{ type: "button", value: "Continue", ng: { click: "imageSelect('promo')" } }
|
||||
|
||||
.row.buttons.pad-top{ ng: { if: "imageStep == 'promo'" } }
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "{{'back' | t}}", ng: { click: "imageSelect('logo')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "{{'continue' | t}}" }
|
||||
46
app/views/registration/steps/_introduction.html.haml
Normal file
46
app/views/registration/steps/_introduction.html.haml
Normal file
@@ -0,0 +1,46 @@
|
||||
%script{ type: "text/ng-template", id: "registration/introduction.html" }
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'registration_greeting' | t}}
|
||||
%h4
|
||||
%small
|
||||
%i.ofn-i_040-hub
|
||||
{{'registration_intro' | t}}
|
||||
|
||||
.row{ 'data-equalizer' => true }
|
||||
.small-12.medium-12.large-6.columns.pad-top{ 'data-equalizer-watch' => true }
|
||||
%h5 {{'registration_checklist' | t}}:
|
||||
%ul.check-list
|
||||
%li
|
||||
{{'registration_time' | t}}
|
||||
%li
|
||||
{{'registration_enterprise_address' | t}}
|
||||
%li
|
||||
{{'registration_contact_details' | t}}
|
||||
%li
|
||||
{{'registration_logo' | t}}
|
||||
%li
|
||||
{{'registration_promo_image' | t}}
|
||||
%li
|
||||
{{'registration_about_us' | t}}
|
||||
|
||||
.small-9.medium-8.large-5.columns.pad-top.end{ 'data-equalizer-watch' => true}
|
||||
%h5
|
||||
{{'registration_outcome_headline' | t}}
|
||||
%p{ "ng-bind-html" => "t('registration_outcome1_html')" }
|
||||
%p {{'registration_outcome2' | t}}
|
||||
%p {{'registration_outcome3' | t}}
|
||||
|
||||
.row{'ng-init' => "tos_required=#{Spree::Config.enterprises_require_tos}" }
|
||||
%hr
|
||||
.small-12.columns{'ng-hide' => '!tos_required' }
|
||||
%p.tos-message
|
||||
#{t(:enterprise_tos_message)}
|
||||
%a{href: "#{Spree::Config.enterprise_tos_link}", target: "_blank" } #{t(:enterprise_tos_link_text)}
|
||||
%p.tos-checkbox
|
||||
%input{ type: 'checkbox', name: 'accept_terms', id: 'accept_terms', ng: { model: "tos_accepted" } }
|
||||
%label{for: "accept_terms"} #{t(:enterprise_tos_agree)}
|
||||
|
||||
.small-12.columns
|
||||
%input.button.primary.left{ type: "button", value: "{{'registration_action' | t}}", ng: { click: "select('details')", disabled: "tos_required && !tos_accepted", model: "tos_accepted"} }
|
||||
17
app/views/registration/steps/_limit_reached.html.haml
Normal file
17
app/views/registration/steps/_limit_reached.html.haml
Normal file
@@ -0,0 +1,17 @@
|
||||
%script{ type: "text/ng-template", id: "registration/limit_reached.html" }
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'limit_reached_headline' | t}}
|
||||
%h4 {{'limit_reached_message' | t}}
|
||||
.row
|
||||
.small-12.medium-3.large-2.columns.text-right.hide-for-small-only
|
||||
%img{:src => "/assets/potatoes.png"}
|
||||
.small-12.medium-9.large-10.columns
|
||||
%p
|
||||
{{'limit_reached_text' | t}}
|
||||
%strong Open Food Network.
|
||||
.row
|
||||
.small-12.columns
|
||||
%hr
|
||||
%input.button.primary{ type: "button", value: "{{'limit_reached_action' | t}}", ng: { click: "close()" } }
|
||||
46
app/views/registration/steps/_logo.html.haml
Normal file
46
app/views/registration/steps/_logo.html.haml
Normal file
@@ -0,0 +1,46 @@
|
||||
%script{ type: "text/ng-template", id: "registration/logo.html" }
|
||||
.small-12.medium-12.large-6.columns
|
||||
.row
|
||||
.small-12.columns.center
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%h4
|
||||
{{'select_logo' | t}}
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%span.small
|
||||
{{'logo_tip' | t}}
|
||||
.row.pad-top
|
||||
.small-12.columns
|
||||
.image-select.small-12.columns
|
||||
%label.small-12.columns.button{ for: 'image-select' } {{'logo_label' | t}}
|
||||
%input#image-select{ type: 'file', hidden: true, 'nv-file-select' => true, uploader: "imageUploader", options: '{ alias: imageStep }' }
|
||||
.row.show-for-large-up
|
||||
.large-12.columns
|
||||
%span#or.large-12.columns
|
||||
{{'action_or' | t}}
|
||||
.row.show-for-large-up
|
||||
.large-12.columns
|
||||
#image-over{ 'nv-file-over' => true, uploader: "imageUploader" }
|
||||
{{'logo_drag' | t}}
|
||||
.small-12.medium-12.large-6.columns
|
||||
.row
|
||||
.small-12.columns.center
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%h4
|
||||
{{'review_logo' | t}}
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%span.small
|
||||
{{'review_logo_tip' | t}}
|
||||
.row.pad-top
|
||||
.small-12.columns.center
|
||||
#image-placeholder.logo
|
||||
%img{ ng: { show: "imageSrc() && !imageUploader.isUploading", src: '{{ imageSrc() }}' } }
|
||||
.message{ ng: { hide: "imageSrc() || imageUploader.isUploading" } }
|
||||
{{'logo_placeholder' | t}}
|
||||
.loading{ ng: { hide: "!imageUploader.isUploading" } }
|
||||
%img.spinner{ src: "/assets/spinning-circles.svg" }
|
||||
%br/
|
||||
{{'uploading' | t}}
|
||||
44
app/views/registration/steps/_promo.html.haml
Normal file
44
app/views/registration/steps/_promo.html.haml
Normal file
@@ -0,0 +1,44 @@
|
||||
%script{ type: "text/ng-template", id: "registration/promo.html" }
|
||||
.small-12.medium-12.large-12.columns
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%h4
|
||||
{{'select_promo_image' | t}}
|
||||
.row
|
||||
.small-12.medium-12.large-5.columns.center
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%span.small
|
||||
{{'promo_image_tip' | t}}
|
||||
.row.pad-top
|
||||
.small-12.columns
|
||||
.image-select.small-12.columns
|
||||
%label.small-12.columns.button{ for: 'image-select' } {{'promo_image_label' | t}}
|
||||
%input#image-select{ type: 'file', hidden: true, 'nv-file-select' => true, uploader: "imageUploader", options: '{ alias: imageStep }' }
|
||||
.large-2.columns
|
||||
%span#or.horizontal.large-12.columns
|
||||
{{'action_or' | t}}
|
||||
.large-5.columns
|
||||
#image-over{ 'nv-file-over' => true, uploader: "imageUploader" }
|
||||
{{'promo_image_drag' | t}}
|
||||
.small-12.medium-12.large-12.columns.pad-top
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%h4
|
||||
{{'review_promo_image' | t}}
|
||||
.row
|
||||
.small-12.columns.center
|
||||
.row
|
||||
.small-12.columns.center
|
||||
%span.small
|
||||
{{'review_promo_image_tip' | t}}
|
||||
.row.pad-top
|
||||
.small-12.columns.center
|
||||
#image-placeholder.promo
|
||||
%img{ ng: { show: "imageSrc() && !imageUploader.isUploading", src: '{{ imageSrc() }}' } }
|
||||
.message{ ng: { hide: "imageSrc() || imageUploader.isUploading" } }
|
||||
{{'promo_image_placeholder' | t}}
|
||||
.loading{ ng: { hide: "!imageUploader.isUploading" } }
|
||||
%img.spinner{ src: "/assets/spinning-circles.svg" }
|
||||
%br/
|
||||
{{'uploading' | t}}
|
||||
44
app/views/registration/steps/_social.html.haml
Normal file
44
app/views/registration/steps/_social.html.haml
Normal file
@@ -0,0 +1,44 @@
|
||||
%script{ type: "text/ng-template", id: "registration/social.html" }
|
||||
.container#registration-social
|
||||
%ng-include{ src: "'registration/steps.html'" }
|
||||
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2 {{'enterprise_final_step' | t}}
|
||||
%h5{ "ng-bind" => "'enterprise_social_text' | t:{enterprise: enterprise.name}" }
|
||||
|
||||
%form{ name: 'social', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "update('finished',social)" } }
|
||||
.row.content
|
||||
.small-12.large-7.columns
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_website' } {{'website' | t}}:
|
||||
%input.chunky{ id: 'enterprise_website', placeholder: "{{'website_placeholder' | t}}", ng: { model: 'enterprise.website' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_facebook' } {{'facebook' | t}}:
|
||||
%input.chunky{ id: 'enterprise_facebook', placeholder: "{{'facebook_placeholder' | t}}", ng: { model: 'enterprise.facebook' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_linkedin' } {{'linkedin' | t}}:
|
||||
%input.chunky{ id: 'enterprise_linkedin', placeholder: "{{'linkedin_placeholder' | t}}", ng: { model: 'enterprise.linkedin' } }
|
||||
.small-12.large-5.columns
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_twitter' } {{'twitter' | t}}:
|
||||
%input.chunky{ id: 'enterprise_twitter', placeholder: "{{'twitter_placeholder' | t}}", ng: { model: 'enterprise.twitter' } }
|
||||
.row
|
||||
.small-12.columns
|
||||
.field
|
||||
%label{ for: 'enterprise_instagram' } {{'instagram' | t}}:
|
||||
%input.chunky{ id: 'enterprise_instagram', placeholder: "{{'instagram_placeholder' | t}}", ng: { model: 'enterprise.instagram' } }
|
||||
|
||||
.row.buttons
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "{{'back' | t}}", ng: { click: "select('images')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "{{'continue' | t}}" }
|
||||
4
app/views/registration/steps/_steps.html.haml
Normal file
4
app/views/registration/steps/_steps.html.haml
Normal file
@@ -0,0 +1,4 @@
|
||||
%script{ type: "text/ng-template", id: "registration/steps.html" }
|
||||
.row#progress-bar
|
||||
.small-12.medium-2.columns.item{ ng: { repeat: 'step in steps', class: "{active: (currentStep() == step),'show-for-medium-up': (currentStep() != step)}" } }
|
||||
{{ $index+1 + ". " + step }}
|
||||
48
app/views/registration/steps/_type.html.haml
Normal file
48
app/views/registration/steps/_type.html.haml
Normal file
@@ -0,0 +1,48 @@
|
||||
%script{ type: "text/ng-template", id: "registration/type.html" }
|
||||
.container#registration-type
|
||||
|
||||
%ng-include{ src: "'registration/steps.html'" }
|
||||
|
||||
.row
|
||||
.small-12.columns
|
||||
%header
|
||||
%h2{ "ng-bind" => "'registration_type_headline' | t:{enterprise: enterprise.name}" }
|
||||
%h4
|
||||
{{'registration_type_question' | t}}
|
||||
|
||||
%form{ name: 'type', novalidate: true, ng: { controller: "RegistrationFormCtrl", submit: "create(type)" } }
|
||||
.row#enterprise-types{ 'data-equalizer' => true, ng: { if: "::enterprise.type != 'own'" } }
|
||||
.small-12.columns.field
|
||||
.row
|
||||
.small-12.medium-6.large-6.columns{ 'data-equalizer-watch' => true }
|
||||
%a.btnpanel#producer-panel{ href: "#", ng: { click: "enterprise.is_primary_producer = true", class: "{selected: enterprise.is_primary_producer}" } }
|
||||
%i.ofn-i_059-producer
|
||||
%h4 {{'registration_type_producer' | t}}
|
||||
|
||||
.small-12.medium-6.large-6.columns{ 'data-equalizer-watch' => true }
|
||||
%a.btnpanel#hub-panel{ href: "#", ng: { click: "enterprise.is_primary_producer = false", class: "{selected: enterprise.is_primary_producer == false}" } }
|
||||
%i.ofn-i_063-hub
|
||||
%h4 {{'registration_type_no_producer' | t}}
|
||||
|
||||
.row
|
||||
.small-12.columns
|
||||
%input.chunky{ id: 'enterprise_is_primary_producer', name: 'is_primary_producer', hidden: true, required: true, ng: { model: 'enterprise.is_primary_producer' } }
|
||||
%span.error{ ng: { show: "type.is_primary_producer.$error.required && submitted" } }
|
||||
{{'registration_type_error' | t}}
|
||||
.row
|
||||
.small-12.columns
|
||||
.panel.callout
|
||||
.left
|
||||
%i.ofn-i_013-help
|
||||
|
||||
%p {{'registration_type_producer_help' | t}}
|
||||
.panel.callout
|
||||
.left
|
||||
%i.ofn-i_013-help
|
||||
|
||||
%p {{'registration_type_no_producer_help' | t}}
|
||||
|
||||
.row.buttons
|
||||
.small-12.columns
|
||||
%input.button.secondary{ type: "button", value: "{{'back' | t}}", ng: { click: "select('contact')" } }
|
||||
%input.button.primary.right{ type: "submit", value: "{{'create_profile' | t}}" }
|
||||
58
app/views/spree/admin/orders/_invoice_table2.html.haml
Normal file
58
app/views/spree/admin/orders/_invoice_table2.html.haml
Normal file
@@ -0,0 +1,58 @@
|
||||
%table.order-summary{:width => "100%"}
|
||||
%thead
|
||||
%tr
|
||||
%th{:align => "left"}
|
||||
%h5= t(:invoice_column_item)
|
||||
%th{:align => "right", :width => "15%"}
|
||||
%h5= t(:invoice_column_qty)
|
||||
%th{:align => "right", :width => "15%"}
|
||||
%h5= @order.has_taxes_included ? t(:invoice_column_unit_price_with_taxes) : t(:invoice_column_unit_price_without_taxes)
|
||||
%th{:align => "right", :width => "15%"}
|
||||
%h5= @order.has_taxes_included ? t(:invoice_column_price_with_taxes) : t(:invoice_column_price_without_taxes)
|
||||
- if @order.total_tax > 0
|
||||
%th{:align => "right", :width => "15%"}
|
||||
%h5= t(:invoice_column_tax_rate)
|
||||
%tbody
|
||||
- @order.line_items.sort_by{ |li| li.product.name }.each do |item|
|
||||
%tr
|
||||
%td
|
||||
= render 'spree/shared/line_item_name', line_item: item
|
||||
%td{:align => "right"}
|
||||
= item.quantity
|
||||
%td{:align => "right"}
|
||||
= item.single_display_amount_with_adjustments
|
||||
%td{:align => "right"}
|
||||
= item.display_amount_with_adjustments
|
||||
- if @order.total_tax > 0
|
||||
%td{:align => "right"}
|
||||
= display_line_item_tax_rates(item)
|
||||
- checkout_adjustments_for(@order, exclude: [:line_item]).reject{ |a| a.amount == 0 }.reverse_each do |adjustment|
|
||||
%tr
|
||||
%td
|
||||
%strong= "#{raw(adjustment.label)}"
|
||||
%td{:align => "right"}
|
||||
%td{:align => "right"}
|
||||
%td{:align => "right"}
|
||||
= adjustment.display_amount
|
||||
- if @order.total_tax > 0
|
||||
%td{:align => "right"}
|
||||
= display_adjustment_tax_rates(adjustment)
|
||||
%tfoot
|
||||
%tr
|
||||
%td{:align => "right", :colspan => "3"}
|
||||
%strong= @order.has_taxes_included ? t(:total_incl_tax) : t(:total_excl_tax)
|
||||
%td{:align => "right", :colspan => "2"}
|
||||
%strong= @order.has_taxes_included ? @order.display_total : display_checkout_total_less_tax(@order)
|
||||
- display_checkout_taxes_hash(@order).each do |tax_rate, tax_value|
|
||||
%tr
|
||||
%td{:align => "right", :colspan => "3"}
|
||||
= t(:tax_total, rate: tax_rate)
|
||||
%td{:align => "right", :colspan => "2"}
|
||||
= tax_value
|
||||
%tr
|
||||
%td{:align => "right", :colspan => "3"}
|
||||
= @order.has_taxes_included ? t(:total_excl_tax) : t(:total_incl_tax)
|
||||
%td{:align => "right", :colspan => "2"}
|
||||
= @order.has_taxes_included ? display_checkout_total_less_tax(@order) : @order.display_total
|
||||
%p
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
= wicked_pdf_stylesheet_link_tag "mail/all"
|
||||
|
||||
|
||||
%table{:width => "100%"}
|
||||
%tbody
|
||||
%tr{ valign: "top" }
|
||||
@@ -49,4 +48,8 @@
|
||||
%p
|
||||
|
||||
|
||||
- if @order.distributor.invoice_text.present?
|
||||
%p
|
||||
= @order.distributor.invoice_text
|
||||
|
||||
= render 'spree/order_mailer/payment'
|
||||
|
||||
71
app/views/spree/admin/orders/invoice2.html.haml
Normal file
71
app/views/spree/admin/orders/invoice2.html.haml
Normal file
@@ -0,0 +1,71 @@
|
||||
= wicked_pdf_stylesheet_link_tag "mail/all"
|
||||
|
||||
|
||||
%table{:width => "100%"}
|
||||
%tbody
|
||||
%tr{ valign: "top" }
|
||||
%td{ :align => "left" }
|
||||
%h4
|
||||
= t :tax_invoice
|
||||
- if @order.distributor.display_invoice_logo? && @order.distributor.logo.present?
|
||||
%td{ :align => "right", rowspan: 2 }
|
||||
= wicked_pdf_image_tag @order.distributor.logo(:small), width: 150, height: 150
|
||||
%tr{ valign: "top" }
|
||||
%td{ :align => "left" }
|
||||
%strong= @order.distributor.name
|
||||
%br
|
||||
= @order.distributor.address.address_part1
|
||||
%br
|
||||
= @order.distributor.address.address_part2
|
||||
%br
|
||||
= @order.distributor.email_address
|
||||
- if @order.distributor.phone.present?
|
||||
%br
|
||||
= @order.distributor.phone
|
||||
- if @order.distributor.abn.present?
|
||||
%br
|
||||
= "#{t :abn} #{@order.distributor.abn}"
|
||||
- if @order.distributor.acn.present?
|
||||
%br
|
||||
= "#{t :acn} #{@order.distributor.acn}"
|
||||
%tr{ valign: "top" }
|
||||
%td{ :align => "left", colspan: 2 }
|
||||
%tr{ valign: "top" }
|
||||
%td{ :align => "left" }
|
||||
%br
|
||||
= t :invoice_issued_on
|
||||
= l Time.zone.now.to_date
|
||||
%br
|
||||
= t :date_of_transaction
|
||||
= l @order.completed_at.to_date
|
||||
%br
|
||||
= t :order_number
|
||||
= @order.number
|
||||
%td{ :align => "right" }
|
||||
= t :invoice_billing_address
|
||||
%br
|
||||
%strong= @order.ship_address.full_name
|
||||
- if @order.customer.code.present?
|
||||
%br
|
||||
= "Code: #{@order.customer.code}"
|
||||
%br
|
||||
= @order.ship_address.address_part1
|
||||
%br
|
||||
= @order.ship_address.address_part2
|
||||
|
||||
= render 'spree/admin/orders/invoice_table2'
|
||||
|
||||
- if @order.special_instructions.present?
|
||||
%p.callout
|
||||
%strong
|
||||
= t :customer_instructions
|
||||
%p
|
||||
%em= @order.special_instructions
|
||||
%p
|
||||
|
||||
|
||||
- if @order.distributor.invoice_text.present?
|
||||
%p
|
||||
= @order.distributor.invoice_text
|
||||
|
||||
= render 'spree/order_mailer/payment'
|
||||
79
app/views/spree/admin/orders/ticket.html.haml
Normal file
79
app/views/spree/admin/orders/ticket.html.haml
Normal file
@@ -0,0 +1,79 @@
|
||||
!!! Basic
|
||||
%html
|
||||
%head
|
||||
<meta content="text/html;charset=ansi" http-equiv="Content-Type">
|
||||
= javascript_include_tag "shared/jquery-1.8.0.js"
|
||||
= javascript_include_tag "qz/qz-tray.js"
|
||||
= javascript_include_tag "qz/sha-256.min.js"
|
||||
= javascript_include_tag "qz/rsvp-3.1.0.min.js"
|
||||
= javascript_include_tag "qz/jsrsasign-latest-all-min.js"
|
||||
:javascript
|
||||
var printData = [
|
||||
'\x1B' + '\x40', // init
|
||||
'\x1B' + '\x74' + '\x10',
|
||||
'\x1B' + '\x61' + '\x31', // center align
|
||||
'\x1B' + '\x21' + '\x30', // em mode on
|
||||
'#{@order.distributor.name}' + '\x0A',
|
||||
'\x1B' + '\x21' + '\x0A' + '\x1B' + '\x45' + '\x0A', // em mode off
|
||||
'\x0A',
|
||||
'#{@order.distributor.address.address_part1}' + '\x0A', // text and line break
|
||||
'#{@order.distributor.address.address_part2}' + '\x0A',
|
||||
'#{@order.distributor.email}' + '\x0A',
|
||||
'\x0A', // line break
|
||||
'\x1B' + '\x61' + '\x32', // right align
|
||||
'#{l Time.zone.now.to_date}' + '\x0A',
|
||||
'#{@order.number}' + '\x0A',
|
||||
'\x1B' + '\x61' + '\x30', // left align
|
||||
'\x0A',
|
||||
'\x1B' + '\x4D' + '\x31', // small text
|
||||
"#{'%6s %-23s%12s%12s' %
|
||||
[t(:ticket_column_qty),
|
||||
t(:ticket_column_item),
|
||||
t(:ticket_column_unit_price),
|
||||
t(:ticket_column_total_price)]}",
|
||||
'\x0A',
|
||||
'\x1B' + '\x4D' + '\x30', // normal text
|
||||
'__________________________________________' + '\x0A',
|
||||
"#{@order.line_items
|
||||
.sort_by{ |line_item| line_item.product.name }
|
||||
.map { |line_item| '%5d %-19.19s%8.8s%8.8s' %
|
||||
[line_item.quantity,
|
||||
line_item.product.name,
|
||||
line_item.single_display_amount_with_adjustments.money.format(symbol: false),
|
||||
line_item.display_amount_with_adjustments.money.format(symbol: false)] }
|
||||
.join('" + \'\x0A\' + "')}",
|
||||
'\x0A',
|
||||
"#{checkout_adjustments_for(@order, exclude: [:line_item])
|
||||
.reject{ |a| a.amount == 0 }
|
||||
.reverse.map { |adjustment| '%5s %-27.27s%8.8s' %
|
||||
["",
|
||||
raw(adjustment.label),
|
||||
display_adjustment_amount(adjustment).money.format(symbol: false)] }
|
||||
.join('" + \'\x0A\' + "')}",
|
||||
'\x0A',
|
||||
'__________________________________________' + '\x0A',
|
||||
'\x0A',
|
||||
'\x1B' + '\x45' + '\x0D', // bold on
|
||||
"#{'%31s%10s' %
|
||||
[t(:total_incl_tax),
|
||||
@order.display_total]}",
|
||||
'\x1B' + '\x45' + '\x0A', // bold off
|
||||
'\x0A',
|
||||
"#{display_checkout_taxes_hash(@order).map { |tax_rate, tax_value|
|
||||
'%31s%10s' %
|
||||
[t(:tax_total, rate: tax_rate),
|
||||
tax_value] }
|
||||
.join('" + \'\x0A\' + "')}",
|
||||
'\x0A',
|
||||
"#{'%31s%10s' %
|
||||
[t(:total_excl_tax),
|
||||
display_checkout_total_less_tax(@order)]}",
|
||||
'\x0A',
|
||||
'\x0A' + '\x0A' + '\x0A' + '\x0A' + '\x0A' + '\x0A' + '\x0A',
|
||||
'\x1B' + '\x69', // cut paper
|
||||
];
|
||||
= javascript_include_tag "qz/ticket-popup.js"
|
||||
%body
|
||||
%div#printer-list
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
- content_for :page_title do
|
||||
= "Bulk Edit Products"
|
||||
= t('.title')
|
||||
|
||||
- content_for :page_actions do
|
||||
%div{ :class => "toolbar", 'data-hook' => "toolbar" }
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
|
||||
%div.sixteen.columns.alpha#loading{ 'ng-if' => 'loading' }
|
||||
%img.spinner{ src: "/assets/spinning-circles.svg" }
|
||||
%h1 LOADING PRODUCTS
|
||||
%h1= t('.title')
|
||||
|
||||
%div.sixteen.columns.alpha{ 'ng-show' => '!loading && filteredProducts.length == 0 && query.length==0' }
|
||||
%h1#no_results No products yet. Why don't you add some?
|
||||
%h1#no_results= t('.no_products')
|
||||
|
||||
%div.sixteen.columns.alpha{ 'ng-show' => '!loading && filteredProducts.length == 0 && query.length!=0' }
|
||||
%h1#no_results
|
||||
Sorry, no results match
|
||||
%h1#no_results
|
||||
= t('.no_results')
|
||||
'
|
||||
{{query}}
|
||||
'
|
||||
@@ -0,0 +1,4 @@
|
||||
%ul{style: "margin-left: 12pt"}
|
||||
- report_types.each do |report_type|
|
||||
%li
|
||||
= link_to report_type[0], "#{sales_tax_admin_reports_url}?report_type=#{report_type[1]}"
|
||||
@@ -5,9 +5,15 @@
|
||||
.four.columns.alpha
|
||||
= label_tag nil, t(:report_distributor)
|
||||
= f.collection_select(:distributor_id_eq, @distributors, :id, :name, {:include_blank => 'All'}, {:class => "select2 fullwidth"})
|
||||
= label_tag nil, t(:report_customers_type)
|
||||
%br
|
||||
= select_tag(:report_type, options_for_select([[t(:report_tax_types),:tax_types],[t(:report_tax_rates),:tax_rates]], @report_type))
|
||||
%br
|
||||
%br
|
||||
= check_box_tag :csv
|
||||
= label_tag :csv, t(:report_customers_csv)
|
||||
%br
|
||||
%br
|
||||
= button t(:search)
|
||||
|
||||
%br
|
||||
|
||||
@@ -9,11 +9,10 @@
|
||||
</figure>
|
||||
|
||||
<div class='variant-details'>
|
||||
|
||||
<h6 class="variant-name">{{variant.name}}</h6>
|
||||
|
||||
<ul>
|
||||
<li><strong>Producer:</strong> {{variant.producer_name}}</li>
|
||||
<li><strong><%= t('.producer_name') %>:</strong> {{variant.producer_name}}</li>
|
||||
</ul>
|
||||
<ul class='variant-data'>
|
||||
<li class='variant-sku'><strong>{{t 'sku'}}:</strong> {{variant.sku}}</li>
|
||||
@@ -27,7 +26,6 @@
|
||||
{{/each}}
|
||||
</ul>
|
||||
{{/if}}
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</script>
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
%tr
|
||||
%td
|
||||
%h3
|
||||
Hi #{@order.bill_address.firstname},
|
||||
= t('.hi', name: @order.bill_address.firstname)
|
||||
%h4
|
||||
Please find attached an invoice for your recent order from
|
||||
= t('.invoice_attached_text')
|
||||
%strong= "#{@order.distributor.name}"
|
||||
|
||||
= render 'signoff'
|
||||
|
||||
@@ -56,7 +56,7 @@ Openfoodnetwork::Application.configure do
|
||||
|
||||
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
|
||||
# the I18n.default_locale when a translation can not be found)
|
||||
config.i18n.fallbacks = true
|
||||
config.i18n.fallbacks = [:en]
|
||||
|
||||
# Send deprecation notices to registered listeners
|
||||
config.active_support.deprecation = :notify
|
||||
|
||||
@@ -39,16 +39,12 @@ en-GB:
|
||||
must_have_valid_business_number: "Please enter your company number."
|
||||
invoice: "Invoice"
|
||||
percentage_of_sales: "%{percentage} of sales"
|
||||
percentage_of_turnover: "Percentage of turnover"
|
||||
monthly_cap_excl_tax: "monthly cap (excl. VAT)"
|
||||
capped_at_cap: "capped at %{cap}"
|
||||
per_month: "per month"
|
||||
free: "pay what you can"
|
||||
free_trial: "free trial"
|
||||
plus_tax: "plus VAT"
|
||||
total_monthly_bill_incl_tax: "Total Monthly Bill (Incl. VAT)"
|
||||
min_bill_turnover_desc: "once turnover exceeds %{mbt_amount}"
|
||||
business_model_configuration: "Business model configuration"
|
||||
say_no: "No"
|
||||
say_yes: "Yes"
|
||||
then: then
|
||||
@@ -82,6 +78,51 @@ en-GB:
|
||||
has_one_rule: "has one rule"
|
||||
has_n_rules: "has %{num} rules"
|
||||
unsaved_confirm_leave: "There are unsaved changed on this page. Continue without saving?"
|
||||
accounts_and_billing_settings:
|
||||
method_settings:
|
||||
default_accounts_payment_method: "Default Accounts Payment Method"
|
||||
default_accounts_shipping_method: "Default Accounts Shipping Method"
|
||||
edit:
|
||||
accounts_and_billing: "Accounts & Billing"
|
||||
accounts_administration_distributor: "Accounts Administration Distributor"
|
||||
admin_settings: "Settings"
|
||||
update_invoice: "Update Invoices"
|
||||
finalise_invoice: "Finalise Invoices"
|
||||
finalise_user_invoices: "Finalise User Invoices"
|
||||
finalise_user_invoice_explained: "Use this button to finalise all invoices in the system for the previous calendar month. This task can be set up to run automatically once a month."
|
||||
manually_run_task: "Manually Run Task"
|
||||
update_user_invoices: "Update User Invoices"
|
||||
update_user_invoice_explained: "Use this button to immediately update invoices for the month to date for each enterprise user in the system. This task can be set up to run automatically every night."
|
||||
auto_finalise_invoices: "Auto-finalise invoices monthly on the 2nd at 1:30am"
|
||||
auto_update_invoices: "Auto-update invoices nightly at 1:00am"
|
||||
business_model_configuration:
|
||||
edit:
|
||||
business_model_configuration: "Business Model"
|
||||
business_model_configuration_tip: "Configure the rate at which shops will be charged each month for use of the Open Food Network."
|
||||
bill_calculation_settings: "Bill Calculation Settings"
|
||||
bill_calculation_settings_tip: "Adjust the amount that enterprises will be billed each month for use of the OFN."
|
||||
shop_trial_length: "Shop Trial Length (Days)"
|
||||
shop_trial_length_tip: "The length of time (in days) that enterprises who are set up as shops can run as a trial period."
|
||||
fixed_monthly_charge: "Fixed Monthly Charge"
|
||||
fixed_monthly_charge_tip: "A fixed monthly charge for all enterprises who are set up as a shop and have exceeded the minimum billable turnover (if set)."
|
||||
percentage_of_turnover: "Percentage of turnover"
|
||||
percentage_of_turnover_tip: "When greater than zero, this rate (0.0 - 1.0) will be applied to the total turnover of each shop and added to any fixed charges (to the left) to calculate the monthly bill."
|
||||
monthly_cap_excl_tax: "monthly cap (excl. VAT)"
|
||||
monthly_cap_excl_tax_tip: "When greater than zero, this value will be used as a cap on the amount that shops will be charged each month."
|
||||
tax_rate: "Tax Rate"
|
||||
tax_rate_tip: "Tax rate that applies to the the monthly bill that enterprises are charged for using the system."
|
||||
minimum_monthly_billable_turnover: "Minimum Monthly Billable Turnover"
|
||||
minimum_monthly_billable_turnover_tip: "Minimum monthly turnover before a shopfront will be charged for using OFN. Enterprises turning over less than this amount in a month will not be charged, either as a percentage or fixed rate."
|
||||
example_bill_calculator: "Example Bill Calculator"
|
||||
example_bill_calculator_legend: "Alter the example turnover to visualise the effect of the settings to the left."
|
||||
example_monthly_turnover: "Example Monthly Turnover"
|
||||
example_monthly_turnover_tip: "An example monthly turnover for an enterprise which will be used to generate calculate an example monthly bill below."
|
||||
cap_reached?: "Cap reached ?"
|
||||
cap_reached?_tip: "Whether the cap (specified to the left) has been reached, given the settings and the turnover provided."
|
||||
included_tax: "Include Tax"
|
||||
included_tax_tip: "The total tax included in the example monthly bill, given the settings and the turnover provided."
|
||||
total_monthly_bill_incl_tax: "Total Monthly Bill (Incl. VAT)"
|
||||
total_monthly_bill_incl_tax_tip: "The example total monthly bill with tax included, given the settings and the turnover provided."
|
||||
customers:
|
||||
index:
|
||||
add_customer: "Add Customer"
|
||||
@@ -597,7 +638,6 @@ en-GB:
|
||||
products_max_quantity: Max quantity
|
||||
products_distributor: Distributor
|
||||
products_distributor_info: When you select a distributor for your order, their address and pickup times will be displayed here.
|
||||
shop_trial_length: "Shop Trial Length (Days)"
|
||||
shop_trial_expires_in: "Your shopfront trial expires in"
|
||||
shop_trial_expired_notice: "OFN UK is a non-profit social enterprise making software affordable through open source collaboration. Thanks for being part of it!"
|
||||
password: Password
|
||||
@@ -826,16 +866,6 @@ en-GB:
|
||||
roles: "Roles"
|
||||
update: "Update"
|
||||
add_producer_property: "Add producer property"
|
||||
admin_settings: "Settings"
|
||||
update_invoice: "Update Invoices"
|
||||
finalise_invoice: "Finalise Invoices"
|
||||
finalise_user_invoices: "Finalise User Invoices"
|
||||
finalise_user_invoice_explained: "Use this button to finalise all invoices in the system for the previous calendar month. This task can be set up to run automatically once a month."
|
||||
manually_run_task: "Manually Run Task"
|
||||
update_user_invoices: "Update User Invoices"
|
||||
update_user_invoice_explained: "Use this button to immediately update invoices for the month to date for each enterprise user in the system. This task can be set up to run automatically every night."
|
||||
auto_finalise_invoices: "Auto-finalise invoices monthly on the 2nd at 1:30am"
|
||||
auto_update_invoices: "Auto-update invoices nightly at 1:00am"
|
||||
in_progress: "In Progress"
|
||||
started_at: "Started at"
|
||||
queued: "Queued"
|
||||
@@ -846,8 +876,6 @@ en-GB:
|
||||
no_customers_found: "No customers found"
|
||||
go: "Go"
|
||||
hub: "Hub"
|
||||
accounts_administration_distributor: "accounts administration distributor"
|
||||
accounts_and_billing: "Accounts & Billing"
|
||||
producer: "Producer"
|
||||
product: "Product"
|
||||
price: "Price"
|
||||
@@ -895,6 +923,12 @@ en-GB:
|
||||
edit_profile_details_etc: "Change your profile description, images, etc."
|
||||
order_cycle: "Order Cycle"
|
||||
remove_tax: "Remove tax"
|
||||
enterprise_terms_of_service: "Enterprise Terms of Service"
|
||||
enterprises_require_tos: "Enterprises must accept Terms of Service"
|
||||
enterprise_tos_link: "Enterprise Terms of Service link"
|
||||
enterprise_tos_message: "We want to work with people that share our aims and values. As such we ask new enterprises to agree to our "
|
||||
enterprise_tos_link_text: "Terms of Service."
|
||||
enterprise_tos_agree: "I agree to the above Terms of Service"
|
||||
tax_settings: "Tax Settings"
|
||||
products_require_tax_category: "products require tax category"
|
||||
admin_shared_address_1: "Address"
|
||||
|
||||
@@ -53,13 +53,10 @@ en-US:
|
||||
must_have_valid_business_number: "%{enterprise_name} must have a valid ABN before invoices can be sent."
|
||||
invoice: "Invoice"
|
||||
percentage_of_sales: "%{percentage} of sales"
|
||||
percentage_of_turnover: "Percentage of turnover"
|
||||
monthly_cap_excl_tax: "monthly cap (excl. GST)"
|
||||
capped_at_cap: "capped at %{cap}"
|
||||
per_month: "per month"
|
||||
free: "free"
|
||||
plus_tax: "plus GST"
|
||||
total_monthly_bill_incl_tax: "Total Monthly Bill (Incl. Tax)"
|
||||
say_no: "No"
|
||||
say_yes: "Yes"
|
||||
|
||||
@@ -84,7 +81,51 @@ en-US:
|
||||
tag_has_rules: "Existing rules for this tag: %{num}"
|
||||
has_one_rule: "has one rule"
|
||||
has_n_rules: "has %{num} rules"
|
||||
|
||||
accounts_and_billing_settings:
|
||||
method_settings:
|
||||
default_accounts_payment_method: "Default Accounts Payment Method"
|
||||
default_accounts_shipping_method: "Default Accounts Shipping Method"
|
||||
edit:
|
||||
accounts_and_billing: "Accounts & Billing"
|
||||
accounts_administration_distributor: "Accounts Administration Distributor"
|
||||
admin_settings: "Settings"
|
||||
update_invoice: "Update Invoices"
|
||||
finalise_invoice: "Finalise Invoices"
|
||||
finalise_user_invoices: "Finalise User Invoices"
|
||||
finalise_user_invoice_explained: "Use this button to finalize all invoices in the system for the previous calendar month. This task can be set up to run automatically once a month."
|
||||
manually_run_task: "Manually Run Task "
|
||||
update_user_invoices: "Update User Invoices"
|
||||
update_user_invoice_explained: "Use this button to immediately update invoices for the month to date for each enterprise user in the system. This task can be set up to run automatically every night."
|
||||
auto_finalise_invoices: "Auto-finalise invoices monthly on the 2nd at 1:30am"
|
||||
auto_update_invoices: "Auto-update invoices nightly at 1:00am"
|
||||
business_model_configuration:
|
||||
edit:
|
||||
business_model_configuration: "Business Model"
|
||||
business_model_configuration_tip: "Configure the rate at which shops will be charged each month for use of the Open Food Network."
|
||||
bill_calculation_settings: "Bill Calculation Settings"
|
||||
bill_calculation_settings_tip: "Adjust the amount that enterprises will be billed each month for use of the OFN."
|
||||
shop_trial_length: "Shop Trial Length (Days)"
|
||||
shop_trial_length_tip: "The length of time (in days) that enterprises who are set up as shops can run as a trial period."
|
||||
fixed_monthly_charge: "Fixed Monthly Charge"
|
||||
fixed_monthly_charge_tip: "A fixed monthly charge for all enterprises who are set up as a shop and have exceeded the minimum billable turnover (if set)."
|
||||
percentage_of_turnover: "Percentage of turnover"
|
||||
percentage_of_turnover_tip: "When greater than zero, this rate (0.0 - 1.0) will be applied to the total turnover of each shop and added to any fixed charges (to the left) to calculate the monthly bill."
|
||||
monthly_cap_excl_tax: "monthly cap (excl. GST)"
|
||||
monthly_cap_excl_tax_tip: "When greater than zero, this value will be used as a cap on the amount that shops will be charged each month."
|
||||
tax_rate: "Tax Rate"
|
||||
tax_rate_tip: "Tax rate that applies to the the monthly bill that enterprises are charged for using the system."
|
||||
minimum_monthly_billable_turnover: "Minimum Monthly Billable Turnover"
|
||||
minimum_monthly_billable_turnover_tip: "Minimum monthly turnover before a shopfront will be charged for using OFN. Enterprises turning over less than this amount in a month will not be charged, either as a percentage or fixed rate."
|
||||
example_bill_calculator: "Example Bill Calculator"
|
||||
example_bill_calculator_legend: "Alter the example turnover to visualise the effect of the settings to the left."
|
||||
example_monthly_turnover: "Example Monthly Turnover"
|
||||
example_monthly_turnover_tip: "An example monthly turnover for an enterprise which will be used to generate calculate an example monthly bill below."
|
||||
cap_reached?: "Cap reached ?"
|
||||
cap_reached?_tip: "Whether the cap (specified to the left) has been reached, given the settings and the turnover provided."
|
||||
included_tax: "Include Tax"
|
||||
included_tax_tip: "The total tax included in the example monthly bill, given the settings and the turnover provided."
|
||||
total_monthly_bill_incl_tax: "Total Monthly Bill (Incl. Tax)"
|
||||
total_monthly_bill_incl_tax_tip: "The example total monthly bill with tax included, given the settings and the turnover provided."
|
||||
customers:
|
||||
index:
|
||||
add_customer: "Add customer"
|
||||
@@ -858,16 +899,6 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
roles: "Roles"
|
||||
update: "Update"
|
||||
add_producer_property: "Add producer property"
|
||||
admin_settings: "Settings"
|
||||
update_invoice: "Update Invoices"
|
||||
finalise_invoice: "Finalise Invoices"
|
||||
finalise_user_invoices: "Finalise User Invoices"
|
||||
finalise_user_invoice_explained: "Use this button to finalize all invoices in the system for the previous calendar month. This task can be set up to run automatically once a month."
|
||||
manually_run_task: "Manually Run Task "
|
||||
update_user_invoices: "Update User Invoices"
|
||||
update_user_invoice_explained: "Use this button to immediately update invoices for the month to date for each enterprise user in the system. This task can be set up to run automatically every night."
|
||||
auto_finalise_invoices: "Auto-finalise invoices monthly on the 2nd at 1:30am"
|
||||
auto_update_invoices: "Auto-update invoices nightly at 1:00am"
|
||||
in_progress: "In Progress"
|
||||
started_at: "Started at"
|
||||
queued: "Queued"
|
||||
@@ -878,8 +909,6 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
no_customers_found: "No customers found"
|
||||
go: "Go"
|
||||
hub: "Hub"
|
||||
accounts_administration_distributor: "accounts administration distributor"
|
||||
accounts_and_billing: "Accounts & Billing"
|
||||
producer: "Producer"
|
||||
product: "Product"
|
||||
price: "Price"
|
||||
@@ -1015,7 +1044,7 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
validation_msg_product_category_cant_be_blank: "^Product Category cant be blank"
|
||||
validation_msg_tax_category_cant_be_blank: "^Tax Category can't be blank"
|
||||
validation_msg_is_associated_with_an_exising_customer: "is associated with an existing customer"
|
||||
|
||||
|
||||
spree:
|
||||
shipment_states:
|
||||
backorder: backorder
|
||||
|
||||
@@ -46,6 +46,8 @@ en:
|
||||
producers_join: Australian producers are now welcome to join the Open Food Network. #FIXME
|
||||
charges_sales_tax: Charges GST?
|
||||
print_invoice: "Print Invoice"
|
||||
print_ticket: "Print Ticket"
|
||||
select_ticket_printer: "Select printer for tickets"
|
||||
send_invoice: "Send Invoice"
|
||||
resend_confirmation: "Resend Confirmation"
|
||||
view_order: "View Order"
|
||||
@@ -57,16 +59,12 @@ en:
|
||||
must_have_valid_business_number: "%{enterprise_name} must have a valid ABN before invoices can be sent."
|
||||
invoice: "Invoice"
|
||||
percentage_of_sales: "%{percentage} of sales"
|
||||
percentage_of_turnover: "Percentage of turnover"
|
||||
monthly_cap_excl_tax: "monthly cap (excl. GST)"
|
||||
capped_at_cap: "capped at %{cap}"
|
||||
per_month: "per month"
|
||||
free: "free"
|
||||
free_trial: "free trial"
|
||||
plus_tax: "plus GST"
|
||||
total_monthly_bill_incl_tax: "Total Monthly Bill (Incl. Tax)"
|
||||
min_bill_turnover_desc: "once turnover exceeds %{mbt_amount}"
|
||||
business_model_configuration: "Business model configuration"
|
||||
say_no: "No"
|
||||
say_yes: "Yes"
|
||||
then: then
|
||||
@@ -80,6 +78,7 @@ en:
|
||||
loading: Loading...
|
||||
show_more: Show more
|
||||
show_all: Show all
|
||||
show_all_with_more: "Show All (%{num} More)"
|
||||
cancel: Cancel
|
||||
|
||||
admin:
|
||||
@@ -120,6 +119,53 @@ en:
|
||||
unsaved_confirm_leave: "There are unsaved changed on this page. Continue without saving?"
|
||||
unsaved_changes: "You have unsaved changes"
|
||||
|
||||
accounts_and_billing_settings:
|
||||
method_settings:
|
||||
default_accounts_payment_method: "Default Accounts Payment Method"
|
||||
default_accounts_shipping_method: "Default Accounts Shipping Method"
|
||||
edit:
|
||||
accounts_and_billing: "Accounts & Billing"
|
||||
accounts_administration_distributor: "Accounts Administration Distributor"
|
||||
admin_settings: "Settings"
|
||||
update_invoice: "Update Invoices"
|
||||
auto_update_invoices: "Auto-update invoices nightly at 1:00am"
|
||||
finalise_invoice: "Finalise Invoices"
|
||||
auto_finalise_invoices: "Auto-finalise invoices monthly on the 2nd at 1:30am"
|
||||
manually_run_task: "Manually Run Task "
|
||||
update_user_invoice_explained: "Use this button to immediately update invoices for the month to date for each enterprise user in the system. This task can be set up to run automatically every night."
|
||||
finalise_user_invoices: "Finalise User Invoices"
|
||||
finalise_user_invoice_explained: "Use this button to finalize all invoices in the system for the previous calendar month. This task can be set up to run automatically once a month."
|
||||
update_user_invoices: "Update User Invoices"
|
||||
|
||||
business_model_configuration:
|
||||
edit:
|
||||
business_model_configuration: "Business Model"
|
||||
business_model_configuration_tip: "Configure the rate at which shops will be charged each month for use of the Open Food Network."
|
||||
bill_calculation_settings: "Bill Calculation Settings"
|
||||
bill_calculation_settings_tip: "Adjust the amount that enterprises will be billed each month for use of the OFN."
|
||||
shop_trial_length: "Shop Trial Length (Days)"
|
||||
shop_trial_length_tip: "The length of time (in days) that enterprises who are set up as shops can run as a trial period."
|
||||
fixed_monthly_charge: "Fixed Monthly Charge"
|
||||
fixed_monthly_charge_tip: "A fixed monthly charge for all enterprises who are set up as a shop and have exceeded the minimum billable turnover (if set)."
|
||||
percentage_of_turnover: "Percentage of turnover"
|
||||
percentage_of_turnover_tip: "When greater than zero, this rate (0.0 - 1.0) will be applied to the total turnover of each shop and added to any fixed charges (to the left) to calculate the monthly bill."
|
||||
monthly_cap_excl_tax: "monthly cap (excl. GST)"
|
||||
monthly_cap_excl_tax_tip: "When greater than zero, this value will be used as a cap on the amount that shops will be charged each month."
|
||||
tax_rate: "Tax Rate"
|
||||
tax_rate_tip: "Tax rate that applies to the the monthly bill that enterprises are charged for using the system."
|
||||
minimum_monthly_billable_turnover: "Minimum Monthly Billable Turnover"
|
||||
minimum_monthly_billable_turnover_tip: "Minimum monthly turnover before a shopfront will be charged for using OFN. Enterprises turning over less than this amount in a month will not be charged, either as a percentage or fixed rate."
|
||||
example_bill_calculator: "Example Bill Calculator"
|
||||
example_bill_calculator_legend: "Alter the example turnover to visualise the effect of the settings to the left."
|
||||
example_monthly_turnover: "Example Monthly Turnover"
|
||||
example_monthly_turnover_tip: "An example monthly turnover for an enterprise which will be used to generate calculate an example monthly bill below."
|
||||
cap_reached?: "Cap Reached ?"
|
||||
cap_reached?_tip: "Whether the cap (specified to the left) has been reached, given the settings and the turnover provided."
|
||||
included_tax: "Included tax"
|
||||
included_tax_tip: "The total tax included in the example monthly bill, given the settings and the turnover provided."
|
||||
total_monthly_bill_incl_tax: "Total Monthly Bill (Incl. Tax)"
|
||||
total_monthly_bill_incl_tax_tip: "The example total monthly bill with tax included, given the settings and the turnover provided."
|
||||
|
||||
customers:
|
||||
index:
|
||||
add_customer: "Add Customer"
|
||||
@@ -144,6 +190,7 @@ en:
|
||||
|
||||
cache_settings:
|
||||
show:
|
||||
title: Caching
|
||||
distributor: Distributor
|
||||
order_cycle: Order Cycle
|
||||
status: Status
|
||||
@@ -274,10 +321,11 @@ en:
|
||||
inventory_settings:
|
||||
text1: You may opt to manage stock levels and prices in via your
|
||||
inventory: inventory
|
||||
text2: "If you are using the inventory tool, you can select whether new products \
|
||||
added by your suppliers need to be added to your inventory before they can be \
|
||||
stocked. If you are not using your inventory to manage your products you should \
|
||||
select the 'recommended' option below:"
|
||||
text2: >
|
||||
If you are using the inventory tool, you can select whether new products
|
||||
added by your suppliers need to be added to your inventory before they can be
|
||||
stocked. If you are not using your inventory to manage your products you should
|
||||
select the 'recommended' option below:
|
||||
preferred_product_selection_from_inventory_only_yes: New products can be put into my shopfront (recommended)
|
||||
preferred_product_selection_from_inventory_only_no: New products must be added to my inventory before they can be put into my shopfront
|
||||
payment_methods:
|
||||
@@ -306,7 +354,7 @@ en:
|
||||
visible: Visible
|
||||
not_visible: Not visible
|
||||
permalink: Permalink (no spaces)
|
||||
permalink_tip: "This permalink is used to create the url to your shop: {{link}} your-shop-name/shop"
|
||||
permalink_tip: "This permalink is used to create the url to your shop: %{link}your-shop-name/shop"
|
||||
link_to_front: Link to shop front
|
||||
link_to_front_tip: A direct link to your shopfront on the Open Food Network.
|
||||
shipping_methods:
|
||||
@@ -325,12 +373,12 @@ en:
|
||||
allow_guest_orders_tip: "Allow checkout as guest or require a registered user."
|
||||
allow_guest_orders_false: "Require login to order"
|
||||
allow_guest_orders_true: "Allow guest checkout"
|
||||
shopfront_message_placeholder: \
|
||||
An optional explanation for customers detailing how your shopfront works, \
|
||||
shopfront_message_placeholder: >
|
||||
An optional explanation for customers detailing how your shopfront works,
|
||||
to be displayed above the product list on your shop page.
|
||||
shopfront_closed_message_placeholder: \
|
||||
A message which provides a more detailed explanation about why your shop is \
|
||||
closed and/or when customers can expect it to open again. This is displayed \
|
||||
shopfront_closed_message_placeholder: >
|
||||
A message which provides a more detailed explanation about why your shop is
|
||||
closed and/or when customers can expect it to open again. This is displayed
|
||||
on your shop only when you have no active order cycles (ie. shop is closed).
|
||||
open_date: Open Date
|
||||
close_date: Close Date
|
||||
@@ -394,6 +442,8 @@ en:
|
||||
choose_option: Please choose one of the options above.
|
||||
change_now: Change now
|
||||
enterprise_user_index:
|
||||
loading_enterprises: LOADING ENTERPRISES
|
||||
no_enterprises_found: No enterprises found.
|
||||
search_placeholder: Search By Name
|
||||
manage: Manage
|
||||
new_form:
|
||||
@@ -415,7 +465,7 @@ en:
|
||||
order_cycles:
|
||||
advanced_settings:
|
||||
title: Advanced Settings
|
||||
choose_product_tip: You can opt to restrict all available products (both incoming and outgoing), to only those in {{inventory}}'s inventory.
|
||||
choose_product_tip: You can opt to restrict all available products (both incoming and outgoing), to only those in %{inventory}'s inventory.
|
||||
preferred_product_selection_from_coordinator_inventory_only_here: Coordinator's Inventory Only
|
||||
preferred_product_selection_from_coordinator_inventory_only_all: All Available Products
|
||||
save_reload: Save and Reload Page
|
||||
@@ -461,6 +511,11 @@ en:
|
||||
shared:
|
||||
user_guide_link:
|
||||
user_guide: User Guide
|
||||
invoice_settings:
|
||||
edit:
|
||||
title: Invoice Settings
|
||||
invoice_style2?: Use the alternative invoice model that includes total tax breakdown per rate and tax rate info per item (not yet suitable for countries displaying prices excluding tax)
|
||||
enable_receipt_printing?: Show options for printing receipts using thermal printers in order dropdown?
|
||||
|
||||
home:
|
||||
hubs:
|
||||
@@ -481,10 +536,30 @@ en:
|
||||
require_customer_html: "Please %{contact} %{enterprise} to become a customer."
|
||||
|
||||
# Printable Invoice Columns
|
||||
invoice_column_item: "Item"
|
||||
invoice_column_qty: "Qty"
|
||||
invoice_billing_address: "Billing address:"
|
||||
invoice_column_tax: "GST"
|
||||
invoice_column_price: "Price"
|
||||
invoice_column_item: "Item"
|
||||
invoice_column_qty: "Qty"
|
||||
invoice_column_unit_price_with_taxes: "Unit price (Incl. tax)"
|
||||
invoice_column_unit_price_without_taxes: "Unit price (Excl. tax)"
|
||||
invoice_column_price_with_taxes: "Total price (Incl. tax)"
|
||||
invoice_column_price_without_taxes: "Total price (Excl. tax)"
|
||||
invoice_column_tax_rate: "Tax rate"
|
||||
tax_invoice: "TAX INVOICE"
|
||||
tax_total: "Total tax (%{rate}):"
|
||||
total_excl_tax: "Total (Excl. tax):"
|
||||
total_incl_tax: "Total (Incl. tax):"
|
||||
abn: "ABN:"
|
||||
acn: "ACN:"
|
||||
invoice_issued_on: "Invoice issued on:"
|
||||
order_number: "Invoice number:"
|
||||
date_of_transaction: "Date of transaction:"
|
||||
|
||||
ticket_column_qty: "Qty"
|
||||
ticket_column_item: "Item"
|
||||
ticket_column_unit_price: "Unit Price"
|
||||
ticket_column_total_price: "Total Price"
|
||||
|
||||
logo: "Logo (640x130)" #FIXME
|
||||
logo_mobile: "Mobile logo (75x26)" #FIXME
|
||||
@@ -949,7 +1024,6 @@ See the %{link} to find out more about %{sitename}'s features and to start using
|
||||
products_distributor: Distributor
|
||||
products_distributor_info: When you select a distributor for your order, their address and pickup times will be displayed here.
|
||||
|
||||
shop_trial_length: "Shop Trial Length (Days)"
|
||||
shop_trial_expires_in: "Your shopfront trial expires in"
|
||||
shop_trial_expired_notice: "Good news! We have decided to extend shopfront trials until further notice."
|
||||
|
||||
@@ -1187,16 +1261,6 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
roles: "Roles"
|
||||
update: "Update"
|
||||
add_producer_property: "Add producer property"
|
||||
admin_settings: "Settings"
|
||||
update_invoice: "Update Invoices"
|
||||
finalise_invoice: "Finalise Invoices"
|
||||
finalise_user_invoices: "Finalise User Invoices"
|
||||
finalise_user_invoice_explained: "Use this button to finalize all invoices in the system for the previous calendar month. This task can be set up to run automatically once a month."
|
||||
manually_run_task: "Manually Run Task "
|
||||
update_user_invoices: "Update User Invoices"
|
||||
update_user_invoice_explained: "Use this button to immediately update invoices for the month to date for each enterprise user in the system. This task can be set up to run automatically every night."
|
||||
auto_finalise_invoices: "Auto-finalise invoices monthly on the 2nd at 1:30am"
|
||||
auto_update_invoices: "Auto-update invoices nightly at 1:00am"
|
||||
in_progress: "In Progress"
|
||||
started_at: "Started at"
|
||||
queued: "Queued"
|
||||
@@ -1207,8 +1271,6 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
no_customers_found: "No customers found"
|
||||
go: "Go"
|
||||
hub: "Hub"
|
||||
accounts_administration_distributor: "accounts administration distributor"
|
||||
accounts_and_billing: "Accounts & Billing"
|
||||
producer: "Producer"
|
||||
product: "Product"
|
||||
price: "Price"
|
||||
@@ -1257,6 +1319,12 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
edit_profile_details_etc: "Change your profile description, images, etc."
|
||||
order_cycle: "Order Cycle"
|
||||
remove_tax: "Remove tax"
|
||||
enterprise_terms_of_service: "Enterprise Terms of Service"
|
||||
enterprises_require_tos: "Enterprises must accept Terms of Service"
|
||||
enterprise_tos_link: "Enterprise Terms of Service link"
|
||||
enterprise_tos_message: "We want to work with people that share our aims and values. As such we ask new enterprises to agree to our "
|
||||
enterprise_tos_link_text: "Terms of Service."
|
||||
enterprise_tos_agree: "I agree to the above Terms of Service"
|
||||
tax_settings: "Tax Settings"
|
||||
products_require_tax_category: "products require tax category"
|
||||
admin_shared_address_1: "Address"
|
||||
@@ -1290,6 +1358,22 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
report_order_cycle: "Order Cycle: "
|
||||
report_entreprises: "Enterprises: "
|
||||
report_users: "Users: "
|
||||
report_tax_rates: "Tax rates"
|
||||
report_tax_types: "Tax types"
|
||||
report_header_order_number: "Order number"
|
||||
report_header_date: "Date"
|
||||
report_header_items: "Items"
|
||||
report_header_items_total: "Items total %{currency_symbol}"
|
||||
report_header_taxable_items_total: "Taxable Items Total (%{currency_symbol})"
|
||||
report_header_sales_tax: "Sales Tax (%{currency_symbol})"
|
||||
report_header_delivery_charge: "Delivery Charge (%{currency_symbol})"
|
||||
report_header_tax_on_delivery: "Tax on Delivery (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "Tax on Fees (%{currency_symbol})"
|
||||
report_header_total_tax: "Total Tax (%{currency_symbol})"
|
||||
report_header_customer: "Customer"
|
||||
report_header_distributor: "Distributor"
|
||||
report_header_total_excl_vat: "Total excl. tax (%{currency_symbol})"
|
||||
report_header_total_incl_vat: "Total incl. tax (%{currency_symbol})"
|
||||
initial_invoice_number: "Initial invoice number:"
|
||||
invoice_date: "Invoice date:"
|
||||
due_date: "Due date:"
|
||||
@@ -1334,7 +1418,137 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
validation_msg_tax_category_cant_be_blank: "^Tax Category can't be blank"
|
||||
validation_msg_is_associated_with_an_exising_customer: "is associated with an existing customer"
|
||||
|
||||
js:
|
||||
admin:
|
||||
modals:
|
||||
got_it: Got it
|
||||
tag_rule_help:
|
||||
title: Tag Rules
|
||||
overview: Overview
|
||||
overview_text: >
|
||||
Tag rules provide a way to describe which items are visible or otherwise
|
||||
to which customers. Items can be Shipping Methods, Payment Methods,
|
||||
Products and Order Cycles.
|
||||
by_default_rules: "'By Default...' Rules"
|
||||
by_default_rules_text: >
|
||||
Default rules allow you to hide items so that they are not visible by default.
|
||||
This behaviour can then be overriden by non-default rules for customers with
|
||||
particular tags.
|
||||
customer_tagged_rules: "'Customers Tagged...' Rules"
|
||||
customer_tagged_rules_text: >
|
||||
By creating rules related to a specific customer tag, you can override the default
|
||||
behaviour (whether it be to show or to hide items) for customers with the specified tag.
|
||||
panels:
|
||||
save: SAVE
|
||||
saved: SAVED
|
||||
saving: SAVING
|
||||
enterprise_package:
|
||||
hub_profile: Hub Profile
|
||||
hub_profile_cost: "COST: ALWAYS FREE"
|
||||
hub_profile_text1: >
|
||||
People can find and contact you on the Open Food Network. Your enterprise will be
|
||||
visible on the map, and will be searchable in listings.
|
||||
hub_profile_text2: >
|
||||
Having a profile, and making connections within your local food system through
|
||||
the Open Food Network will always be free.
|
||||
hub_shop: Hub Shop
|
||||
hub_shop_text1: >
|
||||
Your enterprise is the backbone of your local food system. You aggregate produce
|
||||
from other enterprises and can sell it through your shop on the Open Food Network.
|
||||
hub_shop_text2: >
|
||||
Hubs can take many forms, whether they be a food co-op, a buying group, a veggie-box
|
||||
program, or a local grocery store.
|
||||
hub_shop_text3: >
|
||||
If you also want to sell your own products, you will need to switch this enterprise
|
||||
to be a producer.
|
||||
choose_package: Please Choose a Package
|
||||
choose_package_text1: >
|
||||
Your enterprise will not be fully activated until a package is selected from the
|
||||
options on the left.
|
||||
choose_package_text2: >
|
||||
Click on an option to see more detailed information about each package, and hit
|
||||
the red SAVE button when you are done!
|
||||
profile_only: Profile Only
|
||||
profile_only_cost: "COST: ALWAYS FREE"
|
||||
profile_only_text1: >
|
||||
A profile makes you visible and contactable to others and is a way to share your story.
|
||||
profile_only_text2: >
|
||||
If you prefer to focus on producing food, and want to leave the work of selling it
|
||||
to someone else, you won't require a shop on the Open Food Network.
|
||||
profile_only_text3: >
|
||||
Add your products to Open Food Network, allowing hubs to stock your products in
|
||||
their stores.
|
||||
producer_shop: Producer Shop
|
||||
producer_shop_text1: >
|
||||
Sell your products directly to customers through your very own Open Food Network
|
||||
shopfront.
|
||||
producer_shop_text2: >
|
||||
A Producer Shop is for your produce only, if you want to sell produce grown/produced
|
||||
off site, please select 'Producer Hub'.
|
||||
producer_hub: Producer Hub
|
||||
producer_hub_text1: >
|
||||
Your enterprise is the backbone of your local food system. You can sell your own
|
||||
produce as well as produce aggregated from other enterprises through your shopfront
|
||||
on the Open Food Network.
|
||||
producer_hub_text2: >
|
||||
Producer Hubs can take many forms, whether they be a CSA, a veggie-box program,
|
||||
or a food co-op with a rooftop garden.
|
||||
producer_hub_text3: >
|
||||
The Open Food Network aims to support as many hub models as possible, so no matter
|
||||
your situation, we want to provide the tools you need to run your organisation or
|
||||
local food business.
|
||||
get_listing: Get a listing
|
||||
always_free: ALWAYS FREE
|
||||
sell_produce_others: Sell produce from others
|
||||
sell_own_produce: Sell your own produce
|
||||
sell_both: Sell produce from self and others
|
||||
enterprise_producer:
|
||||
producer: Producer
|
||||
producer_text1: >
|
||||
Producers make yummy things to eat or drink. You're a producer if you grow it,
|
||||
raise it, brew it, bake it, ferment it, milk it or mould it.
|
||||
producer_text2: >
|
||||
Producers can also perform other functions, such as aggregating food from other
|
||||
enterprises and selling it through a shop on the Open Food Network.
|
||||
non_producer: Non-producer
|
||||
non_producer_text1: >
|
||||
Non-producers do not produce any food themselves, meaning that they cannot create
|
||||
their own products for sale through the Open Food Network.
|
||||
non_producer_text2: >
|
||||
Instead, non-producers specialise in linking producers to the end eater, whether it
|
||||
be by aggregating, grading, packing, selling or delivering food.
|
||||
producer_desc: Producers of food
|
||||
producer_example: eg. GROWERS, BAKERS, BREWERS, MAKERS
|
||||
non_producer_desc: All other food enterprises
|
||||
non_producer_example: eg. Grocery stores, Food co-ops, Buying groups
|
||||
enterprise_status:
|
||||
status_title: "%{name} is set up and ready to go!"
|
||||
severity: Severity
|
||||
description: Description
|
||||
resolve: Resolve
|
||||
new_tag_rule_dialog:
|
||||
select_rule_type: "Select a rule type:"
|
||||
out_of_stock:
|
||||
reduced_stock_available: Reduced stock available
|
||||
out_of_stock_text: >
|
||||
While you've been shopping, the stock levels for one or more of the products
|
||||
in your cart have reduced. Here's what's changed:
|
||||
now_out_of_stock: is now out of stock.
|
||||
only_n_remainging: "now only has %{num} remaining."
|
||||
|
||||
spree:
|
||||
admin:
|
||||
products:
|
||||
bulk_edit:
|
||||
header:
|
||||
title: Bulk Edit Products
|
||||
indicators:
|
||||
title: LOADING PRODUCTS
|
||||
no_products: "No products yet. Why don't you add some?"
|
||||
no_results: "Sorry, no results match"
|
||||
variants:
|
||||
autocomplete:
|
||||
producer_name: Producer
|
||||
date_picker:
|
||||
format: ! '%Y-%m-%d'
|
||||
js_format: 'yy-mm-dd'
|
||||
@@ -1356,6 +1570,10 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
processing: processing
|
||||
void: void
|
||||
invalid: invalid
|
||||
order_mailer:
|
||||
invoice_email:
|
||||
hi: "Hi %{name}"
|
||||
invoice_attached_text: Please find attached an invoice for your recent order from
|
||||
order_state:
|
||||
address: address
|
||||
adjustments: adjustments
|
||||
@@ -1369,3 +1587,6 @@ Please follow the instructions there to make your enterprise visible on the Open
|
||||
resumed: resumed
|
||||
returned: returned
|
||||
skrill: skrill
|
||||
orders:
|
||||
invoice:
|
||||
tax_invoice: "TAX INVOICE: "
|
||||
|
||||
@@ -28,6 +28,8 @@ fr:
|
||||
producers_join: Les producteurs et autres hubs basés en France sont invités à rejoindre Open Food France.
|
||||
charges_sales_tax: Soumis à la TVA?
|
||||
print_invoice: "Imprimer la facture"
|
||||
print_ticket: "Imprimer le ticket"
|
||||
select_ticket_printer: "Choisir l'imprimante à tickets"
|
||||
send_invoice: "Envoyer la facture"
|
||||
resend_confirmation: "Renvoyer la confirmation"
|
||||
view_order: "Voir la commande"
|
||||
@@ -39,16 +41,12 @@ fr:
|
||||
must_have_valid_business_number: "%{enterprise_name} doit avoir un SIRET valide avant que les factures puissent être envoyées."
|
||||
invoice: "Facture"
|
||||
percentage_of_sales: "%{percentage} des ventes"
|
||||
percentage_of_turnover: "Pourcentage du chiffre d'affaire"
|
||||
monthly_cap_excl_tax: "plafond mensuel (sans TVA)"
|
||||
capped_at_cap: "plafonné à %{cap}"
|
||||
per_month: "par mois"
|
||||
free: "gratuit"
|
||||
free_trial: "Utilisation contre contribution libre"
|
||||
plus_tax: "plus TVA"
|
||||
total_monthly_bill_incl_tax: "Facture mensuelle totale (taxes incluses)"
|
||||
min_bill_turnover_desc: "Quand le chiffre d'affaire dépasse %{mbt_amount}"
|
||||
business_model_configuration: "Configuration du modèle économique"
|
||||
say_no: "Non"
|
||||
say_yes: "Oui"
|
||||
then: puis
|
||||
@@ -93,6 +91,51 @@ fr:
|
||||
has_n_rules: "a %{num} règles"
|
||||
unsaved_confirm_leave: "Des modifications n'ont pas été sauvegardées et seront perdues si vous quittez la page. Souhaitez-vous quitter la page?"
|
||||
unsaved_changes: "Des modifications n'ont pas été sauvegardées."
|
||||
accounts_and_billing_settings:
|
||||
method_settings:
|
||||
default_accounts_payment_method: "Default Accounts Payment Method"
|
||||
default_accounts_shipping_method: "Default Accounts Shipping Method"
|
||||
edit:
|
||||
accounts_and_billing: "Compte & Facturation"
|
||||
accounts_administration_distributor: "entreprise d'administration des comptes (facturation des hubs)"
|
||||
admin_settings: "Paramètres"
|
||||
update_invoice: "Mettre à jour les factures"
|
||||
finalise_invoice: "Finaliser les factures"
|
||||
finalise_user_invoices: "Finaliser les factures utilisateurs"
|
||||
finalise_user_invoice_explained: "Cliquez ici pour finaliser toutes les factures pour le mois calendaire précédent. Cette tâche peut-être définie pour être opérée automatiquement une fois par mois."
|
||||
manually_run_task: "Tache manuelle"
|
||||
update_user_invoices: "Mettre à jour les factures utilisateurs"
|
||||
update_user_invoice_explained: "Cliquez ici pour mettre à jour immédiatement les factures pour le mois en cours pour toutes les entreprises utilisant le système. Cette tache peut être définie pour s'effectuer automatiquement chaque nuit."
|
||||
auto_finalise_invoices: "Finaliser automatiquement les factures le 2 de chaque mois à 01:30"
|
||||
auto_update_invoices: "Mettre à jour automatiquement les factures chaque nuit à 01:00"
|
||||
business_model_configuration:
|
||||
edit:
|
||||
business_model_configuration: "Configuration du modèle économique"
|
||||
business_model_configuration_tip: "Configure the rate at which shops will be charged each month for use of the Open Food Network."
|
||||
bill_calculation_settings: "Bill Calculation Settings"
|
||||
bill_calculation_settings_tip: "Adjust the amount that enterprises will be billed each month for use of the OFN."
|
||||
shop_trial_length: "Durée de la période de test (jours)"
|
||||
shop_trial_length_tip: "The length of time (in days) that enterprises who are set up as shops can run as a trial period."
|
||||
fixed_monthly_charge: "Fixed Monthly Charge"
|
||||
fixed_monthly_charge_tip: "A fixed monthly charge for all enterprises who are set up as a shop and have exceeded the minimum billable turnover (if set)."
|
||||
percentage_of_turnover: "Pourcentage du chiffre d'affaire"
|
||||
percentage_of_turnover_tip: "When greater than zero, this rate (0.0 - 1.0) will be applied to the total turnover of each shop and added to any fixed charges (to the left) to calculate the monthly bill."
|
||||
monthly_cap_excl_tax: "plafond mensuel (sans TVA)"
|
||||
monthly_cap_excl_tax_tip: "When greater than zero, this value will be used as a cap on the amount that shops will be charged each month."
|
||||
tax_rate: "Tax Rate"
|
||||
tax_rate_tip: "Tax rate that applies to the the monthly bill that enterprises are charged for using the system."
|
||||
minimum_monthly_billable_turnover: "Minimum Monthly Billable Turnover"
|
||||
minimum_monthly_billable_turnover_tip: "Minimum monthly turnover before a shopfront will be charged for using OFN. Enterprises turning over less than this amount in a month will not be charged, either as a percentage or fixed rate."
|
||||
example_bill_calculator: "Example Bill Calculator"
|
||||
example_bill_calculator_legend: "Alter the example turnover to visualise the effect of the settings to the left."
|
||||
example_monthly_turnover: "Example Monthly Turnover"
|
||||
example_monthly_turnover_tip: "An example monthly turnover for an enterprise which will be used to generate calculate an example monthly bill below."
|
||||
cap_reached?: "Cap Reached ?"
|
||||
cap_reached?_tip: "Whether the cap (specified to the left) has been reached, given the settings and the turnover provided."
|
||||
included_tax: "Included tax"
|
||||
included_tax_tip: "The total tax included in the example monthly bill, given the settings and the turnover provided."
|
||||
total_monthly_bill_incl_tax: "Facture mensuelle totale (taxes incluses)"
|
||||
total_monthly_bill_incl_tax_tip: "The example total monthly bill with tax included, given the settings and the turnover provided."
|
||||
customers:
|
||||
index:
|
||||
add_customer: "Ajouter un acheteur"
|
||||
@@ -232,8 +275,8 @@ fr:
|
||||
promo_image_note2: Votre bannière doit mesurer 1200 x 260, toute image non conforme sera rognée.
|
||||
promo_image_note3: La bannière est affichée en haut de la page de votre entreprise et dans sa version condensée (pop-up).
|
||||
inventory_settings:
|
||||
text1: Vous pouvez choisir de gérer vos stocks et prix via votre
|
||||
inventory: catalogue boutique
|
||||
text1: Vous pouvez gérer votre stock et vos prix via votre
|
||||
inventory: inventaire
|
||||
text2: "Si vous utilisez l'outil \"catalogue boutique\", vous pouvez choisir si les nouveaux produits ajoutés par vos fournisseurs à leurs catalogues doivent être ajoutés à votre catalogue boutique avant de pouvoir être mis en ligne dans votre boutique. Si vous n'utilisez pas l'outil \"catalogue boutique\", sélectionnez l'option précisant \"recommandé\" ci-dessous:"
|
||||
preferred_product_selection_from_inventory_only_yes: Les nouveaux produits des producteurs peuvent être ajoutés à ma boutique en ligne (recommandé)
|
||||
preferred_product_selection_from_inventory_only_no: Les nouveaux produits des producteurs doivent être ajoutés à mon catalogue boutique avant de pouvoir être ajoutés à ma boutique en ligne
|
||||
@@ -261,11 +304,11 @@ fr:
|
||||
visible_in_search: Apparaît sur la plateforme?
|
||||
visible_in_search_tip: Indiquez si vous souhaitez ou ne souhaitez pas que votre entreprise apparaisse sur la carte et dans la liste des boutiques.
|
||||
visible: Visible
|
||||
not_visible: Invisible
|
||||
permalink: Nom affiché dans l'URL (sans espace)
|
||||
permalink_tip: "Ce nom sera utilisé pour créer le lien url permanent de votre boutique {{link}} votre-boutique/shop"
|
||||
link_to_front: Lien URL de la boutique
|
||||
link_to_front_tip: C'est le lien qui permet d'accéder en direct à votre boutique sur Open Food France.
|
||||
not_visible: Pas visible
|
||||
permalink: Lien (pas d'espace)
|
||||
permalink_tip: "This permalink is used to create the url to your shop: %{link}your-shop-name/shop"
|
||||
link_to_front: Link to shop front
|
||||
link_to_front_tip: A direct link to your shopfront on the Open Food Network.
|
||||
shipping_methods:
|
||||
name: Nom
|
||||
applies: Active?
|
||||
@@ -274,10 +317,10 @@ fr:
|
||||
create_one_button: Créer une commission
|
||||
no_method_yet: Vous n'avez pas encore paramétré de méthode de livraison.
|
||||
shop_preferences:
|
||||
shopfront_requires_login: "Boutique visible par tous?"
|
||||
shopfront_requires_login_tip: "Choisissez si les acheteurs doivent être connectés pour voir la boutique ou si la boutique est visible par tout le monde."
|
||||
shopfront_requires_login: "Cette boutique exige un login?"
|
||||
shopfront_requires_login_tip: "Les acheteurs doivent-ils se connecter pour accéder à la boutique?"
|
||||
shopfront_requires_login_false: "Visible par tous"
|
||||
shopfront_requires_login_true: "Visible uniquement pour les acheteurs logués"
|
||||
shopfront_requires_login_true: "Demander aux acheteurs de se connecter"
|
||||
allow_guest_orders: "Commandes des invités"
|
||||
allow_guest_orders_tip: "Autoriser la commande en tant qu'invité ou demander que l'acheteur soit logué."
|
||||
allow_guest_orders_false: "Demander que l'acheteur se logue pour pouvoir commander"
|
||||
@@ -367,7 +410,7 @@ fr:
|
||||
order_cycles:
|
||||
advanced_settings:
|
||||
title: Paramétrages avancés
|
||||
choose_product_tip: Vous pouvez choisir de restreindre la liste des produits pouvant être proposés dans votre cycle de vente (produits entrants et sortants) aux produits du catalogue producteur de l'entreprise {{inventory}}.
|
||||
choose_product_tip: Vous pouvez choisir de restreindre la liste des produits pouvant être proposés dans votre cycle de vente (produits entrants et sortants) aux produits du catalogue producteur de l'entreprise %{inventory}.
|
||||
preferred_product_selection_from_coordinator_inventory_only_here: Uniquement les produits du catalogue boutique
|
||||
preferred_product_selection_from_coordinator_inventory_only_all: Tous les produits disponibles dans les catalogues producteurs
|
||||
save_reload: Sauvegarder et rafraichir la page
|
||||
@@ -411,7 +454,12 @@ fr:
|
||||
title: Propriétés / labels du producteur
|
||||
shared:
|
||||
user_guide_link:
|
||||
user_guide: Guide utilisateur
|
||||
user_guide: Guide l'utilisateur
|
||||
invoice_settings:
|
||||
edit:
|
||||
title: Apparence de la facture
|
||||
invoice_style2?: Utiliser le modèle de facture alternaltif qui comprend une séparation des taxes par taux et une indication du taux appliqué par item (pas encore adapté pour les pays affichant des prix hors taxe)
|
||||
|
||||
home:
|
||||
hubs:
|
||||
show_closed_shops: "Aficher les boutiques fermées"
|
||||
@@ -427,12 +475,39 @@ fr:
|
||||
register: "s'inscrire"
|
||||
contact: "contact"
|
||||
require_customer_login: "La boutique est réservée aux membres."
|
||||
require_login_html: "Déjà inscrit? %{Connectez-vous}. Sinon, %{inscrivez-vous} pour pouvoir faire vos achats."
|
||||
require_customer_html: "Veuillez %{contacter} %{l'entreprise} pour devenir membre."
|
||||
require_login_html: "Déjà inscrit? %{login}. Sinon, %{register} pour pouvoir faire vos achats."
|
||||
require_customer_html: "Veuillez %{contact} %{enterprise} pour devenir membre."
|
||||
|
||||
invoice_billing_address: "Adresse de facturation :"
|
||||
invoice_column_tax: "TVA"
|
||||
invoice_column_price: "Prix"
|
||||
invoice_column_item: "Produit"
|
||||
invoice_column_qty: "Qté"
|
||||
invoice_column_tax: "TVA"
|
||||
invoice_column_price: "Prix"
|
||||
invoice_column_unit_price_with_taxes: "Prix unitaire (TTC)"
|
||||
invoice_column_unit_price_without_taxes: "Prix unitaire (HT)"
|
||||
invoice_column_price_with_taxes: "Prix total (TTC)"
|
||||
invoice_column_price_without_taxes: "Prix total (HT)"
|
||||
invoice_column_tax_rate: "Taux TVA"
|
||||
tax_invoice: "FACTURE"
|
||||
tax_total: "Total TVA (%{rate}) :"
|
||||
total_excl_tax: "Total HT :"
|
||||
total_incl_tax: "Total TTC :"
|
||||
abn: "SIRET :"
|
||||
acn: "n° TVA :"
|
||||
invoice_issued_on: "Facture éditée le :"
|
||||
order_number: "Numéro de facture :"
|
||||
date_of_transaction: "Date de la transaction :"
|
||||
number:
|
||||
percentage:
|
||||
format:
|
||||
format: "%n %"
|
||||
ticket_column_qty: "Qté"
|
||||
ticket_column_item: "Item"
|
||||
ticket_column_unit_price: "Px Unit"
|
||||
ticket_column_total_price: "Px Total"
|
||||
|
||||
logo: "Logo (640x130)"
|
||||
logo_mobile: "Logo smartphone (75x26)"
|
||||
logo_mobile_svg: "Logo smartphone (SVG)"
|
||||
@@ -583,7 +658,7 @@ fr:
|
||||
order_paid: RÉGLÉ
|
||||
order_not_paid: NON RÉGLÉ
|
||||
order_total: Total commande
|
||||
order_payment: "Payer via:"
|
||||
order_payment: "Paiement par :"
|
||||
order_billing_address: Adresse de facturation
|
||||
order_delivery_on: Livraison prévue
|
||||
order_delivery_address: Adresse de livraison
|
||||
@@ -636,7 +711,7 @@ fr:
|
||||
email_payment_paid: RÉGLÉ
|
||||
email_payment_not_paid: NON RÉGLÉ
|
||||
email_payment_summary: Résumé du paiement
|
||||
email_payment_method: "Payer via :"
|
||||
email_payment_method: "Moyen de paiement :"
|
||||
email_shipping_delivery_details: Détails de livraison
|
||||
email_shipping_delivery_time: "Livré le:"
|
||||
email_shipping_delivery_address: "Adresse de livraison:"
|
||||
@@ -838,7 +913,6 @@ fr:
|
||||
products_max_quantity: Quantité max
|
||||
products_distributor: Distributeur
|
||||
products_distributor_info: Quand vous choisissez un distributeur pour votre commande, les adresse et date de retrait seront affichées ici.
|
||||
shop_trial_length: "Durée de la période de test (jours)"
|
||||
shop_trial_expires_in: "Votre période de test se termine dans"
|
||||
shop_trial_expired_notice: "Vous pouvez continuer à utiliser la plateforme en contrepartie d'une contribution libre et volontaire. Merci de nous informer de la façon dont vous souhaitez contribuer :-)"
|
||||
password: Mot de passe
|
||||
@@ -1067,16 +1141,6 @@ fr:
|
||||
roles: "Roles"
|
||||
update: "Mettre à jour"
|
||||
add_producer_property: "Ajouter une propriété"
|
||||
admin_settings: "Paramètres"
|
||||
update_invoice: "Mettre à jour les factures"
|
||||
finalise_invoice: "Finaliser les factures"
|
||||
finalise_user_invoices: "Finaliser les factures utilisateurs"
|
||||
finalise_user_invoice_explained: "Cliquez ici pour finaliser toutes les factures pour le mois calendaire précédent. Cette tâche peut-être définie pour être opérée automatiquement une fois par mois."
|
||||
manually_run_task: "Tache manuelle"
|
||||
update_user_invoices: "Mettre à jour les factures utilisateurs"
|
||||
update_user_invoice_explained: "Cliquez ici pour mettre à jour immédiatement les factures pour le mois en cours pour toutes les entreprises utilisant le système. Cette tache peut être définie pour s'effectuer automatiquement chaque nuit."
|
||||
auto_finalise_invoices: "Finaliser automatiquement les factures le 2 de chaque mois à 01:30"
|
||||
auto_update_invoices: "Mettre à jour automatiquement les factures chaque nuit à 01:00"
|
||||
in_progress: "En cours"
|
||||
started_at: "Commencé à"
|
||||
queued: "En attente"
|
||||
@@ -1087,8 +1151,6 @@ fr:
|
||||
no_customers_found: "Aucun acheteur trouvé"
|
||||
go: "Lancer"
|
||||
hub: "Hub"
|
||||
accounts_administration_distributor: "entreprise d'administration des comptes (facturation des hubs)"
|
||||
accounts_and_billing: "Compte & Facturation"
|
||||
producer: "Producteur"
|
||||
product: "Produit"
|
||||
price: "Prix"
|
||||
@@ -1169,6 +1231,22 @@ fr:
|
||||
report_order_cycle: "Cycle de vente:"
|
||||
report_entreprises: "Entreprises:"
|
||||
report_users: "Managers:"
|
||||
report_tax_rates: "Taxes par taux"
|
||||
report_tax_types: "Taxes par type"
|
||||
report_header_order_number: "Numéro de commande"
|
||||
report_header_date: "Date"
|
||||
report_header_items: "Produits"
|
||||
report_header_items_total: "Total des produits %{currency_symbol}"
|
||||
report_header_taxable_items_total: "Total des produits taxés (%{currency_symbol})"
|
||||
report_header_sales_tax: "Tax sur la vente (%{currency_symbol})"
|
||||
report_header_delivery_charge: "Frais de livraison (%{currency_symbol})"
|
||||
report_header_tax_on_delivery: "Taxe sur la livraison (%{currency_symbol})"
|
||||
report_header_tax_on_fees: "Taxes sur les charges (%{currency_symbol})"
|
||||
report_header_total_tax: "Taxe totale (%{currency_symbol})"
|
||||
report_header_customer: "Acheteur"
|
||||
report_header_distributor: "Distributeur"
|
||||
report_header_total_excl_vat: "Total sans TVA (%{currency_symbol})"
|
||||
report_header_total_incl_vat: "Total avec TVA (%{currency_symbol})"
|
||||
initial_invoice_number: "N° de facture initial:"
|
||||
invoice_date: "Date de facture:"
|
||||
due_date: "Date d'échéance:"
|
||||
|
||||
@@ -39,16 +39,12 @@ it:
|
||||
must_have_valid_business_number: "%{enterprise_name} deve avere una partita iva valida per poter emettere fattura."
|
||||
invoice: "Fattura"
|
||||
percentage_of_sales: "%{percentage} di vendite"
|
||||
percentage_of_turnover: "Percentuale di fatturato"
|
||||
monthly_cap_excl_tax: "tetto mensile (IVA esclusa)"
|
||||
capped_at_cap: "limitato a %{cap}"
|
||||
per_month: "al mese"
|
||||
free: "gratuito"
|
||||
free_trial: "Prova gratuita"
|
||||
plus_tax: "più IVA"
|
||||
total_monthly_bill_incl_tax: "Conto totale mensile (tasse incluse)"
|
||||
min_bill_turnover_desc: "dopo the il ricambio ha superato il %{mbt_amount}"
|
||||
business_model_configuration: "Configurazione del modello di business"
|
||||
say_no: "No"
|
||||
say_yes: "Sì"
|
||||
then: poi
|
||||
@@ -81,6 +77,51 @@ it:
|
||||
tag_has_rules: "Regole esistenti per questo tag: %{num}"
|
||||
has_one_rule: "ha una regola"
|
||||
has_n_rules: "ha %{num} regole"
|
||||
accounts_and_billing_settings:
|
||||
method_settings:
|
||||
default_accounts_payment_method: "Default Accounts Payment Method"
|
||||
default_accounts_shipping_method: "Default Accounts Shipping Method"
|
||||
edit:
|
||||
accounts_and_billing: "Account e conti"
|
||||
accounts_administration_distributor: "account amministrazione distributore"
|
||||
admin_settings: "Impostazioni"
|
||||
update_invoice: "Aggiorna fattura"
|
||||
finalise_invoice: "Finalizza le fatture"
|
||||
finalise_user_invoices: "Finalizza le fatture dell'utente"
|
||||
finalise_user_invoice_explained: "Usa questo bottone per finalizzare tutte le fatture nel sistema per il precedente mese. Questo processo può essere impostato per essere fatto automaticamente una volta al mese."
|
||||
manually_run_task: "Elabora il processo manualmente"
|
||||
update_user_invoices: "Aggiorna le fatture dell'utente"
|
||||
update_user_invoice_explained: "Usa questo bottone per aggiornare a oggi immediatamente le fatture del mese per ogni impresa del sistema. Questo processo può essere impostato per essere eseguito automaticamente ogni notte."
|
||||
auto_finalise_invoices: "Auto-finalizza le fatture il 2 di ogni mese alle 01:30"
|
||||
auto_update_invoices: "Auto-aggiorna le fatture di notte alle 01:00"
|
||||
business_model_configuration:
|
||||
edit:
|
||||
business_model_configuration: "Configurazione del modello di business"
|
||||
business_model_configuration_tip: "Configure the rate at which shops will be charged each month for use of the Open Food Network."
|
||||
bill_calculation_settings: "Bill Calculation Settings"
|
||||
bill_calculation_settings_tip: "Adjust the amount that enterprises will be billed each month for use of the OFN."
|
||||
shop_trial_length: "Durata della prova per negozio (Giorni)"
|
||||
shop_trial_length_tip: "The length of time (in days) that enterprises who are set up as shops can run as a trial period."
|
||||
fixed_monthly_charge: "Fixed Monthly Charge"
|
||||
fixed_monthly_charge_tip: "A fixed monthly charge for all enterprises who are set up as a shop and have exceeded the minimum billable turnover (if set)."
|
||||
percentage_of_turnover: "Percentuale di fatturato"
|
||||
percentage_of_turnover_tip: "When greater than zero, this rate (0.0 - 1.0) will be applied to the total turnover of each shop and added to any fixed charges (to the left) to calculate the monthly bill."
|
||||
monthly_cap_excl_tax: "tetto mensile (IVA esclusa)"
|
||||
monthly_cap_excl_tax_tip: "When greater than zero, this value will be used as a cap on the amount that shops will be charged each month."
|
||||
tax_rate: "Tax Rate"
|
||||
tax_rate_tip: "Tax rate that applies to the the monthly bill that enterprises are charged for using the system."
|
||||
minimum_monthly_billable_turnover: "Minimum Monthly Billable Turnover"
|
||||
minimum_monthly_billable_turnover_tip: "Minimum monthly turnover before a shopfront will be charged for using OFN. Enterprises turning over less than this amount in a month will not be charged, either as a percentage or fixed rate."
|
||||
example_bill_calculator: "Example Bill Calculator"
|
||||
example_bill_calculator_legend: "Alter the example turnover to visualise the effect of the settings to the left."
|
||||
example_monthly_turnover: "Example Monthly Turnover"
|
||||
example_monthly_turnover_tip: "An example monthly turnover for an enterprise which will be used to generate calculate an example monthly bill below."
|
||||
cap_reached?: "Cap Reached ?"
|
||||
cap_reached?_tip: "Whether the cap (specified to the left) has been reached, given the settings and the turnover provided."
|
||||
included_tax: "Included tax"
|
||||
included_tax_tip: "The total tax included in the example monthly bill, given the settings and the turnover provided."
|
||||
total_monthly_bill_incl_tax: "Conto totale mensile (tasse incluse)"
|
||||
total_monthly_bill_incl_tax_tip: "The example total monthly bill with tax included, given the settings and the turnover provided."
|
||||
customers:
|
||||
index:
|
||||
add_customer: "Aggiungi cliente"
|
||||
@@ -586,7 +627,6 @@ it:
|
||||
products_max_quantity: Quantità massima
|
||||
products_distributor: Distributore
|
||||
products_distributor_info: Quando selezioni un distributore per il tuo ordine, i suoi indirizzi e tempi di ritiro saranno mostrati qui.
|
||||
shop_trial_length: "Durata della prova per negozio (Giorni)"
|
||||
shop_trial_expires_in: "La prova per la tua vetrina scadrà in"
|
||||
shop_trial_expired_notice: "Buone notizie! Abbiamo deciso di estendere le prove dei negozi fino a nuova notifica."
|
||||
password: Password
|
||||
@@ -815,16 +855,6 @@ it:
|
||||
roles: "Ruoli"
|
||||
update: "Aggiorna"
|
||||
add_producer_property: "Aggiungi proprietà produttori"
|
||||
admin_settings: "Impostazioni"
|
||||
update_invoice: "Aggiorna fattura"
|
||||
finalise_invoice: "Finalizza le fatture"
|
||||
finalise_user_invoices: "Finalizza le fatture dell'utente"
|
||||
finalise_user_invoice_explained: "Usa questo bottone per finalizzare tutte le fatture nel sistema per il precedente mese. Questo processo può essere impostato per essere fatto automaticamente una volta al mese."
|
||||
manually_run_task: "Elabora il processo manualmente"
|
||||
update_user_invoices: "Aggiorna le fatture dell'utente"
|
||||
update_user_invoice_explained: "Usa questo bottone per aggiornare a oggi immediatamente le fatture del mese per ogni impresa del sistema. Questo processo può essere impostato per essere eseguito automaticamente ogni notte."
|
||||
auto_finalise_invoices: "Auto-finalizza le fatture il 2 di ogni mese alle 01:30"
|
||||
auto_update_invoices: "Auto-aggiorna le fatture di notte alle 01:00"
|
||||
in_progress: "In elaborazione"
|
||||
started_at: "Iniziato alle"
|
||||
queued: "In coda"
|
||||
@@ -835,8 +865,6 @@ it:
|
||||
no_customers_found: "Nessun cliente trovato"
|
||||
go: "Vai"
|
||||
hub: "Distributore"
|
||||
accounts_administration_distributor: "account amministrazione distributore"
|
||||
accounts_and_billing: "Account e conti"
|
||||
producer: "Produttore"
|
||||
product: "Prodotto"
|
||||
price: "Prezzo"
|
||||
|
||||
@@ -39,16 +39,12 @@ nb:
|
||||
must_have_valid_business_number: "%{enterprise_name} må ha et gyldig ORG nr. før fakturaer kan sendes."
|
||||
invoice: "Faktura"
|
||||
percentage_of_sales: "%{percentage} av handel"
|
||||
percentage_of_turnover: "Prosent av omsetning"
|
||||
monthly_cap_excl_tax: "månedlig tak (eks. MVA)"
|
||||
capped_at_cap: "tak på %{cap}"
|
||||
per_month: "pr. måned"
|
||||
free: "gratis"
|
||||
free_trial: "gratis prøveperiode"
|
||||
plus_tax: "pluss MVA"
|
||||
total_monthly_bill_incl_tax: "Total månedlig regning (Inkl. Avgift)"
|
||||
min_bill_turnover_desc: "når omsettning overstiger %{mbt_amount}"
|
||||
business_model_configuration: "Utforming av forretningsmodell"
|
||||
say_no: "Nei"
|
||||
say_yes: "Ja"
|
||||
then: vil
|
||||
@@ -81,6 +77,51 @@ nb:
|
||||
tag_has_rules: "Gjeldende regler for denne merkelappen: %{num}"
|
||||
has_one_rule: "har én regel"
|
||||
has_n_rules: "har %{num} regler"
|
||||
accounts_and_billing_settings:
|
||||
method_settings:
|
||||
default_accounts_payment_method: "Default Accounts Payment Method"
|
||||
default_accounts_shipping_method: "Default Accounts Shipping Method"
|
||||
edit:
|
||||
accounts_and_billing: "Bokføring & Fakturering"
|
||||
accounts_administration_distributor: "bokføringsadministrasjon distributør"
|
||||
admin_settings: "Innstillinger"
|
||||
update_invoice: "Oppdater Fakturaer"
|
||||
finalise_invoice: "Sluttfør Fakturaer"
|
||||
finalise_user_invoices: "Sluttfør Brukerfakturaer"
|
||||
finalise_user_invoice_explained: "Bruk denne knappen til å sluttføre alle fakturaer i systemet for forrige kalendermåned. Denne oppgaven kan settes opp til å kjøres automatisk hver måned."
|
||||
manually_run_task: "Gjør Oppgave Manuelt"
|
||||
update_user_invoices: "Oppdater Brukerfakturaer"
|
||||
update_user_invoice_explained: "Bruk denne knappen til umiddelbart å oppdatere fakturaer for måneden frem til i dag for hver bedriftsbruker i systemet. Denne oppgaven kan settes opp til å kjøres automatisk hver natt."
|
||||
auto_finalise_invoices: "Auto-sluttfør fakturaer månedlig på den 2. kl. 01:30"
|
||||
auto_update_invoices: "Auto-oppdater fakturaer hver natt kl. 01:00"
|
||||
business_model_configuration:
|
||||
edit:
|
||||
business_model_configuration: "Utforming av forretningsmodell"
|
||||
business_model_configuration_tip: "Configure the rate at which shops will be charged each month for use of the Open Food Network."
|
||||
bill_calculation_settings: "Bill Calculation Settings"
|
||||
bill_calculation_settings_tip: "Adjust the amount that enterprises will be billed each month for use of the OFN."
|
||||
shop_trial_length: "Lengden av prøveperioden (dager)"
|
||||
shop_trial_length_tip: "The length of time (in days) that enterprises who are set up as shops can run as a trial period."
|
||||
fixed_monthly_charge: "Fixed Monthly Charge"
|
||||
fixed_monthly_charge_tip: "A fixed monthly charge for all enterprises who are set up as a shop and have exceeded the minimum billable turnover (if set)."
|
||||
percentage_of_turnover: "Prosent av omsetning"
|
||||
percentage_of_turnover_tip: "When greater than zero, this rate (0.0 - 1.0) will be applied to the total turnover of each shop and added to any fixed charges (to the left) to calculate the monthly bill."
|
||||
monthly_cap_excl_tax: "månedlig tak (eks. MVA)"
|
||||
monthly_cap_excl_tax_tip: "When greater than zero, this value will be used as a cap on the amount that shops will be charged each month."
|
||||
tax_rate: "Tax Rate"
|
||||
tax_rate_tip: "Tax rate that applies to the the monthly bill that enterprises are charged for using the system."
|
||||
minimum_monthly_billable_turnover: "Minimum Monthly Billable Turnover"
|
||||
minimum_monthly_billable_turnover_tip: "Minimum monthly turnover before a shopfront will be charged for using OFN. Enterprises turning over less than this amount in a month will not be charged, either as a percentage or fixed rate."
|
||||
example_bill_calculator: "Example Bill Calculator"
|
||||
example_bill_calculator_legend: "Alter the example turnover to visualise the effect of the settings to the left."
|
||||
example_monthly_turnover: "Example Monthly Turnover"
|
||||
example_monthly_turnover_tip: "An example monthly turnover for an enterprise which will be used to generate calculate an example monthly bill below."
|
||||
cap_reached?: "Cap Reached ?"
|
||||
cap_reached?_tip: "Whether the cap (specified to the left) has been reached, given the settings and the turnover provided."
|
||||
included_tax: "Included tax"
|
||||
included_tax_tip: "The total tax included in the example monthly bill, given the settings and the turnover provided."
|
||||
total_monthly_bill_incl_tax: "Total månedlig regning (Inkl. Avgift)"
|
||||
total_monthly_bill_incl_tax_tip: "The example total monthly bill with tax included, given the settings and the turnover provided."
|
||||
customers:
|
||||
index:
|
||||
add_customer: "Legge til kunde"
|
||||
@@ -594,7 +635,6 @@ nb:
|
||||
products_max_quantity: Max mengde
|
||||
products_distributor: Distributør
|
||||
products_distributor_info: Når du velger en distributør for din bestilling, vil deres adresse og hentetider vises her.
|
||||
shop_trial_length: "Lengden av prøveperioden (dager)"
|
||||
shop_trial_expires_in: "Din prøveperiode på butikkfront går ut om "
|
||||
shop_trial_expired_notice: "Gode nyheter! Vi har bestemt å forlenge butikkprøveperioder inntil ytterligere beskjed."
|
||||
password: Passord
|
||||
@@ -823,16 +863,6 @@ nb:
|
||||
roles: "Roller"
|
||||
update: "Oppdater"
|
||||
add_producer_property: "Legg til produsentegenskap"
|
||||
admin_settings: "Innstillinger"
|
||||
update_invoice: "Oppdater Fakturaer"
|
||||
finalise_invoice: "Sluttfør Fakturaer"
|
||||
finalise_user_invoices: "Sluttfør Brukerfakturaer"
|
||||
finalise_user_invoice_explained: "Bruk denne knappen til å sluttføre alle fakturaer i systemet for forrige kalendermåned. Denne oppgaven kan settes opp til å kjøres automatisk hver måned."
|
||||
manually_run_task: "Gjør Oppgave Manuelt"
|
||||
update_user_invoices: "Oppdater Brukerfakturaer"
|
||||
update_user_invoice_explained: "Bruk denne knappen til umiddelbart å oppdatere fakturaer for måneden frem til i dag for hver bedriftsbruker i systemet. Denne oppgaven kan settes opp til å kjøres automatisk hver natt."
|
||||
auto_finalise_invoices: "Auto-sluttfør fakturaer månedlig på den 2. kl. 01:30"
|
||||
auto_update_invoices: "Auto-oppdater fakturaer hver natt kl. 01:00"
|
||||
in_progress: "Pågår"
|
||||
started_at: "Startet"
|
||||
queued: "Satt i kø"
|
||||
@@ -843,8 +873,6 @@ nb:
|
||||
no_customers_found: "Fant ingen kunder"
|
||||
go: "Gå"
|
||||
hub: "Hub"
|
||||
accounts_administration_distributor: "bokføringsadministrasjon distributør"
|
||||
accounts_and_billing: "Bokføring & Fakturering"
|
||||
producer: "Produsent"
|
||||
product: "Produkt"
|
||||
price: "Pris"
|
||||
|
||||
@@ -37,16 +37,12 @@ pt-BR:
|
||||
confirm_resend_order_confirmation: "Tem certeza que deseja enviar novamente o pedido de confirmação do email?"
|
||||
invoice: "Fatura"
|
||||
percentage_of_sales: "%{percentage} de vendas"
|
||||
percentage_of_turnover: " \"Percentual de faturamento\""
|
||||
monthly_cap_excl_tax: "limite mensal (taxas exclusas)"
|
||||
capped_at_cap: "limitado em %{cap}"
|
||||
per_month: "ao mês"
|
||||
free: "grátis"
|
||||
free_trial: "faça um teste grátis"
|
||||
plus_tax: "mais taxas"
|
||||
total_monthly_bill_incl_tax: "Total mensal (taxas inclusas)"
|
||||
min_bill_turnover_desc: "uma vez que o volume de negócio exceder %{mbt_amount}"
|
||||
business_model_configuration: "Configuração do modelo de negócios"
|
||||
say_no: "Não"
|
||||
say_yes: "Sim"
|
||||
then: então
|
||||
@@ -78,6 +74,51 @@ pt-BR:
|
||||
tag_has_rules: "Regras existentes para essa tag: %{num}"
|
||||
has_one_rule: "possui uma regra"
|
||||
has_n_rules: "tem %{num} regras"
|
||||
accounts_and_billing_settings:
|
||||
method_settings:
|
||||
default_accounts_payment_method: "Default Accounts Payment Method"
|
||||
default_accounts_shipping_method: "Default Accounts Shipping Method"
|
||||
edit:
|
||||
accounts_and_billing: "Contas e Faturamento"
|
||||
accounts_administration_distributor: "distribuidor de administração de contas"
|
||||
admin_settings: "Preferências do Sistema"
|
||||
update_invoice: "Atualizar faturas"
|
||||
finalise_invoice: "Finalizar Faturas"
|
||||
finalise_user_invoices: "Finalizar Faturas de Usuário"
|
||||
finalise_user_invoice_explained: "Usar este botão para finalizar todos as faturas no sistema para o calendário do mês anterior. "
|
||||
manually_run_task: "Rodar Tarefa Manualmente"
|
||||
update_user_invoices: "Atualizar Fatura de Usuário"
|
||||
update_user_invoice_explained: "Usar este botão para atualizar imediamente todas as faturas no sistema para o mês atual, para cada usuário da empresa no sistema. Essa tarefa pode ser automatizada para rodar automaticamente toda noite. "
|
||||
auto_finalise_invoices: "Finalizar automaticamente as faturas no dia 2 de cada mês, à 1:30am"
|
||||
auto_update_invoices: "Atualizar automaticamente faturas toda as noites, a 1:00 am"
|
||||
business_model_configuration:
|
||||
edit:
|
||||
business_model_configuration: "Configuração do modelo de negócios"
|
||||
business_model_configuration_tip: "Configure the rate at which shops will be charged each month for use of the Open Food Network."
|
||||
bill_calculation_settings: "Bill Calculation Settings"
|
||||
bill_calculation_settings_tip: "Adjust the amount that enterprises will be billed each month for use of the OFN."
|
||||
shop_trial_length: "Duração de Avaliação da Loja (dias)"
|
||||
shop_trial_length_tip: "The length of time (in days) that enterprises who are set up as shops can run as a trial period."
|
||||
fixed_monthly_charge: "Fixed Monthly Charge"
|
||||
fixed_monthly_charge_tip: "A fixed monthly charge for all enterprises who are set up as a shop and have exceeded the minimum billable turnover (if set)."
|
||||
percentage_of_turnover: " \"Percentual de faturamento\""
|
||||
percentage_of_turnover_tip: "When greater than zero, this rate (0.0 - 1.0) will be applied to the total turnover of each shop and added to any fixed charges (to the left) to calculate the monthly bill."
|
||||
monthly_cap_excl_tax: "limite mensal (taxas exclusas)"
|
||||
monthly_cap_excl_tax_tip: "When greater than zero, this value will be used as a cap on the amount that shops will be charged each month."
|
||||
tax_rate: "Tax Rate"
|
||||
tax_rate_tip: "Tax rate that applies to the the monthly bill that enterprises are charged for using the system."
|
||||
minimum_monthly_billable_turnover: "Minimum Monthly Billable Turnover"
|
||||
minimum_monthly_billable_turnover_tip: "Minimum monthly turnover before a shopfront will be charged for using OFN. Enterprises turning over less than this amount in a month will not be charged, either as a percentage or fixed rate."
|
||||
example_bill_calculator: "Example Bill Calculator"
|
||||
example_bill_calculator_legend: "Alter the example turnover to visualise the effect of the settings to the left."
|
||||
example_monthly_turnover: "Example Monthly Turnover"
|
||||
example_monthly_turnover_tip: "An example monthly turnover for an enterprise which will be used to generate calculate an example monthly bill below."
|
||||
cap_reached?: "Cap Reached ?"
|
||||
cap_reached?_tip: "Whether the cap (specified to the left) has been reached, given the settings and the turnover provided."
|
||||
included_tax: "Included tax"
|
||||
included_tax_tip: "The total tax included in the example monthly bill, given the settings and the turnover provided."
|
||||
total_monthly_bill_incl_tax: "Total mensal (taxas inclusas)"
|
||||
total_monthly_bill_incl_tax_tip: "The example total monthly bill with tax included, given the settings and the turnover provided."
|
||||
customers:
|
||||
index:
|
||||
add_customer: "Adicionar Cliente"
|
||||
@@ -588,7 +629,6 @@ pt-BR:
|
||||
products_max_quantity: Quantidade máxima
|
||||
products_distributor: Distribuidor
|
||||
products_distributor_info: Quando você selecionar um distribuidor para seu pedido, o endereço e data para retirada serão exibidos aqui.
|
||||
shop_trial_length: "Duração de Avaliação da Loja (dias)"
|
||||
shop_trial_expires_in: "O período de avaliação do mercado termina em "
|
||||
shop_trial_expired_notice: "Boa notícia! Decidimos extender o período avaliação do mercado até segunda ordem. "
|
||||
password: Senha
|
||||
@@ -811,16 +851,6 @@ pt-BR:
|
||||
roles: "Papeis"
|
||||
update: "Atualizar"
|
||||
add_producer_property: "Adicionar produtor"
|
||||
admin_settings: "Preferências do Sistema"
|
||||
update_invoice: "Atualizar faturas"
|
||||
finalise_invoice: "Finalizar Faturas"
|
||||
finalise_user_invoices: "Finalizar Faturas de Usuário"
|
||||
finalise_user_invoice_explained: "Usar este botão para finalizar todos as faturas no sistema para o calendário do mês anterior. "
|
||||
manually_run_task: "Rodar Tarefa Manualmente"
|
||||
update_user_invoices: "Atualizar Fatura de Usuário"
|
||||
update_user_invoice_explained: "Usar este botão para atualizar imediamente todas as faturas no sistema para o mês atual, para cada usuário da empresa no sistema. Essa tarefa pode ser automatizada para rodar automaticamente toda noite. "
|
||||
auto_finalise_invoices: "Finalizar automaticamente as faturas no dia 2 de cada mês, à 1:30am"
|
||||
auto_update_invoices: "Atualizar automaticamente faturas toda as noites, a 1:00 am"
|
||||
in_progress: "Em andamento"
|
||||
started_at: "Começou em "
|
||||
queued: "Aguardando"
|
||||
@@ -831,8 +861,6 @@ pt-BR:
|
||||
no_customers_found: "Nenhum cliente encontrado"
|
||||
go: "Ir"
|
||||
hub: "Central"
|
||||
accounts_administration_distributor: "distribuidor de administração de contas"
|
||||
accounts_and_billing: "Contas e Faturamento"
|
||||
producer: "Produtor"
|
||||
product: "Produto"
|
||||
price: "Preço"
|
||||
|
||||
@@ -39,16 +39,12 @@ sv:
|
||||
must_have_valid_business_number: "%{enterprise_name} måste ha ett giltigt organisationsnummer innan fakturor kan skickas."
|
||||
invoice: "Faktura"
|
||||
percentage_of_sales: "%{percentage} av försäljning"
|
||||
percentage_of_turnover: "Procent av omsättning"
|
||||
monthly_cap_excl_tax: "månatligt tak (exkl. moms)"
|
||||
capped_at_cap: "begränsat till %{cap}"
|
||||
per_month: "per månad"
|
||||
free: "gratis"
|
||||
free_trial: "prova gratis"
|
||||
plus_tax: "plus Moms"
|
||||
total_monthly_bill_incl_tax: "Total Månadskostnad (Inkl. Skatter)"
|
||||
min_bill_turnover_desc: "när omsättning överskrider %{mbt_amount}"
|
||||
business_model_configuration: "Konfigurera affärsmodell"
|
||||
say_no: "Nej"
|
||||
say_yes: "Ja"
|
||||
then: då
|
||||
@@ -81,6 +77,51 @@ sv:
|
||||
tag_has_rules: "Regler för denna tagg: %{num}"
|
||||
has_one_rule: "har en regel"
|
||||
has_n_rules: "har %{num} regler"
|
||||
accounts_and_billing_settings:
|
||||
method_settings:
|
||||
default_accounts_payment_method: "Default Accounts Payment Method"
|
||||
default_accounts_shipping_method: "Default Accounts Shipping Method"
|
||||
edit:
|
||||
accounts_and_billing: "Konton och fakturering"
|
||||
accounts_administration_distributor: "distributör av bokföringsadministration"
|
||||
admin_settings: "Inställningar"
|
||||
update_invoice: "Uppdatera fakturor"
|
||||
finalise_invoice: "Slutför fakturor"
|
||||
finalise_user_invoices: "Slutför användarafakturor"
|
||||
finalise_user_invoice_explained: "Använd den här knappen för att slutföra alla fakturor i systemet för den gångna månaden. Denna uppgift ställas in så att den utförs automatiskt en gång per månad."
|
||||
manually_run_task: "Manuellt utförda uppgifter"
|
||||
update_user_invoices: "Uppdatera användarfakturor"
|
||||
update_user_invoice_explained: "Använd denna knapp för att omedelbart uppdatera alla fakturor innevarande månad för alla företag i systemet. Den här uppgiften kan ställas in så att den automatiskt utförs varje natt."
|
||||
auto_finalise_invoices: "Automatisk summering av fakturor den 2:a kl 01.30 "
|
||||
auto_update_invoices: "Automatisk uppdatering av fakturor varje natt kl 01.00"
|
||||
business_model_configuration:
|
||||
edit:
|
||||
business_model_configuration: "Konfigurera affärsmodell"
|
||||
business_model_configuration_tip: "Configure the rate at which shops will be charged each month for use of the Open Food Network."
|
||||
bill_calculation_settings: "Bill Calculation Settings"
|
||||
bill_calculation_settings_tip: "Adjust the amount that enterprises will be billed each month for use of the OFN."
|
||||
shop_trial_length: "Försökstiden är (dagar)"
|
||||
shop_trial_length_tip: "The length of time (in days) that enterprises who are set up as shops can run as a trial period."
|
||||
fixed_monthly_charge: "Fixed Monthly Charge"
|
||||
fixed_monthly_charge_tip: "A fixed monthly charge for all enterprises who are set up as a shop and have exceeded the minimum billable turnover (if set)."
|
||||
percentage_of_turnover: "Procent av omsättning"
|
||||
percentage_of_turnover_tip: "When greater than zero, this rate (0.0 - 1.0) will be applied to the total turnover of each shop and added to any fixed charges (to the left) to calculate the monthly bill."
|
||||
monthly_cap_excl_tax: "månatligt tak (exkl. moms)"
|
||||
monthly_cap_excl_tax_tip: "When greater than zero, this value will be used as a cap on the amount that shops will be charged each month."
|
||||
tax_rate: "Tax Rate"
|
||||
tax_rate_tip: "Tax rate that applies to the the monthly bill that enterprises are charged for using the system."
|
||||
minimum_monthly_billable_turnover: "Minimum Monthly Billable Turnover"
|
||||
minimum_monthly_billable_turnover_tip: "Minimum monthly turnover before a shopfront will be charged for using OFN. Enterprises turning over less than this amount in a month will not be charged, either as a percentage or fixed rate."
|
||||
example_bill_calculator: "Example Bill Calculator"
|
||||
example_bill_calculator_legend: "Alter the example turnover to visualise the effect of the settings to the left."
|
||||
example_monthly_turnover: "Example Monthly Turnover"
|
||||
example_monthly_turnover_tip: "An example monthly turnover for an enterprise which will be used to generate calculate an example monthly bill below."
|
||||
cap_reached?: "Cap Reached ?"
|
||||
cap_reached?_tip: "Whether the cap (specified to the left) has been reached, given the settings and the turnover provided."
|
||||
included_tax: "Included tax"
|
||||
included_tax_tip: "The total tax included in the example monthly bill, given the settings and the turnover provided."
|
||||
total_monthly_bill_incl_tax: "Total Månadskostnad (Inkl. Skatter)"
|
||||
total_monthly_bill_incl_tax_tip: "The example total monthly bill with tax included, given the settings and the turnover provided."
|
||||
customers:
|
||||
index:
|
||||
add_customer: "Lägg till kund"
|
||||
@@ -594,7 +635,6 @@ sv:
|
||||
products_max_quantity: Maxkvantitet
|
||||
products_distributor: Distributör
|
||||
products_distributor_info: När du väljer distributör för din order kommer leveranstider att visas här
|
||||
shop_trial_length: "Försökstiden är (dagar)"
|
||||
shop_trial_expires_in: "Din försökstid för skyltfönster gå ut om"
|
||||
shop_trial_expired_notice: "Goda nyheter! Vi har beslutat utöka skyltfönstrets försökstid tills vidare. "
|
||||
password: Lösenord
|
||||
@@ -823,16 +863,6 @@ sv:
|
||||
roles: "Uppgifter"
|
||||
update: "Uppdatera"
|
||||
add_producer_property: "Lägg till producentegenskaper"
|
||||
admin_settings: "Inställningar"
|
||||
update_invoice: "Uppdatera fakturor"
|
||||
finalise_invoice: "Slutför fakturor"
|
||||
finalise_user_invoices: "Slutför användarafakturor"
|
||||
finalise_user_invoice_explained: "Använd den här knappen för att slutföra alla fakturor i systemet för den gångna månaden. Denna uppgift ställas in så att den utförs automatiskt en gång per månad."
|
||||
manually_run_task: "Manuellt utförda uppgifter"
|
||||
update_user_invoices: "Uppdatera användarfakturor"
|
||||
update_user_invoice_explained: "Använd denna knapp för att omedelbart uppdatera alla fakturor innevarande månad för alla företag i systemet. Den här uppgiften kan ställas in så att den automatiskt utförs varje natt."
|
||||
auto_finalise_invoices: "Automatisk summering av fakturor den 2:a kl 01.30 "
|
||||
auto_update_invoices: "Automatisk uppdatering av fakturor varje natt kl 01.00"
|
||||
in_progress: "Under bearbetning"
|
||||
started_at: "Startade kl"
|
||||
queued: "Köad"
|
||||
@@ -843,8 +873,6 @@ sv:
|
||||
no_customers_found: "Inga kunder hittade"
|
||||
go: "Kör igång"
|
||||
hub: "Matställe"
|
||||
accounts_administration_distributor: "distributör av bokföringsadministration"
|
||||
accounts_and_billing: "Konton och fakturering"
|
||||
producer: "Producent"
|
||||
product: "Produkt"
|
||||
price: "Pris"
|
||||
|
||||
@@ -145,6 +145,8 @@ Openfoodnetwork::Application.routes.draw do
|
||||
resources :column_preferences, only: [], format: :json do
|
||||
put :bulk_update, on: :collection
|
||||
end
|
||||
|
||||
resource :invoice_settings, only: [:edit, :update]
|
||||
end
|
||||
|
||||
namespace :api do
|
||||
@@ -247,6 +249,7 @@ Spree::Core::Engine.routes.prepend do
|
||||
resources :orders do
|
||||
get :invoice, on: :member
|
||||
get :print, on: :member
|
||||
get :print_ticket, on: :member
|
||||
get :managed, on: :collection
|
||||
end
|
||||
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
class AddInvoiceTextAndInvoiceLogoToEnterprises < ActiveRecord::Migration
|
||||
def change
|
||||
add_column :enterprises, :invoice_text, :text
|
||||
add_column :enterprises, :display_invoice_logo, :boolean, default: false
|
||||
end
|
||||
end
|
||||
@@ -11,7 +11,7 @@
|
||||
#
|
||||
# It's strongly recommended to check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(:version => 20160921060442) do
|
||||
ActiveRecord::Schema.define(:version => 20161215230219) do
|
||||
|
||||
create_table "account_invoices", :force => true do |t|
|
||||
t.integer "user_id", :null => false
|
||||
@@ -249,6 +249,8 @@ ActiveRecord::Schema.define(:version => 20160921060442) do
|
||||
t.string "email_address"
|
||||
t.boolean "require_login", :default => false, :null => false
|
||||
t.boolean "allow_guest_orders", :default => true, :null => false
|
||||
t.text "invoice_text"
|
||||
t.boolean "display_invoice_logo", :default => false
|
||||
end
|
||||
|
||||
add_index "enterprises", ["address_id"], :name => "index_enterprises_on_address_id"
|
||||
|
||||
@@ -9,9 +9,27 @@ module OpenFoodNetwork
|
||||
end
|
||||
|
||||
def header
|
||||
["Order number", "Date", "Items", "Items total (#{currency_symbol})", "Taxable Items Total (#{currency_symbol})",
|
||||
"Sales Tax (#{currency_symbol})", "Delivery Charge (#{currency_symbol})", "Tax on Delivery (#{currency_symbol})", "Tax on Fees (#{currency_symbol})",
|
||||
"Total Tax (#{currency_symbol})", "Customer", "Distributor"]
|
||||
case params[:report_type]
|
||||
when "tax_rates"
|
||||
[I18n.t(:report_header_order_number),
|
||||
I18n.t(:report_header_total_excl_vat, currency_symbol: currency_symbol)] +
|
||||
relevant_rates.map { |rate| "%.1f%% (%s)" % [rate.to_f * 100, currency_symbol] } +
|
||||
[I18n.t(:report_header_total_tax, currency_symbol: currency_symbol),
|
||||
I18n.t(:report_header_total_incl_vat, currency_symbol: currency_symbol)]
|
||||
else
|
||||
[I18n.t(:report_header_order_number),
|
||||
I18n.t(:report_header_date),
|
||||
I18n.t(:report_header_items),
|
||||
I18n.t(:report_header_items_total, currency_symbol: currency_symbol),
|
||||
I18n.t(:report_header_taxable_items_total, currency_symbol: currency_symbol),
|
||||
I18n.t(:report_header_sales_tax, currency_symbol: currency_symbol),
|
||||
I18n.t(:report_header_delivery_charge, currency_symbol: currency_symbol),
|
||||
I18n.t(:report_header_tax_on_delivery, currency_symbol: currency_symbol),
|
||||
I18n.t(:report_header_tax_on_fees, currency_symbol: currency_symbol),
|
||||
I18n.t(:report_header_total_tax, currency_symbol: currency_symbol),
|
||||
I18n.t(:report_header_customer),
|
||||
I18n.t(:report_header_distributor)]
|
||||
end
|
||||
end
|
||||
|
||||
def search
|
||||
@@ -24,19 +42,33 @@ module OpenFoodNetwork
|
||||
end
|
||||
|
||||
def table
|
||||
orders.map do |order|
|
||||
totals = totals_of order.line_items
|
||||
shipping_cost = shipping_cost_for order
|
||||
case params[:report_type]
|
||||
when "tax_rates"
|
||||
orders.map do |order|
|
||||
[order.number, order.total - order.total_tax] +
|
||||
relevant_rates.map { |rate| order.tax_adjustment_totals.fetch(rate, 0) } +
|
||||
[order.total_tax, order.total]
|
||||
end
|
||||
else
|
||||
orders.map do |order|
|
||||
totals = totals_of order.line_items
|
||||
shipping_cost = shipping_cost_for order
|
||||
|
||||
[order.number, order.created_at, totals[:items], totals[:items_total],
|
||||
totals[:taxable_total], totals[:sales_tax], shipping_cost, order.shipping_tax, order.enterprise_fee_tax, order.total_tax,
|
||||
order.bill_address.full_name, order.distributor.andand.name]
|
||||
[order.number, order.created_at, totals[:items], totals[:items_total],
|
||||
totals[:taxable_total], totals[:sales_tax], shipping_cost, order.shipping_tax, order.enterprise_fee_tax, order.total_tax,
|
||||
order.bill_address.full_name, order.distributor.andand.name]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
private
|
||||
|
||||
def relevant_rates
|
||||
return @relevant_rates unless @relevant_rates.nil?
|
||||
@relevant_rates = Spree::TaxRate.pluck(:amount).uniq
|
||||
end
|
||||
|
||||
def totals_of(line_items)
|
||||
totals = {items: 0, items_total: 0.0, taxable_total: 0.0, sales_tax: 0.0}
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ feature 'Business Model Configuration' do
|
||||
|
||||
click_button "Update"
|
||||
|
||||
expect(page).to have_content "Business model configuration has been successfully updated!"
|
||||
expect(page).to have_content "Business Model has been successfully updated!"
|
||||
expect(Spree::Config.account_invoices_monthly_fixed).to eq 10
|
||||
expect(Spree::Config.account_invoices_monthly_rate).to eq 0.05
|
||||
expect(Spree::Config.account_invoices_monthly_cap).to eq 30
|
||||
|
||||
@@ -199,6 +199,7 @@ feature %q{
|
||||
login_to_admin_as user1
|
||||
click_link "Reports"
|
||||
click_link "Sales Tax"
|
||||
select("Tax types", from: "report_type")
|
||||
end
|
||||
|
||||
it "reports" do
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
require 'spec_helper'
|
||||
|
||||
feature "Registration", js: true do
|
||||
include AuthenticationWorkflow
|
||||
include WebHelper
|
||||
|
||||
describe "Registering a Profile" do
|
||||
let(:user) { create(:user, password: "password", password_confirmation: "password") }
|
||||
before { Spree::Config.enterprises_require_tos = false }
|
||||
|
||||
it "Allows a logged in user to register a profile" do
|
||||
visit registration_path
|
||||
|
||||
expect(Spree::Config.enterprises_require_tos).to eq false
|
||||
expect(URI.parse(current_url).path).to eq registration_auth_path
|
||||
|
||||
page.has_selector? "dd", text: "Login"
|
||||
@@ -23,7 +26,7 @@ feature "Registration", js: true do
|
||||
|
||||
# Done reading introduction
|
||||
page.has_content?
|
||||
click_and_ensure(:button, "Let's get started!", lambda { page.has_content? 'Woot!' })
|
||||
perform_and_ensure(:click_button, "Let's get started!", lambda { page.has_content? 'Woot!' })
|
||||
|
||||
# Filling in details
|
||||
fill_in 'enterprise_name', with: "My Awesome Enterprise"
|
||||
@@ -34,18 +37,18 @@ feature "Registration", js: true do
|
||||
fill_in 'enterprise_zipcode', with: '3070'
|
||||
select 'Australia', from: 'enterprise_country'
|
||||
select 'VIC', from: 'enterprise_state'
|
||||
click_and_ensure(:button, "Continue", lambda { page.has_content? 'Who is responsible for managing My Awesome Enterprise?' })
|
||||
perform_and_ensure(:click_button, "Continue", lambda { page.has_content? 'Who is responsible for managing My Awesome Enterprise?' })
|
||||
|
||||
|
||||
# Filling in Contact Details
|
||||
fill_in 'enterprise_contact', with: 'Saskia Munroe'
|
||||
page.should have_field 'enterprise_email_address', with: user.email
|
||||
fill_in 'enterprise_phone', with: '12 3456 7890'
|
||||
click_and_ensure(:button, "Continue", lambda { page.has_content? 'Last step to add My Awesome Enterprise!' })
|
||||
perform_and_ensure(:click_button, "Continue", lambda { page.has_content? 'Last step to add My Awesome Enterprise!' })
|
||||
|
||||
# Choosing a type
|
||||
click_and_ensure(:link, 'producer-panel', lambda { page.has_content? '#producer-panel.selected' } )
|
||||
click_and_ensure(:button, "Create Profile", lambda { page.has_content? 'Nice one!' })
|
||||
perform_and_ensure(:click_link, 'producer-panel', lambda { page.has_selector? '#producer-panel.selected' } )
|
||||
perform_and_ensure(:click_button, "Create Profile", lambda { page.has_content? 'Nice one!' })
|
||||
|
||||
# Enterprise should be created
|
||||
e = Enterprise.find_by_name('My Awesome Enterprise')
|
||||
@@ -60,7 +63,7 @@ feature "Registration", js: true do
|
||||
fill_in 'enterprise_abn', with: '12345'
|
||||
fill_in 'enterprise_acn', with: '54321'
|
||||
choose 'Yes' # enterprise_charges_sales_tax
|
||||
click_and_ensure(:button, "Continue", lambda { page.has_content? 'Step 1. Select Logo Image' })
|
||||
perform_and_ensure(:click_button, "Continue", lambda { page.has_content? 'Step 1. Select Logo Image' })
|
||||
|
||||
# Enterprise should be updated
|
||||
e.reload
|
||||
@@ -72,10 +75,10 @@ feature "Registration", js: true do
|
||||
|
||||
# Images
|
||||
# Move from logo page
|
||||
click_and_ensure(:button, "Continue", lambda { page.has_content? 'Step 3. Select Promo Image' })
|
||||
perform_and_ensure(:click_button, "Continue", lambda { page.has_content? 'Step 3. Select Promo Image' })
|
||||
|
||||
# Move from promo page
|
||||
click_and_ensure(:button, "Continue", lambda { page.has_content? 'How can people find My Awesome Enterprise online?' })
|
||||
perform_and_ensure(:click_button, "Continue", lambda { page.has_content? 'How can people find My Awesome Enterprise online?' })
|
||||
|
||||
# Filling in social
|
||||
fill_in 'enterprise_website', with: 'www.shop.com'
|
||||
@@ -83,7 +86,7 @@ feature "Registration", js: true do
|
||||
fill_in 'enterprise_linkedin', with: 'LiNkEdIn'
|
||||
fill_in 'enterprise_twitter', with: '@TwItTeR'
|
||||
fill_in 'enterprise_instagram', with: '@InStAgRaM'
|
||||
click_and_ensure(:button, "Continue", lambda { page.has_content? 'Finished!' })
|
||||
perform_and_ensure(:click_button, "Continue", lambda { page.has_content? 'Finished!' })
|
||||
|
||||
# Done
|
||||
expect(page).to have_content "We've sent a confirmation email to #{user.email} if it hasn't been activated before."
|
||||
@@ -94,6 +97,42 @@ feature "Registration", js: true do
|
||||
expect(e.twitter).to eq "@TwItTeR"
|
||||
expect(e.instagram).to eq "@InStAgRaM"
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe "Terms of Service agreement" do
|
||||
let!(:user2) { create(:user) }
|
||||
|
||||
before do
|
||||
quick_login_as user2
|
||||
end
|
||||
|
||||
context "if accepting Terms of Service is not required" do
|
||||
before { Spree::Config.enterprises_require_tos = false }
|
||||
|
||||
it "allows registration as normal" do
|
||||
visit registration_path
|
||||
|
||||
click_button "Let's get started!"
|
||||
find("div#progress-bar").visible?.should be_true
|
||||
end
|
||||
end
|
||||
|
||||
context "if accepting Terms of Service is required" do
|
||||
before { Spree::Config.enterprises_require_tos = true }
|
||||
|
||||
it "does not allow registration unless checkbox is checked" do
|
||||
visit registration_path
|
||||
|
||||
expect(page).to have_content "Terms of Service"
|
||||
expect(page).to have_selector "input.button.primary[disabled]"
|
||||
|
||||
perform_and_ensure(:check, "accept_terms", lambda { page.has_no_selector? "input.button.primary[disabled]" })
|
||||
|
||||
click_button "Let's get started!"
|
||||
find("div#progress-bar").visible?.should be_true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def switch_to_login_tab
|
||||
@@ -117,13 +156,16 @@ feature "Registration", js: true do
|
||||
expect(page).to have_content content
|
||||
end
|
||||
|
||||
def click_and_ensure(type, text, check)
|
||||
# Buttons appear to be unresponsive for a while, so keep clicking them until content appears
|
||||
def perform_and_ensure(action, *args, assertion)
|
||||
# Buttons/Links/Checkboxes appear to be unresponsive for a while
|
||||
# so keep clicking them until assertion is satified
|
||||
using_wait_time 0.5 do
|
||||
10.times do
|
||||
send("click_#{type}", text)
|
||||
break if check.call
|
||||
send(action, *args)
|
||||
return if assertion.call
|
||||
end
|
||||
# Only make it here if we have tried 10 times
|
||||
expect(assertion.call).to be true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user